LyoKICogWENPUFkgLSBXaW5lLWNvbXBhdGlibGUgeGNvcHkgcHJvZ3JhbQogKiBOb3J3ZWdpYW4gQm9rbeVsIGxhbmd1YWdlIHN1cHBvcnQKICoKICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXhhbmRlciBOLiBT+HJuZXMgPGFsZXhAdGhlaGFuZG9mYWdvbnkuY29tPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgoKTEFOR1VBR0UgTEFOR19OT1JXRUdJQU4sIFNVQkxBTkdfTk9SV0VHSUFOX0JPS01BTAoKU1RSSU5HVEFCTEUKewogICAgU1RSSU5HX0lOVlBBUk1TLCAiVWd5bGRpZyBhbnRhbGwgcGFyYW1ldGVyZTsgYnJ1ayCreGNvcHkgLz+7IGZvciBoamVscFxuIgogICAgU1RSSU5HX0lOVlBBUk0sICAiVWd5bGRpZyBwYXJhbWV0ZXIgqyVzuzsgYnJ1ayCreGNvcHkgLz+7IGZvciBoamVscFxuIgogICAgU1RSSU5HX1BBVVNFLCAgICAiVHJ5a2sgRW50ZXIgZm9yIOUgYmVneW5uZSDlIGtvcGllcmVcbiIKICAgIFNUUklOR19TSU1DT1BZLCAgIiVkIGZpbChlcikgdmlsbGUgYmxpdHQga29waWVydFxuIgogICAgU1RSSU5HX0NPUFksICAgICAiJWQgZmlsKGVyKSBrb3BpZXJ0XG4iCiAgICBTVFJJTkdfUUlTRElSLCAgICJFZXIgqyVzuyBldCBmaWxuZXZuIGVsbGVyIGthdGFsb2dcbiIgXAogICAgICAgICAgICAgICAgICAgICAiaSBt5WxldD9cbiIgXAogICAgICAgICAgICAgICAgICAgICAiKEYgLSBGaWwsIEsgLSBLYXRhbG9nKVxuIgogICAgU1RSSU5HX1NSQ1BST01QVCwiJXM/IChKYXxOZWkpXG4iCiAgICBTVFJJTkdfT1ZFUldSSVRFLCJTa3JpdmUgb3ZlciCrJXO7PyAoSmF8TmVpfEFsbGUpXG4iCiAgICBTVFJJTkdfQ09QWUZBSUwsICJLbGFydGUgaWtrZSBrb3BpZXJlIKslc7sgdGlsIKslc7s7IGZlaWxldCBtZWQgci9jICVkXG4iCiAgICBTVFJJTkdfT1BFTkZBSUwsICJLbGFydGUgaWtrZSDlcG5lIKslc7tcbiIKICAgIFNUUklOR19SRUFERkFJTCwgIktsYXJ0ZSBpa2tlIGxlc2UgqyVzu1xuIgogICAgU1RSSU5HX1lFU19DSEFSLCAiSiIKICAgIFNUUklOR19OT19DSEFSLCAgIk4iCiAgICBTVFJJTkdfQUxMX0NIQVIsICJBIgogICAgU1RSSU5HX0ZJTEVfQ0hBUiwiRiIKICAgIFNUUklOR19ESVJfQ0hBUiwgIksiCgogICAgU1RSSU5HX0hFTFAsCiJYQ09QWSAtIEtvcGllcmVyIGZpbGVyIGVsbGVyIGthdGFsb2d0cmUgdGlsIGVuIG3lbHBsYXNzZXJpbmdcblwKXG5cClN5bnRheDpcblwKWENPUFkga2lsZGUgW23lbF0gWy9JXSBbL1NdIFsvUV0gWy9GXSBbL0xdIFsvV10gWy9UXSBbL05dIFsvVV1cblwKXHQgICAgIFsvUl0gWy9IXSBbL0NdIFsvUF0gWy9BXSBbL01dIFsvRV0gWy9EXSBbL1ldIFsvLVldXG5cClxuXApXaGVyZTpcblwKXG5cClsvSV0gIEFudGEgYXQgbeVsZXQgZXIgZW4ga2F0YWxvZyBodmlzIG3lbGV0IGlra2UgZmlubmVzIG9nIDIgZWxsZXJcblwKICAgICAgXHRmbGVyZSBmaWxlciBibGlyIGtvcGllcnRcblwKWy9TXSAgS29waWVyIGthdGFsb2dlciBvZyB1bmRlcmthdGFsb2dlclxuXApbL0VdICBLb3BpZXIga2F0YWxvZ2VyIG9nIHVuZGVya2F0YWxvZ2VyLCB0YSBtZWQgdG9tbWUga2F0YWxvZ2VyXG5cClsvUV0gIFN0aWxsZSBtb2R1czogaWtrZSB2aXMgZmlsbmF2biB1bmRlciBrb3BpZXJpbmdcblwKWy9GXSAgRmlsIGhlbGUga2lsZGUtIG9nIG3lbG5hdm4gdW5kZXIga29waWVyaW5nXG5cClsvTF0gIFNpbXVsZXIgb3BlcmFzam9uZW47IHZpcyBiYXJlIGh2YSBzb20gdmlsbGUgYmxpdHQga29waWVydFxuXApbL1ddICBTcPhyIGZvciBrb3BlcmluZ2VuIHN0YXJ0ZXJcblwKWy9UXSAgTGFnIHRvbSAga2F0YWxvZ3N0cnVrdHVyOyBpa2tlIGtvcGllciBmaWxlclxuXApbL1ldICBJa2tlIHNw+HIgbuVyIGZpbGVyIHNrYWwgb3ZlcnNrcml2ZXNcblwKWy8tWV0gU3D4ciBm+HIgZmlsZXIgc2thbCBvdmVyc2tyaXZlc1xuXApbL1BdICBTcPhyIGZvciBodmVyIGtpbGRlZmlsIHNvbSBza2FsIGtvcGllcmVzXG5cClsvTl0gIEtvcGllciBzb20ga29ydGUgZmlsbmF2biAoOC4zIHRlZ24pXG5cClsvVV0gIEJhcmUga29waWVyIGZpbGVyIHNvbSBhbGxlcmVkZSBmaW5uZXMgaSBt5WxldFxuXApbL1JdICBTa3JpdiBvdmVyIGZpbGVyIHNvbSBlciBza3JpdmViZXNreXR0ZXRcblwKWy9IXSAgS29waWVyIHNranVsdGUgZmlsZXIgb2cgc3lzdGVtZmlsZXJcblwKWy9DXSAgRm9ydHNldHQgc2VsdiBvbSBkZXQgb3Bwc3TlciBmZWlsIHVuZGVyIGtvcGllcmluZ2VuXG5cClsvQV0gIElra2Uga29waWVyIGZpbGVyIHNvbSBlciBtYXJrZXJ0IHNvbSBhcmtpdlxuXApbL01dICBCYXJlIGtvcGllciBmaWxlciBzb20gZXIgbWFya2VydCBzb20gYWtyaXY7IGZqZXJuZXIgZGVubmUgbWVya2luZ2VuXG5cClsvRCB8IC9EOm0tZC3lXSBLb3BpZXIgbnllIGZpbGVyIGVsbGVyIGRlIHNvbSBlciBlbmRyZXQgZXR0ZXJcblwKICAgICAgXHRcdGRlbiBvcHBnaXR0ZSBkYXRvZW4uXG5cCiAgICAgIFx0XHRIdmlzIGluZ2VuIGRhdG8gb3BwZ2lzIGtvcGllcmVzIGJhcmUgZGUgZmlsZW5lIHNvbSBlclxuXAogICAgICBcdFx0ZWxkcmUgaSBt5WxldCBlbm4gaSBraWxkZW5cblxuIgoKfQo=