LyoKICogQ29weXJpZ2h0IDIwMDYgQW5kcmFzIEtvdmFjcwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAibXN2aWRlb19wcml2YXRlLmgiCgpMQU5HVUFHRSBMQU5HX0hVTkdBUklBTiwgU1VCTEFOR19ERUZBVUxUCgpJQ01fQ0hPT1NFX0NPTVBSRVNTT1IgRElBTE9HICAzNiwgMjQsIDE4NywgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIlZpZGVvIHT2bfZy7XTpcyIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiAgICBERUZQVVNIQlVUVE9OICJPSyIsSURPSywxMjksMiw0OSwxNAogICAgUFVTSEJVVFRPTiAiTelnc2UiLElEQ0FOQ0VMLDEyOSwxOCw0OSwxNAoKICAgIExURVhUICImVPZt9nLtdPU6IiwtMSw5LDYsMTA1LDgKICAgIENPTUJPQk9YIElEQ19DT01QX0xJU1QsOSwxNiwxMTEsNjcsQ0JTX0RST1BET1dOTElTVHxXU19WU0NST0xMfFdTX1RBQlNUT1AKCiAgICBQVVNIQlVUVE9OICJCZeFsbO0mdOFzLi4uIixJRENfQ09ORklHVVJFLDEyOSwzNiw0OSwxNAogICAgUFVTSEJVVFRPTiAiJkFib3V0IixJRENfQUJPVVQsMTI5LDUyLDQ5LDE0CgogICAgU0NST0xMQkFSIElEQ19RVUFMSVRZX1NDUk9MTCw5LDQ0LDExMSw5LFdTX1RBQlNUT1AKCiAgICBMVEVYVCAiVPZt9nLtdOlzaSBtaW71c+kmZzoiLElEQ19RVUFMSVRZX1RYVCw5LDM0LDgwLDgKCiAgICBDT05UUk9MICImS3VsY3Mga+lwa29ja2EgbWluZGVuIixJRENfS0VZRlJBTUVfQ0hFQ0tCT1gsIkJ1dHRvbiIsQlNfQVVUT0NIRUNLQk9YfFdTX1RBQlNUT1AsOSw2MCw2NiwxMgogICAgRURJVFRFWFQgSURDX0tFWUZSQU1FLDc4LDYwLDIyLDEyCiAgICBMVEVYVCAia+lwa29ja+Fua+ludCIsSURDX0tFWUZSQU1FX0ZSQU1FUywxMDMsNjIsMjYsMTAKCiAgICBDT05UUk9MICJBJmRhdCBhcuFueSIsSURDX0RBVEFSQVRFX0NIRUNLQk9YLCJCdXR0b24iLEJTX0FVVE9DSEVDS0JPWHxXU19UQUJTVE9QLDksNzYsNjYsMTIKICAgIEVESVRURVhUIElEQ19EQVRBUkFURSw3OCw3NiwyMiwxMgogICAgTFRFWFQgIktCL3NlYyIsSURDX0RBVEFSQVRFX0tCLDEwMiw3OCwyNiwxMAp9Cg==