LyoKICogSGVscCBWaWV3ZXIKICoKICogQ29weXJpZ2h0IDE5OTYgVWxyaWNoIFNjaG1pZAogKiBDb3B5cmlnaHQgMTk5OSBQYWJsbyBTYXJhdHhhZ2EKICogQ29weXJpZ2h0IDIwMDIgU3lsdmFpbiBQZXRyZW9sbGUgPHNwZXRyZW9sbGVAeWFob28uZnI+CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCiNpZmRlZiBMQU5HX1dBTE9OCgovKiBNZW51ICovCgpNQUlOX01FTlUgTUVOVSBMQU5HVUFHRSBMQU5HX1dBTE9OLCBTVUJMQU5HX0RFRkFVTFQKewogUE9QVVAgIiZGaXRjaO4iIHsKICBNRU5VSVRFTSAiJkRyb3buLi4uIiwgTU5JRF9GSUxFX09QRU4KICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJlJleGhlIiwgTU5JRF9GSUxFX1BSSU5UCiAgTUVOVUlURU0gIiZBcG9udGlhZWRqZSBkZWwgc2NyaXJlY2UuLi4iLCBNTklEX0ZJTEVfU0VUVVAKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIk1vdXNz7iAmRm/7IiwgTU5JRF9GSUxFX0VYSVQKIH0KIFBPUFVQICImQ2FuZGruIiB7CiAgIE1FTlVJVEVNICImQ29wee4uLi4iLCBNTklEX0VESVRfQ09QWURMRwogICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgTUVOVUlURU0gIiZTaWNy7nJlLi4uIiwgTU5JRF9FRElUX0FOTk9UQVRFCiB9CiBQT1BVUCAiJlJpbeVya2VzIiB7CiAgIE1FTlVJVEVNICImRGVmaW5pLi4uIiwgTU5JRF9CS01LX0RFRklORQogfQogUE9QVVAgIiZBaWRlIiB7CiAgIE1FTlVJVEVNICImQWlkZSBzbyBsJyBBaWRlIiwgTU5JRF9IRUxQX0hFTFBPTgogICBNRU5VSVRFTSAiVG9kaSAmVmlzaWJlIiwgTU5JRF9IRUxQX0hFTFBUT1AKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICImSW5mb3Jt5WNpb24uLi4iLCBNTklEX0hFTFBfQUJPVVQKI2lmZGVmIFdJTkVMSUIKICAgTUVOVUlURU0gIsUgJmRmYWl0IGRpIFdJTkVFIiwgTU5JRF9IRUxQX1dJTkUKI2VuZGlmCiB9Cn0KCi8qIFN0cmluZ3MgKi8KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIExBTkdVQUdFIExBTkdfV0FMT04sIFNVQkxBTkdfREVGQVVMVAp7ClNUSURfV0lORV9IRUxQLCAJIkFpZGFuY2UgZGkgV0lORSIKU1RJRF9XSEVSUk9SLCAJCSJBUk9LRSIKU1RJRF9XQVJOSU5HLCAgCQkiQURWRVJUSVhITUlOVCIKU1RJRF9JTkZPLCAgCQkiSW5mb3Jt5WNpb24iClNUSURfTk9UX0lNUExFTUVOVEVELCAJIk7pbiBjbyBwb3NzaWJlIgpTVElEX0hMUEZJTEVfRVJST1JfcywgCSJZ5WsgbicgYSBu6W4gc3TuIOUgbW91bWludCBkaSBsZXJlIGxpIGZpdGNo7iBkJyBhaWRlIGAlcyciClNUSURfQ09OVEVOVFMsIAkJIsUmZHZpbnMiClNUSURfU0VBUkNILCAJCSJDJndlcu4iClNUSURfQkFDSywgCQkiyG4gJkVy7iIKU1RJRF9ISVNUT1JZLCAJCSImSXN0d2VyZSIKU1RJRF9UT1BJQ1MsCQkiJlRvcGljcyIKU1RJRF9BTExfRklMRVMsIAkiVG9zIGxlcyBmaXRjaO5zICgqLiopIgpTVElEX0hFTFBfRklMRVNfSExQLCAJIkZpdGNo7nMgZCcgYWlkZSAoKi5obHApIgpTVElEX0ZJTEVfTk9UX0ZPVU5EX3MJIkNhbm5vdCBmaW5kICclcycuIERvIHlvdSB3YW50IHRvIGZpbmQgdGhpcyBmaWxlIHlvdXJzZWxmPyIKfQoKI2VuZGlmICAvKiBMQU5HX1dBTE9OICovCg==