LyoKICogWENPUFkgLSBXaW5lLWNvbXBhdGlibGUgeGNvcHkgcHJvZ3JhbQogKiBQb3J0dWd1ZXNlIGxhbmd1YWdlIHN1cHBvcnQKICoKICogQ29weXJpZ2h0IChDKSAyMDA4IFJpY2FyZG8gRmlsaXBlCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCiNpbmNsdWRlICJ4Y29weS5oIgoKTEFOR1VBR0UgTEFOR19QT1JUVUdVRVNFLCBTVUJMQU5HX05FVVRSQUwKClNUUklOR1RBQkxFCnsKICAgIFNUUklOR19JTlZQQVJNUywgIk76bWVybyBkZSBwYXLibWV0cm9zIGluduFsaWRvIC0gVXNlIHhjb3B5IC8/IHBhcmEgYWp1ZGFcbiIKICAgIFNUUklOR19JTlZQQVJNLCAgIlBhcuJtZXRybyBpbnbhbGlkbyAnJXMnIC0gIFVzZSB4Y29weSAvPyBwYXJhIGFqdWRhXG4iCiAgICBTVFJJTkdfUEFVU0UsICAgICJDYXJyZWd1ZSA8RW50ZXI+IHBhcmEgaW5pY2lhciBj83BpYVxuIgogICAgU1RSSU5HX1NJTUNPUFksICAiJWQgZmljaGVpcm8ocykgc2VyaWFtIGNvcGlhZG9zXG4iCiAgICBTVFJJTkdfQ09QWSwgICAgICIlZCBmaWNoZWlybyhzKSBjb3BpYWRvc1xuIgogICAgU1RSSU5HX1FJU0RJUiwgICAiJyVzJyDpIHVtIGZpY2hlaXJvIG91IGRpcmVjdPNyaW9cbiIgXAogICAgICAgICAgICAgICAgICAgICAibm8gYWx2bz9cbiIgXAogICAgICAgICAgICAgICAgICAgICAiKEYgLSBGaWNoZWlybywgRCAtIERpcmVjdPNyaW8pXG4iCiAgICBTVFJJTkdfU1JDUFJPTVBULCIlcz8gKFllc3xObylcbiIKICAgIFNUUklOR19PVkVSV1JJVEUsIlJlZXNjcmV2ZXIgJXM/IChZZXN8Tm98QWxsKVxuIgogICAgU1RSSU5HX0NPUFlGQUlMLCAiQ/NwaWEgZGUgJyVzJyBwYXJhICclcycgZmFsaG91IGNvbSByL2MgJWRcbiIKICAgIFNUUklOR19PUEVORkFJTCwgIkZhbGhvdSBhbyBhYnJpciAnJXMnXG4iCiAgICBTVFJJTkdfUkVBREZBSUwsICJGYWxob3UgYSBsZXIgJyVzJ1xuIgogICAgU1RSSU5HX1lFU19DSEFSLCAiWSIKICAgIFNUUklOR19OT19DSEFSLCAgIk4iCiAgICBTVFJJTkdfQUxMX0NIQVIsICJBIgogICAgU1RSSU5HX0ZJTEVfQ0hBUiwiRiIKICAgIFNUUklOR19ESVJfQ0hBUiwgIkQiCgogICAgU1RSSU5HX0hFTFAsCiJYQ09QWSAtIENvcGlhIGZpY2hlaXJvcyBvdSBkaXJlY3TzcmlvcyBwYXJhIHVtIGRlc3Rpbm9cblwKXG5cClNpbnRheGU6XG5cClhDT1BZIHNvdXJjZSBbZGVzdF0gWy9JXSBbL1NdIFsvUV0gWy9GXSBbL0xdIFsvV10gWy9UXSBbL05dIFsvVV1cblwKXHQgICAgIFsvUl0gWy9IXSBbL0NdIFsvUF0gWy9BXSBbL01dIFsvRV0gWy9EXSBbL1ldIFsvLVldXG5cClxuXApPbmRlOlxuXApcblwKWy9JXSAgQXNzdW1lIGRpcmVjdPNyaW8gc2UgbyBkZXN0aW5vIG7jbyBleGlzdGUgZSBlc3ThIGEgY29waWFyIDIgb3VcblwKXHRtYWlzIGZpY2hlaXJvc1xuXApbL1NdICBDb3BpYXIgZGlyZWN083Jpb3MgZSBzdWJkaXJlY3Tzcmlvc1xuXApbL0VdICBDb3BpYXIgZGlyZWN083Jpb3MgZSBzdWJkaXJlY3TzcmlvcywgaW5jbHVpbmRvIG9zIHZhemlvc1xuXApbL1FdICBO428gbW9zdHJhciBub21lcyBkdXJhbnRlIGEgY/NwaWEsIGllIHF1aWV0LlxuXApbL0ZdICBNb3N0cmFyIHBvciBjb21wbGV0byBvcyBub21lcyBkZSBmb250ZSBlIGRlc3Rpbm8gZHVyYW50ZSBhIGPzcGlhXG5cClsvTF0gIFNpbXVsYXIgYSBvcGVyYefjbywgbW9zdHJhbmRvIG9zIG5vbWVzIHF1ZSBzZXJpYW0gY29waWFkb3NcblwKWy9XXSAgQWxlcnRhIGFudGVzIGRlIGluaWNpYXIgYSBvcGVyYefjbyBkZSBj83BpYVxuXApbL1RdICBDcmlhIGEgZXN0cnV0dXJhIGRlIGRpcmVjdPNyaW9zIG1hcyBu428gY29waWEgZmljaGVpcm9zXG5cClsvWV0gIFN1cHJpbWlyIGFsZXJ0YXMgcXVhbmRvIHJlZXNjcmV2ZSBmaWNoZWlyb3NcblwKWy8tWV0gQWxlcnRhciBxdWFuZG8gcmVlc2NyZXZlIGZpY2hlaXJvc1xuXApbL1BdICBBbGVydGFyIGFudGVzIGRlIGNhZGEgZmljaGVpcm9zIHNlciBjb3BpYWRvXG5cClsvTl0gIENvcGlhciB1c2FuZG8gbm9tZXMgcGVxdWVub3NcblwKWy9VXSAgQ29waWFyIGFwZW5hcyBmaWNoZWlyb3MgcXVlIGrhIGV4aXN0ZW0gbm8gZGVzdGlub1xuXApbL1JdICBSZWVzY3JldmVyIHF1YWlzcXVlciBmaWNoZWlyb3MgYXBlbmFzIGRlIGxlaXR1cmFcblwKWy9IXSAgSW5jbHVpciBmaWNoZWlyb3Mgb2N1bHRvcyBlIGRlIHNpc3RlbWEgbmEgY/NwaWFcblwKWy9DXSAgQ29udGludWFyIG1lc21vIHF1ZSBvY29ycmEgdW0gZXJybyBkdXJhbnRlIGEgY/NwaWFcblwKWy9BXSAgQ29waWFyIGFwZW5hcyBmaWNoZWlyb3MgY29tIGF0cmlidXRvIGRlIGFycXVpdm9cblwKWy9NXSAgQ29waWFyIGFwZW5hcyBmaWNoZWlyb3MgY29tIGF0cmlidXRvIGRlIGFycXVpdm8sIHJlbW92ZW5kb1xuXApcdG8gYXRyaWJ1dG8gZGUgYXJxdWl2b1xuXApbL0QgfCAvRDptLWQteV0gQ29waWFyIG5vdm9zIGZpY2hlaXJvcyBvdSBvcyBhbHRlcmFkb3MgYXDzcyBhIGRhdGEgZm9ybmVjaWRhXG5cClx0XHRTZSBuZW5odW1hIGRhdGEgZm9yIGZvcm5lY2lkYSwgYXBlbmFzIGNvcGlhciBzZSBvIGRlc3Rpbm8gZm9yIG1haXMgYW50aWdvXG5cClx0XHRxdWUgYSBmb250ZVxuXG4iCgp9Cg==