LyoKICogQ29weXJpZ2h0IDIwMDYgQW5kcmFzIEtvdmFjcwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0hVTkdBUklBTiwgU1VCTEFOR19ERUZBVUxUCgpNQUlOTUVOVSBNRU5VIERJU0NBUkRBQkxFIApCRUdJTgogICAgUE9QVVAgIiZG4WpsIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJtpqIiwgICAgICAgICAgIElEX0ZJTEVfTkVXCiAgICAgICAgTUVOVUlURU0gIiZNZWdueWl04XMiLCAgICBJRF9GSUxFX09QRU4KICAgICAgICBNRU5VSVRFTSAiTSZlbnTpcyIsICAgICAgIElEX0ZJTEVfU0FWRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImS2ls6XDpcyIsICAgICAgSURfRklMRV9FWElUCiAgICBFTkQKICAgIFBPUFVQICJTeiZlcmtlc3p06XMiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImVmlzc3phdm9u4XNcdEN0cmwrWiIsICAgICAgICBJRF9FRElUX1VORE8KICAgICAgICBNRU5VSVRFTSAiJkVs9XJlXHRDdHJsK1kiLCAgICAgICAgICAgICAgSURfRURJVF9SRURPCiAgICAgICAgTUVOVUlURU0gIk0maW5kZXQga2lqZWz2bGlcdEN0cmwrQSIsICAgIElEX0VESVRfU0VMRUNUQUxMCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIktpdibhZ+FzXHRDdHJsK1giLCAgICAgICAgICAgIElEX0VESVRfQ1VUCiAgICAgICAgTUVOVUlURU0gIk3hJnNvbOFzXHRDdHJsK0MiLCAgICAgICAgICAgIElEX0VESVRfQ09QWQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJDc2FrICZvbHZhc2hhdPMiLCAgICAgICAgICAgICBJRF9FRElUX1JFQURPTkxZCiAgICAgICAgTUVOVUlURU0gIk3zJmRvc+10dmEiLCAgICAgICAgICAgICAgICAgIElEX0VESVRfTU9ESUZJRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBQT1BVUCAiJkV4dHLhayIKICAgICAgICBCRUdJTgogICAgICAgICAgICBNRU5VSVRFTSAiS2lqZWz2bOlzICZpbmZvcm3hY2nzIiwgICAgICAgSURfRURJVF9TRUxFQ1RJT05JTkZPCiAgICAgICAgICAgIE1FTlVJVEVNICJLYXJha3RlciZmb3Jt4XR1bSIsICAgICAgICAgICBJRF9FRElUX0NIQVJGT1JNQVQKICAgICAgICAgICAgTUVOVUlURU0gIkEmbGFwcnRlbG1lemV0dCBrYXJha3RlciBmb3Jt4XR1bSIsICAgICAgICAgICBJRF9FRElUX0RFRkNIQVJGT1JNQVQKICAgICAgICAgICAgTUVOVUlURU0gIiZCZWtlemTpcyBmb3Jt4XR1bSIsICAgICAgICAgIElEX0VESVRfUEFSQUZPUk1BVAogICAgICAgICAgICBNRU5VSVRFTSAiU3om9nZlZ3N6ZXJ66XMiLCAgICAgICAgICAgICAgSURfRURJVF9HRVRURVhUCiAgICAgICAgRU5ECiAgICBFTkQKICAgIFBPUFVQICJGJm9ybeF0dW0iCiAgICBCRUdJTgogICAgICAgIFBPUFVQICImSOF0dOlyIgogICAgICAgIEJFR0lOCiAgICAgICAgICAgIE1FTlVJVEVNICImUmVuZHN6ZXJcdEN0cmwrMSIsICAgICAgICAgSURfQkFDS18xCiAgICAgICAgICAgIE1FTlVJVEVNICImU+FyZ+FiYW4ga+lyZW1cdEN0cmwrMiIsICBJRF9CQUNLXzIKICAgICAgICBFTkQKICAgICAgICBQT1BVUCAiJklnYXrtdOFzIgogICAgICAgIEJFR0lOCiAgICAgICAgICAgIE1FTlVJVEVNICImQmFscmFcdEN0cmwrTCIsICAgICAgICAgSURfQUxJR05fTEVGVAogICAgICAgICAgICBNRU5VSVRFTSAiJkv2eulwcmVcdEN0cmwrRSIsICAgICAgIElEX0FMSUdOX0NFTlRFUgogICAgICAgICAgICBNRU5VSVRFTSAiJkpvYmJyYVx0Q3RybCtSIiwgICAgICAgIElEX0FMSUdOX1JJR0hUCiAgICAgICAgRU5ECiAgICBFTkQKRU5ECg==