LyoKICogY29tY3RsIChSdXNzaWFuIHJlc291cmNlcykKICoKICogQ29weXJpZ2h0IDIwMDMgSWdvciBTdGVwaW4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19SVVNTSUFOLCBTVUJMQU5HX0RFRkFVTFQKCklERF9QUk9QU0hFRVQgRElBTE9HIERJU0NBUkRBQkxFIDAsIDAsIDIyMCwgMTQwClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgV1NfVklTSUJMRQpDQVBUSU9OICLR4u7p8fLi4CDk6/8gIgpGT05UIDgsICJNUyBTYW5zIFNlcmlmIgpCRUdJTgogIERFRlBVU0hCVVRUT04gIk9LIiwgICAgIElET0ssNCwxMjIsNTAsMTQsIFdTX1RBQlNUT1AgfCBXU19HUk9VUAogIFBVU0hCVVRUT04gICAgIs7y7OXt4CIsIElEQ0FOQ0VMLDU4LDEyMiw1MCwxNAogIFBVU0hCVVRUT04gICAgIs/w6Cbs5e3o8vwiLCBJRENfQVBQTFlfQlVUVE9OLDExMiwxMjIsNTAsMTQsV1NfRElTQUJMRUQKICBQVVNIQlVUVE9OICAgICIm0e/w4OLq4CIsICAgSURIRUxQLDE2NiwxMjIsNTAsMTQsV1NfVEFCU1RPUHxXU19HUk9VUAogIENPTlRST0wgICAgICAgIlRhYiIsICAgIElEQ19UQUJDT05UUk9MLCJTeXNUYWJDb250cm9sMzIiLFdTX0NMSVBTSUJMSU5HU3xXU19HUk9VUHxXU19UQUJTVE9QfFRDU19NVUxUSUxJTkUsNCw0LDIxMiwxMTQKRU5ECgoKSUREX1dJWkFSRCBESUFMT0cgRElTQ0FSREFCTEUgMCwgMCwgMjkwLCAxNTkKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBXU19WSVNJQkxFCkNBUFRJT04gIszg8fLl8CIKRk9OVCA4LCAiTVMgU2FucyBTZXJpZiIKQkVHSU4KICBERUZQVVNIQlVUVE9OICLH4OLl8Pjo8vwiLCAgSURDX0ZJTklTSF9CVVRUT04sMTIxLDEzOCw1MCwxNAogIERFRlBVU0hCVVRUT04gIibE4Ovl5SA+IiwgSURDX05FWFRfQlVUVE9OLDEyMSwxMzgsNTAsMTQKICBQVVNIQlVUVE9OICAgICI8ICbN4Ofg5CIsIElEQ19CQUNLX0JVVFRPTiw3MSwxMzgsNTAsMTQKICBQVVNIQlVUVE9OICAgICLO8uzl7eAiLCAgSURDQU5DRUwsMTc4LDEzOCw1MCwxNAogIFBVU0hCVVRUT04gICAgIibR7/Dg4urgIiwgICAgSURIRUxQLDIzNSwxMzgsNTAsMTQsV1NfR1JPVVAKICBMVEVYVCAgICAgICAgICIiLCAgICAgICAgSURDX1NVTktFTl9MSU5FLDcsMTI5LDI3OCwxLFNTX1NVTktFTgogIENPTlRST0wgICAgICAgIlRhYiIsICAgICBJRENfVEFCQ09OVFJPTCwiU3lzVGFiQ29udHJvbDMyIixXU19DTElQU0lCTElOR1MgfCBXU19ESVNBQkxFRCw3LDcsMjU4LDUKRU5ECgoKSUREX1RCQ1VTVE9NSVpFIERJQUxPRyBESVNDQVJEQUJMRSAxMCwgMjAsIDM1NywgMTI1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICLN4PHy8O7p6uAg7+Dt5evoIOjt8fLw8+zl7fLu4iIKRk9OVCA4LCAiTVMgU2FucyBTZXJpZiIKQkVHSU4KICBERUZQVVNIQlVUVE9OICImx+Dq8Pvy/CIsICAgICBJRENBTkNFTCwzMDgsNiw0NCwxNAogIFBVU0hCVVRUT04gICAgItEm4fDu8ejy/CIsICAgICBJRENfUkVTRVRfQlROLDMwOCwyMyw0NCwxNAogIFBVU0hCVVRUT04gICAgIibR7/Dg4urgIiwgICAgICBJRENfSEVMUF9CVE4sMzA4LDQwLDQ0LDE0CiAgUFVTSEJVVFRPTiAgICAiz+Xw5ezl8fLo8vwgJuLi5fD1IiwgICBJRENfTU9WRVVQX0JUTiwzMDgsNzQsNDQsMTQKICBQVVNIQlVUVE9OICAgICLP5fDl7OXx8ujy/CAm4u3o5yIsIElEQ19NT1ZFRE5fQlROLDMwOCw5MSw0NCwxNAogIExURVhUICAgICAgICAgIibE7vHy8+/t++Ug6u3u7+roOiIsIC0xLDQsNSw4NCwxMAogIExJU1RCT1ggICAgICAgSURDX0FWQUlMQlROX0xCT1gsNCwxNywxMjAsMTAwLCBMQlNfTk9USUZZIHwgTEJTX09XTkVSRFJBV0ZJWEVEIHwgTEJTX0hBU1NUUklOR1MgfCBMQlNfTk9JTlRFR1JBTEhFSUdIVCB8IExCU19ESVNBQkxFTk9TQ1JPTEwgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfSFNDUk9MTCB8IFdTX1RBQlNUT1AKICBQVVNIQlVUVE9OICAgICImxO7h4OLo8vwgLT4iLCAgICBJRE9LLCAxMzEsIDQyLCA0NCwgMTQKICBQVVNIQlVUVE9OICAgICI8LSAm0+Tg6+jy/CIsIElEQ19SRU1PVkVfQlROLDEzMSw2Miw0NCwxNAogIExURVhUICAgICAgICAgIibK7e7v6ugg7+Dt5evoIOjt8fLw8+zl7fLu4joiLCAtMSwxODIsNSw3OCwxMAogIExJU1RCT1ggICAgICAgSURDX1RPT0xCQVJCVE5fTEJPWCwgMTgyLDE3LDEyMCwxMDAsTEJTX05PVElGWSB8IExCU19PV05FUkRSQVdGSVhFRCB8IExCU19IQVNTVFJJTkdTIHwgTEJTX05PSU5URUdSQUxIRUlHSFQgfCBMQlNfRElTQUJMRU5PU0NST0xMIHwgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX0hTQ1JPTEwgfCBXU19UQUJTVE9QCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewogICAgSURTX0NMT1NFICAgICLH4Orw+/L8Igp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgICBJRE1fVE9EQVkgICAgItHl4+7k7f86IgogICAgSURNX0dPVE9EQVkgICLS5erz+eD/IOTg8uAiCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICAgIElEU19TRVBBUkFUT1IgItDg5+Tl6+jy5ev8Igp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgICBIS1lfTk9ORSAizeXyIgp9Cg==