LyoKICogSGVscCBWaWV3ZXIKICogU2ltcGxpZmllZCBDaGluZXNlIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDIgbGl1c3BpZGVyIDxsaXVzcGlkZXJAeWFob28uY29tPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgovKiBNZW51ICovCgpNQUlOX01FTlUgTUVOVSBMQU5HVUFHRSBMQU5HX0NISU5FU0UsIFNVQkxBTkdfQ0hJTkVTRV9TSU1QTElGSUVECnsKIFBPUFVQICLOxLz+o6gmRqOpIiB7CiAgTUVOVUlURU0gIrTyv6qjqCZPo6kiLCBNTklEX0ZJTEVfT1BFTgogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICK08tOho6gmUKOpIiwgTU5JRF9GSUxFX1BSSU5UCiAgTUVOVUlURU0gIrTy06G7+sno1sOjqCZTo6kuLi4iLCBNTklEX0ZJTEVfU0VUVVAKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIs3Ls/ajqCZFo6kiLCBNTklEX0ZJTEVfRVhJVAogfQogUE9QVVAgIrHgvK2jqCZFo6kiIHsKICAgTUVOVUlURU0gIri01sajqCZDo6kuLi4iLCBNTklEX0VESVRfQ09QWURMRwogICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgTUVOVUlURU0gIteiys2jqCZBo6kuLi4iLCBNTklEX0VESVRfQU5OT1RBVEUKIH0KIFBPUFVQICLK6cepo6gmQqOpIiB7CiAgIE1FTlVJVEVNICK2qNLlo6gmRKOpLi4uIiwgTU5JRF9CS01LX0RFRklORQogfQogUE9QVVAgIiZPcHRpb25zIiB7CiAgIFBPUFVQCSJIZWxwIGFsd2F5cyB2aXNpYmxlIgogICBCRUdJTgogICAgIE1FTlVJVEVNICJEZWZhdWx0IiwJTU5JRF9PUFRTX0hFTFBfREVGQVVMVAogICAgIE1FTlVJVEVNICJWaXNpYmxlIiwJTU5JRF9PUFRTX0hFTFBfVklTSUJMRQogICAgIE1FTlVJVEVNICJOb24gdmlzaWJsZSIsCU1OSURfT1BUU19IRUxQX05PTlZJU0lCTEUKICBFTkQKICBNRU5VSVRFTSAiSGlzdG9yeSIsCQlNTklEX09QVFNfSElTVE9SWQogIFBPUFVQICAgICJGb250cyIKICBCRUdJTgogICAgTUVOVUlURU0gIlNtYWxsIiwJCU1OSURfT1BUU19GT05UU19TTUFMTAogICAgTUVOVUlURU0gIk5vcm1hbCIsICAgIAlNTklEX09QVFNfRk9OVFNfTk9STUFMCiAgICBNRU5VSVRFTSAiTGFyZ2UiLCAgICAgCU1OSURfT1BUU19GT05UU19MQVJHRQogIEVORAogIE1FTlVJVEVNICJVc2Ugc3lzdGVtIGNvbG9ycyIsCU1OSURfT1BUU19TWVNURU1fQ09MT1JTCiB9CiBQT1BVUCAisO/W+qOoJkijqSIgewogICBNRU5VSVRFTSAiyOe6zsq508Ow79b6o6gmT6OpIiwgTU5JRF9IRUxQX0hFTFBPTgogICBNRU5VSVRFTSAi19zKx9Ta1+7HsMPmo6gmVKOpIiwgTU5JRF9IRUxQX0hFTFBUT1AKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICLXysHP0MXPoqOoJkmjqS4uLiIsIE1OSURfSEVMUF9BQk9VVAojaWZkZWYgV0lORUxJQgogICBNRU5VSVRFTSAiudjT2iBXSU5Fo6gmQaOpIiwgTU5JRF9IRUxQX1dJTkUKI2VuZGlmCiB9Cn0KCi8qIFN0cmluZ3MgKi8KU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUgTEFOR1VBR0UgTEFOR19DSElORVNFLCBTVUJMQU5HX0NISU5FU0VfU0lNUExJRklFRAp7ClNUSURfV0lORV9IRUxQLCAJIldJTkUgsO/W+iIKU1RJRF9XSEVSUk9SLCAJCSK07c7zIgpTVElEX1dBUk5JTkcsICAJCSK+r7jmIgpTVElEX0lORk8sICAJCSLQxc+iIgpTVElEX05PVF9JTVBMRU1FTlRFRCwgCSLOtMq1z9YiClNUSURfSExQRklMRV9FUlJPUl9zLCAJIrbByOuw79b6zsS8/iChriVzoa8gyrG3osn6tO3O8yIKU1RJRF9JTkRFWCwgCQkixNrI3aOoJkOjqSIKU1RJRF9DT05URU5UUywJCSJTdW1tYXJ5IgpTVElEX0JBQ0ssIAkJIre1u9ijqCZCo6kiClNUSURfQUxMX0ZJTEVTLCAJIsv509DOxLz+ICgqLiopIgpTVElEX0hFTFBfRklMRVNfSExQLCAJIrDv1vrOxLz+ICgqLmhscCkiClNUSURfRklMRV9OT1RfRk9VTkRfcwkiQ2Fubm90IGZpbmQgJyVzJy4gRG8geW91IHdhbnQgdG8gZmluZCB0aGlzIGZpbGUgeW91cnNlbGY/IgpTVElEX05PX1JJQ0hFRElUCSJDYW5ub3QgZmluZCBhIHJpY2hlZGl0IGltcGxlbWVudGF0aW9uLi4uIEFib3J0aW5nIgpTVElEX1BTSF9JTkRFWCwJCSJIZWxwIHRvcGljczogIgp9Cg==