LyoKICogV2luZWZpbGUKICogR2VybWFuIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDAgTWFydGluIEZ1Y2hzCiAqIENvcHlyaWdodCAyMDAyIFN0ZXZlbiBFZHdhcmRzCiAqIENvcHlyaWdodCAyMDAyIEFsZXhhbmRyZSBKdWxsaWFyZAogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0dFUk1BTiwgU1VCTEFOR19HRVJNQU4KCi8qIE1lbnUgKi8KCklETV9XSU5FRklMRSBNRU5VIEZJWEVEIElNUFVSRQp7CglQT1BVUCAiJkRhdGVpIiAgewoJCU1FTlVJVEVNICLWJmZmbmVuXHRFaW5nYWJldGFzdGUiICwJCQkxMDEKCQlNRU5VSVRFTSAiJlZlcnNjaGllYmVuLi4uXHRGNyIgLCAJCQkxMDYKCQlNRU5VSVRFTSAiJktvcGllcmVuLi4uXHRGOCIgLAkJCTEwNwoJCU1FTlVJVEVNICImSW4gWndpc2NoZW5hYmxhZ2UuLi5cdEY5IiAsCQkxMTgKCQlNRU5VSVRFTSAiJkz2c2NoZW5cdEVudGYiICwJCQkxMDgKCQlNRU5VSVRFTSAiJlVtYmVuZW5uZW4uLi4iICwJCQkxMDkKCQlNRU5VSVRFTSAiJkVpZ2Vuc2NoYWZ0ZW4uLi5cdEFsdCtFaW5nYWJldGFzdGUiICwgSURfRURJVF9QUk9QRVJUSUVTCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIksmb21wcmltaWVyZW4uLi4iICwJCTExOQoJCU1FTlVJVEVNICJEZWtvJm1wcmltaWVyZW4uLi4iICwJCTEyMAoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImQXVzZvxocmVuLi4uIiAsCQkJSURfRVhFQ1VURQoJCU1FTlVJVEVNICImRHJ1Y2tlbi4uLiIgLCAJCQkxMDIKCQlNRU5VSVRFTSAiWnVvcmQmbmVuLi4uIiAsCQkxMDMKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiVmVyJnplaWNobmlzIGVyc3RlbGxlbi4uLiIgLAkJCTExMQoJCU1FTlVJVEVNICImU3VjaGVuLi4uIiAsCQkJMTA0CgkJTUVOVUlURU0gIkRhdGVpZW4gYXVzJnfkaGxlbi4uLiIgLAkJCTExNgoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImQmVlbmRlblx0QWx0K1giICwgCQkJSURfRklMRV9FWElUCgl9CgoJUE9QVVAgIkRhJnRlbnRy5GdlciIgIHsKCQlNRU5VSVRFTSAiRGF0ZW50cuRnZXIgJmtvcGllcmVuLi4uIiAsCQkJMjAxCgkJTUVOVUlURU0gIkRhdGVudHLkZ2VyICZiZW5lbm5lbi4uLiIgLAkJCTIwMgoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICJEYXRlbnRy5GdlciAmZm9ybWF0aWVyZW4uLi4iICwJCQkyMDMKI2lmZGVmIF9XSU45NQoJCU1FTlVJVEVNICIuLi4iLAkJCS0xCS8qQEAgKi8KI2VuZGlmCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIk5ldHp3ZXJrbGF1ZndlcmsgJnZlcmJpbmRlbi4uLiIgLAkJCTI1MgoJCU1FTlVJVEVNICJOZXR6d2Vya2xhdWZ3ZXJrICZ0cmVubmVuLi4uIiAsCQkyNTMKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiRiZyZWlnZWJlbiBhbHMuLi4iICwJCQkyNTQKCQlNRU5VSVRFTSAiRnJlaWdhYmUgYmVlbiZkZW4uLi4iICwJCQkyNTUKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiTGF1ZndlcmsgYXVzJnfkaGxlbi4uLiIgLAkJCTI1MQoJfQoKCglQT1BVUCAiJlZlcnplaWNobmlzc2UiICB7CgkJTUVOVUlURU0gIiZO5GNoc3RlIEViZW5lIGVpbmJsZW5kZW5cdCsiICwJCQkzMDEKCQlNRU5VSVRFTSAiJlp3ZWlnIGVpbmJsZW5kZW5cdCoiICwJCTMwMgoJCU1FTlVJVEVNICJBbGxlICZFYmVuZW4gZWluYmxlbmRlblx0U3RyZysqIiAsCQkzMDMKCQlNRU5VSVRFTSAiWndlaWcgJmF1c2JsZW5kZW5cdC0iICwJCQkzMDQKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJlZlcnp3ZWlndW5nZW4ga2VubnplaWNobmVuIiAsCQkJCTUwNQoJfQoKCVBPUFVQICImQW5zaWNodCIgIHsKCQlNRU5VSVRFTSAiU3RydWt0dXIgJnVuZCBWZXJ6ZWljaG5pcyIgLAkJCTQxMwoJCU1FTlVJVEVNICJOdXIgU3QmcnVrdHVyIiAsCQkJNDExCgkJTUVOVUlURU0gIk51ciAmVmVyemVpY2huaXMiICwJCQk0MTIKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJlRlaWxlbiIgLAkJCTQxNAoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImTmFtZSIgLAkJCUlEX1ZJRVdfTkFNRQoJCU1FTlVJVEVNICJBJmxsZSBEYXRlaWFuZ2FiZW4iICwJCQkJSURfVklFV19BTExfQVRUUklCVVRFUywgQ0hFQ0tFRAoJCU1FTlVJVEVNICImQmVzdGltbXRlIERhdGVpYW5nYWJlbi4uLiIgLAkJCUlEX1ZJRVdfU0VMRUNURURfQVRUUklCVVRFUwoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICJOYWNoIE4mYW1lIiAsCQk0MDQKCQlNRU5VSVRFTSAiTmFjaCBUJnlwIiAsCQk0MDUKCQlNRU5VSVRFTSAiTmFjaCAmR3L232UiICwgCQk0MDYKCQlNRU5VSVRFTSAiTmFjaCAmRGF0dW0iICwgCQk0MDcKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiQW5nYWJlbiBhdXN3JuRobGVuLi4uIiAsCQkJNDA5Cgl9CgoJUE9QVVAgIiZPcHRpb25lbiIgIHsKCQlNRU5VSVRFTSAiJkJlc3TkdGlnZW4uLi4iICwJCS0xCgkJTUVOVUlURU0gIlNjaHJpZnQmYXJ0Li4uIiAsCQkJLTEKCQlNRU5VSVRFTSAiU3ltYm9sbGVpc3RlICZkZWZpbmllcmVuLi4uIiAsIC0xCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIlN5Jm1ib2xsZWlzdGUiICwJCUlEX1ZJRVdfVE9PTF9CQVIsIENIRUNLRUQKCQlNRU5VSVRFTSAiTGF1ZiZ3ZXJrbGVpc3RlIiAsCQlJRF9WSUVXX0RSSVZFX0JBUiwgQ0hFQ0tFRAoJCU1FTlVJVEVNICImU3RhdHVzbGVpc3RlIiAsCUlEX1ZJRVdfU1RBVFVTQkFSLCBDSEVDS0VECiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKCQlNRU5VSVRFTSAiVm9sbGImaWxkXHRTdHJnK1Vtc2NoYWx0K1MiICwgCUlEX1ZJRVdfRlVMTFNDUkVFTgojZW5kaWYKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJlN5bWJvbCBuYWNoIFByb2dyYW1tc3RhcnQiICwJCS0xCgkJTUVOVUlURU0gIiZFaW5zdGVsbHVuZ2VuIGJlaW0gQmVlbmRlbiBzcGVpY2hlcm4iICwJCQk1MTEKCX0KCglQT1BVUCAiJlNpY2hlcmhlaXQiICB7CgkJTUVOVUlURU0gIiZCZXJlY2h0aWd1bmdlbi4uLiIgLAkJNjA1CgkJTUVOVUlURU0gItxiZXImd2FjaGVuLi4uIiAsCQkJNjA2CgkJTUVOVUlURU0gIkJlc2kmdHplci4uLiIgLAkJNjA3Cgl9CgoJUE9QVVAgIiZGZW5zdGVyIiAgewoJCU1FTlVJVEVNICJOZXVlcyAmRmVuc3RlciIgLAkJCUlEX1dJTkRPV19ORVcKCQlNRU5VSVRFTSAi3GJlciZsYXBwZW5kXHRVbXNjaGFsdCtGNSIgLAkJSURfV0lORE9XX0NBU0NBREUKCQlNRU5VSVRFTSAiJlVudGVyZWluYW5kZXIiICwJCUlEX1dJTkRPV19USUxFX0hPUloKCQlNRU5VSVRFTSAiJk5lYmVuZWluYW5kZXJcdFVtc2NoYWx0K0Y0IiAsCQlJRF9XSU5ET1dfVElMRV9WRVJUCiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKCQlNRU5VSVRFTSAiYXUmdG9tYXRpc2NoIGFub3JkbmVuIiAsCQlJRF9XSU5ET1dfQVVUT1NPUlQKI2VuZGlmCgkJTUVOVUlURU0gIiZTeW1ib2xlIGFub3JkbmVuIiAsCQlJRF9XSU5ET1dfQVJSQU5HRQoJCU1FTlVJVEVNICImQWt0dWFsaXNpZXJlblx0RjUiICwJCUlEX1JFRlJFU0gKCX0KCglQT1BVUCAiJj8iICB7CgkJTUVOVUlURU0gIiZIaWxmZXRoZW1lblx0RjEiICwJCQlJRF9IRUxQCgkJTUVOVUlURU0gIiZTdWNoZW4uLi5cdEYxIiAsCQkJSURfSEVMUAoJCU1FTlVJVEVNICJIaWxmZSAmdmVyd2VuZGVuXHRGMSIgLAkJCUlEX0hFTFBfVVNJTkcKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlQT1BVUCAiSW5mJm8uLi4iICB7CgkJICBNRU5VSVRFTSAiSW5mbyD8YmVyICZXaW5lLi4uIiAsCQkJSURfQUJPVVRfV0lORQovKgogKgkJICBNRU5VSVRFTSAiJkxpemVueiIJCUlEX0xJQ0VOU0UKICoJCSAgTUVOVUlURU0gIiZLRUlORSBHQVJBTlRJRSIJCUlEX05PX1dBUlJBTlRZCiAqLwoJCX0KCX0KfQoKCklERF9FWEVDVVRFIERJQUxPRyBGSVhFRCBJTVBVUkUgMTUsIDEzLCAyMTAsIDYzClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkF1c2b8aHJlbiIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglDT05UUk9MIAkJIiIsIDEwMSwgIlN0YXRpYyIsIFNTX1NJTVBMRXxTU19OT1BSRUZJWCwgMywgNiwgMTYyLCAxMAoJQ09OVFJPTCAJCSJCZWZlaGxzJnplaWxlOiIgLCAtMSwgIlN0YXRpYyIsIFNTX0xFRlROT1dPUkRXUkFQfFdTX0dST1VQLCAzLCAxOCwgNjAsIDEwCglFRElUVEVYVAkJMjAxLCAzLCAyOSwgMTM0LCAxMiwgRVNfQVVUT0hTQ1JPTEwKCUNPTlRST0wgCQkiQWxzICZTeW1ib2wiICwgMjE0LCAiQnV0dG9uIiwgQlNfQVVUT0NIRUNLQk9YfFdTX1RBQlNUT1AsMywgNDUsIDcxLCAxMgoJREVGUFVTSEJVVFRPTgkiT0siICwgMSwgMTU4LCA2LCA0NywgMTQKCVBVU0hCVVRUT04JCSJBYmJyZWNoZW4iICwgMiwgMTU4LCAyMywgNDcsIDE0CglQVVNIQlVUVE9OCQkiJkhpbGZlIiAsIDI1NCwgMTU4LCA0MywgNDcsIDE0Cn0K