LyoKICogIE5vdGVwYWQgKEdlcm1hbiByZXNvdXJjZXMpCiAqCiAqICBDb3B5cmlnaHQgMTk5Nyw5OCBNYXJjZWwgQmF1ciA8bWJhdXJAZzI2LmV0aHouY2g+CiAqICBDb3B5cmlnaHQgMjAwMiBTeWx2YWluIFBldHJlb2xsZSA8c3BldHJlb2xsZUB5YWhvby5mcj4KICoKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19HRVJNQU4sIFNVQkxBTkdfREVGQVVMVAoKTUFJTl9NRU5VIE1FTlUKewogUE9QVVAgIiZEYXRlaSIgewogIE1FTlVJVEVNICImTmV1Li4uIiwgICAgICAgICAgIENNRF9ORVcKICBNRU5VSVRFTSAi1iZmZm5lbi4uLiIsICAgICAgICBDTURfT1BFTgogIE1FTlVJVEVNICImU3BlaWNoZXJuIiwgICAgICAgIENNRF9TQVZFCiAgTUVOVUlURU0gIlNwZWljaGVybiAmdW50ZXIuLi4iLCAgICAgICBDTURfU0FWRV9BUwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImRHJ1Y2tlbiIsICAgICAgICAgIENNRF9QUklOVAogIE1FTlVJVEVNICJTZWl0ZSBlaW4mcmljaHRlbi4uLiIsICAgICAgQ01EX1BBR0VfU0VUVVAKICBNRU5VSVRFTSAiRHJ1Y2tlciZlaW5yaWNodHVuZy4uLiIsICAgIENNRF9QUklOVEVSX1NFVFVQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZCZWVuZGVuIiwgICAgICAgICAgQ01EX0VYSVQKIH0KUE9QVVAgIiZCZWFyYmVpdGVuIiB7CiAgTUVOVUlURU0gIiZS/GNrZ+RuZ2lnXHRTdHJnK1oiLCAgICAgICBDTURfVU5ETwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImQXVzc2NobmVpZGVuXHRTdHJnK1giLCAgICAgQ01EX0NVVAogIE1FTlVJVEVNICImS29waWVyZW5cdFN0cmcrQyIsICAgICAgICAgQ01EX0NPUFkKICBNRU5VSVRFTSAiJkVpbmb8Z2VuXHRTdHJnK1YiLCAgICAgICAgIENNRF9QQVNURQogIE1FTlVJVEVNICImTPZzY2hlblx0RW50ZiIsICAgIENNRF9ERUxFVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiQWxsZXMgJm1hcmtpZXJlbiIsICBDTURfU0VMRUNUX0FMTAogIE1FTlVJVEVNICImVWhyemVpdC9EYXR1bVx0RjUiLCAgICAgICAgQ01EX1RJTUVfREFURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImWmVpbGVudW1icnVjaCIsICAgIENNRF9XUkFQCiAgTUVOVUlURU0gIiZTY2hyaWZ0YXJ0ZW4uLi4iLAlDTURfRk9OVAogfQpQT1BVUCAiJlN1Y2hlbiIgewogIE1FTlVJVEVNICJTdWNoZW4uLi4iLCBDTURfU0VBUkNICiAgTUVOVUlURU0gIiZXZWl0ZXJzdWNoZW5cdEYzIiwgQ01EX1NFQVJDSF9ORVhUCiB9ClBPUFVQICImSGlsZmUiIHsKICBNRU5VSVRFTSAiJkluaGFsdCIsICAgICAgICAgICBDTURfSEVMUF9DT05URU5UUwogIE1FTlVJVEVNICImU3VjaGVuLi4uIiwgICAgICAgIENNRF9IRUxQX1NFQVJDSAogIE1FTlVJVEVNICImSGlsZmUgYmVudXR6ZW4iLCAgIENNRF9IRUxQX09OX0hFTFAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBQT1BVUCAiSW5mJm8uLi4iIHsKICAgTUVOVUlURU0gIiZMaXplbnoiLCAgICAgICAgICBDTURfTElDRU5TRQogICBNRU5VSVRFTSAiJktFSU5FIEdBUkFOVElFIiwgIENNRF9OT19XQVJSQU5UWQogICBNRU5VSVRFTSAiJtxiZXIgV2luZSIsICAgICAgIENNRF9BQk9VVF9XSU5FCiAgfQogfQp9CgovKiBEaWFsb2cgYFBhZ2Ugc2V0dXAnICovCgpESUFMT0dfUEFHRVNFVFVQIERJQUxPRyAwLCAwLCAyMjUsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpGT05UIDgsICJNUyBTaGVsbCBEbGciCkNBUFRJT04gIlNlaXRlIGVpbnJpY2h0ZW4iCnsKTFRFWFQgICAgIiZLb3BmemVpbGU6IiwgIDB4MTQwLCAgIDEwLCAwNywgNDAsIDE1CkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQxLCAgICAgICA2MCwgMDUsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkZ133plaWxlOiIsICAweDE0MiwgICAxMCwgMjQsIDQwLCAxNQpFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MywgICAgICAgNjAsIDIyLDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkdST1VQQk9YICJS5G5kZXIiLCAgICAgIDB4MTQ0LCAgICAgMTAsIDQzLDE2MCwgNDUKTFRFWFQgICAgIiZMaW5rczoiLCAgICAgICAgMHgxNDUsICAgMjAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9MRUZUVkFMVUUsKi8gICAweDE0NywgICAgICAgNTAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJk9iZW46IiwgICAgICAgICAweDE0OCwgICAgMjAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9UT1BWQUxVRSwqLyAgICAweDE0QSwgICAgICAgIDUwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZSZWNodHM6IiwgICAgICAgMHgxNEIsIDEwMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX1JJR0hUVkFMVUUsKi8gIDB4MTRELCAgICAgMTMwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZVbnRlbjoiLCAgICAgIDB4MTRFLDEwMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX0JPVFRPTVZBTFVFLCovIDB4MTUwLCAgICAxMzAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKREVGUFVTSEJVVFRPTiAiT0siLCAgICAgICAgIDB4MTUxLCAgICAgICAgICAgICAgICAgICAxODAsICAzLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQWJicmVjaGVuIiwgICAgIDB4MTUyLCAgICAgICAgICAgICAgIDE4MCwgMjEsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICImSGlsZmUiLCAgICAgICAweDE1MywgICAgICAgICAgICAgICAgMTgwLCAzOSwgNDAsIDE1LCBXU19UQUJTVE9QCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKU1RSSU5HX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwgICAiJm4iICAgICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgICJTZWl0ZSAmcyIgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0xFRlRWQUxVRSwgICAgICAgICAgICAgIjIwIG1tIiAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9SSUdIVFZBTFVFLCAgICAiMjAgbW0iICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX1RPUFZBTFVFLCAgICAgICAgICAgICAgIjI1IG1tIiAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwgICAiMjUgbW0iICAgICAvKiBGSVhNRSAqLwoKU1RSSU5HX05PVEVQQUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVkaXRvciIKU1RSSU5HX0VSUk9SLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZlaGxlciIKU1RSSU5HX1dBUk5JTkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFjaHR1bmciClNUUklOR19JTkZPLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmZvcm1hdGlvbiIKClNUUklOR19VTlRJVExFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIodW5iZW5hbm50KSIKClNUUklOR19BTExfRklMRVMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIERhdGVpZW4gKCouKikiClNUUklOR19URVhUX0ZJTEVTX1RYVCwgICAgICAgICAgICAgICAgICAiVGV4dGRhdGVpZW4gKCoudHh0KSIKClNUUklOR19UT09MQVJHRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEaWUgRGF0ZWkgJyVzJyBpc3QgenUgZ3Jv3yBm/HIgZGVuIEVkaXRvclxuIFwKQmVudXR6ZW4gU2llIGJpdHRlIGVpbmVuIGFuZGVyZW4gRWRpdG9yLCB1bSBkaWVzZSBEYXRlaSB6dSBiZWFyYmVpdGVuLiIKU1RSSU5HX05PVEVYVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNpZSBoYWJlbiBrZWluZW4gVGV4dCBlaW5nZWdlYmVuLCBkZXIgXApnZXNwZWljaGVydFxuIHdlcmRlbiBr9m5udGUuIEdlYmVuIFNpZSBUZXh0IGVpbiwgdW5kIHZlcnN1Y2hlbiBTaWUgZXMgXApcbmVybmV1dC4iClNUUklOR19ET0VTTk9URVhJU1QsICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEaWUgRGF0ZWkgJyVzJ1xuZXhpc3RpZXJ0IG5pY2h0LlxuXG4gXApN9mNodGVuIFNpZSBlaW5lIG5ldWUgRGF0ZWkgZXJzdGVsbGVuID8iClNUUklOR19OT1RTQVZFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEYXRlaSAlc1xuIHd1cmRlIGdl5G5kZXJ0LlxuXG4gXApN9mNodGVuIFNpZSBkaWUgxG5kZXJ1bmdlbiBzcGVpY2hlcm4gPyIKU1RSSU5HX05PVEZPVU5ELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyVzJyBrYW5uIG5pY2h0IGdlZnVuZGVuIHdlcmRlbi4iClNUUklOR19PVVRfT0ZfTUVNT1JZLCAgICAgICAgICAgICAgICAgICAiTmljaHQgZ2Vu/GdlbmQgQXJiZWl0c3NwZWljaGVyLCBcCnVtIGRpZXNlIEZ1bmt0aW9uIFxuYWJ6dXNjaGxpZd9lbi4gQmVlbmRlbiBTaWUgZWluZSBvZGVyIG1laHJlcmUgXApcbkFud2VuZHVuZ2VuLCB1bSBkZW4gdmVyZvxnYmFyZW4gQXJiZWl0c3NwZWljaGVyIHp1IFxuZXJo9mhlbi4iCgoKfQo=