LyoKICogV2luZU1pbmUKICogRnJlbmNoIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDAgSm9zaHVhIFRoaWVsZW4KICogQ29weXJpZ2h0IDIwMDMgTWFyY2VsbyBEdWFydGUKICogQ29weXJpZ2h0IDIwMDMgVmluY2VudCBC6XJvbgogKiBDb3B5cmlnaHQgMjAwNiBKb25hdGhhbqBFcm5zdAogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0ZSRU5DSCwgU1VCTEFOR19ORVVUUkFMCgpTVFJJTkdUQUJMRSB7CiAgICAgSURTX0FQUE5BTUUsICJE6W1pbmV1ciBXaW5lIgogICAgIElEU19OT0JPRFksICAiQW5vbnltZSIKfQoKTUVOVV9XSU5FTUlORSBNRU5VIERJU0NBUkRBQkxFCnsKICAgIFBPUFVQICImT3B0aW9ucyIgewogICAgICAgIE1FTlVJVEVNICImTm91dmVhdVx0RjIiLCAgICAgICAgICAgSURNX05FVwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJQb2ludHMgZCdpbnRlcnJvJmdhdGlvbiIsIElETV9NQVJLUQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImROlidXRhbnQiLCAgICAgIElETV9CRUdJTk5FUgogICAgICAgIE1FTlVJVEVNICImQXZhbmPpIiwgICAgICBJRE1fQURWQU5DRUQKICAgICAgICBNRU5VSVRFTSAiJkV4cGVydCIsICAgICAgICBJRE1fRVhQRVJUCiAgICAgICAgTUVOVUlURU0gIiZQZXJzb25uYWxpc+kuLi4iLCAgICAgICAgSURNX0NVU1RPTQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImUXVpdHRlclx0QWx0K1giLCAgICAgICAgICBJRE1fRVhJVAogICAgfQogICAgUE9QVVAgIiZJbmZvIiB7CiAgICAgICAgTUVOVUlURU0gIiZUZW1wcyBsZXMgcGx1cyByYXBpZGVzIiwgICAgSURNX1RJTUVTCiAgICAgICAgTUVOVUlURU0gIsAgJnByb3BvcyIsICAgICAgICAgSURNX0FCT1VUCiAgICB9Cn0KCkRMR19USU1FUyBESUFMT0cgRElTQ0FSREFCTEUgMCwgMCwgMTYwLCA4MApTVFlMRSAgRFNfTU9EQUxGUkFNRSB8IERTXzNETE9PSyB8CiAgICBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBXU19QT1BVUApDQVBUSU9OICJUZW1wcyBsZXMgcGx1cyByYXBpZGVzIgp7CiAgICBHUk9VUEJPWCAgICAgICAgIlRlbXBzIGxlcyBwbHVzIHJhcGlkZXMiLCBJRElHTk9SRSwgIDEwLCAgMTAsIDE0MCwgIDQ1CiAgICBMVEVYVCAgICAgICAgICAgIkTpYnV0YW50IiwgICAgICBJRElHTk9SRSwgIDIwLCAgMjAsICA0MCwgICA4CiAgICBMVEVYVCAgICAgICAgICAgIkF2YW5j6SIsICAgICAgICBJRElHTk9SRSwgIDIwLCAgMzAsICA0MCwgICA4CiAgICBMVEVYVCAgICAgICAgICAgIkV4cGVydCIsICAgICAgICBJRElHTk9SRSwgIDIwLCAgNDAsICA0MCwgICA4CiAgICBMVEVYVCAgICAgICAgICAgIjk5OSIsICAgICAgICAgIElEQ19USU1FMSwgIDcwLCAgMjAsICAxNSwgICA4CiAgICBMVEVYVCAgICAgICAgICAgIjk5OSIsICAgICAgICAgIElEQ19USU1FMiwgIDcwLCAgMzAsICAxNSwgICA4CiAgICBMVEVYVCAgICAgICAgICAgIjk5OSIsICAgICAgICAgIElEQ19USU1FMywgIDcwLCAgNDAsICAxNSwgICA4CiAgICBMVEVYVCAgICAgICAgICAgIiIsICAgICAgICAgICAgIElEQ19OQU1FMSwgIDkwLCAgMjAsICA1NSwgICA4CiAgICBMVEVYVCAgICAgICAgICAgIiIsICAgICAgICAgICAgIElEQ19OQU1FMiwgIDkwLCAgMzAsICA1NSwgICA4CiAgICBMVEVYVCAgICAgICAgICAgIiIsICAgICAgICAgICAgIElEQ19OQU1FMywgIDkwLCAgNDAsICA1NSwgICA4CiAgICBERUZQVVNIQlVUVE9OICAgIk9LIiwgICAgICAgICAgICAgICAgSURPSywgIDU1LCAgNjAsICA1MCwgIDE1Cn0KCkRMR19DT05HUkFUUyBESUFMT0cgRElTQ0FSREFCTEUgIDAsIDAsIDE2MCwgNjAKU1RZTEUgIERTX01PREFMRlJBTUUgfCBEU18zRExPT0sgfAogICAgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgV1NfUE9QVVAKQ0FQVElPTiAiRulsaWNpdGF0aW9uc6AhIgp7CiAgICBMVEVYVCAgICAgICAgICAgIlZldWlsbGV6IHNhaXNpciB2b3RyZSBub20iLCBJRElHTk9SRSwgIDEwLCAgMTAsIDE1MCwgIDEwCiAgICBFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEQ19FRElUTkFNRSwgIDI1LCAgMjAsIDExMCwgIDEyCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIiwgICAgICAgICAgICAgICAgICAgICAgICAgSURPSywgIDYwLCAgNDAsICA0MCwgIDE1Cn0KCkRMR19DVVNUT00gRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAxMDAsIDEwMApTVFlMRSAgRFNfTU9EQUxGUkFNRSB8IERTXzNETE9PSyB8CiAgICBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBXU19QT1BVUApDQVBUSU9OICJHcmlsbGUgcGVyc29ubmFsaXPpZSIKewogICAgTFRFWFQgICAgICAgICAgICJSYW5n6WVzIiwgIElESUdOT1JFLCAgIDUsICAgNSwgIDMwLCAgMTAKICAgIExURVhUICAgICAgICAgICAiQ29sb25uZXMiLCBJRElHTk9SRSwgICA1LCAgMzUsICAzMCwgIDEwCiAgICBMVEVYVCAgICAgICAgICAgIk1pbmVzIiwgICAgSURJR05PUkUsICAgNSwgIDY1LCAgMzAsICAxMAogICAgRURJVFRFWFQgICAgICAgICAgICAgICBJRENfRURJVFJPV1MsICAgNSwgIDE1LCAgMjAsICAxMiwgRVNfTlVNQkVSCiAgICBFRElUVEVYVCAgICAgICAgICAgICAgIElEQ19FRElUQ09MUywgICA1LCAgNDUsICAyMCwgIDEyLCBFU19OVU1CRVIKICAgIEVESVRURVhUICAgICAgICAgICAgICBJRENfRURJVE1JTkVTLCAgIDUsICA3NSwgIDIwLCAgMTIsIEVTX05VTUJFUgogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsICAgICAgICAgIElET0ssICAgICAgNDAsICAzMCwgIDUwLCAgMTUKICAgIFBVU0hCVVRUT04gICAgICAiQW5udWxlciIsIElEQ0FOQ0VMLCAgNDAsICA1MCwgIDUwLCAgMTUKfQoKRExHX0FCT1VUIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMTYwLCA4MApTVFlMRSAgRFNfTU9EQUxGUkFNRSB8IERTXzNETE9PSyB8CiAgICBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBXU19QT1BVUApDQVBUSU9OICLAIHByb3BvcyIKewogICAgTFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldpbmVtaW5lIiwgSURJR05PUkUsICAxMCwgIDEwLCAgNTAsICAxMAogICAgTFRFWFQgICAgICAgICAiQ29weXJpZ2h0IDIwMDAsIEpvc2h1YSBUaGllbGVuIiwgSURJR05PUkUsICAzNSwgIDI1LCAxMTUsICAxMAogICAgTFRFWFQgICAgICAgICAgICAgICAgInNvdXMgbGEgbGljZW5jZSBMR1BMIiwgSURJR05PUkUsICAzNSwgIDM1LCAxMTUsICAxMAogICAgSUNPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldJTkVNSU5FIiwgSURJR05PUkUsICAxMCwgIDI1LCAgMjAsICAyMAogICAgREVGUFVTSEJVVFRPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9LIiwgSURPSywgICAgICA1MCwgIDYwLCAgNjAsICAxNQp9Cg==