LyoKICogV2luZUZpbGUgKER1dGNoIHJlc291cmNlcykKICoKICogQ29weXJpZ2h0IDIwMDMgSGFucyBMZWlkZWtrZXIKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19EVVRDSCwgU1VCTEFOR19ORVVUUkFMCgovKiBNZW51ICovCgpJRE1fV0lORUZJTEUgTUVOVSBGSVhFRCBJTVBVUkUKewogICAgUE9QVVAgIiZCZXN0YW5kIiAgewogICAgICAgIE1FTlVJVEVNICImT3BlbmVuXHRFbnRlciIsICAgICAgICAgICAgICBJRF9BQ1RJVkFURQogICAgICAgIE1FTlVJVEVNICImVmVycGxhYXRzZW4uLi5cdEY3IiwgICAgICAgICBJRF9GSUxFX01PVkUKICAgICAgICBNRU5VSVRFTSAiJktvcGnrcmVuLi4uXHRGOCIsICAgICAgICAgICAgSURfRklMRV9DT1BZCiAgICAgICAgTUVOVUlURU0gIk5hYXIgJmtsZW1ib3JkLi4uXHRGOSIsICAgICAgIDExOAogICAgICAgIE1FTlVJVEVNICJWZXImd2lqZGVyZW5cdERlbCIsICAgICAgICAgICBJRF9GSUxFX0RFTEVURQogICAgICAgIE1FTlVJVEVNICImTmFhbSB3aWp6aWdlbi4uLiIsICAgICAgICAgICAxMDkKICAgICAgICBNRU5VSVRFTSAiJkVpZ2Vuc2NoYXBwZW4uLi5cdEFsdCtFbnRlciIsSURfRURJVF9QUk9QRVJUSUVTCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZDb21wcmltZXJlbi4uLiIsICAgICAgICAgICAgIDExOQogICAgICAgIE1FTlVJVEVNICImRGVjJm9tcHJpbWVyZW4uLi4iLCAgICAgICAgICAxMjAKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJlN0YXJ0ZW4uLi4iLCAgICAgICAgICAgICAgICAgSURfRVhFQ1VURQogICAgICAgIE1FTlVJVEVNICJBZiZkcnVra2VuLi4uIiwgICAgICAgICAgICAgICAxMDIKICAgICAgICBNRU5VSVRFTSAiS29wcGVsZW4uLi4iLCAgICAgICAgICAgICAgICAgMTAzCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIk5pZXV3ZSAmbWFwLi4uIiwgICAgICAgICAgICAgIDExMQogICAgICAgIE1FTlVJVEVNICImWm9la2VuLi4uIiwgICAgICAgICAgICAgICAgICAxMDQKICAgICAgICBNRU5VSVRFTSAiQmVzdGFuZGVuICZzZWxlY3RlcmVuLi4uIiwgICAgMTE2CiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKICAgICAgICBNRU5VSVRFTSAiQSZmc2x1aXRlblx0QWx0K1giLCAgICAgICAgICAgSURfRklMRV9FWElUCiNlbHNlCiAgICAgICAgTUVOVUlURU0gIkEmZnNsdWl0ZW4iLCAgICAgICAgICAgICAgICAgIElEX0ZJTEVfRVhJVAojZW5kaWYKICAgIH0KCiAgICBQT1BVUCAiJkRpc2siICB7CiAgICAgICAgTUVOVUlURU0gIkRpc2sgJmtvcGnrcmVuLi4uIiwgICAgICAgICAgIDIwMQogICAgICAgIE1FTlVJVEVNICJEaXNrbGFiZWwgbWFrZW4uLi4iLCAgICAgICAgICAyMDIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiRGlzayAmZm9ybWF0dGVyZW4uLi4iLCAgICAgICAgSURfRk9STUFUX0RJU0sKI2lmZGVmIF9XSU45NQogICAgICAgIE1FTlVJVEVNICJTeXN0ZWVtZGlzayBtYWtlbi4uLiIsIC0xIC8qVE9ETyovCiNlbmRpZgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJWZXJiaW5kaW5nICZtYWtlbiBtZXQgbmV0d2Vya2NoaWpmIixJRF9DT05ORUNUX05FVFdPUktfRFJJVkUKICAgICAgICBNRU5VSVRFTSAiVmVyYmluZGluZyAmdmVyYnJla2VuIG1ldCBuZXR3ZXJrc2NoaWpmIixJRF9ESVNDT05ORUNUX05FVFdPUktfRFJJVkUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiU2NoaWpmICZkZWxlbi4uLiIsICAgICAgICAgICAgMjU0CiAgICAgICAgTUVOVUlURU0gIkRlbGVuICZvbmdlZGFhbiBtYWtlbi4uLiIsICAgIDI1NQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJTY2hpamYgJnNlbGVjdGVyZW4uLi4iLCAgICAgICAyNTEKICAgIH0KCiAgICBQT1BVUCAiJk1hcHBlbiIgIHsKICAgICAgICBNRU5VSVRFTSAiJlZvbGdlbmRlIG5pdmVhdVx0KyIsICAgICAgICAgMzAxCiAgICAgICAgTUVOVUlURU0gIiZVaXRrbGFwcGVuXHQqIiwgICAgICAgICAgICAgIDMwMgogICAgICAgIE1FTlVJVEVNICImQWxsZXMgdWl0a2xhcHBlblx0Q3RybCsqIiwgICAzMDMKICAgICAgICBNRU5VSVRFTSAiJklua2xhcHBlblx0LSIsICAgICAgICAgICAgICAgMzA0CiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZNYXJrZWVyIG1hcHBlbiIsICAgICAgICAgICAgIDUwNQogICAgfQoKICAgIFBPUFVQICImQmVlbGQiICB7CiAgICAgICAgTUVOVUlURU0gIiZIaWVyYXJjaGllIGVuIG1hcGluaG91ZCIsICAgIDQxMwogICAgICAgIE1FTlVJVEVNICImQWxsZWVuIGhpZXJhcmNoaWUiLCAgICAgICAgICA0MTEKICAgICAgICBNRU5VSVRFTSAiQWxsZWVuICZtYXBpbmhvdWQiLCAgICAgICAgICAgNDEyCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIlNwJmxpdHNlbiIsICAgICAgICAgICAgICAgICAgIElEX1ZJRVdfU1BMSVQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJk5hYW0iLCAgICAgICAgICAgICAgICAgICAgICAgSURfVklFV19OQU1FCiAgICAgICAgTUVOVUlURU0gIiZBbGxlIGRldGFpbHMiLCAgICAgICAgICAgICAgIElEX1ZJRVdfQUxMX0FUVFJJQlVURVMsIENIRUNLRUQKICAgICAgICBNRU5VSVRFTSAiJkdlZGVlbHRlbGlqa2UgZGV0YWlscy4uLiIsICAgSURfVklFV19TRUxFQ1RFRF9BVFRSSUJVVEVTCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIlNvcnRlZXIgb3AgJm5hYW0iLCAgICAgICAgICAgIElEX1ZJRVdfU09SVF9OQU1FCiAgICAgICAgTUVOVUlURU0gIlNvcnRlZXIgb3AgJnR5cGUiLCAgICAgICAgICAgIElEX1ZJRVdfU09SVF9UWVBFCiAgICAgICAgTUVOVUlURU0gIlNvcnRlZXIgb3AgJmdyb290dGUiLCAgICAgICAgIElEX1ZJRVdfU09SVF9TSVpFCiAgICAgICAgTUVOVUlURU0gIlNvcnRlZXIgb3AgJmRhdHVtIiwgICAgICAgICAgIElEX1ZJRVdfU09SVF9EQVRFCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIlNvcnRlZXIgb3AgJi4uLiIsICAgICAgICAgICAgIElEX1ZJRVdfRklMVEVSCiAgICB9CgogICAgUE9QVVAgIiZPcHRpZXMiICB7CiAgICAgICAgTUVOVUlURU0gIiZCZXZlc3RpZ2luZy4uLiIsICAgICAgICAgICAgIDUwMQogICAgICAgIE1FTlVJVEVNICImTGV0dGVydHlwZS4uLiIsICAgICAgICAgICAgICBJRF9TRUxFQ1RfRk9OVAogICAgICAgIE1FTlVJVEVNICJHZXJlZWRzY2hhcHBlbmJhbGsgJmFhbnBhc3Nlbi4uLiIsIDUxMgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImR2VyZWVkc2NoYXBwZW5iYWxrIiwgICAgICAgICBJRF9WSUVXX1RPT0xfQkFSLCBDSEVDS0VECiAgICAgICAgTUVOVUlURU0gIiZTY2hpanZlbmJhbGsiLCAgICAgICAgICAgICAgIElEX1ZJRVdfRFJJVkVfQkFSLCBDSEVDS0VECiAgICAgICAgTUVOVUlURU0gIlMmdGF0dXNiYWxrIiwgICAgICAgICAgICAgICAgIElEX1ZJRVdfU1RBVFVTQkFSLCBDSEVDS0VECiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKICAgICAgICBNRU5VSVRFTSAiJlZvbGxlZGlnIHNjaGVybVx0Q3RybCtTaGlmdCtTIiwgSURfVklFV19GVUxMU0NSRUVOCiNlbmRpZgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJHZSZtaW5pbWFsaXNlZXJkIHN0YXJ0ZW4iLCAgICA1MDQKICAgICAgICBNRU5VSVRFTSAiJkluc3RlbGxpbmdlbiBvcHNsYWFuIGJpaiBhZnNsdWl0ZW4iLCA1MTEKICAgIH0KCgogICAgUE9QVVAgIiZCZXZlaWxpZ2luZyIgIHsKICAgICAgICBNRU5VSVRFTSAiJlRvZWdhbmcuLi4iLCAgICAgICAgICAgICAgICAgNjA1CiAgICAgICAgTUVOVUlURU0gIiZMb2dnZW4uLi4iLCAgICAgICAgICAgICAgICAgIDYwNgogICAgICAgIE1FTlVJVEVNICImRWlnZW5hYXIuLi4iLCAgICAgICAgICAgICAgICA2MDcKICAgIH0KCiAgICBQT1BVUCAiJlZlbnN0ZXIiICB7CiAgICAgICAgTUVOVUlURU0gIk5pZXV3ICZ2ZW5zdGVyIiwgICAgICAgICAgICAgIElEX1dJTkRPV19ORVcKICAgICAgICBNRU5VSVRFTSAiVHJhcHNnZXdpanNcdEN0cmwrRjUiLCAgICAgICAgSURfV0lORE9XX0NBU0NBREUKICAgICAgICBNRU5VSVRFTSAiJkJvdmVuIGVsa2FhciIsICAgICAgICAgICAgICAgSURfV0lORE9XX1RJTEVfSE9SWgogICAgICAgIE1FTlVJVEVNICImTmFhc3QgZWxrYWFyXHRDdHJsK0Y0IiwgICAgICBJRF9XSU5ET1dfVElMRV9WRVJUCiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKICAgICAgICBNRU5VSVRFTSAiQXV0b21hdGlzY2ggc2NoaWtrZW4iLCAgICAgICAgSURfV0lORE9XX0FVVE9TT1JUCiNlbmRpZgogICAgICAgIE1FTlVJVEVNICImUGljdG9ncmFtbWVuIHNjaGlra2VuIiwgICAgICBJRF9XSU5ET1dfQVJSQU5HRQogICAgICAgIE1FTlVJVEVNICImVmVybmlldXdlblx0RjUiLCAgICAgICAgICAgICBJRF9SRUZSRVNICiAgICB9CgogICAgUE9QVVAgIiY/IiAgewogICAgICAgIE1FTlVJVEVNICImSGVscC1vbmRlcndlcnBlblx0RjEiLCAgICAgICBJRF9IRUxQCiAgICAgICAgTUVOVUlURU0gIiZab2VrZW4uLi5cdEYxIiwgICAgICAgICAgICAgIElEX0hFTFAKICAgICAgICBNRU5VSVRFTSAiJkluc3RydWN0aWVcdEYxIiwgICAgICAgICAgICAgSURfSEVMUF9VU0lORwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImT3ZlciBXaW5lZmlsZS4uLiIsICAgICAgICAgICBJRF9BQk9VVAojaWZkZWYgX19XSU5FX18KICAgICAgICBNRU5VSVRFTSAiT3ZlciAmV2luZS4uLiIsICAgICAgICAgICAgICAgSURfQUJPVVRfV0lORQojZW5kaWYKICAgIH0KfQoKCklERF9FWEVDVVRFIERJQUxPRyBGSVhFRCBJTVBVUkUgMTUsIDEzLCAyMTAsIDYzClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIlVpdHZvZXJlbiIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiAgICBDT05UUk9MICAgICAgICAgIiIsIDEwMSwgIlN0YXRpYyIsIFNTX1NJTVBMRXxTU19OT1BSRUZJWCwgMywgNiwgMTYyLCAxMAogICAgQ09OVFJPTCAgICAgICAgICImT3BkcmFjaHQ6IiwgLTEsICJTdGF0aWMiLCBTU19MRUZUTk9XT1JEV1JBUHxXU19HUk9VUCwgMywgMTgsIDYwLCAxMAogICAgRURJVFRFWFQgICAgICAgIDIwMSwgMywgMjksIDEzNCwgMTIsIEVTX0FVVE9IU0NST0xMCiAgICBDT05UUk9MICAgICAgICAgIkFscyAmcGljdG9ncmFtIiwgMjE0LCAiQnV0dG9uIiwgQlNfQVVUT0NIRUNLQk9YfFdTX1RBQlNUT1AsMywgNDUsIDcxLCAxMgogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsIDEsIDE1OCwgNiwgNDcsIDE0CiAgICBQVVNIQlVUVE9OICAgICAgIkFubnVsZXJlbiIsIDIsIDE1OCwgMjMsIDQ3LCAxNAogICAgUFVTSEJVVFRPTiAgICAgICImSGVscCIsIDI1NCwgMTU4LCA0MywgNDcsIDE0Cn0K