LyoKICogV2luZUZpbGUKICogSHVuZ2FyaWFuIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDAgTWFydGluIEZ1Y2hzCiAqIENvcHlyaWdodCAyMDAyIFN0ZXZlbiBFZHdhcmRzCiAqIENvcHlyaWdodCAyMDAyIEFsZXhhbmRyZSBKdWxsaWFyZAogKiBDb3B5cmlnaHQgMjAwMiBab2x5IE5hZ3kKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgInJlc291cmNlLmgiCgpMQU5HVUFHRSBMQU5HX0hVTkdBUklBTiwgU1VCTEFOR19ERUZBVUxUCgovKiBNZW51ICovCgpJRE1fV0lORUZJTEUgTUVOVSBGSVhFRCBJTVBVUkUKewogICAgUE9QVVAgIiZG4WpsIiAgewogICAgICAgIE1FTlVJVEVNICImTWVneW5pdOFzXHRFbnRlciIsICAgICAgICAgICBJRF9BQ1RJVkFURQogICAgICAgIE1FTlVJVEVNICLBdCZoZWx5ZXrpcy4uLlx0RjciLCAgICAgICAgICBJRF9GSUxFX01PVkUKICAgICAgICBNRU5VSVRFTSAiJk3hc29s4XMuLi5cdEY4IiwgICAgICAgICAgICAgSURfRklMRV9DT1BZCiAgICAgICAgTUVOVUlURU0gIiZW4WfzbGFwb24uLi5cdEY5IiwgICAgICAgICAgIDExOAogICAgICAgIE1FTlVJVEVNICImVPZybOlzXHREZWwiLCAgICAgICAgICAgICAgICBJRF9GSUxFX0RFTEVURQogICAgICAgIE1FTlVJVEVNICLBdCZuZXZleulzLi4uIiwgICAgICAgICAgICAgICAxMDkKICAgICAgICBNRU5VSVRFTSAiVCZ1bGFqZG9uc+Fnb2suLi5cdEFsdCtFbnRlciIsIElEX0VESVRfUFJPUEVSVElFUwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImQmVjc29tYWdvbOFzLi4uIiwgICAgICAgICAgICAxMTkKICAgICAgICBNRU5VSVRFTSAiSyZpY3NvbWFnb2zhcy4uLiIsICAgICAgICAgICAgMTIwCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZGdXR0YXThcy4uLiIsICAgICAgICAgICAgICAgIElEX1JVTgogICAgICAgIE1FTlVJVEVNICImTnlvbXRhdOFzLi4uIiwgICAgICAgICAgICAgICAxMDIKICAgICAgICBNRU5VSVRFTSAiVOFyc+104XMuLi4iLCAgICAgICAgICAgICAgICAgMTAzCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gItpqICZtYXBwYS4uLiIsICAgICAgICAgICAgICAgIDExMQogICAgICAgIE1FTlVJVEVNICJLZXJlJnPpcy4uLiIsICAgICAgICAgICAgICAgICAxMDQKICAgICAgICBNRU5VSVRFTSAiRuFqbG9rIGtpJnbhbGFzenThc2EuLi4iLCAgICAgMTE2CiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKICAgICAgICBNRU5VSVRFTSAiJktpbOlw6XNcdEFsdCtYIiwgICAgICAgICAgICAgSURfRklMRV9FWElUCiNlbHNlCiAgICAgICAgTUVOVUlURU0gIiZLaWzpcOlzIiwgICAgICAgICAgICAgICAgICAgIElEX0ZJTEVfRVhJVAojZW5kaWYKICAgIH0KCiAgICBQT1BVUCAiJkxlbWV6IiAgewogICAgICAgIE1FTlVJVEVNICJMZW1leiAmbeFzb2zhc2EuLi4iLCAgICAgICAgICAyMDEKICAgICAgICBNRU5VSVRFTSAiJkxlbWV6Y2lta2UuLi4iLCAgICAgICAgICAgICAgMjAyCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZGb3JtYXThbOFzLi4uIiwgICAgICAgICAgICAgIElEX0ZPUk1BVF9ESVNLCiNpZmRlZiBfV0lOOTUKICAgICAgICBNRU5VSVRFTSAiJlJlbmRzemVybGVtZXoga+lzeu106XNlLi4uIiwgLTEgIC8qVE9ETyovCiNlbmRpZgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImSOFs83phdGkgbWVnaGFqdPMgY3NhdGxha296dGF04XNhIixJRF9DT05ORUNUX05FVFdPUktfRFJJVkUKICAgICAgICBNRU5VSVRFTSAiSOFs83phdGkgbWVnaGFqdPMgbGV24Wxhc3p04XNhIixJRF9ESVNDT05ORUNUX05FVFdPUktfRFJJVkUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiTWVnb3N6dOFzLi4uIiwgICAgICAgICAgICAgICAgMjU0CiAgICAgICAgTUVOVUlURU0gIk1lZ29zenThcyAmbWVnc3r8bnRldOlzZS4uLiIsIDI1NQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJNZWdoYWp08yBraSZ24Wxhc3p04XNhLi4uIiwgICAyNTEKICAgIH0KCiAgICBQT1BVUCAiJk1hcHDhayIgIHsKICAgICAgICBNRU5VSVRFTSAiJkv2dmV0a2V69SBzemludFx0KyIsICAgICAgICAgMzAxCiAgICAgICAgTUVOVUlURU0gIiZGYSBraW55aXThc2FcdCoiLCAgICAgICAgICAgIDMwMgogICAgICAgIE1FTlVJVEVNICImTWluZGVuIGtpbnlpdOFzYVx0U3RyZysqIiwgICAzMDMKICAgICAgICBNRU5VSVRFTSAiRmEgJmJlY3N1a+FzYVx0LSIsICAgICAgICAgICAgMzA0CiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZHeWVybWVrZWsga2lqZWz2bOlzZSIsICAgICAgIDUwNQogICAgfQoKICAgIFBPUFVQICImTul6ZXQiICB7CiAgICAgICAgTUVOVUlURU0gIiZUZWxqZXMiLCAgICAgICAgICAgICAgICAgICAgIDQxMwogICAgICAgIE1FTlVJVEVNICImS/ZueXZ04XJmYSIsICAgICAgICAgICAgICAgICA0MTEKICAgICAgICBNRU5VSVRFTSAiJkNzYWsgbWFwcOFrIiwgICAgICAgICAgICAgICAgNDEyCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZGZWxvc3p04XMiLCAgICAgICAgICAgICAgICAgIElEX1ZJRVdfU1BMSVQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJk7pdiIsICAgICAgICAgICAgICAgICAgICAgICAgSURfVklFV19OQU1FCiAgICAgICAgTUVOVUlURU0gIiZNaW5kZW4gculzemxldCIsICAgICAgICAgICAgIElEX1ZJRVdfQUxMX0FUVFJJQlVURVMsIENIRUNLRUQKICAgICAgICBNRU5VSVRFTSAiJkVneWVkaS4uLiIsICAgICAgICAgICAgICAgICAgSURfVklFV19TRUxFQ1RFRF9BVFRSSUJVVEVTCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZSZW5kZXrpcyBu6XYgc3plcmludCIsICAgICAgIElEX1ZJRVdfU09SVF9OQU1FCiAgICAgICAgTUVOVUlURU0gIlJlbmRleulzIGsmaXRlcmplc3p06XMgc3plcmludCIsSURfVklFV19TT1JUX1RZUEUKICAgICAgICBNRU5VSVRFTSAiUmVuZGV66XMgJm3pcmV0IHN6ZXJpbnQiLCAgICAgSURfVklFV19TT1JUX1NJWkUKICAgICAgICBNRU5VSVRFTSAiUmVuZGV66XMgJmThdHVtIHN6ZXJpbnQiLCAgICAgSURfVklFV19TT1JUX0RBVEUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiRWd5ZWRpIHJlbmRleulzICYuLi4iLCAgICAgICAgSURfVklFV19GSUxURVIKICAgIH0KCiAgICBQT1BVUCAiJkJl4Wxs7XThc29rIiAgewogICAgICAgIE1FTlVJVEVNICImTWVnZXL1c+106XMuLi4iLCAgICAgICAgICAgICA1MDEKICAgICAgICBNRU5VSVRFTSAiJkJldPtr6XN6bGV0Li4uIiwgICAgICAgICAgICAgSURfU0VMRUNUX0ZPTlQKICAgICAgICBNRU5VSVRFTSAiRSZneWVkaSBlc3pr9np04XIuLi4iLCAgICAgICAgNTEyCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZFc3pr9np04XIiLCAgICAgICAgICAgICAgICAgIElEX1ZJRVdfVE9PTF9CQVIsIENIRUNLRUQKICAgICAgICBNRU5VSVRFTSAiJkxlbWV6dOFyIiwgICAgICAgICAgICAgICAgICAgSURfVklFV19EUklWRV9CQVIsIENIRUNLRUQKICAgICAgICBNRU5VSVRFTSAiJsFsbGFwb3Rzb3IiLCAgICAgICAgICAgICAgICAgSURfVklFV19TVEFUVVNCQVIsIENIRUNLRUQKI2lmbmRlZiBfTk9fRVhURU5TSU9OUwogICAgICAgIE1FTlVJVEVNICImVGVsamVzIGvpcGVybnn1c1x0Q3RybCtTaGlmdCtTIixJRF9WSUVXX0ZVTExTQ1JFRU4KI2VuZGlmCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIlByb2dyYW1mdXR0YXThcyB1dOFuaSAmc3ppbWLzbHVtIiw1MDQKICAgICAgICBNRU5VSVRFTSAiTWVnc3r8bnRldOlzIGEgdOFyb2zhcyB26WfpbiIsNTExCiAgICB9CgoKICAgIFBPUFVQICImQml6dG9uc+FnIiAgewogICAgICAgIE1FTlVJVEVNICImSG96euFm6XLpcy4uLiIsICAgICAgICAgICAgICA2MDUKICAgICAgICBNRU5VSVRFTSAiJk5hcGzzeuFzLi4uIiwgICAgICAgICAgICAgICAgNjA2CiAgICAgICAgTUVOVUlURU0gIiZUdWxhamRvbm9zLi4uIiwgICAgICAgICAgICAgIDYwNwogICAgfQoKICAgIFBPUFVQICImQWJsYWtvayIgIHsKICAgICAgICBNRU5VSVRFTSAi2mogYSZibGFrIiwgICAgICAgICAgICAgICAgICAgSURfV0lORE9XX05FVwogICAgICAgIE1FTlVJVEVNICJM6XBjc/V6ZXRlcyBlbHJlbmRleulzXHRDdHJsK0Y1IixJRF9XSU5ET1dfQ0FTQ0FERQogICAgICAgIE1FTlVJVEVNICJNb3phaWtzemVy+yBlbHJlbmRleulzICZ27XpzemludGVzZW4iLElEX1dJTkRPV19USUxFX0hPUloKICAgICAgICBNRU5VSVRFTSAiTW96YWlrc3plcvsgZWxyZW5kZXrpcyBm/CZnZ/VsZWdlc2VuXHRDdHJsK0Y0IixJRF9XSU5ET1dfVElMRV9WRVJUCiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKICAgICAgICBNRU5VSVRFTSAiQXV0b21hdGlrdXMgZWxyZW5kZXrpcyIsICAgICAgSURfV0lORE9XX0FVVE9TT1JUCiNlbmRpZgogICAgICAgIE1FTlVJVEVNICImU3ppbWLzbHVtIGVscmVuZGV66XMiLCAgICAgICBJRF9XSU5ET1dfQVJSQU5HRQogICAgICAgIE1FTlVJVEVNICImRnJpc3PtdOlzXHRGNSIsICAgICAgICAgICAgICBJRF9SRUZSRVNICiAgICB9CgogICAgUE9QVVAgIiY/IiAgewogICAgICAgIE1FTlVJVEVNICImU/pn8yB06W1ha/Zy9mtcdEYxIiwgICAgICAgICBJRF9IRUxQCiAgICAgICAgTUVOVUlURU0gIlP6Z/MgJmtlcmVz6XMuLi5cdEYxIiwgICAgICAgIElEX0hFTFAKICAgICAgICBNRU5VSVRFTSAiJkhhc3pu4WxhdFx0RjEiLCAgICAgICAgICAgICAgSURfSEVMUF9VU0lORwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImV2luZWZpbGUtcvNsLi4uIiwgICAgICAgICAgICBJRF9BQk9VVAogICAgfQp9Cg==