LyoKICogWENPUFkgLSBXaW5lLWNvbXBhdGlibGUgeGNvcHkgcHJvZ3JhbQogKiBLb3JlYW4gbGFuZ3VhZ2Ugc3VwcG9ydAogKgogKiBDb3B5cmlnaHQgKEMpIDIwMDcgSi4gRWRtZWFkZXMKICogQ29weXJpZ2h0IChDKSAyMDA3IFl1blNvbmcgSHdhbmcoaHlzNTQ1QGRyZWFtd2l6LmNvbSkKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKCkxBTkdVQUdFIExBTkdfS09SRUFOLCBTVUJMQU5HX0RFRkFVTFQKClNUUklOR1RBQkxFCnsKICAgIFNUUklOR19JTlZQQVJNUywgIr/Dudm4o8H2IL7KwLoguMWws7qvvPbAxyCwubz2IC0geGNvcHkgLz+3ziC1tb/yuLvAuyC6uL3Dv8BcbiIKICAgIFNUUklOR19JTlZQQVJNLCAgIr/Dudm4o8H2IL7KwLoguMWws7qvvPYgJyVzJyAtICB4Y29weSAvP7fOILW1v/K4u8C7ILq4vcO/wFxuIgogICAgU1RSSU5HX1BBVVNFLCAgICAiPGVudGVyPiC4piC0qbijuOkgurm757ChIL3DwNu1ySCwzcDUtM+02VxuIgogICAgU1RSSU5HX1NJTUNPUFksICAiJWQgxsTAz8DMILq5u+e1ySCwzcDUtM+02VxuIgogICAgU1RSSU5HX0NPUFksICAgICAiJWQgxsTAz8DMILq5u+e1x776vcC0z7TZXG4iCiAgICBTVFJJTkdfUUlTRElSLCAgICInJXMnwMwgurm758fSIMbEwM/AzLOqILXwt7rF5LiuP1xuIiBcCiAgICAgICAgICAgICAgICAgICAgICLA1LTPse4/XG4iIFwKICAgICAgICAgICAgICAgICAgICAgIihGIC0gxsTAzywgRCAtILXwt7rF5LiuKVxuIgogICAgU1RSSU5HX1NSQ1BST01QVCwiJXM/ICi/uXy+xrTPv8ApXG4iCiAgICBTVFJJTkdfT1ZFUldSSVRFLCIlc7imILWkvu6+srDavcC0z7HuPyAov7l8vsa0z7/AfLjwtc4pXG4iCiAgICBTVFJJTkdfQ09QWUZBSUwsICJDb3B5aW5nIG9mICclcycgdG8gJyVzJyBmYWlsZWQgd2l0aCByL2MgJWRcbiIKICAgIFNUUklOR19PUEVORkFJTCwgIiclcycgv62x4iC9x8bQXG4iCiAgICBTVFJJTkdfUkVBREZBSUwsICInJXO4piDA0MH2ILj4x9+9wLTPtNknXG4iCiAgICBTVFJJTkdfWUVTX0NIQVIsICJZIgogICAgU1RSSU5HX05PX0NIQVIsICAiTiIKICAgIFNUUklOR19BTExfQ0hBUiwgIkEiCiAgICBTVFJJTkdfRklMRV9DSEFSLCJGIgogICAgU1RSSU5HX0RJUl9DSEFSLCAiRCIKCiAgICBTVFJJTkdfSEVMUCwKIlhDT1BZIC0gv/i6uyDGxMDPwMyzqiC18Le6xeS4riCxuMG2uKYguPHA+8H2t84gurm751xuXApcblwKua65/TpcblwKWENPUFkgv/i6uyBbtOu7810gWy9JXSBbL1NdIFsvUV0gWy9GXSBbL0xdIFsvV10gWy9UXSBbL05dIFsvVV1cblwKXHQgICAgIFsvUl0gWy9IXSBbL0NdIFsvUF0gWy9BXSBbL01dIFsvRV0gWy9EXSBbL1ldIFsvLVldXG5cClxuXApXaGVyZTpcblwKXG5cClsvSV0gIEFzc3VtZSBkaXJlY3RvcnkgaWYgZGVzdGluYXRpb24gZG9lcyBub3QgZXhpc3QgYW5kIGNvcHlpbmcgMiBvclxuXApcdG1vcmUgZmlsZXNcblwKWy9TXSAgtfC3usXkuK7Hz7DtIMfPwKcgtfC3usXkuK4gurm751xuXApbL0VdICC68yC18Le6xeS4rrimIMb3x9TH2LytILXwt7rF5Liuv80gx8/ApyC18Le6xeS4riC6ubvnXG5cClsvUV0gIMG2v+vHz7DUILq5u+e1x7TCIMbEwM/AzLOqILXwt7rF5LiuuKYgx6W9w8fPwfYgvsqw7SC6ubvnLlxuXApbL0ZdICC6ubvnx8+0wiC1v77IIL/PwPzH0SC/+Lq7sPogtOu78yC6uL+pwdax4lxuXApbL0xdICC6ubvntckgsM3AuyC6uL+pwda46bytILChu/PAuLfOIMDbvvdcblwKWy9XXSAgurm7573DwNsgx8+x4iDA/L+hIMiuwM7Hz7HiXG5cClsvVF0gIMbEwM/AuiC6ubvnx8/B9iC+yrDtILrzILXwt7rF5LiuILG4wba4uCC6ubvnXG5cClsvWV0gIMbEwM8gtaS+7iC+tSC2pyDIrsDOx8/B9iC+yrHiXG5cClsvLVldIMbEwM/AuyC1pL7uIL61ILanIMiuwM7Hz7HiXG5cClsvUF0gILq5u+fHz7TCILW/vsi/oSCworChwMcgv/i6uyDGxMDPuLa02SDIrsDOXG5cClsvTl0gIMKqwLogwMy4p8C7ILvnv+vH2LytILq5u+dcblwKWy9VXSAgwMy5zCC067vzILXwt7rF5Liuv6EgwbjA58fPtMIgxsTAz7i4ILq5u+dcblwKWy9SXSAgwNCx4iDA/L/rIMbEwM+1tSC1pL7uIL6yseJcblwKWy9IXSAgvPvAuiDGxMDPwMyzqiC9w726xdsgxsTAz7W1IMb3x9TH2LytILq5u+dcblwKWy9DXSAgurm758fPtMIgtb++yL+hIL+ht6+woSC537v9x9i1tSCw6LzTIMH4x+BcblwKWy9BXSAgv8DB9yC+0MPgILzTvLrAzCC8s8Gktce+7sDWtMIgxsTAz7i4ILq5u+dcblwKWy9NXSAgv8DB9yC+0MPgILzTvLrAuyDBprDFx8+46bytICC+0MPgILzTvLrAzCC8s8Gktce+7sDWtMJcblwKXMbEwM+4uCC6ubvnXG5cClsvRCB8IC9EOm0tZC15XSDB9sGktcggs6/CpSDIxL+hILz2waS1x7DFs6ogu/W3zr/uIMbEwM8gurm75y5cblwKXHRcdEm4uL7gIL7utrDH0SCzr8KltbUgwfbBpLXHwfYgvsrAuLjpLL/Awfcgv/i6u7q4tNlcblwKXHRcdLTru/PAzCC/wLehtcggsM24uCC6ubvnXG5cbiIKCn0K