LyoKICogSGVscCBWaWV3ZXIgKFJ1c3NpYW4gcmVzb3VyY2VzKQogKgogKiBDb3B5cmlnaHQgMjAwMyBJZ29yIFN0ZXBpbgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgovKiBNZW51ICovCgpNQUlOX01FTlUgTUVOVSBMQU5HVUFHRSBMQU5HX1JVU1NJQU4sIFNVQkxBTkdfREVGQVVMVAp7CiBQT1BVUCAiJtTg6esiIHsKICBNRU5VSVRFTSAiJs7y6vD78vwiLCBNTklEX0ZJTEVfT1BFTgogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImz+X34PLg8vwiLCBNTklEX0ZJTEVfUFJJTlQKICBNRU5VSVRFTSAizeDx8vDu6ergICbv8Ojt8uXw4C4uLiIsIE1OSURfRklMRV9TRVRVUAogICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJsL79e7kIiwgTU5JRF9GSUxFX0VYSVQKIH0KIFBPUFVQICImz/Dg4urgIiB7CiAgIE1FTlVJVEVNICImyu7v6PDu4uDy/C4uLiIsIE1OSURfRURJVF9DT1BZRExHCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICBNRU5VSVRFTSAiJsfg7OXy6uguLi4iLCBNTklEX0VESVRfQU5OT1RBVEUKIH0KIFBPUFVQICImx+Dq6+Dk6uAiIHsKICAgTUVOVUlURU0gIibO7/Dl5OXr6PL8Li4uIiwgTU5JRF9CS01LX0RFRklORQogfQogUE9QVVAgIibR7/Dg4urgIiB7CiAgIE1FTlVJVEVNICLP7uzu+fwgJu/uIO/u7O756CIsIE1OSURfSEVMUF9IRUxQT04KICAgTUVOVUlURU0gIsLx5ePk4CAm8eLl8PXzIiwgTU5JRF9IRUxQX0hFTFBUT1AKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICImyO307vDs4Pbo/y4uLiIsIE1OSURfSEVMUF9BQk9VVAojaWZkZWYgV0lORUxJQgogICBNRU5VSVRFTSAiJs4gV2luZSIsIE1OSURfSEVMUF9XSU5FCiNlbmRpZgogfQp9CgovKiBTdHJpbmdzICovClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIExBTkdVQUdFIExBTkdfUlVTU0lBTiwgU1VCTEFOR19ERUZBVUxUCnsKU1RJRF9XSU5FX0hFTFAsIAki0e/w4OLq4CBXSU5FIgpTVElEX1dIRVJST1IsIAkJIs7YyMHKwCIKU1RJRF9XQVJOSU5HLCAgCQkiws3IzMDNyMUiClNUSURfSU5GTywgIAkJIsjt9O7w7OD26P8iClNUSURfTk9UX0lNUExFTUVOVEVELCAJIs3lIPDl4Ovo5+7i4O3t7iIKU1RJRF9ITFBGSUxFX0VSUk9SX3MsIAkizvjo4ergIO/w6CD38uXt6Ogg9ODp6+Ag7+7s7vnoIGAlcyciClNUSURfQ09OVEVOVFMsIAkJIibR7uTl8Obg7ejlIgpTVElEX1NFQVJDSCwgCQkiJs3g6fLoIgpTVElEX0JBQ0ssIAkJIibN4Ofg5CIKU1RJRF9ISVNUT1JZLCAJCSImyPHy7vDo/yIKU1RJRF9UT1BJQ1MsCQkiJtPq4Ofg8uXr/CIKU1RJRF9BTExfRklMRVMsIAkiwvHlIPTg6ev7ICgqLiopIgpTVElEX0hFTFBfRklMRVNfSExQLCAJItTg6ev7IPHv8ODi6uggKCouaGxwKSIKU1RJRF9GSUxFX05PVF9GT1VORF9zCSLN5SDs7uPzIO3g6fLoICclcycuIML7IPXu8ujy5SDt4Ony6CD98u7yIPTg6esg8eDs7vHy7v/y5ev87e4/Igp9Cg==