LyoKICogQ2xvY2sKICogUG9ydHVndWVzZSBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAxOTk5IEd1c3Rhdm8gSnVuaW9yIEFsdmVzIDxhbHZlc0Bjb3JyZWlvbmV0LmNvbS5icj4KICogQ29weXJpZ2h0IDIwMDIgU3lsdmFpbiBQZXRyZW9sbGUgPHNwZXRyZW9sbGVAeWFob28uZnI+CiAqIENvcHlyaWdodCAyMDAzIE1hcmNlbG8gRHVhcnRlCiAqIENvcHlyaWdodCAyMDA0IEFt6XJpY28gSm9z6SBNZWxvCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfUE9SVFVHVUVTRSwgU1VCTEFOR19QT1JUVUdVRVNFX0JSQVpJTElBTgoKTUFJTl9NRU5VIE1FTlUgCnsKIFBPUFVQICImUHJvcHJpZWRhZGVzIiB7CiAgTUVOVUlURU0gIiZBbmFs82dpY28iLCBJRE1fQU5BTE9HCiAgTUVOVUlURU0gIkRpZ2kmdGFsIiwgSURNX0RJR0lUQUwKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJkZvbnRlLi4uIiwgSURNX0ZPTlQKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJlNlbSBiYXJyYSBkZSB07XR1bG8iLCBJRE1fTk9USVRMRQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImU2VndW5kb3MiLCBJRE1fU0VDT05EUwogIE1FTlVJVEVNICImRGF0YSIsIElETV9EQVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZTZW1wcmUgdmlz7XZlbCIsIElETV9PTlRPUAogfQogUE9QVVAgIiZJbmZvcm1h5/VlcyIgewogIE1FTlVJVEVNICImTGljZW7nYS4uLiIsIElETV9MSUNFTlNFCiAgTUVOVUlURU0gIiZTRU0gR0FSQU5USUEuLi4iLCBJRE1fTk9XQVJSQU5UWQogIE1FTlVJVEVNICImU29icmUgQ2xvY2suLi4iLCBJRE1fQUJPVVQKIH0KfQoKTEFOR1VBR0UgTEFOR19QT1JUVUdVRVNFLCBTVUJMQU5HX1BPUlRVR1VFU0UKCk1BSU5fTUVOVSBNRU5VIAp7CiBQT1BVUCAiJlByb3ByaWVkYWRlcyIgewogIE1FTlVJVEVNICImQW5hbPNnaWNvIiwgSURNX0FOQUxPRwogIE1FTlVJVEVNICJEaWdpJnRhbCIsIElETV9ESUdJVEFMCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIlRpcG8gZGUgJkxldHJhLi4uIiwgSURNX0ZPTlQKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJlNlbSBiYXJyYSBkZSB07XR1bG8iLCBJRE1fTk9USVRMRQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImU2VndW5kb3MiLCBJRE1fU0VDT05EUwogIE1FTlVJVEVNICImRGF0YSIsIElETV9EQVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZTZW1wcmUgdmlz7XZlbCIsIElETV9PTlRPUAogfQogUE9QVVAgIiZJbmZvcm1h5/VlcyIgewogIE1FTlVJVEVNICImTGljZW7nYS4uLiIsIElETV9MSUNFTlNFCiAgTUVOVUlURU0gIiZTRU0gR0FSQU5USUEuLi4iLCBJRE1fTk9XQVJSQU5UWQogIE1FTlVJVEVNICImQWNlcmNhIGRvIENsb2NrLi4uIiwgSURNX0FCT1VUCiB9Cn0KCgpMQU5HVUFHRSBMQU5HX1BPUlRVR1VFU0UsIFNVQkxBTkdfTkVVVFJBTAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewpJRFNfQ0xPQ0ssICJSZWzzZ2lvIgp9Cg==