LyoKICogV2luZUNmZyByZXNvdXJjZXMKICogR2VybWFuIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDUgSGVubmluZyBHZXJoYXJkdAogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICoKICovCgpMQU5HVUFHRSBMQU5HX0dFUk1BTiwgU1VCTEFOR19ERUZBVUxUCgpJRERfQUJPVVRDRkcgRElBTE9HRVggMCwgMCwgMjYwLCAyNzAKU1RZTEUgV1NfQ0hJTEQKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgTFRFWFQgICAgICAgICAgICJXaW5lIFZlcnNpb246IixJRENfU1RBVElDLDExOSwxNyw1NSw4CiAgICBMVEVYVCAgICAgICAgICAgIkNWUyIsSURDX1dJTkVWRVIsMTc5LDE3LDU2LDgKICAgIENPTlRST0wgICAgICAgICBJREJfV0lORSxJRENfU1RBVElDLCJTdGF0aWMiLFNTX0JJVE1BUCAsMTUsMTcsMTU3LDExMQogICAgTFRFWFQgICAgICAgICAgICJodHRwOi8vd3d3LndpbmVocS5vcmcvIixJRENfU1RBVElDLDExOSwzMSwxMDYsOAogICAgQ1RFWFQgICAgICAgICAgICJUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiIsCiAgICAgICAgICAgICAgICAgICAgSURDX1NUQVRJQywxMTksNDQsMTI0LDU5CkVORAoKSUREX0FQUENGRyBESUFMT0cgRElTQ0FSREFCTEUgIDAsIDAsIDI2MCwgMjUwClNUWUxFIFdTX0NISUxEIHwgV1NfRElTQUJMRUQKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgR1JPVVBCT1ggICAgICAgICIgQW53ZW5kdW5nc2VpbnN0ZWxsdW5nZW4gIixJRENfU1RBVElDLCA4LDQsMjQ0LDI0MAogICAgTFRFWFQgICAgICAgICAgICJXaW5lIGthbm4gZvxyIGplZGUgQW53ZW5kdW5nIGVpbmUgdW50ZXJzY2hpZWRsaWNoZSBXaW5kb3dzdmVyc2lvbiBuYWNoYWhtZW4uIiwKICAgICAgICAgICAgICAgICAgICBJRENfU1RBVElDLDE1LDIwLDIyNywyMAogICAgQ09OVFJPTCAgICAgICAgICJBbndlbmR1bmdlbiIsSURDX0FQUF9MSVNUVklFVywiU3lzTGlzdFZpZXczMiIsV1NfQk9SREVSIHwgV1NfVEFCU1RPUCB8IExWU19MSVNUIHwgTFZTX1NJTkdMRVNFTCB8IExWU19TSE9XU0VMQUxXQVlTLAogICAgICAgICAgICAgICAgICAgIDE1LDQwLDIzMCwxNDAKICAgIFBVU0hCVVRUT04JICAgICJBbncuICZoaW56dWb8Z2VuIixJRENfQVBQX0FEREFQUCwgOTAsMTg0LDc1LDE0CiAgICBQVVNIQlVUVE9OCSAgICAiQW53LiAmZW50ZmVybmVuIixJRENfQVBQX1JFTU9WRUFQUCwgMTcwLDE4NCw3NSwxNAogICAgTFRFWFQgICAgICAgICAgICImV2luZG93cyBWZXJzaW9uOiIsSURDX1NUQVRJQywxNywyMDQsNTgsOAogICAgQ09NQk9CT1ggICAgICAgIElEQ19XSU5WRVIsODMsMjAyLDE2Myw1NixDQlNfRFJPUERPV05MSVNUIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AgICAgCiAgICBMVEVYVCAgICAgICAgICAgIiZET1MgVmVyc2lvbjoiLElEQ19TVEFUSUMsMTcsMjIzLDU3LDgKICAgIENPTUJPQk9YICAgICAgICBJRENfRE9TVkVSLDgzLDIyNCwxNjMsNTYsQ0JTX0RST1BET1dOTElTVCB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCkVORAoKSUREX0dSQVBIQ0ZHIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMjYwLCAyNTAKU1RZTEUgV1NfQ0hJTEQgfCBXU19ESVNBQkxFRApGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBMVEVYVAkgICAgIkJpbGRzY2hpcm1mYXJidGllZmU6ICIsSURDX1NUQVRJQyw4LDEwLDcwLDMwCiAgICBDT01CT0JPWAkgICAgSURDX1NDUkVFTl9ERVBUSCw4MCw4LDE3MCw3MCxDQlNfRFJPUERPV05MSVNUIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKCiAgICBDT05UUk9MCSAgICAiRXJsYXViZSBEaXJlY3RYIEFud2VuZHVuZ2VuLCBkYXNzIGRpZSBNYXVzIGRhcyBBbndlbmR1bmdzZmVuc3RlciBuaWNodCB2ZXJsYXNzZW4ga2Fubi4iLElEQ19EWF9NT1VTRV9HUkFCLCJCdXR0b24iLEJTX0FVVE9DSEVDS0JPWCB8IFdTX1RBQlNUT1AsMTUsMzUsMjMwLDgKICAgIENPTlRST0wJICAgICJBa3RpdmllcnVuZyBkZXIgRG9wcGVscHVmZmVydW5nIGRlcyBEZXNrdG9wcyIsSURDX0RPVUJMRV9CVUZGRVIsIkJ1dHRvbiIsQlNfQVVUT0NIRUNLQk9YIHwgV1NfVEFCU1RPUCwxNSw0NSwyMzAsOAogICAgCiAgICBHUk9VUEJPWCAgICAgICAgIiBGZW5zdGVyZWluc3RlbGx1bmdlbiAiLElEQ19TVEFUSUMsOCwyNSwyNDQsMTIwCgogICAgLyogRklYTUU6IHRoZSB3b3JkaW5nIG9mIHRoaXMgZXhwbGFuYXRpb24gY291bGQgYmUgYSBsb3QgYmV0dGVyICovCiAgICBMVEVYVCAgICAgICAgICAgIlNpZSBr9m5uZW4gZW50d2VkZXIgZWluZW4gV2luZG93cyBEZXNrdG9wIGVtdWxpZXJlbiwgaW4gZGVtIGFsbGUgRmVuc3RlciBpbiBlaW5lbSAndmlydHVlbGxlbiBCaWxkc2NoaXJtJyB6dXNhbW1lbiBzaW5kLCBvZGVyIFNpZSBsYXNzZW4gZXMgenUsIGRhc3MgZGllIEZlbnN0ZXIgYXVmIGlocmVuIG5vcm1hbGVuIERlc2t0b3AgcGxhdHppZXJ0IHdlcmRlbi4iLAogICAgICAgICAgICAgICAgICAgIElEQ19TVEFUSUMsMTUsNzMsMjI4LDI4CiAgICBMVEVYVCAgICAgICAgICAgIkRlc2t0b3AtR3L232U6IixJRENfREVTS1RPUF9TSVpFLDE1LDExNSw1MCw4LFdTX0RJU0FCTEVECiAgICBMVEVYVCAgICAgICAgICAgIlgiLElEQ19ERVNLVE9QX0JZLDExNCwxMTUsOCw4LFdTX0RJU0FCTEVECiAgICBDT05UUk9MICAgICAgICAgIkVtdWxpZXJlIGVpbmVuIHZpcnR1ZWxsZW4gRGVza3RvcCIsSURDX0VOQUJMRV9ERVNLVE9QLCJCdXR0b24iLAogICAgICAgICAgICAgICAgICAgIEJTX0FVVE9DSEVDS0JPWCB8IFdTX1RBQlNUT1AsMTUsMTAwLDIzMCwxMAoJCSAgICAKICAgIEVESVRURVhUICAgICAgICBJRENfREVTS1RPUF9XSURUSCw3MCwxMTUsNDAsMTIsRVNfQVVUT0hTQ1JPTEwgfCBFU19OVU1CRVIgfCBXU19ESVNBQkxFRAogICAgRURJVFRFWFQgICAgICAgIElEQ19ERVNLVE9QX0hFSUdIVCwxMjMsMTE1LDQwLDEyLEVTX0FVVE9IU0NST0xMIHwgRVNfTlVNQkVSIHwgV1NfRElTQUJMRUQKRU5ECgpJRERfRExMQ0ZHIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMjYwLCAyNTAKU1RZTEUgV1NfQ0hJTEQgfCBXU19ESVNBQkxFRApGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBHUk9VUEJPWCAgICAgICAgIiBETEwg3GJlcnNjaHJlaWJ1bmcgIixJRENfU1RBVElDLDgsNCwyNDQsMjQwCiAgICBMVEVYVCAgICAgICAgICAgIkRMTHMgKER5bmFtaWMgTGluayBMaWJyYXJpZXMpIGv2bm5lbiBlaW56ZWxuIGVpbmdlc3RlbGx0IHdlcmRlbiwgZW50d2VkZXIgQnVpbHRpbiAoZ2VzdGVsbHQgZHVyY2ggV2luZSkgb2RlciBOYXRpdmUgKHZvbiBXaW5kb3dzIG9kZXIgZHVyY2ggZGllIEFud2VuZHVuZyBnZXN0ZWxsdCkuIgogICAgICAgICAgICAgICAgICAgICwgIElEQ19TVEFUSUMsMTUsMTcsMjI4LDMyCiAgICBMSVNUQk9YICAgICAgICAgSURDX0RMTFNfTElTVCwxNSw1MCwxNDIsMTg3LFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AgfCBXU19WU0NST0xMCiAgICBMVEVYVCAgICAgICAgICAgIkxhZGVyZWloZW5mb2xnZToiLElEQ19TVEFUSUMsMTYzLDUwLDU1LDgKICAgIENPTlRST0wgICAgICAgICAiJkJ1aWx0aW4gKFdpbmUpIixJRENfUkFEX0JVSUxUSU4sIkJ1dHRvbiIsIEJTX0FVVE9SQURJT0JVVFRPTiB8IFdTX0dST1VQLDE2Myw2NSw3NSwxMAogICAgQ09OVFJPTCAgICAgICAgICImTmF0aXZlIChXaW5kb3dzKSIsSURDX1JBRF9OQVRJVkUsIkJ1dHRvbiIsIEJTX0FVVE9SQURJT0JVVFRPTiwxNjMsODAsNzUsMTAKICAgIENPTlRST0wgICAgICAgICAiQnVpJmx0aW4gZGFubiBOYXRpdmUiLElEQ19SQURfQlVJTFRJTl9OQVRJVkUsIkJ1dHRvbiIsIEJTX0FVVE9SQURJT0JVVFRPTiwxNjMsOTUsNzUsMTAKICAgIENPTlRST0wgICAgICAgICAiTmF0aSZ2ZSBkYW5uIEJ1aWx0aW4iLElEQ19SQURfTkFUSVZFX0JVSUxUSU4sIkJ1dHRvbiIsIEJTX0FVVE9SQURJT0JVVFRPTiwxNjMsMTEwLDc1LDEwCiAgICBDT05UUk9MICAgICAgICAgIiZBdXNzY2hhbHRlbiIsSURDX1JBRF9ESVNBQkxFLCJCdXR0b24iLCBCU19BVVRPUkFESU9CVVRUT04sMTYzLDEyNSw3NSwxMAogICAgUFVTSEJVVFRPTgkgICAgIiZIaW56dWb8Z2VuIGb8cjoiLElEQ19ETExTX0FERERMTCwgMTYzLDE4NCw4MiwxNAogICAgQ09NQk9CT1ggICAgICAgIElEQ19ETExDT01CTywxNjMsMjA0LDgyLDE0LENCU19EUk9QRE9XTiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QIHwgQ0JTX1NPUlQgfCBDQlNfTE9XRVJDQVNFCiAgICBQVVNIQlVUVE9OCSAgICAiJkVudGZlcm5lbiIsSURDX0RMTFNfUkVNT1ZFRExMLDE2MywyMjQsODIsMTQKRU5ECgpJRERfRFJJVkVDRkcgRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAyNjAsIDI1MApTVFlMRSBXU19DSElMRCB8IFdTX0RJU0FCTEVECkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIEdST1VQQk9YICAgICAgICAiIExhdWZ3ZXJrc3p1b3JkbnVuZyAiLElEQ19TVEFUSUMsOCw0LDI0NCwyNDAKICAgIExJU1RCT1ggICAgICAgICBJRENfTElTVF9EUklWRVMsMTUsMTgsMjMyLDc2LExCU19TT1JUIHwgTEJTX05PSU5URUdSQUxIRUlHSFQgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAogICAgUFVTSEJVVFRPTiAgICAgICImSGluenVm/GdlbiIsSURDX0JVVFRPTl9BREQsMTUsOTgsNDUsMTQKICAgIFBVU0hCVVRUT04gICAgICAiRW50JmZlcm5lbiIsSURDX0JVVFRPTl9SRU1PVkUsNjQsOTgsMzcsMTQKICAgIFBVU0hCVVRUT04gICAgICAiQXV0byZtYXRpc2NoIixJRENfQlVUVE9OX0FVVE9ERVRFQ1QsMTk3LDk4LDQ5LDE0CgogICAgLyogZWRpdGluZyBkcml2ZSBkZXRhaWxzICovCiAgICBMVEVYVCAgICAgICAgICAgIiZQZmFkOiIsSURDX1NUQVRJQywxNSwxMjMsMjAsOSAgICAKICAgIEVESVRURVhUICAgICAgICBJRENfRURJVF9QQVRILDQxLDEyMCwxNDAsMTMsRVNfQVVUT0hTQ1JPTEwgfCBXU19UQUJTVE9QCiAgICBQVVNIQlVUVE9OICAgICAgIiZEdXJjaHN1Y2hlbiIsSURDX0JVVFRPTl9CUk9XU0VfUEFUSCwxODYsMTIwLDUwLDEzCiAgICAKICAgIExURVhUICAgICAgICAgICAiJlR5cDoiLElEQ19TVEFUSUNfVFlQRSwxNSwxMzgsMjEsMTAKICAgIENPTUJPQk9YICAgICAgICBJRENfQ09NQk9fVFlQRSw0MSwxMzUsNzcsNjAsQ0JTX0RST1BET1dOTElTVCB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCiAgICAKICAgIExURVhUICAgICAgICAgICAiQmV6ZWljaG51bmcgdW5kIFNlcmllbm5yIixJRENfTEFCRUxTRVJJQUxfU1RBVElDLDE1LDE1NSwxMjUsMTAKICAgIAogICAgUFVTSEJVVFRPTiAgICAgICImRXJ3ZWl0ZXJ0IixJRENfQlVUVE9OX1NIT1dfSElERV9BRFZBTkNFRCwxODYsMTM2LDYwLDEzCiAgICBDT05UUk9MICAgICAgICAgIkF1dG9tYXRpc2NoICZ2b20gR2Vy5HQ6IixJRENfUkFESU9fQVVUT0RFVEVDVCwiQnV0dG9uIiwKICAgICAgICAgICAgICAgICAgICBCU19BVVRPUkFESU9CVVRUT04sMTUsMTY2LDkzLDEwCiAgICBFRElUVEVYVCAgICAgICAgSURDX0VESVRfREVWSUNFLDI3LDE3NiwxNzQsMTMsRVNfQVVUT0hTQ1JPTEwKICAgIFBVU0hCVVRUT04gICAgICAiRHVyY2gmc3VjaGVuIixJRENfQlVUVE9OX0JST1dTRV9ERVZJQ0UsMjA2LDE3Niw0MCwxMwogICAgQ09OVFJPTCAgICAgICAgICImTWFudWVsbGUgWnV3ZWlzdW5nOiIsSURDX1JBRElPX0FTU0lHTiwiQnV0dG9uIiwKICAgICAgICAgICAgICAgICAgICBCU19BVVRPUkFESU9CVVRUT04sMTUsMTk1LDkzLDEwCgogICAgTFRFWFQgICAgICAgICAgICImQmV6ZWljaG51bmc6IixJRENfU1RBVElDX0xBQkVMLDMzLDIwOCw0OSwxMgogICAgRURJVFRFWFQgICAgICAgIElEQ19FRElUX0xBQkVMLDgzLDIwNSw3OCwxMyxFU19BVVRPSFNDUk9MTCB8IFdTX1RBQlNUT1AKICAgIExURVhUICAgICAgICAgICAiUyZlcmllbm5yOiIsSURDX1NUQVRJQ19TRVJJQUwsMzMsMjI1LDI5LDEyCiAgICBFRElUVEVYVCAgICAgICAgSURDX0VESVRfU0VSSUFMLDgzLDIyMSw3OCwxMyxFU19BVVRPSFNDUk9MTCB8IFdTX1RBQlNUT1AKICAgICAgICAgICAgICAgICAgICAKRU5ECgpJRERfQVVESU9DRkcgRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAyNjAsIDI1MApTVFlMRSBXU19DSElMRCB8IFdTX0RJU0FCTEVECkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIExURVhUCSJBdWRpbyBUcmVpYmVyOiAiLElEQ19TVEFUSUMsMTAsMjAsNjAsOAogICAgQ09NQk9CT1gJSURDX0FVRElPX0RSSVZFUiw3MCwxOCw4NSw4NSxDQlNfRFJPUERPV05MSVNUIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKICAgIFBVU0hCVVRUT04JIkF1dG9tYXRpc2NoIixJRENfQVVESU9fQVVUT0RFVEVDVCwxNzAsMjAsNDksMTQKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURTX1dJTkVfVkVSU0lPTiAgICAgICAgIkNWUyIKICAgIElEU19UQUJfR0VORVJBTCAgICAgICAgICJBbGxnZW1laW4iCiAgICBJRFNfVEFCX0RMTFMgICAgICAgICAgICAiQmlibGlvdGhla2VuIgogICAgSURTX1RBQl9EUklWRVMgICAgICAgICAgIkxhdWZ3ZXJrZSIKRU5ECg==