LyoKICogSGVscCBWaWV3ZXIKICoKICogQ29weXJpZ2h0IDE5OTYgVWxyaWNoIFNjaG1pZAogKiBDb3B5cmlnaHQgMjAwMiBTeWx2YWluIFBldHJlb2xsZSA8c3BldHJlb2xsZUB5YWhvby5mcj4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKLyogTWVudSAqLwoKTUFJTl9NRU5VIE1FTlUgTEFOR1VBR0UgTEFOR19LT1JFQU4sIFNVQkxBTkdfREVGQVVMVAp7CiBQT1BVUCAixsTAzygmRikiIHsKICBNRU5VSVRFTSAiv62x4igmTykuLi4iLCBNTklEX0ZJTEVfT1BFTgogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICLAzrziKCZQKSIsIE1OSURfRklMRV9QUklOVAogIE1FTlVJVEVNICLHwbiwxc0gvLPBpCgmUykuLi4iLCBNTklEX0ZJTEVfU0VUVVAKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIsG+t+EoJkUpIiwgTU5JRF9GSUxFX0VYSVQKIH0KIFBPUFVQICLG7cH9KCZFKSIgewogICBNRU5VSVRFTSAiurm75ygmQykuLi4iLCBNTklEX0VESVRfQ09QWURMRwogICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgTUVOVUlURU0gIsHWvK4oJkEpLi4uIiwgTU5JRF9FRElUX0FOTk9UQVRFCiB9CiBQT1BVUCAiw6WwpcfHKCZCKSIgewogICBNRU5VSVRFTSAiwaTAxygmRCkuLi4iLCBNTklEX0JLTUtfREVGSU5FCiB9CiBQT1BVUCAitbW/8ri7KCZIKSIgewogICBNRU5VSVRFTSAitbW/8ri7ILvnv+u5/SgmTykiLCBNTklEX0hFTFBfSEVMUE9OCiAgIE1FTlVJVEVNICLH17vzIMCnKCZUKSIsIE1OSURfSEVMUF9IRUxQVE9QCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICBNRU5VSVRFTSAiwaS6uCgmSSkuLi4iLCBNTklEX0hFTFBfQUJPVVQKI2lmZGVmIFdJTkVMSUIKICAgTUVOVUlURU0gIr/NwM6/oSCw/MfPv6koJkEpIiwgTU5JRF9IRUxQX1dJTkUKI2VuZGlmCiB9Cn0KCi8qIFN0cmluZ3MgKi8KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIExBTkdVQUdFIExBTkdfS09SRUFOLCBTVUJMQU5HX0RFRkFVTFQKewpTVElEX1dJTkVfSEVMUCwgCSK/zcDOILW1v/K4uyIKU1RJRF9XSEVSUk9SLCAJCSK/wLf5IgpTVElEX1dBUk5JTkcsICAJCSKw5rDtIgpTVElEX0lORk8sICAJCSLBpLq4IgpTVElEX05PVF9JTVBMRU1FTlRFRCwgCSKxuMf2tcfB9iC+yr7SwL0iClNUSURfSExQRklMRV9FUlJPUl9zLCAJIrW1v/K4uyDGxMDPIGAlcye4piDA0LTCILW1wd8gv8C3+SC537v9IgpTVElEX0NPTlRFTlRTLCAJCSK48cL3KCZDKSIKU1RJRF9TRUFSQ0gsIAkJIsOjseIoJlMpIgpTVElEX0JBQ0ssIAkJIrXat84oJkIpIgpTVElEX0hJU1RPUlksIAkJIsj3vbrF5LiuKCZIKSIKU1RJRF9UT1BJQ1MsCQkiJlRvcGljcyIKU1RJRF9BTExfRklMRVMsIAkiuPC15yDGxMDPICgqLiopIgpTVElEX0hFTFBfRklMRVNfSExQLCAJIrW1v/K4uyDGxMDPICgqLmhscCkiCn0K