LyoKICogWENPUFkgLSBXaW5lLWNvbXBhdGlibGUgeGNvcHkgcHJvZ3JhbQogKiBLb3JlYW4gbGFuZ3VhZ2Ugc3VwcG9ydAogKgogKiBDb3B5cmlnaHQgKEMpIDIwMDcgSi4gRWRtZWFkZXMKICogQ29weXJpZ2h0IChDKSAyMDA3LDIwMTAgWXVuU29uZyBId2FuZwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAieGNvcHkuaCIKCkxBTkdVQUdFIExBTkdfS09SRUFOLCBTVUJMQU5HX0RFRkFVTFQKClNUUklOR1RBQkxFCnsKICAgIFNUUklOR19JTlZQQVJNUywgIr/Dudm4o8H2IL7KwLoguMWws7qvvPbAxyCwubz2IC0geGNvcHkgLz+3ziC1tb/yuLvAuyC6uL3Dv8BcbiIKICAgIFNUUklOR19JTlZQQVJNLCAgIr/Dudm4o8H2IL7KwLoguMWws7qvvPYgJyVzJyAtICB4Y29weSAvP7fOILW1v/K4u8C7ILq4vcO/wFxuIgogICAgU1RSSU5HX1BBVVNFLCAgICAiPGVudGVyPiC4piC0qbijuOkgurm757ChIL3DwNu1ySCwzcDUtM+02VxuIgogICAgU1RSSU5HX1NJTUNPUFksICAiJWQgxsTAz8DMILq5u+e1ySCwzcDUtM+02VxuIgogICAgU1RSSU5HX0NPUFksICAgICAiJWQgxsTAz8DMILq5u+e1x776vcC0z7TZXG4iCiAgICBTVFJJTkdfUUlTRElSLCAgICInJXMnwMwgurm758fSIMbEwM/AzLOqILXwt7rF5LiuP1xuIiBcCiAgICAgICAgICAgICAgICAgICAgICLA1LTPse4/XG4iIFwKICAgICAgICAgICAgICAgICAgICAgIihGIC0gxsTAzywgRCAtILXwt7rF5LiuKVxuIgogICAgU1RSSU5HX1NSQ1BST01QVCwiJXM/ICi/uXy+xrTPv8ApXG4iCiAgICBTVFJJTkdfT1ZFUldSSVRFLCIlc7imILWkvu6+srDavcC0z7HuPyAov7l8vsa0z7/AfLjwtc4pXG4iCiAgICBTVFJJTkdfQ09QWUZBSUwsICJDb3B5aW5nIG9mICclcycgdG8gJyVzJyBmYWlsZWQgd2l0aCByL2MgJWRcbiIKICAgIFNUUklOR19PUEVORkFJTCwgIiclcycgv62x4iC9x8bQXG4iCiAgICBTVFJJTkdfUkVBREZBSUwsICInJXO4piDA0MH2ILj4x9+9wLTPtNknXG4iCiAgICBTVFJJTkdfWUVTX0NIQVIsICJZIgogICAgU1RSSU5HX05PX0NIQVIsICAiTiIKICAgIFNUUklOR19BTExfQ0hBUiwgIkEiCiAgICBTVFJJTkdfRklMRV9DSEFSLCJGIgogICAgU1RSSU5HX0RJUl9DSEFSLCAiRCIKCiAgICBTVFJJTkdfSEVMUCwKIlhDT1BZIC0gv/i6uyDGxMDPwMyzqiC18Le6xeS4riCxuMG2uKYguPHA+8H2t84gurm751xuXApcblwKua65/TpcblwKWENPUFkgv/i6uyBbtOu7810gWy9JXSBbL1NdIFsvUV0gWy9GXSBbL0xdIFsvV10gWy9UXSBbL05dIFsvVV1cblwKXHQgICAgIFsvUl0gWy9IXSBbL0NdIFsvUF0gWy9BXSBbL01dIFsvRV0gWy9EXSBbL1ldIFsvLVldXG5cClxuXApXaGVyZTpcblwKXG5cClsvSV0guLi+4CC067vzwMwgwbjA58fPwfYgvsq0wiCw5r/sILXwt7rF5Liut84gsKHBpMfPsO0gtc6ws7OqILT1ILi5wLogxsTAz8C7IFxuXApcICAgICC6ubvnXG5cClsvU10gILXwt7rF5Liux8+w7SDHz8CnILXwt7rF5LiuILq5u+dcblwKWy9FXSAguvMgtfC3usXkuK64piDG98fUx9i8rSC18Le6xeS4rr/NIMfPwKcgtfC3usXkuK4gurm751xuXApbL1FdICDBtr/rx8+w1CC6ubvntce0wiDGxMDPwMyzqiC18Le6xeS4rrimIMelvcPHz8H2IL7KsO0gurm75y5cblwKWy9GXSAgurm758fPtMIgtb++yCC/z8D8x9Egv/i6u7D6ILTru/Mguri/qcHWseJcblwKWy9MXSAgurm757XJILDNwLsguri/qcHWuOm8rSCwobvzwLi3ziDA2773XG5cClsvV10gILq5u+e9w8DbIMfPseIgwPy/oSDIrsDOx8+x4lxuXApbL1RdICDGxMDPwLogurm758fPwfYgvsqw7SC68yC18Le6xeS4riCxuMG2uLggurm751xuXApbL1ldICDGxMDPILWkvu4gvrUgtqcgyK7AzsfPwfYgvsqx4lxuXApbLy1ZXSDGxMDPwLsgtaS+7iC+tSC2pyDIrsDOx8+x4lxuXApbL1BdICC6ubvnx8+0wiC1v77Iv6EgsKKwocDHIL/4ursgxsTAz7i2tNkgyK7AzlxuXApbL05dICDCqsC6IMDMuKfAuyC757/rx9i8rSC6ubvnXG5cClsvVV0gIMDMucwgtOu78yC18Le6xeS4rr+hIMG4wOfHz7TCIMbEwM+4uCC6ubvnXG5cClsvUl0gIMDQseIgwPy/6yDGxMDPtbUgtaS+7iC+srHiXG5cClsvSF0gILz7wLogxsTAz8DMs6ogvcO9usXbIMbEwM+1tSDG98fUx9i8rSC6ubvnXG5cClsvQ10gILq5u+fHz7TCILW/vsi/oSC/obevsKEgud+7/cfYtbUgsOi80yDB+MfgXG5cClsvQV0gIL/AwfcgvtDD4CC807y6wMwgvLPBpLXHvu7A1rTCIMbEwM+4uCC6ubvnXG5cClsvTV0gIL/AwfcgvtDD4CC807y6wLsgwaawxcfPuOm8rSAgvtDD4CC807y6wMwgvLPBpLXHvu7A1rTCXG5cClwgxsTAz7i4ILq5u+dcblwKWy9EIHwgL0Q6bS1kLXldIMH2waS1yCCzr8KlIMjEv6EgvPbBpLXHsMWzqiC79bfOv+4gxsTAzyC6ubvnLlxuXApcdFx0Sbi4vuAgvu62sMfRILOvwqW1tSDB9sGktcfB9iC+ysC4uOksv8DB9yC/+Lq7uri02VxuXApcdFx0tOu788DMIL/At6G1yCCwzbi4ILq5u+dcblxuIgoKfQo=