LyoKICogQ29weXJpZ2h0IDIwMDIgTWljaGFlbCBH/G5uZXdpZwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0VOR0xJU0gsIFNVQkxBTkdfREVGQVVMVAoKSUREX1NBVkVPUFRJT05TIERJQUxPRyBGSVhFRCBJTVBVUkUgIDQzLCAzNywgMTk2LCA4MgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiQ29tcHJlc3Mgb3B0aW9ucyIKRk9OVCA4LCAiTVMgU2FucyBTZXJpZiIKQkVHSU4KICAgIExURVhUICAgICAgICAgICAiJkNob29zZSBhIHN0cmVhbToiLC0xLDIsNSwxMTQsMTAKICAgIENPTUJPQk9YICAgICAgICBJRENfU1RSRUFNLDIsMTgsMTM0LDYxLENCU19EUk9QRE9XTkxJU1QgfCBXU19WU0NST0xMIHwgCiAgICAgICAgICAgICAgICAgICAgV1NfVEFCU1RPUAogICAgUFVTSEJVVFRPTiAgICAgICImT3B0aW9ucy4uLiIsSURDX09QVElPTlMsMTQ1LDE3LDQ1LDE0CiAgICBBVVRPQ0hFQ0tCT1ggICAgIiZJbnRlcmxlYXZlIGV2ZXJ5IixJRENfSU5URVJMRUFWRSwzLDQyLDYwLDExLFdTX1RBQlNUT1AKICAgIEVESVRURVhUICAgICAgICBJRENfSU5URVJMRUFWRUVWRVJZLDY2LDQxLDMyLDEyLEVTX0FVVE9IU0NST0xMCiAgICBMVEVYVCAgICAgICAgICAgImZyYW1lcyIsLTEsMTA0LDQzLDM2LDkKICAgIExURVhUICAgICAgICAgICAiQ3VycmVudCBmb3JtYXQ6IiwtMSwzLDU2LDUzLDkKICAgIExURVhUICAgICAgICAgICAiVGhpcyBzcGFjZSBmb3IgcmVudCIsSURDX0ZPUk1BVFRFWFQsNTUsNTYsOTAsMjYKICAgIERFRlBVU0hCVVRUT04gICAiT0siLElET0ssMTQ1LDQyLDQ1LDE0CiAgICBQVVNIQlVUVE9OICAgICAgIkNhbmNlbCIsSURDQU5DRUwsMTQ1LDYxLDQ1LDE0CkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewogIElEU19XQVZFU1RSRUFNRk9STUFUCSJXYXZlZm9ybTogJXMiCiAgSURTX1dBVkVGSUxFVFlQRQkiV2F2ZWZvcm0iCiAgSURTX0FMTE1VTFRJTUVESUEJIkFsbCBtdWx0aW1lZGlhIGZpbGVzIgogIElEU19BTExGSUxFUwkJIkFsbCBmaWxlcyAoKi4qKUAqLioiCiAgSURTX1ZJREVPCQkidmlkZW8iCiAgSURTX0FVRElPCQkiYXVkaW8iCiAgSURTX0FWSVNUUkVBTUZPUk1BVAkiJXMgJXMgIyVkIgogIElEU19BVklGSUxFVFlQRQkiV2luZSBBVkktZGVmYXVsdC1maWxlaGFuZGxlciIKICBJRFNfVU5DT01QUkVTU0VEICAgICAgInVuY29tcHJlc3NlZCIKfQo=