LyoKICogSGVscCBWaWV3ZXIKICoKICogQ29weXJpZ2h0IDE5OTYgVWxyaWNoIFNjaG1pZAogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAid2luaGVscF9yZXMuaCIKCk1BSU5fTUVOVSBNRU5VIExBTkdVQUdFIExBTkdfU0xPVkFLLCBTVUJMQU5HX0RFRkFVTFQKewogUE9QVVAgIiZT+mJvciIgewogICBNRU5VSVRFTSAiJk90dm9yaZ0uLi4iLCBNTklEX0ZJTEVfT1BFTgogICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgTUVOVUlURU0gIiZUbGHoaZ0iLCBNTklEX0ZJTEVfUFJJTlQKICAgTUVOVUlURU0gIiZOYXN0YXZlbmllIHRsYehlLi4uIiwgTU5JRF9GSUxFX1NFVFVQCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICBNRU5VSVRFTSAiVSZrb27oaZ0iLCBNTklEX0ZJTEVfRVhJVAogfQogUE9QVVAgIiZVcHJhdmmdIiB7CiAgIE1FTlVJVEVNICJLb3DtJnJvdmGdLi4uIiwgTU5JRF9FRElUX0NPUFlETEcKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICImU2tvbWVudG92YZ0uLi4iLCBNTklEX0VESVRfQU5OT1RBVEUKIH0KIFBPUFVQICImWuFsb55rYSIgewogICBNRU5VSVRFTSAiJkRlZmlub3ZhnS4uLiIsIE1OSURfQktNS19ERUZJTkUKIH0KIFBPUFVQICImT3B0aW9ucyIgewogICBQT1BVUAkiSGVscCBhbHdheXMgdmlzaWJsZSIKICAgQkVHSU4KICAgICBNRU5VSVRFTSAiRGVmYXVsdCIsCU1OSURfT1BUU19IRUxQX0RFRkFVTFQKICAgICBNRU5VSVRFTSAiVmlzaWJsZSIsCU1OSURfT1BUU19IRUxQX1ZJU0lCTEUKICAgICBNRU5VSVRFTSAiTm9uIHZpc2libGUiLAlNTklEX09QVFNfSEVMUF9OT05WSVNJQkxFCiAgRU5ECiAgTUVOVUlURU0gIkhpc3RvcnkiLAkJTU5JRF9PUFRTX0hJU1RPUlkKICBQT1BVUCAgICAiRm9udHMiCiAgQkVHSU4KICAgIE1FTlVJVEVNICJTbWFsbCIsCQlNTklEX09QVFNfRk9OVFNfU01BTEwKICAgIE1FTlVJVEVNICJOb3JtYWwiLCAgICAJTU5JRF9PUFRTX0ZPTlRTX05PUk1BTAogICAgTUVOVUlURU0gIkxhcmdlIiwgICAgIAlNTklEX09QVFNfRk9OVFNfTEFSR0UKICBFTkQKICBNRU5VSVRFTSAiVXNlIHN5c3RlbSBjb2xvcnMiLAlNTklEX09QVFNfU1lTVEVNX0NPTE9SUwogfQogUE9QVVAgIiZQb21vYyIgewogICBNRU5VSVRFTSAiUG9tb2MgJm5hIHBvbW9jaSIsIE1OSURfSEVMUF9IRUxQT04KICAgTUVOVUlURU0gIlaeZHkgbmEgJnZyY2h1IiwgTU5JRF9IRUxQX0hFTFBUT1AKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICImSW5mby4uLiIsIE1OSURfSEVMUF9BQk9VVAojaWZkZWYgV0lORUxJQgogICBNRU5VSVRFTSAiTyYgV0lORSIsIE1OSURfSEVMUF9XSU5FCiNlbmRpZgogfQp9CgovKiBTdHJpbmdzICovClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIExBTkdVQUdFIExBTkdfU0xPVkFLLCBTVUJMQU5HX0RFRkFVTFQKewpTVElEX1dJTkVfSEVMUCwgICAgICAgICAgICAgIldJTkUgUG9tb2MiClNUSURfV0hFUlJPUiwgICAgICAgICAgICAgICAiQ0hZQkEiClNUSURfV0FSTklORywgICAgICAgICAgICAgICAiVkFST1ZBTklFIgpTVElEX0lORk8sICAgICAgICAgICAgICAgICAgIkluZm9ybeFjaWUiClNUSURfTk9UX0lNUExFTUVOVEVELCAgICAgICAiTmVpbXBsZW1lbnRvdmFu6SIKU1RJRF9ITFBGSUxFX0VSUk9SX3MsICAgICAgICJDaHliYSBwb+hhcyDo7XRhbmlhIHP6Ym9ydSBgJXMnIgpTVElEX0lOREVYLCAgICAgICAgICAgICAgICAgIiZPYnNhaCIKU1RJRF9DT05URU5UUywJCSAgICAiU3VtbWFyeSIKU1RJRF9CQUNLLCAgICAgICAgICAgICAgICAgICImU3DknSIKU1RJRF9BTExfRklMRVMsICAgICAgICAgICAgICJWmmV0a3kgc/pib3J5ICgqLiopIgpTVElEX0hFTFBfRklMRVNfSExQLCAgICAgICAgIlP6Ym9yeSBwb21vY2kgKCouaGxwKSIKU1RJRF9GSUxFX05PVF9GT1VORF9zICAgICAgICJDYW5ub3QgZmluZCAnJXMnLiBEbyB5b3Ugd2FudCB0byBmaW5kIHRoaXMgZmlsZSB5b3Vyc2VsZj8iClNUSURfTk9fUklDSEVESVQJICAgICJDYW5ub3QgZmluZCBhIHJpY2hlZGl0IGltcGxlbWVudGF0aW9uLi4uIEFib3J0aW5nIgpTVElEX1BTSF9JTkRFWCwJCSJIZWxwIHRvcGljczogIgp9Cg==