LyoKICogQ29weXJpZ2h0IDIwMDIgTWljaGFlbCBH/G5uZXdpZwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0dFUk1BTiwgU1VCTEFOR19ORVVUUkFMCgpJRERfU0FWRU9QVElPTlMgRElBTE9HIEZJWEVEIElNUFVSRSAgNDMsIDM3LCAxOTYsIDgyClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJLb21wcmltaWVydW5nc29wdGlvbmVuIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBMVEVYVCAgICAgICAgICAgIiZX5GhsZW4gU2llIGRpZSBFaW5nYW5nc2RhdGVuIGF1czoiLC0xLDIsNSwxMTQsMTAKICAgIENPTUJPQk9YICAgICAgICBJRENfU1RSRUFNLDIsMTgsMTM0LDYxLENCU19EUk9QRE9XTkxJU1QgfCBXU19WU0NST0xMIHwgCiAgICAgICAgICAgICAgICAgICAgV1NfVEFCU1RPUAogICAgUFVTSEJVVFRPTiAgICAgICImT3B0aW9uZW4uLi4iLElEQ19PUFRJT05TLDE0NSwxNyw0NSwxNAogICAgQVVUT0NIRUNLQk9YICAgICImSW50ZXJsZWF2ZSBhbGxlIixJRENfSU5URVJMRUFWRSwzLDQyLDYwLDExLFdTX1RBQlNUT1AKICAgIEVESVRURVhUICAgICAgICBJRENfSU5URVJMRUFWRUVWRVJZLDY2LDQxLDMyLDEyLEVTX0FVVE9IU0NST0xMCiAgICBMVEVYVCAgICAgICAgICAgIkVpbnplbGJpbGRlciIsLTEsMTA0LDQzLDM2LDkKICAgIExURVhUICAgICAgICAgICAiQWt1ZWxsZXMgRm9ybWF0OiIsLTEsMyw1Niw1Myw5CiAgICBMVEVYVCAgICAgICAgICAgIlRoaXMgc3BhY2UgZm9yIHJlbnQiLElEQ19GT1JNQVRURVhULDU1LDU2LDkwLDI2CiAgICBERUZQVVNIQlVUVE9OICAgIk9LIixJRE9LLDE0NSw0Miw0NSwxNAogICAgUFVTSEJVVFRPTiAgICAgICJBYmJyZWNoZW4iLElEQ0FOQ0VMLDE0NSw2MSw0NSwxNApFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICBJRFNfV0FWRVNUUkVBTUZPUk1BVAkiV2F2ZWZvcm06ICVzIgogIElEU19XQVZFRklMRVRZUEUJIldhdmVmb3JtIgogIElEU19BTExNVUxUSU1FRElBCSJBbGxlIE11bHRpbWVkaWEtRGF0ZWllbiIKICBJRFNfQUxMRklMRVMJCSJBbGxlIERhdGVpZW4gKCouKilAKi4qIgogIElEU19WSURFTwkJIlZpZGVvIgogIElEU19BVURJTwkJIkF1ZGlvIgogIElEU19BVklTVFJFQU1GT1JNQVQJIiVzICVzICMlZCIKICBJRFNfQVZJRklMRVRZUEUJIldpbmUgQVZJLVN0YW5kYXJkLURhdGVpYmVoYW5kbHVuZ3Nyb3V0aW5lIgogIElEU19VTkNPTVBSRVNTRUQgICAgICAiVW5rb21wcmltaWVydCIKfQo=