IyBUcmFuc2xhdGlvbiBvZiBgZ2V0dGV4dC1leGFtcGxlcycgbWVzc2FnZXMgdG8gSmFwYW5lc2UuCiMgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDE0LCAyMDE1IFlveW9keW5lLCBJbmMuIChtc2dpZHMpCiMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdldHRleHQgcGFja2FnZS4KIyBNYXNhaGl0byBZYW1hZ2EgPG1hQHlhbWEtZ2EuY29tPiwgMjAxNS4KIwptc2dpZCAiIgptc2dzdHIgIiIKIlByb2plY3QtSWQtVmVyc2lvbjogR05VIGdldHRleHQtZXhhbXBsZXMgMC4xOS40LjczXG4iCiJSZXBvcnQtTXNnaWQtQnVncy1UbzogYnVnLWdldHRleHRAZ251Lm9yZ1xuIgoiUE9ULUNyZWF0aW9uLURhdGU6IDIwMjAtMDQtMTEgMjI6MzUrMDIwMFxuIgoiUE8tUmV2aXNpb24tRGF0ZTogMjAxNS0wNi0yNCAxMjoxNCswOTAwXG4iCiJMYXN0LVRyYW5zbGF0b3I6IE1hc2FoaXRvIFlhbWFnYSA8bWFAeWFtYS1nYS5jb20+XG4iCiJMYW5ndWFnZS1UZWFtOiBKYXBhbmVzZSA8dHJhbnNsYXRpb24tdGVhbS1qYUBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCiJMYW5ndWFnZTogamFcbiIKIk1JTUUtVmVyc2lvbjogMS4wXG4iCiJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9RVVDLUpQXG4iCiJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCiJYLUJ1Z3M6IFJlcG9ydCB0cmFuc2xhdGlvbiBlcnJvcnMgdG8gdGhlIExhbmd1YWdlLVRlYW0gYWRkcmVzcy5cbiIKCiM6IGhlbGxvLWMvaGVsbG8uYzozMCBoZWxsby1jLWdub21lL2hlbGxvLmM6NDYKIzogaGVsbG8tYy1nbm9tZTMvaGVsbG8uZGVza3RvcC5pbi5pbjo1IGhlbGxvLWMrKy9oZWxsby5jYzozOQojOiBoZWxsby1jKystcXQvaGVsbG8uY2M6NDUgaGVsbG8tYysrLWtkZS9oZWxsb3dpbmRvdy5jYzo0MgojOiBoZWxsby1jKystZ25vbWUvaGVsbG8uY2M6NTAgaGVsbG8tYysrLXd4d2lkZ2V0cy9oZWxsby5jYzo2OAojOiBoZWxsby1vYmpjL2hlbGxvLm06MzAgaGVsbG8tb2JqYy1nbnVzdGVwL0hlbGxvLm06NDkKIzogaGVsbG8tb2JqYy1nbm9tZS9oZWxsby5tOjQ3IGhlbGxvLXNoL2hlbGxvLnNoOjE0IGhlbGxvLXB5dGhvbi9oZWxsby5weS5pbjoxMgojOiBoZWxsby1jbGlzcC9oZWxsby5saXNwLmluOjExIGhlbGxvLWxpYnJlcC9oZWxsby5qbC5pbjoxMgojOiBoZWxsby1ndWlsZS9oZWxsby5zY206MTUgaGVsbG8tc21hbGx0YWxrL2hlbGxvLnN0LmluOjMxCiM6IGhlbGxvLWphdmEvSGVsbG8uamF2YToxNCBoZWxsby1qYXZhLWF3dC9IZWxsby5qYXZhOjIzCiM6IGhlbGxvLWphdmEtc3dpbmcvSGVsbG8uamF2YToyMCBoZWxsby1qYXZhLXF0amFtYmkvSGVsbG8uamF2YToyNwojOiBoZWxsby1jc2hhcnAvaGVsbG8uY3M6MTQgaGVsbG8tY3NoYXJwLWZvcm1zL2hlbGxvLmNzOjI5CiM6IGhlbGxvLWdhd2svaGVsbG8uYXdrOjExIGhlbGxvLXBhc2NhbC9oZWxsby5oZWxsb193b3JsZAojOiBoZWxsby15Y3AvaGVsbG8ueWNwOjE1IGhlbGxvLXRjbC9oZWxsby50Y2w6MTEgaGVsbG8tdGNsLXRrL2hlbGxvLnRjbDoxMwojOiBoZWxsby1wZXJsL2hlbGxvLTEucGwuaW46MTcgaGVsbG8tcGVybC9oZWxsby0yLnBsLmluOjEyCiM6IGhlbGxvLXBocC9oZWxsby5waHA6MTIKbXNnaWQgIkhlbGxvLCB3b3JsZCEiCm1zZ3N0ciAiwKSzpqToLCCks6TzpMukwaTPISIKCiM6IGhlbGxvLWMvaGVsbG8uYzozMSBoZWxsby1jLWdub21lL2hlbGxvLmM6NTEgaGVsbG8tYysrL2hlbGxvLmNjOjQwCiM6IGhlbGxvLWMrKy1nbm9tZS9oZWxsby5jYzo1NSBoZWxsby1jKystd3h3aWRnZXRzL2hlbGxvLmNjOjcxCiM6IGhlbGxvLW9iamMvaGVsbG8ubTozMSBoZWxsby1vYmpjLWdudXN0ZXAvSGVsbG8ubTo1OAojOiBoZWxsby1vYmpjLWdub21lL2hlbGxvLm06NTIgaGVsbG8tbGlicmVwL2hlbGxvLmpsLmluOjE0CiM6IGhlbGxvLWdhd2svaGVsbG8uYXdrOjEyIGhlbGxvLXBhc2NhbC9oZWxsby5ydW5uaW5nX2FzIGhlbGxvLXRjbC9oZWxsby50Y2w6MTIKIzogaGVsbG8tdGNsLXRrL2hlbGxvLnRjbDoxNiBoZWxsby1wZXJsL2hlbGxvLTEucGwuaW46MTkgaGVsbG8tcGhwL2hlbGxvLnBocDoxNAojLCBwaHAtZm9ybWF0Cm1zZ2lkICJUaGlzIHByb2dyYW0gaXMgcnVubmluZyBhcyBwcm9jZXNzIG51bWJlciAlZC4iCm1zZ3N0ciAipLOkzqXXpe2lsKXppeCkz6XXpe2lu6W5yNa55iAlZCCkx8awpKSkxqSkpN6kuS4iCgojOiBoZWxsby1jLWdub21lMy9oZWxsby5jOjc5CiMsIGMtZm9ybWF0Cm1zZ2lkICIiCiI8YmlnPkhlbGxvIHdvcmxkITwvYmlnPlxuIgoiVGhpcyBwcm9ncmFtIGlzIHJ1bm5pbmcgYXMgcHJvY2VzcyBudW1iZXIgPGI+JWQ8L2I+LiIKbXNnc3RyICIiCiI8YmlnPkhlbGxvIHdvcmxkITwvYmlnPlxuIgoipLOkzqXXpe2lsKXppeCkz6XXpe2lu6W5yNa55iA8Yj4lZDwvYj4gpMfGsKSkpMakpKTepLkuIgoKIzogaGVsbG8tYy1nbm9tZTMvaGVsbG8uYzo4NAptc2dpZCAiPGJpZz48dT5UaGlzIGlzIGFub3RoZXIgdGV4dDwvdT48L2JpZz4iCm1zZ3N0ciAiPGJpZz48dT6ks6TspM+k4qSmsOykxKTOpcalraW5pcikx6S5PC91PjwvYmlnPiIKCiM6IGhlbGxvLWMtZ25vbWUzL2hlbGxvLmM6ODYKbXNnaWQgIjxiaWc+PGk+VGhpcyBpcyB5ZXQgYW5vdGhlciB0ZXh0PC9pPjwvYmlnPiIKbXNnc3RyICI8YmlnPjxpPqSzpOykz6S1pOmky6TipKaw7KTEpM6lxqWtpbmlyKTHpLk8L2k+PC9iaWc+IgoKIzogaGVsbG8tYy1nbm9tZTMvaGVsbG8uZGVza3RvcC5pbi5pbjo0Cm1zZ2lkICJIZWxsbyIKbXNnc3RyICKks6TzpMukwaTPIgoKIzogaGVsbG8tYy1nbm9tZTMvaGVsbG8udWk6Ngptc2dpZCAiRXhhbXBsZSBBcHBsaWNhdGlvbiIKbXNnc3RyICK8ws7jsf7N0SIKCiM6IGhlbGxvLWMtZ25vbWUzL2hlbGxvLnVpOjM0Cm1zZ2lkICJVcGRhdGUgdGV4dCIKbXNnc3RyICKlxqWtpbmlyKTyubm/tyIKCiM6IGhlbGxvLWMtZ25vbWUzL2hlbGxvLmdzY2hlbWEueG1sOjgKbXNnaWQgIlVzZSBYTUwgbWFya3VwIgptc2dzdHIgIlhNTKXeobylr6WipcOl16Tyu8jN0SIKCiM6IGhlbGxvLWMtZ25vbWUzL2hlbGxvLmdzY2hlbWEueG1sOjkKbXNnaWQgIldoZXRoZXIgdG8gdXNlIFhNTCBtYXJrdXAgaW4gdGhlIHRleHQuIgptc2dzdHIgIqXGpa2luaXIxuKkx1hNTKXeobylr6WipcOl16Tyu8ikpqSryN2kqyIKCiM6IGhlbGxvLWMrKy1xdC9oZWxsby5jYzo1MiBoZWxsby1jKysta2RlL2hlbGxvd2luZG93LmNjOjQ5CiM6IGhlbGxvLXNtYWxsdGFsay9oZWxsby5zdC5pbjozMiBoZWxsby15Y3AvaGVsbG8ueWNwOjE5CiMsIHljcC1mb3JtYXQKbXNnaWQgIlRoaXMgcHJvZ3JhbSBpcyBydW5uaW5nIGFzIHByb2Nlc3MgbnVtYmVyICUxLiIKbXNnc3RyICKks6TOpdel7aWwpeml4KTPpdel7aW7pbnI1rnmICUxIKTHxrCkpKTGpKSk3qS5LiIKCiM6IGhlbGxvLWMrKy1rZGUvaGVsbG8uY2M6NDYKbXNnaWQgIkhlbGxvIGV4YW1wbGUiCm1zZ3N0ciAiodaks6TzpMukwaTPodekzs7jIgoKIzogaGVsbG8tYysrLWtkZS9oZWxsby5jYzo0OAptc2dpZCAiSGVsbG8gd29ybGQgZXhhbXBsZSIKbXNnc3RyICKh1sCks6ak6CwgpLOk86TLpMGkz6HXpM7O4yIKCiM6IGhlbGxvLXNoL2hlbGxvLnNoOjE3CiMsIHNoLWZvcm1hdAptc2dpZCAiVGhpcyBwcm9ncmFtIGlzIHJ1bm5pbmcgYXMgcHJvY2VzcyBudW1iZXIgJHBpZC4iCm1zZ3N0ciAipLOkzqXXpe2lsKXppeCkz6XXpe2lu6W5yNa55iAkcGlkIKTHxrCkpKTGpKSk3qS5LiIKCiM6IGhlbGxvLXB5dGhvbi9oZWxsby5weS5pbjoxMwojLCBweXRob24tZm9ybWF0Cm1zZ2lkICJUaGlzIHByb2dyYW0gaXMgcnVubmluZyBhcyBwcm9jZXNzIG51bWJlciAlKHBpZClkLiIKbXNnc3RyICKks6TOpdel7aWwpeml4KTPpdel7aW7pbnI1rnmICUocGlkKWQgpMfGsKSkpMakpKTepLkuIgoKIzogaGVsbG8tY2xpc3AvaGVsbG8ubGlzcC5pbjoxMyBoZWxsby1ndWlsZS9oZWxsby5zY206MTcKIywgc2NoZW1lLWZvcm1hdAptc2dpZCAiVGhpcyBwcm9ncmFtIGlzIHJ1bm5pbmcgYXMgcHJvY2VzcyBudW1iZXIgfkQuIgptc2dzdHIgIqSzpM6l16XtpbCl6aXgpM+l16XtpbulucjWueYgfkQgpMfGsKSkpMakpKTepLkuIgoKIzogaGVsbG8tamF2YS9IZWxsby5qYXZhOjE4IGhlbGxvLWphdmEtYXd0L0hlbGxvLmphdmE6MjgKIzogaGVsbG8tamF2YS1zd2luZy9IZWxsby5qYXZhOjI1IGhlbGxvLWphdmEtcXRqYW1iaS9IZWxsby5qYXZhOjM0CiM6IGhlbGxvLWNzaGFycC9oZWxsby5jczoxNyBoZWxsby1jc2hhcnAtZm9ybXMvaGVsbG8uY3M6MzYKIywgY3NoYXJwLWZvcm1hdAptc2dpZCAiVGhpcyBwcm9ncmFtIGlzIHJ1bm5pbmcgYXMgcHJvY2VzcyBudW1iZXIgezB9LiIKbXNnc3RyICKks6TOpdel7aWwpeml4KTPpdel7aW7pbnI1rnmIHswfSCkx8awpKSkxqSkpN6kuS4iCgojOiBoZWxsby1wZXJsL2hlbGxvLTIucGwuaW46MTQKIywgcGVybC1icmFjZS1mb3JtYXQKbXNnaWQgIlRoaXMgcHJvZ3JhbSBpcyBydW5uaW5nIGFzIHByb2Nlc3MgbnVtYmVyIHtwaWR9LiIKbXNnc3RyICKks6TOpdel7aWwpeml4KTPpdel7aW7pbnI1rnmIHtwaWR9IKTHxrCkpKTGpKSk3qS5LiIKCiN+IG1zZ2lkICJTZXQgbGFiZWwgc2Vuc2l0aXZlIgojfiBtc2dzdHIgIqXppdml66Tyv7W9xaTLsLekpqTopKaky8DfxOoiCgojfiBtc2dpZCAiV2hldGhlciB0byBzZXQgdGhlIGxhYmVsIHNlbnNpdGl2ZS4iCiN+IG1zZ3N0ciAipL2kzqXppdml66Tyv7W9xaTLsLekpqTopKaky8DfxOqkuaTrpKvI3aSrIgo=