LyogUmVzb3VyY2UgZmlsZSBmb3IgTWFjR0RCLiAqLwoKI2luY2x1ZGUgIlN5c1R5cGVzLnIiCiNpbmNsdWRlICJUeXBlcy5yIgoKI2luY2x1ZGUgIm1hYy1kZWZzLmgiCgovKiBWZXJzaW9uIHJlc291cmNlcy4gKi8KCnJlc291cmNlICd2ZXJzJyAoMSkgewoJMCwKCTAsCgkwLAoJMCwKCXZlclVTLAoJVkVSU0lPTl9TVFJJTkcsCglWRVJTSU9OX1NUUklORyAgIiAoQykgMTk4Ni05NSBGU0YsIEluYy4iCn07CgpyZXNvdXJjZSAndmVycycgKDIsIHB1cmdlYWJsZSkgIHsKCTAsCgkwLAoJMCwKCTAsCgl2ZXJVcywKCVZFUlNJT05fU1RSSU5HLAoJIkdEQiAiIFZFUlNJT05fU1RSSU5HICIgZm9yIE1QVyIKfTsKCiNpZmRlZiBXQU5UX0NGUkcKCiNpbmNsdWRlICJDb2RlRnJhZ21lbnRUeXBlcy5yIgoKcmVzb3VyY2UgJ2NmcmcnICgwKSB7Cgl7CgkJa1Bvd2VyUEMsCgkJa0Z1bGxMaWIsCgkJa05vVmVyc2lvbk51bSwga05vVmVyc2lvbk51bSwKCQkwLCAwLAoJCWtJc0FwcCwga09uRGlza0ZsYXQsIGtaZXJvT2Zmc2V0LCBrV2hvbGVGb3JrLAoJCVBST0dfTkFNRQoJfQp9OwoKI2VuZGlmIC8qIFdBTlRfQ0ZSRyAqLwoKI2lmZGVmIE1hY2dkYiAvKiBFeGNsdWRlIHRoZSBmb2xsb3dpbmcgZnJvbSBTSU9XZ2RiIHdoaWNoIHVzZXMgU0lPVy5yLiAgKi8KCnJlc291cmNlICdNQkFSJyAoMTI4KSB7Cgl7IG1BcHBsZSwgbUZpbGUsIG1FZGl0LCBtRGVidWcgfTsKfTsKCnJlc291cmNlICdNRU5VJyAobUFwcGxlLCBwcmVsb2FkKSB7CgltQXBwbGUsCgl0ZXh0TWVudVByb2MsCgkweDdGRkZGRkZELAoJZW5hYmxlZCwKCWFwcGxlLAoJewoJCSJBYm91dC4uLiIsIG5vSWNvbiwgbm9LZXksIG5vTWFyaywgcGxhaW4sCgkJIi0iLCBub0ljb24sIG5vS2V5LCBub01hcmssIHBsYWluCgl9Cn07CgpyZXNvdXJjZSAnTUVOVScgKG1GaWxlLCBwcmVsb2FkKSB7CgltRmlsZSwKCXRleHRNZW51UHJvYywKCWFsbEVuYWJsZWQsCgllbmFibGVkLAoJIkZpbGUiLAoJewoJCSJOZXciLCBub0ljb24sIG5vS2V5LCBub01hcmssIHBsYWluLAoJCSJPcGVuLi4uIiwgbm9JY29uLCAiTyIsIG5vTWFyaywgcGxhaW4sCgkJIi0iLCBub0ljb24sIG5vS2V5LCBub01hcmssIHBsYWluLAoJCSJRdWl0Iiwgbm9JY29uLCAiUSIsIG5vTWFyaywgcGxhaW4KCX0KfTsKCnJlc291cmNlICdNRU5VJyAobUVkaXQsIHByZWxvYWQpIHsKCW1FZGl0LAoJdGV4dE1lbnVQcm9jLAoJYWxsRW5hYmxlZCwKCWVuYWJsZWQsCgkiRWRpdCIsCgl7CgkJIlVuZG8iLCBub0ljb24sICJaIiwgbm9NYXJrLCBwbGFpbiwKCQkiLSIsIG5vSWNvbiwgbm9LZXksIG5vTWFyaywgcGxhaW4sCgkJIkN1dCIsIG5vSWNvbiwgIlgiLCBub01hcmssIHBsYWluLAoJCSJDb3B5Iiwgbm9JY29uLCAiQyIsIG5vTWFyaywgcGxhaW4sCgkJIlBhc3RlIiwgbm9JY29uLCAiViIsIG5vTWFyaywgcGxhaW4sCgkJIkNsZWFyIiwgbm9JY29uLCBub0tleSwgbm9NYXJrLCBwbGFpbgoJfQp9OwoKcmVzb3VyY2UgJ01FTlUnIChtRGVidWcsIHByZWxvYWQpIHsKCW1EZWJ1ZywKCXRleHRNZW51UHJvYywKCWFsbEVuYWJsZWQsCgllbmFibGVkLAoJIkRlYnVnIiwKCXsKCQkiVGFyZ2V0Iiwgbm9JY29uLCAiVCIsIG5vTWFyaywgcGxhaW4sCgkJIi0iLCBub0ljb24sIG5vS2V5LCBub01hcmssIHBsYWluLAoJCSJSdW4iLCBub0ljb24sICJSIiwgbm9NYXJrLCBwbGFpbiwKCQkiQ29udGludWUiLCBub0ljb24sICJLIiwgbm9NYXJrLCBwbGFpbiwKCQkiU3RlcCIsIG5vSWNvbiwgIlMiLCBub01hcmssIHBsYWluLAoJCSJOZXh0Iiwgbm9JY29uLCAiTiIsIG5vTWFyaywgcGxhaW4KCX0KfTsKCnJlc291cmNlICdBTFJUJyAoMTI4KSB7Cgl7NDAsIDQwLCAxODAsIDQyMH0sCgkxMjgsCgl7CS8qIGFycmF5OiA0IGVsZW1lbnRzICovCgkJLyogWzFdICovCgkJT0ssIHZpc2libGUsIHNvdW5kMSwKCQkvKiBbMl0gKi8KCQlPSywgdmlzaWJsZSwgc291bmQxLAoJCS8qIFszXSAqLwoJCU9LLCB2aXNpYmxlLCBzb3VuZDEsCgkJLyogWzRdICovCgkJT0ssIHZpc2libGUsIHNvdW5kMQoJfQp9OwoKcmVzb3VyY2UgJ0RJVEwnICgxMjgpIHsKCXsJLyogYXJyYXkgRElUTGFycmF5OiAyIGVsZW1lbnRzICovCgkJLyogWzFdICovCgkJezExMCwgMTUwLCAxMjgsIDIwMH0sCgkJQnV0dG9uIHsKCQkJZW5hYmxlZCwKCQkJIk9LIgoJCX0sCgkJLyogWzJdICovCgkJezEwLCAxMCwgMTAwLCAzNzB9LAoJCVN0YXRpY1RleHQgewoJCQlkaXNhYmxlZCwKCQkJIkdEQiA0LjEyLjNcbiIKCQkJIkNvcHlyaWdodCCpICAxOTk0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuIgoJCX0sCgl9Cn07CgpyZXNvdXJjZSAnV0lORCcgKHdDb25zb2xlLCBwcmVsb2FkLCBwdXJnZWFibGUpIHsKCXs0MCwgNDAsIDMxMCwgNTcyfSwKCXpvb21Eb2NQcm9jLAoJdmlzaWJsZSwKCWdvQXdheSwKCTB4MCwKCSJHREIgQ29uc29sZSIKfTsKCnJlc291cmNlICdTSVpFJyAoLTEpIHsKCXJlc2VydmVkLAoJYWNjZXB0U3VzcGVuZFJlc3VtZUV2ZW50cywKCXJlc2VydmVkLAoJY2FuQmFja2dyb3VuZCwKCW11bHRpRmluZGVyQXdhcmUsCgliYWNrZ3JvdW5kQW5kRm9yZWdyb3VuZCwKCWRvbnRHZXRGcm9udENsaWNrcywKCWlnbm9yZUNoaWxkRGllZEV2ZW50cywKCW5vdDMyQml0Q29tcGF0aWJsZSwKCWlzSGlnaExldmVsRXZlbnRBd2FyZSwKCWxvY2FsQW5kUmVtb3RlSExFdmVudHMsCglub3RTdGF0aW9uZXJ5QXdhcmUsCglkb250VXNlVGV4dEVkaXRTZXJ2aWNlcywKCXJlc2VydmVkLAoJcmVzZXJ2ZWQsCglyZXNlcnZlZCwKCTUwMDAqMTAyNCwKCTIwMDAqMTAyNAp9OwoKcmVzb3VyY2UgJ0RMT0cnICgxMjgpIHsKCXs0MCwgNDAsIDI0MCwgMjgwfSwKCWRvY3VtZW50UHJvYywKCXZpc2libGUsCglnb0F3YXksCgkweDAsCgkxMjgsCgkiIgp9OwoKI2VuZGlmCg==