LyoKICogQ29weXJpZ2h0IDE5OTYgQmFuZyBKdW4gWW91bmcKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19LT1JFQU4sIFNVQkxBTkdfREVGQVVMVAoKU1lTTUVOVSBNRU5VIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUKewogTUVOVUlURU0gIrq5sc0oJlIpIiwgNjE3MjgKIE1FTlVJVEVNICLAzLW/KCZNKSIsIDYxNDU2CiBNRU5VSVRFTSAixamx4iC6r7DmKCZTKSIsIDYxNDQwCiBNRU5VSVRFTSAivsbAzMTcIMelvcMoJk4pIiwgNjE0NzIKIE1FTlVJVEVNICLA/MO8IMituOkgx6W9wygmTSkiLCA2MTQ4OAogTUVOVUlURU0gU0VQQVJBVE9SCiBNRU5VSVRFTSAitN2x4igmQylcdEFsdC1GNCIsIDYxNTM2CiBNRU5VSVRFTSBTRVBBUkFUT1IKIE1FTlVJVEVNICLA2773IMD8yK8oJlcpIC4uLlx0Q3RybC1Fc2MiLCA2MTc0NAogTUVOVUlURU0gU0VQQVJBVE9SCiBNRU5VSVRFTSAiv83Azr+hILD8x8+/qSAuLi4iLCA2MTc2MQp9CgpFRElUTUVOVSBNRU5VIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUKewoJUE9QVVAgIiIKCUJFR0lOCgkJTUVOVUlURU0gIr3Hx+Agw+u80igmVSkiLCBFTV9VTkRPCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIsDftvOzu7HiKCZUKSIsIFdNX0NVVAoJCU1FTlVJVEVNICK6ubvnKCZDKSIsIFdNX0NPUFkKCQlNRU5VSVRFTSAiutm/qbPWseIoJlApIiwgV01fUEFTVEUKCQlNRU5VSVRFTSAiu+jBpigmRCkiLCBXTV9DTEVBUgoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICLA/MO8ILyxxcMoJkEpIiwgRU1fU0VUU0VMCglFTkQKfQoKTVNHQk9YIERJQUxPRyAxMDAsIDgwLCAyMTYsIDE2OApTVFlMRSBEU19TWVNNT0RBTCB8IERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpCRUdJTgoJSUNPTiAiIiwgMTA4OCwgOCwgMjAsIDE2LCAxNiwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFCglMVEVYVCAiIiwgMTAwLCAzMiwgNCwgMTc2LCA0OCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfR1JPVVAKCVBVU0hCVVRUT04gIsiuwM4oJk8pIiwgMSwgMTYsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKCVBVU0hCVVRUT04gIsPrvNIoJkMpIiwgMiwgNjQsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKCVBVU0hCVVRUT04gIsHftNwoJkEpIiwgMywgMTEyLCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCglQVVNIQlVUVE9OICLA573DtbUoJlIpIiwgNCwgMTYwLCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCglQVVNIQlVUVE9OICK5q73DKCZJKSIsIDUsIDIwOCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAoJUFVTSEJVVFRPTiAiv7koJlkpIiwgNiwgMjU2LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCglQVVNIQlVUVE9OICK+xrTPv8AoJk4pIiwgNywgMzA0LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCkVORAoKTURJX01PUkVXSU5ET1dTIERJQUxPRyBGSVhFRCBJTVBVUkUgMjAsIDIwLCAyMzIsIDEyMgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJTZWxlY3QgV2luZG93IgpGT05UIDksICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBMSVNUQk9YICAgICAgICAgTURJX0lEQ19MSVNUQk9YLCA1LCA3LCAyMjIsIDkwLCBXU19WU0NST0xMIHwgV1NfSFNDUk9MTCAvKiBkZWZpbmVkIGluIG1kaS5oICovCiAgICBERUZQVVNIQlVUVE9OICAgIsiuwM4iLCBJRE9LLCA3NSwgMTAwLCAzNSwgMTQKICAgIFBVU0hCVVRUT04gICAgICAiw+u80iIsIElEQ0FOQ0VMLCAxMjAsIDEwMCwgMzUsIDE0CkVORAo=