LyoKICogSGVscCBWaWV3ZXIgKER1dGNoIHJlc291cmNlcykKICoKICogQ29weXJpZ2h0IDIwMDMgSGFucyBMZWlkZWtrZXIKICogQ29weXJpZ2h0IDIwMDggRnJhbnMgS29vbAogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgovKiBNZW51ICovCgpNQUlOX01FTlUgTUVOVSBMQU5HVUFHRSBMQU5HX0RVVENILCBTVUJMQU5HX05FVVRSQUwKewogUE9QVVAgIiZCZXN0YW5kIiB7CiAgTUVOVUlURU0gIiZPcGVuZW4iLCBNTklEX0ZJTEVfT1BFTgogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJBZiZkcnVra2VuIiwgTU5JRF9GSUxFX1BSSU5UCiAgTUVOVUlURU0gIiZQcmludGVyaW5zdGVsbGluZ2VuLi4uIiwgTU5JRF9GSUxFX1NFVFVQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZBZnNsdWl0ZW4iLCBNTklEX0ZJTEVfRVhJVAogfQogUE9QVVAgIiZCZXdlcmtlbiIgewogICBNRU5VSVRFTSAiJktvcGnrcmVuLi4uIiwgTU5JRF9FRElUX0NPUFlETEcKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICImQW5ub3RlcmVuLi4uIiwgTU5JRF9FRElUX0FOTk9UQVRFCiB9CiBQT1BVUCAiJkZhdm9yaWV0ZW4iIHsKICAgTUVOVUlURU0gIiZBYW5tYWtlbi4uLiIsIE1OSURfQktNS19ERUZJTkUKIH0KIFBPUFVQICImT3B0aW9ucyIgewogICBQT1BVUAkiSGVscCBhbHdheXMgdmlzaWJsZSIKICAgQkVHSU4KICAgICBNRU5VSVRFTSAiRGVmYXVsdCIsCU1OSURfT1BUU19IRUxQX0RFRkFVTFQKICAgICBNRU5VSVRFTSAiVmlzaWJsZSIsCU1OSURfT1BUU19IRUxQX1ZJU0lCTEUKICAgICBNRU5VSVRFTSAiTm9uIHZpc2libGUiLAlNTklEX09QVFNfSEVMUF9OT05WSVNJQkxFCiAgRU5ECiAgTUVOVUlURU0gIkhpc3RvcnkiLAkJTU5JRF9PUFRTX0hJU1RPUlkKICBQT1BVUCAgICAiRm9udHMiCiAgQkVHSU4KICAgIE1FTlVJVEVNICJTbWFsbCIsCQlNTklEX09QVFNfRk9OVFNfU01BTEwKICAgIE1FTlVJVEVNICJOb3JtYWwiLCAgICAJTU5JRF9PUFRTX0ZPTlRTX05PUk1BTAogICAgTUVOVUlURU0gIkxhcmdlIiwgICAgIAlNTklEX09QVFNfRk9OVFNfTEFSR0UKICBFTkQKICBNRU5VSVRFTSAiVXNlIHN5c3RlbSBjb2xvcnMiLAlNTklEX09QVFNfU1lTVEVNX0NPTE9SUwogfQogUE9QVVAgIiZIZWxwIiB7CiAgIE1FTlVJVEVNICJIdWxwICZiaWogaGVscCIsIE1OSURfSEVMUF9IRUxQT04KICAgTUVOVUlURU0gIkFsdGlqZCAmemljaHRiYWFyIiwgTU5JRF9IRUxQX0hFTFBUT1AKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICImSW5mby4uLiIsIE1OSURfSEVMUF9BQk9VVAojaWZkZWYgV0lORUxJQgogICBNRU5VSVRFTSAiJk92ZXIgV0lORSIsIE1OSURfSEVMUF9XSU5FCiNlbmRpZgogfQp9CgpJRERfSU5ERVggRElBTE9HIERJU0NBUkRBQkxFIDAsIDAsIDIwMCwgMTkwIExBTkdVQUdFIExBTkdfRFVUQ0gsIFNVQkxBTkdfTkVVVFJBTApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpDQVBUSU9OICJJbmRleCIKewogICAgTElTVEJPWCBJRENfSU5ERVhMSVNULCAxMCwgMTAsIDE4MCwgMTUwLCBMQlNfTk9JTlRFR1JBTEhFSUdIVCB8IFdTX1ZTQ1JPTEwgfCBXU19CT1JERVIKfQoKSUREX1NFQVJDSCBESUFMT0cgRElTQ0FSREFCTEUgMCwgMCwgMjAwLCAxOTAgTEFOR1VBR0UgTEFOR19EVVRDSCwgU1VCTEFOR19ORVVUUkFMClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpGT05UIDgsICJNUyBTaGVsbCBEbGciCkNBUFRJT04gIlpvZWtlbiIKewogICAgTFRFWFQgICJOb2cgbmlldCBnZWltcGxlbWVudGVlcmQiLCAtMSwgMTAsIDEwLCAxODAsIDE1MAp9CgovKiBTdHJpbmdzICovClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIExBTkdVQUdFIExBTkdfRFVUQ0gsIFNVQkxBTkdfTkVVVFJBTAp7ClNUSURfV0lORV9IRUxQLCAJIldJTkUgSGVscCIKU1RJRF9XSEVSUk9SLCAJCSJGT1VUIgpTVElEX1dBUk5JTkcsICAJCSJXQUFSU0NIVVdJTkciClNUSURfSU5GTywgIAkJIkluZm9ybWF0aWUiClNUSURfTk9UX0lNUExFTUVOVEVELCAJIk5pZXQgZ2XvbXBsZW1lbnRlZXJkIgpTVElEX0hMUEZJTEVfRVJST1JfcywgCSJGb3V0IGJpaiBoZXQgbGV6ZW4gdmFuIGhldCBoZWxwYmVzdGFuZCBgJXMnIgpTVElEX0lOREVYLCAJCSImSW5ob3VkIgpTVElEX0NPTlRFTlRTLAkJIlN1bW1hcnkiClNUSURfQkFDSywgCQkiJlRlcnVnIgpTVElEX0FMTF9GSUxFUywgCSJBbGxlIGJlc3RhbmRlbiAoKi4qKSIKU1RJRF9IRUxQX0ZJTEVTX0hMUCwgCSJIZWxwYmVzdGFuZGVuICgqLmhscCkiClNUSURfRklMRV9OT1RfRk9VTkRfcwkiS2FuICclcycgbmlldCBvcGVuZW4uIFdpbHQgdSB6ZWxmIGRpdCBiZXN0YW5kIHpvZWtlbj8iClNUSURfTk9fUklDSEVESVQJIkNhbm5vdCBmaW5kIGEgcmljaGVkaXQgaW1wbGVtZW50YXRpb24uLi4gQWJvcnRpbmciClNUSURfUFNIX0lOREVYLAkJIkhlbHAgdG9waWNzOiAiCn0KCkNPTlRFWFRfTUVOVSBNRU5VIExBTkdVQUdFIExBTkdfRFVUQ0gsIFNVQkxBTkdfTkVVVFJBTApCRUdJTgoJUE9QVVAgIiIKCUJFR0lOCgkJTUVOVUlURU0gIkFubm90ZXJpbmcuLi4iLCAgICAgICBNTklEX0NUWFRfQU5OT1RBVEUKCQlNRU5VSVRFTSAiS29waetyZW4iLCAgICAgICAgICAgIE1OSURfQ1RYVF9DT1BZCgkJTUVOVUlURU0gIlByaW50Li4uIiwgICAgICAgICAgICBNTklEX0NUWFRfUFJJTlQKCQlQT1BVUCAgICAiTGV0dGVydHlwZXMiCgkJQkVHSU4KCQkJTUVOVUlURU0gIktsZWluIiwgICAgICAgTU5JRF9DVFhUX0ZPTlRTX1NNQUxMCgkJCU1FTlVJVEVNICJOb3JtYWFsIiwgICAgIE1OSURfQ1RYVF9GT05UU19OT1JNQUwKCQkJTUVOVUlURU0gIkdyb290IiwgICAgICAgTU5JRF9DVFhUX0ZPTlRTX0xBUkdFCgkJRU5ECgkJUE9QVVAgICAiSGVscCBhbHRpamQgemljaHRiYWFyIgoJCUJFR0lOCgkJCU1FTlVJVEVNICJTdGFuZGFhcmQiLCAgIE1OSURfQ1RYVF9IRUxQX0RFRkFVTFQKCQkJTUVOVUlURU0gIlppY2h0YmFhciIsICAgTU5JRF9DVFhUX0hFTFBfVklTSUJMRQoJCQlNRU5VSVRFTSAiT256aWNodGJhYXIiLCBNTklEX0NUWFRfSEVMUF9OT05WSVNJQkxFCgkJRU5ECgkJTUVOVUlURU0gIkdlYnJ1aWsgc3lzdGVlbSBrbGV1cmVuIiwgICBNTklEX0NUWFRfU1lTVEVNX0NPTE9SUwoJRU5ECkVORAo=