IwojIE1ha2VmaWxlIGZvciBGcmVlVHlwZTIgbGluayBsaWJyYXJ5IHVzaW5nIGdjYyAzLjQuMyBmcm9tIHRoZQojIEFtaWdhT1M0IFNESwojCgoKIyBDb3B5cmlnaHQgMjAwNSBieQojIFdlcm5lciBMZW1iZXJnIGFuZCBEZXRsZWYgV/xya25lci4KIwojIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCiMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAojIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CiMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKIyBmdWxseS4KCgojIHRvIGJ1aWxkIGZyb20gdGhlIGJ1aWxkcy9hbWlnYSBkaXJlY3RvcnkgY2FsbAojCiMgIG1ha2UKIwojIFlvdXIgcHJvZ3JhbXMgc291cmNlIGNvZGUgc2hvdWxkIHN0YXJ0IHdpdGggdGhpcwojICh1bmNvbW1lbnQgdGhlIHBhcnRzIHlvdSBkbyBub3QgbmVlZCB0byBrZWVwIHRoZSBwcm9ncmFtIHNtYWxsKToKIyAtLS04PC0tLQojZGVmaW5lIEZUX1VTRV9BVVRPRklUIC8vIGF1dG9maXR0ZXIKI2RlZmluZSBGVF9VU0VfUkFTVEVSICAvLyBtb25vY2hyb21lIHJhc3Rlcml6ZXIKI2RlZmluZSBGVF9VU0VfU01PT1RIICAvLyBhbnRpLWFsaWFzaW5nIHJhc3Rlcml6ZXIKI2RlZmluZSBGVF9VU0VfVFQgICAgICAvLyB0cnVldHlwZSBmb250IGRyaXZlcgojZGVmaW5lIEZUX1VTRV9UMSAgICAgIC8vIHR5cGUxIGZvbnQgZHJpdmVyCiNkZWZpbmUgRlRfVVNFX1Q0MiAgICAgLy8gdHlwZTQyIGZvbnQgZHJpdmVyCiNkZWZpbmUgRlRfVVNFX1QxQ0lEICAgLy8gY2lkLWtleWVkIHR5cGUxIGZvbnQgZHJpdmVyCiNkZWZpbmUgRlRfVVNFX0NGRiAgICAgLy8gb3BlbnR5cGUgZm9udCBkcml2ZXIKI2RlZmluZSBGVF9VU0VfQkRGICAgICAvLyBiZGYgYml0bWFwIGZvbnQgZHJpdmVyCiNkZWZpbmUgRlRfVVNFX1BDRiAgICAgLy8gcGNmIGJpdG1hcCBmb250IGRyaXZlcgojZGVmaW5lIEZUX1VTRV9QRlIgICAgIC8vIHBmciBmb250IGRyaXZlcgojZGVmaW5lIEZUX1VTRV9XSU5GTlQgIC8vIHdpbmRvd3MgLmZudHwuZm9uIGJpdG1hcCBmb250IGRyaXZlcgojZGVmaW5lIEZUX1VTRV9PVFYgICAgIC8vIG9wZW50eXBlIHZhbGlkYXRvcgojZGVmaW5lIEZUX1VTRV9HWFYgICAgIC8vIHRydWV0eXBlIGd4IHZhbGlkYXRvcgojaW5jbHVkZSAiRlQ6c3JjL2Jhc2UvZnRpbml0LmMiCiMgLS0tODwtLS0KIwojIGxpbmsgeW91ciBwcm9ncmFtcyB3aXRoIGxpYmZ0Ml9wcGMuYSBhbmQgZWl0aGVyIGZ0c3lzdGVtLnBwYy5vIG9yIGZ0c3lzdGVtcHVyZS5wcGMubwojIChhbmQgZWl0aGVyIGZ0ZGVidWcucHBjLm8gb3IgZnRkZWJ1Z3B1cmUucHBjLm8gaWYgeW91IGVuYWJsZWQgRlRfREVCVUdfTEVWRUxfRVJST1Igb3IKIyBGVF9ERUJVR19MRVZFTF9UUkFDRSBpbiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oKS4KCmFsbDoJYXNzaWduIGxpYmZ0Ml9wcGMuYSBmdHN5c3RlbS5wcGMubyBmdHN5c3RlbXB1cmUucHBjLm8KCmFzc2lnbjoKCWFzc2lnbiBGVDogLy8KCkNDID0gICAgIHBwYy1hbWlnYW9zLWdjYwpBUiA9ICAgICBwcGMtYW1pZ2Fvcy1hcgpSQU5MSUIgPSBwcGMtYW1pZ2Fvcy1yYW5saWIKCkRJUkZMQUdTICA9IC1JaW5jbHVkZSAtSS9GVC9zcmMgLUkvRlQvaW5jbHVkZSAtSS9TREsvaW5jbHVkZQoKV0FSTklOR1MgPSAtV2FsbCAtVyAtV3VuZGVmIC1XcG9pbnRlci1hcml0aCAtV2JhZC1mdW5jdGlvbi1jYXN0IFwKCSAgIC1XYWdncmVnYXRlLXJldHVybiAtV3NoYWRvdwoKQ1BVICAgICAgPSAtbWNwdT02MDRlCgpPUFRJT05TICA9IC1ETkRFQlVHIC1mbm8tYnVpbHRpbgpPUFRJTUlaRSA9IC1PMiAtZm9taXQtZnJhbWUtcG9pbnRlciAtZnN0cmVuZ3RoLXJlZHVjZSAtZmlubGluZS1mdW5jdGlvbnMKCkNGTEFHUyAgID0gJChESVJGTEFHUykgJChXQVJOSU5HUykgJChGVDJGTEFHUykgJChDUFUpICQoT1BUSU9OUykgJChPUFRJTUlaRSkKCiMKIyBGcmVlVHlwZTIgbGlicmFyeSBiYXNlCiMKZnRiYXNlLnBwYy5vOiBGVDpzcmMvYmFzZS9mdGJhc2UuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvYmFzZS9mdGJhc2UuYwoKZnRpbml0LnBwYy5vOiBGVDpzcmMvYmFzZS9mdGluaXQuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvYmFzZS9mdGluaXQuYwoKZnRzeXN0ZW0ucHBjLm86IEZUOnNyYy9iYXNlL2Z0c3lzdGVtLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2Jhc2UvZnRzeXN0ZW0uYwoKIyBwdXJlIHZlcnNpb24gZm9yIHVzZSBpbiBydW4tdGltZSBsaWJyYXJ5IGV0YwpmdHN5c3RlbXB1cmUucHBjLm86IHNyYy9iYXNlL2Z0c3lzdGVtLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCBzcmMvYmFzZS9mdHN5c3RlbS5jCgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgYmFzZSBleHRlbnNpb25zCiMKZnRiYm94LnBwYy5vOiBGVDpzcmMvYmFzZS9mdGJib3guYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvYmFzZS9mdGJib3guYwoKZnRiZGYucHBjLm86IEZUOnNyYy9iYXNlL2Z0YmRmLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2Jhc2UvZnRiZGYuYwoKZnRiaXRtYXAucHBjLm86IEZUOnNyYy9iYXNlL2Z0Yml0bWFwLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2Jhc2UvZnRiaXRtYXAuYwoKZnRkZWJ1Zy5wcGMubzogRlQ6c3JjL2Jhc2UvZnRkZWJ1Zy5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9iYXNlL2Z0ZGVidWcuYwoKIyBwdXJlIHZlcnNpb24gZm9yIHVzZSBpbiBydW4tdGltZSBsaWJyYXJ5IGV0YwpmdGRlYnVncHVyZS5wcGMubzogc3JjL2Jhc2UvZnRkZWJ1Zy5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgc3JjL2Jhc2UvZnRkZWJ1Zy5jCgpmdGdseXBoLnBwYy5vOiBGVDpzcmMvYmFzZS9mdGdseXBoLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2Jhc2UvZnRnbHlwaC5jCgpmdGd4dmFsLnBwYy5vOiBGVDpzcmMvYmFzZS9mdGd4dmFsLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2Jhc2UvZnRneHZhbC5jCgpmdG1tLnBwYy5vOiBGVDpzcmMvYmFzZS9mdG1tLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2Jhc2UvZnRtbS5jCgpmdG90dmFsLnBwYy5vOiBGVDpzcmMvYmFzZS9mdG90dmFsLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2Jhc2UvZnRvdHZhbC5jCgpmdHBmci5wcGMubzogRlQ6c3JjL2Jhc2UvZnRwZnIuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvYmFzZS9mdHBmci5jCgpmdHN0cm9rZS5wcGMubzogRlQ6c3JjL2Jhc2UvZnRzdHJva2UuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvYmFzZS9mdHN0cm9rZS5jCgpmdHN5bnRoLnBwYy5vOiBGVDpzcmMvYmFzZS9mdHN5bnRoLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2Jhc2UvZnRzeW50aC5jCgpmdHR5cGUxLnBwYy5vOiBGVDpzcmMvYmFzZS9mdHR5cGUxLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2Jhc2UvZnR0eXBlMS5jCgpmdHdpbmZudC5wcGMubzogRlQ6c3JjL2Jhc2UvZnR3aW5mbnQuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvYmFzZS9mdHdpbmZudC5jCgpmdHhmODYucHBjLm86IEZUOnNyYy9iYXNlL2Z0eGY4Ni5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9iYXNlL2Z0eGY4Ni5jCgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgYXV0b2ZpdHRpbmcgbW9kdWxlCiMKYXV0b2ZpdC5wcGMubzogRlQ6c3JjL2F1dG9maXQvYXV0b2ZpdC5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9hdXRvZml0L2F1dG9maXQuYwoKIwojIEZyZWVUeXBlMiBsaWJyYXJ5IHBvc3RzY3JpcHQgaGludGluZyBtb2R1bGUKIwpwc2hpbnRlci5wcGMubzogRlQ6c3JjL3BzaGludGVyL3BzaGludGVyLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL3BzaGludGVyL3BzaGludGVyLmMKCiMKIyBGcmVlVHlwZTIgbGlicmFyeSBQUyBzdXBwb3J0IG1vZHVsZQojCnBzYXV4LnBwYy5vOiBGVDpzcmMvcHNhdXgvcHNhdXguYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvcHNhdXgvcHNhdXguYwoKIwojIEZyZWVUeXBlMiBsaWJyYXJ5IFBTIGdseXBoIG5hbWVzIG1vZHVsZQojCnBzbmFtZXMucHBjLm86IEZUOnNyYy9wc25hbWVzL3BzbmFtZXMuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvcHNuYW1lcy9wc25hbWVzLmMKCiMKIyBGcmVlVHlwZTIgbGlicmFyeSBtb25vY2hyb21lIHJhc3RlciBtb2R1bGUKIwpyYXN0ZXIucHBjLm86IEZUOnNyYy9yYXN0ZXIvcmFzdGVyLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL3Jhc3Rlci9yYXN0ZXIuYwoKIwojIEZyZWVUeXBlMiBsaWJyYXJ5IGFudGktYWxpYXNpbmcgcmFzdGVyIG1vZHVsZQojCnNtb290aC5wcGMubzogRlQ6c3JjL3Ntb290aC9zbW9vdGguYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvc21vb3RoL3Ntb290aC5jCgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgJ3NmbnQnIG1vZHVsZQojCnNmbnQucHBjLm86IEZUOnNyYy9zZm50L3NmbnQuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvc2ZudC9zZm50LmMKCiMKIyBGcmVlVHlwZTIgbGlicmFyeSBnbHlwaCBhbmQgaW1hZ2UgY2FjaGluZyBzeXN0ZW0KIwpmdGNhY2hlLnBwYy5vOiBGVDpzcmMvY2FjaGUvZnRjYWNoZS5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9jYWNoZS9mdGNhY2hlLmMKCiMKIyBGcmVlVHlwZTIgbGlicmFyeSBPcGVuVHlwZSBmb250IGRyaXZlcgojCmNmZi5wcGMubzogRlQ6c3JjL2NmZi9jZmYuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvY2ZmL2NmZi5jCgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgVHJ1ZVR5cGUgZm9udCBkcml2ZXIKIwp0cnVldHlwZS5wcGMubzogRlQ6c3JjL3RydWV0eXBlL3RydWV0eXBlLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL3RydWV0eXBlL3RydWV0eXBlLmMKCiMKIyBGcmVlVHlwZTIgbGlicmFyeSBUeXBlMSBmb250IGRyaXZlcgojCnR5cGUxLnBwYy5vOiBGVDpzcmMvdHlwZTEvdHlwZTEuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvdHlwZTEvdHlwZTEuYwoKIwojIEZyZWVUeXBlMiBsaWJyYXJ5IFR5cGU0MiBmb250IGRyaXZlcgojCnR5cGU0Mi5wcGMubzogRlQ6c3JjL3R5cGU0Mi90eXBlNDIuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvdHlwZTQyL3R5cGU0Mi5jCgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgQ0lELWtleWVkIFR5cGUxIGZvbnQgZHJpdmVyCiMKdHlwZTFjaWQucHBjLm86IEZUOnNyYy9jaWQvdHlwZTFjaWQuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvY2lkL3R5cGUxY2lkLmMKCiMKIyBGcmVlVHlwZTIgbGlicmFyeSBCREYgYml0bWFwIGZvbnQgZHJpdmVyCiMKYmRmLnBwYy5vOiBGVDpzcmMvYmRmL2JkZi5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9iZGYvYmRmLmMKCiMKIyBGcmVlVHlwZTIgbGlicmFyeSBQQ0YgYml0bWFwIGZvbnQgZHJpdmVyCiMKcGNmLnBwYy5vOiBGVDpzcmMvcGNmL3BjZi5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9wY2YvcGNmLmMKCiMKIyBGcmVlVHlwZTIgbGlicmFyeSBnemlwIHN1cHBvcnQgZm9yIGNvbXByZXNzZWQgUENGIGJpdG1hcCBmb250cwojCmd6aXAucHBjLm86IEZUOnNyYy9nemlwL2Z0Z3ppcC5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9nemlwL2Z0Z3ppcC5jCgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgY29tcHJlc3Mgc3VwcG9ydCBmb3IgY29tcHJlc3NlZCBQQ0YgYml0bWFwIGZvbnRzCiMKbHp3LnBwYy5vOiBGVDpzcmMvbHp3L2Z0bHp3LmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL2x6dy9mdGx6dy5jCgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgUEZSIGZvbnQgZHJpdmVyCiMKcGZyLnBwYy5vOiBGVDpzcmMvcGZyL3Bmci5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9wZnIvcGZyLmMKCiMKIyBGcmVlVHlwZTIgbGlicmFyeSBXaW5kb3dzIEZOVC9GT04gYml0bWFwIGZvbnQgZHJpdmVyCiMKd2luZm50LnBwYy5vOiBGVDpzcmMvd2luZm9udHMvd2luZm50LmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAvRlQvc3JjL3dpbmZvbnRzL3dpbmZudC5jCgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgVHJ1ZVR5cGVHWCBWYWxpZGF0b3IKIwpneHZhbGlkLnBwYy5vOiBGVDpzcmMvZ3h2YWxpZC9neHZhbGlkLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtV25vLWFnZ3JlZ2F0ZS1yZXR1cm4gLW8gJEAgL0ZUL3NyYy9neHZhbGlkL2d4dmFsaWQuYwoKIwojIEZyZWVUeXBlMiBsaWJyYXJ5IE9wZW5UeXBlIHZhbGlkYXRvcgojCm90dmFsaWQucHBjLm86IEZUOnNyYy9vdHZhbGlkL290dmFsaWQuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvb3R2YWxpZC9vdHZhbGlkLmMKCkJBU0UgPSAgZnRiYXNlLnBwYy5vIGZ0YmJveC5wcGMubyBmdGJkZi5wcGMubyBmdGJpdG1hcC5wcGMubyBmdGdseXBoLnBwYy5vIFwKCWZ0Z3h2YWwucHBjLm8gZnRtbS5wcGMubyBmdG90dmFsLnBwYy5vIGZ0cGZyLnBwYy5vIGZ0c3Ryb2tlLnBwYy5vIFwKCWZ0c3ludGgucHBjLm8gZnR0eXBlMS5wcGMubyBmdHdpbmZudC5wcGMubyBmdHhmODYucHBjLm8KCkRFQlVHID0gZnRkZWJ1Zy5wcGMubyBmdGRlYnVncHVyZS5wcGMubwoKQUZJVCA9IGF1dG9maXQucHBjLm8KCkdYViA9IGd4dmFsaWQucHBjLm8KCk9UViA9IG90dmFsaWQucHBjLm8KClBTID0gcHNhdXgucHBjLm8gcHNuYW1lcy5wcGMubyBwc2hpbnRlci5wcGMubwoKUkFTVEVSID0gcmFzdGVyLnBwYy5vIHNtb290aC5wcGMubwoKRk9OVEQgPSBjZmYucHBjLm8gdHlwZTEucHBjLm8gdHlwZTQyLnBwYy5vIHR5cGUxY2lkLnBwYy5vIHRydWV0eXBlLnBwYy5vXAoJYmRmLnBwYy5vIHBjZi5wcGMubyBwZnIucHBjLm8gd2luZm50LnBwYy5vCgpsaWJmdDJfcHBjLmE6ICAgICAgJChCQVNFKSAkKEFGSVQpICQoR1hWKSAkKE9UVikgJChQUykgJChSQVNURVIpIHNmbnQucHBjLm8gZnRjYWNoZS5wcGMubyAkKEZPTlREKSBnemlwLnBwYy5vIGx6dy5wcGMubwoJJChBUikgciAkQCAkKEJBU0UpICQoQUZJVCkgJChHWFYpICQoT1RWKSAkKFBTKSAkKFJBU1RFUikgc2ZudC5wcGMubyBmdGNhY2hlLnBwYy5vICQoRk9OVEQpIGd6aXAucHBjLm8gbHp3LnBwYy5vCgkkKFJBTkxJQikgJEAKCiNMb2NhbCBWYXJpYWJsZXM6CiNjb2Rpbmc6IGxhdGluLTEKI0VuZDoK