LyoKICogQ29weXJpZ2h0IDIwMDAgVXdlIEJvbm5lcwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0dFUk1BTiwgU1VCTEFOR19ERUZBVUxUCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgICAgSURTX0NMT1NFICAgICJTY2hsaWXfZW4iCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICAgICBJRE1fVE9EQVkgICAgIkhldXRlOiIKICAgICBJRE1fR09UT0RBWSAgIkdlaGUgenUgSGV1dGUiCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICAgIElEU19TRVBBUkFUT1IgIlRyZW5uemVpY2hlbiIKfQoKSUREX1BST1BTSEVFVCBESUFMT0cgRElTQ0FSREFCTEUgMCwgMCwgMjIwLCAxNDAKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBXU19WSVNJQkxFCkNBUFRJT04gIkVpZ2Vuc2NoYWZ0ZW4gZvxyICIKRk9OVCA4LCAiTVMgU2FucyBTZXJpZiIKQkVHSU4KICBERUZQVVNIQlVUVE9OICImT0siLCAgICAgICAgSURPSyw0LDEyMiw1MCwxNCwgV1NfVEFCU1RPUCB8IFdTX0dST1VQCiAgUFVTSEJVVFRPTiAgICAiQSZiYnJlY2hlbiIsIElEQ0FOQ0VMLDU4LDEyMiw1MCwxNAogIFBVU0hCVVRUT04gICAgIiZBbndlbmRlbiIsICBJRENfQVBQTFlfQlVUVE9OLDExMiwxMjIsNTAsMTQsV1NfRElTQUJMRUQKICBQVVNIQlVUVE9OICAgICImSGlsZmUiLCAgICAgSURIRUxQLDE2NiwxMjIsNTAsMTQsV1NfVEFCU1RPUHxXU19HUk9VUAogIENPTlRST0wgICAgICAgIlRhYiIsICAgICAgICBJRENfVEFCQ09OVFJPTCwiU3lzVGFiQ29udHJvbDMyIixXU19DTElQU0lCTElOR1N8V1NfR1JPVVB8V1NfVEFCU1RPUHxUQ1NfTVVMVElMSU5FLDQsNCwyMTIsMTE0CkVORAoKCklERF9XSVpBUkQgRElBTE9HIERJU0NBUkRBQkxFIDAsIDAsIDI5MCwgMTU5ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgV1NfVklTSUJMRQpDQVBUSU9OICJXaXphcmQiCkZPTlQgOCwgIk1TIFNhbnMgU2VyaWYiCkJFR0lOCiAgREVGUFVTSEJVVFRPTiAiJkJlZW5kZW4iLCAgIElEQ19GSU5JU0hfQlVUVE9OLDEyMSwxMzgsNTAsMTQKICBERUZQVVNIQlVUVE9OICImV2VpdGVyID4iLCBJRENfTkVYVF9CVVRUT04sMTIxLDEzOCw1MCwxNAogIFBVU0hCVVRUT04gICAgIjwgJlp1cvxjayIsIElEQ19CQUNLX0JVVFRPTiw3MSwxMzgsNTAsMTQKICBQVVNIQlVUVE9OICAgICJBYmJyZWNoZW4iLCBJRENBTkNFTCwxNzgsMTM4LDUwLDE0CiAgUFVTSEJVVFRPTiAgICAiJkhpbGZlIiwgICAgIElESEVMUCwyMzUsMTM4LDUwLDE0LFdTX0dST1VQCiAgTFRFWFQgICAgICAgICAiIiwgICAgICAgICAgSURDX1NVTktFTl9MSU5FLDcsMTI5LDI3OCwxLFNTX1NVTktFTgogIENPTlRST0wgICAgICAgIlRhYiIsICAgICAgIElEQ19UQUJDT05UUk9MLCJTeXNUYWJDb250cm9sMzIiLFdTX0NMSVBTSUJMSU5HUyB8IFdTX0RJU0FCTEVELDcsNywyNTgsNQogIExURVhUCSAgICAgICAgIiIsICAgICAgICBJRENfU1VOS0VOX0xJTkVIRUFERVIsMCwzNSwyOTAsMSxTU19MRUZUIHwgU1NfU1VOS0VOIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFCkVORAoKCklERF9UQkNVU1RPTUlaRSBESUFMT0cgRElTQ0FSREFCTEUgMTAsIDIwLCAzNTcsIDEyNQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiVG9vbGJhciBlaW5yaWNodGVuIgpGT05UIDgsICJNUyBTYW5zIFNlcmlmIgpCRUdJTgogIERFRlBVU0hCVVRUT04gIiZTY2hsaWXfZW4iLCAgICAgICAgICAgICAgIElEQ0FOQ0VMLDMwOCw2LDQ0LDE0CiAgUFVTSEJVVFRPTiAgICAiJlp1cvxja3NldHplbiIsICAgICAgICAgICAgSURDX1JFU0VUX0JUTiwzMDgsMjMsNDQsMTQKICBQVVNIQlVUVE9OICAgICImSGlsZmUiLCAgICAgICAgICAgICAgICAgICBJRENfSEVMUF9CVE4sMzA4LDQwLDQ0LDE0CiAgUFVTSEJVVFRPTiAgICAiTmFjaCAmT2JlbiB2ZXJzY2hpZWJlbiIsICAgSURDX01PVkVVUF9CVE4sMzA4LDc0LDQ0LDE0CiAgUFVTSEJVVFRPTiAgICAiTmFjaCAmVW50ZW4gdmVyc2NoaWViZW4iLCAgSURDX01PVkVETl9CVE4sMzA4LDkxLDQ0LDE0CiAgTFRFWFQgICAgICAgICAiJlZvcmhhbmRlbmUgS272cGZlOiIsIC0xLDQsNSw4NCwxMAogIExJU1RCT1ggICAgICAgSURDX0FWQUlMQlROX0xCT1gsNCwxNywxMjAsMTAwLCBMQlNfTk9USUZZIHwgTEJTX09XTkVSRFJBV0ZJWEVEIHwgTEJTX0hBU1NUUklOR1MgfCBMQlNfTk9JTlRFR1JBTEhFSUdIVCB8IExCU19ESVNBQkxFTk9TQ1JPTEwgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfSFNDUk9MTCB8IFdTX1RBQlNUT1AKICBQVVNIQlVUVE9OICAgICJIJmluenVm/GdlbiAtPiIsICAgICAgICAgICBJRE9LLCAxMzEsIDQyLCA0NCwgMTQKICBQVVNIQlVUVE9OICAgICI8LSAmTPZzY2hlbiIsICAgICAgICAgICAgICBJRENfUkVNT1ZFX0JUTiwxMzEsNjIsNDQsMTQKICBMVEVYVCAgICAgICAgICImVG9vbGJhcmtu9nBmZToiLCAtMSwxODIsNSw3OCwxMAogIExJU1RCT1ggICAgICAgSURDX1RPT0xCQVJCVE5fTEJPWCwgMTgyLDE3LDEyMCwxMDAsTEJTX05PVElGWSB8IExCU19PV05FUkRSQVdGSVhFRCB8IExCU19IQVNTVFJJTkdTIHwgTEJTX05PSU5URUdSQUxIRUlHSFQgfCBMQlNfRElTQUJMRU5PU0NST0xMIHwgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX0hTQ1JPTEwgfCBXU19UQUJTVE9QCkVORAo=