ZGlmZiAtLWdpdCBhLy5naXRhdHRyaWJ1dGVzIGIvLmdpdGF0dHJpYnV0ZXMKaW5kZXggMDYzNmRlZS4uNWU5ODgwNiAxMDA2NDQKLS0tIGEvLmdpdGF0dHJpYnV0ZXMKKysrIGIvLmdpdGF0dHJpYnV0ZXMKQEAgLTEsMiArMSwzIEBACiAqIHdoaXRlc3BhY2U9IWluZGVudCx0cmFpbCxzcGFjZQogKi5bY2hdIHdoaXRlc3BhY2U9aW5kZW50LHRyYWlsLHNwYWNlCisqLnNoIHdoaXRlc3BhY2U9aW5kZW50LHRyYWlsLHNwYWNlCmRpZmYgLS1naXQgYS8uZ2l0aWdub3JlIGIvLmdpdGlnbm9yZQppbmRleCA0MWMwYjIwLi44ZGY4Zjg4IDEwMDY0NAotLS0gYS8uZ2l0aWdub3JlCisrKyBiLy5naXRpZ25vcmUKQEAgLTEsMTc5ICsxLDIwMiBAQAotR0lULUJVSUxELU9QVElPTlMKLUdJVC1DRkxBR1MKLUdJVC1HVUktVkFSUwotR0lULVZFUlNJT04tRklMRQotZ2l0Ci1naXQtYWRkCi1naXQtYWRkLS1pbnRlcmFjdGl2ZQotZ2l0LWFtCi1naXQtYW5ub3RhdGUKLWdpdC1hcHBseQotZ2l0LWFyY2hpbXBvcnQKLWdpdC1hcmNoaXZlCi1naXQtYmlzZWN0Ci1naXQtYmlzZWN0LS1oZWxwZXIKLWdpdC1ibGFtZQotZ2l0LWJyYW5jaAotZ2l0LWJ1bmRsZQotZ2l0LWNhdC1maWxlCi1naXQtY2hlY2stYXR0cgotZ2l0LWNoZWNrLXJlZi1mb3JtYXQKLWdpdC1jaGVja291dAotZ2l0LWNoZWNrb3V0LWluZGV4Ci1naXQtY2hlcnJ5Ci1naXQtY2hlcnJ5LXBpY2sKLWdpdC1jbGVhbgotZ2l0LWNsb25lCi1naXQtY29tbWl0Ci1naXQtY29tbWl0LXRyZWUKLWdpdC1jb25maWcKLWdpdC1jb3VudC1vYmplY3RzCi1naXQtY3ZzZXhwb3J0Y29tbWl0Ci1naXQtY3ZzaW1wb3J0Ci1naXQtY3Zzc2VydmVyCi1naXQtZGFlbW9uCi1naXQtZGlmZgotZ2l0LWRpZmYtZmlsZXMKLWdpdC1kaWZmLWluZGV4Ci1naXQtZGlmZi10cmVlCi1naXQtZGlmZnRvb2wKLWdpdC1kaWZmdG9vbC0taGVscGVyCi1naXQtZGVzY3JpYmUKLWdpdC1mYXN0LWV4cG9ydAotZ2l0LWZhc3QtaW1wb3J0Ci1naXQtZmV0Y2gKLWdpdC1mZXRjaC0tdG9vbAotZ2l0LWZldGNoLXBhY2sKLWdpdC1maWx0ZXItYnJhbmNoCi1naXQtZm10LW1lcmdlLW1zZwotZ2l0LWZvci1lYWNoLXJlZgotZ2l0LWZvcm1hdC1wYXRjaAotZ2l0LWZzY2sKLWdpdC1mc2NrLW9iamVjdHMKLWdpdC1nYwotZ2l0LWdldC10YXItY29tbWl0LWlkCi1naXQtZ3JlcAotZ2l0LWhhc2gtb2JqZWN0Ci1naXQtaGVscAotZ2l0LWh0dHAtZmV0Y2gKLWdpdC1odHRwLXB1c2gKLWdpdC1pbWFwLXNlbmQKLWdpdC1pbmRleC1wYWNrCi1naXQtaW5pdAotZ2l0LWluaXQtZGIKLWdpdC1pbnN0YXdlYgotZ2l0LWxvZwotZ2l0LWxvc3QtZm91bmQKLWdpdC1scy1maWxlcwotZ2l0LWxzLXJlbW90ZQotZ2l0LWxzLXRyZWUKLWdpdC1tYWlsaW5mbwotZ2l0LW1haWxzcGxpdAotZ2l0LW1lcmdlCi1naXQtbWVyZ2UtYmFzZQotZ2l0LW1lcmdlLWluZGV4Ci1naXQtbWVyZ2UtZmlsZQotZ2l0LW1lcmdlLXRyZWUKLWdpdC1tZXJnZS1vY3RvcHVzCi1naXQtbWVyZ2Utb25lLWZpbGUKLWdpdC1tZXJnZS1vdXJzCi1naXQtbWVyZ2UtcmVjdXJzaXZlCi1naXQtbWVyZ2UtcmVzb2x2ZQotZ2l0LW1lcmdlLXN1YnRyZWUKLWdpdC1tZXJnZXRvb2wKLWdpdC1tZXJnZXRvb2wtLWxpYgotZ2l0LW1rdGFnCi1naXQtbWt0cmVlCi1naXQtbmFtZS1yZXYKLWdpdC1tdgotZ2l0LXBhY2stcmVkdW5kYW50Ci1naXQtcGFjay1vYmplY3RzCi1naXQtcGFjay1yZWZzCi1naXQtcGFyc2UtcmVtb3RlCi1naXQtcGF0Y2gtaWQKLWdpdC1wZWVrLXJlbW90ZQotZ2l0LXBydW5lCi1naXQtcHJ1bmUtcGFja2VkCi1naXQtcHVsbAotZ2l0LXB1c2gKLWdpdC1xdWlsdGltcG9ydAotZ2l0LXJlYWQtdHJlZQotZ2l0LXJlYmFzZQotZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUKLWdpdC1yZWNlaXZlLXBhY2sKLWdpdC1yZWZsb2cKLWdpdC1yZWxpbmsKLWdpdC1yZW1vdGUKLWdpdC1yZXBhY2sKLWdpdC1yZXBvLWNvbmZpZwotZ2l0LXJlcXVlc3QtcHVsbAotZ2l0LXJlcmVyZQotZ2l0LXJlc2V0Ci1naXQtcmV2LWxpc3QKLWdpdC1yZXYtcGFyc2UKLWdpdC1yZXZlcnQKLWdpdC1ybQotZ2l0LXNlbmQtZW1haWwKLWdpdC1zZW5kLXBhY2sKLWdpdC1zaC1zZXR1cAotZ2l0LXNoZWxsCi1naXQtc2hvcnRsb2cKLWdpdC1zaG93Ci1naXQtc2hvdy1icmFuY2gKLWdpdC1zaG93LWluZGV4Ci1naXQtc2hvdy1yZWYKLWdpdC1zdGFnZQotZ2l0LXN0YXNoCi1naXQtc3RhdHVzCi1naXQtc3RyaXBzcGFjZQotZ2l0LXN1Ym1vZHVsZQotZ2l0LXN2bgotZ2l0LXN5bWJvbGljLXJlZgotZ2l0LXRhZwotZ2l0LXRhci10cmVlCi1naXQtdW5wYWNrLWZpbGUKLWdpdC11bnBhY2stb2JqZWN0cwotZ2l0LXVwZGF0ZS1pbmRleAotZ2l0LXVwZGF0ZS1yZWYKLWdpdC11cGRhdGUtc2VydmVyLWluZm8KLWdpdC11cGxvYWQtYXJjaGl2ZQotZ2l0LXVwbG9hZC1wYWNrCi1naXQtdmFyCi1naXQtdmVyaWZ5LXBhY2sKLWdpdC12ZXJpZnktdGFnCi1naXQtd2ViLS1icm93c2UKLWdpdC13aGF0Y2hhbmdlZAotZ2l0LXdyaXRlLXRyZWUKLWdpdC1jb3JlLSovPyoKLWdpdGstd2lzaAotZ2l0d2ViL2dpdHdlYi5jZ2kKLXRlc3QtY2htdGltZQotdGVzdC1jdHlwZQotdGVzdC1kYXRlCi10ZXN0LWRlbHRhCi10ZXN0LWR1bXAtY2FjaGUtdHJlZQotdGVzdC1nZW5yYW5kb20KLXRlc3QtbWF0Y2gtdHJlZXMKLXRlc3QtcGFyc2Utb3B0aW9ucwotdGVzdC1wYXRoLXV0aWxzCi10ZXN0LXNoYTEKLXRlc3Qtc2lnY2hhaW4KLWNvbW1vbi1jbWRzLmgKKy9HSVQtQlVJTEQtT1BUSU9OUworL0dJVC1DRkxBR1MKKy9HSVQtR1VJLVZBUlMKKy9HSVQtVkVSU0lPTi1GSUxFCisvYmluLXdyYXBwZXJzLworL2dpdAorL2dpdC1hZGQKKy9naXQtYWRkLS1pbnRlcmFjdGl2ZQorL2dpdC1hbQorL2dpdC1hbm5vdGF0ZQorL2dpdC1hcHBseQorL2dpdC1hcmNoaW1wb3J0CisvZ2l0LWFyY2hpdmUKKy9naXQtYmlzZWN0CisvZ2l0LWJpc2VjdC0taGVscGVyCisvZ2l0LWJsYW1lCisvZ2l0LWJyYW5jaAorL2dpdC1idW5kbGUKKy9naXQtY2F0LWZpbGUKKy9naXQtY2hlY2stYXR0cgorL2dpdC1jaGVjay1yZWYtZm9ybWF0CisvZ2l0LWNoZWNrb3V0CisvZ2l0LWNoZWNrb3V0LWluZGV4CisvZ2l0LWNoZXJyeQorL2dpdC1jaGVycnktcGljaworL2dpdC1jbGVhbgorL2dpdC1jbG9uZQorL2dpdC1jb21taXQKKy9naXQtY29tbWl0LXRyZWUKKy9naXQtY29uZmlnCisvZ2l0LWNvdW50LW9iamVjdHMKKy9naXQtY3ZzZXhwb3J0Y29tbWl0CisvZ2l0LWN2c2ltcG9ydAorL2dpdC1jdnNzZXJ2ZXIKKy9naXQtZGFlbW9uCisvZ2l0LWRpZmYKKy9naXQtZGlmZi1maWxlcworL2dpdC1kaWZmLWluZGV4CisvZ2l0LWRpZmYtdHJlZQorL2dpdC1kaWZmdG9vbAorL2dpdC1kaWZmdG9vbC0taGVscGVyCisvZ2l0LWRlc2NyaWJlCisvZ2l0LWZhc3QtZXhwb3J0CisvZ2l0LWZhc3QtaW1wb3J0CisvZ2l0LWZldGNoCisvZ2l0LWZldGNoLS10b29sCisvZ2l0LWZldGNoLXBhY2sKKy9naXQtZmlsdGVyLWJyYW5jaAorL2dpdC1mbXQtbWVyZ2UtbXNnCisvZ2l0LWZvci1lYWNoLXJlZgorL2dpdC1mb3JtYXQtcGF0Y2gKKy9naXQtZnNjaworL2dpdC1mc2NrLW9iamVjdHMKKy9naXQtZ2MKKy9naXQtZ2V0LXRhci1jb21taXQtaWQKKy9naXQtZ3JlcAorL2dpdC1oYXNoLW9iamVjdAorL2dpdC1oZWxwCisvZ2l0LWh0dHAtYmFja2VuZAorL2dpdC1odHRwLWZldGNoCisvZ2l0LWh0dHAtcHVzaAorL2dpdC1pbWFwLXNlbmQKKy9naXQtaW5kZXgtcGFjaworL2dpdC1pbml0CisvZ2l0LWluaXQtZGIKKy9naXQtaW5zdGF3ZWIKKy9naXQtbG9nCisvZ2l0LWxvc3QtZm91bmQKKy9naXQtbHMtZmlsZXMKKy9naXQtbHMtcmVtb3RlCisvZ2l0LWxzLXRyZWUKKy9naXQtbWFpbGluZm8KKy9naXQtbWFpbHNwbGl0CisvZ2l0LW1lcmdlCisvZ2l0LW1lcmdlLWJhc2UKKy9naXQtbWVyZ2UtaW5kZXgKKy9naXQtbWVyZ2UtZmlsZQorL2dpdC1tZXJnZS10cmVlCisvZ2l0LW1lcmdlLW9jdG9wdXMKKy9naXQtbWVyZ2Utb25lLWZpbGUKKy9naXQtbWVyZ2Utb3VycworL2dpdC1tZXJnZS1yZWN1cnNpdmUKKy9naXQtbWVyZ2UtcmVzb2x2ZQorL2dpdC1tZXJnZS1zdWJ0cmVlCisvZ2l0LW1lcmdldG9vbAorL2dpdC1tZXJnZXRvb2wtLWxpYgorL2dpdC1ta3RhZworL2dpdC1ta3RyZWUKKy9naXQtbmFtZS1yZXYKKy9naXQtbXYKKy9naXQtbm90ZXMKKy9naXQtcGFjay1yZWR1bmRhbnQKKy9naXQtcGFjay1vYmplY3RzCisvZ2l0LXBhY2stcmVmcworL2dpdC1wYXJzZS1yZW1vdGUKKy9naXQtcGF0Y2gtaWQKKy9naXQtcGVlay1yZW1vdGUKKy9naXQtcHJ1bmUKKy9naXQtcHJ1bmUtcGFja2VkCisvZ2l0LXB1bGwKKy9naXQtcHVzaAorL2dpdC1xdWlsdGltcG9ydAorL2dpdC1yZWFkLXRyZWUKKy9naXQtcmViYXNlCisvZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUKKy9naXQtcmVjZWl2ZS1wYWNrCisvZ2l0LXJlZmxvZworL2dpdC1yZWxpbmsKKy9naXQtcmVtb3RlCisvZ2l0LXJlbW90ZS1jdXJsCisvZ2l0LXJlbW90ZS1odHRwCisvZ2l0LXJlbW90ZS1odHRwcworL2dpdC1yZW1vdGUtZnRwCisvZ2l0LXJlbW90ZS1mdHBzCisvZ2l0LXJlcGFjaworL2dpdC1yZXBsYWNlCisvZ2l0LXJlcG8tY29uZmlnCisvZ2l0LXJlcXVlc3QtcHVsbAorL2dpdC1yZXJlcmUKKy9naXQtcmVzZXQKKy9naXQtcmV2LWxpc3QKKy9naXQtcmV2LXBhcnNlCisvZ2l0LXJldmVydAorL2dpdC1ybQorL2dpdC1zZW5kLWVtYWlsCisvZ2l0LXNlbmQtcGFjaworL2dpdC1zaC1zZXR1cAorL2dpdC1zaGVsbAorL2dpdC1zaG9ydGxvZworL2dpdC1zaG93CisvZ2l0LXNob3ctYnJhbmNoCisvZ2l0LXNob3ctaW5kZXgKKy9naXQtc2hvdy1yZWYKKy9naXQtc3RhZ2UKKy9naXQtc3Rhc2gKKy9naXQtc3RhdHVzCisvZ2l0LXN0cmlwc3BhY2UKKy9naXQtc3VibW9kdWxlCisvZ2l0LXN2bgorL2dpdC1zeW1ib2xpYy1yZWYKKy9naXQtdGFnCisvZ2l0LXRhci10cmVlCisvZ2l0LXVucGFjay1maWxlCisvZ2l0LXVucGFjay1vYmplY3RzCisvZ2l0LXVwZGF0ZS1pbmRleAorL2dpdC11cGRhdGUtcmVmCisvZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbworL2dpdC11cGxvYWQtYXJjaGl2ZQorL2dpdC11cGxvYWQtcGFjaworL2dpdC12YXIKKy9naXQtdmVyaWZ5LXBhY2sKKy9naXQtdmVyaWZ5LXRhZworL2dpdC13ZWItLWJyb3dzZQorL2dpdC13aGF0Y2hhbmdlZAorL2dpdC13cml0ZS10cmVlCisvZ2l0LWNvcmUtKi8/KgorL2dpdGstZ2l0L2dpdGstd2lzaAorL2dpdHdlYi9naXR3ZWIuY2dpCisvdGVzdC1jaG10aW1lCisvdGVzdC1jdHlwZQorL3Rlc3QtZGF0ZQorL3Rlc3QtZGVsdGEKKy90ZXN0LWR1bXAtY2FjaGUtdHJlZQorL3Rlc3QtZ2VucmFuZG9tCisvdGVzdC1pbmRleC12ZXJzaW9uCisvdGVzdC1tYXRjaC10cmVlcworL3Rlc3QtcGFyc2Utb3B0aW9ucworL3Rlc3QtcGF0aC11dGlscworL3Rlc3QtcnVuLWNvbW1hbmQKKy90ZXN0LXNoYTEKKy90ZXN0LXNpZ2NoYWluCisvY29tbW9uLWNtZHMuaAogKi50YXIuZ3oKICouZHNjCiAqLmRlYgotZ2l0LnNwZWMKKy9naXQuc3BlYwogKi5leGUKICouW2Fvc10KICoucHlbY29dCi1jb25maWcubWFrCi1hdXRvbTR0ZS5jYWNoZQotY29uZmlnLmNhY2hlCi1jb25maWcubG9nCi1jb25maWcuc3RhdHVzCi1jb25maWcubWFrLmF1dG9nZW4KLWNvbmZpZy5tYWsuYXBwZW5kCi1jb25maWd1cmUKLXRhZ3MKLVRBR1MKLWNzY29wZSoKKyorCisvY29uZmlnLm1haworL2F1dG9tNHRlLmNhY2hlCisvY29uZmlnLmNhY2hlCisvY29uZmlnLmxvZworL2NvbmZpZy5zdGF0dXMKKy9jb25maWcubWFrLmF1dG9nZW4KKy9jb25maWcubWFrLmFwcGVuZAorL2NvbmZpZ3VyZQorL3RhZ3MKKy9UQUdTCisvY3Njb3BlKgorKi5vYmoKKyoubGliCisqLnNsbgorKi5zdW8KKyoubmNiCisqLnZjcHJvagorKi51c2VyCisqLmlkYgorKi5wZGIKKy9EZWJ1Zy8KKy9SZWxlYXNlLwpkaWZmIC0tZ2l0IGEvLm1haWxtYXAgYi8ubWFpbG1hcAppbmRleCAzNzM0NzZiLi44OGJkMDFlIDEwMDY0NAotLS0gYS8ubWFpbG1hcAorKysgYi8ubWFpbG1hcApAQCAtMzYsMTEgKzM2LDEzIEBACiBMdWthcyBTYW5kc3Ryw7ZtIDxsdWthc3NAZXRlay5jaGFsbWVycy5zZT4KIE1hcnRpbiBMYW5naG9mZiA8bWFydGluQGNhdGFseXN0Lm5ldC5uej4KIE1pY2hhZWwgQ29sZW1hbiA8dHV0dWZhbkBnbWFpbC5jb20+CitNaWNoYWVsIEogR3J1YmVyIDxnaXRAZHJtaWNoYS53YXJwbWFpbC5uZXQ+IDxtaWNoYWVsamdydWJlcitnbWFuZUBmYXN0bWFpbC5mbT4KIE1pY2hhZWwgVy4gT2xzb24gPG13b2xzb25AZ251Lm9yZz4KIE1pY2hlbGUgQmFsbGFiaW8gPGJhcnJhX2N1ZGFAa2F0YW1haWwuY29tPgogTmFuYWtvIFNoaXJhaXNoaSA8bmFuYWtvM0BibHVlYm90dGxlLmNvbT4KIE5hbmFrbyBTaGlyYWlzaGkgPG5hbmFrbzNAbGF2YWJpdC5jb20+CiBOZ3V54buFbiBUaMOhaSBOZ+G7jWMgRHV5IDxwY2xvdWRzQGdtYWlsLmNvbT4KKzxuaWNvQGZsdXhuaWMubmV0PiA8bmljb0BjYW0ub3JnPgogUGhpbGlwcGUgQnJ1aGF0IDxib29rQGNwYW4ub3JnPgogUmFtc2F5IEFsbGFuIEpvbmVzIDxyYW1zYXlAcmFtc2F5MS5kZW1vbi5jby51az4KIFJlbsOpIFNjaGFyZmUgPHJlbmUuc2NoYXJmZUBsc3JmaXJlLmF0aC5jeD4KZGlmZiAtLWdpdCBhL0NPUFlJTkcgYi9DT1BZSU5HCmluZGV4IDZmZjg3YzQuLjUzNmU1NTUgMTAwNjQ0Ci0tLSBhL0NPUFlJTkcKKysrIGIvQ09QWUlORwpAQCAtMjIsOCArMjIsOCBAQAogCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKIAkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCiAKLSBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0gICAgICAgICAgICAgICAgICAgICAgIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKICBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKICBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KIApAQCAtMzYsNyArMzYsNyBAQAogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKIEZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KIHVzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKLXRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bwordGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KIHlvdXIgcHJvZ3JhbXMsIHRvby4KIAogICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CkBAIC03Niw3ICs3Niw3IEBACiAKICAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKIG1vZGlmaWNhdGlvbiBmb2xsb3cuCi0MCisKIAkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCiAgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KIApAQCAtMTMxLDcgKzEzMSw3IEBACiAgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKICAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCiAgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCi0MCisKIFRoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKIGlkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCiBhbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KQEAgLTE4OSw3ICsxODksNyBAQAogYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCiBkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKIGNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCi0MCisKICAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCiBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CiBvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKQEAgLTI0Niw3ICsyNDYsNyBAQAogCiBUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KIGJlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgotDAorCiAgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCiBjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKIG9yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKQEAgLTI5OSw3ICsyOTksNyBAQAogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgogCiAJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCi0MCisKIAkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCiAKICAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdApAQCAtMzI0LDEwICszMjQsOSBAQAogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLQorICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgogCiBBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KIApAQCAtMzU3LDUgKzM1Niw1IEBACiBUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KIHByb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5CiBjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKLWxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi8uZ2l0aWdub3JlIGIvRG9jdW1lbnRhdGlvbi8uZ2l0aWdub3JlCmluZGV4IGQ4ZWRkOTAuLjFjM2E5ZmUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vLmdpdGlnbm9yZQorKysgYi9Eb2N1bWVudGF0aW9uLy5naXRpZ25vcmUKQEAgLTgsMyArOCw0IEBACiBob3d0by1pbmRleC50eHQKIGRvYy5kZXAKIGNtZHMtKi50eHQKK21hbnBhZ2UtYmFzZS11cmwueHNsCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL01ha2VmaWxlIGIvRG9jdW1lbnRhdGlvbi9NYWtlZmlsZQppbmRleCA3YTgwMzdmLi44YThhMzk1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL01ha2VmaWxlCisrKyBiL0RvY3VtZW50YXRpb24vTWFrZWZpbGUKQEAgLTE3LDYgKzE3LDcgQEAKIEFSVElDTEVTID0gaG93dG8taW5kZXgKIEFSVElDTEVTICs9IGV2ZXJ5ZGF5CiBBUlRJQ0xFUyArPSBnaXQtdG9vbHMKK0FSVElDTEVTICs9IGdpdC1iaXNlY3QtbGsyMDA5CiAjIHdpdGggdGhlaXIgb3duIGZvcm1hdHRpbmcgcnVsZXMuCiBTUF9BUlRJQ0xFUyA9IGhvd3RvL3JldmVydC1icmFuY2gtcmViYXNlIGhvd3RvL3VzaW5nLW1lcmdlLXN1YnRyZWUgdXNlci1tYW51YWwKIEFQSV9ET0NTID0gJChwYXRzdWJzdCAlLnR4dCwlLCQoZmlsdGVyLW91dCB0ZWNobmljYWwvYXBpLWluZGV4LXNrZWwudHh0IHRlY2huaWNhbC9hcGktaW5kZXgudHh0LCAkKHdpbGRjYXJkIHRlY2huaWNhbC9hcGktKi50eHQpKSkKQEAgLTg0LDcgKzg1LDcgQEAKICMKIAogaWZkZWYgQVNDSUlET0M4Ci1BU0NJSURPQ19FWFRSQSArPSAtYSBhc2NpaWRvYzdjb21wYXRpYmxlCitBU0NJSURPQ19FWFRSQSArPSAtYSBhc2NpaWRvYzdjb21wYXRpYmxlIC1hIG5vLWlubGluZS1saXRlcmFsCiBlbmRpZgogaWZkZWYgRE9DQk9PS19YU0xfMTcyCiBBU0NJSURPQ19FWFRSQSArPSAtYSBnaXQtYXNjaWlkb2Mtbm8tcm9mZgpAQCAtMTAzLDYgKzEwNCwyNSBAQAogWE1MVE9fRVhUUkEgKz0gLW0gbWFucGFnZS1zdXBwcmVzcy1zcC54c2wKIGVuZGlmCiAKKyMgTmV3ZXIgRG9jQm9vayBzdHlsZXNoZWV0IGVtaXRzIHdhcm5pbmcgY3J1ZnQgaW4gdGhlIG91dHB1dCB3aGVuCisjIHRoaXMgaXMgbm90IHNldCwgYW5kIGlmIHNldCBpdCBzaG93cyBhbiBhYnNvbHV0ZSBsaW5rLiAgT2xkZXIKKyMgc3R5bGVzaGVldHMgc2ltcGx5IGlnbm9yZSB0aGlzIHBhcmFtZXRlci4KKyMKKyMgRGlzdHJvcyBtYXkgd2FudCB0byB1c2UgTUFOX0JBU0VfVVJMPWZpbGU6Ly8vcGF0aC90by9naXQvZG9jcy8KKyMgb3Igc2ltaWxhci4KK2lmbmRlZiBNQU5fQkFTRV9VUkwKK01BTl9CQVNFX1VSTCA9IGZpbGU6Ly8kKGh0bWxkaXIpLworZW5kaWYKK1hNTFRPX0VYVFJBICs9IC1tIG1hbnBhZ2UtYmFzZS11cmwueHNsCisKKyMgSWYgeW91ciB0YXJnZXQgc3lzdGVtIHVzZXMgR05VIGdyb2ZmLCBpdCBtYXkgdHJ5IHRvIHJlbmRlcgorIyBhcG9zdHJvcGhlcyBhcyBhICJwcmV0dHkiIGFwb3N0cm9waGUgdXNpbmcgdW5pY29kZS4gIFRoaXMgYnJlYWtzCisjIGN1dCZwYXN0ZSwgc28geW91IHNob3VsZCBzZXQgR05VX1JPRkYgdG8gZm9yY2UgdGhlbSB0byBiZSBBU0NJSQorIyBhcG9zdHJvcGhlcy4gIFVuZm9ydHVuYXRlbHkgZG9lcyBub3Qgd29yayB3aXRoIG5vbi1HTlUgcm9mZi4KK2lmZGVmIEdOVV9ST0ZGCitYTUxUT19FWFRSQSArPSAtbSBtYW5wYWdlLXF1b3RlLWFwb3MueHNsCitlbmRpZgorCiBTSEVMTF9QQVRIID89ICQoU0hFTEwpCiAjIFNoZWxsIHF1b3RlOwogU0hFTExfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoU0hFTExfUEFUSCkpCkBAIC0xODQsNyArMjA0LDcgQEAKIGluc3RhbGwtaHRtbDogaHRtbAogCSckKFNIRUxMX1BBVEhfU1EpJyAuL2luc3RhbGwtd2ViZG9jLnNoICQoREVTVERJUikkKGh0bWxkaXIpCiAKLS4uL0dJVC1WRVJTSU9OLUZJTEU6IC5GT1JDRS1HSVQtVkVSU0lPTi1GSUxFCisuLi9HSVQtVkVSU0lPTi1GSUxFOiBGT1JDRQogCSQoUVVJRVRfU1VCRElSMCkuLi8gJChRVUlFVF9TVUJESVIxKSBHSVQtVkVSU0lPTi1GSUxFCiAKIC1pbmNsdWRlIC4uL0dJVC1WRVJTSU9OLUZJTEUKQEAgLTIyMiw2ICsyNDIsNyBAQAogCSQoUk0pIGhvd3RvLWluZGV4LnR4dCBob3d0by8qLmh0bWwgZG9jLmRlcAogCSQoUk0pIHRlY2huaWNhbC9hcGktKi5odG1sIHRlY2huaWNhbC9hcGktaW5kZXgudHh0CiAJJChSTSkgJChjbWRzX3R4dCkgKi5tYWRlCisJJChSTSkgbWFucGFnZS1iYXNlLXVybC54c2wKIAogJChNQU5fSFRNTCk6ICUuaHRtbCA6ICUudHh0CiAJJChRVUlFVF9BU0NJSURPQykkKFJNKSAkQCsgJEAgJiYgXApAQCAtMjI5LDcgKzI1MCwxMCBAQAogCQkkKEFTQ0lJRE9DX0VYVFJBKSAtYWdpdF92ZXJzaW9uPSQoR0lUX1ZFUlNJT04pIC1vICRAKyAkPCAmJiBcCiAJbXYgJEArICRACiAKLSUuMSAlLjUgJS43IDogJS54bWwKK21hbnBhZ2UtYmFzZS11cmwueHNsOiBtYW5wYWdlLWJhc2UtdXJsLnhzbC5pbgorCXNlZCAic3xAQE1BTl9CQVNFX1VSTEBAfCQoTUFOX0JBU0VfVVJMKXwiICQ8ID4gJEAKKworJS4xICUuNSAlLjcgOiAlLnhtbCBtYW5wYWdlLWJhc2UtdXJsLnhzbAogCSQoUVVJRVRfWE1MVE8pJChSTSkgJEAgJiYgXAogCXhtbHRvIC1tICQoTUFOUEFHRV9YU0wpICQoWE1MVE9fRVhUUkEpIG1hbiAkPAogCkBAIC0zMTMsNCArMzM3LDQgQEAKIHF1aWNrLWluc3RhbGwtaHRtbDoKIAknJChTSEVMTF9QQVRIX1NRKScgLi9pbnN0YWxsLWRvYy1xdWljay5zaCAkKEhUTUxfUkVGKSAkKERFU1RESVIpJChodG1sZGlyKQogCi0uUEhPTlk6IC5GT1JDRS1HSVQtVkVSU0lPTi1GSUxFCisuUEhPTlk6IEZPUkNFCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi40LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuNC4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDM5ZTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuNC4xLnR4dApAQCAtMCwwICsxLDQ2IEBACitHSVQgdjEuNi40LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi40CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogQW4gdW5xdW90ZWQgdmFsdWUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSwgd2hlbiBpdCBjb250YWlucyBtb3JlIHRoYW4KKyAgIG9uZSB3aGl0ZXNwYWNlcyBpbiBhIHJvdywgZ290IHRoZW0gcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBzcGFjZS4KKworICogImdpdCBhbSIgdXNlZCB0byBhY2NlcHQgYSBzaW5nbGUgcGllY2Ugb2YgZS1tYWlsIHBlciBmaWxlIChub3QgYSBtYm94KQorICAgYXMgaXRzIGlucHV0LCBidXQgbXVsdGlwbGUgaW5wdXQgZm9ybWF0IHN1cHBvcnQgaW4gdjEuNi40IGJyb2tlIGl0LgorICAgQXBwYXJlbnRseSBtYW55IHBlb3BsZSBoYXZlIGJlZW4gZGVwZW5kaW5nIG9uIHRoaXMgZmVhdHVyZS4KKworICogVGhlIHNob3J0IGhlbHAgdGV4dCBmb3IgImdpdCBmaWx0ZXItYnJhbmNoIiBjb21tYW5kIHdhcyBhIHNpbmdsZSBsb25nCisgICBsaW5lLCB3cmFwcGVkIGJ5IHRlcm1pbmFscywgYW5kIHdhcyBoYXJkIHRvIHJlYWQuCisKKyAqIFRoZSAicmVjdXJzaXZlIiBzdHJhdGVneSBvZiAiZ2l0IG1lcmdlIiBzZWdmYXVsdGVkIHdoZW4gYSBtZXJnZSBoYXMKKyAgIG1vcmUgdGhhbiBvbmUgbWVyZ2UtYmFzZXMsIGFuZCBtZXJnaW5nIG9mIHRoZXNlIG1lcmdlLWJhc2VzIGludm9sdmVzCisgICBhIHJlbmFtZS9yZW5hbWUgb3IgYSByZW5hbWUvYWRkIGNvbmZsaWN0LgorCisgKiAiZ2l0IHB1bGwgLS1yZWJhc2UiIGRpZCBub3QgdXNlIHRoZSByaWdodCBmb3JrIHBvaW50IHdoZW4gdGhlCisgICByZXBvc2l0b3J5IGhhcyBhbHJlYWR5IGZldGNoZWQgZnJvbSB0aGUgdXBzdHJlYW0gdGhhdCByZXdpbmRzIHRoZQorICAgYnJhbmNoIGl0IGlzIGJhc2VkIG9uIGluIGFuIGVhcmxpZXIgZmV0Y2guCisKKyAqIEV4cGxhaW4gdGhlIGNvbmNlcHQgb2YgZmFzdC1mb3J3YXJkIG1vcmUgZnVsbHkgaW4gImdpdCBwdXNoIgorICAgZG9jdW1lbnRhdGlvbiwgYW5kIGhpbnQgdG8gcmVmZXIgdG8gaXQgZnJvbSBhbiBlcnJvciBtZXNzYWdlIHdoZW4gdGhlCisgICBjb21tYW5kIHJlZnVzZXMgYW4gdXBkYXRlIHRvIHByb3RlY3QgdGhlIHVzZXIuCisKKyAqIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBwYWNrLmRlbHRhY2FjaGVzaXplLCB1c2VkIGJ5ICJnaXQgcmVwYWNrIiwgaXMgbm93CisgICAyNTZNLCBpbnN0ZWFkIG9mIHVuYm91bmRlZC4gIE90aGVyd2lzZSBhIHJlcGFjayBvZiBhIG1vZGVyYXRlbHkgc2l6ZWQKKyAgIHJlcG9zaXRvcnkgd291bGQgbmVlZGxlc3NseSBlYXQgaW50byBzd2FwLgorCisgKiBEb2N1bWVudCBob3cgImdpdCByZXBhY2siIChoZW5jZSAiZ2l0IGdjIikgaW50ZXJhY3RzIHdpdGggYSByZXBvc2l0b3J5CisgICB0aGF0IGJvcnJvd3MgaXRzIG9iamVjdHMgZnJvbSBvdGhlciByZXBvc2l0b3JpZXMgKGUuZy4gb25lcyBjcmVhdGVkIGJ5CisgICAiZ2l0IGNsb25lIC1zIikuCisKKyAqICJnaXQgc2hvdyIgb24gYW4gYW5ub3RhdGVkIHRhZyBsYWNrZWQgYSBkZWxpbWl0aW5nIGJsYW5rIGxpbmUgYmV0d2VlbgorICAgdGhlIHRhZyBpdHNlbGYgYW5kIHRoZSBjb250ZW50cyBvZiB0aGUgb2JqZWN0IGl0IHRhZ3MuCisKKyAqICJnaXQgdmVyaWZ5LXBhY2sgLXYiIGVycm9uZW91c2x5IHJlcG9ydGVkIG51bWJlciBvZiBvYmplY3RzIHdpdGggdG9vCisgICBkZWVwIGRlbHRhIGRlcHRocyBhcyAiY2hhaW4gbGVuZ3RoIDAiIG9iamVjdHMuCisKKyAqIExvbmcgbmFtZXMgb2YgYXV0aG9ycyBhbmQgY29tbWl0dGVycyBvdXRzaWRlIFVTLUFTQ0lJIHdlcmUgc29tZXRpbWVzCisgICBpbmNvcnJlY3RseSBzaG93biBpbiAiZ2l0d2ViIi4KKworT3RoZXIgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjQuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi40LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMWVjMDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi40LjIudHh0CkBAIC0wLDAgKzEsMzIgQEAKK0dJVCB2MS42LjQuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjQuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiAtLWRhdGU9cmVsYXRpdmUgb3V0cHV0IGJldHdlZW4gMSBhbmQgNSB5ZWFycyBhZ28gcm91bmRlZCB0aGUgbnVtYmVyIG9mCisgICAgeWVhcnMgd2hlbiBzYXlpbmcgWCB5ZWFycyBZIG1vbnRocyBhZ28sIGluc3RlYWQgb2Ygcm91bmRpbmcgaXQgZG93bi4KKworKiAiZ2l0IGFkZCAtcCIgZGlkIG5vdCBoYW5kbGUgY2hhbmdlcyBpbiBleGVjdXRhYmxlIGJpdHMgY29ycmVjdGx5CisgIChhIHJlZ3Jlc3Npb24gYXJvdW5kIDEuNi4zKS4KKworKiAiZ2l0IGFwcGx5IiBkaWQgbm90IGhvbm9yIEdOVSBkaWZmJ3MgY29udmVudGlvbiB0byBtYXJrIHRoZSBjcmVhdGlvbi9kZWxldGlvbgorICBldmVudCB3aXRoIFVOSVggZXBvY2ggdGltZXN0YW1wIG9uIG1pc3Npbmcgc2lkZS4KKworKiAiZ2l0IGNoZWNrb3V0IiBpbmNvcnJlY3RseSByZW1vdmVkIGZpbGVzIGluIGEgZGlyZWN0b3J5IHBvaW50ZWQgYnkgYQorICBzeW1ib2xpYyBsaW5rIGR1cmluZyBhIGJyYW5jaCBzd2l0Y2ggdGhhdCByZXBsYWNlcyBhIGRpcmVjdG9yeSB3aXRoCisgIGEgc3ltYm9saWMgbGluay4KKworKiAiZ2l0IGNsZWFuIC1kIC1mIiBoYXBwaWx5IGRlc2NlbmRlZCBpbnRvIGEgc3ViZGlyZWN0b3J5IHRoYXQgaXMgbWFuYWdlZCBieSBhCisgIHNlcGFyYXRlIGdpdCByZXBvc2l0b3J5LiAgSXQgbm93IHJlcXVpcmVzIHR3byAtZiBvcHRpb25zIGZvciBzYWZldHkuCisKKyogImdpdCBmZXRjaC9wdXNoIiBvdmVyIGh0dHAgdHJhbnNwb3J0cyBoYWQgdHdvIHJhdGhlciBncmF2ZSBidWdzLgorCisqICJnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIiBkaWQgbm90IHByZXBhcmUgdGhlIGNvdmVyIGxldHRlciBmaWxlCisgIGZvciB1c2Ugd2l0aCBub24tQVNDSUkgc3RyaW5ncyB3aGVuIHRoZXJlIGFyZSB0aGUgc2VyaWVzIGNvbnRyaWJ1dG9ycyB3aXRoCisgIG5vbi1BU0NJSSBuYW1lcy4KKworKiAiZ2l0IHB1bGwgb3JpZ2luIGJyYW5jaCIgYW5kICJnaXQgZmV0Y2ggb3JpZ2luICYmIGdpdCBtZXJnZSBvcmlnaW4vYnJhbmNoIgorICBsZWZ0IGRpZmZlcmVudCBtZXJnZSBtZXNzYWdlcyBpbiB0aGUgcmVzdWx0aW5nIGNvbW1pdC4KKworT3RoZXIgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjQuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi40LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMjliYWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi40LjMudHh0CkBAIC0wLDAgKzEsMjkgQEAKK0dJVCB2MS42LjQuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjQuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiAiZ2l0IGNsb25lIiBmcm9tIGFuIGVtcHR5IHJlcG9zaXRvcnkgZ2F2ZSB1bm5lY2Vzc2FyeSBlcnJvciBtZXNzYWdlLAorICBldmVuIHRob3VnaCBpdCBkaWQgZXZlcnl0aGluZyBlbHNlIGNvcnJlY3RseS4KKworKiAiZ2l0IGN2c3NlcnZlciIgaW52b2tlZCBnaXQgY29tbWFuZHMgdmlhICJnaXQtZm9vIiBzdHlsZSwgd2hpY2ggaGFzIGxvbmcKKyAgYmVlbiBkZXByZWNhdGVkLgorCisqICJnaXQgZmV0Y2giIGFuZCAiZ2l0IGNsb25lIiBoYWQgYW4gZXh0cmEgc2FuaXR5IGNoZWNrIHRvIHZlcmlmeSB0aGUKKyAgcHJlc2Vuc2Ugb2YgdGhlIGNvcnJlc3BvbmRpbmcgKi5wYWNrIGZpbGUgYmVmb3JlIGRvd25sb2FkaW5nICouaWR4CisgIGZpbGUgYnkgaXNzdWluZyBhIEhFQUQgcmVxdWVzdC4gIEdpdGh1YiBzZXJ2ZXIgaG93ZXZlciBzb21ldGltZXMKKyAgZ2F2ZSA1MDAgKEludGVybmFsIHNlcnZlciBlcnJvcikgcmVzcG9uc2UgdG8gSEVBRCBldmVuIGlmIGEgR0VUCisgIHJlcXVlc3QgZm9yICoucGFjayBmaWxlIHRvIHRoZSBzYW1lIFVSTCB3b3VsZCBoYXZlIHN1Y2NlZWRlZCwgYW5kIGJyb2tlCisgIGNsb25lIG92ZXIgSFRUUCBmcm9tIHNvbWUgb2YgdGhlaXIgcmVwb3NpdG9yaWVzLiAgQXMgYSB3b3JrYXJvdW5kLCB0aGlzCisgIHZlcmlmaWNhdGlvbiBoYXMgYmVlbiByZW1vdmVkIChhcyBpdCBpcyBub3QgYWJzb2x1dGVseSBuZWNlc3NhcnkpLgorCisqICJnaXQgZ3JlcCIgZGlkIG5vdCBsaWtlIHJlbGF0aXZlIHBhdGhuYW1lIHRvIHJlZmVyIG91dHNpZGUgdGhlIGN1cnJlbnQKKyAgZGlyZWN0b3J5IHdoZW4gcnVuIGZyb20gYSBzdWJkaXJlY3RvcnkuCisKKyogYW4gZXJyb3IgbWVzc2FnZSBmcm9tICJnaXQgcHVzaCIgd2FzIGZvcm1hdHRlZCBpbiBhIHZlcnkgdWdseSB3YXkuCisKKyogImdpdCBzdm4iIGRpZCBub3QgcXVvdGUgdGhlIHN1YnZlcnNpb24gdXNlciBuYW1lIGNvcnJlY3RseSB3aGVuCisgIHJ1bm5pbmcgaXRzIGF1dGhvci1wcm9nIGhlbHBlciBwcm9ncmFtLgorCitPdGhlciBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuNC40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjQuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVhZDQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjQuNC50eHQKQEAgLTAsMCArMSwyNiBAQAorR0lUIHYxLjYuNC40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuNC40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFRoZSB3b3JrYXJvdW5kIGZvciBHaXRodWIgc2VydmVyIHRoYXQgc29tZXRpbWVzIGdhdmUgNTAwIChJbnRlcm5hbCBzZXJ2ZXIKKyAgZXJyb3IpIHJlc3BvbnNlIHRvIEhFQUQgcmVxdWVzdHMgaW4gMS42LjQuMyBpbnRyb2R1Y2VkIGEgcmVncmVzc2lvbiB0aGF0CisgIGNhdXNlZCByZS1mZXRjaGluZyBwcm9qZWN0cyBvdmVyIGh0dHAgdG8gc2VnZmF1bHQgaW4gY2VydGFpbiBjYXNlcyBkdWUKKyAgdG8gdW5pbml0aWFsaXplZCBwb2ludGVyIGJlaW5nIGZyZWVkLgorCisqICJnaXQgcHVsbCIgb24gYW4gdW5ib3JuIGJyYW5jaCB1c2VkIHRvIGNvbnNpZGVyIGFueXRoaW5nIGluIHRoZSB3b3JrCisgIHRyZWUgYW5kIHRoZSBpbmRleCBkaXNjYXJkYWJsZS4KKworKiAiZ2l0IGRpZmYgLWIvdyIgZGlkIG5vdCB3b3JrIHdlbGwgb24gdGhlIGluY29tcGxldGUgbGluZSBhdCB0aGUgZW5kIG9mCisgIHRoZSBmaWxlLCBkdWUgdG8gYW4gaW5jb3JyZWN0IGhhc2hpbmcgb2YgbGluZXMgaW4gdGhlIGxvdy1sZXZlbCB4ZGlmZgorICByb3V0aW5lcy4KKworKiAiZ2l0IGNoZWNrb3V0LWluZGV4IC0tcHJlZml4PSRzb21ld2hlcmUiIHVzZWQgdG8gd29yayB3aGVuICRzb21ld2hlcmUgaXMKKyAgYSBzeW1ib2xpYyBsaW5rIHRvIGEgZGlyZWN0b3J5IGVsc2V3aGVyZSwgYnV0IHYxLjYuNC4yIGJyb2tlIGl0LgorCisqICJnaXQgdW5wYWNrLW9iamVjdHMgLS1zdHJpY3QiLCBpbnZva2VkIHdoZW4gcmVjZWl2ZS5mc2Nrb2JqZWN0cworICBjb25maWd1cmF0aW9uIGlzIHNldCBpbiB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkgb2YgImdpdCBwdXNoIiwgZGlkIG5vdAorICBwcm9wZXJseSBjaGVjayB0aGUgb2JqZWN0cywgZXNwZWNpYWxseSB0aGUgc3VibW9kdWxlIGxpbmtzLCBpdCByZWNlaXZlZC4KKworT3RoZXIgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E5MDQ0MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjQudHh0CkBAIC0wLDAgKzEsMTQ3IEBACitHSVQgdjEuNi40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitXaXRoIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UsICJnaXQgcHVzaCIgaW50byBhIGJyYW5jaCB0aGF0IGlzCitjdXJyZW50bHkgY2hlY2tlZCBvdXQgd2lsbCBiZSByZWZ1c2VkIGJ5IGRlZmF1bHQuICBZb3UgY2FuIGNob29zZQord2hhdCBzaG91bGQgaGFwcGVuIHVwb24gc3VjaCBhIHB1c2ggYnkgc2V0dGluZyB0aGUgY29uZmlndXJhdGlvbgordmFyaWFibGUgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCBpbiB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkuCisKK1RvIGVhc2UgdGhlIHRyYW5zaXRpb24gcGxhbiwgdGhlIHJlY2VpdmluZyByZXBvc2l0b3J5IG9mIHN1Y2ggYQorcHVzaCBydW5uaW5nIHRoaXMgcmVsZWFzZSB3aWxsIGlzc3VlIGEgYmlnIHdhcm5pbmcgd2hlbiB0aGUKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgbWlzc2luZy4gIFBsZWFzZSByZWZlciB0bzoKKworICBodHRwOi8vZ2l0Lm9yLmN6L2dpdHdpa2kvR2l0RmFxI25vbi1iYXJlCisgIGh0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmNvbXAudmVyc2lvbi1jb250cm9sLmdpdC8xMDc3NTgvZm9jdXM9MTA4MDA3CisKK2ZvciBtb3JlIGRldGFpbHMgb24gdGhlIHJlYXNvbiB3aHkgdGhpcyBjaGFuZ2UgaXMgbmVlZGVkIGFuZCB0aGUKK3RyYW5zaXRpb24gcGxhbi4KKworRm9yIGEgc2ltaWxhciByZWFzb24sICJnaXQgcHVzaCAkdGhlcmUgOiRraWxsZWQiIHRvIGRlbGV0ZSB0aGUgYnJhbmNoCiska2lsbGVkIGluIGEgcmVtb3RlIHJlcG9zaXRvcnkgJHRoZXJlLCBpZiAka2lsbGVkIGJyYW5jaCBpcyB0aGUgY3VycmVudAorYnJhbmNoIHBvaW50ZWQgYXQgYnkgaXRzIEhFQUQsIGdldHMgYSBsYXJnZSB3YXJuaW5nLiAgWW91IGNhbiBjaG9vc2Ugd2hhdAorc2hvdWxkIGhhcHBlbiB1cG9uIHN1Y2ggYSBwdXNoIGJ5IHNldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKK3JlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnQgaW4gdGhlIHJlY2VpdmluZyByZXBvc2l0b3J5LgorCisKK1VwZGF0ZXMgc2luY2UgdjEuNi4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoc3Vic3lzdGVtcykKKworICogZ2l0d2ViIFBlcmwgc3R5bGUgY2xlYW4tdXAuCisKKyAqIGdpdC1zdm4gdXBkYXRlcywgaW5jbHVkaW5nIGEgbmV3IC0tYXV0aG9ycy1wcm9nIG9wdGlvbiB0byBtYXAgYXV0aG9yCisgICBuYW1lcyBieSBpbnZva2luZyBhbiBleHRlcm5hbCBwcm9ncmFtLCAnZ2l0IHN2biByZXNldCcgdG8gdW53aW5kCisgICAnZ2l0IHN2biBmZXRjaCcsIHN1cHBvcnQgZm9yIG1vcmUgdGhhbiBvbmUgYnJhbmNoZXMsIGRvY3VtZW50aW5nCisgICBvZiB0aGUgdXNlZnVsIC0tbWluaW1pemUtdXJsIGZlYXR1cmUsIG5ldyAiZ2l0IHN2biBnYyIgY29tbWFuZCwgZXRjLgorCisocG9ydGFiaWxpdHkpCisKKyAqIFdlIGZlZWQgaWNvbnYgd2l0aCAiVVRGLTgiIGluc3RlYWQgb2YgInV0ZjgiOyB0aGUgZm9ybWVyIGlzCisgICB1bmRlcnN0b29kIG1vcmUgd2lkZWx5LiAgU2ltaWxhcmx5IHVwZGF0ZWQgdGVzdCBzY3JpcHRzIHRvIHVzZQorICAgZW5jb2RpbmcgbmFtZXMgbW9yZSB3aWRlbHkgdW5kZXJzdG9vZCAoZS5nLiB1c2UgIklTTzg4NTktMSIgaW5zdGVhZAorICAgb2YgIklTTy04ODU5LTEiKS4KKworICogVmFyaW91cyBwb3J0YWJpbGl0eSBmaXhlcy93b3JrYXJvdW5kcyBmb3IgZGlmZmVyZW50IHZpbnRhZ2VzIG9mCisgICBTdW5PUywgSVJJWCwgYW5kIFdpbmRvd3MuCisKKyAqIEdpdC1vdmVyLXNzaCB0cmFuc3BvcnQgb24gV2luZG93cyBzdXBwb3J0cyBQdVRUWSBwbGluayBhbmQgVG9ydG9pc2VQbGluay4KKworKHBlcmZvcm1hbmNlKQorCisgKiBNYW55IHJlcGVhdGVkIHVzZSBvZiBsc3RhdCgpIGFyZSBvcHRpbWl6ZWQgb3V0IGluICJjaGVja291dCIgY29kZXBhdGguCisKKyAqIGdpdC1zdGF0dXMgKGFuZCB1bmRlcmx5aW5nIGdpdC1kaWZmLWluZGV4IC0tY2FjaGVkKSBhcmUgb3B0aW1pemVkCisgICB0byB0YWtlIGFkdmFudGFnZSBvZiBjYWNoZS10cmVlIGluZm9ybWF0aW9uIGluIHRoZSBpbmRleC4KKworKHVzYWJpbGl0eSwgYmVsbHMgYW5kIHdoaXN0bGVzKQorCisgKiAiZ2l0IGFkZCAtLWVkaXQiIGxldHMgdXNlcnMgZWRpdCB0aGUgd2hvbGUgcGF0Y2ggdGV4dCB0byBmaW5lLXR1bmUgd2hhdAorICAgaXMgYWRkZWQgdG8gdGhlIGluZGV4LgorCisgKiAiZ2l0IGFtIiBhY2NlcHRzIFN0R0lUIHNlcmllcyBmaWxlIGFzIGl0cyBpbnB1dC4KKworICogImdpdCBiaXNlY3Qgc2tpcCIgc2tpcHMgdG8gYSBtb3JlIHJhbmRvbWx5IGNob3NlbiBwbGFjZSBpbiB0aGUgaG9wZQorICAgdG8gYXZvaWQgdGVzdGluZyBhIGNvbW1pdCB0aGF0IGlzIHRvbyBjbG9zZSB0byBhIGNvbW1pdCB0aGF0IGlzCisgICBhbHJlYWR5IGtub3duIHRvIGJlIHVudGVzdGFibGUuCisKKyAqICJnaXQgY3ZzZXhwb3J0Y29tbWl0IiBsZWFybmVkIC1rIG9wdGlvbiB0byBzdG9wIENWUyBrZXl3b3JkcyBleHBhbnNpb24KKworICogImdpdCBmYXN0LWV4cG9ydCIgbGVhcm5lZCB0byBoYW5kbGUgaGlzdG9yeSBzaW1wbGlmaWNhdGlvbiBtb3JlCisgICBncmFjZWZ1bGx5LgorCisgKiAiZ2l0IGZhc3QtZXhwb3J0IiBsZWFybmVkIGFuIG9wdGlvbiAtLXRhZy1vZi1maWx0ZXJlZC1vYmplY3QgdG8gaGFuZGxlCisgICBkYW5nbGluZyB0YWdzIHJlc3VsdGluZyBmcm9tIGhpc3Rvcnkgc2ltcGxpZmljYXRpb24gbW9yZSB1c2VmdWxseS4KKworICogImdpdCBncmVwIiBsZWFybmVkIC1wIG9wdGlvbiB0byBzaG93IHRoZSBsb2NhdGlvbiBvZiB0aGUgbWF0Y2ggdXNpbmcgdGhlCisgICBzYW1lIGNvbnRleHQgaHVuayBtYXJrZXIgImdpdCBkaWZmIiB1c2VzLgorCisgKiBodHRwcyB0cmFuc3BvcnQgY2FuIG9wdGlvbmFsbHkgYmUgdG9sZCB0aGF0IHRoZSB1c2VkIGNsaWVudAorICAgY2VydGlmaWNhdGUgaXMgcGFzc3dvcmQgcHJvdGVjdGVkLCBpbiB3aGljaCBjYXNlIGl0IGFza3MgdGhlCisgICBwYXNzd29yZCBvbmx5IG9uY2UuCisKKyAqICJnaXQgaW1hcC1zZW5kIiBpcyBJUHY2IGF3YXJlLgorCisgKiAiZ2l0IGxvZyAtLWdyYXBoIiBkcmF3cyBncmFwaHMgbW9yZSBjb21wYWN0bHkgYnkgdXNpbmcgaG9yaXpvbnRhbCBsaW5lcworICAgd2hlbiBhYmxlLgorCisgKiAiZ2l0IGxvZyAtLWRlY29yYXRlIiBzaG93cyBzaG9ydGVyIHJlZm5hbWVzIGJ5IHN0cmlwcGluZyB3ZWxsLWtub3duCisgICByZWZzLyogcHJlZml4LgorCisgKiAiZ2l0IHB1c2ggJG5hbWUiIGhvbm9ycyByZW1vdGUuJG5hbWUucHVzaHVybCBpZiBwcmVzZW50IGJlZm9yZQorICAgdXNpbmcgcmVtb3RlLiRuYW1lLnVybC4gIEluIG90aGVyIHdvcmRzLCB0aGUgVVJMIHVzZWQgZm9yIGZldGNoaW5nCisgICBhbmQgcHVzaGluZyBjYW4gYmUgZGlmZmVyZW50LgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIHVuZGVyc3RhbmRzIHF1b3RlZCBhbGlhc2VzIGluIC5tYWlscmMgZmlsZXMgKG1pZ2h0CisgICBoYXZlIHRvIGJlIGJhY2twb3J0ZWQgdG8gMS42LjMuWCkuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgY2FuIGZldGNoIHRoZSBzZW5kZXIgYWRkcmVzcyBmcm9tIHRoZSBjb25maWd1cmF0aW9uCisgICB2YXJpYWJsZSAic2VuZG1haWwuZnJvbSIgKGFuZCAic2VuZG1haWwuPGlkZW50aXR5Pi5mcm9tIikuCisKKyAqICJnaXQgc2hvdy1icmFuY2giIGNhbiBjb2xvciBpdHMgb3V0cHV0LgorCisgKiAiYWRkIiBhbmQgInVwZGF0ZSIgc3ViY29tbWFuZHMgdG8gImdpdCBzdWJtb2R1bGUiIGxlYXJuZWQgLS1yZWZlcmVuY2UKKyAgIG9wdGlvbiB0byB1c2UgbG9jYWwgY2xvbmUgd2l0aCByZWZlcmVuY2VzLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUiIGxlYXJuZWQgLS1yZWJhc2Ugb3B0aW9uIHRvIHVwZGF0ZSBjaGVja2VkCisgICBvdXQgc3VibW9kdWxlcyBieSByZWJhc2luZyB0aGUgbG9jYWwgY2hhbmdlcy4KKworICogImdpdHdlYiIgY2FuIG9wdGlvbmFsbHkgdXNlIGdyYXZhdGFyIHRvIGFkb3JuIGF1dGhvci9jb21taXR0ZXIgbmFtZXMuCisKKyhkZXZlbG9wZXJzKQorCisgKiBBIG1ham9yIHBhcnQgb2YgdGhlICJnaXQgYmlzZWN0IiB3cmFwcGVyIGhhcyBtb3ZlZCB0byBDLgorCisgKiBGb3JtYXR0aW5nIHdpdGggdGhlIG5ldyB2ZXJzaW9uIG9mIEFzY2lpRG9jIDguNC4xIGlzIG5vdyBzdXBwb3J0ZWQuCisKK0ZpeGVzIHNpbmNlIHYxLjYuMworLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBvZiB0aGUgZml4ZXMgaW4gdjEuNi4zLlggbWFpbnRlbmFuY2Ugc2VyaWVzIGFyZSBpbmNsdWRlZCBpbiB0aGlzCityZWxlYXNlLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCitIZXJlIGFyZSBmaXhlcyB0aGF0IHRoaXMgcmVsZWFzZSBoYXMsIGJ1dCBoYXZlIG5vdCBiZWVuIGJhY2twb3J0ZWQgdG8KK3YxLjYuMy5YIHNlcmllcy4KKworICogImdpdCBkaWZmLXRyZWUgLXIgLXQiIHVzZWQgdG8gb21pdCBuZXcgb3IgcmVtb3ZlZCBkaXJlY3RvcmllcyBmcm9tCisgICB0aGUgb3V0cHV0LiAgZGY1MzNmMyAoZGlmZi10cmVlIC1yIC10OiBpbmNsdWRlIGFkZGVkL3JlbW92ZWQKKyAgIGRpcmVjdG9yaWVzIGluIHRoZSBvdXRwdXQsIDIwMDktMDYtMTMpIG1heSBuZWVkIHRvIGJlIGNoZXJyeS1waWNrZWQKKyAgIHRvIGJhY2twb3J0IHRoaXMgZml4LgorCisgKiBUaGUgd2F5IEdpdC5wbSBzZXRzIHVwIGEgUmVwb3NpdG9yeSBvYmplY3Qgd2FzIG5vdCBmcmllbmRseSB0byBjYWxsZXJzCisgICB0aGF0IGNoZGlyIGFyb3VuZC4gIEl0IG5vdyBpbnRlcm5hbGx5IHJlY29yZHMgdGhlIHJlcG9zaXRvcnkgbG9jYXRpb24KKyAgIGFzIGFuIGFic29sdXRlIHBhdGggd2hlbiBhdXRvZGV0ZWN0ZWQuCisKKyAqIFJlbW92aW5nIGEgc2VjdGlvbiB3aXRoICJnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24iLCB3aGVuIGl0cworICAgc2VjdGlvbiBoZWFkZXIgaGFzIGEgdmFyaWFibGUgZGVmaW5pdGlvbiBvbiB0aGUgc2FtZSBsaW5lLCBsb3N0CisgICB0aGF0IHZhcmlhYmxlIGRlZmluaXRpb24uCisKKyAqICJnaXQgcmViYXNlIC1wIC0tb250byIgdXNlZCB0byBhbHdheXMgbGVhdmUgc2lkZSBicmFuY2hlcyBvZiBhIG1lcmdlCisgICBpbnRhY3QsIGV2ZW4gd2hlbiBib3RoIGJyYW5jaGVzIGFyZSBzdWJqZWN0IHRvIHJld3JpdGluZy4KKworICogImdpdCByZXBhY2siIHVzZWQgdG8gZmFpdGhmdWxseSBmb2xsb3cgZ3JhZnRzIGFuZCBjb25zaWRlcmVkIHRydWUKKyAgIHBhcmVudHMgcmVjb3JkZWQgaW4gdGhlIGNvbW1pdCBvYmplY3QgdW5yZWFjaGFibGUgZnJvbSB0aGUgY29tbWl0LgorICAgQWZ0ZXIgc3VjaCBhIHJlcGFja2luZywgeW91IGNhbm5vdCByZW1vdmUgZ3JhZnRzIHdpdGhvdXQgY29ycnVwdGluZworICAgdGhlIHJlcG9zaXRvcnkuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgZGlkIG5vdCBkZXRlY3QgZXJyb25lb3VzIGxvb3BzIGluIGFsaWFzIGV4cGFuc2lvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjUuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi41LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwOWJhMTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi41LjEudHh0CkBAIC0wLDAgKzEsMjAgQEAKK0dJVCB2MS42LjUuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjUKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBbiBjb3JydXB0IHBhY2sgY291bGQgbWFrZSBjb2RlcGF0aCB0byByZWFkIG9iamVjdHMgaW50byBhbgorICAgaW5maW5pdGUgbG9vcC4KKworICogRG93bmxvYWQgdGhyb3VnaHB1dCBkaXNwbGF5IHdhcyBhbHdheXMgc2hvd24gaW4gS2lCL3MgYnV0IG9uIGZhc3QgbGlua3MKKyAgIGl0IGlzIG1vcmUgYXBwcm9wcmlhdGUgdG8gc2hvdyBpdCBpbiBNaUIvcy4KKworICogImdpdCBncmVwIC1mIGZpbGVuYW1lIiB1c2VkIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYW5kIHNlZ2ZhdWx0ZWQuCisKKyAqICJnaXQgY2xvbmUgLWIgYnJhbmNoIiBnYXZlIGEgd3JvbmcgY29tbWl0IG9iamVjdCBuYW1lIHRvIHBvc3QtY2hlY2tvdXQKKyAgIGhvb2suCisKKyAqICJnaXQgcHVsbCIgb3ZlciBodHRwIGRpZCBub3Qgd29yayBvbiBtc3lzLgorCitPdGhlciBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuNS4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjUuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE3Y2NjZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjUuMi50eHQKQEAgLTAsMCArMSwxOSBAQAorR0lUIHYxLjYuNS4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuNS4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBJbnN0YWxsYXRpb24gb2YgdGVtcGxhdGVzIHRyaWdnZXJlZCBhIGJ1ZyBpbiBidXN5Ym94IHdoZW4gdXNpbmcgdGFyCisgICBpbXBsZW1lbnRhdGlvbiBmcm9tIGl0LgorCisgKiAiZ2l0IGFkZCAtaSIgaW5jb3JyZWN0bHkgaWdub3JlZCBwYXRocyB0aGF0IGFyZSBhbHJlYWR5IGluIHRoZSBpbmRleAorICAgaWYgdGhleSBtYXRjaGVkIC5naXRpZ25vcmUgcGF0dGVybnMuCisKKyAqICJnaXQgZGVzY3JpYmUgLS1hbHdheXMiIHNob3VsZCBoYXZlIHByb2R1Y2VkIHNvbWUgb3V0cHV0IGV2ZW4gdGhlcmUKKyAgIHdlcmUgbm8gdGFncyBpbiB0aGUgcmVwb3NpdG9yeSwgYnV0IGl0IGRpZG4ndC4KKworICogImdpdCBscy1maWxlcyIgd2hlbiBzaG93aW5nIHRyYWNrZWQgZmlsZXMgaW5jb3JyZWN0bHkgcGFpZCBhdHRlbnRpb24KKyAgIHRvIHRoZSBleGNsdWRlIHBhdHRlcm5zLgorCitPdGhlciBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuNS4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjUuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJmYWQxYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjUuMy50eHQKQEAgLTAsMCArMSw2MyBAQAorR2l0IHYxLjYuNS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuNS4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBpbmZvL2dyYWZ0cyBmaWxlIGRpZG4ndCBpZ25vcmUgdHJhaWxpbmcgQ1IgYXQgdGhlIGVuZCBvZiBsaW5lcy4KKworICogUGFja2FnZXMgZ2VuZXJhdGVkIG9uIG5ld2VyIEZDIHdlcmUgdW5yZWFkYWJsZSBieSBvbGRlciB2ZXJzaW9ucyBvZgorICAgUlBNIGFzIHRoZSBuZXcgZGVmYXVsdCBpcyB0byB1c2Ugc3Ryb25nZXIgaGFzaC4KKworICogb3V0cHV0IGZyb20gImdpdCBibGFtZSIgd2FzIHVucmVhZGFibGUgd2hlbiB0aGUgZmlsZSBlbmRlZCBpbiBhbgorICAgaW5jb21wbGV0ZSBsaW5lLgorCisgKiAiZ2l0IGFkZCAtaS8tcCIgZGlkbid0IGhhbmRsZSBkZWxldGlvbiBvZiBlbXB0eSBmaWxlcyBjb3JyZWN0bHkuCisKKyAqICJnaXQgY2xvbmUiIHRha2VzIHVwIHRvIHR3byBwYXJhbWV0ZXJzLCBidXQgZGlkIG5vdCBjb21wbGFpbiB3aGVuCisgICBnaXZlbiBtb3JlIGFyZ3VtZW50cyB0aGFuIG5lY2Vzc2FyeSBhbmQgc2lsZW50bHkgaWdub3JlZCB0aGVtLgorCisgKiAiZ2l0IGN2c2ltcG9ydCIgZGlkIG5vdCByZWFkIGZpbGVzIGdpdmVuIGFzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKKyAgIGNvcnJlY3RseSB3aGVuIGl0IGlzIHJ1biBmcm9tIGEgc3ViZGlyZWN0b3J5LgorCisgKiAiZ2l0IGRpZmYgLS1jb2xvci13b3JkcyAtVTAiIGRpZG4ndCB3b3JrIGNvcnJlY3RseS4KKworICogVGhlIGhhbmRsaW5nIG9mIGJsYW5rIGxpbmVzIGF0IHRoZSBlbmQgb2YgZmlsZSBieSAiZ2l0IGRpZmYvYXBwbHkKKyAgIC0td2hpdGVzcGFjZSIgd2FzIGluY29uc2lzdGVudCB3aXRoIHRoZSBvdGhlciBraW5kcyBvZiBlcnJvcnMuCisgICBUaGV5IGFyZSBub3cgY29sb3JlZCwgd2FybmVkIGFnYWluc3QsIGFuZCBmaXhlZCB0aGUgc2FtZSB3YXkgYXMgb3RoZXJzLgorCisgKiBUaGVyZSB3YXMgbm8gd2F5IHRvIGFsbG93IGJsYW5rIGxpbmVzIGF0IHRoZSBlbmQgb2YgZmlsZSB3aXRob3V0CisgICBhbGxvd2luZyBleHRyYSBibGFua3MgYXQgdGhlIGVuZCBvZiBsaW5lcy4gIFlvdSBjYW4gdXNlIGJsYW5rLWF0LWVvZgorICAgYW5kIGJsYW5rLWF0LWVvbCB3aGl0ZXNwYWNlIGVycm9yIGNsYXNzIHRvIHNwZWNpZnkgdGhlbSBzZXBhcmF0ZWx5LgorICAgVGhlIG9sZCB0cmFpbGluZy1zcGFjZSBlcnJvciBjbGFzcyBpcyBub3cgYSBzaG9ydC1oYW5kIHRvIHNldCBib3RoLgorCisgKiAiLXAiIG9wdGlvbiB0byAiZ2l0IGZvcm1hdC1wYXRjaCIgd2FzIHN1cHBvc2VkIHRvIHN1cHByZXNzIGRpZmZzdGF0CisgICBnZW5lcmF0aW9uLCBidXQgaXQgd2FzIGJyb2tlbiBzaW5jZSAxLjYuMS4KKworICogImdpdCBpbWFwLXNlbmQiIGRpZCBub3QgY29tcGlsZSBjbGVhbmx5IHdpdGggbmV3ZXIgT3BlblNTTC4KKworICogImdpdCBoZWxwIC1hIiBvdXRzaWRlIG9mIGEgZ2l0IHJlcG9zaXRvcnkgd2FzIGJyb2tlbi4KKworICogImdpdCBscy1maWxlcyAtaSIgd2FzIHN1cHBvc2VkIHRvIGJlIGludmVyc2Ugb2YgImdpdCBscy1maWxlcyIgd2l0aG91dCAtaQorICAgd2l0aCByZXNwZWN0IHRvIGV4Y2x1ZGUgcGF0dGVybnMsIGJ1dCBpdCB3YXMgYnJva2VuIHNpbmNlIDEuNi41LjIuCisKKyAqICJnaXQgbHMtcmVtb3RlIiBvdXRzaWRlIG9mIGEgZ2l0IHJlcG9zaXRvcnkgb3ZlciBodHRwIHdhcyBicm9rZW4uCisKKyAqICJnaXQgcmViYXNlIC1pIiBnYXZlIGJvZ3VzIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUgY29tbWFuZCB3b3JkIHdhcworICAgbWlzc3BlbGxlZC4KKworICogImdpdCByZWNlaXZlLXBhY2siIHRoYXQgaXMgcnVuIGluIHJlc3BvbnNlIHRvICJnaXQgcHVzaCIgZGlkIG5vdCBydW4KKyAgIGdhcmJhZ2UgY29sbGVjdGlvbiBub3IgdXBkYXRlLXNlcnZlci1pbmZvLCBidXQgaW4gbGFyZ2VyIGhvc3Rpbmcgc2l0ZXMsCisgICB0aGVzZSBhbG1vc3QgYWx3YXlzIG5lZWQgdG8gYmUgcnVuLiAgVG8gaGVscCBzaXRlIGFkbWluaXN0cmF0b3JzLCB0aGUKKyAgIGNvbW1hbmQgbm93IHJ1bnMgImdjIC0tYXV0byIgYW5kICJ1LXMtaSIgYnkgc2V0dGluZyByZWNlaXZlLmF1dG9nYworICAgYW5kIHJlY2VpdmUudXBkYXRlc2VydmVyaW5mbyBjb25maWd1cmF0aW9uIHZhcmlhYmxlcywgcmVzcGVjdGl2ZWx5LgorCisgKiBSZWxlYXNlIG5vdGVzIHNwZWxsZWQgdGhlIHBhY2thZ2UgbmFtZSB3aXRoIGluY29ycmVjdCBjYXBpdGFsaXphdGlvbi4KKworICogImdpdHdlYiIgZGlkIG5vdCBlc2NhcGUgbm9uLWFzY2lpIGNoYXJhY3RlcnMgY29ycmVjdGx5IGluIHRoZSBVUkwuCisKKyAqICJnaXR3ZWIiIHNob3dlZCAicGF0Y2giIGxpbmsgZXZlbiBmb3IgbWVyZ2UgY29tbWl0cy4KKworICogImdpdHdlYiIgc2hvd2VkIGluY29ycmVjdCBsaW5rcyBmb3IgYmxvYiBsaW5lIG51bWJlcnMgaW4gcGF0aGluZm8gbW9kZS4KKworT3RoZXIgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjUuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi41LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MmY4YjIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi41LjQudHh0CkBAIC0wLDAgKzEsMzIgQEAKK0dpdCB2MS42LjUuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjUuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBoZWxwIiAod2l0aG91dCBhcmd1bWVudCkgdXNlZCB0byBjaGVjayBpZiB5b3UgYXJlIGluIGEgZGlyZWN0b3J5CisgICB1bmRlciBnaXQgY29udHJvbC4gVGhlcmUgd2FzIG5vIGJyZWFrYWdlIGluIGJlaGF2aW91ciBwZXItc2UsIGJ1dCB0aGlzCisgICB3YXMgdW5uZWNlc3NhcnkuCisKKyAqICJnaXQgcHJ1bmUtcGFja2VkIiBnYXZlIHByb2dyZXNzIG91dHB1dCBldmVuIHdoZW4gaXRzIHN0YW5kYXJkIGVycm9yIGlzCisgICBub3QgY29ubmVjdGVkIHRvIGEgdGVybWluYWw7IHRoaXMgY2F1c2VkIGNyb24gam9icyB0aGF0IHJ1biBpdCB0bworICAgcHJvZHVjZSBjcnVmdHMuCisKKyAqICJnaXQgcGFjay1vYmplY3RzIC0tYWxsLXByb2dyZXNzIiBpcyBhbiBvcHRpb24gdG8gYXNrIHByb2dyZXNzIG91dHB1dAorICAgZnJvbSB3cml0ZS1vYmplY3QgcGhhc2UgX2lmXyBwcm9ncmVzcyBvdXRwdXQgd2VyZSB0byBiZSBwcm9kdWNlZCwgYW5kCisgICBzaG91bGRuJ3QgaGF2ZSBmb3JjZWQgdGhlIHByb2dyZXNzIG91dHB1dC4KKworICogImdpdCBhcHBseSAtcDxuPiAtLWRpcmVjdG9yeT08ZWxzZXdoZXJlPiIgZGlkIG5vdCB3b3JrIHdlbGwgZm9yIGEKKyAgIG5vbi1kZWZhdWx0IHZhbHVlIG9mIG4uCisKKyAqICJnaXQgbWVyZ2UgZm9vIEhFQUQiIHdhcyBtaXNwYXJzZWQgYXMgYW4gb2xkLXN0eWxlIGludm9jYXRpb24gb2YgdGhlCisgICBjb21tYW5kIGFuZCBwcm9kdWNlZCBhIGNvbmZ1c2luZyBlcnJvciBtZXNzYWdlLiAgQXMgaXQgZG9lcyBub3Qgc3BlY2lmeQorICAgYW55IG90aGVyIGJyYW5jaCB0byBtZXJnZSwgaXQgc2hvdWxkbid0IGJlIG1pc3Rha2VuIGFzIHN1Y2guICBXZSB3aWxsCisgICByZW1vdmUgdGhlIG9sZCBzdHlsZSAiZ2l0IG1lcmdlIDxtZXNzYWdlPiBIRUFEIDxjb21taXQ+Li4uIiAgc3ludGF4IGluCisgICBmdXR1cmUgdmVyc2lvbnMsIGJ1dCBub3QgaW4gdGhpcyByZWxlYXNlLAorCisgKiAiZ2l0IG1lcmdlIC1tIDxtZXNzYWdlPiA8YnJhbmNoPi4uLiIgYWRkZWQgdGhlIHN0YW5kYXJkIG1lcmdlIG1lc3NhZ2UKKyAgIG9uIGl0cyBvd24gYWZ0ZXIgdXNlci1zdXBwbGllZCBtZXNzYWdlLCB3aGljaCBzaG91bGQgaGF2ZSBvdmVycmlkZWQgdGhlCisgICBzdGFuZGFyZCBvbmUuCisKK090aGVyIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgaW5jbHVkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi41LjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuNS41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2ZjNTdkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuNS41LnR4dApAQCAtMCwwICsxLDQ5IEBACitHaXQgdjEuNi41LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi41LjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIE1hbnVhbCBwYWdlcyBjYW4gYmUgZm9ybWF0dGVkIHdpdGggb2xkZXIgeG1sdG8gYWdhaW4uCisKKyAqIEdSRVBfT1BUSU9OUyBleHBvcnRlZCBmcm9tIHVzZXIncyBlbnZpcm9ubWVudCBjb3VsZCBoYXZlIGJyb2tlbgorICAgb3VyIHNjcmlwdGVkIGNvbW1hbmRzLgorCisgKiBJbiBjb25maWd1cmF0aW9uIGZpbGVzLCBhIGZldyB2YXJpYWJsZXMgdGhhdCBuYW1lIHBhdGhzIGNhbiBiZWdpbiB3aXRoCisgICB+LyBhbmQgfnVzZXJuYW1lLyBhbmQgdGhleSBhcmUgZXhwYW5kZWQgYXMgZXhwZWN0ZWQuICBUaGlzIGlzIG5vdCBhCisgICBidWdmaXggYnV0IDEuNi42IHdpbGwgaGF2ZSB0aGlzIGFuZCB3aXRob3V0IGJhY2twb3J0aW5nIHVzZXJzIGNhbm5vdAorICAgZWFzaWx5IHVzZSB0aGUgc2FtZSB+Ly5naXRjb25maWcgYWNyb3NzIHZlcnNpb25zLgorCisgKiAiZ2l0IGRpZmYgLUIgLU0iIGRpZCB0aGUgc2FtZSBjb21wdXRhdGlvbiB0byBoYXNoIGxpbmVzIG9mIGNvbnRlbnRzCisgICB0d2ljZSwgYW5kIGhlbGQgb250byBtZW1vcnkgYWZ0ZXIgaXQgaGFzIHVzZWQgdGhlIGRhdGEgaW4gaXQKKyAgIHVubmVjZXNzYXJpbHkgYmVmb3JlIGl0IGZyZWVkLgorCisgKiAiZ2l0IGRpZmYgLUIiIGFuZCAiZ2l0IGRpZmYgLS1kaXJzdGF0IiB3YXMgbm90IGNvdW50aW5nIG5ld2x5IGFkZGVkCisgICBjb250ZW50cyBjb3JyZWN0bHkuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIHJldmlzaW9ucy4uLiAtLSBwYXRoIiBpc3N1ZWQgYW4gaW5jb3JyZWN0IGVycm9yCisgICBtZXNzYWdlIHRoYXQgc3VnZ2VzdGVkIHRvIHVzZSAiLS0iIG9uIHRoZSBjb21tYW5kIGxpbmUgd2hlbiBwYXRoCisgICBkb2VzIG5vdCBleGlzdCBpbiB0aGUgY3VycmVudCB3b3JrIHRyZWUgKGl0IGlzIGEgc2VwYXJhdGUgbWF0dGVyIGlmCisgICBpdCBtYWtlcyBzZW5zZSB0byBsaW1pdCBmb3JtYXQtcGF0Y2ggd2l0aCBwYXRoc3BlY3MgbGlrZSB0aGF0CisgICB3aXRob3V0IHVzaW5nIHRoZSAtLWZ1bGwtZGlmZiBvcHRpb24pLgorCisgKiAiZ2l0IGdyZXAgLUYgLWkgU3RSaU5nIiBkaWQgbm90IHdvcmsgYXMgZXhwZWN0ZWQuCisKKyAqIEVudW1lcmF0aW9uIG9mIGF2YWlsYWJsZSBtZXJnZSBzdHJhdGVnaWVzIGl0ZXJhdGVkIG92ZXIgdGhlIGxpc3Qgb2YKKyAgIGNvbW1hbmRzIGluIGEgd3Jvbmcgd2F5LCBzb21ldGltZXMgcHJvZHVjaW5nIGFuIGluY29ycmVjdCByZXN1bHQuCisKKyAqICJnaXQgc2hvcnRsb2ciIGRpZCBub3QgaG9ub3IgdGhlICJlbmNvZGluZyIgaGVhZGVyIGVtYmVkZGVkIGluIHRoZQorICAgY29tbWl0IG9iamVjdCBsaWtlICJnaXQgbG9nIiBkaWQuCisKKyAqIFJlYWRpbmcgcHJvZ3Jlc3MgbWVzc2FnZXMgdGhhdCBjb21lIGZyb20gdGhlIHJlbW90ZSBzaWRlIHdoaWxlIHJ1bm5pbmcKKyAgICJnaXQgcHVsbCIgaXMgZ2l2ZW4gcHJlY2VkZW5jZSBvdmVyIHJlYWRpbmcgdGhlIGFjdHVhbCBwYWNrIGRhdGEgdG8KKyAgIHByZXZlbnQgZ2FyYmxlZCBwcm9ncmVzcyBtZXNzYWdlIG9uIHRoZSB1c2VyJ3MgdGVybWluYWwuCisKKyAqICJnaXQgcmViYXNlIiBnb3QgY29uZnVzZWQgd2hlbiB0aGUgbG9nIG1lc3NhZ2UgYmVnYW4gd2l0aCBjZXJ0YWluCisgICBzdHJpbmdzIHRoYXQgbG9va2VkIGxpa2UgU3ViamVjdDosIERhdGU6IG9yIEZyb206IGhlYWRlci4KKworICogImdpdCByZXNldCIgYWNjaWRlbnRhbGx5IHJ1biBpbiAuZ2l0LyBkaXJlY3RvcnkgY2hlY2tlZCBvdXQgdGhlCisgICB3b3JrIHRyZWUgY29udGVudHMgaW4gdGhlcmUuCisKKworT3RoZXIgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjUuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi41LjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZWFmNzYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi41LjYudHh0CkBAIC0wLDAgKzEsMjMgQEAKK0dpdCB2MS42LjUuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjUuNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBhZGQgLXAiIGhhZCBhIHJlZ3Jlc3Npb24gc2luY2UgdjEuNi41LjMgdGhhdCBicm9rZSBkZWxldGlvbiBvZgorICAgbm9uLWVtcHR5IGZpbGVzLgorCisgKiAiZ2l0IGFyY2hpdmUgLW8gby56aXAgLS0gTWFrZWZpbGUiIHByb2R1Y2VkIGFuIGFyY2hpdmUgaW4gby56aXAKKyAgIGJ1dCBpbiBQT1NJWCB0YXIgZm9ybWF0LgorCisgKiBFcnJvciBtZXNzYWdlIGdpdmVuIHRvICJnaXQgcHVsbCAtLXJlYmFzZSIgd2hlbiB0aGUgdXNlciBkaWRuJ3QgZ2l2ZQorICAgZW5vdWdoIGNsdWUgYXMgdG8gd2hhdCBicmFuY2ggdG8gaW50ZWdyYXRlIHdpdGggc3RpbGwgdGFsa2VkIGFib3V0CisgICAibWVyZ2luZyB3aXRoIiB0aGUgYnJhbmNoLgorCisgKiBFcnJvciBtZXNzYWdlcyBnaXZlbiBieSAiZ2l0IG1lcmdlIiB3aGVuIHRoZSBtZXJnZSByZXN1bHRlZCBpbiBhCisgICBmYXN0LWZvcndhcmQgc3RpbGwgd2VyZSBpbiBwbHVtYmluZyBsaW5nbywgZXZlbiB0aG91Z2ggaW4gdjEuNi41CisgICB3ZSByZXdvcmRlZCBtZXNzYWdlcyBpbiBvdGhlciBjYXNlcy4KKworICogVGhlIHBvc3QtdXBsb2FkLWhvb2sgcnVuIGJ5IHVwbG9hZC1wYWNrIGluIHJlc3BvbnNlIHRvICJnaXQgZmV0Y2giIGhhcworICAgYmVlbiByZW1vdmVkLCBkdWUgdG8gc2VjdXJpdHkgY29uY2VybnMgKHRoZSBob29rIGZpcnN0IGFwcGVhcmVkIGluCisgICAxLjYuNSkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi41LjcudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuNS43LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjQ5ZWE1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuNS43LnR4dApAQCAtMCwwICsxLDE5IEBACitHaXQgdjEuNi41LjcgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi41LjYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogSWYgYSB1c2VyIHNwZWNpZmllcyBhIGNvbG9yIGZvciBhIDxzbG90PiAoaS5lLiBhIGNsYXNzIG9mIHRoaW5ncyB0byBzaG93CisgIGluIGEgcGFydGljdWxhciBjb2xvcikgdGhhdCBpcyBrbm93biBvbmx5IGJ5IG5ld2VyIHZlcnNpb25zIG9mIGdpdAorICAoZS5nLiAiY29sb3IuZGlmZi5mdW5jIiB3YXMgcmVjZW50bHkgYWRkZWQgZm9yIHVwY29taW5nIDEuNi42IHJlbGVhc2UpLAorICBhbiBvbGRlciB2ZXJzaW9uIG9mIGdpdCBzaG91bGQganVzdCBpZ25vcmUgdGhlbS4gIEluc3RlYWQgd2UgZGlhZ25vc2VkCisgIGl0IGFzIGFuIGVycm9yLgorCisqIFdpdGggaGVscC5hdXRvY29ycmVjdCBzZXQgdG8gbm9uLXplcm8gdmFsdWUsIHRoZSBsb2dpYyB0byBndWVzcyB0eXBvZXMKKyAgaW4gdGhlIHN1YmNvbW1hbmQgbmFtZSBtaXNmaXJlZCBhbmQgcmFuIGEgcmFuZG9tIG5vbnNlbnNlIGNvbW1hbmQuCisKKyogSWYgYSBjb21tYW5kIGlzIHJ1biB3aXRoIGFuIGFic29sdXRlIHBhdGggYXMgYSBwYXRoc3BlYyBpbnNpZGUgYSBiYXJlCisgIHJlcG9zaXRvcnksIGUuZy4gInJldi1saXN0IEhFQUQgLS0gL2hvbWUiLCB0aGUgY29kZSB0cmllZCB0byBydW4KKyAgc3RybGVuKCkgb24gTlVMTCwgd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiBnZXRfZ2l0X3dvcmtfdHJlZSgpLCBhbmQKKyAgc2VnZmF1bHRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjUuOC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi41LjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMjRiZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi41LjgudHh0CkBAIC0wLDAgKzEsMjggQEAKK0dpdCB2MS42LjUuOCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjUuNworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiAiZ2l0IGNvdW50LW9iamVjdHMiIGRpZCBub3QgaGFuZGxlIHBhY2tmaWxlcyB0aGF0IGFyZSBiaWdnZXIgdGhhbiA0RyBvbgorICBwbGF0Zm9ybXMgd2l0aCAzMi1iaXQgb2ZmX3QuCisKKyogImdpdCByZWJhc2UgLWkiIGRpZCBub3QgYWJvcnQgY2xlYW5seSBpZiBpdCBmYWlsZWQgdG8gbGF1bmNoIHRoZSBlZGl0b3IuCisKKyogImdpdCBibGFtZSIgZGlkIG5vdCB3b3JrIHdlbGwgd2hlbiBjb21taXQgbGFja2VkIHRoZSBhdXRob3IgbmFtZS4KKworKiAiZ2l0IGZhc3QtaW1wb3J0IiBjaG9rZWQgd2hlbiBoYW5kbGluZyBhIHRhZyB0aGF0IHBvaW50cyBhdCBhbiBvYmplY3QKKyAgdGhhdCBpcyBub3QgYSBjb21taXQuCisKKyogImdpdCByZXNldCAtLWhhcmQiIGRpZCBub3Qgd29yayBjb3JyZWN0bHkgd2hlbiBHSVRfV09SS19UUkVFIGVudmlyb25tZW50CisgIHZhcmlhYmxlIGlzIHVzZWQgdG8gcG9pbnQgYXQgdGhlIHJvb3Qgb2YgdGhlIHRydWUgd29yayB0cmVlLgorCisqICJnaXQgZ3JlcCIgZmVkIGEgYnVmZmVyIHRoYXQgaXMgbm90IE5VTC10ZXJtaW5hdGVkIHRvIHVuZGVybHlpbmcKKyAgcmVnZXhlYygpLgorCisqICJnaXQgY2hlY2tvdXQgLW0gb3RoZXIiIHdoaWxlIG9uIGEgYnJhbmNoIHRoYXQgZG9lcyBub3QgaGF2ZSBhbnkgY29tbWl0CisgIHNlZ2ZhdWx0ZWQsIGluc3RlYWQgb2YgZmFpbGluZy4KKworKiAiZ2l0IGJyYW5jaCAtYSBvdGhlciIgc2hvdWxkIGhhdmUgZGlhZ25vc2VkIHRoZSBjb21tYW5kIGFzIGFuIGVycm9yLgorCitPdGhlciBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGFsc28gaW5jbHVkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMTQxYzEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi41LnR4dApAQCAtMCwwICsxLDE2OSBAQAorR0lUIHYxLjYuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworSW4gZ2l0IDEuNy4wLCB3aGljaCB3YXMgcGxhbm5lZCB0byBiZSB0aGUgcmVsZWFzZSBhZnRlciAxLjYuNSwgImdpdAorcHVzaCIgaW50byBhIGJyYW5jaCB0aGF0IGlzIGN1cnJlbnRseSBjaGVja2VkIG91dCB3aWxsIGJlIHJlZnVzZWQgYnkKK2RlZmF1bHQuCisKK1lvdSBjYW4gY2hvb3NlIHdoYXQgc2hvdWxkIGhhcHBlbiB1cG9uIHN1Y2ggYSBwdXNoIGJ5IHNldHRpbmcgdGhlCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggaW4gdGhlIHJlY2VpdmluZworcmVwb3NpdG9yeS4KKworQWxzbywgImdpdCBwdXNoICR0aGVyZSA6JGtpbGxlZCIgdG8gZGVsZXRlIHRoZSBicmFuY2ggJGtpbGxlZCBpbiBhIHJlbW90ZQorcmVwb3NpdG9yeSAkdGhlcmUsIHdoZW4gJGtpbGxlZCBicmFuY2ggaXMgdGhlIGN1cnJlbnQgYnJhbmNoIHBvaW50ZWQgYXQgYnkKK2l0cyBIRUFELCB3aWxsIGJlIHJlZnVzZWQgYnkgZGVmYXVsdC4KKworWW91IGNhbiBjaG9vc2Ugd2hhdCBzaG91bGQgaGFwcGVuIHVwb24gc3VjaCBhIHB1c2ggYnkgc2V0dGluZyB0aGUKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgcmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCBpbiB0aGUgcmVjZWl2aW5nCityZXBvc2l0b3J5LgorCitUbyBlYXNlIHRoZSB0cmFuc2l0aW9uIHBsYW4sIHRoZSByZWNlaXZpbmcgcmVwb3NpdG9yeSBvZiBzdWNoIGEKK3B1c2ggcnVubmluZyB0aGlzIHJlbGVhc2Ugd2lsbCBpc3N1ZSBhIGJpZyB3YXJuaW5nIHdoZW4gdGhlCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIG1pc3NpbmcuICBQbGVhc2UgcmVmZXIgdG86CisKKyAgaHR0cDovL2dpdC5vci5jei9naXR3aWtpL0dpdEZhcSNub24tYmFyZQorICBodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5jb21wLnZlcnNpb24tY29udHJvbC5naXQvMTA3NzU4L2ZvY3VzPTEwODAwNworCitmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSByZWFzb24gd2h5IHRoaXMgY2hhbmdlIGlzIG5lZWRlZCBhbmQgdGhlCit0cmFuc2l0aW9uIHBsYW4uCisKK1VwZGF0ZXMgc2luY2UgdjEuNi40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoc3Vic3lzdGVtcykKKworICogdmFyaW91cyB1cGRhdGVzIHRvIGdpdGssIGdpdC1zdm4gYW5kIGdpdHdlYi4KKworKHBvcnRhYmlsaXR5KQorCisgKiBtb3JlIGltcHJvdmVtZW50cyBvbiBtaW5ndyBwb3J0LgorCisgKiBtaW5ndyB3aWxsIGFsc28gZ2l2ZSBGUlNYIGFzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgTEVTUworICAgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hlbiB0aGUgdXNlciBkb2VzIG5vdCBoYXZlIG9uZS4KKworICogaW5pdGlhbCBzdXBwb3J0IHRvIGNvbXBpbGUgZ2l0IG9uIFdpbmRvd3Mgd2l0aCBNU1ZDLgorCisocGVyZm9ybWFuY2UpCisKKyAqIE9uIG1ham9yIHBsYXRmb3JtcywgdGhlIHN5c3RlbSBjYW4gYmUgY29tcGlsZWQgdG8gdXNlIHdpdGggTGludXMncworICAgYmxvY2stc2hhMSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU0hBLTEgaGFzaCBhbGdvcml0aG0sIHdoaWNoCisgICBvdXRwZXJmb3JtcyB0aGUgZGVmYXVsdCBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbiB3ZSBib3Jyb3dlZCBmcm9tCisgICBNb3ppbGxhLgorCisgKiBVbm5lY2Vzc2FyeSBpbmVmZmljaWVuY3kgaW4gZGVlcGVuaW5nIG9mIGEgc2hhbGxvdyByZXBvc2l0b3J5IGhhcworICAgYmVlbiByZW1vdmVkLgorCisgKiAiZ2l0IGNsb25lIiBkb2VzIG5vdCBncmFiIG9iamVjdHMgdGhhdCBpdCBkb2VzIG5vdCBuZWVkIChpLmUuCisgICByZWZlcmVuY2VkIG9ubHkgZnJvbSByZWZzIG91dHNpZGUgcmVmcy9oZWFkcyBhbmQgcmVmcy90YWdzCisgICBoaWVyYXJjaHkpIGFueW1vcmUuCisKKyAqIFRoZSAiZ2l0IiBtYWluIGJpbmFyeSB1c2VkIHRvIGxpbmsgd2l0aCBsaWJjdXJsLCB3aGljaCB0aGVuIGRyYWdnZWQKKyAgIGluIGEgbGFyZ2UgbnVtYmVyIG9mIGV4dGVybmFsIGxpYnJhcmllcy4gIFdoZW4gdXNpbmcgYmFzaWMgcGx1bWJpbmcKKyAgIGNvbW1hbmRzIGluIHNjcmlwdHMsIHRoaXMgdW5uZWNlc3NhcmlseSBzbG93ZWQgdGhpbmdzIGRvd24uICBXZSBub3cKKyAgIGltcGxlbWVudCBodHRwL2h0dHBzL2Z0cCB0cmFuc2ZlciBhcyBhIHNlcGFyYXRlIGV4ZWN1dGFibGUgYXMgd2UKKyAgIHVzZWQgdG8uCisKKyAqICJnaXQgY2xvbmUiIHJ1biBsb2NhbGx5IGhhcmRsaW5rcyBvciBjb3BpZXMgdGhlIGZpbGVzIGluIC5naXQvIHRvCisgICBuZXdseSBjcmVhdGVkIHJlcG9zaXRvcnkuICBJdCB1c2VkIHRvIGdpdmUgbmV3IG10aW1lIHRvIGNvcGllZCBmaWxlcywKKyAgIGJ1dCB0aGlzIGRlbGF5ZWQgZ2FyYmFnZSBjb2xsZWN0aW9uIHRvIHRyaWdnZXIgdW5uZWNlc3NhcmlseSBpbiB0aGUKKyAgIGNsb25lZCByZXBvc2l0b3J5LiAgV2Ugbm93IHByZXNlcnZlIG10aW1lIGZvciB0aGVzZSBmaWxlcyB0byBhdm9pZAorICAgdGhpcyBpc3N1ZS4KKworKHVzYWJpbGl0eSwgYmVsbHMgYW5kIHdoaXN0bGVzKQorCisgKiBIdW1hbiB3cml0YWJsZSBkYXRlIGZvcm1hdCB0byB2YXJpb3VzIG9wdGlvbnMsIGUuZy4gLS1zaW5jZT15ZXN0ZXJkYXksCisgICBtYXN0ZXJAezIwMDAuMDkuMTd9LCBhcmUgdGF1Z2h0IHRvIGluZmVyIHNvbWUgb21pdHRlZCBpbnB1dCBwcm9wZXJseS4KKworICogQSBmZXcgcHJvZ3JhbXMgZ2F2ZSB2ZXJib3NlICJhZHZpY2UiIG1lc3NhZ2VzIHRvIGhlbHAgdW5pbml0aWF0ZWQKKyAgIHBlb3BsZSB3aGVuIGlzc3VpbmcgZXJyb3IgbWVzc2FnZXMuICBBbiBpbmZyYXN0cnVjdHVyZSB0byBhbGxvdworICAgdXNlcnMgdG8gc3F1ZWxjaCB0aGVtIGhhcyBiZWVuIGludHJvZHVjZWQsIGFuZCBhIGZldyBzdWNoIG1lc3NhZ2VzCisgICBjYW4gYmUgc2lsZW5jZWQgbm93LgorCisgKiByZWZzL3JlcGxhY2UvIGhpZXJhcmNoeSBpcyBkZXNpZ25lZCB0byBiZSB1c2FibGUgYXMgYSByZXBsYWNlbWVudAorICAgb2YgdGhlICJncmFmdHMiIG1lY2hhbmlzbSwgd2l0aCB0aGUgYWRkZWQgYWR2YW50YWdlIHRoYXQgaXQgY2FuIGJlCisgICB0cmFuc2ZlcnJlZCBhY3Jvc3MgcmVwb3NpdG9yaWVzLgorCisgKiAiZ2l0IGFtIiBsZWFybmVkIHRvIG9wdGlvbmFsbHkgaWdub3JlIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMuCisKKyAqICJnaXQgYW0iIGhhbmRsZXMgaW5wdXQgZS1tYWlsIGZpbGVzIHRoYXQgaGFzIENSTEYgbGluZSBlbmRpbmdzIHNlbnNpYmx5LgorCisgKiAiZ2l0IGFtIiBsZWFybmVkICItLXNjaXNzb3JzIiBvcHRpb24gdG8gYWxsb3cgeW91IHRvIGRpc2NhcmQgZWFybHkgcGFydAorICAgb2YgYW4gaW5jb21pbmcgZS1tYWlsLgorCisgKiAiZ2l0IGFyY2hpdmUgLW8gb3V0cHV0LnppcCIgd29ya3Mgd2l0aG91dCBiZWluZyB0b2xkIHdoYXQgZm9ybWF0IHRvCisgICB1c2Ugd2l0aCBhbiBleHBsaWNpdCAiLS1mb3JtYXQ9emlwIi5vcHRpb24uCisKKyAqICJnaXQgY2hlY2tvdXQiLCAiZ2l0IHJlc2V0IiBhbmQgImdpdCBzdGFzaCIgbGVhcm5lZCB0byBwaWNrIGFuZAorICAgY2hvb3NlIHRvIHVzZSBzZWxlY3RlZCBjaGFuZ2VzIHlvdSBtYWRlLCBzaW1pbGFyIHRvICJnaXQgYWRkIC1wIi4KKworICogImdpdCBjbG9uZSIgbGVhcm5lZCBhICItYiIgb3B0aW9uIHRvIHBpY2sgYSBIRUFEIHRvIGNoZWNrIG91dAorICAgZGlmZmVyZW50IGZyb20gdGhlIHJlbW90ZSdzIGRlZmF1bHQgYnJhbmNoLgorCisgKiAiZ2l0IGNsb25lIiBsZWFybmVkIC0tcmVjdXJzaXZlIG9wdGlvbi4KKworICogImdpdCBjbG9uZSIgZnJvbSBhIGxvY2FsIHJlcG9zaXRvcnkgb24gYSBkaWZmZXJlbnQgZmlsZXN5c3RlbSB1c2VkIHRvCisgICBjb3B5IGluZGl2aWR1YWwgb2JqZWN0IGZpbGVzIHdpdGhvdXQgcHJlc2VydmluZyB0aGUgb2xkIHRpbWVzdGFtcCwgZ2l2aW5nCisgICB0aGVtIGV4dHJhIGxpZmV0aW1lIGluIHRoZSBuZXcgcmVwb3NpdG9yeSB1bnRpbCB0aGV5IGdjJ2VkLgorCisgKiAiZ2l0IGNvbW1pdCAtLWRyeS1ydW4gJGFyZ3MiIGlzIGEgbmV3IHJlY29tbWVuZGVkIHdheSB0byBhc2sgIndoYXQgd291bGQKKyAgIGhhcHBlbiBpZiBJIHRyeSB0byBjb21taXQgd2l0aCB0aGVzZSBhcmd1bWVudHMuIgorCisgKiAiZ2l0IGNvbW1pdCAtLWRyeS1ydW4iIGFuZCAiZ2l0IHN0YXR1cyIgc2hvd3MgY29uZmxpY3RlZCBwYXRocyBpbiBhCisgICBzZXBhcmF0ZSBzZWN0aW9uIHRvIG1ha2UgdGhlbSBlYXNpZXIgdG8gc3BvdCBkdXJpbmcgYSBtZXJnZS4KKworICogImdpdCBjdnNpbXBvcnQiIG5vdyBzdXBwb3J0cyBwYXNzd29yZC1wcm90ZWN0ZWQgcHNlcnZlciBhY2Nlc3MgZXZlbgorICAgd2hlbiB0aGUgcGFzc3dvcmQgaXMgbm90IHRha2VuIGZyb20gfi8uY3ZzcGFzcyBmaWxlLgorCisgKiAiZ2l0IGZhc3QtZXhwb3J0IiBsZWFybmVkIC0tbm8tZGF0YSBvcHRpb24gdGhhdCBjYW4gYmUgdXNlZnVsIHdoZW4KKyAgIHJlb3JkZXJpbmcgY29tbWl0cyBhbmQgdHJlZXMgd2l0aG91dCB0b3VjaGluZyB0aGUgY29udGVudHMgb2YKKyAgIGJsb2JzLgorCisgKiAiZ2l0IGZhc3QtaW1wb3J0IiBoYXMgYSBwYWlyIG9mIG5ldyBmcm9udC1lbmQgaW4gY29udHJpYi8gYXJlYS4KKworICogImdpdCBpbml0IiBsZWFybmVkIHRvIG1rZGlyL2NoZGlyIGludG8gYSBkaXJlY3Rvcnkgd2hlbiBnaXZlbiBhbgorICAgZXh0cmEgYXJndW1lbnQgKGkuZS4gImdpdCBpbml0IHRoaXMiKS4KKworICogImdpdCBpbnN0YXdlYiIgb3B0aW9uYWxseSBjYW4gdXNlIG1vbmdvb3NlIGFzIHRoZSB3ZWIgc2VydmVyLgorCisgKiAiZ2l0IGxvZyAtLWRlY29yYXRlIiBjYW4gb3B0aW9uYWxseSBiZSB0b2xkIHdpdGggLS1kZWNvcmF0ZT1mdWxsIHRvCisgICBnaXZlIHRoZSByZWZlcmVuY2UgbmFtZSBpbiBmdWxsLgorCisgKiAiZ2l0IG1lcmdlIiBpc3N1ZWQgYW4gdW5uZWNlc3NhcmlseSBzY2FyeSBtZXNzYWdlIHdoZW4gaXQgZGV0ZWN0ZWQKKyAgIHRoYXQgdGhlIG1lcmdlIG1heSBoYXZlIHRvIHRvdWNoIHRoZSBwYXRoIHRoYXQgdGhlIHVzZXIgaGFzIGxvY2FsCisgICB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvLiBUaGUgbWVzc2FnZSBoYXMgYmVlbiByZXdvcmRlZCB0byBtYWtlIGl0CisgICBjbGVhciB0aGF0IHRoZSBjb21tYW5kIGFib3J0ZWQsIHdpdGhvdXQgZG9pbmcgYW55IGhhcm0uCisKKyAqICJnaXQgcHVzaCIgY2FuIGJlIHRvbGQgdG8gYmUgLS1xdWlldC4KKworICogImdpdCBwdXNoIiBwYXlzIGF0dGVudGlvbiB0byB1cmwuJGJhc2UucHVzaEluc3RlYWRPZiBhbmQgdXNlcyBhIFVSTAorICAgdGhhdCBpcyBkZXJpdmVkIGZyb20gdGhlIFVSTCB1c2VkIGZvciBmZXRjaGluZy4KKworICogaW5mb3JtYXRpb25hbCBvdXRwdXQgZnJvbSAiZ2l0IHJlc2V0IiB0aGF0IGxpc3RzIHRoZSBsb2NhbGx5IG1vZGlmaWVkCisgICBwYXRocyBpcyBtYWRlIGNvbnNpc3RlbnQgd2l0aCB0aGF0IG9mICJnaXQgY2hlY2tvdXQgJGFub3RoZXJfYnJhbmNoIi4KKworICogImdpdCBzdWJtb2R1bGUiIGxlYXJuZWQgdG8gZ2l2ZSBzdWJtb2R1bGUgbmFtZSB0byBzY3JpcHRzIHJ1biB3aXRoCisgICAiZm9yZWFjaCIgc3ViY29tbWFuZC4KKworICogdmFyaW91cyBzdWJjb21tYW5kcyB0byAiZ2l0IHN1Ym1vZHVsZSIgbGVhcm5lZCAtLXJlY3Vyc2l2ZSBvcHRpb24uCisKKyAqICJnaXQgc3VibW9kdWxlIHN1bW1hcnkiIGxlYXJuZWQgLS1maWxlcyBvcHRpb24gdG8gY29tcGFyZSB0aGUgd29yaworICAgdHJlZSB2cyB0aGUgY29tbWl0IGJvdW5kIGF0IHN1Ym1vZHVsZSBwYXRoLCBpbnN0ZWFkIG9mIGNvbXBhcmluZworICAgdGhlIGluZGV4LgorCisgKiAiZ2l0IHVwbG9hZC1wYWNrIiwgd2hpY2ggaXMgdGhlIHNlcnZlciBzaWRlIHN1cHBvcnQgZm9yICJnaXQgY2xvbmUiIGFuZAorICAgImdpdCBmZXRjaCIsIGNhbiBjYWxsIGEgbmV3IHBvc3QtdXBsb2FkLXBhY2sgaG9vayBmb3Igc3RhdGlzdGljcyBwdXJwb3Nlcy4KKworKGRldmVsb3BlcnMpCisKKyAqIFdpdGggR0lUX1RFU1RfT1BUUz0iLS1yb290PS9wL2EvdC9oIiwgdGVzdHMgY2FuIGJlIHJ1biBvdXRzaWRlIHRoZQorICAgc291cmNlIGRpcmVjdG9yeTsgdXNpbmcgdG1wZnMgbWF5IGdpdmUgZmFzdGVyIHR1cm5hcm91bmQuCisKKyAqIFdpdGggTk9fUEVSTF9NQUtFTUFLRVIgc2V0LCBERVNURElSPSBpcyBub3cgaG9ub3VyZWQsIHNvIHlvdSBjYW4KKyAgIGJ1aWxkIGZvciBvbmUgbG9jYXRpb24sIGFuZCBpbnN0YWxsIGludG8gYW5vdGhlciBsb2NhdGlvbiB0byB0YXIgaXQKKyAgIHVwLgorCitGaXhlcyBzaW5jZSB2MS42LjQKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgb2YgdGhlIGZpeGVzIGluIHYxLjYuNC5YIG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4gdGhpcworcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjYuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi42LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZDBhNGEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi42LjEudHh0CkBAIC0wLDAgKzEsMzcgQEAKK0dpdCB2MS42LjYuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjYKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGJsYW1lIiBkaWQgbm90IHdvcmsgd2VsbCB3aGVuIGNvbW1pdCBsYWNrZWQgdGhlIGF1dGhvciBuYW1lLgorCisgKiAiZ2l0IGJyYW5jaCAtYSBuYW1lIiB3YXNuJ3QgZGlhZ25vc2VkIGFzIGFuIGVycm9yLgorCisgKiAiZ2l0IGNvdW50LW9iamVjdHMiIGRpZCBub3QgaGFuZGxlIHBhY2tmaWxlcyB0aGF0IGFyZSBiaWdnZXIgdGhhbiA0RyBvbgorICAgcGxhdGZvcm1zIHdpdGggMzItYml0IG9mZl90LgorCisgKiAiZ2l0IGNoZWNrb3V0IC1tIG90aGVyIiB3aGlsZSBvbiBhIGJyYW5jaCB0aGF0IGRvZXMgbm90IGhhdmUgYW55IGNvbW1pdAorICAgc2VnZmF1bHRlZCwgaW5zdGVhZCBvZiBmYWlsaW5nLgorCisgKiAiZ2l0IGZhc3QtaW1wb3J0IiBjaG9rZWQgd2hlbiBmZWQgYSB0YWcgdGhhdCBkbyBub3QgcG9pbnQgYXQgYQorICAgY29tbWl0LgorCisgKiAiZ2l0IGdyZXAiIGZpbmRpbmcgZnJvbSB3b3JrIHRyZWUgZmlsZXMgY291bGQgaGF2ZSBmZWQgZ2FyYmFnZSB0bworICAgdGhlIHVuZGVybHlpbmcgcmVnZXhlYygzKS4KKworICogImdpdCBncmVwIC1MIiBkaWRuJ3Qgc2hvdyBlbXB0eSBmaWxlcyAodGhleSBzaG91bGQgbmV2ZXIgbWF0Y2gsIGFuZAorICAgdGhleSBzaG91bGQgYWx3YXlzIGFwcGVhciBpbiAtTCBvdXRwdXQgYXMgdW5tYXRjaGluZykuCisKKyAqICJnaXQgcmViYXNlIC1pIiBkaWQgbm90IGFib3J0IGNsZWFubHkgaWYgaXQgZmFpbGVkIHRvIGxhdW5jaCB0aGUgZWRpdG9yLgorCisgKiAiZ2l0IHJlc2V0IC0taGFyZCIgZGlkIG5vdCB3b3JrIGNvcnJlY3RseSB3aGVuIEdJVF9XT1JLX1RSRUUgZW52aXJvbm1lbnQKKyAgIHZhcmlhYmxlIGlzIHVzZWQgdG8gcG9pbnQgYXQgdGhlIHJvb3Qgb2YgdGhlIHRydWUgd29yayB0cmVlLgorCisgKiBodHRwLWJhY2tlbmQgd2FzIG5vdCBsaXN0ZWQgaW4gdGhlIGNvbW1hbmQgbGlzdCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworICogQnVpbGRpbmcgb24gRnJlZUJTRCAoYm90aCA3IGFuZCA4KSBuZWVkcyBPTERfSUNPTlYgc2V0IGluIHRoZSBNYWtlZmlsZQorCisgKiAiZ2l0IGNoZWNrb3V0IC1tIHNvbWUtYnJhbmNoIiB3aGlsZSBvbiBhbiB1bmJvcm4gYnJhbmNoIGNyYXNoZWQuCisKK090aGVyIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgaW5jbHVkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi42LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuNi4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWFkZGMwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuNi4yLnR4dApAQCAtMCwwICsxLDQ2IEBACitHaXQgdjEuNi42LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi42LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIHJlY3Vyc2l2ZSBtZXJnZSBkaWRuJ3QgY29ycmVjdGx5IGRpYWdub3NlIGl0cyBvd24gcHJvZ3JhbW1pbmcgZXJyb3JzLAorICAgYW5kIGluc3RlYWQgY2F1c2VkIHRoZSBjYWxsZXIgdG8gc2VnZmF1bHQuCisKKyAqIFRoZSBuZXcgInNtYXJ0IGh0dHAiIGF3YXJlIGNsaWVudHMgcHJvYmVkIHRoZSB3ZWIgc2VydmVycyB0byBzZWUgaWYKKyAgIHRoZXkgc3VwcG9ydCBzbWFydCBodHRwLCBidXQgZGlkIG5vdCBmYWxsIGJhY2sgdG8gZHVtYiBodHRwIHRyYW5zcG9ydAorICAgY29ycmVjdGx5IHdpdGggc29tZSBzZXJ2ZXJzLgorCisgKiBUaW1lIGJhc2VkIHJlZmxvZyBzeW50YXggZS5nLiAiQHt5ZXN0ZXJkYXl9IiBkaWRuJ3QgZGlhZ25vc2UgYSBtaXNzcGVsbGVkCisgICB0aW1lIHNwZWNpZmljYXRpb24gYW5kIGluc3RlYWQgYXNzdW1lZCAiQHtub3d9Ii4KKworICogImdpdCBhcmNoaXZlIEhFQUQgLS0gbm8tc3VjaC1kaXJlY3RvcnkiIHByb2R1Y2VkIGFuIGVtcHR5IGFyY2hpdmUKKyAgIHdpdGhvdXQgY29tcGxhaW5pbmcuCisKKyAqICJnaXQgYmxhbWUgLUwgc3RhcnQsZW5kIC0tIGZpbGUiIG1pc2JlaGF2ZWQgd2hlbiBnaXZlbiBhIHN0YXJ0IHRoYXQgaXMKKyAgIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIGZpbGUuCisKKyAqICJnaXQgY2hlY2tvdXQgLW0iIGRpZG4ndCBjb3JyZWN0bHkgY2FsbCBjdXN0b20gbWVyZ2UgYmFja2VuZCBzdXBwbGllZAorICAgYnkgdGhlIGVuZCB1c2VyLgorCisgKiAiZ2l0IGNvbmZpZyAtZiA8ZmlsZT4iIG1pc2JlaGF2ZWQgd2hlbiBydW4gZnJvbSBhIHN1YmRpcmVjdG9yeS4KKworICogImdpdCBjdnNzZXJ2ZXIiIGRpZG4ndCBsaWtlIGhhdmluZyByZWdleCBtZXRhY2hhcmFjdGVycyAoZS5nLiAnKycpIGluCisgICBDVlNST09UIGVudmlyb25tZW50LgorCisgKiAiZ2l0IGZhc3QtaW1wb3J0IiBkaWQgbm90IGNvcnJlY3RseSBoYW5kbGUgbGFyZ2UgYmxvYnMgdGhhdCBtYXkKKyAgIGJ1c3QgdGhlIHBhY2sgc2l6ZSBsaW1pdC4KKworICogImdpdCBndWkiIGlzIHN1cHBvc2VkIHRvIHdvcmsgZXZlbiB3aGVuIGxhdW5jaGVkIGZyb20gaW5zaWRlIGEgLmdpdAorICAgZGlyZWN0b3J5LgorCisgKiAiZ2l0IGd1aSIgbWlzYmVoYXZlZCB3aGVuIGFwcGx5aW5nIGEgaHVuayB0aGF0IGVuZHMgd2l0aCBkZWxldGlvbi4KKworICogImdpdCBpbWFwLXNlbmQiIGRpZCBub3QgaG9ub3IgaW1hcC5wcmVmb3JtYXR0ZWRIVE1MIGFzIGRvY3VtZW50ZWQuCisKKyAqICJnaXQgbG9nIiBmYW1pbHkgaW5jb3JyZWN0bHkgc2hvd2VkIHRoZSBjb21taXQgbm90ZXMgdW5jb25kaXRpb25hbGx5IGJ5CisgICBtaXN0YWtlLCB3aGljaCB3YXMgZXNwZWNpYWxseSBpcnJpdGF0aW5nIHdoZW4gcnVubmluZyAiZ2l0IGxvZyAtLW9uZWxpbmUiLgorCisgKiAiZ2l0IHN0YXR1cyIgc2hvdWxkbid0IHJlcXVpcmUgYW4gd3JpdGUgYWNjZXNzIHRvIHRoZSByZXBvc2l0b3J5LgorCitPdGhlciBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGUyMDVjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuNi50eHQKQEAgLTAsMCArMSwyMjQgQEAKK0dpdCB2MS42LjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK05vdGVzIG9uIGJlaGF2aW91ciBjaGFuZ2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogSW4gdGhpcyByZWxlYXNlLCAiZ2l0IGZzY2siIGRlZmF1bHRzIHRvICJnaXQgZnNjayAtLWZ1bGwiIGFuZAorICAgY2hlY2tzIHBhY2tmaWxlcywgYW5kIGJlY2F1c2Ugb2YgdGhpcyBpdCB3aWxsIHRha2UgbXVjaCBsb25nZXIgdG8KKyAgIGNvbXBsZXRlIHRoYW4gYmVmb3JlLiAgSWYgeW91IHByZWZlciBhIHF1aWNrZXIgY2hlY2sgb25seSBvbiBsb29zZQorICAgb2JqZWN0cyAodGhlIG9sZCBkZWZhdWx0KSwgeW91IGNhbiBzYXkgImdpdCBmc2NrIC0tbm8tZnVsbCIuICBUaGlzCisgICBoYXMgYmVlbiBzdXBwb3J0ZWQgYnkgMS41LjQgYW5kIG5ld2VyIHZlcnNpb25zIG9mIGdpdCwgc28gaXQgaXMKKyAgIHNhZmUgdG8gd3JpdGUgaXQgaW4geW91ciBzY3JpcHQgZXZlbiBpZiB5b3UgdXNlIHNsaWdodGx5IG9sZGVyIGdpdAorICAgb24gc29tZSBvZiB5b3VyIG1hY2hpbmVzLgorCitQcmVwYXJpbmcgeW91cnNlbHZlcyBmb3IgY29tcGF0aWJpbGl0eSBpc3N1ZXMgaW4gMS43LjAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBnaXQgMS43LjAsIHdoaWNoIGlzIHBsYW5uZWQgdG8gYmUgdGhlIHJlbGVhc2UgYWZ0ZXIgMS42LjYsIHRoZXJlIHdpbGwKK2JlIGEgaGFuZGZ1bCBvZiBiZWhhdmlvdXIgY2hhbmdlcyB0aGF0IHdpbGwgYnJlYWsgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKworVGhlc2UgY2hhbmdlcyB3ZXJlIGRpc2N1c3NlZCBsb25nIHRpbWUgYWdvIGFuZCBleGlzdGluZyBiZWhhdmlvdXJzIGhhdmUKK2JlZW4gaWRlbnRpZmllZCBhcyBtb3JlIHByb2JsZW1hdGljIHRvIHRoZSB1c2VyYmFzZSB0aGFuIGtlZXBpbmcgdGhlbSBmb3IKK3RoZSBzYWtlIG9mIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisKK1doZW4gbmVjZXNzYXJ5LCBhIHRyYW5zaXRpb24gc3RyYXRlZ3kgZm9yIGV4aXN0aW5nIHVzZXJzIGhhcyBiZWVuIGRlc2lnbmVkCitub3QgdG8gZm9yY2UgdGhlbSBydW5uaW5nIGFyb3VuZCBzZXR0aW5nIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGFuZAordXBkYXRpbmcgdGhlaXIgc2NyaXB0cyBpbiBvcmRlciB0byBlaXRoZXIga2VlcCB0aGUgdHJhZGl0aW9uYWwgYmVoYXZpb3VyCitvciBhZGp1c3QgdG8gdGhlIG5ldyBiZWhhdmlvdXIsIG9uIHRoZSBkYXkgdGhlaXIgc3lzYWRtaW4gZGVjaWRlcyB0byBpbnN0YWxsCit0aGUgbmV3IHZlcnNpb24gb2YgZ2l0LiAgV2hlbiB3ZSBzd2l0Y2hlZCBmcm9tICJnaXQtZm9vIiB0byAiZ2l0IGZvbyIgaW4KKzEuNi4wLCBldmVuIHRob3VnaCB0aGUgY2hhbmdlIGhhZCBiZWVuIGFkdmVydGlzZWQgYW5kIHRoZSB0cmFuc2l0aW9uCitndWlkZSBoYWQgYmVlbiBwcm92aWRlZCBmb3IgYSB2ZXJ5IGxvbmcgdGltZSwgdGhlIHVzZXJzIHByb2NyYXN0aW5hdGVkCitkdXJpbmcgdGhlIGVudGlyZSB0cmFuc3Rpb24gcGVyaW9kLCBhbmQgZW5kZWQgdXAgcGFuaWNraW5nIG9uIHRoZSBkYXkKK3RoZWlyIHN5c2FkbWlucyB1cGRhdGVkIHRoZWlyIGdpdCBpbnN0YWxsYXRpb24uICBXZSBhcmUgdHJ5aW5nIHRvIGF2b2lkCityZXBlYXRpbmcgdGhhdCB1bnBsZWFzYW50bmVzcyBpbiB0aGUgMS43LjAgcmVsZWFzZS4KKworRm9yIGNoYW5nZXMgZGVjaWRlZCB0byBiZSBpbiAxLjcuMCwgY29tbWFuZHMgdGhhdCB3aWxsIGJlIGFmZmVjdGVkCitoYXZlIGJlZW4gbXVjaCBsb3VkZXIgdG8gc3Ryb25nbHkgZGlzY291cmFnZSBzdWNoIHByb2NyYXN0aW5hdGlvbiwgYW5kCit0aGV5IGNvbnRpbnVlIHRvIGJlIGluIHRoaXMgcmVsZWFzZS4gIElmIHlvdSBoYXZlIGJlZW4gdXNpbmcgcmVjZW50Cit2ZXJzaW9ucyBvZiBnaXQsIHlvdSB3b3VsZCBoYXZlIHNlZW4gd2FybmluZ3MgaXNzdWVkIHdoZW4geW91IHVzZWQKK2ZlYXR1cmVzIHdob3NlIGJlaGF2aW91ciB3aWxsIGNoYW5nZSwgd2l0aCBhIGNsZWFyIGluc3RydWN0aW9uIG9uIGhvdwordG8ga2VlcCB0aGUgZXhpc3RpbmcgYmVoYXZpb3VyIGlmIHlvdSB3YW50IHRvLiAgWW91IGhvcGVmdWxseSBhcmUKK2FscmVhZHkgd2VsbCBwcmVwYXJlZC4KKworT2YgY291cnNlLCB3ZSBoYXZlIGFsc28gYmVlbiBnaXZpbmcgInRoaXMgYW5kIHRoYXQgd2lsbCBjaGFuZ2UgaW4KKzEuNy4wOyBwcmVwYXJlIHlvdXJzZWx2ZXMiIHdhcm5pbmdzIGluIHRoZSByZWxlYXNlIG5vdGVzIGFuZAorYW5ub3VuY2VtZW50IG1lc3NhZ2VzIGZvciB0aGUgcGFzdCBmZXcgcmVsZWFzZXMuICBMZXQncyBzZWUgaG93IHdlbGwKK3VzZXJzIHdpbGwgZmFyZSB0aGlzIHRpbWUuCisKKyAqICJnaXQgcHVzaCIgaW50byBhIGJyYW5jaCB0aGF0IGlzIGN1cnJlbnRseSBjaGVja2VkIG91dCAoaS5lLiBwb2ludGVkIGJ5CisgICBIRUFEIGluIGEgcmVwb3NpdG9yeSB0aGF0IGlzIG5vdCBiYXJlKSB3aWxsIGJlIHJlZnVzZWQgYnkgZGVmYXVsdC4KKworICAgU2ltaWxhcmx5LCAiZ2l0IHB1c2ggJHRoZXJlIDoka2lsbGVkIiB0byBkZWxldGUgdGhlIGJyYW5jaCAka2lsbGVkCisgICBpbiBhIHJlbW90ZSByZXBvc2l0b3J5ICR0aGVyZSwgd2hlbiAka2lsbGVkIGJyYW5jaCBpcyB0aGUgY3VycmVudAorICAgYnJhbmNoIHBvaW50ZWQgYXQgYnkgaXRzIEhFQUQsIHdpbGwgYmUgcmVmdXNlZCBieSBkZWZhdWx0LgorCisgICBTZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIGFuZAorICAgcmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCB0byAnaWdub3JlJyBpbiB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkKKyAgIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZXNlIHNhZmV0eSBmZWF0dXJlcy4gIFZlcnNpb25zIG9mIGdpdAorICAgc2luY2UgMS42LjIgaGF2ZSBpc3N1ZWQgYSBsb3VkIHdhcm5pbmcgd2hlbiB5b3UgdHJpZWQgdG8gZG8gdGhlc2UKKyAgIG9wZXJhdGlvbnMgd2l0aG91dCBzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uLCBzbyByZXBvc2l0b3JpZXMgb2YKKyAgIHBlb3BsZSB3aG8gc3RpbGwgbmVlZCB0byBiZSBhYmxlIHRvIHBlcmZvcm0gc3VjaCBhIHB1c2ggc2hvdWxkCisgICBhbHJlYWR5IGhhdmUgYmVlbiBmdXR1cmUgcHJvb2ZlZC4KKworICAgUGxlYXNlIHJlZmVyIHRvOgorCisgICBodHRwOi8vZ2l0Lm9yLmN6L2dpdHdpa2kvR2l0RmFxI25vbi1iYXJlCisgICBodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5jb21wLnZlcnNpb24tY29udHJvbC5naXQvMTA3NzU4L2ZvY3VzPTEwODAwNworCisgICBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSByZWFzb24gd2h5IHRoaXMgY2hhbmdlIGlzIG5lZWRlZCBhbmQgdGhlCisgICB0cmFuc2l0aW9uIHByb2Nlc3MgdGhhdCBhbHJlYWR5IHRvb2sgcGxhY2Ugc28gZmFyLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIHdpbGwgbm90IG1ha2UgZGVlcCB0aHJlYWRzIGJ5IGRlZmF1bHQgd2hlbiBzZW5kaW5nIGEKKyAgIHBhdGNoIHNlcmllcyB3aXRoIG1vcmUgdGhhbiB0d28gbWVzc2FnZXMuICBBbGwgbWVzc2FnZXMgd2lsbCBiZSBzZW50CisgICBhcyBhIHJlcGx5IHRvIHRoZSBmaXJzdCBtZXNzYWdlLCBpLmUuIGNvdmVyIGxldHRlci4gIEdpdCAxLjYuNiAodGhpcworICAgcmVsZWFzZSkgd2lsbCBpc3N1ZSBhIHdhcm5pbmcgYWJvdXQgdGhlIHVwY29taW5nIGRlZmF1bHQgY2hhbmdlLCB3aGVuCisgICBpdCB1c2VzIHRoZSB0cmFkaXRpb25hbCAiZGVlcCB0aHJlYWRpbmciIGJlaGF2aW91ciBhcyB0aGUgYnVpbHQtaW4KKyAgIGRlZmF1bHQuICBUbyBzcXVlbGNoIHRoZSB3YXJuaW5nIGJ1dCBzdGlsbCB1c2UgdGhlICJkZWVwIHRocmVhZGluZyIKKyAgIGJlaGF2aW91ciwgZ2l2ZSAtLWNoYWluLXJlcGx5LXRvIG9wdGlvbiBvciBzZXQgc2VuZGVtYWlsLmNoYWlucmVwbHl0bworICAgdG8gdHJ1ZS4KKworICAgSXQgaGFzIGJlZW4gcG9zc2libGUgdG8gY29uZmlndXJlIHNlbmQtZW1haWwgdG8gc2VuZCAic2hhbGxvdyB0aHJlYWQiCisgICBieSBzZXR0aW5nIHNlbmRlbWFpbC5jaGFpbnJlcGx5dG8gY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byBmYWxzZS4KKyAgIFRoZSBvbmx5IHRoaW5nIDEuNy4wIHJlbGVhc2Ugd2lsbCBkbyBpcyB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgd2hlbgorICAgeW91IGhhdmVuJ3QgY29uZmlndXJlZCB0aGF0IHZhcmlhYmxlLgorCisgKiAiZ2l0IHN0YXR1cyIgd2lsbCBub3QgYmUgImdpdCBjb21taXQgLS1kcnktcnVuIi4gIFRoaXMgY2hhbmdlIGRvZXMgbm90CisgICBhZmZlY3QgeW91IGlmIHlvdSBydW4gdGhlIGNvbW1hbmQgd2l0aG91dCBwYXRoc3BlYy4KKworICAgTm9ib2R5IHNhbmUgZm91bmQgdGhlIGN1cnJlbnQgYmVoYXZpb3VyIG9mICJnaXQgc3RhdHVzIE1ha2VmaWxlIiB1c2VmdWwKKyAgIG5vciBtZWFuaW5nZnVsLCBhbmQgaXQgY29uZnVzZWQgdXNlcnMuICAiZ2l0IGNvbW1pdCAtLWRyeS1ydW4iIGhhcyBiZWVuCisgICBwcm92aWRlZCBhcyBhIHdheSB0byBnZXQgdGhlIGN1cnJlbnQgYmVoYXZpb3VyIG9mIHRoaXMgY29tbWFuZCBzaW5jZQorICAgMS42LjUuCisKKyAqICJnaXQgZGlmZiIgdHJhZGl0aW9uYWxseSB0cmVhdGVkIHZhcmlvdXMgImlnbm9yZSB3aGl0ZXNwYWNlIiBvcHRpb25zCisgICBvbmx5IGFzIGEgd2F5IHRvIGZpbHRlciB0aGUgcGF0Y2ggb3V0cHV0LiAgImdpdCBkaWZmIC0tZXhpdC1jb2RlIC1iIgorICAgZXhpdGVkIHdpdGggbm9uLXplcm8gc3RhdHVzIGV2ZW4gaWYgYWxsIGNoYW5nZXMgd2VyZSBhYm91dCBjaGFuZ2luZyB0aGUKKyAgIGFtbW91bnQgb2Ygd2hpdGVzcGFjZSBhbmQgbm90aGluZyBlbHNlLiAgYW5kICJnaXQgZGlmZiAtYiIgc2hvd2VkIHRoZQorICAgImRpZmYgLS1naXQiIGhlYWRlciBsaW5lIGZvciBzdWNoIGEgY2hhbmdlIHdpdGhvdXQgcGF0Y2ggdGV4dC4KKworICAgSW4gMS43LjAsIHRoZSAiaWdub3JlIHdoaXRlc3BhY2VzIiB3aWxsIGFmZmVjdCB0aGUgc2VtYW50aWNzIG9mIHRoZQorICAgZGlmZiBvcGVyYXRpb24gaXRzZWxmLiAgQSBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBhZmZlY3QgYW55dGhpbmcgYnV0CisgICB3aGl0ZXNwYWNlcyB3aWxsIGJlIHJlcG9ydGVkIHdpdGggemVybyBleGl0IHN0YXR1cyB3aGVuIHJ1biB3aXRoCisgICAtLWV4aXQtY29kZSwgYW5kIHRoZXJlIHdpbGwgbm90IGJlICJkaWZmIC0tZ2l0IiBoZWFkZXIgZm9yIHN1Y2ggYQorICAgY2hhbmdlLgorCisKK1VwZGF0ZXMgc2luY2UgdjEuNi41CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoc3Vic3lzdGVtcykKKworICogdmFyaW91cyBnaXRrIHVwZGF0ZXMgaW5jbHVkaW5nIHVzZSBvZiB0aGVtZWQgd2lkZ2V0cyB1bmRlciBUayA4LjUsCisgICBKYXBhbmVzZSB0cmFuc2xhdGlvbiwgYSBmaXggdG8gYSBidWcgd2hlbiBydW5uaW5nICJndWkgYmxhbWUiIGZyb20KKyAgIGEgc3ViZGlyZWN0b3J5LCBldGMuCisKKyAqIHZhcmlvdXMgZ2l0LWd1aSB1cGRhdGVzIGluY2x1ZGluZyBuZXcgdHJhbnNsYXRpb25zLCB3bSBzdGF0ZXMgZml4ZXMsCisgICBUayBidWcgd29ya2Fyb3VuZCBhZnRlciBxdWl0dGluZywgaW1wcm92ZWQgaGV1cmlzdGljcyB0byB0cmlnZ2VyIGdjLAorICAgZXRjLgorCisgKiB2YXJpb3VzIGdpdC1zdm4gdXBkYXRlcy4KKworICogImdpdCBmZXRjaCIgb3ZlciBodHRwIGxlYXJuZWQgYSBuZXcgbW9kZSB0aGF0IGlzIGRpZmZlcmVudCBmcm9tIHRoZQorICAgdHJhZGl0aW9uYWwgImR1bWIgY29tbWl0IHdhbGtlciIuCisKKyhwb3J0YWJpbGl0eSkKKworICogaW1hcC1zZW5kIGNhbiBiZSBidWlsdCBvbiBtaW5ndyBwb3J0LgorCisocGVyZm9ybWFuY2UpCisKKyAqICJnaXQgZGlmZiAtQiIgaGFzIHNtYWxsZXIgbWVtb3J5IGZvb3RwcmludC4KKworKHVzYWJpbGl0eSwgYmVsbHMgYW5kIHdoaXN0bGVzKQorCisgKiBUaGUgb2JqZWN0IHJlcGxhY2UgbWVjaGFuaXNtIGNhbiBiZSBieXBhc3NlZCB3aXRoIC0tbm8tcmVwbGFjZS1vYmplY3RzCisgICBnbG9iYWwgb3B0aW9uIGdpdmVuIHRvIHRoZSAiZ2l0IiBwcm9ncmFtLgorCisgKiBJbiBjb25maWd1cmF0aW9uIGZpbGVzLCBhIGZldyB2YXJpYWJsZXMgdGhhdCBuYW1lIHBhdGhzIGNhbiBiZWdpbiB3aXRoIH4vCisgICBhbmQgfnVzZXJuYW1lLyBhbmQgdGhleSBhcmUgZXhwYW5kZWQgYXMgZXhwZWN0ZWQuCisKKyAqICJnaXQgc3ViY21kIC1oIiBub3cgc2hvd3Mgc2hvcnQgdXNhZ2UgaGVscCBmb3IgbWFueSBtb3JlIHN1YmNvbW1hbmRzLgorCisgKiAiZ2l0IGJpc2VjdCByZXNldCIgY2FuIHJlc2V0IHRvIGFuIGFyYml0cmFyeSBjb21taXQuCisKKyAqICJnaXQgY2hlY2tvdXQgZnJvdHoiIHdoZW4gdGhlcmUgaXMgbm8gbG9jYWwgYnJhbmNoICJmcm90eiIgYnV0IHRoZXJlCisgICBpcyBvbmx5IG9uZSByZW1vdGUgdHJhY2tpbmcgYnJhbmNoICJmcm90eiIgaXMgdGFrZW4gYXMgYSByZXF1ZXN0IHRvCisgICBzdGFydCB0aGUgbmFtZWQgYnJhbmNoIGF0IHRoZSBjb3JyZXNwb25kaW5nIHJlbW90ZSB0cmFja2luZyBicmFuY2guCisKKyAqICJnaXQgY29tbWl0IC1jLy1DLy0tYW1lbmQiIGNhbiBiZSB0b2xkIHdpdGggYSBuZXcgIi0tcmVzZXQtYXV0aG9yIiBvcHRpb24KKyAgIHRvIGlnbm9yZSBhdXRob3JzaGlwIGluZm9ybWF0aW9uIGluIHRoZSBjb21taXQgaXQgaXMgdGFraW5nIHRoZSBtZXNzYWdlCisgICBmcm9tLgorCisgKiAiZ2l0IGRlc2NyaWJlIiBjYW4gYmUgdG9sZCB0byBhZGQgIi1kaXJ0eSIgc3VmZml4IHdpdGggIi0tZGlydHkiIG9wdGlvbi4KKworICogImdpdCBkaWZmIiBsZWFybmVkIC0tc3VibW9kdWxlIG9wdGlvbiB0byBzaG93IGEgbGlzdCBvZiBvbmUtbGluZSBsb2dzCisgICBpbnN0ZWFkIG9mIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIGNvbW1pdCBvYmplY3QgbmFtZXMuCisKKyAqICJnaXQgZGlmZiIgbGVhcm5lZCB0byBob25vciBkaWZmLmNvbG9yLmZ1bmMgY29uZmlndXJhdGlvbiB0byBwYWludAorICAgZnVuY3Rpb24gbmFtZSBoaW50IHByaW50ZWQgb24gdGhlIGh1bmsgaGVhZGVyICJAQCAtaixrICtsLG0gQEAiIGxpbmUKKyAgIGluIHRoZSBzcGVjaWZpZWQgY29sb3IuCisKKyAqICJnaXQgZmV0Y2giIGxlYXJuZWQgLS1hbGwgYW5kIC0tbXVsdGlwbGUgb3B0aW9ucywgdG8gcnVuIGZldGNoIGZyb20KKyAgIG1hbnkgcmVwb3NpdG9yaWVzLCBhbmQgLS1wcnVuZSBvcHRpb24gdG8gcmVtb3ZlIHJlbW90ZSB0cmFja2luZworICAgYnJhbmNoZXMgdGhhdCB3ZW50IHN0YWxlLiAgVGhlc2UgbWFrZSAiZ2l0IHJlbW90ZSB1cGRhdGUiIGFuZCAiZ2l0CisgICByZW1vdGUgcHJ1bmUiIGxlc3MgbmVjZXNzYXJ5ICh0aGVyZSBpcyBubyBwbGFuIHRvIHJlbW92ZSAicmVtb3RlCisgICB1cGRhdGUiIG5vciAicmVtb3RlIHBydW5lIiwgdGhvdWdoKS4KKworICogImdpdCBmc2NrIiBieSBkZWZhdWx0IGNoZWNrcyB0aGUgcGFja2ZpbGVzIChpLmUuICItLWZ1bGwiIGlzIHRoZQorICAgZGVmYXVsdCk7IHlvdSBjYW4gdHVybiBpdCBvZmYgd2l0aCAiZ2l0IGZzY2sgLS1uby1mdWxsIi4KKworICogImdpdCBncmVwIiBjYW4gdXNlIC1GIChmaXhlZCBzdHJpbmdzKSBhbmQgLWkgKGlnbm9yZSBjYXNlKSB0b2dldGhlci4KKworICogaW1wb3J0LXRhcnMgY29udHJpYnV0ZWQgZmFzdC1pbXBvcnQgZnJvbnRlbmQgbGVhcm5lZCBtb3JlIHR5cGVzIG9mCisgICBjb21wcmVzc2VkIHRhcmJhbGxzLgorCisgKiAiZ2l0IGluc3Rhd2ViIiBrbm93cyBob3cgdG8gdGFsayB3aXRoIG1vZF9jZ2lkIHRvIGFwYWNoZTIuCisKKyAqICJnaXQgbG9nIC0tZGVjb3JhdGUiIHNob3dzIHRoZSBsb2NhdGlvbiBvZiBIRUFEIGFzIHdlbGwuCisKKyAqICJnaXQgbG9nIiBhbmQgImdpdCByZXYtbGlzdCIgbGVhcm5lZCB0byB0YWtlIHJldnMgYW5kIHBhdGhzcGVjcyBmcm9tCisgICB0aGUgc3RhbmRhcmQgaW5wdXQgd2l0aCB0aGUgbmV3ICItLXN0ZGluIiBvcHRpb24uCisKKyAqICItLXByZXR0eT1mb3JtYXQiIG9wdGlvbiB0byAibG9nIiBmYW1pbHkgb2YgY29tbWFuZHMgbGVhcm5lZDoKKworICAgLiB0byB3cmFwIHRleHQgd2l0aCB0aGUgIiV3KCkiIHNwZWNpZmllci4KKyAgIC4gdG8gc2hvdyByZWZsb2cgaW5mb3JtYXRpb24gd2l0aCAiJWdbc2REXSIgc3BlY2lmaWVyLgorCisgKiAiZ2l0IG5vdGVzIiBjb21tYW5kIHRvIGFubm90YXRlIGV4aXN0aW5nIGNvbW1pdHMuCisKKyAqICJnaXQgbWVyZ2UiIChhbmQgImdpdCBwdWxsIikgbGVhcm5lZCAtLWZmLW9ubHkgb3B0aW9uIHRvIG1ha2UgaXQgZmFpbAorICAgaWYgdGhlIG1lcmdlIGRvZXMgbm90IHJlc3VsdCBpbiBhIGZhc3QtZm9yd2FyZC4KKworICogImdpdCBtZXJnZXRvb2wiIGxlYXJuZWQgdG8gdXNlIHA0bWVyZ2UuCisKKyAqICJnaXQgcmViYXNlIC1pIiBsZWFybmVkICJyZXdvcmQiIHRoYXQgYWN0cyBsaWtlICJlZGl0IiBidXQgaW1tZWRpYXRlbHkKKyAgIHN0YXJ0cyBhbiBlZGl0b3IgdG8gdHdlYWsgdGhlIGxvZyBtZXNzYWdlIHdpdGhvdXQgcmV0dXJuaW5nIGNvbnRyb2wgdG8KKyAgIHRoZSBzaGVsbCwgd2hpY2ggaXMgZG9uZSBieSAiZWRpdCIgdG8gZ2l2ZSBhbiBvcHBvcnR1bml0eSB0byB0d2VhayB0aGUKKyAgIGNvbnRlbnRzLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGNhbiBiZSB0b2xkIHdpdGggIi0tZW52ZWxvcGUtc2VuZGVyPWF1dG8iIHRvIHVzZSB0aGUKKyAgIHNhbWUgYWRkcmVzcyBhcyAiRnJvbToiIGFkZHJlc3MgYXMgdGhlIGVudmVsb3BlIHNlbmRlciBhZGRyZXNzLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIHdpbGwgaXNzdWUgYSB3YXJuaW5nIHdoZW4gaXQgZGVmYXVsdHMgdG8gdGhlCisgICAtLWNoYWluLXJlcGx5LXRvIGJlaGF2aW91ciB3aXRob3V0IGJlaW5nIHRvbGQgYnkgdGhlIHVzZXIgYW5kCisgICBpbnN0cnVjdHMgdG8gcHJlcGFyZSBmb3IgdGhlIGNoYW5nZSBvZiB0aGUgZGVmYXVsdCBpbiAxLjcuMCByZWxlYXNlLgorCisgKiBJbiAiZ2l0IHN1Ym1vZHVsZSBhZGQgPHJlcG9zaXRvcnk+IDxwYXRoPiIsIDxwYXRoPiBpcyBub3cgb3B0aW9uYWwgYW5kCisgICBpbmZlcnJlZCBmcm9tIDxyZXBvc2l0b3J5PiB0aGUgc2FtZSB3YXkgImdpdCBjbG9uZSA8cmVwb3NpdG9yeT4iIGRvZXMuCisKKyAqICJnaXQgc3ZuIiBsZWFybmVkIHRvIHJlYWQgU1ZOIDEuNSsgYW5kIFNWSyBtZXJnZSB0aWNrZXRzLgorCisgKiAiZ2l0IHN2biIgbGVhcm5lZCB0byByZWNyZWF0ZSBlbXB0eSBkaXJlY3RvcmllcyB0cmFja2VkIG9ubHkgYnkgU1ZOLgorCisgKiAiZ2l0d2ViIiBjYW4gb3B0aW9uYWxseSByZW5kZXIgaXRzICJibGFtZSIgb3V0cHV0IGluY3JlbWVudGFsbHkgKHRoaXMKKyAgIHJlcXVpcmVzIEphdmFTY3JpcHQgb24gdGhlIGNsaWVudCBzaWRlKS4KKworICogQXV0aG9yIG5hbWVzIHNob3duIGluIGdpdHdlYiBvdXRwdXQgYXJlIGxpbmtzIHRvIHNlYXJjaCBjb21taXRzIGJ5IHRoZQorICAgYXV0aG9yLgorCitGaXhlcyBzaW5jZSB2MS42LjUKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgb2YgdGhlIGZpeGVzIGluIHYxLjYuNS5YIG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4gdGhpcworcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS43LjAuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNy4wLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZjViY2EKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNy4wLjEudHh0CkBAIC0wLDAgKzEsMzUgQEAKK0dpdCB2MS43LjAuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjAKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBJbiBhIGZyZXNobHkgY3JlYXRlZCByZXBvc2l0b3J5ICJyZXYtcGFyc2UgSEVBRF4wIiBjb21wbGFpbmVkIHRoYXQKKyAgIGl0IGlzIGRhbmdsaW5nIHN5bXJlZiwgZXZlbiB0aG91Z2ggInJldi1wYXJzZSBIRUFEIiBkaWRuJ3QuCisKKyAqICJnaXQgc2hvdyA6bm8tc3VjaC1uYW1lIiB0cmllZCB0byBhY2Nlc3MgdGhlIGluZGV4IHdpdGhvdXQgYm91bmRzCisgICBjaGVjaywgbGVhZGluZyB0byBhIHBvdGVudGlhbCBzZWdmYXVsdC4KKworICogTWVzc2FnZSBmcm9tICJnaXQgY2hlcnJ5LXBpY2siIHdhcyBoYXJkZXIgdG8gcmVhZCBhbmQgdXNlIHRoYW4gbmVjZXNzYXJ5CisgICB3aGVuIGl0IHN0b3BwZWQgZHVlIHRvIGNvbmZsaWN0aW5nIGNoYW5nZXMuCisKKyAqIFdlIHJlZmVycmVkIHRvICIuZ2l0L3JlZnMvIiB0aHJvdWdob3V0IHRoZSBkb2N1bWVudGF0aW9uIHdoZW4gd2UKKyAgIG1lYW50IHRvIHRhbGsgYWJvdXQgYWJzdHJhY3Qgbm90aW9uIG9mICJyZWYgbmFtZXNwYWNlIi4gIEJlY2F1c2UKKyAgIHBlb3BsZSdzIHJlcG9zaXRvcmllcyBvZnRlbiBoYXZlIHBhY2tlZCByZWZzIHRoZXNlIGRheXMsIHRoaXMgd2FzCisgICBjb25mdXNpbmcuCisKKyAqICJnaXQgZGlmZiAtLW91dHB1dD0vcGF0aC90aGF0L2Nhbm5vdC9iZS93cml0dGVuIiBkaWQgbm90IGNvcnJlY3RseQorICAgZXJyb3Igb3V0LgorCisgKiAiZ2l0IGdyZXAgLWUgLXBhdHRlcm4tdGhhdC1iZWdpbi13aXRoLWRhc2ggcGF0aHMuLi4iIGNvdWxkIG5vdCBiZQorICAgc3BlbGxlZCBhcyAiZ2l0IGdyZXAgLS0gLXBhdHRlcm4tdGhhdC1iZWdpbi13aXRoLWRhc2ggcGF0aHMuLi4iIHdoaWNoCisgICB3b3VsZCBiZSBhIEdOVSB3YXkgdG8gdXNlICItLSIgYXMgImVuZCBvZiBvcHRpb25zIi4KKworICogImdpdCBncmVwIiBjb21waWxlZCB3aXRoIHRocmVhZGluZyBzdXBwb3J0IHRyaWVkIHRvIGFjY2VzcyBhbgorICAgdW5pbml0aWFsaXplZCBtdXRleCBvbiBib3hlcyB3aXRoIGEgc2luZ2xlIENQVS4KKworICogImdpdCBzdGFzaCBwb3AgLXEgLS1pbmRleCIgZmFpbGVkIGJlY2F1c2UgdGhlIHVubmVjZXNzYXJ5IC0taW5kZXgKKyAgIG9wdGlvbiB3YXMgcHJvcGFnYXRlZCB0byAiZ2l0IHN0YXNoIGRyb3AiIHRoYXQgaXMgaW50ZXJuYWxseSBydW4gYXQgdGhlCisgICBlbmQuCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjcuMC4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS43LjAuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNiNDZjYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS43LjAuMi50eHQKQEAgLTAsMCArMSw0MCBAQAorR2l0IHYxLjcuMC4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMC4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBHSVRfUEFHRVIgd2FzIG5vdCBob25vcmVkIGNvbnNpc3RlbnRseSBieSBzb21lIHNjcmlwdGVkIFBvcmNlbGFpbnMsIG1vc3QKKyAgIG5vdGFibHkgImdpdCBhbSIuCisKKyAqIHVwZGF0aW5nIHdvcmtpbmcgdHJlZSBmaWxlcyBhZnRlciB0ZWxsaW5nIGdpdCB0byBhZGQgdGhlbSB0byB0aGUKKyAgIGluZGV4IGFuZCB3aGlsZSBpdCBpcyBzdGlsbCB3b3JraW5nIGNyZWF0ZWQgZ2FyYmFnZSBvYmplY3QgZmlsZXMgaW4KKyAgIHRoZSByZXBvc2l0b3J5IHdpdGhvdXQgZGlhZ25vc2luZyBpdCBhcyBhbiBlcnJvci4KKworICogImdpdCBiaXNlY3QgLS0gcGF0aHNwZWMuLi4iIGRpZCBub3QgZGlhZ25vc2UgYW4gZXJyb3IgY29uZGl0aW9uIHByb3Blcmx5IHdoZW4KKyAgIHRoZSBzaW1wbGlmaWNhdGlvbiB3aXRoIGdpdmVuIHBhdGhzcGVjIG1hZGUgdGhlIGhpc3RvcnkgZW1wdHkuCisKKyAqICJnaXQgcmV2LWxpc3QgLS1jaGVycnktcGljayBBLi4uQiIgbm93IGhhcyBhbiBvYnZpb3VzIG9wdGltaXphdGlvbiB3aGVuIHRoZQorICAgaGlzdG9yaWVzIGhhdmVuJ3QgZGl2ZXJnZWQgKGkuZS4gd2hlbiBvbmUgZW5kIGlzIGFuIGFuY2VzdG9yIG9mIHRoZSBvdGhlcikuCisKKyAqICJnaXQgZGlmZiAtLXF1aWV0IC13IiBkaWQgbm90IHdvcmsgYXMgZXhwZWN0ZWQuCisKKyAqICJnaXQgZmFzdC1pbXBvcnQiIGRpZG4ndCB3b3JrIHdpdGggYSBsYXJnZSBpbnB1dCwgYXMgaXQgbGFja2VkIHN1cHBvcnQKKyAgIGZvciBwcm9kdWNpbmcgdGhlIHBhY2sgaW5kZXggaW4gdjIgZm9ybWF0LgorCisgKiAiZ2l0IGltYXAtc2VuZCIgZGlkbid0IHVzZSBDUkxGIGxpbmUgZW5kaW5ncyBvdmVyIHRoZSBpbWFwIHByb3RvY29sCisgICB3aGVuIHN0b3JpbmcgaXRzIHBheWxvYWQgdG8gdGhlIGRyYWZ0IGJveCwgdmlvbGF0aW5nIFJGQyAzNTAxLgorCisgKiAiZ2l0IGxvZyAtLWZvcm1hdD0nJXcoeCx5LHopJWInIiBhbmQgZnJpZW5kcyB0aGF0IHJld3JhcCBtZXNzYWdlCisgICBoYXMgYmVlbiBvcHRpbWl6ZWQgZm9yIHV0Zi04IHBheWxvYWQuCisKKyAqIEVycm9yIG1lc3NhZ2VzIGdlbmVyYXRlZCBvbiB0aGUgcmVjZWl2aW5nIGVuZCBkaWQgbm90IGNvbWUgYmFjayB0byAiZ2l0CisgICBwdXNoIi4KKworICogImdpdCBzdGF0dXMiIGluIDEuNy4wIGxhY2tlZCB0aGUgb3B0aW1pemF0aW9uIHdlIHVzZWQgdG8gaGF2ZSBpbiAxLjYuWCBzZXJpZXMKKyAgIHRvIHNwZWVkIHVwIHNjYW5uaW5nIG9mIGxhcmdlIHdvcmtpbmcgdHJlZS4KKworICogImdpdHdlYiIgZGlkIG5vdCBkaWFnbm9zZSBwYXJzaW5nIGVycm9ycyBwcm9wZXJseSB3aGlsZSByZWFkaW5nIHRpcyBjb25maWd1cmF0aW9uCisgICBmaWxlLgorCitBbmQgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS43LjAuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNy4wLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMzU1NzMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNy4wLjMudHh0CkBAIC0wLDAgKzEsMzQgQEAKK0dpdCB2MS43LjAuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjAuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogT2JqZWN0IGZpbGVzIGFyZSBjcmVhdGVkIGluIGEgbW9yZSBBQ0wgZnJpZW5kbHkgd2F5IGluIHJlcG9zaXRvcmllcworICAgd2hlcmUgZ3JvdXAgcGVybWlzc2lvbiBpcyBBQ0wgY29udHJvbGxlZC4KKworICogImdpdCBhZGQgLWkiIGRpZG4ndCBoYW5kbGUgYSBkZWxldGVkIHBhdGggdmVyeSB3ZWxsLgorCisgKiAiZ2l0IGJsYW1lIiBwYWRkZWQgbGluZSBudW1iZXJzIHdpdGggb25lIGV4dHJhIFNQIHdoZW4gdGhlIHRvdGFsIG51bWJlcgorICAgb2YgbGluZXMgd2FzIG9uZSBsZXNzIHRoYW4gbXVsdGlwbGUgb2YgdGVuIGR1ZSB0byBhbiBvZmYtYnktb25lIGVycm9yLgorCisgKiAiZ2l0IGZldGNoIC0tYWxsLy0tbXVsdGkiIHVzZWQgdG8gZGlzY2FyZCBpbmZvcm1hdGlvbiBmb3IgcmVtb3RlcyB0aGF0CisgICBhcmUgZmV0Y2hlZCBlYXJsaWVyLgorCisgKiAiZ2l0IGxvZyAtLWF1dGhvcj1tZSAtLWdyZXA9aXQiIHRyaWVkIHRvIGZpbmQgY29tbWl0cyB0aGF0IGhhdmUgIml0IgorICAgb3IgYXJlIHdyaXR0ZW4gYnkgIm1lIiwgaW5zdGVhZCBvZiB0aGUgb25lcyB0aGF0IGhhdmUgIml0IiBfYW5kXyBhcmUKKyAgIHdyaXR0ZW4gYnkgIm1lIi4KKworICogImdpdCBsb2cgLWcgYnJhbmNoIiBtaXNiZWhhdmVkIHdoZW4gdGhlcmUgd2FzIG5vIGVudHJpZXMgaW4gdGhlIHJlZmxvZworICAgZm9yIHRoZSBuYW1lZCBicmFuY2guCisKKyAqICJnaXQgbWFpbGluZm8iIChoZW5jZSAiZ2l0IGFtIikgaW5jb3JyZWN0bHkgcmVtb3ZlZCBpbml0aWFsIGluZGVudCBmcm9tCisgICBwYXJhZ3JhcGhzLgorCisgKiAiZ2l0IHBydW5lIiBhbmQgImdpdCByZWZsb2ciIChoZW5jZSAiZ2l0IGdjIiBhcyB3ZWxsKSBkaWRuJ3QgaG9ub3IKKyAgIGFuIGluc3RydWN0aW9uIG5ldmVyIHRvIGV4cGlyZSBieSBzZXR0aW5nIGdjLnJlZmxvZ2V4cGlyZSB0byBuZXZlci4KKworICogImdpdCBwdXNoIiBtaXNiZWhhdmVkIHdoZW4gYnJhbmNoLjxuYW1lPi5tZXJnZSB3YXMgY29uZmlndXJlZCB3aXRob3V0CisgICBtYXRjaGluZyBicmFuY2guPG5hbWU+LnJlbW90ZS4KKworQW5kIG90aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNy4wLjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjcuMC40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmM5NGEyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjcuMC40LnR4dApAQCAtMCwwICsxLDE5IEBACitHaXQgdjEuNy4wLjQgUmVsZWFzZSBOb3RlcyAoZHJhZnQpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMC4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBDb2xvciB2YWx1ZXMgZ2l2ZW4gdG8gImNvbG9yLjxjbWQ+LjxzbG90PiIgY29uZmlndXJhdGlvbiBjYW4gbm93IGhhdmUKKyAgIG1vcmUgdGhhbiBvbmUgYXR0cmlidXRlcyAoZS5nLiAiYm9sZCB1bCIpLgorCisgKiAiZ2l0IGFkZCAtdSBub25leGlzdGVudC1wYXRoIiBkaWQgbm90IGNvbXBsYWluLgorCisgKiAiZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1maXgiIGRpZG4ndCB3b3JrIHdlbGwgd2hlbiBhbiBlYXJseSBwYXRjaCBpbgorICAgYSBwYXRjaCBzZXJpZXMgYWRkcyB0cmFpbGluZyBibGFuayBsaW5lcyBhbmQgYSBsYXRlciBvbmUgZGVwZW5kZWQgb24KKyAgIHN1Y2ggYSBibG9jayBvZiBibGFuayBsaW5lcyBhdCB0aGUgZW5kLgorCisgKiAiZ2l0IGZhc3QtZXhwb3J0IiBkaWRuJ3QgY2hlY2sgZXJyb3Igc3RhdHVzIGFuZCBzdG9wIHdoZW4gbWFya3MgZmlsZQorICAgY2Fubm90IGJlIG9wZW5lZC4KKworQW5kIG90aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNy4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS43LjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZTNmMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNy4wLnR4dApAQCAtMCwwICsxLDIxNCBAQAorR2l0IHYxLjcuMCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworTm90ZXMgb24gYmVoYXZpb3VyIGNoYW5nZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IHB1c2giIGludG8gYSBicmFuY2ggdGhhdCBpcyBjdXJyZW50bHkgY2hlY2tlZCBvdXQgKGkuZS4gcG9pbnRlZCBhdCBieQorICAgSEVBRCBpbiBhIHJlcG9zaXRvcnkgdGhhdCBpcyBub3QgYmFyZSkgaXMgcmVmdXNlZCBieSBkZWZhdWx0LgorCisgICBTaW1pbGFybHksICJnaXQgcHVzaCAkdGhlcmUgOiRraWxsZWQiIHRvIGRlbGV0ZSB0aGUgYnJhbmNoICRraWxsZWQKKyAgIGluIGEgcmVtb3RlIHJlcG9zaXRvcnkgJHRoZXJlLCB3aGVuICRraWxsZWQgYnJhbmNoIGlzIHRoZSBjdXJyZW50CisgICBicmFuY2ggcG9pbnRlZCBhdCBieSBpdHMgSEVBRCwgd2lsbCBiZSByZWZ1c2VkIGJ5IGRlZmF1bHQuCisKKyAgIFNldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggYW5kCisgICByZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50IHRvICdpZ25vcmUnIGluIHRoZSByZWNlaXZpbmcgcmVwb3NpdG9yeQorICAgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlc2Ugc2FmZXR5IGZlYXR1cmVzLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGRvZXMgbm90IG1ha2UgZGVlcCB0aHJlYWRzIGJ5IGRlZmF1bHQgd2hlbiBzZW5kaW5nIGEKKyAgIHBhdGNoIHNlcmllcyB3aXRoIG1vcmUgdGhhbiB0d28gbWVzc2FnZXMuICBBbGwgbWVzc2FnZXMgd2lsbCBiZSBzZW50CisgICBhcyBhIHJlcGx5IHRvIHRoZSBmaXJzdCBtZXNzYWdlLCBpLmUuIGNvdmVyIGxldHRlci4KKworICAgSXQgaGFzIGJlZW4gcG9zc2libGUgYWxyZWFkeSB0byBjb25maWd1cmUgc2VuZC1lbWFpbCB0byBzZW5kICJzaGFsbG93IHRocmVhZCIKKyAgIGJ5IHNldHRpbmcgc2VuZGVtYWlsLmNoYWlucmVwbHl0byBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIGZhbHNlLiAgVGhlCisgICBvbmx5IHRoaW5nIHRoaXMgcmVsZWFzZSBkb2VzIGlzIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB3aGVuIHlvdSBoYXZlbid0CisgICBjb25maWd1cmVkIHRoYXQgdmFyaWFibGUuCisKKyAqICJnaXQgc3RhdHVzIiBpcyBub3QgImdpdCBjb21taXQgLS1kcnktcnVuIiBhbnltb3JlLiAgVGhpcyBjaGFuZ2UgZG9lcworICAgbm90IGFmZmVjdCB5b3UgaWYgeW91IHJ1biB0aGUgY29tbWFuZCB3aXRob3V0IGFyZ3VtZW50LgorCisgKiAiZ2l0IGRpZmYiIHRyYWRpdGlvbmFsbHkgdHJlYXRlZCB2YXJpb3VzICJpZ25vcmUgd2hpdGVzcGFjZSIgb3B0aW9ucworICAgb25seSBhcyBhIHdheSB0byBmaWx0ZXIgdGhlIHBhdGNoIG91dHB1dC4gICJnaXQgZGlmZiAtLWV4aXQtY29kZSAtYiIKKyAgIGV4aXRlZCB3aXRoIG5vbi16ZXJvIHN0YXR1cyBldmVuIGlmIGFsbCBjaGFuZ2VzIHdlcmUgYWJvdXQgY2hhbmdpbmcgdGhlCisgICBhbW91bnQgb2Ygd2hpdGVzcGFjZSBhbmQgbm90aGluZyBlbHNlOyAgYW5kICJnaXQgZGlmZiAtYiIgc2hvd2VkIHRoZQorICAgImRpZmYgLS1naXQiIGhlYWRlciBsaW5lIGZvciBzdWNoIGEgY2hhbmdlIHdpdGhvdXQgcGF0Y2ggdGV4dC4KKworICAgSW4gdGhpcyByZWxlYXNlLCB0aGUgImlnbm9yZSB3aGl0ZXNwYWNlcyIgb3B0aW9ucyBhZmZlY3QgdGhlIHNlbWFudGljcworICAgb2YgdGhlIGRpZmYgb3BlcmF0aW9uLiAgQSBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBhZmZlY3QgYW55dGhpbmcgYnV0CisgICB3aGl0ZXNwYWNlcyBpcyByZXBvcnRlZCB3aXRoIHplcm8gZXhpdCBzdGF0dXMgd2hlbiBydW4gd2l0aAorICAgLS1leGl0LWNvZGUsIGFuZCB0aGVyZSBpcyBubyAiZGlmZiAtLWdpdCIgaGVhZGVyIGZvciBzdWNoIGEgY2hhbmdlLgorCisgKiBFeHRlcm5hbCBkaWZmIGFuZCB0ZXh0Y29udiBoZWxwZXJzIGFyZSBub3cgZXhlY3V0ZWQgdXNpbmcgdGhlIHNoZWxsLgorICAgVGhpcyBtYWtlcyB0aGVtIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBwcm9ncmFtcyBleGVjdXRlZCBieSBnaXQsIGFuZAorICAgYWxsb3dzIHlvdSB0byBwYXNzIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXJzIHRvIHRoZSBoZWxwZXJzLiBBbnkgaGVscGVyCisgICBwYXRocyBjb250YWluaW5nIHNwYWNlcyBvciBvdGhlciBtZXRhY2hhcmFjdGVycyBub3cgbmVlZCB0byBiZQorICAgc2hlbGwtcXVvdGVkLiAgVGhlIGFmZmVjdGVkIGhlbHBlcnMgYXJlIEdJVF9FWFRFUk5BTF9ESUZGIGluIHRoZQorICAgZW52aXJvbm1lbnQsIGFuZCBkaWZmLiouY29tbWFuZCBhbmQgZGlmZi4qLnRleHRjb252IGluIHRoZSBjb25maWcKKyAgIGZpbGUuCisKKyAqIFRoZSAtLW1heC1wYWNrLXNpemUgYXJndW1lbnQgdG8gJ2dpdCByZXBhY2snLCAnZ2l0IHBhY2stb2JqZWN0cycsIGFuZAorICAgJ2dpdCBmYXN0LWltcG9ydCcgd2FzIGFzc3VtaW5nIHRoZSBwcm92aWRlZCBzaXplIHRvIGJlIGV4cHJlc3NlZCBpbiBNaUIsCisgICB1bmxpa2UgdGhlIGNvcnJlc3BvbmRpbmcgY29uZmlnIHZhcmlhYmxlIGFuZCBvdGhlciBzaW1pbGFyIG9wdGlvbnMgYWNjZXB0aW5nCisgICBhIHNpemUgdmFsdWUuICBJdCBpcyBub3cgZXhwZWN0aW5nIGEgc2l6ZSBleHByZXNzZWQgaW4gYnl0ZXMsIHdpdGggYSBwb3NzaWJsZQorICAgdW5pdCBzdWZmaXggb2YgJ2snLCAnbScsIG9yICdnJy4KKworVXBkYXRlcyBzaW5jZSB2MS42LjYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhzdWJzeXN0ZW1zKQorCisgKiAiZ2l0IGZhc3QtaW1wb3J0IiB1cGRhdGVzOyBhZGRzICJvcHRpb24iIGFuZCAiZmVhdHVyZSIgdG8gZGV0ZWN0IHRoZQorICAgbWlzbWF0Y2ggYmV0d2VlbiBmYXN0LWltcG9ydCBhbmQgdGhlIGZyb250ZW5kcyB0aGF0IHByb2R1Y2UgdGhlIGlucHV0CisgICBzdHJlYW0uCisKKyAqICJnaXQgc3ZuIiBzdXBwb3J0IG9mIHN1YnZlcnNpb24gIm1lcmdlIHRpY2tldHMiIGFuZCBtaXNjZWxsYW5lb3VzIGZpeGVzLgorCisgKiAiZ2l0ayIgYW5kICJnaXQgZ3VpIiB0cmFuc2xhdGlvbiB1cGRhdGVzLgorCisgKiAiZ2l0d2ViIiB1cGRhdGVzIChjb2RlIGNsZWFuLXVwLCBsb2FkIGNoZWNraW5nIGV0Yy4pCisKKyhwb3J0YWJpbGl0eSkKKworICogU29tZSBtb3JlIE1TVkMgcG9ydGFiaWxpdHkgcGF0Y2hlcyBmb3IgbXN5c2dpdCBwb3J0LgorCisgKiBNaW5pbXVtIFB0aHJlYWRzIGVtdWxhdGlvbiBmb3IgbXN5c2dpdCBwb3J0LgorCisocGVyZm9ybWFuY2UpCisKKyAqIE1vcmUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgcGF0Y2hlcyBmb3IgbXN5c2dpdCBwb3J0LgorCisodXNhYmlsaXR5LCBiZWxscyBhbmQgd2hpc3RsZXMpCisKKyAqIE1vcmUgY29tbWFuZHMgbGVhcm5lZCAiLS1xdWlldCIgYW5kICItLVtuby1dcHJvZ3Jlc3MiIG9wdGlvbnMuCisKKyAqIFZhcmlvdXMgY29tbWFuZHMgZ2l2ZW4gYnkgdGhlIGVuZCB1c2VyIChlLmcuIGRpZmYudHlwZS50ZXh0Y29udiwKKyAgIGFuZCBHSVRfRURJVE9SKSBjYW4gYmUgc3BlY2lmaWVkIHdpdGggY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4gIEUuZy4gaXQKKyAgIGlzIG5vdyBwb3NzaWJsZSB0byBzYXkgIltkaWZmICJ1dGY4ZG9jIl0gdGV4dGNvbnYgPSBua2YgLXciLgorCisgKiAic3BhcnNlIGNoZWNrb3V0IiBmZWF0dXJlIGFsbG93cyBvbmx5IHBhcnQgb2YgdGhlIHdvcmsgdHJlZSB0byBiZQorICAgY2hlY2tlZCBvdXQuCisKKyAqIEhUVFAgdHJhbnNmZXIgY2FuIHVzZSBhdXRoZW50aWNhdGlvbiBzY2hlbWUgb3RoZXIgdGhhbiBiYXNpYworICAgKGkuZS4vZS5nLiBkaWdlc3QpLgorCisgKiBTd2l0Y2hpbmcgZnJvbSBhIHZlcnNpb24gb2Ygc3VwZXJwcm9qZWN0IHRoYXQgdXNlZCB0byBoYXZlIGEgc3VibW9kdWxlCisgICB0byBhbm90aGVyIHZlcnNpb24gb2Ygc3VwZXJwcm9qZWN0IHRoYXQgbm8gbG9uZ2VyIGhhcyBpdCBkaWQgbm90IHJlbW92ZQorICAgdGhlIHN1Ym1vZHVsZSBkaXJlY3Rvcnkgd2hlbiBpdCBzaG91bGQgKG5hbWVseSwgd2hlbiB5b3UgYXJlIG5vdAorICAgaW50ZXJlc3RlZCBpbiB0aGUgc3VibW9kdWxlIGF0IGFsbCBhbmQgZGlkbid0IGNsb25lL2NoZWNrb3V0KS4KKworICogQSBuZXcgYXR0cmlidXRlIGNvbmZsaWN0LW1hcmtlci1zaXplIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgc2l6ZSBvZgorICAgdGhlIGNvbmZsaWN0IG1hcmtlcnMgZnJvbSB0aGUgZGVmYXVsdCA3OyB0aGlzIGlzIHVzZWZ1bCB3aGVuIHRyYWNrZWQKKyAgIGNvbnRlbnRzIChlLmcuIGdpdC1tZXJnZSBkb2N1bWVudGF0aW9uKSBoYXZlIHN0cmluZ3MgdGhhdCByZXNlbWJsZSB0aGUKKyAgIGNvbmZsaWN0IG1hcmtlcnMuCisKKyAqIEEgbmV3IHN5bnRheCAiPGJyYW5jaD5Ae3Vwc3RyZWFtfSIgY2FuIGJlIHVzZWQgb24gdGhlIGNvbW1hbmQgbGluZSB0bworICAgc3Vic3RpdHV0ZSB0aGUgbmFtZSBvZiB0aGUgInVwc3RyZWFtIiBvZiB0aGUgYnJhbmNoLiAgTWlzc2luZyBicmFuY2gKKyAgIGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IGJyYW5jaCwgc28gImdpdCBmZXRjaCAmJiBnaXQgbWVyZ2UgQHt1cHN0cmVhbX0iCisgICB3aWxsIGJlIGVxdWl2YWxlbnQgdG8gImdpdCBwdWxsIi4KKworICogImdpdCBhbSAtLXJlc29sdmVkIiBoYXMgYSBzeW5vbnltICJnaXQgYW0gLS1jb250aW51ZSIuCisKKyAqICJnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtIiBjYW4gYmUgdXNlZCB0byB1cGRhdGUgdGhlIChzdXJwcmlzZSEpIHVwc3RyZWFtLAorICAgaS5lLiB3aGVyZSB0aGUgYnJhbmNoIGlzIHN1cHBvc2VkIHRvIHB1bGwgYW5kIG1lcmdlIGZyb20gKG9yIHJlYmFzZSBvbnRvKS4KKworICogImdpdCBjaGVja291dCBBLi4uQiIgaXMgYSB3YXkgdG8gZGV0YWNoIEhFQUQgYXQgdGhlIG1lcmdlIGJhc2UgYmV0d2VlbgorICAgQSBhbmQgQi4KKworICogImdpdCBjaGVja291dCAtbSBwYXRoIiB0byByZXNldCB0aGUgd29yayB0cmVlIGZpbGUgYmFjayBpbnRvIHRoZQorICAgY29uZmxpY3RlZCBzdGF0ZSB3b3JrcyBldmVuIHdoZW4geW91IGFscmVhZHkgcmFuICJnaXQgYWRkIHBhdGgiIGFuZAorICAgcmVzb2x2ZWQgdGhlIGNvbmZsaWN0cy4KKworICogImdpdCBjb21taXQgLS1kYXRlPSc8ZGF0ZT4nIiBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGUgYXV0aG9yIGRhdGUKKyAgIGp1c3QgbGlrZSAiZ2l0IGNvbW1pdCAtLWF1dGhvcj0nPG5hbWU+IDxlbWFpbD4nIiBjYW4gYmUgdXNlZCB0bworICAgb3ZlcnJpZGUgdGhlIGF1dGhvciBpZGVudGl0eS4KKworICogImdpdCBjb21taXQgLS1uby1zdGF0dXMiIGNhbiBiZSB1c2VkIHRvIG9taXQgdGhlIGxpc3Rpbmcgb2YgdGhlIGluZGV4CisgICBhbmQgdGhlIHdvcmsgdHJlZSBzdGF0dXMgaW4gdGhlIGVkaXRvciB1c2VkIHRvIHByZXBhcmUgdGhlIGxvZyBtZXNzYWdlLgorCisgKiAiZ2l0IGNvbW1pdCIgd2FybnMgYSBiaXQgbW9yZSBhZ2dyZXNzaXZlbHkgdW50aWwgeW91IGNvbmZpZ3VyZSB1c2VyLmVtYWlsLAorICAgd2hvc2UgZGVmYXVsdCB2YWx1ZSBhbG1vc3QgYWx3YXlzIGlzIG5vdCAoYW5kIGZ1bmRhbWVudGFsbHkgY2Fubm90IGJlKQorICAgd2hhdCB5b3Ugd2FudC4KKworICogImdpdCBkaWZmdG9vbCIgaGFzIGJlZW4gZXh0ZW5kZWQgdG8gbWFrZSBpdCBlYXNpZXIgdG8gaW50ZWdyYXRlIGl0CisgICB3aXRoIGdpdGsuCisKKyAqICJnaXQgZmV0Y2ggLS1hbGwiIGNhbiBub3cgYmUgdXNlZCBpbiBwbGFjZSBvZiAiZ2l0IHJlbW90ZSB1cGRhdGUiLgorCisgKiAiZ2l0IGdyZXAiIGRvZXMgbm90IHJlbHkgb24gZXh0ZXJuYWwgZ3JlcCBhbnltb3JlLiAgSXQgY2FuIHVzZSBtb3JlIHRoYW4KKyAgIG9uZSB0aHJlYWQgdG8gYWNjZWxlcmF0ZSB0aGUgb3BlcmF0aW9uLgorCisgKiAiZ2l0IGdyZXAiIGxlYXJuZWQgIi0tcXVpZXQiIG9wdGlvbi4KKworICogImdpdCBsb2ciIGFuZCBmcmllbmRzIGxlYXJuZWQgIi0tZ2xvYj1oZWFkcy8qIiBzeW50YXggdGhhdCBpcyBhIG1vcmUKKyAgIGZsZXhpYmxlIHdheSB0byBjb21wbGVtZW50ICItLWJyYW5jaGVzLy0tdGFncy8tLXJlbW90ZXMiLgorCisgKiAiZ2l0IG1lcmdlIiBsZWFybmVkIHRvIHBhc3Mgb3B0aW9ucyBzcGVjaWZpYyB0byBzdHJhdGVneS1iYWNrZW5kcy4gIEUuZy4KKworICAgIC0gImdpdCBtZXJnZSAtWHN1YnRyZWU9cGF0aC90by9kaXJlY3RvcnkiIGNhbiBiZSB1c2VkIHRvIHRlbGwgdGhlIHN1YnRyZWUKKyAgICAgIHN0cmF0ZWd5IGhvdyBtdWNoIHRvIHNoaWZ0IHRoZSB0cmVlcyBleHBsaWNpdGx5LgorCisgICAgLSAiZ2l0IG1lcmdlIC1YdGhlaXJzIiBjYW4gYmUgdXNlZCB0byBhdXRvLW1lcmdlIGFzIG11Y2ggYXMgcG9zc2libGUsCisgICAgICB3aGlsZSBkaXNjYXJkaW5nIHlvdXIgb3duIGNoYW5nZXMgYW5kIHRha2luZyBtZXJnZWQgdmVyc2lvbiBpbgorICAgICAgY29uZmxpY3RlZCByZWdpb25zLgorCisgKiAiZ2l0IHB1c2giIGxlYXJuZWQgImdpdCBwdXNoIG9yaWdpbiAtLWRlbGV0ZSBicmFuY2giLCBhIHN5bnRhY3RpYyBzdWdhcgorICAgZm9yICJnaXQgcHVzaCBvcmlnaW4gOmJyYW5jaCIuCisKKyAqICJnaXQgcHVzaCIgbGVhcm5lZCAiZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gb3JpZ2luIGZvcmtlcjpmb3JrZWUiIHRoYXQKKyAgIGxldHMgeW91IGNvbmZpZ3VyZSB5b3VyICJmb3JrZXIiIGJyYW5jaCB0byBsYXRlciBwdWxsIGZyb20gImZvcmtlZSIKKyAgIGJyYW5jaCBhdCAib3JpZ2luIi4KKworICogImdpdCByZWJhc2UgLS1vbnRvIEEuLi5CIiBtZWFucyB0aGUgaGlzdG9yeSBpcyByZXBsYXllZCBvbiB0b3Agb2YgdGhlCisgICBtZXJnZSBiYXNlIGJldHdlZW4gQSBhbmQgQi4KKworICogImdpdCByZWJhc2UgLWkiIGxlYXJuZWQgbmV3IGFjdGlvbiAiZml4dXAiIHRoYXQgc3F1YXNoZXMgdGhlIGNoYW5nZQorICAgYnV0IGRvZXMgbm90IGFmZmVjdCBleGlzdGluZyBsb2cgbWVzc2FnZS4KKworICogImdpdCByZWJhc2UgLWkiIGFsc28gbGVhcm5lZCAtLWF1dG9zcXVhc2ggb3B0aW9uIHRoYXQgaXMgdXNlZnVsCisgICB0b2dldGhlciB3aXRoIHRoZSBuZXcgImZpeHVwIiBhY3Rpb24uCisKKyAqICJnaXQgcmVtb3RlIiBsZWFybmVkIHNldC11cmwgc3ViY29tbWFuZCB0aGF0IHVwZGF0ZXMgKHN1cnByaXNlISkgdXJsCisgICBmb3IgYW4gZXhpc3RpbmcgcmVtb3RlIG5pY2tuYW1lLgorCisgKiAiZ2l0IHJlcmVyZSIgbGVhcm5lZCAiZm9yZ2V0IHBhdGgiIHN1YmNvbW1hbmQuICBUb2dldGhlciB3aXRoICJnaXQKKyAgIGNoZWNrb3V0IC1tIHBhdGgiIGl0IHdpbGwgYmUgdXNlZnVsIHdoZW4geW91IHJlY29yZGVkIGEgd3JvbmcKKyAgIHJlc29sdXRpb24uCisKKyAqIFVzZSBvZiAiZ2l0IHJlc2V0IC0tbWVyZ2UiIGhhcyBiZWNvbWUgZWFzaWVyIHdoZW4gcmVzZXR0aW5nIGF3YXkgYQorICAgY29uZmxpY3RlZCBtZXNzIGxlZnQgaW4gdGhlIHdvcmsgdHJlZS4KKworICogImdpdCByZXJlcmUiIGhhZCByZXJlcmUuYXV0b3VwZGF0ZSBjb25maWd1cmF0aW9uIGJ1dCB0aGVyZSB3YXMgbm8gd2F5CisgICB0byBjb3VudGVybWFuZCBpdCBmcm9tIHRoZSBjb21tYW5kIGxpbmU7IC0tbm8tcmVyZXJlLWF1dG91cGRhdGUgb3B0aW9uCisgICBnaXZlbiB0byAibWVyZ2UiLCAicmV2ZXJ0IiwgZXRjLiBmaXhlcyB0aGlzLgorCisgKiAiZ2l0IHN0YXR1cyIgbGVhcm5lZCAiLXMoaG9ydCkiIG91dHB1dCBmb3JtYXQuCisKKyhkZXZlbG9wZXJzKQorCisgKiBUaGUgaW5mcmFzdHJ1Y3R1cmUgdG8gYnVpbGQgZm9yZWlnbiBTQ00gaW50ZXJmYWNlIGhhcyBiZWVuIHVwZGF0ZWQuCisKKyAqIE1hbnkgbW9yZSBjb21tYW5kcyBhcmUgbm93IGJ1aWx0LWluLgorCisgKiBUSFJFQURFRF9ERUxUQV9TRUFSQ0ggaXMgbm8gbW9yZS4gIElmIHlvdSBidWlsZCB3aXRoIHRocmVhZHMsIGRlbHRhCisgICBjb21wcmVzc2lvbiB3aWxsIGFsd2F5cyB0YWtlIGFkdmFudGFnZSBvZiBpdC4KKworRml4ZXMgc2luY2UgdjEuNi42CistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB2MS42LjYuWCBtYWludGVuYW5jZSBzZXJpZXMgYXJlIGluY2x1ZGVkIGluIHRoaXMKK3JlbGVhc2UsIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuCisKKyAqICJnaXQgYnJhbmNoIC1kIGJyYW5jaCIgdXNlZCB0byByZWZ1c2UgZGVsZXRpbmcgdGhlIGJyYW5jaCBldmVuIHdoZW4KKyAgIHRoZSBicmFuY2ggaXMgZnVsbHkgbWVyZ2VkIHRvIGl0cyB1cHN0cmVhbSBicmFuY2ggaWYgaXQgaXMgbm90IG1lcmdlZAorICAgdG8gdGhlIGN1cnJlbnQgYnJhbmNoLiAgSXQgbm93IGRlbGV0ZXMgaXQgaW4gc3VjaCBhIGNhc2UuCisKKyAqICJmaXRlci1icmFuY2giIGNvbW1hbmQgaW5jb3JyZWN0bHkgc2FpZCAtLXBydW5lLWVtcHR5IGFuZCAtLWZpbHRlci1jb21taXQKKyAgIHdlcmUgaW5jb21wYXRpYmxlOyB0aGUgbGF0dGVyIHNob3VsZCBiZSByZWFkIGFzIC0tY29tbWl0LWZpbHRlci4KKworICogV2hlbiB1c2luZyAiZ2l0IHN0YXR1cyIgb3IgYXNraW5nICJnaXQgZGlmZiIgdG8gY29tcGFyZSB0aGUgd29yayB0cmVlCisgICB3aXRoIHNvbWV0aGluZywgdGhleSB1c2VkIHRvIGNvbnNpZGVyIHRoYXQgYSBjaGVja2VkLW91dCBzdWJtb2R1bGUgd2l0aAorICAgdW5jb21taXR0ZWQgY2hhbmdlcyBpcyBub3QgbW9kaWZpZWQ7IHRoaXMgY291bGQgY2F1c2UgcGVvcGxlIHRvIGZvcmdldAorICAgY29tbWl0dGluZyB0aGVzZSBjaGFuZ2VzIGluIHRoZSBzdWJtb2R1bGUgYmVmb3JlIGNvbW1pdHRpbmcgaW4gdGhlCisgICBzdXBlcnByb2plY3QuIFRoZXkgbm93IGNvbnNpZGVyIHN1Y2ggYSBjaGFuZ2UgYXMgYSBtb2RpZmljYXRpb24gYW5kCisgICAiZ2l0IGRpZmYiIHdpbGwgYXBwZW5kIGEgIi1kaXJ0eSIgdG8gdGhlIHdvcmsgdHJlZSBzaWRlIHdoZW4gZ2VuZXJhdGluZworICAgcGF0Y2ggb3V0cHV0IG9yIHdoZW4gdXNlZCB3aXRoIHRoZSAtLXN1Ym1vZHVsZSBvcHRpb24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcwppbmRleCA3NmZjODRkLi5jNjg2Zjg2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCisrKyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKQEAgLTI4MCw2ICsyODAsMjAgQEAKIHRoZWlyIHRyZWVzIHRoZW1zZWx2ZXMuCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorS25vdyB0aGUgc3RhdHVzIG9mIHlvdXIgcGF0Y2ggYWZ0ZXIgc3VibWlzc2lvbgorCisqIFlvdSBjYW4gdXNlIEdpdCBpdHNlbGYgdG8gZmluZCBvdXQgd2hlbiB5b3VyIHBhdGNoIGlzIG1lcmdlZCBpbgorICBtYXN0ZXIuICdnaXQgcHVsbCAtLXJlYmFzZScgd2lsbCBhdXRvbWF0aWNhbGx5IHNraXAgYWxyZWFkeS1hcHBsaWVkCisgIHBhdGNoZXMsIGFuZCB3aWxsIGxldCB5b3Uga25vdy4gVGhpcyB3b3JrcyBvbmx5IGlmIHlvdSByZWJhc2Ugb24gdG9wCisgIG9mIHRoZSBicmFuY2ggaW4gd2hpY2ggeW91ciBwYXRjaCBoYXMgYmVlbiBtZXJnZWQgKGkuZS4gaXQgd2lsbCBub3QKKyAgdGVsbCB5b3UgaWYgeW91ciBwYXRjaCBpcyBtZXJnZWQgaW4gcHUgaWYgeW91IHJlYmFzZSBvbiB0b3Agb2YKKyAgbWFzdGVyKS4KKworKiBSZWFkIHRoZSBnaXQgbWFpbGluZyBsaXN0LCB0aGUgbWFpbnRhaW5lciByZWd1bGFybHkgcG9zdHMgbWVzc2FnZXMKKyAgZW50aXRsZWQgIldoYXQncyBjb29raW5nIGluIGdpdC5naXQiIGFuZCAiV2hhdCdzIGluIGdpdC5naXQiIGdpdmluZworICB0aGUgc3RhdHVzIG9mIHZhcmlvdXMgcHJvcG9zZWQgY2hhbmdlcy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBNVUEgc3BlY2lmaWMgaGludHMKIAogU29tZSBvZiBwYXRjaGVzIEkgcmVjZWl2ZSBvciBwaWNrIHVwIGZyb20gdGhlIGxpc3Qgc2hhcmUgY29tbW9uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2JsYW1lLW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9ibGFtZS1vcHRpb25zLnR4dAppbmRleCAxNjI1ZmZjLi40ODMzY2FjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2JsYW1lLW9wdGlvbnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vYmxhbWUtb3B0aW9ucy50eHQKQEAgLTk4LDggKzk4LDEwIEBACiAJZmlsZXMgdGhhdCB3ZXJlIG1vZGlmaWVkIGluIHRoZSBzYW1lIGNvbW1pdC4gIFRoaXMgaXMKIAl1c2VmdWwgd2hlbiB5b3UgcmVvcmdhbml6ZSB5b3VyIHByb2dyYW0gYW5kIG1vdmUgY29kZQogCWFyb3VuZCBhY3Jvc3MgZmlsZXMuICBXaGVuIHRoaXMgb3B0aW9uIGlzIGdpdmVuIHR3aWNlLAotCXRoZSBjb21tYW5kIGFkZGl0aW9uYWxseSBsb29rcyBmb3IgY29waWVzIGZyb20gYWxsIG90aGVyCi0JZmlsZXMgaW4gdGhlIHBhcmVudCBmb3IgdGhlIGNvbW1pdCB0aGF0IGNyZWF0ZXMgdGhlIGZpbGUuCisJdGhlIGNvbW1hbmQgYWRkaXRpb25hbGx5IGxvb2tzIGZvciBjb3BpZXMgZnJvbSBvdGhlcgorCWZpbGVzIGluIHRoZSBjb21taXQgdGhhdCBjcmVhdGVzIHRoZSBmaWxlLiBXaGVuIHRoaXMKKwlvcHRpb24gaXMgZ2l2ZW4gdGhyZWUgdGltZXMsIHRoZSBjb21tYW5kIGFkZGl0aW9uYWxseQorCWxvb2tzIGZvciBjb3BpZXMgZnJvbSBvdGhlciBmaWxlcyBpbiBhbnkgY29tbWl0LgogKwogPG51bT4gaXMgb3B0aW9uYWwgYnV0IGl0IGlzIHRoZSBsb3dlciBib3VuZCBvbiB0aGUgbnVtYmVyIG9mCiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyB0aGF0IGdpdCBtdXN0IGRldGVjdCBhcyBtb3ZpbmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnLnR4dAppbmRleCAxODFjMmY5Li40MzdiNGFjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcudHh0CkBAIC00OSw3ICs0OSw4IEBACiBJbiB0aGlzIHN5bnRheCwgc3Vic2VjdGlvbiBuYW1lcyBmb2xsb3cgdGhlIHNhbWUgcmVzdHJpY3Rpb25zIGFzIGZvciBzZWN0aW9uCiBuYW1lcy4KIAotQWxsIHRoZSBvdGhlciBsaW5lcyBhcmUgcmVjb2duaXplZCBhcyBzZXR0aW5nIHZhcmlhYmxlcywgaW4gdGhlIGZvcm0KK0FsbCB0aGUgb3RoZXIgbGluZXMgKGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoZSBsaW5lIGFmdGVyIHRoZSBzZWN0aW9uCitoZWFkZXIpIGFyZSByZWNvZ25pemVkIGFzIHNldHRpbmcgdmFyaWFibGVzLCBpbiB0aGUgZm9ybQogJ25hbWUgPSB2YWx1ZScuICBJZiB0aGVyZSBpcyBubyBlcXVhbCBzaWduIG9uIHRoZSBsaW5lLCB0aGUgZW50aXJlIGxpbmUKIGlzIHRha2VuIGFzICduYW1lJyBhbmQgdGhlIHZhcmlhYmxlIGlzIHJlY29nbml6ZWQgYXMgYm9vbGVhbiAidHJ1ZSIuCiBUaGUgdmFyaWFibGUgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUgYW5kIG9ubHkgYWxwaGFudW1lcmljCkBAIC02Myw3ICs2NCw3IEBACiBhIHN0cmluZywgYW4gaW50ZWdlciwgb3IgYSBib29sZWFuLiAgQm9vbGVhbiB2YWx1ZXMgbWF5IGJlIGdpdmVuIGFzIHllcy9ubywKIDAvMSwgdHJ1ZS9mYWxzZSBvciBvbi9vZmYuICBDYXNlIGlzIG5vdCBzaWduaWZpY2FudCBpbiBib29sZWFuIHZhbHVlcywgd2hlbgogY29udmVydGluZyB2YWx1ZSB0byB0aGUgY2Fub25pY2FsIGZvcm0gdXNpbmcgJy0tYm9vbCcgdHlwZSBzcGVjaWZpZXI7Ci0nZ2l0LWNvbmZpZycgd2lsbCBlbnN1cmUgdGhhdCB0aGUgb3V0cHV0IGlzICJ0cnVlIiBvciAiZmFsc2UiLgorJ2dpdCBjb25maWcnIHdpbGwgZW5zdXJlIHRoYXQgdGhlIG91dHB1dCBpcyAidHJ1ZSIgb3IgImZhbHNlIi4KIAogU3RyaW5nIHZhbHVlcyBtYXkgYmUgZW50aXJlbHkgb3IgcGFydGlhbGx5IGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMuCiBZb3UgbmVlZCB0byBlbmNsb3NlIHZhcmlhYmxlIHZhbHVlcyBpbiBkb3VibGUgcXVvdGVzIGlmIHlvdSB3YW50IHRvCkBAIC0xMTIsMTAgKzExMyw0NiBAQAogaW4gdGhlIGFwcHJvcHJpYXRlIG1hbnVhbCBwYWdlLiBZb3Ugd2lsbCBmaW5kIGEgZGVzY3JpcHRpb24gb2Ygbm9uLWNvcmUKIHBvcmNlbGFpbiBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBpbiB0aGUgcmVzcGVjdGl2ZSBwb3JjZWxhaW4gZG9jdW1lbnRhdGlvbi4KIAorYWR2aWNlLio6OgorCVdoZW4gc2V0IHRvICd0cnVlJywgZGlzcGxheSB0aGUgZ2l2ZW4gb3B0aW9uYWwgaGVscCBtZXNzYWdlLgorCVdoZW4gc2V0IHRvICdmYWxzZScsIGRvIG5vdCBkaXNwbGF5LiBUaGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKwlhcmU6CisrCistLQorCXB1c2hOb25GYXN0Rm9yd2FyZDo6CisJCUFkdmljZSBzaG93biB3aGVuIGxpbmtnaXQ6Z2l0LXB1c2hbMV0gcmVmdXNlcworCQlub24tZmFzdC1mb3J3YXJkIHJlZnMuIERlZmF1bHQ6IHRydWUuCisJc3RhdHVzSGludHM6OgorCQlEaXJlY3Rpb25zIG9uIGhvdyB0byBzdGFnZS91bnN0YWdlL2FkZCBzaG93biBpbiB0aGUKKwkJb3V0cHV0IG9mIGxpbmtnaXQ6Z2l0LXN0YXR1c1sxXSBhbmQgdGhlIHRlbXBsYXRlIHNob3duCisJCXdoZW4gd3JpdGluZyBjb21taXQgbWVzc2FnZXMuIERlZmF1bHQ6IHRydWUuCisJY29tbWl0QmVmb3JlTWVyZ2U6OgorCQlBZHZpY2Ugc2hvd24gd2hlbiBsaW5rZ2l0OmdpdC1tZXJnZVsxXSByZWZ1c2VzIHRvCisJCW1lcmdlIHRvIGF2b2lkIG92ZXJ3cml0dGluZyBsb2NhbCBjaGFuZ2VzLgorCQlEZWZhdWx0OiB0cnVlLgorCXJlc29sdmVDb25mbGljdDo6CisJCUFkdmljZXMgc2hvd24gYnkgdmFyaW91cyBjb21tYW5kcyB3aGVuIGNvbmZsaWN0cworCQlwcmV2ZW50IHRoZSBvcGVyYXRpb24gZnJvbSBiZWluZyBwZXJmb3JtZWQuCisJCURlZmF1bHQ6IHRydWUuCisJaW1wbGljaXRJZGVudGl0eTo6CisJCUFkdmljZSBvbiBob3cgdG8gc2V0IHlvdXIgaWRlbnRpdHkgY29uZmlndXJhdGlvbiB3aGVuCisJCXlvdXIgaW5mb3JtYXRpb24gaXMgZ3Vlc3NlZCBmcm9tIHRoZSBzeXN0ZW0gdXNlcm5hbWUgYW5kCisJCWRvbWFpbiBuYW1lLiBEZWZhdWx0OiB0cnVlLgorCisJZGV0YWNoZWRIZWFkOjoKKwkJQWR2aWNlIHNob3duIHdoZW4geW91IHVzZWQgbGlua2dpdDo6Z2l0LWNoZWNrb3V0WzFdIHRvCisJCW1vdmUgdG8gdGhlIGRldGFjaCBIRUFEIHN0YXRlLCB0byBpbnN0cnVjdCBob3cgdG8gY3JlYXRlCisJCWEgbG9jYWwgYnJhbmNoIGFmdGVyIHRoZSBmYWN0LiAgRGVmYXVsdDogdHJ1ZS4KKy0tCisKIGNvcmUuZmlsZU1vZGU6OgogCUlmIGZhbHNlLCB0aGUgZXhlY3V0YWJsZSBiaXQgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgaW5kZXggYW5kCiAJdGhlIHdvcmtpbmcgY29weSBhcmUgaWdub3JlZDsgdXNlZnVsIG9uIGJyb2tlbiBmaWxlc3lzdGVtcyBsaWtlIEZBVC4KLQlTZWUgbGlua2dpdDpnaXQtdXBkYXRlLWluZGV4WzFdLiBUcnVlIGJ5IGRlZmF1bHQuCisJU2VlIGxpbmtnaXQ6Z2l0LXVwZGF0ZS1pbmRleFsxXS4KKysKK1RoZSBkZWZhdWx0IGlzIHRydWUsIGV4Y2VwdCBsaW5rZ2l0OmdpdC1jbG9uZVsxXSBvciBsaW5rZ2l0OmdpdC1pbml0WzFdCit3aWxsIHByb2JlIGFuZCBzZXQgY29yZS5maWxlTW9kZSBmYWxzZSBpZiBhcHByb3ByaWF0ZSB3aGVuIHRoZQorcmVwb3NpdG9yeSBpcyBjcmVhdGVkLgogCiBjb3JlLmlnbm9yZUN5Z3dpbkZTVHJpY2tzOjoKIAlUaGlzIG9wdGlvbiBpcyBvbmx5IHVzZWQgYnkgQ3lnd2luIGltcGxlbWVudGF0aW9uIG9mIEdpdC4gSWYgZmFsc2UsCkBAIC0xMjgsNiArMTY1LDE4IEBACiAJaXMgdHJ1ZSwgaW4gd2hpY2ggY2FzZSBpZ25vcmVDeWd3aW5GU1RyaWNrcyBpcyBpZ25vcmVkIGFzIEN5Z3dpbidzCiAJUE9TSVggZW11bGF0aW9uIGlzIHJlcXVpcmVkIHRvIHN1cHBvcnQgY29yZS5maWxlbW9kZS4KIAorY29yZS5pZ25vcmVjYXNlOjoKKwlJZiB0cnVlLCB0aGlzIG9wdGlvbiBlbmFibGVzIHZhcmlvdXMgd29ya2Fyb3VuZHMgdG8gZW5hYmxlCisJZ2l0IHRvIHdvcmsgYmV0dGVyIG9uIGZpbGVzeXN0ZW1zIHRoYXQgYXJlIG5vdCBjYXNlIHNlbnNpdGl2ZSwKKwlsaWtlIEZBVC4gRm9yIGV4YW1wbGUsIGlmIGEgZGlyZWN0b3J5IGxpc3RpbmcgZmluZHMKKwkibWFrZWZpbGUiIHdoZW4gZ2l0IGV4cGVjdHMgIk1ha2VmaWxlIiwgZ2l0IHdpbGwgYXNzdW1lCisJaXQgaXMgcmVhbGx5IHRoZSBzYW1lIGZpbGUsIGFuZCBjb250aW51ZSB0byByZW1lbWJlciBpdCBhcworCSJNYWtlZmlsZSIuCisrCitUaGUgZGVmYXVsdCBpcyBmYWxzZSwgZXhjZXB0IGxpbmtnaXQ6Z2l0LWNsb25lWzFdIG9yIGxpbmtnaXQ6Z2l0LWluaXRbMV0KK3dpbGwgcHJvYmUgYW5kIHNldCBjb3JlLmlnbm9yZWNhc2UgdHJ1ZSBpZiBhcHByb3ByaWF0ZSB3aGVuIHRoZSByZXBvc2l0b3J5CitpcyBjcmVhdGVkLgorCiBjb3JlLnRydXN0Y3RpbWU6OgogCUlmIGZhbHNlLCB0aGUgY3RpbWUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgaW5kZXggYW5kIHRoZQogCXdvcmtpbmcgY29weSBhcmUgaWdub3JlZDsgdXNlZnVsIHdoZW4gdGhlIGlub2RlIGNoYW5nZSB0aW1lCkBAIC0xNTMsOSArMjAyLDEwIEBACiAJd3JpdGluZyB0byB0aGUgZmlsZXN5c3RlbS4gIFRoZSB2YXJpYWJsZSBjYW4gYmUgc2V0IHRvCiAJJ2lucHV0JywgaW4gd2hpY2ggY2FzZSB0aGUgY29udmVyc2lvbiBoYXBwZW5zIG9ubHkgd2hpbGUKIAlyZWFkaW5nIGZyb20gdGhlIGZpbGVzeXN0ZW0gYnV0IGZpbGVzIGFyZSB3cml0dGVuIG91dCB3aXRoCi0JYExGYCBhdCB0aGUgZW5kIG9mIGxpbmVzLiAgQ3VycmVudGx5LCB3aGljaCBwYXRocyB0byBjb25zaWRlcgotCSJ0ZXh0IiAoaS5lLiBiZSBzdWJqZWN0ZWQgdG8gdGhlIGF1dG9jcmxmIG1lY2hhbmlzbSkgaXMKLQlkZWNpZGVkIHB1cmVseSBiYXNlZCBvbiB0aGUgY29udGVudHMuCisJYExGYCBhdCB0aGUgZW5kIG9mIGxpbmVzLiAgQSBmaWxlIGlzIGNvbnNpZGVyZWQKKwkidGV4dCIgKGkuZS4gYmUgc3ViamVjdGVkIHRvIHRoZSBhdXRvY3JsZiBtZWNoYW5pc20pIGJhc2VkIG9uCisJdGhlIGZpbGUncyBgY3JsZmAgYXR0cmlidXRlLCBvciBpZiBgY3JsZmAgaXMgdW5zcGVjaWZpZWQsCisJYmFzZWQgb24gdGhlIGZpbGUncyBjb250ZW50cy4gIFNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0uCiAKIGNvcmUuc2FmZWNybGY6OgogCUlmIHRydWUsIG1ha2VzIGdpdCBjaGVjayBpZiBjb252ZXJ0aW5nIGBDUkxGYCBhcyBjb250cm9sbGVkIGJ5CkBAIC0yMDcsNyArMjU3LDExIEBACiAJY29udGFpbiB0aGUgbGluayB0ZXh0LiBsaW5rZ2l0OmdpdC11cGRhdGUtaW5kZXhbMV0gYW5kCiAJbGlua2dpdDpnaXQtYWRkWzFdIHdpbGwgbm90IGNoYW5nZSB0aGUgcmVjb3JkZWQgdHlwZSB0byByZWd1bGFyCiAJZmlsZS4gVXNlZnVsIG9uIGZpbGVzeXN0ZW1zIGxpa2UgRkFUIHRoYXQgZG8gbm90IHN1cHBvcnQKLQlzeW1ib2xpYyBsaW5rcy4gVHJ1ZSBieSBkZWZhdWx0LgorCXN5bWJvbGljIGxpbmtzLgorKworVGhlIGRlZmF1bHQgaXMgdHJ1ZSwgZXhjZXB0IGxpbmtnaXQ6Z2l0LWNsb25lWzFdIG9yIGxpbmtnaXQ6Z2l0LWluaXRbMV0KK3dpbGwgcHJvYmUgYW5kIHNldCBjb3JlLnN5bWxpbmtzIGZhbHNlIGlmIGFwcHJvcHJpYXRlIHdoZW4gdGhlIHJlcG9zaXRvcnkKK2lzIGNyZWF0ZWQuCiAKIGNvcmUuZ2l0UHJveHk6OgogCUEgInByb3h5IGNvbW1hbmQiIHRvIGV4ZWN1dGUgKGFzICdjb21tYW5kIGhvc3QgcG9ydCcpIGluc3RlYWQKQEAgLTI1NiwxNyArMzEwLDI0IEBACiA9IHRydWUpLgogCiBjb3JlLndvcmt0cmVlOjoKLQlTZXQgdGhlIHBhdGggdG8gdGhlIHdvcmtpbmcgdHJlZS4gIFRoZSB2YWx1ZSB3aWxsIG5vdCBiZQotCXVzZWQgaW4gY29tYmluYXRpb24gd2l0aCByZXBvc2l0b3JpZXMgZm91bmQgYXV0b21hdGljYWxseSBpbgotCWEgLmdpdCBkaXJlY3RvcnkgKGkuZS4gJEdJVF9ESVIgaXMgbm90IHNldCkuCisJU2V0IHRoZSBwYXRoIHRvIHRoZSByb290IG9mIHRoZSB3b3JrIHRyZWUuCiAJVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgR0lUX1dPUktfVFJFRSBlbnZpcm9ubWVudAogCXZhcmlhYmxlIGFuZCB0aGUgJy0td29yay10cmVlJyBjb21tYW5kIGxpbmUgb3B0aW9uLiBJdCBjYW4gYmUKLQlhIGFic29sdXRlIHBhdGggb3IgcmVsYXRpdmUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHNwZWNpZmllZCBieQotCS0tZ2l0LWRpciBvciBHSVRfRElSLgotCU5vdGU6IElmIC0tZ2l0LWRpciBvciBHSVRfRElSIGFyZSBzcGVjaWZpZWQgYnV0IG5vbmUgb2YKKwlhbiBhYnNvbHV0ZSBwYXRoIG9yIGEgcmVsYXRpdmUgcGF0aCB0byB0aGUgLmdpdCBkaXJlY3RvcnksCisJZWl0aGVyIHNwZWNpZmllZCBieSAtLWdpdC1kaXIgb3IgR0lUX0RJUiwgb3IgYXV0b21hdGljYWxseQorCWRpc2NvdmVyZWQuCisJSWYgLS1naXQtZGlyIG9yIEdJVF9ESVIgYXJlIHNwZWNpZmllZCBidXQgbm9uZSBvZgogCS0td29yay10cmVlLCBHSVRfV09SS19UUkVFIGFuZCBjb3JlLndvcmt0cmVlIGlzIHNwZWNpZmllZCwKLQl0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyByZWdhcmRlZCBhcyB0aGUgdG9wIGRpcmVjdG9yeQotCW9mIHlvdXIgd29ya2luZyB0cmVlLgorCXRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzIHJlZ2FyZGVkIGFzIHRoZSByb290IG9mIHRoZQorCXdvcmsgdHJlZS4KKysKK05vdGUgdGhhdCB0aGlzIHZhcmlhYmxlIGlzIGhvbm9yZWQgZXZlbiB3aGVuIHNldCBpbiBhIGNvbmZpZ3VyYXRpb24KK2ZpbGUgaW4gYSAiLmdpdCIgc3ViZGlyZWN0b3J5IG9mIGEgZGlyZWN0b3J5LCBhbmQgaXRzIHZhbHVlIGRpZmZlcnMKK2Zyb20gdGhlIGxhdHRlciBkaXJlY3RvcnkgKGUuZy4gIi9wYXRoL3RvLy5naXQvY29uZmlnIiBoYXMKK2NvcmUud29ya3RyZWUgc2V0IHRvICIvZGlmZmVyZW50L3BhdGgiKSwgd2hpY2ggaXMgbW9zdCBsaWtlbHkgYQorbWlzY29uZmlndXJhdGlvbi4gIFJ1bm5pbmcgZ2l0IGNvbW1hbmRzIGluICIvcGF0aC90byIgZGlyZWN0b3J5IHdpbGwKK3N0aWxsIHVzZSAiL2RpZmZlcmVudC9wYXRoIiBhcyB0aGUgcm9vdCBvZiB0aGUgd29yayB0cmVlIGFuZCBjYW4gY2F1c2UKK2dyZWF0IGNvbmZ1c2lvbiB0byB0aGUgdXNlcnMuCiAKIGNvcmUubG9nQWxsUmVmVXBkYXRlczo6CiAJRW5hYmxlIHRoZSByZWZsb2cuIFVwZGF0ZXMgdG8gYSByZWYgPHJlZj4gaXMgbG9nZ2VkIHRvIHRoZSBmaWxlCkBAIC0zNjEsMTkgKzQyMiwzMiBAQAogKwogQ29tbW9uIHVuaXQgc3VmZml4ZXMgb2YgJ2snLCAnbScsIG9yICdnJyBhcmUgc3VwcG9ydGVkLgogCitjb3JlLmJpZ0ZpbGVUaHJlc2hvbGQ6OgorCUZpbGVzIGxhcmdlciB0aGFuIHRoaXMgc2l6ZSBhcmUgc3RvcmVkIGRlZmxhdGVkLCB3aXRob3V0CisJYXR0ZW1wdGluZyBkZWx0YSBjb21wcmVzc2lvbi4gIFN0b3JpbmcgbGFyZ2UgZmlsZXMgd2l0aG91dAorCWRlbHRhIGNvbXByZXNzaW9uIGF2b2lkcyBleGNlc3NpdmUgbWVtb3J5IHVzYWdlLCBhdCB0aGUKKwlzbGlnaHQgZXhwZW5zZSBvZiBpbmNyZWFzZWQgZGlzayB1c2FnZS4KKysKK0RlZmF1bHQgaXMgNTEyIE1pQiBvbiBhbGwgcGxhdGZvcm1zLiAgVGhpcyBzaG91bGQgYmUgcmVhc29uYWJsZQorZm9yIG1vc3QgcHJvamVjdHMgYXMgc291cmNlIGNvZGUgYW5kIG90aGVyIHRleHQgZmlsZXMgY2FuIHN0aWxsCitiZSBkZWx0YSBjb21wcmVzc2VkLCBidXQgbGFyZ2VyIGJpbmFyeSBtZWRpYSBmaWxlcyB3b24ndCBiZS4KKysKK0NvbW1vbiB1bml0IHN1ZmZpeGVzIG9mICdrJywgJ20nLCBvciAnZycgYXJlIHN1cHBvcnRlZC4KKysKK0N1cnJlbnRseSBvbmx5IGxpbmtnaXQ6Z2l0LWZhc3QtaW1wb3J0WzFdIGhvbm9ycyB0aGlzIHNldHRpbmcuCisKIGNvcmUuZXhjbHVkZXNmaWxlOjoKIAlJbiBhZGRpdGlvbiB0byAnLmdpdGlnbm9yZScgKHBlci1kaXJlY3RvcnkpIGFuZAogCScuZ2l0L2luZm8vZXhjbHVkZScsIGdpdCBsb29rcyBpbnRvIHRoaXMgZmlsZSBmb3IgcGF0dGVybnMKLQlvZiBmaWxlcyB3aGljaCBhcmUgbm90IG1lYW50IHRvIGJlIHRyYWNrZWQuICBTZWUKLQlsaW5rZ2l0OmdpdGlnbm9yZVs1XS4KKwlvZiBmaWxlcyB3aGljaCBhcmUgbm90IG1lYW50IHRvIGJlIHRyYWNrZWQuICAie3RpbGRlfS8iIGlzIGV4cGFuZGVkCisJdG8gdGhlIHZhbHVlIG9mIGAkSE9NRWAgYW5kICJ7dGlsZGV9dXNlci8iIHRvIHRoZSBzcGVjaWZpZWQgdXNlcidzCisJaG9tZSBkaXJlY3RvcnkuICBTZWUgbGlua2dpdDpnaXRpZ25vcmVbNV0uCiAKIGNvcmUuZWRpdG9yOjoKIAlDb21tYW5kcyBzdWNoIGFzIGBjb21taXRgIGFuZCBgdGFnYCB0aGF0IGxldHMgeW91IGVkaXQKIAltZXNzYWdlcyBieSBsYXVuY2hpbmcgYW4gZWRpdG9yIHVzZXMgdGhlIHZhbHVlIG9mIHRoaXMKIAl2YXJpYWJsZSB3aGVuIGl0IGlzIHNldCwgYW5kIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQotCWBHSVRfRURJVE9SYCBpcyBub3Qgc2V0LiAgVGhlIG9yZGVyIG9mIHByZWZlcmVuY2UgaXMKLQlgR0lUX0VESVRPUmAgZW52aXJvbm1lbnQsIGBjb3JlLmVkaXRvcmAsIGBWSVNVQUxgIGFuZAotCWBFRElUT1JgIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgdGhlbiBmaW5hbGx5IGB2aWAuCisJYEdJVF9FRElUT1JgIGlzIG5vdCBzZXQuICBTZWUgbGlua2dpdDpnaXQtdmFyWzFdLgogCiBjb3JlLnBhZ2VyOjoKIAlUaGUgY29tbWFuZCB0aGF0IGdpdCB3aWxsIHVzZSB0byBwYWdpbmF0ZSBvdXRwdXQuICBDYW4KQEAgLTM5NSwxOCArNDY5LDIyIEBACiAKIGNvcmUud2hpdGVzcGFjZTo6CiAJQSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBjb21tb24gd2hpdGVzcGFjZSBwcm9ibGVtcyB0bwotCW5vdGljZS4gICdnaXQtZGlmZicgd2lsbCB1c2UgYGNvbG9yLmRpZmYud2hpdGVzcGFjZWAgdG8KLQloaWdobGlnaHQgdGhlbSwgYW5kICdnaXQtYXBwbHkgLS13aGl0ZXNwYWNlPWVycm9yJyB3aWxsCisJbm90aWNlLiAgJ2dpdCBkaWZmJyB3aWxsIHVzZSBgY29sb3IuZGlmZi53aGl0ZXNwYWNlYCB0bworCWhpZ2hsaWdodCB0aGVtLCBhbmQgJ2dpdCBhcHBseSAtLXdoaXRlc3BhY2U9ZXJyb3InIHdpbGwKIAljb25zaWRlciB0aGVtIGFzIGVycm9ycy4gIFlvdSBjYW4gcHJlZml4IGAtYCB0byBkaXNhYmxlCiAJYW55IG9mIHRoZW0gKGUuZy4gYC10cmFpbGluZy1zcGFjZWApOgogKwotKiBgdHJhaWxpbmctc3BhY2VgIHRyZWF0cyB0cmFpbGluZyB3aGl0ZXNwYWNlcyBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lCisqIGBibGFuay1hdC1lb2xgIHRyZWF0cyB0cmFpbGluZyB3aGl0ZXNwYWNlcyBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lCiAgIGFzIGFuIGVycm9yIChlbmFibGVkIGJ5IGRlZmF1bHQpLgogKiBgc3BhY2UtYmVmb3JlLXRhYmAgdHJlYXRzIGEgc3BhY2UgY2hhcmFjdGVyIHRoYXQgYXBwZWFycyBpbW1lZGlhdGVseQogICBiZWZvcmUgYSB0YWIgY2hhcmFjdGVyIGluIHRoZSBpbml0aWFsIGluZGVudCBwYXJ0IG9mIHRoZSBsaW5lIGFzIGFuCiAgIGVycm9yIChlbmFibGVkIGJ5IGRlZmF1bHQpLgogKiBgaW5kZW50LXdpdGgtbm9uLXRhYmAgdHJlYXRzIGEgbGluZSB0aGF0IGlzIGluZGVudGVkIHdpdGggOCBvciBtb3JlCiAgIHNwYWNlIGNoYXJhY3RlcnMgYXMgYW4gZXJyb3IgKG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQpLgorKiBgYmxhbmstYXQtZW9mYCB0cmVhdHMgYmxhbmsgbGluZXMgYWRkZWQgYXQgdGhlIGVuZCBvZiBmaWxlIGFzIGFuIGVycm9yCisgIChlbmFibGVkIGJ5IGRlZmF1bHQpLgorKiBgdHJhaWxpbmctc3BhY2VgIGlzIGEgc2hvcnQtaGFuZCB0byBjb3ZlciBib3RoIGBibGFuay1hdC1lb2xgIGFuZAorICBgYmxhbmstYXQtZW9mYC4KICogYGNyLWF0LWVvbGAgdHJlYXRzIGEgY2FycmlhZ2UtcmV0dXJuIGF0IHRoZSBlbmQgb2YgbGluZSBhcwogICBwYXJ0IG9mIHRoZSBsaW5lIHRlcm1pbmF0b3IsIGkuZS4gd2l0aCBpdCwgYHRyYWlsaW5nLXNwYWNlYAogICBkb2VzIG5vdCB0cmlnZ2VyIGlmIHRoZSBjaGFyYWN0ZXIgYmVmb3JlIHN1Y2ggYSBjYXJyaWFnZS1yZXR1cm4KQEAgLTQzOCw4ICs1MTYsMjUgQEAKIFNldCB0aGlzIGNvbmZpZyBzZXR0aW5nIHRvICdyZW5hbWUnIHRoZXJlOyBIb3dldmVyLCBUaGlzIHdpbGwgcmVtb3ZlIHRoZQogY2hlY2sgdGhhdCBtYWtlcyBzdXJlIHRoYXQgZXhpc3Rpbmcgb2JqZWN0IGZpbGVzIHdpbGwgbm90IGdldCBvdmVyd3JpdHRlbi4KIAorY29yZS5ub3Rlc1JlZjo6CisJV2hlbiBzaG93aW5nIGNvbW1pdCBtZXNzYWdlcywgYWxzbyBzaG93IG5vdGVzIHdoaWNoIGFyZSBzdG9yZWQgaW4KKwl0aGUgZ2l2ZW4gcmVmLiAgVGhpcyByZWYgaXMgZXhwZWN0ZWQgdG8gY29udGFpbiBmaWxlcyBuYW1lZAorCWFmdGVyIHRoZSBmdWxsIFNIQS0xIG9mIHRoZSBjb21taXQgdGhleSBhbm5vdGF0ZS4KKysKK0lmIHN1Y2ggYSBmaWxlIGV4aXN0cyBpbiB0aGUgZ2l2ZW4gcmVmLCB0aGUgcmVmZXJlbmNlZCBibG9iIGlzIHJlYWQsIGFuZAorYXBwZW5kZWQgdG8gdGhlIGNvbW1pdCBtZXNzYWdlLCBzZXBhcmF0ZWQgYnkgYSAiTm90ZXM6IiBsaW5lLiAgSWYgdGhlCitnaXZlbiByZWYgaXRzZWxmIGRvZXMgbm90IGV4aXN0LCBpdCBpcyBub3QgYW4gZXJyb3IsIGJ1dCBtZWFucyB0aGF0IG5vCitub3RlcyBzaG91bGQgYmUgcHJpbnRlZC4KKysKK1RoaXMgc2V0dGluZyBkZWZhdWx0cyB0byAicmVmcy9ub3Rlcy9jb21taXRzIiwgYW5kIGNhbiBiZSBvdmVycmlkZGVuIGJ5Cit0aGUgYEdJVF9OT1RFU19SRUZgIGVudmlyb25tZW50IHZhcmlhYmxlLgorCitjb3JlLnNwYXJzZUNoZWNrb3V0OjoKKwlFbmFibGUgInNwYXJzZSBjaGVja291dCIgZmVhdHVyZS4gU2VlIHNlY3Rpb24gIlNwYXJzZSBjaGVja291dCIgaW4KKwlsaW5rZ2l0OmdpdC1yZWFkLXRyZWVbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKIGFkZC5pZ25vcmUtZXJyb3JzOjoKLQlUZWxscyAnZ2l0LWFkZCcgdG8gY29udGludWUgYWRkaW5nIGZpbGVzIHdoZW4gc29tZSBmaWxlcyBjYW5ub3QgYmUKKwlUZWxscyAnZ2l0IGFkZCcgdG8gY29udGludWUgYWRkaW5nIGZpbGVzIHdoZW4gc29tZSBmaWxlcyBjYW5ub3QgYmUKIAlhZGRlZCBkdWUgdG8gaW5kZXhpbmcgZXJyb3JzLiBFcXVpdmFsZW50IHRvIHRoZSAnLS1pZ25vcmUtZXJyb3JzJwogCW9wdGlvbiBvZiBsaW5rZ2l0OmdpdC1hZGRbMV0uCiAKQEAgLTQ2MCwxMiArNTU1LDIwIEBACiBleGVjdXRlZCBmcm9tIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIGEgcmVwb3NpdG9yeSwgd2hpY2ggbWF5CiBub3QgbmVjZXNzYXJpbHkgYmUgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgogCithcHBseS5pZ25vcmV3aGl0ZXNwYWNlOjoKKwlXaGVuIHNldCB0byAnY2hhbmdlJywgdGVsbHMgJ2dpdCBhcHBseScgdG8gaWdub3JlIGNoYW5nZXMgaW4KKwl3aGl0ZXNwYWNlLCBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlICctLWlnbm9yZS1zcGFjZS1jaGFuZ2UnCisJb3B0aW9uLgorCVdoZW4gc2V0IHRvIG9uZSBvZjogbm8sIG5vbmUsIG5ldmVyLCBmYWxzZSB0ZWxscyAnZ2l0IGFwcGx5JyB0bworCXJlc3BlY3QgYWxsIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMuCisJU2VlIGxpbmtnaXQ6Z2l0LWFwcGx5WzFdLgorCiBhcHBseS53aGl0ZXNwYWNlOjoKLQlUZWxscyAnZ2l0LWFwcGx5JyBob3cgdG8gaGFuZGxlIHdoaXRlc3BhY2VzLCBpbiB0aGUgc2FtZSB3YXkKKwlUZWxscyAnZ2l0IGFwcGx5JyBob3cgdG8gaGFuZGxlIHdoaXRlc3BhY2VzLCBpbiB0aGUgc2FtZSB3YXkKIAlhcyB0aGUgJy0td2hpdGVzcGFjZScgb3B0aW9uLiBTZWUgbGlua2dpdDpnaXQtYXBwbHlbMV0uCiAKIGJyYW5jaC5hdXRvc2V0dXBtZXJnZTo6Ci0JVGVsbHMgJ2dpdC1icmFuY2gnIGFuZCAnZ2l0LWNoZWNrb3V0JyB0byBzZXR1cCBuZXcgYnJhbmNoZXMKKwlUZWxscyAnZ2l0IGJyYW5jaCcgYW5kICdnaXQgY2hlY2tvdXQnIHRvIHNldCB1cCBuZXcgYnJhbmNoZXMKIAlzbyB0aGF0IGxpbmtnaXQ6Z2l0LXB1bGxbMV0gd2lsbCBhcHByb3ByaWF0ZWx5IG1lcmdlIGZyb20gdGhlCiAJc3RhcnRpbmcgcG9pbnQgYnJhbmNoLiBOb3RlIHRoYXQgZXZlbiBpZiB0aGlzIG9wdGlvbiBpcyBub3Qgc2V0LAogCXRoaXMgYmVoYXZpb3IgY2FuIGJlIGNob3NlbiBwZXItYnJhbmNoIHVzaW5nIHRoZSBgLS10cmFja2AKQEAgLTQ3Niw3ICs1NzksNyBAQAogCWJyYW5jaC4gVGhpcyBvcHRpb24gZGVmYXVsdHMgdG8gdHJ1ZS4KIAogYnJhbmNoLmF1dG9zZXR1cHJlYmFzZTo6Ci0JV2hlbiBhIG5ldyBicmFuY2ggaXMgY3JlYXRlZCB3aXRoICdnaXQtYnJhbmNoJyBvciAnZ2l0LWNoZWNrb3V0JworCVdoZW4gYSBuZXcgYnJhbmNoIGlzIGNyZWF0ZWQgd2l0aCAnZ2l0IGJyYW5jaCcgb3IgJ2dpdCBjaGVja291dCcKIAl0aGF0IHRyYWNrcyBhbm90aGVyIGJyYW5jaCwgdGhpcyB2YXJpYWJsZSB0ZWxscyBnaXQgdG8gc2V0CiAJdXAgcHVsbCB0byByZWJhc2UgaW5zdGVhZCBvZiBtZXJnZSAoc2VlICJicmFuY2guPG5hbWU+LnJlYmFzZSIpLgogCVdoZW4gYG5ldmVyYCwgcmViYXNlIGlzIG5ldmVyIGF1dG9tYXRpY2FsbHkgc2V0IHRvIHRydWUuCkBAIC00OTEsMzEgKzU5NCwzMSBAQAogCVRoaXMgb3B0aW9uIGRlZmF1bHRzIHRvIG5ldmVyLgogCiBicmFuY2guPG5hbWU+LnJlbW90ZTo6Ci0JV2hlbiBpbiBicmFuY2ggPG5hbWU+LCBpdCB0ZWxscyAnZ2l0LWZldGNoJyBhbmQgJ2dpdC1wdXNoJyB3aGljaAorCVdoZW4gaW4gYnJhbmNoIDxuYW1lPiwgaXQgdGVsbHMgJ2dpdCBmZXRjaCcgYW5kICdnaXQgcHVzaCcgd2hpY2gKIAlyZW1vdGUgdG8gZmV0Y2ggZnJvbS9wdXNoIHRvLiAgSXQgZGVmYXVsdHMgdG8gYG9yaWdpbmAgaWYgbm8gcmVtb3RlIGlzCiAJY29uZmlndXJlZC4gYG9yaWdpbmAgaXMgYWxzbyB1c2VkIGlmIHlvdSBhcmUgbm90IG9uIGFueSBicmFuY2guCiAKIGJyYW5jaC48bmFtZT4ubWVyZ2U6OgogCURlZmluZXMsIHRvZ2V0aGVyIHdpdGggYnJhbmNoLjxuYW1lPi5yZW1vdGUsIHRoZSB1cHN0cmVhbSBicmFuY2gKLQlmb3IgdGhlIGdpdmVuIGJyYW5jaC4gSXQgdGVsbHMgJ2dpdC1mZXRjaCcvJ2dpdC1wdWxsJyB3aGljaAotCWJyYW5jaCB0byBtZXJnZSBhbmQgY2FuIGFsc28gYWZmZWN0ICdnaXQtcHVzaCcgKHNlZSBwdXNoLmRlZmF1bHQpLgotCVdoZW4gaW4gYnJhbmNoIDxuYW1lPiwgaXQgdGVsbHMgJ2dpdC1mZXRjaCcgdGhlIGRlZmF1bHQKKwlmb3IgdGhlIGdpdmVuIGJyYW5jaC4gSXQgdGVsbHMgJ2dpdCBmZXRjaCcvJ2dpdCBwdWxsJyB3aGljaAorCWJyYW5jaCB0byBtZXJnZSBhbmQgY2FuIGFsc28gYWZmZWN0ICdnaXQgcHVzaCcgKHNlZSBwdXNoLmRlZmF1bHQpLgorCVdoZW4gaW4gYnJhbmNoIDxuYW1lPiwgaXQgdGVsbHMgJ2dpdCBmZXRjaCcgdGhlIGRlZmF1bHQKIAlyZWZzcGVjIHRvIGJlIG1hcmtlZCBmb3IgbWVyZ2luZyBpbiBGRVRDSF9IRUFELiBUaGUgdmFsdWUgaXMKIAloYW5kbGVkIGxpa2UgdGhlIHJlbW90ZSBwYXJ0IG9mIGEgcmVmc3BlYywgYW5kIG11c3QgbWF0Y2ggYQogCXJlZiB3aGljaCBpcyBmZXRjaGVkIGZyb20gdGhlIHJlbW90ZSBnaXZlbiBieQogCSJicmFuY2guPG5hbWU+LnJlbW90ZSIuCi0JVGhlIG1lcmdlIGluZm9ybWF0aW9uIGlzIHVzZWQgYnkgJ2dpdC1wdWxsJyAod2hpY2ggYXQgZmlyc3QgY2FsbHMKLQknZ2l0LWZldGNoJykgdG8gbG9va3VwIHRoZSBkZWZhdWx0IGJyYW5jaCBmb3IgbWVyZ2luZy4gV2l0aG91dAotCXRoaXMgb3B0aW9uLCAnZ2l0LXB1bGwnIGRlZmF1bHRzIHRvIG1lcmdlIHRoZSBmaXJzdCByZWZzcGVjIGZldGNoZWQuCisJVGhlIG1lcmdlIGluZm9ybWF0aW9uIGlzIHVzZWQgYnkgJ2dpdCBwdWxsJyAod2hpY2ggYXQgZmlyc3QgY2FsbHMKKwknZ2l0IGZldGNoJykgdG8gbG9va3VwIHRoZSBkZWZhdWx0IGJyYW5jaCBmb3IgbWVyZ2luZy4gV2l0aG91dAorCXRoaXMgb3B0aW9uLCAnZ2l0IHB1bGwnIGRlZmF1bHRzIHRvIG1lcmdlIHRoZSBmaXJzdCByZWZzcGVjIGZldGNoZWQuCiAJU3BlY2lmeSBtdWx0aXBsZSB2YWx1ZXMgdG8gZ2V0IGFuIG9jdG9wdXMgbWVyZ2UuCi0JSWYgeW91IHdpc2ggdG8gc2V0dXAgJ2dpdC1wdWxsJyBzbyB0aGF0IGl0IG1lcmdlcyBpbnRvIDxuYW1lPiBmcm9tCisJSWYgeW91IHdpc2ggdG8gc2V0dXAgJ2dpdCBwdWxsJyBzbyB0aGF0IGl0IG1lcmdlcyBpbnRvIDxuYW1lPiBmcm9tCiAJYW5vdGhlciBicmFuY2ggaW4gdGhlIGxvY2FsIHJlcG9zaXRvcnksIHlvdSBjYW4gcG9pbnQKIAlicmFuY2guPG5hbWU+Lm1lcmdlIHRvIHRoZSBkZXNpcmVkIGJyYW5jaCwgYW5kIHVzZSB0aGUgc3BlY2lhbCBzZXR0aW5nCiAJYC5gIChhIHBlcmlvZCkgZm9yIGJyYW5jaC48bmFtZT4ucmVtb3RlLgogCiBicmFuY2guPG5hbWU+Lm1lcmdlb3B0aW9uczo6CiAJU2V0cyBkZWZhdWx0IG9wdGlvbnMgZm9yIG1lcmdpbmcgaW50byBicmFuY2ggPG5hbWU+LiBUaGUgc3ludGF4IGFuZAotCXN1cHBvcnRlZCBvcHRpb25zIGFyZSBlcXVhbCB0byB0aGF0IG9mIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdLCBidXQKKwlzdXBwb3J0ZWQgb3B0aW9ucyBhcmUgdGhlIHNhbWUgYXMgdGhvc2Ugb2YgbGlua2dpdDpnaXQtbWVyZ2VbMV0sIGJ1dAogCW9wdGlvbiB2YWx1ZXMgY29udGFpbmluZyB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYXJlIGN1cnJlbnRseSBub3QKIAlzdXBwb3J0ZWQuCiAKQEAgLTU3MCwyOSArNjczLDE5IEBACiAJVXNlIGN1c3RvbWl6ZWQgY29sb3IgZm9yIGRpZmYgY29sb3JpemF0aW9uLiAgYDxzbG90PmAgc3BlY2lmaWVzCiAJd2hpY2ggcGFydCBvZiB0aGUgcGF0Y2ggdG8gdXNlIHRoZSBzcGVjaWZpZWQgY29sb3IsIGFuZCBpcyBvbmUKIAlvZiBgcGxhaW5gIChjb250ZXh0IHRleHQpLCBgbWV0YWAgKG1ldGFpbmZvcm1hdGlvbiksIGBmcmFnYAotCShodW5rIGhlYWRlciksIGBvbGRgIChyZW1vdmVkIGxpbmVzKSwgYG5ld2AgKGFkZGVkIGxpbmVzKSwKLQlgY29tbWl0YCAoY29tbWl0IGhlYWRlcnMpLCBvciBgd2hpdGVzcGFjZWAgKGhpZ2hsaWdodGluZwotCXdoaXRlc3BhY2UgZXJyb3JzKS4gVGhlIHZhbHVlcyBvZiB0aGVzZSB2YXJpYWJsZXMgbWF5IGJlIHNwZWNpZmllZCBhcwotCWluIGNvbG9yLmJyYW5jaC48c2xvdD4uCisJKGh1bmsgaGVhZGVyKSwgJ2Z1bmMnIChmdW5jdGlvbiBpbiBodW5rIGhlYWRlciksIGBvbGRgIChyZW1vdmVkIGxpbmVzKSwKKwlgbmV3YCAoYWRkZWQgbGluZXMpLCBgY29tbWl0YCAoY29tbWl0IGhlYWRlcnMpLCBvciBgd2hpdGVzcGFjZWAKKwkoaGlnaGxpZ2h0aW5nIHdoaXRlc3BhY2UgZXJyb3JzKS4gVGhlIHZhbHVlcyBvZiB0aGVzZSB2YXJpYWJsZXMgbWF5IGJlCisJc3BlY2lmaWVkIGFzIGluIGNvbG9yLmJyYW5jaC48c2xvdD4uCiAKIGNvbG9yLmdyZXA6OgogCVdoZW4gc2V0IHRvIGBhbHdheXNgLCBhbHdheXMgaGlnaGxpZ2h0IG1hdGNoZXMuICBXaGVuIGBmYWxzZWAgKG9yCiAJYG5ldmVyYCksIG5ldmVyLiAgV2hlbiBzZXQgdG8gYHRydWVgIG9yIGBhdXRvYCwgdXNlIGNvbG9yIG9ubHkKIAl3aGVuIHRoZSBvdXRwdXQgaXMgd3JpdHRlbiB0byB0aGUgdGVybWluYWwuICBEZWZhdWx0cyB0byBgZmFsc2VgLgogCi1jb2xvci5ncmVwLmV4dGVybmFsOjoKLQlUaGUgc3RyaW5nIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMgcGFzc2VkIHRvIGFuIGV4dGVybmFsICdncmVwJwotCWNvbW1hbmQgYXMgYSBjb21tYW5kIGxpbmUgb3B0aW9uIGlmIG1hdGNoIGhpZ2hsaWdodGluZyBpcyB0dXJuZWQKLQlvbi4gIElmIHNldCB0byBhbiBlbXB0eSBzdHJpbmcsIG5vIG9wdGlvbiBpcyBwYXNzZWQgYXQgYWxsLAotCXR1cm5pbmcgb2ZmIGNvbG9yaW5nIGZvciBleHRlcm5hbCAnZ3JlcCcgY2FsbHM7IHRoaXMgaXMgdGhlIGRlZmF1bHQuCi0JRm9yIEdOVSBncmVwLCBzZXQgaXQgdG8gYC0tY29sb3I9YWx3YXlzYCB0byBoaWdobGlnaHQgbWF0Y2hlcyBldmVuCi0Jd2hlbiBhIHBhZ2VyIGlzIHVzZWQuCi0KIGNvbG9yLmdyZXAubWF0Y2g6OgogCVVzZSBjdXN0b21pemVkIGNvbG9yIGZvciBtYXRjaGVzLiAgVGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUKLQltYXkgYmUgc3BlY2lmaWVkIGFzIGluIGNvbG9yLmJyYW5jaC48c2xvdD4uICBJdCBpcyBwYXNzZWQgdXNpbmcKLQl0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzICdHUkVQX0NPTE9SJyBhbmQgJ0dSRVBfQ09MT1JTJyB3aGVuCi0JY2FsbGluZyBhbiBleHRlcm5hbCAnZ3JlcCcuCisJbWF5IGJlIHNwZWNpZmllZCBhcyBpbiBjb2xvci5icmFuY2guPHNsb3Q+LgogCiBjb2xvci5pbnRlcmFjdGl2ZTo6CiAJV2hlbiBzZXQgdG8gYGFsd2F5c2AsIGFsd2F5cyB1c2UgY29sb3JzIGZvciBpbnRlcmFjdGl2ZSBwcm9tcHRzCkBAIC02MDEsNyArNjk0LDcgQEAKIAljb2xvcnMgb25seSB3aGVuIHRoZSBvdXRwdXQgaXMgdG8gdGhlIHRlcm1pbmFsLiBEZWZhdWx0cyB0byBmYWxzZS4KIAogY29sb3IuaW50ZXJhY3RpdmUuPHNsb3Q+OjoKLQlVc2UgY3VzdG9taXplZCBjb2xvciBmb3IgJ2dpdC1hZGQgLS1pbnRlcmFjdGl2ZScKKwlVc2UgY3VzdG9taXplZCBjb2xvciBmb3IgJ2dpdCBhZGQgLS1pbnRlcmFjdGl2ZScKIAlvdXRwdXQuIGA8c2xvdD5gIG1heSBiZSBgcHJvbXB0YCwgYGhlYWRlcmAsIGBoZWxwYCBvciBgZXJyb3JgLCBmb3IKIAlmb3VyIGRpc3RpbmN0IHR5cGVzIG9mIG5vcm1hbCBvdXRwdXQgZnJvbSBpbnRlcmFjdGl2ZQogCWNvbW1hbmRzLiAgVGhlIHZhbHVlcyBvZiB0aGVzZSB2YXJpYWJsZXMgbWF5IGJlIHNwZWNpZmllZCBhcwpAQCAtNjExLDYgKzcwNCwxMiBAQAogCUEgYm9vbGVhbiB0byBlbmFibGUvZGlzYWJsZSBjb2xvcmVkIG91dHB1dCB3aGVuIHRoZSBwYWdlciBpcyBpbgogCXVzZSAoZGVmYXVsdCBpcyB0cnVlKS4KIAorY29sb3Iuc2hvd2JyYW5jaDo6CisJQSBib29sZWFuIHRvIGVuYWJsZS9kaXNhYmxlIGNvbG9yIGluIHRoZSBvdXRwdXQgb2YKKwlsaW5rZ2l0OmdpdC1zaG93LWJyYW5jaFsxXS4gTWF5IGJlIHNldCB0byBgYWx3YXlzYCwKKwlgZmFsc2VgIChvciBgbmV2ZXJgKSBvciBgYXV0b2AgKG9yIGB0cnVlYCksIGluIHdoaWNoIGNhc2UgY29sb3JzIGFyZSB1c2VkCisJb25seSB3aGVuIHRoZSBvdXRwdXQgaXMgdG8gYSB0ZXJtaW5hbC4gRGVmYXVsdHMgdG8gZmFsc2UuCisKIGNvbG9yLnN0YXR1czo6CiAJQSBib29sZWFuIHRvIGVuYWJsZS9kaXNhYmxlIGNvbG9yIGluIHRoZSBvdXRwdXQgb2YKIAlsaW5rZ2l0OmdpdC1zdGF0dXNbMV0uIE1heSBiZSBzZXQgdG8gYGFsd2F5c2AsCkBAIC02MzQsMTggKzczMywyNSBAQAogCXRlcm1pbmFsLiBXaGVuIG1vcmUgc3BlY2lmaWMgdmFyaWFibGVzIG9mIGNvbG9yLiogYXJlIHNldCwgdGhleSBhbHdheXMKIAl0YWtlIHByZWNlZGVuY2Ugb3ZlciB0aGlzIHNldHRpbmcuIERlZmF1bHRzIHRvIGZhbHNlLgogCitjb21taXQuc3RhdHVzOjoKKwlBIGJvb2xlYW4gdG8gZW5hYmxlL2Rpc2FibGUgaW5jbHVzaW9uIG9mIHN0YXR1cyBpbmZvcm1hdGlvbiBpbiB0aGUKKwljb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSB3aGVuIHVzaW5nIGFuIGVkaXRvciB0byBwcmVwYXJlIHRoZSBjb21taXQKKwltZXNzYWdlLiAgRGVmYXVsdHMgdG8gdHJ1ZS4KKwogY29tbWl0LnRlbXBsYXRlOjoKIAlTcGVjaWZ5IGEgZmlsZSB0byB1c2UgYXMgdGhlIHRlbXBsYXRlIGZvciBuZXcgY29tbWl0IG1lc3NhZ2VzLgorCSJ7dGlsZGV9LyIgaXMgZXhwYW5kZWQgdG8gdGhlIHZhbHVlIG9mIGAkSE9NRWAgYW5kICJ7dGlsZGV9dXNlci8iIHRvIHRoZQorCXNwZWNpZmllZCB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkuCiAKIGRpZmYuYXV0b3JlZnJlc2hpbmRleDo6Ci0JV2hlbiB1c2luZyAnZ2l0LWRpZmYnIHRvIGNvbXBhcmUgd2l0aCB3b3JrIHRyZWUKKwlXaGVuIHVzaW5nICdnaXQgZGlmZicgdG8gY29tcGFyZSB3aXRoIHdvcmsgdHJlZQogCWZpbGVzLCBkbyBub3QgY29uc2lkZXIgc3RhdC1vbmx5IGNoYW5nZSBhcyBjaGFuZ2VkLgogCUluc3RlYWQsIHNpbGVudGx5IHJ1biBgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2hgIHRvCiAJdXBkYXRlIHRoZSBjYWNoZWQgc3RhdCBpbmZvcm1hdGlvbiBmb3IgcGF0aHMgd2hvc2UKIAljb250ZW50cyBpbiB0aGUgd29yayB0cmVlIG1hdGNoIHRoZSBjb250ZW50cyBpbiB0aGUKIAlpbmRleC4gIFRoaXMgb3B0aW9uIGRlZmF1bHRzIHRvIHRydWUuICBOb3RlIHRoYXQgdGhpcwotCWFmZmVjdHMgb25seSAnZ2l0LWRpZmYnIFBvcmNlbGFpbiwgYW5kIG5vdCBsb3dlciBsZXZlbAotCSdkaWZmJyBjb21tYW5kcywgc3VjaCBhcyAnZ2l0LWRpZmYtZmlsZXMnLgorCWFmZmVjdHMgb25seSAnZ2l0IGRpZmYnIFBvcmNlbGFpbiwgYW5kIG5vdCBsb3dlciBsZXZlbAorCSdkaWZmJyBjb21tYW5kcyBzdWNoIGFzICdnaXQgZGlmZi1maWxlcycuCiAKIGRpZmYuZXh0ZXJuYWw6OgogCUlmIHRoaXMgY29uZmlnIHZhcmlhYmxlIGlzIHNldCwgZGlmZiBnZW5lcmF0aW9uIGlzIG5vdApAQCAtNjU3LDI0ICs3NjMsMjQgQEAKIAl5b3VyIGZpbGVzLCB5b3UJbWlnaHQgd2FudCB0byB1c2UgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGluc3RlYWQuCiAKIGRpZmYubW5lbW9uaWNwcmVmaXg6OgotCUlmIHNldCwgJ2dpdC1kaWZmJyB1c2VzIGEgcHJlZml4IHBhaXIgdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUKKwlJZiBzZXQsICdnaXQgZGlmZicgdXNlcyBhIHByZWZpeCBwYWlyIHRoYXQgaXMgZGlmZmVyZW50IGZyb20gdGhlCiAJc3RhbmRhcmQgImEvIiBhbmQgImIvIiBkZXBlbmRpbmcgb24gd2hhdCBpcyBiZWluZyBjb21wYXJlZC4gIFdoZW4KIAl0aGlzIGNvbmZpZ3VyYXRpb24gaXMgaW4gZWZmZWN0LCByZXZlcnNlIGRpZmYgb3V0cHV0IGFsc28gc3dhcHMKIAl0aGUgb3JkZXIgb2YgdGhlIHByZWZpeGVzOgotJ2dpdC1kaWZmJzs7CitgZ2l0IGRpZmZgOzsKIAljb21wYXJlcyB0aGUgKGkpbmRleCBhbmQgdGhlICh3KW9yayB0cmVlOwotJ2dpdC1kaWZmIEhFQUQnOzsKK2BnaXQgZGlmZiBIRUFEYDs7CiAJIGNvbXBhcmVzIGEgKGMpb21taXQgYW5kIHRoZSAodylvcmsgdHJlZTsKLSdnaXQgZGlmZiAtLWNhY2hlZCc7OworYGdpdCBkaWZmIC0tY2FjaGVkYDs7CiAJY29tcGFyZXMgYSAoYylvbW1pdCBhbmQgdGhlIChpKW5kZXg7Ci0nZ2l0LWRpZmYgSEVBRDpmaWxlMSBmaWxlMic7OworYGdpdCBkaWZmIEhFQUQ6ZmlsZTEgZmlsZTJgOzsKIAljb21wYXJlcyBhbiAobyliamVjdCBhbmQgYSAodylvcmsgdHJlZSBlbnRpdHk7Ci0nZ2l0IGRpZmYgLS1uby1pbmRleCBhIGInOzsKK2BnaXQgZGlmZiAtLW5vLWluZGV4IGEgYmA7OwogCWNvbXBhcmVzIHR3byBub24tZ2l0IHRoaW5ncyAoMSkgYW5kICgyKS4KIAogZGlmZi5yZW5hbWVMaW1pdDo6CiAJVGhlIG51bWJlciBvZiBmaWxlcyB0byBjb25zaWRlciB3aGVuIHBlcmZvcm1pbmcgdGhlIGNvcHkvcmVuYW1lCi0JZGV0ZWN0aW9uOyBlcXVpdmFsZW50IHRvIHRoZSAnZ2l0LWRpZmYnIG9wdGlvbiAnLWwnLgorCWRldGVjdGlvbjsgZXF1aXZhbGVudCB0byB0aGUgJ2dpdCBkaWZmJyBvcHRpb24gJy1sJy4KIAogZGlmZi5yZW5hbWVzOjoKIAlUZWxscyBnaXQgdG8gZGV0ZWN0IHJlbmFtZXMuICBJZiBzZXQgdG8gYW55IGJvb2xlYW4gdmFsdWUsIGl0CkBAIC03NjAsOSArODY2LDkgQEAKIAlsaW5rZ2l0OmdpdC13aGF0Y2hhbmdlZFsxXS4KIAogZm9ybWF0LnRocmVhZDo6Ci0JVGhlIGRlZmF1bHQgdGhyZWFkaW5nIHN0eWxlIGZvciAnZ2l0LWZvcm1hdC1wYXRjaCcuICBDYW4gYmUKLQllaXRoZXIgYSBib29sZWFuIHZhbHVlLCBgc2hhbGxvd2Agb3IgYGRlZXBgLiAgYHNoYWxsb3dgCi0JdGhyZWFkaW5nIG1ha2VzIGV2ZXJ5IG1haWwgYSByZXBseSB0byB0aGUgaGVhZCBvZiB0aGUgc2VyaWVzLAorCVRoZSBkZWZhdWx0IHRocmVhZGluZyBzdHlsZSBmb3IgJ2dpdCBmb3JtYXQtcGF0Y2gnLiAgQ2FuIGJlCisJYSBib29sZWFuIHZhbHVlLCBvciBgc2hhbGxvd2Agb3IgYGRlZXBgLiAgYHNoYWxsb3dgIHRocmVhZGluZworCW1ha2VzIGV2ZXJ5IG1haWwgYSByZXBseSB0byB0aGUgaGVhZCBvZiB0aGUgc2VyaWVzLAogCXdoZXJlIHRoZSBoZWFkIGlzIGNob3NlbiBmcm9tIHRoZSBjb3ZlciBsZXR0ZXIsIHRoZQogCWBcLS1pbi1yZXBseS10b2AsIGFuZCB0aGUgZmlyc3QgcGF0Y2ggbWFpbCwgaW4gdGhpcyBvcmRlci4KIAlgZGVlcGAgdGhyZWFkaW5nIG1ha2VzIGV2ZXJ5IG1haWwgYSByZXBseSB0byB0aGUgcHJldmlvdXMgb25lLgpAQCAtNzc4LDcgKzg4NCw3IEBACiAKIGdjLmFnZ3Jlc3NpdmVXaW5kb3c6OgogCVRoZSB3aW5kb3cgc2l6ZSBwYXJhbWV0ZXIgdXNlZCBpbiB0aGUgZGVsdGEgY29tcHJlc3Npb24KLQlhbGdvcml0aG0gdXNlZCBieSAnZ2l0LWdjIC0tYWdncmVzc2l2ZScuICBUaGlzIGRlZmF1bHRzCisJYWxnb3JpdGhtIHVzZWQgYnkgJ2dpdCBnYyAtLWFnZ3Jlc3NpdmUnLiAgVGhpcyBkZWZhdWx0cwogCXRvIDEwLgogCiBnYy5hdXRvOjoKQEAgLTc5NSwzOSArOTAxLDM2IEBACiAJZGVmYXVsdAl2YWx1ZSBpcyA1MC4gIFNldHRpbmcgdGhpcyB0byAwIGRpc2FibGVzIGl0LgogCiBnYy5wYWNrcmVmczo6Ci0JJ2dpdC1nYycgZG9lcyBub3QgcnVuIGBnaXQgcGFjay1yZWZzYCBpbiBhIGJhcmUgcmVwb3NpdG9yeSBieQotCWRlZmF1bHQgc28gdGhhdCBvbGRlciBkdW1iLXRyYW5zcG9ydCBjbGllbnRzIGNhbiBzdGlsbCBmZXRjaAotCWZyb20gdGhlIHJlcG9zaXRvcnkuICBTZXR0aW5nIHRoaXMgdG8gYHRydWVgIGxldHMgJ2dpdC1nYycKLQl0byBydW4gYGdpdCBwYWNrLXJlZnNgLiAgU2V0dGluZyB0aGlzIHRvIGBmYWxzZWAgdGVsbHMKLQknZ2l0LWdjJyBuZXZlciB0byBydW4gYGdpdCBwYWNrLXJlZnNgLiBUaGUgZGVmYXVsdCBzZXR0aW5nIGlzCi0JYG5vdGJhcmVgLiBFbmFibGUgaXQgb25seSB3aGVuIHlvdSBrbm93IHlvdSBkbyBub3QgaGF2ZSB0bwotCXN1cHBvcnQgc3VjaCBjbGllbnRzLiAgVGhlIGRlZmF1bHQgc2V0dGluZyB3aWxsIGNoYW5nZSB0byBgdHJ1ZWAKLQlhdCBzb21lIHN0YWdlLCBhbmQgc2V0dGluZyB0aGlzIHRvIGBmYWxzZWAgd2lsbCBjb250aW51ZSB0bwotCXByZXZlbnQgYGdpdCBwYWNrLXJlZnNgIGZyb20gYmVpbmcgcnVuIGZyb20gJ2dpdC1nYycuCisJUnVubmluZyBgZ2l0IHBhY2stcmVmc2AgaW4gYSByZXBvc2l0b3J5IHJlbmRlcnMgaXQKKwl1bmNsb25hYmxlIGJ5IEdpdCB2ZXJzaW9ucyBwcmlvciB0byAxLjUuMS4yIG92ZXIgZHVtYgorCXRyYW5zcG9ydHMgc3VjaCBhcyBIVFRQLiAgVGhpcyB2YXJpYWJsZSBkZXRlcm1pbmVzIHdoZXRoZXIKKwknZ2l0IGdjJyBydW5zIGBnaXQgcGFjay1yZWZzYC4gVGhpcyBjYW4gYmUgc2V0IHRvIGBub2JhcmVgCisJdG8gZW5hYmxlIGl0IHdpdGhpbiBhbGwgbm9uLWJhcmUgcmVwb3Mgb3IgaXQgY2FuIGJlIHNldCB0byBhCisJYm9vbGVhbiB2YWx1ZS4gIFRoZSBkZWZhdWx0IGlzIGB0cnVlYC4KIAogZ2MucHJ1bmVleHBpcmU6OgotCVdoZW4gJ2dpdC1nYycgaXMgcnVuLCBpdCB3aWxsIGNhbGwgJ3BydW5lIC0tZXhwaXJlIDIud2Vla3MuYWdvJy4KKwlXaGVuICdnaXQgZ2MnIGlzIHJ1biwgaXQgd2lsbCBjYWxsICdwcnVuZSAtLWV4cGlyZSAyLndlZWtzLmFnbycuCiAJT3ZlcnJpZGUgdGhlIGdyYWNlIHBlcmlvZCB3aXRoIHRoaXMgY29uZmlnIHZhcmlhYmxlLiAgVGhlIHZhbHVlCiAJIm5vdyIgbWF5IGJlIHVzZWQgdG8gZGlzYWJsZSB0aGlzICBncmFjZSBwZXJpb2QgYW5kIGFsd2F5cyBwcnVuZQogCXVucmVhY2hhYmxlIG9iamVjdHMgaW1tZWRpYXRlbHkuCiAKIGdjLnJlZmxvZ2V4cGlyZTo6Ci0JJ2dpdC1yZWZsb2cgZXhwaXJlJyByZW1vdmVzIHJlZmxvZyBlbnRyaWVzIG9sZGVyIHRoYW4KKwknZ2l0IHJlZmxvZyBleHBpcmUnIHJlbW92ZXMgcmVmbG9nIGVudHJpZXMgb2xkZXIgdGhhbgogCXRoaXMgdGltZTsgZGVmYXVsdHMgdG8gOTAgZGF5cy4KIAogZ2MucmVmbG9nZXhwaXJldW5yZWFjaGFibGU6OgotCSdnaXQtcmVmbG9nIGV4cGlyZScgcmVtb3ZlcyByZWZsb2cgZW50cmllcyBvbGRlciB0aGFuCisJJ2dpdCByZWZsb2cgZXhwaXJlJyByZW1vdmVzIHJlZmxvZyBlbnRyaWVzIG9sZGVyIHRoYW4KIAl0aGlzIHRpbWUgYW5kIGFyZSBub3QgcmVhY2hhYmxlIGZyb20gdGhlIGN1cnJlbnQgdGlwOwogCWRlZmF1bHRzIHRvIDMwIGRheXMuCiAKIGdjLnJlcmVyZXJlc29sdmVkOjoKIAlSZWNvcmRzIG9mIGNvbmZsaWN0ZWQgbWVyZ2UgeW91IHJlc29sdmVkIGVhcmxpZXIgYXJlCi0Ja2VwdCBmb3IgdGhpcyBtYW55IGRheXMgd2hlbiAnZ2l0LXJlcmVyZSBnYycgaXMgcnVuLgorCWtlcHQgZm9yIHRoaXMgbWFueSBkYXlzIHdoZW4gJ2dpdCByZXJlcmUgZ2MnIGlzIHJ1bi4KIAlUaGUgZGVmYXVsdCBpcyA2MCBkYXlzLiAgU2VlIGxpbmtnaXQ6Z2l0LXJlcmVyZVsxXS4KIAogZ2MucmVyZXJldW5yZXNvbHZlZDo6CiAJUmVjb3JkcyBvZiBjb25mbGljdGVkIG1lcmdlIHlvdSBoYXZlIG5vdCByZXNvbHZlZCBhcmUKLQlrZXB0IGZvciB0aGlzIG1hbnkgZGF5cyB3aGVuICdnaXQtcmVyZXJlIGdjJyBpcyBydW4uCisJa2VwdCBmb3IgdGhpcyBtYW55IGRheXMgd2hlbiAnZ2l0IHJlcmVyZSBnYycgaXMgcnVuLgogCVRoZSBkZWZhdWx0IGlzIDE1IGRheXMuICBTZWUgbGlua2dpdDpnaXQtcmVyZXJlWzFdLgogCiBnaXRjdnMuY29tbWl0bXNnYW5ub3RhdGlvbjo6CkBAIC05MzUsNyArMTAzOCw3IEBACiAJb2ZmLgogCiBndWkuZmFzdGNvcHlibGFtZTo6Ci0JSWYgdHJ1ZSwgJ2dpdCBndWkgYmxhbWUnIHVzZXMgJy1DJyBpbnN0ZWFkIG9mICctQyAtQycgZm9yIG9yaWdpbmFsCisJSWYgdHJ1ZSwgJ2dpdCBndWkgYmxhbWUnIHVzZXMgYC1DYCBpbnN0ZWFkIG9mIGAtQyAtQ2AgZm9yIG9yaWdpbmFsCiAJbG9jYXRpb24gZGV0ZWN0aW9uLiBJdCBtYWtlcyBibGFtZSBzaWduaWZpY2FudGx5IGZhc3RlciBvbiBodWdlCiAJcmVwb3NpdG9yaWVzIGF0IHRoZSBleHBlbnNlIG9mIGxlc3MgdGhvcm91Z2ggY29weSBkZXRlY3Rpb24uCiAKQEAgLTEwMzksNiArMTE0MiwxMiBAQAogCW92ZXIgSFRUUFMuIENhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSAnR0lUX1NTTF9LRVknIGVudmlyb25tZW50CiAJdmFyaWFibGUuCiAKK2h0dHAuc3NsQ2VydFBhc3N3b3JkUHJvdGVjdGVkOjoKKwlFbmFibGUgZ2l0J3MgcGFzc3dvcmQgcHJvbXB0IGZvciB0aGUgU1NMIGNlcnRpZmljYXRlLiAgT3RoZXJ3aXNlCisJT3BlblNTTCB3aWxsIHByb21wdCB0aGUgdXNlciwgcG9zc2libHkgbWFueSB0aW1lcywgaWYgdGhlCisJY2VydGlmaWNhdGUgb3IgcHJpdmF0ZSBrZXkgaXMgZW5jcnlwdGVkLiAgQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlCisJJ0dJVF9TU0xfQ0VSVF9QQVNTV09SRF9QUk9URUNURUQnIGVudmlyb25tZW50IHZhcmlhYmxlLgorCiBodHRwLnNzbENBSW5mbzo6CiAJRmlsZSBjb250YWluaW5nIHRoZSBjZXJ0aWZpY2F0ZXMgdG8gdmVyaWZ5IHRoZSBwZWVyIHdpdGggd2hlbgogCWZldGNoaW5nIG9yIHB1c2hpbmcgb3ZlciBIVFRQUy4gQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlCkBAIC0xMDUzLDYgKzExNjIsMjAgQEAKIAlIb3cgbWFueSBIVFRQIHJlcXVlc3RzIHRvIGxhdW5jaCBpbiBwYXJhbGxlbC4gQ2FuIGJlIG92ZXJyaWRkZW4KIAlieSB0aGUgJ0dJVF9IVFRQX01BWF9SRVFVRVNUUycgZW52aXJvbm1lbnQgdmFyaWFibGUuIERlZmF1bHQgaXMgNS4KIAoraHR0cC5taW5TZXNzaW9uczo6CisJVGhlIG51bWJlciBvZiBjdXJsIHNlc3Npb25zIChjb3VudGVkIGFjcm9zcyBzbG90cykgdG8gYmUga2VwdCBhY3Jvc3MKKwlyZXF1ZXN0cy4gVGhleSB3aWxsIG5vdCBiZSBlbmRlZCB3aXRoIGN1cmxfZWFzeV9jbGVhbnVwKCkgdW50aWwKKwlodHRwX2NsZWFudXAoKSBpcyBpbnZva2VkLiBJZiBVU0VfQ1VSTF9NVUxUSSBpcyBub3QgZGVmaW5lZCwgdGhpcworCXZhbHVlIHdpbGwgYmUgY2FwcGVkIGF0IDEuIERlZmF1bHRzIHRvIDEuCisKK2h0dHAucG9zdEJ1ZmZlcjo6CisJTWF4aW11bSBzaXplIGluIGJ5dGVzIG9mIHRoZSBidWZmZXIgdXNlZCBieSBzbWFydCBIVFRQCisJdHJhbnNwb3J0cyB3aGVuIFBPU1RpbmcgZGF0YSB0byB0aGUgcmVtb3RlIHN5c3RlbS4KKwlGb3IgcmVxdWVzdHMgbGFyZ2VyIHRoYW4gdGhpcyBidWZmZXIgc2l6ZSwgSFRUUC8xLjEgYW5kCisJVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQgaXMgdXNlZCB0byBhdm9pZCBjcmVhdGluZyBhCisJbWFzc2l2ZSBwYWNrIGZpbGUgbG9jYWxseS4gIERlZmF1bHQgaXMgMSBNaUIsIHdoaWNoIGlzCisJc3VmZmljaWVudCBmb3IgbW9zdCByZXF1ZXN0cy4KKwogaHR0cC5sb3dTcGVlZExpbWl0LCBodHRwLmxvd1NwZWVkVGltZTo6CiAJSWYgdGhlIEhUVFAgdHJhbnNmZXIgc3BlZWQgaXMgbGVzcyB0aGFuICdodHRwLmxvd1NwZWVkTGltaXQnCiAJZm9yIGxvbmdlciB0aGFuICdodHRwLmxvd1NwZWVkVGltZScgc2Vjb25kcywgdGhlIHRyYW5zZmVyIGlzIGFib3J0ZWQuCkBAIC0xMDc0LDcgKzExOTcsNyBAQAogCiBpMThuLmxvZ091dHB1dEVuY29kaW5nOjoKIAlDaGFyYWN0ZXIgZW5jb2RpbmcgdGhlIGNvbW1pdCBtZXNzYWdlcyBhcmUgY29udmVydGVkIHRvIHdoZW4KLQlydW5uaW5nICdnaXQtbG9nJyBhbmQgZnJpZW5kcy4KKwlydW5uaW5nICdnaXQgbG9nJyBhbmQgZnJpZW5kcy4KIAogaW1hcDo6CiAJVGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGluIHRoZSAnaW1hcCcgc2VjdGlvbiBhcmUgZGVzY3JpYmVkCkBAIC0xMTA4LDcgKzEyMzEsNyBAQAogCiBsb2cuZGF0ZTo6CiAJU2V0IGRlZmF1bHQgZGF0ZS10aW1lIG1vZGUgZm9yIHRoZSBsb2cgY29tbWFuZC4gU2V0dGluZyBsb2cuZGF0ZQotCXZhbHVlIGlzIHNpbWlsYXIgdG8gdXNpbmcgJ2dpdC1sb2cnXCdzIC0tZGF0ZSBvcHRpb24uIFRoZSB2YWx1ZSBpcyBvbmUgb2YgdGhlCisJdmFsdWUgaXMgc2ltaWxhciB0byB1c2luZyAnZ2l0IGxvZydcJ3MgLS1kYXRlIG9wdGlvbi4gVGhlIHZhbHVlIGlzIG9uZSBvZiB0aGUKIAlmb2xsb3dpbmcgYWx0ZXJuYXRpdmVzOiB7cmVsYXRpdmUsbG9jYWwsZGVmYXVsdCxpc28scmZjLHNob3J0fS4KIAlTZWUgbGlua2dpdDpnaXQtbG9nWzFdLgogCkBAIC0xMjA1LDEyICsxMzI4LDIwIEBACiAKIHBhY2suZGVsdGFDYWNoZVNpemU6OgogCVRoZSBtYXhpbXVtIG1lbW9yeSBpbiBieXRlcyB1c2VkIGZvciBjYWNoaW5nIGRlbHRhcyBpbgotCWxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXS4KLQlBIHZhbHVlIG9mIDAgbWVhbnMgbm8gbGltaXQuIERlZmF1bHRzIHRvIDAuCisJbGlua2dpdDpnaXQtcGFjay1vYmplY3RzWzFdIGJlZm9yZSB3cml0aW5nIHRoZW0gb3V0IHRvIGEgcGFjay4KKwlUaGlzIGNhY2hlIGlzIHVzZWQgdG8gc3BlZWQgdXAgdGhlIHdyaXRpbmcgb2JqZWN0IHBoYXNlIGJ5IG5vdAorCWhhdmluZyB0byByZWNvbXB1dGUgdGhlIGZpbmFsIGRlbHRhIHJlc3VsdCBvbmNlIHRoZSBiZXN0IG1hdGNoCisJZm9yIGFsbCBvYmplY3RzIGlzIGZvdW5kLiAgUmVwYWNraW5nIGxhcmdlIHJlcG9zaXRvcmllcyBvbiBtYWNoaW5lcworCXdoaWNoIGFyZSB0aWdodCB3aXRoIG1lbW9yeSBtaWdodCBiZSBiYWRseSBpbXBhY3RlZCBieSB0aGlzIHRob3VnaCwKKwllc3BlY2lhbGx5IGlmIHRoaXMgY2FjaGUgcHVzaGVzIHRoZSBzeXN0ZW0gaW50byBzd2FwcGluZy4KKwlBIHZhbHVlIG9mIDAgbWVhbnMgbm8gbGltaXQuIFRoZSBzbWFsbGVzdCBzaXplIG9mIDEgYnl0ZSBtYXkgYmUKKwl1c2VkIHRvIHZpcnR1YWxseSBkaXNhYmxlIHRoaXMgY2FjaGUuIERlZmF1bHRzIHRvIDI1NiBNaUIuCiAKIHBhY2suZGVsdGFDYWNoZUxpbWl0OjoKIAlUaGUgbWF4aW11bSBzaXplIG9mIGEgZGVsdGEsIHRoYXQgaXMgY2FjaGVkIGluCi0JbGlua2dpdDpnaXQtcGFjay1vYmplY3RzWzFdLiBEZWZhdWx0cyB0byAxMDAwLgorCWxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXS4gVGhpcyBjYWNoZSBpcyB1c2VkIHRvIHNwZWVkIHVwIHRoZQorCXdyaXRpbmcgb2JqZWN0IHBoYXNlIGJ5IG5vdCBoYXZpbmcgdG8gcmVjb21wdXRlIHRoZSBmaW5hbCBkZWx0YQorCXJlc3VsdCBvbmNlIHRoZSBiZXN0IG1hdGNoIGZvciBhbGwgb2JqZWN0cyBpcyBmb3VuZC4gRGVmYXVsdHMgdG8gMTAwMC4KIAogcGFjay50aHJlYWRzOjoKIAlTcGVjaWZpZXMgdGhlIG51bWJlciBvZiB0aHJlYWRzIHRvIHNwYXduIHdoZW4gc2VhcmNoaW5nIGZvciBiZXN0CkBAIC0xMjQwLDEwICsxMzcxLDEzIEBACiB0aGUgYHthc3Rlcmlza30uaWR4YCBmaWxlLgogCiBwYWNrLnBhY2tTaXplTGltaXQ6OgotCVRoZSBkZWZhdWx0IG1heGltdW0gc2l6ZSBvZiBhIHBhY2suICBUaGlzIHNldHRpbmcgb25seSBhZmZlY3RzCi0JcGFja2luZyB0byBhIGZpbGUsIGkuZS4gdGhlIGdpdDovLyBwcm90b2NvbCBpcyB1bmFmZmVjdGVkLiAgSXQKLQljYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYFwtLW1heC1wYWNrLXNpemVgIG9wdGlvbiBvZgotCWxpbmtnaXQ6Z2l0LXJlcGFja1sxXS4KKwlUaGUgbWF4aW11bSBzaXplIG9mIGEgcGFjay4gIFRoaXMgc2V0dGluZyBvbmx5IGFmZmVjdHMKKwlwYWNraW5nIHRvIGEgZmlsZSB3aGVuIHJlcGFja2luZywgaS5lLiB0aGUgZ2l0Oi8vIHByb3RvY29sCisJaXMgdW5hZmZlY3RlZC4gIEl0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBgXC0tbWF4LXBhY2stc2l6ZWAKKwlvcHRpb24gb2YgbGlua2dpdDpnaXQtcmVwYWNrWzFdLiBUaGUgbWluaW11bSBzaXplIGFsbG93ZWQgaXMKKwlsaW1pdGVkIHRvIDEgTWlCLiBUaGUgZGVmYXVsdCBpcyB1bmxpbWl0ZWQuCisJQ29tbW9uIHVuaXQgc3VmZml4ZXMgb2YgJ2snLCAnbScsIG9yICdnJyBhcmUKKwlzdXBwb3J0ZWQuCiAKIHBhZ2VyLjxjbWQ+OjoKIAlBbGxvd3MgdHVybmluZyBvbiBvciBvZmYgcGFnaW5hdGlvbiBvZiB0aGUgb3V0cHV0IG9mIGEKQEAgLTEyNzYsNiArMTQxMCwxMSBAQAogCVdoZXRoZXIgdG8gc2hvdyBhIGRpZmZzdGF0IG9mIHdoYXQgY2hhbmdlZCB1cHN0cmVhbSBzaW5jZSB0aGUgbGFzdAogCXJlYmFzZS4gRmFsc2UgYnkgZGVmYXVsdC4KIAorcmVjZWl2ZS5hdXRvZ2M6OgorCUJ5IGRlZmF1bHQsIGdpdC1yZWNlaXZlLXBhY2sgd2lsbCBydW4gImdpdC1nYyAtLWF1dG8iIGFmdGVyCisJcmVjZWl2aW5nIGRhdGEgZnJvbSBnaXQtcHVzaCBhbmQgdXBkYXRpbmcgcmVmcy4gIFlvdSBjYW4gc3RvcAorCWl0IGJ5IHNldHRpbmcgdGhpcyB2YXJpYWJsZSB0byBmYWxzZS4KKwogcmVjZWl2ZS5mc2NrT2JqZWN0czo6CiAJSWYgaXQgaXMgc2V0IHRvIHRydWUsIGdpdC1yZWNlaXZlLXBhY2sgd2lsbCBjaGVjayBhbGwgcmVjZWl2ZWQKIAlvYmplY3RzLiBJdCB3aWxsIGFib3J0IGluIHRoZSBjYXNlIG9mIGEgbWFsZm9ybWVkIG9iamVjdCBvciBhCkBAIC0xMzAzLDE4ICsxNDQyLDI1IEBACiAJb3V0IG9mIHN5bmMgd2l0aCB0aGUgaW5kZXggYW5kIHdvcmtpbmcgdHJlZS4gSWYgc2V0IHRvICJ3YXJuIiwKIAlwcmludCBhIHdhcm5pbmcgb2Ygc3VjaCBhIHB1c2ggdG8gc3RkZXJyLCBidXQgYWxsb3cgdGhlIHB1c2ggdG8KIAlwcm9jZWVkLiBJZiBzZXQgdG8gZmFsc2Ugb3IgImlnbm9yZSIsIGFsbG93IHN1Y2ggcHVzaGVzIHdpdGggbm8KLQltZXNzYWdlLiBEZWZhdWx0cyB0byAid2FybiIuCisJbWVzc2FnZS4gRGVmYXVsdHMgdG8gInJlZnVzZSIuCiAKIHJlY2VpdmUuZGVueU5vbkZhc3RGb3J3YXJkczo6CiAJSWYgc2V0IHRvIHRydWUsIGdpdC1yZWNlaXZlLXBhY2sgd2lsbCBkZW55IGEgcmVmIHVwZGF0ZSB3aGljaCBpcwotCW5vdCBhIGZhc3QgZm9yd2FyZC4gVXNlIHRoaXMgdG8gcHJldmVudCBzdWNoIGFuIHVwZGF0ZSB2aWEgYSBwdXNoLAorCW5vdCBhIGZhc3QtZm9yd2FyZC4gVXNlIHRoaXMgdG8gcHJldmVudCBzdWNoIGFuIHVwZGF0ZSB2aWEgYSBwdXNoLAogCWV2ZW4gaWYgdGhhdCBwdXNoIGlzIGZvcmNlZC4gVGhpcyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzCiAJc2V0IHdoZW4gaW5pdGlhbGl6aW5nIGEgc2hhcmVkIHJlcG9zaXRvcnkuCiAKK3JlY2VpdmUudXBkYXRlc2VydmVyaW5mbzo6CisJSWYgc2V0IHRvIHRydWUsIGdpdC1yZWNlaXZlLXBhY2sgd2lsbCBydW4gZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbworCWFmdGVyIHJlY2VpdmluZyBkYXRhIGZyb20gZ2l0LXB1c2ggYW5kIHVwZGF0aW5nIHJlZnMuCisKIHJlbW90ZS48bmFtZT4udXJsOjoKIAlUaGUgVVJMIG9mIGEgcmVtb3RlIHJlcG9zaXRvcnkuICBTZWUgbGlua2dpdDpnaXQtZmV0Y2hbMV0gb3IKIAlsaW5rZ2l0OmdpdC1wdXNoWzFdLgogCityZW1vdGUuPG5hbWU+LnB1c2h1cmw6OgorCVRoZSBwdXNoIFVSTCBvZiBhIHJlbW90ZSByZXBvc2l0b3J5LiAgU2VlIGxpbmtnaXQ6Z2l0LXB1c2hbMV0uCisKIHJlbW90ZS48bmFtZT4ucHJveHk6OgogCUZvciByZW1vdGVzIHRoYXQgcmVxdWlyZSBjdXJsIChodHRwLCBodHRwcyBhbmQgZnRwKSwgdGhlIFVSTCB0bwogCXRoZSBwcm94eSB0byB1c2UgZm9yIHRoYXQgcmVtb3RlLiAgU2V0IHRvIHRoZSBlbXB0eSBzdHJpbmcgdG8KQEAgLTEzMzQsNyArMTQ4MCwxMyBAQAogCiByZW1vdGUuPG5hbWU+LnNraXBEZWZhdWx0VXBkYXRlOjoKIAlJZiB0cnVlLCB0aGlzIHJlbW90ZSB3aWxsIGJlIHNraXBwZWQgYnkgZGVmYXVsdCB3aGVuIHVwZGF0aW5nCi0JdXNpbmcgdGhlIHVwZGF0ZSBzdWJjb21tYW5kIG9mIGxpbmtnaXQ6Z2l0LXJlbW90ZVsxXS4KKwl1c2luZyBsaW5rZ2l0OmdpdC1mZXRjaFsxXSBvciB0aGUgYHVwZGF0ZWAgc3ViY29tbWFuZCBvZgorCWxpbmtnaXQ6Z2l0LXJlbW90ZVsxXS4KKworcmVtb3RlLjxuYW1lPi5za2lwRmV0Y2hBbGw6OgorCUlmIHRydWUsIHRoaXMgcmVtb3RlIHdpbGwgYmUgc2tpcHBlZCBieSBkZWZhdWx0IHdoZW4gdXBkYXRpbmcKKwl1c2luZyBsaW5rZ2l0OmdpdC1mZXRjaFsxXSBvciB0aGUgYHVwZGF0ZWAgc3ViY29tbWFuZCBvZgorCWxpbmtnaXQ6Z2l0LXJlbW90ZVsxXS4KIAogcmVtb3RlLjxuYW1lPi5yZWNlaXZlcGFjazo6CiAJVGhlIGRlZmF1bHQgcHJvZ3JhbSB0byBleGVjdXRlIG9uIHRoZSByZW1vdGUgc2lkZSB3aGVuIHB1c2hpbmcuICBTZWUKQEAgLTEzNDgsNiArMTUwMCwxMCBAQAogCVNldHRpbmcgdGhpcyB2YWx1ZSB0byBcLS1uby10YWdzIGRpc2FibGVzIGF1dG9tYXRpYyB0YWcgZm9sbG93aW5nIHdoZW4KIAlmZXRjaGluZyBmcm9tIHJlbW90ZSA8bmFtZT4KIAorcmVtb3RlLjxuYW1lPi52Y3M6OgorCVNldHRpbmcgdGhpcyB0byBhIHZhbHVlIDx2Y3M+IHdpbGwgY2F1c2UgZ2l0IHRvIGludGVyYWN0IHdpdGgKKwl0aGUgcmVtb3RlIHdpdGggdGhlIGdpdC1yZW1vdGUtPHZjcz4gaGVscGVyLgorCiByZW1vdGVzLjxncm91cD46OgogCVRoZSBsaXN0IG9mIHJlbW90ZXMgd2hpY2ggYXJlIGZldGNoZWQgYnkgImdpdCByZW1vdGUgdXBkYXRlCiAJPGdyb3VwPiIuICBTZWUgbGlua2dpdDpnaXQtcmVtb3RlWzFdLgpAQCAtMTM3Miw2ICsxNTI4LDUwIEBACiAJZGVmYXVsdCBlbmFibGVkIGlmIHlvdSBjcmVhdGUgYHJyLWNhY2hlYCBkaXJlY3RvcnkgdW5kZXIKIAlgJEdJVF9ESVJgLCBidXQgY2FuIGJlIGRpc2FibGVkIGJ5IHNldHRpbmcgdGhpcyBvcHRpb24gdG8gZmFsc2UuCiAKK3NlbmRlbWFpbC5pZGVudGl0eTo6CisJQSBjb25maWd1cmF0aW9uIGlkZW50aXR5LiBXaGVuIGdpdmVuLCBjYXVzZXMgdmFsdWVzIGluIHRoZQorCSdzZW5kZW1haWwuPGlkZW50aXR5Picgc3Vic2VjdGlvbiB0byB0YWtlIHByZWNlZGVuY2Ugb3ZlcgorCXZhbHVlcyBpbiB0aGUgJ3NlbmRlbWFpbCcgc2VjdGlvbi4gVGhlIGRlZmF1bHQgaWRlbnRpdHkgaXMKKwl0aGUgdmFsdWUgb2YgJ3NlbmRlbWFpbC5pZGVudGl0eScuCisKK3NlbmRlbWFpbC5zbXRwZW5jcnlwdGlvbjo6CisJU2VlIGxpbmtnaXQ6Z2l0LXNlbmQtZW1haWxbMV0gZm9yIGRlc2NyaXB0aW9uLiAgTm90ZSB0aGF0IHRoaXMKKwlzZXR0aW5nIGlzIG5vdCBzdWJqZWN0IHRvIHRoZSAnaWRlbnRpdHknIG1lY2hhbmlzbS4KKworc2VuZGVtYWlsLnNtdHBzc2w6OgorCURlcHJlY2F0ZWQgYWxpYXMgZm9yICdzZW5kZW1haWwuc210cGVuY3J5cHRpb24gPSBzc2wnLgorCitzZW5kZW1haWwuPGlkZW50aXR5Pi4qOjoKKwlJZGVudGl0eS1zcGVjaWZpYyB2ZXJzaW9ucyBvZiB0aGUgJ3NlbmRlbWFpbC4qJyBwYXJhbWV0ZXJzCisJZm91bmQgYmVsb3csIHRha2luZyBwcmVjZWRlbmNlIG92ZXIgdGhvc2Ugd2hlbiB0aGUgdGhpcworCWlkZW50aXR5IGlzIHNlbGVjdGVkLCB0aHJvdWdoIGNvbW1hbmQtbGluZSBvcgorCSdzZW5kZW1haWwuaWRlbnRpdHknLgorCitzZW5kZW1haWwuYWxpYXNlc2ZpbGU6Ogorc2VuZGVtYWlsLmFsaWFzZmlsZXR5cGU6Ogorc2VuZGVtYWlsLmJjYzo6CitzZW5kZW1haWwuY2M6Ogorc2VuZGVtYWlsLmNjY21kOjoKK3NlbmRlbWFpbC5jaGFpbnJlcGx5dG86Ogorc2VuZGVtYWlsLmNvbmZpcm06Ogorc2VuZGVtYWlsLmVudmVsb3Blc2VuZGVyOjoKK3NlbmRlbWFpbC5mcm9tOjoKK3NlbmRlbWFpbC5tdWx0aWVkaXQ6Ogorc2VuZGVtYWlsLnNpZ25lZG9mZmJ5Y2M6Ogorc2VuZGVtYWlsLnNtdHBwYXNzOjoKK3NlbmRlbWFpbC5zdXBwcmVzc2NjOjoKK3NlbmRlbWFpbC5zdXBwcmVzc2Zyb206Ogorc2VuZGVtYWlsLnRvOjoKK3NlbmRlbWFpbC5zbXRwc2VydmVyOjoKK3NlbmRlbWFpbC5zbXRwc2VydmVycG9ydDo6CitzZW5kZW1haWwuc210cHVzZXI6Ogorc2VuZGVtYWlsLnRocmVhZDo6CitzZW5kZW1haWwudmFsaWRhdGU6OgorCVNlZSBsaW5rZ2l0OmdpdC1zZW5kLWVtYWlsWzFdIGZvciBkZXNjcmlwdGlvbi4KKworc2VuZGVtYWlsLnNpZ25lZG9mZmNjOjoKKwlEZXByZWNhdGVkIGFsaWFzIGZvciAnc2VuZGVtYWlsLnNpZ25lZG9mZmJ5Y2MnLgorCiBzaG93YnJhbmNoLmRlZmF1bHQ6OgogCVRoZSBkZWZhdWx0IHNldCBvZiBicmFuY2hlcyBmb3IgbGlua2dpdDpnaXQtc2hvdy1icmFuY2hbMV0uCiAJU2VlIGxpbmtnaXQ6Z2l0LXNob3ctYnJhbmNoWzFdLgpAQCAtMTQyNCw2ICsxNjI0LDE5IEBACiAJbmV2ZXItYmVmb3JlLXNlZW4gcmVwb3NpdG9yeSBvbiB0aGUgc2l0ZS4gIFdoZW4gbW9yZSB0aGFuIG9uZQogCWluc3RlYWRPZiBzdHJpbmdzIG1hdGNoIGEgZ2l2ZW4gVVJMLCB0aGUgbG9uZ2VzdCBtYXRjaCBpcyB1c2VkLgogCit1cmwuPGJhc2U+LnB1c2hJbnN0ZWFkT2Y6OgorCUFueSBVUkwgdGhhdCBzdGFydHMgd2l0aCB0aGlzIHZhbHVlIHdpbGwgbm90IGJlIHB1c2hlZCB0bzsKKwlpbnN0ZWFkLCBpdCB3aWxsIGJlIHJld3JpdHRlbiB0byBzdGFydCB3aXRoIDxiYXNlPiwgYW5kIHRoZQorCXJlc3VsdGluZyBVUkwgd2lsbCBiZSBwdXNoZWQgdG8uIEluIGNhc2VzIHdoZXJlIHNvbWUgc2l0ZSBzZXJ2ZXMKKwlhIGxhcmdlIG51bWJlciBvZiByZXBvc2l0b3JpZXMsIGFuZCBzZXJ2ZXMgdGhlbSB3aXRoIG11bHRpcGxlCisJYWNjZXNzIG1ldGhvZHMsIHNvbWUgb2Ygd2hpY2ggZG8gbm90IGFsbG93IHB1c2gsIHRoaXMgZmVhdHVyZQorCWFsbG93cyBwZW9wbGUgdG8gc3BlY2lmeSBhIHB1bGwtb25seSBVUkwgYW5kIGhhdmUgZ2l0CisJYXV0b21hdGljYWxseSB1c2UgYW4gYXBwcm9wcmlhdGUgVVJMIHRvIHB1c2gsIGV2ZW4gZm9yIGEKKwluZXZlci1iZWZvcmUtc2VlbiByZXBvc2l0b3J5IG9uIHRoZSBzaXRlLiAgV2hlbiBtb3JlIHRoYW4gb25lCisJcHVzaEluc3RlYWRPZiBzdHJpbmdzIG1hdGNoIGEgZ2l2ZW4gVVJMLCB0aGUgbG9uZ2VzdCBtYXRjaCBpcworCXVzZWQuICBJZiBhIHJlbW90ZSBoYXMgYW4gZXhwbGljaXQgcHVzaHVybCwgZ2l0IHdpbGwgaWdub3JlIHRoaXMKKwlzZXR0aW5nIGZvciB0aGF0IHJlbW90ZS4KKwogdXNlci5lbWFpbDo6CiAJWW91ciBlbWFpbCBhZGRyZXNzIHRvIGJlIHJlY29yZGVkIGluIGFueSBuZXdseSBjcmVhdGVkIGNvbW1pdHMuCiAJQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlICdHSVRfQVVUSE9SX0VNQUlMJywgJ0dJVF9DT01NSVRURVJfRU1BSUwnLCBhbmQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGF0ZS1mb3JtYXRzLnR4dCBiL0RvY3VtZW50YXRpb24vZGF0ZS1mb3JtYXRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDAwZjA4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kYXRlLWZvcm1hdHMudHh0CkBAIC0wLDAgKzEsMjYgQEAKK0RBVEUgRk9STUFUUworLS0tLS0tLS0tLS0tCisKK1RoZSBHSVRfQVVUSE9SX0RBVEUsIEdJVF9DT01NSVRURVJfREFURSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKK2lmZGVmOjpnaXQtY29tbWl0W10KK2FuZCB0aGUgYC0tZGF0ZWAgb3B0aW9uCitlbmRpZjo6Z2l0LWNvbW1pdFtdCitzdXBwb3J0IHRoZSBmb2xsb3dpbmcgZGF0ZSBmb3JtYXRzOgorCitHaXQgaW50ZXJuYWwgZm9ybWF0OjoKKwlJdCBpcyBgPHVuaXggdGltZXN0YW1wPiA8dGltZXpvbmUgb2Zmc2V0PmAsIHdoZXJlIGA8dW5peAorCXRpbWVzdGFtcD5gIGlzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgVU5JWCBlcG9jaC4KKwlgPHRpbWV6b25lIG9mZnNldD5gIGlzIGEgcG9zaXRpdmUgb3IgbmVnYXRpdmUgb2Zmc2V0IGZyb20gVVRDLgorCUZvciBleGFtcGxlIENFVCAod2hpY2ggaXMgMiBob3VycyBhaGVhZCBVVEMpIGlzIGArMDIwMGAuCisKK1JGQyAyODIyOjoKKwlUaGUgc3RhbmRhcmQgZW1haWwgZm9ybWF0IGFzIGRlc2NyaWJlZCBieSBSRkMgMjgyMiwgZm9yIGV4YW1wbGUKKwlgVGh1LCAwNyBBcHIgMjAwNSAyMjoxMzoxMyArMDIwMGAuCisKK0lTTyA4NjAxOjoKKwlUaW1lIGFuZCBkYXRlIHNwZWNpZmllZCBieSB0aGUgSVNPIDg2MDEgc3RhbmRhcmQsIGZvciBleGFtcGxlCisJYDIwMDUtMDQtMDdUMjI6MTM6MTNgLiBUaGUgcGFyc2VyIGFjY2VwdHMgYSBzcGFjZSBpbnN0ZWFkIG9mIHRoZQorCWBUYCBjaGFyYWN0ZXIgYXMgd2VsbC4KKysKK05PVEU6IEluIGFkZGl0aW9uLCB0aGUgZGF0ZSBwYXJ0IGlzIGFjY2VwdGVkIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0czoKK2BZWVlZLk1NLkREYCwgYE1NL0REL1lZWVlgIGFuZCBgREQuTU0uWVlZWWAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RpZmYtZm9ybWF0LnR4dCBiL0RvY3VtZW50YXRpb24vZGlmZi1mb3JtYXQudHh0CmluZGV4IDFlZWIxYzcuLjE1YzdlNzkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGlmZi1mb3JtYXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGlmZi1mb3JtYXQudHh0CkBAIC0xLDQgKzEsNyBAQAotVGhlIG91dHB1dCBmb3JtYXQgZnJvbSAiZ2l0LWRpZmYtaW5kZXgiLCAiZ2l0LWRpZmYtdHJlZSIsCitSYXcgb3V0cHV0IGZvcm1hdAorLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHJhdyBvdXRwdXQgZm9ybWF0IGZyb20gImdpdC1kaWZmLWluZGV4IiwgImdpdC1kaWZmLXRyZWUiLAogImdpdC1kaWZmLWZpbGVzIiBhbmQgImdpdCBkaWZmIC0tcmF3IiBhcmUgdmVyeSBzaW1pbGFyLgogCiBUaGVzZSBjb21tYW5kcyBhbGwgY29tcGFyZSB0d28gc2V0cyBvZiB0aGluZ3M7IHdoYXQgaXMKQEAgLTE2LDYgKzE5LDkgQEAKIGdpdC1kaWZmLWZpbGVzIFs8cGF0dGVybj4uLi5dOjoKICAgICAgICAgY29tcGFyZXMgdGhlIGluZGV4IGFuZCB0aGUgZmlsZXMgb24gdGhlIGZpbGVzeXN0ZW0uCiAKK1RoZSAiZ2l0LWRpZmYtdHJlZSIgY29tbWFuZCBiZWdpbnMgaXRzIG91dHB1dCBieSBwcmludGluZyB0aGUgaGFzaCBvZgord2hhdCBpcyBiZWluZyBjb21wYXJlZC4gQWZ0ZXIgdGhhdCwgYWxsIHRoZSBjb21tYW5kcyBwcmludCBvbmUgb3V0cHV0CitsaW5lIHBlciBjaGFuZ2VkIGZpbGUuCiAKIEFuIG91dHB1dCBsaW5lIGlzIGZvcm1hdHRlZCB0aGlzIHdheToKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kaWZmLW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9kaWZmLW9wdGlvbnMudHh0CmluZGV4IDkyNzZmYWUuLjg3MDdkMGUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGlmZi1vcHRpb25zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RpZmYtb3B0aW9ucy50eHQKQEAgLTE0LDcgKzE0LDggQEAKIAogaWZkZWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQogLXA6OgotCUdlbmVyYXRlIHBhdGNoZXMgd2l0aG91dCBkaWZmc3RhdC4KKy0tbm8tc3RhdDo6CisJR2VuZXJhdGUgcGxhaW4gcGF0Y2hlcyB3aXRob3V0IGFueSBkaWZmc3RhdHMuCiBlbmRpZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCiAKIGlmbmRlZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCkBAIC0yNywzMyArMjgsNDAgQEAKIC1VPG4+OjoKIC0tdW5pZmllZD08bj46OgogCUdlbmVyYXRlIGRpZmZzIHdpdGggPG4+IGxpbmVzIG9mIGNvbnRleHQgaW5zdGVhZCBvZgotCXRoZSB1c3VhbCB0aHJlZS4gSW1wbGllcyAiLXAiLgorCXRoZSB1c3VhbCB0aHJlZS4KK2lmbmRlZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCisJSW1wbGllcyBgLXBgLgorZW5kaWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQogCitpZm5kZWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQogLS1yYXc6OgogCUdlbmVyYXRlIHRoZSByYXcgZm9ybWF0LgogCXtnaXQtZGlmZi1jb3JlPyBUaGlzIGlzIHRoZSBkZWZhdWx0Ln0KK2VuZGlmOjpnaXQtZm9ybWF0LXBhdGNoW10KIAoraWZuZGVmOjpnaXQtZm9ybWF0LXBhdGNoW10KIC0tcGF0Y2gtd2l0aC1yYXc6OgotCVN5bm9ueW0gZm9yICItcCAtLXJhdyIuCisJU3lub255bSBmb3IgYC1wIC0tcmF3YC4KK2VuZGlmOjpnaXQtZm9ybWF0LXBhdGNoW10KIAogLS1wYXRpZW5jZTo6CiAJR2VuZXJhdGUgYSBkaWZmIHVzaW5nIHRoZSAicGF0aWVuY2UgZGlmZiIgYWxnb3JpdGhtLgogCiAtLXN0YXRbPXdpZHRoWyxuYW1lLXdpZHRoXV06OgogCUdlbmVyYXRlIGEgZGlmZnN0YXQuICBZb3UgY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0Ci0Jb3V0cHV0IHdpZHRoIGZvciA4MC1jb2x1bW4gdGVybWluYWwgYnkgIi0tc3RhdD13aWR0aCIuCisJb3V0cHV0IHdpZHRoIGZvciA4MC1jb2x1bW4gdGVybWluYWwgYnkgYC0tc3RhdD13aWR0aGAuCiAJVGhlIHdpZHRoIG9mIHRoZSBmaWxlbmFtZSBwYXJ0IGNhbiBiZSBjb250cm9sbGVkIGJ5CiAJZ2l2aW5nIGFub3RoZXIgd2lkdGggdG8gaXQgc2VwYXJhdGVkIGJ5IGEgY29tbWEuCiAKIC0tbnVtc3RhdDo6Ci0JU2ltaWxhciB0byBcLS1zdGF0LCBidXQgc2hvd3MgbnVtYmVyIG9mIGFkZGVkIGFuZAorCVNpbWlsYXIgdG8gYFwtLXN0YXRgLCBidXQgc2hvd3MgbnVtYmVyIG9mIGFkZGVkIGFuZAogCWRlbGV0ZWQgbGluZXMgaW4gZGVjaW1hbCBub3RhdGlvbiBhbmQgcGF0aG5hbWUgd2l0aG91dAogCWFiYnJldmlhdGlvbiwgdG8gbWFrZSBpdCBtb3JlIG1hY2hpbmUgZnJpZW5kbHkuICBGb3IKIAliaW5hcnkgZmlsZXMsIG91dHB1dHMgdHdvIGAtYCBpbnN0ZWFkIG9mIHNheWluZwogCWAwIDBgLgogCiAtLXNob3J0c3RhdDo6Ci0JT3V0cHV0IG9ubHkgdGhlIGxhc3QgbGluZSBvZiB0aGUgLS1zdGF0IGZvcm1hdCBjb250YWluaW5nIHRvdGFsCisJT3V0cHV0IG9ubHkgdGhlIGxhc3QgbGluZSBvZiB0aGUgYC0tc3RhdGAgZm9ybWF0IGNvbnRhaW5pbmcgdG90YWwKIAludW1iZXIgb2YgbW9kaWZpZWQgZmlsZXMsIGFzIHdlbGwgYXMgbnVtYmVyIG9mIGFkZGVkIGFuZCBkZWxldGVkCiAJbGluZXMuCiAKQEAgLTYxLDI0ICs2OSwzOSBAQAogCU91dHB1dCB0aGUgZGlzdHJpYnV0aW9uIG9mIHJlbGF0aXZlIGFtb3VudCBvZiBjaGFuZ2VzIChudW1iZXIgb2YgbGluZXMgYWRkZWQgb3IKIAlyZW1vdmVkKSBmb3IgZWFjaCBzdWItZGlyZWN0b3J5LiBEaXJlY3RvcmllcyB3aXRoIGNoYW5nZXMgYmVsb3cKIAlhIGN1dC1vZmYgcGVyY2VudCAoMyUgYnkgZGVmYXVsdCkgYXJlIG5vdCBzaG93bi4gVGhlIGN1dC1vZmYgcGVyY2VudAotCWNhbiBiZSBzZXQgd2l0aCAiLS1kaXJzdGF0PWxpbWl0Ii4gQ2hhbmdlcyBpbiBhIGNoaWxkIGRpcmVjdG9yeSBpcyBub3QKLQljb3VudGVkIGZvciB0aGUgcGFyZW50IGRpcmVjdG9yeSwgdW5sZXNzICItLWN1bXVsYXRpdmUiIGlzIHVzZWQuCisJY2FuIGJlIHNldCB3aXRoIGAtLWRpcnN0YXQ9bGltaXRgLiBDaGFuZ2VzIGluIGEgY2hpbGQgZGlyZWN0b3J5IGlzIG5vdAorCWNvdW50ZWQgZm9yIHRoZSBwYXJlbnQgZGlyZWN0b3J5LCB1bmxlc3MgYC0tY3VtdWxhdGl2ZWAgaXMgdXNlZC4KIAogLS1kaXJzdGF0LWJ5LWZpbGVbPWxpbWl0XTo6Ci0JU2FtZSBhcyAtLWRpcnN0YXQsIGJ1dCBjb3VudHMgY2hhbmdlZCBmaWxlcyBpbnN0ZWFkIG9mIGxpbmVzLgorCVNhbWUgYXMgYC0tZGlyc3RhdGAsIGJ1dCBjb3VudHMgY2hhbmdlZCBmaWxlcyBpbnN0ZWFkIG9mIGxpbmVzLgogCiAtLXN1bW1hcnk6OgogCU91dHB1dCBhIGNvbmRlbnNlZCBzdW1tYXJ5IG9mIGV4dGVuZGVkIGhlYWRlciBpbmZvcm1hdGlvbgogCXN1Y2ggYXMgY3JlYXRpb25zLCByZW5hbWVzIGFuZCBtb2RlIGNoYW5nZXMuCiAKK2lmbmRlZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCiAtLXBhdGNoLXdpdGgtc3RhdDo6Ci0JU3lub255bSBmb3IgIi1wIC0tc3RhdCIuCi0Je2dpdC1mb3JtYXQtcGF0Y2g/IFRoaXMgaXMgdGhlIGRlZmF1bHQufQorCVN5bm9ueW0gZm9yIGAtcCAtLXN0YXRgLgorZW5kaWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorCitpZm5kZWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQogCiAtejo6Ci0JTlVMLWxpbmUgdGVybWluYXRpb24gb24gb3V0cHV0LiAgVGhpcyBhZmZlY3RzIHRoZSAtLXJhdwotCW91dHB1dCBmaWVsZCB0ZXJtaW5hdG9yLiAgQWxzbyBvdXRwdXQgZnJvbSBjb21tYW5kcyBzdWNoCi0JYXMgImdpdC1sb2ciIHdpbGwgYmUgZGVsaW1pdGVkIHdpdGggTlVMIGJldHdlZW4gY29tbWl0cy4KK2lmZGVmOjpnaXQtbG9nW10KKwlTZXBhcmF0ZSB0aGUgY29tbWl0cyB3aXRoIE5VTHMgaW5zdGVhZCBvZiB3aXRoIG5ldyBuZXdsaW5lcy4KKysKK0Fsc28sIHdoZW4gYC0tcmF3YCBvciBgLS1udW1zdGF0YCBoYXMgYmVlbiBnaXZlbiwgZG8gbm90IG11bmdlCitwYXRobmFtZXMgYW5kIHVzZSBOVUxzIGFzIG91dHB1dCBmaWVsZCB0ZXJtaW5hdG9ycy4KK2VuZGlmOjpnaXQtbG9nW10KK2lmbmRlZjo6Z2l0LWxvZ1tdCisJV2hlbiBgLS1yYXdgIG9yIGAtLW51bXN0YXRgIGhhcyBiZWVuIGdpdmVuLCBkbyBub3QgbXVuZ2UKKwlwYXRobmFtZXMgYW5kIHVzZSBOVUxzIGFzIG91dHB1dCBmaWVsZCB0ZXJtaW5hdG9ycy4KK2VuZGlmOjpnaXQtbG9nW10KKysKK1dpdGhvdXQgdGhpcyBvcHRpb24sIGVhY2ggcGF0aG5hbWUgb3V0cHV0IHdpbGwgaGF2ZSBUQUIsIExGLCBkb3VibGUgcXVvdGVzLAorYW5kIGJhY2tzbGFzaCBjaGFyYWN0ZXJzIHJlcGxhY2VkIHdpdGggYFx0YCwgYFxuYCwgYFwiYCwgYW5kIGBcXGAsCityZXNwZWN0aXZlbHksIGFuZCB0aGUgcGF0aG5hbWUgd2lsbCBiZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzIGlmCithbnkgb2YgdGhvc2UgcmVwbGFjZW1lbnRzIG9jY3VycmVkLgogCiAtLW5hbWUtb25seTo6CiAJU2hvdyBvbmx5IG5hbWVzIG9mIGNoYW5nZWQgZmlsZXMuCkBAIC04Nyw2ICsxMTAsMTMgQEAKIAlTaG93IG9ubHkgbmFtZXMgYW5kIHN0YXR1cyBvZiBjaGFuZ2VkIGZpbGVzLiBTZWUgdGhlIGRlc2NyaXB0aW9uCiAJb2YgdGhlIGAtLWRpZmYtZmlsdGVyYCBvcHRpb24gb24gd2hhdCB0aGUgc3RhdHVzIGxldHRlcnMgbWVhbi4KIAorLS1zdWJtb2R1bGVbPTxmb3JtYXQ+XTo6CisJQ2hvc2UgdGhlIG91dHB1dCBmb3JtYXQgZm9yIHN1Ym1vZHVsZSBkaWZmZXJlbmNlcy4gPGZvcm1hdD4gY2FuIGJlIG9uZSBvZgorCSdzaG9ydCcgYW5kICdsb2cnLiAnc2hvcnQnIGp1c3Qgc2hvd3MgcGFpcnMgb2YgY29tbWl0IG5hbWVzLCB0aGlzIGZvcm1hdAorCWlzIHVzZWQgd2hlbiB0aGlzIG9wdGlvbiBpcyBub3QgZ2l2ZW4uICdsb2cnIGlzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzCisJb3B0aW9uIGFuZCBsaXN0cyB0aGUgY29tbWl0cyBpbiB0aGF0IGNvbW1pdCByYW5nZSBsaWtlIHRoZSAnc3VtbWFyeScKKwlvcHRpb24gb2YgbGlua2dpdDpnaXQtc3VibW9kdWxlWzFdIGRvZXMuCisKIC0tY29sb3I6OgogCVNob3cgY29sb3JlZCBkaWZmLgogCkBAIC0xMTAsMTYgKzE0MCwxOSBAQAogbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzFdIG9yIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4gIEdpdmluZyBpdCBleHBsaWNpdGx5CiBvdmVycmlkZXMgYW55IGRpZmYgZHJpdmVyIG9yIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gIERpZmYgZHJpdmVycwogb3ZlcnJpZGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4KK2VuZGlmOjpnaXQtZm9ybWF0LXBhdGNoW10KIAogLS1uby1yZW5hbWVzOjoKIAlUdXJuIG9mZiByZW5hbWUgZGV0ZWN0aW9uLCBldmVuIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24KIAlmaWxlIGdpdmVzIHRoZSBkZWZhdWx0IHRvIGRvIHNvLgogCitpZm5kZWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQogLS1jaGVjazo6CiAJV2FybiBpZiBjaGFuZ2VzIGludHJvZHVjZSB0cmFpbGluZyB3aGl0ZXNwYWNlCiAJb3IgYW4gaW5kZW50IHRoYXQgdXNlcyBhIHNwYWNlIGJlZm9yZSBhIHRhYi4gRXhpdHMgd2l0aAogCW5vbi16ZXJvIHN0YXR1cyBpZiBwcm9ibGVtcyBhcmUgZm91bmQuIE5vdCBjb21wYXRpYmxlIHdpdGgKIAktLWV4aXQtY29kZS4KK2VuZGlmOjpnaXQtZm9ybWF0LXBhdGNoW10KIAogLS1mdWxsLWluZGV4OjoKIAlJbnN0ZWFkIG9mIHRoZSBmaXJzdCBoYW5kZnVsIG9mIGNoYXJhY3RlcnMsIHNob3cgdGhlIGZ1bGwKQEAgLTEyNywxNiArMTYwLDE2IEBACiAJbGluZSB3aGVuIGdlbmVyYXRpbmcgcGF0Y2ggZm9ybWF0IG91dHB1dC4KIAogLS1iaW5hcnk6OgotCUluIGFkZGl0aW9uIHRvIC0tZnVsbC1pbmRleCwgb3V0cHV0ICJiaW5hcnkgZGlmZiIgdGhhdAotCWNhbiBiZSBhcHBsaWVkIHdpdGggImdpdCBhcHBseSIuCisJSW4gYWRkaXRpb24gdG8gYC0tZnVsbC1pbmRleGAsIG91dHB1dCBhIGJpbmFyeSBkaWZmIHRoYXQKKwljYW4gYmUgYXBwbGllZCB3aXRoIGBnaXQtYXBwbHlgLgogCiAtLWFiYnJldls9PG4+XTo6CiAJSW5zdGVhZCBvZiBzaG93aW5nIHRoZSBmdWxsIDQwLWJ5dGUgaGV4YWRlY2ltYWwgb2JqZWN0CiAJbmFtZSBpbiBkaWZmLXJhdyBmb3JtYXQgb3V0cHV0IGFuZCBkaWZmLXRyZWUgaGVhZGVyCiAJbGluZXMsIHNob3cgb25seSBhIHBhcnRpYWwgcHJlZml4LiAgVGhpcyBpcwotCWluZGVwZW5kZW50IG9mIC0tZnVsbC1pbmRleCBvcHRpb24gYWJvdmUsIHdoaWNoIGNvbnRyb2xzCisJaW5kZXBlbmRlbnQgb2YgdGhlIGAtLWZ1bGwtaW5kZXhgIG9wdGlvbiBhYm92ZSwgd2hpY2ggY29udHJvbHMKIAl0aGUgZGlmZi1wYXRjaCBvdXRwdXQgZm9ybWF0LiAgTm9uIGRlZmF1bHQgbnVtYmVyIG9mCi0JZGlnaXRzIGNhbiBiZSBzcGVjaWZpZWQgd2l0aCAtLWFiYnJldj08bj4uCisJZGlnaXRzIGNhbiBiZSBzcGVjaWZpZWQgd2l0aCBgLS1hYmJyZXY9PG4+YC4KIAogLUI6OgogCUJyZWFrIGNvbXBsZXRlIHJld3JpdGUgY2hhbmdlcyBpbnRvIHBhaXJzIG9mIGRlbGV0ZSBhbmQgY3JlYXRlLgpAQCAtMTQ3LDYgKzE4MCw3IEBACiAtQzo6CiAJRGV0ZWN0IGNvcGllcyBhcyB3ZWxsIGFzIHJlbmFtZXMuICBTZWUgYWxzbyBgLS1maW5kLWNvcGllcy1oYXJkZXJgLgogCitpZm5kZWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQogLS1kaWZmLWZpbHRlcj1bQUNETVJUVVhCKl06OgogCVNlbGVjdCBvbmx5IGZpbGVzIHRoYXQgYXJlIEFkZGVkIChgQWApLCBDb3BpZWQgKGBDYCksCiAJRGVsZXRlZCAoYERgKSwgTW9kaWZpZWQgKGBNYCksIFJlbmFtZWQgKGBSYCksIGhhdmUgdGhlaXIKQEAgLTE1OCw2ICsxOTIsNyBAQAogCXBhdGhzIGFyZSBzZWxlY3RlZCBpZiB0aGVyZSBpcyBhbnkgZmlsZSB0aGF0IG1hdGNoZXMKIAlvdGhlciBjcml0ZXJpYSBpbiB0aGUgY29tcGFyaXNvbjsgaWYgdGhlcmUgaXMgbm8gZmlsZQogCXRoYXQgbWF0Y2hlcyBvdGhlciBjcml0ZXJpYSwgbm90aGluZyBpcyBzZWxlY3RlZC4KK2VuZGlmOjpnaXQtZm9ybWF0LXBhdGNoW10KIAogLS1maW5kLWNvcGllcy1oYXJkZXI6OgogCUZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBieSBkZWZhdWx0LCBgLUNgIG9wdGlvbiBmaW5kcyBjb3BpZXMgb25seQpAQCAtMTY5LDEyICsyMDQsMTMgQEAKIAlgLUNgIG9wdGlvbiBoYXMgdGhlIHNhbWUgZWZmZWN0LgogCiAtbDxudW0+OjoKLQktTSBhbmQgLUMgb3B0aW9ucyByZXF1aXJlIE8obl4yKSBwcm9jZXNzaW5nIHRpbWUgd2hlcmUgbgorCVRoZSBgLU1gIGFuZCBgLUNgIG9wdGlvbnMgcmVxdWlyZSBPKG5eMikgcHJvY2Vzc2luZyB0aW1lIHdoZXJlIG4KIAlpcyB0aGUgbnVtYmVyIG9mIHBvdGVudGlhbCByZW5hbWUvY29weSB0YXJnZXRzLiAgVGhpcwogCW9wdGlvbiBwcmV2ZW50cyByZW5hbWUvY29weSBkZXRlY3Rpb24gZnJvbSBydW5uaW5nIGlmCiAJdGhlIG51bWJlciBvZiByZW5hbWUvY29weSB0YXJnZXRzIGV4Y2VlZHMgdGhlIHNwZWNpZmllZAogCW51bWJlci4KIAoraWZuZGVmOjpnaXQtZm9ybWF0LXBhdGNoW10KIC1TPHN0cmluZz46OgogCUxvb2sgZm9yIGRpZmZlcmVuY2VzIHRoYXQgaW50cm9kdWNlIG9yIHJlbW92ZSBhbiBpbnN0YW5jZSBvZgogCTxzdHJpbmc+LiBOb3RlIHRoYXQgdGhpcyBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgc3RyaW5nIHNpbXBseQpAQCAtMTgyLDE4ICsyMTgsMjAgQEAKIAlsaW5rZ2l0OmdpdGRpZmZjb3JlWzddIGZvciBtb3JlIGRldGFpbHMuCiAKIC0tcGlja2F4ZS1hbGw6OgotCVdoZW4gLVMgZmluZHMgYSBjaGFuZ2UsIHNob3cgYWxsIHRoZSBjaGFuZ2VzIGluIHRoYXQKKwlXaGVuIGAtU2AgZmluZHMgYSBjaGFuZ2UsIHNob3cgYWxsIHRoZSBjaGFuZ2VzIGluIHRoYXQKIAljaGFuZ2VzZXQsIG5vdCBqdXN0IHRoZSBmaWxlcyB0aGF0IGNvbnRhaW4gdGhlIGNoYW5nZQogCWluIDxzdHJpbmc+LgogCiAtLXBpY2theGUtcmVnZXg6OgogCU1ha2UgdGhlIDxzdHJpbmc+IG5vdCBhIHBsYWluIHN0cmluZyBidXQgYW4gZXh0ZW5kZWQgUE9TSVgKIAlyZWdleCB0byBtYXRjaC4KK2VuZGlmOjpnaXQtZm9ybWF0LXBhdGNoW10KIAogLU88b3JkZXJmaWxlPjo6CiAJT3V0cHV0IHRoZSBwYXRjaCBpbiB0aGUgb3JkZXIgc3BlY2lmaWVkIGluIHRoZQogCTxvcmRlcmZpbGU+LCB3aGljaCBoYXMgb25lIHNoZWxsIGdsb2IgcGF0dGVybiBwZXIgbGluZS4KIAoraWZuZGVmOjpnaXQtZm9ybWF0LXBhdGNoW10KIC1SOjoKIAlTd2FwIHR3byBpbnB1dHM7IHRoYXQgaXMsIHNob3cgZGlmZmVyZW5jZXMgZnJvbSBpbmRleCBvcgogCW9uLWRpc2sgZmlsZSB0byB0cmVlIGNvbnRlbnRzLgpAQCAtMjA1LDYgKzI0Myw3IEBACiAJbm90IGluIGEgc3ViZGlyZWN0b3J5IChlLmcuIGluIGEgYmFyZSByZXBvc2l0b3J5KSwgeW91CiAJY2FuIG5hbWUgd2hpY2ggc3ViZGlyZWN0b3J5IHRvIG1ha2UgdGhlIG91dHB1dCByZWxhdGl2ZQogCXRvIGJ5IGdpdmluZyBhIDxwYXRoPiBhcyBhbiBhcmd1bWVudC4KK2VuZGlmOjpnaXQtZm9ybWF0LXBhdGNoW10KIAogLWE6OgogLS10ZXh0OjoKQEAgLTIyOSwxMyArMjY4LDE1IEBACiAJU2hvdyB0aGUgY29udGV4dCBiZXR3ZWVuIGRpZmYgaHVua3MsIHVwIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyCiAJb2YgbGluZXMsIHRoZXJlYnkgZnVzaW5nIGh1bmtzIHRoYXQgYXJlIGNsb3NlIHRvIGVhY2ggb3RoZXIuCiAKK2lmbmRlZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCiAtLWV4aXQtY29kZTo6CiAJTWFrZSB0aGUgcHJvZ3JhbSBleGl0IHdpdGggY29kZXMgc2ltaWxhciB0byBkaWZmKDEpLgogCVRoYXQgaXMsIGl0IGV4aXRzIHdpdGggMSBpZiB0aGVyZSB3ZXJlIGRpZmZlcmVuY2VzIGFuZAogCTAgbWVhbnMgbm8gZGlmZmVyZW5jZXMuCiAKIC0tcXVpZXQ6OgotCURpc2FibGUgYWxsIG91dHB1dCBvZiB0aGUgcHJvZ3JhbS4gSW1wbGllcyAtLWV4aXQtY29kZS4KKwlEaXNhYmxlIGFsbCBvdXRwdXQgb2YgdGhlIHByb2dyYW0uIEltcGxpZXMgYC0tZXhpdC1jb2RlYC4KK2VuZGlmOjpnaXQtZm9ybWF0LXBhdGNoW10KIAogLS1leHQtZGlmZjo6CiAJQWxsb3cgYW4gZXh0ZXJuYWwgZGlmZiBoZWxwZXIgdG8gYmUgZXhlY3V0ZWQuIElmIHlvdSBzZXQgYW4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmV0Y2gtb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZldGNoLW9wdGlvbnMudHh0CmluZGV4IGVhM2IxYmMuLmZlNzE2YjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmV0Y2gtb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZXRjaC1vcHRpb25zLnR4dApAQCAtMSwxMSArMSw1IEBACi0tcTo6Ci0tLXF1aWV0OjoKLQlQYXNzIC0tcXVpZXQgdG8gZ2l0LWZldGNoLXBhY2sgYW5kIHNpbGVuY2UgYW55IG90aGVyIGludGVybmFsbHkKLQl1c2VkIGdpdCBjb21tYW5kcy4KLQotLXY6OgotLS12ZXJib3NlOjoKLQlCZSB2ZXJib3NlLgorLS1hbGw6OgorCUZldGNoIGFsbCByZW1vdGVzLgogCiAtYTo6CiAtLWFwcGVuZDo6CkBAIC0xMywyMCArNywzOCBAQAogCWV4aXN0aW5nIGNvbnRlbnRzIG9mIGAuZ2l0L0ZFVENIX0hFQURgLiAgV2l0aG91dCB0aGlzCiAJb3B0aW9uIG9sZCBkYXRhIGluIGAuZ2l0L0ZFVENIX0hFQURgIHdpbGwgYmUgb3ZlcndyaXR0ZW4uCiAKLS0tdXBsb2FkLXBhY2sgPHVwbG9hZC1wYWNrPjo6Ci0JV2hlbiBnaXZlbiwgYW5kIHRoZSByZXBvc2l0b3J5IHRvIGZldGNoIGZyb20gaXMgaGFuZGxlZAotCWJ5ICdnaXQtZmV0Y2gtcGFjaycsICctLWV4ZWM9PHVwbG9hZC1wYWNrPicgaXMgcGFzc2VkIHRvCi0JdGhlIGNvbW1hbmQgdG8gc3BlY2lmeSBub24tZGVmYXVsdCBwYXRoIGZvciB0aGUgY29tbWFuZAotCXJ1biBvbiB0aGUgb3RoZXIgZW5kLgorLS1kZXB0aD08ZGVwdGg+OjoKKwlEZWVwZW4gdGhlIGhpc3Rvcnkgb2YgYSAnc2hhbGxvdycgcmVwb3NpdG9yeSBjcmVhdGVkIGJ5CisJYGdpdCBjbG9uZWAgd2l0aCBgLS1kZXB0aD08ZGVwdGg+YCBvcHRpb24gKHNlZSBsaW5rZ2l0OmdpdC1jbG9uZVsxXSkKKwlieSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBjb21taXRzLgorCitpZm5kZWY6OmdpdC1wdWxsW10KKy0tZHJ5LXJ1bjo6CisJU2hvdyB3aGF0IHdvdWxkIGJlIGRvbmUsIHdpdGhvdXQgbWFraW5nIGFueSBjaGFuZ2VzLgorZW5kaWY6OmdpdC1wdWxsW10KIAogLWY6OgogLS1mb3JjZTo6Ci0JV2hlbiAnZ2l0LWZldGNoJyBpcyB1c2VkIHdpdGggYDxyYnJhbmNoPjo8bGJyYW5jaD5gCisJV2hlbiAnZ2l0IGZldGNoJyBpcyB1c2VkIHdpdGggYDxyYnJhbmNoPjo8bGJyYW5jaD5gCiAJcmVmc3BlYywgaXQgcmVmdXNlcyB0byB1cGRhdGUgdGhlIGxvY2FsIGJyYW5jaAogCWA8bGJyYW5jaD5gIHVubGVzcyB0aGUgcmVtb3RlIGJyYW5jaCBgPHJicmFuY2g+YCBpdAogCWZldGNoZXMgaXMgYSBkZXNjZW5kYW50IG9mIGA8bGJyYW5jaD5gLiAgVGhpcyBvcHRpb24KIAlvdmVycmlkZXMgdGhhdCBjaGVjay4KIAorLWs6OgorLS1rZWVwOjoKKwlLZWVwIGRvd25sb2FkZWQgcGFjay4KKworaWZuZGVmOjpnaXQtcHVsbFtdCistLW11bHRpcGxlOjoKKwlBbGxvdyBzZXZlcmFsIDxyZXBvc2l0b3J5PiBhbmQgPGdyb3VwPiBhcmd1bWVudHMgdG8gYmUKKwlzcGVjaWZpZWQuIE5vIDxyZWZzcGVjPnMgbWF5IGJlIHNwZWNpZmllZC4KKworLS1wcnVuZTo6CisJQWZ0ZXIgZmV0Y2hpbmcsIHJlbW92ZSBhbnkgcmVtb3RlIHRyYWNraW5nIGJyYW5jaGVzIHdoaWNoCisJbm8gbG9uZ2VyIGV4aXN0CW9uIHRoZSByZW1vdGUuCitlbmRpZjo6Z2l0LXB1bGxbXQorCiBpZmRlZjo6Z2l0LXB1bGxbXQogLS1uby10YWdzOjoKIGVuZGlmOjpnaXQtcHVsbFtdCkBAIC00NywyMCArNTksMjggQEAKIAlmbGFnIGxldHMgYWxsIHRhZ3MgYW5kIHRoZWlyIGFzc29jaWF0ZWQgb2JqZWN0cyBiZQogCWRvd25sb2FkZWQuCiAKLS1rOjoKLS0ta2VlcDo6Ci0JS2VlcCBkb3dubG9hZGVkIHBhY2suCi0KIC11OjoKIC0tdXBkYXRlLWhlYWQtb2s6OgotCUJ5IGRlZmF1bHQgJ2dpdC1mZXRjaCcgcmVmdXNlcyB0byB1cGRhdGUgdGhlIGhlYWQgd2hpY2gKKwlCeSBkZWZhdWx0ICdnaXQgZmV0Y2gnIHJlZnVzZXMgdG8gdXBkYXRlIHRoZSBoZWFkIHdoaWNoCiAJY29ycmVzcG9uZHMgdG8gdGhlIGN1cnJlbnQgYnJhbmNoLiAgVGhpcyBmbGFnIGRpc2FibGVzIHRoZQotCWNoZWNrLiAgVGhpcyBpcyBwdXJlbHkgZm9yIHRoZSBpbnRlcm5hbCB1c2UgZm9yICdnaXQtcHVsbCcKLQl0byBjb21tdW5pY2F0ZSB3aXRoICdnaXQtZmV0Y2gnLCBhbmQgdW5sZXNzIHlvdSBhcmUKKwljaGVjay4gIFRoaXMgaXMgcHVyZWx5IGZvciB0aGUgaW50ZXJuYWwgdXNlIGZvciAnZ2l0IHB1bGwnCisJdG8gY29tbXVuaWNhdGUgd2l0aCAnZ2l0IGZldGNoJywgYW5kIHVubGVzcyB5b3UgYXJlCiAJaW1wbGVtZW50aW5nIHlvdXIgb3duIFBvcmNlbGFpbiB5b3UgYXJlIG5vdCBzdXBwb3NlZCB0bwogCXVzZSBpdC4KIAotLS1kZXB0aD08ZGVwdGg+OjoKLQlEZWVwZW4gdGhlIGhpc3Rvcnkgb2YgYSAnc2hhbGxvdycgcmVwb3NpdG9yeSBjcmVhdGVkIGJ5Ci0JYGdpdCBjbG9uZWAgd2l0aCBgLS1kZXB0aD08ZGVwdGg+YCBvcHRpb24gKHNlZSBsaW5rZ2l0OmdpdC1jbG9uZVsxXSkKLQlieSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBjb21taXRzLgorLS11cGxvYWQtcGFjayA8dXBsb2FkLXBhY2s+OjoKKwlXaGVuIGdpdmVuLCBhbmQgdGhlIHJlcG9zaXRvcnkgdG8gZmV0Y2ggZnJvbSBpcyBoYW5kbGVkCisJYnkgJ2dpdCBmZXRjaC1wYWNrJywgJy0tZXhlYz08dXBsb2FkLXBhY2s+JyBpcyBwYXNzZWQgdG8KKwl0aGUgY29tbWFuZCB0byBzcGVjaWZ5IG5vbi1kZWZhdWx0IHBhdGggZm9yIHRoZSBjb21tYW5kCisJcnVuIG9uIHRoZSBvdGhlciBlbmQuCisKK2lmbmRlZjo6Z2l0LXB1bGxbXQorLXE6OgorLS1xdWlldDo6CisJUGFzcyAtLXF1aWV0IHRvIGdpdC1mZXRjaC1wYWNrIGFuZCBzaWxlbmNlIGFueSBvdGhlciBpbnRlcm5hbGx5CisJdXNlZCBnaXQgY29tbWFuZHMuCisKKy12OjoKKy0tdmVyYm9zZTo6CisJQmUgdmVyYm9zZS4KK2VuZGlmOjpnaXQtcHVsbFtdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1hZGQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYWRkLnR4dAppbmRleCBkOTM4YjQyLi41MWNiZWI3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1hZGQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWFkZC50eHQKQEAgLTksMzMgKzksMzcgQEAKIC0tLS0tLS0tCiBbdmVyc2VdCiAnZ2l0IGFkZCcgWy1uXSBbLXZdIFstLWZvcmNlIHwgLWZdIFstLWludGVyYWN0aXZlIHwgLWldIFstLXBhdGNoIHwgLXBdCi0JICBbLS1hbGwgfCBbLS11cGRhdGUgfCAtdV1dIFstLWludGVudC10by1hZGQgfCAtTl0KLQkgIFstLXJlZnJlc2hdIFstLWlnbm9yZS1lcnJvcnNdIFstLV0gPGZpbGVwYXR0ZXJuPi4uLgorCSAgWy0tZWRpdCB8IC1lXSBbLS1hbGwgfCBbLS11cGRhdGUgfCAtdV1dIFstLWludGVudC10by1hZGQgfCAtTl0KKwkgIFstLXJlZnJlc2hdIFstLWlnbm9yZS1lcnJvcnNdIFstLV0gWzxmaWxlcGF0dGVybj4uLi5dCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQotVGhpcyBjb21tYW5kIGFkZHMgdGhlIGN1cnJlbnQgY29udGVudCBvZiBuZXcgb3IgbW9kaWZpZWQgZmlsZXMgdG8gdGhlCi1pbmRleCwgdGh1cyBzdGFnaW5nIHRoYXQgY29udGVudCBmb3IgaW5jbHVzaW9uIGluIHRoZSBuZXh0IGNvbW1pdC4KK1RoaXMgY29tbWFuZCB1cGRhdGVzIHRoZSBpbmRleCB1c2luZyB0aGUgY3VycmVudCBjb250ZW50IGZvdW5kIGluCit0aGUgd29ya2luZyB0cmVlLCB0byBwcmVwYXJlIHRoZSBjb250ZW50IHN0YWdlZCBmb3IgdGhlIG5leHQgY29tbWl0LgorSXQgdHlwaWNhbGx5IGFkZHMgdGhlIGN1cnJlbnQgY29udGVudCBvZiBleGlzdGluZyBwYXRocyBhcyBhIHdob2xlLAorYnV0IHdpdGggc29tZSBvcHRpb25zIGl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gYWRkIGNvbnRlbnQgd2l0aAorb25seSBwYXJ0IG9mIHRoZSBjaGFuZ2VzIG1hZGUgdG8gdGhlIHdvcmtpbmcgdHJlZSBmaWxlcyBhcHBsaWVkLCBvcgorcmVtb3ZlIHBhdGhzIHRoYXQgZG8gbm90IGV4aXN0IGluIHRoZSB3b3JraW5nIHRyZWUgYW55bW9yZS4KIAogVGhlICJpbmRleCIgaG9sZHMgYSBzbmFwc2hvdCBvZiB0aGUgY29udGVudCBvZiB0aGUgd29ya2luZyB0cmVlLCBhbmQgaXQKIGlzIHRoaXMgc25hcHNob3QgdGhhdCBpcyB0YWtlbiBhcyB0aGUgY29udGVudHMgb2YgdGhlIG5leHQgY29tbWl0LiAgVGh1cwogYWZ0ZXIgbWFraW5nIGFueSBjaGFuZ2VzIHRvIHRoZSB3b3JraW5nIGRpcmVjdG9yeSwgYW5kIGJlZm9yZSBydW5uaW5nCi10aGUgY29tbWl0IGNvbW1hbmQsIHlvdSBtdXN0IHVzZSB0aGUgJ2FkZCcgY29tbWFuZCB0byBhZGQgYW55IG5ldyBvcgordGhlIGNvbW1pdCBjb21tYW5kLCB5b3UgbXVzdCB1c2UgdGhlIGBhZGRgIGNvbW1hbmQgdG8gYWRkIGFueSBuZXcgb3IKIG1vZGlmaWVkIGZpbGVzIHRvIHRoZSBpbmRleC4KIAogVGhpcyBjb21tYW5kIGNhbiBiZSBwZXJmb3JtZWQgbXVsdGlwbGUgdGltZXMgYmVmb3JlIGEgY29tbWl0LiAgSXQgb25seQogYWRkcyB0aGUgY29udGVudCBvZiB0aGUgc3BlY2lmaWVkIGZpbGUocykgYXQgdGhlIHRpbWUgdGhlIGFkZCBjb21tYW5kIGlzCiBydW47IGlmIHlvdSB3YW50IHN1YnNlcXVlbnQgY2hhbmdlcyBpbmNsdWRlZCBpbiB0aGUgbmV4dCBjb21taXQsIHRoZW4KLXlvdSBtdXN0IHJ1biAnZ2l0IGFkZCcgYWdhaW4gdG8gYWRkIHRoZSBuZXcgY29udGVudCB0byB0aGUgaW5kZXguCit5b3UgbXVzdCBydW4gYGdpdCBhZGRgIGFnYWluIHRvIGFkZCB0aGUgbmV3IGNvbnRlbnQgdG8gdGhlIGluZGV4LgogCi1UaGUgJ2dpdCBzdGF0dXMnIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gb2J0YWluIGEgc3VtbWFyeSBvZiB3aGljaAorVGhlIGBnaXQgc3RhdHVzYCBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIG9idGFpbiBhIHN1bW1hcnkgb2Ygd2hpY2gKIGZpbGVzIGhhdmUgY2hhbmdlcyB0aGF0IGFyZSBzdGFnZWQgZm9yIHRoZSBuZXh0IGNvbW1pdC4KIAotVGhlICdnaXQgYWRkJyBjb21tYW5kIHdpbGwgbm90IGFkZCBpZ25vcmVkIGZpbGVzIGJ5IGRlZmF1bHQuICBJZiBhbnkKLWlnbm9yZWQgZmlsZXMgd2VyZSBleHBsaWNpdGx5IHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLCAnZ2l0IGFkZCcKK1RoZSBgZ2l0IGFkZGAgY29tbWFuZCB3aWxsIG5vdCBhZGQgaWdub3JlZCBmaWxlcyBieSBkZWZhdWx0LiAgSWYgYW55CitpZ25vcmVkIGZpbGVzIHdlcmUgZXhwbGljaXRseSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgYGdpdCBhZGRgCiB3aWxsIGZhaWwgd2l0aCBhIGxpc3Qgb2YgaWdub3JlZCBmaWxlcy4gIElnbm9yZWQgZmlsZXMgcmVhY2hlZCBieQogZGlyZWN0b3J5IHJlY3Vyc2lvbiBvciBmaWxlbmFtZSBnbG9iYmluZyBwZXJmb3JtZWQgYnkgR2l0IChxdW90ZSB5b3VyCi1nbG9icyBiZWZvcmUgdGhlIHNoZWxsKSB3aWxsIGJlIHNpbGVudGx5IGlnbm9yZWQuICBUaGUgJ2FkZCcgY29tbWFuZCBjYW4KK2dsb2JzIGJlZm9yZSB0aGUgc2hlbGwpIHdpbGwgYmUgc2lsZW50bHkgaWdub3JlZC4gIFRoZSAnZ2l0IGFkZCcgY29tbWFuZCBjYW4KIGJlIHVzZWQgdG8gYWRkIGlnbm9yZWQgZmlsZXMgd2l0aCB0aGUgYC1mYCAoZm9yY2UpIG9wdGlvbi4KIAogUGxlYXNlIHNlZSBsaW5rZ2l0OmdpdC1jb21taXRbMV0gZm9yIGFsdGVybmF0aXZlIHdheXMgdG8gYWRkIGNvbnRlbnQgdG8gYQpAQCAtNzIsMzQgKzc2LDUxIEBACiAKIC1wOjoKIC0tcGF0Y2g6OgotCVNpbWlsYXIgdG8gSW50ZXJhY3RpdmUgbW9kZSBidXQgdGhlIGluaXRpYWwgY29tbWFuZCBsb29wIGlzCi0JYnlwYXNzZWQgYW5kIHRoZSAncGF0Y2gnIHN1YmNvbW1hbmQgaXMgaW52b2tlZCB1c2luZyBlYWNoIG9mCi0JdGhlIHNwZWNpZmllZCBmaWxlcGF0dGVybnMgYmVmb3JlIGV4aXRpbmcuCisJSW50ZXJhY3RpdmVseSBjaG9vc2UgaHVua3Mgb2YgcGF0Y2ggYmV0d2VlbiB0aGUgaW5kZXggYW5kIHRoZQorCXdvcmsgdHJlZSBhbmQgYWRkIHRoZW0gdG8gdGhlIGluZGV4LiBUaGlzIGdpdmVzIHRoZSB1c2VyIGEgY2hhbmNlCisJdG8gcmV2aWV3IHRoZSBkaWZmZXJlbmNlIGJlZm9yZSBhZGRpbmcgbW9kaWZpZWQgY29udGVudHMgdG8gdGhlCisJaW5kZXguCisrCitUaGlzIGVmZmVjdGl2ZWx5IHJ1bnMgYGFkZCAtLWludGVyYWN0aXZlYCwgYnV0IGJ5cGFzc2VzIHRoZQoraW5pdGlhbCBjb21tYW5kIG1lbnUgYW5kIGRpcmVjdGx5IGp1bXBzIHRvIHRoZSBgcGF0Y2hgIHN1YmNvbW1hbmQuCitTZWUgYGBJbnRlcmFjdGl2ZSBtb2RlJycgZm9yIGRldGFpbHMuCisKKy1lLCBcLS1lZGl0OjoKKwlPcGVuIHRoZSBkaWZmIHZzLiB0aGUgaW5kZXggaW4gYW4gZWRpdG9yIGFuZCBsZXQgdGhlIHVzZXIKKwllZGl0IGl0LiAgQWZ0ZXIgdGhlIGVkaXRvciB3YXMgY2xvc2VkLCBhZGp1c3QgdGhlIGh1bmsgaGVhZGVycworCWFuZCBhcHBseSB0aGUgcGF0Y2ggdG8gdGhlIGluZGV4LgorKworKk5PVEUqOiBPYnZpb3VzbHksIGlmIHlvdSBjaGFuZ2UgYW55dGhpbmcgZWxzZSB0aGFuIHRoZSBmaXJzdCBjaGFyYWN0ZXIKK29uIGxpbmVzIGJlZ2lubmluZyB3aXRoIGEgc3BhY2Ugb3IgYSBtaW51cywgdGhlIHBhdGNoIHdpbGwgbm8gbG9uZ2VyCithcHBseS4KIAogLXU6OgogLS11cGRhdGU6OgotCVVwZGF0ZSBvbmx5IGZpbGVzIHRoYXQgZ2l0IGFscmVhZHkga25vd3MgYWJvdXQsIHN0YWdpbmcgbW9kaWZpZWQKLQljb250ZW50IGZvciBjb21taXQgYW5kIG1hcmtpbmcgZGVsZXRlZCBmaWxlcyBmb3IgcmVtb3ZhbC4gVGhpcwotCWlzIHNpbWlsYXIKLQl0byB3aGF0ICJnaXQgY29tbWl0IC1hIiBkb2VzIGluIHByZXBhcmF0aW9uIGZvciBtYWtpbmcgYSBjb21taXQsCi0JZXhjZXB0IHRoYXQgdGhlIHVwZGF0ZSBpcyBsaW1pdGVkIHRvIHBhdGhzIHNwZWNpZmllZCBvbiB0aGUKLQljb21tYW5kIGxpbmUuIElmIG5vIHBhdGhzIGFyZSBzcGVjaWZpZWQsIGFsbCB0cmFja2VkIGZpbGVzIGluIHRoZQotCWN1cnJlbnQgZGlyZWN0b3J5IGFuZCBpdHMgc3ViZGlyZWN0b3JpZXMgYXJlIHVwZGF0ZWQuCisJT25seSBtYXRjaCA8ZmlsZXBhdHRlcm4+IGFnYWluc3QgYWxyZWFkeSB0cmFja2VkIGZpbGVzIGluCisJdGhlIGluZGV4IHJhdGhlciB0aGFuIHRoZSB3b3JraW5nIHRyZWUuIFRoYXQgbWVhbnMgdGhhdCBpdAorCXdpbGwgbmV2ZXIgc3RhZ2UgbmV3IGZpbGVzLCBidXQgdGhhdCBpdCB3aWxsIHN0YWdlIG1vZGlmaWVkCisJbmV3IGNvbnRlbnRzIG9mIHRyYWNrZWQgZmlsZXMgYW5kIHRoYXQgaXQgd2lsbCByZW1vdmUgZmlsZXMKKwlmcm9tIHRoZSBpbmRleCBpZiB0aGUgY29ycmVzcG9uZGluZyBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlCisJaGF2ZSBiZWVuIHJlbW92ZWQuCisrCitJZiBubyA8ZmlsZXBhdHRlcm4+IGlzIGdpdmVuLCBkZWZhdWx0IHRvICIuIjsgaW4gb3RoZXIgd29yZHMsCit1cGRhdGUgYWxsIHRyYWNrZWQgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBpdHMKK3N1YmRpcmVjdG9yaWVzLgogCiAtQTo6CiAtLWFsbDo6Ci0JVXBkYXRlIGZpbGVzIHRoYXQgZ2l0IGFscmVhZHkga25vd3MgYWJvdXQgKHNhbWUgYXMgJ1wtLXVwZGF0ZScpCi0JYW5kIGFkZCBhbGwgdW50cmFja2VkIGZpbGVzIHRoYXQgYXJlIG5vdCBpZ25vcmVkIGJ5ICcuZ2l0aWdub3JlJwotCW1lY2hhbmlzbS4KLQorCUxpa2UgYC11YCwgYnV0IG1hdGNoIDxmaWxlcGF0dGVybj4gYWdhaW5zdCBmaWxlcyBpbiB0aGUKKwl3b3JraW5nIHRyZWUgaW4gYWRkaXRpb24gdG8gdGhlIGluZGV4LiBUaGF0IG1lYW5zIHRoYXQgaXQKKwl3aWxsIGZpbmQgbmV3IGZpbGVzIGFzIHdlbGwgYXMgc3RhZ2luZyBtb2RpZmllZCBjb250ZW50IGFuZAorCXJlbW92aW5nIGZpbGVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB0aGUgd29ya2luZyB0cmVlLgogCiAtTjo6CiAtLWludGVudC10by1hZGQ6OgogCVJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgdGhlIHBhdGggd2lsbCBiZSBhZGRlZCBsYXRlci4gQW4gZW50cnkKIAlmb3IgdGhlIHBhdGggaXMgcGxhY2VkIGluIHRoZSBpbmRleCB3aXRoIG5vIGNvbnRlbnQuIFRoaXMgaXMKIAl1c2VmdWwgZm9yLCBhbW9uZyBvdGhlciB0aGluZ3MsIHNob3dpbmcgdGhlIHVuc3RhZ2VkIGNvbnRlbnQgb2YKLQlzdWNoIGZpbGVzIHdpdGggJ2dpdCBkaWZmJyBhbmQgY29tbWl0dGluZyB0aGVtIHdpdGggJ2dpdCBjb21taXQKLQktYScuCisJc3VjaCBmaWxlcyB3aXRoIGBnaXQgZGlmZmAgYW5kIGNvbW1pdHRpbmcgdGhlbSB3aXRoIGBnaXQgY29tbWl0CisJLWFgLgogCiAtLXJlZnJlc2g6OgogCURvbid0IGFkZCB0aGUgZmlsZShzKSwgYnV0IG9ubHkgcmVmcmVzaCB0aGVpciBzdGF0KCkKQEAgLTExOSw3ICsxNDAsNyBAQAogQ29uZmlndXJhdGlvbgogLS0tLS0tLS0tLS0tLQogCi1UaGUgb3B0aW9uYWwgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAnY29yZS5leGNsdWRlc2ZpbGUnIGluZGljYXRlcyBhIHBhdGggdG8gYQorVGhlIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGNvcmUuZXhjbHVkZXNmaWxlYCBpbmRpY2F0ZXMgYSBwYXRoIHRvIGEKIGZpbGUgY29udGFpbmluZyBwYXR0ZXJucyBvZiBmaWxlIG5hbWVzIHRvIGV4Y2x1ZGUgZnJvbSBnaXQtYWRkLCBzaW1pbGFyIHRvCiAkR0lUX0RJUi9pbmZvL2V4Y2x1ZGUuICBQYXR0ZXJucyBpbiB0aGUgZXhjbHVkZSBmaWxlIGFyZSB1c2VkIGluIGFkZGl0aW9uIHRvCiB0aG9zZSBpbiBpbmZvL2V4Y2x1ZGUuICBTZWUgbGlua2dpdDpnaXRyZXBvc2l0b3J5LWxheW91dFs1XS4KQEAgLTEzMiw3ICsxNTMsNyBAQAogYW5kIGl0cyBzdWJkaXJlY3RvcmllczoKICsKIC0tLS0tLS0tLS0tLQotJCBnaXQgYWRkIERvY3VtZW50YXRpb24vXFwqLnR4dAorJCBnaXQgYWRkIERvY3VtZW50YXRpb24vXCoudHh0CiAtLS0tLS0tLS0tLS0KICsKIE5vdGUgdGhhdCB0aGUgYXN0ZXJpc2sgYFwqYCBpcyBxdW90ZWQgZnJvbSB0aGUgc2hlbGwgaW4gdGhpcwpAQCAtMTY3LDcgKzE4OCw3IEBACiAgICAgV2hhdCBub3c+IDEKIC0tLS0tLS0tLS0tLQogCi1Zb3UgYWxzbyBjb3VsZCBzYXkgInMiIG9yICJzdGEiIG9yICJzdGF0dXMiIGFib3ZlIGFzIGxvbmcgYXMgdGhlCitZb3UgYWxzbyBjb3VsZCBzYXkgYHNgIG9yIGBzdGFgIG9yIGBzdGF0dXNgIGFib3ZlIGFzIGxvbmcgYXMgdGhlCiBjaG9pY2UgaXMgdW5pcXVlLgogCiBUaGUgbWFpbiBjb21tYW5kIGxvb3AgaGFzIDYgc3ViY29tbWFuZHMgKHBsdXMgaGVscCBhbmQgcXVpdCkuCkBAIC0xNzUsOSArMTk2LDkgQEAKIHN0YXR1czo6CiAKICAgIFRoaXMgc2hvd3MgdGhlIGNoYW5nZSBiZXR3ZWVuIEhFQUQgYW5kIGluZGV4IChpLmUuIHdoYXQgd2lsbCBiZQotICAgY29tbWl0dGVkIGlmIHlvdSBzYXkgImdpdCBjb21taXQiKSwgYW5kIGJldHdlZW4gaW5kZXggYW5kCisgICBjb21taXR0ZWQgaWYgeW91IHNheSBgZ2l0IGNvbW1pdGApLCBhbmQgYmV0d2VlbiBpbmRleCBhbmQKICAgIHdvcmtpbmcgdHJlZSBmaWxlcyAoaS5lLiB3aGF0IHlvdSBjb3VsZCBzdGFnZSBmdXJ0aGVyIGJlZm9yZQotICAgImdpdCBjb21taXQiIHVzaW5nICJnaXQtYWRkIikgZm9yIGVhY2ggcGF0aC4gIEEgc2FtcGxlIG91dHB1dAorICAgYGdpdCBjb21taXRgIHVzaW5nIGBnaXQgYWRkYCkgZm9yIGVhY2ggcGF0aC4gIEEgc2FtcGxlIG91dHB1dAogICAgbG9va3MgbGlrZSB0aGlzOgogKwogLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1hbS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1hbS50eHQKaW5kZXggNmQ5MmNiZS4uMjM4NjRkZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtYW0udHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWFtLnR4dApAQCAtMTEsMTEgKzExLDExIEBACiBbdmVyc2VdCiAnZ2l0IGFtJyBbLS1zaWdub2ZmXSBbLS1rZWVwXSBbLS11dGY4IHwgLS1uby11dGY4XQogCSBbLS0zd2F5XSBbLS1pbnRlcmFjdGl2ZV0gWy0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGVdCi0JIFstLWlnbm9yZS1kYXRlXQorCSBbLS1pZ25vcmUtZGF0ZV0gWy0taWdub3JlLXNwYWNlLWNoYW5nZSB8IC0taWdub3JlLXdoaXRlc3BhY2VdCiAJIFstLXdoaXRlc3BhY2U9PG9wdGlvbj5dIFstQzxuPl0gWy1wPG4+XSBbLS1kaXJlY3Rvcnk9PGRpcj5dCi0JIFstLXJlamVjdF0KKwkgWy0tcmVqZWN0XSBbLXEgfCAtLXF1aWV0XSBbLS1zY2lzc29ycyB8IC0tbm8tc2Npc3NvcnNdCiAJIFs8bWJveD4gfCA8TWFpbGRpcj4uLi5dCi0nZ2l0IGFtJyAoLS1za2lwIHwgLS1yZXNvbHZlZCB8IC0tYWJvcnQpCisnZ2l0IGFtJyAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQpCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQpAQCAtMzcsMTEgKzM3LDIzIEBACiAKIC1rOjoKIC0ta2VlcDo6Ci0JUGFzcyBgLWtgIGZsYWcgdG8gJ2dpdC1tYWlsaW5mbycgKHNlZSBsaW5rZ2l0OmdpdC1tYWlsaW5mb1sxXSkuCisJUGFzcyBgLWtgIGZsYWcgdG8gJ2dpdCBtYWlsaW5mbycgKHNlZSBsaW5rZ2l0OmdpdC1tYWlsaW5mb1sxXSkuCisKKy1jOjoKKy0tc2Npc3NvcnM6OgorCVJlbW92ZSBldmVyeXRoaW5nIGluIGJvZHkgYmVmb3JlIGEgc2Npc3NvcnMgbGluZSAoc2VlCisJbGlua2dpdDpnaXQtbWFpbGluZm9bMV0pLgorCistLW5vLXNjaXNzb3JzOjoKKwlJZ25vcmUgc2Npc3NvcnMgbGluZXMgKHNlZSBsaW5rZ2l0OmdpdC1tYWlsaW5mb1sxXSkuCisKKy1xOjoKKy0tcXVpZXQ6OgorCUJlIHF1aWV0LiBPbmx5IHByaW50IGVycm9yIG1lc3NhZ2VzLgogCiAtdTo6CiAtLXV0Zjg6OgotCVBhc3MgYC11YCBmbGFnIHRvICdnaXQtbWFpbGluZm8nIChzZWUgbGlua2dpdDpnaXQtbWFpbGluZm9bMV0pLgorCVBhc3MgYC11YCBmbGFnIHRvICdnaXQgbWFpbGluZm8nIChzZWUgbGlua2dpdDpnaXQtbWFpbGluZm9bMV0pLgogCVRoZSBwcm9wb3NlZCBjb21taXQgbG9nIG1lc3NhZ2UgdGFrZW4gZnJvbSB0aGUgZS1tYWlsCiAJaXMgcmUtY29kZWQgaW50byBVVEYtOCBlbmNvZGluZyAoY29uZmlndXJhdGlvbiB2YXJpYWJsZQogCWBpMThuLmNvbW1pdGVuY29kaW5nYCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHByb2plY3QncwpAQCAtNTEsNyArNjMsNyBAQAogZGVmYXVsdC4gICBZb3UgY2FuIHVzZSBgLS1uby11dGY4YCB0byBvdmVycmlkZSB0aGlzLgogCiAtLW5vLXV0Zjg6OgotCVBhc3MgYC1uYCBmbGFnIHRvICdnaXQtbWFpbGluZm8nIChzZWUKKwlQYXNzIGAtbmAgZmxhZyB0byAnZ2l0IG1haWxpbmZvJyAoc2VlCiAJbGlua2dpdDpnaXQtbWFpbGluZm9bMV0pLgogCiAtMzo6CkBAIC02MSwxMiArNzMsMTUgQEAKIAlpdCBpcyBzdXBwb3NlZCB0byBhcHBseSB0byBhbmQgd2UgaGF2ZSB0aG9zZSBibG9icwogCWF2YWlsYWJsZSBsb2NhbGx5LgogCistLWlnbm9yZS1kYXRlOjoKKy0taWdub3JlLXNwYWNlLWNoYW5nZTo6CistLWlnbm9yZS13aGl0ZXNwYWNlOjoKIC0td2hpdGVzcGFjZT08b3B0aW9uPjo6CiAtQzxuPjo6CiAtcDxuPjo6CiAtLWRpcmVjdG9yeT08ZGlyPjo6CiAtLXJlamVjdDo6Ci0JVGhlc2UgZmxhZ3MgYXJlIHBhc3NlZCB0byB0aGUgJ2dpdC1hcHBseScgKHNlZSBsaW5rZ2l0OmdpdC1hcHBseVsxXSkKKwlUaGVzZSBmbGFncyBhcmUgcGFzc2VkIHRvIHRoZSAnZ2l0IGFwcGx5JyAoc2VlIGxpbmtnaXQ6Z2l0LWFwcGx5WzFdKQogCXByb2dyYW0gdGhhdCBhcHBsaWVzCiAJdGhlIHBhdGNoLgogCkBAIC05Miw2ICsxMDcsNyBAQAogCVNraXAgdGhlIGN1cnJlbnQgcGF0Y2guICBUaGlzIGlzIG9ubHkgbWVhbmluZ2Z1bCB3aGVuCiAJcmVzdGFydGluZyBhbiBhYm9ydGVkIHBhdGNoLgogCistLWNvbnRpbnVlOjoKIC1yOjoKIC0tcmVzb2x2ZWQ6OgogCUFmdGVyIGEgcGF0Y2ggZmFpbHVyZSAoZS5nLiBhdHRlbXB0aW5nIHRvIGFwcGx5CkBAIC0xMDYsNyArMTIyLDcgQEAKIAl0byB0aGUgc2NyZWVuIGJlZm9yZSBleGl0aW5nLiAgVGhpcyBvdmVycmlkZXMgdGhlCiAJc3RhbmRhcmQgbWVzc2FnZSBpbmZvcm1pbmcgeW91IHRvIHVzZSBgLS1yZXNvbHZlZGAKIAlvciBgLS1za2lwYCB0byBoYW5kbGUgdGhlIGZhaWx1cmUuICBUaGlzIGlzIHNvbGVseQotCWZvciBpbnRlcm5hbCB1c2UgYmV0d2VlbiAnZ2l0LXJlYmFzZScgYW5kICdnaXQtYW0nLgorCWZvciBpbnRlcm5hbCB1c2UgYmV0d2VlbiAnZ2l0IHJlYmFzZScgYW5kICdnaXQgYW0nLgogCiAtLWFib3J0OjoKIAlSZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIGFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24uCkBAIC0xMjEsMTAgKzEzNyw4IEBACiBUaGUgIlN1YmplY3Q6ICIgbGluZSBpcyBzdXBwb3NlZCB0byBjb25jaXNlbHkgZGVzY3JpYmUgd2hhdCB0aGUKIGNvbW1pdCBpcyBhYm91dCBpbiBvbmUgbGluZSBvZiB0ZXh0LgogCi0iRnJvbTogIiBhbmQgIlN1YmplY3Q6ICIgbGluZXMgc3RhcnRpbmcgdGhlIGJvZHkgKHRoZSByZXN0IG9mIHRoZQotbWVzc2FnZSBhZnRlciB0aGUgYmxhbmsgbGluZSB0ZXJtaW5hdGluZyB0aGUgUkZDMjgyMiBoZWFkZXJzKQotb3ZlcnJpZGUgdGhlIHJlc3BlY3RpdmUgY29tbWl0IGF1dGhvciBuYW1lIGFuZCB0aXRsZSB2YWx1ZXMgdGFrZW4KLWZyb20gdGhlIGhlYWRlcnMuCisiRnJvbTogIiBhbmQgIlN1YmplY3Q6ICIgbGluZXMgc3RhcnRpbmcgdGhlIGJvZHkgb3ZlcnJpZGUgdGhlIHJlc3BlY3RpdmUKK2NvbW1pdCBhdXRob3IgbmFtZSBhbmQgdGl0bGUgdmFsdWVzIHRha2VuIGZyb20gdGhlIGhlYWRlcnMuCiAKIFRoZSBjb21taXQgbWVzc2FnZSBpcyBmb3JtZWQgYnkgdGhlIHRpdGxlIHRha2VuIGZyb20gdGhlCiAiU3ViamVjdDogIiwgYSBibGFuayBsaW5lIGFuZCB0aGUgYm9keSBvZiB0aGUgbWVzc2FnZSB1cCB0bwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYXBwbHkudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYXBwbHkudHh0CmluZGV4IDllNWJhYTIuLjg0NjM0MzkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWFwcGx5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1hcHBseS50eHQKQEAgLTMsNyArMyw3IEBACiAKIE5BTUUKIC0tLS0KLWdpdC1hcHBseSAtIEFwcGx5IGEgcGF0Y2ggb24gYSBnaXQgaW5kZXggZmlsZSBhbmQgYSB3b3JraW5nIHRyZWUKK2dpdC1hcHBseSAtIEFwcGx5IGEgcGF0Y2ggdG8gZmlsZXMgYW5kL29yIHRvIHRoZSBpbmRleAogCiAKIFNZTk9QU0lTCkBAIC0xMywxNCArMTMsMTggQEAKIAkgIFstLWFwcGx5XSBbLS1uby1hZGRdIFstLWJ1aWxkLWZha2UtYW5jZXN0b3I9PGZpbGU+XSBbLVIgfCAtLXJldmVyc2VdCiAJICBbLS1hbGxvdy1iaW5hcnktcmVwbGFjZW1lbnQgfCAtLWJpbmFyeV0gWy0tcmVqZWN0XSBbLXpdCiAJICBbLXBOVU1dIFstQ05VTV0gWy0taW5hY2N1cmF0ZS1lb2ZdIFstLXJlY291bnRdIFstLWNhY2hlZF0KKwkgIFstLWlnbm9yZS1zcGFjZS1jaGFuZ2UgfCAtLWlnbm9yZS13aGl0ZXNwYWNlIF0KIAkgIFstLXdoaXRlc3BhY2U9PG5vd2Fybnx3YXJufGZpeHxlcnJvcnxlcnJvci1hbGw+XQogCSAgWy0tZXhjbHVkZT1QQVRIXSBbLS1pbmNsdWRlPVBBVEhdIFstLWRpcmVjdG9yeT08cm9vdD5dCiAJICBbLS12ZXJib3NlXSBbPHBhdGNoPi4uLl0KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCi1SZWFkcyBzdXBwbGllZCAnZGlmZicgb3V0cHV0IGFuZCBhcHBsaWVzIGl0IG9uIGEgZ2l0IGluZGV4IGZpbGUKLWFuZCBhIHdvcmsgdHJlZS4KK1JlYWRzIHRoZSBzdXBwbGllZCBkaWZmIG91dHB1dCAoaS5lLiAiYSBwYXRjaCIpIGFuZCBhcHBsaWVzIGl0IHRvIGZpbGVzLgorV2l0aCB0aGUgYC0taW5kZXhgIG9wdGlvbiB0aGUgcGF0Y2ggaXMgYWxzbyBhcHBsaWVkIHRvIHRoZSBpbmRleCwgYW5kCit3aXRoIHRoZSBgLS1jYWNoZWAgb3B0aW9uIHRoZSBwYXRjaCBpcyBvbmx5IGFwcGxpZWQgdG8gdGhlIGluZGV4LgorV2l0aG91dCB0aGVzZSBvcHRpb25zLCB0aGUgY29tbWFuZCBhcHBsaWVzIHRoZSBwYXRjaCBvbmx5IHRvIGZpbGVzLAorYW5kIGRvZXMgbm90IHJlcXVpcmUgdGhlbSB0byBiZSBpbiBhIGdpdCByZXBvc2l0b3J5LgogCiBPUFRJT05TCiAtLS0tLS0tCkBAIC0zMyw3ICszNyw3IEBACiAJaW5wdXQuICBUdXJucyBvZmYgImFwcGx5Ii4KIAogLS1udW1zdGF0OjoKLQlTaW1pbGFyIHRvIFwtLXN0YXQsIGJ1dCBzaG93cyB0aGUgbnVtYmVyIG9mIGFkZGVkIGFuZAorCVNpbWlsYXIgdG8gYC0tc3RhdGAsIGJ1dCBzaG93cyB0aGUgbnVtYmVyIG9mIGFkZGVkIGFuZAogCWRlbGV0ZWQgbGluZXMgaW4gZGVjaW1hbCBub3RhdGlvbiBhbmQgdGhlIHBhdGhuYW1lIHdpdGhvdXQKIAlhYmJyZXZpYXRpb24sIHRvIG1ha2UgaXQgbW9yZSBtYWNoaW5lIGZyaWVuZGx5LiAgRm9yCiAJYmluYXJ5IGZpbGVzLCBvdXRwdXRzIHR3byBgLWAgaW5zdGVhZCBvZiBzYXlpbmcKQEAgLTQ3LDI1ICs1MSwyNSBAQAogCiAtLWNoZWNrOjoKIAlJbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgc2VlIGlmIHRoZSBwYXRjaCBpcwotCWFwcGxpY2FibGUgdG8gdGhlIGN1cnJlbnQgd29yayB0cmVlIGFuZC9vciB0aGUgaW5kZXgKKwlhcHBsaWNhYmxlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgdHJlZSBhbmQvb3IgdGhlIGluZGV4CiAJZmlsZSBhbmQgZGV0ZWN0cyBlcnJvcnMuICBUdXJucyBvZmYgImFwcGx5Ii4KIAogLS1pbmRleDo6Ci0JV2hlbiAtLWNoZWNrIGlzIGluIGVmZmVjdCwgb3Igd2hlbiBhcHBseWluZyB0aGUgcGF0Y2gKKwlXaGVuIGAtLWNoZWNrYCBpcyBpbiBlZmZlY3QsIG9yIHdoZW4gYXBwbHlpbmcgdGhlIHBhdGNoCiAJKHdoaWNoIGlzIHRoZSBkZWZhdWx0IHdoZW4gbm9uZSBvZiB0aGUgb3B0aW9ucyB0aGF0CiAJZGlzYWJsZXMgaXQgaXMgaW4gZWZmZWN0KSwgbWFrZSBzdXJlIHRoZSBwYXRjaCBpcwogCWFwcGxpY2FibGUgdG8gd2hhdCB0aGUgY3VycmVudCBpbmRleCBmaWxlIHJlY29yZHMuICBJZgotCXRoZSBmaWxlIHRvIGJlIHBhdGNoZWQgaW4gdGhlIHdvcmsgdHJlZSBpcyBub3QKKwl0aGUgZmlsZSB0byBiZSBwYXRjaGVkIGluIHRoZSB3b3JraW5nIHRyZWUgaXMgbm90CiAJdXAtdG8tZGF0ZSwgaXQgaXMgZmxhZ2dlZCBhcyBhbiBlcnJvci4gIFRoaXMgZmxhZyBhbHNvCiAJY2F1c2VzIHRoZSBpbmRleCBmaWxlIHRvIGJlIHVwZGF0ZWQuCiAKIC0tY2FjaGVkOjoKIAlBcHBseSBhIHBhdGNoIHdpdGhvdXQgdG91Y2hpbmcgdGhlIHdvcmtpbmcgdHJlZS4gSW5zdGVhZCB0YWtlIHRoZQogCWNhY2hlZCBkYXRhLCBhcHBseSB0aGUgcGF0Y2gsIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIHRoZSBpbmRleAotCXdpdGhvdXQgdXNpbmcgdGhlIHdvcmtpbmcgdHJlZS4gVGhpcyBpbXBsaWVzICctLWluZGV4Jy4KKwl3aXRob3V0IHVzaW5nIHRoZSB3b3JraW5nIHRyZWUuIFRoaXMgaW1wbGllcyBgLS1pbmRleGAuCiAKIC0tYnVpbGQtZmFrZS1hbmNlc3Rvcj08ZmlsZT46OgotCU5ld2VyICdnaXQtZGlmZicgb3V0cHV0IGhhcyBlbWJlZGRlZCAnaW5kZXggaW5mb3JtYXRpb24nCisJTmV3ZXIgJ2dpdCBkaWZmJyBvdXRwdXQgaGFzIGVtYmVkZGVkICdpbmRleCBpbmZvcm1hdGlvbicKIAlmb3IgZWFjaCBibG9iIHRvIGhlbHAgaWRlbnRpZnkgdGhlIG9yaWdpbmFsIHZlcnNpb24gdGhhdAogCXRoZSBwYXRjaCBhcHBsaWVzIHRvLiAgV2hlbiB0aGlzIGZsYWcgaXMgZ2l2ZW4sIGFuZCBpZgogCXRoZSBvcmlnaW5hbCB2ZXJzaW9ucyBvZiB0aGUgYmxvYnMgYXJlIGF2YWlsYWJsZSBsb2NhbGx5LApAQCAtNzksMTggKzgzLDIwIEBACiAJQXBwbHkgdGhlIHBhdGNoIGluIHJldmVyc2UuCiAKIC0tcmVqZWN0OjoKLQlGb3IgYXRvbWljaXR5LCAnZ2l0LWFwcGx5JyBieSBkZWZhdWx0IGZhaWxzIHRoZSB3aG9sZSBwYXRjaCBhbmQKKwlGb3IgYXRvbWljaXR5LCAnZ2l0IGFwcGx5JyBieSBkZWZhdWx0IGZhaWxzIHRoZSB3aG9sZSBwYXRjaCBhbmQKIAlkb2VzIG5vdCB0b3VjaCB0aGUgd29ya2luZyB0cmVlIHdoZW4gc29tZSBvZiB0aGUgaHVua3MKIAlkbyBub3QgYXBwbHkuICBUaGlzIG9wdGlvbiBtYWtlcyBpdCBhcHBseQogCXRoZSBwYXJ0cyBvZiB0aGUgcGF0Y2ggdGhhdCBhcmUgYXBwbGljYWJsZSwgYW5kIGxlYXZlIHRoZQogCXJlamVjdGVkIGh1bmtzIGluIGNvcnJlc3BvbmRpbmcgKi5yZWogZmlsZXMuCiAKIC16OjoKLQlXaGVuIHNob3dpbmcgdGhlIGluZGV4IGluZm9ybWF0aW9uLCBkbyBub3QgbXVuZ2UgcGF0aHMsCi0JYnV0IHVzZSBOVUwgdGVybWluYXRlZCBtYWNoaW5lIHJlYWRhYmxlIGZvcm1hdC4gIFdpdGhvdXQKLQl0aGlzIGZsYWcsIHRoZSBwYXRobmFtZXMgb3V0cHV0IHdpbGwgaGF2ZSBUQUIsIExGLCBhbmQKLQliYWNrc2xhc2ggY2hhcmFjdGVycyByZXBsYWNlZCB3aXRoIGBcdGAsIGBcbmAsIGFuZCBgXFxgLAotCXJlc3BlY3RpdmVseS4KKwlXaGVuIGAtLW51bXN0YXRgIGhhcyBiZWVuIGdpdmVuLCBkbyBub3QgbXVuZ2UgcGF0aG5hbWVzLAorCWJ1dCB1c2UgYSBOVUwtdGVybWluYXRlZCBtYWNoaW5lLXJlYWRhYmxlIGZvcm1hdC4KKysKK1dpdGhvdXQgdGhpcyBvcHRpb24sIGVhY2ggcGF0aG5hbWUgb3V0cHV0IHdpbGwgaGF2ZSBUQUIsIExGLCBkb3VibGUgcXVvdGVzLAorYW5kIGJhY2tzbGFzaCBjaGFyYWN0ZXJzIHJlcGxhY2VkIHdpdGggYFx0YCwgYFxuYCwgYFwiYCwgYW5kIGBcXGAsCityZXNwZWN0aXZlbHksIGFuZCB0aGUgcGF0aG5hbWUgd2lsbCBiZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzIGlmCithbnkgb2YgdGhvc2UgcmVwbGFjZW1lbnRzIG9jY3VycmVkLgogCiAtcDxuPjo6CiAJUmVtb3ZlIDxuPiBsZWFkaW5nIHNsYXNoZXMgZnJvbSB0cmFkaXRpb25hbCBkaWZmIHBhdGhzLiBUaGUKQEAgLTEwMywxOCArMTA5LDE4IEBACiAJZXZlciBpZ25vcmVkLgogCiAtLXVuaWRpZmYtemVybzo6Ci0JQnkgZGVmYXVsdCwgJ2dpdC1hcHBseScgZXhwZWN0cyB0aGF0IHRoZSBwYXRjaCBiZWluZworCUJ5IGRlZmF1bHQsICdnaXQgYXBwbHknIGV4cGVjdHMgdGhhdCB0aGUgcGF0Y2ggYmVpbmcKIAlhcHBsaWVkIGlzIGEgdW5pZmllZCBkaWZmIHdpdGggYXQgbGVhc3Qgb25lIGxpbmUgb2YgY29udGV4dC4KIAlUaGlzIHByb3ZpZGVzIGdvb2Qgc2FmZXR5IG1lYXN1cmVzLCBidXQgYnJlYWtzIGRvd24gd2hlbgotCWFwcGx5aW5nIGEgZGlmZiBnZW5lcmF0ZWQgd2l0aCAtLXVuaWZpZWQ9MC4gVG8gYnlwYXNzIHRoZXNlCi0JY2hlY2tzIHVzZSAnLS11bmlkaWZmLXplcm8nLgorCWFwcGx5aW5nIGEgZGlmZiBnZW5lcmF0ZWQgd2l0aCBgLS11bmlmaWVkPTBgLiBUbyBieXBhc3MgdGhlc2UKKwljaGVja3MgdXNlIGAtLXVuaWRpZmYtemVyb2AuCiArCiBOb3RlLCBmb3IgdGhlIHJlYXNvbnMgc3RhdGVkIGFib3ZlIHVzYWdlIG9mIGNvbnRleHQtZnJlZSBwYXRjaGVzIGlzCiBkaXNjb3VyYWdlZC4KIAogLS1hcHBseTo6CiAJSWYgeW91IHVzZSBhbnkgb2YgdGhlIG9wdGlvbnMgbWFya2VkICJUdXJucyBvZmYKLQknYXBwbHknIiBhYm92ZSwgJ2dpdC1hcHBseScgcmVhZHMgYW5kIG91dHB1dHMgdGhlCisJJ2FwcGx5JyIgYWJvdmUsICdnaXQgYXBwbHknIHJlYWRzIGFuZCBvdXRwdXRzIHRoZQogCXJlcXVlc3RlZCBpbmZvcm1hdGlvbiB3aXRob3V0IGFjdHVhbGx5IGFwcGx5aW5nIHRoZQogCXBhdGNoLiAgR2l2ZSB0aGlzIGZsYWcgYWZ0ZXIgdGhvc2UgZmxhZ3MgdG8gYWxzbyBhcHBseQogCXRoZSBwYXRjaC4KQEAgLTE0MywxMiArMTQ5LDIwIEBACiAJYmUgdXNlZnVsIHdoZW4gaW1wb3J0aW5nIHBhdGNoc2V0cywgd2hlcmUgeW91IHdhbnQgdG8gaW5jbHVkZSBjZXJ0YWluCiAJZmlsZXMgb3IgZGlyZWN0b3JpZXMuCiArCi1XaGVuIC0tZXhjbHVkZSBhbmQgLS1pbmNsdWRlIHBhdHRlcm5zIGFyZSB1c2VkLCB0aGV5IGFyZSBleGFtaW5lZCBpbiB0aGUKK1doZW4gYC0tZXhjbHVkZWAgYW5kIGAtLWluY2x1ZGVgIHBhdHRlcm5zIGFyZSB1c2VkLCB0aGV5IGFyZSBleGFtaW5lZCBpbiB0aGUKIG9yZGVyIHRoZXkgYXBwZWFyIG9uIHRoZSBjb21tYW5kIGxpbmUsIGFuZCB0aGUgZmlyc3QgbWF0Y2ggZGV0ZXJtaW5lcyBpZiBhCiBwYXRjaCB0byBlYWNoIHBhdGggaXMgdXNlZC4gIEEgcGF0Y2ggdG8gYSBwYXRoIHRoYXQgZG9lcyBub3QgbWF0Y2ggYW55CiBpbmNsdWRlL2V4Y2x1ZGUgcGF0dGVybiBpcyB1c2VkIGJ5IGRlZmF1bHQgaWYgdGhlcmUgaXMgbm8gaW5jbHVkZSBwYXR0ZXJuCiBvbiB0aGUgY29tbWFuZCBsaW5lLCBhbmQgaWdub3JlZCBpZiB0aGVyZSBpcyBhbnkgaW5jbHVkZSBwYXR0ZXJuLgogCistLWlnbm9yZS1zcGFjZS1jaGFuZ2U6OgorLS1pZ25vcmUtd2hpdGVzcGFjZTo6CisJV2hlbiBhcHBseWluZyBhIHBhdGNoLCBpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIGluIGNvbnRleHQKKwlsaW5lcyBpZiBuZWNlc3NhcnkuCisJQ29udGV4dCBsaW5lcyB3aWxsIHByZXNlcnZlIHRoZWlyIHdoaXRlc3BhY2UsIGFuZCB0aGV5IHdpbGwgbm90CisJdW5kZXJnbyB3aGl0ZXNwYWNlIGZpeGluZyByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZiB0aGUKKwlgLS13aGl0ZXNwYWNlYCBvcHRpb24uIE5ldyBsaW5lcyB3aWxsIHN0aWxsIGJlIGZpeGVkLCB0aG91Z2guCisKIC0td2hpdGVzcGFjZT08YWN0aW9uPjo6CiAJV2hlbiBhcHBseWluZyBhIHBhdGNoLCBkZXRlY3QgYSBuZXcgb3IgbW9kaWZpZWQgbGluZSB0aGF0IGhhcwogCXdoaXRlc3BhY2UgZXJyb3JzLiAgV2hhdCBhcmUgY29uc2lkZXJlZCB3aGl0ZXNwYWNlIGVycm9ycyBpcwpAQCAtMjA1LDIyICsyMTksMjYgQEAKIENvbmZpZ3VyYXRpb24KIC0tLS0tLS0tLS0tLS0KIAorYXBwbHkuaWdub3Jld2hpdGVzcGFjZTo6CisJU2V0IHRvICdjaGFuZ2UnIGlmIHlvdSB3YW50IGNoYW5nZXMgaW4gd2hpdGVzcGFjZSB0byBiZSBpZ25vcmVkIGJ5IGRlZmF1bHQuCisJU2V0IHRvIG9uZSBvZjogbm8sIG5vbmUsIG5ldmVyLCBmYWxzZSBpZiB5b3Ugd2FudCBjaGFuZ2VzIGluCisJd2hpdGVzcGFjZSB0byBiZSBzaWduaWZpY2FudC4KIGFwcGx5LndoaXRlc3BhY2U6OgogCVdoZW4gbm8gYC0td2hpdGVzcGFjZWAgZmxhZyBpcyBnaXZlbiBmcm9tIHRoZSBjb21tYW5kCiAJbGluZSwgdGhpcyBjb25maWd1cmF0aW9uIGl0ZW0gaXMgdXNlZCBhcyB0aGUgZGVmYXVsdC4KIAogU3VibW9kdWxlcwogLS0tLS0tLS0tLQotSWYgdGhlIHBhdGNoIGNvbnRhaW5zIGFueSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMgdGhlbiAnZ2l0LWFwcGx5JworSWYgdGhlIHBhdGNoIGNvbnRhaW5zIGFueSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMgdGhlbiAnZ2l0IGFwcGx5JwogdHJlYXRzIHRoZXNlIGNoYW5nZXMgYXMgZm9sbG93cy4KIAotSWYgLS1pbmRleCBpcyBzcGVjaWZpZWQgKGV4cGxpY2l0bHkgb3IgaW1wbGljaXRseSksIHRoZW4gdGhlIHN1Ym1vZHVsZQorSWYgYC0taW5kZXhgIGlzIHNwZWNpZmllZCAoZXhwbGljaXRseSBvciBpbXBsaWNpdGx5KSwgdGhlbiB0aGUgc3VibW9kdWxlCiBjb21taXRzIG11c3QgbWF0Y2ggdGhlIGluZGV4IGV4YWN0bHkgZm9yIHRoZSBwYXRjaCB0byBhcHBseS4gIElmIGFueQogb2YgdGhlIHN1Ym1vZHVsZXMgYXJlIGNoZWNrZWQtb3V0LCB0aGVuIHRoZXNlIGNoZWNrLW91dHMgYXJlIGNvbXBsZXRlbHkKIGlnbm9yZWQsIGkuZS4sIHRoZXkgYXJlIG5vdCByZXF1aXJlZCB0byBiZSB1cC10by1kYXRlIG9yIGNsZWFuIGFuZCB0aGV5CiBhcmUgbm90IHVwZGF0ZWQuCiAKLUlmIC0taW5kZXggaXMgbm90IHNwZWNpZmllZCwgdGhlbiB0aGUgc3VibW9kdWxlIGNvbW1pdHMgaW4gdGhlIHBhdGNoCitJZiBgLS1pbmRleGAgaXMgbm90IHNwZWNpZmllZCwgdGhlbiB0aGUgc3VibW9kdWxlIGNvbW1pdHMgaW4gdGhlIHBhdGNoCiBhcmUgaWdub3JlZCBhbmQgb25seSB0aGUgYWJzZW5jZSBvciBwcmVzZW5jZSBvZiB0aGUgY29ycmVzcG9uZGluZwogc3ViZGlyZWN0b3J5IGlzIGNoZWNrZWQgYW5kIChpZiBwb3NzaWJsZSkgdXBkYXRlZC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYXJjaGltcG9ydC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1hcmNoaW1wb3J0LnR4dAppbmRleCBjN2E2ZTNlLi40ZDQzMjVmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1hcmNoaW1wb3J0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1hcmNoaW1wb3J0LnR4dApAQCAtMjksMTcgKzI5LDE3IEBACiBlZGl0IHlvdXIgPGFyY2hpdmUvYnJhbmNoPiBwYXJhbWV0ZXJzIHRvIGRlZmluZSBjbGVhcmx5IHRoZSBzY29wZSBvZiB0aGUKIGltcG9ydC4KIAotJ2dpdC1hcmNoaW1wb3J0JyB1c2VzIGB0bGFgIGV4dGVuc2l2ZWx5IGluIHRoZSBiYWNrZ3JvdW5kIHRvIGFjY2VzcyB0aGUKKydnaXQgYXJjaGltcG9ydCcgdXNlcyBgdGxhYCBleHRlbnNpdmVseSBpbiB0aGUgYmFja2dyb3VuZCB0byBhY2Nlc3MgdGhlCiBBcmNoIHJlcG9zaXRvcnkuCiBNYWtlIHN1cmUgeW91IGhhdmUgYSByZWNlbnQgdmVyc2lvbiBvZiBgdGxhYCBhdmFpbGFibGUgaW4gdGhlIHBhdGguIGB0bGFgIG11c3QKLWtub3cgYWJvdXQgdGhlIHJlcG9zaXRvcmllcyB5b3UgcGFzcyB0byAnZ2l0LWFyY2hpbXBvcnQnLgora25vdyBhYm91dCB0aGUgcmVwb3NpdG9yaWVzIHlvdSBwYXNzIHRvICdnaXQgYXJjaGltcG9ydCcuCiAKLUZvciB0aGUgaW5pdGlhbCBpbXBvcnQsICdnaXQtYXJjaGltcG9ydCcgZXhwZWN0cyB0byBmaW5kIGl0c2VsZiBpbiBhbiBlbXB0eQorRm9yIHRoZSBpbml0aWFsIGltcG9ydCwgJ2dpdCBhcmNoaW1wb3J0JyBleHBlY3RzIHRvIGZpbmQgaXRzZWxmIGluIGFuIGVtcHR5CiBkaXJlY3RvcnkuIFRvIGZvbGxvdyB0aGUgZGV2ZWxvcG1lbnQgb2YgYSBwcm9qZWN0IHRoYXQgdXNlcyBBcmNoLCByZXJ1bgotJ2dpdC1hcmNoaW1wb3J0JyB3aXRoIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgdGhlIGluaXRpYWwgaW1wb3J0IHRvIHBlcmZvcm0KKydnaXQgYXJjaGltcG9ydCcgd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHRoZSBpbml0aWFsIGltcG9ydCB0byBwZXJmb3JtCiBpbmNyZW1lbnRhbCBpbXBvcnRzLgogCi1XaGlsZSAnZ2l0LWFyY2hpbXBvcnQnIHdpbGwgdHJ5IHRvIGNyZWF0ZSBzZW5zaWJsZSBicmFuY2ggbmFtZXMgZm9yIHRoZQorV2hpbGUgJ2dpdCBhcmNoaW1wb3J0JyB3aWxsIHRyeSB0byBjcmVhdGUgc2Vuc2libGUgYnJhbmNoIG5hbWVzIGZvciB0aGUKIGFyY2hpdmVzIHRoYXQgaXQgaW1wb3J0cywgaXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzcGVjaWZ5IGdpdCBicmFuY2ggbmFtZXMKIG1hbnVhbGx5LiAgVG8gZG8gc28sIHdyaXRlIGEgZ2l0IGJyYW5jaCBuYW1lIGFmdGVyIGVhY2ggPGFyY2hpdmUvYnJhbmNoPgogcGFyYW1ldGVyLCBzZXBhcmF0ZWQgYnkgYSBjb2xvbi4gIFRoaXMgd2F5LCB5b3UgY2FuIHNob3J0ZW4gdGhlIEFyY2gKQEAgLTg0LDcgKzg0LDcgQEAKIAogLW86OgogCVVzZSB0aGlzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkLXN0eWxlIGJyYW5jaCBuYW1lcyB1c2VkIGJ5Ci0JZWFybGllciB2ZXJzaW9ucyBvZiAnZ2l0LWFyY2hpbXBvcnQnLiAgT2xkLXN0eWxlIGJyYW5jaCBuYW1lcworCWVhcmxpZXIgdmVyc2lvbnMgb2YgJ2dpdCBhcmNoaW1wb3J0Jy4gIE9sZC1zdHlsZSBicmFuY2ggbmFtZXMKIAl3ZXJlIGNhdGVnb3J5LS1icmFuY2gsIHdoZXJlYXMgbmV3LXN0eWxlIGJyYW5jaCBuYW1lcyBhcmUKIAlhcmNoaXZlLGNhdGVnb3J5LS1icmFuY2gtLXZlcnNpb24uICBJbiBib3RoIGNhc2VzLCBuYW1lcyBnaXZlbgogCW9uIHRoZSBjb21tYW5kLWxpbmUgd2lsbCBvdmVycmlkZSB0aGUgYXV0b21hdGljYWxseS1nZW5lcmF0ZWQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWFyY2hpdmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYXJjaGl2ZS50eHQKaW5kZXggOTI0NDRkZC4uOGQzZTY2NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtYXJjaGl2ZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYXJjaGl2ZS50eHQKQEAgLTEwLDcgKzEwLDcgQEAKIC0tLS0tLS0tCiBbdmVyc2VdCiAnZ2l0IGFyY2hpdmUnIFstLWZvcm1hdD08Zm10Pl0gWy0tbGlzdF0gWy0tcHJlZml4PTxwcmVmaXg+L10gWzxleHRyYT5dCi0JICAgICAgWy0tb3V0cHV0PTxmaWxlPl0gWy0td29ya3RyZWUtYXR0cmlidXRlc10KKwkgICAgICBbLW8gfCAtLW91dHB1dD08ZmlsZT5dIFstLXdvcmt0cmVlLWF0dHJpYnV0ZXNdCiAJICAgICAgWy0tcmVtb3RlPTxyZXBvPiBbLS1leGVjPTxnaXQtdXBsb2FkLWFyY2hpdmU+XV0gPHRyZWUtaXNoPgogCSAgICAgIFtwYXRoLi4uXQogCkBAIC0yMSwyMSArMjEsMjQgQEAKIG91dHB1dC4gIElmIDxwcmVmaXg+IGlzIHNwZWNpZmllZCBpdCBpcwogcHJlcGVuZGVkIHRvIHRoZSBmaWxlbmFtZXMgaW4gdGhlIGFyY2hpdmUuCiAKLSdnaXQtYXJjaGl2ZScgYmVoYXZlcyBkaWZmZXJlbnRseSB3aGVuIGdpdmVuIGEgdHJlZSBJRCB2ZXJzdXMgd2hlbgorJ2dpdCBhcmNoaXZlJyBiZWhhdmVzIGRpZmZlcmVudGx5IHdoZW4gZ2l2ZW4gYSB0cmVlIElEIHZlcnN1cyB3aGVuCiBnaXZlbiBhIGNvbW1pdCBJRCBvciB0YWcgSUQuICBJbiB0aGUgZmlyc3QgY2FzZSB0aGUgY3VycmVudCB0aW1lIGlzCiB1c2VkIGFzIHRoZSBtb2RpZmljYXRpb24gdGltZSBvZiBlYWNoIGZpbGUgaW4gdGhlIGFyY2hpdmUuICBJbiB0aGUgbGF0dGVyCiBjYXNlIHRoZSBjb21taXQgdGltZSBhcyByZWNvcmRlZCBpbiB0aGUgcmVmZXJlbmNlZCBjb21taXQgb2JqZWN0IGlzCiB1c2VkIGluc3RlYWQuICBBZGRpdGlvbmFsbHkgdGhlIGNvbW1pdCBJRCBpcyBzdG9yZWQgaW4gYSBnbG9iYWwKIGV4dGVuZGVkIHBheCBoZWFkZXIgaWYgdGhlIHRhciBmb3JtYXQgaXMgdXNlZDsgaXQgY2FuIGJlIGV4dHJhY3RlZAotdXNpbmcgJ2dpdC1nZXQtdGFyLWNvbW1pdC1pZCcuIEluIFpJUCBmaWxlcyBpdCBpcyBzdG9yZWQgYXMgYSBmaWxlCit1c2luZyAnZ2l0IGdldC10YXItY29tbWl0LWlkJy4gSW4gWklQIGZpbGVzIGl0IGlzIHN0b3JlZCBhcyBhIGZpbGUKIGNvbW1lbnQuCiAKIE9QVElPTlMKIC0tLS0tLS0KIAogLS1mb3JtYXQ9PGZtdD46OgotCUZvcm1hdCBvZiB0aGUgcmVzdWx0aW5nIGFyY2hpdmU6ICd0YXInIG9yICd6aXAnLiAgVGhlIGRlZmF1bHQKLQlpcyAndGFyJy4KKwlGb3JtYXQgb2YgdGhlIHJlc3VsdGluZyBhcmNoaXZlOiAndGFyJyBvciAnemlwJy4gSWYgdGhpcyBvcHRpb24KKwlpcyBub3QgZ2l2ZW4sIGFuZCB0aGUgb3V0cHV0IGZpbGUgaXMgc3BlY2lmaWVkLCB0aGUgZm9ybWF0IGlzCisJaW5mZXJyZWQgZnJvbSB0aGUgZmlsZW5hbWUgaWYgcG9zc2libGUgKGUuZy4gd3JpdGluZyB0byAiZm9vLnppcCIKKwltYWtlcyB0aGUgb3V0cHV0IHRvIGJlIGluIHRoZSB6aXAgZm9ybWF0KS4gT3RoZXJ3aXNlIHRoZSBvdXRwdXQKKwlmb3JtYXQgaXMgYHRhcmAuCiAKIC1sOjoKIC0tbGlzdDo6CkBAIC00OCw2ICs1MSw3IEBACiAtLXByZWZpeD08cHJlZml4Pi86OgogCVByZXBlbmQgPHByZWZpeD4vIHRvIGVhY2ggZmlsZW5hbWUgaW4gdGhlIGFyY2hpdmUuCiAKKy1vIDxmaWxlPjo6CiAtLW91dHB1dD08ZmlsZT46OgogCVdyaXRlIHRoZSBhcmNoaXZlIHRvIDxmaWxlPiBpbnN0ZWFkIG9mIHN0ZG91dC4KIApAQCAtNzAsOCArNzQsOSBAQAogCVRoZSB0cmVlIG9yIGNvbW1pdCB0byBwcm9kdWNlIGFuIGFyY2hpdmUgZm9yLgogCiBwYXRoOjoKLQlJZiBvbmUgb3IgbW9yZSBwYXRocyBhcmUgc3BlY2lmaWVkLCBpbmNsdWRlIG9ubHkgdGhlc2UgaW4gdGhlCi0JYXJjaGl2ZSwgb3RoZXJ3aXNlIGluY2x1ZGUgYWxsIGZpbGVzIGFuZCBzdWJkaXJlY3Rvcmllcy4KKwlXaXRob3V0IGFuIG9wdGlvbmFsIHBhdGggcGFyYW1ldGVyLCBhbGwgZmlsZXMgYW5kIHN1YmRpcmVjdG9yaWVzCisJb2YgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgYXJlIGluY2x1ZGVkIGluIHRoZSBhcmNoaXZlLgorCUlmIG9uZSBvciBtb3JlIHBhdGhzIGFyZSBzcGVjaWZpZWQsIG9ubHkgdGhlc2UgYXJlIGluY2x1ZGVkLgogCiBCQUNLRU5EIEVYVFJBIE9QVElPTlMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTA3LDYgKzExMiwxNCBAQAogCWV4cGFuZCBzZXZlcmFsIHBsYWNlaG9sZGVycyB3aGVuIGFkZGluZyB0aGlzIGZpbGUgdG8gYW4gYXJjaGl2ZS4KIAlTZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGZvciBkZXRhaWxzLgogCitOb3RlIHRoYXQgYXR0cmlidXRlcyBhcmUgYnkgZGVmYXVsdCB0YWtlbiBmcm9tIHRoZSBgLmdpdGF0dHJpYnV0ZXNgIGZpbGVzCitpbiB0aGUgdHJlZSB0aGF0IGlzIGJlaW5nIGFyY2hpdmVkLiAgSWYgeW91IHdhbnQgdG8gdHdlYWsgdGhlIHdheSB0aGUKK291dHB1dCBpcyBnZW5lcmF0ZWQgYWZ0ZXIgdGhlIGZhY3QgKGUuZy4geW91IGNvbW1pdHRlZCB3aXRob3V0IGFkZGluZyBhbgorYXBwcm9wcmlhdGUgZXhwb3J0LWlnbm9yZSBpbiBpdHMgYC5naXRhdHRyaWJ1dGVzYCksIGFkanVzdCB0aGUgY2hlY2tlZCBvdXQKK2AuZ2l0YXR0cmlidXRlc2AgZmlsZSBhcyBuZWNlc3NhcnkgYW5kIHVzZSBgLS13b3JrLXRyZWUtYXR0cmlidXRlc2AKK29wdGlvbi4gIEFsdGVybmF0aXZlbHkgeW91IGNhbiBrZWVwIG5lY2Vzc2FyeSBhdHRyaWJ1dGVzIHRoYXQgc2hvdWxkIGFwcGx5Cit3aGlsZSBhcmNoaXZpbmcgYW55IHRyZWUgaW4geW91ciBgJEdJVF9ESVIvaW5mby9hdHRyaWJ1dGVzYCBmaWxlLgorCiBFWEFNUExFUwogLS0tLS0tLS0KIGdpdCBhcmNoaXZlIC0tZm9ybWF0PXRhciAtLXByZWZpeD1qdW5rLyBIRUFEIHwgKGNkIC92YXIvdG1wLyAmJiB0YXIgeGYgLSk6OgpAQCAtMTI5LDYgKzE0MiwxMiBAQAogCVB1dCBldmVyeXRoaW5nIGluIHRoZSBjdXJyZW50IGhlYWQncyBEb2N1bWVudGF0aW9uLyBkaXJlY3RvcnkKIAlpbnRvICdnaXQtMS40LjAtZG9jcy56aXAnLCB3aXRoIHRoZSBwcmVmaXggJ2dpdC1kb2NzLycuCiAKK2dpdCBhcmNoaXZlIC1vIGxhdGVzdC56aXAgSEVBRDo6CisKKwlDcmVhdGUgYSBaaXAgYXJjaGl2ZSB0aGF0IGNvbnRhaW5zIHRoZSBjb250ZW50cyBvZiB0aGUgbGF0ZXN0CisJY29tbWl0IG9uIHRoZSBjdXJyZW50IGJyYW5jaC4gTm90ZSB0aGF0IHRoZSBvdXRwdXQgZm9ybWF0IGlzCisJaW5mZXJyZWQgYnkgdGhlIGV4dGVuc2lvbiBvZiB0aGUgb3V0cHV0IGZpbGUuCisKIAogU0VFIEFMU08KIC0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1iaXNlY3QtbGsyMDA5LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC1sazIwMDkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YjMwMTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1iaXNlY3QtbGsyMDA5LnR4dApAQCAtMCwwICsxLDEzNTggQEAKK0ZpZ2h0aW5nIHJlZ3Jlc3Npb25zIHdpdGggZ2l0IGJpc2VjdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis6QXV0aG9yOiBDaHJpc3RpYW4gQ291ZGVyCis6RW1haWw6IGNocmlzY29vbEB0dXhmYW1pbHkub3JnCis6RGF0ZTogMjAwOS8xMS8wOAorCitBYnN0cmFjdAorLS0tLS0tLS0KKworImdpdCBiaXNlY3QiIGVuYWJsZXMgc29mdHdhcmUgdXNlcnMgYW5kIGRldmVsb3BlcnMgdG8gZWFzaWx5IGZpbmQgdGhlCitjb21taXQgdGhhdCBpbnRyb2R1Y2VkIGEgcmVncmVzc2lvbi4gV2Ugc2hvdyB3aHkgaXQgaXMgaW1wb3J0YW50IHRvCitoYXZlIGdvb2QgdG9vbHMgdG8gZmlnaHQgcmVncmVzc2lvbnMuIFdlIGRlc2NyaWJlIGhvdyAiZ2l0IGJpc2VjdCIKK3dvcmtzIGZyb20gdGhlIG91dHNpZGUgYW5kIHRoZSBhbGdvcml0aG1zIGl0IHVzZXMgaW5zaWRlLiBUaGVuIHdlCitleHBsYWluIGhvdyB0byB0YWtlIGFkdmFudGFnZSBvZiAiZ2l0IGJpc2VjdCIgdG8gaW1wcm92ZSBjdXJyZW50CitwcmFjdGljZXMuIEFuZCB3ZSBkaXNjdXNzIGhvdyAiZ2l0IGJpc2VjdCIgY291bGQgaW1wcm92ZSBpbiB0aGUKK2Z1dHVyZS4KKworCitJbnRyb2R1Y3Rpb24gdG8gImdpdCBiaXNlY3QiCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dpdCBpcyBhIERpc3RyaWJ1dGVkIFZlcnNpb24gQ29udHJvbCBzeXN0ZW0gKERWQ1MpIGNyZWF0ZWQgYnkgTGludXMKK1RvcnZhbGRzIGFuZCBtYWludGFpbmVkIGJ5IEp1bmlvIEhhbWFuby4KKworSW4gR2l0IGxpa2UgaW4gbWFueSBvdGhlciBWZXJzaW9uIENvbnRyb2wgU3lzdGVtcyAoVkNTKSwgdGhlIGRpZmZlcmVudAorc3RhdGVzIG9mIHRoZSBkYXRhIHRoYXQgaXMgbWFuYWdlZCBieSB0aGUgc3lzdGVtIGFyZSBjYWxsZWQKK2NvbW1pdHMuIEFuZCwgYXMgVkNTIGFyZSBtb3N0bHkgdXNlZCB0byBtYW5hZ2Ugc29mdHdhcmUgc291cmNlIGNvZGUsCitzb21ldGltZXMgImludGVyZXN0aW5nIiBjaGFuZ2VzIG9mIGJlaGF2aW9yIGluIHRoZSBzb2Z0d2FyZSBhcmUKK2ludHJvZHVjZWQgaW4gc29tZSBjb21taXRzLgorCitJbiBmYWN0IHBlb3BsZSBhcmUgc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gY29tbWl0cyB0aGF0IGludHJvZHVjZSBhCisiYmFkIiBiZWhhdmlvciwgY2FsbGVkIGEgYnVnIG9yIGEgcmVncmVzc2lvbi4gVGhleSBhcmUgaW50ZXJlc3RlZCBpbgordGhlc2UgY29tbWl0cyBiZWNhdXNlIGEgY29tbWl0IChob3BlZnVsbHkpIGNvbnRhaW5zIGEgdmVyeSBzbWFsbCBzZXQKK29mIHNvdXJjZSBjb2RlIGNoYW5nZXMuIEFuZCBpdCdzIG11Y2ggZWFzaWVyIHRvIHVuZGVyc3RhbmQgYW5kCitwcm9wZXJseSBmaXggYSBwcm9ibGVtIHdoZW4geW91IG9ubHkgbmVlZCB0byBjaGVjayBhIHZlcnkgc21hbGwgc2V0IG9mCitjaGFuZ2VzLCB0aGFuIHdoZW4geW91IGRvbid0IGtub3cgd2hlcmUgbG9vayBpbiB0aGUgZmlyc3QgcGxhY2UuCisKK1NvIHRvIGhlbHAgcGVvcGxlIGZpbmQgY29tbWl0cyB0aGF0IGludHJvZHVjZSBhICJiYWQiIGJlaGF2aW9yLCB0aGUKKyJnaXQgYmlzZWN0IiBzZXQgb2YgY29tbWFuZHMgd2FzIGludmVudGVkLiBBbmQgaXQgZm9sbG93cyBvZiBjb3Vyc2UKK3RoYXQgaW4gImdpdCBiaXNlY3QiIHBhcmxhbmNlLCBjb21taXRzIHdoZXJlIHRoZSAiaW50ZXJlc3RpbmcKK2JlaGF2aW9yIiBpcyBwcmVzZW50IGFyZSBjYWxsZWQgImJhZCIgY29tbWl0cywgd2hpbGUgb3RoZXIgY29tbWl0cyBhcmUKK2NhbGxlZCAiZ29vZCIgY29tbWl0cy4gQW5kIGEgY29tbWl0IHRoYXQgaW50cm9kdWNlIHRoZSBiZWhhdmlvciB3ZSBhcmUKK2ludGVyZXN0ZWQgaW4gaXMgY2FsbGVkIGEgImZpcnN0IGJhZCBjb21taXQiLiBOb3RlIHRoYXQgdGhlcmUgY291bGQgYmUKK21vcmUgdGhhbiBvbmUgImZpcnN0IGJhZCBjb21taXQiIGluIHRoZSBjb21taXQgc3BhY2Ugd2UgYXJlIHNlYXJjaGluZy4KKworU28gImdpdCBiaXNlY3QiIGlzIGRlc2lnbmVkIHRvIGhlbHAgZmluZCBhICJmaXJzdCBiYWQgY29tbWl0Ii4gQW5kIHRvCitiZSBhcyBlZmZpY2llbnQgYXMgcG9zc2libGUsIGl0IHRyaWVzIHRvIHBlcmZvcm0gYSBiaW5hcnkgc2VhcmNoLgorCisKK0ZpZ2h0aW5nIHJlZ3Jlc3Npb25zIG92ZXJ2aWV3CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZWdyZXNzaW9uczogYSBiaWcgcHJvYmxlbQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworUmVncmVzc2lvbnMgYXJlIGEgYmlnIHByb2JsZW0gaW4gdGhlIHNvZnR3YXJlIGluZHVzdHJ5LiBCdXQgaXQncworZGlmZmljdWx0IHRvIHB1dCBzb21lIHJlYWwgbnVtYmVycyBiZWhpbmQgdGhhdCBjbGFpbS4KKworVGhlcmUgYXJlIHNvbWUgbnVtYmVycyBhYm91dCBidWdzIGluIGdlbmVyYWwsIGxpa2UgYSBOSVNUIHN0dWR5IGluCisyMDAyIDw8MT4+IHRoYXQgc2FpZDoKKworX19fX19fX19fX19fXworU29mdHdhcmUgYnVncywgb3IgZXJyb3JzLCBhcmUgc28gcHJldmFsZW50IGFuZCBzbyBkZXRyaW1lbnRhbCB0aGF0Cit0aGV5IGNvc3QgdGhlIFUuUy4gZWNvbm9teSBhbiBlc3RpbWF0ZWQgJDU5LjUgYmlsbGlvbiBhbm51YWxseSwgb3IKK2Fib3V0IDAuNiBwZXJjZW50IG9mIHRoZSBncm9zcyBkb21lc3RpYyBwcm9kdWN0LCBhY2NvcmRpbmcgdG8gYSBuZXdseQorcmVsZWFzZWQgc3R1ZHkgY29tbWlzc2lvbmVkIGJ5IHRoZSBEZXBhcnRtZW50IG9mIENvbW1lcmNlJ3MgTmF0aW9uYWwKK0luc3RpdHV0ZSBvZiBTdGFuZGFyZHMgYW5kIFRlY2hub2xvZ3kgKE5JU1QpLiBBdCB0aGUgbmF0aW9uYWwgbGV2ZWwsCitvdmVyIGhhbGYgb2YgdGhlIGNvc3RzIGFyZSBib3JuZSBieSBzb2Z0d2FyZSB1c2VycyBhbmQgdGhlIHJlbWFpbmRlcgorYnkgc29mdHdhcmUgZGV2ZWxvcGVycy92ZW5kb3JzLiAgVGhlIHN0dWR5IGFsc28gZm91bmQgdGhhdCwgYWx0aG91Z2gKK2FsbCBlcnJvcnMgY2Fubm90IGJlIHJlbW92ZWQsIG1vcmUgdGhhbiBhIHRoaXJkIG9mIHRoZXNlIGNvc3RzLCBvciBhbgorZXN0aW1hdGVkICQyMi4yIGJpbGxpb24sIGNvdWxkIGJlIGVsaW1pbmF0ZWQgYnkgYW4gaW1wcm92ZWQgdGVzdGluZworaW5mcmFzdHJ1Y3R1cmUgdGhhdCBlbmFibGVzIGVhcmxpZXIgYW5kIG1vcmUgZWZmZWN0aXZlIGlkZW50aWZpY2F0aW9uCithbmQgcmVtb3ZhbCBvZiBzb2Z0d2FyZSBkZWZlY3RzLiBUaGVzZSBhcmUgdGhlIHNhdmluZ3MgYXNzb2NpYXRlZCB3aXRoCitmaW5kaW5nIGFuIGluY3JlYXNlZCBwZXJjZW50YWdlIChidXQgbm90IDEwMCBwZXJjZW50KSBvZiBlcnJvcnMgY2xvc2VyCit0byB0aGUgZGV2ZWxvcG1lbnQgc3RhZ2VzIGluIHdoaWNoIHRoZXkgYXJlIGludHJvZHVjZWQuIEN1cnJlbnRseSwKK292ZXIgaGFsZiBvZiBhbGwgZXJyb3JzIGFyZSBub3QgZm91bmQgdW50aWwgImRvd25zdHJlYW0iIGluIHRoZQorZGV2ZWxvcG1lbnQgcHJvY2VzcyBvciBkdXJpbmcgcG9zdC1zYWxlIHNvZnR3YXJlIHVzZS4KK19fX19fX19fX19fX18KKworQW5kIHRoZW46CisKK19fX19fX19fX19fX18KK1NvZnR3YXJlIGRldmVsb3BlcnMgYWxyZWFkeSBzcGVuZCBhcHByb3hpbWF0ZWx5IDgwIHBlcmNlbnQgb2YKK2RldmVsb3BtZW50IGNvc3RzIG9uIGlkZW50aWZ5aW5nIGFuZCBjb3JyZWN0aW5nIGRlZmVjdHMsIGFuZCB5ZXQgZmV3Citwcm9kdWN0cyBvZiBhbnkgdHlwZSBvdGhlciB0aGFuIHNvZnR3YXJlIGFyZSBzaGlwcGVkIHdpdGggc3VjaCBoaWdoCitsZXZlbHMgb2YgZXJyb3JzLgorX19fX19fX19fX19fXworCitFdmVudHVhbGx5IHRoZSBjb25jbHVzaW9uIHN0YXJ0ZWQgd2l0aDoKKworX19fX19fX19fX19fXworVGhlIHBhdGggdG8gaGlnaGVyIHNvZnR3YXJlIHF1YWxpdHkgaXMgc2lnbmlmaWNhbnRseSBpbXByb3ZlZCBzb2Z0d2FyZQordGVzdGluZy4KK19fX19fX19fX19fX18KKworVGhlcmUgYXJlIG90aGVyIGVzdGltYXRlcyBzYXlpbmcgdGhhdCA4MCUgb2YgdGhlIGNvc3QgcmVsYXRlZCB0bworc29mdHdhcmUgaXMgYWJvdXQgbWFpbnRlbmFuY2UgPDwyPj4uCisKK1Rob3VnaCwgYWNjb3JkaW5nIHRvIFdpa2lwZWRpYSA8PDM+PjoKKworX19fX19fX19fX19fXworQSBjb21tb24gcGVyY2VwdGlvbiBvZiBtYWludGVuYW5jZSBpcyB0aGF0IGl0IGlzIG1lcmVseSBmaXhpbmcKK2J1Z3MuIEhvd2V2ZXIsIHN0dWRpZXMgYW5kIHN1cnZleXMgb3ZlciB0aGUgeWVhcnMgaGF2ZSBpbmRpY2F0ZWQgdGhhdAordGhlIG1ham9yaXR5LCBvdmVyIDgwJSwgb2YgdGhlIG1haW50ZW5hbmNlIGVmZm9ydCBpcyB1c2VkIGZvcgorbm9uLWNvcnJlY3RpdmUgYWN0aW9ucyAoUGlnb3NreSAxOTk3KS4gVGhpcyBwZXJjZXB0aW9uIGlzIHBlcnBldHVhdGVkCitieSB1c2VycyBzdWJtaXR0aW5nIHByb2JsZW0gcmVwb3J0cyB0aGF0IGluIHJlYWxpdHkgYXJlIGZ1bmN0aW9uYWxpdHkKK2VuaGFuY2VtZW50cyB0byB0aGUgc3lzdGVtLgorX19fX19fX19fX19fXworCitCdXQgd2UgY2FuIGd1ZXNzIHRoYXQgaW1wcm92aW5nIG9uIGV4aXN0aW5nIHNvZnR3YXJlIGlzIHZlcnkgY29zdGx5CitiZWNhdXNlIHlvdSBoYXZlIHRvIHdhdGNoIG91dCBmb3IgcmVncmVzc2lvbnMuIEF0IGxlYXN0IHRoaXMgd291bGQKK21ha2UgdGhlIGFib3ZlIHN0dWRpZXMgY29uc2lzdGVudCBhbW9uZyB0aGVtc2VsdmVzLgorCitPZiBjb3Vyc2Ugc29tZSBraW5kIG9mIHNvZnR3YXJlIGlzIGRldmVsb3BlZCwgdGhlbiB1c2VkIGR1cmluZyBzb21lCit0aW1lIHdpdGhvdXQgYmVpbmcgaW1wcm92ZWQgb24gbXVjaCwgYW5kIHRoZW4gZmluYWxseSB0aHJvd24gYXdheS4gSW4KK3RoaXMgY2FzZSwgb2YgY291cnNlLCByZWdyZXNzaW9ucyBtYXkgbm90IGJlIGEgYmlnIHByb2JsZW0uIEJ1dCBvbiB0aGUKK290aGVyIGhhbmQsIHRoZXJlIGlzIGEgbG90IG9mIGJpZyBzb2Z0d2FyZSB0aGF0IGlzIGNvbnRpbnVhbGx5CitkZXZlbG9wZWQgYW5kIG1haW50YWluZWQgZHVyaW5nIHllYXJzIG9yIGV2ZW4gdGVucyBvZiB5ZWFycyBieSBhIGxvdAorb2YgcGVvcGxlLiBBbmQgYXMgdGhlcmUgYXJlIG9mdGVuIG1hbnkgcGVvcGxlIHdobyBkZXBlbmQgKHNvbWV0aW1lcworY3JpdGljYWxseSkgb24gc3VjaCBzb2Z0d2FyZSwgcmVncmVzc2lvbnMgYXJlIGEgcmVhbGx5IGJpZyBwcm9ibGVtLgorCitPbmUgc3VjaCBzb2Z0d2FyZSBpcyB0aGUgbGludXgga2VybmVsLiBBbmQgaWYgd2UgbG9vayBhdCB0aGUgbGludXgKK2tlcm5lbCwgd2UgY2FuIHNlZSB0aGF0IGEgbG90IG9mIHRpbWUgYW5kIGVmZm9ydCBpcyBzcGVudCB0byBmaWdodAorcmVncmVzc2lvbnMuIFRoZSByZWxlYXNlIGN5Y2xlIHN0YXJ0IHdpdGggYSAyIHdlZWtzIGxvbmcgbWVyZ2UKK3dpbmRvdy4gVGhlbiB0aGUgZmlyc3QgcmVsZWFzZSBjYW5kaWRhdGUgKHJjKSB2ZXJzaW9uIGlzIHRhZ2dlZC4gQW5kCithZnRlciB0aGF0IGFib3V0IDcgb3IgOCBtb3JlIHJjIHZlcnNpb25zIHdpbGwgYXBwZWFyIHdpdGggYXJvdW5kIG9uZQord2VlayBiZXR3ZWVuIGVhY2ggb2YgdGhlbSwgYmVmb3JlIHRoZSBmaW5hbCByZWxlYXNlLgorCitUaGUgdGltZSBiZXR3ZWVuIHRoZSBmaXJzdCByYyByZWxlYXNlIGFuZCB0aGUgZmluYWwgcmVsZWFzZSBpcworc3VwcG9zZWQgdG8gYmUgdXNlZCB0byB0ZXN0IHJjIHZlcnNpb25zIGFuZCBmaWdodCBidWdzIGFuZCBlc3BlY2lhbGx5CityZWdyZXNzaW9ucy4gQW5kIHRoaXMgdGltZSBpcyBtb3JlIHRoYW4gODAlIG9mIHRoZSByZWxlYXNlIGN5Y2xlCit0aW1lLiBCdXQgdGhpcyBpcyBub3QgdGhlIGVuZCBvZiB0aGUgZmlnaHQgeWV0LCBhcyBvZiBjb3Vyc2UgaXQKK2NvbnRpbnVlcyBhZnRlciB0aGUgcmVsZWFzZS4KKworQW5kIHRoZW4gdGhpcyBpcyB3aGF0IEluZ28gTW9sbmFyIChhIHdlbGwga25vd24gbGludXgga2VybmVsCitkZXZlbG9wZXIpIHNheXMgYWJvdXQgaGlzIHVzZSBvZiBnaXQgYmlzZWN0OgorCitfX19fX19fX19fX19fCitJIG1vc3QgYWN0aXZlbHkgdXNlIGl0IGR1cmluZyB0aGUgbWVyZ2Ugd2luZG93ICh3aGVuIGEgbG90IG9mIHRyZWVzCitnZXQgbWVyZ2VkIHVwc3RyZWFtIGFuZCB3aGVuIHRoZSBpbmZsdXggb2YgYnVncyBpcyB0aGUgaGlnaGVzdCkgLSBhbmQKK3llcywgdGhlcmUgaGF2ZSBiZWVuIGNhc2VzIHRoYXQgaSB1c2VkIGl0IG11bHRpcGxlIHRpbWVzIGEgZGF5LiBNeQorYXZlcmFnZSBpcyByb3VnaGx5IG9uY2UgYSBkYXkuCitfX19fX19fX19fX19fCisKK1NvIHJlZ3Jlc3Npb25zIGFyZSBmb3VnaHQgYWxsIHRoZSB0aW1lIGJ5IGRldmVsb3BlcnMsIGFuZCBpbmRlZWQgaXQgaXMKK3dlbGwga25vd24gdGhhdCBidWdzIHNob3VsZCBiZSBmaXhlZCBhcyBzb29uIGFzIHBvc3NpYmxlLCBzbyBhcyBzb29uCithcyB0aGV5IGFyZSBmb3VuZC4gVGhhdCdzIHdoeSBpdCBpcyBpbnRlcmVzdGluZyB0byBoYXZlIGdvb2QgdG9vbHMgZm9yCit0aGlzIHB1cnBvc2UuCisKK090aGVyIHRvb2xzIHRvIGZpZ2h0IHJlZ3Jlc3Npb25zCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitTbyB3aGF0IGFyZSB0aGUgdG9vbHMgdXNlZCB0byBmaWdodCByZWdyZXNzaW9ucz8gVGhleSBhcmUgbmVhcmx5IHRoZQorc2FtZSBhcyB0aG9zZSB1c2VkIHRvIGZpZ2h0IHJlZ3VsYXIgYnVncy4gVGhlIG9ubHkgc3BlY2lmaWMgdG9vbHMgYXJlCit0ZXN0IHN1aXRlcyBhbmQgdG9vbHMgc2ltaWxhciBhcyAiZ2l0IGJpc2VjdCIuCisKK1Rlc3Qgc3VpdGVzIGFyZSB2ZXJ5IG5pY2UuIEJ1dCB3aGVuIHRoZXkgYXJlIHVzZWQgYWxvbmUsIHRoZXkgYXJlCitzdXBwb3NlZCB0byBiZSB1c2VkIHNvIHRoYXQgYWxsIHRoZSB0ZXN0cyBhcmUgY2hlY2tlZCBhZnRlciBlYWNoCitjb21taXQuIFRoaXMgbWVhbnMgdGhhdCB0aGV5IGFyZSBub3QgdmVyeSBlZmZpY2llbnQsIGJlY2F1c2UgbWFueQordGVzdHMgYXJlIHJ1biBmb3Igbm8gaW50ZXJlc3RpbmcgcmVzdWx0LCBhbmQgdGhleSBzdWZmZXIgZnJvbQorY29tYmluYXRpb25hbCBleHBsb3Npb24uCisKK0luIGZhY3QgdGhlIHByb2JsZW0gaXMgdGhhdCBiaWcgc29mdHdhcmUgb2Z0ZW4gaGFzIG1hbnkgZGlmZmVyZW50Citjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoYXQgZWFjaCB0ZXN0IGNhc2Ugc2hvdWxkIHBhc3MgZm9yIGVhY2gKK2NvbmZpZ3VyYXRpb24gYWZ0ZXIgZWFjaCBjb21taXQuIFNvIGlmIHlvdSBoYXZlIGZvciBlYWNoIHJlbGVhc2U6IE4KK2NvbmZpZ3VyYXRpb25zLCBNIGNvbW1pdHMgYW5kIFQgdGVzdCBjYXNlcywgeW91IHNob3VsZCBwZXJmb3JtOgorCistLS0tLS0tLS0tLS0tCitOICogTSAqIFQgdGVzdHMKKy0tLS0tLS0tLS0tLS0KKword2hlcmUgTiwgTSBhbmQgVCBhcmUgYWxsIGdyb3dpbmcgd2l0aCB0aGUgc2l6ZSB5b3VyIHNvZnR3YXJlLgorCitTbyB2ZXJ5IHNvb24gaXQgd2lsbCBub3QgYmUgcG9zc2libGUgdG8gY29tcGxldGVseSB0ZXN0IGV2ZXJ5dGhpbmcuCisKK0FuZCBpZiBzb21lIGJ1Z3Mgc2xpcCB0aHJvdWdoIHlvdXIgdGVzdCBzdWl0ZSwgdGhlbiB5b3UgY2FuIGFkZCBhIHRlc3QKK3RvIHlvdXIgdGVzdCBzdWl0ZS4gQnV0IGlmIHlvdSB3YW50IHRvIHVzZSB5b3VyIG5ldyBpbXByb3ZlZCB0ZXN0CitzdWl0ZSB0byBmaW5kIHdoZXJlIHRoZSBidWcgc2xpcHBlZCBpbiwgdGhlbiB5b3Ugd2lsbCBlaXRoZXIgaGF2ZSB0bworZW11bGF0ZSBhIGJpc2VjdGlvbiBwcm9jZXNzIG9yIHlvdSB3aWxsIHBlcmhhcHMgYmx1bnRseSB0ZXN0IGVhY2gKK2NvbW1pdCBiYWNrd2FyZCBzdGFydGluZyBmcm9tIHRoZSAiYmFkIiBjb21taXQgeW91IGhhdmUgd2hpY2ggbWF5IGJlCit2ZXJ5IHdhc3RlZnVsLgorCisiZ2l0IGJpc2VjdCIgb3ZlcnZpZXcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTdGFydGluZyBhIGJpc2VjdGlvbgorfn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIGZpcnN0ICJnaXQgYmlzZWN0IiBzdWJjb21tYW5kIHRvIHVzZSBpcyAiZ2l0IGJpc2VjdCBzdGFydCIgdG8KK3N0YXJ0IHRoZSBzZWFyY2guIFRoZW4gYm91bmRzIG11c3QgYmUgc2V0IHRvIGxpbWl0IHRoZSBjb21taXQKK3NwYWNlLiBUaGlzIGlzIGRvbmUgdXN1YWxseSBieSBnaXZpbmcgb25lICJiYWQiIGFuZCBhdCBsZWFzdCBvbmUKKyJnb29kIiBjb21taXQuIFRoZXkgY2FuIGJlIHBhc3NlZCBpbiB0aGUgaW5pdGlhbCBjYWxsIHRvICJnaXQgYmlzZWN0CitzdGFydCIgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc3RhcnQgW0JBRCBbR09PRC4uLl1dCistLS0tLS0tLS0tLS0tCisKK29yIHRoZXkgY2FuIGJlIHNldCB1c2luZzoKKworLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IGJhZCBbQ09NTUlUXQorLS0tLS0tLS0tLS0tLQorCithbmQ6CisKKy0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBnb29kIFtDT01NSVQuLi5dCistLS0tLS0tLS0tLS0tCisKK3doZXJlIEJBRCwgR09PRCBhbmQgQ09NTUlUIGFyZSBhbGwgbmFtZXMgdGhhdCBjYW4gYmUgcmVzb2x2ZWQgdG8gYQorY29tbWl0LgorCitUaGVuICJnaXQgYmlzZWN0IiB3aWxsIGNoZWNrb3V0IGEgY29tbWl0IG9mIGl0cyBjaG9vc2luZyBhbmQgYXNrIHRoZQordXNlciB0byB0ZXN0IGl0LCBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBzdGFydCB2Mi42LjI3IHYyLjYuMjUKK0Jpc2VjdGluZzogMTA5MjggcmV2aXNpb25zIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzIChyb3VnaGx5IDE0IHN0ZXBzKQorWzJlYzY1ZjhiODllYTAwM2MyN2ZmNzcyMzUyNWEyZWUzMzVhMmIzOTNdIHg4NjogY2xlYW4gdXAgdXNpbmcgbWF4X2xvd19wZm4gb24gMzItYml0CistLS0tLS0tLS0tLS0tCisKK05vdGUgdGhhdCB0aGUgZXhhbXBsZSB0aGF0IHdlIHdpbGwgdXNlIGlzIHJlYWxseSBhIHRveSBleGFtcGxlLCB3ZQord2lsbCBiZSBsb29raW5nIGZvciB0aGUgZmlyc3QgY29tbWl0IHRoYXQgaGFzIGEgdmVyc2lvbiBsaWtlCisiMi42LjI2LXNvbWV0aGluZyIsIHRoYXQgaXMgdGhlIGNvbW1pdCB0aGF0IGhhcyBhICJTVUJMRVZFTCA9IDI2IiBsaW5lCitpbiB0aGUgdG9wIGxldmVsIE1ha2VmaWxlLiBUaGlzIGlzIGEgdG95IGV4YW1wbGUgYmVjYXVzZSB0aGVyZSBhcmUKK2JldHRlciB3YXlzIHRvIGZpbmQgdGhpcyBjb21taXQgd2l0aCBnaXQgdGhhbiB1c2luZyAiZ2l0IGJpc2VjdCIgKGZvcgorZXhhbXBsZSAiZ2l0IGJsYW1lIiBvciAiZ2l0IGxvZyAtUzxzdHJpbmc+IikuCisKK0RyaXZpbmcgYSBiaXNlY3Rpb24gbWFudWFsbHkKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQXQgdGhpcyBwb2ludCB0aGVyZSBhcmUgYmFzaWNhbGx5IDIgd2F5cyB0byBkcml2ZSB0aGUgc2VhcmNoLiBJdCBjYW4KK2JlIGRyaXZlbiBtYW51YWxseSBieSB0aGUgdXNlciBvciBpdCBjYW4gYmUgZHJpdmVuIGF1dG9tYXRpY2FsbHkgYnkgYQorc2NyaXB0IG9yIGEgY29tbWFuZC4KKworSWYgdGhlIHVzZXIgaXMgZHJpdmluZyBpdCwgdGhlbiBhdCBlYWNoIHN0ZXAgb2YgdGhlIHNlYXJjaCwgdGhlIHVzZXIKK3dpbGwgaGF2ZSB0byB0ZXN0IHRoZSBjdXJyZW50IGNvbW1pdCBhbmQgc2F5IGlmIGl0IGlzICJnb29kIiBvciAiYmFkIgordXNpbmcgdGhlICJnaXQgYmlzZWN0IGdvb2QiIG9yICJnaXQgYmlzZWN0IGJhZCIgY29tbWFuZHMgcmVzcGVjdGl2ZWx5Cit0aGF0IGhhdmUgYmVlbiBkZXNjcmliZWQgYWJvdmUuIEZvciBleGFtcGxlOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgYmFkCitCaXNlY3Rpbmc6IDU0ODAgcmV2aXNpb25zIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzIChyb3VnaGx5IDEzIHN0ZXBzKQorWzY2YzBiMzk0ZjA4ZmQ4OTIzNjUxNWMxYzg0NDg1ZWE3MTJhMTU3YmVdIEtWTToga2lsbCBmaWxlLT5mX2NvdW50IGFidXNlIGluIGt2bQorLS0tLS0tLS0tLS0tLQorCitBbmQgYWZ0ZXIgYSBmZXcgbW9yZSBzdGVwcyBsaWtlIHRoYXQsICJnaXQgYmlzZWN0IiB3aWxsIGV2ZW50dWFsbHkKK2ZpbmQgYSBmaXJzdCBiYWQgY29tbWl0OgorCistLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgYmFkCisyZGRjY2EzNmM4YmNmYTI1MTcyNGZlMzQyYzgzMjc0NTE5ODhiZTBkIGlzIHRoZSBmaXJzdCBiYWQgY29tbWl0Citjb21taXQgMmRkY2NhMzZjOGJjZmEyNTE3MjRmZTM0MmM4MzI3NDUxOTg4YmUwZAorQXV0aG9yOiBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmc+CitEYXRlOiAgIFNhdCBNYXkgMyAxMTo1OTo0NCAyMDA4IC0wNzAwCisKKyAgICBMaW51eCAyLjYuMjYtcmMxCisKKzoxMDA2NDQgMTAwNjQ0IDVjZjgyNTgxOTUzMzFhNGRiZGRkZmYwOGI4ZDY4NjQyNjM4ZWVhNTcgNDQ5Mjk4NGVmYzA5YWI3MmZmNjIxOWE3YmMyMWZiNmE5NTdjNGNkNSBNICAgICAgTWFrZWZpbGUKKy0tLS0tLS0tLS0tLS0KKworQXQgdGhpcyBwb2ludCB3ZSBjYW4gc2VlIHdoYXQgdGhlIGNvbW1pdCBkb2VzLCBjaGVjayBpdCBvdXQgKGlmIGl0J3MKK25vdCBhbHJlYWR5IGNoZWNrZWQgb3V0KSBvciB0aW5rZXIgd2l0aCBpdCwgZm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cgSEVBRAorY29tbWl0IDJkZGNjYTM2YzhiY2ZhMjUxNzI0ZmUzNDJjODMyNzQ1MTk4OGJlMGQKK0F1dGhvcjogTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnPgorRGF0ZTogICBTYXQgTWF5IDMgMTE6NTk6NDQgMjAwOCAtMDcwMAorCisgICAgTGludXggMi42LjI2LXJjMQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggNWNmODI1OC4uNDQ5Mjk4NCAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTEsNyArMSw3IEBACisgVkVSU0lPTiA9IDIKKyBQQVRDSExFVkVMID0gNgorLVNVQkxFVkVMID0gMjUKKy1FWFRSQVZFUlNJT04gPQorK1NVQkxFVkVMID0gMjYKKytFWFRSQVZFUlNJT04gPSAtcmMxCisgTkFNRSA9IEZ1bmt5IFdlYXNlbCBpcyBKaWdneSB3aXQgaXQKKworICMgKkRPQ1VNRU5UQVRJT04qCistLS0tLS0tLS0tLS0tCisKK0FuZCB3aGVuIHdlIGFyZSBmaW5pc2hlZCB3ZSBjYW4gdXNlICJnaXQgYmlzZWN0IHJlc2V0IiB0byBnbyBiYWNrIHRvCit0aGUgYnJhbmNoIHdlIHdlcmUgaW4gYmVmb3JlIHdlIHN0YXJ0ZWQgYmlzZWN0aW5nOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgcmVzZXQKK0NoZWNraW5nIG91dCBmaWxlczogMTAwJSAoMjE1NDkvMjE1NDkpLCBkb25lLgorUHJldmlvdXMgSEVBRCBwb3NpdGlvbiB3YXMgMmRkY2NhMy4uLiBMaW51eCAyLjYuMjYtcmMxCitTd2l0Y2hlZCB0byBicmFuY2ggJ21hc3RlcicKKy0tLS0tLS0tLS0tLS0KKworRHJpdmluZyBhIGJpc2VjdGlvbiBhdXRvbWF0aWNhbGx5Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIG90aGVyIHdheSB0byBkcml2ZSB0aGUgYmlzZWN0aW9uIHByb2Nlc3MgaXMgdG8gdGVsbCAiZ2l0IGJpc2VjdCIKK3RvIGxhdW5jaCBhIHNjcmlwdCBvciBjb21tYW5kIGF0IGVhY2ggYmlzZWN0aW9uIHN0ZXAgdG8ga25vdyBpZiB0aGUKK2N1cnJlbnQgY29tbWl0IGlzICJnb29kIiBvciAiYmFkIi4gVG8gZG8gdGhhdCwgd2UgdXNlIHRoZSAiZ2l0IGJpc2VjdAorcnVuIiBjb21tYW5kLiBGb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHN0YXJ0IHYyLjYuMjcgdjIuNi4yNQorQmlzZWN0aW5nOiAxMDkyOCByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgKHJvdWdobHkgMTQgc3RlcHMpCitbMmVjNjVmOGI4OWVhMDAzYzI3ZmY3NzIzNTI1YTJlZTMzNWEyYjM5M10geDg2OiBjbGVhbiB1cCB1c2luZyBtYXhfbG93X3BmbiBvbiAzMi1iaXQKKyQKKyQgZ2l0IGJpc2VjdCBydW4gZ3JlcCAnXlNVQkxFVkVMID0gMjUnIE1ha2VmaWxlCitydW5uaW5nIGdyZXAgXlNVQkxFVkVMID0gMjUgTWFrZWZpbGUKK0Jpc2VjdGluZzogNTQ4MCByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgKHJvdWdobHkgMTMgc3RlcHMpCitbNjZjMGIzOTRmMDhmZDg5MjM2NTE1YzFjODQ0ODVlYTcxMmExNTdiZV0gS1ZNOiBraWxsIGZpbGUtPmZfY291bnQgYWJ1c2UgaW4ga3ZtCitydW5uaW5nIGdyZXAgXlNVQkxFVkVMID0gMjUgTWFrZWZpbGUKK1NVQkxFVkVMID0gMjUKK0Jpc2VjdGluZzogMjc0MCByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgKHJvdWdobHkgMTIgc3RlcHMpCitbNjcxMjk0NzE5NjI4ZjE2NzFmYWVmZDQ4ODI3NjQ4ODZmOGFkMDhjYl0gVjRML0RWQig3ODc5KTogQWRkaW5nIGN4MTggU3VwcG9ydCBmb3IgbXhsNTAwNXMKKy4uLgorLi4uCitydW5uaW5nIGdyZXAgXlNVQkxFVkVMID0gMjUgTWFrZWZpbGUKK0Jpc2VjdGluZzogMCByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgKHJvdWdobHkgMCBzdGVwcykKK1syZGRjY2EzNmM4YmNmYTI1MTcyNGZlMzQyYzgzMjc0NTE5ODhiZTBkXSBMaW51eCAyLjYuMjYtcmMxCitydW5uaW5nIGdyZXAgXlNVQkxFVkVMID0gMjUgTWFrZWZpbGUKKzJkZGNjYTM2YzhiY2ZhMjUxNzI0ZmUzNDJjODMyNzQ1MTk4OGJlMGQgaXMgdGhlIGZpcnN0IGJhZCBjb21taXQKK2NvbW1pdCAyZGRjY2EzNmM4YmNmYTI1MTcyNGZlMzQyYzgzMjc0NTE5ODhiZTBkCitBdXRob3I6IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZz4KK0RhdGU6ICAgU2F0IE1heSAzIDExOjU5OjQ0IDIwMDggLTA3MDAKKworICAgIExpbnV4IDIuNi4yNi1yYzEKKworOjEwMDY0NCAxMDA2NDQgNWNmODI1ODE5NTMzMWE0ZGJkZGRmZjA4YjhkNjg2NDI2MzhlZWE1NyA0NDkyOTg0ZWZjMDlhYjcyZmY2MjE5YTdiYzIxZmI2YTk1N2M0Y2Q1IE0gICAgICBNYWtlZmlsZQorYmlzZWN0IHJ1biBzdWNjZXNzCistLS0tLS0tLS0tLS0tCisKK0luIHRoaXMgZXhhbXBsZSwgd2UgcGFzc2VkICJncmVwICdeU1VCTEVWRUwgPSAyNScgTWFrZWZpbGUiIGFzCitwYXJhbWV0ZXIgdG8gImdpdCBiaXNlY3QgcnVuIi4gVGhpcyBtZWFucyB0aGF0IGF0IGVhY2ggc3RlcCwgdGhlIGdyZXAKK2NvbW1hbmQgd2UgcGFzc2VkIHdpbGwgYmUgbGF1bmNoZWQuIEFuZCBpZiBpdCBleGl0cyB3aXRoIGNvZGUgMCAodGhhdAorbWVhbnMgc3VjY2VzcykgdGhlbiBnaXQgYmlzZWN0IHdpbGwgbWFyayB0aGUgY3VycmVudCBzdGF0ZSBhcworImdvb2QiLiBJZiBpdCBleGl0cyB3aXRoIGNvZGUgMSAob3IgYW55IGNvZGUgYmV0d2VlbiAxIGFuZCAxMjcKK2luY2x1ZGVkLCBleGNlcHQgdGhlIHNwZWNpYWwgY29kZSAxMjUpLCB0aGVuIHRoZSBjdXJyZW50IHN0YXRlIHdpbGwgYmUKK21hcmtlZCBhcyAiYmFkIi4KKworRXhpdCBjb2RlIGJldHdlZW4gMTI4IGFuZCAyNTUgYXJlIHNwZWNpYWwgdG8gImdpdCBiaXNlY3QgcnVuIi4gVGhleQorbWFrZSBpdCBzdG9wIGltbWVkaWF0ZWx5IHRoZSBiaXNlY3Rpb24gcHJvY2Vzcy4gVGhpcyBpcyB1c2VmdWwgZm9yCitleGFtcGxlIGlmIHRoZSBjb21tYW5kIHBhc3NlZCB0YWtlcyB0b28gbG9uZyB0byBjb21wbGV0ZSwgYmVjYXVzZSB5b3UKK2NhbiBraWxsIGl0IHdpdGggYSBzaWduYWwgYW5kIGl0IHdpbGwgc3RvcCB0aGUgYmlzZWN0aW9uIHByb2Nlc3MuCisKK0l0IGNhbiBhbHNvIGJlIHVzZWZ1bCBpbiBzY3JpcHRzIHBhc3NlZCB0byAiZ2l0IGJpc2VjdCBydW4iIHRvICJleGl0CisyNTUiIGlmIHNvbWUgdmVyeSBhYm5vcm1hbCBzaXR1YXRpb24gaXMgZGV0ZWN0ZWQuCisKK0F2b2lkaW5nIHVudGVzdGFibGUgY29tbWl0cworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1NvbWV0aW1lcyBpdCBoYXBwZW5zIHRoYXQgdGhlIGN1cnJlbnQgc3RhdGUgY2Fubm90IGJlIHRlc3RlZCwgZm9yCitleGFtcGxlIGlmIGl0IGRvZXMgbm90IGNvbXBpbGUgYmVjYXVzZSB0aGVyZSB3YXMgYSBidWcgcHJldmVudGluZyBpdAorYXQgdGhhdCB0aW1lLiBUaGlzIGlzIHdoYXQgdGhlIHNwZWNpYWwgZXhpdCBjb2RlIDEyNSBpcyBmb3IuIEl0IHRlbGxzCisiZ2l0IGJpc2VjdCBydW4iIHRoYXQgdGhlIGN1cnJlbnQgY29tbWl0IHNob3VsZCBiZSBtYXJrZWQgYXMKK3VudGVzdGFibGUgYW5kIHRoYXQgYW5vdGhlciBvbmUgc2hvdWxkIGJlIGNob3NlbiBhbmQgY2hlY2tlZCBvdXQuCisKK0lmIHRoZSBiaXNlY3Rpb24gcHJvY2VzcyBpcyBkcml2ZW4gbWFudWFsbHksIHlvdSBjYW4gdXNlICJnaXQgYmlzZWN0Citza2lwIiB0byBkbyB0aGUgc2FtZSB0aGluZy4gKEluIGZhY3QgdGhlIHNwZWNpYWwgZXhpdCBjb2RlIDEyNSBtYWtlcworImdpdCBiaXNlY3QgcnVuIiB1c2UgImdpdCBiaXNlY3Qgc2tpcCIgaW4gdGhlIGJhY2tncm91bmQuKQorCitPciBpZiB5b3Ugd2FudCBtb3JlIGNvbnRyb2wsIHlvdSBjYW4gaW5zcGVjdCB0aGUgY3VycmVudCBzdGF0ZSB1c2luZworZm9yIGV4YW1wbGUgImdpdCBiaXNlY3QgdmlzdWFsaXplIi4gSXQgd2lsbCBsYXVuY2ggZ2l0ayAob3IgImdpdCBsb2ciCitpZiB0aGUgRElTUExBWSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0KSB0byBoZWxwIHlvdSBmaW5kIGEKK2JldHRlciBiaXNlY3Rpb24gcG9pbnQuCisKK0VpdGhlciB3YXksIGlmIHlvdSBoYXZlIGEgc3RyaW5nIG9mIHVudGVzdGFibGUgY29tbWl0cywgaXQgbWlnaHQKK2hhcHBlbiB0aGF0IHRoZSByZWdyZXNzaW9uIHlvdSBhcmUgbG9va2luZyBmb3IgaGFzIGJlZW4gaW50cm9kdWNlZCBieQorb25lIG9mIHRoZXNlIHVudGVzdGFibGUgY29tbWl0cy4gSW4gdGhpcyBjYXNlIGl0J3Mgbm90IHBvc3NpYmxlIHRvCit0ZWxsIGZvciBzdXJlIHdoaWNoIGNvbW1pdCBpbnRyb2R1Y2VkIHRoZSByZWdyZXNzaW9uLgorCitTbyBpZiB5b3UgdXNlZCAiZ2l0IGJpc2VjdCBza2lwIiAob3IgdGhlIHJ1biBzY3JpcHQgZXhpdGVkIHdpdGgKK3NwZWNpYWwgY29kZSAxMjUpIHlvdSBjb3VsZCBnZXQgYSByZXN1bHQgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tCitUaGVyZSBhcmUgb25seSAnc2tpcCdwZWQgY29tbWl0cyBsZWZ0IHRvIHRlc3QuCitUaGUgZmlyc3QgYmFkIGNvbW1pdCBjb3VsZCBiZSBhbnkgb2Y6CisxNTcyMmYyZmEzMjhlYWJhOTcwMjI4OThhMzA1ZmZjODE3MmRiNmIxCis3OGU4NmNmM2U4NTBiZDc1NWJiNzE4MzFmNDJlMjAwNjI2ZmJkMWUwCitlMTViNzNhZDNkYjliNDhkN2QxYWRlMzJmOGNkMjNhNzUxZmUwYWNlCiswNzBlYWIyMzAzMDI0NzA2ZjI5MjQ4MjJiZmVjOGI5ODQ3ZTRhYzFiCitXZSBjYW5ub3QgYmlzZWN0IG1vcmUhCistLS0tLS0tLS0tLS0tCisKK1NhdmluZyBhIGxvZyBhbmQgcmVwbGF5aW5nIGl0Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitJZiB5b3Ugd2FudCB0byBzaG93IG90aGVyIHBlb3BsZSB5b3VyIGJpc2VjdGlvbiBwcm9jZXNzLCB5b3UgY2FuIGdldCBhCitsb2cgdXNpbmcgZm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBsb2cgPiBiaXNlY3RfbG9nLnR4dAorLS0tLS0tLS0tLS0tLQorCitBbmQgaXQgaXMgcG9zc2libGUgdG8gcmVwbGF5IGl0IHVzaW5nOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgcmVwbGF5IGJpc2VjdF9sb2cudHh0CistLS0tLS0tLS0tLS0tCisKKworImdpdCBiaXNlY3QiIGRldGFpbHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Jpc2VjdGlvbiBhbGdvcml0aG0KK35+fn5+fn5+fn5+fn5+fn5+fn4KKworQXMgdGhlIEdpdCBjb21taXRzIGZvcm0gYSBkaXJlY3RlZCBhY3ljbGljIGdyYXBoIChEQUcpLCBmaW5kaW5nIHRoZQorYmVzdCBiaXNlY3Rpb24gY29tbWl0IHRvIHRlc3QgYXQgZWFjaCBzdGVwIGlzIG5vdCBzbyBzaW1wbGUuIEFueXdheQorTGludXMgZm91bmQgYW5kIGltcGxlbWVudGVkIGEgInRydWx5IHN0dXBpZCIgYWxnb3JpdGhtLCBsYXRlciBpbXByb3ZlZAorYnkgSnVuaW8gSGFtYW5vLCB0aGF0IHdvcmtzIHF1aXRlIHdlbGwuCisKK1NvIHRoZSBhbGdvcml0aG0gdXNlZCBieSAiZ2l0IGJpc2VjdCIgdG8gZmluZCB0aGUgYmVzdCBiaXNlY3Rpb24KK2NvbW1pdCB3aGVuIHRoZXJlIGFyZSBubyBza2lwcGVkIGNvbW1pdHMgaXMgdGhlIGZvbGxvd2luZzoKKworMSkga2VlcCBvbmx5IHRoZSBjb21taXRzIHRoYXQ6CisKK2EpIGFyZSBhbmNlc3RvciBvZiB0aGUgImJhZCIgY29tbWl0IChpbmNsdWRpbmcgdGhlICJiYWQiIGNvbW1pdCBpdHNlbGYpLAorYikgYXJlIG5vdCBhbmNlc3RvciBvZiBhICJnb29kIiBjb21taXQgKGV4Y2x1ZGluZyB0aGUgImdvb2QiIGNvbW1pdHMpLgorCitUaGlzIG1lYW5zIHRoYXQgd2UgZ2V0IHJpZCBvZiB0aGUgdW5pbnRlcmVzdGluZyBjb21taXRzIGluIHRoZSBEQUcuCisKK0ZvciBleGFtcGxlIGlmIHdlIHN0YXJ0IHdpdGggYSBncmFwaCBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0KK0ctWS1HLVctVy1XLVgtWC1YLVgKKwkgICBcIC8KKwkgICAgVy1XLUIKKwkgICAvCitZLS0tRy1XLS0tVworIFwgLyAgIFwKK1ktWSAgICAgWC1YLVgtWAorCistPiB0aW1lIGdvZXMgdGhpcyB3YXkgLT4KKy0tLS0tLS0tLS0tLS0KKword2hlcmUgQiBpcyB0aGUgImJhZCIgY29tbWl0LCAiRyIgYXJlICJnb29kIiBjb21taXRzIGFuZCBXLCBYLCBhbmQgWQorYXJlIG90aGVyIGNvbW1pdHMsIHdlIHdpbGwgZ2V0IHRoZSBmb2xsb3dpbmcgZ3JhcGggYWZ0ZXIgdGhpcyBmaXJzdAorc3RlcDoKKworLS0tLS0tLS0tLS0tLQorVy1XLVcKKyAgICAgXAorICAgICAgVy1XLUIKKyAgICAgLworVy0tLVcKKy0tLS0tLS0tLS0tLS0KKworU28gb25seSB0aGUgVyBhbmQgQiBjb21taXRzIHdpbGwgYmUga2VwdC4gQmVjYXVzZSBjb21taXRzIFggYW5kIFkgd2lsbAoraGF2ZSBiZWVuIHJlbW92ZWQgYnkgcnVsZXMgYSkgYW5kIGIpIHJlc3BlY3RpdmVseSwgYW5kIGJlY2F1c2UgY29tbWl0cworRyBhcmUgcmVtb3ZlZCBieSBydWxlIGIpIHRvby4KKworTm90ZSBmb3IgZ2l0IHVzZXJzLCB0aGF0IGl0IGlzIGVxdWl2YWxlbnQgYXMga2VlcGluZyBvbmx5IHRoZSBjb21taXQKK2dpdmVuIGJ5OgorCistLS0tLS0tLS0tLS0tCitnaXQgcmV2LWxpc3QgQkFEIC0tbm90IEdPT0QxIEdPT0QyLi4uCistLS0tLS0tLS0tLS0tCisKK0Fsc28gbm90ZSB0aGF0IHdlIGRvbid0IHJlcXVpcmUgdGhlIGNvbW1pdHMgdGhhdCBhcmUga2VwdCB0byBiZQorZGVzY2VuZGFudHMgb2YgYSAiZ29vZCIgY29tbWl0LiBTbyBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIGNvbW1pdHMgVworYW5kIFogd2lsbCBiZSBrZXB0OgorCistLS0tLS0tLS0tLS0tCitHLVctVy1XLUIKKyAgIC8KK1otWgorLS0tLS0tLS0tLS0tLQorCisyKSBzdGFydGluZyBmcm9tIHRoZSAiZ29vZCIgZW5kcyBvZiB0aGUgZ3JhcGgsIGFzc29jaWF0ZSB0byBlYWNoCitjb21taXQgdGhlIG51bWJlciBvZiBhbmNlc3RvcnMgaXQgaGFzIHBsdXMgb25lCisKK0ZvciBleGFtcGxlIHdpdGggdGhlIGZvbGxvd2luZyBncmFwaCB3aGVyZSBIIGlzIHRoZSAiYmFkIiBjb21taXQgYW5kIEEKK2FuZCBEIGFyZSBzb21lIHBhcmVudHMgb2Ygc29tZSAiZ29vZCIgY29tbWl0czoKKworLS0tLS0tLS0tLS0tLQorQS1CLUMKKyAgICAgXAorICAgICAgRi1HLUgKKyAgICAgLworRC0tLUUKKy0tLS0tLS0tLS0tLS0KKwordGhpcyB3aWxsIGdpdmU6CisKKy0tLS0tLS0tLS0tLS0KKzEgMiAzCitBLUItQworICAgICBcNiA3IDgKKyAgICAgIEYtRy1ICisxICAgMi8KK0QtLS1FCistLS0tLS0tLS0tLS0tCisKKzMpIGFzc29jaWF0ZSB0byBlYWNoIGNvbW1pdDogbWluKFgsIE4gLSBYKQorCit3aGVyZSBYIGlzIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHRvIHRoZSBjb21taXQgaW4gc3RlcCAyKSBhbmQgTiBpcyB0aGUKK3RvdGFsIG51bWJlciBvZiBjb21taXRzIGluIHRoZSBncmFwaC4KKworSW4gdGhlIGFib3ZlIGV4YW1wbGUgd2UgaGF2ZSBOID0gOCwgc28gdGhpcyB3aWxsIGdpdmU6CisKKy0tLS0tLS0tLS0tLS0KKzEgMiAzCitBLUItQworICAgICBcMiAxIDAKKyAgICAgIEYtRy1ICisxICAgMi8KK0QtLS1FCistLS0tLS0tLS0tLS0tCisKKzQpIHRoZSBiZXN0IGJpc2VjdGlvbiBwb2ludCBpcyB0aGUgY29tbWl0IHdpdGggdGhlIGhpZ2hlc3QgYXNzb2NpYXRlZAorbnVtYmVyCisKK1NvIGluIHRoZSBhYm92ZSBleGFtcGxlIHRoZSBiZXN0IGJpc2VjdGlvbiBwb2ludCBpcyBjb21taXQgQy4KKworNSkgbm90ZSB0aGF0IHNvbWUgc2hvcnRjdXRzIGFyZSBpbXBsZW1lbnRlZCB0byBzcGVlZCB1cCB0aGUgYWxnb3JpdGhtCisKK0FzIHdlIGtub3cgTiBmcm9tIHRoZSBiZWdpbm5pbmcsIHdlIGtub3cgdGhhdCBtaW4oWCwgTiAtIFgpIGNhbid0IGJlCitncmVhdGVyIHRoYW4gTi8yLiBTbyBkdXJpbmcgc3RlcHMgMikgYW5kIDMpLCBpZiB3ZSB3b3VsZCBhc3NvY2lhdGUgTi8yCit0byBhIGNvbW1pdCwgdGhlbiB3ZSBrbm93IHRoaXMgaXMgdGhlIGJlc3QgYmlzZWN0aW9uIHBvaW50LiBTbyBpbiB0aGlzCitjYXNlIHdlIGNhbiBqdXN0IHN0b3AgcHJvY2Vzc2luZyBhbnkgb3RoZXIgY29tbWl0IGFuZCByZXR1cm4gdGhlCitjdXJyZW50IGNvbW1pdC4KKworQmlzZWN0aW9uIGFsZ29yaXRobSBkZWJ1Z2dpbmcKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0ZvciBhbnkgY29tbWl0IGdyYXBoLCB5b3UgY2FuIHNlZSB0aGUgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCBlYWNoCitjb21taXQgdXNpbmcgImdpdCByZXYtbGlzdCAtLWJpc2VjdC1hbGwiLgorCitGb3IgZXhhbXBsZSwgZm9yIHRoZSBhYm92ZSBncmFwaCwgYSBjb21tYW5kIGxpa2U6CisKKy0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJldi1saXN0IC0tYmlzZWN0LWFsbCBCQUQgLS1ub3QgR09PRDEgR09PRDIKKy0tLS0tLS0tLS0tLS0KKword291bGQgb3V0cHV0IHNvbWV0aGluZyBsaWtlOgorCistLS0tLS0tLS0tLS0tCitlMTViNzNhZDNkYjliNDhkN2QxYWRlMzJmOGNkMjNhNzUxZmUwYWNlIChkaXN0PTMpCisxNTcyMmYyZmEzMjhlYWJhOTcwMjI4OThhMzA1ZmZjODE3MmRiNmIxIChkaXN0PTIpCis3OGU4NmNmM2U4NTBiZDc1NWJiNzE4MzFmNDJlMjAwNjI2ZmJkMWUwIChkaXN0PTIpCithMTkzOWQ5YTE0MmRlOTcyMDk0YWY0ZGRlOWE1NDRlNTc3ZGRlZjBlIChkaXN0PTIpCiswNzBlYWIyMzAzMDI0NzA2ZjI5MjQ4MjJiZmVjOGI5ODQ3ZTRhYzFiIChkaXN0PTEpCithMzg2NGQ0ZjMyYTNiZjVlZDE3N2RkZWY1OTg0OTBhMDg3NjBiNzBkIChkaXN0PTEpCithNDFiYWE3MTdkZDc0ZjExODBhYmY1NWU5MzQxYmM3YTBiYjlkNTU2IChkaXN0PTEpCis5ZTYyMmE2ZGFkNDAzYjcxYzQwOTc5NzQzYmI5ZDViZTE3YjE2YmQ2IChkaXN0PTApCistLS0tLS0tLS0tLS0tCisKK0Jpc2VjdGlvbiBhbGdvcml0aG0gZGlzY3Vzc2VkCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitGaXJzdCBsZXQncyBkZWZpbmUgImJlc3QgYmlzZWN0aW9uIHBvaW50Ii4gV2Ugd2lsbCBzYXkgdGhhdCBhIGNvbW1pdCBYCitpcyBhIGJlc3QgYmlzZWN0aW9uIHBvaW50IG9yIGEgYmVzdCBiaXNlY3Rpb24gY29tbWl0IGlmIGtub3dpbmcgaXRzCitzdGF0ZSAoImdvb2QiIG9yICJiYWQiKSBnaXZlcyBhcyBtdWNoIGluZm9ybWF0aW9uIGFzIHBvc3NpYmxlIHdoZXRoZXIKK3RoZSBzdGF0ZSBvZiB0aGUgY29tbWl0IGhhcHBlbnMgdG8gYmUgImdvb2QiIG9yICJiYWQiLgorCitUaGlzIG1lYW5zIHRoYXQgdGhlIGJlc3QgYmlzZWN0aW9uIGNvbW1pdHMgYXJlIHRoZSBjb21taXRzIHdoZXJlIHRoZQorZm9sbG93aW5nIGZ1bmN0aW9uIGlzIG1heGltdW06CisKKy0tLS0tLS0tLS0tLS0KK2YoWCkgPSBtaW4oaW5mb3JtYXRpb25faWZfZ29vZChYKSwgaW5mb3JtYXRpb25faWZfYmFkKFgpKQorLS0tLS0tLS0tLS0tLQorCit3aGVyZSBpbmZvcm1hdGlvbl9pZl9nb29kKFgpIGlzIHRoZSBpbmZvcm1hdGlvbiB3ZSBnZXQgaWYgWCBpcyBnb29kCithbmQgaW5mb3JtYXRpb25faWZfYmFkKFgpIGlzIHRoZSBpbmZvcm1hdGlvbiB3ZSBnZXQgaWYgWCBpcyBiYWQuCisKK05vdyB3ZSB3aWxsIHN1cHBvc2UgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSAiZmlyc3QgYmFkIGNvbW1pdCIuIFRoaXMKK21lYW5zIHRoYXQgYWxsIGl0cyBkZXNjZW5kYW50cyBhcmUgImJhZCIgYW5kIGFsbCB0aGUgb3RoZXIgY29tbWl0cyBhcmUKKyJnb29kIi4gQW5kIHdlIHdpbGwgc3VwcG9zZSB0aGF0IGFsbCBjb21taXRzIGhhdmUgYW4gZXF1YWwgcHJvYmFiaWxpdHkKK29mIGJlaW5nIGdvb2Qgb3IgYmFkLCBvciBvZiBiZWluZyB0aGUgZmlyc3QgYmFkIGNvbW1pdCwgc28ga25vd2luZyB0aGUKK3N0YXRlIG9mIGMgY29tbWl0cyBnaXZlcyBhbHdheXMgdGhlIHNhbWUgYW1vdW50IG9mIGluZm9ybWF0aW9uCit3aGVyZXZlciB0aGVzZSBjIGNvbW1pdHMgYXJlIG9uIHRoZSBncmFwaCBhbmQgd2hhdGV2ZXIgYyBpcy4gKFNvIHdlCitzdXBwb3NlIHRoYXQgdGhlc2UgY29tbWl0cyBiZWluZyBmb3IgZXhhbXBsZSBvbiBhIGJyYW5jaCBvciBuZWFyIGEKK2dvb2Qgb3IgYSBiYWQgY29tbWl0IGRvZXMgbm90IGdpdmUgbW9yZSBvciBsZXNzIGluZm9ybWF0aW9uKS4KKworTGV0J3MgYWxzbyBzdXBwb3NlIHRoYXQgd2UgaGF2ZSBhIGNsZWFuZWQgdXAgZ3JhcGggbGlrZSBvbmUgYWZ0ZXIgc3RlcAorMSkgaW4gdGhlIGJpc2VjdGlvbiBhbGdvcml0aG0gYWJvdmUuIFRoaXMgbWVhbnMgdGhhdCB3ZSBjYW4gbWVhc3VyZQordGhlIGluZm9ybWF0aW9uIHdlIGdldCBpbiB0ZXJtcyBvZiBudW1iZXIgb2YgY29tbWl0IHdlIGNhbiByZW1vdmUgZnJvbQordGhlIGdyYXBoLi4KKworQW5kIGxldCdzIHRha2UgYSBjb21taXQgWCBpbiB0aGUgZ3JhcGguCisKK0lmIFggaXMgZm91bmQgdG8gYmUgImdvb2QiLCB0aGVuIHdlIGtub3cgdGhhdCBpdHMgYW5jZXN0b3JzIGFyZSBhbGwKKyJnb29kIiwgc28gd2Ugd2FudCB0byBzYXkgdGhhdDoKKworLS0tLS0tLS0tLS0tLQoraW5mb3JtYXRpb25faWZfZ29vZChYKSA9IG51bWJlcl9vZl9hbmNlc3RvcnMoWCkgIChUUlVFKQorLS0tLS0tLS0tLS0tLQorCitBbmQgdGhpcyBpcyB0cnVlIGJlY2F1c2UgYXQgc3RlcCAxKSBiKSB3ZSByZW1vdmUgdGhlIGFuY2VzdG9ycyBvZiB0aGUKKyJnb29kIiBjb21taXRzLgorCitJZiBYIGlzIGZvdW5kIHRvIGJlICJiYWQiLCB0aGVuIHdlIGtub3cgdGhhdCBpdHMgZGVzY2VuZGFudHMgYXJlIGFsbAorImJhZCIsIHNvIHdlIHdhbnQgdG8gc2F5IHRoYXQ6CisKKy0tLS0tLS0tLS0tLS0KK2luZm9ybWF0aW9uX2lmX2JhZChYKSA9IG51bWJlcl9vZl9kZXNjZW5kYW50cyhYKSAgKFdST05HKQorLS0tLS0tLS0tLS0tLQorCitCdXQgdGhpcyBpcyB3cm9uZyBiZWNhdXNlIGF0IHN0ZXAgMSkgYSkgd2Uga2VlcCBvbmx5IHRoZSBhbmNlc3RvcnMgb2YKK3RoZSBiYWQgY29tbWl0LiBTbyB3ZSBnZXQgbW9yZSBpbmZvcm1hdGlvbiB3aGVuIGEgY29tbWl0IGlzIG1hcmtlZCBhcworImJhZCIsIGJlY2F1c2Ugd2UgYWxzbyBrbm93IHRoYXQgdGhlIGFuY2VzdG9ycyBvZiB0aGUgcHJldmlvdXMgImJhZCIKK2NvbW1pdCB0aGF0IGFyZSBub3QgYW5jZXN0b3JzIG9mIHRoZSBuZXcgImJhZCIgY29tbWl0IGFyZSBub3QgdGhlCitmaXJzdCBiYWQgY29tbWl0LiBXZSBkb24ndCBrbm93IGlmIHRoZXkgYXJlIGdvb2Qgb3IgYmFkLCBidXQgd2Uga25vdwordGhhdCB0aGV5IGFyZSBub3QgdGhlIGZpcnN0IGJhZCBjb21taXQgYmVjYXVzZSB0aGV5IGFyZSBub3QgYW5jZXN0b3IKK29mIHRoZSBuZXcgImJhZCIgY29tbWl0LgorCitTbyB3aGVuIGEgY29tbWl0IGlzIG1hcmtlZCBhcyAiYmFkIiB3ZSBrbm93IHdlIGNhbiByZW1vdmUgYWxsIHRoZQorY29tbWl0cyBpbiB0aGUgZ3JhcGggZXhjZXB0IHRob3NlIHRoYXQgYXJlIGFuY2VzdG9ycyBvZiB0aGUgbmV3ICJiYWQiCitjb21taXQuIFRoaXMgbWVhbnMgdGhhdDoKKworLS0tLS0tLS0tLS0tLQoraW5mb3JtYXRpb25faWZfYmFkKFgpID0gTiAtIG51bWJlcl9vZl9hbmNlc3RvcnMoWCkgIChUUlVFKQorLS0tLS0tLS0tLS0tLQorCit3aGVyZSBOIGlzIHRoZSBudW1iZXIgb2YgY29tbWl0cyBpbiB0aGUgKGNsZWFuZWQgdXApIGdyYXBoLgorCitTbyBpbiB0aGUgZW5kIHRoaXMgbWVhbnMgdGhhdCB0byBmaW5kIHRoZSBiZXN0IGJpc2VjdGlvbiBjb21taXRzIHdlCitzaG91bGQgbWF4aW1pemUgdGhlIGZ1bmN0aW9uOgorCistLS0tLS0tLS0tLS0tCitmKFgpID0gbWluKG51bWJlcl9vZl9hbmNlc3RvcnMoWCksIE4gLSBudW1iZXJfb2ZfYW5jZXN0b3JzKFgpKQorLS0tLS0tLS0tLS0tLQorCitBbmQgdGhpcyBpcyBuaWNlIGJlY2F1c2UgYXQgc3RlcCAyKSB3ZSBjb21wdXRlIG51bWJlcl9vZl9hbmNlc3RvcnMoWCkKK2FuZCBzbyBhdCBzdGVwIDMpIHdlIGNvbXB1dGUgZihYKS4KKworTGV0J3MgdGFrZSB0aGUgZm9sbG93aW5nIGdyYXBoIGFzIGFuIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLS0KKwkgICAgRy1ILUktSgorCSAgIC8gICAgICAgXAorQS1CLUMtRC1FLUYgICAgICAgICBPCisJICAgXCAgICAgICAvCisJICAgIEstTC1NLU4KKy0tLS0tLS0tLS0tLS0KKworSWYgd2UgY29tcHV0ZSB0aGUgZm9sbG93aW5nIG5vbiBvcHRpbWFsIGZ1bmN0aW9uIG9uIGl0OgorCistLS0tLS0tLS0tLS0tCitnKFgpID0gbWluKG51bWJlcl9vZl9hbmNlc3RvcnMoWCksIG51bWJlcl9vZl9kZXNjZW5kYW50cyhYKSkKKy0tLS0tLS0tLS0tLS0KKword2UgZ2V0OgorCistLS0tLS0tLS0tLS0tCisJICAgIDQgMyAyIDEKKwkgICAgRy1ILUktSgorMSAyIDMgNCA1IDYvICAgICAgIFwwCitBLUItQy1ELUUtRiAgICAgICAgIE8KKwkgICBcICAgICAgIC8KKwkgICAgSy1MLU0tTgorCSAgICA0IDMgMiAxCistLS0tLS0tLS0tLS0tCisKK2J1dCB3aXRoIHRoZSBhbGdvcml0aG0gdXNlZCBieSBnaXQgYmlzZWN0IHdlIGdldDoKKworLS0tLS0tLS0tLS0tLQorCSAgICA3IDcgNiA1CisJICAgIEctSC1JLUoKKzEgMiAzIDQgNSA2LyAgICAgICBcMAorQS1CLUMtRC1FLUYgICAgICAgICBPCisJICAgXCAgICAgICAvCisJICAgIEstTC1NLU4KKwkgICAgNyA3IDYgNQorLS0tLS0tLS0tLS0tLQorCitTbyB3ZSBjaG9zZSBHLCBILCBLIG9yIEwgYXMgdGhlIGJlc3QgYmlzZWN0aW9uIHBvaW50LCB3aGljaCBpcyBiZXR0ZXIKK3RoYW4gRi4gQmVjYXVzZSBpZiBmb3IgZXhhbXBsZSBMIGlzIGJhZCwgdGhlbiB3ZSB3aWxsIGtub3cgbm90IG9ubHkKK3RoYXQgTCwgTSBhbmQgTiBhcmUgYmFkIGJ1dCBhbHNvIHRoYXQgRywgSCwgSSBhbmQgSiBhcmUgbm90IHRoZSBmaXJzdAorYmFkIGNvbW1pdCAoc2luY2Ugd2Ugc3VwcG9zZSB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGZpcnN0IGJhZCBjb21taXQKK2FuZCBpdCBtdXN0IGJlIGFuIGFuY2VzdG9yIG9mIEwpLgorCitTbyB0aGUgY3VycmVudCBhbGdvcml0aG0gc2VlbXMgdG8gYmUgdGhlIGJlc3QgcG9zc2libGUgZ2l2ZW4gd2hhdCB3ZQoraW5pdGlhbGx5IHN1cHBvc2VkLgorCitTa2lwIGFsZ29yaXRobQorfn5+fn5+fn5+fn5+fn4KKworV2hlbiBzb21lIGNvbW1pdHMgaGF2ZSBiZWVuIHNraXBwZWQgKHVzaW5nICJnaXQgYmlzZWN0IHNraXAiKSwgdGhlbgordGhlIGJpc2VjdGlvbiBhbGdvcml0aG0gaXMgdGhlIHNhbWUgZm9yIHN0ZXAgMSkgdG8gMykuIEJ1dCB0aGVuIHdlIHVzZQorcm91Z2hseSB0aGUgZm9sbG93aW5nIHN0ZXBzOgorCis2KSBzb3J0IHRoZSBjb21taXQgYnkgZGVjcmVhc2luZyBhc3NvY2lhdGVkIHZhbHVlCisKKzcpIGlmIHRoZSBmaXJzdCBjb21taXQgaGFzIG5vdCBiZWVuIHNraXBwZWQsIHdlIGNhbiByZXR1cm4gaXQgYW5kIHN0b3AKK2hlcmUKKworOCkgb3RoZXJ3aXNlIGZpbHRlciBvdXQgYWxsIHRoZSBza2lwcGVkIGNvbW1pdHMgaW4gdGhlIHNvcnRlZCBsaXN0CisKKzkpIHVzZSBhIHBzZXVkbyByYW5kb20gbnVtYmVyIGdlbmVyYXRvciAoUFJORykgdG8gZ2VuZXJhdGUgYSByYW5kb20KK251bWJlciBiZXR3ZWVuIDAgYW5kIDEKKworMTApIG11bHRpcGx5IHRoaXMgcmFuZG9tIG51bWJlciB3aXRoIGl0cyBzcXVhcmUgcm9vdCB0byBiaWFzIGl0IHRvd2FyZAorMAorCisxMSkgbXVsdGlwbHkgdGhlIHJlc3VsdCBieSB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgaW4gdGhlIGZpbHRlcmVkIGxpc3QKK3RvIGdldCBhbiBpbmRleCBpbnRvIHRoaXMgbGlzdAorCisxMikgcmV0dXJuIHRoZSBjb21taXQgYXQgdGhlIGNvbXB1dGVkIGluZGV4CisKK1NraXAgYWxnb3JpdGhtIGRpc2N1c3NlZAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0FmdGVyIHN0ZXAgNykgKGluIHRoZSBza2lwIGFsZ29yaXRobSksIHdlIGNvdWxkIGNoZWNrIGlmIHRoZSBzZWNvbmQKK2NvbW1pdCBoYXMgYmVlbiBza2lwcGVkIGFuZCByZXR1cm4gaXQgaWYgaXQgaXMgbm90IHRoZSBjYXNlLiBBbmQgaW4KK2ZhY3QgdGhhdCB3YXMgdGhlIGFsZ29yaXRobSB3ZSB1c2VkIGZyb20gd2hlbiAiZ2l0IGJpc2VjdCBza2lwIiB3YXMKK2RldmVsb3BlZCBpbiBnaXQgdmVyc2lvbiAxLjUuNCAocmVsZWFzZWQgb24gRmVicnVhcnkgMXN0IDIwMDgpIHVudGlsCitnaXQgdmVyc2lvbiAxLjYuNCAocmVsZWFzZWQgSnVseSAyOXRoIDIwMDkpLgorCitCdXQgSW5nbyBNb2xuYXIgYW5kIEguIFBldGVyIEFudmluIChhbm90aGVyIHdlbGwga25vd24gbGludXgga2VybmVsCitkZXZlbG9wZXIpIGJvdGggY29tcGxhaW5lZCB0aGF0IHNvbWV0aW1lcyB0aGUgYmVzdCBiaXNlY3Rpb24gcG9pbnRzCithbGwgaGFwcGVuZWQgdG8gYmUgaW4gYW4gYXJlYSB3aGVyZSBhbGwgdGhlIGNvbW1pdHMgYXJlCit1bnRlc3RhYmxlLiBBbmQgaW4gdGhpcyBjYXNlIHRoZSB1c2VyIHdhcyBhc2tlZCB0byB0ZXN0IG1hbnkKK3VudGVzdGFibGUgY29tbWl0cywgd2hpY2ggY291bGQgYmUgdmVyeSBpbmVmZmljaWVudC4KKworSW5kZWVkIHVudGVzdGFibGUgY29tbWl0cyBhcmUgb2Z0ZW4gdW50ZXN0YWJsZSBiZWNhdXNlIGEgYnJlYWthZ2Ugd2FzCitpbnRyb2R1Y2VkIGF0IG9uZSB0aW1lLCBhbmQgdGhhdCBicmVha2FnZSB3YXMgZml4ZWQgb25seSBhZnRlciBtYW55CitvdGhlciBjb21taXRzIHdlcmUgaW50cm9kdWNlZC4KKworVGhpcyBicmVha2FnZSBpcyBvZiBjb3Vyc2UgbW9zdCBvZiB0aGUgdGltZSB1bnJlbGF0ZWQgdG8gdGhlIGJyZWFrYWdlCit3ZSBhcmUgdHJ5aW5nIHRvIGxvY2F0ZSBpbiB0aGUgY29tbWl0IGdyYXBoLiBCdXQgaXQgcHJldmVudHMgdXMgdG8KK2tub3cgaWYgdGhlIGludGVyZXN0aW5nICJiYWQgYmVoYXZpb3IiIGlzIHByZXNlbnQgb3Igbm90LgorCitTbyBpdCBpcyBhIGZhY3QgdGhhdCBjb21taXRzIG5lYXIgYW4gdW50ZXN0YWJsZSBjb21taXQgaGF2ZSBhIGhpZ2gKK3Byb2JhYmlsaXR5IG9mIGJlaW5nIHVudGVzdGFibGUgdGhlbXNlbHZlcy4gQW5kIHRoZSBiZXN0IGJpc2VjdGlvbgorY29tbWl0cyBhcmUgb2Z0ZW4gZm91bmQgdG9nZXRoZXIgdG9vIChkdWUgdG8gdGhlIGJpc2VjdGlvbiBhbGdvcml0aG0pLgorCitUaGlzIGlzIHdoeSBpdCBpcyBhIGJhZCBpZGVhIHRvIGp1c3QgY2hvc2UgdGhlIG5leHQgYmVzdCB1bnNraXBwZWQKK2Jpc2VjdGlvbiBjb21taXQgd2hlbiB0aGUgZmlyc3Qgb25lIGhhcyBiZWVuIHNraXBwZWQuCisKK1dlIGZvdW5kIHRoYXQgbW9zdCBjb21taXRzIG9uIHRoZSBncmFwaCBtYXkgZ2l2ZSBxdWl0ZSBhIGxvdCBvZgoraW5mb3JtYXRpb24gd2hlbiB0aGV5IGFyZSB0ZXN0ZWQuIEFuZCB0aGUgY29tbWl0cyB0aGF0IHdpbGwgbm90IG9uCithdmVyYWdlIGdpdmUgYSBsb3Qgb2YgaW5mb3JtYXRpb24gYXJlIHRoZSBvbmUgbmVhciB0aGUgZ29vZCBhbmQgYmFkCitjb21taXRzLgorCitTbyB1c2luZyBhIFBSTkcgd2l0aCBhIGJpYXMgdG8gZmF2b3IgY29tbWl0cyBhd2F5IGZyb20gdGhlIGdvb2QgYW5kCitiYWQgY29tbWl0cyBsb29rZWQgbGlrZSBhIGdvb2QgY2hvaWNlLgorCitPbmUgb2J2aW91cyBpbXByb3ZlbWVudCB0byB0aGlzIGFsZ29yaXRobSB3b3VsZCBiZSB0byBsb29rIGZvciBhCitjb21taXQgdGhhdCBoYXMgYW4gYXNzb2NpYXRlZCB2YWx1ZSBuZWFyIHRoZSBvbmUgb2YgdGhlIGJlc3QgYmlzZWN0aW9uCitjb21taXQsIGFuZCB0aGF0IGlzIG9uIGFub3RoZXIgYnJhbmNoLCBiZWZvcmUgdXNpbmcgdGhlIFBSTkcuIEJlY2F1c2UKK2lmIHN1Y2ggYSBjb21taXQgZXhpc3RzLCB0aGVuIGl0IGlzIG5vdCB2ZXJ5IGxpa2VseSB0byBiZSB1bnRlc3RhYmxlCit0b28sIHNvIGl0IHdpbGwgcHJvYmFibHkgZ2l2ZSBtb3JlIGluZm9ybWF0aW9uIHRoYW4gYSBuZWFybHkgcmFuZG9tbHkKK2Nob3NlbiBvbmUuCisKK0NoZWNraW5nIG1lcmdlIGJhc2VzCit+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGVyZSBpcyBhbm90aGVyIHR3ZWFrIGluIHRoZSBiaXNlY3Rpb24gYWxnb3JpdGhtIHRoYXQgaGFzIG5vdCBiZWVuCitkZXNjcmliZWQgaW4gdGhlICJiaXNlY3Rpb24gYWxnb3JpdGhtIiBhYm92ZS4KKworV2Ugc3VwcG9zZWQgaW4gdGhlIHByZXZpb3VzIGV4YW1wbGVzIHRoYXQgdGhlICJnb29kIiBjb21taXRzIHdlcmUKK2FuY2VzdG9ycyBvZiB0aGUgImJhZCIgY29tbWl0LiBCdXQgdGhpcyBpcyBub3QgYSByZXF1aXJlbWVudCBvZiAiZ2l0CitiaXNlY3QiLgorCitPZiBjb3Vyc2UgdGhlICJiYWQiIGNvbW1pdCBjYW5ub3QgYmUgYW4gYW5jZXN0b3Igb2YgYSAiZ29vZCIgY29tbWl0LAorYmVjYXVzZSB0aGUgYW5jZXN0b3JzIG9mIHRoZSBnb29kIGNvbW1pdHMgYXJlIHN1cHBvc2VkIHRvIGJlCisiZ29vZCIuIEFuZCBhbGwgdGhlICJnb29kIiBjb21taXRzIG11c3QgYmUgcmVsYXRlZCB0byB0aGUgYmFkIGNvbW1pdC4KK1RoZXkgY2Fubm90IGJlIG9uIGEgYnJhbmNoIHRoYXQgaGFzIG5vIGxpbmsgd2l0aCB0aGUgYnJhbmNoIG9mIHRoZQorImJhZCIgY29tbWl0LiBCdXQgaXQgaXMgcG9zc2libGUgZm9yIGEgZ29vZCBjb21taXQgdG8gYmUgcmVsYXRlZCB0byBhCitiYWQgY29tbWl0IGFuZCB5ZXQgbm90IGJlIG5laXRoZXIgb25lIG9mIGl0cyBhbmNlc3RvciBub3Igb25lIG9mIGl0cworZGVzY2VuZGFudHMuCisKK0ZvciBleGFtcGxlLCB0aGVyZSBjYW4gYmUgYSAibWFpbiIgYnJhbmNoLCBhbmQgYSAiZGV2IiBicmFuY2ggdGhhdCB3YXMKK2ZvcmtlZCBvZiB0aGUgbWFpbiBicmFuY2ggYXQgYSBjb21taXQgbmFtZWQgIkQiIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLQorQS1CLUMtRC1FLUYtRyAgPC0tbWFpbgorICAgICAgIFwKKwlILUktSiAgPC0tZGV2CistLS0tLS0tLS0tLS0tCisKK1RoZSBjb21taXQgIkQiIGlzIGNhbGxlZCBhICJtZXJnZSBiYXNlIiBmb3IgYnJhbmNoICJtYWluIiBhbmQgImRldiIKK2JlY2F1c2UgaXQncyB0aGUgYmVzdCBjb21tb24gYW5jZXN0b3IgZm9yIHRoZXNlIGJyYW5jaGVzIGZvciBhIG1lcmdlLgorCitOb3cgbGV0J3Mgc3VwcG9zZSB0aGF0IGNvbW1pdCBKIGlzIGJhZCBhbmQgY29tbWl0IEcgaXMgZ29vZCBhbmQgdGhhdAord2UgYXBwbHkgdGhlIGJpc2VjdGlvbiBhbGdvcml0aG0gbGlrZSBpdCBoYXMgYmVlbiBwcmV2aW91c2x5CitkZXNjcmliZWQuCisKK0FzIGRlc2NyaWJlZCBpbiBzdGVwIDEpIGIpIG9mIHRoZSBiaXNlY3Rpb24gYWxnb3JpdGhtLCB3ZSByZW1vdmUgYWxsCit0aGUgYW5jZXN0b3JzIG9mIHRoZSBnb29kIGNvbW1pdHMgYmVjYXVzZSB0aGV5IGFyZSBzdXBwb3NlZCB0byBiZSBnb29kCit0b28uCisKK1NvIHdlIHdvdWxkIGJlIGxlZnQgd2l0aCBvbmx5OgorCistLS0tLS0tLS0tLS0tCitILUktSgorLS0tLS0tLS0tLS0tLQorCitCdXQgd2hhdCBoYXBwZW5zIGlmIHRoZSBmaXJzdCBiYWQgY29tbWl0IGlzICJCIiBhbmQgaWYgaXQgaGFzIGJlZW4KK2ZpeGVkIGluIHRoZSAibWFpbiIgYnJhbmNoIGJ5IGNvbW1pdCAiRiI/CisKK1RoZSByZXN1bHQgb2Ygc3VjaCBhIGJpc2VjdGlvbiB3b3VsZCBiZSB0aGF0IHdlIHdvdWxkIGZpbmQgdGhhdCBIIGlzCit0aGUgZmlyc3QgYmFkIGNvbW1pdCwgd2hlbiBpbiBmYWN0IGl0J3MgQi4gU28gdGhhdCB3b3VsZCBiZSB3cm9uZyEKKworQW5kIHllcyBpdCBjYW4gaGFwcGVuIGluIHByYWN0aWNlIHRoYXQgcGVvcGxlIHdvcmtpbmcgb24gb25lIGJyYW5jaAorYXJlIG5vdCBhd2FyZSB0aGF0IHBlb3BsZSB3b3JraW5nIG9uIGFub3RoZXIgYnJhbmNoIGZpeGVkIGEgYnVnISBJdAorY291bGQgYWxzbyBoYXBwZW4gdGhhdCBGIGZpeGVkIG1vcmUgdGhhbiBvbmUgYnVnIG9yIHRoYXQgaXQgaXMgYQorcmV2ZXJ0IG9mIHNvbWUgYmlnIGRldmVsb3BtZW50IGVmZm9ydCB0aGF0IHdhcyBub3QgcmVhZHkgdG8gYmUKK3JlbGVhc2VkLgorCitJbiBmYWN0IGRldmVsb3BtZW50IHRlYW1zIG9mdGVuIG1haW50YWluIGJvdGggYSBkZXZlbG9wbWVudCBicmFuY2ggYW5kCithIG1haW50ZW5hbmNlIGJyYW5jaCwgYW5kIGl0IHdvdWxkIGJlIHF1aXRlIGVhc3kgZm9yIHRoZW0gaWYgImdpdAorYmlzZWN0IiBqdXN0IHdvcmtlZCB3aGVuIHRoZXkgd2FudCB0byBiaXNlY3QgYSByZWdyZXNzaW9uIG9uIHRoZQorZGV2ZWxvcG1lbnQgYnJhbmNoIHRoYXQgaXMgbm90IG9uIHRoZSBtYWludGVuYW5jZSBicmFuY2guIFRoZXkgc2hvdWxkCitiZSBhYmxlIHRvIHN0YXJ0IGJpc2VjdGluZyB1c2luZzoKKworLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHN0YXJ0IGRldiBtYWluCistLS0tLS0tLS0tLS0tCisKK1RvIGVuYWJsZSB0aGF0IGFkZGl0aW9uYWwgbmljZSBmZWF0dXJlLCB3aGVuIGEgYmlzZWN0aW9uIGlzIHN0YXJ0ZWQKK2FuZCB3aGVuIHNvbWUgZ29vZCBjb21taXRzIGFyZSBub3QgYW5jZXN0b3JzIG9mIHRoZSBiYWQgY29tbWl0LCB3ZQorZmlyc3QgY29tcHV0ZSB0aGUgbWVyZ2UgYmFzZXMgYmV0d2VlbiB0aGUgYmFkIGFuZCB0aGUgZ29vZCBjb21taXRzIGFuZAord2UgY2hvc2UgdGhlc2UgbWVyZ2UgYmFzZXMgYXMgdGhlIGZpcnN0IGNvbW1pdHMgdGhhdCB3aWxsIGJlIGNoZWNrZWQKK291dCBhbmQgdGVzdGVkLgorCitJZiBpdCBoYXBwZW5zIHRoYXQgb25lIG1lcmdlIGJhc2UgaXMgYmFkLCB0aGVuIHRoZSBiaXNlY3Rpb24gcHJvY2VzcworaXMgc3RvcHBlZCB3aXRoIGEgbWVzc2FnZSBsaWtlOgorCistLS0tLS0tLS0tLS0tCitUaGUgbWVyZ2UgYmFzZSBCQkJCQkIgaXMgYmFkLgorVGhpcyBtZWFucyB0aGUgYnVnIGhhcyBiZWVuIGZpeGVkIGJldHdlZW4gQkJCQkJCIGFuZCBbR0dHR0dHLC4uLl0uCistLS0tLS0tLS0tLS0tCisKK3doZXJlIEJCQkJCQiBpcyB0aGUgc2hhMSBoYXNoIG9mIHRoZSBiYWQgbWVyZ2UgYmFzZSBhbmQgW0dHR0dHRywuLi5dCitpcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHRoZSBzaGExIG9mIHRoZSBnb29kIGNvbW1pdHMuCisKK0lmIHNvbWUgb2YgdGhlIG1lcmdlIGJhc2VzIGFyZSBza2lwcGVkLCB0aGVuIHRoZSBiaXNlY3Rpb24gcHJvY2VzcworY29udGludWVzLCBidXQgdGhlIGZvbGxvd2luZyBtZXNzYWdlIGlzIHByaW50ZWQgZm9yIGVhY2ggc2tpcHBlZCBtZXJnZQorYmFzZToKKworLS0tLS0tLS0tLS0tLQorV2FybmluZzogdGhlIG1lcmdlIGJhc2UgYmV0d2VlbiBCQkJCQkIgYW5kIFtHR0dHR0csLi4uXSBtdXN0IGJlIHNraXBwZWQuCitTbyB3ZSBjYW5ub3QgYmUgc3VyZSB0aGUgZmlyc3QgYmFkIGNvbW1pdCBpcyBiZXR3ZWVuIE1NTU1NTSBhbmQgQkJCQkJCLgorV2UgY29udGludWUgYW55d2F5LgorLS0tLS0tLS0tLS0tLQorCit3aGVyZSBCQkJCQkIgaXMgdGhlIHNoYTEgaGFzaCBvZiB0aGUgYmFkIGNvbW1pdCwgTU1NTU1NIGlzIHRoZSBzaGExCitoYXNoIG9mIHRoZSBtZXJnZSBiYXNlIHRoYXQgaXMgc2tpcHBlZCBhbmQgW0dHR0dHRywuLi5dICBpcyBhIGNvbW1hCitzZXBhcmF0ZWQgbGlzdCBvZiB0aGUgc2hhMSBvZiB0aGUgZ29vZCBjb21taXRzLgorCitTbyBpZiB0aGVyZSBpcyBubyBiYWQgbWVyZ2UgYmFzZSwgdGhlIGJpc2VjdGlvbiBwcm9jZXNzIGNvbnRpbnVlcyBhcwordXN1YWwgYWZ0ZXIgdGhpcyBzdGVwLgorCitCZXN0IGJpc2VjdGluZyBwcmFjdGljZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVc2luZyB0ZXN0IHN1aXRlcyBhbmQgZ2l0IGJpc2VjdCB0b2dldGhlcgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworSWYgeW91IGJvdGggaGF2ZSBhIHRlc3Qgc3VpdGUgYW5kIHVzZSBnaXQgYmlzZWN0LCB0aGVuIGl0IGJlY29tZXMgbGVzcworaW1wb3J0YW50IHRvIGNoZWNrIHRoYXQgYWxsIHRlc3RzIHBhc3MgYWZ0ZXIgZWFjaCBjb21taXQuIFRob3VnaCBvZgorY291cnNlIGl0IGlzIHByb2JhYmx5IGEgZ29vZCBpZGVhIHRvIGhhdmUgc29tZSBjaGVja3MgdG8gYXZvaWQKK2JyZWFraW5nIHRvbyBtYW55IHRoaW5ncyBiZWNhdXNlIGl0IGNvdWxkIG1ha2UgYmlzZWN0aW5nIG90aGVyIGJ1Z3MKK21vcmUgZGlmZmljdWx0LgorCitZb3UgY2FuIGZvY3VzIHlvdXIgZWZmb3J0cyB0byBjaGVjayBhdCBhIGZldyBwb2ludHMgKGZvciBleGFtcGxlIHJjCithbmQgYmV0YSByZWxlYXNlcykgdGhhdCBhbGwgdGhlIFQgdGVzdCBjYXNlcyBwYXNzIGZvciBhbGwgdGhlIE4KK2NvbmZpZ3VyYXRpb25zLiBBbmQgd2hlbiBzb21lIHRlc3RzIGRvbid0IHBhc3MgeW91IGNhbiB1c2UgImdpdAorYmlzZWN0IiAob3IgYmV0dGVyICJnaXQgYmlzZWN0IHJ1biIpLiBTbyB5b3Ugc2hvdWxkIHBlcmZvcm0gcm91Z2hseToKKworLS0tLS0tLS0tLS0tLQorYyAqIE4gKiBUICsgYiAqIE0gKiBsb2cyKE0pIHRlc3RzCistLS0tLS0tLS0tLS0tCisKK3doZXJlIGMgaXMgdGhlIG51bWJlciBvZiByb3VuZHMgb2YgdGVzdCAoc28gYSBzbWFsbCBjb25zdGFudCkgYW5kIGIgaXMKK3RoZSByYXRpbyBvZiBidWcgcGVyIGNvbW1pdCAoaG9wZWZ1bGx5IGEgc21hbGwgY29uc3RhbnQgdG9vKS4KKworU28gb2YgY291cnNlIGl0J3MgbXVjaCBiZXR0ZXIgYXMgaXQncyBPKE4gXCogVCkgdnMgTyhOIFwqIFQgXCogTSkgaWYKK3lvdSB3b3VsZCB0ZXN0IGV2ZXJ5dGhpbmcgYWZ0ZXIgZWFjaCBjb21taXQuCisKK1RoaXMgbWVhbnMgdGhhdCB0ZXN0IHN1aXRlcyBhcmUgZ29vZCB0byBwcmV2ZW50IHNvbWUgYnVncyBmcm9tIGJlaW5nCitjb21taXR0ZWQgYW5kIHRoZXkgYXJlIGFsc28gcXVpdGUgZ29vZCB0byB0ZWxsIHlvdSB0aGF0IHlvdSBoYXZlIHNvbWUKK2J1Z3MuIEJ1dCB0aGV5IGFyZSBub3Qgc28gZ29vZCB0byB0ZWxsIHlvdSB3aGVyZSBzb21lIGJ1Z3MgaGF2ZSBiZWVuCitpbnRyb2R1Y2VkLiBUbyB0ZWxsIHlvdSB0aGF0IGVmZmljaWVudGx5LCBnaXQgYmlzZWN0IGlzIG5lZWRlZC4KKworVGhlIG90aGVyIG5pY2UgdGhpbmcgd2l0aCB0ZXN0IHN1aXRlcywgaXMgdGhhdCB3aGVuIHlvdSBoYXZlIG9uZSwgeW91CithbHJlYWR5IGtub3cgaG93IHRvIHRlc3QgZm9yIGJhZCBiZWhhdmlvci4gU28geW91IGNhbiB1c2UgdGhpcwora25vd2xlZGdlIHRvIGNyZWF0ZSBhIG5ldyB0ZXN0IGNhc2UgZm9yICJnaXQgYmlzZWN0IiB3aGVuIGl0IGFwcGVhcnMKK3RoYXQgdGhlcmUgaXMgYSByZWdyZXNzaW9uLiBTbyBpdCB3aWxsIGJlIGVhc2llciB0byBiaXNlY3QgdGhlIGJ1ZyBhbmQKK2ZpeCBpdC4gQW5kIHRoZW4geW91IGNhbiBhZGQgdGhlIHRlc3QgY2FzZSB5b3UganVzdCBjcmVhdGVkIHRvIHlvdXIKK3Rlc3Qgc3VpdGUuCisKK1NvIGlmIHlvdSBrbm93IGhvdyB0byBjcmVhdGUgdGVzdCBjYXNlcyBhbmQgaG93IHRvIGJpc2VjdCwgeW91IHdpbGwgYmUKK3N1YmplY3QgdG8gYSB2aXJ0dW91cyBjaXJjbGU6CisKK21vcmUgdGVzdHMgPT4gZWFzaWVyIHRvIGNyZWF0ZSB0ZXN0cyA9PiBlYXNpZXIgdG8gYmlzZWN0ID0+IG1vcmUgdGVzdHMKKworU28gdGVzdCBzdWl0ZXMgYW5kICJnaXQgYmlzZWN0IiBhcmUgY29tcGxlbWVudGFyeSB0b29scyB0aGF0IGFyZSB2ZXJ5Citwb3dlcmZ1bCBhbmQgZWZmaWNpZW50IHdoZW4gdXNlZCB0b2dldGhlci4KKworQmlzZWN0aW5nIGJ1aWxkIGZhaWx1cmVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworWW91IGNhbiB2ZXJ5IGVhc2lseSBhdXRvbWF0aWNhbGx5IGJpc2VjdCBicm9rZW4gYnVpbGRzIHVzaW5nIHNvbWV0aGluZworbGlrZToKKworLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHN0YXJ0IEJBRCBHT09ECiskIGdpdCBiaXNlY3QgcnVuIG1ha2UKKy0tLS0tLS0tLS0tLS0KKworUGFzc2luZyBzaCAtYyAic29tZSBjb21tYW5kcyIgdG8gImdpdCBiaXNlY3QgcnVuIgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitGb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHJ1biBzaCAtYyAibWFrZSB8fCBleGl0IDEyNTsgLi9teV9hcHAgfCBncmVwICdnb29kIG91dHB1dCciCistLS0tLS0tLS0tLS0tCisKK09uIHRoZSBvdGhlciBoYW5kIGlmIHlvdSBkbyB0aGlzIG9mdGVuLCB0aGVuIGl0IGNhbiBiZSB3b3J0aCBoYXZpbmcKK3NjcmlwdHMgdG8gYXZvaWQgdG9vIG11Y2ggdHlwaW5nLgorCitGaW5kaW5nIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb25zCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0hlcmUgaXMgYW4gZXhhbXBsZSBzY3JpcHQgdGhhdCBjb21lcyBzbGlnaHRseSBtb2RpZmllZCBmcm9tIGEgcmVhbAord29ybGQgc2NyaXB0IHVzZWQgYnkgSnVuaW8gSGFtYW5vIDw8ND4+LgorCitUaGlzIHNjcmlwdCBjYW4gYmUgcGFzc2VkIHRvICJnaXQgYmlzZWN0IHJ1biIgdG8gZmluZCB0aGUgY29tbWl0IHRoYXQKK2ludHJvZHVjZWQgYSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uOgorCistLS0tLS0tLS0tLS0tCisjIS9iaW4vc2gKKworIyBCdWlsZCBlcnJvcnMgYXJlIG5vdCB3aGF0IEkgYW0gaW50ZXJlc3RlZCBpbi4KK21ha2UgbXlfYXBwIHx8IGV4aXQgMjU1CisKKyMgV2UgYXJlIGNoZWNraW5nIGlmIGl0IHN0b3BzIGluIGEgcmVhc29uYWJsZSBhbW91bnQgb2YgdGltZSwgc28KKyMgbGV0IGl0IHJ1biBpbiB0aGUgYmFja2dyb3VuZC4uLgorCisuL215X2FwcCA+bG9nIDI+JjEgJgorCisjIC4uLiBhbmQgZ3JhYiBpdHMgcHJvY2VzcyBJRC4KK3BpZD0kIQorCisjIC4uLiBhbmQgdGhlbiB3YWl0IGZvciBzdWZmaWNpZW50bHkgbG9uZy4KK3NsZWVwICROT1JNQUxfVElNRQorCisjIC4uLiBhbmQgdGhlbiBzZWUgaWYgdGhlIHByb2Nlc3MgaXMgc3RpbGwgdGhlcmUuCitpZiBraWxsIC0wICRwaWQKK3RoZW4KKwkjIEl0IGlzIHN0aWxsIHJ1bm5pbmcgLS0gdGhhdCBpcyBiYWQuCisJa2lsbCAkcGlkOyBzbGVlcCAxOyBraWxsICRwaWQ7CisJZXhpdCAxCitlbHNlCisJIyBJdCBoYXMgYWxyZWFkeSBmaW5pc2hlZCAodGhlICRwaWQgcHJvY2VzcyB3YXMgbm8gbW9yZSksCisJIyBhbmQgd2UgYXJlIGhhcHB5LgorCWV4aXQgMAorZmkKKy0tLS0tLS0tLS0tLS0KKworRm9sbG93aW5nIGdlbmVyYWwgYmVzdCBwcmFjdGljZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0l0IGlzIG9idmlvdXNseSBhIGdvb2QgaWRlYSBub3QgdG8gaGF2ZSBjb21taXRzIHdpdGggY2hhbmdlcyB0aGF0Citrbm93aW5nbHkgYnJlYWsgdGhpbmdzLCBldmVuIGlmIHNvbWUgb3RoZXIgY29tbWl0cyBsYXRlciBmaXggdGhlCiticmVha2FnZS4KKworSXQgaXMgYWxzbyBhIGdvb2QgaWRlYSB3aGVuIHVzaW5nIGFueSBWQ1MgdG8gaGF2ZSBvbmx5IG9uZSBzbWFsbAorbG9naWNhbCBjaGFuZ2UgaW4gZWFjaCBjb21taXQuCisKK1RoZSBzbWFsbGVyIHRoZSBjaGFuZ2VzIGluIHlvdXIgY29tbWl0LCB0aGUgbW9zdCBlZmZlY3RpdmUgImdpdAorYmlzZWN0IiB3aWxsIGJlLiBBbmQgeW91IHdpbGwgcHJvYmFibHkgbmVlZCAiZ2l0IGJpc2VjdCIgbGVzcyBpbiB0aGUKK2ZpcnN0IHBsYWNlLCBhcyBzbWFsbCBjaGFuZ2VzIGFyZSBlYXNpZXIgdG8gcmV2aWV3IGV2ZW4gaWYgdGhleSBhcmUKK29ubHkgcmV2aWV3ZWQgYnkgdGhlIGNvbW1pdGVyLgorCitBbm90aGVyIGdvb2QgaWRlYSBpcyB0byBoYXZlIGdvb2QgY29tbWl0IG1lc3NhZ2VzLiBUaGV5IGNhbiBiZSB2ZXJ5CitoZWxwZnVsIHRvIHVuZGVyc3RhbmQgd2h5IHNvbWUgY2hhbmdlcyB3ZXJlIG1hZGUuCisKK1RoZXNlIGdlbmVyYWwgYmVzdCBwcmFjdGljZXMgYXJlIHZlcnkgaGVscGZ1bCBpZiB5b3UgYmlzZWN0IG9mdGVuLgorCitBdm9pZGluZyBidWcgcHJvbmUgbWVyZ2VzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0ZpcnN0IG1lcmdlcyBieSB0aGVtc2VsdmVzIGNhbiBpbnRyb2R1Y2Ugc29tZSByZWdyZXNzaW9ucyBldmVuIHdoZW4KK3RoZSBtZXJnZSBuZWVkcyBubyBzb3VyY2UgY29kZSBjb25mbGljdCByZXNvbHV0aW9uLiBUaGlzIGlzIGJlY2F1c2UgYQorc2VtYW50aWMgY2hhbmdlIGNhbiBoYXBwZW4gaW4gb25lIGJyYW5jaCB3aGlsZSB0aGUgb3RoZXIgYnJhbmNoIGlzIG5vdAorYXdhcmUgb2YgaXQuCisKK0ZvciBleGFtcGxlIG9uZSBicmFuY2ggY2FuIGNoYW5nZSB0aGUgc2VtYW50aWMgb2YgYSBmdW5jdGlvbiB3aGlsZSB0aGUKK290aGVyIGJyYW5jaCBhZGQgbW9yZSBjYWxscyB0byB0aGUgc2FtZSBmdW5jdGlvbi4KKworVGhpcyBpcyBtYWRlIG11Y2ggd29yc2UgaWYgbWFueSBmaWxlcyBoYXZlIHRvIGJlIGZpeGVkIHRvIHJlc29sdmUKK2NvbmZsaWN0cy4gVGhhdCdzIHdoeSBzdWNoIG1lcmdlcyBhcmUgY2FsbGVkICJldmlsIG1lcmdlcyIuIFRoZXkgY2FuCittYWtlIHJlZ3Jlc3Npb25zIHZlcnkgZGlmZmljdWx0IHRvIHRyYWNrIGRvd24uIEl0IGNhbiBldmVuIGJlCittaXNsZWFkaW5nIHRvIGtub3cgdGhlIGZpcnN0IGJhZCBjb21taXQgaWYgaXQgaGFwcGVucyB0byBiZSBzdWNoIGEKK21lcmdlLCBiZWNhdXNlIHBlb3BsZSBtaWdodCB0aGluayB0aGF0IHRoZSBidWcgY29tZXMgZnJvbSBiYWQgY29uZmxpY3QKK3Jlc29sdXRpb24gd2hlbiBpdCBjb21lcyBmcm9tIGEgc2VtYW50aWMgY2hhbmdlIGluIG9uZSBicmFuY2guCisKK0FueXdheSAiZ2l0IHJlYmFzZSIgY2FuIGJlIHVzZWQgdG8gbGluZWFyaXplIGhpc3RvcnkuIFRoaXMgY2FuIGJlIHVzZWQKK2VpdGhlciB0byBhdm9pZCBtZXJnaW5nIGluIHRoZSBmaXJzdCBwbGFjZS4gT3IgaXQgY2FuIGJlIHVzZWQgdG8KK2Jpc2VjdCBvbiBhIGxpbmVhciBoaXN0b3J5IGluc3RlYWQgb2YgdGhlIG5vbiBsaW5lYXIgb25lLCBhcyB0aGlzCitzaG91bGQgZ2l2ZSBtb3JlIGluZm9ybWF0aW9uIGluIGNhc2Ugb2YgYSBzZW1hbnRpYyBjaGFuZ2UgaW4gb25lCiticmFuY2guCisKK01lcmdlcyBjYW4gYmUgYWxzbyBtYWRlIHNpbXBsZXIgYnkgdXNpbmcgc21hbGxlciBicmFuY2hlcyBvciBieSB1c2luZworbWFueSB0b3BpYyBicmFuY2hlcyBpbnN0ZWFkIG9mIG9ubHkgbG9uZyB2ZXJzaW9uIHJlbGF0ZWQgYnJhbmNoZXMuCisKK0FuZCB0ZXN0aW5nIGNhbiBiZSBkb25lIG1vcmUgb2Z0ZW4gaW4gc3BlY2lhbCBpbnRlZ3JhdGlvbiBicmFuY2hlcworbGlrZSBsaW51eC1uZXh0IGZvciB0aGUgbGludXgga2VybmVsLgorCitBZGFwdGluZyB5b3VyIHdvcmstZmxvdworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQSBzcGVjaWFsIHdvcmstZmxvdyB0byBwcm9jZXNzIHJlZ3Jlc3Npb25zIGNhbiBnaXZlIGdyZWF0IHJlc3VsdHMuCisKK0hlcmUgaXMgYW4gZXhhbXBsZSBvZiBhIHdvcmstZmxvdyB1c2VkIGJ5IEFuZHJlYXMgRXJpY3Nzb246CisKKyogd3JpdGUsIGluIHRoZSB0ZXN0IHN1aXRlLCBhIHRlc3Qgc2NyaXB0IHRoYXQgZXhwb3NlcyB0aGUgcmVncmVzc2lvbgorKiB1c2UgImdpdCBiaXNlY3QgcnVuIiB0byBmaW5kIHRoZSBjb21taXQgdGhhdCBpbnRyb2R1Y2VkIGl0CisqIGZpeCB0aGUgYnVnIHRoYXQgaXMgb2Z0ZW4gbWFkZSBvYnZpb3VzIGJ5IHRoZSBwcmV2aW91cyBzdGVwCisqIGNvbW1pdCBib3RoIHRoZSBmaXggYW5kIHRoZSB0ZXN0IHNjcmlwdCAoYW5kIGlmIG5lZWRlZCBtb3JlIHRlc3RzKQorCitBbmQgaGVyZSBpcyB3aGF0IEFuZHJlYXMgc2FpZCBhYm91dCB0aGlzIHdvcmstZmxvdyA8PDU+PjoKKworX19fX19fX19fX19fXworVG8gZ2l2ZSBzb21lIGhhcmQgZmlndXJlcywgd2UgdXNlZCB0byBoYXZlIGFuIGF2ZXJhZ2UgcmVwb3J0LXRvLWZpeAorY3ljbGUgb2YgMTQyLjYgaG91cnMgKGFjY29yZGluZyB0byBvdXIgc29tZXdoYXQgd2VpcmQgYnVnLXRyYWNrZXIKK3doaWNoIGp1c3QgbWVhc3VyZXMgd2FsbC1jbG9jayB0aW1lKS4gU2luY2Ugd2UgbW92ZWQgdG8gZ2l0LCB3ZSd2ZQorbG93ZXJlZCB0aGF0IHRvIDE2LjIgaG91cnMuIFByaW1hcmlseSBiZWNhdXNlIHdlIGNhbiBzdGF5IG9uIHRvcCBvZgordGhlIGJ1ZyBmaXhpbmcgbm93LCBhbmQgYmVjYXVzZSBldmVyeW9uZSdzIGpvY2tleWluZyB0byBnZXQgdG8gZml4CitidWdzICh3ZSdyZSBxdWl0ZSBwcm91ZCBvZiBob3cgbGF6eSB3ZSBhcmUgdG8gbGV0IGdpdCBmaW5kIHRoZSBidWdzCitmb3IgdXMpLiBFYWNoIG5ldyByZWxlYXNlIHJlc3VsdHMgaW4gfjQwJSBmZXdlciBidWdzIChhbG1vc3QgY2VydGFpbmx5CitkdWUgdG8gaG93IHdlIG5vdyBmZWVsIGFib3V0IHdyaXRpbmcgdGVzdHMpLgorX19fX19fX19fX19fXworCitDbGVhcmx5IHRoaXMgd29yay1mbG93IHVzZXMgdGhlIHZpcnR1b3VzIGNpcmNsZSBiZXR3ZWVuIHRlc3Qgc3VpdGVzCithbmQgImdpdCBiaXNlY3QiLiBJbiBmYWN0IGl0IG1ha2VzIGl0IHRoZSBzdGFuZGFyZCBwcm9jZWR1cmUgdG8gZGVhbAord2l0aCByZWdyZXNzaW9uLgorCitJbiBvdGhlciBtZXNzYWdlcyBBbmRyZWFzIHNheXMgdGhhdCB0aGV5IGFsc28gdXNlIHRoZSAiYmVzdCBwcmFjdGljZXMiCitkZXNjcmliZWQgYWJvdmU6IHNtYWxsIGxvZ2ljYWwgY29tbWl0cywgdG9waWMgYnJhbmNoZXMsIG5vIGV2aWwKK21lcmdlLC4uLiBUaGVzZSBwcmFjdGljZXMgYWxsIGltcHJvdmUgdGhlIGJpc2VjdGFiaWxpdHkgb2YgdGhlIGNvbW1pdAorZ3JhcGgsIGJ5IG1ha2luZyBpdCBlYXNpZXIgYW5kIG1vcmUgdXNlZnVsIHRvIGJpc2VjdC4KKworU28gYSBnb29kIHdvcmstZmxvdyBzaG91bGQgYmUgZGVzaWduZWQgYXJvdW5kIHRoZSBhYm92ZSBwb2ludHMuIFRoYXQKK2lzIG1ha2luZyBiaXNlY3RpbmcgZWFzaWVyLCBtb3JlIHVzZWZ1bCBhbmQgc3RhbmRhcmQuCisKK0ludm9sdmluZyBRQSBwZW9wbGUgYW5kIGlmIHBvc3NpYmxlIGVuZCB1c2Vycworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK09uZSBuaWNlIGFib3V0ICJnaXQgYmlzZWN0IiBpcyB0aGF0IGl0IGlzIG5vdCBvbmx5IGEgZGV2ZWxvcGVyCit0b29sLiBJdCBjYW4gZWZmZWN0aXZlbHkgYmUgdXNlZCBieSBRQSBwZW9wbGUgb3IgZXZlbiBlbmQgdXNlcnMgKGlmCit0aGV5IGhhdmUgYWNjZXNzIHRvIHRoZSBzb3VyY2UgY29kZSBvciBpZiB0aGV5IGNhbiBnZXQgYWNjZXNzIHRvIGFsbAordGhlIGJ1aWxkcykuCisKK1RoZXJlIHdhcyBhIGRpc2N1c3Npb24gYXQgb25lIHBvaW50IG9uIHRoZSBsaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0CitvZiB3aGV0aGVyIGl0IHdhcyBvayB0byBhbHdheXMgYXNrIGVuZCB1c2VyIHRvIGJpc2VjdCwgYW5kIHZlcnkgZ29vZAorcG9pbnRzIHdlcmUgbWFkZSB0byBzdXBwb3J0IHRoZSBwb2ludCBvZiB2aWV3IHRoYXQgaXQgaXMgb2suCisKK0ZvciBleGFtcGxlIERhdmlkIE1pbGxlciB3cm90ZSA8PDY+PjoKKworX19fX19fX19fX19fXworV2hhdCBwZW9wbGUgZG9uJ3QgZ2V0IGlzIHRoYXQgdGhpcyBpcyBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgImVuZCBub2RlCitwcmluY2lwbGUiIGFwcGxpZXMuIFdoZW4geW91IGhhdmUgbGltaXRlZCByZXNvdXJjZXMgKGhlcmU6IGRldmVsb3BlcnMpCit5b3UgZG9uJ3QgcHVzaCB0aGUgYnVsayBvZiB0aGUgYnVyZGVuIHVwb24gdGhlbS4gSW5zdGVhZCB5b3UgcHVzaAordGhpbmdzIG91dCB0byB0aGUgcmVzb3VyY2UgeW91IGhhdmUgYSBsb3Qgb2YsIHRoZSBlbmQgbm9kZXMgKGhlcmU6Cit1c2VycyksIHNvIHRoYXQgdGhlIHNpdHVhdGlvbiBhY3R1YWxseSBzY2FsZXMuCitfX19fX19fX19fX19fCisKK1RoaXMgbWVhbnMgdGhhdCBpdCBpcyBvZnRlbiAiY2hlYXBlciIgaWYgUUEgcGVvcGxlIG9yIGVuZCB1c2VycyBjYW4gZG8KK2l0LgorCitXaGF0IGlzIGludGVyZXN0aW5nIHRvbyBpcyB0aGF0IGVuZCB1c2VycyB0aGF0IGFyZSByZXBvcnRpbmcgYnVncyAob3IKK1FBIHBlb3BsZSB0aGF0IHJlcHJvZHVjZWQgYSBidWcpIGhhdmUgYWNjZXNzIHRvIHRoZSBlbnZpcm9ubWVudCB3aGVyZQordGhlIGJ1ZyBoYXBwZW5zLiBTbyB0aGV5IGNhbiBvZnRlbiBtb3JlIGVhc2lseSByZXByb2R1Y2UgYQorcmVncmVzc2lvbi4gQW5kIGlmIHRoZXkgY2FuIGJpc2VjdCwgdGhlbiBtb3JlIGluZm9ybWF0aW9uIHdpbGwgYmUKK2V4dHJhY3RlZCBmcm9tIHRoZSBlbnZpcm9ubWVudCB3aGVyZSB0aGUgYnVnIGhhcHBlbnMsIHdoaWNoIG1lYW5zIHRoYXQKK2l0IHdpbGwgYmUgZWFzaWVyIHRvIHVuZGVyc3RhbmQgYW5kIHRoZW4gZml4IHRoZSBidWcuCisKK0ZvciBvcGVuIHNvdXJjZSBwcm9qZWN0cyBpdCBjYW4gYmUgYSBnb29kIHdheSB0byBnZXQgbW9yZSB1c2VmdWwKK2NvbnRyaWJ1dGlvbnMgZnJvbSBlbmQgdXNlcnMsIGFuZCB0byBpbnRyb2R1Y2UgdGhlbSB0byBRQSBhbmQKK2RldmVsb3BtZW50IGFjdGl2aXRpZXMuCisKK1VzaW5nIGNvbXBsZXggc2NyaXB0cworfn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0luIHNvbWUgY2FzZXMgbGlrZSBmb3Iga2VybmVsIGRldmVsb3BtZW50IGl0IGNhbiBiZSB3b3J0aCBkZXZlbG9waW5nCitjb21wbGV4IHNjcmlwdHMgdG8gYmUgYWJsZSB0byBmdWxseSBhdXRvbWF0ZSBiaXNlY3RpbmcuCisKK0hlcmUgaXMgd2hhdCBJbmdvIE1vbG5hciBzYXlzIGFib3V0IHRoYXQgPDw3Pj46CisKK19fX19fX19fX19fX18KK2kgaGF2ZSBhIGZ1bGx5IGF1dG9tYXRlZCBib290dXAtaGFuZyBiaXNlY3Rpb24gc2NyaXB0LiBJdCBpcyBiYXNlZCBvbgorImdpdC1iaXNlY3QgcnVuIi4gSSBydW4gdGhlIHNjcmlwdCwgaXQgYnVpbGRzIGFuZCBib290cyBrZXJuZWxzIGZ1bGx5CithdXRvbWF0aWNhbGx5LCBhbmQgd2hlbiB0aGUgYm9vdHVwIGZhaWxzICh0aGUgc2NyaXB0IG5vdGljZXMgdGhhdCB2aWEKK3RoZSBzZXJpYWwgbG9nLCB3aGljaCBpdCBjb250aW51b3VzbHkgd2F0Y2hlcyAtIG9yIHZpYSBhIHRpbWVvdXQsIGlmCit0aGUgc3lzdGVtIGRvZXMgbm90IGNvbWUgdXAgd2l0aGluIDEwIG1pbnV0ZXMgaXQncyBhICJiYWQiIGtlcm5lbCksCit0aGUgc2NyaXB0IHJhaXNlcyBteSBhdHRlbnRpb24gdmlhIGEgYmVlcCBhbmQgaSBwb3dlciBjeWNsZSB0aGUgdGVzdAorYm94LiAoeWVhaCwgaSBzaG91bGQgbWFrZSB1c2Ugb2YgYSBtYW5hZ2VkIHBvd2VyIG91dGxldCB0byAxMDAlCithdXRvbWF0ZSBpdCkKK19fX19fX19fX19fX18KKworQ29tYmluaW5nIHRlc3Qgc3VpdGVzLCBnaXQgYmlzZWN0IGFuZCBvdGhlciBzeXN0ZW1zIHRvZ2V0aGVyCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworV2UgaGF2ZSBzZWVuIHRoYXQgdGVzdCBzdWl0ZXMgYW4gZ2l0IGJpc2VjdCBhcmUgdmVyeSBwb3dlcmZ1bCB3aGVuCit1c2VkIHRvZ2V0aGVyLiBJdCBjYW4gYmUgZXZlbiBtb3JlIHBvd2VyZnVsIGlmIHlvdSBjYW4gY29tYmluZSB0aGVtCit3aXRoIG90aGVyIHN5c3RlbXMuCisKK0ZvciBleGFtcGxlIHNvbWUgdGVzdCBzdWl0ZXMgY291bGQgYmUgcnVuIGF1dG9tYXRpY2FsbHkgYXQgbmlnaHQgd2l0aAorc29tZSB1bnVzdWFsIChvciBldmVuIHJhbmRvbSkgY29uZmlndXJhdGlvbnMuIEFuZCBpZiBhIHJlZ3Jlc3Npb24gaXMKK2ZvdW5kIGJ5IGEgdGVzdCBzdWl0ZSwgdGhlbiAiZ2l0IGJpc2VjdCIgY2FuIGJlIGF1dG9tYXRpY2FsbHkKK2xhdW5jaGVkLCBhbmQgaXRzIHJlc3VsdCBjYW4gYmUgZW1haWxlZCB0byB0aGUgYXV0aG9yIG9mIHRoZSBmaXJzdCBiYWQKK2NvbW1pdCBmb3VuZCBieSAiZ2l0IGJpc2VjdCIsIGFuZCBwZXJoYXBzIG90aGVyIHBlb3BsZSB0b28uIEFuZCBhIG5ldworZW50cnkgaW4gdGhlIGJ1ZyB0cmFja2luZyBzeXN0ZW0gY291bGQgYmUgYXV0b21hdGljYWxseSBjcmVhdGVkIHRvby4KKworCitUaGUgZnV0dXJlIG9mIGJpc2VjdGluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworImdpdCByZXBsYWNlIgorfn5+fn5+fn5+fn5+fgorCitXZSBzYXcgZWFybGllciB0aGF0ICJnaXQgYmlzZWN0IHNraXAiIGlzIG5vdyB1c2luZyBhIFBSTkcgdG8gdHJ5IHRvCithdm9pZCBhcmVhcyBpbiB0aGUgY29tbWl0IGdyYXBoIHdoZXJlIGNvbW1pdHMgYXJlIHVudGVzdGFibGUuIFRoZQorcHJvYmxlbSBpcyB0aGF0IHNvbWV0aW1lcyB0aGUgZmlyc3QgYmFkIGNvbW1pdCB3aWxsIGJlIGluIGFuCit1bnRlc3RhYmxlIGFyZWEuCisKK1RvIHNpbXBsaWZ5IHRoZSBkaXNjdXNzaW9uIHdlIHdpbGwgc3VwcG9zZSB0aGF0IHRoZSB1bnRlc3RhYmxlIGFyZWEgaXMKK2Egc2ltcGxlIHN0cmluZyBvZiBjb21taXRzIGFuZCB0aGF0IGl0IHdhcyBjcmVhdGVkIGJ5IGEgYnJlYWthZ2UKK2ludHJvZHVjZWQgYnkgb25lIGNvbW1pdCAobGV0J3MgY2FsbCBpdCBCQkMgZm9yIGJpc2VjdCBicmVha2luZworY29tbWl0KSBhbmQgbGF0ZXIgZml4ZWQgYnkgYW5vdGhlciBvbmUgKGxldCdzIGNhbGwgaXQgQkZDIGZvciBiaXNlY3QKK2ZpeGluZyBjb21taXQpLgorCitGb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLQorLi4uLVktQkJDLVgxLVgyLVgzLVg0LVg1LVg2LUJGQy1aLS4uLgorLS0tLS0tLS0tLS0tLQorCit3aGVyZSB3ZSBrbm93IHRoYXQgWSBpcyBnb29kIGFuZCBCRkMgaXMgYmFkLCBhbmQgd2hlcmUgQkJDIGFuZCBYMSB0bworWDYgYXJlIHVudGVzdGFibGUuCisKK0luIHRoaXMgY2FzZSBpZiB5b3UgYXJlIGJpc2VjdGluZyBtYW51YWxseSwgd2hhdCB5b3UgY2FuIGRvIGlzIGNyZWF0ZQorYSBzcGVjaWFsIGJyYW5jaCB0aGF0IHN0YXJ0cyBqdXN0IGJlZm9yZSB0aGUgQkJDLiBUaGUgZmlyc3QgY29tbWl0IGluCit0aGlzIGJyYW5jaCBzaG91bGQgYmUgdGhlIEJCQyB3aXRoIHRoZSBCRkMgc3F1YXNoZWQgaW50byBpdC4gQW5kIHRoZQorb3RoZXIgY29tbWl0cyBpbiB0aGUgYnJhbmNoIHNob3VsZCBiZSB0aGUgY29tbWl0cyBiZXR3ZWVuIEJCQyBhbmQgQkZDCityZWJhc2VkIG9uIHRoZSBmaXJzdCBjb21taXQgb2YgdGhlIGJyYW5jaCBhbmQgdGhlbiB0aGUgY29tbWl0IGFmdGVyCitCRkMgYWxzbyByZWJhc2VkIG9uLgorCitGb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLQorICAgICAgKEJCQytCRkMpLVgxJy1YMictWDMnLVg0Jy1YNSctWDYnLVonCisgICAgIC8KKy4uLi1ZLUJCQy1YMS1YMi1YMy1YNC1YNS1YNi1CRkMtWi0uLi4KKy0tLS0tLS0tLS0tLS0KKword2hlcmUgY29tbWl0cyBxdW90ZWQgd2l0aCAnIGhhdmUgYmVlbiByZWJhc2VkLgorCitZb3UgY2FuIGVhc2lseSBjcmVhdGUgc3VjaCBhIGJyYW5jaCB3aXRoIEdpdCB1c2luZyBpbnRlcmFjdGl2ZSByZWJhc2UuCisKK0ZvciBleGFtcGxlIHVzaW5nOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCByZWJhc2UgLWkgWSBaCistLS0tLS0tLS0tLS0tCisKK2FuZCB0aGVuIG1vdmluZyBCRkMgYWZ0ZXIgQkJDIGFuZCBzcXVhc2hpbmcgaXQuCisKK0FmdGVyIHRoYXQgeW91IGNhbiBzdGFydCBiaXNlY3RpbmcgYXMgdXN1YWwgaW4gdGhlIG5ldyBicmFuY2ggYW5kIHlvdQorc2hvdWxkIGV2ZW50dWFsbHkgZmluZCB0aGUgZmlyc3QgYmFkIGNvbW1pdC4KKworRm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBzdGFydCBaJyBZCistLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBhcmUgdXNpbmcgImdpdCBiaXNlY3QgcnVuIiwgeW91IGNhbiB1c2UgdGhlIHNhbWUgbWFudWFsIGZpeCB1cAorYXMgYWJvdmUsIGFuZCB0aGVuIHN0YXJ0IGFub3RoZXIgImdpdCBiaXNlY3QgcnVuIiBpbiB0aGUgc3BlY2lhbAorYnJhbmNoLiBPciBhcyB0aGUgImdpdCBiaXNlY3QiIG1hbiBwYWdlIHNheXMsIHRoZSBzY3JpcHQgcGFzc2VkIHRvCisiZ2l0IGJpc2VjdCBydW4iIGNhbiBhcHBseSBhIHBhdGNoIGJlZm9yZSBpdCBjb21waWxlcyBhbmQgdGVzdCB0aGUKK3NvZnR3YXJlIDw8OD4+LiBUaGUgcGF0Y2ggc2hvdWxkIHR1cm4gYSBjdXJyZW50IHVudGVzdGFibGUgY29tbWl0cworaW50byBhIHRlc3RhYmxlIG9uZS4gU28gdGhlIHRlc3Rpbmcgd2lsbCByZXN1bHQgaW4gImdvb2QiIG9yICJiYWQiIGFuZAorImdpdCBiaXNlY3QiIHdpbGwgYmUgYWJsZSB0byBmaW5kIHRoZSBmaXJzdCBiYWQgY29tbWl0LiBBbmQgdGhlIHNjcmlwdAorc2hvdWxkIG5vdCBmb3JnZXQgdG8gcmVtb3ZlIHRoZSBwYXRjaCBvbmNlIHRoZSB0ZXN0aW5nIGlzIGRvbmUgYmVmb3JlCitleGl0aW5nIGZyb20gdGhlIHNjcmlwdC4KKworKE5vdGUgdGhhdCBpbnN0ZWFkIG9mIGEgcGF0Y2ggeW91IGNhbiB1c2UgImdpdCBjaGVycnktcGljayBCRkMiIHRvCithcHBseSB0aGUgZml4LCBhbmQgaW4gdGhpcyBjYXNlIHlvdSBzaG91bGQgdXNlICJnaXQgcmVzZXQgLS1oYXJkCitIRUFEXiIgdG8gcmV2ZXJ0IHRoZSBjaGVycnktcGljayBhZnRlciB0ZXN0aW5nIGFuZCBiZWZvcmUgcmV0dXJuaW5nCitmcm9tIHRoZSBzY3JpcHQuKQorCitCdXQgdGhlIGFib3ZlIHdheXMgdG8gd29yayBhcm91bmQgdW50ZXN0YWJsZSBhcmVhcyBhcmUgYSBsaXR0bGUgYml0CitjbHVua3kuIFVzaW5nIHNwZWNpYWwgYnJhbmNoZXMgaXMgbmljZSBiZWNhdXNlIHRoZXNlIGJyYW5jaGVzIGNhbiBiZQorc2hhcmVkIGJ5IGRldmVsb3BlcnMgbGlrZSB1c3VhbCBicmFuY2hlcywgYnV0IHRoZSByaXNrIGlzIHRoYXQgcGVvcGxlCit3aWxsIGdldCBtYW55IHN1Y2ggYnJhbmNoZXMuIEFuZCBpdCBkaXNydXB0cyB0aGUgbm9ybWFsICJnaXQgYmlzZWN0Igord29yay1mbG93LiBTbywgaWYgeW91IHdhbnQgdG8gdXNlICJnaXQgYmlzZWN0IHJ1biIgY29tcGxldGVseQorYXV0b21hdGljYWxseSwgeW91IGhhdmUgdG8gYWRkIHNwZWNpYWwgY29kZSBpbiB5b3VyIHNjcmlwdCB0byByZXN0YXJ0CitiaXNlY3Rpb24gaW4gdGhlIHNwZWNpYWwgYnJhbmNoZXMuCisKK0FueXdheSBvbmUgY2FuIG5vdGljZSBpbiB0aGUgYWJvdmUgc3BlY2lhbCBicmFuY2ggZXhhbXBsZSB0aGF0IHRoZSBaJworYW5kIFogY29tbWl0cyBzaG91bGQgcG9pbnQgdG8gdGhlIHNhbWUgc291cmNlIGNvZGUgc3RhdGUgKHRoZSBzYW1lCisidHJlZSIgaW4gZ2l0IHBhcmxhbmNlKS4gVGhhdCdzIGJlY2F1c2UgWicgcmVzdWx0IGZyb20gYXBwbHlpbmcgdGhlCitzYW1lIGNoYW5nZXMgYXMgWiBqdXN0IGluIGEgc2xpZ2h0bHkgZGlmZmVyZW50IG9yZGVyLgorCitTbyBpZiB3ZSBjb3VsZCBqdXN0ICJyZXBsYWNlIiBaIGJ5IFonIHdoZW4gd2UgYmlzZWN0LCB0aGVuIHdlIHdvdWxkCitub3QgbmVlZCB0byBhZGQgYW55dGhpbmcgdG8gYSBzY3JpcHQuIEl0IHdvdWxkIGp1c3Qgd29yayBmb3IgYW55b25lIGluCit0aGUgcHJvamVjdCBzaGFyaW5nIHRoZSBzcGVjaWFsIGJyYW5jaGVzIGFuZCB0aGUgcmVwbGFjZW1lbnRzLgorCitXaXRoIHRoZSBleGFtcGxlIGFib3ZlIHRoYXQgd291bGQgZ2l2ZToKKworLS0tLS0tLS0tLS0tLQorICAgICAgKEJCQytCRkMpLVgxJy1YMictWDMnLVg0Jy1YNSctWDYnLVonLS4uLgorICAgICAvCisuLi4tWS1CQkMtWDEtWDItWDMtWDQtWDUtWDYtQkZDLVoKKy0tLS0tLS0tLS0tLS0KKworVGhhdCdzIHdoeSB0aGUgImdpdCByZXBsYWNlIiBjb21tYW5kIHdhcyBjcmVhdGVkLiBUZWNobmljYWxseSBpdAorc3RvcmVzIHJlcGxhY2VtZW50cyAicmVmcyIgaW4gdGhlICJyZWZzL3JlcGxhY2UvIiBoaWVyYXJjaHkuIFRoZXNlCisicmVmcyIgYXJlIGxpa2UgYnJhbmNoZXMgKHRoYXQgYXJlIHN0b3JlZCBpbiAicmVmcy9oZWFkcy8iKSBvciB0YWdzCisodGhhdCBhcmUgc3RvcmVkIGluICJyZWZzL3RhZ3MiKSwgYW5kIHRoYXQgbWVhbnMgdGhhdCB0aGV5IGNhbgorYXV0b21hdGljYWxseSBiZSBzaGFyZWQgbGlrZSBicmFuY2hlcyBvciB0YWdzIGFtb25nIGRldmVsb3BlcnMuCisKKyJnaXQgcmVwbGFjZSIgaXMgYSB2ZXJ5IHBvd2VyZnVsIG1lY2hhbmlzbS4gSXQgY2FuIGJlIHVzZWQgdG8gZml4Citjb21taXRzIGluIGFscmVhZHkgcmVsZWFzZWQgaGlzdG9yeSwgZm9yIGV4YW1wbGUgdG8gY2hhbmdlIHRoZSBjb21taXQKK21lc3NhZ2Ugb3IgdGhlIGF1dGhvci4gQW5kIGl0IGNhbiBhbHNvIGJlIHVzZWQgaW5zdGVhZCBvZiBnaXQgImdyYWZ0cyIKK3RvIGxpbmsgYSByZXBvc2l0b3J5IHdpdGggYW5vdGhlciBvbGQgcmVwb3NpdG9yeS4KKworSW4gZmFjdCBpdCdzIHRoaXMgbGFzdCBmZWF0dXJlIHRoYXQgInNvbGQiIGl0IHRvIHRoZSBnaXQgY29tbXVuaXR5LCBzbworaXQgaXMgbm93IGluIHRoZSAibWFzdGVyIiBicmFuY2ggb2YgZ2l0J3MgZ2l0IHJlcG9zaXRvcnkgYW5kIGl0IHNob3VsZAorYmUgcmVsZWFzZWQgaW4gZ2l0IDEuNi41IGluIE9jdG9iZXIgb3IgTm92ZW1iZXIgMjAwOS4KKworT25lIHByb2JsZW0gd2l0aCAiZ2l0IHJlcGxhY2UiIGlzIHRoYXQgY3VycmVudGx5IGl0IHN0b3JlcyBhbGwgdGhlCityZXBsYWNlbWVudHMgcmVmcyBpbiAicmVmcy9yZXBsYWNlLyIsIGJ1dCBpdCB3b3VsZCBiZSBwZXJoYXBzIGJldHRlcgoraWYgdGhlIHJlcGxhY2VtZW50IHJlZnMgdGhhdCBhcmUgdXNlZnVsIG9ubHkgZm9yIGJpc2VjdGluZyB3b3VsZCBiZSBpbgorInJlZnMvcmVwbGFjZS9iaXNlY3QvIi4gVGhpcyB3YXkgdGhlIHJlcGxhY2VtZW50IHJlZnMgY291bGQgYmUgdXNlZAorb25seSBmb3IgYmlzZWN0aW5nLCB3aGlsZSBvdGhlciByZWZzIGRpcmVjdGx5IGluICJyZWZzL3JlcGxhY2UvIiB3b3VsZAorYmUgdXNlZCBuZWFybHkgYWxsIHRoZSB0aW1lLgorCitCaXNlY3Rpbmcgc3BvcmFkaWMgYnVncworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQW5vdGhlciBwb3NzaWJsZSBpbXByb3ZlbWVudCB0byAiZ2l0IGJpc2VjdCIgd291bGQgYmUgdG8gb3B0aW9uYWxseQorYWRkIHNvbWUgcmVkdW5kYW5jeSB0byB0aGUgdGVzdHMgcGVyZm9ybWVkIHNvIHRoYXQgaXQgd291bGQgYmUgbW9yZQorcmVsaWFibGUgd2hlbiB0cmFja2luZyBzcG9yYWRpYyBidWdzLgorCitUaGlzIGhhcyBiZWVuIHJlcXVlc3RlZCBieSBzb21lIGtlcm5lbCBkZXZlbG9wZXJzIGJlY2F1c2Ugc29tZSBidWdzCitjYWxsZWQgc3BvcmFkaWMgYnVncyBkbyBub3QgYXBwZWFyIGluIGFsbCB0aGUga2VybmVsIGJ1aWxkcyBiZWNhdXNlCit0aGV5IGFyZSB2ZXJ5IGRlcGVuZGVudCBvbiB0aGUgY29tcGlsZXIgb3V0cHV0LgorCitUaGUgaWRlYSBpcyB0aGF0IGV2ZXJ5IDMgdGVzdCBmb3IgZXhhbXBsZSwgImdpdCBiaXNlY3QiIGNvdWxkIGFzayB0aGUKK3VzZXIgdG8gdGVzdCBhIGNvbW1pdCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZm91bmQgdG8gYmUgImdvb2QiIG9yCisiYmFkIiAoYmVjYXVzZSBvbmUgb2YgaXRzIGRlc2NlbmRhbnRzIG9yIG9uZSBvZiBpdHMgYW5jZXN0b3JzIGhhcyBiZWVuCitmb3VuZCB0byBiZSAiZ29vZCIgb3IgImJhZCIgcmVzcGVjdGl2ZWx5KS4gSWYgaXQgaGFwcGVucyB0aGF0IGEgY29tbWl0CitoYXMgYmVlbiBwcmV2aW91c2x5IGluY29ycmVjdGx5IGNsYXNzaWZpZWQgdGhlbiB0aGUgYmlzZWN0aW9uIGNhbiBiZQorYWJvcnRlZCBlYXJseSwgaG9wZWZ1bGx5IGJlZm9yZSB0b28gbWFueSBtaXN0YWtlcyBoYXZlIGJlZW4gbWFkZS4gVGhlbgordGhlIHVzZXIgd2lsbCBoYXZlIHRvIGxvb2sgYXQgd2hhdCBoYXBwZW5lZCBhbmQgdGhlbiByZXN0YXJ0IHRoZQorYmlzZWN0aW9uIHVzaW5nIGEgZml4ZWQgYmlzZWN0IGxvZy4KKworVGhlcmUgaXMgYWxyZWFkeSBhIHByb2plY3QgY2FsbGVkIEJCQ2hvcCBjcmVhdGVkIGJ5IEVhbGR3dWxmIFd1ZmZpbmdhCitvbiBHaXRodWIgdGhhdCBkb2VzIHNvbWV0aGluZyBsaWtlIHRoYXQgdXNpbmcgQmF5ZXNpYW4gU2VhcmNoIFRoZW9yeQorPDw5Pj46CisKK19fX19fX19fX19fX18KK0JCQ2hvcCBpcyBsaWtlICdnaXQgYmlzZWN0JyAob3IgZXF1aXZhbGVudCksIGJ1dCB3b3JrcyB3aGVuIHlvdXIgYnVnCitpcyBpbnRlcm1pdHRlbnQuIFRoYXQgaXMsIGl0IHdvcmtzIGluIHRoZSBwcmVzZW5jZSBvZiBmYWxzZSBuZWdhdGl2ZXMKKyh3aGVuIGEgdmVyc2lvbiBoYXBwZW5zIHRvIHdvcmsgdGhpcyB0aW1lIGV2ZW4gdGhvdWdoIGl0IGNvbnRhaW5zIHRoZQorYnVnKS4gSXQgYXNzdW1lcyB0aGF0IHRoZXJlIGFyZSBubyBmYWxzZSBwb3NpdGl2ZXMgKGluIHByaW5jaXBsZSwgdGhlCitzYW1lIGFwcHJvYWNoIHdvdWxkIHdvcmssIGJ1dCBhZGRpbmcgaXQgbWF5IGJlIG5vbi10cml2aWFsKS4KK19fX19fX19fX19fX18KKworQnV0IEJCQ2hvcCBpcyBpbmRlcGVuZGVudCBvZiBhbnkgVkNTIGFuZCBpdCB3b3VsZCBiZSBlYXNpZXIgZm9yIEdpdAordXNlcnMgdG8gaGF2ZSBzb21ldGhpbmcgaW50ZWdyYXRlZCBpbiBHaXQuCisKK0NvbmNsdXNpb24KKy0tLS0tLS0tLS0KKworV2UgaGF2ZSBzZWVuIHRoYXQgcmVncmVzc2lvbnMgYXJlIGFuIGltcG9ydGFudCBwcm9ibGVtLCBhbmQgdGhhdCAiZ2l0CitiaXNlY3QiIGhhcyBuaWNlIGZlYXR1cmVzIHRoYXQgY29tcGxlbWVudCB2ZXJ5IHdlbGwgcHJhY3RpY2VzIGFuZAorb3RoZXIgdG9vbHMsIGVzcGVjaWFsbHkgdGVzdCBzdWl0ZXMsIHRoYXQgYXJlIGdlbmVyYWxseSB1c2VkIHRvIGZpZ2h0CityZWdyZXNzaW9ucy4gQnV0IGl0IG1pZ2h0IGJlIG5lZWRlZCB0byBjaGFuZ2Ugc29tZSB3b3JrLWZsb3dzIGFuZAorKGJhZCkgaGFiaXRzIHRvIGdldCB0aGUgbW9zdCBvdXQgb2YgaXQuCisKK1NvbWUgaW1wcm92ZW1lbnRzIHRvIHRoZSBhbGdvcml0aG1zIGluc2lkZSAiZ2l0IGJpc2VjdCIgYXJlIHBvc3NpYmxlCithbmQgc29tZSBuZXcgZmVhdHVyZXMgY291bGQgaGVscCBpbiBzb21lIGNhc2VzLCBidXQgb3ZlcmFsbCAiZ2l0CitiaXNlY3QiIHdvcmtzIGFscmVhZHkgdmVyeSB3ZWxsLCBpcyB1c2VkIGEgbG90LCBhbmQgaXMgYWxyZWFkeSB2ZXJ5Cit1c2VmdWwuIFRvIGJhY2sgdXAgdGhhdCBsYXN0IGNsYWltLCBsZXQncyBnaXZlIHRoZSBmaW5hbCB3b3JkIHRvIEluZ28KK01vbG5hciB3aGVuIGhlIHdhcyBhc2tlZCBieSB0aGUgYXV0aG9yIGhvdyBtdWNoIHRpbWUgZG9lcyBoZSB0aGluaworImdpdCBiaXNlY3QiIHNhdmVzIGhpbSB3aGVuIGhlIHVzZXMgaXQ6CisKK19fX19fX19fX19fX18KK2EgX2xvdF8uCisKK0Fib3V0IHRlbiB5ZWFycyBhZ28gZGlkIGkgZG8gbXkgZmlyc3QgJ2Jpc2VjdGlvbicgb2YgYSBMaW51eCBwYXRjaAorcXVldWUuIFRoYXQgd2FzIHByaW9yIHRoZSBHaXQgKGFuZCBldmVuIHByaW9yIHRoZSBCaXRLZWVwZXIpIGRheXMuIEkKK2xpdGVyYWxseSBkYXlzIHNwZW50IHNvcnRpbmcgb3V0IHBhdGNoZXMsIGNyZWF0aW5nIHdoYXQgaW4gZXNzZW5jZQord2VyZSBzdGFuZGFsb25lIGNvbW1pdHMgdGhhdCBpIGd1ZXNzZWQgdG8gYmUgcmVsYXRlZCB0byB0aGF0IGJ1Zy4KKworSXQgd2FzIGEgdG9vbCBvZiBhYnNvbHV0ZSBsYXN0IHJlc29ydC4gSSdkIHJhdGhlciBzcGVuZCBkYXlzIGxvb2tpbmcKK2F0IHByaW50ayBvdXRwdXQgdGhhbiBkbyBhIG1hbnVhbCAncGF0Y2ggYmlzZWN0aW9uJy4KKworV2l0aCBHaXQgYmlzZWN0IGl0J3MgYSBicmVlemU6IGluIHRoZSBiZXN0IGNhc2UgaSBjYW4gZ2V0IGEgfjE1IHN0ZXAKK2tlcm5lbCBiaXNlY3Rpb24gZG9uZSBpbiAyMC0zMCBtaW51dGVzLCBpbiBhbiBhdXRvbWF0ZWQgd2F5LiBFdmVuIHdpdGgKK21hbnVhbCBoZWxwIG9yIHdoZW4gYmlzZWN0aW5nIG11bHRpcGxlLCBvdmVybGFwcGluZyBidWdzLCBpdCdzIHJhcmVseQorbW9yZSB0aGFuIGFuIGhvdXIuCisKK0luIGZhY3QgaXQncyBpbnZhbHVhYmxlIGJlY2F1c2UgdGhlcmUgYXJlIGJ1Z3MgaSB3b3VsZCBuZXZlciBldmVuCitfdHJ5XyB0byBkZWJ1ZyBpZiBpdCB3YXNuJ3QgZm9yIGdpdCBiaXNlY3QuIEluIHRoZSBwYXN0IHRoZXJlIHdlcmUgYnVnCitwYXR0ZXJucyB0aGF0IHdlcmUgaW1tZWRpYXRlbHkgaG9wZWxlc3MgZm9yIG1lIHRvIGRlYnVnIC0gYXQgYmVzdCBpCitjb3VsZCBzZW5kIHRoZSBjcmFzaC9idWcgc2lnbmF0dXJlIHRvIGxrbWwgYW5kIGhvcGUgdGhhdCBzb21lb25lIGVsc2UKK2NhbiB0aGluayBvZiBzb21ldGhpbmcuCisKK0FuZCBldmVuIGlmIGEgYmlzZWN0aW9uIGZhaWxzIHRvZGF5IGl0IHRlbGxzIHVzIHNvbWV0aGluZyB2YWx1YWJsZQorYWJvdXQgdGhlIGJ1ZzogdGhhdCBpdCdzIG5vbi1kZXRlcm1pbmlzdGljIC0gdGltaW5nIG9yIGtlcm5lbCBpbWFnZQorbGF5b3V0IGRlcGVuZGVudC4KKworU28gZ2l0IGJpc2VjdCBpcyB1bmNvbmRpdGlvbmFsIGdvb2RuZXNzIC0gYW5kIGZlZWwgZnJlZSB0byBxdW90ZSB0aGF0Cis7LSkKK19fX19fX19fX19fX18KKworQWNrbm93bGVkZ2VtZW50cworLS0tLS0tLS0tLS0tLS0tLQorCitNYW55IHRoYW5rcyB0byBKdW5pbyBIYW1hbm8gZm9yIGhpcyBoZWxwIGluIHJldmlld2luZyB0aGlzIHBhcGVyLCBmb3IKK3Jldmlld2luZyB0aGUgcGF0Y2hlcyBJIHNlbnQgdG8gdGhlIGdpdCBtYWlsaW5nIGxpc3QsIGZvciBkaXNjdXNzaW5nCitzb21lIGlkZWFzIGFuZCBoZWxwaW5nIG1lIGltcHJvdmUgdGhlbSwgZm9yIGltcHJvdmluZyAiZ2l0IGJpc2VjdCIgYQorbG90IGFuZCBmb3IgaGlzIGF3ZXNvbWUgd29yayBpbiBtYWludGFpbmluZyBhbmQgZGV2ZWxvcGluZyBHaXQuCisKK01hbnkgdGhhbmtzIHRvIEluZ28gTW9sbmFyIGZvciBnaXZpbmcgbWUgdmVyeSB1c2VmdWwgaW5mb3JtYXRpb24gdGhhdAorYXBwZWFycyBpbiB0aGlzIHBhcGVyLCBmb3IgY29tbWVudGluZyBvbiB0aGlzIHBhcGVyLCBmb3IgaGlzCitzdWdnZXN0aW9ucyB0byBpbXByb3ZlICJnaXQgYmlzZWN0IiBhbmQgZm9yIGV2YW5nZWxpemluZyAiZ2l0IGJpc2VjdCIKK29uIHRoZSBsaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0cy4KKworTWFueSB0aGFua3MgdG8gTGludXMgVG9ydmFsZHMgZm9yIGludmVudGluZywgZGV2ZWxvcGluZyBhbmQKK2V2YW5nZWxpemluZyAiZ2l0IGJpc2VjdCIsIEdpdCBhbmQgTGludXguCisKK01hbnkgdGhhbmtzIHRvIHRoZSBtYW55IG90aGVyIGdyZWF0IHBlb3BsZSB3aG8gaGVscGVkIG9uZSB3YXkgb3IKK2Fub3RoZXIgd2hlbiBJIHdvcmtlZCBvbiBnaXQsIGVzcGVjaWFsbHkgdG8gQW5kcmVhcyBFcmljc3NvbiwgSm9oYW5uZXMKK1NjaGluZGVsaW4sIEguIFBldGVyIEFudmluLCBEYW5pZWwgQmFya2Fsb3csIEJpbGwgTGVhciwgSm9obiBIYXdsZXksCitTaGF3biBPLiBQaWVyY2UsIEplZmYgS2luZywgU2FtIFZpbGFpbiwgSm9uIFNleW1vdXIuCisKK01hbnkgdGhhbmtzIHRvIHRoZSBMaW51eC1Lb25ncmVzcyBwcm9ncmFtIGNvbW1pdHRlZSBmb3IgY2hvb3NpbmcgdGhlCithdXRob3IgdG8gZ2l2ZW4gYSB0YWxrIGFuZCBmb3IgcHVibGlzaGluZyB0aGlzIHBhcGVyLgorCitSZWZlcmVuY2VzCistLS0tLS0tLS0tCisKKy0gW1tbMV1dXSBodHRwOi8vd3d3Lm5pc3QuZ292L3B1YmxpY19hZmZhaXJzL3JlbGVhc2VzL24wMi0xMC5odG1bJ1NvZnR3YXJlIEVycm9ycyBDb3N0IFUuUy4gRWNvbm9teSAkNTkuNSBCaWxsaW9uIEFubnVhbGx5Jy4gTmlzdCBOZXdzIFJlbGVhc2UuXQorLSBbW1syXV1dIGh0dHA6Ly9qYXZhLnN1bi5jb20vZG9jcy9jb2RlY29udi9odG1sL0NvZGVDb252ZW50aW9ucy5kb2MuaHRtbCMxNjcxMlsnQ29kZSBDb252ZW50aW9ucyBmb3IgdGhlIEphdmEgUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UnLiBTdW4gTWljcm9zeXN0ZW1zLl0KKy0gW1tbM11dXSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NvZnR3YXJlX21haW50ZW5hbmNlWydTb2Z0d2FyZSBtYWludGVuYW5jZScuIFdpa2lwZWRpYS5dCistIFtbWzRdXV0gaHR0cDovL2FydGljbGUuZ21hbmUub3JnL2dtYW5lLmNvbXAudmVyc2lvbi1jb250cm9sLmdpdC80NTE5NS9bSnVuaW8gQyBIYW1hbm8uICdBdXRvbWF0ZWQgYmlzZWN0IHN1Y2Nlc3Mgc3RvcnknLiBHbWFuZS5dCistIFtbWzVdXV0gaHR0cDovL2x3bi5uZXQvQXJ0aWNsZXMvMzE3MTU0L1tDaHJpc3RpYW4gQ291ZGVyLiAnRnVsbHkgYXV0b21hdGVkIGJpc2VjdGluZyB3aXRoICJnaXQgYmlzZWN0IHJ1biInLiBMV04ubmV0Ll0KKy0gW1tbNl1dXSBodHRwOi8vbHduLm5ldC9BcnRpY2xlcy8yNzc4NzIvW0pvbmF0aGFuIENvcmJldC4gJ0Jpc2VjdGlvbiBkaXZpZGVzIHVzZXJzIGFuZCBkZXZlbG9wZXJzJy4gTFdOLm5ldC5dCistIFtbWzddXV0gaHR0cDovL2FydGljbGUuZ21hbmUub3JnL2dtYW5lLmxpbnV4LnNjc2kvMzY2NTIvW0luZ28gTW9sbmFyLiAnUmU6IEJVRyAyLjYuMjMtcmMzIGNhbid0IHNlZSBzZCBwYXJ0aXRpb25zIG9uIEFscGhhJy4gR21hbmUuXQorLSBbW1s4XV1dIGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc29mdHdhcmUvc2NtL2dpdC9kb2NzL2dpdC1iaXNlY3QuaHRtbFtKdW5pbyBDIEhhbWFubyBhbmQgdGhlIGdpdC1saXN0LiAnZ2l0LWJpc2VjdCgxKSBNYW51YWwgUGFnZScuIExpbnV4IEtlcm5lbCBBcmNoaXZlcy5dCistIFtbWzldXV0gaHR0cDovL2dpdGh1Yi5jb20vRWFsZHd1bGYvYmJjaG9wW0VhbGR3dWxmLiAnYmJjaG9wJy4gR2l0SHViLl0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1iaXNlY3QudHh0CmluZGV4IGZmYzAyYzcuLmMzOWQ5NTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LnR4dApAQCAtMjAsNyArMjAsNyBAQAogIGdpdCBiaXNlY3QgYmFkIFs8cmV2Pl0KICBnaXQgYmlzZWN0IGdvb2QgWzxyZXY+Li4uXQogIGdpdCBiaXNlY3Qgc2tpcCBbKDxyZXY+fDxyYW5nZT4pLi4uXQotIGdpdCBiaXNlY3QgcmVzZXQgWzxicmFuY2g+XQorIGdpdCBiaXNlY3QgcmVzZXQgWzxjb21taXQ+XQogIGdpdCBiaXNlY3QgdmlzdWFsaXplCiAgZ2l0IGJpc2VjdCByZXBsYXkgPGxvZ2ZpbGU+CiAgZ2l0IGJpc2VjdCBsb2cKQEAgLTgxLDE2ICs4MSwyNyBAQAogQmlzZWN0IHJlc2V0CiB+fn5+fn5+fn5+fn4KIAotVG8gcmV0dXJuIHRvIHRoZSBvcmlnaW5hbCBoZWFkIGFmdGVyIGEgYmlzZWN0IHNlc3Npb24sIGlzc3VlIHRoZQotZm9sbG93aW5nIGNvbW1hbmQ6CitBZnRlciBhIGJpc2VjdCBzZXNzaW9uLCB0byBjbGVhbiB1cCB0aGUgYmlzZWN0aW9uIHN0YXRlIGFuZCByZXR1cm4gdG8KK3RoZSBvcmlnaW5hbCBIRUFELCBpc3N1ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogJCBnaXQgYmlzZWN0IHJlc2V0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVGhpcyByZXNldHMgdGhlIHRyZWUgdG8gdGhlIG9yaWdpbmFsIGJyYW5jaCBpbnN0ZWFkIG9mIGJlaW5nIG9uIHRoZQotYmlzZWN0aW9uIGNvbW1pdCAoImdpdCBiaXNlY3Qgc3RhcnQiIHdpbGwgYWxzbyBkbyB0aGF0LCBhcyBpdCByZXNldHMKLXRoZSBiaXNlY3Rpb24gc3RhdGUpLgorQnkgZGVmYXVsdCwgdGhpcyB3aWxsIHJldHVybiB5b3VyIHRyZWUgdG8gdGhlIGNvbW1pdCB0aGF0IHdhcyBjaGVja2VkCitvdXQgYmVmb3JlIGBnaXQgYmlzZWN0IHN0YXJ0YC4gIChBIG5ldyBgZ2l0IGJpc2VjdCBzdGFydGAgd2lsbCBhbHNvIGRvCit0aGF0LCBhcyBpdCBjbGVhbnMgdXAgdGhlIG9sZCBiaXNlY3Rpb24gc3RhdGUuKQorCitXaXRoIGFuIG9wdGlvbmFsIGFyZ3VtZW50LCB5b3UgY2FuIHJldHVybiB0byBhIGRpZmZlcmVudCBjb21taXQKK2luc3RlYWQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHJlc2V0IDxjb21taXQ+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRm9yIGV4YW1wbGUsIGBnaXQgYmlzZWN0IHJlc2V0IEhFQURgIHdpbGwgbGVhdmUgeW91IG9uIHRoZSBjdXJyZW50CitiaXNlY3Rpb24gY29tbWl0IGFuZCBhdm9pZCBzd2l0Y2hpbmcgY29tbWl0cyBhdCBhbGwsIHdoaWxlIGBnaXQgYmlzZWN0CityZXNldCBiaXNlY3QvYmFkYCB3aWxsIGNoZWNrIG91dCB0aGUgZmlyc3QgYmFkIHJldmlzaW9uLgogCiBCaXNlY3QgdmlzdWFsaXplCiB+fn5+fn5+fn5+fn5+fn5+CkBAIC0xNjQsOSArMTc1LDggQEAKICQgZ2l0IGJpc2VjdCBza2lwICAgICAgICAgICAgICAgICAjIEN1cnJlbnQgdmVyc2lvbiBjYW5ub3QgYmUgdGVzdGVkCiAtLS0tLS0tLS0tLS0KIAotQnV0IGNvbXB1dGluZyB0aGUgY29tbWl0IHRvIHRlc3QgbWF5IGJlIHNsb3dlciBhZnRlcndhcmRzIGFuZCBnaXQgbWF5Ci1ldmVudHVhbGx5IG5vdCBiZSBhYmxlIHRvIHRlbGwgdGhlIGZpcnN0IGJhZCBjb21taXQgYW1vbmcgYSBiYWQgY29tbWl0Ci1hbmQgb25lIG9yIG1vcmUgc2tpcHBlZCBjb21taXRzLgorQnV0IGdpdCBtYXkgZXZlbnR1YWxseSBiZSB1bmFibGUgdG8gdGVsbCB0aGUgZmlyc3QgYmFkIGNvbW1pdCBhbW9uZworYSBiYWQgY29tbWl0IGFuZCBvbmUgb3IgbW9yZSBza2lwcGVkIGNvbW1pdHMuCiAKIFlvdSBjYW4gZXZlbiBza2lwIGEgcmFuZ2Ugb2YgY29tbWl0cywgaW5zdGVhZCBvZiBqdXN0IG9uZSBjb21taXQsCiB1c2luZyB0aGUgIic8Y29tbWl0MT4nLi4nPGNvbW1pdDI+JyIgbm90YXRpb24uIEZvciBleGFtcGxlOgpAQCAtMzIwLDYgKzMzMCwxMSBAQAogLS0tLS0tLS0tLS0tLQogRG9jdW1lbnRhdGlvbiBieSBKdW5pbyBDIEhhbWFubyBhbmQgdGhlIGdpdC1saXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPi4KIAorU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rOmdpdC1iaXNlY3QtbGsyMDA5Lmh0bWxbRmlnaHRpbmcgcmVncmVzc2lvbnMgd2l0aCBnaXQgYmlzZWN0XSwKK2xpbmtnaXQ6Z2l0LWJsYW1lWzFdLgorCiBHSVQKIC0tLQogUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWJsYW1lLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWJsYW1lLnR4dAppbmRleCA4YzdiN2IwLi5hMjdmNDM5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1ibGFtZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYmxhbWUudHh0CkBAIC05LDcgKzksNyBAQAogLS0tLS0tLS0KIFt2ZXJzZV0KICdnaXQgYmxhbWUnIFstY10gWy1iXSBbLWxdIFstLXJvb3RdIFstdF0gWy1mXSBbLW5dIFstc10gWy1wXSBbLXddIFstLWluY3JlbWVudGFsXSBbLUwgbixtXQotICAgICAgICAgICAgWy1TIDxyZXZzLWZpbGU+XSBbLU1dIFstQ10gWy1DXSBbLS1zaW5jZT08ZGF0ZT5dCisJICAgIFstUyA8cmV2cy1maWxlPl0gWy1NXSBbLUNdIFstQ10gWy1DXSBbLS1zaW5jZT08ZGF0ZT5dCiAJICAgIFs8cmV2PiB8IC0tY29udGVudHMgPGZpbGU+IHwgLS1yZXZlcnNlIDxyZXY+XSBbLS1dIDxmaWxlPgogCiBERVNDUklQVElPTgpAQCAtMjEsNyArMjEsNyBAQAogVGhlIGNvbW1hbmQgY2FuIGFsc28gbGltaXQgdGhlIHJhbmdlIG9mIGxpbmVzIGFubm90YXRlZC4KIAogVGhlIHJlcG9ydCBkb2VzIG5vdCB0ZWxsIHlvdSBhbnl0aGluZyBhYm91dCBsaW5lcyB3aGljaCBoYXZlIGJlZW4gZGVsZXRlZCBvcgotcmVwbGFjZWQ7IHlvdSBuZWVkIHRvIHVzZSBhIHRvb2wgc3VjaCBhcyAnZ2l0LWRpZmYnIG9yIHRoZSAicGlja2F4ZSIKK3JlcGxhY2VkOyB5b3UgbmVlZCB0byB1c2UgYSB0b29sIHN1Y2ggYXMgJ2dpdCBkaWZmJyBvciB0aGUgInBpY2theGUiCiBpbnRlcmZhY2UgYnJpZWZseSBtZW50aW9uZWQgaW4gdGhlIGZvbGxvd2luZyBwYXJhZ3JhcGguCiAKIEFwYXJ0IGZyb20gc3VwcG9ydGluZyBmaWxlIGFubm90YXRpb24sIGdpdCBhbHNvIHN1cHBvcnRzIHNlYXJjaGluZyB0aGUKQEAgLTQ5LDcgKzQ5LDcgQEAKIAlmaWxlIChzZWUgYC1NYCkuICBUaGUgZmlyc3QgbnVtYmVyIGxpc3RlZCBpcyB0aGUgc2NvcmUuCiAJVGhpcyBpcyB0aGUgbnVtYmVyIG9mIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGRldGVjdGVkCiAJYXMgaGF2aW5nIGJlZW4gbW92ZWQgYmV0d2VlbiBvciB3aXRoaW4gZmlsZXMuICBUaGlzIG11c3QgYmUgYWJvdmUKLQlhIGNlcnRhaW4gdGhyZXNob2xkIGZvciAnZ2l0LWJsYW1lJyB0byBjb25zaWRlciB0aG9zZSBsaW5lcworCWEgY2VydGFpbiB0aHJlc2hvbGQgZm9yICdnaXQgYmxhbWUnIHRvIGNvbnNpZGVyIHRob3NlIGxpbmVzCiAJb2YgY29kZSB0byBoYXZlIGJlZW4gbW92ZWQuCiAKIC1mOjoKQEAgLTEwMCw3ICsxMDAsNyBAQAogU1BFQ0lGWUlORyBSQU5HRVMKIC0tLS0tLS0tLS0tLS0tLS0tCiAKLVVubGlrZSAnZ2l0LWJsYW1lJyBhbmQgJ2dpdC1hbm5vdGF0ZScgaW4gb2xkZXIgdmVyc2lvbnMgb2YgZ2l0LCB0aGUgZXh0ZW50CitVbmxpa2UgJ2dpdCBibGFtZScgYW5kICdnaXQgYW5ub3RhdGUnIGluIG9sZGVyIHZlcnNpb25zIG9mIGdpdCwgdGhlIGV4dGVudAogb2YgdGhlIGFubm90YXRpb24gY2FuIGJlIGxpbWl0ZWQgdG8gYm90aCBsaW5lIHJhbmdlcyBhbmQgcmV2aXNpb24KIHJhbmdlcy4gIFdoZW4geW91IGFyZSBpbnRlcmVzdGVkIGluIGZpbmRpbmcgdGhlIG9yaWdpbiBmb3IKIGxpbmVzIDQwLTYwIGZvciBmaWxlIGBmb29gLCB5b3UgY2FuIHVzZSB0aGUgYC1MYCBvcHRpb24gbGlrZSBzbwpAQCAtMTE4LDcgKzExOCw3IEBACiAKIFdoZW4geW91IGFyZSBub3QgaW50ZXJlc3RlZCBpbiBjaGFuZ2VzIG9sZGVyIHRoYW4gdmVyc2lvbgogdjIuNi4xOCwgb3IgY2hhbmdlcyBvbGRlciB0aGFuIDMgd2Vla3MsIHlvdSBjYW4gdXNlIHJldmlzaW9uCi1yYW5nZSBzcGVjaWZpZXJzICBzaW1pbGFyIHRvICdnaXQtcmV2LWxpc3QnOgorcmFuZ2Ugc3BlY2lmaWVycyAgc2ltaWxhciB0byAnZ2l0IHJldi1saXN0JzoKIAogCWdpdCBibGFtZSB2Mi42LjE4Li4gLS0gZm9vCiAJZ2l0IGJsYW1lIC0tc2luY2U9My53ZWVrcyAtLSBmb28KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWJyYW5jaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1icmFuY2gudHh0CmluZGV4IGNiZDQyNzUuLjZiNmMzZGEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWJyYW5jaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYnJhbmNoLnR4dApAQCAtMTEsNyArMTEsNyBAQAogJ2dpdCBicmFuY2gnIFstLWNvbG9yIHwgLS1uby1jb2xvcl0gWy1yIHwgLWFdCiAJWy12IFstLWFiYnJldj08bGVuZ3RoPiB8IC0tbm8tYWJicmV2XV0KIAlbKC0tbWVyZ2VkIHwgLS1uby1tZXJnZWQgfCAtLWNvbnRhaW5zKSBbPGNvbW1pdD5dXQotJ2dpdCBicmFuY2gnIFstLXRyYWNrIHwgLS1uby10cmFja10gWy1sXSBbLWZdIDxicmFuY2huYW1lPiBbPHN0YXJ0LXBvaW50Pl0KKydnaXQgYnJhbmNoJyBbLS1zZXQtdXBzdHJlYW0gfCAtLXRyYWNrIHwgLS1uby10cmFja10gWy1sXSBbLWZdIDxicmFuY2huYW1lPiBbPHN0YXJ0LXBvaW50Pl0KICdnaXQgYnJhbmNoJyAoLW0gfCAtTSkgWzxvbGRicmFuY2g+XSA8bmV3YnJhbmNoPgogJ2dpdCBicmFuY2gnICgtZCB8IC1EKSBbLXJdIDxicmFuY2huYW1lPi4uLgogCkBAIC0zMCwxNyArMzAsMTUgQEAKIHRoZSBuYW1lZCBjb21taXQgd2lsbCBiZSBsaXN0ZWQuICBJZiB0aGUgPGNvbW1pdD4gYXJndW1lbnQgaXMgbWlzc2luZyBpdAogZGVmYXVsdHMgdG8gJ0hFQUQnIChpLmUuIHRoZSB0aXAgb2YgdGhlIGN1cnJlbnQgYnJhbmNoKS4KIAotSW4gdGhlIGNvbW1hbmQncyBzZWNvbmQgZm9ybSwgYSBuZXcgYnJhbmNoIG5hbWVkIDxicmFuY2huYW1lPiB3aWxsIGJlIGNyZWF0ZWQuCi1JdCB3aWxsIHN0YXJ0IG91dCB3aXRoIGEgaGVhZCBlcXVhbCB0byB0aGUgb25lIGdpdmVuIGFzIDxzdGFydC1wb2ludD4uCi1JZiBubyA8c3RhcnQtcG9pbnQ+IGlzIGdpdmVuLCB0aGUgYnJhbmNoIHdpbGwgYmUgY3JlYXRlZCB3aXRoIGEgaGVhZAotZXF1YWwgdG8gdGhhdCBvZiB0aGUgY3VycmVudGx5IGNoZWNrZWQgb3V0IGJyYW5jaC4KK1RoZSBjb21tYW5kJ3Mgc2Vjb25kIGZvcm0gY3JlYXRlcyBhIG5ldyBicmFuY2ggaGVhZCBuYW1lZCA8YnJhbmNobmFtZT4KK3doaWNoIHBvaW50cyB0byB0aGUgY3VycmVudCAnSEVBRCcsIG9yIDxzdGFydC1wb2ludD4gaWYgZ2l2ZW4uCiAKIE5vdGUgdGhhdCB0aGlzIHdpbGwgY3JlYXRlIHRoZSBuZXcgYnJhbmNoLCBidXQgaXQgd2lsbCBub3Qgc3dpdGNoIHRoZQogd29ya2luZyB0cmVlIHRvIGl0OyB1c2UgImdpdCBjaGVja291dCA8bmV3YnJhbmNoPiIgdG8gc3dpdGNoIHRvIHRoZQogbmV3IGJyYW5jaC4KIAogV2hlbiBhIGxvY2FsIGJyYW5jaCBpcyBzdGFydGVkIG9mZiBhIHJlbW90ZSBicmFuY2gsIGdpdCBzZXRzIHVwIHRoZQotYnJhbmNoIHNvIHRoYXQgJ2dpdC1wdWxsJyB3aWxsIGFwcHJvcHJpYXRlbHkgbWVyZ2UgZnJvbQorYnJhbmNoIHNvIHRoYXQgJ2dpdCBwdWxsJyB3aWxsIGFwcHJvcHJpYXRlbHkgbWVyZ2UgZnJvbQogdGhlIHJlbW90ZSBicmFuY2guIFRoaXMgYmVoYXZpb3IgbWF5IGJlIGNoYW5nZWQgdmlhIHRoZSBnbG9iYWwKIGBicmFuY2guYXV0b3NldHVwbWVyZ2VgIGNvbmZpZ3VyYXRpb24gZmxhZy4gVGhhdCBzZXR0aW5nIGNhbiBiZQogb3ZlcnJpZGRlbiBieSB1c2luZyB0aGUgYC0tdHJhY2tgIGFuZCBgLS1uby10cmFja2Agb3B0aW9ucy4KQEAgLTU3LDcgKzU1LDcgQEAKIAogVXNlIC1yIHRvZ2V0aGVyIHdpdGggLWQgdG8gZGVsZXRlIHJlbW90ZS10cmFja2luZyBicmFuY2hlcy4gTm90ZSwgdGhhdCBpdAogb25seSBtYWtlcyBzZW5zZSB0byBkZWxldGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGlmIHRoZXkgbm8gbG9uZ2VyIGV4aXN0Ci1pbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgb3IgaWYgJ2dpdC1mZXRjaCcgd2FzIGNvbmZpZ3VyZWQgbm90IHRvIGZldGNoCitpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgb3IgaWYgJ2dpdCBmZXRjaCcgd2FzIGNvbmZpZ3VyZWQgbm90IHRvIGZldGNoCiB0aGVtIGFnYWluLiBTZWUgYWxzbyB0aGUgJ3BydW5lJyBzdWJjb21tYW5kIG9mIGxpbmtnaXQ6Z2l0LXJlbW90ZVsxXSBmb3IgYQogd2F5IHRvIGNsZWFuIHVwIGFsbCBvYnNvbGV0ZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMuCiAKQEAgLTc2LDggKzc0LDkgQEAKIAliYXNlZCBzaGExIGV4cHJlc3Npb25zIHN1Y2ggYXMgIjxicmFuY2huYW1lPkBce3llc3RlcmRheX0iLgogCiAtZjo6CistLWZvcmNlOjoKIAlSZXNldCA8YnJhbmNobmFtZT4gdG8gPHN0YXJ0cG9pbnQ+IGlmIDxicmFuY2huYW1lPiBleGlzdHMKLQlhbHJlYWR5LiBXaXRob3V0IGAtZmAgJ2dpdC1icmFuY2gnIHJlZnVzZXMgdG8gY2hhbmdlIGFuIGV4aXN0aW5nIGJyYW5jaC4KKwlhbHJlYWR5LiBXaXRob3V0IGAtZmAgJ2dpdCBicmFuY2gnIHJlZnVzZXMgdG8gY2hhbmdlIGFuIGV4aXN0aW5nIGJyYW5jaC4KIAogLW06OgogCU1vdmUvcmVuYW1lIGEgYnJhbmNoIGFuZCB0aGUgY29ycmVzcG9uZGluZyByZWZsb2cuCkBAIC0xMTEsNiArMTEwLDcgQEAKIC0tbm8tYWJicmV2OjoKIAlEaXNwbGF5IHRoZSBmdWxsIHNoYTFzIGluIHRoZSBvdXRwdXQgbGlzdGluZyByYXRoZXIgdGhhbiBhYmJyZXZpYXRpbmcgdGhlbS4KIAorLXQ6OgogLS10cmFjazo6CiAJV2hlbiBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHNldCB1cCBjb25maWd1cmF0aW9uIHRvIG1hcmsgdGhlCiAJc3RhcnQtcG9pbnQgYnJhbmNoIGFzICJ1cHN0cmVhbSIgZnJvbSB0aGUgbmV3IGJyYW5jaC4gVGhpcwpAQCAtMTI5LDE0ICsxMjksMjIgQEAKIAlEbyBub3Qgc2V0IHVwICJ1cHN0cmVhbSIgY29uZmlndXJhdGlvbiwgZXZlbiBpZiB0aGUKIAlicmFuY2guYXV0b3NldHVwbWVyZ2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyB0cnVlLgogCistLXNldC11cHN0cmVhbTo6CisJSWYgc3BlY2lmaWVkIGJyYW5jaCBkb2VzIG5vdCBleGlzdCB5ZXQgb3IgaWYgJy0tZm9yY2UnIGhhcyBiZWVuCisJZ2l2ZW4sIGFjdHMgZXhhY3RseSBsaWtlICctLXRyYWNrJy4gT3RoZXJ3aXNlIHNldHMgdXAgY29uZmlndXJhdGlvbgorCWxpa2UgJy0tdHJhY2snIHdvdWxkIHdoZW4gY3JlYXRpbmcgdGhlIGJyYW5jaCwgZXhjZXB0IHRoYXQgd2hlcmUKKwlicmFuY2ggcG9pbnRzIHRvIGlzIG5vdCBjaGFuZ2VkLgorCiAtLWNvbnRhaW5zIDxjb21taXQ+OjoKIAlPbmx5IGxpc3QgYnJhbmNoZXMgd2hpY2ggY29udGFpbiB0aGUgc3BlY2lmaWVkIGNvbW1pdC4KIAotLS1tZXJnZWQ6OgotCU9ubHkgbGlzdCBicmFuY2hlcyB3aGljaCBhcmUgZnVsbHkgY29udGFpbmVkIGJ5IEhFQUQuCistLW1lcmdlZCBbPGNvbW1pdD5dOjoKKwlPbmx5IGxpc3QgYnJhbmNoZXMgd2hvc2UgdGlwcyBhcmUgcmVhY2hhYmxlIGZyb20gdGhlCisJc3BlY2lmaWVkIGNvbW1pdCAoSEVBRCBpZiBub3Qgc3BlY2lmaWVkKS4KIAotLS1uby1tZXJnZWQ6OgotCURvIG5vdCBsaXN0IGJyYW5jaGVzIHdoaWNoIGFyZSBmdWxseSBjb250YWluZWQgYnkgSEVBRC4KKy0tbm8tbWVyZ2VkIFs8Y29tbWl0Pl06OgorCU9ubHkgbGlzdCBicmFuY2hlcyB3aG9zZSB0aXBzIGFyZSBub3QgcmVhY2hhYmxlIGZyb20gdGhlCisJc3BlY2lmaWVkIGNvbW1pdCAoSEVBRCBpZiBub3Qgc3BlY2lmaWVkKS4KIAogPGJyYW5jaG5hbWU+OjoKIAlUaGUgbmFtZSBvZiB0aGUgYnJhbmNoIHRvIGNyZWF0ZSBvciBkZWxldGUuCkBAIC0xNDUsOSArMTUzLDkgQEAKIAltYXkgcmVzdHJpY3QgdGhlIGNoYXJhY3RlcnMgYWxsb3dlZCBpbiBhIGJyYW5jaCBuYW1lLgogCiA8c3RhcnQtcG9pbnQ+OjoKLQlUaGUgbmV3IGJyYW5jaCB3aWxsIGJlIGNyZWF0ZWQgd2l0aCBhIEhFQUQgZXF1YWwgdG8gdGhpcy4gIEl0IG1heQotCWJlIGdpdmVuIGFzIGEgYnJhbmNoIG5hbWUsIGEgY29tbWl0LWlkLCBvciBhIHRhZy4gIElmIHRoaXMgb3B0aW9uCi0JaXMgb21pdHRlZCwgdGhlIGN1cnJlbnQgYnJhbmNoIGlzIGFzc3VtZWQuCisJVGhlIG5ldyBicmFuY2ggaGVhZCB3aWxsIHBvaW50IHRvIHRoaXMgY29tbWl0LiAgSXQgbWF5IGJlCisJZ2l2ZW4gYXMgYSBicmFuY2ggbmFtZSwgYSBjb21taXQtaWQsIG9yIGEgdGFnLiAgSWYgdGhpcworCW9wdGlvbiBpcyBvbWl0dGVkLCB0aGUgY3VycmVudCBIRUFEIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgogCiA8b2xkYnJhbmNoPjo6CiAJVGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgYnJhbmNoIHRvIHJlbmFtZS4KQEAgLTIwOCw2ICsyMTYsMTQgQEAKIC0gYC0tbm8tbWVyZ2VkYCBpcyB1c2VkIHRvIGZpbmQgYnJhbmNoZXMgd2hpY2ggYXJlIGNhbmRpZGF0ZXMgZm9yIG1lcmdpbmcKICAgaW50byBIRUFELCBzaW5jZSB0aG9zZSBicmFuY2hlcyBhcmUgbm90IGZ1bGx5IGNvbnRhaW5lZCBieSBIRUFELgogCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWNoZWNrLXJlZi1mb3JtYXRbMV0sCitsaW5rZ2l0OmdpdC1mZXRjaFsxXSwKK2xpbmtnaXQ6Z2l0LXJlbW90ZVsxXSwKK2xpbms6dXNlci1tYW51YWwuaHRtbCN3aGF0LWlzLWEtYnJhbmNoW2BgVW5kZXJzdGFuZGluZyBoaXN0b3J5OiBXaGF0IGlzCithIGJyYW5jaD8nJ10gaW4gdGhlIEdpdCBVc2VyJ3MgTWFudWFsLgorCiBBdXRob3IKIC0tLS0tLQogV3JpdHRlbiBieSBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAb3NkbC5vcmc+IGFuZCBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1idW5kbGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYnVuZGxlLnR4dAppbmRleCBhZWU3ZTRhLi5hNWVkOGZiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1idW5kbGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWJ1bmRsZS50eHQKQEAgLTIxLDEwICsyMSwxMCBAQAogbWFjaGluZSBiZSByZXBsaWNhdGVkIG9uIGFub3RoZXIgbWFjaGluZSwgYnV0IHRoZSB0d28gbWFjaGluZXMgY2Fubm90CiBiZSBkaXJlY3RseSBjb25uZWN0ZWQsIGFuZCB0aGVyZWZvcmUgdGhlIGludGVyYWN0aXZlIGdpdCBwcm90b2NvbHMgKGdpdCwKIHNzaCwgcnN5bmMsIGh0dHApIGNhbm5vdCBiZSB1c2VkLiAgVGhpcyBjb21tYW5kIHByb3ZpZGVzIHN1cHBvcnQgZm9yCi0nZ2l0LWZldGNoJyBhbmQgJ2dpdC1wdWxsJyB0byBvcGVyYXRlIGJ5IHBhY2thZ2luZyBvYmplY3RzIGFuZCByZWZlcmVuY2VzCisnZ2l0IGZldGNoJyBhbmQgJ2dpdCBwdWxsJyB0byBvcGVyYXRlIGJ5IHBhY2thZ2luZyBvYmplY3RzIGFuZCByZWZlcmVuY2VzCiBpbiBhbiBhcmNoaXZlIGF0IHRoZSBvcmlnaW5hdGluZyBtYWNoaW5lLCB0aGVuIGltcG9ydGluZyB0aG9zZSBpbnRvCi1hbm90aGVyIHJlcG9zaXRvcnkgdXNpbmcgJ2dpdC1mZXRjaCcgYW5kICdnaXQtcHVsbCcKLWFmdGVyIG1vdmluZyB0aGUgYXJjaGl2ZSBieSBzb21lIG1lYW5zIChpLmUuLCBieSBzbmVha2VybmV0KS4gIEFzIG5vCithbm90aGVyIHJlcG9zaXRvcnkgdXNpbmcgJ2dpdCBmZXRjaCcgYW5kICdnaXQgcHVsbCcKK2FmdGVyIG1vdmluZyB0aGUgYXJjaGl2ZSBieSBzb21lIG1lYW5zIChlLmcuLCBieSBzbmVha2VybmV0KS4gIEFzIG5vCiBkaXJlY3QgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSByZXBvc2l0b3JpZXMgZXhpc3RzLCB0aGUgdXNlciBtdXN0IHNwZWNpZnkgYQogYmFzaXMgZm9yIHRoZSBidW5kbGUgdGhhdCBpcyBoZWxkIGJ5IHRoZSBkZXN0aW5hdGlvbiByZXBvc2l0b3J5OiB0aGUKIGJ1bmRsZSBhc3N1bWVzIHRoYXQgYWxsIG9iamVjdHMgaW4gdGhlIGJhc2lzIGFyZSBhbHJlYWR5IGluIHRoZQpAQCAtMzUsMTQgKzM1LDE0IEBACiAKIGNyZWF0ZSA8ZmlsZT46OgogICAgICAgIFVzZWQgdG8gY3JlYXRlIGEgYnVuZGxlIG5hbWVkICdmaWxlJy4gIFRoaXMgcmVxdWlyZXMgdGhlCi0gICAgICAgJ2dpdC1yZXYtbGlzdCcgYXJndW1lbnRzIHRvIGRlZmluZSB0aGUgYnVuZGxlIGNvbnRlbnRzLgorICAgICAgICdnaXQgcmV2LWxpc3QnIGFyZ3VtZW50cyB0byBkZWZpbmUgdGhlIGJ1bmRsZSBjb250ZW50cy4KIAogdmVyaWZ5IDxmaWxlPjo6CiAgICAgICAgVXNlZCB0byBjaGVjayB0aGF0IGEgYnVuZGxlIGZpbGUgaXMgdmFsaWQgYW5kIHdpbGwgYXBwbHkKICAgICAgICBjbGVhbmx5IHRvIHRoZSBjdXJyZW50IHJlcG9zaXRvcnkuICBUaGlzIGluY2x1ZGVzIGNoZWNrcyBvbiB0aGUKICAgICAgICBidW5kbGUgZm9ybWF0IGl0c2VsZiBhcyB3ZWxsIGFzIGNoZWNraW5nIHRoYXQgdGhlIHByZXJlcXVpc2l0ZQogICAgICAgIGNvbW1pdHMgZXhpc3QgYW5kIGFyZSBmdWxseSBsaW5rZWQgaW4gdGhlIGN1cnJlbnQgcmVwb3NpdG9yeS4KLSAgICAgICAnZ2l0LWJ1bmRsZScgcHJpbnRzIGEgbGlzdCBvZiBtaXNzaW5nIGNvbW1pdHMsIGlmIGFueSwgYW5kIGV4aXRzCisgICAgICAgJ2dpdCBidW5kbGUnIHByaW50cyBhIGxpc3Qgb2YgbWlzc2luZyBjb21taXRzLCBpZiBhbnksIGFuZCBleGl0cwogICAgICAgIHdpdGggYSBub24temVybyBzdGF0dXMuCiAKIGxpc3QtaGVhZHMgPGZpbGU+OjoKQEAgLTUxLDE1ICs1MSwxNSBAQAogICAgICAgIHByaW50ZWQgb3V0LgogCiB1bmJ1bmRsZSA8ZmlsZT46OgotICAgICAgIFBhc3NlcyB0aGUgb2JqZWN0cyBpbiB0aGUgYnVuZGxlIHRvICdnaXQtaW5kZXgtcGFjaycKKyAgICAgICBQYXNzZXMgdGhlIG9iamVjdHMgaW4gdGhlIGJ1bmRsZSB0byAnZ2l0IGluZGV4LXBhY2snCiAgICAgICAgZm9yIHN0b3JhZ2UgaW4gdGhlIHJlcG9zaXRvcnksIHRoZW4gcHJpbnRzIHRoZSBuYW1lcyBvZiBhbGwKICAgICAgICBkZWZpbmVkIHJlZmVyZW5jZXMuIElmIGEgbGlzdCBvZiByZWZlcmVuY2VzIGlzIGdpdmVuLCBvbmx5CiAgICAgICAgcmVmZXJlbmNlcyBtYXRjaGluZyB0aG9zZSBpbiB0aGUgbGlzdCBhcmUgcHJpbnRlZC4gVGhpcyBjb21tYW5kIGlzCi0gICAgICAgcmVhbGx5IHBsdW1iaW5nLCBpbnRlbmRlZCB0byBiZSBjYWxsZWQgb25seSBieSAnZ2l0LWZldGNoJy4KKyAgICAgICByZWFsbHkgcGx1bWJpbmcsIGludGVuZGVkIHRvIGJlIGNhbGxlZCBvbmx5IGJ5ICdnaXQgZmV0Y2gnLgogCiBbZ2l0LXJldi1saXN0LWFyZ3MuLi5dOjoKLSAgICAgICBBIGxpc3Qgb2YgYXJndW1lbnRzLCBhY2NlcHRhYmxlIHRvICdnaXQtcmV2LXBhcnNlJyBhbmQKLSAgICAgICAnZ2l0LXJldi1saXN0JywgdGhhdCBzcGVjaWZpZXMgdGhlIHNwZWNpZmljIG9iamVjdHMgYW5kIHJlZmVyZW5jZXMKKyAgICAgICBBIGxpc3Qgb2YgYXJndW1lbnRzLCBhY2NlcHRhYmxlIHRvICdnaXQgcmV2LXBhcnNlJyBhbmQKKyAgICAgICAnZ2l0IHJldi1saXN0JywgdGhhdCBzcGVjaWZpZXMgdGhlIHNwZWNpZmljIG9iamVjdHMgYW5kIHJlZmVyZW5jZXMKICAgICAgICB0byB0cmFuc3BvcnQuICBGb3IgZXhhbXBsZSwgYG1hc3Rlclx+MTAuLm1hc3RlcmAgY2F1c2VzIHRoZQogICAgICAgIGN1cnJlbnQgbWFzdGVyIHJlZmVyZW5jZSB0byBiZSBwYWNrYWdlZCBhbG9uZyB3aXRoIGFsbCBvYmplY3RzCiAgICAgICAgYWRkZWQgc2luY2UgaXRzIDEwdGggYW5jZXN0b3IgY29tbWl0LiAgVGhlcmUgaXMgbm8gZXhwbGljaXQKQEAgLTY5LDE2ICs2OSwxNiBAQAogCiBbcmVmbmFtZS4uLl06OgogICAgICAgIEEgbGlzdCBvZiByZWZlcmVuY2VzIHVzZWQgdG8gbGltaXQgdGhlIHJlZmVyZW5jZXMgcmVwb3J0ZWQgYXMKLSAgICAgICBhdmFpbGFibGUuIFRoaXMgaXMgcHJpbmNpcGFsbHkgb2YgdXNlIHRvICdnaXQtZmV0Y2gnLCB3aGljaAorICAgICAgIGF2YWlsYWJsZS4gVGhpcyBpcyBwcmluY2lwYWxseSBvZiB1c2UgdG8gJ2dpdCBmZXRjaCcsIHdoaWNoCiAgICAgICAgZXhwZWN0cyB0byByZWNlaXZlIG9ubHkgdGhvc2UgcmVmZXJlbmNlcyBhc2tlZCBmb3IgYW5kIG5vdAotICAgICAgIG5lY2Vzc2FyaWx5IGV2ZXJ5dGhpbmcgaW4gdGhlIHBhY2sgKGluIHRoaXMgY2FzZSwgJ2dpdC1idW5kbGUnIGFjdHMKLSAgICAgICBsaWtlICdnaXQtZmV0Y2gtcGFjaycpLgorICAgICAgIG5lY2Vzc2FyaWx5IGV2ZXJ5dGhpbmcgaW4gdGhlIHBhY2sgKGluIHRoaXMgY2FzZSwgJ2dpdCBidW5kbGUnIGFjdHMKKyAgICAgICBsaWtlICdnaXQgZmV0Y2gtcGFjaycpLgogCiBTUEVDSUZZSU5HIFJFRkVSRU5DRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0nZ2l0LWJ1bmRsZScgd2lsbCBvbmx5IHBhY2thZ2UgcmVmZXJlbmNlcyB0aGF0IGFyZSBzaG93biBieQotJ2dpdC1zaG93LXJlZic6IHRoaXMgaW5jbHVkZXMgaGVhZHMsIHRhZ3MsIGFuZCByZW1vdGUgaGVhZHMuICBSZWZlcmVuY2VzCisnZ2l0IGJ1bmRsZScgd2lsbCBvbmx5IHBhY2thZ2UgcmVmZXJlbmNlcyB0aGF0IGFyZSBzaG93biBieQorJ2dpdCBzaG93LXJlZic6IHRoaXMgaW5jbHVkZXMgaGVhZHMsIHRhZ3MsIGFuZCByZW1vdGUgaGVhZHMuICBSZWZlcmVuY2VzCiBzdWNoIGFzIGBtYXN0ZXJcfjFgIGNhbm5vdCBiZSBwYWNrYWdlZCwgYnV0IGFyZSBwZXJmZWN0bHkgc3VpdGFibGUgZm9yCiBkZWZpbmluZyB0aGUgYmFzaXMuICBNb3JlIHRoYW4gb25lIHJlZmVyZW5jZSBtYXkgYmUgcGFja2FnZWQsIGFuZCBtb3JlCiB0aGFuIG9uZSBiYXNpcyBjYW4gYmUgc3BlY2lmaWVkLiAgVGhlIG9iamVjdHMgcGFja2FnZWQgYXJlIHRob3NlIG5vdApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2stcmVmLWZvcm1hdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1yZWYtZm9ybWF0LnR4dAppbmRleCBjMWNlMjY4Li4zNzllZWU2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1yZWYtZm9ybWF0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1yZWYtZm9ybWF0LnR4dApAQCAtOSw3ICs5LDggQEAKIC0tLS0tLS0tCiBbdmVyc2VdCiAnZ2l0IGNoZWNrLXJlZi1mb3JtYXQnIDxyZWZuYW1lPgotJ2dpdCBjaGVjay1yZWYtZm9ybWF0JyBbLS1icmFuY2hdIDxicmFuY2huYW1lLXNob3J0aGFuZD4KKydnaXQgY2hlY2stcmVmLWZvcm1hdCcgLS1wcmludCA8cmVmbmFtZT4KKydnaXQgY2hlY2stcmVmLWZvcm1hdCcgLS1icmFuY2ggPGJyYW5jaG5hbWUtc2hvcnRoYW5kPgogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KQEAgLTE4LDEzICsxOSwxOCBAQAogCiBBIHJlZmVyZW5jZSBpcyB1c2VkIGluIGdpdCB0byBzcGVjaWZ5IGJyYW5jaGVzIGFuZCB0YWdzLiAgQQogYnJhbmNoIGhlYWQgaXMgc3RvcmVkIHVuZGVyIHRoZSBgJEdJVF9ESVIvcmVmcy9oZWFkc2AgZGlyZWN0b3J5LCBhbmQKLWEgdGFnIGlzIHN0b3JlZCB1bmRlciB0aGUgYCRHSVRfRElSL3JlZnMvdGFnc2AgZGlyZWN0b3J5LiAgZ2l0Ci1pbXBvc2VzIHRoZSBmb2xsb3dpbmcgcnVsZXMgb24gaG93IHJlZmVyZW5jZXMgYXJlIG5hbWVkOgorYSB0YWcgaXMgc3RvcmVkIHVuZGVyIHRoZSBgJEdJVF9ESVIvcmVmcy90YWdzYCBkaXJlY3RvcnkgKG9yLCBpZiByZWZzCithcmUgcGFja2VkIGJ5IGBnaXQgZ2NgLCBhcyBlbnRyaWVzIGluIHRoZSBgJEdJVF9ESVIvcGFja2VkLXJlZnNgIGZpbGUpLgorZ2l0IGltcG9zZXMgdGhlIGZvbGxvd2luZyBydWxlcyBvbiBob3cgcmVmZXJlbmNlcyBhcmUgbmFtZWQ6CiAKIC4gVGhleSBjYW4gaW5jbHVkZSBzbGFzaCBgL2AgZm9yIGhpZXJhcmNoaWNhbCAoZGlyZWN0b3J5KQogICBncm91cGluZywgYnV0IG5vIHNsYXNoLXNlcGFyYXRlZCBjb21wb25lbnQgY2FuIGJlZ2luIHdpdGggYQogICBkb3QgYC5gLgogCisuIFRoZXkgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBgL2AuIFRoaXMgZW5mb3JjZXMgdGhlIHByZXNlbmNlIG9mIGEKKyAgY2F0ZWdvcnkgbGlrZSBgaGVhZHMvYCwgYHRhZ3MvYCBldGMuIGJ1dCB0aGUgYWN0dWFsIG5hbWVzIGFyZSBub3QKKyAgcmVzdHJpY3RlZC4KKwogLiBUaGV5IGNhbm5vdCBoYXZlIHR3byBjb25zZWN1dGl2ZSBkb3RzIGAuLmAgYW55d2hlcmUuCiAKIC4gVGhleSBjYW5ub3QgaGF2ZSBBU0NJSSBjb250cm9sIGNoYXJhY3RlcnMgKGkuZS4gYnl0ZXMgd2hvc2UKQEAgLTM4LDYgKzQ0LDggQEAKIAogLiBUaGV5IGNhbm5vdCBjb250YWluIGEgc2VxdWVuY2UgYEB7YC4KIAorLiBUaGV5IGNhbm5vdCBjb250YWluIGEgYFxgLgorCiBUaGVzZSBydWxlcyBtYWtlIGl0IGVhc3kgZm9yIHNoZWxsIHNjcmlwdCBiYXNlZCB0b29scyB0byBwYXJzZQogcmVmZXJlbmNlIG5hbWVzLCBwYXRobmFtZSBleHBhbnNpb24gYnkgdGhlIHNoZWxsIHdoZW4gYSByZWZlcmVuY2UgbmFtZSBpcyB1c2VkCiB1bnF1b3RlZCAoYnkgbWlzdGFrZSksIGFuZCBhbHNvIGF2b2lkcyBhbWJpZ3VpdGllcyBpbiBjZXJ0YWluCkBAIC01MywyMCArNjEsMzUgQEAKIC4gQSBjb2xvbiBgOmAgaXMgdXNlZCBhcyBpbiBgc3JjcmVmOmRzdHJlZmAgdG8gbWVhbiAidXNlIHNyY3JlZlwncwogICB2YWx1ZSBhbmQgc3RvcmUgaXQgaW4gZHN0cmVmIiBpbiBmZXRjaCBhbmQgcHVzaCBvcGVyYXRpb25zLgogICBJdCBtYXkgYWxzbyBiZSB1c2VkIHRvIHNlbGVjdCBhIHNwZWNpZmljIG9iamVjdCBzdWNoIGFzIHdpdGgKLSAgJ2dpdC1jYXQtZmlsZSc6ICJnaXQgY2F0LWZpbGUgYmxvYiB2MS4zLjM6cmVmcy5jIi4KKyAgJ2dpdCBjYXQtZmlsZSc6ICJnaXQgY2F0LWZpbGUgYmxvYiB2MS4zLjM6cmVmcy5jIi4KIAogLiBhdC1vcGVuLWJyYWNlIGBAe2AgaXMgdXNlZCBhcyBhIG5vdGF0aW9uIHRvIGFjY2VzcyBhIHJlZmxvZyBlbnRyeS4KIAotV2l0aCB0aGUgYC0tYnJhbmNoYCBvcHRpb24sIGl0IGV4cGFuZHMgYSBicmFuY2ggbmFtZSBzaG9ydGhhbmQgYW5kCi1wcmludHMgdGhlIG5hbWUgb2YgdGhlIGJyYW5jaCB0aGUgc2hvcnRoYW5kIHJlZmVycyB0by4KK1dpdGggdGhlIGAtLXByaW50YCBvcHRpb24sIGlmICdyZWZuYW1lJyBpcyBhY2NlcHRhYmxlLCBpdCBwcmludHMgdGhlCitjYW5vbmljYWxpemVkIG5hbWUgb2YgYSBoeXBvdGhldGljYWwgcmVmZXJlbmNlIHdpdGggdGhhdCBuYW1lLiAgVGhhdCBpcywKK2l0IHByaW50cyAncmVmbmFtZScgd2l0aCBhbnkgZXh0cmEgYC9gIGNoYXJhY3RlcnMgcmVtb3ZlZC4KIAotRVhBTVBMRQotLS0tLS0tLQorV2l0aCB0aGUgYC0tYnJhbmNoYCBvcHRpb24sIGl0IGV4cGFuZHMgdGhlIGBgcHJldmlvdXMgYnJhbmNoIHN5bnRheCcnCitgQHstbn1gLiAgRm9yIGV4YW1wbGUsIGBAey0xfWAgaXMgYSB3YXkgdG8gcmVmZXIgdGhlIGxhc3QgYnJhbmNoIHlvdQord2VyZSBvbi4gIFRoaXMgb3B0aW9uIHNob3VsZCBiZSB1c2VkIGJ5IHBvcmNlbGFpbnMgdG8gYWNjZXB0IHRoaXMKK3N5bnRheCBhbnl3aGVyZSBhIGJyYW5jaCBuYW1lIGlzIGV4cGVjdGVkLCBzbyB0aGV5IGNhbiBhY3QgYXMgaWYgeW91Cit0eXBlZCB0aGUgYnJhbmNoIG5hbWUuCiAKLWdpdCBjaGVjay1yZWYtZm9ybWF0IC0tYnJhbmNoIEB7LTF9OjoKK0VYQU1QTEVTCistLS0tLS0tLQogCi1QcmludCB0aGUgbmFtZSBvZiB0aGUgcHJldmlvdXMgYnJhbmNoLgorKiBQcmludCB0aGUgbmFtZSBvZiB0aGUgcHJldmlvdXMgYnJhbmNoOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVjay1yZWYtZm9ybWF0IC0tYnJhbmNoIEB7LTF9CistLS0tLS0tLS0tLS0KIAorKiBEZXRlcm1pbmUgdGhlIHJlZmVyZW5jZSBuYW1lIHRvIHVzZSBmb3IgYSBuZXcgYnJhbmNoOgorKworLS0tLS0tLS0tLS0tCiskIHJlZj0kKGdpdCBjaGVjay1yZWYtZm9ybWF0IC0tcHJpbnQgInJlZnMvaGVhZHMvJG5ld2JyYW5jaCIpIHx8CitkaWUgIndlIGRvIG5vdCBsaWtlICckbmV3YnJhbmNoJyBhcyBhIGJyYW5jaCBuYW1lLiIKKy0tLS0tLS0tLS0tLQogCiBHSVQKIC0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2tvdXQtaW5kZXgudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2tvdXQtaW5kZXgudHh0CmluZGV4IDYyZDg0ODMuLmQ2YWE2ZTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LWluZGV4LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVja291dC1pbmRleC50eHQKQEAgLTg4LDcgKzg4LDcgQEAKIHdoaWNoIHdpbGwgZm9yY2UgYWxsIGV4aXN0aW5nIGAqLmhgIGZpbGVzIHRvIGJlIHJlcGxhY2VkIHdpdGggdGhlaXIKIGNhY2hlZCBjb3BpZXMuIElmIGFuIGVtcHR5IGNvbW1hbmQgbGluZSBpbXBsaWVkICJhbGwiLCB0aGVuIHRoaXMgd291bGQKIGZvcmNlLXJlZnJlc2ggZXZlcnl0aGluZyBpbiB0aGUgaW5kZXgsIHdoaWNoIHdhcyBub3QgdGhlIHBvaW50LiAgQnV0Ci1zaW5jZSAnZ2l0LWNoZWNrb3V0LWluZGV4JyBhY2NlcHRzIC0tc3RkaW4gaXQgd291bGQgYmUgZmFzdGVyIHRvIHVzZToKK3NpbmNlICdnaXQgY2hlY2tvdXQtaW5kZXgnIGFjY2VwdHMgLS1zdGRpbiBpdCB3b3VsZCBiZSBmYXN0ZXIgdG8gdXNlOgogCiAtLS0tLS0tLS0tLS0tLS0tCiAkIGZpbmQgLiAtbmFtZSAnKi5oJyAtcHJpbnQwIHwgZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC16IC0tc3RkaW4KQEAgLTEwMiw3ICsxMDIsNyBAQAogVXNpbmcgLS10ZW1wIG9yIC0tc3RhZ2U9YWxsCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFdoZW4gYC0tdGVtcGAgaXMgdXNlZCAob3IgaW1wbGllZCBieSBgLS1zdGFnZT1hbGxgKQotJ2dpdC1jaGVja291dC1pbmRleCcgd2lsbCBjcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZSBmb3IgZWFjaCBpbmRleAorJ2dpdCBjaGVja291dC1pbmRleCcgd2lsbCBjcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZSBmb3IgZWFjaCBpbmRleAogZW50cnkgYmVpbmcgY2hlY2tlZCBvdXQuICBUaGUgaW5kZXggd2lsbCBub3QgYmUgdXBkYXRlZCB3aXRoIHN0YXQKIGluZm9ybWF0aW9uLiAgVGhlc2Ugb3B0aW9ucyBjYW4gYmUgdXNlZnVsIGlmIHRoZSBjYWxsZXIgbmVlZHMgYWxsCiBzdGFnZXMgb2YgYWxsIHVubWVyZ2VkIGVudHJpZXMgc28gdGhhdCB0aGUgdW5tZXJnZWQgZmlsZXMgY2FuIGJlCkBAIC0xNDcsOSArMTQ3LDkgQEAKICQgZ2l0IGNoZWNrb3V0LWluZGV4IC1uIC1mIC1hICYmIGdpdCB1cGRhdGUtaW5kZXggLS1pZ25vcmUtbWlzc2luZyAtLXJlZnJlc2gKIC0tLS0tLS0tLS0tLS0tLS0KIAotVXNpbmcgJ2dpdC1jaGVja291dC1pbmRleCcgdG8gImV4cG9ydCBhbiBlbnRpcmUgdHJlZSI6OgorVXNpbmcgJ2dpdCBjaGVja291dC1pbmRleCcgdG8gImV4cG9ydCBhbiBlbnRpcmUgdHJlZSI6OgogCVRoZSBwcmVmaXggYWJpbGl0eSBiYXNpY2FsbHkgbWFrZXMgaXQgdHJpdmlhbCB0byB1c2UKLQknZ2l0LWNoZWNrb3V0LWluZGV4JyBhcyBhbiAiZXhwb3J0IGFzIHRyZWUiIGZ1bmN0aW9uLgorCSdnaXQgY2hlY2tvdXQtaW5kZXgnIGFzIGFuICJleHBvcnQgYXMgdHJlZSIgZnVuY3Rpb24uCiAJSnVzdCByZWFkIHRoZSBkZXNpcmVkIHRyZWUgaW50byB0aGUgaW5kZXgsIGFuZCBkbzoKICsKIC0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LnR4dAppbmRleCBhZDRiMzFlLi4zN2MxODEwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVja291dC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2tvdXQudHh0CkBAIC0xMSw2ICsxMSw3IEBACiAnZ2l0IGNoZWNrb3V0JyBbLXFdIFstZl0gWy1tXSBbPGJyYW5jaD5dCiAnZ2l0IGNoZWNrb3V0JyBbLXFdIFstZl0gWy1tXSBbLWIgPG5ld19icmFuY2g+XSBbPHN0YXJ0X3BvaW50Pl0KICdnaXQgY2hlY2tvdXQnIFstZnwtLW91cnN8LS10aGVpcnN8LW18LS1jb25mbGljdD08c3R5bGU+XSBbPHRyZWUtaXNoPl0gWy0tXSA8cGF0aHM+Li4uCisnZ2l0IGNoZWNrb3V0JyAtLXBhdGNoIFs8dHJlZS1pc2g+XSBbLS1dIFs8cGF0aHM+Li4uXQogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KQEAgLTI1LDcgKzI2LDcgQEAKIGJyYW5jaGAuICBBcyBhIGNvbnZlbmllbmNlLCAtLXRyYWNrIHdpdGhvdXQgYC1iYCBpbXBsaWVzIGJyYW5jaAogY3JlYXRpb247IHNlZSB0aGUgZGVzY3JpcHRpb24gb2YgLS10cmFjayBiZWxvdy4KIAotV2hlbiA8cGF0aHM+IGFyZSBnaXZlbiwgdGhpcyBjb21tYW5kIGRvZXMgKm5vdCogc3dpdGNoCitXaGVuIDxwYXRocz4gb3IgLS1wYXRjaCBhcmUgZ2l2ZW4sIHRoaXMgY29tbWFuZCBkb2VzICpub3QqIHN3aXRjaAogYnJhbmNoZXMuICBJdCB1cGRhdGVzIHRoZSBuYW1lZCBwYXRocyBpbiB0aGUgd29ya2luZyB0cmVlIGZyb20KIHRoZSBpbmRleCBmaWxlLCBvciBmcm9tIGEgbmFtZWQgPHRyZWUtaXNoPiAobW9zdCBvZnRlbiBhIGNvbW1pdCkuICBJbgogdGhpcyBjYXNlLCB0aGUgYC1iYCBhbmQgYC0tdHJhY2tgIG9wdGlvbnMgYXJlIG1lYW5pbmdsZXNzIGFuZCBnaXZpbmcKQEAgLTQ1LDkgKzQ2LDExIEBACiBPUFRJT05TCiAtLS0tLS0tCiAtcTo6CistLXF1aWV0OjoKIAlRdWlldCwgc3VwcHJlc3MgZmVlZGJhY2sgbWVzc2FnZXMuCiAKIC1mOjoKKy0tZm9yY2U6OgogCVdoZW4gc3dpdGNoaW5nIGJyYW5jaGVzLCBwcm9jZWVkIGV2ZW4gaWYgdGhlIGluZGV4IG9yIHRoZQogCXdvcmtpbmcgdHJlZSBkaWZmZXJzIGZyb20gSEVBRC4gIFRoaXMgaXMgdXNlZCB0byB0aHJvdyBhd2F5CiAJbG9jYWwgY2hhbmdlcy4KQEAgLTExMyw2ICsxMTYsMTYgQEAKIAkibWVyZ2UiIChkZWZhdWx0KSBhbmQgImRpZmYzIiAoaW4gYWRkaXRpb24gdG8gd2hhdCBpcyBzaG93biBieQogCSJtZXJnZSIgc3R5bGUsIHNob3dzIHRoZSBvcmlnaW5hbCBjb250ZW50cykuCiAKKy1wOjoKKy0tcGF0Y2g6OgorCUludGVyYWN0aXZlbHkgc2VsZWN0IGh1bmtzIGluIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlCisJPHRyZWUtaXNoPiAob3IgdGhlIGluZGV4LCBpZiB1bnNwZWNpZmllZCkgYW5kIHRoZSB3b3JraW5nCisJdHJlZS4gIFRoZSBjaG9zZW4gaHVua3MgYXJlIHRoZW4gYXBwbGllZCBpbiByZXZlcnNlIHRvIHRoZQorCXdvcmtpbmcgdHJlZSAoYW5kIGlmIGEgPHRyZWUtaXNoPiB3YXMgc3BlY2lmaWVkLCB0aGUgaW5kZXgpLgorKworVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gdXNlIGBnaXQgY2hlY2tvdXQgLXBgIHRvIHNlbGVjdGl2ZWx5IGRpc2NhcmQKK2VkaXRzIGZyb20geW91ciBjdXJyZW50IHdvcmtpbmcgdHJlZS4KKwogPGJyYW5jaD46OgogCUJyYW5jaCB0byBjaGVja291dDsgaWYgaXQgcmVmZXJzIHRvIGEgYnJhbmNoIChpLmUuLCBhIG5hbWUgdGhhdCwKIAl3aGVuIHByZXBlbmRlZCB3aXRoICJyZWZzL2hlYWRzLyIsIGlzIGEgdmFsaWQgcmVmKSwgdGhlbiB0aGF0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVycnktcGljay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVycnktcGljay50eHQKaW5kZXggYjc2NDEzMC4uNzhmNDcxNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlcnJ5LXBpY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZXJyeS1waWNrLnR4dApAQCAtMjQsNyArMjQsNyBAQAogCiAtZTo6CiAtLWVkaXQ6OgotCVdpdGggdGhpcyBvcHRpb24sICdnaXQtY2hlcnJ5LXBpY2snIHdpbGwgbGV0IHlvdSBlZGl0IHRoZSBjb21taXQKKwlXaXRoIHRoaXMgb3B0aW9uLCAnZ2l0IGNoZXJyeS1waWNrJyB3aWxsIGxldCB5b3UgZWRpdCB0aGUgY29tbWl0CiAJbWVzc2FnZSBwcmlvciB0byBjb21taXR0aW5nLgogCiAteDo6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVycnkudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlcnJ5LnR4dAppbmRleCA3ZGVlZmRhLi5mZWQxMTVhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVycnkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZXJyeS50eHQKQEAgLTE0LDcgKzE0LDcgQEAKIFRoZSBjaGFuZ2VzZXQgKG9yICJkaWZmIikgb2YgZWFjaCBjb21taXQgYmV0d2VlbiB0aGUgZm9yay1wb2ludCBhbmQgPGhlYWQ+CiBpcyBjb21wYXJlZCBhZ2FpbnN0IGVhY2ggY29tbWl0IGJldHdlZW4gdGhlIGZvcmstcG9pbnQgYW5kIDx1cHN0cmVhbT4uCiBUaGUgY29tbWl0cyBhcmUgY29tcGFyZWQgd2l0aCB0aGVpciAncGF0Y2ggaWQnLCBvYnRhaW5lZCBmcm9tCi10aGUgJ2dpdC1wYXRjaC1pZCcgcHJvZ3JhbS4KK3RoZSAnZ2l0IHBhdGNoLWlkJyBwcm9ncmFtLgogCiBFdmVyeSBjb21taXQgdGhhdCBkb2Vzbid0IGV4aXN0IGluIHRoZSA8dXBzdHJlYW0+IGJyYW5jaAogaGFzIGl0cyBpZCAoc2hhMSkgcmVwb3J0ZWQsIHByZWZpeGVkIGJ5IGEgc3ltYm9sLiAgVGhlIG9uZXMgdGhhdCBoYXZlCkBAIC0zNyw4ICszNyw4IEBACiAgICAgICAgICAgICAgIFxfXypfXypfXzxsaW1pdD5fXy1fXytfXz4gPGhlYWQ+CiAKIAotQmVjYXVzZSAnZ2l0LWNoZXJyeScgY29tcGFyZXMgdGhlIGNoYW5nZXNldCByYXRoZXIgdGhhbiB0aGUgY29tbWl0IGlkCi0oc2hhMSksIHlvdSBjYW4gdXNlICdnaXQtY2hlcnJ5JyB0byBmaW5kIG91dCBpZiBhIGNvbW1pdCB5b3UgbWFkZSBsb2NhbGx5CitCZWNhdXNlICdnaXQgY2hlcnJ5JyBjb21wYXJlcyB0aGUgY2hhbmdlc2V0IHJhdGhlciB0aGFuIHRoZSBjb21taXQgaWQKKyhzaGExKSwgeW91IGNhbiB1c2UgJ2dpdCBjaGVycnknIHRvIGZpbmQgb3V0IGlmIGEgY29tbWl0IHlvdSBtYWRlIGxvY2FsbHkKIGhhcyBiZWVuIGFwcGxpZWQgPHVwc3RyZWFtPiB1bmRlciBhIGRpZmZlcmVudCBjb21taXQgaWQuICBGb3IgZXhhbXBsZSwKIHRoaXMgd2lsbCBoYXBwZW4gaWYgeW91J3JlIGZlZWRpbmcgcGF0Y2hlcyA8dXBzdHJlYW0+IHZpYSBlbWFpbCByYXRoZXIKIHRoYW4gcHVzaGluZyBvciBwdWxsaW5nIGNvbW1pdHMgZGlyZWN0bHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaXRvb2wudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2l0b29sLnR4dAppbmRleCA2NzBjYjAyLi5mYjI3NTNjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jaXRvb2wudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNpdG9vbC50eHQKQEAgLTE0LDkgKzE0LDkgQEAKIEEgVGNsL1RrIGJhc2VkIGdyYXBoaWNhbCBpbnRlcmZhY2UgdG8gcmV2aWV3IG1vZGlmaWVkIGZpbGVzLCBzdGFnZQogdGhlbSBpbnRvIHRoZSBpbmRleCwgZW50ZXIgYSBjb21taXQgbWVzc2FnZSBhbmQgcmVjb3JkIHRoZSBuZXcKIGNvbW1pdCBvbnRvIHRoZSBjdXJyZW50IGJyYW5jaC4gIFRoaXMgaW50ZXJmYWNlIGlzIGFuIGFsdGVybmF0aXZlCi10byB0aGUgbGVzcyBpbnRlcmFjdGl2ZSAnZ2l0LWNvbW1pdCcgcHJvZ3JhbS4KK3RvIHRoZSBsZXNzIGludGVyYWN0aXZlICdnaXQgY29tbWl0JyBwcm9ncmFtLgogCi0nZ2l0LWNpdG9vbCcgaXMgYWN0dWFsbHkgYSBzdGFuZGFyZCBhbGlhcyBmb3IgYGdpdCBndWkgY2l0b29sYC4KKydnaXQgY2l0b29sJyBpcyBhY3R1YWxseSBhIHN0YW5kYXJkIGFsaWFzIGZvciBgZ2l0IGd1aSBjaXRvb2xgLgogU2VlIGxpbmtnaXQ6Z2l0LWd1aVsxXSBmb3IgbW9yZSBkZXRhaWxzLgogCiBBdXRob3IKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNsZWFuLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNsZWFuLnR4dAppbmRleCBiZTg5NGFmLi5hODFjYjZjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jbGVhbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2xlYW4udHh0CkBAIC0yNywxMCArMjcsMTQgQEAKIC0tLS0tLS0KIC1kOjoKIAlSZW1vdmUgdW50cmFja2VkIGRpcmVjdG9yaWVzIGluIGFkZGl0aW9uIHRvIHVudHJhY2tlZCBmaWxlcy4KKwlJZiBhbiB1bnRyYWNrZWQgZGlyZWN0b3J5IGlzIG1hbmFnZWQgYnkgYSBkaWZmZXJlbnQgZ2l0CisJcmVwb3NpdG9yeSwgaXQgaXMgbm90IHJlbW92ZWQgYnkgZGVmYXVsdC4gIFVzZSAtZiBvcHRpb24gdHdpY2UKKwlpZiB5b3UgcmVhbGx5IHdhbnQgdG8gcmVtb3ZlIHN1Y2ggYSBkaXJlY3RvcnkuCiAKIC1mOjoKLQlJZiB0aGUgZ2l0IGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVzIGNsZWFuLnJlcXVpcmVGb3JjZSBhcyB0cnVlLAotCSdnaXQtY2xlYW4nIHdpbGwgcmVmdXNlIHRvIHJ1biB1bmxlc3MgZ2l2ZW4gLWYgb3IgLW4uCistLWZvcmNlOjoKKwlJZiB0aGUgZ2l0IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2xlYW4ucmVxdWlyZUZvcmNlIGlzIG5vdCBzZXQKKwl0byBmYWxzZSwgJ2dpdCBjbGVhbicgd2lsbCByZWZ1c2UgdG8gcnVuIHVubGVzcyBnaXZlbiAtZiBvciAtbi4KIAogLW46OgogLS1kcnktcnVuOjoKQEAgLTQ0LDcgKzQ4LDcgQEAKIC14OjoKIAlEb24ndCB1c2UgdGhlIGlnbm9yZSBydWxlcy4gIFRoaXMgYWxsb3dzIHJlbW92aW5nIGFsbCB1bnRyYWNrZWQKIAlmaWxlcywgaW5jbHVkaW5nIGJ1aWxkIHByb2R1Y3RzLiAgVGhpcyBjYW4gYmUgdXNlZCAocG9zc2libHkgaW4KLQljb25qdW5jdGlvbiB3aXRoICdnaXQtcmVzZXQnKSB0byBjcmVhdGUgYSBwcmlzdGluZQorCWNvbmp1bmN0aW9uIHdpdGggJ2dpdCByZXNldCcpIHRvIGNyZWF0ZSBhIHByaXN0aW5lCiAJd29ya2luZyBkaXJlY3RvcnkgdG8gdGVzdCBhIGNsZWFuIGJ1aWxkLgogCiAtWDo6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jbG9uZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jbG9uZS50eHQKaW5kZXggODdjMTNhYi4uZDE1Y2IxNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY2xvbmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNsb25lLnR4dApAQCAtMTEsMTYgKzExLDE3IEBACiBbdmVyc2VdCiAnZ2l0IGNsb25lJyBbLS10ZW1wbGF0ZT08dGVtcGxhdGVfZGlyZWN0b3J5Pl0KIAkgIFstbF0gWy1zXSBbLS1uby1oYXJkbGlua3NdIFstcV0gWy1uXSBbLS1iYXJlXSBbLS1taXJyb3JdCi0JICBbLW8gPG5hbWU+XSBbLXUgPHVwbG9hZC1wYWNrPl0gWy0tcmVmZXJlbmNlIDxyZXBvc2l0b3J5Pl0KLQkgIFstLWRlcHRoIDxkZXB0aD5dIFstLV0gPHJlcG9zaXRvcnk+IFs8ZGlyZWN0b3J5Pl0KKwkgIFstbyA8bmFtZT5dIFstYiA8bmFtZT5dIFstdSA8dXBsb2FkLXBhY2s+XSBbLS1yZWZlcmVuY2UgPHJlcG9zaXRvcnk+XQorCSAgWy0tZGVwdGggPGRlcHRoPl0gWy0tcmVjdXJzaXZlXSBbLS1dIDxyZXBvc2l0b3J5PiBbPGRpcmVjdG9yeT5dCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQogCiBDbG9uZXMgYSByZXBvc2l0b3J5IGludG8gYSBuZXdseSBjcmVhdGVkIGRpcmVjdG9yeSwgY3JlYXRlcwogcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGZvciBlYWNoIGJyYW5jaCBpbiB0aGUgY2xvbmVkIHJlcG9zaXRvcnkKLSh2aXNpYmxlIHVzaW5nIGBnaXQgYnJhbmNoIC1yYCksIGFuZCBjcmVhdGVzIGFuZCBjaGVja3Mgb3V0IGFuIGluaXRpYWwKLWJyYW5jaCBlcXVhbCB0byB0aGUgY2xvbmVkIHJlcG9zaXRvcnkncyBjdXJyZW50bHkgYWN0aXZlIGJyYW5jaC4KKyh2aXNpYmxlIHVzaW5nIGBnaXQgYnJhbmNoIC1yYCksIGFuZCBjcmVhdGVzIGFuZCBjaGVja3Mgb3V0IGFuCitpbml0aWFsIGJyYW5jaCB0aGF0IGlzIGZvcmtlZCBmcm9tIHRoZSBjbG9uZWQgcmVwb3NpdG9yeSdzCitjdXJyZW50bHkgYWN0aXZlIGJyYW5jaC4KIAogQWZ0ZXIgdGhlIGNsb25lLCBhIHBsYWluIGBnaXQgZmV0Y2hgIHdpdGhvdXQgYXJndW1lbnRzIHdpbGwgdXBkYXRlCiBhbGwgdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2hlcywgYW5kIGEgYGdpdCBwdWxsYCB3aXRob3V0CkBAIC0yOCw3ICsyOSw3IEBACiBjdXJyZW50IG1hc3RlciBicmFuY2gsIGlmIGFueS4KIAogVGhpcyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaXMgYWNoaWV2ZWQgYnkgY3JlYXRpbmcgcmVmZXJlbmNlcyB0bwotdGhlIHJlbW90ZSBicmFuY2ggaGVhZHMgdW5kZXIgYCRHSVRfRElSL3JlZnMvcmVtb3Rlcy9vcmlnaW5gIGFuZAordGhlIHJlbW90ZSBicmFuY2ggaGVhZHMgdW5kZXIgYHJlZnMvcmVtb3Rlcy9vcmlnaW5gIGFuZAogYnkgaW5pdGlhbGl6aW5nIGByZW1vdGUub3JpZ2luLnVybGAgYW5kIGByZW1vdGUub3JpZ2luLmZldGNoYAogY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuCiAKQEAgLTM4LDcgKzM5LDcgQEAKIC0tbG9jYWw6OgogLWw6OgogCVdoZW4gdGhlIHJlcG9zaXRvcnkgdG8gY2xvbmUgZnJvbSBpcyBvbiBhIGxvY2FsIG1hY2hpbmUsCi0JdGhpcyBmbGFnIGJ5cGFzc2VzIG5vcm1hbCAiZ2l0IGF3YXJlIiB0cmFuc3BvcnQKKwl0aGlzIGZsYWcgYnlwYXNzZXMgdGhlIG5vcm1hbCAiZ2l0IGF3YXJlIiB0cmFuc3BvcnQKIAltZWNoYW5pc20gYW5kIGNsb25lcyB0aGUgcmVwb3NpdG9yeSBieSBtYWtpbmcgYSBjb3B5IG9mCiAJSEVBRCBhbmQgZXZlcnl0aGluZyB1bmRlciBvYmplY3RzIGFuZCByZWZzIGRpcmVjdG9yaWVzLgogCVRoZSBmaWxlcyB1bmRlciBgLmdpdC9vYmplY3RzL2AgZGlyZWN0b3J5IGFyZSBoYXJkbGlua2VkCkBAIC01OSw3ICs2MCw3IEBACiAtczo6CiAJV2hlbiB0aGUgcmVwb3NpdG9yeSB0byBjbG9uZSBpcyBvbiB0aGUgbG9jYWwgbWFjaGluZSwKIAlpbnN0ZWFkIG9mIHVzaW5nIGhhcmQgbGlua3MsIGF1dG9tYXRpY2FsbHkgc2V0dXAKLQkuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIHRvIHNoYXJlIHRoZSBvYmplY3RzCisJYC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXNgIHRvIHNoYXJlIHRoZSBvYmplY3RzCiAJd2l0aCB0aGUgc291cmNlIHJlcG9zaXRvcnkuICBUaGUgcmVzdWx0aW5nIHJlcG9zaXRvcnkKIAlzdGFydHMgb3V0IHdpdGhvdXQgYW55IG9iamVjdCBvZiBpdHMgb3duLgogKwpAQCAtNjgsMzIgKzY5LDQ2IEBACiByZXBvc2l0b3J5IHVzaW5nIHRoaXMgb3B0aW9uIGFuZCB0aGVuIGRlbGV0ZSBicmFuY2hlcyAob3IgdXNlIGFueQogb3RoZXIgZ2l0IGNvbW1hbmQgdGhhdCBtYWtlcyBhbnkgZXhpc3RpbmcgY29tbWl0IHVucmVmZXJlbmNlZCkgaW4gdGhlCiBzb3VyY2UgcmVwb3NpdG9yeSwgc29tZSBvYmplY3RzIG1heSBiZWNvbWUgdW5yZWZlcmVuY2VkIChvciBkYW5nbGluZykuCi1UaGVzZSBvYmplY3RzIG1heSBiZSByZW1vdmVkIGJ5IG5vcm1hbCBnaXQgb3BlcmF0aW9ucyAoc3VjaCBhcyAnZ2l0LWNvbW1pdCcpCitUaGVzZSBvYmplY3RzIG1heSBiZSByZW1vdmVkIGJ5IG5vcm1hbCBnaXQgb3BlcmF0aW9ucyAoc3VjaCBhcyBgZ2l0IGNvbW1pdGApCiB3aGljaCBhdXRvbWF0aWNhbGx5IGNhbGwgYGdpdCBnYyAtLWF1dG9gLiAoU2VlIGxpbmtnaXQ6Z2l0LWdjWzFdLikKIElmIHRoZXNlIG9iamVjdHMgYXJlIHJlbW92ZWQgYW5kIHdlcmUgcmVmZXJlbmNlZCBieSB0aGUgY2xvbmVkIHJlcG9zaXRvcnksCiB0aGVuIHRoZSBjbG9uZWQgcmVwb3NpdG9yeSB3aWxsIGJlY29tZSBjb3JydXB0LgotCi0KKysKK05vdGUgdGhhdCBydW5uaW5nIGBnaXQgcmVwYWNrYCB3aXRob3V0IHRoZSBgLWxgIG9wdGlvbiBpbiBhIHJlcG9zaXRvcnkKK2Nsb25lZCB3aXRoIGAtc2Agd2lsbCBjb3B5IG9iamVjdHMgZnJvbSB0aGUgc291cmNlIHJlcG9zaXRvcnkgaW50byBhIHBhY2sKK2luIHRoZSBjbG9uZWQgcmVwb3NpdG9yeSwgcmVtb3ZpbmcgdGhlIGRpc2sgc3BhY2Ugc2F2aW5ncyBvZiBgY2xvbmUgLXNgLgorSXQgaXMgc2FmZSwgaG93ZXZlciwgdG8gcnVuIGBnaXQgZ2NgLCB3aGljaCB1c2VzIHRoZSBgLWxgIG9wdGlvbiBieQorZGVmYXVsdC4KKysKK0lmIHlvdSB3YW50IHRvIGJyZWFrIHRoZSBkZXBlbmRlbmN5IG9mIGEgcmVwb3NpdG9yeSBjbG9uZWQgd2l0aCBgLXNgIG9uCitpdHMgc291cmNlIHJlcG9zaXRvcnksIHlvdSBjYW4gc2ltcGx5IHJ1biBgZ2l0IHJlcGFjayAtYWAgdG8gY29weSBhbGwKK29iamVjdHMgZnJvbSB0aGUgc291cmNlIHJlcG9zaXRvcnkgaW50byBhIHBhY2sgaW4gdGhlIGNsb25lZCByZXBvc2l0b3J5LgogCiAtLXJlZmVyZW5jZSA8cmVwb3NpdG9yeT46OgogCUlmIHRoZSByZWZlcmVuY2UgcmVwb3NpdG9yeSBpcyBvbiB0aGUgbG9jYWwgbWFjaGluZSwKLQlhdXRvbWF0aWNhbGx5IHNldHVwIC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgdG8KKwlhdXRvbWF0aWNhbGx5IHNldHVwIGAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzYCB0bwogCW9idGFpbiBvYmplY3RzIGZyb20gdGhlIHJlZmVyZW5jZSByZXBvc2l0b3J5LiAgVXNpbmcKIAlhbiBhbHJlYWR5IGV4aXN0aW5nIHJlcG9zaXRvcnkgYXMgYW4gYWx0ZXJuYXRlIHdpbGwKIAlyZXF1aXJlIGZld2VyIG9iamVjdHMgdG8gYmUgY29waWVkIGZyb20gdGhlIHJlcG9zaXRvcnkKIAliZWluZyBjbG9uZWQsIHJlZHVjaW5nIG5ldHdvcmsgYW5kIGxvY2FsIHN0b3JhZ2UgY29zdHMuCiArCi0qTk9URSo6IHNlZSBOT1RFIHRvIC0tc2hhcmVkIG9wdGlvbi4KKypOT1RFKjogc2VlIHRoZSBOT1RFIGZvciB0aGUgYC0tc2hhcmVkYCBvcHRpb24uCiAKIC0tcXVpZXQ6OgogLXE6OgotCU9wZXJhdGUgcXVpZXRseS4gIFRoaXMgZmxhZyBpcyBhbHNvIHBhc3NlZCB0byB0aGUgYHJzeW5jJworCU9wZXJhdGUgcXVpZXRseS4gIFByb2dyZXNzIGlzIG5vdCByZXBvcnRlZCB0byB0aGUgc3RhbmRhcmQKKwllcnJvciBzdHJlYW0uIFRoaXMgZmxhZyBpcyBhbHNvIHBhc3NlZCB0byB0aGUgYHJzeW5jJwogCWNvbW1hbmQgd2hlbiBnaXZlbi4KIAogLS12ZXJib3NlOjoKIC12OjoKLQlEaXNwbGF5IHRoZSBwcm9ncmVzc2JhciwgZXZlbiBpbiBjYXNlIHRoZSBzdGFuZGFyZCBvdXRwdXQgaXMgbm90Ci0JYSB0ZXJtaW5hbC4KKwlSdW4gdmVyYm9zZWx5LgorCistLXByb2dyZXNzOjoKKwlQcm9ncmVzcyBzdGF0dXMgaXMgcmVwb3J0ZWQgb24gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbQorCWJ5IGRlZmF1bHQgd2hlbiBpdCBpcyBhdHRhY2hlZCB0byBhIHRlcm1pbmFsLCB1bmxlc3MgLXEKKwlpcyBzcGVjaWZpZWQuIFRoaXMgZmxhZyBmb3JjZXMgcHJvZ3Jlc3Mgc3RhdHVzIGV2ZW4gaWYgdGhlCisJc3RhbmRhcmQgZXJyb3Igc3RyZWFtIGlzIG5vdCBkaXJlY3RlZCB0byBhIHRlcm1pbmFsLgogCiAtLW5vLWNoZWNrb3V0OjoKIC1uOjoKQEAgLTExMiwxMiArMTI3LDE5IEBACiAJY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgYXJlIGNyZWF0ZWQuCiAKIC0tbWlycm9yOjoKLQlTZXQgdXAgYSBtaXJyb3Igb2YgdGhlIHJlbW90ZSByZXBvc2l0b3J5LiAgVGhpcyBpbXBsaWVzIC0tYmFyZS4KKwlTZXQgdXAgYSBtaXJyb3Igb2YgdGhlIHJlbW90ZSByZXBvc2l0b3J5LiAgVGhpcyBpbXBsaWVzIGAtLWJhcmVgLgogCiAtLW9yaWdpbiA8bmFtZT46OgogLW8gPG5hbWU+OjoKLQlJbnN0ZWFkIG9mIHVzaW5nIHRoZSByZW1vdGUgbmFtZSAnb3JpZ2luJyB0byBrZWVwIHRyYWNrCi0Jb2YgdGhlIHVwc3RyZWFtIHJlcG9zaXRvcnksIHVzZSA8bmFtZT4uCisJSW5zdGVhZCBvZiB1c2luZyB0aGUgcmVtb3RlIG5hbWUgYG9yaWdpbmAgdG8ga2VlcCB0cmFjaworCW9mIHRoZSB1cHN0cmVhbSByZXBvc2l0b3J5LCB1c2UgYDxuYW1lPmAuCisKKy0tYnJhbmNoIDxuYW1lPjo6CistYiA8bmFtZT46OgorCUluc3RlYWQgb2YgcG9pbnRpbmcgdGhlIG5ld2x5IGNyZWF0ZWQgSEVBRCB0byB0aGUgYnJhbmNoIHBvaW50ZWQKKwl0byBieSB0aGUgY2xvbmVkIHJlcG9zaXRvcnkncyBIRUFELCBwb2ludCB0byBgPG5hbWU+YCBicmFuY2gKKwlpbnN0ZWFkLiBJbiBhIG5vbi1iYXJlIHJlcG9zaXRvcnksIHRoaXMgaXMgdGhlIGJyYW5jaCB0aGF0IHdpbGwKKwliZSBjaGVja2VkIG91dC4KIAogLS11cGxvYWQtcGFjayA8dXBsb2FkLXBhY2s+OjoKIC11IDx1cGxvYWQtcGFjaz46OgpAQCAtMTM5LDYgKzE2MSwxNCBAQAogCXdpdGggYSBsb25nIGhpc3RvcnksIGFuZCB3b3VsZCB3YW50IHRvIHNlbmQgaW4gZml4ZXMKIAlhcyBwYXRjaGVzLgogCistLXJlY3Vyc2l2ZTo6CisJQWZ0ZXIgdGhlIGNsb25lIGlzIGNyZWF0ZWQsIGluaXRpYWxpemUgYWxsIHN1Ym1vZHVsZXMgd2l0aGluLAorCXVzaW5nIHRoZWlyIGRlZmF1bHQgc2V0dGluZ3MuIFRoaXMgaXMgZXF1aXZhbGVudCB0byBydW5uaW5nCisJYGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZWAgaW1tZWRpYXRlbHkgYWZ0ZXIKKwl0aGUgY2xvbmUgaXMgZmluaXNoZWQuIFRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgaWYgdGhlIGNsb25lZAorCXJlcG9zaXRvcnkgZG9lcyBub3QgaGF2ZSBhIHdvcmt0cmVlL2NoZWNrb3V0IChpLmUuIGlmIGFueSBvZgorCWAtLW5vLWNoZWNrb3V0YC9gLW5gLCBgLS1iYXJlYCwgb3IgYC0tbWlycm9yYCBpcyBnaXZlbikKKwogPHJlcG9zaXRvcnk+OjoKIAlUaGUgKHBvc3NpYmx5IHJlbW90ZSkgcmVwb3NpdG9yeSB0byBjbG9uZSBmcm9tLiAgU2VlIHRoZQogCTw8VVJMUyxVUkxTPj4gc2VjdGlvbiBiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzcGVjaWZ5aW5nCkBAIC0xNDcsOCArMTc3LDggQEAKIDxkaXJlY3Rvcnk+OjoKIAlUaGUgbmFtZSBvZiBhIG5ldyBkaXJlY3RvcnkgdG8gY2xvbmUgaW50by4gIFRoZSAiaHVtYW5pc2giCiAJcGFydCBvZiB0aGUgc291cmNlIHJlcG9zaXRvcnkgaXMgdXNlZCBpZiBubyBkaXJlY3RvcnkgaXMKLQlleHBsaWNpdGx5IGdpdmVuICgicmVwbyIgZm9yICIvcGF0aC90by9yZXBvLmdpdCIgYW5kICJmb28iCi0JZm9yICJob3N0Lnh6OmZvby8uZ2l0IikuICBDbG9uaW5nIGludG8gYW4gZXhpc3RpbmcgZGlyZWN0b3J5CisJZXhwbGljaXRseSBnaXZlbiAoYHJlcG9gIGZvciBgL3BhdGgvdG8vcmVwby5naXRgIGFuZCBgZm9vYAorCWZvciBgaG9zdC54ejpmb28vLmdpdGApLiAgQ2xvbmluZyBpbnRvIGFuIGV4aXN0aW5nIGRpcmVjdG9yeQogCWlzIG9ubHkgYWxsb3dlZCBpZiB0aGUgZGlyZWN0b3J5IGlzIGVtcHR5LgogCiA6Z2l0LWNsb25lOiAxCkBAIC0xNTcsNyArMTg3LDcgQEAKIEV4YW1wbGVzCiAtLS0tLS0tLQogCi1DbG9uZSBmcm9tIHVwc3RyZWFtOjoKKyogQ2xvbmUgZnJvbSB1cHN0cmVhbToKICsKIC0tLS0tLS0tLS0tLQogJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS8uLi4vbGludXgtMi42IG15Mi42CkBAIC0xNjYsNyArMTk2LDcgQEAKIC0tLS0tLS0tLS0tLQogCiAKLU1ha2UgYSBsb2NhbCBjbG9uZSB0aGF0IGJvcnJvd3MgZnJvbSB0aGUgY3VycmVudCBkaXJlY3RvcnksIHdpdGhvdXQgY2hlY2tpbmcgdGhpbmdzIG91dDo6CisqIE1ha2UgYSBsb2NhbCBjbG9uZSB0aGF0IGJvcnJvd3MgZnJvbSB0aGUgY3VycmVudCBkaXJlY3RvcnksIHdpdGhvdXQgY2hlY2tpbmcgdGhpbmdzIG91dDoKICsKIC0tLS0tLS0tLS0tLQogJCBnaXQgY2xvbmUgLWwgLXMgLW4gLiAuLi9jb3B5CkBAIC0xNzUsNyArMjA1LDcgQEAKIC0tLS0tLS0tLS0tLQogCiAKLUNsb25lIGZyb20gdXBzdHJlYW0gd2hpbGUgYm9ycm93aW5nIGZyb20gYW4gZXhpc3RpbmcgbG9jYWwgZGlyZWN0b3J5OjoKKyogQ2xvbmUgZnJvbSB1cHN0cmVhbSB3aGlsZSBib3Jyb3dpbmcgZnJvbSBhbiBleGlzdGluZyBsb2NhbCBkaXJlY3Rvcnk6CiArCiAtLS0tLS0tLS0tLS0KICQgZ2l0IGNsb25lIC0tcmVmZXJlbmNlIG15Mi42IFwKQEAgLTE4NSwxNCArMjE1LDE0IEBACiAtLS0tLS0tLS0tLS0KIAogCi1DcmVhdGUgYSBiYXJlIHJlcG9zaXRvcnkgdG8gcHVibGlzaCB5b3VyIGNoYW5nZXMgdG8gdGhlIHB1YmxpYzo6CisqIENyZWF0ZSBhIGJhcmUgcmVwb3NpdG9yeSB0byBwdWJsaXNoIHlvdXIgY2hhbmdlcyB0byB0aGUgcHVibGljOgogKwogLS0tLS0tLS0tLS0tCiAkIGdpdCBjbG9uZSAtLWJhcmUgLWwgL2hvbWUvcHJvai8uZ2l0IC9wdWIvc2NtL3Byb2ouZ2l0CiAtLS0tLS0tLS0tLS0KIAogCi1DcmVhdGUgYSByZXBvc2l0b3J5IG9uIHRoZSBrZXJuZWwub3JnIG1hY2hpbmUgdGhhdCBib3Jyb3dzIGZyb20gTGludXM6OgorKiBDcmVhdGUgYSByZXBvc2l0b3J5IG9uIHRoZSBrZXJuZWwub3JnIG1hY2hpbmUgdGhhdCBib3Jyb3dzIGZyb20gTGludXM6CiArCiAtLS0tLS0tLS0tLS0KICQgZ2l0IGNsb25lIC0tYmFyZSAtbCAtcyAvcHViL3NjbS8uLi4vdG9ydmFsZHMvbGludXgtMi42LmdpdCBcCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQtdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQtdHJlZS50eHQKaW5kZXggYjg4MzRiYS4uNjE4ODg1NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LXRyZWUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC10cmVlLnR4dApAQCAtNzAsOSArNzAsMTAgQEAKIHByZXNlbnQsIHN5c3RlbSB1c2VyIG5hbWUgYW5kIGZ1bGx5IHF1YWxpZmllZCBob3N0bmFtZS4KIAogQSBjb21taXQgY29tbWVudCBpcyByZWFkIGZyb20gc3RkaW4uIElmIGEgY2hhbmdlbG9nCi1lbnRyeSBpcyBub3QgcHJvdmlkZWQgdmlhICI8IiByZWRpcmVjdGlvbiwgJ2dpdC1jb21taXQtdHJlZScgd2lsbCBqdXN0IHdhaXQKK2VudHJ5IGlzIG5vdCBwcm92aWRlZCB2aWEgIjwiIHJlZGlyZWN0aW9uLCAnZ2l0IGNvbW1pdC10cmVlJyB3aWxsIGp1c3Qgd2FpdAogZm9yIG9uZSB0byBiZSBlbnRlcmVkIGFuZCB0ZXJtaW5hdGVkIHdpdGggXkQuCiAKK2luY2x1ZGU6OmRhdGUtZm9ybWF0cy50eHRbXQogCiBEaWFnbm9zdGljcwogLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQudHh0CmluZGV4IGI1ZDgxYmUuLjY0ZmI0NTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LnR4dApAQCAtOCwxMCArOCwxMSBAQAogU1lOT1BTSVMKIC0tLS0tLS0tCiBbdmVyc2VdCi0nZ2l0IGNvbW1pdCcgWy1hIHwgLS1pbnRlcmFjdGl2ZV0gWy1zXSBbLXZdIFstdTxtb2RlPl0gWy0tYW1lbmRdCi0JICAgWygtYyB8IC1DKSA8Y29tbWl0Pl0gWy1GIDxmaWxlPiB8IC1tIDxtc2c+XQorJ2dpdCBjb21taXQnIFstYSB8IC0taW50ZXJhY3RpdmVdIFstc10gWy12XSBbLXU8bW9kZT5dIFstLWFtZW5kXSBbLS1kcnktcnVuXQorCSAgIFsoLWMgfCAtQykgPGNvbW1pdD5dIFstRiA8ZmlsZT4gfCAtbSA8bXNnPl0gWy0tcmVzZXQtYXV0aG9yXQogCSAgIFstLWFsbG93LWVtcHR5XSBbLS1uby12ZXJpZnldIFstZV0gWy0tYXV0aG9yPTxhdXRob3I+XQotCSAgIFstLWNsZWFudXA9PG1vZGU+XSBbLS1dIFtbLWkgfCAtbyBdPGZpbGU+Li4uXQorCSAgIFstLWRhdGU9PGRhdGU+XSBbLS1jbGVhbnVwPTxtb2RlPl0gWy0tc3RhdHVzIHwgLS1uby1zdGF0dXNdIFstLV0KKwkgICBbWy1pIHwgLW8gXTxmaWxlPi4uLl0KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC0yMCwxMSArMjEsMTEgQEAKIAogVGhlIGNvbnRlbnQgdG8gYmUgYWRkZWQgY2FuIGJlIHNwZWNpZmllZCBpbiBzZXZlcmFsIHdheXM6CiAKLTEuIGJ5IHVzaW5nICdnaXQtYWRkJyB0byBpbmNyZW1lbnRhbGx5ICJhZGQiIGNoYW5nZXMgdG8gdGhlCisxLiBieSB1c2luZyAnZ2l0IGFkZCcgdG8gaW5jcmVtZW50YWxseSAiYWRkIiBjaGFuZ2VzIHRvIHRoZQogICAgaW5kZXggYmVmb3JlIHVzaW5nIHRoZSAnY29tbWl0JyBjb21tYW5kIChOb3RlOiBldmVuIG1vZGlmaWVkCiAgICBmaWxlcyBtdXN0IGJlICJhZGRlZCIpOwogCi0yLiBieSB1c2luZyAnZ2l0LXJtJyB0byByZW1vdmUgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlCisyLiBieSB1c2luZyAnZ2l0IHJtJyB0byByZW1vdmUgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlCiAgICBhbmQgdGhlIGluZGV4LCBhZ2FpbiBiZWZvcmUgdXNpbmcgdGhlICdjb21taXQnIGNvbW1hbmQ7CiAKIDMuIGJ5IGxpc3RpbmcgZmlsZXMgYXMgYXJndW1lbnRzIHRvIHRoZSAnY29tbWl0JyBjb21tYW5kLCBpbiB3aGljaApAQCAtNDAsMTUgKzQxLDE0IEBACiAKIDUuIGJ5IHVzaW5nIHRoZSAtLWludGVyYWN0aXZlIHN3aXRjaCB3aXRoIHRoZSAnY29tbWl0JyBjb21tYW5kIHRvIGRlY2lkZSBvbmUKICAgIGJ5IG9uZSB3aGljaCBmaWxlcyBzaG91bGQgYmUgcGFydCBvZiB0aGUgY29tbWl0LCBiZWZvcmUgZmluYWxpemluZyB0aGUKLSAgIG9wZXJhdGlvbi4gIEN1cnJlbnRseSwgdGhpcyBpcyBkb25lIGJ5IGludm9raW5nICdnaXQtYWRkIC0taW50ZXJhY3RpdmUnLgorICAgb3BlcmF0aW9uLiAgQ3VycmVudGx5LCB0aGlzIGlzIGRvbmUgYnkgaW52b2tpbmcgJ2dpdCBhZGQgLS1pbnRlcmFjdGl2ZScuCiAKLVRoZSAnZ2l0LXN0YXR1cycgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBvYnRhaW4gYQorVGhlIGAtLWRyeS1ydW5gIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBvYnRhaW4gYQogc3VtbWFyeSBvZiB3aGF0IGlzIGluY2x1ZGVkIGJ5IGFueSBvZiB0aGUgYWJvdmUgZm9yIHRoZSBuZXh0Ci1jb21taXQgYnkgZ2l2aW5nIHRoZSBzYW1lIHNldCBvZiBwYXJhbWV0ZXJzIHlvdSB3b3VsZCBnaXZlIHRvCi10aGlzIGNvbW1hbmQuCitjb21taXQgYnkgZ2l2aW5nIHRoZSBzYW1lIHNldCBvZiBwYXJhbWV0ZXJzIChvcHRpb25zIGFuZCBwYXRocykuCiAKIElmIHlvdSBtYWtlIGEgY29tbWl0IGFuZCB0aGVuIGZpbmQgYSBtaXN0YWtlIGltbWVkaWF0ZWx5IGFmdGVyCi10aGF0LCB5b3UgY2FuIHJlY292ZXIgZnJvbSBpdCB3aXRoICdnaXQtcmVzZXQnLgordGhhdCwgeW91IGNhbiByZWNvdmVyIGZyb20gaXQgd2l0aCAnZ2l0IHJlc2V0Jy4KIAogCiBPUFRJT05TCkBAIC03MCw2ICs3MCwyNSBAQAogCUxpa2UgJy1DJywgYnV0IHdpdGggJy1jJyB0aGUgZWRpdG9yIGlzIGludm9rZWQsIHNvIHRoYXQKIAl0aGUgdXNlciBjYW4gZnVydGhlciBlZGl0IHRoZSBjb21taXQgbWVzc2FnZS4KIAorLS1yZXNldC1hdXRob3I6OgorCVdoZW4gdXNlZCB3aXRoIC1DLy1jLy0tYW1lbmQgb3B0aW9ucywgZGVjbGFyZSB0aGF0IHRoZQorCWF1dGhvcnNoaXAgb2YgdGhlIHJlc3VsdGluZyBjb21taXQgbm93IGJlbG9uZ3Mgb2YgdGhlIGNvbW1pdHRlci4KKwlUaGlzIGFsc28gcmVuZXdzIHRoZSBhdXRob3IgdGltZXN0YW1wLgorCistLXNob3J0OjoKKwlXaGVuIGRvaW5nIGEgZHJ5LXJ1biwgZ2l2ZSB0aGUgb3V0cHV0IGluIHRoZSBzaG9ydC1mb3JtYXQuIFNlZQorCWxpbmtnaXQ6Z2l0LXN0YXR1c1sxXSBmb3IgZGV0YWlscy4gSW1wbGllcyBgLS1kcnktcnVuYC4KKworLS1wb3JjZWxhaW46OgorCVdoZW4gZG9pbmcgYSBkcnktcnVuLCBnaXZlIHRoZSBvdXRwdXQgaW4gYSBwb3JjZWxhaW4tcmVhZHkKKwlmb3JtYXQuIFNlZSBsaW5rZ2l0OmdpdC1zdGF0dXNbMV0gZm9yIGRldGFpbHMuIEltcGxpZXMKKwlgLS1kcnktcnVuYC4KKworLXo6OgorCVdoZW4gc2hvd2luZyBgc2hvcnRgIG9yIGBwb3JjZWxhaW5gIHN0YXR1cyBvdXRwdXQsIHRlcm1pbmF0ZQorCWVudHJpZXMgaW4gdGhlIHN0YXR1cyBvdXRwdXQgd2l0aCBOVUwsIGluc3RlYWQgb2YgTEYuIElmIG5vCisJZm9ybWF0IGlzIGdpdmVuLCBpbXBsaWVzIHRoZSBgLS1wb3JjZWxhaW5gIG91dHB1dCBmb3JtYXQuCisKIC1GIDxmaWxlPjo6CiAtLWZpbGU9PGZpbGU+OjoKIAlUYWtlIHRoZSBjb21taXQgbWVzc2FnZSBmcm9tIHRoZSBnaXZlbiBmaWxlLiAgVXNlICctJyB0bwpAQCAtODEsNiArMTAwLDkgQEAKIAlhbiBleGlzdGluZyBjb21taXQgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBzdHJpbmcgYW5kIGl0cyBhdXRob3IKIAluYW1lIGlzIHVzZWQuCiAKKy0tZGF0ZT08ZGF0ZT46OgorCU92ZXJyaWRlIHRoZSBhdXRob3IgZGF0ZSB1c2VkIGluIHRoZSBjb21taXQuCisKIC1tIDxtc2c+OjoKIC0tbWVzc2FnZT08bXNnPjo6CiAJVXNlIHRoZSBnaXZlbiA8bXNnPiBhcyB0aGUgY29tbWl0IG1lc3NhZ2UuCkBAIC0xNjMsNyArMTg1LDcgQEAKIAlNYWtlIGEgY29tbWl0IG9ubHkgZnJvbSB0aGUgcGF0aHMgc3BlY2lmaWVkIG9uIHRoZQogCWNvbW1hbmQgbGluZSwgZGlzcmVnYXJkaW5nIGFueSBjb250ZW50cyB0aGF0IGhhdmUgYmVlbgogCXN0YWdlZCBzbyBmYXIuIFRoaXMgaXMgdGhlIGRlZmF1bHQgbW9kZSBvZiBvcGVyYXRpb24gb2YKLQknZ2l0LWNvbW1pdCcgaWYgYW55IHBhdGhzIGFyZSBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLAorCSdnaXQgY29tbWl0JyBpZiBhbnkgcGF0aHMgYXJlIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUsCiAJaW4gd2hpY2ggY2FzZSB0aGlzIG9wdGlvbiBjYW4gYmUgb21pdHRlZC4KIAlJZiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQgdG9nZXRoZXIgd2l0aCAnLS1hbWVuZCcsIHRoZW4KIAlubyBwYXRocyBuZWVkIHRvIGJlIHNwZWNpZmllZCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gYW1lbmQKQEAgLTE3NSwxMyArMTk3LDEzIEBACiAJU2hvdyB1bnRyYWNrZWQgZmlsZXMgKERlZmF1bHQ6ICdhbGwnKS4KICsKIFRoZSBtb2RlIHBhcmFtZXRlciBpcyBvcHRpb25hbCwgYW5kIGlzIHVzZWQgdG8gc3BlY2lmeQotdGhlIGhhbmRsaW5nIG9mIHVudHJhY2tlZCBmaWxlcy4gVGhlIHBvc3NpYmxlIG9wdGlvbnMgYXJlOgordGhlIGhhbmRsaW5nIG9mIHVudHJhY2tlZCBmaWxlcy4KICsKLS0tCitUaGUgcG9zc2libGUgb3B0aW9ucyBhcmU6CisrCiAJLSAnbm8nICAgICAtIFNob3cgbm8gdW50cmFja2VkIGZpbGVzCiAJLSAnbm9ybWFsJyAtIFNob3dzIHVudHJhY2tlZCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMKIAktICdhbGwnICAgIC0gQWxzbyBzaG93cyBpbmRpdmlkdWFsIGZpbGVzIGluIHVudHJhY2tlZCBkaXJlY3Rvcmllcy4KLS0tCiArCiBTZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdIGZvciBjb25maWd1cmF0aW9uIHZhcmlhYmxlCiB1c2VkIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBmb3Igd2hlbiB0aGUgb3B0aW9uIGlzIG5vdApAQCAtMTk4LDYgKzIyMCwyMiBAQAogLS1xdWlldDo6CiAJU3VwcHJlc3MgY29tbWl0IHN1bW1hcnkgbWVzc2FnZS4KIAorLS1kcnktcnVuOjoKKwlEbyBub3QgY3JlYXRlIGEgY29tbWl0LCBidXQgc2hvdyBhIGxpc3Qgb2YgcGF0aHMgdGhhdCBhcmUKKwl0byBiZSBjb21taXR0ZWQsIHBhdGhzIHdpdGggbG9jYWwgY2hhbmdlcyB0aGF0IHdpbGwgYmUgbGVmdAorCXVuY29tbWl0dGVkIGFuZCBwYXRocyB0aGF0IGFyZSB1bnRyYWNrZWQuCisKKy0tc3RhdHVzOjoKKwlJbmNsdWRlIHRoZSBvdXRwdXQgb2YgbGlua2dpdDpnaXQtc3RhdHVzWzFdIGluIHRoZSBjb21taXQKKwltZXNzYWdlIHRlbXBsYXRlIHdoZW4gdXNpbmcgYW4gZWRpdG9yIHRvIHByZXBhcmUgdGhlIGNvbW1pdAorCW1lc3NhZ2UuICBEZWZhdWx0cyB0byBvbiwgYnV0IGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlCisJY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjb21taXQuc3RhdHVzLgorCistLW5vLXN0YXR1czo6CisJRG8gbm90IGluY2x1ZGUgdGhlIG91dHB1dCBvZiBsaW5rZ2l0OmdpdC1zdGF0dXNbMV0gaW4gdGhlCisJY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUgd2hlbiB1c2luZyBhbiBlZGl0b3IgdG8gcHJlcGFyZSB0aGUKKwlkZWZhdWx0IGNvbW1pdCBtZXNzYWdlLgorCiBcLS06OgogCURvIG5vdCBpbnRlcnByZXQgYW55IG1vcmUgYXJndW1lbnRzIGFzIG9wdGlvbnMuCiAKQEAgLTIwOCwxNSArMjQ2LDE3IEBACiAJdGhlc2UgZmlsZXMgYXJlIGFsc28gc3RhZ2VkIGZvciB0aGUgbmV4dCBjb21taXQgb24gdG9wCiAJb2Ygd2hhdCBoYXZlIGJlZW4gc3RhZ2VkIGJlZm9yZS4KIAorOmdpdC1jb21taXQ6IDEKK2luY2x1ZGU6OmRhdGUtZm9ybWF0cy50eHRbXQogCiBFWEFNUExFUwogLS0tLS0tLS0KIFdoZW4gcmVjb3JkaW5nIHlvdXIgb3duIHdvcmssIHRoZSBjb250ZW50cyBvZiBtb2RpZmllZCBmaWxlcyBpbgogeW91ciB3b3JraW5nIHRyZWUgYXJlIHRlbXBvcmFyaWx5IHN0b3JlZCB0byBhIHN0YWdpbmcgYXJlYQotY2FsbGVkIHRoZSAiaW5kZXgiIHdpdGggJ2dpdC1hZGQnLiAgQSBmaWxlIGNhbiBiZQorY2FsbGVkIHRoZSAiaW5kZXgiIHdpdGggJ2dpdCBhZGQnLiAgQSBmaWxlIGNhbiBiZQogcmV2ZXJ0ZWQgYmFjaywgb25seSBpbiB0aGUgaW5kZXggYnV0IG5vdCBpbiB0aGUgd29ya2luZyB0cmVlLAogdG8gdGhhdCBvZiB0aGUgbGFzdCBjb21taXQgd2l0aCBgZ2l0IHJlc2V0IEhFQUQgLS0gPGZpbGU+YCwKLXdoaWNoIGVmZmVjdGl2ZWx5IHJldmVydHMgJ2dpdC1hZGQnIGFuZCBwcmV2ZW50cyB0aGUgY2hhbmdlcyB0bword2hpY2ggZWZmZWN0aXZlbHkgcmV2ZXJ0cyAnZ2l0IGFkZCcgYW5kIHByZXZlbnRzIHRoZSBjaGFuZ2VzIHRvCiB0aGlzIGZpbGUgZnJvbSBwYXJ0aWNpcGF0aW5nIGluIHRoZSBuZXh0IGNvbW1pdC4gIEFmdGVyIGJ1aWxkaW5nCiB0aGUgc3RhdGUgdG8gYmUgY29tbWl0dGVkIGluY3JlbWVudGFsbHkgd2l0aCB0aGVzZSBjb21tYW5kcywKIGBnaXQgY29tbWl0YCAod2l0aG91dCBhbnkgcGF0aG5hbWUgcGFyYW1ldGVyKSBpcyB1c2VkIHRvIHJlY29yZCB3aGF0CkBAIC0yNzIsMTMgKzMxMiwxMyBAQAogdGhpcyBzZWNvbmQgY29tbWl0IHdvdWxkIHJlY29yZCB0aGUgY2hhbmdlcyB0byBgaGVsbG8uY2AgYW5kCiBgaGVsbG8uaGAgYXMgZXhwZWN0ZWQuCiAKLUFmdGVyIGEgbWVyZ2UgKGluaXRpYXRlZCBieSAnZ2l0LW1lcmdlJyBvciAnZ2l0LXB1bGwnKSBzdG9wcworQWZ0ZXIgYSBtZXJnZSAoaW5pdGlhdGVkIGJ5ICdnaXQgbWVyZ2UnIG9yICdnaXQgcHVsbCcpIHN0b3BzCiBiZWNhdXNlIG9mIGNvbmZsaWN0cywgY2xlYW5seSBtZXJnZWQKIHBhdGhzIGFyZSBhbHJlYWR5IHN0YWdlZCB0byBiZSBjb21taXR0ZWQgZm9yIHlvdSwgYW5kIHBhdGhzIHRoYXQKIGNvbmZsaWN0ZWQgYXJlIGxlZnQgaW4gdW5tZXJnZWQgc3RhdGUuICBZb3Ugd291bGQgaGF2ZSB0byBmaXJzdAotY2hlY2sgd2hpY2ggcGF0aHMgYXJlIGNvbmZsaWN0aW5nIHdpdGggJ2dpdC1zdGF0dXMnCitjaGVjayB3aGljaCBwYXRocyBhcmUgY29uZmxpY3Rpbmcgd2l0aCAnZ2l0IHN0YXR1cycKIGFuZCBhZnRlciBmaXhpbmcgdGhlbSBtYW51YWxseSBpbiB5b3VyIHdvcmtpbmcgdHJlZSwgeW91IHdvdWxkCi1zdGFnZSB0aGUgcmVzdWx0IGFzIHVzdWFsIHdpdGggJ2dpdC1hZGQnOgorc3RhZ2UgdGhlIHJlc3VsdCBhcyB1c3VhbCB3aXRoICdnaXQgYWRkJzoKIAogLS0tLS0tLS0tLS0tCiAkIGdpdCBzdGF0dXMgfCBncmVwIHVubWVyZ2VkCkBAIC0zMTksNyArMzU5LDcgQEAKIFRoZSBlZGl0b3IgdXNlZCB0byBlZGl0IHRoZSBjb21taXQgbG9nIG1lc3NhZ2Ugd2lsbCBiZSBjaG9zZW4gZnJvbSB0aGUKIEdJVF9FRElUT1IgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBjb3JlLmVkaXRvciBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCB0aGUKIFZJU1VBTCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3IgdGhlIEVESVRPUiBlbnZpcm9ubWVudCB2YXJpYWJsZSAoaW4gdGhhdAotb3JkZXIpLgorb3JkZXIpLiAgU2VlIGxpbmtnaXQ6Z2l0LXZhclsxXSBmb3IgZGV0YWlscy4KIAogSE9PS1MKIC0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jb25maWcudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY29uZmlnLnR4dAppbmRleCBmNjhiMTk4Li41NDNkZDY0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jb25maWcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbmZpZy50eHQKQEAgLTM3LDExICszNywxMiBAQAogeW91IHdhbnQgdG8gaGFuZGxlIHRoZSBsaW5lcyB0aGF0IGRvICpub3QqIG1hdGNoIHRoZSByZWdleCwganVzdAogcHJlcGVuZCBhIHNpbmdsZSBleGNsYW1hdGlvbiBtYXJrIGluIGZyb250IChzZWUgYWxzbyA8PEVYQU1QTEVTPj4pLgogCi1UaGUgdHlwZSBzcGVjaWZpZXIgY2FuIGJlIGVpdGhlciAnLS1pbnQnIG9yICctLWJvb2wnLCB3aGljaCB3aWxsIG1ha2UKLSdnaXQtY29uZmlnJyBlbnN1cmUgdGhhdCB0aGUgdmFyaWFibGUocykgYXJlIG9mIHRoZSBnaXZlbiB0eXBlIGFuZAorVGhlIHR5cGUgc3BlY2lmaWVyIGNhbiBiZSBlaXRoZXIgJy0taW50JyBvciAnLS1ib29sJywgdG8gbWFrZQorJ2dpdCBjb25maWcnIGVuc3VyZSB0aGF0IHRoZSB2YXJpYWJsZShzKSBhcmUgb2YgdGhlIGdpdmVuIHR5cGUgYW5kCiBjb252ZXJ0IHRoZSB2YWx1ZSB0byB0aGUgY2Fub25pY2FsIGZvcm0gKHNpbXBsZSBkZWNpbWFsIG51bWJlciBmb3IgaW50LAotYSAidHJ1ZSIgb3IgImZhbHNlIiBzdHJpbmcgZm9yIGJvb2wpLiAgSWYgbm8gdHlwZSBzcGVjaWZpZXIgaXMgcGFzc2VkLAotbm8gY2hlY2tzIG9yIHRyYW5zZm9ybWF0aW9ucyBhcmUgcGVyZm9ybWVkIG9uIHRoZSB2YWx1ZS4KK2EgInRydWUiIG9yICJmYWxzZSIgc3RyaW5nIGZvciBib29sKSwgb3IgJy0tcGF0aCcsIHdoaWNoIGRvZXMgc29tZQorcGF0aCBleHBhbnNpb24gKHNlZSAnLS1wYXRoJyBiZWxvdykuICBJZiBubyB0eXBlIHNwZWNpZmllciBpcyBwYXNzZWQsIG5vCitjaGVja3Mgb3IgdHJhbnNmb3JtYXRpb25zIGFyZSBwZXJmb3JtZWQgb24gdGhlIHZhbHVlLgogCiBUaGUgZmlsZS1vcHRpb24gY2FuIGJlIG9uZSBvZiAnLS1zeXN0ZW0nLCAnLS1nbG9iYWwnIG9yICctLWZpbGUnCiB3aGljaCBzcGVjaWZ5IHdoZXJlIHRoZSB2YWx1ZXMgd2lsbCBiZSByZWFkIGZyb20gb3Igd3JpdHRlbiB0by4KQEAgLTEyNCwxOCArMTI1LDI1IEBACiAJTGlzdCBhbGwgdmFyaWFibGVzIHNldCBpbiBjb25maWcgZmlsZS4KIAogLS1ib29sOjoKLQknZ2l0LWNvbmZpZycgd2lsbCBlbnN1cmUgdGhhdCB0aGUgb3V0cHV0IGlzICJ0cnVlIiBvciAiZmFsc2UiCisJJ2dpdCBjb25maWcnIHdpbGwgZW5zdXJlIHRoYXQgdGhlIG91dHB1dCBpcyAidHJ1ZSIgb3IgImZhbHNlIgogCiAtLWludDo6Ci0JJ2dpdC1jb25maWcnIHdpbGwgZW5zdXJlIHRoYXQgdGhlIG91dHB1dCBpcyBhIHNpbXBsZQorCSdnaXQgY29uZmlnJyB3aWxsIGVuc3VyZSB0aGF0IHRoZSBvdXRwdXQgaXMgYSBzaW1wbGUKIAlkZWNpbWFsIG51bWJlci4gIEFuIG9wdGlvbmFsIHZhbHVlIHN1ZmZpeCBvZiAnaycsICdtJywgb3IgJ2cnCiAJaW4gdGhlIGNvbmZpZyBmaWxlIHdpbGwgY2F1c2UgdGhlIHZhbHVlIHRvIGJlIG11bHRpcGxpZWQKIAlieSAxMDI0LCAxMDQ4NTc2LCBvciAxMDczNzQxODI0IHByaW9yIHRvIG91dHB1dC4KIAogLS1ib29sLW9yLWludDo6Ci0JJ2dpdC1jb25maWcnIHdpbGwgZW5zdXJlIHRoYXQgdGhlIG91dHB1dCBtYXRjaGVzIHRoZSBmb3JtYXQgb2YKKwknZ2l0IGNvbmZpZycgd2lsbCBlbnN1cmUgdGhhdCB0aGUgb3V0cHV0IG1hdGNoZXMgdGhlIGZvcm1hdCBvZgogCWVpdGhlciAtLWJvb2wgb3IgLS1pbnQsIGFzIGRlc2NyaWJlZCBhYm92ZS4KIAorLS1wYXRoOjoKKwknZ2l0LWNvbmZpZycgd2lsbCBleHBhbmQgbGVhZGluZyAne3RpbGRlfScgdG8gdGhlIHZhbHVlIG9mCisJJyRIT01FJywgYW5kICd7dGlsZGV9dXNlcicgdG8gdGhlIGhvbWUgZGlyZWN0b3J5IGZvciB0aGUKKwlzcGVjaWZpZWQgdXNlci4gIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgd2hlbiBzZXR0aW5nIHRoZQorCXZhbHVlIChidXQgeW91IGNhbiB1c2UgJ2dpdCBjb25maWcgYmxhIHt0aWxkZX0vJyBmcm9tIHRoZQorCWNvbW1hbmQgbGluZSB0byBsZXQgeW91ciBzaGVsbCBkbyB0aGUgZXhwYW5zaW9uKS4KKwogLXo6OgogLS1udWxsOjoKIAlGb3IgYWxsIG9wdGlvbnMgdGhhdCBvdXRwdXQgdmFsdWVzIGFuZC9vciBrZXlzLCBhbHdheXMKQEAgLTE3Myw3ICsxODEsNyBAQAogLS0tLS0KIAogSWYgbm90IHNldCBleHBsaWNpdGx5IHdpdGggJy0tZmlsZScsIHRoZXJlIGFyZSB0aHJlZSBmaWxlcyB3aGVyZQotJ2dpdC1jb25maWcnIHdpbGwgc2VhcmNoIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnM6CisnZ2l0IGNvbmZpZycgd2lsbCBzZWFyY2ggZm9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uczoKIAogJEdJVF9ESVIvY29uZmlnOjoKIAlSZXBvc2l0b3J5IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZS4gKFRoZSBmaWxlbmFtZSBpcwpAQCAtMTkwLDEyICsxOTgsMTIgQEAKIElmIG5vIGZ1cnRoZXIgb3B0aW9ucyBhcmUgZ2l2ZW4sIGFsbCByZWFkaW5nIG9wdGlvbnMgd2lsbCByZWFkIGFsbCBvZiB0aGVzZQogZmlsZXMgdGhhdCBhcmUgYXZhaWxhYmxlLiBJZiB0aGUgZ2xvYmFsIG9yIHRoZSBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uCiBmaWxlIGFyZSBub3QgYXZhaWxhYmxlIHRoZXkgd2lsbCBiZSBpZ25vcmVkLiBJZiB0aGUgcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uCi1maWxlIGlzIG5vdCBhdmFpbGFibGUgb3IgcmVhZGFibGUsICdnaXQtY29uZmlnJyB3aWxsIGV4aXQgd2l0aCBhIG5vbi16ZXJvCitmaWxlIGlzIG5vdCBhdmFpbGFibGUgb3IgcmVhZGFibGUsICdnaXQgY29uZmlnJyB3aWxsIGV4aXQgd2l0aCBhIG5vbi16ZXJvCiBlcnJvciBjb2RlLiBIb3dldmVyLCBpbiBuZWl0aGVyIGNhc2Ugd2lsbCBhbiBlcnJvciBtZXNzYWdlIGJlIGlzc3VlZC4KIAogQWxsIHdyaXRpbmcgb3B0aW9ucyB3aWxsIHBlciBkZWZhdWx0IHdyaXRlIHRvIHRoZSByZXBvc2l0b3J5IHNwZWNpZmljCiBjb25maWd1cmF0aW9uIGZpbGUuIE5vdGUgdGhhdCB0aGlzIGFsc28gYWZmZWN0cyBvcHRpb25zIGxpa2UgJy0tcmVwbGFjZS1hbGwnCi1hbmQgJy0tdW5zZXQnLiAqJ2dpdC1jb25maWcnIHdpbGwgb25seSBldmVyIGNoYW5nZSBvbmUgZmlsZSBhdCBhIHRpbWUqLgorYW5kICctLXVuc2V0Jy4gKidnaXQgY29uZmlnJyB3aWxsIG9ubHkgZXZlciBjaGFuZ2Ugb25lIGZpbGUgYXQgYSB0aW1lKi4KIAogWW91IGNhbiBvdmVycmlkZSB0aGVzZSBydWxlcyBlaXRoZXIgYnkgY29tbWFuZCBsaW5lIG9wdGlvbnMgb3IgYnkgZW52aXJvbm1lbnQKIHZhcmlhYmxlcy4gVGhlICctLWdsb2JhbCcgYW5kIHRoZSAnLS1zeXN0ZW0nIG9wdGlvbnMgd2lsbCBsaW1pdCB0aGUgZmlsZSB1c2VkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNleHBvcnRjb21taXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY3ZzZXhwb3J0Y29tbWl0LnR4dAppbmRleCAyZGE4NTg4Li5iMjY5NmVmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNleHBvcnRjb21taXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWN2c2V4cG9ydGNvbW1pdC50eHQKQEAgLTI3LDcgKzI3LDcgQEAKIAogU3VwcG9ydHMgZmlsZSBhZGRpdGlvbnMsIHJlbW92YWxzLCBhbmQgY29tbWl0cyB0aGF0IGFmZmVjdCBiaW5hcnkgZmlsZXMuCiAKLUlmIHRoZSBjb21taXQgaXMgYSBtZXJnZSBjb21taXQsIHlvdSBtdXN0IHRlbGwgJ2dpdC1jdnNleHBvcnRjb21taXQnIHdoYXQKK0lmIHRoZSBjb21taXQgaXMgYSBtZXJnZSBjb21taXQsIHlvdSBtdXN0IHRlbGwgJ2dpdCBjdnNleHBvcnRjb21taXQnIHdoYXQKIHBhcmVudCB0aGUgY2hhbmdlc2V0IHNob3VsZCBiZSBkb25lIGFnYWluc3QuCiAKIE9QVElPTlMKQEAgLTYzLDYgKzYzLDEwIEBACiAtdTo6CiAJVXBkYXRlIGFmZmVjdGVkIGZpbGVzIGZyb20gQ1ZTIHJlcG9zaXRvcnkgYmVmb3JlIGF0dGVtcHRpbmcgZXhwb3J0LgogCistazo6CisJUmV2ZXJzZSBDVlMga2V5d29yZCBleHBhbnNpb24gKGUuZy4gJFJldmlzaW9uOiAxLjIuMy40JAorCWJlY29tZXMgJFJldmlzaW9uJCkgaW4gd29ya2luZyBDVlMgY2hlY2tvdXQgYmVmb3JlIGFwcGx5aW5nIHBhdGNoLgorCiAtdzo6CiAJU3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlIENWUyBjaGVja291dCB0byB1c2UgZm9yIHRoZSBleHBvcnQuIFRoaXMKIAlvcHRpb24gZG9lcyBub3QgcmVxdWlyZSBHSVRfRElSIHRvIGJlIHNldCBiZWZvcmUgZXhlY3V0aW9uIGlmIHRoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY3ZzaW1wb3J0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWN2c2ltcG9ydC50eHQKaW5kZXggNjE0ZTc2OS4uZGRmY2IzZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY3ZzaW1wb3J0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQudHh0CkBAIC0yOCw5ICsyOCw5IEBACiBQbGVhc2Ugc2VlIHRoZSBzZWN0aW9uIDw8aXNzdWVzLElTU1VFUz4+IGZvciBmdXJ0aGVyIHJlZmVyZW5jZS4KIAogWW91IHNob3VsZCAqbmV2ZXIqIGRvIGFueSB3b3JrIG9mIHlvdXIgb3duIG9uIHRoZSBicmFuY2hlcyB0aGF0IGFyZQotY3JlYXRlZCBieSAnZ2l0LWN2c2ltcG9ydCcuICBCeSBkZWZhdWx0IGluaXRpYWwgaW1wb3J0IHdpbGwgY3JlYXRlIGFuZCBwb3B1bGF0ZSBhCitjcmVhdGVkIGJ5ICdnaXQgY3ZzaW1wb3J0Jy4gIEJ5IGRlZmF1bHQgaW5pdGlhbCBpbXBvcnQgd2lsbCBjcmVhdGUgYW5kIHBvcHVsYXRlIGEKICJtYXN0ZXIiIGJyYW5jaCBmcm9tIHRoZSBDVlMgcmVwb3NpdG9yeSdzIG1haW4gYnJhbmNoIHdoaWNoIHlvdSdyZSBmcmVlCi10byB3b3JrIHdpdGg7IGFmdGVyIHRoYXQsIHlvdSBuZWVkIHRvICdnaXQtbWVyZ2UnIGluY3JlbWVudGFsIGltcG9ydHMsIG9yCit0byB3b3JrIHdpdGg7IGFmdGVyIHRoYXQsIHlvdSBuZWVkIHRvICdnaXQgbWVyZ2UnIGluY3JlbWVudGFsIGltcG9ydHMsIG9yCiBhbnkgQ1ZTIGJyYW5jaGVzLCB5b3Vyc2VsZi4gIEl0IGlzIGFkdmlzYWJsZSB0byBzcGVjaWZ5IGEgbmFtZWQgcmVtb3RlIHZpYQogLXIgdG8gc2VwYXJhdGUgYW5kIHByb3RlY3QgdGhlIGluY29taW5nIGJyYW5jaGVzLgogCkBAIC00OSwxMyArNDksMTMgQEAKIC1kIDxDVlNST09UPjo6CiAJVGhlIHJvb3Qgb2YgdGhlIENWUyBhcmNoaXZlLiBNYXkgYmUgbG9jYWwgKGEgc2ltcGxlIHBhdGgpIG9yIHJlbW90ZTsKIAljdXJyZW50bHksIG9ubHkgdGhlIDpsb2NhbDosIDpleHQ6IGFuZCA6cHNlcnZlcjogYWNjZXNzIG1ldGhvZHMKLQlhcmUgc3VwcG9ydGVkLiBJZiBub3QgZ2l2ZW4sICdnaXQtY3ZzaW1wb3J0JyB3aWxsIHRyeSB0byByZWFkIGl0CisJYXJlIHN1cHBvcnRlZC4gSWYgbm90IGdpdmVuLCAnZ2l0IGN2c2ltcG9ydCcgd2lsbCB0cnkgdG8gcmVhZCBpdAogCWZyb20gYENWUy9Sb290YC4gSWYgbm8gc3VjaCBmaWxlIGV4aXN0cywgaXQgY2hlY2tzIGZvciB0aGUKIAlgQ1ZTUk9PVGAgZW52aXJvbm1lbnQgdmFyaWFibGUuCiAKIDxDVlNfbW9kdWxlPjo6CiAJVGhlIENWUyBtb2R1bGUgeW91IHdhbnQgdG8gaW1wb3J0LiBSZWxhdGl2ZSB0byA8Q1ZTUk9PVD4uCi0JSWYgbm90IGdpdmVuLCAnZ2l0LWN2c2ltcG9ydCcgdHJpZXMgdG8gcmVhZCBpdCBmcm9tCisJSWYgbm90IGdpdmVuLCAnZ2l0IGN2c2ltcG9ydCcgdHJpZXMgdG8gcmVhZCBpdCBmcm9tCiAJYENWUy9SZXBvc2l0b3J5YC4KIAogLUMgPHRhcmdldC1kaXI+OjoKQEAgLTY1LDE0ICs2NSwxNCBAQAogLXIgPHJlbW90ZT46OgogCVRoZSBnaXQgcmVtb3RlIHRvIGltcG9ydCB0aGlzIENWUyByZXBvc2l0b3J5IGludG8uCiAJTW92ZXMgYWxsIENWUyBicmFuY2hlcyBpbnRvIHJlbW90ZXMvPHJlbW90ZT4vPGJyYW5jaD4KLQlha2luIHRvIHRoZSB3YXkgJ2dpdC1jbG9uZScgdXNlcyAnb3JpZ2luJyBieSBkZWZhdWx0LgorCWFraW4gdG8gdGhlIHdheSAnZ2l0IGNsb25lJyB1c2VzICdvcmlnaW4nIGJ5IGRlZmF1bHQuCiAKIC1vIDxicmFuY2gtZm9yLUhFQUQ+OjoKIAlXaGVuIG5vIHJlbW90ZSBpcyBzcGVjaWZpZWQgKHZpYSAtcikgdGhlICdIRUFEJyBicmFuY2gKIAlmcm9tIENWUyBpcyBpbXBvcnRlZCB0byB0aGUgJ29yaWdpbicgYnJhbmNoIHdpdGhpbiB0aGUgZ2l0CiAJcmVwb3NpdG9yeSwgYXMgJ0hFQUQnIGFscmVhZHkgaGFzIGEgc3BlY2lhbCBtZWFuaW5nIGZvciBnaXQuCiAJV2hlbiBhIHJlbW90ZSBpcyBzcGVjaWZpZWQgdGhlICdIRUFEJyBicmFuY2ggaXMgbmFtZWQKLQlyZW1vdGVzLzxyZW1vdGU+L21hc3RlciBtaXJyb3JpbmcgJ2dpdC1jbG9uZScgYmVoYXZpb3VyLgorCXJlbW90ZXMvPHJlbW90ZT4vbWFzdGVyIG1pcnJvcmluZyAnZ2l0IGNsb25lJyBiZWhhdmlvdXIuCiAJVXNlIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIGltcG9ydCBpbnRvIGEgZGlmZmVyZW50CiAJYnJhbmNoLgogKwpAQCAtMTQ1LDE3ICsxNDUsMTcgQEAKIAogLS0tLS0tLS0tCiArCi0nZ2l0LWN2c2ltcG9ydCcgd2lsbCBtYWtlIGl0IGFwcGVhciBhcyB0aG9zZSBhdXRob3JzIGhhZAorJ2dpdCBjdnNpbXBvcnQnIHdpbGwgbWFrZSBpdCBhcHBlYXIgYXMgdGhvc2UgYXV0aG9ycyBoYWQKIHRoZWlyIEdJVF9BVVRIT1JfTkFNRSBhbmQgR0lUX0FVVEhPUl9FTUFJTCBzZXQgcHJvcGVybHkKIGFsbCBhbG9uZy4KICsKIEZvciBjb252ZW5pZW5jZSwgdGhpcyBkYXRhIGlzIHNhdmVkIHRvIGAkR0lUX0RJUi9jdnMtYXV0aG9yc2AKIGVhY2ggdGltZSB0aGUgJy1BJyBvcHRpb24gaXMgcHJvdmlkZWQgYW5kIHJlYWQgZnJvbSB0aGF0IHNhbWUKLWZpbGUgZWFjaCB0aW1lICdnaXQtY3ZzaW1wb3J0JyBpcyBydW4uCitmaWxlIGVhY2ggdGltZSAnZ2l0IGN2c2ltcG9ydCcgaXMgcnVuLgogKwogSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIHVzZSB0aGlzIGZlYXR1cmUgaWYgeW91IGludGVuZCB0bwogZXhwb3J0IGNoYW5nZXMgYmFjayB0byBDVlMgYWdhaW4gbGF0ZXIgd2l0aAotJ2dpdC1jdnNleHBvcnRjb21taXQnLgorJ2dpdCBjdnNleHBvcnRjb21taXQnLgogCiAtaDo6CiAJUHJpbnQgYSBzaG9ydCB1c2FnZSBtZXNzYWdlIGFuZCBleGl0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY3Zzc2VydmVyLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWN2c3NlcnZlci50eHQKaW5kZXggNzg1Nzc5ZS4uZGJiMDUzZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY3Zzc2VydmVyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jdnNzZXJ2ZXIudHh0CkBAIC0yMiw3ICsyMiw3IEBACiBVc2FnZToKIAogW3ZlcnNlXQotJ2dpdCBjdnNzZXJ2ZXInIFtvcHRpb25zXSBbcHNlcnZlcnxzZXJ2ZXJdIFs8ZGlyZWN0b3J5PiAuLi5dCisnZ2l0LWN2c3NlcnZlcicgW29wdGlvbnNdIFtwc2VydmVyfHNlcnZlcl0gWzxkaXJlY3Rvcnk+IC4uLl0KIAogT1BUSU9OUwogLS0tLS0tLQpAQCAtMTgyLDEwICsxODIsOSBAQAogLS0tLS0tLS0tLS0tLS0tLQogCiAnZ2l0LWN2c3NlcnZlcicgdXNlcyBvbmUgZGF0YWJhc2UgcGVyIGdpdCBoZWFkIChpLmUuIENWUyBtb2R1bGUpIHRvCi1zdG9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVwb3NpdG9yeSBmb3IgZmFzdGVyIGFjY2Vzcy4gVGhlCi1kYXRhYmFzZSBkb2Vzbid0IGNvbnRhaW4gYW55IHBlcnNpc3RlbnQgZGF0YSBhbmQgY2FuIGJlIGNvbXBsZXRlbHkKLXJlZ2VuZXJhdGVkIGZyb20gdGhlIGdpdCByZXBvc2l0b3J5IGF0IGFueSB0aW1lLiBUaGUgZGF0YWJhc2UKLW5lZWRzIHRvIGJlIHVwZGF0ZWQgKGkuZS4gd3JpdHRlbiB0bykgYWZ0ZXIgZXZlcnkgY29tbWl0Lgorc3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlcG9zaXRvcnkgdG8gbWFpbnRhaW4gY29uc2lzdGVudAorQ1ZTIHJldmlzaW9uIG51bWJlcnMuIFRoZSBkYXRhYmFzZSBuZWVkcyB0byBiZQordXBkYXRlZCAoaS5lLiB3cml0dGVuIHRvKSBhZnRlciBldmVyeSBjb21taXQuCiAKIElmIHRoZSBjb21taXQgaXMgZG9uZSBkaXJlY3RseSBieSB1c2luZyBgZ2l0YCAoYXMgb3Bwb3NlZCB0bwogdXNpbmcgJ2dpdC1jdnNzZXJ2ZXInKSB0aGUgdXBkYXRlIHdpbGwgbmVlZCB0byBoYXBwZW4gb24gdGhlCkBAIC0yMDQsNiArMjAzLDE4IEBACiAnZ2l0LWN2c3NlcnZlcicgd3JpdGUgYWNjZXNzIHRvIHRoZSBkYXRhYmFzZSBmaWxlIHdpdGhvdXQgZ3JhbnRpbmcKIHRoZW0gd3JpdGUgYWNjZXNzIHRvIHRoZSBkaXJlY3RvcnksIHRvby4KIAorVGhlIGRhdGFiYXNlIGNhbiBub3QgYmUgcmVsaWFibHkgcmVnZW5lcmF0ZWQgaW4gYQorY29uc2lzdGVudCBmb3JtIGFmdGVyIHRoZSBicmFuY2ggaXQgaXMgdHJhY2tpbmcgaGFzIGNoYW5nZWQuCitFeGFtcGxlOiBGb3IgbWVyZ2VkIGJyYW5jaGVzLCAnZ2l0LWN2c3NlcnZlcicgb25seSB0cmFja3MKK29uZSBicmFuY2ggb2YgZGV2ZWxvcG1lbnQsIGFuZCBhZnRlciBhICdnaXQgbWVyZ2UnIGFuCitpbmNyZW1lbnRhbGx5IHVwZGF0ZWQgZGF0YWJhc2UgbWF5IHRyYWNrIGEgZGlmZmVyZW50IGJyYW5jaAordGhhbiBhIGRhdGFiYXNlIHJlZ2VuZXJhdGVkIGZyb20gc2NyYXRjaCwgY2F1c2luZyBpbmNvbnNpc3RlbnQKK0NWUyByZXZpc2lvbiBudW1iZXJzLiBgZ2l0LWN2c3NlcnZlcmAgaGFzIG5vIHdheSBvZiBrbm93aW5nIHdoaWNoCiticmFuY2ggaXQgd291bGQgaGF2ZSBwaWNrZWQgaWYgaXQgaGFkIGJlZW4gcnVuIGluY3JlbWVudGFsbHkKK3ByZS1tZXJnZS4gU28gaWYgeW91IGhhdmUgdG8gZnVsbHkgb3IgcGFydGlhbGx5IChmcm9tIG9sZAorYmFja3VwKSByZWdlbmVyYXRlIHRoZSBkYXRhYmFzZSwgeW91IHNob3VsZCBiZSBzdXNwaWNpb3VzCitvZiBwcmUtZXhpc3RpbmcgQ1ZTIHNhbmRib3hlcy4KKwogWW91IGNhbiBjb25maWd1cmUgdGhlIGRhdGFiYXNlIGJhY2tlbmQgd2l0aCB0aGUgZm9sbG93aW5nCiBjb25maWd1cmF0aW9uIHZhcmlhYmxlczoKIApAQCAtMjY2LDYgKzI3NywyMSBAQAogCUlmIG5vIG5hbWUgY2FuIGJlIGRldGVybWluZWQsIHRoZQogCW51bWVyaWMgdWlkIGlzIHVzZWQuCiAKK0VOVklST05NRU5UCistLS0tLS0tLS0tLQorCitUaGVzZSB2YXJpYWJsZXMgb2J2aWF0ZSB0aGUgbmVlZCBmb3IgY29tbWFuZC1saW5lIG9wdGlvbnMgaW4gc29tZQorY2lyY3Vtc3RhbmNlcywgYWxsb3dpbmcgZWFzaWVyIHJlc3RyaWN0ZWQgdXNhZ2UgdGhyb3VnaCBnaXQtc2hlbGwuCisKK0dJVF9DVlNTRVJWRVJfQkFTRV9QQVRIIHRha2VzIHRoZSBwbGFjZSBvZiB0aGUgYXJndW1lbnQgdG8gLS1iYXNlLXBhdGguCisKK0dJVF9DVlNTRVJWRVJfUk9PVCBzcGVjaWZpZXMgYSBzaW5nbGUtZGlyZWN0b3J5IHdoaXRlbGlzdC4gVGhlCityZXBvc2l0b3J5IG11c3Qgc3RpbGwgYmUgY29uZmlndXJlZCB0byBhbGxvdyBhY2Nlc3MgdGhyb3VnaAorZ2l0LWN2c3NlcnZlciwgYXMgZGVzY3JpYmVkIGFib3ZlLgorCitXaGVuIHRoZXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgc2V0LCB0aGUgY29ycmVzcG9uZGluZworY29tbWFuZC1saW5lIGFyZ3VtZW50cyBtYXkgbm90IGJlIHVzZWQuCisKIEVjbGlwc2UgQ1ZTIENsaWVudCBOb3RlcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTI4Myw3ICszMDksNyBAQAogUHJvdG9jb2wgbm90ZXM6IElmIHlvdSBhcmUgdXNpbmcgYW5vbnltb3VzIGFjY2VzcyB2aWEgcHNlcnZlciwganVzdCBzZWxlY3QgdGhhdC4KIFRob3NlIHVzaW5nIFNTSCBhY2Nlc3Mgc2hvdWxkIGNob29zZSB0aGUgJ2V4dCcgcHJvdG9jb2wsIGFuZCBjb25maWd1cmUgJ2V4dCcKIGFjY2VzcyBvbiB0aGUgUHJlZmVyZW5jZXMtPlRlYW0tPkNWUy0+RXh0Q29ubmVjdGlvbiBwYW5lLiBTZXQgQ1ZTX1NFUlZFUiB0bwotIidnaXQgY3Zzc2VydmVyJyIuIE5vdGUgdGhhdCBwYXNzd29yZCBzdXBwb3J0IGlzIG5vdCBnb29kIHdoZW4gdXNpbmcgJ2V4dCcsCisiYGdpdCBjdnNzZXJ2ZXJgIi4gTm90ZSB0aGF0IHBhc3N3b3JkIHN1cHBvcnQgaXMgbm90IGdvb2Qgd2hlbiB1c2luZyAnZXh0JywKIHlvdSB3aWxsIGRlZmluaXRlbHkgd2FudCB0byBoYXZlIFNTSCBrZXlzIHNldHVwLgogCiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGp1c3QgdXNlIHRoZSBub24tc3RhbmRhcmQgZXh0c3NoIHByb3RvY29sIHRoYXQgRWNsaXBzZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZGFlbW9uLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRhZW1vbi50eHQKaW5kZXggYTg1MTIxYy4uMDFjOWY4ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZGFlbW9uLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1kYWVtb24udHh0CkBAIC0yOCwzNiArMjgsMzYgQEAKIEl0IHZlcmlmaWVzIHRoYXQgdGhlIGRpcmVjdG9yeSBoYXMgdGhlIG1hZ2ljIGZpbGUgImdpdC1kYWVtb24tZXhwb3J0LW9rIiwgYW5kCiBpdCB3aWxsIHJlZnVzZSB0byBleHBvcnQgYW55IGdpdCBkaXJlY3RvcnkgdGhhdCBoYXNuJ3QgZXhwbGljaXRseSBiZWVuIG1hcmtlZAogZm9yIGV4cG9ydCB0aGlzIHdheSAodW5sZXNzIHRoZSAnLS1leHBvcnQtYWxsJyBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkKS4gSWYgeW91Ci1wYXNzIHNvbWUgZGlyZWN0b3J5IHBhdGhzIGFzICdnaXQtZGFlbW9uJyBhcmd1bWVudHMsIHlvdSBjYW4gZnVydGhlciByZXN0cmljdAorcGFzcyBzb21lIGRpcmVjdG9yeSBwYXRocyBhcyAnZ2l0IGRhZW1vbicgYXJndW1lbnRzLCB5b3UgY2FuIGZ1cnRoZXIgcmVzdHJpY3QKIHRoZSBvZmZlcnMgdG8gYSB3aGl0ZWxpc3QgY29tcHJpc2luZyBvZiB0aG9zZS4KIAogQnkgZGVmYXVsdCwgb25seSBgdXBsb2FkLXBhY2tgIHNlcnZpY2UgaXMgZW5hYmxlZCwgd2hpY2ggc2VydmVzCi0nZ2l0LWZldGNoLXBhY2snIGFuZCAnZ2l0LWxzLXJlbW90ZScgY2xpZW50cywgd2hpY2ggYXJlIGludm9rZWQKLWZyb20gJ2dpdC1mZXRjaCcsICdnaXQtcHVsbCcsIGFuZCAnZ2l0LWNsb25lJy4KKydnaXQgZmV0Y2gtcGFjaycgYW5kICdnaXQgbHMtcmVtb3RlJyBjbGllbnRzLCB3aGljaCBhcmUgaW52b2tlZAorZnJvbSAnZ2l0IGZldGNoJywgJ2dpdCBwdWxsJywgYW5kICdnaXQgY2xvbmUnLgogCiBUaGlzIGlzIGlkZWFsbHkgc3VpdGVkIGZvciByZWFkLW9ubHkgdXBkYXRlcywgaS5lLiwgcHVsbGluZyBmcm9tCiBnaXQgcmVwb3NpdG9yaWVzLgogCi1BbiBgdXBsb2FkLWFyY2hpdmVgIGFsc28gZXhpc3RzIHRvIHNlcnZlICdnaXQtYXJjaGl2ZScuCitBbiBgdXBsb2FkLWFyY2hpdmVgIGFsc28gZXhpc3RzIHRvIHNlcnZlICdnaXQgYXJjaGl2ZScuCiAKIE9QVElPTlMKIC0tLS0tLS0KIC0tc3RyaWN0LXBhdGhzOjoKIAlNYXRjaCBwYXRocyBleGFjdGx5IChpLmUuIGRvbid0IGFsbG93ICIvZm9vL3JlcG8iIHdoZW4gdGhlIHJlYWwgcGF0aCBpcwogCSIvZm9vL3JlcG8uZ2l0IiBvciAiL2Zvby9yZXBvLy5naXQiKSBhbmQgZG9uJ3QgZG8gdXNlci1yZWxhdGl2ZSBwYXRocy4KLQknZ2l0LWRhZW1vbicgd2lsbCByZWZ1c2UgdG8gc3RhcnQgd2hlbiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIGFuZCBubworCSdnaXQgZGFlbW9uJyB3aWxsIHJlZnVzZSB0byBzdGFydCB3aGVuIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYW5kIG5vCiAJd2hpdGVsaXN0IGlzIHNwZWNpZmllZC4KIAogLS1iYXNlLXBhdGg9cGF0aDo6CiAJUmVtYXAgYWxsIHRoZSBwYXRoIHJlcXVlc3RzIGFzIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBwYXRoLgotCVRoaXMgaXMgc29ydCBvZiAiR0lUIHJvb3QiIC0gaWYgeW91IHJ1biAnZ2l0LWRhZW1vbicgd2l0aAorCVRoaXMgaXMgc29ydCBvZiAiR0lUIHJvb3QiIC0gaWYgeW91IHJ1biAnZ2l0IGRhZW1vbicgd2l0aAogCSctLWJhc2UtcGF0aD0vc3J2L2dpdCcgb24gZXhhbXBsZS5jb20sIHRoZW4gaWYgeW91IGxhdGVyIHRyeSB0byBwdWxsCi0JJ2dpdDovL2V4YW1wbGUuY29tL2hlbGxvLmdpdCcsICdnaXQtZGFlbW9uJyB3aWxsIGludGVycHJldCB0aGUgcGF0aAorCSdnaXQ6Ly9leGFtcGxlLmNvbS9oZWxsby5naXQnLCAnZ2l0IGRhZW1vbicgd2lsbCBpbnRlcnByZXQgdGhlIHBhdGgKIAlhcyAnL3Nydi9naXQvaGVsbG8uZ2l0Jy4KIAogLS1iYXNlLXBhdGgtcmVsYXhlZDo6CiAJSWYgLS1iYXNlLXBhdGggaXMgZW5hYmxlZCBhbmQgcmVwbyBsb29rdXAgZmFpbHMsIHdpdGggdGhpcyBvcHRpb24KLQknZ2l0LWRhZW1vbicgd2lsbCBhdHRlbXB0IHRvIGxvb2t1cCB3aXRob3V0IHByZWZpeGluZyB0aGUgYmFzZSBwYXRoLgorCSdnaXQgZGFlbW9uJyB3aWxsIGF0dGVtcHQgdG8gbG9va3VwIHdpdGhvdXQgcHJlZml4aW5nIHRoZSBiYXNlIHBhdGguCiAJVGhpcyBpcyB1c2VmdWwgZm9yIHN3aXRjaGluZyB0byAtLWJhc2UtcGF0aCB1c2FnZSwgd2hpbGUgc3RpbGwKIAlhbGxvd2luZyB0aGUgb2xkIHBhdGhzLgogCkBAIC0xNDMsNyArMTQzLDcgQEAKICsKIEdpdmluZyB0aGVzZSBvcHRpb25zIGlzIGFuIGVycm9yIHdoZW4gdXNlZCB3aXRoIGAtLWluZXRkYDsgdXNlCiB0aGUgZmFjaWxpdHkgb2YgaW5ldCBkYWVtb24gdG8gYWNoaWV2ZSB0aGUgc2FtZSBiZWZvcmUgc3Bhd25pbmcKLSdnaXQtZGFlbW9uJyBpZiBuZWVkZWQuCisnZ2l0IGRhZW1vbicgaWYgbmVlZGVkLgogCiAtLWVuYWJsZT1zZXJ2aWNlOjoKIC0tZGlzYWJsZT1zZXJ2aWNlOjoKQEAgLTE2OSwyNCArMTY5LDI0IEBACiAKIFRoZXNlIHNlcnZpY2VzIGNhbiBiZSBnbG9iYWxseSBlbmFibGVkL2Rpc2FibGVkIHVzaW5nIHRoZQogY29tbWFuZCBsaW5lIG9wdGlvbnMgb2YgdGhpcyBjb21tYW5kLiAgSWYgYSBmaW5lci1ncmFpbmVkCi1jb250cm9sIGlzIGRlc2lyZWQgKGUuZy4gdG8gYWxsb3cgJ2dpdC1hcmNoaXZlJyB0byBiZSBydW4KK2NvbnRyb2wgaXMgZGVzaXJlZCAoZS5nLiB0byBhbGxvdyAnZ2l0IGFyY2hpdmUnIHRvIGJlIHJ1bgogYWdhaW5zdCBvbmx5IGluIGEgZmV3IHNlbGVjdGVkIHJlcG9zaXRvcmllcyB0aGUgZGFlbW9uIHNlcnZlcyksCiB0aGUgcGVyLXJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiBmaWxlIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSBvcgogZGlzYWJsZSB0aGVtLgogCiB1cGxvYWQtcGFjazo6Ci0JVGhpcyBzZXJ2ZXMgJ2dpdC1mZXRjaC1wYWNrJyBhbmQgJ2dpdC1scy1yZW1vdGUnCisJVGhpcyBzZXJ2ZXMgJ2dpdCBmZXRjaC1wYWNrJyBhbmQgJ2dpdCBscy1yZW1vdGUnCiAJY2xpZW50cy4gIEl0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGEgcmVwb3NpdG9yeSBjYW4KIAlkaXNhYmxlIGl0IGJ5IHNldHRpbmcgYGRhZW1vbi51cGxvYWRwYWNrYCBjb25maWd1cmF0aW9uCiAJaXRlbSB0byBgZmFsc2VgLgogCiB1cGxvYWQtYXJjaGl2ZTo6Ci0JVGhpcyBzZXJ2ZXMgJ2dpdC1hcmNoaXZlIC0tcmVtb3RlJy4gIEl0IGlzIGRpc2FibGVkIGJ5CisJVGhpcyBzZXJ2ZXMgJ2dpdCBhcmNoaXZlIC0tcmVtb3RlJy4gIEl0IGlzIGRpc2FibGVkIGJ5CiAJZGVmYXVsdCwgYnV0IGEgcmVwb3NpdG9yeSBjYW4gZW5hYmxlIGl0IGJ5IHNldHRpbmcKIAlgZGFlbW9uLnVwbG9hZGFyY2hgIGNvbmZpZ3VyYXRpb24gaXRlbSB0byBgdHJ1ZWAuCiAKIHJlY2VpdmUtcGFjazo6Ci0JVGhpcyBzZXJ2ZXMgJ2dpdC1zZW5kLXBhY2snIGNsaWVudHMsIGFsbG93aW5nIGFub255bW91cworCVRoaXMgc2VydmVzICdnaXQgc2VuZC1wYWNrJyBjbGllbnRzLCBhbGxvd2luZyBhbm9ueW1vdXMKIAlwdXNoLiAgSXQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgYXMgdGhlcmUgaXMgX25vXwogCWF1dGhlbnRpY2F0aW9uIGluIHRoZSBwcm90b2NvbCAoaW4gb3RoZXIgd29yZHMsIGFueWJvZHkKIAljYW4gcHVzaCBhbnl0aGluZyBpbnRvIHRoZSByZXBvc2l0b3J5LCBpbmNsdWRpbmcgcmVtb3ZhbApAQCAtMjA0LDggKzIwNCw4IEBACiBnaXQJCTk0MTgvdGNwCQkjIEdpdCBWZXJzaW9uIENvbnRyb2wgU3lzdGVtCiAtLS0tLS0tLS0tLS0KIAotJ2dpdC1kYWVtb24nIGFzIGluZXRkIHNlcnZlcjo6Ci0JVG8gc2V0IHVwICdnaXQtZGFlbW9uJyBhcyBhbiBpbmV0ZCBzZXJ2aWNlIHRoYXQgaGFuZGxlcyBhbnkKKydnaXQgZGFlbW9uJyBhcyBpbmV0ZCBzZXJ2ZXI6OgorCVRvIHNldCB1cCAnZ2l0IGRhZW1vbicgYXMgYW4gaW5ldGQgc2VydmljZSB0aGF0IGhhbmRsZXMgYW55CiAJcmVwb3NpdG9yeSB1bmRlciB0aGUgd2hpdGVsaXN0ZWQgc2V0IG9mIGRpcmVjdG9yaWVzLCAvcHViL2ZvbwogCWFuZCAvcHViL2JhciwgcGxhY2UgYW4gZW50cnkgbGlrZSB0aGUgZm9sbG93aW5nIGludG8KIAkvZXRjL2luZXRkIGFsbCBvbiBvbmUgbGluZToKQEAgLTIxNyw4ICsyMTcsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAotJ2dpdC1kYWVtb24nIGFzIGluZXRkIHNlcnZlciBmb3IgdmlydHVhbCBob3N0czo6Ci0JVG8gc2V0IHVwICdnaXQtZGFlbW9uJyBhcyBhbiBpbmV0ZCBzZXJ2aWNlIHRoYXQgaGFuZGxlcworJ2dpdCBkYWVtb24nIGFzIGluZXRkIHNlcnZlciBmb3IgdmlydHVhbCBob3N0czo6CisJVG8gc2V0IHVwICdnaXQgZGFlbW9uJyBhcyBhbiBpbmV0ZCBzZXJ2aWNlIHRoYXQgaGFuZGxlcwogCXJlcG9zaXRvcmllcyBmb3IgZGlmZmVyZW50IHZpcnR1YWwgaG9zdHMsIGB3d3cuZXhhbXBsZS5jb21gCiAJYW5kIGB3d3cuZXhhbXBsZS5vcmdgLCBwbGFjZSBhbiBlbnRyeSBsaWtlIHRoZSBmb2xsb3dpbmcgaW50bwogCWAvZXRjL2luZXRkYCBhbGwgb24gb25lIGxpbmU6CkBAIC0yNDAsOCArMjQwLDggQEAKIGRlZmF1bHQgcmVwb3NpdG9yeSBjb3VsZCBiZSBtYWRlIGFzIHdlbGwuCiAKIAotJ2dpdC1kYWVtb24nIGFzIHJlZ3VsYXIgZGFlbW9uIGZvciB2aXJ0dWFsIGhvc3RzOjoKLQlUbyBzZXQgdXAgJ2dpdC1kYWVtb24nIGFzIGEgcmVndWxhciwgbm9uLWluZXRkIHNlcnZpY2UgdGhhdAorJ2dpdCBkYWVtb24nIGFzIHJlZ3VsYXIgZGFlbW9uIGZvciB2aXJ0dWFsIGhvc3RzOjoKKwlUbyBzZXQgdXAgJ2dpdCBkYWVtb24nIGFzIGEgcmVndWxhciwgbm9uLWluZXRkIHNlcnZpY2UgdGhhdAogCWhhbmRsZXMgcmVwb3NpdG9yaWVzIGZvciBtdWx0aXBsZSB2aXJ0dWFsIGhvc3RzIGJhc2VkIG9uCiAJdGhlaXIgSVAgYWRkcmVzc2VzLCBzdGFydCB0aGUgZGFlbW9uIGxpa2UgdGhpczoKICsKQEAgLTI1OCw3ICsyNTgsNyBAQAogdGhleSBjb3JyZXNwb25kIHRvIHRoZXNlIElQIGFkZHJlc3Nlcy4KIAogc2VsZWN0aXZlbHkgZW5hYmxlL2Rpc2FibGUgc2VydmljZXMgcGVyIHJlcG9zaXRvcnk6OgotCVRvIGVuYWJsZSAnZ2l0LWFyY2hpdmUgLS1yZW1vdGUnIGFuZCBkaXNhYmxlICdnaXQtZmV0Y2gnIGFnYWluc3QKKwlUbyBlbmFibGUgJ2dpdCBhcmNoaXZlIC0tcmVtb3RlJyBhbmQgZGlzYWJsZSAnZ2l0IGZldGNoJyBhZ2FpbnN0CiAJYSByZXBvc2l0b3J5LCBoYXZlIHRoZSBmb2xsb3dpbmcgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiB0aGUKIAlyZXBvc2l0b3J5ICh0aGF0IGlzIHRoZSBmaWxlICdjb25maWcnIG5leHQgdG8gJ0hFQUQnLCAncmVmcycgYW5kCiAJJ29iamVjdHMnKS4KQEAgLTI3Miw3ICsyNzIsNyBAQAogCiBFTlZJUk9OTUVOVAogLS0tLS0tLS0tLS0KLSdnaXQtZGFlbW9uJyB3aWxsIHNldCBSRU1PVEVfQUREUiB0byB0aGUgSVAgYWRkcmVzcyBvZiB0aGUgY2xpZW50CisnZ2l0IGRhZW1vbicgd2lsbCBzZXQgUkVNT1RFX0FERFIgdG8gdGhlIElQIGFkZHJlc3Mgb2YgdGhlIGNsaWVudAogdGhhdCBjb25uZWN0ZWQgdG8gaXQsIGlmIHRoZSBJUCBhZGRyZXNzIGlzIGF2YWlsYWJsZS4gUkVNT1RFX0FERFIgd2lsbAogYmUgYXZhaWxhYmxlIGluIHRoZSBlbnZpcm9ubWVudCBvZiBob29rcyBjYWxsZWQgd2hlbgogc2VydmljZXMgYXJlIHBlcmZvcm1lZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRlc2NyaWJlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRlc2NyaWJlLnR4dAppbmRleCBiMjMxZGJiLi43ZWY5ZDUxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1kZXNjcmliZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZGVzY3JpYmUudHh0CkBAIC04LDcgKzgsOSBAQAogCiBTWU5PUFNJUwogLS0tLS0tLS0KK1t2ZXJzZV0KICdnaXQgZGVzY3JpYmUnIFstLWFsbF0gWy0tdGFnc10gWy0tY29udGFpbnNdIFstLWFiYnJldj08bj5dIDxjb21taXR0aXNoPi4uLgorJ2dpdCBkZXNjcmliZScgWy0tYWxsXSBbLS10YWdzXSBbLS1jb250YWluc10gWy0tYWJicmV2PTxuPl0gLS1kaXJ0eVs9PG1hcms+XQogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KQEAgLTI3LDYgKzI5LDExIEBACiA8Y29tbWl0dGlzaD4uLi46OgogCUNvbW1pdHRpc2ggb2JqZWN0IG5hbWVzIHRvIGRlc2NyaWJlLgogCistLWRpcnR5Wz08bWFyaz5dOjoKKwlEZXNjcmliZSB0aGUgd29ya2luZyB0cmVlLgorCUl0IG1lYW5zIGRlc2NyaWJlIEhFQUQgYW5kIGFwcGVuZHMgPG1hcms+IChgLWRpcnR5YCBieQorCWRlZmF1bHQpIGlmIHRoZSB3b3JraW5nIHRyZWUgaXMgZGlydHkuCisKIC0tYWxsOjoKIAlJbnN0ZWFkIG9mIHVzaW5nIG9ubHkgdGhlIGFubm90YXRlZCB0YWdzLCB1c2UgYW55IHJlZgogCWZvdW5kIGluIGAuZ2l0L3JlZnMvYC4gIFRoaXMgb3B0aW9uIGVuYWJsZXMgbWF0Y2hpbmcKQEAgLTQ0LDcgKzUxLDkgQEAKIAogLS1hYmJyZXY9PG4+OjoKIAlJbnN0ZWFkIG9mIHVzaW5nIHRoZSBkZWZhdWx0IDcgaGV4YWRlY2ltYWwgZGlnaXRzIGFzIHRoZQotCWFiYnJldmlhdGVkIG9iamVjdCBuYW1lLCB1c2UgPG4+IGRpZ2l0cy4KKwlhYmJyZXZpYXRlZCBvYmplY3QgbmFtZSwgdXNlIDxuPiBkaWdpdHMsIG9yIGFzIG1hbnkgZGlnaXRzCisJYXMgbmVlZGVkIHRvIGZvcm0gYSB1bmlxdWUgb2JqZWN0IG5hbWUuICBBbiA8bj4gb2YgMAorCXdpbGwgc3VwcHJlc3MgbG9uZyBmb3JtYXQsIG9ubHkgc2hvd2luZyB0aGUgY2xvc2VzdCB0YWcuCiAKIC0tY2FuZGlkYXRlcz08bj46OgogCUluc3RlYWQgb2YgY29uc2lkZXJpbmcgb25seSB0aGUgMTAgbW9zdCByZWNlbnQgdGFncyBhcwpAQCAtNjgsOCArNzcsOCBAQAogCVRoaXMgaXMgdXNlZnVsIHdoZW4geW91IHdhbnQgdG8gc2VlIHBhcnRzIG9mIHRoZSBjb21taXQgb2JqZWN0IG5hbWUKIAlpbiAiZGVzY3JpYmUiIG91dHB1dCwgZXZlbiB3aGVuIHRoZSBjb21taXQgaW4gcXVlc3Rpb24gaGFwcGVucyB0byBiZQogCWEgdGFnZ2VkIHZlcnNpb24uICBJbnN0ZWFkIG9mIGp1c3QgZW1pdHRpbmcgdGhlIHRhZyBuYW1lLCBpdCB3aWxsCi0JZGVzY3JpYmUgc3VjaCBhIGNvbW1pdCBhcyB2MS4yLTAtZGVhZGJlZWYgKDB0aCBjb21taXQgc2luY2UgdGFnIHYxLjIKLQl0aGF0IHBvaW50cyBhdCBvYmplY3QgZGVhZGJlZWYuLi4uKS4KKwlkZXNjcmliZSBzdWNoIGEgY29tbWl0IGFzIHYxLjItMC1nZGVhZGJlZSAoMHRoIGNvbW1pdCBzaW5jZSB0YWcgdjEuMgorCXRoYXQgcG9pbnRzIGF0IG9iamVjdCBkZWFkYmVlLi4uLikuCiAKIC0tbWF0Y2ggPHBhdHRlcm4+OjoKIAlPbmx5IGNvbnNpZGVyIHRhZ3MgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdHRlcm4gKGNhbiBiZSB1c2VkIHRvIGF2b2lkCkBAIC05Niw4ICsxMDUsMTEgQEAKIG9mIGNvbW1pdHMgd2hpY2ggd291bGQgYmUgZGlzcGxheWVkIGJ5ICJnaXQgbG9nIHYxLjAuNC4ucGFyZW50Ii4KIFRoZSBoYXNoIHN1ZmZpeCBpcyAiLWciICsgNy1jaGFyIGFiYnJldmlhdGlvbiBmb3IgdGhlIHRpcCBjb21taXQKIG9mIHBhcmVudCAod2hpY2ggd2FzIGAyNDE0NzIxYjE5NDQ1M2YwNTgwNzlkODk3ZDEzYzRlMzc3ZjkyZGM2YCkuCitUaGUgImciIHByZWZpeCBzdGFuZHMgZm9yICJnaXQiIGFuZCBpcyB1c2VkIHRvIGFsbG93IGRlc2NyaWJpbmcgdGhlIHZlcnNpb24gb2YKK2Egc29mdHdhcmUgZGVwZW5kaW5nIG9uIHRoZSBTQ00gdGhlIHNvZnR3YXJlIGlzIG1hbmFnZWQgd2l0aC4gVGhpcyBpcyB1c2VmdWwKK2luIGFuIGVudmlyb25tZW50IHdoZXJlIHBlb3BsZSBtYXkgdXNlIGRpZmZlcmVudCBTQ01zLgogCi1Eb2luZyBhICdnaXQtZGVzY3JpYmUnIG9uIGEgdGFnLW5hbWUgd2lsbCBqdXN0IHNob3cgdGhlIHRhZyBuYW1lOgorRG9pbmcgYSAnZ2l0IGRlc2NyaWJlJyBvbiBhIHRhZy1uYW1lIHdpbGwganVzdCBzaG93IHRoZSB0YWcgbmFtZToKIAogCVt0b3J2YWxkc0BnNSBnaXRdJCBnaXQgZGVzY3JpYmUgdjEuMC40CiAJdjEuMC40CkBAIC0xMDgsNyArMTIwLDcgQEAKIAlbdG9ydmFsZHNAZzUgZ2l0XSQgZ2l0IGRlc2NyaWJlIC0tYWxsIC0tYWJicmV2PTQgdjEuMC41XjIKIAl0YWdzL3YxLjAuMC0yMS1nOTc1YgogCi0JW3RvcnZhbGRzQGc1IGdpdF0kIGdpdCBkZXNjcmliZSAtLWFsbCBIRUFEXgorCVt0b3J2YWxkc0BnNSBnaXRdJCBnaXQgZGVzY3JpYmUgLS1hbGwgLS1hYmJyZXY9NCBIRUFEXgogCWhlYWRzL2x0L2Rlc2NyaWJlLTctZzk3NWIKIAogV2l0aCAtLWFiYnJldiBzZXQgdG8gMCwgdGhlIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gZmluZCB0aGUKQEAgLTExNywxNiArMTI5LDIzIEBACiAJW3RvcnZhbGRzQGc1IGdpdF0kIGdpdCBkZXNjcmliZSAtLWFiYnJldj0wIHYxLjAuNV4yCiAJdGFncy92MS4wLjAKIAorTm90ZSB0aGF0IHRoZSBzdWZmaXggeW91IGdldCBpZiB5b3UgdHlwZSB0aGVzZSBjb21tYW5kcyB0b2RheSBtYXkgYmUKK2xvbmdlciB0aGFuIHdoYXQgTGludXMgc2F3IGFib3ZlIHdoZW4gaGUgcmFuIHRoZXNlIGNvbW1hbmRzLCBhcyB5b3VyCitnaXQgcmVwb3NpdG9yeSBtYXkgaGF2ZSBuZXcgY29tbWl0cyB3aG9zZSBvYmplY3QgbmFtZXMgYmVnaW4gd2l0aAorOTc1YiB0aGF0IGRpZCBub3QgZXhpc3QgYmFjayB0aGVuLCBhbmQgIi1nOTc1YiIgc3VmZml4IGFsb25lIG1heSBub3QKK2JlIHN1ZmZpY2llbnQgdG8gZGlzYW1iaWd1YXRlIHRoZXNlIGNvbW1pdHMuCisKKwogU0VBUkNIIFNUUkFURUdZCiAtLS0tLS0tLS0tLS0tLS0KIAotRm9yIGVhY2ggY29tbWl0dGlzaCBzdXBwbGllZCwgJ2dpdC1kZXNjcmliZScgd2lsbCBmaXJzdCBsb29rIGZvcgorRm9yIGVhY2ggY29tbWl0dGlzaCBzdXBwbGllZCwgJ2dpdCBkZXNjcmliZScgd2lsbCBmaXJzdCBsb29rIGZvcgogYSB0YWcgd2hpY2ggdGFncyBleGFjdGx5IHRoYXQgY29tbWl0LiAgQW5ub3RhdGVkIHRhZ3Mgd2lsbCBhbHdheXMKIGJlIHByZWZlcnJlZCBvdmVyIGxpZ2h0d2VpZ2h0IHRhZ3MsIGFuZCB0YWdzIHdpdGggbmV3ZXIgZGF0ZXMgd2lsbAogYWx3YXlzIGJlIHByZWZlcnJlZCBvdmVyIHRhZ3Mgd2l0aCBvbGRlciBkYXRlcy4gIElmIGFuIGV4YWN0IG1hdGNoCiBpcyBmb3VuZCwgaXRzIG5hbWUgd2lsbCBiZSBvdXRwdXQgYW5kIHNlYXJjaGluZyB3aWxsIHN0b3AuCiAKLUlmIGFuIGV4YWN0IG1hdGNoIHdhcyBub3QgZm91bmQsICdnaXQtZGVzY3JpYmUnIHdpbGwgd2FsayBiYWNrCitJZiBhbiBleGFjdCBtYXRjaCB3YXMgbm90IGZvdW5kLCAnZ2l0IGRlc2NyaWJlJyB3aWxsIHdhbGsgYmFjawogdGhyb3VnaCB0aGUgY29tbWl0IGhpc3RvcnkgdG8gbG9jYXRlIGFuIGFuY2VzdG9yIGNvbW1pdCB3aGljaAogaGFzIGJlZW4gdGFnZ2VkLiAgVGhlIGFuY2VzdG9yJ3MgdGFnIHdpbGwgYmUgb3V0cHV0IGFsb25nIHdpdGggYW4KIGFiYnJldmlhdGlvbiBvZiB0aGUgaW5wdXQgY29tbWl0dGlzaCdzIFNIQTEuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLWZpbGVzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtZmlsZXMudHh0CmluZGV4IGM1MjYxNDEuLjljZDhjY2UgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtZmlsZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtZmlsZXMudHh0CkBAIC0xNSw3ICsxNSw3IEBACiBDb21wYXJlcyB0aGUgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhlIGluZGV4LiAgV2hlbiBwYXRocwogYXJlIHNwZWNpZmllZCwgY29tcGFyZXMgb25seSB0aG9zZSBuYW1lZCBwYXRocy4gIE90aGVyd2lzZSBhbGwKIGVudHJpZXMgaW4gdGhlIGluZGV4IGFyZSBjb21wYXJlZC4gIFRoZSBvdXRwdXQgZm9ybWF0IGlzIHRoZQotc2FtZSBhcyBmb3IgJ2dpdC1kaWZmLWluZGV4JyBhbmQgJ2dpdC1kaWZmLXRyZWUnLgorc2FtZSBhcyBmb3IgJ2dpdCBkaWZmLWluZGV4JyBhbmQgJ2dpdCBkaWZmLXRyZWUnLgogCiBPUFRJT05TCiAtLS0tLS0tCkBAIC00Myw4ICs0Myw3IEBACiAtcTo6CiAJUmVtYWluIHNpbGVudCBldmVuIG9uIG5vbmV4aXN0ZW50IGZpbGVzCiAKLU91dHB1dCBmb3JtYXQKLS0tLS0tLS0tLS0tLS0KKwogaW5jbHVkZTo6ZGlmZi1mb3JtYXQudHh0W10KIAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLWluZGV4LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtaW5kZXgudHh0CmluZGV4IDI2OTIwZDQuLjE2MmNiNzQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtaW5kZXgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtaW5kZXgudHh0CkBAIC0zMSwxMSArMzEsOSBAQAogLW06OgogCUJ5IGRlZmF1bHQsIGZpbGVzIHJlY29yZGVkIGluIHRoZSBpbmRleCBidXQgbm90IGNoZWNrZWQKIAlvdXQgYXJlIHJlcG9ydGVkIGFzIGRlbGV0ZWQuICBUaGlzIGZsYWcgbWFrZXMKLQknZ2l0LWRpZmYtaW5kZXgnIHNheSB0aGF0IGFsbCBub24tY2hlY2tlZC1vdXQgZmlsZXMgYXJlIHVwCisJJ2dpdCBkaWZmLWluZGV4JyBzYXkgdGhhdCBhbGwgbm9uLWNoZWNrZWQtb3V0IGZpbGVzIGFyZSB1cAogCXRvIGRhdGUuCiAKLU91dHB1dCBmb3JtYXQKLS0tLS0tLS0tLS0tLS0KIGluY2x1ZGU6OmRpZmYtZm9ybWF0LnR4dFtdCiAKIE9wZXJhdGluZyBNb2RlcwpAQCAtNTAsNyArNDgsNyBAQAogSWYgJy0tY2FjaGVkJyBpcyBzcGVjaWZpZWQsIGl0IGFsbG93cyB5b3UgdG8gYXNrOgogCiAJc2hvdyBtZSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBIRUFEIGFuZCB0aGUgY3VycmVudCBpbmRleAotCWNvbnRlbnRzICh0aGUgb25lcyBJJ2Qgd3JpdGUgdXNpbmcgJ2dpdC13cml0ZS10cmVlJykKKwljb250ZW50cyAodGhlIG9uZXMgSSdkIHdyaXRlIHVzaW5nICdnaXQgd3JpdGUtdHJlZScpCiAKIEZvciBleGFtcGxlLCBsZXQncyBzYXkgdGhhdCB5b3UgaGF2ZSB3b3JrZWQgb24geW91ciB3b3JraW5nIGRpcmVjdG9yeSwgdXBkYXRlZAogc29tZSBmaWxlcyBpbiB0aGUgaW5kZXggYW5kIGFyZSByZWFkeSB0byBjb21taXQuIFlvdSB3YW50IHRvIHNlZSBleGFjdGx5CkBAIC02Miw3ICs2MCw3IEBACiBFeGFtcGxlOiBsZXQncyBzYXkgSSBoYWQgcmVuYW1lZCBgY29tbWl0LmNgIHRvIGBnaXQtY29tbWl0LmNgLCBhbmQgSSBoYWQKIGRvbmUgYW4gYHVwZGF0ZS1pbmRleGAgdG8gbWFrZSB0aGF0IGVmZmVjdGl2ZSBpbiB0aGUgaW5kZXggZmlsZS4KIGBnaXQgZGlmZi1maWxlc2Agd291bGRuJ3Qgc2hvdyBhbnl0aGluZyBhdCBhbGwsIHNpbmNlIHRoZSBpbmRleCBmaWxlCi1tYXRjaGVzIG15IHdvcmtpbmcgZGlyZWN0b3J5LiBCdXQgZG9pbmcgYSAnZ2l0LWRpZmYtaW5kZXgnIGRvZXM6CittYXRjaGVzIG15IHdvcmtpbmcgZGlyZWN0b3J5LiBCdXQgZG9pbmcgYSAnZ2l0IGRpZmYtaW5kZXgnIGRvZXM6CiAKICAgdG9ydmFsZHNAcHBjOTcwOn4vZ2l0PiBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCBIRUFECiAgIC0xMDA2NDQgYmxvYiAgICA0MTYxYWVjYzY3MDBhMmViNTc5ZTg0MmFmMGI3ZjIyYjk4NDQzZjc0ICAgICAgICBjb21taXQuYwpAQCAtNzEsMTAgKzY5LDEwIEBACiBZb3UgY2FuIHNlZSBlYXNpbHkgdGhhdCB0aGUgYWJvdmUgaXMgYSByZW5hbWUuCiAKIEluIGZhY3QsIGBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZGAgKnNob3VsZCogYWx3YXlzIGJlIGVudGlyZWx5IGVxdWl2YWxlbnQgdG8KLWFjdHVhbGx5IGRvaW5nIGEgJ2dpdC13cml0ZS10cmVlJyBhbmQgY29tcGFyaW5nIHRoYXQuIEV4Y2VwdCB0aGlzIG9uZSBpcyBtdWNoCithY3R1YWxseSBkb2luZyBhICdnaXQgd3JpdGUtdHJlZScgYW5kIGNvbXBhcmluZyB0aGF0LiBFeGNlcHQgdGhpcyBvbmUgaXMgbXVjaAogbmljZXIgZm9yIHRoZSBjYXNlIHdoZXJlIHlvdSBqdXN0IHdhbnQgdG8gY2hlY2sgd2hlcmUgeW91IGFyZS4KIAotU28gZG9pbmcgYSAnZ2l0LWRpZmYtaW5kZXggLS1jYWNoZWQnIGlzIGJhc2ljYWxseSB2ZXJ5IHVzZWZ1bCB3aGVuIHlvdSBhcmUKK1NvIGRvaW5nIGEgYGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkYCBpcyBiYXNpY2FsbHkgdmVyeSB1c2VmdWwgd2hlbiB5b3UgYXJlCiBhc2tpbmcgeW91cnNlbGYgIndoYXQgaGF2ZSBJIGFscmVhZHkgbWFya2VkIGZvciBiZWluZyBjb21taXR0ZWQsIGFuZAogd2hhdCdzIHRoZSBkaWZmZXJlbmNlIHRvIGEgcHJldmlvdXMgdHJlZSIuCiAKQEAgLTgyLDIwICs4MCwyMCBAQAogLS0tLS0tLS0tLS0tLS0tCiBUaGUgIm5vbi1jYWNoZWQiIG1vZGUgdGFrZXMgYSBkaWZmZXJlbnQgYXBwcm9hY2gsIGFuZCBpcyBwb3RlbnRpYWxseQogdGhlIG1vcmUgdXNlZnVsIG9mIHRoZSB0d28gaW4gdGhhdCB3aGF0IGl0IGRvZXMgY2FuJ3QgYmUgZW11bGF0ZWQgd2l0aAotYSAnZ2l0LXdyaXRlLXRyZWUnICsgJ2dpdC1kaWZmLXRyZWUnLiBUaHVzIHRoYXQncyB0aGUgZGVmYXVsdCBtb2RlLgorYSAnZ2l0IHdyaXRlLXRyZWUnICsgJ2dpdCBkaWZmLXRyZWUnLiBUaHVzIHRoYXQncyB0aGUgZGVmYXVsdCBtb2RlLgogVGhlIG5vbi1jYWNoZWQgdmVyc2lvbiBhc2tzIHRoZSBxdWVzdGlvbjoKIAogICBzaG93IG1lIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIEhFQUQgYW5kIHRoZSBjdXJyZW50bHkgY2hlY2tlZCBvdXQKICAgdHJlZSAtIGluZGV4IGNvbnRlbnRzIF9hbmRfIGZpbGVzIHRoYXQgYXJlbid0IHVwLXRvLWRhdGUKIAogd2hpY2ggaXMgb2J2aW91c2x5IGEgdmVyeSB1c2VmdWwgcXVlc3Rpb24gdG9vLCBzaW5jZSB0aGF0IHRlbGxzIHlvdSB3aGF0Ci15b3UgKmNvdWxkKiBjb21taXQuIEFnYWluLCB0aGUgb3V0cHV0IG1hdGNoZXMgdGhlICdnaXQtZGlmZi10cmVlIC1yJworeW91ICpjb3VsZCogY29tbWl0LiBBZ2FpbiwgdGhlIG91dHB1dCBtYXRjaGVzIHRoZSAnZ2l0IGRpZmYtdHJlZSAtcicKIG91dHB1dCB0byBhIHRlZSwgYnV0IHdpdGggYSB0d2lzdC4KIAogVGhlIHR3aXN0IGlzIHRoYXQgaWYgc29tZSBmaWxlIGRvZXNuJ3QgbWF0Y2ggdGhlIGluZGV4LCB3ZSBkb24ndCBoYXZlCiBhIGJhY2tpbmcgc3RvcmUgdGhpbmcgZm9yIGl0LCBhbmQgd2UgdXNlIHRoZSBtYWdpYyAiYWxsLXplcm8iIHNoYTEgdG8KIHNob3cgdGhhdC4gU28gbGV0J3Mgc2F5IHRoYXQgeW91IGhhdmUgZWRpdGVkIGBrZXJuZWwvc2NoZWQuY2AsIGJ1dAotaGF2ZSBub3QgYWN0dWFsbHkgZG9uZSBhICdnaXQtdXBkYXRlLWluZGV4JyBvbiBpdCB5ZXQgLSB0aGVyZSBpcyBubworaGF2ZSBub3QgYWN0dWFsbHkgZG9uZSBhICdnaXQgdXBkYXRlLWluZGV4JyBvbiBpdCB5ZXQgLSB0aGVyZSBpcyBubwogIm9iamVjdCIgYXNzb2NpYXRlZCB3aXRoIHRoZSBuZXcgc3RhdGUsIGFuZCB5b3UgZ2V0OgogCiAgIHRvcnZhbGRzQHBwYzk3MDp+L3YyLjYvbGludXg+IGdpdCBkaWZmLWluZGV4IEhFQUQKQEAgLTEwNiwxMSArMTA0LDExIEBACiBnZXQgdGhlIHJlYWwgZGlmZiwgeW91IG5lZWQgdG8gbG9vayBhdCB0aGUgb2JqZWN0IGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeQogZGlyZWN0bHkgcmF0aGVyIHRoYW4gZG8gYW4gb2JqZWN0LXRvLW9iamVjdCBkaWZmLgogCi1OT1RFOiBBcyB3aXRoIG90aGVyIGNvbW1hbmRzIG9mIHRoaXMgdHlwZSwgJ2dpdC1kaWZmLWluZGV4JyBkb2VzIG5vdAorTk9URTogQXMgd2l0aCBvdGhlciBjb21tYW5kcyBvZiB0aGlzIHR5cGUsICdnaXQgZGlmZi1pbmRleCcgZG9lcyBub3QKIGFjdHVhbGx5IGxvb2sgYXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIGF0IGFsbC4gU28gbWF5YmUKIGBrZXJuZWwvc2NoZWQuY2AgaGFzbid0IGFjdHVhbGx5IGNoYW5nZWQsIGFuZCBpdCdzIGp1c3QgdGhhdCB5b3UKIHRvdWNoZWQgaXQuIEluIGVpdGhlciBjYXNlLCBpdCdzIGEgbm90ZSB0aGF0IHlvdSBuZWVkIHRvCi0nZ2l0LXVwZGF0ZS1pbmRleCcgaXQgdG8gbWFrZSB0aGUgaW5kZXggYmUgaW4gc3luYy4KKydnaXQgdXBkYXRlLWluZGV4JyBpdCB0byBtYWtlIHRoZSBpbmRleCBiZSBpbiBzeW5jLgogCiBOT1RFOiBZb3UgY2FuIGhhdmUgYSBtaXh0dXJlIG9mIGZpbGVzIHNob3cgdXAgYXMgImhhcyBiZWVuIHVwZGF0ZWQiCiBhbmQgImlzIHN0aWxsIGRpcnR5IGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeSIgdG9nZXRoZXIuIFlvdSBjYW4gYWx3YXlzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLXRyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi10cmVlLnR4dAppbmRleCAyM2I3YWJkLi5hN2UzN2I4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLXRyZWUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtdHJlZS50eHQKQEAgLTIwLDcgKzIwLDcgQEAKIElmIHRoZXJlIGlzIG9ubHkgb25lIDx0cmVlLWlzaD4gZ2l2ZW4sIHRoZSBjb21taXQgaXMgY29tcGFyZWQgd2l0aCBpdHMgcGFyZW50cwogKHNlZSAtLXN0ZGluIGJlbG93KS4KIAotTm90ZSB0aGF0ICdnaXQtZGlmZi10cmVlJyBjYW4gdXNlIHRoZSB0cmVlIGVuY2Fwc3VsYXRlZCBpbiBhIGNvbW1pdCBvYmplY3QuCitOb3RlIHRoYXQgJ2dpdCBkaWZmLXRyZWUnIGNhbiB1c2UgdGhlIHRyZWUgZW5jYXBzdWxhdGVkIGluIGEgY29tbWl0IG9iamVjdC4KIAogT1BUSU9OUwogLS0tLS0tLQpAQCAtNjcsMjUgKzY3LDI1IEBACiBjb21taXRzIChidXQgbm90IHRyZWVzKS4KIAogLW06OgotCUJ5IGRlZmF1bHQsICdnaXQtZGlmZi10cmVlIC0tc3RkaW4nIGRvZXMgbm90IHNob3cKKwlCeSBkZWZhdWx0LCAnZ2l0IGRpZmYtdHJlZSAtLXN0ZGluJyBkb2VzIG5vdCBzaG93CiAJZGlmZmVyZW5jZXMgZm9yIG1lcmdlIGNvbW1pdHMuICBXaXRoIHRoaXMgZmxhZywgaXQgc2hvd3MKIAlkaWZmZXJlbmNlcyB0byB0aGF0IGNvbW1pdCBmcm9tIGFsbCBvZiBpdHMgcGFyZW50cy4gU2VlCiAJYWxzbyAnLWMnLgogCiAtczo6Ci0JQnkgZGVmYXVsdCwgJ2dpdC1kaWZmLXRyZWUgLS1zdGRpbicgc2hvd3MgZGlmZmVyZW5jZXMsCisJQnkgZGVmYXVsdCwgJ2dpdCBkaWZmLXRyZWUgLS1zdGRpbicgc2hvd3MgZGlmZmVyZW5jZXMsCiAJZWl0aGVyIGluIG1hY2hpbmUtcmVhZGFibGUgZm9ybSAod2l0aG91dCAnLXAnKSBvciBpbiBwYXRjaAogCWZvcm0gKHdpdGggJy1wJykuICBUaGlzIG91dHB1dCBjYW4gYmUgc3VwcHJlc3NlZC4gIEl0IGlzCiAJb25seSB1c2VmdWwgd2l0aCAnLXYnIGZsYWcuCiAKIC12OjoKLQlUaGlzIGZsYWcgY2F1c2VzICdnaXQtZGlmZi10cmVlIC0tc3RkaW4nIHRvIGFsc28gc2hvdworCVRoaXMgZmxhZyBjYXVzZXMgJ2dpdCBkaWZmLXRyZWUgLS1zdGRpbicgdG8gYWxzbyBzaG93CiAJdGhlIGNvbW1pdCBtZXNzYWdlIGJlZm9yZSB0aGUgZGlmZmVyZW5jZXMuCiAKIGluY2x1ZGU6OnByZXR0eS1vcHRpb25zLnR4dFtdCiAKIC0tbm8tY29tbWl0LWlkOjoKLQknZ2l0LWRpZmYtdHJlZScgb3V0cHV0cyBhIGxpbmUgd2l0aCB0aGUgY29tbWl0IElEIHdoZW4KKwknZ2l0IGRpZmYtdHJlZScgb3V0cHV0cyBhIGxpbmUgd2l0aCB0aGUgY29tbWl0IElEIHdoZW4KIAlhcHBsaWNhYmxlLiAgVGhpcyBmbGFnIHN1cHByZXNzZWQgdGhlIGNvbW1pdCBJRCBvdXRwdXQuCiAKIC1jOjoKQEAgLTE1OSw4ICsxNTksNyBAQAogCiBpbiBjYXNlIHlvdSBjYXJlKS4KIAotT3V0cHV0IGZvcm1hdAotLS0tLS0tLS0tLS0tLQorCiBpbmNsdWRlOjpkaWZmLWZvcm1hdC50eHRbXQogCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi50eHQKaW5kZXggYTJmMTkyZi4uNzIzYTY0OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi50eHQKQEAgLTg0LDggKzg0LDcgQEAKIAl0aGUgZGlmZiB0byB0aGUgbmFtZWQgcGF0aHMgKHlvdSBjYW4gZ2l2ZSBkaXJlY3RvcnkKIAluYW1lcyBhbmQgZ2V0IGRpZmYgZm9yIGFsbCBmaWxlcyB1bmRlciB0aGVtKS4KIAotT3V0cHV0IGZvcm1hdAotLS0tLS0tLS0tLS0tLQorCiBpbmNsdWRlOjpkaWZmLWZvcm1hdC50eHRbXQogCiBFWEFNUExFUwpAQCAtMTU4LDYgKzE1NywxMCBAQAogcmV3cml0ZXMgKHZlcnkgZXhwZW5zaXZlKS4KIDwyPiBPdXRwdXQgZGlmZiBpbiByZXZlcnNlLgogCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWRpZmZ0b29sWzFdOjoKKwlTaG93IGNoYW5nZXMgdXNpbmcgY29tbW9uIGRpZmYgdG9vbHMKIAogQXV0aG9yCiAtLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmZ0b29sLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmZ0b29sLnR4dAppbmRleCAxNWIyNDdiLi44MjUwYmFkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmdG9vbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZnRvb2wudHh0CkBAIC03LDEzICs3LDEzIEBACiAKIFNZTk9QU0lTCiAtLS0tLS0tLQotJ2dpdCBkaWZmdG9vbCcgWy0tdG9vbD08dG9vbD5dIFsteXwtLW5vLXByb21wdHwtLXByb21wdF0gWzwnZ2l0IGRpZmYnIG9wdGlvbnM+XQorJ2dpdCBkaWZmdG9vbCcgWzxvcHRpb25zPl0gPGNvbW1pdD57MCwyfSBbLS1dIFs8cGF0aD4uLi5dCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQotJ2dpdC1kaWZmdG9vbCcgaXMgYSBnaXQgY29tbWFuZCB0aGF0IGFsbG93cyB5b3UgdG8gY29tcGFyZSBhbmQgZWRpdCBmaWxlcworJ2dpdCBkaWZmdG9vbCcgaXMgYSBnaXQgY29tbWFuZCB0aGF0IGFsbG93cyB5b3UgdG8gY29tcGFyZSBhbmQgZWRpdCBmaWxlcwogYmV0d2VlbiByZXZpc2lvbnMgdXNpbmcgY29tbW9uIGRpZmYgdG9vbHMuICAnZ2l0IGRpZmZ0b29sJyBpcyBhIGZyb250ZW5kCi10byAnZ2l0LWRpZmYnIGFuZCBhY2NlcHRzIHRoZSBzYW1lIG9wdGlvbnMgYW5kIGFyZ3VtZW50cy4KK3RvICdnaXQgZGlmZicgYW5kIGFjY2VwdHMgdGhlIHNhbWUgb3B0aW9ucyBhbmQgYXJndW1lbnRzLgogCiBPUFRJT05TCiAtLS0tLS0tCkBAIC0zMSwyNSArMzEsMjUgQEAKIAlVc2UgdGhlIGRpZmYgdG9vbCBzcGVjaWZpZWQgYnkgPHRvb2w+LgogCVZhbGlkIG1lcmdlIHRvb2xzIGFyZToKIAlrZGlmZjMsIGtvbXBhcmUsIHRrZGlmZiwgbWVsZCwgeHhkaWZmLCBlbWVyZ2UsIHZpbWRpZmYsIGd2aW1kaWZmLAotCWVjbWVyZ2UsIGRpZmZ1c2UgYW5kIG9wZW5kaWZmCisJZWNtZXJnZSwgZGlmZnVzZSwgb3BlbmRpZmYsIHA0bWVyZ2UgYW5kIGFyYXhpcy4KICsKLUlmIGEgZGlmZiB0b29sIGlzIG5vdCBzcGVjaWZpZWQsICdnaXQtZGlmZnRvb2wnCitJZiBhIGRpZmYgdG9vbCBpcyBub3Qgc3BlY2lmaWVkLCAnZ2l0IGRpZmZ0b29sJwogd2lsbCB1c2UgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGRpZmYudG9vbGAuICBJZiB0aGUKLWNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGRpZmYudG9vbGAgaXMgbm90IHNldCwgJ2dpdC1kaWZmdG9vbCcKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGRpZmYudG9vbGAgaXMgbm90IHNldCwgJ2dpdCBkaWZmdG9vbCcKIHdpbGwgcGljayBhIHN1aXRhYmxlIGRlZmF1bHQuCiArCiBZb3UgY2FuIGV4cGxpY2l0bHkgcHJvdmlkZSBhIGZ1bGwgcGF0aCB0byB0aGUgdG9vbCBieSBzZXR0aW5nIHRoZQogY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgZGlmZnRvb2wuPHRvb2w+LnBhdGhgLiBGb3IgZXhhbXBsZSwgeW91CiBjYW4gY29uZmlndXJlIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIGtkaWZmMyBieSBzZXR0aW5nCi1gZGlmZnRvb2wua2RpZmYzLnBhdGhgLiBPdGhlcndpc2UsICdnaXQtZGlmZnRvb2wnIGFzc3VtZXMgdGhlCitgZGlmZnRvb2wua2RpZmYzLnBhdGhgLiBPdGhlcndpc2UsICdnaXQgZGlmZnRvb2wnIGFzc3VtZXMgdGhlCiB0b29sIGlzIGF2YWlsYWJsZSBpbiBQQVRILgogKwogSW5zdGVhZCBvZiBydW5uaW5nIG9uZSBvZiB0aGUga25vd24gZGlmZiB0b29scywKLSdnaXQtZGlmZnRvb2wnIGNhbiBiZSBjdXN0b21pemVkIHRvIHJ1biBhbiBhbHRlcm5hdGl2ZSBwcm9ncmFtCisnZ2l0IGRpZmZ0b29sJyBjYW4gYmUgY3VzdG9taXplZCB0byBydW4gYW4gYWx0ZXJuYXRpdmUgcHJvZ3JhbQogYnkgc3BlY2lmeWluZyB0aGUgY29tbWFuZCBsaW5lIHRvIGludm9rZSBpbiBhIGNvbmZpZ3VyYXRpb24KIHZhcmlhYmxlIGBkaWZmdG9vbC48dG9vbD4uY21kYC4KICsKLVdoZW4gJ2dpdC1kaWZmdG9vbCcgaXMgaW52b2tlZCB3aXRoIHRoaXMgdG9vbCAoZWl0aGVyIHRocm91Z2ggdGhlCitXaGVuICdnaXQgZGlmZnRvb2wnIGlzIGludm9rZWQgd2l0aCB0aGlzIHRvb2wgKGVpdGhlciB0aHJvdWdoIHRoZQogYC10YCBvciBgLS10b29sYCBvcHRpb24gb3IgdGhlIGBkaWZmLnRvb2xgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUpCiB0aGUgY29uZmlndXJlZCBjb21tYW5kIGxpbmUgd2lsbCBiZSBpbnZva2VkIHdpdGggdGhlIGZvbGxvd2luZwogdmFyaWFibGVzIGF2YWlsYWJsZTogYCRMT0NBTGAgaXMgc2V0IHRvIHRoZSBuYW1lIG9mIHRoZSB0ZW1wb3JhcnkKQEAgLTU4LDE2ICs1OCwzMSBAQAogb2YgdGhlIGRpZmYgcG9zdC1pbWFnZS4gIGAkQkFTRWAgaXMgcHJvdmlkZWQgZm9yIGNvbXBhdGliaWxpdHkKIHdpdGggY3VzdG9tIG1lcmdlIHRvb2wgY29tbWFuZHMgYW5kIGhhcyB0aGUgc2FtZSB2YWx1ZSBhcyBgJExPQ0FMYC4KIAorLXggPGNvbW1hbmQ+OjoKKy0tZXh0Y21kPTxjb21tYW5kPjo6CisJU3BlY2lmeSBhIGN1c3RvbSBjb21tYW5kIGZvciB2aWV3aW5nIGRpZmZzLgorCSdnaXQtZGlmZnRvb2wnIGlnbm9yZXMgdGhlIGNvbmZpZ3VyZWQgZGVmYXVsdHMgYW5kIHJ1bnMKKwlgJGNvbW1hbmQgJExPQ0FMICRSRU1PVEVgIHdoZW4gdGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkLgorCistZzo6CistLWd1aTo6CisJV2hlbiAnZ2l0LWRpZmZ0b29sJyBpcyBpbnZva2VkIHdpdGggdGhlIGAtZ2Agb3IgYC0tZ3VpYCBvcHRpb24KKwl0aGUgZGVmYXVsdCBkaWZmIHRvb2wgd2lsbCBiZSByZWFkIGZyb20gdGhlIGNvbmZpZ3VyZWQKKwlgZGlmZi5ndWl0b29sYCB2YXJpYWJsZSBpbnN0ZWFkIG9mIGBkaWZmLnRvb2xgLgorCiBTZWUgbGlua2dpdDpnaXQtZGlmZlsxXSBmb3IgdGhlIGZ1bGwgbGlzdCBvZiBzdXBwb3J0ZWQgb3B0aW9ucy4KIAogQ09ORklHIFZBUklBQkxFUwogLS0tLS0tLS0tLS0tLS0tLQotJ2dpdC1kaWZmdG9vbCcgZmFsbHMgYmFjayB0byAnZ2l0LW1lcmdldG9vbCcgY29uZmlnIHZhcmlhYmxlcyB3aGVuIHRoZQorJ2dpdCBkaWZmdG9vbCcgZmFsbHMgYmFjayB0byAnZ2l0IG1lcmdldG9vbCcgY29uZmlnIHZhcmlhYmxlcyB3aGVuIHRoZQogZGlmZnRvb2wgZXF1aXZhbGVudHMgaGF2ZSBub3QgYmVlbiBkZWZpbmVkLgogCiBkaWZmLnRvb2w6OgogCVRoZSBkZWZhdWx0IGRpZmYgdG9vbCB0byB1c2UuCiAKK2RpZmYuZ3VpdG9vbDo6CisJVGhlIGRlZmF1bHQgZGlmZiB0b29sIHRvIHVzZSB3aGVuIGAtLWd1aWAgaXMgc3BlY2lmaWVkLgorCiBkaWZmdG9vbC48dG9vbD4ucGF0aDo6CiAJT3ZlcnJpZGUgdGhlIHBhdGggZm9yIHRoZSBnaXZlbiB0b29sLiAgVGhpcyBpcyB1c2VmdWwgaW4gY2FzZQogCXlvdXIgdG9vbCBpcyBub3QgaW4gdGhlIFBBVEguCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1mYXN0LWV4cG9ydC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mYXN0LWV4cG9ydC50eHQKaW5kZXggMGM5ZWI1Ni4uOThlYzZiNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1leHBvcnQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZhc3QtZXhwb3J0LnR4dApAQCAtMTMsMTggKzEzLDE4IEBACiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KIFRoaXMgcHJvZ3JhbSBkdW1wcyB0aGUgZ2l2ZW4gcmV2aXNpb25zIGluIGEgZm9ybSBzdWl0YWJsZSB0byBiZSBwaXBlZAotaW50byAnZ2l0LWZhc3QtaW1wb3J0Jy4KK2ludG8gJ2dpdCBmYXN0LWltcG9ydCcuCiAKIFlvdSBjYW4gdXNlIGl0IGFzIGEgaHVtYW4tcmVhZGFibGUgYnVuZGxlIHJlcGxhY2VtZW50IChzZWUKIGxpbmtnaXQ6Z2l0LWJ1bmRsZVsxXSksIG9yIGFzIGEga2luZCBvZiBhbiBpbnRlcmFjdGl2ZQotJ2dpdC1maWx0ZXItYnJhbmNoJy4KKydnaXQgZmlsdGVyLWJyYW5jaCcuCiAKIAogT1BUSU9OUwogLS0tLS0tLQogLS1wcm9ncmVzcz08bj46OgogCUluc2VydCAncHJvZ3Jlc3MnIHN0YXRlbWVudHMgZXZlcnkgPG4+IG9iamVjdHMsIHRvIGJlIHNob3duIGJ5Ci0JJ2dpdC1mYXN0LWltcG9ydCcgZHVyaW5nIGltcG9ydC4KKwknZ2l0IGZhc3QtaW1wb3J0JyBkdXJpbmcgaW1wb3J0LgogCiAtLXNpZ25lZC10YWdzPSh2ZXJiYXRpbXx3YXJufHN0cmlwfGFib3J0KTo6CiAJU3BlY2lmeSBob3cgdG8gaGFuZGxlIHNpZ25lZCB0YWdzLiAgU2luY2UgYW55IHRyYW5zZm9ybWF0aW9uCkBAIC0zNiw2ICszNiwxNyBAQAogdW5zaWduZWQsIHdpdGggJ3ZlcmJhdGltJywgdGhleSB3aWxsIGJlIHNpbGVudGx5IGV4cG9ydGVkCiBhbmQgd2l0aCAnd2FybicsIHRoZXkgd2lsbCBiZSBleHBvcnRlZCwgYnV0IHlvdSB3aWxsIHNlZSBhIHdhcm5pbmcuCiAKKy0tdGFnLW9mLWZpbHRlcmVkLW9iamVjdD0oYWJvcnR8ZHJvcHxyZXdyaXRlKTo6CisJU3BlY2lmeSBob3cgdG8gaGFuZGxlIHRhZ3Mgd2hvc2UgdGFnZ2VkIG9iamVjdCBpcyBmaWx0ZXJlZCBvdXQuCisJU2luY2UgcmV2aXNpb25zIGFuZCBmaWxlcyB0byBleHBvcnQgY2FuIGJlIGxpbWl0ZWQgYnkgcGF0aCwKKwl0YWdnZWQgb2JqZWN0cyBtYXkgYmUgZmlsdGVyZWQgY29tcGxldGVseS4KKysKK1doZW4gYXNraW5nIHRvICdhYm9ydCcgKHdoaWNoIGlzIHRoZSBkZWZhdWx0KSwgdGhpcyBwcm9ncmFtIHdpbGwgZGllCit3aGVuIGVuY291bnRlcmluZyBzdWNoIGEgdGFnLiAgV2l0aCAnZHJvcCcgaXQgd2lsbCBvbWl0IHN1Y2ggdGFncyBmcm9tCit0aGUgb3V0cHV0LiAgV2l0aCAncmV3cml0ZScsIGlmIHRoZSB0YWdnZWQgb2JqZWN0IGlzIGEgY29tbWl0LCBpdCB3aWxsCityZXdyaXRlIHRoZSB0YWcgdG8gdGFnIGFuIGFuY2VzdG9yIGNvbW1pdCAodmlhIHBhcmVudCByZXdyaXRpbmc7IHNlZQorbGlua2dpdDpnaXQtcmV2LWxpc3RbMV0pCisKIC1NOjoKIC1DOjoKIAlQZXJmb3JtIG1vdmUgYW5kL29yIGNvcHkgZGV0ZWN0aW9uLCBhcyBkZXNjcmliZWQgaW4gdGhlCkBAIC03MSw2ICs4MiwyMCBAQAogCWFsbG93IHRoYXQuICBTbyBmYWtlIGEgdGFnZ2VyIHRvIGJlIGFibGUgdG8gZmFzdC1pbXBvcnQgdGhlCiAJb3V0cHV0LgogCistLW5vLWRhdGE6OgorCVNraXAgb3V0cHV0IG9mIGJsb2Igb2JqZWN0cyBhbmQgaW5zdGVhZCByZWZlciB0byBibG9icyB2aWEKKwl0aGVpciBvcmlnaW5hbCBTSEEtMSBoYXNoLiAgVGhpcyBpcyB1c2VmdWwgd2hlbiByZXdyaXRpbmcgdGhlCisJZGlyZWN0b3J5IHN0cnVjdHVyZSBvciBoaXN0b3J5IG9mIGEgcmVwb3NpdG9yeSB3aXRob3V0CisJdG91Y2hpbmcgdGhlIGNvbnRlbnRzIG9mIGluZGl2aWR1YWwgZmlsZXMuICBOb3RlIHRoYXQgdGhlCisJcmVzdWx0aW5nIHN0cmVhbSBjYW4gb25seSBiZSB1c2VkIGJ5IGEgcmVwb3NpdG9yeSB3aGljaAorCWFscmVhZHkgY29udGFpbnMgdGhlIG5lY2Vzc2FyeSBvYmplY3RzLgorCitbZ2l0LXJldi1saXN0LWFyZ3MuLi5dOjoKKyAgICAgICBBIGxpc3Qgb2YgYXJndW1lbnRzLCBhY2NlcHRhYmxlIHRvICdnaXQgcmV2LXBhcnNlJyBhbmQKKyAgICAgICAnZ2l0IHJldi1saXN0JywgdGhhdCBzcGVjaWZpZXMgdGhlIHNwZWNpZmljIG9iamVjdHMgYW5kIHJlZmVyZW5jZXMKKyAgICAgICB0byBleHBvcnQuICBGb3IgZXhhbXBsZSwgYG1hc3Rlclx+MTAuLm1hc3RlcmAgY2F1c2VzIHRoZQorICAgICAgIGN1cnJlbnQgbWFzdGVyIHJlZmVyZW5jZSB0byBiZSBleHBvcnRlZCBhbG9uZyB3aXRoIGFsbCBvYmplY3RzCisgICAgICAgYWRkZWQgc2luY2UgaXRzIDEwdGggYW5jZXN0b3IgY29tbWl0LgogCiBFWEFNUExFUwogLS0tLS0tLS0KQEAgLTEwMCw3ICsxMjUsNyBAQAogTGltaXRhdGlvbnMKIC0tLS0tLS0tLS0tCiAKLVNpbmNlICdnaXQtZmFzdC1pbXBvcnQnIGNhbm5vdCB0YWcgdHJlZXMsIHlvdSB3aWxsIG5vdCBiZQorU2luY2UgJ2dpdCBmYXN0LWltcG9ydCcgY2Fubm90IHRhZyB0cmVlcywgeW91IHdpbGwgbm90IGJlCiBhYmxlIHRvIGV4cG9ydCB0aGUgbGludXgtMi42LmdpdCByZXBvc2l0b3J5IGNvbXBsZXRlbHksIGFzIGl0IGNvbnRhaW5zCiBhIHRhZyByZWZlcmVuY2luZyBhIHRyZWUgaW5zdGVhZCBvZiBhIGNvbW1pdC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1pbXBvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1pbXBvcnQudHh0CmluZGV4IGMyZjQ4M2EuLjE5MDgyYjAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWZhc3QtaW1wb3J0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mYXN0LWltcG9ydC50eHQKQEAgLTE1LDcgKzE1LDcgQEAKIFRoaXMgcHJvZ3JhbSBpcyB1c3VhbGx5IG5vdCB3aGF0IHRoZSBlbmQgdXNlciB3YW50cyB0byBydW4gZGlyZWN0bHkuCiBNb3N0IGVuZCB1c2VycyB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGV4aXN0aW5nIGZyb250ZW5kIHByb2dyYW1zLAogd2hpY2ggcGFyc2VzIGEgc3BlY2lmaWMgdHlwZSBvZiBmb3JlaWduIHNvdXJjZSBhbmQgZmVlZHMgdGhlIGNvbnRlbnRzCi1zdG9yZWQgdGhlcmUgdG8gJ2dpdC1mYXN0LWltcG9ydCcuCitzdG9yZWQgdGhlcmUgdG8gJ2dpdCBmYXN0LWltcG9ydCcuCiAKIGZhc3QtaW1wb3J0IHJlYWRzIGEgbWl4ZWQgY29tbWFuZC9kYXRhIHN0cmVhbSBmcm9tIHN0YW5kYXJkIGlucHV0IGFuZAogd3JpdGVzIG9uZSBvciBtb3JlIHBhY2tmaWxlcyBkaXJlY3RseSBpbnRvIHRoZSBjdXJyZW50IHJlcG9zaXRvcnkuCkBAIC0yNCw3ICsyNCw3IEBACiB3aXRoIHRoZSBuZXdseSBpbXBvcnRlZCBkYXRhLgogCiBUaGUgZmFzdC1pbXBvcnQgYmFja2VuZCBpdHNlbGYgY2FuIGltcG9ydCBpbnRvIGFuIGVtcHR5IHJlcG9zaXRvcnkgKG9uZSB0aGF0Ci1oYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkIGJ5ICdnaXQtaW5pdCcpIG9yIGluY3JlbWVudGFsbHkKK2hhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQgYnkgJ2dpdCBpbml0Jykgb3IgaW5jcmVtZW50YWxseQogdXBkYXRlIGFuIGV4aXN0aW5nIHBvcHVsYXRlZCByZXBvc2l0b3J5LiAgV2hldGhlciBvciBub3QgaW5jcmVtZW50YWwKIGltcG9ydHMgYXJlIHN1cHBvcnRlZCBmcm9tIGEgcGFydGljdWxhciBmb3JlaWduIHNvdXJjZSBkZXBlbmRzIG9uCiB0aGUgZnJvbnRlbmQgcHJvZ3JhbSBpbiB1c2UuCkBAIC00NCwxMSArNDQsMTQgQEAKIAlub3QgY29udGFpbiB0aGUgb2xkIGNvbW1pdCkuCiAKIC0tbWF4LXBhY2stc2l6ZT08bj46OgotCU1heGltdW0gc2l6ZSBvZiBlYWNoIG91dHB1dCBwYWNrZmlsZSwgZXhwcmVzc2VkIGluIE1pQi4KLQlUaGUgZGVmYXVsdCBpcyA0MDk2ICg0IEdpQikgYXMgdGhhdCBpcyB0aGUgbWF4aW11bSBhbGxvd2VkCi0JcGFja2ZpbGUgc2l6ZSAoZHVlIHRvIGZpbGUgZm9ybWF0IGxpbWl0YXRpb25zKS4gU29tZQotCWltcG9ydGVycyBtYXkgd2lzaCB0byBsb3dlciB0aGlzLCBzdWNoIGFzIHRvIGVuc3VyZSB0aGUKLQlyZXN1bHRpbmcgcGFja2ZpbGVzIGZpdCBvbiBDRHMuCisJTWF4aW11bSBzaXplIG9mIGVhY2ggb3V0cHV0IHBhY2tmaWxlLgorCVRoZSBkZWZhdWx0IGlzIHVubGltaXRlZC4KKworLS1iaWctZmlsZS10aHJlc2hvbGQ9PG4+OjoKKwlNYXhpbXVtIHNpemUgb2YgYSBibG9iIHRoYXQgZmFzdC1pbXBvcnQgd2lsbCBhdHRlbXB0IHRvCisJY3JlYXRlIGEgZGVsdGEgZm9yLCBleHByZXNzZWQgaW4gYnl0ZXMuICBUaGUgZGVmYXVsdCBpcyA1MTJtCisJKDUxMiBNaUIpLiAgU29tZSBpbXBvcnRlcnMgbWF5IHdpc2ggdG8gbG93ZXIgdGhpcyBvbiBzeXN0ZW1zCisJd2l0aCBjb25zdHJhaW5lZCBtZW1vcnkuCiAKIC0tZGVwdGg9PG4+OjoKIAlNYXhpbXVtIGRlbHRhIGRlcHRoLCBmb3IgYmxvYiBhbmQgdHJlZSBkZWx0aWZpY2F0aW9uLgpAQCAtNzUsNiArNzgsMjAgQEAKIAlzZXQgb2YgbWFya3MuICBJZiBhIG1hcmsgaXMgZGVmaW5lZCB0byBkaWZmZXJlbnQgdmFsdWVzLAogCXRoZSBsYXN0IGZpbGUgd2lucy4KIAorLS1yZWxhdGl2ZS1tYXJrczo6CisJQWZ0ZXIgc3BlY2lmeWluZyAtLXJlbGF0aXZlLW1hcmtzPSB0aGUgcGF0aHMgc3BlY2lmaWVkCisJd2l0aCAtLWltcG9ydC1tYXJrcz0gYW5kIC0tZXhwb3J0LW1hcmtzPSBhcmUgcmVsYXRpdmUKKwl0byBhbiBpbnRlcm5hbCBkaXJlY3RvcnkgaW4gdGhlIGN1cnJlbnQgcmVwb3NpdG9yeS4KKwlJbiBnaXQtZmFzdC1pbXBvcnQgdGhpcyBtZWFucyB0aGF0IHRoZSBwYXRocyBhcmUgcmVsYXRpdmUKKwl0byB0aGUgLmdpdC9pbmZvL2Zhc3QtaW1wb3J0IGRpcmVjdG9yeS4gSG93ZXZlciwgb3RoZXIKKwlpbXBvcnRlcnMgbWF5IHVzZSBhIGRpZmZlcmVudCBsb2NhdGlvbi4KKworLS1uby1yZWxhdGl2ZS1tYXJrczo6CisJTmVnYXRlcyBhIHByZXZpb3VzIC0tcmVsYXRpdmUtbWFya3MuIEFsbG93cyBmb3IgY29tYmluaW5nCisJcmVsYXRpdmUgYW5kIG5vbi1yZWxhdGl2ZSBtYXJrcyBieSBpbnRlcndlYXZpbmcKKwktLShuby0pLXJlbGF0aXZlLW1hcmtzPSB3aXRoIHRoZSAtLShpbXBvcnR8ZXhwb3J0KS1tYXJrcz0KKwlvcHRpb25zLgorCiAtLWV4cG9ydC1wYWNrLWVkZ2VzPTxmaWxlPjo6CiAJQWZ0ZXIgY3JlYXRpbmcgYSBwYWNrZmlsZSwgcHJpbnQgYSBsaW5lIG9mIGRhdGEgdG8KIAk8ZmlsZT4gbGlzdGluZyB0aGUgZmlsZW5hbWUgb2YgdGhlIHBhY2tmaWxlIGFuZCB0aGUgbGFzdApAQCAtODIsNyArOTksNyBAQAogCVRoaXMgaW5mb3JtYXRpb24gbWF5IGJlIHVzZWZ1bCBhZnRlciBpbXBvcnRpbmcgcHJvamVjdHMKIAl3aG9zZSB0b3RhbCBvYmplY3Qgc2V0IGV4Y2VlZHMgdGhlIDQgR2lCIHBhY2tmaWxlIGxpbWl0LAogCWFzIHRoZXNlIGNvbW1pdHMgY2FuIGJlIHVzZWQgYXMgZWRnZSBwb2ludHMgZHVyaW5nIGNhbGxzCi0JdG8gJ2dpdC1wYWNrLW9iamVjdHMnLgorCXRvICdnaXQgcGFjay1vYmplY3RzJy4KIAogLS1xdWlldDo6CiAJRGlzYWJsZSBhbGwgbm9uLWZhdGFsIG91dHB1dCwgbWFraW5nIGZhc3QtaW1wb3J0IHNpbGVudCB3aGVuIGl0CkBAIC0xMjQsOSArMTQxLDkgQEAKIAogUGFyYWxsZWwgT3BlcmF0aW9uCiAtLS0tLS0tLS0tLS0tLS0tLS0KLUxpa2UgJ2dpdC1wdXNoJyBvciAnZ2l0LWZldGNoJywgaW1wb3J0cyBoYW5kbGVkIGJ5IGZhc3QtaW1wb3J0IGFyZSBzYWZlIHRvCitMaWtlICdnaXQgcHVzaCcgb3IgJ2dpdCBmZXRjaCcsIGltcG9ydHMgaGFuZGxlZCBieSBmYXN0LWltcG9ydCBhcmUgc2FmZSB0bwogcnVuIGFsb25nc2lkZSBwYXJhbGxlbCBgZ2l0IHJlcGFjayAtYSAtZGAgb3IgYGdpdCBnY2AgaW52b2NhdGlvbnMsCi1vciBhbnkgb3RoZXIgR2l0IG9wZXJhdGlvbiAoaW5jbHVkaW5nICdnaXQtcHJ1bmUnLCBhcyBsb29zZSBvYmplY3RzCitvciBhbnkgb3RoZXIgR2l0IG9wZXJhdGlvbiAoaW5jbHVkaW5nICdnaXQgcHJ1bmUnLCBhcyBsb29zZSBvYmplY3RzCiBhcmUgbmV2ZXIgdXNlZCBieSBmYXN0LWltcG9ydCkuCiAKIGZhc3QtaW1wb3J0IGRvZXMgbm90IGxvY2sgdGhlIGJyYW5jaCBvciB0YWcgcmVmcyBpdCBpcyBhY3RpdmVseSBpbXBvcnRpbmcuCkBAIC0xMzgsNyArMTU1LDcgQEAKIHByaW50cyBhIHdhcm5pbmcgbWVzc2FnZS4gIGZhc3QtaW1wb3J0IHdpbGwgYWx3YXlzIGF0dGVtcHQgdG8gdXBkYXRlIGFsbAogYnJhbmNoIHJlZnMsIGFuZCBkb2VzIG5vdCBzdG9wIG9uIHRoZSBmaXJzdCBmYWlsdXJlLgogCi1CcmFuY2ggdXBkYXRlcyBjYW4gYmUgZm9yY2VkIHdpdGggXC0tZm9yY2UsIGJ1dCBpdHMgcmVjb21tZW5kZWQgdGhhdAorQnJhbmNoIHVwZGF0ZXMgY2FuIGJlIGZvcmNlZCB3aXRoIFwtLWZvcmNlLCBidXQgaXQncyByZWNvbW1lbmRlZCB0aGF0CiB0aGlzIG9ubHkgYmUgdXNlZCBvbiBhbiBvdGhlcndpc2UgcXVpZXQgcmVwb3NpdG9yeS4gIFVzaW5nIFwtLWZvcmNlCiBpcyBub3QgbmVjZXNzYXJ5IGZvciBhbiBpbml0aWFsIGltcG9ydCBpbnRvIGFuIGVtcHR5IHJlcG9zaXRvcnkuCiAKQEAgLTIyMCw3ICsyMzcsNyBAQAogKwogQW4gZXhhbXBsZSB2YWx1ZSBpcyBgYFR1ZSBGZWIgNiAxMToyMjoxOCAyMDA3IC0wNTAwJycuICBUaGUgR2l0CiBwYXJzZXIgaXMgYWNjdXJhdGUsIGJ1dCBhIGxpdHRsZSBvbiB0aGUgbGVuaWVudCBzaWRlLiAgSXQgaXMgdGhlCi1zYW1lIHBhcnNlciB1c2VkIGJ5ICdnaXQtYW0nIHdoZW4gYXBwbHlpbmcgcGF0Y2hlcworc2FtZSBwYXJzZXIgdXNlZCBieSAnZ2l0IGFtJyB3aGVuIGFwcGx5aW5nIHBhdGNoZXMKIHJlY2VpdmVkIGZyb20gZW1haWwuCiArCiBTb21lIG1hbGZvcm1lZCBzdHJpbmdzIG1heSBiZSBhY2NlcHRlZCBhcyB2YWxpZCBkYXRlcy4gIEluIHNvbWUgb2YKQEAgLTI1MywxMCArMjcwLDEwIEBACiBjcmVhdGVkIGJ5IGZhc3QtaW1wb3J0LiAgVGhlcmUgaXMgbm8gd2F5IHRvIHNwZWNpZnkgYSBkaWZmZXJlbnQgdGltZSBvcgogdGltZXpvbmUuCiArCi1UaGlzIHBhcnRpY3VsYXIgZm9ybWF0IGlzIHN1cHBsaWVkIGFzIGl0cyBzaG9ydCB0byBpbXBsZW1lbnQgYW5kCitUaGlzIHBhcnRpY3VsYXIgZm9ybWF0IGlzIHN1cHBsaWVkIGFzIGl0J3Mgc2hvcnQgdG8gaW1wbGVtZW50IGFuZAogbWF5IGJlIHVzZWZ1bCB0byBhIHByb2Nlc3MgdGhhdCB3YW50cyB0byBjcmVhdGUgYSBuZXcgY29tbWl0CiByaWdodCBub3csIHdpdGhvdXQgbmVlZGluZyB0byB1c2UgYSB3b3JraW5nIGRpcmVjdG9yeSBvcgotJ2dpdC11cGRhdGUtaW5kZXgnLgorJ2dpdCB1cGRhdGUtaW5kZXgnLgogKwogSWYgc2VwYXJhdGUgYGF1dGhvcmAgYW5kIGBjb21taXR0ZXJgIGNvbW1hbmRzIGFyZSB1c2VkIGluIGEgYGNvbW1pdGAKIHRoZSB0aW1lc3RhbXBzIG1heSBub3QgbWF0Y2gsIGFzIHRoZSBzeXN0ZW0gY2xvY2sgd2lsbCBiZSBwb2xsZWQKQEAgLTMwMyw2ICszMjAsMTUgQEAKIAlzdGFuZGFyZCBvdXRwdXQuICBUaGlzIGNvbW1hbmQgaXMgb3B0aW9uYWwgYW5kIGlzIG5vdCBuZWVkZWQKIAl0byBwZXJmb3JtIGFuIGltcG9ydC4KIAorYGZlYXR1cmVgOjoKKwlSZXF1aXJlIHRoYXQgZmFzdC1pbXBvcnQgc3VwcG9ydHMgdGhlIHNwZWNpZmllZCBmZWF0dXJlLCBvcgorCWFib3J0IGlmIGl0IGRvZXMgbm90LgorCitgb3B0aW9uYDo6CisJU3BlY2lmeSBhbnkgb2YgdGhlIG9wdGlvbnMgbGlzdGVkIHVuZGVyIE9QVElPTlMgdGhhdCBkbyBub3QKKwljaGFuZ2Ugc3RyZWFtIHNlbWFudGljIHRvIHN1aXQgdGhlIGZyb250ZW5kJ3MgbmVlZHMuIFRoaXMKKwljb21tYW5kIGlzIG9wdGlvbmFsIGFuZCBpcyBub3QgbmVlZGVkIHRvIHBlcmZvcm0gYW4gaW1wb3J0LgorCiBgY29tbWl0YAogfn5+fn5+fn4KIENyZWF0ZSBvciB1cGRhdGUgYSBicmFuY2ggd2l0aCBhIG5ldyBjb21taXQsIHJlY29yZGluZyBvbmUgbG9naWNhbApAQCAtMzExLDEyICszMzcsMTIgQEAKIC4uLi4KIAknY29tbWl0JyBTUCA8cmVmPiBMRgogCW1hcms/Ci0JKCdhdXRob3InIFNQIDxuYW1lPiBTUCBMVCA8ZW1haWw+IEdUIFNQIDx3aGVuPiBMRik/Ci0JJ2NvbW1pdHRlcicgU1AgPG5hbWU+IFNQIExUIDxlbWFpbD4gR1QgU1AgPHdoZW4+IExGCisJKCdhdXRob3InIChTUCA8bmFtZT4pPyBTUCBMVCA8ZW1haWw+IEdUIFNQIDx3aGVuPiBMRik/CisJJ2NvbW1pdHRlcicgKFNQIDxuYW1lPik/IFNQIExUIDxlbWFpbD4gR1QgU1AgPHdoZW4+IExGCiAJZGF0YQogCSgnZnJvbScgU1AgPGNvbW1pdHRpc2g+IExGKT8KIAkoJ21lcmdlJyBTUCA8Y29tbWl0dGlzaD4gTEYpPwotCShmaWxlbW9kaWZ5IHwgZmlsZWRlbGV0ZSB8IGZpbGVjb3B5IHwgZmlsZXJlbmFtZSB8IGZpbGVkZWxldGVhbGwpKgorCShmaWxlbW9kaWZ5IHwgZmlsZWRlbGV0ZSB8IGZpbGVjb3B5IHwgZmlsZXJlbmFtZSB8IGZpbGVkZWxldGVhbGwgfCBub3RlbW9kaWZ5KSoKIAlMRj8KIC4uLi4KIApAQCAtMzM5LDE0ICszNjUsMTMgQEAKIGFuZCBhcmUgbm90IGludGVycHJldGVkIGJ5IEdpdC4gIEN1cnJlbnRseSB0aGV5IG11c3QgYmUgZW5jb2RlZCBpbgogVVRGLTgsIGFzIGZhc3QtaW1wb3J0IGRvZXMgbm90IHBlcm1pdCBvdGhlciBlbmNvZGluZ3MgdG8gYmUgc3BlY2lmaWVkLgogCi1aZXJvIG9yIG1vcmUgYGZpbGVtb2RpZnlgLCBgZmlsZWRlbGV0ZWAsIGBmaWxlY29weWAsIGBmaWxlcmVuYW1lYAotYW5kIGBmaWxlZGVsZXRlYWxsYCBjb21tYW5kcworWmVybyBvciBtb3JlIGBmaWxlbW9kaWZ5YCwgYGZpbGVkZWxldGVgLCBgZmlsZWNvcHlgLCBgZmlsZXJlbmFtZWAsCitgZmlsZWRlbGV0ZWFsbGAgYW5kIGBub3RlbW9kaWZ5YCBjb21tYW5kcwogbWF5IGJlIGluY2x1ZGVkIHRvIHVwZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIGJyYW5jaCBwcmlvciB0bwogY3JlYXRpbmcgdGhlIGNvbW1pdC4gIFRoZXNlIGNvbW1hbmRzIG1heSBiZSBzdXBwbGllZCBpbiBhbnkgb3JkZXIuCiBIb3dldmVyIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgYSBgZmlsZWRlbGV0ZWFsbGAgY29tbWFuZCBwcmVjZWRlCi1hbGwgYGZpbGVtb2RpZnlgLCBgZmlsZWNvcHlgIGFuZCBgZmlsZXJlbmFtZWAgY29tbWFuZHMgaW4gdGhlIHNhbWUKLWNvbW1pdCwgYXMgYGZpbGVkZWxldGVhbGxgCi13aXBlcyB0aGUgYnJhbmNoIGNsZWFuIChzZWUgYmVsb3cpLgorYWxsIGBmaWxlbW9kaWZ5YCwgYGZpbGVjb3B5YCwgYGZpbGVyZW5hbWVgIGFuZCBgbm90ZW1vZGlmeWAgY29tbWFuZHMgaW4KK3RoZSBzYW1lIGNvbW1pdCwgYXMgYGZpbGVkZWxldGVhbGxgIHdpcGVzIHRoZSBicmFuY2ggY2xlYW4gKHNlZSBiZWxvdykuCiAKIFRoZSBgTEZgIGFmdGVyIHRoZSBjb21tYW5kIGlzIG9wdGlvbmFsIChpdCB1c2VkIHRvIGJlIHJlcXVpcmVkKS4KIApAQCAtMzk4LDcgKzQyMyw3IEBACiBIZXJlIGA8Y29tbWl0dGlzaD5gIGlzIGFueSBvZiB0aGUgZm9sbG93aW5nOgogCiAqIFRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGJyYW5jaCBhbHJlYWR5IGluIGZhc3QtaW1wb3J0J3MgaW50ZXJuYWwgYnJhbmNoCi0gIHRhYmxlLiAgSWYgZmFzdC1pbXBvcnQgZG9lc24ndCBrbm93IHRoZSBuYW1lLCBpdHMgdHJlYXRlZCBhcyBhIFNIQS0xCisgIHRhYmxlLiAgSWYgZmFzdC1pbXBvcnQgZG9lc24ndCBrbm93IHRoZSBuYW1lLCBpdCdzIHRyZWF0ZWQgYXMgYSBTSEEtMQogICBleHByZXNzaW9uLgogCiAqIEEgbWFyayByZWZlcmVuY2UsIGA6PGlkbnVtPmAsIHdoZXJlIGA8aWRudW0+YCBpcyB0aGUgbWFyayBudW1iZXIuCkBAIC01OTUsNiArNjIwLDQwIEBACiBwcm9qZWN0cyk7IHNvIGZyb250ZW5kcyB0aGF0IGNhbiBlYXNpbHkgb2J0YWluIG9ubHkgdGhlIGFmZmVjdGVkCiBwYXRocyBmb3IgYSBjb21taXQgYXJlIGVuY291cmFnZWQgdG8gZG8gc28uCiAKK2Bub3RlbW9kaWZ5YAorXl5eXl5eXl5eXl5eCitJbmNsdWRlZCBpbiBhIGBjb21taXRgIGNvbW1hbmQgdG8gYWRkIGEgbmV3IG5vdGUgKGFubm90YXRpbmcgYSBnaXZlbgorY29tbWl0KSBvciBjaGFuZ2UgdGhlIGNvbnRlbnQgb2YgYW4gZXhpc3Rpbmcgbm90ZS4gIFRoaXMgY29tbWFuZCBoYXMKK3R3byBkaWZmZXJlbnQgbWVhbnMgb2Ygc3BlY2lmeWluZyB0aGUgY29udGVudCBvZiB0aGUgbm90ZS4KKworRXh0ZXJuYWwgZGF0YSBmb3JtYXQ6OgorCVRoZSBkYXRhIGNvbnRlbnQgZm9yIHRoZSBub3RlIHdhcyBhbHJlYWR5IHN1cHBsaWVkIGJ5IGEgcHJpb3IKKwlgYmxvYmAgY29tbWFuZC4gIFRoZSBmcm9udGVuZCBqdXN0IG5lZWRzIHRvIGNvbm5lY3QgaXQgdG8gdGhlCisJY29tbWl0IHRoYXQgaXMgdG8gYmUgYW5ub3RhdGVkLgorKworLi4uLgorCSdOJyBTUCA8ZGF0YXJlZj4gU1AgPGNvbW1pdHRpc2g+IExGCisuLi4uCisrCitIZXJlIGA8ZGF0YXJlZj5gIGNhbiBiZSBlaXRoZXIgYSBtYXJrIHJlZmVyZW5jZSAoYDo8aWRudW0+YCkKK3NldCBieSBhIHByaW9yIGBibG9iYCBjb21tYW5kLCBvciBhIGZ1bGwgNDAtYnl0ZSBTSEEtMSBvZiBhbgorZXhpc3RpbmcgR2l0IGJsb2Igb2JqZWN0LgorCitJbmxpbmUgZGF0YSBmb3JtYXQ6OgorCVRoZSBkYXRhIGNvbnRlbnQgZm9yIHRoZSBub3RlIGhhcyBub3QgYmVlbiBzdXBwbGllZCB5ZXQuCisJVGhlIGZyb250ZW5kIHdhbnRzIHRvIHN1cHBseSBpdCBhcyBwYXJ0IG9mIHRoaXMgbW9kaWZ5CisJY29tbWFuZC4KKysKKy4uLi4KKwknTicgU1AgJ2lubGluZScgU1AgPGNvbW1pdHRpc2g+IExGCisJZGF0YQorLi4uLgorKworU2VlIGJlbG93IGZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBgZGF0YWAgY29tbWFuZC4KKworSW4gYm90aCBmb3JtYXRzIGA8Y29tbWl0dGlzaD5gIGlzIGFueSBvZiB0aGUgY29tbWl0IHNwZWNpZmljYXRpb24KK2V4cHJlc3Npb25zIGFsc28gYWNjZXB0ZWQgYnkgYGZyb21gIChzZWUgYWJvdmUpLgorCiBgbWFya2AKIH5+fn5+fgogQXJyYW5nZXMgZm9yIGZhc3QtaW1wb3J0IHRvIHNhdmUgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgb2JqZWN0LCBhbGxvd2luZwpAQCAtNjI0LDcgKzY4Myw3IEBACiAuLi4uCiAJJ3RhZycgU1AgPG5hbWU+IExGCiAJJ2Zyb20nIFNQIDxjb21taXR0aXNoPiBMRgotCSd0YWdnZXInIFNQIDxuYW1lPiBTUCBMVCA8ZW1haWw+IEdUIFNQIDx3aGVuPiBMRgorCSd0YWdnZXInIChTUCA8bmFtZT4pPyBTUCBMVCA8ZW1haWw+IEdUIFNQIDx3aGVuPiBMRgogCWRhdGEKIC4uLi4KIApAQCAtNjU3LDcgKzcxNiw3IEBACiBjb21wbGV0ZSBzZXQgb2YgYnl0ZXMgd2hpY2ggbm9ybWFsbHkgZ29lcyBpbnRvIHN1Y2ggYSBzaWduYXR1cmUuCiBJZiBzaWduaW5nIGlzIHJlcXVpcmVkLCBjcmVhdGUgbGlnaHR3ZWlnaHQgdGFncyBmcm9tIHdpdGhpbiBmYXN0LWltcG9ydCB3aXRoCiBgcmVzZXRgLCB0aGVuIGNyZWF0ZSB0aGUgYW5ub3RhdGVkIHZlcnNpb25zIG9mIHRob3NlIHRhZ3Mgb2ZmbGluZQotd2l0aCB0aGUgc3RhbmRhcmQgJ2dpdC10YWcnIHByb2Nlc3MuCit3aXRoIHRoZSBzdGFuZGFyZCAnZ2l0IHRhZycgcHJvY2Vzcy4KIAogYHJlc2V0YAogfn5+fn5+fgpAQCAtNzAzLDcgKzc2Miw3IEBACiAKIFRoZSBtYXJrIGNvbW1hbmQgaXMgb3B0aW9uYWwgaGVyZSBhcyBzb21lIGZyb250ZW5kcyBoYXZlIGNob3NlbgogdG8gZ2VuZXJhdGUgdGhlIEdpdCBTSEEtMSBmb3IgdGhlIGJsb2Igb24gdGhlaXIgb3duLCBhbmQgZmVlZCB0aGF0Ci1kaXJlY3RseSB0byBgY29tbWl0YC4gIFRoaXMgaXMgdHlwaWNhbGx5IG1vcmUgd29yayB0aGFuIGl0cyB3b3J0aAorZGlyZWN0bHkgdG8gYGNvbW1pdGAuICBUaGlzIGlzIHR5cGljYWxseSBtb3JlIHdvcmsgdGhhbiBpdCdzIHdvcnRoCiBob3dldmVyLCBhcyBtYXJrcyBhcmUgaW5leHBlbnNpdmUgdG8gc3RvcmUgYW5kIGVhc3kgdG8gdXNlLgogCiBgZGF0YWAKQEAgLTgxMyw2ICs4NzIsNjIgQEAKIGluZm9ybSB0aGUgcmVhZGVyIHdoZW4gdGhlIGBjaGVja3BvaW50YCBoYXMgYmVlbiBjb21wbGV0ZWQgYW5kIGl0CiBjYW4gc2FmZWx5IGFjY2VzcyB0aGUgcmVmcyB0aGF0IGZhc3QtaW1wb3J0IHVwZGF0ZWQuCiAKK2BmZWF0dXJlYAorfn5+fn5+fn5+CitSZXF1aXJlIHRoYXQgZmFzdC1pbXBvcnQgc3VwcG9ydHMgdGhlIHNwZWNpZmllZCBmZWF0dXJlLCBvciBhYm9ydCBpZgoraXQgZG9lcyBub3QuCisKKy4uLi4KKwknZmVhdHVyZScgU1AgPGZlYXR1cmU+IExGCisuLi4uCisKK1RoZSA8ZmVhdHVyZT4gcGFydCBvZiB0aGUgY29tbWFuZCBtYXkgYmUgYW55IHN0cmluZyBtYXRjaGluZworXlthLXpBLVpdW2EtekEtWi1dKiQgYW5kIHNob3VsZCBiZSB1bmRlcnN0b29kIGJ5IGZhc3QtaW1wb3J0LgorCitGZWF0dXJlIHdvcmsgaWRlbnRpY2FsIGFzIHRoZWlyIG9wdGlvbiBjb3VudGVycGFydHMgd2l0aCB0aGUKK2V4Y2VwdGlvbiBvZiB0aGUgaW1wb3J0LW1hcmtzIGZlYXR1cmUsIHNlZSBiZWxvdy4KKworVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZDoKKworKiBkYXRlLWZvcm1hdAorKiBpbXBvcnQtbWFya3MKKyogZXhwb3J0LW1hcmtzCisqIHJlbGF0aXZlLW1hcmtzCisqIG5vLXJlbGF0aXZlLW1hcmtzCisqIGZvcmNlCisKK1RoZSBpbXBvcnQtbWFya3MgYmVoYXZlcyBkaWZmZXJlbnRseSBmcm9tIHdoZW4gaXQgaXMgc3BlY2lmaWVkIGFzCitjb21tYW5kbGluZSBvcHRpb24gaW4gdGhhdCBvbmx5IG9uZSAiZmVhdHVyZSBpbXBvcnQtbWFya3MiIGlzIGFsbG93ZWQKK3BlciBzdHJlYW0uIEFsc28sIGFueSAtLWltcG9ydC1tYXJrcz0gc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kbGluZQord2lsbCBvdmVycmlkZSB0aG9zZSBmcm9tIHRoZSBzdHJlYW0gKGlmIGFueSkuCisKK2BvcHRpb25gCit+fn5+fn5+fgorUHJvY2Vzc2VzIHRoZSBzcGVjaWZpZWQgb3B0aW9uIHNvIHRoYXQgZ2l0IGZhc3QtaW1wb3J0IGJlaGF2ZXMgaW4gYQord2F5IHRoYXQgc3VpdHMgdGhlIGZyb250ZW5kJ3MgbmVlZHMuCitOb3RlIHRoYXQgb3B0aW9ucyBzcGVjaWZpZWQgYnkgdGhlIGZyb250ZW5kIGFyZSBvdmVycmlkZGVuIGJ5IGFueQorb3B0aW9ucyB0aGUgdXNlciBtYXkgc3BlY2lmeSB0byBnaXQgZmFzdC1pbXBvcnQgaXRzZWxmLgorCisuLi4uCisgICAgJ29wdGlvbicgU1AgPG9wdGlvbj4gTEYKKy4uLi4KKworVGhlIGA8b3B0aW9uPmAgcGFydCBvZiB0aGUgY29tbWFuZCBtYXkgY29udGFpbiBhbnkgb2YgdGhlIG9wdGlvbnMKK2xpc3RlZCBpbiB0aGUgT1BUSU9OUyBzZWN0aW9uIHRoYXQgZG8gbm90IGNoYW5nZSBpbXBvcnQgc2VtYW50aWNzLAord2l0aG91dCB0aGUgbGVhZGluZyAnLS0nIGFuZCBpcyB0cmVhdGVkIGluIHRoZSBzYW1lIHdheS4KKworT3B0aW9uIGNvbW1hbmRzIG11c3QgYmUgdGhlIGZpcnN0IGNvbW1hbmRzIG9uIHRoZSBpbnB1dCAobm90IGNvdW50aW5nCitmZWF0dXJlIGNvbW1hbmRzKSwgdG8gZ2l2ZSBhbiBvcHRpb24gY29tbWFuZCBhZnRlciBhbnkgbm9uLW9wdGlvbgorY29tbWFuZCBpcyBhbiBlcnJvci4KKworVGhlIGZvbGxvd2luZyBjb21tYW5kbGluZSBvcHRpb25zIGNoYW5nZSBpbXBvcnQgc2VtYW50aWNzIGFuZCBtYXkgdGhlcmVmb3JlCitub3QgYmUgcGFzc2VkIGFzIG9wdGlvbjoKKworKiBkYXRlLWZvcm1hdAorKiBpbXBvcnQtbWFya3MKKyogZXhwb3J0LW1hcmtzCisqIGZvcmNlCisKIENyYXNoIFJlcG9ydHMKIC0tLS0tLS0tLS0tLS0KIElmIGZhc3QtaW1wb3J0IGlzIHN1cHBsaWVkIGludmFsaWQgaW5wdXQgaXQgd2lsbCB0ZXJtaW5hdGUgd2l0aCBhCkBAIC05NTgsNyArMTA3Myw3IEBACiAKIFdoZW4gY29tbWl0dGluZyBmaXh1cHMsIGNvbnNpZGVyIHVzaW5nIGBtZXJnZWAgdG8gY29ubmVjdCB0aGUKIGNvbW1pdChzKSB3aGljaCBhcmUgc3VwcGx5aW5nIGZpbGUgcmV2aXNpb25zIHRvIHRoZSBmaXh1cCBicmFuY2guCi1Eb2luZyBzbyB3aWxsIGFsbG93IHRvb2xzIHN1Y2ggYXMgJ2dpdC1ibGFtZScgdG8gdHJhY2sKK0RvaW5nIHNvIHdpbGwgYWxsb3cgdG9vbHMgc3VjaCBhcyAnZ2l0IGJsYW1lJyB0byB0cmFjawogdGhyb3VnaCB0aGUgcmVhbCBjb21taXQgaGlzdG9yeSBhbmQgcHJvcGVybHkgYW5ub3RhdGUgdGhlIHNvdXJjZQogZmlsZXMuCiAKQEAgLTk4Nyw3ICsxMTAyLDcgQEAKIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIElmIHlvdSBhcmUgcmVwYWNraW5nIHZlcnkgb2xkIGltcG9ydGVkIGRhdGEgKGUuZy4gb2xkZXIgdGhhbiB0aGUKIGxhc3QgeWVhciksIGNvbnNpZGVyIGV4cGVuZGluZyBzb21lIGV4dHJhIENQVSB0aW1lIGFuZCBzdXBwbHlpbmcKLVwtLXdpbmRvdz01MCAob3IgaGlnaGVyKSB3aGVuIHlvdSBydW4gJ2dpdC1yZXBhY2snLgorXC0td2luZG93PTUwIChvciBoaWdoZXIpIHdoZW4geW91IHJ1biAnZ2l0IHJlcGFjaycuCiBUaGlzIHdpbGwgdGFrZSBsb25nZXIsIGJ1dCB3aWxsIGFsc28gcHJvZHVjZSBhIHNtYWxsZXIgcGFja2ZpbGUuCiBZb3Ugb25seSBuZWVkIHRvIGV4cGVuZCB0aGUgZWZmb3J0IG9uY2UsIGFuZCBldmVyeW9uZSB1c2luZyB5b3VyCiBwcm9qZWN0IHdpbGwgYmVuZWZpdCBmcm9tIHRoZSBzbWFsbGVyIHJlcG9zaXRvcnkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC1wYWNrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZldGNoLXBhY2sudHh0CmluZGV4IDQ3NDQ4ZGEuLjRhODQ4N2MgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWZldGNoLXBhY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZldGNoLXBhY2sudHh0CkBAIC0xMiwxMyArMTIsMTMgQEAKIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCi1Vc3VhbGx5IHlvdSB3b3VsZCB3YW50IHRvIHVzZSAnZ2l0LWZldGNoJywgd2hpY2ggaXMgYQorVXN1YWxseSB5b3Ugd291bGQgd2FudCB0byB1c2UgJ2dpdCBmZXRjaCcsIHdoaWNoIGlzIGEKIGhpZ2hlciBsZXZlbCB3cmFwcGVyIG9mIHRoaXMgY29tbWFuZCwgaW5zdGVhZC4KIAogSW52b2tlcyAnZ2l0LXVwbG9hZC1wYWNrJyBvbiBhIHBvc3NpYmx5IHJlbW90ZSByZXBvc2l0b3J5CiBhbmQgYXNrcyBpdCB0byBzZW5kIG9iamVjdHMgbWlzc2luZyBmcm9tIHRoaXMgcmVwb3NpdG9yeSwgdG8KIHVwZGF0ZSB0aGUgbmFtZWQgaGVhZHMuICBUaGUgbGlzdCBvZiBjb21taXRzIGF2YWlsYWJsZSBsb2NhbGx5Ci1pcyBmb3VuZCBvdXQgYnkgc2Nhbm5pbmcgbG9jYWwgJEdJVF9ESVIvcmVmcy8gYW5kIHNlbnQgdG8KK2lzIGZvdW5kIG91dCBieSBzY2FubmluZyB0aGUgbG9jYWwgcmVmcy8gaGllcmFyY2h5IGFuZCBzZW50IHRvCiAnZ2l0LXVwbG9hZC1wYWNrJyBydW5uaW5nIG9uIHRoZSBvdGhlciBlbmQuCiAKIFRoaXMgY29tbWFuZCBkZWdlbmVyYXRlcyB0byBkb3dubG9hZCBldmVyeXRoaW5nIHRvIGNvbXBsZXRlIHRoZQpAQCAtMzMsMTkgKzMzLDE5IEBACiAKIC1xOjoKIC0tcXVpZXQ6OgotCVBhc3MgJy1xJyBmbGFnIHRvICdnaXQtdW5wYWNrLW9iamVjdHMnOyB0aGlzIG1ha2VzIHRoZQorCVBhc3MgJy1xJyBmbGFnIHRvICdnaXQgdW5wYWNrLW9iamVjdHMnOyB0aGlzIG1ha2VzIHRoZQogCWNsb25pbmcgcHJvY2VzcyBsZXNzIHZlcmJvc2UuCiAKIC1rOjoKIC0ta2VlcDo6Ci0JRG8gbm90IGludm9rZSAnZ2l0LXVucGFjay1vYmplY3RzJyBvbiByZWNlaXZlZCBkYXRhLCBidXQKKwlEbyBub3QgaW52b2tlICdnaXQgdW5wYWNrLW9iamVjdHMnIG9uIHJlY2VpdmVkIGRhdGEsIGJ1dAogCWNyZWF0ZSBhIHNpbmdsZSBwYWNrZmlsZSBvdXQgb2YgaXQgaW5zdGVhZCwgYW5kIHN0b3JlIGl0CiAJaW4gdGhlIG9iamVjdCBkYXRhYmFzZS4gSWYgcHJvdmlkZWQgdHdpY2UgdGhlbiB0aGUgcGFjayBpcwogCWxvY2tlZCBhZ2FpbnN0IHJlcGFja2luZy4KIAogLS10aGluOjoKLQlTcGVuZCBleHRyYSBjeWNsZXMgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBvYmplY3RzIHRvIGJlIHNlbnQuCi0JVXNlIGl0IG9uIHNsb3dlciBjb25uZWN0aW9uLgorCUZldGNoIGEgInRoaW4iIHBhY2ssIHdoaWNoIHJlY29yZHMgb2JqZWN0cyBpbiBkZWx0aWZpZWQgZm9ybSBiYXNlZAorCW9uIG9iamVjdHMgbm90IGluY2x1ZGVkIGluIHRoZSBwYWNrIHRvIHJlZHVjZSBuZXR3b3JrIHRyYWZmaWMuCiAKIC0taW5jbHVkZS10YWc6OgogCUlmIHRoZSByZW1vdGUgc2lkZSBzdXBwb3J0cyBpdCwgYW5ub3RhdGVkIHRhZ3Mgb2JqZWN0cyB3aWxsCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC50eHQKaW5kZXggZDMxNjRjNS4uOTQ4ZWEyNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZmV0Y2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZldGNoLnR4dApAQCAtMTAsMTUgKzEwLDIxIEBACiAtLS0tLS0tLQogJ2dpdCBmZXRjaCcgPG9wdGlvbnM+IDxyZXBvc2l0b3J5PiA8cmVmc3BlYz4uLi4KIAorJ2dpdCBmZXRjaCcgPG9wdGlvbnM+IDxncm91cD4KKworJ2dpdCBmZXRjaCcgLS1tdWx0aXBsZSA8b3B0aW9ucz4gWzxyZXBvc2l0b3J5PiB8IDxncm91cD5dLi4uCisKKydnaXQgZmV0Y2gnIC0tYWxsIDxvcHRpb25zPgorCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQotRmV0Y2hlcyBuYW1lZCBoZWFkcyBvciB0YWdzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5LCBhbG9uZyB3aXRoCi10aGUgb2JqZWN0cyBuZWNlc3NhcnkgdG8gY29tcGxldGUgdGhlbS4KK0ZldGNoZXMgbmFtZWQgaGVhZHMgb3IgdGFncyBmcm9tIG9uZSBvciBtb3JlIG90aGVyIHJlcG9zaXRvcmllcywKK2Fsb25nIHdpdGggdGhlIG9iamVjdHMgbmVjZXNzYXJ5IHRvIGNvbXBsZXRlIHRoZW0uCiAKIFRoZSByZWYgbmFtZXMgYW5kIHRoZWlyIG9iamVjdCBuYW1lcyBvZiBmZXRjaGVkIHJlZnMgYXJlIHN0b3JlZAogaW4gYC5naXQvRkVUQ0hfSEVBRGAuICBUaGlzIGluZm9ybWF0aW9uIGlzIGxlZnQgZm9yIGEgbGF0ZXIgbWVyZ2UKLW9wZXJhdGlvbiBkb25lIGJ5ICdnaXQtbWVyZ2UnLgorb3BlcmF0aW9uIGRvbmUgYnkgJ2dpdCBtZXJnZScuCiAKIFdoZW4gPHJlZnNwZWM+IHN0b3JlcyB0aGUgZmV0Y2hlZCByZXN1bHQgaW4gdHJhY2tpbmcgYnJhbmNoZXMsCiB0aGUgdGFncyB0aGF0IHBvaW50IGF0IHRoZXNlIGJyYW5jaGVzIGFyZSBhdXRvbWF0aWNhbGx5CkBAIC0yOCw2ICszNCwxMCBAQAogdGhvc2UgbWlzc2luZyB0YWdzLiAgSWYgdGhlIG90aGVyIGVuZCBoYXMgdGFncyB0aGF0IHBvaW50IGF0CiBicmFuY2hlcyB5b3UgYXJlIG5vdCBpbnRlcmVzdGVkIGluLCB5b3Ugd2lsbCBub3QgZ2V0IHRoZW0uCiAKKydnaXQgZmV0Y2gnIGNhbiBmZXRjaCBmcm9tIGVpdGhlciBhIHNpbmdsZSBuYW1lZCByZXBvc2l0b3J5LCBvcgorb3IgZnJvbSBzZXZlcmFsIHJlcG9zaXRvcmllcyBhdCBvbmNlIGlmIDxncm91cD4gaXMgZ2l2ZW4gYW5kCit0aGVyZSBpcyBhIHJlbW90ZXMuPGdyb3VwPiBlbnRyeSBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorKFNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgogCiBPUFRJT05TCiAtLS0tLS0tCkBAIC0zNyw2ICs0NywzNSBAQAogCiBpbmNsdWRlOjp1cmxzLXJlbW90ZXMudHh0W10KIAorCitFWEFNUExFUworLS0tLS0tLS0KKworKiBVcGRhdGUgdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2hlczoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZmV0Y2ggb3JpZ2luCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK1RoZSBhYm92ZSBjb21tYW5kIGNvcGllcyBhbGwgYnJhbmNoZXMgZnJvbSB0aGUgcmVtb3RlIHJlZnMvaGVhZHMvCituYW1lc3BhY2UgYW5kIHN0b3JlcyB0aGVtIHRvIHRoZSBsb2NhbCByZWZzL3JlbW90ZXMvb3JpZ2luLyBuYW1lc3BhY2UsCit1bmxlc3MgdGhlIGJyYW5jaC48bmFtZT4uZmV0Y2ggb3B0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSBhIG5vbi1kZWZhdWx0CityZWZzcGVjLgorCisqIFVzaW5nIHJlZnNwZWNzIGV4cGxpY2l0bHk6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGZldGNoIG9yaWdpbiArcHU6cHUgbWFpbnQ6dG1wCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK1RoaXMgdXBkYXRlcyAob3IgY3JlYXRlcywgYXMgbmVjZXNzYXJ5KSBicmFuY2hlcyBgcHVgIGFuZCBgdG1wYCBpbgordGhlIGxvY2FsIHJlcG9zaXRvcnkgYnkgZmV0Y2hpbmcgZnJvbSB0aGUgYnJhbmNoZXMgKHJlc3BlY3RpdmVseSkKK2BwdWAgYW5kIGBtYWludGAgZnJvbSB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuCisrCitUaGUgYHB1YCBicmFuY2ggd2lsbCBiZSB1cGRhdGVkIGV2ZW4gaWYgaXQgaXMgZG9lcyBub3QgZmFzdC1mb3J3YXJkLAorYmVjYXVzZSBpdCBpcyBwcmVmaXhlZCB3aXRoIGEgcGx1cyBzaWduOyBgdG1wYCB3aWxsIG5vdCBiZS4KKworCiBTRUUgQUxTTwogLS0tLS0tLS0KIGxpbmtnaXQ6Z2l0LXB1bGxbMV0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWZpbHRlci1icmFuY2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZmlsdGVyLWJyYW5jaC50eHQKaW5kZXggYWI1MjdiNS4uMDIwMDI4YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZmlsdGVyLWJyYW5jaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZmlsdGVyLWJyYW5jaC50eHQKQEAgLTEyLDYgKzEyLDcgQEAKIAlbLS1pbmRleC1maWx0ZXIgPGNvbW1hbmQ+XSBbLS1wYXJlbnQtZmlsdGVyIDxjb21tYW5kPl0KIAlbLS1tc2ctZmlsdGVyIDxjb21tYW5kPl0gWy0tY29tbWl0LWZpbHRlciA8Y29tbWFuZD5dCiAJWy0tdGFnLW5hbWUtZmlsdGVyIDxjb21tYW5kPl0gWy0tc3ViZGlyZWN0b3J5LWZpbHRlciA8ZGlyZWN0b3J5Pl0KKwlbLS1wcnVuZS1lbXB0eV0KIAlbLS1vcmlnaW5hbCA8bmFtZXNwYWNlPl0gWy1kIDxkaXJlY3Rvcnk+XSBbLWYgfCAtLWZvcmNlXQogCVstLV0gWzxyZXYtbGlzdCBvcHRpb25zPi4uLl0KIApAQCAtMTE1LDcgKzExNiw3IEBACiAtLWNvbW1pdC1maWx0ZXIgPGNvbW1hbmQ+OjoKIAlUaGlzIGlzIHRoZSBmaWx0ZXIgZm9yIHBlcmZvcm1pbmcgdGhlIGNvbW1pdC4KIAlJZiB0aGlzIGZpbHRlciBpcyBzcGVjaWZpZWQsIGl0IHdpbGwgYmUgY2FsbGVkIGluc3RlYWQgb2YgdGhlCi0JJ2dpdC1jb21taXQtdHJlZScgY29tbWFuZCwgd2l0aCBhcmd1bWVudHMgb2YgdGhlIGZvcm0KKwknZ2l0IGNvbW1pdC10cmVlJyBjb21tYW5kLCB3aXRoIGFyZ3VtZW50cyBvZiB0aGUgZm9ybQogCSI8VFJFRV9JRD4gWy1wIDxQQVJFTlRfQ09NTUlUX0lEPl0uLi4iIGFuZCB0aGUgbG9nIG1lc3NhZ2Ugb24KIAlzdGRpbi4gIFRoZSBjb21taXQgaWQgaXMgZXhwZWN0ZWQgb24gc3Rkb3V0LgogKwpAQCAtMTI2LDEwICsxMjcsMTAgQEAKIFlvdSBjYW4gdXNlIHRoZSAnbWFwJyBjb252ZW5pZW5jZSBmdW5jdGlvbiBpbiB0aGlzIGZpbHRlciwgYW5kIG90aGVyCiBjb252ZW5pZW5jZSBmdW5jdGlvbnMsIHRvby4gIEZvciBleGFtcGxlLCBjYWxsaW5nICdza2lwX2NvbW1pdCAiJEAiJwogd2lsbCBsZWF2ZSBvdXQgdGhlIGN1cnJlbnQgY29tbWl0IChidXQgbm90IGl0cyBjaGFuZ2VzISBJZiB5b3Ugd2FudAotdGhhdCwgdXNlICdnaXQtcmViYXNlJyBpbnN0ZWFkKS4KK3RoYXQsIHVzZSAnZ2l0IHJlYmFzZScgaW5zdGVhZCkuCiArCi1Zb3UgY2FuIGFsc28gdXNlIHRoZSAnZ2l0X2NvbW1pdF9ub25fZW1wdHlfdHJlZSAiJEAiJyBpbnN0ZWFkIG9mCi0nZ2l0IGNvbW1pdC10cmVlICIkQCInIGlmIHlvdSBkb24ndCB3aXNoIHRvIGtlZXAgY29tbWl0cyB3aXRoIGEgc2luZ2xlIHBhcmVudAorWW91IGNhbiBhbHNvIHVzZSB0aGUgYGdpdF9jb21taXRfbm9uX2VtcHR5X3RyZWUgIiRAImAgaW5zdGVhZCBvZgorYGdpdCBjb21taXQtdHJlZSAiJEAiYCBpZiB5b3UgZG9uJ3Qgd2lzaCB0byBrZWVwIGNvbW1pdHMgd2l0aCBhIHNpbmdsZSBwYXJlbnQKIGFuZCB0aGF0IG1ha2VzIG5vIGNoYW5nZSB0byB0aGUgdHJlZS4KIAogLS10YWctbmFtZS1maWx0ZXIgPGNvbW1hbmQ+OjoKQEAgLTE1OCw3ICsxNTksMTggQEAKIC0tc3ViZGlyZWN0b3J5LWZpbHRlciA8ZGlyZWN0b3J5Pjo6CiAJT25seSBsb29rIGF0IHRoZSBoaXN0b3J5IHdoaWNoIHRvdWNoZXMgdGhlIGdpdmVuIHN1YmRpcmVjdG9yeS4KIAlUaGUgcmVzdWx0IHdpbGwgY29udGFpbiB0aGF0IGRpcmVjdG9yeSAoYW5kIG9ubHkgdGhhdCkgYXMgaXRzCi0JcHJvamVjdCByb290LgorCXByb2plY3Qgcm9vdC4gIEltcGxpZXMgLS1yZW1hcC10by1hbmNlc3Rvci4KKworLS1yZW1hcC10by1hbmNlc3Rvcjo6CisJUmV3cml0ZSByZWZzIHRvIHRoZSBuZWFyZXN0IHJld3JpdHRlbiBhbmNlc3RvciBpbnN0ZWFkIG9mCisJaWdub3JpbmcgdGhlbS4KKysKK05vcm1hbGx5LCBwb3NpdGl2ZSByZWZzIG9uIHRoZSBjb21tYW5kIGxpbmUgYXJlIG9ubHkgY2hhbmdlZCBpZiB0aGUKK2NvbW1pdCB0aGV5IHBvaW50IHRvIHdhcyByZXdyaXR0ZW4uICBIb3dldmVyLCB5b3UgY2FuIGxpbWl0IHRoZSBleHRlbnQKK29mIHRoaXMgcmV3cml0aW5nIGJ5IHVzaW5nIGxpbmtnaXQ6cmV2LWxpc3RbMV0gYXJndW1lbnRzLCBlLmcuLCBwYXRoCitsaW1pdGVycy4gIFJlZnMgcG9pbnRpbmcgdG8gc3VjaCBleGNsdWRlZCBjb21taXRzIHdvdWxkIHRoZW4gbm9ybWFsbHkKK2JlIGlnbm9yZWQuICBXaXRoIHRoaXMgb3B0aW9uLCB0aGV5IGFyZSBpbnN0ZWFkIHJld3JpdHRlbiB0byBwb2ludCBhdAordGhlIG5lYXJlc3QgYW5jZXN0b3IgdGhhdCB3YXMgbm90IGV4Y2x1ZGVkLgogCiAtLXBydW5lLWVtcHR5OjoKIAlTb21lIGtpbmQgb2YgZmlsdGVycyB3aWxsIGdlbmVyYXRlIGVtcHR5IGNvbW1pdHMsIHRoYXQgbGVmdCB0aGUgdHJlZQpAQCAtMTY3LDcgKzE3OSw3IEBACiAJYW5kIG9ubHkgb25lIHBhcmVudCwgaXQgd2lsbCBoZW5jZSBrZWVwIG1lcmdlcyBwb2ludHMuIEFsc28sIHRoaXMKIAlvcHRpb24gaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgdXNlIG9mICctLWNvbW1pdC1maWx0ZXInLiBUaG91Z2ggeW91CiAJanVzdCBuZWVkIHRvIHVzZSB0aGUgZnVuY3Rpb24gJ2dpdF9jb21taXRfbm9uX2VtcHR5X3RyZWUgIiRAIicgaW5zdGVhZAotCW9mIHRoZSAnZ2l0IGNvbW1pdC10cmVlICIkQCInIGlkaW9tIGluIHlvdXIgY29tbWl0IGZpbHRlciB0byBtYWtlIHRoYXQKKwlvZiB0aGUgYGdpdCBjb21taXQtdHJlZSAiJEAiYCBpZGlvbSBpbiB5b3VyIGNvbW1pdCBmaWx0ZXIgdG8gbWFrZSB0aGF0CiAJaGFwcGVuLgogCiAtLW9yaWdpbmFsIDxuYW1lc3BhY2U+OjoKQEAgLTE4NCwxNSArMTk2LDE1IEBACiAKIC1mOjoKIC0tZm9yY2U6OgotCSdnaXQtZmlsdGVyLWJyYW5jaCcgcmVmdXNlcyB0byBzdGFydCB3aXRoIGFuIGV4aXN0aW5nIHRlbXBvcmFyeQorCSdnaXQgZmlsdGVyLWJyYW5jaCcgcmVmdXNlcyB0byBzdGFydCB3aXRoIGFuIGV4aXN0aW5nIHRlbXBvcmFyeQogCWRpcmVjdG9yeSBvciB3aGVuIHRoZXJlIGFyZSBhbHJlYWR5IHJlZnMgc3RhcnRpbmcgd2l0aAogCSdyZWZzL29yaWdpbmFsLycsIHVubGVzcyBmb3JjZWQuCiAKIDxyZXYtbGlzdCBvcHRpb25zPi4uLjo6Ci0JQXJndW1lbnRzIGZvciAnZ2l0LXJldi1saXN0Jy4gIEFsbCBwb3NpdGl2ZSByZWZzIGluY2x1ZGVkIGJ5CisJQXJndW1lbnRzIGZvciAnZ2l0IHJldi1saXN0Jy4gIEFsbCBwb3NpdGl2ZSByZWZzIGluY2x1ZGVkIGJ5CiAJdGhlc2Ugb3B0aW9ucyBhcmUgcmV3cml0dGVuLiAgWW91IG1heSBhbHNvIHNwZWNpZnkgb3B0aW9ucwogCXN1Y2ggYXMgJy0tYWxsJywgYnV0IHlvdSBtdXN0IHVzZSAnLS0nIHRvIHNlcGFyYXRlIHRoZW0gZnJvbQotCXRoZSAnZ2l0LWZpbHRlci1icmFuY2gnIG9wdGlvbnMuCisJdGhlICdnaXQgZmlsdGVyLWJyYW5jaCcgb3B0aW9ucy4KIAogCiBFeGFtcGxlcwpAQCAtMjA5LDcgKzIyMSw3IEBACiBhIHNpbXBsZSBgcm0gZmlsZW5hbWVgIHdpbGwgZmFpbCBmb3IgdGhhdCB0cmVlIGFuZCBjb21taXQuCiBUaHVzIHlvdSBtYXkgaW5zdGVhZCB3YW50IHRvIHVzZSBgcm0gLWYgZmlsZW5hbWVgIGFzIHRoZSBzY3JpcHQuCiAKLVVzaW5nIGBcLS1pbmRleC1maWx0ZXJgIHdpdGggJ2dpdC1ybScgeWllbGRzIGEgc2lnbmlmaWNhbnRseSBmYXN0ZXIKK1VzaW5nIGBcLS1pbmRleC1maWx0ZXJgIHdpdGggJ2dpdCBybScgeWllbGRzIGEgc2lnbmlmaWNhbnRseSBmYXN0ZXIKIHZlcnNpb24uICBMaWtlIHdpdGggdXNpbmcgYHJtIGZpbGVuYW1lYCwgYGdpdCBybSAtLWNhY2hlZCBmaWxlbmFtZWAKIHdpbGwgZmFpbCBpZiB0aGUgZmlsZSBpcyBhYnNlbnQgZnJvbSB0aGUgdHJlZSBvZiBhIGNvbW1pdC4gIElmIHlvdQogd2FudCB0byAiY29tcGxldGVseSBmb3JnZXQiIGEgZmlsZSwgaXQgZG9lcyBub3QgbWF0dGVyIHdoZW4gaXQgZW50ZXJlZApAQCAtMjkxLDcgKzMwMyw3IEBACiBhcyB0aGVpciBwYXJlbnRzIGluc3RlYWQgb2YgdGhlIG1lcmdlIGNvbW1pdC4KIAogWW91IGNhbiByZXdyaXRlIHRoZSBjb21taXQgbG9nIG1lc3NhZ2VzIHVzaW5nIGAtLW1zZy1maWx0ZXJgLiAgRm9yCi1leGFtcGxlLCAnZ2l0LXN2bi1pZCcgc3RyaW5ncyBpbiBhIHJlcG9zaXRvcnkgY3JlYXRlZCBieSAnZ2l0LXN2bicgY2FuCitleGFtcGxlLCAnZ2l0IHN2bi1pZCcgc3RyaW5ncyBpbiBhIHJlcG9zaXRvcnkgY3JlYXRlZCBieSAnZ2l0IHN2bicgY2FuCiBiZSByZW1vdmVkIHRoaXMgd2F5OgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMDIsMTMgKzMxNCwyMyBAQAogCiBUbyByZXN0cmljdCByZXdyaXRpbmcgdG8gb25seSBwYXJ0IG9mIHRoZSBoaXN0b3J5LCBzcGVjaWZ5IGEgcmV2aXNpb24KIHJhbmdlIGluIGFkZGl0aW9uIHRvIHRoZSBuZXcgYnJhbmNoIG5hbWUuICBUaGUgbmV3IGJyYW5jaCBuYW1lIHdpbGwKLXBvaW50IHRvIHRoZSB0b3AtbW9zdCByZXZpc2lvbiB0aGF0IGEgJ2dpdC1yZXYtbGlzdCcgb2YgdGhpcyByYW5nZQorcG9pbnQgdG8gdGhlIHRvcC1tb3N0IHJldmlzaW9uIHRoYXQgYSAnZ2l0IHJldi1saXN0JyBvZiB0aGlzIHJhbmdlCiB3aWxsIHByaW50LgogCitJZiB5b3UgbmVlZCB0byBhZGQgJ0Fja2VkLWJ5JyBsaW5lcyB0bywgc2F5LCB0aGUgbGFzdCAxMCBjb21taXRzIChub25lCitvZiB3aGljaCBpcyBhIG1lcmdlKSwgdXNlIHRoaXMgY29tbWFuZDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBmaWx0ZXItYnJhbmNoIC0tbXNnLWZpbHRlciAnCisJY2F0ICYmCisJZWNobyAiQWNrZWQtYnk6IEJ1Z3MgQnVubnkgPGJ1bm55QGJ1Z3ppbGxhLm9yZz4iCisnIEhFQUR+MTAuLkhFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKICpOT1RFKiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2VkIGJ5IHRoZSBjb21taXRzLCBhbmQgd2hpY2ggYXJlIG5vdCByZXZlcnRlZAogYnkgc3Vic2VxdWVudCBjb21taXRzLCB3aWxsIHN0aWxsIGJlIGluIHRoZSByZXdyaXR0ZW4gYnJhbmNoLiBJZiB5b3Ugd2FudAogdG8gdGhyb3cgb3V0IF9jaGFuZ2VzXyB0b2dldGhlciB3aXRoIHRoZSBjb21taXRzLCB5b3Ugc2hvdWxkIHVzZSB0aGUKLWludGVyYWN0aXZlIG1vZGUgb2YgJ2dpdC1yZWJhc2UnLgoraW50ZXJhY3RpdmUgbW9kZSBvZiAnZ2l0IHJlYmFzZScuCiAKIAogQ29uc2lkZXIgdGhpcyBoaXN0b3J5OgpAQCAtMzM2LDcgKzM1OCw3IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogZ2l0IGZpbHRlci1icmFuY2ggLS1pbmRleC1maWx0ZXIgXAotCSdnaXQgbHMtZmlsZXMgLXMgfCBzZWQgInMtXHQtJm5ld3N1YmRpci8tIiB8CisJJ2dpdCBscy1maWxlcyAtcyB8IHNlZCAicy1cdFwiKi0mbmV3c3ViZGlyLy0iIHwKIAkJR0lUX0lOREVYX0ZJTEU9JEdJVF9JTkRFWF9GSUxFLm5ldyBcCiAJCQlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgogCSBtdiAkR0lUX0lOREVYX0ZJTEUubmV3ICRHSVRfSU5ERVhfRklMRScgSEVBRApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZm10LW1lcmdlLW1zZy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mbXQtbWVyZ2UtbXNnLnR4dAppbmRleCAxYzI0Nzk2Li5hNTg1ZGJlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1mbXQtbWVyZ2UtbXNnLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mbXQtbWVyZ2UtbXNnLnR4dApAQCAtMTYsMTAgKzE2LDEwIEBACiAtLS0tLS0tLS0tLQogVGFrZXMgdGhlIGxpc3Qgb2YgbWVyZ2VkIG9iamVjdHMgb24gc3RkaW4gYW5kIHByb2R1Y2VzIGEgc3VpdGFibGUKIGNvbW1pdCBtZXNzYWdlIHRvIGJlIHVzZWQgZm9yIHRoZSBtZXJnZSBjb21taXQsIHVzdWFsbHkgdG8gYmUKLXBhc3NlZCBhcyB0aGUgJzxtZXJnZS1tZXNzYWdlPicgYXJndW1lbnQgb2YgJ2dpdC1tZXJnZScuCitwYXNzZWQgYXMgdGhlICc8bWVyZ2UtbWVzc2FnZT4nIGFyZ3VtZW50IG9mICdnaXQgbWVyZ2UnLgogCi1UaGlzIHNjcmlwdCBpcyBpbnRlbmRlZCBtb3N0bHkgZm9yIGludGVybmFsIHVzZSBieSBzY3JpcHRzCi1hdXRvbWF0aWNhbGx5IGludm9raW5nICdnaXQtbWVyZ2UnLgorVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIG1vc3RseSBmb3IgaW50ZXJuYWwgdXNlIGJ5IHNjcmlwdHMKK2F1dG9tYXRpY2FsbHkgaW52b2tpbmcgJ2dpdCBtZXJnZScuCiAKIE9QVElPTlMKIC0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWZvci1lYWNoLXJlZi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mb3ItZWFjaC1yZWYudHh0CmluZGV4IDhkYzg3M2YuLjdlODMyODggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWZvci1lYWNoLXJlZi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZm9yLWVhY2gtcmVmLnR4dApAQCAtODIsNyArODIsNyBAQAogCVRoZSB0eXBlIG9mIHRoZSBvYmplY3QgKGBibG9iYCwgYHRyZWVgLCBgY29tbWl0YCwgYHRhZ2ApLgogCiBvYmplY3RzaXplOjoKLQlUaGUgc2l6ZSBvZiB0aGUgb2JqZWN0ICh0aGUgc2FtZSBhcyAnZ2l0LWNhdC1maWxlIC1zJyByZXBvcnRzKS4KKwlUaGUgc2l6ZSBvZiB0aGUgb2JqZWN0ICh0aGUgc2FtZSBhcyAnZ2l0IGNhdC1maWxlIC1zJyByZXBvcnRzKS4KIAogb2JqZWN0bmFtZTo6CiAJVGhlIG9iamVjdCBuYW1lIChha2EgU0hBLTEpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZm9ybWF0LXBhdGNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZvcm1hdC1wYXRjaC50eHQKaW5kZXggNmYxZmM4MC4uOTY3NGY5ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZm9ybWF0LXBhdGNoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mb3JtYXQtcGF0Y2gudHh0CkBAIC0xMCw3ICsxMCw3IEBACiAtLS0tLS0tLQogW3ZlcnNlXQogJ2dpdCBmb3JtYXQtcGF0Y2gnIFsta10gWygtb3wtLW91dHB1dC1kaXJlY3RvcnkpIDxkaXI+IHwgLS1zdGRvdXRdCi0JCSAgIFstLXRocmVhZFs9PHN0eWxlPl1dCisJCSAgIFstLW5vLXRocmVhZCB8IC0tdGhyZWFkWz08c3R5bGU+XV0KIAkJICAgWygtLWF0dGFjaHwtLWlubGluZSlbPTxib3VuZGFyeT5dIHwgLS1uby1hdHRhY2hdCiAJCSAgIFstcyB8IC0tc2lnbm9mZl0KIAkJICAgWy1uIHwgLS1udW1iZXJlZCB8IC1OIHwgLS1uby1udW1iZXJlZF0KQEAgLTI5LDcgKzI5LDcgQEAKIFByZXBhcmUgZWFjaCBjb21taXQgd2l0aCBpdHMgcGF0Y2ggaW4KIG9uZSBmaWxlIHBlciBjb21taXQsIGZvcm1hdHRlZCB0byByZXNlbWJsZSBVTklYIG1haWxib3ggZm9ybWF0LgogVGhlIG91dHB1dCBvZiB0aGlzIGNvbW1hbmQgaXMgY29udmVuaWVudCBmb3IgZS1tYWlsIHN1Ym1pc3Npb24gb3IKLWZvciB1c2Ugd2l0aCAnZ2l0LWFtJy4KK2ZvciB1c2Ugd2l0aCAnZ2l0IGFtJy4KIAogVGhlcmUgYXJlIHR3byB3YXlzIHRvIHNwZWNpZnkgd2hpY2ggY29tbWl0cyB0byBvcGVyYXRlIG9uLgogCkBAIC00MywyOCArNDMsMjggQEAKIAogVGhlIGZpcnN0IHJ1bGUgdGFrZXMgcHJlY2VkZW5jZSBpbiB0aGUgY2FzZSBvZiBhIHNpbmdsZSA8Y29tbWl0Pi4gIFRvCiBhcHBseSB0aGUgc2Vjb25kIHJ1bGUsIGkuZS4sIGZvcm1hdCBldmVyeXRoaW5nIHNpbmNlIHRoZSBiZWdpbm5pbmcgb2YKLWhpc3RvcnkgdXAgdW50aWwgPGNvbW1pdD4sIHVzZSB0aGUgJ1wtLXJvb3QnIG9wdGlvbjogImdpdCBmb3JtYXQtcGF0Y2gKLVwtLXJvb3QgPGNvbW1pdD4iLiAgSWYgeW91IHdhbnQgdG8gZm9ybWF0IG9ubHkgPGNvbW1pdD4gaXRzZWxmLCB5b3UKLWNhbiBkbyB0aGlzIHdpdGggImdpdCBmb3JtYXQtcGF0Y2ggLTEgPGNvbW1pdD4iLgoraGlzdG9yeSB1cCB1bnRpbCA8Y29tbWl0PiwgdXNlIHRoZSAnXC0tcm9vdCcgb3B0aW9uOiBgZ2l0IGZvcm1hdC1wYXRjaAorXC0tcm9vdCA8Y29tbWl0PmAuICBJZiB5b3Ugd2FudCB0byBmb3JtYXQgb25seSA8Y29tbWl0PiBpdHNlbGYsIHlvdQorY2FuIGRvIHRoaXMgd2l0aCBgZ2l0IGZvcm1hdC1wYXRjaCAtMSA8Y29tbWl0PmAuCiAKIEJ5IGRlZmF1bHQsIGVhY2ggb3V0cHV0IGZpbGUgaXMgbnVtYmVyZWQgc2VxdWVudGlhbGx5IGZyb20gMSwgYW5kIHVzZXMgdGhlCiBmaXJzdCBsaW5lIG9mIHRoZSBjb21taXQgbWVzc2FnZSAobWFzc2FnZWQgZm9yIHBhdGhuYW1lIHNhZmV0eSkgYXMKLXRoZSBmaWxlbmFtZS4gV2l0aCB0aGUgLS1udW1iZXJlZC1maWxlcyBvcHRpb24sIHRoZSBvdXRwdXQgZmlsZSBuYW1lcwordGhlIGZpbGVuYW1lLiBXaXRoIHRoZSBgLS1udW1iZXJlZC1maWxlc2Agb3B0aW9uLCB0aGUgb3V0cHV0IGZpbGUgbmFtZXMKIHdpbGwgb25seSBiZSBudW1iZXJzLCB3aXRob3V0IHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBjb21taXQgYXBwZW5kZWQuCiBUaGUgbmFtZXMgb2YgdGhlIG91dHB1dCBmaWxlcyBhcmUgcHJpbnRlZCB0byBzdGFuZGFyZAotb3V0cHV0LCB1bmxlc3MgdGhlIC0tc3Rkb3V0IG9wdGlvbiBpcyBzcGVjaWZpZWQuCitvdXRwdXQsIHVubGVzcyB0aGUgYC0tc3Rkb3V0YCBvcHRpb24gaXMgc3BlY2lmaWVkLgogCi1JZiAtbyBpcyBzcGVjaWZpZWQsIG91dHB1dCBmaWxlcyBhcmUgY3JlYXRlZCBpbiA8ZGlyPi4gIE90aGVyd2lzZQorSWYgYC1vYCBpcyBzcGVjaWZpZWQsIG91dHB1dCBmaWxlcyBhcmUgY3JlYXRlZCBpbiA8ZGlyPi4gIE90aGVyd2lzZQogdGhleSBhcmUgY3JlYXRlZCBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KIAogQnkgZGVmYXVsdCwgdGhlIHN1YmplY3Qgb2YgYSBzaW5nbGUgcGF0Y2ggaXMgIltQQVRDSF0gRmlyc3QgTGluZSIgYW5kCiB0aGUgc3ViamVjdCB3aGVuIG11bHRpcGxlIHBhdGNoZXMgYXJlIG91dHB1dCBpcyAiW1BBVENIIG4vbV0gRmlyc3QKLUxpbmUiLiBUbyBmb3JjZSAxLzEgdG8gYmUgYWRkZWQgZm9yIGEgc2luZ2xlIHBhdGNoLCB1c2UgLW4uICBUbyBvbWl0Ci1wYXRjaCBudW1iZXJzIGZyb20gdGhlIHN1YmplY3QsIHVzZSAtTgorTGluZSIuIFRvIGZvcmNlIDEvMSB0byBiZSBhZGRlZCBmb3IgYSBzaW5nbGUgcGF0Y2gsIHVzZSBgLW5gLiAgVG8gb21pdAorcGF0Y2ggbnVtYmVycyBmcm9tIHRoZSBzdWJqZWN0LCB1c2UgYC1OYC4KIAotSWYgZ2l2ZW4gLS10aHJlYWQsICdnaXQtZm9ybWF0LXBhdGNoJyB3aWxsIGdlbmVyYXRlIEluLVJlcGx5LVRvIGFuZAotUmVmZXJlbmNlcyBoZWFkZXJzIHRvIG1ha2UgdGhlIHNlY29uZCBhbmQgc3Vic2VxdWVudCBwYXRjaCBtYWlscyBhcHBlYXIKLWFzIHJlcGxpZXMgdG8gdGhlIGZpcnN0IG1haWw7IHRoaXMgYWxzbyBnZW5lcmF0ZXMgYSBNZXNzYWdlLUlkIGhlYWRlciB0bworSWYgZ2l2ZW4gYC0tdGhyZWFkYCwgYGdpdC1mb3JtYXQtcGF0Y2hgIHdpbGwgZ2VuZXJhdGUgYEluLVJlcGx5LVRvYCBhbmQKK2BSZWZlcmVuY2VzYCBoZWFkZXJzIHRvIG1ha2UgdGhlIHNlY29uZCBhbmQgc3Vic2VxdWVudCBwYXRjaCBtYWlscyBhcHBlYXIKK2FzIHJlcGxpZXMgdG8gdGhlIGZpcnN0IG1haWw7IHRoaXMgYWxzbyBnZW5lcmF0ZXMgYSBgTWVzc2FnZS1JZGAgaGVhZGVyIHRvCiByZWZlcmVuY2UuCiAKIE9QVElPTlMKQEAgLTExMiw3ICsxMTIsNyBAQAogLS1hdHRhY2hbPTxib3VuZGFyeT5dOjoKIAlDcmVhdGUgbXVsdGlwYXJ0L21peGVkIGF0dGFjaG1lbnQsIHRoZSBmaXJzdCBwYXJ0IG9mCiAJd2hpY2ggaXMgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCB0aGUgcGF0Y2ggaXRzZWxmIGluIHRoZQotCXNlY29uZCBwYXJ0LCB3aXRoICJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50Ii4KKwlzZWNvbmQgcGFydCwgd2l0aCBgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudGAuCiAKIC0tbm8tYXR0YWNoOjoKIAlEaXNhYmxlIHRoZSBjcmVhdGlvbiBvZiBhbiBhdHRhY2htZW50LCBvdmVycmlkaW5nIHRoZQpAQCAtMTIxLDIzICsxMjEsMzEgQEAKIC0taW5saW5lWz08Ym91bmRhcnk+XTo6CiAJQ3JlYXRlIG11bHRpcGFydC9taXhlZCBhdHRhY2htZW50LCB0aGUgZmlyc3QgcGFydCBvZgogCXdoaWNoIGlzIHRoZSBjb21taXQgbWVzc2FnZSBhbmQgdGhlIHBhdGNoIGl0c2VsZiBpbiB0aGUKLQlzZWNvbmQgcGFydCwgd2l0aCAiQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lIi4KKwlzZWNvbmQgcGFydCwgd2l0aCBgQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lYC4KIAogLS10aHJlYWRbPTxzdHlsZT5dOjoKLQlBZGQgSW4tUmVwbHktVG8gYW5kIFJlZmVyZW5jZXMgaGVhZGVycyB0byBtYWtlIHRoZSBzZWNvbmQgYW5kCi0Jc3Vic2VxdWVudCBtYWlscyBhcHBlYXIgYXMgcmVwbGllcyB0byB0aGUgZmlyc3QuICBBbHNvIGdlbmVyYXRlcwotCXRoZSBNZXNzYWdlLUlkIGhlYWRlciB0byByZWZlcmVuY2UuCistLW5vLXRocmVhZDo6CisJQ29udHJvbHMgYWRkaXRpb24gb2YgYEluLVJlcGx5LVRvYCBhbmQgYFJlZmVyZW5jZXNgIGhlYWRlcnMgdG8KKwltYWtlIHRoZSBzZWNvbmQgYW5kIHN1YnNlcXVlbnQgbWFpbHMgYXBwZWFyIGFzIHJlcGxpZXMgdG8gdGhlCisJZmlyc3QuICBBbHNvIGNvbnRyb2xzIGdlbmVyYXRpb24gb2YgdGhlIGBNZXNzYWdlLUlkYCBoZWFkZXIgdG8KKwlyZWZlcmVuY2UuCiArCiBUaGUgb3B0aW9uYWwgPHN0eWxlPiBhcmd1bWVudCBjYW4gYmUgZWl0aGVyIGBzaGFsbG93YCBvciBgZGVlcGAuCiAnc2hhbGxvdycgdGhyZWFkaW5nIG1ha2VzIGV2ZXJ5IG1haWwgYSByZXBseSB0byB0aGUgaGVhZCBvZiB0aGUKIHNlcmllcywgd2hlcmUgdGhlIGhlYWQgaXMgY2hvc2VuIGZyb20gdGhlIGNvdmVyIGxldHRlciwgdGhlCiBgXC0taW4tcmVwbHktdG9gLCBhbmQgdGhlIGZpcnN0IHBhdGNoIG1haWwsIGluIHRoaXMgb3JkZXIuICAnZGVlcCcKLXRocmVhZGluZyBtYWtlcyBldmVyeSBtYWlsIGEgcmVwbHkgdG8gdGhlIHByZXZpb3VzIG9uZS4gIElmIG5vdAotc3BlY2lmaWVkLCBkZWZhdWx0cyB0byB0aGUgJ2Zvcm1hdC50aHJlYWQnIGNvbmZpZ3VyYXRpb24sIG9yIGBzaGFsbG93YAotaWYgdGhhdCBpcyBub3Qgc2V0LgordGhyZWFkaW5nIG1ha2VzIGV2ZXJ5IG1haWwgYSByZXBseSB0byB0aGUgcHJldmlvdXMgb25lLgorKworVGhlIGRlZmF1bHQgaXMgYC0tbm8tdGhyZWFkYCwgdW5sZXNzIHRoZSAnZm9ybWF0LnRocmVhZCcgY29uZmlndXJhdGlvbgoraXMgc2V0LiAgSWYgYC0tdGhyZWFkYCBpcyBzcGVjaWZpZWQgd2l0aG91dCBhIHN0eWxlLCBpdCBkZWZhdWx0cyB0byB0aGUKK3N0eWxlIHNwZWNpZmllZCBieSAnZm9ybWF0LnRocmVhZCcgaWYgYW55LCBvciBlbHNlIGBzaGFsbG93YC4KKysKK0Jld2FyZSB0aGF0IHRoZSBkZWZhdWx0IGZvciAnZ2l0IHNlbmQtZW1haWwnIGlzIHRvIHRocmVhZCBlbWFpbHMKK2l0c2VsZi4gIElmIHlvdSB3YW50IGBnaXQgZm9ybWF0LXBhdGNoYCB0byB0YWtlIGNhcmUgb2YgdGhyZWFkaW5nLCB5b3UKK3dpbGwgd2FudCB0byBlbnN1cmUgdGhhdCB0aHJlYWRpbmcgaXMgZGlzYWJsZWQgZm9yIGBnaXQgc2VuZC1lbWFpbGAuCiAKIC0taW4tcmVwbHktdG89TWVzc2FnZS1JZDo6Ci0JTWFrZSB0aGUgZmlyc3QgbWFpbCAob3IgYWxsIHRoZSBtYWlscyB3aXRoIC0tbm8tdGhyZWFkKSBhcHBlYXIgYXMgYQorCU1ha2UgdGhlIGZpcnN0IG1haWwgKG9yIGFsbCB0aGUgbWFpbHMgd2l0aCBgLS1uby10aHJlYWRgKSBhcHBlYXIgYXMgYQogCXJlcGx5IHRvIHRoZSBnaXZlbiBNZXNzYWdlLUlkLCB3aGljaCBhdm9pZHMgYnJlYWtpbmcgdGhyZWFkcyB0bwogCXByb3ZpZGUgYSBuZXcgcGF0Y2ggc2VyaWVzLgogCkBAIC0xNTIsMTYgKzE2MCwxNiBAQAogCUluc3RlYWQgb2YgdGhlIHN0YW5kYXJkICdbUEFUQ0hdJyBwcmVmaXggaW4gdGhlIHN1YmplY3QKIAlsaW5lLCBpbnN0ZWFkIHVzZSAnWzxTdWJqZWN0LVByZWZpeD5dJy4gVGhpcwogCWFsbG93cyBmb3IgdXNlZnVsIG5hbWluZyBvZiBhIHBhdGNoIHNlcmllcywgYW5kIGNhbiBiZQotCWNvbWJpbmVkIHdpdGggdGhlIC0tbnVtYmVyZWQgb3B0aW9uLgorCWNvbWJpbmVkIHdpdGggdGhlIGAtLW51bWJlcmVkYCBvcHRpb24uCiAKIC0tY2M9PGVtYWlsPjo6Ci0JQWRkIGEgIkNjOiIgaGVhZGVyIHRvIHRoZSBlbWFpbCBoZWFkZXJzLiBUaGlzIGlzIGluIGFkZGl0aW9uCisJQWRkIGEgYENjOmAgaGVhZGVyIHRvIHRoZSBlbWFpbCBoZWFkZXJzLiBUaGlzIGlzIGluIGFkZGl0aW9uCiAJdG8gYW55IGNvbmZpZ3VyZWQgaGVhZGVycywgYW5kIG1heSBiZSB1c2VkIG11bHRpcGxlIHRpbWVzLgogCiAtLWFkZC1oZWFkZXI9PGhlYWRlcj46OgogCUFkZCBhbiBhcmJpdHJhcnkgaGVhZGVyIHRvIHRoZSBlbWFpbCBoZWFkZXJzLiAgVGhpcyBpcyBpbiBhZGRpdGlvbgogCXRvIGFueSBjb25maWd1cmVkIGhlYWRlcnMsIGFuZCBtYXkgYmUgdXNlZCBtdWx0aXBsZSB0aW1lcy4KLQlGb3IgZXhhbXBsZSwgLS1hZGQtaGVhZGVyPSJPcmdhbml6YXRpb246IGdpdC1mb28iCisJRm9yIGV4YW1wbGUsIGAtLWFkZC1oZWFkZXI9Ik9yZ2FuaXphdGlvbjogZ2l0LWZvbyJgCiAKIC0tY292ZXItbGV0dGVyOjoKIAlJbiBhZGRpdGlvbiB0byB0aGUgcGF0Y2hlcywgZ2VuZXJhdGUgYSBjb3ZlciBsZXR0ZXIgZmlsZQpAQCAtMjEzLDcgKzIyMSw3IEBACiAtLS0tLS0tLQogCiAqIEV4dHJhY3QgY29tbWl0cyBiZXR3ZWVuIHJldmlzaW9ucyBSMSBhbmQgUjIsIGFuZCBhcHBseSB0aGVtIG9uIHRvcCBvZgotdGhlIGN1cnJlbnQgYnJhbmNoIHVzaW5nICdnaXQtYW0nIHRvIGNoZXJyeS1waWNrIHRoZW06Cit0aGUgY3VycmVudCBicmFuY2ggdXNpbmcgJ2dpdCBhbScgdG8gY2hlcnJ5LXBpY2sgdGhlbToKICsKIC0tLS0tLS0tLS0tLQogJCBnaXQgZm9ybWF0LXBhdGNoIC1rIC0tc3Rkb3V0IFIxLi5SMiB8IGdpdCBhbSAtMyAtawpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZnNjay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mc2NrLnR4dAppbmRleCAyODdjNGZjLi4zYWQ0OGE2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1mc2NrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mc2NrLnR4dApAQCAtMTAsNyArMTAsNyBAQAogLS0tLS0tLS0KIFt2ZXJzZV0KICdnaXQgZnNjaycgWy0tdGFnc10gWy0tcm9vdF0gWy0tdW5yZWFjaGFibGVdIFstLWNhY2hlXSBbLS1uby1yZWZsb2dzXQotCSBbLS1mdWxsXSBbLS1zdHJpY3RdIFstLXZlcmJvc2VdIFstLWxvc3QtZm91bmRdIFs8b2JqZWN0PipdCisJIFstLVtuby1dZnVsbF0gWy0tc3RyaWN0XSBbLS12ZXJib3NlXSBbLS1sb3N0LWZvdW5kXSBbPG9iamVjdD4qXQogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KQEAgLTIxLDcgKzIxLDcgQEAKIDxvYmplY3Q+OjoKIAlBbiBvYmplY3QgdG8gdHJlYXQgYXMgdGhlIGhlYWQgb2YgYW4gdW5yZWFjaGFiaWxpdHkgdHJhY2UuCiArCi1JZiBubyBvYmplY3RzIGFyZSBnaXZlbiwgJ2dpdC1mc2NrJyBkZWZhdWx0cyB0byB1c2luZyB0aGUKK0lmIG5vIG9iamVjdHMgYXJlIGdpdmVuLCAnZ2l0IGZzY2snIGRlZmF1bHRzIHRvIHVzaW5nIHRoZQogaW5kZXggZmlsZSwgYWxsIFNIQTEgcmVmZXJlbmNlcyBpbiAuZ2l0L3JlZnMvKiwgYW5kIGFsbCByZWZsb2dzICh1bmxlc3MKIC0tbm8tcmVmbG9ncyBpcyBnaXZlbikgYXMgaGVhZHMuCiAKQEAgLTUyLDcgKzUyLDggQEAKIAlvciAkR0lUX0RJUi9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcywKIAlhbmQgaW4gcGFja2VkIGdpdCBhcmNoaXZlcyBmb3VuZCBpbiAkR0lUX0RJUi9vYmplY3RzL3BhY2sKIAlhbmQgY29ycmVzcG9uZGluZyBwYWNrIHN1YmRpcmVjdG9yaWVzIGluIGFsdGVybmF0ZQotCW9iamVjdCBwb29scy4KKwlvYmplY3QgcG9vbHMuICBUaGlzIGlzIG5vdyBkZWZhdWx0OyB5b3UgY2FuIHR1cm4gaXQgb2ZmCisJd2l0aCAtLW5vLWZ1bGwuCiAKIC0tc3RyaWN0OjoKIAlFbmFibGUgbW9yZSBzdHJpY3QgY2hlY2tpbmcsIG5hbWVseSB0byBjYXRjaCBhIGZpbGUgbW9kZQpAQCAtODQsNyArODUsNyBAQAogCiB3aWxsIGRvIHF1aXRlIGEgX2xvdF8gb2YgdmVyaWZpY2F0aW9uIG9uIHRoZSB0cmVlLiBUaGVyZSBhcmUgYSBmZXcKIGV4dHJhIHZhbGlkaXR5IHRlc3RzIHRvIGJlIGFkZGVkIChtYWtlIHN1cmUgdGhhdCB0cmVlIG9iamVjdHMgYXJlCi1zb3J0ZWQgcHJvcGVybHkgZXRjKSwgYnV0IG9uIHRoZSB3aG9sZSBpZiAnZ2l0LWZzY2snIGlzIGhhcHB5LCB5b3UKK3NvcnRlZCBwcm9wZXJseSBldGMpLCBidXQgb24gdGhlIHdob2xlIGlmICdnaXQgZnNjaycgaXMgaGFwcHksIHlvdQogZG8gaGF2ZSBhIHZhbGlkIHRyZWUuCiAKIEFueSBjb3JydXB0IG9iamVjdHMgeW91IHdpbGwgaGF2ZSB0byBmaW5kIGluIGJhY2t1cHMgb3Igb3RoZXIgYXJjaGl2ZXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWdjLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWdjLnR4dAppbmRleCBkY2FjOGM4Li4xODk1NzNhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1nYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZ2MudHh0CkBAIC0xNSwxMyArMTUsMTMgQEAKIFJ1bnMgYSBudW1iZXIgb2YgaG91c2VrZWVwaW5nIHRhc2tzIHdpdGhpbiB0aGUgY3VycmVudCByZXBvc2l0b3J5LAogc3VjaCBhcyBjb21wcmVzc2luZyBmaWxlIHJldmlzaW9ucyAodG8gcmVkdWNlIGRpc2sgc3BhY2UgYW5kIGluY3JlYXNlCiBwZXJmb3JtYW5jZSkgYW5kIHJlbW92aW5nIHVucmVhY2hhYmxlIG9iamVjdHMgd2hpY2ggbWF5IGhhdmUgYmVlbgotY3JlYXRlZCBmcm9tIHByaW9yIGludm9jYXRpb25zIG9mICdnaXQtYWRkJy4KK2NyZWF0ZWQgZnJvbSBwcmlvciBpbnZvY2F0aW9ucyBvZiAnZ2l0IGFkZCcuCiAKIFVzZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIHJ1biB0aGlzIHRhc2sgb24gYSByZWd1bGFyIGJhc2lzIHdpdGhpbgogZWFjaCByZXBvc2l0b3J5IHRvIG1haW50YWluIGdvb2QgZGlzayBzcGFjZSB1dGlsaXphdGlvbiBhbmQgZ29vZAogb3BlcmF0aW5nIHBlcmZvcm1hbmNlLgogCi1Tb21lIGdpdCBjb21tYW5kcyBtYXkgYXV0b21hdGljYWxseSBydW4gJ2dpdC1nYyc7IHNlZSB0aGUgYC0tYXV0b2AgZmxhZworU29tZSBnaXQgY29tbWFuZHMgbWF5IGF1dG9tYXRpY2FsbHkgcnVuICdnaXQgZ2MnOyBzZWUgdGhlIGAtLWF1dG9gIGZsYWcKIGJlbG93IGZvciBkZXRhaWxzLiBJZiB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZyBhbmQgYWxsIHlvdSB3YW50IGlzIHRvCiBkaXNhYmxlIHRoaXMgYmVoYXZpb3IgcGVybWFuZW50bHkgd2l0aG91dCBmdXJ0aGVyIGNvbnNpZGVyYXRpb25zLCBqdXN0IGRvOgogCkBAIC0zMywxNSArMzMsMTUgQEAKIC0tLS0tLS0KIAogLS1hZ2dyZXNzaXZlOjoKLQlVc3VhbGx5ICdnaXQtZ2MnIHJ1bnMgdmVyeSBxdWlja2x5IHdoaWxlIHByb3ZpZGluZyBnb29kIGRpc2sKKwlVc3VhbGx5ICdnaXQgZ2MnIHJ1bnMgdmVyeSBxdWlja2x5IHdoaWxlIHByb3ZpZGluZyBnb29kIGRpc2sKIAlzcGFjZSB1dGlsaXphdGlvbiBhbmQgcGVyZm9ybWFuY2UuICBUaGlzIG9wdGlvbiB3aWxsIGNhdXNlCi0JJ2dpdC1nYycgdG8gbW9yZSBhZ2dyZXNzaXZlbHkgb3B0aW1pemUgdGhlIHJlcG9zaXRvcnkgYXQgdGhlIGV4cGVuc2UKKwknZ2l0IGdjJyB0byBtb3JlIGFnZ3Jlc3NpdmVseSBvcHRpbWl6ZSB0aGUgcmVwb3NpdG9yeSBhdCB0aGUgZXhwZW5zZQogCW9mIHRha2luZyBtdWNoIG1vcmUgdGltZS4gIFRoZSBlZmZlY3RzIG9mIHRoaXMgb3B0aW1pemF0aW9uIGFyZQogCXBlcnNpc3RlbnQsIHNvIHRoaXMgb3B0aW9uIG9ubHkgbmVlZHMgdG8gYmUgdXNlZCBvY2Nhc2lvbmFsbHk7IGV2ZXJ5CiAJZmV3IGh1bmRyZWQgY2hhbmdlc2V0cyBvciBzby4KIAogLS1hdXRvOjoKLQlXaXRoIHRoaXMgb3B0aW9uLCAnZ2l0LWdjJyBjaGVja3Mgd2hldGhlciBhbnkgaG91c2VrZWVwaW5nIGlzCisJV2l0aCB0aGlzIG9wdGlvbiwgJ2dpdCBnYycgY2hlY2tzIHdoZXRoZXIgYW55IGhvdXNla2VlcGluZyBpcwogCXJlcXVpcmVkOyBpZiBub3QsIGl0IGV4aXRzIHdpdGhvdXQgcGVyZm9ybWluZyBhbnkgd29yay4KIAlTb21lIGdpdCBjb21tYW5kcyBydW4gYGdpdCBnYyAtLWF1dG9gIGFmdGVyIHBlcmZvcm1pbmcKIAlvcGVyYXRpb25zIHRoYXQgY291bGQgY3JlYXRlIG1hbnkgbG9vc2Ugb2JqZWN0cy4KQEAgLTUwLDEzICs1MCwxMyBAQAogdG9vIG1hbnkgcGFja3MgaW4gdGhlIHJlcG9zaXRvcnkuIElmIHRoZSBudW1iZXIgb2YgbG9vc2Ugb2JqZWN0cwogZXhjZWVkcyB0aGUgdmFsdWUgb2YgdGhlIGBnYy5hdXRvYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCB0aGVuCiBhbGwgbG9vc2Ugb2JqZWN0cyBhcmUgY29tYmluZWQgaW50byBhIHNpbmdsZSBwYWNrIHVzaW5nCi0nZ2l0LXJlcGFjayAtZCAtbCcuICBTZXR0aW5nIHRoZSB2YWx1ZSBvZiBgZ2MuYXV0b2AgdG8gMAorYGdpdCByZXBhY2sgLWQgLWxgLiAgU2V0dGluZyB0aGUgdmFsdWUgb2YgYGdjLmF1dG9gIHRvIDAKIGRpc2FibGVzIGF1dG9tYXRpYyBwYWNraW5nIG9mIGxvb3NlIG9iamVjdHMuCiArCiBJZiB0aGUgbnVtYmVyIG9mIHBhY2tzIGV4Y2VlZHMgdGhlIHZhbHVlIG9mIGBnYy5hdXRvcGFja2xpbWl0YCwKIHRoZW4gZXhpc3RpbmcgcGFja3MgKGV4Y2VwdCB0aG9zZSBtYXJrZWQgd2l0aCBhIGAua2VlcGAgZmlsZSkKIGFyZSBjb25zb2xpZGF0ZWQgaW50byBhIHNpbmdsZSBwYWNrIGJ5IHVzaW5nIHRoZSBgLUFgIG9wdGlvbiBvZgotJ2dpdC1yZXBhY2snLiBTZXR0aW5nIGBnYy5hdXRvcGFja2xpbWl0YCB0byAwIGRpc2FibGVzCisnZ2l0IHJlcGFjaycuIFNldHRpbmcgYGdjLmF1dG9wYWNrbGltaXRgIHRvIDAgZGlzYWJsZXMKIGF1dG9tYXRpYyBjb25zb2xpZGF0aW9uIG9mIHBhY2tzLgogCiAtLXBydW5lPTxkYXRlPjo6CkBAIC05Nyw3ICs5Nyw3IEBACiBrZXB0LiAgVGhpcyBkZWZhdWx0cyB0byAxNSBkYXlzLgogCiBUaGUgb3B0aW9uYWwgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAnZ2MucGFja3JlZnMnIGRldGVybWluZXMgaWYKLSdnaXQtZ2MnIHJ1bnMgJ2dpdC1wYWNrLXJlZnMnLiBUaGlzIGNhbiBiZSBzZXQgdG8gIm5vYmFyZSIgdG8gZW5hYmxlCisnZ2l0IGdjJyBydW5zICdnaXQgcGFjay1yZWZzJy4gVGhpcyBjYW4gYmUgc2V0IHRvICJub2JhcmUiIHRvIGVuYWJsZQogaXQgd2l0aGluIGFsbCBub24tYmFyZSByZXBvcyBvciBpdCBjYW4gYmUgc2V0IHRvIGEgYm9vbGVhbiB2YWx1ZS4KIFRoaXMgZGVmYXVsdHMgdG8gdHJ1ZS4KIApAQCAtMTA2LDcgKzEwNiw3IEBACiB0aGUgcmVwb3NpdG9yeSB3aGVuIHRoZSAtLWFnZ3Jlc3NpdmUgb3B0aW9uIGlzIHNwZWNpZmllZC4gIFRoZSBsYXJnZXIKIHRoZSB2YWx1ZSwgdGhlIG1vcmUgdGltZSBpcyBzcGVudCBvcHRpbWl6aW5nIHRoZSBkZWx0YSBjb21wcmVzc2lvbi4gIFNlZQogdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSAtLXdpbmRvdycgb3B0aW9uIGluIGxpbmtnaXQ6Z2l0LXJlcGFja1sxXSBmb3IKLW1vcmUgZGV0YWlscy4gIFRoaXMgZGVmYXVsdHMgdG8gMTAuCittb3JlIGRldGFpbHMuICBUaGlzIGRlZmF1bHRzIHRvIDI1MC4KIAogVGhlIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgJ2djLnBydW5lRXhwaXJlJyBjb250cm9scyBob3cgb2xkCiB0aGUgdW5yZWZlcmVuY2VkIGxvb3NlIG9iamVjdHMgaGF2ZSB0byBiZSBiZWZvcmUgdGhleSBhcmUgcHJ1bmVkLiAgVGhlCkBAIC0xMTYsMTEgKzExNiwxMSBAQAogTm90ZXMKIC0tLS0tCiAKLSdnaXQtZ2MnIHRyaWVzIHZlcnkgaGFyZCB0byBiZSBzYWZlIGFib3V0IHRoZSBnYXJiYWdlIGl0IGNvbGxlY3RzLiBJbgorJ2dpdCBnYycgdHJpZXMgdmVyeSBoYXJkIHRvIGJlIHNhZmUgYWJvdXQgdGhlIGdhcmJhZ2UgaXQgY29sbGVjdHMuIEluCiBwYXJ0aWN1bGFyLCBpdCB3aWxsIGtlZXAgbm90IG9ubHkgb2JqZWN0cyByZWZlcmVuY2VkIGJ5IHlvdXIgY3VycmVudCBzZXQKIG9mIGJyYW5jaGVzIGFuZCB0YWdzLCBidXQgYWxzbyBvYmplY3RzIHJlZmVyZW5jZWQgYnkgdGhlIGluZGV4LCByZW1vdGUKLXRyYWNraW5nIGJyYW5jaGVzLCByZWZzIHNhdmVkIGJ5ICdnaXQtZmlsdGVyLWJyYW5jaCcgaW4KLXJlZnMvb3JpZ2luYWwvLCBvciByZWZsb2dzICh3aGljaCBtYXkgcmVmZXJlbmNlcyBjb21taXRzIGluIGJyYW5jaGVzCit0cmFja2luZyBicmFuY2hlcywgcmVmcyBzYXZlZCBieSAnZ2l0IGZpbHRlci1icmFuY2gnIGluCityZWZzL29yaWdpbmFsLywgb3IgcmVmbG9ncyAod2hpY2ggbWF5IHJlZmVyZW5jZSBjb21taXRzIGluIGJyYW5jaGVzCiB0aGF0IHdlcmUgbGF0ZXIgYW1lbmRlZCBvciByZXdvdW5kKS4KIAogSWYgeW91IGFyZSBleHBlY3Rpbmcgc29tZSBvYmplY3RzIHRvIGJlIGNvbGxlY3RlZCBhbmQgdGhleSBhcmVuJ3QsIGNoZWNrCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1nZXQtdGFyLWNvbW1pdC1pZC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1nZXQtdGFyLWNvbW1pdC1pZC50eHQKaW5kZXggODRmMjNlZS4uNzkwYWY5NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZ2V0LXRhci1jb21taXQtaWQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWdldC10YXItY29tbWl0LWlkLnR4dApAQCAtMTQsMTIgKzE0LDEyIEBACiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KIEFjdHMgYXMgYSBmaWx0ZXIsIGV4dHJhY3RpbmcgdGhlIGNvbW1pdCBJRCBzdG9yZWQgaW4gYXJjaGl2ZXMgY3JlYXRlZCBieQotJ2dpdC1hcmNoaXZlJy4gIEl0IHJlYWRzIG9ubHkgdGhlIGZpcnN0IDEwMjQgYnl0ZXMgb2YgaW5wdXQsIHRodXMgaXRzCisnZ2l0IGFyY2hpdmUnLiAgSXQgcmVhZHMgb25seSB0aGUgZmlyc3QgMTAyNCBieXRlcyBvZiBpbnB1dCwgdGh1cyBpdHMKIHJ1bnRpbWUgaXMgbm90IGluZmx1ZW5jZWQgYnkgdGhlIHNpemUgb2YgPHRhcmZpbGU+IHZlcnkgbXVjaC4KIAotSWYgbm8gY29tbWl0IElEIGlzIGZvdW5kLCAnZ2l0LWdldC10YXItY29tbWl0LWlkJyBxdWlldGx5IGV4aXN0cyB3aXRoIGEKK0lmIG5vIGNvbW1pdCBJRCBpcyBmb3VuZCwgJ2dpdCBnZXQtdGFyLWNvbW1pdC1pZCcgcXVpZXRseSBleGlzdHMgd2l0aCBhCiByZXR1cm4gY29kZSBvZiAxLiAgVGhpcyBjYW4gaGFwcGVuIGlmIDx0YXJmaWxlPiBoYWQgbm90IGJlZW4gY3JlYXRlZAotdXNpbmcgJ2dpdC1hcmNoaXZlJyBvciBpZiB0aGUgZmlyc3QgcGFyYW1ldGVyIG9mICdnaXQtYXJjaGl2ZScgaGFkIGJlZW4KK3VzaW5nICdnaXQgYXJjaGl2ZScgb3IgaWYgdGhlIGZpcnN0IHBhcmFtZXRlciBvZiAnZ2l0IGFyY2hpdmUnIGhhZCBiZWVuCiBhIHRyZWUgSUQgaW5zdGVhZCBvZiBhIGNvbW1pdCBJRCBvciB0YWcuCiAKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZ3JlcC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1ncmVwLnR4dAppbmRleCBmY2NiODJkLi5lZTUwNmU2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1ncmVwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1ncmVwLnR4dApAQCAtOSwzMSArOSwzNSBAQAogU1lOT1BTSVMKIC0tLS0tLS0tCiBbdmVyc2VdCi0nZ2l0IGdyZXAnIFstLWNhY2hlZF0KLQkgICBbLWEgfCAtLXRleHRdIFstSV0gWy1pIHwgLS1pZ25vcmUtY2FzZV0gWy13IHwgLS13b3JkLXJlZ2V4cF0KKydnaXQgZ3JlcCcgWy1hIHwgLS10ZXh0XSBbLUldIFstaSB8IC0taWdub3JlLWNhc2VdIFstdyB8IC0td29yZC1yZWdleHBdCiAJICAgWy12IHwgLS1pbnZlcnQtbWF0Y2hdIFstaHwtSF0gWy0tZnVsbC1uYW1lXQogCSAgIFstRSB8IC0tZXh0ZW5kZWQtcmVnZXhwXSBbLUcgfCAtLWJhc2ljLXJlZ2V4cF0KIAkgICBbLUYgfCAtLWZpeGVkLXN0cmluZ3NdIFstbl0KIAkgICBbLWwgfCAtLWZpbGVzLXdpdGgtbWF0Y2hlc10gWy1MIHwgLS1maWxlcy13aXRob3V0LW1hdGNoXQogCSAgIFsteiB8IC0tbnVsbF0KLQkgICBbLWMgfCAtLWNvdW50XSBbLS1hbGwtbWF0Y2hdCisJICAgWy1jIHwgLS1jb3VudF0gWy0tYWxsLW1hdGNoXSBbLXEgfCAtLXF1aWV0XQorCSAgIFstLW1heC1kZXB0aCA8ZGVwdGg+XQogCSAgIFstLWNvbG9yIHwgLS1uby1jb2xvcl0KIAkgICBbLUEgPHBvc3QtY29udGV4dD5dIFstQiA8cHJlLWNvbnRleHQ+XSBbLUMgPGNvbnRleHQ+XQogCSAgIFstZiA8ZmlsZT5dIFstZV0gPHBhdHRlcm4+Ci0JICAgWy0tYW5kfC0tb3J8LS1ub3R8KHwpfC1lIDxwYXR0ZXJuPi4uLl0gWzx0cmVlPi4uLl0KLQkgICBbLS1dIFs8cGF0aD4uLi5dCisJICAgWy0tYW5kfC0tb3J8LS1ub3R8KHwpfC1lIDxwYXR0ZXJuPi4uLl0KKwkgICBbLS1jYWNoZWQgfCAtLW5vLWluZGV4IHwgPHRyZWU+Li4uXQorCSAgIFstLV0gWzxwYXRoc3BlYz4uLi5dCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQotTG9vayBmb3Igc3BlY2lmaWVkIHBhdHRlcm5zIGluIHRoZSB3b3JraW5nIHRyZWUgZmlsZXMsIGJsb2JzCi1yZWdpc3RlcmVkIGluIHRoZSBpbmRleCBmaWxlLCBvciBnaXZlbiB0cmVlIG9iamVjdHMuCitMb29rIGZvciBzcGVjaWZpZWQgcGF0dGVybnMgaW4gdGhlIHRyYWNrZWQgZmlsZXMgaW4gdGhlIHdvcmsgdHJlZSwgYmxvYnMKK3JlZ2lzdGVyZWQgaW4gdGhlIGluZGV4IGZpbGUsIG9yIGJsb2JzIGluIGdpdmVuIHRyZWUgb2JqZWN0cy4KIAogCiBPUFRJT05TCiAtLS0tLS0tCiAtLWNhY2hlZDo6Ci0JSW5zdGVhZCBvZiBzZWFyY2hpbmcgaW4gdGhlIHdvcmtpbmcgdHJlZSBmaWxlcywgY2hlY2sKLQl0aGUgYmxvYnMgcmVnaXN0ZXJlZCBpbiB0aGUgaW5kZXggZmlsZS4KKwlJbnN0ZWFkIG9mIHNlYXJjaGluZyB0cmFja2VkIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUsIHNlYXJjaAorCWJsb2JzIHJlZ2lzdGVyZWQgaW4gdGhlIGluZGV4IGZpbGUuCisKKy0tbm8taW5kZXg6OgorCVNlYXJjaCBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIG5vdCBqdXN0IHRob3NlIHRyYWNrZWQgYnkgZ2l0LgogCiAtYTo6CiAtLXRleHQ6OgpAQCAtNDcsNiArNTEsMTAgQEAKIC1JOjoKIAlEb24ndCBtYXRjaCB0aGUgcGF0dGVybiBpbiBiaW5hcnkgZmlsZXMuCiAKKy0tbWF4LWRlcHRoIDxkZXB0aD46OgorCUZvciBlYWNoIDxwYXRoc3BlYz4gZ2l2ZW4gb24gY29tbWFuZCBsaW5lLCBkZXNjZW5kIGF0IG1vc3QgPGRlcHRoPgorCWxldmVscyBvZiBkaXJlY3Rvcmllcy4gQSBuZWdhdGl2ZSB2YWx1ZSBtZWFucyBubyBsaW1pdC4KKwogLXc6OgogLS13b3JkLXJlZ2V4cDo6CiAJTWF0Y2ggdGhlIHBhdHRlcm4gb25seSBhdCB3b3JkIGJvdW5kYXJ5IChlaXRoZXIgYmVnaW4gYXQgdGhlCkBAIC05Myw4ICsxMDEsOCBAQAogLS1maWxlcy13aXRob3V0LW1hdGNoOjoKIAlJbnN0ZWFkIG9mIHNob3dpbmcgZXZlcnkgbWF0Y2hlZCBsaW5lLCBzaG93IG9ubHkgdGhlCiAJbmFtZXMgb2YgZmlsZXMgdGhhdCBjb250YWluIChvciBkbyBub3QgY29udGFpbikgbWF0Y2hlcy4KLQlGb3IgYmV0dGVyIGNvbXBhdGliaWxpdHkgd2l0aCAnZ2l0LWRpZmYnLCAtLW5hbWUtb25seSBpcyBhCi0Jc3lub255bSBmb3IgLS1maWxlcy13aXRoLW1hdGNoZXMuCisJRm9yIGJldHRlciBjb21wYXRpYmlsaXR5IHdpdGggJ2dpdCBkaWZmJywgYC0tbmFtZS1vbmx5YCBpcyBhCisJc3lub255bSBmb3IgYC0tZmlsZXMtd2l0aC1tYXRjaGVzYC4KIAogLXo6OgogLS1udWxsOjoKQEAgLTEyMCwxNCArMTI4LDIyIEBACiAJbWF0Y2hlcy4KIAogLTxudW0+OjoKLQlBIHNob3J0Y3V0IGZvciBzcGVjaWZ5aW5nIC1DPG51bT4uCisJQSBzaG9ydGN1dCBmb3Igc3BlY2lmeWluZyBgLUM8bnVtPmAuCisKKy1wOjoKKy0tc2hvdy1mdW5jdGlvbjo6CisJU2hvdyB0aGUgcHJlY2VkaW5nIGxpbmUgdGhhdCBjb250YWlucyB0aGUgZnVuY3Rpb24gbmFtZSBvZgorCXRoZSBtYXRjaCwgdW5sZXNzIHRoZSBtYXRjaGluZyBsaW5lIGlzIGEgZnVuY3Rpb24gbmFtZSBpdHNlbGYuCisJVGhlIG5hbWUgaXMgZGV0ZXJtaW5lZCBpbiB0aGUgc2FtZSB3YXkgYXMgJ2dpdCBkaWZmJyB3b3JrcyBvdXQKKwlwYXRjaCBodW5rIGhlYWRlcnMgKHNlZSAnRGVmaW5pbmcgYSBjdXN0b20gaHVuay1oZWFkZXInIGluCisJbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdKS4KIAogLWYgPGZpbGU+OjoKIAlSZWFkIHBhdHRlcm5zIGZyb20gPGZpbGU+LCBvbmUgcGVyIGxpbmUuCiAKIC1lOjoKIAlUaGUgbmV4dCBwYXJhbWV0ZXIgaXMgdGhlIHBhdHRlcm4uIFRoaXMgb3B0aW9uIGhhcyB0byBiZQotCXVzZWQgZm9yIHBhdHRlcm5zIHN0YXJ0aW5nIHdpdGggLSBhbmQgc2hvdWxkIGJlIHVzZWQgaW4KKwl1c2VkIGZvciBwYXR0ZXJucyBzdGFydGluZyB3aXRoIGAtYCBhbmQgc2hvdWxkIGJlIHVzZWQgaW4KIAlzY3JpcHRzIHBhc3NpbmcgdXNlciBpbnB1dCB0byBncmVwLiAgTXVsdGlwbGUgcGF0dGVybnMgYXJlCiAJY29tYmluZWQgYnkgJ29yJy4KIApAQCAtMTQ1LDE2ICsxNjEsMjkgQEAKIAl0aGlzIGZsYWcgaXMgc3BlY2lmaWVkIHRvIGxpbWl0IHRoZSBtYXRjaCB0byBmaWxlcyB0aGF0CiAJaGF2ZSBsaW5lcyB0byBtYXRjaCBhbGwgb2YgdGhlbS4KIAotYDx0cmVlPi4uLmA6OgotCVNlYXJjaCBibG9icyBpbiB0aGUgdHJlZXMgZm9yIHNwZWNpZmllZCBwYXR0ZXJucy4KKy1xOjoKKy0tcXVpZXQ6OgorCURvIG5vdCBvdXRwdXQgbWF0Y2hlZCBsaW5lczsgaW5zdGVhZCwgZXhpdCB3aXRoIHN0YXR1cyAwIHdoZW4KKwl0aGVyZSBpcyBhIG1hdGNoIGFuZCB3aXRoIG5vbi16ZXJvIHN0YXR1cyB3aGVuIHRoZXJlIGlzbid0LgorCis8dHJlZT4uLi46OgorCUluc3RlYWQgb2Ygc2VhcmNoaW5nIHRyYWNrZWQgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSwgc2VhcmNoCisJYmxvYnMgaW4gdGhlIGdpdmVuIHRyZWVzLgogCiBcLS06OgogCVNpZ25hbHMgdGhlIGVuZCBvZiBvcHRpb25zOyB0aGUgcmVzdCBvZiB0aGUgcGFyYW1ldGVycwotCWFyZSA8cGF0aD4gbGltaXRlcnMuCisJYXJlIDxwYXRoc3BlYz4gbGltaXRlcnMuCiAKKzxwYXRoc3BlYz4uLi46OgorCUlmIGdpdmVuLCBsaW1pdCB0aGUgc2VhcmNoIHRvIHBhdGhzIG1hdGNoaW5nIGF0IGxlYXN0IG9uZSBwYXR0ZXJuLgorCUJvdGggbGVhZGluZyBwYXRocyBtYXRjaCBhbmQgZ2xvYig3KSBwYXR0ZXJucyBhcmUgc3VwcG9ydGVkLgogCi1FeGFtcGxlCi0tLS0tLS0tCitFeGFtcGxlcworLS0tLS0tLS0KKworZ2l0IGdyZXAgJ3RpbWVfdCcgLS0gJyouW2NoXSc6OgorCUxvb2tzIGZvciBgdGltZV90YCBpbiBhbGwgdHJhY2tlZCAuYyBhbmQgLmggZmlsZXMgaW4gdGhlIHdvcmtpbmcKKwlkaXJlY3RvcnkgYW5kIGl0cyBzdWJkaXJlY3Rvcmllcy4KIAogZ2l0IGdyZXAgLWUgXCcjZGVmaW5lXCcgLS1hbmQgXCggLWUgTUFYX1BBVEggLWUgUEFUSF9NQVggXCk6OgogCUxvb2tzIGZvciBhIGxpbmUgdGhhdCBoYXMgYCNkZWZpbmVgIGFuZCBlaXRoZXIgYE1BWF9QQVRIYCBvcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZ3VpLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWd1aS50eHQKaW5kZXggZDBiYzk4Yi4uMjU2MzcxMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZ3VpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1ndWkudHh0CkBAIC0xMSwxOSArMTEsMTkgQEAKIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCi1BIFRjbC9UayBiYXNlZCBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgdG8gR2l0LiAgJ2dpdC1ndWknIGZvY3VzZXMKK0EgVGNsL1RrIGJhc2VkIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSB0byBHaXQuICAnZ2l0IGd1aScgZm9jdXNlcwogb24gYWxsb3dpbmcgdXNlcnMgdG8gbWFrZSBjaGFuZ2VzIHRvIHRoZWlyIHJlcG9zaXRvcnkgYnkgbWFraW5nCiBuZXcgY29tbWl0cywgYW1lbmRpbmcgZXhpc3Rpbmcgb25lcywgY3JlYXRpbmcgYnJhbmNoZXMsIHBlcmZvcm1pbmcKIGxvY2FsIG1lcmdlcywgYW5kIGZldGNoaW5nL3B1c2hpbmcgdG8gcmVtb3RlIHJlcG9zaXRvcmllcy4KIAotVW5saWtlICdnaXRrJywgJ2dpdC1ndWknIGZvY3VzZXMgb24gY29tbWl0IGdlbmVyYXRpb24KK1VubGlrZSAnZ2l0aycsICdnaXQgZ3VpJyBmb2N1c2VzIG9uIGNvbW1pdCBnZW5lcmF0aW9uCiBhbmQgc2luZ2xlIGZpbGUgYW5ub3RhdGlvbiBhbmQgZG9lcyBub3Qgc2hvdyBwcm9qZWN0IGhpc3RvcnkuCiBJdCBkb2VzIGhvd2V2ZXIgc3VwcGx5IG1lbnUgYWN0aW9ucyB0byBzdGFydCBhICdnaXRrJyBzZXNzaW9uIGZyb20KLXdpdGhpbiAnZ2l0LWd1aScuCit3aXRoaW4gJ2dpdCBndWknLgogCi0nZ2l0LWd1aScgaXMga25vd24gdG8gd29yayBvbiBhbGwgcG9wdWxhciBVTklYIHN5c3RlbXMsIE1hYyBPUyBYLAorJ2dpdCBndWknIGlzIGtub3duIHRvIHdvcmsgb24gYWxsIHBvcHVsYXIgVU5JWCBzeXN0ZW1zLCBNYWMgT1MgWCwKIGFuZCBXaW5kb3dzICh1bmRlciBib3RoIEN5Z3dpbiBhbmQgTVNZUykuICBUbyB0aGUgZXh0ZW50IHBvc3NpYmxlCi1PUyBzcGVjaWZpYyB1c2VyIGludGVyZmFjZSBndWlkZWxpbmVzIGFyZSBmb2xsb3dlZCwgbWFraW5nICdnaXQtZ3VpJworT1Mgc3BlY2lmaWMgdXNlciBpbnRlcmZhY2UgZ3VpZGVsaW5lcyBhcmUgZm9sbG93ZWQsIG1ha2luZyAnZ2l0IGd1aScKIGEgZmFpcmx5IG5hdGl2ZSBpbnRlcmZhY2UgZm9yIHVzZXJzLgogCiBDT01NQU5EUwpAQCAtMzgsMTMgKzM4LDEzIEBACiAJYnJvd3NlciBhcmUgb3BlbmVkIGluIHRoZSBibGFtZSB2aWV3ZXIuCiAKIGNpdG9vbDo6Ci0JU3RhcnQgJ2dpdC1ndWknIGFuZCBhcnJhbmdlIHRvIG1ha2UgZXhhY3RseSBvbmUgY29tbWl0IGJlZm9yZQorCVN0YXJ0ICdnaXQgZ3VpJyBhbmQgYXJyYW5nZSB0byBtYWtlIGV4YWN0bHkgb25lIGNvbW1pdCBiZWZvcmUKIAlleGl0aW5nIGFuZCByZXR1cm5pbmcgdG8gdGhlIHNoZWxsLiAgVGhlIGludGVyZmFjZSBpcyBsaW1pdGVkCiAJdG8gb25seSBjb21taXQgYWN0aW9ucywgc2xpZ2h0bHkgcmVkdWNpbmcgdGhlIGFwcGxpY2F0aW9uJ3MKIAlzdGFydHVwIHRpbWUgYW5kIHNpbXBsaWZ5aW5nIHRoZSBtZW51YmFyLgogCiB2ZXJzaW9uOjoKLQlEaXNwbGF5IHRoZSBjdXJyZW50bHkgcnVubmluZyB2ZXJzaW9uIG9mICdnaXQtZ3VpJy4KKwlEaXNwbGF5IHRoZSBjdXJyZW50bHkgcnVubmluZyB2ZXJzaW9uIG9mICdnaXQgZ3VpJy4KIAogCiBFeGFtcGxlcwpAQCAtMTAzLDE1ICsxMDMsMTUgQEAKIGxpbmtnaXQ6Z2l0a1sxXTo6CiAJVGhlIGdpdCByZXBvc2l0b3J5IGJyb3dzZXIuICBTaG93cyBicmFuY2hlcywgY29tbWl0IGhpc3RvcnkKIAlhbmQgZmlsZSBkaWZmZXJlbmNlcy4gIGdpdGsgaXMgdGhlIHV0aWxpdHkgc3RhcnRlZCBieQotCSdnaXQtZ3VpJydzIFJlcG9zaXRvcnkgVmlzdWFsaXplIGFjdGlvbnMuCisJJ2dpdCBndWknJ3MgUmVwb3NpdG9yeSBWaXN1YWxpemUgYWN0aW9ucy4KIAogT3RoZXIKIC0tLS0tCi0nZ2l0LWd1aScgaXMgYWN0dWFsbHkgbWFpbnRhaW5lZCBhcyBhbiBpbmRlcGVuZGVudCBwcm9qZWN0LCBidXQgc3RhYmxlCisnZ2l0IGd1aScgaXMgYWN0dWFsbHkgbWFpbnRhaW5lZCBhcyBhbiBpbmRlcGVuZGVudCBwcm9qZWN0LCBidXQgc3RhYmxlCiB2ZXJzaW9ucyBhcmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiB0aGUgR2l0IHN1aXRlIGZvciB0aGUgY29udmVuaWVuY2UKIG9mIGVuZCB1c2Vycy4KIAotQSAnZ2l0LWd1aScgZGV2ZWxvcG1lbnQgcmVwb3NpdG9yeSBjYW4gYmUgb2J0YWluZWQgZnJvbToKK0EgJ2dpdCBndWknIGRldmVsb3BtZW50IHJlcG9zaXRvcnkgY2FuIGJlIG9idGFpbmVkIGZyb206CiAKICAgZ2l0IGNsb25lIGdpdDovL3JlcG8ub3IuY3ovZ2l0LWd1aS5naXQKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaGFzaC1vYmplY3QudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaGFzaC1vYmplY3QudHh0CmluZGV4IDBhZjQwY2YuLjQ3OWZjZTQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWhhc2gtb2JqZWN0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1oYXNoLW9iamVjdC50eHQKQEAgLTE4LDcgKzE4LDcgQEAKIHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoZSBuYW1lZCBmaWxlICh3aGljaCBjYW4gYmUgb3V0c2lkZSBvZiB0aGUKIHdvcmsgdHJlZSksIGFuZCBvcHRpb25hbGx5IHdyaXRlcyB0aGUgcmVzdWx0aW5nIG9iamVjdCBpbnRvIHRoZQogb2JqZWN0IGRhdGFiYXNlLiAgUmVwb3J0cyBpdHMgb2JqZWN0IElEIHRvIGl0cyBzdGFuZGFyZCBvdXRwdXQuCi1UaGlzIGlzIHVzZWQgYnkgJ2dpdC1jdnNpbXBvcnQnIHRvIHVwZGF0ZSB0aGUgaW5kZXgKK1RoaXMgaXMgdXNlZCBieSAnZ2l0IGN2c2ltcG9ydCcgdG8gdXBkYXRlIHRoZSBpbmRleAogd2l0aG91dCBtb2RpZnlpbmcgZmlsZXMgaW4gdGhlIHdvcmsgdHJlZS4gIFdoZW4gPHR5cGU+IGlzIG5vdAogc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byAiYmxvYiIuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWhlbHAudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaGVscC50eHQKaW5kZXggZDliOWMzNC4uZjhkZjEwOWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWhlbHAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWhlbHAudHh0CkBAIC01NSw4ICs1NSw4IEBACiArCiBUaGUgd2ViIGJyb3dzZXIgY2FuIGJlIHNwZWNpZmllZCB1c2luZyB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZQogJ2hlbHAuYnJvd3NlcicsIG9yICd3ZWIuYnJvd3NlcicgaWYgdGhlIGZvcm1lciBpcyBub3Qgc2V0LiBJZiBub25lIG9mCi10aGVzZSBjb25maWcgdmFyaWFibGVzIGlzIHNldCwgdGhlICdnaXQtd2ViLS1icm93c2UnIGhlbHBlciBzY3JpcHQKLShjYWxsZWQgYnkgJ2dpdC1oZWxwJykgd2lsbCBwaWNrIGEgc3VpdGFibGUgZGVmYXVsdC4gU2VlCit0aGVzZSBjb25maWcgdmFyaWFibGVzIGlzIHNldCwgdGhlICdnaXQgd2ViLS1icm93c2UnIGhlbHBlciBzY3JpcHQKKyhjYWxsZWQgYnkgJ2dpdCBoZWxwJykgd2lsbCBwaWNrIGEgc3VpdGFibGUgZGVmYXVsdC4gU2VlCiBsaW5rZ2l0OmdpdC13ZWItLWJyb3dzZVsxXSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzLgogCiBDT05GSUdVUkFUSU9OIFZBUklBQkxFUwpAQCAtNjcsNyArNjcsNyBAQAogCiBJZiBubyBjb21tYW5kIGxpbmUgb3B0aW9uIGlzIHBhc3NlZCwgdGhlICdoZWxwLmZvcm1hdCcgY29uZmlndXJhdGlvbgogdmFyaWFibGUgd2lsbCBiZSBjaGVja2VkLiBUaGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgc3VwcG9ydGVkIGZvciB0aGlzCi12YXJpYWJsZTsgdGhleSBtYWtlICdnaXQtaGVscCcgYmVoYXZlIGFzIHRoZWlyIGNvcnJlc3BvbmRpbmcgY29tbWFuZAordmFyaWFibGU7IHRoZXkgbWFrZSAnZ2l0IGhlbHAnIGJlaGF2ZSBhcyB0aGVpciBjb3JyZXNwb25kaW5nIGNvbW1hbmQKIGxpbmUgb3B0aW9uOgogCiAqICJtYW4iIGNvcnJlc3BvbmRzIHRvICctbXwtLW1hbicsCkBAIC0xMjIsNyArMTIyLDcgQEAKIFlvdSBjYW4gZXhwbGljaXRseSBwcm92aWRlIGEgZnVsbCBwYXRoIHRvIHlvdXIgcHJlZmVycmVkIG1hbiB2aWV3ZXIgYnkKIHNldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgJ21hbi48dG9vbD4ucGF0aCcuIEZvciBleGFtcGxlLCB5b3UKIGNhbiBjb25maWd1cmUgdGhlIGFic29sdXRlIHBhdGggdG8ga29ucXVlcm9yIGJ5IHNldHRpbmcKLSdtYW4ua29ucXVlcm9yLnBhdGgnLiBPdGhlcndpc2UsICdnaXQtaGVscCcgYXNzdW1lcyB0aGUgdG9vbCBpcworJ21hbi5rb25xdWVyb3IucGF0aCcuIE90aGVyd2lzZSwgJ2dpdCBoZWxwJyBhc3N1bWVzIHRoZSB0b29sIGlzCiBhdmFpbGFibGUgaW4gUEFUSC4KIAogbWFuLjx0b29sPi5jbWQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWh0dHAtYmFja2VuZC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1odHRwLWJhY2tlbmQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3N2Q5ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1odHRwLWJhY2tlbmQudHh0CkBAIC0wLDAgKzEsMTg4IEBACitnaXQtaHR0cC1iYWNrZW5kKDEpCis9PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1odHRwLWJhY2tlbmQgLSBTZXJ2ZXIgc2lkZSBpbXBsZW1lbnRhdGlvbiBvZiBHaXQgb3ZlciBIVFRQCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBodHRwLWJhY2tlbmQnCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorQSBzaW1wbGUgQ0dJIHByb2dyYW0gdG8gc2VydmUgdGhlIGNvbnRlbnRzIG9mIGEgR2l0IHJlcG9zaXRvcnkgdG8gR2l0CitjbGllbnRzIGFjY2Vzc2luZyB0aGUgcmVwb3NpdG9yeSBvdmVyIGh0dHA6Ly8gYW5kIGh0dHBzOi8vIHByb3RvY29scy4KK1RoZSBwcm9ncmFtIHN1cHBvcnRzIGNsaWVudHMgZmV0Y2hpbmcgdXNpbmcgYm90aCB0aGUgc21hcnQgSFRUUCBwcm90b2NvbAorYW5kIHRoZSBiYWNrd2FyZHMtY29tcGF0aWJsZSBkdW1iIEhUVFAgcHJvdG9jb2wsIGFzIHdlbGwgYXMgY2xpZW50cworcHVzaGluZyB1c2luZyB0aGUgc21hcnQgSFRUUCBwcm90b2NvbC4KKworSXQgdmVyaWZpZXMgdGhhdCB0aGUgZGlyZWN0b3J5IGhhcyB0aGUgbWFnaWMgZmlsZQorImdpdC1kYWVtb24tZXhwb3J0LW9rIiwgYW5kIGl0IHdpbGwgcmVmdXNlIHRvIGV4cG9ydCBhbnkgZ2l0IGRpcmVjdG9yeQordGhhdCBoYXNuJ3QgZXhwbGljaXRseSBiZWVuIG1hcmtlZCBmb3IgZXhwb3J0IHRoaXMgd2F5ICh1bmxlc3MgdGhlCitHSVRfSFRUUF9FWFBPUlRfQUxMIGVudmlyb25tZW50YWwgdmFyaWFibGUgaXMgc2V0KS4KKworQnkgZGVmYXVsdCwgb25seSB0aGUgYHVwbG9hZC1wYWNrYCBzZXJ2aWNlIGlzIGVuYWJsZWQsIHdoaWNoIHNlcnZlcworJ2dpdCBmZXRjaC1wYWNrJyBhbmQgJ2dpdCBscy1yZW1vdGUnIGNsaWVudHMsIHdoaWNoIGFyZSBpbnZva2VkIGZyb20KKydnaXQgZmV0Y2gnLCAnZ2l0IHB1bGwnLCBhbmQgJ2dpdCBjbG9uZScuICBJZiB0aGUgY2xpZW50IGlzIGF1dGhlbnRpY2F0ZWQsCit0aGUgYHJlY2VpdmUtcGFja2Agc2VydmljZSBpcyBlbmFibGVkLCB3aGljaCBzZXJ2ZXMgJ2dpdCBzZW5kLXBhY2snCitjbGllbnRzLCB3aGljaCBpcyBpbnZva2VkIGZyb20gJ2dpdCBwdXNoJy4KKworU0VSVklDRVMKKy0tLS0tLS0tCitUaGVzZSBzZXJ2aWNlcyBjYW4gYmUgZW5hYmxlZC9kaXNhYmxlZCB1c2luZyB0aGUgcGVyLXJlcG9zaXRvcnkKK2NvbmZpZ3VyYXRpb24gZmlsZToKKworaHR0cC5nZXRhbnlmaWxlOjoKKwlUaGlzIHNlcnZlcyBHaXQgY2xpZW50cyBvbGRlciB0aGFuIHZlcnNpb24gMS42LjYgdGhhdCBhcmUgdW5hYmxlIHRvIHVzZSB0aGUKKwl1cGxvYWQgcGFjayBzZXJ2aWNlLiAgV2hlbiBlbmFibGVkLCBjbGllbnRzIGFyZSBhYmxlIHRvIHJlYWQKKwlhbnkgZmlsZSB3aXRoaW4gdGhlIHJlcG9zaXRvcnksIGluY2x1ZGluZyBvYmplY3RzIHRoYXQgYXJlCisJbm8gbG9uZ2VyIHJlYWNoYWJsZSBmcm9tIGEgYnJhbmNoIGJ1dCBhcmUgc3RpbGwgcHJlc2VudC4KKwlJdCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBhIHJlcG9zaXRvcnkgY2FuIGRpc2FibGUgaXQKKwlieSBzZXR0aW5nIHRoaXMgY29uZmlndXJhdGlvbiBpdGVtIHRvIGBmYWxzZWAuCisKK2h0dHAudXBsb2FkcGFjazo6CisJVGhpcyBzZXJ2ZXMgJ2dpdCBmZXRjaC1wYWNrJyBhbmQgJ2dpdCBscy1yZW1vdGUnIGNsaWVudHMuCisJSXQgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgYSByZXBvc2l0b3J5IGNhbiBkaXNhYmxlIGl0CisJYnkgc2V0dGluZyB0aGlzIGNvbmZpZ3VyYXRpb24gaXRlbSB0byBgZmFsc2VgLgorCitodHRwLnJlY2VpdmVwYWNrOjoKKwlUaGlzIHNlcnZlcyAnZ2l0IHNlbmQtcGFjaycgY2xpZW50cywgYWxsb3dpbmcgcHVzaC4gIEl0IGlzCisJZGlzYWJsZWQgYnkgZGVmYXVsdCBmb3IgYW5vbnltb3VzIHVzZXJzLCBhbmQgZW5hYmxlZCBieQorCWRlZmF1bHQgZm9yIHVzZXJzIGF1dGhlbnRpY2F0ZWQgYnkgdGhlIHdlYiBzZXJ2ZXIuICBJdCBjYW4gYmUKKwlkaXNhYmxlZCBieSBzZXR0aW5nIHRoaXMgaXRlbSB0byBgZmFsc2VgLCBvciBlbmFibGVkIGZvciBhbGwKKwl1c2VycywgaW5jbHVkaW5nIGFub255bW91cyB1c2VycywgYnkgc2V0dGluZyBpdCB0byBgdHJ1ZWAuCisKK1VSTCBUUkFOU0xBVElPTgorLS0tLS0tLS0tLS0tLS0tCitUbyBkZXRlcm1pbmUgdGhlIGxvY2F0aW9uIG9mIHRoZSByZXBvc2l0b3J5IG9uIGRpc2ssICdnaXQgaHR0cC1iYWNrZW5kJworY29uY2F0ZW5hdGVzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgUEFUSF9JTkZPLCB3aGljaCBpcyBzZXQKK2F1dG9tYXRpY2FsbHkgYnkgdGhlIHdlYiBzZXJ2ZXIsIGFuZCBHSVRfUFJPSkVDVF9ST09ULCB3aGljaCBtdXN0IGJlIHNldAorbWFudWFsbHkgaW4gdGhlIHdlYiBzZXJ2ZXIgY29uZmlndXJhdGlvbi4gIElmIEdJVF9QUk9KRUNUX1JPT1QgaXMgbm90CitzZXQsICdnaXQgaHR0cC1iYWNrZW5kJyByZWFkcyBQQVRIX1RSQU5TTEFURUQsIHdoaWNoIGlzIGFsc28gc2V0CithdXRvbWF0aWNhbGx5IGJ5IHRoZSB3ZWIgc2VydmVyLgorCitFWEFNUExFUworLS0tLS0tLS0KK0FsbCBvZiB0aGUgZm9sbG93aW5nIGV4YW1wbGVzIG1hcCAnaHR0cDovLyRob3N0bmFtZS9naXQvZm9vL2Jhci5naXQnCit0byAnL3Zhci93d3cvZ2l0L2Zvby9iYXIuZ2l0Jy4KKworQXBhY2hlIDIueDo6CisJRW5zdXJlIG1vZF9jZ2ksIG1vZF9hbGlhcywgYW5kIG1vZF9lbnYgYXJlIGVuYWJsZWQsIHNldAorCUdJVF9QUk9KRUNUX1JPT1QgKG9yIERvY3VtZW50Um9vdCkgYXBwcm9wcmlhdGVseSwgYW5kCisJY3JlYXRlIGEgU2NyaXB0QWxpYXMgdG8gdGhlIENHSToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NldEVudiBHSVRfUFJPSkVDVF9ST09UIC92YXIvd3d3L2dpdAorU2V0RW52IEdJVF9IVFRQX0VYUE9SVF9BTEwKK1NjcmlwdEFsaWFzIC9naXQvIC91c3IvbGliZXhlYy9naXQtY29yZS9naXQtaHR0cC1iYWNrZW5kLworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworVG8gZW5hYmxlIGFub255bW91cyByZWFkIGFjY2VzcyBidXQgYXV0aGVudGljYXRlZCB3cml0ZSBhY2Nlc3MsCityZXF1aXJlIGF1dGhvcml6YXRpb24gd2l0aCBhIExvY2F0aW9uTWF0Y2ggZGlyZWN0aXZlOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPExvY2F0aW9uTWF0Y2ggIl4vZ2l0Ly4qL2dpdC1yZWNlaXZlLXBhY2skIj4KKwlBdXRoVHlwZSBCYXNpYworCUF1dGhOYW1lICJHaXQgQWNjZXNzIgorCVJlcXVpcmUgZ3JvdXAgY29tbWl0dGVycworCS4uLgorPC9Mb2NhdGlvbk1hdGNoPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworVG8gcmVxdWlyZSBhdXRoZW50aWNhdGlvbiBmb3IgYm90aCByZWFkcyBhbmQgd3JpdGVzLCB1c2UgYSBMb2NhdGlvbgorZGlyZWN0aXZlIGFyb3VuZCB0aGUgcmVwb3NpdG9yeSwgb3Igb25lIG9mIGl0cyBwYXJlbnQgZGlyZWN0b3JpZXM6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis8TG9jYXRpb24gL2dpdC9wcml2YXRlPgorCUF1dGhUeXBlIEJhc2ljCisJQXV0aE5hbWUgIlByaXZhdGUgR2l0IEFjY2VzcyIKKwlSZXF1aXJlIGdyb3VwIGNvbW1pdHRlcnMKKwkuLi4KKzwvTG9jYXRpb24+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUbyBzZXJ2ZSBnaXR3ZWIgYXQgdGhlIHNhbWUgdXJsLCB1c2UgYSBTY3JpcHRBbGlhc01hdGNoIHRvIG9ubHkKK3Rob3NlIFVSTHMgdGhhdCAnZ2l0IGh0dHAtYmFja2VuZCcgY2FuIGhhbmRsZSwgYW5kIGZvcndhcmQgdGhlCityZXN0IHRvIGdpdHdlYjoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NjcmlwdEFsaWFzTWF0Y2ggXAorCSIoP3gpXi9naXQvKC4qLyhIRUFEIHwgXAorCQkJaW5mby9yZWZzIHwgXAorCQkJb2JqZWN0cy8oaW5mby9bXi9dKyB8IFwKKwkJCQkgWzAtOWEtZl17Mn0vWzAtOWEtZl17Mzh9IHwgXAorCQkJCSBwYWNrL3BhY2stWzAtOWEtZl17NDB9XC4ocGFja3xpZHgpKSB8IFwKKwkJCWdpdC0odXBsb2FkfHJlY2VpdmUpLXBhY2spKSQiIFwKKwkvdXNyL2xpYmV4ZWMvZ2l0LWNvcmUvZ2l0LWh0dHAtYmFja2VuZC8kMQorCitTY3JpcHRBbGlhcyAvZ2l0LyAvdmFyL3d3dy9jZ2ktYmluL2dpdHdlYi5jZ2kvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FjY2VsZXJhdGVkIHN0YXRpYyBBcGFjaGUgMi54OjoKKwlTaW1pbGFyIHRvIHRoZSBhYm92ZSwgYnV0IEFwYWNoZSBjYW4gYmUgdXNlZCB0byByZXR1cm4gc3RhdGljCisJZmlsZXMgdGhhdCBhcmUgc3RvcmVkIG9uIGRpc2suCU9uIG1hbnkgc3lzdGVtcyB0aGlzIG1heQorCWJlIG1vcmUgZWZmaWNpZW50IGFzIEFwYWNoZSBjYW4gYXNrIHRoZSBrZXJuZWwgdG8gY29weSB0aGUKKwlmaWxlIGNvbnRlbnRzIGZyb20gdGhlIGZpbGUgc3lzdGVtIGRpcmVjdGx5IHRvIHRoZSBuZXR3b3JrOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU2V0RW52IEdJVF9QUk9KRUNUX1JPT1QgL3Zhci93d3cvZ2l0CisKK0FsaWFzTWF0Y2ggXi9naXQvKC4qL29iamVjdHMvWzAtOWEtZl17Mn0vWzAtOWEtZl17Mzh9KSQgICAgICAgICAgL3Zhci93d3cvZ2l0LyQxCitBbGlhc01hdGNoIF4vZ2l0LyguKi9vYmplY3RzL3BhY2svcGFjay1bMC05YS1mXXs0MH0uKHBhY2t8aWR4KSkkIC92YXIvd3d3L2dpdC8kMQorU2NyaXB0QWxpYXMgL2dpdC8gL3Vzci9saWJleGVjL2dpdC1jb3JlL2dpdC1odHRwLWJhY2tlbmQvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUaGlzIGNhbiBiZSBjb21iaW5lZCB3aXRoIHRoZSBnaXR3ZWIgY29uZmlndXJhdGlvbjoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NldEVudiBHSVRfUFJPSkVDVF9ST09UIC92YXIvd3d3L2dpdAorCitBbGlhc01hdGNoIF4vZ2l0LyguKi9vYmplY3RzL1swLTlhLWZdezJ9L1swLTlhLWZdezM4fSkkICAgICAgICAgIC92YXIvd3d3L2dpdC8kMQorQWxpYXNNYXRjaCBeL2dpdC8oLiovb2JqZWN0cy9wYWNrL3BhY2stWzAtOWEtZl17NDB9LihwYWNrfGlkeCkpJCAvdmFyL3d3dy9naXQvJDEKK1NjcmlwdEFsaWFzTWF0Y2ggXAorCSIoP3gpXi9naXQvKC4qLyhIRUFEIHwgXAorCQkJaW5mby9yZWZzIHwgXAorCQkJb2JqZWN0cy9pbmZvL1teL10rIHwgXAorCQkJZ2l0LSh1cGxvYWR8cmVjZWl2ZSktcGFjaykpJCIgXAorCS91c3IvbGliZXhlYy9naXQtY29yZS9naXQtaHR0cC1iYWNrZW5kLyQxCitTY3JpcHRBbGlhcyAvZ2l0LyAvdmFyL3d3dy9jZ2ktYmluL2dpdHdlYi5jZ2kvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworRU5WSVJPTk1FTlQKKy0tLS0tLS0tLS0tCisnZ2l0IGh0dHAtYmFja2VuZCcgcmVsaWVzIHVwb24gdGhlIENHSSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc2V0CitieSB0aGUgaW52b2tpbmcgd2ViIHNlcnZlciwgaW5jbHVkaW5nOgorCisqIFBBVEhfSU5GTyAoaWYgR0lUX1BST0pFQ1RfUk9PVCBpcyBzZXQsIG90aGVyd2lzZSBQQVRIX1RSQU5TTEFURUQpCisqIFJFTU9URV9VU0VSCisqIFJFTU9URV9BRERSCisqIENPTlRFTlRfVFlQRQorKiBRVUVSWV9TVFJJTkcKKyogUkVRVUVTVF9NRVRIT0QKKworVGhlIEdJVF9IVFRQX0VYUE9SVF9BTEwgZW52aXJvbm1lbnRhbCB2YXJpYWJsZSBtYXkgYmUgcGFzc2VkIHRvCisnZ2l0LWh0dHAtYmFja2VuZCcgdG8gYnlwYXNzIHRoZSBjaGVjayBmb3IgdGhlICJnaXQtZGFlbW9uLWV4cG9ydC1vayIKK2ZpbGUgaW4gZWFjaCByZXBvc2l0b3J5IGJlZm9yZSBhbGxvd2luZyBleHBvcnQgb2YgdGhhdCByZXBvc2l0b3J5LgorCitUaGUgYmFja2VuZCBwcm9jZXNzIHNldHMgR0lUX0NPTU1JVFRFUl9OQU1FIHRvICckUkVNT1RFX1VTRVInIGFuZAorR0lUX0NPTU1JVFRFUl9FTUFJTCB0byAnJFx7UkVNT1RFX1VTRVJ9QGh0dHAuJFx7UkVNT1RFX0FERFJcfScsCitlbnN1cmluZyB0aGF0IGFueSByZWZsb2dzIGNyZWF0ZWQgYnkgJ2dpdC1yZWNlaXZlLXBhY2snIGNvbnRhaW4gc29tZQoraWRlbnRpZnlpbmcgaW5mb3JtYXRpb24gb2YgdGhlIHJlbW90ZSB1c2VyIHdobyBwZXJmb3JtZWQgdGhlIHB1c2guCisKK0FsbCBDR0kgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBhdmFpbGFibGUgdG8gZWFjaCBvZiB0aGUgaG9va3MKK2ludm9rZWQgYnkgdGhlICdnaXQtcmVjZWl2ZS1wYWNrJy4KKworQXV0aG9yCistLS0tLS0KK1dyaXR0ZW4gYnkgU2hhd24gTy4gUGVhcmNlIDxzcGVhcmNlQHNwZWFyY2Uub3JnPi4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLS0KK0RvY3VtZW50YXRpb24gYnkgU2hhd24gTy4gUGVhcmNlIDxzcGVhcmNlQHNwZWFyY2Uub3JnPi4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1odHRwLWZldGNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWh0dHAtZmV0Y2gudHh0CmluZGV4IGU3Yzc5NjEuLmQ5MWNiN2YgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWh0dHAtZmV0Y2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWh0dHAtZmV0Y2gudHh0CkBAIC0zNSw3ICszNSw3IEBACiAKIC0tc3RkaW46OgogCUluc3RlYWQgb2YgYSBjb21taXQgaWQgb24gdGhlIGNvbW1hbmQgbGluZSAod2hpY2ggaXMgbm90IGV4cGVjdGVkIGluIHRoaXMKLQljYXNlKSwgJ2dpdC1odHRwLWZldGNoJyBleHBlY3RzIGxpbmVzIG9uIHN0ZGluIGluIHRoZSBmb3JtYXQKKwljYXNlKSwgJ2dpdCBodHRwLWZldGNoJyBleHBlY3RzIGxpbmVzIG9uIHN0ZGluIGluIHRoZSBmb3JtYXQKIAogCQk8Y29tbWl0LWlkPlsnXHQnPGZpbGVuYW1lLWFzLWluLS13Pl0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaHR0cC1wdXNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWh0dHAtcHVzaC50eHQKaW5kZXggYWVmMzgzZS4uZGRmN2ExOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtaHR0cC1wdXNoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1odHRwLXB1c2gudHh0CkBAIC04MiwxMSArODIsMTEgQEAKIAogV2l0aG91dCAnLS1mb3JjZScsIHRoZSA8c3JjPiByZWYgaXMgc3RvcmVkIGF0IHRoZSByZW1vdGUgb25seSBpZgogPGRzdD4gZG9lcyBub3QgZXhpc3QsIG9yIDxkc3Q+IGlzIGEgcHJvcGVyIHN1YnNldCAoaS5lLiBhbgotYW5jZXN0b3IpIG9mIDxzcmM+LiAgVGhpcyBjaGVjaywga25vd24gYXMgImZhc3QgZm9yd2FyZCBjaGVjayIsCithbmNlc3Rvcikgb2YgPHNyYz4uICBUaGlzIGNoZWNrLCBrbm93biBhcyAiZmFzdC1mb3J3YXJkIGNoZWNrIiwKIGlzIHBlcmZvcm1lZCBpbiBvcmRlciB0byBhdm9pZCBhY2NpZGVudGFsbHkgb3ZlcndyaXRpbmcgdGhlCiByZW1vdGUgcmVmIGFuZCBsb3NlIG90aGVyIHBlb3BsZXMnIGNvbW1pdHMgZnJvbSB0aGVyZS4KIAotV2l0aCAnLS1mb3JjZScsIHRoZSBmYXN0IGZvcndhcmQgY2hlY2sgaXMgZGlzYWJsZWQgZm9yIGFsbCByZWZzLgorV2l0aCAnLS1mb3JjZScsIHRoZSBmYXN0LWZvcndhcmQgY2hlY2sgaXMgZGlzYWJsZWQgZm9yIGFsbCByZWZzLgogCiBPcHRpb25hbGx5LCBhIDxyZWY+IHBhcmFtZXRlciBjYW4gYmUgcHJlZml4ZWQgd2l0aCBhIHBsdXMgJysnIHNpZ24KIHRvIGRpc2FibGUgdGhlIGZhc3QtZm9yd2FyZCBjaGVjayBvbmx5IG9uIHRoYXQgcmVmLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaW1hcC1zZW5kLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWltYXAtc2VuZC50eHQKaW5kZXggZDAxNmRhZi4uNTdkYjk1NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtaW1hcC1zZW5kLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1pbWFwLXNlbmQudHh0CkBAIC0xMyw3ICsxMyw3IEBACiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQotVGhpcyBjb21tYW5kIHVwbG9hZHMgYSBtYWlsYm94IGdlbmVyYXRlZCB3aXRoICdnaXQtZm9ybWF0LXBhdGNoJworVGhpcyBjb21tYW5kIHVwbG9hZHMgYSBtYWlsYm94IGdlbmVyYXRlZCB3aXRoICdnaXQgZm9ybWF0LXBhdGNoJwogaW50byBhbiBJTUFQIGRyYWZ0cyBmb2xkZXIuICBUaGlzIGFsbG93cyBwYXRjaGVzIHRvIGJlIHNlbnQgYXMKIG90aGVyIGVtYWlsIGlzIHdoZW4gdXNpbmcgbWFpbCBjbGllbnRzIHRoYXQgY2Fubm90IHJlYWQgbWFpbGJveAogZmlsZXMgZGlyZWN0bHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1pbmRleC1wYWNrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWluZGV4LXBhY2sudHh0CmluZGV4IDRiNWM3NDMuLmYzY2NjNzIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWluZGV4LXBhY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWluZGV4LXBhY2sudHh0CkBAIC00MywyMyArNDMsMTkgQEAKIAlhIGRlZmF1bHQgbmFtZSBkZXRlcm1pbmVkIGZyb20gdGhlIHBhY2sgY29udGVudC4gIElmCiAJPHBhY2stZmlsZT4gaXMgbm90IHNwZWNpZmllZCBjb25zaWRlciB1c2luZyAtLWtlZXAgdG8KIAlwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiB0aGlzIHByb2Nlc3MgYW5kCi0JJ2dpdC1yZXBhY2snLgorCSdnaXQgcmVwYWNrJy4KIAogLS1maXgtdGhpbjo6Ci0JSXQgaXMgcG9zc2libGUgZm9yICdnaXQtcGFjay1vYmplY3RzJyB0byBidWlsZAotCSJ0aGluIiBwYWNrLCB3aGljaCByZWNvcmRzIG9iamVjdHMgaW4gZGVsdGlmaWVkIGZvcm0gYmFzZWQgb24KLQlvYmplY3RzIG5vdCBpbmNsdWRlZCBpbiB0aGUgcGFjayB0byByZWR1Y2UgbmV0d29yayB0cmFmZmljLgotCVRob3NlIG9iamVjdHMgYXJlIGV4cGVjdGVkIHRvIGJlIHByZXNlbnQgb24gdGhlIHJlY2VpdmluZyBlbmQKLQlhbmQgdGhleSBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBwYWNrIGZvciB0aGF0IHBhY2sgdG8gYmUgc2VsZgotCWNvbnRhaW5lZCBhbmQgaW5kZXhhYmxlLiBXaXRob3V0IHRoaXMgb3B0aW9uIGFueSBhdHRlbXB0IHRvCi0JaW5kZXggYSB0aGluIHBhY2sgd2lsbCBmYWlsLiBUaGlzIG9wdGlvbiBvbmx5IG1ha2VzIHNlbnNlIGluCi0JY29uanVuY3Rpb24gd2l0aCAtLXN0ZGluLgorCUZpeCBhICJ0aGluIiBwYWNrIHByb2R1Y2VkIGJ5IGBnaXQgcGFjay1vYmplY3RzIC0tdGhpbmAgKHNlZQorCWxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXSBmb3IgZGV0YWlscykgYnkgYWRkaW5nIHRoZQorCWV4Y2x1ZGVkIG9iamVjdHMgdGhlIGRlbHRpZmllZCBvYmplY3RzIGFyZSBiYXNlZCBvbiB0byB0aGUKKwlwYWNrLiBUaGlzIG9wdGlvbiBvbmx5IG1ha2VzIHNlbnNlIGluIGNvbmp1bmN0aW9uIHdpdGggLS1zdGRpbi4KIAogLS1rZWVwOjoKIAlCZWZvcmUgbW92aW5nIHRoZSBpbmRleCBpbnRvIGl0cyBmaW5hbCBkZXN0aW5hdGlvbgogCWNyZWF0ZSBhbiBlbXB0eSAua2VlcCBmaWxlIGZvciB0aGUgYXNzb2NpYXRlZCBwYWNrIGZpbGUuCiAJVGhpcyBvcHRpb24gaXMgdXN1YWxseSBuZWNlc3Nhcnkgd2l0aCAtLXN0ZGluIHRvIHByZXZlbnQgYQotCXNpbXVsdGFuZW91cyAnZ2l0LXJlcGFjaycgcHJvY2VzcyBmcm9tIGRlbGV0aW5nCisJc2ltdWx0YW5lb3VzICdnaXQgcmVwYWNrJyBwcm9jZXNzIGZyb20gZGVsZXRpbmcKIAl0aGUgbmV3bHkgY29uc3RydWN0ZWQgcGFjayBhbmQgaW5kZXggYmVmb3JlIHJlZnMgY2FuIGJlCiAJdXBkYXRlZCB0byB1c2Ugb2JqZWN0cyBjb250YWluZWQgaW4gdGhlIHBhY2suCiAKQEAgLTg2LDcgKzgyLDcgQEAKIGFuZCB0aGUgU0hBMSBoYXNoIG9mIHRoYXQgbGlzdCBpcyBwcmludGVkIHRvIHN0ZG91dC4gSWYgLS1zdGRpbiB3YXMKIGFsc28gdXNlZCB0aGVuIHRoaXMgaXMgcHJlZml4ZWQgYnkgZWl0aGVyICJwYWNrXHQiLCBvciAia2VlcFx0IiBpZiBhCiBuZXcgLmtlZXAgZmlsZSB3YXMgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQuIFRoaXMgaXMgdXNlZnVsIHRvIHJlbW92ZSBhCi0ua2VlcCBmaWxlIHVzZWQgYXMgYSBsb2NrIHRvIHByZXZlbnQgdGhlIHJhY2Ugd2l0aCAnZ2l0LXJlcGFjaycKKy5rZWVwIGZpbGUgdXNlZCBhcyBhIGxvY2sgdG8gcHJldmVudCB0aGUgcmFjZSB3aXRoICdnaXQgcmVwYWNrJwogbWVudGlvbmVkIGFib3ZlLgogCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWluaXQtZGIudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaW5pdC1kYi50eHQKaW5kZXggMWZkMGZmMi4uZWJhM2NiNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtaW5pdC1kYi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtaW5pdC1kYi50eHQKQEAgLTgsNyArOCw3IEBACiAKIFNZTk9QU0lTCiAtLS0tLS0tLQotJ2dpdCBpbml0LWRiJyBbLXEgfCAtLXF1aWV0XSBbLS10ZW1wbGF0ZT08dGVtcGxhdGVfZGlyZWN0b3J5Pl0gWy0tc2hhcmVkWz08cGVybWlzc2lvbnM+XV0KKydnaXQgaW5pdC1kYicgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9PHRlbXBsYXRlX2RpcmVjdG9yeT5dIFstLXNoYXJlZFs9PHBlcm1pc3Npb25zPl1dCiAKIAogREVTQ1JJUFRJT04KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWluaXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaW5pdC50eHQKaW5kZXggNzE1MWQxMi4uN2VlMTAyZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtaW5pdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtaW5pdC50eHQKQEAgLTgsNyArOCw3IEBACiAKIFNZTk9QU0lTCiAtLS0tLS0tLQotJ2dpdCBpbml0JyBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08dGVtcGxhdGVfZGlyZWN0b3J5Pl0gWy0tc2hhcmVkWz08cGVybWlzc2lvbnM+XV0KKydnaXQgaW5pdCcgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9PHRlbXBsYXRlX2RpcmVjdG9yeT5dIFstLXNoYXJlZFs9PHBlcm1pc3Npb25zPl1dIFtkaXJlY3RvcnldCiAKIAogT1BUSU9OUwpAQCAtNzQsNiArNzQsOSBAQAogaW4gc2hhcmVkIHJlcG9zaXRvcmllcywgc28gdGhhdCB5b3UgY2Fubm90IGZvcmNlIGEgbm9uIGZhc3QtZm9yd2FyZGluZyBwdXNoCiBpbnRvIGl0LgogCitJZiB5b3UgbmFtZSBhIChwb3NzaWJseSBub24tZXhpc3RlbnQpIGRpcmVjdG9yeSBhdCB0aGUgZW5kIG9mIHRoZSBjb21tYW5kCitsaW5lLCB0aGUgY29tbWFuZCBpcyBydW4gaW5zaWRlIHRoZSBkaXJlY3RvcnkgKHBvc3NpYmx5IGFmdGVyIGNyZWF0aW5nIGl0KS4KKwogLS0KIAogCkBAIC05MiwxMSArOTUsMTEgQEAKIGVudmlyb25tZW50IHZhcmlhYmxlIHRoZW4gdGhlIHNoYTEgZGlyZWN0b3JpZXMgYXJlIGNyZWF0ZWQgdW5kZXJuZWF0aCAtCiBvdGhlcndpc2UgdGhlIGRlZmF1bHQgYCRHSVRfRElSL29iamVjdHNgIGRpcmVjdG9yeSBpcyB1c2VkLgogCi1SdW5uaW5nICdnaXQtaW5pdCcgaW4gYW4gZXhpc3RpbmcgcmVwb3NpdG9yeSBpcyBzYWZlLiBJdCB3aWxsIG5vdCBvdmVyd3JpdGUKLXRoaW5ncyB0aGF0IGFyZSBhbHJlYWR5IHRoZXJlLiBUaGUgcHJpbWFyeSByZWFzb24gZm9yIHJlcnVubmluZyAnZ2l0LWluaXQnCitSdW5uaW5nICdnaXQgaW5pdCcgaW4gYW4gZXhpc3RpbmcgcmVwb3NpdG9yeSBpcyBzYWZlLiBJdCB3aWxsIG5vdCBvdmVyd3JpdGUKK3RoaW5ncyB0aGF0IGFyZSBhbHJlYWR5IHRoZXJlLiBUaGUgcHJpbWFyeSByZWFzb24gZm9yIHJlcnVubmluZyAnZ2l0IGluaXQnCiBpcyB0byBwaWNrIHVwIG5ld2x5IGFkZGVkIHRlbXBsYXRlcy4KIAotTm90ZSB0aGF0ICdnaXQtaW5pdCcgaXMgdGhlIHNhbWUgYXMgJ2dpdC1pbml0LWRiJy4gIFRoZSBjb21tYW5kCitOb3RlIHRoYXQgJ2dpdCBpbml0JyBpcyB0aGUgc2FtZSBhcyAnZ2l0IGluaXQtZGInLiAgVGhlIGNvbW1hbmQKIHdhcyBwcmltYXJpbHkgbWVhbnQgdG8gaW5pdGlhbGl6ZSB0aGUgb2JqZWN0IGRhdGFiYXNlLCBidXQgb3ZlcgogdGltZSBpdCBoYXMgYmVjb21lIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBvdGhlciBhc3BlY3RzCiBvZiB0aGUgcmVwb3NpdG9yeSwgc3VjaCBhcyBpbnN0YWxsaW5nIHRoZSBkZWZhdWx0IGhvb2tzIGFuZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaW5zdGF3ZWIudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaW5zdGF3ZWIudHh0CmluZGV4IDIyZGEyMWEuLmExZjE3ZGYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWluc3Rhd2ViLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1pbnN0YXdlYi50eHQKQEAgLTI5LDcgKzI5LDcgQEAKIAlUaGUgSFRUUCBkYWVtb24gY29tbWFuZC1saW5lIHRoYXQgd2lsbCBiZSBleGVjdXRlZC4KIAlDb21tYW5kLWxpbmUgb3B0aW9ucyBtYXkgYmUgc3BlY2lmaWVkIGhlcmUsIGFuZCB0aGUKIAljb25maWd1cmF0aW9uIGZpbGUgd2lsbCBiZSBhZGRlZCBhdCB0aGUgZW5kIG9mIHRoZSBjb21tYW5kLWxpbmUuCi0JQ3VycmVudGx5IGxpZ2h0dHBkLCBhcGFjaGUyIGFuZCB3ZWJyaWNrIGFyZSBzdXBwb3J0ZWQuCisJQ3VycmVudGx5IGFwYWNoZTIsIGxpZ2h0dHBkLCBtb25nb29zZSBhbmQgd2VicmljayBhcmUgc3VwcG9ydGVkLgogCShEZWZhdWx0OiBsaWdodHRwZCkKIAogLW06OgpAQCAtNDQsNyArNDQsNyBAQAogLWI6OgogLS1icm93c2VyOjoKIAlUaGUgd2ViIGJyb3dzZXIgdGhhdCBzaG91bGQgYmUgdXNlZCB0byB2aWV3IHRoZSBnaXR3ZWIKLQlwYWdlLiBUaGlzIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSAnZ2l0LXdlYi0tYnJvd3NlJyBoZWxwZXIKKwlwYWdlLiBUaGlzIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSAnZ2l0IHdlYi0tYnJvd3NlJyBoZWxwZXIKIAlzY3JpcHQgYWxvbmcgd2l0aCB0aGUgVVJMIG9mIHRoZSBnaXR3ZWIgaW5zdGFuY2UuIFNlZQogCWxpbmtnaXQ6Z2l0LXdlYi0tYnJvd3NlWzFdIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMuIElmCiAJdGhlIHNjcmlwdCBmYWlscywgdGhlIFVSTCB3aWxsIGJlIHByaW50ZWQgdG8gc3Rkb3V0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbG9nLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWxvZy50eHQKaW5kZXggMzRjZjRlNS4uMGUzOWJiNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbG9nLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1sb2cudHh0CkBAIC0xNCw5ICsxNCw5IEBACiAtLS0tLS0tLS0tLQogU2hvd3MgdGhlIGNvbW1pdCBsb2dzLgogCi1UaGUgY29tbWFuZCB0YWtlcyBvcHRpb25zIGFwcGxpY2FibGUgdG8gdGhlICdnaXQtcmV2LWxpc3QnCitUaGUgY29tbWFuZCB0YWtlcyBvcHRpb25zIGFwcGxpY2FibGUgdG8gdGhlICdnaXQgcmV2LWxpc3QnCiBjb21tYW5kIHRvIGNvbnRyb2wgd2hhdCBpcyBzaG93biBhbmQgaG93LCBhbmQgb3B0aW9ucyBhcHBsaWNhYmxlIHRvCi10aGUgJ2dpdC1kaWZmLSonIGNvbW1hbmRzIHRvIGNvbnRyb2wgaG93IHRoZSBjaGFuZ2VzCit0aGUgJ2dpdCBkaWZmLSonIGNvbW1hbmRzIHRvIGNvbnRyb2wgaG93IHRoZSBjaGFuZ2VzCiBlYWNoIGNvbW1pdCBpbnRyb2R1Y2VzIGFyZSBzaG93bi4KIAogCkBAIC0zNyw4ICszNywxMiBAQAogCWFuZCA8dW50aWw+LCBzZWUgIlNQRUNJRllJTkcgUkVWSVNJT05TIiBzZWN0aW9uIGluCiAJbGlua2dpdDpnaXQtcmV2LXBhcnNlWzFdLgogCi0tLWRlY29yYXRlOjoKLQlQcmludCBvdXQgdGhlIHJlZiBuYW1lcyBvZiBhbnkgY29tbWl0cyB0aGF0IGFyZSBzaG93bi4KKy0tZGVjb3JhdGVbPXNob3J0fGZ1bGxdOjoKKwlQcmludCBvdXQgdGhlIHJlZiBuYW1lcyBvZiBhbnkgY29tbWl0cyB0aGF0IGFyZSBzaG93bi4gSWYgJ3Nob3J0JyBpcworCXNwZWNpZmllZCwgdGhlIHJlZiBuYW1lIHByZWZpeGVzICdyZWZzL2hlYWRzLycsICdyZWZzL3RhZ3MvJyBhbmQKKwkncmVmcy9yZW1vdGVzLycgd2lsbCBub3QgYmUgcHJpbnRlZC4gSWYgJ2Z1bGwnIGlzIHNwZWNpZmllZCwgdGhlCisJZnVsbCByZWYgbmFtZSAoaW5jbHVkaW5nIHByZWZpeCkgd2lsbCBiZSBwcmludGVkLiBUaGUgZGVmYXVsdCBvcHRpb24KKwlpcyAnc2hvcnQnLgogCiAtLXNvdXJjZTo6CiAJUHJpbnQgb3V0IHRoZSByZWYgbmFtZSBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lIGJ5IHdoaWNoIGVhY2gKQEAgLTEwMyw2ICsxMDcsMTcgQEAKIAl0aG9zZSBjb21taXRzIHRoYXQgb2NjdXJyZWQgYmVmb3JlIHRoZSBmaWxlIHdhcyBnaXZlbiBpdHMKIAlwcmVzZW50IG5hbWUuCiAKK2dpdCBsb2cgLS1icmFuY2hlcyAtLW5vdCAtLXJlbW90ZXM9b3JpZ2luOjoKKworCVNob3dzIGFsbCBjb21taXRzIHRoYXQgYXJlIGluIGFueSBvZiBsb2NhbCBicmFuY2hlcyBidXQgbm90IGluCisJYW55IG9mIHJlbW90ZSB0cmFja2luZyBicmFuY2hlcyBmb3IgJ29yaWdpbicgKHdoYXQgeW91IGhhdmUgdGhhdAorCW9yaWdpbiBkb2Vzbid0KS4KKworZ2l0IGxvZyBtYXN0ZXIgLS1ub3QgLS1yZW1vdGVzPSovbWFzdGVyOjoKKworCVNob3dzIGFsbCBjb21taXRzIHRoYXQgYXJlIGluIGxvY2FsIG1hc3RlciBidXQgbm90IGluIGFueSByZW1vdGUKKwlyZXBvc2l0b3J5IG1hc3RlciBicmFuY2hlcy4KKwogRGlzY3Vzc2lvbgogLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1scy1maWxlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1scy1maWxlcy50eHQKaW5kZXggMDU3YTAyMS4uMzUyMTYzNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbHMtZmlsZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWxzLWZpbGVzLnR4dApAQCAtNDQsMTIgKzQ0LDE0IEBACiAKIC1vOjoKIC0tb3RoZXJzOjoKLQlTaG93IG90aGVyIGZpbGVzIGluIHRoZSBvdXRwdXQKKwlTaG93IG90aGVyIChpLmUuIHVudHJhY2tlZCkgZmlsZXMgaW4gdGhlIG91dHB1dAogCiAtaTo6CiAtLWlnbm9yZWQ6OgotCVNob3cgaWdub3JlZCBmaWxlcyBpbiB0aGUgb3V0cHV0LgotCU5vdGUgdGhhdCB0aGlzIGFsc28gcmV2ZXJzZXMgYW55IGV4Y2x1ZGUgbGlzdCBwcmVzZW50LgorCVNob3cgb25seSBpZ25vcmVkIGZpbGVzIGluIHRoZSBvdXRwdXQuIFdoZW4gc2hvd2luZyBmaWxlcyBpbiB0aGUKKwlpbmRleCwgcHJpbnQgb25seSB0aG9zZSBtYXRjaGVkIGJ5IGFuIGV4Y2x1ZGUgcGF0dGVybi4gV2hlbgorCXNob3dpbmcgIm90aGVyIiBmaWxlcywgc2hvdyBvbmx5IHRob3NlIG1hdGNoZWQgYnkgYW4gZXhjbHVkZQorCXBhdHRlcm4uCiAKIC1zOjoKIC0tc3RhZ2U6OgpAQCAtMTA3LDYgKzEwOSw3IEBACiAJSWRlbnRpZnkgdGhlIGZpbGUgc3RhdHVzIHdpdGggdGhlIGZvbGxvd2luZyB0YWdzIChmb2xsb3dlZCBieQogCWEgc3BhY2UpIGF0IHRoZSBzdGFydCBvZiBlYWNoIGxpbmU6CiAJSDo6CWNhY2hlZAorCVM6Oglza2lwLXdvcmt0cmVlCiAJTTo6CXVubWVyZ2VkCiAJUjo6CXJlbW92ZWQvZGVsZXRlZAogCUM6Ogltb2RpZmllZC9jaGFuZ2VkCkBAIC0xMzgsMTIgKzE0MSwxMiBAQAogCiBPdXRwdXQKIC0tLS0tLQotc2hvdyBmaWxlcyBqdXN0IG91dHB1dHMgdGhlIGZpbGVuYW1lIHVubGVzcyAnLS1zdGFnZScgaXMgc3BlY2lmaWVkIGluCisnZ2l0IGxzLWZpbGVzJyBqdXN0IG91dHB1dHMgdGhlIGZpbGVuYW1lcyB1bmxlc3MgJy0tc3RhZ2UnIGlzIHNwZWNpZmllZCBpbgogd2hpY2ggY2FzZSBpdCBvdXRwdXRzOgogCiAgICAgICAgIFs8dGFnPiBdPG1vZGU+IDxvYmplY3Q+IDxzdGFnZT4gPGZpbGU+CiAKLSdnaXQtbHMtZmlsZXMgLS11bm1lcmdlZCcgYW5kICdnaXQtbHMtZmlsZXMgLS1zdGFnZScgY2FuIGJlIHVzZWQgdG8gZXhhbWluZQorJ2dpdCBscy1maWxlcyAtLXVubWVyZ2VkJyBhbmQgJ2dpdCBscy1maWxlcyAtLXN0YWdlJyBjYW4gYmUgdXNlZCB0byBleGFtaW5lCiBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB1bm1lcmdlZCBwYXRocy4KIAogRm9yIGFuIHVubWVyZ2VkIHBhdGgsIGluc3RlYWQgb2YgcmVjb3JkaW5nIGEgc2luZ2xlIG1vZGUvU0hBMSBwYWlyLApAQCAtMTYwLDcgKzE2Myw3IEBACiBFeGNsdWRlIFBhdHRlcm5zCiAtLS0tLS0tLS0tLS0tLS0tCiAKLSdnaXQtbHMtZmlsZXMnIGNhbiB1c2UgYSBsaXN0IG9mICJleGNsdWRlIHBhdHRlcm5zIiB3aGVuCisnZ2l0IGxzLWZpbGVzJyBjYW4gdXNlIGEgbGlzdCBvZiAiZXhjbHVkZSBwYXR0ZXJucyIgd2hlbgogdHJhdmVyc2luZyB0aGUgZGlyZWN0b3J5IHRyZWUgYW5kIGZpbmRpbmcgZmlsZXMgdG8gc2hvdyB3aGVuIHRoZQogZmxhZ3MgLS1vdGhlcnMgb3IgLS1pZ25vcmVkIGFyZSBzcGVjaWZpZWQuICBsaW5rZ2l0OmdpdGlnbm9yZVs1XQogc3BlY2lmaWVzIHRoZSBmb3JtYXQgb2YgZXhjbHVkZSBwYXR0ZXJucy4KQEAgLTE3Niw3ICsxNzksNyBAQAogICAgICBpbiB0aGUgc2FtZSBvcmRlciB0aGV5IGFwcGVhciBpbiB0aGUgZmlsZS4KIAogICAzLiBjb21tYW5kIGxpbmUgZmxhZyAtLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08bmFtZT4gc3BlY2lmaWVzCi0gICAgIGEgbmFtZSBvZiB0aGUgZmlsZSBpbiBlYWNoIGRpcmVjdG9yeSAnZ2l0LWxzLWZpbGVzJworICAgICBhIG5hbWUgb2YgdGhlIGZpbGUgaW4gZWFjaCBkaXJlY3RvcnkgJ2dpdCBscy1maWxlcycKICAgICAgZXhhbWluZXMsIG5vcm1hbGx5IGAuZ2l0aWdub3JlYC4gIEZpbGVzIGluIGRlZXBlcgogICAgICBkaXJlY3RvcmllcyB0YWtlIHByZWNlZGVuY2UuICBQYXR0ZXJucyBhcmUgb3JkZXJlZCBpbiB0aGUKICAgICAgc2FtZSBvcmRlciB0aGV5IGFwcGVhciBpbiB0aGUgZmlsZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1scy10cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0CmluZGV4IGMzZmRjY2IuLjFmODlkMzYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0CkBAIC0yOCw3ICsyOCw3IEBACiAgICBpbiBhIGRpcmVjdG9yeSAnc3ViJyB0aGF0IGhhcyBhIGRpcmVjdG9yeSAnZGlyJywgeW91IGNhbiBydW4gJ2dpdAogICAgbHMtdHJlZSAtciBIRUFEIGRpcicgdG8gbGlzdCB0aGUgY29udGVudHMgb2YgdGhlIHRyZWUgKHRoYXQgaXMKICAgICdzdWIvZGlyJyBpbiAnSEVBRCcpLiAgWW91IGRvbid0IHdhbnQgdG8gZ2l2ZSBhIHRyZWUgdGhhdCBpcyBub3QgYXQgdGhlCi0gICByb290IGxldmVsIChlLmcuICdnaXQgbHMtdHJlZSAtciBIRUFEOnN1YiBkaXInKSBpbiB0aGlzIGNhc2UsIGFzIHRoYXQKKyAgIHJvb3QgbGV2ZWwgKGUuZy4gYGdpdCBscy10cmVlIC1yIEhFQUQ6c3ViIGRpcmApIGluIHRoaXMgY2FzZSwgYXMgdGhhdAogICAgd291bGQgcmVzdWx0IGluIGFza2luZyBmb3IgJ3N1Yi9zdWIvZGlyJyBpbiB0aGUgJ0hFQUQnIGNvbW1pdC4KICAgIEhvd2V2ZXIsIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGNhbiBiZSBpZ25vcmVkIGJ5IHBhc3NpbmcKICAgIC0tZnVsbC10cmVlIG9wdGlvbi4KQEAgLTg0LDcgKzg0LDcgQEAKIAogVW5sZXNzIHRoZSBgLXpgIG9wdGlvbiBpcyB1c2VkLCBUQUIsIExGLCBhbmQgYmFja3NsYXNoIGNoYXJhY3RlcnMKIGluIHBhdGhuYW1lcyBhcmUgcmVwcmVzZW50ZWQgYXMgYFx0YCwgYFxuYCwgYW5kIGBcXGAsIHJlc3BlY3RpdmVseS4KLVRoaXMgb3V0cHV0IGZvcm1hdCBpcyBjb21wYXRpYmxlIHdpdGggd2hhdCAnLS1pbmRleC1pbmZvIC0tc3RkaW4nIG9mCitUaGlzIG91dHB1dCBmb3JtYXQgaXMgY29tcGF0aWJsZSB3aXRoIHdoYXQgYC0taW5kZXgtaW5mbyAtLXN0ZGluYCBvZgogJ2dpdCB1cGRhdGUtaW5kZXgnIGV4cGVjdHMuCiAKIFdoZW4gdGhlIGAtbGAgb3B0aW9uIGlzIHVzZWQsIGZvcm1hdCBjaGFuZ2VzIHRvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1tYWlsaW5mby50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tYWlsaW5mby50eHQKaW5kZXggOGQ5NWFhYS4uZTNkNThjYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbWFpbGluZm8udHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW1haWxpbmZvLnR4dApAQCAtOCw3ICs4LDcgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0IG1haWxpbmZvJyBbLWtdIFstdSB8IC0tZW5jb2Rpbmc9PGVuY29kaW5nPiB8IC1uXSA8bXNnPiA8cGF0Y2g+CisnZ2l0IG1haWxpbmZvJyBbLWt8LWJdIFstdSB8IC0tZW5jb2Rpbmc9PGVuY29kaW5nPiB8IC1uXSBbLS1zY2lzc29yc10gPG1zZz4gPHBhdGNoPgogCiAKIERFU0NSSVBUSU9OCkBAIC0xNiw3ICsxNiw3IEBACiBSZWFkcyBhIHNpbmdsZSBlLW1haWwgbWVzc2FnZSBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwgYW5kCiB3cml0ZXMgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSBpbiA8bXNnPiBmaWxlLCBhbmQgdGhlIHBhdGNoZXMgaW4KIDxwYXRjaD4gZmlsZS4gIFRoZSBhdXRob3IgbmFtZSwgZS1tYWlsIGFuZCBlLW1haWwgc3ViamVjdCBhcmUKLXdyaXR0ZW4gb3V0IHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQgdG8gYmUgdXNlZCBieSAnZ2l0LWFtJword3JpdHRlbiBvdXQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dCB0byBiZSB1c2VkIGJ5ICdnaXQgYW0nCiB0byBjcmVhdGUgYSBjb21taXQuICBJdCBpcyB1c3VhbGx5IG5vdCBuZWNlc3NhcnkgdG8gdXNlIHRoaXMKIGNvbW1hbmQgZGlyZWN0bHkuICBTZWUgbGlua2dpdDpnaXQtYW1bMV0gaW5zdGVhZC4KIApAQCAtMzAsNyArMzAsMTIgQEAKIAl3aGl0ZXNwYWNlcywgKDMpICdbJyB1cCB0byAnXScsIHR5cGljYWxseSAnW1BBVENIXScsIGFuZAogCXRoZW4gcHJlcGVuZHMgIltQQVRDSF0gIi4gIFRoaXMgZmxhZyBmb3JiaWRzIHRoaXMKIAltdW5naW5nLCBhbmQgaXMgbW9zdCB1c2VmdWwgd2hlbiB1c2VkIHRvIHJlYWQgYmFjawotCSdnaXQtZm9ybWF0LXBhdGNoIC1rJyBvdXRwdXQuCisJJ2dpdCBmb3JtYXQtcGF0Y2ggLWsnIG91dHB1dC4KKworLWI6OgorCVdoZW4gLWsgaXMgbm90IGluIGVmZmVjdCwgYWxsIGxlYWRpbmcgc3RyaW5ncyBicmFja2V0ZWQgd2l0aCAnWycKKwlhbmQgJ10nIHBhaXJzIGFyZSBzdHJpcHBlZC4gIFRoaXMgb3B0aW9uIGxpbWl0cyB0aGUgc3RyaXBwaW5nIHRvCisJb25seSB0aGUgcGFpcnMgd2hvc2UgYnJhY2tldGVkIHN0cmluZyBjb250YWlucyB0aGUgd29yZCAiUEFUQ0giLgogCiAtdTo6CiAJVGhlIGNvbW1pdCBsb2cgbWVzc2FnZSwgYXV0aG9yIG5hbWUgYW5kIGF1dGhvciBlbWFpbCBhcmUKQEAgLTQ5LDYgKzU0LDI1IEBACiAtbjo6CiAJRGlzYWJsZSBhbGwgY2hhcnNldCByZS1jb2Rpbmcgb2YgdGhlIG1ldGFkYXRhLgogCistLXNjaXNzb3JzOjoKKwlSZW1vdmUgZXZlcnl0aGluZyBpbiBib2R5IGJlZm9yZSBhIHNjaXNzb3JzIGxpbmUuICBBIGxpbmUgdGhhdAorCW1haW5seSBjb25zaXN0cyBvZiBzY2lzc29ycyAoZWl0aGVyICI+OCIgb3IgIjg8IikgYW5kIHBlcmZvcmF0aW9uCisJKGRhc2ggIi0iKSBtYXJrcyBpcyBjYWxsZWQgYSBzY2lzc29ycyBsaW5lLCBhbmQgaXMgdXNlZCB0byByZXF1ZXN0CisJdGhlIHJlYWRlciB0byBjdXQgdGhlIG1lc3NhZ2UgYXQgdGhhdCBsaW5lLiAgSWYgc3VjaCBhIGxpbmUKKwlhcHBlYXJzIGluIHRoZSBib2R5IG9mIHRoZSBtZXNzYWdlIGJlZm9yZSB0aGUgcGF0Y2gsIGV2ZXJ5dGhpbmcKKwliZWZvcmUgaXQgKGluY2x1ZGluZyB0aGUgc2Npc3NvcnMgbGluZSBpdHNlbGYpIGlzIGlnbm9yZWQgd2hlbgorCXRoaXMgb3B0aW9uIGlzIHVzZWQuCisrCitUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBiZWdpbiB5b3VyIG1lc3NhZ2UgaW4gYSBkaXNjdXNzaW9uIHRocmVhZAord2l0aCBjb21tZW50cyBhbmQgc3VnZ2VzdGlvbnMgb24gdGhlIG1lc3NhZ2UgeW91IGFyZSByZXNwb25kaW5nIHRvLCBhbmQgdG8KK2NvbmNsdWRlIGl0IHdpdGggYSBwYXRjaCBzdWJtaXNzaW9uLCBzZXBhcmF0aW5nIHRoZSBkaXNjdXNzaW9uIGFuZCB0aGUKK2JlZ2lubmluZyBvZiB0aGUgcHJvcG9zZWQgY29tbWl0IGxvZyBtZXNzYWdlIHdpdGggYSBzY2lzc29ycyBsaW5lLgorKworVGhpcyBjYW4gZW5hYmxlZCBieSBkZWZhdWx0IHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG1haWxpbmZvLnNjaXNzb3JzLgorCistLW5vLXNjaXNzb3JzOjoKKwlJZ25vcmUgc2Npc3NvcnMgbGluZXMuIFVzZWZ1bCBmb3Igb3ZlcnJpZGluZyBtYWlsaW5mby5zY2lzc29ycyBzZXR0aW5ncy4KKwogPG1zZz46OgogCVRoZSBjb21taXQgbG9nIG1lc3NhZ2UgZXh0cmFjdGVkIGZyb20gZS1tYWlsLCB1c3VhbGx5CiAJZXhjZXB0IHRoZSB0aXRsZSBsaW5lIHdoaWNoIGNvbWVzIGZyb20gZS1tYWlsIFN1YmplY3QuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1iYXNlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWJhc2UudHh0CmluZGV4IDc2NzQ4NmMuLmNlNWIzNjkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWJhc2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWJhc2UudHh0CkBAIC04LDEyICs4LDEyIEBACiAKIFNZTk9QU0lTCiAtLS0tLS0tLQotJ2dpdCBtZXJnZS1iYXNlJyBbLS1hbGxdIDxjb21taXQ+IDxjb21taXQ+Li4uCisnZ2l0IG1lcmdlLWJhc2UnIFstYXwtLWFsbF0gPGNvbW1pdD4gPGNvbW1pdD4uLi4KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCiAKLSdnaXQtbWVyZ2UtYmFzZScgZmluZHMgYmVzdCBjb21tb24gYW5jZXN0b3IocykgYmV0d2VlbiB0d28gY29tbWl0cyB0byB1c2UKKydnaXQgbWVyZ2UtYmFzZScgZmluZHMgYmVzdCBjb21tb24gYW5jZXN0b3IocykgYmV0d2VlbiB0d28gY29tbWl0cyB0byB1c2UKIGluIGEgdGhyZWUtd2F5IG1lcmdlLiAgT25lIGNvbW1vbiBhbmNlc3RvciBpcyAnYmV0dGVyJyB0aGFuIGFub3RoZXIgY29tbW9uCiBhbmNlc3RvciBpZiB0aGUgbGF0dGVyIGlzIGFuIGFuY2VzdG9yIG9mIHRoZSBmb3JtZXIuICBBIGNvbW1vbiBhbmNlc3RvcgogdGhhdCBkb2VzIG5vdCBoYXZlIGFueSBiZXR0ZXIgY29tbW9uIGFuY2VzdG9yIGlzIGEgJ2Jlc3QgY29tbW9uCkBAIC0yNyw4ICsyNywxMyBAQAogdHdvIGNvbW1pdHMgb24gdGhlIGNvbW1hbmQgbGluZSBtZWFucyBjb21wdXRpbmcgdGhlIG1lcmdlIGJhc2UgYmV0d2VlbgogdGhlIGdpdmVuIHR3byBjb21taXRzLgogCitBcyBhIGNvbnNlcXVlbmNlLCB0aGUgJ21lcmdlIGJhc2UnIGlzIG5vdCBuZWNlc3NhcmlseSBjb250YWluZWQgaW4gZWFjaCBvZiB0aGUKK2NvbW1pdCBhcmd1bWVudHMgaWYgbW9yZSB0aGFuIHR3byBjb21taXRzIGFyZSBzcGVjaWZpZWQuIFRoaXMgaXMgZGlmZmVyZW50Citmcm9tIGxpbmtnaXQ6Z2l0LXNob3ctYnJhbmNoWzFdIHdoZW4gdXNlZCB3aXRoIHRoZSBgLS1tZXJnZS1iYXNlYCBvcHRpb24uCisKIE9QVElPTlMKIC0tLS0tLS0KKy1hOjoKIC0tYWxsOjoKIAlPdXRwdXQgYWxsIG1lcmdlIGJhc2VzIGZvciB0aGUgY29tbWl0cywgaW5zdGVhZCBvZiBqdXN0IG9uZS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtZmlsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1maWxlLnR4dAppbmRleCAzMDM1MzczLi4yMzQyNjlhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1maWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1maWxlLnR4dApAQCAtMTAsMjAgKzEwLDIxIEBACiAtLS0tLS0tLQogW3ZlcnNlXQogJ2dpdCBtZXJnZS1maWxlJyBbLUwgPGN1cnJlbnQtbmFtZT4gWy1MIDxiYXNlLW5hbWU+IFstTCA8b3RoZXItbmFtZT5dXV0KLQlbLXB8LS1zdGRvdXRdIFstcXwtLXF1aWV0XSA8Y3VycmVudC1maWxlPiA8YmFzZS1maWxlPiA8b3RoZXItZmlsZT4KKwlbLS1vdXJzfC0tdGhlaXJzXSBbLXB8LS1zdGRvdXRdIFstcXwtLXF1aWV0XQorCTxjdXJyZW50LWZpbGU+IDxiYXNlLWZpbGU+IDxvdGhlci1maWxlPgogCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQotJ2dpdC1tZXJnZS1maWxlJyBpbmNvcnBvcmF0ZXMgYWxsIGNoYW5nZXMgdGhhdCBsZWFkIGZyb20gdGhlIGA8YmFzZS1maWxlPmAKKydnaXQgbWVyZ2UtZmlsZScgaW5jb3Jwb3JhdGVzIGFsbCBjaGFuZ2VzIHRoYXQgbGVhZCBmcm9tIHRoZSBgPGJhc2UtZmlsZT5gCiB0byBgPG90aGVyLWZpbGU+YCBpbnRvIGA8Y3VycmVudC1maWxlPmAuIFRoZSByZXN1bHQgb3JkaW5hcmlseSBnb2VzIGludG8KLWA8Y3VycmVudC1maWxlPmAuICdnaXQtbWVyZ2UtZmlsZScgaXMgdXNlZnVsIGZvciBjb21iaW5pbmcgc2VwYXJhdGUgY2hhbmdlcworYDxjdXJyZW50LWZpbGU+YC4gJ2dpdCBtZXJnZS1maWxlJyBpcyB1c2VmdWwgZm9yIGNvbWJpbmluZyBzZXBhcmF0ZSBjaGFuZ2VzCiB0byBhbiBvcmlnaW5hbC4gU3VwcG9zZSBgPGJhc2UtZmlsZT5gIGlzIHRoZSBvcmlnaW5hbCwgYW5kIGJvdGgKIGA8Y3VycmVudC1maWxlPmAgYW5kIGA8b3RoZXItZmlsZT5gIGFyZSBtb2RpZmljYXRpb25zIG9mIGA8YmFzZS1maWxlPmAsCi10aGVuICdnaXQtbWVyZ2UtZmlsZScgY29tYmluZXMgYm90aCBjaGFuZ2VzLgordGhlbiAnZ2l0IG1lcmdlLWZpbGUnIGNvbWJpbmVzIGJvdGggY2hhbmdlcy4KIAogQSBjb25mbGljdCBvY2N1cnMgaWYgYm90aCBgPGN1cnJlbnQtZmlsZT5gIGFuZCBgPG90aGVyLWZpbGU+YCBoYXZlIGNoYW5nZXMKLWluIGEgY29tbW9uIHNlZ21lbnQgb2YgbGluZXMuIElmIGEgY29uZmxpY3QgaXMgZm91bmQsICdnaXQtbWVyZ2UtZmlsZScKK2luIGEgY29tbW9uIHNlZ21lbnQgb2YgbGluZXMuIElmIGEgY29uZmxpY3QgaXMgZm91bmQsICdnaXQgbWVyZ2UtZmlsZScKIG5vcm1hbGx5IG91dHB1dHMgYSB3YXJuaW5nIGFuZCBicmFja2V0cyB0aGUgY29uZmxpY3Qgd2l0aCBsaW5lcyBjb250YWluaW5nCiA8PDw8PDw8IGFuZCA+Pj4+Pj4+IG1hcmtlcnMuIEEgdHlwaWNhbCBjb25mbGljdCB3aWxsIGxvb2sgbGlrZSB0aGlzOgogCkBAIC0zNCwxMiArMzUsMTQgQEAKIAk+Pj4+Pj4+IEIKIAogSWYgdGhlcmUgYXJlIGNvbmZsaWN0cywgdGhlIHVzZXIgc2hvdWxkIGVkaXQgdGhlIHJlc3VsdCBhbmQgZGVsZXRlIG9uZSBvZgotdGhlIGFsdGVybmF0aXZlcy4KK3RoZSBhbHRlcm5hdGl2ZXMuICBXaGVuIGAtLW91cnNgIG9yIGAtLXRoZWlyc2Agb3B0aW9uIGlzIGluIGVmZmVjdCwgaG93ZXZlciwKK3RoZXNlIGNvbmZsaWN0cyBhcmUgcmVzb2x2ZWQgZmF2b3VyaW5nIGxpbmVzIGZyb20gYDxjdXJyZW50LWZpbGU+YCBvcgorbGluZXMgZnJvbSBgPG90aGVyLWZpbGU+YCByZXNwZWN0aXZlbHkuCiAKIFRoZSBleGl0IHZhbHVlIG9mIHRoaXMgcHJvZ3JhbSBpcyBuZWdhdGl2ZSBvbiBlcnJvciwgYW5kIHRoZSBudW1iZXIgb2YKIGNvbmZsaWN0cyBvdGhlcndpc2UuIElmIHRoZSBtZXJnZSB3YXMgY2xlYW4sIHRoZSBleGl0IHZhbHVlIGlzIDAuCiAKLSdnaXQtbWVyZ2UtZmlsZScgaXMgZGVzaWduZWQgdG8gYmUgYSBtaW5pbWFsIGNsb25lIG9mIFJDUyAnbWVyZ2UnOyB0aGF0IGlzLCBpdAorJ2dpdCBtZXJnZS1maWxlJyBpcyBkZXNpZ25lZCB0byBiZSBhIG1pbmltYWwgY2xvbmUgb2YgUkNTICdtZXJnZSc7IHRoYXQgaXMsIGl0CiBpbXBsZW1lbnRzIGFsbCBvZiBSQ1MgJ21lcmdlJydzIGZ1bmN0aW9uYWxpdHkgd2hpY2ggaXMgbmVlZGVkIGJ5CiBsaW5rZ2l0OmdpdFsxXS4KIApAQCAtNjIsNiArNjUsMTEgQEAKIC1xOjoKIAlRdWlldDsgZG8gbm90IHdhcm4gYWJvdXQgY29uZmxpY3RzLgogCistLW91cnM6OgorLS10aGVpcnM6OgorCUluc3RlYWQgb2YgbGVhdmluZyBjb25mbGljdHMgaW4gdGhlIGZpbGUsIHJlc29sdmUgY29uZmxpY3RzCisJZmF2b3VyaW5nIG91ciAob3IgdGhlaXIpIHNpZGUgb2YgdGhlIGxpbmVzLgorCiAKIEVYQU1QTEVTCiAtLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtaW5kZXgudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtaW5kZXgudHh0CmluZGV4IDEyM2U2ZDAuLjRkMjY2ZGUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWluZGV4LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1pbmRleC50eHQKQEAgLTM2LDE0ICszNiwxNCBAQAogCWZhaWx1cmUgdXN1YWxseSBpbmRpY2F0ZXMgY29uZmxpY3RzIGR1cmluZyB0aGUgbWVyZ2UpLiBUaGlzIGlzIGZvcgogCXBvcmNlbGFpbnMgd2hpY2ggbWlnaHQgd2FudCB0byBlbWl0IGN1c3RvbSBtZXNzYWdlcy4KIAotSWYgJ2dpdC1tZXJnZS1pbmRleCcgaXMgY2FsbGVkIHdpdGggbXVsdGlwbGUgPGZpbGU+cyAob3IgLWEpIHRoZW4gaXQKK0lmICdnaXQgbWVyZ2UtaW5kZXgnIGlzIGNhbGxlZCB3aXRoIG11bHRpcGxlIDxmaWxlPnMgKG9yIC1hKSB0aGVuIGl0CiBwcm9jZXNzZXMgdGhlbSBpbiB0dXJuIG9ubHkgc3RvcHBpbmcgaWYgbWVyZ2UgcmV0dXJucyBhIG5vbi16ZXJvIGV4aXQKIGNvZGUuCiAKIFR5cGljYWxseSB0aGlzIGlzIHJ1biB3aXRoIGEgc2NyaXB0IGNhbGxpbmcgZ2l0J3MgaW1pdGF0aW9uIG9mCiB0aGUgJ21lcmdlJyBjb21tYW5kIGZyb20gdGhlIFJDUyBwYWNrYWdlLgogCi1BIHNhbXBsZSBzY3JpcHQgY2FsbGVkICdnaXQtbWVyZ2Utb25lLWZpbGUnIGlzIGluY2x1ZGVkIGluIHRoZQorQSBzYW1wbGUgc2NyaXB0IGNhbGxlZCAnZ2l0IG1lcmdlLW9uZS1maWxlJyBpcyBpbmNsdWRlZCBpbiB0aGUKIGRpc3RyaWJ1dGlvbi4KIAogQUxFUlQgQUxFUlQgQUxFUlQhIFRoZSBnaXQgIm1lcmdlIG9iamVjdCBvcmRlciIgaXMgZGlmZmVyZW50IGZyb20gdGhlCkBAIC02OCwxMCArNjgsMTAgQEAKICAgVGhpcyBpcyBhZGRlZCBBQSBpbiB0aGUgYnJhbmNoIEIuCiAgIGZhdGFsOiBtZXJnZSBwcm9ncmFtIGZhaWxlZAogCi13aGVyZSB0aGUgbGF0dGVyIGV4YW1wbGUgc2hvd3MgaG93ICdnaXQtbWVyZ2UtaW5kZXgnIHdpbGwgc3RvcCB0cnlpbmcgdG8KK3doZXJlIHRoZSBsYXR0ZXIgZXhhbXBsZSBzaG93cyBob3cgJ2dpdCBtZXJnZS1pbmRleCcgd2lsbCBzdG9wIHRyeWluZyB0bwogbWVyZ2Ugb25jZSBhbnl0aGluZyBoYXMgcmV0dXJuZWQgYW4gZXJyb3IgKGkuZS4sIGBjYXRgIHJldHVybmVkIGFuIGVycm9yCiBmb3IgdGhlIEFBIGZpbGUsIGJlY2F1c2UgaXQgZGlkbid0IGV4aXN0IGluIHRoZSBvcmlnaW5hbCwgYW5kIHRodXMKLSdnaXQtbWVyZ2UtaW5kZXgnIGRpZG4ndCBldmVuIHRyeSB0byBtZXJnZSB0aGUgTU0gdGhpbmcpLgorJ2dpdCBtZXJnZS1pbmRleCcgZGlkbid0IGV2ZW4gdHJ5IHRvIG1lcmdlIHRoZSBNTSB0aGluZykuCiAKIEF1dGhvcgogLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1vbmUtZmlsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1vbmUtZmlsZS50eHQKaW5kZXggZGM4YTk2YS4uYTE2M2NmYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2Utb25lLWZpbGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLW9uZS1maWxlLnR4dApAQCAtOCwxMiArOCwxMiBAQAogCiBTWU5PUFNJUwogLS0tLS0tLS0KLSdnaXQtbWVyZ2Utb25lLWZpbGUnCisnZ2l0IG1lcmdlLW9uZS1maWxlJwogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KLVRoaXMgaXMgdGhlIHN0YW5kYXJkIGhlbHBlciBwcm9ncmFtIHRvIHVzZSB3aXRoICdnaXQtbWVyZ2UtaW5kZXgnCi10byByZXNvbHZlIGEgbWVyZ2UgYWZ0ZXIgdGhlIHRyaXZpYWwgbWVyZ2UgZG9uZSB3aXRoICdnaXQtcmVhZC10cmVlIC1tJy4KK1RoaXMgaXMgdGhlIHN0YW5kYXJkIGhlbHBlciBwcm9ncmFtIHRvIHVzZSB3aXRoICdnaXQgbWVyZ2UtaW5kZXgnCit0byByZXNvbHZlIGEgbWVyZ2UgYWZ0ZXIgdGhlIHRyaXZpYWwgbWVyZ2UgZG9uZSB3aXRoICdnaXQgcmVhZC10cmVlIC1tJy4KIAogQXV0aG9yCiAtLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLnR4dAppbmRleCBhZjY4ZDY5Li45Yzk2MThjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UudHh0CkBAIC0xMCwxNyArMTAsNDUgQEAKIC0tLS0tLS0tCiBbdmVyc2VdCiAnZ2l0IG1lcmdlJyBbLW5dIFstLXN0YXRdIFstLW5vLWNvbW1pdF0gWy0tc3F1YXNoXSBbLXMgPHN0cmF0ZWd5Pl0uLi4KLQlbLW0gPG1zZz5dIDxyZW1vdGU+Li4uCi0nZ2l0IG1lcmdlJyA8bXNnPiBIRUFEIDxyZW1vdGU+Li4uCisJWy0tW25vLV1yZXJlcmUtYXV0b3VwZGF0ZV0gWy1tIDxtc2c+XSA8Y29tbWl0Pi4uLgorJ2dpdCBtZXJnZScgPG1zZz4gSEVBRCA8Y29tbWl0Pi4uLgogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KLVRoaXMgaXMgdGhlIHRvcC1sZXZlbCBpbnRlcmZhY2UgdG8gdGhlIG1lcmdlIG1hY2hpbmVyeQotd2hpY2ggZHJpdmVzIG11bHRpcGxlIG1lcmdlIHN0cmF0ZWd5IHNjcmlwdHMuCitJbmNvcnBvcmF0ZXMgY2hhbmdlcyBmcm9tIHRoZSBuYW1lZCBjb21taXRzIChzaW5jZSB0aGUgdGltZSB0aGVpcgoraGlzdG9yaWVzIGRpdmVyZ2VkIGZyb20gdGhlIGN1cnJlbnQgYnJhbmNoKSBpbnRvIHRoZSBjdXJyZW50CiticmFuY2guICBUaGlzIGNvbW1hbmQgaXMgdXNlZCBieSAnZ2l0IHB1bGwnIHRvIGluY29ycG9yYXRlIGNoYW5nZXMKK2Zyb20gYW5vdGhlciByZXBvc2l0b3J5IGFuZCBjYW4gYmUgdXNlZCBieSBoYW5kIHRvIG1lcmdlIGNoYW5nZXMKK2Zyb20gb25lIGJyYW5jaCBpbnRvIGFub3RoZXIuCiAKLVRoZSBzZWNvbmQgc3ludGF4ICg8bXNnPiBgSEVBRGAgPHJlbW90ZT4pIGlzIHN1cHBvcnRlZCBmb3IKK0Fzc3VtZSB0aGUgZm9sbG93aW5nIGhpc3RvcnkgZXhpc3RzIGFuZCB0aGUgY3VycmVudCBicmFuY2ggaXMKKyJgbWFzdGVyYCI6CisKKy0tLS0tLS0tLS0tLQorCSAgQS0tLUItLS1DIHRvcGljCisJIC8KKyAgICBELS0tRS0tLUYtLS1HIG1hc3RlcgorLS0tLS0tLS0tLS0tCisKK1RoZW4gImBnaXQgbWVyZ2UgdG9waWNgIiB3aWxsIHJlcGxheSB0aGUgY2hhbmdlcyBtYWRlIG9uIHRoZQorYHRvcGljYCBicmFuY2ggc2luY2UgaXQgZGl2ZXJnZWQgZnJvbSBgbWFzdGVyYCAoaS5lLiwgYEVgKSB1bnRpbAoraXRzIGN1cnJlbnQgY29tbWl0IChgQ2ApIG9uIHRvcCBvZiBgbWFzdGVyYCwgYW5kIHJlY29yZCB0aGUgcmVzdWx0CitpbiBhIG5ldyBjb21taXQgYWxvbmcgd2l0aCB0aGUgbmFtZXMgb2YgdGhlIHR3byBwYXJlbnQgY29tbWl0cyBhbmQKK2EgbG9nIG1lc3NhZ2UgZnJvbSB0aGUgdXNlciBkZXNjcmliaW5nIHRoZSBjaGFuZ2VzLgorCistLS0tLS0tLS0tLS0KKwkgIEEtLS1CLS0tQyB0b3BpYworCSAvICAgICAgICAgXAorICAgIEQtLS1FLS0tRi0tLUctLS1IIG1hc3RlcgorLS0tLS0tLS0tLS0tCisKK1RoZSBzZWNvbmQgc3ludGF4ICg8bXNnPiBgSEVBRGAgPGNvbW1pdD4uLi4pIGlzIHN1cHBvcnRlZCBmb3IKIGhpc3RvcmljYWwgcmVhc29ucy4gIERvIG5vdCB1c2UgaXQgZnJvbSB0aGUgY29tbWFuZCBsaW5lIG9yIGluCi1uZXcgc2NyaXB0cy4gIEl0IGlzIHRoZSBzYW1lIGFzIGBnaXQgbWVyZ2UgLW0gPG1zZz4gPHJlbW90ZT5gLgorbmV3IHNjcmlwdHMuICBJdCBpcyB0aGUgc2FtZSBhcyBgZ2l0IG1lcmdlIC1tIDxtc2c+IDxjb21taXQ+Li4uYC4KKworKldhcm5pbmcqOiBSdW5uaW5nICdnaXQgbWVyZ2UnIHdpdGggdW5jb21taXR0ZWQgY2hhbmdlcyBpcworZGlzY291cmFnZWQ6IHdoaWxlIHBvc3NpYmxlLCBpdCBsZWF2ZXMgeW91IGluIGEgc3RhdGUgdGhhdCBpcyBoYXJkIHRvCitiYWNrIG91dCBvZiBpbiB0aGUgY2FzZSBvZiBhIGNvbmZsaWN0LgogCiAKIE9QVElPTlMKQEAgLTI4LDk3ICs1Niw4OCBAQAogaW5jbHVkZTo6bWVyZ2Utb3B0aW9ucy50eHRbXQogCiAtbSA8bXNnPjo6Ci0JVGhlIGNvbW1pdCBtZXNzYWdlIHRvIGJlIHVzZWQgZm9yIHRoZSBtZXJnZSBjb21taXQgKGluIGNhc2UKLQlpdCBpcyBjcmVhdGVkKS4gVGhlICdnaXQtZm10LW1lcmdlLW1zZycgc2NyaXB0IGNhbiBiZSB1c2VkCi0JdG8gZ2l2ZSBhIGdvb2QgZGVmYXVsdCBmb3IgYXV0b21hdGVkICdnaXQtbWVyZ2UnIGludm9jYXRpb25zLgorCVNldCB0aGUgY29tbWl0IG1lc3NhZ2UgdG8gYmUgdXNlZCBmb3IgdGhlIG1lcmdlIGNvbW1pdCAoaW4KKwljYXNlIG9uZSBpcyBjcmVhdGVkKS4gVGhlICdnaXQgZm10LW1lcmdlLW1zZycgY29tbWFuZCBjYW4gYmUKKwl1c2VkIHRvIGdpdmUgYSBnb29kIGRlZmF1bHQgZm9yIGF1dG9tYXRlZCAnZ2l0IG1lcmdlJworCWludm9jYXRpb25zLgogCi08cmVtb3RlPi4uLjo6Ci0JT3RoZXIgYnJhbmNoIGhlYWRzIHRvIG1lcmdlIGludG8gb3VyIGJyYW5jaC4gIFlvdSBuZWVkIGF0Ci0JbGVhc3Qgb25lIDxyZW1vdGU+LiAgU3BlY2lmeWluZyBtb3JlIHRoYW4gb25lIDxyZW1vdGU+Ci0Jb2J2aW91c2x5IG1lYW5zIHlvdSBhcmUgdHJ5aW5nIGFuIE9jdG9wdXMuCistLXJlcmVyZS1hdXRvdXBkYXRlOjoKKy0tbm8tcmVyZXJlLWF1dG91cGRhdGU6OgorCUFsbG93IHRoZSByZXJlcmUgbWVjaGFuaXNtIHRvIHVwZGF0ZSB0aGUgaW5kZXggd2l0aCB0aGUKKwlyZXN1bHQgb2YgYXV0by1jb25mbGljdCByZXNvbHV0aW9uIGlmIHBvc3NpYmxlLgogCi1pbmNsdWRlOjptZXJnZS1zdHJhdGVnaWVzLnR4dFtdCis8Y29tbWl0Pi4uLjo6CisJQ29tbWl0cywgdXN1YWxseSBvdGhlciBicmFuY2ggaGVhZHMsIHRvIG1lcmdlIGludG8gb3VyIGJyYW5jaC4KKwlZb3UgbmVlZCBhdCBsZWFzdCBvbmUgPGNvbW1pdD4uICBTcGVjaWZ5aW5nIG1vcmUgdGhhbiBvbmUKKwk8Y29tbWl0PiBvYnZpb3VzbHkgbWVhbnMgeW91IGFyZSB0cnlpbmcgYW4gT2N0b3B1cy4KIAogCi1JZiB5b3UgdHJpZWQgYSBtZXJnZSB3aGljaCByZXN1bHRlZCBpbiBjb21wbGV4IGNvbmZsaWN0cyBhbmQKLXdhbnQgdG8gc3RhcnQgb3ZlciwgeW91IGNhbiByZWNvdmVyIHdpdGggJ2dpdC1yZXNldCcuCitQUkUtTUVSR0UgQ0hFQ0tTCistLS0tLS0tLS0tLS0tLS0tCiAKLUNPTkZJR1VSQVRJT04KLS0tLS0tLS0tLS0tLS0KLWluY2x1ZGU6Om1lcmdlLWNvbmZpZy50eHRbXQorQmVmb3JlIGFwcGx5aW5nIG91dHNpZGUgY2hhbmdlcywgeW91IHNob3VsZCBnZXQgeW91ciBvd24gd29yayBpbgorZ29vZCBzaGFwZSBhbmQgY29tbWl0dGVkIGxvY2FsbHksIHNvIGl0IHdpbGwgbm90IGJlIGNsb2JiZXJlZCBpZgordGhlcmUgYXJlIGNvbmZsaWN0cy4gIFNlZSBhbHNvIGxpbmtnaXQ6Z2l0LXN0YXNoWzFdLgorJ2dpdCBwdWxsJyBhbmQgJ2dpdCBtZXJnZScgd2lsbCBzdG9wIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcgd2hlbgorbG9jYWwgdW5jb21taXR0ZWQgY2hhbmdlcyBvdmVybGFwIHdpdGggZmlsZXMgdGhhdCAnZ2l0IHB1bGwnLydnaXQKK21lcmdlJyBtYXkgbmVlZCB0byB1cGRhdGUuCiAKLWJyYW5jaC48bmFtZT4ubWVyZ2VvcHRpb25zOjoKLQlTZXRzIGRlZmF1bHQgb3B0aW9ucyBmb3IgbWVyZ2luZyBpbnRvIGJyYW5jaCA8bmFtZT4uIFRoZSBzeW50YXggYW5kCi0Jc3VwcG9ydGVkIG9wdGlvbnMgYXJlIGVxdWFsIHRvIHRoYXQgb2YgJ2dpdC1tZXJnZScsIGJ1dCBvcHRpb24gdmFsdWVzCi0JY29udGFpbmluZyB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYXJlIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLgorVG8gYXZvaWQgcmVjb3JkaW5nIHVucmVsYXRlZCBjaGFuZ2VzIGluIHRoZSBtZXJnZSBjb21taXQsCisnZ2l0IHB1bGwnIGFuZCAnZ2l0IG1lcmdlJyB3aWxsIGFsc28gYWJvcnQgaWYgdGhlcmUgYXJlIGFueSBjaGFuZ2VzCityZWdpc3RlcmVkIGluIHRoZSBpbmRleCByZWxhdGl2ZSB0byB0aGUgYEhFQURgIGNvbW1pdC4gIChPbmUKK2V4Y2VwdGlvbiBpcyB3aGVuIHRoZSBjaGFuZ2VkIGluZGV4IGVudHJpZXMgYXJlIGluIHRoZSBzdGF0ZSB0aGF0Cit3b3VsZCByZXN1bHQgZnJvbSB0aGUgbWVyZ2UgYWxyZWFkeS4pCiAKLUhPVyBNRVJHRSBXT1JLUwotLS0tLS0tLS0tLS0tLS0tCitJZiBhbGwgbmFtZWQgY29tbWl0cyBhcmUgYWxyZWFkeSBhbmNlc3RvcnMgb2YgYEhFQURgLCAnZ2l0IG1lcmdlJword2lsbCBleGl0IGVhcmx5IHdpdGggdGhlIG1lc3NhZ2UgIkFscmVhZHkgdXAtdG8tZGF0ZS4iCiAKLUEgbWVyZ2UgaXMgYWx3YXlzIGJldHdlZW4gdGhlIGN1cnJlbnQgYEhFQURgIGFuZCBvbmUgb3IgbW9yZQotY29tbWl0cyAodXN1YWxseSwgYnJhbmNoIGhlYWQgb3IgdGFnKSwgYW5kIHRoZSBpbmRleCBmaWxlIG11c3QKLW1hdGNoIHRoZSB0cmVlIG9mIGBIRUFEYCBjb21taXQgKGkuZS4gdGhlIGNvbnRlbnRzIG9mIHRoZSBsYXN0IGNvbW1pdCkKLXdoZW4gaXQgc3RhcnRzIG91dC4gIEluIG90aGVyIHdvcmRzLCBgZ2l0IGRpZmYgLS1jYWNoZWQgSEVBRGAgbXVzdAotcmVwb3J0IG5vIGNoYW5nZXMuICAoT25lIGV4Y2VwdGlvbiBpcyB3aGVuIHRoZSBjaGFuZ2VkIGluZGV4Ci1lbnRyaWVzIGFyZSBhbHJlYWR5IGluIHRoZSBzYW1lIHN0YXRlIHRoYXQgd291bGQgcmVzdWx0IGZyb20KLXRoZSBtZXJnZSBhbnl3YXkuKQorRkFTVC1GT1JXQVJEIE1FUkdFCistLS0tLS0tLS0tLS0tLS0tLS0KIAotVGhyZWUga2luZHMgb2YgbWVyZ2UgY2FuIGhhcHBlbjoKK09mdGVuIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkIGlzIGFuIGFuY2VzdG9yIG9mIHRoZSBuYW1lZCBjb21taXQuCitUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbiBjYXNlIGVzcGVjaWFsbHkgd2hlbiBpbnZva2VkIGZyb20gJ2dpdAorcHVsbCc6IHlvdSBhcmUgdHJhY2tpbmcgYW4gdXBzdHJlYW0gcmVwb3NpdG9yeSwgeW91IGhhdmUgY29tbWl0dGVkCitubyBsb2NhbCBjaGFuZ2VzLCBhbmQgbm93IHlvdSB3YW50IHRvIHVwZGF0ZSB0byBhIG5ld2VyIHVwc3RyZWFtCityZXZpc2lvbi4gIEluIHRoaXMgY2FzZSwgYSBuZXcgY29tbWl0IGlzIG5vdCBuZWVkZWQgdG8gc3RvcmUgdGhlCitjb21iaW5lZCBoaXN0b3J5OyBpbnN0ZWFkLCB0aGUgYEhFQURgIChhbG9uZyB3aXRoIHRoZSBpbmRleCkgaXMKK3VwZGF0ZWQgdG8gcG9pbnQgYXQgdGhlIG5hbWVkIGNvbW1pdCwgd2l0aG91dCBjcmVhdGluZyBhbiBleHRyYQorbWVyZ2UgY29tbWl0LgogCi0qIFRoZSBtZXJnZWQgY29tbWl0IGlzIGFscmVhZHkgY29udGFpbmVkIGluIGBIRUFEYC4gVGhpcyBpcyB0aGUKLSAgc2ltcGxlc3QgY2FzZSwgY2FsbGVkICJBbHJlYWR5IHVwLXRvLWRhdGUuIgorVGhpcyBiZWhhdmlvciBjYW4gYmUgc3VwcHJlc3NlZCB3aXRoIHRoZSBgLS1uby1mZmAgb3B0aW9uLgogCi0qIGBIRUFEYCBpcyBhbHJlYWR5IGNvbnRhaW5lZCBpbiB0aGUgbWVyZ2VkIGNvbW1pdC4gVGhpcyBpcyB0aGUKLSAgbW9zdCBjb21tb24gY2FzZSBlc3BlY2lhbGx5IHdoZW4gaW52b2tlZCBmcm9tICdnaXQgcHVsbCc6Ci0gIHlvdSBhcmUgdHJhY2tpbmcgYW4gdXBzdHJlYW0gcmVwb3NpdG9yeSwgaGF2ZSBjb21taXR0ZWQgbm8gbG9jYWwKLSAgY2hhbmdlcyBhbmQgbm93IHlvdSB3YW50IHRvIHVwZGF0ZSB0byBhIG5ld2VyIHVwc3RyZWFtIHJldmlzaW9uLgotICBZb3VyIGBIRUFEYCAoYW5kIHRoZSBpbmRleCkgaXMgdXBkYXRlZCB0byBwb2ludCBhdCB0aGUgbWVyZ2VkCi0gIGNvbW1pdCwgd2l0aG91dCBjcmVhdGluZyBhbiBleHRyYSBtZXJnZSBjb21taXQuICBUaGlzIGlzCi0gIGNhbGxlZCAiRmFzdC1mb3J3YXJkIi4KK1RSVUUgTUVSR0UKKy0tLS0tLS0tLS0KIAotKiBCb3RoIHRoZSBtZXJnZWQgY29tbWl0IGFuZCBgSEVBRGAgYXJlIGluZGVwZW5kZW50IGFuZCBtdXN0IGJlCi0gIHRpZWQgdG9nZXRoZXIgYnkgYSBtZXJnZSBjb21taXQgdGhhdCBoYXMgYm90aCBvZiB0aGVtIGFzIGl0cyBwYXJlbnRzLgotICBUaGUgcmVzdCBvZiB0aGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoaXMgIlRydWUgbWVyZ2UiIGNhc2UuCitFeGNlcHQgaW4gYSBmYXN0LWZvcndhcmQgbWVyZ2UgKHNlZSBhYm92ZSksIHRoZSBicmFuY2hlcyB0byBiZQorbWVyZ2VkIG11c3QgYmUgdGllZCB0b2dldGhlciBieSBhIG1lcmdlIGNvbW1pdCB0aGF0IGhhcyBib3RoIG9mIHRoZW0KK2FzIGl0cyBwYXJlbnRzLgogCi1UaGUgY2hvc2VuIG1lcmdlIHN0cmF0ZWd5IG1lcmdlcyB0aGUgdHdvIGNvbW1pdHMgaW50byBhIHNpbmdsZQotbmV3IHNvdXJjZSB0cmVlLgotV2hlbiB0aGluZ3MgbWVyZ2UgY2xlYW5seSwgdGhpcyBpcyB3aGF0IGhhcHBlbnM6CitBIG1lcmdlZCB2ZXJzaW9uIHJlY29uY2lsaW5nIHRoZSBjaGFuZ2VzIGZyb20gYWxsIGJyYW5jaGVzIHRvIGJlCittZXJnZWQgaXMgY29tbWl0dGVkLCBhbmQgeW91ciBgSEVBRGAsIGluZGV4LCBhbmQgd29ya2luZyB0cmVlIGFyZQordXBkYXRlZCB0byBpdC4gIEl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgbW9kaWZpY2F0aW9ucyBpbiB0aGUgd29ya2luZwordHJlZSBhcyBsb25nIGFzIHRoZXkgZG8gbm90IG92ZXJsYXA7IHRoZSB1cGRhdGUgd2lsbCBwcmVzZXJ2ZSB0aGVtLgogCi0xLiBUaGUgcmVzdWx0cyBhcmUgdXBkYXRlZCBib3RoIGluIHRoZSBpbmRleCBmaWxlIGFuZCBpbiB5b3VyCi0gICB3b3JraW5nIHRyZWU7Ci0yLiBJbmRleCBmaWxlIGlzIHdyaXR0ZW4gb3V0IGFzIGEgdHJlZTsKLTMuIFRoZSB0cmVlIGdldHMgY29tbWl0dGVkOyBhbmQKLTQuIFRoZSBgSEVBRGAgcG9pbnRlciBnZXRzIGFkdmFuY2VkLgorV2hlbiBpdCBpcyBub3Qgb2J2aW91cyBob3cgdG8gcmVjb25jaWxlIHRoZSBjaGFuZ2VzLCB0aGUgZm9sbG93aW5nCitoYXBwZW5zOgogCi1CZWNhdXNlIG9mIDIuLCB3ZSByZXF1aXJlIHRoYXQgdGhlIG9yaWdpbmFsIHN0YXRlIG9mIHRoZSBpbmRleAotZmlsZSBtYXRjaGVzIGV4YWN0bHkgdGhlIGN1cnJlbnQgYEhFQURgIGNvbW1pdDsgb3RoZXJ3aXNlIHdlCi13aWxsIHdyaXRlIG91dCB5b3VyIGxvY2FsIGNoYW5nZXMgYWxyZWFkeSByZWdpc3RlcmVkIGluIHlvdXIKLWluZGV4IGZpbGUgYWxvbmcgd2l0aCB0aGUgbWVyZ2UgcmVzdWx0LCB3aGljaCBpcyBub3QgZ29vZC4KLUJlY2F1c2UgMS4gaW52b2x2ZXMgb25seSB0aG9zZSBwYXRocyBkaWZmZXJpbmcgYmV0d2VlbiB5b3VyCi1icmFuY2ggYW5kIHRoZSByZW1vdGUgYnJhbmNoIHlvdSBhcmUgcHVsbGluZyBmcm9tIGR1cmluZyB0aGUKLW1lcmdlICh3aGljaCBpcyB0eXBpY2FsbHkgYSBmcmFjdGlvbiBvZiB0aGUgd2hvbGUgdHJlZSksIHlvdSBjYW4KLWhhdmUgbG9jYWwgbW9kaWZpY2F0aW9ucyBpbiB5b3VyIHdvcmtpbmcgdHJlZSBhcyBsb25nIGFzIHRoZXkgZG8KLW5vdCBvdmVybGFwIHdpdGggd2hhdCB0aGUgbWVyZ2UgdXBkYXRlcy4KLQotV2hlbiB0aGVyZSBhcmUgY29uZmxpY3RzLCB0aGUgZm9sbG93aW5nIGhhcHBlbnM6Ci0KLTEuIGBIRUFEYCBzdGF5cyB0aGUgc2FtZS4KLQotMi4gQ2xlYW5seSBtZXJnZWQgcGF0aHMgYXJlIHVwZGF0ZWQgYm90aCBpbiB0aGUgaW5kZXggZmlsZSBhbmQKKzEuIFRoZSBgSEVBRGAgcG9pbnRlciBzdGF5cyB0aGUgc2FtZS4KKzIuIFRoZSBgTUVSR0VfSEVBRGAgcmVmIGlzIHNldCB0byBwb2ludCB0byB0aGUgb3RoZXIgYnJhbmNoIGhlYWQuCiszLiBQYXRocyB0aGF0IG1lcmdlZCBjbGVhbmx5IGFyZSB1cGRhdGVkIGJvdGggaW4gdGhlIGluZGV4IGZpbGUgYW5kCiAgICBpbiB5b3VyIHdvcmtpbmcgdHJlZS4KLQotMy4gRm9yIGNvbmZsaWN0aW5nIHBhdGhzLCB0aGUgaW5kZXggZmlsZSByZWNvcmRzIHVwIHRvIHRocmVlCi0gICB2ZXJzaW9uczsgc3RhZ2UxIHN0b3JlcyB0aGUgdmVyc2lvbiBmcm9tIHRoZSBjb21tb24gYW5jZXN0b3IsCi0gICBzdGFnZTIgZnJvbSBgSEVBRGAsIGFuZCBzdGFnZTMgZnJvbSB0aGUgcmVtb3RlIGJyYW5jaCAoeW91Cis0LiBGb3IgY29uZmxpY3RpbmcgcGF0aHMsIHRoZSBpbmRleCBmaWxlIHJlY29yZHMgdXAgdG8gdGhyZWUKKyAgIHZlcnNpb25zOiBzdGFnZSAxIHN0b3JlcyB0aGUgdmVyc2lvbiBmcm9tIHRoZSBjb21tb24gYW5jZXN0b3IsCisgICBzdGFnZSAyIGZyb20gYEhFQURgLCBhbmQgc3RhZ2UgMyBmcm9tIGBNRVJHRV9IRUFEYCAoeW91CiAgICBjYW4gaW5zcGVjdCB0aGUgc3RhZ2VzIHdpdGggYGdpdCBscy1maWxlcyAtdWApLiAgVGhlIHdvcmtpbmcKICAgIHRyZWUgZmlsZXMgY29udGFpbiB0aGUgcmVzdWx0IG9mIHRoZSAibWVyZ2UiIHByb2dyYW07IGkuZS4gMy13YXkKLSAgIG1lcmdlIHJlc3VsdHMgd2l0aCBmYW1pbGlhciBjb25mbGljdCBtYXJrZXJzIGA8PDwgPT09ID4+PmAuCi0KLTQuIE5vIG90aGVyIGNoYW5nZXMgYXJlIGRvbmUuICBJbiBwYXJ0aWN1bGFyLCB0aGUgbG9jYWwKKyAgIG1lcmdlIHJlc3VsdHMgd2l0aCBmYW1pbGlhciBjb25mbGljdCBtYXJrZXJzIGA8PDxgIGA9PT1gIGA+Pj5gLgorNS4gTm8gb3RoZXIgY2hhbmdlcyBhcmUgbWFkZS4gIEluIHBhcnRpY3VsYXIsIHRoZSBsb2NhbAogICAgbW9kaWZpY2F0aW9ucyB5b3UgaGFkIGJlZm9yZSB5b3Ugc3RhcnRlZCBtZXJnZSB3aWxsIHN0YXkgdGhlCiAgICBzYW1lIGFuZCB0aGUgaW5kZXggZW50cmllcyBmb3IgdGhlbSBzdGF5IGFzIHRoZXkgd2VyZSwKICAgIGkuZS4gbWF0Y2hpbmcgYEhFQURgLgogCitJZiB5b3UgdHJpZWQgYSBtZXJnZSB3aGljaCByZXN1bHRlZCBpbiBjb21wbGV4IGNvbmZsaWN0cyBhbmQKK3dhbnQgdG8gc3RhcnQgb3ZlciwgeW91IGNhbiByZWNvdmVyIHdpdGggYGdpdCByZXNldCAtLW1lcmdlYC4KKwogSE9XIENPTkZMSUNUUyBBUkUgUFJFU0VOVEVECiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTg4LDI4ICsyMDcsNzQgQEAKIAogICogRGVjaWRlIG5vdCB0byBtZXJnZS4gIFRoZSBvbmx5IGNsZWFuLXVwcyB5b3UgbmVlZCBhcmUgdG8gcmVzZXQKICAgIHRoZSBpbmRleCBmaWxlIHRvIHRoZSBgSEVBRGAgY29tbWl0IHRvIHJldmVyc2UgMi4gYW5kIHRvIGNsZWFuCi0gICB1cCB3b3JraW5nIHRyZWUgY2hhbmdlcyBtYWRlIGJ5IDIuIGFuZCAzLjsgJ2dpdC1yZXNldCAtLWhhcmQnIGNhbgorICAgdXAgd29ya2luZyB0cmVlIGNoYW5nZXMgbWFkZSBieSAyLiBhbmQgMy47IGBnaXQtcmVzZXQgLS1oYXJkYCBjYW4KICAgIGJlIHVzZWQgZm9yIHRoaXMuCiAKICAqIFJlc29sdmUgdGhlIGNvbmZsaWN0cy4gIEdpdCB3aWxsIG1hcmsgdGhlIGNvbmZsaWN0cyBpbgogICAgdGhlIHdvcmtpbmcgdHJlZS4gIEVkaXQgdGhlIGZpbGVzIGludG8gc2hhcGUgYW5kCi0gICAnZ2l0LWFkZCcgdGhlbSB0byB0aGUgaW5kZXguICBVc2UgJ2dpdC1jb21taXQnIHRvIHNlYWwgdGhlIGRlYWwuCisgICAnZ2l0IGFkZCcgdGhlbSB0byB0aGUgaW5kZXguICBVc2UgJ2dpdCBjb21taXQnIHRvIHNlYWwgdGhlIGRlYWwuCiAKIFlvdSBjYW4gd29yayB0aHJvdWdoIHRoZSBjb25mbGljdCB3aXRoIGEgbnVtYmVyIG9mIHRvb2xzOgogCi0gKiBVc2UgYSBtZXJnZXRvb2wuICAnZ2l0IG1lcmdldG9vbCcgdG8gbGF1bmNoIGEgZ3JhcGhpY2FsCisgKiBVc2UgYSBtZXJnZXRvb2wuICBgZ2l0IG1lcmdldG9vbGAgdG8gbGF1bmNoIGEgZ3JhcGhpY2FsCiAgICBtZXJnZXRvb2wgd2hpY2ggd2lsbCB3b3JrIHlvdSB0aHJvdWdoIHRoZSBtZXJnZS4KIAotICogTG9vayBhdCB0aGUgZGlmZnMuICAnZ2l0IGRpZmYnIHdpbGwgc2hvdyBhIHRocmVlLXdheSBkaWZmLAotICAgaGlnaGxpZ2h0aW5nIGNoYW5nZXMgZnJvbSBib3RoIHRoZSBIRUFEIGFuZCByZW1vdGUgdmVyc2lvbnMuCisgKiBMb29rIGF0IHRoZSBkaWZmcy4gIGBnaXQgZGlmZmAgd2lsbCBzaG93IGEgdGhyZWUtd2F5IGRpZmYsCisgICBoaWdobGlnaHRpbmcgY2hhbmdlcyBmcm9tIGJvdGggdGhlIGBIRUFEYCBhbmQgYE1FUkdFX0hFQURgCisgICB2ZXJzaW9ucy4KIAotICogTG9vayBhdCB0aGUgZGlmZnMgb24gdGhlaXIgb3duLiAnZ2l0IGxvZyAtLW1lcmdlIC1wIDxwYXRoPicKLSAgIHdpbGwgc2hvdyBkaWZmcyBmaXJzdCBmb3IgdGhlIEhFQUQgdmVyc2lvbiBhbmQgdGhlbiB0aGUKLSAgIHJlbW90ZSB2ZXJzaW9uLgorICogTG9vayBhdCB0aGUgZGlmZnMgZnJvbSBlYWNoIGJyYW5jaC4gYGdpdCBsb2cgLS1tZXJnZSAtcCA8cGF0aD5gCisgICB3aWxsIHNob3cgZGlmZnMgZmlyc3QgZm9yIHRoZSBgSEVBRGAgdmVyc2lvbiBhbmQgdGhlbiB0aGUKKyAgIGBNRVJHRV9IRUFEYCB2ZXJzaW9uLgogCi0gKiBMb29rIGF0IHRoZSBvcmlnaW5hbHMuICAnZ2l0IHNob3cgOjE6ZmlsZW5hbWUnIHNob3dzIHRoZQotICAgY29tbW9uIGFuY2VzdG9yLCAnZ2l0IHNob3cgOjI6ZmlsZW5hbWUnIHNob3dzIHRoZSBIRUFECi0gICB2ZXJzaW9uIGFuZCAnZ2l0IHNob3cgOjM6ZmlsZW5hbWUnIHNob3dzIHRoZSByZW1vdGUgdmVyc2lvbi4KKyAqIExvb2sgYXQgdGhlIG9yaWdpbmFscy4gIGBnaXQgc2hvdyA6MTpmaWxlbmFtZWAgc2hvd3MgdGhlCisgICBjb21tb24gYW5jZXN0b3IsIGBnaXQgc2hvdyA6MjpmaWxlbmFtZWAgc2hvd3MgdGhlIGBIRUFEYAorICAgdmVyc2lvbiwgYW5kIGBnaXQgc2hvdyA6MzpmaWxlbmFtZWAgc2hvd3MgdGhlIGBNRVJHRV9IRUFEYAorICAgdmVyc2lvbi4KKworCitFWEFNUExFUworLS0tLS0tLS0KKworKiBNZXJnZSBicmFuY2hlcyBgZml4ZXNgIGFuZCBgZW5oYW5jZW1lbnRzYCBvbiB0b3Agb2YKKyAgdGhlIGN1cnJlbnQgYnJhbmNoLCBtYWtpbmcgYW4gb2N0b3B1cyBtZXJnZToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbWVyZ2UgZml4ZXMgZW5oYW5jZW1lbnRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBNZXJnZSBicmFuY2ggYG9ic29sZXRlYCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCwgdXNpbmcgYG91cnNgCisgIG1lcmdlIHN0cmF0ZWd5OgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBtZXJnZSAtcyBvdXJzIG9ic29sZXRlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBNZXJnZSBicmFuY2ggYG1haW50YCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCwgYnV0IGRvIG5vdCBtYWtlCisgIGEgbmV3IGNvbW1pdCBhdXRvbWF0aWNhbGx5OgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBtZXJnZSAtLW5vLWNvbW1pdCBtYWludAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUaGlzIGNhbiBiZSB1c2VkIHdoZW4geW91IHdhbnQgdG8gaW5jbHVkZSBmdXJ0aGVyIGNoYW5nZXMgdG8gdGhlCittZXJnZSwgb3Igd2FudCB0byB3cml0ZSB5b3VyIG93biBtZXJnZSBjb21taXQgbWVzc2FnZS4KKysKK1lvdSBzaG91bGQgcmVmcmFpbiBmcm9tIGFidXNpbmcgdGhpcyBvcHRpb24gdG8gc25lYWsgc3Vic3RhbnRpYWwKK2NoYW5nZXMgaW50byBhIG1lcmdlIGNvbW1pdC4gIFNtYWxsIGZpeHVwcyBsaWtlIGJ1bXBpbmcKK3JlbGVhc2UvdmVyc2lvbiBuYW1lIHdvdWxkIGJlIGFjY2VwdGFibGUuCisKKworaW5jbHVkZTo6bWVyZ2Utc3RyYXRlZ2llcy50eHRbXQorCitDT05GSUdVUkFUSU9OCistLS0tLS0tLS0tLS0tCitpbmNsdWRlOjptZXJnZS1jb25maWcudHh0W10KKworYnJhbmNoLjxuYW1lPi5tZXJnZW9wdGlvbnM6OgorCVNldHMgZGVmYXVsdCBvcHRpb25zIGZvciBtZXJnaW5nIGludG8gYnJhbmNoIDxuYW1lPi4gVGhlIHN5bnRheCBhbmQKKwlzdXBwb3J0ZWQgb3B0aW9ucyBhcmUgdGhlIHNhbWUgYXMgdGhvc2Ugb2YgJ2dpdCBtZXJnZScsIGJ1dCBvcHRpb24KKwl2YWx1ZXMgY29udGFpbmluZyB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYXJlIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLgogCiBTRUUgQUxTTwogLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdldG9vbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZXRvb2wudHh0CmluZGV4IGZmOTcwMGQuLjU1NzM1ZmEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdldG9vbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2V0b29sLnR4dApAQCAtMTMsMTEgKzEzLDExIEBACiAtLS0tLS0tLS0tLQogCiBVc2UgYGdpdCBtZXJnZXRvb2xgIHRvIHJ1biBvbmUgb2Ygc2V2ZXJhbCBtZXJnZSB1dGlsaXRpZXMgdG8gcmVzb2x2ZQotbWVyZ2UgY29uZmxpY3RzLiAgSXQgaXMgdHlwaWNhbGx5IHJ1biBhZnRlciAnZ2l0LW1lcmdlJy4KK21lcmdlIGNvbmZsaWN0cy4gIEl0IGlzIHR5cGljYWxseSBydW4gYWZ0ZXIgJ2dpdCBtZXJnZScuCiAKIElmIG9uZSBvciBtb3JlIDxmaWxlPiBwYXJhbWV0ZXJzIGFyZSBnaXZlbiwgdGhlIG1lcmdlIHRvb2wgcHJvZ3JhbSB3aWxsCiBiZSBydW4gdG8gcmVzb2x2ZSBkaWZmZXJlbmNlcyBvbiBlYWNoIGZpbGUuICBJZiBubyA8ZmlsZT4gbmFtZXMgYXJlCi1zcGVjaWZpZWQsICdnaXQtbWVyZ2V0b29sJyB3aWxsIHJ1biB0aGUgbWVyZ2UgdG9vbCBwcm9ncmFtIG9uIGV2ZXJ5IGZpbGUKK3NwZWNpZmllZCwgJ2dpdCBtZXJnZXRvb2wnIHdpbGwgcnVuIHRoZSBtZXJnZSB0b29sIHByb2dyYW0gb24gZXZlcnkgZmlsZQogd2l0aCBtZXJnZSBjb25mbGljdHMuCiAKIE9QVElPTlMKQEAgLTI3LDI1ICsyNywyNSBAQAogCVVzZSB0aGUgbWVyZ2UgcmVzb2x1dGlvbiBwcm9ncmFtIHNwZWNpZmllZCBieSA8dG9vbD4uCiAJVmFsaWQgbWVyZ2UgdG9vbHMgYXJlOgogCWtkaWZmMywgdGtkaWZmLCBtZWxkLCB4eGRpZmYsIGVtZXJnZSwgdmltZGlmZiwgZ3ZpbWRpZmYsIGVjbWVyZ2UsCi0JZGlmZnVzZSwgdG9ydG9pc2VtZXJnZSBhbmQgb3BlbmRpZmYKKwlkaWZmdXNlLCB0b3J0b2lzZW1lcmdlLCBvcGVuZGlmZiwgcDRtZXJnZSBhbmQgYXJheGlzLgogKwotSWYgYSBtZXJnZSByZXNvbHV0aW9uIHByb2dyYW0gaXMgbm90IHNwZWNpZmllZCwgJ2dpdC1tZXJnZXRvb2wnCitJZiBhIG1lcmdlIHJlc29sdXRpb24gcHJvZ3JhbSBpcyBub3Qgc3BlY2lmaWVkLCAnZ2l0IG1lcmdldG9vbCcKIHdpbGwgdXNlIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBtZXJnZS50b29sYC4gIElmIHRoZQotY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgbWVyZ2UudG9vbGAgaXMgbm90IHNldCwgJ2dpdC1tZXJnZXRvb2wnCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBtZXJnZS50b29sYCBpcyBub3Qgc2V0LCAnZ2l0IG1lcmdldG9vbCcKIHdpbGwgcGljayBhIHN1aXRhYmxlIGRlZmF1bHQuCiArCiBZb3UgY2FuIGV4cGxpY2l0bHkgcHJvdmlkZSBhIGZ1bGwgcGF0aCB0byB0aGUgdG9vbCBieSBzZXR0aW5nIHRoZQogY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgbWVyZ2V0b29sLjx0b29sPi5wYXRoYC4gRm9yIGV4YW1wbGUsIHlvdQogY2FuIGNvbmZpZ3VyZSB0aGUgYWJzb2x1dGUgcGF0aCB0byBrZGlmZjMgYnkgc2V0dGluZwotYG1lcmdldG9vbC5rZGlmZjMucGF0aGAuIE90aGVyd2lzZSwgJ2dpdC1tZXJnZXRvb2wnIGFzc3VtZXMgdGhlCitgbWVyZ2V0b29sLmtkaWZmMy5wYXRoYC4gT3RoZXJ3aXNlLCAnZ2l0IG1lcmdldG9vbCcgYXNzdW1lcyB0aGUKIHRvb2wgaXMgYXZhaWxhYmxlIGluIFBBVEguCiArCiBJbnN0ZWFkIG9mIHJ1bm5pbmcgb25lIG9mIHRoZSBrbm93biBtZXJnZSB0b29sIHByb2dyYW1zLAotJ2dpdC1tZXJnZXRvb2wnIGNhbiBiZSBjdXN0b21pemVkIHRvIHJ1biBhbiBhbHRlcm5hdGl2ZSBwcm9ncmFtCisnZ2l0IG1lcmdldG9vbCcgY2FuIGJlIGN1c3RvbWl6ZWQgdG8gcnVuIGFuIGFsdGVybmF0aXZlIHByb2dyYW0KIGJ5IHNwZWNpZnlpbmcgdGhlIGNvbW1hbmQgbGluZSB0byBpbnZva2UgaW4gYSBjb25maWd1cmF0aW9uCiB2YXJpYWJsZSBgbWVyZ2V0b29sLjx0b29sPi5jbWRgLgogKwotV2hlbiAnZ2l0LW1lcmdldG9vbCcgaXMgaW52b2tlZCB3aXRoIHRoaXMgdG9vbCAoZWl0aGVyIHRocm91Z2ggdGhlCitXaGVuICdnaXQgbWVyZ2V0b29sJyBpcyBpbnZva2VkIHdpdGggdGhpcyB0b29sIChlaXRoZXIgdGhyb3VnaCB0aGUKIGAtdGAgb3IgYC0tdG9vbGAgb3B0aW9uIG9yIHRoZSBgbWVyZ2UudG9vbGAgY29uZmlndXJhdGlvbgogdmFyaWFibGUpIHRoZSBjb25maWd1cmVkIGNvbW1hbmQgbGluZSB3aWxsIGJlIGludm9rZWQgd2l0aCBgJEJBU0VgCiBzZXQgdG8gdGhlIG5hbWUgb2YgYSB0ZW1wb3JhcnkgZmlsZSBjb250YWluaW5nIHRoZSBjb21tb24gYmFzZSBmb3IKQEAgLTU5LDcgKzU5LDcgQEAKIElmIHRoZSBjdXN0b20gbWVyZ2UgdG9vbCBjb3JyZWN0bHkgaW5kaWNhdGVzIHRoZSBzdWNjZXNzIG9mIGEKIG1lcmdlIHJlc29sdXRpb24gd2l0aCBpdHMgZXhpdCBjb2RlLCB0aGVuIHRoZSBjb25maWd1cmF0aW9uCiB2YXJpYWJsZSBgbWVyZ2V0b29sLjx0b29sPi50cnVzdEV4aXRDb2RlYCBjYW4gYmUgc2V0IHRvIGB0cnVlYC4KLU90aGVyd2lzZSwgJ2dpdC1tZXJnZXRvb2wnIHdpbGwgcHJvbXB0IHRoZSB1c2VyIHRvIGluZGljYXRlIHRoZQorT3RoZXJ3aXNlLCAnZ2l0IG1lcmdldG9vbCcgd2lsbCBwcm9tcHQgdGhlIHVzZXIgdG8gaW5kaWNhdGUgdGhlCiBzdWNjZXNzIG9mIHRoZSByZXNvbHV0aW9uIGFmdGVyIHRoZSBjdXN0b20gdG9vbCBoYXMgZXhpdGVkLgogCiAteTo6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1ta3RyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWt0cmVlLnR4dAppbmRleCBhZjE5ZjA2Li44MWUzMzI2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1ta3RyZWUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW1rdHJlZS50eHQKQEAgLTgsMTIgKzgsMTMgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0IG1rdHJlZScgWy16XQorJ2dpdCBta3RyZWUnIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQotUmVhZHMgc3RhbmRhcmQgaW5wdXQgaW4gbm9uLXJlY3Vyc2l2ZSBgbHMtdHJlZWAgb3V0cHV0IGZvcm1hdCwKLWFuZCBjcmVhdGVzIGEgdHJlZSBvYmplY3QuICBUaGUgb2JqZWN0IG5hbWUgb2YgdGhlIHRyZWUgb2JqZWN0CitSZWFkcyBzdGFuZGFyZCBpbnB1dCBpbiBub24tcmVjdXJzaXZlIGBscy10cmVlYCBvdXRwdXQgZm9ybWF0LCBhbmQgY3JlYXRlcworYSB0cmVlIG9iamVjdC4gIFRoZSBvcmRlciBvZiB0aGUgdHJlZSBlbnRyaWVzIGlzIG5vcm1hbGlzZWQgYnkgbWt0cmVlIHNvCitwcmUtc29ydGluZyB0aGUgaW5wdXQgaXMgbm90IHJlcXVpcmVkLiAgVGhlIG9iamVjdCBuYW1lIG9mIHRoZSB0cmVlIG9iamVjdAogYnVpbHQgaXMgd3JpdHRlbiB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LgogCiBPUFRJT05TCkBAIC0yMSw2ICsyMiwxOCBAQAogLXo6OgogCVJlYWQgdGhlIE5VTC10ZXJtaW5hdGVkIGBscy10cmVlIC16YCBvdXRwdXQgaW5zdGVhZC4KIAorLS1taXNzaW5nOjoKKwlBbGxvdyBtaXNzaW5nIG9iamVjdHMuICBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgKHdpdGhvdXQgdGhpcyBvcHRpb24pCisJaXMgdG8gdmVyaWZ5IHRoYXQgZWFjaCB0cmVlIGVudHJ5J3Mgc2hhMSBpZGVudGlmaWVzIGFuIGV4aXN0aW5nCisJb2JqZWN0LiAgVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgdHJlYXRtZW50IG9mIGdpdGxpbmsgZW50cmllcworCShha2EgInN1Ym1vZHVsZXMiKSB3aGljaCBhcmUgYWx3YXlzIGFsbG93ZWQgdG8gYmUgbWlzc2luZy4KKworLS1iYXRjaDo6CisJQWxsb3cgYnVpbGRpbmcgb2YgbW9yZSB0aGFuIG9uZSB0cmVlIG9iamVjdCBiZWZvcmUgZXhpdGluZy4gIEVhY2gKKwl0cmVlIGlzIHNlcGFyYXRlZCBieSBhcyBzaW5nbGUgYmxhbmsgbGluZS4gVGhlIGZpbmFsIG5ldy1saW5lIGlzCisJb3B0aW9uYWwuICBOb3RlIC0gaWYgdGhlICcteicgb3B0aW9uIGlzIHVzZWQsIGxpbmVzIGFyZSB0ZXJtaW5hdGVkCisJd2l0aCBOVUwuCisKIEF1dGhvcgogLS0tLS0tCiBXcml0dGVuIGJ5IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW12LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW12LnR4dAppbmRleCA5YzU2NjAyLi5iZGNiNTg1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1tdi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbXYudHh0CkBAIC0yOCw2ICsyOCw3IEBACiBPUFRJT05TCiAtLS0tLS0tCiAtZjo6CistLWZvcmNlOjoKIAlGb3JjZSByZW5hbWluZyBvciBtb3Zpbmcgb2YgYSBmaWxlIGV2ZW4gaWYgdGhlIHRhcmdldCBleGlzdHMKIC1rOjoKICAgICAgICAgU2tpcCBtb3ZlIG9yIHJlbmFtZSBhY3Rpb25zIHdoaWNoIHdvdWxkIGxlYWQgdG8gYW4gZXJyb3IKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW5hbWUtcmV2LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW5hbWUtcmV2LnR4dAppbmRleCA3Y2E4YTdiLi4yMTA4MjM3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1uYW1lLXJldi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbmFtZS1yZXYudHh0CkBAIC0xNSw3ICsxNSw3IEBACiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KIEZpbmRzIHN5bWJvbGljIG5hbWVzIHN1aXRhYmxlIGZvciBodW1hbiBkaWdlc3Rpb24gZm9yIHJldmlzaW9ucyBnaXZlbiBpbiBhbnkKLWZvcm1hdCBwYXJzYWJsZSBieSAnZ2l0LXJldi1wYXJzZScuCitmb3JtYXQgcGFyc2FibGUgYnkgJ2dpdCByZXYtcGFyc2UnLgogCiAKIE9QVElPTlMKQEAgLTU1LDcgKzU1LDcgQEAKIE9mIGNvdXJzZSwgeW91IGxvb2sgaW50byB0aGUgY29tbWl0LCBidXQgdGhhdCBvbmx5IHRlbGxzIHlvdSB3aGF0IGhhcHBlbmVkLCBidXQKIG5vdCB0aGUgY29udGV4dC4KIAotRW50ZXIgJ2dpdC1uYW1lLXJldic6CitFbnRlciAnZ2l0IG5hbWUtcmV2JzoKIAogLS0tLS0tLS0tLS0tCiAlIGdpdCBuYW1lLXJldiAzM2RiNWY0ZDkwMjdhMTBlNDc3Y2NmMDU0YjJjMWFiOTRmNzRjODVhCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1ub3Rlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1ub3Rlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ0ODdjYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW5vdGVzLnR4dApAQCAtMCwwICsxLDYwIEBACitnaXQtbm90ZXMoMSkKKz09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbm90ZXMgLSBBZGQvaW5zcGVjdCBjb21taXQgbm90ZXMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IG5vdGVzJyAoZWRpdCBbLUYgPGZpbGU+IHwgLW0gPG1zZz5dIHwgc2hvdykgW2NvbW1pdF0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIGNvbW1hbmQgYWxsb3dzIHlvdSB0byBhZGQgbm90ZXMgdG8gY29tbWl0IG1lc3NhZ2VzLCB3aXRob3V0CitjaGFuZ2luZyB0aGUgY29tbWl0LiAgVG8gZGlzY2VybiB0aGVzZSBub3RlcyBmcm9tIHRoZSBtZXNzYWdlIHN0b3JlZAoraW4gdGhlIGNvbW1pdCBvYmplY3QsIHRoZSBub3RlcyBhcmUgaW5kZW50ZWQgbGlrZSB0aGUgbWVzc2FnZSwgYWZ0ZXIKK2FuIHVuaW5kZW50ZWQgbGluZSBzYXlpbmcgIk5vdGVzOiIuCisKK1RvIGRpc2FibGUgY29tbWl0IG5vdGVzLCB5b3UgaGF2ZSB0byBzZXQgdGhlIGNvbmZpZyB2YXJpYWJsZQorY29yZS5ub3Rlc1JlZiB0byB0aGUgZW1wdHkgc3RyaW5nLiAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBzZXQgaXQKK3RvIGEgZGlmZmVyZW50IHJlZiwgc29tZXRoaW5nIGxpa2UgInJlZnMvbm90ZXMvYnVnemlsbGEiLiAgVGhpcyBzZXR0aW5nCitjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgIkdJVF9OT1RFU19SRUYiLgorCisKK1NVQkNPTU1BTkRTCistLS0tLS0tLS0tLQorCitlZGl0OjoKKwlFZGl0IHRoZSBub3RlcyBmb3IgYSBnaXZlbiBjb21taXQgKGRlZmF1bHRzIHRvIEhFQUQpLgorCitzaG93OjoKKwlTaG93IHRoZSBub3RlcyBmb3IgYSBnaXZlbiBjb21taXQgKGRlZmF1bHRzIHRvIEhFQUQpLgorCisKK09QVElPTlMKKy0tLS0tLS0KKy1tIDxtc2c+OjoKKwlVc2UgdGhlIGdpdmVuIG5vdGUgbWVzc2FnZSAoaW5zdGVhZCBvZiBwcm9tcHRpbmcpLgorCUlmIG11bHRpcGxlIGAtbWAgKG9yIGAtRmApIG9wdGlvbnMgYXJlIGdpdmVuLCB0aGVpcgorCXZhbHVlcyBhcmUgY29uY2F0ZW5hdGVkIGFzIHNlcGFyYXRlIHBhcmFncmFwaHMuCisKKy1GIDxmaWxlPjo6CisJVGFrZSB0aGUgbm90ZSBtZXNzYWdlIGZyb20gdGhlIGdpdmVuIGZpbGUuICBVc2UgJy0nIHRvCisJcmVhZCB0aGUgbm90ZSBtZXNzYWdlIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LgorCUlmIG11bHRpcGxlIGAtRmAgKG9yIGAtbWApIG9wdGlvbnMgYXJlIGdpdmVuLCB0aGVpcgorCXZhbHVlcyBhcmUgY29uY2F0ZW5hdGVkIGFzIHNlcGFyYXRlIHBhcmFncmFwaHMuCisKKworQXV0aG9yCistLS0tLS0KK1dyaXR0ZW4gYnkgSm9oYW5uZXMgU2NoaW5kZWxpbiA8am9oYW5uZXMuc2NoaW5kZWxpbkBnbXguZGU+CisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KK0RvY3VtZW50YXRpb24gYnkgSm9oYW5uZXMgU2NoaW5kZWxpbgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXBhY2stb2JqZWN0cy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLW9iamVjdHMudHh0CmluZGV4IDdkNGMxYTcuLjhlZDA5YzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXBhY2stb2JqZWN0cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1vYmplY3RzLnR4dApAQCAtOSw5ICs5LDExIEBACiBTWU5PUFNJUwogLS0tLS0tLS0KIFt2ZXJzZV0KLSdnaXQgcGFjay1vYmplY3RzJyBbLXFdIFstLW5vLXJldXNlLWRlbHRhXSBbLS1kZWx0YS1iYXNlLW9mZnNldF0gWy0tbm9uLWVtcHR5XQotCVstLWxvY2FsXSBbLS1pbmNyZW1lbnRhbF0gWy0td2luZG93PU5dIFstLWRlcHRoPU5dIFstLWFsbC1wcm9ncmVzc10KLQlbLS1yZXZzIFstLXVucGFja2VkIHwgLS1hbGxdKl0gWy0tc3Rkb3V0IHwgYmFzZS1uYW1lXSA8IG9iamVjdC1saXN0CisnZ2l0IHBhY2stb2JqZWN0cycgWy1xIHwgLS1wcm9ncmVzcyB8IC0tYWxsLXByb2dyZXNzXSBbLS1hbGwtcHJvZ3Jlc3MtaW1wbGllZF0KKwlbLS1uby1yZXVzZS1kZWx0YV0gWy0tZGVsdGEtYmFzZS1vZmZzZXRdIFstLW5vbi1lbXB0eV0KKwlbLS1sb2NhbF0gWy0taW5jcmVtZW50YWxdIFstLXdpbmRvdz1OXSBbLS1kZXB0aD1OXQorCVstLXJldnMgWy0tdW5wYWNrZWQgfCAtLWFsbF0qXSBbLS1zdGRvdXQgfCBiYXNlLW5hbWVdCisJWy0ta2VlcC10cnVlLXBhcmVudHNdIDwgb2JqZWN0LWxpc3QKIAogCiBERVNDUklQVElPTgpAQCAtMTksMjcgKzIxLDI4IEBACiBSZWFkcyBsaXN0IG9mIG9iamVjdHMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsIGFuZCB3cml0ZXMgYSBwYWNrZWQKIGFyY2hpdmUgd2l0aCBzcGVjaWZpZWQgYmFzZS1uYW1lLCBvciB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LgogCi1BIHBhY2tlZCBhcmNoaXZlIGlzIGFuIGVmZmljaWVudCB3YXkgdG8gdHJhbnNmZXIgc2V0IG9mIG9iamVjdHMKLWJldHdlZW4gdHdvIHJlcG9zaXRvcmllcywgYW5kIGFsc28gaXMgYW4gYXJjaGl2YWwgZm9ybWF0IHdoaWNoCi1pcyBlZmZpY2llbnQgdG8gYWNjZXNzLiAgVGhlIHBhY2tlZCBhcmNoaXZlIGZvcm1hdCAoLnBhY2spIGlzCi1kZXNpZ25lZCB0byBiZSBzZWxmIGNvbnRhaW5lZCBzbyB0aGF0IGl0IGNhbiBiZSB1bnBhY2tlZCB3aXRob3V0Ci1hbnkgZnVydGhlciBpbmZvcm1hdGlvbiwgYnV0IGZvciBmYXN0LCByYW5kb20gYWNjZXNzIHRvIHRoZSBvYmplY3RzCi1pbiB0aGUgcGFjaywgYSBwYWNrIGluZGV4IGZpbGUgKC5pZHgpIHdpbGwgYmUgZ2VuZXJhdGVkLgorQSBwYWNrZWQgYXJjaGl2ZSBpcyBhbiBlZmZpY2llbnQgd2F5IHRvIHRyYW5zZmVyIGEgc2V0IG9mIG9iamVjdHMKK2JldHdlZW4gdHdvIHJlcG9zaXRvcmllcyBhcyB3ZWxsIGFzIGFuIGFjY2VzcyBlZmZpY2llbnQgYXJjaGl2YWwKK2Zvcm1hdC4gIEluIGEgcGFja2VkIGFyY2hpdmUsIGFuIG9iamVjdCBpcyBlaXRoZXIgc3RvcmVkIGFzIGEKK2NvbXByZXNzZWQgd2hvbGUgb3IgYXMgYSBkaWZmZXJlbmNlIGZyb20gc29tZSBvdGhlciBvYmplY3QuCitUaGUgbGF0dGVyIGlzIG9mdGVuIGNhbGxlZCBhIGRlbHRhLgogCi1QbGFjaW5nIGJvdGggaW4gdGhlIHBhY2svIHN1YmRpcmVjdG9yeSBvZiAkR0lUX09CSkVDVF9ESVJFQ1RPUlkgKG9yCitUaGUgcGFja2VkIGFyY2hpdmUgZm9ybWF0ICgucGFjaykgaXMgZGVzaWduZWQgdG8gYmUgc2VsZi1jb250YWluZWQKK3NvIHRoYXQgaXQgY2FuIGJlIHVucGFja2VkIHdpdGhvdXQgYW55IGZ1cnRoZXIgaW5mb3JtYXRpb24uIFRoZXJlZm9yZSwKK2VhY2ggb2JqZWN0IHRoYXQgYSBkZWx0YSBkZXBlbmRzIHVwb24gbXVzdCBiZSBwcmVzZW50IHdpdGhpbiB0aGUgcGFjay4KKworQSBwYWNrIGluZGV4IGZpbGUgKC5pZHgpIGlzIGdlbmVyYXRlZCBmb3IgZmFzdCwgcmFuZG9tIGFjY2VzcyB0byB0aGUKK29iamVjdHMgaW4gdGhlIHBhY2suIFBsYWNpbmcgYm90aCB0aGUgaW5kZXggZmlsZSAoLmlkeCkgYW5kIHRoZSBwYWNrZWQKK2FyY2hpdmUgKC5wYWNrKSBpbiB0aGUgcGFjay8gc3ViZGlyZWN0b3J5IG9mICRHSVRfT0JKRUNUX0RJUkVDVE9SWSAob3IKIGFueSBvZiB0aGUgZGlyZWN0b3JpZXMgb24gJEdJVF9BTFRFUk5BVEVfT0JKRUNUX0RJUkVDVE9SSUVTKQotZW5hYmxlcyBnaXQgdG8gcmVhZCBmcm9tIHN1Y2ggYW4gYXJjaGl2ZS4KK2VuYWJsZXMgZ2l0IHRvIHJlYWQgZnJvbSB0aGUgcGFjayBhcmNoaXZlLgogCi1UaGUgJ2dpdC11bnBhY2stb2JqZWN0cycgY29tbWFuZCBjYW4gcmVhZCB0aGUgcGFja2VkIGFyY2hpdmUgYW5kCitUaGUgJ2dpdCB1bnBhY2stb2JqZWN0cycgY29tbWFuZCBjYW4gcmVhZCB0aGUgcGFja2VkIGFyY2hpdmUgYW5kCiBleHBhbmQgdGhlIG9iamVjdHMgY29udGFpbmVkIGluIHRoZSBwYWNrIGludG8gIm9uZS1maWxlCiBvbmUtb2JqZWN0IiBmb3JtYXQ7IHRoaXMgaXMgdHlwaWNhbGx5IGRvbmUgYnkgdGhlIHNtYXJ0LXB1bGwKIGNvbW1hbmRzIHdoZW4gYSBwYWNrIGlzIGNyZWF0ZWQgb24tdGhlLWZseSBmb3IgZWZmaWNpZW50IG5ldHdvcmsKIHRyYW5zcG9ydCBieSB0aGVpciBwZWVycy4KIAotSW4gYSBwYWNrZWQgYXJjaGl2ZSwgYW4gb2JqZWN0IGlzIGVpdGhlciBzdG9yZWQgYXMgYSBjb21wcmVzc2VkCi13aG9sZSwgb3IgYXMgYSBkaWZmZXJlbmNlIGZyb20gc29tZSBvdGhlciBvYmplY3QuICBUaGUgbGF0dGVyIGlzCi1vZnRlbiBjYWxsZWQgYSBkZWx0YS4KLQogCiBPUFRJT05TCiAtLS0tLS0tCkBAIC01OSw3ICs2Miw3IEBACiAtLXJldnM6OgogCVJlYWQgdGhlIHJldmlzaW9uIGFyZ3VtZW50cyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwgaW5zdGVhZCBvZgogCWluZGl2aWR1YWwgb2JqZWN0IG5hbWVzLiAgVGhlIHJldmlzaW9uIGFyZ3VtZW50cyBhcmUgcHJvY2Vzc2VkCi0JdGhlIHNhbWUgd2F5IGFzICdnaXQtcmV2LWxpc3QnIHdpdGggdGhlIGAtLW9iamVjdHNgIGZsYWcKKwl0aGUgc2FtZSB3YXkgYXMgJ2dpdCByZXYtbGlzdCcgd2l0aCB0aGUgYC0tb2JqZWN0c2AgZmxhZwogCXVzZXMgaXRzIGBjb21taXRgIGFyZ3VtZW50cyB0byBidWlsZCB0aGUgbGlzdCBvZiBvYmplY3RzIGl0CiAJb3V0cHV0cy4gIFRoZSBvYmplY3RzIG9uIHRoZSByZXN1bHRpbmcgbGlzdCBhcmUgcGFja2VkLgogCkBAIC03MSw3ICs3NCw3IEBACiAtLWFsbDo6CiAJVGhpcyBpbXBsaWVzIGAtLXJldnNgLiAgSW4gYWRkaXRpb24gdG8gdGhlIGxpc3Qgb2YKIAlyZXZpc2lvbiBhcmd1bWVudHMgcmVhZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwgcHJldGVuZAotCWFzIGlmIGFsbCByZWZzIHVuZGVyIGAkR0lUX0RJUi9yZWZzYCBhcmUgc3BlY2lmaWVkIHRvIGJlCisJYXMgaWYgYWxsIHJlZnMgdW5kZXIgYHJlZnMvYCBhcmUgc3BlY2lmaWVkIHRvIGJlCiAJaW5jbHVkZWQuCiAKIC0taW5jbHVkZS10YWc6OgpAQCAtMTAzLDI2ICsxMDYsMjYgQEAKIAlgLS13aW5kb3ctbWVtb3J5PTBgIG1ha2VzIG1lbW9yeSB1c2FnZSB1bmxpbWl0ZWQsIHdoaWNoIGlzIHRoZQogCWRlZmF1bHQuCiAKLS0tbWF4LXBhY2stc2l6ZT08bj46OgotCU1heGltdW0gc2l6ZSBvZiBlYWNoIG91dHB1dCBwYWNrZmlsZSwgZXhwcmVzc2VkIGluIE1pQi4KKy0tbWF4LXBhY2stc2l6ZT1bTl06OgorCU1heGltdW0gc2l6ZSBvZiBlYWNoIG91dHB1dCBwYWNrIGZpbGUuIFRoZSBzaXplIGNhbiBiZSBzdWZmaXhlZCB3aXRoCisJImsiLCAibSIsIG9yICJnIi4gVGhlIG1pbmltdW0gc2l6ZSBhbGxvd2VkIGlzIGxpbWl0ZWQgdG8gMSBNaUIuCiAJSWYgc3BlY2lmaWVkLCAgbXVsdGlwbGUgcGFja2ZpbGVzIG1heSBiZSBjcmVhdGVkLgogCVRoZSBkZWZhdWx0IGlzIHVubGltaXRlZCwgdW5sZXNzIHRoZSBjb25maWcgdmFyaWFibGUKIAlgcGFjay5wYWNrU2l6ZUxpbWl0YCBpcyBzZXQuCiAKIC0taG9ub3ItcGFjay1rZWVwOjoKIAlUaGlzIGZsYWcgY2F1c2VzIGFuIG9iamVjdCBhbHJlYWR5IGluIGEgbG9jYWwgcGFjayB0aGF0Ci0JaGFzIGEgLmtlZXAgZmlsZSB0byBiZSBpZ25vcmVkLCBldmVuIGlmIGl0IGFwcGVhcnMgaW4gdGhlCi0Jc3RhbmRhcmQgaW5wdXQuCisJaGFzIGEgLmtlZXAgZmlsZSB0byBiZSBpZ25vcmVkLCBldmVuIGlmIGl0IGl0IHdvdWxkIGhhdmUKKwlvdGhlcndpc2UgYmVlbiBwYWNrZWQuCiAKIC0taW5jcmVtZW50YWw6OgotCVRoaXMgZmxhZyBjYXVzZXMgYW4gb2JqZWN0IGFscmVhZHkgaW4gYSBwYWNrIGlnbm9yZWQKLQlldmVuIGlmIGl0IGFwcGVhcnMgaW4gdGhlIHN0YW5kYXJkIGlucHV0LgorCVRoaXMgZmxhZyBjYXVzZXMgYW4gb2JqZWN0IGFscmVhZHkgaW4gYSBwYWNrIHRvIGJlIGlnbm9yZWQKKwlldmVuIGlmIGl0IHdvdWxkIGhhdmUgb3RoZXJ3aXNlIGJlZW4gcGFja2VkLgogCiAtLWxvY2FsOjoKLQlUaGlzIGZsYWcgaXMgc2ltaWxhciB0byBgLS1pbmNyZW1lbnRhbGA7IGluc3RlYWQgb2YKLQlpZ25vcmluZyBhbGwgcGFja2VkIG9iamVjdHMsIGl0IG9ubHkgaWdub3JlcyBvYmplY3RzCi0JdGhhdCBhcmUgcGFja2VkIGFuZC9vciBub3QgaW4gdGhlIGxvY2FsIG9iamVjdCBzdG9yZQotCShpLmUuIGJvcnJvd2VkIGZyb20gYW4gYWx0ZXJuYXRlKS4KKwlUaGlzIGZsYWcgY2F1c2VzIGFuIG9iamVjdCB0aGF0IGlzIGJvcnJvd2VkIGZyb20gYW4gYWx0ZXJuYXRlCisJb2JqZWN0IHN0b3JlIHRvIGJlIGlnbm9yZWQgZXZlbiBpZiBpdCB3b3VsZCBoYXZlIG90aGVyd2lzZSBiZWVuCisJcGFja2VkLgogCiAtLW5vbi1lbXB0eTo6CiAgICAgICAgIE9ubHkgY3JlYXRlIGEgcGFja2VkIGFyY2hpdmUgaWYgaXQgd291bGQgY29udGFpbiBhdApAQCAtMTM2LDcgKzEzOSw3IEBACiAKIC0tYWxsLXByb2dyZXNzOjoKIAlXaGVuIC0tc3Rkb3V0IGlzIHNwZWNpZmllZCB0aGVuIHByb2dyZXNzIHJlcG9ydCBpcwotCWRpc3BsYXllZCBkdXJpbmcgdGhlIG9iamVjdCBjb3VudCBhbmQgZGVsdGlmaWNhdGlvbiBwaGFzZXMKKwlkaXNwbGF5ZWQgZHVyaW5nIHRoZSBvYmplY3QgY291bnQgYW5kIGNvbXByZXNzaW9uIHBoYXNlcwogCWJ1dCBpbmhpYml0ZWQgZHVyaW5nIHRoZSB3cml0ZS1vdXQgcGhhc2UuIFRoZSByZWFzb24gaXMKIAl0aGF0IGluIHNvbWUgY2FzZXMgdGhlIG91dHB1dCBzdHJlYW0gaXMgZGlyZWN0bHkgbGlua2VkCiAJdG8gYW5vdGhlciBjb21tYW5kIHdoaWNoIG1heSB3aXNoIHRvIGRpc3BsYXkgcHJvZ3Jlc3MKQEAgLTE0NSw2ICsxNDgsMTEgQEAKIAlyZXBvcnQgZm9yIHRoZSB3cml0ZS1vdXQgcGhhc2UgYXMgd2VsbCBldmVuIGlmIC0tc3Rkb3V0IGlzCiAJdXNlZC4KIAorLS1hbGwtcHJvZ3Jlc3MtaW1wbGllZDo6CisJVGhpcyBpcyB1c2VkIHRvIGltcGx5IC0tYWxsLXByb2dyZXNzIHdoZW5ldmVyIHByb2dyZXNzIGRpc3BsYXkKKwlpcyBhY3RpdmF0ZWQuICBVbmxpa2UgLS1hbGwtcHJvZ3Jlc3MgdGhpcyBmbGFnIGRvZXNuJ3QgYWN0dWFsbHkKKwlmb3JjZSBhbnkgcHJvZ3Jlc3MgZGlzcGxheSBieSBpdHNlbGYuCisKIC1xOjoKIAlUaGlzIGZsYWcgbWFrZXMgdGhlIGNvbW1hbmQgbm90IHRvIHJlcG9ydCBpdHMgcHJvZ3Jlc3MKIAlvbiB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtLgpAQCAtMTcxLDExICsxNzksMjEgQEAKIAlBZGQgLS1uby1yZXVzZS1vYmplY3QgaWYgeW91IHdhbnQgdG8gZm9yY2UgYSB1bmlmb3JtIGNvbXByZXNzaW9uCiAJbGV2ZWwgb24gYWxsIGRhdGEgbm8gbWF0dGVyIHRoZSBzb3VyY2UuCiAKKy0tdGhpbjo6CisJQ3JlYXRlIGEgInRoaW4iIHBhY2sgYnkgb21pdHRpbmcgdGhlIGNvbW1vbiBvYmplY3RzIGJldHdlZW4gYQorCXNlbmRlciBhbmQgYSByZWNlaXZlciBpbiBvcmRlciB0byByZWR1Y2UgbmV0d29yayB0cmFuc2Zlci4gVGhpcworCW9wdGlvbiBvbmx5IG1ha2VzIHNlbnNlIGluIGNvbmp1bmN0aW9uIHdpdGggLS1zdGRvdXQuCisrCitOb3RlOiBBIHRoaW4gcGFjayB2aW9sYXRlcyB0aGUgcGFja2VkIGFyY2hpdmUgZm9ybWF0IGJ5IG9taXR0aW5nCityZXF1aXJlZCBvYmplY3RzIGFuZCBpcyB0aHVzIHVudXNhYmxlIGJ5IGdpdCB3aXRob3V0IG1ha2luZyBpdAorc2VsZi1jb250YWluZWQuIFVzZSBgZ2l0IGluZGV4LXBhY2sgLS1maXgtdGhpbmAKKyhzZWUgbGlua2dpdDpnaXQtaW5kZXgtcGFja1sxXSkgdG8gcmVzdG9yZSB0aGUgc2VsZi1jb250YWluZWQgcHJvcGVydHkuCisKIC0tZGVsdGEtYmFzZS1vZmZzZXQ6OgogCUEgcGFja2VkIGFyY2hpdmUgY2FuIGV4cHJlc3MgYmFzZSBvYmplY3Qgb2YgYSBkZWx0YSBhcwogCWVpdGhlciAyMC1ieXRlIG9iamVjdCBuYW1lIG9yIGFzIGFuIG9mZnNldCBpbiB0aGUKIAlzdHJlYW0sIGJ1dCBvbGRlciB2ZXJzaW9uIG9mIGdpdCBkb2VzIG5vdCB1bmRlcnN0YW5kIHRoZQotCWxhdHRlci4gIEJ5IGRlZmF1bHQsICdnaXQtcGFjay1vYmplY3RzJyBvbmx5IHVzZXMgdGhlCisJbGF0dGVyLiAgQnkgZGVmYXVsdCwgJ2dpdCBwYWNrLW9iamVjdHMnIG9ubHkgdXNlcyB0aGUKIAlmb3JtZXIgZm9ybWF0IGZvciBiZXR0ZXIgY29tcGF0aWJpbGl0eS4gIFRoaXMgb3B0aW9uCiAJYWxsb3dzIHRoZSBjb21tYW5kIHRvIHVzZSB0aGUgbGF0dGVyIGZvcm1hdCBmb3IKIAljb21wYWN0bmVzcy4gIERlcGVuZGluZyBvbiB0aGUgYXZlcmFnZSBkZWx0YSBjaGFpbgpAQCAtMTk3LDYgKzIxNSwxMCBAQAogCXRvIGZvcmNlIHRoZSB2ZXJzaW9uIGZvciB0aGUgZ2VuZXJhdGVkIHBhY2sgaW5kZXgsIGFuZCB0byBmb3JjZQogCTY0LWJpdCBpbmRleCBlbnRyaWVzIG9uIG9iamVjdHMgbG9jYXRlZCBhYm92ZSB0aGUgZ2l2ZW4gb2Zmc2V0LgogCistLWtlZXAtdHJ1ZS1wYXJlbnRzOjoKKwlXaXRoIHRoaXMgb3B0aW9uLCBwYXJlbnRzIHRoYXQgYXJlIGhpZGRlbiBieSBncmFmdHMgYXJlIHBhY2tlZAorCW5ldmVydGhlbGVzcy4KKwogCiBBdXRob3IKIC0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1yZWR1bmRhbnQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1yZWR1bmRhbnQudHh0CmluZGV4IDVmOTQzNWUuLmQwNjA3ODcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXBhY2stcmVkdW5kYW50LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLXJlZHVuZGFudC50eHQKQEAgLTE2LDcgKzE2LDcgQEAKIGFyZSByZWR1bmRhbnQuIFRoZSBvdXRwdXQgaXMgc3VpdGFibGUgZm9yIHBpcGluZyB0bwogYHhhcmdzIHJtYCBpZiB5b3UgYXJlIGluIHRoZSByb290IG9mIHRoZSByZXBvc2l0b3J5LgogCi0nZ2l0LXBhY2stcmVkdW5kYW50JyBhY2NlcHRzIGEgbGlzdCBvZiBvYmplY3RzIG9uIHN0YW5kYXJkIGlucHV0LiBBbnkgb2JqZWN0cworJ2dpdCBwYWNrLXJlZHVuZGFudCcgYWNjZXB0cyBhIGxpc3Qgb2Ygb2JqZWN0cyBvbiBzdGFuZGFyZCBpbnB1dC4gQW55IG9iamVjdHMKIGdpdmVuIHdpbGwgYmUgaWdub3JlZCB3aGVuIGNoZWNraW5nIHdoaWNoIHBhY2tzIGFyZSByZXF1aXJlZC4gVGhpcyBtYWtlcyB0aGUKIGZvbGxvd2luZyBjb21tYW5kIHVzZWZ1bCB3aGVuIHdhbnRpbmcgdG8gcmVtb3ZlIHBhY2tzIHdoaWNoIGNvbnRhaW4gdW5yZWFjaGFibGUKIG9iamVjdHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wYXJzZS1yZW1vdGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcGFyc2UtcmVtb3RlLnR4dAppbmRleCBjZDQzMDY5Li4zOWQ5ZGFhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1wYXJzZS1yZW1vdGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXBhcnNlLXJlbW90ZS50eHQKQEAgLTE3LDI2ICsxNyw2IEBACiAkR0lUX0RJUi9icmFuY2hlcy8gYW5kIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHRoYXQgYXJlIHJlbGF0ZWQKIHRvIGZldGNoaW5nLCBwdWxsaW5nIGFuZCBwdXNoaW5nLgogCi1UaGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgYXJlOgotCi1nZXRfcmVtb3RlX3JlZnNfZm9yX2ZldGNoOjoKLQlHaXZlbiB0aGUgbGlzdCBvZiB1c2VyLXN1cHBsaWVkIGA8cmVwbz4gPHJlZnNwZWM+Li4uYCwKLQlyZXR1cm4gdGhlIGxpc3Qgb2YgcmVmcyB0byBmZXRjaCBhZnRlciBjYW5vbmljYWxpemluZwotCXRoZW0gaW50byBgJEdJVF9ESVJgIHJlbGF0aXZlIHBhdGhzCi0JKGUuZy4gYHJlZnMvaGVhZHMvZm9vYCkuICBXaGVuIGA8cmVmc3BlYz4uLi5gIGlzIGVtcHR5Ci0JdGhlIHJldHVybmVkIGxpc3Qgb2YgcmVmcyBjb25zaXN0cyBvZiB0aGUgZGVmYXVsdHMKLQlmb3IgdGhlIGdpdmVuIGA8cmVwbz5gLCBpZiBzcGVjaWZpZWQgaW4KLQlgJEdJVF9ESVIvcmVtb3Rlcy9gLCBgJEdJVF9ESVIvYnJhbmNoZXMvYCwgb3IgYHJlbW90ZS4qLmZldGNoYAotCWNvbmZpZ3VyYXRpb24uCi0KLWdldF9yZW1vdGVfcmVmc19mb3JfcHVzaDo6Ci0JR2l2ZW4gdGhlIGxpc3Qgb2YgdXNlci1zdXBwbGllZCBgPHJlcG8+IDxyZWZzcGVjPi4uLmAsCi0JcmV0dXJuIHRoZSBsaXN0IG9mIHJlZnMgdG8gcHVzaCBpbiBhIGZvcm0gc3VpdGFibGUgdG8gYmUKLQlmZWQgdG8gdGhlICdnaXQtc2VuZC1wYWNrJyBjb21tYW5kLiAgV2hlbiBgPHJlZnNwZWM+Li4uYAotCWlzIGVtcHR5IHRoZSByZXR1cm5lZCBsaXN0IG9mIHJlZnMgY29uc2lzdHMgb2YgdGhlCi0JZGVmYXVsdHMgZm9yIHRoZSBnaXZlbiBgPHJlcG8+YCwgaWYgc3BlY2lmaWVkIGluCi0JYCRHSVRfRElSL3JlbW90ZXMvYC4KLQogQXV0aG9yCiAtLS0tLS0KIFdyaXR0ZW4gYnkgSnVuaW8gQyBIYW1hbm8uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wYXRjaC1pZC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1wYXRjaC1pZC50eHQKaW5kZXggMjUzZmMwZi4uNGRhZTEzOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcGF0Y2gtaWQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXBhdGNoLWlkLnR4dApAQCAtMTgsNyArMTgsNyBAQAogCiBJT1csIHlvdSBjYW4gdXNlIHRoaXMgdGhpbmcgdG8gbG9vayBmb3IgbGlrZWx5IGR1cGxpY2F0ZSBjb21taXRzLgogCi1XaGVuIGRlYWxpbmcgd2l0aCAnZ2l0LWRpZmYtdHJlZScgb3V0cHV0LCBpdCB0YWtlcyBhZHZhbnRhZ2Ugb2YKK1doZW4gZGVhbGluZyB3aXRoICdnaXQgZGlmZi10cmVlJyBvdXRwdXQsIGl0IHRha2VzIGFkdmFudGFnZSBvZgogdGhlIGZhY3QgdGhhdCB0aGUgcGF0Y2ggaXMgcHJlZml4ZWQgd2l0aCB0aGUgb2JqZWN0IG5hbWUgb2YgdGhlCiBjb21taXQsIGFuZCBvdXRwdXRzIHR3byA0MC1ieXRlIGhleGFkZWNpbWFsIHN0cmluZ3MuICBUaGUgZmlyc3QKIHN0cmluZyBpcyB0aGUgcGF0Y2ggSUQsIGFuZCB0aGUgc2Vjb25kIHN0cmluZyBpcyB0aGUgY29tbWl0IElELgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcGVlay1yZW1vdGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcGVlay1yZW1vdGUudHh0CmluZGV4IDgyODJhNWUuLjg3ZGFjZDcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXBlZWstcmVtb3RlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wZWVrLXJlbW90ZS50eHQKQEAgLTEyLDcgKzEyLDcgQEAKIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCi1UaGlzIGNvbW1hbmQgaXMgZGVwcmVjYXRlZDsgdXNlICdnaXQtbHMtcmVtb3RlJyBpbnN0ZWFkLgorVGhpcyBjb21tYW5kIGlzIGRlcHJlY2F0ZWQ7IHVzZSAnZ2l0IGxzLXJlbW90ZScgaW5zdGVhZC4KIAogT1BUSU9OUwogLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcHJ1bmUtcGFja2VkLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXBydW5lLXBhY2tlZC50eHQKaW5kZXggYjVmMjZjZS4uYWJmYzZiNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcHJ1bmUtcGFja2VkLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wcnVuZS1wYWNrZWQudHh0CkBAIC04LDcgKzgsNyBAQAogCiBTWU5PUFNJUwogLS0tLS0tLS0KLSdnaXQgcHJ1bmUtcGFja2VkJyBbLW5dIFstcV0KKydnaXQgcHJ1bmUtcGFja2VkJyBbLW58LS1kcnktcnVuXSBbLXF8LS1xdWlldF0KIAogCiBERVNDUklQVElPTgpAQCAtMjgsMTAgKzI4LDEyIEBACiBPUFRJT05TCiAtLS0tLS0tCiAtbjo6CistLWRyeS1ydW46OgogICAgICAgICBEb24ndCBhY3R1YWxseSByZW1vdmUgYW55IG9iamVjdHMsIG9ubHkgc2hvdyB0aG9zZSB0aGF0IHdvdWxkIGhhdmUgYmVlbgogICAgICAgICByZW1vdmVkLgogCiAtcTo6CistLXF1aWV0OjoKIAlTcXVlbGNoIHRoZSBwcm9ncmVzcyBpbmRpY2F0b3IuCiAKIEF1dGhvcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcHJ1bmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcHJ1bmUudHh0CmluZGV4IGRhNjA1NWQuLjE1Y2ZiN2EgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXBydW5lLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wcnVuZS50eHQKQEAgLTgsMjEgKzgsMjEgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0LXBydW5lJyBbLW5dIFstdl0gWy0tZXhwaXJlIDxleHBpcmU+XSBbLS1dIFs8aGVhZD4uLi5dCisnZ2l0IHBydW5lJyBbLW5dIFstdl0gWy0tZXhwaXJlIDxleHBpcmU+XSBbLS1dIFs8aGVhZD4uLi5dCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQogCi1OT1RFOiBJbiBtb3N0IGNhc2VzLCB1c2VycyBzaG91bGQgcnVuICdnaXQtZ2MnLCB3aGljaCBjYWxscwotJ2dpdC1wcnVuZScuIFNlZSB0aGUgc2VjdGlvbiAiTk9URVMiLCBiZWxvdy4KK05PVEU6IEluIG1vc3QgY2FzZXMsIHVzZXJzIHNob3VsZCBydW4gJ2dpdCBnYycsIHdoaWNoIGNhbGxzCisnZ2l0IHBydW5lJy4gU2VlIHRoZSBzZWN0aW9uICJOT1RFUyIsIGJlbG93LgogCi1UaGlzIHJ1bnMgJ2dpdC1mc2NrIC0tdW5yZWFjaGFibGUnIHVzaW5nIGFsbCB0aGUgcmVmcwotYXZhaWxhYmxlIGluIGAkR0lUX0RJUi9yZWZzYCwgb3B0aW9uYWxseSB3aXRoIGFkZGl0aW9uYWwgc2V0IG9mCitUaGlzIHJ1bnMgJ2dpdCBmc2NrIC0tdW5yZWFjaGFibGUnIHVzaW5nIGFsbCB0aGUgcmVmcworYXZhaWxhYmxlIGluIGByZWZzL2AsIG9wdGlvbmFsbHkgd2l0aCBhZGRpdGlvbmFsIHNldCBvZgogb2JqZWN0cyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgYW5kIHBydW5lcyBhbGwgdW5wYWNrZWQKIG9iamVjdHMgdW5yZWFjaGFibGUgZnJvbSBhbnkgb2YgdGhlc2UgaGVhZCBvYmplY3RzIGZyb20gdGhlIG9iamVjdCBkYXRhYmFzZS4KIEluIGFkZGl0aW9uLCBpdAogcHJ1bmVzIHRoZSB1bnBhY2tlZCBvYmplY3RzIHRoYXQgYXJlIGFsc28gZm91bmQgaW4gcGFja3MgYnkKLXJ1bm5pbmcgJ2dpdC1wcnVuZS1wYWNrZWQnLgorcnVubmluZyAnZ2l0IHBydW5lLXBhY2tlZCcuCiAKIE5vdGUgdGhhdCB1bnJlYWNoYWJsZSwgcGFja2VkIG9iamVjdHMgd2lsbCByZW1haW4uICBJZiB0aGlzIGlzCiBub3QgZGVzaXJlZCwgc2VlIGxpbmtnaXQ6Z2l0LXJlcGFja1sxXS4KQEAgLTYyLDEyICs2MiwxMiBAQAogTm90ZXMKIC0tLS0tCiAKLUluIG1vc3QgY2FzZXMsIHVzZXJzIHdpbGwgbm90IG5lZWQgdG8gY2FsbCAnZ2l0LXBydW5lJyBkaXJlY3RseSwgYnV0Ci1zaG91bGQgaW5zdGVhZCBjYWxsICdnaXQtZ2MnLCB3aGljaCBoYW5kbGVzIHBydW5pbmcgYWxvbmcgd2l0aAorSW4gbW9zdCBjYXNlcywgdXNlcnMgd2lsbCBub3QgbmVlZCB0byBjYWxsICdnaXQgcHJ1bmUnIGRpcmVjdGx5LCBidXQKK3Nob3VsZCBpbnN0ZWFkIGNhbGwgJ2dpdCBnYycsIHdoaWNoIGhhbmRsZXMgcHJ1bmluZyBhbG9uZyB3aXRoCiBtYW55IG90aGVyIGhvdXNla2VlcGluZyB0YXNrcy4KIAogRm9yIGEgZGVzY3JpcHRpb24gb2Ygd2hpY2ggb2JqZWN0cyBhcmUgY29uc2lkZXJlZCBmb3IgcHJ1bmluZywgc2VlCi0nZ2l0LWZzY2snJ3MgLS11bnJlYWNoYWJsZSBvcHRpb24uCisnZ2l0IGZzY2snJ3MgLS11bnJlYWNoYWJsZSBvcHRpb24uCiAKIFNFRSBBTFNPCiAtLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcHVsbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1wdWxsLnR4dAppbmRleCA3NTc4NjIzLi4zMWY0MmVhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1wdWxsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wdWxsLnR4dApAQCAtMTMsMTkgKzEzLDI3IEBACiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQotUnVucyAnZ2l0LWZldGNoJyB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLCBhbmQgY2FsbHMgJ2dpdC1tZXJnZScKK1J1bnMgJ2dpdCBmZXRjaCcgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycywgYW5kIGNhbGxzICdnaXQgbWVyZ2UnCiB0byBtZXJnZSB0aGUgcmV0cmlldmVkIGhlYWQocykgaW50byB0aGUgY3VycmVudCBicmFuY2guCi1XaXRoIGAtLXJlYmFzZWAsIGNhbGxzICdnaXQtcmViYXNlJyBpbnN0ZWFkIG9mICdnaXQtbWVyZ2UnLgorV2l0aCBgLS1yZWJhc2VgLCBjYWxscyAnZ2l0IHJlYmFzZScgaW5zdGVhZCBvZiAnZ2l0IG1lcmdlJy4KIAogTm90ZSB0aGF0IHlvdSBjYW4gdXNlIGAuYCAoY3VycmVudCBkaXJlY3RvcnkpIGFzIHRoZQogPHJlcG9zaXRvcnk+IHRvIHB1bGwgZnJvbSB0aGUgbG9jYWwgcmVwb3NpdG9yeSAtLSB0aGlzIGlzIHVzZWZ1bAogd2hlbiBtZXJnaW5nIGxvY2FsIGJyYW5jaGVzIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLgogCi1BbHNvIG5vdGUgdGhhdCBvcHRpb25zIG1lYW50IGZvciAnZ2l0LXB1bGwnIGl0c2VsZiBhbmQgdW5kZXJseWluZwotJ2dpdC1tZXJnZScgbXVzdCBiZSBnaXZlbiBiZWZvcmUgdGhlIG9wdGlvbnMgbWVhbnQgZm9yICdnaXQtZmV0Y2gnLgorQWxzbyBub3RlIHRoYXQgb3B0aW9ucyBtZWFudCBmb3IgJ2dpdCBwdWxsJyBpdHNlbGYgYW5kIHVuZGVybHlpbmcKKydnaXQgbWVyZ2UnIG11c3QgYmUgZ2l2ZW4gYmVmb3JlIHRoZSBvcHRpb25zIG1lYW50IGZvciAnZ2l0IGZldGNoJy4KKworKldhcm5pbmcqOiBSdW5uaW5nICdnaXQgcHVsbCcgKGFjdHVhbGx5LCB0aGUgdW5kZXJseWluZyAnZ2l0IG1lcmdlJykKK3dpdGggdW5jb21taXR0ZWQgY2hhbmdlcyBpcyBkaXNjb3VyYWdlZDogd2hpbGUgcG9zc2libGUsIGl0IGxlYXZlcyB5b3UKK2luIGEgc3RhdGUgdGhhdCBpcyBoYXJkIHRvIGJhY2sgb3V0IG9mIGluIHRoZSBjYXNlIG9mIGEgY29uZmxpY3QuCiAKIE9QVElPTlMKIC0tLS0tLS0KKworT3B0aW9ucyByZWxhdGVkIHRvIG1lcmdpbmcKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKIGluY2x1ZGU6Om1lcmdlLW9wdGlvbnMudHh0W10KIAogOmdpdC1wdWxsOiAxCkBAIC00Nyw2ICs1NSw5IEBACiAtLW5vLXJlYmFzZTo6CiAJT3ZlcnJpZGUgZWFybGllciAtLXJlYmFzZS4KIAorT3B0aW9ucyByZWxhdGVkIHRvIGZldGNoaW5nCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwogaW5jbHVkZTo6ZmV0Y2gtb3B0aW9ucy50eHRbXQogCiBpbmNsdWRlOjpwdWxsLWZldGNoLXBhcmFtLnR4dFtdCkBAIC0xMzEsNTggKzE0MiwxNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiArCiBUaGlzIGxlYXZlcyBhIGNvcHkgb2YgYG5leHRgIHRlbXBvcmFyaWx5IGluIEZFVENIX0hFQUQsIGJ1dAotZG9lcyBub3QgdXBkYXRlIGFueSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMuCi0KLSogQnVuZGxlIGxvY2FsIGJyYW5jaCBgZml4ZXNgIGFuZCBgZW5oYW5jZW1lbnRzYCBvbiB0b3Agb2YKLSAgdGhlIGN1cnJlbnQgYnJhbmNoLCBtYWtpbmcgYW4gT2N0b3B1cyBtZXJnZToKK2RvZXMgbm90IHVwZGF0ZSBhbnkgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzLiBVc2luZyByZW1vdGUtdHJhY2tpbmcKK2JyYW5jaGVzLCB0aGUgc2FtZSBjYW4gYmUgZG9uZSBieSBpbnZva2luZyBmZXRjaCBhbmQgbWVyZ2U6CiArCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSQgZ2l0IHB1bGwgLiBmaXhlcyBlbmhhbmNlbWVudHMKKyQgZ2l0IGZldGNoIG9yaWdpbgorJCBnaXQgbWVyZ2Ugb3JpZ2luL25leHQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKwotVGhpcyBgZ2l0IHB1bGwgLmAgc3ludGF4IGlzIGVxdWl2YWxlbnQgdG8gYGdpdCBtZXJnZWAuCi0KLSogTWVyZ2UgbG9jYWwgYnJhbmNoIGBvYnNvbGV0ZWAgaW50byB0aGUgY3VycmVudCBicmFuY2gsIHVzaW5nIGBvdXJzYAotICBtZXJnZSBzdHJhdGVneToKLSsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotJCBnaXQgcHVsbCAtcyBvdXJzIC4gb2Jzb2xldGUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0qIE1lcmdlIGxvY2FsIGJyYW5jaCBgbWFpbnRgIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLCBidXQgZG8gbm90IG1ha2UKLSAgYSBjb21taXQgYXV0b21hdGljYWxseToKLSsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotJCBnaXQgcHVsbCAtLW5vLWNvbW1pdCAuIG1haW50Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsKLVRoaXMgY2FuIGJlIHVzZWQgd2hlbiB5b3Ugd2FudCB0byBpbmNsdWRlIGZ1cnRoZXIgY2hhbmdlcyB0byB0aGUKLW1lcmdlLCBvciB3YW50IHRvIHdyaXRlIHlvdXIgb3duIG1lcmdlIGNvbW1pdCBtZXNzYWdlLgotKwotWW91IHNob3VsZCByZWZyYWluIGZyb20gYWJ1c2luZyB0aGlzIG9wdGlvbiB0byBzbmVhayBzdWJzdGFudGlhbAotY2hhbmdlcyBpbnRvIGEgbWVyZ2UgY29tbWl0LiAgU21hbGwgZml4dXBzIGxpa2UgYnVtcGluZwotcmVsZWFzZS92ZXJzaW9uIG5hbWUgd291bGQgYmUgYWNjZXB0YWJsZS4KLQotKiBDb21tYW5kIGxpbmUgcHVsbCBvZiBtdWx0aXBsZSBicmFuY2hlcyBmcm9tIG9uZSByZXBvc2l0b3J5OgotKwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0kIGdpdCBjaGVja291dCBtYXN0ZXIKLSQgZ2l0IGZldGNoIG9yaWdpbiArcHU6cHUgbWFpbnQ6dG1wCi0kIGdpdCBwdWxsIC4gdG1wCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsKLVRoaXMgdXBkYXRlcyAob3IgY3JlYXRlcywgYXMgbmVjZXNzYXJ5KSBicmFuY2hlcyBgcHVgIGFuZCBgdG1wYCBpbgotdGhlIGxvY2FsIHJlcG9zaXRvcnkgYnkgZmV0Y2hpbmcgZnJvbSB0aGUgYnJhbmNoZXMgKHJlc3BlY3RpdmVseSkKLWBwdWAgYW5kIGBtYWludGAgZnJvbSB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuCi0rCi1UaGUgYHB1YCBicmFuY2ggd2lsbCBiZSB1cGRhdGVkIGV2ZW4gaWYgaXQgaXMgZG9lcyBub3QgZmFzdC1mb3J3YXJkOwotdGhlIG90aGVycyB3aWxsIG5vdCBiZS4KLSsKLVRoZSBmaW5hbCBjb21tYW5kIHRoZW4gbWVyZ2VzIHRoZSBuZXdseSBmZXRjaGVkIGB0bXBgIGludG8gbWFzdGVyLgogCiAKIElmIHlvdSB0cmllZCBhIHB1bGwgd2hpY2ggcmVzdWx0ZWQgaW4gYSBjb21wbGV4IGNvbmZsaWN0cyBhbmQKLXdvdWxkIHdhbnQgdG8gc3RhcnQgb3ZlciwgeW91IGNhbiByZWNvdmVyIHdpdGggJ2dpdC1yZXNldCcuCit3b3VsZCB3YW50IHRvIHN0YXJ0IG92ZXIsIHlvdSBjYW4gcmVjb3ZlciB3aXRoICdnaXQgcmVzZXQnLgogCiAKIFNFRSBBTFNPCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wdXNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXB1c2gudHh0CmluZGV4IGZkNTNjNDkuLjQ5YjZiZDkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXB1c2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXB1c2gudHh0CkBAIC05LDggKzksOCBAQAogU1lOT1BTSVMKIC0tLS0tLS0tCiBbdmVyc2VdCi0nZ2l0IHB1c2gnIFstLWFsbCB8IC0tbWlycm9yIHwgLS10YWdzXSBbLS1kcnktcnVuXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC1yZWNlaXZlLXBhY2s+XQotCSAgIFstLXJlcG89PHJlcG9zaXRvcnk+XSBbLWYgfCAtLWZvcmNlXSBbLXYgfCAtLXZlcmJvc2VdCisnZ2l0IHB1c2gnIFstLWFsbCB8IC0tbWlycm9yIHwgLS10YWdzXSBbLW4gfCAtLWRyeS1ydW5dIFstLXJlY2VpdmUtcGFjaz08Z2l0LXJlY2VpdmUtcGFjaz5dCisJICAgWy0tcmVwbz08cmVwb3NpdG9yeT5dIFstZiB8IC0tZm9yY2VdIFstdiB8IC0tdmVyYm9zZV0gWy11IHwgLS1zZXQtdXBzdHJlYW1dCiAJICAgWzxyZXBvc2l0b3J5PiA8cmVmc3BlYz4uLi5dCiAKIERFU0NSSVBUSU9OCkBAIC01MCw5ICs1MCw5IEBACiArCiBUaGUgb2JqZWN0IHJlZmVyZW5jZWQgYnkgPHNyYz4gaXMgdXNlZCB0byB1cGRhdGUgdGhlIDxkc3Q+IHJlZmVyZW5jZQogb24gdGhlIHJlbW90ZSBzaWRlLCBidXQgYnkgZGVmYXVsdCB0aGlzIGlzIG9ubHkgYWxsb3dlZCBpZiB0aGUKLXVwZGF0ZSBjYW4gZmFzdCBmb3J3YXJkIDxkc3Q+LiAgQnkgaGF2aW5nIHRoZSBvcHRpb25hbCBsZWFkaW5nIGB7cGx1c31gLAordXBkYXRlIGNhbiBmYXN0LWZvcndhcmQgPGRzdD4uICBCeSBoYXZpbmcgdGhlIG9wdGlvbmFsIGxlYWRpbmcgYHtwbHVzfWAsCiB5b3UgY2FuIHRlbGwgZ2l0IHRvIHVwZGF0ZSB0aGUgPGRzdD4gcmVmIGV2ZW4gd2hlbiB0aGUgdXBkYXRlIGlzIG5vdCBhCi1mYXN0IGZvcndhcmQuICBUaGlzIGRvZXMgKm5vdCogYXR0ZW1wdCB0byBtZXJnZSA8c3JjPiBpbnRvIDxkc3Q+LiAgU2VlCitmYXN0LWZvcndhcmQuICBUaGlzIGRvZXMgKm5vdCogYXR0ZW1wdCB0byBtZXJnZSA8c3JjPiBpbnRvIDxkc3Q+LiAgU2VlCiBFWEFNUExFUyBiZWxvdyBmb3IgZGV0YWlscy4KICsKIGB0YWcgPHRhZz5gIG1lYW5zIHRoZSBzYW1lIGFzIGByZWZzL3RhZ3MvPHRhZz46cmVmcy90YWdzLzx0YWc+YC4KQEAgLTYwLDcgKzYwLDcgQEAKIFB1c2hpbmcgYW4gZW1wdHkgPHNyYz4gYWxsb3dzIHlvdSB0byBkZWxldGUgdGhlIDxkc3Q+IHJlZiBmcm9tCiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuCiArCi1UaGUgc3BlY2lhbCByZWZzcGVjIGA6YCAob3IgYHtwbHVzfTpgIHRvIGFsbG93IG5vbi1mYXN0IGZvcndhcmQgdXBkYXRlcykKK1RoZSBzcGVjaWFsIHJlZnNwZWMgYDpgIChvciBge3BsdXN9OmAgdG8gYWxsb3cgbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGVzKQogZGlyZWN0cyBnaXQgdG8gcHVzaCAibWF0Y2hpbmciIGJyYW5jaGVzOiBmb3IgZXZlcnkgYnJhbmNoIHRoYXQgZXhpc3RzIG9uCiB0aGUgbG9jYWwgc2lkZSwgdGhlIHJlbW90ZSBzaWRlIGlzIHVwZGF0ZWQgaWYgYSBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZQogYWxyZWFkeSBleGlzdHMgb24gdGhlIHJlbW90ZSBzaWRlLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBvcGVyYXRpb24gbW9kZQpAQCAtNjksMTEgKzY5LDExIEBACiAKIC0tYWxsOjoKIAlJbnN0ZWFkIG9mIG5hbWluZyBlYWNoIHJlZiB0byBwdXNoLCBzcGVjaWZpZXMgdGhhdCBhbGwKLQlyZWZzIHVuZGVyIGAkR0lUX0RJUi9yZWZzL2hlYWRzL2AgYmUgcHVzaGVkLgorCXJlZnMgdW5kZXIgYHJlZnMvaGVhZHMvYCBiZSBwdXNoZWQuCiAKIC0tbWlycm9yOjoKIAlJbnN0ZWFkIG9mIG5hbWluZyBlYWNoIHJlZiB0byBwdXNoLCBzcGVjaWZpZXMgdGhhdCBhbGwKLQlyZWZzIHVuZGVyIGAkR0lUX0RJUi9yZWZzL2AgKHdoaWNoIGluY2x1ZGVzIGJ1dCBpcyBub3QKKwlyZWZzIHVuZGVyIGByZWZzL2AgKHdoaWNoIGluY2x1ZGVzIGJ1dCBpcyBub3QKIAlsaW1pdGVkIHRvIGByZWZzL2hlYWRzL2AsIGByZWZzL3JlbW90ZXMvYCwgYW5kIGByZWZzL3RhZ3MvYCkKIAliZSBtaXJyb3JlZCB0byB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuICBOZXdseSBjcmVhdGVkIGxvY2FsCiAJcmVmcyB3aWxsIGJlIHB1c2hlZCB0byB0aGUgcmVtb3RlIGVuZCwgbG9jYWxseSB1cGRhdGVkIHJlZnMKQEAgLTgyLDExICs4MiwyMSBAQAogCWlmIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBgcmVtb3RlLjxyZW1vdGU+Lm1pcnJvcmAgaXMKIAlzZXQuCiAKKy1uOjoKIC0tZHJ5LXJ1bjo6CiAJRG8gZXZlcnl0aGluZyBleGNlcHQgYWN0dWFsbHkgc2VuZCB0aGUgdXBkYXRlcy4KIAorLS1wb3JjZWxhaW46OgorCVByb2R1Y2UgbWFjaGluZS1yZWFkYWJsZSBvdXRwdXQuICBUaGUgb3V0cHV0IHN0YXR1cyBsaW5lIGZvciBlYWNoIHJlZgorCXdpbGwgYmUgdGFiLXNlcGFyYXRlZCBhbmQgc2VudCB0byBzdGRvdXQgaW5zdGVhZCBvZiBzdGRlcnIuICBUaGUgZnVsbAorCXN5bWJvbGljIG5hbWVzIG9mIHRoZSByZWZzIHdpbGwgYmUgZ2l2ZW4uCisKKy0tZGVsZXRlOjoKKwlBbGwgbGlzdGVkIHJlZnMgYXJlIGRlbGV0ZWQgZnJvbSB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuIFRoaXMgaXMKKwl0aGUgc2FtZSBhcyBwcmVmaXhpbmcgYWxsIHJlZnMgd2l0aCBhIGNvbG9uLgorCiAtLXRhZ3M6OgotCUFsbCByZWZzIHVuZGVyIGAkR0lUX0RJUi9yZWZzL3RhZ3NgIGFyZSBwdXNoZWQsIGluCisJQWxsIHJlZnMgdW5kZXIgYHJlZnMvdGFnc2AgYXJlIHB1c2hlZCwgaW4KIAlhZGRpdGlvbiB0byByZWZzcGVjcyBleHBsaWNpdGx5IGxpc3RlZCBvbiB0aGUgY29tbWFuZAogCWxpbmUuCiAKQEAgLTEwNiw3ICsxMTYsNyBAQAogCiAtLXJlcG89PHJlcG9zaXRvcnk+OjoKIAlUaGlzIG9wdGlvbiBpcyBvbmx5IHJlbGV2YW50IGlmIG5vIDxyZXBvc2l0b3J5PiBhcmd1bWVudCBpcwotCXBhc3NlZCBpbiB0aGUgaW52b2NhdGlvbi4gSW4gdGhpcyBjYXNlLCAnZ2l0LXB1c2gnIGRlcml2ZXMgdGhlCisJcGFzc2VkIGluIHRoZSBpbnZvY2F0aW9uLiBJbiB0aGlzIGNhc2UsICdnaXQgcHVzaCcgZGVyaXZlcyB0aGUKIAlyZW1vdGUgbmFtZSBmcm9tIHRoZSBjdXJyZW50IGJyYW5jaDogSWYgaXQgdHJhY2tzIGEgcmVtb3RlCiAJYnJhbmNoLCB0aGVuIHRoYXQgcmVtb3RlIHJlcG9zaXRvcnkgaXMgcHVzaGVkIHRvLiBPdGhlcndpc2UsCiAJdGhlIG5hbWUgIm9yaWdpbiIgaXMgdXNlZC4gRm9yIHRoaXMgbGF0dGVyIGNhc2UsIHRoaXMgb3B0aW9uCkBAIC0xMjAsMTggKzEzMCwzMSBAQAogKwogaXMgdGhhdCAjMSBhbHdheXMgcHVzaGVzIHRvICJwdWJsaWMiIHdoZXJlYXMgIzIgcHVzaGVzIHRvICJwdWJsaWMiCiBvbmx5IGlmIHRoZSBjdXJyZW50IGJyYW5jaCBkb2VzIG5vdCB0cmFjayBhIHJlbW90ZSBicmFuY2guIFRoaXMgaXMKLXVzZWZ1bCBpZiB5b3Ugd3JpdGUgYW4gYWxpYXMgb3Igc2NyaXB0IGFyb3VuZCAnZ2l0LXB1c2gnLgordXNlZnVsIGlmIHlvdSB3cml0ZSBhbiBhbGlhcyBvciBzY3JpcHQgYXJvdW5kICdnaXQgcHVzaCcuCisKKy11OjoKKy0tc2V0LXVwc3RyZWFtOjoKKwlGb3IgZXZlcnkgYnJhbmNoIHRoYXQgaXMgdXAgdG8gZGF0ZSBvciBzdWNjZXNzZnVsbHkgcHVzaGVkLCBhZGQKKwl1cHN0cmVhbSAodHJhY2tpbmcpIHJlZmVyZW5jZSwgdXNlZCBieSBhcmd1bWVudC1sZXNzCisJbGlua2dpdDpnaXQtcHVsbFsxXSBhbmQgb3RoZXIgY29tbWFuZHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLAorCXNlZSAnYnJhbmNoLjxuYW1lPi5tZXJnZScgaW4gbGlua2dpdDpnaXQtY29uZmlnWzFdLgogCiAtLXRoaW46OgogLS1uby10aGluOjoKLQlUaGVzZSBvcHRpb25zIGFyZSBwYXNzZWQgdG8gJ2dpdC1zZW5kLXBhY2snLiAgVGhpbgotCXRyYW5zZmVyIHNwZW5kcyBleHRyYSBjeWNsZXMgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZgotCW9iamVjdHMgdG8gYmUgc2VudCBhbmQgbWVhbnQgdG8gYmUgdXNlZCBvbiBzbG93ZXIgY29ubmVjdGlvbi4KKwlUaGVzZSBvcHRpb25zIGFyZSBwYXNzZWQgdG8gbGlua2dpdDpnaXQtc2VuZC1wYWNrWzFdLiBBIHRoaW4gdHJhbnNmZXIKKwlzaWduaWZpY2FudGx5IHJlZHVjZXMgdGhlIGFtb3VudCBvZiBzZW50IGRhdGEgd2hlbiB0aGUgc2VuZGVyIGFuZAorCXJlY2VpdmVyIHNoYXJlIG1hbnkgb2YgdGhlIHNhbWUgb2JqZWN0cyBpbiBjb21tb24uIFRoZSBkZWZhdWx0IGlzCisJXC0tdGhpbi4KIAogLXY6OgogLS12ZXJib3NlOjoKIAlSdW4gdmVyYm9zZWx5LgogCistcTo6CistLXF1aWV0OjoKKwlTdXBwcmVzcyBhbGwgb3V0cHV0LCBpbmNsdWRpbmcgdGhlIGxpc3Rpbmcgb2YgdXBkYXRlZCByZWZzLAorCXVubGVzcyBhbiBlcnJvciBvY2N1cnMuCisKIGluY2x1ZGU6OnVybHMtcmVtb3Rlcy50eHRbXQogCiBPVVRQVVQKQEAgLTE0OCwyMSArMTcxLDMyIEBACiAgPGZsYWc+IDxzdW1tYXJ5PiA8ZnJvbT4gLT4gPHRvPiAoPHJlYXNvbj4pCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0lmIC0tcG9yY2VsYWluIGlzIHVzZWQsIHRoZW4gZWFjaCBsaW5lIG9mIHRoZSBvdXRwdXQgaXMgb2YgdGhlIGZvcm06CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyA8ZmxhZz4gXHQgPGZyb20+Ojx0bz4gXHQgPHN1bW1hcnk+ICg8cmVhc29uPikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHN0YXR1cyBvZiB1cC10by1kYXRlIHJlZnMgaXMgc2hvd24gb25seSBpZiAtLXBvcmNlbGFpbiBvciAtLXZlcmJvc2UKK29wdGlvbiBpcyB1c2VkLgorCiBmbGFnOjoKLQlBIHNpbmdsZSBjaGFyYWN0ZXIgaW5kaWNhdGluZyB0aGUgc3RhdHVzIG9mIHRoZSByZWYuIFRoaXMgaXMKLQlibGFuayBmb3IgYSBzdWNjZXNzZnVsbHkgcHVzaGVkIHJlZiwgYCFgIGZvciBhIHJlZiB0aGF0IHdhcwotCXJlamVjdGVkIG9yIGZhaWxlZCB0byBwdXNoLCBhbmQgJz0nIGZvciBhIHJlZiB0aGF0IHdhcyB1cCB0bwotCWRhdGUgYW5kIGRpZCBub3QgbmVlZCBwdXNoaW5nIChub3RlIHRoYXQgdGhlIHN0YXR1cyBvZiB1cCB0bwotCWRhdGUgcmVmcyBpcyBzaG93biBvbmx5IHdoZW4gYGdpdCBwdXNoYCBpcyBydW5uaW5nIHZlcmJvc2VseSkuCisJQSBzaW5nbGUgY2hhcmFjdGVyIGluZGljYXRpbmcgdGhlIHN0YXR1cyBvZiB0aGUgcmVmOgorKHNwYWNlKTs7IGZvciBhIHN1Y2Nlc3NmdWxseSBwdXNoZWQgZmFzdC1mb3J3YXJkOworYHtwbHVzfWA7OyBmb3IgYSBzdWNjZXNzZnVsIGZvcmNlZCB1cGRhdGU7CitgLWA7OyBmb3IgYSBzdWNjZXNzZnVsbHkgZGVsZXRlZCByZWY7CitgKmA7OyBmb3IgYSBzdWNjZXNzZnVsbHkgcHVzaGVkIG5ldyByZWY7CitgIWA7OyBmb3IgYSByZWYgdGhhdCB3YXMgcmVqZWN0ZWQgb3IgZmFpbGVkIHRvIHB1c2g7IGFuZAorYD1gOzsgZm9yIGEgcmVmIHRoYXQgd2FzIHVwIHRvIGRhdGUgYW5kIGRpZCBub3QgbmVlZCBwdXNoaW5nLgogCiBzdW1tYXJ5OjoKIAlGb3IgYSBzdWNjZXNzZnVsbHkgcHVzaGVkIHJlZiwgdGhlIHN1bW1hcnkgc2hvd3MgdGhlIG9sZCBhbmQgbmV3CiAJdmFsdWVzIG9mIHRoZSByZWYgaW4gYSBmb3JtIHN1aXRhYmxlIGZvciB1c2luZyBhcyBhbiBhcmd1bWVudCB0bwogCWBnaXQgbG9nYCAodGhpcyBpcyBgPG9sZD4uLjxuZXc+YCBpbiBtb3N0IGNhc2VzLCBhbmQKLQlgPG9sZD4uLi48bmV3PmAgZm9yIGZvcmNlZCBub24tZmFzdCBmb3J3YXJkIHVwZGF0ZXMpLiBGb3IgYQorCWA8b2xkPi4uLjxuZXc+YCBmb3IgZm9yY2VkIG5vbi1mYXN0LWZvcndhcmQgdXBkYXRlcykuIEZvciBhCiAJZmFpbGVkIHVwZGF0ZSwgbW9yZSBkZXRhaWxzIGFyZSBnaXZlbiBmb3IgdGhlIGZhaWx1cmUuCiAJVGhlIHN0cmluZyBgcmVqZWN0ZWRgIGluZGljYXRlcyB0aGF0IGdpdCBkaWQgbm90IHRyeSB0byBzZW5kIHRoZQotCXJlZiBhdCBhbGwgKHR5cGljYWxseSBiZWNhdXNlIGl0IGlzIG5vdCBhIGZhc3QgZm9yd2FyZCkuIFRoZQorCXJlZiBhdCBhbGwgKHR5cGljYWxseSBiZWNhdXNlIGl0IGlzIG5vdCBhIGZhc3QtZm9yd2FyZCkuIFRoZQogCXN0cmluZyBgcmVtb3RlIHJlamVjdGVkYCBpbmRpY2F0ZXMgdGhhdCB0aGUgcmVtb3RlIGVuZCByZWZ1c2VkCiAJdGhlIHVwZGF0ZTsgdGhpcyByZWplY3Rpb24gaXMgdHlwaWNhbGx5IGNhdXNlZCBieSBhIGhvb2sgb24gdGhlCiAJcmVtb3RlIHNpZGUuIFRoZSBzdHJpbmcgYHJlbW90ZSBmYWlsdXJlYCBpbmRpY2F0ZXMgdGhhdCB0aGUKQEAgLTE4NCw2ICsyMTgsOTIgQEAKIAlyZWZzLCBubyBleHBsYW5hdGlvbiBpcyBuZWVkZWQuIEZvciBhIGZhaWxlZCByZWYsIHRoZSByZWFzb24gZm9yCiAJZmFpbHVyZSBpcyBkZXNjcmliZWQuCiAKK05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gYW4gdXBkYXRlIGNoYW5nZXMgYSBicmFuY2ggKG9yIG1vcmUgaW4gZ2VuZXJhbCwgYSByZWYpIHRoYXQgdXNlZCB0bworcG9pbnQgYXQgY29tbWl0IEEgdG8gcG9pbnQgYXQgYW5vdGhlciBjb21taXQgQiwgaXQgaXMgY2FsbGVkIGEKK2Zhc3QtZm9yd2FyZCB1cGRhdGUgaWYgYW5kIG9ubHkgaWYgQiBpcyBhIGRlc2NlbmRhbnQgb2YgQS4KKworSW4gYSBmYXN0LWZvcndhcmQgdXBkYXRlIGZyb20gQSB0byBCLCB0aGUgc2V0IG9mIGNvbW1pdHMgdGhhdCB0aGUgb3JpZ2luYWwKK2NvbW1pdCBBIGJ1aWx0IG9uIHRvcCBvZiBpcyBhIHN1YnNldCBvZiB0aGUgY29tbWl0cyB0aGUgbmV3IGNvbW1pdCBCCitidWlsZHMgb24gdG9wIG9mLiAgSGVuY2UsIGl0IGRvZXMgbm90IGxvc2UgYW55IGhpc3RvcnkuCisKK0luIGNvbnRyYXN0LCBhIG5vbi1mYXN0LWZvcndhcmQgdXBkYXRlIHdpbGwgbG9zZSBoaXN0b3J5LiAgRm9yIGV4YW1wbGUsCitzdXBwb3NlIHlvdSBhbmQgc29tZWJvZHkgZWxzZSBzdGFydGVkIGF0IHRoZSBzYW1lIGNvbW1pdCBYLCBhbmQgeW91IGJ1aWx0CithIGhpc3RvcnkgbGVhZGluZyB0byBjb21taXQgQiB3aGlsZSB0aGUgb3RoZXIgcGVyc29uIGJ1aWx0IGEgaGlzdG9yeQorbGVhZGluZyB0byBjb21taXQgQS4gIFRoZSBoaXN0b3J5IGxvb2tzIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICBCCisgICAgIC8KKyAtLS1YLS0tQQorCistLS0tLS0tLS0tLS0tLS0tCisKK0Z1cnRoZXIgc3VwcG9zZSB0aGF0IHRoZSBvdGhlciBwZXJzb24gYWxyZWFkeSBwdXNoZWQgY2hhbmdlcyBsZWFkaW5nIHRvIEEKK2JhY2sgdG8gdGhlIG9yaWdpbmFsIHJlcG9zaXRvcnkgeW91IHR3byBvYnRhaW5lZCB0aGUgb3JpZ2luYWwgY29tbWl0IFguCisKK1RoZSBwdXNoIGRvbmUgYnkgdGhlIG90aGVyIHBlcnNvbiB1cGRhdGVkIHRoZSBicmFuY2ggdGhhdCB1c2VkIHRvIHBvaW50IGF0Citjb21taXQgWCB0byBwb2ludCBhdCBjb21taXQgQS4gIEl0IGlzIGEgZmFzdC1mb3J3YXJkLgorCitCdXQgaWYgeW91IHRyeSB0byBwdXNoLCB5b3Ugd2lsbCBhdHRlbXB0IHRvIHVwZGF0ZSB0aGUgYnJhbmNoICh0aGF0Citub3cgcG9pbnRzIGF0IEEpIHdpdGggY29tbWl0IEIuICBUaGlzIGRvZXMgX25vdF8gZmFzdC1mb3J3YXJkLiAgSWYgeW91IGRpZAorc28sIHRoZSBjaGFuZ2VzIGludHJvZHVjZWQgYnkgY29tbWl0IEEgd2lsbCBiZSBsb3N0LCBiZWNhdXNlIGV2ZXJ5Ym9keQord2lsbCBub3cgc3RhcnQgYnVpbGRpbmcgb24gdG9wIG9mIEIuCisKK1RoZSBjb21tYW5kIGJ5IGRlZmF1bHQgZG9lcyBub3QgYWxsb3cgYW4gdXBkYXRlIHRoYXQgaXMgbm90IGEgZmFzdC1mb3J3YXJkCit0byBwcmV2ZW50IHN1Y2ggbG9zcyBvZiBoaXN0b3J5LgorCitJZiB5b3UgZG8gbm90IHdhbnQgdG8gbG9zZSB5b3VyIHdvcmsgKGhpc3RvcnkgZnJvbSBYIHRvIEIpIG5vciB0aGUgd29yayBieQordGhlIG90aGVyIHBlcnNvbiAoaGlzdG9yeSBmcm9tIFggdG8gQSksIHlvdSB3b3VsZCBuZWVkIHRvIGZpcnN0IGZldGNoIHRoZQoraGlzdG9yeSBmcm9tIHRoZSByZXBvc2l0b3J5LCBjcmVhdGUgYSBoaXN0b3J5IHRoYXQgY29udGFpbnMgY2hhbmdlcyBkb25lCitieSBib3RoIHBhcnRpZXMsIGFuZCBwdXNoIHRoZSByZXN1bHQgYmFjay4KKworWW91IGNhbiBwZXJmb3JtICJnaXQgcHVsbCIsIHJlc29sdmUgcG90ZW50aWFsIGNvbmZsaWN0cywgYW5kICJnaXQgcHVzaCIKK3RoZSByZXN1bHQuICBBICJnaXQgcHVsbCIgd2lsbCBjcmVhdGUgYSBtZXJnZSBjb21taXQgQyBiZXR3ZWVuIGNvbW1pdHMgQQorYW5kIEIuCisKKy0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgQi0tLUMKKyAgICAgLyAgIC8KKyAtLS1YLS0tQQorCistLS0tLS0tLS0tLS0tLS0tCisKK1VwZGF0aW5nIEEgd2l0aCB0aGUgcmVzdWx0aW5nIG1lcmdlIGNvbW1pdCB3aWxsIGZhc3QtZm9yd2FyZCBhbmQgeW91cgorcHVzaCB3aWxsIGJlIGFjY2VwdGVkLgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHJlYmFzZSB5b3VyIGNoYW5nZSBiZXR3ZWVuIFggYW5kIEIgb24gdG9wIG9mIEEsCit3aXRoICJnaXQgcHVsbCAtLXJlYmFzZSIsIGFuZCBwdXNoIHRoZSByZXN1bHQgYmFjay4gIFRoZSByZWJhc2Ugd2lsbAorY3JlYXRlIGEgbmV3IGNvbW1pdCBEIHRoYXQgYnVpbGRzIHRoZSBjaGFuZ2UgYmV0d2VlbiBYIGFuZCBCIG9uIHRvcCBvZgorQS4KKworLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICBCICAgRAorICAgICAvICAgLworIC0tLVgtLS1BCisKKy0tLS0tLS0tLS0tLS0tLS0KKworQWdhaW4sIHVwZGF0aW5nIEEgd2l0aCB0aGlzIGNvbW1pdCB3aWxsIGZhc3QtZm9yd2FyZCBhbmQgeW91ciBwdXNoIHdpbGwgYmUKK2FjY2VwdGVkLgorCitUaGVyZSBpcyBhbm90aGVyIGNvbW1vbiBzaXR1YXRpb24gd2hlcmUgeW91IG1heSBlbmNvdW50ZXIgbm9uLWZhc3QtZm9yd2FyZAorcmVqZWN0aW9uIHdoZW4geW91IHRyeSB0byBwdXNoLCBhbmQgaXQgaXMgcG9zc2libGUgZXZlbiB3aGVuIHlvdSBhcmUKK3B1c2hpbmcgaW50byBhIHJlcG9zaXRvcnkgbm9ib2R5IGVsc2UgcHVzaGVzIGludG8uIEFmdGVyIHlvdSBwdXNoIGNvbW1pdAorQSB5b3Vyc2VsZiAoaW4gdGhlIGZpcnN0IHBpY3R1cmUgaW4gdGhpcyBzZWN0aW9uKSwgcmVwbGFjZSBpdCB3aXRoICJnaXQKK2NvbW1pdCAtLWFtZW5kIiB0byBwcm9kdWNlIGNvbW1pdCBCLCBhbmQgeW91IHRyeSB0byBwdXNoIGl0IG91dCwgYmVjYXVzZQorZm9yZ290IHRoYXQgeW91IGhhdmUgcHVzaGVkIEEgb3V0IGFscmVhZHkuIEluIHN1Y2ggYSBjYXNlLCBhbmQgb25seSBpZgoreW91IGFyZSBjZXJ0YWluIHRoYXQgbm9ib2R5IGluIHRoZSBtZWFudGltZSBmZXRjaGVkIHlvdXIgZWFybGllciBjb21taXQgQQorKGFuZCBzdGFydGVkIGJ1aWxkaW5nIG9uIHRvcCBvZiBpdCksIHlvdSBjYW4gcnVuICJnaXQgcHVzaCAtLWZvcmNlIiB0bworb3ZlcndyaXRlIGl0LiBJbiBvdGhlciB3b3JkcywgImdpdCBwdXNoIC0tZm9yY2UiIGlzIGEgbWV0aG9kIHJlc2VydmVkIGZvcgorYSBjYXNlIHdoZXJlIHlvdSBkbyBtZWFuIHRvIGxvc2UgaGlzdG9yeS4KKworCiBFeGFtcGxlcwogLS0tLS0tLS0KIApAQCAtMjQ0LDkgKzM2NCw5IEBACiAKIGdpdCBwdXNoIG9yaWdpbiB7cGx1c31kZXY6bWFzdGVyOjoKIAlVcGRhdGUgdGhlIG9yaWdpbiByZXBvc2l0b3J5J3MgbWFzdGVyIGJyYW5jaCB3aXRoIHRoZSBkZXYgYnJhbmNoLAotCWFsbG93aW5nIG5vbi1mYXN0IGZvcndhcmQgdXBkYXRlcy4gICpUaGlzIGNhbiBsZWF2ZSB1bnJlZmVyZW5jZWQKKwlhbGxvd2luZyBub24tZmFzdC1mb3J3YXJkIHVwZGF0ZXMuICAqVGhpcyBjYW4gbGVhdmUgdW5yZWZlcmVuY2VkCiAJY29tbWl0cyBkYW5nbGluZyBpbiB0aGUgb3JpZ2luIHJlcG9zaXRvcnkuKiAgQ29uc2lkZXIgdGhlCi0JZm9sbG93aW5nIHNpdHVhdGlvbiwgd2hlcmUgYSBmYXN0IGZvcndhcmQgaXMgbm90IHBvc3NpYmxlOgorCWZvbGxvd2luZyBzaXR1YXRpb24sIHdoZXJlIGEgZmFzdC1mb3J3YXJkIGlzIG5vdCBwb3NzaWJsZToKICsKIC0tLS0KIAkgICAgby0tLW8tLS1vLS0tQS0tLUIgIG9yaWdpbi9tYXN0ZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXF1aWx0aW1wb3J0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXF1aWx0aW1wb3J0LnR4dAppbmRleCBkNDAzN2RlLi41NzllOGQyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1xdWlsdGltcG9ydC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcXVpbHRpbXBvcnQudHh0CkBAIC05LDcgKzksNyBAQAogU1lOT1BTSVMKIC0tLS0tLS0tCiBbdmVyc2VdCi0nZ2l0IHF1aWx0aW1wb3J0JyBbLS1kcnktcnVuXSBbLS1hdXRob3IgPGF1dGhvcj5dIFstLXBhdGNoZXMgPGRpcj5dCisnZ2l0IHF1aWx0aW1wb3J0JyBbLS1kcnktcnVuIHwgLW5dIFstLWF1dGhvciA8YXV0aG9yPl0gWy0tcGF0Y2hlcyA8ZGlyPl0KIAogCiBERVNDUklQVElPTgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVhZC10cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlYWQtdHJlZS50eHQKaW5kZXggNzE2MGZhMS4uZjYwMzdjNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmVhZC10cmVlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZWFkLXRyZWUudHh0CkBAIC04LDcgKzgsMTAgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0IHJlYWQtdHJlZScgKDx0cmVlLWlzaD4gfCBbWy1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTxwcmVmaXg+XSBbLXUgfCAtaV1dIFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gWy0taW5kZXgtb3V0cHV0PTxmaWxlPl0gPHRyZWUtaXNoMT4gWzx0cmVlLWlzaDI+IFs8dHJlZS1pc2gzPl1dKQorJ2dpdCByZWFkLXRyZWUnIFtbLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS1wcmVmaXg9PHByZWZpeD5dCisJCVstdSBbLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PGdpdGlnbm9yZT5dIHwgLWldXQorCQlbLS1pbmRleC1vdXRwdXQ9PGZpbGU+XSBbLS1uby1zcGFyc2UtY2hlY2tvdXRdCisJCTx0cmVlLWlzaDE+IFs8dHJlZS1pc2gyPiBbPHRyZWUtaXNoMz5dXQogCiAKIERFU0NSSVBUSU9OCkBAIC0yMiw4ICsyNSw4IEBACiBmbGFnLiAgV2hlbiB1c2VkIHdpdGggYC1tYCwgdGhlIGAtdWAgZmxhZyBjYXVzZXMgaXQgdG8gYWxzbyB1cGRhdGUKIHRoZSBmaWxlcyBpbiB0aGUgd29yayB0cmVlIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgbWVyZ2UuCiAKLVRyaXZpYWwgbWVyZ2VzIGFyZSBkb25lIGJ5ICdnaXQtcmVhZC10cmVlJyBpdHNlbGYuICBPbmx5IGNvbmZsaWN0aW5nIHBhdGhzCi13aWxsIGJlIGluIHVubWVyZ2VkIHN0YXRlIHdoZW4gJ2dpdC1yZWFkLXRyZWUnIHJldHVybnMuCitUcml2aWFsIG1lcmdlcyBhcmUgZG9uZSBieSAnZ2l0IHJlYWQtdHJlZScgaXRzZWxmLiAgT25seSBjb25mbGljdGluZyBwYXRocword2lsbCBiZSBpbiB1bm1lcmdlZCBzdGF0ZSB3aGVuICdnaXQgcmVhZC10cmVlJyByZXR1cm5zLgogCiBPUFRJT05TCiAtLS0tLS0tCkBAIC01NCwxMyArNTcsMTMgQEAKIAlTaG93IHRoZSBwcm9ncmVzcyBvZiBjaGVja2luZyBmaWxlcyBvdXQuCiAKIC0tdHJpdmlhbDo6Ci0JUmVzdHJpY3QgdGhyZWUtd2F5IG1lcmdlIGJ5ICdnaXQtcmVhZC10cmVlJyB0byBoYXBwZW4KKwlSZXN0cmljdCB0aHJlZS13YXkgbWVyZ2UgYnkgJ2dpdCByZWFkLXRyZWUnIHRvIGhhcHBlbgogCW9ubHkgaWYgdGhlcmUgaXMgbm8gZmlsZS1sZXZlbCBtZXJnaW5nIHJlcXVpcmVkLCBpbnN0ZWFkCiAJb2YgcmVzb2x2aW5nIG1lcmdlIGZvciB0cml2aWFsIGNhc2VzIGFuZCBsZWF2aW5nCiAJY29uZmxpY3RpbmcgZmlsZXMgdW5yZXNvbHZlZCBpbiB0aGUgaW5kZXguCiAKIC0tYWdncmVzc2l2ZTo6Ci0JVXN1YWxseSBhIHRocmVlLXdheSBtZXJnZSBieSAnZ2l0LXJlYWQtdHJlZScgcmVzb2x2ZXMKKwlVc3VhbGx5IGEgdGhyZWUtd2F5IG1lcmdlIGJ5ICdnaXQgcmVhZC10cmVlJyByZXNvbHZlcwogCXRoZSBtZXJnZSBmb3IgcmVhbGx5IHRyaXZpYWwgY2FzZXMgYW5kIGxlYXZlcyBvdGhlcgogCWNhc2VzIHVucmVzb2x2ZWQgaW4gdGhlIGluZGV4LCBzbyB0aGF0IFBvcmNlbGFpbnMgY2FuCiAJaW1wbGVtZW50IGRpZmZlcmVudCBtZXJnZSBwb2xpY2llcy4gIFRoaXMgZmxhZyBtYWtlcyB0aGUKQEAgLTEwNywxMyArMTEwLDE3IEBACiAJZGlyZWN0b3JpZXMgdGhlIGluZGV4IGZpbGUgYW5kIGluZGV4IG91dHB1dCBmaWxlIGFyZQogCWxvY2F0ZWQgaW4uCiAKKy0tbm8tc3BhcnNlLWNoZWNrb3V0OjoKKwlEaXNhYmxlIHNwYXJzZSBjaGVja291dCBzdXBwb3J0IGV2ZW4gaWYgYGNvcmUuc3BhcnNlQ2hlY2tvdXRgCisJaXMgdHJ1ZS4KKwogPHRyZWUtaXNoIz46OgogCVRoZSBpZCBvZiB0aGUgdHJlZSBvYmplY3QocykgdG8gYmUgcmVhZC9tZXJnZWQuCiAKIAogTWVyZ2luZwogLS0tLS0tLQotSWYgYC1tYCBpcyBzcGVjaWZpZWQsICdnaXQtcmVhZC10cmVlJyBjYW4gcGVyZm9ybSAzIGtpbmRzIG9mCitJZiBgLW1gIGlzIHNwZWNpZmllZCwgJ2dpdCByZWFkLXRyZWUnIGNhbiBwZXJmb3JtIDMga2luZHMgb2YKIG1lcmdlLCBhIHNpbmdsZSB0cmVlIG1lcmdlIGlmIG9ubHkgMSB0cmVlIGlzIGdpdmVuLCBhCiBmYXN0LWZvcndhcmQgbWVyZ2Ugd2l0aCAyIHRyZWVzLCBvciBhIDMtd2F5IG1lcmdlIGlmIDMgdHJlZXMgYXJlCiBwcm92aWRlZC4KQEAgLTEyMSwxOCArMTI4LDE4IEBACiAKIFNpbmdsZSBUcmVlIE1lcmdlCiB+fn5+fn5+fn5+fn5+fn5+fgotSWYgb25seSAxIHRyZWUgaXMgc3BlY2lmaWVkLCAnZ2l0LXJlYWQtdHJlZScgb3BlcmF0ZXMgYXMgaWYgdGhlIHVzZXIgZGlkIG5vdAorSWYgb25seSAxIHRyZWUgaXMgc3BlY2lmaWVkLCAnZ2l0IHJlYWQtdHJlZScgb3BlcmF0ZXMgYXMgaWYgdGhlIHVzZXIgZGlkIG5vdAogc3BlY2lmeSBgLW1gLCBleGNlcHQgdGhhdCBpZiB0aGUgb3JpZ2luYWwgaW5kZXggaGFzIGFuIGVudHJ5IGZvciBhCi1naXZlbiBwYXRobmFtZSwgYW5kIHRoZSBjb250ZW50cyBvZiB0aGUgcGF0aCBtYXRjaGVzIHdpdGggdGhlIHRyZWUKK2dpdmVuIHBhdGhuYW1lLCBhbmQgdGhlIGNvbnRlbnRzIG9mIHRoZSBwYXRoIG1hdGNoIHdpdGggdGhlIHRyZWUKIGJlaW5nIHJlYWQsIHRoZSBzdGF0IGluZm8gZnJvbSB0aGUgaW5kZXggaXMgdXNlZC4gKEluIG90aGVyIHdvcmRzLCB0aGUKIGluZGV4J3Mgc3RhdCgpcyB0YWtlIHByZWNlZGVuY2Ugb3ZlciB0aGUgbWVyZ2VkIHRyZWUncykuCiAKIFRoYXQgbWVhbnMgdGhhdCBpZiB5b3UgZG8gYSBgZ2l0IHJlYWQtdHJlZSAtbSA8bmV3dHJlZT5gIGZvbGxvd2VkIGJ5IGEKLWBnaXQgY2hlY2tvdXQtaW5kZXggLWYgLXUgLWFgLCB0aGUgJ2dpdC1jaGVja291dC1pbmRleCcgb25seSBjaGVja3Mgb3V0CitgZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC11IC1hYCwgdGhlICdnaXQgY2hlY2tvdXQtaW5kZXgnIG9ubHkgY2hlY2tzIG91dAogdGhlIHN0dWZmIHRoYXQgcmVhbGx5IGNoYW5nZWQuCiAKLVRoaXMgaXMgdXNlZCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBmYWxzZSBoaXRzIHdoZW4gJ2dpdC1kaWZmLWZpbGVzJyBpcwotcnVuIGFmdGVyICdnaXQtcmVhZC10cmVlJy4KK1RoaXMgaXMgdXNlZCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBmYWxzZSBoaXRzIHdoZW4gJ2dpdCBkaWZmLWZpbGVzJyBpcworcnVuIGFmdGVyICdnaXQgcmVhZC10cmVlJy4KIAogCiBUd28gVHJlZSBNZXJnZQpAQCAtMTQxLDQ2ICsxNDgsNDggQEAKIFR5cGljYWxseSwgdGhpcyBpcyBpbnZva2VkIGFzIGBnaXQgcmVhZC10cmVlIC1tICRIICRNYCwgd2hlcmUgJEgKIGlzIHRoZSBoZWFkIGNvbW1pdCBvZiB0aGUgY3VycmVudCByZXBvc2l0b3J5LCBhbmQgJE0gaXMgdGhlIGhlYWQKIG9mIGEgZm9yZWlnbiB0cmVlLCB3aGljaCBpcyBzaW1wbHkgYWhlYWQgb2YgJEggKGkuZS4gd2UgYXJlIGluIGEKLWZhc3QgZm9yd2FyZCBzaXR1YXRpb24pLgorZmFzdC1mb3J3YXJkIHNpdHVhdGlvbikuCiAKLVdoZW4gdHdvIHRyZWVzIGFyZSBzcGVjaWZpZWQsIHRoZSB1c2VyIGlzIHRlbGxpbmcgJ2dpdC1yZWFkLXRyZWUnCitXaGVuIHR3byB0cmVlcyBhcmUgc3BlY2lmaWVkLCB0aGUgdXNlciBpcyB0ZWxsaW5nICdnaXQgcmVhZC10cmVlJwogdGhlIGZvbGxvd2luZzoKIAogICAgICAxLiBUaGUgY3VycmVudCBpbmRleCBhbmQgd29yayB0cmVlIGlzIGRlcml2ZWQgZnJvbSAkSCwgYnV0Ci0gICAgICAgIHRoZSB1c2VyIG1heSBoYXZlIGxvY2FsIGNoYW5nZXMgaW4gdGhlbSBzaW5jZSAkSDsKKwl0aGUgdXNlciBtYXkgaGF2ZSBsb2NhbCBjaGFuZ2VzIGluIHRoZW0gc2luY2UgJEguCiAKICAgICAgMi4gVGhlIHVzZXIgd2FudHMgdG8gZmFzdC1mb3J3YXJkIHRvICRNLgogCiBJbiB0aGlzIGNhc2UsIHRoZSBgZ2l0IHJlYWQtdHJlZSAtbSAkSCAkTWAgY29tbWFuZCBtYWtlcyBzdXJlCiB0aGF0IG5vIGxvY2FsIGNoYW5nZSBpcyBsb3N0IGFzIHRoZSByZXN1bHQgb2YgdGhpcyAibWVyZ2UiLgotSGVyZSBhcmUgdGhlICJjYXJyeSBmb3J3YXJkIiBydWxlczoKK0hlcmUgYXJlIHRoZSAiY2FycnkgZm9yd2FyZCIgcnVsZXMsIHdoZXJlICJJIiBkZW5vdGVzIHRoZSBpbmRleCwKKyJjbGVhbiIgbWVhbnMgdGhhdCBpbmRleCBhbmQgd29yayB0cmVlIGNvaW5jaWRlLCBhbmQgImV4aXN0cyIvIm5vdGhpbmciCityZWZlciB0byB0aGUgcHJlc2VuY2Ugb2YgYSBwYXRoIGluIHRoZSBzcGVjaWZpZWQgY29tbWl0OgogCi0gICAgICAgIEkgKGluZGV4KSAgICAgICAgICAgSCAgICAgICAgTSAgICAgICAgUmVzdWx0CisJSSAgICAgICAgICAgICAgICAgICBIICAgICAgICBNICAgICAgICBSZXN1bHQKICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAwIG5vdGhpbmcgICAgICAgICAgICAgbm90aGluZyAgbm90aGluZyAgKGRvZXMgbm90IGhhcHBlbikKLSAgICAgIDEgbm90aGluZyAgICAgICAgICAgICBub3RoaW5nICBleGlzdHMgICB1c2UgTQotICAgICAgMiBub3RoaW5nICAgICAgICAgICAgIGV4aXN0cyAgIG5vdGhpbmcgIHJlbW92ZSBwYXRoIGZyb20gaW5kZXgKLSAgICAgIDMgbm90aGluZyAgICAgICAgICAgICBleGlzdHMgICBleGlzdHMsICB1c2UgTSBpZiAiaW5pdGlhbCBjaGVja291dCIKKyAgICAgMCAgbm90aGluZyAgICAgICAgICAgICBub3RoaW5nICBub3RoaW5nICAoZG9lcyBub3QgaGFwcGVuKQorICAgICAxICBub3RoaW5nICAgICAgICAgICAgIG5vdGhpbmcgIGV4aXN0cyAgIHVzZSBNCisgICAgIDIgIG5vdGhpbmcgICAgICAgICAgICAgZXhpc3RzICAgbm90aGluZyAgcmVtb3ZlIHBhdGggZnJvbSBpbmRleAorICAgICAzICBub3RoaW5nICAgICAgICAgICAgIGV4aXN0cyAgIGV4aXN0cywgIHVzZSBNIGlmICJpbml0aWFsIGNoZWNrb3V0IiwKIAkJCQkgICAgIEggPT0gTSAgIGtlZXAgaW5kZXggb3RoZXJ3aXNlCi0JCQkJICAgICBleGlzdHMgICBmYWlsCisJCQkJICAgICBleGlzdHMsICBmYWlsCiAJCQkJICAgICBIICE9IE0KIAogICAgICAgICBjbGVhbiBJPT1IICBJPT1NCiAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICA0IHllcyAgIE4vQSAgIE4vQSAgICAgbm90aGluZyAgbm90aGluZyAga2VlcCBpbmRleAotICAgICAgNSBubyAgICBOL0EgICBOL0EgICAgIG5vdGhpbmcgIG5vdGhpbmcgIGtlZXAgaW5kZXgKKyAgICAgNCAgeWVzICAgTi9BICAgTi9BICAgICBub3RoaW5nICBub3RoaW5nICBrZWVwIGluZGV4CisgICAgIDUgIG5vICAgIE4vQSAgIE4vQSAgICAgbm90aGluZyAgbm90aGluZyAga2VlcCBpbmRleAogCi0gICAgICA2IHllcyAgIE4vQSAgIHllcyAgICAgbm90aGluZyAgZXhpc3RzICAga2VlcCBpbmRleAotICAgICAgNyBubyAgICBOL0EgICB5ZXMgICAgIG5vdGhpbmcgIGV4aXN0cyAgIGtlZXAgaW5kZXgKLSAgICAgIDggeWVzICAgTi9BICAgbm8gICAgICBub3RoaW5nICBleGlzdHMgICBmYWlsCi0gICAgICA5IG5vICAgIE4vQSAgIG5vICAgICAgbm90aGluZyAgZXhpc3RzICAgZmFpbAorICAgICA2ICB5ZXMgICBOL0EgICB5ZXMgICAgIG5vdGhpbmcgIGV4aXN0cyAgIGtlZXAgaW5kZXgKKyAgICAgNyAgbm8gICAgTi9BICAgeWVzICAgICBub3RoaW5nICBleGlzdHMgICBrZWVwIGluZGV4CisgICAgIDggIHllcyAgIE4vQSAgIG5vICAgICAgbm90aGluZyAgZXhpc3RzICAgZmFpbAorICAgICA5ICBubyAgICBOL0EgICBubyAgICAgIG5vdGhpbmcgIGV4aXN0cyAgIGZhaWwKIAogICAgICAxMCB5ZXMgICB5ZXMgICBOL0EgICAgIGV4aXN0cyAgIG5vdGhpbmcgIHJlbW92ZSBwYXRoIGZyb20gaW5kZXgKICAgICAgMTEgbm8gICAgeWVzICAgTi9BICAgICBleGlzdHMgICBub3RoaW5nICBmYWlsCiAgICAgIDEyIHllcyAgIG5vICAgIE4vQSAgICAgZXhpc3RzICAgbm90aGluZyAgZmFpbAogICAgICAxMyBubyAgICBubyAgICBOL0EgICAgIGV4aXN0cyAgIG5vdGhpbmcgIGZhaWwKIAotICAgICAgICBjbGVhbiAoSD1NKQorCWNsZWFuIChIPT1NKQogICAgICAgIC0tLS0tLQogICAgICAxNCB5ZXMgICAgICAgICAgICAgICAgIGV4aXN0cyAgIGV4aXN0cyAgIGtlZXAgaW5kZXgKICAgICAgMTUgbm8gICAgICAgICAgICAgICAgICBleGlzdHMgICBleGlzdHMgICBrZWVwIGluZGV4CkBAIC0xOTUsMjYgKzIwNCwyNiBAQAogICAgICAyMSBubyAgICB5ZXMgICBubyAgICAgIGV4aXN0cyAgIGV4aXN0cyAgIGZhaWwKIAogSW4gYWxsICJrZWVwIGluZGV4IiBjYXNlcywgdGhlIGluZGV4IGVudHJ5IHN0YXlzIGFzIGluIHRoZQotb3JpZ2luYWwgaW5kZXggZmlsZS4gIElmIHRoZSBlbnRyeSB3ZXJlIG5vdCB1cCB0byBkYXRlLAotJ2dpdC1yZWFkLXRyZWUnIGtlZXBzIHRoZSBjb3B5IGluIHRoZSB3b3JrIHRyZWUgaW50YWN0IHdoZW4KK29yaWdpbmFsIGluZGV4IGZpbGUuICBJZiB0aGUgZW50cnkgaXMgbm90IHVwIHRvIGRhdGUsCisnZ2l0IHJlYWQtdHJlZScga2VlcHMgdGhlIGNvcHkgaW4gdGhlIHdvcmsgdHJlZSBpbnRhY3Qgd2hlbgogb3BlcmF0aW5nIHVuZGVyIHRoZSAtdSBmbGFnLgogCi1XaGVuIHRoaXMgZm9ybSBvZiAnZ2l0LXJlYWQtdHJlZScgcmV0dXJucyBzdWNjZXNzZnVsbHksIHlvdSBjYW4KLXNlZSB3aGF0ICJsb2NhbCBjaGFuZ2VzIiB5b3UgbWFkZSBhcmUgY2FycmllZCBmb3J3YXJkIGJ5IHJ1bm5pbmcKK1doZW4gdGhpcyBmb3JtIG9mICdnaXQgcmVhZC10cmVlJyByZXR1cm5zIHN1Y2Nlc3NmdWxseSwgeW91IGNhbgorc2VlIHdoaWNoIG9mIHRoZSAibG9jYWwgY2hhbmdlcyIgdGhhdCB5b3UgbWFkZSB3ZXJlIGNhcnJpZWQgZm9yd2FyZCBieSBydW5uaW5nCiBgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgJE1gLiAgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QKLW5lY2Vzc2FyaWx5IG1hdGNoIGBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAkSGAgd291bGQgaGF2ZQorbmVjZXNzYXJpbHkgbWF0Y2ggd2hhdCBgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgJEhgIHdvdWxkIGhhdmUKIHByb2R1Y2VkIGJlZm9yZSBzdWNoIGEgdHdvIHRyZWUgbWVyZ2UuICBUaGlzIGlzIGJlY2F1c2Ugb2YgY2FzZXMKIDE4IGFuZCAxOSAtLS0gaWYgeW91IGFscmVhZHkgaGFkIHRoZSBjaGFuZ2VzIGluICRNIChlLmcuIG1heWJlCiB5b3UgcGlja2VkIGl0IHVwIHZpYSBlLW1haWwgaW4gYSBwYXRjaCBmb3JtKSwgYGdpdCBkaWZmLWluZGV4CiAtLWNhY2hlZCAkSGAgd291bGQgaGF2ZSB0b2xkIHlvdSBhYm91dCB0aGUgY2hhbmdlIGJlZm9yZSB0aGlzCiBtZXJnZSwgYnV0IGl0IHdvdWxkIG5vdCBzaG93IGluIGBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAkTWAKLW91dHB1dCBhZnRlciB0d28tdHJlZSBtZXJnZS4KK291dHB1dCBhZnRlciB0aGUgdHdvLXRyZWUgbWVyZ2UuCiAKLUNhc2UgIzMgaXMgc2xpZ2h0bHkgdHJpY2t5IGFuZCBuZWVkcyBleHBsYW5hdGlvbi4gIFRoZSByZXN1bHQgZnJvbSB0aGlzCitDYXNlIDMgaXMgc2xpZ2h0bHkgdHJpY2t5IGFuZCBuZWVkcyBleHBsYW5hdGlvbi4gIFRoZSByZXN1bHQgZnJvbSB0aGlzCiBydWxlIGxvZ2ljYWxseSBzaG91bGQgYmUgdG8gcmVtb3ZlIHRoZSBwYXRoIGlmIHRoZSB1c2VyIHN0YWdlZCB0aGUgcmVtb3ZhbAogb2YgdGhlIHBhdGggYW5kIHRoZW4gc3dpdGNoaW5nIHRvIGEgbmV3IGJyYW5jaC4gIFRoYXQgaG93ZXZlciB3aWxsIHByZXZlbnQKIHRoZSBpbml0aWFsIGNoZWNrb3V0IGZyb20gaGFwcGVuaW5nLCBzbyB0aGUgcnVsZSBpcyBtb2RpZmllZCB0byB1c2UgTSAobmV3Ci10cmVlKSBvbmx5IHdoZW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBpbmRleCBpcyBlbXB0eS4gIE90aGVyd2lzZSB0aGUgcmVtb3ZhbAordHJlZSkgb25seSB3aGVuIHRoZSBjb250ZW50IG9mIHRoZSBpbmRleCBpcyBlbXB0eS4gIE90aGVyd2lzZSB0aGUgcmVtb3ZhbAogb2YgdGhlIHBhdGggaXMga2VwdCBhcyBsb25nIGFzICRIIGFuZCAkTSBhcmUgdGhlIHNhbWUuCiAKIDMtV2F5IE1lcmdlCkBAIC0yMjIsNyArMjMxLDcgQEAKIEVhY2ggImluZGV4IiBlbnRyeSBoYXMgdHdvIGJpdHMgd29ydGggb2YgInN0YWdlIiBzdGF0ZS4gc3RhZ2UgMCBpcyB0aGUKIG5vcm1hbCBvbmUsIGFuZCBpcyB0aGUgb25seSBvbmUgeW91J2Qgc2VlIGluIGFueSBraW5kIG9mIG5vcm1hbCB1c2UuCiAKLUhvd2V2ZXIsIHdoZW4geW91IGRvICdnaXQtcmVhZC10cmVlJyB3aXRoIHRocmVlIHRyZWVzLCB0aGUgInN0YWdlIgorSG93ZXZlciwgd2hlbiB5b3UgZG8gJ2dpdCByZWFkLXRyZWUnIHdpdGggdGhyZWUgdHJlZXMsIHRoZSAic3RhZ2UiCiBzdGFydHMgb3V0IGF0IDEuCiAKIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIGRvCkBAIC0yMzgsNyArMjQ3LDcgQEAKIGFzIDx0cmVlMT4sIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkIGFzIDx0cmVlMj4sIGFuZCB0aGUgb3RoZXIKIGJyYW5jaCBoZWFkIGFzIDx0cmVlMz4uCiAKLUZ1cnRoZXJtb3JlLCAnZ2l0LXJlYWQtdHJlZScgaGFzIHNwZWNpYWwtY2FzZSBsb2dpYyB0aGF0IHNheXM6IGlmIHlvdSBzZWUKK0Z1cnRoZXJtb3JlLCAnZ2l0IHJlYWQtdHJlZScgaGFzIHNwZWNpYWwtY2FzZSBsb2dpYyB0aGF0IHNheXM6IGlmIHlvdSBzZWUKIGEgZmlsZSB0aGF0IG1hdGNoZXMgaW4gYWxsIHJlc3BlY3RzIGluIHRoZSBmb2xsb3dpbmcgc3RhdGVzLCBpdAogImNvbGxhcHNlcyIgYmFjayB0byAic3RhZ2UwIjoKIApAQCAtMjU0LDcgKzI2Myw3IEBACiAgICAtIHN0YWdlIDEgYW5kIHN0YWdlIDMgYXJlIHRoZSBzYW1lIGFuZCBzdGFnZSAyIGlzIGRpZmZlcmVudCB0YWtlCiAgICAgIHN0YWdlIDIgKHdlIGRpZCBzb21ldGhpbmcgd2hpbGUgdGhleSBkaWQgbm90aGluZykKIAotVGhlICdnaXQtd3JpdGUtdHJlZScgY29tbWFuZCByZWZ1c2VzIHRvIHdyaXRlIGEgbm9uc2Vuc2ljYWwgdHJlZSwgYW5kIGl0CitUaGUgJ2dpdCB3cml0ZS10cmVlJyBjb21tYW5kIHJlZnVzZXMgdG8gd3JpdGUgYSBub25zZW5zaWNhbCB0cmVlLCBhbmQgaXQKIHdpbGwgY29tcGxhaW4gYWJvdXQgdW5tZXJnZWQgZW50cmllcyBpZiBpdCBzZWVzIGEgc2luZ2xlIGVudHJ5IHRoYXQgaXMgbm90CiBzdGFnZSAwLgogCkBAIC0yNzAsNyArMjc5LDcgQEAKIHBvcHVsYXRlZC4gIEhlcmUgaXMgYW4gb3V0bGluZSBvZiBob3cgdGhlIGFsZ29yaXRobSB3b3JrczoKIAogLSBpZiBhIGZpbGUgZXhpc3RzIGluIGlkZW50aWNhbCBmb3JtYXQgaW4gYWxsIHRocmVlIHRyZWVzLCBpdCB3aWxsCi0gIGF1dG9tYXRpY2FsbHkgY29sbGFwc2UgdG8gIm1lcmdlZCIgc3RhdGUgYnkgJ2dpdC1yZWFkLXRyZWUnLgorICBhdXRvbWF0aWNhbGx5IGNvbGxhcHNlIHRvICJtZXJnZWQiIHN0YXRlIGJ5ICdnaXQgcmVhZC10cmVlJy4KIAogLSBhIGZpbGUgdGhhdCBoYXMgX2FueV8gZGlmZmVyZW5jZSB3aGF0LXNvLWV2ZXIgaW4gdGhlIHRocmVlIHRyZWVzCiAgIHdpbGwgc3RheSBhcyBzZXBhcmF0ZSBlbnRyaWVzIGluIHRoZSBpbmRleC4gSXQncyB1cCB0byAicG9yY2VsYWluCkBAIC0yOTQsOCArMzAzLDggQEAKICAgICBtYXRjaGluZyAic3RhZ2UxIiBlbnRyeSBpZiBpdCBleGlzdHMgdG9vLiAgLi4gYWxsIHRoZSBub3JtYWwKICAgICB0cml2aWFsIHJ1bGVzIC4uCiAKLVlvdSB3b3VsZCBub3JtYWxseSB1c2UgJ2dpdC1tZXJnZS1pbmRleCcgd2l0aCBzdXBwbGllZAotJ2dpdC1tZXJnZS1vbmUtZmlsZScgdG8gZG8gdGhpcyBsYXN0IHN0ZXAuICBUaGUgc2NyaXB0IHVwZGF0ZXMKK1lvdSB3b3VsZCBub3JtYWxseSB1c2UgJ2dpdCBtZXJnZS1pbmRleCcgd2l0aCBzdXBwbGllZAorJ2dpdCBtZXJnZS1vbmUtZmlsZScgdG8gZG8gdGhpcyBsYXN0IHN0ZXAuICBUaGUgc2NyaXB0IHVwZGF0ZXMKIHRoZSBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIGFzIGl0IG1lcmdlcyBlYWNoIHBhdGggYW5kIGF0IHRoZQogZW5kIG9mIGEgc3VjY2Vzc2Z1bCBtZXJnZS4KIApAQCAtMzE3LDcgKzMyNiw3IEBACiAkIGdpdCBjaGVja291dC1pbmRleCAtZiAtdSAtYSAkSkMKIC0tLS0tLS0tLS0tLS0tLS0KIAotWW91IGRvIHJhbmRvbSBlZGl0cywgd2l0aG91dCBydW5uaW5nICdnaXQtdXBkYXRlLWluZGV4Jy4gIEFuZCB0aGVuCitZb3UgZG8gcmFuZG9tIGVkaXRzLCB3aXRob3V0IHJ1bm5pbmcgJ2dpdCB1cGRhdGUtaW5kZXgnLiAgQW5kIHRoZW4KIHlvdSBub3RpY2UgdGhhdCB0aGUgdGlwIG9mIHlvdXIgInVwc3RyZWFtIiB0cmVlIGhhcyBhZHZhbmNlZAogc2luY2UgeW91IHB1bGxlZCBmcm9tIGhpbToKIApAQCAtMzQzLDIwICszNTIsNjYgQEAKIHVwZGF0ZWQgdG8gdGhlIHJlc3VsdCBvZiB0aGUgbWVyZ2UuCiAKIEhvd2V2ZXIsIGlmIHlvdSBoYXZlIGxvY2FsIGNoYW5nZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSB0aGF0Ci13b3VsZCBiZSBvdmVyd3JpdHRlbiBieSB0aGlzIG1lcmdlLCAnZ2l0LXJlYWQtdHJlZScgd2lsbCByZWZ1c2UKK3dvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IHRoaXMgbWVyZ2UsICdnaXQgcmVhZC10cmVlJyB3aWxsIHJlZnVzZQogdG8gcnVuIHRvIHByZXZlbnQgeW91ciBjaGFuZ2VzIGZyb20gYmVpbmcgbG9zdC4KIAogSW4gb3RoZXIgd29yZHMsIHRoZXJlIGlzIG5vIG5lZWQgdG8gd29ycnkgYWJvdXQgd2hhdCBleGlzdHMgb25seQogaW4gdGhlIHdvcmtpbmcgdHJlZS4gIFdoZW4geW91IGhhdmUgbG9jYWwgY2hhbmdlcyBpbiBhIHBhcnQgb2YKIHRoZSBwcm9qZWN0IHRoYXQgaXMgbm90IGludm9sdmVkIGluIHRoZSBtZXJnZSwgeW91ciBjaGFuZ2VzIGRvCiBub3QgaW50ZXJmZXJlIHdpdGggdGhlIG1lcmdlLCBhbmQgYXJlIGtlcHQgaW50YWN0LiAgV2hlbiB0aGV5Ci0qZG8qIGludGVyZmVyZSwgdGhlIG1lcmdlIGRvZXMgbm90IGV2ZW4gc3RhcnQgKCdnaXQtcmVhZC10cmVlJworKmRvKiBpbnRlcmZlcmUsIHRoZSBtZXJnZSBkb2VzIG5vdCBldmVuIHN0YXJ0ICgnZ2l0IHJlYWQtdHJlZScKIGNvbXBsYWlucyBsb3VkbHkgYW5kIGZhaWxzIHdpdGhvdXQgbW9kaWZ5aW5nIGFueXRoaW5nKS4gIEluIHN1Y2gKIGEgY2FzZSwgeW91IGNhbiBzaW1wbHkgY29udGludWUgZG9pbmcgd2hhdCB5b3Ugd2VyZSBpbiB0aGUKIG1pZGRsZSBvZiBkb2luZywgYW5kIHdoZW4geW91ciB3b3JraW5nIHRyZWUgaXMgcmVhZHkgKGkuZS4geW91CiBoYXZlIGZpbmlzaGVkIHlvdXIgd29yay1pbi1wcm9ncmVzcyksIGF0dGVtcHQgdGhlIG1lcmdlIGFnYWluLgogCiAKK1NwYXJzZSBjaGVja291dAorLS0tLS0tLS0tLS0tLS0tCisKKyJTcGFyc2UgY2hlY2tvdXQiIGFsbG93cyB0byBzcGFyc2VseSBwb3B1bGF0ZSB3b3JraW5nIGRpcmVjdG9yeS4KK0l0IHVzZXMgc2tpcC13b3JrdHJlZSBiaXQgKHNlZSBsaW5rZ2l0OmdpdC11cGRhdGUtaW5kZXhbMV0pIHRvIHRlbGwKK0dpdCB3aGV0aGVyIGEgZmlsZSBvbiB3b3JraW5nIGRpcmVjdG9yeSBpcyB3b3J0aCBsb29raW5nIGF0LgorCisiZ2l0IHJlYWQtdHJlZSIgYW5kIG90aGVyIG1lcmdlLWJhc2VkIGNvbW1hbmRzICgiZ2l0IG1lcmdlIiwgImdpdAorY2hlY2tvdXQiLi4uKSBjYW4gaGVscCBtYWludGFpbmluZyBza2lwLXdvcmt0cmVlIGJpdG1hcCBhbmQgd29ya2luZworZGlyZWN0b3J5IHVwZGF0ZS4gYCRHSVRfRElSL2luZm8vc3BhcnNlLWNoZWNrb3V0YCBpcyB1c2VkIHRvCitkZWZpbmUgdGhlIHNraXAtd29ya3RyZWUgcmVmZXJlbmNlIGJpdG1hcC4gV2hlbiAiZ2l0IHJlYWQtdHJlZSIgbmVlZHMKK3RvIHVwZGF0ZSB3b3JraW5nIGRpcmVjdG9yeSwgaXQgd2lsbCByZXNldCBza2lwLXdvcmt0cmVlIGJpdCBpbiBpbmRleAorYmFzZWQgb24gdGhpcyBmaWxlLCB3aGljaCB1c2VzIHRoZSBzYW1lIHN5bnRheCBhcyAuZ2l0aWdub3JlIGZpbGVzLgorSWYgYW4gZW50cnkgbWF0Y2hlcyBhIHBhdHRlcm4gaW4gdGhpcyBmaWxlLCBza2lwLXdvcmt0cmVlIHdpbGwgYmUKK3NldCBvbiB0aGF0IGVudHJ5LiBPdGhlcndpc2UsIHNraXAtd29ya3RyZWUgd2lsbCBiZSB1bnNldC4KKworVGhlbiBpdCBjb21wYXJlcyB0aGUgbmV3IHNraXAtd29ya3RyZWUgdmFsdWUgd2l0aCB0aGUgcHJldmlvdXMgb25lLiBJZgorc2tpcC13b3JrdHJlZSB0dXJucyBmcm9tIHVuc2V0IHRvIHNldCwgaXQgd2lsbCBhZGQgdGhlIGNvcnJlc3BvbmRpbmcKK2ZpbGUgYmFjay4gSWYgaXQgdHVybnMgZnJvbSBzZXQgdG8gdW5zZXQsIHRoYXQgZmlsZSB3aWxsIGJlIHJlbW92ZWQuCisKK1doaWxlIGAkR0lUX0RJUi9pbmZvL3NwYXJzZS1jaGVja291dGAgaXMgdXN1YWxseSB1c2VkIHRvIHNwZWNpZnkgd2hhdAorZmlsZXMgYXJlIGluLiBZb3UgY2FuIGFsc28gc3BlY2lmeSB3aGF0IGZpbGVzIGFyZSBfbm90XyBpbiwgdXNpbmcKK25lZ2F0ZSBwYXR0ZXJucy4gRm9yIGV4YW1wbGUsIHRvIHJlbW92ZSBmaWxlICJ1bndhbnRlZCI6CisKKy0tLS0tLS0tLS0tLS0tLS0KKyoKKyF1bndhbnRlZAorLS0tLS0tLS0tLS0tLS0tLQorCitBbm90aGVyIHRyaWNreSB0aGluZyBpcyBmdWxseSByZXBvcHVsYXRpbmcgd29ya2luZyBkaXJlY3Rvcnkgd2hlbiB5b3UKK25vIGxvbmdlciB3YW50IHNwYXJzZSBjaGVja291dC4gWW91IGNhbm5vdCBqdXN0IGRpc2FibGUgInNwYXJzZQorY2hlY2tvdXQiIGJlY2F1c2Ugc2tpcC13b3JrdHJlZSBhcmUgc3RpbGwgaW4gdGhlIGluZGV4IGFuZCB5b3Ugd29ya2luZworZGlyZWN0b3J5IGlzIHN0aWxsIHNwYXJzZWx5IHBvcHVsYXRlZC4gWW91IHNob3VsZCByZS1wb3B1bGF0ZSB3b3JraW5nCitkaXJlY3Rvcnkgd2l0aCB0aGUgYCRHSVRfRElSL2luZm8vc3BhcnNlLWNoZWNrb3V0YCBmaWxlIGNvbnRlbnQgYXMKK2ZvbGxvd3M6CisKKy0tLS0tLS0tLS0tLS0tLS0KKyoKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlbiB5b3UgY2FuIGRpc2FibGUgc3BhcnNlIGNoZWNrb3V0LiBTcGFyc2UgY2hlY2tvdXQgc3VwcG9ydCBpbiAiZ2l0CityZWFkLXRyZWUiIGFuZCBzaW1pbGFyIGNvbW1hbmRzIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFlvdSBuZWVkIHRvCit0dXJuIGBjb3JlLnNwYXJzZUNoZWNrb3V0YCBvbiBpbiBvcmRlciB0byBoYXZlIHNwYXJzZSBjaGVja291dAorc3VwcG9ydC4KKworCiBTRUUgQUxTTwogLS0tLS0tLS0KIGxpbmtnaXQ6Z2l0LXdyaXRlLXRyZWVbMV07IGxpbmtnaXQ6Z2l0LWxzLWZpbGVzWzFdOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmViYXNlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlYmFzZS50eHQKaW5kZXggM2Q1YTA2Ni4uODIzZjJhNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmViYXNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZWJhc2UudHh0CkBAIC0xNyw3ICsxNyw3IEBACiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQotSWYgPGJyYW5jaD4gaXMgc3BlY2lmaWVkLCAnZ2l0LXJlYmFzZScgd2lsbCBwZXJmb3JtIGFuIGF1dG9tYXRpYworSWYgPGJyYW5jaD4gaXMgc3BlY2lmaWVkLCAnZ2l0IHJlYmFzZScgd2lsbCBwZXJmb3JtIGFuIGF1dG9tYXRpYwogYGdpdCBjaGVja291dCA8YnJhbmNoPmAgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuICBPdGhlcndpc2UKIGl0IHJlbWFpbnMgb24gdGhlIGN1cnJlbnQgYnJhbmNoLgogCkBAIC0xNzAsOCArMTcwLDggQEAKIHBhcnQgb2YgdG9waWNBLiAgTm90ZSB0aGF0IHRoZSBhcmd1bWVudCB0byAtLW9udG8gYW5kIHRoZSA8dXBzdHJlYW0+CiBwYXJhbWV0ZXIgY2FuIGJlIGFueSB2YWxpZCBjb21taXQtaXNoLgogCi1JbiBjYXNlIG9mIGNvbmZsaWN0LCAnZ2l0LXJlYmFzZScgd2lsbCBzdG9wIGF0IHRoZSBmaXJzdCBwcm9ibGVtYXRpYyBjb21taXQKLWFuZCBsZWF2ZSBjb25mbGljdCBtYXJrZXJzIGluIHRoZSB0cmVlLiAgWW91IGNhbiB1c2UgJ2dpdC1kaWZmJyB0byBsb2NhdGUKK0luIGNhc2Ugb2YgY29uZmxpY3QsICdnaXQgcmViYXNlJyB3aWxsIHN0b3AgYXQgdGhlIGZpcnN0IHByb2JsZW1hdGljIGNvbW1pdAorYW5kIGxlYXZlIGNvbmZsaWN0IG1hcmtlcnMgaW4gdGhlIHRyZWUuICBZb3UgY2FuIHVzZSAnZ2l0IGRpZmYnIHRvIGxvY2F0ZQogdGhlIG1hcmtlcnMgKDw8PDw8PCkgYW5kIG1ha2UgZWRpdHMgdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3QuICBGb3IgZWFjaAogZmlsZSB5b3UgZWRpdCwgeW91IG5lZWQgdG8gdGVsbCBnaXQgdGhhdCB0aGUgY29uZmxpY3QgaGFzIGJlZW4gcmVzb2x2ZWQsCiB0eXBpY2FsbHkgdGhpcyB3b3VsZCBiZSBkb25lIHdpdGgKQEAgLTE4Nyw3ICsxODcsNyBAQAogICAgIGdpdCByZWJhc2UgLS1jb250aW51ZQogCiAKLUFsdGVybmF0aXZlbHksIHlvdSBjYW4gdW5kbyB0aGUgJ2dpdC1yZWJhc2UnIHdpdGgKK0FsdGVybmF0aXZlbHksIHlvdSBjYW4gdW5kbyB0aGUgJ2dpdCByZWJhc2UnIHdpdGgKIAogCiAgICAgZ2l0IHJlYmFzZSAtLWFib3J0CkBAIC0yMjgsMTQgKzIyOCwyNyBAQAogCVVzZSBtZXJnaW5nIHN0cmF0ZWdpZXMgdG8gcmViYXNlLiAgV2hlbiB0aGUgcmVjdXJzaXZlIChkZWZhdWx0KSBtZXJnZQogCXN0cmF0ZWd5IGlzIHVzZWQsIHRoaXMgYWxsb3dzIHJlYmFzZSB0byBiZSBhd2FyZSBvZiByZW5hbWVzIG9uIHRoZQogCXVwc3RyZWFtIHNpZGUuCisrCitOb3RlIHRoYXQgYSByZWJhc2UgbWVyZ2Ugd29ya3MgYnkgcmVwbGF5aW5nIGVhY2ggY29tbWl0IGZyb20gdGhlIHdvcmtpbmcKK2JyYW5jaCBvbiB0b3Agb2YgdGhlIDx1cHN0cmVhbT4gYnJhbmNoLiAgQmVjYXVzZSBvZiB0aGlzLCB3aGVuIGEgbWVyZ2UKK2NvbmZsaWN0IGhhcHBlbnMsIHRoZSBzaWRlIHJlcG9ydGVkIGFzICdvdXJzJyBpcyB0aGUgc28tZmFyIHJlYmFzZWQKK3Nlcmllcywgc3RhcnRpbmcgd2l0aCA8dXBzdHJlYW0+LCBhbmQgJ3RoZWlycycgaXMgdGhlIHdvcmtpbmcgYnJhbmNoLiAgSW4KK290aGVyIHdvcmRzLCB0aGUgc2lkZXMgYXJlIHN3YXBwZWQuCiAKIC1zIDxzdHJhdGVneT46OgogLS1zdHJhdGVneT08c3RyYXRlZ3k+OjoKLQlVc2UgdGhlIGdpdmVuIG1lcmdlIHN0cmF0ZWd5OyBjYW4gYmUgc3VwcGxpZWQgbW9yZSB0aGFuCi0Jb25jZSB0byBzcGVjaWZ5IHRoZW0gaW4gdGhlIG9yZGVyIHRoZXkgc2hvdWxkIGJlIHRyaWVkLgotCUlmIHRoZXJlIGlzIG5vIGAtc2Agb3B0aW9uLCBhIGJ1aWx0LWluIGxpc3Qgb2Ygc3RyYXRlZ2llcwotCWlzIHVzZWQgaW5zdGVhZCAoJ2dpdC1tZXJnZS1yZWN1cnNpdmUnIHdoZW4gbWVyZ2luZyBhIHNpbmdsZQotCWhlYWQsICdnaXQtbWVyZ2Utb2N0b3B1cycgb3RoZXJ3aXNlKS4gIFRoaXMgaW1wbGllcyAtLW1lcmdlLgorCVVzZSB0aGUgZ2l2ZW4gbWVyZ2Ugc3RyYXRlZ3kuCisJSWYgdGhlcmUgaXMgbm8gYC1zYCBvcHRpb24gJ2dpdCBtZXJnZS1yZWN1cnNpdmUnIGlzIHVzZWQKKwlpbnN0ZWFkLiAgVGhpcyBpbXBsaWVzIC0tbWVyZ2UuCisrCitCZWNhdXNlICdnaXQgcmViYXNlJyByZXBsYXlzIGVhY2ggY29tbWl0IGZyb20gdGhlIHdvcmtpbmcgYnJhbmNoCitvbiB0b3Agb2YgdGhlIDx1cHN0cmVhbT4gYnJhbmNoIHVzaW5nIHRoZSBnaXZlbiBzdHJhdGVneSwgdXNpbmcKK3RoZSAnb3Vycycgc3RyYXRlZ3kgc2ltcGx5IGRpc2NhcmRzIGFsbCBwYXRjaGVzIGZyb20gdGhlIDxicmFuY2g+LAord2hpY2ggbWFrZXMgbGl0dGxlIHNlbnNlLgorCistcTo6CistLXF1aWV0OjoKKwlCZSBxdWlldC4gSW1wbGllcyAtLW5vLXN0YXQuCiAKIC12OjoKIC0tdmVyYm9zZTo6CkBAIC0yNjUsMTQgKzI3OCwxNSBAQAogCWV4aXQgd2l0aCB0aGUgbWVzc2FnZSAiQ3VycmVudCBicmFuY2ggaXMgdXAgdG8gZGF0ZSIgaW4gc3VjaCBhCiAJc2l0dWF0aW9uLgogCistLWlnbm9yZS13aGl0ZXNwYWNlOjoKIC0td2hpdGVzcGFjZT08b3B0aW9uPjo6Ci0JVGhpcyBmbGFnIGlzIHBhc3NlZCB0byB0aGUgJ2dpdC1hcHBseScgcHJvZ3JhbQorCVRoZXNlIGZsYWcgYXJlIHBhc3NlZCB0byB0aGUgJ2dpdCBhcHBseScgcHJvZ3JhbQogCShzZWUgbGlua2dpdDpnaXQtYXBwbHlbMV0pIHRoYXQgYXBwbGllcyB0aGUgcGF0Y2guCiAJSW5jb21wYXRpYmxlIHdpdGggdGhlIC0taW50ZXJhY3RpdmUgb3B0aW9uLgogCiAtLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlOjoKIC0taWdub3JlLWRhdGU6OgotCVRoZXNlIGZsYWdzIGFyZSBwYXNzZWQgdG8gJ2dpdC1hbScgdG8gZWFzaWx5IGNoYW5nZSB0aGUgZGF0ZXMKKwlUaGVzZSBmbGFncyBhcmUgcGFzc2VkIHRvICdnaXQgYW0nIHRvIGVhc2lseSBjaGFuZ2UgdGhlIGRhdGVzCiAJb2YgdGhlIHJlYmFzZWQgY29tbWl0cyAoc2VlIGxpbmtnaXQ6Z2l0LWFtWzFdKS4KIAogLWk6OgpAQCAtMjk0LDEyICszMDgsMjIgQEAKIAlyb290IGNvbW1pdHMgd2lsbCBiZSByZXdyaXR0ZW4gdG8gaGF2ZSA8bmV3YmFzZT4gYXMgcGFyZW50CiAJaW5zdGVhZC4KIAorLS1hdXRvc3F1YXNoOjoKKwlXaGVuIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UgYmVnaW5zIHdpdGggInNxdWFzaCEgLi4uIiAob3IKKwkiZml4dXAhIC4uLiIpLCBhbmQgdGhlcmUgaXMgYSBjb21taXQgd2hvc2UgdGl0bGUgYmVnaW5zIHdpdGgKKwl0aGUgc2FtZSAuLi4sIGF1dG9tYXRpY2FsbHkgbW9kaWZ5IHRoZSB0b2RvIGxpc3Qgb2YgcmViYXNlIC1pCisJc28gdGhhdCB0aGUgY29tbWl0IG1hcmtlZCBmb3Igc3F1YXNoaW5nIGNvbWVzIHJpZ2h0IGFmdGVyIHRoZQorCWNvbW1pdCB0byBiZSBtb2RpZmllZCwgYW5kIGNoYW5nZSB0aGUgYWN0aW9uIG9mIHRoZSBtb3ZlZAorCWNvbW1pdCBmcm9tIGBwaWNrYCB0byBgc3F1YXNoYCAob3IgYGZpeHVwYCkuCisrCitUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIHdoZW4gJy0taW50ZXJhY3RpdmUnIG9wdGlvbiBpcyB1c2VkLgorCiBpbmNsdWRlOjptZXJnZS1zdHJhdGVnaWVzLnR4dFtdCiAKIE5PVEVTCiAtLS0tLQogCi1Zb3Ugc2hvdWxkIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB1c2luZyAnZ2l0LXJlYmFzZScgb24gYQorWW91IHNob3VsZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdXNpbmcgJ2dpdCByZWJhc2UnIG9uIGEKIHJlcG9zaXRvcnkgdGhhdCB5b3Ugc2hhcmUuICBTZWUgYWxzbyBSRUNPVkVSSU5HIEZST00gVVBTVFJFQU0gUkVCQVNFCiBiZWxvdy4KIApAQCAtMzU1LDI3ICszNzksMzMgQEAKIC4uLgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGUgb25lbGluZSBkZXNjcmlwdGlvbnMgYXJlIHB1cmVseSBmb3IgeW91ciBwbGVhc3VyZTsgJ2dpdC1yZWJhc2UnIHdpbGwKK1RoZSBvbmVsaW5lIGRlc2NyaXB0aW9ucyBhcmUgcHVyZWx5IGZvciB5b3VyIHBsZWFzdXJlOyAnZ2l0IHJlYmFzZScgd2lsbAogbm90IGxvb2sgYXQgdGhlbSBidXQgYXQgdGhlIGNvbW1pdCBuYW1lcyAoImRlYWRiZWUiIGFuZCAiZmExYWZlMSIgaW4gdGhpcwogZXhhbXBsZSksIHNvIGRvIG5vdCBkZWxldGUgb3IgZWRpdCB0aGUgbmFtZXMuCiAKIEJ5IHJlcGxhY2luZyB0aGUgY29tbWFuZCAicGljayIgd2l0aCB0aGUgY29tbWFuZCAiZWRpdCIsIHlvdSBjYW4gdGVsbAotJ2dpdC1yZWJhc2UnIHRvIHN0b3AgYWZ0ZXIgYXBwbHlpbmcgdGhhdCBjb21taXQsIHNvIHRoYXQgeW91IGNhbiBlZGl0CisnZ2l0IHJlYmFzZScgdG8gc3RvcCBhZnRlciBhcHBseWluZyB0aGF0IGNvbW1pdCwgc28gdGhhdCB5b3UgY2FuIGVkaXQKIHRoZSBmaWxlcyBhbmQvb3IgdGhlIGNvbW1pdCBtZXNzYWdlLCBhbWVuZCB0aGUgY29tbWl0LCBhbmQgY29udGludWUKIHJlYmFzaW5nLgogCi1JZiB5b3Ugd2FudCB0byBmb2xkIHR3byBvciBtb3JlIGNvbW1pdHMgaW50byBvbmUsIHJlcGxhY2UgdGhlIGNvbW1hbmQKLSJwaWNrIiB3aXRoICJzcXVhc2giIGZvciB0aGUgc2Vjb25kIGFuZCBzdWJzZXF1ZW50IGNvbW1pdC4gIElmIHRoZQotY29tbWl0cyBoYWQgZGlmZmVyZW50IGF1dGhvcnMsIGl0IHdpbGwgYXR0cmlidXRlIHRoZSBzcXVhc2hlZCBjb21taXQgdG8KLXRoZSBhdXRob3Igb2YgdGhlIGZpcnN0IGNvbW1pdC4KK0lmIHlvdSBqdXN0IHdhbnQgdG8gZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIGEgY29tbWl0LCByZXBsYWNlIHRoZQorY29tbWFuZCAicGljayIgd2l0aCB0aGUgY29tbWFuZCAicmV3b3JkIi4KIAotSW4gYm90aCBjYXNlcywgb3Igd2hlbiBhICJwaWNrIiBkb2VzIG5vdCBzdWNjZWVkIChiZWNhdXNlIG9mIG1lcmdlCi1lcnJvcnMpLCB0aGUgbG9vcCB3aWxsIHN0b3AgdG8gbGV0IHlvdSBmaXggdGhpbmdzLCBhbmQgeW91IGNhbiBjb250aW51ZQotdGhlIGxvb3Agd2l0aCBgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlYC4KK0lmIHlvdSB3YW50IHRvIGZvbGQgdHdvIG9yIG1vcmUgY29tbWl0cyBpbnRvIG9uZSwgcmVwbGFjZSB0aGUgY29tbWFuZAorInBpY2siIGZvciB0aGUgc2Vjb25kIGFuZCBzdWJzZXF1ZW50IGNvbW1pdHMgd2l0aCAic3F1YXNoIiBvciAiZml4dXAiLgorSWYgdGhlIGNvbW1pdHMgaGFkIGRpZmZlcmVudCBhdXRob3JzLCB0aGUgZm9sZGVkIGNvbW1pdCB3aWxsIGJlCithdHRyaWJ1dGVkIHRvIHRoZSBhdXRob3Igb2YgdGhlIGZpcnN0IGNvbW1pdC4gIFRoZSBzdWdnZXN0ZWQgY29tbWl0CittZXNzYWdlIGZvciB0aGUgZm9sZGVkIGNvbW1pdCBpcyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgY29tbWl0CittZXNzYWdlcyBvZiB0aGUgZmlyc3QgY29tbWl0IGFuZCBvZiB0aG9zZSB3aXRoIHRoZSAic3F1YXNoIiBjb21tYW5kLAorYnV0IG9taXRzIHRoZSBjb21taXQgbWVzc2FnZXMgb2YgY29tbWl0cyB3aXRoIHRoZSAiZml4dXAiIGNvbW1hbmQuCisKKydnaXQgcmViYXNlJyB3aWxsIHN0b3Agd2hlbiAicGljayIgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCAiZWRpdCIgb3IKK3doZW4gYSBjb21tYW5kIGZhaWxzIGR1ZSB0byBtZXJnZSBlcnJvcnMuIFdoZW4geW91IGFyZSBkb25lIGVkaXRpbmcKK2FuZC9vciByZXNvbHZpbmcgY29uZmxpY3RzIHlvdSBjYW4gY29udGludWUgd2l0aCBgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlYC4KIAogRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIHJlb3JkZXIgdGhlIGxhc3QgNSBjb21taXRzLCBzdWNoIHRoYXQgd2hhdAogd2FzIEhFQUR+NCBiZWNvbWVzIHRoZSBuZXcgSEVBRC4gVG8gYWNoaWV2ZSB0aGF0LCB5b3Ugd291bGQgY2FsbAotJ2dpdC1yZWJhc2UnIGxpa2UgdGhpczoKKydnaXQgcmViYXNlJyBsaWtlIHRoaXM6CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICQgZ2l0IHJlYmFzZSAtaSBIRUFEfjUKQEAgLTQwNSw3ICs0MzUsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0KIAogSW4gaW50ZXJhY3RpdmUgbW9kZSwgeW91IGNhbiBtYXJrIGNvbW1pdHMgd2l0aCB0aGUgYWN0aW9uICJlZGl0Ii4gIEhvd2V2ZXIsCi10aGlzIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gdGhhdCAnZ2l0LXJlYmFzZScgZXhwZWN0cyB0aGUgcmVzdWx0IG9mIHRoaXMKK3RoaXMgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0ICdnaXQgcmViYXNlJyBleHBlY3RzIHRoZSByZXN1bHQgb2YgdGhpcwogZWRpdCB0byBiZSBleGFjdGx5IG9uZSBjb21taXQuICBJbmRlZWQsIHlvdSBjYW4gdW5kbyB0aGUgY29tbWl0LCBvciB5b3UgY2FuCiBhZGQgb3RoZXIgY29tbWl0cy4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gc3BsaXQgYSBjb21taXQgaW50byB0d286CiAKQEAgLTQyMSw3ICs0NTEsNyBAQAogCiAtIE5vdyBhZGQgdGhlIGNoYW5nZXMgdG8gdGhlIGluZGV4IHRoYXQgeW91IHdhbnQgdG8gaGF2ZSBpbiB0aGUgZmlyc3QKICAgY29tbWl0LiAgWW91IGNhbiB1c2UgYGdpdCBhZGRgIChwb3NzaWJseSBpbnRlcmFjdGl2ZWx5KSBvcgotICAnZ2l0LWd1aScgKG9yIGJvdGgpIHRvIGRvIHRoYXQuCisgICdnaXQgZ3VpJyAob3IgYm90aCkgdG8gZG8gdGhhdC4KIAogLSBDb21taXQgdGhlIG5vdy1jdXJyZW50IGluZGV4IHdpdGggd2hhdGV2ZXIgY29tbWl0IG1lc3NhZ2UgaXMgYXBwcm9wcmlhdGUKICAgbm93LgpAQCAtNDMyLDcgKzQ2Miw3IEBACiAKIElmIHlvdSBhcmUgbm90IGFic29sdXRlbHkgc3VyZSB0aGF0IHRoZSBpbnRlcm1lZGlhdGUgcmV2aXNpb25zIGFyZQogY29uc2lzdGVudCAodGhleSBjb21waWxlLCBwYXNzIHRoZSB0ZXN0c3VpdGUsIGV0Yy4pIHlvdSBzaG91bGQgdXNlCi0nZ2l0LXN0YXNoJyB0byBzdGFzaCBhd2F5IHRoZSBub3QteWV0LWNvbW1pdHRlZCBjaGFuZ2VzCisnZ2l0IHN0YXNoJyB0byBzdGFzaCBhd2F5IHRoZSBub3QteWV0LWNvbW1pdHRlZCBjaGFuZ2VzCiBhZnRlciBlYWNoIGNvbW1pdCwgdGVzdCwgYW5kIGFtZW5kIHRoZSBjb21taXQgaWYgZml4ZXMgYXJlIG5lY2Vzc2FyeS4KIAogCkBAIC00OTUsOCArNTI1LDggQEAKIEhhcmQgY2FzZTogVGhlIGNoYW5nZXMgYXJlIG5vdCB0aGUgc2FtZS46OgogCiAJVGhpcyBoYXBwZW5zIGlmIHRoZSAnc3Vic3lzdGVtJyByZWJhc2UgaGFkIGNvbmZsaWN0cywgb3IgdXNlZAotCWBcLS1pbnRlcmFjdGl2ZWAgdG8gb21pdCwgZWRpdCwgb3Igc3F1YXNoIGNvbW1pdHM7IG9yIGlmIHRoZQotCXVwc3RyZWFtIHVzZWQgb25lIG9mIGBjb21taXQgXC0tYW1lbmRgLCBgcmVzZXRgLCBvcgorCWBcLS1pbnRlcmFjdGl2ZWAgdG8gb21pdCwgZWRpdCwgc3F1YXNoLCBvciBmaXh1cCBjb21taXRzOyBvcgorCWlmIHRoZSB1cHN0cmVhbSB1c2VkIG9uZSBvZiBgY29tbWl0IFwtLWFtZW5kYCwgYHJlc2V0YCwgb3IKIAlgZmlsdGVyLWJyYW5jaGAuCiAKIApAQCAtNTA3LDcgKzUzNyw3IEBACiAnc3Vic3lzdGVtJyBhcmUgbGl0ZXJhbGx5IHRoZSBzYW1lIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHJlYmFzZQogJ3N1YnN5c3RlbScgZGlkLgogCi1JbiB0aGF0IGNhc2UsIHRoZSBmaXggaXMgZWFzeSBiZWNhdXNlICdnaXQtcmViYXNlJyBrbm93cyB0byBza2lwCitJbiB0aGF0IGNhc2UsIHRoZSBmaXggaXMgZWFzeSBiZWNhdXNlICdnaXQgcmViYXNlJyBrbm93cyB0byBza2lwCiBjaGFuZ2VzIHRoYXQgYXJlIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgbmV3IHVwc3RyZWFtLiAgU28gaWYgeW91IHNheQogKGFzc3VtaW5nIHlvdSdyZSBvbiAndG9waWMnKQogLS0tLS0tLS0tLS0tCkBAIC01MzQsMTIgKzU2NCwxMiBAQAogICAgICAgZXhhbXBsZSwgYSBjb21taXQgdGhhdCB3YXMgcmVtb3ZlZCB2aWEgYGdpdCByZWJhc2UKICAgICAgIFwtLWludGVyYWN0aXZlYCB3aWxsIGJlICoqcmVzdXJyZWN0ZWQqKiEKIAotVGhlIGlkZWEgaXMgdG8gbWFudWFsbHkgdGVsbCAnZ2l0LXJlYmFzZScgIndoZXJlIHRoZSBvbGQgJ3N1YnN5c3RlbScKK1RoZSBpZGVhIGlzIHRvIG1hbnVhbGx5IHRlbGwgJ2dpdCByZWJhc2UnICJ3aGVyZSB0aGUgb2xkICdzdWJzeXN0ZW0nCiBlbmRlZCBhbmQgeW91ciAndG9waWMnIGJlZ2FuIiwgdGhhdCBpcywgd2hhdCB0aGUgb2xkIG1lcmdlLWJhc2UKIGJldHdlZW4gdGhlbSB3YXMuICBZb3Ugd2lsbCBoYXZlIHRvIGZpbmQgYSB3YXkgdG8gbmFtZSB0aGUgbGFzdCBjb21taXQKIG9mIHRoZSBvbGQgJ3N1YnN5c3RlbScsIGZvciBleGFtcGxlOgogCi0qIFdpdGggdGhlICdzdWJzeXN0ZW0nIHJlZmxvZzogYWZ0ZXIgJ2dpdC1mZXRjaCcsIHRoZSBvbGQgdGlwIG9mCisqIFdpdGggdGhlICdzdWJzeXN0ZW0nIHJlZmxvZzogYWZ0ZXIgJ2dpdCBmZXRjaCcsIHRoZSBvbGQgdGlwIG9mCiAgICdzdWJzeXN0ZW0nIGlzIGF0IGBzdWJzeXN0ZW1AXHsxfWAuICBTdWJzZXF1ZW50IGZldGNoZXMgd2lsbAogICBpbmNyZWFzZSB0aGUgbnVtYmVyLiAgKFNlZSBsaW5rZ2l0OmdpdC1yZWZsb2dbMV0uKQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWNlaXZlLXBhY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVjZWl2ZS1wYWNrLnR4dAppbmRleCA1MTRmMDNjLi4yNzkwZWViIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWNlaXZlLXBhY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlY2VpdmUtcGFjay50eHQKQEAgLTgsMTkgKzgsMTkgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0IHJlY2VpdmUtcGFjaycgPGRpcmVjdG9yeT4KKydnaXQtcmVjZWl2ZS1wYWNrJyA8ZGlyZWN0b3J5PgogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KLUludm9rZWQgYnkgJ2dpdC1zZW5kLXBhY2snIGFuZCB1cGRhdGVzIHRoZSByZXBvc2l0b3J5IHdpdGggdGhlCitJbnZva2VkIGJ5ICdnaXQgc2VuZC1wYWNrJyBhbmQgdXBkYXRlcyB0aGUgcmVwb3NpdG9yeSB3aXRoIHRoZQogaW5mb3JtYXRpb24gZmVkIGZyb20gdGhlIHJlbW90ZSBlbmQuCiAKIFRoaXMgY29tbWFuZCBpcyB1c3VhbGx5IG5vdCBpbnZva2VkIGRpcmVjdGx5IGJ5IHRoZSBlbmQgdXNlci4KLVRoZSBVSSBmb3IgdGhlIHByb3RvY29sIGlzIG9uIHRoZSAnZ2l0LXNlbmQtcGFjaycgc2lkZSwgYW5kIHRoZQorVGhlIFVJIGZvciB0aGUgcHJvdG9jb2wgaXMgb24gdGhlICdnaXQgc2VuZC1wYWNrJyBzaWRlLCBhbmQgdGhlCiBwcm9ncmFtIHBhaXIgaXMgbWVhbnQgdG8gYmUgdXNlZCB0byBwdXNoIHVwZGF0ZXMgdG8gcmVtb3RlCiByZXBvc2l0b3J5LiAgRm9yIHB1bGwgb3BlcmF0aW9ucywgc2VlIGxpbmtnaXQ6Z2l0LWZldGNoLXBhY2tbMV0uCiAKLVRoZSBjb21tYW5kIGFsbG93cyBmb3IgY3JlYXRpb24gYW5kIGZhc3QgZm9yd2FyZGluZyBvZiBzaGExIHJlZnMKK1RoZSBjb21tYW5kIGFsbG93cyBmb3IgY3JlYXRpb24gYW5kIGZhc3QtZm9yd2FyZGluZyBvZiBzaGExIHJlZnMKIChoZWFkcy90YWdzKSBvbiB0aGUgcmVtb3RlIGVuZCAoc3RyaWN0bHkgc3BlYWtpbmcsIGl0IGlzIHRoZQogbG9jYWwgZW5kICdnaXQtcmVjZWl2ZS1wYWNrJyBydW5zLCBidXQgdG8gdGhlIHVzZXIgd2hvIGlzIHNpdHRpbmcgYXQKIHRoZSBzZW5kLXBhY2sgZW5kLCBpdCBpcyB1cGRhdGluZyB0aGUgcmVtb3RlLiAgQ29uZnVzZWQ/KQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVmbG9nLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlZmxvZy50eHQKaW5kZXggN2Y3YTU0NC4uNGVhYTYyYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmVmbG9nLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZWZsb2cudHh0CkBAIC0xOCw5ICsxOCw3IEBACiBbdmVyc2VdCiAnZ2l0IHJlZmxvZyBleHBpcmUnIFstLWRyeS1ydW5dIFstLXN0YWxlLWZpeF0gWy0tdmVyYm9zZV0KIAlbLS1leHBpcmU9PHRpbWU+XSBbLS1leHBpcmUtdW5yZWFjaGFibGU9PHRpbWU+XSBbLS1hbGxdIDxyZWZzPi4uLgotKwogJ2dpdCByZWZsb2cgZGVsZXRlJyByZWZAXHtzcGVjaWZpZXJcfS4uLgotKwogJ2dpdCByZWZsb2cnIFsnc2hvdyddIFtsb2ctb3B0aW9uc10gWzxyZWY+XQogCiBSZWZsb2cgaXMgYSBtZWNoYW5pc20gdG8gcmVjb3JkIHdoZW4gdGhlIHRpcCBvZiBicmFuY2hlcyBhcmUKQEAgLTYwLDcgKzU4LDcgQEAKIAlyZWZzLgogKwogVGhpcyBjb21wdXRhdGlvbiBpbnZvbHZlcyB0cmF2ZXJzaW5nIGFsbCB0aGUgcmVhY2hhYmxlIG9iamVjdHMsIGkuZS4gaXQKLWhhcyB0aGUgc2FtZSBjb3N0IGFzICdnaXQtcHJ1bmUnLiAgRm9ydHVuYXRlbHksIG9uY2UgdGhpcyBpcyBydW4sIHdlCitoYXMgdGhlIHNhbWUgY29zdCBhcyAnZ2l0IHBydW5lJy4gIEZvcnR1bmF0ZWx5LCBvbmNlIHRoaXMgaXMgcnVuLCB3ZQogc2hvdWxkIG5vdCBoYXZlIHRvIGV2ZXIgd29ycnkgYWJvdXQgbWlzc2luZyBvYmplY3RzLCBiZWNhdXNlIHRoZSBjdXJyZW50CiBwcnVuZSBhbmQgcGFjay1vYmplY3RzIGtub3cgYWJvdXQgcmVmbG9ncyBhbmQgcHJvdGVjdCBvYmplY3RzIHJlZmVycmVkIGJ5CiB0aGVtLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVtb3RlLWhlbHBlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVtb3RlLWhlbHBlcnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNWY2MWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUtaGVscGVycy50eHQKQEAgLTAsMCArMSwyMDAgQEAKK2dpdC1yZW1vdGUtaGVscGVycygxKQorPT09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1yZW1vdGUtaGVscGVycyAtIEhlbHBlciBwcm9ncmFtcyBmb3IgaW50ZXJvcGVyYXRpb24gd2l0aCByZW1vdGUgZ2l0CisKK1NZTk9QU0lTCistLS0tLS0tLQorJ2dpdCByZW1vdGUtPHRyYW5zcG9ydD4nIDxyZW1vdGU+CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGVzZSBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgbm90IHVzZWQgZGlyZWN0bHkgYnkgZW5kIHVzZXJzLCBidXQgYXJlCitpbnZva2VkIGJ5IHZhcmlvdXMgZ2l0IHByb2dyYW1zIHRoYXQgaW50ZXJhY3Qgd2l0aCByZW1vdGUgcmVwb3NpdG9yaWVzCit3aGVuIHRoZSByZXBvc2l0b3J5IHRoZXkgd291bGQgb3BlcmF0ZSBvbiB3aWxsIGJlIGFjY2Vzc2VkIHVzaW5nCit0cmFuc3BvcnQgY29kZSBub3QgbGlua2VkIGludG8gdGhlIG1haW4gZ2l0IGJpbmFyeS4gVmFyaW91cyBwYXJ0aWN1bGFyCitoZWxwZXIgcHJvZ3JhbXMgd2lsbCBiZWhhdmUgYXMgZG9jdW1lbnRlZCBoZXJlLgorCitDT01NQU5EUworLS0tLS0tLS0KKworQ29tbWFuZHMgYXJlIGdpdmVuIGJ5IHRoZSBjYWxsZXIgb24gdGhlIGhlbHBlcidzIHN0YW5kYXJkIGlucHV0LCBvbmUgcGVyIGxpbmUuCisKKydjYXBhYmlsaXRpZXMnOjoKKwlMaXN0cyB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBoZWxwZXIsIG9uZSBwZXIgbGluZSwgZW5kaW5nCisJd2l0aCBhIGJsYW5rIGxpbmUuIEVhY2ggY2FwYWJpbGl0eSBtYXkgYmUgcHJlY2VkZWQgd2l0aCAnKicuCisJVGhpcyBtYXJrcyB0aGVtIG1hbmRhdG9yeSBmb3IgZ2l0IHZlcnNpb24gdXNpbmcgdGhlIHJlbW90ZQorCWhlbHBlciB0byB1bmRlcnN0YW5kICh1bmtub3duIG1hbmRhdG9yeSBjYXBhYmlsaXR5IGlzIGZhdGFsCisJZXJyb3IpLgorCisnbGlzdCc6OgorCUxpc3RzIHRoZSByZWZzLCBvbmUgcGVyIGxpbmUsIGluIHRoZSBmb3JtYXQgIjx2YWx1ZT4gPG5hbWU+CisJWzxhdHRyPiAuLi5dIi4gVGhlIHZhbHVlIG1heSBiZSBhIGhleCBzaGExIGhhc2gsICJAPGRlc3Q+IiBmb3IKKwlhIHN5bXJlZiwgb3IgIj8iIHRvIGluZGljYXRlIHRoYXQgdGhlIGhlbHBlciBjb3VsZCBub3QgZ2V0IHRoZQorCXZhbHVlIG9mIHRoZSByZWYuIEEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgYXR0cmlidXRlcyBmb2xsb3dzCisJdGhlIG5hbWU7IHVucmVjb2duaXplZCBhdHRyaWJ1dGVzIGFyZSBpZ25vcmVkLiBBZnRlciB0aGUKKwljb21wbGV0ZSBsaXN0LCBvdXRwdXRzIGEgYmxhbmsgbGluZS4KKysKK0lmICdwdXNoJyBpcyBzdXBwb3J0ZWQgdGhpcyBtYXkgYmUgY2FsbGVkIGFzICdsaXN0IGZvci1wdXNoJwordG8gb2J0YWluIHRoZSBjdXJyZW50IHJlZnMgcHJpb3IgdG8gc2VuZGluZyBvbmUgb3IgbW9yZSAncHVzaCcKK2NvbW1hbmRzIHRvIHRoZSBoZWxwZXIuCisKKydvcHRpb24nIDxuYW1lPiA8dmFsdWU+OjoKKwlTZXQgdGhlIHRyYW5zcG9ydCBoZWxwZXIgb3B0aW9uIDxuYW1lPiB0byA8dmFsdWU+LiAgT3V0cHV0cyBhCisJc2luZ2xlIGxpbmUgY29udGFpbmluZyBvbmUgb2YgJ29rJyAob3B0aW9uIHN1Y2Nlc3NmdWxseSBzZXQpLAorCSd1bnN1cHBvcnRlZCcgKG9wdGlvbiBub3QgcmVjb2duaXplZCkgb3IgJ2Vycm9yIDxtc2c+JworCShvcHRpb24gPG5hbWU+IGlzIHN1cHBvcnRlZCBidXQgPHZhbHVlPiBpcyBub3QgY29ycmVjdAorCWZvciBpdCkuICBPcHRpb25zIHNob3VsZCBiZSBzZXQgYmVmb3JlIG90aGVyIGNvbW1hbmRzLAorCWFuZCBtYXkgaG93IHRob3NlIGNvbW1hbmRzIGJlaGF2ZS4KKysKK1N1cHBvcnRlZCBpZiB0aGUgaGVscGVyIGhhcyB0aGUgIm9wdGlvbiIgY2FwYWJpbGl0eS4KKworJ2ZldGNoJyA8c2hhMT4gPG5hbWU+OjoKKwlGZXRjaGVzIHRoZSBnaXZlbiBvYmplY3QsIHdyaXRpbmcgdGhlIG5lY2Vzc2FyeSBvYmplY3RzCisJdG8gdGhlIGRhdGFiYXNlLiAgRmV0Y2ggY29tbWFuZHMgYXJlIHNlbnQgaW4gYSBiYXRjaCwgb25lCisJcGVyIGxpbmUsIGFuZCB0aGUgYmF0Y2ggaXMgdGVybWluYXRlZCB3aXRoIGEgYmxhbmsgbGluZS4KKwlPdXRwdXRzIGEgc2luZ2xlIGJsYW5rIGxpbmUgd2hlbiBhbGwgZmV0Y2ggY29tbWFuZHMgaW4gdGhlCisJc2FtZSBiYXRjaCBhcmUgY29tcGxldGUuIE9ubHkgb2JqZWN0cyB3aGljaCB3ZXJlIHJlcG9ydGVkCisJaW4gdGhlIHJlZiBsaXN0IHdpdGggYSBzaGExIG1heSBiZSBmZXRjaGVkIHRoaXMgd2F5LgorKworT3B0aW9uYWxseSBtYXkgb3V0cHV0IGEgJ2xvY2sgPGZpbGU+JyBsaW5lIGluZGljYXRpbmcgYSBmaWxlIHVuZGVyCitHSVRfRElSL29iamVjdHMvcGFjayB3aGljaCBpcyBrZWVwaW5nIGEgcGFjayB1bnRpbCByZWZzIGNhbiBiZQorc3VpdGFibHkgdXBkYXRlZC4KKysKK1N1cHBvcnRlZCBpZiB0aGUgaGVscGVyIGhhcyB0aGUgImZldGNoIiBjYXBhYmlsaXR5LgorCisncHVzaCcgKzxzcmM+Ojxkc3Q+OjoKKwlQdXNoZXMgdGhlIGdpdmVuIDxzcmM+IGNvbW1pdCBvciBicmFuY2ggbG9jYWxseSB0byB0aGUKKwlyZW1vdGUgYnJhbmNoIGRlc2NyaWJlZCBieSA8ZHN0Pi4gIEEgYmF0Y2ggc2VxdWVuY2Ugb2YKKwlvbmUgb3IgbW9yZSBwdXNoIGNvbW1hbmRzIGlzIHRlcm1pbmF0ZWQgd2l0aCBhIGJsYW5rIGxpbmUuCisrCitaZXJvIG9yIG1vcmUgcHJvdG9jb2wgb3B0aW9ucyBtYXkgYmUgZW50ZXJlZCBhZnRlciB0aGUgbGFzdCAncHVzaCcKK2NvbW1hbmQsIGJlZm9yZSB0aGUgYmF0Y2gncyB0ZXJtaW5hdGluZyBibGFuayBsaW5lLgorKworV2hlbiB0aGUgcHVzaCBpcyBjb21wbGV0ZSwgb3V0cHV0cyBvbmUgb3IgbW9yZSAnb2sgPGRzdD4nIG9yCisnZXJyb3IgPGRzdD4gPHdoeT4/JyBsaW5lcyB0byBpbmRpY2F0ZSBzdWNjZXNzIG9yIGZhaWx1cmUgb2YKK2VhY2ggcHVzaGVkIHJlZi4gIFRoZSBzdGF0dXMgcmVwb3J0IG91dHB1dCBpcyB0ZXJtaW5hdGVkIGJ5CithIGJsYW5rIGxpbmUuICBUaGUgb3B0aW9uIGZpZWxkIDx3aHk+IG1heSBiZSBxdW90ZWQgaW4gYSBDCitzdHlsZSBzdHJpbmcgaWYgaXQgY29udGFpbnMgYW4gTEYuCisrCitTdXBwb3J0ZWQgaWYgdGhlIGhlbHBlciBoYXMgdGhlICJwdXNoIiBjYXBhYmlsaXR5LgorCisnaW1wb3J0JyA8bmFtZT46OgorCVByb2R1Y2VzIGEgZmFzdC1pbXBvcnQgc3RyZWFtIHdoaWNoIGltcG9ydHMgdGhlIGN1cnJlbnQgdmFsdWUKKwlvZiB0aGUgbmFtZWQgcmVmLiBJdCBtYXkgYWRkaXRpb25hbGx5IGltcG9ydCBvdGhlciByZWZzIGFzCisJbmVlZGVkIHRvIGNvbnN0cnVjdCB0aGUgaGlzdG9yeSBlZmZpY2llbnRseS4gVGhlIHNjcmlwdCB3cml0ZXMKKwl0byBhIGhlbHBlci1zcGVjaWZpYyBwcml2YXRlIG5hbWVzcGFjZS4gVGhlIHZhbHVlIG9mIHRoZSBuYW1lZAorCXJlZiBzaG91bGQgYmUgd3JpdHRlbiB0byBhIGxvY2F0aW9uIGluIHRoaXMgbmFtZXNwYWNlIGRlcml2ZWQKKwlieSBhcHBseWluZyB0aGUgcmVmc3BlY3MgZnJvbSB0aGUgInJlZnNwZWMiIGNhcGFiaWxpdHkgdG8gdGhlCisJbmFtZSBvZiB0aGUgcmVmLgorKworU3VwcG9ydGVkIGlmIHRoZSBoZWxwZXIgaGFzIHRoZSAiaW1wb3J0IiBjYXBhYmlsaXR5LgorCisnY29ubmVjdCcgPHNlcnZpY2U+OjoKKwlDb25uZWN0cyB0byBnaXZlbiBzZXJ2aWNlLiBTdGFuZGFyZCBpbnB1dCBhbmQgc3RhbmRhcmQgb3V0cHV0CisJb2YgaGVscGVyIGFyZSBjb25uZWN0ZWQgdG8gc3BlY2lmaWVkIHNlcnZpY2UgKGdpdCBwcmVmaXggaXMKKwlpbmNsdWRlZCBpbiBzZXJ2aWNlIG5hbWUgc28gZS5nLiBmZXRjaGluZyB1c2VzICdnaXQtdXBsb2FkLXBhY2snCisJYXMgc2VydmljZSkgb24gcmVtb3RlIHNpZGUuIFZhbGlkIHJlcGxpZXMgdG8gdGhpcyBjb21tYW5kIGFyZQorCWVtcHR5IGxpbmUgKGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQpLCAnZmFsbGJhY2snIChubyBzbWFydAorCXRyYW5zcG9ydCBzdXBwb3J0LCBmYWxsIGJhY2sgdG8gZHVtYiB0cmFuc3BvcnRzKSBhbmQganVzdAorCWV4aXRpbmcgd2l0aCBlcnJvciBtZXNzYWdlIHByaW50ZWQgKGNhbid0IGNvbm5lY3QsIGRvbid0CisJYm90aGVyIHRyeWluZyB0byBmYWxsIGJhY2spLiBBZnRlciBsaW5lIGZlZWQgdGVybWluYXRpbmcgdGhlCisJcG9zaXRpdmUgKGVtcHR5KSByZXNwb25zZSwgdGhlIG91dHB1dCBvZiBzZXJ2aWNlIHN0YXJ0cy4gQWZ0ZXIKKwl0aGUgY29ubmVjdGlvbiBlbmRzLCB0aGUgcmVtb3RlIGhlbHBlciBleGl0cy4KKysKK1N1cHBvcnRlZCBpZiB0aGUgaGVscGVyIGhhcyB0aGUgImNvbm5lY3QiIGNhcGFiaWxpdHkuCisKK0lmIGEgZmF0YWwgZXJyb3Igb2NjdXJzLCB0aGUgcHJvZ3JhbSB3cml0ZXMgdGhlIGVycm9yIG1lc3NhZ2UgdG8KK3N0ZGVyciBhbmQgZXhpdHMuIFRoZSBjYWxsZXIgc2hvdWxkIGV4cGVjdCB0aGF0IGEgc3VpdGFibGUgZXJyb3IKK21lc3NhZ2UgaGFzIGJlZW4gcHJpbnRlZCBpZiB0aGUgY2hpbGQgY2xvc2VzIHRoZSBjb25uZWN0aW9uIHdpdGhvdXQKK2NvbXBsZXRpbmcgYSB2YWxpZCByZXNwb25zZSBmb3IgdGhlIGN1cnJlbnQgY29tbWFuZC4KKworQWRkaXRpb25hbCBjb21tYW5kcyBtYXkgYmUgc3VwcG9ydGVkLCBhcyBtYXkgYmUgZGV0ZXJtaW5lZCBmcm9tCitjYXBhYmlsaXRpZXMgcmVwb3J0ZWQgYnkgdGhlIGhlbHBlci4KKworQ0FQQUJJTElUSUVTCistLS0tLS0tLS0tLS0KKworJ2ZldGNoJzo6CisJVGhpcyBoZWxwZXIgc3VwcG9ydHMgdGhlICdmZXRjaCcgY29tbWFuZC4KKworJ29wdGlvbic6OgorCVRoaXMgaGVscGVyIHN1cHBvcnRzIHRoZSBvcHRpb24gY29tbWFuZC4KKworJ3B1c2gnOjoKKwlUaGlzIGhlbHBlciBzdXBwb3J0cyB0aGUgJ3B1c2gnIGNvbW1hbmQuCisKKydpbXBvcnQnOjoKKwlUaGlzIGhlbHBlciBzdXBwb3J0cyB0aGUgJ2ltcG9ydCcgY29tbWFuZC4KKworJ3JlZnNwZWMnICdzcGVjJzo6CisJV2hlbiB1c2luZyB0aGUgaW1wb3J0IGNvbW1hbmQsIGV4cGVjdCB0aGUgc291cmNlIHJlZiB0byBoYXZlCisJYmVlbiB3cml0dGVuIHRvIHRoZSBkZXN0aW5hdGlvbiByZWYuIFRoZSBlYXJsaWVzdCBhcHBsaWNhYmxlCisJcmVmc3BlYyB0YWtlcyBwcmVjZWRlbmNlLiBGb3IgZXhhbXBsZQorCSJyZWZzL2hlYWRzLyo6cmVmcy9zdm4vb3JpZ2luL2JyYW5jaGVzLyoiIG1lYW5zIHRoYXQsIGFmdGVyIGFuCisJImltcG9ydCByZWZzL2hlYWRzL25hbWUiLCB0aGUgc2NyaXB0IGhhcyB3cml0dGVuIHRvCisJcmVmcy9zdm4vb3JpZ2luL2JyYW5jaGVzL25hbWUuIElmIHRoaXMgY2FwYWJpbGl0eSBpcyB1c2VkIGF0CisJYWxsLCBpdCBtdXN0IGNvdmVyIGFsbCByZWZzIHJlcG9ydGVkIGJ5IHRoZSBsaXN0IGNvbW1hbmQ7IGlmCisJaXQgaXMgbm90IHVzZWQsIGl0IGlzIGVmZmVjdGl2ZWx5ICIqOioiCisKKydjb25uZWN0Jzo6CisJVGhpcyBoZWxwZXIgc3VwcG9ydHMgdGhlICdjb25uZWN0JyBjb21tYW5kLgorCitSRUYgTElTVCBBVFRSSUJVVEVTCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKydmb3ItcHVzaCc6OgorCVRoZSBjYWxsZXIgd2FudHMgdG8gdXNlIHRoZSByZWYgbGlzdCB0byBwcmVwYXJlIHB1c2gKKwljb21tYW5kcy4gIEEgaGVscGVyIG1pZ2h0IGNob3NlIHRvIGFjcXVpcmUgdGhlIHJlZiBsaXN0IGJ5CisJb3BlbmluZyBhIGRpZmZlcmVudCB0eXBlIG9mIGNvbm5lY3Rpb24gdG8gdGhlIGRlc3RpbmF0aW9uLgorCisndW5jaGFuZ2VkJzo6CisJVGhpcyByZWYgaXMgdW5jaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IGltcG9ydCBvciBmZXRjaCwgYWx0aG91Z2gKKwl0aGUgaGVscGVyIGNhbm5vdCBuZWNlc3NhcmlseSBkZXRlcm1pbmUgd2hhdCB2YWx1ZSB0aGF0IHByb2R1Y2VkLgorCitPUFRJT05TCistLS0tLS0tCisnb3B0aW9uIHZlcmJvc2l0eScgPE4+OjoKKwlDaGFuZ2UgdGhlIGxldmVsIG9mIG1lc3NhZ2VzIGRpc3BsYXllZCBieSB0aGUgaGVscGVyLgorCVdoZW4gTiBpcyAwIHRoZSBlbmQtdXNlciBoYXMgYXNrZWQgdGhlIHByb2Nlc3MgdG8gYmUKKwlxdWlldCwgYW5kIHRoZSBoZWxwZXIgc2hvdWxkIHByb2R1Y2Ugb25seSBlcnJvciBvdXRwdXQuCisJTiBvZiAxIGlzIHRoZSBkZWZhdWx0IGxldmVsIG9mIHZlcmJvc2l0eSwgaGlnaGVyIHZhbHVlcworCW9mIE4gY29ycmVzcG9uZCB0byB0aGUgbnVtYmVyIG9mIC12IGZsYWdzIHBhc3NlZCBvbiB0aGUKKwljb21tYW5kIGxpbmUuCisKKydvcHRpb24gcHJvZ3Jlc3MnIFx7J3RydWUnfCdmYWxzZSdcfTo6CisJRW5hYmxlIChvciBkaXNhYmxlKSBwcm9ncmVzcyBtZXNzYWdlcyBkaXNwbGF5ZWQgYnkgdGhlCisJdHJhbnNwb3J0IGhlbHBlciBkdXJpbmcgYSBjb21tYW5kLgorCisnb3B0aW9uIGRlcHRoJyA8ZGVwdGg+OjoKKwlEZWVwZW4gdGhlIGhpc3Rvcnkgb2YgYSBzaGFsbG93IHJlcG9zaXRvcnkuCisKKydvcHRpb24gZm9sbG93dGFncycgXHsndHJ1ZSd8J2ZhbHNlJ1x9OjoKKwlJZiBlbmFibGVkIHRoZSBoZWxwZXIgc2hvdWxkIGF1dG9tYXRpY2FsbHkgZmV0Y2ggYW5ub3RhdGVkCisJdGFnIG9iamVjdHMgaWYgdGhlIG9iamVjdCB0aGUgdGFnIHBvaW50cyBhdCB3YXMgdHJhbnNmZXJyZWQKKwlkdXJpbmcgdGhlIGZldGNoIGNvbW1hbmQuICBJZiB0aGUgdGFnIGlzIG5vdCBmZXRjaGVkIGJ5CisJdGhlIGhlbHBlciBhIHNlY29uZCBmZXRjaCBjb21tYW5kIHdpbGwgdXN1YWxseSBiZSBzZW50IHRvCisJYXNrIGZvciB0aGUgdGFnIHNwZWNpZmljYWxseS4gIFNvbWUgaGVscGVycyBtYXkgYmUgYWJsZSB0bworCXVzZSB0aGlzIG9wdGlvbiB0byBhdm9pZCBhIHNlY29uZCBuZXR3b3JrIGNvbm5lY3Rpb24uCisKKydvcHRpb24gZHJ5LXJ1bicgXHsndHJ1ZSd8J2ZhbHNlJ1x9OgorCUlmIHRydWUsIHByZXRlbmQgdGhlIG9wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LAorCWJ1dCBkb24ndCBhY3R1YWxseSBjaGFuZ2UgYW55IHJlcG9zaXRvcnkgZGF0YS4JRm9yIG1vc3QKKwloZWxwZXJzIHRoaXMgb25seSBhcHBsaWVzIHRvIHRoZSAncHVzaCcsIGlmIHN1cHBvcnRlZC4KKworJ29wdGlvbiBzZXJ2cGF0aCA8Yy1zdHlsZS1xdW90ZWQtcGF0aD4nOjoKKwlTZXQgc2VydmljZSBwYXRoICgtLXVwbG9hZC1wYWNrLCAtLXJlY2VpdmUtcGFjayBldGMuKSBmb3IKKwluZXh0IGNvbm5lY3QuIFJlbW90ZSBoZWxwZXIgTUFZIHN1cHBvcnQgdGhpcyBvcHRpb24uIFJlbW90ZQorCWhlbHBlciBNVVNUIE5PVCByZWx5IG9uIHRoaXMgb3B0aW9uIGJlaW5nIHNldCBiZWZvcmUKKwljb25uZWN0IHJlcXVlc3Qgb2NjdXJzLgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCitEb2N1bWVudGF0aW9uIGJ5IERhbmllbCBCYXJrYWxvdyBhbmQgSWxhcmkgTGl1c3ZhYXJhCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVtb3RlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS50eHQKaW5kZXggODJhM2QyOS4uM2ZjNTk5YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmVtb3RlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUudHh0CkBAIC0xMywxMCArMTMsMTMgQEAKICdnaXQgcmVtb3RlIGFkZCcgWy10IDxicmFuY2g+XSBbLW0gPG1hc3Rlcj5dIFstZl0gWy0tbWlycm9yXSA8bmFtZT4gPHVybD4KICdnaXQgcmVtb3RlIHJlbmFtZScgPG9sZD4gPG5ldz4KICdnaXQgcmVtb3RlIHJtJyA8bmFtZT4KLSdnaXQgcmVtb3RlIHNldC1oZWFkJyA8bmFtZT4gWy1hIHwgLWQgfCA8YnJhbmNoPl0KLSdnaXQgcmVtb3RlIHNob3cnIFstbl0gPG5hbWU+CisnZ2l0IHJlbW90ZSBzZXQtaGVhZCcgPG5hbWU+ICgtYSB8IC1kIHwgPGJyYW5jaD4pCisnZ2l0IHJlbW90ZSBzZXQtdXJsJyBbLS1wdXNoXSA8bmFtZT4gPG5ld3VybD4gWzxvbGR1cmw+XQorJ2dpdCByZW1vdGUgc2V0LXVybCAtLWFkZCcgWy0tcHVzaF0gPG5hbWU+IDxuZXd1cmw+CisnZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlJyBbLS1wdXNoXSA8bmFtZT4gPHVybD4KKydnaXQgcmVtb3RlJyBbLXYgfCAtLXZlcmJvc2VdICdzaG93JyBbLW5dIDxuYW1lPgogJ2dpdCByZW1vdGUgcHJ1bmUnIFstbiB8IC0tZHJ5LXJ1bl0gPG5hbWU+Ci0nZ2l0IHJlbW90ZSB1cGRhdGUnIFstcCB8IC0tcHJ1bmVdIFtncm91cCB8IHJlbW90ZV0uLi4KKydnaXQgcmVtb3RlJyBbLXYgfCAtLXZlcmJvc2VdICd1cGRhdGUnIFstcCB8IC0tcHJ1bmVdIFtncm91cCB8IHJlbW90ZV0uLi4KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC0zMCw2ICszMyw3IEBACiAtdjo6CiAtLXZlcmJvc2U6OgogCUJlIGEgbGl0dGxlIG1vcmUgdmVyYm9zZSBhbmQgc2hvdyByZW1vdGUgdXJsIGFmdGVyIG5hbWUuCisJTk9URTogVGhpcyBtdXN0IGJlIHBsYWNlZCBiZXR3ZWVuIGByZW1vdGVgIGFuZCBgc3ViY29tbWFuZGAuCiAKIAogQ09NTUFORFMKQEAgLTEwMCw2ICsxMDQsMjAgQEAKIGByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcmAgYWxyZWFkeSBleGlzdHM7IGlmIG5vdCBpdCBtdXN0IGJlIGZldGNoZWQgZmlyc3QuCiArCiAKKydzZXQtdXJsJzo6CisKK0NoYW5nZXMgVVJMIHJlbW90ZSBwb2ludHMgdG8uIFNldHMgZmlyc3QgVVJMIHJlbW90ZSBwb2ludHMgdG8gbWF0Y2hpbmcKK3JlZ2V4IDxvbGR1cmw+IChmaXJzdCBVUkwgaWYgbm8gPG9sZHVybD4gaXMgZ2l2ZW4pIHRvIDxuZXd1cmw+LiBJZgorPG9sZHVybD4gZG9lc24ndCBtYXRjaCBhbnkgVVJMLCBlcnJvciBvY2N1cnMgYW5kIG5vdGhpbmcgaXMgY2hhbmdlZC4KKysKK1dpdGggJy0tcHVzaCcsIHB1c2ggVVJMcyBhcmUgbWFuaXB1bGF0ZWQgaW5zdGVhZCBvZiBmZXRjaCBVUkxzLgorKworV2l0aCAnLS1hZGQnLCBpbnN0ZWFkIG9mIGNoYW5naW5nIHNvbWUgVVJMLCBuZXcgVVJMIGlzIGFkZGVkLgorKworV2l0aCAnLS1kZWxldGUnLCBpbnN0ZWFkIG9mIGNoYW5naW5nIHNvbWUgVVJMLCBhbGwgVVJMcyBtYXRjaGluZworcmVnZXggPHVybD4gYXJlIGRlbGV0ZWQuIFRyeWluZyB0byBkZWxldGUgYWxsIG5vbi1wdXNoIFVSTHMgaXMgYW4KK2Vycm9yLgorCiAnc2hvdyc6OgogCiBHaXZlcyBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZW1vdGUgPG5hbWU+LgpAQCAtMTYwLDcgKzE3OCw3IEBACiAuLi4KIC0tLS0tLS0tLS0tLQogCi0qIEltaXRhdGUgJ2dpdC1jbG9uZScgYnV0IHRyYWNrIG9ubHkgc2VsZWN0ZWQgYnJhbmNoZXMKKyogSW1pdGF0ZSAnZ2l0IGNsb25lJyBidXQgdHJhY2sgb25seSBzZWxlY3RlZCBicmFuY2hlcwogKwogLS0tLS0tLS0tLS0tCiAkIG1rZGlyIHByb2plY3QuZ2l0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXBhY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVwYWNrLnR4dAppbmRleCBhYWE4ODUyLi44YzY3ZDE3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXBhY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlcGFjay50eHQKQEAgLTMxLDExICszMSwxNCBAQAogCUluc3RlYWQgb2YgaW5jcmVtZW50YWxseSBwYWNraW5nIHRoZSB1bnBhY2tlZCBvYmplY3RzLAogCXBhY2sgZXZlcnl0aGluZyByZWZlcmVuY2VkIGludG8gYSBzaW5nbGUgcGFjay4KIAlFc3BlY2lhbGx5IHVzZWZ1bCB3aGVuIHBhY2tpbmcgYSByZXBvc2l0b3J5IHRoYXQgaXMgdXNlZAotCWZvciBwcml2YXRlIGRldmVsb3BtZW50IGFuZCB0aGVyZSBpcyBubyBuZWVkIHRvIHdvcnJ5Ci0JYWJvdXQgcGVvcGxlIGZldGNoaW5nIHZpYSBkdW1iIHByb3RvY29scyBmcm9tIGl0LiAgVXNlCisJZm9yIHByaXZhdGUgZGV2ZWxvcG1lbnQuIFVzZQogCXdpdGggJy1kJy4gIFRoaXMgd2lsbCBjbGVhbiB1cCB0aGUgb2JqZWN0cyB0aGF0IGBnaXQgcHJ1bmVgCiAJbGVhdmVzIGJlaGluZCwgYnV0IGBnaXQgZnNjayAtLWZ1bGxgIHNob3dzIGFzCiAJZGFuZ2xpbmcuCisrCitOb3RlIHRoYXQgdXNlcnMgZmV0Y2hpbmcgb3ZlciBkdW1iIHByb3RvY29scyB3aWxsIGhhdmUgdG8gZmV0Y2ggdGhlCit3aG9sZSBuZXcgcGFjayBpbiBvcmRlciB0byBnZXQgYW55IGNvbnRhaW5lZCBvYmplY3QsIG5vIG1hdHRlciBob3cgbWFueQorb3RoZXIgb2JqZWN0cyBpbiB0aGF0IHBhY2sgdGhleSBhbHJlYWR5IGhhdmUgbG9jYWxseS4KIAogLUE6OgogCVNhbWUgYXMgYC1hYCwgdW5sZXNzICctZCcgaXMgdXNlZC4gIFRoZW4gYW55IHVucmVhY2hhYmxlCkBAIC00NiwxNiArNDksMTYgQEAKIAlkZWxldGVkIGJ5IHdheSBvZiBiZWluZyBsZWZ0IGluIHRoZSBvbGQgcGFjayBhbmQgdGhlbgogCXJlbW92ZWQuICBJbnN0ZWFkLCB0aGUgbG9vc2UgdW5yZWFjaGFibGUgb2JqZWN0cwogCXdpbGwgYmUgcHJ1bmVkIGFjY29yZGluZyB0byBub3JtYWwgZXhwaXJ5IHJ1bGVzCi0Jd2l0aCB0aGUgbmV4dCAnZ2l0LWdjJyBpbnZvY2F0aW9uLiBTZWUgbGlua2dpdDpnaXQtZ2NbMV0uCisJd2l0aCB0aGUgbmV4dCAnZ2l0IGdjJyBpbnZvY2F0aW9uLiBTZWUgbGlua2dpdDpnaXQtZ2NbMV0uCiAKIC1kOjoKIAlBZnRlciBwYWNraW5nLCBpZiB0aGUgbmV3bHkgY3JlYXRlZCBwYWNrcyBtYWtlIHNvbWUKIAlleGlzdGluZyBwYWNrcyByZWR1bmRhbnQsIHJlbW92ZSB0aGUgcmVkdW5kYW50IHBhY2tzLgotCUFsc28gcnVuICAnZ2l0LXBydW5lLXBhY2tlZCcgdG8gcmVtb3ZlIHJlZHVuZGFudAorCUFsc28gcnVuICAnZ2l0IHBydW5lLXBhY2tlZCcgdG8gcmVtb3ZlIHJlZHVuZGFudAogCWxvb3NlIG9iamVjdCBmaWxlcy4KIAogLWw6OgotCVBhc3MgdGhlIGAtLWxvY2FsYCBvcHRpb24gdG8gJ2dpdC1wYWNrLW9iamVjdHMnLiBTZWUKKwlQYXNzIHRoZSBgLS1sb2NhbGAgb3B0aW9uIHRvICdnaXQgcGFjay1vYmplY3RzJy4gU2VlCiAJbGlua2dpdDpnaXQtcGFjay1vYmplY3RzWzFdLgogCiAtZjo6CkBAIC02MywxMiArNjYsMTIgQEAKIAlsaW5rZ2l0OmdpdC1wYWNrLW9iamVjdHNbMV0uCiAKIC1xOjoKLQlQYXNzIHRoZSBgLXFgIG9wdGlvbiB0byAnZ2l0LXBhY2stb2JqZWN0cycuIFNlZQorCVBhc3MgdGhlIGAtcWAgb3B0aW9uIHRvICdnaXQgcGFjay1vYmplY3RzJy4gU2VlCiAJbGlua2dpdDpnaXQtcGFjay1vYmplY3RzWzFdLgogCiAtbjo6CiAJRG8gbm90IHVwZGF0ZSB0aGUgc2VydmVyIGluZm9ybWF0aW9uIHdpdGgKLQknZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbycuICBUaGlzIG9wdGlvbiBza2lwcworCSdnaXQgdXBkYXRlLXNlcnZlci1pbmZvJy4gIFRoaXMgb3B0aW9uIHNraXBzCiAJdXBkYXRpbmcgbG9jYWwgY2F0YWxvZyBmaWxlcyBuZWVkZWQgdG8gcHVibGlzaAogCXRoaXMgcmVwb3NpdG9yeSAob3IgYSBkaXJlY3QgY29weSBvZiBpdCkKIAlvdmVyIEhUVFAgb3IgRlRQLiAgU2VlIGxpbmtnaXQ6Z2l0LXVwZGF0ZS1zZXJ2ZXItaW5mb1sxXS4KQEAgLTk1LDI0ICs5OCwyNiBAQAogCWAtLXdpbmRvdy1tZW1vcnk9MGAgbWFrZXMgbWVtb3J5IHVzYWdlIHVubGltaXRlZCwgd2hpY2ggaXMgdGhlCiAJZGVmYXVsdC4KIAotLS1tYXgtcGFjay1zaXplPTxuPjo6Ci0JTWF4aW11bSBzaXplIG9mIGVhY2ggb3V0cHV0IHBhY2tmaWxlLCBleHByZXNzZWQgaW4gTWlCLgorLS1tYXgtcGFjay1zaXplPVtOXTo6CisJTWF4aW11bSBzaXplIG9mIGVhY2ggb3V0cHV0IHBhY2sgZmlsZS4gVGhlIHNpemUgY2FuIGJlIHN1ZmZpeGVkIHdpdGgKKwkiayIsICJtIiwgb3IgImciLiBUaGUgbWluaW11bSBzaXplIGFsbG93ZWQgaXMgbGltaXRlZCB0byAxIE1pQi4KIAlJZiBzcGVjaWZpZWQsICBtdWx0aXBsZSBwYWNrZmlsZXMgbWF5IGJlIGNyZWF0ZWQuCi0JVGhlIGRlZmF1bHQgaXMgdW5saW1pdGVkLgorCVRoZSBkZWZhdWx0IGlzIHVubGltaXRlZCwgdW5sZXNzIHRoZSBjb25maWcgdmFyaWFibGUKKwlgcGFjay5wYWNrU2l6ZUxpbWl0YCBpcyBzZXQuCiAKIAogQ29uZmlndXJhdGlvbgogLS0tLS0tLS0tLS0tLQogCi1XaGVuIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYHJlcGFjay5Vc2VEZWx0YUJhc2VPZmZzZXRgIGlzIHNldAotZm9yIHRoZSByZXBvc2l0b3J5LCB0aGUgY29tbWFuZCBwYXNzZXMgYC0tZGVsdGEtYmFzZS1vZmZzZXRgCi1vcHRpb24gdG8gJ2dpdC1wYWNrLW9iamVjdHMnOyB0aGlzIHR5cGljYWxseSByZXN1bHRzIGluIHNsaWdodGx5Ci1zbWFsbGVyIHBhY2tzLCBidXQgdGhlIGdlbmVyYXRlZCBwYWNrcyBhcmUgaW5jb21wYXRpYmxlIHdpdGgKLXZlcnNpb25zIG9mIGdpdCBvbGRlciB0aGFuIChhbmQgaW5jbHVkaW5nKSB2MS40LjM7IGRvIG5vdCBzZXQKLXRoZSB2YXJpYWJsZSBpbiBhIHJlcG9zaXRvcnkgdGhhdCBvbGRlciB2ZXJzaW9uIG9mIGdpdCBuZWVkcyB0bwotYmUgYWJsZSB0byByZWFkICh0aGlzIGluY2x1ZGVzIHJlcG9zaXRvcmllcyBmcm9tIHdoaWNoIHBhY2tzIGNhbgotYmUgY29waWVkIG91dCBvdmVyIGh0dHAgb3IgcnN5bmMsIGFuZCBwZW9wbGUgd2hvIG9idGFpbmVkIHBhY2tzCi10aGF0IHdheSBjYW4gdHJ5IHRvIHVzZSBvbGRlciBnaXQgd2l0aCBpdCkuCitCeSBkZWZhdWx0LCB0aGUgY29tbWFuZCBwYXNzZXMgYC0tZGVsdGEtYmFzZS1vZmZzZXRgIG9wdGlvbiB0bworJ2dpdCBwYWNrLW9iamVjdHMnOyB0aGlzIHR5cGljYWxseSByZXN1bHRzIGluIHNsaWdodGx5IHNtYWxsZXIgcGFja3MsCitidXQgdGhlIGdlbmVyYXRlZCBwYWNrcyBhcmUgaW5jb21wYXRpYmxlIHdpdGggdmVyc2lvbnMgb2YgR2l0IG9sZGVyIHRoYW4KK3ZlcnNpb24gMS40LjQuIElmIHlvdSBuZWVkIHRvIHNoYXJlIHlvdXIgcmVwb3NpdG9yeSB3aXRoIHN1Y2ggYW5jaWVudCBHaXQKK3ZlcnNpb25zLCBlaXRoZXIgZGlyZWN0bHkgb3IgdmlhIHRoZSBkdW1iIGh0dHAgb3IgcnN5bmMgcHJvdG9jb2wsIHRoZW4geW91CituZWVkIHRvIHNldCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgcmVwYWNrLlVzZURlbHRhQmFzZU9mZnNldGAgdG8KKyJmYWxzZSIgYW5kIHJlcGFjay4gQWNjZXNzIGZyb20gb2xkIEdpdCB2ZXJzaW9ucyBvdmVyIHRoZSBuYXRpdmUgcHJvdG9jb2wKK2lzIHVuYWZmZWN0ZWQgYnkgdGhpcyBvcHRpb24gYXMgdGhlIGNvbnZlcnNpb24gaXMgcGVyZm9ybWVkIG9uIHRoZSBmbHkKK2FzIG5lZWRlZCBpbiB0aGF0IGNhc2UuCiAKIAogQXV0aG9yCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXBsYWNlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlcGxhY2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZTIwOTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXBsYWNlLnR4dApAQCAtMCwwICsxLDk2IEBACitnaXQtcmVwbGFjZSgxKQorPT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXJlcGxhY2UgLSBDcmVhdGUsIGxpc3QsIGRlbGV0ZSByZWZzIHRvIHJlcGxhY2Ugb2JqZWN0cworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcmVwbGFjZScgWy1mXSA8b2JqZWN0PiA8cmVwbGFjZW1lbnQ+CisnZ2l0IHJlcGxhY2UnIC1kIDxvYmplY3Q+Li4uCisnZ2l0IHJlcGxhY2UnIC1sIFs8cGF0dGVybj5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorQWRkcyBhICdyZXBsYWNlJyByZWZlcmVuY2UgaW4gYC5naXQvcmVmcy9yZXBsYWNlL2AKKworVGhlIG5hbWUgb2YgdGhlICdyZXBsYWNlJyByZWZlcmVuY2UgaXMgdGhlIFNIQTEgb2YgdGhlIG9iamVjdCB0aGF0IGlzCityZXBsYWNlZC4gVGhlIGNvbnRlbnQgb2YgdGhlICdyZXBsYWNlJyByZWZlcmVuY2UgaXMgdGhlIFNIQTEgb2YgdGhlCityZXBsYWNlbWVudCBvYmplY3QuCisKK1VubGVzcyBgLWZgIGlzIGdpdmVuLCB0aGUgJ3JlcGxhY2UnIHJlZmVyZW5jZSBtdXN0IG5vdCB5ZXQgZXhpc3QgaW4KK2AuZ2l0L3JlZnMvcmVwbGFjZS9gIGRpcmVjdG9yeS4KKworUmVwbGFjZW1lbnQgcmVmZXJlbmNlcyB3aWxsIGJlIHVzZWQgYnkgZGVmYXVsdCBieSBhbGwgZ2l0IGNvbW1hbmRzCitleGNlcHQgdGhvc2UgZG9pbmcgcmVhY2hhYmlsaXR5IHRyYXZlcnNhbCAocHJ1bmUsIHBhY2sgdHJhbnNmZXIgYW5kCitmc2NrKS4KKworSXQgaXMgcG9zc2libGUgdG8gZGlzYWJsZSB1c2Ugb2YgcmVwbGFjZW1lbnQgcmVmZXJlbmNlcyBmb3IgYW55Citjb21tYW5kIHVzaW5nIHRoZSBgLS1uby1yZXBsYWNlLW9iamVjdHNgIG9wdGlvbiBqdXN0IGFmdGVyICdnaXQnLgorCitGb3IgZXhhbXBsZSBpZiBjb21taXQgJ2ZvbycgaGFzIGJlZW4gcmVwbGFjZWQgYnkgY29tbWl0ICdiYXInOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IC0tbm8tcmVwbGFjZS1vYmplY3RzIGNhdC1maWxlIGNvbW1pdCBmb28KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzaG93cyBpbmZvcm1hdGlvbiBhYm91dCBjb21taXQgJ2ZvbycsIHdoaWxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNhdC1maWxlIGNvbW1pdCBmb28KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzaG93cyBpbmZvcm1hdGlvbiBhYm91dCBjb21taXQgJ2JhcicuCisKK1RoZSAnR0lUX05PX1JFUExBQ0VfT0JKRUNUUycgZW52aXJvbm1lbnQgdmFyaWFibGUgY2FuIGJlIHNldCB0bworYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QgYXMgdGhlIGAtLW5vLXJlcGxhY2Utb2JqZWN0c2Agb3B0aW9uLgorCitPUFRJT05TCistLS0tLS0tCistZjo6CisJSWYgYW4gZXhpc3RpbmcgcmVwbGFjZSByZWYgZm9yIHRoZSBzYW1lIG9iamVjdCBleGlzdHMsIGl0IHdpbGwKKwliZSBvdmVyd3JpdHRlbiAoaW5zdGVhZCBvZiBmYWlsaW5nKS4KKworLWQ6OgorCURlbGV0ZSBleGlzdGluZyByZXBsYWNlIHJlZnMgZm9yIHRoZSBnaXZlbiBvYmplY3RzLgorCistbCA8cGF0dGVybj46OgorCUxpc3QgcmVwbGFjZSByZWZzIGZvciBvYmplY3RzIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIHBhdHRlcm4gKG9yCisJYWxsIGlmIG5vIHBhdHRlcm4gaXMgZ2l2ZW4pLgorCVR5cGluZyAiZ2l0IHJlcGxhY2UiIHdpdGhvdXQgYXJndW1lbnRzLCBhbHNvIGxpc3RzIGFsbCByZXBsYWNlCisJcmVmcy4KKworQlVHUworLS0tLQorQ29tcGFyaW5nIGJsb2JzIG9yIHRyZWVzIHRoYXQgaGF2ZSBiZWVuIHJlcGxhY2VkIHdpdGggdGhvc2UgdGhhdAorcmVwbGFjZSB0aGVtIHdpbGwgbm90IHdvcmsgcHJvcGVybHkuIEFuZCB1c2luZyBgZ2l0IHJlc2V0IC0taGFyZGAgdG8KK2dvIGJhY2sgdG8gYSByZXBsYWNlZCBjb21taXQgd2lsbCBtb3ZlIHRoZSBicmFuY2ggdG8gdGhlIHJlcGxhY2VtZW50Citjb21taXQgaW5zdGVhZCBvZiB0aGUgcmVwbGFjZWQgY29tbWl0LgorCitUaGVyZSBtYXkgYmUgb3RoZXIgcHJvYmxlbXMgd2hlbiB1c2luZyAnZ2l0IHJldi1saXN0JyByZWxhdGVkIHRvCitwZW5kaW5nIG9iamVjdHMuIEFuZCBvZiBjb3Vyc2UgdGhpbmdzIG1heSBicmVhayBpZiBhbiBvYmplY3Qgb2Ygb25lCit0eXBlIGlzIHJlcGxhY2VkIGJ5IGFuIG9iamVjdCBvZiBhbm90aGVyIHR5cGUgKGZvciBleGFtcGxlIGEgYmxvYgorcmVwbGFjZWQgYnkgYSBjb21taXQpLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LXRhZ1sxXQorbGlua2dpdDpnaXQtYnJhbmNoWzFdCitsaW5rZ2l0OmdpdFsxXQorCitBdXRob3IKKy0tLS0tLQorV3JpdHRlbiBieSBDaHJpc3RpYW4gQ291ZGVyIDxjaHJpc2Nvb2xAdHV4ZmFtaWx5Lm9yZz4gYW5kIEp1bmlvIEMKK0hhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+LCBiYXNlZCBvbiAnZ2l0IHRhZycgYnkgS3Jpc3RpYW4gSG9nc2JlcmcKKzxrcmhAcmVkaGF0LmNvbT4gYW5kIENhcmxvcyBSaWNhIDxqYXNhbXBsZXJAZ21haWwuY29tPi4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLS0KK0RvY3VtZW50YXRpb24gYnkgQ2hyaXN0aWFuIENvdWRlciA8Y2hyaXNjb29sQHR1eGZhbWlseS5vcmc+IGFuZCB0aGUKK2dpdC1saXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPiwgYmFzZWQgb24gJ2dpdCB0YWcnIGRvY3VtZW50YXRpb24uCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVyZXJlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlcmVyZS50eHQKaW5kZXggYTUzYzNjZC4uYWNjMjIwYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmVyZXJlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXJlcmUudHh0CkBAIC0yMywyMSArMjMsMjEgQEAKIGhhbmQgcmVzb2x1dGlvbnMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBhdXRvbWVyZ2UgcmVzdWx0cy4KIAogW05PVEVdCi1Zb3UgbmVlZCB0byBzZXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgcmVyZXJlLmVuYWJsZWQgdG8KK1lvdSBuZWVkIHRvIHNldCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSByZXJlcmUuZW5hYmxlZCBpbiBvcmRlciB0bwogZW5hYmxlIHRoaXMgY29tbWFuZC4KIAogCiBDT01NQU5EUwogLS0tLS0tLS0KIAotTm9ybWFsbHksICdnaXQtcmVyZXJlJyBpcyBydW4gd2l0aG91dCBhcmd1bWVudHMgb3IgdXNlci1pbnRlcnZlbnRpb24uCitOb3JtYWxseSwgJ2dpdCByZXJlcmUnIGlzIHJ1biB3aXRob3V0IGFyZ3VtZW50cyBvciB1c2VyLWludGVydmVudGlvbi4KIEhvd2V2ZXIsIGl0IGhhcyBzZXZlcmFsIGNvbW1hbmRzIHRoYXQgYWxsb3cgaXQgdG8gaW50ZXJhY3Qgd2l0aAogaXRzIHdvcmtpbmcgc3RhdGUuCiAKICdjbGVhcic6OgogCiBUaGlzIHJlc2V0cyB0aGUgbWV0YWRhdGEgdXNlZCBieSByZXJlcmUgaWYgYSBtZXJnZSByZXNvbHV0aW9uIGlzIHRvIGJlCi1hYm9ydGVkLiAgQ2FsbGluZyAnZ2l0LWFtIFstLXNraXB8LS1hYm9ydF0nIG9yICdnaXQtcmViYXNlIFstLXNraXB8LS1hYm9ydF0nCithYm9ydGVkLiAgQ2FsbGluZyAnZ2l0IGFtIFstLXNraXB8LS1hYm9ydF0nIG9yICdnaXQgcmViYXNlIFstLXNraXB8LS1hYm9ydF0nCiB3aWxsIGF1dG9tYXRpY2FsbHkgaW52b2tlIHRoaXMgY29tbWFuZC4KIAogJ2RpZmYnOjoKQEAgLTE0MiwzMiArMTQyLDMyIEBACiB3b3VsZCByZXF1aXJlIHlvdSB0byByZXNvbHZlIHRoZSBjb25mbGljdCwgaW50cm9kdWNlZCBieSB0aGUKIGNvbW1pdHMgbWFya2VkIHdpdGggYCpgLiAgSG93ZXZlciwgdGhpcyBjb25mbGljdCBpcyBvZnRlbiB0aGUKIHNhbWUgY29uZmxpY3QgeW91IHJlc29sdmVkIHdoZW4geW91IGNyZWF0ZWQgdGhlIHRlc3QgbWVyZ2UgeW91Ci1ibGV3IGF3YXkuICAnZ2l0LXJlcmVyZScgaGVscHMgeW91IHJlc29sdmUgdGhpcyBmaW5hbAorYmxldyBhd2F5LiAgJ2dpdCByZXJlcmUnIGhlbHBzIHlvdSByZXNvbHZlIHRoaXMgZmluYWwKIGNvbmZsaWN0ZWQgbWVyZ2UgdXNpbmcgdGhlIGluZm9ybWF0aW9uIGZyb20geW91ciBlYXJsaWVyIGhhbmQKIHJlc29sdmUuCiAKLVJ1bm5pbmcgdGhlICdnaXQtcmVyZXJlJyBjb21tYW5kIGltbWVkaWF0ZWx5IGFmdGVyIGEgY29uZmxpY3RlZAorUnVubmluZyB0aGUgJ2dpdCByZXJlcmUnIGNvbW1hbmQgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBjb25mbGljdGVkCiBhdXRvbWVyZ2UgcmVjb3JkcyB0aGUgY29uZmxpY3RlZCB3b3JraW5nIHRyZWUgZmlsZXMsIHdpdGggdGhlCiB1c3VhbCBjb25mbGljdCBtYXJrZXJzIGA8PDw8PDw8YCwgYD09PT09PT1gLCBhbmQgYD4+Pj4+Pj5gIGluCiB0aGVtLiAgTGF0ZXIsIGFmdGVyIHlvdSBhcmUgZG9uZSByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywKLXJ1bm5pbmcgJ2dpdC1yZXJlcmUnIGFnYWluIHdpbGwgcmVjb3JkIHRoZSByZXNvbHZlZCBzdGF0ZSBvZiB0aGVzZQorcnVubmluZyAnZ2l0IHJlcmVyZScgYWdhaW4gd2lsbCByZWNvcmQgdGhlIHJlc29sdmVkIHN0YXRlIG9mIHRoZXNlCiBmaWxlcy4gIFN1cHBvc2UgeW91IGRpZCB0aGlzIHdoZW4geW91IGNyZWF0ZWQgdGhlIHRlc3QgbWVyZ2Ugb2YKIG1hc3RlciBpbnRvIHRoZSB0b3BpYyBicmFuY2guCiAKIE5leHQgdGltZSwgYWZ0ZXIgc2VlaW5nIHRoZSBzYW1lIGNvbmZsaWN0ZWQgYXV0b21lcmdlLAotcnVubmluZyAnZ2l0LXJlcmVyZScgd2lsbCBwZXJmb3JtIGEgdGhyZWUtd2F5IG1lcmdlIGJldHdlZW4gdGhlCitydW5uaW5nICdnaXQgcmVyZXJlJyB3aWxsIHBlcmZvcm0gYSB0aHJlZS13YXkgbWVyZ2UgYmV0d2VlbiB0aGUKIGVhcmxpZXIgY29uZmxpY3RlZCBhdXRvbWVyZ2UsIHRoZSBlYXJsaWVyIG1hbnVhbCByZXNvbHV0aW9uLCBhbmQKIHRoZSBjdXJyZW50IGNvbmZsaWN0ZWQgYXV0b21lcmdlLgogSWYgdGhpcyB0aHJlZS13YXkgbWVyZ2UgcmVzb2x2ZXMgY2xlYW5seSwgdGhlIHJlc3VsdCBpcyB3cml0dGVuCiBvdXQgdG8geW91ciB3b3JraW5nIHRyZWUgZmlsZSwgc28geW91IGRvIG5vdCBoYXZlIHRvIG1hbnVhbGx5Ci1yZXNvbHZlIGl0LiAgTm90ZSB0aGF0ICdnaXQtcmVyZXJlJyBsZWF2ZXMgdGhlIGluZGV4IGZpbGUgYWxvbmUsCityZXNvbHZlIGl0LiAgTm90ZSB0aGF0ICdnaXQgcmVyZXJlJyBsZWF2ZXMgdGhlIGluZGV4IGZpbGUgYWxvbmUsCiBzbyB5b3Ugc3RpbGwgbmVlZCB0byBkbyB0aGUgZmluYWwgc2FuaXR5IGNoZWNrcyB3aXRoIGBnaXQgZGlmZmAKLShvciBgZ2l0IGRpZmYgLWNgKSBhbmQgJ2dpdC1hZGQnIHdoZW4geW91IGFyZSBzYXRpc2ZpZWQuCisob3IgYGdpdCBkaWZmIC1jYCkgYW5kICdnaXQgYWRkJyB3aGVuIHlvdSBhcmUgc2F0aXNmaWVkLgogCi1BcyBhIGNvbnZlbmllbmNlIG1lYXN1cmUsICdnaXQtbWVyZ2UnIGF1dG9tYXRpY2FsbHkgaW52b2tlcwotJ2dpdC1yZXJlcmUnIHVwb24gZXhpdGluZyB3aXRoIGEgZmFpbGVkIGF1dG9tZXJnZSBhbmQgJ2dpdC1yZXJlcmUnCitBcyBhIGNvbnZlbmllbmNlIG1lYXN1cmUsICdnaXQgbWVyZ2UnIGF1dG9tYXRpY2FsbHkgaW52b2tlcworJ2dpdCByZXJlcmUnIHVwb24gZXhpdGluZyB3aXRoIGEgZmFpbGVkIGF1dG9tZXJnZSBhbmQgJ2dpdCByZXJlcmUnCiByZWNvcmRzIHRoZSBoYW5kIHJlc29sdmUgd2hlbiBpdCBpcyBhIG5ldyBjb25mbGljdCwgb3IgcmV1c2VzIHRoZSBlYXJsaWVyIGhhbmQKLXJlc29sdmUgd2hlbiBpdCBpcyBub3QuICAnZ2l0LWNvbW1pdCcgYWxzbyBpbnZva2VzICdnaXQtcmVyZXJlJworcmVzb2x2ZSB3aGVuIGl0IGlzIG5vdC4gICdnaXQgY29tbWl0JyBhbHNvIGludm9rZXMgJ2dpdCByZXJlcmUnCiB3aGVuIGNvbW1pdHRpbmcgYSBtZXJnZSByZXN1bHQuICBXaGF0IHRoaXMgbWVhbnMgaXMgdGhhdCB5b3UgZG8KIG5vdCBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwgeW91cnNlbGYgKGJlc2lkZXMgZW5hYmxpbmcKIHRoZSByZXJlcmUuZW5hYmxlZCBjb25maWcgdmFyaWFibGUpLgpAQCAtMTc3LDggKzE3Nyw4IEBACiBhY3R1YWwgbWVyZ2UgbGF0ZXIgd2l0aCB0aGUgdXBkYXRlZCBtYXN0ZXIgYW5kIHRvcGljIGJyYW5jaCwgYXMgbG9uZwogYXMgdGhlIHJlY29yZGVkIHJlc29sdXRpb24gaXMgc3RpbGwgYXBwbGljYWJsZS4KIAotVGhlIGluZm9ybWF0aW9uICdnaXQtcmVyZXJlJyByZWNvcmRzIGlzIGFsc28gdXNlZCB3aGVuIHJ1bm5pbmcKLSdnaXQtcmViYXNlJy4gIEFmdGVyIGJsb3dpbmcgYXdheSB0aGUgdGVzdCBtZXJnZSBhbmQgY29udGludWluZworVGhlIGluZm9ybWF0aW9uICdnaXQgcmVyZXJlJyByZWNvcmRzIGlzIGFsc28gdXNlZCB3aGVuIHJ1bm5pbmcKKydnaXQgcmViYXNlJy4gIEFmdGVyIGJsb3dpbmcgYXdheSB0aGUgdGVzdCBtZXJnZSBhbmQgY29udGludWluZwogZGV2ZWxvcG1lbnQgb24gdGhlIHRvcGljIGJyYW5jaDoKIAogLS0tLS0tLS0tLS0tCkBAIC0xOTcsNyArMTk3LDcgQEAKIHVwLXRvLWRhdGUgYmVmb3JlIHlvdXIgdG9waWMgaXMgcmVhZHkgdG8gYmUgc2VudCB1cHN0cmVhbS4KIFRoaXMgd291bGQgcmVzdWx0IGluIGZhbGxpbmcgYmFjayB0byBhIHRocmVlLXdheSBtZXJnZSwgYW5kIGl0CiB3b3VsZCBjb25mbGljdCB0aGUgc2FtZSB3YXkgYXMgdGhlIHRlc3QgbWVyZ2UgeW91IHJlc29sdmVkIGVhcmxpZXIuCi0nZ2l0LXJlcmVyZScgd2lsbCBiZSBydW4gYnkgJ2dpdC1yZWJhc2UnIHRvIGhlbHAgeW91IHJlc29sdmUgdGhpcworJ2dpdCByZXJlcmUnIHdpbGwgYmUgcnVuIGJ5ICdnaXQgcmViYXNlJyB0byBoZWxwIHlvdSByZXNvbHZlIHRoaXMKIGNvbmZsaWN0LgogCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlc2V0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlc2V0LnR4dAppbmRleCBhYmIyNWQxLi4xNjhkYjA4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXNldC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVzZXQudHh0CkBAIC0xMCw2ICsxMCw3IEBACiBbdmVyc2VdCiAnZ2l0IHJlc2V0JyBbLS1taXhlZCB8IC0tc29mdCB8IC0taGFyZCB8IC0tbWVyZ2VdIFstcV0gWzxjb21taXQ+XQogJ2dpdCByZXNldCcgWy1xXSBbPGNvbW1pdD5dIFstLV0gPHBhdGhzPi4uLgorJ2dpdCByZXNldCcgLS1wYXRjaCBbPGNvbW1pdD5dIFstLV0gWzxwYXRocz4uLi5dCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQpAQCAtMjMsOCArMjQsOSBAQAogSWYgeW91IHdhbnQgdG8gdW5kbyBhIGNvbW1pdCBvdGhlciB0aGFuIHRoZSBsYXRlc3Qgb24gYSBicmFuY2gsCiBsaW5rZ2l0OmdpdC1yZXZlcnRbMV0gaXMgeW91ciBmcmllbmQuCiAKLVRoZSBzZWNvbmQgZm9ybSB3aXRoICdwYXRocycgaXMgdXNlZCB0byByZXZlcnQgc2VsZWN0ZWQgcGF0aHMgaW4KLXRoZSBpbmRleCBmcm9tIGEgZ2l2ZW4gY29tbWl0LCB3aXRob3V0IG1vdmluZyBIRUFELgorVGhlIHNlY29uZCBhbmQgdGhpcmQgZm9ybXMgd2l0aCAncGF0aHMnIGFuZC9vciAtLXBhdGNoIGFyZSB1c2VkIHRvCityZXZlcnQgc2VsZWN0ZWQgcGF0aHMgaW4gdGhlIGluZGV4IGZyb20gYSBnaXZlbiBjb21taXQsIHdpdGhvdXQgbW92aW5nCitIRUFELgogCiAKIE9QVElPTlMKQEAgLTM3LDcgKzM5LDcgQEAKIC0tc29mdDo6CiAJRG9lcyBub3QgdG91Y2ggdGhlIGluZGV4IGZpbGUgbm9yIHRoZSB3b3JraW5nIHRyZWUgYXQgYWxsLCBidXQKIAlyZXF1aXJlcyB0aGVtIHRvIGJlIGluIGEgZ29vZCBvcmRlci4gVGhpcyBsZWF2ZXMgYWxsIHlvdXIgY2hhbmdlZAotCWZpbGVzICJDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZCIsIGFzICdnaXQtc3RhdHVzJyB3b3VsZAorCWZpbGVzICJDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZCIsIGFzICdnaXQgc3RhdHVzJyB3b3VsZAogCXB1dCBpdC4KIAogLS1oYXJkOjoKQEAgLTUwLDEyICs1MiwxMTEgQEAKIAlhbmQgdXBkYXRlcyB0aGUgZmlsZXMgdGhhdCBhcmUgZGlmZmVyZW50IGJldHdlZW4gdGhlIG5hbWVkIGNvbW1pdAogCWFuZCB0aGUgY3VycmVudCBjb21taXQgaW4gdGhlIHdvcmtpbmcgdHJlZS4KIAorLXA6OgorLS1wYXRjaDo6CisJSW50ZXJhY3RpdmVseSBzZWxlY3QgaHVua3MgaW4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgaW5kZXgKKwlhbmQgPGNvbW1pdD4gKGRlZmF1bHRzIHRvIEhFQUQpLiAgVGhlIGNob3NlbiBodW5rcyBhcmUgYXBwbGllZAorCWluIHJldmVyc2UgdG8gdGhlIGluZGV4LgorKworVGhpcyBtZWFucyB0aGF0IGBnaXQgcmVzZXQgLXBgIGlzIHRoZSBvcHBvc2l0ZSBvZiBgZ2l0IGFkZCAtcGAgKHNlZQorbGlua2dpdDpnaXQtYWRkWzFdKS4KKwogLXE6OgorLS1xdWlldDo6CiAJQmUgcXVpZXQsIG9ubHkgcmVwb3J0IGVycm9ycy4KIAogPGNvbW1pdD46OgogCUNvbW1pdCB0byBtYWtlIHRoZSBjdXJyZW50IEhFQUQuIElmIG5vdCBnaXZlbiBkZWZhdWx0cyB0byBIRUFELgogCitESVNDVVNTSU9OCistLS0tLS0tLS0tCisKK1RoZSB0YWJsZXMgYmVsb3cgc2hvdyB3aGF0IGhhcHBlbnMgd2hlbiBydW5uaW5nOgorCistLS0tLS0tLS0tCitnaXQgcmVzZXQgLS1vcHRpb24gdGFyZ2V0CistLS0tLS0tLS0tCisKK3RvIHJlc2V0IHRoZSBIRUFEIHRvIGFub3RoZXIgY29tbWl0IChgdGFyZ2V0YCkgd2l0aCB0aGUgZGlmZmVyZW50CityZXNldCBvcHRpb25zIGRlcGVuZGluZyBvbiB0aGUgc3RhdGUgb2YgdGhlIGZpbGVzLgorCitJbiB0aGVzZSB0YWJsZXMsIEEsIEIsIEMgYW5kIEQgYXJlIHNvbWUgZGlmZmVyZW50IHN0YXRlcyBvZiBhCitmaWxlLiBGb3IgZXhhbXBsZSwgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGZpcnN0IHRhYmxlIG1lYW5zIHRoYXQgaWYgYQorZmlsZSBpcyBpbiBzdGF0ZSBBIGluIHRoZSB3b3JraW5nIHRyZWUsIGluIHN0YXRlIEIgaW4gdGhlIGluZGV4LCBpbgorc3RhdGUgQyBpbiBIRUFEIGFuZCBpbiBzdGF0ZSBEIGluIHRoZSB0YXJnZXQsIHRoZW4gImdpdCByZXNldCAtLXNvZnQKK3RhcmdldCIgd2lsbCBwdXQgdGhlIGZpbGUgaW4gc3RhdGUgQSBpbiB0aGUgd29ya2luZyB0cmVlLCBpbiBzdGF0ZSBCCitpbiB0aGUgaW5kZXggYW5kIGluIHN0YXRlIEQgaW4gSEVBRC4KKworICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIEEgICAgICAgQiAgICAgQyAgICBEICAgICAtLXNvZnQgICBBICAgICAgIEIgICAgIEQKKwkJCQktLW1peGVkICBBICAgICAgIEQgICAgIEQKKwkJCQktLWhhcmQgICBEICAgICAgIEQgICAgIEQKKwkJCQktLW1lcmdlIChkaXNhbGxvd2VkKQorCisgICAgICB3b3JraW5nIGluZGV4IEhFQUQgdGFyZ2V0ICAgICAgICAgd29ya2luZyBpbmRleCBIRUFECisgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgQSAgICAgICBCICAgICBDICAgIEMgICAgIC0tc29mdCAgIEEgICAgICAgQiAgICAgQworCQkJCS0tbWl4ZWQgIEEgICAgICAgQyAgICAgQworCQkJCS0taGFyZCAgIEMgICAgICAgQyAgICAgQworCQkJCS0tbWVyZ2UgKGRpc2FsbG93ZWQpCisKKyAgICAgIHdvcmtpbmcgaW5kZXggSEVBRCB0YXJnZXQgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQKKyAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICBCICAgICAgIEIgICAgIEMgICAgRCAgICAgLS1zb2Z0ICAgQiAgICAgICBCICAgICBECisJCQkJLS1taXhlZCAgQiAgICAgICBEICAgICBECisJCQkJLS1oYXJkICAgRCAgICAgICBEICAgICBECisJCQkJLS1tZXJnZSAgRCAgICAgICBEICAgICBECisKKyAgICAgIHdvcmtpbmcgaW5kZXggSEVBRCB0YXJnZXQgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQKKyAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICBCICAgICAgIEIgICAgIEMgICAgQyAgICAgLS1zb2Z0ICAgQiAgICAgICBCICAgICBDCisJCQkJLS1taXhlZCAgQiAgICAgICBDICAgICBDCisJCQkJLS1oYXJkICAgQyAgICAgICBDICAgICBDCisJCQkJLS1tZXJnZSAgQyAgICAgICBDICAgICBDCisKKyAgICAgIHdvcmtpbmcgaW5kZXggSEVBRCB0YXJnZXQgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQKKyAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICBCICAgICAgIEMgICAgIEMgICAgRCAgICAgLS1zb2Z0ICAgQiAgICAgICBDICAgICBECisJCQkJLS1taXhlZCAgQiAgICAgICBEICAgICBECisJCQkJLS1oYXJkICAgRCAgICAgICBEICAgICBECisJCQkJLS1tZXJnZSAoZGlzYWxsb3dlZCkKKworICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIEIgICAgICAgQyAgICAgQyAgICBDICAgICAtLXNvZnQgICBCICAgICAgIEMgICAgIEMKKwkJCQktLW1peGVkICBCICAgICAgIEMgICAgIEMKKwkJCQktLWhhcmQgICBDICAgICAgIEMgICAgIEMKKwkJCQktLW1lcmdlICBCICAgICAgIEMgICAgIEMKKworInJlc2V0IC0tbWVyZ2UiIGlzIG1lYW50IHRvIGJlIHVzZWQgd2hlbiByZXNldHRpbmcgb3V0IG9mIGEgY29uZmxpY3RlZAorbWVyZ2UuIEFueSBtZXJneSBvcGVyYXRpb24gZ3VhcmFudGVlcyB0aGF0IHRoZSB3b3JrIHRyZWUgZmlsZSB0aGF0IGlzCitpbnZvbHZlZCBpbiB0aGUgbWVyZ2UgZG9lcyBub3QgaGF2ZSBsb2NhbCBjaGFuZ2Ugd3J0IHRoZSBpbmRleCBiZWZvcmUKK2l0IHN0YXJ0cywgYW5kIHRoYXQgaXQgd3JpdGVzIHRoZSByZXN1bHQgb3V0IHRvIHRoZSB3b3JrIHRyZWUuIFNvIGlmCit3ZSBzZWUgc29tZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGluZGV4IGFuZCB0aGUgdGFyZ2V0IGFuZCBhbHNvCitiZXR3ZWVuIHRoZSBpbmRleCBhbmQgdGhlIHdvcmsgdHJlZSwgdGhlbiBpdCBtZWFucyB0aGF0IHdlIGFyZSBub3QKK3Jlc2V0dGluZyBvdXQgZnJvbSBhIHN0YXRlIHRoYXQgYSBtZXJneSBvcGVyYXRpb24gbGVmdCBhZnRlciBmYWlsaW5nCit3aXRoIGEgY29uZmxpY3QuIFRoYXQgaXMgd2h5IHdlIGRpc2FsbG93IC0tbWVyZ2Ugb3B0aW9uIGluIHRoaXMgY2FzZS4KKworVGhlIGZvbGxvd2luZyB0YWJsZXMgc2hvdyB3aGF0IGhhcHBlbnMgd2hlbiB0aGVyZSBhcmUgdW5tZXJnZWQKK2VudHJpZXM6CisKKyAgICAgIHdvcmtpbmcgaW5kZXggSEVBRCB0YXJnZXQgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQKKyAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICBYICAgICAgIFUgICAgIEEgICAgQiAgICAgLS1zb2Z0ICAoZGlzYWxsb3dlZCkKKwkJCQktLW1peGVkICBYICAgICAgIEIgICAgIEIKKwkJCQktLWhhcmQgICBCICAgICAgIEIgICAgIEIKKwkJCQktLW1lcmdlICBCICAgICAgIEIgICAgIEIKKworICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIFggICAgICAgVSAgICAgQSAgICBBICAgICAtLXNvZnQgIChkaXNhbGxvd2VkKQorCQkJCS0tbWl4ZWQgIFggICAgICAgQSAgICAgQQorCQkJCS0taGFyZCAgIEEgICAgICAgQSAgICAgQQorCQkJCS0tbWVyZ2UgIEEgICAgICAgQSAgICAgQQorCitYIG1lYW5zIGFueSBzdGF0ZSBhbmQgVSBtZWFucyBhbiB1bm1lcmdlZCBpbmRleC4KKwogRXhhbXBsZXMKIC0tLS0tLS0tCiAKQEAgLTEzOSw3ICsyNDAsNyBAQAogJCBnaXQgcmVzZXQgLS1oYXJkICAgICAgICAgICAgICAgICA8Mj4KICQgZ2l0IHB1bGwgLiB0b3BpYy9icmFuY2ggICAgICAgICAgPDM+CiBVcGRhdGluZyBmcm9tIDQxMjIzLi4uIHRvIDEzMTM0Li4uCi1GYXN0IGZvcndhcmQKK0Zhc3QtZm9yd2FyZAogJCBnaXQgcmVzZXQgLS1oYXJkIE9SSUdfSEVBRCAgICAgICA8ND4KIC0tLS0tLS0tLS0tLQogKwpAQCAtMTUwLDcgKzI1MSw3IEBACiB3aGljaCBpcyBhIHN5bm9ueW0gZm9yICJnaXQgcmVzZXQgLS1oYXJkIEhFQUQiIGNsZWFycyB0aGUgbWVzcwogZnJvbSB0aGUgaW5kZXggZmlsZSBhbmQgdGhlIHdvcmtpbmcgdHJlZS4KIDwzPiBNZXJnZSBhIHRvcGljIGJyYW5jaCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCwgd2hpY2ggcmVzdWx0ZWQKLWluIGEgZmFzdCBmb3J3YXJkLgoraW4gYSBmYXN0LWZvcndhcmQuCiA8ND4gQnV0IHlvdSBkZWNpZGVkIHRoYXQgdGhlIHRvcGljIGJyYW5jaCBpcyBub3QgcmVhZHkgZm9yIHB1YmxpYwogY29uc3VtcHRpb24geWV0LiAgInB1bGwiIG9yICJtZXJnZSIgYWx3YXlzIGxlYXZlcyB0aGUgb3JpZ2luYWwKIHRpcCBvZiB0aGUgY3VycmVudCBicmFuY2ggaW4gT1JJR19IRUFELCBzbyByZXNldHRpbmcgaGFyZCB0byBpdApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmV2LWxpc3QudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmV2LWxpc3QudHh0CmluZGV4IGFlMTE4NmUuLjE3M2YzZmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJldi1saXN0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtbGlzdC50eHQKQEAgLTksMjAgKzksMjIgQEAKIFNZTk9QU0lTCiAtLS0tLS0tLQogW3ZlcnNlXQotJ2dpdC1yZXYtbGlzdCcgWyBcLS1tYXgtY291bnQ9bnVtYmVyIF0KKydnaXQgcmV2LWxpc3QnIFsgXC0tbWF4LWNvdW50PW51bWJlciBdCiAJICAgICBbIFwtLXNraXA9bnVtYmVyIF0KIAkgICAgIFsgXC0tbWF4LWFnZT10aW1lc3RhbXAgXQogCSAgICAgWyBcLS1taW4tYWdlPXRpbWVzdGFtcCBdCiAJICAgICBbIFwtLXNwYXJzZSBdCisJICAgICBbIFwtLW1lcmdlcyBdCiAJICAgICBbIFwtLW5vLW1lcmdlcyBdCiAJICAgICBbIFwtLWZpcnN0LXBhcmVudCBdCiAJICAgICBbIFwtLXJlbW92ZS1lbXB0eSBdCiAJICAgICBbIFwtLWZ1bGwtaGlzdG9yeSBdCiAJICAgICBbIFwtLW5vdCBdCiAJICAgICBbIFwtLWFsbCBdCi0JICAgICBbIFwtLWJyYW5jaGVzIF0KLQkgICAgIFsgXC0tdGFncyBdCi0JICAgICBbIFwtLXJlbW90ZXMgXQorCSAgICAgWyBcLS1icmFuY2hlc1s9cGF0dGVybl0gXQorCSAgICAgWyBcLS10YWdzWz1wYXR0ZXJuXSBdCisJICAgICBbIFwtLXJlbW90ZXNbPXBhdHRlcm5dIF0KKwkgICAgIFsgXC0tZ2xvYj1nbG9iLXBhdHRlcm4gXQogCSAgICAgWyBcLS1zdGRpbiBdCiAJICAgICBbIFwtLXF1aWV0IF0KIAkgICAgIFsgXC0tdG9wby1vcmRlciBdCkBAIC01MCwyMCArNTIsMjYgQEAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQogCi1MaXN0cyBjb21taXQgb2JqZWN0cyBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIgc3RhcnRpbmcgYXQgdGhlCi1naXZlbiBjb21taXQocyksIHRha2luZyBhbmNlc3RyeSByZWxhdGlvbnNoaXAgaW50byBhY2NvdW50LiAgVGhpcyBpcwotdXNlZnVsIHRvIHByb2R1Y2UgaHVtYW4tcmVhZGFibGUgbG9nIG91dHB1dC4KK0xpc3QgY29tbWl0cyB0aGF0IGFyZSByZWFjaGFibGUgYnkgZm9sbG93aW5nIHRoZSBgcGFyZW50YCBsaW5rcyBmcm9tIHRoZQorZ2l2ZW4gY29tbWl0KHMpLCBidXQgZXhjbHVkZSBjb21taXRzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHRoZSBvbmUocykKK2dpdmVuIHdpdGggYSAne2NhcmV0fScgaW4gZnJvbnQgb2YgdGhlbS4gIFRoZSBvdXRwdXQgaXMgZ2l2ZW4gaW4gcmV2ZXJzZQorY2hyb25vbG9naWNhbCBvcmRlciBieSBkZWZhdWx0LgogCi1Db21taXRzIHdoaWNoIGFyZSBzdGF0ZWQgd2l0aCBhIHByZWNlZGluZyAne2NhcmV0fScgY2F1c2UgbGlzdGluZyB0bwotc3RvcCBhdCB0aGF0IHBvaW50LiBUaGVpciBwYXJlbnRzIGFyZSBpbXBsaWVkLiBUaHVzIHRoZSBmb2xsb3dpbmcKLWNvbW1hbmQ6CitZb3UgY2FuIHRoaW5rIG9mIHRoaXMgYXMgYSBzZXQgb3BlcmF0aW9uLiAgQ29tbWl0cyBnaXZlbiBvbiB0aGUgY29tbWFuZAorbGluZSBmb3JtIGEgc2V0IG9mIGNvbW1pdHMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gYW55IG9mIHRoZW0sIGFuZCB0aGVuCitjb21taXRzIHJlYWNoYWJsZSBmcm9tIGFueSBvZiB0aGUgb25lcyBnaXZlbiB3aXRoICd7Y2FyZXR9JyBpbiBmcm9udCBhcmUKK3N1YnRyYWN0ZWQgZnJvbSB0aGF0IHNldC4gIFRoZSByZW1haW5pbmcgY29tbWl0cyBhcmUgd2hhdCBjb21lcyBvdXQgaW4gdGhlCitjb21tYW5kJ3Mgb3V0cHV0LiAgVmFyaW91cyBvdGhlciBvcHRpb25zIGFuZCBwYXRocyBwYXJhbWV0ZXJzIGNhbiBiZSB1c2VkCit0byBmdXJ0aGVyIGxpbWl0IHRoZSByZXN1bHQuCisKK1RodXMsIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkkIGdpdCByZXYtbGlzdCBmb28gYmFyIF5iYXoKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLW1lYW5zICJsaXN0IGFsbCB0aGUgY29tbWl0cyB3aGljaCBhcmUgaW5jbHVkZWQgaW4gJ2ZvbycgYW5kICdiYXInLCBidXQKLW5vdCBpbiAnYmF6JyIuCittZWFucyAibGlzdCBhbGwgdGhlIGNvbW1pdHMgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tICdmb28nIG9yICdiYXInLCBidXQKK25vdCBmcm9tICdiYXonIi4KIAogQSBzcGVjaWFsIG5vdGF0aW9uICInPGNvbW1pdDE+Jy4uJzxjb21taXQyPiciIGNhbiBiZSB1c2VkIGFzIGEKIHNob3J0LWhhbmQgZm9yICJ7Y2FyZXR9Jzxjb21taXQxPicgJzxjb21taXQyPiciLiBGb3IgZXhhbXBsZSwgZWl0aGVyIG9mCkBAIC04Niw4ICs5NCw4IEBACiAncmV2LWxpc3QnIGlzIGEgdmVyeSBlc3NlbnRpYWwgZ2l0IGNvbW1hbmQsIHNpbmNlIGl0CiBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBidWlsZCBhbmQgdHJhdmVyc2UgY29tbWl0IGFuY2VzdHJ5IGdyYXBocy4gRm9yCiB0aGlzIHJlYXNvbiwgaXQgaGFzIGEgbG90IG9mIGRpZmZlcmVudCBvcHRpb25zIHRoYXQgZW5hYmxlcyBpdCB0byBiZQotdXNlZCBieSBjb21tYW5kcyBhcyBkaWZmZXJlbnQgYXMgJ2dpdC1iaXNlY3QnIGFuZAotJ2dpdC1yZXBhY2snLgordXNlZCBieSBjb21tYW5kcyBhcyBkaWZmZXJlbnQgYXMgJ2dpdCBiaXNlY3QnIGFuZAorJ2dpdCByZXBhY2snLgogCiBPUFRJT05TCiAtLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtcGFyc2UudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmV2LXBhcnNlLnR4dAppbmRleCA1MmMzNTNlLi44ZGI2MDBmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtcGFyc2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJldi1wYXJzZS50eHQKQEAgLTE1LDI4ICsxNSwzOCBAQAogCiBNYW55IGdpdCBwb3JjZWxhaW5pc2ggY29tbWFuZHMgdGFrZSBtaXh0dXJlIG9mIGZsYWdzCiAoaS5lLiBwYXJhbWV0ZXJzIHRoYXQgYmVnaW4gd2l0aCBhIGRhc2ggJy0nKSBhbmQgcGFyYW1ldGVycwotbWVhbnQgZm9yIHRoZSB1bmRlcmx5aW5nICdnaXQtcmV2LWxpc3QnIGNvbW1hbmQgdGhleSB1c2UgaW50ZXJuYWxseQorbWVhbnQgZm9yIHRoZSB1bmRlcmx5aW5nICdnaXQgcmV2LWxpc3QnIGNvbW1hbmQgdGhleSB1c2UgaW50ZXJuYWxseQogYW5kIGZsYWdzIGFuZCBwYXJhbWV0ZXJzIGZvciB0aGUgb3RoZXIgY29tbWFuZHMgdGhleSB1c2UKLWRvd25zdHJlYW0gb2YgJ2dpdC1yZXYtbGlzdCcuICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0bworZG93bnN0cmVhbSBvZiAnZ2l0IHJldi1saXN0Jy4gIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvCiBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZW0uCiAKIAogT1BUSU9OUwogLS0tLS0tLQogLS1wYXJzZW9wdDo6Ci0JVXNlICdnaXQtcmV2LXBhcnNlJyBpbiBvcHRpb24gcGFyc2luZyBtb2RlIChzZWUgUEFSU0VPUFQgc2VjdGlvbiBiZWxvdykuCisJVXNlICdnaXQgcmV2LXBhcnNlJyBpbiBvcHRpb24gcGFyc2luZyBtb2RlIChzZWUgUEFSU0VPUFQgc2VjdGlvbiBiZWxvdykuCiAKIC0ta2VlcC1kYXNoZGFzaDo6CiAJT25seSBtZWFuaW5nZnVsIGluIGAtLXBhcnNlb3B0YCBtb2RlLiBUZWxscyB0aGUgb3B0aW9uIHBhcnNlciB0byBlY2hvCiAJb3V0IHRoZSBmaXJzdCBgLS1gIG1ldCBpbnN0ZWFkIG9mIHNraXBwaW5nIGl0LgogCistLXN0b3AtYXQtbm9uLW9wdGlvbjo6CisJT25seSBtZWFuaW5nZnVsIGluIGAtLXBhcnNlb3B0YCBtb2RlLiAgTGV0cyB0aGUgb3B0aW9uIHBhcnNlciBzdG9wIGF0CisJdGhlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHBhcnNlIHN1Yi1jb21tYW5kcworCXRoYXQgdGFrZSBvcHRpb25zIHRoZW1zZWx2ZXMuCisKKy0tc3EtcXVvdGU6OgorCVVzZSAnZ2l0IHJldi1wYXJzZScgaW4gc2hlbGwgcXVvdGluZyBtb2RlIChzZWUgU1EtUVVPVEUKKwlzZWN0aW9uIGJlbG93KS4gSW4gY29udHJhc3QgdG8gdGhlIGAtLXNxYCBvcHRpb24gYmVsb3csIHRoaXMKKwltb2RlIGRvZXMgb25seSBxdW90aW5nLiBOb3RoaW5nIGVsc2UgaXMgZG9uZSB0byBjb21tYW5kIGlucHV0LgorCiAtLXJldnMtb25seTo6CiAJRG8gbm90IG91dHB1dCBmbGFncyBhbmQgcGFyYW1ldGVycyBub3QgbWVhbnQgZm9yCi0JJ2dpdC1yZXYtbGlzdCcgY29tbWFuZC4KKwknZ2l0IHJldi1saXN0JyBjb21tYW5kLgogCiAtLW5vLXJldnM6OgogCURvIG5vdCBvdXRwdXQgZmxhZ3MgYW5kIHBhcmFtZXRlcnMgbWVhbnQgZm9yCi0JJ2dpdC1yZXYtbGlzdCcgY29tbWFuZC4KKwknZ2l0IHJldi1saXN0JyBjb21tYW5kLgogCiAtLWZsYWdzOjoKIAlEbyBub3Qgb3V0cHV0IG5vbi1mbGFnIHBhcmFtZXRlcnMuCkBAIC02NCw3ICs3NCw4IEBACiAJcHJvcGVybHkgcXVvdGVkIGZvciBjb25zdW1wdGlvbiBieSBzaGVsbC4gIFVzZWZ1bCB3aGVuCiAJeW91IGV4cGVjdCB5b3VyIHBhcmFtZXRlciB0byBjb250YWluIHdoaXRlc3BhY2VzIGFuZAogCW5ld2xpbmVzIChlLmcuIHdoZW4gdXNpbmcgcGlja2F4ZSBgLVNgIHdpdGgKLQknZ2l0LWRpZmYtXConKS4KKwknZ2l0IGRpZmYtXConKS4gSW4gY29udHJhc3QgdG8gdGhlIGAtLXNxLXF1b3RlYCBvcHRpb24sCisJdGhlIGNvbW1hbmQgaW5wdXQgaXMgc3RpbGwgaW50ZXJwcmV0ZWQgYXMgdXN1YWwuCiAKIC0tbm90OjoKIAlXaGVuIHNob3dpbmcgb2JqZWN0IG5hbWVzLCBwcmVmaXggdGhlbSB3aXRoICd7Y2FyZXR9JyBhbmQKQEAgLTkwLDE2ICsxMDEsMjggQEAKIAlhYmJyZXZpYXRpb24gbW9kZS4KIAogLS1hbGw6OgotCVNob3cgYWxsIHJlZnMgZm91bmQgaW4gYCRHSVRfRElSL3JlZnNgLgorCVNob3cgYWxsIHJlZnMgZm91bmQgaW4gYHJlZnMvYC4KIAotLS1icmFuY2hlczo6Ci0JU2hvdyBicmFuY2ggcmVmcyBmb3VuZCBpbiBgJEdJVF9ESVIvcmVmcy9oZWFkc2AuCistLWJyYW5jaGVzWz1wYXR0ZXJuXTo6CistLXRhZ3NbPXBhdHRlcm5dOjoKKy0tcmVtb3Rlc1s9cGF0dGVybl06OgorCVNob3cgYWxsIGJyYW5jaGVzLCB0YWdzLCBvciByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMsCisJcmVzcGVjdGl2ZWx5IChpLmUuLCByZWZzIGZvdW5kIGluIGByZWZzL2hlYWRzYCwKKwlgcmVmcy90YWdzYCwgb3IgYHJlZnMvcmVtb3Rlc2AsIHJlc3BlY3RpdmVseSkuCisrCitJZiBhIGBwYXR0ZXJuYCBpcyBnaXZlbiwgb25seSByZWZzIG1hdGNoaW5nIHRoZSBnaXZlbiBzaGVsbCBnbG9iIGFyZQorc2hvd24uICBJZiB0aGUgcGF0dGVybiBkb2VzIG5vdCBjb250YWluIGEgZ2xvYmJpbmcgY2hhcmFjdGVyIChgP2AsCitgXCpgLCBvciBgW2ApLCBpdCBpcyB0dXJuZWQgaW50byBhIHByZWZpeCBtYXRjaCBieSBhcHBlbmRpbmcgYC9cKmAuCiAKLS0tdGFnczo6Ci0JU2hvdyB0YWcgcmVmcyBmb3VuZCBpbiBgJEdJVF9ESVIvcmVmcy90YWdzYC4KKy0tZ2xvYj1wYXR0ZXJuOjoKKwlTaG93IGFsbCByZWZzIG1hdGNoaW5nIHRoZSBzaGVsbCBnbG9iIHBhdHRlcm4gYHBhdHRlcm5gLiBJZgorCXRoZSBwYXR0ZXJuIGRvZXMgbm90IHN0YXJ0IHdpdGggYHJlZnMvYCwgdGhpcyBpcyBhdXRvbWF0aWNhbGx5CisJcHJlcGVuZGVkLiAgSWYgdGhlIHBhdHRlcm4gZG9lcyBub3QgY29udGFpbiBhIGdsb2JiaW5nCisJY2hhcmFjdGVyIChgP2AsIGBcKmAsIG9yIGBbYCksIGl0IGlzIHR1cm5lZCBpbnRvIGEgcHJlZml4CisJbWF0Y2ggYnkgYXBwZW5kaW5nIGAvXCpgLgogCi0tLXJlbW90ZXM6OgotCVNob3cgdGFnIHJlZnMgZm91bmQgaW4gYCRHSVRfRElSL3JlZnMvcmVtb3Rlc2AuCistLXNob3ctdG9wbGV2ZWw6OgorCVNob3cgdGhlIGFic29sdXRlIHBhdGggb2YgdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCiAKIC0tc2hvdy1wcmVmaXg6OgogCVdoZW4gdGhlIGNvbW1hbmQgaXMgaW52b2tlZCBmcm9tIGEgc3ViZGlyZWN0b3J5LCBzaG93IHRoZQpAQCAtMTI1LDYgKzE0OCwxMiBAQAogLS1pcy1iYXJlLXJlcG9zaXRvcnk6OgogCVdoZW4gdGhlIHJlcG9zaXRvcnkgaXMgYmFyZSBwcmludCAidHJ1ZSIsIG90aGVyd2lzZSAiZmFsc2UiLgogCistLWxvY2FsLWVudi12YXJzOjoKKwlMaXN0IHRoZSBHSVRfKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCBhcmUgbG9jYWwgdG8gdGhlCisJcmVwb3NpdG9yeSAoZS5nLiBHSVRfRElSIG9yIEdJVF9XT1JLX1RSRUUsIGJ1dCBub3QgR0lUX0VESVRPUikuCisJT25seSB0aGUgbmFtZXMgb2YgdGhlIHZhcmlhYmxlcyBhcmUgbGlzdGVkLCBub3QgdGhlaXIgdmFsdWUsCisJZXZlbiBpZiB0aGV5IGFyZSBzZXQuCisKIC0tc2hvcnQ6OgogLS1zaG9ydD1udW1iZXI6OgogCUluc3RlYWQgb2Ygb3V0cHV0dGluZyB0aGUgZnVsbCBTSEExIHZhbHVlcyBvZiBvYmplY3QgbmFtZXMgdHJ5IHRvCkBAIC0xMzQsMTIgKzE2MywxMiBAQAogLS1zaW5jZT1kYXRlc3RyaW5nOjoKIC0tYWZ0ZXI9ZGF0ZXN0cmluZzo6CiAJUGFyc2UgdGhlIGRhdGUgc3RyaW5nLCBhbmQgb3V0cHV0IHRoZSBjb3JyZXNwb25kaW5nCi0JLS1tYXgtYWdlPSBwYXJhbWV0ZXIgZm9yICdnaXQtcmV2LWxpc3QnLgorCS0tbWF4LWFnZT0gcGFyYW1ldGVyIGZvciAnZ2l0IHJldi1saXN0Jy4KIAogLS11bnRpbD1kYXRlc3RyaW5nOjoKIC0tYmVmb3JlPWRhdGVzdHJpbmc6OgogCVBhcnNlIHRoZSBkYXRlIHN0cmluZywgYW5kIG91dHB1dCB0aGUgY29ycmVzcG9uZGluZwotCS0tbWluLWFnZT0gcGFyYW1ldGVyIGZvciAnZ2l0LXJldi1saXN0Jy4KKwktLW1pbi1hZ2U9IHBhcmFtZXRlciBmb3IgJ2dpdCByZXYtbGlzdCcuCiAKIDxhcmdzPi4uLjo6CiAJRmxhZ3MgYW5kIHBhcmFtZXRlcnMgdG8gYmUgcGFyc2VkLgpAQCAtMTYwLDEyICsxODksMTIgQEAKICAgbmFtZSB0aGUgc2FtZSBjb21taXQgb2JqZWN0IGlmIHRoZXJlIGFyZSBubyBvdGhlciBvYmplY3QgaW4KICAgeW91ciByZXBvc2l0b3J5IHdob3NlIG9iamVjdCBuYW1lIHN0YXJ0cyB3aXRoIGRhZTg2ZS4KIAotKiBBbiBvdXRwdXQgZnJvbSAnZ2l0LWRlc2NyaWJlJzsgaS5lLiBhIGNsb3Nlc3QgdGFnLCBvcHRpb25hbGx5CisqIEFuIG91dHB1dCBmcm9tICdnaXQgZGVzY3JpYmUnOyBpLmUuIGEgY2xvc2VzdCB0YWcsIG9wdGlvbmFsbHkKICAgZm9sbG93ZWQgYnkgYSBkYXNoIGFuZCBhIG51bWJlciBvZiBjb21taXRzLCBmb2xsb3dlZCBieSBhIGRhc2gsIGEKICAgYGdgLCBhbmQgYW4gYWJicmV2aWF0ZWQgb2JqZWN0IG5hbWUuCiAKICogQSBzeW1ib2xpYyByZWYgbmFtZS4gIEUuZy4gJ21hc3RlcicgdHlwaWNhbGx5IG1lYW5zIHRoZSBjb21taXQKLSAgb2JqZWN0IHJlZmVyZW5jZWQgYnkgJEdJVF9ESVIvcmVmcy9oZWFkcy9tYXN0ZXIuICBJZiB5b3UKKyAgb2JqZWN0IHJlZmVyZW5jZWQgYnkgcmVmcy9oZWFkcy9tYXN0ZXIuICBJZiB5b3UKICAgaGFwcGVuIHRvIGhhdmUgYm90aCBoZWFkcy9tYXN0ZXIgYW5kIHRhZ3MvbWFzdGVyLCB5b3UgY2FuCiAgIGV4cGxpY2l0bHkgc2F5ICdoZWFkcy9tYXN0ZXInIHRvIHRlbGwgZ2l0IHdoaWNoIG9uZSB5b3UgbWVhbi4KICAgV2hlbiBhbWJpZ3VvdXMsIGEgYDxuYW1lPmAgaXMgZGlzYW1iaWd1YXRlZCBieSB0YWtpbmcgdGhlCkBAIC0xNzQsMjUgKzIwMywyOCBAQAogICAuIGlmIGAkR0lUX0RJUi88bmFtZT5gIGV4aXN0cywgdGhhdCBpcyB3aGF0IHlvdSBtZWFuICh0aGlzIGlzIHVzdWFsbHkKICAgICB1c2VmdWwgb25seSBmb3IgYEhFQURgLCBgRkVUQ0hfSEVBRGAsIGBPUklHX0hFQURgIGFuZCBgTUVSR0VfSEVBRGApOwogCi0gIC4gb3RoZXJ3aXNlLCBgJEdJVF9ESVIvcmVmcy88bmFtZT5gIGlmIGV4aXN0czsKKyAgLiBvdGhlcndpc2UsIGByZWZzLzxuYW1lPmAgaWYgZXhpc3RzOwogCi0gIC4gb3RoZXJ3aXNlLCBgJEdJVF9ESVIvcmVmcy90YWdzLzxuYW1lPmAgaWYgZXhpc3RzOworICAuIG90aGVyd2lzZSwgYHJlZnMvdGFncy88bmFtZT5gIGlmIGV4aXN0czsKIAotICAuIG90aGVyd2lzZSwgYCRHSVRfRElSL3JlZnMvaGVhZHMvPG5hbWU+YCBpZiBleGlzdHM7CisgIC4gb3RoZXJ3aXNlLCBgcmVmcy9oZWFkcy88bmFtZT5gIGlmIGV4aXN0czsKIAotICAuIG90aGVyd2lzZSwgYCRHSVRfRElSL3JlZnMvcmVtb3Rlcy88bmFtZT5gIGlmIGV4aXN0czsKKyAgLiBvdGhlcndpc2UsIGByZWZzL3JlbW90ZXMvPG5hbWU+YCBpZiBleGlzdHM7CiAKLSAgLiBvdGhlcndpc2UsIGAkR0lUX0RJUi9yZWZzL3JlbW90ZXMvPG5hbWU+L0hFQURgIGlmIGV4aXN0cy4KKyAgLiBvdGhlcndpc2UsIGByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQURgIGlmIGV4aXN0cy4KICsKIEhFQUQgbmFtZXMgdGhlIGNvbW1pdCB5b3VyIGNoYW5nZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBpcyBiYXNlZCBvbi4KIEZFVENIX0hFQUQgcmVjb3JkcyB0aGUgYnJhbmNoIHlvdSBmZXRjaGVkIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeQotd2l0aCB5b3VyIGxhc3QgJ2dpdC1mZXRjaCcgaW52b2NhdGlvbi4KK3dpdGggeW91ciBsYXN0ICdnaXQgZmV0Y2gnIGludm9jYXRpb24uCiBPUklHX0hFQUQgaXMgY3JlYXRlZCBieSBjb21tYW5kcyB0aGF0IG1vdmVzIHlvdXIgSEVBRCBpbiBhIGRyYXN0aWMKIHdheSwgdG8gcmVjb3JkIHRoZSBwb3NpdGlvbiBvZiB0aGUgSEVBRCBiZWZvcmUgdGhlaXIgb3BlcmF0aW9uLCBzbyB0aGF0CiB5b3UgY2FuIGNoYW5nZSB0aGUgdGlwIG9mIHRoZSBicmFuY2ggYmFjayB0byB0aGUgc3RhdGUgYmVmb3JlIHlvdSByYW4KIHRoZW0gZWFzaWx5LgogTUVSR0VfSEVBRCByZWNvcmRzIHRoZSBjb21taXQocykgeW91IGFyZSBtZXJnaW5nIGludG8geW91ciBicmFuY2gKLXdoZW4geW91IHJ1biAnZ2l0LW1lcmdlJy4KK3doZW4geW91IHJ1biAnZ2l0IG1lcmdlJy4KKysKK05vdGUgdGhhdCBhbnkgb2YgdGhlIGByZWZzLypgIGNhc2VzIGFib3ZlIG1heSBjb21lIGVpdGhlciBmcm9tCit0aGUgYCRHSVRfRElSL3JlZnNgIGRpcmVjdG9yeSBvciBmcm9tIHRoZSBgJEdJVF9ESVIvcGFja2VkLXJlZnNgIGZpbGUuCiAKICogQSByZWYgZm9sbG93ZWQgYnkgdGhlIHN1ZmZpeCAnQCcgd2l0aCBhIGRhdGUgc3BlY2lmaWNhdGlvbgogICBlbmNsb3NlZCBpbiBhIGJyYWNlCkBAIC0yMjAsNiArMjUyLDEwIEBACiAqIFRoZSBzcGVjaWFsIGNvbnN0cnVjdCAnQFx7LTxuPlx9JyBtZWFucyB0aGUgPG4+dGggYnJhbmNoIGNoZWNrZWQgb3V0CiAgIGJlZm9yZSB0aGUgY3VycmVudCBvbmUuCiAKKyogVGhlIHN1ZmZpeCAnQFx7dXBzdHJlYW1cfScgdG8gYSByZWYgKHNob3J0IGZvcm0gJ3JlZkBce3VcfScpIHJlZmVycyB0bworICB0aGUgYnJhbmNoIHRoZSByZWYgaXMgc2V0IHRvIGJ1aWxkIG9uIHRvcCBvZi4gIE1pc3NpbmcgcmVmIGRlZmF1bHRzCisgIHRvIHRoZSBjdXJyZW50IGJyYW5jaC4KKwogKiBBIHN1ZmZpeCAne2NhcmV0fScgdG8gYSByZXZpc2lvbiBwYXJhbWV0ZXIgbWVhbnMgdGhlIGZpcnN0IHBhcmVudCBvZgogICB0aGF0IGNvbW1pdCBvYmplY3QuICAne2NhcmV0fTxuPicgbWVhbnMgdGhlIDxuPnRoIHBhcmVudCAoaS5lLgogICAncmV2e2NhcmV0fScKQEAgLTI5Nyw3ICszMzMsNyBAQAogU1BFQ0lGWUlORyBSQU5HRVMKIC0tLS0tLS0tLS0tLS0tLS0tCiAKLUhpc3RvcnkgdHJhdmVyc2luZyBjb21tYW5kcyBzdWNoIGFzICdnaXQtbG9nJyBvcGVyYXRlIG9uIGEgc2V0CitIaXN0b3J5IHRyYXZlcnNpbmcgY29tbWFuZHMgc3VjaCBhcyAnZ2l0IGxvZycgb3BlcmF0ZSBvbiBhIHNldAogb2YgY29tbWl0cywgbm90IGp1c3QgYSBzaW5nbGUgY29tbWl0LiAgVG8gdGhlc2UgY29tbWFuZHMsCiBzcGVjaWZ5aW5nIGEgc2luZ2xlIHJldmlzaW9uIHdpdGggdGhlIG5vdGF0aW9uIGRlc2NyaWJlZCBpbiB0aGUKIHByZXZpb3VzIHNlY3Rpb24gbWVhbnMgdGhlIHNldCBvZiBjb21taXRzIHJlYWNoYWJsZSBmcm9tIHRoYXQKQEAgLTMzOCw3ICszNzQsNyBAQAogUEFSU0VPUFQKIC0tLS0tLS0tCiAKLUluIGAtLXBhcnNlb3B0YCBtb2RlLCAnZ2l0LXJldi1wYXJzZScgaGVscHMgbWFzc2FnaW5nIG9wdGlvbnMgdG8gYnJpbmcgdG8gc2hlbGwKK0luIGAtLXBhcnNlb3B0YCBtb2RlLCAnZ2l0IHJldi1wYXJzZScgaGVscHMgbWFzc2FnaW5nIG9wdGlvbnMgdG8gYnJpbmcgdG8gc2hlbGwKIHNjcmlwdHMgdGhlIHNhbWUgZmFjaWxpdGllcyBDIGJ1aWx0aW5zIGhhdmUuIEl0IHdvcmtzIGFzIGFuIG9wdGlvbiBub3JtYWxpemVyCiAoZS5nLiBzcGxpdHMgc2luZ2xlIHN3aXRjaGVzIGFnZ3JlZ2F0ZSB2YWx1ZXMpLCBhIGJpdCBsaWtlIGBnZXRvcHQoMSlgIGRvZXMuCiAKQEAgLTM1MCw3ICszODYsNyBAQAogSW5wdXQgRm9ybWF0CiB+fn5+fn5+fn5+fn4KIAotJ2dpdC1yZXYtcGFyc2UgLS1wYXJzZW9wdCcgaW5wdXQgZm9ybWF0IGlzIGZ1bGx5IHRleHQgYmFzZWQuIEl0IGhhcyB0d28gcGFydHMsCisnZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0JyBpbnB1dCBmb3JtYXQgaXMgZnVsbHkgdGV4dCBiYXNlZC4gSXQgaGFzIHR3byBwYXJ0cywKIHNlcGFyYXRlZCBieSBhIGxpbmUgdGhhdCBjb250YWlucyBvbmx5IGAtLWAuIFRoZSBsaW5lcyBiZWZvcmUgdGhlIHNlcGFyYXRvcgogKHNob3VsZCBiZSBtb3JlIHRoYW4gb25lKSBhcmUgdXNlZCBmb3IgdGhlIHVzYWdlLgogVGhlIGxpbmVzIGFmdGVyIHRoZSBzZXBhcmF0b3IgZGVzY3JpYmUgdGhlIG9wdGlvbnMuCkBAIC00MDYsNiArNDQyLDMzIEBACiBldmFsIGBlY2hvICIkT1BUU19TUEVDIiB8IGdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLSAiJEAiIHx8IGVjaG8gZXhpdCAkP2AKIC0tLS0tLS0tLS0tLQogCitTUS1RVU9URQorLS0tLS0tLS0KKworSW4gYC0tc3EtcXVvdGVgIG1vZGUsICdnaXQgcmV2LXBhcnNlJyBlY2hvZXMgb24gdGhlIHN0YW5kYXJkIG91dHB1dCBhCitzaW5nbGUgbGluZSBzdWl0YWJsZSBmb3IgYHNoKDEpYCBgZXZhbGAuIFRoaXMgbGluZSBpcyBtYWRlIGJ5Citub3JtYWxpemluZyB0aGUgYXJndW1lbnRzIGZvbGxvd2luZyBgLS1zcS1xdW90ZWAuIE5vdGhpbmcgb3RoZXIgdGhhbgorcXVvdGluZyB0aGUgYXJndW1lbnRzIGlzIGRvbmUuCisKK0lmIHlvdSB3YW50IGNvbW1hbmQgaW5wdXQgdG8gc3RpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgdXN1YWwgYnkKKydnaXQgcmV2LXBhcnNlJyBiZWZvcmUgdGhlIG91dHB1dCBpcyBzaGVsbCBxdW90ZWQsIHNlZSB0aGUgYC0tc3FgCitvcHRpb24uCisKK0V4YW1wbGUKK35+fn5+fn4KKworLS0tLS0tLS0tLS0tCiskIGNhdCA+eW91ci1naXQtc2NyaXB0LnNoIDw8XEVPRgorIyEvYmluL3NoCithcmdzPSQoZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlICIkQCIpICAgIyBxdW90ZSB1c2VyLXN1cHBsaWVkIGFyZ3VtZW50cworY29tbWFuZD0iZ2l0IGZyb3R6IC1uMjQgJGFyZ3MiICAgICAgICAgICMgYW5kIHVzZSBpdCBpbnNpZGUgYSBoYW5kY3JhZnRlZAorCQkJCQkjIGNvbW1hbmQgbGluZQorZXZhbCAiJGNvbW1hbmQiCitFT0YKKworJCBzaCB5b3VyLWdpdC1zY3JpcHQuc2ggImEgYidjIgorLS0tLS0tLS0tLS0tCisKIEVYQU1QTEVTCiAtLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXZlcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmV2ZXJ0LnR4dAppbmRleCA1ZTExNzU4Li5jNjZiZjgwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXZlcnQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJldmVydC50eHQKQEAgLTIwLDggKzIwLDggQEAKIHRocm93IGF3YXkgYWxsIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeSwgeW91CiBzaG91bGQgc2VlIGxpbmtnaXQ6Z2l0LXJlc2V0WzFdLCBwYXJ0aWN1bGFybHkgdGhlICctLWhhcmQnIG9wdGlvbi4gIElmCiB5b3Ugd2FudCB0byBleHRyYWN0IHNwZWNpZmljIGZpbGVzIGFzIHRoZXkgd2VyZSBpbiBhbm90aGVyIGNvbW1pdCwgeW91Ci1zaG91bGQgc2VlIGxpbmtnaXQ6Z2l0LWNoZWNrb3V0WzFdLCBzcGVjaWZpY2FsbHkgdGhlICdnaXQgY2hlY2tvdXQKLTxjb21taXQ+IC0tIDxmaWxlbmFtZT4nIHN5bnRheC4gIFRha2UgY2FyZSB3aXRoIHRoZXNlIGFsdGVybmF0aXZlcyBhcworc2hvdWxkIHNlZSBsaW5rZ2l0OmdpdC1jaGVja291dFsxXSwgc3BlY2lmaWNhbGx5IHRoZSBgZ2l0IGNoZWNrb3V0Cis8Y29tbWl0PiAtLSA8ZmlsZW5hbWU+YCBzeW50YXguICBUYWtlIGNhcmUgd2l0aCB0aGVzZSBhbHRlcm5hdGl2ZXMgYXMKIGJvdGggd2lsbCBkaXNjYXJkIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeS4KIAogT1BUSU9OUwpAQCAtMzMsNyArMzMsNyBAQAogCiAtZTo6CiAtLWVkaXQ6OgotCVdpdGggdGhpcyBvcHRpb24sICdnaXQtcmV2ZXJ0JyB3aWxsIGxldCB5b3UgZWRpdCB0aGUgY29tbWl0CisJV2l0aCB0aGlzIG9wdGlvbiwgJ2dpdCByZXZlcnQnIHdpbGwgbGV0IHlvdSBlZGl0IHRoZSBjb21taXQKIAltZXNzYWdlIHByaW9yIHRvIGNvbW1pdHRpbmcgdGhlIHJldmVydC4gVGhpcyBpcyB0aGUgZGVmYXVsdCBpZgogCXlvdSBydW4gdGhlIGNvbW1hbmQgZnJvbSBhIHRlcm1pbmFsLgogCkBAIC01NCw3ICs1NCw3IEBACiBtb3JlIGRldGFpbHMuCiAKIC0tbm8tZWRpdDo6Ci0JV2l0aCB0aGlzIG9wdGlvbiwgJ2dpdC1yZXZlcnQnIHdpbGwgbm90IHN0YXJ0IHRoZSBjb21taXQKKwlXaXRoIHRoaXMgb3B0aW9uLCAnZ2l0IHJldmVydCcgd2lsbCBub3Qgc3RhcnQgdGhlIGNvbW1pdAogCW1lc3NhZ2UgZWRpdG9yLgogCiAtbjo6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1ybS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1ybS50eHQKaW5kZXggNWFmYjFlNy4uYzIxZDE5ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcm0udHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJtLnR4dApAQCAtMTIsMTMgKzEyLDEzIEBACiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KIFJlbW92ZSBmaWxlcyBmcm9tIHRoZSBpbmRleCwgb3IgZnJvbSB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXguCi0nZ2l0LXJtJyB3aWxsIG5vdCByZW1vdmUgYSBmaWxlIGZyb20ganVzdCB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5LgotKFRoZXJlIGlzIG5vIG9wdGlvbiB0byByZW1vdmUgYSBmaWxlIG9ubHkgZnJvbSB0aGUgd29yayB0cmVlCitgZ2l0IHJtYCB3aWxsIG5vdCByZW1vdmUgYSBmaWxlIGZyb20ganVzdCB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5LgorKFRoZXJlIGlzIG5vIG9wdGlvbiB0byByZW1vdmUgYSBmaWxlIG9ubHkgZnJvbSB0aGUgd29ya2luZyB0cmVlCiBhbmQgeWV0IGtlZXAgaXQgaW4gdGhlIGluZGV4OyB1c2UgYC9iaW4vcm1gIGlmIHlvdSB3YW50IHRvIGRvIHRoYXQuKQogVGhlIGZpbGVzIGJlaW5nIHJlbW92ZWQgaGF2ZSB0byBiZSBpZGVudGljYWwgdG8gdGhlIHRpcCBvZiB0aGUgYnJhbmNoLAogYW5kIG5vIHVwZGF0ZXMgdG8gdGhlaXIgY29udGVudHMgY2FuIGJlIHN0YWdlZCBpbiB0aGUgaW5kZXgsCiB0aG91Z2ggdGhhdCBkZWZhdWx0IGJlaGF2aW9yIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIGAtZmAgb3B0aW9uLgotV2hlbiAnLS1jYWNoZWQnIGlzIGdpdmVuLCB0aGUgc3RhZ2VkIGNvbnRlbnQgaGFzIHRvCitXaGVuIGAtLWNhY2hlZGAgaXMgZ2l2ZW4sIHRoZSBzdGFnZWQgY29udGVudCBoYXMgdG8KIG1hdGNoIGVpdGhlciB0aGUgdGlwIG9mIHRoZSBicmFuY2ggb3IgdGhlIGZpbGUgb24gZGlzaywKIGFsbG93aW5nIHRoZSBmaWxlIHRvIGJlIHJlbW92ZWQgZnJvbSBqdXN0IHRoZSBpbmRleC4KIApAQCAtNjQsNyArNjQsNyBAQAogCiAtcTo6CiAtLXF1aWV0OjoKLQknZ2l0LXJtJyBub3JtYWxseSBvdXRwdXRzIG9uZSBsaW5lIChpbiB0aGUgZm9ybSBvZiBhbiAicm0iIGNvbW1hbmQpCisJYGdpdCBybWAgbm9ybWFsbHkgb3V0cHV0cyBvbmUgbGluZSAoaW4gdGhlIGZvcm0gb2YgYW4gYHJtYCBjb21tYW5kKQogCWZvciBlYWNoIGZpbGUgcmVtb3ZlZC4gVGhpcyBvcHRpb24gc3VwcHJlc3NlcyB0aGF0IG91dHB1dC4KIAogCkBAIC04MSw2ICs4MSw1OCBAQAogdXNpbmcgYGdpdCBybSBcJ2RcKlwnYCBhbmQgYGdpdCBybSBcJ2QvXCpcJ2AsIGFzIHRoZSBmb3JtZXIgd2lsbAogYWxzbyByZW1vdmUgYWxsIG9mIGRpcmVjdG9yeSBgZDJgLgogCitSRU1PVklORyBGSUxFUyBUSEFUIEhBVkUgRElTQVBQRUFSRUQgRlJPTSBUSEUgRklMRVNZU1RFTQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZXJlIGlzIG5vIG9wdGlvbiBmb3IgYGdpdCBybWAgdG8gcmVtb3ZlIGZyb20gdGhlIGluZGV4IG9ubHkKK3RoZSBwYXRocyB0aGF0IGhhdmUgZGlzYXBwZWFyZWQgZnJvbSB0aGUgZmlsZXN5c3RlbS4gSG93ZXZlciwKK2RlcGVuZGluZyBvbiB0aGUgdXNlIGNhc2UsIHRoZXJlIGFyZSBzZXZlcmFsIHdheXMgdGhhdCBjYW4gYmUKK2RvbmUuCisKK1VzaW5nICJnaXQgY29tbWl0IC1hIgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+CitJZiB5b3UgaW50ZW5kIHRoYXQgeW91ciBuZXh0IGNvbW1pdCBzaG91bGQgcmVjb3JkIGFsbCBtb2RpZmljYXRpb25zCitvZiB0cmFja2VkIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgYW5kIHJlY29yZCBhbGwgcmVtb3ZhbHMgb2YKK2ZpbGVzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgd29ya2luZyB0cmVlIHdpdGggYHJtYAorKGFzIG9wcG9zZWQgdG8gYGdpdCBybWApLCB1c2UgYGdpdCBjb21taXQgLWFgLCBhcyBpdCB3aWxsCithdXRvbWF0aWNhbGx5IG5vdGljZSBhbmQgcmVjb3JkIGFsbCByZW1vdmFscy4gIFlvdSBjYW4gYWxzbyBoYXZlIGEKK3NpbWlsYXIgZWZmZWN0IHdpdGhvdXQgY29tbWl0dGluZyBieSB1c2luZyBgZ2l0IGFkZCAtdWAuCisKK1VzaW5nICJnaXQgYWRkIC1BIgorfn5+fn5+fn5+fn5+fn5+fn5+CitXaGVuIGFjY2VwdGluZyBhIG5ldyBjb2RlIGRyb3AgZm9yIGEgdmVuZG9yIGJyYW5jaCwgeW91IHByb2JhYmx5Cit3YW50IHRvIHJlY29yZCBib3RoIHRoZSByZW1vdmFsIG9mIHBhdGhzIGFuZCBhZGRpdGlvbnMgb2YgbmV3IHBhdGhzCithcyB3ZWxsIGFzIG1vZGlmaWNhdGlvbnMgb2YgZXhpc3RpbmcgcGF0aHMuCisKK1R5cGljYWxseSB5b3Ugd291bGQgZmlyc3QgcmVtb3ZlIGFsbCB0cmFja2VkIGZpbGVzIGZyb20gdGhlIHdvcmtpbmcKK3RyZWUgdXNpbmcgdGhpcyBjb21tYW5kOgorCistLS0tLS0tLS0tLS0tLS0tCitnaXQgbHMtZmlsZXMgLXogfCB4YXJncyAtMCBybSAtZgorLS0tLS0tLS0tLS0tLS0tLQorCithbmQgdGhlbiAidW50YXIiIHRoZSBuZXcgY29kZSBpbiB0aGUgd29ya2luZyB0cmVlLiBBbHRlcm5hdGVseQoreW91IGNvdWxkICJyc3luYyIgdGhlIGNoYW5nZXMgaW50byB0aGUgd29ya2luZyB0cmVlLgorCitBZnRlciB0aGF0LCB0aGUgZWFzaWVzdCB3YXkgdG8gcmVjb3JkIGFsbCByZW1vdmFscywgYWRkaXRpb25zLCBhbmQKK21vZGlmaWNhdGlvbnMgaW4gdGhlIHdvcmtpbmcgdHJlZSBpczoKKworLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGFkZCAtQQorLS0tLS0tLS0tLS0tLS0tLQorCitTZWUgbGlua2dpdDpnaXQtYWRkWzFdLgorCitPdGhlciB3YXlzCit+fn5+fn5+fn5+CitJZiBhbGwgeW91IHJlYWxseSB3YW50IHRvIGRvIGlzIHRvIHJlbW92ZSBmcm9tIHRoZSBpbmRleCB0aGUgZmlsZXMKK3RoYXQgYXJlIG5vIGxvbmdlciBwcmVzZW50IGluIHRoZSB3b3JraW5nIHRyZWUgKHBlcmhhcHMgYmVjYXVzZQoreW91ciB3b3JraW5nIHRyZWUgaXMgZGlydHkgc28gdGhhdCB5b3UgY2Fubm90IHVzZSBgZ2l0IGNvbW1pdCAtYWApLAordXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGRpZmYgLS1uYW1lLW9ubHkgLS1kaWZmLWZpbHRlcj1EIC16IHwgeGFyZ3MgLTAgZ2l0IHJtIC0tY2FjaGVkCistLS0tLS0tLS0tLS0tLS0tCisKIEVYQU1QTEVTCiAtLS0tLS0tLQogZ2l0IHJtIERvY3VtZW50YXRpb24vXFwqLnR4dDo6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zZW5kLWVtYWlsLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNlbmQtZW1haWwudHh0CmluZGV4IGEyODIxOTAuLmNlZDM1YjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXNlbmQtZW1haWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNlbmQtZW1haWwudHh0CkBAIC00Myw2ICs0MywxMCBAQAogQ29tcG9zaW5nCiB+fn5+fn5+fn4KIAorLS1hbm5vdGF0ZTo6CisJUmV2aWV3IGFuZCBlZGl0IGVhY2ggcGF0Y2ggeW91J3JlIGFib3V0IHRvIHNlbmQuIFNlZSB0aGUKKwlDT05GSUdVUkFUSU9OIHNlY3Rpb24gZm9yICdzZW5kZW1haWwubXVsdGllZGl0Jy4KKwogLS1iY2M9PGFkZHJlc3M+OjoKIAlTcGVjaWZ5IGEgIkJjYzoiIHZhbHVlIGZvciBlYWNoIGVtYWlsLiBEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZgogCSdzZW5kZW1haWwuYmNjJy4KQEAgLTU1LDE0ICs1OSw5IEBACiArCiBUaGUgLS1jYyBvcHRpb24gbXVzdCBiZSByZXBlYXRlZCBmb3IgZWFjaCB1c2VyIHlvdSB3YW50IG9uIHRoZSBjYyBsaXN0LgogCi0tLWFubm90YXRlOjoKLQlSZXZpZXcgZWFjaCBwYXRjaCB5b3UncmUgYWJvdXQgdG8gc2VuZCBpbiBhbiBlZGl0b3IuIFRoZSBzZXR0aW5nCi0JJ3NlbmRlbWFpbC5tdWx0aWVkaXQnIGRlZmluZXMgaWYgdGhpcyB3aWxsIHNwYXduIG9uZSBlZGl0b3IgcGVyIHBhdGNoCi0Jb3Igb25lIGZvciBhbGwgb2YgdGhlbSBhdCBvbmNlLgotCiAtLWNvbXBvc2U6OgotCVVzZSAkR0lUX0VESVRPUiwgY29yZS5lZGl0b3IsICRWSVNVQUwsIG9yICRFRElUT1IgdG8gZWRpdCBhbgotCWludHJvZHVjdG9yeSBtZXNzYWdlIGZvciB0aGUgcGF0Y2ggc2VyaWVzLgorCUludm9rZSBhIHRleHQgZWRpdG9yIChzZWUgR0lUX0VESVRPUiBpbiBsaW5rZ2l0OmdpdC12YXJbMV0pCisJdG8gZWRpdCBhbiBpbnRyb2R1Y3RvcnkgbWVzc2FnZSBmb3IgdGhlIHBhdGNoIHNlcmllcy4KICsKIFdoZW4gJy0tY29tcG9zZScgaXMgdXNlZCwgZ2l0IHNlbmQtZW1haWwgd2lsbCB1c2UgdGhlIEZyb20sIFN1YmplY3QsIGFuZAogSW4tUmVwbHktVG8gaGVhZGVycyBzcGVjaWZpZWQgaW4gdGhlIG1lc3NhZ2UuIElmIHRoZSBib2R5IG9mIHRoZSBtZXNzYWdlCkBAIC03MSwxNiArNzAsMjEgQEAKIGFuZCBJbi1SZXBseS1UbyBoZWFkZXJzIHdpbGwgYmUgdXNlZCB1bmxlc3MgdGhleSBhcmUgcmVtb3ZlZC4KICsKIE1pc3NpbmcgRnJvbSBvciBJbi1SZXBseS1UbyBoZWFkZXJzIHdpbGwgYmUgcHJvbXB0ZWQgZm9yLgorKworU2VlIHRoZSBDT05GSUdVUkFUSU9OIHNlY3Rpb24gZm9yICdzZW5kZW1haWwubXVsdGllZGl0Jy4KIAogLS1mcm9tPTxhZGRyZXNzPjo6Ci0JU3BlY2lmeSB0aGUgc2VuZGVyIG9mIHRoZSBlbWFpbHMuICBUaGlzIHdpbGwgZGVmYXVsdCB0bwotCXRoZSB2YWx1ZSBHSVRfQ09NTUlUVEVSX0lERU5ULCBhcyByZXR1cm5lZCBieSAiZ2l0IHZhciAtbCIuCi0JVGhlIHVzZXIgd2lsbCBzdGlsbCBiZSBwcm9tcHRlZCB0byBjb25maXJtIHRoaXMgZW50cnkuCisJU3BlY2lmeSB0aGUgc2VuZGVyIG9mIHRoZSBlbWFpbHMuICBJZiBub3Qgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsCisJdGhlIHZhbHVlIG9mIHRoZSAnc2VuZGVtYWlsLmZyb20nIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHVzZWQuICBJZgorCW5laXRoZXIgdGhlIGNvbW1hbmQgbGluZSBvcHRpb24gbm9yICdzZW5kZW1haWwuZnJvbScgYXJlIHNldCwgdGhlbiB0aGUKKwl1c2VyIHdpbGwgYmUgcHJvbXB0ZWQgZm9yIHRoZSB2YWx1ZS4gIFRoZSBkZWZhdWx0IGZvciB0aGUgcHJvbXB0IHdpbGwgYmUKKwl0aGUgdmFsdWUgb2YgR0lUX0FVVEhPUl9JREVOVCwgb3IgR0lUX0NPTU1JVFRFUl9JREVOVCBpZiB0aGF0IGlzIG5vdAorCXNldCwgYXMgcmV0dXJuZWQgYnkgImdpdCB2YXIgLWwiLgogCiAtLWluLXJlcGx5LXRvPTxpZGVudGlmaWVyPjo6CiAJU3BlY2lmeSB0aGUgY29udGVudHMgb2YgdGhlIGZpcnN0IEluLVJlcGx5LVRvIGhlYWRlci4KIAlTdWJzZXF1ZW50IGVtYWlscyB3aWxsIHJlZmVyIHRvIHRoZSBwcmV2aW91cyBlbWFpbAotCWluc3RlYWQgb2YgdGhpcyBpZiAtLWNoYWluLXJlcGx5LXRvIGlzIHNldCAodGhlIGRlZmF1bHQpCisJaW5zdGVhZCBvZiB0aGlzIGlmIC0tY2hhaW4tcmVwbHktdG8gaXMgc2V0LgogCU9ubHkgbmVjZXNzYXJ5IGlmIC0tY29tcG9zZSBpcyBhbHNvIHNldC4gIElmIC0tY29tcG9zZQogCWlzIG5vdCBzZXQsIHRoaXMgd2lsbCBiZSBwcm9tcHRlZCBmb3IuCiAKQEAgLTEwNCw5ICsxMDgsMTAgQEAKIC0tZW52ZWxvcGUtc2VuZGVyPTxhZGRyZXNzPjo6CiAJU3BlY2lmeSB0aGUgZW52ZWxvcGUgc2VuZGVyIHVzZWQgdG8gc2VuZCB0aGUgZW1haWxzLgogCVRoaXMgaXMgdXNlZnVsIGlmIHlvdXIgZGVmYXVsdCBhZGRyZXNzIGlzIG5vdCB0aGUgYWRkcmVzcyB0aGF0IGlzCi0Jc3Vic2NyaWJlZCB0byBhIGxpc3QuIElmIHlvdSB1c2UgdGhlIHNlbmRtYWlsIGJpbmFyeSwgeW91IG11c3QgaGF2ZQotCXN1aXRhYmxlIHByaXZpbGVnZXMgZm9yIHRoZSAtZiBwYXJhbWV0ZXIuIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mCi0JdGhlICdzZW5kZW1haWwuZW52ZWxvcGVzZW5kZXInIGNvbmZpZ3VyYXRpb24gdmFyaWFibGU7IGlmIHRoYXQgaXMKKwlzdWJzY3JpYmVkIHRvIGEgbGlzdC4gSW4gb3JkZXIgdG8gdXNlIHRoZSAnRnJvbScgYWRkcmVzcywgc2V0IHRoZQorCXZhbHVlIHRvICJhdXRvIi4gSWYgeW91IHVzZSB0aGUgc2VuZG1haWwgYmluYXJ5LCB5b3UgbXVzdCBoYXZlCisJc3VpdGFibGUgcHJpdmlsZWdlcyBmb3IgdGhlIC1mIHBhcmFtZXRlci4gIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mIHRoZQorCSdzZW5kZW1haWwuZW52ZWxvcGVzZW5kZXInIGNvbmZpZ3VyYXRpb24gdmFyaWFibGU7IGlmIHRoYXQgaXMKIAl1bnNwZWNpZmllZCwgY2hvb3NpbmcgdGhlIGVudmVsb3BlIHNlbmRlciBpcyBsZWZ0IHRvIHlvdXIgTVRBLgogCiAtLXNtdHAtZW5jcnlwdGlvbj08ZW5jcnlwdGlvbj46OgpAQCAtMTM4LDggKzE0MywxMSBAQAogCiAtLXNtdHAtc2VydmVyLXBvcnQ9PHBvcnQ+OjoKIAlTcGVjaWZpZXMgYSBwb3J0IGRpZmZlcmVudCBmcm9tIHRoZSBkZWZhdWx0IHBvcnQgKFNNVFAKLQlzZXJ2ZXJzIHR5cGljYWxseSBsaXN0ZW4gdG8gc210cCBwb3J0IDI1IGFuZCBzc210cCBwb3J0Ci0JNDY1KS4gVGhpcyBjYW4gYmUgc2V0IHdpdGggJ3NlbmRlbWFpbC5zbXRwc2VydmVycG9ydCcuCisJc2VydmVycyB0eXBpY2FsbHkgbGlzdGVuIHRvIHNtdHAgcG9ydCAyNSwgYnV0IG1heSBhbHNvIGxpc3RlbiB0bworCXN1Ym1pc3Npb24gcG9ydCA1ODcsIG9yIHRoZSBjb21tb24gU1NMIHNtdHAgcG9ydCA0NjUpOworCXN5bWJvbGljIHBvcnQgbmFtZXMgKGUuZy4gInN1Ym1pc3Npb24iIGluc3RlYWQgb2YgNTg3KQorCWFyZSBhbHNvIGFjY2VwdGVkLiBUaGUgcG9ydCBjYW4gYWxzbyBiZSBzZXQgd2l0aCB0aGUKKwknc2VuZGVtYWlsLnNtdHBzZXJ2ZXJwb3J0JyBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgogCiAtLXNtdHAtc3NsOjoKIAlMZWdhY3kgYWxpYXMgZm9yICctLXNtdHAtZW5jcnlwdGlvbiBzc2wnLgpAQCAtMTU5LDEzICsxNjcsMTMgQEAKIAlPdXRwdXQgb2YgdGhpcyBjb21tYW5kIG11c3QgYmUgc2luZ2xlIGVtYWlsIGFkZHJlc3MgcGVyIGxpbmUuCiAJRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgJ3NlbmRlbWFpbC5jY2NtZCcgY29uZmlndXJhdGlvbiB2YWx1ZS4KIAotLS1bbm8tXWNoYWluLXJlcGx5LXRvPTxpZGVudGlmaWVyPjo6CistLVtuby1dY2hhaW4tcmVwbHktdG86OgogCUlmIHRoaXMgaXMgc2V0LCBlYWNoIGVtYWlsIHdpbGwgYmUgc2VudCBhcyBhIHJlcGx5IHRvIHRoZSBwcmV2aW91cwogCWVtYWlsIHNlbnQuICBJZiBkaXNhYmxlZCB3aXRoICItLW5vLWNoYWluLXJlcGx5LXRvIiwgYWxsIGVtYWlscyBhZnRlcgogCXRoZSBmaXJzdCB3aWxsIGJlIHNlbnQgYXMgcmVwbGllcyB0byB0aGUgZmlyc3QgZW1haWwgc2VudC4gIFdoZW4gdXNpbmcKIAl0aGlzLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoZSBmaXJzdCBmaWxlIGdpdmVuIGJlIGFuIG92ZXJ2aWV3IG9mIHRoZQotCWVudGlyZSBwYXRjaCBzZXJpZXMuIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mIHRoZSAnc2VuZGVtYWlsLmNoYWlucmVwbHl0bycKLQljb25maWd1cmF0aW9uIHZhbHVlOyBpZiB0aGF0IGlzIHVuc3BlY2lmaWVkLCBkZWZhdWx0IHRvIC0tY2hhaW4tcmVwbHktdG8uCisJZW50aXJlIHBhdGNoIHNlcmllcy4gRGlzYWJsZWQgYnkgZGVmYXVsdCwgYnV0IHRoZSAnc2VuZGVtYWlsLmNoYWlucmVwbHl0bycKKwljb25maWd1cmF0aW9uIHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSBpdC4KIAogLS1pZGVudGl0eT08aWRlbnRpdHk+OjoKIAlBIGNvbmZpZ3VyYXRpb24gaWRlbnRpdHkuIFdoZW4gZ2l2ZW4sIGNhdXNlcyB2YWx1ZXMgaW4gdGhlCkBAIC0xODcsMTIgKzE5NSwxMiBAQAogLSAnc2VsZicgd2lsbCBhdm9pZCBpbmNsdWRpbmcgdGhlIHNlbmRlcgogLSAnY2MnIHdpbGwgYXZvaWQgaW5jbHVkaW5nIGFueW9uZSBtZW50aW9uZWQgaW4gQ2MgbGluZXMgaW4gdGhlIHBhdGNoIGhlYWRlcgogICBleGNlcHQgZm9yIHNlbGYgKHVzZSAnc2VsZicgZm9yIHRoYXQpLgotLSAnY2Nib2R5JyB3aWxsIGF2b2lkIGluY2x1ZGluZyBhbnlvbmUgbWVudGlvbmVkIGluIENjIGxpbmVzIGluIHRoZQorLSAnYm9keWNjJyB3aWxsIGF2b2lkIGluY2x1ZGluZyBhbnlvbmUgbWVudGlvbmVkIGluIENjIGxpbmVzIGluIHRoZQogICBwYXRjaCBib2R5IChjb21taXQgbWVzc2FnZSkgZXhjZXB0IGZvciBzZWxmICh1c2UgJ3NlbGYnIGZvciB0aGF0KS4KIC0gJ3NvYicgd2lsbCBhdm9pZCBpbmNsdWRpbmcgYW55b25lIG1lbnRpb25lZCBpbiBTaWduZWQtb2ZmLWJ5IGxpbmVzIGV4Y2VwdAogICAgZm9yIHNlbGYgKHVzZSAnc2VsZicgZm9yIHRoYXQpLgogLSAnY2NjbWQnIHdpbGwgYXZvaWQgcnVubmluZyB0aGUgLS1jYy1jbWQuCi0tICdib2R5JyBpcyBlcXVpdmFsZW50IHRvICdzb2InICsgJ2NjYm9keScKKy0gJ2JvZHknIGlzIGVxdWl2YWxlbnQgdG8gJ3NvYicgKyAnYm9keWNjJwogLSAnYWxsJyB3aWxsIHN1cHByZXNzIGFsbCBhdXRvIGNjIHZhbHVlcy4KIC0tCiArCkBAIC0yMDYsMTAgKzIxNCwyMiBAQAogCXZhbHVlOyBpZiB0aGF0IGlzIHVuc3BlY2lmaWVkLCBkZWZhdWx0IHRvIC0tbm8tc3VwcHJlc3MtZnJvbS4KIAogLS1bbm8tXXRocmVhZDo6Ci0JSWYgdGhpcyBpcyBzZXQsIHRoZSBJbi1SZXBseS1UbyBoZWFkZXIgd2lsbCBiZSBzZXQgb24gZWFjaCBlbWFpbCBzZW50LgotCUlmIGRpc2FibGVkIHdpdGggIi0tbm8tdGhyZWFkIiwgbm8gZW1haWxzIHdpbGwgaGF2ZSB0aGUgSW4tUmVwbHktVG8KLQloZWFkZXIgc2V0LiBEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiB0aGUgJ3NlbmRlbWFpbC50aHJlYWQnIGNvbmZpZ3VyYXRpb24KLQl2YWx1ZTsgaWYgdGhhdCBpcyB1bnNwZWNpZmllZCwgZGVmYXVsdCB0byAtLXRocmVhZC4KKwlJZiB0aGlzIGlzIHNldCwgdGhlIEluLVJlcGx5LVRvIGFuZCBSZWZlcmVuY2VzIGhlYWRlcnMgd2lsbCBiZQorCWFkZGVkIHRvIGVhY2ggZW1haWwgc2VudC4gIFdoZXRoZXIgZWFjaCBtYWlsIHJlZmVycyB0byB0aGUKKwlwcmV2aW91cyBlbWFpbCAoYGRlZXBgIHRocmVhZGluZyBwZXIgJ2dpdCBmb3JtYXQtcGF0Y2gnCisJd29yZGluZykgb3IgdG8gdGhlIGZpcnN0IGVtYWlsIChgc2hhbGxvd2AgdGhyZWFkaW5nKSBpcworCWdvdmVybmVkIGJ5ICItLVtuby1dY2hhaW4tcmVwbHktdG8iLgorKworSWYgZGlzYWJsZWQgd2l0aCAiLS1uby10aHJlYWQiLCB0aG9zZSBoZWFkZXJzIHdpbGwgbm90IGJlIGFkZGVkCisodW5sZXNzIHNwZWNpZmllZCB3aXRoIC0taW4tcmVwbHktdG8pLiAgRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgdGhlCisnc2VuZGVtYWlsLnRocmVhZCcgY29uZmlndXJhdGlvbiB2YWx1ZTsgaWYgdGhhdCBpcyB1bnNwZWNpZmllZCwKK2RlZmF1bHQgdG8gLS10aHJlYWQuCisrCitJdCBpcyB1cCB0byB0aGUgdXNlciB0byBlbnN1cmUgdGhhdCBubyBJbi1SZXBseS1UbyBoZWFkZXIgYWxyZWFkeQorZXhpc3RzIHdoZW4gJ2dpdCBzZW5kLWVtYWlsJyBpcyBhc2tlZCB0byBhZGQgaXQgKGVzcGVjaWFsbHkgbm90ZSB0aGF0CisnZ2l0IGZvcm1hdC1wYXRjaCcgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gZG8gdGhlIHRocmVhZGluZyBpdHNlbGYpLgorRmFpbHVyZSB0byBkbyBzbyBtYXkgbm90IHByb2R1Y2UgdGhlIGV4cGVjdGVkIHJlc3VsdCBpbiB0aGUKK3JlY2lwaWVudCdzIE1VQS4KIAogCiBBZG1pbmlzdGVyaW5nCkBAIC0yMzQsNiArMjU0LDEyIEBACiAtLWRyeS1ydW46OgogCURvIGV2ZXJ5dGhpbmcgZXhjZXB0IGFjdHVhbGx5IHNlbmQgdGhlIGVtYWlscy4KIAorLS1bbm8tXWZvcm1hdC1wYXRjaDo6CisJV2hlbiBhbiBhcmd1bWVudCBtYXkgYmUgdW5kZXJzdG9vZCBlaXRoZXIgYXMgYSByZWZlcmVuY2Ugb3IgYXMgYSBmaWxlIG5hbWUsCisJY2hvb3NlIHRvIHVuZGVyc3RhbmQgaXQgYXMgYSBmb3JtYXQtcGF0Y2ggYXJndW1lbnQgKCctLWZvcm1hdC1wYXRjaCcpCisJb3IgYXMgYSBmaWxlIG5hbWUgKCctLW5vLWZvcm1hdC1wYXRjaCcpLiBCeSBkZWZhdWx0LCB3aGVuIHN1Y2ggYSBjb25mbGljdAorCW9jY3VycywgZ2l0IHNlbmQtZW1haWwgd2lsbCBmYWlsLgorCiAtLXF1aWV0OjoKIAlNYWtlIGdpdC1zZW5kLWVtYWlsIGxlc3MgdmVyYm9zZS4gIE9uZSBsaW5lIHBlciBlbWFpbCBzaG91bGQgYmUKIAlhbGwgdGhhdCBpcyBvdXRwdXQuCkBAIC0yNTAsMTIgKzI3Niw2IEBACiBEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiAnc2VuZGVtYWlsLnZhbGlkYXRlJzsgaWYgdGhpcyBpcyBub3Qgc2V0LAogZGVmYXVsdCB0byAnLS12YWxpZGF0ZScuCiAKLS0tW25vLV1mb3JtYXQtcGF0Y2g6OgotCVdoZW4gYW4gYXJndW1lbnQgbWF5IGJlIHVuZGVyc3Rvb2QgZWl0aGVyIGFzIGEgcmVmZXJlbmNlIG9yIGFzIGEgZmlsZSBuYW1lLAotCWNob29zZSB0byB1bmRlcnN0YW5kIGl0IGFzIGEgZm9ybWF0LXBhdGNoIGFyZ3VtZW50ICgnLS1mb3JtYXQtcGF0Y2gnKQotCW9yIGFzIGEgZmlsZSBuYW1lICgnLS1uby1mb3JtYXQtcGF0Y2gnKS4gQnkgZGVmYXVsdCwgd2hlbiBzdWNoIGEgY29uZmxpY3QKLQlvY2N1cnMsIGdpdCBzZW5kLWVtYWlsIHdpbGwgZmFpbC4KLQogCiBDT05GSUdVUkFUSU9OCiAtLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zZW5kLXBhY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1wYWNrLnR4dAppbmRleCAzOTk4MjE4Li5kZWFhN2Q5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zZW5kLXBhY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNlbmQtcGFjay50eHQKQEAgLTEyLDcgKzEyLDcgQEAKIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCi1Vc3VhbGx5IHlvdSB3b3VsZCB3YW50IHRvIHVzZSAnZ2l0LXB1c2gnLCB3aGljaCBpcyBhCitVc3VhbGx5IHlvdSB3b3VsZCB3YW50IHRvIHVzZSAnZ2l0IHB1c2gnLCB3aGljaCBpcyBhCiBoaWdoZXItbGV2ZWwgd3JhcHBlciBvZiB0aGlzIGNvbW1hbmQsIGluc3RlYWQuIFNlZSBsaW5rZ2l0OmdpdC1wdXNoWzFdLgogCiBJbnZva2VzICdnaXQtcmVjZWl2ZS1wYWNrJyBvbiBhIHBvc3NpYmx5IHJlbW90ZSByZXBvc2l0b3J5LCBhbmQKQEAgLTQ4LDggKzQ4LDggQEAKIAlSdW4gdmVyYm9zZWx5LgogCiAtLXRoaW46OgotCVNwZW5kIGV4dHJhIGN5Y2xlcyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIG9iamVjdHMgdG8gYmUgc2VudC4KLQlVc2UgaXQgb24gc2xvd2VyIGNvbm5lY3Rpb24uCisJU2VuZCBhICJ0aGluIiBwYWNrLCB3aGljaCByZWNvcmRzIG9iamVjdHMgaW4gZGVsdGlmaWVkIGZvcm0gYmFzZWQKKwlvbiBvYmplY3RzIG5vdCBpbmNsdWRlZCBpbiB0aGUgcGFjayB0byByZWR1Y2UgbmV0d29yayB0cmFmZmljLgogCiA8aG9zdD46OgogCUEgcmVtb3RlIGhvc3QgdG8gaG91c2UgdGhlIHJlcG9zaXRvcnkuICBXaGVuIHRoaXMKQEAgLTg2LDcgKzg2LDcgQEAKIHB1c2hlZCBpcyBkZXRlcm1pbmVkIGJ5IGZpbmRpbmcgYSBtYXRjaCB0aGF0IG1hdGNoZXMgdGhlIHNvdXJjZQogc2lkZSwgYW5kIHdoZXJlIGl0IGlzIHB1c2hlZCBpcyBkZXRlcm1pbmVkIGJ5IHVzaW5nIHRoZQogZGVzdGluYXRpb24gc2lkZS4gVGhlIHJ1bGVzIHVzZWQgdG8gbWF0Y2ggYSByZWYgYXJlIHRoZSBzYW1lCi1ydWxlcyB1c2VkIGJ5ICdnaXQtcmV2LXBhcnNlJyB0byByZXNvbHZlIGEgc3ltYm9saWMgcmVmCitydWxlcyB1c2VkIGJ5ICdnaXQgcmV2LXBhcnNlJyB0byByZXNvbHZlIGEgc3ltYm9saWMgcmVmCiBuYW1lLiBTZWUgbGlua2dpdDpnaXQtcmV2LXBhcnNlWzFdLgogCiAgLSBJdCBpcyBhbiBlcnJvciBpZiA8c3JjPiBkb2VzIG5vdCBtYXRjaCBleGFjdGx5IG9uZSBvZiB0aGUKQEAgLTEwNSwxMSArMTA1LDExIEBACiAKIFdpdGhvdXQgJy0tZm9yY2UnLCB0aGUgPHNyYz4gcmVmIGlzIHN0b3JlZCBhdCB0aGUgcmVtb3RlIG9ubHkgaWYKIDxkc3Q+IGRvZXMgbm90IGV4aXN0LCBvciA8ZHN0PiBpcyBhIHByb3BlciBzdWJzZXQgKGkuZS4gYW4KLWFuY2VzdG9yKSBvZiA8c3JjPi4gIFRoaXMgY2hlY2ssIGtub3duIGFzICJmYXN0IGZvcndhcmQgY2hlY2siLAorYW5jZXN0b3IpIG9mIDxzcmM+LiAgVGhpcyBjaGVjaywga25vd24gYXMgImZhc3QtZm9yd2FyZCBjaGVjayIsCiBpcyBwZXJmb3JtZWQgaW4gb3JkZXIgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IG92ZXJ3cml0aW5nIHRoZQogcmVtb3RlIHJlZiBhbmQgbG9zZSBvdGhlciBwZW9wbGVzJyBjb21taXRzIGZyb20gdGhlcmUuCiAKLVdpdGggJy0tZm9yY2UnLCB0aGUgZmFzdCBmb3J3YXJkIGNoZWNrIGlzIGRpc2FibGVkIGZvciBhbGwgcmVmcy4KK1dpdGggJy0tZm9yY2UnLCB0aGUgZmFzdC1mb3J3YXJkIGNoZWNrIGlzIGRpc2FibGVkIGZvciBhbGwgcmVmcy4KIAogT3B0aW9uYWxseSwgYSA8cmVmPiBwYXJhbWV0ZXIgY2FuIGJlIHByZWZpeGVkIHdpdGggYSBwbHVzICcrJyBzaWduCiB0byBkaXNhYmxlIHRoZSBmYXN0LWZvcndhcmQgY2hlY2sgb25seSBvbiB0aGF0IHJlZi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNoLXNldHVwLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNoLXNldHVwLnR4dAppbmRleCAxOGYxNGI1Li4zZGEyNDEzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zaC1zZXR1cC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2gtc2V0dXAudHh0CkBAIC0xNiw3ICsxNiw3IEBACiBUaGlzIGRvY3VtZW50YXRpb24gaXMgbWVhbnQgZm9yIHBlb3BsZSB3aG8gYXJlIHN0dWR5aW5nIHRoZQogUG9yY2VsYWluLWlzaCBzY3JpcHRzIGFuZC9vciBhcmUgd3JpdGluZyBuZXcgb25lcy4KIAotVGhlICdnaXQtc2gtc2V0dXAnIHNjcmlwdGxldCBpcyBkZXNpZ25lZCB0byBiZSBzb3VyY2VkICh1c2luZworVGhlICdnaXQgc2gtc2V0dXAnIHNjcmlwdGxldCBpcyBkZXNpZ25lZCB0byBiZSBzb3VyY2VkICh1c2luZwogYC5gKSBieSBvdGhlciBzaGVsbCBzY3JpcHRzIHRvIHNldCB1cCBzb21lIHZhcmlhYmxlcyBwb2ludGluZyBhdAogdGhlIG5vcm1hbCBnaXQgZGlyZWN0b3JpZXMgYW5kIGEgZmV3IGhlbHBlciBzaGVsbCBmdW5jdGlvbnMuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNob3J0bG9nLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3J0bG9nLnR4dAppbmRleCA0MjQ2M2E5Li5kZmQ0ZDBjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zaG9ydGxvZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvcnRsb2cudHh0CkBAIC0zLDE3ICszLDE3IEBACiAKIE5BTUUKIC0tLS0KLWdpdC1zaG9ydGxvZyAtIFN1bW1hcml6ZSAnZ2l0LWxvZycgb3V0cHV0CitnaXQtc2hvcnRsb2cgLSBTdW1tYXJpemUgJ2dpdCBsb2cnIG91dHB1dAogCiBTWU5PUFNJUwogLS0tLS0tLS0KIFt2ZXJzZV0KIGdpdCBsb2cgLS1wcmV0dHk9c2hvcnQgfCAnZ2l0IHNob3J0bG9nJyBbLWhdIFstbl0gWy1zXSBbLWVdIFstd10KLWdpdCBzaG9ydGxvZyBbLW58LS1udW1iZXJlZF0gWy1zfC0tc3VtbWFyeV0gWy1lfC0tZW1haWxdIFstd1s8d2lkdGg+Wyw8aW5kZW50MT5bLDxpbmRlbnQyPl1dXV0gWzxjb21taXR0aXNoPi4uLl0KKydnaXQgc2hvcnRsb2cnIFstbnwtLW51bWJlcmVkXSBbLXN8LS1zdW1tYXJ5XSBbLWV8LS1lbWFpbF0gWy13Wzx3aWR0aD5bLDxpbmRlbnQxPlssPGluZGVudDI+XV1dXSBbPGNvbW1pdHRpc2g+Li4uXQogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KLVN1bW1hcml6ZXMgJ2dpdC1sb2cnIG91dHB1dCBpbiBhIGZvcm1hdCBzdWl0YWJsZSBmb3IgaW5jbHVzaW9uCitTdW1tYXJpemVzICdnaXQgbG9nJyBvdXRwdXQgaW4gYSBmb3JtYXQgc3VpdGFibGUgZm9yIGluY2x1c2lvbgogaW4gcmVsZWFzZSBhbm5vdW5jZW1lbnRzLiBFYWNoIGNvbW1pdCB3aWxsIGJlIGdyb3VwZWQgYnkgYXV0aG9yIGFuZAogdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2hvd24uCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctYnJhbmNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctYnJhbmNoLnR4dAppbmRleCA1MWE0ZTlkLi5iOWM0MTU0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LWJyYW5jaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1icmFuY2gudHh0CkBAIC04LDE3ICs4LDIwIEBACiBTWU5PUFNJUwogLS0tLS0tLS0KIFt2ZXJzZV0KLSdnaXQgc2hvdy1icmFuY2gnIFstLWFsbF0gWy0tcmVtb3Rlc10gWy0tdG9wby1vcmRlcl0gWy0tY3VycmVudF0KKydnaXQgc2hvdy1icmFuY2gnIFstYXwtLWFsbF0gWy1yfC0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl0KKwkJWy0tY3VycmVudF0gWy0tY29sb3IgfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdCiAJCVstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV0KLQkJWy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFs8cmV2PiB8IDxnbG9iPl0uLi4KKwkJWy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdCisJCVs8cmV2PiB8IDxnbG9iPl0uLi4KKwogJ2dpdCBzaG93LWJyYW5jaCcgKC1nfC0tcmVmbG9nKVs9PG4+Wyw8YmFzZT5dXSBbLS1saXN0XSBbPHJlZj5dCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQogCiBTaG93cyB0aGUgY29tbWl0IGFuY2VzdHJ5IGdyYXBoIHN0YXJ0aW5nIGZyb20gdGhlIGNvbW1pdHMgbmFtZWQKLXdpdGggPHJldj5zIG9yIDxnbG9icz5zIChvciBhbGwgcmVmcyB1bmRlciAkR0lUX0RJUi9yZWZzL2hlYWRzCi1hbmQvb3IgJEdJVF9ESVIvcmVmcy90YWdzKSBzZW1pLXZpc3VhbGx5Lgord2l0aCA8cmV2PnMgb3IgPGdsb2JzPnMgKG9yIGFsbCByZWZzIHVuZGVyIHJlZnMvaGVhZHMKK2FuZC9vciByZWZzL3RhZ3MpIHNlbWktdmlzdWFsbHkuCiAKIEl0IGNhbm5vdCBzaG93IG1vcmUgdGhhbiAyOSBicmFuY2hlcyBhbmQgY29tbWl0cyBhdCBhIHRpbWUuCiAKQEAgLTM0LDggKzM3LDggQEAKIAogPGdsb2I+OjoKIAlBIGdsb2IgcGF0dGVybiB0aGF0IG1hdGNoZXMgYnJhbmNoIG9yIHRhZyBuYW1lcyB1bmRlcgotCSRHSVRfRElSL3JlZnMuICBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgbWFueSB0b3BpYwotCWJyYW5jaGVzIHVuZGVyICRHSVRfRElSL3JlZnMvaGVhZHMvdG9waWMsIGdpdmluZworCXJlZnMvLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIG1hbnkgdG9waWMKKwlicmFuY2hlcyB1bmRlciByZWZzL2hlYWRzL3RvcGljLCBnaXZpbmcKIAlgdG9waWMvKmAgd291bGQgc2hvdyBhbGwgb2YgdGhlbS4KIAogLXI6OgpAQCAtNTcsNiArNjAsMTEgQEAKICAgICAgICAgYXBwZWFyIGluIHRvcG9sb2dpY2FsIG9yZGVyIChpLmUuLCBkZXNjZW5kYW50IGNvbW1pdHMKICAgICAgICAgYXJlIHNob3duIGJlZm9yZSB0aGVpciBwYXJlbnRzKS4KIAorLS1kYXRlLW9yZGVyOjoKKwlUaGlzIG9wdGlvbiBpcyBzaW1pbGFyIHRvICctLXRvcG8tb3JkZXInIGluIHRoZSBzZW5zZSB0aGF0IG5vCisJcGFyZW50IGNvbWVzIGJlZm9yZSBhbGwgb2YgaXRzIGNoaWxkcmVuLCBidXQgb3RoZXJ3aXNlIGNvbW1pdHMKKwlhcmUgb3JkZXJlZCBhY2NvcmRpbmcgdG8gdGhlaXIgY29tbWl0IGRhdGUuCisKIC0tc3BhcnNlOjoKIAlCeSBkZWZhdWx0LCB0aGUgb3V0cHV0IG9taXRzIG1lcmdlcyB0aGF0IGFyZSByZWFjaGFibGUKIAlmcm9tIG9ubHkgb25lIHRpcCBiZWluZyBzaG93bi4gIFRoaXMgb3B0aW9uIG1ha2VzIHRoZW0KQEAgLTc0LDkgKzgyLDExIEBACiAJU3lub255bSB0byBgLS1tb3JlPS0xYAogCiAtLW1lcmdlLWJhc2U6OgotCUluc3RlYWQgb2Ygc2hvd2luZyB0aGUgY29tbWl0IGxpc3QsIGp1c3QgYWN0IGxpa2UgdGhlCi0JJ2dpdC1tZXJnZS1iYXNlIC1hJyBjb21tYW5kLCBleGNlcHQgdGhhdCBpdCBjYW4gYWNjZXB0Ci0JbW9yZSB0aGFuIHR3byBoZWFkcy4KKwlJbnN0ZWFkIG9mIHNob3dpbmcgdGhlIGNvbW1pdCBsaXN0LCBkZXRlcm1pbmUgcG9zc2libGUKKwltZXJnZSBiYXNlcyBmb3IgdGhlIHNwZWNpZmllZCBjb21taXRzLiBBbGwgbWVyZ2UgYmFzZXMKKwl3aWxsIGJlIGNvbnRhaW5lZCBpbiBhbGwgc3BlY2lmaWVkIGNvbW1pdHMuIFRoaXMgaXMKKwlkaWZmZXJlbnQgZnJvbSBob3cgbGlua2dpdDpnaXQtbWVyZ2UtYmFzZVsxXSBoYW5kbGVzCisJdGhlIGNhc2Ugb2YgdGhyZWUgb3IgbW9yZSBjb21taXRzLgogCiAtLWluZGVwZW5kZW50OjoKIAlBbW9uZyB0aGUgPHJlZmVyZW5jZT5zIGdpdmVuLCBkaXNwbGF5IG9ubHkgdGhlIG9uZXMgdGhhdApAQCAtMTA3LDYgKzExNywxNCBAQAogCVdoZW4gbm8gZXhwbGljaXQgPHJlZj4gcGFyYW1ldGVyIGlzIGdpdmVuLCBpdCBkZWZhdWx0cyB0byB0aGUKIAljdXJyZW50IGJyYW5jaCAob3IgYEhFQURgIGlmIGl0IGlzIGRldGFjaGVkKS4KIAorLS1jb2xvcjo6CisJQ29sb3IgdGhlIHN0YXR1cyBzaWduIChvbmUgb2YgdGhlc2U6IGAqYCBgIWAgYCtgIGAtYCkgb2YgZWFjaCBjb21taXQKKwljb3JyZXNwb25kaW5nIHRvIHRoZSBicmFuY2ggaXQncyBpbi4KKworLS1uby1jb2xvcjo6CisJVHVybiBvZmYgY29sb3JlZCBvdXRwdXQsIGV2ZW4gd2hlbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGdpdmVzIHRoZQorCWRlZmF1bHQgdG8gY29sb3Igb3V0cHV0LgorCiBOb3RlIHRoYXQgLS1tb3JlLCAtLWxpc3QsIC0taW5kZXBlbmRlbnQgYW5kIC0tbWVyZ2UtYmFzZSBvcHRpb25zCiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgogCkBAIC0xNTgsNyArMTc2LDcgQEAKIC0tLS0tLS0KIAogSWYgeW91IGtlZXAgeW91ciBwcmltYXJ5IGJyYW5jaGVzIGltbWVkaWF0ZWx5IHVuZGVyCi1gJEdJVF9ESVIvcmVmcy9oZWFkc2AsIGFuZCB0b3BpYyBicmFuY2hlcyBpbiBzdWJkaXJlY3RvcmllcyBvZgorYHJlZnMvaGVhZHNgLCBhbmQgdG9waWMgYnJhbmNoZXMgaW4gc3ViZGlyZWN0b3JpZXMgb2YKIGl0LCBoYXZpbmcgdGhlIGZvbGxvd2luZyBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIG1heSBoZWxwOgogCiAtLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctaW5kZXgudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1pbmRleC50eHQKaW5kZXggZTMyODVhYS4uODM4MmZiZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1pbmRleC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1pbmRleC50eHQKQEAgLTE0LDEwICsxNCwxMCBAQAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCiBSZWFkcyBnaXZlbiBpZHggZmlsZSBmb3IgcGFja2VkIGdpdCBhcmNoaXZlIGNyZWF0ZWQgd2l0aAotJ2dpdC1wYWNrLW9iamVjdHMnIGNvbW1hbmQsIGFuZCBkdW1wcyBpdHMgY29udGVudHMuCisnZ2l0IHBhY2stb2JqZWN0cycgY29tbWFuZCwgYW5kIGR1bXBzIGl0cyBjb250ZW50cy4KIAogVGhlIGluZm9ybWF0aW9uIGl0IG91dHB1dHMgaXMgc3Vic2V0IG9mIHdoYXQgeW91IGNhbiBnZXQgZnJvbQotJ2dpdC12ZXJpZnktcGFjayAtdic7IHRoaXMgY29tbWFuZCBvbmx5IHNob3dzIHRoZSBwYWNrZmlsZQorJ2dpdCB2ZXJpZnktcGFjayAtdic7IHRoaXMgY29tbWFuZCBvbmx5IHNob3dzIHRoZSBwYWNrZmlsZQogb2Zmc2V0IGFuZCBTSEExIG9mIGVhY2ggb2JqZWN0LgogCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctcmVmLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctcmVmLnR4dAppbmRleCA5OGUyOTRhLi4zZjlkOWM2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LXJlZi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1yZWYudHh0CkBAIC04LDkgKzgsMTAgQEAKIFNZTk9QU0lTCiAtLS0tLS0tLQogW3ZlcnNlXQotJ2dpdCBzaG93LXJlZicgWy1xfC0tcXVpZXRdIFstLXZlcmlmeV0gWy1ofC0taGVhZF0gWy1kfC0tZGVyZWZlcmVuY2VdCi0JICAgICBbLXN8LS1oYXNoXSBbLS1hYmJyZXZdIFstLXRhZ3NdIFstLWhlYWRzXSBbLS1dIDxwYXR0ZXJuPi4uLgotJ2dpdCBzaG93LXJlZicgLS1leGNsdWRlLWV4aXN0aW5nWz1wYXR0ZXJuXQorJ2dpdCBzaG93LXJlZicgWy1xfC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kfC0tZGVyZWZlcmVuY2VdCisJICAgICBbLXN8LS1oYXNoWz08bj5dXSBbLS1hYmJyZXZbPTxuPl1dIFstLXRhZ3NdCisJICAgICBbLS1oZWFkc10gWy0tXSBbPHBhdHRlcm4+Li4uXQorJ2dpdCBzaG93LXJlZicgLS1leGNsdWRlLWV4aXN0aW5nWz08cGF0dGVybj5dIDwgcmVmLWxpc3QKIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC0yOSw3ICszMCw2IEBACiBPUFRJT05TCiAtLS0tLS0tCiAKLS1oOjoKIC0taGVhZDo6CiAKIAlTaG93IHRoZSBIRUFEIHJlZmVyZW5jZS4KQEAgLTQ4LDcgKzQ4LDcgQEAKIAlhcHBlbmRlZC4KIAogLXM6OgotLS1oYXNoOjoKKy0taGFzaFs9PG4+XTo6CiAKIAlPbmx5IHNob3cgdGhlIFNIQTEgaGFzaCwgbm90IHRoZSByZWZlcmVuY2UgbmFtZS4gV2hlbiBjb21iaW5lZCB3aXRoCiAJLS1kZXJlZmVyZW5jZSB0aGUgZGVyZWZlcmVuY2VkIHRhZyB3aWxsIHN0aWxsIGJlIHNob3duIGFmdGVyIHRoZSBTSEExLgpAQCAtNTksMTEgKzU5LDEwIEBACiAJQXNpZGUgZnJvbSByZXR1cm5pbmcgYW4gZXJyb3IgY29kZSBvZiAxLCBpdCB3aWxsIGFsc28gcHJpbnQgYW4gZXJyb3IKIAltZXNzYWdlIGlmICctLXF1aWV0JyB3YXMgbm90IHNwZWNpZmllZC4KIAotLS1hYmJyZXY6OgotLS1hYmJyZXY9bGVuOjoKKy0tYWJicmV2Wz08bj5dOjoKIAogCUFiYnJldmlhdGUgdGhlIG9iamVjdCBuYW1lLiAgV2hlbiB1c2luZyBgLS1oYXNoYCwgeW91IGRvCi0Jbm90IGhhdmUgdG8gc2F5IGAtLWhhc2ggLS1hYmJyZXZgOyBgLS1oYXNoPWxlbmAgd291bGQgZG8uCisJbm90IGhhdmUgdG8gc2F5IGAtLWhhc2ggLS1hYmJyZXZgOyBgLS1oYXNoPW5gIHdvdWxkIGRvLgogCiAtcTo6CiAtLXF1aWV0OjoKQEAgLTcxLDEwICs3MCw5IEBACiAJRG8gbm90IHByaW50IGFueSByZXN1bHRzIHRvIHN0ZG91dC4gV2hlbiBjb21iaW5lZCB3aXRoICctLXZlcmlmeScgdGhpcwogCWNhbiBiZSB1c2VkIHRvIHNpbGVudGx5IGNoZWNrIGlmIGEgcmVmZXJlbmNlIGV4aXN0cy4KIAotLS1leGNsdWRlLWV4aXN0aW5nOjoKLS0tZXhjbHVkZS1leGlzdGluZz1wYXR0ZXJuOjoKKy0tZXhjbHVkZS1leGlzdGluZ1s9PHBhdHRlcm4+XTo6CiAKLQlNYWtlICdnaXQtc2hvdy1yZWYnIGFjdCBhcyBhIGZpbHRlciB0aGF0IHJlYWRzIHJlZnMgZnJvbSBzdGRpbiBvZiB0aGUKKwlNYWtlICdnaXQgc2hvdy1yZWYnIGFjdCBhcyBhIGZpbHRlciB0aGF0IHJlYWRzIHJlZnMgZnJvbSBzdGRpbiBvZiB0aGUKIAlmb3JtICJeKD86PGFueXRoaW5nPlxzKT88cmVmbmFtZT4oPzpcXlx7XH0pPyQiIGFuZCBwZXJmb3JtcyB0aGUKIAlmb2xsb3dpbmcgYWN0aW9ucyBvbiBlYWNoOgogCSgxKSBzdHJpcCAiXnt9IiBhdCB0aGUgZW5kIG9mIGxpbmUgaWYgYW55OwpAQCAtMTM3LDcgKzEzNSw3IEBACiAKIHdpbGwgb25seSBtYXRjaCB0aGUgZXhhY3QgYnJhbmNoIGNhbGxlZCAibWFzdGVyIi4KIAotSWYgbm90aGluZyBtYXRjaGVzLCAnZ2l0LXNob3ctcmVmJyB3aWxsIHJldHVybiBhbiBlcnJvciBjb2RlIG9mIDEsCitJZiBub3RoaW5nIG1hdGNoZXMsICdnaXQgc2hvdy1yZWYnIHdpbGwgcmV0dXJuIGFuIGVycm9yIGNvZGUgb2YgMSwKIGFuZCBpbiB0aGUgY2FzZSBvZiB2ZXJpZmljYXRpb24sIGl0IHdpbGwgc2hvdyBhbiBlcnJvciBtZXNzYWdlLgogCiBGb3Igc2NyaXB0aW5nLCB5b3UgY2FuIGFzayBpdCB0byBiZSBxdWlldCB3aXRoIHRoZSAiLS1xdWlldCIgZmxhZywgd2hpY2gKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNob3cudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy50eHQKaW5kZXggNDhiNjEyZS4uNTVlNjg3YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy50eHQKQEAgLTE2LDE2ICsxNiwxNiBAQAogCiBGb3IgY29tbWl0cyBpdCBzaG93cyB0aGUgbG9nIG1lc3NhZ2UgYW5kIHRleHR1YWwgZGlmZi4gSXQgYWxzbwogcHJlc2VudHMgdGhlIG1lcmdlIGNvbW1pdCBpbiBhIHNwZWNpYWwgZm9ybWF0IGFzIHByb2R1Y2VkIGJ5Ci0nZ2l0LWRpZmYtdHJlZSAtLWNjJy4KKydnaXQgZGlmZi10cmVlIC0tY2MnLgogCiBGb3IgdGFncywgaXQgc2hvd3MgdGhlIHRhZyBtZXNzYWdlIGFuZCB0aGUgcmVmZXJlbmNlZCBvYmplY3RzLgogCi1Gb3IgdHJlZXMsIGl0IHNob3dzIHRoZSBuYW1lcyAoZXF1aXZhbGVudCB0byAnZ2l0LWxzLXRyZWUnCitGb3IgdHJlZXMsIGl0IHNob3dzIHRoZSBuYW1lcyAoZXF1aXZhbGVudCB0byAnZ2l0IGxzLXRyZWUnCiB3aXRoIFwtLW5hbWUtb25seSkuCiAKIEZvciBwbGFpbiBibG9icywgaXQgc2hvd3MgdGhlIHBsYWluIGNvbnRlbnRzLgogCi1UaGUgY29tbWFuZCB0YWtlcyBvcHRpb25zIGFwcGxpY2FibGUgdG8gdGhlICdnaXQtZGlmZi10cmVlJyBjb21tYW5kIHRvCitUaGUgY29tbWFuZCB0YWtlcyBvcHRpb25zIGFwcGxpY2FibGUgdG8gdGhlICdnaXQgZGlmZi10cmVlJyBjb21tYW5kIHRvCiBjb250cm9sIGhvdyB0aGUgY2hhbmdlcyB0aGUgY29tbWl0IGludHJvZHVjZXMgYXJlIHNob3duLgogCiBUaGlzIG1hbnVhbCBwYWdlIGRlc2NyaWJlcyBvbmx5IHRoZSBtb3N0IGZyZXF1ZW50bHkgdXNlZCBvcHRpb25zLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc3Rhc2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3Rhc2gudHh0CmluZGV4IDFjYzI0Y2MuLjQ3Mzg4OWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXN0YXNoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdGFzaC50eHQKQEAgLTksMTcgKzksMTggQEAKIC0tLS0tLS0tCiBbdmVyc2VdCiAnZ2l0IHN0YXNoJyBsaXN0IFs8b3B0aW9ucz5dCi0nZ2l0IHN0YXNoJyAoc2hvdyB8IGRyb3AgfCBwb3AgKSBbPHN0YXNoPl0KLSdnaXQgc3Rhc2gnIGFwcGx5IFstLWluZGV4XSBbPHN0YXNoPl0KKydnaXQgc3Rhc2gnIHNob3cgWzxzdGFzaD5dCisnZ2l0IHN0YXNoJyBkcm9wIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0KKydnaXQgc3Rhc2gnICggcG9wIHwgYXBwbHkgKSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XQogJ2dpdCBzdGFzaCcgYnJhbmNoIDxicmFuY2huYW1lPiBbPHN0YXNoPl0KLSdnaXQgc3Rhc2gnIFtzYXZlIFstLWtlZXAtaW5kZXhdIFs8bWVzc2FnZT5dXQorJ2dpdCBzdGFzaCcgW3NhdmUgWy0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdIFs8bWVzc2FnZT5dXQogJ2dpdCBzdGFzaCcgY2xlYXIKICdnaXQgc3Rhc2gnIGNyZWF0ZQogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KIAotVXNlICdnaXQgc3Rhc2gnIHdoZW4geW91IHdhbnQgdG8gcmVjb3JkIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZQorVXNlIGBnaXQgc3Rhc2hgIHdoZW4geW91IHdhbnQgdG8gcmVjb3JkIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZQogd29ya2luZyBkaXJlY3RvcnkgYW5kIHRoZSBpbmRleCwgYnV0IHdhbnQgdG8gZ28gYmFjayB0byBhIGNsZWFuCiB3b3JraW5nIGRpcmVjdG9yeS4gIFRoZSBjb21tYW5kIHNhdmVzIHlvdXIgbG9jYWwgbW9kaWZpY2F0aW9ucyBhd2F5CiBhbmQgcmV2ZXJ0cyB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8gbWF0Y2ggdGhlIGBIRUFEYCBjb21taXQuCkBAIC0zMiw3ICszMyw3IEBACiB5b3UgY2FuIGdpdmUgYSBtb3JlIGRlc2NyaXB0aXZlIG1lc3NhZ2Ugb24gdGhlIGNvbW1hbmQgbGluZSB3aGVuCiB5b3UgY3JlYXRlIG9uZS4KIAotVGhlIGxhdGVzdCBzdGFzaCB5b3UgY3JlYXRlZCBpcyBzdG9yZWQgaW4gYCRHSVRfRElSL3JlZnMvc3Rhc2hgOyBvbGRlcgorVGhlIGxhdGVzdCBzdGFzaCB5b3UgY3JlYXRlZCBpcyBzdG9yZWQgaW4gYHJlZnMvc3Rhc2hgOyBvbGRlcgogc3Rhc2hlcyBhcmUgZm91bmQgaW4gdGhlIHJlZmxvZyBvZiB0aGlzIHJlZmVyZW5jZSBhbmQgY2FuIGJlIG5hbWVkIHVzaW5nCiB0aGUgdXN1YWwgcmVmbG9nIHN5bnRheCAoZS5nLiBgc3Rhc2hAXHswfWAgaXMgdGhlIG1vc3QgcmVjZW50bHkKIGNyZWF0ZWQgc3Rhc2gsIGBzdGFzaEBcezF9YCBpcyB0aGUgb25lIGJlZm9yZSBpdCwgYHN0YXNoQFx7Mi5ob3Vycy5hZ299YApAQCAtNDEsMTUgKzQyLDI3IEBACiBPUFRJT05TCiAtLS0tLS0tCiAKLXNhdmUgWy0ta2VlcC1pbmRleF0gWzxtZXNzYWdlPl06Ogorc2F2ZSBbLS1wYXRjaF0gWy0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF0gWzxtZXNzYWdlPl06OgogCiAJU2F2ZSB5b3VyIGxvY2FsIG1vZGlmaWNhdGlvbnMgdG8gYSBuZXcgJ3N0YXNoJywgYW5kIHJ1biBgZ2l0IHJlc2V0Ci0JLS1oYXJkYCB0byByZXZlcnQgdGhlbS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgYWN0aW9uIHdoZW4gbm8KLQlzdWJjb21tYW5kIGlzIGdpdmVuLiBUaGUgPG1lc3NhZ2U+IHBhcnQgaXMgb3B0aW9uYWwgYW5kIGdpdmVzCi0JdGhlIGRlc2NyaXB0aW9uIGFsb25nIHdpdGggdGhlIHN0YXNoZWQgc3RhdGUuCisJLS1oYXJkYCB0byByZXZlcnQgdGhlbS4gIFRoZSA8bWVzc2FnZT4gcGFydCBpcyBvcHRpb25hbCBhbmQgZ2l2ZXMKKwl0aGUgZGVzY3JpcHRpb24gYWxvbmcgd2l0aCB0aGUgc3Rhc2hlZCBzdGF0ZS4gIEZvciBxdWlja2x5IG1ha2luZworCWEgc25hcHNob3QsIHlvdSBjYW4gb21pdCBfYm90aF8gInNhdmUiIGFuZCA8bWVzc2FnZT4sIGJ1dCBnaXZpbmcKKwlvbmx5IDxtZXNzYWdlPiBkb2VzIG5vdCB0cmlnZ2VyIHRoaXMgYWN0aW9uIHRvIHByZXZlbnQgYSBtaXNzcGVsbGVkCisJc3ViY29tbWFuZCBmcm9tIG1ha2luZyBhbiB1bndhbnRlZCBzdGFzaC4KICsKIElmIHRoZSBgLS1rZWVwLWluZGV4YCBvcHRpb24gaXMgdXNlZCwgYWxsIGNoYW5nZXMgYWxyZWFkeSBhZGRlZCB0byB0aGUKIGluZGV4IGFyZSBsZWZ0IGludGFjdC4KKysKK1dpdGggYC0tcGF0Y2hgLCB5b3UgY2FuIGludGVyYWN0aXZlbHkgc2VsZWN0IGh1bmtzIGZyb20gaW4gdGhlIGRpZmYKK2JldHdlZW4gSEVBRCBhbmQgdGhlIHdvcmtpbmcgdHJlZSB0byBiZSBzdGFzaGVkLiAgVGhlIHN0YXNoIGVudHJ5IGlzCitjb25zdHJ1Y3RlZCBzdWNoIHRoYXQgaXRzIGluZGV4IHN0YXRlIGlzIHRoZSBzYW1lIGFzIHRoZSBpbmRleCBzdGF0ZQorb2YgeW91ciByZXBvc2l0b3J5LCBhbmQgaXRzIHdvcmt0cmVlIGNvbnRhaW5zIG9ubHkgdGhlIGNoYW5nZXMgeW91CitzZWxlY3RlZCBpbnRlcmFjdGl2ZWx5LiAgVGhlIHNlbGVjdGVkIGNoYW5nZXMgYXJlIHRoZW4gcm9sbGVkIGJhY2sKK2Zyb20geW91ciB3b3JrdHJlZS4KKysKK1RoZSBgLS1wYXRjaGAgb3B0aW9uIGltcGxpZXMgYC0ta2VlcC1pbmRleGAuICBZb3UgY2FuIHVzZQorYC0tbm8ta2VlcC1pbmRleGAgdG8gb3ZlcnJpZGUgdGhpcy4KIAogbGlzdCBbPG9wdGlvbnM+XTo6CiAKQEAgLTY0LDcgKzc3LDcgQEAKIHN0YXNoQHsxfTogT24gbWFzdGVyOiA5Y2MwNTg5Li4uIEFkZCBnaXQtc3Rhc2gKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICsKLVRoZSBjb21tYW5kIHRha2VzIG9wdGlvbnMgYXBwbGljYWJsZSB0byB0aGUgJ2dpdC1sb2cnCitUaGUgY29tbWFuZCB0YWtlcyBvcHRpb25zIGFwcGxpY2FibGUgdG8gdGhlICdnaXQgbG9nJwogY29tbWFuZCB0byBjb250cm9sIHdoYXQgaXMgc2hvd24gYW5kIGhvdy4gU2VlIGxpbmtnaXQ6Z2l0LWxvZ1sxXS4KIAogc2hvdyBbPHN0YXNoPl06OgpAQCAtNzIsMTAgKzg1LDEwIEBACiAJU2hvdyB0aGUgY2hhbmdlcyByZWNvcmRlZCBpbiB0aGUgc3Rhc2ggYXMgYSBkaWZmIGJldHdlZW4gdGhlCiAJc3Rhc2hlZCBzdGF0ZSBhbmQgaXRzIG9yaWdpbmFsIHBhcmVudC4gV2hlbiBubyBgPHN0YXNoPmAgaXMgZ2l2ZW4sCiAJc2hvd3MgdGhlIGxhdGVzdCBvbmUuIEJ5IGRlZmF1bHQsIHRoZSBjb21tYW5kIHNob3dzIHRoZSBkaWZmc3RhdCwgYnV0Ci0JaXQgd2lsbCBhY2NlcHQgYW55IGZvcm1hdCBrbm93biB0byAnZ2l0LWRpZmYnIChlLmcuLCBgZ2l0IHN0YXNoIHNob3cKKwlpdCB3aWxsIGFjY2VwdCBhbnkgZm9ybWF0IGtub3duIHRvICdnaXQgZGlmZicgKGUuZy4sIGBnaXQgc3Rhc2ggc2hvdwogCS1wIHN0YXNoQFx7MX1gIHRvIHZpZXcgdGhlIHNlY29uZCBtb3N0IHJlY2VudCBzdGFzaCBpbiBwYXRjaCBmb3JtKS4KIAotcG9wIFs8c3Rhc2g+XTo6Citwb3AgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl06OgogCiAJUmVtb3ZlIGEgc2luZ2xlIHN0YXNoZWQgc3RhdGUgZnJvbSB0aGUgc3Rhc2ggbGlzdCBhbmQgYXBwbHkgaXQKIAlvbiB0b3Agb2YgdGhlIGN1cnJlbnQgd29ya2luZyB0cmVlIHN0YXRlLCBpLmUuLCBkbyB0aGUgaW52ZXJzZQpAQCAtODYsMTYgKzk5LDE2IEBACiByZW1vdmVkIGZyb20gdGhlIHN0YXNoIGxpc3QuIFlvdSBuZWVkIHRvIHJlc29sdmUgdGhlIGNvbmZsaWN0cyBieSBoYW5kCiBhbmQgY2FsbCBgZ2l0IHN0YXNoIGRyb3BgIG1hbnVhbGx5IGFmdGVyd2FyZHMuCiArCi1XaGVuIG5vIGA8c3Rhc2g+YCBpcyBnaXZlbiwgYHN0YXNoQFx7MH1gIGlzIGFzc3VtZWQuIFNlZSBhbHNvIGBhcHBseWAuCi0KLWFwcGx5IFstLWluZGV4XSBbPHN0YXNoPl06OgotCi0JTGlrZSBgcG9wYCwgYnV0IGRvIG5vdCByZW1vdmUgdGhlIHN0YXRlIGZyb20gdGhlIHN0YXNoIGxpc3QuCi0rCiBJZiB0aGUgYC0taW5kZXhgIG9wdGlvbiBpcyB1c2VkLCB0aGVuIHRyaWVzIHRvIHJlaW5zdGF0ZSBub3Qgb25seSB0aGUgd29ya2luZwogdHJlZSdzIGNoYW5nZXMsIGJ1dCBhbHNvIHRoZSBpbmRleCdzIG9uZXMuIEhvd2V2ZXIsIHRoaXMgY2FuIGZhaWwsIHdoZW4geW91CiBoYXZlIGNvbmZsaWN0cyAod2hpY2ggYXJlIHN0b3JlZCBpbiB0aGUgaW5kZXgsIHdoZXJlIHlvdSB0aGVyZWZvcmUgY2FuIG5vCiBsb25nZXIgYXBwbHkgdGhlIGNoYW5nZXMgYXMgdGhleSB3ZXJlIG9yaWdpbmFsbHkpLgorKworV2hlbiBubyBgPHN0YXNoPmAgaXMgZ2l2ZW4sIGBzdGFzaEBcezB9YCBpcyBhc3N1bWVkLgorCithcHBseSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XTo6CisKKwlMaWtlIGBwb3BgLCBidXQgZG8gbm90IHJlbW92ZSB0aGUgc3RhdGUgZnJvbSB0aGUgc3Rhc2ggbGlzdC4KIAogYnJhbmNoIDxicmFuY2huYW1lPiBbPHN0YXNoPl06OgogCkBAIC0xMTMsOSArMTI2LDEwIEBACiAKIGNsZWFyOjoKIAlSZW1vdmUgYWxsIHRoZSBzdGFzaGVkIHN0YXRlcy4gTm90ZSB0aGF0IHRob3NlIHN0YXRlcyB3aWxsIHRoZW4KLQliZSBzdWJqZWN0IHRvIHBydW5pbmcsIGFuZCBtYXkgYmUgZGlmZmljdWx0IG9yIGltcG9zc2libGUgdG8gcmVjb3Zlci4KKwliZSBzdWJqZWN0IHRvIHBydW5pbmcsIGFuZCBtYXkgYmUgaW1wb3NzaWJsZSB0byByZWNvdmVyIChzZWUKKwknRXhhbXBsZXMnIGJlbG93IGZvciBhIHBvc3NpYmxlIHN0cmF0ZWd5KS4KIAotZHJvcCBbPHN0YXNoPl06OgorZHJvcCBbLXF8LS1xdWlldF0gWzxzdGFzaD5dOjoKIAogCVJlbW92ZSBhIHNpbmdsZSBzdGFzaGVkIHN0YXRlIGZyb20gdGhlIHN0YXNoIGxpc3QuIFdoZW4gbm8gYDxzdGFzaD5gCiAJaXMgZ2l2ZW4sIGl0IHJlbW92ZXMgdGhlIGxhdGVzdCBvbmUuIGkuZS4gYHN0YXNoQFx7MH1gCkBAIC0xODcsNyArMjAxLDcgQEAKICMgLi4uIGNvbnRpbnVlIGhhY2tpbmcgLi4uCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiArCi1Zb3UgY2FuIHVzZSAnZ2l0LXN0YXNoJyB0byBzaW1wbGlmeSB0aGUgYWJvdmUsIGxpa2UgdGhpczoKK1lvdSBjYW4gdXNlICdnaXQgc3Rhc2gnIHRvIHNpbXBsaWZ5IHRoZSBhYm92ZSwgbGlrZSB0aGlzOgogKwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyAuLi4gaGFjayBoYWNrIGhhY2sgLi4uCkBAIC0yMTYsNiArMjMwLDIwIEBACiAkIGdpdCBjb21taXQgZm9vIC1tICdSZW1haW5pbmcgcGFydHMnCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1JlY292ZXJpbmcgc3Rhc2hlcyB0aGF0IHdlcmUgY2xlYXJlZC9kcm9wcGVkIGVycm9uZW91c2x5OjoKKworSWYgeW91IG1pc3Rha2VubHkgZHJvcCBvciBjbGVhciBzdGFzaGVzLCB0aGV5IGNhbm5vdCBiZSByZWNvdmVyZWQKK3Rocm91Z2ggdGhlIG5vcm1hbCBzYWZldHkgbWVjaGFuaXNtcy4gIEhvd2V2ZXIsIHlvdSBjYW4gdHJ5IHRoZQorZm9sbG93aW5nIGluY2FudGF0aW9uIHRvIGdldCBhIGxpc3Qgb2Ygc3Rhc2hlcyB0aGF0IGFyZSBzdGlsbCBpbiB5b3VyCityZXBvc2l0b3J5LCBidXQgbm90IHJlYWNoYWJsZSBhbnkgbW9yZToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBmc2NrIC0tdW5yZWFjaGFibGUgfAorZ3JlcCBjb21taXQgfCBjdXQgLWRcICAtZjMgfAoreGFyZ3MgZ2l0IGxvZyAtLW1lcmdlcyAtLW5vLXdhbGsgLS1ncmVwPVdJUAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKIFNFRSBBTFNPCiAtLS0tLS0tLQogbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zdGF0dXMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3RhdHVzLnR4dAppbmRleCA4NGY2MGYzLi4xY2FiOTFiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zdGF0dXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXN0YXR1cy50eHQKQEAgLTgsNyArOCw3IEBACiAKIFNZTk9QU0lTCiAtLS0tLS0tLQotJ2dpdCBzdGF0dXMnIDxvcHRpb25zPi4uLgorJ2dpdCBzdGF0dXMnIFs8b3B0aW9ucz4uLi5dIFstLV0gWzxwYXRoc3BlYz4uLi5dCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQpAQCAtMTcsMjggKzE3LDkzIEBACiB0cmVlIGFuZCB0aGUgaW5kZXggZmlsZSwgYW5kIHBhdGhzIGluIHRoZSB3b3JraW5nIHRyZWUgdGhhdCBhcmUgbm90CiB0cmFja2VkIGJ5IGdpdCAoYW5kIGFyZSBub3QgaWdub3JlZCBieSBsaW5rZ2l0OmdpdGlnbm9yZVs1XSkuIFRoZSBmaXJzdAogYXJlIHdoYXQgeW91IF93b3VsZF8gY29tbWl0IGJ5IHJ1bm5pbmcgYGdpdCBjb21taXRgOyB0aGUgc2Vjb25kIGFuZAotdGhpcmQgYXJlIHdoYXQgeW91IF9jb3VsZF8gY29tbWl0IGJ5IHJ1bm5pbmcgJ2dpdC1hZGQnIGJlZm9yZSBydW5uaW5nCit0aGlyZCBhcmUgd2hhdCB5b3UgX2NvdWxkXyBjb21taXQgYnkgcnVubmluZyAnZ2l0IGFkZCcgYmVmb3JlIHJ1bm5pbmcKIGBnaXQgY29tbWl0YC4KIAotVGhlIGNvbW1hbmQgdGFrZXMgdGhlIHNhbWUgc2V0IG9mIG9wdGlvbnMgYXMgJ2dpdC1jb21taXQnOyBpdAotc2hvd3Mgd2hhdCB3b3VsZCBiZSBjb21taXR0ZWQgaWYgdGhlIHNhbWUgb3B0aW9ucyBhcmUgZ2l2ZW4gdG8KLSdnaXQtY29tbWl0Jy4KK09QVElPTlMKKy0tLS0tLS0KIAotSWYgdGhlcmUgaXMgbm8gcGF0aCB0aGF0IGlzIGRpZmZlcmVudCBiZXR3ZWVuIHRoZSBpbmRleCBmaWxlIGFuZAotdGhlIGN1cnJlbnQgSEVBRCBjb21taXQgKGkuZS4sIHRoZXJlIGlzIG5vdGhpbmcgdG8gY29tbWl0IGJ5IHJ1bm5pbmcKLWBnaXQgY29tbWl0YCksIHRoZSBjb21tYW5kIGV4aXRzIHdpdGggbm9uLXplcm8gc3RhdHVzLgorLXM6OgorLS1zaG9ydDo6CisJR2l2ZSB0aGUgb3V0cHV0IGluIHRoZSBzaG9ydC1mb3JtYXQuCisKKy0tcG9yY2VsYWluOjoKKwlHaXZlIHRoZSBvdXRwdXQgaW4gYSBzdGFibGUsIGVhc3ktdG8tcGFyc2UgZm9ybWF0IGZvciBzY3JpcHRzLgorCUN1cnJlbnRseSB0aGlzIGlzIGlkZW50aWNhbCB0byAtLXNob3J0IG91dHB1dCwgYnV0IGlzIGd1YXJhbnRlZWQKKwlub3QgdG8gY2hhbmdlIGluIHRoZSBmdXR1cmUsIG1ha2luZyBpdCBzYWZlIGZvciBzY3JpcHRzLgorCistdVs8bW9kZT5dOjoKKy0tdW50cmFja2VkLWZpbGVzWz08bW9kZT5dOjoKKwlTaG93IHVudHJhY2tlZCBmaWxlcyAoRGVmYXVsdDogJ2FsbCcpLgorKworVGhlIG1vZGUgcGFyYW1ldGVyIGlzIG9wdGlvbmFsLCBhbmQgaXMgdXNlZCB0byBzcGVjaWZ5Cit0aGUgaGFuZGxpbmcgb2YgdW50cmFja2VkIGZpbGVzLiBUaGUgcG9zc2libGUgb3B0aW9ucyBhcmU6CisrCistLQorCS0gJ25vJyAgICAgLSBTaG93IG5vIHVudHJhY2tlZCBmaWxlcworCS0gJ25vcm1hbCcgLSBTaG93cyB1bnRyYWNrZWQgZmlsZXMgYW5kIGRpcmVjdG9yaWVzCisJLSAnYWxsJyAgICAtIEFsc28gc2hvd3MgaW5kaXZpZHVhbCBmaWxlcyBpbiB1bnRyYWNrZWQgZGlyZWN0b3JpZXMuCistLQorKworU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBmb3IgY29uZmlndXJhdGlvbiB2YXJpYWJsZQordXNlZCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgZm9yIHdoZW4gdGhlIG9wdGlvbiBpcyBub3QKK3NwZWNpZmllZC4KKworLXo6OgorCVRlcm1pbmF0ZSBlbnRyaWVzIHdpdGggTlVMLCBpbnN0ZWFkIG9mIExGLiAgVGhpcyBpbXBsaWVzCisJdGhlIGAtLXBvcmNlbGFpbmAgb3V0cHV0IGZvcm1hdCBpZiBubyBvdGhlciBmb3JtYXQgaXMgZ2l2ZW4uCiAKIAogT1VUUFVUCiAtLS0tLS0KIFRoZSBvdXRwdXQgZnJvbSB0aGlzIGNvbW1hbmQgaXMgZGVzaWduZWQgdG8gYmUgdXNlZCBhcyBhIGNvbW1pdAogdGVtcGxhdGUgY29tbWVudCwgYW5kIGFsbCB0aGUgb3V0cHV0IGxpbmVzIGFyZSBwcmVmaXhlZCB3aXRoICcjJy4KK1RoZSBkZWZhdWx0LCBsb25nIGZvcm1hdCwgaXMgZGVzaWduZWQgdG8gYmUgaHVtYW4gcmVhZGFibGUsCit2ZXJib3NlIGFuZCBkZXNjcmlwdGl2ZS4gIFRoZXkgYXJlIHN1YmplY3QgdG8gY2hhbmdlIGluIGFueSB0aW1lLgogCiBUaGUgcGF0aHMgbWVudGlvbmVkIGluIHRoZSBvdXRwdXQsIHVubGlrZSBtYW55IG90aGVyIGdpdCBjb21tYW5kcywgYXJlCiBtYWRlIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpZiB5b3UgYXJlIHdvcmtpbmcgaW4gYQogc3ViZGlyZWN0b3J5ICh0aGlzIGlzIG9uIHB1cnBvc2UsIHRvIGhlbHAgY3V0dGluZyBhbmQgcGFzdGluZykuIFNlZQogdGhlIHN0YXR1cy5yZWxhdGl2ZVBhdGhzIGNvbmZpZyBvcHRpb24gYmVsb3cuCiAKK0luIHNob3J0LWZvcm1hdCwgdGhlIHN0YXR1cyBvZiBlYWNoIHBhdGggaXMgc2hvd24gYXMKKworCVhZIFBBVEgxIC0+IFBBVEgyCisKK3doZXJlIGBQQVRIMWAgaXMgdGhlIHBhdGggaW4gdGhlIGBIRUFEYCwgYW5kIGAgLT4gUEFUSDJgIHBhcnQgaXMKK3Nob3duIG9ubHkgd2hlbiBgUEFUSDFgIGNvcnJlc3BvbmRzIHRvIGEgZGlmZmVyZW50IHBhdGggaW4gdGhlCitpbmRleC93b3JrdHJlZSAoaS5lLiByZW5hbWVkKS4KKworRm9yIHVubWVyZ2VkIGVudHJpZXMsIGBYYCBzaG93cyB0aGUgc3RhdHVzIG9mIHN0YWdlICMyIChpLmUuIG91cnMpIGFuZCBgWWAKK3Nob3dzIHRoZSBzdGF0dXMgb2Ygc3RhZ2UgIzMgKGkuZS4gdGhlaXJzKS4KKworRm9yIGVudHJpZXMgdGhhdCBkbyBub3QgaGF2ZSBjb25mbGljdHMsIGBYYCBzaG93cyB0aGUgc3RhdHVzIG9mIHRoZSBpbmRleCwKK2FuZCBgWWAgc2hvd3MgdGhlIHN0YXR1cyBvZiB0aGUgd29yayB0cmVlLiAgRm9yIHVudHJhY2tlZCBwYXRocywgYFhZYCBhcmUKK2A/P2AuCisKKyAgICBYICAgICAgICAgIFkgICAgIE1lYW5pbmcKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIFtNRF0gICBub3QgdXBkYXRlZAorICAgIE0gICAgICAgIFsgTURdICAgdXBkYXRlZCBpbiBpbmRleAorICAgIEEgICAgICAgIFsgTURdICAgYWRkZWQgdG8gaW5kZXgKKyAgICBEICAgICAgICBbIE1EXSAgIGRlbGV0ZWQgZnJvbSBpbmRleAorICAgIFIgICAgICAgIFsgTURdICAgcmVuYW1lZCBpbiBpbmRleAorICAgIEMgICAgICAgIFsgTURdICAgY29waWVkIGluIGluZGV4CisgICAgW01BUkNdICAgICAgICAgICBpbmRleCBhbmQgd29yayB0cmVlIG1hdGNoZXMKKyAgICBbIE1BUkNdICAgICBNICAgIHdvcmsgdHJlZSBjaGFuZ2VkIHNpbmNlIGluZGV4CisgICAgWyBNQVJDXSAgICAgRCAgICBkZWxldGVkIGluIHdvcmsgdHJlZQorICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBEICAgICAgICAgICBEICAgIHVubWVyZ2VkLCBib3RoIGRlbGV0ZWQKKyAgICBBICAgICAgICAgICBVICAgIHVubWVyZ2VkLCBhZGRlZCBieSB1cworICAgIFUgICAgICAgICAgIEQgICAgdW5tZXJnZWQsIGRlbGV0ZWQgYnkgdGhlbQorICAgIFUgICAgICAgICAgIEEgICAgdW5tZXJnZWQsIGFkZGVkIGJ5IHRoZW0KKyAgICBEICAgICAgICAgICBVICAgIHVubWVyZ2VkLCBkZWxldGVkIGJ5IHVzCisgICAgQSAgICAgICAgICAgQSAgICB1bm1lcmdlZCwgYm90aCBhZGRlZAorICAgIFUgICAgICAgICAgIFUgICAgdW5tZXJnZWQsIGJvdGggbW9kaWZpZWQKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgPyAgICAgICAgICAgPyAgICB1bnRyYWNrZWQKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIAogQ09ORklHVVJBVElPTgogLS0tLS0tLS0tLS0tLQpAQCAtNTMsOSArMTE4LDkgQEAKIGRpcmVjdG9yeS4KIAogSWYgYHN0YXR1cy5zdWJtb2R1bGVzdW1tYXJ5YCBpcyBzZXQgdG8gYSBub24gemVybyBudW1iZXIgb3IgdHJ1ZSAoaWRlbnRpY2FsCi10byAtMSBvciBhbiB1bmxpbWl0ZWQgbnVtYmVyKSwgdGhlIHN1Ym1vZHVsZSBzdW1tYXJ5IHdpbGwgYmUgZW5hYmxlZCBhbmQgYQotc3VtbWFyeSBvZiBjb21taXRzIGZvciBtb2RpZmllZCBzdWJtb2R1bGVzIHdpbGwgYmUgc2hvd24gKHNlZSAtLXN1bW1hcnktbGltaXQKLW9wdGlvbiBvZiBsaW5rZ2l0OmdpdC1zdWJtb2R1bGVbMV0pLgordG8gLTEgb3IgYW4gdW5saW1pdGVkIG51bWJlciksIHRoZSBzdWJtb2R1bGUgc3VtbWFyeSB3aWxsIGJlIGVuYWJsZWQgZm9yCit0aGUgbG9uZyBmb3JtYXQgYW5kIGEgc3VtbWFyeSBvZiBjb21taXRzIGZvciBtb2RpZmllZCBzdWJtb2R1bGVzIHdpbGwgYmUKK3Nob3duIChzZWUgLS1zdW1tYXJ5LWxpbWl0IG9wdGlvbiBvZiBsaW5rZ2l0OmdpdC1zdWJtb2R1bGVbMV0pLgogCiBTRUUgQUxTTwogLS0tLS0tLS0KQEAgLTYzLDggKzEyOCw3IEBACiAKIEF1dGhvcgogLS0tLS0tCi1Xcml0dGVuIGJ5IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4gYW5kCi1KdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+LgorV3JpdHRlbiBieSBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+LgogCiBEb2N1bWVudGF0aW9uCiAtLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc3VibW9kdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN1Ym1vZHVsZS50eHQKaW5kZXggMTViMzRkMy4uMjUwMjUzMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc3VibW9kdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdWJtb2R1bGUudHh0CkBAIC05LDEyICs5LDE0IEBACiBTWU5PUFNJUwogLS0tLS0tLS0KIFt2ZXJzZV0KLSdnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gYWRkIFstYiBicmFuY2hdIFstLV0gPHJlcG9zaXRvcnk+IDxwYXRoPgotJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSBzdGF0dXMgWy0tY2FjaGVkXSBbLS1dIFs8cGF0aD4uLi5dCisnZ2l0IHN1Ym1vZHVsZScgWy0tcXVpZXRdIGFkZCBbLWIgYnJhbmNoXQorCSAgICAgIFstLXJlZmVyZW5jZSA8cmVwb3NpdG9yeT5dIFstLV0gPHJlcG9zaXRvcnk+IFs8cGF0aD5dCisnZ2l0IHN1Ym1vZHVsZScgWy0tcXVpZXRdIHN0YXR1cyBbLS1jYWNoZWRdIFstLXJlY3Vyc2l2ZV0gWy0tXSBbPHBhdGg+Li4uXQogJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSBpbml0IFstLV0gWzxwYXRoPi4uLl0KLSdnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gdXBkYXRlIFstLWluaXRdIFstTnwtLW5vLWZldGNoXSBbLS1dIFs8cGF0aD4uLi5dCi0nZ2l0IHN1Ym1vZHVsZScgWy0tcXVpZXRdIHN1bW1hcnkgWy0tc3VtbWFyeS1saW1pdCA8bj5dIFtjb21taXRdIFstLV0gWzxwYXRoPi4uLl0KLSdnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gZm9yZWFjaCA8Y29tbWFuZD4KKydnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gdXBkYXRlIFstLWluaXRdIFstTnwtLW5vLWZldGNoXSBbLS1yZWJhc2VdCisJICAgICAgWy0tcmVmZXJlbmNlIDxyZXBvc2l0b3J5Pl0gWy0tbWVyZ2VdIFstLXJlY3Vyc2l2ZV0gWy0tXSBbPHBhdGg+Li4uXQorJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSBzdW1tYXJ5IFstLWNhY2hlZHwtLWZpbGVzXSBbLS1zdW1tYXJ5LWxpbWl0IDxuPl0gW2NvbW1pdF0gWy0tXSBbPHBhdGg+Li4uXQorJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSBmb3JlYWNoIFstLXJlY3Vyc2l2ZV0gPGNvbW1hbmQ+CiAnZ2l0IHN1Ym1vZHVsZScgWy0tcXVpZXRdIHN5bmMgWy0tXSBbPHBhdGg+Li4uXQogCiAKQEAgLTY3LDcgKzY5LDExIEBACiAJdG8gdGhlIGNoYW5nZXNldCB0byBiZSBjb21taXR0ZWQgbmV4dCB0byB0aGUgY3VycmVudAogCXByb2plY3Q6IHRoZSBjdXJyZW50IHByb2plY3QgaXMgdGVybWVkIHRoZSAic3VwZXJwcm9qZWN0Ii4KICsKLVRoaXMgcmVxdWlyZXMgdHdvIGFyZ3VtZW50czogPHJlcG9zaXRvcnk+IGFuZCA8cGF0aD4uCitUaGlzIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1bWVudDogPHJlcG9zaXRvcnk+LiBUaGUgb3B0aW9uYWwKK2FyZ3VtZW50IDxwYXRoPiBpcyB0aGUgcmVsYXRpdmUgbG9jYXRpb24gZm9yIHRoZSBjbG9uZWQgc3VibW9kdWxlCit0byBleGlzdCBpbiB0aGUgc3VwZXJwcm9qZWN0LiBJZiA8cGF0aD4gaXMgbm90IGdpdmVuLCB0aGUKKyJodW1hbmlzaCIgcGFydCBvZiB0aGUgc291cmNlIHJlcG9zaXRvcnkgaXMgdXNlZCAoInJlcG8iIGZvcgorIi9wYXRoL3RvL3JlcG8uZ2l0IiBhbmQgImZvbyIgZm9yICJob3N0Lnh6OmZvby8uZ2l0IikuCiArCiA8cmVwb3NpdG9yeT4gaXMgdGhlIFVSTCBvZiB0aGUgbmV3IHN1Ym1vZHVsZSdzIG9yaWdpbiByZXBvc2l0b3J5LgogVGhpcyBtYXkgYmUgZWl0aGVyIGFuIGFic29sdXRlIFVSTCwgb3IgKGlmIGl0IGJlZ2lucyB3aXRoIC4vCkBAIC05MywxMSArOTksMTQgQEAKIHN0YXR1czo6CiAJU2hvdyB0aGUgc3RhdHVzIG9mIHRoZSBzdWJtb2R1bGVzLiBUaGlzIHdpbGwgcHJpbnQgdGhlIFNIQS0xIG9mIHRoZQogCWN1cnJlbnRseSBjaGVja2VkIG91dCBjb21taXQgZm9yIGVhY2ggc3VibW9kdWxlLCBhbG9uZyB3aXRoIHRoZQotCXN1Ym1vZHVsZSBwYXRoIGFuZCB0aGUgb3V0cHV0IG9mICdnaXQtZGVzY3JpYmUnIGZvciB0aGUKKwlzdWJtb2R1bGUgcGF0aCBhbmQgdGhlIG91dHB1dCBvZiAnZ2l0IGRlc2NyaWJlJyBmb3IgdGhlCiAJU0hBLTEuIEVhY2ggU0hBLTEgd2lsbCBiZSBwcmVmaXhlZCB3aXRoIGAtYCBpZiB0aGUgc3VibW9kdWxlIGlzIG5vdAogCWluaXRpYWxpemVkIGFuZCBgK2AgaWYgdGhlIGN1cnJlbnRseSBjaGVja2VkIG91dCBzdWJtb2R1bGUgY29tbWl0CiAJZG9lcyBub3QgbWF0Y2ggdGhlIFNIQS0xIGZvdW5kIGluIHRoZSBpbmRleCBvZiB0aGUgY29udGFpbmluZwotCXJlcG9zaXRvcnkuIFRoaXMgY29tbWFuZCBpcyB0aGUgZGVmYXVsdCBjb21tYW5kIGZvciAnZ2l0LXN1Ym1vZHVsZScuCisJcmVwb3NpdG9yeS4gVGhpcyBjb21tYW5kIGlzIHRoZSBkZWZhdWx0IGNvbW1hbmQgZm9yICdnaXQgc3VibW9kdWxlJy4KKysKK0lmICctLXJlY3Vyc2l2ZScgaXMgc3BlY2lmaWVkLCB0aGlzIGNvbW1hbmQgd2lsbCByZWN1cnNlIGludG8gbmVzdGVkCitzdWJtb2R1bGVzLCBhbmQgc2hvdyB0aGVpciBzdGF0dXMgYXMgd2VsbC4KIAogaW5pdDo6CiAJSW5pdGlhbGl6ZSB0aGUgc3VibW9kdWxlcywgaS5lLiByZWdpc3RlciBlYWNoIHN1Ym1vZHVsZSBuYW1lCkBAIC0xMDUsMzQgKzExNCw0NiBAQAogCVRoZSBrZXkgdXNlZCBpbiAuZ2l0L2NvbmZpZyBpcyBgc3VibW9kdWxlLiRuYW1lLnVybGAuCiAJVGhpcyBjb21tYW5kIGRvZXMgbm90IGFsdGVyIGV4aXN0aW5nIGluZm9ybWF0aW9uIGluIC5naXQvY29uZmlnLgogCVlvdSBjYW4gdGhlbiBjdXN0b21pemUgdGhlIHN1Ym1vZHVsZSBjbG9uZSBVUkxzIGluIC5naXQvY29uZmlnCi0JZm9yIHlvdXIgbG9jYWwgc2V0dXAgYW5kIHByb2NlZWQgdG8gJ2dpdCBzdWJtb2R1bGUgdXBkYXRlJzsKLQl5b3UgY2FuIGFsc28ganVzdCB1c2UgJ2dpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCcgd2l0aG91dAorCWZvciB5b3VyIGxvY2FsIHNldHVwIGFuZCBwcm9jZWVkIHRvIGBnaXQgc3VibW9kdWxlIHVwZGF0ZWA7CisJeW91IGNhbiBhbHNvIGp1c3QgdXNlIGBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXRgIHdpdGhvdXQKIAl0aGUgZXhwbGljaXQgJ2luaXQnIHN0ZXAgaWYgeW91IGRvIG5vdCBpbnRlbmQgdG8gY3VzdG9taXplCiAJYW55IHN1Ym1vZHVsZSBsb2NhdGlvbnMuCiAKIHVwZGF0ZTo6CiAJVXBkYXRlIHRoZSByZWdpc3RlcmVkIHN1Ym1vZHVsZXMsIGkuZS4gY2xvbmUgbWlzc2luZyBzdWJtb2R1bGVzIGFuZAogCWNoZWNrb3V0IHRoZSBjb21taXQgc3BlY2lmaWVkIGluIHRoZSBpbmRleCBvZiB0aGUgY29udGFpbmluZyByZXBvc2l0b3J5LgotCVRoaXMgd2lsbCBtYWtlIHRoZSBzdWJtb2R1bGVzIEhFQUQgYmUgZGV0YWNoZWQuCisJVGhpcyB3aWxsIG1ha2UgdGhlIHN1Ym1vZHVsZXMgSEVBRCBiZSBkZXRhY2hlZCB1bmxlc3MgJy0tcmViYXNlJyBvcgorCSctLW1lcmdlJyBpcyBzcGVjaWZpZWQgb3IgdGhlIGtleSBgc3VibW9kdWxlLiRuYW1lLnVwZGF0ZWAgaXMgc2V0IHRvCisJYHJlYmFzZWAgb3IgYG1lcmdlYC4KICsKIElmIHRoZSBzdWJtb2R1bGUgaXMgbm90IHlldCBpbml0aWFsaXplZCwgYW5kIHlvdSBqdXN0IHdhbnQgdG8gdXNlIHRoZQogc2V0dGluZyBhcyBzdG9yZWQgaW4gLmdpdG1vZHVsZXMsIHlvdSBjYW4gYXV0b21hdGljYWxseSBpbml0aWFsaXplIHRoZQogc3VibW9kdWxlIHdpdGggdGhlIC0taW5pdCBvcHRpb24uCisrCitJZiAnLS1yZWN1cnNpdmUnIGlzIHNwZWNpZmllZCwgdGhpcyBjb21tYW5kIHdpbGwgcmVjdXJzZSBpbnRvIHRoZQorcmVnaXN0ZXJlZCBzdWJtb2R1bGVzLCBhbmQgdXBkYXRlIGFueSBuZXN0ZWQgc3VibW9kdWxlcyB3aXRoaW4uCiAKIHN1bW1hcnk6OgogCVNob3cgY29tbWl0IHN1bW1hcnkgYmV0d2VlbiB0aGUgZ2l2ZW4gY29tbWl0IChkZWZhdWx0cyB0byBIRUFEKSBhbmQKIAl3b3JraW5nIHRyZWUvaW5kZXguIEZvciBhIHN1Ym1vZHVsZSBpbiBxdWVzdGlvbiwgYSBzZXJpZXMgb2YgY29tbWl0cwogCWluIHRoZSBzdWJtb2R1bGUgYmV0d2VlbiB0aGUgZ2l2ZW4gc3VwZXIgcHJvamVjdCBjb21taXQgYW5kIHRoZQotCWluZGV4IG9yIHdvcmtpbmcgdHJlZSAoc3dpdGNoZWQgYnkgLS1jYWNoZWQpIGFyZSBzaG93bi4KKwlpbmRleCBvciB3b3JraW5nIHRyZWUgKHN3aXRjaGVkIGJ5IC0tY2FjaGVkKSBhcmUgc2hvd24uIElmIHRoZSBvcHRpb24KKwktLWZpbGVzIGlzIGdpdmVuLCBzaG93IHRoZSBzZXJpZXMgb2YgY29tbWl0cyBpbiB0aGUgc3VibW9kdWxlIGJldHdlZW4KKwl0aGUgaW5kZXggb2YgdGhlIHN1cGVyIHByb2plY3QgYW5kIHRoZSB3b3JraW5nIHRyZWUgb2YgdGhlIHN1Ym1vZHVsZQorCSh0aGlzIG9wdGlvbiBkb2Vzbid0IGFsbG93IHRvIHVzZSB0aGUgLS1jYWNoZWQgb3B0aW9uIG9yIHRvIHByb3ZpZGUgYW4KKwlleHBsaWNpdCBjb21taXQpLgogCiBmb3JlYWNoOjoKIAlFdmFsdWF0ZXMgYW4gYXJiaXRyYXJ5IHNoZWxsIGNvbW1hbmQgaW4gZWFjaCBjaGVja2VkIG91dCBzdWJtb2R1bGUuCi0JVGhlIGNvbW1hbmQgaGFzIGFjY2VzcyB0byB0aGUgdmFyaWFibGVzICRwYXRoIGFuZCAkc2hhMToKKwlUaGUgY29tbWFuZCBoYXMgYWNjZXNzIHRvIHRoZSB2YXJpYWJsZXMgJG5hbWUsICRwYXRoIGFuZCAkc2hhMToKKwkkbmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgcmVsZXZhbnQgc3VibW9kdWxlIHNlY3Rpb24gaW4gLmdpdG1vZHVsZXMsCiAJJHBhdGggaXMgdGhlIG5hbWUgb2YgdGhlIHN1Ym1vZHVsZSBkaXJlY3RvcnkgcmVsYXRpdmUgdG8gdGhlCiAJc3VwZXJwcm9qZWN0LCBhbmQgJHNoYTEgaXMgdGhlIGNvbW1pdCBhcyByZWNvcmRlZCBpbiB0aGUgc3VwZXJwcm9qZWN0LgogCUFueSBzdWJtb2R1bGVzIGRlZmluZWQgaW4gdGhlIHN1cGVycHJvamVjdCBidXQgbm90IGNoZWNrZWQgb3V0IGFyZQogCWlnbm9yZWQgYnkgdGhpcyBjb21tYW5kLiBVbmxlc3MgZ2l2ZW4gLS1xdWlldCwgZm9yZWFjaCBwcmludHMgdGhlIG5hbWUKIAlvZiBlYWNoIHN1Ym1vZHVsZSBiZWZvcmUgZXZhbHVhdGluZyB0aGUgY29tbWFuZC4KKwlJZiAtLXJlY3Vyc2l2ZSBpcyBnaXZlbiwgc3VibW9kdWxlcyBhcmUgdHJhdmVyc2VkIHJlY3Vyc2l2ZWx5IChpLmUuCisJdGhlIGdpdmVuIHNoZWxsIGNvbW1hbmQgaXMgZXZhbHVhdGVkIGluIG5lc3RlZCBzdWJtb2R1bGVzIGFzIHdlbGwpLgogCUEgbm9uLXplcm8gcmV0dXJuIGZyb20gdGhlIGNvbW1hbmQgaW4gYW55IHN1Ym1vZHVsZSBjYXVzZXMKIAl0aGUgcHJvY2Vzc2luZyB0byB0ZXJtaW5hdGUuIFRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYWRkaW5nICd8fCA6JwogCXRvIHRoZSBlbmQgb2YgdGhlIGNvbW1hbmQuCkBAIC0xNjUsNiArMTg2LDExIEBACiAJY29tbWFuZHMgdHlwaWNhbGx5IHVzZSB0aGUgY29tbWl0IGZvdW5kIGluIHRoZSBzdWJtb2R1bGUgSEVBRCwgYnV0CiAJd2l0aCB0aGlzIG9wdGlvbiwgdGhlIGNvbW1pdCBzdG9yZWQgaW4gdGhlIGluZGV4IGlzIHVzZWQgaW5zdGVhZC4KIAorLS1maWxlczo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgdGhlIHN1bW1hcnkgY29tbWFuZC4gVGhpcyBjb21tYW5kCisJY29tcGFyZXMgdGhlIGNvbW1pdCBpbiB0aGUgaW5kZXggd2l0aCB0aGF0IGluIHRoZSBzdWJtb2R1bGUgSEVBRAorCXdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZC4KKwogLW46OgogLS1zdW1tYXJ5LWxpbWl0OjoKIAlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciB0aGUgc3VtbWFyeSBjb21tYW5kLgpAQCAtMTc4LDYgKzIwNCwzOSBAQAogCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSB1cGRhdGUgY29tbWFuZC4KIAlEb24ndCBmZXRjaCBuZXcgb2JqZWN0cyBmcm9tIHRoZSByZW1vdGUgc2l0ZS4KIAorLS1tZXJnZTo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgdGhlIHVwZGF0ZSBjb21tYW5kLgorCU1lcmdlIHRoZSBjb21taXQgcmVjb3JkZWQgaW4gdGhlIHN1cGVycHJvamVjdCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaAorCW9mIHRoZSBzdWJtb2R1bGUuIElmIHRoaXMgb3B0aW9uIGlzIGdpdmVuLCB0aGUgc3VibW9kdWxlJ3MgSEVBRCB3aWxsCisJbm90IGJlIGRldGFjaGVkLiBJZiBhIG1lcmdlIGZhaWx1cmUgcHJldmVudHMgdGhpcyBwcm9jZXNzLCB5b3Ugd2lsbAorCWhhdmUgdG8gcmVzb2x2ZSB0aGUgcmVzdWx0aW5nIGNvbmZsaWN0cyB3aXRoaW4gdGhlIHN1Ym1vZHVsZSB3aXRoIHRoZQorCXVzdWFsIGNvbmZsaWN0IHJlc29sdXRpb24gdG9vbHMuCisJSWYgdGhlIGtleSBgc3VibW9kdWxlLiRuYW1lLnVwZGF0ZWAgaXMgc2V0IHRvIGBtZXJnZWAsIHRoaXMgb3B0aW9uIGlzCisJaW1wbGljaXQuCisKKy0tcmViYXNlOjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciB0aGUgdXBkYXRlIGNvbW1hbmQuCisJUmViYXNlIHRoZSBjdXJyZW50IGJyYW5jaCBvbnRvIHRoZSBjb21taXQgcmVjb3JkZWQgaW4gdGhlCisJc3VwZXJwcm9qZWN0LiBJZiB0aGlzIG9wdGlvbiBpcyBnaXZlbiwgdGhlIHN1Ym1vZHVsZSdzIEhFQUQgd2lsbCBub3QKKwliZSBkZXRhY2hlZC4gSWYgYSBtZXJnZSBmYWlsdXJlIHByZXZlbnRzIHRoaXMgcHJvY2VzcywgeW91IHdpbGwgaGF2ZQorCXRvIHJlc29sdmUgdGhlc2UgZmFpbHVyZXMgd2l0aCBsaW5rZ2l0OmdpdC1yZWJhc2VbMV0uCisJSWYgdGhlIGtleSBgc3VibW9kdWxlLiRuYW1lLnVwZGF0ZWAgaXMgc2V0IHRvIGByZWJhc2VgLCB0aGlzIG9wdGlvbiBpcworCWltcGxpY2l0LgorCistLXJlZmVyZW5jZSA8cmVwb3NpdG9yeT46OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIGFkZCBhbmQgdXBkYXRlIGNvbW1hbmRzLiAgVGhlc2UKKwljb21tYW5kcyBzb21ldGltZXMgbmVlZCB0byBjbG9uZSBhIHJlbW90ZSByZXBvc2l0b3J5LiBJbiB0aGlzIGNhc2UsCisJdGhpcyBvcHRpb24gd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGxpbmtnaXQ6Z2l0LWNsb25lWzFdIGNvbW1hbmQuCisrCisqTk9URSo6IERvICpub3QqIHVzZSB0aGlzIG9wdGlvbiB1bmxlc3MgeW91IGhhdmUgcmVhZCB0aGUgbm90ZQorZm9yIGxpbmtnaXQ6Z2l0LWNsb25lWzFdJ3MgLS1yZWZlcmVuY2UgYW5kIC0tc2hhcmVkIG9wdGlvbnMgY2FyZWZ1bGx5LgorCistLXJlY3Vyc2l2ZTo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgZm9yZWFjaCwgdXBkYXRlIGFuZCBzdGF0dXMgY29tbWFuZHMuCisJVHJhdmVyc2Ugc3VibW9kdWxlcyByZWN1cnNpdmVseS4gVGhlIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgbm90CisJb25seSBpbiB0aGUgc3VibW9kdWxlcyBvZiB0aGUgY3VycmVudCByZXBvLCBidXQgYWxzbworCWluIGFueSBuZXN0ZWQgc3VibW9kdWxlcyBpbnNpZGUgdGhvc2Ugc3VibW9kdWxlcyAoYW5kIHNvIG9uKS4KKwogPHBhdGg+Li4uOjoKIAlQYXRocyB0byBzdWJtb2R1bGUocykuIFdoZW4gc3BlY2lmaWVkIHRoaXMgd2lsbCByZXN0cmljdCB0aGUgY29tbWFuZAogCXRvIG9ubHkgb3BlcmF0ZSBvbiB0aGUgc3VibW9kdWxlcyBmb3VuZCBhdCB0aGUgc3BlY2lmaWVkIHBhdGhzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc3ZuLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN2bi50eHQKaW5kZXggNzRiZTg0My4uOTlmM2MxZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc3ZuLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdm4udHh0CkBAIC0zLDcgKzMsNyBAQAogCiBOQU1FCiAtLS0tCi1naXQtc3ZuIC0gQmlkaXJlY3Rpb25hbCBvcGVyYXRpb24gYmV0d2VlbiBhIHNpbmdsZSBTdWJ2ZXJzaW9uIGJyYW5jaCBhbmQgZ2l0CitnaXQtc3ZuIC0gQmlkaXJlY3Rpb25hbCBvcGVyYXRpb24gYmV0d2VlbiBhIFN1YnZlcnNpb24gcmVwb3NpdG9yeSBhbmQgZ2l0CiAKIFNZTk9QU0lTCiAtLS0tLS0tLQpAQCAtMTEsMjcgKzExLDI1IEBACiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQotJ2dpdC1zdm4nIGlzIGEgc2ltcGxlIGNvbmR1aXQgZm9yIGNoYW5nZXNldHMgYmV0d2VlbiBTdWJ2ZXJzaW9uIGFuZCBnaXQuCisnZ2l0IHN2bicgaXMgYSBzaW1wbGUgY29uZHVpdCBmb3IgY2hhbmdlc2V0cyBiZXR3ZWVuIFN1YnZlcnNpb24gYW5kIGdpdC4KIEl0IHByb3ZpZGVzIGEgYmlkaXJlY3Rpb25hbCBmbG93IG9mIGNoYW5nZXMgYmV0d2VlbiBhIFN1YnZlcnNpb24gYW5kIGEgZ2l0CiByZXBvc2l0b3J5LgogCi0nZ2l0LXN2bicgY2FuIHRyYWNrIGEgc2luZ2xlIFN1YnZlcnNpb24gYnJhbmNoIHNpbXBseSBieSB1c2luZyBhCi1VUkwgdG8gdGhlIGJyYW5jaCwgZm9sbG93IGJyYW5jaGVzIGxhaWQgb3V0IGluIHRoZSBTdWJ2ZXJzaW9uIHJlY29tbWVuZGVkCi1tZXRob2QgKHRydW5rLCBicmFuY2hlcywgdGFncyBkaXJlY3Rvcmllcykgd2l0aCB0aGUgLS1zdGRsYXlvdXQgb3B0aW9uLCBvcgotZm9sbG93IGJyYW5jaGVzIGluIGFueSBsYXlvdXQgd2l0aCB0aGUgLVQvLXQvLWIgb3B0aW9ucyAoc2VlIG9wdGlvbnMgdG8KLSdpbml0JyBiZWxvdywgYW5kIGFsc28gdGhlICdjbG9uZScgY29tbWFuZCkuCisnZ2l0IHN2bicgY2FuIHRyYWNrIGEgc3RhbmRhcmQgU3VidmVyc2lvbiByZXBvc2l0b3J5LAorZm9sbG93aW5nIHRoZSBjb21tb24gInRydW5rL2JyYW5jaGVzL3RhZ3MiIGxheW91dCwgd2l0aCB0aGUgLS1zdGRsYXlvdXQgb3B0aW9uLgorSXQgY2FuIGFsc28gZm9sbG93IGJyYW5jaGVzIGFuZCB0YWdzIGluIGFueSBsYXlvdXQgd2l0aCB0aGUgLVQvLXQvLWIgb3B0aW9ucworKHNlZSBvcHRpb25zIHRvICdpbml0JyBiZWxvdywgYW5kIGFsc28gdGhlICdjbG9uZScgY29tbWFuZCkuCiAKLU9uY2UgdHJhY2tpbmcgYSBTdWJ2ZXJzaW9uIGJyYW5jaCAod2l0aCBhbnkgb2YgdGhlIGFib3ZlIG1ldGhvZHMpLCB0aGUgZ2l0CitPbmNlIHRyYWNraW5nIGEgU3VidmVyc2lvbiByZXBvc2l0b3J5ICh3aXRoIGFueSBvZiB0aGUgYWJvdmUgbWV0aG9kcyksIHRoZSBnaXQKIHJlcG9zaXRvcnkgY2FuIGJlIHVwZGF0ZWQgZnJvbSBTdWJ2ZXJzaW9uIGJ5IHRoZSAnZmV0Y2gnIGNvbW1hbmQgYW5kCiBTdWJ2ZXJzaW9uIHVwZGF0ZWQgZnJvbSBnaXQgYnkgdGhlICdkY29tbWl0JyBjb21tYW5kLgogCiBDT01NQU5EUwogLS0tLS0tLS0KLS0tCiAKICdpbml0Jzo6CiAJSW5pdGlhbGl6ZXMgYW4gZW1wdHkgZ2l0IHJlcG9zaXRvcnkgd2l0aCBhZGRpdGlvbmFsCi0JbWV0YWRhdGEgZGlyZWN0b3JpZXMgZm9yICdnaXQtc3ZuJy4gIFRoZSBTdWJ2ZXJzaW9uIFVSTAorCW1ldGFkYXRhIGRpcmVjdG9yaWVzIGZvciAnZ2l0IHN2bicuICBUaGUgU3VidmVyc2lvbiBVUkwKIAltYXkgYmUgc3BlY2lmaWVkIGFzIGEgY29tbWFuZC1saW5lIGFyZ3VtZW50LCBvciBhcyBmdWxsCiAJVVJMIGFyZ3VtZW50cyB0byAtVC8tdC8tYi4gIE9wdGlvbmFsbHksIHRoZSB0YXJnZXQKIAlkaXJlY3RvcnkgdG8gb3BlcmF0ZSBvbiBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgc2Vjb25kCkBAIC00OCw4ICs0NiwxMSBAQAogLS1zdGRsYXlvdXQ7OwogCVRoZXNlIGFyZSBvcHRpb25hbCBjb21tYW5kLWxpbmUgb3B0aW9ucyBmb3IgaW5pdC4gIEVhY2ggb2YKIAl0aGVzZSBmbGFncyBjYW4gcG9pbnQgdG8gYSByZWxhdGl2ZSByZXBvc2l0b3J5IHBhdGgKLQkoLS10YWdzPXByb2plY3QvdGFncycpIG9yIGEgZnVsbCB1cmwKLQkoLS10YWdzPWh0dHBzOi8vZm9vLm9yZy9wcm9qZWN0L3RhZ3MpLiBUaGUgb3B0aW9uIC0tc3RkbGF5b3V0IGlzCisJKC0tdGFncz1wcm9qZWN0L3RhZ3MpIG9yIGEgZnVsbCB1cmwKKwkoLS10YWdzPWh0dHBzOi8vZm9vLm9yZy9wcm9qZWN0L3RhZ3MpLgorCVlvdSBjYW4gc3BlY2lmeSBtb3JlIHRoYW4gb25lIC0tdGFncyBhbmQvb3IgLS1icmFuY2hlcyBvcHRpb25zLCBpbiBjYXNlCisJeW91ciBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgcGxhY2VzIHRhZ3Mgb3IgYnJhbmNoZXMgdW5kZXIgbXVsdGlwbGUgcGF0aHMuCisJVGhlIG9wdGlvbiAtLXN0ZGxheW91dCBpcwogCWEgc2hvcnRoYW5kIHdheSBvZiBzZXR0aW5nIHRydW5rLHRhZ3MsYnJhbmNoZXMgYXMgdGhlIHJlbGF0aXZlIHBhdGhzLAogCXdoaWNoIGlzIHRoZSBTdWJ2ZXJzaW9uIGRlZmF1bHQuIElmIGFueSBvZiB0aGUgb3RoZXIgb3B0aW9ucyBhcmUgZ2l2ZW4KIAlhcyB3ZWxsLCB0aGV5IHRha2UgcHJlY2VkZW5jZS4KQEAgLTYxLDE2ICs2Miw4IEBACiAJU2V0IHRoZSAndXNlU3Zuc3luY1Byb3BzJyBvcHRpb24gaW4gdGhlIFtzdm4tcmVtb3RlXSBjb25maWcuCiAtLXJld3JpdGUtcm9vdD08VVJMPjs7CiAJU2V0IHRoZSAncmV3cml0ZVJvb3QnIG9wdGlvbiBpbiB0aGUgW3N2bi1yZW1vdGVdIGNvbmZpZy4KLS0tdXNlLWxvZy1hdXRob3I7OwotCVdoZW4gcmV0cmlldmluZyBzdm4gY29tbWl0cyBpbnRvIGdpdCAoYXMgcGFydCBvZiBmZXRjaCwgcmViYXNlLCBvcgotCWRjb21taXQgb3BlcmF0aW9ucyksIGxvb2sgZm9yIHRoZSBmaXJzdCBGcm9tOiBvciBTaWduZWQtb2ZmLWJ5OiBsaW5lCi0JaW4gdGhlIGxvZyBtZXNzYWdlIGFuZCB1c2UgdGhhdCBhcyB0aGUgYXV0aG9yIHN0cmluZy4KLS0tYWRkLWF1dGhvci1mcm9tOzsKLQlXaGVuIGNvbW1pdHRpbmcgdG8gc3ZuIGZyb20gZ2l0IChhcyBwYXJ0IG9mIGNvbW1pdCBvciBkY29tbWl0Ci0Jb3BlcmF0aW9ucyksIGlmIHRoZSBleGlzdGluZyBsb2cgbWVzc2FnZSBkb2Vzbid0IGFscmVhZHkgaGF2ZSBhCi0JRnJvbTogb3IgU2lnbmVkLW9mZi1ieTogbGluZSwgYXBwZW5kIGEgRnJvbTogbGluZSBiYXNlZCBvbiB0aGUKLQlnaXQgY29tbWl0J3MgYXV0aG9yIHN0cmluZy4gIElmIHlvdSB1c2UgdGhpcywgdGhlbiAtLXVzZS1sb2ctYXV0aG9yCi0Jd2lsbCByZXRyaWV2ZSBhIHZhbGlkIGF1dGhvciBzdHJpbmcgZm9yIGFsbCBjb21taXRzLgorLS1yZXdyaXRlLXV1aWQ9PFVVSUQ+OzsKKwlTZXQgdGhlICdyZXdyaXRlVVVJRCcgb3B0aW9uIGluIHRoZSBbc3ZuLXJlbW90ZV0gY29uZmlnLgogLS11c2VybmFtZT08VVNFUj47OwogCUZvciB0cmFuc3BvcnRzIHRoYXQgU1ZOIGhhbmRsZXMgYXV0aGVudGljYXRpb24gZm9yIChodHRwLAogCWh0dHBzLCBhbmQgcGxhaW4gc3ZuKSwgc3BlY2lmeSB0aGUgdXNlcm5hbWUuICBGb3Igb3RoZXIKQEAgLTg5LDYgKzgyLDE3IEBACiAJV2hlbiBwYXNzZWQgdG8gJ2luaXQnIG9yICdjbG9uZScgdGhpcyByZWd1bGFyIGV4cHJlc3Npb24gd2lsbAogCWJlIHByZXNlcnZlZCBhcyBhIGNvbmZpZyBrZXkuICBTZWUgJ2ZldGNoJyBmb3IgYSBkZXNjcmlwdGlvbgogCW9mICctLWlnbm9yZS1wYXRocycuCistLW5vLW1pbmltaXplLXVybDs7CisJV2hlbiB0cmFja2luZyBtdWx0aXBsZSBkaXJlY3RvcmllcyAodXNpbmcgLS1zdGRsYXlvdXQsCisJLS1icmFuY2hlcywgb3IgLS10YWdzIG9wdGlvbnMpLCBnaXQgc3ZuIHdpbGwgYXR0ZW1wdCB0byBjb25uZWN0CisJdG8gdGhlIHJvb3QgKG9yIGhpZ2hlc3QgYWxsb3dlZCBsZXZlbCkgb2YgdGhlIFN1YnZlcnNpb24KKwlyZXBvc2l0b3J5LiAgVGhpcyBkZWZhdWx0IGFsbG93cyBiZXR0ZXIgdHJhY2tpbmcgb2YgaGlzdG9yeSBpZgorCWVudGlyZSBwcm9qZWN0cyBhcmUgbW92ZWQgd2l0aGluIGEgcmVwb3NpdG9yeSwgYnV0IG1heSBjYXVzZQorCWlzc3VlcyBvbiByZXBvc2l0b3JpZXMgd2hlcmUgcmVhZCBhY2Nlc3MgcmVzdHJpY3Rpb25zIGFyZSBpbgorCXBsYWNlLiAgUGFzc2luZyAnLS1uby1taW5pbWl6ZS11cmwnIHdpbGwgYWxsb3cgZ2l0IHN2biB0bworCWFjY2VwdCBVUkxzIGFzLWlzIHdpdGhvdXQgYXR0ZW1wdGluZyB0byBjb25uZWN0IHRvIGEgaGlnaGVyCisJbGV2ZWwgZGlyZWN0b3J5LiAgVGhpcyBvcHRpb24gaXMgb2ZmIGJ5IGRlZmF1bHQgd2hlbiBvbmx5CisJb25lIFVSTC9icmFuY2ggaXMgdHJhY2tlZCAoaXQgd291bGQgZG8gbGl0dGxlIGdvb2QpLgogCiAnZmV0Y2gnOjoKIAlGZXRjaCB1bmZldGNoZWQgcmV2aXNpb25zIGZyb20gdGhlIFN1YnZlcnNpb24gcmVtb3RlIHdlIGFyZQpAQCAtOTgsMzggKzEwMiw1NyBAQAogCiAtLWxvY2FsdGltZTs7CiAJU3RvcmUgR2l0IGNvbW1pdCB0aW1lcyBpbiB0aGUgbG9jYWwgdGltZXpvbmUgaW5zdGVhZCBvZiBVVEMuICBUaGlzCi0JbWFrZXMgJ2dpdC1sb2cnIChldmVuIHdpdGhvdXQgLS1kYXRlPWxvY2FsKSBzaG93IHRoZSBzYW1lIHRpbWVzCisJbWFrZXMgJ2dpdCBsb2cnIChldmVuIHdpdGhvdXQgLS1kYXRlPWxvY2FsKSBzaG93IHRoZSBzYW1lIHRpbWVzCiAJdGhhdCBgc3ZuIGxvZ2Agd291bGQgaW4gdGhlIGxvY2FsIHRpbWV6b25lLgotCi0tLXBhcmVudDs7Ci0JRmV0Y2ggb25seSBmcm9tIHRoZSBTVk4gcGFyZW50IG9mIHRoZSBjdXJyZW50IEhFQUQuCi0KKysKIFRoaXMgZG9lc24ndCBpbnRlcmZlcmUgd2l0aCBpbnRlcm9wZXJhdGluZyB3aXRoIHRoZSBTdWJ2ZXJzaW9uCiByZXBvc2l0b3J5IHlvdSBjbG9uZWQgZnJvbSwgYnV0IGlmIHlvdSB3aXNoIGZvciB5b3VyIGxvY2FsIEdpdAogcmVwb3NpdG9yeSB0byBiZSBhYmxlIHRvIGludGVyb3BlcmF0ZSB3aXRoIHNvbWVvbmUgZWxzZSdzIGxvY2FsIEdpdAogcmVwb3NpdG9yeSwgZWl0aGVyIGRvbid0IHVzZSB0aGlzIG9wdGlvbiBvciB5b3Ugc2hvdWxkIGJvdGggdXNlIGl0IGluCiB0aGUgc2FtZSBsb2NhbCB0aW1lem9uZS4KIAorLS1wYXJlbnQ7OworCUZldGNoIG9ubHkgZnJvbSB0aGUgU1ZOIHBhcmVudCBvZiB0aGUgY3VycmVudCBIRUFELgorCiAtLWlnbm9yZS1wYXRocz08cmVnZXg+OzsKIAlUaGlzIGFsbG93cyBvbmUgdG8gc3BlY2lmeSBhIFBlcmwgcmVndWxhciBleHByZXNzaW9uIHRoYXQgd2lsbAogCWNhdXNlIHNraXBwaW5nIG9mIGFsbCBtYXRjaGluZyBwYXRocyBmcm9tIGNoZWNrb3V0IGZyb20gU1ZOLgogCVRoZSAnLS1pZ25vcmUtcGF0aHMnIG9wdGlvbiBzaG91bGQgbWF0Y2ggZm9yIGV2ZXJ5ICdmZXRjaCcKIAkoaW5jbHVkaW5nIGF1dG9tYXRpYyBmZXRjaGVzIGR1ZSB0byAnY2xvbmUnLCAnZGNvbW1pdCcsCiAJJ3JlYmFzZScsIGV0Yykgb24gYSBnaXZlbiByZXBvc2l0b3J5LgotCisrCitbdmVyc2VdCiBjb25maWcga2V5OiBzdm4tcmVtb3RlLjxuYW1lPi5pZ25vcmUtcGF0aHMKLQotCUlmIHRoZSBpZ25vcmUtcGF0aHMgY29uZmlnIGtleSBpcyBzZXQgYW5kIHRoZSBjb21tYW5kCi0JbGluZSBvcHRpb24gaXMgYWxzbyBnaXZlbiwgYm90aCByZWd1bGFyIGV4cHJlc3Npb25zCi0Jd2lsbCBiZSB1c2VkLgotCisrCitJZiB0aGUgaWdub3JlLXBhdGhzIGNvbmZpZyBrZXkgaXMgc2V0IGFuZCB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbiBpcworYWxzbyBnaXZlbiwgYm90aCByZWd1bGFyIGV4cHJlc3Npb25zIHdpbGwgYmUgdXNlZC4KKysKIEV4YW1wbGVzOgorKworLS0KK1NraXAgImRvYyoiIGRpcmVjdG9yeSBmb3IgZXZlcnkgZmV0Y2g7OworKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLWlnbm9yZS1wYXRocz0iXmRvYyIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0JLS1pZ25vcmUtcGF0aHM9Il5kb2MiIC0gc2tpcCAiZG9jKiIgZGlyZWN0b3J5IGZvciBldmVyeQotCSAgICBmZXRjaC4KK1NraXAgImJyYW5jaGVzIiBhbmQgInRhZ3MiIG9mIGZpcnN0IGxldmVsIGRpcmVjdG9yaWVzOzsKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS1pZ25vcmUtcGF0aHM9Il5bXi9dKy8oPzpicmFuY2hlc3x0YWdzKSIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0KIAotCS0taWdub3JlLXBhdGhzPSJeW14vXSsvKD86YnJhbmNoZXN8dGFncykiIC0gc2tpcAotCSAgICAiYnJhbmNoZXMiIGFuZCAidGFncyIgb2YgZmlyc3QgbGV2ZWwgZGlyZWN0b3JpZXMuCistLXVzZS1sb2ctYXV0aG9yOzsKKwlXaGVuIHJldHJpZXZpbmcgc3ZuIGNvbW1pdHMgaW50byBnaXQgKGFzIHBhcnQgb2YgZmV0Y2gsIHJlYmFzZSwgb3IKKwlkY29tbWl0IG9wZXJhdGlvbnMpLCBsb29rIGZvciB0aGUgZmlyc3QgRnJvbTogb3IgU2lnbmVkLW9mZi1ieTogbGluZQorCWluIHRoZSBsb2cgbWVzc2FnZSBhbmQgdXNlIHRoYXQgYXMgdGhlIGF1dGhvciBzdHJpbmcuCistLWFkZC1hdXRob3ItZnJvbTs7CisJV2hlbiBjb21taXR0aW5nIHRvIHN2biBmcm9tIGdpdCAoYXMgcGFydCBvZiBjb21taXQgb3IgZGNvbW1pdAorCW9wZXJhdGlvbnMpLCBpZiB0aGUgZXhpc3RpbmcgbG9nIG1lc3NhZ2UgZG9lc24ndCBhbHJlYWR5IGhhdmUgYQorCUZyb206IG9yIFNpZ25lZC1vZmYtYnk6IGxpbmUsIGFwcGVuZCBhIEZyb206IGxpbmUgYmFzZWQgb24gdGhlCisJZ2l0IGNvbW1pdCdzIGF1dGhvciBzdHJpbmcuICBJZiB5b3UgdXNlIHRoaXMsIHRoZW4gLS11c2UtbG9nLWF1dGhvcgorCXdpbGwgcmV0cmlldmUgYSB2YWxpZCBhdXRob3Igc3RyaW5nIGZvciBhbGwgY29tbWl0cy4KIAogJ2Nsb25lJzo6CiAJUnVucyAnaW5pdCcgYW5kICdmZXRjaCcuICBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEKQEAgLTEzNywyOSArMTYwLDI5IEBACiAJb3IgaWYgYSBzZWNvbmQgYXJndW1lbnQgaXMgcGFzc2VkOyBpdCB3aWxsIGNyZWF0ZSBhIGRpcmVjdG9yeQogCWFuZCB3b3JrIHdpdGhpbiB0aGF0LiAgSXQgYWNjZXB0cyBhbGwgYXJndW1lbnRzIHRoYXQgdGhlCiAJJ2luaXQnIGFuZCAnZmV0Y2gnIGNvbW1hbmRzIGFjY2VwdDsgd2l0aCB0aGUgZXhjZXB0aW9uIG9mCi0JJy0tZmV0Y2gtYWxsJy4gICBBZnRlciBhIHJlcG9zaXRvcnkgaXMgY2xvbmVkLCB0aGUgJ2ZldGNoJwotCWNvbW1hbmQgd2lsbCBiZSBhYmxlIHRvIHVwZGF0ZSByZXZpc2lvbnMgd2l0aG91dCBhZmZlY3RpbmcKLQl0aGUgd29ya2luZyB0cmVlOyBhbmQgdGhlICdyZWJhc2UnIGNvbW1hbmQgd2lsbCBiZSBhYmxlCi0JdG8gdXBkYXRlIHRoZSB3b3JraW5nIHRyZWUgd2l0aCB0aGUgbGF0ZXN0IGNoYW5nZXMuCisJJy0tZmV0Y2gtYWxsJyBhbmQgJy0tcGFyZW50Jy4gIEFmdGVyIGEgcmVwb3NpdG9yeSBpcyBjbG9uZWQsCisJdGhlICdmZXRjaCcgY29tbWFuZCB3aWxsIGJlIGFibGUgdG8gdXBkYXRlIHJldmlzaW9ucyB3aXRob3V0CisJYWZmZWN0aW5nIHRoZSB3b3JraW5nIHRyZWU7IGFuZCB0aGUgJ3JlYmFzZScgY29tbWFuZCB3aWxsIGJlCisJYWJsZSB0byB1cGRhdGUgdGhlIHdvcmtpbmcgdHJlZSB3aXRoIHRoZSBsYXRlc3QgY2hhbmdlcy4KIAogJ3JlYmFzZSc6OgogCVRoaXMgZmV0Y2hlcyByZXZpc2lvbnMgZnJvbSB0aGUgU1ZOIHBhcmVudCBvZiB0aGUgY3VycmVudCBIRUFECiAJYW5kIHJlYmFzZXMgdGhlIGN1cnJlbnQgKHVuY29tbWl0dGVkIHRvIFNWTikgd29yayBhZ2FpbnN0IGl0LgotCi1UaGlzIHdvcmtzIHNpbWlsYXJseSB0byBgc3ZuIHVwZGF0ZWAgb3IgJ2dpdC1wdWxsJyBleGNlcHQgdGhhdAotaXQgcHJlc2VydmVzIGxpbmVhciBoaXN0b3J5IHdpdGggJ2dpdC1yZWJhc2UnIGluc3RlYWQgb2YKLSdnaXQtbWVyZ2UnIGZvciBlYXNlIG9mIGRjb21taXR0aW5nIHdpdGggJ2dpdC1zdm4nLgotCi1UaGlzIGFjY2VwdHMgYWxsIG9wdGlvbnMgdGhhdCAnZ2l0LXN2biBmZXRjaCcgYW5kICdnaXQtcmViYXNlJworKworVGhpcyB3b3JrcyBzaW1pbGFybHkgdG8gYHN2biB1cGRhdGVgIG9yICdnaXQgcHVsbCcgZXhjZXB0IHRoYXQKK2l0IHByZXNlcnZlcyBsaW5lYXIgaGlzdG9yeSB3aXRoICdnaXQgcmViYXNlJyBpbnN0ZWFkIG9mCisnZ2l0IG1lcmdlJyBmb3IgZWFzZSBvZiBkY29tbWl0dGluZyB3aXRoICdnaXQgc3ZuJy4KKysKK1RoaXMgYWNjZXB0cyBhbGwgb3B0aW9ucyB0aGF0ICdnaXQgc3ZuIGZldGNoJyBhbmQgJ2dpdCByZWJhc2UnCiBhY2NlcHQuICBIb3dldmVyLCAnLS1mZXRjaC1hbGwnIG9ubHkgZmV0Y2hlcyBmcm9tIHRoZSBjdXJyZW50CiBbc3ZuLXJlbW90ZV0sIGFuZCBub3QgYWxsIFtzdm4tcmVtb3RlXSBkZWZpbml0aW9ucy4KLQotTGlrZSAnZ2l0LXJlYmFzZSc7IHRoaXMgcmVxdWlyZXMgdGhhdCB0aGUgd29ya2luZyB0cmVlIGJlIGNsZWFuCisrCitMaWtlICdnaXQgcmViYXNlJzsgdGhpcyByZXF1aXJlcyB0aGF0IHRoZSB3b3JraW5nIHRyZWUgYmUgY2xlYW4KIGFuZCBoYXZlIG5vIHVuY29tbWl0dGVkIGNoYW5nZXMuCiAKIC1sOzsKIC0tbG9jYWw7OwotCURvIG5vdCBmZXRjaCByZW1vdGVseTsgb25seSBydW4gJ2dpdC1yZWJhc2UnIGFnYWluc3QgdGhlCisJRG8gbm90IGZldGNoIHJlbW90ZWx5OyBvbmx5IHJ1biAnZ2l0IHJlYmFzZScgYWdhaW5zdCB0aGUKIAlsYXN0IGZldGNoZWQgY29tbWl0IGZyb20gdGhlIHVwc3RyZWFtIFNWTi4KIAogJ2Rjb21taXQnOjoKQEAgLTE2NywxMSArMTkwLDEyIEBACiAJcmVwb3NpdG9yeSwgYW5kIHRoZW4gcmViYXNlIG9yIHJlc2V0IChkZXBlbmRpbmcgb24gd2hldGhlciBvcgogCW5vdCB0aGVyZSBpcyBhIGRpZmYgYmV0d2VlbiBTVk4gYW5kIGhlYWQpLiAgVGhpcyB3aWxsIGNyZWF0ZQogCWEgcmV2aXNpb24gaW4gU1ZOIGZvciBlYWNoIGNvbW1pdCBpbiBnaXQuCi0JSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgcnVuICdnaXQtc3ZuJyBmZXRjaCBhbmQgcmViYXNlIChub3QKKwlJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBydW4gJ2dpdCBzdm4nIGZldGNoIGFuZCByZWJhc2UgKG5vdAogCXB1bGwgb3IgbWVyZ2UpIHlvdXIgY29tbWl0cyBhZ2FpbnN0IHRoZSBsYXRlc3QgY2hhbmdlcyBpbiB0aGUKIAlTVk4gcmVwb3NpdG9yeS4KLQlBbiBvcHRpb25hbCBjb21tYW5kLWxpbmUgYXJndW1lbnQgbWF5IGJlIHNwZWNpZmllZCBhcyBhbgotCWFsdGVybmF0aXZlIHRvIEhFQUQuCisJQW4gb3B0aW9uYWwgcmV2aXNpb24gb3IgYnJhbmNoIGFyZ3VtZW50IG1heSBiZSBzcGVjaWZpZWQsIGFuZAorCWNhdXNlcyAnZ2l0IHN2bicgdG8gZG8gYWxsIHdvcmsgb24gdGhhdCByZXZpc2lvbi9icmFuY2gKKwlpbnN0ZWFkIG9mIEhFQUQuCiAJVGhpcyBpcyBhZHZhbnRhZ2VvdXMgb3ZlciAnc2V0LXRyZWUnIChiZWxvdykgYmVjYXVzZSBpdCBwcm9kdWNlcwogCWNsZWFuZXIsIG1vcmUgbGluZWFyIGhpc3RvcnkuCiArCkBAIC0xNzksMTggKzIwMywxNyBAQAogCUFmdGVyIGNvbW1pdHRpbmcsIGRvIG5vdCByZWJhc2Ugb3IgcmVzZXQuCiAtLWNvbW1pdC11cmwgPFVSTD47OwogCUNvbW1pdCB0byB0aGlzIFNWTiBVUkwgKHRoZSBmdWxsIHBhdGgpLiAgVGhpcyBpcyBpbnRlbmRlZCB0bwotCWFsbG93IGV4aXN0aW5nIGdpdC1zdm4gcmVwb3NpdG9yaWVzIGNyZWF0ZWQgd2l0aCBvbmUgdHJhbnNwb3J0CisJYWxsb3cgZXhpc3RpbmcgJ2dpdCBzdm4nIHJlcG9zaXRvcmllcyBjcmVhdGVkIHdpdGggb25lIHRyYW5zcG9ydAogCW1ldGhvZCAoZS5nLiBgc3ZuOi8vYCBvciBgaHR0cDovL2AgZm9yIGFub255bW91cyByZWFkKSB0byBiZQogCXJldXNlZCBpZiBhIHVzZXIgaXMgbGF0ZXIgZ2l2ZW4gYWNjZXNzIHRvIGFuIGFsdGVybmF0ZSB0cmFuc3BvcnQKIAltZXRob2QgKGUuZy4gYHN2bitzc2g6Ly9gIG9yIGBodHRwczovL2ApIGZvciBjb21taXQuCi0KKysKK1t2ZXJzZV0KIGNvbmZpZyBrZXk6IHN2bi1yZW1vdGUuPG5hbWU+LmNvbW1pdHVybAotCiBjb25maWcga2V5OiBzdm4uY29tbWl0dXJsIChvdmVyd3JpdGVzIGFsbCBzdm4tcmVtb3RlLjxuYW1lPi5jb21taXR1cmwgb3B0aW9ucykKLQotCVVzaW5nIHRoaXMgb3B0aW9uIGZvciBhbnkgb3RoZXIgcHVycG9zZSAoZG9uJ3QgYXNrKQotCWlzIHZlcnkgc3Ryb25nbHkgZGlzY291cmFnZWQuCi0tLQorKworVXNpbmcgdGhpcyBvcHRpb24gZm9yIGFueSBvdGhlciBwdXJwb3NlIChkb24ndCBhc2spIGlzIHZlcnkgc3Ryb25nbHkKK2Rpc2NvdXJhZ2VkLgogCiAnYnJhbmNoJzo6CiAJQ3JlYXRlIGEgYnJhbmNoIGluIHRoZSBTVk4gcmVwb3NpdG9yeS4KQEAgLTIwNCw2ICsyMjcsMzMgQEAKIAlDcmVhdGUgYSB0YWcgYnkgdXNpbmcgdGhlIHRhZ3Nfc3ViZGlyIGluc3RlYWQgb2YgdGhlIGJyYW5jaGVzX3N1YmRpcgogCXNwZWNpZmllZCBkdXJpbmcgZ2l0IHN2biBpbml0LgogCistZDs7CistLWRlc3RpbmF0aW9uOzsKKwlJZiBtb3JlIHRoYW4gb25lIC0tYnJhbmNoZXMgKG9yIC0tdGFncykgb3B0aW9uIHdhcyBnaXZlbiB0byB0aGUgJ2luaXQnCisJb3IgJ2Nsb25lJyBjb21tYW5kLCB5b3UgbXVzdCBwcm92aWRlIHRoZSBsb2NhdGlvbiBvZiB0aGUgYnJhbmNoIChvcgorCXRhZykgeW91IHdpc2ggdG8gY3JlYXRlIGluIHRoZSBTVk4gcmVwb3NpdG9yeS4gIFRoZSB2YWx1ZSBvZiB0aGlzCisJb3B0aW9uIG11c3QgbWF0Y2ggb25lIG9mIHRoZSBwYXRocyBzcGVjaWZpZWQgYnkgYSAtLWJyYW5jaGVzIChvcgorCS0tdGFncykgb3B0aW9uLiAgWW91IGNhbiBzZWUgdGhlc2UgcGF0aHMgd2l0aCB0aGUgY29tbWFuZHMKKysKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCBzdm4tcmVtb3RlLjxuYW1lPi5icmFuY2hlcworCWdpdCBjb25maWcgLS1nZXQtYWxsIHN2bi1yZW1vdGUuPG5hbWU+LnRhZ3MKKysKK3doZXJlIDxuYW1lPiBpcyB0aGUgbmFtZSBvZiB0aGUgU1ZOIHJlcG9zaXRvcnkgYXMgc3BlY2lmaWVkIGJ5IHRoZSAtUiBvcHRpb24gdG8KKydpbml0JyAob3IgInN2biIgYnkgZGVmYXVsdCkuCisKKy0tdXNlcm5hbWU7OworCVNwZWNpZnkgdGhlIFNWTiB1c2VybmFtZSB0byBwZXJmb3JtIHRoZSBjb21taXQgYXMuICBUaGlzIG9wdGlvbiBvdmVycmlkZXMKKwljb25maWd1cmF0aW9uIHByb3BlcnR5ICd1c2VybmFtZScuCisKKy0tY29tbWl0LXVybDs7CisJVXNlIHRoZSBzcGVjaWZpZWQgVVJMIHRvIGNvbm5lY3QgdG8gdGhlIGRlc3RpbmF0aW9uIFN1YnZlcnNpb24KKwlyZXBvc2l0b3J5LiAgVGhpcyBpcyB1c2VmdWwgaW4gY2FzZXMgd2hlcmUgdGhlIHNvdXJjZSBTVk4KKwlyZXBvc2l0b3J5IGlzIHJlYWQtb25seS4gIFRoaXMgb3B0aW9uIG92ZXJyaWRlcyBjb25maWd1cmF0aW9uCisJcHJvcGVydHkgJ2NvbW1pdHVybCcuCisrCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgc3ZuLXJlbW90ZS48bmFtZT4uY29tbWl0dXJsCisrCisKICd0YWcnOjoKIAlDcmVhdGUgYSB0YWcgaW4gdGhlIFNWTiByZXBvc2l0b3J5LiBUaGlzIGlzIGEgc2hvcnRoYW5kIGZvcgogCSdicmFuY2ggLXQnLgpAQCAtMjE1LDEwICsyNjUsMTIgQEAKIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgZnJvbSBgc3ZuIGxvZycgYXJlIHN1cHBvcnRlZDoKICsKIC0tCistciA8bj5bOjxuPl07OwogLS1yZXZpc2lvbj08bj5bOjxuPl07OwogCWlzIHN1cHBvcnRlZCwgbm9uLW51bWVyaWMgYXJncyBhcmUgbm90OgogCUhFQUQsIE5FWFQsIEJBU0UsIFBSRVYsIGV0YyAuLi4KLS12Ly0tdmVyYm9zZTs7Cistdjs7CistLXZlcmJvc2U7OwogCWl0J3Mgbm90IGNvbXBsZXRlbHkgY29tcGF0aWJsZSB3aXRoIHRoZSAtLXZlcmJvc2UKIAlvdXRwdXQgaW4gc3ZuIGxvZywgYnV0IHJlYXNvbmFibHkgY2xvc2UuCiAtLWxpbWl0PTxuPjs7CkBAIC0yNDEsNyArMjkzLDcgQEAKIGNsaWVudCBjb252ZXJ0cyB0aGUgVVRDIHRpbWUgdG8gdGhlIGxvY2FsIHRpbWUgKG9yIGJhc2VkIG9uIHRoZSBUWj0KIGVudmlyb25tZW50KS4gVGhpcyBjb21tYW5kIGhhcyB0aGUgc2FtZSBiZWhhdmlvdXIuCiArCi1Bbnkgb3RoZXIgYXJndW1lbnRzIGFyZSBwYXNzZWQgZGlyZWN0bHkgdG8gJ2dpdC1sb2cnCitBbnkgb3RoZXIgYXJndW1lbnRzIGFyZSBwYXNzZWQgZGlyZWN0bHkgdG8gJ2dpdCBsb2cnCiAKICdibGFtZSc6OgogICAgICAgIFNob3cgd2hhdCByZXZpc2lvbiBhbmQgYXV0aG9yIGxhc3QgbW9kaWZpZWQgZWFjaCBsaW5lIG9mIGEgZmlsZS4gVGhlCkBAIC0yNDksMTUgKzMwMSwxNCBAQAogICAgICAgIGBzdm4gYmxhbWUnIGJ5IGRlZmF1bHQuIExpa2UgdGhlIFNWTiBibGFtZSBjb21tYW5kLAogICAgICAgIGxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4gdGhlIHdvcmtpbmcgY29weSBhcmUgaWdub3JlZDsKICAgICAgICB0aGUgdmVyc2lvbiBvZiB0aGUgZmlsZSBpbiB0aGUgSEVBRCByZXZpc2lvbiBpcyBhbm5vdGF0ZWQuIFVua25vd24KLSAgICAgICBhcmd1bWVudHMgYXJlIHBhc3NlZCBkaXJlY3RseSB0byAnZ2l0LWJsYW1lJy4KKyAgICAgICBhcmd1bWVudHMgYXJlIHBhc3NlZCBkaXJlY3RseSB0byAnZ2l0IGJsYW1lJy4KICsKIC0tZ2l0LWZvcm1hdDs7Ci0JUHJvZHVjZSBvdXRwdXQgaW4gdGhlIHNhbWUgZm9ybWF0IGFzICdnaXQtYmxhbWUnLCBidXQgd2l0aAorCVByb2R1Y2Ugb3V0cHV0IGluIHRoZSBzYW1lIGZvcm1hdCBhcyAnZ2l0IGJsYW1lJywgYnV0IHdpdGgKIAlTVk4gcmV2aXNpb24gbnVtYmVycyBpbnN0ZWFkIG9mIGdpdCBjb21taXQgaGFzaGVzLiBJbiB0aGlzIG1vZGUsCiAJY2hhbmdlcyB0aGF0IGhhdmVuJ3QgYmVlbiBjb21taXR0ZWQgdG8gU1ZOIChpbmNsdWRpbmcgbG9jYWwKIAl3b3JraW5nLWNvcHkgZWRpdHMpIGFyZSBzaG93biBhcyByZXZpc2lvbiAwLgogCi0tLQogJ2ZpbmQtcmV2Jzo6CiAJV2hlbiBnaXZlbiBhbiBTVk4gcmV2aXNpb24gbnVtYmVyIG9mIHRoZSBmb3JtICdyTicsIHJldHVybnMgdGhlCiAJY29ycmVzcG9uZGluZyBnaXQgY29tbWl0IGhhc2ggKHRoaXMgY2FuIG9wdGlvbmFsbHkgYmUgZm9sbG93ZWQgYnkgYQpAQCAtMjcxLDcgKzMyMiw3IEBACiAJYWJzb2x1dGVseSBubyBhdHRlbXB0cyB0byBkbyBwYXRjaGluZyB3aGVuIGNvbW1pdHRpbmcgdG8gU1ZOLCBpdAogCXNpbXBseSBvdmVyd3JpdGVzIGZpbGVzIHdpdGggdGhvc2Ugc3BlY2lmaWVkIGluIHRoZSB0cmVlIG9yCiAJY29tbWl0LiAgQWxsIG1lcmdpbmcgaXMgYXNzdW1lZCB0byBoYXZlIHRha2VuIHBsYWNlCi0JaW5kZXBlbmRlbnRseSBvZiAnZ2l0LXN2bicgZnVuY3Rpb25zLgorCWluZGVwZW5kZW50bHkgb2YgJ2dpdCBzdm4nIGZ1bmN0aW9ucy4KIAogJ2NyZWF0ZS1pZ25vcmUnOjoKIAlSZWN1cnNpdmVseSBmaW5kcyB0aGUgc3ZuOmlnbm9yZSBwcm9wZXJ0eSBvbiBkaXJlY3RvcmllcyBhbmQKQEAgLTI4NCwxNCArMzM1LDIxIEBACiAJZGlyZWN0b3JpZXMuICBUaGUgb3V0cHV0IGlzIHN1aXRhYmxlIGZvciBhcHBlbmRpbmcgdG8KIAl0aGUgJEdJVF9ESVIvaW5mby9leGNsdWRlIGZpbGUuCiAKKydta2RpcnMnOjoKKwlBdHRlbXB0cyB0byByZWNyZWF0ZSBlbXB0eSBkaXJlY3RvcmllcyB0aGF0IGNvcmUgZ2l0IGNhbm5vdCB0cmFjaworCWJhc2VkIG9uIGluZm9ybWF0aW9uIGluICRHSVRfRElSL3N2bi88cmVmbmFtZT4vdW5oYW5kbGVkLmxvZyBmaWxlcy4KKwlFbXB0eSBkaXJlY3RvcmllcyBhcmUgYXV0b21hdGljYWxseSByZWNyZWF0ZWQgd2hlbiB1c2luZworCSJnaXQgc3ZuIGNsb25lIiBhbmQgImdpdCBzdm4gcmViYXNlIiwgc28gIm1rZGlycyIgaXMgaW50ZW5kZWQKKwlmb3IgdXNlIGFmdGVyIGNvbW1hbmRzIGxpa2UgImdpdCBjaGVja291dCIgb3IgImdpdCByZXNldCIuCisKICdjb21taXQtZGlmZic6OgogCUNvbW1pdHMgdGhlIGRpZmYgb2YgdHdvIHRyZWUtaXNoIGFyZ3VtZW50cyBmcm9tIHRoZQotCWNvbW1hbmQtbGluZS4gIFRoaXMgY29tbWFuZCBkb2VzIG5vdCByZWx5IG9uIGJlaW5nIGluc2lkZSBhbiBgZ2l0LXN2bgorCWNvbW1hbmQtbGluZS4gIFRoaXMgY29tbWFuZCBkb2VzIG5vdCByZWx5IG9uIGJlaW5nIGluc2lkZSBhbiBgZ2l0IHN2bgogCWluaXRgLWVkIHJlcG9zaXRvcnkuICBUaGlzIGNvbW1hbmQgdGFrZXMgdGhyZWUgYXJndW1lbnRzLCAoYSkgdGhlCiAJb3JpZ2luYWwgdHJlZSB0byBkaWZmIGFnYWluc3QsIChiKSB0aGUgbmV3IHRyZWUgcmVzdWx0LCAoYykgdGhlCiAJVVJMIG9mIHRoZSB0YXJnZXQgU3VidmVyc2lvbiByZXBvc2l0b3J5LiAgVGhlIGZpbmFsIGFyZ3VtZW50Ci0JKFVSTCkgbWF5IGJlIG9taXR0ZWQgaWYgeW91IGFyZSB3b3JraW5nIGZyb20gYSAnZ2l0LXN2bictYXdhcmUKLQlyZXBvc2l0b3J5ICh0aGF0IGhhcyBiZWVuIGBpbml0YC1lZCB3aXRoICdnaXQtc3ZuJykuCisJKFVSTCkgbWF5IGJlIG9taXR0ZWQgaWYgeW91IGFyZSB3b3JraW5nIGZyb20gYSAnZ2l0IHN2bictYXdhcmUKKwlyZXBvc2l0b3J5ICh0aGF0IGhhcyBiZWVuIGBpbml0YC1lZCB3aXRoICdnaXQgc3ZuJykuCiAJVGhlIC1yPHJldmlzaW9uPiBvcHRpb24gaXMgcmVxdWlyZWQgZm9yIHRoaXMuCiAKICdpbmZvJzo6CkBAIC0zMTMsMTA4ICszNzEsMTcwIEBACiAJU2hvd3MgdGhlIFN1YnZlcnNpb24gZXh0ZXJuYWxzLiAgVXNlIC1yLy0tcmV2aXNpb24gdG8gc3BlY2lmeSBhCiAJc3BlY2lmaWMgcmV2aXNpb24uCiAKLS0tCisnZ2MnOjoKKwlDb21wcmVzcyAkR0lUX0RJUi9zdm4vPHJlZm5hbWU+L3VuaGFuZGxlZC5sb2cgZmlsZXMgaW4gLmdpdC9zdm4KKwlhbmQgcmVtb3ZlICRHSVRfRElSL3N2bi88cmVmbmFtZT5pbmRleCBmaWxlcyBpbiAuZ2l0L3N2bi4KKworJ3Jlc2V0Jzo6CisJVW5kb2VzIHRoZSBlZmZlY3RzIG9mICdmZXRjaCcgYmFjayB0byB0aGUgc3BlY2lmaWVkIHJldmlzaW9uLgorCVRoaXMgYWxsb3dzIHlvdSB0byByZS0nZmV0Y2gnIGFuIFNWTiByZXZpc2lvbi4gIE5vcm1hbGx5IHRoZQorCWNvbnRlbnRzIG9mIGFuIFNWTiByZXZpc2lvbiBzaG91bGQgbmV2ZXIgY2hhbmdlIGFuZCAncmVzZXQnCisJc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkuICBIb3dldmVyLCBpZiBTVk4gcGVybWlzc2lvbnMgY2hhbmdlLAorCW9yIGlmIHlvdSBhbHRlciB5b3VyIC0taWdub3JlLXBhdGhzIG9wdGlvbiwgYSAnZmV0Y2gnIG1heSBmYWlsCisJd2l0aCAibm90IGZvdW5kIGluIGNvbW1pdCIgKGZpbGUgbm90IHByZXZpb3VzbHkgdmlzaWJsZSkgb3IKKwkiY2hlY2tzdW0gbWlzbWF0Y2giIChtaXNzZWQgYSBtb2RpZmljYXRpb24pLiAgSWYgdGhlIHByb2JsZW0KKwlmaWxlIGNhbm5vdCBiZSBpZ25vcmVkIGZvcmV2ZXIgKHdpdGggLS1pZ25vcmUtcGF0aHMpIHRoZSBvbmx5CisJd2F5IHRvIHJlcGFpciB0aGUgcmVwbyBpcyB0byB1c2UgJ3Jlc2V0Jy4KKysKK09ubHkgdGhlIHJldl9tYXAgYW5kIHJlZnMvcmVtb3Rlcy9naXQtc3ZuIGFyZSBjaGFuZ2VkLiAgRm9sbG93ICdyZXNldCcKK3dpdGggYSAnZmV0Y2gnIGFuZCB0aGVuICdnaXQgcmVzZXQnIG9yICdnaXQgcmViYXNlJyB0byBtb3ZlIGxvY2FsCiticmFuY2hlcyBvbnRvIHRoZSBuZXcgdHJlZS4KKworLXIgPG4+OzsKKy0tcmV2aXNpb249PG4+OzsKKwlTcGVjaWZ5IHRoZSBtb3N0IHJlY2VudCByZXZpc2lvbiB0byBrZWVwLiAgQWxsIGxhdGVyIHJldmlzaW9ucworCWFyZSBkaXNjYXJkZWQuCistcDs7CistLXBhcmVudDs7CisJRGlzY2FyZCB0aGUgc3BlY2lmaWVkIHJldmlzaW9uIGFzIHdlbGwsIGtlZXBpbmcgdGhlIG5lYXJlc3QKKwlwYXJlbnQgaW5zdGVhZC4KK0V4YW1wbGU6OzsKK0Fzc3VtZSB5b3UgaGF2ZSBsb2NhbCBjaGFuZ2VzIGluICJtYXN0ZXIiLCBidXQgeW91IG5lZWQgdG8gcmVmZXRjaCAicjIiLgorKworLS0tLS0tLS0tLS0tCisgICAgcjEtLS1yMi0tLXIzIHJlbW90ZXMvZ2l0LXN2bgorICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgQS0tLUIgbWFzdGVyCistLS0tLS0tLS0tLS0KKysKK0ZpeCB0aGUgaWdub3JlLXBhdGhzIG9yIFNWTiBwZXJtaXNzaW9ucyBwcm9ibGVtIHRoYXQgY2F1c2VkICJyMiIgdG8KK2JlIGluY29tcGxldGUgaW4gdGhlIGZpcnN0IHBsYWNlLiAgVGhlbjoKKysKK1t2ZXJzZV0KK2dpdCBzdm4gcmVzZXQgLXIyIC1wCitnaXQgc3ZuIGZldGNoCisrCistLS0tLS0tLS0tLS0KKyAgICByMS0tLXIyJy0tcjMnIHJlbW90ZXMvZ2l0LXN2bgorICAgICAgXAorICAgICAgIHIyLS0tcjMtLS1BLS0tQiBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorKworVGhlbiBmaXh1cCAibWFzdGVyIiB3aXRoICdnaXQgcmViYXNlJy4KK0RvIE5PVCB1c2UgJ2dpdCBtZXJnZScgb3IgeW91ciBoaXN0b3J5IHdpbGwgbm90IGJlIGNvbXBhdGlibGUgd2l0aCBhCitmdXR1cmUgJ2Rjb21taXQnIQorKworW3ZlcnNlXQorZ2l0IHJlYmFzZSAtLW9udG8gcmVtb3Rlcy9naXQtc3ZuIEFeIG1hc3RlcgorKworLS0tLS0tLS0tLS0tCisgICAgcjEtLS1yMictLXIzJyByZW1vdGVzL2dpdC1zdm4KKyAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIEEnLS1CJyBtYXN0ZXIKKy0tLS0tLS0tLS0tLQogCiBPUFRJT05TCiAtLS0tLS0tCi0tLQogCiAtLXNoYXJlZFs9e2ZhbHNlfHRydWV8dW1hc2t8Z3JvdXB8YWxsfHdvcmxkfGV2ZXJ5Ym9keX1dOjoKIC0tdGVtcGxhdGU9PHRlbXBsYXRlX2RpcmVjdG9yeT46OgogCU9ubHkgdXNlZCB3aXRoIHRoZSAnaW5pdCcgY29tbWFuZC4KLQlUaGVzZSBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvICdnaXQtaW5pdCcuCisJVGhlc2UgYXJlIHBhc3NlZCBkaXJlY3RseSB0byAnZ2l0IGluaXQnLgogCiAtciA8QVJHPjo6CiAtLXJldmlzaW9uIDxBUkc+OjoKLQotVXNlZCB3aXRoIHRoZSAnZmV0Y2gnIGNvbW1hbmQuCi0KKwkgICBVc2VkIHdpdGggdGhlICdmZXRjaCcgY29tbWFuZC4KKysKIFRoaXMgYWxsb3dzIHJldmlzaW9uIHJhbmdlcyBmb3IgcGFydGlhbC9jYXV0ZXJpemVkIGhpc3RvcnkKIHRvIGJlIHN1cHBvcnRlZC4gICROVU1CRVIsICROVU1CRVIxOiROVU1CRVIyIChudW1lcmljIHJhbmdlcyksCiAkTlVNQkVSOkhFQUQsIGFuZCBCQVNFOiROVU1CRVIgYXJlIGFsbCBzdXBwb3J0ZWQuCi0KKysKIFRoaXMgY2FuIGFsbG93IHlvdSB0byBtYWtlIHBhcnRpYWwgbWlycm9ycyB3aGVuIHJ1bm5pbmcgZmV0Y2g7CiBidXQgaXMgZ2VuZXJhbGx5IG5vdCByZWNvbW1lbmRlZCBiZWNhdXNlIGhpc3Rvcnkgd2lsbCBiZSBza2lwcGVkCiBhbmQgbG9zdC4KIAogLTo6CiAtLXN0ZGluOjoKLQotT25seSB1c2VkIHdpdGggdGhlICdzZXQtdHJlZScgY29tbWFuZC4KLQorCU9ubHkgdXNlZCB3aXRoIHRoZSAnc2V0LXRyZWUnIGNvbW1hbmQuCisrCiBSZWFkIGEgbGlzdCBvZiBjb21taXRzIGZyb20gc3RkaW4gYW5kIGNvbW1pdCB0aGVtIGluIHJldmVyc2UKIG9yZGVyLiAgT25seSB0aGUgbGVhZGluZyBzaGExIGlzIHJlYWQgZnJvbSBlYWNoIGxpbmUsIHNvCi0nZ2l0LXJldi1saXN0IC0tcHJldHR5PW9uZWxpbmUnIG91dHB1dCBjYW4gYmUgdXNlZC4KKydnaXQgcmV2LWxpc3QgLS1wcmV0dHk9b25lbGluZScgb3V0cHV0IGNhbiBiZSB1c2VkLgogCiAtLXJtZGlyOjoKLQotT25seSB1c2VkIHdpdGggdGhlICdkY29tbWl0JywgJ3NldC10cmVlJyBhbmQgJ2NvbW1pdC1kaWZmJyBjb21tYW5kcy4KLQorCU9ubHkgdXNlZCB3aXRoIHRoZSAnZGNvbW1pdCcsICdzZXQtdHJlZScgYW5kICdjb21taXQtZGlmZicgY29tbWFuZHMuCisrCiBSZW1vdmUgZGlyZWN0b3JpZXMgZnJvbSB0aGUgU1ZOIHRyZWUgaWYgdGhlcmUgYXJlIG5vIGZpbGVzIGxlZnQKIGJlaGluZC4gIFNWTiBjYW4gdmVyc2lvbiBlbXB0eSBkaXJlY3RvcmllcywgYW5kIHRoZXkgYXJlIG5vdAogcmVtb3ZlZCBieSBkZWZhdWx0IGlmIHRoZXJlIGFyZSBubyBmaWxlcyBsZWZ0IGluIHRoZW0uICBnaXQKIGNhbm5vdCB2ZXJzaW9uIGVtcHR5IGRpcmVjdG9yaWVzLiAgRW5hYmxpbmcgdGhpcyBmbGFnIHdpbGwgbWFrZQogdGhlIGNvbW1pdCB0byBTVk4gYWN0IGxpa2UgZ2l0LgotCisrCitbdmVyc2VdCiBjb25maWcga2V5OiBzdm4ucm1kaXIKIAogLWU6OgogLS1lZGl0OjoKLQotT25seSB1c2VkIHdpdGggdGhlICdkY29tbWl0JywgJ3NldC10cmVlJyBhbmQgJ2NvbW1pdC1kaWZmJyBjb21tYW5kcy4KLQorCU9ubHkgdXNlZCB3aXRoIHRoZSAnZGNvbW1pdCcsICdzZXQtdHJlZScgYW5kICdjb21taXQtZGlmZicgY29tbWFuZHMuCisrCiBFZGl0IHRoZSBjb21taXQgbWVzc2FnZSBiZWZvcmUgY29tbWl0dGluZyB0byBTVk4uICBUaGlzIGlzIG9mZiBieQogZGVmYXVsdCBmb3Igb2JqZWN0cyB0aGF0IGFyZSBjb21taXRzLCBhbmQgZm9yY2VkIG9uIHdoZW4gY29tbWl0dGluZwogdHJlZSBvYmplY3RzLgotCisrCitbdmVyc2VdCiBjb25maWcga2V5OiBzdm4uZWRpdAogCiAtbDxudW0+OjoKIC0tZmluZC1jb3BpZXMtaGFyZGVyOjoKLQotT25seSB1c2VkIHdpdGggdGhlICdkY29tbWl0JywgJ3NldC10cmVlJyBhbmQgJ2NvbW1pdC1kaWZmJyBjb21tYW5kcy4KLQotVGhleSBhcmUgYm90aCBwYXNzZWQgZGlyZWN0bHkgdG8gJ2dpdC1kaWZmLXRyZWUnOyBzZWUKKwlPbmx5IHVzZWQgd2l0aCB0aGUgJ2Rjb21taXQnLCAnc2V0LXRyZWUnIGFuZCAnY29tbWl0LWRpZmYnIGNvbW1hbmRzLgorKworVGhleSBhcmUgYm90aCBwYXNzZWQgZGlyZWN0bHkgdG8gJ2dpdCBkaWZmLXRyZWUnOyBzZWUKIGxpbmtnaXQ6Z2l0LWRpZmYtdHJlZVsxXSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLQorKwogW3ZlcnNlXQogY29uZmlnIGtleTogc3ZuLmwKIGNvbmZpZyBrZXk6IHN2bi5maW5kY29waWVzaGFyZGVyCiAKIC1BPGZpbGVuYW1lPjo6CiAtLWF1dGhvcnMtZmlsZT08ZmlsZW5hbWU+OjoKLQotU3ludGF4IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgZmlsZSB1c2VkIGJ5ICdnaXQtY3ZzaW1wb3J0JzoKLQorCVN5bnRheCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGZpbGUgdXNlZCBieSAnZ2l0IGN2c2ltcG9ydCc6CisrCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAlsb2dpbm5hbWUgPSBKb2UgVXNlciA8dXNlckBleGFtcGxlLmNvbT4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JZiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQgYW5kICdnaXQtc3ZuJyBlbmNvdW50ZXJzIGFuIFNWTgotY29tbWl0dGVyIG5hbWUgdGhhdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgYXV0aG9ycy1maWxlLCAnZ2l0LXN2bicKKysKK0lmIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCBhbmQgJ2dpdCBzdm4nIGVuY291bnRlcnMgYW4gU1ZOCitjb21taXR0ZXIgbmFtZSB0aGF0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBhdXRob3JzLWZpbGUsICdnaXQgc3ZuJwogd2lsbCBhYm9ydCBvcGVyYXRpb24uIFRoZSB1c2VyIHdpbGwgdGhlbiBoYXZlIHRvIGFkZCB0aGUKLWFwcHJvcHJpYXRlIGVudHJ5LiAgUmUtcnVubmluZyB0aGUgcHJldmlvdXMgJ2dpdC1zdm4nIGNvbW1hbmQKK2FwcHJvcHJpYXRlIGVudHJ5LiAgUmUtcnVubmluZyB0aGUgcHJldmlvdXMgJ2dpdCBzdm4nIGNvbW1hbmQKIGFmdGVyIHRoZSBhdXRob3JzLWZpbGUgaXMgbW9kaWZpZWQgc2hvdWxkIGNvbnRpbnVlIG9wZXJhdGlvbi4KLQorKworW3ZlcnNlXQogY29uZmlnIGtleTogc3ZuLmF1dGhvcnNmaWxlCiAKKy0tYXV0aG9ycy1wcm9nPTxmaWxlbmFtZT46OgorCUlmIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCwgZm9yIGVhY2ggU1ZOIGNvbW1pdHRlciBuYW1lIHRoYXQKKwlkb2VzIG5vdCBleGlzdCBpbiB0aGUgYXV0aG9ycyBmaWxlLCB0aGUgZ2l2ZW4gZmlsZSBpcyBleGVjdXRlZAorCXdpdGggdGhlIGNvbW1pdHRlciBuYW1lIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4gIFRoZSBwcm9ncmFtIGlzCisJZXhwZWN0ZWQgdG8gcmV0dXJuIGEgc2luZ2xlIGxpbmUgb2YgdGhlIGZvcm0gIk5hbWUgPGVtYWlsPiIsCisJd2hpY2ggd2lsbCBiZSB0cmVhdGVkIGFzIGlmIGluY2x1ZGVkIGluIHRoZSBhdXRob3JzIGZpbGUuCisKIC1xOjoKIC0tcXVpZXQ6OgotCU1ha2UgJ2dpdC1zdm4nIGxlc3MgdmVyYm9zZS4gU3BlY2lmeSBhIHNlY29uZCB0aW1lIHRvIG1ha2UgaXQKKwlNYWtlICdnaXQgc3ZuJyBsZXNzIHZlcmJvc2UuIFNwZWNpZnkgYSBzZWNvbmQgdGltZSB0byBtYWtlIGl0CiAJZXZlbiBsZXNzIHZlcmJvc2UuCiAKIC0tcmVwYWNrWz08bj5dOjoKIC0tcmVwYWNrLWZsYWdzPTxmbGFncz46OgotCi1UaGVzZSBzaG91bGQgaGVscCBrZWVwIGRpc2sgdXNhZ2Ugc2FuZSBmb3IgbGFyZ2UgZmV0Y2hlcwotd2l0aCBtYW55IHJldmlzaW9ucy4KLQorCVRoZXNlIHNob3VsZCBoZWxwIGtlZXAgZGlzayB1c2FnZSBzYW5lIGZvciBsYXJnZSBmZXRjaGVzIHdpdGgKKwltYW55IHJldmlzaW9ucy4KKysKIC0tcmVwYWNrIHRha2VzIGFuIG9wdGlvbmFsIGFyZ3VtZW50IGZvciB0aGUgbnVtYmVyIG9mIHJldmlzaW9ucwogdG8gZmV0Y2ggYmVmb3JlIHJlcGFja2luZy4gIFRoaXMgZGVmYXVsdHMgdG8gcmVwYWNraW5nIGV2ZXJ5CiAxMDAwIGNvbW1pdHMgZmV0Y2hlZCBpZiBubyBhcmd1bWVudCBpcyBzcGVjaWZpZWQuCi0KLS0tcmVwYWNrLWZsYWdzIGFyZSBwYXNzZWQgZGlyZWN0bHkgdG8gJ2dpdC1yZXBhY2snLgotCisrCistLXJlcGFjay1mbGFncyBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvICdnaXQgcmVwYWNrJy4KKysKIFt2ZXJzZV0KIGNvbmZpZyBrZXk6IHN2bi5yZXBhY2sKIGNvbmZpZyBrZXk6IHN2bi5yZXBhY2tmbGFncwpAQCAtNDIzLDQxICs1NDMsMzYgQEAKIC0tbWVyZ2U6OgogLXM8c3RyYXRlZ3k+OjoKIC0tc3RyYXRlZ3k9PHN0cmF0ZWd5Pjo6Ci0KLVRoZXNlIGFyZSBvbmx5IHVzZWQgd2l0aCB0aGUgJ2Rjb21taXQnIGFuZCAncmViYXNlJyBjb21tYW5kcy4KLQotUGFzc2VkIGRpcmVjdGx5IHRvICdnaXQtcmViYXNlJyB3aGVuIHVzaW5nICdkY29tbWl0JyBpZiBhCi0nZ2l0LXJlc2V0JyBjYW5ub3QgYmUgdXNlZCAoc2VlICdkY29tbWl0JykuCisJVGhlc2UgYXJlIG9ubHkgdXNlZCB3aXRoIHRoZSAnZGNvbW1pdCcgYW5kICdyZWJhc2UnIGNvbW1hbmRzLgorKworUGFzc2VkIGRpcmVjdGx5IHRvICdnaXQgcmViYXNlJyB3aGVuIHVzaW5nICdkY29tbWl0JyBpZiBhCisnZ2l0IHJlc2V0JyBjYW5ub3QgYmUgdXNlZCAoc2VlICdkY29tbWl0JykuCiAKIC1uOjoKIC0tZHJ5LXJ1bjo6Ci0KLVRoaXMgY2FuIGJlIHVzZWQgd2l0aCB0aGUgJ2Rjb21taXQnLCAncmViYXNlJywgJ2JyYW5jaCcgYW5kICd0YWcnCi1jb21tYW5kcy4KLQorCVRoaXMgY2FuIGJlIHVzZWQgd2l0aCB0aGUgJ2Rjb21taXQnLCAncmViYXNlJywgJ2JyYW5jaCcgYW5kCisJJ3RhZycgY29tbWFuZHMuCisrCiBGb3IgJ2Rjb21taXQnLCBwcmludCBvdXQgdGhlIHNlcmllcyBvZiBnaXQgYXJndW1lbnRzIHRoYXQgd291bGQgc2hvdwogd2hpY2ggZGlmZnMgd291bGQgYmUgY29tbWl0dGVkIHRvIFNWTi4KLQorKwogRm9yICdyZWJhc2UnLCBkaXNwbGF5IHRoZSBsb2NhbCBicmFuY2ggYXNzb2NpYXRlZCB3aXRoIHRoZSB1cHN0cmVhbSBzdm4KIHJlcG9zaXRvcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IGJyYW5jaCBhbmQgdGhlIFVSTCBvZiBzdm4KIHJlcG9zaXRvcnkgdGhhdCB3aWxsIGJlIGZldGNoZWQgZnJvbS4KLQorKwogRm9yICdicmFuY2gnIGFuZCAndGFnJywgZGlzcGxheSB0aGUgdXJscyB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgY29weWluZyB3aGVuCiBjcmVhdGluZyB0aGUgYnJhbmNoIG9yIHRhZy4KIAotLS0KIAogQURWQU5DRUQgT1BUSU9OUwogLS0tLS0tLS0tLS0tLS0tLQotLS0KIAogLWk8R0lUX1NWTl9JRD46OgogLS1pZCA8R0lUX1NWTl9JRD46OgotCi1UaGlzIHNldHMgR0lUX1NWTl9JRCAoaW5zdGVhZCBvZiB1c2luZyB0aGUgZW52aXJvbm1lbnQpLiAgVGhpcwotYWxsb3dzIHRoZSB1c2VyIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHJlZm5hbWUgdG8gZmV0Y2ggZnJvbQotd2hlbiB0cmFja2luZyBhIHNpbmdsZSBVUkwuICBUaGUgJ2xvZycgYW5kICdkY29tbWl0JyBjb21tYW5kcwotbm8gbG9uZ2VyIHJlcXVpcmUgdGhpcyBzd2l0Y2ggYXMgYW4gYXJndW1lbnQuCisJVGhpcyBzZXRzIEdJVF9TVk5fSUQgKGluc3RlYWQgb2YgdXNpbmcgdGhlIGVudmlyb25tZW50KS4gIFRoaXMKKwlhbGxvd3MgdGhlIHVzZXIgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcmVmbmFtZSB0byBmZXRjaCBmcm9tCisJd2hlbiB0cmFja2luZyBhIHNpbmdsZSBVUkwuICBUaGUgJ2xvZycgYW5kICdkY29tbWl0JyBjb21tYW5kcworCW5vIGxvbmdlciByZXF1aXJlIHRoaXMgc3dpdGNoIGFzIGFuIGFyZ3VtZW50LgogCiAtUjxyZW1vdGUgbmFtZT46OgogLS1zdm4tcmVtb3RlIDxyZW1vdGUgbmFtZT46OgpAQCAtNDcxLDMzICs1ODYsMzAgQEAKIAlzdGFydGVkIHRyYWNraW5nIGEgYnJhbmNoIGFuZCBuZXZlciB0cmFja2VkIHRoZSB0cnVuayBpdCB3YXMKIAlkZXNjZW5kZWQgZnJvbS4gVGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgdXNlCiAJLS1uby1mb2xsb3ctcGFyZW50IHRvIGRpc2FibGUgaXQuCi0KKysKK1t2ZXJzZV0KIGNvbmZpZyBrZXk6IHN2bi5mb2xsb3dwYXJlbnQKIAotLS0KIENPTkZJRyBGSUxFLU9OTFkgT1BUSU9OUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLQogCiBzdm4ubm9NZXRhZGF0YTo6CiBzdm4tcmVtb3RlLjxuYW1lPi5ub01ldGFkYXRhOjoKLQotVGhpcyBnZXRzIHJpZCBvZiB0aGUgJ2dpdC1zdm4taWQ6JyBsaW5lcyBhdCB0aGUgZW5kIG9mIGV2ZXJ5IGNvbW1pdC4KLQotSWYgeW91IGxvc2UgeW91ciAuZ2l0L3N2bi9naXQtc3ZuLy5yZXZfZGIgZmlsZSwgJ2dpdC1zdm4nIHdpbGwgbm90CisJVGhpcyBnZXRzIHJpZCBvZiB0aGUgJ2dpdC1zdm4taWQ6JyBsaW5lcyBhdCB0aGUgZW5kIG9mIGV2ZXJ5IGNvbW1pdC4KKysKK0lmIHlvdSBsb3NlIHlvdXIgLmdpdC9zdm4vZ2l0LXN2bi8ucmV2X2RiIGZpbGUsICdnaXQgc3ZuJyB3aWxsIG5vdAogYmUgYWJsZSB0byByZWJ1aWxkIGl0IGFuZCB5b3Ugd29uJ3QgYmUgYWJsZSB0byBmZXRjaCBhZ2FpbiwKIGVpdGhlci4gIFRoaXMgaXMgZmluZSBmb3Igb25lLXNob3QgaW1wb3J0cy4KLQotVGhlICdnaXQtc3ZuIGxvZycgY29tbWFuZCB3aWxsIG5vdCB3b3JrIG9uIHJlcG9zaXRvcmllcyB1c2luZworKworVGhlICdnaXQgc3ZuIGxvZycgY29tbWFuZCB3aWxsIG5vdCB3b3JrIG9uIHJlcG9zaXRvcmllcyB1c2luZwogdGhpcywgZWl0aGVyLiAgVXNpbmcgdGhpcyBjb25mbGljdHMgd2l0aCB0aGUgJ3VzZVN2bVByb3BzJwogb3B0aW9uIGZvciAoaG9wZWZ1bGx5KSBvYnZpb3VzIHJlYXNvbnMuCiAKIHN2bi51c2VTdm1Qcm9wczo6CiBzdm4tcmVtb3RlLjxuYW1lPi51c2VTdm1Qcm9wczo6Ci0KLVRoaXMgYWxsb3dzICdnaXQtc3ZuJyB0byByZS1tYXAgcmVwb3NpdG9yeSBVUkxzIGFuZCBVVUlEcyBmcm9tCi1taXJyb3JzIGNyZWF0ZWQgdXNpbmcgU1ZOOjpNaXJyb3IgKG9yIHN2aykgZm9yIG1ldGFkYXRhLgotCisJVGhpcyBhbGxvd3MgJ2dpdCBzdm4nIHRvIHJlLW1hcCByZXBvc2l0b3J5IFVSTHMgYW5kIFVVSURzIGZyb20KKwltaXJyb3JzIGNyZWF0ZWQgdXNpbmcgU1ZOOjpNaXJyb3IgKG9yIHN2aykgZm9yIG1ldGFkYXRhLgorKwogSWYgYW4gU1ZOIHJldmlzaW9uIGhhcyBhIHByb3BlcnR5LCAic3ZtOmhlYWRyZXYiLCBpdCBpcyBsaWtlbHkKIHRoYXQgdGhlIHJldmlzaW9uIHdhcyBjcmVhdGVkIGJ5IFNWTjo6TWlycm9yIChhbHNvIHVzZWQgYnkgU1ZLKS4KIFRoZSBwcm9wZXJ0eSBjb250YWlucyBhIHJlcG9zaXRvcnkgVVVJRCBhbmQgYSByZXZpc2lvbi4gIFdlIHdhbnQKQEAgLTUxNCwyOCArNjI2LDM0IEBACiAKIHN2bi1yZW1vdGUuPG5hbWU+LnJld3JpdGVSb290OjoKIAlUaGlzIGFsbG93cyB1c2VycyB0byBjcmVhdGUgcmVwb3NpdG9yaWVzIGZyb20gYWx0ZXJuYXRlCi0JVVJMcy4gIEZvciBleGFtcGxlLCBhbiBhZG1pbmlzdHJhdG9yIGNvdWxkIHJ1biAnZ2l0LXN2bicgb24gdGhlCisJVVJMcy4gIEZvciBleGFtcGxlLCBhbiBhZG1pbmlzdHJhdG9yIGNvdWxkIHJ1biAnZ2l0IHN2bicgb24gdGhlCiAJc2VydmVyIGxvY2FsbHkgKGFjY2Vzc2luZyB2aWEgZmlsZTovLykgYnV0IHdpc2ggdG8gZGlzdHJpYnV0ZQogCXRoZSByZXBvc2l0b3J5IHdpdGggYSBwdWJsaWMgaHR0cDovLyBvciBzdm46Ly8gVVJMIGluIHRoZQogCW1ldGFkYXRhIHNvIHVzZXJzIG9mIGl0IHdpbGwgc2VlIHRoZSBwdWJsaWMgVVJMLgogCitzdm4tcmVtb3RlLjxuYW1lPi5yZXdyaXRlVVVJRDo6CisJU2ltaWxhciB0byB0aGUgdXNlU3ZtUHJvcHMgb3B0aW9uOyB0aGlzIGlzIGZvciB1c2VycyB3aG8gbmVlZAorCXRvIHJlbWFwIHRoZSBVVUlEIG1hbnVhbGx5LiBUaGlzIG1heSBiZSB1c2VmdWwgaW4gc2l0dWF0aW9ucworCXdoZXJlIHRoZSBvcmlnaW5hbCBVVUlEIGlzIG5vdCBhdmFpbGFibGUgdmlhIGVpdGhlciB1c2VTdm1Qcm9wcworCW9yIHVzZVN2bnN5bmNQcm9wcy4KKwogc3ZuLmJyb2tlblN5bWxpbmtXb3JrYXJvdW5kOjoKLVRoaXMgZGlzYWJsZXMgcG90ZW50aWFsbHkgZXhwZW5zaXZlIGNoZWNrcyB0byB3b3JrYXJvdW5kIGJyb2tlbiBzeW1saW5rcwotY2hlY2tlZCBpbnRvIFNWTiBieSBicm9rZW4gY2xpZW50cy4gIFNldCB0aGlzIG9wdGlvbiB0byAiZmFsc2UiIGlmIHlvdQotdHJhY2sgYSBTVk4gcmVwb3NpdG9yeSB3aXRoIG1hbnkgZW1wdHkgYmxvYnMgdGhhdCBhcmUgbm90IHN5bWxpbmtzLgotVGhpcyBvcHRpb24gbWF5IGJlIGNoYW5nZWQgd2hpbGUgImdpdC1zdm4iIGlzIHJ1bm5pbmcgYW5kIHRha2UgZWZmZWN0IG9uCi10aGUgbmV4dCByZXZpc2lvbiBmZXRjaGVkLiAgSWYgdW5zZXQsIGdpdC1zdm4gYXNzdW1lcyB0aGlzIG9wdGlvbiB0byBiZQotInRydWUiLgorCVRoaXMgZGlzYWJsZXMgcG90ZW50aWFsbHkgZXhwZW5zaXZlIGNoZWNrcyB0byB3b3JrYXJvdW5kCisJYnJva2VuIHN5bWxpbmtzIGNoZWNrZWQgaW50byBTVk4gYnkgYnJva2VuIGNsaWVudHMuICBTZXQgdGhpcworCW9wdGlvbiB0byAiZmFsc2UiIGlmIHlvdSB0cmFjayBhIFNWTiByZXBvc2l0b3J5IHdpdGggbWFueQorCWVtcHR5IGJsb2JzIHRoYXQgYXJlIG5vdCBzeW1saW5rcy4gIFRoaXMgb3B0aW9uIG1heSBiZSBjaGFuZ2VkCisJd2hpbGUgJ2dpdCBzdm4nIGlzIHJ1bm5pbmcgYW5kIHRha2UgZWZmZWN0IG9uIHRoZSBuZXh0CisJcmV2aXNpb24gZmV0Y2hlZC4gIElmIHVuc2V0LCAnZ2l0IHN2bicgYXNzdW1lcyB0aGlzIG9wdGlvbiB0bworCWJlICJ0cnVlIi4KIAotLS0KLQotU2luY2UgdGhlIG5vTWV0YWRhdGEsIHJld3JpdGVSb290LCB1c2VTdm5zeW5jUHJvcHMgYW5kIHVzZVN2bVByb3BzCi1vcHRpb25zIGFsbCBhZmZlY3QgdGhlIG1ldGFkYXRhIGdlbmVyYXRlZCBhbmQgdXNlZCBieSAnZ2l0LXN2bic7IHRoZXkKK1NpbmNlIHRoZSBub01ldGFkYXRhLCByZXdyaXRlUm9vdCwgcmV3cml0ZVVVSUQsIHVzZVN2bnN5bmNQcm9wcyBhbmQgdXNlU3ZtUHJvcHMKK29wdGlvbnMgYWxsIGFmZmVjdCB0aGUgbWV0YWRhdGEgZ2VuZXJhdGVkIGFuZCB1c2VkIGJ5ICdnaXQgc3ZuJzsgdGhleQogKm11c3QqIGJlIHNldCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGJlZm9yZSBhbnkgaGlzdG9yeSBpcyBpbXBvcnRlZAogYW5kIHRoZXNlIHNldHRpbmdzIHNob3VsZCBuZXZlciBiZSBjaGFuZ2VkIG9uY2UgdGhleSBhcmUgc2V0LgogCi1BZGRpdGlvbmFsbHksIG9ubHkgb25lIG9mIHRoZXNlIGZvdXIgb3B0aW9ucyBjYW4gYmUgdXNlZCBwZXItc3ZuLXJlbW90ZQotc2VjdGlvbiBiZWNhdXNlIHRoZXkgYWZmZWN0IHRoZSAnZ2l0LXN2bi1pZDonIG1ldGFkYXRhIGxpbmUuCitBZGRpdGlvbmFsbHksIG9ubHkgb25lIG9mIHRoZXNlIG9wdGlvbnMgY2FuIGJlIHVzZWQgcGVyIHN2bi1yZW1vdGUKK3NlY3Rpb24gYmVjYXVzZSB0aGV5IGFmZmVjdCB0aGUgJ2dpdC1zdm4taWQ6JyBtZXRhZGF0YSBsaW5lLCBleGNlcHQKK2ZvciByZXdyaXRlUm9vdCBhbmQgcmV3cml0ZVVVSUQgd2hpY2ggY2FuIGJlIHVzZWQgdG9nZXRoZXIuCiAKIAogQkFTSUMgRVhBTVBMRVMKQEAgLTU0OCw3ICs2NjYsNyBAQAogCWdpdCBzdm4gY2xvbmUgaHR0cDovL3N2bi5leGFtcGxlLmNvbS9wcm9qZWN0L3RydW5rCiAjIEVudGVyIHRoZSBuZXdseSBjbG9uZWQgZGlyZWN0b3J5OgogCWNkIHRydW5rCi0jIFlvdSBzaG91bGQgYmUgb24gbWFzdGVyIGJyYW5jaCwgZG91YmxlLWNoZWNrIHdpdGggZ2l0LWJyYW5jaAorIyBZb3Ugc2hvdWxkIGJlIG9uIG1hc3RlciBicmFuY2gsIGRvdWJsZS1jaGVjayB3aXRoICdnaXQgYnJhbmNoJwogCWdpdCBicmFuY2gKICMgRG8gc29tZSB3b3JrIGFuZCBjb21taXQgbG9jYWxseSB0byBnaXQ6CiAJZ2l0IGNvbW1pdCAuLi4KQEAgLTU3OSwxMiArNjk3LDEyIEBACiAjIG9mIGRjb21taXQvcmViYXNlL3Nob3ctaWdub3JlIHNob3VsZCBiZSB0aGUgc2FtZSBhcyBhYm92ZS4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGUgaW5pdGlhbCAnZ2l0LXN2biBjbG9uZScgY2FuIGJlIHF1aXRlIHRpbWUtY29uc3VtaW5nCitUaGUgaW5pdGlhbCAnZ2l0IHN2biBjbG9uZScgY2FuIGJlIHF1aXRlIHRpbWUtY29uc3VtaW5nCiAoZXNwZWNpYWxseSBmb3IgbGFyZ2UgU3VidmVyc2lvbiByZXBvc2l0b3JpZXMpLiBJZiBtdWx0aXBsZQogcGVvcGxlIChvciBvbmUgcGVyc29uIHdpdGggbXVsdGlwbGUgbWFjaGluZXMpIHdhbnQgdG8gdXNlCi0nZ2l0LXN2bicgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgc2FtZSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnksIHlvdSBjYW4KLWRvIHRoZSBpbml0aWFsICdnaXQtc3ZuIGNsb25lJyB0byBhIHJlcG9zaXRvcnkgb24gYSBzZXJ2ZXIgYW5kCi1oYXZlIGVhY2ggcGVyc29uIGNsb25lIHRoYXQgcmVwb3NpdG9yeSB3aXRoICdnaXQtY2xvbmUnOgorJ2dpdCBzdm4nIHRvIGludGVyYWN0IHdpdGggdGhlIHNhbWUgU3VidmVyc2lvbiByZXBvc2l0b3J5LCB5b3UgY2FuCitkbyB0aGUgaW5pdGlhbCAnZ2l0IHN2biBjbG9uZScgdG8gYSByZXBvc2l0b3J5IG9uIGEgc2VydmVyIGFuZAoraGF2ZSBlYWNoIHBlcnNvbiBjbG9uZSB0aGF0IHJlcG9zaXRvcnkgd2l0aCAnZ2l0IGNsb25lJzoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIERvIHRoZSBpbml0aWFsIGltcG9ydCBvbiBhIHNlcnZlcgpAQCAtNTk4LDcgKzcxNiw3IEBACiAJZ2l0IGZldGNoCiAjIENyZWF0ZSBhIGxvY2FsIGJyYW5jaCBmcm9tIG9uZSBvZiB0aGUgYnJhbmNoZXMganVzdCBmZXRjaGVkCiAJZ2l0IGNoZWNrb3V0IC1iIG1hc3RlciBGRVRDSF9IRUFECi0jIEluaXRpYWxpemUgZ2l0LXN2biBsb2NhbGx5IChiZSBzdXJlIHRvIHVzZSB0aGUgc2FtZSBVUkwgYW5kIC1ULy1iLy10IG9wdGlvbnMgYXMgd2VyZSB1c2VkIG9uIHNlcnZlcikKKyMgSW5pdGlhbGl6ZSAnZ2l0IHN2bicgbG9jYWxseSAoYmUgc3VyZSB0byB1c2UgdGhlIHNhbWUgVVJMIGFuZCAtVC8tYi8tdCBvcHRpb25zIGFzIHdlcmUgdXNlZCBvbiBzZXJ2ZXIpCiAJZ2l0IHN2biBpbml0IGh0dHA6Ly9zdm4uZXhhbXBsZS5jb20vcHJvamVjdAogIyBQdWxsIHRoZSBsYXRlc3QgY2hhbmdlcyBmcm9tIFN1YnZlcnNpb24KIAlnaXQgc3ZuIHJlYmFzZQpAQCAtNjA3LDcgKzcyNSw3IEBACiBSRUJBU0UgVlMuIFBVTEwvTUVSR0UKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1PcmlnaW5hbGx5LCAnZ2l0LXN2bicgcmVjb21tZW5kZWQgdGhhdCB0aGUgJ3JlbW90ZXMvZ2l0LXN2bicgYnJhbmNoIGJlCitPcmlnaW5hbGx5LCAnZ2l0IHN2bicgcmVjb21tZW5kZWQgdGhhdCB0aGUgJ3JlbW90ZXMvZ2l0LXN2bicgYnJhbmNoIGJlCiBwdWxsZWQgb3IgbWVyZ2VkIGZyb20uICBUaGlzIGlzIGJlY2F1c2UgdGhlIGF1dGhvciBmYXZvcmVkCiBgZ2l0IHN2biBzZXQtdHJlZSBCYCB0byBjb21taXQgYSBzaW5nbGUgaGVhZCByYXRoZXIgdGhhbiB0aGUKIGBnaXQgc3ZuIHNldC10cmVlIEEuLkJgIG5vdGF0aW9uIHRvIGNvbW1pdCBtdWx0aXBsZSBjb21taXRzLgpAQCAtNjIyLDcgKzc0MCw3IEBACiBERVNJR04gUEhJTE9TT1BIWQogLS0tLS0tLS0tLS0tLS0tLS0KIE1lcmdlIHRyYWNraW5nIGluIFN1YnZlcnNpb24gaXMgbGFja2luZyBhbmQgZG9pbmcgYnJhbmNoZWQgZGV2ZWxvcG1lbnQKLXdpdGggU3VidmVyc2lvbiBjYW4gYmUgY3VtYmVyc29tZSBhcyBhIHJlc3VsdC4gIFdoaWxlICdnaXQtc3ZuJyBjYW4gdHJhY2sKK3dpdGggU3VidmVyc2lvbiBjYW4gYmUgY3VtYmVyc29tZSBhcyBhIHJlc3VsdC4gIFdoaWxlICdnaXQgc3ZuJyBjYW4gdHJhY2sKIGNvcHkgaGlzdG9yeSAoaW5jbHVkaW5nIGJyYW5jaGVzIGFuZCB0YWdzKSBmb3IgcmVwb3NpdG9yaWVzIGFkb3B0aW5nIGEKIHN0YW5kYXJkIGxheW91dCwgaXQgY2Fubm90IHlldCByZXByZXNlbnQgbWVyZ2UgaGlzdG9yeSB0aGF0IGhhcHBlbmVkCiBpbnNpZGUgZ2l0IGJhY2sgdXBzdHJlYW0gdG8gU1ZOIHVzZXJzLiAgVGhlcmVmb3JlIGl0IGlzIGFkdmlzZWQgdGhhdApAQCAtNjMzLDI1ICs3NTEsMzUgQEAKIC0tLS0tLS0KIAogRm9yIHRoZSBzYWtlIG9mIHNpbXBsaWNpdHkgYW5kIGludGVyb3BlcmF0aW5nIHdpdGggYSBsZXNzLWNhcGFibGUgc3lzdGVtCi0oU1ZOKSwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhbGwgJ2dpdC1zdm4nIHVzZXJzIGNsb25lLCBmZXRjaCBhbmQgZGNvbW1pdAotZGlyZWN0bHkgZnJvbSB0aGUgU1ZOIHNlcnZlciwgYW5kIGF2b2lkIGFsbCAnZ2l0LWNsb25lJy8ncHVsbCcvJ21lcmdlJy8ncHVzaCcKKyhTVk4pLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IGFsbCAnZ2l0IHN2bicgdXNlcnMgY2xvbmUsIGZldGNoIGFuZCBkY29tbWl0CitkaXJlY3RseSBmcm9tIHRoZSBTVk4gc2VydmVyLCBhbmQgYXZvaWQgYWxsICdnaXQgY2xvbmUnLydwdWxsJy8nbWVyZ2UnLydwdXNoJwogb3BlcmF0aW9ucyBiZXR3ZWVuIGdpdCByZXBvc2l0b3JpZXMgYW5kIGJyYW5jaGVzLiAgVGhlIHJlY29tbWVuZGVkCiBtZXRob2Qgb2YgZXhjaGFuZ2luZyBjb2RlIGJldHdlZW4gZ2l0IGJyYW5jaGVzIGFuZCB1c2VycyBpcwotJ2dpdC1mb3JtYXQtcGF0Y2gnIGFuZCAnZ2l0LWFtJywgb3IganVzdCAnZGNvbW1pdCdpbmcgdG8gdGhlIFNWTiByZXBvc2l0b3J5LgorJ2dpdCBmb3JtYXQtcGF0Y2gnIGFuZCAnZ2l0IGFtJywgb3IganVzdCAnZGNvbW1pdCdpbmcgdG8gdGhlIFNWTiByZXBvc2l0b3J5LgogCi1SdW5uaW5nICdnaXQtbWVyZ2UnIG9yICdnaXQtcHVsbCcgaXMgTk9UIHJlY29tbWVuZGVkIG9uIGEgYnJhbmNoIHlvdQorUnVubmluZyAnZ2l0IG1lcmdlJyBvciAnZ2l0IHB1bGwnIGlzIE5PVCByZWNvbW1lbmRlZCBvbiBhIGJyYW5jaCB5b3UKIHBsYW4gdG8gJ2Rjb21taXQnIGZyb20uICBTdWJ2ZXJzaW9uIGRvZXMgbm90IHJlcHJlc2VudCBtZXJnZXMgaW4gYW55CiByZWFzb25hYmxlIG9yIHVzZWZ1bCBmYXNoaW9uOyBzbyB1c2VycyB1c2luZyBTdWJ2ZXJzaW9uIGNhbm5vdCBzZWUgYW55CiBtZXJnZXMgeW91J3ZlIG1hZGUuICBGdXJ0aGVybW9yZSwgaWYgeW91IG1lcmdlIG9yIHB1bGwgZnJvbSBhIGdpdCBicmFuY2gKIHRoYXQgaXMgYSBtaXJyb3Igb2YgYW4gU1ZOIGJyYW5jaCwgJ2Rjb21taXQnIG1heSBjb21taXQgdG8gdGhlIHdyb25nCiBicmFuY2guCiAKLSdnaXQtY2xvbmUnIGRvZXMgbm90IGNsb25lIGJyYW5jaGVzIHVuZGVyIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSBvcgotYW55ICdnaXQtc3ZuJyBtZXRhZGF0YSwgb3IgY29uZmlnLiAgU28gcmVwb3NpdG9yaWVzIGNyZWF0ZWQgYW5kIG1hbmFnZWQgd2l0aAotdXNpbmcgJ2dpdC1zdm4nIHNob3VsZCB1c2UgJ3JzeW5jJyBmb3IgY2xvbmluZywgaWYgY2xvbmluZyBpcyB0byBiZSBkb25lCitJZiB5b3UgZG8gbWVyZ2UsIG5vdGUgdGhlIGZvbGxvd2luZyBydWxlOiAnZ2l0IHN2biBkY29tbWl0JyB3aWxsCithdHRlbXB0IHRvIGNvbW1pdCBvbiB0b3Agb2YgdGhlIFNWTiBjb21taXQgbmFtZWQgaW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGxvZyAtLWdyZXA9XmdpdC1zdm4taWQ6IC0tZmlyc3QtcGFyZW50IC0xCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1lvdSAnbXVzdCcgdGhlcmVmb3JlIGVuc3VyZSB0aGF0IHRoZSBtb3N0IHJlY2VudCBjb21taXQgb2YgdGhlIGJyYW5jaAoreW91IHdhbnQgdG8gZGNvbW1pdCB0byBpcyB0aGUgJ2ZpcnN0JyBwYXJlbnQgb2YgdGhlIG1lcmdlLiAgQ2hhb3Mgd2lsbAorZW5zdWUgb3RoZXJ3aXNlLCBlc3BlY2lhbGx5IGlmIHRoZSBmaXJzdCBwYXJlbnQgaXMgYW4gb2xkZXIgY29tbWl0IG9uCit0aGUgc2FtZSBTVk4gYnJhbmNoLgorCisnZ2l0IGNsb25lJyBkb2VzIG5vdCBjbG9uZSBicmFuY2hlcyB1bmRlciB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgb3IKK2FueSAnZ2l0IHN2bicgbWV0YWRhdGEsIG9yIGNvbmZpZy4gIFNvIHJlcG9zaXRvcmllcyBjcmVhdGVkIGFuZCBtYW5hZ2VkIHdpdGgKK3VzaW5nICdnaXQgc3ZuJyBzaG91bGQgdXNlICdyc3luYycgZm9yIGNsb25pbmcsIGlmIGNsb25pbmcgaXMgdG8gYmUgZG9uZQogYXQgYWxsLgogCi1TaW5jZSAnZGNvbW1pdCcgdXNlcyByZWJhc2UgaW50ZXJuYWxseSwgYW55IGdpdCBicmFuY2hlcyB5b3UgJ2dpdC1wdXNoJyB0bworU2luY2UgJ2Rjb21taXQnIHVzZXMgcmViYXNlIGludGVybmFsbHksIGFueSBnaXQgYnJhbmNoZXMgeW91ICdnaXQgcHVzaCcgdG8KIGJlZm9yZSAnZGNvbW1pdCcgb24gd2lsbCByZXF1aXJlIGZvcmNpbmcgYW4gb3ZlcndyaXRlIG9mIHRoZSBleGlzdGluZyByZWYKIG9uIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4gIFRoaXMgaXMgZ2VuZXJhbGx5IGNvbnNpZGVyZWQgYmFkIHByYWN0aWNlLAogc2VlIHRoZSBsaW5rZ2l0OmdpdC1wdXNoWzFdIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuCkBAIC02NjEsNiArNzg5LDE2IEBACiB5b3UndmUgYWxyZWFkeSBwdXNoZWQgdG8gYSByZW1vdGUgcmVwb3NpdG9yeSBmb3Igb3RoZXIgdXNlcnMsIGFuZAogZGNvbW1pdCB3aXRoIFNWTiBpcyBhbmFsb2dvdXMgdG8gdGhhdC4KIAorV2hlbiB1c2luZyBtdWx0aXBsZSAtLWJyYW5jaGVzIG9yIC0tdGFncywgJ2dpdCBzdm4nIGRvZXMgbm90IGF1dG9tYXRpY2FsbHkKK2hhbmRsZSBuYW1lIGNvbGxpc2lvbnMgKGZvciBleGFtcGxlLCBpZiB0d28gYnJhbmNoZXMgZnJvbSBkaWZmZXJlbnQgcGF0aHMgaGF2ZQordGhlIHNhbWUgbmFtZSwgb3IgaWYgYSBicmFuY2ggYW5kIGEgdGFnIGhhdmUgdGhlIHNhbWUgbmFtZSkuICBJbiB0aGVzZSBjYXNlcywKK3VzZSAnaW5pdCcgdG8gc2V0IHVwIHlvdXIgZ2l0IHJlcG9zaXRvcnkgdGhlbiwgYmVmb3JlIHlvdXIgZmlyc3QgJ2ZldGNoJywgZWRpdAordGhlIC5naXQvY29uZmlnIGZpbGUgc28gdGhhdCB0aGUgYnJhbmNoZXMgYW5kIHRhZ3MgYXJlIGFzc29jaWF0ZWQgd2l0aAorZGlmZmVyZW50IG5hbWUgc3BhY2VzLiAgRm9yIGV4YW1wbGU6CisKKwlicmFuY2hlcyA9IHN0YWJsZS8qOnJlZnMvcmVtb3Rlcy9zdm4vc3RhYmxlLyoKKwlicmFuY2hlcyA9IGRlYnVnLyo6cmVmcy9yZW1vdGVzL3N2bi9kZWJ1Zy8qCisKIEJVR1MKIC0tLS0KIApAQCAtNjc3LDcgKzgxNSw3IEBACiBDT05GSUdVUkFUSU9OCiAtLS0tLS0tLS0tLS0tCiAKLSdnaXQtc3ZuJyBzdG9yZXMgW3N2bi1yZW1vdGVdIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaW4gdGhlCisnZ2l0IHN2bicgc3RvcmVzIFtzdm4tcmVtb3RlXSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGluIHRoZQogcmVwb3NpdG9yeSAuZ2l0L2NvbmZpZyBmaWxlLiAgSXQgaXMgc2ltaWxhciB0aGUgY29yZSBnaXQKIFtyZW1vdGVdIHNlY3Rpb25zIGV4Y2VwdCAnZmV0Y2gnIGtleXMgZG8gbm90IGFjY2VwdCBnbG9iCiBhcmd1bWVudHM7IGJ1dCB0aGV5IGFyZSBpbnN0ZWFkIGhhbmRsZWQgYnkgdGhlICdicmFuY2hlcycKQEAgLTY5OCw3ICs4MzYsMjMgQEAKIGhvd2V2ZXIgdGhlIHJlbW90ZSB3aWxkY2FyZCBtYXkgYmUgYW55d2hlcmUgYXMgbG9uZyBhcyBpdCdzIGFuCiBpbmRlcGVuZGVudCBwYXRoIGNvbXBvbmVudCAoc3Vycm91bmRlZCBieSAnLycgb3IgRU9MKS4gICBUaGlzCiB0eXBlIG9mIGNvbmZpZ3VyYXRpb24gaXMgbm90IGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSAnaW5pdCcgYW5kCi1zaG91bGQgYmUgbWFudWFsbHkgZW50ZXJlZCB3aXRoIGEgdGV4dC1lZGl0b3Igb3IgdXNpbmcgJ2dpdC1jb25maWcnLgorc2hvdWxkIGJlIG1hbnVhbGx5IGVudGVyZWQgd2l0aCBhIHRleHQtZWRpdG9yIG9yIHVzaW5nICdnaXQgY29uZmlnJy4KKworSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBmZXRjaCBhIHN1YnNldCBvZiBicmFuY2hlcyBvciB0YWdzIGJ5IHVzaW5nIGEKK2NvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG5hbWVzIHdpdGhpbiBicmFjZXMuIEZvciBleGFtcGxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tzdm4tcmVtb3RlICJodWdlLXByb2plY3QiXQorCXVybCA9IGh0dHA6Ly9zZXJ2ZXIub3JnL3N2bgorCWZldGNoID0gdHJ1bmsvc3JjOnJlZnMvcmVtb3Rlcy90cnVuaworCWJyYW5jaGVzID0gYnJhbmNoZXMve3JlZCxncmVlbn0vc3JjOnJlZnMvcmVtb3Rlcy9icmFuY2hlcy8qCisJdGFncyA9IHRhZ3MvezEuMCwyLjB9L3NyYzpyZWZzL3JlbW90ZXMvdGFncy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZSB0aGF0IGdpdC1zdm4ga2VlcHMgdHJhY2sgb2YgdGhlIGhpZ2hlc3QgcmV2aXNpb24gaW4gd2hpY2ggYSBicmFuY2gKK29yIHRhZyBoYXMgYXBwZWFyZWQuIElmIHRoZSBzdWJzZXQgb2YgYnJhbmNoZXMgb3IgdGFncyBpcyBjaGFuZ2VkIGFmdGVyCitmZXRjaGluZywgdGhlbiAuZ2l0L3N2bi8ubWV0YWRhdGEgbXVzdCBiZSBtYW51YWxseSBlZGl0ZWQgdG8gcmVtb3ZlIChvcgorcmVzZXQpIGJyYW5jaGVzLW1heFJldiBhbmQvb3IgdGFncy1tYXhSZXYgYXMgYXBwcm9wcmlhdGUuCiAKIFNFRSBBTFNPCiAtLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc3ltYm9saWMtcmVmLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN5bWJvbGljLXJlZi50eHQKaW5kZXggNjM5MjUzOC4uMzNhMTUzNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc3ltYm9saWMtcmVmLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zeW1ib2xpYy1yZWYudHh0CkBAIC00OSw3ICs0OSw3IEBACiBhZHZlcnRpc2VkIChob3Jyb3JzKS4gIFRoZXJlZm9yZSBzeW1ib2xpYyBsaW5rcyBhcmUgbm93IGRlcHJlY2F0ZWQKIGFuZCBzeW1ib2xpYyByZWZzIGFyZSB1c2VkIGJ5IGRlZmF1bHQuCiAKLSdnaXQtc3ltYm9saWMtcmVmJyB3aWxsIGV4aXQgd2l0aCBzdGF0dXMgMCBpZiB0aGUgY29udGVudHMgb2YgdGhlCisnZ2l0IHN5bWJvbGljLXJlZicgd2lsbCBleGl0IHdpdGggc3RhdHVzIDAgaWYgdGhlIGNvbnRlbnRzIG9mIHRoZQogc3ltYm9saWMgcmVmIHdlcmUgcHJpbnRlZCBjb3JyZWN0bHksIHdpdGggc3RhdHVzIDEgaWYgdGhlIHJlcXVlc3RlZAogbmFtZSBpcyBub3QgYSBzeW1ib2xpYyByZWYsIG9yIDEyOCBpZiBhbm90aGVyIGVycm9yIG9jY3Vycy4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdGFnLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXRhZy50eHQKaW5kZXggZmE3MzMyMS4uMzFjNzhhOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtdGFnLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC10YWcudHh0CkBAIC0xMCwxNCArMTAsMTUgQEAKIC0tLS0tLS0tCiBbdmVyc2VdCiAnZ2l0IHRhZycgWy1hIHwgLXMgfCAtdSA8a2V5LWlkPl0gWy1mXSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT5dCi0JPG5hbWU+IFs8Y29tbWl0PiB8IDxvYmplY3Q+XQotJ2dpdCB0YWcnIC1kIDxuYW1lPi4uLgorCTx0YWduYW1lPiBbPGNvbW1pdD4gfCA8b2JqZWN0Pl0KKydnaXQgdGFnJyAtZCA8dGFnbmFtZT4uLi4KICdnaXQgdGFnJyBbLW5bPG51bT5dXSAtbCBbLS1jb250YWlucyA8Y29tbWl0Pl0gWzxwYXR0ZXJuPl0KLSdnaXQgdGFnJyAtdiA8bmFtZT4uLi4KKydnaXQgdGFnJyAtdiA8dGFnbmFtZT4uLi4KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCi1BZGRzIGEgJ3RhZycgcmVmZXJlbmNlIGluIGAuZ2l0L3JlZnMvdGFncy9gCisKK0FkZHMgYSB0YWcgcmVmZXJlbmNlIGluIGAuZ2l0L3JlZnMvdGFncy9gLgogCiBVbmxlc3MgYC1mYCBpcyBnaXZlbiwgdGhlIHRhZyBtdXN0IG5vdCB5ZXQgZXhpc3QgaW4KIGAuZ2l0L3JlZnMvdGFncy9gIGRpcmVjdG9yeS4KQEAgLTUwLDYgKzUxLDcgQEAKIAlNYWtlIGEgR1BHLXNpZ25lZCB0YWcsIHVzaW5nIHRoZSBnaXZlbiBrZXkKIAogLWY6OgorLS1mb3JjZTo6CiAJUmVwbGFjZSBhbiBleGlzdGluZyB0YWcgd2l0aCB0aGUgZ2l2ZW4gbmFtZSAoaW5zdGVhZCBvZiBmYWlsaW5nKQogCiAtZDo6CkBAIC04NSw5ICs4NywxNSBAQAogCUltcGxpZXMgYC1hYCBpZiBub25lIG9mIGAtYWAsIGAtc2AsIG9yIGAtdSA8a2V5LWlkPmAKIAlpcyBnaXZlbi4KIAorPHRhZ25hbWU+OjoKKwlUaGUgbmFtZSBvZiB0aGUgdGFnIHRvIGNyZWF0ZSwgZGVsZXRlLCBvciBkZXNjcmliZS4KKwlUaGUgbmV3IHRhZyBuYW1lIG11c3QgcGFzcyBhbGwgY2hlY2tzIGRlZmluZWQgYnkKKwlsaW5rZ2l0OmdpdC1jaGVjay1yZWYtZm9ybWF0WzFdLiAgU29tZSBvZiB0aGVzZSBjaGVja3MKKwltYXkgcmVzdHJpY3QgdGhlIGNoYXJhY3RlcnMgYWxsb3dlZCBpbiBhIHRhZyBuYW1lLgorCiBDT05GSUdVUkFUSU9OCiAtLS0tLS0tLS0tLS0tCi1CeSBkZWZhdWx0LCAnZ2l0LXRhZycgaW4gc2lnbi13aXRoLWRlZmF1bHQgbW9kZSAoLXMpIHdpbGwgdXNlIHlvdXIKK0J5IGRlZmF1bHQsICdnaXQgdGFnJyBpbiBzaWduLXdpdGgtZGVmYXVsdCBtb2RlICgtcykgd2lsbCB1c2UgeW91cgogY29tbWl0dGVyIGlkZW50aXR5IChvZiB0aGUgZm9ybSAiWW91ciBOYW1lIDx5b3VyQGVtYWlsLmFkZHJlc3M+IikgdG8KIGZpbmQgYSBrZXkuICBJZiB5b3Ugd2FudCB0byB1c2UgYSBkaWZmZXJlbnQgZGVmYXVsdCBrZXksIHlvdSBjYW4gc3BlY2lmeQogaXQgaW4gdGhlIHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiBhcyBmb2xsb3dzOgpAQCAtMTIzLDEyICsxMzEsMTIgQEAKIAogLiBUaGUgaW5zYW5lIHRoaW5nLgogWW91IHJlYWxseSB3YW50IHRvIGNhbGwgdGhlIG5ldyB2ZXJzaW9uICJYIiB0b28sICdldmVuIHRob3VnaCcKLW90aGVycyBoYXZlIGFscmVhZHkgc2VlbiB0aGUgb2xkIG9uZS4gU28ganVzdCB1c2UgJ2dpdC10YWcgLWYnCitvdGhlcnMgaGF2ZSBhbHJlYWR5IHNlZW4gdGhlIG9sZCBvbmUuIFNvIGp1c3QgdXNlICdnaXQgdGFnIC1mJwogYWdhaW4sIGFzIGlmIHlvdSBoYWRuJ3QgYWxyZWFkeSBwdWJsaXNoZWQgdGhlIG9sZCBvbmUuCiAKIEhvd2V2ZXIsIEdpdCBkb2VzICpub3QqIChhbmQgaXQgc2hvdWxkIG5vdCkgY2hhbmdlIHRhZ3MgYmVoaW5kCiB1c2VycyBiYWNrLiBTbyBpZiBzb21lYm9keSBhbHJlYWR5IGdvdCB0aGUgb2xkIHRhZywgZG9pbmcgYQotJ2dpdC1wdWxsJyBvbiB5b3VyIHRyZWUgc2hvdWxkbid0IGp1c3QgbWFrZSB0aGVtIG92ZXJ3cml0ZSB0aGUgb2xkCisnZ2l0IHB1bGwnIG9uIHlvdXIgdHJlZSBzaG91bGRuJ3QganVzdCBtYWtlIHRoZW0gb3ZlcndyaXRlIHRoZSBvbGQKIG9uZS4KIAogSWYgc29tZWJvZHkgZ290IGEgcmVsZWFzZSB0YWcgZnJvbSB5b3UsIHlvdSBjYW5ub3QganVzdCBjaGFuZ2UKQEAgLTE4Miw3ICsxOTAsNyBAQAogCiBZb3Ugd291bGQgbm90aWNlICJwbGVhc2UgcHVsbCIgbWVzc2FnZXMgb24gdGhlIG1haWxpbmcgbGlzdCBzYXlzCiByZXBvIFVSTCBhbmQgYnJhbmNoIG5hbWUgYWxvbmUuICBUaGlzIGlzIGRlc2lnbmVkIHRvIGJlIGVhc2lseQotY3V0JnBhc3RlZCB0byBhICdnaXQtZmV0Y2gnIGNvbW1hbmQgbGluZToKK2N1dCZwYXN0ZWQgdG8gYSAnZ2l0IGZldGNoJyBjb21tYW5kIGxpbmU6CiAKIC0tLS0tLS0tLS0tLQogTGludXMsIHBsZWFzZSBwdWxsIGZyb20KQEAgLTI0OSw2ICsyNTcsMTAgQEAKIC0tLS0tLS0tLS0tLQogCiAKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtY2hlY2stcmVmLWZvcm1hdFsxXS4KKwogQXV0aG9yCiAtLS0tLS0KIFdyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPiwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXRhci10cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXRhci10cmVlLnR4dAppbmRleCBhNWQ5NTU4Li4zYzc4NmJkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC10YXItdHJlZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdGFyLXRyZWUudHh0CkBAIC0xMiwxOSArMTIsMTkgQEAKIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCi1USElTIENPTU1BTkQgSVMgREVQUkVDQVRFRC4gIFVzZSAnZ2l0LWFyY2hpdmUnIHdpdGggYC0tZm9ybWF0PXRhcmAKK1RISVMgQ09NTUFORCBJUyBERVBSRUNBVEVELiAgVXNlICdnaXQgYXJjaGl2ZScgd2l0aCBgLS1mb3JtYXQ9dGFyYAogb3B0aW9uIGluc3RlYWQgKGFuZCBtb3ZlIHRoZSA8YmFzZT4gYXJndW1lbnQgdG8gYC0tcHJlZml4PWJhc2UvYCkuCiAKIENyZWF0ZXMgYSB0YXIgYXJjaGl2ZSBjb250YWluaW5nIHRoZSB0cmVlIHN0cnVjdHVyZSBmb3IgdGhlIG5hbWVkIHRyZWUuCiBXaGVuIDxiYXNlPiBpcyBzcGVjaWZpZWQgaXQgaXMgYWRkZWQgYXMgYSBsZWFkaW5nIHBhdGggdG8gdGhlIGZpbGVzIGluIHRoZQogZ2VuZXJhdGVkIHRhciBhcmNoaXZlLgogCi0nZ2l0LXRhci10cmVlJyBiZWhhdmVzIGRpZmZlcmVudGx5IHdoZW4gZ2l2ZW4gYSB0cmVlIElEIHZlcnN1cyB3aGVuIGdpdmVuCisnZ2l0IHRhci10cmVlJyBiZWhhdmVzIGRpZmZlcmVudGx5IHdoZW4gZ2l2ZW4gYSB0cmVlIElEIHZlcnN1cyB3aGVuIGdpdmVuCiBhIGNvbW1pdCBJRCBvciB0YWcgSUQuICBJbiB0aGUgZmlyc3QgY2FzZSB0aGUgY3VycmVudCB0aW1lIGlzIHVzZWQgYXMKIG1vZGlmaWNhdGlvbiB0aW1lIG9mIGVhY2ggZmlsZSBpbiB0aGUgYXJjaGl2ZS4gIEluIHRoZSBsYXR0ZXIgY2FzZSB0aGUKIGNvbW1pdCB0aW1lIGFzIHJlY29yZGVkIGluIHRoZSByZWZlcmVuY2VkIGNvbW1pdCBvYmplY3QgaXMgdXNlZCBpbnN0ZWFkLgogQWRkaXRpb25hbGx5IHRoZSBjb21taXQgSUQgaXMgc3RvcmVkIGluIGEgZ2xvYmFsIGV4dGVuZGVkIHBheCBoZWFkZXIuCi1JdCBjYW4gYmUgZXh0cmFjdGVkIHVzaW5nICdnaXQtZ2V0LXRhci1jb21taXQtaWQnLgorSXQgY2FuIGJlIGV4dHJhY3RlZCB1c2luZyAnZ2l0IGdldC10YXItY29tbWl0LWlkJy4KIAogT1BUSU9OUwogLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLWluZGV4LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1pbmRleC50eHQKaW5kZXggMjVlMGJiZS4uNjhkYzE4NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLWluZGV4LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtaW5kZXgudHh0CkBAIC0xNSw2ICsxNSw3IEBACiAJICAgICBbLS1jYWNoZWluZm8gPG1vZGU+IDxvYmplY3Q+IDxmaWxlPl1cKgogCSAgICAgWy0tY2htb2Q9KCt8LSl4XQogCSAgICAgWy0tYXNzdW1lLXVuY2hhbmdlZCB8IC0tbm8tYXNzdW1lLXVuY2hhbmdlZF0KKwkgICAgIFstLXNraXAtd29ya3RyZWUgfCAtLW5vLXNraXAtd29ya3RyZWVdCiAJICAgICBbLS1pZ25vcmUtc3VibW9kdWxlc10KIAkgICAgIFstLXJlYWxseS1yZWZyZXNoXSBbLS11bnJlc29sdmVdIFstLWFnYWluIHwgLWddCiAJICAgICBbLS1pbmZvLW9ubHldIFstLWluZGV4LWluZm9dCkBAIC0zMSw3ICszMiw3IEBACiBTZWUgYWxzbyBsaW5rZ2l0OmdpdC1hZGRbMV0gZm9yIGEgbW9yZSB1c2VyLWZyaWVuZGx5IHdheSB0byBkbyBzb21lIG9mCiB0aGUgbW9zdCBjb21tb24gb3BlcmF0aW9ucyBvbiB0aGUgaW5kZXguCiAKLVRoZSB3YXkgJ2dpdC11cGRhdGUtaW5kZXgnIGhhbmRsZXMgZmlsZXMgaXQgaXMgdG9sZCBhYm91dCBjYW4gYmUgbW9kaWZpZWQKK1RoZSB3YXkgJ2dpdCB1cGRhdGUtaW5kZXgnIGhhbmRsZXMgZmlsZXMgaXQgaXMgdG9sZCBhYm91dCBjYW4gYmUgbW9kaWZpZWQKIHVzaW5nIHRoZSB2YXJpb3VzIG9wdGlvbnM6CiAKIE9QVElPTlMKQEAgLTUzLDcgKzU0LDcgQEAKIC1xOjoKICAgICAgICAgUXVpZXQuICBJZiAtLXJlZnJlc2ggZmluZHMgdGhhdCB0aGUgaW5kZXggbmVlZHMgYW4gdXBkYXRlLCB0aGUKICAgICAgICAgZGVmYXVsdCBiZWhhdmlvciBpcyB0byBlcnJvciBvdXQuICBUaGlzIG9wdGlvbiBtYWtlcwotCSdnaXQtdXBkYXRlLWluZGV4JyBjb250aW51ZSBhbnl3YXkuCisJJ2dpdCB1cGRhdGUtaW5kZXgnIGNvbnRpbnVlIGFueXdheS4KIAogLS1pZ25vcmUtc3VibW9kdWxlczo6CiAJRG8gbm90IHRyeSB0byB1cGRhdGUgc3VibW9kdWxlcy4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgcmVzcGVjdGVkCkBAIC02MSw3ICs2Miw3IEBACiAKIC0tdW5tZXJnZWQ6OgogICAgICAgICBJZiAtLXJlZnJlc2ggZmluZHMgdW5tZXJnZWQgY2hhbmdlcyBpbiB0aGUgaW5kZXgsIHRoZSBkZWZhdWx0Ci0JYmVoYXZpb3IgaXMgdG8gZXJyb3Igb3V0LiAgVGhpcyBvcHRpb24gbWFrZXMgJ2dpdC11cGRhdGUtaW5kZXgnCisJYmVoYXZpb3IgaXMgdG8gZXJyb3Igb3V0LiAgVGhpcyBvcHRpb24gbWFrZXMgJ2dpdCB1cGRhdGUtaW5kZXgnCiAgICAgICAgIGNvbnRpbnVlIGFueXdheS4KIAogLS1pZ25vcmUtbWlzc2luZzo6CkBAIC05OSw5ICsxMDAsMjAgQEAKIHRodXMsIGluIGNhc2UgdGhlIGFzc3VtZWQtdW50cmFja2VkIGZpbGUgaXMgY2hhbmdlZCB1cHN0cmVhbSwKIHlvdSB3aWxsIG5lZWQgdG8gaGFuZGxlIHRoZSBzaXR1YXRpb24gbWFudWFsbHkuCiAKKy0tcmVhbGx5LXJlZnJlc2g6OgorCUxpa2UgJy0tcmVmcmVzaCcsIGJ1dCBjaGVja3Mgc3RhdCBpbmZvcm1hdGlvbiB1bmNvbmRpdGlvbmFsbHksCisJd2l0aG91dCByZWdhcmQgdG8gdGhlICJhc3N1bWUgdW5jaGFuZ2VkIiBzZXR0aW5nLgorCistLXNraXAtd29ya3RyZWU6OgorLS1uby1za2lwLXdvcmt0cmVlOjoKKwlXaGVuIG9uZSBvZiB0aGVzZSBmbGFncyBpcyBzcGVjaWZpZWQsIHRoZSBvYmplY3QgbmFtZSByZWNvcmRlZAorCWZvciB0aGUgcGF0aHMgYXJlIG5vdCB1cGRhdGVkLiBJbnN0ZWFkLCB0aGVzZSBvcHRpb25zCisJc2V0IGFuZCB1bnNldCB0aGUgInNraXAtd29ya3RyZWUiIGJpdCBmb3IgdGhlIHBhdGhzLiBTZWUKKwlzZWN0aW9uICJTa2lwLXdvcmt0cmVlIGJpdCIgYmVsb3cgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKIC1nOjoKIC0tYWdhaW46OgotCVJ1bnMgJ2dpdC11cGRhdGUtaW5kZXgnIGl0c2VsZiBvbiB0aGUgcGF0aHMgd2hvc2UgaW5kZXgKKwlSdW5zICdnaXQgdXBkYXRlLWluZGV4JyBpdHNlbGYgb24gdGhlIHBhdGhzIHdob3NlIGluZGV4CiAJZW50cmllcyBhcmUgZGlmZmVyZW50IGZyb20gdGhvc2UgZnJvbSB0aGUgYEhFQURgIGNvbW1pdC4KIAogLS11bnJlc29sdmU6OgpAQCAtMTE5LDcgKzEzMSw3IEBACiAKIC0tcmVwbGFjZTo6CiAJQnkgZGVmYXVsdCwgd2hlbiBhIGZpbGUgYHBhdGhgIGV4aXN0cyBpbiB0aGUgaW5kZXgsCi0JJ2dpdC11cGRhdGUtaW5kZXgnIHJlZnVzZXMgYW4gYXR0ZW1wdCB0byBhZGQgYHBhdGgvZmlsZWAuCisJJ2dpdCB1cGRhdGUtaW5kZXgnIHJlZnVzZXMgYW4gYXR0ZW1wdCB0byBhZGQgYHBhdGgvZmlsZWAuCiAJU2ltaWxhcmx5IGlmIGEgZmlsZSBgcGF0aC9maWxlYCBleGlzdHMsIGEgZmlsZSBgcGF0aGAKIAljYW5ub3QgYmUgYWRkZWQuICBXaXRoIC0tcmVwbGFjZSBmbGFnLCBleGlzdGluZyBlbnRyaWVzCiAJdGhhdCBjb25mbGljdCB3aXRoIHRoZSBlbnRyeSBiZWluZyBhZGRlZCBhcmUKQEAgLTE1NSw3ICsxNjcsNyBAQAogY2FuIHJlZnJlc2ggdGhlIGluZGV4IGZvciBhIGZpbGUgdGhhdCBoYXNuJ3QgYmVlbiBjaGFuZ2VkIGJ1dCB3aGVyZQogdGhlIHN0YXQgZW50cnkgaXMgb3V0IG9mIGRhdGUuCiAKLUZvciBleGFtcGxlLCB5b3UnZCB3YW50IHRvIGRvIHRoaXMgYWZ0ZXIgZG9pbmcgYSAnZ2l0LXJlYWQtdHJlZScsIHRvIGxpbmsKK0ZvciBleGFtcGxlLCB5b3UnZCB3YW50IHRvIGRvIHRoaXMgYWZ0ZXIgZG9pbmcgYSAnZ2l0IHJlYWQtdHJlZScsIHRvIGxpbmsKIHVwIHRoZSBzdGF0IGluZGV4IGRldGFpbHMgd2l0aCB0aGUgcHJvcGVyIGZpbGVzLgogCiBVc2luZyAtLWNhY2hlaW5mbyBvciAtLWluZm8tb25seQpAQCAtMTk2LDEzICsyMDgsMTMgQEAKIAogICAgIC4gbW9kZSBTUCB0eXBlIFNQIHNoYTEgICAgICAgICAgVEFCIHBhdGgKICsKLVRoZSBzZWNvbmQgZm9ybWF0IGlzIHRvIHN0dWZmICdnaXQtbHMtdHJlZScgb3V0cHV0CitUaGUgc2Vjb25kIGZvcm1hdCBpcyB0byBzdHVmZiAnZ2l0IGxzLXRyZWUnIG91dHB1dAogaW50byB0aGUgaW5kZXggZmlsZS4KIAogICAgIC4gbW9kZSAgICAgICAgIFNQIHNoYTEgU1Agc3RhZ2UgVEFCIHBhdGgKICsKIFRoaXMgZm9ybWF0IGlzIHRvIHB1dCBoaWdoZXIgb3JkZXIgc3RhZ2VzIGludG8gdGhlCi1pbmRleCBmaWxlIGFuZCBtYXRjaGVzICdnaXQtbHMtZmlsZXMgLS1zdGFnZScgb3V0cHV0LgoraW5kZXggZmlsZSBhbmQgbWF0Y2hlcyAnZ2l0IGxzLWZpbGVzIC0tc3RhZ2UnIG91dHB1dC4KIAogVG8gcGxhY2UgYSBoaWdoZXIgc3RhZ2UgZW50cnkgdG8gdGhlIGluZGV4LCB0aGUgcGF0aCBzaG91bGQKIGZpcnN0IGJlIHJlbW92ZWQgYnkgZmVlZGluZyBhIG1vZGU9MCBlbnRyeSBmb3IgdGhlIHBhdGgsIGFuZApAQCAtMjU5LDggKzI3MSw4IEBACiBUaGUgY29tbWFuZCBsb29rcyBhdCBgY29yZS5pZ25vcmVzdGF0YCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLiAgV2hlbgogdGhpcyBpcyB0cnVlLCBwYXRocyB1cGRhdGVkIHdpdGggYGdpdCB1cGRhdGUtaW5kZXggcGF0aHMuLi5gIGFuZAogcGF0aHMgdXBkYXRlZCB3aXRoIG90aGVyIGdpdCBjb21tYW5kcyB0aGF0IHVwZGF0ZSBib3RoIGluZGV4IGFuZAotd29ya2luZyB0cmVlIChlLmcuICdnaXQtYXBwbHkgLS1pbmRleCcsICdnaXQtY2hlY2tvdXQtaW5kZXggLXUnLAotYW5kICdnaXQtcmVhZC10cmVlIC11JykgYXJlIGF1dG9tYXRpY2FsbHkgbWFya2VkIGFzICJhc3N1bWUKK3dvcmtpbmcgdHJlZSAoZS5nLiAnZ2l0IGFwcGx5IC0taW5kZXgnLCAnZ2l0IGNoZWNrb3V0LWluZGV4IC11JywKK2FuZCAnZ2l0IHJlYWQtdHJlZSAtdScpIGFyZSBhdXRvbWF0aWNhbGx5IG1hcmtlZCBhcyAiYXNzdW1lCiB1bmNoYW5nZWQiLiAgTm90ZSB0aGF0ICJhc3N1bWUgdW5jaGFuZ2VkIiBiaXQgaXMgKm5vdCogc2V0IGlmCiBgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2hgIGZpbmRzIHRoZSB3b3JraW5nIHRyZWUgZmlsZSBtYXRjaGVzCiB0aGUgaW5kZXggKHVzZSBgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlYWxseS1yZWZyZXNoYCBpZiB5b3Ugd2FudApAQCAtMzA0LDE2ICszMTYsMzcgQEAKIDw5PiBub3cgaXQgY2hlY2tzIHdpdGggbHN0YXQoMikgYW5kIGZpbmRzIGl0IGhhcyBiZWVuIGNoYW5nZWQuCiAKIAorU2tpcC13b3JrdHJlZSBiaXQKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1NraXAtd29ya3RyZWUgYml0IGNhbiBiZSBkZWZpbmVkIGluIG9uZSAobG9uZykgc2VudGVuY2U6IFdoZW4gcmVhZGluZworYW4gZW50cnksIGlmIGl0IGlzIG1hcmtlZCBhcyBza2lwLXdvcmt0cmVlLCB0aGVuIEdpdCBwcmV0ZW5kcyBpdHMKK3dvcmtpbmcgZGlyZWN0b3J5IHZlcnNpb24gaXMgdXAgdG8gZGF0ZSBhbmQgcmVhZCB0aGUgaW5kZXggdmVyc2lvbgoraW5zdGVhZC4KKworVG8gZWxhYm9yYXRlLCAicmVhZGluZyIgbWVhbnMgY2hlY2tpbmcgZm9yIGZpbGUgZXhpc3RlbmNlLCByZWFkaW5nCitmaWxlIGF0dHJpYnV0ZXMgb3IgZmlsZSBjb250ZW50LiBUaGUgd29ya2luZyBkaXJlY3RvcnkgdmVyc2lvbiBtYXkgYmUKK3ByZXNlbnQgb3IgYWJzZW50LiBJZiBwcmVzZW50LCBpdHMgY29udGVudCBtYXkgbWF0Y2ggYWdhaW5zdCB0aGUgaW5kZXgKK3ZlcnNpb24gb3Igbm90LiBXcml0aW5nIGlzIG5vdCBhZmZlY3RlZCBieSB0aGlzIGJpdCwgY29udGVudCBzYWZldHkKK2lzIHN0aWxsIGZpcnN0IHByaW9yaXR5LiBOb3RlIHRoYXQgR2l0IF9jYW5fIHVwZGF0ZSB3b3JraW5nIGRpcmVjdG9yeQorZmlsZSwgdGhhdCBpcyBtYXJrZWQgc2tpcC13b3JrdHJlZSwgaWYgaXQgaXMgc2FmZSB0byBkbyBzbyAoaS5lLgord29ya2luZyBkaXJlY3RvcnkgdmVyc2lvbiBtYXRjaGVzIGluZGV4IHZlcnNpb24pCisKK0FsdGhvdWdoIHRoaXMgYml0IGxvb2tzIHNpbWlsYXIgdG8gYXNzdW1lLXVuY2hhbmdlZCBiaXQsIGl0cyBnb2FsIGlzCitkaWZmZXJlbnQgZnJvbSBhc3N1bWUtdW5jaGFuZ2VkIGJpdCdzLiBTa2lwLXdvcmt0cmVlIGFsc28gdGFrZXMKK3ByZWNlZGVuY2Ugb3ZlciBhc3N1bWUtdW5jaGFuZ2VkIGJpdCB3aGVuIGJvdGggYXJlIHNldC4KKworCiBDb25maWd1cmF0aW9uCiAtLS0tLS0tLS0tLS0tCiAKIFRoZSBjb21tYW5kIGhvbm9ycyBgY29yZS5maWxlbW9kZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gIElmCi15b3VyIHJlcG9zaXRvcnkgaXMgb24gYW4gZmlsZXN5c3RlbSB3aG9zZSBleGVjdXRhYmxlIGJpdHMgYXJlCit5b3VyIHJlcG9zaXRvcnkgaXMgb24gYSBmaWxlc3lzdGVtIHdob3NlIGV4ZWN1dGFibGUgYml0cyBhcmUKIHVucmVsaWFibGUsIHRoaXMgc2hvdWxkIGJlIHNldCB0byAnZmFsc2UnIChzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4KIFRoaXMgY2F1c2VzIHRoZSBjb21tYW5kIHRvIGlnbm9yZSBkaWZmZXJlbmNlcyBpbiBmaWxlIG1vZGVzIHJlY29yZGVkCiBpbiB0aGUgaW5kZXggYW5kIHRoZSBmaWxlIG1vZGUgb24gdGhlIGZpbGVzeXN0ZW0gaWYgdGhleSBkaWZmZXIgb25seSBvbgogZXhlY3V0YWJsZSBiaXQuICAgT24gc3VjaCBhbiB1bmZvcnR1bmF0ZSBmaWxlc3lzdGVtLCB5b3UgbWF5Ci1uZWVkIHRvIHVzZSAnZ2l0LXVwZGF0ZS1pbmRleCAtLWNobW9kPScuCituZWVkIHRvIHVzZSAnZ2l0IHVwZGF0ZS1pbmRleCAtLWNobW9kPScuCiAKIFF1aXRlIHNpbWlsYXJseSwgaWYgYGNvcmUuc3ltbGlua3NgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgc2V0CiB0byAnZmFsc2UnIChzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKSwgc3ltYm9saWMgbGlua3MgYXJlIGNoZWNrZWQgb3V0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC11cGxvYWQtYXJjaGl2ZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGxvYWQtYXJjaGl2ZS50eHQKaW5kZXggYmJkNzYxNy4uZjVmMmIzOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtdXBsb2FkLWFyY2hpdmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXVwbG9hZC1hcmNoaXZlLnR4dApAQCAtMTIsMTEgKzEyLDExIEBACiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQotSW52b2tlZCBieSAnZ2l0LWFyY2hpdmUgLS1yZW1vdGUnIGFuZCBzZW5kcyBhIGdlbmVyYXRlZCBhcmNoaXZlIHRvIHRoZQorSW52b2tlZCBieSAnZ2l0IGFyY2hpdmUgLS1yZW1vdGUnIGFuZCBzZW5kcyBhIGdlbmVyYXRlZCBhcmNoaXZlIHRvIHRoZQogb3RoZXIgZW5kIG92ZXIgdGhlIGdpdCBwcm90b2NvbC4KIAogVGhpcyBjb21tYW5kIGlzIHVzdWFsbHkgbm90IGludm9rZWQgZGlyZWN0bHkgYnkgdGhlIGVuZCB1c2VyLiAgVGhlIFVJCi1mb3IgdGhlIHByb3RvY29sIGlzIG9uIHRoZSAnZ2l0LWFyY2hpdmUnIHNpZGUsIGFuZCB0aGUgcHJvZ3JhbSBwYWlyCitmb3IgdGhlIHByb3RvY29sIGlzIG9uIHRoZSAnZ2l0IGFyY2hpdmUnIHNpZGUsIGFuZCB0aGUgcHJvZ3JhbSBwYWlyCiBpcyBtZWFudCB0byBiZSB1c2VkIHRvIGdldCBhbiBhcmNoaXZlIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeS4KIAogT1BUSU9OUwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdXBsb2FkLXBhY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtdXBsb2FkLXBhY2sudHh0CmluZGV4IGI4ZTQ5ZGMuLjcxY2E0ZWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXVwbG9hZC1wYWNrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGxvYWQtcGFjay50eHQKQEAgLTgsMTcgKzgsMTcgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0IHVwbG9hZC1wYWNrJyBbLS1zdHJpY3RdIFstLXRpbWVvdXQ9PG4+XSA8ZGlyZWN0b3J5PgorJ2dpdC11cGxvYWQtcGFjaycgWy0tc3RyaWN0XSBbLS10aW1lb3V0PTxuPl0gPGRpcmVjdG9yeT4KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCi1JbnZva2VkIGJ5ICdnaXQtZmV0Y2gtcGFjaycsIGxlYXJucyB3aGF0CitJbnZva2VkIGJ5ICdnaXQgZmV0Y2gtcGFjaycsIGxlYXJucyB3aGF0CiBvYmplY3RzIHRoZSBvdGhlciBzaWRlIGlzIG1pc3NpbmcsIGFuZCBzZW5kcyB0aGVtIGFmdGVyIHBhY2tpbmcuCiAKIFRoaXMgY29tbWFuZCBpcyB1c3VhbGx5IG5vdCBpbnZva2VkIGRpcmVjdGx5IGJ5IHRoZSBlbmQgdXNlci4KLVRoZSBVSSBmb3IgdGhlIHByb3RvY29sIGlzIG9uIHRoZSAnZ2l0LWZldGNoLXBhY2snIHNpZGUsIGFuZCB0aGUKK1RoZSBVSSBmb3IgdGhlIHByb3RvY29sIGlzIG9uIHRoZSAnZ2l0IGZldGNoLXBhY2snIHNpZGUsIGFuZCB0aGUKIHByb2dyYW0gcGFpciBpcyBtZWFudCB0byBiZSB1c2VkIHRvIHB1bGwgdXBkYXRlcyBmcm9tIGEgcmVtb3RlCi1yZXBvc2l0b3J5LiAgRm9yIHB1c2ggb3BlcmF0aW9ucywgc2VlICdnaXQtc2VuZC1wYWNrJy4KK3JlcG9zaXRvcnkuICBGb3IgcHVzaCBvcGVyYXRpb25zLCBzZWUgJ2dpdCBzZW5kLXBhY2snLgogCiAKIE9QVElPTlMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXZhci50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC12YXIudHh0CmluZGV4IGUyZjRjMDkuLjQ1OGYzZTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXZhci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdmFyLnR4dApAQCAtOCw3ICs4LDcgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0IHZhcicgWyAtbCB8IDx2YXJpYWJsZT4gXQorJ2dpdCB2YXInICggLWwgfCA8dmFyaWFibGU+ICkKIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC0yMCw3ICsyMCw3IEBACiAJQ2F1c2UgdGhlIGxvZ2ljYWwgdmFyaWFibGVzIHRvIGJlIGxpc3RlZC4gSW4gYWRkaXRpb24sIGFsbCB0aGUKIAl2YXJpYWJsZXMgb2YgdGhlIGdpdCBjb25maWd1cmF0aW9uIGZpbGUgLmdpdC9jb25maWcgYXJlIGxpc3RlZAogCWFzIHdlbGwuIChIb3dldmVyLCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgbGlzdGluZyBmdW5jdGlvbmFsaXR5Ci0JaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiAnZ2l0IGNvbmZpZyAtbCcuKQorCWlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgYGdpdCBjb25maWcgLWxgLikKIAogRVhBTVBMRQogLS0tLS0tLS0KQEAgLTM2LDYgKzM2LDIwIEBACiBHSVRfQ09NTUlUVEVSX0lERU5UOjoKICAgICBUaGUgcGVyc29uIHdobyBwdXQgYSBwaWVjZSBvZiBjb2RlIGludG8gZ2l0LgogCitHSVRfRURJVE9SOjoKKyAgICBUZXh0IGVkaXRvciBmb3IgdXNlIGJ5IGdpdCBjb21tYW5kcy4gIFRoZSB2YWx1ZSBpcyBtZWFudCB0byBiZQorICAgIGludGVycHJldGVkIGJ5IHRoZSBzaGVsbCB3aGVuIGl0IGlzIHVzZWQuICBFeGFtcGxlczogYH4vYmluL3ZpYCwKKyAgICBgJFNPTUVfRU5WSVJPTk1FTlRfVkFSSUFCTEVgLCBgIkM6XFByb2dyYW0gRmlsZXNcVmltXGd2aW0uZXhlIgorICAgIC0tbm9mb3JrYC4gIFRoZSBvcmRlciBvZiBwcmVmZXJlbmNlIGlzIHRoZSBgJEdJVF9FRElUT1JgCisgICAgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZW4gYGNvcmUuZWRpdG9yYCBjb25maWd1cmF0aW9uLCB0aGVuCisgICAgYCRWSVNVQUxgLCB0aGVuIGAkRURJVE9SYCwgYW5kIHRoZW4gZmluYWxseSAndmknLgorCitHSVRfUEFHRVI6OgorICAgIFRleHQgdmlld2VyIGZvciB1c2UgYnkgZ2l0IGNvbW1hbmRzIChlLmcuLCAnbGVzcycpLiAgVGhlIHZhbHVlCisgICAgaXMgbWVhbnQgdG8gYmUgaW50ZXJwcmV0ZWQgYnkgdGhlIHNoZWxsLiAgVGhlIG9yZGVyIG9mIHByZWZlcmVuY2UKKyAgICBpcyB0aGUgYCRHSVRfUEFHRVJgIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGVuIGBjb3JlLnBhZ2VyYAorICAgIGNvbmZpZ3VyYXRpb24sIHRoZW4gYCRQQUdFUmAsIGFuZCB0aGVuIGZpbmFsbHkgJ2xlc3MnLgorCiBEaWFnbm9zdGljcwogLS0tLS0tLS0tLS0KIFlvdSBkb24ndCBleGlzdC4gR28gYXdheSE6OgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdmVyaWZ5LXBhY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtdmVyaWZ5LXBhY2sudHh0CmluZGV4IGM4NjExNjMuLjkxNmEzOGEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXZlcmlmeS1wYWNrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC12ZXJpZnktcGFjay50eHQKQEAgLTgsMTMgKzgsMTMgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0IHZlcmlmeS1wYWNrJyBbLXZdIFstLV0gPHBhY2s+LmlkeCAuLi4KKydnaXQgdmVyaWZ5LXBhY2snIFstdnwtLXZlcmJvc2VdIFstLV0gPHBhY2s+LmlkeCAuLi4KIAogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KIFJlYWRzIGdpdmVuIGlkeCBmaWxlIGZvciBwYWNrZWQgZ2l0IGFyY2hpdmUgY3JlYXRlZCB3aXRoIHRoZQotJ2dpdC1wYWNrLW9iamVjdHMnIGNvbW1hbmQgYW5kIHZlcmlmaWVzIGlkeCBmaWxlIGFuZCB0aGUKKydnaXQgcGFjay1vYmplY3RzJyBjb21tYW5kIGFuZCB2ZXJpZmllcyBpZHggZmlsZSBhbmQgdGhlCiBjb3JyZXNwb25kaW5nIHBhY2sgZmlsZS4KIAogT1BUSU9OUwpAQCAtMjMsOCArMjMsMTUgQEAKIAlUaGUgaWR4IGZpbGVzIHRvIHZlcmlmeS4KIAogLXY6OgorLS12ZXJib3NlOjoKIAlBZnRlciB2ZXJpZnlpbmcgdGhlIHBhY2ssIHNob3cgbGlzdCBvZiBvYmplY3RzIGNvbnRhaW5lZAotCWluIHRoZSBwYWNrLgorCWluIHRoZSBwYWNrIGFuZCBhIGhpc3RvZ3JhbSBvZiBkZWx0YSBjaGFpbiBsZW5ndGguCisKKy1zOjoKKy0tc3RhdC1vbmx5OjoKKwlEbyBub3QgdmVyaWZ5IHRoZSBwYWNrIGNvbnRlbnRzOyBvbmx5IHNob3cgdGhlIGhpc3RvZ3JhbSBvZiBkZWx0YQorCWNoYWluIGxlbmd0aC4gIFdpdGggYC0tdmVyYm9zZWAsIGxpc3Qgb2Ygb2JqZWN0cyBpcyBhbHNvIHNob3duLgorCiBcLS06OgogCURvIG5vdCBpbnRlcnByZXQgYW55IG1vcmUgYXJndW1lbnRzIGFzIG9wdGlvbnMuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXZlcmlmeS10YWcudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtdmVyaWZ5LXRhZy50eHQKaW5kZXggODRlNzBhMC4uZGFkYTIxMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtdmVyaWZ5LXRhZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdmVyaWZ5LXRhZy50eHQKQEAgLTExLDcgKzExLDcgQEAKIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCi1WYWxpZGF0ZXMgdGhlIGdwZyBzaWduYXR1cmUgY3JlYXRlZCBieSAnZ2l0LXRhZycuCitWYWxpZGF0ZXMgdGhlIGdwZyBzaWduYXR1cmUgY3JlYXRlZCBieSAnZ2l0IHRhZycuCiAKIE9QVElPTlMKIC0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXdlYi0tYnJvd3NlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXdlYi0tYnJvd3NlLnR4dAppbmRleCAyNzhjZjczLi43NTcyMDQ5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC13ZWItLWJyb3dzZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtd2ViLS1icm93c2UudHh0CkBAIC02Miw3ICs2Miw3IEBACiBZb3UgY2FuIGV4cGxpY2l0bHkgcHJvdmlkZSBhIGZ1bGwgcGF0aCB0byB5b3VyIHByZWZlcnJlZCBicm93c2VyIGJ5CiBzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlICdicm93c2VyLjx0b29sPi5wYXRoJy4gRm9yIGV4YW1wbGUsCiB5b3UgY2FuIGNvbmZpZ3VyZSB0aGUgYWJzb2x1dGUgcGF0aCB0byBmaXJlZm94IGJ5IHNldHRpbmcKLSdicm93c2VyLmZpcmVmb3gucGF0aCcuIE90aGVyd2lzZSwgJ2dpdC13ZWItLWJyb3dzZScgYXNzdW1lcyB0aGUgdG9vbAorJ2Jyb3dzZXIuZmlyZWZveC5wYXRoJy4gT3RoZXJ3aXNlLCAnZ2l0IHdlYi0tYnJvd3NlJyBhc3N1bWVzIHRoZSB0b29sCiBpcyBhdmFpbGFibGUgaW4gUEFUSC4KIAogYnJvd3Nlci48dG9vbD4uY21kCkBAIC03MSw3ICs3MSw3IEBACiBXaGVuIHRoZSBicm93c2VyLCBzcGVjaWZpZWQgYnkgb3B0aW9ucyBvciBjb25maWd1cmF0aW9uIHZhcmlhYmxlcywgaXMKIG5vdCBhbW9uZyB0aGUgc3VwcG9ydGVkIG9uZXMsIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcKICdicm93c2VyLjx0b29sPi5jbWQnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgd2lsbCBiZSBsb29rZWQgdXAuIElmIHRoaXMKLXZhcmlhYmxlIGV4aXN0cyB0aGVuICdnaXQtd2ViLS1icm93c2UnIHdpbGwgdHJlYXQgdGhlIHNwZWNpZmllZCB0b29sCit2YXJpYWJsZSBleGlzdHMgdGhlbiAnZ2l0IHdlYi0tYnJvd3NlJyB3aWxsIHRyZWF0IHRoZSBzcGVjaWZpZWQgdG9vbAogYXMgYSBjdXN0b20gY29tbWFuZCBhbmQgd2lsbCB1c2UgYSBzaGVsbCBldmFsIHRvIHJ1biB0aGUgY29tbWFuZCB3aXRoCiB0aGUgVVJMcyBwYXNzZWQgYXMgYXJndW1lbnRzLgogCkBAIC0xMTMsNyArMTEzLDcgQEAKIEF1dGhvcgogLS0tLS0tCiBXcml0dGVuIGJ5IENocmlzdGlhbiBDb3VkZXIgPGNocmlzY29vbEB0dXhmYW1pbHkub3JnPiBhbmQgdGhlIGdpdC1saXN0Ci08Z2l0QHZnZXIua2VybmVsLm9yZz4sIGJhc2VkIG9uICdnaXQtbWVyZ2V0b29sJyBieSBUaGVvZG9yZSBZLiBUcydvLgorPGdpdEB2Z2VyLmtlcm5lbC5vcmc+LCBiYXNlZCBvbiAnZ2l0IG1lcmdldG9vbCcgYnkgVGhlb2RvcmUgWS4gVHMnby4KIAogRG9jdW1lbnRhdGlvbgogLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtd2hhdGNoYW5nZWQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtd2hhdGNoYW5nZWQudHh0CmluZGV4IGNhZGZiZDkuLmVhNzUzY2QgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXdoYXRjaGFuZ2VkLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC13aGF0Y2hhbmdlZC50eHQKQEAgLTEzLDggKzEzLDggQEAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQogU2hvd3MgY29tbWl0IGxvZ3MgYW5kIGRpZmYgb3V0cHV0IGVhY2ggY29tbWl0IGludHJvZHVjZXMuICBUaGUKLWNvbW1hbmQgaW50ZXJuYWxseSBpbnZva2VzICdnaXQtcmV2LWxpc3QnIHBpcGVkIHRvCi0nZ2l0LWRpZmYtdHJlZScsIGFuZCB0YWtlcyBjb21tYW5kIGxpbmUgb3B0aW9ucyBmb3IgYm90aCBvZgorY29tbWFuZCBpbnRlcm5hbGx5IGludm9rZXMgJ2dpdCByZXYtbGlzdCcgcGlwZWQgdG8KKydnaXQgZGlmZi10cmVlJywgYW5kIHRha2VzIGNvbW1hbmQgbGluZSBvcHRpb25zIGZvciBib3RoIG9mCiB0aGVzZSBjb21tYW5kcy4KIAogVGhpcyBtYW51YWwgcGFnZSBkZXNjcmliZXMgb25seSB0aGUgbW9zdCBmcmVxdWVudGx5IHVzZWQgb3B0aW9ucy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXdyaXRlLXRyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtd3JpdGUtdHJlZS50eHQKaW5kZXggMjZkMzg1MC4uYmZjZWFjYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtd3JpdGUtdHJlZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtd3JpdGUtdHJlZS50eHQKQEAgLTEyLDIxICsxMiwyMiBAQAogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KLUNyZWF0ZXMgYSB0cmVlIG9iamVjdCB1c2luZyB0aGUgY3VycmVudCBpbmRleC4KK0NyZWF0ZXMgYSB0cmVlIG9iamVjdCB1c2luZyB0aGUgY3VycmVudCBpbmRleC4gVGhlIG5hbWUgb2YgdGhlIG5ldwordHJlZSBvYmplY3QgaXMgcHJpbnRlZCB0byBzdGFuZGFyZCBvdXRwdXQuCiAKIFRoZSBpbmRleCBtdXN0IGJlIGluIGEgZnVsbHkgbWVyZ2VkIHN0YXRlLgogCi1Db25jZXB0dWFsbHksICdnaXQtd3JpdGUtdHJlZScgc3luYygpcyB0aGUgY3VycmVudCBpbmRleCBjb250ZW50cworQ29uY2VwdHVhbGx5LCAnZ2l0IHdyaXRlLXRyZWUnIHN5bmMoKXMgdGhlIGN1cnJlbnQgaW5kZXggY29udGVudHMKIGludG8gYSBzZXQgb2YgdHJlZSBmaWxlcy4KIEluIG9yZGVyIHRvIGhhdmUgdGhhdCBtYXRjaCB3aGF0IGlzIGFjdHVhbGx5IGluIHlvdXIgZGlyZWN0b3J5IHJpZ2h0Ci1ub3csIHlvdSBuZWVkIHRvIGhhdmUgZG9uZSBhICdnaXQtdXBkYXRlLWluZGV4JyBwaGFzZSBiZWZvcmUgeW91IGRpZCB0aGUKLSdnaXQtd3JpdGUtdHJlZScuCitub3csIHlvdSBuZWVkIHRvIGhhdmUgZG9uZSBhICdnaXQgdXBkYXRlLWluZGV4JyBwaGFzZSBiZWZvcmUgeW91IGRpZCB0aGUKKydnaXQgd3JpdGUtdHJlZScuCiAKIAogT1BUSU9OUwogLS0tLS0tLQogLS1taXNzaW5nLW9rOjoKLQlOb3JtYWxseSAnZ2l0LXdyaXRlLXRyZWUnIGVuc3VyZXMgdGhhdCB0aGUgb2JqZWN0cyByZWZlcmVuY2VkIGJ5IHRoZQorCU5vcm1hbGx5ICdnaXQgd3JpdGUtdHJlZScgZW5zdXJlcyB0aGF0IHRoZSBvYmplY3RzIHJlZmVyZW5jZWQgYnkgdGhlCiAJZGlyZWN0b3J5IGV4aXN0IGluIHRoZSBvYmplY3QgZGF0YWJhc2UuICBUaGlzIG9wdGlvbiBkaXNhYmxlcyB0aGlzCiAJY2hlY2suCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LnR4dAppbmRleCA4ZmJlMTg3Li40ZTAwYjMxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQudHh0CkBAIC0xMCw3ICsxMCw3IEBACiAtLS0tLS0tLQogW3ZlcnNlXQogJ2dpdCcgWy0tdmVyc2lvbl0gWy0tZXhlYy1wYXRoWz1HSVRfRVhFQ19QQVRIXV0gWy0taHRtbC1wYXRoXQotICAgIFstcHwtLXBhZ2luYXRlfC0tbm8tcGFnZXJdCisgICAgWy1wfC0tcGFnaW5hdGV8LS1uby1wYWdlcl0gWy0tbm8tcmVwbGFjZS1vYmplY3RzXQogICAgIFstLWJhcmVdIFstLWdpdC1kaXI9R0lUX0RJUl0gWy0td29yay10cmVlPUdJVF9XT1JLX1RSRUVdCiAgICAgWy0taGVscF0gQ09NTUFORCBbQVJHU10KIApAQCAtNDMsNyArNDMsNTEgQEAKIGJyYW5jaCBvZiB0aGUgYGdpdC5naXRgIHJlcG9zaXRvcnkuCiBEb2N1bWVudGF0aW9uIGZvciBvbGRlciByZWxlYXNlcyBhcmUgYXZhaWxhYmxlIGhlcmU6CiAKLSogbGluazp2MS42LjMvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAxLjYuM10KKyogbGluazp2MS43LjAuMy9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDEuNy4wLjNdCisKKyogcmVsZWFzZSBub3RlcyBmb3IKKyAgbGluazpSZWxOb3Rlcy0xLjcuMC4zLnR4dFsxLjcuMC4zXSwKKyAgbGluazpSZWxOb3Rlcy0xLjcuMC4yLnR4dFsxLjcuMC4yXSwKKyAgbGluazpSZWxOb3Rlcy0xLjcuMC4xLnR4dFsxLjcuMC4xXSwKKyAgbGluazpSZWxOb3Rlcy0xLjcuMC50eHRbMS43LjBdLgorCisqIGxpbms6djEuNi42LjIvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAxLjYuNi4yXQorCisqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMtMS42LjYuMi50eHRbMS42LjYuMl0sCisgIGxpbms6UmVsTm90ZXMtMS42LjYuMS50eHRbMS42LjYuMV0sCisgIGxpbms6UmVsTm90ZXMtMS42LjYudHh0WzEuNi42XS4KKworKiBsaW5rOnYxLjYuNS44L2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMS42LjUuOF0KKworKiByZWxlYXNlIG5vdGVzIGZvcgorICBsaW5rOlJlbE5vdGVzLTEuNi41LjgudHh0WzEuNi41LjhdLAorICBsaW5rOlJlbE5vdGVzLTEuNi41LjcudHh0WzEuNi41LjddLAorICBsaW5rOlJlbE5vdGVzLTEuNi41LjYudHh0WzEuNi41LjZdLAorICBsaW5rOlJlbE5vdGVzLTEuNi41LjUudHh0WzEuNi41LjVdLAorICBsaW5rOlJlbE5vdGVzLTEuNi41LjQudHh0WzEuNi41LjRdLAorICBsaW5rOlJlbE5vdGVzLTEuNi41LjMudHh0WzEuNi41LjNdLAorICBsaW5rOlJlbE5vdGVzLTEuNi41LjIudHh0WzEuNi41LjJdLAorICBsaW5rOlJlbE5vdGVzLTEuNi41LjEudHh0WzEuNi41LjFdLAorICBsaW5rOlJlbE5vdGVzLTEuNi41LnR4dFsxLjYuNV0uCisKKyogbGluazp2MS42LjQuNC9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDEuNi40LjRdCisKKyogcmVsZWFzZSBub3RlcyBmb3IKKyAgbGluazpSZWxOb3Rlcy0xLjYuNC40LnR4dFsxLjYuNC40XSwKKyAgbGluazpSZWxOb3Rlcy0xLjYuNC4zLnR4dFsxLjYuNC4zXSwKKyAgbGluazpSZWxOb3Rlcy0xLjYuNC4yLnR4dFsxLjYuNC4yXSwKKyAgbGluazpSZWxOb3Rlcy0xLjYuNC4xLnR4dFsxLjYuNC4xXSwKKyAgbGluazpSZWxOb3Rlcy0xLjYuNC50eHRbMS42LjRdLgorCisqIGxpbms6djEuNi4zLjQvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAxLjYuMy40XQorCisqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMtMS42LjMuNC50eHRbMS42LjMuNF0sCisgIGxpbms6UmVsTm90ZXMtMS42LjMuMy50eHRbMS42LjMuM10sCisgIGxpbms6UmVsTm90ZXMtMS42LjMuMi50eHRbMS42LjMuMl0sCisgIGxpbms6UmVsTm90ZXMtMS42LjMuMS50eHRbMS42LjMuMV0sCisgIGxpbms6UmVsTm90ZXMtMS42LjMudHh0WzEuNi4zXS4KIAogKiByZWxlYXNlIG5vdGVzIGZvcgogICBsaW5rOlJlbE5vdGVzLTEuNi4yLjUudHh0WzEuNi4yLjVdLApAQCAtMTg4LDcgKzIzMiwxMCBAQAogCiAtcDo6CiAtLXBhZ2luYXRlOjoKLQlQaXBlIGFsbCBvdXRwdXQgaW50byAnbGVzcycgKG9yIGlmIHNldCwgJFBBR0VSKS4KKwlQaXBlIGFsbCBvdXRwdXQgaW50byAnbGVzcycgKG9yIGlmIHNldCwgJFBBR0VSKSBpZiBzdGFuZGFyZAorCW91dHB1dCBpcyBhIHRlcm1pbmFsLiAgVGhpcyBvdmVycmlkZXMgdGhlIGBwYWdlci48Y21kPmAKKwljb25maWd1cmF0aW9uIG9wdGlvbnMgKHNlZSB0aGUgIkNvbmZpZ3VyYXRpb24gTWVjaGFuaXNtIiBzZWN0aW9uCisJYmVsb3cpLgogCiAtLW5vLXBhZ2VyOjoKIAlEbyBub3QgcGlwZSBnaXQgb3V0cHV0IGludG8gYSBwYWdlci4KQEAgLTIxNiw2ICsyNjMsMTAgQEAKIAllbnZpcm9ubWVudCBpcyBub3Qgc2V0LCBpdCBpcyBzZXQgdG8gdGhlIGN1cnJlbnQgd29ya2luZwogCWRpcmVjdG9yeS4KIAorLS1uby1yZXBsYWNlLW9iamVjdHM6OgorCURvIG5vdCB1c2UgcmVwbGFjZW1lbnQgcmVmcyB0byByZXBsYWNlIGdpdCBvYmplY3RzLiBTZWUKKwlsaW5rZ2l0OmdpdC1yZXBsYWNlWzFdIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCiAKIEZVUlRIRVIgRE9DVU1FTlRBVElPTgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zNTYsNyArNDA3LDggQEAKIC0tLS0tLS0tLS0tLQogCiBWYXJpb3VzIGNvbW1hbmRzIHJlYWQgZnJvbSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGFuZCBhZGp1c3QKLXRoZWlyIG9wZXJhdGlvbiBhY2NvcmRpbmdseS4KK3RoZWlyIG9wZXJhdGlvbiBhY2NvcmRpbmdseS4gIFNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0gZm9yIGEKK2xpc3QuCiAKIAogSWRlbnRpZmllciBUZXJtaW5vbG9neQpAQCAtNTM2LDggKzU4OCw4IEBACiAJbGlua2dpdDpnaXQtY29uZmlnWzFdLgogCiAnR0lUX1NTSCc6OgotCUlmIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0IHRoZW4gJ2dpdC1mZXRjaCcKLQlhbmQgJ2dpdC1wdXNoJyB3aWxsIHVzZSB0aGlzIGNvbW1hbmQgaW5zdGVhZAorCUlmIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0IHRoZW4gJ2dpdCBmZXRjaCcKKwlhbmQgJ2dpdCBwdXNoJyB3aWxsIHVzZSB0aGlzIGNvbW1hbmQgaW5zdGVhZAogCW9mICdzc2gnIHdoZW4gdGhleSBuZWVkIHRvIGNvbm5lY3QgdG8gYSByZW1vdGUgc3lzdGVtLgogCVRoZSAnJEdJVF9TU0gnIGNvbW1hbmQgd2lsbCBiZSBnaXZlbiBleGFjdGx5IHR3byBhcmd1bWVudHM6CiAJdGhlICd1c2VybmFtZUBob3N0JyAob3IganVzdCAnaG9zdCcpIGZyb20gdGhlIFVSTCBhbmQgdGhlCkBAIC01NTMsOCArNjA1LDggQEAKIAogJ0dJVF9GTFVTSCc6OgogCUlmIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0IHRvICIxIiwgdGhlbiBjb21tYW5kcyBzdWNoCi0JYXMgJ2dpdC1ibGFtZScgKGluIGluY3JlbWVudGFsIG1vZGUpLCAnZ2l0LXJldi1saXN0JywgJ2dpdC1sb2cnLAotCWFuZCAnZ2l0LXdoYXRjaGFuZ2VkJyB3aWxsIGZvcmNlIGEgZmx1c2ggb2YgdGhlIG91dHB1dCBzdHJlYW0KKwlhcyAnZ2l0IGJsYW1lJyAoaW4gaW5jcmVtZW50YWwgbW9kZSksICdnaXQgcmV2LWxpc3QnLCAnZ2l0IGxvZycsCisJYW5kICdnaXQgd2hhdGNoYW5nZWQnIHdpbGwgZm9yY2UgYSBmbHVzaCBvZiB0aGUgb3V0cHV0IHN0cmVhbQogCWFmdGVyIGVhY2ggY29tbWl0LW9yaWVudGVkIHJlY29yZCBoYXZlIGJlZW4gZmx1c2hlZC4gICBJZiB0aGlzCiAJdmFyaWFibGUgaXMgc2V0IHRvICIwIiwgdGhlIG91dHB1dCBvZiB0aGVzZSBjb21tYW5kcyB3aWxsIGJlIGRvbmUKIAl1c2luZyBjb21wbGV0ZWx5IGJ1ZmZlcmVkIEkvTy4gICBJZiB0aGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGlzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdGF0dHJpYnV0ZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRhdHRyaWJ1dGVzLnR4dAppbmRleCAxMTk1ZTgzLi5kODkyZTY0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdGF0dHJpYnV0ZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0YXR0cmlidXRlcy50eHQKQEAgLTg4LDkgKzg4LDkgQEAKIAogVGhlc2UgYXR0cmlidXRlcyBhZmZlY3QgaG93IHRoZSBjb250ZW50cyBzdG9yZWQgaW4gdGhlCiByZXBvc2l0b3J5IGFyZSBjb3BpZWQgdG8gdGhlIHdvcmtpbmcgdHJlZSBmaWxlcyB3aGVuIGNvbW1hbmRzCi1zdWNoIGFzICdnaXQtY2hlY2tvdXQnIGFuZCAnZ2l0LW1lcmdlJyBydW4uICBUaGV5IGFsc28gYWZmZWN0IGhvdworc3VjaCBhcyAnZ2l0IGNoZWNrb3V0JyBhbmQgJ2dpdCBtZXJnZScgcnVuLiAgVGhleSBhbHNvIGFmZmVjdCBob3cKIGdpdCBzdG9yZXMgdGhlIGNvbnRlbnRzIHlvdSBwcmVwYXJlIGluIHRoZSB3b3JraW5nIHRyZWUgaW4gdGhlCi1yZXBvc2l0b3J5IHVwb24gJ2dpdC1hZGQnIGFuZCAnZ2l0LWNvbW1pdCcuCityZXBvc2l0b3J5IHVwb24gJ2dpdCBhZGQnIGFuZCAnZ2l0IGNvbW1pdCcuCiAKIGBjcmxmYAogXl5eXl5eCkBAIC0xNDgsMTYgKzE0OCwxNiBAQAogYSBjb252ZXJzaW9uIGRvbmUgdG8gdGhlIGZpbGVzIGluIHRoZSB3b3JrIHRyZWUsIGJ1dCB0aGVyZSBhcmUgYQogZmV3IGV4Y2VwdGlvbnMuICBFdmVuIHRob3VnaC4uLgogCi0tICdnaXQtYWRkJyBpdHNlbGYgZG9lcyBub3QgdG91Y2ggdGhlIGZpbGVzIGluIHRoZSB3b3JrIHRyZWUsIHRoZQorLSAnZ2l0IGFkZCcgaXRzZWxmIGRvZXMgbm90IHRvdWNoIHRoZSBmaWxlcyBpbiB0aGUgd29yayB0cmVlLCB0aGUKICAgbmV4dCBjaGVja291dCB3b3VsZCwgc28gdGhlIHNhZmV0eSB0cmlnZ2VyczsKIAotLSAnZ2l0LWFwcGx5JyB0byB1cGRhdGUgYSB0ZXh0IGZpbGUgd2l0aCBhIHBhdGNoIGRvZXMgdG91Y2ggdGhlIGZpbGVzCistICdnaXQgYXBwbHknIHRvIHVwZGF0ZSBhIHRleHQgZmlsZSB3aXRoIGEgcGF0Y2ggZG9lcyB0b3VjaCB0aGUgZmlsZXMKICAgaW4gdGhlIHdvcmsgdHJlZSwgYnV0IHRoZSBvcGVyYXRpb24gaXMgYWJvdXQgdGV4dCBmaWxlcyBhbmQgQ1JMRgogICBjb252ZXJzaW9uIGlzIGFib3V0IGZpeGluZyB0aGUgbGluZSBlbmRpbmcgaW5jb25zaXN0ZW5jaWVzLCBzbyB0aGUKICAgc2FmZXR5IGRvZXMgbm90IHRyaWdnZXI7CiAKLS0gJ2dpdC1kaWZmJyBpdHNlbGYgZG9lcyBub3QgdG91Y2ggdGhlIGZpbGVzIGluIHRoZSB3b3JrIHRyZWUsIGl0IGlzCi0gIG9mdGVuIHJ1biB0byBpbnNwZWN0IHRoZSBjaGFuZ2VzIHlvdSBpbnRlbmQgdG8gbmV4dCAnZ2l0LWFkZCcuICBUbworLSAnZ2l0IGRpZmYnIGl0c2VsZiBkb2VzIG5vdCB0b3VjaCB0aGUgZmlsZXMgaW4gdGhlIHdvcmsgdHJlZSwgaXQgaXMKKyAgb2Z0ZW4gcnVuIHRvIGluc3BlY3QgdGhlIGNoYW5nZXMgeW91IGludGVuZCB0byBuZXh0ICdnaXQgYWRkJy4gIFRvCiAgIGNhdGNoIHBvdGVudGlhbCBwcm9ibGVtcyBlYXJseSwgc2FmZXR5IHRyaWdnZXJzLgogCiAKQEAgLTE5Nyw2ICsxOTcsMjUgQEAKIG9yIGRvZXMgbm90IGhhdmUgdGhlIGFwcHJvcHJpYXRlIGZpbHRlciBwcm9ncmFtLCB0aGUgcHJvamVjdAogc2hvdWxkIHN0aWxsIGJlIHVzYWJsZS4KIAorRm9yIGV4YW1wbGUsIGluIC5naXRhdHRyaWJ1dGVzLCB5b3Ugd291bGQgYXNzaWduIHRoZSBgZmlsdGVyYAorYXR0cmlidXRlIGZvciBwYXRocy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLmMJZmlsdGVyPWluZGVudAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZW4geW91IHdvdWxkIGRlZmluZSBhICJmaWx0ZXIuaW5kZW50LmNsZWFuIiBhbmQgImZpbHRlci5pbmRlbnQuc211ZGdlIgorY29uZmlndXJhdGlvbiBpbiB5b3VyIC5naXQvY29uZmlnIHRvIHNwZWNpZnkgYSBwYWlyIG9mIGNvbW1hbmRzIHRvCittb2RpZnkgdGhlIGNvbnRlbnRzIG9mIEMgcHJvZ3JhbXMgd2hlbiB0aGUgc291cmNlIGZpbGVzIGFyZSBjaGVja2VkCitpbiAoImNsZWFuIiBpcyBydW4pIGFuZCBjaGVja2VkIG91dCAobm8gY2hhbmdlIGlzIG1hZGUgYmVjYXVzZSB0aGUKK2NvbW1hbmQgaXMgImNhdCIpLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tmaWx0ZXIgImluZGVudCJdCisJY2xlYW4gPSBpbmRlbnQKKwlzbXVkZ2UgPSBjYXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiAKIEludGVyYWN0aW9uIGJldHdlZW4gY2hlY2tpbi9jaGVja291dCBhdHRyaWJ1dGVzCiBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgpAQCAtNDkyLDcgKzUxMSw4IEBACiB2ZXJzaW9uIChgJUFgKSBhbmQgdGhlIG90aGVyIGJyYW5jaGVzJyB2ZXJzaW9uIChgJUJgKS4gIFRoZXNlCiB0aHJlZSB0b2tlbnMgYXJlIHJlcGxhY2VkIHdpdGggdGhlIG5hbWVzIG9mIHRlbXBvcmFyeSBmaWxlcyB0aGF0CiBob2xkIHRoZSBjb250ZW50cyBvZiB0aGVzZSB2ZXJzaW9ucyB3aGVuIHRoZSBjb21tYW5kIGxpbmUgaXMKLWJ1aWx0LgorYnVpbHQuIEFkZGl0aW9uYWxseSwgJUwgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBjb25mbGljdCBtYXJrZXIKK3NpemUgKHNlZSBiZWxvdykuCiAKIFRoZSBtZXJnZSBkcml2ZXIgaXMgZXhwZWN0ZWQgdG8gbGVhdmUgdGhlIHJlc3VsdCBvZiB0aGUgbWVyZ2UgaW4KIHRoZSBmaWxlIG5hbWVkIHdpdGggYCVBYCBieSBvdmVyd3JpdGluZyBpdCwgYW5kIGV4aXQgd2l0aCB6ZXJvCkBAIC01MDYsNiArNTI2LDIzIEBACiBpbnRlcm5hbCBtZXJnZSBhbmQgdGhlIGZpbmFsIG1lcmdlLgogCiAKK2Bjb25mbGljdC1tYXJrZXItc2l6ZWAKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhpcyBhdHRyaWJ1dGUgY29udHJvbHMgdGhlIGxlbmd0aCBvZiBjb25mbGljdCBtYXJrZXJzIGxlZnQgaW4KK3RoZSB3b3JrIHRyZWUgZmlsZSBkdXJpbmcgYSBjb25mbGljdGVkIG1lcmdlLiAgT25seSBzZXR0aW5nIHRvCit0aGUgdmFsdWUgdG8gYSBwb3NpdGl2ZSBpbnRlZ2VyIGhhcyBhbnkgbWVhbmluZ2Z1bCBlZmZlY3QuCisKK0ZvciBleGFtcGxlLCB0aGlzIGxpbmUgaW4gYC5naXRhdHRyaWJ1dGVzYCBjYW4gYmUgdXNlZCB0byB0ZWxsIHRoZSBtZXJnZQorbWFjaGluZXJ5IHRvIGxlYXZlIG11Y2ggbG9uZ2VyIChpbnN0ZWFkIG9mIHRoZSB1c3VhbCA3LWNoYXJhY3Rlci1sb25nKQorY29uZmxpY3QgbWFya2VycyB3aGVuIG1lcmdpbmcgdGhlIGZpbGUgYERvY3VtZW50YXRpb24vZ2l0LW1lcmdlLnR4dGAKK3Jlc3VsdHMgaW4gYSBjb25mbGljdC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEb2N1bWVudGF0aW9uL2dpdC1tZXJnZS50eHQJY29uZmxpY3QtbWFya2VyLXNpemU9MzIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKIENoZWNraW5nIHdoaXRlc3BhY2UgZXJyb3JzCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCkBAIC01NjAsNiArNTk3LDE2IEBACiBjb21taXQgaGFzaC4KIAogCitQYWNraW5nIG9iamVjdHMKK35+fn5+fn5+fn5+fn5+fgorCitgZGVsdGFgCiteXl5eXl5eCisKK0RlbHRhIGNvbXByZXNzaW9uIHdpbGwgbm90IGJlIGF0dGVtcHRlZCBmb3IgYmxvYnMgZm9yIHBhdGhzIHdpdGggdGhlCithdHRyaWJ1dGUgYGRlbHRhYCBzZXQgdG8gZmFsc2UuCisKKwogVmlld2luZyBmaWxlcyBpbiBHVUkgdG9vbHMKIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0Y2xpLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0Y2xpLnR4dAppbmRleCBiZTM5ZWQ3Li42OTI4NzI0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdGNsaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRjbGkudHh0CkBAIC04MSw3ICs4MSw3IEBACiArCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICQgZ2l0IGRlc2NyaWJlIC1oCi11c2FnZTogZ2l0LWRlc2NyaWJlIFtvcHRpb25zXSA8Y29tbWl0dGlzaD4qCit1c2FnZTogZ2l0IGRlc2NyaWJlIFtvcHRpb25zXSA8Y29tbWl0dGlzaD4qCiAKICAgICAtLWNvbnRhaW5zICAgICAgICAgICAgZmluZCB0aGUgdGFnIHRoYXQgY29tZXMgYWZ0ZXIgdGhlIGNvbW1pdAogICAgIC0tZGVidWcgICAgICAgICAgICAgICBkZWJ1ZyBzZWFyY2ggc3RyYXRlZ3kgb24gc3RkZXJyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdGNvcmUtdHV0b3JpYWwudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRjb3JlLXR1dG9yaWFsLnR4dAppbmRleCBiMzY0MGM0Li5mNzgxNWU5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdGNvcmUtdHV0b3JpYWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0Y29yZS10dXRvcmlhbC50eHQKQEAgLTI3LDYgKzI3LDE0IEBACiBwbHVtYmluZyBkaXJlY3RseSB2ZXJ5IG9mdGVuLCBidXQgaXQgY2FuIGJlIGdvb2QgdG8ga25vdyB3aGF0IHRoZQogcGx1bWJpbmcgZG9lcyBmb3Igd2hlbiB0aGUgcG9yY2VsYWluIGlzbid0IGZsdXNoaW5nLgogCitCYWNrIHdoZW4gdGhpcyBkb2N1bWVudCB3YXMgb3JpZ2luYWxseSB3cml0dGVuLCBtYW55IHBvcmNlbGFpbgorY29tbWFuZHMgd2VyZSBzaGVsbCBzY3JpcHRzLiBGb3Igc2ltcGxpY2l0eSwgaXQgc3RpbGwgdXNlcyB0aGVtIGFzCitleGFtcGxlcyB0byBpbGx1c3RyYXRlIGhvdyBwbHVtYmluZyBpcyBmaXQgdG9nZXRoZXIgdG8gZm9ybSB0aGUKK3BvcmNlbGFpbiBjb21tYW5kcy4gVGhlIHNvdXJjZSB0cmVlIGluY2x1ZGVzIHNvbWUgb2YgdGhlc2Ugc2NyaXB0cyBpbgorY29udHJpYi9leGFtcGxlcy8gZm9yIHJlZmVyZW5jZS4gQWx0aG91Z2ggdGhlc2UgYXJlIG5vdCBpbXBsZW1lbnRlZCBhcworc2hlbGwgc2NyaXB0cyBhbnltb3JlLCB0aGUgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGUgcGx1bWJpbmcgbGF5ZXIKK2NvbW1hbmRzIGRvIGlzIHN0aWxsIHZhbGlkLgorCiBbTk9URV0KIERlZXBlciB0ZWNobmljYWwgZGV0YWlscyBhcmUgb2Z0ZW4gbWFya2VkIGFzIE5vdGVzLCB3aGljaCB5b3UgY2FuCiBza2lwIG9uIHlvdXIgZmlyc3QgcmVhZGluZy4KQEAgLTQ0LDcgKzUyLDcgQEAKIEZvciBvdXIgZmlyc3QgZXhhbXBsZSwgd2UncmUgZ29pbmcgdG8gc3RhcnQgYSB0b3RhbGx5IG5ldyByZXBvc2l0b3J5IGZyb20KIHNjcmF0Y2gsIHdpdGggbm8gcHJlLWV4aXN0aW5nIGZpbGVzLCBhbmQgd2UnbGwgY2FsbCBpdCAnZ2l0LXR1dG9yaWFsJy4KIFRvIHN0YXJ0IHVwLCBjcmVhdGUgYSBzdWJkaXJlY3RvcnkgZm9yIGl0LCBjaGFuZ2UgaW50byB0aGF0Ci1zdWJkaXJlY3RvcnksIGFuZCBpbml0aWFsaXplIHRoZSBnaXQgaW5mcmFzdHJ1Y3R1cmUgd2l0aCAnZ2l0LWluaXQnOgorc3ViZGlyZWN0b3J5LCBhbmQgaW5pdGlhbGl6ZSB0aGUgZ2l0IGluZnJhc3RydWN0dXJlIHdpdGggJ2dpdCBpbml0JzoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAkIG1rZGlyIGdpdC10dXRvcmlhbApAQCAtMTM5LDcgKzE0Nyw3IEBACiAgLSBjb21taXQgdGhhdCBpbmRleCBmaWxlIGFzIGFuIG9iamVjdC4KIAogVGhlIGZpcnN0IHN0ZXAgaXMgdHJpdmlhbDogd2hlbiB5b3Ugd2FudCB0byB0ZWxsIGdpdCBhYm91dCBhbnkgY2hhbmdlcwotdG8geW91ciB3b3JraW5nIHRyZWUsIHlvdSB1c2UgdGhlICdnaXQtdXBkYXRlLWluZGV4JyBwcm9ncmFtLiBUaGF0Cit0byB5b3VyIHdvcmtpbmcgdHJlZSwgeW91IHVzZSB0aGUgJ2dpdCB1cGRhdGUtaW5kZXgnIHByb2dyYW0uIFRoYXQKIHByb2dyYW0gbm9ybWFsbHkganVzdCB0YWtlcyBhIGxpc3Qgb2YgZmlsZW5hbWVzIHlvdSB3YW50IHRvIHVwZGF0ZSwgYnV0CiB0byBhdm9pZCB0cml2aWFsIG1pc3Rha2VzLCBpdCByZWZ1c2VzIHRvIGFkZCBuZXcgZW50cmllcyB0byB0aGUgaW5kZXgKIChvciByZW1vdmUgZXhpc3Rpbmcgb25lcykgdW5sZXNzIHlvdSBleHBsaWNpdGx5IHRlbGwgaXQgdGhhdCB5b3UncmUKQEAgLTE3MywxOSArMTgxLDE5IEBACiB3aGljaCBjb3JyZXNwb25kIHdpdGggdGhlIG9iamVjdHMgd2l0aCBuYW1lcyBvZiBgNTU3ZGIuLi5gIGFuZAogYGYyNGM3Li4uYCByZXNwZWN0aXZlbHkuCiAKLUlmIHlvdSB3YW50IHRvLCB5b3UgY2FuIHVzZSAnZ2l0LWNhdC1maWxlJyB0byBsb29rIGF0IHRob3NlIG9iamVjdHMsIGJ1dAorSWYgeW91IHdhbnQgdG8sIHlvdSBjYW4gdXNlICdnaXQgY2F0LWZpbGUnIHRvIGxvb2sgYXQgdGhvc2Ugb2JqZWN0cywgYnV0CiB5b3UnbGwgaGF2ZSB0byB1c2UgdGhlIG9iamVjdCBuYW1lLCBub3QgdGhlIGZpbGVuYW1lIG9mIHRoZSBvYmplY3Q6CiAKIC0tLS0tLS0tLS0tLS0tLS0KICQgZ2l0IGNhdC1maWxlIC10IDU1N2RiMDNkZTk5N2M4NmE0YTAyOGUxZWJkM2ExY2ViMjI1YmUyMzgKIC0tLS0tLS0tLS0tLS0tLS0KIAotd2hlcmUgdGhlIGAtdGAgdGVsbHMgJ2dpdC1jYXQtZmlsZScgdG8gdGVsbCB5b3Ugd2hhdCB0aGUgInR5cGUiIG9mIHRoZQord2hlcmUgdGhlIGAtdGAgdGVsbHMgJ2dpdCBjYXQtZmlsZScgdG8gdGVsbCB5b3Ugd2hhdCB0aGUgInR5cGUiIG9mIHRoZQogb2JqZWN0IGlzLiBnaXQgd2lsbCB0ZWxsIHlvdSB0aGF0IHlvdSBoYXZlIGEgImJsb2IiIG9iamVjdCAoaS5lLiwganVzdCBhCiByZWd1bGFyIGZpbGUpLCBhbmQgeW91IGNhbiBzZWUgdGhlIGNvbnRlbnRzIHdpdGgKIAogLS0tLS0tLS0tLS0tLS0tLQotJCBnaXQgY2F0LWZpbGUgImJsb2IiIDU1N2RiMDMKKyQgZ2l0IGNhdC1maWxlIGJsb2IgNTU3ZGIwMwogLS0tLS0tLS0tLS0tLS0tLQogCiB3aGljaCB3aWxsIHByaW50IG91dCAiSGVsbG8gV29ybGQiLiBUaGUgb2JqZWN0IGA1NTdkYjAzYCBpcyBub3RoaW5nCkBAIC0yMDUsNyArMjEzLDcgQEAKIEFueXdheSwgYXMgd2UgbWVudGlvbmVkIHByZXZpb3VzbHksIHlvdSBub3JtYWxseSBuZXZlciBhY3R1YWxseSB0YWtlIGEKIGxvb2sgYXQgdGhlIG9iamVjdHMgdGhlbXNlbHZlcywgYW5kIHR5cGluZyBsb25nIDQwLWNoYXJhY3RlciBoZXgKIG5hbWVzIGlzIG5vdCBzb21ldGhpbmcgeW91J2Qgbm9ybWFsbHkgd2FudCB0byBkby4gVGhlIGFib3ZlIGRpZ3Jlc3Npb24KLXdhcyBqdXN0IHRvIHNob3cgdGhhdCAnZ2l0LXVwZGF0ZS1pbmRleCcgZGlkIHNvbWV0aGluZyBtYWdpY2FsLCBhbmQKK3dhcyBqdXN0IHRvIHNob3cgdGhhdCAnZ2l0IHVwZGF0ZS1pbmRleCcgZGlkIHNvbWV0aGluZyBtYWdpY2FsLCBhbmQKIGFjdHVhbGx5IHNhdmVkIGF3YXkgdGhlIGNvbnRlbnRzIG9mIHlvdXIgZmlsZXMgaW50byB0aGUgZ2l0IG9iamVjdAogZGF0YWJhc2UuCiAKQEAgLTIyOCw3ICsyMzYsNyBAQAogCiBhbmQgeW91IGNhbiBub3csIHNpbmNlIHlvdSB0b2xkIGdpdCBhYm91dCB0aGUgcHJldmlvdXMgc3RhdGUgb2YgYGhlbGxvYCwgYXNrCiBnaXQgd2hhdCBoYXMgY2hhbmdlZCBpbiB0aGUgdHJlZSBjb21wYXJlZCB0byB5b3VyIG9sZCBpbmRleCwgdXNpbmcgdGhlCi0nZ2l0LWRpZmYtZmlsZXMnIGNvbW1hbmQ6CisnZ2l0IGRpZmYtZmlsZXMnIGNvbW1hbmQ6CiAKIC0tLS0tLS0tLS0tLQogJCBnaXQgZGlmZi1maWxlcwpAQCAtMjM5LDcgKzI0Nyw3IEBACiB0aGF0IGl0IGhhcyBub3RpY2VkIHRoYXQgImhlbGxvIiBoYXMgYmVlbiBtb2RpZmllZCwgYW5kIHRoYXQgdGhlIG9sZCBvYmplY3QKIGNvbnRlbnRzIGl0IGhhZCBoYXZlIGJlZW4gcmVwbGFjZWQgd2l0aCBzb21ldGhpbmcgZWxzZS4KIAotVG8gbWFrZSBpdCByZWFkYWJsZSwgd2UgY2FuIHRlbGwgJ2dpdC1kaWZmLWZpbGVzJyB0byBvdXRwdXQgdGhlCitUbyBtYWtlIGl0IHJlYWRhYmxlLCB3ZSBjYW4gdGVsbCAnZ2l0IGRpZmYtZmlsZXMnIHRvIG91dHB1dCB0aGUKIGRpZmZlcmVuY2VzIGFzIGEgcGF0Y2gsIHVzaW5nIHRoZSBgLXBgIGZsYWc6CiAKIC0tLS0tLS0tLS0tLQpAQCAtMjU1LDcgKzI2Myw3IEBACiAKIGkuZS4gdGhlIGRpZmYgb2YgdGhlIGNoYW5nZSB3ZSBjYXVzZWQgYnkgYWRkaW5nIGFub3RoZXIgbGluZSB0byBgaGVsbG9gLgogCi1JbiBvdGhlciB3b3JkcywgJ2dpdC1kaWZmLWZpbGVzJyBhbHdheXMgc2hvd3MgdXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbgorSW4gb3RoZXIgd29yZHMsICdnaXQgZGlmZi1maWxlcycgYWx3YXlzIHNob3dzIHVzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4KIHdoYXQgaXMgcmVjb3JkZWQgaW4gdGhlIGluZGV4LCBhbmQgd2hhdCBpcyBjdXJyZW50bHkgaW4gdGhlIHdvcmtpbmcKIHRyZWUuIFRoYXQncyB2ZXJ5IHVzZWZ1bC4KIApAQCAtMjgzLDcgKzI5MSw3IEBACiBvYmplY3QgYXMgYSAnY29tbWl0JyBvYmplY3QgdG9nZXRoZXIgd2l0aCBhbiBleHBsYW5hdGlvbiBvZiB3aGF0IHRoZQogdHJlZSB3YXMgYWxsIGFib3V0LCBhbG9uZyB3aXRoIGluZm9ybWF0aW9uIG9mIGhvdyB3ZSBjYW1lIHRvIHRoYXQgc3RhdGUuCiAKLUNyZWF0aW5nIGEgdHJlZSBvYmplY3QgaXMgdHJpdmlhbCwgYW5kIGlzIGRvbmUgd2l0aCAnZ2l0LXdyaXRlLXRyZWUnLgorQ3JlYXRpbmcgYSB0cmVlIG9iamVjdCBpcyB0cml2aWFsLCBhbmQgaXMgZG9uZSB3aXRoICdnaXQgd3JpdGUtdHJlZScuCiBUaGVyZSBhcmUgbm8gb3B0aW9ucyBvciBvdGhlciBpbnB1dDogYGdpdCB3cml0ZS10cmVlYCB3aWxsIHRha2UgdGhlCiBjdXJyZW50IGluZGV4IHN0YXRlLCBhbmQgd3JpdGUgYW4gb2JqZWN0IHRoYXQgZGVzY3JpYmVzIHRoYXQgd2hvbGUKIGluZGV4LiBJbiBvdGhlciB3b3Jkcywgd2UncmUgbm93IHR5aW5nIHRvZ2V0aGVyIGFsbCB0aGUgZGlmZmVyZW50CkBAIC0zMDcsMjMgKzMxNSwyMyBAQAogYGdpdCBjYXQtZmlsZWAgdG8gYWN0dWFsbHkgb3V0cHV0IHRoZSByYXcgb2JqZWN0IGNvbnRlbnRzLCBidXQgeW91J2xsIHNlZQogbWFpbmx5IGEgYmluYXJ5IG1lc3MsIHNvIHRoYXQncyBsZXNzIGludGVyZXN0aW5nKS4KIAotSG93ZXZlciAtLSBub3JtYWxseSB5b3UnZCBuZXZlciB1c2UgJ2dpdC13cml0ZS10cmVlJyBvbiBpdHMgb3duLCBiZWNhdXNlCitIb3dldmVyIC0tIG5vcm1hbGx5IHlvdSdkIG5ldmVyIHVzZSAnZ2l0IHdyaXRlLXRyZWUnIG9uIGl0cyBvd24sIGJlY2F1c2UKIG5vcm1hbGx5IHlvdSBhbHdheXMgY29tbWl0IGEgdHJlZSBpbnRvIGEgY29tbWl0IG9iamVjdCB1c2luZyB0aGUKLSdnaXQtY29tbWl0LXRyZWUnIGNvbW1hbmQuIEluIGZhY3QsIGl0J3MgZWFzaWVyIHRvIG5vdCBhY3R1YWxseSB1c2UKLSdnaXQtd3JpdGUtdHJlZScgb24gaXRzIG93biBhdCBhbGwsIGJ1dCB0byBqdXN0IHBhc3MgaXRzIHJlc3VsdCBpbiBhcyBhbgotYXJndW1lbnQgdG8gJ2dpdC1jb21taXQtdHJlZScuCisnZ2l0IGNvbW1pdC10cmVlJyBjb21tYW5kLiBJbiBmYWN0LCBpdCdzIGVhc2llciB0byBub3QgYWN0dWFsbHkgdXNlCisnZ2l0IHdyaXRlLXRyZWUnIG9uIGl0cyBvd24gYXQgYWxsLCBidXQgdG8ganVzdCBwYXNzIGl0cyByZXN1bHQgaW4gYXMgYW4KK2FyZ3VtZW50IHRvICdnaXQgY29tbWl0LXRyZWUnLgogCi0nZ2l0LWNvbW1pdC10cmVlJyBub3JtYWxseSB0YWtlcyBzZXZlcmFsIGFyZ3VtZW50cyAtLSBpdCB3YW50cyB0byBrbm93CisnZ2l0IGNvbW1pdC10cmVlJyBub3JtYWxseSB0YWtlcyBzZXZlcmFsIGFyZ3VtZW50cyAtLSBpdCB3YW50cyB0byBrbm93CiB3aGF0IHRoZSAncGFyZW50JyBvZiBhIGNvbW1pdCB3YXMsIGJ1dCBzaW5jZSB0aGlzIGlzIHRoZSBmaXJzdCBjb21taXQKIGV2ZXIgaW4gdGhpcyBuZXcgcmVwb3NpdG9yeSwgYW5kIGl0IGhhcyBubyBwYXJlbnRzLCB3ZSBvbmx5IG5lZWQgdG8gcGFzcyBpbgotdGhlIG9iamVjdCBuYW1lIG9mIHRoZSB0cmVlLiBIb3dldmVyLCAnZ2l0LWNvbW1pdC10cmVlJyBhbHNvIHdhbnRzIHRvIGdldCBhCit0aGUgb2JqZWN0IG5hbWUgb2YgdGhlIHRyZWUuIEhvd2V2ZXIsICdnaXQgY29tbWl0LXRyZWUnIGFsc28gd2FudHMgdG8gZ2V0IGEKIGNvbW1pdCBtZXNzYWdlIG9uIGl0cyBzdGFuZGFyZCBpbnB1dCwgYW5kIGl0IHdpbGwgd3JpdGUgb3V0IHRoZSByZXN1bHRpbmcKIG9iamVjdCBuYW1lIGZvciB0aGUgY29tbWl0IHRvIGl0cyBzdGFuZGFyZCBvdXRwdXQuCiAKIEFuZCB0aGlzIGlzIHdoZXJlIHdlIGNyZWF0ZSB0aGUgYC5naXQvcmVmcy9oZWFkcy9tYXN0ZXJgIGZpbGUKIHdoaWNoIGlzIHBvaW50ZWQgYXQgYnkgYEhFQURgLiBUaGlzIGZpbGUgaXMgc3VwcG9zZWQgdG8gY29udGFpbgogdGhlIHJlZmVyZW5jZSB0byB0aGUgdG9wLW9mLXRyZWUgb2YgdGhlIG1hc3RlciBicmFuY2gsIGFuZCBzaW5jZQotdGhhdCdzIGV4YWN0bHkgd2hhdCAnZ2l0LWNvbW1pdC10cmVlJyBzcGl0cyBvdXQsIHdlIGNhbiBkbyB0aGlzCit0aGF0J3MgZXhhY3RseSB3aGF0ICdnaXQgY29tbWl0LXRyZWUnIHNwaXRzIG91dCwgd2UgY2FuIGRvIHRoaXMKIGFsbCB3aXRoIGEgc2VxdWVuY2Ugb2Ygc2ltcGxlIHNoZWxsIGNvbW1hbmRzOgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM0NSwxMSArMzUzLDExIEBACiBNYWtpbmcgYSBjaGFuZ2UKIC0tLS0tLS0tLS0tLS0tLQogCi1SZW1lbWJlciBob3cgd2UgZGlkIHRoZSAnZ2l0LXVwZGF0ZS1pbmRleCcgb24gZmlsZSBgaGVsbG9gIGFuZCB0aGVuIHdlCitSZW1lbWJlciBob3cgd2UgZGlkIHRoZSAnZ2l0IHVwZGF0ZS1pbmRleCcgb24gZmlsZSBgaGVsbG9gIGFuZCB0aGVuIHdlCiBjaGFuZ2VkIGBoZWxsb2AgYWZ0ZXJ3YXJkLCBhbmQgY291bGQgY29tcGFyZSB0aGUgbmV3IHN0YXRlIG9mIGBoZWxsb2Agd2l0aCB0aGUKIHN0YXRlIHdlIHNhdmVkIGluIHRoZSBpbmRleCBmaWxlPwogCi1GdXJ0aGVyLCByZW1lbWJlciBob3cgSSBzYWlkIHRoYXQgJ2dpdC13cml0ZS10cmVlJyB3cml0ZXMgdGhlIGNvbnRlbnRzCitGdXJ0aGVyLCByZW1lbWJlciBob3cgSSBzYWlkIHRoYXQgJ2dpdCB3cml0ZS10cmVlJyB3cml0ZXMgdGhlIGNvbnRlbnRzCiBvZiB0aGUgKmluZGV4KiBmaWxlIHRvIHRoZSB0cmVlLCBhbmQgdGh1cyB3aGF0IHdlIGp1c3QgY29tbWl0dGVkIHdhcyBpbgogZmFjdCB0aGUgKm9yaWdpbmFsKiBjb250ZW50cyBvZiB0aGUgZmlsZSBgaGVsbG9gLCBub3QgdGhlIG5ldyBvbmVzLiBXZSBkaWQKIHRoYXQgb24gcHVycG9zZSwgdG8gc2hvdyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBpbmRleCBzdGF0ZSwgYW5kIHRoZQpAQCAtMzYwLDEyICszNjgsMTIgQEAKIHdlJ2xsIHN0aWxsIHNlZSB0aGUgc2FtZSBkaWZmZXJlbmNlIHdlIHNhdyBsYXN0IHRpbWU6IHRoZSBpbmRleCBmaWxlCiBoYXNuJ3QgY2hhbmdlZCBieSB0aGUgYWN0IG9mIGNvbW1pdHRpbmcgYW55dGhpbmcuIEhvd2V2ZXIsIG5vdyB0aGF0IHdlCiBoYXZlIGNvbW1pdHRlZCBzb21ldGhpbmcsIHdlIGNhbiBhbHNvIGxlYXJuIHRvIHVzZSBhIG5ldyBjb21tYW5kOgotJ2dpdC1kaWZmLWluZGV4Jy4KKydnaXQgZGlmZi1pbmRleCcuCiAKLVVubGlrZSAnZ2l0LWRpZmYtZmlsZXMnLCB3aGljaCBzaG93ZWQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgaW5kZXgKLWZpbGUgYW5kIHRoZSB3b3JraW5nIHRyZWUsICdnaXQtZGlmZi1pbmRleCcgc2hvd3MgdGhlIGRpZmZlcmVuY2VzCitVbmxpa2UgJ2dpdCBkaWZmLWZpbGVzJywgd2hpY2ggc2hvd2VkIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGluZGV4CitmaWxlIGFuZCB0aGUgd29ya2luZyB0cmVlLCAnZ2l0IGRpZmYtaW5kZXgnIHNob3dzIHRoZSBkaWZmZXJlbmNlcwogYmV0d2VlbiBhIGNvbW1pdHRlZCAqdHJlZSogYW5kIGVpdGhlciB0aGUgaW5kZXggZmlsZSBvciB0aGUgd29ya2luZwotdHJlZS4gSW4gb3RoZXIgd29yZHMsICdnaXQtZGlmZi1pbmRleCcgd2FudHMgYSB0cmVlIHRvIGJlIGRpZmZlZAordHJlZS4gSW4gb3RoZXIgd29yZHMsICdnaXQgZGlmZi1pbmRleCcgd2FudHMgYSB0cmVlIHRvIGJlIGRpZmZlZAogYWdhaW5zdCwgYW5kIGJlZm9yZSB3ZSBkaWQgdGhlIGNvbW1pdCwgd2UgY291bGRuJ3QgZG8gdGhhdCwgYmVjYXVzZSB3ZQogZGlkbid0IGhhdmUgYW55dGhpbmcgdG8gZGlmZiBhZ2FpbnN0LgogCkBAIC0zNzUsNyArMzgzLDcgQEAKICQgZ2l0IGRpZmYtaW5kZXggLXAgSEVBRAogLS0tLS0tLS0tLS0tLS0tLQogCi0od2hlcmUgYC1wYCBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyBpdCBkaWQgaW4gJ2dpdC1kaWZmLWZpbGVzJyksIGFuZCBpdAorKHdoZXJlIGAtcGAgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgaXQgZGlkIGluICdnaXQgZGlmZi1maWxlcycpLCBhbmQgaXQKIHdpbGwgc2hvdyB1cyB0aGUgc2FtZSBkaWZmZXJlbmNlLCBidXQgZm9yIGEgdG90YWxseSBkaWZmZXJlbnQgcmVhc29uLgogTm93IHdlJ3JlIGNvbXBhcmluZyB0aGUgd29ya2luZyB0cmVlIG5vdCBhZ2FpbnN0IHRoZSBpbmRleCBmaWxlLAogYnV0IGFnYWluc3QgdGhlIHRyZWUgd2UganVzdCB3cm90ZS4gSXQganVzdCBzbyBoYXBwZW5zIHRoYXQgdGhvc2UgdHdvCkBAIC0zOTAsNyArMzk4LDcgQEAKIAogd2hpY2ggZW5kcyB1cCBkb2luZyB0aGUgYWJvdmUgZm9yIHlvdS4KIAotSW4gb3RoZXIgd29yZHMsICdnaXQtZGlmZi1pbmRleCcgbm9ybWFsbHkgY29tcGFyZXMgYSB0cmVlIGFnYWluc3QgdGhlCitJbiBvdGhlciB3b3JkcywgJ2dpdCBkaWZmLWluZGV4JyBub3JtYWxseSBjb21wYXJlcyBhIHRyZWUgYWdhaW5zdCB0aGUKIHdvcmtpbmcgdHJlZSwgYnV0IHdoZW4gZ2l2ZW4gdGhlIGBcLS1jYWNoZWRgIGZsYWcsIGl0IGlzIHRvbGQgdG8KIGluc3RlYWQgY29tcGFyZSBhZ2FpbnN0IGp1c3QgdGhlIGluZGV4IGNhY2hlIGNvbnRlbnRzLCBhbmQgaWdub3JlIHRoZQogY3VycmVudCB3b3JraW5nIHRyZWUgc3RhdGUgZW50aXJlbHkuIFNpbmNlIHdlIGp1c3Qgd3JvdGUgdGhlIGluZGV4CkBAIC0zOTksNyArNDA3LDcgQEAKIAogW05PVEVdCiA9PT09PT09PT09PT09PT09Ci0nZ2l0LWRpZmYtaW5kZXgnIHJlYWxseSBhbHdheXMgdXNlcyB0aGUgaW5kZXggZm9yIGl0cworJ2dpdCBkaWZmLWluZGV4JyByZWFsbHkgYWx3YXlzIHVzZXMgdGhlIGluZGV4IGZvciBpdHMKIGNvbXBhcmlzb25zLCBhbmQgc2F5aW5nIHRoYXQgaXQgY29tcGFyZXMgYSB0cmVlIGFnYWluc3QgdGhlIHdvcmtpbmcKIHRyZWUgaXMgdGh1cyBub3Qgc3RyaWN0bHkgYWNjdXJhdGUuIEluIHBhcnRpY3VsYXIsIHRoZSBsaXN0IG9mCiBmaWxlcyB0byBjb21wYXJlICh0aGUgIm1ldGEtZGF0YSIpICphbHdheXMqIGNvbWVzIGZyb20gdGhlIGluZGV4IGZpbGUsCkBAIC00MjgsMTEgKzQzNiwxMSBAQAogKG5vdGUgaG93IHdlIGRpZG4ndCBuZWVkIHRoZSBgXC0tYWRkYCBmbGFnIHRoaXMgdGltZSwgc2luY2UgZ2l0IGtuZXcKIGFib3V0IHRoZSBmaWxlIGFscmVhZHkpLgogCi1Ob3RlIHdoYXQgaGFwcGVucyB0byB0aGUgZGlmZmVyZW50ICdnaXQtZGlmZi1cKicgdmVyc2lvbnMgaGVyZS4gQWZ0ZXIKK05vdGUgd2hhdCBoYXBwZW5zIHRvIHRoZSBkaWZmZXJlbnQgJ2dpdCBkaWZmLVwqJyB2ZXJzaW9ucyBoZXJlLiBBZnRlcgogd2UndmUgdXBkYXRlZCBgaGVsbG9gIGluIHRoZSBpbmRleCwgYGdpdCBkaWZmLWZpbGVzIC1wYCBub3cgc2hvd3Mgbm8KIGRpZmZlcmVuY2VzLCBidXQgYGdpdCBkaWZmLWluZGV4IC1wIEhFQURgIHN0aWxsICpkb2VzKiBzaG93IHRoYXQgdGhlCiBjdXJyZW50IHN0YXRlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBzdGF0ZSB3ZSBjb21taXR0ZWQuIEluIGZhY3QsIG5vdwotJ2dpdC1kaWZmLWluZGV4JyBzaG93cyB0aGUgc2FtZSBkaWZmZXJlbmNlIHdoZXRoZXIgd2UgdXNlIHRoZSBgLS1jYWNoZWRgCisnZ2l0IGRpZmYtaW5kZXgnIHNob3dzIHRoZSBzYW1lIGRpZmZlcmVuY2Ugd2hldGhlciB3ZSB1c2UgdGhlIGAtLWNhY2hlZGAKIGZsYWcgb3Igbm90LCBzaW5jZSBub3cgdGhlIGluZGV4IGlzIGNvaGVyZW50IHdpdGggdGhlIHdvcmtpbmcgdHJlZS4KIAogTm93LCBzaW5jZSB3ZSd2ZSB1cGRhdGVkIGBoZWxsb2AgaW4gdGhlIGluZGV4LCB3ZSBjYW4gY29tbWl0IHRoZSBuZXcKQEAgLTQ2MCw3ICs0NjgsNyBAQAogbG9va2luZyBhdCB3aGF0IGBnaXQgY29tbWl0YCByZWFsbHkgZG9lcywgZmVlbCBmcmVlIHRvIGludmVzdGlnYXRlOgogaXQncyBhIGZldyB2ZXJ5IHNpbXBsZSBzaGVsbCBzY3JpcHRzIHRvIGdlbmVyYXRlIHRoZSBoZWxwZnVsICg/KSBjb21taXQKIG1lc3NhZ2UgaGVhZGVycywgYW5kIGEgZmV3IG9uZS1saW5lcnMgdGhhdCBhY3R1YWxseSBkbyB0aGUKLWNvbW1pdCBpdHNlbGYgKCdnaXQtY29tbWl0JykuCitjb21taXQgaXRzZWxmICgnZ2l0IGNvbW1pdCcpLgogCiAKIEluc3BlY3RpbmcgQ2hhbmdlcwpAQCAtNDY4LDkgKzQ3Niw5IEBACiAKIFdoaWxlIGNyZWF0aW5nIGNoYW5nZXMgaXMgdXNlZnVsLCBpdCdzIGV2ZW4gbW9yZSB1c2VmdWwgaWYgeW91IGNhbiB0ZWxsCiBsYXRlciB3aGF0IGNoYW5nZWQuIFRoZSBtb3N0IHVzZWZ1bCBjb21tYW5kIGZvciB0aGlzIGlzIGFub3RoZXIgb2YgdGhlCi0nZGlmZicgZmFtaWx5LCBuYW1lbHkgJ2dpdC1kaWZmLXRyZWUnLgorJ2RpZmYnIGZhbWlseSwgbmFtZWx5ICdnaXQgZGlmZi10cmVlJy4KIAotJ2dpdC1kaWZmLXRyZWUnIGNhbiBiZSBnaXZlbiB0d28gYXJiaXRyYXJ5IHRyZWVzLCBhbmQgaXQgd2lsbCB0ZWxsIHlvdSB0aGUKKydnaXQgZGlmZi10cmVlJyBjYW4gYmUgZ2l2ZW4gdHdvIGFyYml0cmFyeSB0cmVlcywgYW5kIGl0IHdpbGwgdGVsbCB5b3UgdGhlCiBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZW0uIFBlcmhhcHMgZXZlbiBtb3JlIGNvbW1vbmx5LCB0aG91Z2gsIHlvdSBjYW4KIGdpdmUgaXQganVzdCBhIHNpbmdsZSBjb21taXQgb2JqZWN0LCBhbmQgaXQgd2lsbCBmaWd1cmUgb3V0IHRoZSBwYXJlbnQKIG9mIHRoYXQgY29tbWl0IGl0c2VsZiwgYW5kIHNob3cgdGhlIGRpZmZlcmVuY2UgZGlyZWN0bHkuIFRodXMsIHRvIGdldApAQCAtNTE4LDE1ICs1MjYsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKwogPT09PT09PT09PT09CiAKLU1vcmUgaW50ZXJlc3RpbmdseSwgeW91IGNhbiBhbHNvIGdpdmUgJ2dpdC1kaWZmLXRyZWUnIHRoZSBgLS1wcmV0dHlgIGZsYWcsCitNb3JlIGludGVyZXN0aW5nbHksIHlvdSBjYW4gYWxzbyBnaXZlICdnaXQgZGlmZi10cmVlJyB0aGUgYC0tcHJldHR5YCBmbGFnLAogd2hpY2ggdGVsbHMgaXQgdG8gYWxzbyBzaG93IHRoZSBjb21taXQgbWVzc2FnZSBhbmQgYXV0aG9yIGFuZCBkYXRlIG9mIHRoZQogY29tbWl0LCBhbmQgeW91IGNhbiB0ZWxsIGl0IHRvIHNob3cgYSB3aG9sZSBzZXJpZXMgb2YgZGlmZnMuCiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHRlbGwgaXQgdG8gYmUgInNpbGVudCIsIGFuZCBub3Qgc2hvdyB0aGUgZGlmZnMgYXQKIGFsbCwgYnV0IGp1c3Qgc2hvdyB0aGUgYWN0dWFsIGNvbW1pdCBtZXNzYWdlLgogCi1JbiBmYWN0LCB0b2dldGhlciB3aXRoIHRoZSAnZ2l0LXJldi1saXN0JyBwcm9ncmFtICh3aGljaCBnZW5lcmF0ZXMgYQotbGlzdCBvZiByZXZpc2lvbnMpLCAnZ2l0LWRpZmYtdHJlZScgZW5kcyB1cCBiZWluZyBhIHZlcml0YWJsZSBmb3VudCBvZgotY2hhbmdlcy4gQSB0cml2aWFsIChidXQgdmVyeSB1c2VmdWwpIHNjcmlwdCBjYWxsZWQgJ2dpdC13aGF0Y2hhbmdlZCcgaXMKK0luIGZhY3QsIHRvZ2V0aGVyIHdpdGggdGhlICdnaXQgcmV2LWxpc3QnIHByb2dyYW0gKHdoaWNoIGdlbmVyYXRlcyBhCitsaXN0IG9mIHJldmlzaW9ucyksICdnaXQgZGlmZi10cmVlJyBlbmRzIHVwIGJlaW5nIGEgdmVyaXRhYmxlIGZvdW50IG9mCitjaGFuZ2VzLiBBIHRyaXZpYWwgKGJ1dCB2ZXJ5IHVzZWZ1bCkgc2NyaXB0IGNhbGxlZCAnZ2l0IHdoYXRjaGFuZ2VkJyBpcwogaW5jbHVkZWQgd2l0aCBnaXQgd2hpY2ggZG9lcyBleGFjdGx5IHRoaXMsIGFuZCBzaG93cyBhIGxvZyBvZiByZWNlbnQKIGFjdGl2aXRpZXMuCiAKQEAgLTU1MywxNCArNTYxLDE0IEBACiBJZiB0aGlzIGlzIGEgcHJvYmxlbSBiZWNhdXNlIGl0IGlzIGh1Z2UsIHlvdSBjYW4gaGlkZSBpdCBieSBzZXR0aW5nCiB0aGUgbG9nLnNob3dyb290IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gZmFsc2UuIEhhdmluZyB0aGlzLCB5b3UKIGNhbiBzdGlsbCBzaG93IGl0IGZvciBlYWNoIGNvbW1hbmQganVzdCBhZGRpbmcgdGhlIGBcLS1yb290YCBvcHRpb24sCi13aGljaCBpcyBhIGZsYWcgZm9yICdnaXQtZGlmZi10cmVlJyBhY2NlcHRlZCBieSBib3RoIGNvbW1hbmRzLgord2hpY2ggaXMgYSBmbGFnIGZvciAnZ2l0IGRpZmYtdHJlZScgYWNjZXB0ZWQgYnkgYm90aCBjb21tYW5kcy4KIAogV2l0aCB0aGF0LCB5b3Ugc2hvdWxkIG5vdyBiZSBoYXZpbmcgc29tZSBpbmtsaW5nIG9mIHdoYXQgZ2l0IGRvZXMsIGFuZAogY2FuIGV4cGxvcmUgb24geW91ciBvd24uCiAKIFtOT1RFXQogTW9zdCBsaWtlbHksIHlvdSBhcmUgbm90IGRpcmVjdGx5IHVzaW5nIHRoZSBjb3JlCi1naXQgUGx1bWJpbmcgY29tbWFuZHMsIGJ1dCB1c2luZyBQb3JjZWxhaW4gc3VjaCBhcyAnZ2l0LWFkZCcsIGBnaXQtcm0nCitnaXQgUGx1bWJpbmcgY29tbWFuZHMsIGJ1dCB1c2luZyBQb3JjZWxhaW4gc3VjaCBhcyAnZ2l0IGFkZCcsIGBnaXQtcm0nCiBhbmQgYGdpdC1jb21taXQnLgogCiAKQEAgLTU5NSwxNCArNjAzLDE0IEBACiBtZXNzYWdlLCBhbG9uZyB3aXRoIG9wdGlvbmFsbHkgYSBQR1Agc2lnbmF0dXJlIHRoYXQgc2F5cyB0aGF0IHllcywKIHlvdSByZWFsbHkgZGlkCiB0aGF0IHRhZy4gWW91IGNyZWF0ZSB0aGVzZSBhbm5vdGF0ZWQgdGFncyB3aXRoIGVpdGhlciB0aGUgYC1hYCBvcgotYC1zYCBmbGFnIHRvICdnaXQtdGFnJzoKK2Atc2AgZmxhZyB0byAnZ2l0IHRhZyc6CiAKIC0tLS0tLS0tLS0tLS0tLS0KICQgZ2l0IHRhZyAtcyA8dGFnbmFtZT4KIC0tLS0tLS0tLS0tLS0tLS0KIAogd2hpY2ggd2lsbCBzaWduIHRoZSBjdXJyZW50IGBIRUFEYCAoYnV0IHlvdSBjYW4gYWxzbyBnaXZlIGl0IGFub3RoZXIKLWFyZ3VtZW50IHRoYXQgc3BlY2lmaWVzIHRoZSB0aGluZyB0byB0YWcsIGkuZS4sIHlvdSBjb3VsZCBoYXZlIHRhZ2dlZCB0aGUKK2FyZ3VtZW50IHRoYXQgc3BlY2lmaWVzIHRoZSB0aGluZyB0byB0YWcsIGUuZy4sIHlvdSBjb3VsZCBoYXZlIHRhZ2dlZCB0aGUKIGN1cnJlbnQgYG15YnJhbmNoYCBwb2ludCBieSB1c2luZyBgZ2l0IHRhZyA8dGFnbmFtZT4gbXlicmFuY2hgKS4KIAogWW91IG5vcm1hbGx5IG9ubHkgZG8gc2lnbmVkIHRhZ3MgZm9yIG1ham9yIHJlbGVhc2VzIG9yIHRoaW5ncwpAQCAtNjQyLDcgKzY1MCw3IEBACiBoaXN0b3J5IG91dHNpZGUgdGhlIHByb2plY3QgeW91IGNyZWF0ZWQuCiAKICAtIGlmIHlvdSB3YW50IHRvIG1vdmUgb3IgZHVwbGljYXRlIGEgZ2l0IHJlcG9zaXRvcnksIHlvdSBjYW4gZG8gc28uIFRoZXJlCi0gICBpcyAnZ2l0LWNsb25lJyBjb21tYW5kLCBidXQgaWYgYWxsIHlvdSB3YW50IHRvIGRvIGlzIGp1c3QgdG8KKyAgIGlzICdnaXQgY2xvbmUnIGNvbW1hbmQsIGJ1dCBpZiBhbGwgeW91IHdhbnQgdG8gZG8gaXMganVzdCB0bwogICAgY3JlYXRlIGEgY29weSBvZiB5b3VyIHJlcG9zaXRvcnkgKHdpdGggYWxsIHRoZSBmdWxsIGhpc3RvcnkgdGhhdAogICAgd2VudCBhbG9uZyB3aXRoIGl0KSwgeW91IGNhbiBkbyBzbyB3aXRoIGEgcmVndWxhcgogICAgYGNwIC1hIGdpdC10dXRvcmlhbCBuZXctZ2l0LXR1dG9yaWFsYC4KQEAgLTY2Niw3ICs2NzQsNyBAQAogaW5kZXggY2FjaGUgd2hlbiB5b3UgZG8gdGhpcywgYW5kIGVzcGVjaWFsbHkgd2l0aCBvdGhlciBwZW9wbGVzJwogcmVwb3NpdG9yaWVzIHlvdSBvZnRlbiB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpbmRleCBjYWNoZSBpcyBpbiBzb21lCiBrbm93biBzdGF0ZSAoeW91IGRvbid0IGtub3cgKndoYXQqIHRoZXkndmUgZG9uZSBhbmQgbm90IHlldCBjaGVja2VkIGluKSwKLXNvIHVzdWFsbHkgeW91J2xsIHByZWNlZGUgdGhlICdnaXQtdXBkYXRlLWluZGV4JyB3aXRoIGEKK3NvIHVzdWFsbHkgeW91J2xsIHByZWNlZGUgdGhlICdnaXQgdXBkYXRlLWluZGV4JyB3aXRoIGEKIAogLS0tLS0tLS0tLS0tLS0tLQogJCBnaXQgcmVhZC10cmVlIC0tcmVzZXQgSEVBRApAQCAtNjc0LDcgKzY4Miw3IEBACiAtLS0tLS0tLS0tLS0tLS0tCiAKIHdoaWNoIHdpbGwgZm9yY2UgYSB0b3RhbCBpbmRleCByZS1idWlsZCBmcm9tIHRoZSB0cmVlIHBvaW50ZWQgdG8gYnkgYEhFQURgLgotSXQgcmVzZXRzIHRoZSBpbmRleCBjb250ZW50cyB0byBgSEVBRGAsIGFuZCB0aGVuIHRoZSAnZ2l0LXVwZGF0ZS1pbmRleCcKK0l0IHJlc2V0cyB0aGUgaW5kZXggY29udGVudHMgdG8gYEhFQURgLCBhbmQgdGhlbiB0aGUgJ2dpdCB1cGRhdGUtaW5kZXgnCiBtYWtlcyBzdXJlIHRvIG1hdGNoIHVwIGFsbCBpbmRleCBlbnRyaWVzIHdpdGggdGhlIGNoZWNrZWQtb3V0IGZpbGVzLgogSWYgdGhlIG9yaWdpbmFsIHJlcG9zaXRvcnkgaGFkIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4gaXRzCiB3b3JraW5nIHRyZWUsIGBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaGAgbm90aWNlcyB0aGVtIGFuZApAQCAtNjg5LDggKzY5Nyw4IEBACiBhbmQgaW4gZmFjdCBhIGxvdCBvZiB0aGUgY29tbW9uIGdpdCBjb21tYW5kIGNvbWJpbmF0aW9ucyBjYW4gYmUgc2NyaXB0ZWQKIHdpdGggdGhlIGBnaXQgeHl6YCBpbnRlcmZhY2VzLiAgWW91IGNhbiBsZWFybiB0aGluZ3MgYnkganVzdCBsb29raW5nCiBhdCB3aGF0IHRoZSB2YXJpb3VzIGdpdCBzY3JpcHRzIGRvLiAgRm9yIGV4YW1wbGUsIGBnaXQgcmVzZXRgIHVzZWQgdG8gYmUKLXRoZSBhYm92ZSB0d28gbGluZXMgaW1wbGVtZW50ZWQgaW4gJ2dpdC1yZXNldCcsIGJ1dCBzb21lIHRoaW5ncyBsaWtlCi0nZ2l0LXN0YXR1cycgYW5kICdnaXQtY29tbWl0JyBhcmUgc2xpZ2h0bHkgbW9yZSBjb21wbGV4IHNjcmlwdHMgYXJvdW5kCit0aGUgYWJvdmUgdHdvIGxpbmVzIGltcGxlbWVudGVkIGluICdnaXQgcmVzZXQnLCBidXQgc29tZSB0aGluZ3MgbGlrZQorJ2dpdCBzdGF0dXMnIGFuZCAnZ2l0IGNvbW1pdCcgYXJlIHNsaWdodGx5IG1vcmUgY29tcGxleCBzY3JpcHRzIGFyb3VuZAogdGhlIGJhc2ljIGdpdCBjb21tYW5kcy4KIAogTWFueSAobW9zdD8pIHB1YmxpYyByZW1vdGUgcmVwb3NpdG9yaWVzIHdpbGwgbm90IGNvbnRhaW4gYW55IG9mCkBAIC03MjksNyArNzM3LDcgQEAKIHVwLXRvLWRhdGUgKHNvIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gcmVmcmVzaCBpdCBhZnRlcndhcmQpLCBhbmQgdGhlCiBgLWFgIGZsYWcgbWVhbnMgImNoZWNrIG91dCBhbGwgZmlsZXMiIChpZiB5b3UgaGF2ZSBhIHN0YWxlIGNvcHkgb3IgYW4KIG9sZGVyIHZlcnNpb24gb2YgYSBjaGVja2VkIG91dCB0cmVlIHlvdSBtYXkgYWxzbyBuZWVkIHRvIGFkZCB0aGUgYC1mYAotZmxhZyBmaXJzdCwgdG8gdGVsbCAnZ2l0LWNoZWNrb3V0LWluZGV4JyB0byAqZm9yY2UqIG92ZXJ3cml0aW5nIG9mIGFueSBvbGQKK2ZsYWcgZmlyc3QsIHRvIHRlbGwgJ2dpdCBjaGVja291dC1pbmRleCcgdG8gKmZvcmNlKiBvdmVyd3JpdGluZyBvZiBhbnkgb2xkCiBmaWxlcykuCiAKIEFnYWluLCB0aGlzIGNhbiBhbGwgYmUgc2ltcGxpZmllZCB3aXRoCkBAIC03NzYsNyArNzg0LDcgQEAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogSWYgeW91IG1ha2UgdGhlIGRlY2lzaW9uIHRvIHN0YXJ0IHlvdXIgbmV3IGJyYW5jaCBhdCBzb21lCiBvdGhlciBwb2ludCBpbiB0aGUgaGlzdG9yeSB0aGFuIHRoZSBjdXJyZW50IGBIRUFEYCwgeW91IGNhbiBkbyBzbyBieQotanVzdCB0ZWxsaW5nICdnaXQtY2hlY2tvdXQnIHdoYXQgdGhlIGJhc2Ugb2YgdGhlIGNoZWNrb3V0IHdvdWxkIGJlLgoranVzdCB0ZWxsaW5nICdnaXQgY2hlY2tvdXQnIHdoYXQgdGhlIGJhc2Ugb2YgdGhlIGNoZWNrb3V0IHdvdWxkIGJlLgogSW4gb3RoZXIgd29yZHMsIGlmIHlvdSBoYXZlIGFuIGVhcmxpZXIgdGFnIG9yIGJyYW5jaCwgeW91J2QganVzdCBkbwogCiAtLS0tLS0tLS0tLS0KQEAgLTgxOSw3ICs4MjcsNyBAQAogCiB3aGljaCB3aWxsIHNpbXBseSBfY3JlYXRlXyB0aGUgYnJhbmNoLCBidXQgd2lsbCBub3QgZG8gYW55dGhpbmcgZnVydGhlci4KIFlvdSBjYW4gdGhlbiBsYXRlciAtLSBvbmNlIHlvdSBkZWNpZGUgdGhhdCB5b3Ugd2FudCB0byBhY3R1YWxseSBkZXZlbG9wCi1vbiB0aGF0IGJyYW5jaCAtLSBzd2l0Y2ggdG8gdGhhdCBicmFuY2ggd2l0aCBhIHJlZ3VsYXIgJ2dpdC1jaGVja291dCcKK29uIHRoYXQgYnJhbmNoIC0tIHN3aXRjaCB0byB0aGF0IGJyYW5jaCB3aXRoIGEgcmVndWxhciAnZ2l0IGNoZWNrb3V0Jwogd2l0aCB0aGUgYnJhbmNobmFtZSBhcyB0aGUgYXJndW1lbnQuCiAKIApAQCAtODgxLDcgKzg4OSw3IEBACiBBbnl3YXksIGxldCdzIGV4aXQgJ2dpdGsnIChgXlFgIG9yIHRoZSBGaWxlIG1lbnUpLCBhbmQgZGVjaWRlIHRoYXQgd2Ugd2FudAogdG8gbWVyZ2UgdGhlIHdvcmsgd2UgZGlkIG9uIHRoZSBgbXlicmFuY2hgIGJyYW5jaCBpbnRvIHRoZSBgbWFzdGVyYAogYnJhbmNoICh3aGljaCBpcyBjdXJyZW50bHkgb3VyIGBIRUFEYCB0b28pLiBUbyBkbyB0aGF0LCB0aGVyZSdzIGEgbmljZQotc2NyaXB0IGNhbGxlZCAnZ2l0LW1lcmdlJywgd2hpY2ggd2FudHMgdG8ga25vdyB3aGljaCBicmFuY2hlcyB5b3Ugd2FudAorc2NyaXB0IGNhbGxlZCAnZ2l0IG1lcmdlJywgd2hpY2ggd2FudHMgdG8ga25vdyB3aGljaCBicmFuY2hlcyB5b3Ugd2FudAogdG8gcmVzb2x2ZSBhbmQgd2hhdCB0aGUgbWVyZ2UgaXMgYWxsIGFib3V0OgogCiAtLS0tLS0tLS0tLS0KQEAgLTkyNSw3ICs5MzMsNyBAQAogCiB3aGljaCB3aWxsIHZlcnkgbG91ZGx5IHdhcm4geW91IHRoYXQgeW91J3JlIG5vdyBjb21taXR0aW5nIGEgbWVyZ2UKICh3aGljaCBpcyBjb3JyZWN0LCBzbyBuZXZlciBtaW5kKSwgYW5kIHlvdSBjYW4gd3JpdGUgYSBzbWFsbCBtZXJnZQotbWVzc2FnZSBhYm91dCB5b3VyIGFkdmVudHVyZXMgaW4gJ2dpdC1tZXJnZSctbGFuZC4KK21lc3NhZ2UgYWJvdXQgeW91ciBhZHZlbnR1cmVzIGluICdnaXQgbWVyZ2UnLWxhbmQuCiAKIEFmdGVyIHlvdSdyZSBkb25lLCBzdGFydCB1cCBgZ2l0ayBcLS1hbGxgIHRvIHNlZSBncmFwaGljYWxseSB3aGF0IHRoZQogaGlzdG9yeSBsb29rcyBsaWtlLiBOb3RpY2UgdGhhdCBgbXlicmFuY2hgIHN0aWxsIGV4aXN0cywgYW5kIHlvdSBjYW4KQEAgLTk2NywyMSArOTc1LDIxIEBACiBzZWUgbW9yZSBjb21wbGV4IGNhc2VzLgogCiBbTk9URV0KLVdpdGhvdXQgdGhlICctLW1vcmU9MScgb3B0aW9uLCAnZ2l0LXNob3ctYnJhbmNoJyB3b3VsZCBub3Qgb3V0cHV0IHRoZQorV2l0aG91dCB0aGUgJy0tbW9yZT0xJyBvcHRpb24sICdnaXQgc2hvdy1icmFuY2gnIHdvdWxkIG5vdCBvdXRwdXQgdGhlCiAnW21hc3Rlcl5dJyBjb21taXQsIGFzICdbbXlicmFuY2hdJyBjb21taXQgaXMgYSBjb21tb24gYW5jZXN0b3Igb2YKIGJvdGggJ21hc3RlcicgYW5kICdteWJyYW5jaCcgdGlwcy4gIFBsZWFzZSBzZWUgbGlua2dpdDpnaXQtc2hvdy1icmFuY2hbMV0KIGZvciBkZXRhaWxzLgogCiBbTk9URV0KIElmIHRoZXJlIHdlcmUgbW9yZSBjb21taXRzIG9uIHRoZSAnbWFzdGVyJyBicmFuY2ggYWZ0ZXIgdGhlIG1lcmdlLCB0aGUKLW1lcmdlIGNvbW1pdCBpdHNlbGYgd291bGQgbm90IGJlIHNob3duIGJ5ICdnaXQtc2hvdy1icmFuY2gnIGJ5CittZXJnZSBjb21taXQgaXRzZWxmIHdvdWxkIG5vdCBiZSBzaG93biBieSAnZ2l0IHNob3ctYnJhbmNoJyBieQogZGVmYXVsdC4gIFlvdSB3b3VsZCBuZWVkIHRvIHByb3ZpZGUgJy0tc3BhcnNlJyBvcHRpb24gdG8gbWFrZSB0aGUKIG1lcmdlIGNvbW1pdCB2aXNpYmxlIGluIHRoaXMgY2FzZS4KIAogTm93LCBsZXQncyBwcmV0ZW5kIHlvdSBhcmUgdGhlIG9uZSB3aG8gZGlkIGFsbCB0aGUgd29yayBpbgogYG15YnJhbmNoYCwgYW5kIHRoZSBmcnVpdCBvZiB5b3VyIGhhcmQgd29yayBoYXMgZmluYWxseSBiZWVuIG1lcmdlZAogdG8gdGhlIGBtYXN0ZXJgIGJyYW5jaC4gTGV0J3MgZ28gYmFjayB0byBgbXlicmFuY2hgLCBhbmQgcnVuCi0nZ2l0LW1lcmdlJyB0byBnZXQgdGhlICJ1cHN0cmVhbSBjaGFuZ2VzIiBiYWNrIHRvIHlvdXIgYnJhbmNoLgorJ2dpdCBtZXJnZScgdG8gZ2V0IHRoZSAidXBzdHJlYW0gY2hhbmdlcyIgYmFjayB0byB5b3VyIGJyYW5jaC4KIAogLS0tLS0tLS0tLS0tCiAkIGdpdCBjaGVja291dCBteWJyYW5jaApAQCAtOTkzLDcgKzEwMDEsNyBAQAogCiAtLS0tLS0tLS0tLS0tLS0tCiBVcGRhdGluZyBmcm9tIGFlM2EyZGEuLi4gdG8gYTgwYjRhYS4uLi4KLUZhc3QgZm9yd2FyZCAobm8gY29tbWl0IGNyZWF0ZWQ7IC1tIG9wdGlvbiBpZ25vcmVkKQorRmFzdC1mb3J3YXJkIChubyBjb21taXQgY3JlYXRlZDsgLW0gb3B0aW9uIGlnbm9yZWQpCiAgZXhhbXBsZSB8ICAgIDEgKwogIGhlbGxvICAgfCAgICAxICsKICAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKQEAgLTEwMDMsNyArMTAxMSw3IEBACiBhbHJlYWR5IGJlZW4gbWVyZ2VkIGludG8gdGhlIGBtYXN0ZXJgIGJyYW5jaCwgdGhlIG1lcmdlIG9wZXJhdGlvbiBkaWQKIG5vdCBhY3R1YWxseSBkbyBhIG1lcmdlLiBJbnN0ZWFkLCBpdCBqdXN0IHVwZGF0ZWQgdGhlIHRvcCBvZgogdGhlIHRyZWUgb2YgeW91ciBicmFuY2ggdG8gdGhhdCBvZiB0aGUgYG1hc3RlcmAgYnJhbmNoLiBUaGlzIGlzCi1vZnRlbiBjYWxsZWQgJ2Zhc3QgZm9yd2FyZCcgbWVyZ2UuCitvZnRlbiBjYWxsZWQgJ2Zhc3QtZm9yd2FyZCcgbWVyZ2UuCiAKIFlvdSBjYW4gcnVuIGBnaXRrIFwtLWFsbGAgYWdhaW4gdG8gc2VlIGhvdyB0aGUgY29tbWl0IGFuY2VzdHJ5CiBsb29rcyBsaWtlLCBvciBydW4gJ3Nob3ctYnJhbmNoJywgd2hpY2ggdGVsbHMgeW91IHRoaXMuCkBAIC0xMDIzLDEyICsxMDMxLDEyIEBACiBJdCdzIHVzdWFsbHkgbXVjaCBtb3JlIGNvbW1vbiB0aGF0IHlvdSBtZXJnZSB3aXRoIHNvbWVib2R5IGVsc2UgdGhhbgogbWVyZ2luZyB3aXRoIHlvdXIgb3duIGJyYW5jaGVzLCBzbyBpdCdzIHdvcnRoIHBvaW50aW5nIG91dCB0aGF0IGdpdAogbWFrZXMgdGhhdCB2ZXJ5IGVhc3kgdG9vLCBhbmQgaW4gZmFjdCwgaXQncyBub3QgdGhhdCBkaWZmZXJlbnQgZnJvbQotZG9pbmcgYSAnZ2l0LW1lcmdlJy4gSW4gZmFjdCwgYSByZW1vdGUgbWVyZ2UgZW5kcyB1cCBiZWluZyBub3RoaW5nCitkb2luZyBhICdnaXQgbWVyZ2UnLiBJbiBmYWN0LCBhIHJlbW90ZSBtZXJnZSBlbmRzIHVwIGJlaW5nIG5vdGhpbmcKIG1vcmUgdGhhbiAiZmV0Y2ggdGhlIHdvcmsgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5IGludG8gYSB0ZW1wb3JhcnkgdGFnIgotZm9sbG93ZWQgYnkgYSAnZ2l0LW1lcmdlJy4KK2ZvbGxvd2VkIGJ5IGEgJ2dpdCBtZXJnZScuCiAKIEZldGNoaW5nIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSBpcyBkb25lIGJ5LCB1bnN1cnByaXNpbmdseSwKLSdnaXQtZmV0Y2gnOgorJ2dpdCBmZXRjaCc6CiAKIC0tLS0tLS0tLS0tLS0tLS0KICQgZ2l0IGZldGNoIDxyZW1vdGUtcmVwb3NpdG9yeT4KQEAgLTEwOTUsNyArMTEwMyw3IEBACiB0cmFuc3BvcnRzJywgYmVjYXVzZSB0aGV5IGRvIG5vdCByZXF1aXJlIGFueSBnaXQgYXdhcmUgc21hcnQKIHNlcnZlciBsaWtlIGdpdCBOYXRpdmUgdHJhbnNwb3J0IGRvZXMuICBBbnkgc3RvY2sgSFRUUCBzZXJ2ZXIKIHRoYXQgZG9lcyBub3QgZXZlbiBzdXBwb3J0IGRpcmVjdG9yeSBpbmRleCB3b3VsZCBzdWZmaWNlLiAgQnV0Ci15b3UgbXVzdCBwcmVwYXJlIHlvdXIgcmVwb3NpdG9yeSB3aXRoICdnaXQtdXBkYXRlLXNlcnZlci1pbmZvJworeW91IG11c3QgcHJlcGFyZSB5b3VyIHJlcG9zaXRvcnkgd2l0aCAnZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbycKIHRvIGhlbHAgZHVtYiB0cmFuc3BvcnQgZG93bmxvYWRlcnMuCiAKIE9uY2UgeW91IGZldGNoIGZyb20gdGhlIHJlbW90ZSByZXBvc2l0b3J5LCB5b3UgYG1lcmdlYCB0aGF0CkBAIC0xMTE1LDcgKzExMjMsNyBAQAogW05PVEVdCiBZb3UgY291bGQgZG8gd2l0aG91dCB1c2luZyBhbnkgYnJhbmNoZXMgYXQgYWxsLCBieQoga2VlcGluZyBhcyBtYW55IGxvY2FsIHJlcG9zaXRvcmllcyBhcyB5b3Ugd291bGQgbGlrZSB0byBoYXZlCi1icmFuY2hlcywgYW5kIG1lcmdpbmcgYmV0d2VlbiB0aGVtIHdpdGggJ2dpdC1wdWxsJywganVzdCBsaWtlCiticmFuY2hlcywgYW5kIG1lcmdpbmcgYmV0d2VlbiB0aGVtIHdpdGggJ2dpdCBwdWxsJywganVzdCBsaWtlCiB5b3UgbWVyZ2UgYmV0d2VlbiBicmFuY2hlcy4gVGhlIGFkdmFudGFnZSBvZiB0aGlzIGFwcHJvYWNoIGlzCiB0aGF0IGl0IGxldHMgeW91IGtlZXAgYSBzZXQgb2YgZmlsZXMgZm9yIGVhY2ggYGJyYW5jaGAgY2hlY2tlZAogb3V0IGFuZCB5b3UgbWF5IGZpbmQgaXQgZWFzaWVyIHRvIHN3aXRjaCBiYWNrIGFuZCBmb3J0aCBpZiB5b3UKQEAgLTExMzIsNyArMTE0MCw3IEBACiAkIGdpdCBjb25maWcgcmVtb3RlLmxpbnVzLnVybCBodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL3NjbS9naXQvZ2l0LmdpdC8KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1hbmQgdXNlIHRoZSAibGludXMiIGtleXdvcmQgd2l0aCAnZ2l0LXB1bGwnIGluc3RlYWQgb2YgdGhlIGZ1bGwgVVJMLgorYW5kIHVzZSB0aGUgImxpbnVzIiBrZXl3b3JkIHdpdGggJ2dpdCBwdWxsJyBpbnN0ZWFkIG9mIHRoZSBmdWxsIFVSTC4KIAogRXhhbXBsZXMuCiAKQEAgLTExNjgsNyArMTE3Niw3IEBACiArKiBbbWFzdGVyXl0gU29tZSBmdW4uCiAtLS0tLS0tLS0tLS0KIAotUmVtZW1iZXIsIGJlZm9yZSBydW5uaW5nICdnaXQtbWVyZ2UnLCBvdXIgYG1hc3RlcmAgaGVhZCB3YXMgYXQKK1JlbWVtYmVyLCBiZWZvcmUgcnVubmluZyAnZ2l0IG1lcmdlJywgb3VyIGBtYXN0ZXJgIGhlYWQgd2FzIGF0CiAiU29tZSBmdW4uIiBjb21taXQsIHdoaWxlIG91ciBgbXlicmFuY2hgIGhlYWQgd2FzIGF0ICJTb21lCiB3b3JrLiIgY29tbWl0LgogCkBAIC0xMTg2LDE2ICsxMTk0LDE2IEBACiAqIFttYXN0ZXJdIFNvbWUgZnVuLgogICEgW215YnJhbmNoXSBTb21lIHdvcmsuCiAtLQotICsgW215YnJhbmNoXSBTb21lIHdvcmsuCiAqICBbbWFzdGVyXSBTb21lIGZ1bi4KLSorIFtteWJyYW5jaF5dIE5ldyBkYXkuCisgKyBbbXlicmFuY2hdIFNvbWUgd29yay4KKyorIFttYXN0ZXJeXSBJbml0aWFsIGNvbW1pdAogLS0tLS0tLS0tLS0tCiAKIE5vdyB3ZSBhcmUgcmVhZHkgdG8gZXhwZXJpbWVudCB3aXRoIHRoZSBtZXJnZSBieSBoYW5kLgogCiBgZ2l0IG1lcmdlYCBjb21tYW5kLCB3aGVuIG1lcmdpbmcgdHdvIGJyYW5jaGVzLCB1c2VzIDMtd2F5IG1lcmdlCiBhbGdvcml0aG0uICBGaXJzdCwgaXQgZmluZHMgdGhlIGNvbW1vbiBhbmNlc3RvciBiZXR3ZWVuIHRoZW0uCi1UaGUgY29tbWFuZCBpdCB1c2VzIGlzICdnaXQtbWVyZ2UtYmFzZSc6CitUaGUgY29tbWFuZCBpdCB1c2VzIGlzICdnaXQgbWVyZ2UtYmFzZSc6CiAKIC0tLS0tLS0tLS0tLQogJCBtYj0kKGdpdCBtZXJnZS1iYXNlIEhFQUQgbXlicmFuY2gpCkBAIC0xMjA0LDExICsxMjEyLDExIEBACiBUaGUgY29tbWFuZCB3cml0ZXMgdGhlIGNvbW1pdCBvYmplY3QgbmFtZSBvZiB0aGUgY29tbW9uIGFuY2VzdG9yCiB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LCBzbyB3ZSBjYXB0dXJlZCBpdHMgb3V0cHV0IHRvIGEgdmFyaWFibGUsCiBiZWNhdXNlIHdlIHdpbGwgYmUgdXNpbmcgaXQgaW4gdGhlIG5leHQgc3RlcC4gIEJ5IHRoZSB3YXksIHRoZSBjb21tb24KLWFuY2VzdG9yIGNvbW1pdCBpcyB0aGUgIk5ldyBkYXkuIiBjb21taXQgaW4gdGhpcyBjYXNlLiAgWW91IGNhbgorYW5jZXN0b3IgY29tbWl0IGlzIHRoZSAiSW5pdGlhbCBjb21taXQiIGNvbW1pdCBpbiB0aGlzIGNhc2UuICBZb3UgY2FuCiB0ZWxsIGl0IGJ5OgogCiAtLS0tLS0tLS0tLS0KLSQgZ2l0IG5hbWUtcmV2ICRtYgorJCBnaXQgbmFtZS1yZXYgLS1uYW1lLW9ubHkgLS10YWdzICRtYgogbXktZmlyc3QtdGFnCiAtLS0tLS0tLS0tLS0KIApAQCAtMTIxOSw3ICsxMjI3LDcgQEAKICQgZ2l0IHJlYWQtdHJlZSAtbSAtdSAkbWIgSEVBRCBteWJyYW5jaAogLS0tLS0tLS0tLS0tCiAKLVRoaXMgaXMgdGhlIHNhbWUgJ2dpdC1yZWFkLXRyZWUnIGNvbW1hbmQgd2UgaGF2ZSBhbHJlYWR5IHNlZW4sCitUaGlzIGlzIHRoZSBzYW1lICdnaXQgcmVhZC10cmVlJyBjb21tYW5kIHdlIGhhdmUgYWxyZWFkeSBzZWVuLAogYnV0IGl0IHRha2VzIHRocmVlIHRyZWVzLCB1bmxpa2UgcHJldmlvdXMgZXhhbXBsZXMuICBUaGlzIHJlYWRzCiB0aGUgY29udGVudHMgb2YgZWFjaCB0cmVlIGludG8gZGlmZmVyZW50ICdzdGFnZScgaW4gdGhlIGluZGV4CiBmaWxlICh0aGUgZmlyc3QgdHJlZSBnb2VzIHRvIHN0YWdlIDEsIHRoZSBzZWNvbmQgdG8gc3RhZ2UgMiwKQEAgLTEyMzcsOCArMTI0NSw4IEBACiAtLS0tLS0tLS0tLS0KICQgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UKIDEwMDY0NCA3ZjhiMTQxYjY1ZmRjZWU0NzMyMWUzOTlhMjU5OGEyMzVhMDMyNDIyIDAJZXhhbXBsZQotMTAwNjQ0IDI2MzQxNGY0MjNkMGU0ZDcwZGFlOGZlNTNmYTM0NjE0ZmYzZTI4NjAgMQloZWxsbwotMTAwNjQ0IDA2ZmE2YTI0MjU2ZGM3ZTU2MGVmYTU2ODdmYTg0YjUxZjAyNjNjM2EgMgloZWxsbworMTAwNjQ0IDU1N2RiMDNkZTk5N2M4NmE0YTAyOGUxZWJkM2ExY2ViMjI1YmUyMzggMQloZWxsbworMTAwNjQ0IGJhNDJhMmE5NmUzMDI3ZjMzMzNlMTNlZGU0Y2NmNDQ5OGMzYWU5NDIgMgloZWxsbwogMTAwNjQ0IGNjNDRjNzNlYjc4MzU2NWRhNTgzMWI0ZDgyMGM5NjI5NTQwMTliNjkgMwloZWxsbwogLS0tLS0tLS0tLS0tCiAKQEAgLTEyNTMsMTUgKzEyNjEsMTUgQEAKIAogLS0tLS0tLS0tLS0tCiAkIGdpdCBscy1maWxlcyAtLXVubWVyZ2VkCi0xMDA2NDQgMjYzNDE0ZjQyM2QwZTRkNzBkYWU4ZmU1M2ZhMzQ2MTRmZjNlMjg2MCAxCWhlbGxvCi0xMDA2NDQgMDZmYTZhMjQyNTZkYzdlNTYwZWZhNTY4N2ZhODRiNTFmMDI2M2MzYSAyCWhlbGxvCisxMDA2NDQgNTU3ZGIwM2RlOTk3Yzg2YTRhMDI4ZTFlYmQzYTFjZWIyMjViZTIzOCAxCWhlbGxvCisxMDA2NDQgYmE0MmEyYTk2ZTMwMjdmMzMzM2UxM2VkZTRjY2Y0NDk4YzNhZTk0MiAyCWhlbGxvCiAxMDA2NDQgY2M0NGM3M2ViNzgzNTY1ZGE1ODMxYjRkODIwYzk2Mjk1NDAxOWI2OSAzCWhlbGxvCiAtLS0tLS0tLS0tLS0KIAogVGhlIG5leHQgc3RlcCBvZiBtZXJnaW5nIGlzIHRvIG1lcmdlIHRoZXNlIHRocmVlIHZlcnNpb25zIG9mIHRoZQogZmlsZSwgdXNpbmcgMy13YXkgbWVyZ2UuICBUaGlzIGlzIGRvbmUgYnkgZ2l2aW5nCi0nZ2l0LW1lcmdlLW9uZS1maWxlJyBjb21tYW5kIGFzIG9uZSBvZiB0aGUgYXJndW1lbnRzIHRvCi0nZ2l0LW1lcmdlLWluZGV4JyBjb21tYW5kOgorJ2dpdCBtZXJnZS1vbmUtZmlsZScgY29tbWFuZCBhcyBvbmUgb2YgdGhlIGFyZ3VtZW50cyB0bworJ2dpdCBtZXJnZS1pbmRleCcgY29tbWFuZDoKIAogLS0tLS0tLS0tLS0tCiAkIGdpdCBtZXJnZS1pbmRleCBnaXQtbWVyZ2Utb25lLWZpbGUgaGVsbG8KQEAgLTEyNzAsNyArMTI3OCw3IEBACiBmYXRhbDogbWVyZ2UgcHJvZ3JhbSBmYWlsZWQKIC0tLS0tLS0tLS0tLQogCi0nZ2l0LW1lcmdlLW9uZS1maWxlJyBzY3JpcHQgaXMgY2FsbGVkIHdpdGggcGFyYW1ldGVycyB0bworJ2dpdCBtZXJnZS1vbmUtZmlsZScgc2NyaXB0IGlzIGNhbGxlZCB3aXRoIHBhcmFtZXRlcnMgdG8KIGRlc2NyaWJlIHRob3NlIHRocmVlIHZlcnNpb25zLCBhbmQgaXMgcmVzcG9uc2libGUgdG8gbGVhdmUgdGhlCiBtZXJnZSByZXN1bHRzIGluIHRoZSB3b3JraW5nIHRyZWUuCiBJdCBpcyBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgc2hlbGwgc2NyaXB0LCBhbmQKQEAgLTEyODMsMTUgKzEyOTEsMTUgQEAKIC0tLS0tLS0tLS0tLQogJCBnaXQgbHMtZmlsZXMgLS1zdGFnZQogMTAwNjQ0IDdmOGIxNDFiNjVmZGNlZTQ3MzIxZTM5OWEyNTk4YTIzNWEwMzI0MjIgMAlleGFtcGxlCi0xMDA2NDQgMjYzNDE0ZjQyM2QwZTRkNzBkYWU4ZmU1M2ZhMzQ2MTRmZjNlMjg2MCAxCWhlbGxvCi0xMDA2NDQgMDZmYTZhMjQyNTZkYzdlNTYwZWZhNTY4N2ZhODRiNTFmMDI2M2MzYSAyCWhlbGxvCisxMDA2NDQgNTU3ZGIwM2RlOTk3Yzg2YTRhMDI4ZTFlYmQzYTFjZWIyMjViZTIzOCAxCWhlbGxvCisxMDA2NDQgYmE0MmEyYTk2ZTMwMjdmMzMzM2UxM2VkZTRjY2Y0NDk4YzNhZTk0MiAyCWhlbGxvCiAxMDA2NDQgY2M0NGM3M2ViNzgzNTY1ZGE1ODMxYjRkODIwYzk2Mjk1NDAxOWI2OSAzCWhlbGxvCiAtLS0tLS0tLS0tLS0KIAogVGhpcyBpcyB0aGUgc3RhdGUgb2YgdGhlIGluZGV4IGZpbGUgYW5kIHRoZSB3b3JraW5nIGZpbGUgYWZ0ZXIKLSdnaXQtbWVyZ2UnIHJldHVybnMgY29udHJvbCBiYWNrIHRvIHlvdSwgbGVhdmluZyB0aGUgY29uZmxpY3RpbmcKKydnaXQgbWVyZ2UnIHJldHVybnMgY29udHJvbCBiYWNrIHRvIHlvdSwgbGVhdmluZyB0aGUgY29uZmxpY3RpbmcKIG1lcmdlIGZvciB5b3UgdG8gcmVzb2x2ZS4gIE5vdGljZSB0aGF0IHRoZSBwYXRoIGBoZWxsb2AgaXMgc3RpbGwKLXVubWVyZ2VkLCBhbmQgd2hhdCB5b3Ugc2VlIHdpdGggJ2dpdC1kaWZmJyBhdCB0aGlzIHBvaW50IGlzCit1bm1lcmdlZCwgYW5kIHdoYXQgeW91IHNlZSB3aXRoICdnaXQgZGlmZicgYXQgdGhpcyBwb2ludCBpcwogZGlmZmVyZW5jZXMgc2luY2Ugc3RhZ2UgMiAoaS5lLiB5b3VyIHZlcnNpb24pLgogCiAKQEAgLTEzMjgsOCArMTMzNiw4IEBACiBkb25lIG9ubHkgb25jZS4KIAogW05PVEVdCi0nZ2l0LXB1c2gnIHVzZXMgYSBwYWlyIG9mIGNvbW1hbmRzLAotJ2dpdC1zZW5kLXBhY2snIG9uIHlvdXIgbG9jYWwgbWFjaGluZSwgYW5kICdnaXQtcmVjZWl2ZS1wYWNrJworJ2dpdCBwdXNoJyB1c2VzIGEgcGFpciBvZiBjb21tYW5kcywKKydnaXQgc2VuZC1wYWNrJyBvbiB5b3VyIGxvY2FsIG1hY2hpbmUsIGFuZCAnZ2l0LXJlY2VpdmUtcGFjaycKIG9uIHRoZSByZW1vdGUgbWFjaGluZS4gVGhlIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgdHdvIG92ZXIKIHRoZSBuZXR3b3JrIGludGVybmFsbHkgdXNlcyBhbiBTU0ggY29ubmVjdGlvbi4KIApAQCAtMTM0NCw3ICsxMzUyLDcgQEAKIC0tLS0tLS0tLS0tLQogCiBUaGVuLCBtYWtlIHRoYXQgZGlyZWN0b3J5IGludG8gYSBnaXQgcmVwb3NpdG9yeSBieSBydW5uaW5nCi0nZ2l0LWluaXQnLCBidXQgdGhpcyB0aW1lLCBzaW5jZSBpdHMgbmFtZSBpcyBub3QgdGhlIHVzdWFsCisnZ2l0IGluaXQnLCBidXQgdGhpcyB0aW1lLCBzaW5jZSBpdHMgbmFtZSBpcyBub3QgdGhlIHVzdWFsCiBgLmdpdGAsIHdlIGRvIHRoaW5ncyBzbGlnaHRseSBkaWZmZXJlbnRseToKIAogLS0tLS0tLS0tLS0tCkBAIC0xNDA3LDcgKzE0MTUsNyBAQAogCiB3aWxsIGRvIGl0IGZvciB5b3UuIElmIHlvdSBmb2xsb3dlZCB0aGUgdHV0b3JpYWwgZXhhbXBsZXMsIHlvdQogd291bGQgaGF2ZSBhY2N1bXVsYXRlZCBhYm91dCAxNyBvYmplY3RzIGluIGAuZ2l0L29iamVjdHMvPz8vYAotZGlyZWN0b3JpZXMgYnkgbm93LiAnZ2l0LXJlcGFjaycgdGVsbHMgeW91IGhvdyBtYW55IG9iamVjdHMgaXQKK2RpcmVjdG9yaWVzIGJ5IG5vdy4gJ2dpdCByZXBhY2snIHRlbGxzIHlvdSBob3cgbWFueSBvYmplY3RzIGl0CiBwYWNrZWQsIGFuZCBzdG9yZXMgdGhlIHBhY2tlZCBmaWxlIGluIGAuZ2l0L29iamVjdHMvcGFja2AKIGRpcmVjdG9yeS4KIApAQCAtMTQyMCw3ICsxNDI4LDcgQEAKIGluIHRoZSBwYWNrLCBhbmQgdGhlIGxhdHRlciBob2xkcyB0aGUgaW5kZXggZm9yIHJhbmRvbQogYWNjZXNzLgogCi1JZiB5b3UgYXJlIHBhcmFub2lkLCBydW5uaW5nICdnaXQtdmVyaWZ5LXBhY2snIGNvbW1hbmQgd291bGQKK0lmIHlvdSBhcmUgcGFyYW5vaWQsIHJ1bm5pbmcgJ2dpdCB2ZXJpZnktcGFjaycgY29tbWFuZCB3b3VsZAogZGV0ZWN0IGlmIHlvdSBoYXZlIGEgY29ycnVwdCBwYWNrLCBidXQgZG8gbm90IHdvcnJ5IHRvbyBtdWNoLgogT3VyIHByb2dyYW1zIGFyZSBhbHdheXMgcGVyZmVjdCA7LSkuCiAKQEAgLTE0ODcsMTcgKzE0OTUsMTcgQEAKIHRyYW5zcG9ydCBwcm90b2NvbHMgKEhUVFApLCB5b3UgbmVlZCB0byBrZWVwIHRoaXMgcmVwb3NpdG9yeQogJ2R1bWIgdHJhbnNwb3J0IGZyaWVuZGx5Jy4gIEFmdGVyIGBnaXQgaW5pdGAsCiBgJEdJVF9ESVIvaG9va3MvcG9zdC11cGRhdGUuc2FtcGxlYCBjb3BpZWQgZnJvbSB0aGUgc3RhbmRhcmQgdGVtcGxhdGVzCi13b3VsZCBjb250YWluIGEgY2FsbCB0byAnZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbycKK3dvdWxkIGNvbnRhaW4gYSBjYWxsIHRvICdnaXQgdXBkYXRlLXNlcnZlci1pbmZvJwogYnV0IHlvdSBuZWVkIHRvIG1hbnVhbGx5IGVuYWJsZSB0aGUgaG9vayB3aXRoCiBgbXYgcG9zdC11cGRhdGUuc2FtcGxlIHBvc3QtdXBkYXRlYC4gIFRoaXMgbWFrZXMgc3VyZQotJ2dpdC11cGRhdGUtc2VydmVyLWluZm8nIGtlZXBzIHRoZSBuZWNlc3NhcnkgZmlsZXMgdXAtdG8tZGF0ZS4KKydnaXQgdXBkYXRlLXNlcnZlci1pbmZvJyBrZWVwcyB0aGUgbmVjZXNzYXJ5IGZpbGVzIHVwLXRvLWRhdGUuCiAKIDMuIFB1c2ggaW50byB0aGUgcHVibGljIHJlcG9zaXRvcnkgZnJvbSB5b3VyIHByaW1hcnkKICAgIHJlcG9zaXRvcnkuCiAKLTQuICdnaXQtcmVwYWNrJyB0aGUgcHVibGljIHJlcG9zaXRvcnkuIFRoaXMgZXN0YWJsaXNoZXMgYSBiaWcKKzQuICdnaXQgcmVwYWNrJyB0aGUgcHVibGljIHJlcG9zaXRvcnkuIFRoaXMgZXN0YWJsaXNoZXMgYSBiaWcKICAgIHBhY2sgdGhhdCBjb250YWlucyB0aGUgaW5pdGlhbCBzZXQgb2Ygb2JqZWN0cyBhcyB0aGUKLSAgIGJhc2VsaW5lLCBhbmQgcG9zc2libHkgJ2dpdC1wcnVuZScgaWYgdGhlIHRyYW5zcG9ydAorICAgYmFzZWxpbmUsIGFuZCBwb3NzaWJseSAnZ2l0IHBydW5lJyBpZiB0aGUgdHJhbnNwb3J0CiAgICB1c2VkIGZvciBwdWxsaW5nIGZyb20geW91ciByZXBvc2l0b3J5IHN1cHBvcnRzIHBhY2tlZAogICAgcmVwb3NpdG9yaWVzLgogCkBAIC0xNTExLDE0ICsxNTE5LDE0IEBACiA2LiBQdXNoIHlvdXIgY2hhbmdlcyB0byB0aGUgcHVibGljIHJlcG9zaXRvcnksIGFuZCBhbm5vdW5jZSBpdAogICAgdG8gdGhlIHB1YmxpYy4KIAotNy4gRXZlcnkgb25jZSBpbiBhIHdoaWxlLCAnZ2l0LXJlcGFjaycgdGhlIHB1YmxpYyByZXBvc2l0b3J5LgorNy4gRXZlcnkgb25jZSBpbiBhIHdoaWxlLCAnZ2l0IHJlcGFjaycgdGhlIHB1YmxpYyByZXBvc2l0b3J5LgogICAgR28gYmFjayB0byBzdGVwIDUuIGFuZCBjb250aW51ZSB3b3JraW5nLgogCiAKIEEgcmVjb21tZW5kZWQgd29yayBjeWNsZSBmb3IgYSAic3Vic3lzdGVtIG1haW50YWluZXIiIHdobyB3b3Jrcwogb24gdGhhdCBwcm9qZWN0IGFuZCBoYXMgYW4gb3duICJwdWJsaWMgcmVwb3NpdG9yeSIgZ29lcyBsaWtlIHRoaXM6CiAKLTEuIFByZXBhcmUgeW91ciB3b3JrIHJlcG9zaXRvcnksIGJ5ICdnaXQtY2xvbmUnIHRoZSBwdWJsaWMKKzEuIFByZXBhcmUgeW91ciB3b3JrIHJlcG9zaXRvcnksIGJ5ICdnaXQgY2xvbmUnIHRoZSBwdWJsaWMKICAgIHJlcG9zaXRvcnkgb2YgdGhlICJwcm9qZWN0IGxlYWQiLiBUaGUgVVJMIHVzZWQgZm9yIHRoZQogICAgaW5pdGlhbCBjbG9uaW5nIGlzIHN0b3JlZCBpbiB0aGUgcmVtb3RlLm9yaWdpbi51cmwKICAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCkBAIC0xNTMzLDcgKzE1NDEsNyBAQAogICAgcG9pbnQgYXQgdGhlIHJlcG9zaXRvcnkgeW91IGFyZSBib3Jyb3dpbmcgZnJvbS4KIAogNC4gUHVzaCBpbnRvIHRoZSBwdWJsaWMgcmVwb3NpdG9yeSBmcm9tIHlvdXIgcHJpbWFyeQotICAgcmVwb3NpdG9yeS4gUnVuICdnaXQtcmVwYWNrJywgYW5kIHBvc3NpYmx5ICdnaXQtcHJ1bmUnIGlmIHRoZQorICAgcmVwb3NpdG9yeS4gUnVuICdnaXQgcmVwYWNrJywgYW5kIHBvc3NpYmx5ICdnaXQgcHJ1bmUnIGlmIHRoZQogICAgdHJhbnNwb3J0IHVzZWQgZm9yIHB1bGxpbmcgZnJvbSB5b3VyIHJlcG9zaXRvcnkgc3VwcG9ydHMKICAgIHBhY2tlZCByZXBvc2l0b3JpZXMuCiAKQEAgLTE1NTAsNyArMTU1OCw3IEBACiAgICAicHJvamVjdCBsZWFkIiBhbmQgcG9zc2libHkgeW91ciAic3ViLXN1YnN5c3RlbQogICAgbWFpbnRhaW5lcnMiIHRvIHB1bGwgZnJvbSBpdC4KIAotNy4gRXZlcnkgb25jZSBpbiBhIHdoaWxlLCAnZ2l0LXJlcGFjaycgdGhlIHB1YmxpYyByZXBvc2l0b3J5LgorNy4gRXZlcnkgb25jZSBpbiBhIHdoaWxlLCAnZ2l0IHJlcGFjaycgdGhlIHB1YmxpYyByZXBvc2l0b3J5LgogICAgR28gYmFjayB0byBzdGVwIDUuIGFuZCBjb250aW51ZSB3b3JraW5nLgogCiAKQEAgLTE1NTgsNyArMTU2Niw3IEBACiBub3QgaGF2ZSBhICJwdWJsaWMiIHJlcG9zaXRvcnkgaXMgc29tZXdoYXQgZGlmZmVyZW50LiBJdCBnb2VzCiBsaWtlIHRoaXM6CiAKLTEuIFByZXBhcmUgeW91ciB3b3JrIHJlcG9zaXRvcnksIGJ5ICdnaXQtY2xvbmUnIHRoZSBwdWJsaWMKKzEuIFByZXBhcmUgeW91ciB3b3JrIHJlcG9zaXRvcnksIGJ5ICdnaXQgY2xvbmUnIHRoZSBwdWJsaWMKICAgIHJlcG9zaXRvcnkgb2YgdGhlICJwcm9qZWN0IGxlYWQiIChvciBhICJzdWJzeXN0ZW0KICAgIG1haW50YWluZXIiLCBpZiB5b3Ugd29yayBvbiBhIHN1YnN5c3RlbSkuIFRoZSBVUkwgdXNlZCBmb3IKICAgIHRoZSBpbml0aWFsIGNsb25pbmcgaXMgc3RvcmVkIGluIHRoZSByZW1vdGUub3JpZ2luLnVybApAQCAtMTY1Niw4ICsxNjY0LDggQEAKIC0tLS0tLS0tLS0tLQogCiBZb3UgY2FuIG1ha2Ugc3VyZSBgZ2l0IHNob3ctYnJhbmNoYCBtYXRjaGVzIHRoZSBzdGF0ZSBiZWZvcmUKLXRob3NlIHR3byAnZ2l0LW1lcmdlJyB5b3UganVzdCBkaWQuICBUaGVuLCBpbnN0ZWFkIG9mIHJ1bm5pbmcKLXR3byAnZ2l0LW1lcmdlJyBjb21tYW5kcyBpbiBhIHJvdywgeW91IHdvdWxkIG1lcmdlIHRoZXNlIHR3bwordGhvc2UgdHdvICdnaXQgbWVyZ2UnIHlvdSBqdXN0IGRpZC4gIFRoZW4sIGluc3RlYWQgb2YgcnVubmluZwordHdvICdnaXQgbWVyZ2UnIGNvbW1hbmRzIGluIGEgcm93LCB5b3Ugd291bGQgbWVyZ2UgdGhlc2UgdHdvCiBicmFuY2ggaGVhZHMgKHRoaXMgaXMga25vd24gYXMgJ21ha2luZyBhbiBPY3RvcHVzJyk6CiAKIC0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRjdnMtbWlncmF0aW9uLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0Y3ZzLW1pZ3JhdGlvbi50eHQKaW5kZXggMGU0OWMxYy4uZDg2MWVjNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXRjdnMtbWlncmF0aW9uLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdGN2cy1taWdyYXRpb24udHh0CkBAIC00NywyNSArNDcsMjUgQEAKIFtOT1RFXQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIFRoZSAncHVsbCcgY29tbWFuZCBrbm93cyB3aGVyZSB0byBnZXQgdXBkYXRlcyBmcm9tIGJlY2F1c2Ugb2YgY2VydGFpbgotY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgdGhhdCB3ZXJlIHNldCBieSB0aGUgZmlyc3QgJ2dpdC1jbG9uZScKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHRoYXQgd2VyZSBzZXQgYnkgdGhlIGZpcnN0ICdnaXQgY2xvbmUnCiBjb21tYW5kOyBzZWUgYGdpdCBjb25maWcgLWxgIGFuZCB0aGUgbGlua2dpdDpnaXQtY29uZmlnWzFdIG1hbgogcGFnZSBmb3IgZGV0YWlscy4KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIFlvdSBjYW4gdXBkYXRlIHRoZSBzaGFyZWQgcmVwb3NpdG9yeSB3aXRoIHlvdXIgY2hhbmdlcyBieSBmaXJzdCBjb21taXR0aW5nCi15b3VyIGNoYW5nZXMsIGFuZCB0aGVuIHVzaW5nIHRoZSAnZ2l0LXB1c2gnIGNvbW1hbmQ6Cit5b3VyIGNoYW5nZXMsIGFuZCB0aGVuIHVzaW5nIHRoZSAnZ2l0IHB1c2gnIGNvbW1hbmQ6CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogJCBnaXQgcHVzaCBvcmlnaW4gbWFzdGVyCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogdG8gInB1c2giIHRob3NlIGNvbW1pdHMgdG8gdGhlIHNoYXJlZCByZXBvc2l0b3J5LiAgSWYgc29tZW9uZSBlbHNlIGhhcwotdXBkYXRlZCB0aGUgcmVwb3NpdG9yeSBtb3JlIHJlY2VudGx5LCAnZ2l0LXB1c2gnLCBsaWtlICdjdnMgY29tbWl0Jywgd2lsbAordXBkYXRlZCB0aGUgcmVwb3NpdG9yeSBtb3JlIHJlY2VudGx5LCAnZ2l0IHB1c2gnLCBsaWtlICdjdnMgY29tbWl0Jywgd2lsbAogY29tcGxhaW4sIGluIHdoaWNoIGNhc2UgeW91IG11c3QgcHVsbCBhbnkgY2hhbmdlcyBiZWZvcmUgYXR0ZW1wdGluZyB0aGUKIHB1c2ggYWdhaW4uCiAKLUluIHRoZSAnZ2l0LXB1c2gnIGNvbW1hbmQgYWJvdmUgd2Ugc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgcmVtb3RlIGJyYW5jaAotdG8gdXBkYXRlIChgbWFzdGVyYCkuICBJZiB3ZSBsZWF2ZSB0aGF0IG91dCwgJ2dpdC1wdXNoJyB0cmllcyB0byB1cGRhdGUKK0luIHRoZSAnZ2l0IHB1c2gnIGNvbW1hbmQgYWJvdmUgd2Ugc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgcmVtb3RlIGJyYW5jaAordG8gdXBkYXRlIChgbWFzdGVyYCkuICBJZiB3ZSBsZWF2ZSB0aGF0IG91dCwgJ2dpdCBwdXNoJyB0cmllcyB0byB1cGRhdGUKIGFueSBicmFuY2hlcyBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdGhhdCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgYSBicmFuY2gKIGluIHRoZSBsb2NhbCByZXBvc2l0b3J5LiAgU28gdGhlIGxhc3QgJ3B1c2gnIGNhbiBiZSBkb25lIHdpdGggZWl0aGVyIG9mOgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdGRpZmZjb3JlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0ZGlmZmNvcmUudHh0CmluZGV4IGU4MDQxYmMuLjlkZThjYWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0ZGlmZmNvcmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0ZGlmZmNvcmUudHh0CkBAIC0zLDcgKzMsNyBAQAogCiBOQU1FCiAtLS0tCi1naXRkaWZmY29yZSAtIFR3ZWFraW5nIGRpZmYgb3V0cHV0IChKdW5lIDIwMDUpCitnaXRkaWZmY29yZSAtIFR3ZWFraW5nIGRpZmYgb3V0cHV0CiAKIFNZTk9QU0lTCiAtLS0tLS0tLQpAQCAtMTIsNyArMTIsNyBAQAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCiAKLVRoZSBkaWZmIGNvbW1hbmRzICdnaXQtZGlmZi1pbmRleCcsICdnaXQtZGlmZi1maWxlcycsIGFuZCAnZ2l0LWRpZmYtdHJlZScKK1RoZSBkaWZmIGNvbW1hbmRzICdnaXQgZGlmZi1pbmRleCcsICdnaXQgZGlmZi1maWxlcycsIGFuZCAnZ2l0IGRpZmYtdHJlZScKIGNhbiBiZSB0b2xkIHRvIG1hbmlwdWxhdGUgZGlmZmVyZW5jZXMgdGhleSBmaW5kIGluCiB1bmNvbnZlbnRpb25hbCB3YXlzIGJlZm9yZSBzaG93aW5nICdkaWZmJyBvdXRwdXQuICBUaGUgbWFuaXB1bGF0aW9uCiBpcyBjb2xsZWN0aXZlbHkgY2FsbGVkICJkaWZmY29yZSB0cmFuc2Zvcm1hdGlvbiIuICBUaGlzIHNob3J0IG5vdGUKQEAgLTIzLDE4ICsyMywxOCBAQAogVGhlIGNoYWluIG9mIG9wZXJhdGlvbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGUgJ2dpdC1kaWZmLXthc3Rlcmlza30nIGZhbWlseSB3b3JrcyBieSBmaXJzdCBjb21wYXJpbmcgdHdvIHNldHMgb2YKK1RoZSAnZ2l0IGRpZmYte2FzdGVyaXNrfScgZmFtaWx5IHdvcmtzIGJ5IGZpcnN0IGNvbXBhcmluZyB0d28gc2V0cyBvZgogZmlsZXM6CiAKLSAtICdnaXQtZGlmZi1pbmRleCcgY29tcGFyZXMgY29udGVudHMgb2YgYSAidHJlZSIgb2JqZWN0IGFuZCB0aGUKKyAtICdnaXQgZGlmZi1pbmRleCcgY29tcGFyZXMgY29udGVudHMgb2YgYSAidHJlZSIgb2JqZWN0IGFuZCB0aGUKICAgIHdvcmtpbmcgZGlyZWN0b3J5ICh3aGVuICdcLS1jYWNoZWQnIGZsYWcgaXMgbm90IHVzZWQpIG9yIGEKICAgICJ0cmVlIiBvYmplY3QgYW5kIHRoZSBpbmRleCBmaWxlICh3aGVuICdcLS1jYWNoZWQnIGZsYWcgaXMKICAgIHVzZWQpOwogCi0gLSAnZ2l0LWRpZmYtZmlsZXMnIGNvbXBhcmVzIGNvbnRlbnRzIG9mIHRoZSBpbmRleCBmaWxlIGFuZCB0aGUKKyAtICdnaXQgZGlmZi1maWxlcycgY29tcGFyZXMgY29udGVudHMgb2YgdGhlIGluZGV4IGZpbGUgYW5kIHRoZQogICAgd29ya2luZyBkaXJlY3Rvcnk7CiAKLSAtICdnaXQtZGlmZi10cmVlJyBjb21wYXJlcyBjb250ZW50cyBvZiB0d28gInRyZWUiIG9iamVjdHM7CisgLSAnZ2l0IGRpZmYtdHJlZScgY29tcGFyZXMgY29udGVudHMgb2YgdHdvICJ0cmVlIiBvYmplY3RzOwogCiBJbiBhbGwgb2YgdGhlc2UgY2FzZXMsIHRoZSBjb21tYW5kcyB0aGVtc2VsdmVzIGZpcnN0IG9wdGlvbmFsbHkgbGltaXQKIHRoZSB0d28gc2V0cyBvZiBmaWxlcyBieSBhbnkgcGF0aHNwZWNzIGdpdmVuIG9uIHRoZWlyIGNvbW1hbmQtbGluZXMsCkBAIC03NCwxMiArNzQsMTIgQEAKIC0gZGlmZmNvcmUtcGlja2F4ZQogLSBkaWZmY29yZS1vcmRlcgogCi1UaGVzZSBhcmUgYXBwbGllZCBpbiBzZXF1ZW5jZS4gIFRoZSBzZXQgb2YgZmlsZXBhaXJzICdnaXQtZGlmZi17YXN0ZXJpc2t9JworVGhlc2UgYXJlIGFwcGxpZWQgaW4gc2VxdWVuY2UuICBUaGUgc2V0IG9mIGZpbGVwYWlycyAnZ2l0IGRpZmYte2FzdGVyaXNrfScKIGNvbW1hbmRzIGZpbmQgYXJlIHVzZWQgYXMgdGhlIGlucHV0IHRvIGRpZmZjb3JlLWJyZWFrLCBhbmQKIHRoZSBvdXRwdXQgZnJvbSBkaWZmY29yZS1icmVhayBpcyB1c2VkIGFzIHRoZSBpbnB1dCB0byB0aGUKIG5leHQgdHJhbnNmb3JtYXRpb24uICBUaGUgZmluYWwgcmVzdWx0IGlzIHRoZW4gcGFzc2VkIHRvIHRoZQogb3V0cHV0IHJvdXRpbmUgYW5kIGdlbmVyYXRlcyBlaXRoZXIgZGlmZi1yYXcgZm9ybWF0IChzZWUgT3V0cHV0Ci1mb3JtYXQgc2VjdGlvbnMgb2YgdGhlIG1hbnVhbCBmb3IgJ2dpdC1kaWZmLXthc3Rlcmlza30nIGNvbW1hbmRzKSBvcgorZm9ybWF0IHNlY3Rpb25zIG9mIHRoZSBtYW51YWwgZm9yICdnaXQgZGlmZi17YXN0ZXJpc2t9JyBjb21tYW5kcykgb3IKIGRpZmYtcGF0Y2ggZm9ybWF0LgogCiAKQEAgLTg3LDcgKzg3LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhlIHNlY29uZCB0cmFuc2Zvcm1hdGlvbiBpbiB0aGUgY2hhaW4gaXMgZGlmZmNvcmUtYnJlYWssIGFuZCBpcwotY29udHJvbGxlZCBieSB0aGUgLUIgb3B0aW9uIHRvIHRoZSAnZ2l0LWRpZmYte2FzdGVyaXNrfScgY29tbWFuZHMuICBUaGlzIGlzCitjb250cm9sbGVkIGJ5IHRoZSAtQiBvcHRpb24gdG8gdGhlICdnaXQgZGlmZi17YXN0ZXJpc2t9JyBjb21tYW5kcy4gIFRoaXMgaXMKIHVzZWQgdG8gZGV0ZWN0IGEgZmlsZXBhaXIgdGhhdCByZXByZXNlbnRzICJjb21wbGV0ZSByZXdyaXRlIiBhbmQKIGJyZWFrIHN1Y2ggZmlsZXBhaXIgaW50byB0d28gZmlsZXBhaXJzIHRoYXQgcmVwcmVzZW50IGRlbGV0ZSBhbmQKIGNyZWF0ZS4gIEUuZy4gIElmIHRoZSBpbnB1dCBjb250YWluZWQgdGhpcyBmaWxlcGFpcjoKQEAgLTEyMyw3ICsxMjMsNyBAQAogCiBUaGlzIHRyYW5zZm9ybWF0aW9uIGlzIHVzZWQgdG8gZGV0ZWN0IHJlbmFtZXMgYW5kIGNvcGllcywgYW5kIGlzCiBjb250cm9sbGVkIGJ5IHRoZSAtTSBvcHRpb24gKHRvIGRldGVjdCByZW5hbWVzKSBhbmQgdGhlIC1DIG9wdGlvbgotKHRvIGRldGVjdCBjb3BpZXMgYXMgd2VsbCkgdG8gdGhlICdnaXQtZGlmZi17YXN0ZXJpc2t9JyBjb21tYW5kcy4gIElmIHRoZQorKHRvIGRldGVjdCBjb3BpZXMgYXMgd2VsbCkgdG8gdGhlICdnaXQgZGlmZi17YXN0ZXJpc2t9JyBjb21tYW5kcy4gIElmIHRoZQogaW5wdXQgY29udGFpbmVkIHRoZXNlIGZpbGVwYWlyczoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNjgsMTEgKzE2OCwxMSBAQAogOC8xMCA9IDgwJSkuCiAKIE5vdGUuICBXaGVuIHRoZSAiLUMiIG9wdGlvbiBpcyB1c2VkIHdpdGggYFwtLWZpbmQtY29waWVzLWhhcmRlcmAKLW9wdGlvbiwgJ2dpdC1kaWZmLXthc3Rlcmlza30nIGNvbW1hbmRzIGZlZWQgdW5tb2RpZmllZCBmaWxlcGFpcnMgdG8KK29wdGlvbiwgJ2dpdCBkaWZmLXthc3Rlcmlza30nIGNvbW1hbmRzIGZlZWQgdW5tb2RpZmllZCBmaWxlcGFpcnMgdG8KIGRpZmZjb3JlIG1lY2hhbmlzbSBhcyB3ZWxsIGFzIG1vZGlmaWVkIG9uZXMuICBUaGlzIGxldHMgdGhlIGNvcHkKIGRldGVjdG9yIGNvbnNpZGVyIHVubW9kaWZpZWQgZmlsZXMgYXMgY29weSBzb3VyY2UgY2FuZGlkYXRlcyBhdAogdGhlIGV4cGVuc2Ugb2YgbWFraW5nIGl0IHNsb3dlci4gIFdpdGhvdXQgYFwtLWZpbmQtY29waWVzLWhhcmRlcmAsCi0nZ2l0LWRpZmYte2FzdGVyaXNrfScgY29tbWFuZHMgY2FuIGRldGVjdCBjb3BpZXMgb25seSBpZiB0aGUgZmlsZSB0aGF0IHdhcworJ2dpdCBkaWZmLXthc3Rlcmlza30nIGNvbW1hbmRzIGNhbiBkZXRlY3QgY29waWVzIG9ubHkgaWYgdGhlIGZpbGUgdGhhdCB3YXMKIGNvcGllZCBoYXBwZW5lZCB0byBoYXZlIGJlZW4gbW9kaWZpZWQgaW4gdGhlIHNhbWUgY2hhbmdlc2V0LgogCiAKQEAgLTIyMyw3ICsyMjMsNyBAQAogCiBUaGlzIHRyYW5zZm9ybWF0aW9uIGlzIHVzZWQgdG8gZmluZCBmaWxlcGFpcnMgdGhhdCByZXByZXNlbnQKIGNoYW5nZXMgdGhhdCB0b3VjaCBhIHNwZWNpZmllZCBzdHJpbmcsIGFuZCBpcyBjb250cm9sbGVkIGJ5IHRoZQotLVMgb3B0aW9uIGFuZCB0aGUgYFwtLXBpY2theGUtYWxsYCBvcHRpb24gdG8gdGhlICdnaXQtZGlmZi17YXN0ZXJpc2t9JworLVMgb3B0aW9uIGFuZCB0aGUgYFwtLXBpY2theGUtYWxsYCBvcHRpb24gdG8gdGhlICdnaXQgZGlmZi17YXN0ZXJpc2t9JwogY29tbWFuZHMuCiAKIFdoZW4gZGlmZmNvcmUtcGlja2F4ZSBpcyBpbiB1c2UsIGl0IGNoZWNrcyBpZiB0aGVyZSBhcmUKQEAgLTI0Niw3ICsyNDYsNyBAQAogCiBUaGlzIGlzIHVzZWQgdG8gcmVvcmRlciB0aGUgZmlsZXBhaXJzIGFjY29yZGluZyB0byB0aGUgdXNlcidzCiAob3IgcHJvamVjdCdzKSB0YXN0ZSwgYW5kIGlzIGNvbnRyb2xsZWQgYnkgdGhlIC1PIG9wdGlvbiB0byB0aGUKLSdnaXQtZGlmZi17YXN0ZXJpc2t9JyBjb21tYW5kcy4KKydnaXQgZGlmZi17YXN0ZXJpc2t9JyBjb21tYW5kcy4KIAogVGhpcyB0YWtlcyBhIHRleHQgZmlsZSBlYWNoIG9mIHdob3NlIGxpbmVzIGlzIGEgc2hlbGwgZ2xvYgogcGF0dGVybi4gIEZpbGVwYWlycyB0aGF0IG1hdGNoIGEgZ2xvYiBwYXR0ZXJuIG9uIGFuIGVhcmxpZXIgbGluZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRob29rcy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGhvb2tzLnR4dAppbmRleCAxYzczNjczLi44N2UyYzAzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdGhvb2tzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdGhvb2tzLnR4dApAQCAtMTUsNyArMTUsNyBAQAogCiBIb29rcyBhcmUgbGl0dGxlIHNjcmlwdHMgeW91IGNhbiBwbGFjZSBpbiBgJEdJVF9ESVIvaG9va3NgCiBkaXJlY3RvcnkgdG8gdHJpZ2dlciBhY3Rpb24gYXQgY2VydGFpbiBwb2ludHMuICBXaGVuCi0nZ2l0LWluaXQnIGlzIHJ1biwgYSBoYW5kZnVsIG9mIGV4YW1wbGUgaG9va3MgYXJlIGNvcGllZCBpbnRvIHRoZQorJ2dpdCBpbml0JyBpcyBydW4sIGEgaGFuZGZ1bCBvZiBleGFtcGxlIGhvb2tzIGFyZSBjb3BpZWQgaW50byB0aGUKIGBob29rc2AgZGlyZWN0b3J5IG9mIHRoZSBuZXcgcmVwb3NpdG9yeSwgYnV0IGJ5IGRlZmF1bHQgdGhleSBhcmUKIGFsbCBkaXNhYmxlZC4gIFRvIGVuYWJsZSBhIGhvb2ssIHJlbmFtZSBpdCBieSByZW1vdmluZyBpdHMgYC5zYW1wbGVgCiBzdWZmaXguCkBAIC0yNiwxMyArMjYsMTYgQEAKIAogVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIGN1cnJlbnRseSBkZWZpbmVkIGhvb2tzLgogCi1hcHBseXBhdGNoLW1zZwotLS0tLS0tLS0tLS0tLS0KK0hPT0tTCistLS0tLQogCi1UaGlzIGhvb2sgaXMgaW52b2tlZCBieSAnZ2l0LWFtJyBzY3JpcHQuICBJdCB0YWtlcyBhIHNpbmdsZQorYXBwbHlwYXRjaC1tc2cKK35+fn5+fn5+fn5+fn5+CisKK1RoaXMgaG9vayBpcyBpbnZva2VkIGJ5ICdnaXQgYW0nIHNjcmlwdC4gIEl0IHRha2VzIGEgc2luZ2xlCiBwYXJhbWV0ZXIsIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRoYXQgaG9sZHMgdGhlIHByb3Bvc2VkIGNvbW1pdAogbG9nIG1lc3NhZ2UuICBFeGl0aW5nIHdpdGggbm9uLXplcm8gc3RhdHVzIGNhdXNlcwotJ2dpdC1hbScgdG8gYWJvcnQgYmVmb3JlIGFwcGx5aW5nIHRoZSBwYXRjaC4KKydnaXQgYW0nIHRvIGFib3J0IGJlZm9yZSBhcHBseWluZyB0aGUgcGF0Y2guCiAKIFRoZSBob29rIGlzIGFsbG93ZWQgdG8gZWRpdCB0aGUgbWVzc2FnZSBmaWxlIGluIHBsYWNlLCBhbmQgY2FuCiBiZSB1c2VkIHRvIG5vcm1hbGl6ZSB0aGUgbWVzc2FnZSBpbnRvIHNvbWUgcHJvamVjdCBzdGFuZGFyZApAQCAtNDMsOSArNDYsOSBAQAogJ2NvbW1pdC1tc2cnIGhvb2ssIGlmIHRoZSBsYXR0ZXIgaXMgZW5hYmxlZC4KIAogcHJlLWFwcGx5cGF0Y2gKLS0tLS0tLS0tLS0tLS0tCit+fn5+fn5+fn5+fn5+fgogCi1UaGlzIGhvb2sgaXMgaW52b2tlZCBieSAnZ2l0LWFtJy4gIEl0IHRha2VzIG5vIHBhcmFtZXRlciwgYW5kIGlzCitUaGlzIGhvb2sgaXMgaW52b2tlZCBieSAnZ2l0IGFtJy4gIEl0IHRha2VzIG5vIHBhcmFtZXRlciwgYW5kIGlzCiBpbnZva2VkIGFmdGVyIHRoZSBwYXRjaCBpcyBhcHBsaWVkLCBidXQgYmVmb3JlIGEgY29tbWl0IGlzIG1hZGUuCiAKIElmIGl0IGV4aXRzIHdpdGggbm9uLXplcm8gc3RhdHVzLCB0aGVuIHRoZSB3b3JraW5nIHRyZWUgd2lsbCBub3QgYmUKQEAgLTU4LDM1ICs2MSwzNSBAQAogJ3ByZS1jb21taXQnIGhvb2ssIGlmIHRoZSBsYXR0ZXIgaXMgZW5hYmxlZC4KIAogcG9zdC1hcHBseXBhdGNoCi0tLS0tLS0tLS0tLS0tLS0KK35+fn5+fn5+fn5+fn5+fgogCi1UaGlzIGhvb2sgaXMgaW52b2tlZCBieSAnZ2l0LWFtJy4gIEl0IHRha2VzIG5vIHBhcmFtZXRlciwKK1RoaXMgaG9vayBpcyBpbnZva2VkIGJ5ICdnaXQgYW0nLiAgSXQgdGFrZXMgbm8gcGFyYW1ldGVyLAogYW5kIGlzIGludm9rZWQgYWZ0ZXIgdGhlIHBhdGNoIGlzIGFwcGxpZWQgYW5kIGEgY29tbWl0IGlzIG1hZGUuCiAKIFRoaXMgaG9vayBpcyBtZWFudCBwcmltYXJpbHkgZm9yIG5vdGlmaWNhdGlvbiwgYW5kIGNhbm5vdCBhZmZlY3QKLXRoZSBvdXRjb21lIG9mICdnaXQtYW0nLgordGhlIG91dGNvbWUgb2YgJ2dpdCBhbScuCiAKIHByZS1jb21taXQKLS0tLS0tLS0tLS0KK35+fn5+fn5+fn4KIAotVGhpcyBob29rIGlzIGludm9rZWQgYnkgJ2dpdC1jb21taXQnLCBhbmQgY2FuIGJlIGJ5cGFzc2VkCitUaGlzIGhvb2sgaXMgaW52b2tlZCBieSAnZ2l0IGNvbW1pdCcsIGFuZCBjYW4gYmUgYnlwYXNzZWQKIHdpdGggYFwtLW5vLXZlcmlmeWAgb3B0aW9uLiAgSXQgdGFrZXMgbm8gcGFyYW1ldGVyLCBhbmQgaXMKIGludm9rZWQgYmVmb3JlIG9idGFpbmluZyB0aGUgcHJvcG9zZWQgY29tbWl0IGxvZyBtZXNzYWdlIGFuZAogbWFraW5nIGEgY29tbWl0LiAgRXhpdGluZyB3aXRoIG5vbi16ZXJvIHN0YXR1cyBmcm9tIHRoaXMgc2NyaXB0Ci1jYXVzZXMgdGhlICdnaXQtY29tbWl0JyB0byBhYm9ydC4KK2NhdXNlcyB0aGUgJ2dpdCBjb21taXQnIHRvIGFib3J0LgogCiBUaGUgZGVmYXVsdCAncHJlLWNvbW1pdCcgaG9vaywgd2hlbiBlbmFibGVkLCBjYXRjaGVzIGludHJvZHVjdGlvbgogb2YgbGluZXMgd2l0aCB0cmFpbGluZyB3aGl0ZXNwYWNlcyBhbmQgYWJvcnRzIHRoZSBjb21taXQgd2hlbgogc3VjaCBhIGxpbmUgaXMgZm91bmQuCiAKLUFsbCB0aGUgJ2dpdC1jb21taXQnIGhvb2tzIGFyZSBpbnZva2VkIHdpdGggdGhlIGVudmlyb25tZW50CitBbGwgdGhlICdnaXQgY29tbWl0JyBob29rcyBhcmUgaW52b2tlZCB3aXRoIHRoZSBlbnZpcm9ubWVudAogdmFyaWFibGUgYEdJVF9FRElUT1I9OmAgaWYgdGhlIGNvbW1hbmQgd2lsbCBub3QgYnJpbmcgdXAgYW4gZWRpdG9yCiB0byBtb2RpZnkgdGhlIGNvbW1pdCBtZXNzYWdlLgogCiBwcmVwYXJlLWNvbW1pdC1tc2cKLS0tLS0tLS0tLS0tLS0tLS0tLQorfn5+fn5+fn5+fn5+fn5+fn5+CiAKLVRoaXMgaG9vayBpcyBpbnZva2VkIGJ5ICdnaXQtY29tbWl0JyByaWdodCBhZnRlciBwcmVwYXJpbmcgdGhlCitUaGlzIGhvb2sgaXMgaW52b2tlZCBieSAnZ2l0IGNvbW1pdCcgcmlnaHQgYWZ0ZXIgcHJlcGFyaW5nIHRoZQogZGVmYXVsdCBsb2cgbWVzc2FnZSwgYW5kIGJlZm9yZSB0aGUgZWRpdG9yIGlzIHN0YXJ0ZWQuCiAKIEl0IHRha2VzIG9uZSB0byB0aHJlZSBwYXJhbWV0ZXJzLiAgVGhlIGZpcnN0IGlzIHRoZSBuYW1lIG9mIHRoZSBmaWxlCkBAIC05OCw3ICsxMDEsNyBAQAogKGlmIGEgYC5naXQvU1FVQVNIX01TR2AgZmlsZSBleGlzdHMpOyBvciBgY29tbWl0YCwgZm9sbG93ZWQgYnkKIGEgY29tbWl0IFNIQTEgKGlmIGEgYC1jYCwgYC1DYCBvciBgXC0tYW1lbmRgIG9wdGlvbiB3YXMgZ2l2ZW4pLgogCi1JZiB0aGUgZXhpdCBzdGF0dXMgaXMgbm9uLXplcm8sICdnaXQtY29tbWl0JyB3aWxsIGFib3J0LgorSWYgdGhlIGV4aXQgc3RhdHVzIGlzIG5vbi16ZXJvLCAnZ2l0IGNvbW1pdCcgd2lsbCBhYm9ydC4KIAogVGhlIHB1cnBvc2Ugb2YgdGhlIGhvb2sgaXMgdG8gZWRpdCB0aGUgbWVzc2FnZSBmaWxlIGluIHBsYWNlLCBhbmQKIGl0IGlzIG5vdCBzdXBwcmVzc2VkIGJ5IHRoZSBgXC0tbm8tdmVyaWZ5YCBvcHRpb24uICBBIG5vbi16ZXJvIGV4aXQKQEAgLTEwOSwxMiArMTEyLDEyIEBACiBvdXQgdGhlIGBDb25mbGljdHM6YCBwYXJ0IG9mIGEgbWVyZ2UncyBjb21taXQgbWVzc2FnZS4KIAogY29tbWl0LW1zZwotLS0tLS0tLS0tLQorfn5+fn5+fn5+fgogCi1UaGlzIGhvb2sgaXMgaW52b2tlZCBieSAnZ2l0LWNvbW1pdCcsIGFuZCBjYW4gYmUgYnlwYXNzZWQKK1RoaXMgaG9vayBpcyBpbnZva2VkIGJ5ICdnaXQgY29tbWl0JywgYW5kIGNhbiBiZSBieXBhc3NlZAogd2l0aCBgXC0tbm8tdmVyaWZ5YCBvcHRpb24uICBJdCB0YWtlcyBhIHNpbmdsZSBwYXJhbWV0ZXIsIHRoZQogbmFtZSBvZiB0aGUgZmlsZSB0aGF0IGhvbGRzIHRoZSBwcm9wb3NlZCBjb21taXQgbG9nIG1lc3NhZ2UuCi1FeGl0aW5nIHdpdGggbm9uLXplcm8gc3RhdHVzIGNhdXNlcyB0aGUgJ2dpdC1jb21taXQnIHRvCitFeGl0aW5nIHdpdGggbm9uLXplcm8gc3RhdHVzIGNhdXNlcyB0aGUgJ2dpdCBjb21taXQnIHRvCiBhYm9ydC4KIAogVGhlIGhvb2sgaXMgYWxsb3dlZCB0byBlZGl0IHRoZSBtZXNzYWdlIGZpbGUgaW4gcGxhY2UsIGFuZCBjYW4KQEAgLTEyNiwzMiArMTI5LDMyIEBACiAiU2lnbmVkLW9mZi1ieSIgbGluZXMsIGFuZCBhYm9ydHMgdGhlIGNvbW1pdCBpZiBvbmUgaXMgZm91bmQuCiAKIHBvc3QtY29tbWl0Ci0tLS0tLS0tLS0tLQorfn5+fn5+fn5+fn4KIAotVGhpcyBob29rIGlzIGludm9rZWQgYnkgJ2dpdC1jb21taXQnLiAgSXQgdGFrZXMgbm8KK1RoaXMgaG9vayBpcyBpbnZva2VkIGJ5ICdnaXQgY29tbWl0Jy4gIEl0IHRha2VzIG5vCiBwYXJhbWV0ZXIsIGFuZCBpcyBpbnZva2VkIGFmdGVyIGEgY29tbWl0IGlzIG1hZGUuCiAKIFRoaXMgaG9vayBpcyBtZWFudCBwcmltYXJpbHkgZm9yIG5vdGlmaWNhdGlvbiwgYW5kIGNhbm5vdCBhZmZlY3QKLXRoZSBvdXRjb21lIG9mICdnaXQtY29tbWl0Jy4KK3RoZSBvdXRjb21lIG9mICdnaXQgY29tbWl0Jy4KIAogcHJlLXJlYmFzZQotLS0tLS0tLS0tLQorfn5+fn5+fn5+fgogCi1UaGlzIGhvb2sgaXMgY2FsbGVkIGJ5ICdnaXQtcmViYXNlJyBhbmQgY2FuIGJlIHVzZWQgdG8gcHJldmVudCBhIGJyYW5jaAorVGhpcyBob29rIGlzIGNhbGxlZCBieSAnZ2l0IHJlYmFzZScgYW5kIGNhbiBiZSB1c2VkIHRvIHByZXZlbnQgYSBicmFuY2gKIGZyb20gZ2V0dGluZyByZWJhc2VkLgogCiAKIHBvc3QtY2hlY2tvdXQKLS0tLS0tLS0tLS0tCit+fn5+fn5+fn5+fn5+CiAKLVRoaXMgaG9vayBpcyBpbnZva2VkIHdoZW4gYSAnZ2l0LWNoZWNrb3V0JyBpcyBydW4gYWZ0ZXIgaGF2aW5nIHVwZGF0ZWQgdGhlCitUaGlzIGhvb2sgaXMgaW52b2tlZCB3aGVuIGEgJ2dpdCBjaGVja291dCcgaXMgcnVuIGFmdGVyIGhhdmluZyB1cGRhdGVkIHRoZQogd29ya3RyZWUuICBUaGUgaG9vayBpcyBnaXZlbiB0aHJlZSBwYXJhbWV0ZXJzOiB0aGUgcmVmIG9mIHRoZSBwcmV2aW91cyBIRUFELAogdGhlIHJlZiBvZiB0aGUgbmV3IEhFQUQgKHdoaWNoIG1heSBvciBtYXkgbm90IGhhdmUgY2hhbmdlZCksIGFuZCBhIGZsYWcKIGluZGljYXRpbmcgd2hldGhlciB0aGUgY2hlY2tvdXQgd2FzIGEgYnJhbmNoIGNoZWNrb3V0IChjaGFuZ2luZyBicmFuY2hlcywKIGZsYWc9MSkgb3IgYSBmaWxlIGNoZWNrb3V0IChyZXRyaWV2aW5nIGEgZmlsZSBmcm9tIHRoZSBpbmRleCwgZmxhZz0wKS4KLVRoaXMgaG9vayBjYW5ub3QgYWZmZWN0IHRoZSBvdXRjb21lIG9mICdnaXQtY2hlY2tvdXQnLgorVGhpcyBob29rIGNhbm5vdCBhZmZlY3QgdGhlIG91dGNvbWUgb2YgJ2dpdCBjaGVja291dCcuCiAKLUl0IGlzIGFsc28gcnVuIGFmdGVyICdnaXQtY2xvbmUnLCB1bmxlc3MgdGhlIC0tbm8tY2hlY2tvdXQgKC1uKSBvcHRpb24gaXMKK0l0IGlzIGFsc28gcnVuIGFmdGVyICdnaXQgY2xvbmUnLCB1bmxlc3MgdGhlIC0tbm8tY2hlY2tvdXQgKC1uKSBvcHRpb24gaXMKIHVzZWQuIFRoZSBmaXJzdCBwYXJhbWV0ZXIgZ2l2ZW4gdG8gdGhlIGhvb2sgaXMgdGhlIG51bGwtcmVmLCB0aGUgc2Vjb25kIHRoZQogcmVmIG9mIHRoZSBuZXcgSEVBRCBhbmQgdGhlIGZsYWcgaXMgYWx3YXlzIDEuCiAKQEAgLTE2MCwxMiArMTYzLDEyIEBACiBwcm9wZXJ0aWVzLgogCiBwb3N0LW1lcmdlCi0tLS0tLS0tLS0tLQorfn5+fn5+fn5+fgogCi1UaGlzIGhvb2sgaXMgaW52b2tlZCBieSAnZ2l0LW1lcmdlJywgd2hpY2ggaGFwcGVucyB3aGVuIGEgJ2dpdC1wdWxsJworVGhpcyBob29rIGlzIGludm9rZWQgYnkgJ2dpdCBtZXJnZScsIHdoaWNoIGhhcHBlbnMgd2hlbiBhICdnaXQgcHVsbCcKIGlzIGRvbmUgb24gYSBsb2NhbCByZXBvc2l0b3J5LiAgVGhlIGhvb2sgdGFrZXMgYSBzaW5nbGUgcGFyYW1ldGVyLCBhIHN0YXR1cwogZmxhZyBzcGVjaWZ5aW5nIHdoZXRoZXIgb3Igbm90IHRoZSBtZXJnZSBiZWluZyBkb25lIHdhcyBhIHNxdWFzaCBtZXJnZS4KLVRoaXMgaG9vayBjYW5ub3QgYWZmZWN0IHRoZSBvdXRjb21lIG9mICdnaXQtbWVyZ2UnIGFuZCBpcyBub3QgZXhlY3V0ZWQsCitUaGlzIGhvb2sgY2Fubm90IGFmZmVjdCB0aGUgb3V0Y29tZSBvZiAnZ2l0IG1lcmdlJyBhbmQgaXMgbm90IGV4ZWN1dGVkLAogaWYgdGhlIG1lcmdlIGZhaWxlZCBkdWUgdG8gY29uZmxpY3RzLgogCiBUaGlzIGhvb2sgY2FuIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhIGNvcnJlc3BvbmRpbmcgcHJlLWNvbW1pdCBob29rIHRvCkBAIC0xNzUsMTAgKzE3OCwxMCBAQAogCiBbW3ByZS1yZWNlaXZlXV0KIHByZS1yZWNlaXZlCi0tLS0tLS0tLS0tLQorfn5+fn5+fn5+fn4KIAogVGhpcyBob29rIGlzIGludm9rZWQgYnkgJ2dpdC1yZWNlaXZlLXBhY2snIG9uIHRoZSByZW1vdGUgcmVwb3NpdG9yeSwKLXdoaWNoIGhhcHBlbnMgd2hlbiBhICdnaXQtcHVzaCcgaXMgZG9uZSBvbiBhIGxvY2FsIHJlcG9zaXRvcnkuCit3aGljaCBoYXBwZW5zIHdoZW4gYSAnZ2l0IHB1c2gnIGlzIGRvbmUgb24gYSBsb2NhbCByZXBvc2l0b3J5LgogSnVzdCBiZWZvcmUgc3RhcnRpbmcgdG8gdXBkYXRlIHJlZnMgb24gdGhlIHJlbW90ZSByZXBvc2l0b3J5LCB0aGUKIHByZS1yZWNlaXZlIGhvb2sgaXMgaW52b2tlZC4gIEl0cyBleGl0IHN0YXR1cyBkZXRlcm1pbmVzIHRoZSBzdWNjZXNzCiBvciBmYWlsdXJlIG9mIHRoZSB1cGRhdGUuCkBAIC0xOTksMTUgKzIwMiwxNSBAQAogc3RpbGwgYmUgcHJldmVudGVkIGJ5IHRoZSA8PHVwZGF0ZSwndXBkYXRlJz4+IGhvb2suCiAKIEJvdGggc3RhbmRhcmQgb3V0cHV0IGFuZCBzdGFuZGFyZCBlcnJvciBvdXRwdXQgYXJlIGZvcndhcmRlZCB0bwotJ2dpdC1zZW5kLXBhY2snIG9uIHRoZSBvdGhlciBlbmQsIHNvIHlvdSBjYW4gc2ltcGx5IGBlY2hvYCBtZXNzYWdlcworJ2dpdCBzZW5kLXBhY2snIG9uIHRoZSBvdGhlciBlbmQsIHNvIHlvdSBjYW4gc2ltcGx5IGBlY2hvYCBtZXNzYWdlcwogZm9yIHRoZSB1c2VyLgogCiBbW3VwZGF0ZV1dCiB1cGRhdGUKLS0tLS0tLQorfn5+fn5+CiAKIFRoaXMgaG9vayBpcyBpbnZva2VkIGJ5ICdnaXQtcmVjZWl2ZS1wYWNrJyBvbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnksCi13aGljaCBoYXBwZW5zIHdoZW4gYSAnZ2l0LXB1c2gnIGlzIGRvbmUgb24gYSBsb2NhbCByZXBvc2l0b3J5Lgord2hpY2ggaGFwcGVucyB3aGVuIGEgJ2dpdCBwdXNoJyBpcyBkb25lIG9uIGEgbG9jYWwgcmVwb3NpdG9yeS4KIEp1c3QgYmVmb3JlIHVwZGF0aW5nIHRoZSByZWYgb24gdGhlIHJlbW90ZSByZXBvc2l0b3J5LCB0aGUgdXBkYXRlIGhvb2sKIGlzIGludm9rZWQuICBJdHMgZXhpdCBzdGF0dXMgZGV0ZXJtaW5lcyB0aGUgc3VjY2VzcyBvciBmYWlsdXJlIG9mCiB0aGUgcmVmIHVwZGF0ZS4KQEAgLTIyNiw3ICsyMjksNyBAQAogVGhpcyBob29rIGNhbiBiZSB1c2VkIHRvIHByZXZlbnQgJ2ZvcmNlZCcgdXBkYXRlIG9uIGNlcnRhaW4gcmVmcyBieQogbWFraW5nIHN1cmUgdGhhdCB0aGUgb2JqZWN0IG5hbWUgaXMgYSBjb21taXQgb2JqZWN0IHRoYXQgaXMgYQogZGVzY2VuZGFudCBvZiB0aGUgY29tbWl0IG9iamVjdCBuYW1lZCBieSB0aGUgb2xkIG9iamVjdCBuYW1lLgotVGhhdCBpcywgdG8gZW5mb3JjZSBhICJmYXN0IGZvcndhcmQgb25seSIgcG9saWN5LgorVGhhdCBpcywgdG8gZW5mb3JjZSBhICJmYXN0LWZvcndhcmQgb25seSIgcG9saWN5LgogCiBJdCBjb3VsZCBhbHNvIGJlIHVzZWQgdG8gbG9nIHRoZSBvbGQuLm5ldyBzdGF0dXMuICBIb3dldmVyLCBpdAogZG9lcyBub3Qga25vdyB0aGUgZW50aXJlIHNldCBvZiBicmFuY2hlcywgc28gaXQgd291bGQgZW5kIHVwCkBAIC0yMzgsMTkgKzI0MSwxOSBAQAogYmFzZWQgb24gZmlsZXN5c3RlbSBncm91cC4KIAogQm90aCBzdGFuZGFyZCBvdXRwdXQgYW5kIHN0YW5kYXJkIGVycm9yIG91dHB1dCBhcmUgZm9yd2FyZGVkIHRvCi0nZ2l0LXNlbmQtcGFjaycgb24gdGhlIG90aGVyIGVuZCwgc28geW91IGNhbiBzaW1wbHkgYGVjaG9gIG1lc3NhZ2VzCisnZ2l0IHNlbmQtcGFjaycgb24gdGhlIG90aGVyIGVuZCwgc28geW91IGNhbiBzaW1wbHkgYGVjaG9gIG1lc3NhZ2VzCiBmb3IgdGhlIHVzZXIuCiAKIFRoZSBkZWZhdWx0ICd1cGRhdGUnIGhvb2ssIHdoZW4gZW5hYmxlZC0tYW5kIHdpdGgKLWBob29rcy5hbGxvd3VuYW5ub3RhdGVkYCBjb25maWcgb3B0aW9uIHR1cm5lZCBvbi0tcHJldmVudHMKK2Bob29rcy5hbGxvd3VuYW5ub3RhdGVkYCBjb25maWcgb3B0aW9uIHVuc2V0IG9yIHNldCB0byBmYWxzZS0tcHJldmVudHMKIHVuYW5ub3RhdGVkIHRhZ3MgdG8gYmUgcHVzaGVkLgogCiBbW3Bvc3QtcmVjZWl2ZV1dCiBwb3N0LXJlY2VpdmUKLS0tLS0tLS0tLS0tLQorfn5+fn5+fn5+fn5+CiAKIFRoaXMgaG9vayBpcyBpbnZva2VkIGJ5ICdnaXQtcmVjZWl2ZS1wYWNrJyBvbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnksCi13aGljaCBoYXBwZW5zIHdoZW4gYSAnZ2l0LXB1c2gnIGlzIGRvbmUgb24gYSBsb2NhbCByZXBvc2l0b3J5Lgord2hpY2ggaGFwcGVucyB3aGVuIGEgJ2dpdCBwdXNoJyBpcyBkb25lIG9uIGEgbG9jYWwgcmVwb3NpdG9yeS4KIEl0IGV4ZWN1dGVzIG9uIHRoZSByZW1vdGUgcmVwb3NpdG9yeSBvbmNlIGFmdGVyIGFsbCB0aGUgcmVmcyBoYXZlCiBiZWVuIHVwZGF0ZWQuCiAKQEAgLTI2Nyw3ICsyNzAsNyBAQAogbmFtZXMuCiAKIEJvdGggc3RhbmRhcmQgb3V0cHV0IGFuZCBzdGFuZGFyZCBlcnJvciBvdXRwdXQgYXJlIGZvcndhcmRlZCB0bwotJ2dpdC1zZW5kLXBhY2snIG9uIHRoZSBvdGhlciBlbmQsIHNvIHlvdSBjYW4gc2ltcGx5IGBlY2hvYCBtZXNzYWdlcworJ2dpdCBzZW5kLXBhY2snIG9uIHRoZSBvdGhlciBlbmQsIHNvIHlvdSBjYW4gc2ltcGx5IGBlY2hvYCBtZXNzYWdlcwogZm9yIHRoZSB1c2VyLgogCiBUaGUgZGVmYXVsdCAncG9zdC1yZWNlaXZlJyBob29rIGlzIGVtcHR5LCBidXQgdGhlcmUgaXMKQEAgLTI3NywxMCArMjgwLDEwIEBACiAKIFtbcG9zdC11cGRhdGVdXQogcG9zdC11cGRhdGUKLS0tLS0tLS0tLS0tCit+fn5+fn5+fn5+fgogCiBUaGlzIGhvb2sgaXMgaW52b2tlZCBieSAnZ2l0LXJlY2VpdmUtcGFjaycgb24gdGhlIHJlbW90ZSByZXBvc2l0b3J5LAotd2hpY2ggaGFwcGVucyB3aGVuIGEgJ2dpdC1wdXNoJyBpcyBkb25lIG9uIGEgbG9jYWwgcmVwb3NpdG9yeS4KK3doaWNoIGhhcHBlbnMgd2hlbiBhICdnaXQgcHVzaCcgaXMgZG9uZSBvbiBhIGxvY2FsIHJlcG9zaXRvcnkuCiBJdCBleGVjdXRlcyBvbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgb25jZSBhZnRlciBhbGwgdGhlIHJlZnMgaGF2ZQogYmVlbiB1cGRhdGVkLgogCkBAIC0yOTgsMjAgKzMwMSwyMCBAQAogdGhlbS4KIAogV2hlbiBlbmFibGVkLCB0aGUgZGVmYXVsdCAncG9zdC11cGRhdGUnIGhvb2sgcnVucwotJ2dpdC11cGRhdGUtc2VydmVyLWluZm8nIHRvIGtlZXAgdGhlIGluZm9ybWF0aW9uIHVzZWQgYnkgZHVtYgorJ2dpdCB1cGRhdGUtc2VydmVyLWluZm8nIHRvIGtlZXAgdGhlIGluZm9ybWF0aW9uIHVzZWQgYnkgZHVtYgogdHJhbnNwb3J0cyAoZS5nLiwgSFRUUCkgdXAtdG8tZGF0ZS4gIElmIHlvdSBhcmUgcHVibGlzaGluZwogYSBnaXQgcmVwb3NpdG9yeSB0aGF0IGlzIGFjY2Vzc2libGUgdmlhIEhUVFAsIHlvdSBzaG91bGQKIHByb2JhYmx5IGVuYWJsZSB0aGlzIGhvb2suCiAKIEJvdGggc3RhbmRhcmQgb3V0cHV0IGFuZCBzdGFuZGFyZCBlcnJvciBvdXRwdXQgYXJlIGZvcndhcmRlZCB0bwotJ2dpdC1zZW5kLXBhY2snIG9uIHRoZSBvdGhlciBlbmQsIHNvIHlvdSBjYW4gc2ltcGx5IGBlY2hvYCBtZXNzYWdlcworJ2dpdCBzZW5kLXBhY2snIG9uIHRoZSBvdGhlciBlbmQsIHNvIHlvdSBjYW4gc2ltcGx5IGBlY2hvYCBtZXNzYWdlcwogZm9yIHRoZSB1c2VyLgogCiBwcmUtYXV0by1nYwotLS0tLS0tLS0tLS0KK35+fn5+fn5+fn5+CiAKLVRoaXMgaG9vayBpcyBpbnZva2VkIGJ5ICdnaXQtZ2MgLS1hdXRvJy4gSXQgdGFrZXMgbm8gcGFyYW1ldGVyLCBhbmQKLWV4aXRpbmcgd2l0aCBub24temVybyBzdGF0dXMgZnJvbSB0aGlzIHNjcmlwdCBjYXVzZXMgdGhlICdnaXQtZ2MgLS1hdXRvJworVGhpcyBob29rIGlzIGludm9rZWQgYnkgJ2dpdCBnYyAtLWF1dG8nLiBJdCB0YWtlcyBubyBwYXJhbWV0ZXIsIGFuZAorZXhpdGluZyB3aXRoIG5vbi16ZXJvIHN0YXR1cyBmcm9tIHRoaXMgc2NyaXB0IGNhdXNlcyB0aGUgJ2dpdCBnYyAtLWF1dG8nCiB0byBhYm9ydC4KIAogR0lUCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdGlnbm9yZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGlnbm9yZS50eHQKaW5kZXggN2RmM2NlZi4uOThjNDU5ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXRpZ25vcmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0aWdub3JlLnR4dApAQCAtNTYsMTAgKzU2LDEwIEBACiBgY29yZS5leGNsdWRlc2ZpbGVgIGluIHRoZSB1c2VyJ3MgYH4vLmdpdGNvbmZpZ2AuCiAKIFRoZSB1bmRlcmx5aW5nIGdpdCBwbHVtYmluZyB0b29scywgc3VjaCBhcwotJ2dpdC1scy1maWxlcycgYW5kICdnaXQtcmVhZC10cmVlJywgcmVhZAorJ2dpdCBscy1maWxlcycgYW5kICdnaXQgcmVhZC10cmVlJywgcmVhZAogYGdpdGlnbm9yZWAgcGF0dGVybnMgc3BlY2lmaWVkIGJ5IGNvbW1hbmQtbGluZSBvcHRpb25zLCBvciBmcm9tCiBmaWxlcyBzcGVjaWZpZWQgYnkgY29tbWFuZC1saW5lIG9wdGlvbnMuICBIaWdoZXItbGV2ZWwgZ2l0Ci10b29scywgc3VjaCBhcyAnZ2l0LXN0YXR1cycgYW5kICdnaXQtYWRkJywKK3Rvb2xzLCBzdWNoIGFzICdnaXQgc3RhdHVzJyBhbmQgJ2dpdCBhZGQnLAogdXNlIHBhdHRlcm5zIGZyb20gdGhlIHNvdXJjZXMgc3BlY2lmaWVkIGFib3ZlLgogCiBQYXR0ZXJucyBoYXZlIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0ay50eHQKaW5kZXggY2Y0NjVjYi4uOTliYWEyNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXRrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdGsudHh0CkBAIC0yMiw3ICsyMiw3IEBACiBPUFRJT05TCiAtLS0tLS0tCiBUbyBjb250cm9sIHdoaWNoIHJldmlzaW9ucyB0byBzaG93LCB0aGUgY29tbWFuZCB0YWtlcyBvcHRpb25zIGFwcGxpY2FibGUgdG8KLXRoZSAnZ2l0LXJldi1saXN0JyBjb21tYW5kIChzZWUgbGlua2dpdDpnaXQtcmV2LWxpc3RbMV0pLgordGhlICdnaXQgcmV2LWxpc3QnIGNvbW1hbmQgKHNlZSBsaW5rZ2l0OmdpdC1yZXYtbGlzdFsxXSkuCiBUaGlzIG1hbnVhbCBwYWdlIGRlc2NyaWJlcyBvbmx5IHRoZSBtb3N0CiBmcmVxdWVudGx5IHVzZWQgb3B0aW9ucy4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRtb2R1bGVzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0bW9kdWxlcy50eHQKaW5kZXggZDFhMTdlMi4uNWRhZjc1MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXRtb2R1bGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdG1vZHVsZXMudHh0CkBAIC0zMCw2ICszMCwxNyBAQAogc3VibW9kdWxlLjxuYW1lPi51cmw6OgogCURlZmluZXMgYW4gdXJsIGZyb20gd2hlcmUgdGhlIHN1Ym1vZHVsZSByZXBvc2l0b3J5IGNhbiBiZSBjbG9uZWQuCiAKK3N1Ym1vZHVsZS48bmFtZT4udXBkYXRlOjoKKwlEZWZpbmVzIHdoYXQgdG8gZG8gd2hlbiB0aGUgc3VibW9kdWxlIGlzIHVwZGF0ZWQgYnkgdGhlIHN1cGVycHJvamVjdC4KKwlJZiAnY2hlY2tvdXQnICh0aGUgZGVmYXVsdCksIHRoZSBuZXcgY29tbWl0IHNwZWNpZmllZCBpbiB0aGUKKwlzdXBlcnByb2plY3Qgd2lsbCBiZSBjaGVja2VkIG91dCBpbiB0aGUgc3VibW9kdWxlIG9uIGEgZGV0YWNoZWQgSEVBRC4KKwlJZiAncmViYXNlJywgdGhlIGN1cnJlbnQgYnJhbmNoIG9mIHRoZSBzdWJtb2R1bGUgd2lsbCBiZSByZWJhc2VkIG9udG8KKwl0aGUgY29tbWl0IHNwZWNpZmllZCBpbiB0aGUgc3VwZXJwcm9qZWN0LiBJZiAnbWVyZ2UnLCB0aGUgY29tbWl0CisJc3BlY2lmaWVkIGluIHRoZSBzdXBlcnByb2plY3Qgd2lsbCBiZSBtZXJnZWQgaW50byB0aGUgY3VycmVudCBicmFuY2gKKwlpbiB0aGUgc3VibW9kdWxlLgorCVRoaXMgY29uZmlnIG9wdGlvbiBpcyBvdmVycmlkZGVuIGlmICdnaXQgc3VibW9kdWxlIHVwZGF0ZScgaXMgZ2l2ZW4KKwl0aGUgJy0tbWVyZ2UnIG9yICctLXJlYmFzZScgb3B0aW9ucy4KKwogCiBFWEFNUExFUwogLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0cmVwb3NpdG9yeS1sYXlvdXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRyZXBvc2l0b3J5LWxheW91dC50eHQKaW5kZXggMWJlZmNhOS4uM2NkMzJkNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXRyZXBvc2l0b3J5LWxheW91dC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRyZXBvc2l0b3J5LWxheW91dC50eHQKQEAgLTY0LDcgKzY0LDcgQEAKIAlhcmUgYXZhaWxhYmxlIGluIHRoaXMgb2JqZWN0IHN0b3JlLiAgV2hlbmV2ZXIgYSBwYWNrIGlzCiAJYWRkZWQgb3IgcmVtb3ZlZCwgYGdpdCB1cGRhdGUtc2VydmVyLWluZm9gIHNob3VsZCBiZSBydW4KIAl0byBrZWVwIHRoaXMgZmlsZSB1cC10by1kYXRlIGlmIHRoZSByZXBvc2l0b3J5IGlzCi0JcHVibGlzaGVkIGZvciBkdW1iIHRyYW5zcG9ydHMuICAnZ2l0LXJlcGFjaycgZG9lcyB0aGlzCisJcHVibGlzaGVkIGZvciBkdW1iIHRyYW5zcG9ydHMuICAnZ2l0IHJlcGFjaycgZG9lcyB0aGlzCiAJYnkgZGVmYXVsdC4KIAogb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXM6OgpAQCAtODUsNyArODUsNyBAQAogCiByZWZzOjoKIAlSZWZlcmVuY2VzIGFyZSBzdG9yZWQgaW4gc3ViZGlyZWN0b3JpZXMgb2YgdGhpcwotCWRpcmVjdG9yeS4gIFRoZSAnZ2l0LXBydW5lJyBjb21tYW5kIGtub3dzIHRvIGtlZXAKKwlkaXJlY3RvcnkuICBUaGUgJ2dpdCBwcnVuZScgY29tbWFuZCBrbm93cyB0byBrZWVwCiAJb2JqZWN0cyByZWFjaGFibGUgZnJvbSByZWZzIGZvdW5kIGluIHRoaXMgZGlyZWN0b3J5IGFuZAogCWl0cyBzdWJkaXJlY3Rvcmllcy4KIApAQCAtMTI1LDcgKzEyNSw3IEBACiAKIGJyYW5jaGVzOjoKIAlBIHNsaWdodGx5IGRlcHJlY2F0ZWQgd2F5IHRvIHN0b3JlIHNob3J0aGFuZHMgdG8gYmUgdXNlZAotCXRvIHNwZWNpZnkgVVJMIHRvICdnaXQtZmV0Y2gnLCAnZ2l0LXB1bGwnIGFuZCAnZ2l0LXB1c2gnCisJdG8gc3BlY2lmeSBVUkwgdG8gJ2dpdCBmZXRjaCcsICdnaXQgcHVsbCcgYW5kICdnaXQgcHVzaCcKIAljb21tYW5kcyBpcyB0byBzdG9yZSBhIGZpbGUgaW4gYGJyYW5jaGVzLzxuYW1lPmAgYW5kCiAJZ2l2ZSAnbmFtZScgdG8gdGhlc2UgY29tbWFuZHMgaW4gcGxhY2Ugb2YgJ3JlcG9zaXRvcnknCiAJYXJndW1lbnQuCkBAIC0xMzMsNyArMTMzLDcgQEAKIGhvb2tzOjoKIAlIb29rcyBhcmUgY3VzdG9taXphdGlvbiBzY3JpcHRzIHVzZWQgYnkgdmFyaW91cyBnaXQKIAljb21tYW5kcy4gIEEgaGFuZGZ1bCBvZiBzYW1wbGUgaG9va3MgYXJlIGluc3RhbGxlZCB3aGVuCi0JJ2dpdC1pbml0JyBpcyBydW4sIGJ1dCBhbGwgb2YgdGhlbSBhcmUgZGlzYWJsZWQgYnkKKwknZ2l0IGluaXQnIGlzIHJ1biwgYnV0IGFsbCBvZiB0aGVtIGFyZSBkaXNhYmxlZCBieQogCWRlZmF1bHQuICBUbyBlbmFibGUsIHRoZSBgLnNhbXBsZWAgc3VmZml4IGhhcyB0byBiZQogCXJlbW92ZWQgZnJvbSB0aGUgZmlsZW5hbWUgYnkgcmVuYW1pbmcuCiAJUmVhZCBsaW5rZ2l0OmdpdGhvb2tzWzVdIGZvciBtb3JlIGRldGFpbHMgYWJvdXQKQEAgLTE1MSwxMCArMTUxLDEwIEBACiAJVGhpcyBmaWxlIGhlbHBzIGR1bWIgdHJhbnNwb3J0cyBkaXNjb3ZlciB3aGF0IHJlZnMgYXJlCiAJYXZhaWxhYmxlIGluIHRoaXMgcmVwb3NpdG9yeS4gIElmIHRoZSByZXBvc2l0b3J5IGlzCiAJcHVibGlzaGVkIGZvciBkdW1iIHRyYW5zcG9ydHMsIHRoaXMgZmlsZSBzaG91bGQgYmUKLQlyZWdlbmVyYXRlZCBieSAnZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbycgZXZlcnkgdGltZSBhIHRhZworCXJlZ2VuZXJhdGVkIGJ5ICdnaXQgdXBkYXRlLXNlcnZlci1pbmZvJyBldmVyeSB0aW1lIGEgdGFnCiAJb3IgYnJhbmNoIGlzIGNyZWF0ZWQgb3IgbW9kaWZpZWQuICBUaGlzIGlzIG5vcm1hbGx5IGRvbmUKIAlmcm9tIHRoZSBgaG9va3MvdXBkYXRlYCBob29rLCB3aGljaCBpcyBydW4gYnkgdGhlCi0JJ2dpdC1yZWNlaXZlLXBhY2snIGNvbW1hbmQgd2hlbiB5b3UgJ2dpdC1wdXNoJyBpbnRvIHRoZQorCSdnaXQtcmVjZWl2ZS1wYWNrJyBjb21tYW5kIHdoZW4geW91ICdnaXQgcHVzaCcgaW50byB0aGUKIAlyZXBvc2l0b3J5LgogCiBpbmZvL2dyYWZ0czo6CkBAIC0xNjgsMTQgKzE2OCwxNCBAQAogaW5mby9leGNsdWRlOjoKIAlUaGlzIGZpbGUsIGJ5IGNvbnZlbnRpb24gYW1vbmcgUG9yY2VsYWlucywgc3RvcmVzIHRoZQogCWV4Y2x1ZGUgcGF0dGVybiBsaXN0LiBgLmdpdGlnbm9yZWAgaXMgdGhlIHBlci1kaXJlY3RvcnkKLQlpZ25vcmUgZmlsZS4gICdnaXQtc3RhdHVzJywgJ2dpdC1hZGQnLCAnZ2l0LXJtJyBhbmQKLQknZ2l0LWNsZWFuJyBsb29rIGF0IGl0IGJ1dCB0aGUgY29yZSBnaXQgY29tbWFuZHMgZG8gbm90IGxvb2sKKwlpZ25vcmUgZmlsZS4gICdnaXQgc3RhdHVzJywgJ2dpdCBhZGQnLCAnZ2l0IHJtJyBhbmQKKwknZ2l0IGNsZWFuJyBsb29rIGF0IGl0IGJ1dCB0aGUgY29yZSBnaXQgY29tbWFuZHMgZG8gbm90IGxvb2sKIAlhdCBpdC4gIFNlZSBhbHNvOiBsaW5rZ2l0OmdpdGlnbm9yZVs1XS4KIAogcmVtb3Rlczo6CiAJU3RvcmVzIHNob3J0aGFuZHMgdG8gYmUgdXNlZCB0byBnaXZlIFVSTCBhbmQgZGVmYXVsdAogCXJlZm5hbWVzIHRvIGludGVyYWN0IHdpdGggcmVtb3RlIHJlcG9zaXRvcnkgdG8KLQknZ2l0LWZldGNoJywgJ2dpdC1wdWxsJyBhbmQgJ2dpdC1wdXNoJyBjb21tYW5kcy4KKwknZ2l0IGZldGNoJywgJ2dpdCBwdWxsJyBhbmQgJ2dpdCBwdXNoJyBjb21tYW5kcy4KIAogbG9nczo6CiAJUmVjb3JkcyBvZiBjaGFuZ2VzIG1hZGUgdG8gcmVmcyBhcmUgc3RvcmVkIGluIHRoaXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0dHV0b3JpYWwtMi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdHR1dG9yaWFsLTIudHh0CmluZGV4IGRjOGZjM2EuLmVjYWIwYzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0dHV0b3JpYWwtMi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXR0dXRvcmlhbC0yLnR4dApAQCAtMjYwLDcgKzI2MCw3IEBACiAraGVsbG8gd29ybGQsIGFnYWluCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotU28gJ2dpdC1kaWZmJyBpcyBjb21wYXJpbmcgYWdhaW5zdCBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgaGVhZC4KK1NvICdnaXQgZGlmZicgaXMgY29tcGFyaW5nIGFnYWluc3Qgc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlIGhlYWQuCiBUaGUgdGhpbmcgdGhhdCBpdCdzIGNvbXBhcmluZyBhZ2FpbnN0IGlzIGFjdHVhbGx5IHRoZSBpbmRleCBmaWxlLAogd2hpY2ggaXMgc3RvcmVkIGluIC5naXQvaW5kZXggaW4gYSBiaW5hcnkgZm9ybWF0LCBidXQgd2hvc2UgY29udGVudHMKIHdlIGNhbiBleGFtaW5lIHdpdGggbHMtZmlsZXM6CkBAIC0yNzUsOSArMjc1LDkgQEAKIGhlbGxvIHdvcmxkLCBhZ2FpbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVNvIHdoYXQgb3VyICdnaXQtYWRkJyBkaWQgd2FzIHN0b3JlIGEgbmV3IGJsb2IgYW5kIHRoZW4gcHV0CitTbyB3aGF0IG91ciAnZ2l0IGFkZCcgZGlkIHdhcyBzdG9yZSBhIG5ldyBibG9iIGFuZCB0aGVuIHB1dAogYSByZWZlcmVuY2UgdG8gaXQgaW4gdGhlIGluZGV4IGZpbGUuICBJZiB3ZSBtb2RpZnkgdGhlIGZpbGUgYWdhaW4sCi13ZSdsbCBzZWUgdGhhdCB0aGUgbmV3IG1vZGlmaWNhdGlvbnMgYXJlIHJlZmxlY3RlZCBpbiB0aGUgJ2dpdC1kaWZmJword2UnbGwgc2VlIHRoYXQgdGhlIG5ldyBtb2RpZmljYXRpb25zIGFyZSByZWZsZWN0ZWQgaW4gdGhlICdnaXQgZGlmZicKIG91dHB1dDoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yOTIsNyArMjkyLDcgQEAKICthZ2Fpbj8KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaXRoIHRoZSByaWdodCBhcmd1bWVudHMsICdnaXQtZGlmZicgY2FuIGFsc28gc2hvdyB1cyB0aGUgZGlmZmVyZW5jZQorV2l0aCB0aGUgcmlnaHQgYXJndW1lbnRzLCAnZ2l0IGRpZmYnIGNhbiBhbHNvIHNob3cgdXMgdGhlIGRpZmZlcmVuY2UKIGJldHdlZW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCB0aGUgbGFzdCBjb21taXQsIG9yIGJldHdlZW4gdGhlCiBpbmRleCBhbmQgdGhlIGxhc3QgY29tbWl0OgogCkBAIC0zMTYsNyArMzE2LDcgQEAKICtoZWxsbyB3b3JsZCwgYWdhaW4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1BdCBhbnkgdGltZSwgd2UgY2FuIGNyZWF0ZSBhIG5ldyBjb21taXQgdXNpbmcgJ2dpdC1jb21taXQnICh3aXRob3V0CitBdCBhbnkgdGltZSwgd2UgY2FuIGNyZWF0ZSBhIG5ldyBjb21taXQgdXNpbmcgJ2dpdCBjb21taXQnICh3aXRob3V0CiB0aGUgIi1hIiBvcHRpb24pLCBhbmQgdmVyaWZ5IHRoYXQgdGhlIHN0YXRlIGNvbW1pdHRlZCBvbmx5IGluY2x1ZGVzIHRoZQogY2hhbmdlcyBzdG9yZWQgaW4gdGhlIGluZGV4IGZpbGUsIG5vdCB0aGUgYWRkaXRpb25hbCBjaGFuZ2UgdGhhdCBpcwogc3RpbGwgb25seSBpbiBvdXIgd29ya2luZyB0cmVlOgpAQCAtMzM0LDExICszMzQsMTEgQEAKICthZ2Fpbj8KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1TbyBieSBkZWZhdWx0ICdnaXQtY29tbWl0JyB1c2VzIHRoZSBpbmRleCB0byBjcmVhdGUgdGhlIGNvbW1pdCwgbm90CitTbyBieSBkZWZhdWx0ICdnaXQgY29tbWl0JyB1c2VzIHRoZSBpbmRleCB0byBjcmVhdGUgdGhlIGNvbW1pdCwgbm90CiB0aGUgd29ya2luZyB0cmVlOyB0aGUgIi1hIiBvcHRpb24gdG8gY29tbWl0IHRlbGxzIGl0IHRvIGZpcnN0IHVwZGF0ZQogdGhlIGluZGV4IHdpdGggYWxsIGNoYW5nZXMgaW4gdGhlIHdvcmtpbmcgdHJlZS4KIAotRmluYWxseSwgaXQncyB3b3J0aCBsb29raW5nIGF0IHRoZSBlZmZlY3Qgb2YgJ2dpdC1hZGQnIG9uIHRoZSBpbmRleAorRmluYWxseSwgaXQncyB3b3J0aCBsb29raW5nIGF0IHRoZSBlZmZlY3Qgb2YgJ2dpdCBhZGQnIG9uIHRoZSBpbmRleAogZmlsZToKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zNDYsNyArMzQ2LDcgQEAKICQgZ2l0IGFkZCBjbG9zaW5nLnR4dAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRoZSBlZmZlY3Qgb2YgdGhlICdnaXQtYWRkJyB3YXMgdG8gYWRkIG9uZSBlbnRyeSB0byB0aGUgaW5kZXggZmlsZToKK1RoZSBlZmZlY3Qgb2YgdGhlICdnaXQgYWRkJyB3YXMgdG8gYWRkIG9uZSBlbnRyeSB0byB0aGUgaW5kZXggZmlsZToKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAkIGdpdCBscy1maWxlcyAtLXN0YWdlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdHR1dG9yaWFsLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0dHV0b3JpYWwudHh0CmluZGV4IGNmMDY4OWMuLjFjMTYwNjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0dHV0b3JpYWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0dHV0b3JpYWwudHh0CkBAIC02Nyw3ICs2Nyw3IEBACiBkaXJlY3RvcnkgY3JlYXRlZCwgbmFtZWQgIi5naXQiLgogCiBOZXh0LCB0ZWxsIGdpdCB0byB0YWtlIGEgc25hcHNob3Qgb2YgdGhlIGNvbnRlbnRzIG9mIGFsbCBmaWxlcyB1bmRlciB0aGUKLWN1cnJlbnQgZGlyZWN0b3J5IChub3RlIHRoZSAnLicpLCB3aXRoICdnaXQtYWRkJzoKK2N1cnJlbnQgZGlyZWN0b3J5IChub3RlIHRoZSAnLicpLCB3aXRoICdnaXQgYWRkJzoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAkIGdpdCBhZGQgLgpAQCAtNzUsNyArNzUsNyBAQAogCiBUaGlzIHNuYXBzaG90IGlzIG5vdyBzdG9yZWQgaW4gYSB0ZW1wb3Jhcnkgc3RhZ2luZyBhcmVhIHdoaWNoIGdpdCBjYWxscwogdGhlICJpbmRleCIuICBZb3UgY2FuIHBlcm1hbmVudGx5IHN0b3JlIHRoZSBjb250ZW50cyBvZiB0aGUgaW5kZXggaW4gdGhlCi1yZXBvc2l0b3J5IHdpdGggJ2dpdC1jb21taXQnOgorcmVwb3NpdG9yeSB3aXRoICdnaXQgY29tbWl0JzoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAkIGdpdCBjb21taXQKQEAgLTk0LDE1ICs5NCwxNSBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFlvdSBhcmUgbm93IHJlYWR5IHRvIGNvbW1pdC4gIFlvdSBjYW4gc2VlIHdoYXQgaXMgYWJvdXQgdG8gYmUgY29tbWl0dGVkCi11c2luZyAnZ2l0LWRpZmYnIHdpdGggdGhlIC0tY2FjaGVkIG9wdGlvbjoKK3VzaW5nICdnaXQgZGlmZicgd2l0aCB0aGUgLS1jYWNoZWQgb3B0aW9uOgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICQgZ2l0IGRpZmYgLS1jYWNoZWQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0oV2l0aG91dCAtLWNhY2hlZCwgJ2dpdC1kaWZmJyB3aWxsIHNob3cgeW91IGFueSBjaGFuZ2VzIHRoYXQKKyhXaXRob3V0IC0tY2FjaGVkLCAnZ2l0IGRpZmYnIHdpbGwgc2hvdyB5b3UgYW55IGNoYW5nZXMgdGhhdAogeW91J3ZlIG1hZGUgYnV0IG5vdCB5ZXQgYWRkZWQgdG8gdGhlIGluZGV4LikgIFlvdSBjYW4gYWxzbyBnZXQgYSBicmllZgotc3VtbWFyeSBvZiB0aGUgc2l0dWF0aW9uIHdpdGggJ2dpdC1zdGF0dXMnOgorc3VtbWFyeSBvZiB0aGUgc2l0dWF0aW9uIHdpdGggJ2dpdCBzdGF0dXMnOgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICQgZ2l0IHN0YXR1cwpAQCAtMTI2LDcgKzEyNiw3IEBACiBUaGlzIHdpbGwgYWdhaW4gcHJvbXB0IHlvdSBmb3IgYSBtZXNzYWdlIGRlc2NyaWJpbmcgdGhlIGNoYW5nZSwgYW5kIHRoZW4KIHJlY29yZCBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBwcm9qZWN0LgogCi1BbHRlcm5hdGl2ZWx5LCBpbnN0ZWFkIG9mIHJ1bm5pbmcgJ2dpdC1hZGQnIGJlZm9yZWhhbmQsIHlvdSBjYW4gdXNlCitBbHRlcm5hdGl2ZWx5LCBpbnN0ZWFkIG9mIHJ1bm5pbmcgJ2dpdCBhZGQnIGJlZm9yZWhhbmQsIHlvdSBjYW4gdXNlCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogJCBnaXQgY29tbWl0IC1hCkBAIC0xNDcsNyArMTQ3LDcgQEAKIAogTWFueSByZXZpc2lvbiBjb250cm9sIHN5c3RlbXMgcHJvdmlkZSBhbiBgYWRkYCBjb21tYW5kIHRoYXQgdGVsbHMgdGhlCiBzeXN0ZW0gdG8gc3RhcnQgdHJhY2tpbmcgY2hhbmdlcyB0byBhIG5ldyBmaWxlLiAgR2l0J3MgYGFkZGAgY29tbWFuZAotZG9lcyBzb21ldGhpbmcgc2ltcGxlciBhbmQgbW9yZSBwb3dlcmZ1bDogJ2dpdC1hZGQnIGlzIHVzZWQgYm90aCBmb3IgbmV3Citkb2VzIHNvbWV0aGluZyBzaW1wbGVyIGFuZCBtb3JlIHBvd2VyZnVsOiAnZ2l0IGFkZCcgaXMgdXNlZCBib3RoIGZvciBuZXcKIGFuZCBuZXdseSBtb2RpZmllZCBmaWxlcywgYW5kIGluIGJvdGggY2FzZXMgaXQgdGFrZXMgYSBzbmFwc2hvdCBvZiB0aGUKIGdpdmVuIGZpbGVzIGFuZCBzdGFnZXMgdGhhdCBjb250ZW50IGluIHRoZSBpbmRleCwgcmVhZHkgZm9yIGluY2x1c2lvbiBpbgogdGhlIG5leHQgY29tbWl0LgpAQCAtMzc2LDcgKzM3Niw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogV2l0aCB0aGlzLCBBbGljZSBjYW4gcGVyZm9ybSB0aGUgZmlyc3QgcGFydCBvZiB0aGUgInB1bGwiIG9wZXJhdGlvbgotYWxvbmUgdXNpbmcgdGhlICdnaXQtZmV0Y2gnIGNvbW1hbmQgd2l0aG91dCBtZXJnaW5nIHRoZW0gd2l0aCBoZXIgb3duCithbG9uZSB1c2luZyB0aGUgJ2dpdCBmZXRjaCcgY29tbWFuZCB3aXRob3V0IG1lcmdpbmcgdGhlbSB3aXRoIGhlciBvd24KIGJyYW5jaCwgdXNpbmc6CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM4NCw3ICszODQsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBVbmxpa2UgdGhlIGxvbmdoYW5kIGZvcm0sIHdoZW4gQWxpY2UgZmV0Y2hlcyBmcm9tIEJvYiB1c2luZyBhCi1yZW1vdGUgcmVwb3NpdG9yeSBzaG9ydGhhbmQgc2V0IHVwIHdpdGggJ2dpdC1yZW1vdGUnLCB3aGF0IHdhcworcmVtb3RlIHJlcG9zaXRvcnkgc2hvcnRoYW5kIHNldCB1cCB3aXRoICdnaXQgcmVtb3RlJywgd2hhdCB3YXMKIGZldGNoZWQgaXMgc3RvcmVkIGluIGEgcmVtb3RlIHRyYWNraW5nIGJyYW5jaCwgaW4gdGhpcyBjYXNlCiBgYm9iL21hc3RlcmAuICBTbyBhZnRlciB0aGlzOgogCkBAIC00MjgsNyArNDI4LDcgQEAKIC9ob21lL2FsaWNlL3Byb2plY3QKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotKFRoZSBjb21wbGV0ZSBjb25maWd1cmF0aW9uIGNyZWF0ZWQgYnkgJ2dpdC1jbG9uZScgaXMgdmlzaWJsZSB1c2luZworKFRoZSBjb21wbGV0ZSBjb25maWd1cmF0aW9uIGNyZWF0ZWQgYnkgJ2dpdCBjbG9uZScgaXMgdmlzaWJsZSB1c2luZwogYGdpdCBjb25maWcgLWxgLCBhbmQgdGhlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBtYW4gcGFnZQogZXhwbGFpbnMgdGhlIG1lYW5pbmcgb2YgZWFjaCBvcHRpb24uKQogCkBAIC00NTgsNyArNDU4LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tCiAKIEdpdCBoaXN0b3J5IGlzIHJlcHJlc2VudGVkIGFzIGEgc2VyaWVzIG9mIGludGVycmVsYXRlZCBjb21taXRzLiAgV2UKLWhhdmUgYWxyZWFkeSBzZWVuIHRoYXQgdGhlICdnaXQtbG9nJyBjb21tYW5kIGNhbiBsaXN0IHRob3NlIGNvbW1pdHMuCitoYXZlIGFscmVhZHkgc2VlbiB0aGF0IHRoZSAnZ2l0IGxvZycgY29tbWFuZCBjYW4gbGlzdCB0aG9zZSBjb21taXRzLgogTm90ZSB0aGF0IGZpcnN0IGxpbmUgb2YgZWFjaCBnaXQgbG9nIGVudHJ5IGFsc28gZ2l2ZXMgYSBuYW1lIGZvciB0aGUKIGNvbW1pdDoKIApAQCAtNDcxLDcgKzQ3MSw3IEBACiAgICAgbWVyZ2UtYmFzZTogQ2xhcmlmeSB0aGUgY29tbWVudHMgb24gcG9zdCBwcm9jZXNzaW5nLgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XZSBjYW4gZ2l2ZSB0aGlzIG5hbWUgdG8gJ2dpdC1zaG93JyB0byBzZWUgdGhlIGRldGFpbHMgYWJvdXQgdGhpcworV2UgY2FuIGdpdmUgdGhpcyBuYW1lIHRvICdnaXQgc2hvdycgdG8gc2VlIHRoZSBkZXRhaWxzIGFib3V0IHRoaXMKIGNvbW1pdC4KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNTI5LDEzICs1MjksMTMgQEAKIEJlIGNhcmVmdWwgd2l0aCB0aGF0IGxhc3QgY29tbWFuZDogaW4gYWRkaXRpb24gdG8gbG9zaW5nIGFueSBjaGFuZ2VzCiBpbiB0aGUgd29ya2luZyBkaXJlY3RvcnksIGl0IHdpbGwgYWxzbyByZW1vdmUgYWxsIGxhdGVyIGNvbW1pdHMgZnJvbQogdGhpcyBicmFuY2guICBJZiB0aGlzIGJyYW5jaCBpcyB0aGUgb25seSBicmFuY2ggY29udGFpbmluZyB0aG9zZQotY29tbWl0cywgdGhleSB3aWxsIGJlIGxvc3QuICBBbHNvLCBkb24ndCB1c2UgJ2dpdC1yZXNldCcgb24gYQorY29tbWl0cywgdGhleSB3aWxsIGJlIGxvc3QuICBBbHNvLCBkb24ndCB1c2UgJ2dpdCByZXNldCcgb24gYQogcHVibGljbHktdmlzaWJsZSBicmFuY2ggdGhhdCBvdGhlciBkZXZlbG9wZXJzIHB1bGwgZnJvbSwgYXMgaXQgd2lsbAogZm9yY2UgbmVlZGxlc3MgbWVyZ2VzIG9uIG90aGVyIGRldmVsb3BlcnMgdG8gY2xlYW4gdXAgdGhlIGhpc3RvcnkuCi1JZiB5b3UgbmVlZCB0byB1bmRvIGNoYW5nZXMgdGhhdCB5b3UgaGF2ZSBwdXNoZWQsIHVzZSAnZ2l0LXJldmVydCcKK0lmIHlvdSBuZWVkIHRvIHVuZG8gY2hhbmdlcyB0aGF0IHlvdSBoYXZlIHB1c2hlZCwgdXNlICdnaXQgcmV2ZXJ0JwogaW5zdGVhZC4KIAotVGhlICdnaXQtZ3JlcCcgY29tbWFuZCBjYW4gc2VhcmNoIGZvciBzdHJpbmdzIGluIGFueSB2ZXJzaW9uIG9mIHlvdXIKK1RoZSAnZ2l0IGdyZXAnIGNvbW1hbmQgY2FuIHNlYXJjaCBmb3Igc3RyaW5ncyBpbiBhbnkgdmVyc2lvbiBvZiB5b3VyCiBwcm9qZWN0LCBzbwogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01NDQsNyArNTQ0LDcgQEAKIAogc2VhcmNoZXMgZm9yIGFsbCBvY2N1cnJlbmNlcyBvZiAiaGVsbG8iIGluIHYyLjUuCiAKLUlmIHlvdSBsZWF2ZSBvdXQgdGhlIGNvbW1pdCBuYW1lLCAnZ2l0LWdyZXAnIHdpbGwgc2VhcmNoIGFueSBvZiB0aGUKK0lmIHlvdSBsZWF2ZSBvdXQgdGhlIGNvbW1pdCBuYW1lLCAnZ2l0IGdyZXAnIHdpbGwgc2VhcmNoIGFueSBvZiB0aGUKIGZpbGVzIGl0IG1hbmFnZXMgaW4geW91ciBjdXJyZW50IGRpcmVjdG9yeS4gIFNvCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTU1NCw3ICs1NTQsNyBAQAogaXMgYSBxdWljayB3YXkgdG8gc2VhcmNoIGp1c3QgdGhlIGZpbGVzIHRoYXQgYXJlIHRyYWNrZWQgYnkgZ2l0LgogCiBNYW55IGdpdCBjb21tYW5kcyBhbHNvIHRha2Ugc2V0cyBvZiBjb21taXRzLCB3aGljaCBjYW4gYmUgc3BlY2lmaWVkCi1pbiBhIG51bWJlciBvZiB3YXlzLiAgSGVyZSBhcmUgc29tZSBleGFtcGxlcyB3aXRoICdnaXQtbG9nJzoKK2luIGEgbnVtYmVyIG9mIHdheXMuICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzIHdpdGggJ2dpdCBsb2cnOgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAkIGdpdCBsb2cgdjIuNS4udjIuNiAgICAgICAgICAgICMgY29tbWl0cyBiZXR3ZWVuIHYyLjUgYW5kIHYyLjYKQEAgLTU2NCw3ICs1NjQsNyBAQAogCQkJCSMgTWFrZWZpbGUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotWW91IGNhbiBhbHNvIGdpdmUgJ2dpdC1sb2cnIGEgInJhbmdlIiBvZiBjb21taXRzIHdoZXJlIHRoZSBmaXJzdCBpcyBub3QKK1lvdSBjYW4gYWxzbyBnaXZlICdnaXQgbG9nJyBhICJyYW5nZSIgb2YgY29tbWl0cyB3aGVyZSB0aGUgZmlyc3QgaXMgbm90CiBuZWNlc3NhcmlseSBhbiBhbmNlc3RvciBvZiB0aGUgc2Vjb25kOyBmb3IgZXhhbXBsZSwgaWYgdGhlIHRpcHMgb2YKIHRoZSBicmFuY2hlcyAic3RhYmxlIiBhbmQgIm1hc3RlciIgZGl2ZXJnZWQgZnJvbSBhIGNvbW1vbgogY29tbWl0IHNvbWUgdGltZSBhZ28sIHRoZW4KQEAgLTU4Myw5ICs1ODMsOSBAQAogd2lsbCBzaG93IHRoZSBsaXN0IG9mIGNvbW1pdHMgbWFkZSBvbiB0aGUgc3RhYmxlIGJyYW5jaCBidXQgbm90CiB0aGUgbWFzdGVyIGJyYW5jaC4KIAotVGhlICdnaXQtbG9nJyBjb21tYW5kIGhhcyBhIHdlYWtuZXNzOiBpdCBtdXN0IHByZXNlbnQgY29tbWl0cyBpbiBhCitUaGUgJ2dpdCBsb2cnIGNvbW1hbmQgaGFzIGEgd2Vha25lc3M6IGl0IG11c3QgcHJlc2VudCBjb21taXRzIGluIGEKIGxpc3QuICBXaGVuIHRoZSBoaXN0b3J5IGhhcyBsaW5lcyBvZiBkZXZlbG9wbWVudCB0aGF0IGRpdmVyZ2VkIGFuZAotdGhlbiBtZXJnZWQgYmFjayB0b2dldGhlciwgdGhlIG9yZGVyIGluIHdoaWNoICdnaXQtbG9nJyBwcmVzZW50cwordGhlbiBtZXJnZWQgYmFjayB0b2dldGhlciwgdGhlIG9yZGVyIGluIHdoaWNoICdnaXQgbG9nJyBwcmVzZW50cwogdGhvc2UgY29tbWl0cyBpcyBtZWFuaW5nbGVzcy4KIAogTW9zdCBwcm9qZWN0cyB3aXRoIG11bHRpcGxlIGNvbnRyaWJ1dG9ycyAoc3VjaCBhcyB0aGUgTGludXgga2VybmVsLApAQCAtNjA5LDcgKzYwOSw3IEBACiAkIGdpdCBkaWZmIHYyLjU6TWFrZWZpbGUgSEVBRDpNYWtlZmlsZS5pbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Zb3UgY2FuIGFsc28gdXNlICdnaXQtc2hvdycgdG8gc2VlIGFueSBzdWNoIGZpbGU6CitZb3UgY2FuIGFsc28gdXNlICdnaXQgc2hvdycgdG8gc2VlIGFueSBzdWNoIGZpbGU6CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICQgZ2l0IHNob3cgdjIuNTpNYWtlZmlsZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXR3b3JrZmxvd3MudHh0IGIvRG9jdW1lbnRhdGlvbi9naXR3b3JrZmxvd3MudHh0CmluZGV4IDJiMDIxZTMuLjFlZjU1ZmYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0d29ya2Zsb3dzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdHdvcmtmbG93cy50eHQKQEAgLTIwOSw2ICsyMDksMTIxIEBACiBoYXMgc3VjaCBhbiBvZmZpY2lhbCB0aHJvdy1hd2F5IGludGVncmF0aW9uIGJyYW5jaCBjYWxsZWQgJ3B1Jy4KIAogCitCcmFuY2ggbWFuYWdlbWVudCBmb3IgYSByZWxlYXNlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0Fzc3VtaW5nIHlvdSBhcmUgdXNpbmcgdGhlIG1lcmdlIGFwcHJvYWNoIGRpc2N1c3NlZCBhYm92ZSwgd2hlbiB5b3UKK2FyZSByZWxlYXNpbmcgeW91ciBwcm9qZWN0IHlvdSB3aWxsIG5lZWQgdG8gZG8gc29tZSBhZGRpdGlvbmFsIGJyYW5jaAorbWFuYWdlbWVudCB3b3JrLgorCitBIGZlYXR1cmUgcmVsZWFzZSBpcyBjcmVhdGVkIGZyb20gdGhlICdtYXN0ZXInIGJyYW5jaCwgc2luY2UgJ21hc3RlcicKK3RyYWNrcyB0aGUgY29tbWl0cyB0aGF0IHNob3VsZCBnbyBpbnRvIHRoZSBuZXh0IGZlYXR1cmUgcmVsZWFzZS4KKworVGhlICdtYXN0ZXInIGJyYW5jaCBpcyBzdXBwb3NlZCB0byBiZSBhIHN1cGVyc2V0IG9mICdtYWludCcuIElmIHRoaXMKK2NvbmRpdGlvbiBkb2VzIG5vdCBob2xkLCB0aGVuICdtYWludCcgY29udGFpbnMgc29tZSBjb21taXRzIHRoYXQKK2FyZSBub3QgaW5jbHVkZWQgb24gJ21hc3RlcicuIFRoZSBmaXhlcyByZXByZXNlbnRlZCBieSB0aG9zZSBjb21taXRzCit3aWxsIHRoZXJlZm9yZSBub3QgYmUgaW5jbHVkZWQgaW4geW91ciBmZWF0dXJlIHJlbGVhc2UuCisKK1RvIHZlcmlmeSB0aGF0ICdtYXN0ZXInIGlzIGluZGVlZCBhIHN1cGVyc2V0IG9mICdtYWludCcsIHVzZSBnaXQgbG9nOgorCisuVmVyaWZ5ICdtYXN0ZXInIGlzIGEgc3VwZXJzZXQgb2YgJ21haW50JworW2NhcHRpb249IlJlY2lwZTogIl0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2BnaXQgbG9nIG1hc3Rlci4ubWFpbnRgCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgY29tbWFuZCBzaG91bGQgbm90IGxpc3QgYW55IGNvbW1pdHMuICBPdGhlcndpc2UsIGNoZWNrIG91dAorJ21hc3RlcicgYW5kIG1lcmdlICdtYWludCcgaW50byBpdC4KKworTm93IHlvdSBjYW4gcHJvY2VlZCB3aXRoIHRoZSBjcmVhdGlvbiBvZiB0aGUgZmVhdHVyZSByZWxlYXNlLiBBcHBseSBhCit0YWcgdG8gdGhlIHRpcCBvZiAnbWFzdGVyJyBpbmRpY2F0aW5nIHRoZSByZWxlYXNlIHZlcnNpb246CisKKy5SZWxlYXNlIHRhZ2dpbmcKK1tjYXB0aW9uPSJSZWNpcGU6ICJdCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitgZ2l0IHRhZyAtcyAtbSAiR0lUIFguWS5aIiB2WC5ZLlogbWFzdGVyYAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitZb3UgbmVlZCB0byBwdXNoIHRoZSBuZXcgdGFnIHRvIGEgcHVibGljIGdpdCBzZXJ2ZXIgKHNlZQorIkRJU1RSSUJVVEVEIFdPUktGTE9XUyIgYmVsb3cpLiBUaGlzIG1ha2VzIHRoZSB0YWcgYXZhaWxhYmxlIHRvCitvdGhlcnMgdHJhY2tpbmcgeW91ciBwcm9qZWN0LiBUaGUgcHVzaCBjb3VsZCBhbHNvIHRyaWdnZXIgYQorcG9zdC11cGRhdGUgaG9vayB0byBwZXJmb3JtIHJlbGVhc2UtcmVsYXRlZCBpdGVtcyBzdWNoIGFzIGJ1aWxkaW5nCityZWxlYXNlIHRhcmJhbGxzIGFuZCBwcmVmb3JtYXR0ZWQgZG9jdW1lbnRhdGlvbiBwYWdlcy4KKworU2ltaWxhcmx5LCBmb3IgYSBtYWludGVuYW5jZSByZWxlYXNlLCAnbWFpbnQnIGlzIHRyYWNraW5nIHRoZSBjb21taXRzCit0byBiZSByZWxlYXNlZC4gVGhlcmVmb3JlLCBpbiB0aGUgc3RlcHMgYWJvdmUgc2ltcGx5IHRhZyBhbmQgcHVzaAorJ21haW50JyByYXRoZXIgdGhhbiAnbWFzdGVyJy4KKworCitNYWludGVuYW5jZSBicmFuY2ggbWFuYWdlbWVudCBhZnRlciBhIGZlYXR1cmUgcmVsZWFzZQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQWZ0ZXIgYSBmZWF0dXJlIHJlbGVhc2UsIHlvdSBuZWVkIHRvIG1hbmFnZSB5b3VyIG1haW50ZW5hbmNlIGJyYW5jaGVzLgorCitGaXJzdCwgaWYgeW91IHdpc2ggdG8gY29udGludWUgdG8gcmVsZWFzZSBtYWludGVuYW5jZSBmaXhlcyBmb3IgdGhlCitmZWF0dXJlIHJlbGVhc2UgbWFkZSBiZWZvcmUgdGhlIHJlY2VudCBvbmUsIHRoZW4geW91IG11c3QgY3JlYXRlCithbm90aGVyIGJyYW5jaCB0byB0cmFjayBjb21taXRzIGZvciB0aGF0IHByZXZpb3VzIHJlbGVhc2UuCisKK1RvIGRvIHRoaXMsIHRoZSBjdXJyZW50IG1haW50ZW5hbmNlIGJyYW5jaCBpcyBjb3BpZWQgdG8gYW5vdGhlciBicmFuY2gKK25hbWVkIHdpdGggdGhlIHByZXZpb3VzIHJlbGVhc2UgdmVyc2lvbiBudW1iZXIgKGUuZy4gbWFpbnQtWC5ZLihaLTEpCit3aGVyZSBYLlkuWiBpcyB0aGUgY3VycmVudCByZWxlYXNlKS4KKworLkNvcHkgbWFpbnQKK1tjYXB0aW9uPSJSZWNpcGU6ICJdCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitgZ2l0IGJyYW5jaCBtYWludC1YLlkuKFotMSkgbWFpbnRgCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSAnbWFpbnQnIGJyYW5jaCBzaG91bGQgbm93IGJlIGZhc3QtZm9yd2FyZGVkIHRvIHRoZSBuZXdseSByZWxlYXNlZAorY29kZSBzbyB0aGF0IG1haW50ZW5hbmNlIGZpeGVzIGNhbiBiZSB0cmFja2VkIGZvciB0aGUgY3VycmVudCByZWxlYXNlOgorCisuVXBkYXRlIG1haW50IHRvIG5ldyByZWxlYXNlCitbY2FwdGlvbj0iUmVjaXBlOiAiXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKiBgZ2l0IGNoZWNrb3V0IG1haW50YAorKiBgZ2l0IG1lcmdlIC0tZmYtb25seSBtYXN0ZXJgCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0lmIHRoZSBtZXJnZSBmYWlscyBiZWNhdXNlIGl0IGlzIG5vdCBhIGZhc3QtZm9yd2FyZCwgdGhlbiBpdCBpcworcG9zc2libGUgc29tZSBmaXhlcyBvbiAnbWFpbnQnIHdlcmUgbWlzc2VkIGluIHRoZSBmZWF0dXJlIHJlbGVhc2UuCitUaGlzIHdpbGwgbm90IGhhcHBlbiBpZiB0aGUgY29udGVudCBvZiB0aGUgYnJhbmNoZXMgd2FzIHZlcmlmaWVkIGFzCitkZXNjcmliZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24uCisKKworQnJhbmNoIG1hbmFnZW1lbnQgZm9yIG5leHQgYW5kIHB1IGFmdGVyIGEgZmVhdHVyZSByZWxlYXNlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQWZ0ZXIgYSBmZWF0dXJlIHJlbGVhc2UsIHRoZSBpbnRlZ3JhdGlvbiBicmFuY2ggJ25leHQnIG1heSBvcHRpb25hbGx5IGJlCityZXdvdW5kIGFuZCByZWJ1aWx0IGZyb20gdGhlIHRpcCBvZiAnbWFzdGVyJyB1c2luZyB0aGUgc3Vydml2aW5nCit0b3BpY3Mgb24gJ25leHQnOgorCisuUmV3aW5kIGFuZCByZWJ1aWxkIG5leHQKK1tjYXB0aW9uPSJSZWNpcGU6ICJdCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqIGBnaXQgY2hlY2tvdXQgbmV4dGAKKyogYGdpdCByZXNldCAtLWhhcmQgbWFzdGVyYAorKiBgZ2l0IG1lcmdlIGFpL3RvcGljX2luX25leHQxYAorKiBgZ2l0IG1lcmdlIGFpL3RvcGljX2luX25leHQyYAorKiAuLi4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGFkdmFudGFnZSBvZiBkb2luZyB0aGlzIGlzIHRoYXQgdGhlIGhpc3Rvcnkgb2YgJ25leHQnIHdpbGwgYmUKK2NsZWFuLiBGb3IgZXhhbXBsZSwgc29tZSB0b3BpY3MgbWVyZ2VkIGludG8gJ25leHQnIG1heSBoYXZlIGluaXRpYWxseQorbG9va2VkIHByb21pc2luZywgYnV0IHdlcmUgbGF0ZXIgZm91bmQgdG8gYmUgdW5kZXNpcmFibGUgb3IgcHJlbWF0dXJlLgorSW4gc3VjaCBhIGNhc2UsIHRoZSB0b3BpYyBpcyByZXZlcnRlZCBvdXQgb2YgJ25leHQnIGJ1dCB0aGUgZmFjdAorcmVtYWlucyBpbiB0aGUgaGlzdG9yeSB0aGF0IGl0IHdhcyBvbmNlIG1lcmdlZCBhbmQgcmV2ZXJ0ZWQuIEJ5CityZWNyZWF0aW5nICduZXh0JywgeW91IGdpdmUgYW5vdGhlciBpbmNhcm5hdGlvbiBvZiBzdWNoIHRvcGljcyBhIGNsZWFuCitzbGF0ZSB0byByZXRyeSwgYW5kIGEgZmVhdHVyZSByZWxlYXNlIGlzIGEgZ29vZCBwb2ludCBpbiBoaXN0b3J5IHRvIGRvCitzby4KKworSWYgeW91IGRvIHRoaXMsIHRoZW4geW91IHNob3VsZCBtYWtlIGEgcHVibGljIGFubm91bmNlbWVudCBpbmRpY2F0aW5nCit0aGF0ICduZXh0JyB3YXMgcmV3b3VuZCBhbmQgcmVidWlsdC4KKworVGhlIHNhbWUgcmV3aW5kIGFuZCByZWJ1aWxkIHByb2Nlc3MgbWF5IGJlIGZvbGxvd2VkIGZvciAncHUnLiBBIHB1YmxpYworYW5ub3VuY2VtZW50IGlzIG5vdCBuZWNlc3Nhcnkgc2luY2UgJ3B1JyBpcyBhIHRocm93LWF3YXkgYnJhbmNoLCBhcworZGVzY3JpYmVkIGFib3ZlLgorCisKIERJU1RSSUJVVEVEIFdPUktGTE9XUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTI0NSw3ICszNjAsNyBAQAogCiAqIGxpbmtnaXQ6Z2l0LXB1bGxbMV0gdGhhdCBkb2VzIGZldGNoIGFuZCBtZXJnZSBpbiBvbmUgZ28uCiAKLU5vdGUgdGhlIGxhc3QgcG9pbnQuICBEbyAnbm90JyB1c2UgJ2dpdC1wdWxsJyB1bmxlc3MgeW91IGFjdHVhbGx5IHdhbnQKK05vdGUgdGhlIGxhc3QgcG9pbnQuICBEbyAnbm90JyB1c2UgJ2dpdCBwdWxsJyB1bmxlc3MgeW91IGFjdHVhbGx5IHdhbnQKIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoLgogCiBHZXR0aW5nIGNoYW5nZXMgb3V0IGlzIGVhc3k6CkBAIC0yODIsNyArMzk3LDcgQEAKICAgICA8dXJsPiA8YnJhbmNoPgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JbiB0aGF0IGNhc2UsICdnaXQtcHVsbCcgY2FuIGRvIHRoZSBmZXRjaCBhbmQgbWVyZ2UgaW4gb25lIGdvLCBhcworSW4gdGhhdCBjYXNlLCAnZ2l0IHB1bGwnIGNhbiBkbyB0aGUgZmV0Y2ggYW5kIG1lcmdlIGluIG9uZSBnbywgYXMKIGZvbGxvd3MuCiAKIC5QdXNoL3B1bGw6IE1lcmdpbmcgcmVtb3RlIHRvcGljcwpAQCAtMzM0LDcgKzQ0OSw3IEBACiAKIElmIHlvdSByZWNlaXZlIHN1Y2ggYSBwYXRjaCBzZXJpZXMgKGFzIG1haW50YWluZXIsIG9yIHBlcmhhcHMgYXMgYQogcmVhZGVyIG9mIHRoZSBtYWlsaW5nIGxpc3QgaXQgd2FzIHNlbnQgdG8pLCBzYXZlIHRoZSBtYWlscyB0byBmaWxlcywKLWNyZWF0ZSBhIG5ldyB0b3BpYyBicmFuY2ggYW5kIHVzZSAnZ2l0LWFtJyB0byBpbXBvcnQgdGhlIGNvbW1pdHM6CitjcmVhdGUgYSBuZXcgdG9waWMgYnJhbmNoIGFuZCB1c2UgJ2dpdCBhbScgdG8gaW1wb3J0IHRoZSBjb21taXRzOgogCiAuZm9ybWF0LXBhdGNoL2FtOiBJbXBvcnRpbmcgcGF0Y2hlcwogW2NhcHRpb249IlJlY2lwZTogIl0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2xvc3NhcnktY29udGVudC50eHQgYi9Eb2N1bWVudGF0aW9uL2dsb3NzYXJ5LWNvbnRlbnQudHh0CmluZGV4IDU3MjM3NGYuLjFmMDI5ZjggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2xvc3NhcnktY29udGVudC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9nbG9zc2FyeS1jb250ZW50LnR4dApAQCAtMTI0LDcgKzEyNCw3IEBACiAJQW4gZXZpbCBtZXJnZSBpcyBhIDw8ZGVmX21lcmdlLG1lcmdlPj4gdGhhdCBpbnRyb2R1Y2VzIGNoYW5nZXMgdGhhdAogCWRvIG5vdCBhcHBlYXIgaW4gYW55IDw8ZGVmX3BhcmVudCxwYXJlbnQ+Pi4KIAotW1tkZWZfZmFzdF9mb3J3YXJkXV1mYXN0IGZvcndhcmQ6OgorW1tkZWZfZmFzdF9mb3J3YXJkXV1mYXN0LWZvcndhcmQ6OgogCUEgZmFzdC1mb3J3YXJkIGlzIGEgc3BlY2lhbCB0eXBlIG9mIDw8ZGVmX21lcmdlLG1lcmdlPj4gd2hlcmUgeW91IGhhdmUgYQogCTw8ZGVmX3JldmlzaW9uLHJldmlzaW9uPj4gYW5kIHlvdSBhcmUgIm1lcmdpbmciIGFub3RoZXIKIAk8PGRlZl9icmFuY2gsYnJhbmNoPj4ncyBjaGFuZ2VzIHRoYXQgaGFwcGVuIHRvIGJlIGEgZGVzY2VuZGFudCBvZiB3aGF0CkBAIC0yMjAsNyArMjIwLDcgQEAKIAljb25mbGljdCwgbWFudWFsIGludGVydmVudGlvbiBtYXkgYmUgcmVxdWlyZWQgdG8gY29tcGxldGUgdGhlCiAJbWVyZ2UuCiArCi1BcyBhIG5vdW46IHVubGVzcyBpdCBpcyBhIDw8ZGVmX2Zhc3RfZm9yd2FyZCxmYXN0IGZvcndhcmQ+PiwgYQorQXMgYSBub3VuOiB1bmxlc3MgaXQgaXMgYSA8PGRlZl9mYXN0X2ZvcndhcmQsZmFzdC1mb3J3YXJkPj4sIGEKIHN1Y2Nlc3NmdWwgbWVyZ2UgcmVzdWx0cyBpbiB0aGUgY3JlYXRpb24gb2YgYSBuZXcgPDxkZWZfY29tbWl0LGNvbW1pdD4+CiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdCBvZiB0aGUgbWVyZ2UsIGFuZCBoYXZpbmcgYXMKIDw8ZGVmX3BhcmVudCxwYXJlbnRzPj4gdGhlIHRpcHMgb2YgdGhlIG1lcmdlZCA8PGRlZl9icmFuY2gsYnJhbmNoZXM+Pi4KQEAgLTQ1Niw2ICs0NTYsNiBAQAogCW9mICdBJyBpcyAnb3JpZ2luL0InIHNvbWV0aW1lcyB3ZSBzYXkgIidBJyBpcyB0cmFja2luZyAnb3JpZ2luL0InIi4KIAogW1tkZWZfd29ya2luZ190cmVlXV13b3JraW5nIHRyZWU6OgotCVRoZSB0cmVlIG9mIGFjdHVhbCBjaGVja2VkIG91dCBmaWxlcy4gIFRoZSB3b3JraW5nIHRyZWUgaXMKLQlub3JtYWxseSBlcXVhbCB0byB0aGUgPDxkZWZfSEVBRCxIRUFEPj4gcGx1cyBhbnkgbG9jYWwgY2hhbmdlcwotCXRoYXQgeW91IGhhdmUgbWFkZSBidXQgbm90IHlldCBjb21taXR0ZWQuCisJVGhlIHRyZWUgb2YgYWN0dWFsIGNoZWNrZWQgb3V0IGZpbGVzLiAgVGhlIHdvcmtpbmcgdHJlZSBub3JtYWxseQorCWNvbnRhaW5zIHRoZSBjb250ZW50cyBvZiB0aGUgPDxkZWZfSEVBRCxIRUFEPj4gY29tbWl0J3MgdHJlZSwKKwlwbHVzIGFueSBsb2NhbCBjaGFuZ2VzIHRoYXQgeW91IGhhdmUgbWFkZSBidXQgbm90IHlldCBjb21taXR0ZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvL21haW50YWluLWdpdC50eHQgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL21haW50YWluLWdpdC50eHQKaW5kZXggNDM1N2UyNi4uZDUyN2IzMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ob3d0by9tYWludGFpbi1naXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8vbWFpbnRhaW4tZ2l0LnR4dApAQCAtNTksNyArNTksNyBAQAogICAgbm90IHlldCBwYXNzIHRoZSBjcml0ZXJpYSBzZXQgZm9yICduZXh0Jy4KIAogIC0gVGhlIHRpcHMgb2YgJ21hc3RlcicsICdtYWludCcgYW5kICduZXh0JyBicmFuY2hlcyB3aWxsIGFsd2F5cwotICAgZmFzdCBmb3J3YXJkLCB0byBhbGxvdyBwZW9wbGUgdG8gYnVpbGQgdGhlaXIgb3duCisgICBmYXN0LWZvcndhcmQsIHRvIGFsbG93IHBlb3BsZSB0byBidWlsZCB0aGVpciBvd24KICAgIGN1c3RvbWl6YXRpb24gb24gdG9wIG9mIHRoZW0uCiAKICAtIFVzdWFsbHkgJ21hc3RlcicgY29udGFpbnMgYWxsIG9mICdtYWludCcsICduZXh0JyBjb250YWlucyBhbGwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaG93dG8vcmV2ZXJ0LWJyYW5jaC1yZWJhc2UudHh0IGIvRG9jdW1lbnRhdGlvbi9ob3d0by9yZXZlcnQtYnJhbmNoLXJlYmFzZS50eHQKaW5kZXggZTcwZDhhMy4uOGMzMmRhNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ob3d0by9yZXZlcnQtYnJhbmNoLXJlYmFzZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ob3d0by9yZXZlcnQtYnJhbmNoLXJlYmFzZS50eHQKQEAgLTg1LDcgKzg1LDcgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAkIGdpdCBjaGVja291dCBtYXN0ZXIKLSQgZ2l0IG1lcmdlIHJldmVydC1jOTkgOyMgdGhpcyBzaG91bGQgYmUgYSBmYXN0IGZvcndhcmQKKyQgZ2l0IG1lcmdlIHJldmVydC1jOTkgOyMgdGhpcyBzaG91bGQgYmUgYSBmYXN0LWZvcndhcmQKIFVwZGF0aW5nIGZyb20gMTBkNzgxYjljYWE0ZjcxNDk1YzdiMzQ5NjNiZWYxMzcyMTZmODZhOCB0byBlM2E2OTNjLi4uCiAgY2FjaGUuaCAgICAgICAgfCAgICA4ICsrKystLS0tCiAgY29tbWl0LmMgICAgICAgfCAgICAyICstCkBAIC05NSw3ICs5NSw3IEBACiAgNSBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVGhlcmUgaXMgbm8gbmVlZCB0byByZWRvIHRoZSB0ZXN0IGF0IHRoaXMgcG9pbnQuICBXZSBmYXN0IGZvcndhcmRlZAorVGhlcmUgaXMgbm8gbmVlZCB0byByZWRvIHRoZSB0ZXN0IGF0IHRoaXMgcG9pbnQuICBXZSBmYXN0LWZvcndhcmRlZAogYW5kIHdlIGtub3cgJ21hc3RlcicgbWF0Y2hlcyAncmV2ZXJ0LWM5OScgZXhhY3RseS4gIEluIGZhY3Q6CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by91cGRhdGUtaG9vay1leGFtcGxlLnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vdXBkYXRlLWhvb2stZXhhbXBsZS50eHQKaW5kZXggNjk3ZDkxOC4uYjdmOGQ0MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ob3d0by91cGRhdGUtaG9vay1leGFtcGxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3VwZGF0ZS1ob29rLWV4YW1wbGUudHh0CkBAIC03Niw3ICs3Niw3IEBACiAgICAgaWYgZXhwciAiJDIiIDogJzAqJCcgPi9kZXYvbnVsbDsgdGhlbgogICAgICAgaW5mbyAiVGhlIGJyYW5jaCAnJDEnIGlzIG5ldy4uLiIKICAgICBlbHNlCi0gICAgICAjIHVwZGF0aW5nIC0tIG1ha2Ugc3VyZSBpdCBpcyBhIGZhc3QgZm9yd2FyZAorICAgICAgIyB1cGRhdGluZyAtLSBtYWtlIHN1cmUgaXQgaXMgYSBmYXN0LWZvcndhcmQKICAgICAgIG1iPSQoZ2l0LW1lcmdlLWJhc2UgIiQyIiAiJDMiKQogICAgICAgY2FzZSAiJG1iLCQyIiBpbgogICAgICAgICAiJDIsJG1iIikgaW5mbyAiVXBkYXRlIGlzIGZhc3QtZm9yd2FyZCIgOzsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTE4bi50eHQgYi9Eb2N1bWVudGF0aW9uL2kxOG4udHh0CmluZGV4IDcwOGRhNmMuLjYyNWQzMTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTE4bi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pMThuLnR4dApAQCAtMjEsNyArMjEsNyBAQAogZG9lcyBub3QgZm9yYmlkIGl0LiAgSG93ZXZlciwgdGhlcmUgYXJlIGEgZmV3IHRoaW5ncyB0byBrZWVwIGluCiBtaW5kLgogCi0uICdnaXQtY29tbWl0JyBhbmQgJ2dpdC1jb21taXQtdHJlZScgaXNzdWVzCisuICdnaXQgY29tbWl0JyBhbmQgJ2dpdCBjb21taXQtdHJlZScgaXNzdWVzCiAgIGEgd2FybmluZyBpZiB0aGUgY29tbWl0IGxvZyBtZXNzYWdlIGdpdmVuIHRvIGl0IGRvZXMgbm90IGxvb2sKICAgbGlrZSBhIHZhbGlkIFVURi04IHN0cmluZywgdW5sZXNzIHlvdSBleHBsaWNpdGx5IHNheSB5b3VyCiAgIHByb2plY3QgdXNlcyBhIGxlZ2FjeSBlbmNvZGluZy4gIFRoZSB3YXkgdG8gc2F5IHRoaXMgaXMgdG8KQEAgLTM3LDcgKzM3LDcgQEAKIGhlbHAgb3RoZXIgcGVvcGxlIHdobyBsb29rIGF0IHRoZW0gbGF0ZXIuICBMYWNrIG9mIHRoaXMgaGVhZGVyCiBpbXBsaWVzIHRoYXQgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSBpcyBlbmNvZGVkIGluIFVURi04LgogCi0uICdnaXQtbG9nJywgJ2dpdC1zaG93JywgJ2dpdC1ibGFtZScgYW5kIGZyaWVuZHMgbG9vayBhdCB0aGUKKy4gJ2dpdCBsb2cnLCAnZ2l0IHNob3cnLCAnZ2l0IGJsYW1lJyBhbmQgZnJpZW5kcyBsb29rIGF0IHRoZQogICBgZW5jb2RpbmdgIGhlYWRlciBvZiBhIGNvbW1pdCBvYmplY3QsIGFuZCB0cnkgdG8gcmUtY29kZSB0aGUKICAgbG9nIG1lc3NhZ2UgaW50byBVVEYtOCB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZC4gIFlvdSBjYW4KICAgc3BlY2lmeSB0aGUgZGVzaXJlZCBvdXRwdXQgZW5jb2Rpbmcgd2l0aApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLWJhc2UtdXJsLnhzbC5pbiBiL0RvY3VtZW50YXRpb24vbWFucGFnZS1iYXNlLXVybC54c2wuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgwMDkwNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbWFucGFnZS1iYXNlLXVybC54c2wuaW4KQEAgLTAsMCArMSwxMCBAQAorPCEtLSBtYW5wYWdlLWJhc2UtdXJsLnhzbDoKKyAgICAgc3BlY2lhbCBzZXR0aW5ncyBmb3IgbWFucGFnZXMgcmVuZGVyZWQgZnJvbSBuZXdlciBkb2Nib29rIC0tPgorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorCQl2ZXJzaW9uPSIxLjAiPgorCis8IS0tIHNldCBhIGJhc2UgVVJMIGZvciByZWxhdGl2ZSBsaW5rcyAtLT4KKzx4c2w6cGFyYW0gbmFtZT0ibWFuLmJhc2UudXJsLmZvci5yZWxhdGl2ZS5saW5rcyIKKwk+QEBNQU5fQkFTRV9VUkxAQDwveHNsOnBhcmFtPgorCis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLXF1b3RlLWFwb3MueHNsIGIvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLXF1b3RlLWFwb3MueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYjg4MzkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtcXVvdGUtYXBvcy54c2wKQEAgLTAsMCArMSwxNiBAQAorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorCQl2ZXJzaW9uPSIxLjAiPgorCis8IS0tIHdvcmsgYXJvdW5kIG5ld2VyIGdyb2ZmL21hbiBzZXR1cHMgdXNpbmcgYSBwcmV0dGllciBhcG9zdHJvcGhlCisgICAgIHRoYXQgdW5mb3J0dW5hdGVseSBkb2VzIG5vdCBxdW90ZSBhbnl0aGluZyB3aGVuIGN1dCZwYXN0aW5nCisgICAgIGV4YW1wbGVzIHRvIHRoZSBzaGVsbCAtLT4KKzx4c2w6dGVtcGxhdGUgbmFtZT0iZXNjYXBlLmFwb3N0cm9waGUiPgorICA8eHNsOnBhcmFtIG5hbWU9ImNvbnRlbnQiLz4KKyAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy5zdWJzdCI+CisgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InN0cmluZyIgc2VsZWN0PSIkY29udGVudCIvPgorICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0YXJnZXQiPic8L3hzbDp3aXRoLXBhcmFtPgorICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlbWVudCI+XChhcTwveHNsOndpdGgtcGFyYW0+CisgIDwveHNsOmNhbGwtdGVtcGxhdGU+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWVyZ2UtY29uZmlnLnR4dCBiL0RvY3VtZW50YXRpb24vbWVyZ2UtY29uZmlnLnR4dAppbmRleCA0ODMyYmM3Li5hNDAzMTU1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21lcmdlLWNvbmZpZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9tZXJnZS1jb25maWcudHh0CkBAIC0yMyw3ICsyMyw3IEBACiAJQ29udHJvbHMgd2hpY2ggbWVyZ2UgcmVzb2x1dGlvbiBwcm9ncmFtIGlzIHVzZWQgYnkKIAlsaW5rZ2l0OmdpdC1tZXJnZXRvb2xbMV0uICBWYWxpZCBidWlsdC1pbiB2YWx1ZXMgYXJlOiAia2RpZmYzIiwKIAkidGtkaWZmIiwgIm1lbGQiLCAieHhkaWZmIiwgImVtZXJnZSIsICJ2aW1kaWZmIiwgImd2aW1kaWZmIiwKLQkiZGlmZnVzZSIsICJlY21lcmdlIiwgInRvcnRvaXNlbWVyZ2UiLCBhbmQKKwkiZGlmZnVzZSIsICJlY21lcmdlIiwgInRvcnRvaXNlbWVyZ2UiLCAicDRtZXJnZSIsICJhcmF4aXMiIGFuZAogCSJvcGVuZGlmZiIuICBBbnkgb3RoZXIgdmFsdWUgaXMgdHJlYXRlZCBpcyBjdXN0b20gbWVyZ2UgdG9vbAogCWFuZCB0aGVyZSBtdXN0IGJlIGEgY29ycmVzcG9uZGluZyBtZXJnZXRvb2wuPHRvb2w+LmNtZCBvcHRpb24uCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWVyZ2Utb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL21lcmdlLW9wdGlvbnMudHh0CmluZGV4IGFkYWRmOGUuLjNiODNkYmEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbWVyZ2Utb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9tZXJnZS1vcHRpb25zLnR4dApAQCAtMSw0MyArMSw0MiBAQAotLXE6OgotLS1xdWlldDo6Ci0JT3BlcmF0ZSBxdWlldGx5LgorLS1jb21taXQ6OgorLS1uby1jb21taXQ6OgorCVBlcmZvcm0gdGhlIG1lcmdlIGFuZCBjb21taXQgdGhlIHJlc3VsdC4gVGhpcyBvcHRpb24gY2FuCisJYmUgdXNlZCB0byBvdmVycmlkZSAtLW5vLWNvbW1pdC4KKysKK1dpdGggLS1uby1jb21taXQgcGVyZm9ybSB0aGUgbWVyZ2UgYnV0IHByZXRlbmQgdGhlIG1lcmdlCitmYWlsZWQgYW5kIGRvIG5vdCBhdXRvY29tbWl0LCB0byBnaXZlIHRoZSB1c2VyIGEgY2hhbmNlIHRvCitpbnNwZWN0IGFuZCBmdXJ0aGVyIHR3ZWFrIHRoZSBtZXJnZSByZXN1bHQgYmVmb3JlIGNvbW1pdHRpbmcuCiAKLS12OjoKLS0tdmVyYm9zZTo6Ci0JQmUgdmVyYm9zZS4KLQotLS1zdGF0OjoKLQlTaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UuIFRoZSBkaWZmc3RhdCBpcyBhbHNvCi0JY29udHJvbGxlZCBieSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gbWVyZ2Uuc3RhdC4KLQotLW46OgotLS1uby1zdGF0OjoKLQlEbyBub3Qgc2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlLgotCi0tLXN1bW1hcnk6OgotLS1uby1zdW1tYXJ5OjoKLQlTeW5vbnltcyB0byAtLXN0YXQgYW5kIC0tbm8tc3RhdDsgdGhlc2UgYXJlIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUKLQlyZW1vdmVkIGluIHRoZSBmdXR1cmUuCistLWZmOjoKKy0tbm8tZmY6OgorCURvIG5vdCBnZW5lcmF0ZSBhIG1lcmdlIGNvbW1pdCBpZiB0aGUgbWVyZ2UgcmVzb2x2ZWQgYXMKKwlhIGZhc3QtZm9yd2FyZCwgb25seSB1cGRhdGUgdGhlIGJyYW5jaCBwb2ludGVyLiBUaGlzIGlzCisJdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgZ2l0LW1lcmdlLgorKworV2l0aCAtLW5vLWZmIEdlbmVyYXRlIGEgbWVyZ2UgY29tbWl0IGV2ZW4gaWYgdGhlIG1lcmdlCityZXNvbHZlZCBhcyBhIGZhc3QtZm9yd2FyZC4KIAogLS1sb2c6OgorLS1uby1sb2c6OgogCUluIGFkZGl0aW9uIHRvIGJyYW5jaCBuYW1lcywgcG9wdWxhdGUgdGhlIGxvZyBtZXNzYWdlIHdpdGgKIAlvbmUtbGluZSBkZXNjcmlwdGlvbnMgZnJvbSB0aGUgYWN0dWFsIGNvbW1pdHMgdGhhdCBhcmUgYmVpbmcKIAltZXJnZWQuCisrCitXaXRoIC0tbm8tbG9nIGRvIG5vdCBsaXN0IG9uZS1saW5lIGRlc2NyaXB0aW9ucyBmcm9tIHRoZQorYWN0dWFsIGNvbW1pdHMgYmVpbmcgbWVyZ2VkLgogCi0tLW5vLWxvZzo6Ci0JRG8gbm90IGxpc3Qgb25lLWxpbmUgZGVzY3JpcHRpb25zIGZyb20gdGhlIGFjdHVhbCBjb21taXRzIGJlaW5nCi0JbWVyZ2VkLgogCi0tLW5vLWNvbW1pdDo6Ci0JUGVyZm9ybSB0aGUgbWVyZ2UgYnV0IHByZXRlbmQgdGhlIG1lcmdlIGZhaWxlZCBhbmQgZG8KLQlub3QgYXV0b2NvbW1pdCwgdG8gZ2l2ZSB0aGUgdXNlciBhIGNoYW5jZSB0byBpbnNwZWN0IGFuZAotCWZ1cnRoZXIgdHdlYWsgdGhlIG1lcmdlIHJlc3VsdCBiZWZvcmUgY29tbWl0dGluZy4KLQotLS1jb21taXQ6OgotCVBlcmZvcm0gdGhlIG1lcmdlIGFuZCBjb21taXQgdGhlIHJlc3VsdC4gVGhpcyBvcHRpb24gY2FuCi0JYmUgdXNlZCB0byBvdmVycmlkZSAtLW5vLWNvbW1pdC4KKy0tc3RhdDo6Cistbjo6CistLW5vLXN0YXQ6OgorCVNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZS4gVGhlIGRpZmZzdGF0IGlzIGFsc28KKwljb250cm9sbGVkIGJ5IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBtZXJnZS5zdGF0LgorKworV2l0aCAtbiBvciAtLW5vLXN0YXQgZG8gbm90IHNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZQorbWVyZ2UuCiAKIC0tc3F1YXNoOjoKKy0tbm8tc3F1YXNoOjoKIAlQcm9kdWNlIHRoZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHN0YXRlIGFzIGlmIGEgcmVhbAogCW1lcmdlIGhhcHBlbmVkIChleGNlcHQgZm9yIHRoZSBtZXJnZSBpbmZvcm1hdGlvbiksCiAJYnV0IGRvIG5vdCBhY3R1YWxseSBtYWtlIGEgY29tbWl0IG9yCkBAIC00NiwyNCArNDUsMzcgQEAKIAljb21taXQuICBUaGlzIGFsbG93cyB5b3UgdG8gY3JlYXRlIGEgc2luZ2xlIGNvbW1pdCBvbgogCXRvcCBvZiB0aGUgY3VycmVudCBicmFuY2ggd2hvc2UgZWZmZWN0IGlzIHRoZSBzYW1lIGFzCiAJbWVyZ2luZyBhbm90aGVyIGJyYW5jaCAob3IgbW9yZSBpbiBjYXNlIG9mIGFuIG9jdG9wdXMpLgorKworV2l0aCAtLW5vLXNxdWFzaCBwZXJmb3JtIHRoZSBtZXJnZSBhbmQgY29tbWl0IHRoZSByZXN1bHQuIFRoaXMKK29wdGlvbiBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSAtLXNxdWFzaC4KIAotLS1uby1zcXVhc2g6OgotCVBlcmZvcm0gdGhlIG1lcmdlIGFuZCBjb21taXQgdGhlIHJlc3VsdC4gVGhpcyBvcHRpb24gY2FuCi0JYmUgdXNlZCB0byBvdmVycmlkZSAtLXNxdWFzaC4KLQotLS1uby1mZjo6Ci0JR2VuZXJhdGUgYSBtZXJnZSBjb21taXQgZXZlbiBpZiB0aGUgbWVyZ2UgcmVzb2x2ZWQgYXMgYQotCWZhc3QtZm9yd2FyZC4KLQotLS1mZjo6Ci0JRG8gbm90IGdlbmVyYXRlIGEgbWVyZ2UgY29tbWl0IGlmIHRoZSBtZXJnZSByZXNvbHZlZCBhcwotCWEgZmFzdC1mb3J3YXJkLCBvbmx5IHVwZGF0ZSB0aGUgYnJhbmNoIHBvaW50ZXIuIFRoaXMgaXMKLQl0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBnaXQtbWVyZ2UuCistLWZmLW9ubHk6OgorCVJlZnVzZSB0byBtZXJnZSBhbmQgZXhpdCB3aXRoIGEgbm9uLXplcm8gc3RhdHVzIHVubGVzcyB0aGUKKwljdXJyZW50IGBIRUFEYCBpcyBhbHJlYWR5IHVwLXRvLWRhdGUgb3IgdGhlIG1lcmdlIGNhbiBiZQorCXJlc29sdmVkIGFzIGEgZmFzdC1mb3J3YXJkLgogCiAtcyA8c3RyYXRlZ3k+OjoKIC0tc3RyYXRlZ3k9PHN0cmF0ZWd5Pjo6CiAJVXNlIHRoZSBnaXZlbiBtZXJnZSBzdHJhdGVneTsgY2FuIGJlIHN1cHBsaWVkIG1vcmUgdGhhbgogCW9uY2UgdG8gc3BlY2lmeSB0aGVtIGluIHRoZSBvcmRlciB0aGV5IHNob3VsZCBiZSB0cmllZC4KIAlJZiB0aGVyZSBpcyBubyBgLXNgIG9wdGlvbiwgYSBidWlsdC1pbiBsaXN0IG9mIHN0cmF0ZWdpZXMKLQlpcyB1c2VkIGluc3RlYWQgKCdnaXQtbWVyZ2UtcmVjdXJzaXZlJyB3aGVuIG1lcmdpbmcgYSBzaW5nbGUKLQloZWFkLCAnZ2l0LW1lcmdlLW9jdG9wdXMnIG90aGVyd2lzZSkuCisJaXMgdXNlZCBpbnN0ZWFkICgnZ2l0IG1lcmdlLXJlY3Vyc2l2ZScgd2hlbiBtZXJnaW5nIGEgc2luZ2xlCisJaGVhZCwgJ2dpdCBtZXJnZS1vY3RvcHVzJyBvdGhlcndpc2UpLgorCistLXN1bW1hcnk6OgorLS1uby1zdW1tYXJ5OjoKKwlTeW5vbnltcyB0byAtLXN0YXQgYW5kIC0tbm8tc3RhdDsgdGhlc2UgYXJlIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUKKwlyZW1vdmVkIGluIHRoZSBmdXR1cmUuCisKKy1xOjoKKy0tcXVpZXQ6OgorCU9wZXJhdGUgcXVpZXRseS4KKworLXY6OgorLS12ZXJib3NlOjoKKwlCZSB2ZXJib3NlLgorCistWCA8b3B0aW9uPjo6CistLXN0cmF0ZWd5LW9wdGlvbj08b3B0aW9uPjo6CisJUGFzcyBtZXJnZSBzdHJhdGVneSBzcGVjaWZpYyBvcHRpb24gdGhyb3VnaCB0byB0aGUgbWVyZ2UKKwlzdHJhdGVneS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWVyZ2Utc3RyYXRlZ2llcy50eHQgYi9Eb2N1bWVudGF0aW9uL21lcmdlLXN0cmF0ZWdpZXMudHh0CmluZGV4IDQzNjViN2UuLmE1YmMxZGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbWVyZ2Utc3RyYXRlZ2llcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9tZXJnZS1zdHJhdGVnaWVzLnR4dApAQCAtMSw2ICsxLDExIEBACiBNRVJHRSBTVFJBVEVHSUVTCiAtLS0tLS0tLS0tLS0tLS0tCiAKK1RoZSBtZXJnZSBtZWNoYW5pc20gKCdnaXQtbWVyZ2UnIGFuZCAnZ2l0LXB1bGwnIGNvbW1hbmRzKSBhbGxvd3MgdGhlCitiYWNrZW5kICdtZXJnZSBzdHJhdGVnaWVzJyB0byBiZSBjaG9zZW4gd2l0aCBgLXNgIG9wdGlvbi4gIFNvbWUgc3RyYXRlZ2llcworY2FuIGFsc28gdGFrZSB0aGVpciBvd24gb3B0aW9ucywgd2hpY2ggY2FuIGJlIHBhc3NlZCBieSBnaXZpbmcgYC1YPG9wdGlvbj5gCithcmd1bWVudHMgdG8gJ2dpdC1tZXJnZScgYW5kL29yICdnaXQtcHVsbCcuCisKIHJlc29sdmU6OgogCVRoaXMgY2FuIG9ubHkgcmVzb2x2ZSB0d28gaGVhZHMgKGkuZS4gdGhlIGN1cnJlbnQgYnJhbmNoCiAJYW5kIGFub3RoZXIgYnJhbmNoIHlvdSBwdWxsZWQgZnJvbSkgdXNpbmcgYSAzLXdheSBtZXJnZQpAQCAtMjAsNiArMjUsMjcgQEAKIAlBZGRpdGlvbmFsbHkgdGhpcyBjYW4gZGV0ZWN0IGFuZCBoYW5kbGUgbWVyZ2VzIGludm9sdmluZwogCXJlbmFtZXMuICBUaGlzIGlzIHRoZSBkZWZhdWx0IG1lcmdlIHN0cmF0ZWd5IHdoZW4KIAlwdWxsaW5nIG9yIG1lcmdpbmcgb25lIGJyYW5jaC4KKysKK1RoZSAncmVjdXJzaXZlJyBzdHJhdGVneSBjYW4gdGFrZSB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CisKK291cnM7OworCVRoaXMgb3B0aW9uIGZvcmNlcyBjb25mbGljdGluZyBodW5rcyB0byBiZSBhdXRvLXJlc29sdmVkIGNsZWFubHkgYnkKKwlmYXZvcmluZyAnb3VyJyB2ZXJzaW9uLiAgQ2hhbmdlcyBmcm9tIHRoZSBvdGhlciB0cmVlIHRoYXQgZG8gbm90CisJY29uZmxpY3Qgd2l0aCBvdXIgc2lkZSBhcmUgcmVmbGVjdGVkIHRvIHRoZSBtZXJnZSByZXN1bHQuCisrCitUaGlzIHNob3VsZCBub3QgYmUgY29uZnVzZWQgd2l0aCB0aGUgJ291cnMnIG1lcmdlIHN0cmF0ZWd5LCB3aGljaCBkb2VzIG5vdAorZXZlbiBsb29rIGF0IHdoYXQgdGhlIG90aGVyIHRyZWUgY29udGFpbnMgYXQgYWxsLiAgSXQgZGlzY2FyZHMgZXZlcnl0aGluZwordGhlIG90aGVyIHRyZWUgZGlkLCBkZWNsYXJpbmcgJ291cicgaGlzdG9yeSBjb250YWlucyBhbGwgdGhhdCBoYXBwZW5lZCBpbiBpdC4KKwordGhlaXJzOzsKKwlUaGlzIGlzIG9wcG9zaXRlIG9mICdvdXJzJy4KKworc3VidHJlZVs9cGF0aF07OworCVRoaXMgb3B0aW9uIGlzIGEgbW9yZSBhZHZhbmNlZCBmb3JtIG9mICdzdWJ0cmVlJyBzdHJhdGVneSwgd2hlcmUKKwl0aGUgc3RyYXRlZ3kgbWFrZXMgYSBndWVzcyBvbiBob3cgdHdvIHRyZWVzIG11c3QgYmUgc2hpZnRlZCB0bworCW1hdGNoIHdpdGggZWFjaCBvdGhlciB3aGVuIG1lcmdpbmcuICBJbnN0ZWFkLCB0aGUgc3BlY2lmaWVkIHBhdGgKKwlpcyBwcmVmaXhlZCAob3Igc3RyaXBwZWQgZnJvbSB0aGUgYmVnaW5uaW5nKSB0byBtYWtlIHRoZSBzaGFwZSBvZgorCXR3byB0cmVlcyB0byBtYXRjaC4KIAogb2N0b3B1czo6CiAJVGhpcyByZXNvbHZlcyBjYXNlcyB3aXRoIG1vcmUgdGhhbiB0d28gaGVhZHMsIGJ1dCByZWZ1c2VzIHRvIGRvCkBAIC0yOSwxMCArNTUsMTIgQEAKIAlwdWxsaW5nIG9yIG1lcmdpbmcgbW9yZSB0aGFuIG9uZSBicmFuY2guCiAKIG91cnM6OgotCVRoaXMgcmVzb2x2ZXMgYW55IG51bWJlciBvZiBoZWFkcywgYnV0IHRoZSByZXN1bHQgb2YgdGhlCi0JbWVyZ2UgaXMgYWx3YXlzIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkLiAgSXQgaXMgbWVhbnQgdG8KKwlUaGlzIHJlc29sdmVzIGFueSBudW1iZXIgb2YgaGVhZHMsIGJ1dCB0aGUgcmVzdWx0aW5nIHRyZWUgb2YgdGhlCisJbWVyZ2UgaXMgYWx3YXlzIHRoYXQgb2YgdGhlIGN1cnJlbnQgYnJhbmNoIGhlYWQsIGVmZmVjdGl2ZWx5CisJaWdub3JpbmcgYWxsIGNoYW5nZXMgZnJvbSBhbGwgb3RoZXIgYnJhbmNoZXMuICBJdCBpcyBtZWFudCB0bwogCWJlIHVzZWQgdG8gc3VwZXJzZWRlIG9sZCBkZXZlbG9wbWVudCBoaXN0b3J5IG9mIHNpZGUKLQlicmFuY2hlcy4KKwlicmFuY2hlcy4gIE5vdGUgdGhhdCB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSAtWG91cnMgb3B0aW9uIHRvCisJdGhlICdyZWN1cnNpdmUnIG1lcmdlIHN0cmF0ZWd5LgogCiBzdWJ0cmVlOjoKIAlUaGlzIGlzIGEgbW9kaWZpZWQgcmVjdXJzaXZlIHN0cmF0ZWd5LiBXaGVuIG1lcmdpbmcgdHJlZXMgQSBhbmQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcHJldHR5LWZvcm1hdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9wcmV0dHktZm9ybWF0cy50eHQKaW5kZXggMmE4NDViMS4uMTY4NmE1NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wcmV0dHktZm9ybWF0cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wcmV0dHktZm9ybWF0cy50eHQKQEAgLTEyMyw2ICsxMjMsMTAgQEAKIC0gJyVzJzogc3ViamVjdAogLSAnJWYnOiBzYW5pdGl6ZWQgc3ViamVjdCBsaW5lLCBzdWl0YWJsZSBmb3IgYSBmaWxlbmFtZQogLSAnJWInOiBib2R5CistICclTic6IGNvbW1pdCBub3RlcworLSAnJWdEJzogcmVmbG9nIHNlbGVjdG9yLCBlLmcuLCBgcmVmcy9zdGFzaEBcezFcfWAKKy0gJyVnZCc6IHNob3J0ZW5lZCByZWZsb2cgc2VsZWN0b3IsIGUuZy4sIGBzdGFzaEBcezFcfWAKKy0gJyVncyc6IHJlZmxvZyBzdWJqZWN0CiAtICclQ3JlZCc6IHN3aXRjaCBjb2xvciB0byByZWQKIC0gJyVDZ3JlZW4nOiBzd2l0Y2ggY29sb3IgdG8gZ3JlZW4KIC0gJyVDYmx1ZSc6IHN3aXRjaCBjb2xvciB0byBibHVlCkBAIC0xMzAsNyArMTM0LDI0IEBACiAtICclQyguLi4pJzogY29sb3Igc3BlY2lmaWNhdGlvbiwgYXMgZGVzY3JpYmVkIGluIGNvbG9yLmJyYW5jaC4qIGNvbmZpZyBvcHRpb24KIC0gJyVtJzogbGVmdCwgcmlnaHQgb3IgYm91bmRhcnkgbWFyawogLSAnJW4nOiBuZXdsaW5lCistICclJSc6IGEgcmF3ICclJwogLSAnJXgwMCc6IHByaW50IGEgYnl0ZSBmcm9tIGEgaGV4IGNvZGUKKy0gJyV3KFs8dz5bLDxpMT5bLDxpMj5dXV0pJzogc3dpdGNoIGxpbmUgd3JhcHBpbmcsIGxpa2UgdGhlIC13IG9wdGlvbiBvZgorICBsaW5rZ2l0OmdpdC1zaG9ydGxvZ1sxXS4KKworTk9URTogU29tZSBwbGFjZWhvbGRlcnMgbWF5IGRlcGVuZCBvbiBvdGhlciBvcHRpb25zIGdpdmVuIHRvIHRoZQorcmV2aXNpb24gdHJhdmVyc2FsIGVuZ2luZS4gRm9yIGV4YW1wbGUsIHRoZSBgJWcqYCByZWZsb2cgb3B0aW9ucyB3aWxsCitpbnNlcnQgYW4gZW1wdHkgc3RyaW5nIHVubGVzcyB3ZSBhcmUgdHJhdmVyc2luZyByZWZsb2cgZW50cmllcyAoZS5nLiwgYnkKK2BnaXQgbG9nIC1nYCkuIFRoZSBgJWRgIHBsYWNlaG9sZGVyIHdpbGwgdXNlIHRoZSAic2hvcnQiIGRlY29yYXRpb24KK2Zvcm1hdCBpZiBgLS1kZWNvcmF0ZWAgd2FzIG5vdCBhbHJlYWR5IHByb3ZpZGVkIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKK0lmIHlvdSBhZGQgYSBge3BsdXN9YCAocGx1cyBzaWduKSBhZnRlciAnJScgb2YgYSBwbGFjZWhvbGRlciwgYSBsaW5lLWZlZWQKK2lzIGluc2VydGVkIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgZXhwYW5zaW9uIGlmIGFuZCBvbmx5IGlmIHRoZQorcGxhY2Vob2xkZXIgZXhwYW5kcyB0byBhIG5vbi1lbXB0eSBzdHJpbmcuCisKK0lmIHlvdSBhZGQgYSBgLWAgKG1pbnVzIHNpZ24pIGFmdGVyICclJyBvZiBhIHBsYWNlaG9sZGVyLCBsaW5lLWZlZWRzIHRoYXQKK2ltbWVkaWF0ZWx5IHByZWNlZGUgdGhlIGV4cGFuc2lvbiBhcmUgZGVsZXRlZCBpZiBhbmQgb25seSBpZiB0aGUKK3BsYWNlaG9sZGVyIGV4cGFuZHMgdG8gYW4gZW1wdHkgc3RyaW5nLgogCiAqICd0Zm9ybWF0OicKICsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcHJldHR5LW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9wcmV0dHktb3B0aW9ucy50eHQKaW5kZXggYmZmOTQ5OS4uYWE5NmNhZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wcmV0dHktb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wcmV0dHktb3B0aW9ucy50eHQKQEAgLTI4LDMgKzI4LDExIEBACiAJY29tbWFuZCB0byByZS1jb2RlIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UgaW4gdGhlIGVuY29kaW5nCiAJcHJlZmVycmVkIGJ5IHRoZSB1c2VyLiAgRm9yIG5vbiBwbHVtYmluZyBjb21tYW5kcyB0aGlzCiAJZGVmYXVsdHMgdG8gVVRGLTguCisKKy0tbm8tbm90ZXM6OgorLS1zaG93LW5vdGVzOjoKKwlTaG93IHRoZSBub3RlcyAoc2VlIGxpbmtnaXQ6Z2l0LW5vdGVzWzFdKSB0aGF0IGFubm90YXRlIHRoZQorCWNvbW1pdCwgd2hlbiBzaG93aW5nIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UuICBUaGlzIGlzIHRoZSBkZWZhdWx0CisJZm9yIGBnaXQgbG9nYCwgYGdpdCBzaG93YCBhbmQgYGdpdCB3aGF0Y2hhbmdlZGAgY29tbWFuZHMgd2hlbgorCXRoZXJlIGlzIG5vIGAtLXByZXR0eWAsIGAtLWZvcm1hdGAgbm9yIGAtLW9uZWxpbmVgIG9wdGlvbiBpcworCWdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3B0X0JSL2dpdHR1dG9yaWFsLnR4dCBiL0RvY3VtZW50YXRpb24vcHRfQlIvZ2l0dHV0b3JpYWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYmEwNjUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3B0X0JSL2dpdHR1dG9yaWFsLnR4dApAQCAtMCwwICsxLDY3NSBAQAorZ2l0dHV0b3JpYWwoNykKKz09PT09PT09PT09PT09CisKK05PTUUKKy0tLS0KK2dpdHR1dG9yaWFsIC0gVW0gdHV0b3JpYWwgZGUgaW50cm9kdcOnw6NvIGFvIGdpdCAocGFyYSB2ZXJzw6NvIDEuNS4xIG91IG1haXMgbm92YSkKKworU0lOT1BTRQorLS0tLS0tLS0KK2dpdCAqCisKK0RFU0NSScOHw4NPCistLS0tLS0tLS0tLQorCitFc3RlIHR1dG9yaWFsIGV4cGxpY2EgY29tbyBpbXBvcnRhciB1bSBub3ZvIHByb2pldG8gcGFyYSBvIGdpdCwKK2FkaWNpb25hciBtdWRhbsOnYXMgYSBlbGUsIGUgY29tcGFydGlsaGFyIG11ZGFuw6dhcyBjb20gb3V0cm9zCitkZXNlbnZvbHZlZG9yZXMuCisKK1NlLCBhbyBpbnbDqXMgZGlzc28sIHZvY8OqIGVzdMOhIGludGVyZXNzYWRvIHByaW1hcmlhbWVudGUgZW0gdXNhciBnaXQgcGFyYQorb2J0ZXIgdW0gcHJvamV0bywgcG9yIGV4ZW1wbG8sIHBhcmEgdGVzdGFyIGEgw7psdGltYSB2ZXJzw6NvLCB2b2PDqiBwb2RlCitwcmVmZXJpciBjb21lw6dhciBjb20gb3MgcHJpbWVpcm9zIGRvaXMgY2Fww610dWxvcyBkZQorbGluazp1c2VyLW1hbnVhbC5odG1sW08gTWFudWFsIGRvIFVzdcOhcmlvIEdpdF0uCisKK1ByaW1laXJvLCBub3RlIHF1ZSB2b2PDqiBwb2RlIG9idGVyIGRvY3VtZW50YcOnw6NvIHBhcmEgdW0gY29tYW5kbyBjb21vCitgZ2l0IGxvZyAtLWdyYXBoYCBjb206CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBtYW4gZ2l0LWxvZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK291OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGhlbHAgbG9nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29tIGEgw7psdGltYSBmb3JtYSwgdm9jw6ogcG9kZSB1c2FyIG8gdmlzdWFsaXphZG9yIGRlIG1hbnVhbCBkZSBzdWEKK2VzY29saGE7IHZlamEgbGlua2dpdDpnaXQtaGVscFsxXSBwYXJhIG1haW9yIGluZm9ybWHDp8Ojby4KKworw4kgdW1hIGJvYSBpZMOpaWEgaW5mb3JtYXIgYW8gZ2l0IHNldSBub21lIGUgZW5kZXJlw6dvIHDDumJsaWNvIGRlIGVtYWlsCithbnRlcyBkZSBmYXplciBxdWFscXVlciBvcGVyYcOnw6NvLiBBIG1hbmVpcmEgbWFpcyBmw6FjaWwgZGUgZmF6w6otbG8gw6k6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSAiU2V1IE5vbWUgVmVtIEFxdWkiCiskIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCB2b2NlQHNldWRvbWluaW8uZXhlbXBsby5jb20KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0ltcG9ydGFuZG8gdW0gbm92byBwcm9qZXRvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBc3N1bWEgcXVlIHZvY8OqIHRlbSB1bSB0YXJiYWxsIHByb2plY3QudGFyLmd6IGNvbSBzZXUgdHJhYmFsaG8gaW5pY2lhbC4KK1ZvY8OqIHBvZGUgY29sb2PDoS1sbyBzb2IgY29udHJvbGUgZGUgcmV2aXPDo28gZ2l0IGRhIHNlZ3VpbnRlIGZvcm1hOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgdGFyIHh6ZiBwcm9qZWN0LnRhci5negorJCBjZCBwcm9qZWN0CiskIGdpdCBpbml0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR2l0IGlyw6EgcmVzcG9uZGVyCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW5pdGlhbGl6ZWQgZW1wdHkgR2l0IHJlcG9zaXRvcnkgaW4gLmdpdC8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBZ29yYSBxdWUgdm9jw6ogaW5pY2lvdSBzZXUgZGlyZXTDs3JpbyBkZSB0cmFiYWxobywgdm9jw6ogZGV2ZSB0ZXIgbm90YWRvIHF1ZSB1bQorbm92byBkaXJldMOzcmlvIGZvaSBjcmlhZG8gY29tIG8gbm9tZSBkZSAiLmdpdCIuCisKK0Egc2VndWlyLCBkaWdhIGFvIGdpdCBwYXJhIGdyYXZhciB1bSBpbnN0YW50w6JuZW8gZG8gY29udGXDumRvIGRlIHRvZG9zIG9zCithcnF1aXZvcyBzb2IgbyBkaXJldMOzcmlvIGF0dWFsIChub3RlIG8gJy4nKSwgY29tICdnaXQtYWRkJzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBhZGQgLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0VzdGUgaW5zdGFudMOibmVvIGVzdMOhIGFnb3JhIGFybWF6ZW5hZG8gZW0gdW1hIMOhcmVhIHRlbXBvcsOhcmlhIHF1ZSBvIGdpdAorY2hhbWEgZGUgImluZGV4IiBvdSDDrW5kaWNlLiBWb2PDqiBwb2RlIGFybWF6ZW5hciBwZXJtYW5lbnRlbWVudGUgbworY29udGXDumRvIGRvIMOtbmRpY2Ugbm8gcmVwb3NpdMOzcmlvIGNvbSAnZ2l0LWNvbW1pdCc6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSXN0byB2YWkgdGUgcGVkaXIgcG9yIHVtYSBtZW5zYWdlbSBkZSBjb21taXQuIFZvY8OqIGFnb3JhIGdyYXZvdSBzdWEKK3ByaW1laXJhIHZlcnPDo28gZGUgc2V1IHByb2pldG8gbm8gZ2l0LgorCitGYXplbmRvIG11ZGFuw6dhcworLS0tLS0tLS0tLS0tLS0KKworTW9kaWZpcXVlIGFsZ3VucyBhcnF1aXZvcywgZSwgZW50w6NvLCBhZGljaW9uZSBzZXUgY29udGXDumRvIGF0dWFsaXphZG8gYW8KK8OtbmRpY2U6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYWRkIGZpbGUxIGZpbGUyIGZpbGUzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVm9jw6ogZXN0w6EgYWdvcmEgcHJvbnRvIHBhcmEgZmF6ZXIgbyBjb21taXQuIFZvY8OqIHBvZGUgdmVyIG8gcXVlIGVzdMOhCitwYXJhIHNlciBncmF2YWRvIHVzYW5kbyAnZ2l0LWRpZmYnIGNvbSBhIG9ww6fDo28gLS1jYWNoZWQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZiAtLWNhY2hlZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhTZW0gLS1jYWNoZWQsIG8gY29tYW5kbyAnZ2l0LWRpZmYnIGlyw6EgdGUgbW9zdHJhciBxdWFpc3F1ZXIgbXVkYW7Dp2FzCitxdWUgdm9jw6ogdGVuaGEgZmVpdG8gbWFzIGFpbmRhIG7Do28gYWRpY2lvbm91IGFvIMOtbmRpY2UuKSBWb2PDqiB0YW1iw6ltCitwb2RlIG9idGVyIHVtIGJyZXZlIHN1bcOhcmlvIGRhIHNpdHVhw6fDo28gY29tICdnaXQtc3RhdHVzJzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzdGF0dXMKKyMgT24gYnJhbmNoIG1hc3RlcgorIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyMgICAodXNlICJnaXQgcmVzZXQgSEVBRCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisjCisjCW1vZGlmaWVkOiAgIGZpbGUxCisjCW1vZGlmaWVkOiAgIGZpbGUyCisjCW1vZGlmaWVkOiAgIGZpbGUzCisjCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2Ugdm9jw6ogcHJlY2lzYXIgZmF6ZXIgcXVhbHF1ZXIgb3V0cm8gYWp1c3RlLCBmYcOnYS1vIGFnb3JhLCBlLCBlbnTDo28sCithZGljaW9uZSBxdWFscXVlciBjb250ZcO6ZG8gbW9kaWZpY2FkbyBhbyDDrW5kaWNlLiBGaW5hbG1lbnRlLCBncmF2ZSBzdWFzCittdWRhbsOnYXMgY29tOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FvIGV4ZWN1dGFyIGVzc2UgY29tYW5kbywgZWxlIGlyw6EgdGUgcGVkaXIgdW1hIG1lbnNhZ2VtIGRlc2NyZXZlbmRvIGEgbXVkYW7Dp2EsCitlLCBlbnTDo28sIGlyw6EgZ3JhdmFyIGEgbm92YSB2ZXJzw6NvIGRvIHByb2pldG8uCisKK0FsdGVybmF0aXZhbWVudGUsIGFvIGludsOpcyBkZSBleGVjdXRhciAnZ2l0LWFkZCcgYW50ZXMsIHZvY8OqIHBvZGUgdXNhcgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdCAtYQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK28gcXVlIGlyw6EgYXV0b21hdGljYW1lbnRlIG5vdGFyIHF1YWlzcXVlciBhcnF1aXZvcyBtb2RpZmljYWRvcyAobWFzIG7Do28KK25vdm9zKSwgYWRpY2lvbsOhLWxvcyBhbyDDrW5kaWNlcywgZSBncmF2YXIsIHR1ZG8gZW0gdW0gw7puaWNvIHBhc3NvLgorCitVbWEgbm90YSBlbSBtZW5zYWdlbnMgZGUgY29tbWl0OiBBcGVzYXIgZGUgbsOjbyBzZXIgZXhpZ2lkbywgw6kgdW1hIGJvYQoraWTDqWlhIGNvbWXDp2FyIGEgbWVuc2FnZW0gY29tIHVtYSBzaW1wbGVzIGUgY3VydGEgKG1lbm9zIGRlIDUwCitjYXJhY3RlcmVzKSBsaW5oYSBzdW1hcml6YW5kbyBhIG11ZGFuw6dhLCBzZWd1aWRhIGRlIHVtYSBsaW5oYSBlbSBicmFuY28KK2UsIGVudMOjbywgdW1hIGRlc2NyacOnw6NvIG1haXMgZGV0YWxoYWRhLiBGZXJyYW1lbnRhcyBxdWUgdHJhbnNmb3JtYW0KK2NvbW1pdHMgZW0gZW1haWwsIHBvciBleGVtcGxvLCB1c2FtIGEgcHJpbWVpcmEgbGluaGEgbm8gY2FtcG8gZGUKK2NhYmXDp2FsaG8gIlN1YmplY3Q6IiBlIG8gcmVzdG8gbm8gY29ycG8uCisKK0dpdCByYXN0cmVpYSBjb250ZcO6ZG8sIG7Do28gYXJxdWl2b3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTXVpdG9zIHNpc3RlbWFzIGRlIGNvbnRyb2xlIGRlIHJldmlzw6NvIHByb3bDqmVtIHVtIGNvbWFuZG8gYGFkZGAgcXVlIGRpegorYW8gc2lzdGVtYSBwYXJhIGNvbWXDp2FyIGEgcmFzdHJlYXIgbXVkYW7Dp2FzIGVtIHVtIG5vdm8gYXJxdWl2by4gTworY29tYW5kbyBgYWRkYCBkbyBnaXQgZmF6IGFsZ28gbWFpcyBzaW1wbGVzIGUgbWFpcyBwb2Rlcm9zbzogJ2dpdC1hZGQnIMOpCit1c2FkbyB0YW50byBwYXJhIGFycXVpdm9zIG5vdm9zIGUgYXJxdWl2b3MgcmVjZW50ZW1lbnRlIG1vZGlmaWNhZG9zLCBlCitlbSBhbWJvcyBvcyBjYXNvcywgZWxlIHRpcmEgbyBpbnN0YW50w6JuZW8gZG9zIGFycXVpdm9zIGRhZG9zIGUgYXJtYXplbmEKK28gY29udGXDumRvIG5vIMOtbmRpY2UsIHByb250byBwYXJhIGluY2x1c8OjbyBkbyBwcsOzeGltbyBjb21taXQuCisKK1Zpc3VhbGl6YW5kbyBhIGhpc3TDs3JpYSBkbyBwcm9qZXRvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFbSBxdWFscXVlciBwb250byB2b2PDqiBwb2RlIHZpc3VhbGl6YXIgYSBoaXN0w7NyaWEgZGFzIHN1YXMgbXVkYW7Dp2FzCit1c2FuZG8KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZSB2b2PDqiB0YW1iw6ltIHF1aXNlciB2ZXIgYSBkaWZlcmVuw6dhIGNvbXBsZXRhIGEgY2FkYSBwYXNzbywgdXNlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIC1wCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR2VyYWxtZW50ZSwgdW1hIHZpc8OjbyBnZXJhbCBkYSBtdWRhbsOnYSDDqSDDunRpbCBwYXJhIHRlciBhIHNlbnNhw6fDo28gZGUKK2NhZGEgcGFzc28KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgLS1zdGF0IC0tc3VtbWFyeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dlcmVuY2lhbmRvICJicmFuY2hlcyIvcmFtb3MKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1VtIHNpbXBsZXMgcmVwb3NpdMOzcmlvIGdpdCBwb2RlIG1hbnRlciBtw7psdGlwbG9zIHJhbW9zIGRlCitkZXNlbnZvbHZpbWVudG8uIFBhcmEgY3JpYXIgdW0gbm92byByYW1vIGNoYW1hZG8gImV4cGVyaW1lbnRhbCIsIHVzZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJyYW5jaCBleHBlcmltZW50YWwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZSB2b2PDqiBleGVjdXRhciBhZ29yYQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJyYW5jaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZvY8OqIHZhaSBvYnRlciB1bWEgbGlzdGEgZGUgdG9kb3Mgb3MgcmFtb3MgZXhpc3RlbnRlczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIGV4cGVyaW1lbnRhbAorKiBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPIHJhbW8gImV4cGVyaW1lbnRhbCIgw6kgbyBxdWUgdm9jw6ogYWNhYmEgZGUgY3JpYXIsIGUgbyByYW1vICJtYXN0ZXIiIMOpIG8KK3JhbW8gcGFkcsOjbyBxdWUgZm9pIGNyaWFkbyBwcmEgdm9jw6ogYXV0b21hdGljYW1lbnRlLiBPIGFzdGVyaXNjbyBtYXJjYQorbyByYW1vIGVtIHF1ZSB2b2PDqiBlc3TDoSBhdHVhbG1lbnRlOyBkaWdpdGUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCBleHBlcmltZW50YWwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitwYXJhIG11ZGFyIHBhcmEgbyByYW1vIGV4cGVyaW1lbnRhbC4gQWdvcmEgZWRpdGUgdW0gYXJxdWl2bywgZ3JhdmUgYQorbXVkYW7Dp2EsIGUgbXVkZSBkZSB2b2x0YSBwYXJhIG8gcmFtbyBtYXN0ZXI6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKGVkaXRhIGFycXVpdm8pCiskIGdpdCBjb21taXQgLWEKKyQgZ2l0IGNoZWNrb3V0IG1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1ZlcmlmaXF1ZSBxdWUgYSBtdWRhbsOnYSBxdWUgdm9jw6ogZmV6IG7Do28gZXN0w6EgbWFpcyB2aXPDrXZlbCwgasOhIHF1ZSBlbGEKK2ZvaSBmZWl0YSBubyByYW1vIGV4cGVyaW1lbnRhbCBlIHZvY8OqIGVzdMOhIGRlIHZvbHRhIGFvIHJhbW8gbWFzdGVyLgorCitWb2PDqiBwb2RlIGZhemVyIHVtYSBtdWRhbsOnYSBkaWZlcmVudGUgbm8gcmFtbyBtYXN0ZXI6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKGVkaXQgZmlsZSkKKyQgZ2l0IGNvbW1pdCAtYQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK25lc3RlIHBvbnRvLCBvcyBkb2lzIHJhbW9zIGRpdmVyZ2lyYW0sIGNvbSBkaWZlcmVudGVzIG11ZGFuw6dhcyBmZWl0YXMgZW0KK2NhZGEgdW0uIFBhcmEgdW5pZmljYXIgYXMgbXVkYW7Dp2FzIGZlaXRhcyBubyBleHBlcmltZW50YWwgcGFyYSBvCittYXN0ZXIsIGV4ZWN1dGUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBtZXJnZSBleHBlcmltZW50YWwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZSBhcyBtdWRhbsOnYXMgbsOjbyBjb25mbGl0YXJlbSwgZXN0YXLDoSBwcm9udG8uIFNlIGV4aXN0aXJlbSBjb25mbGl0b3MsCittYXJjYWRvcmVzIHNlcsOjbyBkZWl4YWRvcyBub3MgYXJxdWl2b3MgcHJvYmxlbcOhdGljb3MgZXhpYmluZG8gbworY29uZmxpdG87CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZhaSBleGliaXIgaXN0by4gQXDDs3Mgdm9jw6ogZWRpdGFyIG9zIGFycXVpdm9zIHBhcmEgcmVzb2x2ZXIgb3MKK2NvbmZsaXRvcywKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb21taXQgLWEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitpcsOhIGdyYXZhciBvIHJlc3VsdGFkbyBkYSB1bmlmaWNhw6fDo28uIEZpbmFsbWVudGUsCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXRrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordmFpIG1vc3RyYXIgdW1hIGJlbGEgcmVwcmVzZW50YcOnw6NvIGdyw6FmaWNhIGRhIGhpc3TDs3JpYSByZXN1bHRhbnRlLgorCitOZXN0ZSBwb250byB2b2PDqiBwb2RlIHJlbW92ZXIgc2V1IHJhbW8gZXhwZXJpbWVudGFsIGNvbQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJyYW5jaCAtZCBleHBlcmltZW50YWwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFc3RlIGNvbWFuZG8gZ2FyYW50ZSBxdWUgYXMgbXVkYW7Dp2FzIG5vIHJhbW8gZXhwZXJpbWVudGFsIGrDoSBlc3TDo28gbm8KK3JhbW8gYXR1YWwuCisKK1NlIHZvY8OqIGRlc2Vudm9sdmUgZW0gdW0gcmFtbyBpZGVpYS1sb3VjYSwgZSBzZSBhcnJlcGVuZGUsIHZvY8OqIHBvZGUKK3NlbXByZSByZW1vdmVyIG8gcmFtbyBjb20KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYnJhbmNoIC1EIGlkZWlhLWxvdWNhCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JhbW9zIHPDo28gYmFyYXRvcyBlIGbDoWNlaXMsIGVudMOjbyBpc3RvIMOpIHVtYSBib2EgbWFuZWlyYSBkZSBleHBlcmltZW50YXIKK2FsZ3VtYSBjb2lzYS4KKworVXNhbmRvIGdpdCBwYXJhIGNvbGFib3Jhw6fDo28KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTdXBvbmhhIHF1ZSBBbGljZSBjb21lw6dvdSB1bSBub3ZvIHByb2pldG8gY29tIHVtIHJlcG9zaXTDs3JpbyBnaXQgZW0KKy9ob21lL2FsaWNlL3Byb2plY3QsIGUgcXVlIEJvYiwgcXVlIHRlbSB1bSBkaXJldMOzcmlvIGhvbWUgbmEgbWVzbWEKK23DoXF1aW5hLCBxdWVyIGNvbnRyaWJ1aXIuCisKK0JvYiBjb21lw6dhIGNvbToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitib2IkIGdpdCBjbG9uZSAvaG9tZS9hbGljZS9wcm9qZWN0IG15cmVwbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lzc28gY3JpYSB1bSBub3ZvIGRpcmV0w7NyaW8gIm15cmVwbyIgY29udGVuZG8gdW0gY2xvbmUgZG8gcmVwb3NpdMOzcmlvIGRlCitBbGljZS4gTyBjbG9uZSBlc3TDoSBubyBtZXNtbyBww6kgcXVlIG8gcHJvamV0byBvcmlnaW5hbCwgcG9zc3VpbmRvIHN1YQorcHLDs3ByaWEgY8OzcGlhIGRhIGhpc3TDs3JpYSBkbyBwcm9qZXRvIG9yaWdpbmFsLgorCitCb2IgZW50w6NvIGZheiBhbGd1bWFzIG11ZGFuw6dhcyBlIGFzIGdyYXZhOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyhlZGl0YXIgYXJxdWl2b3MpCitib2IkIGdpdCBjb21taXQgLWEKKyhyZXBldGlyIGNvbmZvcm1lIG5lY2Vzc8OhcmlvKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1F1YW50byBlc3TDoSBwcm9udG8sIGVsZSBkaXogYSBBbGljZSBwYXJhIHB1eGFyIGFzIG11ZGFuw6dhcyBkbworcmVwb3NpdMOzcmlvIGVtIC9ob21lL2JvYi9teXJlcG8uIEVsYSBvIGZheiBjb206CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWxpY2UkIGNkIC9ob21lL2FsaWNlL3Byb2plY3QKK2FsaWNlJCBnaXQgcHVsbCAvaG9tZS9ib2IvbXlyZXBvIG1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lzdG8gdW5pZmljYSBhcyBtdWRhbsOnYXMgZG8gcmFtbyAibWFzdGVyIiBkbyBCb2IgYW8gcmFtbyBhdHVhbCBkZSBBbGljZS4KK1NlIEFsaWNlIGZleiBzdWFzIHByw7NwcmlhcyBtdWRhbsOnYXMgbm8gaW50ZXJ2YWxvLCBlbGEsIGVudMOjbywgcG9kZQorcHJlY2lzYXIgY29ycmlnaXIgbWFudWFsbWVudGUgcXVhaXNxdWVyIGNvbmZsaXRvcy4gKE5vdGUgcXVlIG8gYXJndW1lbnRvCisibWFzdGVyIiBubyBjb21hbmRvIGFjaW1hIMOpLCBkZSBmYXRvLCBkZXNuZWNlc3PDoXJpbywgasOhIHF1ZSDDqSBvIHBhZHLDo28uKQorCitPIGNvbWFuZG8gInB1bGwiIGV4ZWN1dGEsIGVudMOjbywgZHVhcyBvcGVyYcOnw7VlczogZWxlIG9idMOpbSBtdWRhbsOnYXMgZGUKK3VtIHJhbW8gcmVtb3RvLCBlLCBlbnTDo28sIGFzIHVuaWZpY2Egbm8gcmFtbyBhdHVhbC4KKworTm90ZSBxdWUsIGVtIGdlcmFsLCBBbGljZSBnb3N0YXJpYSBxdWUgc3VhcyBtdWRhbsOnYXMgbG9jYWlzIGZvc3NlbQorZ3JhdmFkYXMgYW50ZXMgZGUgaW5pY2lhciBlc3RlICJwdWxsIi4gU2UgbyB0cmFiYWxobyBkZSBCb2IgY29uZmxpdGEKK2NvbSBvIHF1ZSBBbGljZSBmZXogZGVzZGUgcXVlIHN1YXMgaGlzdMOzcmlhcyBzZSByYW1pZmljYXJhbSwgQWxpY2UgaXLDoQordXNhciBzZXUgZGlyZXTDs3JpbyBkZSB0cmFiYWxobyBlIG8gw61uZGljZSBwYXJhIHJlc29sdmVyIGNvbmZsaXRvcywgZQorbXVkYW7Dp2FzIGxvY2FpcyBleGlzdGVudGVzIGlyw6NvIGludGVyZmVyaXIgY29tIG8gcHJvY2Vzc28gZGUgcmVzb2x1w6fDo28KK2RlIGNvbmZsaXRvcyAoZ2l0IGFpbmRhIGlyw6EgcmVhbGl6YXIgYSBvYnRlbsOnw6NvIG1hcyBpcsOhIHNlIHJlY3VzYXIgYQordW5pZmljYXIgLS0tIEFsaWNlIHRlcsOhIHF1ZSBzZSBsaXZyYXIgZGUgc3VhcyBtdWRhbsOnYXMgbG9jYWlzIGRlIGFsZ3VtYQorZm9ybWEgZSBwdXhhciBkZSBub3ZvIHF1YW5kbyBpc3NvIGFjb250ZWNlcikuCisKK0FsaWNlIHBvZGUgZXNwaWFyIG8gcXVlIEJvYiBmZXogc2VtIHVuaWZpY2FyIHByaW1laXJvLCB1c2FuZG8gbyBjb21hbmRvCisiZmV0Y2giOyBpc3RvIHBlcm1pdGUgQWxpY2UgaW5zcGVjaW9uYXIgbyBxdWUgQm9iIGZleiwgdXNhbmRvIHVtIHPDrW1ib2xvCitlc3BlY2lhbCAiRkVUQ0hfSEVBRCIsIGNvbSBvIGZpbSBkZSBkZXRlcm1pbmFyIHNlIGVsZSB0ZW0gYWxndW1hIGNvaXNhCitxdWUgdmFsZSBwdXhhciwgYXNzaW06CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWxpY2UkIGdpdCBmZXRjaCAvaG9tZS9ib2IvbXlyZXBvIG1hc3RlcgorYWxpY2UkIGdpdCBsb2cgLXAgSEVBRC4uRkVUQ0hfSEVBRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0VzdGEgb3BlcmHDp8OjbyDDqSBzZWd1cmEgbWVzbW8gc2UgQWxpY2UgdGVtIG11ZGFuw6dhcyBsb2NhaXMgbsOjbyBncmF2YWRhcy4KK0Egbm90YcOnw6NvIGRlIGludGVydmFsbyAiSEVBRC4uRkVUQ0hfSEVBRCIgc2lnbmlmaWNhIG1vc3RyYXIgdHVkbyBxdWUgw6kKK2FsY2Fuw6fDoXZlbCBkZSBGRVRDSF9IRUFEIG1hcyBleGNsdWEgdHVkbyBvIHF1ZSDDqSBhbGNhbsOnw6F2ZWwgZGUgSEVBRC4KK0FsaWNlIGrDoSBzYWJlIHR1ZG8gcXVlIGxldmEgYSBzZXUgZXN0YWRvIGF0dWFsIChIRUFEKSwgZSByZXZpc2EgbyBxdWUgQm9iCit0ZW0gZW0gc2V1IGVzdGFkbyAoRkVUQ0hfSEVBRCkgcXVlIGVsYSBhaW5kYSBuw6NvIHZpdSBjb20gZXNzZSBjb21hbmRvLgorCitTZSBBbGljZSBxdWVyIHZpc3VhbGl6YXIgbyBxdWUgQm9iIGZleiBkZXNkZSBxdWUgc3VhcyBoaXN0w7NyaWFzIHNlCityYW1pZmljYXJhbSwgZWxhIHBvZGUgZGlzcGFyYXIgbyBzZWd1aW50ZSBjb21hbmRvOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0ayBIRUFELi5GRVRDSF9IRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSXN0byB1c2EgYSBtZXNtYSBub3Rhw6fDo28gZGUgaW50ZXJ2YWxvIHF1ZSB2aW1vcyBhbnRlcyBjb20gJ2dpdCBsb2cnLgorCitBbGljZSBwb2RlIHF1ZXJlciB2ZXIgbyBxdWUgYW1ib3MgZml6ZXJhbSBkZXNkZSBxdWUgcmFtaWZpY2FyYW0uIEVsYQorcG9kZSB1c2FyIGEgZm9ybWEgY29tIHRyw6pzIHBvbnRvcyBhbyBpbnbDqXMgZGEgZm9ybWEgY29tIGRvaXMgcG9udG9zOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0ayBIRUFELi4uRkVUQ0hfSEVBRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lzdG8gc2lnbmlmaWNhICJtb3N0cmUgdHVkbyBxdWUgw6kgYWxjYW7Dp8OhdmVsIGRlIHF1YWxxdWVyIHVtIGRlbGVzLCBtYXMKK2V4Y2x1YSB0dWRvIHF1ZSDDqSBhbGNhbsOnw6F2ZWwgYSBwYXJ0aXIgZGUgYW1ib3MiLgorCitQb3IgZmF2b3IsIG5vdGUgcXVlIGVzc2FzIG5vdGHDp8O1ZXMgZGUgaW50ZXJ2YWxvIHBvZGVtIHNlciB1c2FkYXMgdGFudG8KK2NvbSBnaXRrIHF1YW50byBjb20gImdpdCBsb2ciLgorCitBcMOzcyBpbnNwZWNpb25hciBvIHF1ZSBCb2IgZmV6LCBzZSBuw6NvIGjDoSBuYWRhIHVyZ2VudGUsIEFsaWNlIHBvZGUKK2RlY2lkaXIgY29udGludWFyIHRyYWJhbGhhbmRvIHNlbSBwdXhhciBkZSBCb2IuIFNlIGEgaGlzdMOzcmlhIGRlIEJvYgordGVtIGFsZ3VtYSBjb2lzYSBxdWUgQWxpY2UgcHJlY2lzYSBpbWVkaWF0YW1lbnRlLCBBbGljZSBwb2RlIG9wdGFyIHBvcgorc2VwYXJhciBzZXUgdHJhYmFsaG8gZW0gcHJvZ3Jlc3NvIHByaW1laXJvLCBmYXplciB1bSAicHVsbCIsIGUsIGVudMOjbywKK2ZpbmFsbWVudGUsIHJldG9tYXIgc2V1IHRyYWJhbGhvIGVtIHByb2dyZXNzbyBlbSBjaW1hIGRhIGhpc3TDs3JpYQorcmVzdWx0YW50ZS4KKworUXVhbmRvIHZvY8OqIGVzdMOhIHRyYWJhbGhhbmRvIGVtIHVtIHBlcXVlbm8gZ3J1cG8gdW5pZG8sIG7Do28gw6kgaW5jb211bQoraW50ZXJhZ2lyIGNvbSBvIG1lc21vIHJlcG9zaXTDs3JpbyB2w6FyaWFzIGUgdsOhcmlhcyB2ZXplcy4gRGVmaW5pbmRvIHVtCityZXBvc2l0w7NyaW8gcmVtb3RvIGFudGVzIGRlIHR1ZG8sIHZvY8OqIHBvZGUgZmF6w6otbG8gbWFpcyBmYWNpbG1lbnRlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2FsaWNlJCBnaXQgcmVtb3RlIGFkZCBib2IgL2hvbWUvYm9iL215cmVwbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvbSBpc3NvLCBBbGljZSBwb2RlIGV4ZWN1dGFyIGEgcHJpbWVpcmEgcGFydGUgZGEgb3BlcmHDp8OjbyAicHVsbCIgdXNhbmRvCitvIGNvbWFuZG8gJ2dpdC1mZXRjaCcgc2VtIHVuaWZpY2FyIHN1YXMgbXVkYW7Dp2FzIGNvbSBzZXUgcHLDs3ByaW8gcmFtbywKK3VzYW5kbzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWxpY2UkIGdpdCBmZXRjaCBib2IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRGlmZXJlbnRlIGRhIGZvcm1hIGxvbmdhLCBxdWFuZG8gQWxpY2Ugb2J0ZXZlIGRlIEJvYiB1c2FuZG8gdW0KK3JlcG9zaXTDs3JpbyByZW1vdG8gYW50ZXMgZGVmaW5pZG8gY29tICdnaXQtcmVtb3RlJywgbyBxdWUgZm9pIG9idGlkbyDDqQorYXJtYXplbmFkbyBlbSB1bSByYW1vIHJlbW90bywgbmVzdGUgY2FzbyBgYm9iL21hc3RlcmAuIEVudMOjbywgYXDDs3MgaXNzbzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWxpY2UkIGdpdCBsb2cgLXAgbWFzdGVyLi5ib2IvbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vc3RyYSB1bWEgbGlzdGEgZGUgdG9kYXMgYXMgbXVkYW7Dp2FzIHF1ZSBCb2IgZmV6IGRlc2RlIHF1ZSByYW1pZmljb3UgZG8KK3JhbW8gbWFzdGVyIGRlIEFsaWNlLgorCitBcMOzcyBleGFtaW5hciBlc3NhcyBtdWRhbsOnYXMsIEFsaWNlIHBvZGUgdW5pZmljw6EtbGFzIGVtIHNldSByYW1vIG1hc3RlcjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWxpY2UkIGdpdCBtZXJnZSBib2IvbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Vzc2UgYG1lcmdlYCBwb2RlIHRhbWLDqW0gc2VyIGZlaXRvIHB1eGFuZG8gZGUgc2V1IHByw7NwcmlvIHJhbW8gcmVtb3RvLAorYXNzaW06CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2FsaWNlJCBnaXQgcHVsbCAuIHJlbW90ZXMvYm9iL21hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3RlIHF1ZSAnZ2l0IHB1bGwnIHNlbXByZSB1bmlmaWNhIGFvIHJhbW8gYXR1YWwsIGluZGVwZW5kZW50ZSBkbyBxdWUKK21haXMgZm9pIHBhc3NhZG8gbmEgbGluaGEgZGUgY29tYW5kby4KKworRGVwb2lzLCBCb2IgcG9kZSBhdHVhbGl6YXIgc2V1IHJlcG9zaXTDs3JpbyBjb20gYXMgw7psdGltYXMgbXVkYW7Dp2FzIGRlCitBbGljZSwgdXNhbmRvCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2JvYiQgZ2l0IHB1bGwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZSBxdWUgZWxlIG7Do28gcHJlY2lzYSBkYXIgbyBjYW1pbmhvIGRvIHJlcG9zaXTDs3JpbyBkZSBBbGljZTsgcXVhbmRvCitCb2IgY2xvbm91IHNldSByZXBvc2l0w7NyaW8sIG8gZ2l0IGFybWF6ZW5vdSBhIGxvY2FsaXphw6fDo28gZGUgc2V1CityZXBvc2l0w7NyaW8gbmEgY29uZmlndXJhw6fDo28gZG8gbWVzbW8sIGUgZXNzYSBsb2NhbGl6YcOnw6NvIMOpIHVzYWRhCitwYXJhIHB1eGFyOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitib2IkIGdpdCBjb25maWcgLS1nZXQgcmVtb3RlLm9yaWdpbi51cmwKKy9ob21lL2FsaWNlL3Byb2plY3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKEEgY29uZmlndXJhw6fDo28gY29tcGxldGEgY3JpYWRhIHBvciAnZ2l0LWNsb25lJyDDqSB2aXPDrXZlbCB1c2FuZG8gYGdpdAorY29uZmlnIC1sYCwgZSBhIHDDoWdpbmEgZGUgbWFudWFsIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBleHBsaWNhIG8KK3NpZ25pZmljYWRvIGRlIGNhZGEgb3DDp8Ojby4pCisKK0dpdCB0YW1iw6ltIG1hbnTDqW0gdW1hIGPDs3BpYSBsaW1wYSBkbyByYW1vIG1hc3RlciBkZSBBbGljZSBzb2IgbyBub21lCisib3JpZ2luL21hc3RlciI6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2JvYiQgZ2l0IGJyYW5jaCAtcgorICBvcmlnaW4vbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NlIEJvYiBkZWNpZGlyIGRlcG9pcyBlbSB0cmFiYWxoYXIgZW0gdW0gaG9zdCBkaWZlcmVudGUsIGVsZSBhaW5kYSBwb2RlCitleGVjdXRhciBjbG9uZXMgZSBwdXhhciB1c2FuZG8gbyBwcm90b2NvbG8gc3NoOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitib2IkIGdpdCBjbG9uZSBhbGljZS5vcmc6L2hvbWUvYWxpY2UvcHJvamVjdCBteXJlcG8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWx0ZXJuYXRpdmFtZW50ZSwgbyBnaXQgdGVtIHVtIHByb3RvY29sbyBuYXRpdm8sIG91IHBvZGUgdXNhciByc3luYyBvdQoraHR0cDsgdmVqYSBsaW5rZ2l0OmdpdC1wdWxsWzFdIHBhcmEgZGV0YWxoZXMuCisKK0dpdCBwb2RlIHRhbWLDqW0gc2VyIHVzYWRvIGVtIHVtIG1vZG8gcGFyZWNpZG8gY29tIENWUywgY29tIHVtCityZXBvc2l0w7NyaW8gY2VudHJhbCBwYXJhIG8gcXVhbCB2w6FyaW9zIHVzdcOhcmlvcyBlbXB1cnJhbSBtb2RpZmljYcOnw7VlczsKK3ZlamEgbGlua2dpdDpnaXQtcHVzaFsxXSBlIGxpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XS4KKworRXhwbG9yYW5kbyBoaXN0w7NyaWEKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0EgaGlzdMOzcmlhIG5vIGdpdCDDqSByZXByZXNlbnRhZGEgY29tbyB1bWEgc8OpcmllIGRlIGNvbW1pdHMKK2ludGVycmVsYWNpb25hZG9zLiBOw7NzIGrDoSB2aW1vcyBxdWUgbyBjb21hbmRvICdnaXQtbG9nJyBwb2RlIGxpc3RhcgorZXNzZXMgY29tbWl0cy4gTm90ZSBxdWUgYSBwcmltZWlyYSBsaW5oYSBkZSBjYWRhIGVudHJhZGEgbm8gbG9nIHRhbWLDqW0KK2TDoSBvIG5vbWUgcGFyYSBvIGNvbW1pdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nCitjb21taXQgYzgyYTIyYzM5Y2JjMzI1NzZmNjRmNWM2YjNmMjRiOTllYTgxNDljNworQXV0aG9yOiBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+CitEYXRlOiAgIFR1ZSBNYXkgMTYgMTc6MTg6MjIgMjAwNiAtMDcwMAorCisgICAgbWVyZ2UtYmFzZTogQ2xhcmlmeSB0aGUgY29tbWVudHMgb24gcG9zdCBwcm9jZXNzaW5nLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOw7NzIHBvZGVtb3MgZGFyIGVzdGUgbm9tZSBhbyAnZ2l0LXNob3cnIHBhcmEgdmVyIG9zIGRldGFsaGVzIHNvYnJlIGVzdGUKK2NvbW1pdC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdyBjODJhMjJjMzljYmMzMjU3NmY2NGY1YzZiM2YyNGI5OWVhODE0OWM3CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01hcyBow6Egb3V0cmFzIGZvcm1hcyBkZSBzZSByZWZlcmlyIGFvcyBjb21taXRzLiBWb2PDqiBwb2RlIHVzYXIgcXVhbHF1ZXIKK3BhcnRlIGluaWNpYWwgZG8gbm9tZSBxdWUgc2VqYSBsb25nbyBvIGJhc3RhbnRlIHBhcmEgaWRlbnRpZmljYXIKK3VuaWNhbWVudGUgbyBjb21taXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cgYzgyYTIyYzM5YwkjIG9zIHByaW1laXJvcyBjYXJhY3RlcmVzIGRvIG5vbWUgc8OjbyBvIGJhc3RhbnRlCisJCQkjIHVzdWFsbWVudGUKKyQgZ2l0IHNob3cgSEVBRAkJIyBhIHBvbnRhIGRvIHJhbW8gYXR1YWwKKyQgZ2l0IHNob3cgZXhwZXJpbWVudGFsCSMgYSBwb250YSBkbyByYW1vICJleHBlcmltZW50YWwiCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvZG8gY29tbWl0IG5vcm1hbG1lbnRlIHRlbSB1bSBjb21taXQgInBhaSIgcXVlIGFwb250YSBwYXJhIG8gZXN0YWRvCithbnRlcmlvciBkbyBwcm9qZXRvOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93IEhFQUReICAjIHBhcmEgdmVyIG8gcGFpIGRlIEhFQUQKKyQgZ2l0IHNob3cgSEVBRF5eICMgcGFyYSB2ZXIgbyBhdsO0IGRlIEhFQUQKKyQgZ2l0IHNob3cgSEVBRH40ICMgcGFyYSB2ZXIgbyB0cmlzYXbDtCBkZSBIRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdGUgcXVlIGNvbW1pdHMgZGUgdW5pZmljYcOnw6NvIHBvZGVtIHRlciBtYWlzIGRlIHVtIHBhaToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdyBIRUFEXjEgIyBtb3N0cmEgbyBwcmltZWlybyBwYWkgZGUgSEVBRCAobyBtZXNtbyBxdWUgSEVBRF4pCiskIGdpdCBzaG93IEhFQUReMiAjIG1vc3RyYSBvIHNlZ3VuZG8gcGFpIGRlIEhFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVm9jw6ogdGFtYsOpbSBwb2RlIGRhciBhb3MgY29tbWl0cyBub21lcyDDoCBzdWEgZXNjb2xoYTsgYXDDs3MgZXhlY3V0YXIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgdGFnIHYyLjUgMWIyZTFkNjNmZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2b2PDqiBwb2RlIHNlIHJlZmVyaXIgYSAxYjJlMWQ2M2ZmIHBlbG8gbm9tZSAidjIuNSIuIFNlIHZvY8OqIHByZXRlbmRlCitjb21wYXJ0aWxoYXIgZXNzZSBub21lIGNvbSBvdXRyYXMgcGVzc29hcyAocG9yIGV4ZW1wbG8sIHBhcmEgaWRlbnRpZmljYXIKK3VtYSB2ZXJzw6NvIGRlIGxhbsOnYW1lbnRvKSwgdm9jw6ogZGV2ZXJpYSBjcmlhciB1bSBvYmpldG8gInRhZyIsIGUgdGFsdmV6Cithc3NpbsOhLWxvOyB2ZWphIGxpbmtnaXQ6Z2l0LXRhZ1sxXSBwYXJhIGRldGFsaGVzLgorCitRdWFscXVlciBjb21hbmRvIGdpdCBxdWUgcHJlY2lzZSBjb25oZWNlciB1bSBjb21taXQgcG9kZSByZWNlYmVyCitxdWFpc3F1ZXIgZGVzc2VzIG5vbWVzLiBQb3IgZXhlbXBsbzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZiB2Mi41IEhFQUQJICMgY29tcGFyYSBvIEhFQUQgYXR1YWwgY29tIHYyLjUKKyQgZ2l0IGJyYW5jaCBzdGFibGUgdjIuNSAjIGluaWNpYSB1bSBub3ZvIHJhbW8gY2hhbWFkbyAic3RhYmxlIiBiYXNlYWRvCisJCQkgIyBlbSB2Mi41CiskIGdpdCByZXNldCAtLWhhcmQgSEVBRF4gIyByZXNldGEgc2V1IHJhbW8gYXR1YWwgZSBzZXUgZGlyZXTDs3JpbyBkZQorCQkJICMgdHJhYmFsaG8gYSBzZXUgZXN0YWRvIGVtIEhFQUReCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NlamEgY3VpZGFkb3NvIGNvbSBvIMO6bHRpbW8gY29tYW5kbzogYWzDqW0gZGUgcGVyZGVyIHF1YWlzcXVlciBtdWRhbsOnYXMKK2VtIHNldSBkaXJldMOzcmlvIGRlIHRyYWJhbGhvLCBlbGUgdGFtYsOpbSByZW1vdmUgdG9kb3Mgb3MgY29tbWl0cworcG9zdGVyaW9yZXMgZGVzc2UgcmFtby4gU2UgZXNzZSByYW1vIMOpIG8gw7puaWNvIHJhbW8gY29udGVuZG8gZXNzZXMKK2NvbW1pdHMsIGVsZXMgc2Vyw6NvIHBlcmRpZG9zLiBUYW1iw6ltLCBuw6NvIHVzZSAnZ2l0LXJlc2V0JyBudW0gcmFtbworcHVibGljYW1lbnRlIHZpc8OtdmVsIGRlIG9uZGUgb3V0cm9zIGRlc2Vudm9sdmVkb3JlcyBwdXhhbSwgasOhIHF1ZSB2YWkKK2ZvcsOnYXIgdW5pZmljYcOnw7VlcyBkZXNuZWNlc3PDoXJpYXMgcGFyYSBxdWUgb3V0cm9zIGRlc2Vudm9sdmVkb3JlcyBsaW1wZW0KK2EgaGlzdMOzcmlhLiBTZSB2b2PDqiBwcmVjaXNhIGRlc2ZhemVyIG11ZGFuw6dhcyBxdWUgdm9jw6ogZW1wdXJyb3UsIHVzZQorJ2dpdC1yZXZlcnQnIG5vIGx1Z2FyLgorCitPIGNvbWFuZG8gJ2dpdC1ncmVwJyBwb2RlIGJ1c2NhciBzdHJpbmdzIGVtIHF1YWxxdWVyIHZlcnPDo28gZGUgc2V1Citwcm9qZXRvLCBlbnTDo28KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZ3JlcCAiaGVsbG8iIHYyLjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworcHJvY3VyYSBwb3IgdG9kYXMgYXMgb2NvcnLDqm5jaWFzIGRlICJoZWxsbyIgZW0gdjIuNS4KKworU2Ugdm9jw6ogZGVpeGFyIGRlIGZvcmEgbyBub21lIGRvIGNvbW1pdCwgJ2dpdC1ncmVwJyBpcsOhIHByb2N1cmFyCitxdWFpc3F1ZXIgZG9zIGFycXVpdm9zIHF1ZSBlbGUgZ2VyZW5jaWEgbm8gZGlyZXTDs3JpbyBjb3JyZW50ZS4gRW50w6NvCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGdyZXAgImhlbGxvIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCivDqSB1bWEgZm9ybWEgcsOhcGlkYSBkZSBidXNjYXIgc29tZW50ZSBvcyBhcnF1aXZvcyBxdWUgc8OjbyByYXN0cmVhZG9zIHBlbG8KK2dpdC4KKworTXVpdG9zIGNvbWFuZG9zIGdpdCB0YW1iw6ltIHJlY2ViZW0gdW0gY29uanVudG8gZGUgY29tbWl0cywgbyBxdWUgcG9kZQorc2VyIGVzcGVjaWZpY2FkbyBkZSB2w6FyaWFzIGZvcm1hcy4gQXF1aSBlc3TDo28gYWxndW5zIGV4ZW1wbG9zIGNvbSAnZ2l0LWxvZyc6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyB2Mi41Li52Mi42ICAgICAgICAgICAgIyBjb21taXRzIGVudHJlIHYyLjUgZSB2Mi42CiskIGdpdCBsb2cgdjIuNS4uICAgICAgICAgICAgICAgICMgY29tbWl0cyBkZXNkZSB2Mi41CiskIGdpdCBsb2cgLS1zaW5jZT0iMiB3ZWVrcyBhZ28iICMgY29tbWl0cyBkYXMgw7psdGltYXMgMiBzZW1hbmFzCiskIGdpdCBsb2cgdjIuNS4uIE1ha2VmaWxlICAgICAgICMgY29tbWl0cyBkZXNkZSB2Mi41IHF1ZSBtb2RpZmljYW0KKwkJCQkjIE1ha2VmaWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1ZvY8OqIHRhbWLDqW0gcG9kZSBkYXIgYW8gJ2dpdC1sb2cnIHVtICJpbnRlcnZhbG8iIGRlIGNvbW1pdHMgb25kZSBvCitwcmltZWlybyBuw6NvIMOpIG5lY2Vzc2FyaWFtZW50ZSB1bSBhbmNlc3RyYWwgZG8gc2VndW5kbzsgcG9yIGV4ZW1wbG8sIHNlCithcyBwb250YXMgZG9zIHJhbW9zICJzdGFibGUiIGUgIm1hc3RlciIgZGl2ZXJnaXJhbSBkZSB1bSBjb21taXQKK2NvbXVtIGFsZ3VtIHRlbXBvIGF0csOhcywgZW50w6NvCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyBzdGFibGUuLm1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitpcsOhIGxpc3RhciBvcyBjb21taXRzIGZlaXRvcyBubyByYW1vICJtYXN0ZXIiIG1hcyBuw6NvIG5vIHJhbW8KKyJzdGFibGUiLCBlbnF1YW50bworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgbWFzdGVyLi5zdGFibGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworaXLDoSBsaXN0YXIgYSBsaXN0YSBkZSBjb21taXRzIGZlaXRvcyBubyByYW1vICJzdGFibGUiIG1hcyBuw6NvIG5vIHJhbW8KKyJtYXN0ZXIiLgorCitPIGNvbWFuZG8gJ2dpdC1sb2cnIHRlbSB1bWEgZnJhcXVlemE6IGVsZSBwcmVjaXNhIG1vc3RyYXIgb3MgY29tbWl0cyBlbQordW1hIGxpc3RhLiBRdWFuZG8gYSBoaXN0w7NyaWEgdGVtIGxpbmhhcyBkZSBkZXNlbnZvbHZpbWVudG8gcXVlCitkaXZlcmdpcmFtIGUgZW50w6NvIGZvcmFtIHVuaWZpY2FkYXMgbm92YW1lbnRlLCBhIG9yZGVtIGVtIHF1ZSAnZ2l0LWxvZycKK2FwcmVzZW50YSBlc3NhcyBtdWRhbsOnYXMgw6kgaXJyZWxldmFudGUuCisKK0EgbWFpb3JpYSBkb3MgcHJvamV0b3MgY29tIG3Dumx0aXBsb3MgY29udHJpYnVpZG9yZXMgKGNvbW8gbyBrZXJuZWwKK0xpbnV4LCBvdSBvIHByw7NwcmlvIGdpdCkgdGVtIHVuaWZpY2HDp8O1ZXMgZnJlcXVlbnRlcywgZSAnZ2l0aycgZmF6IHVtCit0cmFiYWxobyBtZWxob3IgZGUgdmlzdWFsaXphciBzdWEgaGlzdMOzcmlhLiBQb3IgZXhlbXBsbywKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXRrIC0tc2luY2U9IjIgd2Vla3MgYWdvIiBkcml2ZXJzLworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitwZXJtaXRlIGEgdm9jw6ogbmF2ZWdhciBlbSBxdWFpc3F1ZXIgY29tbWl0cyBkZXNkZSBhcyDDumx0aW1hcyBkdWFzIHNlbWFuYXMKK2RlIGNvbW1pdHMgcXVlIG1vZGlmaWNhcmFtIGFycXVpdm9zIHNvYiBvIGRpcmV0w7NyaW8gImRyaXZlcnMiLiAoTm90YToKK3ZvY8OqIHBvZGUgYWp1c3RhciBhcyBmb250ZXMgZG8gZ2l0ayBzZWd1cmFuZG8gYSB0ZWNsYSBjb250cm9sIGVucXVhbnRvCitwcmVzc2lvbmEgIi0iIG91ICIrIi4pCisKK0ZpbmFsbWVudGUsIGEgbWFpb3JpYSBkb3MgY29tYW5kb3MgcXVlIHJlY2ViZW0gbm9tZXMgZGUgYXJxdWl2byBwZXJtaXRpcsOjbwordGFtYsOpbSwgb3BjaW9uYWxtZW50ZSwgcHJlY2VkZXIgcXVhbHF1ZXIgbm9tZSBkZSBhcnF1aXZvIHBvciB1bQorY29tbWl0LCBwYXJhIGVzcGVjaWZpY2FyIHVtYSB2ZXJzw6NvIHBhcnRpY3VsYXIgZG8gYXJxdWl2bzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZiB2Mi41Ok1ha2VmaWxlIEhFQUQ6TWFrZWZpbGUuaW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVm9jw6ogcG9kZSB1c2FyICdnaXQtc2hvdycgcGFyYSB2ZXIgdGFsIGFycXVpdm86CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cgdjIuNTpNYWtlZmlsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQcsOzeGltb3MgcGFzc29zCistLS0tLS0tLS0tCisKK0VzdGUgdHV0b3JpYWwgZGV2ZSBzZXIgbyBiYXN0YW50ZSBwYXJhIG9wZXJhciBjb250cm9sZSBkZSByZXZpc8OjbworZGlzdHJpYnXDrWRvIGLDoXNpY28gcGFyYSBzZXVzIHByb2pldG9zLiBObyBlbnRhbnRvLCBwYXJhIGVudGVuZGVyCitwbGVuYW1lbnRlIGEgcHJvZnVuZGlkYWRlIGUgbyBwb2RlciBkbyBnaXQgdm9jw6ogcHJlY2lzYSBlbnRlbmRlciBkdWFzCitpZMOpaWFzIHNpbXBsZXMgbmFzIHF1YWlzIGVsZSBzZSBiYXNlaWE6CisKKyAgKiBBIGJhc2UgZGUgb2JqZXRvcyDDqSB1bSBzaXN0ZW1hIGJlbSBlbGVnYW50ZSB1c2FkbyBwYXJhIGFybWF6ZW5hciBhCisgICAgaGlzdMOzcmlhIGRlIHNldSBwcm9qZXRvLS1hcnF1aXZvcywgZGlyZXTDs3Jpb3MsIGUgY29tbWl0cy4KKworICAqIE8gYXJxdWl2byBkZSDDrW5kaWNlIMOpIHVtIGNhY2hlIGRvIGVzdGFkbyBkZSB1bWEgw6Fydm9yZSBkZSBkaXJldMOzcmlvLAorICAgIHVzYWRvIHBhcmEgY3JpYXIgY29tbWl0cywgcmVzdGF1cmFyIGRpcmV0w7NyaW9zIGRlIHRyYWJhbGhvLCBlCisgICAgYXJtYXplbmFyIGFzIHbDoXJpYXMgw6Fydm9yZXMgZW52b2x2aWRhcyBlbSB1bWEgdW5pZmljYcOnw6NvLgorCitBIHBhcnRlIGRvaXMgZGVzdGUgdHV0b3JpYWwgZXhwbGljYSBhIGJhc2UgZGUgb2JqZXRvcywgbyBhcnF1aXZvIGRlCivDrW5kaWNlLCBlIGFsZ3VtYXMgb3V0cmFzIGNvaXNpbmhhcyBxdWUgdm9jw6ogdmFpIHByZWNpc2FyIHByYSB1c2FyIG8KK23DoXhpbW8gZG8gZ2l0LiBWb2PDqiBwb2RlIGVuY29udHLDoS1sYSBlbSBsaW5rZ2l0OmdpdHR1dG9yaWFsLTJbN10uCisKK1NlIHZvY8OqIG7Do28gcXVpc2VyIGNvbnRpbnVhciBjb20gbyB0dXRvcmlhbCBhZ29yYSBuZXNzZSBtb21lbnRvLCBhbGd1bWFzCitvdXRyYXMgZGlncmVzc8O1ZXMgcXVlIHBvZGVtIHNlciBpbnRlcmVzc2FudGVzIG5lc3RlIHBvbnRvIHPDo286CisKKyAgKiBsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0sIGxpbmtnaXQ6Z2l0LWFtWzFdOiBFc3RlcyBjb252ZXJ0ZW0KKyAgICBzw6lyaWVzIGRlIGNvbW1pdHMgZW0gcGF0Y2hlcyBwYXJhIGVtYWlsLCBlIHZpY2UtdmVyc2EsIMO6dGVpcyBwYXJhCisgICAgcHJvamV0b3MgY29tbyBvIGtlcm5lbCBMaW51eCBxdWUgZGVwZW5kZW0gZm9ydGVtZW50ZSBkZSBwYXRjaGVzCisgICAgZW52aWFkb3MgcG9yIGVtYWlsLgorCisgICogbGlua2dpdDpnaXQtYmlzZWN0WzFdOiBRdWFuZG8gaMOhIHVtYSByZWdyZXNzw6NvIGVtIHNldSBwcm9qZXRvLCB1bWEKKyAgICBmb3JtYSBkZSByYXN0cmVhciB1bSBidWcgw6kgcHJvY3VyYW5kbyBwZWxhIGhpc3TDs3JpYSBwYXJhIGVuY29udHJhciBvCisgICAgY29tbWl0IGN1bHBhZG8uIEdpdCBiaXNlY3QgcG9kZSBhanVkYXIgYSBleGVjdXRhciB1bWEgYnVzY2EgYmluw6FyaWEKKyAgICBwb3IgZXNzZSBjb21taXQuIEVsZSDDqSBpbnRlbGlnZW50ZSBvIGJhc3RhbnRlIHBhcmEgZXhlY3V0YXIgdW1hCisgICAgYnVzY2EgcHLDs3hpbWEgZGEgw7N0aW1hIG1lc21vIG5vIGNhc28gZGUgdW1hIGhpc3TDs3JpYSBjb21wbGV4YQorICAgIG7Do28tbGluZWFyIGNvbSBtdWl0b3MgcmFtb3MgdW5pZmljYWRvcy4KKworICAqIGxpbms6ZXZlcnlkYXkuaHRtbFtHSVQgZGlhcmlhbWVudGUgY29tIDIwIGUgdGFudG9zIGNvbWFuZG9zXQorCisgICogbGlua2dpdDpnaXRjdnMtbWlncmF0aW9uWzddOiBHaXQgcGFyYSB1c3XDoXJpb3MgZGUgQ1ZTLgorCitWRUpBIFRBTULDiU0KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdHR1dG9yaWFsLTJbN10sCitsaW5rZ2l0OmdpdGN2cy1taWdyYXRpb25bN10sCitsaW5rZ2l0OmdpdGNvcmUtdHV0b3JpYWxbN10sCitsaW5rZ2l0OmdpdGdsb3NzYXJ5WzddLAorbGlua2dpdDpnaXQtaGVscFsxXSwKK2xpbms6ZXZlcnlkYXkuaHRtbFtnaXQgZGlhcmlhbWVudGVdLAorbGluazp1c2VyLW1hbnVhbC5odG1sW08gTWFudWFsIGRvIFVzdcOhcmlvIGdpdF0KKworR0lUCistLS0KK1BhcnRlIGRhIHN1aXRlIGxpbmtnaXQ6Z2l0WzFdLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wdWxsLWZldGNoLXBhcmFtLnR4dCBiL0RvY3VtZW50YXRpb24vcHVsbC1mZXRjaC1wYXJhbS50eHQKaW5kZXggZjk4MTFmMi4uNWRkNmU1YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wdWxsLWZldGNoLXBhcmFtLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3B1bGwtZmV0Y2gtcGFyYW0udHh0CkBAIC00LDYgKzQsMTMgQEAKIAkoc2VlIHRoZSBzZWN0aW9uIDw8VVJMUyxHSVQgVVJMUz4+IGJlbG93KSBvciB0aGUgbmFtZQogCW9mIGEgcmVtb3RlIChzZWUgdGhlIHNlY3Rpb24gPDxSRU1PVEVTLFJFTU9URVM+PiBiZWxvdykuCiAKK2lmbmRlZjo6Z2l0LXB1bGxbXQorPGdyb3VwPjo6CisJQSBuYW1lIHJlZmVycmluZyB0byBhIGxpc3Qgb2YgcmVwb3NpdG9yaWVzIGFzIHRoZSB2YWx1ZQorCW9mIHJlbW90ZXMuPGdyb3VwPiBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorCShTZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4KK2VuZGlmOjpnaXQtcHVsbFtdCisKIDxyZWZzcGVjPjo6CiAJVGhlIGZvcm1hdCBvZiBhIDxyZWZzcGVjPiBwYXJhbWV0ZXIgaXMgYW4gb3B0aW9uYWwgcGx1cwogCWB7cGx1c31gLCBmb2xsb3dlZCBieSB0aGUgc291cmNlIHJlZiA8c3JjPiwgZm9sbG93ZWQKQEAgLTExLDkgKzE4LDkgQEAKICsKIFRoZSByZW1vdGUgcmVmIHRoYXQgbWF0Y2hlcyA8c3JjPgogaXMgZmV0Y2hlZCwgYW5kIGlmIDxkc3Q+IGlzIG5vdCBlbXB0eSBzdHJpbmcsIHRoZSBsb2NhbAotcmVmIHRoYXQgbWF0Y2hlcyBpdCBpcyBmYXN0IGZvcndhcmRlZCB1c2luZyA8c3JjPi4KK3JlZiB0aGF0IG1hdGNoZXMgaXQgaXMgZmFzdC1mb3J3YXJkZWQgdXNpbmcgPHNyYz4uCiBJZiB0aGUgb3B0aW9uYWwgcGx1cyBgK2AgaXMgdXNlZCwgdGhlIGxvY2FsIHJlZgotaXMgdXBkYXRlZCBldmVuIGlmIGl0IGRvZXMgbm90IHJlc3VsdCBpbiBhIGZhc3QgZm9yd2FyZAoraXMgdXBkYXRlZCBldmVuIGlmIGl0IGRvZXMgbm90IHJlc3VsdCBpbiBhIGZhc3QtZm9yd2FyZAogdXBkYXRlLgogKwogW05PVEVdCkBAIC0zMSw3ICszOCw3IEBACiBbTk9URV0KIFlvdSBuZXZlciBkbyB5b3VyIG93biBkZXZlbG9wbWVudCBvbiBicmFuY2hlcyB0aGF0IGFwcGVhcgogb24gdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiBhIDxyZWZzcGVjPiBjb2xvbiBvbiBgUHVsbDpgIGxpbmVzOwotdGhleSBhcmUgdG8gYmUgdXBkYXRlZCBieSAnZ2l0LWZldGNoJy4gIElmIHlvdSBpbnRlbmQgdG8gZG8KK3RoZXkgYXJlIHRvIGJlIHVwZGF0ZWQgYnkgJ2dpdCBmZXRjaCcuICBJZiB5b3UgaW50ZW5kIHRvIGRvCiBkZXZlbG9wbWVudCBkZXJpdmVkIGZyb20gYSByZW1vdGUgYnJhbmNoIGBCYCwgaGF2ZSBhIGBQdWxsOmAKIGxpbmUgdG8gdHJhY2sgaXQgKGkuZS4gYFB1bGw6IEI6cmVtb3RlLUJgKSwgYW5kIGhhdmUgYSBzZXBhcmF0ZQogYnJhbmNoIGBteS1CYCB0byBkbyB5b3VyIGRldmVsb3BtZW50IG9uIHRvcCBvZiBpdC4gIFRoZSBsYXR0ZXIKQEAgLTQzLDEzICs1MCwxMyBAQAogKwogW05PVEVdCiBUaGVyZSBpcyBhIGRpZmZlcmVuY2UgYmV0d2VlbiBsaXN0aW5nIG11bHRpcGxlIDxyZWZzcGVjPgotZGlyZWN0bHkgb24gJ2dpdC1wdWxsJyBjb21tYW5kIGxpbmUgYW5kIGhhdmluZyBtdWx0aXBsZQorZGlyZWN0bHkgb24gJ2dpdCBwdWxsJyBjb21tYW5kIGxpbmUgYW5kIGhhdmluZyBtdWx0aXBsZQogYFB1bGw6YCA8cmVmc3BlYz4gbGluZXMgZm9yIGEgPHJlcG9zaXRvcnk+IGFuZCBydW5uaW5nCi0nZ2l0LXB1bGwnIGNvbW1hbmQgd2l0aG91dCBhbnkgZXhwbGljaXQgPHJlZnNwZWM+IHBhcmFtZXRlcnMuCisnZ2l0IHB1bGwnIGNvbW1hbmQgd2l0aG91dCBhbnkgZXhwbGljaXQgPHJlZnNwZWM+IHBhcmFtZXRlcnMuCiA8cmVmc3BlYz4gbGlzdGVkIGV4cGxpY2l0bHkgb24gdGhlIGNvbW1hbmQgbGluZSBhcmUgYWx3YXlzCiBtZXJnZWQgaW50byB0aGUgY3VycmVudCBicmFuY2ggYWZ0ZXIgZmV0Y2hpbmcuICBJbiBvdGhlciB3b3JkcywKIGlmIHlvdSBsaXN0IG1vcmUgdGhhbiBvbmUgcmVtb3RlIHJlZnMsIHlvdSB3b3VsZCBiZSBtYWtpbmcKLWFuIE9jdG9wdXMuICBXaGlsZSAnZ2l0LXB1bGwnIHJ1biB3aXRob3V0IGFueSBleHBsaWNpdCA8cmVmc3BlYz4KK2FuIE9jdG9wdXMuICBXaGlsZSAnZ2l0IHB1bGwnIHJ1biB3aXRob3V0IGFueSBleHBsaWNpdCA8cmVmc3BlYz4KIHBhcmFtZXRlciB0YWtlcyBkZWZhdWx0IDxyZWZzcGVjPnMgZnJvbSBgUHVsbDpgIGxpbmVzLCBpdAogbWVyZ2VzIG9ubHkgdGhlIGZpcnN0IDxyZWZzcGVjPiBmb3VuZCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCwKIGFmdGVyIGZldGNoaW5nIGFsbCB0aGUgcmVtb3RlIHJlZnMuICBUaGlzIGlzIGJlY2F1c2UgbWFraW5nIGFuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Jldi1saXN0LW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9yZXYtbGlzdC1vcHRpb25zLnR4dAppbmRleCAxMWVlYzk0Li44MWMwZTZmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Jldi1saXN0LW9wdGlvbnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcmV2LWxpc3Qtb3B0aW9ucy50eHQKQEAgLTIwMSw2ICsyMDEsMTAgQEAKIAogCVN0b3Agd2hlbiBhIGdpdmVuIHBhdGggZGlzYXBwZWFycyBmcm9tIHRoZSB0cmVlLgogCistLW1lcmdlczo6CisKKwlQcmludCBvbmx5IG1lcmdlIGNvbW1pdHMuCisKIC0tbm8tbWVyZ2VzOjoKIAogCURvIG5vdCBwcmludCBjb21taXRzIHdpdGggbW9yZSB0aGFuIG9uZSBwYXJlbnQuCkBAIC0yMjEsMzAgKzIyNSw1NCBAQAogCiAtLWFsbDo6CiAKLQlQcmV0ZW5kIGFzIGlmIGFsbCB0aGUgcmVmcyBpbiBgJEdJVF9ESVIvcmVmcy9gIGFyZSBsaXN0ZWQgb24gdGhlCisJUHJldGVuZCBhcyBpZiBhbGwgdGhlIHJlZnMgaW4gYHJlZnMvYCBhcmUgbGlzdGVkIG9uIHRoZQogCWNvbW1hbmQgbGluZSBhcyAnPGNvbW1pdD4nLgogCi0tLWJyYW5jaGVzOjoKKy0tYnJhbmNoZXNbPXBhdHRlcm5dOjoKIAotCVByZXRlbmQgYXMgaWYgYWxsIHRoZSByZWZzIGluIGAkR0lUX0RJUi9yZWZzL2hlYWRzYCBhcmUgbGlzdGVkCi0Jb24gdGhlIGNvbW1hbmQgbGluZSBhcyAnPGNvbW1pdD4nLgorCVByZXRlbmQgYXMgaWYgYWxsIHRoZSByZWZzIGluIGByZWZzL2hlYWRzYCBhcmUgbGlzdGVkCisJb24gdGhlIGNvbW1hbmQgbGluZSBhcyAnPGNvbW1pdD4nLiBJZiBgcGF0dGVybmAgaXMgZ2l2ZW4sIGxpbWl0CisJYnJhbmNoZXMgdG8gb25lcyBtYXRjaGluZyBnaXZlbiBzaGVsbCBnbG9iLiBJZiBwYXR0ZXJuIGxhY2tzICc/JywKKwknKicsIG9yICdbJywgJy8qJyBhdCB0aGUgZW5kIGlzIGltcGxpZWQuCiAKLS0tdGFnczo6CistLXRhZ3NbPXBhdHRlcm5dOjoKIAotCVByZXRlbmQgYXMgaWYgYWxsIHRoZSByZWZzIGluIGAkR0lUX0RJUi9yZWZzL3RhZ3NgIGFyZSBsaXN0ZWQKLQlvbiB0aGUgY29tbWFuZCBsaW5lIGFzICc8Y29tbWl0PicuCisJUHJldGVuZCBhcyBpZiBhbGwgdGhlIHJlZnMgaW4gYHJlZnMvdGFnc2AgYXJlIGxpc3RlZAorCW9uIHRoZSBjb21tYW5kIGxpbmUgYXMgJzxjb21taXQ+Jy4gSWYgYHBhdHRlcm5gIGlzIGdpdmVuLCBsaW1pdAorCXRhZ3MgdG8gb25lcyBtYXRjaGluZyBnaXZlbiBzaGVsbCBnbG9iLiBJZiBwYXR0ZXJuIGxhY2tzICc/JywgJyonLAorCW9yICdbJywgJy8qJyBhdCB0aGUgZW5kIGlzIGltcGxpZWQuCiAKLS0tcmVtb3Rlczo6CistLXJlbW90ZXNbPXBhdHRlcm5dOjoKIAotCVByZXRlbmQgYXMgaWYgYWxsIHRoZSByZWZzIGluIGAkR0lUX0RJUi9yZWZzL3JlbW90ZXNgIGFyZSBsaXN0ZWQKLQlvbiB0aGUgY29tbWFuZCBsaW5lIGFzICc8Y29tbWl0PicuCisJUHJldGVuZCBhcyBpZiBhbGwgdGhlIHJlZnMgaW4gYHJlZnMvcmVtb3Rlc2AgYXJlIGxpc3RlZAorCW9uIHRoZSBjb21tYW5kIGxpbmUgYXMgJzxjb21taXQ+Jy4gSWYgYHBhdHRlcm5gaXMgZ2l2ZW4sIGxpbWl0CisJcmVtb3RlIHRyYWNraW5nIGJyYW5jaGVzIHRvIG9uZXMgbWF0Y2hpbmcgZ2l2ZW4gc2hlbGwgZ2xvYi4KKwlJZiBwYXR0ZXJuIGxhY2tzICc/JywgJyonLCBvciAnWycsICcvKicgYXQgdGhlIGVuZCBpcyBpbXBsaWVkLgogCi1pZmRlZjo6Z2l0LXJldi1saXN0W10KKy0tZ2xvYj1nbG9iLXBhdHRlcm46OgorCVByZXRlbmQgYXMgaWYgYWxsIHRoZSByZWZzIG1hdGNoaW5nIHNoZWxsIGdsb2IgYGdsb2ItcGF0dGVybmAKKwlhcmUgbGlzdGVkIG9uIHRoZSBjb21tYW5kIGxpbmUgYXMgJzxjb21taXQ+Jy4gTGVhZGluZyAncmVmcy8nLAorCWlzIGF1dG9tYXRpY2FsbHkgcHJlcGVuZGVkIGlmIG1pc3NpbmcuIElmIHBhdHRlcm4gbGFja3MgJz8nLCAnKicsCisJb3IgJ1snLCAnLyonIGF0IHRoZSBlbmQgaXMgaW1wbGllZC4KKworCitpZm5kZWY6OmdpdC1yZXYtbGlzdFtdCistLWJpc2VjdDo6CisKKwlQcmV0ZW5kIGFzIGlmIHRoZSBiYWQgYmlzZWN0aW9uIHJlZiBgcmVmcy9iaXNlY3QvYmFkYAorCXdhcyBsaXN0ZWQgYW5kIGFzIGlmIGl0IHdhcyBmb2xsb3dlZCBieSBgLS1ub3RgIGFuZCB0aGUgZ29vZAorCWJpc2VjdGlvbiByZWZzIGByZWZzL2Jpc2VjdC9nb29kLSpgIG9uIHRoZSBjb21tYW5kCisJbGluZS4KK2VuZGlmOjpnaXQtcmV2LWxpc3RbXQorCiAtLXN0ZGluOjoKIAogCUluIGFkZGl0aW9uIHRvIHRoZSAnPGNvbW1pdD4nIGxpc3RlZCBvbiB0aGUgY29tbWFuZAotCWxpbmUsIHJlYWQgdGhlbSBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4KKwlsaW5lLCByZWFkIHRoZW0gZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQuIElmIGEgJy0tJyBzZXBhcmF0b3IgaXMKKwlzZWVuLCBzdG9wIHJlYWRpbmcgY29tbWl0cyBhbmQgc3RhcnQgcmVhZGluZyBwYXRocyB0byBsaW1pdCB0aGUKKwlyZXN1bHQuCiAKK2lmZGVmOjpnaXQtcmV2LWxpc3RbXQogLS1xdWlldDo6CiAKIAlEb24ndCBwcmludCBhbnl0aGluZyB0byBzdGFuZGFyZCBvdXRwdXQuICBUaGlzIGZvcm0KQEAgLTUzMiw3ICs1NjAsMTEgQEAKIC0tYmlzZWN0OjoKIAogTGltaXQgb3V0cHV0IHRvIHRoZSBvbmUgY29tbWl0IG9iamVjdCB3aGljaCBpcyByb3VnaGx5IGhhbGZ3YXkgYmV0d2VlbgotdGhlIGluY2x1ZGVkIGFuZCBleGNsdWRlZCBjb21taXRzLiBUaHVzLCBpZgoraW5jbHVkZWQgYW5kIGV4Y2x1ZGVkIGNvbW1pdHMuIE5vdGUgdGhhdCB0aGUgYmFkIGJpc2VjdGlvbiByZWYKK2ByZWZzL2Jpc2VjdC9iYWRgIGlzIGFkZGVkIHRvIHRoZSBpbmNsdWRlZCBjb21taXRzIChpZiBpdAorZXhpc3RzKSBhbmQgdGhlIGdvb2QgYmlzZWN0aW9uIHJlZnMgYHJlZnMvYmlzZWN0L2dvb2QtKmAgYXJlCithZGRlZCB0byB0aGUgZXhjbHVkZWQgY29tbWl0cyAoaWYgdGhleSBleGlzdCkuIFRodXMsIHN1cHBvc2luZyB0aGVyZQorYXJlIG5vIHJlZnMgaW4gYHJlZnMvYmlzZWN0L2AsIGlmCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJJCBnaXQgcmV2LWxpc3QgLS1iaXNlY3QgZm9vIF5iYXIgXmJhegpAQCAtNTUyLDIyICs1ODQsMjQgQEAKIAogLS1iaXNlY3QtdmFyczo6CiAKLVRoaXMgY2FsY3VsYXRlcyB0aGUgc2FtZSBhcyBgLS1iaXNlY3RgLCBidXQgb3V0cHV0cyB0ZXh0IHJlYWR5Ci10byBiZSBldmFsJ2VkIGJ5IHRoZSBzaGVsbC4gVGhlc2UgbGluZXMgd2lsbCBhc3NpZ24gdGhlIG5hbWUgb2YKLXRoZSBtaWRwb2ludCByZXZpc2lvbiB0byB0aGUgdmFyaWFibGUgYGJpc2VjdF9yZXZgLCBhbmQgdGhlCi1leHBlY3RlZCBudW1iZXIgb2YgY29tbWl0cyB0byBiZSB0ZXN0ZWQgYWZ0ZXIgYGJpc2VjdF9yZXZgIGlzCi10ZXN0ZWQgdG8gYGJpc2VjdF9ucmAsIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgY29tbWl0cyB0byBiZQotdGVzdGVkIGlmIGBiaXNlY3RfcmV2YCB0dXJucyBvdXQgdG8gYmUgZ29vZCB0byBgYmlzZWN0X2dvb2RgLAotdGhlIGV4cGVjdGVkIG51bWJlciBvZiBjb21taXRzIHRvIGJlIHRlc3RlZCBpZiBgYmlzZWN0X3JldmAKLXR1cm5zIG91dCB0byBiZSBiYWQgdG8gYGJpc2VjdF9iYWRgLCBhbmQgdGhlIG51bWJlciBvZiBjb21taXRzCi13ZSBhcmUgYmlzZWN0aW5nIHJpZ2h0IG5vdyB0byBgYmlzZWN0X2FsbGAuCitUaGlzIGNhbGN1bGF0ZXMgdGhlIHNhbWUgYXMgYC0tYmlzZWN0YCwgZXhjZXB0IHRoYXQgcmVmcyBpbgorYHJlZnMvYmlzZWN0L2AgYXJlIG5vdCB1c2VkLCBhbmQgZXhjZXB0IHRoYXQgdGhpcyBvdXRwdXRzCit0ZXh0IHJlYWR5IHRvIGJlIGV2YWwnZWQgYnkgdGhlIHNoZWxsLiBUaGVzZSBsaW5lcyB3aWxsIGFzc2lnbiB0aGUKK25hbWUgb2YgdGhlIG1pZHBvaW50IHJldmlzaW9uIHRvIHRoZSB2YXJpYWJsZSBgYmlzZWN0X3JldmAsIGFuZCB0aGUKK2V4cGVjdGVkIG51bWJlciBvZiBjb21taXRzIHRvIGJlIHRlc3RlZCBhZnRlciBgYmlzZWN0X3JldmAgaXMgdGVzdGVkCit0byBgYmlzZWN0X25yYCwgdGhlIGV4cGVjdGVkIG51bWJlciBvZiBjb21taXRzIHRvIGJlIHRlc3RlZCBpZgorYGJpc2VjdF9yZXZgIHR1cm5zIG91dCB0byBiZSBnb29kIHRvIGBiaXNlY3RfZ29vZGAsIHRoZSBleHBlY3RlZAorbnVtYmVyIG9mIGNvbW1pdHMgdG8gYmUgdGVzdGVkIGlmIGBiaXNlY3RfcmV2YCB0dXJucyBvdXQgdG8gYmUgYmFkIHRvCitgYmlzZWN0X2JhZGAsIGFuZCB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgd2UgYXJlIGJpc2VjdGluZyByaWdodCBub3cgdG8KK2BiaXNlY3RfYWxsYC4KIAogLS1iaXNlY3QtYWxsOjoKIAogVGhpcyBvdXRwdXRzIGFsbCB0aGUgY29tbWl0IG9iamVjdHMgYmV0d2VlbiB0aGUgaW5jbHVkZWQgYW5kIGV4Y2x1ZGVkCiBjb21taXRzLCBvcmRlcmVkIGJ5IHRoZWlyIGRpc3RhbmNlIHRvIHRoZSBpbmNsdWRlZCBhbmQgZXhjbHVkZWQKLWNvbW1pdHMuIFRoZSBmYXJ0aGVzdCBmcm9tIHRoZW0gaXMgZGlzcGxheWVkIGZpcnN0LiAoVGhpcyBpcyB0aGUgb25seQotb25lIGRpc3BsYXllZCBieSBgLS1iaXNlY3RgLikKK2NvbW1pdHMuIFJlZnMgaW4gYHJlZnMvYmlzZWN0L2AgYXJlIG5vdCB1c2VkLiBUaGUgZmFydGhlc3QKK2Zyb20gdGhlbSBpcyBkaXNwbGF5ZWQgZmlyc3QuIChUaGlzIGlzIHRoZSBvbmx5IG9uZSBkaXNwbGF5ZWQgYnkKK2AtLWJpc2VjdGAuKQogKwogVGhpcyBpcyB1c2VmdWwgYmVjYXVzZSBpdCBtYWtlcyBpdCBlYXN5IHRvIGNob29zZSBhIGdvb2QgY29tbWl0IHRvCiB0ZXN0IHdoZW4geW91IHdhbnQgdG8gYXZvaWQgdG8gdGVzdCBzb21lIG9mIHRoZW0gZm9yIHNvbWUgcmVhc29uICh0aGV5CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktZGlyZWN0b3J5LWxpc3RpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWRpcmVjdG9yeS1saXN0aW5nLnR4dAppbmRleCA1YmJkMThmLi5hZGQ2ZjQzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktZGlyZWN0b3J5LWxpc3RpbmcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1kaXJlY3RvcnktbGlzdGluZy50eHQKQEAgLTU4LDYgKzU4LDkgQEAKIENhbGxpbmcgc2VxdWVuY2UKIC0tLS0tLS0tLS0tLS0tLS0KIAorTm90ZTogaW5kZXggbWF5IGJlIGxvb2tlZCBhdCBmb3IgLmdpdGlnbm9yZSBmaWxlcyB0aGF0IGFyZSBDRV9TS0lQX1dPUktUUkVFCittYXJrZWQuIElmIHlvdSB0byBleGNsdWRlIGZpbGVzLCBtYWtlIHN1cmUgeW91IGhhdmUgbG9hZGVkIGluZGV4IGZpcnN0LgorCiAqIFByZXBhcmUgYHN0cnVjdCBkaXJfc3RydWN0IGRpcmAgYW5kIGNsZWFyIGl0IHdpdGggYG1lbXNldCgmZGlyLCAwLAogICBzaXplb2YoZGlyKSlgLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktaGFzaC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktaGFzaC50eHQKaW5kZXggYzc4NGQzZS4uZTUwNjFlMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWhhc2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1oYXNoLnR4dApAQCAtMSw2ICsxLDUyIEBACiBoYXNoIEFQSQogPT09PT09PT0KIAotVGFsayBhYm91dCA8aGFzaC5oPgorVGhlIGhhc2ggQVBJIGlzIGEgY29sbGVjdGlvbiBvZiBzaW1wbGUgaGFzaCB0YWJsZSBmdW5jdGlvbnMuIFVzZXJzIGFyZSBleHBlY3RlZAordG8gaW1wbGVtZW50IHRoZWlyIG93biBoYXNoaW5nLgogCi0oTGludXMpCitEYXRhIFN0cnVjdHVyZXMKKy0tLS0tLS0tLS0tLS0tLQorCitgc3RydWN0IGhhc2hfdGFibGVgOjoKKworCVRoZSBoYXNoIHRhYmxlIHN0cnVjdHVyZS4gVGhlIGBhcnJheWAgbWVtYmVyIHBvaW50cyB0byB0aGUgaGFzaCB0YWJsZQorCWVudHJpZXMuIFRoZSBgc2l6ZWAgbWVtYmVyIGNvdW50cyB0aGUgdG90YWwgbnVtYmVyIG9mIHZhbGlkIGFuZCBpbnZhbGlkCisJZW50cmllcyBpbiB0aGUgdGFibGUuIFRoZSBgbnJgIG1lbWJlciBrZWVwcyB0cmFjayBvZiB0aGUgbnVtYmVyIG9mCisJdmFsaWQgZW50cmllcy4KKworYHN0cnVjdCBoYXNoX3RhYmxlX2VudHJ5YDo6CisKKwlBbiBvcGFxdWUgc3RydWN0dXJlIHJlcHJlc2VudGluZyBhbiBlbnRyeSBpbiB0aGUgaGFzaCB0YWJsZS4gVGhlIGBoYXNoYAorCW1lbWJlciBpcyB0aGUgZW50cnkncyBoYXNoIGtleSBhbmQgdGhlIGBwdHJgIG1lbWJlciBpcyB0aGUgZW50cnkncworCXZhbHVlLgorCitGdW5jdGlvbnMKKy0tLS0tLS0tLQorCitgaW5pdF9oYXNoYDo6CisKKwlJbml0aWFsaXplIHRoZSBoYXNoIHRhYmxlLgorCitgZnJlZV9oYXNoYDo6CisKKwlSZWxlYXNlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIGhhc2ggdGFibGUuCisKK2BpbnNlcnRfaGFzaGA6OgorCisJSW5zZXJ0IGEgcG9pbnRlciBpbnRvIHRoZSBoYXNoIHRhYmxlLiBJZiBhbiBlbnRyeSB3aXRoIHRoYXQgaGFzaAorCWFscmVhZHkgZXhpc3RzLCBhIHBvaW50ZXIgdG8gdGhlIGV4aXN0aW5nIGVudHJ5J3MgdmFsdWUgaXMgcmV0dXJuZWQuCisJT3RoZXJ3aXNlIE5VTEwgaXMgcmV0dXJuZWQuICBUaGlzIGFsbG93cyBjYWxsZXJzIHRvIGltcGxlbWVudAorCWNoYWluaW5nLCBldGMuCisKK2Bsb29rdXBfaGFzaGA6OgorCisJTG9va3VwIGFuIGVudHJ5IGluIHRoZSBoYXNoIHRhYmxlLiBJZiBhbiBlbnRyeSB3aXRoIHRoYXQgaGFzaCBleGlzdHMKKwl0aGUgZW50cnkncyB2YWx1ZSBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlIE5VTEwgaXMgcmV0dXJuZWQuCisKK2Bmb3JfZWFjaF9oYXNoYDo6CisKKwlDYWxsIGEgZnVuY3Rpb24gZm9yIGVhY2ggZW50cnkgaW4gdGhlIGhhc2ggdGFibGUuIFRoZSBmdW5jdGlvbiBpcworCWV4cGVjdGVkIHRvIHRha2UgdGhlIGVudHJ5J3MgdmFsdWUgYXMgaXRzIG9ubHkgYXJndW1lbnQgYW5kIHJldHVybiBhbgorCWludC4gSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBuZWdhdGl2ZSBpbnQgdGhlIGxvb3AgaXMgYWJvcnRlZAorCWltbWVkaWF0ZWx5LiAgT3RoZXJ3aXNlLCB0aGUgcmV0dXJuIHZhbHVlIGlzIGFjY3VtdWxhdGVkIGFuZCB0aGUgc3VtCisJcmV0dXJuZWQgdXBvbiBjb21wbGV0aW9uIG9mIHRoZSBsb29wLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWhpc3RvcnktZ3JhcGgudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWhpc3RvcnktZ3JhcGgudHh0CmluZGV4IGQ2NmU2MWIuLmQ2ZmM5MGEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1oaXN0b3J5LWdyYXBoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktaGlzdG9yeS1ncmFwaC50eHQKQEAgLTExLDkgKzExLDYgQEAKIAogKiBgZ3JhcGhfaW5pdCgpYCBjcmVhdGVzIGEgbmV3IGBzdHJ1Y3QgZ2l0X2dyYXBoYAogCi0qIGBncmFwaF9yZWxlYXNlKClgIGRlc3Ryb3lzIGEgYHN0cnVjdCBnaXRfZ3JhcGhgLCBhbmQgZnJlZXMgdGhlIG1lbW9yeQotICBhc3NvY2lhdGVkIHdpdGggaXQuCi0KICogYGdyYXBoX3VwZGF0ZSgpYCBtb3ZlcyB0aGUgZ3JhcGggdG8gYSBuZXcgY29tbWl0LgogCiAqIGBncmFwaF9uZXh0X2xpbmUoKWAgb3V0cHV0cyB0aGUgbmV4dCBsaW5lIG9mIHRoZSBncmFwaCBpbnRvIGEgc3RyYnVmLiAgSXQKQEAgLTEzNCw4ICsxMzEsNiBAQAogCQkJcHV0Y2hhcihvcHRzLT5kaWZmb3B0LmxpbmVfdGVybWluYXRpb24pOwogCX0KIH0KLQotZ3JhcGhfcmVsZWFzZShncmFwaCk7CiAtLS0tLS0tLS0tLS0KIAogU2FtcGxlIG91dHB1dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXBhcnNlLW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXBhcnNlLW9wdGlvbnMudHh0CmluZGV4IGUzMGM2MDIuLjUwZjllOWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1wYXJzZS1vcHRpb25zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcGFyc2Utb3B0aW9ucy50eHQKQEAgLTYwLDEzICs2MCwxMyBAQAogLiBpbiBgY21kX2ZvbyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeClgCiAgIGNhbGwKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGJ1aWx0aW5fZm9vX29wdGlvbnMsIGJ1aWx0aW5fZm9vX3VzYWdlLCBmbGFncyk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX2Zvb19vcHRpb25zLCBidWlsdGluX2Zvb191c2FnZSwgZmxhZ3MpOwogKwogYHBhcnNlX29wdGlvbnMoKWAgd2lsbCBmaWx0ZXIgb3V0IHRoZSBwcm9jZXNzZWQgb3B0aW9ucyBvZiBgYXJndltdYCBhbmQgbGVhdmUgdGhlCiBub24tb3B0aW9uIGFyZ3VtZW50cyBpbiBgYXJndltdYC4KIGBhcmdjYCBpcyB1cGRhdGVkIGFwcHJvcHJpYXRlbHkgYmVjYXVzZSBvZiB0aGUgYXNzaWdubWVudC4KICsKLVlvdSBjYW4gYWxzbyBwYXNzIE5VTEwgaW5zdGVhZCBvZiBhIHVzYWdlIGFycmF5IGFzIGZvdXJ0aCBwYXJhbWV0ZXIgb2YKK1lvdSBjYW4gYWxzbyBwYXNzIE5VTEwgaW5zdGVhZCBvZiBhIHVzYWdlIGFycmF5IGFzIHRoZSBmaWZ0aCBwYXJhbWV0ZXIgb2YKIHBhcnNlX29wdGlvbnMoKSwgdG8gYXZvaWQgZGlzcGxheWluZyBhIGhlbHAgc2NyZWVuIHdpdGggdXNhZ2UgaW5mbyBhbmQKIG9wdGlvbiBsaXN0LiAgVGhpcyBzaG91bGQgb25seSBiZSBkb25lIGlmIG5lY2Vzc2FyeSwgZS5nLiB0byBpbXBsZW1lbnQKIGEgbGltaXRlZCBwYXJzZXIgZm9yIG9ubHkgYSBzdWJzZXQgb2YgdGhlIG9wdGlvbnMgdGhhdCBuZWVkcyB0byBiZSBydW4KQEAgLTEzNyw2ICsxMzcsMTAgQEAKIAlJbnRyb2R1Y2UgYSBib29sZWFuIG9wdGlvbi4KIAlJZiB1c2VkLCBgaW50X3ZhcmAgaXMgYml0d2lzZS1vcmVkIHdpdGggYG1hc2tgLgogCitgT1BUX05FR0JJVChzaG9ydCwgbG9uZywgJmludF92YXIsIGRlc2NyaXB0aW9uLCBtYXNrKWA6OgorCUludHJvZHVjZSBhIGJvb2xlYW4gb3B0aW9uLgorCUlmIHVzZWQsIGBpbnRfdmFyYCBpcyBiaXR3aXNlLWFuZGVkIHdpdGggdGhlIGludmVydGVkIGBtYXNrYC4KKwogYE9QVF9TRVRfSU5UKHNob3J0LCBsb25nLCAmaW50X3ZhciwgZGVzY3JpcHRpb24sIGludGVnZXIpYDo6CiAJSW50cm9kdWNlIGEgYm9vbGVhbiBvcHRpb24uCiAJSWYgdXNlZCwgc2V0IGBpbnRfdmFyYCB0byBgaW50ZWdlcmAuCkBAIC0xNjMsOSArMTY3LDIyIEBACiAJYW5kIHRoZSByZXN1bHQgd2lsbCBiZSBwdXQgaW50byBgdmFyYC4KIAlTZWUgJ09wdGlvbiBDYWxsYmFja3MnIGJlbG93IGZvciBhIG1vcmUgZWxhYm9yYXRlIGRlc2NyaXB0aW9uLgogCitgT1BUX0ZJTEVOQU1FKHNob3J0LCBsb25nLCAmdmFyLCBkZXNjcmlwdGlvbilgOjoKKwlJbnRyb2R1Y2UgYW4gb3B0aW9uIHdpdGggYSBmaWxlbmFtZSBhcmd1bWVudC4KKwlUaGUgZmlsZW5hbWUgd2lsbCBiZSBwcmVmaXhlZCBieSBwYXNzaW5nIHRoZSBmaWxlbmFtZSBhbG9uZyB3aXRoCisJdGhlIHByZWZpeCBhcmd1bWVudCBvZiBgcGFyc2Vfb3B0aW9ucygpYCB0byBgcHJlZml4X2ZpbGVuYW1lKClgLgorCiBgT1BUX0FSR1VNRU5UKGxvbmcsIGRlc2NyaXB0aW9uKWA6OgogCUludHJvZHVjZSBhIGxvbmctb3B0aW9uIGFyZ3VtZW50IHRoYXQgd2lsbCBiZSBrZXB0IGluIGBhcmd2W11gLgogCitgT1BUX05VTUJFUl9DQUxMQkFDSygmdmFyLCBkZXNjcmlwdGlvbiwgZnVuY19wdHIpYDo6CisJUmVjb2duaXplIG51bWVyaWNhbCBvcHRpb25zIGxpa2UgLTEyMyBhbmQgZmVlZCB0aGUgaW50ZWdlciBhcworCWlmIGl0IHdhcyBhbiBhcmd1bWVudCB0byB0aGUgZnVuY3Rpb24gZ2l2ZW4gYnkgYGZ1bmNfcHRyYC4KKwlUaGUgcmVzdWx0IHdpbGwgYmUgcHV0IGludG8gYHZhcmAuICBUaGVyZSBjYW4gYmUgb25seSBvbmUgc3VjaAorCW9wdGlvbiBkZWZpbml0aW9uLiAgSXQgY2Fubm90IGJlIG5lZ2F0ZWQgYW5kIGl0IHRha2VzIG5vCisJYXJndW1lbnRzLiAgU2hvcnQgb3B0aW9ucyB0aGF0IGhhcHBlbiB0byBiZSBkaWdpdHMgdGFrZQorCXByZWNlZGVuY2Ugb3ZlciBpdC4KKwogCiBUaGUgbGFzdCBlbGVtZW50IG9mIHRoZSBhcnJheSBtdXN0IGJlIGBPUFRfRU5EKClgLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcmVtb3RlLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1yZW1vdGUudHh0CmluZGV4IDA3M2IyMmIuLmM1NGIxN2QgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1yZW1vdGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1yZW1vdGUudHh0CkBAIC0xOCw2ICsxOCwxMCBAQAogCiAJQW4gYXJyYXkgb2YgYWxsIG9mIHRoZSB1cmxfbnIgVVJMcyBjb25maWd1cmVkIGZvciB0aGUgcmVtb3RlCiAKK2BwdXNodXJsYDo6CisKKwlBbiBhcnJheSBvZiBhbGwgb2YgdGhlIHB1c2h1cmxfbnIgcHVzaCBVUkxzIGNvbmZpZ3VyZWQgZm9yIHRoZSByZW1vdGUKKwogYHB1c2hgOjoKIAogCSBBbiBhcnJheSBvZiByZWZzcGVjcyBjb25maWd1cmVkIGZvciBwdXNoaW5nLCB3aXRoCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcnVuLWNvbW1hbmQudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXJ1bi1jb21tYW5kLnR4dAppbmRleCAyZWZlN2E0Li40NDg3NmZhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcnVuLWNvbW1hbmQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1ydW4tY29tbWFuZC50eHQKQEAgLTM1LDE3ICszNSwzNyBAQAogCUNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0aGF0IGVuY2Fwc3VsYXRlIGEgc2VxdWVuY2Ugb2YKIAlzdGFydF9jb21tYW5kKCkgZm9sbG93ZWQgYnkgZmluaXNoX2NvbW1hbmQoKS4gVGhlIGFyZ3VtZW50IGFyZ3YKIAlzcGVjaWZpZXMgdGhlIHByb2dyYW0gYW5kIGl0cyBhcmd1bWVudHMuIFRoZSBhcmd1bWVudCBvcHQgaXMgemVybwotCW9yIG1vcmUgb2YgdGhlIGZsYWdzIGBSVU5fQ09NTUFORF9OT19TVERJTmAsIGBSVU5fR0lUX0NNRGAsIG9yCi0JYFJVTl9DT01NQU5EX1NURE9VVF9UT19TVERFUlJgIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgbWVtYmVycwotCS5ub19zdGRpbiwgLmdpdF9jbWQsIC5zdGRvdXRfdG9fc3RkZXJyIG9mIGBzdHJ1Y3QgY2hpbGRfcHJvY2Vzc2AuCisJb3IgbW9yZSBvZiB0aGUgZmxhZ3MgYFJVTl9DT01NQU5EX05PX1NURElOYCwgYFJVTl9HSVRfQ01EYCwKKwlgUlVOX0NPTU1BTkRfU1RET1VUX1RPX1NUREVSUmAsIG9yIGBSVU5fU0lMRU5UX0VYRUNfRkFJTFVSRWAKKwl0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIG1lbWJlcnMgLm5vX3N0ZGluLCAuZ2l0X2NtZCwKKwkuc3Rkb3V0X3RvX3N0ZGVyciwgLnNpbGVudF9leGVjX2ZhaWx1cmUgb2YgYHN0cnVjdCBjaGlsZF9wcm9jZXNzYC4KIAlUaGUgYXJndW1lbnQgZGlyIGNvcnJlc3BvbmRzIHRoZSBtZW1iZXIgLmRpci4gVGhlIGFyZ3VtZW50IGVudgogCWNvcnJlc3BvbmRzIHRvIHRoZSBtZW1iZXIgLmVudi4KIAorVGhlIGZ1bmN0aW9ucyBhYm92ZSBkbyB0aGUgZm9sbG93aW5nOgorCisuIElmIGEgc3lzdGVtIGNhbGwgZmFpbGVkLCBlcnJubyBpcyBzZXQgYW5kIC0xIGlzIHJldHVybmVkLiBBIGRpYWdub3N0aWMKKyAgaXMgcHJpbnRlZC4KKworLiBJZiB0aGUgcHJvZ3JhbSB3YXMgbm90IGZvdW5kLCB0aGVuIC0xIGlzIHJldHVybmVkIGFuZCBlcnJubyBpcyBzZXQgdG8KKyAgRU5PRU5UOyBhIGRpYWdub3N0aWMgaXMgcHJpbnRlZCBvbmx5IGlmIC5zaWxlbnRfZXhlY19mYWlsdXJlIGlzIDAuCisKKy4gT3RoZXJ3aXNlLCB0aGUgcHJvZ3JhbSBpcyBydW4uIElmIGl0IHRlcm1pbmF0ZXMgcmVndWxhcmx5LCBpdHMgZXhpdAorICBjb2RlIGlzIHJldHVybmVkLiBObyBkaWFnbm9zdGljIGlzIHByaW50ZWQsIGV2ZW4gaWYgdGhlIGV4aXQgY29kZSBpcworICBub24temVyby4KKworLiBJZiB0aGUgcHJvZ3JhbSB0ZXJtaW5hdGVkIGR1ZSB0byBhIHNpZ25hbCwgdGhlbiB0aGUgcmV0dXJuIHZhbHVlIGlzIHRoZQorICBzaWduYWwgbnVtYmVyIC0gMTI4LCBpZS4gaXQgaXMgbmVnYXRpdmUgYW5kIHNvIGluZGljYXRlcyBhbiB1bnVzdWFsCisgIGNvbmRpdGlvbjsgYSBkaWFnbm9zdGljIGlzIHByaW50ZWQuIFRoaXMgcmV0dXJuIHZhbHVlIGNhbiBiZSBwYXNzZWQgdG8KKyAgZXhpdCgyKSwgd2hpY2ggd2lsbCByZXBvcnQgdGhlIHNhbWUgY29kZSB0byB0aGUgcGFyZW50IHByb2Nlc3MgdGhhdCBhCisgIFBPU0lYIHNoZWxsJ3MgJD8gd291bGQgcmVwb3J0IGZvciBhIHByb2dyYW0gdGhhdCBkaWVkIGZyb20gdGhlIHNpZ25hbC4KKworCiBgc3RhcnRfYXN5bmNgOjoKIAogCVJ1biBhIGZ1bmN0aW9uIGFzeW5jaHJvbm91c2x5LiBUYWtlcyBhIHBvaW50ZXIgdG8gYSBgc3RydWN0Ci0JYXN5bmNgIHRoYXQgc3BlY2lmaWVzIHRoZSBkZXRhaWxzIGFuZCByZXR1cm5zIGEgcGlwZSBGRAotCWZyb20gd2hpY2ggdGhlIGNhbGxlciByZWFkcy4gU2VlIGJlbG93IGZvciBkZXRhaWxzLgorCWFzeW5jYCB0aGF0IHNwZWNpZmllcyB0aGUgZGV0YWlscyBhbmQgcmV0dXJucyBhIHNldCBvZiBwaXBlIEZEcworCWZvciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGZ1bmN0aW9uLiBTZWUgYmVsb3cgZm9yIGRldGFpbHMuCiAKIGBmaW5pc2hfYXN5bmNgOjoKIApAQCAtMTE1LDcgKzEzNSw3IEBACiAKIAkuaW46IFRoZSBGRCBtdXN0IGJlIHJlYWRhYmxlOyBpdCBiZWNvbWVzIGNoaWxkJ3Mgc3RkaW4uCiAJLm91dDogVGhlIEZEIG11c3QgYmUgd3JpdGFibGU7IGl0IGJlY29tZXMgY2hpbGQncyBzdGRvdXQuCi0JLmVyciA+IDAgaXMgbm90IHN1cHBvcnRlZC4KKwkuZXJyOiBUaGUgRkQgbXVzdCBiZSB3cml0YWJsZTsgaXQgYmVjb21lcyBjaGlsZCdzIHN0ZGVyci4KIAogICBUaGUgc3BlY2lmaWVkIEZEIGlzIGNsb3NlZCBieSBzdGFydF9jb21tYW5kKCksIGV2ZW4gaWYgaXQgZmFpbHMgdG8KICAgcnVuIHRoZSBzdWItcHJvY2VzcyEKQEAgLTE0Myw2ICsxNjMsMTEgQEAKIFRvIHNwZWNpZnkgYSBuZXcgaW5pdGlhbCB3b3JraW5nIGRpcmVjdG9yeSBmb3IgdGhlIHN1Yi1wcm9jZXNzLAogc3BlY2lmeSBpdCBpbiB0aGUgLmRpciBtZW1iZXIuCiAKK0lmIHRoZSBwcm9ncmFtIGNhbm5vdCBiZSBmb3VuZCwgdGhlIGZ1bmN0aW9ucyByZXR1cm4gLTEgYW5kIHNldAorZXJybm8gdG8gRU5PRU5ULiBOb3JtYWxseSwgYW4gZXJyb3IgbWVzc2FnZSBpcyBwcmludGVkLCBidXQgaWYKKy5zaWxlbnRfZXhlY19mYWlsdXJlIGlzIHNldCB0byAxLCBubyBtZXNzYWdlIGlzIHByaW50ZWQgZm9yIHRoaXMKK3NwZWNpYWwgZXJyb3IgY29uZGl0aW9uLgorCiAKICogYHN0cnVjdCBhc3luY2AKIApAQCAtMTU1LDE3ICsxODAsNDcgQEAKICAgIHN0cnVjdCBhc3luYyB2YXJpYWJsZTsKIDIuIGluaXRpYWxpemVzIC5wcm9jIGFuZCAuZGF0YTsKIDMuIGNhbGxzIHN0YXJ0X2FzeW5jKCk7Ci00LiBwcm9jZXNzZXMgdGhlIGRhdGEgYnkgcmVhZGluZyBmcm9tIHRoZSBmZCBpbiAub3V0OwotNS4gY2xvc2VzIC5vdXQ7Cis0LiBwcm9jZXNzZXMgY29tbXVuaWNhdGVzIHdpdGggcHJvYyB0aHJvdWdoIC5pbiBhbmQgLm91dDsKKzUuIGNsb3NlcyAuaW4gYW5kIC5vdXQ7CiA2LiBjYWxscyBmaW5pc2hfYXN5bmMoKS4KIAorVGhlIG1lbWJlcnMgLmluLCAub3V0IGFyZSB1c2VkIHRvIHByb3ZpZGUgYSBzZXQgb2YgZmQncyBmb3IKK2NvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgY2FsbGVyIGFuZCB0aGUgY2FsbGVlIGFzIGZvbGxvd3M6CisKKy4gU3BlY2lmeSAwIHRvIGhhdmUgbm8gZmlsZSBkZXNjcmlwdG9yIHBhc3NlZC4gIFRoZSBjYWxsZWUgd2lsbAorICByZWNlaXZlIC0xIGluIHRoZSBjb3JyZXNwb25kaW5nIGFyZ3VtZW50LgorCisuIFNwZWNpZnkgPCAwIHRvIGhhdmUgYSBwaXBlIGFsbG9jYXRlZDsgc3RhcnRfYXN5bmMoKSByZXBsYWNlcworICB3aXRoIHRoZSBwaXBlIEZEIGluIHRoZSBmb2xsb3dpbmcgd2F5OgorCisJLmluOiBSZXR1cm5zIHRoZSB3cml0YWJsZSBwaXBlIGVuZCBpbnRvIHdoaWNoIHRoZSBjYWxsZXIKKwl3cml0ZXM7IHRoZSByZWFkYWJsZSBlbmQgb2YgdGhlIHBpcGUgYmVjb21lcyB0aGUgZnVuY3Rpb24ncworCWluIGFyZ3VtZW50LgorCisJLm91dDogUmV0dXJucyB0aGUgcmVhZGFibGUgcGlwZSBlbmQgZnJvbSB3aGljaCB0aGUgY2FsbGVyCisJcmVhZHM7IHRoZSB3cml0YWJsZSBlbmQgb2YgdGhlIHBpcGUgYmVjb21lcyB0aGUgZnVuY3Rpb24ncworCW91dCBhcmd1bWVudC4KKworICBUaGUgY2FsbGVyIG9mIHN0YXJ0X2FzeW5jKCkgbXVzdCBjbG9zZSB0aGUgcmV0dXJuZWQgRkRzIGFmdGVyIGl0CisgIGhhcyBjb21wbGV0ZWQgcmVhZGluZyBmcm9tL3dyaXRpbmcgZnJvbSB0aGVtLgorCisuIFNwZWNpZnkgYSBmaWxlIGRlc2NyaXB0b3IgPiAwIHRvIGJlIHVzZWQgYnkgdGhlIGZ1bmN0aW9uOgorCisJLmluOiBUaGUgRkQgbXVzdCBiZSByZWFkYWJsZTsgaXQgYmVjb21lcyB0aGUgZnVuY3Rpb24ncyBpbi4KKwkub3V0OiBUaGUgRkQgbXVzdCBiZSB3cml0YWJsZTsgaXQgYmVjb21lcyB0aGUgZnVuY3Rpb24ncyBvdXQuCisKKyAgVGhlIHNwZWNpZmllZCBGRCBpcyBjbG9zZWQgYnkgc3RhcnRfYXN5bmMoKSwgZXZlbiBpZiBpdCBmYWlscyB0bworICBydW4gdGhlIGZ1bmN0aW9uLgorCiBUaGUgZnVuY3Rpb24gcG9pbnRlciBpbiAucHJvYyBoYXMgdGhlIGZvbGxvd2luZyBzaWduYXR1cmU6CiAKLQlpbnQgcHJvYyhpbnQgZmQsIHZvaWQgKmRhdGEpOworCWludCBwcm9jKGludCBpbiwgaW50IG91dCwgdm9pZCAqZGF0YSk7CiAKLS4gZmQgc3BlY2lmaWVzIGEgd3JpdGFibGUgZmlsZSBkZXNjcmlwdG9yIHRvIHdoaWNoIHRoZSBmdW5jdGlvbiBtdXN0Ci0gIHdyaXRlIHRoZSBkYXRhIHRoYXQgaXQgcHJvZHVjZXMuIFRoZSBmdW5jdGlvbiAqbXVzdCogY2xvc2UgdGhpcwotICBkZXNjcmlwdG9yIGJlZm9yZSBpdCByZXR1cm5zLgorLiBpbiwgb3V0IHNwZWNpZmllcyBhIHNldCBvZiBmaWxlIGRlc2NyaXB0b3JzIHRvIHdoaWNoIHRoZSBmdW5jdGlvbgorICBtdXN0IHJlYWQvd3JpdGUgdGhlIGRhdGEgdGhhdCBpdCBuZWVkcy9wcm9kdWNlcy4gIFRoZSBmdW5jdGlvbgorICAqbXVzdCogY2xvc2UgdGhlc2UgZGVzY3JpcHRvcnMgYmVmb3JlIGl0IHJldHVybnMuICBBIGRlc2NyaXB0b3IKKyAgbWF5IGJlIC0xIGlmIHRoZSBjYWxsZXIgZGlkIG5vdCBjb25maWd1cmUgYSBkZXNjcmlwdG9yIGZvciB0aGF0CisgIGRpcmVjdGlvbi4KIAogLiBkYXRhIGlzIHRoZSB2YWx1ZSB0aGF0IHRoZSBjYWxsZXIgaGFzIHNwZWNpZmllZCBpbiB0aGUgLmRhdGEgbWVtYmVyCiAgIG9mIHN0cnVjdCBhc3luYy4KQEAgLTE4MCw4ICsyMzUsOCBAQAogVU5JWCwgYnV0IGJ5IGEgdGhyZWFkIGluIHRoZSBzYW1lIGFkZHJlc3Mgc3BhY2Ugb24gV2luZG93czoKIAogLiBJdCBjYW5ub3QgY2hhbmdlIHRoZSBwcm9ncmFtJ3Mgc3RhdGUgKGdsb2JhbCB2YXJpYWJsZXMsIGVudmlyb25tZW50LAotICBldGMuKSBpbiBhIHdheSB0aGF0IHRoZSBjYWxsZXIgbm90aWNlczsgaW4gb3RoZXIgd29yZHMsIC5vdXQgaXMgdGhlCi0gIG9ubHkgY29tbXVuaWNhdGlvbiBjaGFubmVsIHRvIHRoZSBjYWxsZXIuCisgIGV0Yy4pIGluIGEgd2F5IHRoYXQgdGhlIGNhbGxlciBub3RpY2VzOyBpbiBvdGhlciB3b3JkcywgLmluIGFuZCAub3V0CisgIGFyZSB0aGUgb25seSBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIHRvIHRoZSBjYWxsZXIuCiAKIC4gSXQgbXVzdCBub3QgY2hhbmdlIHRoZSBwcm9ncmFtJ3Mgc3RhdGUgdGhhdCB0aGUgY2FsbGVyIG9mIHRoZQogICBmYWNpbGl0eSBhbHNvIHVzZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktc3RyYnVmLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1zdHJidWYudHh0CmluZGV4IDc0MzgxNDkuLmFmZTI3NTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1zdHJidWYudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1zdHJidWYudHh0CkBAIC0xMiw3ICsxMiw3IEBACiAKIHN0cmJ1ZnMgaGFzIHNvbWUgaW52YXJpYW50cyB0aGF0IGFyZSB2ZXJ5IGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQ6CiAKLS4gVGhlIGBidWZgIG1lbWJlciBpcyBuZXZlciBOVUxMLCBzbyB5b3UgaXQgY2FuIGJlIHVzZWQgaW4gYW55IHVzdWFsIEMKKy4gVGhlIGBidWZgIG1lbWJlciBpcyBuZXZlciBOVUxMLCBzbyBpdCBjYW4gYmUgdXNlZCBpbiBhbnkgdXN1YWwgQwogc3RyaW5nIG9wZXJhdGlvbnMgc2FmZWx5LiBzdHJidWYncyBfaGF2ZV8gdG8gYmUgaW5pdGlhbGl6ZWQgZWl0aGVyIGJ5CiBgc3RyYnVmX2luaXQoKWAgb3IgYnkgYD0gU1RSQlVGX0lOSVRgIGJlZm9yZSB0aGUgaW52YXJpYW50cywgdGhvdWdoLgogKwpAQCAtNTUsNyArNTUsNyBAQAogCiAqIGBzdHJ1Y3Qgc3RyYnVmYAogCi1UaGlzIGlzIHN0cmluZyBidWZmZXIgc3RydWN0dXJlLiBUaGUgYGxlbmAgbWVtYmVyIGNhbiBiZSB1c2VkIHRvCitUaGlzIGlzIHRoZSBzdHJpbmcgYnVmZmVyIHN0cnVjdHVyZS4gVGhlIGBsZW5gIG1lbWJlciBjYW4gYmUgdXNlZCB0bwogZGV0ZXJtaW5lIHRoZSBjdXJyZW50IGxlbmd0aCBvZiB0aGUgc3RyaW5nLCBhbmQgYGJ1ZmAgbWVtYmVyIHByb3ZpZGVzIGFjY2VzcyB0bwogdGhlIHN0cmluZyBpdHNlbGYuCiAKQEAgLTE5OSw2ICsxOTksMTAgQEAKIHRoZSBsZW5ndGggb2YgdGhlIHBsYWNlaG9sZGVyIHJlY29nbml6ZWQgYW5kIGBzdHJidWZfZXhwYW5kKClgIHNraXBzCiBvdmVyIGl0LgogKworVGhlIGZvcm1hdCBgJSVgIGlzIGF1dG9tYXRpY2FsbHkgZXhwYW5kZWQgdG8gYSBzaW5nbGUgYCVgIGFzIGEgcXVvdGluZworbWVjaGFuaXNtOyBjYWxsZXJzIGRvIG5vdCBuZWVkIHRvIGhhbmRsZSB0aGUgYCVgIHBsYWNlaG9sZGVyIHRoZW1zZWx2ZXMsCithbmQgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGludm9rZWQgZm9yIHRoaXMgcGxhY2Vob2xkZXIuCisrCiBBbGwgb3RoZXIgY2hhcmFjdGVycyAobm9uLXBlcmNlbnQgYW5kIG5vdCBza2lwcGVkIG9uZXMpIGFyZSBjb3BpZWQKIHZlcmJhdGltIHRvIHRoZSBzdHJidWYuICBJZiB0aGUgY2FsbGJhY2sgcmV0dXJuZWQgemVybywgbWVhbmluZyB0aGF0IHRoZQogcGxhY2Vob2xkZXIgaXMgdW5rbm93biwgdGhlbiB0aGUgcGVyY2VudCBzaWduIGlzIGNvcGllZCwgdG9vLgpAQCAtMjE0LDYgKzIxOCwxMyBAQAogCXBsYWNlaG9sZGVyIGFuZCByZXBsYWNlbWVudCBzdHJpbmcuICBUaGUgYXJyYXkgbmVlZHMgdG8gYmUKIAl0ZXJtaW5hdGVkIGJ5IGFuIGVudHJ5IHdpdGggcGxhY2Vob2xkZXIgc2V0IHRvIE5VTEwuCiAKK2BzdHJidWZfYWRkYnVmX3BlcmNlbnRxdW90ZWA6OgorCisJQXBwZW5kIHRoZSBjb250ZW50cyBvZiBvbmUgc3RyYnVmIHRvIGFub3RoZXIsIHF1b3RpbmcgYW55CisJcGVyY2VudCBzaWducyAoIiUiKSBpbnRvIGRvdWJsZS1wZXJjZW50cyAoIiUlIikgaW4gdGhlCisJZGVzdGluYXRpb24uIFRoaXMgaXMgdXNlZnVsIGZvciBsaXRlcmFsIGRhdGEgdG8gYmUgZmVkIHRvIGVpdGhlcgorCXN0cmJ1Zl9leHBhbmQgb3IgdG8gdGhlICpwcmludGYgZmFtaWx5IG9mIGZ1bmN0aW9ucy4KKwogYHN0cmJ1Zl9hZGRmYDo6CiAKIAlBZGQgYSBmb3JtYXR0ZWQgc3RyaW5nIHRvIHRoZSBidWZmZXIuCkBAIC0yNTMsMyArMjY0LDkgQEAKIAljb21tZW50cyBhcmUgY29uc2lkZXJlZCBjb250ZW50cyB0byBiZSByZW1vdmVkIG9yIG5vdC4KIAogYGxhdW5jaF9lZGl0b3JgOjoKKworCUxhdW5jaCB0aGUgdXNlciBwcmVmZXJyZWQgZWRpdG9yIHRvIGVkaXQgYSBmaWxlIGFuZCBmaWxsIHRoZSBidWZmZXIKKwl3aXRoIHRoZSBmaWxlJ3MgY29udGVudHMgdXBvbiB0aGUgdXNlciBjb21wbGV0aW5nIHRoZWlyIGVkaXRpbmcuIFRoZQorCXRoaXJkIGFyZ3VtZW50IGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgZW52aXJvbm1lbnQgd2hpY2ggdGhlIGVkaXRvciBpcworCXJ1biBpbi4gSWYgdGhlIGJ1ZmZlciBpcyBOVUxMIHRoZSBlZGl0b3IgaXMgbGF1bmNoZWQgYXMgdXN1YWwgYnV0IHRoZQorCWZpbGUncyBjb250ZW50cyBhcmUgbm90IHJlYWQgaW50byB0aGUgYnVmZmVyIHVwb24gY29tcGxldGlvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS10cmVlLXdhbGtpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXRyZWUtd2Fsa2luZy50eHQKaW5kZXggZTNkZGY5MS4uNTViNzI4NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXRyZWUtd2Fsa2luZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXRyZWUtd2Fsa2luZy50eHQKQEAgLTEsMTIgKzEsMTQ1IEBACiB0cmVlIHdhbGtpbmcgQVBJCiA9PT09PT09PT09PT09PT09CiAKLVRhbGsgYWJvdXQgPHRyZWUtd2Fsay5oPiwgdGhpbmdzIGxpa2UKK1RoZSB0cmVlIHdhbGtpbmcgQVBJIGlzIHVzZWQgdG8gdHJhdmVyc2UgYW5kIGluc3BlY3QgdHJlZXMuCiAKLSogc3RydWN0IHRyZWVfZGVzYwotKiBpbml0X3RyZWVfZGVzYwotKiB0cmVlX2VudHJ5X2V4dHJhY3QKLSogdXBkYXRlX3RyZWVfZW50cnkKLSogZ2V0X3RyZWVfZW50cnkKK0RhdGEgU3RydWN0dXJlcworLS0tLS0tLS0tLS0tLS0tCiAKLShKQywgTGludXMpCitgc3RydWN0IG5hbWVfZW50cnlgOjoKKworCUFuIGVudHJ5IGluIGEgdHJlZS4gRWFjaCBlbnRyeSBoYXMgYSBzaGExIGlkZW50aWZpZXIsIHBhdGhuYW1lLCBhbmQKKwltb2RlLgorCitgc3RydWN0IHRyZWVfZGVzY2A6OgorCisJQSBzZW1pLW9wYXF1ZSBkYXRhIHN0cnVjdHVyZSB1c2VkIHRvIG1haW50YWluIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZQorCXdhbGsuCisrCisqIGBidWZmZXJgIGlzIGEgcG9pbnRlciBpbnRvIHRoZSBtZW1vcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRyZWUuIEl0IGFsd2F5cworcG9pbnRzIGF0IHRoZSBjdXJyZW50IGVudHJ5IGJlaW5nIHZpc2l0ZWQuCisKKyogYHNpemVgIGNvdW50cyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGxlZnQgaW4gdGhlIGBidWZmZXJgLgorCisqIGBlbnRyeWAgcG9pbnRzIHRvIHRoZSBjdXJyZW50IGVudHJ5IGJlaW5nIHZpc2l0ZWQuCisKK2BzdHJ1Y3QgdHJhdmVyc2VfaW5mb2A6OgorCisJQSBzdHJ1Y3R1cmUgdXNlZCB0byBtYWludGFpbiB0aGUgc3RhdGUgb2YgYSB0cmF2ZXJzYWwuCisrCisqIGBwcmV2YCBwb2ludHMgdG8gdGhlIHRyYXZlcnNlX2luZm8gd2hpY2ggd2FzIHVzZWQgdG8gZGVzY2VuZCBpbnRvIHRoZQorY3VycmVudCB0cmVlLiBJZiB0aGlzIGlzIHRoZSB0b3AtbGV2ZWwgdHJlZSBgcHJldmAgd2lsbCBwb2ludCB0bworYSBkdW1teSB0cmF2ZXJzZV9pbmZvLgorCisqIGBuYW1lYCBpcyB0aGUgZW50cnkgZm9yIHRoZSBjdXJyZW50IHRyZWUgKGlmIHRoZSB0cmVlIGlzIGEgc3VidHJlZSkuCisKKyogYHBhdGhsZW5gIGlzIHRoZSBsZW5ndGggb2YgdGhlIGZ1bGwgcGF0aCBmb3IgdGhlIGN1cnJlbnQgdHJlZS4KKworKiBgY29uZmxpY3RzYCBjYW4gYmUgdXNlZCBieSBjYWxsYmFja3MgdG8gbWFpbnRhaW4gZGlyZWN0b3J5LWZpbGUgY29uZmxpY3RzLgorCisqIGBmbmAgaXMgYSBjYWxsYmFjayBjYWxsZWQgZm9yIGVhY2ggZW50cnkgaW4gdGhlIHRyZWUuIFNlZSBUcmF2ZXJzaW5nIGZvciBtb3JlCitpbmZvcm1hdGlvbi4KKworKiBgZGF0YWAgY2FuIGJlIGFueXRoaW5nIHRoZSBgZm5gIGNhbGxiYWNrIHdvdWxkIHdhbnQgdG8gdXNlLgorCitJbml0aWFsaXppbmcKKy0tLS0tLS0tLS0tLQorCitgaW5pdF90cmVlX2Rlc2NgOjoKKworCUluaXRpYWxpemUgYSBgdHJlZV9kZXNjYCBhbmQgZGVjb2RlIGl0cyBmaXJzdCBlbnRyeS4gVGhlIGJ1ZmZlciBhbmQKKwlzaXplIHBhcmFtZXRlcnMgYXJlIGFzc3VtZWQgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIGJ1ZmZlciBhbmQgc2l6ZQorCW1lbWJlcnMgb2YgYHN0cnVjdCB0cmVlYC4KKworYGZpbGxfdHJlZV9kZXNjcmlwdG9yYDo6CisKKwlJbml0aWFsaXplIGEgYHRyZWVfZGVzY2AgYW5kIGRlY29kZSBpdHMgZmlyc3QgZW50cnkgZ2l2ZW4gdGhlIHNoYTEgb2YKKwlhIHRyZWUuIFJldHVybnMgdGhlIGBidWZmZXJgIG1lbWJlciBpZiB0aGUgc2hhMSBpcyBhIHZhbGlkIHRyZWUKKwlpZGVudGlmaWVyIGFuZCBOVUxMIG90aGVyd2lzZS4KKworYHNldHVwX3RyYXZlcnNlX2luZm9gOjoKKworCUluaXRpYWxpemUgYSBgdHJhdmVyc2VfaW5mb2AgZ2l2ZW4gdGhlIHBhdGhuYW1lIG9mIHRoZSB0cmVlIHRvIHN0YXJ0CisJdHJhdmVyc2luZyBmcm9tLiBUaGUgYGJhc2VgIGFyZ3VtZW50IGlzIGFzc3VtZWQgdG8gYmUgdGhlIGBwYXRoYAorCW1lbWJlciBvZiB0aGUgYG5hbWVfZW50cnlgIGJlaW5nIHJlY3Vyc2VkIGludG8gdW5sZXNzIHRoZSB0cmVlIGlzIGEKKwl0b3AtbGV2ZWwgdHJlZSBpbiB3aGljaCBjYXNlIHRoZSBlbXB0eSBzdHJpbmcgKCIiKSBpcyB1c2VkLgorCitXYWxraW5nCistLS0tLS0tCisKK2B0cmVlX2VudHJ5YDo6CisKKwlWaXNpdCB0aGUgbmV4dCBlbnRyeSBpbiBhIHRyZWUuIFJldHVybnMgMSB3aGVuIHRoZXJlIGFyZSBtb3JlIGVudHJpZXMKKwlsZWZ0IHRvIHZpc2l0IGFuZCAwIHdoZW4gYWxsIGVudHJpZXMgaGF2ZSBiZWVuIHZpc2l0ZWQuIFRoaXMgaXMKKwljb21tb25seSB1c2VkIGluIHRoZSB0ZXN0IG9mIGEgd2hpbGUgbG9vcC4KKworYHRyZWVfZW50cnlfbGVuYDo6CisKKwlDYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiBhIHRyZWUgZW50cnkncyBwYXRobmFtZS4gVGhpcyB1dGlsaXplcyB0aGUKKwltZW1vcnkgc3RydWN0dXJlIG9mIGEgdHJlZSBlbnRyeSB0byBhdm9pZCB0aGUgb3ZlcmhlYWQgb2YgdXNpbmcgYQorCWdlbmVyaWMgc3RybGVuKCkuCisKK2B1cGRhdGVfdHJlZV9lbnRyeWA6OgorCisJV2FsayB0byB0aGUgbmV4dCBlbnRyeSBpbiBhIHRyZWUuIFRoaXMgaXMgY29tbW9ubHkgdXNlZCBpbiBjb25qdW5jdGlvbgorCXdpdGggYHRyZWVfZW50cnlfZXh0cmFjdGAgdG8gaW5zcGVjdCB0aGUgY3VycmVudCBlbnRyeS4KKworYHRyZWVfZW50cnlfZXh0cmFjdGA6OgorCisJRGVjb2RlIHRoZSBlbnRyeSBjdXJyZW50bHkgYmVpbmcgdmlzaXRlZCAodGhlIG9uZSBwb2ludGVkIHRvIGJ5CisJYHRyZWVfZGVzYydzYCBgZW50cnlgIG1lbWJlcikgYW5kIHJldHVybiB0aGUgc2hhMSBvZiB0aGUgZW50cnkuIFRoZQorCWBwYXRocGAgYW5kIGBtb2RlcGAgYXJndW1lbnRzIGFyZSBzZXQgdG8gdGhlIGVudHJ5J3MgcGF0aG5hbWUgYW5kIG1vZGUKKwlyZXNwZWN0aXZlbHkuCisKK2BnZXRfdHJlZV9lbnRyeWA6OgorCisJRmluZCBhbiBlbnRyeSBpbiBhIHRyZWUgZ2l2ZW4gYSBwYXRobmFtZSBhbmQgdGhlIHNoYTEgb2YgYSB0cmVlIHRvCisJc2VhcmNoLiBSZXR1cm5zIDAgaWYgdGhlIGVudHJ5IGlzIGZvdW5kIGFuZCAtMSBvdGhlcndpc2UuIFRoZSB0aGlyZAorCWFuZCBmb3VydGggcGFyYW1ldGVycyBhcmUgc2V0IHRvIHRoZSBlbnRyeSdzIHNoYTEgYW5kIG1vZGUKKwlyZXNwZWN0aXZlbHkuCisKK1RyYXZlcnNpbmcKKy0tLS0tLS0tLS0KKworYHRyYXZlcnNlX3RyZWVzYDo6CisKKwlUcmF2ZXJzZSBgbmAgbnVtYmVyIG9mIHRyZWVzIGluIHBhcmFsbGVsLiBUaGUgYGZuYCBjYWxsYmFjayBtZW1iZXIgb2YKKwlgdHJhdmVyc2VfaW5mb2AgaXMgY2FsbGVkIG9uY2UgZm9yIGVhY2ggdHJlZSBlbnRyeS4KKworYHRyYXZlcnNlX2NhbGxiYWNrX3RgOjoKKwlUaGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgdHJhdmVyc2UgY2FsbGJhY2sgYXJlIGFzIGZvbGxvd3M6CisrCisqIGBuYCBjb3VudHMgdGhlIG51bWJlciBvZiB0cmVlcyBiZWluZyB0cmF2ZXJzZWQuCisKKyogYG1hc2tgIGhhcyBpdHMgbnRoIGJpdCBzZXQgaWYgc29tZXRoaW5nIGV4aXN0cyBpbiB0aGUgbnRoIGVudHJ5LgorCisqIGBkaXJtYXNrYCBoYXMgaXRzIG50aCBiaXQgc2V0IGlmIHRoZSBudGggdHJlZSdzIGVudHJ5IGlzIGEgZGlyZWN0b3J5LgorCisqIGBlbnRyeWAgaXMgYW4gYXJyYXkgb2Ygc2l6ZSBgbmAgd2hlcmUgdGhlIG50aCBlbnRyeSBpcyBmcm9tIHRoZSBudGggdHJlZS4KKworKiBgaW5mb2AgbWFpbnRhaW5zIHRoZSBzdGF0ZSBvZiB0aGUgdHJhdmVyc2FsLgorCisrCitSZXR1cm5pbmcgYSBuZWdhdGl2ZSB2YWx1ZSB3aWxsIHRlcm1pbmF0ZSB0aGUgdHJhdmVyc2FsLiBPdGhlcndpc2UgdGhlCityZXR1cm4gdmFsdWUgaXMgdHJlYXRlZCBhcyBhbiB1cGRhdGUgbWFzay4gSWYgdGhlIG50aCBiaXQgaXMgc2V0IHRoZSBudGggdHJlZQord2lsbCBiZSB1cGRhdGVkIGFuZCBpZiB0aGUgYml0IGlzIG5vdCBzZXQgdGhlIG50aCB0cmVlIGVudHJ5IHdpbGwgYmUgdGhlCitzYW1lIGluIHRoZSBuZXh0IGNhbGxiYWNrIGludm9jYXRpb24uCisKK2BtYWtlX3RyYXZlcnNlX3BhdGhgOjoKKworCUdlbmVyYXRlIHRoZSBmdWxsIHBhdGhuYW1lIG9mIGEgdHJlZSBlbnRyeSBiYXNlZCBmcm9tIHRoZSByb290IG9mIHRoZQorCXRyYXZlcnNhbC4gRm9yIGV4YW1wbGUsIGlmIHRoZSB0cmF2ZXJzYWwgaGFzIHJlY3Vyc2VkIGludG8gYW5vdGhlcgorCXRyZWUgbmFtZWQgImJhciIgdGhlIHBhdGhuYW1lIG9mIGFuIGVudHJ5ICJiYXoiIGluIHRoZSAiYmFyIgorCXRyZWUgd291bGQgYmUgImJhci9iYXoiLgorCitgdHJhdmVyc2VfcGF0aF9sZW5gOjoKKworCUNhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIGEgcGF0aG5hbWUgcmV0dXJuZWQgYnkgYG1ha2VfdHJhdmVyc2VfcGF0aGAuCisJVGhpcyB1dGlsaXplcyB0aGUgbWVtb3J5IHN0cnVjdHVyZSBvZiBhIHRyZWUgZW50cnkgdG8gYXZvaWQgdGhlCisJb3ZlcmhlYWQgb2YgdXNpbmcgYSBnZW5lcmljIHN0cmxlbigpLgorCitBdXRob3JzCistLS0tLS0tCisKK1dyaXR0ZW4gYnkgSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPiBhbmQgTGludXMgVG9ydmFsZHMKKzx0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhY2stcHJvdG9jb2wudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFjay1wcm90b2NvbC50eHQKaW5kZXggOWNkNDhiNC4uOWE1Y2RhZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFjay1wcm90b2NvbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFjay1wcm90b2NvbC50eHQKQEAgLTEsNDEgKzEsNDk0IEBACi1QYWNrIHRyYW5zZmVyIHByb3RvY29scwotPT09PT09PT09PT09PT09PT09PT09PT0KK1BhY2tmaWxlIHRyYW5zZmVyIHByb3RvY29scworPT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVRoZXJlIGFyZSB0d28gUGFjayBwdXNoLXB1bGwgcHJvdG9jb2xzLgorR2l0IHN1cHBvcnRzIHRyYW5zZmVycmluZyBkYXRhIGluIHBhY2tmaWxlcyBvdmVyIHRoZSBzc2g6Ly8sIGdpdDovLyBhbmQKK2ZpbGU6Ly8gdHJhbnNwb3J0cy4gIFRoZXJlIGV4aXN0IHR3byBzZXRzIG9mIHByb3RvY29scywgb25lIGZvciBwdXNoaW5nCitkYXRhIGZyb20gYSBjbGllbnQgdG8gYSBzZXJ2ZXIgYW5kIGFub3RoZXIgZm9yIGZldGNoaW5nIGRhdGEgZnJvbSBhCitzZXJ2ZXIgdG8gYSBjbGllbnQuICBBbGwgdGhyZWUgdHJhbnNwb3J0cyAoc3NoLCBnaXQsIGZpbGUpIHVzZSB0aGUgc2FtZQorcHJvdG9jb2wgdG8gdHJhbnNmZXIgZGF0YS4KIAotdXBsb2FkLXBhY2sgKFMpIHwgZmV0Y2gvY2xvbmUtcGFjayAoQykgcHJvdG9jb2w6CitUaGUgcHJvY2Vzc2VzIGludm9rZWQgaW4gdGhlIGNhbm9uaWNhbCBHaXQgaW1wbGVtZW50YXRpb24gYXJlICd1cGxvYWQtcGFjaycKK29uIHRoZSBzZXJ2ZXIgc2lkZSBhbmQgJ2ZldGNoLXBhY2snIG9uIHRoZSBjbGllbnQgc2lkZSBmb3IgZmV0Y2hpbmcgZGF0YTsKK3RoZW4gJ3JlY2VpdmUtcGFjaycgb24gdGhlIHNlcnZlciBhbmQgJ3NlbmQtcGFjaycgb24gdGhlIGNsaWVudCBmb3IgcHVzaGluZworZGF0YS4gIFRoZSBwcm90b2NvbCBmdW5jdGlvbnMgdG8gaGF2ZSBhIHNlcnZlciB0ZWxsIGEgY2xpZW50IHdoYXQgaXMKK2N1cnJlbnRseSBvbiB0aGUgc2VydmVyLCB0aGVuIGZvciB0aGUgdHdvIHRvIG5lZ290aWF0ZSB0aGUgc21hbGxlc3QgYW1vdW50CitvZiBkYXRhIHRvIHNlbmQgaW4gb3JkZXIgdG8gZnVsbHkgdXBkYXRlIG9uZSBvciB0aGUgb3RoZXIuCiAKLQkjIFRlbGwgdGhlIHB1bGxlciB3aGF0IGNvbW1pdHMgd2UgaGF2ZSBhbmQgd2hhdCB0aGVpciBuYW1lcyBhcmUKLQlTOiBTSEExIG5hbWUKLQlTOiAuLi4KLQlTOiBTSEExIG5hbWUKLQlTOiAjIGZsdXNoIC0tIGl0J3MgeW91ciB0dXJuCi0JIyBUZWxsIHRoZSBwdXNoZXIgd2hhdCBjb21taXRzIHdlIHdhbnQsIGFuZCB3aGF0IHdlIGhhdmUKLQlDOiB3YW50IG5hbWUKLQlDOiAuLgotCUM6IHdhbnQgbmFtZQotCUM6IGhhdmUgU0hBMQotCUM6IGhhdmUgU0hBMQotCUM6IC4uLgotCUM6ICMgZmx1c2ggLS0gb2NjYXNpb25hbGx5IGFzayAiaGFkIGVub3VnaD8iCi0JUzogTkFLCi0JQzogaGF2ZSBTSEExCi0JQzogLi4uCi0JQzogaGF2ZSBTSEExCi0JUzogQUNLCi0JQzogZG9uZQotCVM6IFhYWFhYWFggLS0gcGFja2ZpbGUgY29udGVudHMuCitUcmFuc3BvcnRzCistLS0tLS0tLS0tCitUaGVyZSBhcmUgdGhyZWUgdHJhbnNwb3J0cyBvdmVyIHdoaWNoIHRoZSBwYWNrZmlsZSBwcm90b2NvbCBpcworaW5pdGlhdGVkLiAgVGhlIEdpdCB0cmFuc3BvcnQgaXMgYSBzaW1wbGUsIHVuYXV0aGVudGljYXRlZCBzZXJ2ZXIgdGhhdAordGFrZXMgdGhlIGNvbW1hbmQgKGFsbW9zdCBhbHdheXMgJ3VwbG9hZC1wYWNrJywgdGhvdWdoIEdpdAorc2VydmVycyBjYW4gYmUgY29uZmlndXJlZCB0byBiZSBnbG9iYWxseSB3cml0YWJsZSwgaW4gd2hpY2ggJ3JlY2VpdmUtCitwYWNrJyBpbml0aWF0aW9uIGlzIGFsc28gYWxsb3dlZCkgd2l0aCB3aGljaCB0aGUgY2xpZW50IHdpc2hlcyB0bworY29tbXVuaWNhdGUgYW5kIGV4ZWN1dGVzIGl0IGFuZCBjb25uZWN0cyBpdCB0byB0aGUgcmVxdWVzdGluZworcHJvY2Vzcy4KIAotc2VuZC1wYWNrIHwgcmVjZWl2ZS1wYWNrIHByb3RvY29sLgorSW4gdGhlIFNTSCB0cmFuc3BvcnQsIHRoZSBjbGllbnQganVzdCBydW5zIHRoZSAndXBsb2FkLXBhY2snCitvciAncmVjZWl2ZS1wYWNrJyBwcm9jZXNzIG9uIHRoZSBzZXJ2ZXIgb3ZlciB0aGUgU1NIIHByb3RvY29sIGFuZCB0aGVuCitjb21tdW5pY2F0ZXMgd2l0aCB0aGF0IGludm9rZWQgcHJvY2VzcyBvdmVyIHRoZSBTU0ggY29ubmVjdGlvbi4KIAotCSMgVGVsbCB0aGUgcHVzaGVyIHdoYXQgY29tbWl0cyB3ZSBoYXZlIGFuZCB3aGF0IHRoZWlyIG5hbWVzIGFyZQotCUM6IFNIQTEgbmFtZQotCUM6IC4uLgotCUM6IFNIQTEgbmFtZQotCUM6ICMgZmx1c2ggLS0gaXQncyB5b3VyIHR1cm4KLQkjIFRlbGwgdGhlIHB1bGxlciB3aGF0IHRoZSBwdXNoZXIgaGFzCi0JUzogb2xkLVNIQTEgbmV3LVNIQTEgbmFtZQotCVM6IG9sZC1TSEExIG5ldy1TSEExIG5hbWUKLQlTOiAuLi4KLQlTOiAjIGZsdXNoIC0tIGRvbmUgd2l0aCB0aGUgbGlzdAotCVM6IFhYWFhYWFggLS0tIHBhY2tmaWxlIGNvbnRlbnRzLgorVGhlIGZpbGU6Ly8gdHJhbnNwb3J0IHJ1bnMgdGhlICd1cGxvYWQtcGFjaycgb3IgJ3JlY2VpdmUtcGFjaycKK3Byb2Nlc3MgbG9jYWxseSBhbmQgY29tbXVuaWNhdGVzIHdpdGggaXQgb3ZlciBhIHBpcGUuCisKK0dpdCBUcmFuc3BvcnQKKy0tLS0tLS0tLS0tLS0KKworVGhlIEdpdCB0cmFuc3BvcnQgc3RhcnRzIG9mZiBieSBzZW5kaW5nIHRoZSBjb21tYW5kIGFuZCByZXBvc2l0b3J5CitvbiB0aGUgd2lyZSB1c2luZyB0aGUgcGt0LWxpbmUgZm9ybWF0LCBmb2xsb3dlZCBieSBhIE5VTCBieXRlIGFuZCBhCitob3N0bmFtZSBwYXJhbWF0ZXIsIHRlcm1pbmF0ZWQgYnkgYSBOVUwgYnl0ZS4KKworICAgMDAzMmdpdC11cGxvYWQtcGFjayAvcHJvamVjdC5naXRcMGhvc3Q9bXlzZXJ2ZXIuY29tXDAKKworLS0KKyAgIGdpdC1wcm90by1yZXF1ZXN0ID0gcmVxdWVzdC1jb21tYW5kIFNQIHBhdGhuYW1lIE5VTCBbIGhvc3QtcGFyYW1ldGVyIE5VTCBdCisgICByZXF1ZXN0LWNvbW1hbmQgICA9ICJnaXQtdXBsb2FkLXBhY2siIC8gImdpdC1yZWNlaXZlLXBhY2siIC8KKwkJICAgICAgICJnaXQtdXBsb2FkLWFyY2hpdmUiICAgOyBjYXNlIHNlbnNpdGl2ZQorICAgcGF0aG5hbWUgICAgICAgICAgPSAqKCAleDAxLWZmICkgOyBleGNsdWRlIE5VTAorICAgaG9zdC1wYXJhbWV0ZXIgICAgPSAiaG9zdD0iIGhvc3RuYW1lIFsgIjoiIHBvcnQgXQorLS0KKworT25seSBob3N0LXBhcmFtZXRlciBpcyBhbGxvd2VkIGluIHRoZSBnaXQtcHJvdG8tcmVxdWVzdC4gQ2xpZW50cworTVVTVCBOT1QgYXR0ZW1wdCB0byBzZW5kIGFkZGl0aW9uYWwgcGFyYW1ldGVycy4gSXQgaXMgdXNlZCBmb3IgdGhlCitnaXQtZGFlbW9uIG5hbWUgYmFzZWQgdmlydHVhbCBob3N0aW5nLiAgU2VlIC0taW50ZXJwb2xhdGVkLXBhdGgKK29wdGlvbiB0byBnaXQgZGFlbW9uLCB3aXRoIHRoZSAlSC8lQ0ggZm9ybWF0IGNoYXJhY3RlcnMuCisKK0Jhc2ljYWxseSB3aGF0IHRoZSBHaXQgY2xpZW50IGlzIGRvaW5nIHRvIGNvbm5lY3QgdG8gYW4gJ3VwbG9hZC1wYWNrJworcHJvY2VzcyBvbiB0aGUgc2VydmVyIHNpZGUgb3ZlciB0aGUgR2l0IHByb3RvY29sIGlzIHRoaXM6CisKKyAgICQgZWNobyAtZSAtbiBcCisgICAgICIwMDM5Z2l0LXVwbG9hZC1wYWNrIC9zY2hhY29uL2dpdGJvb2suZ2l0XDBob3N0PWV4YW1wbGUuY29tXDAiIHwKKyAgICAgbmMgLXYgZXhhbXBsZS5jb20gOTQxOAorCisKK1NTSCBUcmFuc3BvcnQKKy0tLS0tLS0tLS0tLS0KKworSW5pdGlhdGluZyB0aGUgdXBsb2FkLXBhY2sgb3IgcmVjZWl2ZS1wYWNrIHByb2Nlc3NlcyBvdmVyIFNTSCBpcworZXhlY3V0aW5nIHRoZSBiaW5hcnkgb24gdGhlIHNlcnZlciB2aWEgU1NIIHJlbW90ZSBleGVjdXRpb24uCitJdCBpcyBiYXNpY2FsbHkgZXF1aXZhbGVudCB0byBydW5uaW5nIHRoaXM6CisKKyAgICQgc3NoIGdpdC5leGFtcGxlLmNvbSAiZ2l0LXVwbG9hZC1wYWNrICcvcHJvamVjdC5naXQnIgorCitGb3IgYSBzZXJ2ZXIgdG8gc3VwcG9ydCBHaXQgcHVzaGluZyBhbmQgcHVsbGluZyBmb3IgYSBnaXZlbiB1c2VyIG92ZXIKK1NTSCwgdGhhdCB1c2VyIG5lZWRzIHRvIGJlIGFibGUgdG8gZXhlY3V0ZSBvbmUgb3IgYm90aCBvZiB0aG9zZQorY29tbWFuZHMgdmlhIHRoZSBTU0ggc2hlbGwgdGhhdCB0aGV5IGFyZSBwcm92aWRlZCBvbiBsb2dpbi4gIE9uIHNvbWUKK3N5c3RlbXMsIHRoYXQgc2hlbGwgYWNjZXNzIGlzIGxpbWl0ZWQgdG8gb25seSBiZWluZyBhYmxlIHRvIHJ1biB0aG9zZQordHdvIGNvbW1hbmRzLCBvciBldmVuIGp1c3Qgb25lIG9mIHRoZW0uCisKK0luIGFuIHNzaDovLyBmb3JtYXQgVVJJLCBpdCdzIGFic29sdXRlIGluIHRoZSBVUkksIHNvIHRoZSAnLycgYWZ0ZXIKK3RoZSBob3N0IG5hbWUgKG9yIHBvcnQgbnVtYmVyKSBpcyBzZW50IGFzIGFuIGFyZ3VtZW50LCB3aGljaCBpcyB0aGVuCityZWFkIGJ5IHRoZSByZW1vdGUgZ2l0LXVwbG9hZC1wYWNrIGV4YWN0bHkgYXMgaXMsIHNvIGl0J3MgZWZmZWN0aXZlbHkKK2FuIGFic29sdXRlIHBhdGggaW4gdGhlIHJlbW90ZSBmaWxlc3lzdGVtLgorCisgICAgICAgZ2l0IGNsb25lIHNzaDovL3VzZXJAZXhhbXBsZS5jb20vcHJvamVjdC5naXQKKwkJICAgIHwKKwkJICAgIHYKKyAgICBzc2ggdXNlckBleGFtcGxlLmNvbSAiZ2l0LXVwbG9hZC1wYWNrICcvcHJvamVjdC5naXQnIgorCitJbiBhICJ1c2VyQGhvc3Q6cGF0aCIgZm9ybWF0IFVSSSwgaXRzIHJlbGF0aXZlIHRvIHRoZSB1c2VyJ3MgaG9tZQorZGlyZWN0b3J5LCBiZWNhdXNlIHRoZSBHaXQgY2xpZW50IHdpbGwgcnVuOgorCisgICAgIGdpdCBjbG9uZSB1c2VyQGV4YW1wbGUuY29tOnByb2plY3QuZ2l0CisJCSAgICB8CisJCSAgICB2CisgIHNzaCB1c2VyQGV4YW1wbGUuY29tICJnaXQtdXBsb2FkLXBhY2sgJ3Byb2plY3QuZ2l0JyIKKworVGhlIGV4Y2VwdGlvbiBpcyBpZiBhICd+JyBpcyB1c2VkLCBpbiB3aGljaCBjYXNlCit3ZSBleGVjdXRlIGl0IHdpdGhvdXQgdGhlIGxlYWRpbmcgJy8nLgorCisgICAgICBzc2g6Ly91c2VyQGV4YW1wbGUuY29tL35hbGljZS9wcm9qZWN0LmdpdCwKKwkJICAgICB8CisJCSAgICAgdgorICAgc3NoIHVzZXJAZXhhbXBsZS5jb20gImdpdC11cGxvYWQtcGFjayAnfmFsaWNlL3Byb2plY3QuZ2l0JyIKKworQSBmZXcgdGhpbmdzIHRvIHJlbWVtYmVyIGhlcmU6CisKKy0gVGhlICJjb21tYW5kIG5hbWUiIGlzIHNwZWxsZWQgd2l0aCBkYXNoIChlLmcuIGdpdC11cGxvYWQtcGFjayksIGJ1dAorICB0aGlzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBjbGllbnQ7CisKKy0gVGhlIHJlcG9zaXRvcnkgcGF0aCBpcyBhbHdheXMgcXVvdGVkIHdpdGggc2luZ2xlIHF1b3Rlcy4KKworRmV0Y2hpbmcgRGF0YSBGcm9tIGEgU2VydmVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworV2hlbiBvbmUgR2l0IHJlcG9zaXRvcnkgd2FudHMgdG8gZ2V0IGRhdGEgdGhhdCBhIHNlY29uZCByZXBvc2l0b3J5CitoYXMsIHRoZSBmaXJzdCBjYW4gJ2ZldGNoJyBmcm9tIHRoZSBzZWNvbmQuICBUaGlzIG9wZXJhdGlvbiBkZXRlcm1pbmVzCit3aGF0IGRhdGEgdGhlIHNlcnZlciBoYXMgdGhhdCB0aGUgY2xpZW50IGRvZXMgbm90IHRoZW4gc3RyZWFtcyB0aGF0CitkYXRhIGRvd24gdG8gdGhlIGNsaWVudCBpbiBwYWNrZmlsZSBmb3JtYXQuCisKKworUmVmZXJlbmNlIERpc2NvdmVyeQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIHRoZSBjbGllbnQgaW5pdGlhbGx5IGNvbm5lY3RzIHRoZSBzZXJ2ZXIgd2lsbCBpbW1lZGlhdGVseSByZXNwb25kCit3aXRoIGEgbGlzdGluZyBvZiBlYWNoIHJlZmVyZW5jZSBpdCBoYXMgKGFsbCBicmFuY2hlcyBhbmQgdGFncykgYWxvbmcKK3dpdGggdGhlIG9iamVjdCBuYW1lIHRoYXQgZWFjaCByZWZlcmVuY2UgY3VycmVudGx5IHBvaW50cyB0by4KKworICAgJCBlY2hvIC1lIC1uICIwMDM5Z2l0LXVwbG9hZC1wYWNrIC9zY2hhY29uL2dpdGJvb2suZ2l0XDBob3N0PWV4YW1wbGUuY29tXDAiIHwKKyAgICAgIG5jIC12IGV4YW1wbGUuY29tIDk0MTgKKyAgIDAwODg3MjE3YTdjN2U1ODJjNDZjZWMyMmExMzBhZGY0YjlkN2Q5NTBmYmEwIEhFQURcMG11bHRpX2FjayB0aGluLXBhY2sgc2lkZS1iYW5kIHNpZGUtYmFuZC02NGsgb2ZzLWRlbHRhIHNoYWxsb3cgbm8tcHJvZ3Jlc3MgaW5jbHVkZS10YWcKKyAgIDAwNDQxZDNmY2Q1Y2VkNDQ1ZDFhYmM0MDIyMjVjMGI4YTEyOTk2NDFmNDk3IHJlZnMvaGVhZHMvaW50ZWdyYXRpb24KKyAgIDAwM2Y3MjE3YTdjN2U1ODJjNDZjZWMyMmExMzBhZGY0YjlkN2Q5NTBmYmEwIHJlZnMvaGVhZHMvbWFzdGVyCisgICAwMDNjYjg4ZDI0NDFjYWMwOTc3ZmFmOThlZmM4MDMwNTAxMjExMjIzOGQ5ZCByZWZzL3RhZ3MvdjAuOQorICAgMDAzYzUyNTEyODQ4MGI5NmM4OWU2NDE4YjFlNDA5MDliZjZjNWIyZDU4MGYgcmVmcy90YWdzL3YxLjAKKyAgIDAwM2ZlOTJkZjQ4NzQzYjdiYzdkMjZiY2FhYmZkZGRlMGExZTIwY2FlNDdjIHJlZnMvdGFncy92MS4wXnt9CisgICAwMDAwCisKK1NlcnZlciBTSE9VTEQgdGVybWluYXRlIGVhY2ggbm9uLWZsdXNoIGxpbmUgdXNpbmcgTEYgKCJcbiIpIHRlcm1pbmF0b3I7CitjbGllbnQgTVVTVCBOT1QgY29tcGxhaW4gaWYgdGhlcmUgaXMgbm8gdGVybWluYXRvci4KKworVGhlIHJldHVybmVkIHJlc3BvbnNlIGlzIGEgcGt0LWxpbmUgc3RyZWFtIGRlc2NyaWJpbmcgZWFjaCByZWYgYW5kCitpdHMgY3VycmVudCB2YWx1ZS4gIFRoZSBzdHJlYW0gTVVTVCBiZSBzb3J0ZWQgYnkgbmFtZSBhY2NvcmRpbmcgdG8KK3RoZSBDIGxvY2FsZSBvcmRlcmluZy4KKworSWYgSEVBRCBpcyBhIHZhbGlkIHJlZiwgSEVBRCBNVVNUIGFwcGVhciBhcyB0aGUgZmlyc3QgYWR2ZXJ0aXNlZAorcmVmLiAgSWYgSEVBRCBpcyBub3QgYSB2YWxpZCByZWYsIEhFQUQgTVVTVCBOT1QgYXBwZWFyIGluIHRoZQorYWR2ZXJ0aXNlbWVudCBsaXN0IGF0IGFsbCwgYnV0IG90aGVyIHJlZnMgbWF5IHN0aWxsIGFwcGVhci4KKworVGhlIHN0cmVhbSBNVVNUIGluY2x1ZGUgY2FwYWJpbGl0eSBkZWNsYXJhdGlvbnMgYmVoaW5kIGEgTlVMIG9uIHRoZQorZmlyc3QgcmVmLiBUaGUgcGVlbGVkIHZhbHVlIG9mIGEgcmVmICh0aGF0IGlzICJyZWZee30iKSBNVVNUIGJlCitpbW1lZGlhdGVseSBhZnRlciB0aGUgcmVmIGl0c2VsZiwgaWYgcHJlc2VudGVkLiBBIGNvbmZvcm1pbmcgc2VydmVyCitNVVNUIHBlZWwgdGhlIHJlZiBpZiBpdCdzIGFuIGFubm90YXRlZCB0YWcuCisKKy0tLS0KKyAgYWR2ZXJ0aXNlZC1yZWZzICA9ICAobm8tcmVmcyAvIGxpc3Qtb2YtcmVmcykKKwkJICAgICAgZmx1c2gtcGt0CisKKyAgbm8tcmVmcyAgICAgICAgICA9ICBQS1QtTElORSh6ZXJvLWlkIFNQICJjYXBhYmlsaXRpZXNee30iCisJCSAgICAgIE5VTCBjYXBhYmlsaXR5LWxpc3QgTEYpCisKKyAgbGlzdC1vZi1yZWZzICAgICA9ICBmaXJzdC1yZWYgKm90aGVyLXJlZgorICBmaXJzdC1yZWYgICAgICAgID0gIFBLVC1MSU5FKG9iai1pZCBTUCByZWZuYW1lCisJCSAgICAgIE5VTCBjYXBhYmlsaXR5LWxpc3QgTEYpCisKKyAgb3RoZXItcmVmICAgICAgICA9ICBQS1QtTElORShvdGhlci10aXAgLyBvdGhlci1wZWVsZWQpCisgIG90aGVyLXRpcCAgICAgICAgPSAgb2JqLWlkIFNQIHJlZm5hbWUgTEYKKyAgb3RoZXItcGVlbGVkICAgICA9ICBvYmotaWQgU1AgcmVmbmFtZSAiXnt9IiBMRgorCisgIGNhcGFiaWxpdHktbGlzdCAgPSAgY2FwYWJpbGl0eSAqKFNQIGNhcGFiaWxpdHkpCisgIGNhcGFiaWxpdHkgICAgICAgPSAgMSooTENfQUxQSEEgLyBESUdJVCAvICItIiAvICJfIikKKyAgTENfQUxQSEEgICAgICAgICA9ICAleDYxLTdBCistLS0tCisKK1NlcnZlciBhbmQgY2xpZW50IE1VU1QgdXNlIGxvd2VyY2FzZSBmb3Igb2JqLWlkLCBib3RoIE1VU1QgdHJlYXQgb2JqLWlkCithcyBjYXNlLWluc2Vuc2l0aXZlLgorCitTZWUgcHJvdG9jb2wtY2FwYWJpbGl0aWVzLnR4dCBmb3IgYSBsaXN0IG9mIGFsbG93ZWQgc2VydmVyIGNhcGFiaWxpdGllcworYW5kIGRlc2NyaXB0aW9ucy4KKworUGFja2ZpbGUgTmVnb3RpYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitBZnRlciByZWZlcmVuY2UgYW5kIGNhcGFiaWxpdGllcyBkaXNjb3ZlcnksIHRoZSBjbGllbnQgY2FuIGRlY2lkZQordG8gdGVybWluYXRlIHRoZSBjb25uZWN0aW9uIGJ5IHNlbmRpbmcgYSBmbHVzaC1wa3QsIHRlbGxpbmcgdGhlCitzZXJ2ZXIgaXQgY2FuIG5vdyBncmFjZWZ1bGx5IHRlcm1pbmF0ZSAoYXMgaGFwcGVucyB3aXRoIHRoZSBscy1yZW1vdGUKK2NvbW1hbmQpIG9yIGl0IGNhbiBlbnRlciB0aGUgbmVnb3RpYXRpb24gcGhhc2UsIHdoZXJlIHRoZSBjbGllbnQgYW5kCitzZXJ2ZXIgZGV0ZXJtaW5lIHdoYXQgdGhlIG1pbmltYWwgcGFja2ZpbGUgbmVjZXNzYXJ5IGZvciB0cmFuc3BvcnQgaXMuCisKK09uY2UgdGhlIGNsaWVudCBoYXMgdGhlIGluaXRpYWwgbGlzdCBvZiByZWZlcmVuY2VzIHRoYXQgdGhlIHNlcnZlcgoraGFzLCBhcyB3ZWxsIGFzIHRoZSBsaXN0IG9mIGNhcGFiaWxpdGllcywgaXQgd2lsbCBiZWdpbiB0ZWxsaW5nIHRoZQorc2VydmVyIHdoYXQgb2JqZWN0cyBpdCB3YW50cyBhbmQgd2hhdCBvYmplY3RzIGl0IGhhcywgc28gdGhlIHNlcnZlcgorY2FuIG1ha2UgYSBwYWNrZmlsZSB0aGF0IG9ubHkgY29udGFpbnMgdGhlIG9iamVjdHMgdGhhdCB0aGUgY2xpZW50IG5lZWRzLgorVGhlIGNsaWVudCB3aWxsIGFsc28gc2VuZCBhIGxpc3Qgb2YgdGhlIGNhcGFiaWxpdGllcyBpdCB3YW50cyB0byBiZSBpbgorZWZmZWN0LCBvdXQgb2Ygd2hhdCB0aGUgc2VydmVyIHNhaWQgaXQgY291bGQgZG8gd2l0aCB0aGUgZmlyc3QgJ3dhbnQnIGxpbmUuCisKKy0tLS0KKyAgdXBsb2FkLXJlcXVlc3QgICAgPSAgd2FudC1saXN0CisJCSAgICAgICBoYXZlLWxpc3QKKwkJICAgICAgIGNvbXB1dGUtZW5kCisKKyAgd2FudC1saXN0ICAgICAgICAgPSAgZmlyc3Qtd2FudAorCQkgICAgICAgKmFkZGl0aW9uYWwtd2FudAorCQkgICAgICAgZmx1c2gtcGt0CisKKyAgZmlyc3Qtd2FudCAgICAgICAgPSAgUEtULUxJTkUoIndhbnQiIFNQIG9iai1pZCBTUCBjYXBhYmlsaXR5LWxpc3QgTEYpCisgIGFkZGl0aW9uYWwtd2FudCAgID0gIFBLVC1MSU5FKCJ3YW50IiBTUCBvYmotaWQgTEYpCisKKyAgaGF2ZS1saXN0ICAgICAgICAgPSAgKmhhdmUtbGluZQorICBoYXZlLWxpbmUgICAgICAgICA9ICBQS1QtTElORSgiaGF2ZSIgU1Agb2JqLWlkIExGKQorICBjb21wdXRlLWVuZCAgICAgICA9ICBmbHVzaC1wa3QgLyBQS1QtTElORSgiZG9uZSIpCistLS0tCisKK0NsaWVudHMgTVVTVCBzZW5kIGFsbCB0aGUgb2JqLWlkcyBpdCB3YW50cyBmcm9tIHRoZSByZWZlcmVuY2UKK2Rpc2NvdmVyeSBwaGFzZSBhcyAnd2FudCcgbGluZXMuIENsaWVudHMgTVVTVCBzZW5kIGF0IGxlYXN0IG9uZQorJ3dhbnQnIGNvbW1hbmQgaW4gdGhlIHJlcXVlc3QgYm9keS4gQ2xpZW50cyBNVVNUIE5PVCBtZW50aW9uIGFuCitvYmotaWQgaW4gYSAnd2FudCcgY29tbWFuZCB3aGljaCBkaWQgbm90IGFwcGVhciBpbiB0aGUgcmVzcG9uc2UKK29idGFpbmVkIHRocm91Z2ggcmVmIGRpc2NvdmVyeS4KKworSWYgY2xpZW50IGlzIHJlcXVlc3RpbmcgYSBzaGFsbG93IGNsb25lLCBpdCB3aWxsIG5vdyBzZW5kIGEgJ2RlZXBlbicKK2xpbmUgd2l0aCB0aGUgZGVwdGggaXQgaXMgcmVxdWVzdGluZy4KKworT25jZSBhbGwgdGhlICJ3YW50InMgKGFuZCBvcHRpb25hbCAnZGVlcGVuJykgYXJlIHRyYW5zZmVycmVkLAorY2xpZW50cyBNVVNUIHNlbmQgYSBmbHVzaC1wa3QuIElmIHRoZSBjbGllbnQgaGFzIGFsbCB0aGUgcmVmZXJlbmNlcworb24gdGhlIHNlcnZlciwgY2xpZW50IGZsdXNoZXMgYW5kIGRpc2Nvbm5lY3RzLgorCitUT0RPOiBzaGFsbG93L3Vuc2hhbGxvdyByZXNwb25zZSBhbmQgZG9jdW1lbnQgdGhlIGRlZXBlbiBjb21tYW5kIGluIHRoZSBBQk5GLgorCitOb3cgdGhlIGNsaWVudCB3aWxsIHNlbmQgYSBsaXN0IG9mIHRoZSBvYmotaWRzIGl0IGhhcyB1c2luZyAnaGF2ZScKK2xpbmVzLiAgSW4gbXVsdGlfYWNrIG1vZGUsIHRoZSBjYW5vbmljYWwgaW1wbGVtZW50YXRpb24gd2lsbCBzZW5kIHVwCit0byAzMiBvZiB0aGVzZSBhdCBhIHRpbWUsIHRoZW4gd2lsbCBzZW5kIGEgZmx1c2gtcGt0LiAgVGhlIGNhbm9uaWNhbAoraW1wbGVtZW50YXRpb24gd2lsbCBza2lwIGFoZWFkIGFuZCBzZW5kIHRoZSBuZXh0IDMyIGltbWVkaWF0ZWx5LAorc28gdGhhdCB0aGVyZSBpcyBhbHdheXMgYSBibG9jayBvZiAzMiAiaW4tZmxpZ2h0IG9uIHRoZSB3aXJlIiBhdCBhCit0aW1lLgorCitJZiB0aGUgc2VydmVyIHJlYWRzICdoYXZlJyBsaW5lcywgaXQgdGhlbiB3aWxsIHJlc3BvbmQgYnkgQUNLaW5nIGFueQorb2YgdGhlIG9iai1pZHMgdGhlIGNsaWVudCBzYWlkIGl0IGhhZCB0aGF0IHRoZSBzZXJ2ZXIgYWxzbyBoYXMuIFRoZQorc2VydmVyIHdpbGwgQUNLIG9iai1pZHMgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHdoaWNoIGFjayBtb2RlIGlzCitjaG9zZW4gYnkgdGhlIGNsaWVudC4KKworSW4gbXVsdGlfYWNrIG1vZGU6CisKKyAgKiB0aGUgc2VydmVyIHdpbGwgcmVzcG9uZCB3aXRoICdBQ0sgb2JqLWlkIGNvbnRpbnVlJyBmb3IgYW55IGNvbW1vbgorICAgIGNvbW1pdHMuCisKKyAgKiBvbmNlIHRoZSBzZXJ2ZXIgaGFzIGZvdW5kIGFuIGFjY2VwdGFibGUgY29tbW9uIGJhc2UgY29tbWl0IGFuZCBpcworICAgIHJlYWR5IHRvIG1ha2UgYSBwYWNrZmlsZSwgaXQgd2lsbCBibGluZGx5IEFDSyBhbGwgJ2hhdmUnIG9iai1pZHMKKyAgICBiYWNrIHRvIHRoZSBjbGllbnQuCisKKyAgKiB0aGUgc2VydmVyIHdpbGwgdGhlbiBzZW5kIGEgJ05BQ0snIGFuZCB0aGVuIHdhaXQgZm9yIGFub3RoZXIgcmVzcG9uc2UKKyAgICBmcm9tIHRoZSBjbGllbnQgLSBlaXRoZXIgYSAnZG9uZScgb3IgYW5vdGhlciBsaXN0IG9mICdoYXZlJyBsaW5lcy4KKworSW4gbXVsdGlfYWNrX2RldGFpbGVkIG1vZGU6CisKKyAgKiB0aGUgc2VydmVyIHdpbGwgZGlmZmVyZW50aWF0ZSB0aGUgQUNLcyB3aGVyZSBpdCBpcyBzaWduYWxpbmcKKyAgICB0aGF0IGl0IGlzIHJlYWR5IHRvIHNlbmQgZGF0YSB3aXRoICdBQ0sgb2JqLWlkIHJlYWR5JyBsaW5lcywgYW5kCisgICAgc2lnbmFscyB0aGUgaWRlbnRpZmllZCBjb21tb24gY29tbWl0cyB3aXRoICdBQ0sgb2JqLWlkIGNvbW1vbicgbGluZXMuCisKK1dpdGhvdXQgZWl0aGVyIG11bHRpX2FjayBvciBtdWx0aV9hY2tfZGV0YWlsZWQ6CisKKyAqIHVwbG9hZC1wYWNrIHNlbmRzICJBQ0sgb2JqLWlkIiBvbiB0aGUgZmlyc3QgY29tbW9uIG9iamVjdCBpdCBmaW5kcy4KKyAgIEFmdGVyIHRoYXQgaXQgc2F5cyBub3RoaW5nIHVudGlsIHRoZSBjbGllbnQgZ2l2ZXMgaXQgYSAiZG9uZSIuCisKKyAqIHVwbG9hZC1wYWNrIHNlbmRzICJOQUsiIG9uIGEgZmx1c2gtcGt0IGlmIG5vIGNvbW1vbiBvYmplY3QKKyAgIGhhcyBiZWVuIGZvdW5kIHlldC4gIElmIG9uZSBoYXMgYmVlbiBmb3VuZCwgYW5kIHRodXMgYW4gQUNLCisgICB3YXMgYWxyZWFkeSBzZW50LCBpdCdzIHNpbGVudCBvbiB0aGUgZmx1c2gtcGt0LgorCitBZnRlciB0aGUgY2xpZW50IGhhcyBnb3R0ZW4gZW5vdWdoIEFDSyByZXNwb25zZXMgdGhhdCBpdCBjYW4gZGV0ZXJtaW5lCit0aGF0IHRoZSBzZXJ2ZXIgaGFzIGVub3VnaCBpbmZvcm1hdGlvbiB0byBzZW5kIGFuIGVmZmljaWVudCBwYWNrZmlsZQorKGluIHRoZSBjYW5vbmljYWwgaW1wbGVtZW50YXRpb24sIHRoaXMgaXMgZGV0ZXJtaW5lZCB3aGVuIGl0IGhhcyByZWNlaXZlZAorZW5vdWdoIEFDS3MgdGhhdCBpdCBjYW4gY29sb3IgZXZlcnl0aGluZyBsZWZ0IGluIHRoZSAtLWRhdGUtb3JkZXIgcXVldWUKK2FzIGNvbW1vbiB3aXRoIHRoZSBzZXJ2ZXIsIG9yIHRoZSAtLWRhdGUtb3JkZXIgcXVldWUgaXMgZW1wdHkpLCBvciB0aGUKK2NsaWVudCBkZXRlcm1pbmVzIHRoYXQgaXQgd2FudHMgdG8gZ2l2ZSB1cCAoaW4gdGhlIGNhbm9uaWNhbCBpbXBsZW1lbnRhdGlvbiwKK3RoaXMgaXMgZGV0ZXJtaW5lZCB3aGVuIHRoZSBjbGllbnQgc2VuZHMgMjU2ICdoYXZlJyBsaW5lcyB3aXRob3V0IGdldHRpbmcKK2FueSBvZiB0aGVtIEFDS2VkIGJ5IHRoZSBzZXJ2ZXIgLSBtZWFuaW5nIHRoZXJlIGlzIG5vdGhpbmcgaW4gY29tbW9uIGFuZAordGhlIHNlcnZlciBzaG91bGQganVzdCBzZW5kIGFsbCBvZiBpdHMgb2JqZWN0cyksIHRoZW4gdGhlIGNsaWVudCB3aWxsIHNlbmQKK2EgJ2RvbmUnIGNvbW1hbmQuICBUaGUgJ2RvbmUnIGNvbW1hbmQgc2lnbmFscyB0byB0aGUgc2VydmVyIHRoYXQgdGhlIGNsaWVudAoraXMgcmVhZHkgdG8gcmVjZWl2ZSBpdHMgcGFja2ZpbGUgZGF0YS4KKworSG93ZXZlciwgdGhlIDI1NiBsaW1pdCAqb25seSogdHVybnMgb24gaW4gdGhlIGNhbm9uaWNhbCBjbGllbnQKK2ltcGxlbWVudGF0aW9uIGlmIHdlIGhhdmUgcmVjZWl2ZWQgYXQgbGVhc3Qgb25lICJBQ0sgJXMgY29udGludWUiCitkdXJpbmcgYSBwcmlvciByb3VuZC4gIFRoaXMgaGVscHMgdG8gZW5zdXJlIHRoYXQgYXQgbGVhc3Qgb25lIGNvbW1vbgorYW5jZXN0b3IgaXMgZm91bmQgYmVmb3JlIHdlIGdpdmUgdXAgZW50aXJlbHkuCisKK09uY2UgdGhlICdkb25lJyBsaW5lIGlzIHJlYWQgZnJvbSB0aGUgY2xpZW50LCB0aGUgc2VydmVyIHdpbGwgZWl0aGVyCitzZW5kIGEgZmluYWwgJ0FDSyBvYmotaWQnIG9yIGl0IHdpbGwgc2VuZCBhICdOQUsnLiBUaGUgc2VydmVyIG9ubHkgc2VuZHMKK0FDSyBhZnRlciAnZG9uZScgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNvbW1vbiBiYXNlIGFuZCBtdWx0aV9hY2sgb3IKK211bHRpX2Fja19kZXRhaWxlZCBpcyBlbmFibGVkLiBUaGUgc2VydmVyIGFsd2F5cyBzZW5kcyBOQUsgYWZ0ZXIgJ2RvbmUnCitpZiB0aGVyZSBpcyBubyBjb21tb24gYmFzZSBmb3VuZC4KKworVGhlbiB0aGUgc2VydmVyIHdpbGwgc3RhcnQgc2VuZGluZyBpdHMgcGFja2ZpbGUgZGF0YS4KKworLS0tLQorICBzZXJ2ZXItcmVzcG9uc2UgPSAqYWNrX211bHRpIGFjayAvIG5haworICBhY2tfbXVsdGkgICAgICAgPSBQS1QtTElORSgiQUNLIiBTUCBvYmotaWQgYWNrX3N0YXR1cyBMRikKKyAgYWNrX3N0YXR1cyAgICAgID0gImNvbnRpbnVlIiAvICJjb21tb24iIC8gInJlYWR5IgorICBhY2sgICAgICAgICAgICAgPSBQS1QtTElORSgiQUNLIFNQIG9iai1pZCBMRikKKyAgbmFrICAgICAgICAgICAgID0gUEtULUxJTkUoIk5BSyIgTEYpCistLS0tCisKK0Egc2ltcGxlIGNsb25lIG1heSBsb29rIGxpa2UgdGhpcyAod2l0aCBubyAnaGF2ZScgbGluZXMpOgorCistLS0tCisgICBDOiAwMDU0d2FudCA3NDczMGQ0MTBmY2I2NjAzYWNlOTZmMWRjNTVlYTYxOTYxMjI1MzJkXDBtdWx0aV9hY2sgXAorICAgICBzaWRlLWJhbmQtNjRrIG9mcy1kZWx0YVxuCisgICBDOiAwMDMyd2FudCA3ZDE2NjUxNDRhM2E5NzVjMDVmMWY0MzkwMmRkYWYwODRlNzg0ZGJlXG4KKyAgIEM6IDAwMzJ3YW50IDVhM2Y2YmU3NTViYmI3ZGVhZTUwMDY1OTg4Y2JmYTFmZmE5YWI2OGFcbgorICAgQzogMDAzMndhbnQgN2U0N2ZlMmJkOGQwMWQ0ODFmNDRkN2FmMDUzMWJkOTNkM2IyMWMwMVxuCisgICBDOiAwMDMyd2FudCA3NDczMGQ0MTBmY2I2NjAzYWNlOTZmMWRjNTVlYTYxOTYxMjI1MzJkXG4KKyAgIEM6IDAwMDAKKyAgIEM6IDAwMDlkb25lXG4KKworICAgUzogMDAwOE5BS1xuCisgICBTOiBbUEFDS0ZJTEVdCistLS0tCisKK0FuIGluY3JlbWVudGFsIHVwZGF0ZSAoZmV0Y2gpIHJlc3BvbnNlIG1pZ2h0IGxvb2sgbGlrZSB0aGlzOgorCistLS0tCisgICBDOiAwMDU0d2FudCA3NDczMGQ0MTBmY2I2NjAzYWNlOTZmMWRjNTVlYTYxOTYxMjI1MzJkXDBtdWx0aV9hY2sgXAorICAgICBzaWRlLWJhbmQtNjRrIG9mcy1kZWx0YVxuCisgICBDOiAwMDMyd2FudCA3ZDE2NjUxNDRhM2E5NzVjMDVmMWY0MzkwMmRkYWYwODRlNzg0ZGJlXG4KKyAgIEM6IDAwMzJ3YW50IDVhM2Y2YmU3NTViYmI3ZGVhZTUwMDY1OTg4Y2JmYTFmZmE5YWI2OGFcbgorICAgQzogMDAwMAorICAgQzogMDAzMmhhdmUgN2U0N2ZlMmJkOGQwMWQ0ODFmNDRkN2FmMDUzMWJkOTNkM2IyMWMwMVxuCisgICBDOiBbMzAgbW9yZSBoYXZlIGxpbmVzXQorICAgQzogMDAzMmhhdmUgNzQ3MzBkNDEwZmNiNjYwM2FjZTk2ZjFkYzU1ZWE2MTk2MTIyNTMyZFxuCisgICBDOiAwMDAwCisKKyAgIFM6IDAwM2FBQ0sgN2U0N2ZlMmJkOGQwMWQ0ODFmNDRkN2FmMDUzMWJkOTNkM2IyMWMwMSBjb250aW51ZVxuCisgICBTOiAwMDNhQUNLIDc0NzMwZDQxMGZjYjY2MDNhY2U5NmYxZGM1NWVhNjE5NjEyMjUzMmQgY29udGludWVcbgorICAgUzogMDAwOE5BS1xuCisKKyAgIEM6IDAwMDlkb25lXG4KKworICAgUzogMDAzYUFDSyA3NDczMGQ0MTBmY2I2NjAzYWNlOTZmMWRjNTVlYTYxOTYxMjI1MzJkXG4KKyAgIFM6IFtQQUNLRklMRV0KKy0tLS0KKworCitQYWNrZmlsZSBEYXRhCistLS0tLS0tLS0tLS0tCisKK05vdyB0aGF0IHRoZSBjbGllbnQgYW5kIHNlcnZlciBoYXZlIGZpbmlzaGVkIG5lZ290aWF0aW9uIGFib3V0IHdoYXQKK3RoZSBtaW5pbWFsIGFtb3VudCBvZiBkYXRhIHRoYXQgbmVlZHMgdG8gYmUgc2VudCB0byB0aGUgY2xpZW50IGlzLCB0aGUgc2VydmVyCit3aWxsIGNvbnN0cnVjdCBhbmQgc2VuZCB0aGUgcmVxdWlyZWQgZGF0YSBpbiBwYWNrZmlsZSBmb3JtYXQuCisKK1NlZSBwYWNrLWZvcm1hdC50eHQgZm9yIHdoYXQgdGhlIHBhY2tmaWxlIGl0c2VsZiBhY3R1YWxseSBsb29rcyBsaWtlLgorCitJZiAnc2lkZS1iYW5kJyBvciAnc2lkZS1iYW5kLTY0aycgY2FwYWJpbGl0aWVzIGhhdmUgYmVlbiBzcGVjaWZpZWQgYnkKK3RoZSBjbGllbnQsIHRoZSBzZXJ2ZXIgd2lsbCBzZW5kIHRoZSBwYWNrZmlsZSBkYXRhIG11bHRpcGxleGVkLgorCitFYWNoIHBhY2tldCBzdGFydGluZyB3aXRoIHRoZSBwYWNrZXQtbGluZSBsZW5ndGggb2YgdGhlIGFtb3VudCBvZiBkYXRhCit0aGF0IGZvbGxvd3MsIGZvbGxvd2VkIGJ5IGEgc2luZ2xlIGJ5dGUgc3BlY2lmeWluZyB0aGUgc2lkZWJhbmQgdGhlCitmb2xsb3dpbmcgZGF0YSBpcyBjb21pbmcgaW4gb24uCisKK0luICdzaWRlLWJhbmQnIG1vZGUsIGl0IHdpbGwgc2VuZCB1cCB0byA5OTkgZGF0YSBieXRlcyBwbHVzIDEgY29udHJvbAorY29kZSwgZm9yIGEgdG90YWwgb2YgdXAgdG8gMTAwMCBieXRlcyBpbiBhIHBrdC1saW5lLiAgSW4gJ3NpZGUtYmFuZC02NGsnCittb2RlIGl0IHdpbGwgc2VuZCB1cCB0byA2NTUxOSBkYXRhIGJ5dGVzIHBsdXMgMSBjb250cm9sIGNvZGUsIGZvciBhCit0b3RhbCBvZiB1cCB0byA2NTUyMCBieXRlcyBpbiBhIHBrdC1saW5lLgorCitUaGUgc2lkZWJhbmQgYnl0ZSB3aWxsIGJlIGEgJzEnLCAnMicgb3IgYSAnMycuIFNpZGViYW5kICcxJyB3aWxsIGNvbnRhaW4KK3BhY2tmaWxlIGRhdGEsIHNpZGViYW5kICcyJyB3aWxsIGJlIHVzZWQgZm9yIHByb2dyZXNzIGluZm9ybWF0aW9uIHRoYXQgdGhlCitjbGllbnQgd2lsbCBnZW5lcmFsbHkgcHJpbnQgdG8gc3RkZXJyIGFuZCBzaWRlYmFuZCAnMycgaXMgdXNlZCBmb3IgZXJyb3IKK2luZm9ybWF0aW9uLgorCitJZiBubyAnc2lkZS1iYW5kJyBjYXBhYmlsaXR5IHdhcyBzcGVjaWZpZWQsIHRoZSBzZXJ2ZXIgd2lsbCBzdHJlYW0gdGhlCitlbnRpcmUgcGFja2ZpbGUgd2l0aG91dCBtdWx0aXBsZXhpbmcuCisKKworUHVzaGluZyBEYXRhIFRvIGEgU2VydmVyCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworUHVzaGluZyBkYXRhIHRvIGEgc2VydmVyIHdpbGwgaW52b2tlIHRoZSAncmVjZWl2ZS1wYWNrJyBwcm9jZXNzIG9uIHRoZQorc2VydmVyLCB3aGljaCB3aWxsIGFsbG93IHRoZSBjbGllbnQgdG8gdGVsbCBpdCB3aGljaCByZWZlcmVuY2VzIGl0IHNob3VsZAordXBkYXRlIGFuZCB0aGVuIHNlbmQgYWxsIHRoZSBkYXRhIHRoZSBzZXJ2ZXIgd2lsbCBuZWVkIGZvciB0aG9zZSBuZXcKK3JlZmVyZW5jZXMgdG8gYmUgY29tcGxldGUuICBPbmNlIGFsbCB0aGUgZGF0YSBpcyByZWNlaXZlZCBhbmQgdmFsaWRhdGVkLAordGhlIHNlcnZlciB3aWxsIHRoZW4gdXBkYXRlIGl0cyByZWZlcmVuY2VzIHRvIHdoYXQgdGhlIGNsaWVudCBzcGVjaWZpZWQuCisKK0F1dGhlbnRpY2F0aW9uCistLS0tLS0tLS0tLS0tLQorCitUaGUgcHJvdG9jb2wgaXRzZWxmIGNvbnRhaW5zIG5vIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbXMuICBUaGF0IGlzIHRvIGJlCitoYW5kbGVkIGJ5IHRoZSB0cmFuc3BvcnQsIHN1Y2ggYXMgU1NILCBiZWZvcmUgdGhlICdyZWNlaXZlLXBhY2snIHByb2Nlc3MgaXMKK2ludm9rZWQuICBJZiAncmVjZWl2ZS1wYWNrJyBpcyBjb25maWd1cmVkIG92ZXIgdGhlIEdpdCB0cmFuc3BvcnQsIHRob3NlCityZXBvc2l0b3JpZXMgd2lsbCBiZSB3cml0YWJsZSBieSBhbnlvbmUgd2hvIGNhbiBhY2Nlc3MgdGhhdCBwb3J0ICg5NDE4KSBhcwordGhhdCB0cmFuc3BvcnQgaXMgdW5hdXRoZW50aWNhdGVkLgorCitSZWZlcmVuY2UgRGlzY292ZXJ5CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSByZWZlcmVuY2UgZGlzY292ZXJ5IHBoYXNlIGlzIGRvbmUgbmVhcmx5IHRoZSBzYW1lIHdheSBhcyBpdCBpcyBpbiB0aGUKK2ZldGNoaW5nIHByb3RvY29sLiBFYWNoIHJlZmVyZW5jZSBvYmotaWQgYW5kIG5hbWUgb24gdGhlIHNlcnZlciBpcyBzZW50CitpbiBwYWNrZXQtbGluZSBmb3JtYXQgdG8gdGhlIGNsaWVudCwgZm9sbG93ZWQgYnkgYSBmbHVzaC1wa3QuICBUaGUgb25seQorcmVhbCBkaWZmZXJlbmNlIGlzIHRoYXQgdGhlIGNhcGFiaWxpdHkgbGlzdGluZyBpcyBkaWZmZXJlbnQgLSB0aGUgb25seQorcG9zc2libGUgdmFsdWVzIGFyZSAncmVwb3J0LXN0YXR1cycsICdkZWxldGUtcmVmcycgYW5kICdvZnMtZGVsdGEnLgorCitSZWZlcmVuY2UgVXBkYXRlIFJlcXVlc3QgYW5kIFBhY2tmaWxlIFRyYW5zZmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uY2UgdGhlIGNsaWVudCBrbm93cyB3aGF0IHJlZmVyZW5jZXMgdGhlIHNlcnZlciBpcyBhdCwgaXQgY2FuIHNlbmQgYQorbGlzdCBvZiByZWZlcmVuY2UgdXBkYXRlIHJlcXVlc3RzLiAgRm9yIGVhY2ggcmVmZXJlbmNlIG9uIHRoZSBzZXJ2ZXIKK3RoYXQgaXQgd2FudHMgdG8gdXBkYXRlLCBpdCBzZW5kcyBhIGxpbmUgbGlzdGluZyB0aGUgb2JqLWlkIGN1cnJlbnRseSBvbgordGhlIHNlcnZlciwgdGhlIG9iai1pZCB0aGUgY2xpZW50IHdvdWxkIGxpa2UgdG8gdXBkYXRlIGl0IHRvIGFuZCB0aGUgbmFtZQorb2YgdGhlIHJlZmVyZW5jZS4KKworVGhpcyBsaXN0IGlzIGZvbGxvd2VkIGJ5IGEgZmx1c2gtcGt0IGFuZCB0aGVuIHRoZSBwYWNrZmlsZSB0aGF0IHNob3VsZAorY29udGFpbiBhbGwgdGhlIG9iamVjdHMgdGhhdCB0aGUgc2VydmVyIHdpbGwgbmVlZCB0byBjb21wbGV0ZSB0aGUgbmV3CityZWZlcmVuY2VzLgorCistLS0tCisgIHVwZGF0ZS1yZXF1ZXN0ICAgID0gIGNvbW1hbmQtbGlzdCBbcGFjay1maWxlXQorCisgIGNvbW1hbmQtbGlzdCAgICAgID0gIFBLVC1MSU5FKGNvbW1hbmQgTlVMIGNhcGFiaWxpdHktbGlzdCBMRikKKwkJICAgICAgICpQS1QtTElORShjb21tYW5kIExGKQorCQkgICAgICAgZmx1c2gtcGt0CisKKyAgY29tbWFuZCAgICAgICAgICAgPSAgY3JlYXRlIC8gZGVsZXRlIC8gdXBkYXRlCisgIGNyZWF0ZSAgICAgICAgICAgID0gIHplcm8taWQgU1AgbmV3LWlkICBTUCBuYW1lCisgIGRlbGV0ZSAgICAgICAgICAgID0gIG9sZC1pZCAgU1AgemVyby1pZCBTUCBuYW1lCisgIHVwZGF0ZSAgICAgICAgICAgID0gIG9sZC1pZCAgU1AgbmV3LWlkICBTUCBuYW1lCisKKyAgb2xkLWlkICAgICAgICAgICAgPSAgb2JqLWlkCisgIG5ldy1pZCAgICAgICAgICAgID0gIG9iai1pZAorCisgIHBhY2stZmlsZSAgICAgICAgID0gIlBBQ0siIDI4KihPQ1RFVCkKKy0tLS0KKworSWYgdGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCBkZWxldGUtcmVmcywgdGhlIHNlbmRpbmcgZW5kIE1VU1QKK05PVCBhc2sgZm9yIGRlbGV0ZSBjb21tYW5kLgorCitUaGUgcGFjay1maWxlIE1VU1QgTk9UIGJlIHNlbnQgaWYgdGhlIG9ubHkgY29tbWFuZCB1c2VkIGlzICdkZWxldGUnLgorCitBIHBhY2stZmlsZSBNVVNUIGJlIHNlbnQgaWYgZWl0aGVyIGNyZWF0ZSBvciB1cGRhdGUgY29tbWFuZCBpcyB1c2VkLAorZXZlbiBpZiB0aGUgc2VydmVyIGFscmVhZHkgaGFzIGFsbCB0aGUgbmVjZXNzYXJ5IG9iamVjdHMuICBJbiB0aGlzCitjYXNlIHRoZSBjbGllbnQgTVVTVCBzZW5kIGFuIGVtcHR5IHBhY2stZmlsZS4gICBUaGUgb25seSB0aW1lIHRoaXMKK2lzIGxpa2VseSB0byBoYXBwZW4gaXMgaWYgdGhlIGNsaWVudCBpcyBjcmVhdGluZworYSBuZXcgYnJhbmNoIG9yIGEgdGFnIHRoYXQgcG9pbnRzIHRvIGFuIGV4aXN0aW5nIG9iai1pZC4KKworVGhlIHNlcnZlciB3aWxsIHJlY2VpdmUgdGhlIHBhY2tmaWxlLCB1bnBhY2sgaXQsIHRoZW4gdmFsaWRhdGUgZWFjaAorcmVmZXJlbmNlIHRoYXQgaXMgYmVpbmcgdXBkYXRlZCB0aGF0IGl0IGhhc24ndCBjaGFuZ2VkIHdoaWxlIHRoZSByZXF1ZXN0Cit3YXMgYmVpbmcgcHJvY2Vzc2VkICh0aGUgb2JqLWlkIGlzIHN0aWxsIHRoZSBzYW1lIGFzIHRoZSBvbGQtaWQpLCBhbmQKK2l0IHdpbGwgcnVuIGFueSB1cGRhdGUgaG9va3MgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHVwZGF0ZSBpcyBhY2NlcHRhYmxlLgorSWYgYWxsIG9mIHRoYXQgaXMgZmluZSwgdGhlIHNlcnZlciB3aWxsIHRoZW4gdXBkYXRlIHRoZSByZWZlcmVuY2VzLgorCitSZXBvcnQgU3RhdHVzCistLS0tLS0tLS0tLS0tCisKK0FmdGVyIHJlY2VpdmluZyB0aGUgcGFjayBkYXRhIGZyb20gdGhlIHNlbmRlciwgdGhlIHJlY2VpdmVyIHNlbmRzIGEKK3JlcG9ydCBpZiAncmVwb3J0LXN0YXR1cycgY2FwYWJpbGl0eSBpcyBpbiBlZmZlY3QuCitJdCBpcyBhIHNob3J0IGxpc3Rpbmcgb2Ygd2hhdCBoYXBwZW5lZCBpbiB0aGF0IHVwZGF0ZS4gIEl0IHdpbGwgZmlyc3QKK2xpc3QgdGhlIHN0YXR1cyBvZiB0aGUgcGFja2ZpbGUgdW5wYWNraW5nIGFzIGVpdGhlciAndW5wYWNrIG9rJyBvcgorJ3VucGFjayBbZXJyb3JdJy4gIFRoZW4gaXQgd2lsbCBsaXN0IHRoZSBzdGF0dXMgZm9yIGVhY2ggb2YgdGhlIHJlZmVyZW5jZXMKK3RoYXQgaXQgdHJpZWQgdG8gdXBkYXRlLiAgRWFjaCBsaW5lIGlzIGVpdGhlciAnb2sgW3JlZm5hbWVdJyBpZiB0aGUKK3VwZGF0ZSB3YXMgc3VjY2Vzc2Z1bCwgb3IgJ25nIFtyZWZuYW1lXSBbZXJyb3JdJyBpZiB0aGUgdXBkYXRlIHdhcyBub3QuCisKKy0tLS0KKyAgcmVwb3J0LXN0YXR1cyAgICAgPSB1bnBhY2stc3RhdHVzCisJCSAgICAgIDEqKGNvbW1hbmQtc3RhdHVzKQorCQkgICAgICBmbHVzaC1wa3QKKworICB1bnBhY2stc3RhdHVzICAgICA9IFBLVC1MSU5FKCJ1bnBhY2siIFNQIHVucGFjay1yZXN1bHQgTEYpCisgIHVucGFjay1yZXN1bHQgICAgID0gIm9rIiAvIGVycm9yLW1zZworCisgIGNvbW1hbmQtc3RhdHVzICAgID0gY29tbWFuZC1vayAvIGNvbW1hbmQtZmFpbAorICBjb21tYW5kLW9rICAgICAgICA9IFBLVC1MSU5FKCJvayIgU1AgcmVmbmFtZSBMRikKKyAgY29tbWFuZC1mYWlsICAgICAgPSBQS1QtTElORSgibmciIFNQIHJlZm5hbWUgU1AgZXJyb3ItbXNnIExGKQorCisgIGVycm9yLW1zZyAgICAgICAgID0gMSooT0NURUNUKSA7IHdoZXJlIG5vdCAib2siCistLS0tCisKK1VwZGF0ZXMgY2FuIGJlIHVuc3VjY2Vzc2Z1bCBmb3IgYSBudW1iZXIgb2YgcmVhc29ucy4gIFRoZSByZWZlcmVuY2UgY2FuIGhhdmUKK2NoYW5nZWQgc2luY2UgdGhlIHJlZmVyZW5jZSBkaXNjb3ZlcnkgcGhhc2Ugd2FzIG9yaWdpbmFsbHkgc2VudCwgbWVhbmluZworc29tZW9uZSBwdXNoZWQgaW4gdGhlIG1lYW50aW1lLiAgVGhlIHJlZmVyZW5jZSBiZWluZyBwdXNoZWQgY291bGQgYmUgYQorbm9uLWZhc3QtZm9yd2FyZCByZWZlcmVuY2UgYW5kIHRoZSB1cGRhdGUgaG9va3Mgb3IgY29uZmlndXJhdGlvbiBjb3VsZCBiZQorc2V0IHRvIG5vdCBhbGxvdyB0aGF0LCBldGMuICBBbHNvLCBzb21lIHJlZmVyZW5jZXMgY2FuIGJlIHVwZGF0ZWQgd2hpbGUgb3RoZXJzCitjYW4gYmUgcmVqZWN0ZWQuCisKK0FuIGV4YW1wbGUgY2xpZW50L3NlcnZlciBjb21tdW5pY2F0aW9uIG1pZ2h0IGxvb2sgbGlrZSB0aGlzOgorCistLS0tCisgICBTOiAwMDdjNzQ3MzBkNDEwZmNiNjYwM2FjZTk2ZjFkYzU1ZWE2MTk2MTIyNTMyZCByZWZzL2hlYWRzL2xvY2FsXDByZXBvcnQtc3RhdHVzIGRlbGV0ZS1yZWZzIG9mcy1kZWx0YVxuCisgICBTOiAwMDNlN2QxNjY1MTQ0YTNhOTc1YzA1ZjFmNDM5MDJkZGFmMDg0ZTc4NGRiZSByZWZzL2hlYWRzL2RlYnVnXG4KKyAgIFM6IDAwM2Y3NDczMGQ0MTBmY2I2NjAzYWNlOTZmMWRjNTVlYTYxOTYxMjI1MzJkIHJlZnMvaGVhZHMvbWFzdGVyXG4KKyAgIFM6IDAwM2Y3NDczMGQ0MTBmY2I2NjAzYWNlOTZmMWRjNTVlYTYxOTYxMjI1MzJkIHJlZnMvaGVhZHMvdGVhbVxuCisgICBTOiAwMDAwCisKKyAgIEM6IDAwM2U3ZDE2NjUxNDRhM2E5NzVjMDVmMWY0MzkwMmRkYWYwODRlNzg0ZGJlIDc0NzMwZDQxMGZjYjY2MDNhY2U5NmYxZGM1NWVhNjE5NjEyMjUzMmQgcmVmcy9oZWFkcy9kZWJ1Z1xuCisgICBDOiAwMDNlNzQ3MzBkNDEwZmNiNjYwM2FjZTk2ZjFkYzU1ZWE2MTk2MTIyNTMyZCA1YTNmNmJlNzU1YmJiN2RlYWU1MDA2NTk4OGNiZmExZmZhOWFiNjhhIHJlZnMvaGVhZHMvbWFzdGVyXG4KKyAgIEM6IDAwMDAKKyAgIEM6IFtQQUNLREFUQV0KKworICAgUzogMDAwYXVucGFjayBva1xuCisgICBTOiAwMDE0b2sgcmVmcy9oZWFkcy9kZWJ1Z1xuCisgICBTOiAwMDI2bmcgcmVmcy9oZWFkcy9tYXN0ZXIgbm9uLWZhc3QtZm9yd2FyZFxuCistLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wcm90b2NvbC1jYXBhYmlsaXRpZXMudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcHJvdG9jb2wtY2FwYWJpbGl0aWVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDFhNTkzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcHJvdG9jb2wtY2FwYWJpbGl0aWVzLnR4dApAQCAtMCwwICsxLDE4NyBAQAorR2l0IFByb3RvY29sIENhcGFiaWxpdGllcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitTZXJ2ZXJzIFNIT1VMRCBzdXBwb3J0IGFsbCBjYXBhYmlsaXRpZXMgZGVmaW5lZCBpbiB0aGlzIGRvY3VtZW50LgorCitPbiB0aGUgdmVyeSBmaXJzdCBsaW5lIG9mIHRoZSBpbml0aWFsIHNlcnZlciByZXNwb25zZSBvZiBlaXRoZXIKK3JlY2VpdmUtcGFjayBhbmQgdXBsb2FkLXBhY2sgdGhlIGZpcnN0IHJlZmVyZW5jZSBpcyBmb2xsb3dlZCBieQorYSBOVUwgYnl0ZSBhbmQgdGhlbiBhIGxpc3Qgb2Ygc3BhY2UgZGVsaW1pdGVkIHNlcnZlciBjYXBhYmlsaXRpZXMuCitUaGVzZSBhbGxvdyB0aGUgc2VydmVyIHRvIGRlY2xhcmUgd2hhdCBpdCBjYW4gYW5kIGNhbm5vdCBzdXBwb3J0Cit0byB0aGUgY2xpZW50LgorCitDbGllbnQgd2lsbCB0aGVuIHNlbmQgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjYXBhYmlsaXRpZXMgaXQgd2FudHMKK3RvIGJlIGluIGVmZmVjdC4gVGhlIGNsaWVudCBNVVNUIE5PVCBhc2sgZm9yIGNhcGFiaWxpdGllcyB0aGUgc2VydmVyCitkaWQgbm90IHNheSBpdCBzdXBwb3J0cy4KKworU2VydmVyIE1VU1QgZGlhZ25vc2UgYW5kIGFib3J0IGlmIGNhcGFiaWxpdGllcyBpdCBkb2VzIG5vdCB1bmRlcnN0YW5kCit3YXMgc2VudC4gIFNlcnZlciBNVVNUIE5PVCBpZ25vcmUgY2FwYWJpbGl0aWVzIHRoYXQgY2xpZW50IHJlcXVlc3RlZAorYW5kIHNlcnZlciBhZHZlcnRpc2VkLiAgQXMgYSBjb25zZXF1ZW5jZSBvZiB0aGVzZSBydWxlcywgc2VydmVyIE1VU1QKK05PVCBhZHZlcnRpc2UgY2FwYWJpbGl0aWVzIGl0IGRvZXMgbm90IHVuZGVyc3RhbmQuCisKK1RoZSAncmVwb3J0LXN0YXR1cycgYW5kICdkZWxldGUtcmVmcycgY2FwYWJpbGl0aWVzIGFyZSBzZW50IGFuZAorcmVjb2duaXplZCBieSB0aGUgcmVjZWl2ZS1wYWNrIChwdXNoIHRvIHNlcnZlcikgcHJvY2Vzcy4KKworVGhlICdvZnMtZGVsdGEnIGNhcGFiaWxpdHkgaXMgc2VudCBhbmQgcmVjb2duaXplZCBieSBib3RoIHVwbG9hZC1wYWNrCithbmQgcmVjZWl2ZS1wYWNrIHByb3RvY29scy4KKworQWxsIG90aGVyIGNhcGFiaWxpdGllcyBhcmUgb25seSByZWNvZ25pemVkIGJ5IHRoZSB1cGxvYWQtcGFjayAoZmV0Y2gKK2Zyb20gc2VydmVyKSBwcm9jZXNzLgorCittdWx0aV9hY2sKKy0tLS0tLS0tLQorCitUaGUgJ211bHRpX2FjaycgY2FwYWJpbGl0eSBhbGxvd3MgdGhlIHNlcnZlciB0byByZXR1cm4gIkFDSyBvYmotaWQKK2NvbnRpbnVlIiBhcyBzb29uIGFzIGl0IGZpbmRzIGEgY29tbWl0IHRoYXQgaXQgY2FuIHVzZSBhcyBhIGNvbW1vbgorYmFzZSwgYmV0d2VlbiB0aGUgY2xpZW50J3Mgd2FudHMgYW5kIHRoZSBjbGllbnQncyBoYXZlIHNldC4KKworQnkgc2VuZGluZyB0aGlzIGVhcmx5LCB0aGUgc2VydmVyIGNhbiBwb3RlbnRpYWxseSBoZWFkIG9mZiB0aGUgY2xpZW50Citmcm9tIHdhbGtpbmcgYW55IGZ1cnRoZXIgZG93biB0aGF0IHBhcnRpY3VsYXIgYnJhbmNoIG9mIHRoZSBjbGllbnQncworcmVwb3NpdG9yeSBoaXN0b3J5LiAgVGhlIGNsaWVudCBtYXkgc3RpbGwgbmVlZCB0byB3YWxrIGRvd24gb3RoZXIKK2JyYW5jaGVzLCBzZW5kaW5nIGhhdmUgbGluZXMgZm9yIHRob3NlLCB1bnRpbCB0aGUgc2VydmVyIGhhcyBhCitjb21wbGV0ZSBjdXQgYWNyb3NzIHRoZSBEQUcsIG9yIHRoZSBjbGllbnQgaGFzIHNhaWQgImRvbmUiLgorCitXaXRob3V0IG11bHRpX2FjaywgYSBjbGllbnQgc2VuZHMgaGF2ZSBsaW5lcyBpbiAtLWRhdGUtb3JkZXIgdW50aWwKK3RoZSBzZXJ2ZXIgaGFzIGZvdW5kIGEgY29tbW9uIGJhc2UuICBUaGF0IG1lYW5zIHRoZSBjbGllbnQgd2lsbCBzZW5kCitoYXZlIGxpbmVzIHRoYXQgYXJlIGFscmVhZHkga25vd24gYnkgdGhlIHNlcnZlciB0byBiZSBjb21tb24sIGJlY2F1c2UKK3RoZXkgb3ZlcmxhcCBpbiB0aW1lIHdpdGggYW5vdGhlciBicmFuY2ggdGhhdCB0aGUgc2VydmVyIGhhc24ndCBmb3VuZAorYSBjb21tb24gYmFzZSBvbiB5ZXQuCisKK0ZvciBleGFtcGxlIHN1cHBvc2UgdGhlIGNsaWVudCBoYXMgY29tbWl0cyBpbiBjYXBzIHRoYXQgdGhlIHNlcnZlcgorZG9lc24ndCBhbmQgdGhlIHNlcnZlciBoYXMgY29tbWl0cyBpbiBsb3dlciBjYXNlIHRoYXQgdGhlIGNsaWVudAorZG9lc24ndCwgYXMgaW4gdGhlIGZvbGxvd2luZyBkaWFncmFtOgorCisgICAgICAgKy0tLS0gdSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHgKKyAgICAgIC8gICAgICAgICAgICAgICstLS0tLSB5CisgICAgIC8gICAgICAgICAgICAgIC8KKyAgICBhIC0tIGIgLS0gYyAtLSBkIC0tIEUgLS0gRgorICAgICAgIFwKKwkrLS0tIFEgLS0gUiAtLSBTCisKK0lmIHRoZSBjbGllbnQgd2FudHMgeCx5IGFuZCBzdGFydHMgb3V0IGJ5IHNheWluZyBoYXZlIEYsUywgdGhlIHNlcnZlcgorZG9lc24ndCBrbm93IHdoYXQgRixTIGlzLiAgRXZlbnR1YWxseSB0aGUgY2xpZW50IHNheXMgImhhdmUgZCIgYW5kCit0aGUgc2VydmVyIHNlbmRzICJBQ0sgZCBjb250aW51ZSIgdG8gbGV0IHRoZSBjbGllbnQga25vdyB0byBzdG9wCit3YWxraW5nIGRvd24gdGhhdCBsaW5lIChzbyBkb24ndCBzZW5kIGMtYi1hKSwgYnV0IGl0J3Mgbm90IGRvbmUgeWV0LAoraXQgbmVlZHMgYSBiYXNlIGZvciB4LiBUaGUgY2xpZW50IGtlZXBzIGdvaW5nIHdpdGggUy1SLVEsIHVudGlsIGEKK2dldHMgcmVhY2hlZCwgYXQgd2hpY2ggcG9pbnQgdGhlIHNlcnZlciBoYXMgYSBjbGVhciBiYXNlIGFuZCBpdCBhbGwKK2VuZHMuCisKK1dpdGhvdXQgbXVsdGlfYWNrIHRoZSBjbGllbnQgd291bGQgaGF2ZSBzZW50IHRoYXQgYy1iLWEgY2hhaW4gYW55d2F5LAoraW50ZXJsZWF2ZWQgd2l0aCBTLVItUS4KKwordGhpbi1wYWNrCistLS0tLS0tLS0KKworVGhpcyBjYXBhYmlsaXR5IG1lYW5zIHRoYXQgdGhlIHNlcnZlciBjYW4gc2VuZCBhICd0aGluJyBwYWNrLCBhIHBhY2sKK3doaWNoIGRvZXMgbm90IGNvbnRhaW4gYmFzZSBvYmplY3RzOyBpZiB0aG9zZSBiYXNlIG9iamVjdHMgYXJlIGF2YWlsYWJsZQorb24gY2xpZW50IHNpZGUuIENsaWVudCByZXF1ZXN0cyAndGhpbi1wYWNrJyBjYXBhYmlsaXR5IHdoZW4gaXQKK3VuZGVyc3RhbmRzIGhvdyB0byAidGhpY2tlbiIgaXQgYnkgYWRkaW5nIHJlcXVpcmVkIGRlbHRhIGJhc2VzIG1ha2luZworaXQgc2VsZi1jb250YWluZWQuCisKK0NsaWVudCBNVVNUIE5PVCByZXF1ZXN0ICd0aGluLXBhY2snIGNhcGFiaWxpdHkgaWYgaXQgY2Fubm90IHR1cm4gYSB0aGluCitwYWNrIGludG8gYSBzZWxmLWNvbnRhaW5lZCBwYWNrLgorCisKK3NpZGUtYmFuZCwgc2lkZS1iYW5kLTY0aworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgY2FwYWJpbGl0eSBtZWFucyB0aGF0IHNlcnZlciBjYW4gc2VuZCwgYW5kIGNsaWVudCB1bmRlcnN0YW5kIG11bHRpcGxleGVkCitwcm9ncmVzcyByZXBvcnRzIGFuZCBlcnJvciBpbmZvIGludGVybGVhdmVkIHdpdGggdGhlIHBhY2tmaWxlIGl0c2VsZi4KKworVGhlc2UgdHdvIG9wdGlvbnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gQSBtb2Rlcm4gY2xpZW50IGFsd2F5cworZmF2b3JzICdzaWRlLWJhbmQtNjRrJy4KKworRWl0aGVyIG1vZGUgaW5kaWNhdGVzIHRoYXQgdGhlIHBhY2tmaWxlIGRhdGEgd2lsbCBiZSBzdHJlYW1lZCBicm9rZW4KK3VwIGludG8gcGFja2V0cyBvZiB1cCB0byBlaXRoZXIgMTAwMCBieXRlcyBpbiB0aGUgY2FzZSBvZiAnc2lkZV9iYW5kJywKK29yIDY1NTIwIGJ5dGVzIGluIHRoZSBjYXNlIG9mICdzaWRlX2JhbmRfNjRrJy4gRWFjaCBwYWNrZXQgaXMgbWFkZSB1cAorb2YgYSBsZWFkaW5nIDQtYnl0ZSBwa3QtbGluZSBsZW5ndGggb2YgaG93IG11Y2ggZGF0YSBpcyBpbiB0aGUgcGFja2V0LAorZm9sbG93ZWQgYnkgYSAxLWJ5dGUgc3RyZWFtIGNvZGUsIGZvbGxvd2VkIGJ5IHRoZSBhY3R1YWwgZGF0YS4KKworVGhlIHN0cmVhbSBjb2RlIGNhbiBiZSBvbmUgb2Y6CisKKyAxIC0gcGFjayBkYXRhCisgMiAtIHByb2dyZXNzIG1lc3NhZ2VzCisgMyAtIGZhdGFsIGVycm9yIG1lc3NhZ2UganVzdCBiZWZvcmUgc3RyZWFtIGFib3J0cworCitUaGUgInNpZGUtYmFuZC02NGsiIGNhcGFiaWxpdHkgY2FtZSBhYm91dCBhcyBhIHdheSBmb3IgbmV3ZXIgY2xpZW50cwordGhhdCBjYW4gaGFuZGxlIG11Y2ggbGFyZ2VyIHBhY2tldHMgdG8gcmVxdWVzdCBwYWNrZXRzIHRoYXQgYXJlCithY3R1YWxseSBjcmFtbWVkIG5lYXJseSBmdWxsLCB3aGlsZSBtYWludGFpbmluZyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5Citmb3IgdGhlIG9sZGVyIGNsaWVudHMuCisKK0Z1cnRoZXIsIHdpdGggc2lkZS1iYW5kIGFuZCBpdHMgdXAgdG8gMTAwMC1ieXRlIG1lc3NhZ2VzLCBpdCdzIGFjdHVhbGx5Cis5OTkgYnl0ZXMgb2YgcGF5bG9hZCBhbmQgMSBieXRlIGZvciB0aGUgc3RyZWFtIGNvZGUuIFdpdGggc2lkZS1iYW5kLTY0aywKK3NhbWUgZGVhbCwgeW91IGhhdmUgdXAgdG8gNjU1MTkgYnl0ZXMgb2YgZGF0YSBhbmQgMSBieXRlIGZvciB0aGUgc3RyZWFtCitjb2RlLgorCitUaGUgY2xpZW50IE1VU1Qgc2VuZCBvbmx5IG1heGltdW0gb2Ygb25lIG9mICJzaWRlLWJhbmQiIGFuZCAic2lkZS0KK2JhbmQtNjRrIi4gIFNlcnZlciBNVVNUIGRpYWdub3NlIGl0IGFzIGFuIGVycm9yIGlmIGNsaWVudCByZXF1ZXN0cworYm90aC4KKworb2ZzLWRlbHRhCistLS0tLS0tLS0KKworU2VydmVyIGNhbiBzZW5kLCBhbmQgY2xpZW50IHVuZGVyc3RhbmQgUEFDS3YyIHdpdGggZGVsdGEgcmVmZXJpbmcgdG8KK2l0cyBiYXNlIGJ5IHBvc2l0aW9uIGluIHBhY2sgcmF0aGVyIHRoYW4gYnkgYW4gb2JqLWlkLiAgVGhhdCBpcywgdGhleSBjYW4KK3NlbmQvcmVhZCBPQkpfT0ZTX0RFTFRBIChha2EgdHlwZSA2KSBpbiBhIHBhY2tmaWxlLgorCitzaGFsbG93CistLS0tLS0tCisKK1RoaXMgY2FwYWJpbGl0eSBhZGRzICJkZWVwZW4iLCAic2hhbGxvdyIgYW5kICJ1bnNoYWxsb3ciIGNvbW1hbmRzIHRvCit0aGUgIGZldGNoLXBhY2svdXBsb2FkLXBhY2sgcHJvdG9jb2wgc28gY2xpZW50cyBjYW4gcmVxdWVzdCBzaGFsbG93CitjbG9uZXMuCisKK25vLXByb2dyZXNzCistLS0tLS0tLS0tLQorCitUaGUgY2xpZW50IHdhcyBzdGFydGVkIHdpdGggImdpdCBjbG9uZSAtcSIgb3Igc29tZXRoaW5nLCBhbmQgZG9lc24ndAord2FudCB0aGF0IHNpZGUgYmFuZCAyLiAgQmFzaWNhbGx5IHRoZSBjbGllbnQganVzdCBzYXlzICJJIGRvIG5vdAord2lzaCB0byByZWNlaXZlIHN0cmVhbSAyIG9uIHNpZGViYW5kLCBzbyBkbyBub3Qgc2VuZCBpdCB0byBtZSwgYW5kIGlmCit5b3UgZGlkLCBJIHdpbGwgZHJvcCBpdCBvbiB0aGUgZmxvb3IgYW55d2F5Ii4gIEhvd2V2ZXIsIHRoZSBzaWRlYmFuZAorY2hhbm5lbCAzIGlzIHN0aWxsIHVzZWQgZm9yIGVycm9yIHJlc3BvbnNlcy4KKworaW5jbHVkZS10YWcKKy0tLS0tLS0tLS0tCisKK1RoZSAnaW5jbHVkZS10YWcnIGNhcGFiaWxpdHkgaXMgYWJvdXQgc2VuZGluZyBhbm5vdGF0ZWQgdGFncyBpZiB3ZSBhcmUKK3NlbmRpbmcgb2JqZWN0cyB0aGV5IHBvaW50IHRvLiAgSWYgd2UgcGFjayBhbiBvYmplY3QgdG8gdGhlIGNsaWVudCwgYW5kCithIHRhZyBvYmplY3QgcG9pbnRzIGV4YWN0bHkgYXQgdGhhdCBvYmplY3QsIHdlIHBhY2sgdGhlIHRhZyBvYmplY3QgdG9vLgorSW4gZ2VuZXJhbCB0aGlzIGFsbG93cyBhIGNsaWVudCB0byBnZXQgYWxsIG5ldyBhbm5vdGF0ZWQgdGFncyB3aGVuIGl0CitmZXRjaGVzIGEgYnJhbmNoLCBpbiBhIHNpbmdsZSBuZXR3b3JrIGNvbm5lY3Rpb24uCisKK0NsaWVudHMgTUFZIGFsd2F5cyBzZW5kIGluY2x1ZGUtdGFnLCBoYXJkY29kaW5nIGl0IGludG8gYSByZXF1ZXN0IHdoZW4KK3RoZSBzZXJ2ZXIgYWR2ZXJ0aXNlcyB0aGlzIGNhcGFiaWxpdHkuIFRoZSBkZWNpc2lvbiBmb3IgYSBjbGllbnQgdG8KK3JlcXVlc3QgaW5jbHVkZS10YWcgb25seSBoYXMgdG8gZG8gd2l0aCB0aGUgY2xpZW50J3MgZGVzaXJlcyBmb3IgdGFnCitkYXRhLCB3aGV0aGVyIG9yIG5vdCBhIHNlcnZlciBoYWQgYWR2ZXJ0aXNlZCBvYmplY3RzIGluIHRoZQorcmVmcy90YWdzLyogbmFtZXNwYWNlLgorCitTZXJ2ZXJzIE1VU1QgcGFjayB0aGUgdGFncyBpZiB0aGVpciByZWZlcnJhbnQgaXMgcGFja2VkIGFuZCB0aGUgY2xpZW50CitoYXMgcmVxdWVzdGVkIGluY2x1ZGUtdGFncy4KKworQ2xpZW50cyBNVVNUIGJlIHByZXBhcmVkIGZvciB0aGUgY2FzZSB3aGVyZSBhIHNlcnZlciBoYXMgaWdub3JlZAoraW5jbHVkZS10YWcgYW5kIGhhcyBub3QgYWN0dWFsbHkgc2VudCB0YWdzIGluIHRoZSBwYWNrLiAgSW4gc3VjaAorY2FzZXMgdGhlIGNsaWVudCBTSE9VTEQgaXNzdWUgYSBzdWJzZXF1ZW50IGZldGNoIHRvIGFjcXVpcmUgdGhlIHRhZ3MKK3RoYXQgaW5jbHVkZS10YWcgd291bGQgaGF2ZSBvdGhlcndpc2UgZ2l2ZW4gdGhlIGNsaWVudC4KKworVGhlIHNlcnZlciBTSE9VTEQgc2VuZCBpbmNsdWRlLXRhZywgaWYgaXQgc3VwcG9ydHMgaXQsIHJlZ2FyZGxlc3MKK29mIHdoZXRoZXIgb3Igbm90IHRoZXJlIGFyZSB0YWdzIGF2YWlsYWJsZS4KKworcmVwb3J0LXN0YXR1cworLS0tLS0tLS0tLS0tLQorCitUaGUgdXBsb2FkLXBhY2sgcHJvY2VzcyBjYW4gcmVjZWl2ZSBhICdyZXBvcnQtc3RhdHVzJyBjYXBhYmlsaXR5LAord2hpY2ggdGVsbHMgaXQgdGhhdCB0aGUgY2xpZW50IHdhbnRzIGEgcmVwb3J0IG9mIHdoYXQgaGFwcGVuZWQgYWZ0ZXIKK2EgcGFja2ZpbGUgdXBsb2FkIGFuZCByZWZlcmVuY2UgdXBkYXRlLiAgSWYgdGhlIHB1c2hpbmcgY2xpZW50IHJlcXVlc3RzCit0aGlzIGNhcGFiaWxpdHksIGFmdGVyIHVucGFja2luZyBhbmQgdXBkYXRpbmcgcmVmZXJlbmNlcyB0aGUgc2VydmVyCit3aWxsIHJlc3BvbmQgd2l0aCB3aGV0aGVyIHRoZSBwYWNrZmlsZSB1bnBhY2tlZCBzdWNjZXNzZnVsbHkgYW5kIGlmCitlYWNoIHJlZmVyZW5jZSB3YXMgdXBkYXRlZCBzdWNjZXNzZnVsbHkuICBJZiBhbnkgb2YgdGhvc2Ugd2VyZSBub3QKK3N1Y2Nlc3NmdWwsIGl0IHdpbGwgc2VuZCBiYWNrIGFuIGVycm9yIG1lc3NhZ2UuICBTZWUgcGFjay1wcm90b2NvbC50eHQKK2ZvciBleGFtcGxlIG1lc3NhZ2VzLgorCitkZWxldGUtcmVmcworLS0tLS0tLS0tLS0KKworSWYgdGhlIHNlcnZlciBzZW5kcyBiYWNrIHRoZSAnZGVsZXRlLXJlZnMnIGNhcGFiaWxpdHksIGl0IG1lYW5zIHRoYXQKK2l0IGlzIGNhcGFibGUgb2YgYWNjZXB0aW5nIGEgemVyby1pZCB2YWx1ZSBhcyB0aGUgdGFyZ2V0Cit2YWx1ZSBvZiBhIHJlZmVyZW5jZSB1cGRhdGUuICBJdCBpcyBub3Qgc2VudCBiYWNrIGJ5IHRoZSBjbGllbnQsIGl0CitzaW1wbHkgaW5mb3JtcyB0aGUgY2xpZW50IHRoYXQgaXQgY2FuIGJlIHNlbnQgemVyby1pZCB2YWx1ZXMKK3RvIGRlbGV0ZSByZWZlcmVuY2VzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcHJvdG9jb2wtY29tbW9uLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3Byb3RvY29sLWNvbW1vbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMwYTFiOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3Byb3RvY29sLWNvbW1vbi50eHQKQEAgLTAsMCArMSw5NiBAQAorRG9jdW1lbnRhdGlvbiBDb21tb24gdG8gUGFjayBhbmQgSHR0cCBQcm90b2NvbHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FCTkYgTm90YXRpb24KKy0tLS0tLS0tLS0tLS0KKworQUJORiBub3RhdGlvbiBhcyBkZXNjcmliZWQgYnkgUkZDIDUyMzQgaXMgdXNlZCB3aXRoaW4gdGhlIHByb3RvY29sIGRvY3VtZW50cywKK2V4Y2VwdCB0aGUgZm9sbG93aW5nIHJlcGxhY2VtZW50IGNvcmUgcnVsZXMgYXJlIHVzZWQ6CistLS0tCisgIEhFWERJRyAgICA9ICBESUdJVCAvICJhIiAvICJiIiAvICJjIiAvICJkIiAvICJlIiAvICJmIgorLS0tLQorCitXZSBhbHNvIGRlZmluZSB0aGUgZm9sbG93aW5nIGNvbW1vbiBydWxlczoKKy0tLS0KKyAgTlVMICAgICAgID0gICV4MDAKKyAgemVyby1pZCAgID0gIDQwKiIwIgorICBvYmotaWQgICAgPSAgNDAqKEhFWERJR0lUKQorCisgIHJlZm5hbWUgID0gICJIRUFEIgorICByZWZuYW1lIC89ICAicmVmcy8iIDxzZWUgZGlzY3Vzc2lvbiBiZWxvdz4KKy0tLS0KKworQSByZWZuYW1lIGlzIGEgaGllcmFyY2hpY2FsIG9jdGV0IHN0cmluZyBiZWdpbm5pbmcgd2l0aCAicmVmcy8iIGFuZAorbm90IHZpb2xhdGluZyB0aGUgJ2dpdC1jaGVjay1yZWYtZm9ybWF0JyBjb21tYW5kJ3MgdmFsaWRhdGlvbiBydWxlcy4KK01vcmUgc3BlY2lmaWNhbGx5LCB0aGV5OgorCisuIFRoZXkgY2FuIGluY2x1ZGUgc2xhc2ggYC9gIGZvciBoaWVyYXJjaGljYWwgKGRpcmVjdG9yeSkKKyAgZ3JvdXBpbmcsIGJ1dCBubyBzbGFzaC1zZXBhcmF0ZWQgY29tcG9uZW50IGNhbiBiZWdpbiB3aXRoIGEKKyAgZG90IGAuYC4KKworLiBUaGV5IG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgYC9gLiBUaGlzIGVuZm9yY2VzIHRoZSBwcmVzZW5jZSBvZiBhCisgIGNhdGVnb3J5IGxpa2UgYGhlYWRzL2AsIGB0YWdzL2AgZXRjLiBidXQgdGhlIGFjdHVhbCBuYW1lcyBhcmUgbm90CisgIHJlc3RyaWN0ZWQuCisKKy4gVGhleSBjYW5ub3QgaGF2ZSB0d28gY29uc2VjdXRpdmUgZG90cyBgLi5gIGFueXdoZXJlLgorCisuIFRoZXkgY2Fubm90IGhhdmUgQVNDSUkgY29udHJvbCBjaGFyYWN0ZXJzIChpLmUuIGJ5dGVzIHdob3NlCisgIHZhbHVlcyBhcmUgbG93ZXIgdGhhbiBcMDQwLCBvciBcMTc3IGBERUxgKSwgc3BhY2UsIHRpbGRlIGB+YCwKKyAgY2FyZXQgYHtjYXJldH1gLCBjb2xvbiBgOmAsIHF1ZXN0aW9uLW1hcmsgYD9gLCBhc3RlcmlzayBgKmAsCisgIG9yIG9wZW4gYnJhY2tldCBgW2AgYW55d2hlcmUuCisKKy4gVGhleSBjYW5ub3QgZW5kIHdpdGggYSBzbGFzaCBgL2Agbm9yIGEgZG90IGAuYC4KKworLiBUaGV5IGNhbm5vdCBlbmQgd2l0aCB0aGUgc2VxdWVuY2UgYC5sb2NrYC4KKworLiBUaGV5IGNhbm5vdCBjb250YWluIGEgc2VxdWVuY2UgYEB7YC4KKworLiBUaGV5IGNhbm5vdCBjb250YWluIGEgYFxcYC4KKworCitwa3QtbGluZSBGb3JtYXQKKy0tLS0tLS0tLS0tLS0tLQorCitNdWNoIChidXQgbm90IGFsbCkgb2YgdGhlIHBheWxvYWQgaXMgZGVzY3JpYmVkIGFyb3VuZCBwa3QtbGluZXMuCisKK0EgcGt0LWxpbmUgaXMgYSB2YXJpYWJsZSBsZW5ndGggYmluYXJ5IHN0cmluZy4gIFRoZSBmaXJzdCBmb3VyIGJ5dGVzCitvZiB0aGUgbGluZSwgdGhlIHBrdC1sZW4sIGluZGljYXRlcyB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZSBsaW5lLAoraW4gaGV4YWRlY2ltYWwuICBUaGUgcGt0LWxlbiBpbmNsdWRlcyB0aGUgNCBieXRlcyB1c2VkIHRvIGNvbnRhaW4KK3RoZSBsZW5ndGgncyBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbi4KKworQSBwa3QtbGluZSBNQVkgY29udGFpbiBiaW5hcnkgZGF0YSwgc28gaW1wbGVtZW50b3JzIE1VU1QgZW5zdXJlCitwa3QtbGluZSBwYXJzaW5nL2Zvcm1hdHRpbmcgcm91dGluZXMgYXJlIDgtYml0IGNsZWFuLgorCitBIG5vbi1iaW5hcnkgbGluZSBTSE9VTEQgQkUgdGVybWluYXRlZCBieSBhbiBMRiwgd2hpY2ggaWYgcHJlc2VudAorTVVTVCBiZSBpbmNsdWRlZCBpbiB0aGUgdG90YWwgbGVuZ3RoLgorCitUaGUgbWF4aW11bSBsZW5ndGggb2YgYSBwa3QtbGluZSdzIGRhdGEgY29tcG9uZW50IGlzIDY1NTIwIGJ5dGVzLgorSW1wbGVtZW50YXRpb25zIE1VU1QgTk9UIHNlbmQgcGt0LWxpbmUgd2hvc2UgbGVuZ3RoIGV4Y2VlZHMgNjU1MjQKKyg2NTUyMCBieXRlcyBvZiBwYXlsb2FkICsgNCBieXRlcyBvZiBsZW5ndGggZGF0YSkuCisKK0ltcGxlbWVudGF0aW9ucyBTSE9VTEQgTk9UIHNlbmQgYW4gZW1wdHkgcGt0LWxpbmUgKCIwMDA0IikuCisKK0EgcGt0LWxpbmUgd2l0aCBhIGxlbmd0aCBmaWVsZCBvZiAwICgiMDAwMCIpLCBjYWxsZWQgYSBmbHVzaC1wa3QsCitpcyBhIHNwZWNpYWwgY2FzZSBhbmQgTVVTVCBiZSBoYW5kbGVkIGRpZmZlcmVudGx5IHRoYW4gYW4gZW1wdHkKK3BrdC1saW5lICgiMDAwNCIpLgorCistLS0tCisgIHBrdC1saW5lICAgICA9ICBkYXRhLXBrdCAvIGZsdXNoLXBrdAorCisgIGRhdGEtcGt0ICAgICA9ICBwa3QtbGVuIHBrdC1wYXlsb2FkCisgIHBrdC1sZW4gICAgICA9ICA0KihIRVhESUcpCisgIHBrdC1wYXlsb2FkICA9ICAocGt0LWxlbiAtIDQpKihPQ1RFVCkKKworICBmbHVzaC1wa3QgICAgPSAiMDAwMCIKKy0tLS0KKworRXhhbXBsZXMgKGFzIEMtc3R5bGUgc3RyaW5ncyk6CisKKy0tLS0KKyAgcGt0LWxpbmUgICAgICAgICAgYWN0dWFsIHZhbHVlCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAiMDAwNmFcbiIgICAgICAgICAiYVxuIgorICAiMDAwNWEiICAgICAgICAgICAiYSIKKyAgIjAwMGJmb29iYXJcbiIgICAgImZvb2JhclxuIgorICAiMDAwNCIgICAgICAgICAgICAiIgorLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcmFjeS1naXQudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcmFjeS1naXQudHh0CmluZGV4IDQ4YmI5N2YuLjUzYWEwYzggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3JhY3ktZ2l0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9yYWN5LWdpdC50eHQKQEAgLTQyLDEwICs0MiwxMiBAQAogaXMgbm90IHN0YWJsZSBvbiBuZXR3b3JrIGZpbGVzeXN0ZW1zLiAgV2l0aCBgVVNFX05TRUNgCiBjb21waWxlLXRpbWUgb3B0aW9uLCBgc3RfbXRpbS50dl9uc2VjYCBhbmQgYHN0X2N0aW0udHZfbnNlY2AKIG1lbWJlcnMgYXJlIGFsc28gY29tcGFyZWQsIGJ1dCB0aGlzIGlzIG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQKLWJlY2F1c2UgdGhlIHZhbHVlIG9mIHRoaXMgbWVtYmVyIGJlY29tZXMgbWVhbmluZ2xlc3Mgb25jZSB0aGUKLWlub2RlIGlzIGV2aWN0ZWQgZnJvbSB0aGUgaW5vZGUgY2FjaGUgb24gZmlsZXN5c3RlbXMgdGhhdCBkbyBub3QKLXN0b3JlIGl0IG9uIGRpc2suCi0KK2JlY2F1c2UgaW4tY29yZSB0aW1lc3RhbXBzIGNhbiBoYXZlIGZpbmVyIGdyYW51bGFyaXR5IHRoYW4KK29uLWRpc2sgdGltZXN0YW1wcywgcmVzdWx0aW5nIGluIG1lYW5pbmdsZXNzIGNoYW5nZXMgd2hlbiBhbgoraW5vZGUgaXMgZXZpY3RlZCBmcm9tIHRoZSBpbm9kZSBjYWNoZS4gIFNlZSBjb21taXQgOGNlMTNiMAorb2YgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RnbHgvaGlzdG9yeS5naXQKKyhbUEFUQ0hdIFN5bmMgaW4gY29yZSB0aW1lIGdyYW51YWxpdHkgd2l0aCBmaWxlc3lzdGVtcywKKzIwMDUtMDEtMDQpLgogCiBSYWN5IGdpdAogLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXJscy1yZW1vdGVzLnR4dCBiL0RvY3VtZW50YXRpb24vdXJscy1yZW1vdGVzLnR4dAppbmRleCA0MWVjNzc3Li4wMGY3ZTc5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VybHMtcmVtb3Rlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi91cmxzLXJlbW90ZXMudHh0CkBAIC0yNywxMCArMjcsMTMgQEAKIC0tLS0tLS0tLS0tLQogCVtyZW1vdGUgIjxuYW1lPiJdCiAJCXVybCA9IDx1cmw+CisJCXB1c2h1cmwgPSA8cHVzaHVybD4KIAkJcHVzaCA9IDxyZWZzcGVjPgogCQlmZXRjaCA9IDxyZWZzcGVjPgogLS0tLS0tLS0tLS0tCiAKK1RoZSBgPHB1c2h1cmw+YCBpcyB1c2VkIGZvciBwdXNoZXMgb25seS4gSXQgaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzCit0byBgPHVybD5gLgogCiBOYW1lZCBmaWxlIGluIGAkR0lUX0RJUi9yZW1vdGVzYAogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CkBAIC00OSw4ICs1Miw4IEBACiAKIC0tLS0tLS0tLS0tLQogCi1gUHVzaDpgIGxpbmVzIGFyZSB1c2VkIGJ5ICdnaXQtcHVzaCcgYW5kCi1gUHVsbDpgIGxpbmVzIGFyZSB1c2VkIGJ5ICdnaXQtcHVsbCcgYW5kICdnaXQtZmV0Y2gnLgorYFB1c2g6YCBsaW5lcyBhcmUgdXNlZCBieSAnZ2l0IHB1c2gnIGFuZAorYFB1bGw6YCBsaW5lcyBhcmUgdXNlZCBieSAnZ2l0IHB1bGwnIGFuZCAnZ2l0IGZldGNoJy4KIE11bHRpcGxlIGBQdXNoOmAgYW5kIGBQdWxsOmAgbGluZXMgbWF5CiBiZSBzcGVjaWZpZWQgZm9yIGFkZGl0aW9uYWwgYnJhbmNoIG1hcHBpbmdzLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VybHMudHh0IGIvRG9jdW1lbnRhdGlvbi91cmxzLnR4dAppbmRleCA1MzU1ZWJjLi40NTlhMzk0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VybHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXJscy50eHQKQEAgLTQsNyArNCw2IEBACiBPbmUgb2YgdGhlIGZvbGxvd2luZyBub3RhdGlvbnMgY2FuIGJlIHVzZWQKIHRvIG5hbWUgdGhlIHJlbW90ZSByZXBvc2l0b3J5OgogCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC0gcnN5bmM6Ly9ob3N0Lnh6L3BhdGgvdG8vcmVwby5naXQvCiAtIGh0dHA6Ly9ob3N0Lnh6e3N0YXJ0c2J9OnBvcnR7ZW5kc2J9L3BhdGgvdG8vcmVwby5naXQvCiAtIGh0dHBzOi8vaG9zdC54entzdGFydHNifTpwb3J0e2VuZHNifS9wYXRoL3RvL3JlcG8uZ2l0LwpAQCAtMTQsNyArMTMsNiBAQAogLSBzc2g6Ly97c3RhcnRzYn11c2VyQHtlbmRzYn1ob3N0Lnh6L3BhdGgvdG8vcmVwby5naXQvCiAtIHNzaDovL3tzdGFydHNifXVzZXJAe2VuZHNifWhvc3QueHovfnVzZXIvcGF0aC90by9yZXBvLmdpdC8KIC0gc3NoOi8ve3N0YXJ0c2J9dXNlckB7ZW5kc2J9aG9zdC54ei9+L3BhdGgvdG8vcmVwby5naXQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBTU0ggaXMgdGhlIGRlZmF1bHQgdHJhbnNwb3J0IHByb3RvY29sIG92ZXIgdGhlIG5ldHdvcmsuICBZb3UgY2FuCiBvcHRpb25hbGx5IHNwZWNpZnkgd2hpY2ggdXNlciB0byBsb2ctaW4gYXMsIGFuZCBhbiBhbHRlcm5hdGUsCkBAIC0yMywxOCArMjEsMTQgQEAKIG9ubHkgdGhlIGZvcm1lciBzdXBwb3J0cyBwb3J0IHNwZWNpZmljYXRpb24uIFRoZSBmb2xsb3dpbmcKIHRocmVlIGFyZSBpZGVudGljYWwgdG8gdGhlIGxhc3QgdGhyZWUgYWJvdmUsIHJlc3BlY3RpdmVseToKIAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAtIHtzdGFydHNifXVzZXJAe2VuZHNifWhvc3QueHo6L3BhdGgvdG8vcmVwby5naXQvCiAtIHtzdGFydHNifXVzZXJAe2VuZHNifWhvc3QueHo6fnVzZXIvcGF0aC90by9yZXBvLmdpdC8KIC0ge3N0YXJ0c2J9dXNlckB7ZW5kc2J9aG9zdC54ejpwYXRoL3RvL3JlcG8uZ2l0Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogVG8gc3luYyB3aXRoIGEgbG9jYWwgZGlyZWN0b3J5LCB5b3UgY2FuIHVzZToKIAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAtIC9wYXRoL3RvL3JlcG8uZ2l0LwogLSBmaWxlOi8vL3BhdGgvdG8vcmVwby5naXQvCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogaWZuZGVmOjpnaXQtY2xvbmVbXQogVGhleSBhcmUgbW9zdGx5IGVxdWl2YWxlbnQsIGV4Y2VwdCB3aGVuIGNsb25pbmcuICBTZWUKQEAgLTY3LDMgKzYxLDIxIEBACiBhIFVSTCBsaWtlICJ3b3JrOnJlcG8uZ2l0IiBvciBsaWtlICJob3N0Lnh6Oi9wYXRoL3RvL3JlcG8uZ2l0IiB3aWxsIGJlCiByZXdyaXR0ZW4gaW4gYW55IGNvbnRleHQgdGhhdCB0YWtlcyBhIFVSTCB0byBiZSAiZ2l0Oi8vZ2l0Lmhvc3QueHovcmVwby5naXQiLgogCitJZiB5b3Ugd2FudCB0byByZXdyaXRlIFVSTHMgZm9yIHB1c2ggb25seSwgeW91IGNhbiBjcmVhdGUgYQorY29uZmlndXJhdGlvbiBzZWN0aW9uIG9mIHRoZSBmb3JtOgorCistLS0tLS0tLS0tLS0KKwlbdXJsICI8YWN0dWFsIHVybCBiYXNlPiJdCisJCXB1c2hJbnN0ZWFkT2YgPSA8b3RoZXIgdXJsIGJhc2U+CistLS0tLS0tLS0tLS0KKworRm9yIGV4YW1wbGUsIHdpdGggdGhpczoKKworLS0tLS0tLS0tLS0tCisJW3VybCAic3NoOi8vZXhhbXBsZS5vcmcvIl0KKwkJcHVzaEluc3RlYWRPZiA9IGdpdDovL2V4YW1wbGUub3JnLworLS0tLS0tLS0tLS0tCisKK2EgVVJMIGxpa2UgImdpdDovL2V4YW1wbGUub3JnL3BhdGgvdG8vcmVwby5naXQiIHdpbGwgYmUgcmV3cml0dGVuIHRvCisic3NoOi8vZXhhbXBsZS5vcmcvcGF0aC90by9yZXBvLmdpdCIgZm9yIHB1c2hlcywgYnV0IHB1bGxzIHdpbGwgc3RpbGwKK3VzZSB0aGUgb3JpZ2luYWwgVVJMLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2VyLW1hbnVhbC50eHQgYi9Eb2N1bWVudGF0aW9uL3VzZXItbWFudWFsLnR4dAppbmRleCA2N2ViZmZhLi5mZTZmYjcyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VzZXItbWFudWFsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3VzZXItbWFudWFsLnR4dApAQCAtMTE4Myw3ICsxMTgzLDIzIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIG1lcmdlcyB0aGUgZGV2ZWxvcG1lbnQgaW4gdGhlIGJyYW5jaCAiYnJhbmNobmFtZSIgaW50byB0aGUgY3VycmVudAotYnJhbmNoLiAgSWYgdGhlcmUgYXJlIGNvbmZsaWN0cy0tZm9yIGV4YW1wbGUsIGlmIHRoZSBzYW1lIGZpbGUgaXMKK2JyYW5jaC4KKworQSBtZXJnZSBpcyBtYWRlIGJ5IGNvbWJpbmluZyB0aGUgY2hhbmdlcyBtYWRlIGluICJicmFuY2huYW1lIiBhbmQgdGhlCitjaGFuZ2VzIG1hZGUgdXAgdG8gdGhlIGxhdGVzdCBjb21taXQgaW4geW91ciBjdXJyZW50IGJyYW5jaCBzaW5jZQordGhlaXIgaGlzdG9yaWVzIGZvcmtlZC4gVGhlIHdvcmsgdHJlZSBpcyBvdmVyd3JpdHRlbiBieSB0aGUgcmVzdWx0IG9mCit0aGUgbWVyZ2Ugd2hlbiB0aGlzIGNvbWJpbmluZyBpcyBkb25lIGNsZWFubHksIG9yIG92ZXJ3cml0dGVuIGJ5IGEKK2hhbGYtbWVyZ2VkIHJlc3VsdHMgd2hlbiB0aGlzIGNvbWJpbmluZyByZXN1bHRzIGluIGNvbmZsaWN0cy4KK1RoZXJlZm9yZSwgaWYgeW91IGhhdmUgdW5jb21taXR0ZWQgY2hhbmdlcyB0b3VjaGluZyB0aGUgc2FtZSBmaWxlcyBhcwordGhlIG9uZXMgaW1wYWN0ZWQgYnkgdGhlIG1lcmdlLCBHaXQgd2lsbCByZWZ1c2UgdG8gcHJvY2VlZC4gTW9zdCBvZgordGhlIHRpbWUsIHlvdSB3aWxsIHdhbnQgdG8gY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IGNhbiBtZXJnZSwKK2FuZCBpZiB5b3UgZG9uJ3QsIHRoZW4gbGlua2dpdDpnaXQtc3Rhc2hbMV0gY2FuIHRha2UgdGhlc2UgY2hhbmdlcworYXdheSB3aGlsZSB5b3UncmUgZG9pbmcgdGhlIG1lcmdlLCBhbmQgcmVhcHBseSB0aGVtIGFmdGVyd2FyZHMuCisKK0lmIHRoZSBjaGFuZ2VzIGFyZSBpbmRlcGVuZGVudCBlbm91Z2gsIEdpdCB3aWxsIGF1dG9tYXRpY2FsbHkgY29tcGxldGUKK3RoZSBtZXJnZSBhbmQgY29tbWl0IHRoZSByZXN1bHQgKG9yIHJldXNlIGFuIGV4aXN0aW5nIGNvbW1pdCBpbiBjYXNlCitvZiA8PGZhc3QtZm9yd2FyZHMsZmFzdC1mb3J3YXJkPj4sIHNlZSBiZWxvdykuIE9uIHRoZSBvdGhlciBoYW5kLAoraWYgdGhlcmUgYXJlIGNvbmZsaWN0cy0tZm9yIGV4YW1wbGUsIGlmIHRoZSBzYW1lIGZpbGUgaXMKIG1vZGlmaWVkIGluIHR3byBkaWZmZXJlbnQgd2F5cyBpbiB0aGUgcmVtb3RlIGJyYW5jaCBhbmQgdGhlIGxvY2FsCiBicmFuY2gtLXRoZW4geW91IGFyZSB3YXJuZWQ7IHRoZSBvdXRwdXQgbWF5IGxvb2sgc29tZXRoaW5nIGxpa2UgdGhpczoKIApAQCAtMTM4NCw3ICsxNDAwLDcgQEAKIAogSG93ZXZlciwgaWYgdGhlIGN1cnJlbnQgYnJhbmNoIGlzIGEgZGVzY2VuZGFudCBvZiB0aGUgb3RoZXItLXNvIGV2ZXJ5CiBjb21taXQgcHJlc2VudCBpbiB0aGUgb25lIGlzIGFscmVhZHkgY29udGFpbmVkIGluIHRoZSBvdGhlci0tdGhlbiBnaXQKLWp1c3QgcGVyZm9ybXMgYSAiZmFzdCBmb3J3YXJkIjsgdGhlIGhlYWQgb2YgdGhlIGN1cnJlbnQgYnJhbmNoIGlzIG1vdmVkCitqdXN0IHBlcmZvcm1zIGEgImZhc3QtZm9yd2FyZCI7IHRoZSBoZWFkIG9mIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBtb3ZlZAogZm9yd2FyZCB0byBwb2ludCBhdCB0aGUgaGVhZCBvZiB0aGUgbWVyZ2VkLWluIGJyYW5jaCwgd2l0aG91dCBhbnkgbmV3CiBjb21taXRzIGJlaW5nIGNyZWF0ZWQuCiAKQEAgLTE2NzksNyArMTY5NSw3IEBACiBHZXR0aW5nIHVwZGF0ZXMgd2l0aCBnaXQgcHVsbAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQWZ0ZXIgeW91IGNsb25lIGEgcmVwb3NpdG9yeSBhbmQgbWFrZSBhIGZldyBjaGFuZ2VzIG9mIHlvdXIgb3duLCB5b3UKK0FmdGVyIHlvdSBjbG9uZSBhIHJlcG9zaXRvcnkgYW5kIGNvbW1pdCBhIGZldyBjaGFuZ2VzIG9mIHlvdXIgb3duLCB5b3UKIG1heSB3aXNoIHRvIGNoZWNrIHRoZSBvcmlnaW5hbCByZXBvc2l0b3J5IGZvciB1cGRhdGVzIGFuZCBtZXJnZSB0aGVtCiBpbnRvIHlvdXIgb3duIHdvcmsuCiAKQEAgLTE3MTksNyArMTczNSw3IEBACiByZXBvc2l0b3J5IHRoYXQgeW91IHB1bGxlZCBmcm9tLgogCiAoQnV0IG5vdGUgdGhhdCBubyBzdWNoIGNvbW1pdCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIGNhc2Ugb2YgYQotPDxmYXN0LWZvcndhcmRzLGZhc3QgZm9yd2FyZD4+OyBpbnN0ZWFkLCB5b3VyIGJyYW5jaCB3aWxsIGp1c3QgYmUKKzw8ZmFzdC1mb3J3YXJkcyxmYXN0LWZvcndhcmQ+PjsgaW5zdGVhZCwgeW91ciBicmFuY2ggd2lsbCBqdXN0IGJlCiB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBsYXRlc3QgY29tbWl0IGZyb20gdGhlIHVwc3RyZWFtIGJyYW5jaC4pCiAKIFRoZSBgZ2l0IHB1bGxgIGNvbW1hbmQgY2FuIGFsc28gYmUgZ2l2ZW4gIi4iIGFzIHRoZSAicmVtb3RlIiByZXBvc2l0b3J5LApAQCAtMTk0Myw3ICsxOTU5LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogQXMgd2l0aCBgZ2l0IGZldGNoYCwgYGdpdCBwdXNoYCB3aWxsIGNvbXBsYWluIGlmIHRoaXMgZG9lcyBub3QgcmVzdWx0IGluIGEKLTw8ZmFzdC1mb3J3YXJkcyxmYXN0IGZvcndhcmQ+Pjsgc2VlIHRoZSBmb2xsb3dpbmcgc2VjdGlvbiBmb3IgZGV0YWlscyBvbgorPDxmYXN0LWZvcndhcmRzLGZhc3QtZm9yd2FyZD4+OyBzZWUgdGhlIGZvbGxvd2luZyBzZWN0aW9uIGZvciBkZXRhaWxzIG9uCiBoYW5kbGluZyB0aGlzIGNhc2UuCiAKIE5vdGUgdGhhdCB0aGUgdGFyZ2V0IG9mIGEgInB1c2giIGlzIG5vcm1hbGx5IGEKQEAgLTE5NzYsNyArMTk5Miw3IEBACiBXaGF0IHRvIGRvIHdoZW4gYSBwdXNoIGZhaWxzCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKLUlmIGEgcHVzaCB3b3VsZCBub3QgcmVzdWx0IGluIGEgPDxmYXN0LWZvcndhcmRzLGZhc3QgZm9yd2FyZD4+IG9mIHRoZQorSWYgYSBwdXNoIHdvdWxkIG5vdCByZXN1bHQgaW4gYSA8PGZhc3QtZm9yd2FyZHMsZmFzdC1mb3J3YXJkPj4gb2YgdGhlCiByZW1vdGUgYnJhbmNoLCB0aGVuIGl0IHdpbGwgZmFpbCB3aXRoIGFuIGVycm9yIGxpa2U6CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIxMTUsNyArMjEzMSw3IEBACiAKIEltcG9ydGFudCBub3RlISAgSWYgeW91IGhhdmUgYW55IGxvY2FsIGNoYW5nZXMgaW4gdGhlc2UgYnJhbmNoZXMsIHRoZW4KIHRoaXMgbWVyZ2Ugd2lsbCBjcmVhdGUgYSBjb21taXQgb2JqZWN0IGluIHRoZSBoaXN0b3J5ICh3aXRoIG5vIGxvY2FsCi1jaGFuZ2VzIGdpdCB3aWxsIHNpbXBseSBkbyBhICJGYXN0IGZvcndhcmQiIG1lcmdlKS4gIE1hbnkgcGVvcGxlIGRpc2xpa2UKK2NoYW5nZXMgZ2l0IHdpbGwgc2ltcGx5IGRvIGEgImZhc3QtZm9yd2FyZCIgbWVyZ2UpLiAgTWFueSBwZW9wbGUgZGlzbGlrZQogdGhlICJub2lzZSIgdGhhdCB0aGlzIGNyZWF0ZXMgaW4gdGhlIExpbnV4IGhpc3RvcnksIHNvIHlvdSBzaG91bGQgYXZvaWQKIGRvaW5nIHRoaXMgY2FwcmljaW91c2x5IGluIHRoZSAicmVsZWFzZSIgYnJhbmNoLCBhcyB0aGVzZSBub2lzeSBjb21taXRzCiB3aWxsIGJlY29tZSBwYXJ0IG9mIHRoZSBwZXJtYW5lbnQgaGlzdG9yeSB3aGVuIHlvdSBhc2sgTGludXMgdG8gcHVsbApAQCAtMjU2OSw3ICsyNTg1LDcgQEAKIE90aGVyIHRvb2xzCiAtLS0tLS0tLS0tLQogCi1UaGVyZSBhcmUgbnVtZXJvdXMgb3RoZXIgdG9vbHMsIHN1Y2ggYXMgU3RHSVQsIHdoaWNoIGV4aXN0IGZvciB0aGUKK1RoZXJlIGFyZSBudW1lcm91cyBvdGhlciB0b29scywgc3VjaCBhcyBTdEdpdCwgd2hpY2ggZXhpc3QgZm9yIHRoZQogcHVycG9zZSBvZiBtYWludGFpbmluZyBhIHBhdGNoIHNlcmllcy4gIFRoZXNlIGFyZSBvdXRzaWRlIG9mIHRoZSBzY29wZSBvZgogdGhpcyBtYW51YWwuCiAKQEAgLTI3MjksOSArMjc0NSw5IEBACiBjaGVja3MgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCBvbiB0aGUgcmVtb3RlCiBicmFuY2ggaXMgYSBkZXNjZW5kYW50IG9mIHRoZSBtb3N0IHJlY2VudCBjb21taXQgb24geW91ciBjb3B5IG9mIHRoZQogYnJhbmNoIGJlZm9yZSB1cGRhdGluZyB5b3VyIGNvcHkgb2YgdGhlIGJyYW5jaCB0byBwb2ludCBhdCB0aGUgbmV3Ci1jb21taXQuICBHaXQgY2FsbHMgdGhpcyBwcm9jZXNzIGEgPDxmYXN0LWZvcndhcmRzLGZhc3QgZm9yd2FyZD4+LgorY29tbWl0LiAgR2l0IGNhbGxzIHRoaXMgcHJvY2VzcyBhIDw8ZmFzdC1mb3J3YXJkcyxmYXN0LWZvcndhcmQ+Pi4KIAotQSBmYXN0IGZvcndhcmQgbG9va3Mgc29tZXRoaW5nIGxpa2UgdGhpczoKK0EgZmFzdC1mb3J3YXJkIGxvb2tzIHNvbWV0aGluZyBsaWtlIHRoaXM6CiAKIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogIG8tLW8tLW8tLW8gPC0tIG9sZCBoZWFkIG9mIHRoZSBicmFuY2gKQEAgLTM2MjQsNiArMzY0MCwyNiBAQAogVW5hYmxlIHRvIGNoZWNrb3V0ICcyNjFkZmFjMzVjYjk5ZDM4MGViOTY2ZTEwMmMxMTk3MTM5ZjdmYTI0JyBpbiBzdWJtb2R1bGUgcGF0aCAnYScKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorSW4gb2xkZXIgZ2l0IHZlcnNpb25zIGl0IGNvdWxkIGJlIGVhc2lseSBmb3Jnb3R0ZW4gdG8gY29tbWl0IG5ldyBvciBtb2RpZmllZAorZmlsZXMgaW4gYSBzdWJtb2R1bGUsIHdoaWNoIHNpbGVudGx5IGxlYWRzIHRvIHNpbWlsYXIgcHJvYmxlbXMgYXMgbm90IHB1c2hpbmcKK3RoZSBzdWJtb2R1bGUgY2hhbmdlcy4gU3RhcnRpbmcgd2l0aCBnaXQgMS43LjAgYm90aCAiZ2l0IHN0YXR1cyIgYW5kICJnaXQgZGlmZiIKK2luIHRoZSBzdXBlcnByb2plY3Qgc2hvdyBzdWJtb2R1bGVzIGFzIG1vZGlmaWVkIHdoZW4gdGhleSBjb250YWluIG5ldyBvcgorbW9kaWZpZWQgZmlsZXMgdG8gcHJvdGVjdCBhZ2FpbnN0IGFjY2lkZW50YWxseSBjb21taXR0aW5nIHN1Y2ggYSBzdGF0ZS4gImdpdAorZGlmZiIgd2lsbCBhbHNvIGFkZCBhICItZGlydHkiIHRvIHRoZSB3b3JrIHRyZWUgc2lkZSB3aGVuIGdlbmVyYXRpbmcgcGF0Y2gKK291dHB1dCBvciB1c2VkIHdpdGggdGhlIC0tc3VibW9kdWxlIG9wdGlvbjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZgorZGlmZiAtLWdpdCBhL3N1YiBiL3N1YgorLS0tIGEvc3ViCisrKysgYi9zdWIKK0BAIC0xICsxIEBACistU3VicHJvamVjdCBjb21taXQgM2YzNTY3MDU2NDliNWQ1NjZkOTdmZjg0M2NmMTkzMzU5MjI5YTQ1MworK1N1YnByb2plY3QgY29tbWl0IDNmMzU2NzA1NjQ5YjVkNTY2ZDk3ZmY4NDNjZjE5MzM1OTIyOWE0NTMtZGlydHkKKyQgZ2l0IGRpZmYgLS1zdWJtb2R1bGUKK1N1Ym1vZHVsZSBzdWIgM2YzNTY3MC4uM2YzNTY3MC1kaXJ0eToKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogWW91IGFsc28gc2hvdWxkIG5vdCByZXdpbmQgYnJhbmNoZXMgaW4gYSBzdWJtb2R1bGUgYmV5b25kIGNvbW1pdHMgdGhhdCB3ZXJlCiBldmVyIHJlY29yZGVkIGluIGFueSBzdXBlcnByb2plY3QuCiAKQEAgLTQyNzUsNyArNDMxMSw3IEBACiBpdHNlbGYhCiAKIFtbZ2xvc3NhcnldXQotR0lUIEdsb3NzYXJ5CitHaXQgR2xvc3NhcnkKID09PT09PT09PT09PQogCiBpbmNsdWRlOjpnbG9zc2FyeS1jb250ZW50LnR4dFtdCmRpZmYgLS1naXQgYS9HSVQtVkVSU0lPTi1HRU4gYi9HSVQtVkVSU0lPTi1HRU4KaW5kZXggYTU2ZGNiMi4uMDc2YzE4ZSAxMDA3NTUKLS0tIGEvR0lULVZFUlNJT04tR0VOCisrKyBiL0dJVC1WRVJTSU9OLUdFTgpAQCAtMSw3ICsxLDcgQEAKICMhL2Jpbi9zaAogCiBHVkY9R0lULVZFUlNJT04tRklMRQotREVGX1ZFUj12MS42LjMuNAorREVGX1ZFUj12MS43LjAuMwogCiBMRj0nCiAnCmRpZmYgLS1naXQgYS9JTlNUQUxMIGIvSU5TVEFMTAppbmRleCBhZTdmNzUwLi42MTA4NmFiIDEwMDY0NAotLS0gYS9JTlNUQUxMCisrKyBiL0lOU1RBTEwKQEAgLTEzLDYgKzEzLDEwIEBACiB3aGljaCBhcmUgZGVyaXZlZCBmcm9tICRwcmVmaXgsIHNvICJtYWtlIGFsbDsgbWFrZSBwcmVmaXg9L3VzcgogaW5zdGFsbCIgd291bGQgbm90IHdvcmsuCiAKK1RoZSBiZWdpbm5pbmcgb2YgdGhlIE1ha2VmaWxlIGRvY3VtZW50cyBtYW55IHZhcmlhYmxlcyB0aGF0IGFmZmVjdCB0aGUgd2F5CitnaXQgaXMgYnVpbHQuICBZb3UgY2FuIG92ZXJyaWRlIHRoZW0gZWl0aGVyIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgb3IgaW4gYQorY29uZmlnLm1hayBmaWxlLgorCiBBbHRlcm5hdGl2ZWx5IHlvdSBjYW4gdXNlIGF1dG9jb25mIGdlbmVyYXRlZCAuL2NvbmZpZ3VyZSBzY3JpcHQgdG8KIHNldCB1cCBpbnN0YWxsIHBhdGhzICh2aWEgY29uZmlnLm1hay5hdXRvZ2VuKSwgc28geW91IGNhbiB3cml0ZSBpbnN0ZWFkCiAKQEAgLTM0LDEzICszOCwxNyBAQAogICAgSW50ZXJhY3RpdmUgVG9vbHMgcGFja2FnZSBzdGlsbCBjYW4gaW5zdGFsbCAiZ2l0IiwgYnV0IHlvdSBjYW4gYnVpbGQgaXQKICAgIHdpdGggLS1kaXNhYmxlLXRyYW5zaXRpb24gb3B0aW9uIHRvIGF2b2lkIHRoaXMuCiAKLSAtIFlvdSBjYW4gdXNlIGdpdCBhZnRlciBidWlsZGluZyBidXQgd2l0aG91dCBpbnN0YWxsaW5nIGlmIHlvdQotICAgd2FudGVkIHRvLiAgVmFyaW91cyBnaXQgY29tbWFuZHMgbmVlZCB0byBmaW5kIG90aGVyIGdpdAotICAgY29tbWFuZHMgYW5kIHNjcmlwdHMgdG8gZG8gdGhlaXIgd29yaywgc28geW91IHdvdWxkIG5lZWQgdG8KLSAgIGFycmFuZ2UgYSBmZXcgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHRlbGwgdGhlbSB0aGF0IHRoZWlyCi0gICBmcmllbmRzIHdpbGwgYmUgZm91bmQgaW4geW91ciBidWlsdCBzb3VyY2UgYXJlYSBpbnN0ZWFkIG9mIGF0Ci0gICB0aGVpciBzdGFuZGFyZCBpbnN0YWxsYXRpb24gYXJlYS4gIFNvbWV0aGluZyBsaWtlIHRoaXMgd29ya3MKLSAgIGZvciBtZToKKyAtIFlvdSBjYW4gdXNlIGdpdCBhZnRlciBidWlsZGluZyBidXQgd2l0aG91dCBpbnN0YWxsaW5nIGlmIHlvdSB3YW50CisgICB0byB0ZXN0IGRyaXZlIGl0LiAgU2ltcGx5IHJ1biBnaXQgZm91bmQgaW4gYmluLXdyYXBwZXJzIGRpcmVjdG9yeQorICAgaW4gdGhlIGJ1aWxkIGRpcmVjdG9yeSwgb3IgcHJlcGVuZCB0aGF0IGRpcmVjdG9yeSB0byB5b3VyICRQQVRILgorICAgVGhpcyBob3dldmVyIGlzIGxlc3MgZWZmaWNpZW50IHRoYW4gcnVubmluZyBhbiBpbnN0YWxsZWQgZ2l0LCBhcworICAgeW91IGFsd2F5cyBuZWVkIGFuIGV4dHJhIGZvcmsrZXhlYyB0byBydW4gYW55IGdpdCBzdWJjb21tYW5kLgorCisgICBJdCBpcyBzdGlsbCBwb3NzaWJsZSB0byB1c2UgZ2l0IHdpdGhvdXQgaW5zdGFsbGluZyBieSBzZXR0aW5nIGEgZmV3CisgICBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHdoaWNoIHdhcyB0aGUgd2F5IHRoaXMgd2FzIGRvbmUKKyAgIHRyYWRpdGlvbmFsbHkuICBCdXQgdXNpbmcgZ2l0IGZvdW5kIGluIGJpbi13cmFwcGVycyBkaXJlY3RvcnkgaW4KKyAgIHRoZSBidWlsZCBkaXJlY3RvcnkgaXMgZmFyIHNpbXBsZXIuICBBcyBhIGhpc3RvcmljYWwgcmVmZXJlbmNlLCB0aGUKKyAgIG9sZCB3YXkgd2VudCBsaWtlIHRoaXM6CiAKIAlHSVRfRVhFQ19QQVRIPWBwd2RgCiAJUEFUSD1gcHdkYDokUEFUSApAQCAtNDgsMzIgKzU2LDQyIEBACiAJZXhwb3J0IEdJVF9FWEVDX1BBVEggUEFUSCBHSVRQRVJMTElCCiAKICAtIEdpdCBpcyByZWFzb25hYmx5IHNlbGYtc3VmZmljaWVudCwgYnV0IGRvZXMgZGVwZW5kIG9uIGEgZmV3IGV4dGVybmFsCi0gICBwcm9ncmFtcyBhbmQgbGlicmFyaWVzOgorICAgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcy4gIEdpdCBjYW4gYmUgdXNlZCB3aXRob3V0IG1vc3Qgb2YgdGhlbSBieSBhZGRpbmcKKyAgIHRoZSBhcHByb3JpYXRlICJOT188TElCUkFSWT49WWVzUGxlYXNlIiB0byB0aGUgbWFrZSBjb21tYW5kIGxpbmUgb3IKKyAgIGNvbmZpZy5tYWsgZmlsZS4KIAogCS0gInpsaWIiLCB0aGUgY29tcHJlc3Npb24gbGlicmFyeS4gR2l0IHdvbid0IGJ1aWxkIHdpdGhvdXQgaXQuCiAKLQktICJvcGVuc3NsIi4gIFVubGVzcyB5b3Ugc3BlY2lmeSBvdGhlcndpc2UsIHlvdSdsbCBnZXQgdGhlIFNIQTEKLQkgIGxpYnJhcnkgZnJvbSBoZXJlLgorCS0gInNzaCIgaXMgdXNlZCB0byBwdXNoIGFuZCBwdWxsIG92ZXIgdGhlIG5ldC4KIAotCSAgSWYgeW91IGRvbid0IGhhdmUgb3BlbnNzbCwgeW91IGNhbiB1c2Ugb25lIG9mIHRoZSBTSEExIGxpYnJhcmllcwotCSAgdGhhdCBjb21lIHdpdGggZ2l0IChnaXQgaW5jbHVkZXMgdGhlIG9uZSBmcm9tIE1vemlsbGEsIGFuZCBoYXMKLQkgIGl0cyBvd24gUG93ZXJQQyBhbmQgQVJNIG9wdGltaXplZCBvbmVzIHRvbyAtIHNlZSB0aGUgTWFrZWZpbGUpLgorCS0gQSBQT1NJWC1jb21wbGlhbnQgc2hlbGwgaXMgcmVxdWlyZWQgdG8gcnVuIG1hbnkgc2NyaXB0cyBuZWVkZWQKKwkgIGZvciBldmVyeWRheSB1c2UgKGUuZy4gImJpc2VjdCIsICJwdWxsIikuCiAKLQktIGxpYmN1cmwgbGlicmFyeTsgZ2l0LWh0dHAtZmV0Y2ggYW5kIGdpdC1mZXRjaCB1c2UgdGhlbS4gIFlvdQorCS0gIlBlcmwiIGlzIG5lZWRlZCB0byB1c2Ugc29tZSBvZiB0aGUgZmVhdHVyZXMgKGUuZy4gcHJlcGFyaW5nIGEKKwkgIHBhcnRpYWwgY29tbWl0IHVzaW5nICJnaXQgYWRkIC1pLy1wIiwgaW50ZXJhY3Rpbmcgd2l0aCBzdm4KKwkgIHJlcG9zaXRvcmllcyB3aXRoICJnaXQgc3ZuIikuICBJZiB5b3UgY2FuIGxpdmUgd2l0aG91dCB0aGVzZSwgdXNlCisJICBOT19QRVJMLgorCisJLSAib3BlbnNzbCIgbGlicmFyeSBpcyB1c2VkIGJ5IGdpdC1pbWFwLXNlbmQgdG8gdXNlIElNQVAgb3ZlciBTU0wuCisJICBJZiB5b3UgZG9uJ3QgbmVlZCBpdCwgdXNlIE5PX09QRU5TU0wuCisKKwkgIEJ5IGRlZmF1bHQsIGdpdCB1c2VzIE9wZW5TU0wgZm9yIFNIQTEgYnV0IGl0IHdpbGwgdXNlIGl0J3Mgb3duCisJICBsaWJyYXJ5IChpbnNwaXJlZCBieSBNb3ppbGxhJ3MpIHdpdGggZWl0aGVyIE5PX09QRU5TU0wgb3IKKwkgIEJMS19TSEExLiAgQWxzbyBpbmNsdWRlZCBpcyBhIHZlcnNpb24gb3B0aW1pemVkIGZvciBQb3dlclBDCisJICAoUFBDX1NIQTEpLgorCisJLSAibGliY3VybCIgbGlicmFyeSBpcyB1c2VkIGJ5IGdpdC1odHRwLWZldGNoIGFuZCBnaXQtZmV0Y2guICBZb3UKIAkgIG1pZ2h0IGFsc28gd2FudCB0aGUgImN1cmwiIGV4ZWN1dGFibGUgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KLQkgIElmIHlvdSBkbyBub3QgdXNlIGh0dHAgdHJhbnNmZXIsIHlvdSBhcmUgcHJvYmFibHkgT0sgaWYgeW91Ci0JICBkbyBub3QgaGF2ZSB0aGVtLgorCSAgSWYgeW91IGRvIG5vdCB1c2UgaHR0cDovLyBvciBodHRwczovLyByZXBvc2l0b3JpZXMsIHlvdSBkbyBub3QKKwkgIGhhdmUgdG8gaGF2ZSB0aGVtICh1c2UgTk9fQ1VSTCkuCiAKLQktIGV4cGF0IGxpYnJhcnk7IGdpdC1odHRwLXB1c2ggdXNlcyBpdCBmb3IgcmVtb3RlIGxvY2sKLQkgIG1hbmFnZW1lbnQgb3ZlciBEQVYuICBTaW1pbGFyIHRvICJjdXJsIiBhYm92ZSwgdGhpcyBpcyBvcHRpb25hbC4KKwktICJleHBhdCIgbGlicmFyeTsgZ2l0LWh0dHAtcHVzaCB1c2VzIGl0IGZvciByZW1vdGUgbG9jaworCSAgbWFuYWdlbWVudCBvdmVyIERBVi4gIFNpbWlsYXIgdG8gImN1cmwiIGFib3ZlLCB0aGlzIGlzIG9wdGlvbmFsCisJICAod2l0aCBOT19FWFBBVCkuCiAKLSAgICAgICAgLSAid2lzaCIsIHRoZSBUY2wvVGsgd2luZG93aW5nIHNoZWxsIGlzIHVzZWQgaW4gZ2l0ayB0byBzaG93IHRoZQotICAgICAgICAgIGhpc3RvcnkgZ3JhcGhpY2FsbHksIGFuZCBpbiBnaXQtZ3VpLgotCi0JLSAic3NoIiBpcyB1c2VkIHRvIHB1c2ggYW5kIHB1bGwgb3ZlciB0aGUgbmV0Ci0KLQktICJwZXJsIiBhbmQgUE9TSVgtY29tcGxpYW50IHNoZWxscyBhcmUgbmVlZGVkIHRvIHVzZSBtb3N0IG9mCi0JICB0aGUgYmFyZS1ib25lcyBQb3JjZWxhaW5pc2ggc2NyaXB0cy4KKwktICJ3aXNoIiwgdGhlIFRjbC9UayB3aW5kb3dpbmcgc2hlbGwgaXMgdXNlZCBpbiBnaXRrIHRvIHNob3cgdGhlCisJICBoaXN0b3J5IGdyYXBoaWNhbGx5LCBhbmQgaW4gZ2l0LWd1aS4gIElmIHlvdSBkb24ndCB3YW50IGdpdGsgb3IKKwkgIGdpdC1ndWksIHlvdSBjYW4gdXNlIE5PX1RDTFRLLgogCiAgLSBTb21lIHBsYXRmb3JtIHNwZWNpZmljIGlzc3VlcyBhcmUgZGVhbHQgd2l0aCBNYWtlZmlsZSBydWxlcywKICAgIGJ1dCBkZXBlbmRpbmcgb24geW91ciBzcGVjaWZpYyBpbnN0YWxsYXRpb24sIHlvdSBtYXkgbm90CmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IGY4OGVkM2UuLmIwN2NkOGEgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0zLDYgKzMsMTEgQEAKIAogIyBEZWZpbmUgVj0xIHRvIGhhdmUgYSBtb3JlIHZlcmJvc2UgY29tcGlsZS4KICMKKyMgRGVmaW5lIFNIRUxMX1BBVEggdG8gYSBQT1NJWCBzaGVsbCBpZiB5b3VyIC9iaW4vc2ggaXMgYnJva2VuLgorIworIyBEZWZpbmUgU0FORV9UT09MX1BBVEggdG8gYSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBwYXRocyB0byBwcmVwZW5kCisjIHRvIFBBVEggaWYgeW91ciB0b29scyBpbiAvdXNyL2JpbiBhcmUgYnJva2VuLgorIwogIyBEZWZpbmUgU05QUklOVEZfUkVUVVJOU19CT0dVUyBpZiB5b3VyIGFyZSBvbiBhIHN5c3RlbSB3aGljaCBzbnByaW50ZigpCiAjIG9yIHZzbnByaW50ZigpIHJldHVybiAtMSBpbnN0ZWFkIG9mIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdoaWNoIHdvdWxkCiAjIGhhdmUgYmVlbiB3cml0dGVuIHRvIHRoZSBmaW5hbCBzdHJpbmcgaWYgZW5vdWdoIHNwYWNlIGhhZCBiZWVuIGF2YWlsYWJsZS4KQEAgLTExLDcgKzE2LDcgQEAKICMgd2hlbiBhdHRlbXB0aW5nIHRvIHJlYWQgZnJvbSBhbiBmb3BlbidlZCBkaXJlY3RvcnkuCiAjCiAjIERlZmluZSBOT19PUEVOU1NMIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHlvdSBkbyBub3QgaGF2ZSBPcGVuU1NMLgotIyBUaGlzIGFsc28gaW1wbGllcyBNT1pJTExBX1NIQTEuCisjIFRoaXMgYWxzbyBpbXBsaWVzIEJMS19TSEExLgogIwogIyBEZWZpbmUgTk9fQ1VSTCBpZiB5b3UgZG8gbm90IGhhdmUgbGliY3VybCBpbnN0YWxsZWQuICBnaXQtaHR0cC1wdWxsIGFuZAogIyBnaXQtaHR0cC1wdXNoIGFyZSBub3QgYnVpbHQsIGFuZCB5b3UgY2Fubm90IHVzZSBodHRwOi8vIGFuZCBodHRwczovLwpAQCAtNTIsNiArNTcsMTIgQEAKICMKICMgRGVmaW5lIE5PX01LRFRFTVAgaWYgeW91IGRvbid0IGhhdmUgbWtkdGVtcCBpbiB0aGUgQyBsaWJyYXJ5LgogIworIyBEZWZpbmUgTk9fTUtTVEVNUFMgaWYgeW91IGRvbid0IGhhdmUgbWtzdGVtcHMgaW4gdGhlIEMgbGlicmFyeS4KKyMKKyMgRGVmaW5lIE5PX0xJQkdFTl9IIGlmIHlvdSBkb24ndCBoYXZlIGxpYmdlbi5oLgorIworIyBEZWZpbmUgTkVFRFNfTElCR0VOIGlmIHlvdXIgbGliZ2VuIG5lZWRzIC1sZ2VuIHdoZW4gbGlua2luZworIwogIyBEZWZpbmUgTk9fU1lTX1NFTEVDVF9IIGlmIHlvdSBkb24ndCBoYXZlIHN5cy9zZWxlY3QuaC4KICMKICMgRGVmaW5lIE5PX1NZTUxJTktfSEVBRCBpZiB5b3UgbmV2ZXIgd2FudCAuZ2l0L0hFQUQgdG8gYmUgYSBzeW1ib2xpYyBsaW5rLgpAQCAtNzMsMjQgKzg0LDI2IEBACiAjIHNwZWNpZnkgeW91ciBvd24gKG9yIERhcndpblBvcnQncykgaW5jbHVkZSBkaXJlY3RvcmllcyBhbmQKICMgbGlicmFyeSBkaXJlY3RvcmllcyBieSBkZWZpbmluZyBDRkxBR1MgYW5kIExERkxBR1MgYXBwcm9wcmlhdGVseS4KICMKKyMgRGVmaW5lIEJMS19TSEExIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHlvdSB3YW50IHRoZSBDIHZlcnNpb24KKyMgb2YgdGhlIFNIQTEgdGhhdCBhc3N1bWVzIHlvdSBjYW4gZG8gdW5hbGlnbmVkIDMyLWJpdCBsb2FkcyBhbmQKKyMgaGF2ZSBhIGZhc3QgaHRvbmwoKSBmdW5jdGlvbi4KKyMKICMgRGVmaW5lIFBQQ19TSEExIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4gcnVubmluZyBtYWtlIHRvIG1ha2UgdXNlIG9mCiAjIGEgYnVuZGxlZCBTSEExIHJvdXRpbmUgb3B0aW1pemVkIGZvciBQb3dlclBDLgogIwotIyBEZWZpbmUgQVJNX1NIQTEgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hlbiBydW5uaW5nIG1ha2UgdG8gbWFrZSB1c2Ugb2YKLSMgYSBidW5kbGVkIFNIQTEgcm91dGluZSBvcHRpbWl6ZWQgZm9yIEFSTS4KKyMgRGVmaW5lIE5FRURTX0NSWVBUT19XSVRIX1NTTCBpZiB5b3UgbmVlZCAtbGNyeXB0byB3aGVuIHVzaW5nIC1sc3NsIChEYXJ3aW4pLgogIwotIyBEZWZpbmUgTU9aSUxMQV9TSEExIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4gcnVubmluZyBtYWtlIHRvIG1ha2UgdXNlIG9mCi0jIGEgYnVuZGxlZCBTSEExIHJvdXRpbmUgY29taW5nIGZyb20gTW96aWxsYS4gSXQgaXMgR1BMJ2QgYW5kIHNob3VsZCBiZSBmYXN0Ci0jIG9uIG5vbi14ODYgYXJjaGl0ZWN0dXJlcyAoZS5nLiBQb3dlclBDKSwgd2hpbGUgdGhlIE9wZW5TU0wgdmVyc2lvbiAoZGVmYXVsdAotIyBjaG9pY2UpIGhhcyB2ZXJ5IGZhc3QgdmVyc2lvbiBvcHRpbWl6ZWQgZm9yIGk1ODYuCi0jCi0jIERlZmluZSBORUVEU19TU0xfV0lUSF9DUllQVE8gaWYgeW91IG5lZWQgLWxjcnlwdG8gd2l0aCAtbHNzbCAoRGFyd2luKS4KKyMgRGVmaW5lIE5FRURTX1NTTF9XSVRIX0NSWVBUTyBpZiB5b3UgbmVlZCAtbHNzbCB3aGVuIHVzaW5nIC1sY3J5cHRvIChEYXJ3aW4pLgogIwogIyBEZWZpbmUgTkVFRFNfTElCSUNPTlYgaWYgbGlua2luZyB3aXRoIGxpYmMgaXMgbm90IGVub3VnaCAoRGFyd2luKS4KICMKICMgRGVmaW5lIE5FRURTX1NPQ0tFVCBpZiBsaW5raW5nIHdpdGggbGliYyBpcyBub3QgZW5vdWdoIChTdW5PUywKICMgUGF0cmljayBNYXVyaXR6KS4KICMKKyMgRGVmaW5lIE5FRURTX1JFU09MViBpZiBsaW5raW5nIHdpdGggLWxuc2wgYW5kL29yIC1sc29ja2V0IGlzIG5vdCBlbm91Z2guCisjIE5vdGFibHkgb24gU29sYXJpcyBoc3RyZXJyb3IgcmVzaWRlcyBpbiBsaWJyZXNvbHYgYW5kIG9uIFNvbGFyaXMgNworIyBpbmV0X250b3AgYW5kIGluZXRfcHRvbiBhZGRpdGlvbmFsbHkgcmVzaWRlIHRoZXJlLgorIwogIyBEZWZpbmUgTk9fTU1BUCBpZiB5b3Ugd2FudCB0byBhdm9pZCBtbWFwLgogIwogIyBEZWZpbmUgTk9fUFRIUkVBRFMgaWYgeW91IGRvIG5vdCBoYXZlIG9yIGRvIG5vdCB3YW50IHRvIHVzZSBQdGhyZWFkcy4KQEAgLTE0MCwxMyArMTUzLDIzIEBACiAjCiAjIERlZmluZSBBU0NJSURPQzggaWYgeW91IHdhbnQgdG8gZm9ybWF0IGRvY3VtZW50YXRpb24gd2l0aCBBc2NpaURvYyA4CiAjCi0jIERlZmluZSBET0NCT09LX1hTTF8xNzIgaWYgeW91IHdhbnQgdG8gZm9ybWF0IG1hbiBwYWdlcyB3aXRoIERvY0Jvb2sgWFNMIHYxLjcyLgorIyBEZWZpbmUgRE9DQk9PS19YU0xfMTcyIGlmIHlvdSB3YW50IHRvIGZvcm1hdCBtYW4gcGFnZXMgd2l0aCBEb2NCb29rIFhTTCB2MS43MgorIyAobm90IHYxLjczIG9yIHYxLjcxKS4KKyMKKyMgRGVmaW5lIEFTQ0lJRE9DX05PX1JPRkYgaWYgeW91ciBEb2NCb29rIFhTTCBlc2NhcGVzIHJhdyByb2ZmIGRpcmVjdGl2ZXMKKyMgKHZlcnNpb25zIDEuNzIgYW5kIGxhdGVyIGFuZCAxLjY4LjEgYW5kIGVhcmxpZXIpLgorIworIyBEZWZpbmUgR05VX1JPRkYgaWYgeW91ciB0YXJnZXQgc3lzdGVtIHVzZXMgR05VIGdyb2ZmLiAgVGhpcyBmb3JjZXMKKyMgYXBvc3Ryb3BoZXMgdG8gYmUgQVNDSUkgc28gdGhhdCBjdXQmcGFzdGluZyBleGFtcGxlcyB0byB0aGUgc2hlbGwKKyMgd2lsbCB3b3JrLgogIwogIyBEZWZpbmUgTk9fUEVSTF9NQUtFTUFLRVIgaWYgeW91IGNhbm5vdCB1c2UgTWFrZWZpbGVzIGdlbmVyYXRlZCBieSBwZXJsJ3MKICMgTWFrZU1ha2VyIChlLmcuIHVzaW5nIEFjdGl2ZVN0YXRlIHVuZGVyIEN5Z3dpbikuCiAjCiAjIERlZmluZSBOT19QRVJMIGlmIHlvdSBkbyBub3Qgd2FudCBQZXJsIHNjcmlwdHMgb3IgbGlicmFyaWVzIGF0IGFsbC4KICMKKyMgRGVmaW5lIE5PX1BZVEhPTiBpZiB5b3UgZG8gbm90IHdhbnQgUHl0aG9uIHNjcmlwdHMgb3IgbGlicmFyaWVzIGF0IGFsbC4KKyMKICMgRGVmaW5lIE5PX1RDTFRLIGlmIHlvdSBkbyBub3Qgd2FudCBUY2wvVGsgR1VJLgogIwogIyBUaGUgVENMX1BBVEggdmFyaWFibGUgZ292ZXJucyB0aGUgbG9jYXRpb24gb2YgdGhlIFRjbCBpbnRlcnByZXRlcgpAQCAtMTU3LDE3ICsxODAsMTAgQEAKICMgSWYgbm90IHNldCBpdCBkZWZhdWx0cyB0byB0aGUgYmFyZSAnd2lzaCcuIElmIGl0IGlzIHNldCB0byB0aGUgZW1wdHkKICMgc3RyaW5nIHRoZW4gTk9fVENMVEsgd2lsbCBiZSBmb3JjZWQgKHRoaXMgaXMgdXNlZCBieSBjb25maWd1cmUgc2NyaXB0KS4KICMKLSMgRGVmaW5lIFRIUkVBREVEX0RFTFRBX1NFQVJDSCBpZiB5b3UgaGF2ZSBwdGhyZWFkcyBhbmQgd2lzaCB0byBleHBsb2l0Ci0jIHBhcmFsbGVsIGRlbHRhIHNlYXJjaGluZyB3aGVuIHBhY2tpbmcgb2JqZWN0cy4KLSMKICMgRGVmaW5lIElOVEVSTkFMX1FTT1JUIHRvIHVzZSBHaXQncyBpbXBsZW1lbnRhdGlvbiBvZiBxc29ydCgpLCB3aGljaAogIyBpcyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvZiB0aGUgbWVyZ2Ugc29ydCB1c2VkIGluIGdsaWJjLiBUaGlzIGlzCiAjIHJlY29tbWVuZGVkIGlmIEdpdCB0cmlnZ2VycyBPKG5eMikgYmVoYXZpb3IgaW4geW91ciBwbGF0Zm9ybSdzIHFzb3J0KCkuCiAjCi0jIERlZmluZSBOT19FWFRFUk5BTF9HUkVQIGlmIHlvdSBkb24ndCB3YW50ICJnaXQgZ3JlcCIgdG8gZXZlciBjYWxsCi0jIHlvdXIgZXh0ZXJuYWwgZ3JlcCAoZS5nLiwgaWYgeW91ciBzeXN0ZW0gbGFja3MgZ3JlcCwgaWYgaXRzIGdyZXAgaXMKLSMgYnJva2VuLCBvciBzcGF3bmluZyBleHRlcm5hbCBwcm9jZXNzIGlzIHNsb3dlciB0aGFuIGJ1aWx0LWluIGdyZXAgZ2l0IGhhcykuCi0jCiAjIERlZmluZSBVTlJFTElBQkxFX0ZTVEFUIGlmIHlvdXIgc3lzdGVtJ3MgZnN0YXQgZG9lcyBub3QgcmV0dXJuIHRoZSBzYW1lCiAjIGluZm9ybWF0aW9uIG9uIGEgbm90IHlldCBjbG9zZWQgZmlsZSB0aGF0IGxzdGF0IHdvdWxkIHJldHVybiBmb3IgdGhlIHNhbWUKICMgZmlsZSBhZnRlciBpdCB3YXMgY2xvc2VkLgpAQCAtMTc4LDggKzE5NCwyOCBAQAogIwogIyBEZWZpbmUgTk9fQ1JPU1NfRElSRUNUT1JZX0hBUkRMSU5LUyBpZiB5b3UgcGxhbiB0byBkaXN0cmlidXRlIHRoZSBpbnN0YWxsZWQKICMgcHJvZ3JhbXMgYXMgYSB0YXIsIHdoZXJlIGJpbi8gYW5kIGxpYmV4ZWMvIG1pZ2h0IGJlIG9uIGRpZmZlcmVudCBmaWxlIHN5c3RlbXMuCisjCisjIERlZmluZSBVU0VfTkVEX0FMTE9DQVRPUiBpZiB5b3Ugd2FudCB0byByZXBsYWNlIHRoZSBwbGF0Zm9ybXMgZGVmYXVsdAorIyBtZW1vcnkgYWxsb2NhdG9ycyB3aXRoIHRoZSBuZWRtYWxsb2MgYWxsb2NhdG9yIHdyaXR0ZW4gYnkgTmlhbGwgRG91Z2xhcy4KKyMKKyMgRGVmaW5lIE5PX1JFR0VYIGlmIHlvdSBoYXZlIG5vIG9yIGluZmVyaW9yIHJlZ2V4IHN1cHBvcnQgaW4geW91ciBDIGxpYnJhcnkuCisjCisjIERlZmluZSBKU01JTiB0byBwb2ludCB0byBKYXZhU2NyaXB0IG1pbmlmaWVyIHRoYXQgZnVuY3Rpb25zIGFzCisjIGEgZmlsdGVyIHRvIGhhdmUgZ2l0d2ViLmpzIG1pbmlmaWVkLgorIworIyBEZWZpbmUgREVGQVVMVF9QQUdFUiB0byBhIHNlbnNpYmxlIHBhZ2VyIGNvbW1hbmQgKGRlZmF1bHRzIHRvICJsZXNzIikgaWYKKyMgeW91IHdhbnQgdG8gdXNlIHNvbWV0aGluZyBkaWZmZXJlbnQuICBUaGUgdmFsdWUgd2lsbCBiZSBpbnRlcnByZXRlZCBieSB0aGUKKyMgc2hlbGwgYXQgcnVudGltZSB3aGVuIGl0IGlzIHVzZWQuCisjCisjIERlZmluZSBERUZBVUxUX0VESVRPUiB0byBhIHNlbnNpYmxlIGVkaXRvciBjb21tYW5kIChkZWZhdWx0cyB0byAidmkiKSBpZiB5b3UKKyMgd2FudCB0byB1c2Ugc29tZXRoaW5nIGRpZmZlcmVudC4gIFRoZSB2YWx1ZSB3aWxsIGJlIGludGVycHJldGVkIGJ5IHRoZSBzaGVsbAorIyBpZiBuZWNlc3Nhcnkgd2hlbiBpdCBpcyB1c2VkLiAgRXhhbXBsZXM6CisjCisjICAgREVGQVVMVF9FRElUT1I9J34vYmluL3ZpJywKKyMgICBERUZBVUxUX0VESVRPUj0nJEdJVF9GQUxMQkFDS19FRElUT1InLAorIyAgIERFRkFVTFRfRURJVE9SPSciQzpcUHJvZ3JhbSBGaWxlc1xWaW1cZ3ZpbS5leGUiIC0tbm9mb3JrJwogCi1HSVQtVkVSU0lPTi1GSUxFOiAuRk9SQ0UtR0lULVZFUlNJT04tRklMRQorR0lULVZFUlNJT04tRklMRTogRk9SQ0UKIAlAJChTSEVMTF9QQVRIKSAuL0dJVC1WRVJTSU9OLUdFTgogLWluY2x1ZGUgR0lULVZFUlNJT04tRklMRQogCkBAIC0xOTAsNiArMjI2LDEyIEBACiB1bmFtZV9QIDo9ICQoc2hlbGwgc2ggLWMgJ3VuYW1lIC1wIDI+L2Rldi9udWxsIHx8IGVjaG8gbm90JykKIHVuYW1lX1YgOj0gJChzaGVsbCBzaCAtYyAndW5hbWUgLXYgMj4vZGV2L251bGwgfHwgZWNobyBub3QnKQogCitpZmRlZiBNU1ZDCisJIyBhdm9pZCB0aGUgTWluZ1cgYW5kIEN5Z3dpbiBjb25maWd1cmF0aW9uIHNlY3Rpb25zCisJdW5hbWVfUyA6PSBXaW5kb3dzCisJdW5hbWVfTyA6PSBXaW5kb3dzCitlbmRpZgorCiAjIENGTEFHUyBhbmQgTERGTEFHUyBhcmUgZm9yIHRoZSB1c2VycyB0byBvdmVycmlkZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCiAKIENGTEFHUyA9IC1nIC1PMiAtV2FsbApAQCAtMjI4LDI0ICsyNzAsMTAgQEAKIGVuZGlmCiBsaWIgPSBsaWIKICMgREVTVERJUj0KK3BhdGhzZXAgPSA6CiAKLSMgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBnaXR3ZWIKLUdJVFdFQl9DT05GSUcgPSBnaXR3ZWJfY29uZmlnLnBlcmwKLUdJVFdFQl9DT05GSUdfU1lTVEVNID0gL2V0Yy9naXR3ZWIuY29uZgotR0lUV0VCX0hPTUVfTElOS19TVFIgPSBwcm9qZWN0cwotR0lUV0VCX1NJVEVOQU1FID0KLUdJVFdFQl9QUk9KRUNUUk9PVCA9IC9wdWIvZ2l0Ci1HSVRXRUJfUFJPSkVDVF9NQVhERVBUSCA9IDIwMDcKLUdJVFdFQl9FWFBPUlRfT0sgPQotR0lUV0VCX1NUUklDVF9FWFBPUlQgPQotR0lUV0VCX0JBU0VfVVJMID0KLUdJVFdFQl9MSVNUID0KLUdJVFdFQl9IT01FVEVYVCA9IGluZGV4dGV4dC5odG1sCi1HSVRXRUJfQ1NTID0gZ2l0d2ViLmNzcwotR0lUV0VCX0xPR08gPSBnaXQtbG9nby5wbmcKLUdJVFdFQl9GQVZJQ09OID0gZ2l0LWZhdmljb24ucG5nCi1HSVRXRUJfU0lURV9IRUFERVIgPQotR0lUV0VCX1NJVEVfRk9PVEVSID0KKyMgSmF2YVNjcmlwdCBtaW5pZmllciBpbnZvY2F0aW9uIHRoYXQgY2FuIGZ1bmN0aW9uIGFzIGZpbHRlcgorSlNNSU4gPQogCiBleHBvcnQgcHJlZml4IGJpbmRpciBzaGFyZWRpciBzeXNjb25mZGlyCiAKQEAgLTI4NSw5ICszMTMsMTYgQEAKIExJQl9PQkpTID0KIFBST0dSQU1TID0KIFNDUklQVF9QRVJMID0KK1NDUklQVF9QWVRIT04gPQogU0NSSVBUX1NIID0KIFRFU1RfUFJPR1JBTVMgPQogCisjIEhhdmluZyB0aGlzIHZhcmlhYmxlIGluIHlvdXIgZW52aXJvbm1lbnQgd291bGQgYnJlYWsgcGlwZWxpbmVzIGJlY2F1c2UKKyMgeW91IGNhdXNlICJjZCIgdG8gZWNobyBpdHMgZGVzdGluYXRpb24gdG8gc3Rkb3V0LiAgSXQgY2FuIGFsc28gdGFrZQorIyBzY3JpcHRzIHRvIHVuZXhwZWN0ZWQgcGxhY2VzLiAgSWYgeW91IGxpa2UgQ0RQQVRILCBkZWZpbmUgaXQgZm9yIHlvdXIKKyMgaW50ZXJhY3RpdmUgc2hlbGwgc2Vzc2lvbnMgd2l0aG91dCBleHBvcnRpbmcgaXQuCit1bmV4cG9ydCBDRFBBVEgKKwogU0NSSVBUX1NIICs9IGdpdC1hbS5zaAogU0NSSVBUX1NIICs9IGdpdC1iaXNlY3Quc2gKIFNDUklQVF9TSCArPSBnaXQtZGlmZnRvb2wtLWhlbHBlci5zaApAQCAtMjk4LDYgKzMzMyw3IEBACiBTQ1JJUFRfU0ggKz0gZ2l0LW1lcmdlLXJlc29sdmUuc2gKIFNDUklQVF9TSCArPSBnaXQtbWVyZ2V0b29sLnNoCiBTQ1JJUFRfU0ggKz0gZ2l0LW1lcmdldG9vbC0tbGliLnNoCitTQ1JJUFRfU0ggKz0gZ2l0LW5vdGVzLnNoCiBTQ1JJUFRfU0ggKz0gZ2l0LXBhcnNlLXJlbW90ZS5zaAogU0NSSVBUX1NIICs9IGdpdC1wdWxsLnNoCiBTQ1JJUFRfU0ggKz0gZ2l0LXF1aWx0aW1wb3J0LnNoCkBAIC0zMjIsNiArMzU4LDcgQEAKIAogU0NSSVBUUyA9ICQocGF0c3Vic3QgJS5zaCwlLCQoU0NSSVBUX1NIKSkgXAogCSAgJChwYXRzdWJzdCAlLnBlcmwsJSwkKFNDUklQVF9QRVJMKSkgXAorCSAgJChwYXRzdWJzdCAlLnB5LCUsJChTQ1JJUFRfUFlUSE9OKSkgXAogCSAgZ2l0LWluc3Rhd2ViCiAKICMgRW1wdHkuLi4KQEAgLTMzMCwyMCArMzY3LDExIEBACiAjIC4uLiBhbmQgYWxsIHRoZSByZXN0IHRoYXQgY291bGQgYmUgbW92ZWQgb3V0IG9mIGJpbmRpciB0byBnaXRleGVjZGlyCiBQUk9HUkFNUyArPSAkKEVYVFJBX1BST0dSQU1TKQogUFJPR1JBTVMgKz0gZ2l0LWZhc3QtaW1wb3J0JFgKLVBST0dSQU1TICs9IGdpdC1oYXNoLW9iamVjdCRYCi1QUk9HUkFNUyArPSBnaXQtaW5kZXgtcGFjayRYCi1QUk9HUkFNUyArPSBnaXQtbWVyZ2UtaW5kZXgkWAotUFJPR1JBTVMgKz0gZ2l0LW1lcmdlLXRyZWUkWAotUFJPR1JBTVMgKz0gZ2l0LW1rdGFnJFgKLVBST0dSQU1TICs9IGdpdC1ta3RyZWUkWAotUFJPR1JBTVMgKz0gZ2l0LXBhY2stcmVkdW5kYW50JFgKLVBST0dSQU1TICs9IGdpdC1wYXRjaC1pZCRYCitQUk9HUkFNUyArPSBnaXQtaW1hcC1zZW5kJFgKIFBST0dSQU1TICs9IGdpdC1zaGVsbCRYCiBQUk9HUkFNUyArPSBnaXQtc2hvdy1pbmRleCRYCi1QUk9HUkFNUyArPSBnaXQtdW5wYWNrLWZpbGUkWAotUFJPR1JBTVMgKz0gZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbyRYCiBQUk9HUkFNUyArPSBnaXQtdXBsb2FkLXBhY2skWAotUFJPR1JBTVMgKz0gZ2l0LXZhciRYCitQUk9HUkFNUyArPSBnaXQtaHR0cC1iYWNrZW5kJFgKIAogIyBMaXN0IGJ1aWx0LWluIGNvbW1hbmQgJEMgd2hvc2UgaW1wbGVtZW50YXRpb24gY21kXyRDKCkgaXMgbm90IGluCiAjIGJ1aWx0aW4tJEMubyBidXQgaXMgbGlua2VkIGluIGFzIHBhcnQgb2Ygc29tZSBvdGhlciBjb21tYW5kLgpAQCAtMzYzLDEyICszOTEsMjIgQEAKIEJVSUxUX0lOUyArPSBnaXQtc3RhdHVzJFgKIEJVSUxUX0lOUyArPSBnaXQtd2hhdGNoYW5nZWQkWAogCi0jIHdoYXQgJ2FsbCcgd2lsbCBidWlsZCBhbmQgJ2luc3RhbGwnIHdpbGwgaW5zdGFsbCwgaW4gZ2l0ZXhlY2RpcgorIyB3aGF0ICdhbGwnIHdpbGwgYnVpbGQgYW5kICdpbnN0YWxsJyB3aWxsIGluc3RhbGwgaW4gZ2l0ZXhlY2RpciwKKyMgZXhjbHVkaW5nIHByb2dyYW1zIGZvciBidWlsdC1pbiBjb21tYW5kcwogQUxMX1BST0dSQU1TID0gJChQUk9HUkFNUykgJChTQ1JJUFRTKQogCiAjIHdoYXQgJ2FsbCcgd2lsbCBidWlsZCBidXQgbm90IGluc3RhbGwgaW4gZ2l0ZXhlY2RpcgogT1RIRVJfUFJPR1JBTVMgPSBnaXQkWAogCisjIHdoYXQgdGVzdCB3cmFwcGVycyBhcmUgbmVlZGVkIGFuZCAnaW5zdGFsbCcgd2lsbCBpbnN0YWxsLCBpbiBiaW5kaXIKK0JJTkRJUl9QUk9HUkFNU19ORUVEX1ggKz0gZ2l0CitCSU5ESVJfUFJPR1JBTVNfTkVFRF9YICs9IGdpdC11cGxvYWQtcGFjaworQklORElSX1BST0dSQU1TX05FRURfWCArPSBnaXQtcmVjZWl2ZS1wYWNrCitCSU5ESVJfUFJPR1JBTVNfTkVFRF9YICs9IGdpdC11cGxvYWQtYXJjaGl2ZQorQklORElSX1BST0dSQU1TX05FRURfWCArPSBnaXQtc2hlbGwKKworQklORElSX1BST0dSQU1TX05PX1ggKz0gZ2l0LWN2c3NlcnZlcgorCiAjIFNldCBwYXRocyB0byB0b29scyBlYXJseSBzbyB0aGF0IHRoZXkgY2FuIGJlIHVzZWQgZm9yIHZlcnNpb24gdGVzdHMuCiBpZm5kZWYgU0hFTExfUEFUSAogCVNIRUxMX1BBVEggPSAvYmluL3NoCkBAIC0zNzYsMTIgKzQxNCwxNyBAQAogaWZuZGVmIFBFUkxfUEFUSAogCVBFUkxfUEFUSCA9IC91c3IvYmluL3BlcmwKIGVuZGlmCitpZm5kZWYgUFlUSE9OX1BBVEgKKwlQWVRIT05fUEFUSCA9IC91c3IvYmluL3B5dGhvbgorZW5kaWYKIAogZXhwb3J0IFBFUkxfUEFUSAorZXhwb3J0IFBZVEhPTl9QQVRICiAKIExJQl9GSUxFPWxpYmdpdC5hCiBYRElGRl9MSUI9eGRpZmYvbGliLmEKIAorTElCX0ggKz0gYWR2aWNlLmgKIExJQl9IICs9IGFyY2hpdmUuaAogTElCX0ggKz0gYXR0ci5oCiBMSUJfSCArPSBibG9iLmgKQEAgLTM4OSw4ICs0MzIsMTAgQEAKIExJQl9IICs9IGNhY2hlLmgKIExJQl9IICs9IGNhY2hlLXRyZWUuaAogTElCX0ggKz0gY29tbWl0LmgKK0xJQl9IICs9IGNvbXBhdC9ic3dhcC5oCiBMSUJfSCArPSBjb21wYXQvY3lnd2luLmgKIExJQl9IICs9IGNvbXBhdC9taW5ndy5oCitMSUJfSCArPSBjb21wYXQvd2luMzIvcHRocmVhZC5oCiBMSUJfSCArPSBjc3VtLWZpbGUuaAogTElCX0ggKz0gZGVjb3JhdGUuaAogTElCX0ggKz0gZGVsdGEuaApAQCAtNDA5LDYgKzQ1NCw3IEBACiBMSUJfSCArPSBsb2ctdHJlZS5oCiBMSUJfSCArPSBtYWlsbWFwLmgKIExJQl9IICs9IG1lcmdlLXJlY3Vyc2l2ZS5oCitMSUJfSCArPSBub3Rlcy5oCiBMSUJfSCArPSBvYmplY3QuaAogTElCX0ggKz0gcGFjay5oCiBMSUJfSCArPSBwYWNrLXJlZnMuaApAQCAtNDIyLDYgKzQ2OCw3IEBACiBMSUJfSCArPSByZWZzLmgKIExJQl9IICs9IHJlbW90ZS5oCiBMSUJfSCArPSByZXJlcmUuaAorTElCX0ggKz0gcmVzb2x2ZS11bmRvLmgKIExJQl9IICs9IHJldmlzaW9uLmgKIExJQl9IICs9IHJ1bi1jb21tYW5kLmgKIExJQl9IICs9IHNoYTEtbG9va3VwLmgKQEAgLTQyOSw2ICs0NzYsNyBAQAogTElCX0ggKz0gc2lnY2hhaW4uaAogTElCX0ggKz0gc3RyYnVmLmgKIExJQl9IICs9IHN0cmluZy1saXN0LmgKK0xJQl9IICs9IHN1Ym1vZHVsZS5oCiBMSUJfSCArPSB0YWcuaAogTElCX0ggKz0gdHJhbnNwb3J0LmgKIExJQl9IICs9IHRyZWUuaApAQCAtNDM5LDYgKzQ4Nyw3IEBACiBMSUJfSCArPSB3dC1zdGF0dXMuaAogCiBMSUJfT0JKUyArPSBhYnNwYXRoLm8KK0xJQl9PQkpTICs9IGFkdmljZS5vCiBMSUJfT0JKUyArPSBhbGlhcy5vCiBMSUJfT0JKUyArPSBhbGxvYy5vCiBMSUJfT0JKUyArPSBhcmNoaXZlLm8KQEAgLTQ4MSw2ICs1MzAsNyBAQAogTElCX09CSlMgKz0gZ3JlcC5vCiBMSUJfT0JKUyArPSBoYXNoLm8KIExJQl9PQkpTICs9IGhlbHAubworTElCX09CSlMgKz0gaGV4Lm8KIExJQl9PQkpTICs9IGlkZW50Lm8KIExJQl9PQkpTICs9IGxldmVuc2h0ZWluLm8KIExJQl9PQkpTICs9IGxpc3Qtb2JqZWN0cy5vCkBAIC00OTIsNiArNTQyLDcgQEAKIExJQl9PQkpTICs9IG1lcmdlLWZpbGUubwogTElCX09CSlMgKz0gbWVyZ2UtcmVjdXJzaXZlLm8KIExJQl9PQkpTICs9IG5hbWUtaGFzaC5vCitMSUJfT0JKUyArPSBub3Rlcy5vCiBMSUJfT0JKUyArPSBvYmplY3QubwogTElCX09CSlMgKz0gcGFjay1jaGVjay5vCiBMSUJfT0JKUyArPSBwYWNrLXJlZnMubwpAQCAtNTEyLDcgKzU2Myw5IEBACiBMSUJfT0JKUyArPSByZWZsb2ctd2Fsay5vCiBMSUJfT0JKUyArPSByZWZzLm8KIExJQl9PQkpTICs9IHJlbW90ZS5vCitMSUJfT0JKUyArPSByZXBsYWNlX29iamVjdC5vCiBMSUJfT0JKUyArPSByZXJlcmUubworTElCX09CSlMgKz0gcmVzb2x2ZS11bmRvLm8KIExJQl9PQkpTICs9IHJldmlzaW9uLm8KIExJQl9PQkpTICs9IHJ1bi1jb21tYW5kLm8KIExJQl9PQkpTICs9IHNlcnZlci1pbmZvLm8KQEAgLTUyNSwxMCArNTc4LDEyIEBACiBMSUJfT0JKUyArPSBzaWdjaGFpbi5vCiBMSUJfT0JKUyArPSBzdHJidWYubwogTElCX09CSlMgKz0gc3RyaW5nLWxpc3QubworTElCX09CSlMgKz0gc3VibW9kdWxlLm8KIExJQl9PQkpTICs9IHN5bWxpbmtzLm8KIExJQl9PQkpTICs9IHRhZy5vCiBMSUJfT0JKUyArPSB0cmFjZS5vCiBMSUJfT0JKUyArPSB0cmFuc3BvcnQubworTElCX09CSlMgKz0gdHJhbnNwb3J0LWhlbHBlci5vCiBMSUJfT0JKUyArPSB0cmVlLWRpZmYubwogTElCX09CSlMgKz0gdHJlZS5vCiBMSUJfT0JKUyArPSB0cmVlLXdhbGsubwpAQCAtNTY4LDcgKzYyMyw2IEBACiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1kaWZmLXRyZWUubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tZGlmZi5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1mYXN0LWV4cG9ydC5vCi1CVUlMVElOX09CSlMgKz0gYnVpbHRpbi1mZXRjaC0tdG9vbC5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1mZXRjaC1wYWNrLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLWZldGNoLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLWZtdC1tZXJnZS1tc2cubwpAQCAtNTc2LDcgKzYzMCw5IEBACiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1mc2NrLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLWdjLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLWdyZXAubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4taGFzaC1vYmplY3QubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4taGVscC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1pbmRleC1wYWNrLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLWluaXQtZGIubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tbG9nLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLWxzLWZpbGVzLm8KQEAgLTU4NywxMiArNjQzLDE4IEBACiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1tZXJnZS5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1tZXJnZS1iYXNlLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLW1lcmdlLWZpbGUubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tbWVyZ2UtaW5kZXgubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tbWVyZ2Utb3Vycy5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1tZXJnZS1yZWN1cnNpdmUubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tbWVyZ2UtdHJlZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1ta3RhZy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1ta3RyZWUubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tbXYubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tbmFtZS1yZXYubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tcGFjay1vYmplY3RzLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluLXBhY2stcmVkdW5kYW50Lm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXBhY2stcmVmcy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1wYXRjaC1pZC5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1wcnVuZS1wYWNrZWQubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tcHJ1bmUubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tcHVzaC5vCkBAIC02MDAsNiArNjYyLDcgQEAKIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXJlY2VpdmUtcGFjay5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1yZWZsb2cubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tcmVtb3RlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluLXJlcGxhY2UubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tcmVyZXJlLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXJlc2V0Lm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXJldi1saXN0Lm8KQEAgLTYxNCwxMCArNjc3LDEzIEBACiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1zeW1ib2xpYy1yZWYubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tdGFnLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXRhci10cmVlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluLXVucGFjay1maWxlLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXVucGFjay1vYmplY3RzLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXVwZGF0ZS1pbmRleC5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi11cGRhdGUtcmVmLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluLXVwZGF0ZS1zZXJ2ZXItaW5mby5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi11cGxvYWQtYXJjaGl2ZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi12YXIubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tdmVyaWZ5LXBhY2subwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tdmVyaWZ5LXRhZy5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi13cml0ZS10cmVlLm8KQEAgLTYzNSwxMSArNzAxLDExIEBACiAKIGlmZXEgKCQodW5hbWVfUyksTGludXgpCiAJTk9fU1RSTENQWSA9IFllc1BsZWFzZQotCVRIUkVBREVEX0RFTFRBX1NFQVJDSCA9IFllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCiBlbmRpZgogaWZlcSAoJCh1bmFtZV9TKSxHTlUva0ZyZWVCU0QpCiAJTk9fU1RSTENQWSA9IFllc1BsZWFzZQotCVRIUkVBREVEX0RFTFRBX1NFQVJDSCA9IFllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCiBlbmRpZgogaWZlcSAoJCh1bmFtZV9TKSxVbml4V2FyZSkKIAlDQyA9IGNjCkBAIC02NTAsNiArNzE2LDcgQEAKIAlTSEVMTF9QQVRIID0gL3Vzci9sb2NhbC9iaW4vYmFzaAogCU5PX0lQVjYgPSBZZXNQbGVhc2UKIAlOT19IU1RSRVJST1IgPSBZZXNQbGVhc2UKKwlOT19NS1NURU1QUyA9IFllc1BsZWFzZQogCUJBU0lDX0NGTEFHUyArPSAtS3RocmVhZAogCUJBU0lDX0NGTEFHUyArPSAtSS91c3IvbG9jYWwvaW5jbHVkZQogCUJBU0lDX0xERkxBR1MgKz0gLUwvdXNyL2xvY2FsL2xpYgpAQCAtNjczLDYgKzc0MCw3IEBACiAJU0hFTExfUEFUSCA9IC91c3IvYmluL2Jhc2gKIAlOT19JUFY2ID0gWWVzUGxlYXNlCiAJTk9fSFNUUkVSUk9SID0gWWVzUGxlYXNlCisJTk9fTUtTVEVNUFMgPSBZZXNQbGVhc2UKIAlCQVNJQ19DRkxBR1MgKz0gLUkvdXNyL2xvY2FsL2luY2x1ZGUKIAlCQVNJQ19MREZMQUdTICs9IC1ML3Vzci9sb2NhbC9saWIKIAlOT19TVFJDQVNFU1RSID0gWWVzUGxlYXNlCkBAIC02ODEsNiArNzQ5LDcgQEAKIAlUQVIgPSBndGFyCiBlbmRpZgogaWZlcSAoJCh1bmFtZV9TKSxEYXJ3aW4pCisJTkVFRFNfQ1JZUFRPX1dJVEhfU1NMID0gWWVzUGxlYXNlCiAJTkVFRFNfU1NMX1dJVEhfQ1JZUFRPID0gWWVzUGxlYXNlCiAJTkVFRFNfTElCSUNPTlYgPSBZZXNQbGVhc2UKIAlpZmVxICgkKHNoZWxsIGV4cHIgIiQodW5hbWVfUikiIDogJ1sxNTY3OF1cLicpLDIpCkBAIC02OTAsMTkgKzc1OSwyOCBAQAogCQlOT19TVFJMQ1BZID0gWWVzUGxlYXNlCiAJZW5kaWYKIAlOT19NRU1NRU0gPSBZZXNQbGVhc2UKLQlUSFJFQURFRF9ERUxUQV9TRUFSQ0ggPSBZZXNQbGVhc2UKIAlVU0VfU1RfVElNRVNQRUMgPSBZZXNQbGVhc2UKIGVuZGlmCiBpZmVxICgkKHVuYW1lX1MpLFN1bk9TKQogCU5FRURTX1NPQ0tFVCA9IFllc1BsZWFzZQogCU5FRURTX05TTCA9IFllc1BsZWFzZQogCVNIRUxMX1BBVEggPSAvYmluL2Jhc2gKKwlTQU5FX1RPT0xfUEFUSCA9IC91c3IveHBnNi9iaW46L3Vzci94cGc0L2JpbgogCU5PX1NUUkNBU0VTVFIgPSBZZXNQbGVhc2UKIAlOT19NRU1NRU0gPSBZZXNQbGVhc2UKLQlOT19IU1RSRVJST1IgPSBZZXNQbGVhc2UKIAlOT19NS0RURU1QID0gWWVzUGxlYXNlCi0JT0xEX0lDT05WID0gVW5mb3J0dW5hdGVseVllcwotCU5PX0VYVEVSTkFMX0dSRVAgPSBZZXNQbGVhc2UKKwlOT19NS1NURU1QUyA9IFllc1BsZWFzZQorCU5PX1JFR0VYID0gWWVzUGxlYXNlCisJaWZlcSAoJCh1bmFtZV9SKSw1LjcpCisJCU5FRURTX1JFU09MViA9IFllc1BsZWFzZQorCQlOT19JUFY2ID0gWWVzUGxlYXNlCisJCU5PX1NPQ0tBRERSX1NUT1JBR0UgPSBZZXNQbGVhc2UKKwkJTk9fVU5TRVRFTlYgPSBZZXNQbGVhc2UKKwkJTk9fU0VURU5WID0gWWVzUGxlYXNlCisJCU5PX1NUUkxDUFkgPSBZZXNQbGVhc2UKKwkJTk9fQzk5X0ZPUk1BVCA9IFllc1BsZWFzZQorCQlOT19TVFJUT1VNQVggPSBZZXNQbGVhc2UKKwllbmRpZgogCWlmZXEgKCQodW5hbWVfUiksNS44KQogCQlOT19VTlNFVEVOViA9IFllc1BsZWFzZQogCQlOT19TRVRFTlYgPSBZZXNQbGVhc2UKQEAgLTcxNSwzNSArNzkzLDM5IEBACiAJCU5PX0M5OV9GT1JNQVQgPSBZZXNQbGVhc2UKIAkJTk9fU1RSVE9VTUFYID0gWWVzUGxlYXNlCiAJZW5kaWYKLQlJTlNUQUxMID0gZ2luc3RhbGwKKwlJTlNUQUxMID0gL3Vzci91Y2IvaW5zdGFsbAogCVRBUiA9IGd0YXIKLQlCQVNJQ19DRkxBR1MgKz0gLURfX0VYVEVOU0lPTlNfXworCUJBU0lDX0NGTEFHUyArPSAtRF9fRVhURU5TSU9OU19fIC1EX19zdW5fXyAtREhBVkVfQUxMT0NBX0gKIGVuZGlmCiBpZmVxICgkKHVuYW1lX08pLEN5Z3dpbikKIAlOT19EX1RZUEVfSU5fRElSRU5UID0gWWVzUGxlYXNlCiAJTk9fRF9JTk9fSU5fRElSRU5UID0gWWVzUGxlYXNlCiAJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQogCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCiAJTk9fU1lNTElOS19IRUFEID0gWWVzUGxlYXNlCiAJTkVFRFNfTElCSUNPTlYgPSBZZXNQbGVhc2UKIAlOT19GQVNUX1dPUktJTkdfRElSRUNUT1JZID0gVW5mb3J0dW5hdGVseVllcwogCU5PX1RSVVNUQUJMRV9GSUxFTU9ERSA9IFVuZm9ydHVuYXRlbHlZZXMKIAlPTERfSUNPTlYgPSBVbmZvcnR1bmF0ZWx5WWVzCisJTk9fU1RfQkxPQ0tTX0lOX1NUUlVDVF9TVEFUID0gWWVzUGxlYXNlCiAJIyBUaGVyZSBhcmUgY29uZmxpY3RpbmcgcmVwb3J0cyBhYm91dCB0aGlzLgogCSMgT24gc29tZSBib3hlcyBOT19NTUFQIGlzIG5lZWRlZCwgYW5kIG5vdCBzbyBlbHNld2hlcmUuCiAJIyBUcnkgY29tbWVudGluZyB0aGlzIG91dCBpZiB5b3Ugc3VzcGVjdCBNTUFQIGlzIG1vcmUgZWZmaWNpZW50CiAJTk9fTU1BUCA9IFllc1BsZWFzZQogCU5PX0lQVjYgPSBZZXNQbGVhc2UKIAlYID0gLmV4ZQorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9jeWd3aW4ubworCVVOUkVMSUFCTEVfRlNUQVQgPSBVbmZvcnR1bmF0ZWx5WWVzCiBlbmRpZgogaWZlcSAoJCh1bmFtZV9TKSxGcmVlQlNEKQogCU5FRURTX0xJQklDT05WID0gWWVzUGxlYXNlCisJT0xEX0lDT05WID0gWWVzUGxlYXNlCiAJTk9fTUVNTUVNID0gWWVzUGxlYXNlCiAJQkFTSUNfQ0ZMQUdTICs9IC1JL3Vzci9sb2NhbC9pbmNsdWRlCiAJQkFTSUNfTERGTEFHUyArPSAtTC91c3IvbG9jYWwvbGliCiAJRElSX0hBU19CU0RfR1JPVVBfU0VNQU5USUNTID0gWWVzUGxlYXNlCiAJVVNFX1NUX1RJTUVTUEVDID0gWWVzUGxlYXNlCi0JVEhSRUFERURfREVMVEFfU0VBUkNIID0gWWVzUGxlYXNlCiAJaWZlcSAoJChzaGVsbCBleHByICIkKHVuYW1lX1IpIiA6ICc0XC4nKSwyKQogCQlQVEhSRUFEX0xJQlMgPSAtcHRocmVhZAogCQlOT19VSU5UTUFYX1QgPSBZZXNQbGVhc2UKQEAgLTc1Nyw3ICs4MzksNiBAQAogCU5FRURTX0xJQklDT05WID0gWWVzUGxlYXNlCiAJQkFTSUNfQ0ZMQUdTICs9IC1JL3Vzci9sb2NhbC9pbmNsdWRlCiAJQkFTSUNfTERGTEFHUyArPSAtTC91c3IvbG9jYWwvbGliCi0JVEhSRUFERURfREVMVEFfU0VBUkNIID0gWWVzUGxlYXNlCiBlbmRpZgogaWZlcSAoJCh1bmFtZV9TKSxOZXRCU0QpCiAJaWZlcSAoJChzaGVsbCBleHByICIkKHVuYW1lX1IpIiA6ICdbMDFdXC4nKSwyKQpAQCAtNzY1LDQ2ICs4NDYsNzMgQEAKIAllbmRpZgogCUJBU0lDX0NGTEFHUyArPSAtSS91c3IvcGtnL2luY2x1ZGUKIAlCQVNJQ19MREZMQUdTICs9IC1ML3Vzci9wa2cvbGliICQoQ0NfTERfRFlOUEFUSCkvdXNyL3BrZy9saWIKLQlUSFJFQURFRF9ERUxUQV9TRUFSQ0ggPSBZZXNQbGVhc2UKIAlVU0VfU1RfVElNRVNQRUMgPSBZZXNQbGVhc2UKKwlOT19NS1NURU1QUyA9IFllc1BsZWFzZQogZW5kaWYKIGlmZXEgKCQodW5hbWVfUyksQUlYKQogCU5PX1NUUkNBU0VTVFI9WWVzUGxlYXNlCiAJTk9fTUVNTUVNID0gWWVzUGxlYXNlCiAJTk9fTUtEVEVNUCA9IFllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCiAJTk9fU1RSTENQWSA9IFllc1BsZWFzZQogCU5PX05TRUMgPSBZZXNQbGVhc2UKIAlGUkVBRF9SRUFEU19ESVJFQ1RPUklFUyA9IFVuZm9ydHVuYXRlbHlZZXMKIAlJTlRFUk5BTF9RU09SVCA9IFVuZm9ydHVuYXRlbHlZZXMKIAlORUVEU19MSUJJQ09OVj1ZZXNQbGVhc2UKIAlCQVNJQ19DRkxBR1MgKz0gLURfTEFSR0VfRklMRVMKLQlpZm5lcSAoJChzaGVsbCBleHByICIkKHVuYW1lX1YpIiA6ICdbMTIzNF0nKSwxKQotCQlUSFJFQURFRF9ERUxUQV9TRUFSQ0ggPSBZZXNQbGVhc2UKLQllbHNlCisJaWZlcSAoJChzaGVsbCBleHByICIkKHVuYW1lX1YpIiA6ICdbMTIzNF0nKSwxKQogCQlOT19QVEhSRUFEUyA9IFllc1BsZWFzZQogCWVuZGlmCiBlbmRpZgogaWZlcSAoJCh1bmFtZV9TKSxHTlUpCiAJIyBHTlUvSHVyZAogCU5PX1NUUkxDUFk9WWVzUGxlYXNlCisJTk9fTUtTVEVNUFMgPSBZZXNQbGVhc2UKK2VuZGlmCitpZmVxICgkKHVuYW1lX1MpLElSSVgpCisJTk9fU0VURU5WID0gWWVzUGxlYXNlCisJTk9fVU5TRVRFTlYgPSBZZXNQbGVhc2UKKwlOT19TVFJDQVNFU1RSID0gWWVzUGxlYXNlCisJTk9fTUVNTUVNID0gWWVzUGxlYXNlCisJTk9fTUtTVEVNUFMgPSBZZXNQbGVhc2UKKwlOT19NS0RURU1QID0gWWVzUGxlYXNlCisJIyBXaGVuIGNvbXBpbGVkIHdpdGggdGhlIE1JUFNwcm8gNy40LjRtIGNvbXBpbGVyLCBhbmQgd2l0aG91dCBwdGhyZWFkcworCSMgKGkuZS4gTk9fUFRIUkVBRFMgaXMgc2V0KSwgYW5kIF93aXRoXyBNTUFQIChpLmUuIE5PX01NQVAgaXMgbm90IHNldCksCisJIyBnaXQgZGllcyB3aXRoIGEgc2VnbWVudGF0aW9uIGZhdWx0IHdoZW4gdHJ5aW5nIHRvIGFjY2VzcyB0aGUgZmlyc3QKKwkjIGVudHJ5IG9mIGEgcmVmbG9nLiAgVGhlIGNvbnNlcnZhdGl2ZSBjaG9pY2UgaXMgbWFkZSB0byBhbHdheXMgc2V0CisJIyBOT19NTUFQLiAgSWYgeW91IHN1c3BlY3QgdGhhdCB5b3VyIGNvbXBpbGVyIGlzIG5vdCBhZmZlY3RlZCBieSB0aGlzCisJIyBpc3N1ZSwgY29tbWVudCBvdXQgdGhlIE5PX01NQVAgc3RhdGVtZW50LgorCU5PX01NQVAgPSBZZXNQbGVhc2UKKwlTTlBSSU5URl9SRVRVUk5TX0JPR1VTID0gWWVzUGxlYXNlCisJU0hFTExfUEFUSCA9IC91c3IvZ251L2Jpbi9iYXNoCisJTkVFRFNfTElCR0VOID0gWWVzUGxlYXNlCisJTkVFRFNfTElCSUNPTlYgPSBZZXNQbGVhc2UKIGVuZGlmCiBpZmVxICgkKHVuYW1lX1MpLElSSVg2NCkKLQlOT19JUFY2PVllc1BsZWFzZQogCU5PX1NFVEVOVj1ZZXNQbGVhc2UKKwlOT19VTlNFVEVOViA9IFllc1BsZWFzZQogCU5PX1NUUkNBU0VTVFI9WWVzUGxlYXNlCiAJTk9fTUVNTUVNID0gWWVzUGxlYXNlCi0JTk9fU1RSTENQWSA9IFllc1BsZWFzZQotCU5PX1NPQ0tBRERSX1NUT1JBR0U9WWVzUGxlYXNlCisJTk9fTUtTVEVNUFMgPSBZZXNQbGVhc2UKKwlOT19NS0RURU1QID0gWWVzUGxlYXNlCisJIyBXaGVuIGNvbXBpbGVkIHdpdGggdGhlIE1JUFNwcm8gNy40LjRtIGNvbXBpbGVyLCBhbmQgd2l0aG91dCBwdGhyZWFkcworCSMgKGkuZS4gTk9fUFRIUkVBRFMgaXMgc2V0KSwgYW5kIF93aXRoXyBNTUFQIChpLmUuIE5PX01NQVAgaXMgbm90IHNldCksCisJIyBnaXQgZGllcyB3aXRoIGEgc2VnbWVudGF0aW9uIGZhdWx0IHdoZW4gdHJ5aW5nIHRvIGFjY2VzcyB0aGUgZmlyc3QKKwkjIGVudHJ5IG9mIGEgcmVmbG9nLiAgVGhlIGNvbnNlcnZhdGl2ZSBjaG9pY2UgaXMgbWFkZSB0byBhbHdheXMgc2V0CisJIyBOT19NTUFQLiAgSWYgeW91IHN1c3BlY3QgdGhhdCB5b3VyIGNvbXBpbGVyIGlzIG5vdCBhZmZlY3RlZCBieSB0aGlzCisJIyBpc3N1ZSwgY29tbWVudCBvdXQgdGhlIE5PX01NQVAgc3RhdGVtZW50LgorCU5PX01NQVAgPSBZZXNQbGVhc2UKKwlTTlBSSU5URl9SRVRVUk5TX0JPR1VTID0gWWVzUGxlYXNlCiAJU0hFTExfUEFUSD0vdXNyL2dudS9iaW4vYmFzaAotCUJBU0lDX0NGTEFHUyArPSAtRFBBVEhfTUFYPTEwMjQKLQkjIGZvciBub3csIGJ1aWxkIDMyLWJpdCB2ZXJzaW9uCi0JQkFTSUNfTERGTEFHUyArPSAtTC91c3IvbGliMzIKKwlORUVEU19MSUJHRU4gPSBZZXNQbGVhc2UKKwlORUVEU19MSUJJQ09OViA9IFllc1BsZWFzZQogZW5kaWYKIGlmZXEgKCQodW5hbWVfUyksSFAtVVgpCiAJTk9fSVBWNj1ZZXNQbGVhc2UKIAlOT19TRVRFTlY9WWVzUGxlYXNlCiAJTk9fU1RSQ0FTRVNUUj1ZZXNQbGVhc2UKIAlOT19NRU1NRU0gPSBZZXNQbGVhc2UKKwlOT19NS1NURU1QUyA9IFllc1BsZWFzZQogCU5PX1NUUkxDUFkgPSBZZXNQbGVhc2UKIAlOT19NS0RURU1QID0gWWVzUGxlYXNlCiAJTk9fVU5TRVRFTlYgPSBZZXNQbGVhc2UKQEAgLTgxMiwxNCArOTIwLDEyIEBACiAJTk9fU1lTX1NFTEVDVF9IID0gWWVzUGxlYXNlCiAJU05QUklOVEZfUkVUVVJOU19CT0dVUyA9IFllc1BsZWFzZQogZW5kaWYKLWlmbmVxICgsJChmaW5kc3RyaW5nIENZR1dJTiwkKHVuYW1lX1MpKSkKLQlDT01QQVRfT0JKUyArPSBjb21wYXQvY3lnd2luLm8KLQlVTlJFTElBQkxFX0ZTVEFUID0gVW5mb3J0dW5hdGVseVllcwotZW5kaWYKLWlmbmVxICgsJChmaW5kc3RyaW5nIE1JTkdXLCQodW5hbWVfUykpKQoraWZlcSAoJCh1bmFtZV9TKSxXaW5kb3dzKQorCUdJVF9WRVJTSU9OIDo9ICQoR0lUX1ZFUlNJT04pLk1TVkMKKwlwYXRoc2VwID0gOwogCU5PX1BSRUFEID0gWWVzUGxlYXNlCi0JTk9fT1BFTlNTTCA9IFllc1BsZWFzZQotCU5PX0NVUkwgPSBZZXNQbGVhc2UKKwlORUVEU19DUllQVE9fV0lUSF9TU0wgPSBZZXNQbGVhc2UKKwlOT19MSUJHRU5fSCA9IFllc1BsZWFzZQogCU5PX1NZTUxJTktfSEVBRCA9IFllc1BsZWFzZQogCU5PX0lQVjYgPSBZZXNQbGVhc2UKIAlOT19TRVRFTlYgPSBZZXNQbGVhc2UKQEAgLTgyNywxMiArOTMzLDEzIEBACiAJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQogCU5PX1NUUkxDUFkgPSBZZXNQbGVhc2UKIAlOT19NRU1NRU0gPSBZZXNQbGVhc2UKLQlOT19QVEhSRUFEUyA9IFllc1BsZWFzZQotCU5FRURTX0xJQklDT05WID0gWWVzUGxlYXNlCi0JT0xEX0lDT05WID0gWWVzUGxlYXNlCisJIyBORUVEU19MSUJJQ09OViA9IFllc1BsZWFzZQorCU5PX0lDT05WID0gWWVzUGxlYXNlCiAJTk9fQzk5X0ZPUk1BVCA9IFllc1BsZWFzZQogCU5PX1NUUlRPVU1BWCA9IFllc1BsZWFzZQorCU5PX1NUUlRPVUxMID0gWWVzUGxlYXNlCiAJTk9fTUtEVEVNUCA9IFllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCiAJU05QUklOVEZfUkVUVVJOU19CT0dVUyA9IFllc1BsZWFzZQogCU5PX1NWTl9URVNUUyA9IFllc1BsZWFzZQogCU5PX1BFUkxfTUFLRU1BS0VSID0gWWVzUGxlYXNlCkBAIC04NDEsMjIgKzk0OCw5NCBAQAogCU5PX1NUX0JMT0NLU19JTl9TVFJVQ1RfU1RBVCA9IFllc1BsZWFzZQogCU5PX05TRUMgPSBZZXNQbGVhc2UKIAlVU0VfV0lOMzJfTU1BUCA9IFllc1BsZWFzZQorCSMgVVNFX05FRF9BTExPQ0FUT1IgPSBZZXNQbGVhc2UKIAlVTlJFTElBQkxFX0ZTVEFUID0gVW5mb3J0dW5hdGVseVllcwogCU9CSkVDVF9DUkVBVElPTl9VU0VTX1JFTkFNRVMgPSBVbmZvcnR1bmF0ZWx5TmVlZHNUbwotCUNPTVBBVF9DRkxBR1MgKz0gLURfX1VTRV9NSU5HV19BQ0NFU1MgLUROT0dESSAtSWNvbXBhdCAtSWNvbXBhdC9yZWdleCAtSWNvbXBhdC9mbm1hdGNoCi0JQ09NUEFUX0NGTEFHUyArPSAtRFNOUFJJTlRGX1NJWkVfQ09SUj0xCi0JQ09NUEFUX0NGTEFHUyArPSAtRFNUUklQX0VYVEVOU0lPTj1cIi5leGVcIgotCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9taW5ndy5vIGNvbXBhdC9mbm1hdGNoL2ZubWF0Y2gubyBjb21wYXQvcmVnZXgvcmVnZXgubyBjb21wYXQvd2luYW5zaS5vCi0JRVhUTElCUyArPSAtbHdzMl8zMgorCU5PX1JFR0VYID0gWWVzUGxlYXNlCisJTk9fQ1VSTCA9IFllc1BsZWFzZQorCU5PX1BZVEhPTiA9IFllc1BsZWFzZQorCUJMS19TSEExID0gWWVzUGxlYXNlCisKKwlDQyA9IGNvbXBhdC92Y2J1aWxkL3NjcmlwdHMvY2xpbmsucGwKKwlBUiA9IGNvbXBhdC92Y2J1aWxkL3NjcmlwdHMvbGliLnBsCisJQ0ZMQUdTID0KKwlCQVNJQ19DRkxBR1MgPSAtbm9sb2dvIC1JLiAtSS4uL3psaWIgLUljb21wYXQvdmNidWlsZCAtSWNvbXBhdC92Y2J1aWxkL2luY2x1ZGUgLURXSU4zMiAtRF9DT05TT0xFIC1ESEFWRV9TVFJJTkdfSCAtRF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIC1EX0NSVF9OT05TVERDX05PX0RFUFJFQ0FURQorCUNPTVBBVF9PQkpTID0gY29tcGF0L21zdmMubyBjb21wYXQvZm5tYXRjaC9mbm1hdGNoLm8gY29tcGF0L3dpbmFuc2kubyBjb21wYXQvd2luMzIvcHRocmVhZC5vCisJQ09NUEFUX0NGTEFHUyA9IC1EX19VU0VfTUlOR1dfQUNDRVNTIC1ETk9HREkgLURIQVZFX1NUUklOR19IIC1ESEFWRV9BTExPQ0FfSCAtSWNvbXBhdCAtSWNvbXBhdC9mbm1hdGNoIC1JY29tcGF0L3JlZ2V4IC1JY29tcGF0L2ZubWF0Y2ggLUljb21wYXQvd2luMzIgLURTVFJJUF9FWFRFTlNJT049XCIuZXhlXCIKKwlCQVNJQ19MREZMQUdTID0gLUlHTk9SRTo0MjE3IC1JR05PUkU6NDA0OSAtTk9MT0dPIC1TVUJTWVNURU06Q09OU09MRSAtTk9ERUZBVUxUTElCOk1TVkNSVC5saWIKKwlFWFRMSUJTID0gYWR2YXBpMzIubGliIHNoZWxsMzIubGliIHdpbmluZXQubGliIHdzMl8zMi5saWIKKwlQVEhSRUFEX0xJQlMgPQorCWxpYiA9CitpZm5kZWYgREVCVUcKKwlCQVNJQ19DRkxBR1MgKz0gLUdMIC1PcyAtTVQKKwlCQVNJQ19MREZMQUdTICs9IC1MVENHCisJQVIgKz0gLUxUQ0cKK2Vsc2UKKwlCQVNJQ19DRkxBR1MgKz0gLVppIC1NVGQKK2VuZGlmCiAJWCA9IC5leGUKIGVuZGlmCi1pZm5lcSAoLCQoZmluZHN0cmluZyBhcm0sJCh1bmFtZV9NKSkpCi0JQVJNX1NIQTEgPSBZZXNQbGVhc2UKK2lmbmVxICgsJChmaW5kc3RyaW5nIE1JTkdXLCQodW5hbWVfUykpKQorCXBhdGhzZXAgPSA7CisJTk9fUFJFQUQgPSBZZXNQbGVhc2UKKwlORUVEU19DUllQVE9fV0lUSF9TU0wgPSBZZXNQbGVhc2UKKwlOT19MSUJHRU5fSCA9IFllc1BsZWFzZQorCU5PX1NZTUxJTktfSEVBRCA9IFllc1BsZWFzZQorCU5PX1NFVEVOViA9IFllc1BsZWFzZQorCU5PX1VOU0VURU5WID0gWWVzUGxlYXNlCisJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQorCU5PX1NUUkxDUFkgPSBZZXNQbGVhc2UKKwlOT19NRU1NRU0gPSBZZXNQbGVhc2UKKwlORUVEU19MSUJJQ09OViA9IFllc1BsZWFzZQorCU9MRF9JQ09OViA9IFllc1BsZWFzZQorCU5PX0M5OV9GT1JNQVQgPSBZZXNQbGVhc2UKKwlOT19TVFJUT1VNQVggPSBZZXNQbGVhc2UKKwlOT19NS0RURU1QID0gWWVzUGxlYXNlCisJTk9fTUtTVEVNUFMgPSBZZXNQbGVhc2UKKwlTTlBSSU5URl9SRVRVUk5TX0JPR1VTID0gWWVzUGxlYXNlCisJTk9fU1ZOX1RFU1RTID0gWWVzUGxlYXNlCisJTk9fUEVSTF9NQUtFTUFLRVIgPSBZZXNQbGVhc2UKKwlSVU5USU1FX1BSRUZJWCA9IFllc1BsZWFzZQorCU5PX1BPU0lYX09OTFlfUFJPR1JBTVMgPSBZZXNQbGVhc2UKKwlOT19TVF9CTE9DS1NfSU5fU1RSVUNUX1NUQVQgPSBZZXNQbGVhc2UKKwlOT19OU0VDID0gWWVzUGxlYXNlCisJVVNFX1dJTjMyX01NQVAgPSBZZXNQbGVhc2UKKwlVU0VfTkVEX0FMTE9DQVRPUiA9IFllc1BsZWFzZQorCVVOUkVMSUFCTEVfRlNUQVQgPSBVbmZvcnR1bmF0ZWx5WWVzCisJT0JKRUNUX0NSRUFUSU9OX1VTRVNfUkVOQU1FUyA9IFVuZm9ydHVuYXRlbHlOZWVkc1RvCisJTk9fUkVHRVggPSBZZXNQbGVhc2UKKwlOT19QWVRIT04gPSBZZXNQbGVhc2UKKwlCTEtfU0hBMSA9IFllc1BsZWFzZQorCUNPTVBBVF9DRkxBR1MgKz0gLURfX1VTRV9NSU5HV19BQ0NFU1MgLUROT0dESSAtSWNvbXBhdCAtSWNvbXBhdC9mbm1hdGNoIC1JY29tcGF0L3dpbjMyCisJQ09NUEFUX0NGTEFHUyArPSAtRFNUUklQX0VYVEVOU0lPTj1cIi5leGVcIgorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9taW5ndy5vIGNvbXBhdC9mbm1hdGNoL2ZubWF0Y2gubyBjb21wYXQvd2luYW5zaS5vIFwKKwkJY29tcGF0L3dpbjMyL3B0aHJlYWQubworCUVYVExJQlMgKz0gLWx3czJfMzIKKwlQVEhSRUFEX0xJQlMgPQorCVggPSAuZXhlCitpZm5lcSAoLCQod2lsZGNhcmQgLi4vVEhJU19JU19NU1lTR0lUKSkKKwlodG1sZGlyPWRvYy9naXQvaHRtbC8KKwlwcmVmaXggPQorCUlOU1RBTEwgPSAvYmluL2luc3RhbGwKKwlFWFRMSUJTICs9IC9taW5ndy9saWIvbGliei5hCisJTk9fUl9UT19HQ0NfTElOS0VSID0gWWVzUGxlYXNlCisJSU5URVJOQUxfUVNPUlQgPSBZZXNQbGVhc2UKK2Vsc2UKKwlOT19DVVJMID0gWWVzUGxlYXNlCitlbmRpZgogZW5kaWYKIAogLWluY2x1ZGUgY29uZmlnLm1hay5hdXRvZ2VuCiAtaW5jbHVkZSBjb25maWcubWFrCiAKK2lmZGVmIFNBTkVfVE9PTF9QQVRICitTQU5FX1RPT0xfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoU0FORV9UT09MX1BBVEgpKQorQlJPS0VOX1BBVEhfRklYID0gJ3N8XlwjIEBAQlJPS0VOX1BBVEhfRklYQEAkJHxnaXRfYnJva2VuX3BhdGhfZml4ICQoU0FORV9UT09MX1BBVEhfU1EpfCcKK1BBVEggOj0gJChTQU5FX1RPT0xfUEFUSCk6JHtQQVRIfQorZWxzZQorQlJPS0VOX1BBVEhfRklYID0gJy9eXCMgQEBCUk9LRU5fUEFUSF9GSVhAQCQkL2QnCitlbmRpZgorCiBpZmVxICgkKHVuYW1lX1MpLERhcndpbikKIAlpZm5kZWYgTk9fRklOSwogCQlpZmVxICgkKHNoZWxsIHRlc3QgLWQgL3N3L2xpYiAmJiBlY2hvIHkpLHkpCkBAIC04ODMsOCArMTA2MiwxNiBAQAogCWVuZGlmCiBlbmRpZgogCitpZmRlZiBOT19MSUJHRU5fSAorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19MSUJHRU5fSAorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9iYXNlbmFtZS5vCitlbmRpZgorCiBpZmRlZiBOT19DVVJMCiAJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fQ1VSTAorCVJFTU9URV9DVVJMX1BSSU1BUlkgPQorCVJFTU9URV9DVVJMX0FMSUFTRVMgPQorCVJFTU9URV9DVVJMX05BTUVTID0KIGVsc2UKIAlpZmRlZiBDVVJMRElSCiAJCSMgVHJ5ICItV2wsLXJwYXRoPSQoQ1VSTERJUikvJChsaWIpIiBpbiBzdWNoIGEgY2FzZS4KQEAgLTg5Myw5ICsxMDgwLDEwIEBACiAJZWxzZQogCQlDVVJMX0xJQkNVUkwgPSAtbGN1cmwKIAllbmRpZgotCUJVSUxUSU5fT0JKUyArPSBidWlsdGluLWh0dHAtZmV0Y2gubwotCUVYVExJQlMgKz0gJChDVVJMX0xJQkNVUkwpCi0JTElCX09CSlMgKz0gaHR0cC5vIGh0dHAtd2Fsa2VyLm8KKwlSRU1PVEVfQ1VSTF9QUklNQVJZID0gZ2l0LXJlbW90ZS1odHRwJFgKKwlSRU1PVEVfQ1VSTF9BTElBU0VTID0gZ2l0LXJlbW90ZS1odHRwcyRYIGdpdC1yZW1vdGUtZnRwJFggZ2l0LXJlbW90ZS1mdHBzJFgKKwlSRU1PVEVfQ1VSTF9OQU1FUyA9ICQoUkVNT1RFX0NVUkxfUFJJTUFSWSkgJChSRU1PVEVfQ1VSTF9BTElBU0VTKQorCVBST0dSQU1TICs9ICQoUkVNT1RFX0NVUkxfTkFNRVMpIGdpdC1odHRwLWZldGNoJFgKIAljdXJsX2NoZWNrIDo9ICQoc2hlbGwgKGVjaG8gMDcwOTA4OyBjdXJsLWNvbmZpZyAtLXZlcm51bSkgfCBzb3J0IC1yIHwgc2VkIC1uZSAycCkKIAlpZmVxICIkKGN1cmxfY2hlY2spIiAiMDcwOTA4IgogCQlpZm5kZWYgTk9fRVhQQVQKQEAgLTkyMCw3ICsxMTA4LDYgQEAKIAogaWZuZGVmIE5PX1BPU0lYX09OTFlfUFJPR1JBTVMKIAlQUk9HUkFNUyArPSBnaXQtZGFlbW9uJFgKLQlQUk9HUkFNUyArPSBnaXQtaW1hcC1zZW5kJFgKIGVuZGlmCiBpZm5kZWYgTk9fT1BFTlNTTAogCU9QRU5TU0xfTElCU1NMID0gLWxzc2wKQEAgLTkzMCw5ICsxMTE3LDEyIEBACiAJZWxzZQogCQlPUEVOU1NMX0xJTksgPQogCWVuZGlmCisJaWZkZWYgTkVFRFNfQ1JZUFRPX1dJVEhfU1NMCisJCU9QRU5TU0xfTElOSyArPSAtbGNyeXB0bworCWVuZGlmCiBlbHNlCiAJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fT1BFTlNTTAotCU1PWklMTEFfU0hBMSA9IDEKKwlCTEtfU0hBMSA9IDEKIAlPUEVOU1NMX0xJQlNTTCA9CiBlbmRpZgogaWZkZWYgTkVFRFNfU1NMX1dJVEhfQ1JZUFRPCkBAIC05NDksMTIgKzExMzksMTggQEAKIAllbmRpZgogCUVYVExJQlMgKz0gJChJQ09OVl9MSU5LKSAtbGljb252CiBlbmRpZgoraWZkZWYgTkVFRFNfTElCR0VOCisJRVhUTElCUyArPSAtbGdlbgorZW5kaWYKIGlmZGVmIE5FRURTX1NPQ0tFVAogCUVYVExJQlMgKz0gLWxzb2NrZXQKIGVuZGlmCiBpZmRlZiBORUVEU19OU0wKIAlFWFRMSUJTICs9IC1sbnNsCiBlbmRpZgoraWZkZWYgTkVFRFNfUkVTT0xWCisJRVhUTElCUyArPSAtbHJlc29sdgorZW5kaWYKIGlmZGVmIE5PX0RfVFlQRV9JTl9ESVJFTlQKIAlCQVNJQ19DRkxBR1MgKz0gLUROT19EX1RZUEVfSU5fRElSRU5UCiBlbmRpZgpAQCAtMTAxMCw2ICsxMjA2LDkgQEAKIAlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fTUtEVEVNUAogCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9ta2R0ZW1wLm8KIGVuZGlmCitpZmRlZiBOT19NS1NURU1QUworCUNPTVBBVF9DRkxBR1MgKz0gLUROT19NS1NURU1QUworZW5kaWYKIGlmZGVmIE5PX1VOU0VURU5WCiAJQ09NUEFUX0NGTEFHUyArPSAtRE5PX1VOU0VURU5WCiAJQ09NUEFUX09CSlMgKz0gY29tcGF0L3Vuc2V0ZW52Lm8KQEAgLTEwNzEsMjMgKzEyNzAsMTggQEAKIAlCQVNJQ19DRkxBR1MgKz0gLUROT19ERUZMQVRFX0JPVU5ECiBlbmRpZgogCitpZmRlZiBCTEtfU0hBMQorCVNIQTFfSEVBREVSID0gImJsb2NrLXNoYTEvc2hhMS5oIgorCUxJQl9PQkpTICs9IGJsb2NrLXNoYTEvc2hhMS5vCitlbHNlCiBpZmRlZiBQUENfU0hBMQogCVNIQTFfSEVBREVSID0gInBwYy9zaGExLmgiCiAJTElCX09CSlMgKz0gcHBjL3NoYTEubyBwcGMvc2hhMXBwYy5vCiBlbHNlCi1pZmRlZiBBUk1fU0hBMQotCVNIQTFfSEVBREVSID0gImFybS9zaGExLmgiCi0JTElCX09CSlMgKz0gYXJtL3NoYTEubyBhcm0vc2hhMV9hcm0ubwotZWxzZQotaWZkZWYgTU9aSUxMQV9TSEExCi0JU0hBMV9IRUFERVIgPSAibW96aWxsYS1zaGExL3NoYTEuaCIKLQlMSUJfT0JKUyArPSBtb3ppbGxhLXNoYTEvc2hhMS5vCi1lbHNlCiAJU0hBMV9IRUFERVIgPSA8b3BlbnNzbC9zaGEuaD4KIAlFWFRMSUJTICs9ICQoTElCXzRfQ1JZUFRPKQogZW5kaWYKIGVuZGlmCi1lbmRpZgogaWZkZWYgTk9fUEVSTF9NQUtFTUFLRVIKIAlleHBvcnQgTk9fUEVSTF9NQUtFTUFLRVIKIGVuZGlmCkBAIC0xMTA4LDI1ICsxMzAyLDI3IEBACiBlbmRpZgogCiBpZmRlZiBOT19QVEhSRUFEUwotCVRIUkVBREVEX0RFTFRBX1NFQVJDSCA9CiAJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fUFRIUkVBRFMKIGVsc2UKIAlFWFRMSUJTICs9ICQoUFRIUkVBRF9MSUJTKQotZW5kaWYKLQotaWZkZWYgVEhSRUFERURfREVMVEFfU0VBUkNICi0JQkFTSUNfQ0ZMQUdTICs9IC1EVEhSRUFERURfREVMVEFfU0VBUkNICiAJTElCX09CSlMgKz0gdGhyZWFkLXV0aWxzLm8KIGVuZGlmCisKIGlmZGVmIERJUl9IQVNfQlNEX0dST1VQX1NFTUFOVElDUwogCUNPTVBBVF9DRkxBR1MgKz0gLURESVJfSEFTX0JTRF9HUk9VUF9TRU1BTlRJQ1MKIGVuZGlmCi1pZmRlZiBOT19FWFRFUk5BTF9HUkVQCi0JQkFTSUNfQ0ZMQUdTICs9IC1ETk9fRVhURVJOQUxfR1JFUAotZW5kaWYKIGlmZGVmIFVOUkVMSUFCTEVfRlNUQVQKIAlCQVNJQ19DRkxBR1MgKz0gLURVTlJFTElBQkxFX0ZTVEFUCiBlbmRpZgoraWZkZWYgTk9fUkVHRVgKKwlDT01QQVRfQ0ZMQUdTICs9IC1JY29tcGF0L3JlZ2V4CisJQ09NUEFUX09CSlMgKz0gY29tcGF0L3JlZ2V4L3JlZ2V4Lm8KK2VuZGlmCisKK2lmZGVmIFVTRV9ORURfQUxMT0NBVE9SCisgICAgICAgQ09NUEFUX0NGTEFHUyArPSAtRFVTRV9ORURfQUxMT0NBVE9SIC1ET1ZFUlJJREVfU1RSRFVQIC1ETkRFQlVHIC1EUkVQTEFDRV9TWVNURU1fQUxMT0NBVE9SIC1JY29tcGF0L25lZG1hbGxvYworICAgICAgIENPTVBBVF9PQkpTICs9IGNvbXBhdC9uZWRtYWxsb2MvbmVkbWFsbG9jLm8KK2VuZGlmCiAKIGlmZXEgKCQoVENMVEtfUEFUSCksKQogTk9fVENMVEs9Tm9UaGFua3MKQEAgLTExMzYsNiArMTMzMiwxMCBAQAogTk9fUEVSTD1Ob1RoYW5rcwogZW5kaWYKIAoraWZlcSAoJChQWVRIT05fUEFUSCksKQorTk9fUFlUSE9OPU5vVGhhbmtzCitlbmRpZgorCiBRVUlFVF9TVUJESVIwICA9ICskKE1BS0UpIC1DICMgc3BhY2UgdG8gc2VwYXJhdGUgLUMgYW5kIHN1YmRpcgogUVVJRVRfU1VCRElSMSAgPQogCkBAIC0xMTUyLDYgKzEzNTIsNyBAQAogCVFVSUVUX0xJTksgICAgID0gQGVjaG8gJyAgICcgTElOSyAkQDsKIAlRVUlFVF9CVUlMVF9JTiA9IEBlY2hvICcgICAnIEJVSUxUSU4gJEA7CiAJUVVJRVRfR0VOICAgICAgPSBAZWNobyAnICAgJyBHRU4gJEA7CisJUVVJRVRfTE5DUCAgICAgPSBAZWNobyAnICAgJyBMTi9DUCAkQDsKIAlRVUlFVF9TVUJESVIwICA9ICtAc3ViZGlyPQogCVFVSUVUX1NVQkRJUjEgID0gOyQoTk9fU1VCRElSKSBlY2hvICcgICAnIFNVQkRJUiAkJHN1YmRpcjsgXAogCQkJICQoTUFLRSkgJChQUklOVF9ESVIpIC1DICQkc3ViZGlyCkBAIC0xMTgyLDYgKzEzODMsNyBAQAogCiBTSEVMTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChTSEVMTF9QQVRIKSkKIFBFUkxfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoUEVSTF9QQVRIKSkKK1BZVEhPTl9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChQWVRIT05fUEFUSCkpCiBUQ0xUS19QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChUQ0xUS19QQVRIKSkKIAogTElCUyA9ICQoR0lUTElCUykgJChFWFRMSUJTKQpAQCAtMTE5MCw2ICsxMzkyLDIyIEBACiAJJChDT01QQVRfQ0ZMQUdTKQogTElCX09CSlMgKz0gJChDT01QQVRfT0JKUykKIAorIyBRdW90ZSBmb3IgQworCitpZmRlZiBERUZBVUxUX0VESVRPUgorREVGQVVMVF9FRElUT1JfQ1EgPSAiJChzdWJzdCAiLFwiLCQoc3Vic3QgXCxcXCwkKERFRkFVTFRfRURJVE9SKSkpIgorREVGQVVMVF9FRElUT1JfQ1FfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKERFRkFVTFRfRURJVE9SX0NRKSkKKworQkFTSUNfQ0ZMQUdTICs9IC1EREVGQVVMVF9FRElUT1I9JyQoREVGQVVMVF9FRElUT1JfQ1FfU1EpJworZW5kaWYKKworaWZkZWYgREVGQVVMVF9QQUdFUgorREVGQVVMVF9QQUdFUl9DUSA9ICIkKHN1YnN0ICIsXCIsJChzdWJzdCBcLFxcLCQoREVGQVVMVF9QQUdFUikpKSIKK0RFRkFVTFRfUEFHRVJfQ1FfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKERFRkFVTFRfUEFHRVJfQ1EpKQorCitCQVNJQ19DRkxBR1MgKz0gLURERUZBVUxUX1BBR0VSPSckKERFRkFVTFRfUEFHRVJfQ1FfU1EpJworZW5kaWYKKwogQUxMX0NGTEFHUyArPSAkKEJBU0lDX0NGTEFHUykKIEFMTF9MREZMQUdTICs9ICQoQkFTSUNfTERGTEFHUykKIApAQCAtMTIwMiw3ICsxNDIwLDcgQEAKIAogYWxsOjogc2hlbGxfY29tcGF0aWJpbGl0eV90ZXN0ICQoQUxMX1BST0dSQU1TKSAkKEJVSUxUX0lOUykgJChPVEhFUl9QUk9HUkFNUykgR0lULUJVSUxELU9QVElPTlMKIGlmbmVxICgsJFgpCi0JJChmb3JlYWNoIHAsJChwYXRzdWJzdCAlJFgsJSwkKGZpbHRlciAlJFgsJChBTExfUFJPR1JBTVMpICQoQlVJTFRfSU5TKSBnaXQkWCkpLCB0ZXN0ICckcCcgLWVmICckcCRYJyB8fCAkKFJNKSAnJHAnOykKKwkkKFFVSUVUX0JVSUxUX0lOKSQoZm9yZWFjaCBwLCQocGF0c3Vic3QgJSRYLCUsJChmaWx0ZXIgJSRYLCQoQUxMX1BST0dSQU1TKSAkKEJVSUxUX0lOUykgZ2l0JFgpKSwgdGVzdCAtZCAnJHAnIC1vICckcCcgLWVmICckcCRYJyB8fCAkKFJNKSAnJHAnOykKIGVuZGlmCiAKIGFsbDo6CkBAIC0xMjEzLDYgKzE0MzEsOSBAQAogaWZuZGVmIE5PX1BFUkwKIAkkKFFVSUVUX1NVQkRJUjApcGVybCAkKFFVSUVUX1NVQkRJUjEpIFBFUkxfUEFUSD0nJChQRVJMX1BBVEhfU1EpJyBwcmVmaXg9JyQocHJlZml4X1NRKScgYWxsCiBlbmRpZgoraWZuZGVmIE5PX1BZVEhPTgorCSQoUVVJRVRfU1VCRElSMClnaXRfcmVtb3RlX2hlbHBlcnMgJChRVUlFVF9TVUJESVIxKSBQWVRIT05fUEFUSD0nJChQWVRIT05fUEFUSF9TUSknIHByZWZpeD0nJChwcmVmaXhfU1EpJyBhbGwKK2VuZGlmCiAJJChRVUlFVF9TVUJESVIwKXRlbXBsYXRlcyAkKFFVSUVUX1NVQkRJUjEpCiAKIHBsZWFzZV9zZXRfU0hFTExfUEFUSF90b19hX21vcmVfbW9kZXJuX3NoZWxsOgpAQCAtMTIyMywyMCArMTQ0NCwxOSBAQAogc3RyaXA6ICQoUFJPR1JBTVMpIGdpdCRYCiAJJChTVFJJUCkgJChTVFJJUF9PUFRTKSAkKFBST0dSQU1TKSBnaXQkWAogCi1naXQubzogZ2l0LmMgY29tbW9uLWNtZHMuaCBHSVQtQ0ZMQUdTCi0JJChRVUlFVF9DQykkKENDKSAtREdJVF9WRVJTSU9OPSciJChHSVRfVkVSU0lPTikiJyBcCi0JCSctREdJVF9IVE1MX1BBVEg9IiQoaHRtbGRpcl9TUSkiJyBcCi0JCSQoQUxMX0NGTEFHUykgLWMgJChmaWx0ZXIgJS5jLCReKQorZ2l0Lm86IGNvbW1vbi1jbWRzLmgKK2dpdC5zIGdpdC5vOiBBTExfQ0ZMQUdTICs9IC1ER0lUX1ZFUlNJT049JyIkKEdJVF9WRVJTSU9OKSInIFwKKwknLURHSVRfSFRNTF9QQVRIPSIkKGh0bWxkaXJfU1EpIicKIAogZ2l0JFg6IGdpdC5vICQoQlVJTFRJTl9PQkpTKSAkKEdJVExJQlMpCiAJJChRVUlFVF9MSU5LKSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgZ2l0Lm8gXAogCQkkKEJVSUxUSU5fT0JKUykgJChBTExfTERGTEFHUykgJChMSUJTKQogCi1idWlsdGluLWhlbHAubzogYnVpbHRpbi1oZWxwLmMgY29tbW9uLWNtZHMuaCBHSVQtQ0ZMQUdTCi0JJChRVUlFVF9DQykkKENDKSAtbyAkKi5vIC1jICQoQUxMX0NGTEFHUykgXAotCQknLURHSVRfSFRNTF9QQVRIPSIkKGh0bWxkaXJfU1EpIicgXAotCQknLURHSVRfTUFOX1BBVEg9IiQobWFuZGlyX1NRKSInIFwKLQkJJy1ER0lUX0lORk9fUEFUSD0iJChpbmZvZGlyX1NRKSInICQ8CitidWlsdGluLWhlbHAubzogY29tbW9uLWNtZHMuaAorYnVpbHRpbi1oZWxwLnMgYnVpbHRpbi1oZWxwLm86IEFMTF9DRkxBR1MgKz0gXAorCSctREdJVF9IVE1MX1BBVEg9IiQoaHRtbGRpcl9TUSkiJyBcCisJJy1ER0lUX01BTl9QQVRIPSIkKG1hbmRpcl9TUSkiJyBcCisJJy1ER0lUX0lORk9fUEFUSD0iJChpbmZvZGlyX1NRKSInCiAKICQoQlVJTFRfSU5TKTogZ2l0JFgKIAkkKFFVSUVUX0JVSUxUX0lOKSQoUk0pICRAICYmIFwKQEAgLTEyNTMsOSArMTQ3Myw5IEBACiAJJChRVUlFVF9HRU4pJChSTSkgJEAgJEArICYmIFwKIAlzZWQgLWUgJzFzfCMhLiovc2h8IyEkKFNIRUxMX1BBVEhfU1EpfCcgXAogCSAgICAtZSAnc3xAU0hFTExfUEFUSEB8JChTSEVMTF9QQVRIX1NRKXwnIFwKLQkgICAgLWUgJ3N8QEBQRVJMQEB8JChQRVJMX1BBVEhfU1EpfGcnIFwKIAkgICAgLWUgJ3MvQEBHSVRfVkVSU0lPTkBALyQoR0lUX1ZFUlNJT04pL2cnIFwKIAkgICAgLWUgJ3MvQEBOT19DVVJMQEAvJChOT19DVVJMKS9nJyBcCisJICAgIC1lICQoQlJPS0VOX1BBVEhfRklYKSBcCiAJICAgICRALnNoID4kQCsgJiYgXAogCWNobW9kICt4ICRAKyAmJiBcCiAJbXYgJEArICRACkBAIC0xMjcyLDcgKzE0OTIsNyBAQAogCXNlZCAtZSAnMXsnIFwKIAkgICAgLWUgJwlzfCMhLipwZXJsfCMhJChQRVJMX1BBVEhfU1EpfCcgXAogCSAgICAtZSAnCWgnIFwKLQkgICAgLWUgJwlzPS4qPXVzZSBsaWIgKHNwbGl0KC86LywgJCRFTlZ7R0lUUEVSTExJQn0gfHwgIkBASU5TVExJQkRJUkBAIikpOz0nIFwKKwkgICAgLWUgJwlzPS4qPXVzZSBsaWIgKHNwbGl0KC8kKHBhdGhzZXApLywgJCRFTlZ7R0lUUEVSTExJQn0gfHwgIkBASU5TVExJQkRJUkBAIikpOz0nIFwKIAkgICAgLWUgJwlIJyBcCiAJICAgIC1lICcJeCcgXAogCSAgICAtZSAnfScgXApAQCAtMTI4MiwzMyArMTUwMiwyNyBAQAogCWNobW9kICt4ICRAKyAmJiBcCiAJbXYgJEArICRACiAKKworLlBIT05ZOiBnaXR3ZWIKK2dpdHdlYjoKKwkkKFFVSUVUX1NVQkRJUjApZ2l0d2ViICQoUVVJRVRfU1VCRElSMSkgYWxsCisKK2lmZGVmIEpTTUlOCitPVEhFUl9QUk9HUkFNUyArPSBnaXR3ZWIvZ2l0d2ViLmNnaSAgIGdpdHdlYi9naXR3ZWIubWluLmpzCitnaXR3ZWIvZ2l0d2ViLmNnaTogZ2l0d2ViL2dpdHdlYi5wZXJsIGdpdHdlYi9naXR3ZWIubWluLmpzCitlbHNlCiBPVEhFUl9QUk9HUkFNUyArPSBnaXR3ZWIvZ2l0d2ViLmNnaQogZ2l0d2ViL2dpdHdlYi5jZ2k6IGdpdHdlYi9naXR3ZWIucGVybAotCSQoUVVJRVRfR0VOKSQoUk0pICRAICRAKyAmJiBcCi0Jc2VkIC1lICcxc3wjIS4qcGVybHwjISQoUEVSTF9QQVRIX1NRKXwnIFwKLQkgICAgLWUgJ3N8KytHSVRfVkVSU0lPTisrfCQoR0lUX1ZFUlNJT04pfGcnIFwKLQkgICAgLWUgJ3N8KytHSVRfQklORElSKyt8JChiaW5kaXIpfGcnIFwKLQkgICAgLWUgJ3N8KytHSVRXRUJfQ09ORklHKyt8JChHSVRXRUJfQ09ORklHKXxnJyBcCi0JICAgIC1lICdzfCsrR0lUV0VCX0NPTkZJR19TWVNURU0rK3wkKEdJVFdFQl9DT05GSUdfU1lTVEVNKXxnJyBcCi0JICAgIC1lICdzfCsrR0lUV0VCX0hPTUVfTElOS19TVFIrK3wkKEdJVFdFQl9IT01FX0xJTktfU1RSKXxnJyBcCi0JICAgIC1lICdzfCsrR0lUV0VCX1NJVEVOQU1FKyt8JChHSVRXRUJfU0lURU5BTUUpfGcnIFwKLQkgICAgLWUgJ3N8KytHSVRXRUJfUFJPSkVDVFJPT1QrK3wkKEdJVFdFQl9QUk9KRUNUUk9PVCl8ZycgXAotCSAgICAtZSAnc3wiKytHSVRXRUJfUFJPSkVDVF9NQVhERVBUSCsrInwkKEdJVFdFQl9QUk9KRUNUX01BWERFUFRIKXxnJyBcCi0JICAgIC1lICdzfCsrR0lUV0VCX0VYUE9SVF9PSysrfCQoR0lUV0VCX0VYUE9SVF9PSyl8ZycgXAotCSAgICAtZSAnc3wrK0dJVFdFQl9TVFJJQ1RfRVhQT1JUKyt8JChHSVRXRUJfU1RSSUNUX0VYUE9SVCl8ZycgXAotCSAgICAtZSAnc3wrK0dJVFdFQl9CQVNFX1VSTCsrfCQoR0lUV0VCX0JBU0VfVVJMKXxnJyBcCi0JICAgIC1lICdzfCsrR0lUV0VCX0xJU1QrK3wkKEdJVFdFQl9MSVNUKXxnJyBcCi0JICAgIC1lICdzfCsrR0lUV0VCX0hPTUVURVhUKyt8JChHSVRXRUJfSE9NRVRFWFQpfGcnIFwKLQkgICAgLWUgJ3N8KytHSVRXRUJfQ1NTKyt8JChHSVRXRUJfQ1NTKXxnJyBcCi0JICAgIC1lICdzfCsrR0lUV0VCX0xPR08rK3wkKEdJVFdFQl9MT0dPKXxnJyBcCi0JICAgIC1lICdzfCsrR0lUV0VCX0ZBVklDT04rK3wkKEdJVFdFQl9GQVZJQ09OKXxnJyBcCi0JICAgIC1lICdzfCsrR0lUV0VCX1NJVEVfSEVBREVSKyt8JChHSVRXRUJfU0lURV9IRUFERVIpfGcnIFwKLQkgICAgLWUgJ3N8KytHSVRXRUJfU0lURV9GT09URVIrK3wkKEdJVFdFQl9TSVRFX0ZPT1RFUil8ZycgXAotCSAgICAkPCA+JEArICYmIFwKLQljaG1vZCAreCAkQCsgJiYgXAotCW12ICRAKyAkQAorZW5kaWYKKwkkKFFVSUVUX1NVQkRJUjApZ2l0d2ViICQoUVVJRVRfU1VCRElSMSkgJChwYXRzdWJzdCBnaXR3ZWIvJSwlLCRAKQogCi1naXQtaW5zdGF3ZWI6IGdpdC1pbnN0YXdlYi5zaCBnaXR3ZWIvZ2l0d2ViLmNnaSBnaXR3ZWIvZ2l0d2ViLmNzcworaWZkZWYgSlNNSU4KK2dpdHdlYi9naXR3ZWIubWluLmpzOiBnaXR3ZWIvZ2l0d2ViLmpzCisJJChRVUlFVF9TVUJESVIwKWdpdHdlYiAkKFFVSUVUX1NVQkRJUjEpICQocGF0c3Vic3QgZ2l0d2ViLyUsJSwkQCkKK2VuZGlmICMgSlNNSU4KKworCitnaXQtaW5zdGF3ZWI6IGdpdC1pbnN0YXdlYi5zaCBnaXR3ZWIvZ2l0d2ViLmNnaSBnaXR3ZWIvZ2l0d2ViLmNzcyBnaXR3ZWIvZ2l0d2ViLmpzCiAJJChRVUlFVF9HRU4pJChSTSkgJEAgJEArICYmIFwKIAlzZWQgLWUgJzFzfCMhLiovc2h8IyEkKFNIRUxMX1BBVEhfU1EpfCcgXAogCSAgICAtZSAncy9AQEdJVF9WRVJTSU9OQEAvJChHSVRfVkVSU0lPTikvZycgXApAQCAtMTMxNyw2ICsxNTMxLDggQEAKIAkgICAgLWUgJy9AQEdJVFdFQl9DR0lAQC9kJyBcCiAJICAgIC1lICcvQEBHSVRXRUJfQ1NTQEAvciBnaXR3ZWIvZ2l0d2ViLmNzcycgXAogCSAgICAtZSAnL0BAR0lUV0VCX0NTU0BAL2QnIFwKKwkgICAgLWUgJy9AQEdJVFdFQl9KU0BAL3IgZ2l0d2ViL2dpdHdlYi5qcycgXAorCSAgICAtZSAnL0BAR0lUV0VCX0pTQEAvZCcgXAogCSAgICAtZSAnc3xAQFBFUkxAQHwkKFBFUkxfUEFUSF9TUSl8ZycgXAogCSAgICAkQC5zaCA+ICRAKyAmJiBcCiAJY2htb2QgK3ggJEArICYmIFwKQEAgLTEzMzEsNiArMTU0NywzNSBAQAogCW12ICRAKyAkQAogZW5kaWYgIyBOT19QRVJMCiAKK2lmbmRlZiBOT19QWVRIT04KKyQocGF0c3Vic3QgJS5weSwlLCQoU0NSSVBUX1BZVEhPTikpOiBHSVQtQ0ZMQUdTCiskKHBhdHN1YnN0ICUucHksJSwkKFNDUklQVF9QWVRIT04pKTogJSA6ICUucHkKKwkkKFFVSUVUX0dFTikkKFJNKSAkQCAkQCsgJiYgXAorCUlOU1RMSUJESVI9YE1BS0VGTEFHUz0gJChNQUtFKSAtQyBnaXRfcmVtb3RlX2hlbHBlcnMgLXMgXAorCQktLW5vLXByaW50LWRpcmVjdG9yeSBwcmVmaXg9JyQocHJlZml4X1NRKScgREVTVERJUj0nJChERVNURElSX1NRKScgXAorCQlpbnN0bGliZGlyYCAmJiBcCisJc2VkIC1lICcxeycgXAorCSAgICAtZSAnCXN8IyEuKnB5dGhvbnwjISQoUFlUSE9OX1BBVEhfU1EpfCcgXAorCSAgICAtZSAnfScgXAorCSAgICAtZSAnc3xeaW1wb3J0IHN5cy4qfCY7IFxcXAorCSAgICAgICAgICAgaW1wb3J0IG9zOyBcXFwKKwkgICAgICAgICAgIHN5cy5wYXRoWzBdID0gb3MuZW52aXJvbi5oYXNfa2V5KCJHSVRQWVRIT05MSUIiKSBhbmQgXFxcCisJICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmVudmlyb25bIkdJVFBZVEhPTkxJQiJdIG9yIFxcXAorCSAgICAgICAgICAgICAgICAgICAgICAgICAiQEBJTlNUTElCRElSQEAifCcgXAorCSAgICAtZSAnc3xAQElOU1RMSUJESVJAQHwnIiQkSU5TVExJQkRJUiInfGcnIFwKKwkgICAgJEAucHkgPiRAKyAmJiBcCisJY2htb2QgK3ggJEArICYmIFwKKwltdiAkQCsgJEAKK2Vsc2UgIyBOT19QWVRIT04KKyQocGF0c3Vic3QgJS5weSwlLCQoU0NSSVBUX1BZVEhPTikpOiAlIDogdW5pbXBsZW1lbnRlZC5zaAorCSQoUVVJRVRfR0VOKSQoUk0pICRAICRAKyAmJiBcCisJc2VkIC1lICcxc3wjIS4qL3NofCMhJChTSEVMTF9QQVRIX1NRKXwnIFwKKwkgICAgLWUgJ3N8QEBSRUFTT05AQHxOT19QWVRIT049JChOT19QWVRIT04pfGcnIFwKKwkgICAgdW5pbXBsZW1lbnRlZC5zaCA+JEArICYmIFwKKwljaG1vZCAreCAkQCsgJiYgXAorCW12ICRAKyAkQAorZW5kaWYgIyBOT19QWVRIT04KKwogY29uZmlndXJlOiBjb25maWd1cmUuYWMKIAkkKFFVSUVUX0dFTikkKFJNKSAkQCAkPCsgJiYgXAogCXNlZCAtZSAncy9AQEdJVF9WRVJTSU9OQEAvJChHSVRfVkVSU0lPTikvZycgXApAQCAtMTM0NiwzMCArMTU5MSwyNiBAQAogCiAlLm86ICUuYyBHSVQtQ0ZMQUdTCiAJJChRVUlFVF9DQykkKENDKSAtbyAkKi5vIC1jICQoQUxMX0NGTEFHUykgJDwKLSUuczogJS5jIEdJVC1DRkxBR1MKKyUuczogJS5jIEdJVC1DRkxBR1MgRk9SQ0UKIAkkKFFVSUVUX0NDKSQoQ0MpIC1TICQoQUxMX0NGTEFHUykgJDwKLSUubzogJS5TCislLm86ICUuUyBHSVQtQ0ZMQUdTCiAJJChRVUlFVF9DQykkKENDKSAtbyAkKi5vIC1jICQoQUxMX0NGTEFHUykgJDwKIAotZXhlY19jbWQubzogZXhlY19jbWQuYyBHSVQtQ0ZMQUdTCi0JJChRVUlFVF9DQykkKENDKSAtbyAkKi5vIC1jICQoQUxMX0NGTEFHUykgXAotCQknLURHSVRfRVhFQ19QQVRIPSIkKGdpdGV4ZWNkaXJfU1EpIicgXAotCQknLURCSU5ESVI9IiQoYmluZGlyX3JlbGF0aXZlX1NRKSInIFwKLQkJJy1EUFJFRklYPSIkKHByZWZpeF9TUSkiJyBcCi0JCSQ8CitleGVjX2NtZC5zIGV4ZWNfY21kLm86IEFMTF9DRkxBR1MgKz0gXAorCSctREdJVF9FWEVDX1BBVEg9IiQoZ2l0ZXhlY2Rpcl9TUSkiJyBcCisJJy1EQklORElSPSIkKGJpbmRpcl9yZWxhdGl2ZV9TUSkiJyBcCisJJy1EUFJFRklYPSIkKHByZWZpeF9TUSkiJwogCi1idWlsdGluLWluaXQtZGIubzogYnVpbHRpbi1pbml0LWRiLmMgR0lULUNGTEFHUwotCSQoUVVJRVRfQ0MpJChDQykgLW8gJCoubyAtYyAkKEFMTF9DRkxBR1MpIC1EREVGQVVMVF9HSVRfVEVNUExBVEVfRElSPSciJCh0ZW1wbGF0ZV9kaXJfU1EpIicgJDwKK2J1aWx0aW4taW5pdC1kYi5zIGJ1aWx0aW4taW5pdC1kYi5vOiBBTExfQ0ZMQUdTICs9IFwKKwktRERFRkFVTFRfR0lUX1RFTVBMQVRFX0RJUj0nIiQodGVtcGxhdGVfZGlyX1NRKSInCiAKLWNvbmZpZy5vOiBjb25maWcuYyBHSVQtQ0ZMQUdTCi0JJChRVUlFVF9DQykkKENDKSAtbyAkKi5vIC1jICQoQUxMX0NGTEFHUykgLURFVENfR0lUQ09ORklHPSciJChFVENfR0lUQ09ORklHX1NRKSInICQ8Citjb25maWcucyBjb25maWcubzogQUxMX0NGTEFHUyArPSAtREVUQ19HSVRDT05GSUc9JyIkKEVUQ19HSVRDT05GSUdfU1EpIicKIAotaHR0cC5vOiBodHRwLmMgR0lULUNGTEFHUwotCSQoUVVJRVRfQ0MpJChDQykgLW8gJCoubyAtYyAkKEFMTF9DRkxBR1MpIC1ER0lUX1VTRVJfQUdFTlQ9JyJnaXQvJChHSVRfVkVSU0lPTikiJyAkPAoraHR0cC5zIGh0dHAubzogQUxMX0NGTEFHUyArPSAtREdJVF9VU0VSX0FHRU5UPSciZ2l0LyQoR0lUX1ZFUlNJT04pIicKIAogaWZkZWYgTk9fRVhQQVQKLWh0dHAtd2Fsa2VyLm86IGh0dHAtd2Fsa2VyLmMgaHR0cC5oIEdJVC1DRkxBR1MKLQkkKFFVSUVUX0NDKSQoQ0MpIC1vICQqLm8gLWMgJChBTExfQ0ZMQUdTKSAtRE5PX0VYUEFUICQ8CitodHRwLXdhbGtlci5vOiBodHRwLmgKK2h0dHAtd2Fsa2VyLnMgaHR0cC13YWxrZXIubzogQUxMX0NGTEFHUyArPSAtRE5PX0VYUEFUCiBlbmRpZgogCiBnaXQtJSRYOiAlLm8gJChHSVRMSUJTKQpAQCAtMTM3OSwxMiArMTYyMCwyNyBAQAogCSQoUVVJRVRfTElOSykkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoQUxMX0xERkxBR1MpICQoZmlsdGVyICUubywkXikgXAogCQkkKExJQlMpICQoT1BFTlNTTF9MSU5LKSAkKE9QRU5TU0xfTElCU1NMKQogCi1odHRwLm8gaHR0cC13YWxrZXIubyBodHRwLXB1c2gubyB0cmFuc3BvcnQubzogaHR0cC5oCitodHRwLm8gaHR0cC13YWxrZXIubyBodHRwLXB1c2gubzogaHR0cC5oCiAKK2h0dHAubyBodHRwLXdhbGtlci5vOiAkKExJQl9IKQorCitnaXQtaHR0cC1mZXRjaCRYOiByZXZpc2lvbi5vIGh0dHAubyBodHRwLXdhbGtlci5vIGh0dHAtZmV0Y2gubyAkKEdJVExJQlMpCisJJChRVUlFVF9MSU5LKSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChBTExfTERGTEFHUykgJChmaWx0ZXIgJS5vLCReKSBcCisJCSQoTElCUykgJChDVVJMX0xJQkNVUkwpCiBnaXQtaHR0cC1wdXNoJFg6IHJldmlzaW9uLm8gaHR0cC5vIGh0dHAtcHVzaC5vICQoR0lUTElCUykKIAkkKFFVSUVUX0xJTkspJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKEFMTF9MREZMQUdTKSAkKGZpbHRlciAlLm8sJF4pIFwKIAkJJChMSUJTKSAkKENVUkxfTElCQ1VSTCkgJChFWFBBVF9MSUJFWFBBVCkKIAorJChSRU1PVEVfQ1VSTF9BTElBU0VTKTogJChSRU1PVEVfQ1VSTF9QUklNQVJZKQorCSQoUVVJRVRfTE5DUCkkKFJNKSAkQCAmJiBcCisJbG4gJDwgJEAgMj4vZGV2L251bGwgfHwgXAorCWxuIC1zICQ8ICRAIDI+L2Rldi9udWxsIHx8IFwKKwljcCAkPCAkQAorCiskKFJFTU9URV9DVVJMX1BSSU1BUlkpOiByZW1vdGUtY3VybC5vIGh0dHAubyBodHRwLXdhbGtlci5vICQoR0lUTElCUykKKwkkKFFVSUVUX0xJTkspJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKEFMTF9MREZMQUdTKSAkKGZpbHRlciAlLm8sJF4pIFwKKwkJJChMSUJTKSAkKENVUkxfTElCQ1VSTCkgJChFWFBBVF9MSUJFWFBBVCkKKwogJChMSUJfT0JKUykgJChCVUlMVElOX09CSlMpOiAkKExJQl9IKQogJChwYXRzdWJzdCBnaXQtJSRYLCUubywkKFBST0dSQU1TKSkgZ2l0Lm86ICQoTElCX0gpICQod2lsZGNhcmQgKi8qLmgpCiBidWlsdGluLXJldmVydC5vIHd0LXN0YXR1cy5vOiB3dC1zdGF0dXMuaApAQCAtMTQzMiw3ICsxNjg4LDcgQEAKIFRSQUNLX0NGTEFHUyA9ICQoc3Vic3QgJywnXCcnLCQoQUxMX0NGTEFHUykpOlwKICAgICAgICAgICAgICAkKGJpbmRpcl9TUSk6JChnaXRleGVjZGlyX1NRKTokKHRlbXBsYXRlX2Rpcl9TUSk6JChwcmVmaXhfU1EpCiAKLUdJVC1DRkxBR1M6IC5GT1JDRS1HSVQtQ0ZMQUdTCitHSVQtQ0ZMQUdTOiBGT1JDRQogCUBGTEFHUz0nJChUUkFDS19DRkxBR1MpJzsgXAogCSAgICBpZiB0ZXN0IHgiJCRGTEFHUyIgIT0geCJgY2F0IEdJVC1DRkxBR1MgMj4vZGV2L251bGxgIiA7IHRoZW4gXAogCQllY2hvIDE+JjIgIiAgICAqIG5ldyBidWlsZCBmbGFncyBvciBwcmVmaXgiOyBcCkBAIC0xNDQyLDQxICsxNjk4LDU0IEBACiAjIFdlIG5lZWQgdG8gYXBwbHkgc3EgdHdpY2UsIG9uY2UgdG8gcHJvdGVjdCBmcm9tIHRoZSBzaGVsbAogIyB0aGF0IHJ1bnMgR0lULUJVSUxELU9QVElPTlMsIGFuZCB0aGVuIGFnYWluIHRvIHByb3RlY3QgaXQKICMgYW5kIHRoZSBmaXJzdCBsZXZlbCBxdW90aW5nIGZyb20gdGhlIHNoZWxsIHRoYXQgcnVucyAiZWNobyIuCi1HSVQtQlVJTEQtT1BUSU9OUzogLkZPUkNFLUdJVC1CVUlMRC1PUFRJT05TCitHSVQtQlVJTEQtT1BUSU9OUzogRk9SQ0UKIAlAZWNobyBTSEVMTF9QQVRIPVwnJyQoc3Vic3QgJywnXCcnLCQoU0hFTExfUEFUSF9TUSkpJ1wnID4kQAorCUBlY2hvIFBFUkxfUEFUSD1cJyckKHN1YnN0ICcsJ1wnJywkKFBFUkxfUEFUSF9TUSkpJ1wnID4+JEAKIAlAZWNobyBUQVI9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChUQVIpKSknXCcgPj4kQAogCUBlY2hvIE5PX0NVUkw9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChOT19DVVJMKSkpJ1wnID4+JEAKIAlAZWNobyBOT19QRVJMPVwnJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgJywnXCcnLCQoTk9fUEVSTCkpKSdcJyA+PiRACisJQGVjaG8gTk9fUFlUSE9OPVwnJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgJywnXCcnLCQoTk9fUFlUSE9OKSkpJ1wnID4+JEAKIAogIyMjIERldGVjdCBUY2svVGsgaW50ZXJwcmV0ZXIgcGF0aCBjaGFuZ2VzCiBpZm5kZWYgTk9fVENMVEsKIFRSQUNLX1ZBUlMgPSAkKHN1YnN0ICcsJ1wnJywtRFRDTFRLX1BBVEg9JyQoVENMVEtfUEFUSF9TUSknKQogCi1HSVQtR1VJLVZBUlM6IC5GT1JDRS1HSVQtR1VJLVZBUlMKK0dJVC1HVUktVkFSUzogRk9SQ0UKIAlAVkFSUz0nJChUUkFDS19WQVJTKSc7IFwKIAkgICAgaWYgdGVzdCB4IiQkVkFSUyIgIT0geCJgY2F0ICRAIDI+L2Rldi9udWxsYCIgOyB0aGVuIFwKIAkJZWNobyAxPiYyICIgICAgKiBuZXcgVGNsL1RrIGludGVycHJldGVyIGxvY2F0aW9uIjsgXAogCQllY2hvICIkJFZBUlMiID4kQDsgXAogICAgICAgICAgICAgZmkKLQotLlBIT05ZOiAuRk9SQ0UtR0lULUdVSS1WQVJTCiBlbmRpZgogCiAjIyMgVGVzdGluZyBydWxlcwogCi1URVNUX1BST0dSQU1TICs9IHRlc3QtY2htdGltZSRYCi1URVNUX1BST0dSQU1TICs9IHRlc3QtY3R5cGUkWAotVEVTVF9QUk9HUkFNUyArPSB0ZXN0LWRhdGUkWAotVEVTVF9QUk9HUkFNUyArPSB0ZXN0LWRlbHRhJFgKLVRFU1RfUFJPR1JBTVMgKz0gdGVzdC1kdW1wLWNhY2hlLXRyZWUkWAotVEVTVF9QUk9HUkFNUyArPSB0ZXN0LWdlbnJhbmRvbSRYCi1URVNUX1BST0dSQU1TICs9IHRlc3QtbWF0Y2gtdHJlZXMkWAotVEVTVF9QUk9HUkFNUyArPSB0ZXN0LXBhcnNlLW9wdGlvbnMkWAotVEVTVF9QUk9HUkFNUyArPSB0ZXN0LXBhdGgtdXRpbHMkWAotVEVTVF9QUk9HUkFNUyArPSB0ZXN0LXNoYTEkWAotVEVTVF9QUk9HUkFNUyArPSB0ZXN0LXNpZ2NoYWluJFgKK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3QtY2htdGltZQorVEVTVF9QUk9HUkFNU19ORUVEX1ggKz0gdGVzdC1jdHlwZQorVEVTVF9QUk9HUkFNU19ORUVEX1ggKz0gdGVzdC1kYXRlCitURVNUX1BST0dSQU1TX05FRURfWCArPSB0ZXN0LWRlbHRhCitURVNUX1BST0dSQU1TX05FRURfWCArPSB0ZXN0LWR1bXAtY2FjaGUtdHJlZQorVEVTVF9QUk9HUkFNU19ORUVEX1ggKz0gdGVzdC1nZW5yYW5kb20KK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3QtbWF0Y2gtdHJlZXMKK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3QtcGFyc2Utb3B0aW9ucworVEVTVF9QUk9HUkFNU19ORUVEX1ggKz0gdGVzdC1wYXRoLXV0aWxzCitURVNUX1BST0dSQU1TX05FRURfWCArPSB0ZXN0LXJ1bi1jb21tYW5kCitURVNUX1BST0dSQU1TX05FRURfWCArPSB0ZXN0LXNoYTEKK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3Qtc2lnY2hhaW4KK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3QtaW5kZXgtdmVyc2lvbgogCi1hbGw6OiAkKFRFU1RfUFJPR1JBTVMpCitURVNUX1BST0dSQU1TID0gJChwYXRzdWJzdCAlLCUkWCwkKFRFU1RfUFJPR1JBTVNfTkVFRF9YKSkKKwordGVzdF9iaW5kaXJfcHJvZ3JhbXMgOj0gJChwYXRzdWJzdCAlLGJpbi13cmFwcGVycy8lLCQoQklORElSX1BST0dSQU1TX05FRURfWCkgJChCSU5ESVJfUFJPR1JBTVNfTk9fWCkgJChURVNUX1BST0dSQU1TX05FRURfWCkpCisKK2FsbDo6ICQoVEVTVF9QUk9HUkFNUykgJCh0ZXN0X2JpbmRpcl9wcm9ncmFtcykKKworYmluLXdyYXBwZXJzLyU6IHdyYXAtZm9yLWJpbi5zaAorCUBta2RpciAtcCBiaW4td3JhcHBlcnMKKwkkKFFVSUVUX0dFTilzZWQgLWUgJzFzfCMhLiovc2h8IyEkKFNIRUxMX1BBVEhfU1EpfCcgXAorCSAgICAgLWUgJ3N8QEBCVUlMRF9ESVJAQHwkKHNoZWxsIHB3ZCl8JyBcCisJICAgICAtZSAnc3xAQFBST0dAQHwkKEBGKXwnIDwgJDwgPiAkQCAmJiBcCisJY2htb2QgK3ggJEAKIAogIyBHTlUgbWFrZSBzdXBwb3J0cyBleHBvcnRpbmcgYWxsIHZhcmlhYmxlcyBieSAiZXhwb3J0IiB3aXRob3V0IHBhcmFtZXRlcnMuCiAjIEhvd2V2ZXIsIHRoZSBlbnZpcm9ubWVudCBnZXRzIHF1aXRlIGJpZywgYW5kIHNvbWUgcHJvZ3JhbXMgaGF2ZSBwcm9ibGVtcwpAQCAtMTQ5NSw2ICsxNzY0LDggQEAKIAogdGVzdC1wYXJzZS1vcHRpb25zJFg6IHBhcnNlLW9wdGlvbnMubwogCit0ZXN0LXBhcnNlLW9wdGlvbnMubzogcGFyc2Utb3B0aW9ucy5oCisKIC5QUkVDSU9VUzogJChwYXRzdWJzdCB0ZXN0LSUkWCx0ZXN0LSUubywkKFRFU1RfUFJPR1JBTVMpKQogCiB0ZXN0LSUkWDogdGVzdC0lLm8gJChHSVRMSUJTKQpAQCAtMTUzNSwxNSArMTgwNiwyMCBAQAogZ2l0ZXhlY19pbnN0ZGlyX1NRID0gJChzdWJzdCAnLCdcJycsJChnaXRleGVjX2luc3RkaXIpKQogZXhwb3J0IGdpdGV4ZWNfaW5zdGRpcgogCitpbnN0YWxsX2JpbmRpcl9wcm9ncmFtcyA6PSAkKHBhdHN1YnN0ICUsJSRYLCQoQklORElSX1BST0dSQU1TX05FRURfWCkpICQoQklORElSX1BST0dSQU1TX05PX1gpCisKIGluc3RhbGw6IGFsbAogCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChiaW5kaXJfU1EpJwogCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChnaXRleGVjX2luc3RkaXJfU1EpJwogCSQoSU5TVEFMTCkgJChBTExfUFJPR1JBTVMpICckKERFU1RESVJfU1EpJChnaXRleGVjX2luc3RkaXJfU1EpJwotCSQoSU5TVEFMTCkgZ2l0JFggZ2l0LXVwbG9hZC1wYWNrJFggZ2l0LXJlY2VpdmUtcGFjayRYIGdpdC11cGxvYWQtYXJjaGl2ZSRYIGdpdC1zaGVsbCRYIGdpdC1jdnNzZXJ2ZXIgJyQoREVTVERJUl9TUSkkKGJpbmRpcl9TUSknCisJJChJTlNUQUxMKSAkKGluc3RhbGxfYmluZGlyX3Byb2dyYW1zKSAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKScKIAkkKE1BS0UpIC1DIHRlbXBsYXRlcyBERVNURElSPSckKERFU1RESVJfU1EpJyBpbnN0YWxsCiBpZm5kZWYgTk9fUEVSTAogCSQoTUFLRSkgLUMgcGVybCBwcmVmaXg9JyQocHJlZml4X1NRKScgREVTVERJUj0nJChERVNURElSX1NRKScgaW5zdGFsbAogZW5kaWYKK2lmbmRlZiBOT19QWVRIT04KKwkkKE1BS0UpIC1DIGdpdF9yZW1vdGVfaGVscGVycyBwcmVmaXg9JyQocHJlZml4X1NRKScgREVTVERJUj0nJChERVNURElSX1NRKScgaW5zdGFsbAorZW5kaWYKIGlmbmRlZiBOT19UQ0xUSwogCSQoTUFLRSkgLUMgZ2l0ay1naXQgaW5zdGFsbAogCSQoTUFLRSkgLUMgZ2l0LWd1aSBnaXRleGVjZGlyPSckKGdpdGV4ZWNfaW5zdGRpcl9TUSknIGluc3RhbGwKQEAgLTE1NTEsMTcgKzE4MjcsMjUgQEAKIGlmbmVxICgsJFgpCiAJJChmb3JlYWNoIHAsJChwYXRzdWJzdCAlJFgsJSwkKGZpbHRlciAlJFgsJChBTExfUFJPR1JBTVMpICQoQlVJTFRfSU5TKSBnaXQkWCkpLCB0ZXN0ICckKERFU1RESVJfU1EpJChnaXRleGVjX2luc3RkaXJfU1EpLyRwJyAtZWYgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSkvJHAkWCcgfHwgJChSTSkgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSkvJHAnOykKIGVuZGlmCisKIAliaW5kaXI9JCQoY2QgJyQoREVTVERJUl9TUSkkKGJpbmRpcl9TUSknICYmIHB3ZCkgJiYgXAogCWV4ZWNkaXI9JCQoY2QgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSknICYmIHB3ZCkgJiYgXAotCXsgJChSTSkgIiQkZXhlY2Rpci9naXQtYWRkJFgiICYmIFwKKwl7IHRlc3QgIiQkYmluZGlyLyIgPSAiJCRleGVjZGlyLyIgfHwgXAorCQl7ICQoUk0pICIkJGV4ZWNkaXIvZ2l0JFgiICYmIFwKIAkJdGVzdCAteiAiJChOT19DUk9TU19ESVJFQ1RPUllfSEFSRExJTktTKSIgJiYgXAotCQlsbiAiJCRiaW5kaXIvZ2l0JFgiICIkJGV4ZWNkaXIvZ2l0LWFkZCRYIiAyPi9kZXYvbnVsbCB8fCBcCi0JCWNwICIkJGJpbmRpci9naXQkWCIgIiQkZXhlY2Rpci9naXQtYWRkJFgiOyB9ICYmIFwKLQl7IGZvciBwIGluICQoZmlsdGVyLW91dCBnaXQtYWRkJFgsJChCVUlMVF9JTlMpKTsgZG8gXAorCQlsbiAiJCRiaW5kaXIvZ2l0JFgiICIkJGV4ZWNkaXIvZ2l0JFgiIDI+L2Rldi9udWxsIHx8IFwKKwkJY3AgIiQkYmluZGlyL2dpdCRYIiAiJCRleGVjZGlyL2dpdCRYIjsgfSA7IH0gJiYgXAorCXsgZm9yIHAgaW4gJChCVUlMVF9JTlMpOyBkbyBcCiAJCSQoUk0pICIkJGV4ZWNkaXIvJCRwIiAmJiBcCi0JCWxuICIkJGV4ZWNkaXIvZ2l0LWFkZCRYIiAiJCRleGVjZGlyLyQkcCIgMj4vZGV2L251bGwgfHwgXAotCQlsbiAtcyAiZ2l0LWFkZCRYIiAiJCRleGVjZGlyLyQkcCIgMj4vZGV2L251bGwgfHwgXAotCQljcCAiJCRleGVjZGlyL2dpdC1hZGQkWCIgIiQkZXhlY2Rpci8kJHAiIHx8IGV4aXQ7IFwKKwkJbG4gIiQkZXhlY2Rpci9naXQkWCIgIiQkZXhlY2Rpci8kJHAiIDI+L2Rldi9udWxsIHx8IFwKKwkJbG4gLXMgImdpdCRYIiAiJCRleGVjZGlyLyQkcCIgMj4vZGV2L251bGwgfHwgXAorCQljcCAiJCRleGVjZGlyL2dpdCRYIiAiJCRleGVjZGlyLyQkcCIgfHwgZXhpdDsgXAorCSAgZG9uZTsgfSAmJiBcCisJeyBmb3IgcCBpbiAkKFJFTU9URV9DVVJMX0FMSUFTRVMpOyBkbyBcCisJCSQoUk0pICIkJGV4ZWNkaXIvJCRwIiAmJiBcCisJCWxuICIkJGV4ZWNkaXIvZ2l0LXJlbW90ZS1odHRwJFgiICIkJGV4ZWNkaXIvJCRwIiAyPi9kZXYvbnVsbCB8fCBcCisJCWxuIC1zICJnaXQtcmVtb3RlLWh0dHAkWCIgIiQkZXhlY2Rpci8kJHAiIDI+L2Rldi9udWxsIHx8IFwKKwkJY3AgIiQkZXhlY2Rpci9naXQtcmVtb3RlLWh0dHAkWCIgIiQkZXhlY2Rpci8kJHAiIHx8IGV4aXQ7IFwKIAkgIGRvbmU7IH0gJiYgXAogCS4vY2hlY2tfYmluZGlyICJ6JCRiaW5kaXIiICJ6JCRleGVjZGlyIiAiJCRiaW5kaXIvZ2l0LWFkZCRYIgogCkBAIC0xNjE0LDcgKzE4OTgsMTAgQEAKIAlnemlwIC1mIC05ICQoR0lUX1RBUk5BTUUpLnRhcgogCiBycG06IGRpc3QKLQkkKFJQTUJVSUxEKSAtdGEgJChHSVRfVEFSTkFNRSkudGFyLmd6CisJJChSUE1CVUlMRCkgXAorCQktLWRlZmluZSAiX3NvdXJjZV9maWxlZGlnZXN0X2FsZ29yaXRobSBtZDUiIFwKKwkJLS1kZWZpbmUgIl9iaW5hcnlfZmlsZWRpZ2VzdF9hbGdvcml0aG0gbWQ1IiBcCisJCS10YSAkKEdJVF9UQVJOQU1FKS50YXIuZ3oKIAogaHRtbGRvY3MgPSBnaXQtaHRtbGRvY3MtJChHSVRfVkVSU0lPTikKIG1hbnBhZ2VzID0gZ2l0LW1hbnBhZ2VzLSQoR0lUX1ZFUlNJT04pCkBAIC0xNjQyLDEwICsxOTI5LDExIEBACiAJJChSTSkgY29uZmlndXJlCiAKIGNsZWFuOgotCSQoUk0pICoubyBtb3ppbGxhLXNoYTEvKi5vIGFybS8qLm8gcHBjLyoubyBjb21wYXQvKi5vIHhkaWZmLyoubyBcCisJJChSTSkgKi5vIGJsb2NrLXNoYTEvKi5vIHBwYy8qLm8gY29tcGF0LyoubyBjb21wYXQvKi8qLm8geGRpZmYvKi5vIFwKIAkJJChMSUJfRklMRSkgJChYRElGRl9MSUIpCiAJJChSTSkgJChBTExfUFJPR1JBTVMpICQoQlVJTFRfSU5TKSBnaXQkWAogCSQoUk0pICQoVEVTVF9QUk9HUkFNUykKKwkkKFJNKSAtciBiaW4td3JhcHBlcnMKIAkkKFJNKSAqLnNwZWMgKi5weWMgKi5weW8gKi8qLnB5YyAqLyoucHlvIGNvbW1vbi1jbWRzLmggVEFHUyB0YWdzIGNzY29wZSoKIAkkKFJNKSAtciBhdXRvbTR0ZS5jYWNoZQogCSQoUk0pIGNvbmZpZy5sb2cgY29uZmlnLm1hay5hdXRvZ2VuIGNvbmZpZy5tYWsuYXBwZW5kIGNvbmZpZy5zdGF0dXMgY29uZmlnLmNhY2hlCkBAIC0xNjU3LDYgKzE5NDUsOSBAQAogCSQoUk0pIGdpdHdlYi9naXR3ZWIuY2dpCiAJJChNQUtFKSAtQyBwZXJsIGNsZWFuCiBlbmRpZgoraWZuZGVmIE5PX1BZVEhPTgorCSQoTUFLRSkgLUMgZ2l0X3JlbW90ZV9oZWxwZXJzIGNsZWFuCitlbmRpZgogCSQoTUFLRSkgLUMgdGVtcGxhdGVzLyBjbGVhbgogCSQoTUFLRSkgLUMgdC8gY2xlYW4KIGlmbmRlZiBOT19UQ0xUSwpAQCAtMTY2Nyw4ICsxOTU4LDcgQEAKIAogLlBIT05ZOiBhbGwgaW5zdGFsbCBjbGVhbiBzdHJpcAogLlBIT05ZOiBzaGVsbF9jb21wYXRpYmlsaXR5X3Rlc3QgcGxlYXNlX3NldF9TSEVMTF9QQVRIX3RvX2FfbW9yZV9tb2Rlcm5fc2hlbGwKLS5QSE9OWTogLkZPUkNFLUdJVC1WRVJTSU9OLUZJTEUgVEFHUyB0YWdzIGNzY29wZSAuRk9SQ0UtR0lULUNGTEFHUwotLlBIT05ZOiAuRk9SQ0UtR0lULUJVSUxELU9QVElPTlMKKy5QSE9OWTogRk9SQ0UgVEFHUyB0YWdzIGNzY29wZQogCiAjIyMgQ2hlY2sgZG9jdW1lbnRhdGlvbgogIwpkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IGM5MzJhYjMuLjY3Y2ZlYjIgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTM3LDcgKzM3LDcgQEAKICgibWFuIGdpdGN2cy1taWdyYXRpb24iIG9yICJnaXQgaGVscCBjdnMtbWlncmF0aW9uIiBpZiBnaXQgaXMKIGluc3RhbGxlZCkuCiAKLU1hbnkgR2l0IG9ubGluZSByZXNvdXJjZXMgYXJlIGFjY2Vzc2libGUgZnJvbSBodHRwOi8vZ2l0Lm9yLmN6LworTWFueSBHaXQgb25saW5lIHJlc291cmNlcyBhcmUgYWNjZXNzaWJsZSBmcm9tIGh0dHA6Ly9naXQtc2NtLmNvbS8KIGluY2x1ZGluZyBmdWxsIGRvY3VtZW50YXRpb24gYW5kIEdpdCByZWxhdGVkIHRvb2xzLgogCiBUaGUgdXNlciBkaXNjdXNzaW9uIGFuZCBkZXZlbG9wbWVudCBvZiBHaXQgdGFrZSBwbGFjZSBvbiB0aGUgR2l0CmRpZmYgLS1naXQgYS9SZWxOb3RlcyBiL1JlbE5vdGVzCmluZGV4IDAzYzk5NmQuLjkxNDhkN2MgMTIwMDAwCi0tLSBhL1JlbE5vdGVzCisrKyBiL1JlbE5vdGVzCkBAIC0xICsxIEBACi1Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi4zLjQudHh0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjcuMC40LnR4dApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Fic3BhdGguYyBiL2Fic3BhdGguYwppbmRleCA2NDlmMzRmLi5iODgxMjJjIDEwMDY0NAotLS0gYS9hYnNwYXRoLmMKKysrIGIvYWJzcGF0aC5jCkBAIC0xOCw3ICsxOCw3IEBACiB7CiAJc3RhdGljIGNoYXIgYnVmc1syXVtQQVRIX01BWCArIDFdLCAqYnVmID0gYnVmc1swXSwgKm5leHRfYnVmID0gYnVmc1sxXTsKIAljaGFyIGN3ZFsxMDI0XSA9ICIiOwotCWludCBidWZfaW5kZXggPSAxLCBsZW47CisJaW50IGJ1Zl9pbmRleCA9IDE7CiAKIAlpbnQgZGVwdGggPSBNQVhERVBUSDsKIAljaGFyICpsYXN0X2VsZW0gPSBOVUxMOwpAQCAtNDEsMTYgKzQxLDE2IEBACiAKIAkJaWYgKCpidWYpIHsKIAkJCWlmICghKmN3ZCAmJiAhZ2V0Y3dkKGN3ZCwgc2l6ZW9mKGN3ZCkpKQotCQkJCWRpZSAoIkNvdWxkIG5vdCBnZXQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIpOworCQkJCWRpZV9lcnJubyAoIkNvdWxkIG5vdCBnZXQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIpOwogCiAJCQlpZiAoY2hkaXIoYnVmKSkKLQkJCQlkaWUgKCJDb3VsZCBub3Qgc3dpdGNoIHRvICclcyciLCBidWYpOworCQkJCWRpZV9lcnJubyAoIkNvdWxkIG5vdCBzd2l0Y2ggdG8gJyVzJyIsIGJ1Zik7CiAJCX0KIAkJaWYgKCFnZXRjd2QoYnVmLCBQQVRIX01BWCkpCi0JCQlkaWUgKCJDb3VsZCBub3QgZ2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiKTsKKwkJCWRpZV9lcnJubyAoIkNvdWxkIG5vdCBnZXQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIpOwogCiAJCWlmIChsYXN0X2VsZW0pIHsKLQkJCWludCBsZW4gPSBzdHJsZW4oYnVmKTsKKwkJCXNpemVfdCBsZW4gPSBzdHJsZW4oYnVmKTsKIAkJCWlmIChsZW4gKyBzdHJsZW4obGFzdF9lbGVtKSArIDIgPiBQQVRIX01BWCkKIAkJCQlkaWUgKCJUb28gbG9uZyBwYXRoIG5hbWU6ICclcy8lcyciLAogCQkJCQkJYnVmLCBsYXN0X2VsZW0pOwpAQCAtNjEsOSArNjEsOSBAQAogCQl9CiAKIAkJaWYgKCFsc3RhdChidWYsICZzdCkgJiYgU19JU0xOSyhzdC5zdF9tb2RlKSkgewotCQkJbGVuID0gcmVhZGxpbmsoYnVmLCBuZXh0X2J1ZiwgUEFUSF9NQVgpOworCQkJc3NpemVfdCBsZW4gPSByZWFkbGluayhidWYsIG5leHRfYnVmLCBQQVRIX01BWCk7CiAJCQlpZiAobGVuIDwgMCkKLQkJCQlkaWUgKCJJbnZhbGlkIHN5bWxpbms6ICVzIiwgYnVmKTsKKwkJCQlkaWVfZXJybm8gKCJJbnZhbGlkIHN5bWxpbmsgJyVzJyIsIGJ1Zik7CiAJCQlpZiAoUEFUSF9NQVggPD0gbGVuKQogCQkJCWRpZSgic3ltYm9saWMgbGluayB0b28gbG9uZzogJXMiLCBidWYpOwogCQkJbmV4dF9idWZbbGVuXSA9ICdcMCc7CkBAIC03NSw3ICs3NSw3IEBACiAJfQogCiAJaWYgKCpjd2QgJiYgY2hkaXIoY3dkKSkKLQkJZGllICgiQ291bGQgbm90IGNoYW5nZSBiYWNrIHRvICclcyciLCBjd2QpOworCQlkaWVfZXJybm8gKCJDb3VsZCBub3QgY2hhbmdlIGJhY2sgdG8gJyVzJyIsIGN3ZCk7CiAKIAlyZXR1cm4gYnVmOwogfQpAQCAtMTA5LDcgKzEwOSw3IEBACiAJfSBlbHNlIHsKIAkJY29uc3QgY2hhciAqY3dkID0gZ2V0X3B3ZF9jd2QoKTsKIAkJaWYgKCFjd2QpCi0JCQlkaWUoIkNhbm5vdCBkZXRlcm1pbmUgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiKTsKKwkJCWRpZV9lcnJubygiQ2Fubm90IGRldGVybWluZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIpOwogCQlpZiAoc25wcmludGYoYnVmLCBQQVRIX01BWCwgIiVzLyVzIiwgY3dkLCBwYXRoKSA+PSBQQVRIX01BWCkKIAkJCWRpZSgiVG9vIGxvbmcgcGF0aDogJS4qcyIsIDYwLCBwYXRoKTsKIAl9CmRpZmYgLS1naXQgYS9hZHZpY2UuYyBiL2FkdmljZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZTRiNWYKLS0tIC9kZXYvbnVsbAorKysgYi9hZHZpY2UuYwpAQCAtMCwwICsxLDQ5IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKworaW50IGFkdmljZV9wdXNoX25vbmZhc3Rmb3J3YXJkID0gMTsKK2ludCBhZHZpY2Vfc3RhdHVzX2hpbnRzID0gMTsKK2ludCBhZHZpY2VfY29tbWl0X2JlZm9yZV9tZXJnZSA9IDE7CitpbnQgYWR2aWNlX3Jlc29sdmVfY29uZmxpY3QgPSAxOworaW50IGFkdmljZV9pbXBsaWNpdF9pZGVudGl0eSA9IDE7CitpbnQgYWR2aWNlX2RldGFjaGVkX2hlYWQgPSAxOworCitzdGF0aWMgc3RydWN0IHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCAqcHJlZmVyZW5jZTsKK30gYWR2aWNlX2NvbmZpZ1tdID0geworCXsgInB1c2hub25mYXN0Zm9yd2FyZCIsICZhZHZpY2VfcHVzaF9ub25mYXN0Zm9yd2FyZCB9LAorCXsgInN0YXR1c2hpbnRzIiwgJmFkdmljZV9zdGF0dXNfaGludHMgfSwKKwl7ICJjb21taXRiZWZvcmVtZXJnZSIsICZhZHZpY2VfY29tbWl0X2JlZm9yZV9tZXJnZSB9LAorCXsgInJlc29sdmVjb25mbGljdCIsICZhZHZpY2VfcmVzb2x2ZV9jb25mbGljdCB9LAorCXsgImltcGxpY2l0aWRlbnRpdHkiLCAmYWR2aWNlX2ltcGxpY2l0X2lkZW50aXR5IH0sCisJeyAiZGV0YWNoZWRoZWFkIiwgJmFkdmljZV9kZXRhY2hlZF9oZWFkIH0sCit9OworCitpbnQgZ2l0X2RlZmF1bHRfYWR2aWNlX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWNvbnN0IGNoYXIgKmsgPSBza2lwX3ByZWZpeCh2YXIsICJhZHZpY2UuIik7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhZHZpY2VfY29uZmlnKTsgaSsrKSB7CisJCWlmIChzdHJjbXAoaywgYWR2aWNlX2NvbmZpZ1tpXS5uYW1lKSkKKwkJCWNvbnRpbnVlOworCQkqYWR2aWNlX2NvbmZpZ1tpXS5wcmVmZXJlbmNlID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBOT1JFVFVSTiBkaWVfcmVzb2x2ZV9jb25mbGljdChjb25zdCBjaGFyICptZSkKK3sKKwlpZiAoYWR2aWNlX3Jlc29sdmVfY29uZmxpY3QpCisJCS8qCisJCSAqIE1lc3NhZ2UgdXNlZCBib3RoIHdoZW4gJ2dpdCBjb21taXQnIGZhaWxzIGFuZCB3aGVuCisJCSAqIG90aGVyIGNvbW1hbmRzIGRvaW5nIGEgbWVyZ2UgZG8uCisJCSAqLworCQlkaWUoIiclcycgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuXG4iCisJCSAgICAiUGxlYXNlLCBmaXggdGhlbSB1cCBpbiB0aGUgd29yayB0cmVlLCBhbmQgdGhlbiB1c2UgJ2dpdCBhZGQvcm0gPGZpbGU+JyBhc1xuIgorCQkgICAgImFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbiBhbmQgbWFrZSBhIGNvbW1pdCwgb3IgdXNlICdnaXQgY29tbWl0IC1hJy4iLCBtZSk7CisJZWxzZQorCQlkaWUoIiclcycgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIiwgbWUpOworfQpkaWZmIC0tZ2l0IGEvYWR2aWNlLmggYi9hZHZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjQ0ZWJiCi0tLSAvZGV2L251bGwKKysrIGIvYWR2aWNlLmgKQEAgLTAsMCArMSwxNyBAQAorI2lmbmRlZiBBRFZJQ0VfSAorI2RlZmluZSBBRFZJQ0VfSAorCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisKK2V4dGVybiBpbnQgYWR2aWNlX3B1c2hfbm9uZmFzdGZvcndhcmQ7CitleHRlcm4gaW50IGFkdmljZV9zdGF0dXNfaGludHM7CitleHRlcm4gaW50IGFkdmljZV9jb21taXRfYmVmb3JlX21lcmdlOworZXh0ZXJuIGludCBhZHZpY2VfcmVzb2x2ZV9jb25mbGljdDsKK2V4dGVybiBpbnQgYWR2aWNlX2ltcGxpY2l0X2lkZW50aXR5OworZXh0ZXJuIGludCBhZHZpY2VfZGV0YWNoZWRfaGVhZDsKKworaW50IGdpdF9kZWZhdWx0X2FkdmljZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSk7CisKK2V4dGVybiB2b2lkIE5PUkVUVVJOIGRpZV9yZXNvbHZlX2NvbmZsaWN0KGNvbnN0IGNoYXIgKm1lKTsKKworI2VuZGlmIC8qIEFEVklDRV9IICovCmRpZmYgLS1naXQgYS9hcmNoaXZlLmMgYi9hcmNoaXZlLmMKaW5kZXggYjJiOTBkMy4uZDcwMGFmMyAxMDA2NDQKLS0tIGEvYXJjaGl2ZS5jCisrKyBiL2FyY2hpdmUuYwpAQCAtMzEsNiArMzEsOCBAQAogewogCWNoYXIgKnRvX2ZyZWUgPSBOVUxMOwogCXN0cnVjdCBzdHJidWYgZm10ID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IGN0eCA9IHswfTsKKwljdHguZGF0ZV9tb2RlID0gREFURV9OT1JNQUw7CiAKIAlpZiAoc3JjID09IGJ1Zi0+YnVmKQogCQl0b19mcmVlID0gc3RyYnVmX2RldGFjaChidWYsIE5VTEwpOwpAQCAtNDgsNyArNTAsNyBAQAogCQlzdHJidWZfYWRkKCZmbXQsIGIgKyA4LCBjIC0gYiAtIDgpOwogCiAJCXN0cmJ1Zl9hZGQoYnVmLCBzcmMsIGIgLSBzcmMpOwotCQlmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29tbWl0LCBmbXQuYnVmLCBidWYsIERBVEVfTk9STUFMKTsKKwkJZm9ybWF0X2NvbW1pdF9tZXNzYWdlKGNvbW1pdCwgZm10LmJ1ZiwgYnVmLCAmY3R4KTsKIAkJbGVuIC09IGMgKyAxIC0gc3JjOwogCQlzcmMgID0gYyArIDE7CiAJfQpAQCAtODUsOCArODcsOCBAQAogCXN0YXRpYyBzdHJ1Y3QgZ2l0X2F0dHIgKmF0dHJfZXhwb3J0X3N1YnN0OwogCiAJaWYgKCFhdHRyX2V4cG9ydF9pZ25vcmUpIHsKLQkJYXR0cl9leHBvcnRfaWdub3JlID0gZ2l0X2F0dHIoImV4cG9ydC1pZ25vcmUiLCAxMyk7Ci0JCWF0dHJfZXhwb3J0X3N1YnN0ID0gZ2l0X2F0dHIoImV4cG9ydC1zdWJzdCIsIDEyKTsKKwkJYXR0cl9leHBvcnRfaWdub3JlID0gZ2l0X2F0dHIoImV4cG9ydC1pZ25vcmUiKTsKKwkJYXR0cl9leHBvcnRfc3Vic3QgPSBnaXRfYXR0cigiZXhwb3J0LXN1YnN0Iik7CiAJfQogCWNoZWNrWzBdLmF0dHIgPSBhdHRyX2V4cG9ydF9pZ25vcmU7CiAJY2hlY2tbMV0uYXR0ciA9IGF0dHJfZXhwb3J0X3N1YnN0OwpAQCAtMTE1LDYgKzExNyw3IEBACiAKIAlzdHJidWZfcmVzZXQoJnBhdGgpOwogCXN0cmJ1Zl9ncm93KCZwYXRoLCBQQVRIX01BWCk7CisJc3RyYnVmX2FkZCgmcGF0aCwgYXJncy0+YmFzZSwgYXJncy0+YmFzZWxlbik7CiAJc3RyYnVmX2FkZCgmcGF0aCwgYmFzZSwgYmFzZWxlbik7CiAJc3RyYnVmX2FkZHN0cigmcGF0aCwgZmlsZW5hbWUpOwogCXBhdGhfd2l0aG91dF9wcmVmaXggPSBwYXRoLmJ1ZiArIGFyZ3MtPmJhc2VsZW47CkBAIC0xODcsOCArMTkwLDggQEAKIAkJZ2l0X2F0dHJfc2V0X2RpcmVjdGlvbihHSVRfQVRUUl9JTkRFWCwgJnRoZV9pbmRleCk7CiAJfQogCi0JZXJyID0gIHJlYWRfdHJlZV9yZWN1cnNpdmUoYXJncy0+dHJlZSwgYXJncy0+YmFzZSwgYXJncy0+YmFzZWxlbiwgMCwKLQkJCWFyZ3MtPnBhdGhzcGVjLCB3cml0ZV9hcmNoaXZlX2VudHJ5LCAmY29udGV4dCk7CisJZXJyID0gcmVhZF90cmVlX3JlY3Vyc2l2ZShhcmdzLT50cmVlLCAiIiwgMCwgMCwgYXJncy0+cGF0aHNwZWMsCisJCQkJICB3cml0ZV9hcmNoaXZlX2VudHJ5LCAmY29udGV4dCk7CiAJaWYgKGVyciA9PSBSRUFEX1RSRUVfUkVDVVJTSVZFKQogCQllcnIgPSAwOwogCXJldHVybiBlcnI7CkBAIC0yMDgsMTAgKzIxMSwzMyBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgaW50IHJlamVjdF9lbnRyeShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpiYXNlLAorCQkJaW50IGJhc2VsZW4sIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1bnNpZ25lZCBtb2RlLAorCQkJaW50IHN0YWdlLCB2b2lkICpjb250ZXh0KQoreworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBwYXRoX2V4aXN0cyhzdHJ1Y3QgdHJlZSAqdHJlZSwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwljb25zdCBjaGFyICpwYXRoc3BlY1tdID0geyBwYXRoLCBOVUxMIH07CisKKwlpZiAocmVhZF90cmVlX3JlY3Vyc2l2ZSh0cmVlLCAiIiwgMCwgMCwgcGF0aHNwZWMsIHJlamVjdF9lbnRyeSwgTlVMTCkpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBwYXJzZV9wYXRoc3BlY19hcmcoY29uc3QgY2hhciAqKnBhdGhzcGVjLAogCQlzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqYXJfYXJncykKIHsKLQlhcl9hcmdzLT5wYXRoc3BlYyA9IGdldF9wYXRoc3BlYyhhcl9hcmdzLT5iYXNlLCBwYXRoc3BlYyk7CisJYXJfYXJncy0+cGF0aHNwZWMgPSBwYXRoc3BlYyA9IGdldF9wYXRoc3BlYygiIiwgcGF0aHNwZWMpOworCWlmIChwYXRoc3BlYykgeworCQl3aGlsZSAoKnBhdGhzcGVjKSB7CisJCQlpZiAoIXBhdGhfZXhpc3RzKGFyX2FyZ3MtPnRyZWUsICpwYXRoc3BlYykpCisJCQkJZGllKCJwYXRoIG5vdCBmb3VuZDogJXMiLCAqcGF0aHNwZWMpOworCQkJcGF0aHNwZWMrKzsKKwkJfQorCX0KIH0KIAogc3RhdGljIHZvaWQgcGFyc2VfdHJlZWlzaF9hcmcoY29uc3QgY2hhciAqKmFyZ3YsCkBAIC0yODMsNyArMzA5LDcgQEAKIAkJT1BUX1NUUklORygwLCAiZm9ybWF0IiwgJmZvcm1hdCwgImZtdCIsICJhcmNoaXZlIGZvcm1hdCIpLAogCQlPUFRfU1RSSU5HKDAsICJwcmVmaXgiLCAmYmFzZSwgInByZWZpeCIsCiAJCQkicHJlcGVuZCBwcmVmaXggdG8gZWFjaCBwYXRobmFtZSBpbiB0aGUgYXJjaGl2ZSIpLAotCQlPUFRfU1RSSU5HKDAsICJvdXRwdXQiLCAmb3V0cHV0LCAiZmlsZSIsCisJCU9QVF9TVFJJTkcoJ28nLCAib3V0cHV0IiwgJm91dHB1dCwgImZpbGUiLAogCQkJIndyaXRlIHRoZSBhcmNoaXZlIHRvIHRoaXMgZmlsZSIpLAogCQlPUFRfQk9PTEVBTigwLCAid29ya3RyZWUtYXR0cmlidXRlcyIsICZ3b3JrdHJlZV9hdHRyaWJ1dGVzLAogCQkJInJlYWQgLmdpdGF0dHJpYnV0ZXMgaW4gd29ya2luZyBkaXJlY3RvcnkiKSwKQEAgLTMwOSw3ICszMzUsNyBAQAogCQlPUFRfRU5EKCkKIAl9OwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0cywgYXJjaGl2ZV91c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0cywgYXJjaGl2ZV91c2FnZSwgMCk7CiAKIAlpZiAocmVtb3RlKQogCQlkaWUoIlVuZXhwZWN0ZWQgb3B0aW9uIC0tcmVtb3RlIik7CmRpZmYgLS1naXQgYS9hcm0vc2hhMS5jIGIvYXJtL3NoYTEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzYxYWQ0YS4uMDAwMDAwMAotLS0gYS9hcm0vc2hhMS5jCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIFNIQS0xIGltcGxlbWVudGF0aW9uIG9wdGltaXplZCBmb3IgQVJNCi0gKgotICogQ29weXJpZ2h0OiAgIChDKSAyMDA1IGJ5IE5pY29sYXMgUGl0cmUgPG5pY29AY2FtLm9yZz4KLSAqIENyZWF0ZWQ6ICAgICBTZXB0ZW1iZXIgMTcsIDIwMDUKLSAqLwotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSAic2hhMS5oIgotCi1leHRlcm4gdm9pZCBhcm1fc2hhX3RyYW5zZm9ybSh1aW50MzJfdCAqaGFzaCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgdWludDMyX3QgKlcpOwotCi12b2lkIGFybV9TSEExX0luaXQoYXJtX1NIQV9DVFggKmMpCi17Ci0JYy0+bGVuID0gMDsKLQljLT5oYXNoWzBdID0gMHg2NzQ1MjMwMTsKLQljLT5oYXNoWzFdID0gMHhlZmNkYWI4OTsKLQljLT5oYXNoWzJdID0gMHg5OGJhZGNmZTsKLQljLT5oYXNoWzNdID0gMHgxMDMyNTQ3NjsKLQljLT5oYXNoWzRdID0gMHhjM2QyZTFmMDsKLX0KLQotdm9pZCBhcm1fU0hBMV9VcGRhdGUoYXJtX1NIQV9DVFggKmMsIGNvbnN0IHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgbikKLXsKLQl1aW50MzJfdCB3b3Jrc3BhY2VbODBdOwotCXVuc2lnbmVkIGludCBwYXJ0aWFsOwotCXVuc2lnbmVkIGxvbmcgZG9uZTsKLQotCXBhcnRpYWwgPSBjLT5sZW4gJiAweDNmOwotCWMtPmxlbiArPSBuOwotCWlmICgocGFydGlhbCArIG4pID49IDY0KSB7Ci0JCWlmIChwYXJ0aWFsKSB7Ci0JCQlkb25lID0gNjQgLSBwYXJ0aWFsOwotCQkJbWVtY3B5KGMtPmJ1ZmZlciArIHBhcnRpYWwsIHAsIGRvbmUpOwotCQkJYXJtX3NoYV90cmFuc2Zvcm0oYy0+aGFzaCwgYy0+YnVmZmVyLCB3b3Jrc3BhY2UpOwotCQkJcGFydGlhbCA9IDA7Ci0JCX0gZWxzZQotCQkJZG9uZSA9IDA7Ci0JCXdoaWxlIChuID49IGRvbmUgKyA2NCkgewotCQkJYXJtX3NoYV90cmFuc2Zvcm0oYy0+aGFzaCwgcCArIGRvbmUsIHdvcmtzcGFjZSk7Ci0JCQlkb25lICs9IDY0OwotCQl9Ci0JfSBlbHNlCi0JCWRvbmUgPSAwOwotCWlmIChuIC0gZG9uZSkKLQkJbWVtY3B5KGMtPmJ1ZmZlciArIHBhcnRpYWwsIHAgKyBkb25lLCBuIC0gZG9uZSk7Ci19Ci0KLXZvaWQgYXJtX1NIQTFfRmluYWwodW5zaWduZWQgY2hhciAqaGFzaCwgYXJtX1NIQV9DVFggKmMpCi17Ci0JdWludDY0X3QgYml0bGVuOwotCXVpbnQzMl90IGJpdGxlbl9oaSwgYml0bGVuX2xvOwotCXVuc2lnbmVkIGludCBpLCBvZmZzZXQsIHBhZGxlbjsKLQl1bnNpZ25lZCBjaGFyIGJpdHNbOF07Ci0Jc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGFkZGluZ1s2NF0gPSB7IDB4ODAsIH07Ci0KLQliaXRsZW4gPSBjLT5sZW4gPDwgMzsKLQlvZmZzZXQgPSBjLT5sZW4gJiAweDNmOwotCXBhZGxlbiA9ICgob2Zmc2V0IDwgNTYpID8gNTYgOiAoNjQgKyA1NikpIC0gb2Zmc2V0OwotCWFybV9TSEExX1VwZGF0ZShjLCBwYWRkaW5nLCBwYWRsZW4pOwotCi0JYml0bGVuX2hpID0gYml0bGVuID4+IDMyOwotCWJpdGxlbl9sbyA9IGJpdGxlbiAmIDB4ZmZmZmZmZmY7Ci0JYml0c1swXSA9IGJpdGxlbl9oaSA+PiAyNDsKLQliaXRzWzFdID0gYml0bGVuX2hpID4+IDE2OwotCWJpdHNbMl0gPSBiaXRsZW5faGkgPj4gODsKLQliaXRzWzNdID0gYml0bGVuX2hpOwotCWJpdHNbNF0gPSBiaXRsZW5fbG8gPj4gMjQ7Ci0JYml0c1s1XSA9IGJpdGxlbl9sbyA+PiAxNjsKLQliaXRzWzZdID0gYml0bGVuX2xvID4+IDg7Ci0JYml0c1s3XSA9IGJpdGxlbl9sbzsKLQlhcm1fU0hBMV9VcGRhdGUoYywgYml0cywgOCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7Ci0JCXVpbnQzMl90IHYgPSBjLT5oYXNoW2ldOwotCQloYXNoWzBdID0gdiA+PiAyNDsKLQkJaGFzaFsxXSA9IHYgPj4gMTY7Ci0JCWhhc2hbMl0gPSB2ID4+IDg7Ci0JCWhhc2hbM10gPSB2OwotCQloYXNoICs9IDQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYXJtL3NoYTEuaCBiL2FybS9zaGExLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2MWI2MTguLjAwMDAwMDAKLS0tIGEvYXJtL3NoYTEuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qCi0gKiBTSEEtMSBpbXBsZW1lbnRhdGlvbiBvcHRpbWl6ZWQgZm9yIEFSTQotICoKLSAqIENvcHlyaWdodDoJKEMpIDIwMDUgYnkgTmljb2xhcyBQaXRyZSA8bmljb0BjYW0ub3JnPgotICogQ3JlYXRlZDoJU2VwdGVtYmVyIDE3LCAyMDA1Ci0gKi8KLQotI2luY2x1ZGUgPHN0ZGludC5oPgotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdWludDY0X3QgbGVuOwotCXVpbnQzMl90IGhhc2hbNV07Ci0JdW5zaWduZWQgY2hhciBidWZmZXJbNjRdOwotfSBhcm1fU0hBX0NUWDsKLQotdm9pZCBhcm1fU0hBMV9Jbml0KGFybV9TSEFfQ1RYICpjKTsKLXZvaWQgYXJtX1NIQTFfVXBkYXRlKGFybV9TSEFfQ1RYICpjLCBjb25zdCB2b2lkICpwLCB1bnNpZ25lZCBsb25nIG4pOwotdm9pZCBhcm1fU0hBMV9GaW5hbCh1bnNpZ25lZCBjaGFyICpoYXNoLCBhcm1fU0hBX0NUWCAqYyk7Ci0KLSNkZWZpbmUgZ2l0X1NIQV9DVFgJYXJtX1NIQV9DVFgKLSNkZWZpbmUgZ2l0X1NIQTFfSW5pdAlhcm1fU0hBMV9Jbml0Ci0jZGVmaW5lIGdpdF9TSEExX1VwZGF0ZQlhcm1fU0hBMV9VcGRhdGUKLSNkZWZpbmUgZ2l0X1NIQTFfRmluYWwJYXJtX1NIQTFfRmluYWwKZGlmZiAtLWdpdCBhL2FybS9zaGExX2FybS5TIGIvYXJtL3NoYTFfYXJtLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxZTkyNjMuLjAwMDAwMDAKLS0tIGEvYXJtL3NoYTFfYXJtLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxODMgKzAsMCBAQAotLyoKLSAqICBTSEEgdHJhbnNmb3JtIG9wdGltaXplZCBmb3IgQVJNCi0gKgotICogIENvcHlyaWdodDoJKEMpIDIwMDUgYnkgTmljb2xhcyBQaXRyZSA8bmljb0BjYW0ub3JnPgotICogIENyZWF0ZWQ6CVNlcHRlbWJlciAxNywgMjAwNQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotCS50ZXh0Ci0JLmdsb2JsCWFybV9zaGFfdHJhbnNmb3JtCi0KLS8qCi0gKiB2b2lkIHNoYV90cmFuc2Zvcm0odWludDMyX3QgKmhhc2gsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVpbnQzMl90ICpXKTsKLSAqCi0gKiBub3RlOiB0aGUgImRhdGEiIHBvaW50ZXIgbWF5IGJlIHVuYWxpZ25lZC4KLSAqLwotCi1hcm1fc2hhX3RyYW5zZm9ybToKLQotCXN0bWZkCXNwISwge3I0IC0gcjgsIGxyfQotCi0JQCBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKLQlAICAgICAgICAgV1tpXSA9IG50b2hsKCgodWludDMyX3QgKilkYXRhKVtpXSk7Ci0KLSNpZmRlZiBfX0FSTUVCX18KLQltb3YJcjQsIHIwCi0JbW92CXIwLCByMgotCW1vdglyMiwgIzY0Ci0JYmwJbWVtY3B5Ci0JbW92CXIyLCByMAotCW1vdglyMCwgcjQKLSNlbHNlCi0JbW92CXIzLCByMgotCW1vdglsciwgIzE2Ci0xOglsZHJiCXI0LCBbcjFdLCAjMQotCWxkcmIJcjUsIFtyMV0sICMxCi0JbGRyYglyNiwgW3IxXSwgIzEKLQlsZHJiCXI3LCBbcjFdLCAjMQotCXN1YnMJbHIsIGxyLCAjMQotCW9ycglyNSwgcjUsIHI0LCBsc2wgIzgKLQlvcnIJcjYsIHI2LCByNSwgbHNsICM4Ci0Jb3JyCXI3LCByNywgcjYsIGxzbCAjOAotCXN0cglyNywgW3IzXSwgIzQKLQlibmUJMWIKLSNlbmRpZgotCi0JQCBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykKLQlAICAgICAgICAgV1tpKzE2XSA9IHJvcihXW2krMTNdIF4gV1tpKzhdIF4gV1tpKzJdIF4gV1tpXSwgMzEpOwotCi0Jc3ViCXIzLCByMiwgIzQKLQltb3YJbHIsICM2NAotMjoJbGRyCXI0LCBbcjMsICM0XSEKLQlzdWJzCWxyLCBsciwgIzEKLQlsZHIJcjUsIFtyMywgIzhdCi0JbGRyCXI2LCBbcjMsICMzMl0KLQlsZHIJcjcsIFtyMywgIzUyXQotCWVvcglyNCwgcjQsIHI1Ci0JZW9yCXI0LCByNCwgcjYKLQllb3IJcjQsIHI0LCByNwotCW1vdglyNCwgcjQsIHJvciAjMzEKLQlzdHIJcjQsIFtyMywgIzY0XQotCWJuZQkyYgotCi0JLyoKLQkgKiBUaGUgU0hBIGZ1bmN0aW9ucyBhcmU6Ci0JICoKLQkgKiBmMShCLEMsRCkgPSAoRCBeIChCICYgKEMgXiBEKSkpCi0JICogZjIoQixDLEQpID0gKEIgXiBDIF4gRCkKLQkgKiBmMyhCLEMsRCkgPSAoKEIgJiBDKSB8IChEICYgKEIgfCBDKSkpCi0JICoKLQkgKiBUaGVuIHRoZSBzdWItYmxvY2tzIGFyZSBwcm9jZXNzZWQgYXMgZm9sbG93czoKLQkgKgotCSAqIEEnID0gcm9yKEEsIDI3KSArIGYoQixDLEQpICsgRSArIEsgKyAqVysrCi0JICogQicgPSBBCi0JICogQycgPSByb3IoQiwgMikKLQkgKiBEJyA9IEMKLQkgKiBFJyA9IEQKLQkgKgotCSAqIFdlIHRoZXJlZm9yZSB1bnJvbGwgZWFjaCBsb29wIDUgdGltZXMgdG8gYXZvaWQgcmVnaXN0ZXIgc2h1ZmZsaW5nLgotCSAqIEFsc28gdGhlIHJvciBmb3IgQyAoYW5kIGFsc28gRCBhbmQgRSB3aGljaCBhcmUgc3VjY2Vzc2l2ZWx5ZGVyaXZlZAotCSAqIGZyb20gaXQpIGlzIGFwcGxpZWQgaW4gcGxhY2UgdG8gY3V0IG9uIGFuIGFkZGl0aW9uYWwgbW92IGluc24gZm9yCi0JICogZWFjaCByb3VuZC4KLQkgKi8KLQotCS5tYWNybwlzaGFfZjEsIEEsIEIsIEMsIEQsIEUKLQlsZHIJcjMsIFtyMl0sICM0Ci0JZW9yCWlwLCBcQywgXEQKLQlhZGQJXEUsIHIxLCBcRSwgcm9yICMyCi0JYW5kCWlwLCBcQiwgaXAsIHJvciAjMgotCWFkZAlcRSwgXEUsIFxBLCByb3IgIzI3Ci0JZW9yCWlwLCBpcCwgXEQsIHJvciAjMgotCWFkZAlcRSwgXEUsIHIzCi0JYWRkCVxFLCBcRSwgaXAKLQkuZW5kbQotCi0JLm1hY3JvCXNoYV9mMiwgQSwgQiwgQywgRCwgRQotCWxkcglyMywgW3IyXSwgIzQKLQlhZGQJXEUsIHIxLCBcRSwgcm9yICMyCi0JZW9yCWlwLCBcQiwgXEMsIHJvciAjMgotCWFkZAlcRSwgXEUsIFxBLCByb3IgIzI3Ci0JZW9yCWlwLCBpcCwgXEQsIHJvciAjMgotCWFkZAlcRSwgXEUsIHIzCi0JYWRkCVxFLCBcRSwgaXAKLQkuZW5kbQotCi0JLm1hY3JvCXNoYV9mMywgQSwgQiwgQywgRCwgRQotCWxkcglyMywgW3IyXSwgIzQKLQlhZGQJXEUsIHIxLCBcRSwgcm9yICMyCi0Jb3JyCWlwLCBcQiwgXEMsIHJvciAjMgotCWFkZAlcRSwgXEUsIFxBLCByb3IgIzI3Ci0JYW5kCWlwLCBpcCwgXEQsIHJvciAjMgotCWFkZAlcRSwgXEUsIHIzCi0JYW5kCXIzLCBcQiwgXEMsIHJvciAjMgotCW9ycglpcCwgaXAsIHIzCi0JYWRkCVxFLCBcRSwgaXAKLQkuZW5kbQotCi0JbGRtaWEJcjAsIHtyNCAtIHI4fQotCi0JbW92CWxyLCAjNAotCWxkcglyMSwgLkxfc2hhX0sgKyAwCi0KLQkvKiBhZGp1c3QgaW5pdGlhbCB2YWx1ZXMgKi8KLQltb3YJcjYsIHI2LCByb3IgIzMwCi0JbW92CXI3LCByNywgcm9yICMzMAotCW1vdglyOCwgcjgsIHJvciAjMzAKLQotMzoJc3VicwlsciwgbHIsICMxCi0Jc2hhX2YxCXI0LCByNSwgcjYsIHI3LCByOAotCXNoYV9mMQlyOCwgcjQsIHI1LCByNiwgcjcKLQlzaGFfZjEJcjcsIHI4LCByNCwgcjUsIHI2Ci0Jc2hhX2YxCXI2LCByNywgcjgsIHI0LCByNQotCXNoYV9mMQlyNSwgcjYsIHI3LCByOCwgcjQKLQlibmUJM2IKLQotCWxkcglyMSwgLkxfc2hhX0sgKyA0Ci0JbW92CWxyLCAjNAotCi00OglzdWJzCWxyLCBsciwgIzEKLQlzaGFfZjIJcjQsIHI1LCByNiwgcjcsIHI4Ci0Jc2hhX2YyCXI4LCByNCwgcjUsIHI2LCByNwotCXNoYV9mMglyNywgcjgsIHI0LCByNSwgcjYKLQlzaGFfZjIJcjYsIHI3LCByOCwgcjQsIHI1Ci0Jc2hhX2YyCXI1LCByNiwgcjcsIHI4LCByNAotCWJuZQk0YgotCi0JbGRyCXIxLCAuTF9zaGFfSyArIDgKLQltb3YJbHIsICM0Ci0KLTU6CXN1YnMJbHIsIGxyLCAjMQotCXNoYV9mMwlyNCwgcjUsIHI2LCByNywgcjgKLQlzaGFfZjMJcjgsIHI0LCByNSwgcjYsIHI3Ci0Jc2hhX2YzCXI3LCByOCwgcjQsIHI1LCByNgotCXNoYV9mMwlyNiwgcjcsIHI4LCByNCwgcjUKLQlzaGFfZjMJcjUsIHI2LCByNywgcjgsIHI0Ci0JYm5lCTViCi0KLQlsZHIJcjEsIC5MX3NoYV9LICsgMTIKLQltb3YJbHIsICM0Ci0KLTY6CXN1YnMJbHIsIGxyLCAjMQotCXNoYV9mMglyNCwgcjUsIHI2LCByNywgcjgKLQlzaGFfZjIJcjgsIHI0LCByNSwgcjYsIHI3Ci0Jc2hhX2YyCXI3LCByOCwgcjQsIHI1LCByNgotCXNoYV9mMglyNiwgcjcsIHI4LCByNCwgcjUKLQlzaGFfZjIJcjUsIHI2LCByNywgcjgsIHI0Ci0JYm5lCTZiCi0KLQlsZG1pYQlyMCwge3IxLCByMiwgcjMsIGlwLCBscn0KLQlhZGQJcjQsIHIxLCByNAotCWFkZAlyNSwgcjIsIHI1Ci0JYWRkCXI2LCByMywgcjYsIHJvciAjMgotCWFkZAlyNywgaXAsIHI3LCByb3IgIzIKLQlhZGQJcjgsIGxyLCByOCwgcm9yICMyCi0Jc3RtaWEJcjAsIHtyNCAtIHI4fQotCi0JbGRtZmQJc3AhLCB7cjQgLSByOCwgcGN9Ci0KLS5MX3NoYV9LOgotCS53b3JkCTB4NWE4Mjc5OTksIDB4NmVkOWViYTEsIDB4OGYxYmJjZGMsIDB4Y2E2MmMxZDYKZGlmZiAtLWdpdCBhL2F0dHIuYyBiL2F0dHIuYwppbmRleCA1NWJkYjdjLi5mNTM0NmVkIDEwMDY0NAotLS0gYS9hdHRyLmMKKysrIGIvYXR0ci5jCkBAIC02NSw3ICs2NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBnaXRfYXR0ciAqZ2l0X2F0dHIoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKK3N0YXRpYyBzdHJ1Y3QgZ2l0X2F0dHIgKmdpdF9hdHRyX2ludGVybmFsKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCiB7CiAJdW5zaWduZWQgaHZhbCA9IGhhc2hfbmFtZShuYW1lLCBsZW4pOwogCXVuc2lnbmVkIHBvcyA9IGh2YWwgJSBIQVNIU0laRTsKQEAgLTk1LDYgKzk1LDExIEBACiAJcmV0dXJuIGE7CiB9CiAKK3N0cnVjdCBnaXRfYXR0ciAqZ2l0X2F0dHIoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlyZXR1cm4gZ2l0X2F0dHJfaW50ZXJuYWwobmFtZSwgc3RybGVuKG5hbWUpKTsKK30KKwogLyoKICAqIC5naXRhdHRyaWJ1dGVzIGZpbGUgaXMgb25lIGxpbmUgcGVyIHJlY29yZCwgZWFjaCBvZiB3aGljaCBpcwogICoKQEAgLTE2Miw3ICsxNjcsNyBAQAogCQllbHNlIHsKIAkJCWUtPnNldHRvID0geG1lbWR1cHooZXF1YWxzICsgMSwgZXAgLSBlcXVhbHMgLSAxKTsKIAkJfQotCQllLT5hdHRyID0gZ2l0X2F0dHIoY3AsIGxlbik7CisJCWUtPmF0dHIgPSBnaXRfYXR0cl9pbnRlcm5hbChjcCwgbGVuKTsKIAl9CiAJKCpudW1fYXR0cikrKzsKIAlyZXR1cm4gZXAgKyBzdHJzcG4oZXAsIGJsYW5rKTsKQEAgLTIyMSw3ICsyMjYsNyBAQAogCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBhdHRyX3N0YXRlKSAqIG51bV9hdHRyICsKIAkJCSAgICAgIChpc19tYWNybyA/IDAgOiBuYW1lbGVuICsgMSkpOwogCQlpZiAoaXNfbWFjcm8pCi0JCQlyZXMtPnUuYXR0ciA9IGdpdF9hdHRyKG5hbWUsIG5hbWVsZW4pOworCQkJcmVzLT51LmF0dHIgPSBnaXRfYXR0cl9pbnRlcm5hbChuYW1lLCBuYW1lbGVuKTsKIAkJZWxzZSB7CiAJCQlyZXMtPnUucGF0dGVybiA9IChjaGFyICopJihyZXMtPnN0YXRlW251bV9hdHRyXSk7CiAJCQltZW1jcHkocmVzLT51LnBhdHRlcm4sIG5hbWUsIG5hbWVsZW4pOwpkaWZmIC0tZ2l0IGEvYXR0ci5oIGIvYXR0ci5oCmluZGV4IDY5YjU3NjcuLjQ1MGY0OWQgMTAwNjQ0Ci0tLSBhL2F0dHIuaAorKysgYi9hdHRyLmgKQEAgLTgsNyArOCw3IEBACiAgKiBHaXZlbiBhIHN0cmluZywgcmV0dXJuIHRoZSBnaXRhdHRyaWJ1dGUgb2JqZWN0IHRoYXQKICAqIGNvcnJlc3BvbmRzIHRvIGl0LgogICovCi1zdHJ1Y3QgZ2l0X2F0dHIgKmdpdF9hdHRyKGNvbnN0IGNoYXIgKiwgaW50KTsKK3N0cnVjdCBnaXRfYXR0ciAqZ2l0X2F0dHIoY29uc3QgY2hhciAqKTsKIAogLyogSW50ZXJuYWwgdXNlICovCiBleHRlcm4gY29uc3QgY2hhciBnaXRfYXR0cl9fdHJ1ZVtdOwpkaWZmIC0tZ2l0IGEvYmlzZWN0LmMgYi9iaXNlY3QuYwppbmRleCA1OGY3ZTZmLi5iNTU2YjExIDEwMDY0NAotLS0gYS9iaXNlY3QuYworKysgYi9iaXNlY3QuYwpAQCAtNiwxNSArNiwzMCBAQAogI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy5oIgogI2luY2x1ZGUgInF1b3RlLmgiCiAjaW5jbHVkZSAic2hhMS1sb29rdXAuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImxvZy10cmVlLmgiCiAjaW5jbHVkZSAiYmlzZWN0LmgiCiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyICgqc2tpcHBlZF9zaGExKVsyMF07Ci1zdGF0aWMgaW50IHNraXBwZWRfc2hhMV9ucjsKLXN0YXRpYyBpbnQgc2tpcHBlZF9zaGExX2FsbG9jOworc3RydWN0IHNoYTFfYXJyYXkgeworCXVuc2lnbmVkIGNoYXIgKCpzaGExKVsyMF07CisJaW50IHNoYTFfbnI7CisJaW50IHNoYTFfYWxsb2M7CisJaW50IHNvcnRlZDsKK307CiAKLXN0YXRpYyBjb25zdCBjaGFyICoqcmV2X2FyZ3Y7Ci1zdGF0aWMgaW50IHJldl9hcmd2X25yOwotc3RhdGljIGludCByZXZfYXJndl9hbGxvYzsKK3N0YXRpYyBzdHJ1Y3Qgc2hhMV9hcnJheSBnb29kX3JldnM7CitzdGF0aWMgc3RydWN0IHNoYTFfYXJyYXkgc2tpcHBlZF9yZXZzOworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqY3VycmVudF9iYWRfc2hhMTsKKworc3RydWN0IGFyZ3ZfYXJyYXkgeworCWNvbnN0IGNoYXIgKiphcmd2OworCWludCBhcmd2X25yOworCWludCBhcmd2X2FsbG9jOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmFyZ3ZfY2hlY2tvdXRbXSA9IHsiY2hlY2tvdXQiLCAiLXEiLCBOVUxMLCAiLS0iLCBOVUxMfTsKK3N0YXRpYyBjb25zdCBjaGFyICphcmd2X3Nob3dfYnJhbmNoW10gPSB7InNob3ctYnJhbmNoIiwgTlVMTCwgTlVMTH07CiAKIC8qIGJpdHMgIzAtMTUgaW4gcmV2aXNpb24uaCAqLwogCkBAIC0zOTgsMjMgKzQxMywzNyBAQAogCXJldHVybiBiZXN0OwogfQogCitzdGF0aWMgdm9pZCBhcmd2X2FycmF5X3B1c2goc3RydWN0IGFyZ3ZfYXJyYXkgKmFycmF5LCBjb25zdCBjaGFyICpzdHJpbmcpCit7CisJQUxMT0NfR1JPVyhhcnJheS0+YXJndiwgYXJyYXktPmFyZ3ZfbnIgKyAxLCBhcnJheS0+YXJndl9hbGxvYyk7CisJYXJyYXktPmFyZ3ZbYXJyYXktPmFyZ3ZfbnIrK10gPSBzdHJpbmc7Cit9CisKK3N0YXRpYyB2b2lkIGFyZ3ZfYXJyYXlfcHVzaF9zaGExKHN0cnVjdCBhcmd2X2FycmF5ICphcnJheSwKKwkJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCQkgY29uc3QgY2hhciAqZm9ybWF0KQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RyYnVmX2FkZGYoJmJ1ZiwgZm9ybWF0LCBzaGExX3RvX2hleChzaGExKSk7CisJYXJndl9hcnJheV9wdXNoKGFycmF5LCBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpKTsKK30KKworc3RhdGljIHZvaWQgc2hhMV9hcnJheV9wdXNoKHN0cnVjdCBzaGExX2FycmF5ICphcnJheSwKKwkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCUFMTE9DX0dST1coYXJyYXktPnNoYTEsIGFycmF5LT5zaGExX25yICsgMSwgYXJyYXktPnNoYTFfYWxsb2MpOworCWhhc2hjcHkoYXJyYXktPnNoYTFbYXJyYXktPnNoYTFfbnIrK10sIHNoYTEpOworfQorCiBzdGF0aWMgaW50IHJlZ2lzdGVyX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAogCQkJaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQogewogCWlmICghc3RyY21wKHJlZm5hbWUsICJiYWQiKSkgewotCQlBTExPQ19HUk9XKHJldl9hcmd2LCByZXZfYXJndl9uciArIDEsIHJldl9hcmd2X2FsbG9jKTsKLQkJcmV2X2FyZ3ZbcmV2X2FyZ3ZfbnIrK10gPSB4c3RyZHVwKHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJY3VycmVudF9iYWRfc2hhMSA9IHNoYTE7CiAJfSBlbHNlIGlmICghcHJlZml4Y21wKHJlZm5hbWUsICJnb29kLSIpKSB7Ci0JCWNvbnN0IGNoYXIgKmhleCA9IHNoYTFfdG9faGV4KHNoYTEpOwotCQljaGFyICpnb29kID0geG1hbGxvYyhzdHJsZW4oaGV4KSArIDIpOwotCQkqZ29vZCA9ICdeJzsKLQkJbWVtY3B5KGdvb2QgKyAxLCBoZXgsIHN0cmxlbihoZXgpICsgMSk7Ci0JCUFMTE9DX0dST1cocmV2X2FyZ3YsIHJldl9hcmd2X25yICsgMSwgcmV2X2FyZ3ZfYWxsb2MpOwotCQlyZXZfYXJndltyZXZfYXJndl9ucisrXSA9IGdvb2Q7CisJCXNoYTFfYXJyYXlfcHVzaCgmZ29vZF9yZXZzLCBzaGExKTsKIAl9IGVsc2UgaWYgKCFwcmVmaXhjbXAocmVmbmFtZSwgInNraXAtIikpIHsKLQkJQUxMT0NfR1JPVyhza2lwcGVkX3NoYTEsIHNraXBwZWRfc2hhMV9uciArIDEsCi0JCQkgICBza2lwcGVkX3NoYTFfYWxsb2MpOwotCQloYXNoY3B5KHNraXBwZWRfc2hhMVtza2lwcGVkX3NoYTFfbnIrK10sIHNoYTEpOworCQlzaGExX2FycmF5X3B1c2goJnNraXBwZWRfcmV2cywgc2hhMSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC00MjUsMTQgKzQ1NCwxNCBAQAogCXJldHVybiBmb3JfZWFjaF9yZWZfaW4oInJlZnMvYmlzZWN0LyIsIHJlZ2lzdGVyX3JlZiwgTlVMTCk7CiB9CiAKLXZvaWQgcmVhZF9iaXNlY3RfcGF0aHModm9pZCkKK3N0YXRpYyB2b2lkIHJlYWRfYmlzZWN0X3BhdGhzKHN0cnVjdCBhcmd2X2FycmF5ICphcnJheSkKIHsKIAlzdHJ1Y3Qgc3RyYnVmIHN0ciA9IFNUUkJVRl9JTklUOwogCWNvbnN0IGNoYXIgKmZpbGVuYW1lID0gZ2l0X3BhdGgoIkJJU0VDVF9OQU1FUyIpOwogCUZJTEUgKmZwID0gZm9wZW4oZmlsZW5hbWUsICJyIik7CiAKIAlpZiAoIWZwKQotCQlkaWUoIkNvdWxkIG5vdCBvcGVuIGZpbGUgJyVzJzogJXMiLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJDb3VsZCBub3Qgb3BlbiBmaWxlICclcyciLCBmaWxlbmFtZSk7CiAKIAl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJnN0ciwgZnAsICdcbicpICE9IEVPRikgewogCQljaGFyICpxdW90ZWQ7CkBAIC00NDAsOCArNDY5LDggQEAKIAogCQlzdHJidWZfdHJpbSgmc3RyKTsKIAkJcXVvdGVkID0gc3RyYnVmX2RldGFjaCgmc3RyLCBOVUxMKTsKLQkJcmVzID0gc3FfZGVxdW90ZV90b19hcmd2KHF1b3RlZCwgJnJldl9hcmd2LAotCQkJCQkgJnJldl9hcmd2X25yLCAmcmV2X2FyZ3ZfYWxsb2MpOworCQlyZXMgPSBzcV9kZXF1b3RlX3RvX2FyZ3YocXVvdGVkLCAmYXJyYXktPmFyZ3YsCisJCQkJCSAmYXJyYXktPmFyZ3ZfbnIsICZhcnJheS0+YXJndl9hbGxvYyk7CiAJCWlmIChyZXMpCiAJCQlkaWUoIkJhZGx5IHF1b3RlZCBjb250ZW50IGluIGZpbGUgJyVzJzogJXMiLAogCQkJICAgIGZpbGVuYW1lLCBxdW90ZWQpOwpAQCAtNDUxLDEwNiArNDgwLDUzNSBAQAogCWZjbG9zZShmcCk7CiB9CiAKLXN0YXRpYyBpbnQgc2tpcGNtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQorc3RhdGljIGludCBhcnJheV9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKIHsKIAlyZXR1cm4gaGFzaGNtcChhLCBiKTsKIH0KIAotc3RhdGljIHZvaWQgcHJlcGFyZV9za2lwcGVkKHZvaWQpCitzdGF0aWMgdm9pZCBzb3J0X3NoYTFfYXJyYXkoc3RydWN0IHNoYTFfYXJyYXkgKmFycmF5KQogewotCXFzb3J0KHNraXBwZWRfc2hhMSwgc2tpcHBlZF9zaGExX25yLCBzaXplb2YoKnNraXBwZWRfc2hhMSksIHNraXBjbXApOworCXFzb3J0KGFycmF5LT5zaGExLCBhcnJheS0+c2hhMV9uciwgc2l6ZW9mKCphcnJheS0+c2hhMSksIGFycmF5X2NtcCk7CisKKwlhcnJheS0+c29ydGVkID0gMTsKIH0KIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNraXBwZWRfc2hhMV9hY2Nlc3Moc2l6ZV90IGluZGV4LCB2b2lkICp0YWJsZSkKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExX2FjY2VzcyhzaXplX3QgaW5kZXgsIHZvaWQgKnRhYmxlKQogewotCXVuc2lnbmVkIGNoYXIgKCpza2lwcGVkKVsyMF0gPSB0YWJsZTsKLQlyZXR1cm4gc2tpcHBlZFtpbmRleF07CisJdW5zaWduZWQgY2hhciAoKmFycmF5KVsyMF0gPSB0YWJsZTsKKwlyZXR1cm4gYXJyYXlbaW5kZXhdOwogfQogCi1zdGF0aWMgaW50IGxvb2t1cF9za2lwcGVkKHVuc2lnbmVkIGNoYXIgKnNoYTEpCitzdGF0aWMgaW50IGxvb2t1cF9zaGExX2FycmF5KHN0cnVjdCBzaGExX2FycmF5ICphcnJheSwKKwkJCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKLQlyZXR1cm4gc2hhMV9wb3Moc2hhMSwgc2tpcHBlZF9zaGExLCBza2lwcGVkX3NoYTFfbnIsCi0JCQlza2lwcGVkX3NoYTFfYWNjZXNzKTsKKwlpZiAoIWFycmF5LT5zb3J0ZWQpCisJCXNvcnRfc2hhMV9hcnJheShhcnJheSk7CisKKwlyZXR1cm4gc2hhMV9wb3Moc2hhMSwgYXJyYXktPnNoYTEsIGFycmF5LT5zaGExX25yLCBzaGExX2FjY2Vzcyk7CiB9CiAKK3N0YXRpYyBjaGFyICpqb2luX3NoYTFfYXJyYXlfaGV4KHN0cnVjdCBzaGExX2FycmF5ICphcnJheSwgY2hhciBkZWxpbSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGpvaW5lZF9oZXhzID0gU1RSQlVGX0lOSVQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYXJyYXktPnNoYTFfbnI7IGkrKykgeworCQlzdHJidWZfYWRkc3RyKCZqb2luZWRfaGV4cywgc2hhMV90b19oZXgoYXJyYXktPnNoYTFbaV0pKTsKKwkJaWYgKGkgKyAxIDwgYXJyYXktPnNoYTFfbnIpCisJCQlzdHJidWZfYWRkY2goJmpvaW5lZF9oZXhzLCBkZWxpbSk7CisJfQorCisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmpvaW5lZF9oZXhzLCBOVUxMKTsKK30KKworLyoKKyAqIEluIHRoaXMgZnVuY3Rpb24sIHBhc3NpbmcgYSBub3QgTlVMTCBza2lwcGVkX2ZpcnN0IGlzIHZlcnkgc3BlY2lhbC4KKyAqIEl0IG1lYW5zIHRoYXQgd2Ugd2FudCB0byBrbm93IGlmIHRoZSBmaXJzdCBjb21taXQgaW4gdGhlIGxpc3QgaXMKKyAqIHNraXBwZWQgYmVjYXVzZSB3ZSB3aWxsIHdhbnQgdG8gdGVzdCBhIGNvbW1pdCBhd2F5IGZyb20gaXQgaWYgaXQgaXMKKyAqIGluZGVlZCBza2lwcGVkLgorICogU28gaWYgdGhlIGZpcnN0IGNvbW1pdCBpcyBza2lwcGVkLCB3ZSBjYW5ub3QgdGFrZSB0aGUgc2hvcnRjdXQgdG8KKyAqIGp1c3QgInJldHVybiBsaXN0IiB3aGVuIHdlIGZpbmQgdGhlIGZpcnN0IG5vbiBza2lwcGVkIGNvbW1pdCwgd2UKKyAqIGhhdmUgdG8gcmV0dXJuIGEgZnVsbHkgZmlsdGVyZWQgbGlzdC4KKyAqCisgKiBXZSB1c2UgKCpza2lwcGVkX2ZpcnN0ID09IC0xKSB0byBtZWFuICJpdCBoYXMgYmVlbiBmb3VuZCB0aGF0IHRoZQorICogZmlyc3QgY29tbWl0IGlzIG5vdCBza2lwcGVkIi4gSW4gdGhpcyBjYXNlICpza2lwcGVkX2ZpcnN0IGlzIHNldCBiYWNrCisgKiB0byAwIGp1c3QgYmVmb3JlIHRoZSBmdW5jdGlvbiByZXR1cm5zLgorICovCiBzdHJ1Y3QgY29tbWl0X2xpc3QgKmZpbHRlcl9za2lwcGVkKHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwKIAkJCQkgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKip0cmllZCwKLQkJCQkgICBpbnQgc2hvd19hbGwpCisJCQkJICAgaW50IHNob3dfYWxsLAorCQkJCSAgIGludCAqY291bnQsCisJCQkJICAgaW50ICpza2lwcGVkX2ZpcnN0KQogewogCXN0cnVjdCBjb21taXRfbGlzdCAqZmlsdGVyZWQgPSBOVUxMLCAqKmYgPSAmZmlsdGVyZWQ7CiAKIAkqdHJpZWQgPSBOVUxMOwogCi0JaWYgKCFza2lwcGVkX3NoYTFfbnIpCi0JCXJldHVybiBsaXN0OworCWlmIChza2lwcGVkX2ZpcnN0KQorCQkqc2tpcHBlZF9maXJzdCA9IDA7CisJaWYgKGNvdW50KQorCQkqY291bnQgPSAwOwogCi0JcHJlcGFyZV9za2lwcGVkKCk7CisJaWYgKCFza2lwcGVkX3JldnMuc2hhMV9ucikKKwkJcmV0dXJuIGxpc3Q7CiAKIAl3aGlsZSAobGlzdCkgewogCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKm5leHQgPSBsaXN0LT5uZXh0OwogCQlsaXN0LT5uZXh0ID0gTlVMTDsKLQkJaWYgKDAgPD0gbG9va3VwX3NraXBwZWQobGlzdC0+aXRlbS0+b2JqZWN0LnNoYTEpKSB7CisJCWlmICgwIDw9IGxvb2t1cF9zaGExX2FycmF5KCZza2lwcGVkX3JldnMsCisJCQkJCSAgIGxpc3QtPml0ZW0tPm9iamVjdC5zaGExKSkgeworCQkJaWYgKHNraXBwZWRfZmlyc3QgJiYgISpza2lwcGVkX2ZpcnN0KQorCQkJCSpza2lwcGVkX2ZpcnN0ID0gMTsKIAkJCS8qIE1vdmUgY3VycmVudCB0byB0cmllZCBsaXN0ICovCiAJCQkqdHJpZWQgPSBsaXN0OwogCQkJdHJpZWQgPSAmbGlzdC0+bmV4dDsKIAkJfSBlbHNlIHsKLQkJCWlmICghc2hvd19hbGwpCi0JCQkJcmV0dXJuIGxpc3Q7CisJCQlpZiAoIXNob3dfYWxsKSB7CisJCQkJaWYgKCFza2lwcGVkX2ZpcnN0IHx8ICEqc2tpcHBlZF9maXJzdCkKKwkJCQkJcmV0dXJuIGxpc3Q7CisJCQl9IGVsc2UgaWYgKHNraXBwZWRfZmlyc3QgJiYgISpza2lwcGVkX2ZpcnN0KSB7CisJCQkJLyogVGhpcyBtZWFucyB3ZSBrbm93IGl0J3Mgbm90IHNraXBwZWQgKi8KKwkJCQkqc2tpcHBlZF9maXJzdCA9IC0xOworCQkJfQogCQkJLyogTW92ZSBjdXJyZW50IHRvIGZpbHRlcmVkIGxpc3QgKi8KIAkJCSpmID0gbGlzdDsKIAkJCWYgPSAmbGlzdC0+bmV4dDsKKwkJCWlmIChjb3VudCkKKwkJCQkoKmNvdW50KSsrOwogCQl9CiAJCWxpc3QgPSBuZXh0OwogCX0KIAorCWlmIChza2lwcGVkX2ZpcnN0ICYmICpza2lwcGVkX2ZpcnN0ID09IC0xKQorCQkqc2tpcHBlZF9maXJzdCA9IDA7CisKIAlyZXR1cm4gZmlsdGVyZWQ7CiB9CiAKLXN0YXRpYyB2b2lkIGJpc2VjdF9yZXZfc2V0dXAoc3RydWN0IHJldl9pbmZvICpyZXZzLCBjb25zdCBjaGFyICpwcmVmaXgpCisjZGVmaW5lIFBSTl9NT0RVTE8gMzI3NjgKKworLyoKKyAqIFRoaXMgaXMgYSBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgYmFzZWQgb24gIm1hbiAzIHJhbmQiLgorICogSXQgaXMgbm90IHVzZWQgcHJvcGVybHkgYmVjYXVzZSB0aGUgc2VlZCBpcyB0aGUgYXJndW1lbnQgYW5kIGl0CisgKiBpcyBpbmNyZWFzZWQgYnkgb25lIGJldHdlZW4gZWFjaCBjYWxsLCBidXQgdGhhdCBzaG91bGQgbm90IG1hdHRlcgorICogZm9yIHRoaXMgYXBwbGljYXRpb24uCisgKi8KK3N0YXRpYyBpbnQgZ2V0X3BybihpbnQgY291bnQpIHsKKwljb3VudCA9IGNvdW50ICogMTEwMzUxNTI0NSArIDEyMzQ1OworCXJldHVybiAoKHVuc2lnbmVkKShjb3VudC82NTUzNikgJSBQUk5fTU9EVUxPKTsKK30KKworLyoKKyAqIEN1c3RvbSBpbnRlZ2VyIHNxdWFyZSByb290IGZyb20KKyAqIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSW50ZWdlcl9zcXVhcmVfcm9vdAorICovCitzdGF0aWMgaW50IHNxcnRpKGludCB2YWwpCiB7CisJZmxvYXQgZCwgeCA9IHZhbDsKKworCWlmICh2YWwgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlkbyB7CisJCWZsb2F0IHkgPSAoeCArIChmbG9hdCl2YWwgLyB4KSAvIDI7CisJCWQgPSAoeSA+IHgpID8geSAtIHggOiB4IC0geTsKKwkJeCA9IHk7CisJfSB3aGlsZSAoZCA+PSAwLjUpOworCisJcmV0dXJuIChpbnQpeDsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqc2tpcF9hd2F5KHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwgaW50IGNvdW50KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqY3VyLCAqcHJldmlvdXM7CisJaW50IHBybiwgaW5kZXgsIGk7CisKKwlwcm4gPSBnZXRfcHJuKGNvdW50KTsKKwlpbmRleCA9IChjb3VudCAqIHBybiAvIFBSTl9NT0RVTE8pICogc3FydGkocHJuKSAvIHNxcnRpKFBSTl9NT0RVTE8pOworCisJY3VyID0gbGlzdDsKKwlwcmV2aW91cyA9IE5VTEw7CisKKwlmb3IgKGkgPSAwOyBjdXI7IGN1ciA9IGN1ci0+bmV4dCwgaSsrKSB7CisJCWlmIChpID09IGluZGV4KSB7CisJCQlpZiAoaGFzaGNtcChjdXItPml0ZW0tPm9iamVjdC5zaGExLCBjdXJyZW50X2JhZF9zaGExKSkKKwkJCQlyZXR1cm4gY3VyOworCQkJaWYgKHByZXZpb3VzKQorCQkJCXJldHVybiBwcmV2aW91czsKKwkJCXJldHVybiBsaXN0OworCQl9CisJCXByZXZpb3VzID0gY3VyOworCX0KKworCXJldHVybiBsaXN0OworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICptYW5hZ2VkX3NraXBwZWQoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LAorCQkJCQkgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKip0cmllZCkKK3sKKwlpbnQgY291bnQsIHNraXBwZWRfZmlyc3Q7CisKKwkqdHJpZWQgPSBOVUxMOworCisJaWYgKCFza2lwcGVkX3JldnMuc2hhMV9ucikKKwkJcmV0dXJuIGxpc3Q7CisKKwlsaXN0ID0gZmlsdGVyX3NraXBwZWQobGlzdCwgdHJpZWQsIDAsICZjb3VudCwgJnNraXBwZWRfZmlyc3QpOworCisJaWYgKCFza2lwcGVkX2ZpcnN0KQorCQlyZXR1cm4gbGlzdDsKKworCXJldHVybiBza2lwX2F3YXkobGlzdCwgY291bnQpOworfQorCitzdGF0aWMgdm9pZCBiaXNlY3RfcmV2X3NldHVwKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgY29uc3QgY2hhciAqcHJlZml4LAorCQkJICAgICBjb25zdCBjaGFyICpiYWRfZm9ybWF0LCBjb25zdCBjaGFyICpnb29kX2Zvcm1hdCwKKwkJCSAgICAgaW50IHJlYWRfcGF0aHMpCit7CisJc3RydWN0IGFyZ3ZfYXJyYXkgcmV2X2FyZ3YgPSB7IE5VTEwsIDAsIDAgfTsKKwlpbnQgaTsKKwogCWluaXRfcmV2aXNpb25zKHJldnMsIHByZWZpeCk7CiAJcmV2cy0+YWJicmV2ID0gMDsKIAlyZXZzLT5jb21taXRfZm9ybWF0ID0gQ01JVF9GTVRfVU5TUEVDSUZJRUQ7CiAKLQkvKiBhcmd2WzBdIHdpbGwgYmUgaWdub3JlZCBieSBzZXR1cF9yZXZpc2lvbnMgKi8KLQlBTExPQ19HUk9XKHJldl9hcmd2LCByZXZfYXJndl9uciArIDEsIHJldl9hcmd2X2FsbG9jKTsKLQlyZXZfYXJndltyZXZfYXJndl9ucisrXSA9IHhzdHJkdXAoImJpc2VjdF9yZXZfc2V0dXAiKTsKKwkvKiByZXZfYXJndi5hcmd2WzBdIHdpbGwgYmUgaWdub3JlZCBieSBzZXR1cF9yZXZpc2lvbnMgKi8KKwlhcmd2X2FycmF5X3B1c2goJnJldl9hcmd2LCB4c3RyZHVwKCJiaXNlY3RfcmV2X3NldHVwIikpOworCWFyZ3ZfYXJyYXlfcHVzaF9zaGExKCZyZXZfYXJndiwgY3VycmVudF9iYWRfc2hhMSwgYmFkX2Zvcm1hdCk7CisJZm9yIChpID0gMDsgaSA8IGdvb2RfcmV2cy5zaGExX25yOyBpKyspCisJCWFyZ3ZfYXJyYXlfcHVzaF9zaGExKCZyZXZfYXJndiwgZ29vZF9yZXZzLnNoYTFbaV0sCisJCQkJICAgICBnb29kX2Zvcm1hdCk7CisJYXJndl9hcnJheV9wdXNoKCZyZXZfYXJndiwgeHN0cmR1cCgiLS0iKSk7CisJaWYgKHJlYWRfcGF0aHMpCisJCXJlYWRfYmlzZWN0X3BhdGhzKCZyZXZfYXJndik7CisJYXJndl9hcnJheV9wdXNoKCZyZXZfYXJndiwgTlVMTCk7CisKKwlzZXR1cF9yZXZpc2lvbnMocmV2X2FyZ3YuYXJndl9uciwgcmV2X2FyZ3YuYXJndiwgcmV2cywgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIGJpc2VjdF9jb21tb24oc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsocmV2cykpCisJCWRpZSgicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKTsKKwlpZiAocmV2cy0+dHJlZV9vYmplY3RzKQorCQltYXJrX2VkZ2VzX3VuaW50ZXJlc3RpbmcocmV2cy0+Y29tbWl0cywgcmV2cywgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIGV4aXRfaWZfc2tpcHBlZF9jb21taXRzKHN0cnVjdCBjb21taXRfbGlzdCAqdHJpZWQsCisJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJhZCkKK3sKKwlpZiAoIXRyaWVkKQorCQlyZXR1cm47CisKKwlwcmludGYoIlRoZXJlIGFyZSBvbmx5ICdza2lwJ3BlZCBjb21taXRzIGxlZnQgdG8gdGVzdC5cbiIKKwkgICAgICAgIlRoZSBmaXJzdCBiYWQgY29tbWl0IGNvdWxkIGJlIGFueSBvZjpcbiIpOworCXByaW50X2NvbW1pdF9saXN0KHRyaWVkLCAiJXNcbiIsICIlc1xuIik7CisJaWYgKGJhZCkKKwkJcHJpbnRmKCIlc1xuIiwgc2hhMV90b19oZXgoYmFkKSk7CisJcHJpbnRmKCJXZSBjYW5ub3QgYmlzZWN0IG1vcmUhXG4iKTsKKwlleGl0KDIpOworfQorCitzdGF0aWMgaW50IGlzX2V4cGVjdGVkX3Jldihjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWNvbnN0IGNoYXIgKmZpbGVuYW1lID0gZ2l0X3BhdGgoIkJJU0VDVF9FWFBFQ1RFRF9SRVYiKTsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlzdHJ1Y3Qgc3RyYnVmIHN0ciA9IFNUUkJVRl9JTklUOworCUZJTEUgKmZwOworCWludCByZXMgPSAwOworCisJaWYgKHN0YXQoZmlsZW5hbWUsICZzdCkgfHwgIVNfSVNSRUcoc3Quc3RfbW9kZSkpCisJCXJldHVybiAwOworCisJZnAgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKKwlpZiAoIWZwKQorCQlyZXR1cm4gMDsKKworCWlmIChzdHJidWZfZ2V0bGluZSgmc3RyLCBmcCwgJ1xuJykgIT0gRU9GKQorCQlyZXMgPSAhc3RyY21wKHN0ci5idWYsIHNoYTFfdG9faGV4KHNoYTEpKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZzdHIpOworCWZjbG9zZShmcCk7CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZCBtYXJrX2V4cGVjdGVkX3JldihjaGFyICpiaXNlY3RfcmV2X2hleCkKK3sKKwlpbnQgbGVuID0gc3RybGVuKGJpc2VjdF9yZXZfaGV4KTsKKwljb25zdCBjaGFyICpmaWxlbmFtZSA9IGdpdF9wYXRoKCJCSVNFQ1RfRVhQRUNURURfUkVWIik7CisJaW50IGZkID0gb3BlbihmaWxlbmFtZSwgT19DUkVBVCB8IE9fVFJVTkMgfCBPX1dST05MWSwgMDYwMCk7CisKKwlpZiAoZmQgPCAwKQorCQlkaWVfZXJybm8oImNvdWxkIG5vdCBjcmVhdGUgZmlsZSAnJXMnIiwgZmlsZW5hbWUpOworCisJYmlzZWN0X3Jldl9oZXhbbGVuXSA9ICdcbic7CisJd3JpdGVfb3JfZGllKGZkLCBiaXNlY3RfcmV2X2hleCwgbGVuICsgMSk7CisJYmlzZWN0X3Jldl9oZXhbbGVuXSA9ICdcMCc7CisKKwlpZiAoY2xvc2UoZmQpIDwgMCkKKwkJZGllKCJjbG9zaW5nIGZpbGUgJXM6ICVzIiwgZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7Cit9CisKK3N0YXRpYyBpbnQgYmlzZWN0X2NoZWNrb3V0KGNoYXIgKmJpc2VjdF9yZXZfaGV4KQoreworCWludCByZXM7CisKKwltYXJrX2V4cGVjdGVkX3JldihiaXNlY3RfcmV2X2hleCk7CisKKwlhcmd2X2NoZWNrb3V0WzJdID0gYmlzZWN0X3Jldl9oZXg7CisJcmVzID0gcnVuX2NvbW1hbmRfdl9vcHQoYXJndl9jaGVja291dCwgUlVOX0dJVF9DTUQpOworCWlmIChyZXMpCisJCWV4aXQocmVzKTsKKworCWFyZ3Zfc2hvd19icmFuY2hbMV0gPSBiaXNlY3RfcmV2X2hleDsKKwlyZXR1cm4gcnVuX2NvbW1hbmRfdl9vcHQoYXJndl9zaG93X2JyYW5jaCwgUlVOX0dJVF9DTUQpOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqZ2V0X2NvbW1pdF9yZWZlcmVuY2UoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpyID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoc2hhMSk7CisJaWYgKCFyKQorCQlkaWUoIk5vdCBhIHZhbGlkIGNvbW1pdCBuYW1lICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworCXJldHVybiByOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqKmdldF9iYWRfYW5kX2dvb2RfY29tbWl0cyhpbnQgKnJldl9ucikKK3sKKwlpbnQgbGVuID0gMSArIGdvb2RfcmV2cy5zaGExX25yOworCXN0cnVjdCBjb21taXQgKipyZXYgPSB4bWFsbG9jKGxlbiAqIHNpemVvZigqcmV2KSk7CisJaW50IGksIG4gPSAwOworCisJcmV2W24rK10gPSBnZXRfY29tbWl0X3JlZmVyZW5jZShjdXJyZW50X2JhZF9zaGExKTsKKwlmb3IgKGkgPSAwOyBpIDwgZ29vZF9yZXZzLnNoYTFfbnI7IGkrKykKKwkJcmV2W24rK10gPSBnZXRfY29tbWl0X3JlZmVyZW5jZShnb29kX3JldnMuc2hhMVtpXSk7CisJKnJldl9uciA9IG47CisKKwlyZXR1cm4gcmV2OworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfYmFkX21lcmdlX2Jhc2Uodm9pZCkKK3sKKwlpZiAoaXNfZXhwZWN0ZWRfcmV2KGN1cnJlbnRfYmFkX3NoYTEpKSB7CisJCWNoYXIgKmJhZF9oZXggPSBzaGExX3RvX2hleChjdXJyZW50X2JhZF9zaGExKTsKKwkJY2hhciAqZ29vZF9oZXggPSBqb2luX3NoYTFfYXJyYXlfaGV4KCZnb29kX3JldnMsICcgJyk7CisKKwkJZnByaW50ZihzdGRlcnIsICJUaGUgbWVyZ2UgYmFzZSAlcyBpcyBiYWQuXG4iCisJCQkiVGhpcyBtZWFucyB0aGUgYnVnIGhhcyBiZWVuIGZpeGVkICIKKwkJCSJiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIiwKKwkJCWJhZF9oZXgsIGJhZF9oZXgsIGdvb2RfaGV4KTsKKworCQlleGl0KDMpOworCX0KKworCWZwcmludGYoc3RkZXJyLCAiU29tZSBnb29kIHJldnMgYXJlIG5vdCBhbmNlc3RvciBvZiB0aGUgYmFkIHJldi5cbiIKKwkJImdpdCBiaXNlY3QgY2Fubm90IHdvcmsgcHJvcGVybHkgaW4gdGhpcyBjYXNlLlxuIgorCQkiTWF5YmUgeW91IG1pc3Rha2UgZ29vZCBhbmQgYmFkIHJldnM/XG4iKTsKKwlleGl0KDEpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfc2tpcHBlZF9tZXJnZV9iYXNlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1iKQoreworCWNoYXIgKm1iX2hleCA9IHNoYTFfdG9faGV4KG1iKTsKKwljaGFyICpiYWRfaGV4ID0gc2hhMV90b19oZXgoY3VycmVudF9iYWRfc2hhMSk7CisJY2hhciAqZ29vZF9oZXggPSBqb2luX3NoYTFfYXJyYXlfaGV4KCZnb29kX3JldnMsICcgJyk7CisKKwl3YXJuaW5nKCJ0aGUgbWVyZ2UgYmFzZSBiZXR3ZWVuICVzIGFuZCBbJXNdICIKKwkJIm11c3QgYmUgc2tpcHBlZC5cbiIKKwkJIlNvIHdlIGNhbm5vdCBiZSBzdXJlIHRoZSBmaXJzdCBiYWQgY29tbWl0IGlzICIKKwkJImJldHdlZW4gJXMgYW5kICVzLlxuIgorCQkiV2UgY29udGludWUgYW55d2F5LiIsCisJCWJhZF9oZXgsIGdvb2RfaGV4LCBtYl9oZXgsIGJhZF9oZXgpOworCWZyZWUoZ29vZF9oZXgpOworfQorCisvKgorICogImNoZWNrX21lcmdlX2Jhc2VzIiBjaGVja3MgdGhhdCBtZXJnZSBiYXNlcyBhcmUgbm90ICJiYWQiLgorICoKKyAqIC0gSWYgb25lIGlzICJiYWQiLCBpdCBtZWFucyB0aGUgdXNlciBhc3N1bWVkIHNvbWV0aGluZyB3cm9uZworICogYW5kIHdlIG11c3QgZXhpdCB3aXRoIGEgbm9uIDAgZXJyb3IgY29kZS4KKyAqIC0gSWYgb25lIGlzICJnb29kIiwgdGhhdCdzIGdvb2QsIHdlIGhhdmUgbm90aGluZyB0byBkby4KKyAqIC0gSWYgb25lIGlzICJza2lwcGVkIiwgd2UgY2FuJ3Qga25vdyBidXQgd2Ugc2hvdWxkIHdhcm4uCisgKiAtIElmIHdlIGRvbid0IGtub3csIHdlIHNob3VsZCBjaGVjayBpdCBvdXQgYW5kIGFzayB0aGUgdXNlciB0byB0ZXN0LgorICovCitzdGF0aWMgdm9pZCBjaGVja19tZXJnZV9iYXNlcyh2b2lkKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcmVzdWx0OworCWludCByZXZfbnI7CisJc3RydWN0IGNvbW1pdCAqKnJldiA9IGdldF9iYWRfYW5kX2dvb2RfY29tbWl0cygmcmV2X25yKTsKKworCXJlc3VsdCA9IGdldF9tZXJnZV9iYXNlc19tYW55KHJldlswXSwgcmV2X25yIC0gMSwgcmV2ICsgMSwgMCk7CisKKwlmb3IgKDsgcmVzdWx0OyByZXN1bHQgPSByZXN1bHQtPm5leHQpIHsKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqbWIgPSByZXN1bHQtPml0ZW0tPm9iamVjdC5zaGExOworCQlpZiAoIWhhc2hjbXAobWIsIGN1cnJlbnRfYmFkX3NoYTEpKSB7CisJCQloYW5kbGVfYmFkX21lcmdlX2Jhc2UoKTsKKwkJfSBlbHNlIGlmICgwIDw9IGxvb2t1cF9zaGExX2FycmF5KCZnb29kX3JldnMsIG1iKSkgeworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoMCA8PSBsb29rdXBfc2hhMV9hcnJheSgmc2tpcHBlZF9yZXZzLCBtYikpIHsKKwkJCWhhbmRsZV9za2lwcGVkX21lcmdlX2Jhc2UobWIpOworCQl9IGVsc2UgeworCQkJcHJpbnRmKCJCaXNlY3Rpbmc6IGEgbWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZFxuIik7CisJCQlleGl0KGJpc2VjdF9jaGVja291dChzaGExX3RvX2hleChtYikpKTsKKwkJfQorCX0KKworCWZyZWUocmV2KTsKKwlmcmVlX2NvbW1pdF9saXN0KHJlc3VsdCk7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfYW5jZXN0b3JzKGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5IHBlbmRpbmdfY29weTsKKwlpbnQgaSwgcmVzOworCisJYmlzZWN0X3Jldl9zZXR1cCgmcmV2cywgcHJlZml4LCAiXiVzIiwgIiVzIiwgMCk7CisKKwkvKiBTYXZlIHBlbmRpbmcgb2JqZWN0cywgc28gdGhleSBjYW4gYmUgY2xlYW5lZCB1cCBsYXRlci4gKi8KKwltZW1zZXQoJnBlbmRpbmdfY29weSwgMCwgc2l6ZW9mKHBlbmRpbmdfY29weSkpOworCWZvciAoaSA9IDA7IGkgPCByZXZzLnBlbmRpbmcubnI7IGkrKykKKwkJYWRkX29iamVjdF9hcnJheShyZXZzLnBlbmRpbmcub2JqZWN0c1tpXS5pdGVtLAorCQkJCSByZXZzLnBlbmRpbmcub2JqZWN0c1tpXS5uYW1lLAorCQkJCSAmcGVuZGluZ19jb3B5KTsKKworCWJpc2VjdF9jb21tb24oJnJldnMpOworCXJlcyA9IChyZXZzLmNvbW1pdHMgIT0gTlVMTCk7CisKKwkvKiBDbGVhbiB1cCBvYmplY3RzIHVzZWQsIGFzIHRoZXkgd2lsbCBiZSByZXVzZWQuICovCisJZm9yIChpID0gMDsgaSA8IHBlbmRpbmdfY29weS5ucjsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3QgKm8gPSBwZW5kaW5nX2NvcHkub2JqZWN0c1tpXS5pdGVtOworCQljbGVhcl9jb21taXRfbWFya3MoKHN0cnVjdCBjb21taXQgKilvLCBBTExfUkVWX0ZMQUdTKTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCisvKgorICogImNoZWNrX2dvb2RfYXJlX2FuY2VzdG9yc19vZl9iYWQiIGNoZWNrcyB0aGF0IGFsbCAiZ29vZCIgcmV2cyBhcmUKKyAqIGFuY2VzdG9yIG9mIHRoZSAiYmFkIiByZXYuCisgKgorICogSWYgdGhhdCdzIG5vdCB0aGUgY2FzZSwgd2UgbmVlZCB0byBjaGVjayB0aGUgbWVyZ2UgYmFzZXMuCisgKiBJZiBhIG1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWQgYnkgdGhlIHVzZXIsIGl0cyBzb3VyY2UgY29kZSB3aWxsIGJlCisgKiBjaGVja2VkIG91dCB0byBiZSB0ZXN0ZWQgYnkgdGhlIHVzZXIgYW5kIHdlIHdpbGwgZXhpdC4KKyAqLworc3RhdGljIHZvaWQgY2hlY2tfZ29vZF9hcmVfYW5jZXN0b3JzX29mX2JhZChjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBnaXRfcGF0aCgiQklTRUNUX0FOQ0VTVE9SU19PSyIpOworCXN0cnVjdCBzdGF0IHN0OworCWludCBmZDsKKworCWlmICghY3VycmVudF9iYWRfc2hhMSkKKwkJZGllKCJhIGJhZCByZXZpc2lvbiBpcyBuZWVkZWQiKTsKKworCS8qIENoZWNrIGlmIGZpbGUgQklTRUNUX0FOQ0VTVE9SU19PSyBleGlzdHMuICovCisJaWYgKCFzdGF0KGZpbGVuYW1lLCAmc3QpICYmIFNfSVNSRUcoc3Quc3RfbW9kZSkpCisJCXJldHVybjsKKworCS8qIEJpc2VjdGluZyB3aXRoIG5vIGdvb2QgcmV2IGlzIG9rLiAqLworCWlmIChnb29kX3JldnMuc2hhMV9uciA9PSAwKQorCQlyZXR1cm47CisKKwkvKiBDaGVjayBpZiBhbGwgZ29vZCByZXZzIGFyZSBhbmNlc3RvciBvZiB0aGUgYmFkIHJldi4gKi8KKwlpZiAoY2hlY2tfYW5jZXN0b3JzKHByZWZpeCkpCisJCWNoZWNrX21lcmdlX2Jhc2VzKCk7CisKKwkvKiBDcmVhdGUgZmlsZSBCSVNFQ1RfQU5DRVNUT1JTX09LLiAqLworCWZkID0gb3BlbihmaWxlbmFtZSwgT19DUkVBVCB8IE9fVFJVTkMgfCBPX1dST05MWSwgMDYwMCk7CisJaWYgKGZkIDwgMCkKKwkJd2FybmluZygiY291bGQgbm90IGNyZWF0ZSBmaWxlICclcyc6ICVzIiwKKwkJCWZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOworCWVsc2UKKwkJY2xvc2UoZmQpOworfQorCisvKgorICogVGhpcyBkb2VzICJnaXQgZGlmZi10cmVlIC0tcHJldHR5IENPTU1JVCIgd2l0aG91dCBvbmUgZm9yaytleGVjLgorICovCitzdGF0aWMgdm9pZCBzaG93X2RpZmZfdHJlZShjb25zdCBjaGFyICpwcmVmaXgsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gb3B0OworCisJLyogZGlmZi10cmVlIGluaXQgKi8KKwlpbml0X3JldmlzaW9ucygmb3B0LCBwcmVmaXgpOworCWdpdF9jb25maWcoZ2l0X2RpZmZfYmFzaWNfY29uZmlnLCBOVUxMKTsgLyogbm8gImRpZmYiIFVJIG9wdGlvbnMgKi8KKwlvcHQuYWJicmV2ID0gMDsKKwlvcHQuZGlmZiA9IDE7CisKKwkvKiBUaGlzIGlzIHdoYXQgIi0tcHJldHR5IiBkb2VzICovCisJb3B0LnZlcmJvc2VfaGVhZGVyID0gMTsKKwlvcHQudXNlX3Rlcm1pbmF0b3IgPSAwOworCW9wdC5jb21taXRfZm9ybWF0ID0gQ01JVF9GTVRfREVGQVVMVDsKKworCS8qIGRpZmYtdHJlZSBpbml0ICovCisJaWYgKCFvcHQuZGlmZm9wdC5vdXRwdXRfZm9ybWF0KQorCQlvcHQuZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfUkFXOworCisJbG9nX3RyZWVfY29tbWl0KCZvcHQsIGNvbW1pdCk7Cit9CisKKy8qCisgKiBXZSB1c2UgdGhlIGNvbnZlbnRpb24gdGhhdCBleGl0aW5nIHdpdGggYW4gZXhpdCBjb2RlIDEwIG1lYW5zIHRoYXQKKyAqIHRoZSBiaXNlY3Rpb24gcHJvY2VzcyBmaW5pc2hlZCBzdWNjZXNzZnVsbHkuCisgKiBJbiB0aGlzIGNhc2UgdGhlIGNhbGxpbmcgc2hlbGwgc2NyaXB0IHNob3VsZCBleGl0IDAuCisgKi8KK2ludCBiaXNlY3RfbmV4dF9hbGwoY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCXN0cnVjdCBjb21taXRfbGlzdCAqdHJpZWQ7CisJaW50IHJlYWNoZXMgPSAwLCBhbGwgPSAwLCBuciwgc3RlcHM7CisJY29uc3QgdW5zaWduZWQgY2hhciAqYmlzZWN0X3JldjsKKwljaGFyIGJpc2VjdF9yZXZfaGV4WzQxXTsKIAogCWlmIChyZWFkX2Jpc2VjdF9yZWZzKCkpCiAJCWRpZSgicmVhZGluZyBiaXNlY3QgcmVmcyBmYWlsZWQiKTsKIAotCUFMTE9DX0dST1cocmV2X2FyZ3YsIHJldl9hcmd2X25yICsgMSwgcmV2X2FyZ3ZfYWxsb2MpOwotCXJldl9hcmd2W3Jldl9hcmd2X25yKytdID0geHN0cmR1cCgiLS0iKTsKKwljaGVja19nb29kX2FyZV9hbmNlc3RvcnNfb2ZfYmFkKHByZWZpeCk7CiAKLQlyZWFkX2Jpc2VjdF9wYXRocygpOworCWJpc2VjdF9yZXZfc2V0dXAoJnJldnMsIHByZWZpeCwgIiVzIiwgIl4lcyIsIDEpOworCXJldnMubGltaXRlZCA9IDE7CiAKLQlBTExPQ19HUk9XKHJldl9hcmd2LCByZXZfYXJndl9uciArIDEsIHJldl9hcmd2X2FsbG9jKTsKLQlyZXZfYXJndltyZXZfYXJndl9ucisrXSA9IE5VTEw7Ci0KLQlzZXR1cF9yZXZpc2lvbnMocmV2X2FyZ3ZfbnIsIHJldl9hcmd2LCByZXZzLCBOVUxMKTsKLQotCXJldnMtPmxpbWl0ZWQgPSAxOwotfQotCi1pbnQgYmlzZWN0X25leHRfdmFycyhjb25zdCBjaGFyICpwcmVmaXgpCi17Ci0Jc3RydWN0IHJldl9pbmZvIHJldnM7Ci0Jc3RydWN0IHJldl9saXN0X2luZm8gaW5mbzsKLQlpbnQgcmVhY2hlcyA9IDAsIGFsbCA9IDA7Ci0KLQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7Ci0JaW5mby5yZXZzID0gJnJldnM7Ci0JaW5mby5iaXNlY3Rfc2hvd19mbGFncyA9IEJJU0VDVF9TSE9XX1RSSUVEIHwgQklTRUNUX1NIT1dfU1RSSU5HRUQ7Ci0KLQliaXNlY3RfcmV2X3NldHVwKCZyZXZzLCBwcmVmaXgpOwotCi0JaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2cykpCi0JCWRpZSgicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKTsKLQlpZiAocmV2cy50cmVlX29iamVjdHMpCi0JCW1hcmtfZWRnZXNfdW5pbnRlcmVzdGluZyhyZXZzLmNvbW1pdHMsICZyZXZzLCBOVUxMKTsKKwliaXNlY3RfY29tbW9uKCZyZXZzKTsKIAogCXJldnMuY29tbWl0cyA9IGZpbmRfYmlzZWN0aW9uKHJldnMuY29tbWl0cywgJnJlYWNoZXMsICZhbGwsCi0JCQkJICAgICAgISFza2lwcGVkX3NoYTFfbnIpOworCQkJCSAgICAgICAhIXNraXBwZWRfcmV2cy5zaGExX25yKTsKKwlyZXZzLmNvbW1pdHMgPSBtYW5hZ2VkX3NraXBwZWQocmV2cy5jb21taXRzLCAmdHJpZWQpOwogCi0JcmV0dXJuIHNob3dfYmlzZWN0X3ZhcnMoJmluZm8sIHJlYWNoZXMsIGFsbCk7CisJaWYgKCFyZXZzLmNvbW1pdHMpIHsKKwkJLyoKKwkJICogV2Ugc2hvdWxkIGV4aXQgaGVyZSBvbmx5IGlmIHRoZSAiYmFkIgorCQkgKiBjb21taXQgaXMgYWxzbyBhICJza2lwIiBjb21taXQuCisJCSAqLworCQlleGl0X2lmX3NraXBwZWRfY29tbWl0cyh0cmllZCwgTlVMTCk7CisKKwkJcHJpbnRmKCIlcyB3YXMgYm90aCBnb29kIGFuZCBiYWRcbiIsCisJCSAgICAgICBzaGExX3RvX2hleChjdXJyZW50X2JhZF9zaGExKSk7CisJCWV4aXQoMSk7CisJfQorCisJaWYgKCFhbGwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJObyB0ZXN0YWJsZSBjb21taXQgZm91bmQuXG4iCisJCQkiTWF5YmUgeW91IHN0YXJ0ZWQgd2l0aCBiYWQgcGF0aCBwYXJhbWV0ZXJzP1xuIik7CisJCWV4aXQoNCk7CisJfQorCisJYmlzZWN0X3JldiA9IHJldnMuY29tbWl0cy0+aXRlbS0+b2JqZWN0LnNoYTE7CisJbWVtY3B5KGJpc2VjdF9yZXZfaGV4LCBzaGExX3RvX2hleChiaXNlY3RfcmV2KSwgNDEpOworCisJaWYgKCFoYXNoY21wKGJpc2VjdF9yZXYsIGN1cnJlbnRfYmFkX3NoYTEpKSB7CisJCWV4aXRfaWZfc2tpcHBlZF9jb21taXRzKHRyaWVkLCBjdXJyZW50X2JhZF9zaGExKTsKKwkJcHJpbnRmKCIlcyBpcyB0aGUgZmlyc3QgYmFkIGNvbW1pdFxuIiwgYmlzZWN0X3Jldl9oZXgpOworCQlzaG93X2RpZmZfdHJlZShwcmVmaXgsIHJldnMuY29tbWl0cy0+aXRlbSk7CisJCS8qIFRoaXMgbWVhbnMgdGhlIGJpc2VjdGlvbiBwcm9jZXNzIHN1Y2NlZWRlZC4gKi8KKwkJZXhpdCgxMCk7CisJfQorCisJbnIgPSBhbGwgLSByZWFjaGVzIC0gMTsKKwlzdGVwcyA9IGVzdGltYXRlX2Jpc2VjdF9zdGVwcyhhbGwpOworCXByaW50ZigiQmlzZWN0aW5nOiAlZCByZXZpc2lvbiVzIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzICIKKwkgICAgICAgIihyb3VnaGx5ICVkIHN0ZXAlcylcbiIsIG5yLCAobnIgPT0gMSA/ICIiIDogInMiKSwKKwkgICAgICAgc3RlcHMsIChzdGVwcyA9PSAxID8gIiIgOiAicyIpKTsKKworCXJldHVybiBiaXNlY3RfY2hlY2tvdXQoYmlzZWN0X3Jldl9oZXgpOwogfQorCmRpZmYgLS1naXQgYS9iaXNlY3QuaCBiL2Jpc2VjdC5oCmluZGV4IGZkYmE5MTMuLjA4NjJjZTUgMTAwNjQ0Ci0tLSBhL2Jpc2VjdC5oCisrKyBiL2Jpc2VjdC5oCkBAIC03LDEyICs3LDE3IEBACiAKIGV4dGVybiBzdHJ1Y3QgY29tbWl0X2xpc3QgKmZpbHRlcl9za2lwcGVkKHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwKIAkJCQkJICBzdHJ1Y3QgY29tbWl0X2xpc3QgKip0cmllZCwKLQkJCQkJICBpbnQgc2hvd19hbGwpOworCQkJCQkgIGludCBzaG93X2FsbCwKKwkJCQkJICBpbnQgKmNvdW50LAorCQkJCQkgIGludCAqc2tpcHBlZF9maXJzdCk7CisKK2V4dGVybiB2b2lkIHByaW50X2NvbW1pdF9saXN0KHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdF9jdXIsCisJCQkgICAgICBjb25zdCBjaGFyICpmb3JtYXRfbGFzdCk7CiAKIC8qIGJpc2VjdF9zaG93X2ZsYWdzIGZsYWdzIGluIHN0cnVjdCByZXZfbGlzdF9pbmZvICovCiAjZGVmaW5lIEJJU0VDVF9TSE9XX0FMTAkJKDE8PDApCiAjZGVmaW5lIEJJU0VDVF9TSE9XX1RSSUVECSgxPDwxKQotI2RlZmluZSBCSVNFQ1RfU0hPV19TVFJJTkdFRAkoMTw8MikKIAogc3RydWN0IHJldl9saXN0X2luZm8gewogCXN0cnVjdCByZXZfaW5mbyAqcmV2czsKQEAgLTIyLDggKzI3LDggQEAKIAljb25zdCBjaGFyICpoZWFkZXJfcHJlZml4OwogfTsKIAotZXh0ZXJuIGludCBzaG93X2Jpc2VjdF92YXJzKHN0cnVjdCByZXZfbGlzdF9pbmZvICppbmZvLCBpbnQgcmVhY2hlcywgaW50IGFsbCk7CitleHRlcm4gaW50IGJpc2VjdF9uZXh0X2FsbChjb25zdCBjaGFyICpwcmVmaXgpOwogCi1leHRlcm4gaW50IGJpc2VjdF9uZXh0X3ZhcnMoY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgZXN0aW1hdGVfYmlzZWN0X3N0ZXBzKGludCBhbGwpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2Jsb2IuYyBiL2Jsb2IuYwppbmRleCBiZDdkMDc4Li5hZTMyMGJkIDEwMDY0NAotLS0gYS9ibG9iLmMKKysrIGIvYmxvYi5jCkBAIC0yMywyNCArMjMsMyBAQAogCWl0ZW0tPm9iamVjdC5wYXJzZWQgPSAxOwogCXJldHVybiAwOwogfQotCi1pbnQgcGFyc2VfYmxvYihzdHJ1Y3QgYmxvYiAqaXRlbSkKLXsKLSAgICAgICAgZW51bSBvYmplY3RfdHlwZSB0eXBlOwotICAgICAgICB2b2lkICpidWZmZXI7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZTsKLQlpbnQgcmV0OwotCi0gICAgICAgIGlmIChpdGVtLT5vYmplY3QucGFyc2VkKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBidWZmZXIgPSByZWFkX3NoYTFfZmlsZShpdGVtLT5vYmplY3Quc2hhMSwgJnR5cGUsICZzaXplKTsKLSAgICAgICAgaWYgKCFidWZmZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKCJDb3VsZCBub3QgcmVhZCAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYTFfdG9faGV4KGl0ZW0tPm9iamVjdC5zaGExKSk7Ci0gICAgICAgIGlmICh0eXBlICE9IE9CSl9CTE9CKQotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcigiT2JqZWN0ICVzIG5vdCBhIGJsb2IiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGExX3RvX2hleChpdGVtLT5vYmplY3Quc2hhMSkpOwotCXJldCA9IHBhcnNlX2Jsb2JfYnVmZmVyKGl0ZW0sIGJ1ZmZlciwgc2l6ZSk7Ci0JZnJlZShidWZmZXIpOwotCXJldHVybiByZXQ7Ci19CmRpZmYgLS1naXQgYS9ibG9iLmggYi9ibG9iLmgKaW5kZXggZWE1ZDllOS4uNTliMzk0ZSAxMDA2NDQKLS0tIGEvYmxvYi5oCisrKyBiL2Jsb2IuaApAQCAtMTMsNiArMTMsMTMgQEAKIAogaW50IHBhcnNlX2Jsb2JfYnVmZmVyKHN0cnVjdCBibG9iICppdGVtLCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiAKLWludCBwYXJzZV9ibG9iKHN0cnVjdCBibG9iICppdGVtKTsKKy8qKgorICogQmxvYnMgZG8gbm90IGNvbnRhaW4gcmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzIGFuZCBkbyBub3QgaGF2ZQorICogc3RydWN0dXJlZCBkYXRhIHRoYXQgbmVlZHMgcGFyc2luZy4gSG93ZXZlciwgY29kZSBtYXkgdXNlIHRoZQorICogInBhcnNlZCIgYml0IGluIHRoZSBzdHJ1Y3Qgb2JqZWN0IGZvciBhIGJsb2IgdG8gZGV0ZXJtaW5lIHdoZXRoZXIKKyAqIGl0cyBjb250ZW50IGhhcyBiZWVuIGZvdW5kIHRvIGFjdHVhbGx5IGJlIGF2YWlsYWJsZSwgc28KKyAqIHBhcnNlX2Jsb2JfYnVmZmVyKCkgaXMgdXNlZCAoYnkgb2JqZWN0LmMpIHRvIGZsYWcgdGhhdCB0aGUgb2JqZWN0CisgKiBoYXMgYmVlbiByZWFkIHN1Y2Nlc3NmdWxseSBmcm9tIHRoZSBkYXRhYmFzZS4KKyAqKi8KIAogI2VuZGlmIC8qIEJMT0JfSCAqLwpkaWZmIC0tZ2l0IGEvYmxvY2stc2hhMS9zaGExLmMgYi9ibG9jay1zaGExL3NoYTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODkzNDc1Ci0tLSAvZGV2L251bGwKKysrIGIvYmxvY2stc2hhMS9zaGExLmMKQEAgLTAsMCArMSwyODIgQEAKKy8qCisgKiBTSEExIHJvdXRpbmUgb3B0aW1pemVkIHRvIGRvIHdvcmQgYWNjZXNzZXMgcmF0aGVyIHRoYW4gYnl0ZSBhY2Nlc3NlcywKKyAqIGFuZCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBjb3BpZXMgaW50byB0aGUgY29udGV4dCBhcnJheS4KKyAqCisgKiBUaGlzIHdhcyBpbml0aWFsbHkgYmFzZWQgb24gdGhlIE1vemlsbGEgU0hBMSBpbXBsZW1lbnRhdGlvbiwgYWx0aG91Z2gKKyAqIG5vbmUgb2YgdGhlIG9yaWdpbmFsIE1vemlsbGEgY29kZSByZW1haW5zLgorICovCisKKy8qIHRoaXMgaXMgb25seSB0byBnZXQgZGVmaW5pdGlvbnMgZm9yIG1lbWNweSgpLCBudG9obCgpIGFuZCBodG9ubCgpICovCisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisKKyNpbmNsdWRlICJzaGExLmgiCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSkKKworLyoKKyAqIEZvcmNlIHVzYWdlIG9mIHJvbCBvciByb3IgYnkgc2VsZWN0aW5nIHRoZSBvbmUgd2l0aCB0aGUgc21hbGxlciBjb25zdGFudC4KKyAqIEl0IF9jYW5fIGdlbmVyYXRlIHNsaWdodGx5IHNtYWxsZXIgY29kZSAoYSBjb25zdGFudCBvZiAxIGlzIHNwZWNpYWwpLCBidXQKKyAqIHBlcmhhcHMgbW9yZSBpbXBvcnRhbnRseSBpdCdzIHBvc3NpYmx5IGZhc3RlciBvbiBhbnkgdWFyY2ggdGhhdCBkb2VzIGEKKyAqIHJvdGF0ZSB3aXRoIGEgbG9vcC4KKyAqLworCisjZGVmaW5lIFNIQV9BU00ob3AsIHgsIG4pICh7IHVuc2lnbmVkIGludCBfX3JlczsgX19hc21fXyhvcCAiICUxLCUwIjoiPXIiIChfX3Jlcyk6ImkiIChuKSwgIjAiICh4KSk7IF9fcmVzOyB9KQorI2RlZmluZSBTSEFfUk9MKHgsbikJU0hBX0FTTSgicm9sIiwgeCwgbikKKyNkZWZpbmUgU0hBX1JPUih4LG4pCVNIQV9BU00oInJvciIsIHgsIG4pCisKKyNlbHNlCisKKyNkZWZpbmUgU0hBX1JPVChYLGwscikJKCgoWCkgPDwgKGwpKSB8ICgoWCkgPj4gKHIpKSkKKyNkZWZpbmUgU0hBX1JPTChYLG4pCVNIQV9ST1QoWCxuLDMyLShuKSkKKyNkZWZpbmUgU0hBX1JPUihYLG4pCVNIQV9ST1QoWCwzMi0obiksbikKKworI2VuZGlmCisKKy8qCisgKiBJZiB5b3UgaGF2ZSAzMiByZWdpc3RlcnMgb3IgbW9yZSwgdGhlIGNvbXBpbGVyIGNhbiAoYW5kIHNob3VsZCkKKyAqIHRyeSB0byBjaGFuZ2UgdGhlIGFycmF5W10gYWNjZXNzZXMgaW50byByZWdpc3RlcnMuIEhvd2V2ZXIsIG9uCisgKiBtYWNoaW5lcyB3aXRoIGxlc3MgdGhhbiB+MjUgcmVnaXN0ZXJzLCB0aGF0IHdvbid0IHJlYWxseSB3b3JrLAorICogYW5kIGF0IGxlYXN0IGdjYyB3aWxsIG1ha2UgYW4gdW5ob2x5IG1lc3Mgb2YgaXQuCisgKgorICogU28gdG8gYXZvaWQgdGhhdCBtZXNzIHdoaWNoIGp1c3Qgc2xvd3MgdGhpbmdzIGRvd24sIHdlIGZvcmNlCisgKiB0aGUgc3RvcmVzIHRvIG1lbW9yeSB0byBhY3R1YWxseSBoYXBwZW4gKHdlIG1pZ2h0IGJlIGJldHRlciBvZmYKKyAqIHdpdGggYSAnVyh0KT0odmFsKTthc20oIiI6IittIiAoVyh0KSknIHRoZXJlIGluc3RlYWQsIGFzCisgKiBzdWdnZXN0ZWQgYnkgQXJ0dXIgU2thd2luYSAtIHRoYXQgd2lsbCBhbHNvIG1ha2UgZ2NjIHVuYWJsZSB0bworICogdHJ5IHRvIGRvIHRoZSBzaWxseSAib3B0aW1pemUgYXdheSBsb2FkcyIgcGFydCBiZWNhdXNlIGl0IHdvbid0CisgKiBzZWUgd2hhdCB0aGUgdmFsdWUgd2lsbCBiZSkuCisgKgorICogQmVuIEhlcnJlbnNjaG1pZHQgcmVwb3J0cyB0aGF0IG9uIFBQQywgdGhlIEMgdmVyc2lvbiBjb21lcyBjbG9zZQorICogdG8gdGhlIG9wdGltaXplZCBhc20gd2l0aCB0aGlzIChpZSBvbiBQUEMgeW91IGRvbid0IHdhbnQgdGhhdAorICogJ3ZvbGF0aWxlJywgc2luY2UgdGhlcmUgYXJlIGxvdHMgb2YgcmVnaXN0ZXJzKS4KKyAqCisgKiBPbiBBUk0gd2UgZ2V0IHRoZSBiZXN0IGNvZGUgZ2VuZXJhdGlvbiBieSBmb3JjaW5nIGEgZnVsbCBtZW1vcnkgYmFycmllcgorICogYmV0d2VlbiBlYWNoIFNIQV9ST1VORCwgb3RoZXJ3aXNlIGdjYyBoYXBwaWx5IGdldCB3aWxkIHdpdGggc3BpbGxpbmcgYW5kCisgKiB0aGUgc3RhY2sgZnJhbWUgc2l6ZSBzaW1wbHkgZXhwbG9kZSBhbmQgcGVyZm9ybWFuY2UgZ29lcyBkb3duIHRoZSBkcmFpbi4KKyAqLworCisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorICAjZGVmaW5lIHNldFcoeCwgdmFsKSAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikmVyh4KSA9ICh2YWwpKQorI2VsaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX2FybV9fKQorICAjZGVmaW5lIHNldFcoeCwgdmFsKSBkbyB7IFcoeCkgPSAodmFsKTsgX19hc21fXygiIjo6OiJtZW1vcnkiKTsgfSB3aGlsZSAoMCkKKyNlbHNlCisgICNkZWZpbmUgc2V0Vyh4LCB2YWwpIChXKHgpID0gKHZhbCkpCisjZW5kaWYKKworLyoKKyAqIFBlcmZvcm1hbmNlIG1pZ2h0IGJlIGltcHJvdmVkIGlmIHRoZSBDUFUgYXJjaGl0ZWN0dXJlIGlzIE9LIHdpdGgKKyAqIHVuYWxpZ25lZCAzMi1iaXQgbG9hZHMgYW5kIGEgZmFzdCBudG9obCgpIGlzIGF2YWlsYWJsZS4KKyAqIE90aGVyd2lzZSBmYWxsIGJhY2sgdG8gYnl0ZSBsb2FkcyBhbmQgc2hpZnRzIHdoaWNoIGlzIHBvcnRhYmxlLAorICogYW5kIGlzIGZhc3RlciBvbiBhcmNoaXRlY3R1cmVzIHdpdGggbWVtb3J5IGFsaWdubWVudCBpc3N1ZXMuCisgKi8KKworI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgXAorICAgIGRlZmluZWQoX19wcGNfXykgfHwgZGVmaW5lZChfX3BwYzY0X18pIHx8IFwKKyAgICBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9fcG93ZXJwYzY0X18pIHx8IFwKKyAgICBkZWZpbmVkKF9fczM5MF9fKSB8fCBkZWZpbmVkKF9fczM5MHhfXykKKworI2RlZmluZSBnZXRfYmUzMihwKQludG9obCgqKHVuc2lnbmVkIGludCAqKShwKSkKKyNkZWZpbmUgcHV0X2JlMzIocCwgdikJZG8geyAqKHVuc2lnbmVkIGludCAqKShwKSA9IGh0b25sKHYpOyB9IHdoaWxlICgwKQorCisjZWxzZQorCisjZGVmaW5lIGdldF9iZTMyKHApCSggXAorCSgqKCh1bnNpZ25lZCBjaGFyICopKHApICsgMCkgPDwgMjQpIHwgXAorCSgqKCh1bnNpZ25lZCBjaGFyICopKHApICsgMSkgPDwgMTYpIHwgXAorCSgqKCh1bnNpZ25lZCBjaGFyICopKHApICsgMikgPDwgIDgpIHwgXAorCSgqKCh1bnNpZ25lZCBjaGFyICopKHApICsgMykgPDwgIDApICkKKyNkZWZpbmUgcHV0X2JlMzIocCwgdikJZG8geyBcCisJdW5zaWduZWQgaW50IF9fdiA9ICh2KTsgXAorCSooKHVuc2lnbmVkIGNoYXIgKikocCkgKyAwKSA9IF9fdiA+PiAyNDsgXAorCSooKHVuc2lnbmVkIGNoYXIgKikocCkgKyAxKSA9IF9fdiA+PiAxNjsgXAorCSooKHVuc2lnbmVkIGNoYXIgKikocCkgKyAyKSA9IF9fdiA+PiAgODsgXAorCSooKHVuc2lnbmVkIGNoYXIgKikocCkgKyAzKSA9IF9fdiA+PiAgMDsgfSB3aGlsZSAoMCkKKworI2VuZGlmCisKKy8qIFRoaXMgInJvbGxzIiBvdmVyIHRoZSA1MTItYml0IGFycmF5ICovCisjZGVmaW5lIFcoeCkgKGFycmF5Wyh4KSYxNV0pCisKKy8qCisgKiBXaGVyZSBkbyB3ZSBnZXQgdGhlIHNvdXJjZSBmcm9tPyBUaGUgZmlyc3QgMTYgaXRlcmF0aW9ucyBnZXQgaXQgZnJvbQorICogdGhlIGlucHV0IGRhdGEsIHRoZSBuZXh0IG1peCBpdCBmcm9tIHRoZSA1MTItYml0IGFycmF5LgorICovCisjZGVmaW5lIFNIQV9TUkModCkgZ2V0X2JlMzIoZGF0YSArIHQpCisjZGVmaW5lIFNIQV9NSVgodCkgU0hBX1JPTChXKHQrMTMpIF4gVyh0KzgpIF4gVyh0KzIpIF4gVyh0KSwgMSkKKworI2RlZmluZSBTSEFfUk9VTkQodCwgaW5wdXQsIGZuLCBjb25zdGFudCwgQSwgQiwgQywgRCwgRSkgZG8geyBcCisJdW5zaWduZWQgaW50IFRFTVAgPSBpbnB1dCh0KTsgc2V0Vyh0LCBURU1QKTsgXAorCUUgKz0gVEVNUCArIFNIQV9ST0woQSw1KSArIChmbikgKyAoY29uc3RhbnQpOyBcCisJQiA9IFNIQV9ST1IoQiwgMik7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgVF8wXzE1KHQsIEEsIEIsIEMsIEQsIEUpICBTSEFfUk9VTkQodCwgU0hBX1NSQywgKCgoQ15EKSZCKV5EKSAsIDB4NWE4Mjc5OTksIEEsIEIsIEMsIEQsIEUgKQorI2RlZmluZSBUXzE2XzE5KHQsIEEsIEIsIEMsIEQsIEUpIFNIQV9ST1VORCh0LCBTSEFfTUlYLCAoKChDXkQpJkIpXkQpICwgMHg1YTgyNzk5OSwgQSwgQiwgQywgRCwgRSApCisjZGVmaW5lIFRfMjBfMzkodCwgQSwgQiwgQywgRCwgRSkgU0hBX1JPVU5EKHQsIFNIQV9NSVgsIChCXkNeRCkgLCAweDZlZDllYmExLCBBLCBCLCBDLCBELCBFICkKKyNkZWZpbmUgVF80MF81OSh0LCBBLCBCLCBDLCBELCBFKSBTSEFfUk9VTkQodCwgU0hBX01JWCwgKChCJkMpKyhEJihCXkMpKSkgLCAweDhmMWJiY2RjLCBBLCBCLCBDLCBELCBFICkKKyNkZWZpbmUgVF82MF83OSh0LCBBLCBCLCBDLCBELCBFKSBTSEFfUk9VTkQodCwgU0hBX01JWCwgKEJeQ15EKSAsICAweGNhNjJjMWQ2LCBBLCBCLCBDLCBELCBFICkKKworc3RhdGljIHZvaWQgYmxrX1NIQTFfQmxvY2soYmxrX1NIQV9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgaW50ICpkYXRhKQoreworCXVuc2lnbmVkIGludCBBLEIsQyxELEU7CisJdW5zaWduZWQgaW50IGFycmF5WzE2XTsKKworCUEgPSBjdHgtPkhbMF07CisJQiA9IGN0eC0+SFsxXTsKKwlDID0gY3R4LT5IWzJdOworCUQgPSBjdHgtPkhbM107CisJRSA9IGN0eC0+SFs0XTsKKworCS8qIFJvdW5kIDEgLSBpdGVyYXRpb25zIDAtMTYgdGFrZSB0aGVpciBpbnB1dCBmcm9tICdkYXRhJyAqLworCVRfMF8xNSggMCwgQSwgQiwgQywgRCwgRSk7CisJVF8wXzE1KCAxLCBFLCBBLCBCLCBDLCBEKTsKKwlUXzBfMTUoIDIsIEQsIEUsIEEsIEIsIEMpOworCVRfMF8xNSggMywgQywgRCwgRSwgQSwgQik7CisJVF8wXzE1KCA0LCBCLCBDLCBELCBFLCBBKTsKKwlUXzBfMTUoIDUsIEEsIEIsIEMsIEQsIEUpOworCVRfMF8xNSggNiwgRSwgQSwgQiwgQywgRCk7CisJVF8wXzE1KCA3LCBELCBFLCBBLCBCLCBDKTsKKwlUXzBfMTUoIDgsIEMsIEQsIEUsIEEsIEIpOworCVRfMF8xNSggOSwgQiwgQywgRCwgRSwgQSk7CisJVF8wXzE1KDEwLCBBLCBCLCBDLCBELCBFKTsKKwlUXzBfMTUoMTEsIEUsIEEsIEIsIEMsIEQpOworCVRfMF8xNSgxMiwgRCwgRSwgQSwgQiwgQyk7CisJVF8wXzE1KDEzLCBDLCBELCBFLCBBLCBCKTsKKwlUXzBfMTUoMTQsIEIsIEMsIEQsIEUsIEEpOworCVRfMF8xNSgxNSwgQSwgQiwgQywgRCwgRSk7CisKKwkvKiBSb3VuZCAxIC0gdGFpbC4gSW5wdXQgZnJvbSA1MTItYml0IG1peGluZyBhcnJheSAqLworCVRfMTZfMTkoMTYsIEUsIEEsIEIsIEMsIEQpOworCVRfMTZfMTkoMTcsIEQsIEUsIEEsIEIsIEMpOworCVRfMTZfMTkoMTgsIEMsIEQsIEUsIEEsIEIpOworCVRfMTZfMTkoMTksIEIsIEMsIEQsIEUsIEEpOworCisJLyogUm91bmQgMiAqLworCVRfMjBfMzkoMjAsIEEsIEIsIEMsIEQsIEUpOworCVRfMjBfMzkoMjEsIEUsIEEsIEIsIEMsIEQpOworCVRfMjBfMzkoMjIsIEQsIEUsIEEsIEIsIEMpOworCVRfMjBfMzkoMjMsIEMsIEQsIEUsIEEsIEIpOworCVRfMjBfMzkoMjQsIEIsIEMsIEQsIEUsIEEpOworCVRfMjBfMzkoMjUsIEEsIEIsIEMsIEQsIEUpOworCVRfMjBfMzkoMjYsIEUsIEEsIEIsIEMsIEQpOworCVRfMjBfMzkoMjcsIEQsIEUsIEEsIEIsIEMpOworCVRfMjBfMzkoMjgsIEMsIEQsIEUsIEEsIEIpOworCVRfMjBfMzkoMjksIEIsIEMsIEQsIEUsIEEpOworCVRfMjBfMzkoMzAsIEEsIEIsIEMsIEQsIEUpOworCVRfMjBfMzkoMzEsIEUsIEEsIEIsIEMsIEQpOworCVRfMjBfMzkoMzIsIEQsIEUsIEEsIEIsIEMpOworCVRfMjBfMzkoMzMsIEMsIEQsIEUsIEEsIEIpOworCVRfMjBfMzkoMzQsIEIsIEMsIEQsIEUsIEEpOworCVRfMjBfMzkoMzUsIEEsIEIsIEMsIEQsIEUpOworCVRfMjBfMzkoMzYsIEUsIEEsIEIsIEMsIEQpOworCVRfMjBfMzkoMzcsIEQsIEUsIEEsIEIsIEMpOworCVRfMjBfMzkoMzgsIEMsIEQsIEUsIEEsIEIpOworCVRfMjBfMzkoMzksIEIsIEMsIEQsIEUsIEEpOworCisJLyogUm91bmQgMyAqLworCVRfNDBfNTkoNDAsIEEsIEIsIEMsIEQsIEUpOworCVRfNDBfNTkoNDEsIEUsIEEsIEIsIEMsIEQpOworCVRfNDBfNTkoNDIsIEQsIEUsIEEsIEIsIEMpOworCVRfNDBfNTkoNDMsIEMsIEQsIEUsIEEsIEIpOworCVRfNDBfNTkoNDQsIEIsIEMsIEQsIEUsIEEpOworCVRfNDBfNTkoNDUsIEEsIEIsIEMsIEQsIEUpOworCVRfNDBfNTkoNDYsIEUsIEEsIEIsIEMsIEQpOworCVRfNDBfNTkoNDcsIEQsIEUsIEEsIEIsIEMpOworCVRfNDBfNTkoNDgsIEMsIEQsIEUsIEEsIEIpOworCVRfNDBfNTkoNDksIEIsIEMsIEQsIEUsIEEpOworCVRfNDBfNTkoNTAsIEEsIEIsIEMsIEQsIEUpOworCVRfNDBfNTkoNTEsIEUsIEEsIEIsIEMsIEQpOworCVRfNDBfNTkoNTIsIEQsIEUsIEEsIEIsIEMpOworCVRfNDBfNTkoNTMsIEMsIEQsIEUsIEEsIEIpOworCVRfNDBfNTkoNTQsIEIsIEMsIEQsIEUsIEEpOworCVRfNDBfNTkoNTUsIEEsIEIsIEMsIEQsIEUpOworCVRfNDBfNTkoNTYsIEUsIEEsIEIsIEMsIEQpOworCVRfNDBfNTkoNTcsIEQsIEUsIEEsIEIsIEMpOworCVRfNDBfNTkoNTgsIEMsIEQsIEUsIEEsIEIpOworCVRfNDBfNTkoNTksIEIsIEMsIEQsIEUsIEEpOworCisJLyogUm91bmQgNCAqLworCVRfNjBfNzkoNjAsIEEsIEIsIEMsIEQsIEUpOworCVRfNjBfNzkoNjEsIEUsIEEsIEIsIEMsIEQpOworCVRfNjBfNzkoNjIsIEQsIEUsIEEsIEIsIEMpOworCVRfNjBfNzkoNjMsIEMsIEQsIEUsIEEsIEIpOworCVRfNjBfNzkoNjQsIEIsIEMsIEQsIEUsIEEpOworCVRfNjBfNzkoNjUsIEEsIEIsIEMsIEQsIEUpOworCVRfNjBfNzkoNjYsIEUsIEEsIEIsIEMsIEQpOworCVRfNjBfNzkoNjcsIEQsIEUsIEEsIEIsIEMpOworCVRfNjBfNzkoNjgsIEMsIEQsIEUsIEEsIEIpOworCVRfNjBfNzkoNjksIEIsIEMsIEQsIEUsIEEpOworCVRfNjBfNzkoNzAsIEEsIEIsIEMsIEQsIEUpOworCVRfNjBfNzkoNzEsIEUsIEEsIEIsIEMsIEQpOworCVRfNjBfNzkoNzIsIEQsIEUsIEEsIEIsIEMpOworCVRfNjBfNzkoNzMsIEMsIEQsIEUsIEEsIEIpOworCVRfNjBfNzkoNzQsIEIsIEMsIEQsIEUsIEEpOworCVRfNjBfNzkoNzUsIEEsIEIsIEMsIEQsIEUpOworCVRfNjBfNzkoNzYsIEUsIEEsIEIsIEMsIEQpOworCVRfNjBfNzkoNzcsIEQsIEUsIEEsIEIsIEMpOworCVRfNjBfNzkoNzgsIEMsIEQsIEUsIEEsIEIpOworCVRfNjBfNzkoNzksIEIsIEMsIEQsIEUsIEEpOworCisJY3R4LT5IWzBdICs9IEE7CisJY3R4LT5IWzFdICs9IEI7CisJY3R4LT5IWzJdICs9IEM7CisJY3R4LT5IWzNdICs9IEQ7CisJY3R4LT5IWzRdICs9IEU7Cit9CisKK3ZvaWQgYmxrX1NIQTFfSW5pdChibGtfU0hBX0NUWCAqY3R4KQoreworCWN0eC0+c2l6ZSA9IDA7CisKKwkvKiBJbml0aWFsaXplIEggd2l0aCB0aGUgbWFnaWMgY29uc3RhbnRzIChzZWUgRklQUzE4MCBmb3IgY29uc3RhbnRzKSAqLworCWN0eC0+SFswXSA9IDB4Njc0NTIzMDE7CisJY3R4LT5IWzFdID0gMHhlZmNkYWI4OTsKKwljdHgtPkhbMl0gPSAweDk4YmFkY2ZlOworCWN0eC0+SFszXSA9IDB4MTAzMjU0NzY7CisJY3R4LT5IWzRdID0gMHhjM2QyZTFmMDsKK30KKwordm9pZCBibGtfU0hBMV9VcGRhdGUoYmxrX1NIQV9DVFggKmN0eCwgY29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJaW50IGxlblcgPSBjdHgtPnNpemUgJiA2MzsKKworCWN0eC0+c2l6ZSArPSBsZW47CisKKwkvKiBSZWFkIHRoZSBkYXRhIGludG8gVyBhbmQgcHJvY2VzcyBibG9ja3MgYXMgdGhleSBnZXQgZnVsbCAqLworCWlmIChsZW5XKSB7CisJCWludCBsZWZ0ID0gNjQgLSBsZW5XOworCQlpZiAobGVuIDwgbGVmdCkKKwkJCWxlZnQgPSBsZW47CisJCW1lbWNweShsZW5XICsgKGNoYXIgKiljdHgtPlcsIGRhdGEsIGxlZnQpOworCQlsZW5XID0gKGxlblcgKyBsZWZ0KSAmIDYzOworCQlsZW4gLT0gbGVmdDsKKwkJZGF0YSA9ICgoY29uc3QgY2hhciAqKWRhdGEgKyBsZWZ0KTsKKwkJaWYgKGxlblcpCisJCQlyZXR1cm47CisJCWJsa19TSEExX0Jsb2NrKGN0eCwgY3R4LT5XKTsKKwl9CisJd2hpbGUgKGxlbiA+PSA2NCkgeworCQlibGtfU0hBMV9CbG9jayhjdHgsIGRhdGEpOworCQlkYXRhID0gKChjb25zdCBjaGFyICopZGF0YSArIDY0KTsKKwkJbGVuIC09IDY0OworCX0KKwlpZiAobGVuKQorCQltZW1jcHkoY3R4LT5XLCBkYXRhLCBsZW4pOworfQorCit2b2lkIGJsa19TSEExX0ZpbmFsKHVuc2lnbmVkIGNoYXIgaGFzaG91dFsyMF0sIGJsa19TSEFfQ1RYICpjdHgpCit7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGFkWzY0XSA9IHsgMHg4MCB9OworCXVuc2lnbmVkIGludCBwYWRsZW5bMl07CisJaW50IGk7CisKKwkvKiBQYWQgd2l0aCBhIGJpbmFyeSAxIChpZSAweDgwKSwgdGhlbiB6ZXJvZXMsIHRoZW4gbGVuZ3RoICovCisJcGFkbGVuWzBdID0gaHRvbmwoY3R4LT5zaXplID4+IDI5KTsKKwlwYWRsZW5bMV0gPSBodG9ubChjdHgtPnNpemUgPDwgMyk7CisKKwlpID0gY3R4LT5zaXplICYgNjM7CisJYmxrX1NIQTFfVXBkYXRlKGN0eCwgcGFkLCAxKyAoNjMgJiAoNTUgLSBpKSkpOworCWJsa19TSEExX1VwZGF0ZShjdHgsIHBhZGxlbiwgOCk7CisKKwkvKiBPdXRwdXQgaGFzaCAqLworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJCXB1dF9iZTMyKGhhc2hvdXQgKyBpKjQsIGN0eC0+SFtpXSk7Cit9CmRpZmYgLS1naXQgYS9ibG9jay1zaGExL3NoYTEuaCBiL2Jsb2NrLXNoYTEvc2hhMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NjRkZjYKLS0tIC9kZXYvbnVsbAorKysgYi9ibG9jay1zaGExL3NoYTEuaApAQCAtMCwwICsxLDIyIEBACisvKgorICogU0hBMSByb3V0aW5lIG9wdGltaXplZCB0byBkbyB3b3JkIGFjY2Vzc2VzIHJhdGhlciB0aGFuIGJ5dGUgYWNjZXNzZXMsCisgKiBhbmQgdG8gYXZvaWQgdW5uZWNlc3NhcnkgY29waWVzIGludG8gdGhlIGNvbnRleHQgYXJyYXkuCisgKgorICogVGhpcyB3YXMgaW5pdGlhbGx5IGJhc2VkIG9uIHRoZSBNb3ppbGxhIFNIQTEgaW1wbGVtZW50YXRpb24sIGFsdGhvdWdoCisgKiBub25lIG9mIHRoZSBvcmlnaW5hbCBNb3ppbGxhIGNvZGUgcmVtYWlucy4KKyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBsb25nIHNpemU7CisJdW5zaWduZWQgaW50IEhbNV07CisJdW5zaWduZWQgaW50IFdbMTZdOworfSBibGtfU0hBX0NUWDsKKwordm9pZCBibGtfU0hBMV9Jbml0KGJsa19TSEFfQ1RYICpjdHgpOwordm9pZCBibGtfU0hBMV9VcGRhdGUoYmxrX1NIQV9DVFggKmN0eCwgY29uc3Qgdm9pZCAqZGF0YUluLCB1bnNpZ25lZCBsb25nIGxlbik7Cit2b2lkIGJsa19TSEExX0ZpbmFsKHVuc2lnbmVkIGNoYXIgaGFzaG91dFsyMF0sIGJsa19TSEFfQ1RYICpjdHgpOworCisjZGVmaW5lIGdpdF9TSEFfQ1RYCWJsa19TSEFfQ1RYCisjZGVmaW5lIGdpdF9TSEExX0luaXQJYmxrX1NIQTFfSW5pdAorI2RlZmluZSBnaXRfU0hBMV9VcGRhdGUJYmxrX1NIQTFfVXBkYXRlCisjZGVmaW5lIGdpdF9TSEExX0ZpbmFsCWJsa19TSEExX0ZpbmFsCmRpZmYgLS1naXQgYS9icmFuY2guYyBiL2JyYW5jaC5jCmluZGV4IDYyMDMwYWYuLjllMWY2M2UgMTAwNjQ0Ci0tLSBhL2JyYW5jaC5jCisrKyBiL2JyYW5jaC5jCkBAIC00OSw5ICs0OSwxOSBAQAogCiB2b2lkIGluc3RhbGxfYnJhbmNoX2NvbmZpZyhpbnQgZmxhZywgY29uc3QgY2hhciAqbG9jYWwsIGNvbnN0IGNoYXIgKm9yaWdpbiwgY29uc3QgY2hhciAqcmVtb3RlKQogeworCWNvbnN0IGNoYXIgKnNob3J0bmFtZSA9IHJlbW90ZSArIDExOworCWludCByZW1vdGVfaXNfYnJhbmNoID0gIXByZWZpeGNtcChyZW1vdGUsICJyZWZzL2hlYWRzLyIpOwogCXN0cnVjdCBzdHJidWYga2V5ID0gU1RSQlVGX0lOSVQ7CiAJaW50IHJlYmFzaW5nID0gc2hvdWxkX3NldHVwX3JlYmFzZShvcmlnaW4pOwogCisJaWYgKHJlbW90ZV9pc19icmFuY2gKKwkgICAgJiYgIXN0cmNtcChsb2NhbCwgc2hvcnRuYW1lKQorCSAgICAmJiAhb3JpZ2luKSB7CisJCXdhcm5pbmcoIk5vdCBzZXR0aW5nIGJyYW5jaCAlcyBhcyBpdHMgb3duIHVwc3RyZWFtLiIsCisJCQlsb2NhbCk7CisJCXJldHVybjsKKwl9CisKIAlzdHJidWZfYWRkZigma2V5LCAiYnJhbmNoLiVzLnJlbW90ZSIsIGxvY2FsKTsKIAlnaXRfY29uZmlnX3NldChrZXkuYnVmLCBvcmlnaW4gPyBvcmlnaW4gOiAiLiIpOwogCkBAIC03MSw4ICs4MSw4IEBACiAJCXN0cmJ1Zl9hZGRzdHIoJmtleSwgb3JpZ2luID8gInJlbW90ZSIgOiAibG9jYWwiKTsKIAogCQkvKiBBcmUgd2UgdHJhY2tpbmcgYSBwcm9wZXIgImJyYW5jaCI/ICovCi0JCWlmICghcHJlZml4Y21wKHJlbW90ZSwgInJlZnMvaGVhZHMvIikpIHsKLQkJCXN0cmJ1Zl9hZGRmKCZrZXksICIgYnJhbmNoICVzIiwgcmVtb3RlICsgMTEpOworCQlpZiAocmVtb3RlX2lzX2JyYW5jaCkgeworCQkJc3RyYnVmX2FkZGYoJmtleSwgIiBicmFuY2ggJXMiLCBzaG9ydG5hbWUpOwogCQkJaWYgKG9yaWdpbikKIAkJCQlzdHJidWZfYWRkZigma2V5LCAiIGZyb20gJXMiLCBvcmlnaW4pOwogCQl9CkBAIC0xMDgsNiArMTE4LDcgQEAKIAkJc3dpdGNoICh0cmFjaykgewogCQljYXNlIEJSQU5DSF9UUkFDS19BTFdBWVM6CiAJCWNhc2UgQlJBTkNIX1RSQUNLX0VYUExJQ0lUOgorCQljYXNlIEJSQU5DSF9UUkFDS19PVkVSUklERToKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIDE7CkBAIC0xMjgsMTggKzEzOSwyNSBAQAogCQkgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzdGFydF9uYW1lLAogCQkgICBpbnQgZm9yY2UsIGludCByZWZsb2csIGVudW0gYnJhbmNoX3RyYWNrIHRyYWNrKQogewotCXN0cnVjdCByZWZfbG9jayAqbG9jazsKKwlzdHJ1Y3QgcmVmX2xvY2sgKmxvY2sgPSBOVUxMOwogCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKIAl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwogCWNoYXIgKnJlYWxfcmVmLCBtc2dbUEFUSF9NQVggKyAyMF07CiAJc3RydWN0IHN0cmJ1ZiByZWYgPSBTVFJCVUZfSU5JVDsKIAlpbnQgZm9yY2luZyA9IDA7CisJaW50IGRvbnRfY2hhbmdlX3JlZiA9IDA7CisJaW50IGV4cGxpY2l0X3RyYWNraW5nID0gMDsKKworCWlmICh0cmFjayA9PSBCUkFOQ0hfVFJBQ0tfRVhQTElDSVQgfHwgdHJhY2sgPT0gQlJBTkNIX1RSQUNLX09WRVJSSURFKQorCQlleHBsaWNpdF90cmFja2luZyA9IDE7CiAKIAlpZiAoc3RyYnVmX2NoZWNrX2JyYW5jaF9yZWYoJnJlZiwgbmFtZSkpCiAJCWRpZSgiJyVzJyBpcyBub3QgYSB2YWxpZCBicmFuY2ggbmFtZS4iLCBuYW1lKTsKIAogCWlmIChyZXNvbHZlX3JlZihyZWYuYnVmLCBzaGExLCAxLCBOVUxMKSkgewotCQlpZiAoIWZvcmNlKQorCQlpZiAoIWZvcmNlICYmIHRyYWNrID09IEJSQU5DSF9UUkFDS19PVkVSUklERSkKKwkJCWRvbnRfY2hhbmdlX3JlZiA9IDE7CisJCWVsc2UgaWYgKCFmb3JjZSkKIAkJCWRpZSgiQSBicmFuY2ggbmFtZWQgJyVzJyBhbHJlYWR5IGV4aXN0cy4iLCBuYW1lKTsKIAkJZWxzZSBpZiAoIWlzX2JhcmVfcmVwb3NpdG9yeSgpICYmICFzdHJjbXAoaGVhZCwgbmFtZSkpCiAJCQlkaWUoIkNhbm5vdCBmb3JjZSB1cGRhdGUgdGhlIGN1cnJlbnQgYnJhbmNoLiIpOwpAQCAtMTUzLDEyICsxNzEsMTIgQEAKIAlzd2l0Y2ggKGR3aW1fcmVmKHN0YXJ0X25hbWUsIHN0cmxlbihzdGFydF9uYW1lKSwgc2hhMSwgJnJlYWxfcmVmKSkgewogCWNhc2UgMDoKIAkJLyogTm90IGJyYW5jaGluZyBmcm9tIGFueSBleGlzdGluZyBicmFuY2ggKi8KLQkJaWYgKHRyYWNrID09IEJSQU5DSF9UUkFDS19FWFBMSUNJVCkKKwkJaWYgKGV4cGxpY2l0X3RyYWNraW5nKQogCQkJZGllKCJDYW5ub3Qgc2V0dXAgdHJhY2tpbmcgaW5mb3JtYXRpb247IHN0YXJ0aW5nIHBvaW50IGlzIG5vdCBhIGJyYW5jaC4iKTsKIAkJYnJlYWs7CiAJY2FzZSAxOgogCQkvKiBVbmlxdWUgY29tcGxldGlvbiAtLSBnb29kLCBvbmx5IGlmIGl0IGlzIGEgcmVhbCByZWYgKi8KLQkJaWYgKHRyYWNrID09IEJSQU5DSF9UUkFDS19FWFBMSUNJVCAmJiAhc3RyY21wKHJlYWxfcmVmLCAiSEVBRCIpKQorCQlpZiAoZXhwbGljaXRfdHJhY2tpbmcgJiYgIXN0cmNtcChyZWFsX3JlZiwgIkhFQUQiKSkKIAkJCWRpZSgiQ2Fubm90IHNldHVwIHRyYWNraW5nIGluZm9ybWF0aW9uOyBzdGFydGluZyBwb2ludCBpcyBub3QgYSBicmFuY2guIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xNzAsOSArMTg4LDExIEBACiAJCWRpZSgiTm90IGEgdmFsaWQgYnJhbmNoIHBvaW50OiAnJXMnLiIsIHN0YXJ0X25hbWUpOwogCWhhc2hjcHkoc2hhMSwgY29tbWl0LT5vYmplY3Quc2hhMSk7CiAKLQlsb2NrID0gbG9ja19hbnlfcmVmX2Zvcl91cGRhdGUocmVmLmJ1ZiwgTlVMTCwgMCk7Ci0JaWYgKCFsb2NrKQotCQlkaWUoIkZhaWxlZCB0byBsb2NrIHJlZiBmb3IgdXBkYXRlOiAlcy4iLCBzdHJlcnJvcihlcnJubykpOworCWlmICghZG9udF9jaGFuZ2VfcmVmKSB7CisJCWxvY2sgPSBsb2NrX2FueV9yZWZfZm9yX3VwZGF0ZShyZWYuYnVmLCBOVUxMLCAwKTsKKwkJaWYgKCFsb2NrKQorCQkJZGllX2Vycm5vKCJGYWlsZWQgdG8gbG9jayByZWYgZm9yIHVwZGF0ZSIpOworCX0KIAogCWlmIChyZWZsb2cpCiAJCWxvZ19hbGxfcmVmX3VwZGF0ZXMgPSAxOwpAQCAtMTgwLDE1ICsyMDAsMTYgQEAKIAlpZiAoZm9yY2luZykKIAkJc25wcmludGYobXNnLCBzaXplb2YgbXNnLCAiYnJhbmNoOiBSZXNldCBmcm9tICVzIiwKIAkJCSBzdGFydF9uYW1lKTsKLQllbHNlCisJZWxzZSBpZiAoIWRvbnRfY2hhbmdlX3JlZikKIAkJc25wcmludGYobXNnLCBzaXplb2YgbXNnLCAiYnJhbmNoOiBDcmVhdGVkIGZyb20gJXMiLAogCQkJIHN0YXJ0X25hbWUpOwogCiAJaWYgKHJlYWxfcmVmICYmIHRyYWNrKQogCQlzZXR1cF90cmFja2luZyhuYW1lLCByZWFsX3JlZiwgdHJhY2spOwogCi0JaWYgKHdyaXRlX3JlZl9zaGExKGxvY2ssIHNoYTEsIG1zZykgPCAwKQotCQlkaWUoIkZhaWxlZCB0byB3cml0ZSByZWY6ICVzLiIsIHN0cmVycm9yKGVycm5vKSk7CisJaWYgKCFkb250X2NoYW5nZV9yZWYpCisJCWlmICh3cml0ZV9yZWZfc2hhMShsb2NrLCBzaGExLCBtc2cpIDwgMCkKKwkJCWRpZV9lcnJubygiRmFpbGVkIHRvIHdyaXRlIHJlZiIpOwogCiAJc3RyYnVmX3JlbGVhc2UoJnJlZik7CiAJZnJlZShyZWFsX3JlZik7CmRpZmYgLS1naXQgYS9idWlsdGluLWFkZC5jIGIvYnVpbHRpbi1hZGQuYwppbmRleCBkNmFkNTdiLi44N2QyOTgwIDEwMDY0NAotLS0gYS9idWlsdGluLWFkZC5jCisrKyBiL2J1aWx0aW4tYWRkLmMKQEAgLTEwLDE0ICsxMCw5MiBAQAogI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKICNpbmNsdWRlICJydW4tY29tbWFuZC5oIgogI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fYWRkX3VzYWdlW10gPSB7CiAJImdpdCBhZGQgW29wdGlvbnNdIFstLV0gPGZpbGVwYXR0ZXJuPi4uLiIsCiAJTlVMTAogfTsKLXN0YXRpYyBpbnQgcGF0Y2hfaW50ZXJhY3RpdmUsIGFkZF9pbnRlcmFjdGl2ZTsKK3N0YXRpYyBpbnQgcGF0Y2hfaW50ZXJhY3RpdmUsIGFkZF9pbnRlcmFjdGl2ZSwgZWRpdF9pbnRlcmFjdGl2ZTsKIHN0YXRpYyBpbnQgdGFrZV93b3JrdHJlZV9jaGFuZ2VzOwogCitzdHJ1Y3QgdXBkYXRlX2NhbGxiYWNrX2RhdGEKK3sKKwlpbnQgZmxhZ3M7CisJaW50IGFkZF9lcnJvcnM7Cit9OworCitzdGF0aWMgdm9pZCB1cGRhdGVfY2FsbGJhY2soc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxLAorCQkJICAgIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwgdm9pZCAqY2JkYXRhKQoreworCWludCBpOworCXN0cnVjdCB1cGRhdGVfY2FsbGJhY2tfZGF0YSAqZGF0YSA9IGNiZGF0YTsKKworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gcS0+cXVldWVbaV07CisJCWNvbnN0IGNoYXIgKnBhdGggPSBwLT5vbmUtPnBhdGg7CisJCXN3aXRjaCAocC0+c3RhdHVzKSB7CisJCWRlZmF1bHQ6CisJCQlkaWUoInVuZXhwZWN0ZWQgZGlmZiBzdGF0dXMgJWMiLCBwLT5zdGF0dXMpOworCQljYXNlIERJRkZfU1RBVFVTX1VOTUVSR0VEOgorCQkJLyoKKwkJCSAqIEFERF9DQUNIRV9JR05PUkVfUkVNT1ZBTCBpcyB1bnNldCBpZiAiZ2l0CisJCQkgKiBhZGQgLXUiIGlzIGNhbGxpbmcgdXMsIEluIHN1Y2ggYSBjYXNlLCBhCisJCQkgKiBtaXNzaW5nIHdvcmsgdHJlZSBmaWxlIG5lZWRzIHRvIGJlIHJlbW92ZWQKKwkJCSAqIGlmIHRoZXJlIGlzIGFuIHVubWVyZ2VkIGVudHJ5IGF0IHN0YWdlICMyLAorCQkJICogYnV0IHN1Y2ggYSBkaWZmIHJlY29yZCBpcyBmb2xsb3dlZCBieQorCQkJICogYW5vdGhlciB3aXRoIERJRkZfU1RBVFVTX0RFTEVURUQgKGFuZCBpZgorCQkJICogdGhlcmUgaXMgbm8gc3RhZ2UgIzIsIHdlIHdvbid0IHNlZSBERUxFVEVECisJCQkgKiBub3IgTU9ESUZJRUQpLiAgV2UgY2FuIHNpbXBseSBjb250aW51ZQorCQkJICogZWl0aGVyIHdheS4KKwkJCSAqLworCQkJaWYgKCEoZGF0YS0+ZmxhZ3MgJiBBRERfQ0FDSEVfSUdOT1JFX1JFTU9WQUwpKQorCQkJCWNvbnRpbnVlOworCQkJLyoKKwkJCSAqIE90aGVyd2lzZSwgaXQgaXMgImdpdCBhZGQgcGF0aCIgaXMgYXNraW5nCisJCQkgKiB0byBleHBsaWNpdGx5IGFkZCBpdDsgd2UgZmFsbCB0aHJvdWdoLiAgQQorCQkJICogbWlzc2luZyB3b3JrIHRyZWUgZmlsZSBpcyBhbiBlcnJvciBhbmQgaXMKKwkJCSAqIGNhdWdodCBieSBhZGRfZmlsZV90b19pbmRleCgpIGluIHN1Y2ggYQorCQkJICogY2FzZS4KKwkJCSAqLworCQljYXNlIERJRkZfU1RBVFVTX01PRElGSUVEOgorCQljYXNlIERJRkZfU1RBVFVTX1RZUEVfQ0hBTkdFRDoKKwkJCWlmIChhZGRfZmlsZV90b19pbmRleCgmdGhlX2luZGV4LCBwYXRoLCBkYXRhLT5mbGFncykpIHsKKwkJCQlpZiAoIShkYXRhLT5mbGFncyAmIEFERF9DQUNIRV9JR05PUkVfRVJST1JTKSkKKwkJCQkJZGllKCJ1cGRhdGluZyBmaWxlcyBmYWlsZWQiKTsKKwkJCQlkYXRhLT5hZGRfZXJyb3JzKys7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBESUZGX1NUQVRVU19ERUxFVEVEOgorCQkJaWYgKGRhdGEtPmZsYWdzICYgQUREX0NBQ0hFX0lHTk9SRV9SRU1PVkFMKQorCQkJCWJyZWFrOworCQkJaWYgKCEoZGF0YS0+ZmxhZ3MgJiBBRERfQ0FDSEVfUFJFVEVORCkpCisJCQkJcmVtb3ZlX2ZpbGVfZnJvbV9pbmRleCgmdGhlX2luZGV4LCBwYXRoKTsKKwkJCWlmIChkYXRhLT5mbGFncyAmIChBRERfQ0FDSEVfUFJFVEVORHxBRERfQ0FDSEVfVkVSQk9TRSkpCisJCQkJcHJpbnRmKCJyZW1vdmUgJyVzJ1xuIiwgcGF0aCk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworaW50IGFkZF9maWxlc190b19jYWNoZShjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKipwYXRoc3BlYywgaW50IGZsYWdzKQoreworCXN0cnVjdCB1cGRhdGVfY2FsbGJhY2tfZGF0YSBkYXRhOworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJaW5pdF9yZXZpc2lvbnMoJnJldiwgcHJlZml4KTsKKwlzZXR1cF9yZXZpc2lvbnMoMCwgTlVMTCwgJnJldiwgTlVMTCk7CisJcmV2LnBydW5lX2RhdGEgPSBwYXRoc3BlYzsKKwlyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfQ0FMTEJBQ0s7CisJcmV2LmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrID0gdXBkYXRlX2NhbGxiYWNrOworCWRhdGEuZmxhZ3MgPSBmbGFnczsKKwlkYXRhLmFkZF9lcnJvcnMgPSAwOworCXJldi5kaWZmb3B0LmZvcm1hdF9jYWxsYmFja19kYXRhID0gJmRhdGE7CisJcnVuX2RpZmZfZmlsZXMoJnJldiwgRElGRl9SQUNZX0lTX01PRElGSUVEKTsKKwlyZXR1cm4gISFkYXRhLmFkZF9lcnJvcnM7Cit9CisKIHN0YXRpYyB2b2lkIGZpbGxfcGF0aHNwZWNfbWF0Y2hlcyhjb25zdCBjaGFyICoqcGF0aHNwZWMsIGNoYXIgKnNlZW4sIGludCBzcGVjcykKIHsKIAlpbnQgbnVtX3VubWF0Y2hlZCA9IDAsIGk7CkBAIC0zOSw3ICsxMTcsMTkgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHBydW5lX2RpcmVjdG9yeShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBjb25zdCBjaGFyICoqcGF0aHNwZWMsIGludCBwcmVmaXgpCitzdGF0aWMgY2hhciAqZmluZF91c2VkX3BhdGhzcGVjKGNvbnN0IGNoYXIgKipwYXRoc3BlYykKK3sKKwljaGFyICpzZWVuOworCWludCBpOworCisJZm9yIChpID0gMDsgcGF0aHNwZWNbaV07ICBpKyspCisJCTsgLyoganVzdCBjb3VudGluZyAqLworCXNlZW4gPSB4Y2FsbG9jKGksIDEpOworCWZpbGxfcGF0aHNwZWNfbWF0Y2hlcyhwYXRoc3BlYywgc2VlbiwgaSk7CisJcmV0dXJuIHNlZW47Cit9CisKK3N0YXRpYyBjaGFyICpwcnVuZV9kaXJlY3Rvcnkoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgY29uc3QgY2hhciAqKnBhdGhzcGVjLCBpbnQgcHJlZml4KQogewogCWNoYXIgKnNlZW47CiAJaW50IGksIHNwZWNzOwpAQCAtNTksMTMgKzE0OSw3IEBACiAJfQogCWRpci0+bnIgPSBkc3QgLSBkaXItPmVudHJpZXM7CiAJZmlsbF9wYXRoc3BlY19tYXRjaGVzKHBhdGhzcGVjLCBzZWVuLCBzcGVjcyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc3BlY3M7IGkrKykgewotCQlpZiAoIXNlZW5baV0gJiYgcGF0aHNwZWNbaV1bMF0gJiYgIWZpbGVfZXhpc3RzKHBhdGhzcGVjW2ldKSkKLQkJCWRpZSgicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlcyIsCi0JCQkJCXBhdGhzcGVjW2ldKTsKLQl9Ci0gICAgICAgIGZyZWUoc2Vlbik7CisJcmV0dXJuIHNlZW47CiB9CiAKIHN0YXRpYyB2b2lkIHRyZWF0X2dpdGxpbmtzKGNvbnN0IGNoYXIgKipwYXRoc3BlYykKQEAgLTk1LDM1ICsxNzksNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgZmlsbF9kaXJlY3Rvcnkoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgY29uc3QgY2hhciAqKnBhdGhzcGVjLAotCQlpbnQgaWdub3JlZF90b28pCi17Ci0JY29uc3QgY2hhciAqcGF0aCwgKmJhc2U7Ci0JaW50IGJhc2VsZW47Ci0KLQkvKiBTZXQgdXAgdGhlIGRlZmF1bHQgZ2l0IHBvcmNlbGFpbiBleGNsdWRlcyAqLwotCW1lbXNldChkaXIsIDAsIHNpemVvZigqZGlyKSk7Ci0JaWYgKCFpZ25vcmVkX3RvbykgewotCQlkaXItPmZsYWdzIHw9IERJUl9DT0xMRUNUX0lHTk9SRUQ7Ci0JCXNldHVwX3N0YW5kYXJkX2V4Y2x1ZGVzKGRpcik7Ci0JfQotCi0JLyoKLQkgKiBDYWxjdWxhdGUgY29tbW9uIHByZWZpeCBmb3IgdGhlIHBhdGhzcGVjLCBhbmQKLQkgKiB1c2UgdGhhdCB0byBvcHRpbWl6ZSB0aGUgZGlyZWN0b3J5IHdhbGsKLQkgKi8KLQliYXNlbGVuID0gY29tbW9uX3ByZWZpeChwYXRoc3BlYyk7Ci0JcGF0aCA9ICIuIjsKLQliYXNlID0gIiI7Ci0JaWYgKGJhc2VsZW4pCi0JCXBhdGggPSBiYXNlID0geG1lbWR1cHooKnBhdGhzcGVjLCBiYXNlbGVuKTsKLQotCS8qIFJlYWQgdGhlIGRpcmVjdG9yeSBhbmQgcHJ1bmUgaXQgKi8KLQlyZWFkX2RpcmVjdG9yeShkaXIsIHBhdGgsIGJhc2UsIGJhc2VsZW4sIHBhdGhzcGVjKTsKLQlpZiAocGF0aHNwZWMpCi0JCXBydW5lX2RpcmVjdG9yeShkaXIsIHBhdGhzcGVjLCBiYXNlbGVuKTsKLX0KLQogc3RhdGljIHZvaWQgcmVmcmVzaChpbnQgdmVyYm9zZSwgY29uc3QgY2hhciAqKnBhdGhzcGVjKQogewogCWNoYXIgKnNlZW47CkBAIC0xMzIsOCArMTg3LDggQEAKIAlmb3IgKHNwZWNzID0gMDsgcGF0aHNwZWNbc3BlY3NdOyAgc3BlY3MrKykKIAkJLyogbm90aGluZyAqLzsKIAlzZWVuID0geGNhbGxvYyhzcGVjcywgMSk7Ci0JcmVmcmVzaF9pbmRleCgmdGhlX2luZGV4LCB2ZXJib3NlID8gUkVGUkVTSF9TQVlfQ0hBTkdFRCA6IFJFRlJFU0hfUVVJRVQsCi0JCSAgICAgIHBhdGhzcGVjLCBzZWVuKTsKKwlyZWZyZXNoX2luZGV4KCZ0aGVfaW5kZXgsIHZlcmJvc2UgPyBSRUZSRVNIX0lOX1BPUkNFTEFJTiA6IFJFRlJFU0hfUVVJRVQsCisJCSAgICAgIHBhdGhzcGVjLCBzZWVuLCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZWZyZXNoaW5nIHRoZSBpbmRleDoiKTsKIAlmb3IgKGkgPSAwOyBpIDwgc3BlY3M7IGkrKykgewogCQlpZiAoIXNlZW5baV0pCiAJCQlkaWUoInBhdGhzcGVjICclcycgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZXMiLCBwYXRoc3BlY1tpXSk7CkBAIC0xNTgsMTAgKzIxMywzNyBAQAogCXJldHVybiBwYXRoc3BlYzsKIH0KIAoraW50IHJ1bl9hZGRfaW50ZXJhY3RpdmUoY29uc3QgY2hhciAqcmV2aXNpb24sIGNvbnN0IGNoYXIgKnBhdGNoX21vZGUsCisJCQljb25zdCBjaGFyICoqcGF0aHNwZWMpCit7CisJaW50IHN0YXR1cywgYWMsIHBjID0gMDsKKwljb25zdCBjaGFyICoqYXJnczsKKworCWlmIChwYXRoc3BlYykKKwkJd2hpbGUgKHBhdGhzcGVjW3BjXSkKKwkJCXBjKys7CisKKwlhcmdzID0geGNhbGxvYyhzaXplb2YoY29uc3QgY2hhciAqKSwgKHBjICsgNSkpOworCWFjID0gMDsKKwlhcmdzW2FjKytdID0gImFkZC0taW50ZXJhY3RpdmUiOworCWlmIChwYXRjaF9tb2RlKQorCQlhcmdzW2FjKytdID0gcGF0Y2hfbW9kZTsKKwlpZiAocmV2aXNpb24pCisJCWFyZ3NbYWMrK10gPSByZXZpc2lvbjsKKwlhcmdzW2FjKytdID0gIi0tIjsKKwlpZiAocGMpIHsKKwkJbWVtY3B5KCYoYXJnc1thY10pLCBwYXRoc3BlYywgc2l6ZW9mKGNvbnN0IGNoYXIgKikgKiBwYyk7CisJCWFjICs9IHBjOworCX0KKwlhcmdzW2FjXSA9IE5VTEw7CisKKwlzdGF0dXMgPSBydW5fY29tbWFuZF92X29wdChhcmdzLCBSVU5fR0lUX0NNRCk7CisJZnJlZShhcmdzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCiBpbnQgaW50ZXJhY3RpdmVfYWRkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQogewotCWludCBzdGF0dXMsIGFjOwotCWNvbnN0IGNoYXIgKiphcmdzOwogCWNvbnN0IGNoYXIgKipwYXRoc3BlYyA9IE5VTEw7CiAKIAlpZiAoYXJnYykgewpAQCAtMTcwLDIxICsyNTIsNTQgQEAKIAkJCXJldHVybiAtMTsKIAl9CiAKLQlhcmdzID0geGNhbGxvYyhzaXplb2YoY29uc3QgY2hhciAqKSwgKGFyZ2MgKyA0KSk7Ci0JYWMgPSAwOwotCWFyZ3NbYWMrK10gPSAiYWRkLS1pbnRlcmFjdGl2ZSI7Ci0JaWYgKHBhdGNoX2ludGVyYWN0aXZlKQotCQlhcmdzW2FjKytdID0gIi0tcGF0Y2giOwotCWFyZ3NbYWMrK10gPSAiLS0iOwotCWlmIChhcmdjKSB7Ci0JCW1lbWNweSgmKGFyZ3NbYWNdKSwgcGF0aHNwZWMsIHNpemVvZihjb25zdCBjaGFyICopICogYXJnYyk7Ci0JCWFjICs9IGFyZ2M7Ci0JfQotCWFyZ3NbYWNdID0gTlVMTDsKKwlyZXR1cm4gcnVuX2FkZF9pbnRlcmFjdGl2ZShOVUxMLAorCQkJCSAgIHBhdGNoX2ludGVyYWN0aXZlID8gIi0tcGF0Y2giIDogTlVMTCwKKwkJCQkgICBwYXRoc3BlYyk7Cit9CiAKLQlzdGF0dXMgPSBydW5fY29tbWFuZF92X29wdChhcmdzLCBSVU5fR0lUX0NNRCk7Ci0JZnJlZShhcmdzKTsKLQlyZXR1cm4gc3RhdHVzOworc3RhdGljIGludCBlZGl0X3BhdGNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNoYXIgKmZpbGUgPSB4c3RyZHVwKGdpdF9wYXRoKCJBRERfRURJVC5wYXRjaCIpKTsKKwljb25zdCBjaGFyICphcHBseV9hcmd2W10gPSB7ICJhcHBseSIsICItLXJlY291bnQiLCAiLS1jYWNoZWQiLAorCQlmaWxlLCBOVUxMIH07CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY2hpbGQ7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKwlpbnQgb3V0OworCXN0cnVjdCBzdGF0IHN0OworCisJZ2l0X2NvbmZpZyhnaXRfZGlmZl9iYXNpY19jb25maWcsIE5VTEwpOyAvKiBubyAiZGlmZiIgVUkgb3B0aW9ucyAqLworCisJaWYgKHJlYWRfY2FjaGUoKSA8IDApCisJCWRpZSAoIkNvdWxkIG5vdCByZWFkIHRoZSBpbmRleCIpOworCisJaW5pdF9yZXZpc2lvbnMoJnJldiwgcHJlZml4KTsKKwlyZXYuZGlmZm9wdC5jb250ZXh0ID0gNzsKKworCWFyZ2MgPSBzZXR1cF9yZXZpc2lvbnMoYXJnYywgYXJndiwgJnJldiwgTlVMTCk7CisJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX1BBVENIOworCW91dCA9IG9wZW4oZmlsZSwgT19DUkVBVCB8IE9fV1JPTkxZLCAwNjQ0KTsKKwlpZiAob3V0IDwgMCkKKwkJZGllICgiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZy4iLCBmaWxlKTsKKwlyZXYuZGlmZm9wdC5maWxlID0geGZkb3BlbihvdXQsICJ3Iik7CisJcmV2LmRpZmZvcHQuY2xvc2VfZmlsZSA9IDE7CisJaWYgKHJ1bl9kaWZmX2ZpbGVzKCZyZXYsIDApKQorCQlkaWUgKCJDb3VsZCBub3Qgd3JpdGUgcGF0Y2giKTsKKworCWxhdW5jaF9lZGl0b3IoZmlsZSwgTlVMTCwgTlVMTCk7CisKKwlpZiAoc3RhdChmaWxlLCAmc3QpKQorCQlkaWVfZXJybm8oIkNvdWxkIG5vdCBzdGF0ICclcyciLCBmaWxlKTsKKwlpZiAoIXN0LnN0X3NpemUpCisJCWRpZSgiRW1wdHkgcGF0Y2guIEFib3J0ZWQuIik7CisKKwltZW1zZXQoJmNoaWxkLCAwLCBzaXplb2YoY2hpbGQpKTsKKwljaGlsZC5naXRfY21kID0gMTsKKwljaGlsZC5hcmd2ID0gYXBwbHlfYXJndjsKKwlpZiAocnVuX2NvbW1hbmQoJmNoaWxkKSkKKwkJZGllICgiQ291bGQgbm90IGFwcGx5ICclcyciLCBmaWxlKTsKKworCXVubGluayhmaWxlKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgbG9ja19maWxlOwpAQCAtMjAxLDYgKzMxNiw3IEBACiAJT1BUX0dST1VQKCIiKSwKIAlPUFRfQk9PTEVBTignaScsICJpbnRlcmFjdGl2ZSIsICZhZGRfaW50ZXJhY3RpdmUsICJpbnRlcmFjdGl2ZSBwaWNraW5nIiksCiAJT1BUX0JPT0xFQU4oJ3AnLCAicGF0Y2giLCAmcGF0Y2hfaW50ZXJhY3RpdmUsICJpbnRlcmFjdGl2ZSBwYXRjaGluZyIpLAorCU9QVF9CT09MRUFOKCdlJywgImVkaXQiLCAmZWRpdF9pbnRlcmFjdGl2ZSwgImVkaXQgY3VycmVudCBkaWZmIGFuZCBhcHBseSIpLAogCU9QVF9CT09MRUFOKCdmJywgImZvcmNlIiwgJmlnbm9yZWRfdG9vLCAiYWxsb3cgYWRkaW5nIG90aGVyd2lzZSBpZ25vcmVkIGZpbGVzIiksCiAJT1BUX0JPT0xFQU4oJ3UnLCAidXBkYXRlIiwgJnRha2Vfd29ya3RyZWVfY2hhbmdlcywgInVwZGF0ZSB0cmFja2VkIGZpbGVzIiksCiAJT1BUX0JPT0xFQU4oJ04nLCAiaW50ZW50LXRvLWFkZCIsICZpbnRlbnRfdG9fYWRkLCAicmVjb3JkIG9ubHkgdGhlIGZhY3QgdGhhdCB0aGUgcGF0aCB3aWxsIGJlIGFkZGVkIGxhdGVyIiksCkBAIC0yNDksMTUgKzM2NSwyMSBAQAogCWludCBmbGFnczsKIAlpbnQgYWRkX25ld19maWxlczsKIAlpbnQgcmVxdWlyZV9wYXRoc3BlYzsKKwljaGFyICpzZWVuID0gTlVMTDsKIAogCWdpdF9jb25maWcoYWRkX2NvbmZpZywgTlVMTCk7CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBidWlsdGluX2FkZF9vcHRpb25zLAotCQkJICBidWlsdGluX2FkZF91c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX2FkZF9vcHRpb25zLAorCQkJICBidWlsdGluX2FkZF91c2FnZSwgUEFSU0VfT1BUX0tFRVBfQVJHVjApOwogCWlmIChwYXRjaF9pbnRlcmFjdGl2ZSkKIAkJYWRkX2ludGVyYWN0aXZlID0gMTsKIAlpZiAoYWRkX2ludGVyYWN0aXZlKQotCQlleGl0KGludGVyYWN0aXZlX2FkZChhcmdjLCBhcmd2LCBwcmVmaXgpKTsKKwkJZXhpdChpbnRlcmFjdGl2ZV9hZGQoYXJnYyAtIDEsIGFyZ3YgKyAxLCBwcmVmaXgpKTsKKworCWlmIChlZGl0X2ludGVyYWN0aXZlKQorCQlyZXR1cm4oZWRpdF9wYXRjaChhcmdjLCBhcmd2LCBwcmVmaXgpKTsKKwlhcmdjLS07CisJYXJndisrOwogCiAJaWYgKGFkZHJlbW92ZSAmJiB0YWtlX3dvcmt0cmVlX2NoYW5nZXMpCiAJCWRpZSgiLUEgYW5kIC11IGFyZSBtdXR1YWxseSBpbmNvbXBhdGlibGUiKTsKQEAgLTI5MCwxNSArNDEyLDQwIEBACiAJCWRpZSgiaW5kZXggZmlsZSBjb3JydXB0Iik7CiAJdHJlYXRfZ2l0bGlua3MocGF0aHNwZWMpOwogCi0JaWYgKGFkZF9uZXdfZmlsZXMpCisJaWYgKGFkZF9uZXdfZmlsZXMpIHsKKwkJaW50IGJhc2VsZW47CisKKwkJLyogU2V0IHVwIHRoZSBkZWZhdWx0IGdpdCBwb3JjZWxhaW4gZXhjbHVkZXMgKi8KKwkJbWVtc2V0KCZkaXIsIDAsIHNpemVvZihkaXIpKTsKKwkJaWYgKCFpZ25vcmVkX3RvbykgeworCQkJZGlyLmZsYWdzIHw9IERJUl9DT0xMRUNUX0lHTk9SRUQ7CisJCQlzZXR1cF9zdGFuZGFyZF9leGNsdWRlcygmZGlyKTsKKwkJfQorCiAJCS8qIFRoaXMgcGlja3MgdXAgdGhlIHBhdGhzIHRoYXQgYXJlIG5vdCB0cmFja2VkICovCi0JCWZpbGxfZGlyZWN0b3J5KCZkaXIsIHBhdGhzcGVjLCBpZ25vcmVkX3Rvbyk7CisJCWJhc2VsZW4gPSBmaWxsX2RpcmVjdG9yeSgmZGlyLCBwYXRoc3BlYyk7CisJCWlmIChwYXRoc3BlYykKKwkJCXNlZW4gPSBwcnVuZV9kaXJlY3RvcnkoJmRpciwgcGF0aHNwZWMsIGJhc2VsZW4pOworCX0KIAogCWlmIChyZWZyZXNoX29ubHkpIHsKIAkJcmVmcmVzaCh2ZXJib3NlLCBwYXRoc3BlYyk7CiAJCWdvdG8gZmluaXNoOwogCX0KIAorCWlmIChwYXRoc3BlYykgeworCQlpbnQgaTsKKwkJaWYgKCFzZWVuKQorCQkJc2VlbiA9IGZpbmRfdXNlZF9wYXRoc3BlYyhwYXRoc3BlYyk7CisJCWZvciAoaSA9IDA7IHBhdGhzcGVjW2ldOyBpKyspIHsKKwkJCWlmICghc2VlbltpXSAmJiBwYXRoc3BlY1tpXVswXQorCQkJICAgICYmICFmaWxlX2V4aXN0cyhwYXRoc3BlY1tpXSkpCisJCQkJZGllKCJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIiwKKwkJCQkgICAgcGF0aHNwZWNbaV0pOworCQl9CisJCWZyZWUoc2Vlbik7CisJfQorCiAJZXhpdF9zdGF0dXMgfD0gYWRkX2ZpbGVzX3RvX2NhY2hlKHByZWZpeCwgcGF0aHNwZWMsIGZsYWdzKTsKIAogCWlmIChhZGRfbmV3X2ZpbGVzKQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1hcHBseS5jIGIvYnVpbHRpbi1hcHBseS5jCmluZGV4IGE0MGI5ODIuLjdjYTkwNDcgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tYXBwbHkuYworKysgYi9idWlsdGluLWFwcGx5LmMKQEAgLTYxLDYgKzYxLDEzIEBACiBzdGF0aWMgaW50IHdoaXRlc3BhY2VfZXJyb3I7CiBzdGF0aWMgaW50IHNxdWVsY2hfd2hpdGVzcGFjZV9lcnJvcnMgPSA1Owogc3RhdGljIGludCBhcHBsaWVkX2FmdGVyX2ZpeGluZ193czsKKworc3RhdGljIGVudW0gd3NfaWdub3JlIHsKKwlpZ25vcmVfd3Nfbm9uZSwKKwlpZ25vcmVfd3NfY2hhbmdlLAorfSB3c19pZ25vcmVfYWN0aW9uID0gaWdub3JlX3dzX25vbmU7CisKKwogc3RhdGljIGNvbnN0IGNoYXIgKnBhdGNoX2lucHV0X2ZpbGU7CiBzdGF0aWMgY29uc3QgY2hhciAqcm9vdDsKIHN0YXRpYyBpbnQgcm9vdF9sZW47CkBAIC05Nyw2ICsxMDQsMjEgQEAKIAlkaWUoInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIG9wdGlvbiAnJXMnIiwgb3B0aW9uKTsKIH0KIAorc3RhdGljIHZvaWQgcGFyc2VfaWdub3Jld2hpdGVzcGFjZV9vcHRpb24oY29uc3QgY2hhciAqb3B0aW9uKQoreworCWlmICghb3B0aW9uIHx8ICFzdHJjbXAob3B0aW9uLCAibm8iKSB8fAorCSAgICAhc3RyY21wKG9wdGlvbiwgImZhbHNlIikgfHwgIXN0cmNtcChvcHRpb24sICJuZXZlciIpIHx8CisJICAgICFzdHJjbXAob3B0aW9uLCAibm9uZSIpKSB7CisJCXdzX2lnbm9yZV9hY3Rpb24gPSBpZ25vcmVfd3Nfbm9uZTsKKwkJcmV0dXJuOworCX0KKwlpZiAoIXN0cmNtcChvcHRpb24sICJjaGFuZ2UiKSkgeworCQl3c19pZ25vcmVfYWN0aW9uID0gaWdub3JlX3dzX2NoYW5nZTsKKwkJcmV0dXJuOworCX0KKwlkaWUoInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIGlnbm9yZSBvcHRpb24gJyVzJyIsIG9wdGlvbik7Cit9CisKIHN0YXRpYyB2b2lkIHNldF9kZWZhdWx0X3doaXRlc3BhY2VfbW9kZShjb25zdCBjaGFyICp3aGl0ZXNwYWNlX29wdGlvbikKIHsKIAlpZiAoIXdoaXRlc3BhY2Vfb3B0aW9uICYmICFhcHBseV9kZWZhdWx0X3doaXRlc3BhY2UpCkBAIC0xMzEsNiArMTUzLDcgQEAKIAljb25zdCBjaGFyICpwYXRjaDsKIAlpbnQgc2l6ZTsKIAlpbnQgcmVqZWN0ZWQ7CisJaW50IGxpbmVucjsKIAlzdHJ1Y3QgZnJhZ21lbnQgKm5leHQ7CiB9OwogCkBAIC0yMTQsNiArMjM3LDYyIEBACiAJcmV0dXJuIGg7CiB9CiAKKy8qCisgKiBDb21wYXJlIGxpbmVzIHMxIG9mIGxlbmd0aCBuMSBhbmQgczIgb2YgbGVuZ3RoIG4yLCBpZ25vcmluZworICogd2hpdGVzcGFjZSBkaWZmZXJlbmNlLiBSZXR1cm5zIDEgaWYgdGhleSBtYXRjaCwgMCBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCBmdXp6eV9tYXRjaGxpbmVzKGNvbnN0IGNoYXIgKnMxLCBzaXplX3QgbjEsCisJCQkgICAgY29uc3QgY2hhciAqczIsIHNpemVfdCBuMikKK3sKKwljb25zdCBjaGFyICpsYXN0MSA9IHMxICsgbjEgLSAxOworCWNvbnN0IGNoYXIgKmxhc3QyID0gczIgKyBuMiAtIDE7CisJaW50IHJlc3VsdCA9IDA7CisKKwlpZiAobjEgPCAwIHx8IG4yIDwgMCkKKwkJcmV0dXJuIDA7CisKKwkvKiBpZ25vcmUgbGluZSBlbmRpbmdzICovCisJd2hpbGUgKCgqbGFzdDEgPT0gJ1xyJykgfHwgKCpsYXN0MSA9PSAnXG4nKSkKKwkJbGFzdDEtLTsKKwl3aGlsZSAoKCpsYXN0MiA9PSAnXHInKSB8fCAoKmxhc3QyID09ICdcbicpKQorCQlsYXN0Mi0tOworCisJLyogc2tpcCBsZWFkaW5nIHdoaXRlc3BhY2UgKi8KKwl3aGlsZSAoaXNzcGFjZSgqczEpICYmIChzMSA8PSBsYXN0MSkpCisJCXMxKys7CisJd2hpbGUgKGlzc3BhY2UoKnMyKSAmJiAoczIgPD0gbGFzdDIpKQorCQlzMisrOworCS8qIGVhcmx5IHJldHVybiBpZiBib3RoIGxpbmVzIGFyZSBlbXB0eSAqLworCWlmICgoczEgPiBsYXN0MSkgJiYgKHMyID4gbGFzdDIpKQorCQlyZXR1cm4gMTsKKwl3aGlsZSAoIXJlc3VsdCkgeworCQlyZXN1bHQgPSAqczErKyAtICpzMisrOworCQkvKgorCQkgKiBTa2lwIHdoaXRlc3BhY2UgaW5zaWRlLiBXZSBjaGVjayBmb3Igd2hpdGVzcGFjZSBvbgorCQkgKiBib3RoIGJ1ZmZlcnMgYmVjYXVzZSB3ZSBkb24ndCB3YW50ICJhIGIiIHRvIG1hdGNoCisJCSAqICJhYiIKKwkJICovCisJCWlmIChpc3NwYWNlKCpzMSkgJiYgaXNzcGFjZSgqczIpKSB7CisJCQl3aGlsZSAoaXNzcGFjZSgqczEpICYmIHMxIDw9IGxhc3QxKQorCQkJCXMxKys7CisJCQl3aGlsZSAoaXNzcGFjZSgqczIpICYmIHMyIDw9IGxhc3QyKQorCQkJCXMyKys7CisJCX0KKwkJLyoKKwkJICogSWYgd2UgcmVhY2hlZCB0aGUgZW5kIG9uIG9uZSBzaWRlIG9ubHksCisJCSAqIGxpbmVzIGRvbid0IG1hdGNoCisJCSAqLworCQlpZiAoCisJCSAgICAoKHMyID4gbGFzdDIpICYmIChzMSA8PSBsYXN0MSkpIHx8CisJCSAgICAoKHMxID4gbGFzdDEpICYmIChzMiA8PSBsYXN0MikpKQorCQkJcmV0dXJuIDA7CisJCWlmICgoczEgPiBsYXN0MSkgJiYgKHMyID4gbGFzdDIpKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuICFyZXN1bHQ7Cit9CisKIHN0YXRpYyB2b2lkIGFkZF9saW5lX2luZm8oc3RydWN0IGltYWdlICppbWcsIGNvbnN0IGNoYXIgKmJvbCwgc2l6ZV90IGxlbiwgdW5zaWduZWQgZmxhZykKIHsKIAlBTExPQ19HUk9XKGltZy0+bGluZV9hbGxvY2F0ZWQsIGltZy0+bnIgKyAxLCBpbWctPmFsbG9jKTsKQEAgLTI4MCw3ICszNTksNyBAQAogc3RhdGljIHZvaWQgcmVhZF9wYXRjaF9maWxlKHN0cnVjdCBzdHJidWYgKnNiLCBpbnQgZmQpCiB7CiAJaWYgKHN0cmJ1Zl9yZWFkKHNiLCBmZCwgMCkgPCAwKQotCQlkaWUoImdpdCBhcHBseTogcmVhZCByZXR1cm5lZCAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiZ2l0IGFwcGx5OiBmYWlsZWQgdG8gcmVhZCIpOwogCiAJLyoKIAkgKiBNYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIHNvbWUgc2xvcCBpbiB0aGUgYnVmZmVyCkBAIC0zMjAsMTAgKzM5OSwzMCBAQAogCXJldHVybiAxOwogfQogCisvKiByZW1vdmUgZG91YmxlIHNsYXNoZXMgdG8gbWFrZSAtLWluZGV4IHdvcmsgd2l0aCBzdWNoIGZpbGVuYW1lcyAqLworc3RhdGljIGNoYXIgKnNxdWFzaF9zbGFzaChjaGFyICpuYW1lKQoreworCWludCBpID0gMCwgaiA9IDA7CisKKwlpZiAoIW5hbWUpCisJCXJldHVybiBOVUxMOworCisJd2hpbGUgKG5hbWVbaV0pIHsKKwkJaWYgKChuYW1lW2orK10gPSBuYW1lW2krK10pID09ICcvJykKKwkJCXdoaWxlIChuYW1lW2ldID09ICcvJykKKwkJCQlpKys7CisJfQorCW5hbWVbal0gPSAnXDAnOworCXJldHVybiBuYW1lOworfQorCiBzdGF0aWMgY2hhciAqZmluZF9uYW1lKGNvbnN0IGNoYXIgKmxpbmUsIGNoYXIgKmRlZiwgaW50IHBfdmFsdWUsIGludCB0ZXJtaW5hdGUpCiB7CiAJaW50IGxlbjsKLQljb25zdCBjaGFyICpzdGFydCA9IGxpbmU7CisJY29uc3QgY2hhciAqc3RhcnQgPSBOVUxMOworCisJaWYgKHBfdmFsdWUgPT0gMCkKKwkJc3RhcnQgPSBsaW5lOwogCiAJaWYgKCpsaW5lID09ICciJykgewogCQlzdHJ1Y3Qgc3RyYnVmIG5hbWUgPSBTVFJCVUZfSU5JVDsKQEAgLTM0OSw3ICs0NDgsNyBAQAogCQkJCWZyZWUoZGVmKTsKIAkJCQlpZiAocm9vdCkKIAkJCQkJc3RyYnVmX2luc2VydCgmbmFtZSwgMCwgcm9vdCwgcm9vdF9sZW4pOwotCQkJCXJldHVybiBzdHJidWZfZGV0YWNoKCZuYW1lLCBOVUxMKTsKKwkJCQlyZXR1cm4gc3F1YXNoX3NsYXNoKHN0cmJ1Zl9kZXRhY2goJm5hbWUsIE5VTEwpKTsKIAkJCX0KIAkJfQogCQlzdHJidWZfcmVsZWFzZSgmbmFtZSk7CkBAIC0zNjksMTAgKzQ2OCwxMCBAQAogCQkJc3RhcnQgPSBsaW5lOwogCX0KIAlpZiAoIXN0YXJ0KQotCQlyZXR1cm4gZGVmOworCQlyZXR1cm4gc3F1YXNoX3NsYXNoKGRlZik7CiAJbGVuID0gbGluZSAtIHN0YXJ0OwogCWlmICghbGVuKQotCQlyZXR1cm4gZGVmOworCQlyZXR1cm4gc3F1YXNoX3NsYXNoKGRlZik7CiAKIAkvKgogCSAqIEdlbmVyYWxseSB3ZSBwcmVmZXIgdGhlIHNob3J0ZXIgbmFtZSwgZXNwZWNpYWxseQpAQCAtMzgzLDcgKzQ4Miw3IEBACiAJaWYgKGRlZikgewogCQlpbnQgZGVmbGVuID0gc3RybGVuKGRlZik7CiAJCWlmIChkZWZsZW4gPCBsZW4gJiYgIXN0cm5jbXAoc3RhcnQsIGRlZiwgZGVmbGVuKSkKLQkJCXJldHVybiBkZWY7CisJCQlyZXR1cm4gc3F1YXNoX3NsYXNoKGRlZik7CiAJCWZyZWUoZGVmKTsKIAl9CiAKQEAgLTM5MiwxMCArNDkxLDEwIEBACiAJCXN0cmNweShyZXQsIHJvb3QpOwogCQltZW1jcHkocmV0ICsgcm9vdF9sZW4sIHN0YXJ0LCBsZW4pOwogCQlyZXRbcm9vdF9sZW4gKyBsZW5dID0gJ1wwJzsKLQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuIHNxdWFzaF9zbGFzaChyZXQpOwogCX0KIAotCXJldHVybiB4bWVtZHVweihzdGFydCwgbGVuKTsKKwlyZXR1cm4gc3F1YXNoX3NsYXNoKHhtZW1kdXB6KHN0YXJ0LCBsZW4pKTsKIH0KIAogc3RhdGljIGludCBjb3VudF9zbGFzaGVzKGNvbnN0IGNoYXIgKmNwKQpAQCAtNDQ0LDYgKzU0Myw3NiBAQAogfQogCiAvKgorICogRG9lcyB0aGUgLS0tLysrKyBsaW5lIGhhcyB0aGUgUE9TSVggdGltZXN0YW1wIGFmdGVyIHRoZSBsYXN0IEhUPworICogR05VIGRpZmYgcHV0cyBlcG9jaCB0aGVyZSB0byBzaWduYWwgYSBjcmVhdGlvbi9kZWxldGlvbiBldmVudC4gIElzCisgKiB0aGlzIHN1Y2ggYSB0aW1lc3RhbXA/CisgKi8KK3N0YXRpYyBpbnQgaGFzX2Vwb2NoX3RpbWVzdGFtcChjb25zdCBjaGFyICpuYW1lbGluZSkKK3sKKwkvKgorCSAqIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gZXBvY2ggdGltZXN0YW1wOyBhbnkgbm9uLXplcm8KKwkgKiBmcmFjdGlvbiBjYW5ub3QgYmUgb25lLCBoZW5jZSAiKFwuMCspPyIgaW4gdGhlIHJlZ2V4cCBiZWxvdy4KKwkgKiBGb3IgdGhlIHNhbWUgcmVhc29uLCB0aGUgZGF0ZSBtdXN0IGJlIGVpdGhlciAxOTY5LTEyLTMxIG9yCisJICogMTk3MC0wMS0wMSwgYW5kIHRoZSBzZWNvbmRzIHBhcnQgbXVzdCBiZSAiMDAiLgorCSAqLworCWNvbnN0IGNoYXIgc3RhbXBfcmVnZXhwW10gPQorCQkiXigxOTY5LTEyLTMxfDE5NzAtMDEtMDEpIgorCQkiICIKKwkJIlswLTJdWzAtOV06WzAtNV1bMC05XTowMChcXC4wKyk/IgorCQkiICIKKwkJIihbLStdWzAtMl1bMC05XVswLTVdWzAtOV0pXG4iOworCWNvbnN0IGNoYXIgKnRpbWVzdGFtcCA9IE5VTEwsICpjcDsKKwlzdGF0aWMgcmVnZXhfdCAqc3RhbXA7CisJcmVnbWF0Y2hfdCBtWzEwXTsKKwlpbnQgem9uZW9mZnNldDsKKwlpbnQgaG91cm1pbnV0ZTsKKwlpbnQgc3RhdHVzOworCisJZm9yIChjcCA9IG5hbWVsaW5lOyAqY3AgIT0gJ1xuJzsgY3ArKykgeworCQlpZiAoKmNwID09ICdcdCcpCisJCQl0aW1lc3RhbXAgPSBjcCArIDE7CisJfQorCWlmICghdGltZXN0YW1wKQorCQlyZXR1cm4gMDsKKwlpZiAoIXN0YW1wKSB7CisJCXN0YW1wID0geG1hbGxvYyhzaXplb2YoKnN0YW1wKSk7CisJCWlmIChyZWdjb21wKHN0YW1wLCBzdGFtcF9yZWdleHAsIFJFR19FWFRFTkRFRCkpIHsKKwkJCXdhcm5pbmcoIkNhbm5vdCBwcmVwYXJlIHRpbWVzdGFtcCByZWdleHAgJXMiLAorCQkJCXN0YW1wX3JlZ2V4cCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXN0YXR1cyA9IHJlZ2V4ZWMoc3RhbXAsIHRpbWVzdGFtcCwgQVJSQVlfU0laRShtKSwgbSwgMCk7CisJaWYgKHN0YXR1cykgeworCQlpZiAoc3RhdHVzICE9IFJFR19OT01BVENIKQorCQkJd2FybmluZygicmVnZXhlYyByZXR1cm5lZCAlZCBmb3IgaW5wdXQ6ICVzIiwKKwkJCQlzdGF0dXMsIHRpbWVzdGFtcCk7CisJCXJldHVybiAwOworCX0KKworCXpvbmVvZmZzZXQgPSBzdHJ0b2wodGltZXN0YW1wICsgbVszXS5ybV9zbyArIDEsIE5VTEwsIDEwKTsKKwl6b25lb2Zmc2V0ID0gKHpvbmVvZmZzZXQgLyAxMDApICogNjAgKyAoem9uZW9mZnNldCAlIDEwMCk7CisJaWYgKHRpbWVzdGFtcFttWzNdLnJtX3NvXSA9PSAnLScpCisJCXpvbmVvZmZzZXQgPSAtem9uZW9mZnNldDsKKworCS8qCisJICogWVlZWS1NTS1ERCBoaDptbTpzcyBtdXN0IGJlIGZyb20gZWl0aGVyIDE5NjktMTItMzEKKwkgKiAod2VzdCBvZiBHTVQpIG9yIDE5NzAtMDEtMDEgKGVhc3Qgb2YgR01UKQorCSAqLworCWlmICgoem9uZW9mZnNldCA8IDAgJiYgbWVtY21wKHRpbWVzdGFtcCwgIjE5NjktMTItMzEiLCAxMCkpIHx8CisJICAgICgwIDw9IHpvbmVvZmZzZXQgJiYgbWVtY21wKHRpbWVzdGFtcCwgIjE5NzAtMDEtMDEiLCAxMCkpKQorCQlyZXR1cm4gMDsKKworCWhvdXJtaW51dGUgPSAoc3RydG9sKHRpbWVzdGFtcCArIDExLCBOVUxMLCAxMCkgKiA2MCArCisJCSAgICAgIHN0cnRvbCh0aW1lc3RhbXAgKyAxNCwgTlVMTCwgMTApIC0KKwkJICAgICAgem9uZW9mZnNldCk7CisKKwlyZXR1cm4gKCh6b25lb2Zmc2V0IDwgMCAmJiBob3VybWludXRlID09IDE0NDApIHx8CisJCSgwIDw9IHpvbmVvZmZzZXQgJiYgIWhvdXJtaW51dGUpKTsKK30KKworLyoKICAqIEdldCB0aGUgbmFtZSBldGMgaW5mbyBmcm9tIHRoZSAtLS0vKysrIGxpbmVzIG9mIGEgdHJhZGl0aW9uYWwgcGF0Y2ggaGVhZGVyCiAgKgogICogRklYTUUhIFRoZSBlbmQtb2YtZmlsZW5hbWUgaGV1cmlzdGljcyBhcmUga2luZCBvZiBzY3Jld3kuIEZvciBleGlzdGluZwpAQCAtNDc5LDcgKzY0OCwxNyBAQAogCX0gZWxzZSB7CiAJCW5hbWUgPSBmaW5kX25hbWUoZmlyc3QsIE5VTEwsIHBfdmFsdWUsIFRFUk1fU1BBQ0UgfCBURVJNX1RBQik7CiAJCW5hbWUgPSBmaW5kX25hbWUoc2Vjb25kLCBuYW1lLCBwX3ZhbHVlLCBURVJNX1NQQUNFIHwgVEVSTV9UQUIpOwotCQlwYXRjaC0+b2xkX25hbWUgPSBwYXRjaC0+bmV3X25hbWUgPSBuYW1lOworCQlpZiAoaGFzX2Vwb2NoX3RpbWVzdGFtcChmaXJzdCkpIHsKKwkJCXBhdGNoLT5pc19uZXcgPSAxOworCQkJcGF0Y2gtPmlzX2RlbGV0ZSA9IDA7CisJCQlwYXRjaC0+bmV3X25hbWUgPSBuYW1lOworCQl9IGVsc2UgaWYgKGhhc19lcG9jaF90aW1lc3RhbXAoc2Vjb25kKSkgeworCQkJcGF0Y2gtPmlzX25ldyA9IDA7CisJCQlwYXRjaC0+aXNfZGVsZXRlID0gMTsKKwkJCXBhdGNoLT5vbGRfbmFtZSA9IG5hbWU7CisJCX0gZWxzZSB7CisJCQlwYXRjaC0+b2xkX25hbWUgPSBwYXRjaC0+bmV3X25hbWUgPSBuYW1lOworCQl9CiAJfQogCWlmICghbmFtZSkKIAkJZGllKCJ1bmFibGUgdG8gZmluZCBmaWxlbmFtZSBpbiBwYXRjaCBhdCBsaW5lICVkIiwgbGluZW5yKTsKQEAgLTUxMyw3ICs2OTIsNyBAQAogCQlpZiAoaXNudWxsKQogCQkJZGllKCJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCwgZ290ICVzIG9uIGxpbmUgJWQiLCBuYW1lLCBsaW5lbnIpOwogCQlhbm90aGVyID0gZmluZF9uYW1lKGxpbmUsIE5VTEwsIHBfdmFsdWUsIFRFUk1fVEFCKTsKLQkJaWYgKCFhbm90aGVyIHx8IG1lbWNtcChhbm90aGVyLCBuYW1lLCBsZW4pKQorCQlpZiAoIWFub3RoZXIgfHwgbWVtY21wKGFub3RoZXIsIG5hbWUsIGxlbiArIDEpKQogCQkJZGllKCJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCAlcyBmaWxlbmFtZSBvbiBsaW5lICVkIiwgb2xkbmV3LCBsaW5lbnIpOwogCQlmcmVlKGFub3RoZXIpOwogCQlyZXR1cm4gb3JpZ19uYW1lOwpAQCAtNjUwLDEyICs4MjksMTMgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN0b3BfYXRfc2xhc2goY29uc3QgY2hhciAqbGluZSwgaW50IGxsZW4pCiB7CisJaW50IG5zbGFzaCA9IHBfdmFsdWU7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbGxlbjsgaSsrKSB7CiAJCWludCBjaCA9IGxpbmVbaV07Ci0JCWlmIChjaCA9PSAnLycpCi0JCQlyZXR1cm4gbGluZSArIGk7CisJCWlmIChjaCA9PSAnLycgJiYgLS1uc2xhc2ggPD0gMCkKKwkJCXJldHVybiAmbGluZVtpXTsKIAl9CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0xMDI1LDcgKzEyMDUsOCBAQAogCQkJCWNvbnRpbnVlOwogCQkJaWYgKCFwYXRjaC0+b2xkX25hbWUgJiYgIXBhdGNoLT5uZXdfbmFtZSkgewogCQkJCWlmICghcGF0Y2gtPmRlZl9uYW1lKQotCQkJCQlkaWUoImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiAobGluZSAlZCkiLCBsaW5lbnIpOworCQkJCQlkaWUoImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICIKKwkJCQkJICAgICIlZCBsZWFkaW5nIHBhdGhuYW1lIGNvbXBvbmVudHMgKGxpbmUgJWQpIiAsIHBfdmFsdWUsIGxpbmVucik7CiAJCQkJcGF0Y2gtPm9sZF9uYW1lID0gcGF0Y2gtPm5ld19uYW1lID0gcGF0Y2gtPmRlZl9uYW1lOwogCQkJfQogCQkJcGF0Y2gtPmlzX3RvcGxldmVsX3JlbGF0aXZlID0gMTsKQEAgLTEwNTUsMjMgKzEyMzYsMjkgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyB2b2lkIGNoZWNrX3doaXRlc3BhY2UoY29uc3QgY2hhciAqbGluZSwgaW50IGxlbiwgdW5zaWduZWQgd3NfcnVsZSkKK3N0YXRpYyB2b2lkIHJlY29yZF93c19lcnJvcih1bnNpZ25lZCByZXN1bHQsIGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4sIGludCBsaW5lbnIpCiB7CiAJY2hhciAqZXJyOwotCXVuc2lnbmVkIHJlc3VsdCA9IHdzX2NoZWNrKGxpbmUgKyAxLCBsZW4gLSAxLCB3c19ydWxlKTsKKwogCWlmICghcmVzdWx0KQogCQlyZXR1cm47CiAKIAl3aGl0ZXNwYWNlX2Vycm9yKys7CiAJaWYgKHNxdWVsY2hfd2hpdGVzcGFjZV9lcnJvcnMgJiYKIAkgICAgc3F1ZWxjaF93aGl0ZXNwYWNlX2Vycm9ycyA8IHdoaXRlc3BhY2VfZXJyb3IpCi0JCTsKLQllbHNlIHsKLQkJZXJyID0gd2hpdGVzcGFjZV9lcnJvcl9zdHJpbmcocmVzdWx0KTsKLQkJZnByaW50ZihzdGRlcnIsICIlczolZDogJXMuXG4lLipzXG4iLAotCQkJcGF0Y2hfaW5wdXRfZmlsZSwgbGluZW5yLCBlcnIsIGxlbiAtIDIsIGxpbmUgKyAxKTsKLQkJZnJlZShlcnIpOwotCX0KKwkJcmV0dXJuOworCisJZXJyID0gd2hpdGVzcGFjZV9lcnJvcl9zdHJpbmcocmVzdWx0KTsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAlcy5cbiUuKnNcbiIsCisJCXBhdGNoX2lucHV0X2ZpbGUsIGxpbmVuciwgZXJyLCBsZW4sIGxpbmUpOworCWZyZWUoZXJyKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfd2hpdGVzcGFjZShjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuLCB1bnNpZ25lZCB3c19ydWxlKQoreworCXVuc2lnbmVkIHJlc3VsdCA9IHdzX2NoZWNrKGxpbmUgKyAxLCBsZW4gLSAxLCB3c19ydWxlKTsKKworCXJlY29yZF93c19lcnJvcihyZXN1bHQsIGxpbmUgKyAxLCBsZW4gLSAyLCBsaW5lbnIpOwogfQogCiAvKgpAQCAtMTE4Nyw2ICsxMzc0LDcgQEAKIAkJaW50IGxlbjsKIAogCQlmcmFnbWVudCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpmcmFnbWVudCkpOworCQlmcmFnbWVudC0+bGluZW5yID0gbGluZW5yOwogCQlsZW4gPSBwYXJzZV9mcmFnbWVudChsaW5lLCBzaXplLCBwYXRjaCwgZnJhZ21lbnQpOwogCQlpZiAobGVuIDw9IDApCiAJCQlkaWUoImNvcnJ1cHQgcGF0Y2ggYXQgbGluZSAlZCIsIGxpbmVucik7CkBAIC0xNTc4LDEwICsxNzY2LDE3IEBACiAJfQogfQogCisvKgorICogVXBkYXRlIHRoZSBwcmVpbWFnZSwgYW5kIHRoZSBjb21tb24gbGluZXMgaW4gcG9zdGltYWdlLAorICogZnJvbSBidWZmZXIgYnVmIG9mIGxlbmd0aCBsZW4uIElmIHBvc3RsZW4gaXMgMCB0aGUgcG9zdGltYWdlCisgKiBpcyB1cGRhdGVkIGluIHBsYWNlLCBvdGhlcndpc2UgaXQncyB1cGRhdGVkIG9uIGEgbmV3IGJ1ZmZlcgorICogb2YgbGVuZ3RoIHBvc3RsZW4KKyAqLworCiBzdGF0aWMgdm9pZCB1cGRhdGVfcHJlX3Bvc3RfaW1hZ2VzKHN0cnVjdCBpbWFnZSAqcHJlaW1hZ2UsCiAJCQkJICAgc3RydWN0IGltYWdlICpwb3N0aW1hZ2UsCiAJCQkJICAgY2hhciAqYnVmLAotCQkJCSAgIHNpemVfdCBsZW4pCisJCQkJICAgc2l6ZV90IGxlbiwgc2l6ZV90IHBvc3RsZW4pCiB7CiAJaW50IGksIGN0eDsKIAljaGFyICpuZXcsICpvbGQsICpmaXhlZDsKQEAgLTE2MDAsMTEgKzE3OTUsMTkgQEAKIAkqcHJlaW1hZ2UgPSBmaXhlZF9wcmVpbWFnZTsKIAogCS8qCi0JICogQWRqdXN0IHRoZSBjb21tb24gY29udGV4dCBsaW5lcyBpbiBwb3N0aW1hZ2UsIGluIHBsYWNlLgotCSAqIFRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSB3aGl0ZXNwYWNlIGZpeGluZyBkb2VzIG5vdCBtYWtlCi0JICogdGhlIHN0cmluZyBncm93LgorCSAqIEFkanVzdCB0aGUgY29tbW9uIGNvbnRleHQgbGluZXMgaW4gcG9zdGltYWdlLiBUaGlzIGNhbiBiZQorCSAqIGRvbmUgaW4tcGxhY2Ugd2hlbiB3ZSBhcmUganVzdCBkb2luZyB3aGl0ZXNwYWNlIGZpeGluZywKKwkgKiB3aGljaCBkb2VzIG5vdCBtYWtlIHRoZSBzdHJpbmcgZ3JvdywgYnV0IG5lZWRzIGEgbmV3IGJ1ZmZlcgorCSAqIHdoZW4gaWdub3Jpbmcgd2hpdGVzcGFjZSBjYXVzZXMgdGhlIHVwZGF0ZSwgc2luY2UgaW4gdGhpcyBjYXNlCisJICogd2UgY291bGQgaGF2ZSBlLmcuIHRhYnMgY29udmVydGVkIHRvIG11bHRpcGxlIHNwYWNlcy4KKwkgKiBXZSB0cnVzdCB0aGUgY2FsbGVyIHRvIHRlbGwgdXMgaWYgdGhlIHVwZGF0ZSBjYW4gYmUgZG9uZQorCSAqIGluIHBsYWNlIChwb3N0bGVuPT0wKSBvciBub3QuCiAJICovCi0JbmV3ID0gb2xkID0gcG9zdGltYWdlLT5idWY7CisJb2xkID0gcG9zdGltYWdlLT5idWY7CisJaWYgKHBvc3RsZW4pCisJCW5ldyA9IHBvc3RpbWFnZS0+YnVmID0geG1hbGxvYyhwb3N0bGVuKTsKKwllbHNlCisJCW5ldyA9IG9sZDsKIAlmaXhlZCA9IHByZWltYWdlLT5idWY7CiAJZm9yIChpID0gY3R4ID0gMDsgaSA8IHBvc3RpbWFnZS0+bnI7IGkrKykgewogCQlzaXplX3QgbGVuID0gcG9zdGltYWdlLT5saW5lW2ldLmxlbjsKQEAgLTE2NTEsNDYgKzE4NTQsMTU2IEBACiB7CiAJaW50IGk7CiAJY2hhciAqZml4ZWRfYnVmLCAqYnVmLCAqb3JpZywgKnRhcmdldDsKKwlpbnQgcHJlaW1hZ2VfbGltaXQ7CiAKLQlpZiAocHJlaW1hZ2UtPm5yICsgdHJ5X2xubyA+IGltZy0+bnIpCisJaWYgKHByZWltYWdlLT5uciArIHRyeV9sbm8gPD0gaW1nLT5ucikgeworCQkvKgorCQkgKiBUaGUgaHVuayBmYWxscyB3aXRoaW4gdGhlIGJvdW5kYXJpZXMgb2YgaW1nLgorCQkgKi8KKwkJcHJlaW1hZ2VfbGltaXQgPSBwcmVpbWFnZS0+bnI7CisJCWlmIChtYXRjaF9lbmQgJiYgKHByZWltYWdlLT5uciArIHRyeV9sbm8gIT0gaW1nLT5ucikpCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKHdzX2Vycm9yX2FjdGlvbiA9PSBjb3JyZWN0X3dzX2Vycm9yICYmCisJCSAgICh3c19ydWxlICYgV1NfQkxBTktfQVRfRU9GKSAmJiBtYXRjaF9lbmQpIHsKKwkJLyoKKwkJICogVGhpcyBodW5rIHRoYXQgbWF0Y2hlcyBhdCB0aGUgZW5kIGV4dGVuZHMgYmV5b25kCisJCSAqIHRoZSBlbmQgb2YgaW1nLCBhbmQgd2UgYXJlIHJlbW92aW5nIGJsYW5rIGxpbmVzCisJCSAqIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuICBUaGlzIG1hbnkgbGluZXMgZnJvbSB0aGUKKwkJICogYmVnaW5uaW5nIG9mIHRoZSBwcmVpbWFnZSBtdXN0IG1hdGNoIHdpdGggaW1nLCBhbmQKKwkJICogdGhlIHJlbWFpbmRlciBvZiB0aGUgcHJlaW1hZ2UgbXVzdCBiZSBibGFuay4KKwkJICovCisJCXByZWltYWdlX2xpbWl0ID0gaW1nLT5uciAtIHRyeV9sbm87CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVGhlIGh1bmsgZXh0ZW5kcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgaW1nIGFuZAorCQkgKiB3ZSBhcmUgbm90IHJlbW92aW5nIGJsYW5rcyBhdCB0aGUgZW5kLCBzbyB3ZQorCQkgKiBzaG91bGQgcmVqZWN0IHRoZSBodW5rIGF0IHRoaXMgcG9zaXRpb24uCisJCSAqLwogCQlyZXR1cm4gMDsKKwl9CiAKIAlpZiAobWF0Y2hfYmVnaW5uaW5nICYmIHRyeV9sbm8pCiAJCXJldHVybiAwOwogCi0JaWYgKG1hdGNoX2VuZCAmJiBwcmVpbWFnZS0+bnIgKyB0cnlfbG5vICE9IGltZy0+bnIpCi0JCXJldHVybiAwOwotCiAJLyogUXVpY2sgaGFzaCBjaGVjayAqLwotCWZvciAoaSA9IDA7IGkgPCBwcmVpbWFnZS0+bnI7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgcHJlaW1hZ2VfbGltaXQ7IGkrKykKIAkJaWYgKHByZWltYWdlLT5saW5lW2ldLmhhc2ggIT0gaW1nLT5saW5lW3RyeV9sbm8gKyBpXS5oYXNoKQogCQkJcmV0dXJuIDA7CiAKKwlpZiAocHJlaW1hZ2VfbGltaXQgPT0gcHJlaW1hZ2UtPm5yKSB7CisJCS8qCisJCSAqIERvIHdlIGhhdmUgYW4gZXhhY3QgbWF0Y2g/ICBJZiB3ZSB3ZXJlIHRvbGQgdG8gbWF0Y2gKKwkJICogYXQgdGhlIGVuZCwgc2l6ZSBtdXN0IGJlIGV4YWN0bHkgYXQgdHJ5K2ZyYWdzaXplLAorCQkgKiBvdGhlcndpc2UgdHJ5K2ZyYWdzaXplIG11c3QgYmUgc3RpbGwgd2l0aGluIHRoZSBwcmVpbWFnZSwKKwkJICogYW5kIGVpdGhlciBjYXNlLCB0aGUgb2xkIHBpZWNlIHNob3VsZCBtYXRjaCB0aGUgcHJlaW1hZ2UKKwkJICogZXhhY3RseS4KKwkJICovCisJCWlmICgobWF0Y2hfZW5kCisJCSAgICAgPyAodHJ5ICsgcHJlaW1hZ2UtPmxlbiA9PSBpbWctPmxlbikKKwkJICAgICA6ICh0cnkgKyBwcmVpbWFnZS0+bGVuIDw9IGltZy0+bGVuKSkgJiYKKwkJICAgICFtZW1jbXAoaW1nLT5idWYgKyB0cnksIHByZWltYWdlLT5idWYsIHByZWltYWdlLT5sZW4pKQorCQkJcmV0dXJuIDE7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVGhlIHByZWltYWdlIGV4dGVuZHMgYmV5b25kIHRoZSBlbmQgb2YgaW1nLCBzbworCQkgKiB0aGVyZSBjYW5ub3QgYmUgYW4gZXhhY3QgbWF0Y2guCisJCSAqCisJCSAqIFRoZXJlIG11c3QgYmUgb25lIG5vbi1ibGFuayBjb250ZXh0IGxpbmUgdGhhdCBtYXRjaAorCQkgKiBhIGxpbmUgYmVmb3JlIHRoZSBlbmQgb2YgaW1nLgorCQkgKi8KKwkJY2hhciAqYnVmX2VuZDsKKworCQlidWYgPSBwcmVpbWFnZS0+YnVmOworCQlidWZfZW5kID0gYnVmOworCQlmb3IgKGkgPSAwOyBpIDwgcHJlaW1hZ2VfbGltaXQ7IGkrKykKKwkJCWJ1Zl9lbmQgKz0gcHJlaW1hZ2UtPmxpbmVbaV0ubGVuOworCisJCWZvciAoIDsgYnVmIDwgYnVmX2VuZDsgYnVmKyspCisJCQlpZiAoIWlzc3BhY2UoKmJ1ZikpCisJCQkJYnJlYWs7CisJCWlmIChidWYgPT0gYnVmX2VuZCkKKwkJCXJldHVybiAwOworCX0KKwogCS8qCi0JICogRG8gd2UgaGF2ZSBhbiBleGFjdCBtYXRjaD8gIElmIHdlIHdlcmUgdG9sZCB0byBtYXRjaAotCSAqIGF0IHRoZSBlbmQsIHNpemUgbXVzdCBiZSBleGFjdGx5IGF0IHRyeStmcmFnc2l6ZSwKLQkgKiBvdGhlcndpc2UgdHJ5K2ZyYWdzaXplIG11c3QgYmUgc3RpbGwgd2l0aGluIHRoZSBwcmVpbWFnZSwKLQkgKiBhbmQgZWl0aGVyIGNhc2UsIHRoZSBvbGQgcGllY2Ugc2hvdWxkIG1hdGNoIHRoZSBwcmVpbWFnZQotCSAqIGV4YWN0bHkuCisJICogTm8gZXhhY3QgbWF0Y2guIElmIHdlIGFyZSBpZ25vcmluZyB3aGl0ZXNwYWNlLCBydW4gYSBsaW5lLWJ5LWxpbmUKKwkgKiBmdXp6eSBtYXRjaGluZy4gV2UgY29sbGVjdCBhbGwgdGhlIGxpbmUgbGVuZ3RoIGluZm9ybWF0aW9uIGJlY2F1c2UKKwkgKiB3ZSBuZWVkIGl0IHRvIGFkanVzdCB3aGl0ZXNwYWNlIGlmIHdlIG1hdGNoLgogCSAqLwotCWlmICgobWF0Y2hfZW5kCi0JICAgICA/ICh0cnkgKyBwcmVpbWFnZS0+bGVuID09IGltZy0+bGVuKQotCSAgICAgOiAodHJ5ICsgcHJlaW1hZ2UtPmxlbiA8PSBpbWctPmxlbikpICYmCi0JICAgICFtZW1jbXAoaW1nLT5idWYgKyB0cnksIHByZWltYWdlLT5idWYsIHByZWltYWdlLT5sZW4pKQorCWlmICh3c19pZ25vcmVfYWN0aW9uID09IGlnbm9yZV93c19jaGFuZ2UpIHsKKwkJc2l6ZV90IGltZ29mZiA9IDA7CisJCXNpemVfdCBwcmVvZmYgPSAwOworCQlzaXplX3QgcG9zdGxlbiA9IHBvc3RpbWFnZS0+bGVuOworCQlzaXplX3QgZXh0cmFfY2hhcnM7CisJCWNoYXIgKnByZWltYWdlX2VvZjsKKwkJY2hhciAqcHJlaW1hZ2VfZW5kOworCQlmb3IgKGkgPSAwOyBpIDwgcHJlaW1hZ2VfbGltaXQ7IGkrKykgeworCQkJc2l6ZV90IHByZWxlbiA9IHByZWltYWdlLT5saW5lW2ldLmxlbjsKKwkJCXNpemVfdCBpbWdsZW4gPSBpbWctPmxpbmVbdHJ5X2xubytpXS5sZW47CisKKwkJCWlmICghZnV6enlfbWF0Y2hsaW5lcyhpbWctPmJ1ZiArIHRyeSArIGltZ29mZiwgaW1nbGVuLAorCQkJCQkgICAgICBwcmVpbWFnZS0+YnVmICsgcHJlb2ZmLCBwcmVsZW4pKQorCQkJCXJldHVybiAwOworCQkJaWYgKHByZWltYWdlLT5saW5lW2ldLmZsYWcgJiBMSU5FX0NPTU1PTikKKwkJCQlwb3N0bGVuICs9IGltZ2xlbiAtIHByZWxlbjsKKwkJCWltZ29mZiArPSBpbWdsZW47CisJCQlwcmVvZmYgKz0gcHJlbGVuOworCQl9CisKKwkJLyoKKwkJICogT2ssIHRoZSBwcmVpbWFnZSBtYXRjaGVzIHdpdGggd2hpdGVzcGFjZSBmdXp6LgorCQkgKgorCQkgKiBpbWdvZmYgbm93IGhvbGRzIHRoZSB0cnVlIGxlbmd0aCBvZiB0aGUgdGFyZ2V0IHRoYXQKKwkJICogbWF0Y2hlcyB0aGUgcHJlaW1hZ2UgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIGZpbGUuCisJCSAqCisJCSAqIENvdW50IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGUgcHJlaW1hZ2UgdGhhdCBmYWxsCisJCSAqIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBtYWtlIHN1cmUgdGhhdCBhbGwgb2YgdGhlbQorCQkgKiBhcmUgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzLiAoVGhpcyBjYW4gb25seSBoYXBwZW4gaWYKKwkJICogd2UgYXJlIHJlbW92aW5nIGJsYW5rIGxpbmVzIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuKQorCQkgKi8KKwkJYnVmID0gcHJlaW1hZ2VfZW9mID0gcHJlaW1hZ2UtPmJ1ZiArIHByZW9mZjsKKwkJZm9yICggOyBpIDwgcHJlaW1hZ2UtPm5yOyBpKyspCisJCQlwcmVvZmYgKz0gcHJlaW1hZ2UtPmxpbmVbaV0ubGVuOworCQlwcmVpbWFnZV9lbmQgPSBwcmVpbWFnZS0+YnVmICsgcHJlb2ZmOworCQlmb3IgKCA7IGJ1ZiA8IHByZWltYWdlX2VuZDsgYnVmKyspCisJCQlpZiAoIWlzc3BhY2UoKmJ1ZikpCisJCQkJcmV0dXJuIDA7CisKKwkJLyoKKwkJICogVXBkYXRlIHRoZSBwcmVpbWFnZSBhbmQgdGhlIGNvbW1vbiBwb3N0aW1hZ2UgY29udGV4dAorCQkgKiBsaW5lcyB0byB1c2UgdGhlIHNhbWUgd2hpdGVzcGFjZSBhcyB0aGUgdGFyZ2V0LgorCQkgKiBJZiB3aGl0ZXNwYWNlIGlzIG1pc3NpbmcgaW4gdGhlIHRhcmdldCAoaS5lLgorCQkgKiBpZiB0aGUgcHJlaW1hZ2UgZXh0ZW5kcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgZmlsZSksCisJCSAqIHVzZSB0aGUgd2hpdGVzcGFjZSBmcm9tIHRoZSBwcmVpbWFnZS4KKwkJICovCisJCWV4dHJhX2NoYXJzID0gcHJlaW1hZ2VfZW5kIC0gcHJlaW1hZ2VfZW9mOworCQlmaXhlZF9idWYgPSB4bWFsbG9jKGltZ29mZiArIGV4dHJhX2NoYXJzKTsKKwkJbWVtY3B5KGZpeGVkX2J1ZiwgaW1nLT5idWYgKyB0cnksIGltZ29mZik7CisJCW1lbWNweShmaXhlZF9idWYgKyBpbWdvZmYsIHByZWltYWdlX2VvZiwgZXh0cmFfY2hhcnMpOworCQlpbWdvZmYgKz0gZXh0cmFfY2hhcnM7CisJCXVwZGF0ZV9wcmVfcG9zdF9pbWFnZXMocHJlaW1hZ2UsIHBvc3RpbWFnZSwKKwkJCQlmaXhlZF9idWYsIGltZ29mZiwgcG9zdGxlbik7CiAJCXJldHVybiAxOworCX0KIAogCWlmICh3c19lcnJvcl9hY3Rpb24gIT0gY29ycmVjdF93c19lcnJvcikKIAkJcmV0dXJuIDA7CiAKIAkvKgogCSAqIFRoZSBodW5rIGRvZXMgbm90IGFwcGx5IGJ5dGUtYnktYnl0ZSwgYnV0IHRoZSBoYXNoIHNheXMKLQkgKiBpdCBtaWdodCB3aXRoIHdoaXRlc3BhY2UgZnV6ei4KKwkgKiBpdCBtaWdodCB3aXRoIHdoaXRlc3BhY2UgZnV6ei4gV2UgaGF2ZW4ndCBiZWVuIGFza2VkIHRvCisJICogaWdub3JlIHdoaXRlc3BhY2UsIHdlIHdlcmUgYXNrZWQgdG8gY29ycmVjdCB3aGl0ZXNwYWNlCisJICogZXJyb3JzLCBzbyBsZXQncyB0cnkgbWF0Y2hpbmcgYWZ0ZXIgd2hpdGVzcGFjZSBjb3JyZWN0aW9uLgorCSAqCisJICogVGhlIHByZWltYWdlIG1heSBleHRlbmQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGZpbGUsCisJICogYnV0IGluIHRoaXMgbG9vcCB3ZSB3aWxsIG9ubHkgaGFuZGxlIHRoZSBwYXJ0IG9mIHRoZQorCSAqIHByZWltYWdlIHRoYXQgZmFsbHMgd2l0aGluIHRoZSBmaWxlLgogCSAqLwogCWZpeGVkX2J1ZiA9IHhtYWxsb2MocHJlaW1hZ2UtPmxlbiArIDEpOwogCWJ1ZiA9IGZpeGVkX2J1ZjsKIAlvcmlnID0gcHJlaW1hZ2UtPmJ1ZjsKIAl0YXJnZXQgPSBpbWctPmJ1ZiArIHRyeTsKLQlmb3IgKGkgPSAwOyBpIDwgcHJlaW1hZ2UtPm5yOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgcHJlaW1hZ2VfbGltaXQ7IGkrKykgewogCQlzaXplX3QgZml4bGVuOyAvKiBsZW5ndGggYWZ0ZXIgZml4aW5nIHRoZSBwcmVpbWFnZSAqLwogCQlzaXplX3Qgb2xkbGVuID0gcHJlaW1hZ2UtPmxpbmVbaV0ubGVuOwogCQlzaXplX3QgdGd0bGVuID0gaW1nLT5saW5lW3RyeV9sbm8gKyBpXS5sZW47CkBAIC0xNzMwLDEzICsyMDQzLDM2IEBACiAJCXRhcmdldCArPSB0Z3RsZW47CiAJfQogCisKKwkvKgorCSAqIE5vdyBoYW5kbGUgdGhlIGxpbmVzIGluIHRoZSBwcmVpbWFnZSB0aGF0IGZhbGxzIGJleW9uZCB0aGUKKwkgKiBlbmQgb2YgdGhlIGZpbGUgKGlmIGFueSkuIFRoZXkgd2lsbCBvbmx5IG1hdGNoIGlmIHRoZXkgYXJlCisJICogZW1wdHkgb3Igb25seSBjb250YWluIHdoaXRlc3BhY2UgKGlmIFdTX0JMQU5LX0FUX0VPTCBpcworCSAqIGZhbHNlKS4KKwkgKi8KKwlmb3IgKCA7IGkgPCBwcmVpbWFnZS0+bnI7IGkrKykgeworCQlzaXplX3QgZml4bGVuOyAvKiBsZW5ndGggYWZ0ZXIgZml4aW5nIHRoZSBwcmVpbWFnZSAqLworCQlzaXplX3Qgb2xkbGVuID0gcHJlaW1hZ2UtPmxpbmVbaV0ubGVuOworCQlpbnQgajsKKworCQkvKiBUcnkgZml4aW5nIHRoZSBsaW5lIGluIHRoZSBwcmVpbWFnZSAqLworCQlmaXhsZW4gPSB3c19maXhfY29weShidWYsIG9yaWcsIG9sZGxlbiwgd3NfcnVsZSwgTlVMTCk7CisKKwkJZm9yIChqID0gMDsgaiA8IGZpeGxlbjsgaisrKQorCQkJaWYgKCFpc3NwYWNlKGJ1ZltqXSkpCisJCQkJZ290byB1bm1hdGNoX2V4aXQ7CisKKwkJb3JpZyArPSBvbGRsZW47CisJCWJ1ZiArPSBmaXhsZW47CisJfQorCiAJLyoKIAkgKiBZZXMsIHRoZSBwcmVpbWFnZSBpcyBiYXNlZCBvbiBhbiBvbGRlciB2ZXJzaW9uIHRoYXQgc3RpbGwKIAkgKiBoYXMgd2hpdGVzcGFjZSBicmVha2FnZXMgdW5maXhlZCwgYW5kIGZpeGluZyB0aGVtIG1ha2VzIHRoZQogCSAqIGh1bmsgbWF0Y2guICBVcGRhdGUgdGhlIGNvbnRleHQgbGluZXMgaW4gdGhlIHBvc3RpbWFnZS4KIAkgKi8KIAl1cGRhdGVfcHJlX3Bvc3RfaW1hZ2VzKHByZWltYWdlLCBwb3N0aW1hZ2UsCi0JCQkgICAgICAgZml4ZWRfYnVmLCBidWYgLSBmaXhlZF9idWYpOworCQkJICAgICAgIGZpeGVkX2J1ZiwgYnVmIC0gZml4ZWRfYnVmLCAwKTsKIAlyZXR1cm4gMTsKIAogIHVubWF0Y2hfZXhpdDoKQEAgLTE3NTUsMTEgKzIwOTEsOCBAQAogCXVuc2lnbmVkIGxvbmcgYmFja3dhcmRzLCBmb3J3YXJkcywgdHJ5OwogCWludCBiYWNrd2FyZHNfbG5vLCBmb3J3YXJkc19sbm8sIHRyeV9sbm87CiAKLQlpZiAocHJlaW1hZ2UtPm5yID4gaW1nLT5ucikKLQkJcmV0dXJuIC0xOwotCiAJLyoKLQkgKiBJZiBtYXRjaF9iZWdpbmluZyBvciBtYXRjaF9lbmQgaXMgc3BlY2lmaWVkLCB0aGVyZSBpcyBubworCSAqIElmIG1hdGNoX2JlZ2lubmluZyBvciBtYXRjaF9lbmQgaXMgc3BlY2lmaWVkLCB0aGVyZSBpcyBubwogCSAqIHBvaW50IHN0YXJ0aW5nIGZyb20gYSB3cm9uZyBsaW5lIHRoYXQgd2lsbCBuZXZlciBtYXRjaCBhbmQKIAkgKiB3YW5kZXIgYXJvdW5kIGFuZCB3YWl0IGZvciBhIG1hdGNoIGF0IHRoZSBzcGVjaWZpZWQgZW5kLgogCSAqLwpAQCAtMTc2OCw3ICsyMTAxLDEyIEBACiAJZWxzZSBpZiAobWF0Y2hfZW5kKQogCQlsaW5lID0gaW1nLT5uciAtIHByZWltYWdlLT5ucjsKIAotCWlmIChsaW5lID4gaW1nLT5ucikKKwkvKgorCSAqIEJlY2F1c2UgdGhlIGNvbXBhcmlzb24gaXMgdW5zaWduZWQsIHRoZSBmb2xsb3dpbmcgdGVzdAorCSAqIHdpbGwgYWxzbyB0YWtlIGNhcmUgb2YgYSBuZWdhdGl2ZSBsaW5lIG51bWJlciB0aGF0IGNhbgorCSAqIHJlc3VsdCB3aGVuIG1hdGNoX2VuZCBhbmQgcHJlaW1hZ2UgaXMgbGFyZ2VyIHRoYW4gdGhlIHRhcmdldC4KKwkgKi8KKwlpZiAoKHNpemVfdCkgbGluZSA+IGltZy0+bnIpCiAJCWxpbmUgPSBpbWctPm5yOwogCiAJdHJ5ID0gMDsKQEAgLTE4NDQsMTIgKzIxODIsMjYgQEAKIAlpbnQgaSwgbnI7CiAJc2l6ZV90IHJlbW92ZV9jb3VudCwgaW5zZXJ0X2NvdW50LCBhcHBsaWVkX2F0ID0gMDsKIAljaGFyICpyZXN1bHQ7CisJaW50IHByZWltYWdlX2xpbWl0OworCisJLyoKKwkgKiBJZiB3ZSBhcmUgcmVtb3ZpbmcgYmxhbmsgbGluZXMgYXQgdGhlIGVuZCBvZiBpbWcsCisJICogdGhlIHByZWltYWdlIG1heSBleHRlbmQgYmV5b25kIHRoZSBlbmQuCisJICogSWYgdGhhdCBpcyB0aGUgY2FzZSwgd2UgbXVzdCBiZSBjYXJlZnVsIG9ubHkgdG8KKwkgKiByZW1vdmUgdGhlIHBhcnQgb2YgdGhlIHByZWltYWdlIHRoYXQgZmFsbHMgd2l0aGluCisJICogdGhlIGJvdW5kYXJpZXMgb2YgaW1nLiBJbml0aWFsaXplIHByZWltYWdlX2xpbWl0CisJICogdG8gdGhlIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgcHJlaW1hZ2UgdGhhdCBmYWxscworCSAqIHdpdGhpbiB0aGUgYm91bmRhcmllcy4KKwkgKi8KKwlwcmVpbWFnZV9saW1pdCA9IHByZWltYWdlLT5ucjsKKwlpZiAocHJlaW1hZ2VfbGltaXQgPiBpbWctPm5yIC0gYXBwbGllZF9wb3MpCisJCXByZWltYWdlX2xpbWl0ID0gaW1nLT5uciAtIGFwcGxpZWRfcG9zOwogCiAJZm9yIChpID0gMDsgaSA8IGFwcGxpZWRfcG9zOyBpKyspCiAJCWFwcGxpZWRfYXQgKz0gaW1nLT5saW5lW2ldLmxlbjsKIAogCXJlbW92ZV9jb3VudCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IHByZWltYWdlLT5ucjsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBwcmVpbWFnZV9saW1pdDsgaSsrKQogCQlyZW1vdmVfY291bnQgKz0gaW1nLT5saW5lW2FwcGxpZWRfcG9zICsgaV0ubGVuOwogCWluc2VydF9jb3VudCA9IHBvc3RpbWFnZS0+bGVuOwogCkBAIC0xODY2LDggKzIyMTgsOCBAQAogCXJlc3VsdFtpbWctPmxlbl0gPSAnXDAnOwogCiAJLyogQWRqdXN0IHRoZSBsaW5lIHRhYmxlICovCi0JbnIgPSBpbWctPm5yICsgcG9zdGltYWdlLT5uciAtIHByZWltYWdlLT5ucjsKLQlpZiAocHJlaW1hZ2UtPm5yIDwgcG9zdGltYWdlLT5ucikgeworCW5yID0gaW1nLT5uciArIHBvc3RpbWFnZS0+bnIgLSBwcmVpbWFnZV9saW1pdDsKKwlpZiAocHJlaW1hZ2VfbGltaXQgPCBwb3N0aW1hZ2UtPm5yKSB7CiAJCS8qCiAJCSAqIE5PVEU6IHRoaXMga25vd3MgdGhhdCB3ZSBuZXZlciBjYWxsIHJlbW92ZV9maXJzdF9saW5lKCkKIAkJICogb24gYW55dGhpbmcgb3RoZXIgdGhhbiBwcmUvcG9zdCBpbWFnZS4KQEAgLTE4NzUsMTAgKzIyMjcsMTAgQEAKIAkJaW1nLT5saW5lID0geHJlYWxsb2MoaW1nLT5saW5lLCBuciAqIHNpemVvZigqaW1nLT5saW5lKSk7CiAJCWltZy0+bGluZV9hbGxvY2F0ZWQgPSBpbWctPmxpbmU7CiAJfQotCWlmIChwcmVpbWFnZS0+bnIgIT0gcG9zdGltYWdlLT5ucikKKwlpZiAocHJlaW1hZ2VfbGltaXQgIT0gcG9zdGltYWdlLT5ucikKIAkJbWVtbW92ZShpbWctPmxpbmUgKyBhcHBsaWVkX3BvcyArIHBvc3RpbWFnZS0+bnIsCi0JCQlpbWctPmxpbmUgKyBhcHBsaWVkX3BvcyArIHByZWltYWdlLT5uciwKLQkJCShpbWctPm5yIC0gKGFwcGxpZWRfcG9zICsgcHJlaW1hZ2UtPm5yKSkgKgorCQkJaW1nLT5saW5lICsgYXBwbGllZF9wb3MgKyBwcmVpbWFnZV9saW1pdCwKKwkJCShpbWctPm5yIC0gKGFwcGxpZWRfcG9zICsgcHJlaW1hZ2VfbGltaXQpKSAqCiAJCQlzaXplb2YoKmltZy0+bGluZSkpOwogCW1lbWNweShpbWctPmxpbmUgKyBhcHBsaWVkX3BvcywKIAkgICAgICAgcG9zdGltYWdlLT5saW5lLApAQCAtMTkxMSw2ICsyMjYzLDcgQEAKIAkJaW50IGxlbiA9IGxpbmVsZW4ocGF0Y2gsIHNpemUpOwogCQlpbnQgcGxlbiwgYWRkZWQ7CiAJCWludCBhZGRlZF9ibGFua19saW5lID0gMDsKKwkJaW50IGlzX2JsYW5rX2NvbnRleHQgPSAwOwogCiAJCWlmICghbGVuKQogCQkJYnJlYWs7CkBAIC0xOTQzLDggKzIyOTYsMTIgQEAKIAkJCSpuZXcrKyA9ICdcbic7CiAJCQlhZGRfbGluZV9pbmZvKCZwcmVpbWFnZSwgIlxuIiwgMSwgTElORV9DT01NT04pOwogCQkJYWRkX2xpbmVfaW5mbygmcG9zdGltYWdlLCAiXG4iLCAxLCBMSU5FX0NPTU1PTik7CisJCQlpc19ibGFua19jb250ZXh0ID0gMTsKIAkJCWJyZWFrOwogCQljYXNlICcgJzoKKwkJCWlmIChwbGVuICYmICh3c19ydWxlICYgV1NfQkxBTktfQVRfRU9GKSAmJgorCQkJICAgIHdzX2JsYW5rX2xpbmUocGF0Y2ggKyAxLCBwbGVuLCB3c19ydWxlKSkKKwkJCQlpc19ibGFua19jb250ZXh0ID0gMTsKIAkJY2FzZSAnLSc6CiAJCQltZW1jcHkob2xkLCBwYXRjaCArIDEsIHBsZW4pOwogCQkJYWRkX2xpbmVfaW5mbygmcHJlaW1hZ2UsIG9sZCwgcGxlbiwKQEAgLTE5NzEsNyArMjMyOCw4IEBACiAJCQkJICAgICAgKGZpcnN0ID09ICcrJyA/IDAgOiBMSU5FX0NPTU1PTikpOwogCQkJbmV3ICs9IGFkZGVkOwogCQkJaWYgKGZpcnN0ID09ICcrJyAmJgotCQkJICAgIGFkZGVkID09IDEgJiYgbmV3Wy0xXSA9PSAnXG4nKQorCQkJICAgICh3c19ydWxlICYgV1NfQkxBTktfQVRfRU9GKSAmJgorCQkJICAgIHdzX2JsYW5rX2xpbmUocGF0Y2ggKyAxLCBwbGVuLCB3c19ydWxlKSkKIAkJCQlhZGRlZF9ibGFua19saW5lID0gMTsKIAkJCWJyZWFrOwogCQljYXNlICdAJzogY2FzZSAnXFwnOgpAQCAtMTk4NCw2ICsyMzQyLDggQEAKIAkJfQogCQlpZiAoYWRkZWRfYmxhbmtfbGluZSkKIAkJCW5ld19ibGFua19saW5lc19hdF9lbmQrKzsKKwkJZWxzZSBpZiAoaXNfYmxhbmtfY29udGV4dCkKKwkJCTsKIAkJZWxzZQogCQkJbmV3X2JsYW5rX2xpbmVzX2F0X2VuZCA9IDA7CiAJCXBhdGNoICs9IGxlbjsKQEAgLTIwNjUsMTcgKzI0MjUsMjQgQEAKIAl9CiAKIAlpZiAoYXBwbGllZF9wb3MgPj0gMCkgewotCQlpZiAod3NfZXJyb3JfYWN0aW9uID09IGNvcnJlY3Rfd3NfZXJyb3IgJiYKLQkJICAgIG5ld19ibGFua19saW5lc19hdF9lbmQgJiYKLQkJICAgIHBvc3RpbWFnZS5uciArIGFwcGxpZWRfcG9zID09IGltZy0+bnIpIHsKKwkJaWYgKG5ld19ibGFua19saW5lc19hdF9lbmQgJiYKKwkJICAgIHByZWltYWdlLm5yICsgYXBwbGllZF9wb3MgPj0gaW1nLT5uciAmJgorCQkgICAgKHdzX3J1bGUgJiBXU19CTEFOS19BVF9FT0YpICYmCisJCSAgICB3c19lcnJvcl9hY3Rpb24gIT0gbm93YXJuX3dzX2Vycm9yKSB7CisJCQlyZWNvcmRfd3NfZXJyb3IoV1NfQkxBTktfQVRfRU9GLCAiKyIsIDEsIGZyYWctPmxpbmVucik7CisJCQlpZiAod3NfZXJyb3JfYWN0aW9uID09IGNvcnJlY3Rfd3NfZXJyb3IpIHsKKwkJCQl3aGlsZSAobmV3X2JsYW5rX2xpbmVzX2F0X2VuZC0tKQorCQkJCQlyZW1vdmVfbGFzdF9saW5lKCZwb3N0aW1hZ2UpOworCQkJfQogCQkJLyoKLQkJCSAqIElmIHRoZSBwYXRjaCBhcHBsaWNhdGlvbiBhZGRzIGJsYW5rIGxpbmVzCi0JCQkgKiBhdCB0aGUgZW5kLCBhbmQgaWYgdGhlIHBhdGNoIGFwcGxpZXMgYXQgdGhlCi0JCQkgKiBlbmQgb2YgdGhlIGltYWdlLCByZW1vdmUgdGhvc2UgYWRkZWQgYmxhbmsKLQkJCSAqIGxpbmVzLgorCQkJICogV2Ugd291bGQgd2FudCB0byBwcmV2ZW50IHdyaXRlX291dF9yZXN1bHRzKCkKKwkJCSAqIGZyb20gdGFraW5nIHBsYWNlIGluIGFwcGx5X3BhdGNoKCkgdGhhdCBmb2xsb3dzCisJCQkgKiB0aGUgY2FsbGNoYWluIGxlZCB1cyBoZXJlLCB3aGljaCBpczoKKwkJCSAqIGFwcGx5X3BhdGNoLT5jaGVja19wYXRjaF9saXN0LT5jaGVja19wYXRjaC0+CisJCQkgKiBhcHBseV9kYXRhLT5hcHBseV9mcmFnbWVudHMtPmFwcGx5X29uZV9mcmFnbWVudAogCQkJICovCi0JCQl3aGlsZSAobmV3X2JsYW5rX2xpbmVzX2F0X2VuZC0tKQotCQkJCXJlbW92ZV9sYXN0X2xpbmUoJnBvc3RpbWFnZSk7CisJCQlpZiAod3NfZXJyb3JfYWN0aW9uID09IGRpZV9vbl93c19lcnJvcikKKwkJCQlhcHBseSA9IDA7CiAJCX0KIAogCQkvKgpAQCAtMjQxMSw3ICsyNzc4LDcgQEAKIAkJCXJldHVybiAtMTsKIAkJcmV0dXJuIDA7CiAJfQotCXJldHVybiBjZV9tYXRjaF9zdGF0KGNlLCBzdCwgQ0VfTUFUQ0hfSUdOT1JFX1ZBTElEKTsKKwlyZXR1cm4gY2VfbWF0Y2hfc3RhdChjZSwgc3QsIENFX01BVENIX0lHTk9SRV9WQUxJRHxDRV9NQVRDSF9JR05PUkVfU0tJUF9XT1JLVFJFRSk7CiB9CiAKIHN0YXRpYyBpbnQgY2hlY2tfcHJlaW1hZ2Uoc3RydWN0IHBhdGNoICpwYXRjaCwgc3RydWN0IGNhY2hlX2VudHJ5ICoqY2UsIHN0cnVjdCBzdGF0ICpzdCkKQEAgLTI2MDAsNyArMjk2Nyw3IEBACiBzdGF0aWMgdm9pZCBidWlsZF9mYWtlX2FuY2VzdG9yKHN0cnVjdCBwYXRjaCAqbGlzdCwgY29uc3QgY2hhciAqZmlsZW5hbWUpCiB7CiAJc3RydWN0IHBhdGNoICpwYXRjaDsKLQlzdHJ1Y3QgaW5kZXhfc3RhdGUgcmVzdWx0ID0geyAwIH07CisJc3RydWN0IGluZGV4X3N0YXRlIHJlc3VsdCA9IHsgTlVMTCB9OwogCWludCBmZDsKIAogCS8qIE9uY2Ugd2Ugc3RhcnQgc3VwcG9ydGluZyB0aGUgcmV2ZXJzZSBwYXRjaCwgaXQgbWF5IGJlCkBAIC0yODA5LDggKzMxNzYsOCBAQAogCX0gZWxzZSB7CiAJCWlmICghY2FjaGVkKSB7CiAJCQlpZiAobHN0YXQocGF0aCwgJnN0KSA8IDApCi0JCQkJZGllKCJ1bmFibGUgdG8gc3RhdCBuZXdseSBjcmVhdGVkIGZpbGUgJXMiLAotCQkJCSAgICBwYXRoKTsKKwkJCQlkaWVfZXJybm8oInVuYWJsZSB0byBzdGF0IG5ld2x5IGNyZWF0ZWQgZmlsZSAnJXMnIiwKKwkJCQkJICBwYXRoKTsKIAkJCWZpbGxfc3RhdF9jYWNoZV9pbmZvKGNlLCAmc3QpOwogCQl9CiAJCWlmICh3cml0ZV9zaGExX2ZpbGUoYnVmLCBzaXplLCBibG9iX3R5cGUsIGNlLT5zaGExKSA8IDApCkBAIC0yODUwLDcgKzMyMTcsNyBAQAogCXN0cmJ1Zl9yZWxlYXNlKCZuYnVmKTsKIAogCWlmIChjbG9zZShmZCkgPCAwKQotCQlkaWUoImNsb3NpbmcgZmlsZSAlczogJXMiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImNsb3NpbmcgZmlsZSAnJXMnIiwgcGF0aCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4OTksNyArMzI2Niw3IEBACiAJCQkrK25yOwogCQl9CiAJfQotCWRpZSgidW5hYmxlIHRvIHdyaXRlIGZpbGUgJXMgbW9kZSAlbyIsIHBhdGgsIG1vZGUpOworCWRpZV9lcnJubygidW5hYmxlIHRvIHdyaXRlIGZpbGUgJyVzJyBtb2RlICVvIiwgcGF0aCwgbW9kZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNyZWF0ZV9maWxlKHN0cnVjdCBwYXRjaCAqcGF0Y2gpCkBAIC0zMTc4LDYgKzM1NDUsOCBAQAogewogCWlmICghc3RyY21wKHZhciwgImFwcGx5LndoaXRlc3BhY2UiKSkKIAkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZhcHBseV9kZWZhdWx0X3doaXRlc3BhY2UsIHZhciwgdmFsdWUpOworCWVsc2UgaWYgKCFzdHJjbXAodmFyLCAiYXBwbHkuaWdub3Jld2hpdGVzcGFjZSIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmFwcGx5X2RlZmF1bHRfaWdub3Jld2hpdGVzcGFjZSwgdmFyLCB2YWx1ZSk7CiAJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CiB9CiAKQEAgLTMyMTQsNiArMzU4MywxNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV9zcGFjZV9jaGFuZ2UoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpZiAodW5zZXQpCisJCXdzX2lnbm9yZV9hY3Rpb24gPSBpZ25vcmVfd3Nfbm9uZTsKKwllbHNlCisJCXdzX2lnbm9yZV9hY3Rpb24gPSBpZ25vcmVfd3NfY2hhbmdlOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV93aGl0ZXNwYWNlKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKIAkJCQkgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKIHsKQEAgLTMyNjMsOSArMzY0MiwxMSBAQAogCQlPUFRfQk9PTEVBTigwLCAic3RhdCIsICZkaWZmc3RhdCwKIAkJCSJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGRpZmZzdGF0IGZvciB0aGUgaW5wdXQiKSwKIAkJeyBPUFRJT05fQk9PTEVBTiwgMCwgImFsbG93LWJpbmFyeS1yZXBsYWNlbWVudCIsICZiaW5hcnksCi0JCSAgTlVMTCwgIm9sZCBvcHRpb24sIG5vdyBuby1vcCIsIFBBUlNFX09QVF9ISURERU4gfSwKKwkJICBOVUxMLCAib2xkIG9wdGlvbiwgbm93IG5vLW9wIiwKKwkJICBQQVJTRV9PUFRfSElEREVOIHwgUEFSU0VfT1BUX05PQVJHIH0sCiAJCXsgT1BUSU9OX0JPT0xFQU4sIDAsICJiaW5hcnkiLCAmYmluYXJ5LAotCQkgIE5VTEwsICJvbGQgb3B0aW9uLCBub3cgbm8tb3AiLCBQQVJTRV9PUFRfSElEREVOIH0sCisJCSAgTlVMTCwgIm9sZCBvcHRpb24sIG5vdyBuby1vcCIsCisJCSAgUEFSU0VfT1BUX0hJRERFTiB8IFBBUlNFX09QVF9OT0FSRyB9LAogCQlPUFRfQk9PTEVBTigwLCAibnVtc3RhdCIsICZudW1zdGF0LAogCQkJInNob3dzIG51bWJlciBvZiBhZGRlZCBhbmQgZGVsZXRlZCBsaW5lcyBpbiBkZWNpbWFsIG5vdGF0aW9uIiksCiAJCU9QVF9CT09MRUFOKDAsICJzdW1tYXJ5IiwgJnN1bW1hcnksCkBAIC0zMjc4LDcgKzM2NTksNyBAQAogCQkJImFwcGx5IGEgcGF0Y2ggd2l0aG91dCB0b3VjaGluZyB0aGUgd29ya2luZyB0cmVlIiksCiAJCU9QVF9CT09MRUFOKDAsICJhcHBseSIsICZmb3JjZV9hcHBseSwKIAkJCSJhbHNvIGFwcGx5IHRoZSBwYXRjaCAodXNlIHdpdGggLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrKSIpLAotCQlPUFRfU1RSSU5HKDAsICJidWlsZC1mYWtlLWFuY2VzdG9yIiwgJmZha2VfYW5jZXN0b3IsICJmaWxlIiwKKwkJT1BUX0ZJTEVOQU1FKDAsICJidWlsZC1mYWtlLWFuY2VzdG9yIiwgJmZha2VfYW5jZXN0b3IsCiAJCQkiYnVpbGQgYSB0ZW1wb3JhcnkgaW5kZXggYmFzZWQgb24gZW1iZWRkZWQgaW5kZXggaW5mb3JtYXRpb24iKSwKIAkJeyBPUFRJT05fQ0FMTEJBQ0ssICd6JywgTlVMTCwgTlVMTCwgTlVMTCwKIAkJCSJwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIsCkBAIC0zMjg4LDYgKzM2NjksMTIgQEAKIAkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJ3aGl0ZXNwYWNlIiwgJndoaXRlc3BhY2Vfb3B0aW9uLCAiYWN0aW9uIiwKIAkJCSJkZXRlY3QgbmV3IG9yIG1vZGlmaWVkIGxpbmVzIHRoYXQgaGF2ZSB3aGl0ZXNwYWNlIGVycm9ycyIsCiAJCQkwLCBvcHRpb25fcGFyc2Vfd2hpdGVzcGFjZSB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImlnbm9yZS1zcGFjZS1jaGFuZ2UiLCBOVUxMLCBOVUxMLAorCQkJImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2Ugd2hlbiBmaW5kaW5nIGNvbnRleHQiLAorCQkJUEFSU0VfT1BUX05PQVJHLCBvcHRpb25fcGFyc2Vfc3BhY2VfY2hhbmdlIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAiaWdub3JlLXdoaXRlc3BhY2UiLCBOVUxMLCBOVUxMLAorCQkJImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2Ugd2hlbiBmaW5kaW5nIGNvbnRleHQiLAorCQkJUEFSU0VfT1BUX05PQVJHLCBvcHRpb25fcGFyc2Vfc3BhY2VfY2hhbmdlIH0sCiAJCU9QVF9CT09MRUFOKCdSJywgInJldmVyc2UiLCAmYXBwbHlfaW5fcmV2ZXJzZSwKIAkJCSJhcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZSIpLAogCQlPUFRfQk9PTEVBTigwLCAidW5pZGlmZi16ZXJvIiwgJnVuaWRpZmZfemVybywKQEAgLTMzMTIsMTIgKzM2OTksMTEgQEAKIAlnaXRfY29uZmlnKGdpdF9hcHBseV9jb25maWcsIE5VTEwpOwogCWlmIChhcHBseV9kZWZhdWx0X3doaXRlc3BhY2UpCiAJCXBhcnNlX3doaXRlc3BhY2Vfb3B0aW9uKGFwcGx5X2RlZmF1bHRfd2hpdGVzcGFjZSk7CisJaWYgKGFwcGx5X2RlZmF1bHRfaWdub3Jld2hpdGVzcGFjZSkKKwkJcGFyc2VfaWdub3Jld2hpdGVzcGFjZV9vcHRpb24oYXBwbHlfZGVmYXVsdF9pZ25vcmV3aGl0ZXNwYWNlKTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGJ1aWx0aW5fYXBwbHlfb3B0aW9ucywKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fYXBwbHlfb3B0aW9ucywKIAkJCWFwcGx5X3VzYWdlLCAwKTsKLQlmYWtlX2FuY2VzdG9yID0gcGFyc2Vfb3B0aW9uc19maXhfZmlsZW5hbWUocHJlZml4LCBmYWtlX2FuY2VzdG9yKTsKLQlpZiAoZmFrZV9hbmNlc3RvcikKLQkJZmFrZV9hbmNlc3RvciA9IHhzdHJkdXAoZmFrZV9hbmNlc3Rvcik7CiAKIAlpZiAoYXBwbHlfd2l0aF9yZWplY3QpCiAJCWFwcGx5ID0gYXBwbHlfdmVyYm9zZWx5ID0gMTsKQEAgLTMzNDMsNyArMzcyOSw3IEBACiAKIAkJZmQgPSBvcGVuKGFyZywgT19SRE9OTFkpOwogCQlpZiAoZmQgPCAwKQotCQkJZGllKCJjYW4ndCBvcGVuIHBhdGNoICclcyc6ICVzIiwgYXJnLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJjYW4ndCBvcGVuIHBhdGNoICclcyciLCBhcmcpOwogCQlyZWFkX3N0ZGluID0gMDsKIAkJc2V0X2RlZmF1bHRfd2hpdGVzcGFjZV9tb2RlKHdoaXRlc3BhY2Vfb3B0aW9uKTsKIAkJZXJycyB8PSBhcHBseV9wYXRjaChmZCwgYXJnLCBvcHRpb25zKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tYXJjaGl2ZS5jIGIvYnVpbHRpbi1hcmNoaXZlLmMKaW5kZXggYWI1MGNlYi4uNmE4ODdmNSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1hcmNoaXZlLmMKKysrIGIvYnVpbHRpbi1hcmNoaXZlLmMKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlICJidWlsdGluLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZS5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgogI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKICNpbmNsdWRlICJwa3QtbGluZS5oIgogI2luY2x1ZGUgInNpZGViYW5kLmgiCkBAIC0xMywxMCArMTQsMTAgQEAKIHsKIAlpbnQgb3V0cHV0X2ZkID0gb3BlbihvdXRwdXRfZmlsZSwgT19DUkVBVCB8IE9fV1JPTkxZIHwgT19UUlVOQywgMDY2Nik7CiAJaWYgKG91dHB1dF9mZCA8IDApCi0JCWRpZSgiY291bGQgbm90IGNyZWF0ZSBhcmNoaXZlIGZpbGU6ICVzICIsIG91dHB1dF9maWxlKTsKKwkJZGllX2Vycm5vKCJjb3VsZCBub3QgY3JlYXRlIGFyY2hpdmUgZmlsZSAnJXMnIiwgb3V0cHV0X2ZpbGUpOwogCWlmIChvdXRwdXRfZmQgIT0gMSkgewogCQlpZiAoZHVwMihvdXRwdXRfZmQsIDEpIDwgMCkKLQkJCWRpZSgiY291bGQgbm90IHJlZGlyZWN0IG91dHB1dCIpOworCQkJZGllX2Vycm5vKCJjb3VsZCBub3QgcmVkaXJlY3Qgb3V0cHV0Iik7CiAJCWVsc2UKIAkJCWNsb3NlKG91dHB1dF9mZCk7CiAJfQpAQCAtMjUsMTIgKzI2LDE2IEBACiBzdGF0aWMgaW50IHJ1bl9yZW1vdGVfYXJjaGl2ZXIoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAogCQkJICAgICAgIGNvbnN0IGNoYXIgKnJlbW90ZSwgY29uc3QgY2hhciAqZXhlYykKIHsKLQljaGFyICp1cmwsIGJ1ZltMQVJHRV9QQUNLRVRfTUFYXTsKKwljaGFyIGJ1ZltMQVJHRV9QQUNLRVRfTUFYXTsKIAlpbnQgZmRbMl0sIGksIGxlbiwgcnY7Ci0Jc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNvbm47CisJc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0OworCXN0cnVjdCByZW1vdGUgKl9yZW1vdGU7CiAKLQl1cmwgPSB4c3RyZHVwKHJlbW90ZSk7Ci0JY29ubiA9IGdpdF9jb25uZWN0KGZkLCB1cmwsIGV4ZWMsIDApOworCV9yZW1vdGUgPSByZW1vdGVfZ2V0KHJlbW90ZSk7CisJaWYgKCFfcmVtb3RlLT51cmxbMF0pCisJCWRpZSgiZ2l0IGFyY2hpdmU6IFJlbW90ZSB3aXRoIG5vIFVSTCIpOworCXRyYW5zcG9ydCA9IHRyYW5zcG9ydF9nZXQoX3JlbW90ZSwgX3JlbW90ZS0+dXJsWzBdKTsKKwl0cmFuc3BvcnRfY29ubmVjdCh0cmFuc3BvcnQsICJnaXQtdXBsb2FkLWFyY2hpdmUiLCBleGVjLCBmZCk7CiAKIAlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQogCQlwYWNrZXRfd3JpdGUoZmRbMV0sICJhcmd1bWVudCAlc1xuIiwgYXJndltpXSk7CkBAIC01MywxMyArNTgsMjIgQEAKIAogCS8qIE5vdywgc3RhcnQgcmVhZGluZyBmcm9tIGZkWzBdIGFuZCBzcGl0IGl0IG91dCB0byBzdGRvdXQgKi8KIAlydiA9IHJlY3Zfc2lkZWJhbmQoImFyY2hpdmUiLCBmZFswXSwgMSk7Ci0JY2xvc2UoZmRbMF0pOwotCWNsb3NlKGZkWzFdKTsKLQlydiB8PSBmaW5pc2hfY29ubmVjdChjb25uKTsKKwlydiB8PSB0cmFuc3BvcnRfZGlzY29ubmVjdCh0cmFuc3BvcnQpOwogCiAJcmV0dXJuICEhcnY7CiB9CiAKK3N0YXRpYyBjb25zdCBjaGFyICpmb3JtYXRfZnJvbV9uYW1lKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCWNvbnN0IGNoYXIgKmV4dCA9IHN0cnJjaHIoZmlsZW5hbWUsICcuJyk7CisJaWYgKCFleHQpCisJCXJldHVybiBOVUxMOworCWV4dCsrOworCWlmICghc3RyY2FzZWNtcChleHQsICJ6aXAiKSkKKwkJcmV0dXJuICItLWZvcm1hdD16aXAiOworCXJldHVybiBOVUxMOworfQorCiAjZGVmaW5lIFBBUlNFX09QVF9LRUVQX0FMTCAoIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIIHwgCVwKIAkJCSAgICAgUEFSU0VfT1BUX0tFRVBfQVJHVjAgfCAJXAogCQkJICAgICBQQVJTRV9PUFRfS0VFUF9VTktOT1dOIHwJXApAQCAtNzAsOCArODQsOSBAQAogCWNvbnN0IGNoYXIgKmV4ZWMgPSAiZ2l0LXVwbG9hZC1hcmNoaXZlIjsKIAljb25zdCBjaGFyICpvdXRwdXQgPSBOVUxMOwogCWNvbnN0IGNoYXIgKnJlbW90ZSA9IE5VTEw7CisJY29uc3QgY2hhciAqZm9ybWF0X29wdGlvbiA9IE5VTEw7CiAJc3RydWN0IG9wdGlvbiBsb2NhbF9vcHRzW10gPSB7Ci0JCU9QVF9TVFJJTkcoMCwgIm91dHB1dCIsICZvdXRwdXQsICJmaWxlIiwKKwkJT1BUX1NUUklORygnbycsICJvdXRwdXQiLCAmb3V0cHV0LCAiZmlsZSIsCiAJCQkid3JpdGUgdGhlIGFyY2hpdmUgdG8gdGhpcyBmaWxlIiksCiAJCU9QVF9TVFJJTkcoMCwgInJlbW90ZSIsICZyZW1vdGUsICJyZXBvIiwKIAkJCSJyZXRyaWV2ZSB0aGUgYXJjaGl2ZSBmcm9tIHJlbW90ZSByZXBvc2l0b3J5IDxyZXBvPiIpLApAQCAtODAsMTAgKzk1LDMwIEBACiAJCU9QVF9FTkQoKQogCX07CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBsb2NhbF9vcHRzLCBOVUxMLCBQQVJTRV9PUFRfS0VFUF9BTEwpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgbG9jYWxfb3B0cywgTlVMTCwKKwkJCSAgICAgUEFSU0VfT1BUX0tFRVBfQUxMKTsKIAotCWlmIChvdXRwdXQpCisJaWYgKG91dHB1dCkgewogCQljcmVhdGVfb3V0cHV0X2ZpbGUob3V0cHV0KTsKKwkJZm9ybWF0X29wdGlvbiA9IGZvcm1hdF9mcm9tX25hbWUob3V0cHV0KTsKKwl9CisKKwkvKgorCSAqIFdlIGhhdmUgZW5vdWdoIHJvb20gaW4gYXJndltdIHRvIG11Y2sgaXQgaW4gcGxhY2UsIGJlY2F1c2UKKwkgKiAtLW91dHB1dCBtdXN0IGhhdmUgYmVlbiBnaXZlbiBvbiB0aGUgb3JpZ2luYWwgY29tbWFuZCBsaW5lCisJICogaWYgd2UgZ2V0IHRvIHRoaXMgcG9pbnQsIGFuZCBwYXJzZV9vcHRpb25zKCkgbXVzdCBoYXZlIGVhdGVuCisJICogaXQsIGkuZS4gd2UgY2FuIGFkZCBiYWNrIG9uZSBlbGVtZW50IHRvIHRoZSBhcnJheS4KKwkgKgorCSAqIFdlIGFkZCBhIGZha2UgLS1mb3JtYXQgb3B0aW9uIGF0IHRoZSBiZWdpbm5pbmcsIHdpdGggdGhlCisJICogZm9ybWF0IGluZmVycmVkIGZyb20gb3VyIG91dHB1dCBmaWxlbmFtZS4gIFRoaXMgd2F5IGV4cGxpY2l0CisJICogLS1mb3JtYXQgb3B0aW9ucyBjYW4gb3ZlcnJpZGUgaXQsIGFuZCB0aGUgZmFrZSBvcHRpb24gaXMKKwkgKiBpbnNlcnRlZCBiZWZvcmUgYW55ICItLSIgdGhhdCBtaWdodCBoYXZlIGJlZW4gZ2l2ZW4uCisJICovCisJaWYgKGZvcm1hdF9vcHRpb24pIHsKKwkJbWVtbW92ZShhcmd2ICsgMiwgYXJndiArIDEsIHNpemVvZigqYXJndikgKiBhcmdjKTsKKwkJYXJndlsxXSA9IGZvcm1hdF9vcHRpb247CisJCWFyZ3ZbKythcmdjXSA9IE5VTEw7CisJfQogCiAJaWYgKHJlbW90ZSkKIAkJcmV0dXJuIHJ1bl9yZW1vdGVfYXJjaGl2ZXIoYXJnYywgYXJndiwgcmVtb3RlLCBleGVjKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tYmlzZWN0LS1oZWxwZXIuYyBiL2J1aWx0aW4tYmlzZWN0LS1oZWxwZXIuYwppbmRleCA4ZmU3Nzg3Li41YjIyNjM5IDEwMDY0NAotLS0gYS9idWlsdGluLWJpc2VjdC0taGVscGVyLmMKKysrIGIvYnVpbHRpbi1iaXNlY3QtLWhlbHBlci5jCkBAIC00LDI0ICs0LDI1IEBACiAjaW5jbHVkZSAiYmlzZWN0LmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X2Jpc2VjdF9oZWxwZXJfdXNhZ2VbXSA9IHsKLQkiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC12YXJzIiwKKwkiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwiLAogCU5VTEwKIH07CiAKIGludCBjbWRfYmlzZWN0X19oZWxwZXIoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7Ci0JaW50IG5leHRfdmFycyA9IDA7CisJaW50IG5leHRfYWxsID0gMDsKIAlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKLQkJT1BUX0JPT0xFQU4oMCwgIm5leHQtdmFycyIsICZuZXh0X3ZhcnMsCi0JCQkgICAgIm91dHB1dCBuZXh0IGJpc2VjdCBzdGVwIHZhcmlhYmxlcyIpLAorCQlPUFRfQk9PTEVBTigwLCAibmV4dC1hbGwiLCAmbmV4dF9hbGwsCisJCQkgICAgInBlcmZvcm0gJ2dpdCBiaXNlY3QgbmV4dCciKSwKIAkJT1BUX0VORCgpCiAJfTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGdpdF9iaXNlY3RfaGVscGVyX3VzYWdlLCAwKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsCisJCQkgICAgIGdpdF9iaXNlY3RfaGVscGVyX3VzYWdlLCAwKTsKIAotCWlmICghbmV4dF92YXJzKQorCWlmICghbmV4dF9hbGwpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfYmlzZWN0X2hlbHBlcl91c2FnZSwgb3B0aW9ucyk7CiAKLQkvKiBuZXh0LXZhcnMgKi8KLQlyZXR1cm4gYmlzZWN0X25leHRfdmFycyhwcmVmaXgpOworCS8qIG5leHQtYWxsICovCisJcmV0dXJuIGJpc2VjdF9uZXh0X2FsbChwcmVmaXgpOwogfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1ibGFtZS5jIGIvYnVpbHRpbi1ibGFtZS5jCmluZGV4IDBhZmRiMTYuLmZjMTU4NjMgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tYmxhbWUuYworKysgYi9idWlsdGluLWJsYW1lLmMKQEAgLTEzMDUsNiArMTMwNSw3IEBACiAJZXJyb3Jfb3V0OgogCQkvKiBVZ2ggKi8KIAkJKnR6ID0gIih1bmtub3duKSI7CisJCXN0cmNweShwZXJzb24sICp0eik7CiAJCXN0cmNweShtYWlsLCAqdHopOwogCQkqdGltZSA9IDA7CiAJCXJldHVybjsKQEAgLTEzMTQsMjAgKzEzMTUsMjYgQEAKIAl0bXAgPSBwZXJzb247CiAJdG1wICs9IGxlbjsKIAkqdG1wID0gMDsKLQl3aGlsZSAoKnRtcCAhPSAnICcpCisJd2hpbGUgKHBlcnNvbiA8IHRtcCAmJiAqdG1wICE9ICcgJykKIAkJdG1wLS07CisJaWYgKHRtcCA8PSBwZXJzb24pCisJCWdvdG8gZXJyb3Jfb3V0OwogCSp0eiA9IHRtcCsxOwogCXR6bGVuID0gKHBlcnNvbitsZW4pLSh0bXArMSk7CiAKIAkqdG1wID0gMDsKLQl3aGlsZSAoKnRtcCAhPSAnICcpCisJd2hpbGUgKHBlcnNvbiA8IHRtcCAmJiAqdG1wICE9ICcgJykKIAkJdG1wLS07CisJaWYgKHRtcCA8PSBwZXJzb24pCisJCWdvdG8gZXJyb3Jfb3V0OwogCSp0aW1lID0gc3RydG91bCh0bXAsIE5VTEwsIDEwKTsKIAl0aW1lcG9zID0gdG1wOwogCiAJKnRtcCA9IDA7Ci0Jd2hpbGUgKCp0bXAgIT0gJyAnKQorCXdoaWxlIChwZXJzb24gPCB0bXAgJiYgKnRtcCAhPSAnICcpCiAJCXRtcC0tOworCWlmICh0bXAgPD0gcGVyc29uKQorCQlyZXR1cm47CiAJbWFpbHBvcyA9IHRtcCArIDE7CiAJKnRtcCA9IDA7CiAJbWFpbGxlbiA9IHRpbWVwb3MgLSB0bXA7CkBAIC0xMzQ4LDcgKzEzNTUsNyBAQAogCS8qCiAJICogTm93LCBjb252ZXJ0IGJvdGggbmFtZSBhbmQgZS1tYWlsIHVzaW5nIG1haWxtYXAKIAkgKi8KLQlpZihtYXBfdXNlcigmbWFpbG1hcCwgbWFpbCsxLCBtYWlsX2xlbi0xLCBwZXJzb24sIHRtcC1wZXJzb24tMSkpIHsKKwlpZiAobWFwX3VzZXIoJm1haWxtYXAsIG1haWwrMSwgbWFpbF9sZW4tMSwgcGVyc29uLCB0bXAtcGVyc29uLTEpKSB7CiAJCS8qIEFkZCBhIHRyYWlsaW5nICc+JyB0byBlbWFpbCwgc2luY2UgbWFwX3VzZXIgcmV0dXJucyBwbGFpbiBlbWFpbHMKIAkJICAgTm90ZTogSXQgYWxyZWFkeSBoYXMgJzwnLCBzaW5jZSB3ZSByZXBsYWNlIGZyb20gbWFpbCsxICovCiAJCW1haWxwb3MgPSBtZW1jaHIobWFpbCwgJ1wwJywgbWFpbF9sZW4pOwpAQCAtMTYwNCw2ICsxNjExLDkgQEAKIAkJfSB3aGlsZSAoY2ggIT0gJ1xuJyAmJgogCQkJIGNwIDwgc2ItPmZpbmFsX2J1ZiArIHNiLT5maW5hbF9idWZfc2l6ZSk7CiAJfQorCisJaWYgKHNiLT5maW5hbF9idWZfc2l6ZSAmJiBjcFstMV0gIT0gJ1xuJykKKwkJcHV0Y2hhcignXG4nKTsKIH0KIAogc3RhdGljIHZvaWQgZW1pdF9vdGhlcihzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IsIHN0cnVjdCBibGFtZV9lbnRyeSAqZW50LCBpbnQgb3B0KQpAQCAtMTY2Nyw2ICsxNjc3LDkgQEAKIAkJfSB3aGlsZSAoY2ggIT0gJ1xuJyAmJgogCQkJIGNwIDwgc2ItPmZpbmFsX2J1ZiArIHNiLT5maW5hbF9idWZfc2l6ZSk7CiAJfQorCisJaWYgKHNiLT5maW5hbF9idWZfc2l6ZSAmJiBjcFstMV0gIT0gJ1xuJykKKwkJcHV0Y2hhcignXG4nKTsKIH0KIAogc3RhdGljIHZvaWQgb3V0cHV0KHN0cnVjdCBzY29yZWJvYXJkICpzYiwgaW50IG9wdGlvbikKQEAgLTE3NTksNyArMTc3Miw3IEBACiB7CiAJaW50IGksIHdpZHRoOwogCi0JZm9yICh3aWR0aCA9IDEsIGkgPSAxMDsgaSA8PSBsaW5lcyArIDE7IHdpZHRoKyspCisJZm9yICh3aWR0aCA9IDEsIGkgPSAxMDsgaSA8PSBsaW5lczsgd2lkdGgrKykKIAkJaSAqPSAxMDsKIAlyZXR1cm4gd2lkdGg7CiB9CkBAIC0yMDA4LDIzICsyMDIxLDIzIEBACiAKIAkJaWYgKGNvbnRlbnRzX2Zyb20pIHsKIAkJCWlmIChzdGF0KGNvbnRlbnRzX2Zyb20sICZzdCkgPCAwKQotCQkJCWRpZSgiQ2Fubm90IHN0YXQgJXMiLCBjb250ZW50c19mcm9tKTsKKwkJCQlkaWVfZXJybm8oIkNhbm5vdCBzdGF0ICclcyciLCBjb250ZW50c19mcm9tKTsKIAkJCXJlYWRfZnJvbSA9IGNvbnRlbnRzX2Zyb207CiAJCX0KIAkJZWxzZSB7CiAJCQlpZiAobHN0YXQocGF0aCwgJnN0KSA8IDApCi0JCQkJZGllKCJDYW5ub3QgbHN0YXQgJXMiLCBwYXRoKTsKKwkJCQlkaWVfZXJybm8oIkNhbm5vdCBsc3RhdCAnJXMnIiwgcGF0aCk7CiAJCQlyZWFkX2Zyb20gPSBwYXRoOwogCQl9CiAJCW1vZGUgPSBjYW5vbl9tb2RlKHN0LnN0X21vZGUpOwogCQlzd2l0Y2ggKHN0LnN0X21vZGUgJiBTX0lGTVQpIHsKIAkJY2FzZSBTX0lGUkVHOgogCQkJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJmJ1ZiwgcmVhZF9mcm9tLCBzdC5zdF9zaXplKSAhPSBzdC5zdF9zaXplKQotCQkJCWRpZSgiY2Fubm90IG9wZW4gb3IgcmVhZCAlcyIsIHJlYWRfZnJvbSk7CisJCQkJZGllX2Vycm5vKCJjYW5ub3Qgb3BlbiBvciByZWFkICclcyciLCByZWFkX2Zyb20pOwogCQkJYnJlYWs7CiAJCWNhc2UgU19JRkxOSzoKIAkJCWlmIChzdHJidWZfcmVhZGxpbmsoJmJ1ZiwgcmVhZF9mcm9tLCBzdC5zdF9zaXplKSA8IDApCi0JCQkJZGllKCJjYW5ub3QgcmVhZGxpbmsgJXMiLCByZWFkX2Zyb20pOworCQkJCWRpZV9lcnJubygiY2Fubm90IHJlYWRsaW5rICclcyciLCByZWFkX2Zyb20pOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlkaWUoInVuc3VwcG9ydGVkIGZpbGUgdHlwZSAlcyIsIHJlYWRfZnJvbSk7CkBAIC0yMDM1LDcgKzIwNDgsNyBAQAogCQljb250ZW50c19mcm9tID0gInN0YW5kYXJkIGlucHV0IjsKIAkJbW9kZSA9IDA7CiAJCWlmIChzdHJidWZfcmVhZCgmYnVmLCAwLCAwKSA8IDApCi0JCQlkaWUoInJlYWQgZXJyb3IgJXMgZnJvbSBzdGRpbiIsIHN0cmVycm9yKGVycm5vKSk7CisJCQlkaWVfZXJybm8oImZhaWxlZCB0byByZWFkIGZyb20gc3RkaW4iKTsKIAl9CiAJY29udmVydF90b19naXQocGF0aCwgYnVmLmJ1ZiwgYnVmLmxlbiwgJmJ1ZiwgMCk7CiAJb3JpZ2luLT5maWxlLnB0ciA9IGJ1Zi5idWY7CkBAIC0yMjM5LDcgKzIyNTIsNyBAQAogCXNhdmVfY29tbWl0X2J1ZmZlciA9IDA7CiAJZGFzaGRhc2hfcG9zID0gMDsKIAotCXBhcnNlX29wdGlvbnNfc3RhcnQoJmN0eCwgYXJnYywgYXJndiwgUEFSU0VfT1BUX0tFRVBfREFTSERBU0ggfAorCXBhcnNlX29wdGlvbnNfc3RhcnQoJmN0eCwgYXJnYywgYXJndiwgcHJlZml4LCBQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCB8CiAJCQkgICAgUEFSU0VfT1BUX0tFRVBfQVJHVjApOwogCWZvciAoOzspIHsKIAkJc3dpdGNoIChwYXJzZV9vcHRpb25zX3N0ZXAoJmN0eCwgb3B0aW9ucywgYmxhbWVfb3B0X3VzYWdlKSkgewpAQCAtMjI2MSw4ICsyMjc0LDcgQEAKIAlhcmdjID0gcGFyc2Vfb3B0aW9uc19lbmQoJmN0eCk7CiAKIAlpZiAocmV2c19maWxlICYmIHJlYWRfYW5jZXN0cnkocmV2c19maWxlKSkKLQkJZGllKCJyZWFkaW5nIGdyYWZ0IGZpbGUgJXMgZmFpbGVkOiAlcyIsCi0JCSAgICByZXZzX2ZpbGUsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygicmVhZGluZyBncmFmdCBmaWxlICclcycgZmFpbGVkIiwgcmV2c19maWxlKTsKIAogCWlmIChjbWRfaXNfYW5ub3RhdGUpIHsKIAkJb3V0cHV0X29wdGlvbiB8PSBPVVRQVVRfQU5OT1RBVEVfQ09NUEFUOwpAQCAtMjM1MCw5ICsyMzYyLDEwIEBACiAKIAkJc2V0dXBfd29ya190cmVlKCk7CiAJCWlmICghaGFzX3N0cmluZ19pbl93b3JrX3RyZWUocGF0aCkpCi0JCQlkaWUoImNhbm5vdCBzdGF0IHBhdGggJXM6ICVzIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygiY2Fubm90IHN0YXQgcGF0aCAnJXMnIiwgcGF0aCk7CiAJfQogCisJcmV2cy5kaXNhYmxlX3N0ZGluID0gMTsKIAlzZXR1cF9yZXZpc2lvbnMoYXJnYywgYXJndiwgJnJldnMsIE5VTEwpOwogCW1lbXNldCgmc2IsIDAsIHNpemVvZihzYikpOwogCkBAIC0yNDIwLDcgKzI0MzMsNyBAQAogCWlmICh0b3AgPCAxKQogCQl0b3AgPSBsbm87CiAJYm90dG9tLS07Ci0JaWYgKGxubyA8IHRvcCkKKwlpZiAobG5vIDwgdG9wIHx8IGxubyA8IGJvdHRvbSkKIAkJZGllKCJmaWxlICVzIGhhcyBvbmx5ICVsdSBsaW5lcyIsIHBhdGgsIGxubyk7CiAKIAllbnQgPSB4Y2FsbG9jKDEsIHNpemVvZigqZW50KSk7CmRpZmYgLS1naXQgYS9idWlsdGluLWJyYW5jaC5jIGIvYnVpbHRpbi1icmFuY2guYwppbmRleCA3MzEwMWExLi5hMjhhMTM5IDEwMDY0NAotLS0gYS9idWlsdGluLWJyYW5jaC5jCisrKyBiL2J1aWx0aW4tYnJhbmNoLmMKQEAgLTY1LDcgKzY1LDcgQEAKIAkJcmV0dXJuIEJSQU5DSF9DT0xPUl9MT0NBTDsKIAlpZiAoIXN0cmNhc2VjbXAodmFyK29mcywgImN1cnJlbnQiKSkKIAkJcmV0dXJuIEJSQU5DSF9DT0xPUl9DVVJSRU5UOwotCWRpZSgiYmFkIGNvbmZpZyB2YXJpYWJsZSAnJXMnIiwgdmFyKTsKKwlyZXR1cm4gLTE7CiB9CiAKIHN0YXRpYyBpbnQgZ2l0X2JyYW5jaF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCkBAIC03Niw2ICs3Niw4IEBACiAJfQogCWlmICghcHJlZml4Y21wKHZhciwgImNvbG9yLmJyYW5jaC4iKSkgewogCQlpbnQgc2xvdCA9IHBhcnNlX2JyYW5jaF9jb2xvcl9zbG90KHZhciwgMTMpOworCQlpZiAoc2xvdCA8IDApCisJCQlyZXR1cm4gMDsKIAkJaWYgKCF2YWx1ZSkKIAkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOwogCQljb2xvcl9wYXJzZSh2YWx1ZSwgdmFyLCBicmFuY2hfY29sb3JzW3Nsb3RdKTsKQEAgLTkxLDkgKzkzLDYwIEBACiAJcmV0dXJuICIiOwogfQogCitzdGF0aWMgaW50IGJyYW5jaF9tZXJnZWQoaW50IGtpbmQsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgc3RydWN0IGNvbW1pdCAqcmV2LCBzdHJ1Y3QgY29tbWl0ICpoZWFkX3JldikKK3sKKwkvKgorCSAqIFRoaXMgY2hlY2tzIHdoZXRoZXIgdGhlIG1lcmdlIGJhc2VzIG9mIGJyYW5jaCBhbmQgSEVBRCAob3IKKwkgKiB0aGUgb3RoZXIgYnJhbmNoIHRoaXMgYnJhbmNoIGJ1aWxkcyB1cG9uKSBjb250YWlucyB0aGUKKwkgKiBicmFuY2gsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGJyYW5jaCBoYXMgYWxyZWFkeSBiZWVuIG1lcmdlZAorCSAqIHNhZmVseSB0byBIRUFEIChvciB0aGUgb3RoZXIgYnJhbmNoKS4KKwkgKi8KKwlzdHJ1Y3QgY29tbWl0ICpyZWZlcmVuY2VfcmV2ID0gTlVMTDsKKwljb25zdCBjaGFyICpyZWZlcmVuY2VfbmFtZSA9IE5VTEw7CisJaW50IG1lcmdlZDsKKworCWlmIChraW5kID09IFJFRl9MT0NBTF9CUkFOQ0gpIHsKKwkJc3RydWN0IGJyYW5jaCAqYnJhbmNoID0gYnJhbmNoX2dldChuYW1lKTsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCQlpZiAoYnJhbmNoICYmCisJCSAgICBicmFuY2gtPm1lcmdlICYmCisJCSAgICBicmFuY2gtPm1lcmdlWzBdICYmCisJCSAgICBicmFuY2gtPm1lcmdlWzBdLT5kc3QgJiYKKwkJICAgIChyZWZlcmVuY2VfbmFtZSA9CisJCSAgICAgcmVzb2x2ZV9yZWYoYnJhbmNoLT5tZXJnZVswXS0+ZHN0LCBzaGExLCAxLCBOVUxMKSkgIT0gTlVMTCkKKwkJCXJlZmVyZW5jZV9yZXYgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShzaGExKTsKKwl9CisJaWYgKCFyZWZlcmVuY2VfcmV2KQorCQlyZWZlcmVuY2VfcmV2ID0gaGVhZF9yZXY7CisKKwltZXJnZWQgPSBpbl9tZXJnZV9iYXNlcyhyZXYsICZyZWZlcmVuY2VfcmV2LCAxKTsKKworCS8qCisJICogQWZ0ZXIgdGhlIHNhZmV0eSB2YWx2ZSBpcyBmdWxseSByZWRlZmluZWQgdG8gImNoZWNrIHdpdGgKKwkgKiB1cHN0cmVhbSwgaWYgYW55LCBvdGhlcndpc2Ugd2l0aCBIRUFEIiwgd2Ugc2hvdWxkIGp1c3QKKwkgKiByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgaW5fbWVyZ2VfYmFzZXMoKSBhYm92ZSB3aXRob3V0CisJICogYW55IG9mIHRoZSBmb2xsb3dpbmcgY29kZSwgYnV0IGR1cmluZyB0aGUgdHJhbnNpdGlvbiBwZXJpb2QsCisJICogYSBnZW50bGUgcmVtaW5kZXIgaXMgaW4gb3JkZXIuCisJICovCisJaWYgKChoZWFkX3JldiAhPSByZWZlcmVuY2VfcmV2KSAmJgorCSAgICBpbl9tZXJnZV9iYXNlcyhyZXYsICZoZWFkX3JldiwgMSkgIT0gbWVyZ2VkKSB7CisJCWlmIChtZXJnZWQpCisJCQl3YXJuaW5nKCJkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGhhcyBiZWVuIG1lcmdlZCB0b1xuIgorCQkJCSIgICAgICAgICAnJXMnLCBidXQgaXQgaXMgbm90IHlldCBtZXJnZWQgdG8gSEVBRC4iLAorCQkJCW5hbWUsIHJlZmVyZW5jZV9uYW1lKTsKKwkJZWxzZQorCQkJd2FybmluZygibm90IGRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaXMgbm90IHlldCBtZXJnZWQgdG9cbiIKKwkJCQkiICAgICAgICAgJyVzJywgZXZlbiB0aG91Z2ggaXQgaXMgbWVyZ2VkIHRvIEhFQUQuIiwKKwkJCQluYW1lLCByZWZlcmVuY2VfbmFtZSk7CisJfQorCXJldHVybiBtZXJnZWQ7Cit9CisKIHN0YXRpYyBpbnQgZGVsZXRlX2JyYW5jaGVzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgaW50IGZvcmNlLCBpbnQga2luZHMpCiB7Ci0Jc3RydWN0IGNvbW1pdCAqcmV2LCAqaGVhZF9yZXYgPSBoZWFkX3JldjsKKwlzdHJ1Y3QgY29tbWl0ICpyZXYsICpoZWFkX3JldiA9IE5VTEw7CiAJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKIAljaGFyICpuYW1lID0gTlVMTDsKIAljb25zdCBjaGFyICpmbXQsICpyZW1vdGU7CkBAIC0xNDYsMTUgKzE5OSw4IEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCS8qIFRoaXMgY2hlY2tzIHdoZXRoZXIgdGhlIG1lcmdlIGJhc2VzIG9mIGJyYW5jaCBhbmQKLQkJICogSEVBRCBjb250YWlucyBicmFuY2ggLS0gd2hpY2ggbWVhbnMgdGhhdCB0aGUgSEVBRAotCQkgKiBjb250YWlucyBldmVyeXRoaW5nIGluIGJvdGguCi0JCSAqLwotCi0JCWlmICghZm9yY2UgJiYKLQkJICAgICFpbl9tZXJnZV9iYXNlcyhyZXYsICZoZWFkX3JldiwgMSkpIHsKLQkJCWVycm9yKCJUaGUgYnJhbmNoICclcycgaXMgbm90IGFuIGFuY2VzdG9yIG9mICIKLQkJCSAgICAgICJ5b3VyIGN1cnJlbnQgSEVBRC5cbiIKKwkJaWYgKCFmb3JjZSAmJiAhYnJhbmNoX21lcmdlZChraW5kcywgYm5hbWUuYnVmLCByZXYsIGhlYWRfcmV2KSkgeworCQkJZXJyb3IoIlRoZSBicmFuY2ggJyVzJyBpcyBub3QgZnVsbHkgbWVyZ2VkLlxuIgogCQkJICAgICAgIklmIHlvdSBhcmUgc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgaXQsICIKIAkJCSAgICAgICJydW4gJ2dpdCBicmFuY2ggLUQgJXMnLiIsIGJuYW1lLmJ1ZiwgYm5hbWUuYnVmKTsKIAkJCXJldCA9IDE7CkBAIC0zODcsOCArNDMzLDkgQEAKIAogCQljb21taXQgPSBpdGVtLT5jb21taXQ7CiAJCWlmIChjb21taXQgJiYgIXBhcnNlX2NvbW1pdChjb21taXQpKSB7CisJCQlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgY3R4ID0gezB9OwogCQkJcHJldHR5X3ByaW50X2NvbW1pdChDTUlUX0ZNVF9PTkVMSU5FLCBjb21taXQsCi0JCQkJCSAgICAmc3ViamVjdCwgMCwgTlVMTCwgTlVMTCwgMCwgMCk7CisJCQkJCSAgICAmc3ViamVjdCwgJmN0eCk7CiAJCQlzdWIgPSBzdWJqZWN0LmJ1ZjsKIAkJfQogCkBAIC01NTksOCArNjA2LDEwIEBACiAJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CiAJCU9QVF9HUk9VUCgiR2VuZXJpYyBvcHRpb25zIiksCiAJCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSksCi0JCU9QVF9TRVRfSU5UKCAwICwgInRyYWNrIiwgICZ0cmFjaywgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LXB1bGwoMSkpIiwKKwkJT1BUX1NFVF9JTlQoJ3QnLCAidHJhY2siLCAgJnRyYWNrLCAic2V0IHVwIHRyYWNraW5nIG1vZGUgKHNlZSBnaXQtcHVsbCgxKSkiLAogCQkJQlJBTkNIX1RSQUNLX0VYUExJQ0lUKSwKKwkJT1BUX1NFVF9JTlQoIDAsICJzZXQtdXBzdHJlYW0iLCAgJnRyYWNrLCAiY2hhbmdlIHVwc3RyZWFtIGluZm8iLAorCQkJQlJBTkNIX1RSQUNLX09WRVJSSURFKSwKIAkJT1BUX0JPT0xFQU4oIDAgLCAiY29sb3IiLCAgJmJyYW5jaF91c2VfY29sb3IsICJ1c2UgY29sb3JlZCBvdXRwdXQiKSwKIAkJT1BUX1NFVF9JTlQoJ3InLCBOVUxMLCAgICAgJmtpbmRzLCAiYWN0IG9uIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIsCiAJCQlSRUZfUkVNT1RFX0JSQU5DSCksCkBAIC01ODYsNyArNjM1LDcgQEAKIAkJT1BUX0JJVCgnbScsIE5VTEwsICZyZW5hbWUsICJtb3ZlL3JlbmFtZSBhIGJyYW5jaCBhbmQgaXRzIHJlZmxvZyIsIDEpLAogCQlPUFRfQklUKCdNJywgTlVMTCwgJnJlbmFtZSwgIm1vdmUvcmVuYW1lIGEgYnJhbmNoLCBldmVuIGlmIHRhcmdldCBleGlzdHMiLCAyKSwKIAkJT1BUX0JPT0xFQU4oJ2wnLCBOVUxMLCAmcmVmbG9nLCAiY3JlYXRlIHRoZSBicmFuY2gncyByZWZsb2ciKSwKLQkJT1BUX0JPT0xFQU4oJ2YnLCBOVUxMLCAmZm9yY2VfY3JlYXRlLCAiZm9yY2UgY3JlYXRpb24gKHdoZW4gYWxyZWFkeSBleGlzdHMpIiksCisJCU9QVF9CT09MRUFOKCdmJywgImZvcmNlIiwgJmZvcmNlX2NyZWF0ZSwgImZvcmNlIGNyZWF0aW9uICh3aGVuIGFscmVhZHkgZXhpc3RzKSIpLAogCQl7CiAJCQlPUFRJT05fQ0FMTEJBQ0ssIDAsICJuby1tZXJnZWQiLCAmbWVyZ2VfZmlsdGVyX3JlZiwKIAkJCSJjb21taXQiLCAicHJpbnQgb25seSBub3QgbWVyZ2VkIGJyYW5jaGVzIiwKQEAgLTYyMiw3ICs2NzEsOCBAQAogCX0KIAloYXNoY3B5KG1lcmdlX2ZpbHRlcl9yZWYsIGhlYWRfc2hhMSk7CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBidWlsdGluX2JyYW5jaF91c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBidWlsdGluX2JyYW5jaF91c2FnZSwKKwkJCSAgICAgMCk7CiAJaWYgKCEhZGVsZXRlICsgISFyZW5hbWUgKyAhIWZvcmNlX2NyZWF0ZSA+IDEpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX2JyYW5jaF91c2FnZSwgb3B0aW9ucyk7CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4tYnVuZGxlLmMgYi9idWlsdGluLWJ1bmRsZS5jCmluZGV4IDliNTgxNTIuLjIwMDZjYzUgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tYnVuZGxlLmMKKysrIGIvYnVpbHRpbi1idW5kbGUuYwpAQCAtOSw3ICs5LDExIEBACiAgKiBidW5kbGUgc3VwcG9ydGluZyAiZmV0Y2giLCAicHVsbCIsIGFuZCAibHMtcmVtb3RlIi4KICAqLwogCi1zdGF0aWMgY29uc3QgY2hhciAqYnVuZGxlX3VzYWdlPSJnaXQgYnVuZGxlIChjcmVhdGUgPGJ1bmRsZT4gPGdpdCByZXYtbGlzdCBhcmdzPiB8IHZlcmlmeSA8YnVuZGxlPiB8IGxpc3QtaGVhZHMgPGJ1bmRsZT4gW3JlZm5hbWVdLi4uIHwgdW5idW5kbGUgPGJ1bmRsZT4gW3JlZm5hbWVdLi4uICkiOworc3RhdGljIGNvbnN0IGNoYXIgYnVpbHRpbl9idW5kbGVfdXNhZ2VbXSA9CisgICJnaXQgYnVuZGxlIGNyZWF0ZSA8ZmlsZT4gPGdpdC1yZXYtbGlzdCBhcmdzPlxuIgorICAiICAgb3I6IGdpdCBidW5kbGUgdmVyaWZ5IDxmaWxlPlxuIgorICAiICAgb3I6IGdpdCBidW5kbGUgbGlzdC1oZWFkcyA8ZmlsZT4gW3JlZm5hbWUuLi5dXG4iCisgICIgICBvcjogZ2l0IGJ1bmRsZSB1bmJ1bmRsZSA8ZmlsZT4gW3JlZm5hbWUuLi5dIjsKIAogaW50IGNtZF9idW5kbGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CkBAIC0yMCw3ICsyNCw3IEBACiAJY2hhciBidWZmZXJbUEFUSF9NQVhdOwogCiAJaWYgKGFyZ2MgPCAzKQotCQl1c2FnZShidW5kbGVfdXNhZ2UpOworCQl1c2FnZShidWlsdGluX2J1bmRsZV91c2FnZSk7CiAKIAljbWQgPSBhcmd2WzFdOwogCWJ1bmRsZV9maWxlID0gYXJndlsyXTsKQEAgLTU5LDUgKzYzLDUgQEAKIAkJcmV0dXJuICEhdW5idW5kbGUoJmhlYWRlciwgYnVuZGxlX2ZkKSB8fAogCQkJbGlzdF9idW5kbGVfcmVmcygmaGVhZGVyLCBhcmdjLCBhcmd2KTsKIAl9IGVsc2UKLQkJdXNhZ2UoYnVuZGxlX3VzYWdlKTsKKwkJdXNhZ2UoYnVpbHRpbl9idW5kbGVfdXNhZ2UpOwogfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1jYXQtZmlsZS5jIGIvYnVpbHRpbi1jYXQtZmlsZS5jCmluZGV4IDQzZmZlN2YuLmE5MzNlYWEgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tY2F0LWZpbGUuYworKysgYi9idWlsdGluLWNhdC1maWxlLmMKQEAgLTIxOSw5ICsyMTksMTAgQEAKIAkJCSAgICAiZXhpdCB3aXRoIHplcm8gd2hlbiB0aGVyZSdzIG5vIGVycm9yIiwgJ2UnKSwKIAkJT1BUX1NFVF9JTlQoJ3AnLCBOVUxMLCAmb3B0LCAicHJldHR5LXByaW50IG9iamVjdCdzIGNvbnRlbnQiLCAncCcpLAogCQlPUFRfU0VUX0lOVCgwLCAiYmF0Y2giLCAmYmF0Y2gsCi0JCQkgICAgInNob3cgaW5mbyBhbmQgY29udGVudCBvZiBvYmplY3RzIGZlZWRlZCBvbiBzdGRpbiIsIEJBVENIKSwKKwkJCSAgICAic2hvdyBpbmZvIGFuZCBjb250ZW50IG9mIG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IiwKKwkJCSAgICBCQVRDSCksCiAJCU9QVF9TRVRfSU5UKDAsICJiYXRjaC1jaGVjayIsICZiYXRjaCwKLQkJCSAgICAic2hvdyBpbmZvIGFib3V0IG9iamVjdHMgZmVlZGVkIG9uIHN0ZGluIiwKKwkJCSAgICAic2hvdyBpbmZvIGFib3V0IG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IiwKIAkJCSAgICBCQVRDSF9DSEVDSyksCiAJCU9QVF9FTkQoKQogCX07CkBAIC0yMzEsNyArMjMyLDcgQEAKIAlpZiAoYXJnYyAhPSAzICYmIGFyZ2MgIT0gMikKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKGNhdF9maWxlX3VzYWdlLCBvcHRpb25zKTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGNhdF9maWxlX3VzYWdlLCAwKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGNhdF9maWxlX3VzYWdlLCAwKTsKIAogCWlmIChvcHQpIHsKIAkJaWYgKGFyZ2MgPT0gMSkKZGlmZiAtLWdpdCBhL2J1aWx0aW4tY2hlY2stYXR0ci5jIGIvYnVpbHRpbi1jaGVjay1hdHRyLmMKaW5kZXggMTVhMDRiNy4uMzAxNmQyOSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1jaGVjay1hdHRyLmMKKysrIGIvYnVpbHRpbi1jaGVjay1hdHRyLmMKQEAgLTY5LDggKzY5LDggQEAKIAlpbnQgY250LCBpLCBkb3VibGVkYXNoOwogCWNvbnN0IGNoYXIgKmVycnN0ciA9IE5VTEw7CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBjaGVja19hdHRyX29wdGlvbnMsIGNoZWNrX2F0dHJfdXNhZ2UsCi0JCVBBUlNFX09QVF9LRUVQX0RBU0hEQVNIKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGNoZWNrX2F0dHJfb3B0aW9ucywKKwkJCSAgICAgY2hlY2tfYXR0cl91c2FnZSwgUEFSU0VfT1BUX0tFRVBfREFTSERBU0gpOwogCWlmICghYXJnYykKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKGNoZWNrX2F0dHJfdXNhZ2UsIGNoZWNrX2F0dHJfb3B0aW9ucyk7CiAKQEAgLTEwNiw3ICsxMDYsNyBAQAogCQljb25zdCBjaGFyICpuYW1lOwogCQlzdHJ1Y3QgZ2l0X2F0dHIgKmE7CiAJCW5hbWUgPSBhcmd2W2ldOwotCQlhID0gZ2l0X2F0dHIobmFtZSwgc3RybGVuKG5hbWUpKTsKKwkJYSA9IGdpdF9hdHRyKG5hbWUpOwogCQlpZiAoIWEpCiAJCQlyZXR1cm4gZXJyb3IoIiVzOiBub3QgYSB2YWxpZCBhdHRyaWJ1dGUgbmFtZSIsIG5hbWUpOwogCQljaGVja1tpXS5hdHRyID0gYTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tY2hlY2stcmVmLWZvcm1hdC5jIGIvYnVpbHRpbi1jaGVjay1yZWYtZm9ybWF0LmMKaW5kZXggZjkzODFlMC4uYjEwNmM2NSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1jaGVjay1yZWYtZm9ybWF0LmMKKysrIGIvYnVpbHRpbi1jaGVjay1yZWYtZm9ybWF0LmMKQEAgLTcsOCArNywzNyBAQAogI2luY2x1ZGUgImJ1aWx0aW4uaCIKICNpbmNsdWRlICJzdHJidWYuaCIKIAorc3RhdGljIGNvbnN0IGNoYXIgYnVpbHRpbl9jaGVja19yZWZfZm9ybWF0X3VzYWdlW10gPQorImdpdCBjaGVjay1yZWYtZm9ybWF0IFstLXByaW50XSA8cmVmbmFtZT5cbiIKKyIgICBvcjogZ2l0IGNoZWNrLXJlZi1mb3JtYXQgLS1icmFuY2ggPGJyYW5jaG5hbWUtc2hvcnRoYW5kPiI7CisKKy8qCisgKiBSZXBsYWNlIGVhY2ggcnVuIG9mIGFkamFjZW50IHNsYXNoZXMgaW4gc3JjIHdpdGggYSBzaW5nbGUgc2xhc2gsCisgKiBhbmQgd3JpdGUgdGhlIHJlc3VsdCB0byBkc3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIG5vcm1hbGl6ZV9wYXRoX2NvcHkoKSwgYnV0IHN0cmlwcGVkIGRvd24KKyAqIHRvIG1lZXQgY2hlY2tfcmVmX2Zvcm1hdCdzIHNpbXBsZXIgbmVlZHMuCisgKi8KK3N0YXRpYyB2b2lkIGNvbGxhcHNlX3NsYXNoZXMoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMpCit7CisJY2hhciBjaDsKKwljaGFyIHByZXYgPSAnXDAnOworCisJd2hpbGUgKChjaCA9ICpzcmMrKykgIT0gJ1wwJykgeworCQlpZiAocHJldiA9PSAnLycgJiYgY2ggPT0gcHJldikKKwkJCWNvbnRpbnVlOworCisJCSpkc3QrKyA9IGNoOworCQlwcmV2ID0gY2g7CisJfQorCSpkc3QgPSAnXDAnOworfQorCiBpbnQgY21kX2NoZWNrX3JlZl9mb3JtYXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZShidWlsdGluX2NoZWNrX3JlZl9mb3JtYXRfdXNhZ2UpOworCiAJaWYgKGFyZ2MgPT0gMyAmJiAhc3RyY21wKGFyZ3ZbMV0sICItLWJyYW5jaCIpKSB7CiAJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKIApAQCAtMTcsNyArNDYsMTYgQEAKIAkJcHJpbnRmKCIlc1xuIiwgc2IuYnVmICsgMTEpOwogCQlleGl0KDApOwogCX0KKwlpZiAoYXJnYyA9PSAzICYmICFzdHJjbXAoYXJndlsxXSwgIi0tcHJpbnQiKSkgeworCQljaGFyICpyZWZuYW1lID0geG1hbGxvYyhzdHJsZW4oYXJndlsyXSkgKyAxKTsKKworCQlpZiAoY2hlY2tfcmVmX2Zvcm1hdChhcmd2WzJdKSkKKwkJCWV4aXQoMSk7CisJCWNvbGxhcHNlX3NsYXNoZXMocmVmbmFtZSwgYXJndlsyXSk7CisJCXByaW50ZigiJXNcbiIsIHJlZm5hbWUpOworCQlleGl0KDApOworCX0KIAlpZiAoYXJnYyAhPSAyKQotCQl1c2FnZSgiZ2l0IGNoZWNrLXJlZi1mb3JtYXQgcmVmbmFtZSIpOworCQl1c2FnZShidWlsdGluX2NoZWNrX3JlZl9mb3JtYXRfdXNhZ2UpOwogCXJldHVybiAhIWNoZWNrX3JlZl9mb3JtYXQoYXJndlsxXSk7CiB9CmRpZmYgLS1naXQgYS9idWlsdGluLWNoZWNrb3V0LWluZGV4LmMgYi9idWlsdGluLWNoZWNrb3V0LWluZGV4LmMKaW5kZXggYWZlMzVlMi4uYTdhNWVlMSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1jaGVja291dC1pbmRleC5jCisrKyBiL2J1aWx0aW4tY2hlY2tvdXQtaW5kZXguYwpAQCAtMjQ5LDcgKzI0OSw3IEBACiAJCWRpZSgiaW52YWxpZCBjYWNoZSIpOwogCX0KIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGJ1aWx0aW5fY2hlY2tvdXRfaW5kZXhfb3B0aW9ucywKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fY2hlY2tvdXRfaW5kZXhfb3B0aW9ucywKIAkJCWJ1aWx0aW5fY2hlY2tvdXRfaW5kZXhfdXNhZ2UsIDApOwogCXN0YXRlLmZvcmNlID0gZm9yY2U7CiAJc3RhdGUucXVpZXQgPSBxdWlldDsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tY2hlY2tvdXQuYyBiL2J1aWx0aW4tY2hlY2tvdXQuYwppbmRleCBlZGVmYjcwLi5jNWFiNzgzIDEwMDY0NAotLS0gYS9idWlsdGluLWNoZWNrb3V0LmMKKysrIGIvYnVpbHRpbi1jaGVja291dC5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSAiYmxvYi5oIgogI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgogI2luY2x1ZGUgImxsLW1lcmdlLmgiCisjaW5jbHVkZSAicmVzb2x2ZS11bmRvLmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2hlY2tvdXRfdXNhZ2VbXSA9IHsKIAkiZ2l0IGNoZWNrb3V0IFtvcHRpb25zXSA8YnJhbmNoPiIsCkBAIC0xNjcsNyArMTY4LDcgQEAKIAlmaWxsX21tKGFjdGl2ZV9jYWNoZVtwb3MrMl0tPnNoYTEsICZ0aGVpcnMpOwogCiAJc3RhdHVzID0gbGxfbWVyZ2UoJnJlc3VsdF9idWYsIHBhdGgsICZhbmNlc3RvciwKLQkJCSAgJm91cnMsICJvdXJzIiwgJnRoZWlycywgInRoZWlycyIsIDEpOworCQkJICAmb3VycywgIm91cnMiLCAmdGhlaXJzLCAidGhlaXJzIiwgMCk7CiAJZnJlZShhbmNlc3Rvci5wdHIpOwogCWZyZWUob3Vycy5wdHIpOwogCWZyZWUodGhlaXJzLnB0cik7CkBAIC0yMzQsNiArMjM1LDEwIEBACiAJaWYgKHJlcG9ydF9wYXRoX2Vycm9yKHBzX21hdGNoZWQsIHBhdGhzcGVjLCAwKSkKIAkJcmV0dXJuIDE7CiAKKwkvKiAiY2hlY2tvdXQgLW0gcGF0aCIgdG8gcmVjcmVhdGUgY29uZmxpY3RlZCBzdGF0ZSAqLworCWlmIChvcHRzLT5tZXJnZSkKKwkJdW5tZXJnZV9jYWNoZShwYXRoc3BlYyk7CisKIAkvKiBBbnkgdW5tZXJnZWQgcGF0aHM/ICovCiAJZm9yIChwb3MgPSAwOyBwb3MgPCBhY3RpdmVfbnI7IHBvcysrKSB7CiAJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKQEAgLTMwMiw4ICszMDcsOSBAQAogc3RhdGljIHZvaWQgZGVzY3JpYmVfZGV0YWNoZWRfaGVhZChjaGFyICptc2csIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKIHsKIAlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IGN0eCA9IHswfTsKIAlwYXJzZV9jb21taXQoY29tbWl0KTsKLQlwcmV0dHlfcHJpbnRfY29tbWl0KENNSVRfRk1UX09ORUxJTkUsIGNvbW1pdCwgJnNiLCAwLCBOVUxMLCBOVUxMLCAwLCAwKTsKKwlwcmV0dHlfcHJpbnRfY29tbWl0KENNSVRfRk1UX09ORUxJTkUsIGNvbW1pdCwgJnNiLCAmY3R4KTsKIAlmcHJpbnRmKHN0ZGVyciwgIiVzICVzLi4uICVzXG4iLCBtc2csCiAJCWZpbmRfdW5pcXVlX2FiYnJldihjb21taXQtPm9iamVjdC5zaGExLCBERUZBVUxUX0FCQlJFViksIHNiLmJ1Zik7CiAJc3RyYnVmX3JlbGVhc2UoJnNiKTsKQEAgLTM2OSw2ICszNzUsNyBAQAogCWlmIChyZWFkX2NhY2hlX3ByZWxvYWQoTlVMTCkgPCAwKQogCQlyZXR1cm4gZXJyb3IoImNvcnJ1cHQgaW5kZXggZmlsZSIpOwogCisJcmVzb2x2ZV91bmRvX2NsZWFyKCk7CiAJaWYgKG9wdHMtPmZvcmNlKSB7CiAJCXJldCA9IHJlc2V0X3RyZWUobmV3LT5jb21taXQtPnRyZWUsIG9wdHMsIDEpOwogCQlpZiAocmV0KQpAQCAtNDAyLDcgKzQwOSw5IEBACiAJCXRvcHRzLmRpciA9IHhjYWxsb2MoMSwgc2l6ZW9mKCp0b3B0cy5kaXIpKTsKIAkJdG9wdHMuZGlyLT5mbGFncyB8PSBESVJfU0hPV19JR05PUkVEOwogCQl0b3B0cy5kaXItPmV4Y2x1ZGVfcGVyX2RpciA9ICIuZ2l0aWdub3JlIjsKLQkJdHJlZSA9IHBhcnNlX3RyZWVfaW5kaXJlY3Qob2xkLT5jb21taXQtPm9iamVjdC5zaGExKTsKKwkJdHJlZSA9IHBhcnNlX3RyZWVfaW5kaXJlY3Qob2xkLT5jb21taXQgPworCQkJCQkgICBvbGQtPmNvbW1pdC0+b2JqZWN0LnNoYTEgOgorCQkJCQkgICAodW5zaWduZWQgY2hhciAqKUVNUFRZX1RSRUVfU0hBMV9CSU4pOwogCQlpbml0X3RyZWVfZGVzYygmdHJlZXNbMF0sIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7CiAJCXRyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KG5ldy0+Y29tbWl0LT5vYmplY3Quc2hhMSk7CiAJCWluaXRfdHJlZV9kZXNjKCZ0cmVlc1sxXSwgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKTsKQEAgLTQ3OSw2ICs0ODgsMjAgQEAKIAlzdHJidWZfcmVsZWFzZSgmc2IpOwogfQogCitzdGF0aWMgdm9pZCBkZXRhY2hfYWR2aWNlKGNvbnN0IGNoYXIgKm9sZF9wYXRoLCBjb25zdCBjaGFyICpuZXdfbmFtZSkKK3sKKwljb25zdCBjaGFyIGZtdFtdID0KKwkiTm90ZTogY2hlY2tpbmcgb3V0ICclcycuXG5cbiIKKwkiWW91IGFyZSBpbiAnZGV0YWNoZWQgSEVBRCcgc3RhdGUuIFlvdSBjYW4gbG9vayBhcm91bmQsIG1ha2UgZXhwZXJpbWVudGFsXG4iCisJImNoYW5nZXMgYW5kIGNvbW1pdCB0aGVtLCBhbmQgeW91IGNhbiBkaXNjYXJkIGFueSBjb21taXRzIHlvdSBtYWtlIGluIHRoaXNcbiIKKwkic3RhdGUgd2l0aG91dCBpbXBhY3RpbmcgYW55IGJyYW5jaGVzIGJ5IHBlcmZvcm1pbmcgYW5vdGhlciBjaGVja291dC5cblxuIgorCSJJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIHRvIHJldGFpbiBjb21taXRzIHlvdSBjcmVhdGUsIHlvdSBtYXlcbiIKKwkiZG8gc28gKG5vdyBvciBsYXRlcikgYnkgdXNpbmcgLWIgd2l0aCB0aGUgY2hlY2tvdXQgY29tbWFuZCBhZ2Fpbi4gRXhhbXBsZTpcblxuIgorCSIgIGdpdCBjaGVja291dCAtYiBuZXdfYnJhbmNoX25hbWVcblxuIjsKKworCWZwcmludGYoc3RkZXJyLCBmbXQsIG5ld19uYW1lKTsKK30KKwogc3RhdGljIHZvaWQgdXBkYXRlX3JlZnNfZm9yX3N3aXRjaChzdHJ1Y3QgY2hlY2tvdXRfb3B0cyAqb3B0cywKIAkJCQkgICBzdHJ1Y3QgYnJhbmNoX2luZm8gKm9sZCwKIAkJCQkgICBzdHJ1Y3QgYnJhbmNoX2luZm8gKm5ldykKQEAgLTUxMyw4ICs1MzYsOCBAQAogCQl1cGRhdGVfcmVmKG1zZy5idWYsICJIRUFEIiwgbmV3LT5jb21taXQtPm9iamVjdC5zaGExLCBOVUxMLAogCQkJICAgUkVGX05PREVSRUYsIERJRV9PTl9FUlIpOwogCQlpZiAoIW9wdHMtPnF1aWV0KSB7Ci0JCQlpZiAob2xkLT5wYXRoKQotCQkJCWZwcmludGYoc3RkZXJyLCAiTm90ZTogbW92aW5nIHRvICclcycgd2hpY2ggaXNuJ3QgYSBsb2NhbCBicmFuY2hcbklmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggZnJvbSB0aGlzIGNoZWNrb3V0LCB5b3UgbWF5IGRvIHNvXG4obm93IG9yIGxhdGVyKSBieSB1c2luZyAtYiB3aXRoIHRoZSBjaGVja291dCBjb21tYW5kIGFnYWluLiBFeGFtcGxlOlxuICBnaXQgY2hlY2tvdXQgLWIgPG5ld19icmFuY2hfbmFtZT5cbiIsIG5ldy0+bmFtZSk7CisJCQlpZiAob2xkLT5wYXRoICYmIGFkdmljZV9kZXRhY2hlZF9oZWFkKQorCQkJCWRldGFjaF9hZHZpY2Uob2xkLT5wYXRoLCBuZXctPm5hbWUpOwogCQkJZGVzY3JpYmVfZGV0YWNoZWRfaGVhZCgiSEVBRCBpcyBub3cgYXQiLCBuZXctPmNvbW1pdCk7CiAJCX0KIAl9CkBAIC01NDcsMTQgKzU3MCw2IEBACiAJCXBhcnNlX2NvbW1pdChuZXctPmNvbW1pdCk7CiAJfQogCi0JaWYgKCFvbGQuY29tbWl0ICYmICFvcHRzLT5mb3JjZSkgewotCQlpZiAoIW9wdHMtPnF1aWV0KSB7Ci0JCQl3YXJuaW5nKCJZb3UgYXBwZWFyIHRvIGJlIG9uIGEgYnJhbmNoIHlldCB0byBiZSBib3JuLiIpOwotCQkJd2FybmluZygiRm9yY2luZyBjaGVja291dCBvZiAlcy4iLCBuZXctPm5hbWUpOwotCQl9Ci0JCW9wdHMtPmZvcmNlID0gMTsKLQl9Ci0KIAlyZXQgPSBtZXJnZV93b3JraW5nX3RyZWUob3B0cywgJm9sZCwgbmV3KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtNTc4LDYgKzU5Myw0NyBAQAogCXJldHVybiBnaXRfeG1lcmdlX2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CiB9CiAKK3N0YXRpYyBpbnQgaW50ZXJhY3RpdmVfY2hlY2tvdXQoY29uc3QgY2hhciAqcmV2aXNpb24sIGNvbnN0IGNoYXIgKipwYXRoc3BlYywKKwkJCQlzdHJ1Y3QgY2hlY2tvdXRfb3B0cyAqb3B0cykKK3sKKwlyZXR1cm4gcnVuX2FkZF9pbnRlcmFjdGl2ZShyZXZpc2lvbiwgIi0tcGF0Y2g9Y2hlY2tvdXQiLCBwYXRoc3BlYyk7Cit9CisKK3N0cnVjdCB0cmFja2luZ19uYW1lX2RhdGEgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY2hhciAqcmVtb3RlOworCWludCB1bmlxdWU7Cit9OworCitzdGF0aWMgaW50IGNoZWNrX3RyYWNraW5nX25hbWUoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCSAgICAgICBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHRyYWNraW5nX25hbWVfZGF0YSAqY2IgPSBjYl9kYXRhOworCWNvbnN0IGNoYXIgKnNsYXNoOworCisJaWYgKHByZWZpeGNtcChyZWZuYW1lLCAicmVmcy9yZW1vdGVzLyIpKQorCQlyZXR1cm4gMDsKKwlzbGFzaCA9IHN0cmNocihyZWZuYW1lICsgMTMsICcvJyk7CisJaWYgKCFzbGFzaCB8fCBzdHJjbXAoc2xhc2ggKyAxLCBjYi0+bmFtZSkpCisJCXJldHVybiAwOworCWlmIChjYi0+cmVtb3RlKSB7CisJCWNiLT51bmlxdWUgPSAwOworCQlyZXR1cm4gMDsKKwl9CisJY2ItPnJlbW90ZSA9IHhzdHJkdXAocmVmbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICp1bmlxdWVfdHJhY2tpbmdfbmFtZShjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCB0cmFja2luZ19uYW1lX2RhdGEgY2JfZGF0YSA9IHsgbmFtZSwgTlVMTCwgMSB9OworCWZvcl9lYWNoX3JlZihjaGVja190cmFja2luZ19uYW1lLCAmY2JfZGF0YSk7CisJaWYgKGNiX2RhdGEudW5pcXVlKQorCQlyZXR1cm4gY2JfZGF0YS5yZW1vdGU7CisJZnJlZShjYl9kYXRhLnJlbW90ZSk7CisJcmV0dXJuIE5VTEw7Cit9CisKIGludCBjbWRfY2hlY2tvdXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CiAJc3RydWN0IGNoZWNrb3V0X29wdHMgb3B0czsKQEAgLTU4Niw2ICs2NDIsOCBAQAogCXN0cnVjdCBicmFuY2hfaW5mbyBuZXc7CiAJc3RydWN0IHRyZWUgKnNvdXJjZV90cmVlID0gTlVMTDsKIAljaGFyICpjb25mbGljdF9zdHlsZSA9IE5VTEw7CisJaW50IHBhdGNoX21vZGUgPSAwOworCWludCBkd2ltX25ld19sb2NhbF9icmFuY2ggPSAxOwogCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0gewogCQlPUFRfX1FVSUVUKCZvcHRzLnF1aWV0KSwKIAkJT1BUX1NUUklORygnYicsIE5VTEwsICZvcHRzLm5ld19icmFuY2gsICJuZXcgYnJhbmNoIiwgImJyYW5jaCIpLApAQCAtNTk2LDEwICs2NTQsMTQgQEAKIAkJCSAgICAyKSwKIAkJT1BUX1NFVF9JTlQoJzMnLCAidGhlaXJzIiwgJm9wdHMud3JpdGVvdXRfc3RhZ2UsICJzdGFnZSIsCiAJCQkgICAgMyksCi0JCU9QVF9CT09MRUFOKCdmJywgTlVMTCwgJm9wdHMuZm9yY2UsICJmb3JjZSIpLAorCQlPUFRfQk9PTEVBTignZicsICJmb3JjZSIsICZvcHRzLmZvcmNlLCAiZm9yY2UiKSwKIAkJT1BUX0JPT0xFQU4oJ20nLCAibWVyZ2UiLCAmb3B0cy5tZXJnZSwgIm1lcmdlIiksCiAJCU9QVF9TVFJJTkcoMCwgImNvbmZsaWN0IiwgJmNvbmZsaWN0X3N0eWxlLCAic3R5bGUiLAogCQkJICAgImNvbmZsaWN0IHN0eWxlIChtZXJnZSBvciBkaWZmMykiKSwKKwkJT1BUX0JPT0xFQU4oJ3AnLCAicGF0Y2giLCAmcGF0Y2hfbW9kZSwgInNlbGVjdCBodW5rcyBpbnRlcmFjdGl2ZWx5IiksCisJCXsgT1BUSU9OX0JPT0xFQU4sIDAsICJndWVzcyIsICZkd2ltX25ld19sb2NhbF9icmFuY2gsIE5VTEwsCisJCSAgInNlY29uZCBndWVzcyAnZ2l0IGNoZWNrb3V0IG5vLXN1Y2gtYnJhbmNoJyIsCisJCSAgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX0hJRERFTiB9LAogCQlPUFRfRU5EKCksCiAJfTsKIAlpbnQgaGFzX2Rhc2hfZGFzaDsKQEAgLTYxMSw5ICs2NzMsMTMgQEAKIAogCW9wdHMudHJhY2sgPSBCUkFOQ0hfVFJBQ0tfVU5TUEVDSUZJRUQ7CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBjaGVja291dF91c2FnZSwKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGNoZWNrb3V0X3VzYWdlLAogCQkJICAgICBQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCk7CiAKKwlpZiAocGF0Y2hfbW9kZSAmJiAob3B0cy50cmFjayA+IDAgfHwgb3B0cy5uZXdfYnJhbmNoCisJCQkgICB8fCBvcHRzLm5ld19icmFuY2hfbG9nIHx8IG9wdHMubWVyZ2UgfHwgb3B0cy5mb3JjZSkpCisJCWRpZSAoIi0tcGF0Y2ggaXMgaW5jb21wYXRpYmxlIHdpdGggYWxsIG90aGVyIG9wdGlvbnMiKTsKKwogCS8qIC0tdHJhY2sgd2l0aG91dCAtYiBzaG91bGQgRFdJTSAqLwogCWlmICgwIDwgb3B0cy50cmFjayAmJiAhb3B0cy5uZXdfYnJhbmNoKSB7CiAJCWNvbnN0IGNoYXIgKmFyZ3YwID0gYXJndlswXTsKQEAgLTYyOSw4ICs2OTUsNiBAQAogCQlvcHRzLm5ld19icmFuY2ggPSBhcmd2MCArIDE7CiAJfQogCi0JaWYgKG9wdHMudHJhY2sgPT0gQlJBTkNIX1RSQUNLX1VOU1BFQ0lGSUVEKQotCQlvcHRzLnRyYWNrID0gZ2l0X2JyYW5jaF90cmFjazsKIAlpZiAoY29uZmxpY3Rfc3R5bGUpIHsKIAkJb3B0cy5tZXJnZSA9IDE7IC8qIGltcGxpZWQgKi8KIAkJZ2l0X3htZXJnZV9jb25maWcoIm1lcmdlLmNvbmZsaWN0c3R5bGUiLCBjb25mbGljdF9zdHlsZSwgTlVMTCk7CkBAIC02NTIsNyArNzE2LDE1IEBACiAJICogY2FzZSAzOiBnaXQgY2hlY2tvdXQgPHNvbWV0aGluZz4gWzxwYXRocz5dCiAJICoKIAkgKiAgIFdpdGggbm8gcGF0aHMsIGlmIDxzb21ldGhpbmc+IGlzIGEgY29tbWl0LCB0aGF0IGlzIHRvCi0JICogICBzd2l0Y2ggdG8gdGhlIGJyYW5jaCBvciBkZXRhY2ggSEVBRCBhdCBpdC4KKwkgKiAgIHN3aXRjaCB0byB0aGUgYnJhbmNoIG9yIGRldGFjaCBIRUFEIGF0IGl0LiAgQXMgYSBzcGVjaWFsIGNhc2UsCisJICogICBpZiA8c29tZXRoaW5nPiBpcyBBLi4uQiAobWlzc2luZyBBIG9yIEIgbWVhbnMgSEVBRCBidXQgeW91IGNhbgorCSAqICAgb21pdCBhdCBtb3N0IG9uZSBzaWRlKSwgYW5kIGlmIHRoZXJlIGlzIGEgdW5pcXVlIG1lcmdlIGJhc2UKKwkgKiAgIGJldHdlZW4gQSBhbmQgQiwgQS4uLkIgbmFtZXMgdGhhdCBtZXJnZSBiYXNlLgorCSAqCisJICogICBXaXRoIG5vIHBhdGhzLCBpZiA8c29tZXRoaW5nPiBpcyBfbm90XyBhIGNvbW1pdCwgbm8gLXQgbm9yIC1iCisJICogICB3YXMgZ2l2ZW4sIGFuZCB0aGVyZSBpcyBhIHRyYWNraW5nIGJyYW5jaCB3aG9zZSBuYW1lIGlzCisJICogICA8c29tZXRoaW5nPiBpbiBvbmUgYW5kIG9ubHkgb25lIHJlbW90ZSwgdGhlbiB0aGlzIGlzIGEgc2hvcnQtaGFuZAorCSAqICAgdG8gZm9yayBsb2NhbCA8c29tZXRoaW5nPiBmcm9tIHRoYXQgcmVtb3RlIHRyYWNraW5nIGJyYW5jaC4KIAkgKgogCSAqICAgT3RoZXJ3aXNlIDxzb21ldGhpbmc+IHNoYWxsIG5vdCBiZSBhbWJpZ3VvdXMuCiAJICogICAtIElmIGl0J3MgKm9ubHkqIGEgcmVmZXJlbmNlLCB0cmVhdCBpdCBsaWtlIGNhc2UgKDEpLgpAQCAtNjczLDEwICs3NDUsMjQgQEAKIAkJaWYgKCFzdHJjbXAoYXJnLCAiLSIpKQogCQkJYXJnID0gIkB7LTF9IjsKIAotCQlpZiAoZ2V0X3NoYTEoYXJnLCByZXYpKSB7CisJCWlmIChnZXRfc2hhMV9tYihhcmcsIHJldikpIHsKIAkJCWlmIChoYXNfZGFzaF9kYXNoKSAgICAgICAgICAvKiBjYXNlICgxKSAqLwogCQkJCWRpZSgiaW52YWxpZCByZWZlcmVuY2U6ICVzIiwgYXJnKTsKLQkJCWdvdG8gbm9fcmVmZXJlbmNlOyAgICAgICAgICAvKiBjYXNlICgzIC0+IDIpICovCisJCQlpZiAoIXBhdGNoX21vZGUgJiYKKwkJCSAgICBkd2ltX25ld19sb2NhbF9icmFuY2ggJiYKKwkJCSAgICBvcHRzLnRyYWNrID09IEJSQU5DSF9UUkFDS19VTlNQRUNJRklFRCAmJgorCQkJICAgICFvcHRzLm5ld19icmFuY2ggJiYKKwkJCSAgICAhY2hlY2tfZmlsZW5hbWUoTlVMTCwgYXJnKSAmJgorCQkJICAgIGFyZ2MgPT0gMSkgeworCQkJCWNvbnN0IGNoYXIgKnJlbW90ZSA9IHVuaXF1ZV90cmFja2luZ19uYW1lKGFyZyk7CisJCQkJaWYgKCFyZW1vdGUgfHwgZ2V0X3NoYTEocmVtb3RlLCByZXYpKQorCQkJCQlnb3RvIG5vX3JlZmVyZW5jZTsKKwkJCQlvcHRzLm5ld19icmFuY2ggPSBhcmc7CisJCQkJYXJnID0gcmVtb3RlOworCQkJCS8qIERXSU1tZWQgdG8gY3JlYXRlIGxvY2FsIGJyYW5jaCAqLworCQkJfQorCQkJZWxzZQorCQkJCWdvdG8gbm9fcmVmZXJlbmNlOwogCQl9CiAKIAkJLyogd2UgY2FuJ3QgZW5kIHVwIGJlaW5nIGluICgyKSBhbnltb3JlLCBlYXQgdGhlIGFyZ3VtZW50ICovCkBAIC02ODYsOCArNzcyLDEwIEBACiAJCW5ldy5uYW1lID0gYXJnOwogCQlpZiAoKG5ldy5jb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkocmV2LCAxKSkpIHsKIAkJCXNldHVwX2JyYW5jaF9wYXRoKCZuZXcpOwotCQkJaWYgKHJlc29sdmVfcmVmKG5ldy5wYXRoLCByZXYsIDEsIE5VTEwpKQotCQkJCW5ldy5jb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShyZXYpOworCisJCQlpZiAoKGNoZWNrX3JlZl9mb3JtYXQobmV3LnBhdGgpID09IENIRUNLX1JFRl9GT1JNQVRfT0spICYmCisJCQkgICAgcmVzb2x2ZV9yZWYobmV3LnBhdGgsIHJldiwgMSwgTlVMTCkpCisJCQkJOwogCQkJZWxzZQogCQkJCW5ldy5wYXRoID0gTlVMTDsKIAkJCXBhcnNlX2NvbW1pdChuZXcuY29tbWl0KTsKQEAgLTcxNCwxMiArODAyLDE5IEBACiAJfQogCiBub19yZWZlcmVuY2U6CisKKwlpZiAob3B0cy50cmFjayA9PSBCUkFOQ0hfVFJBQ0tfVU5TUEVDSUZJRUQpCisJCW9wdHMudHJhY2sgPSBnaXRfYnJhbmNoX3RyYWNrOworCiAJaWYgKGFyZ2MpIHsKIAkJY29uc3QgY2hhciAqKnBhdGhzcGVjID0gZ2V0X3BhdGhzcGVjKHByZWZpeCwgYXJndik7CiAKIAkJaWYgKCFwYXRoc3BlYykKIAkJCWRpZSgiaW52YWxpZCBwYXRoIHNwZWNpZmljYXRpb24iKTsKIAorCQlpZiAocGF0Y2hfbW9kZSkKKwkJCXJldHVybiBpbnRlcmFjdGl2ZV9jaGVja291dChuZXcubmFtZSwgcGF0aHNwZWMsICZvcHRzKTsKKwogCQkvKiBDaGVja291dCBwYXRocyAqLwogCQlpZiAob3B0cy5uZXdfYnJhbmNoKSB7CiAJCQlpZiAoYXJnYyA9PSAxKSB7CkBAIC03MzUsNiArODMwLDkgQEAKIAkJcmV0dXJuIGNoZWNrb3V0X3BhdGhzKHNvdXJjZV90cmVlLCBwYXRoc3BlYywgJm9wdHMpOwogCX0KIAorCWlmIChwYXRjaF9tb2RlKQorCQlyZXR1cm4gaW50ZXJhY3RpdmVfY2hlY2tvdXQobmV3Lm5hbWUsIE5VTEwsICZvcHRzKTsKKwogCWlmIChvcHRzLm5ld19icmFuY2gpIHsKIAkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKIAkJaWYgKHN0cmJ1Zl9jaGVja19icmFuY2hfcmVmKCZidWYsIG9wdHMubmV3X2JyYW5jaCkpCmRpZmYgLS1naXQgYS9idWlsdGluLWNsZWFuLmMgYi9idWlsdGluLWNsZWFuLmMKaW5kZXggYzVhZDMzZC4uZmFjNjRlNiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1jbGVhbi5jCisrKyBiL2J1aWx0aW4tY2xlYW4uYwpAQCAtMzEsOSArMzEsOSBAQAogCWludCBpOwogCWludCBzaG93X29ubHkgPSAwLCByZW1vdmVfZGlyZWN0b3JpZXMgPSAwLCBxdWlldCA9IDAsIGlnbm9yZWQgPSAwOwogCWludCBpZ25vcmVkX29ubHkgPSAwLCBiYXNlbGVuID0gMCwgY29uZmlnX3NldCA9IDAsIGVycm9ycyA9IDA7CisJaW50IHJtX2ZsYWdzID0gUkVNT1ZFX0RJUl9LRUVQX05FU1RFRF9HSVQ7CiAJc3RydWN0IHN0cmJ1ZiBkaXJlY3RvcnkgPSBTVFJCVUZfSU5JVDsKIAlzdHJ1Y3QgZGlyX3N0cnVjdCBkaXI7Ci0JY29uc3QgY2hhciAqcGF0aCwgKmJhc2U7CiAJc3RhdGljIGNvbnN0IGNoYXIgKipwYXRoc3BlYzsKIAlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOwogCWNvbnN0IGNoYXIgKnFuYW1lOwpAQCAtNDEsNyArNDEsNyBAQAogCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0gewogCQlPUFRfX1FVSUVUKCZxdWlldCksCiAJCU9QVF9fRFJZX1JVTigmc2hvd19vbmx5KSwKLQkJT1BUX0JPT0xFQU4oJ2YnLCBOVUxMLCAmZm9yY2UsICJmb3JjZSIpLAorCQlPUFRfQk9PTEVBTignZicsICJmb3JjZSIsICZmb3JjZSwgImZvcmNlIiksCiAJCU9QVF9CT09MRUFOKCdkJywgTlVMTCwgJnJlbW92ZV9kaXJlY3RvcmllcywKIAkJCQkicmVtb3ZlIHdob2xlIGRpcmVjdG9yaWVzIiksCiAJCU9QVF9CT09MRUFOKCd4JywgTlVMTCwgJmlnbm9yZWQsICJyZW1vdmUgaWdub3JlZCBmaWxlcywgdG9vIiksCkBAIC01Niw3ICs1Niw4IEBACiAJZWxzZQogCQljb25maWdfc2V0ID0gMTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGJ1aWx0aW5fY2xlYW5fdXNhZ2UsIDApOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgYnVpbHRpbl9jbGVhbl91c2FnZSwKKwkJCSAgICAgMCk7CiAKIAltZW1zZXQoJmRpciwgMCwgc2l6ZW9mKGRpcikpOwogCWlmIChpZ25vcmVkX29ubHkpCkBAIC02NiwyNyArNjcsMjMgQEAKIAkJZGllKCIteCBhbmQgLVggY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiKTsKIAogCWlmICghc2hvd19vbmx5ICYmICFmb3JjZSkKLQkJZGllKCJjbGVhbi5yZXF1aXJlRm9yY2UlcyBzZXQgYW5kIC1uIG9yIC1mIG5vdCBnaXZlbjsgIgotCQkgICAgInJlZnVzaW5nIHRvIGNsZWFuIiwgY29uZmlnX3NldCA/ICIiIDogIiBub3QiKTsKKwkJZGllKCJjbGVhbi5yZXF1aXJlRm9yY2UgJXMgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtbiBub3IgLWYgZ2l2ZW47ICIKKwkJICAgICJyZWZ1c2luZyB0byBjbGVhbiIsIGNvbmZpZ19zZXQgPyAic2V0IiA6ICJkZWZhdWx0cyIpOworCisJaWYgKGZvcmNlID4gMSkKKwkJcm1fZmxhZ3MgPSAwOwogCiAJZGlyLmZsYWdzIHw9IERJUl9TSE9XX09USEVSX0RJUkVDVE9SSUVTOwogCisJaWYgKHJlYWRfY2FjaGUoKSA8IDApCisJCWRpZSgiaW5kZXggZmlsZSBjb3JydXB0Iik7CisKIAlpZiAoIWlnbm9yZWQpCiAJCXNldHVwX3N0YW5kYXJkX2V4Y2x1ZGVzKCZkaXIpOwogCiAJcGF0aHNwZWMgPSBnZXRfcGF0aHNwZWMocHJlZml4LCBhcmd2KTsKLQlyZWFkX2NhY2hlKCk7CiAKLQkvKgotCSAqIENhbGN1bGF0ZSBjb21tb24gcHJlZml4IGZvciB0aGUgcGF0aHNwZWMsIGFuZAotCSAqIHVzZSB0aGF0IHRvIG9wdGltaXplIHRoZSBkaXJlY3Rvcnkgd2FsawotCSAqLwotCWJhc2VsZW4gPSBjb21tb25fcHJlZml4KHBhdGhzcGVjKTsKLQlwYXRoID0gIi4iOwotCWJhc2UgPSAiIjsKLQlpZiAoYmFzZWxlbikKLQkJcGF0aCA9IGJhc2UgPSB4bWVtZHVweigqcGF0aHNwZWMsIGJhc2VsZW4pOwotCXJlYWRfZGlyZWN0b3J5KCZkaXIsIHBhdGgsIGJhc2UsIGJhc2VsZW4sIHBhdGhzcGVjKTsKKwlmaWxsX2RpcmVjdG9yeSgmZGlyLCBwYXRoc3BlYyk7CiAKIAlpZiAocGF0aHNwZWMpCiAJCXNlZW4gPSB4bWFsbG9jKGFyZ2MgPiAwID8gYXJnYyA6IDEpOwpAQCAtMTQwLDcgKzEzNyw4IEBACiAJCQkJICAgKG1hdGNoZXMgPT0gTUFUQ0hFRF9FWEFDVExZKSkgewogCQkJCWlmICghcXVpZXQpCiAJCQkJCXByaW50ZigiUmVtb3ZpbmcgJXNcbiIsIHFuYW1lKTsKLQkJCQlpZiAocmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmZGlyZWN0b3J5LCAwKSAhPSAwKSB7CisJCQkJaWYgKHJlbW92ZV9kaXJfcmVjdXJzaXZlbHkoJmRpcmVjdG9yeSwKKwkJCQkJCQkgICBybV9mbGFncykgIT0gMCkgewogCQkJCQl3YXJuaW5nKCJmYWlsZWQgdG8gcmVtb3ZlICclcyciLCBxbmFtZSk7CiAJCQkJCWVycm9ycysrOwogCQkJCX0KZGlmZiAtLWdpdCBhL2J1aWx0aW4tY2xvbmUuYyBiL2J1aWx0aW4tY2xvbmUuYwppbmRleCA2NjA1ZTgzLi41OGJhY2JkIDEwMDY0NAotLS0gYS9idWlsdGluLWNsb25lLmMKKysrIGIvYnVpbHRpbi1jbG9uZS5jCkBAIC0zOCwxOSArMzgsMjUgQEAKIH07CiAKIHN0YXRpYyBpbnQgb3B0aW9uX3F1aWV0LCBvcHRpb25fbm9fY2hlY2tvdXQsIG9wdGlvbl9iYXJlLCBvcHRpb25fbWlycm9yOwotc3RhdGljIGludCBvcHRpb25fbG9jYWwsIG9wdGlvbl9ub19oYXJkbGlua3MsIG9wdGlvbl9zaGFyZWQ7CitzdGF0aWMgaW50IG9wdGlvbl9sb2NhbCwgb3B0aW9uX25vX2hhcmRsaW5rcywgb3B0aW9uX3NoYXJlZCwgb3B0aW9uX3JlY3Vyc2l2ZTsKIHN0YXRpYyBjaGFyICpvcHRpb25fdGVtcGxhdGUsICpvcHRpb25fcmVmZXJlbmNlLCAqb3B0aW9uX2RlcHRoOwogc3RhdGljIGNoYXIgKm9wdGlvbl9vcmlnaW4gPSBOVUxMOworc3RhdGljIGNoYXIgKm9wdGlvbl9icmFuY2ggPSBOVUxMOwogc3RhdGljIGNoYXIgKm9wdGlvbl91cGxvYWRfcGFjayA9ICJnaXQtdXBsb2FkLXBhY2siOwogc3RhdGljIGludCBvcHRpb25fdmVyYm9zZTsKK3N0YXRpYyBpbnQgb3B0aW9uX3Byb2dyZXNzOwogCiBzdGF0aWMgc3RydWN0IG9wdGlvbiBidWlsdGluX2Nsb25lX29wdGlvbnNbXSA9IHsKIAlPUFRfX1FVSUVUKCZvcHRpb25fcXVpZXQpLAogCU9QVF9fVkVSQk9TRSgmb3B0aW9uX3ZlcmJvc2UpLAorCU9QVF9CT09MRUFOKDAsICJwcm9ncmVzcyIsICZvcHRpb25fcHJvZ3Jlc3MsCisJCQkiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIiksCiAJT1BUX0JPT0xFQU4oJ24nLCAibm8tY2hlY2tvdXQiLCAmb3B0aW9uX25vX2NoZWNrb3V0LAogCQkgICAgImRvbid0IGNyZWF0ZSBhIGNoZWNrb3V0IiksCiAJT1BUX0JPT0xFQU4oMCwgImJhcmUiLCAmb3B0aW9uX2JhcmUsICJjcmVhdGUgYSBiYXJlIHJlcG9zaXRvcnkiKSwKLQlPUFRfQk9PTEVBTigwLCAibmFrZWQiLCAmb3B0aW9uX2JhcmUsICJjcmVhdGUgYSBiYXJlIHJlcG9zaXRvcnkiKSwKKwl7IE9QVElPTl9CT09MRUFOLCAwLCAibmFrZWQiLCAmb3B0aW9uX2JhcmUsIE5VTEwsCisJCSJjcmVhdGUgYSBiYXJlIHJlcG9zaXRvcnkiLAorCQlQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfSElEREVOIH0sCiAJT1BUX0JPT0xFQU4oMCwgIm1pcnJvciIsICZvcHRpb25fbWlycm9yLAogCQkgICAgImNyZWF0ZSBhIG1pcnJvciByZXBvc2l0b3J5IChpbXBsaWVzIGJhcmUpIiksCiAJT1BUX0JPT0xFQU4oJ2wnLCAibG9jYWwiLCAmb3B0aW9uX2xvY2FsLApAQCAtNTksMTIgKzY1LDE2IEBACiAJCSAgICAiZG9uJ3QgdXNlIGxvY2FsIGhhcmRsaW5rcywgYWx3YXlzIGNvcHkiKSwKIAlPUFRfQk9PTEVBTigncycsICJzaGFyZWQiLCAmb3B0aW9uX3NoYXJlZCwKIAkJICAgICJzZXR1cCBhcyBzaGFyZWQgcmVwb3NpdG9yeSIpLAorCU9QVF9CT09MRUFOKDAsICJyZWN1cnNpdmUiLCAmb3B0aW9uX3JlY3Vyc2l2ZSwKKwkJICAgICJpbml0aWFsaXplIHN1Ym1vZHVsZXMgaW4gdGhlIGNsb25lIiksCiAJT1BUX1NUUklORygwLCAidGVtcGxhdGUiLCAmb3B0aW9uX3RlbXBsYXRlLCAicGF0aCIsCiAJCSAgICJwYXRoIHRoZSB0ZW1wbGF0ZSByZXBvc2l0b3J5IiksCiAJT1BUX1NUUklORygwLCAicmVmZXJlbmNlIiwgJm9wdGlvbl9yZWZlcmVuY2UsICJyZXBvIiwKIAkJICAgInJlZmVyZW5jZSByZXBvc2l0b3J5IiksCiAJT1BUX1NUUklORygnbycsICJvcmlnaW4iLCAmb3B0aW9uX29yaWdpbiwgImJyYW5jaCIsCiAJCSAgICJ1c2UgPGJyYW5jaD4gaW5zdGVhZCBvZiAnb3JpZ2luJyB0byB0cmFjayB1cHN0cmVhbSIpLAorCU9QVF9TVFJJTkcoJ2InLCAiYnJhbmNoIiwgJm9wdGlvbl9icmFuY2gsICJicmFuY2giLAorCQkgICAiY2hlY2tvdXQgPGJyYW5jaD4gaW5zdGVhZCBvZiB0aGUgcmVtb3RlJ3MgSEVBRCIpLAogCU9QVF9TVFJJTkcoJ3UnLCAidXBsb2FkLXBhY2siLCAmb3B0aW9uX3VwbG9hZF9wYWNrLCAicGF0aCIsCiAJCSAgICJwYXRoIHRvIGdpdC11cGxvYWQtcGFjayBvbiB0aGUgcmVtb3RlIiksCiAJT1BUX1NUUklORygwLCAiZGVwdGgiLCAmb3B0aW9uX2RlcHRoLCAiZGVwdGgiLApAQCAtNzMsNiArODMsMTAgQEAKIAlPUFRfRU5EKCkKIH07CiAKK3N0YXRpYyBjb25zdCBjaGFyICphcmd2X3N1Ym1vZHVsZVtdID0geworCSJzdWJtb2R1bGUiLCAidXBkYXRlIiwgIi0taW5pdCIsICItLXJlY3Vyc2l2ZSIsIE5VTEwKK307CisKIHN0YXRpYyBjaGFyICpnZXRfcmVwb19wYXRoKGNvbnN0IGNoYXIgKnJlcG8sIGludCAqaXNfYnVuZGxlKQogewogCXN0YXRpYyBjaGFyICpzdWZmaXhbXSA9IHsgIi8uZ2l0IiwgIi5naXQiLCAiIiB9OwpAQCAtMTA0LDExICsxMTgsMTIgQEAKIHN0YXRpYyBjaGFyICpndWVzc19kaXJfbmFtZShjb25zdCBjaGFyICpyZXBvLCBpbnQgaXNfYnVuZGxlLCBpbnQgaXNfYmFyZSkKIHsKIAljb25zdCBjaGFyICplbmQgPSByZXBvICsgc3RybGVuKHJlcG8pLCAqc3RhcnQ7CisJY2hhciAqZGlyOwogCiAJLyoKLQkgKiBTdHJpcCB0cmFpbGluZyBzbGFzaGVzIGFuZCAvLmdpdAorCSAqIFN0cmlwIHRyYWlsaW5nIHNwYWNlcywgc2xhc2hlcyBhbmQgLy5naXQKIAkgKi8KLQl3aGlsZSAocmVwbyA8IGVuZCAmJiBpc19kaXJfc2VwKGVuZFstMV0pKQorCXdoaWxlIChyZXBvIDwgZW5kICYmIChpc19kaXJfc2VwKGVuZFstMV0pIHx8IGlzc3BhY2UoZW5kWy0xXSkpKQogCQllbmQtLTsKIAlpZiAoZW5kIC0gcmVwbyA+IDUgJiYgaXNfZGlyX3NlcChlbmRbLTVdKSAmJgogCSAgICAhc3RybmNtcChlbmQgLSA0LCAiLmdpdCIsIDQpKSB7CkBAIC0xNDAsMTAgKzE1NSwzMyBAQAogCWlmIChpc19iYXJlKSB7CiAJCXN0cnVjdCBzdHJidWYgcmVzdWx0ID0gU1RSQlVGX0lOSVQ7CiAJCXN0cmJ1Zl9hZGRmKCZyZXN1bHQsICIlLipzLmdpdCIsIChpbnQpKGVuZCAtIHN0YXJ0KSwgc3RhcnQpOwotCQlyZXR1cm4gc3RyYnVmX2RldGFjaCgmcmVzdWx0LCAwKTsKKwkJZGlyID0gc3RyYnVmX2RldGFjaCgmcmVzdWx0LCBOVUxMKTsKKwl9IGVsc2UKKwkJZGlyID0geHN0cm5kdXAoc3RhcnQsIGVuZCAtIHN0YXJ0KTsKKwkvKgorCSAqIFJlcGxhY2Ugc2VxdWVuY2VzIG9mICdjb250cm9sJyBjaGFyYWN0ZXJzIGFuZCB3aGl0ZXNwYWNlCisJICogd2l0aCBvbmUgYXNjaWkgc3BhY2UsIHJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXMuCisJICovCisJaWYgKCpkaXIpIHsKKwkJY2hhciAqb3V0ID0gZGlyOworCQlpbnQgcHJldl9zcGFjZSA9IDEgLyogc3RyaXAgbGVhZGluZyB3aGl0ZXNwYWNlICovOworCQlmb3IgKGVuZCA9IGRpcjsgKmVuZDsgKytlbmQpIHsKKwkJCWNoYXIgY2ggPSAqZW5kOworCQkJaWYgKCh1bnNpZ25lZCBjaGFyKWNoIDwgJ1x4MjAnKQorCQkJCWNoID0gJ1x4MjAnOworCQkJaWYgKGlzc3BhY2UoY2gpKSB7CisJCQkJaWYgKHByZXZfc3BhY2UpCisJCQkJCWNvbnRpbnVlOworCQkJCXByZXZfc3BhY2UgPSAxOworCQkJfSBlbHNlCisJCQkJcHJldl9zcGFjZSA9IDA7CisJCQkqb3V0KysgPSBjaDsKKwkJfQorCQkqb3V0ID0gJ1wwJzsKKwkJaWYgKG91dCA+IGRpciAmJiBwcmV2X3NwYWNlKQorCQkJb3V0Wy0xXSA9ICdcMCc7CiAJfQotCi0JcmV0dXJuIHhzdHJuZHVwKHN0YXJ0LCBlbmQgLSBzdGFydCk7CisJcmV0dXJuIGRpcjsKIH0KIAogc3RhdGljIHZvaWQgc3RyaXBfdHJhaWxpbmdfc2xhc2hlcyhjaGFyICpkaXIpCkBAIC0xOTYsMTMgKzIzNCwxMyBAQAogCiAJZGlyID0gb3BlbmRpcihzcmMtPmJ1Zik7CiAJaWYgKCFkaXIpCi0JCWRpZSgiZmFpbGVkIHRvIG9wZW4gJXMiLCBzcmMtPmJ1Zik7CisJCWRpZV9lcnJubygiZmFpbGVkIHRvIG9wZW4gJyVzJyIsIHNyYy0+YnVmKTsKIAogCWlmIChta2RpcihkZXN0LT5idWYsIDA3NzcpKSB7CiAJCWlmIChlcnJubyAhPSBFRVhJU1QpCi0JCQlkaWUoImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICVzIiwgZGVzdC0+YnVmKTsKKwkJCWRpZV9lcnJubygiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIsIGRlc3QtPmJ1Zik7CiAJCWVsc2UgaWYgKHN0YXQoZGVzdC0+YnVmLCAmYnVmKSkKLQkJCWRpZSgiZmFpbGVkIHRvIHN0YXQgJXMiLCBkZXN0LT5idWYpOworCQkJZGllX2Vycm5vKCJmYWlsZWQgdG8gc3RhdCAnJXMnIiwgZGVzdC0+YnVmKTsKIAkJZWxzZSBpZiAoIVNfSVNESVIoYnVmLnN0X21vZGUpKQogCQkJZGllKCIlcyBleGlzdHMgYW5kIGlzIG5vdCBhIGRpcmVjdG9yeSIsIGRlc3QtPmJ1Zik7CiAJfQpAQCAtMjI4LDE3ICsyNjYsMTYgQEAKIAkJfQogCiAJCWlmICh1bmxpbmsoZGVzdC0+YnVmKSAmJiBlcnJubyAhPSBFTk9FTlQpCi0JCQlkaWUoImZhaWxlZCB0byB1bmxpbmsgJXM6ICVzIiwKLQkJCSAgICBkZXN0LT5idWYsIHN0cmVycm9yKGVycm5vKSk7CisJCQlkaWVfZXJybm8oImZhaWxlZCB0byB1bmxpbmsgJyVzJyIsIGRlc3QtPmJ1Zik7CiAJCWlmICghb3B0aW9uX25vX2hhcmRsaW5rcykgewogCQkJaWYgKCFsaW5rKHNyYy0+YnVmLCBkZXN0LT5idWYpKQogCQkJCWNvbnRpbnVlOwogCQkJaWYgKG9wdGlvbl9sb2NhbCkKLQkJCQlkaWUoImZhaWxlZCB0byBjcmVhdGUgbGluayAlcyIsIGRlc3QtPmJ1Zik7CisJCQkJZGllX2Vycm5vKCJmYWlsZWQgdG8gY3JlYXRlIGxpbmsgJyVzJyIsIGRlc3QtPmJ1Zik7CiAJCQlvcHRpb25fbm9faGFyZGxpbmtzID0gMTsKIAkJfQotCQlpZiAoY29weV9maWxlKGRlc3QtPmJ1Ziwgc3JjLT5idWYsIDA2NjYpKQotCQkJZGllKCJmYWlsZWQgdG8gY29weSBmaWxlIHRvICVzIiwgZGVzdC0+YnVmKTsKKwkJaWYgKGNvcHlfZmlsZV93aXRoX3RpbWUoZGVzdC0+YnVmLCBzcmMtPmJ1ZiwgMDY2NikpCisJCQlkaWVfZXJybm8oImZhaWxlZCB0byBjb3B5IGZpbGUgdG8gJyVzJyIsIGRlc3QtPmJ1Zik7CiAJfQogCWNsb3NlZGlyKGRpcik7CiB9CkBAIC0yOTcsMjQgKzMzNCwyOCBAQAogCXJhaXNlKHNpZ25vKTsKIH0KIAotc3RhdGljIHN0cnVjdCByZWYgKndyaXRlX3JlbW90ZV9yZWZzKGNvbnN0IHN0cnVjdCByZWYgKnJlZnMsCi0JCXN0cnVjdCByZWZzcGVjICpyZWZzcGVjLCBjb25zdCBjaGFyICpyZWZsb2cpCitzdGF0aWMgc3RydWN0IHJlZiAqd2FudGVkX3BlZXJfcmVmcyhjb25zdCBzdHJ1Y3QgcmVmICpyZWZzLAorCQlzdHJ1Y3QgcmVmc3BlYyAqcmVmc3BlYykKIHsKIAlzdHJ1Y3QgcmVmICpsb2NhbF9yZWZzID0gTlVMTDsKIAlzdHJ1Y3QgcmVmICoqdGFpbCA9ICZsb2NhbF9yZWZzOwotCXN0cnVjdCByZWYgKnI7CiAKIAlnZXRfZmV0Y2hfbWFwKHJlZnMsIHJlZnNwZWMsICZ0YWlsLCAwKTsKIAlpZiAoIW9wdGlvbl9taXJyb3IpCiAJCWdldF9mZXRjaF9tYXAocmVmcywgdGFnX3JlZnNwZWMsICZ0YWlsLCAwKTsKIAorCXJldHVybiBsb2NhbF9yZWZzOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9yZW1vdGVfcmVmcyhjb25zdCBzdHJ1Y3QgcmVmICpsb2NhbF9yZWZzKQoreworCWNvbnN0IHN0cnVjdCByZWYgKnI7CisKIAlmb3IgKHIgPSBsb2NhbF9yZWZzOyByOyByID0gci0+bmV4dCkKIAkJYWRkX2V4dHJhX3JlZihyLT5wZWVyX3JlZi0+bmFtZSwgci0+b2xkX3NoYTEsIDApOwogCiAJcGFja19yZWZzKFBBQ0tfUkVGU19BTEwpOwogCWNsZWFyX2V4dHJhX3JlZnMoKTsKLQotCXJldHVybiBsb2NhbF9yZWZzOwogfQogCiBpbnQgY21kX2Nsb25lKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQpAQCAtMzI0LDcgKzM2NSwxMCBAQAogCWNvbnN0IGNoYXIgKnJlcG9fbmFtZSwgKnJlcG8sICp3b3JrX3RyZWUsICpnaXRfZGlyOwogCWNoYXIgKnBhdGgsICpkaXI7CiAJaW50IGRlc3RfZXhpc3RzOwotCWNvbnN0IHN0cnVjdCByZWYgKnJlZnMsICpoZWFkX3BvaW50c19hdCwgKnJlbW90ZV9oZWFkLCAqbWFwcGVkX3JlZnM7CisJY29uc3Qgc3RydWN0IHJlZiAqcmVmcywgKnJlbW90ZV9oZWFkOworCWNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9oZWFkX3BvaW50c19hdDsKKwljb25zdCBzdHJ1Y3QgcmVmICpvdXJfaGVhZF9wb2ludHNfYXQ7CisJc3RydWN0IHJlZiAqbWFwcGVkX3JlZnM7CiAJc3RydWN0IHN0cmJ1ZiBrZXkgPSBTVFJCVUZfSU5JVCwgdmFsdWUgPSBTVFJCVUZfSU5JVDsKIAlzdHJ1Y3Qgc3RyYnVmIGJyYW5jaF90b3AgPSBTVFJCVUZfSU5JVCwgcmVmbG9nX21zZyA9IFNUUkJVRl9JTklUOwogCXN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCA9IE5VTEw7CkBAIC0zMzYsMTEgKzM4MCwxNiBAQAogCiAJanVua19waWQgPSBnZXRwaWQoKTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGJ1aWx0aW5fY2xvbmVfb3B0aW9ucywKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fY2xvbmVfb3B0aW9ucywKIAkJCSAgICAgYnVpbHRpbl9jbG9uZV91c2FnZSwgMCk7CiAKKwlpZiAoYXJnYyA+IDIpCisJCXVzYWdlX21zZ19vcHQoIlRvbyBtYW55IGFyZ3VtZW50cy4iLAorCQkJYnVpbHRpbl9jbG9uZV91c2FnZSwgYnVpbHRpbl9jbG9uZV9vcHRpb25zKTsKKwogCWlmIChhcmdjID09IDApCi0JCWRpZSgiWW91IG11c3Qgc3BlY2lmeSBhIHJlcG9zaXRvcnkgdG8gY2xvbmUuIik7CisJCXVzYWdlX21zZ19vcHQoIllvdSBtdXN0IHNwZWNpZnkgYSByZXBvc2l0b3J5IHRvIGNsb25lLiIsCisJCQlidWlsdGluX2Nsb25lX3VzYWdlLCBidWlsdGluX2Nsb25lX29wdGlvbnMpOwogCiAJaWYgKG9wdGlvbl9taXJyb3IpCiAJCW9wdGlvbl9iYXJlID0gMTsKQEAgLTM5NiwxMSArNDQ1LDExIEBACiAJaWYgKCFvcHRpb25fYmFyZSkgewogCQlqdW5rX3dvcmtfdHJlZSA9IHdvcmtfdHJlZTsKIAkJaWYgKHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3Qod29ya190cmVlKSA8IDApCi0JCQlkaWUoImNvdWxkIG5vdCBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAnJXMnOiAlcyIsCi0JCQkJCXdvcmtfdHJlZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygiY291bGQgbm90IGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICclcyciLAorCQkJCSAgd29ya190cmVlKTsKIAkJaWYgKCFkZXN0X2V4aXN0cyAmJiBta2Rpcih3b3JrX3RyZWUsIDA3NTUpKQotCQkJZGllKCJjb3VsZCBub3QgY3JlYXRlIHdvcmsgdHJlZSBkaXIgJyVzJzogJXMuIiwKLQkJCQkJd29ya190cmVlLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJjb3VsZCBub3QgY3JlYXRlIHdvcmsgdHJlZSBkaXIgJyVzJy4iLAorCQkJCSAgd29ya190cmVlKTsKIAkJc2V0X2dpdF93b3JrX3RyZWUod29ya190cmVlKTsKIAl9CiAJanVua19naXRfZGlyID0gZ2l0X2RpcjsKQEAgLTQ2MSw5ICs1MTAsMTAgQEAKIAogCXN0cmJ1Zl9yZXNldCgmdmFsdWUpOwogCi0JaWYgKHBhdGggJiYgIWlzX2J1bmRsZSkKKwlpZiAocGF0aCAmJiAhaXNfYnVuZGxlKSB7CiAJCXJlZnMgPSBjbG9uZV9sb2NhbChwYXRoLCBnaXRfZGlyKTsKLQllbHNlIHsKKwkJbWFwcGVkX3JlZnMgPSB3YW50ZWRfcGVlcl9yZWZzKHJlZnMsIHJlZnNwZWMpOworCX0gZWxzZSB7CiAJCXN0cnVjdCByZW1vdGUgKnJlbW90ZSA9IHJlbW90ZV9nZXQoYXJndlswXSk7CiAJCXRyYW5zcG9ydCA9IHRyYW5zcG9ydF9nZXQocmVtb3RlLCByZW1vdGUtPnVybFswXSk7CiAKQEAgLTQ3OSw2ICs1MjksOSBAQAogCQlpZiAob3B0aW9uX3F1aWV0KQogCQkJdHJhbnNwb3J0LT52ZXJib3NlID0gLTE7CiAJCWVsc2UgaWYgKG9wdGlvbl92ZXJib3NlKQorCQkJdHJhbnNwb3J0LT52ZXJib3NlID0gMTsKKworCQlpZiAob3B0aW9uX3Byb2dyZXNzKQogCQkJdHJhbnNwb3J0LT5wcm9ncmVzcyA9IDE7CiAKIAkJaWYgKG9wdGlvbl91cGxvYWRfcGFjaykKQEAgLTQ4NiwyMSArNTM5LDQzIEBACiAJCQkJCSAgICAgb3B0aW9uX3VwbG9hZF9wYWNrKTsKIAogCQlyZWZzID0gdHJhbnNwb3J0X2dldF9yZW1vdGVfcmVmcyh0cmFuc3BvcnQpOwotCQlpZihyZWZzKQotCQkJdHJhbnNwb3J0X2ZldGNoX3JlZnModHJhbnNwb3J0LCByZWZzKTsKKwkJaWYgKHJlZnMpIHsKKwkJCW1hcHBlZF9yZWZzID0gd2FudGVkX3BlZXJfcmVmcyhyZWZzLCByZWZzcGVjKTsKKwkJCXRyYW5zcG9ydF9mZXRjaF9yZWZzKHRyYW5zcG9ydCwgbWFwcGVkX3JlZnMpOworCQl9CiAJfQogCiAJaWYgKHJlZnMpIHsKIAkJY2xlYXJfZXh0cmFfcmVmcygpOwogCi0JCW1hcHBlZF9yZWZzID0gd3JpdGVfcmVtb3RlX3JlZnMocmVmcywgcmVmc3BlYywgcmVmbG9nX21zZy5idWYpOworCQl3cml0ZV9yZW1vdGVfcmVmcyhtYXBwZWRfcmVmcyk7CiAKIAkJcmVtb3RlX2hlYWQgPSBmaW5kX3JlZl9ieV9uYW1lKHJlZnMsICJIRUFEIik7Ci0JCWhlYWRfcG9pbnRzX2F0ID0gZ3Vlc3NfcmVtb3RlX2hlYWQocmVtb3RlX2hlYWQsIG1hcHBlZF9yZWZzLCAwKTsKKwkJcmVtb3RlX2hlYWRfcG9pbnRzX2F0ID0KKwkJCWd1ZXNzX3JlbW90ZV9oZWFkKHJlbW90ZV9oZWFkLCBtYXBwZWRfcmVmcywgMCk7CisKKwkJaWYgKG9wdGlvbl9icmFuY2gpIHsKKwkJCXN0cnVjdCBzdHJidWYgaGVhZCA9IFNUUkJVRl9JTklUOworCQkJc3RyYnVmX2FkZHN0cigmaGVhZCwgc3JjX3JlZl9wcmVmaXgpOworCQkJc3RyYnVmX2FkZHN0cigmaGVhZCwgb3B0aW9uX2JyYW5jaCk7CisJCQlvdXJfaGVhZF9wb2ludHNfYXQgPQorCQkJCWZpbmRfcmVmX2J5X25hbWUobWFwcGVkX3JlZnMsIGhlYWQuYnVmKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZoZWFkKTsKKworCQkJaWYgKCFvdXJfaGVhZF9wb2ludHNfYXQpIHsKKwkJCQl3YXJuaW5nKCJSZW1vdGUgYnJhbmNoICVzIG5vdCBmb3VuZCBpbiAiCisJCQkJCSJ1cHN0cmVhbSAlcywgdXNpbmcgSEVBRCBpbnN0ZWFkIiwKKwkJCQkJb3B0aW9uX2JyYW5jaCwgb3B0aW9uX29yaWdpbik7CisJCQkJb3VyX2hlYWRfcG9pbnRzX2F0ID0gcmVtb3RlX2hlYWRfcG9pbnRzX2F0OworCQkJfQorCQl9CisJCWVsc2UKKwkJCW91cl9oZWFkX3BvaW50c19hdCA9IHJlbW90ZV9oZWFkX3BvaW50c19hdDsKIAl9CiAJZWxzZSB7CiAJCXdhcm5pbmcoIllvdSBhcHBlYXIgdG8gaGF2ZSBjbG9uZWQgYW4gZW1wdHkgcmVwb3NpdG9yeS4iKTsKLQkJaGVhZF9wb2ludHNfYXQgPSBOVUxMOworCQlvdXJfaGVhZF9wb2ludHNfYXQgPSBOVUxMOworCQlyZW1vdGVfaGVhZF9wb2ludHNfYXQgPSBOVUxMOwogCQlyZW1vdGVfaGVhZCA9IE5VTEw7CiAJCW9wdGlvbl9ub19jaGVja291dCA9IDE7CiAJCWlmICghb3B0aW9uX2JhcmUpCkBAIC01MDgsNDEgKzU4MywzNSBAQAogCQkJCQkgICAgICAicmVmcy9oZWFkcy9tYXN0ZXIiKTsKIAl9CiAKLQlpZiAoaGVhZF9wb2ludHNfYXQpIHsKKwlpZiAocmVtb3RlX2hlYWRfcG9pbnRzX2F0ICYmICFvcHRpb25fYmFyZSkgeworCQlzdHJ1Y3Qgc3RyYnVmIGhlYWRfcmVmID0gU1RSQlVGX0lOSVQ7CisJCXN0cmJ1Zl9hZGRzdHIoJmhlYWRfcmVmLCBicmFuY2hfdG9wLmJ1Zik7CisJCXN0cmJ1Zl9hZGRzdHIoJmhlYWRfcmVmLCAiSEVBRCIpOworCQljcmVhdGVfc3ltcmVmKGhlYWRfcmVmLmJ1ZiwKKwkJCSAgICAgIHJlbW90ZV9oZWFkX3BvaW50c19hdC0+cGVlcl9yZWYtPm5hbWUsCisJCQkgICAgICByZWZsb2dfbXNnLmJ1Zik7CisJfQorCisJaWYgKG91cl9oZWFkX3BvaW50c19hdCkgewogCQkvKiBMb2NhbCBkZWZhdWx0IGJyYW5jaCBsaW5rICovCi0JCWNyZWF0ZV9zeW1yZWYoIkhFQUQiLCBoZWFkX3BvaW50c19hdC0+bmFtZSwgTlVMTCk7Ci0KKwkJY3JlYXRlX3N5bXJlZigiSEVBRCIsIG91cl9oZWFkX3BvaW50c19hdC0+bmFtZSwgTlVMTCk7CiAJCWlmICghb3B0aW9uX2JhcmUpIHsKLQkJCXN0cnVjdCBzdHJidWYgaGVhZF9yZWYgPSBTVFJCVUZfSU5JVDsKLQkJCWNvbnN0IGNoYXIgKmhlYWQgPSBoZWFkX3BvaW50c19hdC0+bmFtZTsKLQotCQkJaWYgKCFwcmVmaXhjbXAoaGVhZCwgInJlZnMvaGVhZHMvIikpCi0JCQkJaGVhZCArPSAxMTsKLQotCQkJLyogU2V0IHVwIHRoZSBpbml0aWFsIGxvY2FsIGJyYW5jaCAqLwotCi0JCQkvKiBMb2NhbCBicmFuY2ggaW5pdGlhbCB2YWx1ZSAqLworCQkJY29uc3QgY2hhciAqaGVhZCA9IHNraXBfcHJlZml4KG91cl9oZWFkX3BvaW50c19hdC0+bmFtZSwKKwkJCQkJCSAgICAgICAicmVmcy9oZWFkcy8iKTsKIAkJCXVwZGF0ZV9yZWYocmVmbG9nX21zZy5idWYsICJIRUFEIiwKLQkJCQkgICBoZWFkX3BvaW50c19hdC0+b2xkX3NoYTEsCisJCQkJICAgb3VyX2hlYWRfcG9pbnRzX2F0LT5vbGRfc2hhMSwKIAkJCQkgICBOVUxMLCAwLCBESUVfT05fRVJSKTsKLQotCQkJc3RyYnVmX2FkZHN0cigmaGVhZF9yZWYsIGJyYW5jaF90b3AuYnVmKTsKLQkJCXN0cmJ1Zl9hZGRzdHIoJmhlYWRfcmVmLCAiSEVBRCIpOwotCi0JCQkvKiBSZW1vdGUgYnJhbmNoIGxpbmsgKi8KLQkJCWNyZWF0ZV9zeW1yZWYoaGVhZF9yZWYuYnVmLAotCQkJCSAgICAgIGhlYWRfcG9pbnRzX2F0LT5wZWVyX3JlZi0+bmFtZSwKLQkJCQkgICAgICByZWZsb2dfbXNnLmJ1Zik7Ci0KIAkJCWluc3RhbGxfYnJhbmNoX2NvbmZpZygwLCBoZWFkLCBvcHRpb25fb3JpZ2luLAotCQkJCQkgICAgICBoZWFkX3BvaW50c19hdC0+bmFtZSk7CisJCQkJCSAgICAgIG91cl9oZWFkX3BvaW50c19hdC0+bmFtZSk7CiAJCX0KIAl9IGVsc2UgaWYgKHJlbW90ZV9oZWFkKSB7CiAJCS8qIFNvdXJjZSBoYWQgZGV0YWNoZWQgSEVBRCBwb2ludGluZyBzb21ld2hlcmUuICovCi0JCWlmICghb3B0aW9uX2JhcmUpCisJCWlmICghb3B0aW9uX2JhcmUpIHsKIAkJCXVwZGF0ZV9yZWYocmVmbG9nX21zZy5idWYsICJIRUFEIiwKIAkJCQkgICByZW1vdGVfaGVhZC0+b2xkX3NoYTEsCiAJCQkJICAgTlVMTCwgUkVGX05PREVSRUYsIERJRV9PTl9FUlIpOworCQkJb3VyX2hlYWRfcG9pbnRzX2F0ID0gcmVtb3RlX2hlYWQ7CisJCX0KIAl9IGVsc2UgewogCQkvKiBOb3RoaW5nIHRvIGNoZWNrb3V0IG91dCAqLwogCQlpZiAoIW9wdGlvbl9ub19jaGVja291dCkKQEAgLTU3Niw3ICs2NDUsNyBAQAogCQlvcHRzLnNyY19pbmRleCA9ICZ0aGVfaW5kZXg7CiAJCW9wdHMuZHN0X2luZGV4ID0gJnRoZV9pbmRleDsKIAotCQl0cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdChyZW1vdGVfaGVhZC0+b2xkX3NoYTEpOworCQl0cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdChvdXJfaGVhZF9wb2ludHNfYXQtPm9sZF9zaGExKTsKIAkJcGFyc2VfdHJlZSh0cmVlKTsKIAkJaW5pdF90cmVlX2Rlc2MoJnQsIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7CiAJCXVucGFja190cmVlcygxLCAmdCwgJm9wdHMpOwpAQCAtNTg2LDcgKzY1NSwxMSBAQAogCQkJZGllKCJ1bmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKTsKIAogCQllcnIgfD0gcnVuX2hvb2soTlVMTCwgInBvc3QtY2hlY2tvdXQiLCBzaGExX3RvX2hleChudWxsX3NoYTEpLAotCQkJCXNoYTFfdG9faGV4KHJlbW90ZV9oZWFkLT5vbGRfc2hhMSksICIxIiwgTlVMTCk7CisJCQkJc2hhMV90b19oZXgob3VyX2hlYWRfcG9pbnRzX2F0LT5vbGRfc2hhMSksICIxIiwKKwkJCQlOVUxMKTsKKworCQlpZiAoIWVyciAmJiBvcHRpb25fcmVjdXJzaXZlKQorCQkJZXJyID0gcnVuX2NvbW1hbmRfdl9vcHQoYXJndl9zdWJtb2R1bGUsIFJVTl9HSVRfQ01EKTsKIAl9CiAKIAlzdHJidWZfcmVsZWFzZSgmcmVmbG9nX21zZyk7CmRpZmYgLS1naXQgYS9idWlsdGluLWNvbW1pdC10cmVlLmMgYi9idWlsdGluLWNvbW1pdC10cmVlLmMKaW5kZXggMDQ1MzQyNS4uOTBkYWMzNCAxMDA2NDQKLS0tIGEvYnVpbHRpbi1jb21taXQtdHJlZS5jCisrKyBiL2J1aWx0aW4tY29tbWl0LXRyZWUuYwpAQCAtOSw4ICs5LDYgQEAKICNpbmNsdWRlICJidWlsdGluLmgiCiAjaW5jbHVkZSAidXRmOC5oIgogCi0jZGVmaW5lIEJMT0NLSU5HICgxdWwgPDwgMTQpCi0KIC8qCiAgKiBGSVhNRSEgU2hhcmUgdGhlIGNvZGUgd2l0aCAid3JpdGUtdHJlZS5jIgogICovCkBAIC0xMDUsNyArMTAzLDcgQEAKIAogCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKIAotCWlmIChhcmdjIDwgMikKKwlpZiAoYXJnYyA8IDIgfHwgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKIAkJdXNhZ2UoY29tbWl0X3RyZWVfdXNhZ2UpOwogCWlmIChnZXRfc2hhMShhcmd2WzFdLCB0cmVlX3NoYTEpKQogCQlkaWUoIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIiwgYXJndlsxXSk7CkBAIC0xMjQsNyArMTIyLDcgQEAKIAl9CiAKIAlpZiAoc3RyYnVmX3JlYWQoJmJ1ZmZlciwgMCwgMCkgPCAwKQotCQlkaWUoImdpdCBjb21taXQtdHJlZTogcmVhZCByZXR1cm5lZCAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gcmVhZCIpOwogCiAJaWYgKCFjb21taXRfdHJlZShidWZmZXIuYnVmLCB0cmVlX3NoYTEsIHBhcmVudHMsIGNvbW1pdF9zaGExLCBOVUxMKSkgewogCQlwcmludGYoIiVzXG4iLCBzaGExX3RvX2hleChjb21taXRfc2hhMSkpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1jb21taXQuYyBiL2J1aWx0aW4tY29tbWl0LmMKaW5kZXggMGU3MmE1Ni4uZjRjNzM0NCAxMDA2NDQKLS0tIGEvYnVpbHRpbi1jb21taXQuYworKysgYi9idWlsdGluLWNvbW1pdC5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKICNpbmNsdWRlICJyZXJlcmUuaCIKICNpbmNsdWRlICJ1bnBhY2stdHJlZXMuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fY29tbWl0X3VzYWdlW10gPSB7CiAJImdpdCBjb21taXQgW29wdGlvbnNdIFstLV0gPGZpbGVwYXR0ZXJuPi4uLiIsCkBAIC0zNSw3ICszNiwyMCBAQAogCU5VTEwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGhlYWRfc2hhMVsyMF0sIG1lcmdlX2hlYWRfc2hhMVsyMF07CitzdGF0aWMgY29uc3QgY2hhciBpbXBsaWNpdF9pZGVudF9hZHZpY2VbXSA9CisiWW91ciBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzIHdlcmUgY29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJhc2VkXG4iCisib24geW91ciB1c2VybmFtZSBhbmQgaG9zdG5hbWUuIFBsZWFzZSBjaGVjayB0aGF0IHRoZXkgYXJlIGFjY3VyYXRlLlxuIgorIllvdSBjYW4gc3VwcHJlc3MgdGhpcyBtZXNzYWdlIGJ5IHNldHRpbmcgdGhlbSBleHBsaWNpdGx5OlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCB5b3VAZXhhbXBsZS5jb21cbiIKKyJcbiIKKyJJZiB0aGUgaWRlbnRpdHkgdXNlZCBmb3IgdGhpcyBjb21taXQgaXMgd3JvbmcsIHlvdSBjYW4gZml4IGl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLWF1dGhvcj0nWW91ciBOYW1lIDx5b3VAZXhhbXBsZS5jb20+J1xuIjsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgaGVhZF9zaGExWzIwXTsKKwogc3RhdGljIGNoYXIgKnVzZV9tZXNzYWdlX2J1ZmZlcjsKIHN0YXRpYyBjb25zdCBjaGFyIGNvbW1pdF9lZGl0bXNnW10gPSAiQ09NTUlUX0VESVRNU0ciOwogc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgaW5kZXhfbG9jazsgLyogcmVhbCBpbmRleCAqLwpAQCAtNTEsOCArNjUsOCBAQAogc3RhdGljIGNoYXIgKmVkaXRfbWVzc2FnZSwgKnVzZV9tZXNzYWdlOwogc3RhdGljIGNoYXIgKmF1dGhvcl9uYW1lLCAqYXV0aG9yX2VtYWlsLCAqYXV0aG9yX2RhdGU7CiBzdGF0aWMgaW50IGFsbCwgZWRpdF9mbGFnLCBhbHNvLCBpbnRlcmFjdGl2ZSwgb25seSwgYW1lbmQsIHNpZ25vZmY7Ci1zdGF0aWMgaW50IHF1aWV0LCB2ZXJib3NlLCBub192ZXJpZnksIGFsbG93X2VtcHR5Owotc3RhdGljIGNoYXIgKnVudHJhY2tlZF9maWxlc19hcmc7CitzdGF0aWMgaW50IHF1aWV0LCB2ZXJib3NlLCBub192ZXJpZnksIGFsbG93X2VtcHR5LCBkcnlfcnVuLCByZW5ld19hdXRob3JzaGlwOworc3RhdGljIGNoYXIgKnVudHJhY2tlZF9maWxlc19hcmcsICpmb3JjZV9kYXRlOwogLyoKICAqIFRoZSBkZWZhdWx0IGNvbW1pdCBtZXNzYWdlIGNsZWFudXAgbW9kZSB3aWxsIHJlbW92ZSB0aGUgbGluZXMKICAqIGJlZ2lubmluZyB3aXRoICMgKHNoZWxsIGNvbW1lbnRzKSBhbmQgbGVhZGluZyBhbmQgdHJhaWxpbmcKQEAgLTY3LDEwICs4MSwxNyBAQAogfSBjbGVhbnVwX21vZGU7CiBzdGF0aWMgY2hhciAqY2xlYW51cF9hcmc7CiAKLXN0YXRpYyBpbnQgdXNlX2VkaXRvciA9IDEsIGluaXRpYWxfY29tbWl0LCBpbl9tZXJnZTsKK3N0YXRpYyBpbnQgdXNlX2VkaXRvciA9IDEsIGluaXRpYWxfY29tbWl0LCBpbl9tZXJnZSwgaW5jbHVkZV9zdGF0dXMgPSAxOwogc3RhdGljIGNvbnN0IGNoYXIgKm9ubHlfaW5jbHVkZV9hc3N1bWVkOwogc3RhdGljIHN0cnVjdCBzdHJidWYgbWVzc2FnZTsKIAorc3RhdGljIGludCBudWxsX3Rlcm1pbmF0aW9uOworc3RhdGljIGVudW0geworCVNUQVRVU19GT1JNQVRfTE9ORywKKwlTVEFUVVNfRk9STUFUX1NIT1JULAorCVNUQVRVU19GT1JNQVRfUE9SQ0VMQUlOLAorfSBzdGF0dXNfZm9ybWF0ID0gU1RBVFVTX0ZPUk1BVF9MT05HOworCiBzdGF0aWMgaW50IG9wdF9wYXJzZV9tKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCiB7CiAJc3RydWN0IHN0cmJ1ZiAqYnVmID0gb3B0LT52YWx1ZTsKQEAgLTg4LDE1ICsxMDksMTggQEAKIAlPUFRfX1ZFUkJPU0UoJnZlcmJvc2UpLAogCiAJT1BUX0dST1VQKCJDb21taXQgbWVzc2FnZSBvcHRpb25zIiksCi0JT1BUX1NUUklORygnRicsICJmaWxlIiwgJmxvZ2ZpbGUsICJGSUxFIiwgInJlYWQgbG9nIGZyb20gZmlsZSIpLAorCU9QVF9GSUxFTkFNRSgnRicsICJmaWxlIiwgJmxvZ2ZpbGUsICJyZWFkIGxvZyBmcm9tIGZpbGUiKSwKIAlPUFRfU1RSSU5HKDAsICJhdXRob3IiLCAmZm9yY2VfYXV0aG9yLCAiQVVUSE9SIiwgIm92ZXJyaWRlIGF1dGhvciBmb3IgY29tbWl0IiksCisJT1BUX1NUUklORygwLCAiZGF0ZSIsICZmb3JjZV9kYXRlLCAiREFURSIsICJvdmVycmlkZSBkYXRlIGZvciBjb21taXQiKSwKIAlPUFRfQ0FMTEJBQ0soJ20nLCAibWVzc2FnZSIsICZtZXNzYWdlLCAiTUVTU0FHRSIsICJzcGVjaWZ5IGNvbW1pdCBtZXNzYWdlIiwgb3B0X3BhcnNlX20pLAotCU9QVF9TVFJJTkcoJ2MnLCAicmVlZGl0LW1lc3NhZ2UiLCAmZWRpdF9tZXNzYWdlLCAiQ09NTUlUIiwgInJldXNlIGFuZCBlZGl0IG1lc3NhZ2UgZnJvbSBzcGVjaWZpZWQgY29tbWl0ICIpLAorCU9QVF9TVFJJTkcoJ2MnLCAicmVlZGl0LW1lc3NhZ2UiLCAmZWRpdF9tZXNzYWdlLCAiQ09NTUlUIiwgInJldXNlIGFuZCBlZGl0IG1lc3NhZ2UgZnJvbSBzcGVjaWZpZWQgY29tbWl0IiksCiAJT1BUX1NUUklORygnQycsICJyZXVzZS1tZXNzYWdlIiwgJnVzZV9tZXNzYWdlLCAiQ09NTUlUIiwgInJldXNlIG1lc3NhZ2UgZnJvbSBzcGVjaWZpZWQgY29tbWl0IiksCisJT1BUX0JPT0xFQU4oMCwgInJlc2V0LWF1dGhvciIsICZyZW5ld19hdXRob3JzaGlwLCAidGhlIGNvbW1pdCBpcyBhdXRob3JlZCBieSBtZSBub3cgKHVzZWQgd2l0aCAtQy1jLy0tYW1lbmQpIiksCiAJT1BUX0JPT0xFQU4oJ3MnLCAic2lnbm9mZiIsICZzaWdub2ZmLCAiYWRkIFNpZ25lZC1vZmYtYnk6IiksCi0JT1BUX1NUUklORygndCcsICJ0ZW1wbGF0ZSIsICZ0ZW1wbGF0ZV9maWxlLCAiRklMRSIsICJ1c2Ugc3BlY2lmaWVkIHRlbXBsYXRlIGZpbGUiKSwKKwlPUFRfRklMRU5BTUUoJ3QnLCAidGVtcGxhdGUiLCAmdGVtcGxhdGVfZmlsZSwgInVzZSBzcGVjaWZpZWQgdGVtcGxhdGUgZmlsZSIpLAogCU9QVF9CT09MRUFOKCdlJywgImVkaXQiLCAmZWRpdF9mbGFnLCAiZm9yY2UgZWRpdCBvZiBjb21taXQiKSwKIAlPUFRfU1RSSU5HKDAsICJjbGVhbnVwIiwgJmNsZWFudXBfYXJnLCAiZGVmYXVsdCIsICJob3cgdG8gc3RyaXAgc3BhY2VzIGFuZCAjY29tbWVudHMgZnJvbSBtZXNzYWdlIiksCisJT1BUX0JPT0xFQU4oMCwgInN0YXR1cyIsICZpbmNsdWRlX3N0YXR1cywgImluY2x1ZGUgc3RhdHVzIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIiksCiAJLyogZW5kIGNvbW1pdCBtZXNzYWdlIG9wdGlvbnMgKi8KIAogCU9QVF9HUk9VUCgiQ29tbWl0IGNvbnRlbnRzIG9wdGlvbnMiKSwKQEAgLTEwNSw2ICsxMjksMTMgQEAKIAlPUFRfQk9PTEVBTigwLCAiaW50ZXJhY3RpdmUiLCAmaW50ZXJhY3RpdmUsICJpbnRlcmFjdGl2ZWx5IGFkZCBmaWxlcyIpLAogCU9QVF9CT09MRUFOKCdvJywgIm9ubHkiLCAmb25seSwgImNvbW1pdCBvbmx5IHNwZWNpZmllZCBmaWxlcyIpLAogCU9QVF9CT09MRUFOKCduJywgIm5vLXZlcmlmeSIsICZub192ZXJpZnksICJieXBhc3MgcHJlLWNvbW1pdCBob29rIiksCisJT1BUX0JPT0xFQU4oMCwgImRyeS1ydW4iLCAmZHJ5X3J1biwgInNob3cgd2hhdCB3b3VsZCBiZSBjb21taXR0ZWQiKSwKKwlPUFRfU0VUX0lOVCgwLCAic2hvcnQiLCAmc3RhdHVzX2Zvcm1hdCwgInNob3cgc3RhdHVzIGNvbmNpc2VseSIsCisJCSAgICBTVEFUVVNfRk9STUFUX1NIT1JUKSwKKwlPUFRfU0VUX0lOVCgwLCAicG9yY2VsYWluIiwgJnN0YXR1c19mb3JtYXQsCisJCSAgICAic2hvdyBwb3JjZWxhaW4gb3V0cHV0IGZvcm1hdCIsIFNUQVRVU19GT1JNQVRfUE9SQ0VMQUlOKSwKKwlPUFRfQk9PTEVBTigneicsICJudWxsIiwgJm51bGxfdGVybWluYXRpb24sCisJCSAgICAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwiKSwKIAlPUFRfQk9PTEVBTigwLCAiYW1lbmQiLCAmYW1lbmQsICJhbWVuZCBwcmV2aW91cyBjb21taXQiKSwKIAl7IE9QVElPTl9TVFJJTkcsICd1JywgInVudHJhY2tlZC1maWxlcyIsICZ1bnRyYWNrZWRfZmlsZXNfYXJnLCAibW9kZSIsICJzaG93IHVudHJhY2tlZCBmaWxlcywgb3B0aW9uYWwgbW9kZXM6IGFsbCwgbm9ybWFsLCBuby4gKERlZmF1bHQ6IGFsbCkiLCBQQVJTRV9PUFRfT1BUQVJHLCBOVUxMLCAoaW50cHRyX3QpImFsbCIgfSwKIAlPUFRfQk9PTEVBTigwLCAiYWxsb3ctZW1wdHkiLCAmYWxsb3dfZW1wdHksICJvayB0byByZWNvcmQgYW4gZW1wdHkgY2hhbmdlIiksCkBAIC0xNjYsMTEgKzE5NywxNSBAQAogCiAJZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9ucjsgaSsrKSB7CiAJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbaV07CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCiAJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9VUERBVEUpCiAJCQljb250aW51ZTsKIAkJaWYgKCFtYXRjaF9wYXRoc3BlYyhwYXR0ZXJuLCBjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSksIDAsIG0pKQogCQkJY29udGludWU7Ci0JCXN0cmluZ19saXN0X2luc2VydChjZS0+bmFtZSwgbGlzdCk7CisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9pbnNlcnQoY2UtPm5hbWUsIGxpc3QpOworCQlpZiAoY2Vfc2tpcF93b3JrdHJlZShjZSkpCisJCQlpdGVtLT51dGlsID0gaXRlbTsgLyogYmV0dGVyIGEgdmFsaWQgcG9pbnRlciB0aGFuIGEgZmFrZSBvbmUgKi8KIAl9CiAKIAlyZXR1cm4gcmVwb3J0X3BhdGhfZXJyb3IobSwgcGF0dGVybiwgcHJlZml4ID8gc3RybGVuKHByZWZpeCkgOiAwKTsKQEAgLTE4Myw2ICsyMTgsMTAgQEAKIAkJc3RydWN0IHN0YXQgc3Q7CiAJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpwID0gJihsaXN0LT5pdGVtc1tpXSk7CiAKKwkJLyogcC0+dXRpbCBpcyBza2lwLXdvcmt0cmVlICovCisJCWlmIChwLT51dGlsKQorCQkJY29udGludWU7CisKIAkJaWYgKCFsc3RhdChwLT5zdHJpbmcsICZzdCkpIHsKIAkJCWlmIChhZGRfdG9fY2FjaGUocC0+c3RyaW5nLCAmc3QsIDApKQogCQkJCWRpZSgidXBkYXRpbmcgZmlsZXMgZmFpbGVkIik7CkBAIC0yMTksMTIgKzI1OCwyNSBAQAogCQlleGl0KDEyOCk7IC8qIFdlJ3ZlIGFscmVhZHkgcmVwb3J0ZWQgdGhlIGVycm9yLCBmaW5pc2ggZHlpbmcgKi8KIH0KIAotc3RhdGljIGNoYXIgKnByZXBhcmVfaW5kZXgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCitzdGF0aWMgdm9pZCByZWZyZXNoX2NhY2hlX29yX2RpZShpbnQgcmVmcmVzaF9mbGFncykKK3sKKwkvKgorCSAqIHJlZnJlc2hfZmxhZ3MgY29udGFpbnMgUkVGUkVTSF9RVUlFVCwgc28gdGhlIG9ubHkgZXJyb3JzCisJICogYXJlIGZvciB1bm1lcmdlZCBlbnRyaWVzLgorCSAqLworCWlmIChyZWZyZXNoX2NhY2hlKHJlZnJlc2hfZmxhZ3MgfCBSRUZSRVNIX0lOX1BPUkNFTEFJTikpCisJCWRpZV9yZXNvbHZlX2NvbmZsaWN0KCJjb21taXQiKTsKK30KKworc3RhdGljIGNoYXIgKnByZXBhcmVfaW5kZXgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgsIGludCBpc19zdGF0dXMpCiB7CiAJaW50IGZkOwogCXN0cnVjdCBzdHJpbmdfbGlzdCBwYXJ0aWFsOwogCWNvbnN0IGNoYXIgKipwYXRoc3BlYyA9IE5VTEw7CisJaW50IHJlZnJlc2hfZmxhZ3MgPSBSRUZSRVNIX1FVSUVUOwogCisJaWYgKGlzX3N0YXR1cykKKwkJcmVmcmVzaF9mbGFncyB8PSBSRUZSRVNIX1VOTUVSR0VEOwogCWlmIChpbnRlcmFjdGl2ZSkgewogCQlpZiAoaW50ZXJhY3RpdmVfYWRkKGFyZ2MsIGFyZ3YsIHByZWZpeCkgIT0gMCkKIAkJCWRpZSgiaW50ZXJhY3RpdmUgYWRkIGZhaWxlZCIpOwpAQCAtMjU1LDcgKzMwNyw3IEBACiAJaWYgKGFsbCB8fCAoYWxzbyAmJiBwYXRoc3BlYyAmJiAqcGF0aHNwZWMpKSB7CiAJCWludCBmZCA9IGhvbGRfbG9ja2VkX2luZGV4KCZpbmRleF9sb2NrLCAxKTsKIAkJYWRkX2ZpbGVzX3RvX2NhY2hlKGFsc28gPyBwcmVmaXggOiBOVUxMLCBwYXRoc3BlYywgMCk7Ci0JCXJlZnJlc2hfY2FjaGUoUkVGUkVTSF9RVUlFVCk7CisJCXJlZnJlc2hfY2FjaGVfb3JfZGllKHJlZnJlc2hfZmxhZ3MpOwogCQlpZiAod3JpdGVfY2FjaGUoZmQsIGFjdGl2ZV9jYWNoZSwgYWN0aXZlX25yKSB8fAogCQkgICAgY2xvc2VfbG9ja19maWxlKCZpbmRleF9sb2NrKSkKIAkJCWRpZSgidW5hYmxlIHRvIHdyaXRlIG5ld19pbmRleCBmaWxlIik7CkBAIC0yNzQsNyArMzI2LDcgQEAKIAkgKi8KIAlpZiAoIXBhdGhzcGVjIHx8ICEqcGF0aHNwZWMpIHsKIAkJZmQgPSBob2xkX2xvY2tlZF9pbmRleCgmaW5kZXhfbG9jaywgMSk7Ci0JCXJlZnJlc2hfY2FjaGUoUkVGUkVTSF9RVUlFVCk7CisJCXJlZnJlc2hfY2FjaGVfb3JfZGllKHJlZnJlc2hfZmxhZ3MpOwogCQlpZiAod3JpdGVfY2FjaGUoZmQsIGFjdGl2ZV9jYWNoZSwgYWN0aXZlX25yKSB8fAogCQkgICAgY29tbWl0X2xvY2tlZF9pbmRleCgmaW5kZXhfbG9jaykpCiAJCQlkaWUoInVuYWJsZSB0byB3cml0ZSBuZXdfaW5kZXggZmlsZSIpOwpAQCAtMzAzLDcgKzM1NSw3IEBACiAJICovCiAJY29tbWl0X3N0eWxlID0gQ09NTUlUX1BBUlRJQUw7CiAKLQlpZiAoZmlsZV9leGlzdHMoZ2l0X3BhdGgoIk1FUkdFX0hFQUQiKSkpCisJaWYgKGluX21lcmdlKQogCQlkaWUoImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIG1lcmdlLiIpOwogCiAJbWVtc2V0KCZwYXJ0aWFsLCAwLCBzaXplb2YocGFydGlhbCkpOwpAQCAtMzQxLDI3ICszOTMsMzkgQEAKIAlyZXR1cm4gZmFsc2VfbG9jay5maWxlbmFtZTsKIH0KIAotc3RhdGljIGludCBydW5fc3RhdHVzKEZJTEUgKmZwLCBjb25zdCBjaGFyICppbmRleF9maWxlLCBjb25zdCBjaGFyICpwcmVmaXgsIGludCBub3dhcm4pCitzdGF0aWMgaW50IHJ1bl9zdGF0dXMoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmluZGV4X2ZpbGUsIGNvbnN0IGNoYXIgKnByZWZpeCwgaW50IG5vd2FybiwKKwkJICAgICAgc3RydWN0IHd0X3N0YXR1cyAqcykKIHsKLQlzdHJ1Y3Qgd3Rfc3RhdHVzIHM7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKIAotCXd0X3N0YXR1c19wcmVwYXJlKCZzKTsKLQlpZiAod3Rfc3RhdHVzX3JlbGF0aXZlX3BhdGhzKQotCQlzLnByZWZpeCA9IHByZWZpeDsKKwlpZiAocy0+cmVsYXRpdmVfcGF0aHMpCisJCXMtPnByZWZpeCA9IHByZWZpeDsKIAogCWlmIChhbWVuZCkgewotCQlzLmFtZW5kID0gMTsKLQkJcy5yZWZlcmVuY2UgPSAiSEVBRF4xIjsKKwkJcy0+YW1lbmQgPSAxOworCQlzLT5yZWZlcmVuY2UgPSAiSEVBRF4xIjsKIAl9Ci0Jcy52ZXJib3NlID0gdmVyYm9zZTsKLQlzLnVudHJhY2tlZCA9IChzaG93X3VudHJhY2tlZF9maWxlcyA9PSBTSE9XX0FMTF9VTlRSQUNLRURfRklMRVMpOwotCXMuaW5kZXhfZmlsZSA9IGluZGV4X2ZpbGU7Ci0Jcy5mcCA9IGZwOwotCXMubm93YXJuID0gbm93YXJuOworCXMtPnZlcmJvc2UgPSB2ZXJib3NlOworCXMtPmluZGV4X2ZpbGUgPSBpbmRleF9maWxlOworCXMtPmZwID0gZnA7CisJcy0+bm93YXJuID0gbm93YXJuOworCXMtPmlzX2luaXRpYWwgPSBnZXRfc2hhMShzLT5yZWZlcmVuY2UsIHNoYTEpID8gMSA6IDA7CiAKLQl3dF9zdGF0dXNfcHJpbnQoJnMpOworCXd0X3N0YXR1c19jb2xsZWN0KHMpOwogCi0JcmV0dXJuIHMuY29tbWl0YWJsZTsKKwlzd2l0Y2ggKHN0YXR1c19mb3JtYXQpIHsKKwljYXNlIFNUQVRVU19GT1JNQVRfU0hPUlQ6CisJCXd0X3Nob3J0c3RhdHVzX3ByaW50KHMsIG51bGxfdGVybWluYXRpb24pOworCQlicmVhazsKKwljYXNlIFNUQVRVU19GT1JNQVRfUE9SQ0VMQUlOOgorCQl3dF9wb3JjZWxhaW5fcHJpbnQocywgbnVsbF90ZXJtaW5hdGlvbik7CisJCWJyZWFrOworCWNhc2UgU1RBVFVTX0ZPUk1BVF9MT05HOgorCQl3dF9zdGF0dXNfcHJpbnQocyk7CisJCWJyZWFrOworCX0KKworCXJldHVybiBzLT5jb21taXRhYmxlOwogfQogCiBzdGF0aWMgaW50IGlzX2FfbWVyZ2UoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKQEAgLTM4Miw3ICs0NDYsNyBAQAogCWVtYWlsID0gZ2V0ZW52KCJHSVRfQVVUSE9SX0VNQUlMIik7CiAJZGF0ZSA9IGdldGVudigiR0lUX0FVVEhPUl9EQVRFIik7CiAKLQlpZiAodXNlX21lc3NhZ2UpIHsKKwlpZiAodXNlX21lc3NhZ2UgJiYgIXJlbmV3X2F1dGhvcnNoaXApIHsKIAkJY29uc3QgY2hhciAqYSwgKmxiLCAqcmIsICplb2w7CiAKIAkJYSA9IHN0cnN0cih1c2VfbWVzc2FnZV9idWZmZXIsICJcbmF1dGhvciAiKTsKQEAgLTQxMCwxMiArNDc0LDU3IEBACiAJCWVtYWlsID0geHN0cm5kdXAobGIgKyAyLCByYiAtIChsYiArIDIpKTsKIAl9CiAKKwlpZiAoZm9yY2VfZGF0ZSkKKwkJZGF0ZSA9IGZvcmNlX2RhdGU7CisKIAlhdXRob3JfbmFtZSA9IG5hbWU7CiAJYXV0aG9yX2VtYWlsID0gZW1haWw7CiAJYXV0aG9yX2RhdGUgPSBkYXRlOwogfQogCi1zdGF0aWMgaW50IHByZXBhcmVfdG9fY29tbWl0KGNvbnN0IGNoYXIgKmluZGV4X2ZpbGUsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3N0YXRpYyBpbnQgZW5kc19yZmMyODIyX2Zvb3RlcihzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlpbnQgY2g7CisJaW50IGhpdCA9IDA7CisJaW50IGksIGosIGs7CisJaW50IGxlbiA9IHNiLT5sZW47CisJaW50IGZpcnN0ID0gMTsKKwljb25zdCBjaGFyICpidWYgPSBzYi0+YnVmOworCisJZm9yIChpID0gbGVuIC0gMTsgaSA+IDA7IGktLSkgeworCQlpZiAoaGl0ICYmIGJ1ZltpXSA9PSAnXG4nKQorCQkJYnJlYWs7CisJCWhpdCA9IChidWZbaV0gPT0gJ1xuJyk7CisJfQorCisJd2hpbGUgKGkgPCBsZW4gLSAxICYmIGJ1ZltpXSA9PSAnXG4nKQorCQlpKys7CisKKwlmb3IgKDsgaSA8IGxlbjsgaSA9IGspIHsKKwkJZm9yIChrID0gaTsgayA8IGxlbiAmJiBidWZba10gIT0gJ1xuJzsgaysrKQorCQkJOyAvKiBkbyBub3RoaW5nICovCisJCWsrKzsKKworCQlpZiAoKGJ1ZltrXSA9PSAnICcgfHwgYnVmW2tdID09ICdcdCcpICYmICFmaXJzdCkKKwkJCWNvbnRpbnVlOworCisJCWZpcnN0ID0gMDsKKworCQlmb3IgKGogPSAwOyBpICsgaiA8IGxlbjsgaisrKSB7CisJCQljaCA9IGJ1ZltpICsgal07CisJCQlpZiAoY2ggPT0gJzonKQorCQkJCWJyZWFrOworCQkJaWYgKGlzYWxudW0oY2gpIHx8CisJCQkgICAgKGNoID09ICctJykpCisJCQkJY29udGludWU7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBwcmVwYXJlX3RvX2NvbW1pdChjb25zdCBjaGFyICppbmRleF9maWxlLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgICAgIHN0cnVjdCB3dF9zdGF0dXMgKnMpCiB7CiAJc3RydWN0IHN0YXQgc3RhdGJ1ZjsKIAlpbnQgY29tbWl0YWJsZSwgc2F2ZWRfY29sb3Jfc2V0dGluZzsKQEAgLTQzNiwxMiArNTQ1LDEyIEBACiAJCWlmIChpc2F0dHkoMCkpCiAJCQlmcHJpbnRmKHN0ZGVyciwgIihyZWFkaW5nIGxvZyBtZXNzYWdlIGZyb20gc3RhbmRhcmQgaW5wdXQpXG4iKTsKIAkJaWYgKHN0cmJ1Zl9yZWFkKCZzYiwgMCwgMCkgPCAwKQotCQkJZGllKCJjb3VsZCBub3QgcmVhZCBsb2cgZnJvbSBzdGFuZGFyZCBpbnB1dCIpOworCQkJZGllX2Vycm5vKCJjb3VsZCBub3QgcmVhZCBsb2cgZnJvbSBzdGFuZGFyZCBpbnB1dCIpOwogCQlob29rX2FyZzEgPSAibWVzc2FnZSI7CiAJfSBlbHNlIGlmIChsb2dmaWxlKSB7CiAJCWlmIChzdHJidWZfcmVhZF9maWxlKCZzYiwgbG9nZmlsZSwgMCkgPCAwKQotCQkJZGllKCJjb3VsZCBub3QgcmVhZCBsb2cgZmlsZSAnJXMnOiAlcyIsCi0JCQkgICAgbG9nZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygiY291bGQgbm90IHJlYWQgbG9nIGZpbGUgJyVzJyIsCisJCQkJICBsb2dmaWxlKTsKIAkJaG9va19hcmcxID0gIm1lc3NhZ2UiOwogCX0gZWxzZSBpZiAodXNlX21lc3NhZ2UpIHsKIAkJYnVmZmVyID0gc3Ryc3RyKHVzZV9tZXNzYWdlX2J1ZmZlciwgIlxuXG4iKTsKQEAgLTQ1MiwxNiArNTYxLDE1IEBACiAJCWhvb2tfYXJnMiA9IHVzZV9tZXNzYWdlOwogCX0gZWxzZSBpZiAoIXN0YXQoZ2l0X3BhdGgoIk1FUkdFX01TRyIpLCAmc3RhdGJ1ZikpIHsKIAkJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJnNiLCBnaXRfcGF0aCgiTUVSR0VfTVNHIiksIDApIDwgMCkKLQkJCWRpZSgiY291bGQgbm90IHJlYWQgTUVSR0VfTVNHOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCQlkaWVfZXJybm8oImNvdWxkIG5vdCByZWFkIE1FUkdFX01TRyIpOwogCQlob29rX2FyZzEgPSAibWVyZ2UiOwogCX0gZWxzZSBpZiAoIXN0YXQoZ2l0X3BhdGgoIlNRVUFTSF9NU0ciKSwgJnN0YXRidWYpKSB7CiAJCWlmIChzdHJidWZfcmVhZF9maWxlKCZzYiwgZ2l0X3BhdGgoIlNRVUFTSF9NU0ciKSwgMCkgPCAwKQotCQkJZGllKCJjb3VsZCBub3QgcmVhZCBTUVVBU0hfTVNHOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCQlkaWVfZXJybm8oImNvdWxkIG5vdCByZWFkIFNRVUFTSF9NU0ciKTsKIAkJaG9va19hcmcxID0gInNxdWFzaCI7CiAJfSBlbHNlIGlmICh0ZW1wbGF0ZV9maWxlICYmICFzdGF0KHRlbXBsYXRlX2ZpbGUsICZzdGF0YnVmKSkgewogCQlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmc2IsIHRlbXBsYXRlX2ZpbGUsIDApIDwgMCkKLQkJCWRpZSgiY291bGQgbm90IHJlYWQgJXM6ICVzIiwKLQkJCSAgICB0ZW1wbGF0ZV9maWxlLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJjb3VsZCBub3QgcmVhZCAnJXMnIiwgdGVtcGxhdGVfZmlsZSk7CiAJCWhvb2tfYXJnMSA9ICJ0ZW1wbGF0ZSI7CiAJfQogCkBAIC00NzQsOCArNTgyLDcgQEAKIAogCWZwID0gZm9wZW4oZ2l0X3BhdGgoY29tbWl0X2VkaXRtc2cpLCAidyIpOwogCWlmIChmcCA9PSBOVUxMKQotCQlkaWUoImNvdWxkIG5vdCBvcGVuICVzOiAlcyIsCi0JCSAgICBnaXRfcGF0aChjb21taXRfZWRpdG1zZyksIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiY291bGQgbm90IG9wZW4gJyVzJyIsIGdpdF9wYXRoKGNvbW1pdF9lZGl0bXNnKSk7CiAKIAlpZiAoY2xlYW51cF9tb2RlICE9IENMRUFOVVBfTk9ORSkKIAkJc3RyaXBzcGFjZSgmc2IsIDApOwpAQCAtNDkxLDcgKzU5OCw3IEBACiAJCWZvciAoaSA9IHNiLmxlbiAtIDE7IGkgPiAwICYmIHNiLmJ1ZltpIC0gMV0gIT0gJ1xuJzsgaS0tKQogCQkJOyAvKiBkbyBub3RoaW5nICovCiAJCWlmIChwcmVmaXhjbXAoc2IuYnVmICsgaSwgc29iLmJ1ZikpIHsKLQkJCWlmIChwcmVmaXhjbXAoc2IuYnVmICsgaSwgc2lnbl9vZmZfaGVhZGVyKSkKKwkJCWlmICghaSB8fCAhZW5kc19yZmMyODIyX2Zvb3Rlcigmc2IpKQogCQkJCXN0cmJ1Zl9hZGRjaCgmc2IsICdcbicpOwogCQkJc3RyYnVmX2FkZGJ1Zigmc2IsICZzb2IpOwogCQl9CkBAIC00OTksNyArNjA2LDcgQEAKIAl9CiAKIAlpZiAoZndyaXRlKHNiLmJ1ZiwgMSwgc2IubGVuLCBmcCkgPCBzYi5sZW4pCi0JCWRpZSgiY291bGQgbm90IHdyaXRlIGNvbW1pdCB0ZW1wbGF0ZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImNvdWxkIG5vdCB3cml0ZSBjb21taXQgdGVtcGxhdGUiKTsKIAogCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CiAKQEAgLTUwNyw3ICs2MTQsNyBAQAogCiAJLyogVGhpcyBjaGVja3MgaWYgY29tbWl0dGVyIGlkZW50IGlzIGV4cGxpY2l0bHkgZ2l2ZW4gKi8KIAlnaXRfY29tbWl0dGVyX2luZm8oMCk7Ci0JaWYgKHVzZV9lZGl0b3IpIHsKKwlpZiAodXNlX2VkaXRvciAmJiBpbmNsdWRlX3N0YXR1cykgewogCQljaGFyICphdXRob3JfaWRlbnQ7CiAJCWNvbnN0IGNoYXIgKmNvbW1pdHRlcl9pZGVudDsKIApAQCAtNTQ5LDcgKzY1Niw3IEBACiAJCQkJYXV0aG9yX2lkZW50KTsKIAkJZnJlZShhdXRob3JfaWRlbnQpOwogCi0JCWlmICghdXNlcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuKQorCQlpZiAoIXVzZXJfaWRlbnRfc3VmZmljaWVudGx5X2dpdmVuKCkpCiAJCQlmcHJpbnRmKGZwLAogCQkJCSIlcyIKIAkJCQkiIyBDb21taXR0ZXI6ICVzXG4iLApAQCAtNTU5LDEwICs2NjYsMTAgQEAKIAkJaWYgKGlkZW50X3Nob3duKQogCQkJZnByaW50ZihmcCwgIiNcbiIpOwogCi0JCXNhdmVkX2NvbG9yX3NldHRpbmcgPSB3dF9zdGF0dXNfdXNlX2NvbG9yOwotCQl3dF9zdGF0dXNfdXNlX2NvbG9yID0gMDsKLQkJY29tbWl0YWJsZSA9IHJ1bl9zdGF0dXMoZnAsIGluZGV4X2ZpbGUsIHByZWZpeCwgMSk7Ci0JCXd0X3N0YXR1c191c2VfY29sb3IgPSBzYXZlZF9jb2xvcl9zZXR0aW5nOworCQlzYXZlZF9jb2xvcl9zZXR0aW5nID0gcy0+dXNlX2NvbG9yOworCQlzLT51c2VfY29sb3IgPSAwOworCQljb21taXRhYmxlID0gcnVuX3N0YXR1cyhmcCwgaW5kZXhfZmlsZSwgcHJlZml4LCAxLCBzKTsKKwkJcy0+dXNlX2NvbG9yID0gc2F2ZWRfY29sb3Jfc2V0dGluZzsKIAl9IGVsc2UgewogCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwogCQljb25zdCBjaGFyICpwYXJlbnQgPSAiSEVBRCI7CkBAIC01ODMsNyArNjkwLDcgQEAKIAogCWlmICghY29tbWl0YWJsZSAmJiAhaW5fbWVyZ2UgJiYgIWFsbG93X2VtcHR5ICYmCiAJICAgICEoYW1lbmQgJiYgaXNfYV9tZXJnZShoZWFkX3NoYTEpKSkgewotCQlydW5fc3RhdHVzKHN0ZG91dCwgaW5kZXhfZmlsZSwgcHJlZml4LCAwKTsKKwkJcnVuX3N0YXR1cyhzdGRvdXQsIGluZGV4X2ZpbGUsIHByZWZpeCwgMCwgcyk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNjg2LDMwICs3OTMsNDYgQEAKIAlwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldnMpOwogCWNvbW1pdCA9IGdldF9yZXZpc2lvbigmcmV2cyk7CiAJaWYgKGNvbW1pdCkgeworCQlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgY3R4ID0gezB9OworCQljdHguZGF0ZV9tb2RlID0gREFURV9OT1JNQUw7CiAJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOwotCQlmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29tbWl0LCAiJWFuIDwlYWU+IiwgJmJ1ZiwgREFURV9OT1JNQUwpOworCQlmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29tbWl0LCAiJWFuIDwlYWU+IiwgJmJ1ZiwgJmN0eCk7CiAJCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOwogCX0KIAlkaWUoIk5vIGV4aXN0aW5nIGF1dGhvciBmb3VuZCB3aXRoICclcyciLCBuYW1lKTsKIH0KIAorCitzdGF0aWMgdm9pZCBoYW5kbGVfdW50cmFja2VkX2ZpbGVzX2FyZyhzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCWlmICghdW50cmFja2VkX2ZpbGVzX2FyZykKKwkJOyAvKiBkZWZhdWx0IGFscmVhZHkgaW5pdGlhbGl6ZWQgKi8KKwllbHNlIGlmICghc3RyY21wKHVudHJhY2tlZF9maWxlc19hcmcsICJubyIpKQorCQlzLT5zaG93X3VudHJhY2tlZF9maWxlcyA9IFNIT1dfTk9fVU5UUkFDS0VEX0ZJTEVTOworCWVsc2UgaWYgKCFzdHJjbXAodW50cmFja2VkX2ZpbGVzX2FyZywgIm5vcm1hbCIpKQorCQlzLT5zaG93X3VudHJhY2tlZF9maWxlcyA9IFNIT1dfTk9STUFMX1VOVFJBQ0tFRF9GSUxFUzsKKwllbHNlIGlmICghc3RyY21wKHVudHJhY2tlZF9maWxlc19hcmcsICJhbGwiKSkKKwkJcy0+c2hvd191bnRyYWNrZWRfZmlsZXMgPSBTSE9XX0FMTF9VTlRSQUNLRURfRklMRVM7CisJZWxzZQorCQlkaWUoIkludmFsaWQgdW50cmFja2VkIGZpbGVzIG1vZGUgJyVzJyIsIHVudHJhY2tlZF9maWxlc19hcmcpOworfQorCiBzdGF0aWMgaW50IHBhcnNlX2FuZF92YWxpZGF0ZV9vcHRpb25zKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10sCiAJCQkJICAgICAgY29uc3QgY2hhciAqIGNvbnN0IHVzYWdlW10sCi0JCQkJICAgICAgY29uc3QgY2hhciAqcHJlZml4KQorCQkJCSAgICAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkgICAgICBzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQogewogCWludCBmID0gMDsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGJ1aWx0aW5fY29tbWl0X29wdGlvbnMsIHVzYWdlLCAwKTsKLQlsb2dmaWxlID0gcGFyc2Vfb3B0aW9uc19maXhfZmlsZW5hbWUocHJlZml4LCBsb2dmaWxlKTsKLQlpZiAobG9nZmlsZSkKLQkJbG9nZmlsZSA9IHhzdHJkdXAobG9nZmlsZSk7Ci0JdGVtcGxhdGVfZmlsZSA9IHBhcnNlX29wdGlvbnNfZml4X2ZpbGVuYW1lKHByZWZpeCwgdGVtcGxhdGVfZmlsZSk7Ci0JaWYgKHRlbXBsYXRlX2ZpbGUpCi0JCXRlbXBsYXRlX2ZpbGUgPSB4c3RyZHVwKHRlbXBsYXRlX2ZpbGUpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgYnVpbHRpbl9jb21taXRfb3B0aW9ucywgdXNhZ2UsCisJCQkgICAgIDApOwogCiAJaWYgKGZvcmNlX2F1dGhvciAmJiAhc3RyY2hyKGZvcmNlX2F1dGhvciwgJz4nKSkKIAkJZm9yY2VfYXV0aG9yID0gZmluZF9hdXRob3JfYnlfbmlja25hbWUoZm9yY2VfYXV0aG9yKTsKIAorCWlmIChmb3JjZV9hdXRob3IgJiYgcmVuZXdfYXV0aG9yc2hpcCkKKwkJZGllKCJVc2luZyBib3RoIC0tcmVzZXQtYXV0aG9yIGFuZCAtLWF1dGhvciBkb2VzIG5vdCBtYWtlIHNlbnNlIik7CisKIAlpZiAobG9nZmlsZSB8fCBtZXNzYWdlLmxlbiB8fCB1c2VfbWVzc2FnZSkKIAkJdXNlX2VkaXRvciA9IDA7CiAJaWYgKGVkaXRfZmxhZykKQEAgLTcyMCw5ICs4NDMsNiBAQAogCWlmIChnZXRfc2hhMSgiSEVBRCIsIGhlYWRfc2hhMSkpCiAJCWluaXRpYWxfY29tbWl0ID0gMTsKIAotCWlmICghZ2V0X3NoYTEoIk1FUkdFX0hFQUQiLCBtZXJnZV9oZWFkX3NoYTEpKQotCQlpbl9tZXJnZSA9IDE7Ci0KIAkvKiBTYW5pdHkgY2hlY2sgb3B0aW9ucyAqLwogCWlmIChhbWVuZCAmJiBpbml0aWFsX2NvbW1pdCkKIAkJZGllKCJZb3UgaGF2ZSBub3RoaW5nIHRvIGFtZW5kLiIpOwpAQCAtNzQzLDYgKzg2Myw4IEBACiAJCXVzZV9tZXNzYWdlID0gZWRpdF9tZXNzYWdlOwogCWlmIChhbWVuZCAmJiAhdXNlX21lc3NhZ2UpCiAJCXVzZV9tZXNzYWdlID0gIkhFQUQiOworCWlmICghdXNlX21lc3NhZ2UgJiYgcmVuZXdfYXV0aG9yc2hpcCkKKwkJZGllKCItLXJlc2V0LWF1dGhvciBjYW4gYmUgdXNlZCBvbmx5IHdpdGggLUMsIC1jIG9yIC0tYW1lbmQuIik7CiAJaWYgKHVzZV9tZXNzYWdlKSB7CiAJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CiAJCXN0YXRpYyBjaGFyIHV0ZjhbXSA9ICJVVEYtOCI7CkBAIC04MDAsNTYgKzkyMiwxNjggQEAKIAllbHNlCiAJCWRpZSgiSW52YWxpZCBjbGVhbnVwIG1vZGUgJXMiLCBjbGVhbnVwX2FyZyk7CiAKLQlpZiAoIXVudHJhY2tlZF9maWxlc19hcmcpCi0JCTsgLyogZGVmYXVsdCBhbHJlYWR5IGluaXRpYWxpemVkICovCi0JZWxzZSBpZiAoIXN0cmNtcCh1bnRyYWNrZWRfZmlsZXNfYXJnLCAibm8iKSkKLQkJc2hvd191bnRyYWNrZWRfZmlsZXMgPSBTSE9XX05PX1VOVFJBQ0tFRF9GSUxFUzsKLQllbHNlIGlmICghc3RyY21wKHVudHJhY2tlZF9maWxlc19hcmcsICJub3JtYWwiKSkKLQkJc2hvd191bnRyYWNrZWRfZmlsZXMgPSBTSE9XX05PUk1BTF9VTlRSQUNLRURfRklMRVM7Ci0JZWxzZSBpZiAoIXN0cmNtcCh1bnRyYWNrZWRfZmlsZXNfYXJnLCAiYWxsIikpCi0JCXNob3dfdW50cmFja2VkX2ZpbGVzID0gU0hPV19BTExfVU5UUkFDS0VEX0ZJTEVTOwotCWVsc2UKLQkJZGllKCJJbnZhbGlkIHVudHJhY2tlZCBmaWxlcyBtb2RlICclcyciLCB1bnRyYWNrZWRfZmlsZXNfYXJnKTsKKwloYW5kbGVfdW50cmFja2VkX2ZpbGVzX2FyZyhzKTsKIAogCWlmIChhbGwgJiYgYXJnYyA+IDApCiAJCWRpZSgiUGF0aHMgd2l0aCAtYSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIpOwogCWVsc2UgaWYgKGludGVyYWN0aXZlICYmIGFyZ2MgPiAwKQogCQlkaWUoIlBhdGhzIHdpdGggLS1pbnRlcmFjdGl2ZSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIpOwogCisJaWYgKG51bGxfdGVybWluYXRpb24gJiYgc3RhdHVzX2Zvcm1hdCA9PSBTVEFUVVNfRk9STUFUX0xPTkcpCisJCXN0YXR1c19mb3JtYXQgPSBTVEFUVVNfRk9STUFUX1BPUkNFTEFJTjsKKwlpZiAoc3RhdHVzX2Zvcm1hdCAhPSBTVEFUVVNfRk9STUFUX0xPTkcpCisJCWRyeV9ydW4gPSAxOworCiAJcmV0dXJuIGFyZ2M7CiB9CiAKK3N0YXRpYyBpbnQgZHJ5X3J1bl9jb21taXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgIHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJaW50IGNvbW1pdGFibGU7CisJY29uc3QgY2hhciAqaW5kZXhfZmlsZTsKKworCWluZGV4X2ZpbGUgPSBwcmVwYXJlX2luZGV4KGFyZ2MsIGFyZ3YsIHByZWZpeCwgMSk7CisJY29tbWl0YWJsZSA9IHJ1bl9zdGF0dXMoc3Rkb3V0LCBpbmRleF9maWxlLCBwcmVmaXgsIDAsIHMpOworCXJvbGxiYWNrX2luZGV4X2ZpbGVzKCk7CisKKwlyZXR1cm4gY29tbWl0YWJsZSA/IDAgOiAxOworfQorCitzdGF0aWMgaW50IHBhcnNlX3N0YXR1c19zbG90KGNvbnN0IGNoYXIgKnZhciwgaW50IG9mZnNldCkKK3sKKwlpZiAoIXN0cmNhc2VjbXAodmFyK29mZnNldCwgImhlYWRlciIpKQorCQlyZXR1cm4gV1RfU1RBVFVTX0hFQURFUjsKKwlpZiAoIXN0cmNhc2VjbXAodmFyK29mZnNldCwgInVwZGF0ZWQiKQorCQl8fCAhc3RyY2FzZWNtcCh2YXIrb2Zmc2V0LCAiYWRkZWQiKSkKKwkJcmV0dXJuIFdUX1NUQVRVU19VUERBVEVEOworCWlmICghc3RyY2FzZWNtcCh2YXIrb2Zmc2V0LCAiY2hhbmdlZCIpKQorCQlyZXR1cm4gV1RfU1RBVFVTX0NIQU5HRUQ7CisJaWYgKCFzdHJjYXNlY21wKHZhcitvZmZzZXQsICJ1bnRyYWNrZWQiKSkKKwkJcmV0dXJuIFdUX1NUQVRVU19VTlRSQUNLRUQ7CisJaWYgKCFzdHJjYXNlY21wKHZhcitvZmZzZXQsICJub2JyYW5jaCIpKQorCQlyZXR1cm4gV1RfU1RBVFVTX05PQlJBTkNIOworCWlmICghc3RyY2FzZWNtcCh2YXIrb2Zmc2V0LCAidW5tZXJnZWQiKSkKKwkJcmV0dXJuIFdUX1NUQVRVU19VTk1FUkdFRDsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X3N0YXR1c19jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdiwgdm9pZCAqY2IpCit7CisJc3RydWN0IHd0X3N0YXR1cyAqcyA9IGNiOworCisJaWYgKCFzdHJjbXAoaywgInN0YXR1cy5zdWJtb2R1bGVzdW1tYXJ5IikpIHsKKwkJaW50IGlzX2Jvb2w7CisJCXMtPnN1Ym1vZHVsZV9zdW1tYXJ5ID0gZ2l0X2NvbmZpZ19ib29sX29yX2ludChrLCB2LCAmaXNfYm9vbCk7CisJCWlmIChpc19ib29sICYmIHMtPnN1Ym1vZHVsZV9zdW1tYXJ5KQorCQkJcy0+c3VibW9kdWxlX3N1bW1hcnkgPSAtMTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJzdGF0dXMuY29sb3IiKSB8fCAhc3RyY21wKGssICJjb2xvci5zdGF0dXMiKSkgeworCQlzLT51c2VfY29sb3IgPSBnaXRfY29uZmlnX2NvbG9yYm9vbChrLCB2LCAtMSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXByZWZpeGNtcChrLCAic3RhdHVzLmNvbG9yLiIpIHx8ICFwcmVmaXhjbXAoaywgImNvbG9yLnN0YXR1cy4iKSkgeworCQlpbnQgc2xvdCA9IHBhcnNlX3N0YXR1c19zbG90KGssIDEzKTsKKwkJaWYgKHNsb3QgPCAwKQorCQkJcmV0dXJuIDA7CisJCWlmICghdikKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbChrKTsKKwkJY29sb3JfcGFyc2Uodiwgaywgcy0+Y29sb3JfcGFsZXR0ZVtzbG90XSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChrLCAic3RhdHVzLnJlbGF0aXZlcGF0aHMiKSkgeworCQlzLT5yZWxhdGl2ZV9wYXRocyA9IGdpdF9jb25maWdfYm9vbChrLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJzdGF0dXMuc2hvd3VudHJhY2tlZGZpbGVzIikpIHsKKwkJaWYgKCF2KQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKGspOworCQllbHNlIGlmICghc3RyY21wKHYsICJubyIpKQorCQkJcy0+c2hvd191bnRyYWNrZWRfZmlsZXMgPSBTSE9XX05PX1VOVFJBQ0tFRF9GSUxFUzsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2LCAibm9ybWFsIikpCisJCQlzLT5zaG93X3VudHJhY2tlZF9maWxlcyA9IFNIT1dfTk9STUFMX1VOVFJBQ0tFRF9GSUxFUzsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2LCAiYWxsIikpCisJCQlzLT5zaG93X3VudHJhY2tlZF9maWxlcyA9IFNIT1dfQUxMX1VOVFJBQ0tFRF9GSUxFUzsKKwkJZWxzZQorCQkJcmV0dXJuIGVycm9yKCJJbnZhbGlkIHVudHJhY2tlZCBmaWxlcyBtb2RlICclcyciLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBnaXRfZGlmZl91aV9jb25maWcoaywgdiwgTlVMTCk7Cit9CisKIGludCBjbWRfc3RhdHVzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQogewotCWNvbnN0IGNoYXIgKmluZGV4X2ZpbGU7Ci0JaW50IGNvbW1pdGFibGU7CisJc3RydWN0IHd0X3N0YXR1cyBzOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJc3RhdGljIHN0cnVjdCBvcHRpb24gYnVpbHRpbl9zdGF0dXNfb3B0aW9uc1tdID0geworCQlPUFRfX1ZFUkJPU0UoJnZlcmJvc2UpLAorCQlPUFRfU0VUX0lOVCgncycsICJzaG9ydCIsICZzdGF0dXNfZm9ybWF0LAorCQkJICAgICJzaG93IHN0YXR1cyBjb25jaXNlbHkiLCBTVEFUVVNfRk9STUFUX1NIT1JUKSwKKwkJT1BUX1NFVF9JTlQoMCwgInBvcmNlbGFpbiIsICZzdGF0dXNfZm9ybWF0LAorCQkJICAgICJzaG93IHBvcmNlbGFpbiBvdXRwdXQgZm9ybWF0IiwKKwkJCSAgICBTVEFUVVNfRk9STUFUX1BPUkNFTEFJTiksCisJCU9QVF9CT09MRUFOKCd6JywgIm51bGwiLCAmbnVsbF90ZXJtaW5hdGlvbiwKKwkJCSAgICAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwiKSwKKwkJeyBPUFRJT05fU1RSSU5HLCAndScsICJ1bnRyYWNrZWQtZmlsZXMiLCAmdW50cmFja2VkX2ZpbGVzX2FyZywKKwkJICAibW9kZSIsCisJCSAgInNob3cgdW50cmFja2VkIGZpbGVzLCBvcHRpb25hbCBtb2RlczogYWxsLCBub3JtYWwsIG5vLiAoRGVmYXVsdDogYWxsKSIsCisJCSAgUEFSU0VfT1BUX09QVEFSRywgTlVMTCwgKGludHB0cl90KSJhbGwiIH0sCisJCU9QVF9FTkQoKSwKKwl9OwogCi0JZ2l0X2NvbmZpZyhnaXRfc3RhdHVzX2NvbmZpZywgTlVMTCk7CisJaWYgKG51bGxfdGVybWluYXRpb24gJiYgc3RhdHVzX2Zvcm1hdCA9PSBTVEFUVVNfRk9STUFUX0xPTkcpCisJCXN0YXR1c19mb3JtYXQgPSBTVEFUVVNfRk9STUFUX1BPUkNFTEFJTjsKIAotCWlmICh3dF9zdGF0dXNfdXNlX2NvbG9yID09IC0xKQotCQl3dF9zdGF0dXNfdXNlX2NvbG9yID0gZ2l0X3VzZV9jb2xvcl9kZWZhdWx0OworCXd0X3N0YXR1c19wcmVwYXJlKCZzKTsKKwlnaXRfY29uZmlnKGdpdF9zdGF0dXNfY29uZmlnLCAmcyk7CisJaW5fbWVyZ2UgPSBmaWxlX2V4aXN0cyhnaXRfcGF0aCgiTUVSR0VfSEVBRCIpKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsCisJCQkgICAgIGJ1aWx0aW5fc3RhdHVzX29wdGlvbnMsCisJCQkgICAgIGJ1aWx0aW5fc3RhdHVzX3VzYWdlLCAwKTsKKwloYW5kbGVfdW50cmFja2VkX2ZpbGVzX2FyZygmcyk7CiAKKwlpZiAoKmFyZ3YpCisJCXMucGF0aHNwZWMgPSBnZXRfcGF0aHNwZWMocHJlZml4LCBhcmd2KTsKKworCXJlYWRfY2FjaGVfcHJlbG9hZChzLnBhdGhzcGVjKTsKKwlyZWZyZXNoX2luZGV4KCZ0aGVfaW5kZXgsIFJFRlJFU0hfUVVJRVR8UkVGUkVTSF9VTk1FUkdFRCwgcy5wYXRoc3BlYywgTlVMTCwgTlVMTCk7CisJcy5pc19pbml0aWFsID0gZ2V0X3NoYTEocy5yZWZlcmVuY2UsIHNoYTEpID8gMSA6IDA7CisJcy5pbl9tZXJnZSA9IGluX21lcmdlOworCXd0X3N0YXR1c19jb2xsZWN0KCZzKTsKKworCWlmIChzLnJlbGF0aXZlX3BhdGhzKQorCQlzLnByZWZpeCA9IHByZWZpeDsKKwlpZiAocy51c2VfY29sb3IgPT0gLTEpCisJCXMudXNlX2NvbG9yID0gZ2l0X3VzZV9jb2xvcl9kZWZhdWx0OwogCWlmIChkaWZmX3VzZV9jb2xvcl9kZWZhdWx0ID09IC0xKQogCQlkaWZmX3VzZV9jb2xvcl9kZWZhdWx0ID0gZ2l0X3VzZV9jb2xvcl9kZWZhdWx0OwogCi0JYXJnYyA9IHBhcnNlX2FuZF92YWxpZGF0ZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGJ1aWx0aW5fc3RhdHVzX3VzYWdlLCBwcmVmaXgpOwotCi0JaW5kZXhfZmlsZSA9IHByZXBhcmVfaW5kZXgoYXJnYywgYXJndiwgcHJlZml4KTsKLQotCWNvbW1pdGFibGUgPSBydW5fc3RhdHVzKHN0ZG91dCwgaW5kZXhfZmlsZSwgcHJlZml4LCAwKTsKLQotCXJvbGxiYWNrX2luZGV4X2ZpbGVzKCk7Ci0KLQlyZXR1cm4gY29tbWl0YWJsZSA/IDAgOiAxOworCXN3aXRjaCAoc3RhdHVzX2Zvcm1hdCkgeworCWNhc2UgU1RBVFVTX0ZPUk1BVF9TSE9SVDoKKwkJd3Rfc2hvcnRzdGF0dXNfcHJpbnQoJnMsIG51bGxfdGVybWluYXRpb24pOworCQlicmVhazsKKwljYXNlIFNUQVRVU19GT1JNQVRfUE9SQ0VMQUlOOgorCQl3dF9wb3JjZWxhaW5fcHJpbnQoJnMsIG51bGxfdGVybWluYXRpb24pOworCQlicmVhazsKKwljYXNlIFNUQVRVU19GT1JNQVRfTE9ORzoKKwkJcy52ZXJib3NlID0gdmVyYm9zZTsKKwkJd3Rfc3RhdHVzX3ByaW50KCZzKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBwcmludF9zdW1tYXJ5KGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKIAlzdHJ1Y3QgcmV2X2luZm8gcmV2OwogCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKLQlzdGF0aWMgY29uc3QgY2hhciAqZm9ybWF0ID0gImZvcm1hdDolaF0gJXMiOworCXN0cnVjdCBzdHJidWYgZm9ybWF0ID0gU1RSQlVGX0lOSVQ7CiAJdW5zaWduZWQgY2hhciBqdW5rX3NoYTFbMjBdOwogCWNvbnN0IGNoYXIgKmhlYWQgPSByZXNvbHZlX3JlZigiSEVBRCIsIGp1bmtfc2hhMSwgMCwgTlVMTCk7CisJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IHBjdHggPSB7MH07CisJc3RydWN0IHN0cmJ1ZiBhdXRob3JfaWRlbnQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGNvbW1pdHRlcl9pZGVudCA9IFNUUkJVRl9JTklUOwogCiAJY29tbWl0ID0gbG9va3VwX2NvbW1pdChzaGExKTsKIAlpZiAoIWNvbW1pdCkKQEAgLTg1Nyw2ICsxMDkxLDI1IEBACiAJaWYgKCFjb21taXQgfHwgcGFyc2VfY29tbWl0KGNvbW1pdCkpCiAJCWRpZSgiY291bGQgbm90IHBhcnNlIG5ld2x5IGNyZWF0ZWQgY29tbWl0Iik7CiAKKwlzdHJidWZfYWRkc3RyKCZmb3JtYXQsICJmb3JtYXQ6JWhdICVzIik7CisKKwlmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29tbWl0LCAiJWFuIDwlYWU+IiwgJmF1dGhvcl9pZGVudCwgJnBjdHgpOworCWZvcm1hdF9jb21taXRfbWVzc2FnZShjb21taXQsICIlY24gPCVjZT4iLCAmY29tbWl0dGVyX2lkZW50LCAmcGN0eCk7CisJaWYgKHN0cmJ1Zl9jbXAoJmF1dGhvcl9pZGVudCwgJmNvbW1pdHRlcl9pZGVudCkpIHsKKwkJc3RyYnVmX2FkZHN0cigmZm9ybWF0LCAiXG4gQXV0aG9yOiAiKTsKKwkJc3RyYnVmX2FkZGJ1Zl9wZXJjZW50cXVvdGUoJmZvcm1hdCwgJmF1dGhvcl9pZGVudCk7CisJfQorCWlmICghdXNlcl9pZGVudF9zdWZmaWNpZW50bHlfZ2l2ZW4oKSkgeworCQlzdHJidWZfYWRkc3RyKCZmb3JtYXQsICJcbiBDb21taXR0ZXI6ICIpOworCQlzdHJidWZfYWRkYnVmX3BlcmNlbnRxdW90ZSgmZm9ybWF0LCAmY29tbWl0dGVyX2lkZW50KTsKKwkJaWYgKGFkdmljZV9pbXBsaWNpdF9pZGVudGl0eSkgeworCQkJc3RyYnVmX2FkZGNoKCZmb3JtYXQsICdcbicpOworCQkJc3RyYnVmX2FkZHN0cigmZm9ybWF0LCBpbXBsaWNpdF9pZGVudF9hZHZpY2UpOworCQl9CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZhdXRob3JfaWRlbnQpOworCXN0cmJ1Zl9yZWxlYXNlKCZjb21taXR0ZXJfaWRlbnQpOworCiAJaW5pdF9yZXZpc2lvbnMoJnJldiwgcHJlZml4KTsKIAlzZXR1cF9yZXZpc2lvbnMoMCwgTlVMTCwgJnJldiwgTlVMTCk7CiAKQEAgLTg2Nyw3ICsxMTIwLDcgQEAKIAogCXJldi52ZXJib3NlX2hlYWRlciA9IDE7CiAJcmV2LnNob3dfcm9vdF9kaWZmID0gMTsKLQlnZXRfY29tbWl0X2Zvcm1hdChmb3JtYXQsICZyZXYpOworCWdldF9jb21taXRfZm9ybWF0KGZvcm1hdC5idWYsICZyZXYpOwogCXJldi5hbHdheXNfc2hvd19oZWFkZXIgPSAwOwogCXJldi5kaWZmb3B0LmRldGVjdF9yZW5hbWUgPSAxOwogCXJldi5kaWZmb3B0LnJlbmFtZV9saW1pdCA9IDEwMDsKQEAgLTg4MywxOSArMTEzNiwyOCBAQAogCQlpbml0aWFsX2NvbW1pdCA/ICIgKHJvb3QtY29tbWl0KSIgOiAiIik7CiAKIAlpZiAoIWxvZ190cmVlX2NvbW1pdCgmcmV2LCBjb21taXQpKSB7CisJCXN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCBjdHggPSB7MH07CiAJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7Ci0JCWZvcm1hdF9jb21taXRfbWVzc2FnZShjb21taXQsIGZvcm1hdCArIDcsICZidWYsIERBVEVfTk9STUFMKTsKKwkJY3R4LmRhdGVfbW9kZSA9IERBVEVfTk9STUFMOworCQlmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29tbWl0LCBmb3JtYXQuYnVmICsgNywgJmJ1ZiwgJmN0eCk7CiAJCXByaW50ZigiJXNcbiIsIGJ1Zi5idWYpOwogCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKIAl9CisJc3RyYnVmX3JlbGVhc2UoJmZvcm1hdCk7CiB9CiAKIHN0YXRpYyBpbnQgZ2l0X2NvbW1pdF9jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdiwgdm9pZCAqY2IpCiB7Ci0JaWYgKCFzdHJjbXAoaywgImNvbW1pdC50ZW1wbGF0ZSIpKQotCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJnRlbXBsYXRlX2ZpbGUsIGssIHYpOworCXN0cnVjdCB3dF9zdGF0dXMgKnMgPSBjYjsKIAotCXJldHVybiBnaXRfc3RhdHVzX2NvbmZpZyhrLCB2LCBjYik7CisJaWYgKCFzdHJjbXAoaywgImNvbW1pdC50ZW1wbGF0ZSIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19wYXRobmFtZSgmdGVtcGxhdGVfZmlsZSwgaywgdik7CisJaWYgKCFzdHJjbXAoaywgImNvbW1pdC5zdGF0dXMiKSkgeworCQlpbmNsdWRlX3N0YXR1cyA9IGdpdF9jb25maWdfYm9vbChrLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIGdpdF9zdGF0dXNfY29uZmlnKGssIHYsIHMpOwogfQogCiBpbnQgY21kX2NvbW1pdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKQEAgLTkwOCwxOSArMTE3MCwyNyBAQAogCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cyA9IE5VTEwsICoqcHB0ciA9ICZwYXJlbnRzOwogCXN0cnVjdCBzdGF0IHN0YXRidWY7CiAJaW50IGFsbG93X2Zhc3RfZm9yd2FyZCA9IDE7CisJc3RydWN0IHd0X3N0YXR1cyBzOwogCi0JZ2l0X2NvbmZpZyhnaXRfY29tbWl0X2NvbmZpZywgTlVMTCk7CisJd3Rfc3RhdHVzX3ByZXBhcmUoJnMpOworCWdpdF9jb25maWcoZ2l0X2NvbW1pdF9jb25maWcsICZzKTsKKwlpbl9tZXJnZSA9IGZpbGVfZXhpc3RzKGdpdF9wYXRoKCJNRVJHRV9IRUFEIikpOworCXMuaW5fbWVyZ2UgPSBpbl9tZXJnZTsKIAotCWlmICh3dF9zdGF0dXNfdXNlX2NvbG9yID09IC0xKQotCQl3dF9zdGF0dXNfdXNlX2NvbG9yID0gZ2l0X3VzZV9jb2xvcl9kZWZhdWx0OwotCi0JYXJnYyA9IHBhcnNlX2FuZF92YWxpZGF0ZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGJ1aWx0aW5fY29tbWl0X3VzYWdlLCBwcmVmaXgpOwotCi0JaW5kZXhfZmlsZSA9IHByZXBhcmVfaW5kZXgoYXJnYywgYXJndiwgcHJlZml4KTsKKwlpZiAocy51c2VfY29sb3IgPT0gLTEpCisJCXMudXNlX2NvbG9yID0gZ2l0X3VzZV9jb2xvcl9kZWZhdWx0OworCWFyZ2MgPSBwYXJzZV9hbmRfdmFsaWRhdGVfb3B0aW9ucyhhcmdjLCBhcmd2LCBidWlsdGluX2NvbW1pdF91c2FnZSwKKwkJCQkJICBwcmVmaXgsICZzKTsKKwlpZiAoZHJ5X3J1bikgeworCQlpZiAoZGlmZl91c2VfY29sb3JfZGVmYXVsdCA9PSAtMSkKKwkJCWRpZmZfdXNlX2NvbG9yX2RlZmF1bHQgPSBnaXRfdXNlX2NvbG9yX2RlZmF1bHQ7CisJCXJldHVybiBkcnlfcnVuX2NvbW1pdChhcmdjLCBhcmd2LCBwcmVmaXgsICZzKTsKKwl9CisJaW5kZXhfZmlsZSA9IHByZXBhcmVfaW5kZXgoYXJnYywgYXJndiwgcHJlZml4LCAwKTsKIAogCS8qIFNldCB1cCBldmVyeXRoaW5nIGZvciB3cml0aW5nIHRoZSBjb21taXQgb2JqZWN0LiAgVGhpcyBpbmNsdWRlcwogCSAgIHJ1bm5pbmcgaG9va3MsIHdyaXRpbmcgdGhlIHRyZWVzLCBhbmQgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgdXNlci4gICovCi0JaWYgKCFwcmVwYXJlX3RvX2NvbW1pdChpbmRleF9maWxlLCBwcmVmaXgpKSB7CisJaWYgKCFwcmVwYXJlX3RvX2NvbW1pdChpbmRleF9maWxlLCBwcmVmaXgsICZzKSkgewogCQlyb2xsYmFja19pbmRleF9maWxlcygpOwogCQlyZXR1cm4gMTsKIAl9CkBAIC05NDcsOCArMTIxNyw4IEBACiAJCXBwdHIgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KGxvb2t1cF9jb21taXQoaGVhZF9zaGExKSwgcHB0ciktPm5leHQ7CiAJCWZwID0gZm9wZW4oZ2l0X3BhdGgoIk1FUkdFX0hFQUQiKSwgInIiKTsKIAkJaWYgKGZwID09IE5VTEwpCi0JCQlkaWUoImNvdWxkIG5vdCBvcGVuICVzIGZvciByZWFkaW5nOiAlcyIsCi0JCQkgICAgZ2l0X3BhdGgoIk1FUkdFX0hFQUQiKSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyIsCisJCQkJICBnaXRfcGF0aCgiTUVSR0VfSEVBRCIpKTsKIAkJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lKCZtLCBmcCwgJ1xuJykgIT0gRU9GKSB7CiAJCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwogCQkJaWYgKGdldF9zaGExX2hleChtLmJ1Ziwgc2hhMSkgPCAwKQpAQCAtOTU5LDggKzEyMjksNyBAQAogCQlzdHJidWZfcmVsZWFzZSgmbSk7CiAJCWlmICghc3RhdChnaXRfcGF0aCgiTUVSR0VfTU9ERSIpLCAmc3RhdGJ1ZikpIHsKIAkJCWlmIChzdHJidWZfcmVhZF9maWxlKCZzYiwgZ2l0X3BhdGgoIk1FUkdFX01PREUiKSwgMCkgPCAwKQotCQkJCWRpZSgiY291bGQgbm90IHJlYWQgTUVSR0VfTU9ERTogJXMiLAotCQkJCQkJc3RyZXJyb3IoZXJybm8pKTsKKwkJCQlkaWVfZXJybm8oImNvdWxkIG5vdCByZWFkIE1FUkdFX01PREUiKTsKIAkJCWlmICghc3RyY21wKHNiLmJ1ZiwgIm5vLWZmIikpCiAJCQkJYWxsb3dfZmFzdF9mb3J3YXJkID0gMDsKIAkJfQpAQCAtOTc0LDggKzEyNDMsOSBAQAogCS8qIEZpbmFsbHksIGdldCB0aGUgY29tbWl0IG1lc3NhZ2UgKi8KIAlzdHJidWZfcmVzZXQoJnNiKTsKIAlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmc2IsIGdpdF9wYXRoKGNvbW1pdF9lZGl0bXNnKSwgMCkgPCAwKSB7CisJCWludCBzYXZlZF9lcnJubyA9IGVycm5vOwogCQlyb2xsYmFja19pbmRleF9maWxlcygpOwotCQlkaWUoImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlIik7CisJCWRpZSgiY291bGQgbm90IHJlYWQgY29tbWl0IG1lc3NhZ2U6ICVzIiwgc3RyZXJyb3Ioc2F2ZWRfZXJybm8pKTsKIAl9CiAKIAkvKiBUcnVuY2F0ZSB0aGUgbWVzc2FnZSBqdXN0IGJlZm9yZSB0aGUgZGlmZiwgaWYgYW55LiAqLwpAQCAtMTAzMSw3ICsxMzAxLDcgQEAKIAkJICAgICAibmV3X2luZGV4IGZpbGUuIENoZWNrIHRoYXQgZGlzayBpcyBub3QgZnVsbCBvciBxdW90YSBpc1xuIgogCQkgICAgICJub3QgZXhjZWVkZWQsIGFuZCB0aGVuIFwiZ2l0IHJlc2V0IEhFQURcIiB0byByZWNvdmVyLiIpOwogCi0JcmVyZXJlKCk7CisJcmVyZXJlKDApOwogCXJ1bl9ob29rKGdldF9pbmRleF9maWxlKCksICJwb3N0LWNvbW1pdCIsIE5VTEwpOwogCWlmICghcXVpZXQpCiAJCXByaW50X3N1bW1hcnkocHJlZml4LCBjb21taXRfc2hhMSk7CmRpZmYgLS1naXQgYS9idWlsdGluLWNvbmZpZy5jIGIvYnVpbHRpbi1jb25maWcuYwppbmRleCBhODFiYzhiLi40YmM0NmIxIDEwMDY0NAotLS0gYS9idWlsdGluLWNvbmZpZy5jCisrKyBiL2J1aWx0aW4tY29uZmlnLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNkZWZpbmUgVFlQRV9CT09MICgxPDwwKQogI2RlZmluZSBUWVBFX0lOVCAoMTw8MSkKICNkZWZpbmUgVFlQRV9CT09MX09SX0lOVCAoMTw8MikKKyNkZWZpbmUgVFlQRV9QQVRIICgxPDwzKQogCiBzdGF0aWMgc3RydWN0IG9wdGlvbiBidWlsdGluX2NvbmZpZ19vcHRpb25zW10gPSB7CiAJT1BUX0dST1VQKCJDb25maWcgZmlsZSBsb2NhdGlvbiIpLApAQCAtNjksNiArNzAsNyBAQAogCU9QVF9CSVQoMCwgImJvb2wiLCAmdHlwZXMsICJ2YWx1ZSBpcyBcInRydWVcIiBvciBcImZhbHNlXCIiLCBUWVBFX0JPT0wpLAogCU9QVF9CSVQoMCwgImludCIsICZ0eXBlcywgInZhbHVlIGlzIGRlY2ltYWwgbnVtYmVyIiwgVFlQRV9JTlQpLAogCU9QVF9CSVQoMCwgImJvb2wtb3ItaW50IiwgJnR5cGVzLCAidmFsdWUgaXMgLS1ib29sIG9yIC0taW50IiwgVFlQRV9CT09MX09SX0lOVCksCisJT1BUX0JJVCgwLCAicGF0aCIsICZ0eXBlcywgInZhbHVlIGlzIGEgcGF0aCAoZmlsZSBvciBkaXJlY3RvcnkgbmFtZSkiLCBUWVBFX1BBVEgpLAogCU9QVF9HUk9VUCgiT3RoZXIiKSwKIAlPUFRfQk9PTEVBTigneicsICJudWxsIiwgJmVuZF9udWxsLCAidGVybWluYXRlIHZhbHVlcyB3aXRoIE5VTCBieXRlIiksCiAJT1BUX0VORCgpLApAQCAtOTQsNiArOTYsNyBAQAogewogCWNoYXIgdmFsdWVbMjU2XTsKIAljb25zdCBjaGFyICp2cHRyID0gdmFsdWU7CisJaW50IG11c3RfZnJlZV92cHRyID0gMDsKIAlpbnQgZHVwX2Vycm9yID0gMDsKIAogCWlmICghdXNlX2tleV9yZWdleHAgJiYgc3RyY21wKGtleV8sIGtleSkpCkBAIC0xMjMsNiArMTI2LDkgQEAKIAkJCXZwdHIgPSB2ID8gInRydWUiIDogImZhbHNlIjsKIAkJZWxzZQogCQkJc3ByaW50Zih2YWx1ZSwgIiVkIiwgdik7CisJfSBlbHNlIGlmICh0eXBlcyA9PSBUWVBFX1BBVEgpIHsKKwkJZ2l0X2NvbmZpZ19wYXRobmFtZSgmdnB0ciwga2V5XywgdmFsdWVfKTsKKwkJbXVzdF9mcmVlX3ZwdHIgPSAxOwogCX0KIAllbHNlCiAJCXZwdHIgPSB2YWx1ZV8/dmFsdWVfOiIiOwpAQCAtMTMzLDYgKzEzOSwxMiBAQAogCX0KIAllbHNlCiAJCXByaW50ZigiJXMlYyIsIHZwdHIsIHRlcm0pOworCWlmIChtdXN0X2ZyZWVfdnB0cikKKwkJLyogSWYgdnB0ciBtdXN0IGJlIGZyZWVkLCBpdCdzIGEgcG9pbnRlciB0byBhCisJCSAqIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBidWZmZXIsIGl0J3Mgc2FmZSB0byBjYXN0IHRvCisJCSAqIGNvbnN0LgorCQkqLworCQlmcmVlKChjaGFyICopdnB0cik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIxNSw3ICsyMjcsMTMgQEAKIAlpZiAoIXZhbHVlKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmICh0eXBlcyA9PSAwKQorCWlmICh0eXBlcyA9PSAwIHx8IHR5cGVzID09IFRZUEVfUEFUSCkKKwkJLyoKKwkJICogV2UgZG9uJ3QgZG8gbm9ybWFsaXphdGlvbiBmb3IgVFlQRV9QQVRIIGhlcmU6IElmCisJCSAqIHRoZSBwYXRoIGlzIGxpa2Ugfi9mb29iYXIvLCB3ZSBwcmVmZXIgdG8gc3RvcmUKKwkJICogIn4vZm9vYmFyLyIgaW4gdGhlIGNvbmZpZyBmaWxlLCBhbmQgdG8gZXhwYW5kIHRoZSB+CisJCSAqIHdoZW4gcmV0cmlldmluZyB0aGUgdmFsdWUuCisJCSAqLwogCQlub3JtYWxpemVkID0geHN0cmR1cCh2YWx1ZSk7CiAJZWxzZSB7CiAJCW5vcm1hbGl6ZWQgPSB4bWFsbG9jKDY0KTsKQEAgLTMxNiw3ICszMzQsOCBAQAogCiAJY29uZmlnX2V4Y2x1c2l2ZV9maWxlbmFtZSA9IGdldGVudihDT05GSUdfRU5WSVJPTk1FTlQpOwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgYnVpbHRpbl9jb25maWdfb3B0aW9ucywgYnVpbHRpbl9jb25maWdfdXNhZ2UsCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX2NvbmZpZ19vcHRpb25zLAorCQkJICAgICBidWlsdGluX2NvbmZpZ191c2FnZSwKIAkJCSAgICAgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CiAKIAlpZiAodXNlX2dsb2JhbF9jb25maWcgKyB1c2Vfc3lzdGVtX2NvbmZpZyArICEhZ2l2ZW5fY29uZmlnX2ZpbGUgPiAxKSB7CkBAIC0zMzksNyArMzU4LDcgQEAKIAkJaWYgKCFpc19hYnNvbHV0ZV9wYXRoKGdpdmVuX2NvbmZpZ19maWxlKSAmJiBwcmVmaXgpCiAJCQljb25maWdfZXhjbHVzaXZlX2ZpbGVuYW1lID0gcHJlZml4X2ZpbGVuYW1lKHByZWZpeCwKIAkJCQkJCQkJICAgIHN0cmxlbihwcmVmaXgpLAotCQkJCQkJCQkgICAgYXJndlsyXSk7CisJCQkJCQkJCSAgICBnaXZlbl9jb25maWdfZmlsZSk7CiAJCWVsc2UKIAkJCWNvbmZpZ19leGNsdXNpdmVfZmlsZW5hbWUgPSBnaXZlbl9jb25maWdfZmlsZTsKIAl9CkBAIC0zODIsOCArNDAxLDggQEAKIAkJY2hlY2tfYXJnYyhhcmdjLCAwLCAwKTsKIAkJaWYgKGdpdF9jb25maWcoc2hvd19hbGxfY29uZmlnLCBOVUxMKSA8IDApIHsKIAkJCWlmIChjb25maWdfZXhjbHVzaXZlX2ZpbGVuYW1lKQotCQkJCWRpZSgidW5hYmxlIHRvIHJlYWQgY29uZmlnIGZpbGUgJXM6ICVzIiwKLQkJCQkgICAgY29uZmlnX2V4Y2x1c2l2ZV9maWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQlkaWVfZXJybm8oInVuYWJsZSB0byByZWFkIGNvbmZpZyBmaWxlICclcyciLAorCQkJCQkgIGNvbmZpZ19leGNsdXNpdmVfZmlsZW5hbWUpOwogCQkJZWxzZQogCQkJCWRpZSgiZXJyb3IgcHJvY2Vzc2luZyBjb25maWcgZmlsZShzKSIpOwogCQl9CmRpZmYgLS1naXQgYS9idWlsdGluLWNvdW50LW9iamVjdHMuYyBiL2J1aWx0aW4tY291bnQtb2JqZWN0cy5jCmluZGV4IDQzM2FmZDguLjJiZGQ4ZWIgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tY291bnQtb2JqZWN0cy5jCisrKyBiL2J1aWx0aW4tY291bnQtb2JqZWN0cy5jCkBAIC04Myw3ICs4Myw3IEBACiAJCU9QVF9FTkQoKSwKIAl9OwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0cywgY291bnRfb2JqZWN0c191c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRzLCBjb3VudF9vYmplY3RzX3VzYWdlLCAwKTsKIAkvKiB3ZSBkbyBub3QgdGFrZSBhcmd1bWVudHMgb3RoZXIgdGhhbiBmbGFncyBmb3Igbm93ICovCiAJaWYgKGFyZ2MpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhjb3VudF9vYmplY3RzX3VzYWdlLCBvcHRzKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tZGVzY3JpYmUuYyBiL2J1aWx0aW4tZGVzY3JpYmUuYwppbmRleCA2M2M2YTE5Li43MWJlMmE5IDEwMDY0NAotLS0gYS9idWlsdGluLWRlc2NyaWJlLmMKKysrIGIvYnVpbHRpbi1kZXNjcmliZS5jCkBAIC01LDEyICs1LDE0IEBACiAjaW5jbHVkZSAiYnVpbHRpbi5oIgogI2luY2x1ZGUgImV4ZWNfY21kLmgiCiAjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgImRpZmYuaCIKIAogI2RlZmluZSBTRUVOCQkoMXU8PDApCiAjZGVmaW5lIE1BWF9UQUdTCShGTEFHX0JJVFMgLSAxKQogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRlc2NyaWJlX3VzYWdlW10gPSB7CiAJImdpdCBkZXNjcmliZSBbb3B0aW9uc10gPGNvbW1pdHRpc2g+KiIsCisJImdpdCBkZXNjcmliZSBbb3B0aW9uc10gLS1kaXJ0eSIsCiAJTlVMTAogfTsKIApAQCAtMjAsOCArMjIsMTYgQEAKIHN0YXRpYyBpbnQgbG9uZ2Zvcm1hdDsKIHN0YXRpYyBpbnQgYWJicmV2ID0gREVGQVVMVF9BQkJSRVY7CiBzdGF0aWMgaW50IG1heF9jYW5kaWRhdGVzID0gMTA7CitzdGF0aWMgaW50IGZvdW5kX25hbWVzOwogc3RhdGljIGNvbnN0IGNoYXIgKnBhdHRlcm47CiBzdGF0aWMgaW50IGFsd2F5czsKK3N0YXRpYyBjb25zdCBjaGFyICpkaXJ0eTsKKworLyogZGlmZi1pbmRleCBjb21tYW5kIGFyZ3VtZW50cyB0byBjaGVjayBpZiB3b3JraW5nIHRyZWUgaXMgZGlydHkuICovCitzdGF0aWMgY29uc3QgY2hhciAqZGlmZl9pbmRleF9hcmdzW10gPSB7CisJImRpZmYtaW5kZXgiLCAiLS1xdWlldCIsICJIRUFEIiwgIi0tIiwgTlVMTAorfTsKKwogCiBzdHJ1Y3QgY29tbWl0X25hbWUgewogCXN0cnVjdCB0YWcgKnRhZzsKQEAgLTQ5LDYgKzU5LDcgQEAKIAkJbWVtY3B5KGUtPnBhdGgsIHBhdGgsIGxlbik7CiAJCWNvbW1pdC0+dXRpbCA9IGU7CiAJfQorCWZvdW5kX25hbWVzID0gMTsKIH0KIAogc3RhdGljIGludCBnZXRfbmFtZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKQEAgLTk0LDggKzEwNSw2IEBACiAJaWYgKCFhbGwpIHsKIAkJaWYgKCFwcmlvKQogCQkJcmV0dXJuIDA7Ci0JCWlmICghdGFncyAmJiBwcmlvIDwgMikKLQkJCXJldHVybiAwOwogCX0KIAlhZGRfdG9fa25vd25fbmFtZXMoYWxsID8gcGF0aCArIDUgOiBwYXRoICsgMTAsIGNvbW1pdCwgcHJpbywgc2hhMSk7CiAJcmV0dXJuIDA7CkBAIC0xNzgsMTEgKzE4NywxMSBAQAogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CiAJc3RydWN0IGNvbW1pdCAqY21pdCwgKmdhdmVfdXBfb24gPSBOVUxMOwogCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdDsKLQlzdGF0aWMgaW50IGluaXRpYWxpemVkID0gMDsKIAlzdHJ1Y3QgY29tbWl0X25hbWUgKm47CiAJc3RydWN0IHBvc3NpYmxlX3RhZyBhbGxfbWF0Y2hlc1tNQVhfVEFHU107CiAJdW5zaWduZWQgaW50IG1hdGNoX2NudCA9IDAsIGFubm90YXRlZF9jbnQgPSAwLCBjdXJfbWF0Y2g7CiAJdW5zaWduZWQgbG9uZyBzZWVuX2NvbW1pdHMgPSAwOworCXVuc2lnbmVkIGludCB1bmFubm90YXRlZF9jbnQgPSAwOwogCiAJaWYgKGdldF9zaGExKGFyZywgc2hhMSkpCiAJCWRpZSgiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiLCBhcmcpOwpAQCAtMTkwLDE5ICsxOTksMTYgQEAKIAlpZiAoIWNtaXQpCiAJCWRpZSgiJXMgaXMgbm90IGEgdmFsaWQgJyVzJyBvYmplY3QiLCBhcmcsIGNvbW1pdF90eXBlKTsKIAotCWlmICghaW5pdGlhbGl6ZWQpIHsKLQkJaW5pdGlhbGl6ZWQgPSAxOwotCQlmb3JfZWFjaF9yZWYoZ2V0X25hbWUsIE5VTEwpOwotCX0KLQogCW4gPSBjbWl0LT51dGlsOwotCWlmIChuKSB7CisJaWYgKG4gJiYgKHRhZ3MgfHwgYWxsIHx8IG4tPnByaW8gPT0gMikpIHsKIAkJLyoKIAkJICogRXhhY3QgbWF0Y2ggdG8gYW4gZXhpc3RpbmcgcmVmLgogCQkgKi8KIAkJZGlzcGxheV9uYW1lKG4pOwogCQlpZiAobG9uZ2Zvcm1hdCkKIAkJCXNob3dfc3VmZml4KDAsIG4tPnRhZyA/IG4tPnRhZy0+dGFnZ2VkLT5zaGExIDogc2hhMSk7CisJCWlmIChkaXJ0eSkKKwkJCXByaW50ZigiJXMiLCBkaXJ0eSk7CiAJCXByaW50ZigiXG4iKTsKIAkJcmV0dXJuOwogCX0KQEAgLTIyMSw3ICsyMjcsOSBAQAogCQlzZWVuX2NvbW1pdHMrKzsKIAkJbiA9IGMtPnV0aWw7CiAJCWlmIChuKSB7Ci0JCQlpZiAobWF0Y2hfY250IDwgbWF4X2NhbmRpZGF0ZXMpIHsKKwkJCWlmICghdGFncyAmJiAhYWxsICYmIG4tPnByaW8gPCAyKSB7CisJCQkJdW5hbm5vdGF0ZWRfY250Kys7CisJCQl9IGVsc2UgaWYgKG1hdGNoX2NudCA8IG1heF9jYW5kaWRhdGVzKSB7CiAJCQkJc3RydWN0IHBvc3NpYmxlX3RhZyAqdCA9ICZhbGxfbWF0Y2hlc1ttYXRjaF9jbnQrK107CiAJCQkJdC0+bmFtZSA9IG47CiAJCQkJdC0+ZGVwdGggPSBzZWVuX2NvbW1pdHMgLSAxOwpAQCAtMjYwLDEwICsyNjgsMjAgQEAKIAlpZiAoIW1hdGNoX2NudCkgewogCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExID0gY21pdC0+b2JqZWN0LnNoYTE7CiAJCWlmIChhbHdheXMpIHsKLQkJCXByaW50ZigiJXNcbiIsIGZpbmRfdW5pcXVlX2FiYnJldihzaGExLCBhYmJyZXYpKTsKKwkJCXByaW50ZigiJXMiLCBmaW5kX3VuaXF1ZV9hYmJyZXYoc2hhMSwgYWJicmV2KSk7CisJCQlpZiAoZGlydHkpCisJCQkJcHJpbnRmKCIlcyIsIGRpcnR5KTsKKwkJCXByaW50ZigiXG4iKTsKIAkJCXJldHVybjsKIAkJfQotCQlkaWUoImNhbm5vdCBkZXNjcmliZSAnJXMnIiwgc2hhMV90b19oZXgoc2hhMSkpOworCQlpZiAodW5hbm5vdGF0ZWRfY250KQorCQkJZGllKCJObyBhbm5vdGF0ZWQgdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKwkJCSAgICAiSG93ZXZlciwgdGhlcmUgd2VyZSB1bmFubm90YXRlZCB0YWdzOiB0cnkgLS10YWdzLiIsCisJCQkgICAgc2hhMV90b19oZXgoc2hhMSkpOworCQllbHNlCisJCQlkaWUoIk5vIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisJCQkgICAgIlRyeSAtLWFsd2F5cywgb3IgY3JlYXRlIHNvbWUgdGFncy4iLAorCQkJICAgIHNoYTFfdG9faGV4KHNoYTEpKTsKIAl9CiAKIAlxc29ydChhbGxfbWF0Y2hlcywgbWF0Y2hfY250LCBzaXplb2YoYWxsX21hdGNoZXNbMF0pLCBjb21wYXJlX3B0KTsKQEAgLTI5NSw2ICszMTMsOCBAQAogCWRpc3BsYXlfbmFtZShhbGxfbWF0Y2hlc1swXS5uYW1lKTsKIAlpZiAoYWJicmV2KQogCQlzaG93X3N1ZmZpeChhbGxfbWF0Y2hlc1swXS5kZXB0aCwgY21pdC0+b2JqZWN0LnNoYTEpOworCWlmIChkaXJ0eSkKKwkJcHJpbnRmKCIlcyIsIGRpcnR5KTsKIAlwcmludGYoIlxuIik7CiAKIAlpZiAoIWxhc3Rfb25lKQpAQCAtMzE5LDEwICszMzksMTMgQEAKIAkJCSAgICJvbmx5IGNvbnNpZGVyIHRhZ3MgbWF0Y2hpbmcgPHBhdHRlcm4+IiksCiAJCU9QVF9CT09MRUFOKDAsICJhbHdheXMiLCAgICAgJmFsd2F5cywKIAkJCSAgICJzaG93IGFiYnJldmlhdGVkIGNvbW1pdCBvYmplY3QgYXMgZmFsbGJhY2siKSwKKwkJe09QVElPTl9TVFJJTkcsIDAsICJkaXJ0eSIsICAmZGlydHksICJtYXJrIiwKKwkJCSAgICJhcHBlbmQgPG1hcms+IG9uIGRpcnR5IHdvcmtpbmcgdHJlZSAoZGVmYXVsdDogXCItZGlydHlcIikiLAorCQkgUEFSU0VfT1BUX09QVEFSRywgTlVMTCwgKGludHB0cl90KSAiLWRpcnR5In0sCiAJCU9QVF9FTkQoKSwKIAl9OwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgZGVzY3JpYmVfdXNhZ2UsIDApOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZGVzY3JpYmVfdXNhZ2UsIDApOwogCWlmIChtYXhfY2FuZGlkYXRlcyA8IDApCiAJCW1heF9jYW5kaWRhdGVzID0gMDsKIAllbHNlIGlmIChtYXhfY2FuZGlkYXRlcyA+IE1BWF9UQUdTKQpAQCAtMzU0LDggKzM3NywxNiBAQAogCQlyZXR1cm4gY21kX25hbWVfcmV2KGkgKyBhcmdjLCBhcmdzLCBwcmVmaXgpOwogCX0KIAorCWZvcl9lYWNoX3JlZihnZXRfbmFtZSwgTlVMTCk7CisJaWYgKCFmb3VuZF9uYW1lcyAmJiAhYWx3YXlzKQorCQlkaWUoIk5vIG5hbWVzIGZvdW5kLCBjYW5ub3QgZGVzY3JpYmUgYW55dGhpbmcuIik7CisKIAlpZiAoYXJnYyA9PSAwKSB7CisJCWlmIChkaXJ0eSAmJiAhY21kX2RpZmZfaW5kZXgoQVJSQVlfU0laRShkaWZmX2luZGV4X2FyZ3MpIC0gMSwgZGlmZl9pbmRleF9hcmdzLCBwcmVmaXgpKQorCQkJZGlydHkgPSBOVUxMOwogCQlkZXNjcmliZSgiSEVBRCIsIDEpOworCX0gZWxzZSBpZiAoZGlydHkpIHsKKwkJZGllKCItLWRpcnR5IGlzIGluY29tcGF0aWJsZSB3aXRoIGNvbW1pdHRpc2hlcyIpOwogCX0gZWxzZSB7CiAJCXdoaWxlIChhcmdjLS0gPiAwKSB7CiAJCQlkZXNjcmliZSgqYXJndisrLCBhcmdjID09IDApOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1kaWZmLXRyZWUuYyBiL2J1aWx0aW4tZGlmZi10cmVlLmMKaW5kZXggNzljZWRiNy4uMjM4MGMyMSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1kaWZmLXRyZWUuYworKysgYi9idWlsdGluLWRpZmYtdHJlZS5jCkBAIC0xMDQsNiArMTA0LDcgQEAKIAlnaXRfY29uZmlnKGdpdF9kaWZmX2Jhc2ljX2NvbmZpZywgTlVMTCk7IC8qIG5vICJkaWZmIiBVSSBvcHRpb25zICovCiAJb3B0LT5hYmJyZXYgPSAwOwogCW9wdC0+ZGlmZiA9IDE7CisJb3B0LT5kaXNhYmxlX3N0ZGluID0gMTsKIAlhcmdjID0gc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsIG9wdCwgTlVMTCk7CiAKIAl3aGlsZSAoLS1hcmdjID4gMCkgewpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1kaWZmLmMgYi9idWlsdGluLWRpZmYuYwppbmRleCBkNzVkNjliLi5mZmNkZDA1IDEwMDY0NAotLS0gYS9idWlsdGluLWRpZmYuYworKysgYi9idWlsdGluLWRpZmYuYwpAQCAtNzAsNyArNzAsNyBAQAogCQl1c2FnZShidWlsdGluX2RpZmZfdXNhZ2UpOwogCiAJaWYgKGxzdGF0KHBhdGgsICZzdCkpCi0JCWRpZSgiJyVzJzogJXMiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImZhaWxlZCB0byBzdGF0ICclcyciLCBwYXRoKTsKIAlpZiAoIShTX0lTUkVHKHN0LnN0X21vZGUpIHx8IFNfSVNMTksoc3Quc3RfbW9kZSkpKQogCQlkaWUoIiclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBzeW1saW5rIiwgcGF0aCk7CiAKQEAgLTIxOCw2ICsyMTgsOCBAQAogCQkJcmV2cy0+bWF4X2NvdW50ID0gMzsKIAkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLXEiKSkKIAkJCW9wdGlvbnMgfD0gRElGRl9TSUxFTlRfT05fUkVNT1ZFRDsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJCXVzYWdlKGJ1aWx0aW5fZGlmZl91c2FnZSk7CiAJCWVsc2UKIAkJCXJldHVybiBlcnJvcigiaW52YWxpZCBvcHRpb246ICVzIiwgYXJndlsxXSk7CiAJCWFyZ3YrKzsgYXJnYy0tOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1mYXN0LWV4cG9ydC5jIGIvYnVpbHRpbi1mYXN0LWV4cG9ydC5jCmluZGV4IDkwOTE0ODEuLmM2ZGQ3MWEgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tZmFzdC1leHBvcnQuYworKysgYi9idWlsdGluLWZhc3QtZXhwb3J0LmMKQEAgLTIzLDggKzIzLDEwIEBACiB9OwogCiBzdGF0aWMgaW50IHByb2dyZXNzOwotc3RhdGljIGVudW0geyBWRVJCQVRJTSwgV0FSTiwgU1RSSVAsIEFCT1JUIH0gc2lnbmVkX3RhZ19tb2RlID0gQUJPUlQ7CitzdGF0aWMgZW51bSB7IEFCT1JULCBWRVJCQVRJTSwgV0FSTiwgU1RSSVAgfSBzaWduZWRfdGFnX21vZGUgPSBBQk9SVDsKK3N0YXRpYyBlbnVtIHsgRVJST1IsIERST1AsIFJFV1JJVEUgfSB0YWdfb2ZfZmlsdGVyZWRfbW9kZSA9IEFCT1JUOwogc3RhdGljIGludCBmYWtlX21pc3NpbmdfdGFnZ2VyOworc3RhdGljIGludCBub19kYXRhOwogCiBzdGF0aWMgaW50IHBhcnNlX29wdF9zaWduZWRfdGFnX21vZGUoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAogCQkJCSAgICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCkBAIC00Miw2ICs0NCwyMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHBhcnNlX29wdF90YWdfb2ZfZmlsdGVyZWRfbW9kZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJCSAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaWYgKHVuc2V0IHx8ICFzdHJjbXAoYXJnLCAiYWJvcnQiKSkKKwkJdGFnX29mX2ZpbHRlcmVkX21vZGUgPSBBQk9SVDsKKwllbHNlIGlmICghc3RyY21wKGFyZywgImRyb3AiKSkKKwkJdGFnX29mX2ZpbHRlcmVkX21vZGUgPSBEUk9QOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAicmV3cml0ZSIpKQorCQl0YWdfb2ZfZmlsdGVyZWRfbW9kZSA9IFJFV1JJVEU7CisJZWxzZQorCQlyZXR1cm4gZXJyb3IoIlVua25vd24gdGFnLW9mLWZpbHRlcmVkIG1vZGU6ICVzIiwgYXJnKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBkZWNvcmF0aW9uIGlkbnVtczsKIHN0YXRpYyB1aW50MzJfdCBsYXN0X2lkbnVtOwogCkBAIC0xMDEsNiArMTE3LDkgQEAKIAljaGFyICpidWY7CiAJc3RydWN0IG9iamVjdCAqb2JqZWN0OwogCisJaWYgKG5vX2RhdGEpCisJCXJldHVybjsKKwogCWlmIChpc19udWxsX3NoYTEoc2hhMSkpCiAJCXJldHVybjsKIApAQCAtMTE5LDcgKzEzOCw3IEBACiAKIAlwcmludGYoImJsb2Jcbm1hcmsgOiUiUFJJdTMyIlxuZGF0YSAlbHVcbiIsIGxhc3RfaWRudW0sIHNpemUpOwogCWlmIChzaXplICYmIGZ3cml0ZShidWYsIHNpemUsIDEsIHN0ZG91dCkgIT0gMSkKLQkJZGllICgiQ291bGQgbm90IHdyaXRlIGJsb2IgJXMiLCBzaGExX3RvX2hleChzaGExKSk7CisJCWRpZV9lcnJubyAoIkNvdWxkIG5vdCB3cml0ZSBibG9iICclcyciLCBzaGExX3RvX2hleChzaGExKSk7CiAJcHJpbnRmKCJcbiIpOwogCiAJc2hvd19wcm9ncmVzcygpOwpAQCAtMTU4LDcgKzE3Nyw3IEBACiAJCQkgKiBMaW5rcyByZWZlciB0byBvYmplY3RzIGluIGFub3RoZXIgcmVwb3NpdG9yaWVzOwogCQkJICogb3V0cHV0IHRoZSBTSEEtMSB2ZXJiYXRpbS4KIAkJCSAqLwotCQkJaWYgKFNfSVNHSVRMSU5LKHNwZWMtPm1vZGUpKQorCQkJaWYgKG5vX2RhdGEgfHwgU19JU0dJVExJTksoc3BlYy0+bW9kZSkpCiAJCQkJcHJpbnRmKCJNICUwNm8gJXMgJXNcbiIsIHNwZWMtPm1vZGUsCiAJCQkJICAgICAgIHNoYTFfdG9faGV4KHNwZWMtPnNoYTEpLCBzcGVjLT5wYXRoKTsKIAkJCWVsc2UgewpAQCAtMjg5LDYgKzMwOCwyMyBAQAogCWNoYXIgKmJ1ZjsKIAljb25zdCBjaGFyICp0YWdnZXIsICp0YWdnZXJfZW5kLCAqbWVzc2FnZTsKIAlzaXplX3QgbWVzc2FnZV9zaXplID0gMDsKKwlzdHJ1Y3Qgb2JqZWN0ICp0YWdnZWQ7CisJaW50IHRhZ2dlZF9tYXJrOworCXN0cnVjdCBjb21taXQgKnA7CisKKwkvKiBUcmVlcyBoYXZlIG5vIGlkZW50aWZlciBpbiBmYXN0LWV4cG9ydCBvdXRwdXQsIHRodXMgd2UgaGF2ZSBubyB3YXkKKwkgKiB0byBvdXRwdXQgdGFncyBvZiB0cmVlcywgdGFncyBvZiB0YWdzIG9mIHRyZWVzLCBldGMuICBTaW1wbHkgb21pdAorCSAqIHN1Y2ggdGFncy4KKwkgKi8KKwl0YWdnZWQgPSB0YWctPnRhZ2dlZDsKKwl3aGlsZSAodGFnZ2VkLT50eXBlID09IE9CSl9UQUcpIHsKKwkJdGFnZ2VkID0gKChzdHJ1Y3QgdGFnICopdGFnZ2VkKS0+dGFnZ2VkOworCX0KKwlpZiAodGFnZ2VkLT50eXBlID09IE9CSl9UUkVFKSB7CisJCXdhcm5pbmcoIk9taXR0aW5nIHRhZyAlcyxcbnNpbmNlIHRhZ3Mgb2YgdHJlZXMgKG9yIHRhZ3Mgb2YgdGFncyBvZiB0cmVlcywgZXRjLikgYXJlIG5vdCBzdXBwb3J0ZWQuIiwKKwkJCXNoYTFfdG9faGV4KHRhZy0+b2JqZWN0LnNoYTEpKTsKKwkJcmV0dXJuOworCX0KIAogCWJ1ZiA9IHJlYWRfc2hhMV9maWxlKHRhZy0+b2JqZWN0LnNoYTEsICZ0eXBlLCAmc2l6ZSk7CiAJaWYgKCFidWYpCkBAIC0zMzMsMTAgKzM2OSw0NSBAQAogCQkJfQogCX0KIAorCS8qIGhhbmRsZSB0YWctPnRhZ2dlZCBoYXZpbmcgYmVlbiBmaWx0ZXJlZCBvdXQgZHVlIHRvIHBhdGhzIHNwZWNpZmllZCAqLworCXRhZ2dlZCA9IHRhZy0+dGFnZ2VkOworCXRhZ2dlZF9tYXJrID0gZ2V0X29iamVjdF9tYXJrKHRhZ2dlZCk7CisJaWYgKCF0YWdnZWRfbWFyaykgeworCQlzd2l0Y2godGFnX29mX2ZpbHRlcmVkX21vZGUpIHsKKwkJY2FzZSBBQk9SVDoKKwkJCWRpZSAoIlRhZyAlcyB0YWdzIHVuZXhwb3J0ZWQgb2JqZWN0OyB1c2UgIgorCQkJICAgICAiLS10YWctb2YtZmlsdGVyZWQtb2JqZWN0PTxtb2RlPiB0byBoYW5kbGUgaXQuIiwKKwkJCSAgICAgc2hhMV90b19oZXgodGFnLT5vYmplY3Quc2hhMSkpOworCQljYXNlIERST1A6CisJCQkvKiBJZ25vcmUgdGhpcyB0YWcgYWx0b2dldGhlciAqLworCQkJcmV0dXJuOworCQljYXNlIFJFV1JJVEU6CisJCQlpZiAodGFnZ2VkLT50eXBlICE9IE9CSl9DT01NSVQpIHsKKwkJCQlkaWUgKCJUYWcgJXMgdGFncyB1bmV4cG9ydGVkICVzISIsCisJCQkJICAgICBzaGExX3RvX2hleCh0YWctPm9iamVjdC5zaGExKSwKKwkJCQkgICAgIHR5cGVuYW1lKHRhZ2dlZC0+dHlwZSkpOworCQkJfQorCQkJcCA9IChzdHJ1Y3QgY29tbWl0ICopdGFnZ2VkOworCQkJZm9yICg7OykgeworCQkJCWlmIChwLT5wYXJlbnRzICYmIHAtPnBhcmVudHMtPm5leHQpCisJCQkJCWJyZWFrOworCQkJCWlmIChwLT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJCQlicmVhazsKKwkJCQlpZiAoIShwLT5vYmplY3QuZmxhZ3MgJiBUUkVFU0FNRSkpCisJCQkJCWJyZWFrOworCQkJCWlmICghcC0+cGFyZW50cykKKwkJCQkJZGllICgiQ2FuJ3QgZmluZCByZXBsYWNlbWVudCBjb21taXQgZm9yIHRhZyAlc1xuIiwKKwkJCQkJICAgICBzaGExX3RvX2hleCh0YWctPm9iamVjdC5zaGExKSk7CisJCQkJcCA9IHAtPnBhcmVudHMtPml0ZW07CisJCQl9CisJCQl0YWdnZWRfbWFyayA9IGdldF9vYmplY3RfbWFyaygmcC0+b2JqZWN0KTsKKwkJfQorCX0KKwogCWlmICghcHJlZml4Y21wKG5hbWUsICJyZWZzL3RhZ3MvIikpCiAJCW5hbWUgKz0gMTA7CiAJcHJpbnRmKCJ0YWcgJXNcbmZyb20gOiVkXG4lLipzJXNkYXRhICVkXG4lLipzXG4iLAotCSAgICAgICBuYW1lLCBnZXRfb2JqZWN0X21hcmsodGFnLT50YWdnZWQpLAorCSAgICAgICBuYW1lLCB0YWdnZWRfbWFyaywKIAkgICAgICAgKGludCkodGFnZ2VyX2VuZCAtIHRhZ2dlciksIHRhZ2dlciwKIAkgICAgICAgdGFnZ2VyID09IHRhZ2dlcl9lbmQgPyAiIiA6ICJcbiIsCiAJICAgICAgIChpbnQpbWVzc2FnZV9zaXplLCAoaW50KW1lc3NhZ2Vfc2l6ZSwgbWVzc2FnZSA/IG1lc3NhZ2UgOiAiIik7CkBAIC00MzIsNyArNTAzLDcgQEAKIAogCWYgPSBmb3BlbihmaWxlLCAidyIpOwogCWlmICghZikKLQkJZXJyb3IoIlVuYWJsZSB0byBvcGVuIG1hcmtzIGZpbGUgJXMgZm9yIHdyaXRpbmcuIiwgZmlsZSk7CisJCWRpZV9lcnJubygiVW5hYmxlIHRvIG9wZW4gbWFya3MgZmlsZSAlcyBmb3Igd3JpdGluZy4iLCBmaWxlKTsKIAogCWZvciAoaSA9IDA7IGkgPCBpZG51bXMuc2l6ZTsgaSsrKSB7CiAJCWlmIChkZWNvLT5iYXNlICYmIGRlY28tPmJhc2UtPnR5cGUgPT0gMSkgewpAQCAtNDU3LDcgKzUyOCw3IEBACiAJY2hhciBsaW5lWzUxMl07CiAJRklMRSAqZiA9IGZvcGVuKGlucHV0X2ZpbGUsICJyIik7CiAJaWYgKCFmKQotCQlkaWUoImNhbm5vdCByZWFkICVzOiAlcyIsIGlucHV0X2ZpbGUsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiY2Fubm90IHJlYWQgJyVzJyIsIGlucHV0X2ZpbGUpOwogCiAJd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHsKIAkJdWludDMyX3QgbWFyazsKQEAgLTUwNCwxMiArNTc1LDE4IEBACiAJCU9QVF9DQUxMQkFDSygwLCAic2lnbmVkLXRhZ3MiLCAmc2lnbmVkX3RhZ19tb2RlLCAibW9kZSIsCiAJCQkgICAgICJzZWxlY3QgaGFuZGxpbmcgb2Ygc2lnbmVkIHRhZ3MiLAogCQkJICAgICBwYXJzZV9vcHRfc2lnbmVkX3RhZ19tb2RlKSwKKwkJT1BUX0NBTExCQUNLKDAsICJ0YWctb2YtZmlsdGVyZWQtb2JqZWN0IiwgJnRhZ19vZl9maWx0ZXJlZF9tb2RlLCAibW9kZSIsCisJCQkgICAgICJzZWxlY3QgaGFuZGxpbmcgb2YgdGFncyB0aGF0IHRhZyBmaWx0ZXJlZCBvYmplY3RzIiwKKwkJCSAgICAgcGFyc2Vfb3B0X3RhZ19vZl9maWx0ZXJlZF9tb2RlKSwKIAkJT1BUX1NUUklORygwLCAiZXhwb3J0LW1hcmtzIiwgJmV4cG9ydF9maWxlbmFtZSwgIkZJTEUiLAogCQkJICAgICAiRHVtcCBtYXJrcyB0byB0aGlzIGZpbGUiKSwKIAkJT1BUX1NUUklORygwLCAiaW1wb3J0LW1hcmtzIiwgJmltcG9ydF9maWxlbmFtZSwgIkZJTEUiLAogCQkJICAgICAiSW1wb3J0IG1hcmtzIGZyb20gdGhpcyBmaWxlIiksCiAJCU9QVF9CT09MRUFOKDAsICJmYWtlLW1pc3NpbmctdGFnZ2VyIiwgJmZha2VfbWlzc2luZ190YWdnZXIsCiAJCQkgICAgICJGYWtlIGEgdGFnZ2VyIHdoZW4gdGFncyBsYWNrIG9uZSIpLAorCQl7IE9QVElPTl9ORUdCSVQsIDAsICJkYXRhIiwgJm5vX2RhdGEsIE5VTEwsCisJCQkiU2tpcCBvdXRwdXQgb2YgYmxvYiBkYXRhIiwKKwkJCVBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9ORUdIRUxQLCBOVUxMLCAxIH0sCiAJCU9QVF9FTkQoKQogCX07CiAKQEAgLTUyMCw4ICs1OTcsMTEgQEAKIAlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CiAKIAlpbml0X3JldmlzaW9ucygmcmV2cywgcHJlZml4KTsKKwlyZXZzLnRvcG9fb3JkZXIgPSAxOworCXJldnMuc2hvd19zb3VyY2UgPSAxOworCXJldnMucmV3cml0ZV9wYXJlbnRzID0gMTsKIAlhcmdjID0gc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsICZyZXZzLCBOVUxMKTsKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBmYXN0X2V4cG9ydF91c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBmYXN0X2V4cG9ydF91c2FnZSwgMCk7CiAJaWYgKGFyZ2MgPiAxKQogCQl1c2FnZV93aXRoX29wdGlvbnMgKGZhc3RfZXhwb3J0X3VzYWdlLCBvcHRpb25zKTsKIApAQCAtNTMwLDE4ICs2MTAsMTMgQEAKIAogCWdldF90YWdzX2FuZF9kdXBsaWNhdGVzKCZyZXZzLnBlbmRpbmcsICZleHRyYV9yZWZzKTsKIAotCXJldnMudG9wb19vcmRlciA9IDE7CiAJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2cykpCiAJCWRpZSgicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKTsKIAlyZXZzLmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrID0gc2hvd19maWxlbW9kaWZ5OwogCURJRkZfT1BUX1NFVCgmcmV2cy5kaWZmb3B0LCBSRUNVUlNJVkUpOwogCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKCZyZXZzKSkpIHsKIAkJaWYgKGhhc191bnNob3duX3BhcmVudChjb21taXQpKSB7Ci0JCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudCA9IGNvbW1pdC0+cGFyZW50czsKIAkJCWFkZF9vYmplY3RfYXJyYXkoJmNvbW1pdC0+b2JqZWN0LCBOVUxMLCAmY29tbWl0cyk7Ci0JCQlmb3IgKDsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPm5leHQpCi0JCQkJaWYgKCFwYXJlbnQtPml0ZW0tPnV0aWwpCi0JCQkJCXBhcmVudC0+aXRlbS0+dXRpbCA9IGNvbW1pdC0+dXRpbDsKIAkJfQogCQllbHNlIHsKIAkJCWhhbmRsZV9jb21taXQoY29tbWl0LCAmcmV2cyk7CmRpZmYgLS1naXQgYS9idWlsdGluLWZldGNoLXBhY2suYyBiL2J1aWx0aW4tZmV0Y2gtcGFjay5jCmluZGV4IDYyOTczNWYuLmRiZDhiN2IgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tZmV0Y2gtcGFjay5jCisrKyBiL2J1aWx0aW4tZmV0Y2gtcGFjay5jCkBAIC0xNTcsNiArMTU3LDY2IEBACiAJcmV0dXJuIGNvbW1pdC0+b2JqZWN0LnNoYTE7CiB9CiAKK2VudW0gYWNrX3R5cGUgeworCU5BSyA9IDAsCisJQUNLLAorCUFDS19jb250aW51ZSwKKwlBQ0tfY29tbW9uLAorCUFDS19yZWFkeQorfTsKKworc3RhdGljIHZvaWQgY29uc3VtZV9zaGFsbG93X2xpc3QoaW50IGZkKQoreworCWlmIChhcmdzLnN0YXRlbGVzc19ycGMgJiYgYXJncy5kZXB0aCA+IDApIHsKKwkJLyogSWYgd2Ugc2VudCBhIGRlcHRoIHdlIHdpbGwgZ2V0IGJhY2sgImR1cGxpY2F0ZSIKKwkJICogc2hhbGxvdyBhbmQgdW5zaGFsbG93IGNvbW1hbmRzIGV2ZXJ5IHRpbWUgdGhlcmUKKwkJICogaXMgYSBibG9jayBvZiBoYXZlIGxpbmVzIGV4Y2hhbmdlZC4KKwkJICovCisJCWNoYXIgbGluZVsxMDAwXTsKKwkJd2hpbGUgKHBhY2tldF9yZWFkX2xpbmUoZmQsIGxpbmUsIHNpemVvZihsaW5lKSkpIHsKKwkJCWlmICghcHJlZml4Y21wKGxpbmUsICJzaGFsbG93ICIpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCFwcmVmaXhjbXAobGluZSwgInVuc2hhbGxvdyAiKSkKKwkJCQljb250aW51ZTsKKwkJCWRpZSgiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIHNoYWxsb3cgbGlzdCIpOworCQl9CisJfQorfQorCitzdGF0aWMgZW51bSBhY2tfdHlwZSBnZXRfYWNrKGludCBmZCwgdW5zaWduZWQgY2hhciAqcmVzdWx0X3NoYTEpCit7CisJc3RhdGljIGNoYXIgbGluZVsxMDAwXTsKKwlpbnQgbGVuID0gcGFja2V0X3JlYWRfbGluZShmZCwgbGluZSwgc2l6ZW9mKGxpbmUpKTsKKworCWlmICghbGVuKQorCQlkaWUoImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgRU9GIik7CisJaWYgKGxpbmVbbGVuLTFdID09ICdcbicpCisJCWxpbmVbLS1sZW5dID0gMDsKKwlpZiAoIXN0cmNtcChsaW5lLCAiTkFLIikpCisJCXJldHVybiBOQUs7CisJaWYgKCFwcmVmaXhjbXAobGluZSwgIkFDSyAiKSkgeworCQlpZiAoIWdldF9zaGExX2hleChsaW5lKzQsIHJlc3VsdF9zaGExKSkgeworCQkJaWYgKHN0cnN0cihsaW5lKzQ1LCAiY29udGludWUiKSkKKwkJCQlyZXR1cm4gQUNLX2NvbnRpbnVlOworCQkJaWYgKHN0cnN0cihsaW5lKzQ1LCAiY29tbW9uIikpCisJCQkJcmV0dXJuIEFDS19jb21tb247CisJCQlpZiAoc3Ryc3RyKGxpbmUrNDUsICJyZWFkeSIpKQorCQkJCXJldHVybiBBQ0tfcmVhZHk7CisJCQlyZXR1cm4gQUNLOworCQl9CisJfQorCWRpZSgiZ2l0IGZldGNoX3BhY2s6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCAnJXMnIiwgbGluZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNlbmRfcmVxdWVzdChpbnQgZmQsIHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwlpZiAoYXJncy5zdGF0ZWxlc3NfcnBjKSB7CisJCXNlbmRfc2lkZWJhbmQoZmQsIC0xLCBidWYtPmJ1ZiwgYnVmLT5sZW4sIExBUkdFX1BBQ0tFVF9NQVgpOworCQlwYWNrZXRfZmx1c2goZmQpOworCX0gZWxzZQorCQlzYWZlX3dyaXRlKGZkLCBidWYtPmJ1ZiwgYnVmLT5sZW4pOworfQorCiBzdGF0aWMgaW50IGZpbmRfY29tbW9uKGludCBmZFsyXSwgdW5zaWduZWQgY2hhciAqcmVzdWx0X3NoYTEsCiAJCSAgICAgICBzdHJ1Y3QgcmVmICpyZWZzKQogewpAQCAtMTY1LDcgKzIyNSwxMSBAQAogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTE7CiAJdW5zaWduZWQgaW5fdmFpbiA9IDA7CiAJaW50IGdvdF9jb250aW51ZSA9IDA7CisJc3RydWN0IHN0cmJ1ZiByZXFfYnVmID0gU1RSQlVGX0lOSVQ7CisJc2l6ZV90IHN0YXRlX2xlbiA9IDA7CiAKKwlpZiAoYXJncy5zdGF0ZWxlc3NfcnBjICYmIG11bHRpX2FjayA9PSAxKQorCQlkaWUoIi0tc3RhdGVsZXNzLXJwYyByZXF1aXJlcyBtdWx0aV9hY2tfZGV0YWlsZWQiKTsKIAlpZiAobWFya2VkKQogCQlmb3JfZWFjaF9yZWYoY2xlYXJfbWFya3MsIE5VTEwpOwogCW1hcmtlZCA9IDE7CkBAIC0xNzUsNiArMjM5LDcgQEAKIAlmZXRjaGluZyA9IDA7CiAJZm9yICggOyByZWZzIDsgcmVmcyA9IHJlZnMtPm5leHQpIHsKIAkJdW5zaWduZWQgY2hhciAqcmVtb3RlID0gcmVmcy0+b2xkX3NoYTE7CisJCWNvbnN0IGNoYXIgKnJlbW90ZV9oZXg7CiAJCXN0cnVjdCBvYmplY3QgKm87CiAKIAkJLyoKQEAgLTE5MiwzMiArMjU3LDQyIEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmICghZmV0Y2hpbmcpCi0JCQlwYWNrZXRfd3JpdGUoZmRbMV0sICJ3YW50ICVzJXMlcyVzJXMlcyVzJXNcbiIsCi0JCQkJICAgICBzaGExX3RvX2hleChyZW1vdGUpLAotCQkJCSAgICAgKG11bHRpX2FjayA/ICIgbXVsdGlfYWNrIiA6ICIiKSwKLQkJCQkgICAgICh1c2Vfc2lkZWJhbmQgPT0gMiA/ICIgc2lkZS1iYW5kLTY0ayIgOiAiIiksCi0JCQkJICAgICAodXNlX3NpZGViYW5kID09IDEgPyAiIHNpZGUtYmFuZCIgOiAiIiksCi0JCQkJICAgICAoYXJncy51c2VfdGhpbl9wYWNrID8gIiB0aGluLXBhY2siIDogIiIpLAotCQkJCSAgICAgKGFyZ3Mubm9fcHJvZ3Jlc3MgPyAiIG5vLXByb2dyZXNzIiA6ICIiKSwKLQkJCQkgICAgIChhcmdzLmluY2x1ZGVfdGFnID8gIiBpbmNsdWRlLXRhZyIgOiAiIiksCi0JCQkJICAgICAocHJlZmVyX29mc19kZWx0YSA/ICIgb2ZzLWRlbHRhIiA6ICIiKSk7Ci0JCWVsc2UKLQkJCXBhY2tldF93cml0ZShmZFsxXSwgIndhbnQgJXNcbiIsIHNoYTFfdG9faGV4KHJlbW90ZSkpOworCQlyZW1vdGVfaGV4ID0gc2hhMV90b19oZXgocmVtb3RlKTsKKwkJaWYgKCFmZXRjaGluZykgeworCQkJc3RydWN0IHN0cmJ1ZiBjID0gU1RSQlVGX0lOSVQ7CisJCQlpZiAobXVsdGlfYWNrID09IDIpICAgICBzdHJidWZfYWRkc3RyKCZjLCAiIG11bHRpX2Fja19kZXRhaWxlZCIpOworCQkJaWYgKG11bHRpX2FjayA9PSAxKSAgICAgc3RyYnVmX2FkZHN0cigmYywgIiBtdWx0aV9hY2siKTsKKwkJCWlmICh1c2Vfc2lkZWJhbmQgPT0gMikgIHN0cmJ1Zl9hZGRzdHIoJmMsICIgc2lkZS1iYW5kLTY0ayIpOworCQkJaWYgKHVzZV9zaWRlYmFuZCA9PSAxKSAgc3RyYnVmX2FkZHN0cigmYywgIiBzaWRlLWJhbmQiKTsKKwkJCWlmIChhcmdzLnVzZV90aGluX3BhY2spIHN0cmJ1Zl9hZGRzdHIoJmMsICIgdGhpbi1wYWNrIik7CisJCQlpZiAoYXJncy5ub19wcm9ncmVzcykgICBzdHJidWZfYWRkc3RyKCZjLCAiIG5vLXByb2dyZXNzIik7CisJCQlpZiAoYXJncy5pbmNsdWRlX3RhZykgICBzdHJidWZfYWRkc3RyKCZjLCAiIGluY2x1ZGUtdGFnIik7CisJCQlpZiAocHJlZmVyX29mc19kZWx0YSkgICBzdHJidWZfYWRkc3RyKCZjLCAiIG9mcy1kZWx0YSIpOworCQkJcGFja2V0X2J1Zl93cml0ZSgmcmVxX2J1ZiwgIndhbnQgJXMlc1xuIiwgcmVtb3RlX2hleCwgYy5idWYpOworCQkJc3RyYnVmX3JlbGVhc2UoJmMpOworCQl9IGVsc2UKKwkJCXBhY2tldF9idWZfd3JpdGUoJnJlcV9idWYsICJ3YW50ICVzXG4iLCByZW1vdGVfaGV4KTsKIAkJZmV0Y2hpbmcrKzsKIAl9Ci0JaWYgKGlzX3JlcG9zaXRvcnlfc2hhbGxvdygpKQotCQl3cml0ZV9zaGFsbG93X2NvbW1pdHMoZmRbMV0sIDEpOwotCWlmIChhcmdzLmRlcHRoID4gMCkKLQkJcGFja2V0X3dyaXRlKGZkWzFdLCAiZGVlcGVuICVkIiwgYXJncy5kZXB0aCk7Ci0JcGFja2V0X2ZsdXNoKGZkWzFdKTsKLQlpZiAoIWZldGNoaW5nKQorCisJaWYgKCFmZXRjaGluZykgeworCQlzdHJidWZfcmVsZWFzZSgmcmVxX2J1Zik7CisJCXBhY2tldF9mbHVzaChmZFsxXSk7CiAJCXJldHVybiAxOworCX0KKworCWlmIChpc19yZXBvc2l0b3J5X3NoYWxsb3coKSkKKwkJd3JpdGVfc2hhbGxvd19jb21taXRzKCZyZXFfYnVmLCAxKTsKKwlpZiAoYXJncy5kZXB0aCA+IDApCisJCXBhY2tldF9idWZfd3JpdGUoJnJlcV9idWYsICJkZWVwZW4gJWQiLCBhcmdzLmRlcHRoKTsKKwlwYWNrZXRfYnVmX2ZsdXNoKCZyZXFfYnVmKTsKKwlzdGF0ZV9sZW4gPSByZXFfYnVmLmxlbjsKIAogCWlmIChhcmdzLmRlcHRoID4gMCkgewogCQljaGFyIGxpbmVbMTAyNF07CiAJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CiAKKwkJc2VuZF9yZXF1ZXN0KGZkWzFdLCAmcmVxX2J1Zik7CiAJCXdoaWxlIChwYWNrZXRfcmVhZF9saW5lKGZkWzBdLCBsaW5lLCBzaXplb2YobGluZSkpKSB7CiAJCQlpZiAoIXByZWZpeGNtcChsaW5lLCAic2hhbGxvdyAiKSkgewogCQkJCWlmIChnZXRfc2hhMV9oZXgobGluZSArIDgsIHNoYTEpKQpAQCAtMjM5LDQ1ICszMTQsNzMgQEAKIAkJCX0KIAkJCWRpZSgiZXhwZWN0ZWQgc2hhbGxvdy91bnNoYWxsb3csIGdvdCAlcyIsIGxpbmUpOwogCQl9CisJfSBlbHNlIGlmICghYXJncy5zdGF0ZWxlc3NfcnBjKQorCQlzZW5kX3JlcXVlc3QoZmRbMV0sICZyZXFfYnVmKTsKKworCWlmICghYXJncy5zdGF0ZWxlc3NfcnBjKSB7CisJCS8qIElmIHdlIGFyZW4ndCB1c2luZyB0aGUgc3RhdGVsZXNzLXJwYyBpbnRlcmZhY2UKKwkJICogd2UgZG9uJ3QgbmVlZCB0byByZXRhaW4gdGhlIGhlYWRlcnMuCisJCSAqLworCQlzdHJidWZfc2V0bGVuKCZyZXFfYnVmLCAwKTsKKwkJc3RhdGVfbGVuID0gMDsKIAl9CiAKIAlmbHVzaGVzID0gMDsKIAlyZXR2YWwgPSAtMTsKIAl3aGlsZSAoKHNoYTEgPSBnZXRfcmV2KCkpKSB7Ci0JCXBhY2tldF93cml0ZShmZFsxXSwgImhhdmUgJXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJcGFja2V0X2J1Zl93cml0ZSgmcmVxX2J1ZiwgImhhdmUgJXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpKTsKIAkJaWYgKGFyZ3MudmVyYm9zZSkKIAkJCWZwcmludGYoc3RkZXJyLCAiaGF2ZSAlc1xuIiwgc2hhMV90b19oZXgoc2hhMSkpOwogCQlpbl92YWluKys7CiAJCWlmICghKDMxICYgKytjb3VudCkpIHsKIAkJCWludCBhY2s7CiAKLQkJCXBhY2tldF9mbHVzaChmZFsxXSk7CisJCQlwYWNrZXRfYnVmX2ZsdXNoKCZyZXFfYnVmKTsKKwkJCXNlbmRfcmVxdWVzdChmZFsxXSwgJnJlcV9idWYpOworCQkJc3RyYnVmX3NldGxlbigmcmVxX2J1Ziwgc3RhdGVfbGVuKTsKIAkJCWZsdXNoZXMrKzsKIAogCQkJLyoKIAkJCSAqIFdlIGtlZXAgb25lIHdpbmRvdyAiYWhlYWQiIG9mIHRoZSBvdGhlciBzaWRlLCBhbmQKIAkJCSAqIHdpbGwgd2FpdCBmb3IgYW4gQUNLIG9ubHkgb24gdGhlIG5leHQgb25lCiAJCQkgKi8KLQkJCWlmIChjb3VudCA9PSAzMikKKwkJCWlmICghYXJncy5zdGF0ZWxlc3NfcnBjICYmIGNvdW50ID09IDMyKQogCQkJCWNvbnRpbnVlOwogCisJCQljb25zdW1lX3NoYWxsb3dfbGlzdChmZFswXSk7CiAJCQlkbyB7CiAJCQkJYWNrID0gZ2V0X2FjayhmZFswXSwgcmVzdWx0X3NoYTEpOwogCQkJCWlmIChhcmdzLnZlcmJvc2UgJiYgYWNrKQogCQkJCQlmcHJpbnRmKHN0ZGVyciwgImdvdCBhY2sgJWQgJXNcbiIsIGFjaywKIAkJCQkJCQlzaGExX3RvX2hleChyZXN1bHRfc2hhMSkpOwotCQkJCWlmIChhY2sgPT0gMSkgeworCQkJCXN3aXRjaCAoYWNrKSB7CisJCQkJY2FzZSBBQ0s6CiAJCQkJCWZsdXNoZXMgPSAwOwogCQkJCQltdWx0aV9hY2sgPSAwOwogCQkJCQlyZXR2YWwgPSAwOwogCQkJCQlnb3RvIGRvbmU7Ci0JCQkJfSBlbHNlIGlmIChhY2sgPT0gMikgeworCQkJCWNhc2UgQUNLX2NvbW1vbjoKKwkJCQljYXNlIEFDS19yZWFkeToKKwkJCQljYXNlIEFDS19jb250aW51ZTogewogCQkJCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPQogCQkJCQkJbG9va3VwX2NvbW1pdChyZXN1bHRfc2hhMSk7CisJCQkJCWlmIChhcmdzLnN0YXRlbGVzc19ycGMKKwkJCQkJICYmIGFjayA9PSBBQ0tfY29tbW9uCisJCQkJCSAmJiAhKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQ09NTU9OKSkgeworCQkJCQkJLyogV2UgbmVlZCB0byByZXBsYXkgdGhlIGhhdmUgZm9yIHRoaXMgb2JqZWN0CisJCQkJCQkgKiBvbiB0aGUgbmV4dCBSUEMgcmVxdWVzdCBzbyB0aGUgcGVlciBrbm93cworCQkJCQkJICogaXQgaXMgaW4gY29tbW9uIHdpdGggdXMuCisJCQkJCQkgKi8KKwkJCQkJCWNvbnN0IGNoYXIgKmhleCA9IHNoYTFfdG9faGV4KHJlc3VsdF9zaGExKTsKKwkJCQkJCXBhY2tldF9idWZfd3JpdGUoJnJlcV9idWYsICJoYXZlICVzXG4iLCBoZXgpOworCQkJCQkJc3RhdGVfbGVuID0gcmVxX2J1Zi5sZW47CisJCQkJCX0KIAkJCQkJbWFya19jb21tb24oY29tbWl0LCAwLCAxKTsKIAkJCQkJcmV0dmFsID0gMDsKIAkJCQkJaW5fdmFpbiA9IDA7CiAJCQkJCWdvdF9jb250aW51ZSA9IDE7CisJCQkJCWJyZWFrOworCQkJCQl9CiAJCQkJfQogCQkJfSB3aGlsZSAoYWNrKTsKIAkJCWZsdXNoZXMtLTsKQEAgLTI4OSwyMCArMzkyLDI0IEBACiAJCX0KIAl9CiBkb25lOgotCXBhY2tldF93cml0ZShmZFsxXSwgImRvbmVcbiIpOworCXBhY2tldF9idWZfd3JpdGUoJnJlcV9idWYsICJkb25lXG4iKTsKKwlzZW5kX3JlcXVlc3QoZmRbMV0sICZyZXFfYnVmKTsKIAlpZiAoYXJncy52ZXJib3NlKQogCQlmcHJpbnRmKHN0ZGVyciwgImRvbmVcbiIpOwogCWlmIChyZXR2YWwgIT0gMCkgewogCQltdWx0aV9hY2sgPSAwOwogCQlmbHVzaGVzKys7CiAJfQorCXN0cmJ1Zl9yZWxlYXNlKCZyZXFfYnVmKTsKKworCWNvbnN1bWVfc2hhbGxvd19saXN0KGZkWzBdKTsKIAl3aGlsZSAoZmx1c2hlcyB8fCBtdWx0aV9hY2spIHsKIAkJaW50IGFjayA9IGdldF9hY2soZmRbMF0sIHJlc3VsdF9zaGExKTsKIAkJaWYgKGFjaykgewogCQkJaWYgKGFyZ3MudmVyYm9zZSkKIAkJCQlmcHJpbnRmKHN0ZGVyciwgImdvdCBhY2sgKCVkKSAlc1xuIiwgYWNrLAogCQkJCQlzaGExX3RvX2hleChyZXN1bHRfc2hhMSkpOwotCQkJaWYgKGFjayA9PSAxKQorCQkJaWYgKGFjayA9PSBBQ0spCiAJCQkJcmV0dXJuIDA7CiAJCQltdWx0aV9hY2sgPSAxOwogCQkJY29udGludWU7CkBAIC00NzksMTIgKzU4NiwxMiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbnQgc2lkZWJhbmRfZGVtdXgoaW50IGZkLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBzaWRlYmFuZF9kZW11eChpbnQgaW4sIGludCBvdXQsIHZvaWQgKmRhdGEpCiB7CiAJaW50ICp4ZCA9IGRhdGE7CiAKLQlpbnQgcmV0ID0gcmVjdl9zaWRlYmFuZCgiZmV0Y2gtcGFjayIsIHhkWzBdLCBmZCk7Ci0JY2xvc2UoZmQpOworCWludCByZXQgPSByZWN2X3NpZGViYW5kKCJmZXRjaC1wYWNrIiwgeGRbMF0sIG91dCk7CisJY2xvc2Uob3V0KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC01MDYsNiArNjEzLDcgQEAKIAkJICovCiAJCWRlbXV4LnByb2MgPSBzaWRlYmFuZF9kZW11eDsKIAkJZGVtdXguZGF0YSA9IHhkOworCQlkZW11eC5vdXQgPSAtMTsKIAkJaWYgKHN0YXJ0X2FzeW5jKCZkZW11eCkpCiAJCQlkaWUoImZldGNoLXBhY2s6IHVuYWJsZSB0byBmb3JrIG9mZiBzaWRlYmFuZCIKIAkJCSAgICAiIGRlbXVsdGlwbGV4ZXIiKTsKQEAgLTU4NCw3ICs2OTIsMTIgQEAKIAogCWlmIChpc19yZXBvc2l0b3J5X3NoYWxsb3coKSAmJiAhc2VydmVyX3N1cHBvcnRzKCJzaGFsbG93IikpCiAJCWRpZSgiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyBjbGllbnRzIik7Ci0JaWYgKHNlcnZlcl9zdXBwb3J0cygibXVsdGlfYWNrIikpIHsKKwlpZiAoc2VydmVyX3N1cHBvcnRzKCJtdWx0aV9hY2tfZGV0YWlsZWQiKSkgeworCQlpZiAoYXJncy52ZXJib3NlKQorCQkJZnByaW50ZihzdGRlcnIsICJTZXJ2ZXIgc3VwcG9ydHMgbXVsdGlfYWNrX2RldGFpbGVkXG4iKTsKKwkJbXVsdGlfYWNrID0gMjsKKwl9CisJZWxzZSBpZiAoc2VydmVyX3N1cHBvcnRzKCJtdWx0aV9hY2siKSkgewogCQlpZiAoYXJncy52ZXJib3NlKQogCQkJZnByaW50ZihzdGRlcnIsICJTZXJ2ZXIgc3VwcG9ydHMgbXVsdGlfYWNrXG4iKTsKIAkJbXVsdGlfYWNrID0gMTsKQEAgLTYxNSw2ICs3MjgsOCBAQAogCQkJICovCiAJCQl3YXJuaW5nKCJubyBjb21tb24gY29tbWl0cyIpOwogCisJaWYgKGFyZ3Muc3RhdGVsZXNzX3JwYykKKwkJcGFja2V0X2ZsdXNoKGZkWzFdKTsKIAlpZiAoZ2V0X3BhY2soZmQsIHBhY2tfbG9ja2ZpbGUpKQogCQlkaWUoImdpdCBmZXRjaC1wYWNrOiBmZXRjaCBmYWlsZWQuIik7CiAKQEAgLTY4NSw2ICs4MDAsOCBAQAogCXN0cnVjdCByZWYgKnJlZiA9IE5VTEw7CiAJY2hhciAqZGVzdCA9IE5VTEwsICoqaGVhZHM7CiAJaW50IGZkWzJdOworCWNoYXIgKnBhY2tfbG9ja2ZpbGUgPSBOVUxMOworCWNoYXIgKipwYWNrX2xvY2tmaWxlX3B0ciA9IE5VTEw7CiAJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNvbm47CiAKIAlucl9oZWFkcyA9IDA7CkBAIC03MzQsNiArODUxLDE1IEBACiAJCQkJYXJncy5ub19wcm9ncmVzcyA9IDE7CiAJCQkJY29udGludWU7CiAJCQl9CisJCQlpZiAoIXN0cmNtcCgiLS1zdGF0ZWxlc3MtcnBjIiwgYXJnKSkgeworCQkJCWFyZ3Muc3RhdGVsZXNzX3JwYyA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcCgiLS1sb2NrLXBhY2siLCBhcmcpKSB7CisJCQkJYXJncy5sb2NrX3BhY2sgPSAxOworCQkJCXBhY2tfbG9ja2ZpbGVfcHRyID0gJnBhY2tfbG9ja2ZpbGU7CisJCQkJY29udGludWU7CisJCQl9CiAJCQl1c2FnZShmZXRjaF9wYWNrX3VzYWdlKTsKIAkJfQogCQlkZXN0ID0gKGNoYXIgKilhcmc7CkBAIC03NDQsMTkgKzg3MCwyNyBAQAogCWlmICghZGVzdCkKIAkJdXNhZ2UoZmV0Y2hfcGFja191c2FnZSk7CiAKLQljb25uID0gZ2l0X2Nvbm5lY3QoZmQsIChjaGFyICopZGVzdCwgYXJncy51cGxvYWRwYWNrLAotCQkJICAgYXJncy52ZXJib3NlID8gQ09OTkVDVF9WRVJCT1NFIDogMCk7Ci0JaWYgKGNvbm4pIHsKLQkJZ2V0X3JlbW90ZV9oZWFkcyhmZFswXSwgJnJlZiwgMCwgTlVMTCwgMCwgTlVMTCk7Ci0KLQkJcmVmID0gZmV0Y2hfcGFjaygmYXJncywgZmQsIGNvbm4sIHJlZiwgZGVzdCwgbnJfaGVhZHMsIGhlYWRzLCBOVUxMKTsKLQkJY2xvc2UoZmRbMF0pOwotCQljbG9zZShmZFsxXSk7Ci0JCWlmIChmaW5pc2hfY29ubmVjdChjb25uKSkKLQkJCXJlZiA9IE5VTEw7CisJaWYgKGFyZ3Muc3RhdGVsZXNzX3JwYykgeworCQljb25uID0gTlVMTDsKKwkJZmRbMF0gPSAwOworCQlmZFsxXSA9IDE7CiAJfSBlbHNlIHsKLQkJcmVmID0gTlVMTDsKKwkJY29ubiA9IGdpdF9jb25uZWN0KGZkLCAoY2hhciAqKWRlc3QsIGFyZ3MudXBsb2FkcGFjaywKKwkJCQkgICBhcmdzLnZlcmJvc2UgPyBDT05ORUNUX1ZFUkJPU0UgOiAwKTsKIAl9CisKKwlnZXRfcmVtb3RlX2hlYWRzKGZkWzBdLCAmcmVmLCAwLCBOVUxMLCAwLCBOVUxMKTsKKworCXJlZiA9IGZldGNoX3BhY2soJmFyZ3MsIGZkLCBjb25uLCByZWYsIGRlc3QsCisJCW5yX2hlYWRzLCBoZWFkcywgcGFja19sb2NrZmlsZV9wdHIpOworCWlmIChwYWNrX2xvY2tmaWxlKSB7CisJCXByaW50ZigibG9jayAlc1xuIiwgcGFja19sb2NrZmlsZSk7CisJCWZmbHVzaChzdGRvdXQpOworCX0KKwljbG9zZShmZFswXSk7CisJY2xvc2UoZmRbMV0pOworCWlmIChmaW5pc2hfY29ubmVjdChjb25uKSkKKwkJcmVmID0gTlVMTDsKIAlyZXQgPSAhcmVmOwogCiAJaWYgKCFyZXQgJiYgbnJfaGVhZHMpIHsKQEAgLTgwOSw2ICs5NDMsNyBAQAogCiAJaWYgKGFyZ3MuZGVwdGggPiAwKSB7CiAJCXN0cnVjdCBjYWNoZV90aW1lIG10aW1lOworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CiAJCWNoYXIgKnNoYWxsb3cgPSBnaXRfcGF0aCgic2hhbGxvdyIpOwogCQlpbnQgZmQ7CiAKQEAgLTgyNiwxMiArOTYxLDE0IEBACiAKIAkJZmQgPSBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZsb2NrLCBzaGFsbG93LAogCQkJCQkgICAgICAgTE9DS19ESUVfT05fRVJST1IpOwotCQlpZiAoIXdyaXRlX3NoYWxsb3dfY29tbWl0cyhmZCwgMCkpIHsKKwkJaWYgKCF3cml0ZV9zaGFsbG93X2NvbW1pdHMoJnNiLCAwKQorCQkgfHwgd3JpdGVfaW5fZnVsbChmZCwgc2IuYnVmLCBzYi5sZW4pICE9IHNiLmxlbikgewogCQkJdW5saW5rX29yX3dhcm4oc2hhbGxvdyk7CiAJCQlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2spOwogCQl9IGVsc2UgewogCQkJY29tbWl0X2xvY2tfZmlsZSgmbG9jayk7CiAJCX0KKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKIAl9CiAKIAlyZXByZXBhcmVfcGFja2VkX2dpdCgpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1mZXRjaC5jIGIvYnVpbHRpbi1mZXRjaC5jCmluZGV4IDFmN2EzZjEuLmJiYzQyNWIgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tZmV0Y2guYworKysgYi9idWlsdGluLWZldGNoLmMKQEAgLTE0LDYgKzE0LDkgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2ZldGNoX3VzYWdlW10gPSB7CiAJImdpdCBmZXRjaCBbb3B0aW9uc10gWzxyZXBvc2l0b3J5PiA8cmVmc3BlYz4uLi5dIiwKKwkiZ2l0IGZldGNoIFtvcHRpb25zXSA8Z3JvdXA+IiwKKwkiZ2l0IGZldGNoIC0tbXVsdGlwbGUgW29wdGlvbnNdIFs8cmVwb3NpdG9yeT4gfCA8Z3JvdXA+XS4uLiIsCisJImdpdCBmZXRjaCAtLWFsbCBbb3B0aW9uc10iLAogCU5VTEwKIH07CiAKQEAgLTIzLDcgKzI2LDcgQEAKIAlUQUdTX1NFVCA9IDIKIH07CiAKLXN0YXRpYyBpbnQgYXBwZW5kLCBmb3JjZSwga2VlcCwgdXBkYXRlX2hlYWRfb2ssIHZlcmJvc2l0eTsKK3N0YXRpYyBpbnQgYWxsLCBhcHBlbmQsIGRyeV9ydW4sIGZvcmNlLCBrZWVwLCBtdWx0aXBsZSwgcHJ1bmUsIHVwZGF0ZV9oZWFkX29rLCB2ZXJib3NpdHk7CiBzdGF0aWMgaW50IHRhZ3MgPSBUQUdTX0RFRkFVTFQ7CiBzdGF0aWMgY29uc3QgY2hhciAqZGVwdGg7CiBzdGF0aWMgY29uc3QgY2hhciAqdXBsb2FkX3BhY2s7CkBAIC0zMiwxNiArMzUsMjQgQEAKIAogc3RhdGljIHN0cnVjdCBvcHRpb24gYnVpbHRpbl9mZXRjaF9vcHRpb25zW10gPSB7CiAJT1BUX19WRVJCT1NJVFkoJnZlcmJvc2l0eSksCisJT1BUX0JPT0xFQU4oMCwgImFsbCIsICZhbGwsCisJCSAgICAiZmV0Y2ggZnJvbSBhbGwgcmVtb3RlcyIpLAogCU9QVF9CT09MRUFOKCdhJywgImFwcGVuZCIsICZhcHBlbmQsCiAJCSAgICAiYXBwZW5kIHRvIC5naXQvRkVUQ0hfSEVBRCBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIiksCiAJT1BUX1NUUklORygwLCAidXBsb2FkLXBhY2siLCAmdXBsb2FkX3BhY2ssICJQQVRIIiwKIAkJICAgInBhdGggdG8gdXBsb2FkIHBhY2sgb24gcmVtb3RlIGVuZCIpLAogCU9QVF9CT09MRUFOKCdmJywgImZvcmNlIiwgJmZvcmNlLAogCQkgICAgImZvcmNlIG92ZXJ3cml0ZSBvZiBsb2NhbCBicmFuY2giKSwKKwlPUFRfQk9PTEVBTignbScsICJtdWx0aXBsZSIsICZtdWx0aXBsZSwKKwkJICAgICJmZXRjaCBmcm9tIG11bHRpcGxlIHJlbW90ZXMiKSwKIAlPUFRfU0VUX0lOVCgndCcsICJ0YWdzIiwgJnRhZ3MsCiAJCSAgICAiZmV0Y2ggYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyIsIFRBR1NfU0VUKSwKIAlPUFRfU0VUX0lOVCgnbicsIE5VTEwsICZ0YWdzLAogCQkgICAgImRvIG5vdCBmZXRjaCBhbGwgdGFncyAoLS1uby10YWdzKSIsIFRBR1NfVU5TRVQpLAorCU9QVF9CT09MRUFOKCdwJywgInBydW5lIiwgJnBydW5lLAorCQkgICAgInBydW5lIHRyYWNraW5nIGJyYW5jaGVzIG5vIGxvbmdlciBvbiByZW1vdGUiKSwKKwlPUFRfQk9PTEVBTigwLCAiZHJ5LXJ1biIsICZkcnlfcnVuLAorCQkgICAgImRyeSBydW4iKSwKIAlPUFRfQk9PTEVBTignaycsICJrZWVwIiwgJmtlZXAsICJrZWVwIGRvd25sb2FkZWQgcGFjayIpLAogCU9QVF9CT09MRUFOKCd1JywgInVwZGF0ZS1oZWFkLW9rIiwgJnVwZGF0ZV9oZWFkX29rLAogCQkgICAgImFsbG93IHVwZGF0aW5nIG9mIEhFQUQgcmVmIiksCkBAIC05MywxMCArMTA0LDggQEAKIAkJICogdGhlcmUgaXMgbm8gZW50cnkgaW4gdGhlIHJlc3VsdGluZyBGRVRDSF9IRUFEIG1hcmtlZAogCQkgKiBmb3IgbWVyZ2luZy4KIAkJICovCisJCW1lbXNldCgmcmVmc3BlYywgMCwgc2l6ZW9mKHJlZnNwZWMpKTsKIAkJcmVmc3BlYy5zcmMgPSBicmFuY2gtPm1lcmdlW2ldLT5zcmM7Ci0JCXJlZnNwZWMuZHN0ID0gTlVMTDsKLQkJcmVmc3BlYy5wYXR0ZXJuID0gMDsKLQkJcmVmc3BlYy5mb3JjZSA9IDA7CiAJCWdldF9mZXRjaF9tYXAocmVtb3RlX3JlZnMsICZyZWZzcGVjLCB0YWlsLCAxKTsKIAkJZm9yIChybSA9ICpvbGRfdGFpbDsgcm07IHJtID0gcm0tPm5leHQpCiAJCQlybS0+bWVyZ2UgPSAxOwpAQCAtMTc4LDYgKzE4Nyw4IEBACiAJY2hhciAqcmxhID0gZ2V0ZW52KCJHSVRfUkVGTE9HX0FDVElPTiIpOwogCXN0YXRpYyBzdHJ1Y3QgcmVmX2xvY2sgKmxvY2s7CiAKKwlpZiAoZHJ5X3J1bikKKwkJcmV0dXJuIDA7CiAJaWYgKCFybGEpCiAJCXJsYSA9IGRlZmF1bHRfcmxhLmJ1ZjsKIAlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLCAiJXM6ICVzIiwgcmxhLCBhY3Rpb24pOwpAQCAtMjAyLDcgKzIxMyw3IEBACiAJc3RydWN0IGNvbW1pdCAqY3VycmVudCA9IE5VTEwsICp1cGRhdGVkOwogCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKIAlzdHJ1Y3QgYnJhbmNoICpjdXJyZW50X2JyYW5jaCA9IGJyYW5jaF9nZXQoTlVMTCk7Ci0JY29uc3QgY2hhciAqcHJldHR5X3JlZiA9IHByZXR0aWZ5X3JlZihyZWYpOworCWNvbnN0IGNoYXIgKnByZXR0eV9yZWYgPSBwcmV0dGlmeV9yZWZuYW1lKHJlZi0+bmFtZSk7CiAKIAkqZGlzcGxheSA9IDA7CiAJdHlwZSA9IHNoYTFfb2JqZWN0X2luZm8ocmVmLT5uZXdfc2hhMSwgTlVMTCk7CkBAIC0yNjksNyArMjgwLDcgQEAKIAkJc3RyY3B5KHF1aWNrcmVmLCBmaW5kX3VuaXF1ZV9hYmJyZXYoY3VycmVudC0+b2JqZWN0LnNoYTEsIERFRkFVTFRfQUJCUkVWKSk7CiAJCXN0cmNhdChxdWlja3JlZiwgIi4uIik7CiAJCXN0cmNhdChxdWlja3JlZiwgZmluZF91bmlxdWVfYWJicmV2KHJlZi0+bmV3X3NoYTEsIERFRkFVTFRfQUJCUkVWKSk7Ci0JCXIgPSBzX3VwZGF0ZV9yZWYoImZhc3QgZm9yd2FyZCIsIHJlZiwgMSk7CisJCXIgPSBzX3VwZGF0ZV9yZWYoImZhc3QtZm9yd2FyZCIsIHJlZiwgMSk7CiAJCXNwcmludGYoZGlzcGxheSwgIiVjICUtKnMgJS0qcyAtPiAlcyVzIiwgciA/ICchJyA6ICcgJywKIAkJCVNVTU1BUllfV0lEVEgsIHF1aWNrcmVmLCBSRUZDT0xfV0lEVEgsIHJlbW90ZSwKIAkJCXByZXR0eV9yZWYsIHIgPyAiICAodW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYpIiA6ICIiKTsKQEAgLTI4NywxNCArMjk4LDE0IEBACiAJCQlyID8gInVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmIiA6ICJmb3JjZWQgdXBkYXRlIik7CiAJCXJldHVybiByOwogCX0gZWxzZSB7Ci0JCXNwcmludGYoZGlzcGxheSwgIiEgJS0qcyAlLSpzIC0+ICVzICAobm9uIGZhc3QgZm9yd2FyZCkiLAorCQlzcHJpbnRmKGRpc3BsYXksICIhICUtKnMgJS0qcyAtPiAlcyAgKG5vbi1mYXN0LWZvcndhcmQpIiwKIAkJCVNVTU1BUllfV0lEVEgsICJbcmVqZWN0ZWRdIiwgUkVGQ09MX1dJRFRILCByZW1vdGUsCiAJCQlwcmV0dHlfcmVmKTsKIAkJcmV0dXJuIDE7CiAJfQogfQogCi1zdGF0aWMgaW50IHN0b3JlX3VwZGF0ZWRfcmVmcyhjb25zdCBjaGFyICp1cmwsIGNvbnN0IGNoYXIgKnJlbW90ZV9uYW1lLAorc3RhdGljIGludCBzdG9yZV91cGRhdGVkX3JlZnMoY29uc3QgY2hhciAqcmF3X3VybCwgY29uc3QgY2hhciAqcmVtb3RlX25hbWUsCiAJCXN0cnVjdCByZWYgKnJlZl9tYXApCiB7CiAJRklMRSAqZnA7CkBAIC0zMDMsMTEgKzMxNCwxNiBAQAogCWNoYXIgbm90ZVsxMDI0XTsKIAljb25zdCBjaGFyICp3aGF0LCAqa2luZDsKIAlzdHJ1Y3QgcmVmICpybTsKLQljaGFyICpmaWxlbmFtZSA9IGdpdF9wYXRoKCJGRVRDSF9IRUFEIik7CisJY2hhciAqdXJsLCAqZmlsZW5hbWUgPSBkcnlfcnVuID8gIi9kZXYvbnVsbCIgOiBnaXRfcGF0aCgiRkVUQ0hfSEVBRCIpOwogCiAJZnAgPSBmb3BlbihmaWxlbmFtZSwgImEiKTsKIAlpZiAoIWZwKQogCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBvcGVuICVzOiAlc1xuIiwgZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisKKwlpZiAocmF3X3VybCkKKwkJdXJsID0gdHJhbnNwb3J0X2Fub255bWl6ZV91cmwocmF3X3VybCk7CisJZWxzZQorCQl1cmwgPSB4c3RyZHVwKCJmb3JlaWduIik7CiAJZm9yIChybSA9IHJlZl9tYXA7IHJtOyBybSA9IHJtLT5uZXh0KSB7CiAJCXN0cnVjdCByZWYgKnJlZiA9IE5VTEw7CiAKQEAgLTM1OCwxNiArMzc0LDIzIEBACiAJCQkJCQkgICAga2luZCk7CiAJCQlub3RlX2xlbiArPSBzcHJpbnRmKG5vdGUgKyBub3RlX2xlbiwgIiclcycgb2YgIiwgd2hhdCk7CiAJCX0KLQkJbm90ZV9sZW4gKz0gc3ByaW50Zihub3RlICsgbm90ZV9sZW4sICIlLipzIiwgdXJsX2xlbiwgdXJsKTsKLQkJZnByaW50ZihmcCwgIiVzXHQlc1x0JXNcbiIsCisJCW5vdGVbbm90ZV9sZW5dID0gJ1wwJzsKKwkJZnByaW50ZihmcCwgIiVzXHQlc1x0JXMiLAogCQkJc2hhMV90b19oZXgoY29tbWl0ID8gY29tbWl0LT5vYmplY3Quc2hhMSA6CiAJCQkJICAgIHJtLT5vbGRfc2hhMSksCiAJCQlybS0+bWVyZ2UgPyAiIiA6ICJub3QtZm9yLW1lcmdlIiwKIAkJCW5vdGUpOworCQlmb3IgKGkgPSAwOyBpIDwgdXJsX2xlbjsgKytpKQorCQkJaWYgKCdcbicgPT0gdXJsW2ldKQorCQkJCWZwdXRzKCJcXG4iLCBmcCk7CisJCQllbHNlCisJCQkJZnB1dGModXJsW2ldLCBmcCk7CisJCWZwdXRjKCdcbicsIGZwKTsKIAotCQlpZiAocmVmKQorCQlpZiAocmVmKSB7CiAJCQlyYyB8PSB1cGRhdGVfbG9jYWxfcmVmKHJlZiwgd2hhdCwgbm90ZSk7Ci0JCWVsc2UKKwkJCWZyZWUocmVmKTsKKwkJfSBlbHNlCiAJCQlzcHJpbnRmKG5vdGUsICIqICUtKnMgJS0qcyAtPiBGRVRDSF9IRUFEIiwKIAkJCQlTVU1NQVJZX1dJRFRILCAqa2luZCA/IGtpbmQgOiAiYnJhbmNoIiwKIAkJCQkgUkVGQ09MX1dJRFRILCAqd2hhdCA/IHdoYXQgOiAiSEVBRCIpOwpAQCAtMzgxLDYgKzQwNCw3IEBACiAJCQkJZnByaW50ZihzdGRlcnIsICIgJXNcbiIsIG5vdGUpOwogCQl9CiAJfQorCWZyZWUodXJsKTsKIAlmY2xvc2UoZnApOwogCWlmIChyYyAmIFNUT1JFX1JFRl9FUlJPUl9ERl9DT05GTElDVCkKIAkJZXJyb3IoInNvbWUgbG9jYWwgcmVmcyBjb3VsZCBub3QgYmUgdXBkYXRlZDsgdHJ5IHJ1bm5pbmdcbiIKQEAgLTM5MSwxNCArNDE1LDE0IEBACiAKIC8qCiAgKiBXZSB3b3VsZCB3YW50IHRvIGJ5cGFzcyB0aGUgb2JqZWN0IHRyYW5zZmVyIGFsdG9nZXRoZXIgaWYKLSAqIGV2ZXJ5dGhpbmcgd2UgYXJlIGdvaW5nIHRvIGZldGNoIGFscmVhZHkgZXhpc3RzIGFuZCBjb25uZWN0ZWQKKyAqIGV2ZXJ5dGhpbmcgd2UgYXJlIGdvaW5nIHRvIGZldGNoIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBjb25uZWN0ZWQKICAqIGxvY2FsbHkuCiAgKgotICogVGhlIHJlZnMgd2UgYXJlIGdvaW5nIHRvIGZldGNoIGFyZSBpbiB0b19mZXRjaCAobnJfaGVhZHMgaW4KLSAqIHRvdGFsKS4gIElmIHJ1bm5pbmcKKyAqIFRoZSByZWZzIHdlIGFyZSBnb2luZyB0byBmZXRjaCBhcmUgaW4gcmVmX21hcC4gIElmIHJ1bm5pbmcKICAqCi0gKiAgJCBnaXQgcmV2LWxpc3QgLS1vYmplY3RzIHRvX2ZldGNoWzBdIHRvX2ZldGNoWzFdIC4uLiAtLW5vdCAtLWFsbAorICogICQgZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAtLXN0ZGluIC0tbm90IC0tYWxsCiAgKgorICogKGZlZWRpbmcgYWxsIHRoZSByZWZzIGluIHJlZl9tYXAgb24gaXRzIHN0YW5kYXJkIGlucHV0KQogICogZG9lcyBub3QgZXJyb3Igb3V0LCB0aGF0IG1lYW5zIGV2ZXJ5dGhpbmcgcmVhY2hhYmxlIGZyb20gdGhlCiAgKiByZWZzIHdlIGFyZSBnb2luZyB0byBmZXRjaCBleGlzdHMgYW5kIGlzIGNvbm5lY3RlZCB0byBzb21lIG9mCiAgKiBvdXIgZXhpc3RpbmcgcmVmcy4KQEAgLTQwNyw4ICs0MzEsOSBAQAogewogCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHJldmxpc3Q7CiAJc3RydWN0IHJlZiAqcmVmOwotCWNoYXIgKiphcmd2OwotCWludCBpLCBlcnI7CisJaW50IGVycjsKKwljb25zdCBjaGFyICphcmd2W10gPSB7InJldi1saXN0IiwKKwkJIi0tcXVpZXQiLCAiLS1vYmplY3RzIiwgIi0tc3RkaW4iLCAiLS1ub3QiLCAiLS1hbGwiLCBOVUxMfTsKIAogCS8qCiAJICogSWYgd2UgYXJlIGRlZXBlbmluZyBhIHNoYWxsb3cgY2xvbmUgd2UgYWxyZWFkeSBoYXZlIHRoZXNlCkBAIC00MjAsMzQgKzQ0NSw0NiBAQAogCWlmIChkZXB0aCkKIAkJcmV0dXJuIC0xOwogCi0JZm9yIChpID0gMCwgcmVmID0gcmVmX21hcDsgcmVmOyByZWYgPSByZWYtPm5leHQpCi0JCWkrKzsKLQlpZiAoIWkpCisJaWYgKCFyZWZfbWFwKQogCQlyZXR1cm4gMDsKIAotCWFyZ3YgPSB4bWFsbG9jKHNpemVvZigqYXJndikgKiAoaSArIDYpKTsKLQlpID0gMDsKLQlhcmd2W2krK10gPSB4c3RyZHVwKCJyZXYtbGlzdCIpOwotCWFyZ3ZbaSsrXSA9IHhzdHJkdXAoIi0tcXVpZXQiKTsKLQlhcmd2W2krK10gPSB4c3RyZHVwKCItLW9iamVjdHMiKTsKLQlmb3IgKHJlZiA9IHJlZl9tYXA7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQotCQlhcmd2W2krK10gPSB4c3RyZHVwKHNoYTFfdG9faGV4KHJlZi0+b2xkX3NoYTEpKTsKLQlhcmd2W2krK10gPSB4c3RyZHVwKCItLW5vdCIpOwotCWFyZ3ZbaSsrXSA9IHhzdHJkdXAoIi0tYWxsIik7Ci0JYXJndltpKytdID0gTlVMTDsKLQogCW1lbXNldCgmcmV2bGlzdCwgMCwgc2l6ZW9mKHJldmxpc3QpKTsKLQlyZXZsaXN0LmFyZ3YgPSAoY29uc3QgY2hhcioqKWFyZ3Y7CisJcmV2bGlzdC5hcmd2ID0gYXJndjsKIAlyZXZsaXN0LmdpdF9jbWQgPSAxOwotCXJldmxpc3Qubm9fc3RkaW4gPSAxOwogCXJldmxpc3Qubm9fc3Rkb3V0ID0gMTsKIAlyZXZsaXN0Lm5vX3N0ZGVyciA9IDE7Ci0JZXJyID0gcnVuX2NvbW1hbmQoJnJldmxpc3QpOworCXJldmxpc3QuaW4gPSAtMTsKIAotCWZvciAoaSA9IDA7IGFyZ3ZbaV07IGkrKykKLQkJZnJlZShhcmd2W2ldKTsKLQlmcmVlKGFyZ3YpOwotCXJldHVybiBlcnI7CisJZXJyID0gc3RhcnRfY29tbWFuZCgmcmV2bGlzdCk7CisJaWYgKGVycikgeworCQllcnJvcigiY291bGQgbm90IHJ1biByZXYtbGlzdCIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qCisJICogSWYgcmV2LWxpc3QgLS1zdGRpbiBlbmNvdW50ZXJzIGFuIHVua25vd24gY29tbWl0LCBpdCB0ZXJtaW5hdGVzLAorCSAqIHdoaWNoIHdpbGwgY2F1c2UgU0lHUElQRSBpbiB0aGUgd3JpdGUgbG9vcCBiZWxvdy4KKwkgKi8KKwlzaWdjaGFpbl9wdXNoKFNJR1BJUEUsIFNJR19JR04pOworCisJZm9yIChyZWYgPSByZWZfbWFwOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlpZiAod3JpdGVfaW5fZnVsbChyZXZsaXN0LmluLCBzaGExX3RvX2hleChyZWYtPm9sZF9zaGExKSwgNDApIDwgMCB8fAorCQkgICAgd3JpdGVfc3RyX2luX2Z1bGwocmV2bGlzdC5pbiwgIlxuIikgPCAwKSB7CisJCQlpZiAoZXJybm8gIT0gRVBJUEUgJiYgZXJybm8gIT0gRUlOVkFMKQorCQkJCWVycm9yKCJmYWlsZWQgd3JpdGUgdG8gcmV2LWxpc3Q6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWVyciA9IC0xOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoY2xvc2UocmV2bGlzdC5pbikpIHsKKwkJZXJyb3IoImZhaWxlZCB0byBjbG9zZSByZXYtbGlzdCdzIHN0ZGluOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWVyciA9IC0xOworCX0KKworCXNpZ2NoYWluX3BvcChTSUdQSVBFKTsKKworCXJldHVybiBmaW5pc2hfY29tbWFuZCgmcmV2bGlzdCkgfHwgZXJyOwogfQogCiBzdGF0aWMgaW50IGZldGNoX3JlZnMoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBzdHJ1Y3QgcmVmICpyZWZfbWFwKQpAQCAtNDYzLDExICs1MDAsMzQgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHBydW5lX3JlZnMoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBzdHJ1Y3QgcmVmICpyZWZfbWFwKQoreworCWludCByZXN1bHQgPSAwOworCXN0cnVjdCByZWYgKnJlZiwgKnN0YWxlX3JlZnMgPSBnZXRfc3RhbGVfaGVhZHModHJhbnNwb3J0LT5yZW1vdGUsIHJlZl9tYXApOworCWNvbnN0IGNoYXIgKmRhbmdsaW5nX21zZyA9IGRyeV9ydW4KKwkJPyAiICAgKCVzIHdpbGwgYmVjb21lIGRhbmdsaW5nKVxuIgorCQk6ICIgICAoJXMgaGFzIGJlY29tZSBkYW5nbGluZylcbiI7CisKKwlmb3IgKHJlZiA9IHN0YWxlX3JlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCWlmICghZHJ5X3J1bikKKwkJCXJlc3VsdCB8PSBkZWxldGVfcmVmKHJlZi0+bmFtZSwgTlVMTCwgMCk7CisJCWlmICh2ZXJib3NpdHkgPj0gMCkgeworCQkJZnByaW50ZihzdGRlcnIsICIgeCAlLSpzICUtKnMgLT4gJXNcbiIsCisJCQkJU1VNTUFSWV9XSURUSCwgIltkZWxldGVkXSIsCisJCQkJUkVGQ09MX1dJRFRILCAiKG5vbmUpIiwgcHJldHRpZnlfcmVmbmFtZShyZWYtPm5hbWUpKTsKKwkJCXdhcm5fZGFuZ2xpbmdfc3ltcmVmKHN0ZGVyciwgZGFuZ2xpbmdfbXNnLCByZWYtPm5hbWUpOworCQl9CisJfQorCWZyZWVfcmVmcyhzdGFsZV9yZWZzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCiBzdGF0aWMgaW50IGFkZF9leGlzdGluZyhjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAogCQkJaW50IGZsYWcsIHZvaWQgKmNiZGF0YSkKIHsKIAlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QgPSAoc3RydWN0IHN0cmluZ19saXN0ICopY2JkYXRhOwotCXN0cmluZ19saXN0X2luc2VydChyZWZuYW1lLCBsaXN0KTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSA9IHN0cmluZ19saXN0X2luc2VydChyZWZuYW1lLCBsaXN0KTsKKwlpdGVtLT51dGlsID0gKHZvaWQgKilzaGExOwogCXJldHVybiAwOwogfQogCkBAIC00ODIsNTcgKzU0Miw5OCBAQAogCXJldHVybiAwOwogfQogCitzdHJ1Y3QgdGFnX2RhdGEgeworCXN0cnVjdCByZWYgKipoZWFkOworCXN0cnVjdCByZWYgKioqdGFpbDsKK307CisKK3N0YXRpYyBpbnQgYWRkX3RvX3RhaWwoc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHRhZ19kYXRhICpkYXRhID0gKHN0cnVjdCB0YWdfZGF0YSAqKWNiX2RhdGE7CisJc3RydWN0IHJlZiAqcm0gPSBOVUxMOworCisJLyogV2UgaGF2ZSBhbHJlYWR5IGRlY2lkZWQgdG8gaWdub3JlIHRoaXMgaXRlbSAqLworCWlmICghaXRlbS0+dXRpbCkKKwkJcmV0dXJuIDA7CisKKwlybSA9IGFsbG9jX3JlZihpdGVtLT5zdHJpbmcpOworCXJtLT5wZWVyX3JlZiA9IGFsbG9jX3JlZihpdGVtLT5zdHJpbmcpOworCWhhc2hjcHkocm0tPm9sZF9zaGExLCBpdGVtLT51dGlsKTsKKworCSoqZGF0YS0+dGFpbCA9IHJtOworCSpkYXRhLT50YWlsID0gJnJtLT5uZXh0OworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIGZpbmRfbm9uX2xvY2FsX3RhZ3Moc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAogCQkJc3RydWN0IHJlZiAqKmhlYWQsCiAJCQlzdHJ1Y3QgcmVmICoqKnRhaWwpCiB7CiAJc3RydWN0IHN0cmluZ19saXN0IGV4aXN0aW5nX3JlZnMgPSB7IE5VTEwsIDAsIDAsIDAgfTsKLQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbmV3X3JlZnMgPSB7IE5VTEwsIDAsIDAsIDEgfTsKLQljaGFyICpyZWZfbmFtZTsKLQlpbnQgcmVmX25hbWVfbGVuOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlZl9zaGExOwotCWNvbnN0IHN0cnVjdCByZWYgKnRhZ19yZWY7Ci0Jc3RydWN0IHJlZiAqcm0gPSBOVUxMOworCXN0cnVjdCBzdHJpbmdfbGlzdCByZW1vdGVfcmVmcyA9IHsgTlVMTCwgMCwgMCwgMCB9OworCXN0cnVjdCB0YWdfZGF0YSBkYXRhID0ge2hlYWQsIHRhaWx9OwogCWNvbnN0IHN0cnVjdCByZWYgKnJlZjsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSA9IE5VTEw7CiAKIAlmb3JfZWFjaF9yZWYoYWRkX2V4aXN0aW5nLCAmZXhpc3RpbmdfcmVmcyk7CiAJZm9yIChyZWYgPSB0cmFuc3BvcnRfZ2V0X3JlbW90ZV9yZWZzKHRyYW5zcG9ydCk7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CiAJCWlmIChwcmVmaXhjbXAocmVmLT5uYW1lLCAicmVmcy90YWdzIikpCiAJCQljb250aW51ZTsKIAotCQlyZWZfbmFtZSA9IHhzdHJkdXAocmVmLT5uYW1lKTsKLQkJcmVmX25hbWVfbGVuID0gc3RybGVuKHJlZl9uYW1lKTsKLQkJcmVmX3NoYTEgPSByZWYtPm9sZF9zaGExOwotCi0JCWlmICghc3RyY21wKHJlZl9uYW1lICsgcmVmX25hbWVfbGVuIC0gMywgIl57fSIpKSB7Ci0JCQlyZWZfbmFtZVtyZWZfbmFtZV9sZW4gLSAzXSA9IDA7Ci0JCQl0YWdfcmVmID0gdHJhbnNwb3J0X2dldF9yZW1vdGVfcmVmcyh0cmFuc3BvcnQpOwotCQkJd2hpbGUgKHRhZ19yZWYpIHsKLQkJCQlpZiAoIXN0cmNtcCh0YWdfcmVmLT5uYW1lLCByZWZfbmFtZSkpIHsKLQkJCQkJcmVmX3NoYTEgPSB0YWdfcmVmLT5vbGRfc2hhMTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCXRhZ19yZWYgPSB0YWdfcmVmLT5uZXh0OwotCQkJfQorCQkvKgorCQkgKiBUaGUgcGVlbGVkIHJlZiBhbHdheXMgZm9sbG93cyB0aGUgbWF0Y2hpbmcgYmFzZQorCQkgKiByZWYsIHNvIGlmIHdlIHNlZSBhIHBlZWxlZCByZWYgdGhhdCB3ZSBkb24ndCB3YW50CisJCSAqIHRvIGZldGNoIHRoZW4gd2UgY2FuIG1hcmsgdGhlIHJlZiBlbnRyeSBpbiB0aGUgbGlzdAorCQkgKiBhcyBvbmUgdG8gaWdub3JlIGJ5IHNldHRpbmcgdXRpbCB0byBOVUxMLgorCQkgKi8KKwkJaWYgKCFzdWZmaXhjbXAocmVmLT5uYW1lLCAiXnt9IikpIHsKKwkJCWlmIChpdGVtICYmICFoYXNfc2hhMV9maWxlKHJlZi0+b2xkX3NoYTEpICYmCisJCQkgICAgIXdpbGxfZmV0Y2goaGVhZCwgcmVmLT5vbGRfc2hhMSkgJiYKKwkJCSAgICAhaGFzX3NoYTFfZmlsZShpdGVtLT51dGlsKSAmJgorCQkJICAgICF3aWxsX2ZldGNoKGhlYWQsIGl0ZW0tPnV0aWwpKQorCQkJCWl0ZW0tPnV0aWwgPSBOVUxMOworCQkJaXRlbSA9IE5VTEw7CisJCQljb250aW51ZTsKIAkJfQogCi0JCWlmICghc3RyaW5nX2xpc3RfaGFzX3N0cmluZygmZXhpc3RpbmdfcmVmcywgcmVmX25hbWUpICYmCi0JCSAgICAhc3RyaW5nX2xpc3RfaGFzX3N0cmluZygmbmV3X3JlZnMsIHJlZl9uYW1lKSAmJgotCQkgICAgKGhhc19zaGExX2ZpbGUocmVmLT5vbGRfc2hhMSkgfHwKLQkJICAgICB3aWxsX2ZldGNoKGhlYWQsIHJlZi0+b2xkX3NoYTEpKSkgewotCQkJc3RyaW5nX2xpc3RfaW5zZXJ0KHJlZl9uYW1lLCAmbmV3X3JlZnMpOworCQkvKgorCQkgKiBJZiBpdGVtIGlzIG5vbi1OVUxMIGhlcmUsIHRoZW4gd2UgcHJldmlvdXNseSBzYXcgYQorCQkgKiByZWYgbm90IGZvbGxvd2VkIGJ5IGEgcGVlbGVkIHJlZmVyZW5jZSwgc28gd2UgbmVlZAorCQkgKiB0byBjaGVjayBpZiBpdCBpcyBhIGxpZ2h0d2VpZ2h0IHRhZyB0aGF0IHdlIHdhbnQgdG8KKwkJICogZmV0Y2guCisJCSAqLworCQlpZiAoaXRlbSAmJiAhaGFzX3NoYTFfZmlsZShpdGVtLT51dGlsKSAmJgorCQkgICAgIXdpbGxfZmV0Y2goaGVhZCwgaXRlbS0+dXRpbCkpCisJCQlpdGVtLT51dGlsID0gTlVMTDsKIAotCQkJcm0gPSBhbGxvY19yZWYocmVmX25hbWUpOwotCQkJcm0tPnBlZXJfcmVmID0gYWxsb2NfcmVmKHJlZl9uYW1lKTsKLQkJCWhhc2hjcHkocm0tPm9sZF9zaGExLCByZWZfc2hhMSk7CisJCWl0ZW0gPSBOVUxMOwogCi0JCQkqKnRhaWwgPSBybTsKLQkJCSp0YWlsID0gJnJtLT5uZXh0OwotCQl9Ci0JCWZyZWUocmVmX25hbWUpOworCQkvKiBza2lwIGR1cGxpY2F0ZXMgYW5kIHJlZnMgdGhhdCB3ZSBhbHJlYWR5IGhhdmUgKi8KKwkJaWYgKHN0cmluZ19saXN0X2hhc19zdHJpbmcoJnJlbW90ZV9yZWZzLCByZWYtPm5hbWUpIHx8CisJCSAgICBzdHJpbmdfbGlzdF9oYXNfc3RyaW5nKCZleGlzdGluZ19yZWZzLCByZWYtPm5hbWUpKQorCQkJY29udGludWU7CisKKwkJaXRlbSA9IHN0cmluZ19saXN0X2luc2VydChyZWYtPm5hbWUsICZyZW1vdGVfcmVmcyk7CisJCWl0ZW0tPnV0aWwgPSAodm9pZCAqKXJlZi0+b2xkX3NoYTE7CiAJfQogCXN0cmluZ19saXN0X2NsZWFyKCZleGlzdGluZ19yZWZzLCAwKTsKLQlzdHJpbmdfbGlzdF9jbGVhcigmbmV3X3JlZnMsIDApOworCisJLyoKKwkgKiBXZSBtYXkgaGF2ZSBhIGZpbmFsIGxpZ2h0d2VpZ2h0IHRhZyB0aGF0IG5lZWRzIHRvIGJlCisJICogY2hlY2tlZCB0byBzZWUgaWYgaXQgbmVlZHMgZmV0Y2hpbmcuCisJICovCisJaWYgKGl0ZW0gJiYgIWhhc19zaGExX2ZpbGUoaXRlbS0+dXRpbCkgJiYKKwkgICAgIXdpbGxfZmV0Y2goaGVhZCwgaXRlbS0+dXRpbCkpCisJCWl0ZW0tPnV0aWwgPSBOVUxMOworCisJLyoKKwkgKiBGb3IgYWxsIHRoZSB0YWdzIGluIHRoZSByZW1vdGVfcmVmcyBzdHJpbmcgbGlzdCwgY2FsbAorCSAqIGFkZF90b190YWlsIHRvIGFkZCB0aGVtIHRvIHRoZSBsaXN0IG9mIHJlZnMgdG8gYmUgZmV0Y2hlZAorCSAqLworCWZvcl9lYWNoX3N0cmluZ19saXN0KGFkZF90b190YWlsLCAmcmVtb3RlX3JlZnMsICZkYXRhKTsKKworCXN0cmluZ19saXN0X2NsZWFyKCZyZW1vdGVfcmVmcywgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNoZWNrX25vdF9jdXJyZW50X2JyYW5jaChzdHJ1Y3QgcmVmICpyZWZfbWFwKQpAQCAtNTQ5LDEyICs2NTAsMjggQEAKIAkJCSAgICAib2Ygbm9uLWJhcmUgcmVwb3NpdG9yeSIsIGN1cnJlbnRfYnJhbmNoLT5yZWZuYW1lKTsKIH0KIAorc3RhdGljIGludCB0cnVuY2F0ZV9mZXRjaF9oZWFkKHZvaWQpCit7CisJY2hhciAqZmlsZW5hbWUgPSBnaXRfcGF0aCgiRkVUQ0hfSEVBRCIpOworCUZJTEUgKmZwID0gZm9wZW4oZmlsZW5hbWUsICJ3Iik7CisKKwlpZiAoIWZwKQorCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBvcGVuICVzOiAlc1xuIiwgZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJZmNsb3NlKGZwKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBkb19mZXRjaChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCiAJCSAgICBzdHJ1Y3QgcmVmc3BlYyAqcmVmcywgaW50IHJlZl9jb3VudCkKIHsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZXhpc3RpbmdfcmVmcyA9IHsgTlVMTCwgMCwgMCwgMCB9OworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpwZWVyX2l0ZW0gPSBOVUxMOwogCXN0cnVjdCByZWYgKnJlZl9tYXA7CiAJc3RydWN0IHJlZiAqcm07CiAJaW50IGF1dG90YWdzID0gKHRyYW5zcG9ydC0+cmVtb3RlLT5mZXRjaF90YWdzID09IDEpOworCisJZm9yX2VhY2hfcmVmKGFkZF9leGlzdGluZywgJmV4aXN0aW5nX3JlZnMpOworCiAJaWYgKHRyYW5zcG9ydC0+cmVtb3RlLT5mZXRjaF90YWdzID09IDIgJiYgdGFncyAhPSBUQUdTX1VOU0VUKQogCQl0YWdzID0gVEFHU19TRVQ7CiAJaWYgKHRyYW5zcG9ydC0+cmVtb3RlLT5mZXRjaF90YWdzID09IC0xKQpAQCAtNTY0LDEyICs2ODEsMTAgQEAKIAkJZGllKCJEb24ndCBrbm93IGhvdyB0byBmZXRjaCBmcm9tICVzIiwgdHJhbnNwb3J0LT51cmwpOwogCiAJLyogaWYgbm90IGFwcGVuZGluZywgdHJ1bmNhdGUgRkVUQ0hfSEVBRCAqLwotCWlmICghYXBwZW5kKSB7Ci0JCWNoYXIgKmZpbGVuYW1lID0gZ2l0X3BhdGgoIkZFVENIX0hFQUQiKTsKLQkJRklMRSAqZnAgPSBmb3BlbihmaWxlbmFtZSwgInciKTsKLQkJaWYgKCFmcCkKLQkJCXJldHVybiBlcnJvcigiY2Fubm90IG9wZW4gJXM6ICVzXG4iLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKLQkJZmNsb3NlKGZwKTsKKwlpZiAoIWFwcGVuZCAmJiAhZHJ5X3J1bikgeworCQlpbnQgZXJyY29kZSA9IHRydW5jYXRlX2ZldGNoX2hlYWQoKTsKKwkJaWYgKGVycmNvZGUpCisJCQlyZXR1cm4gZXJyY29kZTsKIAl9CiAKIAlyZWZfbWFwID0gZ2V0X3JlZl9tYXAodHJhbnNwb3J0LCByZWZzLCByZWZfY291bnQsIHRhZ3MsICZhdXRvdGFncyk7CkBAIC01NzcsOCArNjkyLDEzIEBACiAJCWNoZWNrX25vdF9jdXJyZW50X2JyYW5jaChyZWZfbWFwKTsKIAogCWZvciAocm0gPSByZWZfbWFwOyBybTsgcm0gPSBybS0+bmV4dCkgewotCQlpZiAocm0tPnBlZXJfcmVmKQotCQkJcmVhZF9yZWYocm0tPnBlZXJfcmVmLT5uYW1lLCBybS0+cGVlcl9yZWYtPm9sZF9zaGExKTsKKwkJaWYgKHJtLT5wZWVyX3JlZikgeworCQkJcGVlcl9pdGVtID0gc3RyaW5nX2xpc3RfbG9va3VwKHJtLT5wZWVyX3JlZi0+bmFtZSwKKwkJCQkJCSAgICAgICAmZXhpc3RpbmdfcmVmcyk7CisJCQlpZiAocGVlcl9pdGVtKQorCQkJCWhhc2hjcHkocm0tPnBlZXJfcmVmLT5vbGRfc2hhMSwKKwkJCQkJcGVlcl9pdGVtLT51dGlsKTsKKwkJfQogCX0KIAogCWlmICh0YWdzID09IFRBR1NfREVGQVVMVCAmJiBhdXRvdGFncykKQEAgLTU4Nyw2ICs3MDcsOCBAQAogCQlmcmVlX3JlZnMocmVmX21hcCk7CiAJCXJldHVybiAxOwogCX0KKwlpZiAocHJ1bmUpCisJCXBydW5lX3JlZnModHJhbnNwb3J0LCByZWZfbWFwKTsKIAlmcmVlX3JlZnMocmVmX21hcCk7CiAKIAkvKiBpZiBuZWl0aGVyIC0tbm8tdGFncyBub3IgLS10YWdzIHdhcyBzcGVjaWZpZWQsIGRvIGF1dG9tYXRlZCB0YWcKQEAgLTYxNywzMyArNzM5LDExMyBAQAogCQkJbmFtZSwgdHJhbnNwb3J0LT51cmwpOwogfQogCi1pbnQgY21kX2ZldGNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQorc3RhdGljIGludCBnZXRfb25lX3JlbW90ZV9mb3JfZmV0Y2goc3RydWN0IHJlbW90ZSAqcmVtb3RlLCB2b2lkICpwcml2KQogewotCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QgPSBwcml2OworCWlmICghcmVtb3RlLT5za2lwX2RlZmF1bHRfdXBkYXRlKQorCQlzdHJpbmdfbGlzdF9hcHBlbmQocmVtb3RlLT5uYW1lLCBsaXN0KTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHJlbW90ZV9ncm91cF9kYXRhIHsKKwljb25zdCBjaGFyICpuYW1lOworCXN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdDsKK307CisKK3N0YXRpYyBpbnQgZ2V0X3JlbW90ZV9ncm91cChjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpwcml2KQoreworCXN0cnVjdCByZW1vdGVfZ3JvdXBfZGF0YSAqZyA9IHByaXY7CisKKwlpZiAoIXByZWZpeGNtcChrZXksICJyZW1vdGVzLiIpICYmCisJCQkhc3RyY21wKGtleSArIDgsIGctPm5hbWUpKSB7CisJCS8qIHNwbGl0IGxpc3QgYnkgd2hpdGUgc3BhY2UgKi8KKwkJaW50IHNwYWNlID0gc3RyY3Nwbih2YWx1ZSwgIiBcdFxuIik7CisJCXdoaWxlICgqdmFsdWUpIHsKKwkJCWlmIChzcGFjZSA+IDEpIHsKKwkJCQlzdHJpbmdfbGlzdF9hcHBlbmQoeHN0cm5kdXAodmFsdWUsIHNwYWNlKSwKKwkJCQkJCSAgIGctPmxpc3QpOworCQkJfQorCQkJdmFsdWUgKz0gc3BhY2UgKyAodmFsdWVbc3BhY2VdICE9ICdcMCcpOworCQkJc3BhY2UgPSBzdHJjc3BuKHZhbHVlLCAiIFx0XG4iKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZF9yZW1vdGVfb3JfZ3JvdXAoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0KQoreworCWludCBwcmV2X25yID0gbGlzdC0+bnI7CisJc3RydWN0IHJlbW90ZV9ncm91cF9kYXRhIGcgPSB7IG5hbWUsIGxpc3QgfTsKKworCWdpdF9jb25maWcoZ2V0X3JlbW90ZV9ncm91cCwgJmcpOworCWlmIChsaXN0LT5uciA9PSBwcmV2X25yKSB7CisJCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKKwkJaWYgKCFyZW1vdGVfaXNfY29uZmlndXJlZChuYW1lKSkKKwkJCXJldHVybiAwOworCQlyZW1vdGUgPSByZW1vdGVfZ2V0KG5hbWUpOworCQlzdHJpbmdfbGlzdF9hcHBlbmQocmVtb3RlLT5uYW1lLCBsaXN0KTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfbXVsdGlwbGUoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0KQoreworCWludCBpLCByZXN1bHQgPSAwOworCWNvbnN0IGNoYXIgKmFyZ3ZbMTFdID0geyAiZmV0Y2giLCAiLS1hcHBlbmQiIH07CisJaW50IGFyZ2MgPSAyOworCisJaWYgKGRyeV9ydW4pCisJCWFyZ3ZbYXJnYysrXSA9ICItLWRyeS1ydW4iOworCWlmIChwcnVuZSkKKwkJYXJndlthcmdjKytdID0gIi0tcHJ1bmUiOworCWlmICh1cGRhdGVfaGVhZF9vaykKKwkJYXJndlthcmdjKytdID0gIi0tdXBkYXRlLWhlYWQtb2siOworCWlmIChmb3JjZSkKKwkJYXJndlthcmdjKytdID0gIi0tZm9yY2UiOworCWlmIChrZWVwKQorCQlhcmd2W2FyZ2MrK10gPSAiLS1rZWVwIjsKKwlpZiAodmVyYm9zaXR5ID49IDIpCisJCWFyZ3ZbYXJnYysrXSA9ICItdiI7CisJaWYgKHZlcmJvc2l0eSA+PSAxKQorCQlhcmd2W2FyZ2MrK10gPSAiLXYiOworCWVsc2UgaWYgKHZlcmJvc2l0eSA8IDApCisJCWFyZ3ZbYXJnYysrXSA9ICItcSI7CisKKwlpZiAoIWFwcGVuZCAmJiAhZHJ5X3J1bikgeworCQlpbnQgZXJyY29kZSA9IHRydW5jYXRlX2ZldGNoX2hlYWQoKTsKKwkJaWYgKGVycmNvZGUpCisJCQlyZXR1cm4gZXJyY29kZTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbGlzdC0+bnI7IGkrKykgeworCQljb25zdCBjaGFyICpuYW1lID0gbGlzdC0+aXRlbXNbaV0uc3RyaW5nOworCQlhcmd2W2FyZ2NdID0gbmFtZTsKKwkJYXJndlthcmdjICsgMV0gPSBOVUxMOworCQlpZiAodmVyYm9zaXR5ID49IDApCisJCQlwcmludGYoIkZldGNoaW5nICVzXG4iLCBuYW1lKTsKKwkJaWYgKHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3YsIFJVTl9HSVRfQ01EKSkgeworCQkJZXJyb3IoIkNvdWxkIG5vdCBmZXRjaCAlcyIsIG5hbWUpOworCQkJcmVzdWx0ID0gMTsKKwkJfQorCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfb25lKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQorewogCWludCBpOwogCXN0YXRpYyBjb25zdCBjaGFyICoqcmVmcyA9IE5VTEw7CiAJaW50IHJlZl9uciA9IDA7CiAJaW50IGV4aXRfY29kZTsKIAotCS8qIFJlY29yZCB0aGUgY29tbWFuZCBsaW5lIGZvciB0aGUgcmVmbG9nICovCi0Jc3RyYnVmX2FkZHN0cigmZGVmYXVsdF9ybGEsICJmZXRjaCIpOwotCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCi0JCXN0cmJ1Zl9hZGRmKCZkZWZhdWx0X3JsYSwgIiAlcyIsIGFyZ3ZbaV0pOwotCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwKLQkJCSAgICAgYnVpbHRpbl9mZXRjaF9vcHRpb25zLCBidWlsdGluX2ZldGNoX3VzYWdlLCAwKTsKLQotCWlmIChhcmdjID09IDApCi0JCXJlbW90ZSA9IHJlbW90ZV9nZXQoTlVMTCk7Ci0JZWxzZQotCQlyZW1vdGUgPSByZW1vdGVfZ2V0KGFyZ3ZbMF0pOwotCiAJaWYgKCFyZW1vdGUpCiAJCWRpZSgiV2hlcmUgZG8geW91IHdhbnQgdG8gZmV0Y2ggZnJvbSB0b2RheT8iKTsKIAotCXRyYW5zcG9ydCA9IHRyYW5zcG9ydF9nZXQocmVtb3RlLCByZW1vdGUtPnVybFswXSk7CisJdHJhbnNwb3J0ID0gdHJhbnNwb3J0X2dldChyZW1vdGUsIE5VTEwpOwogCWlmICh2ZXJib3NpdHkgPj0gMikKLQkJdHJhbnNwb3J0LT52ZXJib3NlID0gMTsKKwkJdHJhbnNwb3J0LT52ZXJib3NlID0gdmVyYm9zaXR5IDw9IDMgPyB2ZXJib3NpdHkgOiAzOwogCWlmICh2ZXJib3NpdHkgPCAwKQogCQl0cmFuc3BvcnQtPnZlcmJvc2UgPSAtMTsKIAlpZiAodXBsb2FkX3BhY2spCkBAIC02NTMsMTAgKzg1NSwxMCBAQAogCWlmIChkZXB0aCkKIAkJc2V0X29wdGlvbihUUkFOU19PUFRfREVQVEgsIGRlcHRoKTsKIAotCWlmIChhcmdjID4gMSkgeworCWlmIChhcmdjID4gMCkgewogCQlpbnQgaiA9IDA7CiAJCXJlZnMgPSB4Y2FsbG9jKGFyZ2MgKyAxLCBzaXplb2YoY29uc3QgY2hhciAqKSk7Ci0JCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgewogCQkJaWYgKCFzdHJjbXAoYXJndltpXSwgInRhZyIpKSB7CiAJCQkJY2hhciAqcmVmOwogCQkJCWkrKzsKQEAgLTY4MywzICs4ODUsNTcgQEAKIAl0cmFuc3BvcnQgPSBOVUxMOwogCXJldHVybiBleGl0X2NvZGU7CiB9CisKK2ludCBjbWRfZmV0Y2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGk7CisJc3RydWN0IHN0cmluZ19saXN0IGxpc3QgPSB7IE5VTEwsIDAsIDAsIDAgfTsKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CisJaW50IHJlc3VsdCA9IDA7CisKKwkvKiBSZWNvcmQgdGhlIGNvbW1hbmQgbGluZSBmb3IgdGhlIHJlZmxvZyAqLworCXN0cmJ1Zl9hZGRzdHIoJmRlZmF1bHRfcmxhLCAiZmV0Y2giKTsKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQorCQlzdHJidWZfYWRkZigmZGVmYXVsdF9ybGEsICIgJXMiLCBhcmd2W2ldKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwKKwkJCSAgICAgYnVpbHRpbl9mZXRjaF9vcHRpb25zLCBidWlsdGluX2ZldGNoX3VzYWdlLCAwKTsKKworCWlmIChhbGwpIHsKKwkJaWYgKGFyZ2MgPT0gMSkKKwkJCWRpZSgiZmV0Y2ggLS1hbGwgZG9lcyBub3QgdGFrZSBhIHJlcG9zaXRvcnkgYXJndW1lbnQiKTsKKwkJZWxzZSBpZiAoYXJnYyA+IDEpCisJCQlkaWUoImZldGNoIC0tYWxsIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugd2l0aCByZWZzcGVjcyIpOworCQkodm9pZCkgZm9yX2VhY2hfcmVtb3RlKGdldF9vbmVfcmVtb3RlX2Zvcl9mZXRjaCwgJmxpc3QpOworCQlyZXN1bHQgPSBmZXRjaF9tdWx0aXBsZSgmbGlzdCk7CisJfSBlbHNlIGlmIChhcmdjID09IDApIHsKKwkJLyogTm8gYXJndW1lbnRzIC0tIHVzZSBkZWZhdWx0IHJlbW90ZSAqLworCQlyZW1vdGUgPSByZW1vdGVfZ2V0KE5VTEwpOworCQlyZXN1bHQgPSBmZXRjaF9vbmUocmVtb3RlLCBhcmdjLCBhcmd2KTsKKwl9IGVsc2UgaWYgKG11bHRpcGxlKSB7CisJCS8qIEFsbCBhcmd1bWVudHMgYXJlIGFzc3VtZWQgdG8gYmUgcmVtb3RlcyBvciBncm91cHMgKi8KKwkJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKKwkJCWlmICghYWRkX3JlbW90ZV9vcl9ncm91cChhcmd2W2ldLCAmbGlzdCkpCisJCQkJZGllKCJObyBzdWNoIHJlbW90ZSBvciByZW1vdGUgZ3JvdXA6ICVzIiwgYXJndltpXSk7CisJCXJlc3VsdCA9IGZldGNoX211bHRpcGxlKCZsaXN0KTsKKwl9IGVsc2UgeworCQkvKiBTaW5nbGUgcmVtb3RlIG9yIGdyb3VwICovCisJCSh2b2lkKSBhZGRfcmVtb3RlX29yX2dyb3VwKGFyZ3ZbMF0sICZsaXN0KTsKKwkJaWYgKGxpc3QubnIgPiAxKSB7CisJCQkvKiBNb3JlIHRoYW4gb25lIHJlbW90ZSAqLworCQkJaWYgKGFyZ2MgPiAxKQorCQkJCWRpZSgiRmV0Y2hpbmcgYSBncm91cCBhbmQgc3BlY2lmeWluZyByZWZzcGVjcyBkb2VzIG5vdCBtYWtlIHNlbnNlIik7CisJCQlyZXN1bHQgPSBmZXRjaF9tdWx0aXBsZSgmbGlzdCk7CisJCX0gZWxzZSB7CisJCQkvKiBaZXJvIG9yIG9uZSByZW1vdGVzICovCisJCQlyZW1vdGUgPSByZW1vdGVfZ2V0KGFyZ3ZbMF0pOworCQkJcmVzdWx0ID0gZmV0Y2hfb25lKHJlbW90ZSwgYXJnYy0xLCBhcmd2KzEpOworCQl9CisJfQorCisJLyogQWxsIG5hbWVzIHdlcmUgc3RyZHVwKCllZCBvciBzdHJuZHVwKCllZCAqLworCWxpc3Quc3RyZHVwX3N0cmluZ3MgPSAxOworCXN0cmluZ19saXN0X2NsZWFyKCZsaXN0LCAwKTsKKworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluLWZtdC1tZXJnZS1tc2cuYyBiL2J1aWx0aW4tZm10LW1lcmdlLW1zZy5jCmluZGV4IGZhZTE0ODIuLjlkNTI0MDAgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tZm10LW1lcmdlLW1zZy5jCisrKyBiL2J1aWx0aW4tZm10LW1lcmdlLW1zZy5jCkBAIC0zNTEsNyArMzUxLDcgQEAKIAlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKIAkJT1BUX0JPT0xFQU4oMCwgImxvZyIsICAgICAmbWVyZ2Vfc3VtbWFyeSwgInBvcHVsYXRlIGxvZyB3aXRoIHRoZSBzaG9ydGxvZyIpLAogCQlPUFRfQk9PTEVBTigwLCAic3VtbWFyeSIsICZtZXJnZV9zdW1tYXJ5LCAiYWxpYXMgZm9yIC0tbG9nIiksCi0JCU9QVF9TVFJJTkcoJ0YnLCAiZmlsZSIsICAgJmlucGF0aCwgImZpbGUiLCAiZmlsZSB0byByZWFkIGZyb20iKSwKKwkJT1BUX0ZJTEVOQU1FKCdGJywgImZpbGUiLCAmaW5wYXRoLCAiZmlsZSB0byByZWFkIGZyb20iKSwKIAkJT1BUX0VORCgpCiAJfTsKIApAQCAtMzYwLDIwICszNjAsMTkgQEAKIAlpbnQgcmV0OwogCiAJZ2l0X2NvbmZpZyhmbXRfbWVyZ2VfbXNnX2NvbmZpZywgTlVMTCk7Ci0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgZm10X21lcmdlX21zZ191c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBmbXRfbWVyZ2VfbXNnX3VzYWdlLAorCQkJICAgICAwKTsKIAlpZiAoYXJnYyA+IDApCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhmbXRfbWVyZ2VfbXNnX3VzYWdlLCBvcHRpb25zKTsKLQlpbnBhdGggPSBwYXJzZV9vcHRpb25zX2ZpeF9maWxlbmFtZShwcmVmaXgsIGlucGF0aCk7CiAKIAlpZiAoaW5wYXRoICYmIHN0cmNtcChpbnBhdGgsICItIikpIHsKIAkJaW4gPSBmb3BlbihpbnBhdGgsICJyIik7CiAJCWlmICghaW4pCi0JCQlkaWUoImNhbm5vdCBvcGVuICVzIiwgaW5wYXRoKTsKKwkJCWRpZV9lcnJubygiY2Fubm90IG9wZW4gJyVzJyIsIGlucGF0aCk7CiAJfQogCiAJaWYgKHN0cmJ1Zl9yZWFkKCZpbnB1dCwgZmlsZW5vKGluKSwgMCkgPCAwKQotCQlkaWUoImNvdWxkIG5vdCByZWFkIGlucHV0IGZpbGUgJXMiLCBzdHJlcnJvcihlcnJubykpOwotCisJCWRpZV9lcnJubygiY291bGQgbm90IHJlYWQgaW5wdXQgZmlsZSIpOwogCXJldCA9IGZtdF9tZXJnZV9tc2cobWVyZ2Vfc3VtbWFyeSwgJmlucHV0LCAmb3V0cHV0KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1mb3ItZWFjaC1yZWYuYyBiL2J1aWx0aW4tZm9yLWVhY2gtcmVmLmMKaW5kZXggMTkxMWNkYS4uYTVhODNmMSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1mb3ItZWFjaC1yZWYuYworKysgYi9idWlsdGluLWZvci1lYWNoLXJlZi5jCkBAIC01NzYsNyArNTc2LDcgQEAKIAogCQlpZiAoIXByZWZpeGNtcChuYW1lLCAicmVmbmFtZSIpKQogCQkJcmVmbmFtZSA9IHJlZi0+cmVmbmFtZTsKLQkJZWxzZSBpZighcHJlZml4Y21wKG5hbWUsICJ1cHN0cmVhbSIpKSB7CisJCWVsc2UgaWYgKCFwcmVmaXhjbXAobmFtZSwgInVwc3RyZWFtIikpIHsKIAkJCXN0cnVjdCBicmFuY2ggKmJyYW5jaDsKIAkJCS8qIG9ubHkgbG9jYWwgYnJhbmNoZXMgbWF5IGhhdmUgYW4gdXBzdHJlYW0gKi8KIAkJCWlmIChwcmVmaXhjbXAocmVmLT5yZWZuYW1lLCAicmVmcy9oZWFkcy8iKSkKQEAgLTkxMyw3ICs5MTMsNyBAQAogCQlPUFRfRU5EKCksCiAJfTsKIAotCXBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0cywgZm9yX2VhY2hfcmVmX3VzYWdlLCAwKTsKKwlwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0cywgZm9yX2VhY2hfcmVmX3VzYWdlLCAwKTsKIAlpZiAobWF4Y291bnQgPCAwKSB7CiAJCWVycm9yKCJpbnZhbGlkIC0tY291bnQgYXJndW1lbnQ6IGAlZCciLCBtYXhjb3VudCk7CiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhmb3JfZWFjaF9yZWZfdXNhZ2UsIG9wdHMpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1mc2NrLmMgYi9idWlsdGluLWZzY2suYwppbmRleCA2NDM2YmMyLi4wOTI5YzdmIDEwMDY0NAotLS0gYS9idWlsdGluLWZzY2suYworKysgYi9idWlsdGluLWZzY2suYwpAQCAtMTksNyArMTksNyBAQAogc3RhdGljIGludCBzaG93X3RhZ3M7CiBzdGF0aWMgaW50IHNob3dfdW5yZWFjaGFibGU7CiBzdGF0aWMgaW50IGluY2x1ZGVfcmVmbG9ncyA9IDE7Ci1zdGF0aWMgaW50IGNoZWNrX2Z1bGw7CitzdGF0aWMgaW50IGNoZWNrX2Z1bGwgPSAxOwogc3RhdGljIGludCBjaGVja19zdHJpY3Q7CiBzdGF0aWMgaW50IGtlZXBfY2FjaGVfb2JqZWN0czsKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGhlYWRfc2hhMVsyMF07CkBAIC00Nyw2ICs0Nyw3IEBACiAJZnB1dHMoIlxuIiwgc3RkZXJyKTsKIH0KIAorX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSkKIHN0YXRpYyBpbnQgb2JqZXJyb3Ioc3RydWN0IG9iamVjdCAqb2JqLCBjb25zdCBjaGFyICplcnIsIC4uLikKIHsKIAl2YV9saXN0IHBhcmFtczsKQEAgLTU3LDYgKzU4LDcgQEAKIAlyZXR1cm4gLTE7CiB9CiAKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpCiBzdGF0aWMgaW50IGZzY2tfZXJyb3JfZnVuYyhzdHJ1Y3Qgb2JqZWN0ICpvYmosIGludCB0eXBlLCBjb25zdCBjaGFyICplcnIsIC4uLikKIHsKIAl2YV9saXN0IHBhcmFtczsKQEAgLTEwNCw3ICsxMDYsNyBAQAogCiBzdGF0aWMgdm9pZCBtYXJrX29iamVjdF9yZWFjaGFibGUoc3RydWN0IG9iamVjdCAqb2JqKQogewotCW1hcmtfb2JqZWN0KG9iaiwgT0JKX0FOWSwgMCk7CisJbWFya19vYmplY3Qob2JqLCBPQkpfQU5ZLCBOVUxMKTsKIH0KIAogc3RhdGljIGludCB0cmF2ZXJzZV9vbmVfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iaiwgc3RydWN0IG9iamVjdCAqcGFyZW50KQpAQCAtMjE3LDcgKzIxOSw3IEBACiAJCQkJcmV0dXJuOwogCQkJfQogCQkJaWYgKCEoZiA9IGZvcGVuKGZpbGVuYW1lLCAidyIpKSkKLQkJCQlkaWUoIkNvdWxkIG5vdCBvcGVuICVzIiwgZmlsZW5hbWUpOworCQkJCWRpZV9lcnJubygiQ291bGQgbm90IG9wZW4gJyVzJyIsIGZpbGVuYW1lKTsKIAkJCWlmIChvYmotPnR5cGUgPT0gT0JKX0JMT0IpIHsKIAkJCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CiAJCQkJdW5zaWduZWQgbG9uZyBzaXplOwpAQCAtMjI1LDE1ICsyMjcsMTUgQEAKIAkJCQkJCSZ0eXBlLCAmc2l6ZSk7CiAJCQkJaWYgKGJ1ZikgewogCQkJCQlpZiAoZndyaXRlKGJ1Ziwgc2l6ZSwgMSwgZikgIT0gMSkKLQkJCQkJCWRpZSgiQ291bGQgbm90IHdyaXRlICVzOiAlcyIsCi0JCQkJCQkgICAgZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCQkJCQlkaWVfZXJybm8oIkNvdWxkIG5vdCB3cml0ZSAnJXMnIiwKKwkJCQkJCQkgIGZpbGVuYW1lKTsKIAkJCQkJZnJlZShidWYpOwogCQkJCX0KIAkJCX0gZWxzZQogCQkJCWZwcmludGYoZiwgIiVzXG4iLCBzaGExX3RvX2hleChvYmotPnNoYTEpKTsKIAkJCWlmIChmY2xvc2UoZikpCi0JCQkJZGllKCJDb3VsZCBub3QgZmluaXNoICVzOiAlcyIsCi0JCQkJICAgIGZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOworCQkJCWRpZV9lcnJubygiQ291bGQgbm90IGZpbmlzaCAnJXMnIiwKKwkJCQkJICBmaWxlbmFtZSk7CiAJCX0KIAkJcmV0dXJuOwogCX0KQEAgLTI5Miw3ICsyOTQsNyBAQAogCQlmcHJpbnRmKHN0ZGVyciwgIkNoZWNraW5nICVzICVzXG4iLAogCQkJdHlwZW5hbWUob2JqLT50eXBlKSwgc2hhMV90b19oZXgob2JqLT5zaGExKSk7CiAKLQlpZiAoZnNja193YWxrKG9iaiwgbWFya191c2VkLCAwKSkKKwlpZiAoZnNja193YWxrKG9iaiwgbWFya191c2VkLCBOVUxMKSkKIAkJb2JqZXJyb3Iob2JqLCAiYnJva2VuIGxpbmtzIik7CiAJaWYgKGZzY2tfb2JqZWN0KG9iaiwgY2hlY2tfc3RyaWN0LCBmc2NrX2Vycm9yX2Z1bmMpKQogCQlyZXR1cm4gLTE7CkBAIC01NzYsNyArNTc4LDcgQEAKIAlPUFRfQk9PTEVBTigwLCAicm9vdCIsICZzaG93X3Jvb3QsICJyZXBvcnQgcm9vdCBub2RlcyIpLAogCU9QVF9CT09MRUFOKDAsICJjYWNoZSIsICZrZWVwX2NhY2hlX29iamVjdHMsICJtYWtlIGluZGV4IG9iamVjdHMgaGVhZCBub2RlcyIpLAogCU9QVF9CT09MRUFOKDAsICJyZWZsb2dzIiwgJmluY2x1ZGVfcmVmbG9ncywgIm1ha2UgcmVmbG9ncyBoZWFkIG5vZGVzIChkZWZhdWx0KSIpLAotCU9QVF9CT09MRUFOKDAsICJmdWxsIiwgJmNoZWNrX2Z1bGwsICJhbHNvIGNvbnNpZGVyIGFsdGVybmF0ZSBvYmplY3RzIiksCisJT1BUX0JPT0xFQU4oMCwgImZ1bGwiLCAmY2hlY2tfZnVsbCwgImFsc28gY29uc2lkZXIgcGFja3MgYW5kIGFsdGVybmF0ZSBvYmplY3RzIiksCiAJT1BUX0JPT0xFQU4oMCwgInN0cmljdCIsICZjaGVja19zdHJpY3QsICJlbmFibGUgbW9yZSBzdHJpY3QgY2hlY2tpbmciKSwKIAlPUFRfQk9PTEVBTigwLCAibG9zdC1mb3VuZCIsICZ3cml0ZV9sb3N0X2FuZF9mb3VuZCwKIAkJCQkid3JpdGUgZGFuZ2xpbmcgb2JqZWN0cyBpbiAuZ2l0L2xvc3QtZm91bmQiKSwKQEAgLTU4OSw4ICs1OTEsOSBAQAogCXN0cnVjdCBhbHRlcm5hdGVfb2JqZWN0X2RhdGFiYXNlICphbHQ7CiAKIAllcnJvcnNfZm91bmQgPSAwOworCXJlYWRfcmVwbGFjZV9yZWZzID0gMDsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGZzY2tfb3B0cywgZnNja191c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBmc2NrX29wdHMsIGZzY2tfdXNhZ2UsIDApOwogCWlmICh3cml0ZV9sb3N0X2FuZF9mb3VuZCkgewogCQljaGVja19mdWxsID0gMTsKIAkJaW5jbHVkZV9yZWZsb2dzID0gMDsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tZ2MuYyBiL2J1aWx0aW4tZ2MuYwppbmRleCBmYzU1NmVkLi5jMzA0NjM4IDEwMDY0NAotLS0gYS9idWlsdGluLWdjLmMKKysrIGIvYnVpbHRpbi1nYy5jCkBAIC0xODAsMTIgKzE4MCwxMiBAQAogCWNoYXIgYnVmWzgwXTsKIAogCXN0cnVjdCBvcHRpb24gYnVpbHRpbl9nY19vcHRpb25zW10gPSB7CisJCU9QVF9fUVVJRVQoJnF1aWV0KSwKIAkJeyBPUFRJT05fU1RSSU5HLCAwLCAicHJ1bmUiLCAmcHJ1bmVfZXhwaXJlLCAiZGF0ZSIsCiAJCQkicHJ1bmUgdW5yZWZlcmVuY2VkIG9iamVjdHMiLAogCQkJUEFSU0VfT1BUX09QVEFSRywgTlVMTCwgKGludHB0cl90KXBydW5lX2V4cGlyZSB9LAogCQlPUFRfQk9PTEVBTigwLCAiYWdncmVzc2l2ZSIsICZhZ2dyZXNzaXZlLCAiYmUgbW9yZSB0aG9yb3VnaCAoaW5jcmVhc2VkIHJ1bnRpbWUpIiksCiAJCU9QVF9CT09MRUFOKDAsICJhdXRvIiwgJmF1dG9fZ2MsICJlbmFibGUgYXV0by1nYyBtb2RlIiksCi0JCU9QVF9CT09MRUFOKCdxJywgInF1aWV0IiwgJnF1aWV0LCAic3VwcHJlc3MgcHJvZ3Jlc3MgcmVwb3J0cyIpLAogCQlPUFRfRU5EKCkKIAl9OwogCkBAIC0xOTQsNyArMTk0LDggQEAKIAlpZiAocGFja19yZWZzIDwgMCkKIAkJcGFja19yZWZzID0gIWlzX2JhcmVfcmVwb3NpdG9yeSgpOwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgYnVpbHRpbl9nY19vcHRpb25zLCBidWlsdGluX2djX3VzYWdlLCAwKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fZ2Nfb3B0aW9ucywKKwkJCSAgICAgYnVpbHRpbl9nY191c2FnZSwgMCk7CiAJaWYgKGFyZ2MgPiAwKQogCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9nY191c2FnZSwgYnVpbHRpbl9nY19vcHRpb25zKTsKIApAQCAtMjE1LDEwICsyMTYsMTMgQEAKIAkJICovCiAJCWlmICghbmVlZF90b19nYygpKQogCQkJcmV0dXJuIDA7Ci0JCWZwcmludGYoc3RkZXJyLCAiQXV0byBwYWNraW5nIHlvdXIgcmVwb3NpdG9yeSBmb3Igb3B0aW11bSAiCi0JCQkicGVyZm9ybWFuY2UuIFlvdSBtYXkgYWxzb1xuIgotCQkJInJ1biBcImdpdCBnY1wiIG1hbnVhbGx5LiBTZWUgIgotCQkJIlwiZ2l0IGhlbHAgZ2NcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIpOworCQlmcHJpbnRmKHN0ZGVyciwKKwkJCSJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuJXNcbiIsCisJCQlxdWlldAorCQkJPyAiIgorCQkJOiAoIiBZb3UgbWF5IGFsc29cbiIKKwkJCSAgICJydW4gXCJnaXQgZ2NcIiBtYW51YWxseS4gU2VlICIKKwkJCSAgICJcImdpdCBoZWxwIGdjXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIikpOwogCX0gZWxzZQogCQlhcHBlbmRfb3B0aW9uKGFyZ3ZfcmVwYWNrLAogCQkJICAgICAgcHJ1bmVfZXhwaXJlICYmICFzdHJjbXAocHJ1bmVfZXhwaXJlLCAibm93IikKZGlmZiAtLWdpdCBhL2J1aWx0aW4tZ3JlcC5jIGIvYnVpbHRpbi1ncmVwLmMKaW5kZXggZjg4YTkxMi4uMzcxZGIwYSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1ncmVwLmMKKysrIGIvYnVpbHRpbi1ncmVwLmMKQEAgLTEwLDI4ICsxMCwyOTUgQEAKICNpbmNsdWRlICJ0YWcuaCIKICNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKICNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInVzZXJkaWZmLmgiCiAjaW5jbHVkZSAiZ3JlcC5oIgorI2luY2x1ZGUgInF1b3RlLmgiCiAKLSNpZm5kZWYgTk9fRVhURVJOQUxfR1JFUAotI2lmZGVmIF9fdW5peF9fCi0jZGVmaW5lIE5PX0VYVEVSTkFMX0dSRVAgMAotI2Vsc2UKLSNkZWZpbmUgTk9fRVhURVJOQUxfR1JFUCAxCi0jZW5kaWYKKyNpZm5kZWYgTk9fUFRIUkVBRFMKKyNpbmNsdWRlICJ0aHJlYWQtdXRpbHMuaCIKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CiAjZW5kaWYKIAotc3RhdGljIGludCBidWlsdGluX2dyZXA7CitzdGF0aWMgY2hhciBjb25zdCAqIGNvbnN0IGdyZXBfdXNhZ2VbXSA9IHsKKwkiZ2l0IGdyZXAgW29wdGlvbnNdIFstZV0gPHBhdHRlcm4+IFs8cmV2Pi4uLl0gW1stLV0gcGF0aC4uLl0iLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQgdXNlX3RocmVhZHMgPSAxOworCisjaWZuZGVmIE5PX1BUSFJFQURTCisjZGVmaW5lIFRIUkVBRFMgOAorc3RhdGljIHB0aHJlYWRfdCB0aHJlYWRzW1RIUkVBRFNdOworCitzdGF0aWMgdm9pZCAqbG9hZF9zaGExKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHVuc2lnbmVkIGxvbmcgKnNpemUsCisJCSAgICAgICBjb25zdCBjaGFyICpuYW1lKTsKK3N0YXRpYyB2b2lkICpsb2FkX2ZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUsIHNpemVfdCAqc3opOworCitlbnVtIHdvcmtfdHlwZSB7V09SS19TSEExLCBXT1JLX0ZJTEV9OworCisvKiBXZSB1c2Ugb25lIHByb2R1Y2VyIHRocmVhZCBhbmQgVEhSRUFEUyBjb25zdW1lcgorICogdGhyZWFkcy4gVGhlIHByb2R1Y2VyIGFkZHMgc3RydWN0IHdvcmtfaXRlbXMgdG8gJ3RvZG8nIGFuZCB0aGUKKyAqIGNvbnN1bWVycyBwaWNrIHdvcmsgaXRlbXMgZnJvbSB0aGUgc2FtZSBhcnJheS4KKyAqLworc3RydWN0IHdvcmtfaXRlbQoreworCWVudW0gd29ya190eXBlIHR5cGU7CisJY2hhciAqbmFtZTsKKworCS8qIGlmIHR5cGUgPT0gV09SS19TSEExLCB0aGVuICdpZGVudGlmaWVyJyBpcyBhIFNIQTEsCisJICogb3RoZXJ3aXNlIHR5cGUgPT0gV09SS19GSUxFLCBhbmQgJ2lkZW50aWZpZXInIGlzIGEgTlVMCisJICogdGVybWluYXRlZCBmaWxlbmFtZS4KKwkgKi8KKwl2b2lkICppZGVudGlmaWVyOworCWNoYXIgZG9uZTsKKwlzdHJ1Y3Qgc3RyYnVmIG91dDsKK307CisKKy8qIEluIHRoZSByYW5nZSBbdG9kb19kb25lLCB0b2RvX3N0YXJ0KSBpbiAndG9kbycgd2UgaGF2ZSB3b3JrX2l0ZW1zCisgKiB0aGF0IGhhdmUgYmVlbiBvciBhcmUgcHJvY2Vzc2VkIGJ5IGEgY29uc3VtZXIgdGhyZWFkLiBXZSBoYXZlbid0CisgKiB3cml0dGVuIHRoZSByZXN1bHQgZm9yIHRoZXNlIHRvIHN0ZG91dCB5ZXQuCisgKgorICogVGhlIHdvcmtfaXRlbXMgaW4gW3RvZG9fc3RhcnQsIHRvZG9fZW5kKSBhcmUgd2FpdGluZyB0byBiZSBwaWNrZWQKKyAqIHVwIGJ5IGEgY29uc3VtZXIgdGhyZWFkLgorICoKKyAqIFRoZSByYW5nZXMgYXJlIG1vZHVsbyBUT0RPX1NJWkUuCisgKi8KKyNkZWZpbmUgVE9ET19TSVpFIDEyOAorc3RhdGljIHN0cnVjdCB3b3JrX2l0ZW0gdG9kb1tUT0RPX1NJWkVdOworc3RhdGljIGludCB0b2RvX3N0YXJ0Oworc3RhdGljIGludCB0b2RvX2VuZDsKK3N0YXRpYyBpbnQgdG9kb19kb25lOworCisvKiBIYXMgYWxsIHdvcmsgaXRlbXMgYmVlbiBhZGRlZD8gKi8KK3N0YXRpYyBpbnQgYWxsX3dvcmtfYWRkZWQ7CisKKy8qIFRoaXMgbG9jayBwcm90ZWN0cyBhbGwgdGhlIHZhcmlhYmxlcyBhYm92ZS4gKi8KK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgZ3JlcF9tdXRleDsKKworLyogVXNlZCB0byBzZXJpYWxpemUgY2FsbHMgdG8gcmVhZF9zaGExX2ZpbGUuICovCitzdGF0aWMgcHRocmVhZF9tdXRleF90IHJlYWRfc2hhMV9tdXRleDsKKworI2RlZmluZSBncmVwX2xvY2soKSBwdGhyZWFkX211dGV4X2xvY2soJmdyZXBfbXV0ZXgpCisjZGVmaW5lIGdyZXBfdW5sb2NrKCkgcHRocmVhZF9tdXRleF91bmxvY2soJmdyZXBfbXV0ZXgpCisjZGVmaW5lIHJlYWRfc2hhMV9sb2NrKCkgcHRocmVhZF9tdXRleF9sb2NrKCZyZWFkX3NoYTFfbXV0ZXgpCisjZGVmaW5lIHJlYWRfc2hhMV91bmxvY2soKSBwdGhyZWFkX211dGV4X3VubG9jaygmcmVhZF9zaGExX211dGV4KQorCisvKiBTaWduYWxsZWQgd2hlbiBhIG5ldyB3b3JrX2l0ZW0gaXMgYWRkZWQgdG8gdG9kby4gKi8KK3N0YXRpYyBwdGhyZWFkX2NvbmRfdCBjb25kX2FkZDsKKworLyogU2lnbmFsbGVkIHdoZW4gdGhlIHJlc3VsdCBmcm9tIG9uZSB3b3JrX2l0ZW0gaXMgd3JpdHRlbiB0bworICogc3Rkb3V0LgorICovCitzdGF0aWMgcHRocmVhZF9jb25kX3QgY29uZF93cml0ZTsKKworLyogU2lnbmFsbGVkIHdoZW4gd2UgYXJlIGZpbmlzaGVkIHdpdGggZXZlcnl0aGluZy4gKi8KK3N0YXRpYyBwdGhyZWFkX2NvbmRfdCBjb25kX3Jlc3VsdDsKKworc3RhdGljIHZvaWQgYWRkX3dvcmsoZW51bSB3b3JrX3R5cGUgdHlwZSwgY2hhciAqbmFtZSwgdm9pZCAqaWQpCit7CisJZ3JlcF9sb2NrKCk7CisKKwl3aGlsZSAoKHRvZG9fZW5kKzEpICUgQVJSQVlfU0laRSh0b2RvKSA9PSB0b2RvX2RvbmUpIHsKKwkJcHRocmVhZF9jb25kX3dhaXQoJmNvbmRfd3JpdGUsICZncmVwX211dGV4KTsKKwl9CisKKwl0b2RvW3RvZG9fZW5kXS50eXBlID0gdHlwZTsKKwl0b2RvW3RvZG9fZW5kXS5uYW1lID0gbmFtZTsKKwl0b2RvW3RvZG9fZW5kXS5pZGVudGlmaWVyID0gaWQ7CisJdG9kb1t0b2RvX2VuZF0uZG9uZSA9IDA7CisJc3RyYnVmX3Jlc2V0KCZ0b2RvW3RvZG9fZW5kXS5vdXQpOworCXRvZG9fZW5kID0gKHRvZG9fZW5kICsgMSkgJSBBUlJBWV9TSVpFKHRvZG8pOworCisJcHRocmVhZF9jb25kX3NpZ25hbCgmY29uZF9hZGQpOworCWdyZXBfdW5sb2NrKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgd29ya19pdGVtICpnZXRfd29yayh2b2lkKQoreworCXN0cnVjdCB3b3JrX2l0ZW0gKnJldDsKKworCWdyZXBfbG9jaygpOworCXdoaWxlICh0b2RvX3N0YXJ0ID09IHRvZG9fZW5kICYmICFhbGxfd29ya19hZGRlZCkgeworCQlwdGhyZWFkX2NvbmRfd2FpdCgmY29uZF9hZGQsICZncmVwX211dGV4KTsKKwl9CisKKwlpZiAodG9kb19zdGFydCA9PSB0b2RvX2VuZCAmJiBhbGxfd29ya19hZGRlZCkgeworCQlyZXQgPSBOVUxMOworCX0gZWxzZSB7CisJCXJldCA9ICZ0b2RvW3RvZG9fc3RhcnRdOworCQl0b2RvX3N0YXJ0ID0gKHRvZG9fc3RhcnQgKyAxKSAlIEFSUkFZX1NJWkUodG9kbyk7CisJfQorCWdyZXBfdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZ3JlcF9zaGExX2FzeW5jKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjaGFyICpuYW1lLAorCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJdW5zaWduZWQgY2hhciAqczsKKwlzID0geG1hbGxvYygyMCk7CisJbWVtY3B5KHMsIHNoYTEsIDIwKTsKKwlhZGRfd29yayhXT1JLX1NIQTEsIG5hbWUsIHMpOworfQorCitzdGF0aWMgdm9pZCBncmVwX2ZpbGVfYXN5bmMoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNoYXIgKm5hbWUsCisJCQkgICAgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJYWRkX3dvcmsoV09SS19GSUxFLCBuYW1lLCB4c3RyZHVwKGZpbGVuYW1lKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdvcmtfZG9uZShzdHJ1Y3Qgd29ya19pdGVtICp3KQoreworCWludCBvbGRfZG9uZTsKKworCWdyZXBfbG9jaygpOworCXctPmRvbmUgPSAxOworCW9sZF9kb25lID0gdG9kb19kb25lOworCWZvcig7IHRvZG9bdG9kb19kb25lXS5kb25lICYmIHRvZG9fZG9uZSAhPSB0b2RvX3N0YXJ0OworCSAgICB0b2RvX2RvbmUgPSAodG9kb19kb25lKzEpICUgQVJSQVlfU0laRSh0b2RvKSkgeworCQl3ID0gJnRvZG9bdG9kb19kb25lXTsKKwkJd3JpdGVfb3JfZGllKDEsIHctPm91dC5idWYsIHctPm91dC5sZW4pOworCQlmcmVlKHctPm5hbWUpOworCQlmcmVlKHctPmlkZW50aWZpZXIpOworCX0KKworCWlmIChvbGRfZG9uZSAhPSB0b2RvX2RvbmUpCisJCXB0aHJlYWRfY29uZF9zaWduYWwoJmNvbmRfd3JpdGUpOworCisJaWYgKGFsbF93b3JrX2FkZGVkICYmIHRvZG9fZG9uZSA9PSB0b2RvX2VuZCkKKwkJcHRocmVhZF9jb25kX3NpZ25hbCgmY29uZF9yZXN1bHQpOworCisJZ3JlcF91bmxvY2soKTsKK30KKworc3RhdGljIHZvaWQgKnJ1bih2b2lkICphcmcpCit7CisJaW50IGhpdCA9IDA7CisJc3RydWN0IGdyZXBfb3B0ICpvcHQgPSBhcmc7CisKKwl3aGlsZSAoMSkgeworCQlzdHJ1Y3Qgd29ya19pdGVtICp3ID0gZ2V0X3dvcmsoKTsKKwkJaWYgKCF3KQorCQkJYnJlYWs7CisKKwkJb3B0LT5vdXRwdXRfcHJpdiA9IHc7CisJCWlmICh3LT50eXBlID09IFdPUktfU0hBMSkgeworCQkJdW5zaWduZWQgbG9uZyBzejsKKwkJCXZvaWQqIGRhdGEgPSBsb2FkX3NoYTEody0+aWRlbnRpZmllciwgJnN6LCB3LT5uYW1lKTsKKworCQkJaWYgKGRhdGEpIHsKKwkJCQloaXQgfD0gZ3JlcF9idWZmZXIob3B0LCB3LT5uYW1lLCBkYXRhLCBzeik7CisJCQkJZnJlZShkYXRhKTsKKwkJCX0KKwkJfSBlbHNlIGlmICh3LT50eXBlID09IFdPUktfRklMRSkgeworCQkJc2l6ZV90IHN6OworCQkJdm9pZCogZGF0YSA9IGxvYWRfZmlsZSh3LT5pZGVudGlmaWVyLCAmc3opOworCQkJaWYgKGRhdGEpIHsKKwkJCQloaXQgfD0gZ3JlcF9idWZmZXIob3B0LCB3LT5uYW1lLCBkYXRhLCBzeik7CisJCQkJZnJlZShkYXRhKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWFzc2VydCgwKTsKKwkJfQorCisJCXdvcmtfZG9uZSh3KTsKKwl9CisJZnJlZV9ncmVwX3BhdHRlcm5zKGFyZyk7CisJZnJlZShhcmcpOworCisJcmV0dXJuICh2b2lkKikgKGludHB0cl90KSBoaXQ7Cit9CisKK3N0YXRpYyB2b2lkIHN0cmJ1Zl9vdXQoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHdvcmtfaXRlbSAqdyA9IG9wdC0+b3V0cHV0X3ByaXY7CisJc3RyYnVmX2FkZCgmdy0+b3V0LCBidWYsIHNpemUpOworfQorCitzdGF0aWMgdm9pZCBzdGFydF90aHJlYWRzKHN0cnVjdCBncmVwX29wdCAqb3B0KQoreworCWludCBpOworCisJcHRocmVhZF9tdXRleF9pbml0KCZncmVwX211dGV4LCBOVUxMKTsKKwlwdGhyZWFkX211dGV4X2luaXQoJnJlYWRfc2hhMV9tdXRleCwgTlVMTCk7CisJcHRocmVhZF9jb25kX2luaXQoJmNvbmRfYWRkLCBOVUxMKTsKKwlwdGhyZWFkX2NvbmRfaW5pdCgmY29uZF93cml0ZSwgTlVMTCk7CisJcHRocmVhZF9jb25kX2luaXQoJmNvbmRfcmVzdWx0LCBOVUxMKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRvZG8pOyBpKyspIHsKKwkJc3RyYnVmX2luaXQoJnRvZG9baV0ub3V0LCAwKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0aHJlYWRzKTsgaSsrKSB7CisJCWludCBlcnI7CisJCXN0cnVjdCBncmVwX29wdCAqbyA9IGdyZXBfb3B0X2R1cChvcHQpOworCQlvLT5vdXRwdXQgPSBzdHJidWZfb3V0OworCQljb21waWxlX2dyZXBfcGF0dGVybnMobyk7CisJCWVyciA9IHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWRzW2ldLCBOVUxMLCBydW4sIG8pOworCisJCWlmIChlcnIpCisJCQlkaWUoImdyZXA6IGZhaWxlZCB0byBjcmVhdGUgdGhyZWFkOiAlcyIsCisJCQkgICAgc3RyZXJyb3IoZXJyKSk7CisJfQorfQorCitzdGF0aWMgaW50IHdhaXRfYWxsKHZvaWQpCit7CisJaW50IGhpdCA9IDA7CisJaW50IGk7CisKKwlncmVwX2xvY2soKTsKKwlhbGxfd29ya19hZGRlZCA9IDE7CisKKwkvKiBXYWl0IHVudGlsIGFsbCB3b3JrIGlzIGRvbmUuICovCisJd2hpbGUgKHRvZG9fZG9uZSAhPSB0b2RvX2VuZCkKKwkJcHRocmVhZF9jb25kX3dhaXQoJmNvbmRfcmVzdWx0LCAmZ3JlcF9tdXRleCk7CisKKwkvKiBXYWtlIHVwIGFsbCB0aGUgY29uc3VtZXIgdGhyZWFkcyBzbyB0aGV5IGNhbiBzZWUgdGhhdCB0aGVyZQorCSAqIGlzIG5vIG1vcmUgd29yayB0byBkby4KKwkgKi8KKwlwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KCZjb25kX2FkZCk7CisJZ3JlcF91bmxvY2soKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRocmVhZHMpOyBpKyspIHsKKwkJdm9pZCAqaDsKKwkJcHRocmVhZF9qb2luKHRocmVhZHNbaV0sICZoKTsKKwkJaGl0IHw9IChpbnQpIChpbnRwdHJfdCkgaDsKKwl9CisKKwlwdGhyZWFkX211dGV4X2Rlc3Ryb3koJmdyZXBfbXV0ZXgpOworCXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmcmVhZF9zaGExX211dGV4KTsKKwlwdGhyZWFkX2NvbmRfZGVzdHJveSgmY29uZF9hZGQpOworCXB0aHJlYWRfY29uZF9kZXN0cm95KCZjb25kX3dyaXRlKTsKKwlwdGhyZWFkX2NvbmRfZGVzdHJveSgmY29uZF9yZXN1bHQpOworCisJcmV0dXJuIGhpdDsKK30KKyNlbHNlIC8qICFOT19QVEhSRUFEUyAqLworI2RlZmluZSByZWFkX3NoYTFfbG9jaygpCisjZGVmaW5lIHJlYWRfc2hhMV91bmxvY2soKQorCitzdGF0aWMgaW50IHdhaXRfYWxsKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKIAogc3RhdGljIGludCBncmVwX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKIHsKIAlzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCA9IGNiOwogCisJc3dpdGNoICh1c2VyZGlmZl9jb25maWcodmFyLCB2YWx1ZSkpIHsKKwljYXNlIDA6IGJyZWFrOworCWNhc2UgLTE6IHJldHVybiAtMTsKKwlkZWZhdWx0OiByZXR1cm4gMDsKKwl9CisKIAlpZiAoIXN0cmNtcCh2YXIsICJjb2xvci5ncmVwIikpIHsKIAkJb3B0LT5jb2xvciA9IGdpdF9jb25maWdfY29sb3Jib29sKHZhciwgdmFsdWUsIC0xKTsKIAkJcmV0dXJuIDA7CiAJfQotCWlmICghc3RyY21wKHZhciwgImNvbG9yLmdyZXAuZXh0ZXJuYWwiKSkKLQkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCYob3B0LT5jb2xvcl9leHRlcm5hbCksIHZhciwgdmFsdWUpOwogCWlmICghc3RyY21wKHZhciwgImNvbG9yLmdyZXAubWF0Y2giKSkgewogCQlpZiAoIXZhbHVlKQogCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CkBAIC00MiwyNSArMzA5LDU3IEBACiB9CiAKIC8qCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgbWF4X2RlcHRoIGlzIG5lZ2F0aXZlIG9yIHBhdGggaGFzIG5vIG1vcmUgdGhlbiBtYXhfZGVwdGgKKyAqIHNsYXNoZXMuCisgKi8KK3N0YXRpYyBpbnQgYWNjZXB0X3N1YmRpcihjb25zdCBjaGFyICpwYXRoLCBpbnQgbWF4X2RlcHRoKQoreworCWlmIChtYXhfZGVwdGggPCAwKQorCQlyZXR1cm4gMTsKKworCXdoaWxlICgocGF0aCA9IHN0cmNocihwYXRoLCAnLycpKSAhPSBOVUxMKSB7CisJCW1heF9kZXB0aC0tOworCQlpZiAobWF4X2RlcHRoIDwgMCkKKwkJCXJldHVybiAwOworCQlwYXRoKys7CisJfQorCXJldHVybiAxOworfQorCisvKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIG5hbWUgaXMgYSBzdWJkaXJlY3Rvcnkgb2YgbWF0Y2ggYW5kIGlzIG5vdCB0b28gZGVlcC4KKyAqLworc3RhdGljIGludCBpc19zdWJkaXIoY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCisJCWNvbnN0IGNoYXIgKm1hdGNoLCBpbnQgbWF0Y2hsZW4sIGludCBtYXhfZGVwdGgpCit7CisJaWYgKG1hdGNobGVuID4gbmFtZWxlbiB8fCBzdHJuY21wKG5hbWUsIG1hdGNoLCBtYXRjaGxlbikpCisJCXJldHVybiAwOworCisJaWYgKG5hbWVbbWF0Y2hsZW5dID09ICdcMCcpIC8qIGV4YWN0IG1hdGNoICovCisJCXJldHVybiAxOworCisJaWYgKCFtYXRjaGxlbiB8fCBtYXRjaFttYXRjaGxlbi0xXSA9PSAnLycgfHwgbmFtZVttYXRjaGxlbl0gPT0gJy8nKQorCQlyZXR1cm4gYWNjZXB0X3N1YmRpcihuYW1lICsgbWF0Y2hsZW4gKyAxLCBtYXhfZGVwdGgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCiAgKiBnaXQgZ3JlcCBwYXRoc3BlY3MgYXJlIHNvbWV3aGF0IGRpZmZlcmVudCBmcm9tIGRpZmYtdHJlZSBwYXRoc3BlY3M7CiAgKiBwYXRobmFtZSB3aWxkY2FyZHMgYXJlIGFsbG93ZWQuCiAgKi8KLXN0YXRpYyBpbnQgcGF0aHNwZWNfbWF0Y2hlcyhjb25zdCBjaGFyICoqcGF0aHMsIGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgaW50IHBhdGhzcGVjX21hdGNoZXMoY29uc3QgY2hhciAqKnBhdGhzLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbWF4X2RlcHRoKQogewogCWludCBuYW1lbGVuLCBpOwogCWlmICghcGF0aHMgfHwgISpwYXRocykKLQkJcmV0dXJuIDE7CisJCXJldHVybiBhY2NlcHRfc3ViZGlyKG5hbWUsIG1heF9kZXB0aCk7CiAJbmFtZWxlbiA9IHN0cmxlbihuYW1lKTsKIAlmb3IgKGkgPSAwOyBwYXRoc1tpXTsgaSsrKSB7CiAJCWNvbnN0IGNoYXIgKm1hdGNoID0gcGF0aHNbaV07CiAJCWludCBtYXRjaGxlbiA9IHN0cmxlbihtYXRjaCk7CiAJCWNvbnN0IGNoYXIgKmNwLCAqbWV0YTsKIAotCQlpZiAoIW1hdGNobGVuIHx8Ci0JCSAgICAoKG1hdGNobGVuIDw9IG5hbWVsZW4pICYmCi0JCSAgICAgIXN0cm5jbXAobmFtZSwgbWF0Y2gsIG1hdGNobGVuKSAmJgotCQkgICAgIChtYXRjaFttYXRjaGxlbi0xXSA9PSAnLycgfHwKLQkJICAgICAgbmFtZVttYXRjaGxlbl0gPT0gJ1wwJyB8fCBuYW1lW21hdGNobGVuXSA9PSAnLycpKSkKKwkJaWYgKGlzX3N1YmRpcihuYW1lLCBuYW1lbGVuLCBtYXRjaCwgbWF0Y2hsZW4sIG1heF9kZXB0aCkpCiAJCQlyZXR1cm4gMTsKIAkJaWYgKCFmbm1hdGNoKG1hdGNoLCBuYW1lLCAwKSkKIAkJCXJldHVybiAxOwpAQCAtMTA5LDQ5ICs0MDgsNzQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBncmVwX3NoYTEoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKm5hbWUsIGludCB0cmVlX25hbWVfbGVuKQorc3RhdGljIHZvaWQgKmxvY2tfYW5kX3JlYWRfc2hhMV9maWxlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGVudW0gb2JqZWN0X3R5cGUgKnR5cGUsIHVuc2lnbmVkIGxvbmcgKnNpemUpCiB7Ci0JdW5zaWduZWQgbG9uZyBzaXplOwotCWNoYXIgKmRhdGE7Ci0JZW51bSBvYmplY3RfdHlwZSB0eXBlOwotCWNoYXIgKnRvX2ZyZWUgPSBOVUxMOwotCWludCBoaXQ7CisJdm9pZCAqZGF0YTsKIAotCWRhdGEgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmdHlwZSwgJnNpemUpOwotCWlmICghZGF0YSkgewotCQllcnJvcigiJyVzJzogdW5hYmxlIHRvIHJlYWQgJXMiLCBuYW1lLCBzaGExX3RvX2hleChzaGExKSk7Ci0JCXJldHVybiAwOworCWlmICh1c2VfdGhyZWFkcykgeworCQlyZWFkX3NoYTFfbG9jaygpOworCQlkYXRhID0gcmVhZF9zaGExX2ZpbGUoc2hhMSwgdHlwZSwgc2l6ZSk7CisJCXJlYWRfc2hhMV91bmxvY2soKTsKKwl9IGVsc2UgeworCQlkYXRhID0gcmVhZF9zaGExX2ZpbGUoc2hhMSwgdHlwZSwgc2l6ZSk7CiAJfQotCWlmIChvcHQtPnJlbGF0aXZlICYmIG9wdC0+cHJlZml4X2xlbmd0aCkgewotCQlzdGF0aWMgY2hhciBuYW1lX2J1ZltQQVRIX01BWF07Ci0JCWNoYXIgKmNwOwotCQlpbnQgbmFtZV9sZW4gPSBzdHJsZW4obmFtZSkgLSBvcHQtPnByZWZpeF9sZW5ndGggKyAxOwotCi0JCWlmICghdHJlZV9uYW1lX2xlbikKLQkJCW5hbWUgKz0gb3B0LT5wcmVmaXhfbGVuZ3RoOwotCQllbHNlIHsKLQkJCWlmIChBUlJBWV9TSVpFKG5hbWVfYnVmKSA8PSBuYW1lX2xlbikKLQkJCQljcCA9IHRvX2ZyZWUgPSB4bWFsbG9jKG5hbWVfbGVuKTsKLQkJCWVsc2UKLQkJCQljcCA9IG5hbWVfYnVmOwotCQkJbWVtY3B5KGNwLCBuYW1lLCB0cmVlX25hbWVfbGVuKTsKLQkJCXN0cmNweShjcCArIHRyZWVfbmFtZV9sZW4sCi0JCQkgICAgICAgbmFtZSArIHRyZWVfbmFtZV9sZW4gKyBvcHQtPnByZWZpeF9sZW5ndGgpOwotCQkJbmFtZSA9IGNwOwotCQl9Ci0JfQotCWhpdCA9IGdyZXBfYnVmZmVyKG9wdCwgbmFtZSwgZGF0YSwgc2l6ZSk7Ci0JZnJlZShkYXRhKTsKLQlmcmVlKHRvX2ZyZWUpOwotCXJldHVybiBoaXQ7CisJcmV0dXJuIGRhdGE7CiB9CiAKLXN0YXRpYyBpbnQgZ3JlcF9maWxlKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3N0YXRpYyB2b2lkICpsb2FkX3NoYTEoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgdW5zaWduZWQgbG9uZyAqc2l6ZSwKKwkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXZvaWQgKmRhdGEgPSBsb2NrX2FuZF9yZWFkX3NoYTFfZmlsZShzaGExLCAmdHlwZSwgc2l6ZSk7CisKKwlpZiAoIWRhdGEpCisJCWVycm9yKCInJXMnOiB1bmFibGUgdG8gcmVhZCAlcyIsIG5hbWUsIHNoYTFfdG9faGV4KHNoYTEpKTsKKworCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgaW50IGdyZXBfc2hhMShzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHRyZWVfbmFtZV9sZW4pCit7CisJc3RydWN0IHN0cmJ1ZiBwYXRoYnVmID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqbmFtZTsKKworCWlmIChvcHQtPnJlbGF0aXZlICYmIG9wdC0+cHJlZml4X2xlbmd0aCkgeworCQlxdW90ZV9wYXRoX3JlbGF0aXZlKGZpbGVuYW1lICsgdHJlZV9uYW1lX2xlbiwgLTEsICZwYXRoYnVmLAorCQkJCSAgICBvcHQtPnByZWZpeCk7CisJCXN0cmJ1Zl9pbnNlcnQoJnBhdGhidWYsIDAsIGZpbGVuYW1lLCB0cmVlX25hbWVfbGVuKTsKKwl9IGVsc2UgeworCQlzdHJidWZfYWRkc3RyKCZwYXRoYnVmLCBmaWxlbmFtZSk7CisJfQorCisJbmFtZSA9IHN0cmJ1Zl9kZXRhY2goJnBhdGhidWYsIE5VTEwpOworCisjaWZuZGVmIE5PX1BUSFJFQURTCisJaWYgKHVzZV90aHJlYWRzKSB7CisJCWdyZXBfc2hhMV9hc3luYyhvcHQsIG5hbWUsIHNoYTEpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UKKyNlbmRpZgorCXsKKwkJaW50IGhpdDsKKwkJdW5zaWduZWQgbG9uZyBzejsKKwkJdm9pZCAqZGF0YSA9IGxvYWRfc2hhMShzaGExLCAmc3osIG5hbWUpOworCQlpZiAoIWRhdGEpCisJCQloaXQgPSAwOworCQllbHNlCisJCQloaXQgPSBncmVwX2J1ZmZlcihvcHQsIG5hbWUsIGRhdGEsIHN6KTsKKworCQlmcmVlKGRhdGEpOworCQlmcmVlKG5hbWUpOworCQlyZXR1cm4gaGl0OworCX0KK30KKworc3RhdGljIHZvaWQgKmxvYWRfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSwgc2l6ZV90ICpzeikKIHsKIAlzdHJ1Y3Qgc3RhdCBzdDsKLQlpbnQgaTsKIAljaGFyICpkYXRhOwotCXNpemVfdCBzejsKKwlpbnQgaTsKIAogCWlmIChsc3RhdChmaWxlbmFtZSwgJnN0KSA8IDApIHsKIAllcnJfcmV0OgpAQCAtMTU5LDI3OCArNDgzLDU1IEBACiAJCQllcnJvcigiJyVzJzogJXMiLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKIAkJcmV0dXJuIDA7CiAJfQotCWlmICghc3Quc3Rfc2l6ZSkKLQkJcmV0dXJuIDA7IC8qIGVtcHR5IGZpbGUgLS0gbm8gZ3JlcCBoaXQgKi8KIAlpZiAoIVNfSVNSRUcoc3Quc3RfbW9kZSkpCiAJCXJldHVybiAwOwotCXN6ID0geHNpemVfdChzdC5zdF9zaXplKTsKKwkqc3ogPSB4c2l6ZV90KHN0LnN0X3NpemUpOwogCWkgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSk7CiAJaWYgKGkgPCAwKQogCQlnb3RvIGVycl9yZXQ7Ci0JZGF0YSA9IHhtYWxsb2Moc3ogKyAxKTsKLQlpZiAoc3Quc3Rfc2l6ZSAhPSByZWFkX2luX2Z1bGwoaSwgZGF0YSwgc3opKSB7CisJZGF0YSA9IHhtYWxsb2MoKnN6ICsgMSk7CisJaWYgKHN0LnN0X3NpemUgIT0gcmVhZF9pbl9mdWxsKGksIGRhdGEsICpzeikpIHsKIAkJZXJyb3IoIiclcyc6IHNob3J0IHJlYWQgJXMiLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKIAkJY2xvc2UoaSk7CiAJCWZyZWUoZGF0YSk7CiAJCXJldHVybiAwOwogCX0KIAljbG9zZShpKTsKKwlkYXRhWypzel0gPSAwOworCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgaW50IGdyZXBfZmlsZShzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwljaGFyICpuYW1lOworCiAJaWYgKG9wdC0+cmVsYXRpdmUgJiYgb3B0LT5wcmVmaXhfbGVuZ3RoKQotCQlmaWxlbmFtZSArPSBvcHQtPnByZWZpeF9sZW5ndGg7Ci0JaSA9IGdyZXBfYnVmZmVyKG9wdCwgZmlsZW5hbWUsIGRhdGEsIHN6KTsKLQlmcmVlKGRhdGEpOwotCXJldHVybiBpOwotfQorCQlxdW90ZV9wYXRoX3JlbGF0aXZlKGZpbGVuYW1lLCAtMSwgJmJ1Ziwgb3B0LT5wcmVmaXgpOworCWVsc2UKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCBmaWxlbmFtZSk7CisJbmFtZSA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CiAKLSNpZiAhTk9fRVhURVJOQUxfR1JFUAotc3RhdGljIGludCBleGVjX2dyZXAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQotewotCXBpZF90IHBpZDsKLQlpbnQgc3RhdHVzOwotCi0JYXJndlthcmdjXSA9IE5VTEw7Ci0JcGlkID0gZm9yaygpOwotCWlmIChwaWQgPCAwKQotCQlyZXR1cm4gcGlkOwotCWlmICghcGlkKSB7Ci0JCWV4ZWN2cCgiZ3JlcCIsIChjaGFyICoqKSBhcmd2KTsKLQkJZXhpdCgyNTUpOwotCX0KLQl3aGlsZSAod2FpdHBpZChwaWQsICZzdGF0dXMsIDApIDwgMCkgewotCQlpZiAoZXJybm8gPT0gRUlOVFIpCi0JCQljb250aW51ZTsKLQkJcmV0dXJuIC0xOwotCX0KLQlpZiAoV0lGRVhJVEVEKHN0YXR1cykpIHsKLQkJaWYgKCFXRVhJVFNUQVRVUyhzdGF0dXMpKQotCQkJcmV0dXJuIDE7CisjaWZuZGVmIE5PX1BUSFJFQURTCisJaWYgKHVzZV90aHJlYWRzKSB7CisJCWdyZXBfZmlsZV9hc3luYyhvcHQsIG5hbWUsIGZpbGVuYW1lKTsKIAkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAtMTsKLX0KLQotI2RlZmluZSBNQVhBUkdTIDEwMDAKLSNkZWZpbmUgQVJHQlVGIDQwOTYKLSNkZWZpbmUgcHVzaF9hcmcoYSkgZG8geyBcCi0JaWYgKG5yIDwgTUFYQVJHUykgYXJndltucisrXSA9IChhKTsgXAotCWVsc2UgZGllKCJtYXhpbXVtIG51bWJlciBvZiBhcmdzIGV4Y2VlZGVkIik7IFwKLQl9IHdoaWxlICgwKQotCi0vKgotICogSWYgeW91IHNlbmQgYSBzaW5nbGV0b24gZmlsZW5hbWUgdG8gZ3JlcCwgaXQgZG9lcyBub3QgZ2l2ZQotICogdGhlIG5hbWUgb2YgdGhlIGZpbGUuICBHTlUgZ3JlcCBoYXMgIi1IIiBidXQgd2Ugd291bGQgd2FudAotICogdGhhdCBiZWhhdmlvdXIgaW4gYSBwb3J0YWJsZSB3YXkuCi0gKgotICogU28gd2Uga2VlcCB0d28gcGF0aG5hbWVzIGluIGFyZ3YgYnVmZmVyIHVuc2VudCB0byBncmVwIGluCi0gKiB0aGUgbWFpbiBsb29wIGlmIHdlIG5lZWQgdG8gZG8gbW9yZSB0aGFuIG9uZSBncmVwLgotICovCi1zdGF0aWMgaW50IGZsdXNoX2dyZXAoc3RydWN0IGdyZXBfb3B0ICpvcHQsCi0JCSAgICAgIGludCBhcmdjLCBpbnQgYXJnMCwgY29uc3QgY2hhciAqKmFyZ3YsIGludCAqa2VwdCkKLXsKLQlpbnQgc3RhdHVzOwotCWludCBjb3VudCA9IGFyZ2MgLSBhcmcwOwotCWNvbnN0IGNoYXIgKmtlcHRfMCA9IE5VTEw7Ci0KLQlpZiAoY291bnQgPD0gMikgewotCQkvKgotCQkgKiBCZWNhdXNlIHdlIGtlZXAgYXQgbGVhc3QgMiBwYXRocyBpbiB0aGUgY2FsbCBmcm9tCi0JCSAqIHRoZSBtYWluIGxvb3AgKGkuZS4ga2VwdCAhPSBOVUxMKSwgYW5kIE1BWEFSR1MgaXMKLQkJICogZmFyIGdyZWF0ZXIgdGhhbiAyLCB0aGlzIHVzdWFsbHkgaXMgYSBjYWxsIHRvCi0JCSAqIGNvbmNsdWRlIHRoZSBncmVwLiAgSG93ZXZlciwgdGhlIHVzZXIgY291bGQgYXR0ZW1wdAotCQkgKiB0byBvdmVyZmxvdyB0aGUgYXJndiBidWZmZXIgYnkgZ2l2aW5nIHRvbyBtYW55Ci0JCSAqIG9wdGlvbnMgdG8gbGVhdmUgdmVyeSBzbWFsbCBudW1iZXIgb2YgcmVhbAotCQkgKiBhcmd1bWVudHMgZXZlbiBmb3IgdGhlIGNhbGwgaW4gdGhlIG1haW4gbG9vcC4KLQkJICovCi0JCWlmIChrZXB0KQotCQkJZGllKCJpbnNhbmVseSBtYW55IG9wdGlvbnMgdG8gZ3JlcCIpOwotCi0JCS8qCi0JCSAqIElmIHdlIGhhdmUgdHdvIG9yIG1vcmUgcGF0aHMsIHdlIGRvIG5vdCBoYXZlIHRvIGRvCi0JCSAqIGFueXRoaW5nIHNwZWNpYWwsIGJ1dCB3ZSBuZWVkIHRvIHB1c2ggL2Rldi9udWxsIHRvCi0JCSAqIGdldCAiLUgiIGJlaGF2aW91ciBvZiBHTlUgZ3JlcCBwb3J0YWJseSBidXQgd2hlbiB3ZQotCQkgKiBhcmUgbm90IGRvaW5nICItbCIgbm9yICItTCIgbm9yICItYyIuCi0JCSAqLwotCQlpZiAoY291bnQgPT0gMSAmJgotCQkgICAgIW9wdC0+bmFtZV9vbmx5ICYmCi0JCSAgICAhb3B0LT51bm1hdGNoX25hbWVfb25seSAmJgotCQkgICAgIW9wdC0+Y291bnQpIHsKLQkJCWFyZ3ZbYXJnYysrXSA9ICIvZGV2L251bGwiOwotCQkJYXJndlthcmdjXSA9IE5VTEw7Ci0JCX0KLQl9Ci0KLQllbHNlIGlmIChrZXB0KSB7Ci0JCS8qCi0JCSAqIENhbGxlZCBiZWNhdXNlIHdlIGZvdW5kIG1hbnkgcGF0aHMgYW5kIGhhdmVuJ3QgZmluaXNoZWQKLQkJICogaXRlcmF0aW5nIG92ZXIgdGhlIGNhY2hlIHlldC4gIFdlIGtlZXAgdHdvIHBhdGhzCi0JCSAqIGZvciB0aGUgY29uY2x1ZGluZyBjYWxsLiAgYXJndlthcmdjLTJdIGFuZCBhcmd2W2FyZ2MtMV0KLQkJICogaGFzIHRoZSBsYXN0IHR3byBwYXRocywgc28gc2F2ZSB0aGUgZmlyc3Qgb25lIGF3YXksCi0JCSAqIHJlcGxhY2UgaXQgd2l0aCBOVUxMIHdoaWxlIHNlbmRpbmcgdGhlIGxpc3QgdG8gZ3JlcCwKLQkJICogYW5kIHJlY292ZXIgdGhlbSBhZnRlciB3ZSBhcmUgZG9uZS4KLQkJICovCi0JCSprZXB0ID0gMjsKLQkJa2VwdF8wID0gYXJndlthcmdjLTJdOwotCQlhcmd2W2FyZ2MtMl0gPSBOVUxMOwotCQlhcmdjIC09IDI7Ci0JfQotCi0Jc3RhdHVzID0gZXhlY19ncmVwKGFyZ2MsIGFyZ3YpOwotCi0JaWYgKGtlcHRfMCkgewotCQkvKgotCQkgKiBUaGVuIHJlY292ZXIgdGhlbS4gIE5vdyB0aGUgbGFzdCBhcmcgaXMgYmV5b25kIHRoZQotCQkgKiB0ZXJtaW5hdGluZyBOVUxMIHdoaWNoIGlzIGF0IGFyZ2MsIGFuZCB0aGUgc2Vjb25kCi0JCSAqIGZyb20gdGhlIGxhc3QgaXMgd2hhdCB3ZSBzYXZlZCBhd2F5IGluIGtlcHRfMAotCQkgKi8KLQkJYXJndlthcmcwKytdID0ga2VwdF8wOwotCQlhcmd2W2FyZzBdID0gYXJndlthcmdjKzFdOwotCX0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgdm9pZCBncmVwX2FkZF9jb2xvcihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqZXNjYXBlX3NlcSkKLXsKLQlzaXplX3Qgb3JpZ19sZW4gPSBzYi0+bGVuOwotCi0Jd2hpbGUgKCplc2NhcGVfc2VxKSB7Ci0JCWlmICgqZXNjYXBlX3NlcSA9PSAnbScpCi0JCQlzdHJidWZfYWRkY2goc2IsICc7Jyk7Ci0JCWVsc2UgaWYgKCplc2NhcGVfc2VxICE9ICdcMDMzJyAmJiAqZXNjYXBlX3NlcSAgIT0gJ1snKQotCQkJc3RyYnVmX2FkZGNoKHNiLCAqZXNjYXBlX3NlcSk7Ci0JCWVzY2FwZV9zZXErKzsKLQl9Ci0JaWYgKHNiLT5sZW4gPiBvcmlnX2xlbiAmJiBzYi0+YnVmW3NiLT5sZW4gLSAxXSA9PSAnOycpCi0JCXN0cmJ1Zl9zZXRsZW4oc2IsIHNiLT5sZW4gLSAxKTsKLX0KLQotc3RhdGljIGludCBleHRlcm5hbF9ncmVwKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBjaGFyICoqcGF0aHMsIGludCBjYWNoZWQpCi17Ci0JaW50IGksIG5yLCBhcmdjLCBoaXQsIGxlbiwgc3RhdHVzOwotCWNvbnN0IGNoYXIgKmFyZ3ZbTUFYQVJHUysxXTsKLQljaGFyIHJhbmRhcmdbQVJHQlVGXTsKLQljaGFyICphcmdwdHIgPSByYW5kYXJnOwotCXN0cnVjdCBncmVwX3BhdCAqcDsKLQotCWlmIChvcHQtPmV4dGVuZGVkIHx8IChvcHQtPnJlbGF0aXZlICYmIG9wdC0+cHJlZml4X2xlbmd0aCkpCi0JCXJldHVybiAtMTsKLQlsZW4gPSBuciA9IDA7Ci0JcHVzaF9hcmcoImdyZXAiKTsKLQlpZiAob3B0LT5maXhlZCkKLQkJcHVzaF9hcmcoIi1GIik7Ci0JaWYgKG9wdC0+bGluZW51bSkKLQkJcHVzaF9hcmcoIi1uIik7Ci0JaWYgKCFvcHQtPnBhdGhuYW1lKQotCQlwdXNoX2FyZygiLWgiKTsKLQlpZiAob3B0LT5yZWdmbGFncyAmIFJFR19FWFRFTkRFRCkKLQkJcHVzaF9hcmcoIi1FIik7Ci0JaWYgKG9wdC0+cmVnZmxhZ3MgJiBSRUdfSUNBU0UpCi0JCXB1c2hfYXJnKCItaSIpOwotCWlmIChvcHQtPmJpbmFyeSA9PSBHUkVQX0JJTkFSWV9OT01BVENIKQotCQlwdXNoX2FyZygiLUkiKTsKLQlpZiAob3B0LT53b3JkX3JlZ2V4cCkKLQkJcHVzaF9hcmcoIi13Iik7Ci0JaWYgKG9wdC0+bmFtZV9vbmx5KQotCQlwdXNoX2FyZygiLWwiKTsKLQlpZiAob3B0LT51bm1hdGNoX25hbWVfb25seSkKLQkJcHVzaF9hcmcoIi1MIik7Ci0JaWYgKG9wdC0+bnVsbF9mb2xsb3dpbmdfbmFtZSkKLQkJLyogaW4gR05VIGdyZXAgZ2l0J3MgIi16IiB0cmFuc2xhdGVzIHRvICItWiIgKi8KLQkJcHVzaF9hcmcoIi1aIik7Ci0JaWYgKG9wdC0+Y291bnQpCi0JCXB1c2hfYXJnKCItYyIpOwotCWlmIChvcHQtPnBvc3RfY29udGV4dCB8fCBvcHQtPnByZV9jb250ZXh0KSB7Ci0JCWlmIChvcHQtPnBvc3RfY29udGV4dCAhPSBvcHQtPnByZV9jb250ZXh0KSB7Ci0JCQlpZiAob3B0LT5wcmVfY29udGV4dCkgewotCQkJCXB1c2hfYXJnKCItQiIpOwotCQkJCWxlbiArPSBzbnByaW50ZihhcmdwdHIsIHNpemVvZihyYW5kYXJnKS1sZW4sCi0JCQkJCQkiJXUiLCBvcHQtPnByZV9jb250ZXh0KSArIDE7Ci0JCQkJaWYgKHNpemVvZihyYW5kYXJnKSA8PSBsZW4pCi0JCQkJCWRpZSgibWF4aW11bSBsZW5ndGggb2YgYXJncyBleGNlZWRlZCIpOwotCQkJCXB1c2hfYXJnKGFyZ3B0cik7Ci0JCQkJYXJncHRyICs9IGxlbjsKLQkJCX0KLQkJCWlmIChvcHQtPnBvc3RfY29udGV4dCkgewotCQkJCXB1c2hfYXJnKCItQSIpOwotCQkJCWxlbiArPSBzbnByaW50ZihhcmdwdHIsIHNpemVvZihyYW5kYXJnKS1sZW4sCi0JCQkJCQkiJXUiLCBvcHQtPnBvc3RfY29udGV4dCkgKyAxOwotCQkJCWlmIChzaXplb2YocmFuZGFyZykgPD0gbGVuKQotCQkJCQlkaWUoIm1heGltdW0gbGVuZ3RoIG9mIGFyZ3MgZXhjZWVkZWQiKTsKLQkJCQlwdXNoX2FyZyhhcmdwdHIpOwotCQkJCWFyZ3B0ciArPSBsZW47Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQlwdXNoX2FyZygiLUMiKTsKLQkJCWxlbiArPSBzbnByaW50ZihhcmdwdHIsIHNpemVvZihyYW5kYXJnKS1sZW4sCi0JCQkJCSIldSIsIG9wdC0+cG9zdF9jb250ZXh0KSArIDE7Ci0JCQlpZiAoc2l6ZW9mKHJhbmRhcmcpIDw9IGxlbikKLQkJCQlkaWUoIm1heGltdW0gbGVuZ3RoIG9mIGFyZ3MgZXhjZWVkZWQiKTsKLQkJCXB1c2hfYXJnKGFyZ3B0cik7Ci0JCQlhcmdwdHIgKz0gbGVuOwotCQl9Ci0JfQotCWZvciAocCA9IG9wdC0+cGF0dGVybl9saXN0OyBwOyBwID0gcC0+bmV4dCkgewotCQlwdXNoX2FyZygiLWUiKTsKLQkJcHVzaF9hcmcocC0+cGF0dGVybik7Ci0JfQotCWlmIChvcHQtPmNvbG9yKSB7Ci0JCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKLQotCQlncmVwX2FkZF9jb2xvcigmc2IsIG9wdC0+Y29sb3JfbWF0Y2gpOwotCQlzZXRlbnYoIkdSRVBfQ09MT1IiLCBzYi5idWYsIDEpOwotCi0JCXN0cmJ1Zl9yZXNldCgmc2IpOwotCQlzdHJidWZfYWRkc3RyKCZzYiwgIm10PSIpOwotCQlncmVwX2FkZF9jb2xvcigmc2IsIG9wdC0+Y29sb3JfbWF0Y2gpOwotCQlzdHJidWZfYWRkc3RyKCZzYiwgIjpzbD06Y3g9OmZuPTpsbj06Ym49OnNlPSIpOwotCQlzZXRlbnYoIkdSRVBfQ09MT1JTIiwgc2IuYnVmLCAxKTsKLQotCQlzdHJidWZfcmVsZWFzZSgmc2IpOwotCi0JCWlmIChvcHQtPmNvbG9yX2V4dGVybmFsICYmIHN0cmxlbihvcHQtPmNvbG9yX2V4dGVybmFsKSA+IDApCi0JCQlwdXNoX2FyZyhvcHQtPmNvbG9yX2V4dGVybmFsKTsKLQl9Ci0KLQloaXQgPSAwOwotCWFyZ2MgPSBucjsKLQlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyspIHsKLQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKLQkJY2hhciAqbmFtZTsKLQkJaW50IGtlcHQ7Ci0JCWlmICghU19JU1JFRyhjZS0+Y2VfbW9kZSkpCi0JCQljb250aW51ZTsKLQkJaWYgKCFwYXRoc3BlY19tYXRjaGVzKHBhdGhzLCBjZS0+bmFtZSkpCi0JCQljb250aW51ZTsKLQkJbmFtZSA9IGNlLT5uYW1lOwotCQlpZiAobmFtZVswXSA9PSAnLScpIHsKLQkJCWludCBsZW4gPSBjZV9uYW1lbGVuKGNlKTsKLQkJCW5hbWUgPSB4bWFsbG9jKGxlbiArIDMpOwotCQkJbWVtY3B5KG5hbWUsICIuLyIsIDIpOwotCQkJbWVtY3B5KG5hbWUgKyAyLCBjZS0+bmFtZSwgbGVuICsgMSk7Ci0JCX0KLQkJYXJndlthcmdjKytdID0gbmFtZTsKLQkJaWYgKE1BWEFSR1MgPD0gYXJnYykgewotCQkJc3RhdHVzID0gZmx1c2hfZ3JlcChvcHQsIGFyZ2MsIG5yLCBhcmd2LCAma2VwdCk7Ci0JCQlpZiAoMCA8IHN0YXR1cykKLQkJCQloaXQgPSAxOwotCQkJYXJnYyA9IG5yICsga2VwdDsKLQkJfQotCQlpZiAoY2Vfc3RhZ2UoY2UpKSB7Ci0JCQlkbyB7Ci0JCQkJaSsrOwotCQkJfSB3aGlsZSAoaSA8IGFjdGl2ZV9uciAmJgotCQkJCSAhc3RyY21wKGNlLT5uYW1lLCBhY3RpdmVfY2FjaGVbaV0tPm5hbWUpKTsKLQkJCWktLTsgLyogY29tcGVuc2F0ZSBmb3IgbG9vcCBjb250cm9sICovCi0JCX0KLQl9Ci0JaWYgKGFyZ2MgPiBucikgewotCQlzdGF0dXMgPSBmbHVzaF9ncmVwKG9wdCwgYXJnYywgbnIsIGFyZ3YsIE5VTEwpOwotCQlpZiAoMCA8IHN0YXR1cykKLQkJCWhpdCA9IDE7Ci0JfQotCXJldHVybiBoaXQ7Ci19CisJfSBlbHNlCiAjZW5kaWYKKwl7CisJCWludCBoaXQ7CisJCXNpemVfdCBzejsKKwkJdm9pZCAqZGF0YSA9IGxvYWRfZmlsZShmaWxlbmFtZSwgJnN6KTsKKwkJaWYgKCFkYXRhKQorCQkJaGl0ID0gMDsKKwkJZWxzZQorCQkJaGl0ID0gZ3JlcF9idWZmZXIob3B0LCBuYW1lLCBkYXRhLCBzeik7CisKKwkJZnJlZShkYXRhKTsKKwkJZnJlZShuYW1lKTsKKwkJcmV0dXJuIGhpdDsKKwl9Cit9CiAKIHN0YXRpYyBpbnQgZ3JlcF9jYWNoZShzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY29uc3QgY2hhciAqKnBhdGhzLCBpbnQgY2FjaGVkKQogewpAQCAtNDM4LDMxICs1MzksMTggQEAKIAlpbnQgbnI7CiAJcmVhZF9jYWNoZSgpOwogCi0jaWYgIU5PX0VYVEVSTkFMX0dSRVAKLQkvKgotCSAqIFVzZSB0aGUgZXh0ZXJuYWwgImdyZXAiIGNvbW1hbmQgZm9yIHRoZSBjYXNlIHdoZXJlCi0JICogd2UgZ3JlcCB0aHJvdWdoIHRoZSBjaGVja2VkLW91dCBmaWxlcy4gSXQgdGVuZHMgdG8KLQkgKiBiZSBhIGxvdCBtb3JlIG9wdGltaXplZAotCSAqLwotCWlmICghY2FjaGVkICYmICFidWlsdGluX2dyZXApIHsKLQkJaGl0ID0gZXh0ZXJuYWxfZ3JlcChvcHQsIHBhdGhzLCBjYWNoZWQpOwotCQlpZiAoaGl0ID49IDApCi0JCQlyZXR1cm4gaGl0OwotCX0KLSNlbmRpZgotCiAJZm9yIChuciA9IDA7IG5yIDwgYWN0aXZlX25yOyBucisrKSB7CiAJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbbnJdOwogCQlpZiAoIVNfSVNSRUcoY2UtPmNlX21vZGUpKQogCQkJY29udGludWU7Ci0JCWlmICghcGF0aHNwZWNfbWF0Y2hlcyhwYXRocywgY2UtPm5hbWUpKQorCQlpZiAoIXBhdGhzcGVjX21hdGNoZXMocGF0aHMsIGNlLT5uYW1lLCBvcHQtPm1heF9kZXB0aCkpCiAJCQljb250aW51ZTsKIAkJLyoKIAkJICogSWYgQ0VfVkFMSUQgaXMgb24sIHdlIGFzc3VtZSB3b3JrdHJlZSBmaWxlIGFuZCBpdHMgY2FjaGUgZW50cnkKIAkJICogYXJlIGlkZW50aWNhbCwgZXZlbiBpZiB3b3JrdHJlZSBmaWxlIGhhcyBiZWVuIG1vZGlmaWVkLCBzbyB1c2UKIAkJICogY2FjaGUgdmVyc2lvbiBpbnN0ZWFkCiAJCSAqLwotCQlpZiAoY2FjaGVkIHx8IChjZS0+Y2VfZmxhZ3MgJiBDRV9WQUxJRCkpIHsKKwkJaWYgKGNhY2hlZCB8fCAoY2UtPmNlX2ZsYWdzICYgQ0VfVkFMSUQpIHx8IGNlX3NraXBfd29ya3RyZWUoY2UpKSB7CiAJCQlpZiAoY2Vfc3RhZ2UoY2UpKQogCQkJCWNvbnRpbnVlOwogCQkJaGl0IHw9IGdyZXBfc2hhMShvcHQsIGNlLT5zaGExLCBjZS0+bmFtZSwgMCk7CkBAIC00NzYsNiArNTY0LDggQEAKIAkJCQkgIXN0cmNtcChjZS0+bmFtZSwgYWN0aXZlX2NhY2hlW25yXS0+bmFtZSkpOwogCQkJbnItLTsgLyogY29tcGVuc2F0ZSBmb3IgbG9vcCBjb250cm9sICovCiAJCX0KKwkJaWYgKGhpdCAmJiBvcHQtPnN0YXR1c19vbmx5KQorCQkJYnJlYWs7CiAJfQogCWZyZWVfZ3JlcF9wYXR0ZXJucyhvcHQpOwogCXJldHVybiBoaXQ7CkBAIC01MTUsNyArNjA1LDcgQEAKIAkJCXN0cmJ1Zl9hZGRjaCgmcGF0aGJ1ZiwgJy8nKTsKIAogCQlkb3duID0gcGF0aGJ1Zi5idWYgKyB0bl9sZW47Ci0JCWlmICghcGF0aHNwZWNfbWF0Y2hlcyhwYXRocywgZG93bikpCisJCWlmICghcGF0aHNwZWNfbWF0Y2hlcyhwYXRocywgZG93biwgb3B0LT5tYXhfZGVwdGgpKQogCQkJOwogCQllbHNlIGlmIChTX0lTUkVHKGVudHJ5Lm1vZGUpKQogCQkJaGl0IHw9IGdyZXBfc2hhMShvcHQsIGVudHJ5LnNoYTEsIHBhdGhidWYuYnVmLCB0bl9sZW4pOwpAQCAtNTI1LDcgKzYxNSw3IEBACiAJCQl2b2lkICpkYXRhOwogCQkJdW5zaWduZWQgbG9uZyBzaXplOwogCi0JCQlkYXRhID0gcmVhZF9zaGExX2ZpbGUoZW50cnkuc2hhMSwgJnR5cGUsICZzaXplKTsKKwkJCWRhdGEgPSBsb2NrX2FuZF9yZWFkX3NoYTFfZmlsZShlbnRyeS5zaGExLCAmdHlwZSwgJnNpemUpOwogCQkJaWYgKCFkYXRhKQogCQkJCWRpZSgidW5hYmxlIHRvIHJlYWQgdHJlZSAoJXMpIiwKIAkJCQkgICAgc2hhMV90b19oZXgoZW50cnkuc2hhMSkpOwpAQCAtNTMzLDYgKzYyMyw4IEBACiAJCQloaXQgfD0gZ3JlcF90cmVlKG9wdCwgcGF0aHMsICZzdWIsIHRyZWVfbmFtZSwgZG93bik7CiAJCQlmcmVlKGRhdGEpOwogCQl9CisJCWlmIChoaXQgJiYgb3B0LT5zdGF0dXNfb25seSkKKwkJCWJyZWFrOwogCX0KIAlzdHJidWZfcmVsZWFzZSgmcGF0aGJ1Zik7CiAJcmV0dXJuIGhpdDsKQEAgLTU2MCwzMiArNjUyLDIwMSBAQAogCWRpZSgidW5hYmxlIHRvIGdyZXAgZnJvbSBvYmplY3Qgb2YgdHlwZSAlcyIsIHR5cGVuYW1lKG9iai0+dHlwZSkpOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciBidWlsdGluX2dyZXBfdXNhZ2VbXSA9Ci0iZ2l0IGdyZXAgPG9wdGlvbj4qIFstZV0gPHBhdHRlcm4+IDxyZXY+KiBbWy0tXSA8cGF0aD4uLi5dIjsKK3N0YXRpYyBpbnQgY29udGV4dF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywKKwkJCSAgICBpbnQgdW5zZXQpCit7CisJc3RydWN0IGdyZXBfb3B0ICpncmVwX29wdCA9IG9wdC0+dmFsdWU7CisJaW50IHZhbHVlOworCWNvbnN0IGNoYXIgKmVuZHA7CiAKLXN0YXRpYyBjb25zdCBjaGFyIGVtc2dfaW52YWxpZF9jb250ZXh0X2xlbltdID0KLSIlczogaW52YWxpZCBjb250ZXh0IGxlbmd0aCBhcmd1bWVudCI7Ci1zdGF0aWMgY29uc3QgY2hhciBlbXNnX21pc3NpbmdfY29udGV4dF9sZW5bXSA9Ci0ibWlzc2luZyBjb250ZXh0IGxlbmd0aCBhcmd1bWVudCI7Ci1zdGF0aWMgY29uc3QgY2hhciBlbXNnX21pc3NpbmdfYXJndW1lbnRbXSA9Ci0ib3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0lcyI7CisJaWYgKHVuc2V0KSB7CisJCWdyZXBfb3B0LT5wcmVfY29udGV4dCA9IGdyZXBfb3B0LT5wb3N0X2NvbnRleHQgPSAwOworCQlyZXR1cm4gMDsKKwl9CisJdmFsdWUgPSBzdHJ0b2woYXJnLCAoY2hhciAqKikmZW5kcCwgMTApOworCWlmICgqZW5kcCkgeworCQlyZXR1cm4gZXJyb3IoInN3aXRjaCBgJWMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiLAorCQkJICAgICBvcHQtPnNob3J0X25hbWUpOworCX0KKwlncmVwX29wdC0+cHJlX2NvbnRleHQgPSBncmVwX29wdC0+cG9zdF9jb250ZXh0ID0gdmFsdWU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmlsZV9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBncmVwX29wdCAqZ3JlcF9vcHQgPSBvcHQtPnZhbHVlOworCUZJTEUgKnBhdHRlcm5zOworCWludCBsbm8gPSAwOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCXBhdHRlcm5zID0gZm9wZW4oYXJnLCAiciIpOworCWlmICghcGF0dGVybnMpCisJCWRpZV9lcnJubygiY2Fubm90IG9wZW4gJyVzJyIsIGFyZyk7CisJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lKCZzYiwgcGF0dGVybnMsICdcbicpID09IDApIHsKKwkJLyogaWdub3JlIGVtcHR5IGxpbmUgbGlrZSBncmVwIGRvZXMgKi8KKwkJaWYgKHNiLmxlbiA9PSAwKQorCQkJY29udGludWU7CisJCWFwcGVuZF9ncmVwX3BhdHRlcm4oZ3JlcF9vcHQsIHN0cmJ1Zl9kZXRhY2goJnNiLCBOVUxMKSwgYXJnLAorCQkJCSAgICArK2xubywgR1JFUF9QQVRURVJOKTsKKwl9CisJZmNsb3NlKHBhdHRlcm5zKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5vdF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBncmVwX29wdCAqZ3JlcF9vcHQgPSBvcHQtPnZhbHVlOworCWFwcGVuZF9ncmVwX3BhdHRlcm4oZ3JlcF9vcHQsICItLW5vdCIsICJjb21tYW5kIGxpbmUiLCAwLCBHUkVQX05PVCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYW5kX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGdyZXBfb3B0ICpncmVwX29wdCA9IG9wdC0+dmFsdWU7CisJYXBwZW5kX2dyZXBfcGF0dGVybihncmVwX29wdCwgIi0tYW5kIiwgImNvbW1hbmQgbGluZSIsIDAsIEdSRVBfQU5EKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcGVuX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGdyZXBfb3B0ICpncmVwX29wdCA9IG9wdC0+dmFsdWU7CisJYXBwZW5kX2dyZXBfcGF0dGVybihncmVwX29wdCwgIigiLCAiY29tbWFuZCBsaW5lIiwgMCwgR1JFUF9PUEVOX1BBUkVOKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbG9zZV9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBncmVwX29wdCAqZ3JlcF9vcHQgPSBvcHQtPnZhbHVlOworCWFwcGVuZF9ncmVwX3BhdHRlcm4oZ3JlcF9vcHQsICIpIiwgImNvbW1hbmQgbGluZSIsIDAsIEdSRVBfQ0xPU0VfUEFSRU4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhdHRlcm5fY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkgICAgaW50IHVuc2V0KQoreworCXN0cnVjdCBncmVwX29wdCAqZ3JlcF9vcHQgPSBvcHQtPnZhbHVlOworCWFwcGVuZF9ncmVwX3BhdHRlcm4oZ3JlcF9vcHQsIGFyZywgIi1lIG9wdGlvbiIsIDAsIEdSRVBfUEFUVEVSTik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGVscF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXJldHVybiAtMTsKK30KIAogaW50IGNtZF9ncmVwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQogewogCWludCBoaXQgPSAwOwogCWludCBjYWNoZWQgPSAwOwogCWludCBzZWVuX2Rhc2hkYXNoID0gMDsKKwlpbnQgZXh0ZXJuYWxfZ3JlcF9hbGxvd2VkX19pZ25vcmVkOwogCXN0cnVjdCBncmVwX29wdCBvcHQ7CiAJc3RydWN0IG9iamVjdF9hcnJheSBsaXN0ID0geyAwLCAwLCBOVUxMIH07CiAJY29uc3QgY2hhciAqKnBhdGhzID0gTlVMTDsKIAlpbnQgaTsKKwlpbnQgZHVtbXk7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MRUFOKDAsICJjYWNoZWQiLCAmY2FjaGVkLAorCQkJInNlYXJjaCBpbiBpbmRleCBpbnN0ZWFkIG9mIGluIHRoZSB3b3JrIHRyZWUiKSwKKwkJT1BUX0dST1VQKCIiKSwKKwkJT1BUX0JPT0xFQU4oJ3YnLCAiaW52ZXJ0LW1hdGNoIiwgJm9wdC5pbnZlcnQsCisJCQkic2hvdyBub24tbWF0Y2hpbmcgbGluZXMiKSwKKwkJT1BUX0JPT0xFQU4oJ2knLCAiaWdub3JlLWNhc2UiLCAmb3B0Lmlnbm9yZV9jYXNlLAorCQkJImNhc2UgaW5zZW5zaXRpdmUgbWF0Y2hpbmciKSwKKwkJT1BUX0JPT0xFQU4oJ3cnLCAid29yZC1yZWdleHAiLCAmb3B0LndvcmRfcmVnZXhwLAorCQkJIm1hdGNoIHBhdHRlcm5zIG9ubHkgYXQgd29yZCBib3VuZGFyaWVzIiksCisJCU9QVF9TRVRfSU5UKCdhJywgInRleHQiLCAmb3B0LmJpbmFyeSwKKwkJCSJwcm9jZXNzIGJpbmFyeSBmaWxlcyBhcyB0ZXh0IiwgR1JFUF9CSU5BUllfVEVYVCksCisJCU9QVF9TRVRfSU5UKCdJJywgTlVMTCwgJm9wdC5iaW5hcnksCisJCQkiZG9uJ3QgbWF0Y2ggcGF0dGVybnMgaW4gYmluYXJ5IGZpbGVzIiwKKwkJCUdSRVBfQklOQVJZX05PTUFUQ0gpLAorCQl7IE9QVElPTl9JTlRFR0VSLCAwLCAibWF4LWRlcHRoIiwgJm9wdC5tYXhfZGVwdGgsICJkZXB0aCIsCisJCQkiZGVzY2VuZCBhdCBtb3N0IDxkZXB0aD4gbGV2ZWxzIiwgUEFSU0VfT1BUX05PTkVHLAorCQkJTlVMTCwgMSB9LAorCQlPUFRfR1JPVVAoIiIpLAorCQlPUFRfQklUKCdFJywgImV4dGVuZGVkLXJlZ2V4cCIsICZvcHQucmVnZmxhZ3MsCisJCQkidXNlIGV4dGVuZGVkIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMiLCBSRUdfRVhURU5ERUQpLAorCQlPUFRfTkVHQklUKCdHJywgImJhc2ljLXJlZ2V4cCIsICZvcHQucmVnZmxhZ3MsCisJCQkidXNlIGJhc2ljIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKGRlZmF1bHQpIiwKKwkJCVJFR19FWFRFTkRFRCksCisJCU9QVF9CT09MRUFOKCdGJywgImZpeGVkLXN0cmluZ3MiLCAmb3B0LmZpeGVkLAorCQkJImludGVycHJldCBwYXR0ZXJucyBhcyBmaXhlZCBzdHJpbmdzIiksCisJCU9QVF9HUk9VUCgiIiksCisJCU9QVF9CT09MRUFOKCduJywgTlVMTCwgJm9wdC5saW5lbnVtLCAic2hvdyBsaW5lIG51bWJlcnMiKSwKKwkJT1BUX05FR0JJVCgnaCcsIE5VTEwsICZvcHQucGF0aG5hbWUsICJkb24ndCBzaG93IGZpbGVuYW1lcyIsIDEpLAorCQlPUFRfQklUKCdIJywgTlVMTCwgJm9wdC5wYXRobmFtZSwgInNob3cgZmlsZW5hbWVzIiwgMSksCisJCU9QVF9ORUdCSVQoMCwgImZ1bGwtbmFtZSIsICZvcHQucmVsYXRpdmUsCisJCQkic2hvdyBmaWxlbmFtZXMgcmVsYXRpdmUgdG8gdG9wIGRpcmVjdG9yeSIsIDEpLAorCQlPUFRfQk9PTEVBTignbCcsICJmaWxlcy13aXRoLW1hdGNoZXMiLCAmb3B0Lm5hbWVfb25seSwKKwkJCSJzaG93IG9ubHkgZmlsZW5hbWVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiKSwKKwkJT1BUX0JPT0xFQU4oMCwgIm5hbWUtb25seSIsICZvcHQubmFtZV9vbmx5LAorCQkJInN5bm9ueW0gZm9yIC0tZmlsZXMtd2l0aC1tYXRjaGVzIiksCisJCU9QVF9CT09MRUFOKCdMJywgImZpbGVzLXdpdGhvdXQtbWF0Y2giLAorCQkJJm9wdC51bm1hdGNoX25hbWVfb25seSwKKwkJCSJzaG93IG9ubHkgdGhlIG5hbWVzIG9mIGZpbGVzIHdpdGhvdXQgbWF0Y2giKSwKKwkJT1BUX0JPT0xFQU4oJ3onLCAibnVsbCIsICZvcHQubnVsbF9mb2xsb3dpbmdfbmFtZSwKKwkJCSJwcmludCBOVUwgYWZ0ZXIgZmlsZW5hbWVzIiksCisJCU9QVF9CT09MRUFOKCdjJywgImNvdW50IiwgJm9wdC5jb3VudCwKKwkJCSJzaG93IHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIiksCisJCU9QVF9TRVRfSU5UKDAsICJjb2xvciIsICZvcHQuY29sb3IsICJoaWdobGlnaHQgbWF0Y2hlcyIsIDEpLAorCQlPUFRfR1JPVVAoIiIpLAorCQlPUFRfQ0FMTEJBQ0soJ0MnLCBOVUxMLCAmb3B0LCAibiIsCisJCQkic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgYW5kIGFmdGVyIG1hdGNoZXMiLAorCQkJY29udGV4dF9jYWxsYmFjayksCisJCU9QVF9JTlRFR0VSKCdCJywgTlVMTCwgJm9wdC5wcmVfY29udGV4dCwKKwkJCSJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGJlZm9yZSBtYXRjaGVzIiksCisJCU9QVF9JTlRFR0VSKCdBJywgTlVMTCwgJm9wdC5wb3N0X2NvbnRleHQsCisJCQkic2hvdyA8bj4gY29udGV4dCBsaW5lcyBhZnRlciBtYXRjaGVzIiksCisJCU9QVF9OVU1CRVJfQ0FMTEJBQ0soJm9wdCwgInNob3J0Y3V0IGZvciAtQyBOVU0iLAorCQkJY29udGV4dF9jYWxsYmFjayksCisJCU9QVF9CT09MRUFOKCdwJywgInNob3ctZnVuY3Rpb24iLCAmb3B0LmZ1bmNuYW1lLAorCQkJInNob3cgYSBsaW5lIHdpdGggdGhlIGZ1bmN0aW9uIG5hbWUgYmVmb3JlIG1hdGNoZXMiKSwKKwkJT1BUX0dST1VQKCIiKSwKKwkJT1BUX0NBTExCQUNLKCdmJywgTlVMTCwgJm9wdCwgImZpbGUiLAorCQkJInJlYWQgcGF0dGVybnMgZnJvbSBmaWxlIiwgZmlsZV9jYWxsYmFjayksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAnZScsIE5VTEwsICZvcHQsICJwYXR0ZXJuIiwKKwkJCSJtYXRjaCA8cGF0dGVybj4iLCBQQVJTRV9PUFRfTk9ORUcsIHBhdHRlcm5fY2FsbGJhY2sgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJhbmQiLCAmb3B0LCBOVUxMLAorCQkgICJjb21iaW5lIHBhdHRlcm5zIHNwZWNpZmllZCB3aXRoIC1lIiwKKwkJICBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsIGFuZF9jYWxsYmFjayB9LAorCQlPUFRfQk9PTEVBTigwLCAib3IiLCAmZHVtbXksICIiKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJub3QiLCAmb3B0LCBOVUxMLCAiIiwKKwkJICBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsIG5vdF9jYWxsYmFjayB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgJygnLCBOVUxMLCAmb3B0LCBOVUxMLCAiIiwKKwkJICBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcgfCBQQVJTRV9PUFRfTk9EQVNILAorCQkgIG9wZW5fY2FsbGJhY2sgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICcpJywgTlVMTCwgJm9wdCwgTlVMTCwgIiIsCisJCSAgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHIHwgUEFSU0VfT1BUX05PREFTSCwKKwkJICBjbG9zZV9jYWxsYmFjayB9LAorCQlPUFRfQk9PTEVBTigncScsICJxdWlldCIsICZvcHQuc3RhdHVzX29ubHksCisJCQkgICAgImluZGljYXRlIGhpdCB3aXRoIGV4aXQgc3RhdHVzIHdpdGhvdXQgb3V0cHV0IiksCisJCU9QVF9CT09MRUFOKDAsICJhbGwtbWF0Y2giLCAmb3B0LmFsbF9tYXRjaCwKKwkJCSJzaG93IG9ubHkgbWF0Y2hlcyBmcm9tIGZpbGVzIHRoYXQgbWF0Y2ggYWxsIHBhdHRlcm5zIiksCisJCU9QVF9HUk9VUCgiIiksCisJCU9QVF9CT09MRUFOKDAsICJleHQtZ3JlcCIsICZleHRlcm5hbF9ncmVwX2FsbG93ZWRfX2lnbm9yZWQsCisJCQkgICAgImFsbG93IGNhbGxpbmcgb2YgZ3JlcCgxKSAoaWdub3JlZCBieSB0aGlzIGJ1aWxkKSIpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImhlbHAtYWxsIiwgJm9wdGlvbnMsIE5VTEwsICJzaG93IHVzYWdlIiwKKwkJICBQQVJTRV9PUFRfSElEREVOIHwgUEFSU0VfT1BUX05PQVJHLCBoZWxwX2NhbGxiYWNrIH0sCisJCU9QVF9FTkQoKQorCX07CisKKwkvKgorCSAqICdnaXQgZ3JlcCAtaCcsIHVubGlrZSAnZ2l0IGdyZXAgLWggPHBhdHRlcm4+JywgaXMgYSByZXF1ZXN0CisJICogdG8gc2hvdyB1c2FnZSBpbmZvcm1hdGlvbiBhbmQgZXhpdC4KKwkgKi8KKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhncmVwX3VzYWdlLCBvcHRpb25zKTsKIAogCW1lbXNldCgmb3B0LCAwLCBzaXplb2Yob3B0KSk7CisJb3B0LnByZWZpeCA9IHByZWZpeDsKIAlvcHQucHJlZml4X2xlbmd0aCA9IChwcmVmaXggJiYgKnByZWZpeCkgPyBzdHJsZW4ocHJlZml4KSA6IDA7CiAJb3B0LnJlbGF0aXZlID0gMTsKIAlvcHQucGF0aG5hbWUgPSAxOwogCW9wdC5wYXR0ZXJuX3RhaWwgPSAmb3B0LnBhdHRlcm5fbGlzdDsKKwlvcHQuaGVhZGVyX3RhaWwgPSAmb3B0LmhlYWRlcl9saXN0OwogCW9wdC5yZWdmbGFncyA9IFJFR19ORVdMSU5FOworCW9wdC5tYXhfZGVwdGggPSAtMTsKIAogCXN0cmNweShvcHQuY29sb3JfbWF0Y2gsIEdJVF9DT0xPUl9SRUQgR0lUX0NPTE9SX0JPTEQpOwogCW9wdC5jb2xvciA9IC0xOwpAQCAtNjAzLDIzNSArODY0LDUwIEBACiAJICogdW5yZWNvZ25pemVkIG5vbiBvcHRpb24gaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVmcyBsaXN0CiAJICogdGhhdCBjb250aW51ZXMgdXAgdG8gdGhlIC0tIChpZiBleGlzdHMpLCBhbmQgdGhlbiBwYXRocy4KIAkgKi8KKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGdyZXBfdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIIHwKKwkJCSAgICAgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTiB8CisJCQkgICAgIFBBUlNFX09QVF9OT19JTlRFUk5BTF9IRUxQKTsKIAotCXdoaWxlICgxIDwgYXJnYykgewotCQljb25zdCBjaGFyICphcmcgPSBhcmd2WzFdOwotCQlhcmdjLS07IGFyZ3YrKzsKLQkJaWYgKCFzdHJjbXAoIi0tY2FjaGVkIiwgYXJnKSkgewotCQkJY2FjaGVkID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKCItLW5vLWV4dC1ncmVwIiwgYXJnKSkgewotCQkJYnVpbHRpbl9ncmVwID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKCItYSIsIGFyZykgfHwKLQkJICAgICFzdHJjbXAoIi0tdGV4dCIsIGFyZykpIHsKLQkJCW9wdC5iaW5hcnkgPSBHUkVQX0JJTkFSWV9URVhUOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoIi1pIiwgYXJnKSB8fAotCQkgICAgIXN0cmNtcCgiLS1pZ25vcmUtY2FzZSIsIGFyZykpIHsKLQkJCW9wdC5yZWdmbGFncyB8PSBSRUdfSUNBU0U7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcCgiLUkiLCBhcmcpKSB7Ci0JCQlvcHQuYmluYXJ5ID0gR1JFUF9CSU5BUllfTk9NQVRDSDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKCItdiIsIGFyZykgfHwKLQkJICAgICFzdHJjbXAoIi0taW52ZXJ0LW1hdGNoIiwgYXJnKSkgewotCQkJb3B0LmludmVydCA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcCgiLUUiLCBhcmcpIHx8Ci0JCSAgICAhc3RyY21wKCItLWV4dGVuZGVkLXJlZ2V4cCIsIGFyZykpIHsKLQkJCW9wdC5yZWdmbGFncyB8PSBSRUdfRVhURU5ERUQ7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcCgiLUYiLCBhcmcpIHx8Ci0JCSAgICAhc3RyY21wKCItLWZpeGVkLXN0cmluZ3MiLCBhcmcpKSB7Ci0JCQlvcHQuZml4ZWQgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoIi1HIiwgYXJnKSB8fAotCQkgICAgIXN0cmNtcCgiLS1iYXNpYy1yZWdleHAiLCBhcmcpKSB7Ci0JCQlvcHQucmVnZmxhZ3MgJj0gflJFR19FWFRFTkRFRDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKCItbiIsIGFyZykpIHsKLQkJCW9wdC5saW5lbnVtID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKCItaCIsIGFyZykpIHsKLQkJCW9wdC5wYXRobmFtZSA9IDA7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcCgiLUgiLCBhcmcpKSB7Ci0JCQlvcHQucGF0aG5hbWUgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoIi1sIiwgYXJnKSB8fAotCQkgICAgIXN0cmNtcCgiLS1uYW1lLW9ubHkiLCBhcmcpIHx8Ci0JCSAgICAhc3RyY21wKCItLWZpbGVzLXdpdGgtbWF0Y2hlcyIsIGFyZykpIHsKLQkJCW9wdC5uYW1lX29ubHkgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoIi1MIiwgYXJnKSB8fAotCQkgICAgIXN0cmNtcCgiLS1maWxlcy13aXRob3V0LW1hdGNoIiwgYXJnKSkgewotCQkJb3B0LnVubWF0Y2hfbmFtZV9vbmx5ID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKCIteiIsIGFyZykgfHwKLQkJICAgICFzdHJjbXAoIi0tbnVsbCIsIGFyZykpIHsKLQkJCW9wdC5udWxsX2ZvbGxvd2luZ19uYW1lID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKCItYyIsIGFyZykgfHwKLQkJICAgICFzdHJjbXAoIi0tY291bnQiLCBhcmcpKSB7Ci0JCQlvcHQuY291bnQgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoIi13IiwgYXJnKSB8fAotCQkgICAgIXN0cmNtcCgiLS13b3JkLXJlZ2V4cCIsIGFyZykpIHsKLQkJCW9wdC53b3JkX3JlZ2V4cCA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXByZWZpeGNtcChhcmcsICItQSIpIHx8Ci0JCSAgICAhcHJlZml4Y21wKGFyZywgIi1CIikgfHwKLQkJICAgICFwcmVmaXhjbXAoYXJnLCAiLUMiKSB8fAotCQkgICAgKGFyZ1swXSA9PSAnLScgJiYgJzEnIDw9IGFyZ1sxXSAmJiBhcmdbMV0gPD0gJzknKSkgewotCQkJdW5zaWduZWQgbnVtOwotCQkJY29uc3QgY2hhciAqc2NhbjsKLQkJCXN3aXRjaCAoYXJnWzFdKSB7Ci0JCQljYXNlICdBJzogY2FzZSAnQic6IGNhc2UgJ0MnOgotCQkJCWlmICghYXJnWzJdKSB7Ci0JCQkJCWlmIChhcmdjIDw9IDEpCi0JCQkJCQlkaWUoZW1zZ19taXNzaW5nX2NvbnRleHRfbGVuKTsKLQkJCQkJc2NhbiA9ICorK2FyZ3Y7Ci0JCQkJCWFyZ2MtLTsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCQlzY2FuID0gYXJnICsgMjsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJc2NhbiA9IGFyZyArIDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAoc3RydG91bF91aShzY2FuLCAxMCwgJm51bSkpCi0JCQkJZGllKGVtc2dfaW52YWxpZF9jb250ZXh0X2xlbiwgc2Nhbik7Ci0JCQlzd2l0Y2ggKGFyZ1sxXSkgewotCQkJY2FzZSAnQSc6Ci0JCQkJb3B0LnBvc3RfY29udGV4dCA9IG51bTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQljYXNlICdDJzoKLQkJCQlvcHQucG9zdF9jb250ZXh0ID0gbnVtOwotCQkJY2FzZSAnQic6Ci0JCQkJb3B0LnByZV9jb250ZXh0ID0gbnVtOwotCQkJCWJyZWFrOwotCQkJfQotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoIi1mIiwgYXJnKSkgewotCQkJRklMRSAqcGF0dGVybnM7Ci0JCQlpbnQgbG5vID0gMDsKLQkJCWNoYXIgYnVmWzEwMjRdOwotCQkJaWYgKGFyZ2MgPD0gMSkKLQkJCQlkaWUoZW1zZ19taXNzaW5nX2FyZ3VtZW50LCBhcmcpOwotCQkJcGF0dGVybnMgPSBmb3Blbihhcmd2WzFdLCAiciIpOwotCQkJaWYgKCFwYXR0ZXJucykKLQkJCQlkaWUoIiclcyc6ICVzIiwgYXJndlsxXSwgc3RyZXJyb3IoZXJybm8pKTsKLQkJCXdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBwYXR0ZXJucykpIHsKLQkJCQlpbnQgbGVuID0gc3RybGVuKGJ1Zik7Ci0JCQkJaWYgKGxlbiAmJiBidWZbbGVuLTFdID09ICdcbicpCi0JCQkJCWJ1ZltsZW4tMV0gPSAwOwotCQkJCS8qIGlnbm9yZSBlbXB0eSBsaW5lIGxpa2UgZ3JlcCBkb2VzICovCi0JCQkJaWYgKCFidWZbMF0pCi0JCQkJCWNvbnRpbnVlOwotCQkJCWFwcGVuZF9ncmVwX3BhdHRlcm4oJm9wdCwgeHN0cmR1cChidWYpLAotCQkJCQkJICAgIGFyZ3ZbMV0sICsrbG5vLAotCQkJCQkJICAgIEdSRVBfUEFUVEVSTik7Ci0JCQl9Ci0JCQlmY2xvc2UocGF0dGVybnMpOwotCQkJYXJndisrOwotCQkJYXJnYy0tOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoIi0tbm90IiwgYXJnKSkgewotCQkJYXBwZW5kX2dyZXBfcGF0dGVybigmb3B0LCBhcmcsICJjb21tYW5kIGxpbmUiLCAwLAotCQkJCQkgICAgR1JFUF9OT1QpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoIi0tYW5kIiwgYXJnKSkgewotCQkJYXBwZW5kX2dyZXBfcGF0dGVybigmb3B0LCBhcmcsICJjb21tYW5kIGxpbmUiLCAwLAotCQkJCQkgICAgR1JFUF9BTkQpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoIi0tb3IiLCBhcmcpKQotCQkJY29udGludWU7IC8qIG5vLW9wICovCi0JCWlmICghc3RyY21wKCIoIiwgYXJnKSkgewotCQkJYXBwZW5kX2dyZXBfcGF0dGVybigmb3B0LCBhcmcsICJjb21tYW5kIGxpbmUiLCAwLAotCQkJCQkgICAgR1JFUF9PUEVOX1BBUkVOKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKCIpIiwgYXJnKSkgewotCQkJYXBwZW5kX2dyZXBfcGF0dGVybigmb3B0LCBhcmcsICJjb21tYW5kIGxpbmUiLCAwLAotCQkJCQkgICAgR1JFUF9DTE9TRV9QQVJFTik7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcCgiLS1hbGwtbWF0Y2giLCBhcmcpKSB7Ci0JCQlvcHQuYWxsX21hdGNoID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKCItZSIsIGFyZykpIHsKLQkJCWlmICgxIDwgYXJnYykgewotCQkJCWFwcGVuZF9ncmVwX3BhdHRlcm4oJm9wdCwgYXJndlsxXSwKLQkJCQkJCSAgICAiLWUgb3B0aW9uIiwgMCwKLQkJCQkJCSAgICBHUkVQX1BBVFRFUk4pOwotCQkJCWFyZ3YrKzsKLQkJCQlhcmdjLS07Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlkaWUoZW1zZ19taXNzaW5nX2FyZ3VtZW50LCBhcmcpOwotCQl9Ci0JCWlmICghc3RyY21wKCItLWZ1bGwtbmFtZSIsIGFyZykpIHsKLQkJCW9wdC5yZWxhdGl2ZSA9IDA7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcCgiLS1jb2xvciIsIGFyZykpIHsKLQkJCW9wdC5jb2xvciA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcCgiLS1uby1jb2xvciIsIGFyZykpIHsKLQkJCW9wdC5jb2xvciA9IDA7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcCgiLS0iLCBhcmcpKSB7Ci0JCQkvKiBsYXRlciBwcm9jZXNzaW5nIHdhbnRzIHRvIGhhdmUgdGhpcyBhdCBhcmd2WzFdICovCi0JCQlhcmd2LS07Ci0JCQlhcmdjKys7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoKmFyZyA9PSAnLScpCi0JCQl1c2FnZShidWlsdGluX2dyZXBfdXNhZ2UpOwotCi0JCS8qIEZpcnN0IHVucmVjb2duaXplZCBub24tb3B0aW9uIHRva2VuICovCi0JCWlmICghb3B0LnBhdHRlcm5fbGlzdCkgewotCQkJYXBwZW5kX2dyZXBfcGF0dGVybigmb3B0LCBhcmcsICJjb21tYW5kIGxpbmUiLCAwLAotCQkJCQkgICAgR1JFUF9QQVRURVJOKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWVsc2UgewotCQkJLyogV2UgYXJlIGxvb2tpbmcgYXQgdGhlIGZpcnN0IHBhdGggb3IgcmV2OwotCQkJICogaXQgaXMgZm91bmQgYXQgYXJndlsxXSBhZnRlciBsZWF2aW5nIHRoZQotCQkJICogbG9vcC4KLQkJCSAqLwotCQkJYXJnYysrOyBhcmd2LS07Ci0JCQlicmVhazsKLQkJfQorCS8qCisJICogc2tpcCBhIC0tIHNlcGFyYXRvcjsgd2Uga25vdyBpdCBjYW5ub3QgYmUKKwkgKiBzZXBhcmF0aW5nIHJldmlzaW9ucyBmcm9tIHBhdGhuYW1lcyBpZgorCSAqIHdlIGhhdmVuJ3QgZXZlbiBoYWQgYW55IHBhdHRlcm5zIHlldAorCSAqLworCWlmIChhcmdjID4gMCAmJiAhb3B0LnBhdHRlcm5fbGlzdCAmJiAhc3RyY21wKGFyZ3ZbMF0sICItLSIpKSB7CisJCWFyZ3YrKzsKKwkJYXJnYy0tOwogCX0KIAotCWlmIChvcHQuY29sb3IgJiYgIW9wdC5jb2xvcl9leHRlcm5hbCkKLQkJYnVpbHRpbl9ncmVwID0gMTsKKwkvKiBGaXJzdCB1bnJlY29nbml6ZWQgbm9uLW9wdGlvbiB0b2tlbiAqLworCWlmIChhcmdjID4gMCAmJiAhb3B0LnBhdHRlcm5fbGlzdCkgeworCQlhcHBlbmRfZ3JlcF9wYXR0ZXJuKCZvcHQsIGFyZ3ZbMF0sICJjb21tYW5kIGxpbmUiLCAwLAorCQkJCSAgICBHUkVQX1BBVFRFUk4pOworCQlhcmd2Kys7CisJCWFyZ2MtLTsKKwl9CisKIAlpZiAoIW9wdC5wYXR0ZXJuX2xpc3QpCiAJCWRpZSgibm8gcGF0dGVybiBnaXZlbi4iKTsKKwlpZiAoIW9wdC5maXhlZCAmJiBvcHQuaWdub3JlX2Nhc2UpCisJCW9wdC5yZWdmbGFncyB8PSBSRUdfSUNBU0U7CiAJaWYgKChvcHQucmVnZmxhZ3MgIT0gUkVHX05FV0xJTkUpICYmIG9wdC5maXhlZCkKIAkJZGllKCJjYW5ub3QgbWl4IC0tZml4ZWQtc3RyaW5ncyBhbmQgcmVnZXhwIik7CisKKyNpZm5kZWYgTk9fUFRIUkVBRFMKKwlpZiAob25saW5lX2NwdXMoKSA9PSAxIHx8ICFncmVwX3RocmVhZHNfb2soJm9wdCkpCisJCXVzZV90aHJlYWRzID0gMDsKKworCWlmICh1c2VfdGhyZWFkcykKKwkJc3RhcnRfdGhyZWFkcygmb3B0KTsKKyNlbHNlCisJdXNlX3RocmVhZHMgPSAwOworI2VuZGlmCisKIAljb21waWxlX2dyZXBfcGF0dGVybnMoJm9wdCk7CiAKIAkvKiBDaGVjayByZXZzIGFuZCB0aGVuIHBhdGhzICovCi0JZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKIAkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKIAkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKIAkJLyogSXMgaXQgYSByZXY/ICovCkBAIC04NTYsMTUgKzkzMiw4IEBACiAJCQl2ZXJpZnlfZmlsZW5hbWUocHJlZml4LCBhcmd2W2pdKTsKIAl9CiAKLQlpZiAoaSA8IGFyZ2MpIHsKKwlpZiAoaSA8IGFyZ2MpCiAJCXBhdGhzID0gZ2V0X3BhdGhzcGVjKHByZWZpeCwgYXJndiArIGkpOwotCQlpZiAob3B0LnByZWZpeF9sZW5ndGggJiYgb3B0LnJlbGF0aXZlKSB7Ci0JCQkvKiBNYWtlIHN1cmUgd2UgZG8gbm90IGdldCBvdXRzaWRlIG9mIHBhdGhzICovCi0JCQlmb3IgKGkgPSAwOyBwYXRoc1tpXTsgaSsrKQotCQkJCWlmIChzdHJuY21wKHByZWZpeCwgcGF0aHNbaV0sIG9wdC5wcmVmaXhfbGVuZ3RoKSkKLQkJCQkJZGllKCJnaXQgZ3JlcDogY2Fubm90IGdlbmVyYXRlIHJlbGF0aXZlIGZpbGVuYW1lcyBjb250YWluaW5nICcuLiciKTsKLQkJfQotCX0KIAllbHNlIGlmIChwcmVmaXgpIHsKIAkJcGF0aHMgPSB4Y2FsbG9jKDIsIHNpemVvZihjb25zdCBjaGFyICopKTsKIAkJcGF0aHNbMF0gPSBwcmVmaXg7CkBAIC04NzIsOSArOTQxLDE0IEBACiAJfQogCiAJaWYgKCFsaXN0Lm5yKSB7CisJCWludCBoaXQ7CiAJCWlmICghY2FjaGVkKQogCQkJc2V0dXBfd29ya190cmVlKCk7Ci0JCXJldHVybiAhZ3JlcF9jYWNoZSgmb3B0LCBwYXRocywgY2FjaGVkKTsKKworCQloaXQgPSBncmVwX2NhY2hlKCZvcHQsIHBhdGhzLCBjYWNoZWQpOworCQlpZiAodXNlX3RocmVhZHMpCisJCQloaXQgfD0gd2FpdF9hbGwoKTsKKwkJcmV0dXJuICFoaXQ7CiAJfQogCiAJaWYgKGNhY2hlZCkKQEAgLTg4Myw5ICs5NTcsMTUgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbGlzdC5ucjsgaSsrKSB7CiAJCXN0cnVjdCBvYmplY3QgKnJlYWxfb2JqOwogCQlyZWFsX29iaiA9IGRlcmVmX3RhZyhsaXN0Lm9iamVjdHNbaV0uaXRlbSwgTlVMTCwgMCk7Ci0JCWlmIChncmVwX29iamVjdCgmb3B0LCBwYXRocywgcmVhbF9vYmosIGxpc3Qub2JqZWN0c1tpXS5uYW1lKSkKKwkJaWYgKGdyZXBfb2JqZWN0KCZvcHQsIHBhdGhzLCByZWFsX29iaiwgbGlzdC5vYmplY3RzW2ldLm5hbWUpKSB7CiAJCQloaXQgPSAxOworCQkJaWYgKG9wdC5zdGF0dXNfb25seSkKKwkJCQlicmVhazsKKwkJfQogCX0KKworCWlmICh1c2VfdGhyZWFkcykKKwkJaGl0IHw9IHdhaXRfYWxsKCk7CiAJZnJlZV9ncmVwX3BhdHRlcm5zKCZvcHQpOwogCXJldHVybiAhaGl0OwogfQpkaWZmIC0tZ2l0IGEvaGFzaC1vYmplY3QuYyBiL2J1aWx0aW4taGFzaC1vYmplY3QuYwpzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBoYXNoLW9iamVjdC5jCnJlbmFtZSB0byBidWlsdGluLWhhc2gtb2JqZWN0LmMKaW5kZXggZWJiM2JlZC4uNmE1ZjViNSAxMDA2NDQKLS0tIGEvaGFzaC1vYmplY3QuYworKysgYi9idWlsdGluLWhhc2gtb2JqZWN0LmMKQEAgLTI5LDcgKzI5LDcgQEAKIAlpbnQgZmQ7CiAJZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKIAlpZiAoZmQgPCAwKQotCQlkaWUoIkNhbm5vdCBvcGVuICVzIiwgcGF0aCk7CisJCWRpZV9lcnJubygiQ2Fubm90IG9wZW4gJyVzJyIsIHBhdGgpOwogCWhhc2hfZmQoZmQsIHR5cGUsIHdyaXRlX29iamVjdCwgdnBhdGgpOwogfQogCkBAIC03MywxOCArNzMsMTYgQEAKIAlPUFRfRU5EKCkKIH07CiAKLWludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK2ludCBjbWRfaGFzaF9vYmplY3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CiAJaW50IGk7Ci0JY29uc3QgY2hhciAqcHJlZml4ID0gTlVMTDsKIAlpbnQgcHJlZml4X2xlbmd0aCA9IC0xOwogCWNvbnN0IGNoYXIgKmVycnN0ciA9IE5VTEw7CiAKIAl0eXBlID0gYmxvYl90eXBlOwogCi0JZ2l0X2V4dHJhY3RfYXJndjBfcGF0aChhcmd2WzBdKTsKLQotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGhhc2hfb2JqZWN0X29wdGlvbnMsIGhhc2hfb2JqZWN0X3VzYWdlLCAwKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBoYXNoX29iamVjdF9vcHRpb25zLAorCQkJICAgICBoYXNoX29iamVjdF91c2FnZSwgMCk7CiAKIAlpZiAod3JpdGVfb2JqZWN0KSB7CiAJCXByZWZpeCA9IHNldHVwX2dpdF9kaXJlY3RvcnkoKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4taGVscC5jIGIvYnVpbHRpbi1oZWxwLmMKaW5kZXggNjdkZGEzZS4uMzE4MmEyYiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1oZWxwLmMKKysrIGIvYnVpbHRpbi1oZWxwLmMKQEAgLTIzLDEzICsyMywxNCBAQAogfSAqbWFuX3ZpZXdlcl9pbmZvX2xpc3Q7CiAKIGVudW0gaGVscF9mb3JtYXQgeworCUhFTFBfRk9STUFUX05PTkUsCiAJSEVMUF9GT1JNQVRfTUFOLAogCUhFTFBfRk9STUFUX0lORk8sCiAJSEVMUF9GT1JNQVRfV0VCLAogfTsKIAogc3RhdGljIGludCBzaG93X2FsbCA9IDA7Ci1zdGF0aWMgZW51bSBoZWxwX2Zvcm1hdCBoZWxwX2Zvcm1hdCA9IEhFTFBfRk9STUFUX01BTjsKK3N0YXRpYyBlbnVtIGhlbHBfZm9ybWF0IGhlbHBfZm9ybWF0ID0gSEVMUF9GT1JNQVRfTk9ORTsKIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5faGVscF9vcHRpb25zW10gPSB7CiAJT1BUX0JPT0xFQU4oJ2EnLCAiYWxsIiwgJnNob3dfYWxsLCAicHJpbnQgYWxsIGF2YWlsYWJsZSBjb21tYW5kcyIpLAogCU9QVF9TRVRfSU5UKCdtJywgIm1hbiIsICZoZWxwX2Zvcm1hdCwgInNob3cgbWFuIHBhZ2UiLCBIRUxQX0ZPUk1BVF9NQU4pLApAQCAtODAsMTAgKzgxLDkgQEAKIAllY19wcm9jZXNzLmFyZ3YgPSBhcmd2X2VjOwogCWVjX3Byb2Nlc3MuZXJyID0gLTE7CiAJZWNfcHJvY2Vzcy5zdGRvdXRfdG9fc3RkZXJyID0gMTsKLQlpZiAoc3RhcnRfY29tbWFuZCgmZWNfcHJvY2VzcykpIHsKLQkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gc3RhcnQgZW1hY3NjbGllbnQuXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KKwlpZiAoc3RhcnRfY29tbWFuZCgmZWNfcHJvY2VzcykpCisJCXJldHVybiBlcnJvcigiRmFpbGVkIHRvIHN0YXJ0IGVtYWNzY2xpZW50LiIpOworCiAJc3RyYnVmX3JlYWQoJmJ1ZmZlciwgZWNfcHJvY2Vzcy5lcnIsIDIwKTsKIAljbG9zZShlY19wcm9jZXNzLmVycik7CiAKQEAgLTk0LDIwICs5NCwxNyBAQAogCWZpbmlzaF9jb21tYW5kKCZlY19wcm9jZXNzKTsKIAogCWlmIChwcmVmaXhjbXAoYnVmZmVyLmJ1ZiwgImVtYWNzY2xpZW50IikpIHsKLQkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcGFyc2UgZW1hY3NjbGllbnQgdmVyc2lvbi5cbiIpOwogCQlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gZXJyb3IoIkZhaWxlZCB0byBwYXJzZSBlbWFjc2NsaWVudCB2ZXJzaW9uLiIpOwogCX0KIAogCXN0cmJ1Zl9yZW1vdmUoJmJ1ZmZlciwgMCwgc3RybGVuKCJlbWFjc2NsaWVudCIpKTsKIAl2ZXJzaW9uID0gYXRvaShidWZmZXIuYnVmKTsKIAogCWlmICh2ZXJzaW9uIDwgMjIpIHsKLQkJZnByaW50ZihzdGRlcnIsCi0JCQkiZW1hY3NjbGllbnQgdmVyc2lvbiAnJWQnIHRvbyBvbGQgKDwgMjIpLlxuIiwKLQkJCXZlcnNpb24pOwogCQlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gZXJyb3IoImVtYWNzY2xpZW50IHZlcnNpb24gJyVkJyB0b28gb2xkICg8IDIyKS4iLAorCQkJdmVyc2lvbik7CiAJfQogCiAJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7CkBAIC0zNzYsNiArMzczLDcgQEAKIAljb25zdCBjaGFyICpwYWdlID0gY21kX3RvX3BhZ2UoZ2l0X2NtZCk7CiAJc2V0ZW52KCJJTkZPUEFUSCIsIHN5c3RlbV9wYXRoKEdJVF9JTkZPX1BBVEgpLCAxKTsKIAlleGVjbHAoImluZm8iLCAiaW5mbyIsICJnaXRtYW4iLCBwYWdlLCBOVUxMKTsKKwlkaWUoIm5vIGluZm8gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiKTsKIH0KIAogc3RhdGljIHZvaWQgZ2V0X2h0bWxfcGFnZV9wYXRoKHN0cnVjdCBzdHJidWYgKnBhZ2VfcGF0aCwgY29uc3QgY2hhciAqcGFnZSkKQEAgLTM5OCw3ICszOTYsNyBAQAogICogSFRNTC4KICAqLwogI2lmbmRlZiBvcGVuX2h0bWwKLXZvaWQgb3Blbl9odG1sKGNvbnN0IGNoYXIgKnBhdGgpCitzdGF0aWMgdm9pZCBvcGVuX2h0bWwoY29uc3QgY2hhciAqcGF0aCkKIHsKIAlleGVjbF9naXRfY21kKCJ3ZWItLWJyb3dzZSIsICItYyIsICJoZWxwLmJyb3dzZXIiLCBwYXRoLCBOVUxMKTsKIH0KQEAgLTQxOCwxMyArNDE2LDEyIEBACiB7CiAJaW50IG5vbmdpdDsKIAljb25zdCBjaGFyICphbGlhczsKKwllbnVtIGhlbHBfZm9ybWF0IHBhcnNlZF9oZWxwX2Zvcm1hdDsKIAlsb2FkX2NvbW1hbmRfbGlzdCgiZ2l0LSIsICZtYWluX2NtZHMsICZvdGhlcl9jbWRzKTsKIAotCXNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KCZub25naXQpOwotCWdpdF9jb25maWcoZ2l0X2hlbHBfY29uZmlnLCBOVUxMKTsKLQotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGJ1aWx0aW5faGVscF9vcHRpb25zLAorCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgYnVpbHRpbl9oZWxwX29wdGlvbnMsCiAJCQlidWlsdGluX2hlbHBfdXNhZ2UsIDApOworCXBhcnNlZF9oZWxwX2Zvcm1hdCA9IGhlbHBfZm9ybWF0OwogCiAJaWYgKHNob3dfYWxsKSB7CiAJCXByaW50ZigidXNhZ2U6ICVzXG5cbiIsIGdpdF91c2FnZV9zdHJpbmcpOwpAQCAtNDQwLDYgKzQzNywxMiBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwlzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgmbm9uZ2l0KTsKKwlnaXRfY29uZmlnKGdpdF9oZWxwX2NvbmZpZywgTlVMTCk7CisKKwlpZiAocGFyc2VkX2hlbHBfZm9ybWF0ICE9IEhFTFBfRk9STUFUX05PTkUpCisJCWhlbHBfZm9ybWF0ID0gcGFyc2VkX2hlbHBfZm9ybWF0OworCiAJYWxpYXMgPSBhbGlhc19sb29rdXAoYXJndlswXSk7CiAJaWYgKGFsaWFzICYmICFpc19naXRfY29tbWFuZChhcmd2WzBdKSkgewogCQlwcmludGYoImBnaXQgJXMnIGlzIGFsaWFzZWQgdG8gYCVzJ1xuIiwgYXJndlswXSwgYWxpYXMpOwpAQCAtNDQ3LDYgKzQ1MCw3IEBACiAJfQogCiAJc3dpdGNoIChoZWxwX2Zvcm1hdCkgeworCWNhc2UgSEVMUF9GT1JNQVRfTk9ORToKIAljYXNlIEhFTFBfRk9STUFUX01BTjoKIAkJc2hvd19tYW5fcGFnZShhcmd2WzBdKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9pbmRleC1wYWNrLmMgYi9idWlsdGluLWluZGV4LXBhY2suYwpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBpbmRleC1wYWNrLmMKcmVuYW1lIHRvIGJ1aWx0aW4taW5kZXgtcGFjay5jCmluZGV4IDBjOTJiYWYuLmI0Y2Y4YzUgMTAwNjQ0Ci0tLSBhL2luZGV4LXBhY2suYworKysgYi9idWlsdGluLWluZGV4LXBhY2suYwpAQCAtMTQzLDcgKzE0Myw3IEBACiAJCWlmIChyZXQgPD0gMCkgewogCQkJaWYgKCFyZXQpCiAJCQkJZGllKCJlYXJseSBFT0YiKTsKLQkJCWRpZSgicmVhZCBlcnJvciBvbiBpbnB1dDogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJyZWFkIGVycm9yIG9uIGlucHV0Iik7CiAJCX0KIAkJaW5wdXRfbGVuICs9IHJldDsKIAkJaWYgKGZyb21fc3RkaW4pCkBAIC0xNjYsNyArMTY2LDcgQEAKIAljb25zdW1lZF9ieXRlcyArPSBieXRlczsKIH0KIAotc3RhdGljIGNoYXIgKm9wZW5fcGFja19maWxlKGNoYXIgKnBhY2tfbmFtZSkKK3N0YXRpYyBjb25zdCBjaGFyICpvcGVuX3BhY2tfZmlsZShjb25zdCBjaGFyICpwYWNrX25hbWUpCiB7CiAJaWYgKGZyb21fc3RkaW4pIHsKIAkJaW5wdXRfZmQgPSAwOwpAQCAtMTc4LDEzICsxNzgsMTIgQEAKIAkJfSBlbHNlCiAJCQlvdXRwdXRfZmQgPSBvcGVuKHBhY2tfbmFtZSwgT19DUkVBVHxPX0VYQ0x8T19SRFdSLCAwNjAwKTsKIAkJaWYgKG91dHB1dF9mZCA8IDApCi0JCQlkaWUoInVuYWJsZSB0byBjcmVhdGUgJXM6ICVzIiwgcGFja19uYW1lLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gY3JlYXRlICclcyciLCBwYWNrX25hbWUpOwogCQlwYWNrX2ZkID0gb3V0cHV0X2ZkOwogCX0gZWxzZSB7CiAJCWlucHV0X2ZkID0gb3BlbihwYWNrX25hbWUsIE9fUkRPTkxZKTsKIAkJaWYgKGlucHV0X2ZkIDwgMCkKLQkJCWRpZSgiY2Fubm90IG9wZW4gcGFja2ZpbGUgJyVzJzogJXMiLAotCQkJICAgIHBhY2tfbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygiY2Fubm90IG9wZW4gcGFja2ZpbGUgJyVzJyIsIHBhY2tfbmFtZSk7CiAJCW91dHB1dF9mZCA9IC0xOwogCQlwYWNrX2ZkID0gaW5wdXRfZmQ7CiAJfQpAQCAtMjA3LDggKzIwNiw4IEBACiAJdXNlKHNpemVvZihzdHJ1Y3QgcGFja19oZWFkZXIpKTsKIH0KIAotc3RhdGljIHZvaWQgYmFkX29iamVjdCh1bnNpZ25lZCBsb25nIG9mZnNldCwgY29uc3QgY2hhciAqZm9ybWF0LAotCQkgICAgICAgLi4uKSBOT1JFVFVSTiBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKK3N0YXRpYyBOT1JFVFVSTiB2b2lkIGJhZF9vYmplY3QodW5zaWduZWQgbG9uZyBvZmZzZXQsIGNvbnN0IGNoYXIgKmZvcm1hdCwKKwkJICAgICAgIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7CiAKIHN0YXRpYyB2b2lkIGJhZF9vYmplY3QodW5zaWduZWQgbG9uZyBvZmZzZXQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogewpAQCAtMzcwLDcgKzM2OSw3IEBACiAJZG8gewogCQlzc2l6ZV90IG4gPSBwcmVhZChwYWNrX2ZkLCBkYXRhICsgcmR5LCBsZW4gLSByZHksIGZyb20gKyByZHkpOwogCQlpZiAobiA8IDApCi0JCQlkaWUoImNhbm5vdCBwcmVhZCBwYWNrIGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygiY2Fubm90IHByZWFkIHBhY2sgZmlsZSIpOwogCQlpZiAoIW4pCiAJCQlkaWUoInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlbHUgYnl0ZXMgbWlzc2luZyIsCiAJCQkgICAgbGVuIC0gcmR5KTsKQEAgLTQ2OSw3ICs0NjgsNyBAQAogCQkJCWRpZSgiaW52YWxpZCAlcyIsIHR5cGVuYW1lKHR5cGUpKTsKIAkJCWlmIChmc2NrX29iamVjdChvYmosIDEsIGZzY2tfZXJyb3JfZnVuY3Rpb24pKQogCQkJCWRpZSgiRXJyb3IgaW4gb2JqZWN0Iik7Ci0JCQlpZiAoZnNja193YWxrKG9iaiwgbWFya19saW5rLCAwKSkKKwkJCWlmIChmc2NrX3dhbGsob2JqLCBtYXJrX2xpbmssIE5VTEwpKQogCQkJCWRpZSgiTm90IGFsbCBjaGlsZCBvYmplY3RzIG9mICVzIGFyZSByZWFjaGFibGUiLCBzaGExX3RvX2hleChvYmotPnNoYTEpKTsKIAogCQkJaWYgKG9iai0+dHlwZSA9PSBPQkpfVFJFRSkgewpAQCAtNjMxLDcgKzYzMCw3IEBACiAKIAkvKiBJZiBpbnB1dF9mZCBpcyBhIGZpbGUsIHdlIHNob3VsZCBoYXZlIHJlYWNoZWQgaXRzIGVuZCBub3cuICovCiAJaWYgKGZzdGF0KGlucHV0X2ZkLCAmc3QpKQotCQlkaWUoImNhbm5vdCBmc3RhdCBwYWNrZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImNhbm5vdCBmc3RhdCBwYWNrZmlsZSIpOwogCWlmIChTX0lTUkVHKHN0LnN0X21vZGUpICYmCiAJCQlsc2VlayhpbnB1dF9mZCwgMCwgU0VFS19DVVIpIC0gaW5wdXRfbGVuICE9IHN0LnN0X3NpemUpCiAJCWRpZSgicGFjayBoYXMganVuayBhdCB0aGUgZW5kIik7CkBAIC03ODgsNyArNzg3LDcgQEAKIAkJZnN5bmNfb3JfZGllKG91dHB1dF9mZCwgY3Vycl9wYWNrX25hbWUpOwogCQllcnIgPSBjbG9zZShvdXRwdXRfZmQpOwogCQlpZiAoZXJyKQotCQkJZGllKCJlcnJvciB3aGlsZSBjbG9zaW5nIHBhY2sgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJlcnJvciB3aGlsZSBjbG9zaW5nIHBhY2sgZmlsZSIpOwogCX0KIAogCWlmIChrZWVwX21zZykgewpAQCAtODAxLDE2ICs4MDAsMTYgQEAKIAogCQlpZiAoa2VlcF9mZCA8IDApIHsKIAkJCWlmIChlcnJubyAhPSBFRVhJU1QpCi0JCQkJZGllKCJjYW5ub3Qgd3JpdGUga2VlcCBmaWxlICclcycgKCVzKSIsCi0JCQkJICAgIGtlZXBfbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQlkaWVfZXJybm8oImNhbm5vdCB3cml0ZSBrZWVwIGZpbGUgJyVzJyIsCisJCQkJCSAga2VlcF9uYW1lKTsKIAkJfSBlbHNlIHsKIAkJCWlmIChrZWVwX21zZ19sZW4gPiAwKSB7CiAJCQkJd3JpdGVfb3JfZGllKGtlZXBfZmQsIGtlZXBfbXNnLCBrZWVwX21zZ19sZW4pOwogCQkJCXdyaXRlX29yX2RpZShrZWVwX2ZkLCAiXG4iLCAxKTsKIAkJCX0KIAkJCWlmIChjbG9zZShrZWVwX2ZkKSAhPSAwKQotCQkJCWRpZSgiY2Fubm90IGNsb3NlIHdyaXR0ZW4ga2VlcCBmaWxlICclcycgKCVzKSIsCi0JCQkJICAgIGtlZXBfbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQlkaWVfZXJybm8oImNhbm5vdCBjbG9zZSB3cml0dGVuIGtlZXAgZmlsZSAnJXMnIiwKKwkJCQkgICAga2VlcF9uYW1lKTsKIAkJCXJlcG9ydCA9ICJrZWVwIjsKIAkJfQogCX0KQEAgLTg3MSwxNyArODcwLDE4IEBACiAJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyhrLCB2LCBjYik7CiB9CiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK2ludCBjbWRfaW5kZXhfcGFjayhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKIAlpbnQgaSwgZml4X3RoaW5fcGFjayA9IDA7Ci0JY2hhciAqY3Vycl9wYWNrLCAqcGFja19uYW1lID0gTlVMTDsKLQljaGFyICpjdXJyX2luZGV4LCAqaW5kZXhfbmFtZSA9IE5VTEw7CisJY29uc3QgY2hhciAqY3Vycl9wYWNrLCAqY3Vycl9pbmRleDsKKwljb25zdCBjaGFyICppbmRleF9uYW1lID0gTlVMTCwgKnBhY2tfbmFtZSA9IE5VTEw7CiAJY29uc3QgY2hhciAqa2VlcF9uYW1lID0gTlVMTCwgKmtlZXBfbXNnID0gTlVMTDsKIAljaGFyICppbmRleF9uYW1lX2J1ZiA9IE5VTEwsICprZWVwX25hbWVfYnVmID0gTlVMTDsKIAlzdHJ1Y3QgcGFja19pZHhfZW50cnkgKippZHhfb2JqZWN0czsKIAl1bnNpZ25lZCBjaGFyIHBhY2tfc2hhMVsyMF07CiAKLQlnaXRfZXh0cmFjdF9hcmd2MF9wYXRoKGFyZ3ZbMF0pOworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2UoaW5kZXhfcGFja191c2FnZSk7CiAKIAkvKgogCSAqIFdlIHdpc2ggdG8gcmVhZCB0aGUgcmVwb3NpdG9yeSdzIGNvbmZpZyBmaWxlIGlmIGFueSwgYW5kCkBAIC05MDQsNyArOTA0LDcgQEAKIAl9CiAKIAlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7Ci0JCWNoYXIgKmFyZyA9IGFyZ3ZbaV07CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CiAKIAkJaWYgKCphcmcgPT0gJy0nKSB7CiAJCQlpZiAoIXN0cmNtcChhcmcsICItLXN0ZGluIikpIHsKQEAgLTEwMzcsOSArMTAzNyw5IEBACiAJZnJlZShpbmRleF9uYW1lX2J1Zik7CiAJZnJlZShrZWVwX25hbWVfYnVmKTsKIAlpZiAocGFja19uYW1lID09IE5VTEwpCi0JCWZyZWUoY3Vycl9wYWNrKTsKKwkJZnJlZSgodm9pZCAqKSBjdXJyX3BhY2spOwogCWlmIChpbmRleF9uYW1lID09IE5VTEwpCi0JCWZyZWUoY3Vycl9pbmRleCk7CisJCWZyZWUoKHZvaWQgKikgY3Vycl9pbmRleCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2J1aWx0aW4taW5pdC1kYi5jIGIvYnVpbHRpbi1pbml0LWRiLmMKaW5kZXggZDFmYTEyYS4uZGQ4NGNhZSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1pbml0LWRiLmMKKysrIGIvYnVpbHRpbi1pbml0LWRiLmMKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlICJidWlsdGluLmgiCiAjaW5jbHVkZSAiZXhlY19jbWQuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCiAKICNpZm5kZWYgREVGQVVMVF9HSVRfVEVNUExBVEVfRElSCiAjZGVmaW5lIERFRkFVTFRfR0lUX1RFTVBMQVRFX0RJUiAiL3Vzci9zaGFyZS9naXQtY29yZS90ZW1wbGF0ZXMiCkBAIC02MSwyMCArNjIsMjAgQEAKIAkJbWVtY3B5KHRlbXBsYXRlICsgdGVtcGxhdGVfYmFzZWxlbiwgZGUtPmRfbmFtZSwgbmFtZWxlbisxKTsKIAkJaWYgKGxzdGF0KHBhdGgsICZzdF9naXQpKSB7CiAJCQlpZiAoZXJybm8gIT0gRU5PRU5UKQotCQkJCWRpZSgiY2Fubm90IHN0YXQgJXMiLCBwYXRoKTsKKwkJCQlkaWVfZXJybm8oImNhbm5vdCBzdGF0ICclcyciLCBwYXRoKTsKIAkJfQogCQllbHNlCiAJCQlleGlzdHMgPSAxOwogCiAJCWlmIChsc3RhdCh0ZW1wbGF0ZSwgJnN0X3RlbXBsYXRlKSkKLQkJCWRpZSgiY2Fubm90IHN0YXQgdGVtcGxhdGUgJXMiLCB0ZW1wbGF0ZSk7CisJCQlkaWVfZXJybm8oImNhbm5vdCBzdGF0IHRlbXBsYXRlICclcyciLCB0ZW1wbGF0ZSk7CiAKIAkJaWYgKFNfSVNESVIoc3RfdGVtcGxhdGUuc3RfbW9kZSkpIHsKIAkJCURJUiAqc3ViZGlyID0gb3BlbmRpcih0ZW1wbGF0ZSk7CiAJCQlpbnQgYmFzZWxlbl9zdWIgPSBiYXNlbGVuICsgbmFtZWxlbjsKIAkJCWludCB0ZW1wbGF0ZV9iYXNlbGVuX3N1YiA9IHRlbXBsYXRlX2Jhc2VsZW4gKyBuYW1lbGVuOwogCQkJaWYgKCFzdWJkaXIpCi0JCQkJZGllKCJjYW5ub3Qgb3BlbmRpciAlcyIsIHRlbXBsYXRlKTsKKwkJCQlkaWVfZXJybm8oImNhbm5vdCBvcGVuZGlyICclcyciLCB0ZW1wbGF0ZSk7CiAJCQlwYXRoW2Jhc2VsZW5fc3ViKytdID0KIAkJCQl0ZW1wbGF0ZVt0ZW1wbGF0ZV9iYXNlbGVuX3N1YisrXSA9ICcvJzsKIAkJCXBhdGhbYmFzZWxlbl9zdWJdID0KQEAgLTkxLDE2ICs5MiwxNyBAQAogCQkJaW50IGxlbjsKIAkJCWxlbiA9IHJlYWRsaW5rKHRlbXBsYXRlLCBsbmssIHNpemVvZihsbmspKTsKIAkJCWlmIChsZW4gPCAwKQotCQkJCWRpZSgiY2Fubm90IHJlYWRsaW5rICVzIiwgdGVtcGxhdGUpOworCQkJCWRpZV9lcnJubygiY2Fubm90IHJlYWRsaW5rICclcyciLCB0ZW1wbGF0ZSk7CiAJCQlpZiAoc2l6ZW9mKGxuaykgPD0gbGVuKQogCQkJCWRpZSgiaW5zYW5lbHkgbG9uZyBzeW1saW5rICVzIiwgdGVtcGxhdGUpOwogCQkJbG5rW2xlbl0gPSAwOwogCQkJaWYgKHN5bWxpbmsobG5rLCBwYXRoKSkKLQkJCQlkaWUoImNhbm5vdCBzeW1saW5rICVzICVzIiwgbG5rLCBwYXRoKTsKKwkJCQlkaWVfZXJybm8oImNhbm5vdCBzeW1saW5rICclcycgJyVzJyIsIGxuaywgcGF0aCk7CiAJCX0KIAkJZWxzZSBpZiAoU19JU1JFRyhzdF90ZW1wbGF0ZS5zdF9tb2RlKSkgewogCQkJaWYgKGNvcHlfZmlsZShwYXRoLCB0ZW1wbGF0ZSwgc3RfdGVtcGxhdGUuc3RfbW9kZSkpCi0JCQkJZGllKCJjYW5ub3QgY29weSAlcyB0byAlcyIsIHRlbXBsYXRlLCBwYXRoKTsKKwkJCQlkaWVfZXJybm8oImNhbm5vdCBjb3B5ICclcycgdG8gJyVzJyIsIHRlbXBsYXRlLAorCQkJCQkgIHBhdGgpOwogCQl9CiAJCWVsc2UKIAkJCWVycm9yKCJpZ25vcmluZyB0ZW1wbGF0ZSAlcyIsIHRlbXBsYXRlKTsKQEAgLTM1MCw3ICszNTIsNyBAQAogCWlmICghc3RyY21wKCIuIiwgZ2l0X2RpcikpCiAJCXJldHVybiAxOwogCWlmICghZ2V0Y3dkKGN3ZCwgc2l6ZW9mKGN3ZCkpKQotCQlkaWUoImNhbm5vdCB0ZWxsIGN3ZCIpOworCQlkaWVfZXJybm8oImNhbm5vdCB0ZWxsIGN3ZCIpOwogCWlmICghc3RyY21wKGdpdF9kaXIsIGN3ZCkpCiAJCXJldHVybiAxOwogCS8qCkBAIC0zNjksOCArMzcxLDE2IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyIGluaXRfZGJfdXNhZ2VbXSA9Ci0iZ2l0IGluaXQgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9PHRlbXBsYXRlLWRpcmVjdG9yeT5dIFstLXNoYXJlZFs9PHBlcm1pc3Npb25zPl1dIjsKK3N0YXRpYyBpbnQgc2hhcmVkX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJKigoaW50ICopIG9wdC0+dmFsdWUpID0gKGFyZykgPyBnaXRfY29uZmlnX3Blcm0oImFyZyIsIGFyZykgOiBQRVJNX0dST1VQOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgaW5pdF9kYl91c2FnZVtdID0geworCSJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08dGVtcGxhdGUtZGlyZWN0b3J5Pl0gWy0tc2hhcmVkWz08cGVybWlzc2lvbnM+XV0gW2RpcmVjdG9yeV0iLAorCU5VTEwKK307CiAKIC8qCiAgKiBJZiB5b3Ugd2FudCB0bywgeW91IGNhbiBzaGFyZSB0aGUgREIgYXJlYSB3aXRoIGFueSBudW1iZXIgb2YgYnJhbmNoZXMuCkBAIC0zODMsMjUgKzM5Myw2MCBAQAogCWNvbnN0IGNoYXIgKmdpdF9kaXI7CiAJY29uc3QgY2hhciAqdGVtcGxhdGVfZGlyID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOwotCWludCBpOworCWNvbnN0IHN0cnVjdCBvcHRpb24gaW5pdF9kYl9vcHRpb25zW10gPSB7CisJCU9QVF9TVFJJTkcoMCwgInRlbXBsYXRlIiwgJnRlbXBsYXRlX2RpciwgInRlbXBsYXRlLWRpcmVjdG9yeSIsCisJCQkJInByb3ZpZGUgdGhlIGRpcmVjdG9yeSBmcm9tIHdoaWNoIHRlbXBsYXRlcyB3aWxsIGJlIHVzZWQiKSwKKwkJT1BUX1NFVF9JTlQoMCwgImJhcmUiLCAmaXNfYmFyZV9yZXBvc2l0b3J5X2NmZywKKwkJCQkiY3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5IiwgMSksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAic2hhcmVkIiwgJmluaXRfc2hhcmVkX3JlcG9zaXRvcnksCisJCQkicGVybWlzc2lvbnMiLAorCQkJInNwZWNpZnkgdGhhdCB0aGUgZ2l0IHJlcG9zaXRvcnkgaXMgdG8gYmUgc2hhcmVkIGFtb25nc3Qgc2V2ZXJhbCB1c2VycyIsCisJCQlQQVJTRV9PUFRfT1BUQVJHIHwgUEFSU0VfT1BUX05PTkVHLCBzaGFyZWRfY2FsbGJhY2ssIDB9LAorCQlPUFRfQklUKCdxJywgInF1aWV0IiwgJmZsYWdzLCAiYmUgcXVpZXQiLCBJTklUX0RCX1FVSUVUKSwKKwkJT1BUX0VORCgpCisJfTsKIAotCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyssIGFyZ3YrKykgewotCQljb25zdCBjaGFyICphcmcgPSBhcmd2WzFdOwotCQlpZiAoIXByZWZpeGNtcChhcmcsICItLXRlbXBsYXRlPSIpKQotCQkJdGVtcGxhdGVfZGlyID0gYXJnKzExOwotCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tYmFyZSIpKSB7Ci0JCQlzdGF0aWMgY2hhciBnaXRfZGlyW1BBVEhfTUFYKzFdOwotCQkJaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyA9IDE7Ci0JCQlzZXRlbnYoR0lUX0RJUl9FTlZJUk9OTUVOVCwgZ2V0Y3dkKGdpdF9kaXIsCi0JCQkJCQlzaXplb2YoZ2l0X2RpcikpLCAwKTsKLQkJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tc2hhcmVkIikpCi0JCQlpbml0X3NoYXJlZF9yZXBvc2l0b3J5ID0gUEVSTV9HUk9VUDsKLQkJZWxzZSBpZiAoIXByZWZpeGNtcChhcmcsICItLXNoYXJlZD0iKSkKLQkJCWluaXRfc2hhcmVkX3JlcG9zaXRvcnkgPSBnaXRfY29uZmlnX3Blcm0oImFyZyIsIGFyZys5KTsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItcSIpIHx8ICFzdHJjbXAoYXJnLCAiLS1xdWlldCIpKQotCQkJZmxhZ3MgfD0gSU5JVF9EQl9RVUlFVDsKLQkJZWxzZQotCQkJdXNhZ2UoaW5pdF9kYl91c2FnZSk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBpbml0X2RiX29wdGlvbnMsIGluaXRfZGJfdXNhZ2UsIDApOworCisJaWYgKGFyZ2MgPT0gMSkgeworCQlpbnQgbWtkaXJfdHJpZWQgPSAwOworCXJldHJ5OgorCQlpZiAoY2hkaXIoYXJndlswXSkgPCAwKSB7CisJCQlpZiAoIW1rZGlyX3RyaWVkKSB7CisJCQkJaW50IHNhdmVkOworCQkJCS8qCisJCQkJICogQXQgdGhpcyBwb2ludCB3ZSBoYXZlbid0IHJlYWQgYW55IGNvbmZpZ3VyYXRpb24sCisJCQkJICogYW5kIHdlIGtub3cgc2hhcmVkX3JlcG9zaXRvcnkgc2hvdWxkIGFsd2F5cyBiZSAwOworCQkJCSAqIGJ1dCBqdXN0IGluIGNhc2Ugd2UgcGxheSBzYWZlLgorCQkJCSAqLworCQkJCXNhdmVkID0gc2hhcmVkX3JlcG9zaXRvcnk7CisJCQkJc2hhcmVkX3JlcG9zaXRvcnkgPSAwOworCQkJCXN3aXRjaCAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChhcmd2WzBdKSkgeworCQkJCWNhc2UgLTM6CisJCQkJCWVycm5vID0gRUVYSVNUOworCQkJCQkvKiBmYWxsdGhydSAqLworCQkJCWNhc2UgLTE6CisJCQkJCWRpZV9lcnJubygiY2Fubm90IG1rZGlyICVzIiwgYXJndlswXSk7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlzaGFyZWRfcmVwb3NpdG9yeSA9IHNhdmVkOworCQkJCWlmIChta2Rpcihhcmd2WzBdLCAwNzc3KSA8IDApCisJCQkJCWRpZV9lcnJubygiY2Fubm90IG1rZGlyICVzIiwgYXJndlswXSk7CisJCQkJbWtkaXJfdHJpZWQgPSAxOworCQkJCWdvdG8gcmV0cnk7CisJCQl9CisJCQlkaWVfZXJybm8oImNhbm5vdCBjaGRpciB0byAlcyIsIGFyZ3ZbMF0pOworCQl9CisJfSBlbHNlIGlmICgwIDwgYXJnYykgeworCQl1c2FnZShpbml0X2RiX3VzYWdlWzBdKTsKKwl9CisJaWYgKGlzX2JhcmVfcmVwb3NpdG9yeV9jZmcgPT0gMSkgeworCQlzdGF0aWMgY2hhciBnaXRfZGlyW1BBVEhfTUFYKzFdOworCisJCXNldGVudihHSVRfRElSX0VOVklST05NRU5ULAorCQkJZ2V0Y3dkKGdpdF9kaXIsIHNpemVvZihnaXRfZGlyKSksIDApOwogCX0KIAogCWlmIChpbml0X3NoYXJlZF9yZXBvc2l0b3J5ICE9IC0xKQpAQCAtNDQwLDExICs0ODUsMTEgQEAKIAkJaWYgKCFnaXRfd29ya190cmVlX2NmZykgewogCQkJZ2l0X3dvcmtfdHJlZV9jZmcgPSB4Y2FsbG9jKFBBVEhfTUFYLCAxKTsKIAkJCWlmICghZ2V0Y3dkKGdpdF93b3JrX3RyZWVfY2ZnLCBQQVRIX01BWCkpCi0JCQkJZGllICgiQ2Fubm90IGFjY2VzcyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiIpOworCQkJCWRpZV9lcnJubyAoIkNhbm5vdCBhY2Nlc3MgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIpOwogCQl9CiAJCWlmIChhY2Nlc3MoZ2V0X2dpdF93b3JrX3RyZWUoKSwgWF9PSykpCi0JCQlkaWUgKCJDYW5ub3QgYWNjZXNzIHdvcmsgdHJlZSAnJXMnIiwKLQkJCSAgICAgZ2V0X2dpdF93b3JrX3RyZWUoKSk7CisJCQlkaWVfZXJybm8gKCJDYW5ub3QgYWNjZXNzIHdvcmsgdHJlZSAnJXMnIiwKKwkJCQkgICBnZXRfZ2l0X3dvcmtfdHJlZSgpKTsKIAl9CiAKIAlzZXRfZ2l0X2RpcihtYWtlX2Fic29sdXRlX3BhdGgoZ2l0X2RpcikpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1sb2cuYyBiL2J1aWx0aW4tbG9nLmMKaW5kZXggZjEwY2ZlYi4uNzY5NjJlMSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1sb2cuYworKysgYi9idWlsdGluLWxvZy5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSAic2hvcnRsb2cuaCIKICNpbmNsdWRlICJyZW1vdGUuaCIKICNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKIAogLyogU2V0IGEgZGVmYXVsdCBkYXRlLXRpbWUgZm9ybWF0IGZvciBnaXQgbG9nICgibG9nLmRhdGUiIGNvbmZpZyB2YXJpYWJsZSkgKi8KIHN0YXRpYyBjb25zdCBjaGFyICpkZWZhdWx0X2RhdGVfbW9kZSA9IE5VTEw7CkBAIC0yNiwxMCArMjcsMTUgQEAKIHN0YXRpYyBjb25zdCBjaGFyICpmbXRfcGF0Y2hfc3ViamVjdF9wcmVmaXggPSAiUEFUQ0giOwogc3RhdGljIGNvbnN0IGNoYXIgKmZtdF9wcmV0dHk7CiAKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9sb2dfdXNhZ2UgPQorCSJnaXQgbG9nIFs8b3B0aW9ucz5dIFs8c2luY2U+Li48dW50aWw+XSBbWy0tXSA8cGF0aD4uLi5dXG4iCisJIiAgIG9yOiBnaXQgc2hvdyBbb3B0aW9uc10gPG9iamVjdD4uLi4iOworCiBzdGF0aWMgdm9pZCBjbWRfbG9nX2luaXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgsCiAJCSAgICAgIHN0cnVjdCByZXZfaW5mbyAqcmV2KQogewogCWludCBpOworCWludCBkZWNvcmF0aW9uX3N0eWxlID0gMDsKIAogCXJldi0+YWJicmV2ID0gREVGQVVMVF9BQkJSRVY7CiAJcmV2LT5jb21taXRfZm9ybWF0ID0gQ01JVF9GTVRfREVGQVVMVDsKQEAgLTQ0LDggKzUwLDE3IEBACiAJaWYgKGRlZmF1bHRfZGF0ZV9tb2RlKQogCQlyZXYtPmRhdGVfbW9kZSA9IHBhcnNlX2RhdGVfZm9ybWF0KGRlZmF1bHRfZGF0ZV9tb2RlKTsKIAorCS8qCisJICogQ2hlY2sgZm9yIC1oIGJlZm9yZSBzZXR1cF9yZXZpc2lvbnMoKSwgb3IgImdpdCBsb2cgLWgiIHdpbGwKKwkgKiBmYWlsIHdoZW4gcnVuIHdpdGhvdXQgYSBnaXQgZGlyZWN0b3J5LgorCSAqLworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2UoYnVpbHRpbl9sb2dfdXNhZ2UpOwogCWFyZ2MgPSBzZXR1cF9yZXZpc2lvbnMoYXJnYywgYXJndiwgcmV2LCAiSEVBRCIpOwogCisJaWYgKCFyZXYtPnNob3dfbm90ZXNfZ2l2ZW4gJiYgIXJldi0+cHJldHR5X2dpdmVuKQorCQlyZXYtPnNob3dfbm90ZXMgPSAxOworCiAJaWYgKHJldi0+ZGlmZm9wdC5waWNrYXhlIHx8IHJldi0+ZGlmZm9wdC5maWx0ZXIpCiAJCXJldi0+YWx3YXlzX3Nob3dfaGVhZGVyID0gMDsKIAlpZiAoRElGRl9PUFRfVFNUKCZyZXYtPmRpZmZvcHQsIEZPTExPV19SRU5BTUVTKSkgewpAQCAtNTYsMTMgKzcxLDI2IEBACiAJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgewogCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOwogCQlpZiAoIXN0cmNtcChhcmcsICItLWRlY29yYXRlIikpIHsKLQkJCWxvYWRfcmVmX2RlY29yYXRpb25zKCk7Ci0JCQlyZXYtPnNob3dfZGVjb3JhdGlvbnMgPSAxOworCQkJZGVjb3JhdGlvbl9zdHlsZSA9IERFQ09SQVRFX1NIT1JUX1JFRlM7CisJCX0gZWxzZSBpZiAoIXByZWZpeGNtcChhcmcsICItLWRlY29yYXRlPSIpKSB7CisJCQljb25zdCBjaGFyICp2ID0gc2tpcF9wcmVmaXgoYXJnLCAiLS1kZWNvcmF0ZT0iKTsKKwkJCWlmICghc3RyY21wKHYsICJmdWxsIikpCisJCQkJZGVjb3JhdGlvbl9zdHlsZSA9IERFQ09SQVRFX0ZVTExfUkVGUzsKKwkJCWVsc2UgaWYgKCFzdHJjbXAodiwgInNob3J0IikpCisJCQkJZGVjb3JhdGlvbl9zdHlsZSA9IERFQ09SQVRFX1NIT1JUX1JFRlM7CisJCQllbHNlCisJCQkJZGllKCJpbnZhbGlkIC0tZGVjb3JhdGUgb3B0aW9uOiAlcyIsIGFyZyk7CiAJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXNvdXJjZSIpKSB7CiAJCQlyZXYtPnNob3dfc291cmNlID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi1oIikpIHsKKwkJCXVzYWdlKGJ1aWx0aW5fbG9nX3VzYWdlKTsKIAkJfSBlbHNlCiAJCQlkaWUoInVucmVjb2duaXplZCBhcmd1bWVudDogJXMiLCBhcmcpOwogCX0KKwlpZiAoZGVjb3JhdGlvbl9zdHlsZSkgeworCQlyZXYtPnNob3dfZGVjb3JhdGlvbnMgPSAxOworCQlsb2FkX3JlZl9kZWNvcmF0aW9ucyhkZWNvcmF0aW9uX3N0eWxlKTsKKwl9CiB9CiAKIC8qCkBAIC05Myw3ICsxMjEsNyBAQAogCXByaW50ZigiRmluYWwgb3V0cHV0OiAlZCAlc1xuIiwgbnIsIHN0YWdlKTsKIH0KIAotc3RydWN0IGl0aW1lcnZhbCBlYXJseV9vdXRwdXRfdGltZXI7CitzdGF0aWMgc3RydWN0IGl0aW1lcnZhbCBlYXJseV9vdXRwdXRfdGltZXI7CiAKIHN0YXRpYyB2b2lkIGxvZ19zaG93X2Vhcmx5KHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0KQogewpAQCAtMjU2LDcgKzI4NCw3IEBACiAJcHBfdXNlcl9pbmZvKCJUYWdnZXIiLCByZXYtPmNvbW1pdF9mb3JtYXQsICZvdXQsIGJ1ZiwgcmV2LT5kYXRlX21vZGUsCiAJCWdpdF9sb2dfb3V0cHV0X2VuY29kaW5nID8KIAkJZ2l0X2xvZ19vdXRwdXRfZW5jb2Rpbmc6IGdpdF9jb21taXRfZW5jb2RpbmcpOwotCXByaW50ZigiJXNcbiIsIG91dC5idWYpOworCXByaW50ZigiJXMiLCBvdXQuYnVmKTsKIAlzdHJidWZfcmVsZWFzZSgmb3V0KTsKIH0KIApAQCAtMzI4LDExICszNTYsMTQgQEAKIAkJY2FzZSBPQkpfVEFHOiB7CiAJCQlzdHJ1Y3QgdGFnICp0ID0gKHN0cnVjdCB0YWcgKilvOwogCisJCQlpZiAocmV2LnNob3duX29uZSkKKwkJCQlwdXRjaGFyKCdcbicpOwogCQkJcHJpbnRmKCIlc3RhZyAlcyVzXG4iLAogCQkJCQlkaWZmX2dldF9jb2xvcl9vcHQoJnJldi5kaWZmb3B0LCBESUZGX0NPTU1JVCksCiAJCQkJCXQtPnRhZywKIAkJCQkJZGlmZl9nZXRfY29sb3Jfb3B0KCZyZXYuZGlmZm9wdCwgRElGRl9SRVNFVCkpOwogCQkJcmV0ID0gc2hvd19vYmplY3Qoby0+c2hhMSwgMSwgJnJldik7CisJCQlyZXYuc2hvd25fb25lID0gMTsKIAkJCWlmIChyZXQpCiAJCQkJYnJlYWs7CiAJCQlvID0gcGFyc2Vfb2JqZWN0KHQtPnRhZ2dlZC0+c2hhMSk7CkBAIC0zNDQsMTIgKzM3NSwxNSBAQAogCQkJYnJlYWs7CiAJCX0KIAkJY2FzZSBPQkpfVFJFRToKKwkJCWlmIChyZXYuc2hvd25fb25lKQorCQkJCXB1dGNoYXIoJ1xuJyk7CiAJCQlwcmludGYoIiVzdHJlZSAlcyVzXG5cbiIsCiAJCQkJCWRpZmZfZ2V0X2NvbG9yX29wdCgmcmV2LmRpZmZvcHQsIERJRkZfQ09NTUlUKSwKIAkJCQkJbmFtZSwKIAkJCQkJZGlmZl9nZXRfY29sb3Jfb3B0KCZyZXYuZGlmZm9wdCwgRElGRl9SRVNFVCkpOwogCQkJcmVhZF90cmVlX3JlY3Vyc2l2ZSgoc3RydWN0IHRyZWUgKilvLCAiIiwgMCwgMCwgTlVMTCwKIAkJCQkJc2hvd190cmVlX29iamVjdCwgTlVMTCk7CisJCQlyZXYuc2hvd25fb25lID0gMTsKIAkJCWJyZWFrOwogCQljYXNlIE9CSl9DT01NSVQ6CiAJCQlyZXYucGVuZGluZy5uciA9IHJldi5wZW5kaW5nLmFsbG9jID0gMDsKQEAgLTUzNiw3ICs1NzAsNyBAQAogCiAJZ2V0X3BhdGNoX2ZpbGVuYW1lKGNvbW1pdCwgcmV2LT5uciwgZm10X3BhdGNoX3N1ZmZpeCwgJmZpbGVuYW1lKTsKIAotCWlmICghRElGRl9PUFRfVFNUKCZyZXYtPmRpZmZvcHQsIFFVSUVUKSkKKwlpZiAoIURJRkZfT1BUX1RTVCgmcmV2LT5kaWZmb3B0LCBRVUlDSykpCiAJCWZwcmludGYocmVhbHN0ZG91dCwgIiVzXG4iLCBmaWxlbmFtZS5idWYgKyBvdXRkaXJfb2Zmc2V0KTsKIAogCWlmIChmcmVvcGVuKGZpbGVuYW1lLmJ1ZiwgInciLCBzdGRvdXQpID09IE5VTEwpCkBAIC02MTksNyArNjUzLDcgQEAKIAlzdHJ1Y3Qgc2hvcnRsb2cgbG9nOwogCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKIAlpbnQgaTsKLQljb25zdCBjaGFyICplbmNvZGluZyA9ICJ1dGYtOCI7CisJY29uc3QgY2hhciAqZW5jb2RpbmcgPSAiVVRGLTgiOwogCXN0cnVjdCBkaWZmX29wdGlvbnMgb3B0czsKIAlpbnQgbmVlZF84Yml0X2N0ZSA9IDA7CiAJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gTlVMTDsKQEAgLTY1Nyw2ICs2OTEsMTAgQEAKIAlsb2dfd3JpdGVfZW1haWxfaGVhZGVycyhyZXYsIGhlYWQsICZzdWJqZWN0X3N0YXJ0LCAmZXh0cmFfaGVhZGVycywKIAkJCQkmbmVlZF84Yml0X2N0ZSk7CiAKKwlmb3IgKGkgPSAwOyAhbmVlZF84Yml0X2N0ZSAmJiBpIDwgbnI7IGkrKykKKwkJaWYgKGhhc19ub25fYXNjaWkobGlzdFtpXS0+YnVmZmVyKSkKKwkJCW5lZWRfOGJpdF9jdGUgPSAxOworCiAJbXNnID0gYm9keTsKIAlwcF91c2VyX2luZm8oTlVMTCwgQ01JVF9GTVRfRU1BSUwsICZzYiwgY29tbWl0dGVyLCBEQVRFX1JGQzI4MjIsCiAJCSAgICAgZW5jb2RpbmcpOwpAQCAtNzQwLDI3ICs3NzgsMTgzIEBACiAJCQkJICAgICAgIG91dHB1dF9kaXJlY3RvcnkpKTsKIH0KIAorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2Zvcm1hdF9wYXRjaF91c2FnZVtdID0geworCSJnaXQgZm9ybWF0LXBhdGNoIFtvcHRpb25zXSBbPHNpbmNlPiB8IDxyZXZpc2lvbiByYW5nZT5dIiwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IGtlZXBfc3ViamVjdCA9IDA7CisKK3N0YXRpYyBpbnQga2VlcF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCSgoc3RydWN0IHJldl9pbmZvICopb3B0LT52YWx1ZSktPnRvdGFsID0gLTE7CisJa2VlcF9zdWJqZWN0ID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdWJqZWN0X3ByZWZpeCA9IDA7CisKK3N0YXRpYyBpbnQgc3ViamVjdF9wcmVmaXhfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkgICAgaW50IHVuc2V0KQoreworCXN1YmplY3RfcHJlZml4ID0gMTsKKwkoKHN0cnVjdCByZXZfaW5mbyAqKW9wdC0+dmFsdWUpLT5zdWJqZWN0X3ByZWZpeCA9IGFyZzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBudW1iZXJlZF9jbWRsaW5lX29wdCA9IDA7CisKK3N0YXRpYyBpbnQgbnVtYmVyZWRfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkgICAgIGludCB1bnNldCkKK3sKKwkqKGludCAqKW9wdC0+dmFsdWUgPSBudW1iZXJlZF9jbWRsaW5lX29wdCA9IHVuc2V0ID8gMCA6IDE7CisJaWYgKHVuc2V0KQorCQlhdXRvX251bWJlciA9ICAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5vX251bWJlcmVkX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJCWludCB1bnNldCkKK3sKKwlyZXR1cm4gbnVtYmVyZWRfY2FsbGJhY2sob3B0LCBhcmcsIDEpOworfQorCitzdGF0aWMgaW50IG91dHB1dF9kaXJlY3RvcnlfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkgICAgICBpbnQgdW5zZXQpCit7CisJY29uc3QgY2hhciAqKmRpciA9IChjb25zdCBjaGFyICoqKW9wdC0+dmFsdWU7CisJaWYgKCpkaXIpCisJCWRpZSgiVHdvIG91dHB1dCBkaXJlY3Rvcmllcz8iKTsKKwkqZGlyID0gYXJnOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRocmVhZF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWludCAqdGhyZWFkID0gKGludCAqKW9wdC0+dmFsdWU7CisJaWYgKHVuc2V0KQorCQkqdGhyZWFkID0gMDsKKwllbHNlIGlmICghYXJnIHx8ICFzdHJjbXAoYXJnLCAic2hhbGxvdyIpKQorCQkqdGhyZWFkID0gVEhSRUFEX1NIQUxMT1c7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJkZWVwIikpCisJCSp0aHJlYWQgPSBUSFJFQURfREVFUDsKKwllbHNlCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0dGFjaF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCByZXZfaW5mbyAqcmV2ID0gKHN0cnVjdCByZXZfaW5mbyAqKW9wdC0+dmFsdWU7CisJaWYgKHVuc2V0KQorCQlyZXYtPm1pbWVfYm91bmRhcnkgPSBOVUxMOworCWVsc2UgaWYgKGFyZykKKwkJcmV2LT5taW1lX2JvdW5kYXJ5ID0gYXJnOworCWVsc2UKKwkJcmV2LT5taW1lX2JvdW5kYXJ5ID0gZ2l0X3ZlcnNpb25fc3RyaW5nOworCXJldi0+bm9faW5saW5lID0gdW5zZXQgPyAwIDogMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbmxpbmVfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gKnJldiA9IChzdHJ1Y3QgcmV2X2luZm8gKilvcHQtPnZhbHVlOworCWlmICh1bnNldCkKKwkJcmV2LT5taW1lX2JvdW5kYXJ5ID0gTlVMTDsKKwllbHNlIGlmIChhcmcpCisJCXJldi0+bWltZV9ib3VuZGFyeSA9IGFyZzsKKwllbHNlCisJCXJldi0+bWltZV9ib3VuZGFyeSA9IGdpdF92ZXJzaW9uX3N0cmluZzsKKwlyZXYtPm5vX2lubGluZSA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGVhZGVyX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJYWRkX2hlYWRlcihhcmcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNjX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJQUxMT0NfR1JPVyhleHRyYV9jYywgZXh0cmFfY2NfbnIgKyAxLCBleHRyYV9jY19hbGxvYyk7CisJZXh0cmFfY2NbZXh0cmFfY2NfbnIrK10gPSB4c3RyZHVwKGFyZyk7CisJcmV0dXJuIDA7Cit9CisKIGludCBjbWRfZm9ybWF0X3BhdGNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQogewogCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKIAlzdHJ1Y3QgY29tbWl0ICoqbGlzdCA9IE5VTEw7CiAJc3RydWN0IHJldl9pbmZvIHJldjsKLQlpbnQgbnIgPSAwLCB0b3RhbCwgaSwgajsKKwlpbnQgbnIgPSAwLCB0b3RhbCwgaTsKIAlpbnQgdXNlX3N0ZG91dCA9IDA7CiAJaW50IHN0YXJ0X251bWJlciA9IC0xOwotCWludCBrZWVwX3N1YmplY3QgPSAwOwogCWludCBudW1iZXJlZF9maWxlcyA9IDA7CQkvKiBfanVzdF8gbnVtYmVycyAqLwotCWludCBzdWJqZWN0X3ByZWZpeCA9IDA7CiAJaW50IGlnbm9yZV9pZl9pbl91cHN0cmVhbSA9IDA7CiAJaW50IGNvdmVyX2xldHRlciA9IDA7CiAJaW50IGJvdW5kYXJ5X2NvdW50ID0gMDsKIAlpbnQgbm9fYmluYXJ5X2RpZmYgPSAwOwotCWludCBudW1iZXJlZF9jbWRsaW5lX29wdCA9IDA7CiAJc3RydWN0IGNvbW1pdCAqb3JpZ2luID0gTlVMTCwgKmhlYWQgPSBOVUxMOwogCWNvbnN0IGNoYXIgKmluX3JlcGx5X3RvID0gTlVMTDsKIAlzdHJ1Y3QgcGF0Y2hfaWRzIGlkczsKIAljaGFyICphZGRfc2lnbm9mZiA9IE5VTEw7CiAJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgdXNlX3BhdGNoX2Zvcm1hdCA9IDA7CisJY29uc3Qgc3RydWN0IG9wdGlvbiBidWlsdGluX2Zvcm1hdF9wYXRjaF9vcHRpb25zW10gPSB7CisJCXsgT1BUSU9OX0NBTExCQUNLLCAnbicsICJudW1iZXJlZCIsICZudW1iZXJlZCwgTlVMTCwKKwkJCSAgICAidXNlIFtQQVRDSCBuL21dIGV2ZW4gd2l0aCBhIHNpbmdsZSBwYXRjaCIsCisJCQkgICAgUEFSU0VfT1BUX05PQVJHLCBudW1iZXJlZF9jYWxsYmFjayB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ04nLCAibm8tbnVtYmVyZWQiLCAmbnVtYmVyZWQsIE5VTEwsCisJCQkgICAgInVzZSBbUEFUQ0hdIGV2ZW4gd2l0aCBtdWx0aXBsZSBwYXRjaGVzIiwKKwkJCSAgICBQQVJTRV9PUFRfTk9BUkcsIG5vX251bWJlcmVkX2NhbGxiYWNrIH0sCisJCU9QVF9CT09MRUFOKCdzJywgInNpZ25vZmYiLCAmZG9fc2lnbm9mZiwgImFkZCBTaWduZWQtb2ZmLWJ5OiIpLAorCQlPUFRfQk9PTEVBTigwLCAic3Rkb3V0IiwgJnVzZV9zdGRvdXQsCisJCQkgICAgInByaW50IHBhdGNoZXMgdG8gc3RhbmRhcmQgb3V0IiksCisJCU9QVF9CT09MRUFOKDAsICJjb3Zlci1sZXR0ZXIiLCAmY292ZXJfbGV0dGVyLAorCQkJICAgICJnZW5lcmF0ZSBhIGNvdmVyIGxldHRlciIpLAorCQlPUFRfQk9PTEVBTigwLCAibnVtYmVyZWQtZmlsZXMiLCAmbnVtYmVyZWRfZmlsZXMsCisJCQkgICAgInVzZSBzaW1wbGUgbnVtYmVyIHNlcXVlbmNlIGZvciBvdXRwdXQgZmlsZSBuYW1lcyIpLAorCQlPUFRfU1RSSU5HKDAsICJzdWZmaXgiLCAmZm10X3BhdGNoX3N1ZmZpeCwgInNmeCIsCisJCQkgICAgInVzZSA8c2Z4PiBpbnN0ZWFkIG9mICcucGF0Y2gnIiksCisJCU9QVF9JTlRFR0VSKDAsICJzdGFydC1udW1iZXIiLCAmc3RhcnRfbnVtYmVyLAorCQkJICAgICJzdGFydCBudW1iZXJpbmcgcGF0Y2hlcyBhdCA8bj4gaW5zdGVhZCBvZiAxIiksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAic3ViamVjdC1wcmVmaXgiLCAmcmV2LCAicHJlZml4IiwKKwkJCSAgICAiVXNlIFs8cHJlZml4Pl0gaW5zdGVhZCBvZiBbUEFUQ0hdIiwKKwkJCSAgICBQQVJTRV9PUFRfTk9ORUcsIHN1YmplY3RfcHJlZml4X2NhbGxiYWNrIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAnbycsICJvdXRwdXQtZGlyZWN0b3J5IiwgJm91dHB1dF9kaXJlY3RvcnksCisJCQkgICAgImRpciIsICJzdG9yZSByZXN1bHRpbmcgZmlsZXMgaW4gPGRpcj4iLAorCQkJICAgIFBBUlNFX09QVF9OT05FRywgb3V0cHV0X2RpcmVjdG9yeV9jYWxsYmFjayB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ2snLCAia2VlcC1zdWJqZWN0IiwgJnJldiwgTlVMTCwKKwkJCSAgICAiZG9uJ3Qgc3RyaXAvYWRkIFtQQVRDSF0iLAorCQkJICAgIFBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywga2VlcF9jYWxsYmFjayB9LAorCQlPUFRfQk9PTEVBTigwLCAibm8tYmluYXJ5IiwgJm5vX2JpbmFyeV9kaWZmLAorCQkJICAgICJkb24ndCBvdXRwdXQgYmluYXJ5IGRpZmZzIiksCisJCU9QVF9CT09MRUFOKDAsICJpZ25vcmUtaWYtaW4tdXBzdHJlYW0iLCAmaWdub3JlX2lmX2luX3Vwc3RyZWFtLAorCQkJICAgICJkb24ndCBpbmNsdWRlIGEgcGF0Y2ggbWF0Y2hpbmcgYSBjb21taXQgdXBzdHJlYW0iKSwKKwkJeyBPUFRJT05fQk9PTEVBTiwgJ3AnLCAibm8tc3RhdCIsICZ1c2VfcGF0Y2hfZm9ybWF0LCBOVUxMLAorCQkgICJzaG93IHBhdGNoIGZvcm1hdCBpbnN0ZWFkIG9mIGRlZmF1bHQgKHBhdGNoICsgc3RhdCkiLAorCQkgIFBBUlNFX09QVF9OT05FRyB8IFBBUlNFX09QVF9OT0FSRyB9LAorCQlPUFRfR1JPVVAoIk1lc3NhZ2luZyIpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImFkZC1oZWFkZXIiLCBOVUxMLCAiaGVhZGVyIiwKKwkJCSAgICAiYWRkIGVtYWlsIGhlYWRlciIsIFBBUlNFX09QVF9OT05FRywKKwkJCSAgICBoZWFkZXJfY2FsbGJhY2sgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJjYyIsIE5VTEwsICJlbWFpbCIsICJhZGQgQ2M6IGhlYWRlciIsCisJCQkgICAgUEFSU0VfT1BUX05PTkVHLCBjY19jYWxsYmFjayB9LAorCQlPUFRfU1RSSU5HKDAsICJpbi1yZXBseS10byIsICZpbl9yZXBseV90bywgIm1lc3NhZ2UtaWQiLAorCQkJICAgICJtYWtlIGZpcnN0IG1haWwgYSByZXBseSB0byA8bWVzc2FnZS1pZD4iKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJhdHRhY2giLCAmcmV2LCAiYm91bmRhcnkiLAorCQkJICAgICJhdHRhY2ggdGhlIHBhdGNoIiwgUEFSU0VfT1BUX09QVEFSRywKKwkJCSAgICBhdHRhY2hfY2FsbGJhY2sgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJpbmxpbmUiLCAmcmV2LCAiYm91bmRhcnkiLAorCQkJICAgICJpbmxpbmUgdGhlIHBhdGNoIiwKKwkJCSAgICBQQVJTRV9PUFRfT1BUQVJHIHwgUEFSU0VfT1BUX05PTkVHLAorCQkJICAgIGlubGluZV9jYWxsYmFjayB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgInRocmVhZCIsICZ0aHJlYWQsICJzdHlsZSIsCisJCQkgICAgImVuYWJsZSBtZXNzYWdlIHRocmVhZGluZywgc3R5bGVzOiBzaGFsbG93LCBkZWVwIiwKKwkJCSAgICBQQVJTRV9PUFRfT1BUQVJHLCB0aHJlYWRfY2FsbGJhY2sgfSwKKwkJT1BUX0VORCgpCisJfTsKIAogCWdpdF9jb25maWcoZ2l0X2Zvcm1hdF9jb25maWcsIE5VTEwpOwogCWluaXRfcmV2aXNpb25zKCZyZXYsIHByZWZpeCk7CkBAIC03ODMsMTAyICs5NzcsMTAgQEAKIAkgKiBsaWtlICJnaXQgZm9ybWF0LXBhdGNoIC1vIGExMjMgSEVBRF4uLiIgbWF5IGZhaWw7IGExMjMgaXMKIAkgKiBwb3NzaWJseSBhIHZhbGlkIFNIQTEuCiAJICovCi0JZm9yIChpID0gMSwgaiA9IDE7IGkgPCBhcmdjOyBpKyspIHsKLQkJaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tc3Rkb3V0IikpCi0JCQl1c2Vfc3Rkb3V0ID0gMTsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLW4iKSB8fAotCQkJCSFzdHJjbXAoYXJndltpXSwgIi0tbnVtYmVyZWQiKSkgewotCQkJbnVtYmVyZWQgPSAxOwotCQkJbnVtYmVyZWRfY21kbGluZV9vcHQgPSAxOwotCQl9Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIi1OIikgfHwKLQkJCQkhc3RyY21wKGFyZ3ZbaV0sICItLW5vLW51bWJlcmVkIikpIHsKLQkJCW51bWJlcmVkID0gMDsKLQkJCWF1dG9fbnVtYmVyID0gMDsKLQkJfQotCQllbHNlIGlmICghcHJlZml4Y21wKGFyZ3ZbaV0sICItLXN0YXJ0LW51bWJlcj0iKSkKLQkJCXN0YXJ0X251bWJlciA9IHN0cnRvbChhcmd2W2ldICsgMTUsIE5VTEwsIDEwKTsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS1udW1iZXJlZC1maWxlcyIpKQotCQkJbnVtYmVyZWRfZmlsZXMgPSAxOwotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICItLXN0YXJ0LW51bWJlciIpKSB7Ci0JCQlpKys7Ci0JCQlpZiAoaSA9PSBhcmdjKQotCQkJCWRpZSgiTmVlZCBhIG51bWJlciBmb3IgLS1zdGFydC1udW1iZXIiKTsKLQkJCXN0YXJ0X251bWJlciA9IHN0cnRvbChhcmd2W2ldLCBOVUxMLCAxMCk7Ci0JCX0KLQkJZWxzZSBpZiAoIXByZWZpeGNtcChhcmd2W2ldLCAiLS1jYz0iKSkgewotCQkJQUxMT0NfR1JPVyhleHRyYV9jYywgZXh0cmFfY2NfbnIgKyAxLCBleHRyYV9jY19hbGxvYyk7Ci0JCQlleHRyYV9jY1tleHRyYV9jY19ucisrXSA9IHhzdHJkdXAoYXJndltpXSArIDUpOwotCQl9Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIi1rIikgfHwKLQkJCQkhc3RyY21wKGFyZ3ZbaV0sICItLWtlZXAtc3ViamVjdCIpKSB7Ci0JCQlrZWVwX3N1YmplY3QgPSAxOwotCQkJcmV2LnRvdGFsID0gLTE7Ci0JCX0KLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS1vdXRwdXQtZGlyZWN0b3J5IikgfHwKLQkJCSAhc3RyY21wKGFyZ3ZbaV0sICItbyIpKSB7Ci0JCQlpKys7Ci0JCQlpZiAoYXJnYyA8PSBpKQotCQkJCWRpZSgiV2hpY2ggZGlyZWN0b3J5PyIpOwotCQkJaWYgKG91dHB1dF9kaXJlY3RvcnkpCi0JCQkJZGllKCJUd28gb3V0cHV0IGRpcmVjdG9yaWVzPyIpOwotCQkJb3V0cHV0X2RpcmVjdG9yeSA9IGFyZ3ZbaV07Ci0JCX0KLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS1zaWdub2ZmIikgfHwKLQkJCSAhc3RyY21wKGFyZ3ZbaV0sICItcyIpKSB7Ci0JCQlkb19zaWdub2ZmID0gMTsKLQkJfQotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICItLWF0dGFjaCIpKSB7Ci0JCQlyZXYubWltZV9ib3VuZGFyeSA9IGdpdF92ZXJzaW9uX3N0cmluZzsKLQkJCXJldi5ub19pbmxpbmUgPSAxOwotCQl9Ci0JCWVsc2UgaWYgKCFwcmVmaXhjbXAoYXJndltpXSwgIi0tYXR0YWNoPSIpKSB7Ci0JCQlyZXYubWltZV9ib3VuZGFyeSA9IGFyZ3ZbaV0gKyA5OwotCQkJcmV2Lm5vX2lubGluZSA9IDE7Ci0JCX0KLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS1uby1hdHRhY2giKSkgewotCQkJcmV2Lm1pbWVfYm91bmRhcnkgPSBOVUxMOwotCQkJcmV2Lm5vX2lubGluZSA9IDA7Ci0JCX0KLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS1pbmxpbmUiKSkgewotCQkJcmV2Lm1pbWVfYm91bmRhcnkgPSBnaXRfdmVyc2lvbl9zdHJpbmc7Ci0JCQlyZXYubm9faW5saW5lID0gMDsKLQkJfQotCQllbHNlIGlmICghcHJlZml4Y21wKGFyZ3ZbaV0sICItLWlubGluZT0iKSkgewotCQkJcmV2Lm1pbWVfYm91bmRhcnkgPSBhcmd2W2ldICsgOTsKLQkJCXJldi5ub19pbmxpbmUgPSAwOwotCQl9Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIi0taWdub3JlLWlmLWluLXVwc3RyZWFtIikpCi0JCQlpZ25vcmVfaWZfaW5fdXBzdHJlYW0gPSAxOwotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICItLXRocmVhZCIpCi0JCQl8fCAhc3RyY21wKGFyZ3ZbaV0sICItLXRocmVhZD1zaGFsbG93IikpCi0JCQl0aHJlYWQgPSBUSFJFQURfU0hBTExPVzsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS10aHJlYWQ9ZGVlcCIpKQotCQkJdGhyZWFkID0gVEhSRUFEX0RFRVA7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tbm8tdGhyZWFkIikpCi0JCQl0aHJlYWQgPSAwOwotCQllbHNlIGlmICghcHJlZml4Y21wKGFyZ3ZbaV0sICItLWluLXJlcGx5LXRvPSIpKQotCQkJaW5fcmVwbHlfdG8gPSBhcmd2W2ldICsgMTQ7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIi0taW4tcmVwbHktdG8iKSkgewotCQkJaSsrOwotCQkJaWYgKGkgPT0gYXJnYykKLQkJCQlkaWUoIk5lZWQgYSBNZXNzYWdlLUlkIGZvciAtLWluLXJlcGx5LXRvIik7Ci0JCQlpbl9yZXBseV90byA9IGFyZ3ZbaV07Ci0JCX0gZWxzZSBpZiAoIXByZWZpeGNtcChhcmd2W2ldLCAiLS1zdWJqZWN0LXByZWZpeD0iKSkgewotCQkJc3ViamVjdF9wcmVmaXggPSAxOwotCQkJcmV2LnN1YmplY3RfcHJlZml4ID0gYXJndltpXSArIDE3OwotCQl9IGVsc2UgaWYgKCFwcmVmaXhjbXAoYXJndltpXSwgIi0tc3VmZml4PSIpKQotCQkJZm10X3BhdGNoX3N1ZmZpeCA9IGFyZ3ZbaV0gKyA5OwotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICItLWNvdmVyLWxldHRlciIpKQotCQkJY292ZXJfbGV0dGVyID0gMTsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS1uby1iaW5hcnkiKSkKLQkJCW5vX2JpbmFyeV9kaWZmID0gMTsKLQkJZWxzZSBpZiAoIXByZWZpeGNtcChhcmd2W2ldLCAiLS1hZGQtaGVhZGVyPSIpKQotCQkJYWRkX2hlYWRlcihhcmd2W2ldICsgMTMpOwotCQllbHNlCi0JCQlhcmd2W2orK10gPSBhcmd2W2ldOwotCX0KLQlhcmdjID0gajsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fZm9ybWF0X3BhdGNoX29wdGlvbnMsCisJCQkgICAgIGJ1aWx0aW5fZm9ybWF0X3BhdGNoX3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9BUkdWMCB8IFBBUlNFX09QVF9LRUVQX1VOS05PV04gfAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCk7CiAKIAlpZiAoZG9fc2lnbm9mZikgewogCQljb25zdCBjaGFyICpjb21taXR0ZXI7CkBAIC05MTcsNyArMTAxOSw3IEBACiAJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXG4nKTsKIAl9CiAKLQlyZXYuZXh0cmFfaGVhZGVycyA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgMCk7CisJcmV2LmV4dHJhX2hlYWRlcnMgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOwogCiAJaWYgKHN0YXJ0X251bWJlciA8IDApCiAJCXN0YXJ0X251bWJlciA9IDE7CkBAIC05MzksOSArMTA0MSwyMCBAQAogCWlmIChhcmdjID4gMSkKIAkJZGllICgidW5yZWNvZ25pemVkIGFyZ3VtZW50OiAlcyIsIGFyZ3ZbMV0pOwogCi0JaWYgKCFyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0Ci0JCXx8IHJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPT0gRElGRl9GT1JNQVRfUEFUQ0gpCi0JCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9ESUZGU1RBVCB8IERJRkZfRk9STUFUX1NVTU1BUlkgfCBESUZGX0ZPUk1BVF9QQVRDSDsKKwlpZiAocmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX05BTUUpCisJCWRpZSgiLS1uYW1lLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZSIpOworCWlmIChyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfTkFNRV9TVEFUVVMpCisJCWRpZSgiLS1uYW1lLXN0YXR1cyBkb2VzIG5vdCBtYWtlIHNlbnNlIik7CisJaWYgKHJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9DSEVDS0RJRkYpCisJCWRpZSgiLS1jaGVjayBkb2VzIG5vdCBtYWtlIHNlbnNlIik7CisKKwlpZiAoIXVzZV9wYXRjaF9mb3JtYXQgJiYKKwkJKCFyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0IHx8CisJCSByZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID09IERJRkZfRk9STUFUX1BBVENIKSkKKwkJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX0RJRkZTVEFUIHwgRElGRl9GT1JNQVRfU1VNTUFSWTsKKworCS8qIEFsd2F5cyBnZW5lcmF0ZSBhIHBhdGNoICovCisJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCB8PSBESUZGX0ZPUk1BVF9QQVRDSDsKIAogCWlmICghRElGRl9PUFRfVFNUKCZyZXYuZGlmZm9wdCwgVEVYVCkgJiYgIW5vX2JpbmFyeV9kaWZmKQogCQlESUZGX09QVF9TRVQoJnJldi5kaWZmb3B0LCBCSU5BUlkpOwpAQCAtOTUzLDggKzEwNjYsOCBAQAogCQlpZiAodXNlX3N0ZG91dCkKIAkJCWRpZSgic3RhbmRhcmQgb3V0cHV0LCBvciBkaXJlY3RvcnksIHdoaWNoIG9uZT8iKTsKIAkJaWYgKG1rZGlyKG91dHB1dF9kaXJlY3RvcnksIDA3NzcpIDwgMCAmJiBlcnJubyAhPSBFRVhJU1QpCi0JCQlkaWUoIkNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICVzIiwKLQkJCSAgICBvdXRwdXRfZGlyZWN0b3J5KTsKKwkJCWRpZV9lcnJubygiQ291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIsCisJCQkJICBvdXRwdXRfZGlyZWN0b3J5KTsKIAl9CiAKIAlpZiAocmV2LnBlbmRpbmcubnIgPT0gMSkgewpAQCAtOTc2LDcgKzEwODksNyBAQAogCiAJLyoKIAkgKiBXZSBjYW5ub3QgbW92ZSB0aGlzIGFueXdoZXJlIGVhcmxpZXIgYmVjYXVzZSB3ZSBkbyB3YW50IHRvCi0JICoga25vdyBpZiAtLXJvb3Qgd2FzIGdpdmVuIGV4cGxpY2l0bHkgZnJvbSB0aGUgY29tYW5kIGxpbmUuCisJICoga25vdyBpZiAtLXJvb3Qgd2FzIGdpdmVuIGV4cGxpY2l0bHkgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgogCSAqLwogCXJldi5zaG93X3Jvb3RfZGlmZiA9IDE7CiAKQEAgLTk5Myw4ICsxMTA2LDE1IEBACiAJCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoaWdub3JlX2lmX2luX3Vwc3RyZWFtKQorCWlmIChpZ25vcmVfaWZfaW5fdXBzdHJlYW0pIHsKKwkJLyogRG9uJ3Qgc2F5IGFueXRoaW5nIGlmIGhlYWQgYW5kIHVwc3RyZWFtIGFyZSB0aGUgc2FtZS4gKi8KKwkJaWYgKHJldi5wZW5kaW5nLm5yID09IDIpIHsKKwkJCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKm8gPSByZXYucGVuZGluZy5vYmplY3RzOworCQkJaWYgKGhhc2hjbXAob1swXS5pdGVtLT5zaGExLCBvWzFdLml0ZW0tPnNoYTEpID09IDApCisJCQkJcmV0dXJuIDA7CisJCX0KIAkJZ2V0X3BhdGNoX2lkcygmcmV2LCAmaWRzLCBwcmVmaXgpOworCX0KIAogCWlmICghdXNlX3N0ZG91dCkKIAkJcmVhbHN0ZG91dCA9IHhmZG9wZW4oeGR1cCgxKSwgInciKTsKQEAgLTExNDksNiArMTI2OSw5IEBACiAJCWFyZ3YrKzsKIAl9CiAKKwlpZiAoYXJnYyA+IDEgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2UoY2hlcnJ5X3VzYWdlKTsKKwogCXN3aXRjaCAoYXJnYykgewogCWNhc2UgNDoKIAkJbGltaXQgPSBhcmd2WzNdOwpAQCAtMTIxNiw4ICsxMzM5LDkgQEAKIAogCQlpZiAodmVyYm9zZSkgewogCQkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkJCXN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCBjdHggPSB7MH07CiAJCQlwcmV0dHlfcHJpbnRfY29tbWl0KENNSVRfRk1UX09ORUxJTkUsIGNvbW1pdCwKLQkJCSAgICAgICAgICAgICAgICAgICAgJmJ1ZiwgMCwgTlVMTCwgTlVMTCwgMCwgMCk7CisJCQkJCSAgICAmYnVmLCAmY3R4KTsKIAkJCXByaW50ZigiJWMgJXMgJXNcbiIsIHNpZ24sCiAJCQkgICAgICAgc2hhMV90b19oZXgoY29tbWl0LT5vYmplY3Quc2hhMSksIGJ1Zi5idWYpOwogCQkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CmRpZmYgLS1naXQgYS9idWlsdGluLWxzLWZpbGVzLmMgYi9idWlsdGluLWxzLWZpbGVzLmMKaW5kZXggZGEyZGFmNC4uYjA2NTA2MSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1scy1maWxlcy5jCisrKyBiL2J1aWx0aW4tbHMtZmlsZXMuYwpAQCAtMTEsNiArMTEsOCBAQAogI2luY2x1ZGUgImJ1aWx0aW4uaCIKICNpbmNsdWRlICJ0cmVlLmgiCiAjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInJlc29sdmUtdW5kby5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCiAKIHN0YXRpYyBpbnQgYWJicmV2Owogc3RhdGljIGludCBzaG93X2RlbGV0ZWQ7CkBAIC0xOCw2ICsyMCw3IEBACiBzdGF0aWMgaW50IHNob3dfb3RoZXJzOwogc3RhdGljIGludCBzaG93X3N0YWdlOwogc3RhdGljIGludCBzaG93X3VubWVyZ2VkOworc3RhdGljIGludCBzaG93X3Jlc29sdmVfdW5kbzsKIHN0YXRpYyBpbnQgc2hvd19tb2RpZmllZDsKIHN0YXRpYyBpbnQgc2hvd19raWxsZWQ7CiBzdGF0aWMgaW50IHNob3dfdmFsaWRfYml0OwpAQCAtMzcsNiArNDAsOCBAQAogc3RhdGljIGNvbnN0IGNoYXIgKnRhZ19vdGhlciA9ICIiOwogc3RhdGljIGNvbnN0IGNoYXIgKnRhZ19raWxsZWQgPSAiIjsKIHN0YXRpYyBjb25zdCBjaGFyICp0YWdfbW9kaWZpZWQgPSAiIjsKK3N0YXRpYyBjb25zdCBjaGFyICp0YWdfc2tpcF93b3JrdHJlZSA9ICIiOworc3RhdGljIGNvbnN0IGNoYXIgKnRhZ19yZXNvbHZlX3VuZG8gPSAiIjsKIAogc3RhdGljIHZvaWQgc2hvd19kaXJfZW50cnkoY29uc3QgY2hhciAqdGFnLCBzdHJ1Y3QgZGlyX2VudHJ5ICplbnQpCiB7CkBAIC0xNTUsMTggKzE2MCw0NSBAQAogCXdyaXRlX25hbWVfcXVvdGVkKGNlLT5uYW1lICsgb2Zmc2V0LCBzdGRvdXQsIGxpbmVfdGVybWluYXRvcik7CiB9CiAKK3N0YXRpYyBpbnQgc2hvd19vbmVfcnUoc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sIHZvaWQgKmNiZGF0YSkKK3sKKwlpbnQgb2Zmc2V0ID0gcHJlZml4X29mZnNldDsKKwljb25zdCBjaGFyICpwYXRoID0gaXRlbS0+c3RyaW5nOworCXN0cnVjdCByZXNvbHZlX3VuZG9faW5mbyAqdWkgPSBpdGVtLT51dGlsOworCWludCBpLCBsZW47CisKKwlsZW4gPSBzdHJsZW4ocGF0aCk7CisJaWYgKGxlbiA8IHByZWZpeF9sZW4pCisJCXJldHVybiAwOyAvKiBvdXRzaWRlIG9mIHRoZSBwcmVmaXggKi8KKwlpZiAoIW1hdGNoX3BhdGhzcGVjKHBhdGhzcGVjLCBwYXRoLCBsZW4sIHByZWZpeF9sZW4sIHBzX21hdGNoZWQpKQorCQlyZXR1cm4gMDsgLyogdW5pbnRlcmVzdGVkICovCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlpZiAoIXVpLT5tb2RlW2ldKQorCQkJY29udGludWU7CisJCXByaW50ZigiJXMlMDZvICVzICVkXHQiLCB0YWdfcmVzb2x2ZV91bmRvLCB1aS0+bW9kZVtpXSwKKwkJICAgICAgIGFiYnJldgorCQkgICAgICAgPyBmaW5kX3VuaXF1ZV9hYmJyZXYodWktPnNoYTFbaV0sIGFiYnJldikKKwkJICAgICAgIDogc2hhMV90b19oZXgodWktPnNoYTFbaV0pLAorCQkgICAgICAgaSArIDEpOworCQl3cml0ZV9uYW1lX3F1b3RlZChwYXRoICsgb2Zmc2V0LCBzdGRvdXQsIGxpbmVfdGVybWluYXRvcik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaG93X3J1X2luZm8oY29uc3QgY2hhciAqcHJlZml4KQoreworCWlmICghdGhlX2luZGV4LnJlc29sdmVfdW5kbykKKwkJcmV0dXJuOworCWZvcl9lYWNoX3N0cmluZ19saXN0KHNob3dfb25lX3J1LCB0aGVfaW5kZXgucmVzb2x2ZV91bmRvLCBOVUxMKTsKK30KKwogc3RhdGljIHZvaWQgc2hvd19maWxlcyhzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CiAJaW50IGk7CiAKIAkvKiBGb3IgY2FjaGVkL2RlbGV0ZWQgZmlsZXMgd2UgZG9uJ3QgbmVlZCB0byBldmVuIGRvIHRoZSByZWFkZGlyICovCiAJaWYgKHNob3dfb3RoZXJzIHx8IHNob3dfa2lsbGVkKSB7Ci0JCWNvbnN0IGNoYXIgKnBhdGggPSAiLiIsICpiYXNlID0gIiI7Ci0JCWludCBiYXNlbGVuID0gcHJlZml4X2xlbjsKLQotCQlpZiAoYmFzZWxlbikKLQkJCXBhdGggPSBiYXNlID0gcHJlZml4OwotCQlyZWFkX2RpcmVjdG9yeShkaXIsIHBhdGgsIGJhc2UsIGJhc2VsZW4sIHBhdGhzcGVjKTsKKwkJZmlsbF9kaXJlY3RvcnkoZGlyLCBwYXRoc3BlYyk7CiAJCWlmIChzaG93X290aGVycykKIAkJCXNob3dfb3RoZXJfZmlsZXMoZGlyKTsKIAkJaWYgKHNob3dfa2lsbGVkKQpAQCAtMTc2LDE0ICsyMDgsMTUgQEAKIAkJZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9ucjsgaSsrKSB7CiAJCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOwogCQkJaW50IGR0eXBlID0gY2VfdG9fZHR5cGUoY2UpOwotCQkJaWYgKGV4Y2x1ZGVkKGRpciwgY2UtPm5hbWUsICZkdHlwZSkgIT0KLQkJCQkJISEoZGlyLT5mbGFncyAmIERJUl9TSE9XX0lHTk9SRUQpKQorCQkJaWYgKGRpci0+ZmxhZ3MgJiBESVJfU0hPV19JR05PUkVEICYmCisJCQkgICAgIWV4Y2x1ZGVkKGRpciwgY2UtPm5hbWUsICZkdHlwZSkpCiAJCQkJY29udGludWU7CiAJCQlpZiAoc2hvd191bm1lcmdlZCAmJiAhY2Vfc3RhZ2UoY2UpKQogCQkJCWNvbnRpbnVlOwogCQkJaWYgKGNlLT5jZV9mbGFncyAmIENFX1VQREFURSkKIAkJCQljb250aW51ZTsKLQkJCXNob3dfY2VfZW50cnkoY2Vfc3RhZ2UoY2UpID8gdGFnX3VubWVyZ2VkIDogdGFnX2NhY2hlZCwgY2UpOworCQkJc2hvd19jZV9lbnRyeShjZV9zdGFnZShjZSkgPyB0YWdfdW5tZXJnZWQgOgorCQkJCShjZV9za2lwX3dvcmt0cmVlKGNlKSA/IHRhZ19za2lwX3dvcmt0cmVlIDogdGFnX2NhY2hlZCksIGNlKTsKIAkJfQogCX0KIAlpZiAoc2hvd19kZWxldGVkIHwgc2hvd19tb2RpZmllZCkgewpAQCAtMTkyLDExICsyMjUsMTMgQEAKIAkJCXN0cnVjdCBzdGF0IHN0OwogCQkJaW50IGVycjsKIAkJCWludCBkdHlwZSA9IGNlX3RvX2R0eXBlKGNlKTsKLQkJCWlmIChleGNsdWRlZChkaXIsIGNlLT5uYW1lLCAmZHR5cGUpICE9Ci0JCQkJCSEhKGRpci0+ZmxhZ3MgJiBESVJfU0hPV19JR05PUkVEKSkKKwkJCWlmIChkaXItPmZsYWdzICYgRElSX1NIT1dfSUdOT1JFRCAmJgorCQkJICAgICFleGNsdWRlZChkaXIsIGNlLT5uYW1lLCAmZHR5cGUpKQogCQkJCWNvbnRpbnVlOwogCQkJaWYgKGNlLT5jZV9mbGFncyAmIENFX1VQREFURSkKIAkJCQljb250aW51ZTsKKwkJCWlmIChjZV9za2lwX3dvcmt0cmVlKGNlKSkKKwkJCQljb250aW51ZTsKIAkJCWVyciA9IGxzdGF0KGNlLT5uYW1lLCAmc3QpOwogCQkJaWYgKHNob3dfZGVsZXRlZCAmJiBlcnIpCiAJCQkJc2hvd19jZV9lbnRyeSh0YWdfcmVtb3ZlZCwgY2UpOwpAQCAtNDU0LDExICs0ODksMTMgQEAKIAkJT1BUX0JJVCgwLCAiZGlyZWN0b3J5IiwgJmRpci5mbGFncywKIAkJCSJzaG93ICdvdGhlcicgZGlyZWN0b3JpZXMnIG5hbWUgb25seSIsCiAJCQlESVJfU0hPV19PVEhFUl9ESVJFQ1RPUklFUyksCi0JCU9QVF9CSVQoMCwgIm5vLWVtcHR5LWRpcmVjdG9yeSIsICZkaXIuZmxhZ3MsCisJCU9QVF9ORUdCSVQoMCwgImVtcHR5LWRpcmVjdG9yeSIsICZkaXIuZmxhZ3MsCiAJCQkiZG9uJ3Qgc2hvdyBlbXB0eSBkaXJlY3RvcmllcyIsCiAJCQlESVJfSElERV9FTVBUWV9ESVJFQ1RPUklFUyksCiAJCU9QVF9CT09MRUFOKCd1JywgInVubWVyZ2VkIiwgJnNob3dfdW5tZXJnZWQsCiAJCQkic2hvdyB1bm1lcmdlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IiksCisJCU9QVF9CT09MRUFOKDAsICJyZXNvbHZlLXVuZG8iLCAmc2hvd19yZXNvbHZlX3VuZG8sCisJCQkgICAgInNob3cgcmVzb2x2ZS11bmRvIGluZm9ybWF0aW9uIiksCiAJCXsgT1BUSU9OX0NBTExCQUNLLCAneCcsICJleGNsdWRlIiwgJmRpci5leGNsdWRlX2xpc3RbRVhDX0NNRExdLCAicGF0dGVybiIsCiAJCQkic2tpcCBmaWxlcyBtYXRjaGluZyBwYXR0ZXJuIiwKIAkJCTAsIG9wdGlvbl9wYXJzZV9leGNsdWRlIH0sCkBAIC00ODYsNyArNTIzLDEwIEBACiAJCXByZWZpeF9vZmZzZXQgPSBzdHJsZW4ocHJlZml4KTsKIAlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBidWlsdGluX2xzX2ZpbGVzX29wdGlvbnMsCisJaWYgKHJlYWRfY2FjaGUoKSA8IDApCisJCWRpZSgiaW5kZXggZmlsZSBjb3JydXB0Iik7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fbHNfZmlsZXNfb3B0aW9ucywKIAkJCWxzX2ZpbGVzX3VzYWdlLCAwKTsKIAlpZiAoc2hvd190YWcgfHwgc2hvd192YWxpZF9iaXQpIHsKIAkJdGFnX2NhY2hlZCA9ICJIICI7CkBAIC00OTUsNiArNTM1LDggQEAKIAkJdGFnX21vZGlmaWVkID0gIkMgIjsKIAkJdGFnX290aGVyID0gIj8gIjsKIAkJdGFnX2tpbGxlZCA9ICJLICI7CisJCXRhZ19za2lwX3dvcmt0cmVlID0gIlMgIjsKKwkJdGFnX3Jlc29sdmVfdW5kbyA9ICJVICI7CiAJfQogCWlmIChzaG93X21vZGlmaWVkIHx8IHNob3dfb3RoZXJzIHx8IHNob3dfZGVsZXRlZCB8fCAoZGlyLmZsYWdzICYgRElSX1NIT1dfSUdOT1JFRCkgfHwgc2hvd19raWxsZWQpCiAJCXJlcXVpcmVfd29ya190cmVlID0gMTsKQEAgLTUxMyw3ICs1NTUsNiBAQAogCXBhdGhzcGVjID0gZ2V0X3BhdGhzcGVjKHByZWZpeCwgYXJndik7CiAKIAkvKiBiZSBuaWNlIHdpdGggc3VibW9kdWxlIHBhdGhzIGVuZGluZyBpbiBhIHNsYXNoICovCi0JcmVhZF9jYWNoZSgpOwogCWlmIChwYXRoc3BlYykKIAkJc3RyaXBfdHJhaWxpbmdfc2xhc2hfZnJvbV9zdWJtb2R1bGVzKCk7CiAKQEAgLTUyOSwxNSArNTcwLDEyIEBACiAJCXBzX21hdGNoZWQgPSB4Y2FsbG9jKDEsIG51bSk7CiAJfQogCi0JaWYgKChkaXIuZmxhZ3MgJiBESVJfU0hPV19JR05PUkVEKSAmJiAhZXhjX2dpdmVuKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiJXM6IC0taWdub3JlZCBuZWVkcyBzb21lIGV4Y2x1ZGUgcGF0dGVyblxuIiwKLQkJCWFyZ3ZbMF0pOwotCQlleGl0KDEpOwotCX0KKwlpZiAoKGRpci5mbGFncyAmIERJUl9TSE9XX0lHTk9SRUQpICYmICFleGNfZ2l2ZW4pCisJCWRpZSgibHMtZmlsZXMgLS1pZ25vcmVkIG5lZWRzIHNvbWUgZXhjbHVkZSBwYXR0ZXJuIik7CiAKIAkvKiBXaXRoIG5vIGZsYWdzLCB3ZSBkZWZhdWx0IHRvIHNob3dpbmcgdGhlIGNhY2hlZCBmaWxlcyAqLwogCWlmICghKHNob3dfc3RhZ2UgfCBzaG93X2RlbGV0ZWQgfCBzaG93X290aGVycyB8IHNob3dfdW5tZXJnZWQgfAotCSAgICAgIHNob3dfa2lsbGVkIHwgc2hvd19tb2RpZmllZCkpCisJICAgICAgc2hvd19raWxsZWQgfCBzaG93X21vZGlmaWVkIHwgc2hvd19yZXNvbHZlX3VuZG8pKQogCQlzaG93X2NhY2hlZCA9IDE7CiAKIAlpZiAocHJlZml4KQpAQCAtNTUyLDYgKzU5MCw4IEBACiAJCW92ZXJsYXlfdHJlZV9vbl9jYWNoZSh3aXRoX3RyZWUsIHByZWZpeCk7CiAJfQogCXNob3dfZmlsZXMoJmRpciwgcHJlZml4KTsKKwlpZiAoc2hvd19yZXNvbHZlX3VuZG8pCisJCXNob3dfcnVfaW5mbyhwcmVmaXgpOwogCiAJaWYgKHBzX21hdGNoZWQpIHsKIAkJaW50IGJhZDsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tbHMtcmVtb3RlLmMgYi9idWlsdGluLWxzLXJlbW90ZS5jCmluZGV4IDc4YTg4ZjcuLjcwZjU2MjIgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tbHMtcmVtb3RlLmMKKysrIGIvYnVpbHRpbi1scy1yZW1vdGUuYwpAQCAtODYsMTAgKzg2LDEwIEBACiAJCQlwYXR0ZXJuW2ogLSBpXSA9IHA7CiAJCX0KIAl9Ci0JcmVtb3RlID0gbm9uZ2l0ID8gTlVMTCA6IHJlbW90ZV9nZXQoZGVzdCk7Ci0JaWYgKHJlbW90ZSAmJiAhcmVtb3RlLT51cmxfbnIpCisJcmVtb3RlID0gcmVtb3RlX2dldChkZXN0KTsKKwlpZiAoIXJlbW90ZS0+dXJsX25yKQogCQlkaWUoInJlbW90ZSAlcyBoYXMgbm8gY29uZmlndXJlZCBVUkwiLCBkZXN0KTsKLQl0cmFuc3BvcnQgPSB0cmFuc3BvcnRfZ2V0KHJlbW90ZSwgcmVtb3RlID8gcmVtb3RlLT51cmxbMF0gOiBkZXN0KTsKKwl0cmFuc3BvcnQgPSB0cmFuc3BvcnRfZ2V0KHJlbW90ZSwgTlVMTCk7CiAJaWYgKHVwbG9hZHBhY2sgIT0gTlVMTCkKIAkJdHJhbnNwb3J0X3NldF9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfVVBMT0FEUEFDSywgdXBsb2FkcGFjayk7CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4tbHMtdHJlZS5jIGIvYnVpbHRpbi1scy10cmVlLmMKaW5kZXggMjIwMDhkZi4uNDQ4NDE4NSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1scy10cmVlLmMKKysrIGIvYnVpbHRpbi1scy10cmVlLmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSAiY29tbWl0LmgiCiAjaW5jbHVkZSAicXVvdGUuaCIKICNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgogCiBzdGF0aWMgaW50IGxpbmVfdGVybWluYXRpb24gPSAnXG4nOwogI2RlZmluZSBMU19SRUNVUlNJVkUgMQpAQCAtMjIsOCArMjMsMTAgQEAKIHN0YXRpYyBpbnQgY2hvbXBfcHJlZml4Owogc3RhdGljIGNvbnN0IGNoYXIgKmxzX3RyZWVfcHJlZml4OwogCi1zdGF0aWMgY29uc3QgY2hhciBsc190cmVlX3VzYWdlW10gPQotCSJnaXQgbHMtdHJlZSBbLWRdIFstcl0gWy10XSBbLWxdIFstel0gWy0tbmFtZS1vbmx5XSBbLS1uYW1lLXN0YXR1c10gWy0tZnVsbC1uYW1lXSBbLS1mdWxsLXRyZWVdIFstLWFiYnJldls9PG4+XV0gPHRyZWUtaXNoPiBbcGF0aC4uLl0iOworc3RhdGljIGNvbnN0ICBjaGFyICogY29uc3QgbHNfdHJlZV91c2FnZVtdID0geworCSJnaXQgbHMtdHJlZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFtwYXRoLi4uXSIsCisJTlVMTAorfTsKIAogc3RhdGljIGludCBzaG93X3JlY3Vyc2l2ZShjb25zdCBjaGFyICpiYXNlLCBpbnQgYmFzZWxlbiwgY29uc3QgY2hhciAqcGF0aG5hbWUpCiB7CkBAIC0xMTcsNzYgKzEyMCw1MyBAQAogewogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CiAJc3RydWN0IHRyZWUgKnRyZWU7CisJaW50IGZ1bGxfdHJlZSA9IDA7CisJY29uc3Qgc3RydWN0IG9wdGlvbiBsc190cmVlX29wdGlvbnNbXSA9IHsKKwkJT1BUX0JJVCgnZCcsIE5VTEwsICZsc19vcHRpb25zLCAib25seSBzaG93IHRyZWVzIiwKKwkJCUxTX1RSRUVfT05MWSksCisJCU9QVF9CSVQoJ3InLCBOVUxMLCAmbHNfb3B0aW9ucywgInJlY3Vyc2UgaW50byBzdWJ0cmVlcyIsCisJCQlMU19SRUNVUlNJVkUpLAorCQlPUFRfQklUKCd0JywgTlVMTCwgJmxzX29wdGlvbnMsICJzaG93IHRyZWVzIHdoZW4gcmVjdXJzaW5nIiwKKwkJCUxTX1NIT1dfVFJFRVMpLAorCQlPUFRfU0VUX0lOVCgneicsIE5VTEwsICZsaW5lX3Rlcm1pbmF0aW9uLAorCQkJICAgICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCBieXRlIiwgMCksCisJCU9QVF9CSVQoJ2wnLCAibG9uZyIsICZsc19vcHRpb25zLCAiaW5jbHVkZSBvYmplY3Qgc2l6ZSIsCisJCQlMU19TSE9XX1NJWkUpLAorCQlPUFRfQklUKDAsICJuYW1lLW9ubHkiLCAmbHNfb3B0aW9ucywgImxpc3Qgb25seSBmaWxlbmFtZXMiLAorCQkJTFNfTkFNRV9PTkxZKSwKKwkJT1BUX0JJVCgwLCAibmFtZS1zdGF0dXMiLCAmbHNfb3B0aW9ucywgImxpc3Qgb25seSBmaWxlbmFtZXMiLAorCQkJTFNfTkFNRV9PTkxZKSwKKwkJT1BUX1NFVF9JTlQoMCwgImZ1bGwtbmFtZSIsICZjaG9tcF9wcmVmaXgsCisJCQkgICAgInVzZSBmdWxsIHBhdGggbmFtZXMiLCAwKSwKKwkJT1BUX0JPT0xFQU4oMCwgImZ1bGwtdHJlZSIsICZmdWxsX3RyZWUsCisJCQkgICAgImxpc3QgZW50aXJlIHRyZWU7IG5vdCBqdXN0IGN1cnJlbnQgZGlyZWN0b3J5ICIKKwkJCSAgICAiKGltcGxpZXMgLS1mdWxsLW5hbWUpIiksCisJCU9QVF9fQUJCUkVWKCZhYmJyZXYpLAorCQlPUFRfRU5EKCkKKwl9OwogCiAJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwogCWxzX3RyZWVfcHJlZml4ID0gcHJlZml4OwogCWlmIChwcmVmaXggJiYgKnByZWZpeCkKIAkJY2hvbXBfcHJlZml4ID0gc3RybGVuKHByZWZpeCk7Ci0Jd2hpbGUgKDEgPCBhcmdjICYmIGFyZ3ZbMV1bMF0gPT0gJy0nKSB7Ci0JCXN3aXRjaCAoYXJndlsxXVsxXSkgewotCQljYXNlICd6JzoKLQkJCWxpbmVfdGVybWluYXRpb24gPSAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgJ3InOgotCQkJbHNfb3B0aW9ucyB8PSBMU19SRUNVUlNJVkU7Ci0JCQlicmVhazsKLQkJY2FzZSAnZCc6Ci0JCQlsc19vcHRpb25zIHw9IExTX1RSRUVfT05MWTsKLQkJCWJyZWFrOwotCQljYXNlICd0JzoKLQkJCWxzX29wdGlvbnMgfD0gTFNfU0hPV19UUkVFUzsKLQkJCWJyZWFrOwotCQljYXNlICdsJzoKLQkJCWxzX29wdGlvbnMgfD0gTFNfU0hPV19TSVpFOwotCQkJYnJlYWs7Ci0JCWNhc2UgJy0nOgotCQkJaWYgKCFzdHJjbXAoYXJndlsxXSsyLCAibmFtZS1vbmx5IikgfHwKLQkJCSAgICAhc3RyY21wKGFyZ3ZbMV0rMiwgIm5hbWUtc3RhdHVzIikpIHsKLQkJCQlsc19vcHRpb25zIHw9IExTX05BTUVfT05MWTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmICghc3RyY21wKGFyZ3ZbMV0rMiwgImxvbmciKSkgewotCQkJCWxzX29wdGlvbnMgfD0gTFNfU0hPV19TSVpFOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKCFzdHJjbXAoYXJndlsxXSsyLCAiZnVsbC1uYW1lIikpIHsKLQkJCQljaG9tcF9wcmVmaXggPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKCFzdHJjbXAoYXJndlsxXSsyLCAiZnVsbC10cmVlIikpIHsKLQkJCQlsc190cmVlX3ByZWZpeCA9IHByZWZpeCA9IE5VTEw7Ci0JCQkJY2hvbXBfcHJlZml4ID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmICghcHJlZml4Y21wKGFyZ3ZbMV0rMiwgImFiYnJldj0iKSkgewotCQkJCWFiYnJldiA9IHN0cnRvdWwoYXJndlsxXSs5LCBOVUxMLCAxMCk7Ci0JCQkJaWYgKGFiYnJldiAmJiBhYmJyZXYgPCBNSU5JTVVNX0FCQlJFVikKLQkJCQkJYWJicmV2ID0gTUlOSU1VTV9BQkJSRVY7Ci0JCQkJZWxzZSBpZiAoYWJicmV2ID4gNDApCi0JCQkJCWFiYnJldiA9IDQwOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKCFzdHJjbXAoYXJndlsxXSsyLCAiYWJicmV2IikpIHsKLQkJCQlhYmJyZXYgPSBERUZBVUxUX0FCQlJFVjsKLQkJCQlicmVhazsKLQkJCX0KLQkJCS8qIG90aGVyd2lzZSBmYWxsdGhydSAqLwotCQlkZWZhdWx0OgotCQkJdXNhZ2UobHNfdHJlZV91c2FnZSk7Ci0JCX0KLQkJYXJnYy0tOyBhcmd2Kys7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGxzX3RyZWVfb3B0aW9ucywKKwkJCSAgICAgbHNfdHJlZV91c2FnZSwgMCk7CisJaWYgKGZ1bGxfdHJlZSkgeworCQlsc190cmVlX3ByZWZpeCA9IHByZWZpeCA9IE5VTEw7CisJCWNob21wX3ByZWZpeCA9IDA7CiAJfQogCS8qIC1kIC1yIHNob3VsZCBpbXBseSAtdCwgYnV0IC1kIGJ5IGl0c2VsZiBzaG91bGQgbm90IGhhdmUgdG8uICovCiAJaWYgKCAoTFNfVFJFRV9PTkxZfExTX1JFQ1VSU0lWRSkgPT0KIAkgICAgKChMU19UUkVFX09OTFl8TFNfUkVDVVJTSVZFKSAmIGxzX29wdGlvbnMpKQogCQlsc19vcHRpb25zIHw9IExTX1NIT1dfVFJFRVM7CiAKLQlpZiAoYXJnYyA8IDIpCi0JCXVzYWdlKGxzX3RyZWVfdXNhZ2UpOwotCWlmIChnZXRfc2hhMShhcmd2WzFdLCBzaGExKSkKLQkJZGllKCJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIsIGFyZ3ZbMV0pOworCWlmIChhcmdjIDwgMSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGxzX3RyZWVfdXNhZ2UsIGxzX3RyZWVfb3B0aW9ucyk7CisJaWYgKGdldF9zaGExKGFyZ3ZbMF0sIHNoYTEpKQorCQlkaWUoIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIiwgYXJndlswXSk7CiAKLQlwYXRoc3BlYyA9IGdldF9wYXRoc3BlYyhwcmVmaXgsIGFyZ3YgKyAyKTsKKwlwYXRoc3BlYyA9IGdldF9wYXRoc3BlYyhwcmVmaXgsIGFyZ3YgKyAxKTsKIAl0cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdChzaGExKTsKIAlpZiAoIXRyZWUpCiAJCWRpZSgibm90IGEgdHJlZSBvYmplY3QiKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tbWFpbGluZm8uYyBiL2J1aWx0aW4tbWFpbGluZm8uYwppbmRleCAxZWVlYjRkLi5jZTJlZjZiIDEwMDY0NAotLS0gYS9idWlsdGluLW1haWxpbmZvLmMKKysrIGIvYnVpbHRpbi1tYWlsaW5mby5jCkBAIC0xMCw2ICsxMCw3IEBACiBzdGF0aWMgRklMRSAqY21pdG1zZywgKnBhdGNoZmlsZSwgKmZpbiwgKmZvdXQ7CiAKIHN0YXRpYyBpbnQga2VlcF9zdWJqZWN0Oworc3RhdGljIGludCBrZWVwX25vbl9wYXRjaF9icmFja2V0c19pbl9zdWJqZWN0Owogc3RhdGljIGNvbnN0IGNoYXIgKm1ldGFpbmZvX2NoYXJzZXQ7CiBzdGF0aWMgc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CiBzdGF0aWMgc3RydWN0IHN0cmJ1ZiBuYW1lID0gU1RSQlVGX0lOSVQ7CkBAIC0yNSw2ICsyNiw4IEBACiBzdGF0aWMgc3RydWN0IHN0cmJ1ZiBjaGFyc2V0ID0gU1RSQlVGX0lOSVQ7CiBzdGF0aWMgaW50IHBhdGNoX2xpbmVzOwogc3RhdGljIHN0cnVjdCBzdHJidWYgKipwX2hkcl9kYXRhLCAqKnNfaGRyX2RhdGE7CitzdGF0aWMgaW50IHVzZV9zY2lzc29yczsKK3N0YXRpYyBpbnQgdXNlX2luYm9keV9oZWFkZXJzID0gMTsKIAogI2RlZmluZSBNQVhfSERSX1BBUlNFRCAxMAogI2RlZmluZSBNQVhfQk9VTkRBUklFUyA1CkBAIC0xOTMsOCArMTk2LDcgQEAKIAkJKmNvbnRlbnRfdG9wID0gYm91bmRhcnk7CiAJCWJvdW5kYXJ5ID0gTlVMTDsKIAl9Ci0JaWYgKHNsdXJwX2F0dHIobGluZS0+YnVmLCAiY2hhcnNldD0iLCAmY2hhcnNldCkpCi0JCXN0cmJ1Zl90b2xvd2VyKCZjaGFyc2V0KTsKKwlzbHVycF9hdHRyKGxpbmUtPmJ1ZiwgImNoYXJzZXQ9IiwgJmNoYXJzZXQpOwogCiAJaWYgKGJvdW5kYXJ5KSB7CiAJCXN0cmJ1Zl9yZWxlYXNlKGJvdW5kYXJ5KTsKQEAgLTIyMCwzNSArMjIyLDQxIEBACiAKIHN0YXRpYyB2b2lkIGNsZWFudXBfc3ViamVjdChzdHJ1Y3Qgc3RyYnVmICpzdWJqZWN0KQogewotCWNoYXIgKnBvczsKLQlzaXplX3QgcmVtb3ZlOwotCXdoaWxlIChzdWJqZWN0LT5sZW4pIHsKLQkJc3dpdGNoICgqc3ViamVjdC0+YnVmKSB7CisJc2l6ZV90IGF0ID0gMDsKKworCXdoaWxlIChhdCA8IHN1YmplY3QtPmxlbikgeworCQljaGFyICpwb3M7CisJCXNpemVfdCByZW1vdmU7CisKKwkJc3dpdGNoIChzdWJqZWN0LT5idWZbYXRdKSB7CiAJCWNhc2UgJ3InOiBjYXNlICdSJzoKLQkJCWlmIChzdWJqZWN0LT5sZW4gPD0gMykKKwkJCWlmIChzdWJqZWN0LT5sZW4gPD0gYXQgKyAzKQogCQkJCWJyZWFrOwotCQkJaWYgKCFtZW1jbXAoc3ViamVjdC0+YnVmICsgMSwgImU6IiwgMikpIHsKLQkJCQlzdHJidWZfcmVtb3ZlKHN1YmplY3QsIDAsIDMpOworCQkJaWYgKCFtZW1jbXAoc3ViamVjdC0+YnVmICsgYXQgKyAxLCAiZToiLCAyKSkgeworCQkJCXN0cmJ1Zl9yZW1vdmUoc3ViamVjdCwgYXQsIDMpOwogCQkJCWNvbnRpbnVlOwogCQkJfQorCQkJYXQrKzsKIAkJCWJyZWFrOwogCQljYXNlICcgJzogY2FzZSAnXHQnOiBjYXNlICc6JzoKLQkJCXN0cmJ1Zl9yZW1vdmUoc3ViamVjdCwgMCwgMSk7CisJCQlzdHJidWZfcmVtb3ZlKHN1YmplY3QsIGF0LCAxKTsKIAkJCWNvbnRpbnVlOwogCQljYXNlICdbJzoKLQkJCWlmICgocG9zID0gc3RyY2hyKHN1YmplY3QtPmJ1ZiwgJ10nKSkpIHsKLQkJCQlyZW1vdmUgPSBwb3MgLSBzdWJqZWN0LT5idWY7Ci0JCQkJaWYgKHJlbW92ZSA8PSAoc3ViamVjdC0+bGVuIC0gcmVtb3ZlKSAqIDIpIHsKLQkJCQkJc3RyYnVmX3JlbW92ZShzdWJqZWN0LCAwLCByZW1vdmUgKyAxKTsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJfSBlbHNlCi0JCQkJc3RyYnVmX3JlbW92ZShzdWJqZWN0LCAwLCAxKTsKLQkJCWJyZWFrOworCQkJcG9zID0gc3RyY2hyKHN1YmplY3QtPmJ1ZiArIGF0LCAnXScpOworCQkJaWYgKCFwb3MpCisJCQkJYnJlYWs7CisJCQlyZW1vdmUgPSBwb3MgLSBzdWJqZWN0LT5idWYgKyBhdCArIDE7CisJCQlpZiAoIWtlZXBfbm9uX3BhdGNoX2JyYWNrZXRzX2luX3N1YmplY3QgfHwKKwkJCSAgICAoNyA8PSByZW1vdmUgJiYKKwkJCSAgICAgbWVtbWVtKHN1YmplY3QtPmJ1ZiArIGF0LCByZW1vdmUsICJQQVRDSCIsIDUpKSkKKwkJCQlzdHJidWZfcmVtb3ZlKHN1YmplY3QsIGF0LCByZW1vdmUpOworCQkJZWxzZQorCQkJCWF0ICs9IHJlbW92ZTsKKwkJCWNvbnRpbnVlOwogCQl9Ci0JCXN0cmJ1Zl90cmltKHN1YmplY3QpOwotCQlyZXR1cm47CisJCWJyZWFrOwogCX0KKwlzdHJidWZfdHJpbShzdWJqZWN0KTsKIH0KIAogc3RhdGljIHZvaWQgY2xlYW51cF9zcGFjZShzdHJ1Y3Qgc3RyYnVmICpzYikKQEAgLTQ4MSw3ICs0ODksNyBAQAogCQlpZiAoaXNfdXRmOChsaW5lLT5idWYpKQogCQkJcmV0dXJuIE5VTEw7CiAJfQotCXJldHVybiAibGF0aW4xIjsKKwlyZXR1cm4gIklTTzg4NTktMSI7CiB9CiAKIHN0YXRpYyB2b2lkIGNvbnZlcnRfdG9fdXRmOChzdHJ1Y3Qgc3RyYnVmICpsaW5lLCBjb25zdCBjaGFyICpjaGFyc2V0KQpAQCAtNDk0LDcgKzUwMiw3IEBACiAJCQlyZXR1cm47CiAJfQogCi0JaWYgKCFzdHJjbXAobWV0YWluZm9fY2hhcnNldCwgY2hhcnNldCkpCisJaWYgKCFzdHJjYXNlY21wKG1ldGFpbmZvX2NoYXJzZXQsIGNoYXJzZXQpKQogCQlyZXR1cm47CiAJb3V0ID0gcmVlbmNvZGVfc3RyaW5nKGxpbmUtPmJ1ZiwgbWV0YWluZm9fY2hhcnNldCwgY2hhcnNldCk7CiAJaWYgKCFvdXQpCkBAIC01NTAsNyArNTU4LDYgQEAKIAkJaWYgKGNwICsgMyAtIGl0LT5idWYgPiBpdC0+bGVuKQogCQkJZ290byBkZWNvZGVfaGVhZGVyX2JxX291dDsKIAkJc3RyYnVmX2FkZCgmY2hhcnNldF9xLCBlcCwgY3AgLSBlcCk7Ci0JCXN0cmJ1Zl90b2xvd2VyKCZjaGFyc2V0X3EpOwogCiAJCWVuY29kaW5nID0gY3BbMV07CiAJCWlmICghZW5jb2RpbmcgfHwgY3BbMl0gIT0gJz8nKQpAQCAtNzE0LDYgKzcyMSw1NiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGlzX3NjaXNzb3JzX2xpbmUoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlzaXplX3QgaSwgbGVuID0gbGluZS0+bGVuOworCWludCBzY2lzc29ycyA9IDAsIGdhcCA9IDA7CisJaW50IGZpcnN0X25vbmJsYW5rID0gLTE7CisJaW50IGxhc3Rfbm9uYmxhbmsgPSAwLCB2aXNpYmxlLCBwZXJmb3JhdGlvbiA9IDAsIGluX3BlcmZvcmF0aW9uID0gMDsKKwljb25zdCBjaGFyICpidWYgPSBsaW5lLT5idWY7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKGlzc3BhY2UoYnVmW2ldKSkgeworCQkJaWYgKGluX3BlcmZvcmF0aW9uKSB7CisJCQkJcGVyZm9yYXRpb24rKzsKKwkJCQlnYXArKzsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCWxhc3Rfbm9uYmxhbmsgPSBpOworCQlpZiAoZmlyc3Rfbm9uYmxhbmsgPCAwKQorCQkJZmlyc3Rfbm9uYmxhbmsgPSBpOworCQlpZiAoYnVmW2ldID09ICctJykgeworCQkJaW5fcGVyZm9yYXRpb24gPSAxOworCQkJcGVyZm9yYXRpb24rKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChpICsgMSA8IGxlbiAmJgorCQkgICAgKCFtZW1jbXAoYnVmICsgaSwgIj44IiwgMikgfHwgIW1lbWNtcChidWYgKyBpLCAiODwiLCAyKSkpIHsKKwkJCWluX3BlcmZvcmF0aW9uID0gMTsKKwkJCXBlcmZvcmF0aW9uICs9IDI7CisJCQlzY2lzc29ycyArPSAyOworCQkJaSsrOworCQkJY29udGludWU7CisJCX0KKwkJaW5fcGVyZm9yYXRpb24gPSAwOworCX0KKworCS8qCisJICogVGhlIG1hcmsgbXVzdCBiZSBhdCBsZWFzdCA4IGJ5dGVzIGxvbmcgKGUuZy4gIi0tID44IC0tIikuCisJICogRXZlbiB0aG91Z2ggdGhlcmUgY2FuIGJlIGFyYml0cmFyeSBjcnVmdCBvbiB0aGUgc2FtZSBsaW5lCisJICogKGUuZy4gImN1dCBoZXJlIiksIGluIG9yZGVyIHRvIGF2b2lkIG1pc2lkZW50aWZpY2F0aW9uLCB0aGUKKwkgKiBwZXJmb3JhdGlvbiBtdXN0IG9jY3VweSBtb3JlIHRoYW4gYSB0aGlyZCBvZiB0aGUgdmlzaWJsZQorCSAqIHdpZHRoIG9mIHRoZSBsaW5lLCBhbmQgZGFzaGVzIGFuZCBzY2lzc29ycyBtdXN0IG9jY3VweSBtb3JlCisJICogdGhhbiBoYWxmIG9mIHRoZSBwZXJmb3JhdGlvbi4KKwkgKi8KKworCXZpc2libGUgPSBsYXN0X25vbmJsYW5rIC0gZmlyc3Rfbm9uYmxhbmsgKyAxOworCXJldHVybiAoc2Npc3NvcnMgJiYgOCA8PSB2aXNpYmxlICYmCisJCXZpc2libGUgPCBwZXJmb3JhdGlvbiAqIDMgJiYKKwkJZ2FwICogMiA8IHBlcmZvcmF0aW9uKTsKK30KKwogc3RhdGljIGludCBoYW5kbGVfY29tbWl0X21zZyhzdHJ1Y3Qgc3RyYnVmICpsaW5lKQogewogCXN0YXRpYyBpbnQgc3RpbGxfbG9va2luZyA9IDE7CkBAIC03MjIsMTcgKzc3OSw0NCBAQAogCQlyZXR1cm4gMDsKIAogCWlmIChzdGlsbF9sb29raW5nKSB7Ci0JCXN0cmJ1Zl9sdHJpbShsaW5lKTsKLQkJaWYgKCFsaW5lLT5sZW4pCi0JCQlyZXR1cm4gMDsKLQkJaWYgKChzdGlsbF9sb29raW5nID0gY2hlY2tfaGVhZGVyKGxpbmUsIHNfaGRyX2RhdGEsIDApKSAhPSAwKQorCQlpZiAoIWxpbmUtPmxlbiB8fCAobGluZS0+bGVuID09IDEgJiYgbGluZS0+YnVmWzBdID09ICdcbicpKQogCQkJcmV0dXJuIDA7CiAJfQogCisJaWYgKHVzZV9pbmJvZHlfaGVhZGVycyAmJiBzdGlsbF9sb29raW5nKSB7CisJCXN0aWxsX2xvb2tpbmcgPSBjaGVja19oZWFkZXIobGluZSwgc19oZHJfZGF0YSwgMCk7CisJCWlmIChzdGlsbF9sb29raW5nKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlCisJCS8qIE9ubHkgdHJpbSB0aGUgZmlyc3QgKGJsYW5rKSBsaW5lIG9mIHRoZSBjb21taXQgbWVzc2FnZQorCQkgKiB3aGVuIGlnbm9yaW5nIGluLWJvZHkgaGVhZGVycy4KKwkJICovCisJCXN0aWxsX2xvb2tpbmcgPSAwOworCiAJLyogbm9ybWFsaXplIHRoZSBsb2cgbWVzc2FnZSB0byBVVEYtOC4gKi8KIAlpZiAobWV0YWluZm9fY2hhcnNldCkKIAkJY29udmVydF90b191dGY4KGxpbmUsIGNoYXJzZXQuYnVmKTsKIAorCWlmICh1c2Vfc2Npc3NvcnMgJiYgaXNfc2Npc3NvcnNfbGluZShsaW5lKSkgeworCQlpbnQgaTsKKwkJaWYgKGZzZWVrKGNtaXRtc2csIDBMLCBTRUVLX1NFVCkpCisJCQlkaWVfZXJybm8oIkNvdWxkIG5vdCByZXdpbmQgb3V0cHV0IG1lc3NhZ2UgZmlsZSIpOworCQlpZiAoZnRydW5jYXRlKGZpbGVubyhjbWl0bXNnKSwgMCkpCisJCQlkaWVfZXJybm8oIkNvdWxkIG5vdCB0cnVuY2F0ZSBvdXRwdXQgbWVzc2FnZSBmaWxlIGF0IHNjaXNzb3JzIik7CisJCXN0aWxsX2xvb2tpbmcgPSAxOworCisJCS8qCisJCSAqIFdlIG1heSBoYXZlIGFscmVhZHkgcmVhZCAic2Vjb25kYXJ5IGhlYWRlcnMiOyBwdXJnZQorCQkgKiB0aGVtIHRvIGdpdmUgb3Vyc2VsdmVzIGEgY2xlYW4gcmVzdGFydC4KKwkJICovCisJCWZvciAoaSA9IDA7IGhlYWRlcltpXTsgaSsrKSB7CisJCQlpZiAoc19oZHJfZGF0YVtpXSkKKwkJCQlzdHJidWZfcmVsZWFzZShzX2hkcl9kYXRhW2ldKTsKKwkJCXNfaGRyX2RhdGFbaV0gPSBOVUxMOworCQl9CisJCXJldHVybiAwOworCX0KKwogCWlmIChwYXRjaGJyZWFrKGxpbmUpKSB7CiAJCWZjbG9zZShjbWl0bXNnKTsKIAkJY21pdG1zZyA9IE5VTEw7CkBAIC03NjcsNyArODUxLDYgQEAKIAogc3RhdGljIHZvaWQgaGFuZGxlX2JvZHkodm9pZCkKIHsKLQlpbnQgbGVuID0gMDsKIAlzdHJ1Y3Qgc3RyYnVmIHByZXYgPSBTVFJCVUZfSU5JVDsKIAogCS8qIFNraXAgdXAgdG8gdGhlIGZpcnN0IGJvdW5kYXJ5ICovCkBAIC03NzcsOCArODYwLDYgQEAKIAl9CiAKIAlkbyB7Ci0JCXN0cmJ1Zl9zZXRsZW4oJmxpbmUsIGxpbmUubGVuICsgbGVuKTsKLQogCQkvKiBwcm9jZXNzIGFueSBib3VuZGFyeSBsaW5lcyAqLwogCQlpZiAoKmNvbnRlbnRfdG9wICYmIGlzX211bHRpcGFydF9ib3VuZGFyeSgmbGluZSkpIHsKIAkJCS8qIGZsdXNoIGFueSBsZWZ0b3ZlciAqLwpAQCAtODM0LDEwICs5MTUsNyBAQAogCQkJaGFuZGxlX2ZpbHRlcigmbGluZSk7CiAJCX0KIAotCQlzdHJidWZfcmVzZXQoJmxpbmUpOwotCQlpZiAoc3RyYnVmX2F2YWlsKCZsaW5lKSA8IDEwMCkKLQkJCXN0cmJ1Zl9ncm93KCZsaW5lLCAxMDApOwotCX0gd2hpbGUgKChsZW4gPSByZWFkX2xpbmVfd2l0aF9udWwobGluZS5idWYsIHN0cmJ1Zl9hdmFpbCgmbGluZSksIGZpbikpKTsKKwl9IHdoaWxlICghc3RyYnVmX2dldHdob2xlbGluZSgmbGluZSwgZmluLCAnXG4nKSk7CiAKIGhhbmRsZV9ib2R5X291dDoKIAlzdHJidWZfcmVsZWFzZSgmcHJldik7CkBAIC04OTMsMTIgKzk3MSw5IEBACiAJZnByaW50Zihmb3V0LCAiXG4iKTsKIH0KIAotc3RhdGljIGludCBtYWlsaW5mbyhGSUxFICppbiwgRklMRSAqb3V0LCBpbnQga3MsIGNvbnN0IGNoYXIgKmVuY29kaW5nLAotCQkgICAgY29uc3QgY2hhciAqbXNnLCBjb25zdCBjaGFyICpwYXRjaCkKK3N0YXRpYyBpbnQgbWFpbGluZm8oRklMRSAqaW4sIEZJTEUgKm91dCwgY29uc3QgY2hhciAqbXNnLCBjb25zdCBjaGFyICpwYXRjaCkKIHsKIAlpbnQgcGVlazsKLQlrZWVwX3N1YmplY3QgPSBrczsKLQltZXRhaW5mb19jaGFyc2V0ID0gZW5jb2Rpbmc7CiAJZmluID0gaW47CiAJZm91dCA9IG91dDsKIApAQCAtOTMyLDggKzEwMDcsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBnaXRfbWFpbGluZm9fY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKnVudXNlZCkKK3sKKwlpZiAocHJlZml4Y21wKHZhciwgIm1haWxpbmZvLiIpKQorCQlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIHVudXNlZCk7CisJaWYgKCFzdHJjbXAodmFyLCAibWFpbGluZm8uc2Npc3NvcnMiKSkgeworCQl1c2Vfc2Npc3NvcnMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwkvKiBwZXJoYXBzIG90aGVycyBoZXJlICovCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBjaGFyIG1haWxpbmZvX3VzYWdlW10gPQotCSJnaXQgbWFpbGluZm8gWy1rXSBbLXUgfCAtLWVuY29kaW5nPTxlbmNvZGluZz4gfCAtbl0gbXNnIHBhdGNoIDxtYWlsID5pbmZvIjsKKwkiZ2l0IG1haWxpbmZvIFsta3wtYl0gWy11IHwgLS1lbmNvZGluZz08ZW5jb2Rpbmc+IHwgLW5dIFstLXNjaXNzb3JzIHwgLS1uby1zY2lzc29yc10gbXNnIHBhdGNoIDwgbWFpbCA+aW5mbyI7CiAKIGludCBjbWRfbWFpbGluZm8oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CkBAIC05NDIsMjAgKzEwMjksMjggQEAKIAkvKiBORUVEU1dPUks6IG1pZ2h0IHdhbnQgdG8gZG8gdGhlIG9wdGlvbmFsIC5naXQvIGRpcmVjdG9yeQogCSAqIGRpc2NvdmVyeQogCSAqLwotCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKwlnaXRfY29uZmlnKGdpdF9tYWlsaW5mb19jb25maWcsIE5VTEwpOwogCi0JZGVmX2NoYXJzZXQgPSAoZ2l0X2NvbW1pdF9lbmNvZGluZyA/IGdpdF9jb21taXRfZW5jb2RpbmcgOiAidXRmLTgiKTsKKwlkZWZfY2hhcnNldCA9IChnaXRfY29tbWl0X2VuY29kaW5nID8gZ2l0X2NvbW1pdF9lbmNvZGluZyA6ICJVVEYtOCIpOwogCW1ldGFpbmZvX2NoYXJzZXQgPSBkZWZfY2hhcnNldDsKIAogCXdoaWxlICgxIDwgYXJnYyAmJiBhcmd2WzFdWzBdID09ICctJykgewogCQlpZiAoIXN0cmNtcChhcmd2WzFdLCAiLWsiKSkKIAkJCWtlZXBfc3ViamVjdCA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi1iIikpCisJCQlrZWVwX25vbl9wYXRjaF9icmFja2V0c19pbl9zdWJqZWN0ID0gMTsKIAkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLXUiKSkKIAkJCW1ldGFpbmZvX2NoYXJzZXQgPSBkZWZfY2hhcnNldDsKIAkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLW4iKSkKIAkJCW1ldGFpbmZvX2NoYXJzZXQgPSBOVUxMOwogCQllbHNlIGlmICghcHJlZml4Y21wKGFyZ3ZbMV0sICItLWVuY29kaW5nPSIpKQogCQkJbWV0YWluZm9fY2hhcnNldCA9IGFyZ3ZbMV0gKyAxMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1zY2lzc29ycyIpKQorCQkJdXNlX3NjaXNzb3JzID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1uby1zY2lzc29ycyIpKQorCQkJdXNlX3NjaXNzb3JzID0gMDsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1uby1pbmJvZHktaGVhZGVycyIpKQorCQkJdXNlX2luYm9keV9oZWFkZXJzID0gMDsKIAkJZWxzZQogCQkJdXNhZ2UobWFpbGluZm9fdXNhZ2UpOwogCQlhcmdjLS07IGFyZ3YrKzsKQEAgLTk2NCw1ICsxMDU5LDUgQEAKIAlpZiAoYXJnYyAhPSAzKQogCQl1c2FnZShtYWlsaW5mb191c2FnZSk7CiAKLQlyZXR1cm4gISFtYWlsaW5mbyhzdGRpbiwgc3Rkb3V0LCBrZWVwX3N1YmplY3QsIG1ldGFpbmZvX2NoYXJzZXQsIGFyZ3ZbMV0sIGFyZ3ZbMl0pOworCXJldHVybiAhIW1haWxpbmZvKHN0ZGluLCBzdGRvdXQsIGFyZ3ZbMV0sIGFyZ3ZbMl0pOwogfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1tYWlsc3BsaXQuYyBiL2J1aWx0aW4tbWFpbHNwbGl0LmMKaW5kZXggNzFmM2IzYi4uMjA3ZTM1OCAxMDA2NDQKLS0tIGEvYnVpbHRpbi1tYWlsc3BsaXQuYworKysgYi9idWlsdGluLW1haWxzcGxpdC5jCkBAIC03LDYgKzcsNyBAQAogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSAiYnVpbHRpbi5oIgogI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyIGdpdF9tYWlsc3BsaXRfdXNhZ2VbXSA9CiAiZ2l0IG1haWxzcGxpdCBbLWQ8cHJlYz5dIFstZjxuPl0gWy1iXSAtbzxkaXJlY3Rvcnk+IFs8bWJveD58PE1haWxkaXI+Li4uXSI7CkBAIC00MiwyNiArNDMsOCBAQAogCXJldHVybiAxOwogfQogCi0vKiBDb3VsZCBiZSBhcyBzbWFsbCBhcyA2NCwgZW5vdWdoIHRvIGhvbGQgYSBVbml4ICJGcm9tICIgbGluZS4gKi8KLXN0YXRpYyBjaGFyIGJ1Zls0MDk2XTsKLQotLyogV2UgY2Fubm90IHVzZSBmZ2V0cygpIGJlY2F1c2Ugb3VyIGxpbmVzIGNhbiBjb250YWluIE5VTHMgKi8KLWludCByZWFkX2xpbmVfd2l0aF9udWwoY2hhciAqYnVmLCBpbnQgc2l6ZSwgRklMRSAqaW4pCi17Ci0JaW50IGxlbiA9IDAsIGM7Ci0KLQlmb3IgKDs7KSB7Ci0JCWMgPSBnZXRjKGluKTsKLQkJaWYgKGMgPT0gRU9GKQotCQkJYnJlYWs7Ci0JCWJ1ZltsZW4rK10gPSBjOwotCQlpZiAoYyA9PSAnXG4nIHx8IGxlbiArIDEgPj0gc2l6ZSkKLQkJCWJyZWFrOwotCX0KLQlidWZbbGVuXSA9ICdcMCc7Ci0KLQlyZXR1cm4gbGVuOwotfQorc3RhdGljIHN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CitzdGF0aWMgaW50IGtlZXBfY3I7CiAKIC8qIENhbGxlZCB3aXRoIHRoZSBmaXJzdCBsaW5lIChwb3RlbnRpYWxseSBwYXJ0aWFsKQogICogYWxyZWFkeSBpbiBidWZbXSAtLSBub3JtYWxseSB0aGF0IHNob3VsZCBiZWdpbiB3aXRoCkBAIC03MSwzNyArNTQsMzkgQEAKIHN0YXRpYyBpbnQgc3BsaXRfb25lKEZJTEUgKm1ib3gsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBhbGxvd19iYXJlKQogewogCUZJTEUgKm91dHB1dCA9IE5VTEw7Ci0JaW50IGxlbiA9IHN0cmxlbihidWYpOwogCWludCBmZDsKIAlpbnQgc3RhdHVzID0gMDsKLQlpbnQgaXNfYmFyZSA9ICFpc19mcm9tX2xpbmUoYnVmLCBsZW4pOworCWludCBpc19iYXJlID0gIWlzX2Zyb21fbGluZShidWYuYnVmLCBidWYubGVuKTsKIAogCWlmIChpc19iYXJlICYmICFhbGxvd19iYXJlKQogCQlnb3RvIGNvcnJ1cHQ7CiAKIAlmZCA9IG9wZW4obmFtZSwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMLCAwNjY2KTsKIAlpZiAoZmQgPCAwKQotCQlkaWUoImNhbm5vdCBvcGVuIG91dHB1dCBmaWxlICVzIiwgbmFtZSk7Ci0Jb3V0cHV0ID0gZmRvcGVuKGZkLCAidyIpOworCQlkaWVfZXJybm8oImNhbm5vdCBvcGVuIG91dHB1dCBmaWxlICclcyciLCBuYW1lKTsKKwlvdXRwdXQgPSB4ZmRvcGVuKGZkLCAidyIpOwogCiAJLyogQ29weSBpdCBvdXQsIHdoaWxlIHNlYXJjaGluZyBmb3IgYSBsaW5lIHRoYXQgYmVnaW5zIHdpdGgKIAkgKiAiRnJvbSAiIGFuZCBoYXZpbmcgc29tZXRoaW5nIHRoYXQgbG9va3MgbGlrZSBhIGRhdGUgZm9ybWF0LgogCSAqLwogCWZvciAoOzspIHsKLQkJaW50IGlzX3BhcnRpYWwgPSBsZW4gJiYgYnVmW2xlbi0xXSAhPSAnXG4nOworCQlpZiAoIWtlZXBfY3IgJiYgYnVmLmxlbiA+IDEgJiYgYnVmLmJ1ZltidWYubGVuLTFdID09ICdcbicgJiYKKwkJCWJ1Zi5idWZbYnVmLmxlbi0yXSA9PSAnXHInKSB7CisJCQlzdHJidWZfc2V0bGVuKCZidWYsIGJ1Zi5sZW4tMik7CisJCQlzdHJidWZfYWRkY2goJmJ1ZiwgJ1xuJyk7CisJCX0KIAotCQlpZiAoZndyaXRlKGJ1ZiwgMSwgbGVuLCBvdXRwdXQpICE9IGxlbikKLQkJCWRpZSgiY2Fubm90IHdyaXRlIG91dHB1dCIpOworCQlpZiAoZndyaXRlKGJ1Zi5idWYsIDEsIGJ1Zi5sZW4sIG91dHB1dCkgIT0gYnVmLmxlbikKKwkJCWRpZV9lcnJubygiY2Fubm90IHdyaXRlIG91dHB1dCIpOwogCi0JCWxlbiA9IHJlYWRfbGluZV93aXRoX251bChidWYsIHNpemVvZihidWYpLCBtYm94KTsKLQkJaWYgKGxlbiA9PSAwKSB7CisJCWlmIChzdHJidWZfZ2V0d2hvbGVsaW5lKCZidWYsIG1ib3gsICdcbicpKSB7CiAJCQlpZiAoZmVvZihtYm94KSkgewogCQkJCXN0YXR1cyA9IDE7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQlkaWUoImNhbm5vdCByZWFkIG1ib3giKTsKKwkJCWRpZV9lcnJubygiY2Fubm90IHJlYWQgbWJveCIpOwogCQl9Ci0JCWlmICghaXNfcGFydGlhbCAmJiAhaXNfYmFyZSAmJiBpc19mcm9tX2xpbmUoYnVmLCBsZW4pKQorCQlpZiAoIWlzX2JhcmUgJiYgaXNfZnJvbV9saW5lKGJ1Zi5idWYsIGJ1Zi5sZW4pKQogCQkJYnJlYWs7IC8qIGRvbmUgd2l0aCBvbmUgbWVzc2FnZSAqLwogCX0KIAlmY2xvc2Uob3V0cHV0KTsKQEAgLTE2Niw3ICsxNTEsNyBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlpZiAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZikgPT0gTlVMTCkgeworCQlpZiAoc3RyYnVmX2dldHdob2xlbGluZSgmYnVmLCBmLCAnXG4nKSkgewogCQkJZXJyb3IoImNhbm5vdCByZWFkIG1haWwgJXMgKCVzKSIsIGZpbGUsIHN0cmVycm9yKGVycm5vKSk7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMjAzLDcgKzE4OCw3IEBACiAJfSB3aGlsZSAoaXNzcGFjZShwZWVrKSk7CiAJdW5nZXRjKHBlZWssIGYpOwogCi0JaWYgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGYpID09IE5VTEwpIHsKKwlpZiAoc3RyYnVmX2dldHdob2xlbGluZSgmYnVmLCBmLCAnXG4nKSkgewogCQkvKiBlbXB0eSBzdGRpbiBpcyBPSyAqLwogCQlpZiAoZiAhPSBzdGRpbikgewogCQkJZXJyb3IoImNhbm5vdCByZWFkIG1ib3ggJXMiLCBmaWxlKTsKQEAgLTI0Niw4ICsyMzEsMTIgQEAKIAkJCWNvbnRpbnVlOwogCQl9IGVsc2UgaWYgKCBhcmdbMV0gPT0gJ2YnICkgewogCQkJbnIgPSBzdHJ0b2woYXJnKzIsIE5VTEwsIDEwKTsKKwkJfSBlbHNlIGlmICggYXJnWzFdID09ICdoJyApIHsKKwkJCXVzYWdlKGdpdF9tYWlsc3BsaXRfdXNhZ2UpOwogCQl9IGVsc2UgaWYgKCBhcmdbMV0gPT0gJ2InICYmICFhcmdbMl0gKSB7CiAJCQlhbGxvd19iYXJlID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0ta2VlcC1jciIpKSB7CisJCQlrZWVwX2NyID0gMTsKIAkJfSBlbHNlIGlmICggYXJnWzFdID09ICdvJyAmJiBhcmdbMl0gKSB7CiAJCQlkaXIgPSBhcmcrMjsKIAkJfSBlbHNlIGlmICggYXJnWzFdID09ICctJyAmJiAhYXJnWzJdICkgewpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1tZXJnZS1iYXNlLmMgYi9idWlsdGluLW1lcmdlLWJhc2UuYwppbmRleCAwM2ZjMWMyLi41NGU3ZWMyIDEwMDY0NAotLS0gYS9idWlsdGluLW1lcmdlLWJhc2UuYworKysgYi9idWlsdGluLW1lcmdlLWJhc2UuYwpAQCAtMjMsNyArMjMsNyBAQAogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1lcmdlX2Jhc2VfdXNhZ2VbXSA9IHsKLQkiZ2l0IG1lcmdlLWJhc2UgWy0tYWxsXSA8Y29tbWl0LWlkPiA8Y29tbWl0LWlkPi4uLiIsCisJImdpdCBtZXJnZS1iYXNlIFstYXwtLWFsbF0gPGNvbW1pdD4gPGNvbW1pdD4uLi4iLAogCU5VTEwKIH07CiAKQEAgLTUzLDcgKzUzLDcgQEAKIAl9OwogCiAJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIG1lcmdlX2Jhc2VfdXNhZ2UsIDApOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgbWVyZ2VfYmFzZV91c2FnZSwgMCk7CiAJaWYgKGFyZ2MgPCAyKQogCQl1c2FnZV93aXRoX29wdGlvbnMobWVyZ2VfYmFzZV91c2FnZSwgb3B0aW9ucyk7CiAJcmV2ID0geG1hbGxvYyhhcmdjICogc2l6ZW9mKCpyZXYpKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tbWVyZ2UtZmlsZS5jIGIvYnVpbHRpbi1tZXJnZS1maWxlLmMKaW5kZXggOTZlZGI5Ny4uMWU3MDA3MyAxMDA2NDQKLS0tIGEvYnVpbHRpbi1tZXJnZS1maWxlLmMKKysrIGIvYnVpbHRpbi1tZXJnZS1maWxlLmMKQEAgLTI1LDE1ICsyNSwyMCBAQAogCWNvbnN0IGNoYXIgKm5hbWVzWzNdID0geyBOVUxMLCBOVUxMLCBOVUxMIH07CiAJbW1maWxlX3QgbW1mc1szXTsKIAltbWJ1ZmZlcl90IHJlc3VsdCA9IHtOVUxMLCAwfTsKLQl4cHBhcmFtX3QgeHBwID0ge1hERl9ORUVEX01JTklNQUx9OworCXhtcGFyYW1fdCB4bXAgPSB7e1hERl9ORUVEX01JTklNQUx9fTsKIAlpbnQgcmV0ID0gMCwgaSA9IDAsIHRvX3N0ZG91dCA9IDA7Ci0JaW50IG1lcmdlX2xldmVsID0gWERMX01FUkdFX1pFQUxPVVNfQUxOVU07Ci0JaW50IG1lcmdlX3N0eWxlID0gMCwgcXVpZXQgPSAwOworCWludCBsZXZlbCA9IFhETF9NRVJHRV9aRUFMT1VTX0FMTlVNOworCWludCBzdHlsZSA9IDAsIHF1aWV0ID0gMDsKKwlpbnQgZmF2b3IgPSAwOwogCWludCBub25naXQ7CiAKIAlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKIAkJT1BUX0JPT0xFQU4oJ3AnLCAic3Rkb3V0IiwgJnRvX3N0ZG91dCwgInNlbmQgcmVzdWx0cyB0byBzdGFuZGFyZCBvdXRwdXQiKSwKLQkJT1BUX1NFVF9JTlQoMCwgImRpZmYzIiwgJm1lcmdlX3N0eWxlLCAidXNlIGEgZGlmZjMgYmFzZWQgbWVyZ2UiLCBYRExfTUVSR0VfRElGRjMpLAorCQlPUFRfU0VUX0lOVCgwLCAiZGlmZjMiLCAmc3R5bGUsICJ1c2UgYSBkaWZmMyBiYXNlZCBtZXJnZSIsIFhETF9NRVJHRV9ESUZGMyksCisJCU9QVF9TRVRfSU5UKDAsICJvdXJzIiwgJmZhdm9yLCAiZm9yIGNvbmZsaWN0cywgdXNlIG91ciB2ZXJzaW9uIiwKKwkJCSAgICBYRExfTUVSR0VfRkFWT1JfT1VSUyksCisJCU9QVF9TRVRfSU5UKDAsICJ0aGVpcnMiLCAmZmF2b3IsICJmb3IgY29uZmxpY3RzLCB1c2UgdGhlaXIgdmVyc2lvbiIsCisJCQkgICAgWERMX01FUkdFX0ZBVk9SX1RIRUlSUyksCiAJCU9QVF9fUVVJRVQoJnF1aWV0KSwKIAkJT1BUX0NBTExCQUNLKCdMJywgTlVMTCwgbmFtZXMsICJuYW1lIiwKIAkJCSAgICAgInNldCBsYWJlbHMgZm9yIGZpbGUxL29yaWdfZmlsZS9maWxlMiIsICZsYWJlbF9jYiksCkBAIC00NSwxMCArNTAsMTAgQEAKIAkJLyogUmVhZCB0aGUgY29uZmlndXJhdGlvbiBmaWxlICovCiAJCWdpdF9jb25maWcoZ2l0X3htZXJnZV9jb25maWcsIE5VTEwpOwogCQlpZiAoMCA8PSBnaXRfeG1lcmdlX3N0eWxlKQotCQkJbWVyZ2Vfc3R5bGUgPSBnaXRfeG1lcmdlX3N0eWxlOworCQkJc3R5bGUgPSBnaXRfeG1lcmdlX3N0eWxlOwogCX0KIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIG1lcmdlX2ZpbGVfdXNhZ2UsIDApOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgbWVyZ2VfZmlsZV91c2FnZSwgMCk7CiAJaWYgKGFyZ2MgIT0gMykKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKG1lcmdlX2ZpbGVfdXNhZ2UsIG9wdGlvbnMpOwogCWlmIChxdWlldCkgewpAQCAtNjgsNyArNzMsNyBAQAogCX0KIAogCXJldCA9IHhkbF9tZXJnZShtbWZzICsgMSwgbW1mcyArIDAsIG5hbWVzWzBdLCBtbWZzICsgMiwgbmFtZXNbMl0sCi0JCQkmeHBwLCBtZXJnZV9sZXZlbCB8IG1lcmdlX3N0eWxlLCAmcmVzdWx0KTsKKwkJCSZ4bXAsIFhETF9NRVJHRV9GTEFHUyhsZXZlbCwgc3R5bGUsIGZhdm9yKSwgJnJlc3VsdCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQogCQlmcmVlKG1tZnNbaV0ucHRyKTsKZGlmZiAtLWdpdCBhL21lcmdlLWluZGV4LmMgYi9idWlsdGluLW1lcmdlLWluZGV4LmMKc2ltaWxhcml0eSBpbmRleCA3NiUKcmVuYW1lIGZyb20gbWVyZ2UtaW5kZXguYwpyZW5hbWUgdG8gYnVpbHRpbi1tZXJnZS1pbmRleC5jCmluZGV4IGFhOWNmMjMuLjJjNGNmNWUgMTAwNjQ0Ci0tLSBhL21lcmdlLWluZGV4LmMKKysrIGIvYnVpbHRpbi1tZXJnZS1pbmRleC5jCkBAIC0zLDQ1ICszLDIwIEBACiAjaW5jbHVkZSAiZXhlY19jbWQuaCIKIAogc3RhdGljIGNvbnN0IGNoYXIgKnBnbTsKLXN0YXRpYyBjb25zdCBjaGFyICphcmd1bWVudHNbOV07CiBzdGF0aWMgaW50IG9uZV9zaG90LCBxdWlldDsKIHN0YXRpYyBpbnQgZXJyOwogCi1zdGF0aWMgdm9pZCBydW5fcHJvZ3JhbSh2b2lkKQotewotCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNoaWxkOwotCW1lbXNldCgmY2hpbGQsIDAsIHNpemVvZihjaGlsZCkpOwotCWNoaWxkLmFyZ3YgPSBhcmd1bWVudHM7Ci0JaWYgKHJ1bl9jb21tYW5kKCZjaGlsZCkpIHsKLQkJaWYgKG9uZV9zaG90KSB7Ci0JCQllcnIrKzsKLQkJfSBlbHNlIHsKLQkJCWlmICghcXVpZXQpCi0JCQkJZGllKCJtZXJnZSBwcm9ncmFtIGZhaWxlZCIpOwotCQkJZXhpdCgxKTsKLQkJfQotCX0KLX0KLQogc3RhdGljIGludCBtZXJnZV9lbnRyeShpbnQgcG9zLCBjb25zdCBjaGFyICpwYXRoKQogewogCWludCBmb3VuZDsKKwljb25zdCBjaGFyICphcmd1bWVudHNbXSA9IHsgcGdtLCAiIiwgIiIsICIiLCBwYXRoLCAiIiwgIiIsICIiLCBOVUxMIH07CisJY2hhciBoZXhidWZbNF1bNjBdOworCWNoYXIgb3duYnVmWzRdWzYwXTsKIAogCWlmIChwb3MgPj0gYWN0aXZlX25yKQogCQlkaWUoImdpdCBtZXJnZS1pbmRleDogJXMgbm90IGluIHRoZSBjYWNoZSIsIHBhdGgpOwotCWFyZ3VtZW50c1swXSA9IHBnbTsKLQlhcmd1bWVudHNbMV0gPSAiIjsKLQlhcmd1bWVudHNbMl0gPSAiIjsKLQlhcmd1bWVudHNbM10gPSAiIjsKLQlhcmd1bWVudHNbNF0gPSBwYXRoOwotCWFyZ3VtZW50c1s1XSA9ICIiOwotCWFyZ3VtZW50c1s2XSA9ICIiOwotCWFyZ3VtZW50c1s3XSA9ICIiOwotCWFyZ3VtZW50c1s4XSA9IE5VTEw7CiAJZm91bmQgPSAwOwogCWRvIHsKLQkJc3RhdGljIGNoYXIgaGV4YnVmWzRdWzYwXTsKLQkJc3RhdGljIGNoYXIgb3duYnVmWzRdWzYwXTsKIAkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOwogCQlpbnQgc3RhZ2UgPSBjZV9zdGFnZShjZSk7CiAKQEAgLTU1LDcgKzMwLDE2IEBACiAJfSB3aGlsZSAoKytwb3MgPCBhY3RpdmVfbnIpOwogCWlmICghZm91bmQpCiAJCWRpZSgiZ2l0IG1lcmdlLWluZGV4OiAlcyBub3QgaW4gdGhlIGNhY2hlIiwgcGF0aCk7Ci0JcnVuX3Byb2dyYW0oKTsKKworCWlmIChydW5fY29tbWFuZF92X29wdChhcmd1bWVudHMsIDApKSB7CisJCWlmIChvbmVfc2hvdCkKKwkJCWVycisrOworCQllbHNlIHsKKwkJCWlmICghcXVpZXQpCisJCQkJZGllKCJtZXJnZSBwcm9ncmFtIGZhaWxlZCIpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KIAlyZXR1cm4gZm91bmQ7CiB9CiAKQEAgLTgyLDcgKzY2LDcgQEAKIAl9CiB9CiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK2ludCBjbWRfbWVyZ2VfaW5kZXgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CiAJaW50IGksIGZvcmNlX2ZpbGUgPSAwOwogCkBAIC05NCw5ICs3OCw2IEBACiAJaWYgKGFyZ2MgPCAzKQogCQl1c2FnZSgiZ2l0IG1lcmdlLWluZGV4IFstb10gWy1xXSA8bWVyZ2UtcHJvZ3JhbT4gKC1hIHwgWy0tXSA8ZmlsZW5hbWU+KikiKTsKIAotCWdpdF9leHRyYWN0X2FyZ3YwX3BhdGgoYXJndlswXSk7Ci0KLQlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CiAJcmVhZF9jYWNoZSgpOwogCiAJaSA9IDE7CkBAIC0xMTAsNyArOTEsNyBAQAogCX0KIAlwZ20gPSBhcmd2W2krK107CiAJZm9yICg7IGkgPCBhcmdjOyBpKyspIHsKLQkJY2hhciAqYXJnID0gYXJndltpXTsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKIAkJaWYgKCFmb3JjZV9maWxlICYmICphcmcgPT0gJy0nKSB7CiAJCQlpZiAoIXN0cmNtcChhcmcsICItLSIpKSB7CiAJCQkJZm9yY2VfZmlsZSA9IDE7CmRpZmYgLS1naXQgYS9idWlsdGluLW1lcmdlLW91cnMuYyBiL2J1aWx0aW4tbWVyZ2Utb3Vycy5jCmluZGV4IDhmNWJiYWYuLjY4NDQxMTYgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tbWVyZ2Utb3Vycy5jCisrKyBiL2J1aWx0aW4tbWVyZ2Utb3Vycy5jCkBAIC0xMCw2ICsxMCw5IEBACiAjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCiAjaW5jbHVkZSAiYnVpbHRpbi5oIgogCitzdGF0aWMgY29uc3QgY2hhciBidWlsdGluX21lcmdlX291cnNfdXNhZ2VbXSA9CisJImdpdCBtZXJnZS1vdXJzIDxiYXNlPi4uLiAtLSBIRUFEIDxyZW1vdGU+Li4uIjsKKwogc3RhdGljIGNvbnN0IGNoYXIgKmRpZmZfaW5kZXhfYXJnc1tdID0gewogCSJkaWZmLWluZGV4IiwgIi0tcXVpZXQiLCAiLS1jYWNoZWQiLCAiSEVBRCIsICItLSIsIE5VTEwKIH07CkBAIC0xNyw2ICsyMCw5IEBACiAKIGludCBjbWRfbWVyZ2Vfb3VycyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlKGJ1aWx0aW5fbWVyZ2Vfb3Vyc191c2FnZSk7CisKIAkvKgogCSAqIFdlIG5lZWQgdG8gZXhpdCB3aXRoIDIgaWYgdGhlIGluZGV4IGRvZXMgbm90IG1hdGNoIG91ciBIRUFEIHRyZWUsCiAJICogYmVjYXVzZSB0aGUgY3VycmVudCBpbmRleCBpcyB3aGF0IHdlIHdpbGwgYmUgY29tbWl0dGluZyBhcyB0aGUKZGlmZiAtLWdpdCBhL2J1aWx0aW4tbWVyZ2UtcmVjdXJzaXZlLmMgYi9idWlsdGluLW1lcmdlLXJlY3Vyc2l2ZS5jCmluZGV4IDcwMzA0NWIuLmQ4ODc1ZDUgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tbWVyZ2UtcmVjdXJzaXZlLmMKKysrIGIvYnVpbHRpbi1tZXJnZS1yZWN1cnNpdmUuYwpAQCAtMjUsMTkgKzI1LDMwIEBACiAJc3RydWN0IGNvbW1pdCAqcmVzdWx0OwogCiAJaW5pdF9tZXJnZV9vcHRpb25zKCZvKTsKLQlpZiAoYXJndlswXSkgewotCQlpbnQgbmFtZWxlbiA9IHN0cmxlbihhcmd2WzBdKTsKLQkJaWYgKDggPCBuYW1lbGVuICYmCi0JCSAgICAhc3RyY21wKGFyZ3ZbMF0gKyBuYW1lbGVuIC0gOCwgIi1zdWJ0cmVlIikpCi0JCQlvLnN1YnRyZWVfbWVyZ2UgPSAxOwotCX0KKwlpZiAoYXJndlswXSAmJiAhc3VmZml4Y21wKGFyZ3ZbMF0sICItc3VidHJlZSIpKQorCQlvLnN1YnRyZWVfc2hpZnQgPSAiIjsKIAogCWlmIChhcmdjIDwgNCkKLQkJZGllKCJVc2FnZTogJXMgPGJhc2U+Li4uIC0tIDxoZWFkPiA8cmVtb3RlPiAuLi4iLCBhcmd2WzBdKTsKKwkJdXNhZ2VmKCIlcyA8YmFzZT4uLi4gLS0gPGhlYWQ+IDxyZW1vdGU+IC4uLiIsIGFyZ3ZbMF0pOwogCiAJZm9yIChpID0gMTsgaSA8IGFyZ2M7ICsraSkgewotCQlpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS0iKSkKLQkJCWJyZWFrOworCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCisJCWlmICghcHJlZml4Y21wKGFyZywgIi0tIikpIHsKKwkJCWlmICghYXJnWzJdKQorCQkJCWJyZWFrOworCQkJaWYgKCFzdHJjbXAoYXJnKzIsICJvdXJzIikpCisJCQkJby5yZWN1cnNpdmVfdmFyaWFudCA9IE1FUkdFX1JFQ1VSU0lWRV9PVVJTOworCQkJZWxzZSBpZiAoIXN0cmNtcChhcmcrMiwgInRoZWlycyIpKQorCQkJCW8ucmVjdXJzaXZlX3ZhcmlhbnQgPSBNRVJHRV9SRUNVUlNJVkVfVEhFSVJTOworCQkJZWxzZSBpZiAoIXN0cmNtcChhcmcrMiwgInN1YnRyZWUiKSkKKwkJCQlvLnN1YnRyZWVfc2hpZnQgPSAiIjsKKwkJCWVsc2UgaWYgKCFwcmVmaXhjbXAoYXJnKzIsICJzdWJ0cmVlPSIpKQorCQkJCW8uc3VidHJlZV9zaGlmdCA9IGFyZyArIDEwOworCQkJZWxzZQorCQkJCWRpZSgiVW5rbm93biBvcHRpb24gJXMiLCBhcmcpOworCQkJY29udGludWU7CisJCX0KIAkJaWYgKGJhc2VzX2NvdW50IDwgQVJSQVlfU0laRShiYXNlcyktMSkgewogCQkJdW5zaWduZWQgY2hhciAqc2hhID0geG1hbGxvYygyMCk7CiAJCQlpZiAoZ2V0X3NoYTEoYXJndltpXSwgc2hhKSkKQEAgLTQ1LDggKzU2LDkgQEAKIAkJCWJhc2VzW2Jhc2VzX2NvdW50KytdID0gc2hhOwogCQl9CiAJCWVsc2UKLQkJCXdhcm5pbmcoIkNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICV6dSBiYXNlcy4gIgotCQkJCSJJZ25vcmluZyAlcy4iLCBBUlJBWV9TSVpFKGJhc2VzKS0xLCBhcmd2W2ldKTsKKwkJCXdhcm5pbmcoIkNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIGJhc2VzLiAiCisJCQkJIklnbm9yaW5nICVzLiIsCisJCQkJKGludClBUlJBWV9TSVpFKGJhc2VzKS0xLCBhcmd2W2ldKTsKIAl9CiAJaWYgKGFyZ2MgLSBpICE9IDMpIC8qICItLSIgIjxoZWFkPiIgIjxyZW1vdGU+IiAqLwogCQlkaWUoIk5vdCBoYW5kbGluZyBhbnl0aGluZyBvdGhlciB0aGFuIHR3byBoZWFkcyBtZXJnZS4iKTsKZGlmZiAtLWdpdCBhL21lcmdlLXRyZWUuYyBiL2J1aWx0aW4tbWVyZ2UtdHJlZS5jCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIG1lcmdlLXRyZWUuYwpyZW5hbWUgdG8gYnVpbHRpbi1tZXJnZS10cmVlLmMKaW5kZXggZjAxZTdjOC4uYTRhNGYyYyAxMDA2NDQKLS0tIGEvbWVyZ2UtdHJlZS5jCisrKyBiL2J1aWx0aW4tbWVyZ2UtdHJlZS5jCkBAIC01NCw3ICs1NCw3IEBACiAJcmV0dXJuICJyZW1vdmVkIGluIHJlbW90ZSI7CiB9CiAKLWV4dGVybiB2b2lkICptZXJnZV9maWxlKHN0cnVjdCBibG9iICosIHN0cnVjdCBibG9iICosIHN0cnVjdCBibG9iICosIHVuc2lnbmVkIGxvbmcgKik7CitleHRlcm4gdm9pZCAqbWVyZ2VfZmlsZShjb25zdCBjaGFyICosIHN0cnVjdCBibG9iICosIHN0cnVjdCBibG9iICosIHN0cnVjdCBibG9iICosIHVuc2lnbmVkIGxvbmcgKik7CiAKIHN0YXRpYyB2b2lkICpyZXN1bHQoc3RydWN0IG1lcmdlX2xpc3QgKmVudHJ5LCB1bnNpZ25lZCBsb25nICpzaXplKQogewpAQCAtNzYsNyArNzYsNyBAQAogCXRoZWlyID0gTlVMTDsKIAlpZiAoZW50cnkpCiAJCXRoZWlyID0gZW50cnktPmJsb2I7Ci0JcmV0dXJuIG1lcmdlX2ZpbGUoYmFzZSwgb3VyLCB0aGVpciwgc2l6ZSk7CisJcmV0dXJuIG1lcmdlX2ZpbGUoZW50cnktPnBhdGgsIGJhc2UsIG91ciwgdGhlaXIsIHNpemUpOwogfQogCiBzdGF0aWMgdm9pZCAqb3JpZ2luKHN0cnVjdCBtZXJnZV9saXN0ICplbnRyeSwgdW5zaWduZWQgbG9uZyAqc2l6ZSkKQEAgLTMzNyw3ICszMzcsNyBAQAogCXJldHVybiBidWY7CiB9CiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK2ludCBjbWRfbWVyZ2VfdHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKIAlzdHJ1Y3QgdHJlZV9kZXNjIHRbM107CiAJdm9pZCAqYnVmMSwgKmJ1ZjIsICpidWYzOwpAQCAtMzQ1LDEwICszNDUsNiBAQAogCWlmIChhcmdjICE9IDQpCiAJCXVzYWdlKG1lcmdlX3RyZWVfdXNhZ2UpOwogCi0JZ2l0X2V4dHJhY3RfYXJndjBfcGF0aChhcmd2WzBdKTsKLQotCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKLQogCWJ1ZjEgPSBnZXRfdHJlZV9kZXNjcmlwdG9yKHQrMCwgYXJndlsxXSk7CiAJYnVmMiA9IGdldF90cmVlX2Rlc2NyaXB0b3IodCsxLCBhcmd2WzJdKTsKIAlidWYzID0gZ2V0X3RyZWVfZGVzY3JpcHRvcih0KzIsIGFyZ3ZbM10pOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1tZXJnZS5jIGIvYnVpbHRpbi1tZXJnZS5jCmluZGV4IDllOWJkNTIuLjNhYWVjN2IgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tbWVyZ2UuYworKysgYi9idWlsdGluLW1lcmdlLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJyZXJlcmUuaCIKICNpbmNsdWRlICJoZWxwLmgiCiAjaW5jbHVkZSAibWVyZ2UtcmVjdXJzaXZlLmgiCisjaW5jbHVkZSAicmVzb2x2ZS11bmRvLmgiCiAKICNkZWZpbmUgREVGQVVMVF9UV09IRUFEICgxPDwwKQogI2RlZmluZSBERUZBVUxUX09DVE9QVVMgKDE8PDEpCkBAIC00MywxNCArNDQsMTggQEAKIAogc3RhdGljIGludCBzaG93X2RpZmZzdGF0ID0gMSwgb3B0aW9uX2xvZywgc3F1YXNoOwogc3RhdGljIGludCBvcHRpb25fY29tbWl0ID0gMSwgYWxsb3dfZmFzdF9mb3J3YXJkID0gMTsKK3N0YXRpYyBpbnQgZmFzdF9mb3J3YXJkX29ubHk7CiBzdGF0aWMgaW50IGFsbG93X3RyaXZpYWwgPSAxLCBoYXZlX21lc3NhZ2U7CiBzdGF0aWMgc3RydWN0IHN0cmJ1ZiBtZXJnZV9tc2c7CiBzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICpyZW1vdGVoZWFkczsKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGhlYWRbMjBdLCBzdGFzaFsyMF07CiBzdGF0aWMgc3RydWN0IHN0cmF0ZWd5ICoqdXNlX3N0cmF0ZWdpZXM7CiBzdGF0aWMgc2l6ZV90IHVzZV9zdHJhdGVnaWVzX25yLCB1c2Vfc3RyYXRlZ2llc19hbGxvYzsKK3N0YXRpYyBjb25zdCBjaGFyICoqeG9wdHM7CitzdGF0aWMgc2l6ZV90IHhvcHRzX25yLCB4b3B0c19hbGxvYzsKIHN0YXRpYyBjb25zdCBjaGFyICpicmFuY2g7CiBzdGF0aWMgaW50IHZlcmJvc2l0eTsKK3N0YXRpYyBpbnQgYWxsb3dfcmVyZXJlX2F1dG87CiAKIHN0YXRpYyBzdHJ1Y3Qgc3RyYXRlZ3kgYWxsX3N0cmF0ZWd5W10gPSB7CiAJeyAicmVjdXJzaXZlIiwgIERFRkFVTFRfVFdPSEVBRCB8IE5PX1RSSVZJQUwgfSwKQEAgLTcwLDcgKzc1LDcgQEAKIAlpZiAodW5zZXQpCiAJCXN0cmJ1Zl9zZXRsZW4oYnVmLCAwKTsKIAllbHNlIGlmIChhcmcpIHsKLQkJc3RyYnVmX2FkZGYoYnVmLCAiJXNcblxuIiwgYXJnKTsKKwkJc3RyYnVmX2FkZGYoYnVmLCAiJXMlcyIsIGJ1Zi0+bGVuID8gIlxuXG4iIDogIiIsIGFyZyk7CiAJCWhhdmVfbWVzc2FnZSA9IDE7CiAJfSBlbHNlCiAJCXJldHVybiBlcnJvcigic3dpdGNoIGBtJyByZXF1aXJlcyBhIHZhbHVlIik7CkBAIC0xMDYsOCArMTExLDggQEAKIAkJCQkJZm91bmQgPSAxOwogCQkJaWYgKCFmb3VuZCkKIAkJCQlhZGRfY21kbmFtZSgmbm90X3N0cmF0ZWdpZXMsIGVudC0+bmFtZSwgZW50LT5sZW4pOwotCQkJZXhjbHVkZV9jbWRzKCZtYWluX2NtZHMsICZub3Rfc3RyYXRlZ2llcyk7CiAJCX0KKwkJZXhjbHVkZV9jbWRzKCZtYWluX2NtZHMsICZub3Rfc3RyYXRlZ2llcyk7CiAJfQogCWlmICghaXNfaW5fY21kbGlzdCgmbWFpbl9jbWRzLCBuYW1lKSAmJiAhaXNfaW5fY21kbGlzdCgmb3RoZXJfY21kcywgbmFtZSkpIHsKIAkJZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgZmluZCBtZXJnZSBzdHJhdGVneSAnJXMnLlxuIiwgbmFtZSk7CkBAIC0xNDUsNiArMTUwLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX3goY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpZiAodW5zZXQpCisJCXJldHVybiAwOworCisJQUxMT0NfR1JPVyh4b3B0cywgeG9wdHNfbnIgKyAxLCB4b3B0c19hbGxvYyk7CisJeG9wdHNbeG9wdHNfbnIrK10gPSB4c3RyZHVwKGFyZyk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX24oY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAogCQkJICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKIHsKQEAgLTE2Niw5ICsxODIsMTQgQEAKIAlPUFRfQk9PTEVBTigwLCAiY29tbWl0IiwgJm9wdGlvbl9jb21taXQsCiAJCSJwZXJmb3JtIGEgY29tbWl0IGlmIHRoZSBtZXJnZSBzdWNjZWVkcyAoZGVmYXVsdCkiKSwKIAlPUFRfQk9PTEVBTigwLCAiZmYiLCAmYWxsb3dfZmFzdF9mb3J3YXJkLAotCQkiYWxsb3cgZmFzdCBmb3J3YXJkIChkZWZhdWx0KSIpLAorCQkiYWxsb3cgZmFzdC1mb3J3YXJkIChkZWZhdWx0KSIpLAorCU9QVF9CT09MRUFOKDAsICJmZi1vbmx5IiwgJmZhc3RfZm9yd2FyZF9vbmx5LAorCQkiYWJvcnQgaWYgZmFzdC1mb3J3YXJkIGlzIG5vdCBwb3NzaWJsZSIpLAorCU9QVF9SRVJFUkVfQVVUT1VQREFURSgmYWxsb3dfcmVyZXJlX2F1dG8pLAogCU9QVF9DQUxMQkFDSygncycsICJzdHJhdGVneSIsICZ1c2Vfc3RyYXRlZ2llcywgInN0cmF0ZWd5IiwKIAkJIm1lcmdlIHN0cmF0ZWd5IHRvIHVzZSIsIG9wdGlvbl9wYXJzZV9zdHJhdGVneSksCisJT1BUX0NBTExCQUNLKCdYJywgInN0cmF0ZWd5LW9wdGlvbiIsICZ4b3B0cywgIm9wdGlvbj12YWx1ZSIsCisJCSJvcHRpb24gZm9yIHNlbGVjdGVkIG1lcmdlIHN0cmF0ZWd5Iiwgb3B0aW9uX3BhcnNlX3gpLAogCU9QVF9DQUxMQkFDSygnbScsICJtZXNzYWdlIiwgJm1lcmdlX21zZywgIm1lc3NhZ2UiLAogCQkibWVzc2FnZSB0byBiZSB1c2VkIGZvciB0aGUgbWVyZ2UgY29tbWl0IChpZiBhbnkpIiwKIAkJb3B0aW9uX3BhcnNlX21lc3NhZ2UpLApAQCAtMjY0LDExICsyODUsMTIgQEAKIAlzdHJ1Y3Qgc3RyYnVmIG91dCA9IFNUUkJVRl9JTklUOwogCXN0cnVjdCBjb21taXRfbGlzdCAqajsKIAlpbnQgZmQ7CisJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IGN0eCA9IHswfTsKIAogCXByaW50ZigiU3F1YXNoIGNvbW1pdCAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIik7CiAJZmQgPSBvcGVuKGdpdF9wYXRoKCJTUVVBU0hfTVNHIiksIE9fV1JPTkxZIHwgT19DUkVBVCwgMDY2Nik7CiAJaWYgKGZkIDwgMCkKLQkJZGllKCJDb3VsZCBub3Qgd3JpdGUgdG8gJXMiLCBnaXRfcGF0aCgiU1FVQVNIX01TRyIpKTsKKwkJZGllX2Vycm5vKCJDb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIsIGdpdF9wYXRoKCJTUVVBU0hfTVNHIikpOwogCiAJaW5pdF9yZXZpc2lvbnMoJnJldiwgTlVMTCk7CiAJcmV2Lmlnbm9yZV9tZXJnZXMgPSAxOwpAQCAtMjg1LDE4ICszMDcsMjAgQEAKIAlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKCZyZXYpKQogCQlkaWUoInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIik7CiAKKwljdHguYWJicmV2ID0gcmV2LmFiYnJldjsKKwljdHguZGF0ZV9tb2RlID0gcmV2LmRhdGVfbW9kZTsKKwogCXN0cmJ1Zl9hZGRzdHIoJm91dCwgIlNxdWFzaGVkIGNvbW1pdCBvZiB0aGUgZm9sbG93aW5nOlxuIik7CiAJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24oJnJldikpICE9IE5VTEwpIHsKIAkJc3RyYnVmX2FkZGNoKCZvdXQsICdcbicpOwogCQlzdHJidWZfYWRkZigmb3V0LCAiY29tbWl0ICVzXG4iLAogCQkJc2hhMV90b19oZXgoY29tbWl0LT5vYmplY3Quc2hhMSkpOwotCQlwcmV0dHlfcHJpbnRfY29tbWl0KHJldi5jb21taXRfZm9ybWF0LCBjb21taXQsICZvdXQsIHJldi5hYmJyZXYsCi0JCQlOVUxMLCBOVUxMLCByZXYuZGF0ZV9tb2RlLCAwKTsKKwkJcHJldHR5X3ByaW50X2NvbW1pdChyZXYuY29tbWl0X2Zvcm1hdCwgY29tbWl0LCAmb3V0LCAmY3R4KTsKIAl9CiAJaWYgKHdyaXRlKGZkLCBvdXQuYnVmLCBvdXQubGVuKSA8IDApCi0JCWRpZSgiV3JpdGluZyBTUVVBU0hfTVNHOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiV3JpdGluZyBTUVVBU0hfTVNHIik7CiAJaWYgKGNsb3NlKGZkKSkKLQkJZGllKCJGaW5pc2hpbmcgU1FVQVNIX01TRzogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oIkZpbmlzaGluZyBTUVVBU0hfTVNHIik7CiAJc3RyYnVmX3JlbGVhc2UoJm91dCk7CiB9CiAKQEAgLTM1OCw2ICszODIsNyBAQAogCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CiAJc3RydWN0IHN0cmJ1ZiBibmFtZSA9IFNUUkJVRl9JTklUOwogCWNvbnN0IGNoYXIgKnB0cjsKKwljaGFyICpmb3VuZF9yZWY7CiAJaW50IGxlbiwgZWFybHk7CiAKIAlzdHJidWZfYnJhbmNobmFtZSgmYm5hbWUsIHJlbW90ZSk7CkBAIC0zNjgsMTQgKzM5MywxNyBAQAogCWlmICghcmVtb3RlX2hlYWQpCiAJCWRpZSgiJyVzJyBkb2VzIG5vdCBwb2ludCB0byBhIGNvbW1pdCIsIHJlbW90ZSk7CiAKLQlzdHJidWZfYWRkc3RyKCZidWYsICJyZWZzL2hlYWRzLyIpOwotCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgcmVtb3RlKTsKLQlyZXNvbHZlX3JlZihidWYuYnVmLCBicmFuY2hfaGVhZCwgMCwgMCk7Ci0KLQlpZiAoIWhhc2hjbXAocmVtb3RlX2hlYWQtPnNoYTEsIGJyYW5jaF9oZWFkKSkgewotCQlzdHJidWZfYWRkZihtc2csICIlc1x0XHRicmFuY2ggJyVzJyBvZiAuXG4iLAotCQkJc2hhMV90b19oZXgoYnJhbmNoX2hlYWQpLCByZW1vdGUpOwotCQlnb3RvIGNsZWFudXA7CisJaWYgKGR3aW1fcmVmKHJlbW90ZSwgc3RybGVuKHJlbW90ZSksIGJyYW5jaF9oZWFkLCAmZm91bmRfcmVmKSA+IDApIHsKKwkJaWYgKCFwcmVmaXhjbXAoZm91bmRfcmVmLCAicmVmcy9oZWFkcy8iKSkgeworCQkJc3RyYnVmX2FkZGYobXNnLCAiJXNcdFx0YnJhbmNoICclcycgb2YgLlxuIiwKKwkJCQkgICAgc2hhMV90b19oZXgoYnJhbmNoX2hlYWQpLCByZW1vdGUpOworCQkJZ290byBjbGVhbnVwOworCQl9CisJCWlmICghcHJlZml4Y21wKGZvdW5kX3JlZiwgInJlZnMvcmVtb3Rlcy8iKSkgeworCQkJc3RyYnVmX2FkZGYobXNnLCAiJXNcdFx0cmVtb3RlIGJyYW5jaCAnJXMnIG9mIC5cbiIsCisJCQkJICAgIHNoYTFfdG9faGV4KGJyYW5jaF9oZWFkKSwgcmVtb3RlKTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQogCX0KIAogCS8qIFNlZSBpZiByZW1vdGUgbWF0Y2hlcyA8bmFtZT5eXl4uLiBvciA8bmFtZT5+PG51bWJlcj4gKi8KQEAgLTQwOSw3ICs0MzcsNyBAQAogCQlzdHJidWZfYWRkc3RyKCZ0cnVuYW1lLCAicmVmcy9oZWFkcy8iKTsKIAkJc3RyYnVmX2FkZHN0cigmdHJ1bmFtZSwgcmVtb3RlKTsKIAkJc3RyYnVmX3NldGxlbigmdHJ1bmFtZSwgdHJ1bmFtZS5sZW4gLSBsZW4pOwotCQlpZiAocmVzb2x2ZV9yZWYodHJ1bmFtZS5idWYsIGJ1Zl9zaGEsIDAsIDApKSB7CisJCWlmIChyZXNvbHZlX3JlZih0cnVuYW1lLmJ1ZiwgYnVmX3NoYSwgMCwgTlVMTCkpIHsKIAkJCXN0cmJ1Zl9hZGRmKG1zZywKIAkJCQkgICAgIiVzXHRcdGJyYW5jaCAnJXMnJXMgb2YgLlxuIiwKIAkJCQkgICAgc2hhMV90b19oZXgocmVtb3RlX2hlYWQtPnNoYTEpLApAQCAtNDI4LDggKzQ1Niw4IEBACiAKIAkJZnAgPSBmb3BlbihnaXRfcGF0aCgiRkVUQ0hfSEVBRCIpLCAiciIpOwogCQlpZiAoIWZwKQotCQkJZGllKCJjb3VsZCBub3Qgb3BlbiAlcyBmb3IgcmVhZGluZzogJXMiLAotCQkJCWdpdF9wYXRoKCJGRVRDSF9IRUFEIiksIHN0cmVycm9yKGVycm5vKSk7CisJCQlkaWVfZXJybm8oImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciLAorCQkJCSAgZ2l0X3BhdGgoIkZFVENIX0hFQUQiKSk7CiAJCXN0cmJ1Zl9nZXRsaW5lKCZsaW5lLCBmcCwgJ1xuJyk7CiAJCWZjbG9zZShmcCk7CiAJCXB0ciA9IHN0cnN0cihsaW5lLmJ1ZiwgIlx0bm90LWZvci1tZXJnZVx0Iik7CkBAIC00NjIsNyArNDkwLDcgQEAKIAkJYXJndiA9IHhyZWFsbG9jKGFyZ3YsIHNpemVvZigqYXJndikgKiAoYXJnYyArIDIpKTsKIAkJbWVtbW92ZShhcmd2ICsgMSwgYXJndiwgc2l6ZW9mKCphcmd2KSAqIChhcmdjICsgMSkpOwogCQlhcmdjKys7Ci0JCXBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgYnVpbHRpbl9tZXJnZV9vcHRpb25zLAorCQlwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIE5VTEwsIGJ1aWx0aW5fbWVyZ2Vfb3B0aW9ucywKIAkJCSAgICAgIGJ1aWx0aW5fbWVyZ2VfdXNhZ2UsIDApOwogCQlmcmVlKGJ1Zik7CiAJfQpAQCAtNTI0LDcgKzU1Miw3IEBACiAJCQkgICAgICBjb25zdCBjaGFyICpoZWFkX2FyZykKIHsKIAljb25zdCBjaGFyICoqYXJnczsKLQlpbnQgaSA9IDAsIHJldDsKKwlpbnQgaSA9IDAsIHggPSAwLCByZXQ7CiAJc3RydWN0IGNvbW1pdF9saXN0ICpqOwogCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CiAJaW50IGluZGV4X2ZkOwpAQCAtNTUzLDcgKzU4MSwyMCBAQAogCiAJCWluaXRfbWVyZ2Vfb3B0aW9ucygmbyk7CiAJCWlmICghc3RyY21wKHN0cmF0ZWd5LCAic3VidHJlZSIpKQotCQkJby5zdWJ0cmVlX21lcmdlID0gMTsKKwkJCW8uc3VidHJlZV9zaGlmdCA9ICIiOworCisJCWZvciAoeCA9IDA7IHggPCB4b3B0c19ucjsgeCsrKSB7CisJCQlpZiAoIXN0cmNtcCh4b3B0c1t4XSwgIm91cnMiKSkKKwkJCQlvLnJlY3Vyc2l2ZV92YXJpYW50ID0gTUVSR0VfUkVDVVJTSVZFX09VUlM7CisJCQllbHNlIGlmICghc3RyY21wKHhvcHRzW3hdLCAidGhlaXJzIikpCisJCQkJby5yZWN1cnNpdmVfdmFyaWFudCA9IE1FUkdFX1JFQ1VSU0lWRV9USEVJUlM7CisJCQllbHNlIGlmICghc3RyY21wKHhvcHRzW3hdLCAic3VidHJlZSIpKQorCQkJCW8uc3VidHJlZV9zaGlmdCA9ICIiOworCQkJZWxzZSBpZiAoIXByZWZpeGNtcCh4b3B0c1t4XSwgInN1YnRyZWU9IikpCisJCQkJby5zdWJ0cmVlX3NoaWZ0ID0geG9wdHNbeF0rODsKKwkJCWVsc2UKKwkJCQlkaWUoIlVua25vd24gb3B0aW9uIGZvciBtZXJnZS1yZWN1cnNpdmU6IC1YJXMiLCB4b3B0c1t4XSk7CisJCX0KIAogCQlvLmJyYW5jaDEgPSBoZWFkX2FyZzsKIAkJby5icmFuY2gyID0gcmVtb3RlaGVhZHMtPml0ZW0tPnV0aWw7CkBAIC01NzEsMTAgKzYxMiwxNiBAQAogCQlyb2xsYmFja19sb2NrX2ZpbGUobG9jayk7CiAJCXJldHVybiBjbGVhbiA/IDAgOiAxOwogCX0gZWxzZSB7Ci0JCWFyZ3MgPSB4bWFsbG9jKCg0ICsgY29tbWl0X2xpc3RfY291bnQoY29tbW9uKSArCisJCWFyZ3MgPSB4bWFsbG9jKCg0ICsgeG9wdHNfbnIgKyBjb21taXRfbGlzdF9jb3VudChjb21tb24pICsKIAkJCQkJY29tbWl0X2xpc3RfY291bnQocmVtb3RlaGVhZHMpKSAqIHNpemVvZihjaGFyICopKTsKIAkJc3RyYnVmX2FkZGYoJmJ1ZiwgIm1lcmdlLSVzIiwgc3RyYXRlZ3kpOwogCQlhcmdzW2krK10gPSBidWYuYnVmOworCQlmb3IgKHggPSAwOyB4IDwgeG9wdHNfbnI7IHgrKykgeworCQkJY2hhciAqcyA9IHhtYWxsb2Moc3RybGVuKHhvcHRzW3hdKSsyKzEpOworCQkJc3RyY3B5KHMsICItLSIpOworCQkJc3RyY3B5KHMrMiwgeG9wdHNbeF0pOworCQkJYXJnc1tpKytdID0gczsKKwkJfQogCQlmb3IgKGogPSBjb21tb247IGo7IGogPSBqLT5uZXh0KQogCQkJYXJnc1tpKytdID0geHN0cmR1cChzaGExX3RvX2hleChqLT5pdGVtLT5vYmplY3Quc2hhMSkpOwogCQlhcmdzW2krK10gPSAiLS0iOwpAQCAtNTg1LDYgKzYzMiw4IEBACiAJCXJldCA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3MsIFJVTl9HSVRfQ01EKTsKIAkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CiAJCWkgPSAxOworCQlmb3IgKHggPSAwOyB4IDwgeG9wdHNfbnI7IHgrKykKKwkJCWZyZWUoKHZvaWQgKilhcmdzW2krK10pOwogCQlmb3IgKGogPSBjb21tb247IGo7IGogPSBqLT5uZXh0KQogCQkJZnJlZSgodm9pZCAqKWFyZ3NbaSsrXSk7CiAJCWkgKz0gMjsKQEAgLTU5NCw3ICs2NDMsOCBAQAogCQlkaXNjYXJkX2NhY2hlKCk7CiAJCWlmIChyZWFkX2NhY2hlKCkgPCAwKQogCQkJZGllKCJmYWlsZWQgdG8gcmVhZCB0aGUgY2FjaGUiKTsKLQkJcmV0dXJuIC1yZXQ7CisJCXJlc29sdmVfdW5kb19jbGVhcigpOworCQlyZXR1cm4gcmV0OwogCX0KIH0KIApAQCAtNjA4LDExICs2NTgsMTAgQEAKIAogc3RhdGljIGludCBjb3VudF91bm1lcmdlZF9lbnRyaWVzKHZvaWQpCiB7Ci0JY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICpzdGF0ZSA9ICZ0aGVfaW5kZXg7CiAJaW50IGksIHJldCA9IDA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgc3RhdGUtPmNhY2hlX25yOyBpKyspCi0JCWlmIChjZV9zdGFnZShzdGF0ZS0+Y2FjaGVbaV0pKQorCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7IGkrKykKKwkJaWYgKGNlX3N0YWdlKGFjdGl2ZV9jYWNoZVtpXSkpCiAJCQlyZXQrKzsKIAogCXJldHVybiByZXQ7CkBAIC02NDYsNiArNjk1LDcgQEAKIAlvcHRzLnZlcmJvc2VfdXBkYXRlID0gMTsKIAlvcHRzLm1lcmdlID0gMTsKIAlvcHRzLmZuID0gdHdvd2F5X21lcmdlOworCW9wdHMubXNncyA9IGdldF9wb3JjZWxhaW5fZXJyb3JfbXNncygpOwogCiAJdHJlZXNbbnJfdHJlZXNdID0gcGFyc2VfdHJlZV9pbmRpcmVjdChoZWFkKTsKIAlpZiAoIXRyZWVzW25yX3RyZWVzKytdKQpAQCAtNzY0LDcgKzgxNCw4IEBACiAKIAlmcCA9IGZvcGVuKGdpdF9wYXRoKCJNRVJHRV9NU0ciKSwgImEiKTsKIAlpZiAoIWZwKQotCQlkaWUoIkNvdWxkIG5vdCBvcGVuICVzIGZvciB3cml0aW5nIiwgZ2l0X3BhdGgoIk1FUkdFX01TRyIpKTsKKwkJZGllX2Vycm5vKCJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIiwKKwkJCSAgZ2l0X3BhdGgoIk1FUkdFX01TRyIpKTsKIAlmcHJpbnRmKGZwLCAiXG5Db25mbGljdHM6XG4iKTsKIAlmb3IgKHBvcyA9IDA7IHBvcyA8IGFjdGl2ZV9ucjsgcG9zKyspIHsKIAkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOwpAQCAtNzc4LDcgKzgyOSw3IEBACiAJCX0KIAl9CiAJZmNsb3NlKGZwKTsKLQlyZXJlcmUoKTsKKwlyZXJlcmUoYWxsb3dfcmVyZXJlX2F1dG8pOwogCXByaW50ZigiQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgIgogCQkJImZpeCBjb25mbGljdHMgYW5kIHRoZW4gY29tbWl0IHRoZSByZXN1bHQuXG4iKTsKIAlyZXR1cm4gMTsKQEAgLTc4Nyw3ICs4MzgsNyBAQAogc3RhdGljIHN0cnVjdCBjb21taXQgKmlzX29sZF9zdHlsZV9pbnZvY2F0aW9uKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKIAlzdHJ1Y3QgY29tbWl0ICpzZWNvbmRfdG9rZW4gPSBOVUxMOwotCWlmIChhcmdjID4gMSkgeworCWlmIChhcmdjID4gMikgewogCQl1bnNpZ25lZCBjaGFyIHNlY29uZF9zaGExWzIwXTsKIAogCQlpZiAoZ2V0X3NoYTEoYXJndlsxXSwgc2Vjb25kX3NoYTEpKQpAQCAtODM1LDEzICs4ODYsMjIgQEAKIAljb25zdCBjaGFyICpiZXN0X3N0cmF0ZWd5ID0gTlVMTCwgKnd0X3N0cmF0ZWd5ID0gTlVMTDsKIAlzdHJ1Y3QgY29tbWl0X2xpc3QgKipyZW1vdGVzID0gJnJlbW90ZWhlYWRzOwogCi0Jc2V0dXBfd29ya190cmVlKCk7Ci0JaWYgKGZpbGVfZXhpc3RzKGdpdF9wYXRoKCJNRVJHRV9IRUFEIikpKQotCQlkaWUoIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZS4gKE1FUkdFX0hFQUQgZXhpc3RzKSIpOwotCWlmIChyZWFkX2NhY2hlX3VubWVyZ2VkKCkpCi0JCWRpZSgiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY29uZmxpY3RlZCBtZXJnZS4iCi0JCQkJIiAoaW5kZXggdW5tZXJnZWQpIik7CisJaWYgKHJlYWRfY2FjaGVfdW5tZXJnZWQoKSkgeworCQlkaWVfcmVzb2x2ZV9jb25mbGljdCgibWVyZ2UiKTsKKwl9CisJaWYgKGZpbGVfZXhpc3RzKGdpdF9wYXRoKCJNRVJHRV9IRUFEIikpKSB7CisJCS8qCisJCSAqIFRoZXJlIGlzIG5vIHVubWVyZ2VkIGVudHJ5LCBkb24ndCBhZHZpc2UgJ2dpdAorCQkgKiBhZGQvcm0gPGZpbGU+JywganVzdCAnZ2l0IGNvbW1pdCcuCisJCSAqLworCQlpZiAoYWR2aWNlX3Jlc29sdmVfY29uZmxpY3QpCisJCQlkaWUoIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLlxuIgorCQkJICAgICJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBjYW4gbWVyZ2UuIik7CisJCWVsc2UKKwkJCWRpZSgiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuIik7CisJfQogCisJcmVzb2x2ZV91bmRvX2NsZWFyKCk7CiAJLyoKIAkgKiBDaGVjayBpZiB3ZSBhcmUgX25vdF8gb24gYSBkZXRhY2hlZCBIRUFELCBpLmUuIGlmIHRoZXJlIGlzIGEKIAkgKiBjdXJyZW50IGJyYW5jaC4KQEAgLTg1OCw3ICs5MTgsNyBAQAogCWlmIChkaWZmX3VzZV9jb2xvcl9kZWZhdWx0ID09IC0xKQogCQlkaWZmX3VzZV9jb2xvcl9kZWZhdWx0ID0gZ2l0X3VzZV9jb2xvcl9kZWZhdWx0OwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgYnVpbHRpbl9tZXJnZV9vcHRpb25zLAorCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgYnVpbHRpbl9tZXJnZV9vcHRpb25zLAogCQkJYnVpbHRpbl9tZXJnZV91c2FnZSwgMCk7CiAJaWYgKHZlcmJvc2l0eSA8IDApCiAJCXNob3dfZGlmZnN0YXQgPSAwOwpAQCAtODY5LDYgKzkyOSw5IEBACiAJCW9wdGlvbl9jb21taXQgPSAwOwogCX0KIAorCWlmICghYWxsb3dfZmFzdF9mb3J3YXJkICYmIGZhc3RfZm9yd2FyZF9vbmx5KQorCQlkaWUoIllvdSBjYW5ub3QgY29tYmluZSAtLW5vLWZmIHdpdGggLS1mZi1vbmx5LiIpOworCiAJaWYgKCFhcmdjKQogCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9tZXJnZV91c2FnZSwKIAkJCWJ1aWx0aW5fbWVyZ2Vfb3B0aW9ucyk7CkBAIC05MjMsMTEgKzk4NiwxMyBAQAogCQkgKiBjb2RlcGF0aCBzbyB3ZSBkaXNjYXJkIHRoZSBlcnJvciBpbiB0aGlzCiAJCSAqIGxvb3AuCiAJCSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQotCQkJbWVyZ2VfbmFtZShhcmd2W2ldLCAmbXNnKTsKLQkJZm10X21lcmdlX21zZyhvcHRpb25fbG9nLCAmbXNnLCAmbWVyZ2VfbXNnKTsKLQkJaWYgKG1lcmdlX21zZy5sZW4pCi0JCQlzdHJidWZfc2V0bGVuKCZtZXJnZV9tc2csIG1lcmdlX21zZy5sZW4tMSk7CisJCWlmICghaGF2ZV9tZXNzYWdlKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQorCQkJCW1lcmdlX25hbWUoYXJndltpXSwgJm1zZyk7CisJCQlmbXRfbWVyZ2VfbXNnKG9wdGlvbl9sb2csICZtc2csICZtZXJnZV9tc2cpOworCQkJaWYgKG1lcmdlX21zZy5sZW4pCisJCQkJc3RyYnVmX3NldGxlbigmbWVyZ2VfbXNnLCBtZXJnZV9tc2cubGVuLTEpOworCQl9CiAJfQogCiAJaWYgKGhlYWRfaW52YWxpZCB8fCAhYXJnYykKQEAgLTEwMDgsNyArMTA3Myw3IEBACiAJCQkJaGV4LAogCQkJCWZpbmRfdW5pcXVlX2FiYnJldihyZW1vdGVoZWFkcy0+aXRlbS0+b2JqZWN0LnNoYTEsCiAJCQkJREVGQVVMVF9BQkJSRVYpKTsKLQkJc3RyYnVmX2FkZHN0cigmbXNnLCAiRmFzdCBmb3J3YXJkIik7CisJCXN0cmJ1Zl9hZGRzdHIoJm1zZywgIkZhc3QtZm9yd2FyZCIpOwogCQlpZiAoaGF2ZV9tZXNzYWdlKQogCQkJc3RyYnVmX2FkZHN0cigmbXNnLAogCQkJCSIgKG5vIGNvbW1pdCBjcmVhdGVkOyAtbSBvcHRpb24gaWdub3JlZCkiKTsKQEAgLTEwMjYsMTYgKzEwOTEsMTYgQEAKIAl9IGVsc2UgaWYgKCFyZW1vdGVoZWFkcy0+bmV4dCAmJiBjb21tb24tPm5leHQpCiAJCTsKIAkJLyoKLQkJICogV2UgYXJlIG5vdCBkb2luZyBvY3RvcHVzIGFuZCBub3QgZmFzdCBmb3J3YXJkLiAgTmVlZAorCQkgKiBXZSBhcmUgbm90IGRvaW5nIG9jdG9wdXMgYW5kIG5vdCBmYXN0LWZvcndhcmQuICBOZWVkCiAJCSAqIGEgcmVhbCBtZXJnZS4KIAkJICovCiAJZWxzZSBpZiAoIXJlbW90ZWhlYWRzLT5uZXh0ICYmICFjb21tb24tPm5leHQgJiYgb3B0aW9uX2NvbW1pdCkgewogCQkvKgotCQkgKiBXZSBhcmUgbm90IGRvaW5nIG9jdG9wdXMsIG5vdCBmYXN0IGZvcndhcmQsIGFuZCBoYXZlCisJCSAqIFdlIGFyZSBub3QgZG9pbmcgb2N0b3B1cywgbm90IGZhc3QtZm9yd2FyZCwgYW5kIGhhdmUKIAkJICogb25seSBvbmUgY29tbW9uLgogCQkgKi8KIAkJcmVmcmVzaF9jYWNoZShSRUZSRVNIX1FVSUVUKTsKLQkJaWYgKGFsbG93X3RyaXZpYWwpIHsKKwkJaWYgKGFsbG93X3RyaXZpYWwgJiYgIWZhc3RfZm9yd2FyZF9vbmx5KSB7CiAJCQkvKiBTZWUgaWYgaXQgaXMgcmVhbGx5IHRyaXZpYWwuICovCiAJCQlnaXRfY29tbWl0dGVyX2luZm8oSURFTlRfRVJST1JfT05fTk9fTkFNRSk7CiAJCQlwcmludGYoIlRyeWluZyByZWFsbHkgdHJpdmlhbCBpbi1pbmRleCBtZXJnZS4uLlxuIik7CkBAIC0xMDc0LDYgKzExMzksOSBAQAogCQl9CiAJfQogCisJaWYgKGZhc3RfZm9yd2FyZF9vbmx5KQorCQlkaWUoIk5vdCBwb3NzaWJsZSB0byBmYXN0LWZvcndhcmQsIGFib3J0aW5nLiIpOworCiAJLyogV2UgYXJlIGdvaW5nIHRvIG1ha2UgYSBuZXcgY29tbWl0LiAqLwogCWdpdF9jb21taXR0ZXJfaW5mbyhJREVOVF9FUlJPUl9PTl9OT19OQU1FKTsKIApAQCAtMTE4OSwyNyArMTI1NywyOSBAQAogCQkJCXNoYTFfdG9faGV4KGotPml0ZW0tPm9iamVjdC5zaGExKSk7CiAJCWZkID0gb3BlbihnaXRfcGF0aCgiTUVSR0VfSEVBRCIpLCBPX1dST05MWSB8IE9fQ1JFQVQsIDA2NjYpOwogCQlpZiAoZmQgPCAwKQotCQkJZGllKCJDb3VsZCBvcGVuICVzIGZvciB3cml0aW5nIiwKLQkJCQlnaXRfcGF0aCgiTUVSR0VfSEVBRCIpKTsKKwkJCWRpZV9lcnJubygiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIsCisJCQkJICBnaXRfcGF0aCgiTUVSR0VfSEVBRCIpKTsKIAkJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGJ1Zi5idWYsIGJ1Zi5sZW4pICE9IGJ1Zi5sZW4pCi0JCQlkaWUoIkNvdWxkIG5vdCB3cml0ZSB0byAlcyIsIGdpdF9wYXRoKCJNRVJHRV9IRUFEIikpOworCQkJZGllX2Vycm5vKCJDb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIsIGdpdF9wYXRoKCJNRVJHRV9IRUFEIikpOwogCQljbG9zZShmZCk7CiAJCXN0cmJ1Zl9hZGRjaCgmbWVyZ2VfbXNnLCAnXG4nKTsKIAkJZmQgPSBvcGVuKGdpdF9wYXRoKCJNRVJHRV9NU0ciKSwgT19XUk9OTFkgfCBPX0NSRUFULCAwNjY2KTsKIAkJaWYgKGZkIDwgMCkKLQkJCWRpZSgiQ291bGQgb3BlbiAlcyBmb3Igd3JpdGluZyIsIGdpdF9wYXRoKCJNRVJHRV9NU0ciKSk7CisJCQlkaWVfZXJybm8oIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciLAorCQkJCSAgZ2l0X3BhdGgoIk1FUkdFX01TRyIpKTsKIAkJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIG1lcmdlX21zZy5idWYsIG1lcmdlX21zZy5sZW4pICE9CiAJCQltZXJnZV9tc2cubGVuKQotCQkJZGllKCJDb3VsZCBub3Qgd3JpdGUgdG8gJXMiLCBnaXRfcGF0aCgiTUVSR0VfTVNHIikpOworCQkJZGllX2Vycm5vKCJDb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIsIGdpdF9wYXRoKCJNRVJHRV9NU0ciKSk7CiAJCWNsb3NlKGZkKTsKIAkJZmQgPSBvcGVuKGdpdF9wYXRoKCJNRVJHRV9NT0RFIiksIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2NjYpOwogCQlpZiAoZmQgPCAwKQotCQkJZGllKCJDb3VsZCBvcGVuICVzIGZvciB3cml0aW5nIiwgZ2l0X3BhdGgoIk1FUkdFX01PREUiKSk7CisJCQlkaWVfZXJybm8oIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciLAorCQkJCSAgZ2l0X3BhdGgoIk1FUkdFX01PREUiKSk7CiAJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKIAkJaWYgKCFhbGxvd19mYXN0X2ZvcndhcmQpCiAJCQlzdHJidWZfYWRkZigmYnVmLCAibm8tZmYiKTsKIAkJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGJ1Zi5idWYsIGJ1Zi5sZW4pICE9IGJ1Zi5sZW4pCi0JCQlkaWUoIkNvdWxkIG5vdCB3cml0ZSB0byAlcyIsIGdpdF9wYXRoKCJNRVJHRV9NT0RFIikpOworCQkJZGllX2Vycm5vKCJDb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIsIGdpdF9wYXRoKCJNRVJHRV9NT0RFIikpOwogCQljbG9zZShmZCk7CiAJfQogCmRpZmYgLS1naXQgYS9ta3RhZy5jIGIvYnVpbHRpbi1ta3RhZy5jCnNpbWlsYXJpdHkgaW5kZXggOTMlCnJlbmFtZSBmcm9tIG1rdGFnLmMKcmVuYW1lIHRvIGJ1aWx0aW4tbWt0YWcuYwppbmRleCA5OWEzNTZlLi4xY2IwZjNmIDEwMDY0NAotLS0gYS9ta3RhZy5jCisrKyBiL2J1aWx0aW4tbWt0YWcuYwpAQCAtMTksMTYgKzE5LDE3IEBACiAvKgogICogV2UgcmVmdXNlIHRvIHRhZyBzb21ldGhpbmcgd2UgY2FuJ3QgdmVyaWZ5LiBKdXN0IGJlY2F1c2UuCiAgKi8KLXN0YXRpYyBpbnQgdmVyaWZ5X29iamVjdCh1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpleHBlY3RlZF90eXBlKQorc3RhdGljIGludCB2ZXJpZnlfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKmV4cGVjdGVkX3R5cGUpCiB7CiAJaW50IHJldCA9IC0xOwogCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKIAl1bnNpZ25lZCBsb25nIHNpemU7Ci0Jdm9pZCAqYnVmZmVyID0gcmVhZF9zaGExX2ZpbGUoc2hhMSwgJnR5cGUsICZzaXplKTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpyZXBsOworCXZvaWQgKmJ1ZmZlciA9IHJlYWRfc2hhMV9maWxlX3JlcGwoc2hhMSwgJnR5cGUsICZzaXplLCAmcmVwbCk7CiAKIAlpZiAoYnVmZmVyKSB7CiAJCWlmICh0eXBlID09IHR5cGVfZnJvbV9zdHJpbmcoZXhwZWN0ZWRfdHlwZSkpCi0JCQlyZXQgPSBjaGVja19zaGExX3NpZ25hdHVyZShzaGExLCBidWZmZXIsIHNpemUsIGV4cGVjdGVkX3R5cGUpOworCQkJcmV0ID0gY2hlY2tfc2hhMV9zaWduYXR1cmUocmVwbCwgYnVmZmVyLCBzaXplLCBleHBlY3RlZF90eXBlKTsKIAkJZnJlZShidWZmZXIpOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtMTUyLDcgKzE1Myw3IEBACiAKICN1bmRlZiBQRF9GTVQKIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoraW50IGNtZF9ta3RhZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKIAlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOwogCXVuc2lnbmVkIGNoYXIgcmVzdWx0X3NoYTFbMjBdOwpAQCAtMTYwLDEyICsxNjEsOCBAQAogCWlmIChhcmdjICE9IDEpCiAJCXVzYWdlKCJnaXQgbWt0YWcgPCBzaWduYXR1cmVmaWxlIik7CiAKLQlnaXRfZXh0cmFjdF9hcmd2MF9wYXRoKGFyZ3ZbMF0pOwotCi0Jc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOwotCiAJaWYgKHN0cmJ1Zl9yZWFkKCZidWYsIDAsIDQwOTYpIDwgMCkgewotCQlkaWUoImNvdWxkIG5vdCByZWFkIGZyb20gc3RkaW4iKTsKKwkJZGllX2Vycm5vKCJjb3VsZCBub3QgcmVhZCBmcm9tIHN0ZGluIik7CiAJfQogCiAJLyogVmVyaWZ5IGl0IGZvciBzb21lIGJhc2ljIHNhbml0eTogaXQgbmVlZHMgdG8gc3RhcnQgd2l0aApkaWZmIC0tZ2l0IGEvYnVpbHRpbi1ta3RyZWUuYyBiL2J1aWx0aW4tbWt0cmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk4Mzk1ZgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4tbWt0cmVlLmMKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiBHSVQgLSB0aGUgc3R1cGlkIGNvbnRlbnQgdHJhY2tlcgorICoKKyAqIENvcHlyaWdodCAoYykgSnVuaW8gQyBIYW1hbm8sIDIwMDYsIDIwMDkKKyAqLworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKK3N0YXRpYyBzdHJ1Y3QgdHJlZWVudCB7CisJdW5zaWduZWQgbW9kZTsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWludCBsZW47CisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOworfSAqKmVudHJpZXM7CitzdGF0aWMgaW50IGFsbG9jLCB1c2VkOworCitzdGF0aWMgdm9pZCBhcHBlbmRfdG9fdHJlZSh1bnNpZ25lZCBtb2RlLCB1bnNpZ25lZCBjaGFyICpzaGExLCBjaGFyICpwYXRoKQoreworCXN0cnVjdCB0cmVlZW50ICplbnQ7CisJaW50IGxlbiA9IHN0cmxlbihwYXRoKTsKKwlpZiAoc3RyY2hyKHBhdGgsICcvJykpCisJCWRpZSgicGF0aCAlcyBjb250YWlucyBzbGFzaCIsIHBhdGgpOworCisJaWYgKGFsbG9jIDw9IHVzZWQpIHsKKwkJYWxsb2MgPSBhbGxvY19ucih1c2VkKTsKKwkJZW50cmllcyA9IHhyZWFsbG9jKGVudHJpZXMsIHNpemVvZigqZW50cmllcykgKiBhbGxvYyk7CisJfQorCWVudCA9IGVudHJpZXNbdXNlZCsrXSA9IHhtYWxsb2Moc2l6ZW9mKCoqZW50cmllcykgKyBsZW4gKyAxKTsKKwllbnQtPm1vZGUgPSBtb2RlOworCWVudC0+bGVuID0gbGVuOworCWhhc2hjcHkoZW50LT5zaGExLCBzaGExKTsKKwltZW1jcHkoZW50LT5uYW1lLCBwYXRoLCBsZW4rMSk7Cit9CisKK3N0YXRpYyBpbnQgZW50X2NvbXBhcmUoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCXN0cnVjdCB0cmVlZW50ICphID0gKihzdHJ1Y3QgdHJlZWVudCAqKilhXzsKKwlzdHJ1Y3QgdHJlZWVudCAqYiA9ICooc3RydWN0IHRyZWVlbnQgKiopYl87CisJcmV0dXJuIGJhc2VfbmFtZV9jb21wYXJlKGEtPm5hbWUsIGEtPmxlbiwgYS0+bW9kZSwKKwkJCQkgYi0+bmFtZSwgYi0+bGVuLCBiLT5tb2RlKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfdHJlZSh1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBzdHJidWYgYnVmOworCXNpemVfdCBzaXplOworCWludCBpOworCisJcXNvcnQoZW50cmllcywgdXNlZCwgc2l6ZW9mKCplbnRyaWVzKSwgZW50X2NvbXBhcmUpOworCWZvciAoc2l6ZSA9IGkgPSAwOyBpIDwgdXNlZDsgaSsrKQorCQlzaXplICs9IDMyICsgZW50cmllc1tpXS0+bGVuOworCisJc3RyYnVmX2luaXQoJmJ1Ziwgc2l6ZSk7CisJZm9yIChpID0gMDsgaSA8IHVzZWQ7IGkrKykgeworCQlzdHJ1Y3QgdHJlZWVudCAqZW50ID0gZW50cmllc1tpXTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVvICVzJWMiLCBlbnQtPm1vZGUsIGVudC0+bmFtZSwgJ1wwJyk7CisJCXN0cmJ1Zl9hZGQoJmJ1ZiwgZW50LT5zaGExLCAyMCk7CisJfQorCisJd3JpdGVfc2hhMV9maWxlKGJ1Zi5idWYsIGJ1Zi5sZW4sIHRyZWVfdHlwZSwgc2hhMSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpta3RyZWVfdXNhZ2VbXSA9IHsKKwkiZ2l0IG1rdHJlZSBbLXpdIFstLW1pc3NpbmddIFstLWJhdGNoXSIsCisJTlVMTAorfTsKKworc3RhdGljIHZvaWQgbWt0cmVlX2xpbmUoY2hhciAqYnVmLCBzaXplX3QgbGVuLCBpbnQgbGluZV90ZXJtaW5hdGlvbiwgaW50IGFsbG93X21pc3NpbmcpCit7CisJY2hhciAqcHRyLCAqbnRyOworCXVuc2lnbmVkIG1vZGU7CisJZW51bSBvYmplY3RfdHlwZSBtb2RlX3R5cGU7IC8qIG9iamVjdCB0eXBlIGRlcml2ZWQgZnJvbSBtb2RlICovCisJZW51bSBvYmplY3RfdHlwZSBvYmpfdHlwZTsgLyogb2JqZWN0IHR5cGUgZGVyaXZlZCBmcm9tIHNoYSAqLworCWNoYXIgKnBhdGg7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCXB0ciA9IGJ1ZjsKKwkvKgorCSAqIFJlYWQgbm9uLXJlY3Vyc2l2ZSBscy10cmVlIG91dHB1dCBmb3JtYXQ6CisJICogICAgIG1vZGUgU1AgdHlwZSBTUCBzaGExIFRBQiBuYW1lCisJICovCisJbW9kZSA9IHN0cnRvdWwocHRyLCAmbnRyLCA4KTsKKwlpZiAocHRyID09IG50ciB8fCAhbnRyIHx8ICpudHIgIT0gJyAnKQorCQlkaWUoImlucHV0IGZvcm1hdCBlcnJvcjogJXMiLCBidWYpOworCXB0ciA9IG50ciArIDE7IC8qIHR5cGUgKi8KKwludHIgPSBzdHJjaHIocHRyLCAnICcpOworCWlmICghbnRyIHx8IGJ1ZiArIGxlbiA8PSBudHIgKyA0MCB8fAorCSAgICBudHJbNDFdICE9ICdcdCcgfHwKKwkgICAgZ2V0X3NoYTFfaGV4KG50ciArIDEsIHNoYTEpKQorCQlkaWUoImlucHV0IGZvcm1hdCBlcnJvcjogJXMiLCBidWYpOworCisJLyogSXQgaXMgcGVyZmVjdGx5IG5vcm1hbCBpZiB3ZSBkbyBub3QgaGF2ZSBhIGNvbW1pdCBmcm9tIGEgc3VibW9kdWxlICovCisJaWYgKFNfSVNHSVRMSU5LKG1vZGUpKQorCQlhbGxvd19taXNzaW5nID0gMTsKKworCisJKm50cisrID0gMDsgLyogbm93IGF0IHRoZSBiZWdpbm5pbmcgb2YgU0hBMSAqLworCisJcGF0aCA9IG50ciArIDQxOyAgLyogYXQgdGhlIGJlZ2lubmluZyBvZiBuYW1lICovCisJaWYgKGxpbmVfdGVybWluYXRpb24gJiYgcGF0aFswXSA9PSAnIicpIHsKKwkJc3RydWN0IHN0cmJ1ZiBwX3VxID0gU1RSQlVGX0lOSVQ7CisJCWlmICh1bnF1b3RlX2Nfc3R5bGUoJnBfdXEsIHBhdGgsIE5VTEwpKQorCQkJZGllKCJpbnZhbGlkIHF1b3RpbmciKTsKKwkJcGF0aCA9IHN0cmJ1Zl9kZXRhY2goJnBfdXEsIE5VTEwpOworCX0KKworCS8qCisJICogT2JqZWN0IHR5cGUgaXMgcmVkdW5kYW50bHkgZGVyaXZhYmxlIHRocmVlIHdheXMuCisJICogVGhlc2Ugc2hvdWxkIGFsbCBhZ3JlZS4KKwkgKi8KKwltb2RlX3R5cGUgPSBvYmplY3RfdHlwZShtb2RlKTsKKwlpZiAobW9kZV90eXBlICE9IHR5cGVfZnJvbV9zdHJpbmcocHRyKSkgeworCQlkaWUoImVudHJ5ICclcycgb2JqZWN0IHR5cGUgKCVzKSBkb2Vzbid0IG1hdGNoIG1vZGUgdHlwZSAoJXMpIiwKKwkJCXBhdGgsIHB0ciwgdHlwZW5hbWUobW9kZV90eXBlKSk7CisJfQorCisJLyogQ2hlY2sgdGhlIHR5cGUgb2Ygb2JqZWN0IGlkZW50aWZpZWQgYnkgc2hhMSAqLworCW9ial90eXBlID0gc2hhMV9vYmplY3RfaW5mbyhzaGExLCBOVUxMKTsKKwlpZiAob2JqX3R5cGUgPCAwKSB7CisJCWlmIChhbGxvd19taXNzaW5nKSB7CisJCQk7IC8qIG5vIHByb2JsZW0gLSBtaXNzaW5nIG9iamVjdHMgYXJlIHByZXN1bWVkIHRvIGJlIG9mIHRoZSByaWdodCB0eXBlICovCisJCX0gZWxzZSB7CisJCQlkaWUoImVudHJ5ICclcycgb2JqZWN0ICVzIGlzIHVuYXZhaWxhYmxlIiwgcGF0aCwgc2hhMV90b19oZXgoc2hhMSkpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKG9ial90eXBlICE9IG1vZGVfdHlwZSkgeworCQkJLyoKKwkJCSAqIFRoZSBvYmplY3QgZXhpc3RzIGJ1dCBpcyBvZiB0aGUgd3JvbmcgdHlwZS4KKwkJCSAqIFRoaXMgaXMgYSBwcm9ibGVtIHJlZ2FyZGxlc3Mgb2YgYWxsb3dfbWlzc2luZworCQkJICogYmVjYXVzZSB0aGUgbmV3IHRyZWUgZW50cnkgd2lsbCBuZXZlciBiZSBjb3JyZWN0LgorCQkJICovCisJCQlkaWUoImVudHJ5ICclcycgb2JqZWN0ICVzIGlzIGEgJXMgYnV0IHNwZWNpZmllZCB0eXBlIHdhcyAoJXMpIiwKKwkJCQlwYXRoLCBzaGExX3RvX2hleChzaGExKSwgdHlwZW5hbWUob2JqX3R5cGUpLCB0eXBlbmFtZShtb2RlX3R5cGUpKTsKKwkJfQorCX0KKworCWFwcGVuZF90b190cmVlKG1vZGUsIHNoYTEsIHBhdGgpOworfQorCitpbnQgY21kX21rdHJlZShpbnQgYWMsIGNvbnN0IGNoYXIgKiphdiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWludCBsaW5lX3Rlcm1pbmF0aW9uID0gJ1xuJzsKKwlpbnQgYWxsb3dfbWlzc2luZyA9IDA7CisJaW50IGlzX2JhdGNoX21vZGUgPSAwOworCWludCBnb3RfZW9mID0gMDsKKworCWNvbnN0IHN0cnVjdCBvcHRpb24gb3B0aW9uW10gPSB7CisJCU9QVF9TRVRfSU5UKCd6JywgTlVMTCwgJmxpbmVfdGVybWluYXRpb24sICJpbnB1dCBpcyBOVUwgdGVybWluYXRlZCIsICdcMCcpLAorCQlPUFRfU0VUX0lOVCggMCAsICJtaXNzaW5nIiwgJmFsbG93X21pc3NpbmcsICJhbGxvdyBtaXNzaW5nIG9iamVjdHMiLCAxKSwKKwkJT1BUX1NFVF9JTlQoIDAgLCAiYmF0Y2giLCAmaXNfYmF0Y2hfbW9kZSwgImFsbG93IGNyZWF0aW9uIG9mIG1vcmUgdGhhbiBvbmUgdHJlZSIsIDEpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYWMgPSBwYXJzZV9vcHRpb25zKGFjLCBhdiwgcHJlZml4LCBvcHRpb24sIG1rdHJlZV91c2FnZSwgMCk7CisKKwl3aGlsZSAoIWdvdF9lb2YpIHsKKwkJd2hpbGUgKDEpIHsKKwkJCWlmIChzdHJidWZfZ2V0bGluZSgmc2IsIHN0ZGluLCBsaW5lX3Rlcm1pbmF0aW9uKSA9PSBFT0YpIHsKKwkJCQlnb3RfZW9mID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChzYi5idWZbMF0gPT0gJ1wwJykgeworCQkJCS8qIGVtcHR5IGxpbmVzIGRlbm90ZSB0cmVlIGJvdW5kYXJpZXMgaW4gYmF0Y2ggbW9kZSAqLworCQkJCWlmIChpc19iYXRjaF9tb2RlKQorCQkJCQlicmVhazsKKwkJCQlkaWUoImlucHV0IGZvcm1hdCBlcnJvcjogKGJsYW5rIGxpbmUgb25seSB2YWxpZCBpbiBiYXRjaCBtb2RlKSIpOworCQkJfQorCQkJbWt0cmVlX2xpbmUoc2IuYnVmLCBzYi5sZW4sIGxpbmVfdGVybWluYXRpb24sIGFsbG93X21pc3NpbmcpOworCQl9CisJCWlmIChpc19iYXRjaF9tb2RlICYmIGdvdF9lb2YgJiYgdXNlZCA8IDEpIHsKKwkJCS8qCisJCQkgKiBFeGVjdXRpb24gZ2V0cyBoZXJlIGlmIHRoZSBsYXN0IHRyZWUgZW50cnkgaXMgdGVybWluYXRlZCB3aXRoIGEKKwkJCSAqIG5ldy1saW5lLiAgVGhlIGZpbmFsIG5ldy1saW5lIGhhcyBiZWVuIG1hZGUgb3B0aW9uYWwgdG8gYmUKKwkJCSAqIGNvbnNpc3RlbnQgd2l0aCB0aGUgb3JpZ2luYWwgbm9uLWJhdGNoIGJlaGF2aW91ciBvZiBta3RyZWUuCisJCQkgKi8KKwkJCTsgLyogc2tpcCBjcmVhdGluZyBhbiBlbXB0eSB0cmVlICovCisJCX0gZWxzZSB7CisJCQl3cml0ZV90cmVlKHNoYTEpOworCQkJcHV0cyhzaGExX3RvX2hleChzaGExKSk7CisJCQlmZmx1c2goc3Rkb3V0KTsKKwkJfQorCQl1c2VkPTA7IC8qIHJlc2V0IHRyZWUgZW50cnkgYnVmZmVyIGZvciByZS11c2UgaW4gYmF0Y2ggbW9kZSAqLworCX0KKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluLW12LmMgYi9idWlsdGluLW12LmMKaW5kZXggMDEyNzBmZS4uYzA3ZjUzYiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1tdi5jCisrKyBiL2J1aWx0aW4tbXYuYwpAQCAtMjQsMTMgKzI0LDEyIEBACiAJcmVzdWx0W2NvdW50XSA9IE5VTEw7CiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJaW50IGxlbmd0aCA9IHN0cmxlbihyZXN1bHRbaV0pOwotCQlpZiAobGVuZ3RoID4gMCAmJiByZXN1bHRbaV1bbGVuZ3RoIC0gMV0gPT0gJy8nKSB7Ci0JCQlyZXN1bHRbaV0gPSB4bWVtZHVweihyZXN1bHRbaV0sIGxlbmd0aCAtIDEpOwotCQl9Ci0JCWlmIChiYXNlX25hbWUpIHsKLQkJCWNvbnN0IGNoYXIgKmxhc3Rfc2xhc2ggPSBzdHJyY2hyKHJlc3VsdFtpXSwgJy8nKTsKLQkJCWlmIChsYXN0X3NsYXNoKQotCQkJCXJlc3VsdFtpXSA9IGxhc3Rfc2xhc2ggKyAxOworCQlpbnQgdG9fY29weSA9IGxlbmd0aDsKKwkJd2hpbGUgKHRvX2NvcHkgPiAwICYmIGlzX2Rpcl9zZXAocmVzdWx0W2ldW3RvX2NvcHkgLSAxXSkpCisJCQl0b19jb3B5LS07CisJCWlmICh0b19jb3B5ICE9IGxlbmd0aCB8fCBiYXNlX25hbWUpIHsKKwkJCWNoYXIgKml0ID0geG1lbWR1cHoocmVzdWx0W2ldLCB0b19jb3B5KTsKKwkJCXJlc3VsdFtpXSA9IGJhc2VfbmFtZSA/IHN0cmR1cChiYXNlbmFtZShpdCkpIDogaXQ7CiAJCX0KIAl9CiAJcmV0dXJuIGdldF9wYXRoc3BlYyhwcmVmaXgsIHJlc3VsdCk7CkBAIC01Nyw3ICs1Niw3IEBACiAJaW50IHZlcmJvc2UgPSAwLCBzaG93X29ubHkgPSAwLCBmb3JjZSA9IDAsIGlnbm9yZV9lcnJvcnMgPSAwOwogCXN0cnVjdCBvcHRpb24gYnVpbHRpbl9tdl9vcHRpb25zW10gPSB7CiAJCU9QVF9fRFJZX1JVTigmc2hvd19vbmx5KSwKLQkJT1BUX0JPT0xFQU4oJ2YnLCBOVUxMLCAmZm9yY2UsICJmb3JjZSBtb3ZlL3JlbmFtZSBldmVuIGlmIHRhcmdldCBleGlzdHMiKSwKKwkJT1BUX0JPT0xFQU4oJ2YnLCAiZm9yY2UiLCAmZm9yY2UsICJmb3JjZSBtb3ZlL3JlbmFtZSBldmVuIGlmIHRhcmdldCBleGlzdHMiKSwKIAkJT1BUX0JPT0xFQU4oJ2snLCBOVUxMLCAmaWdub3JlX2Vycm9ycywgInNraXAgbW92ZS9yZW5hbWUgZXJyb3JzIiksCiAJCU9QVF9FTkQoKSwKIAl9OwpAQCAtNjgsMTQgKzY3LDE1IEBACiAKIAlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CiAKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fbXZfb3B0aW9ucywKKwkJCSAgICAgYnVpbHRpbl9tdl91c2FnZSwgMCk7CisJaWYgKC0tYXJnYyA8IDEpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX212X3VzYWdlLCBidWlsdGluX212X29wdGlvbnMpOworCiAJbmV3ZmQgPSBob2xkX2xvY2tlZF9pbmRleCgmbG9ja19maWxlLCAxKTsKIAlpZiAocmVhZF9jYWNoZSgpIDwgMCkKIAkJZGllKCJpbmRleCBmaWxlIGNvcnJ1cHQiKTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGJ1aWx0aW5fbXZfb3B0aW9ucywgYnVpbHRpbl9tdl91c2FnZSwgMCk7Ci0JaWYgKC0tYXJnYyA8IDEpCi0JCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX212X3VzYWdlLCBidWlsdGluX212X29wdGlvbnMpOwotCiAJc291cmNlID0gY29weV9wYXRoc3BlYyhwcmVmaXgsIGFyZ3YsIGFyZ2MsIDApOwogCW1vZGVzID0geGNhbGxvYyhhcmdjLCBzaXplb2YoZW51bSB1cGRhdGVfbW9kZSkpOwogCWRlc3RfcGF0aCA9IGNvcHlfcGF0aHNwZWMocHJlZml4LCBhcmd2ICsgYXJnYywgMSwgMCk7CkBAIC0xNzIsOSArMTcyLDcgQEAKIAkJCQkgKiBjaGVjayBib3RoIHNvdXJjZSBhbmQgZGVzdGluYXRpb24KIAkJCQkgKi8KIAkJCQlpZiAoU19JU1JFRyhzdC5zdF9tb2RlKSB8fCBTX0lTTE5LKHN0LnN0X21vZGUpKSB7Ci0JCQkJCWZwcmludGYoc3RkZXJyLCAiV2FybmluZzogJXM7IgotCQkJCQkJCSIgd2lsbCBvdmVyd3JpdGUhXG4iLAotCQkJCQkJCWJhZCk7CisJCQkJCXdhcm5pbmcoIiVzOyB3aWxsIG92ZXJ3cml0ZSEiLCBiYWQpOwogCQkJCQliYWQgPSBOVUxMOwogCQkJCX0gZWxzZQogCQkJCQliYWQgPSAiQ2Fubm90IG92ZXJ3cml0ZSI7CkBAIC0yMDgsNyArMjA2LDcgQEAKIAkJCXByaW50ZigiUmVuYW1pbmcgJXMgdG8gJXNcbiIsIHNyYywgZHN0KTsKIAkJaWYgKCFzaG93X29ubHkgJiYgbW9kZSAhPSBJTkRFWCAmJgogCQkJCXJlbmFtZShzcmMsIGRzdCkgPCAwICYmICFpZ25vcmVfZXJyb3JzKQotCQkJZGllICgicmVuYW1pbmcgJXMgZmFpbGVkOiAlcyIsIHNyYywgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubyAoInJlbmFtaW5nICclcycgZmFpbGVkIiwgc3JjKTsKIAogCQlpZiAobW9kZSA9PSBXT1JLSU5HX0RJUkVDVE9SWSkKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1uYW1lLXJldi5jIGIvYnVpbHRpbi1uYW1lLXJldi5jCmluZGV4IDA4YzhhYWIuLjA2YTM4YWMgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tbmFtZS1yZXYuYworKysgYi9idWlsdGluLW5hbWUtcmV2LmMKQEAgLTIzOCw3ICsyMzgsNyBAQAogCX07CiAKIAlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7Ci0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0cywgbmFtZV9yZXZfdXNhZ2UsIDApOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0cywgbmFtZV9yZXZfdXNhZ2UsIDApOwogCWlmICghIWFsbCArICEhdHJhbnNmb3JtX3N0ZGluICsgISFhcmdjID4gMSkgewogCQllcnJvcigiU3BlY2lmeSBlaXRoZXIgYSBsaXN0LCBvciAtLWFsbCwgbm90IGJvdGghIik7CiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhuYW1lX3Jldl91c2FnZSwgb3B0cyk7CmRpZmYgLS1naXQgYS9idWlsdGluLXBhY2stb2JqZWN0cy5jIGIvYnVpbHRpbi1wYWNrLW9iamVjdHMuYwppbmRleCA5NDFjYzJkLi41MzllNzVkIDEwMDY0NAotLS0gYS9idWlsdGluLXBhY2stb2JqZWN0cy5jCisrKyBiL2J1aWx0aW4tcGFjay1vYmplY3RzLmMKQEAgLTE3LDIwICsxNywyMSBAQAogI2luY2x1ZGUgInByb2dyZXNzLmgiCiAjaW5jbHVkZSAicmVmcy5oIgogCi0jaWZkZWYgVEhSRUFERURfREVMVEFfU0VBUkNICisjaWZuZGVmIE5PX1BUSFJFQURTCiAjaW5jbHVkZSAidGhyZWFkLXV0aWxzLmgiCiAjaW5jbHVkZSA8cHRocmVhZC5oPgogI2VuZGlmCiAKLXN0YXRpYyBjb25zdCBjaGFyIHBhY2tfdXNhZ2VbXSA9ICJcCi1naXQgcGFjay1vYmplY3RzIFt7IC1xIHwgLS1wcm9ncmVzcyB8IC0tYWxsLXByb2dyZXNzIH1dIFxuXAotCVstLW1heC1wYWNrLXNpemU9Tl0gWy0tbG9jYWxdIFstLWluY3JlbWVudGFsXSBcblwKLQlbLS13aW5kb3c9Tl0gWy0td2luZG93LW1lbW9yeT1OXSBbLS1kZXB0aD1OXSBcblwKLQlbLS1uby1yZXVzZS1kZWx0YV0gWy0tbm8tcmV1c2Utb2JqZWN0XSBbLS1kZWx0YS1iYXNlLW9mZnNldF0gXG5cCi0JWy0tdGhyZWFkcz1OXSBbLS1ub24tZW1wdHldIFstLXJldnMgWy0tdW5wYWNrZWQgfCAtLWFsbF0qXSBbLS1yZWZsb2ddIFxuXAotCVstLXN0ZG91dCB8IGJhc2UtbmFtZV0gWy0taW5jbHVkZS10YWddIFxuXAotCVstLWtlZXAtdW5yZWFjaGFibGUgfCAtLXVucGFjay11bnJlYWNoYWJsZV0gXG5cCi0JWzxyZWYtbGlzdCB8IDxvYmplY3QtbGlzdF0iOworc3RhdGljIGNvbnN0IGNoYXIgcGFja191c2FnZVtdID0KKyAgImdpdCBwYWNrLW9iamVjdHMgW3sgLXEgfCAtLXByb2dyZXNzIHwgLS1hbGwtcHJvZ3Jlc3MgfV1cbiIKKyAgIiAgICAgICAgWy0tYWxsLXByb2dyZXNzLWltcGxpZWRdXG4iCisgICIgICAgICAgIFstLW1heC1wYWNrLXNpemU9Tl0gWy0tbG9jYWxdIFstLWluY3JlbWVudGFsXVxuIgorICAiICAgICAgICBbLS13aW5kb3c9Tl0gWy0td2luZG93LW1lbW9yeT1OXSBbLS1kZXB0aD1OXVxuIgorICAiICAgICAgICBbLS1uby1yZXVzZS1kZWx0YV0gWy0tbm8tcmV1c2Utb2JqZWN0XSBbLS1kZWx0YS1iYXNlLW9mZnNldF1cbiIKKyAgIiAgICAgICAgWy0tdGhyZWFkcz1OXSBbLS1ub24tZW1wdHldIFstLXJldnMgWy0tdW5wYWNrZWQgfCAtLWFsbF0qXVxuIgorICAiICAgICAgICBbLS1yZWZsb2ddIFstLXN0ZG91dCB8IGJhc2UtbmFtZV0gWy0taW5jbHVkZS10YWddXG4iCisgICIgICAgICAgIFstLWtlZXAtdW5yZWFjaGFibGUgfCAtLXVucGFjay11bnJlYWNoYWJsZSBcbiIKKyAgIiAgICAgICAgWzxyZWYtbGlzdCB8IDxvYmplY3QtbGlzdF0iOwogCiBzdHJ1Y3Qgb2JqZWN0X2VudHJ5IHsKIAlzdHJ1Y3QgcGFja19pZHhfZW50cnkgaWR4OwpAQCAtNzYsNyArNzcsNyBAQAogc3RhdGljIGNvbnN0IGNoYXIgKmJhc2VfbmFtZTsKIHN0YXRpYyBpbnQgcHJvZ3Jlc3MgPSAxOwogc3RhdGljIGludCB3aW5kb3cgPSAxMDsKLXN0YXRpYyB1aW50MzJfdCBwYWNrX3NpemVfbGltaXQsIHBhY2tfc2l6ZV9saW1pdF9jZmc7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWNrX3NpemVfbGltaXQsIHBhY2tfc2l6ZV9saW1pdF9jZmc7CiBzdGF0aWMgaW50IGRlcHRoID0gNTA7CiBzdGF0aWMgaW50IGRlbHRhX3NlYXJjaF90aHJlYWRzOwogc3RhdGljIGludCBwYWNrX3RvX3N0ZG91dDsKQEAgLTg2LDcgKzg3LDcgQEAKIHN0YXRpYyBpbnQgcGFja19jb21wcmVzc2lvbl9zZWVuOwogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWx0YV9jYWNoZV9zaXplID0gMDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIG1heF9kZWx0YV9jYWNoZV9zaXplID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1heF9kZWx0YV9jYWNoZV9zaXplID0gMjU2ICogMTAyNCAqIDEwMjQ7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjYWNoZV9tYXhfc21hbGxfZGVsdGFfc2l6ZSA9IDEwMDA7CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHdpbmRvd19tZW1vcnlfbGltaXQgPSAwOwpAQCAtMjQ1LDcgKzI0Niw3IEBACiAKIAl0eXBlID0gZW50cnktPnR5cGU7CiAKLQkvKiB3cml0ZSBsaW1pdCBpZiBsaW1pdGVkIHBhY2tzaXplIGFuZCBub3QgZmlyc3Qgb2JqZWN0ICovCisJLyogYXBwbHkgc2l6ZSBsaW1pdCBpZiBsaW1pdGVkIHBhY2tzaXplIGFuZCBub3QgZmlyc3Qgb2JqZWN0ICovCiAJaWYgKCFwYWNrX3NpemVfbGltaXQgfHwgIW5yX3dyaXR0ZW4pCiAJCWxpbWl0ID0gMDsKIAllbHNlIGlmIChwYWNrX3NpemVfbGltaXQgPD0gd3JpdGVfb2Zmc2V0KQpAQCAtNDQyLDcgKzQ0Myw3IEBACiAKIAkvKiBvZmZzZXQgaXMgbm9uIHplcm8gaWYgb2JqZWN0IGlzIHdyaXR0ZW4gYWxyZWFkeS4gKi8KIAlpZiAoZS0+aWR4Lm9mZnNldCB8fCBlLT5wcmVmZXJyZWRfYmFzZSkKLQkJcmV0dXJuIDE7CisJCXJldHVybiAtMTsKIAogCS8qIGlmIHdlIGFyZSBkZWx0aWZpZWQsIHdyaXRlIG91dCBiYXNlIG9iamVjdCBmaXJzdC4gKi8KIAlpZiAoZS0+ZGVsdGEgJiYgIXdyaXRlX29uZShmLCBlLT5kZWx0YSwgb2Zmc2V0KSkKQEAgLTQ2Myw5ICs0NjQsNiBAQAogCXJldHVybiAxOwogfQogCi0vKiBmb3J3YXJkIGRlY2xhcmF0aW9uIGZvciB3cml0ZV9wYWNrX2ZpbGUgKi8KLXN0YXRpYyBpbnQgYWRqdXN0X3Blcm0oY29uc3QgY2hhciAqcGF0aCwgbW9kZV90IG1vZGUpOwotCiBzdGF0aWMgdm9pZCB3cml0ZV9wYWNrX2ZpbGUodm9pZCkKIHsKIAl1aW50MzJfdCBpID0gMCwgajsKQEAgLTUyMiwxMiArNTIwLDkgQEAKIAkJfQogCiAJCWlmICghcGFja190b19zdGRvdXQpIHsKLQkJCW1vZGVfdCBtb2RlID0gdW1hc2soMCk7CiAJCQlzdHJ1Y3Qgc3RhdCBzdDsKLQkJCWNoYXIgKmlkeF90bXBfbmFtZSwgdG1wbmFtZVtQQVRIX01BWF07Ci0KLQkJCXVtYXNrKG1vZGUpOwotCQkJbW9kZSA9IDA0NDQgJiB+bW9kZTsKKwkJCWNvbnN0IGNoYXIgKmlkeF90bXBfbmFtZTsKKwkJCWNoYXIgdG1wbmFtZVtQQVRIX01BWF07CiAKIAkJCWlkeF90bXBfbmFtZSA9IHdyaXRlX2lkeF9maWxlKE5VTEwsIHdyaXR0ZW5fbGlzdCwKIAkJCQkJCSAgICAgIG5yX3dyaXR0ZW4sIHNoYTEpOwpAQCAtNTM1LDEyICs1MzAsMTAgQEAKIAkJCXNucHJpbnRmKHRtcG5hbWUsIHNpemVvZih0bXBuYW1lKSwgIiVzLSVzLnBhY2siLAogCQkJCSBiYXNlX25hbWUsIHNoYTFfdG9faGV4KHNoYTEpKTsKIAkJCWZyZWVfcGFja19ieV9uYW1lKHRtcG5hbWUpOwotCQkJaWYgKGFkanVzdF9wZXJtKHBhY2tfdG1wX25hbWUsIG1vZGUpKQotCQkJCWRpZSgidW5hYmxlIHRvIG1ha2UgdGVtcG9yYXJ5IHBhY2sgZmlsZSByZWFkYWJsZTogJXMiLAotCQkJCSAgICBzdHJlcnJvcihlcnJubykpOworCQkJaWYgKGFkanVzdF9zaGFyZWRfcGVybShwYWNrX3RtcF9uYW1lKSkKKwkJCQlkaWVfZXJybm8oInVuYWJsZSB0byBtYWtlIHRlbXBvcmFyeSBwYWNrIGZpbGUgcmVhZGFibGUiKTsKIAkJCWlmIChyZW5hbWUocGFja190bXBfbmFtZSwgdG1wbmFtZSkpCi0JCQkJZGllKCJ1bmFibGUgdG8gcmVuYW1lIHRlbXBvcmFyeSBwYWNrIGZpbGU6ICVzIiwKLQkJCQkgICAgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQlkaWVfZXJybm8oInVuYWJsZSB0byByZW5hbWUgdGVtcG9yYXJ5IHBhY2sgZmlsZSIpOwogCiAJCQkvKgogCQkJICogUGFja3MgYXJlIHJ1bnRpbWUgYWNjZXNzZWQgaW4gdGhlaXIgbXRpbWUKQEAgLTU2NSwxNCArNTU4LDEyIEBACiAKIAkJCXNucHJpbnRmKHRtcG5hbWUsIHNpemVvZih0bXBuYW1lKSwgIiVzLSVzLmlkeCIsCiAJCQkJIGJhc2VfbmFtZSwgc2hhMV90b19oZXgoc2hhMSkpOwotCQkJaWYgKGFkanVzdF9wZXJtKGlkeF90bXBfbmFtZSwgbW9kZSkpCi0JCQkJZGllKCJ1bmFibGUgdG8gbWFrZSB0ZW1wb3JhcnkgaW5kZXggZmlsZSByZWFkYWJsZTogJXMiLAotCQkJCSAgICBzdHJlcnJvcihlcnJubykpOworCQkJaWYgKGFkanVzdF9zaGFyZWRfcGVybShpZHhfdG1wX25hbWUpKQorCQkJCWRpZV9lcnJubygidW5hYmxlIHRvIG1ha2UgdGVtcG9yYXJ5IGluZGV4IGZpbGUgcmVhZGFibGUiKTsKIAkJCWlmIChyZW5hbWUoaWR4X3RtcF9uYW1lLCB0bXBuYW1lKSkKLQkJCQlkaWUoInVuYWJsZSB0byByZW5hbWUgdGVtcG9yYXJ5IGluZGV4IGZpbGU6ICVzIiwKLQkJCQkgICAgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQlkaWVfZXJybm8oInVuYWJsZSB0byByZW5hbWUgdGVtcG9yYXJ5IGluZGV4IGZpbGUiKTsKIAotCQkJZnJlZShpZHhfdG1wX25hbWUpOworCQkJZnJlZSgodm9pZCAqKSBpZHhfdG1wX25hbWUpOwogCQkJZnJlZShwYWNrX3RtcF9uYW1lKTsKIAkJCXB1dHMoc2hhMV90b19oZXgoc2hhMSkpOwogCQl9CkBAIC01ODksMTkgKzU4MCw2IEBACiAJaWYgKHdyaXR0ZW4gIT0gbnJfcmVzdWx0KQogCQlkaWUoIndyb3RlICUiUFJJdTMyIiBvYmplY3RzIHdoaWxlIGV4cGVjdGluZyAlIlBSSXUzMiwKIAkJCXdyaXR0ZW4sIG5yX3Jlc3VsdCk7Ci0JLyoKLQkgKiBXZSBoYXZlIHNjYW5uZWQgdGhyb3VnaCBbMCAuLi4gaSkuICBTaW5jZSB3ZSBoYXZlIHdyaXR0ZW4KLQkgKiB0aGUgY29ycmVjdCBudW1iZXIgb2Ygb2JqZWN0cywgIHRoZSByZW1haW5pbmcgW2kgLi4uIG5yX29iamVjdHMpCi0JICogaXRlbXMgbXVzdCBiZSBlaXRoZXIgYWxyZWFkeSB3cml0dGVuIChkdWUgdG8gb3V0LW9mLW9yZGVyIGRlbHRhIGJhc2UpCi0JICogb3IgYSBwcmVmZXJyZWQgYmFzZS4gIENvdW50IHRob3NlIHdoaWNoIGFyZSBuZWl0aGVyIGFuZCBjb21wbGFpbiBpZiBhbnkuCi0JICovCi0JZm9yIChqID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykgewotCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplID0gb2JqZWN0cyArIGk7Ci0JCWogKz0gIWUtPmlkeC5vZmZzZXQgJiYgIWUtPnByZWZlcnJlZF9iYXNlOwotCX0KLQlpZiAoaikKLQkJZGllKCJ3cm90ZSAlIlBSSXUzMiIgb2JqZWN0cyBhcyBleHBlY3RlZCBidXQgJSJQUkl1MzIKLQkJCSIgdW53cml0dGVuIiwgd3JpdHRlbiwgaik7CiB9CiAKIHN0YXRpYyBpbnQgbG9jYXRlX29iamVjdF9lbnRyeV9oYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCkBAIC02NzYsNyArNjU0LDcgQEAKIAlzdGF0aWMgc3RydWN0IGdpdF9hdHRyICphdHRyX2RlbHRhOwogCiAJaWYgKCFhdHRyX2RlbHRhKQotCQlhdHRyX2RlbHRhID0gZ2l0X2F0dHIoImRlbHRhIiwgNSk7CisJCWF0dHJfZGVsdGEgPSBnaXRfYXR0cigiZGVsdGEiKTsKIAogCWNoZWNrWzBdLmF0dHIgPSBhdHRyX2RlbHRhOwogfQpAQCAtMTAxMiw2ICs5OTAsMzMgQEAKIAlpdC0+cGNhY2hlLnRyZWVfc2l6ZSA9IHNpemU7CiB9CiAKK3N0YXRpYyB2b2lkIGNsZWFudXBfcHJlZmVycmVkX2Jhc2Uodm9pZCkKK3sKKwlzdHJ1Y3QgcGJhc2VfdHJlZSAqaXQ7CisJdW5zaWduZWQgaTsKKworCWl0ID0gcGJhc2VfdHJlZTsKKwlwYmFzZV90cmVlID0gTlVMTDsKKwl3aGlsZSAoaXQpIHsKKwkJc3RydWN0IHBiYXNlX3RyZWUgKnRoaXMgPSBpdDsKKwkJaXQgPSB0aGlzLT5uZXh0OworCQlmcmVlKHRoaXMtPnBjYWNoZS50cmVlX2RhdGEpOworCQlmcmVlKHRoaXMpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBiYXNlX3RyZWVfY2FjaGUpOyBpKyspIHsKKwkJaWYgKCFwYmFzZV90cmVlX2NhY2hlW2ldKQorCQkJY29udGludWU7CisJCWZyZWUocGJhc2VfdHJlZV9jYWNoZVtpXS0+dHJlZV9kYXRhKTsKKwkJZnJlZShwYmFzZV90cmVlX2NhY2hlW2ldKTsKKwkJcGJhc2VfdHJlZV9jYWNoZVtpXSA9IE5VTEw7CisJfQorCisJZnJlZShkb25lX3BiYXNlX3BhdGhzKTsKKwlkb25lX3BiYXNlX3BhdGhzID0gTlVMTDsKKwlkb25lX3BiYXNlX3BhdGhzX251bSA9IGRvbmVfcGJhc2VfcGF0aHNfYWxsb2MgPSAwOworfQorCiBzdGF0aWMgdm9pZCBjaGVja19vYmplY3Qoc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnkpCiB7CiAJaWYgKGVudHJ5LT5pbl9wYWNrKSB7CkBAIC0xMjMwLDE3ICsxMjM1LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBUSFJFQURFRF9ERUxUQV9TRUFSQ0gKKyNpZm5kZWYgTk9fUFRIUkVBRFMKIAotc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCByZWFkX211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgcmVhZF9tdXRleDsKICNkZWZpbmUgcmVhZF9sb2NrKCkJCXB0aHJlYWRfbXV0ZXhfbG9jaygmcmVhZF9tdXRleCkKICNkZWZpbmUgcmVhZF91bmxvY2soKQkJcHRocmVhZF9tdXRleF91bmxvY2soJnJlYWRfbXV0ZXgpCiAKLXN0YXRpYyBwdGhyZWFkX211dGV4X3QgY2FjaGVfbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBjYWNoZV9tdXRleDsKICNkZWZpbmUgY2FjaGVfbG9jaygpCQlwdGhyZWFkX211dGV4X2xvY2soJmNhY2hlX211dGV4KQogI2RlZmluZSBjYWNoZV91bmxvY2soKQkJcHRocmVhZF9tdXRleF91bmxvY2soJmNhY2hlX211dGV4KQogCi1zdGF0aWMgcHRocmVhZF9tdXRleF90IHByb2dyZXNzX211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgcHJvZ3Jlc3NfbXV0ZXg7CiAjZGVmaW5lIHByb2dyZXNzX2xvY2soKQkJcHRocmVhZF9tdXRleF9sb2NrKCZwcm9ncmVzc19tdXRleCkKICNkZWZpbmUgcHJvZ3Jlc3NfdW5sb2NrKCkJcHRocmVhZF9tdXRleF91bmxvY2soJnByb2dyZXNzX211dGV4KQogCkBAIC0xMzU1LDcgKzEzNjAsNyBAQAogCS8qCiAJICogSGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIG91dHNpZGUgb2YgdGhlIGNhY2hlCiAJICogYWNjb3VudGluZyBsb2NrLiAgQ29tcGlsZXIgd2lsbCBvcHRpbWl6ZSB0aGUgc3RyYW5nZW5lc3MKLQkgKiBhd2F5IHdoZW4gVEhSRUFERURfREVMVEFfU0VBUkNIIGlzIG5vdCBkZWZpbmVkLgorCSAqIGF3YXkgd2hlbiBOT19QVEhSRUFEUyBpcyBkZWZpbmVkLgogCSAqLwogCWZyZWUodHJnX2VudHJ5LT5kZWx0YV9kYXRhKTsKIAljYWNoZV9sb2NrKCk7CkBAIC0xNTQyLDcgKzE1NDcsNyBAQAogCWZyZWUoYXJyYXkpOwogfQogCi0jaWZkZWYgVEhSRUFERURfREVMVEFfU0VBUkNICisjaWZuZGVmIE5PX1BUSFJFQURTCiAKIC8qCiAgKiBUaGUgbWFpbiB0aHJlYWQgd2FpdHMgb24gdGhlIGNvbmRpdGlvbiB0aGF0IChhdCBsZWFzdCkgb25lIG9mIHRoZSB3b3JrZXJzCkBAIC0xNTY3LDcgKzE1NzIsMjYgQEAKIAl1bnNpZ25lZCAqcHJvY2Vzc2VkOwogfTsKIAotc3RhdGljIHB0aHJlYWRfY29uZF90IHByb2dyZXNzX2NvbmQgPSBQVEhSRUFEX0NPTkRfSU5JVElBTElaRVI7CitzdGF0aWMgcHRocmVhZF9jb25kX3QgcHJvZ3Jlc3NfY29uZDsKKworLyoKKyAqIE11dGV4IGFuZCBjb25kaXRpb25hbCB2YXJpYWJsZSBjYW4ndCBiZSBzdGF0aWNhbGx5LWluaXRpYWxpemVkIG9uIFdpbmRvd3MuCisgKi8KK3N0YXRpYyB2b2lkIGluaXRfdGhyZWFkZWRfc2VhcmNoKHZvaWQpCit7CisJcHRocmVhZF9tdXRleF9pbml0KCZyZWFkX211dGV4LCBOVUxMKTsKKwlwdGhyZWFkX211dGV4X2luaXQoJmNhY2hlX211dGV4LCBOVUxMKTsKKwlwdGhyZWFkX211dGV4X2luaXQoJnByb2dyZXNzX211dGV4LCBOVUxMKTsKKwlwdGhyZWFkX2NvbmRfaW5pdCgmcHJvZ3Jlc3NfY29uZCwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFudXBfdGhyZWFkZWRfc2VhcmNoKHZvaWQpCit7CisJcHRocmVhZF9jb25kX2Rlc3Ryb3koJnByb2dyZXNzX2NvbmQpOworCXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmcmVhZF9tdXRleCk7CisJcHRocmVhZF9tdXRleF9kZXN0cm95KCZjYWNoZV9tdXRleCk7CisJcHRocmVhZF9tdXRleF9kZXN0cm95KCZwcm9ncmVzc19tdXRleCk7Cit9CiAKIHN0YXRpYyB2b2lkICp0aHJlYWRlZF9maW5kX2RlbHRhcyh2b2lkICphcmcpCiB7CkBAIC0xNjAzLDE2ICsxNjI3LDIyIEBACiBzdGF0aWMgdm9pZCBsbF9maW5kX2RlbHRhcyhzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICoqbGlzdCwgdW5zaWduZWQgbGlzdF9zaXplLAogCQkJICAgaW50IHdpbmRvdywgaW50IGRlcHRoLCB1bnNpZ25lZCAqcHJvY2Vzc2VkKQogewotCXN0cnVjdCB0aHJlYWRfcGFyYW1zIHBbZGVsdGFfc2VhcmNoX3RocmVhZHNdOworCXN0cnVjdCB0aHJlYWRfcGFyYW1zICpwOwogCWludCBpLCByZXQsIGFjdGl2ZV90aHJlYWRzID0gMDsKIAorCWluaXRfdGhyZWFkZWRfc2VhcmNoKCk7CisKKwlpZiAoIWRlbHRhX3NlYXJjaF90aHJlYWRzKQkvKiAtLXRocmVhZHM9MCBtZWFucyBhdXRvZGV0ZWN0ICovCisJCWRlbHRhX3NlYXJjaF90aHJlYWRzID0gb25saW5lX2NwdXMoKTsKIAlpZiAoZGVsdGFfc2VhcmNoX3RocmVhZHMgPD0gMSkgewogCQlmaW5kX2RlbHRhcyhsaXN0LCAmbGlzdF9zaXplLCB3aW5kb3csIGRlcHRoLCBwcm9jZXNzZWQpOworCQljbGVhbnVwX3RocmVhZGVkX3NlYXJjaCgpOwogCQlyZXR1cm47CiAJfQogCWlmIChwcm9ncmVzcyA+IHBhY2tfdG9fc3Rkb3V0KQogCQlmcHJpbnRmKHN0ZGVyciwgIkRlbHRhIGNvbXByZXNzaW9uIHVzaW5nIHVwIHRvICVkIHRocmVhZHMuXG4iLAogCQkJCWRlbHRhX3NlYXJjaF90aHJlYWRzKTsKKwlwID0geGNhbGxvYyhkZWx0YV9zZWFyY2hfdGhyZWFkcywgc2l6ZW9mKCpwKSk7CiAKIAkvKiBQYXJ0aXRpb24gdGhlIHdvcmsgYW1vbmdzdCB3b3JrIHRocmVhZHMuICovCiAJZm9yIChpID0gMDsgaSA8IGRlbHRhX3NlYXJjaF90aHJlYWRzOyBpKyspIHsKQEAgLTE3MjEsNiArMTc1MSw4IEBACiAJCQlhY3RpdmVfdGhyZWFkcy0tOwogCQl9CiAJfQorCWNsZWFudXBfdGhyZWFkZWRfc2VhcmNoKCk7CisJZnJlZShwKTsKIH0KIAogI2Vsc2UKQEAgLTE4MTIsNyArMTg0NCw3IEBACiAKIHN0YXRpYyBpbnQgZ2l0X3BhY2tfY29uZmlnKGNvbnN0IGNoYXIgKmssIGNvbnN0IGNoYXIgKnYsIHZvaWQgKmNiKQogewotCWlmKCFzdHJjbXAoaywgInBhY2sud2luZG93IikpIHsKKwlpZiAoIXN0cmNtcChrLCAicGFjay53aW5kb3ciKSkgewogCQl3aW5kb3cgPSBnaXRfY29uZmlnX2ludChrLCB2KTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTg0Nyw3ICsxODc5LDcgQEAKIAkJaWYgKGRlbHRhX3NlYXJjaF90aHJlYWRzIDwgMCkKIAkJCWRpZSgiaW52YWxpZCBudW1iZXIgb2YgdGhyZWFkcyBzcGVjaWZpZWQgKCVkKSIsCiAJCQkgICAgZGVsdGFfc2VhcmNoX3RocmVhZHMpOwotI2lmbmRlZiBUSFJFQURFRF9ERUxUQV9TRUFSQ0gKKyNpZmRlZiBOT19QVEhSRUFEUwogCQlpZiAoZGVsdGFfc2VhcmNoX3RocmVhZHMgIT0gMSkKIAkJCXdhcm5pbmcoIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgJXMiLCBrKTsKICNlbmRpZgpAQCAtMTg3OSw3ICsxOTExLDcgQEAKIAkJCWlmICghZmVycm9yKHN0ZGluKSkKIAkJCQlkaWUoImZnZXRzIHJldHVybmVkIE5VTEwsIG5vdCBFT0YsIG5vdCBlcnJvciEiKTsKIAkJCWlmIChlcnJubyAhPSBFSU5UUikKLQkJCQlkaWUoImZnZXRzOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCQkJZGllX2Vycm5vKCJmZ2V0cyIpOwogCQkJY2xlYXJlcnIoc3RkaW4pOwogCQkJY29udGludWU7CiAJCX0KQEAgLTIwODYsMjIgKzIxMTgsMTggQEAKIAkJbG9vc2VuX3VudXNlZF9wYWNrZWRfb2JqZWN0cygmcmV2cyk7CiB9CiAKLXN0YXRpYyBpbnQgYWRqdXN0X3Blcm0oY29uc3QgY2hhciAqcGF0aCwgbW9kZV90IG1vZGUpCi17Ci0JaWYgKGNobW9kKHBhdGgsIG1vZGUpKQotCQlyZXR1cm4gLTE7Ci0JcmV0dXJuIGFkanVzdF9zaGFyZWRfcGVybShwYXRoKTsKLX0KLQogaW50IGNtZF9wYWNrX29iamVjdHMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CiAJaW50IHVzZV9pbnRlcm5hbF9yZXZfbGlzdCA9IDA7CiAJaW50IHRoaW4gPSAwOworCWludCBhbGxfcHJvZ3Jlc3NfaW1wbGllZCA9IDA7CiAJdWludDMyX3QgaTsKIAljb25zdCBjaGFyICoqcnBfYXY7CiAJaW50IHJwX2FjX2FsbG9jID0gNjQ7CiAJaW50IHJwX2FjOwogCisJcmVhZF9yZXBsYWNlX3JlZnMgPSAwOworCiAJcnBfYXYgPSB4Y2FsbG9jKHJwX2FjX2FsbG9jLCBzaXplb2YoKnJwX2F2KSk7CiAKIAlycF9hdlswXSA9ICJwYWNrLW9iamVjdHMiOwpAQCAtMjE0OCwxMCArMjE3Niw4IEBACiAJCQljb250aW51ZTsKIAkJfQogCQlpZiAoIXByZWZpeGNtcChhcmcsICItLW1heC1wYWNrLXNpemU9IikpIHsKLQkJCWNoYXIgKmVuZDsKIAkJCXBhY2tfc2l6ZV9saW1pdF9jZmcgPSAwOwotCQkJcGFja19zaXplX2xpbWl0ID0gc3RydG91bChhcmcrMTYsICZlbmQsIDApICogMTAyNCAqIDEwMjQ7Ci0JCQlpZiAoIWFyZ1sxNl0gfHwgKmVuZCkKKwkJCWlmICghZ2l0X3BhcnNlX3Vsb25nKGFyZysxNiwgJnBhY2tfc2l6ZV9saW1pdCkpCiAJCQkJdXNhZ2UocGFja191c2FnZSk7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMjE3Miw3ICsyMTk4LDcgQEAKIAkJCWRlbHRhX3NlYXJjaF90aHJlYWRzID0gc3RydG91bChhcmcrMTAsICZlbmQsIDApOwogCQkJaWYgKCFhcmdbMTBdIHx8ICplbmQgfHwgZGVsdGFfc2VhcmNoX3RocmVhZHMgPCAwKQogCQkJCXVzYWdlKHBhY2tfdXNhZ2UpOwotI2lmbmRlZiBUSFJFQURFRF9ERUxUQV9TRUFSQ0gKKyNpZmRlZiBOT19QVEhSRUFEUwogCQkJaWYgKGRlbHRhX3NlYXJjaF90aHJlYWRzICE9IDEpCiAJCQkJd2FybmluZygibm8gdGhyZWFkcyBzdXBwb3J0LCAiCiAJCQkJCSJpZ25vcmluZyAlcyIsIGFyZyk7CkBAIC0yMTk0LDYgKzIyMjAsMTAgQEAKIAkJCXByb2dyZXNzID0gMjsKIAkJCWNvbnRpbnVlOwogCQl9CisJCWlmICghc3RyY21wKCItLWFsbC1wcm9ncmVzcy1pbXBsaWVkIiwgYXJnKSkgeworCQkJYWxsX3Byb2dyZXNzX2ltcGxpZWQgPSAxOworCQkJY29udGludWU7CisJCX0KIAkJaWYgKCFzdHJjbXAoIi1xIiwgYXJnKSkgewogCQkJcHJvZ3Jlc3MgPSAwOwogCQkJY29udGludWU7CkBAIC0yMjU5LDYgKzIyODksMTAgQEAKIAkJCQlkaWUoImJhZCAlcyIsIGFyZyk7CiAJCQljb250aW51ZTsKIAkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLWtlZXAtdHJ1ZS1wYXJlbnRzIikpIHsKKwkJCWdyYWZ0c19yZXBsYWNlX3BhcmVudHMgPSAwOworCQkJY29udGludWU7CisJCX0KIAkJdXNhZ2UocGFja191c2FnZSk7CiAJfQogCkBAIC0yMjgzLDkgKzIzMTcsMTIgQEAKIAogCWlmICghcGFja190b19zdGRvdXQgJiYgIXBhY2tfc2l6ZV9saW1pdCkKIAkJcGFja19zaXplX2xpbWl0ID0gcGFja19zaXplX2xpbWl0X2NmZzsKLQogCWlmIChwYWNrX3RvX3N0ZG91dCAmJiBwYWNrX3NpemVfbGltaXQpCiAJCWRpZSgiLS1tYXgtcGFjay1zaXplIGNhbm5vdCBiZSB1c2VkIHRvIGJ1aWxkIGEgcGFjayBmb3IgdHJhbnNmZXIuIik7CisJaWYgKHBhY2tfc2l6ZV9saW1pdCAmJiBwYWNrX3NpemVfbGltaXQgPCAxMDI0KjEwMjQpIHsKKwkJd2FybmluZygibWluaW11bSBwYWNrIHNpemUgbGltaXQgaXMgMSBNaUIiKTsKKwkJcGFja19zaXplX2xpbWl0ID0gMTAyNCoxMDI0OworCX0KIAogCWlmICghcGFja190b19zdGRvdXQgJiYgdGhpbikKIAkJZGllKCItLXRoaW4gY2Fubm90IGJlIHVzZWQgdG8gYnVpbGQgYW4gaW5kZXhhYmxlIHBhY2suIik7CkBAIC0yMjkzLDEwICsyMzMwLDggQEAKIAlpZiAoa2VlcF91bnJlYWNoYWJsZSAmJiB1bnBhY2tfdW5yZWFjaGFibGUpCiAJCWRpZSgiLS1rZWVwLXVucmVhY2hhYmxlIGFuZCAtLXVucGFjay11bnJlYWNoYWJsZSBhcmUgaW5jb21wYXRpYmxlLiIpOwogCi0jaWZkZWYgVEhSRUFERURfREVMVEFfU0VBUkNICi0JaWYgKCFkZWx0YV9zZWFyY2hfdGhyZWFkcykJLyogLS10aHJlYWRzPTAgbWVhbnMgYXV0b2RldGVjdCAqLwotCQlkZWx0YV9zZWFyY2hfdGhyZWFkcyA9IG9ubGluZV9jcHVzKCk7Ci0jZW5kaWYKKwlpZiAocHJvZ3Jlc3MgJiYgYWxsX3Byb2dyZXNzX2ltcGxpZWQpCisJCXByb2dyZXNzID0gMjsKIAogCXByZXBhcmVfcGFja2VkX2dpdCgpOwogCkBAIC0yMzA4LDYgKzIzNDMsNyBAQAogCQlycF9hdltycF9hY10gPSBOVUxMOwogCQlnZXRfb2JqZWN0X2xpc3QocnBfYWMsIHJwX2F2KTsKIAl9CisJY2xlYW51cF9wcmVmZXJyZWRfYmFzZSgpOwogCWlmIChpbmNsdWRlX3RhZyAmJiBucl9yZXN1bHQpCiAJCWZvcl9lYWNoX3JlZihhZGRfcmVmX3RhZywgTlVMTCk7CiAJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3Nfc3RhdGUpOwpkaWZmIC0tZ2l0IGEvcGFjay1yZWR1bmRhbnQuYyBiL2J1aWx0aW4tcGFjay1yZWR1bmRhbnQuYwpzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBwYWNrLXJlZHVuZGFudC5jCnJlbmFtZSB0byBidWlsdGluLXBhY2stcmVkdW5kYW50LmMKaW5kZXggNDhhMTJiYy4uNDFlMTYxNSAxMDA2NDQKLS0tIGEvcGFjay1yZWR1bmRhbnQuYworKysgYi9idWlsdGluLXBhY2stcmVkdW5kYW50LmMKQEAgLTU1LDE2ICs1NSwxNSBAQAogCX0gZWxzZSB7CiAJCWludCBpID0gMTsKIAkJbmV3ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGxsaXN0X2l0ZW0pICogQkxLU0laRSk7Ci0JCWZvcig7aSA8IEJMS1NJWkU7IGkrKykgeworCQlmb3IgKDsgaSA8IEJMS1NJWkU7IGkrKykKIAkJCWxsaXN0X2l0ZW1fcHV0KCZuZXdbaV0pOwotCQl9CiAJfQogCXJldHVybiBuZXc7CiB9CiAKIHN0YXRpYyB2b2lkIGxsaXN0X2ZyZWUoc3RydWN0IGxsaXN0ICpsaXN0KQogewotCXdoaWxlKChsaXN0LT5iYWNrID0gbGlzdC0+ZnJvbnQpKSB7CisJd2hpbGUgKChsaXN0LT5iYWNrID0gbGlzdC0+ZnJvbnQpKSB7CiAJCWxpc3QtPmZyb250ID0gbGlzdC0+ZnJvbnQtPm5leHQ7CiAJCWxsaXN0X2l0ZW1fcHV0KGxpc3QtPmJhY2spOwogCX0KQEAgLTE0Niw3ICsxNDUsNyBAQAogCQlpZiAoY21wID4gMCkgeyAvKiB3ZSBpbnNlcnQgYmVmb3JlIHRoaXMgZW50cnkgKi8KIAkJCXJldHVybiBsbGlzdF9pbnNlcnQobGlzdCwgcHJldiwgc2hhMSk7CiAJCX0KLQkJaWYoIWNtcCkgeyAvKiBhbHJlYWR5IGV4aXN0cyAqLworCQlpZiAoIWNtcCkgeyAvKiBhbHJlYWR5IGV4aXN0cyAqLwogCQkJcmV0dXJuIGw7CiAJCX0KIAkJcHJldiA9IGw7CkBAIC0xNjgsNyArMTY3LDcgQEAKIAkJaW50IGNtcCA9IGhhc2hjbXAobC0+c2hhMSwgc2hhMSk7CiAJCWlmIChjbXAgPiAwKSAvKiBub3QgaW4gbGlzdCwgc2luY2Ugc29ydGVkICovCiAJCQlyZXR1cm4gcHJldjsKLQkJaWYoIWNtcCkgeyAvKiBmb3VuZCAqLworCQlpZiAoIWNtcCkgeyAvKiBmb3VuZCAqLwogCQkJaWYgKHByZXYgPT0gTlVMTCkgewogCQkJCWlmIChoaW50ICE9IE5VTEwgJiYgaGludCAhPSBsaXN0LT5mcm9udCkgewogCQkJCQkvKiB3ZSBkb24ndCBrbm93IHRoZSBwcmV2aW91cyBlbGVtZW50ICovCkBAIC0yMTgsNyArMjE3LDcgQEAKIHN0YXRpYyBpbmxpbmUgc2l6ZV90IHBhY2tfbGlzdF9zaXplKHN0cnVjdCBwYWNrX2xpc3QgKnBsKQogewogCXNpemVfdCByZXQgPSAwOwotCXdoaWxlKHBsKSB7CisJd2hpbGUgKHBsKSB7CiAJCXJldCsrOwogCQlwbCA9IHBsLT5uZXh0OwogCX0KQEAgLTM5Niw3ICszOTUsNyBAQAogCQlyZXR1cm4gMDsKIAogCXdoaWxlICgoc3Vic2V0ID0gcGwtPm5leHQpKSB7Ci0JCXdoaWxlKHN1YnNldCkgeworCQl3aGlsZSAoc3Vic2V0KSB7CiAJCQlyZXQgKz0gc2l6ZW9mX3VuaW9uKHBsLT5wYWNrLCBzdWJzZXQtPnBhY2spOwogCQkJc3Vic2V0ID0gc3Vic2V0LT5uZXh0OwogCQl9CkBAIC00MjcsNyArNDI2LDcgQEAKIAogCXBsID0gbG9jYWxfcGFja3M7CiAJd2hpbGUgKHBsKSB7Ci0JCWlmKHBsLT51bmlxdWVfb2JqZWN0cy0+c2l6ZSkKKwkJaWYgKHBsLT51bmlxdWVfb2JqZWN0cy0+c2l6ZSkKIAkJCXBhY2tfbGlzdF9pbnNlcnQoJnVuaXF1ZSwgcGwpOwogCQllbHNlCiAJCQlwYWNrX2xpc3RfaW5zZXJ0KCZub25fdW5pcXVlLCBwbCk7CkBAIC00NzksNyArNDc4LDcgQEAKIAkqbWluID0gbWluX3Blcm07CiAJLyogYWRkIHRoZSB1bmlxdWUgcGFja3MgdG8gdGhlIGxpc3QgKi8KIAlwbCA9IHVuaXF1ZTsKLQl3aGlsZShwbCkgeworCXdoaWxlIChwbCkgewogCQlwYWNrX2xpc3RfaW5zZXJ0KG1pbiwgcGwpOwogCQlwbCA9IHBsLT5uZXh0OwogCX0KQEAgLTUxNiw3ICs1MTUsNyBAQAogCXN0cnVjdCBwYWNrX2xpc3QgKnN1YnNldCwgKnBsID0gbG9jYWxfcGFja3M7CiAKIAl3aGlsZSAoKHN1YnNldCA9IHBsKSkgewotCQl3aGlsZSgoc3Vic2V0ID0gc3Vic2V0LT5uZXh0KSkKKwkJd2hpbGUgKChzdWJzZXQgPSBzdWJzZXQtPm5leHQpKQogCQkJY21wX3R3b19wYWNrcyhwbCwgc3Vic2V0KTsKIAkJcGwgPSBwbC0+bmV4dDsKIAl9CkBAIC01NjksNyArNTY4LDcgQEAKIAkJcmV0dXJuIHBhY2tfbGlzdF9pbnNlcnQoJmFsdG9kYl9wYWNrcywgJmwpOwogfQogCi1zdGF0aWMgc3RydWN0IHBhY2tfbGlzdCAqIGFkZF9wYWNrX2ZpbGUoY2hhciAqZmlsZW5hbWUpCitzdGF0aWMgc3RydWN0IHBhY2tfbGlzdCAqIGFkZF9wYWNrX2ZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUpCiB7CiAJc3RydWN0IHBhY2tlZF9naXQgKnAgPSBwYWNrZWRfZ2l0OwogCkBAIC01OTQsNyArNTkzLDcgQEAKIAl9CiB9CiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK2ludCBjbWRfcGFja19yZWR1bmRhbnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CiAJaW50IGk7CiAJc3RydWN0IHBhY2tfbGlzdCAqbWluLCAqcmVkLCAqcGw7CkBAIC02MDIsMjkgKzYwMSwyOCBAQAogCXVuc2lnbmVkIGNoYXIgKnNoYTE7CiAJY2hhciBidWZbNDJdOyAvKiA0MCBieXRlIHNoYTEgKyBcbiArIFwwICovCiAKLQlnaXRfZXh0cmFjdF9hcmd2MF9wYXRoKGFyZ3ZbMF0pOwotCi0Jc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2UocGFja19yZWR1bmRhbnRfdXNhZ2UpOwogCiAJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgewogCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOwotCQlpZighc3RyY21wKGFyZywgIi0tIikpIHsKKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS0iKSkgewogCQkJaSsrOwogCQkJYnJlYWs7CiAJCX0KLQkJaWYoIXN0cmNtcChhcmcsICItLWFsbCIpKSB7CisJCWlmICghc3RyY21wKGFyZywgIi0tYWxsIikpIHsKIAkJCWxvYWRfYWxsX3BhY2tzID0gMTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWlmKCFzdHJjbXAoYXJnLCAiLS12ZXJib3NlIikpIHsKKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS12ZXJib3NlIikpIHsKIAkJCXZlcmJvc2UgPSAxOwogCQkJY29udGludWU7CiAJCX0KLQkJaWYoIXN0cmNtcChhcmcsICItLWFsdC1vZGIiKSkgeworCQlpZiAoIXN0cmNtcChhcmcsICItLWFsdC1vZGIiKSkgewogCQkJYWx0X29kYiA9IDE7CiAJCQljb250aW51ZTsKIAkJfQotCQlpZigqYXJnID09ICctJykKKwkJaWYgKCphcmcgPT0gJy0nKQogCQkJdXNhZ2UocGFja19yZWR1bmRhbnRfdXNhZ2UpOwogCQllbHNlCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tcGFjay1yZWZzLmMgYi9idWlsdGluLXBhY2stcmVmcy5jCmluZGV4IDM0MjQ2ZGYuLjA5MTg2MGIgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tcGFjay1yZWZzLmMKKysrIGIvYnVpbHRpbi1wYWNrLXJlZnMuYwpAQCAtMTUsNyArMTUsNyBAQAogCQlPUFRfQklUKDAsICJwcnVuZSIsICZmbGFncywgInBydW5lIGxvb3NlIHJlZnMgKGRlZmF1bHQpIiwgUEFDS19SRUZTX1BSVU5FKSwKIAkJT1BUX0VORCgpLAogCX07Ci0JaWYgKHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0cywgcGFja19yZWZzX3VzYWdlLCAwKSkKKwlpZiAocGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdHMsIHBhY2tfcmVmc191c2FnZSwgMCkpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhwYWNrX3JlZnNfdXNhZ2UsIG9wdHMpOwogCXJldHVybiBwYWNrX3JlZnMoZmxhZ3MpOwogfQpkaWZmIC0tZ2l0IGEvcGF0Y2gtaWQuYyBiL2J1aWx0aW4tcGF0Y2gtaWQuYwpzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBwYXRjaC1pZC5jCnJlbmFtZSB0byBidWlsdGluLXBhdGNoLWlkLmMKaW5kZXggMGRmNGNiMC4uYWYwOTExZSAxMDA2NDQKLS0tIGEvcGF0Y2gtaWQuYworKysgYi9idWlsdGluLXBhdGNoLWlkLmMKQEAgLTc1LDEzICs3NSwxMSBAQAogCiBzdGF0aWMgY29uc3QgY2hhciBwYXRjaF9pZF91c2FnZVtdID0gImdpdCBwYXRjaC1pZCA8IHBhdGNoIjsKIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoraW50IGNtZF9wYXRjaF9pZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKIAlpZiAoYXJnYyAhPSAxKQogCQl1c2FnZShwYXRjaF9pZF91c2FnZSk7CiAKLQlnaXRfZXh0cmFjdF9hcmd2MF9wYXRoKGFyZ3ZbMF0pOwotCiAJZ2VuZXJhdGVfaWRfbGlzdCgpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1wcnVuZS1wYWNrZWQuYyBiL2J1aWx0aW4tcHJ1bmUtcGFja2VkLmMKaW5kZXggMDA1OTBiMS4uZjk0NjNkZSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1wcnVuZS1wYWNrZWQuYworKysgYi9idWlsdGluLXBydW5lLXBhY2tlZC5jCkBAIC0xLDkgKzEsMTIgQEAKICNpbmNsdWRlICJidWlsdGluLmgiCiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKIAotc3RhdGljIGNvbnN0IGNoYXIgcHJ1bmVfcGFja2VkX3VzYWdlW10gPQotImdpdCBwcnVuZS1wYWNrZWQgWy1uXSBbLXFdIjsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcHJ1bmVfcGFja2VkX3VzYWdlW10gPSB7CisJImdpdCBwcnVuZS1wYWNrZWQgWy1ufC0tZHJ5LXJ1bl0gWy1xfC0tcXVpZXRdIiwKKwlOVUxMCit9OwogCiAjZGVmaW5lIERSWV9SVU4gMDEKICNkZWZpbmUgVkVSQk9TRSAwMgpAQCAtNjgsMjQgKzcxLDE2IEBACiAKIGludCBjbWRfcHJ1bmVfcGFja2VkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQogewotCWludCBpOwotCWludCBvcHRzID0gVkVSQk9TRTsKKwlpbnQgb3B0cyA9IGlzYXR0eSgyKSA/IFZFUkJPU0UgOiAwOworCWNvbnN0IHN0cnVjdCBvcHRpb24gcHJ1bmVfcGFja2VkX29wdGlvbnNbXSA9IHsKKwkJT1BUX0JJVCgnbicsICJkcnktcnVuIiwgJm9wdHMsICJkcnkgcnVuIiwgRFJZX1JVTiksCisJCU9QVF9ORUdCSVQoJ3EnLCAicXVpZXQiLCAmb3B0cywgImJlIHF1aWV0IiwgVkVSQk9TRSksCisJCU9QVF9FTkQoKQorCX07CiAKLQlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7Ci0JCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBwcnVuZV9wYWNrZWRfb3B0aW9ucywKKwkJCSAgICAgcHJ1bmVfcGFja2VkX3VzYWdlLCAwKTsKIAotCQlpZiAoKmFyZyA9PSAnLScpIHsKLQkJCWlmICghc3RyY21wKGFyZywgIi1uIikpCi0JCQkJb3B0cyB8PSBEUllfUlVOOwotCQkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItcSIpKQotCQkJCW9wdHMgJj0gflZFUkJPU0U7Ci0JCQllbHNlCi0JCQkJdXNhZ2UocHJ1bmVfcGFja2VkX3VzYWdlKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCS8qIEhhbmRsZSBhcmd1bWVudHMgaGVyZSAuLiAqLwotCQl1c2FnZShwcnVuZV9wYWNrZWRfdXNhZ2UpOwotCX0KIAlwcnVuZV9wYWNrZWRfb2JqZWN0cyhvcHRzKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2J1aWx0aW4tcHJ1bmUuYyBiL2J1aWx0aW4tcHJ1bmUuYwppbmRleCAxNDViYTgzLi44MWY5MTVlYyAxMDA2NDQKLS0tIGEvYnVpbHRpbi1wcnVuZS5jCisrKyBiL2J1aWx0aW4tcHJ1bmUuYwpAQCAtMTgsMTMgKzE4LDExIEBACiBzdGF0aWMgaW50IHBydW5lX3RtcF9vYmplY3QoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqZmlsZW5hbWUpCiB7CiAJY29uc3QgY2hhciAqZnVsbHBhdGggPSBta3BhdGgoIiVzLyVzIiwgcGF0aCwgZmlsZW5hbWUpOwotCWlmIChleHBpcmUpIHsKLQkJc3RydWN0IHN0YXQgc3Q7Ci0JCWlmIChsc3RhdChmdWxscGF0aCwgJnN0KSkKLQkJCXJldHVybiBlcnJvcigiQ291bGQgbm90IHN0YXQgJyVzJyIsIGZ1bGxwYXRoKTsKLQkJaWYgKHN0LnN0X210aW1lID4gZXhwaXJlKQotCQkJcmV0dXJuIDA7Ci0JfQorCXN0cnVjdCBzdGF0IHN0OworCWlmIChsc3RhdChmdWxscGF0aCwgJnN0KSkKKwkJcmV0dXJuIGVycm9yKCJDb3VsZCBub3Qgc3RhdCAnJXMnIiwgZnVsbHBhdGgpOworCWlmIChzdC5zdF9tdGltZSA+IGV4cGlyZSkKKwkJcmV0dXJuIDA7CiAJcHJpbnRmKCJSZW1vdmluZyBzdGFsZSB0ZW1wb3JhcnkgZmlsZSAlc1xuIiwgZnVsbHBhdGgpOwogCWlmICghc2hvd19vbmx5KQogCQl1bmxpbmtfb3Jfd2FybihmdWxscGF0aCk7CkBAIC0zNCwxMyArMzIsMTEgQEAKIHN0YXRpYyBpbnQgcHJ1bmVfb2JqZWN0KGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQogewogCWNvbnN0IGNoYXIgKmZ1bGxwYXRoID0gbWtwYXRoKCIlcy8lcyIsIHBhdGgsIGZpbGVuYW1lKTsKLQlpZiAoZXhwaXJlKSB7Ci0JCXN0cnVjdCBzdGF0IHN0OwotCQlpZiAobHN0YXQoZnVsbHBhdGgsICZzdCkpCi0JCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCBzdGF0ICclcyciLCBmdWxscGF0aCk7Ci0JCWlmIChzdC5zdF9tdGltZSA+IGV4cGlyZSkKLQkJCXJldHVybiAwOwotCX0KKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlpZiAobHN0YXQoZnVsbHBhdGgsICZzdCkpCisJCXJldHVybiBlcnJvcigiQ291bGQgbm90IHN0YXQgJyVzJyIsIGZ1bGxwYXRoKTsKKwlpZiAoc3Quc3RfbXRpbWUgPiBleHBpcmUpCisJCXJldHVybiAwOwogCWlmIChzaG93X29ubHkgfHwgdmVyYm9zZSkgewogCQllbnVtIG9iamVjdF90eXBlIHR5cGUgPSBzaGExX29iamVjdF9pbmZvKHNoYTEsIE5VTEwpOwogCQlwcmludGYoIiVzICVzXG4iLCBzaGExX3RvX2hleChzaGExKSwKQEAgLTEwNiw3ICsxMDIsNyBAQAogLyoKICAqIFdyaXRlIGVycm9ycyAocGFydGljdWxhcmx5IG91dCBvZiBzcGFjZSkgY2FuIHJlc3VsdCBpbgogICogZmFpbGVkIHRlbXBvcmFyeSBwYWNrcyAoYW5kIG1vcmUgcmFyZWx5IGluZGV4ZXMgYW5kIG90aGVyCi0gKiBmaWxlcyBiZWdpbmluZyB3aXRoICJ0bXBfIikgYWNjdW11bGF0aW5nIGluIHRoZSBvYmplY3QKKyAqIGZpbGVzIGJlZ2lubmluZyB3aXRoICJ0bXBfIikgYWNjdW11bGF0aW5nIGluIHRoZSBvYmplY3QKICAqIGFuZCB0aGUgcGFjayBkaXJlY3Rvcmllcy4KICAqLwogc3RhdGljIHZvaWQgcmVtb3ZlX3RlbXBvcmFyeV9maWxlcyhjb25zdCBjaGFyICpwYXRoKQpAQCAtMTM5LDEwICsxMzUsMTIgQEAKIAl9OwogCWNoYXIgKnM7CiAKKwlleHBpcmUgPSBVTE9OR19NQVg7CiAJc2F2ZV9jb21taXRfYnVmZmVyID0gMDsKKwlyZWFkX3JlcGxhY2VfcmVmcyA9IDA7CiAJaW5pdF9yZXZpc2lvbnMoJnJldnMsIHByZWZpeCk7CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBwcnVuZV91c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBwcnVuZV91c2FnZSwgMCk7CiAJd2hpbGUgKGFyZ2MtLSkgewogCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwogCQljb25zdCBjaGFyICpuYW1lID0gKmFyZ3YrKzsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tcHVzaC5jIGIvYnVpbHRpbi1wdXNoLmMKaW5kZXggMmVhYmNkMy4uZjdiYzJiMiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1wdXNoLmMKKysrIGIvYnVpbHRpbi1wdXNoLmMKQEAgLTEwLDExICsxMCwxMiBAQAogI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKIAogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwdXNoX3VzYWdlW10gPSB7Ci0JImdpdCBwdXNoIFstLWFsbCB8IC0tbWlycm9yXSBbLS1kcnktcnVuXSBbLS10YWdzXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC1yZWNlaXZlLXBhY2s+XSBbLS1yZXBvPTxyZXBvc2l0b3J5Pl0gWy1mIHwgLS1mb3JjZV0gWy12XSBbPHJlcG9zaXRvcnk+IDxyZWZzcGVjPi4uLl0iLAorCSJnaXQgcHVzaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IDxyZWZzcGVjPi4uLl0iLAogCU5VTEwsCiB9OwogCiBzdGF0aWMgaW50IHRoaW47CitzdGF0aWMgaW50IGRlbGV0ZXJlZnM7CiBzdGF0aWMgY29uc3QgY2hhciAqcmVjZWl2ZXBhY2s7CiAKIHN0YXRpYyBjb25zdCBjaGFyICoqcmVmc3BlYzsKQEAgLTM5LDExICs0MCwyNCBAQAogCQkJaWYgKG5yIDw9ICsraSkKIAkJCQlkaWUoInRhZyBzaG9ydGhhbmQgd2l0aG91dCA8dGFnPiIpOwogCQkJbGVuID0gc3RybGVuKHJlZnNbaV0pICsgMTE7Ci0JCQl0YWcgPSB4bWFsbG9jKGxlbik7Ci0JCQlzdHJjcHkodGFnLCAicmVmcy90YWdzLyIpOworCQkJaWYgKGRlbGV0ZXJlZnMpIHsKKwkJCQl0YWcgPSB4bWFsbG9jKGxlbisxKTsKKwkJCQlzdHJjcHkodGFnLCAiOnJlZnMvdGFncy8iKTsKKwkJCX0gZWxzZSB7CisJCQkJdGFnID0geG1hbGxvYyhsZW4pOworCQkJCXN0cmNweSh0YWcsICJyZWZzL3RhZ3MvIik7CisJCQl9CiAJCQlzdHJjYXQodGFnLCByZWZzW2ldKTsKIAkJCXJlZiA9IHRhZzsKLQkJfQorCQl9IGVsc2UgaWYgKGRlbGV0ZXJlZnMgJiYgIXN0cmNocihyZWYsICc6JykpIHsKKwkJCWNoYXIgKmRlbHJlZjsKKwkJCWludCBsZW4gPSBzdHJsZW4ocmVmKSsxOworCQkJZGVscmVmID0geG1hbGxvYyhsZW4rMSk7CisJCQlzdHJjcHkoZGVscmVmLCAiOiIpOworCQkJc3RyY2F0KGRlbHJlZiwgcmVmKTsKKwkJCXJlZiA9IGRlbHJlZjsKKwkJfSBlbHNlIGlmIChkZWxldGVyZWZzKQorCQkJZGllKCItLWRlbGV0ZSBvbmx5IGFjY2VwdHMgcGxhaW4gdGFyZ2V0IHJlZiBuYW1lcyIpOwogCQlhZGRfcmVmc3BlYyhyZWYpOwogCX0KIH0KQEAgLTU0LDcgKzY4LDcgQEAKIAlzdHJ1Y3QgYnJhbmNoICpicmFuY2ggPSBicmFuY2hfZ2V0KE5VTEwpOwogCWlmICghYnJhbmNoKQogCQlkaWUoIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC4iKTsKLQlpZiAoIWJyYW5jaC0+bWVyZ2VfbnIpCisJaWYgKCFicmFuY2gtPm1lcmdlX25yIHx8ICFicmFuY2gtPm1lcmdlKQogCQlkaWUoIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBpcyBub3QgdHJhY2tpbmcgYW55dGhpbmcuIiwKIAkJICAgIGJyYW5jaC0+bmFtZSk7CiAJaWYgKGJyYW5jaC0+bWVyZ2VfbnIgIT0gMSkKQEAgLTY0LDM2ICs3OCwxMCBAQAogCWFkZF9yZWZzcGVjKHJlZnNwZWMuYnVmKTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKndhcm5fdW5jb25maWd1cmVkX3B1c2hfbXNnW10gPSB7Ci0JIllvdSBkaWQgbm90IHNwZWNpZnkgYW55IHJlZnNwZWNzIHRvIHB1c2gsIGFuZCB0aGUgY3VycmVudCByZW1vdGUiLAotCSJoYXMgbm90IGNvbmZpZ3VyZWQgYW55IHB1c2ggcmVmc3BlY3MuIFRoZSBkZWZhdWx0IGFjdGlvbiBpbiB0aGlzIiwKLQkiY2FzZSBpcyB0byBwdXNoIGFsbCBtYXRjaGluZyByZWZzcGVjcywgdGhhdCBpcywgYWxsIGJyYW5jaGVzIiwKLQkidGhhdCBleGlzdCBib3RoIGxvY2FsbHkgYW5kIHJlbW90ZWx5IHdpbGwgYmUgdXBkYXRlZC4gIFRoaXMgbWF5IiwKLQkibm90IG5lY2Vzc2FyaWx5IGJlIHdoYXQgeW91IHdhbnQgdG8gaGFwcGVuLiIsCi0JIiIsCi0JIllvdSBjYW4gc3BlY2lmeSB3aGF0IGFjdGlvbiB5b3Ugd2FudCB0byB0YWtlIGluIHRoaXMgY2FzZSwgYW5kIiwKLQkiYXZvaWQgc2VlaW5nIHRoaXMgbWVzc2FnZSBhZ2FpbiwgYnkgY29uZmlndXJpbmcgJ3B1c2guZGVmYXVsdCcgdG86IiwKLQkiICAnbm90aGluZycgIDogRG8gbm90IHB1c2ggYW55dGhpbmciLAotCSIgICdtYXRjaGluZycgOiBQdXNoIGFsbCBtYXRjaGluZyBicmFuY2hlcyAoZGVmYXVsdCkiLAotCSIgICd0cmFja2luZycgOiBQdXNoIHRoZSBjdXJyZW50IGJyYW5jaCB0byB3aGF0ZXZlciBpdCBpcyB0cmFja2luZyIsCi0JIiAgJ2N1cnJlbnQnICA6IFB1c2ggdGhlIGN1cnJlbnQgYnJhbmNoIgotfTsKLQotc3RhdGljIHZvaWQgd2Fybl91bmNvbmZpZ3VyZWRfcHVzaCh2b2lkKQotewotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdhcm5fdW5jb25maWd1cmVkX3B1c2hfbXNnKTsgaSsrKQotCQl3YXJuaW5nKCIlcyIsIHdhcm5fdW5jb25maWd1cmVkX3B1c2hfbXNnW2ldKTsKLX0KLQogc3RhdGljIHZvaWQgc2V0dXBfZGVmYXVsdF9wdXNoX3JlZnNwZWNzKHZvaWQpCiB7Ci0JZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwogCXN3aXRjaCAocHVzaF9kZWZhdWx0KSB7Ci0JY2FzZSBQVVNIX0RFRkFVTFRfVU5TUEVDSUZJRUQ6Ci0JCXdhcm5fdW5jb25maWd1cmVkX3B1c2goKTsKLQkJLyogZmFsbHRocm91Z2ggKi8KLQorCWRlZmF1bHQ6CiAJY2FzZSBQVVNIX0RFRkFVTFRfTUFUQ0hJTkc6CiAJCWFkZF9yZWZzcGVjKCI6Iik7CiAJCWJyZWFrOwpAQCAtMTEzLDEwICsxMDEsNDMgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgcHVzaF93aXRoX29wdGlvbnMoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBpbnQgZmxhZ3MpCit7CisJaW50IGVycjsKKwlpbnQgbm9uZmFzdGZvcndhcmQ7CisJaWYgKHJlY2VpdmVwYWNrKQorCQl0cmFuc3BvcnRfc2V0X29wdGlvbih0cmFuc3BvcnQsCisJCQkJICAgICBUUkFOU19PUFRfUkVDRUlWRVBBQ0ssIHJlY2VpdmVwYWNrKTsKKwlpZiAodGhpbikKKwkJdHJhbnNwb3J0X3NldF9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfVEhJTiwgInllcyIpOworCisJaWYgKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfVkVSQk9TRSkKKwkJZnByaW50ZihzdGRlcnIsICJQdXNoaW5nIHRvICVzXG4iLCB0cmFuc3BvcnQtPnVybCk7CisJZXJyID0gdHJhbnNwb3J0X3B1c2godHJhbnNwb3J0LCByZWZzcGVjX25yLCByZWZzcGVjLCBmbGFncywKKwkJCSAgICAgJm5vbmZhc3Rmb3J3YXJkKTsKKwlpZiAoZXJyICE9IDApCisJCWVycm9yKCJmYWlsZWQgdG8gcHVzaCBzb21lIHJlZnMgdG8gJyVzJyIsIHRyYW5zcG9ydC0+dXJsKTsKKworCWVyciB8PSB0cmFuc3BvcnRfZGlzY29ubmVjdCh0cmFuc3BvcnQpOworCisJaWYgKCFlcnIpCisJCXJldHVybiAwOworCisJaWYgKG5vbmZhc3Rmb3J3YXJkICYmIGFkdmljZV9wdXNoX25vbmZhc3Rmb3J3YXJkKSB7CisJCXByaW50ZigiVG8gcHJldmVudCB5b3UgZnJvbSBsb3NpbmcgaGlzdG9yeSwgbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGVzIHdlcmUgcmVqZWN0ZWRcbiIKKwkJICAgICAgICJNZXJnZSB0aGUgcmVtb3RlIGNoYW5nZXMgYmVmb3JlIHB1c2hpbmcgYWdhaW4uICBTZWUgdGhlICdOb3RlIGFib3V0XG4iCisJCSAgICAgICAiZmFzdC1mb3J3YXJkcycgc2VjdGlvbiBvZiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy5cbiIpOworCX0KKworCXJldHVybiAxOworfQorCiBzdGF0aWMgaW50IGRvX3B1c2goY29uc3QgY2hhciAqcmVwbywgaW50IGZsYWdzKQogewogCWludCBpLCBlcnJzOwogCXN0cnVjdCByZW1vdGUgKnJlbW90ZSA9IHJlbW90ZV9nZXQocmVwbyk7CisJY29uc3QgY2hhciAqKnVybDsKKwlpbnQgdXJsX25yOwogCiAJaWYgKCFyZW1vdGUpIHsKIAkJaWYgKHJlcG8pCkBAIC0xNTIsMjYgKzE3MywyNiBAQAogCQkJc2V0dXBfZGVmYXVsdF9wdXNoX3JlZnNwZWNzKCk7CiAJfQogCWVycnMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCByZW1vdGUtPnVybF9ucjsgaSsrKSB7CisJaWYgKHJlbW90ZS0+cHVzaHVybF9ucikgeworCQl1cmwgPSByZW1vdGUtPnB1c2h1cmw7CisJCXVybF9uciA9IHJlbW90ZS0+cHVzaHVybF9ucjsKKwl9IGVsc2UgeworCQl1cmwgPSByZW1vdGUtPnVybDsKKwkJdXJsX25yID0gcmVtb3RlLT51cmxfbnI7CisJfQorCWlmICh1cmxfbnIpIHsKKwkJZm9yIChpID0gMDsgaSA8IHVybF9ucjsgaSsrKSB7CisJCQlzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQgPQorCQkJCXRyYW5zcG9ydF9nZXQocmVtb3RlLCB1cmxbaV0pOworCQkJaWYgKHB1c2hfd2l0aF9vcHRpb25zKHRyYW5zcG9ydCwgZmxhZ3MpKQorCQkJCWVycnMrKzsKKwkJfQorCX0gZWxzZSB7CiAJCXN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCA9Ci0JCQl0cmFuc3BvcnRfZ2V0KHJlbW90ZSwgcmVtb3RlLT51cmxbaV0pOwotCQlpbnQgZXJyOwotCQlpZiAocmVjZWl2ZXBhY2spCi0JCQl0cmFuc3BvcnRfc2V0X29wdGlvbih0cmFuc3BvcnQsCi0JCQkJCSAgICAgVFJBTlNfT1BUX1JFQ0VJVkVQQUNLLCByZWNlaXZlcGFjayk7Ci0JCWlmICh0aGluKQotCQkJdHJhbnNwb3J0X3NldF9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfVEhJTiwgInllcyIpOworCQkJdHJhbnNwb3J0X2dldChyZW1vdGUsIE5VTEwpOwogCi0JCWlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX1ZFUkJPU0UpCi0JCQlmcHJpbnRmKHN0ZGVyciwgIlB1c2hpbmcgdG8gJXNcbiIsIHJlbW90ZS0+dXJsW2ldKTsKLQkJZXJyID0gdHJhbnNwb3J0X3B1c2godHJhbnNwb3J0LCByZWZzcGVjX25yLCByZWZzcGVjLCBmbGFncyk7Ci0JCWVyciB8PSB0cmFuc3BvcnRfZGlzY29ubmVjdCh0cmFuc3BvcnQpOwotCi0JCWlmICghZXJyKQotCQkJY29udGludWU7Ci0KLQkJZXJyb3IoImZhaWxlZCB0byBwdXNoIHNvbWUgcmVmcyB0byAnJXMnIiwgcmVtb3RlLT51cmxbaV0pOwotCQllcnJzKys7CisJCWlmIChwdXNoX3dpdGhfb3B0aW9ucyh0cmFuc3BvcnQsIGZsYWdzKSkKKwkJCWVycnMrKzsKIAl9CiAJcmV0dXJuICEhZXJyczsKIH0KQEAgLTE4MiwyMyArMjAzLDMzIEBACiAJaW50IHRhZ3MgPSAwOwogCWludCByYzsKIAljb25zdCBjaGFyICpyZXBvID0gTlVMTDsJLyogZGVmYXVsdCByZXBvc2l0b3J5ICovCi0KIAlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0JJVCgncScsICJxdWlldCIsICZmbGFncywgImJlIHF1aWV0IiwgVFJBTlNQT1JUX1BVU0hfUVVJRVQpLAogCQlPUFRfQklUKCd2JywgInZlcmJvc2UiLCAmZmxhZ3MsICJiZSB2ZXJib3NlIiwgVFJBTlNQT1JUX1BVU0hfVkVSQk9TRSksCiAJCU9QVF9TVFJJTkcoIDAgLCAicmVwbyIsICZyZXBvLCAicmVwb3NpdG9yeSIsICJyZXBvc2l0b3J5IiksCiAJCU9QVF9CSVQoIDAgLCAiYWxsIiwgJmZsYWdzLCAicHVzaCBhbGwgcmVmcyIsIFRSQU5TUE9SVF9QVVNIX0FMTCksCiAJCU9QVF9CSVQoIDAgLCAibWlycm9yIiwgJmZsYWdzLCAibWlycm9yIGFsbCByZWZzIiwKIAkJCSAgICAoVFJBTlNQT1JUX1BVU0hfTUlSUk9SfFRSQU5TUE9SVF9QVVNIX0ZPUkNFKSksCi0JCU9QVF9CT09MRUFOKCAwICwgInRhZ3MiLCAmdGFncywgInB1c2ggdGFncyIpLAotCQlPUFRfQklUKCAwICwgImRyeS1ydW4iLCAmZmxhZ3MsICJkcnkgcnVuIiwgVFJBTlNQT1JUX1BVU0hfRFJZX1JVTiksCisJCU9QVF9CT09MRUFOKCAwLCAiZGVsZXRlIiwgJmRlbGV0ZXJlZnMsICJkZWxldGUgcmVmcyIpLAorCQlPUFRfQk9PTEVBTiggMCAsICJ0YWdzIiwgJnRhZ3MsICJwdXNoIHRhZ3MgKGNhbid0IGJlIHVzZWQgd2l0aCAtLWFsbCBvciAtLW1pcnJvcikiKSwKKwkJT1BUX0JJVCgnbicgLCAiZHJ5LXJ1biIsICZmbGFncywgImRyeSBydW4iLCBUUkFOU1BPUlRfUFVTSF9EUllfUlVOKSwKKwkJT1BUX0JJVCggMCwgICJwb3JjZWxhaW4iLCAmZmxhZ3MsICJtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCIsIFRSQU5TUE9SVF9QVVNIX1BPUkNFTEFJTiksCiAJCU9QVF9CSVQoJ2YnLCAiZm9yY2UiLCAmZmxhZ3MsICJmb3JjZSB1cGRhdGVzIiwgVFJBTlNQT1JUX1BVU0hfRk9SQ0UpLAogCQlPUFRfQk9PTEVBTiggMCAsICJ0aGluIiwgJnRoaW4sICJ1c2UgdGhpbiBwYWNrIiksCiAJCU9QVF9TVFJJTkcoIDAgLCAicmVjZWl2ZS1wYWNrIiwgJnJlY2VpdmVwYWNrLCAicmVjZWl2ZS1wYWNrIiwgInJlY2VpdmUgcGFjayBwcm9ncmFtIiksCiAJCU9QVF9TVFJJTkcoIDAgLCAiZXhlYyIsICZyZWNlaXZlcGFjaywgInJlY2VpdmUtcGFjayIsICJyZWNlaXZlIHBhY2sgcHJvZ3JhbSIpLAorCQlPUFRfQklUKCd1JywgInNldC11cHN0cmVhbSIsICZmbGFncywgInNldCB1cHN0cmVhbSBmb3IgZ2l0IHB1bGwvc3RhdHVzIiwKKwkJCVRSQU5TUE9SVF9QVVNIX1NFVF9VUFNUUkVBTSksCiAJCU9QVF9FTkQoKQogCX07CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBwdXNoX3VzYWdlLCAwKTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBwdXNoX3VzYWdlLCAwKTsKKworCWlmIChkZWxldGVyZWZzICYmICh0YWdzIHx8IChmbGFncyAmIChUUkFOU1BPUlRfUFVTSF9BTEwgfCBUUkFOU1BPUlRfUFVTSF9NSVJST1IpKSkpCisJCWRpZSgiLS1kZWxldGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tbWlycm9yIGFuZCAtLXRhZ3MiKTsKKwlpZiAoZGVsZXRlcmVmcyAmJiBhcmdjIDwgMikKKwkJZGllKCItLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aG91dCBhbnkgcmVmcyIpOwogCiAJaWYgKHRhZ3MpCiAJCWFkZF9yZWZzcGVjKCJyZWZzL3RhZ3MvKiIpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1yZWFkLXRyZWUuYyBiL2J1aWx0aW4tcmVhZC10cmVlLmMKaW5kZXggODJlMjVlYS4uOGJkY2FiMSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1yZWFkLXRyZWUuYworKysgYi9idWlsdGluLXJlYWQtdHJlZS5jCkBAIC0xMiw2ICsxMiw4IEBACiAjaW5jbHVkZSAidW5wYWNrLXRyZWVzLmgiCiAjaW5jbHVkZSAiZGlyLmgiCiAjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJyZXNvbHZlLXVuZG8uaCIKIAogc3RhdGljIGludCBucl90cmVlczsKIHN0YXRpYyBzdHJ1Y3QgdHJlZSAqdHJlZXNbTUFYX1VOUEFDS19UUkVFU107CkBAIC0yOSw3ICszMSw2NyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciByZWFkX3RyZWVfdXNhZ2VbXSA9ICJnaXQgcmVhZC10cmVlICg8c2hhPiB8IFtbLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS1wcmVmaXg9PHByZWZpeD5dIFstdSB8IC1pXV0gWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSBbLS1pbmRleC1vdXRwdXQ9PGZpbGU+XSA8c2hhMT4gWzxzaGEyPiBbPHNoYTM+XV0pIjsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmVhZF90cmVlX3VzYWdlW10gPSB7CisJImdpdCByZWFkLXRyZWUgW1stbSBbLS10cml2aWFsXSBbLS1hZ2dyZXNzaXZlXSB8IC0tcmVzZXQgfCAtLXByZWZpeD08cHJlZml4Pl0gWy11IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gWy0taW5kZXgtb3V0cHV0PTxmaWxlPl0gPHRyZWUtaXNoMT4gWzx0cmVlLWlzaDI+IFs8dHJlZS1pc2gzPl1dIiwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IGluZGV4X291dHB1dF9jYihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywKKwkJCQkgaW50IHVuc2V0KQoreworCXNldF9hbHRlcm5hdGVfaW5kZXhfb3V0cHV0KGFyZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXhjbHVkZV9wZXJfZGlyZWN0b3J5X2NiKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJCSAgICBpbnQgdW5zZXQpCit7CisJc3RydWN0IGRpcl9zdHJ1Y3QgKmRpcjsKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm9wdHM7CisKKwlvcHRzID0gKHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqKW9wdC0+dmFsdWU7CisKKwlpZiAob3B0cy0+ZGlyKQorCQlkaWUoIm1vcmUgdGhhbiBvbmUgLS1leGNsdWRlLXBlci1kaXJlY3RvcnkgZ2l2ZW4uIik7CisKKwlkaXIgPSB4Y2FsbG9jKDEsIHNpemVvZigqb3B0cy0+ZGlyKSk7CisJZGlyLT5mbGFncyB8PSBESVJfU0hPV19JR05PUkVEOworCWRpci0+ZXhjbHVkZV9wZXJfZGlyID0gYXJnOworCW9wdHMtPmRpciA9IGRpcjsKKwkvKiBXZSBkbyBub3QgbmVlZCB0byBub3Igd2FudCB0byBkbyByZWFkLWRpcmVjdG9yeQorCSAqIGhlcmU7IHdlIGFyZSBtZXJlbHkgaW50ZXJlc3RlZCBpbiByZXVzaW5nIHRoZQorCSAqIHBlciBkaXJlY3RvcnkgaWdub3JlIHN0YWNrIG1lY2hhbmlzbS4KKwkgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGVidWdfc3RhZ2UoY29uc3QgY2hhciAqbGFiZWwsIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJcHJpbnRmKCIlcyAiLCBsYWJlbCk7CisJaWYgKCFjZSkKKwkJcHJpbnRmKCIobWlzc2luZylcbiIpOworCWVsc2UgaWYgKGNlID09IG8tPmRmX2NvbmZsaWN0X2VudHJ5KQorCQlwcmludGYoIihjb25mbGljdClcbiIpOworCWVsc2UKKwkJcHJpbnRmKCIlMDZvICMlZCAlcyAlLjhzXG4iLAorCQkgICAgICAgY2UtPmNlX21vZGUsIGNlX3N0YWdlKGNlKSwgY2UtPm5hbWUsCisJCSAgICAgICBzaGExX3RvX2hleChjZS0+c2hhMSkpOworfQorCitzdGF0aWMgaW50IGRlYnVnX21lcmdlKHN0cnVjdCBjYWNoZV9lbnRyeSAqKnN0YWdlcywgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCWludCBpOworCisJcHJpbnRmKCIqICVkLXdheSBtZXJnZVxuIiwgby0+bWVyZ2Vfc2l6ZSk7CisJZGVidWdfc3RhZ2UoImluZGV4Iiwgc3RhZ2VzWzBdLCBvKTsKKwlmb3IgKGkgPSAxOyBpIDw9IG8tPm1lcmdlX3NpemU7IGkrKykgeworCQljaGFyIGJ1ZlsyNF07CisJCXNwcmludGYoYnVmLCAiZW50IyVkIiwgaSk7CisJCWRlYnVnX3N0YWdlKGJ1Ziwgc3RhZ2VzW2ldLCBvKTsKKwl9CisJcmV0dXJuIDA7Cit9CiAKIHN0YXRpYyBzdHJ1Y3QgbG9ja19maWxlIGxvY2tfZmlsZTsKIApAQCAtMzksNiArMTAxLDM4IEBACiAJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKIAlzdHJ1Y3QgdHJlZV9kZXNjIHRbTUFYX1VOUEFDS19UUkVFU107CiAJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zIG9wdHM7CisJaW50IHByZWZpeF9zZXQgPSAwOworCWNvbnN0IHN0cnVjdCBvcHRpb24gcmVhZF90cmVlX29wdGlvbnNbXSA9IHsKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJpbmRleC1vdXRwdXQiLCBOVUxMLCAiRklMRSIsCisJCSAgIndyaXRlIHJlc3VsdGluZyBpbmRleCB0byA8RklMRT4iLAorCQkgIFBBUlNFX09QVF9OT05FRywgaW5kZXhfb3V0cHV0X2NiIH0sCisJCU9QVF9fVkVSQk9TRSgmb3B0cy52ZXJib3NlX3VwZGF0ZSksCisJCU9QVF9HUk9VUCgiTWVyZ2luZyIpLAorCQlPUFRfU0VUX0lOVCgnbScsIE5VTEwsICZvcHRzLm1lcmdlLAorCQkJICAgICJwZXJmb3JtIGEgbWVyZ2UgaW4gYWRkaXRpb24gdG8gYSByZWFkIiwgMSksCisJCU9QVF9TRVRfSU5UKDAsICJ0cml2aWFsIiwgJm9wdHMudHJpdmlhbF9tZXJnZXNfb25seSwKKwkJCSAgICAiMy13YXkgbWVyZ2UgaWYgbm8gZmlsZSBsZXZlbCBtZXJnaW5nIHJlcXVpcmVkIiwgMSksCisJCU9QVF9TRVRfSU5UKDAsICJhZ2dyZXNzaXZlIiwgJm9wdHMuYWdncmVzc2l2ZSwKKwkJCSAgICAiMy13YXkgbWVyZ2UgaW4gcHJlc2VuY2Ugb2YgYWRkcyBhbmQgcmVtb3ZlcyIsIDEpLAorCQlPUFRfU0VUX0lOVCgwLCAicmVzZXQiLCAmb3B0cy5yZXNldCwKKwkJCSAgICAic2FtZSBhcyAtbSwgYnV0IGRpc2NhcmQgdW5tZXJnZWQgZW50cmllcyIsIDEpLAorCQl7IE9QVElPTl9TVFJJTkcsIDAsICJwcmVmaXgiLCAmb3B0cy5wcmVmaXgsICI8c3ViZGlyZWN0b3J5Pi8iLAorCQkgICJyZWFkIHRoZSB0cmVlIGludG8gdGhlIGluZGV4IHVuZGVyIDxzdWJkaXJlY3Rvcnk+LyIsCisJCSAgUEFSU0VfT1BUX05PTkVHIHwgUEFSU0VfT1BUX0xJVEVSQUxfQVJHSEVMUCB9LAorCQlPUFRfU0VUX0lOVCgndScsIE5VTEwsICZvcHRzLnVwZGF0ZSwKKwkJCSAgICAidXBkYXRlIHdvcmtpbmcgdHJlZSB3aXRoIG1lcmdlIHJlc3VsdCIsIDEpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImV4Y2x1ZGUtcGVyLWRpcmVjdG9yeSIsICZvcHRzLAorCQkgICJnaXRpZ25vcmUiLAorCQkgICJhbGxvdyBleHBsaWNpdGx5IGlnbm9yZWQgZmlsZXMgdG8gYmUgb3ZlcndyaXR0ZW4iLAorCQkgIFBBUlNFX09QVF9OT05FRywgZXhjbHVkZV9wZXJfZGlyZWN0b3J5X2NiIH0sCisJCU9QVF9TRVRfSU5UKCdpJywgTlVMTCwgJm9wdHMuaW5kZXhfb25seSwKKwkJCSAgICAiZG9uJ3QgY2hlY2sgdGhlIHdvcmtpbmcgdHJlZSBhZnRlciBtZXJnaW5nIiwgMSksCisJCU9QVF9TRVRfSU5UKDAsICJuby1zcGFyc2UtY2hlY2tvdXQiLCAmb3B0cy5za2lwX3NwYXJzZV9jaGVja291dCwKKwkJCSAgICAic2tpcCBhcHBseWluZyBzcGFyc2UgY2hlY2tvdXQgZmlsdGVyIiwgMSksCisJCU9QVF9TRVRfSU5UKDAsICJkZWJ1Zy11bnBhY2siLCAmb3B0cy5kZWJ1Z191bnBhY2ssCisJCQkgICAgImRlYnVnIHVucGFjay10cmVlcyIsIDEpLAorCQlPUFRfRU5EKCkKKwl9OwogCiAJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOwogCW9wdHMuaGVhZF9pZHggPSAtMTsKQEAgLTQ3LDExNiArMTQxLDM2IEBACiAKIAlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CiAKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCB1bnVzZWRfcHJlZml4LCByZWFkX3RyZWVfb3B0aW9ucywKKwkJCSAgICAgcmVhZF90cmVlX3VzYWdlLCAwKTsKKwogCW5ld2ZkID0gaG9sZF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSwgMSk7CiAKLQlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJcHJlZml4X3NldCA9IG9wdHMucHJlZml4ID8gMSA6IDA7CisJaWYgKDEgPCBvcHRzLm1lcmdlICsgb3B0cy5yZXNldCArIHByZWZpeF9zZXQpCisJCWRpZSgiV2hpY2ggb25lPyAtbSwgLS1yZXNldCwgb3IgLS1wcmVmaXg/Iik7CisKKwlpZiAob3B0cy5yZXNldCB8fCBvcHRzLm1lcmdlIHx8IG9wdHMucHJlZml4KSB7CisJCWlmIChyZWFkX2NhY2hlX3VubWVyZ2VkKCkgJiYgKG9wdHMucHJlZml4IHx8IG9wdHMubWVyZ2UpKQorCQkJZGllKCJZb3UgbmVlZCB0byByZXNvbHZlIHlvdXIgY3VycmVudCBpbmRleCBmaXJzdCIpOworCQlzdGFnZSA9IG9wdHMubWVyZ2UgPSAxOworCX0KKwlyZXNvbHZlX3VuZG9fY2xlYXIoKTsKKworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKIAkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKIAotCQkvKiAiLXUiIG1lYW5zICJ1cGRhdGUiLCBtZWFuaW5nIHRoYXQgYSBtZXJnZSB3aWxsIHVwZGF0ZQotCQkgKiB0aGUgd29ya2luZyB0cmVlLgotCQkgKi8KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLXUiKSkgewotCQkJb3B0cy51cGRhdGUgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoIXN0cmNtcChhcmcsICItdiIpKSB7Ci0JCQlvcHRzLnZlcmJvc2VfdXBkYXRlID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyogIi1pIiBtZWFucyAiaW5kZXggb25seSIsIG1lYW5pbmcgdGhhdCBhIG1lcmdlIHdpbGwKLQkJICogbm90IGV2ZW4gbG9vayBhdCB0aGUgd29ya2luZyB0cmVlLgotCQkgKi8KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLWkiKSkgewotCQkJb3B0cy5pbmRleF9vbmx5ID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1pbmRleC1vdXRwdXQ9IikpIHsKLQkJCXNldF9hbHRlcm5hdGVfaW5kZXhfb3V0cHV0KGFyZyArIDE1KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyogIi0tcHJlZml4PTxzdWJkaXJlY3Rvcnk+LyIgbWVhbnMga2VlcCB0aGUgY3VycmVudCBpbmRleAotCQkgKiAgZW50cmllcyBhbmQgcHV0IHRoZSBlbnRyaWVzIGZyb20gdGhlIHRyZWUgdW5kZXIgdGhlCi0JCSAqIGdpdmVuIHN1YmRpcmVjdG9yeS4KLQkJICovCi0JCWlmICghcHJlZml4Y21wKGFyZywgIi0tcHJlZml4PSIpKSB7Ci0JCQlpZiAoc3RhZ2UgfHwgb3B0cy5tZXJnZSB8fCBvcHRzLnByZWZpeCkKLQkJCQl1c2FnZShyZWFkX3RyZWVfdXNhZ2UpOwotCQkJb3B0cy5wcmVmaXggPSBhcmcgKyA5OwotCQkJb3B0cy5tZXJnZSA9IDE7Ci0JCQlzdGFnZSA9IDE7Ci0JCQlpZiAocmVhZF9jYWNoZV91bm1lcmdlZCgpKQotCQkJCWRpZSgieW91IG5lZWQgdG8gcmVzb2x2ZSB5b3VyIGN1cnJlbnQgaW5kZXggZmlyc3QiKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyogVGhpcyBkaWZmZXJzIGZyb20gIi1tIiBpbiB0aGF0IHdlJ2xsIHNpbGVudGx5IGlnbm9yZQotCQkgKiB1bm1lcmdlZCBlbnRyaWVzIGFuZCBvdmVyd3JpdGUgd29ya2luZyB0cmVlIGZpbGVzIHRoYXQKLQkJICogY29ycmVzcG9uZCB0byB0aGVtLgotCQkgKi8KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1yZXNldCIpKSB7Ci0JCQlpZiAoc3RhZ2UgfHwgb3B0cy5tZXJnZSB8fCBvcHRzLnByZWZpeCkKLQkJCQl1c2FnZShyZWFkX3RyZWVfdXNhZ2UpOwotCQkJb3B0cy5yZXNldCA9IDE7Ci0JCQlvcHRzLm1lcmdlID0gMTsKLQkJCXN0YWdlID0gMTsKLQkJCXJlYWRfY2FjaGVfdW5tZXJnZWQoKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLS10cml2aWFsIikpIHsKLQkJCW9wdHMudHJpdmlhbF9tZXJnZXNfb25seSA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmICghc3RyY21wKGFyZywgIi0tYWdncmVzc2l2ZSIpKSB7Ci0JCQlvcHRzLmFnZ3Jlc3NpdmUgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiAiLW0iIHN0YW5kcyBmb3IgIm1lcmdlIiwgbWVhbmluZyB3ZSBzdGFydCBpbiBzdGFnZSAxICovCi0JCWlmICghc3RyY21wKGFyZywgIi1tIikpIHsKLQkJCWlmIChzdGFnZSB8fCBvcHRzLm1lcmdlIHx8IG9wdHMucHJlZml4KQotCQkJCXVzYWdlKHJlYWRfdHJlZV91c2FnZSk7Ci0JCQlpZiAocmVhZF9jYWNoZV91bm1lcmdlZCgpKQotCQkJCWRpZSgieW91IG5lZWQgdG8gcmVzb2x2ZSB5b3VyIGN1cnJlbnQgaW5kZXggZmlyc3QiKTsKLQkJCXN0YWdlID0gMTsKLQkJCW9wdHMubWVyZ2UgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoIXByZWZpeGNtcChhcmcsICItLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT0iKSkgewotCQkJc3RydWN0IGRpcl9zdHJ1Y3QgKmRpcjsKLQotCQkJaWYgKG9wdHMuZGlyKQotCQkJCWRpZSgibW9yZSB0aGFuIG9uZSAtLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeSBhcmUgZ2l2ZW4uIik7Ci0KLQkJCWRpciA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpvcHRzLmRpcikpOwotCQkJZGlyLT5mbGFncyB8PSBESVJfU0hPV19JR05PUkVEOwotCQkJZGlyLT5leGNsdWRlX3Blcl9kaXIgPSBhcmcgKyAyNDsKLQkJCW9wdHMuZGlyID0gZGlyOwotCQkJLyogV2UgZG8gbm90IG5lZWQgdG8gbm9yIHdhbnQgdG8gZG8gcmVhZC1kaXJlY3RvcnkKLQkJCSAqIGhlcmU7IHdlIGFyZSBtZXJlbHkgaW50ZXJlc3RlZCBpbiByZXVzaW5nIHRoZQotCQkJICogcGVyIGRpcmVjdG9yeSBpZ25vcmUgc3RhY2sgbWVjaGFuaXNtLgotCQkJICovCi0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qIHVzaW5nIC11IGFuZCAtaSBhdCB0aGUgc2FtZSB0aW1lIG1ha2VzIG5vIHNlbnNlICovCi0JCWlmICgxIDwgb3B0cy5pbmRleF9vbmx5ICsgb3B0cy51cGRhdGUpCi0JCQl1c2FnZShyZWFkX3RyZWVfdXNhZ2UpOwotCiAJCWlmIChnZXRfc2hhMShhcmcsIHNoYTEpKQogCQkJZGllKCJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIsIGFyZyk7CiAJCWlmIChsaXN0X3RyZWUoc2hhMSkgPCAwKQogCQkJZGllKCJmYWlsZWQgdG8gdW5wYWNrIHRyZWUgb2JqZWN0ICVzIiwgYXJnKTsKIAkJc3RhZ2UrKzsKIAl9CisJaWYgKDEgPCBvcHRzLmluZGV4X29ubHkgKyBvcHRzLnVwZGF0ZSkKKwkJZGllKCItdSBhbmQgLWkgYXQgdGhlIHNhbWUgdGltZSBtYWtlcyBubyBzZW5zZSIpOwogCWlmICgob3B0cy51cGRhdGV8fG9wdHMuaW5kZXhfb25seSkgJiYgIW9wdHMubWVyZ2UpCi0JCXVzYWdlKHJlYWRfdHJlZV91c2FnZSk7CisJCWRpZSgiJXMgaXMgbWVhbmluZ2xlc3Mgd2l0aG91dCAtbSwgLS1yZXNldCwgb3IgLS1wcmVmaXgiLAorCQkgICAgb3B0cy51cGRhdGUgPyAiLXUiIDogIi1pIik7CiAJaWYgKChvcHRzLmRpciAmJiAhb3B0cy51cGRhdGUpKQogCQlkaWUoIi0tZXhjbHVkZS1wZXItZGlyZWN0b3J5IGlzIG1lYW5pbmdsZXNzIHVubGVzcyAtdSIpOwogCWlmIChvcHRzLm1lcmdlICYmICFvcHRzLmluZGV4X29ubHkpCkBAIC0xODUsNiArMTk5LDkgQEAKIAkJCW9wdHMuaGVhZF9pZHggPSAxOwogCX0KIAorCWlmIChvcHRzLmRlYnVnX3VucGFjaykKKwkJb3B0cy5mbiA9IGRlYnVnX21lcmdlOworCiAJY2FjaGVfdHJlZV9mcmVlKCZhY3RpdmVfY2FjaGVfdHJlZSk7CiAJZm9yIChpID0gMDsgaSA8IG5yX3RyZWVzOyBpKyspIHsKIAkJc3RydWN0IHRyZWUgKnRyZWUgPSB0cmVlc1tpXTsKQEAgLTE5NCw2ICsyMTEsOSBAQAogCWlmICh1bnBhY2tfdHJlZXMobnJfdHJlZXMsIHQsICZvcHRzKSkKIAkJcmV0dXJuIDEyODsKIAorCWlmIChvcHRzLmRlYnVnX3VucGFjaykKKwkJcmV0dXJuIDA7IC8qIGRvIG5vdCB3cml0ZSB0aGUgaW5kZXggb3V0ICovCisKIAkvKgogCSAqIFdoZW4gcmVhZGluZyBvbmx5IG9uZSB0cmVlIChlaXRoZXIgdGhlIG1vc3QgYmFzaWMgZm9ybSwKIAkgKiAiLW0gZW50IiBvciAiLS1yZXNldCBlbnQiIGZvcm0pLCB3ZSBjYW4gb2J0YWluIGEgZnVsbHkKZGlmZiAtLWdpdCBhL2J1aWx0aW4tcmVjZWl2ZS1wYWNrLmMgYi9idWlsdGluLXJlY2VpdmUtcGFjay5jCmluZGV4IDBiMDhkYTkuLjA1NTlmY2MgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tcmVjZWl2ZS1wYWNrLmMKKysrIGIvYnVpbHRpbi1yZWNlaXZlLXBhY2suYwpAQCAtMiw2ICsyLDcgQEAKICNpbmNsdWRlICJwYWNrLmgiCiAjaW5jbHVkZSAicmVmcy5oIgogI2luY2x1ZGUgInBrdC1saW5lLmgiCisjaW5jbHVkZSAic2lkZWJhbmQuaCIKICNpbmNsdWRlICJydW4tY29tbWFuZC5oIgogI2luY2x1ZGUgImV4ZWNfY21kLmgiCiAjaW5jbHVkZSAiY29tbWl0LmgiCkBAIC0yNyw5ICsyOCwxMiBAQAogc3RhdGljIGludCB0cmFuc2Zlcl91bnBhY2tfbGltaXQgPSAtMTsKIHN0YXRpYyBpbnQgdW5wYWNrX2xpbWl0ID0gMTAwOwogc3RhdGljIGludCByZXBvcnRfc3RhdHVzOworc3RhdGljIGludCB1c2Vfc2lkZWJhbmQ7CiBzdGF0aWMgaW50IHByZWZlcl9vZnNfZGVsdGEgPSAxOworc3RhdGljIGludCBhdXRvX3VwZGF0ZV9zZXJ2ZXJfaW5mbzsKK3N0YXRpYyBpbnQgYXV0b19nYyA9IDE7CiBzdGF0aWMgY29uc3QgY2hhciAqaGVhZF9uYW1lOwotc3RhdGljIGNoYXIgKmNhcGFiaWxpdGllc190b19zZW5kOworc3RhdGljIGludCBzZW50X2NhcGFiaWxpdGllczsKIAogc3RhdGljIGVudW0gZGVueV9hY3Rpb24gcGFyc2VfZGVueV9hY3Rpb24oY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKIHsKQEAgLTg4LDI0ICs5MiwzNiBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwlpZiAoc3RyY21wKHZhciwgInJlY2VpdmUudXBkYXRlc2VydmVyaW5mbyIpID09IDApIHsKKwkJYXV0b191cGRhdGVfc2VydmVyX2luZm8gPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChzdHJjbXAodmFyLCAicmVjZWl2ZS5hdXRvZ2MiKSA9PSAwKSB7CisJCWF1dG9fZ2MgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwogCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOwogfQogCiBzdGF0aWMgaW50IHNob3dfcmVmKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQogewotCWlmICghY2FwYWJpbGl0aWVzX3RvX3NlbmQpCisJaWYgKHNlbnRfY2FwYWJpbGl0aWVzKQogCQlwYWNrZXRfd3JpdGUoMSwgIiVzICVzXG4iLCBzaGExX3RvX2hleChzaGExKSwgcGF0aCk7CiAJZWxzZQotCQlwYWNrZXRfd3JpdGUoMSwgIiVzICVzJWMlc1xuIiwKLQkJCSAgICAgc2hhMV90b19oZXgoc2hhMSksIHBhdGgsIDAsIGNhcGFiaWxpdGllc190b19zZW5kKTsKLQljYXBhYmlsaXRpZXNfdG9fc2VuZCA9IE5VTEw7CisJCXBhY2tldF93cml0ZSgxLCAiJXMgJXMlYyVzJXNcbiIsCisJCQkgICAgIHNoYTFfdG9faGV4KHNoYTEpLCBwYXRoLCAwLAorCQkJICAgICAiIHJlcG9ydC1zdGF0dXMgZGVsZXRlLXJlZnMgc2lkZS1iYW5kLTY0ayIsCisJCQkgICAgIHByZWZlcl9vZnNfZGVsdGEgPyAiIG9mcy1kZWx0YSIgOiAiIik7CisJc2VudF9jYXBhYmlsaXRpZXMgPSAxOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCB3cml0ZV9oZWFkX2luZm8odm9pZCkKIHsKIAlmb3JfZWFjaF9yZWYoc2hvd19yZWYsIE5VTEwpOwotCWlmIChjYXBhYmlsaXRpZXNfdG9fc2VuZCkKKwlpZiAoIXNlbnRfY2FwYWJpbGl0aWVzKQogCQlzaG93X3JlZigiY2FwYWJpbGl0aWVzXnt9IiwgbnVsbF9zaGExLCAwLCBOVUxMKTsKIAogfQpAQCAtMTIzLDI5ICsxMzksNTMgQEAKIHN0YXRpYyBjb25zdCBjaGFyIHByZV9yZWNlaXZlX2hvb2tbXSA9ICJob29rcy9wcmUtcmVjZWl2ZSI7CiBzdGF0aWMgY29uc3QgY2hhciBwb3N0X3JlY2VpdmVfaG9va1tdID0gImhvb2tzL3Bvc3QtcmVjZWl2ZSI7CiAKLXN0YXRpYyBpbnQgaG9va19zdGF0dXMoaW50IGNvZGUsIGNvbnN0IGNoYXIgKmhvb2tfbmFtZSkKK3N0YXRpYyB2b2lkIHJwX2Vycm9yKGNvbnN0IGNoYXIgKmVyciwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKK3N0YXRpYyB2b2lkIHJwX3dhcm5pbmcoY29uc3QgY2hhciAqZXJyLCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOworCitzdGF0aWMgdm9pZCByZXBvcnRfbWVzc2FnZShjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpCiB7Ci0Jc3dpdGNoIChjb2RlKSB7Ci0JY2FzZSAwOgotCQlyZXR1cm4gMDsKLQljYXNlIC1FUlJfUlVOX0NPTU1BTkRfRk9SSzoKLQkJcmV0dXJuIGVycm9yKCJob29rIGZvcmsgZmFpbGVkIik7Ci0JY2FzZSAtRVJSX1JVTl9DT01NQU5EX0VYRUM6Ci0JCXJldHVybiBlcnJvcigiaG9vayBleGVjdXRlIGZhaWxlZCIpOwotCWNhc2UgLUVSUl9SVU5fQ09NTUFORF9QSVBFOgotCQlyZXR1cm4gZXJyb3IoImhvb2sgcGlwZSBmYWlsZWQiKTsKLQljYXNlIC1FUlJfUlVOX0NPTU1BTkRfV0FJVFBJRDoKLQkJcmV0dXJuIGVycm9yKCJ3YWl0cGlkIGZhaWxlZCIpOwotCWNhc2UgLUVSUl9SVU5fQ09NTUFORF9XQUlUUElEX1dST05HX1BJRDoKLQkJcmV0dXJuIGVycm9yKCJ3YWl0cGlkIGlzIGNvbmZ1c2VkIik7Ci0JY2FzZSAtRVJSX1JVTl9DT01NQU5EX1dBSVRQSURfU0lHTkFMOgotCQlyZXR1cm4gZXJyb3IoIiVzIGRpZWQgb2Ygc2lnbmFsIiwgaG9va19uYW1lKTsKLQljYXNlIC1FUlJfUlVOX0NPTU1BTkRfV0FJVFBJRF9OT0VYSVQ6Ci0JCXJldHVybiBlcnJvcigiJXMgZGllZCBzdHJhbmdlbHkiLCBob29rX25hbWUpOwotCWRlZmF1bHQ6Ci0JCWVycm9yKCIlcyBleGl0ZWQgd2l0aCBlcnJvciBjb2RlICVkIiwgaG9va19uYW1lLCAtY29kZSk7Ci0JCXJldHVybiAtY29kZTsKKwlpbnQgc3ogPSBzdHJsZW4ocHJlZml4KTsKKwljaGFyIG1zZ1s0MDk2XTsKKworCXN0cm5jcHkobXNnLCBwcmVmaXgsIHN6KTsKKwlzeiArPSB2c25wcmludGYobXNnICsgc3osIHNpemVvZihtc2cpIC0gc3osIGVyciwgcGFyYW1zKTsKKwlpZiAoc3ogPiAoc2l6ZW9mKG1zZykgLSAxKSkKKwkJc3ogPSBzaXplb2YobXNnKSAtIDE7CisJbXNnW3N6KytdID0gJ1xuJzsKKworCWlmICh1c2Vfc2lkZWJhbmQpCisJCXNlbmRfc2lkZWJhbmQoMSwgMiwgbXNnLCBzeiwgdXNlX3NpZGViYW5kKTsKKwllbHNlCisJCXh3cml0ZSgyLCBtc2csIHN6KTsKK30KKworc3RhdGljIHZvaWQgcnBfd2FybmluZyhjb25zdCBjaGFyICplcnIsIC4uLikKK3sKKwl2YV9saXN0IHBhcmFtczsKKwl2YV9zdGFydChwYXJhbXMsIGVycik7CisJcmVwb3J0X21lc3NhZ2UoIndhcm5pbmc6ICIsIGVyciwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKK30KKworc3RhdGljIHZvaWQgcnBfZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisJdmFfc3RhcnQocGFyYW1zLCBlcnIpOworCXJlcG9ydF9tZXNzYWdlKCJlcnJvcjogIiwgZXJyLCBwYXJhbXMpOworCXZhX2VuZChwYXJhbXMpOworfQorCitzdGF0aWMgaW50IGNvcHlfdG9fc2lkZWJhbmQoaW50IGluLCBpbnQgb3V0LCB2b2lkICphcmcpCit7CisJY2hhciBkYXRhWzEyOF07CisJd2hpbGUgKDEpIHsKKwkJc3NpemVfdCBzeiA9IHhyZWFkKGluLCBkYXRhLCBzaXplb2YoZGF0YSkpOworCQlpZiAoc3ogPD0gMCkKKwkJCWJyZWFrOworCQlzZW5kX3NpZGViYW5kKDEsIDIsIGRhdGEsIHN6LCB1c2Vfc2lkZWJhbmQpOwogCX0KKwljbG9zZShpbik7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcnVuX3JlY2VpdmVfaG9vayhjb25zdCBjaGFyICpob29rX25hbWUpCkBAIC0xNTMsNiArMTkzLDcgQEAKIAlzdGF0aWMgY2hhciBidWZbc2l6ZW9mKGNvbW1hbmRzLT5vbGRfc2hhMSkgKiAyICsgUEFUSF9NQVggKyA0XTsKIAlzdHJ1Y3QgY29tbWFuZCAqY21kOwogCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHByb2M7CisJc3RydWN0IGFzeW5jIG11eGVyOwogCWNvbnN0IGNoYXIgKmFyZ3ZbMl07CiAJaW50IGhhdmVfaW5wdXQgPSAwLCBjb2RlOwogCkBAIC0xNzIsOSArMjEzLDIzIEBACiAJcHJvYy5pbiA9IC0xOwogCXByb2Muc3Rkb3V0X3RvX3N0ZGVyciA9IDE7CiAKKwlpZiAodXNlX3NpZGViYW5kKSB7CisJCW1lbXNldCgmbXV4ZXIsIDAsIHNpemVvZihtdXhlcikpOworCQltdXhlci5wcm9jID0gY29weV90b19zaWRlYmFuZDsKKwkJbXV4ZXIuaW4gPSAtMTsKKwkJY29kZSA9IHN0YXJ0X2FzeW5jKCZtdXhlcik7CisJCWlmIChjb2RlKQorCQkJcmV0dXJuIGNvZGU7CisJCXByb2MuZXJyID0gbXV4ZXIuaW47CisJfQorCiAJY29kZSA9IHN0YXJ0X2NvbW1hbmQoJnByb2MpOwotCWlmIChjb2RlKQotCQlyZXR1cm4gaG9va19zdGF0dXMoY29kZSwgaG9va19uYW1lKTsKKwlpZiAoY29kZSkgeworCQlpZiAodXNlX3NpZGViYW5kKQorCQkJZmluaXNoX2FzeW5jKCZtdXhlcik7CisJCXJldHVybiBjb2RlOworCX0KKwogCWZvciAoY21kID0gY29tbWFuZHM7IGNtZDsgY21kID0gY21kLT5uZXh0KSB7CiAJCWlmICghY21kLT5lcnJvcl9zdHJpbmcpIHsKIAkJCXNpemVfdCBuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzICVzICVzXG4iLApAQCAtMTg2LDE0ICsyNDEsMTcgQEAKIAkJfQogCX0KIAljbG9zZShwcm9jLmluKTsKLQlyZXR1cm4gaG9va19zdGF0dXMoZmluaXNoX2NvbW1hbmQoJnByb2MpLCBob29rX25hbWUpOworCWlmICh1c2Vfc2lkZWJhbmQpCisJCWZpbmlzaF9hc3luYygmbXV4ZXIpOworCXJldHVybiBmaW5pc2hfY29tbWFuZCgmcHJvYyk7CiB9CiAKIHN0YXRpYyBpbnQgcnVuX3VwZGF0ZV9ob29rKHN0cnVjdCBjb21tYW5kICpjbWQpCiB7CiAJc3RhdGljIGNvbnN0IGNoYXIgdXBkYXRlX2hvb2tbXSA9ICJob29rcy91cGRhdGUiOwotCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHByb2M7CiAJY29uc3QgY2hhciAqYXJndls1XTsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBwcm9jOworCWludCBjb2RlOwogCiAJaWYgKGFjY2Vzcyh1cGRhdGVfaG9vaywgWF9PSykgPCAwKQogCQlyZXR1cm4gMDsKQEAgLTIwNSwxMSArMjYzLDE3IEBACiAJYXJndls0XSA9IE5VTEw7CiAKIAltZW1zZXQoJnByb2MsIDAsIHNpemVvZihwcm9jKSk7Ci0JcHJvYy5hcmd2ID0gYXJndjsKIAlwcm9jLm5vX3N0ZGluID0gMTsKIAlwcm9jLnN0ZG91dF90b19zdGRlcnIgPSAxOworCXByb2MuZXJyID0gdXNlX3NpZGViYW5kID8gLTEgOiAwOworCXByb2MuYXJndiA9IGFyZ3Y7CiAKLQlyZXR1cm4gaG9va19zdGF0dXMocnVuX2NvbW1hbmQoJnByb2MpLCB1cGRhdGVfaG9vayk7CisJY29kZSA9IHN0YXJ0X2NvbW1hbmQoJnByb2MpOworCWlmIChjb2RlKQorCQlyZXR1cm4gY29kZTsKKwlpZiAodXNlX3NpZGViYW5kKQorCQljb3B5X3RvX3NpZGViYW5kKHByb2MuZXJyLCAtMSwgTlVMTCk7CisJcmV0dXJuIGZpbmlzaF9jb21tYW5kKCZwcm9jKTsKIH0KIAogc3RhdGljIGludCBpc19yZWZfY2hlY2tlZF9vdXQoY29uc3QgY2hhciAqcmVmKQpAQCAtMjIyLDU5ICsyODYsNDcgQEAKIAlyZXR1cm4gIXN0cmNtcChoZWFkX25hbWUsIHJlZik7CiB9CiAKLXN0YXRpYyBjaGFyICp3YXJuX3VuY29uZmlndXJlZF9kZW55X21zZ1tdID0gewotCSJVcGRhdGluZyB0aGUgY3VycmVudGx5IGNoZWNrZWQgb3V0IGJyYW5jaCBtYXkgY2F1c2UgY29uZnVzaW9uLCIsCi0JImFzIHRoZSBpbmRleCBhbmQgd29yayB0cmVlIGRvIG5vdCByZWZsZWN0IGNoYW5nZXMgdGhhdCBhcmUgaW4gSEVBRC4iLAotCSJBcyBhIHJlc3VsdCwgeW91IG1heSBzZWUgdGhlIGNoYW5nZXMgeW91IGp1c3QgcHVzaGVkIGludG8gaXQiLAotCSJyZXZlcnRlZCB3aGVuIHlvdSBydW4gJ2dpdCBkaWZmJyBvdmVyIHRoZXJlLCBhbmQgeW91IG1heSB3YW50IiwKLQkidG8gcnVuICdnaXQgcmVzZXQgLS1oYXJkJyBiZWZvcmUgc3RhcnRpbmcgdG8gd29yayB0byByZWNvdmVyLiIsCitzdGF0aWMgY2hhciAqcmVmdXNlX3VuY29uZmlndXJlZF9kZW55X21zZ1tdID0geworCSJCeSBkZWZhdWx0LCB1cGRhdGluZyB0aGUgY3VycmVudCBicmFuY2ggaW4gYSBub24tYmFyZSByZXBvc2l0b3J5IiwKKwkiaXMgZGVuaWVkLCBiZWNhdXNlIGl0IHdpbGwgbWFrZSB0aGUgaW5kZXggYW5kIHdvcmsgdHJlZSBpbmNvbnNpc3RlbnQiLAorCSJ3aXRoIHdoYXQgeW91IHB1c2hlZCwgYW5kIHdpbGwgcmVxdWlyZSAnZ2l0IHJlc2V0IC0taGFyZCcgdG8gbWF0Y2giLAorCSJ0aGUgd29yayB0cmVlIHRvIEhFQUQuIiwKIAkiIiwKIAkiWW91IGNhbiBzZXQgJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8iLAotCSIncmVmdXNlJyBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdG8gZm9yYmlkIHB1c2hpbmcgaW50byBpdHMiLAotCSJjdXJyZW50IGJyYW5jaC4iCisJIidpZ25vcmUnIG9yICd3YXJuJyBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdG8gYWxsb3cgcHVzaGluZyBpbnRvIiwKKwkiaXRzIGN1cnJlbnQgYnJhbmNoOyBob3dldmVyLCB0aGlzIGlzIG5vdCByZWNvbW1lbmRlZCB1bmxlc3MgeW91IiwKKwkiYXJyYW5nZWQgdG8gdXBkYXRlIGl0cyB3b3JrIHRyZWUgdG8gbWF0Y2ggd2hhdCB5b3UgcHVzaGVkIGluIHNvbWUiLAorCSJvdGhlciB3YXkuIiwKIAkiIiwKLQkiVG8gYWxsb3cgcHVzaGluZyBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCwgeW91IGNhbiBzZXQgaXQgdG8gJ2lnbm9yZSc7IiwKLQkiYnV0IHRoaXMgaXMgbm90IHJlY29tbWVuZGVkIHVubGVzcyB5b3UgYXJyYW5nZWQgdG8gdXBkYXRlIGl0cyB3b3JrIiwKLQkidHJlZSB0byBtYXRjaCB3aGF0IHlvdSBwdXNoZWQgaW4gc29tZSBvdGhlciB3YXkuIiwKLQkiIiwKLQkiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UsIHlvdSBjYW4gc2V0IGl0IHRvICd3YXJuJy4iLAotCSIiLAotCSJOb3RlIHRoYXQgdGhlIGRlZmF1bHQgd2lsbCBjaGFuZ2UgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBnaXQiLAotCSJ0byByZWZ1c2UgdXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIHVubGVzcyB5b3UgaGF2ZSB0aGUiLAotCSJjb25maWd1cmF0aW9uIHZhcmlhYmxlIHNldCB0byBlaXRoZXIgJ2lnbm9yZScgb3IgJ3dhcm4nLiIKKwkiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgYW5kIHN0aWxsIGtlZXAgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLCBzZXQiLAorCSIncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byAncmVmdXNlJy4iCiB9OwogCi1zdGF0aWMgdm9pZCB3YXJuX3VuY29uZmlndXJlZF9kZW55KHZvaWQpCitzdGF0aWMgdm9pZCByZWZ1c2VfdW5jb25maWd1cmVkX2Rlbnkodm9pZCkKIHsKIAlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3YXJuX3VuY29uZmlndXJlZF9kZW55X21zZyk7IGkrKykKLQkJd2FybmluZygiJXMiLCB3YXJuX3VuY29uZmlndXJlZF9kZW55X21zZ1tpXSk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVmdXNlX3VuY29uZmlndXJlZF9kZW55X21zZyk7IGkrKykKKwkJcnBfZXJyb3IoIiVzIiwgcmVmdXNlX3VuY29uZmlndXJlZF9kZW55X21zZ1tpXSk7CiB9CiAKLXN0YXRpYyBjaGFyICp3YXJuX3VuY29uZmlndXJlZF9kZW55X2RlbGV0ZV9jdXJyZW50X21zZ1tdID0gewotCSJEZWxldGluZyB0aGUgY3VycmVudCBicmFuY2ggY2FuIGNhdXNlIGNvbmZ1c2lvbiBieSBtYWtpbmcgdGhlIG5leHQiLAotCSInZ2l0IGNsb25lJyBub3QgY2hlY2sgb3V0IGFueSBmaWxlLiIsCitzdGF0aWMgY2hhciAqcmVmdXNlX3VuY29uZmlndXJlZF9kZW55X2RlbGV0ZV9jdXJyZW50X21zZ1tdID0geworCSJCeSBkZWZhdWx0LCBkZWxldGluZyB0aGUgY3VycmVudCBicmFuY2ggaXMgZGVuaWVkLCBiZWNhdXNlIHRoZSBuZXh0IiwKKwkiJ2dpdCBjbG9uZScgd29uJ3QgcmVzdWx0IGluIGFueSBmaWxlIGNoZWNrZWQgb3V0LCBjYXVzaW5nIGNvbmZ1c2lvbi4iLAogCSIiLAogCSJZb3UgY2FuIHNldCAncmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byIsCi0JIidyZWZ1c2UnIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSB0byBkaXNhbGxvdyBkZWxldGluZyB0aGUgY3VycmVudCIsCi0JImJyYW5jaC4iLAorCSInd2Fybicgb3IgJ2lnbm9yZScgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRvIGFsbG93IGRlbGV0aW5nIHRoZSIsCisJImN1cnJlbnQgYnJhbmNoLCB3aXRoIG9yIHdpdGhvdXQgYSB3YXJuaW5nIG1lc3NhZ2UuIiwKIAkiIiwKLQkiWW91IGNhbiBzZXQgaXQgdG8gJ2lnbm9yZScgdG8gYWxsb3cgc3VjaCBhIGRlbGV0ZSB3aXRob3V0IGEgd2FybmluZy4iLAotCSIiLAotCSJUbyBtYWtlIHRoaXMgd2FybmluZyBtZXNzYWdlIGxlc3MgbG91ZCwgeW91IGNhbiBzZXQgaXQgdG8gJ3dhcm4nLiIsCi0JIiIsCi0JIk5vdGUgdGhhdCB0aGUgZGVmYXVsdCB3aWxsIGNoYW5nZSBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIGdpdCIsCi0JInRvIHJlZnVzZSBkZWxldGluZyB0aGUgY3VycmVudCBicmFuY2ggdW5sZXNzIHlvdSBoYXZlIHRoZSIsCi0JImNvbmZpZ3VyYXRpb24gdmFyaWFibGUgc2V0IHRvIGVpdGhlciAnaWdub3JlJyBvciAnd2FybicuIgorCSJUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZSwgeW91IGNhbiBzZXQgaXQgdG8gJ3JlZnVzZScuIgogfTsKIAotc3RhdGljIHZvaWQgd2Fybl91bmNvbmZpZ3VyZWRfZGVueV9kZWxldGVfY3VycmVudCh2b2lkKQorc3RhdGljIHZvaWQgcmVmdXNlX3VuY29uZmlndXJlZF9kZW55X2RlbGV0ZV9jdXJyZW50KHZvaWQpCiB7CiAJaW50IGk7CiAJZm9yIChpID0gMDsKLQkgICAgIGkgPCBBUlJBWV9TSVpFKHdhcm5fdW5jb25maWd1cmVkX2RlbnlfZGVsZXRlX2N1cnJlbnRfbXNnKTsKKwkgICAgIGkgPCBBUlJBWV9TSVpFKHJlZnVzZV91bmNvbmZpZ3VyZWRfZGVueV9kZWxldGVfY3VycmVudF9tc2cpOwogCSAgICAgaSsrKQotCQl3YXJuaW5nKCIlcyIsIHdhcm5fdW5jb25maWd1cmVkX2RlbnlfZGVsZXRlX2N1cnJlbnRfbXNnW2ldKTsKKwkJcnBfZXJyb3IoIiVzIiwgcmVmdXNlX3VuY29uZmlndXJlZF9kZW55X2RlbGV0ZV9jdXJyZW50X21zZ1tpXSk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICp1cGRhdGUoc3RydWN0IGNvbW1hbmQgKmNtZCkKQEAgLTI4Niw3ICszMzgsNyBAQAogCiAJLyogb25seSByZWZzLy4uLiBhcmUgYWxsb3dlZCAqLwogCWlmIChwcmVmaXhjbXAobmFtZSwgInJlZnMvIikgfHwgY2hlY2tfcmVmX2Zvcm1hdChuYW1lICsgNSkpIHsKLQkJZXJyb3IoInJlZnVzaW5nIHRvIGNyZWF0ZSBmdW5ueSByZWYgJyVzJyByZW1vdGVseSIsIG5hbWUpOworCQlycF9lcnJvcigicmVmdXNpbmcgdG8gY3JlYXRlIGZ1bm55IHJlZiAnJXMnIHJlbW90ZWx5IiwgbmFtZSk7CiAJCXJldHVybiAiZnVubnkgcmVmbmFtZSI7CiAJfQogCkBAIC0yOTQsMTQgKzM0NiwxNCBAQAogCQlzd2l0Y2ggKGRlbnlfY3VycmVudF9icmFuY2gpIHsKIAkJY2FzZSBERU5ZX0lHTk9SRToKIAkJCWJyZWFrOwotCQljYXNlIERFTllfVU5DT05GSUdVUkVEOgogCQljYXNlIERFTllfV0FSTjoKLQkJCXdhcm5pbmcoInVwZGF0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCIpOwotCQkJaWYgKGRlbnlfY3VycmVudF9icmFuY2ggPT0gREVOWV9VTkNPTkZJR1VSRUQpCi0JCQkJd2Fybl91bmNvbmZpZ3VyZWRfZGVueSgpOworCQkJcnBfd2FybmluZygidXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIik7CiAJCQlicmVhazsKIAkJY2FzZSBERU5ZX1JFRlVTRToKLQkJCWVycm9yKCJyZWZ1c2luZyB0byB1cGRhdGUgY2hlY2tlZCBvdXQgYnJhbmNoOiAlcyIsIG5hbWUpOworCQljYXNlIERFTllfVU5DT05GSUdVUkVEOgorCQkJcnBfZXJyb3IoInJlZnVzaW5nIHRvIHVwZGF0ZSBjaGVja2VkIG91dCBicmFuY2g6ICVzIiwgbmFtZSk7CisJCQlpZiAoZGVueV9jdXJyZW50X2JyYW5jaCA9PSBERU5ZX1VOQ09ORklHVVJFRCkKKwkJCQlyZWZ1c2VfdW5jb25maWd1cmVkX2RlbnkoKTsKIAkJCXJldHVybiAiYnJhbmNoIGlzIGN1cnJlbnRseSBjaGVja2VkIG91dCI7CiAJCX0KIAl9CkBAIC0zMTQsNyArMzY2LDcgQEAKIAogCWlmICghaXNfbnVsbF9zaGExKG9sZF9zaGExKSAmJiBpc19udWxsX3NoYTEobmV3X3NoYTEpKSB7CiAJCWlmIChkZW55X2RlbGV0ZXMgJiYgIXByZWZpeGNtcChuYW1lLCAicmVmcy9oZWFkcy8iKSkgewotCQkJZXJyb3IoImRlbnlpbmcgcmVmIGRlbGV0aW9uIGZvciAlcyIsIG5hbWUpOworCQkJcnBfZXJyb3IoImRlbnlpbmcgcmVmIGRlbGV0aW9uIGZvciAlcyIsIG5hbWUpOwogCQkJcmV0dXJuICJkZWxldGlvbiBwcm9oaWJpdGVkIjsKIAkJfQogCkBAIC0zMjMsMTMgKzM3NSwxMyBAQAogCQkJY2FzZSBERU5ZX0lHTk9SRToKIAkJCQlicmVhazsKIAkJCWNhc2UgREVOWV9XQVJOOgotCQkJY2FzZSBERU5ZX1VOQ09ORklHVVJFRDoKLQkJCQlpZiAoZGVueV9kZWxldGVfY3VycmVudCA9PSBERU5ZX1VOQ09ORklHVVJFRCkKLQkJCQkJd2Fybl91bmNvbmZpZ3VyZWRfZGVueV9kZWxldGVfY3VycmVudCgpOwotCQkJCXdhcm5pbmcoImRlbGV0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCIpOworCQkJCXJwX3dhcm5pbmcoImRlbGV0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBERU5ZX1JFRlVTRToKLQkJCQllcnJvcigicmVmdXNpbmcgdG8gZGVsZXRlIHRoZSBjdXJyZW50IGJyYW5jaDogJXMiLCBuYW1lKTsKKwkJCWNhc2UgREVOWV9VTkNPTkZJR1VSRUQ6CisJCQkJaWYgKGRlbnlfZGVsZXRlX2N1cnJlbnQgPT0gREVOWV9VTkNPTkZJR1VSRUQpCisJCQkJCXJlZnVzZV91bmNvbmZpZ3VyZWRfZGVueV9kZWxldGVfY3VycmVudCgpOworCQkJCXJwX2Vycm9yKCJyZWZ1c2luZyB0byBkZWxldGUgdGhlIGN1cnJlbnQgYnJhbmNoOiAlcyIsIG5hbWUpOwogCQkJCXJldHVybiAiZGVsZXRpb24gb2YgdGhlIGN1cnJlbnQgYnJhbmNoIHByb2hpYml0ZWQiOwogCQkJfQogCQl9CkBAIC0zNTksMjMgKzQxMSwyMyBAQAogCQkJCWJyZWFrOwogCQlmcmVlX2NvbW1pdF9saXN0KGJhc2VzKTsKIAkJaWYgKCFlbnQpIHsKLQkJCWVycm9yKCJkZW55aW5nIG5vbi1mYXN0IGZvcndhcmQgJXMiCi0JCQkgICAgICAiICh5b3Ugc2hvdWxkIHB1bGwgZmlyc3QpIiwgbmFtZSk7Ci0JCQlyZXR1cm4gIm5vbi1mYXN0IGZvcndhcmQiOworCQkJcnBfZXJyb3IoImRlbnlpbmcgbm9uLWZhc3QtZm9yd2FyZCAlcyIKKwkJCQkgIiAoeW91IHNob3VsZCBwdWxsIGZpcnN0KSIsIG5hbWUpOworCQkJcmV0dXJuICJub24tZmFzdC1mb3J3YXJkIjsKIAkJfQogCX0KIAlpZiAocnVuX3VwZGF0ZV9ob29rKGNtZCkpIHsKLQkJZXJyb3IoImhvb2sgZGVjbGluZWQgdG8gdXBkYXRlICVzIiwgbmFtZSk7CisJCXJwX2Vycm9yKCJob29rIGRlY2xpbmVkIHRvIHVwZGF0ZSAlcyIsIG5hbWUpOwogCQlyZXR1cm4gImhvb2sgZGVjbGluZWQiOwogCX0KIAogCWlmIChpc19udWxsX3NoYTEobmV3X3NoYTEpKSB7CiAJCWlmICghcGFyc2Vfb2JqZWN0KG9sZF9zaGExKSkgewotCQkJd2FybmluZyAoIkFsbG93aW5nIGRlbGV0aW9uIG9mIGNvcnJ1cHQgcmVmLiIpOworCQkJcnBfd2FybmluZygiQWxsb3dpbmcgZGVsZXRpb24gb2YgY29ycnVwdCByZWYuIik7CiAJCQlvbGRfc2hhMSA9IE5VTEw7CiAJCX0KIAkJaWYgKGRlbGV0ZV9yZWYobmFtZSwgb2xkX3NoYTEsIDApKSB7Ci0JCQllcnJvcigiZmFpbGVkIHRvIGRlbGV0ZSAlcyIsIG5hbWUpOworCQkJcnBfZXJyb3IoImZhaWxlZCB0byBkZWxldGUgJXMiLCBuYW1lKTsKIAkJCXJldHVybiAiZmFpbGVkIHRvIGRlbGV0ZSI7CiAJCX0KIAkJcmV0dXJuIE5VTEw7IC8qIGdvb2QgKi8KQEAgLTM4Myw3ICs0MzUsNyBAQAogCWVsc2UgewogCQlsb2NrID0gbG9ja19hbnlfcmVmX2Zvcl91cGRhdGUobmFtZSwgb2xkX3NoYTEsIDApOwogCQlpZiAoIWxvY2spIHsKLQkJCWVycm9yKCJmYWlsZWQgdG8gbG9jayAlcyIsIG5hbWUpOworCQkJcnBfZXJyb3IoImZhaWxlZCB0byBsb2NrICVzIiwgbmFtZSk7CiAJCQlyZXR1cm4gImZhaWxlZCB0byBsb2NrIjsKIAkJfQogCQlpZiAod3JpdGVfcmVmX3NoYTEobG9jaywgbmV3X3NoYTEsICJwdXNoIikpIHsKQEAgLTQwMCw2ICs0NTIsNyBAQAogCXN0cnVjdCBjb21tYW5kICpjbWRfcDsKIAlpbnQgYXJnYzsKIAljb25zdCBjaGFyICoqYXJndjsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBwcm9jOwogCiAJZm9yIChhcmdjID0gMCwgY21kX3AgPSBjbWQ7IGNtZF9wOyBjbWRfcCA9IGNtZF9wLT5uZXh0KSB7CiAJCWlmIChjbWRfcC0+ZXJyb3Jfc3RyaW5nKQpAQCAtNDIxLDggKzQ3NCwxOCBAQAogCQlhcmdjKys7CiAJfQogCWFyZ3ZbYXJnY10gPSBOVUxMOwotCXJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3YsIFJVTl9DT01NQU5EX05PX1NURElOCi0JCXwgUlVOX0NPTU1BTkRfU1RET1VUX1RPX1NUREVSUik7CisKKwltZW1zZXQoJnByb2MsIDAsIHNpemVvZihwcm9jKSk7CisJcHJvYy5ub19zdGRpbiA9IDE7CisJcHJvYy5zdGRvdXRfdG9fc3RkZXJyID0gMTsKKwlwcm9jLmVyciA9IHVzZV9zaWRlYmFuZCA/IC0xIDogMDsKKwlwcm9jLmFyZ3YgPSBhcmd2OworCisJaWYgKCFzdGFydF9jb21tYW5kKCZwcm9jKSkgeworCQlpZiAodXNlX3NpZGViYW5kKQorCQkJY29weV90b19zaWRlYmFuZChwcm9jLmVyciwgLTEsIE5VTEwpOworCQlmaW5pc2hfY29tbWFuZCgmcHJvYyk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBleGVjdXRlX2NvbW1hbmRzKGNvbnN0IGNoYXIgKnVucGFja2VyX2Vycm9yKQpAQCAtNDgyLDYgKzU0NSw4IEBACiAJCWlmIChyZWZsZW4gKyA4MiA8IGxlbikgewogCQkJaWYgKHN0cnN0cihyZWZuYW1lICsgcmVmbGVuICsgMSwgInJlcG9ydC1zdGF0dXMiKSkKIAkJCQlyZXBvcnRfc3RhdHVzID0gMTsKKwkJCWlmIChzdHJzdHIocmVmbmFtZSArIHJlZmxlbiArIDEsICJzaWRlLWJhbmQtNjRrIikpCisJCQkJdXNlX3NpZGViYW5kID0gTEFSR0VfUEFDS0VUX01BWDsKIAkJfQogCQljbWQgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgY29tbWFuZCkgKyBsZW4gLSA4MCk7CiAJCWhhc2hjcHkoY21kLT5vbGRfc2hhMSwgb2xkX3NoYTEpOwpAQCAtNTM4LDI0ICs2MDMsOSBAQAogCQl1bnBhY2tlcltpKytdID0gaGRyX2FyZzsKIAkJdW5wYWNrZXJbaSsrXSA9IE5VTEw7CiAJCWNvZGUgPSBydW5fY29tbWFuZF92X29wdCh1bnBhY2tlciwgUlVOX0dJVF9DTUQpOwotCQlzd2l0Y2ggKGNvZGUpIHsKLQkJY2FzZSAwOgorCQlpZiAoIWNvZGUpCiAJCQlyZXR1cm4gTlVMTDsKLQkJY2FzZSAtRVJSX1JVTl9DT01NQU5EX0ZPUks6Ci0JCQlyZXR1cm4gInVucGFjayBmb3JrIGZhaWxlZCI7Ci0JCWNhc2UgLUVSUl9SVU5fQ09NTUFORF9FWEVDOgotCQkJcmV0dXJuICJ1bnBhY2sgZXhlY3V0ZSBmYWlsZWQiOwotCQljYXNlIC1FUlJfUlVOX0NPTU1BTkRfV0FJVFBJRDoKLQkJCXJldHVybiAid2FpdHBpZCBmYWlsZWQiOwotCQljYXNlIC1FUlJfUlVOX0NPTU1BTkRfV0FJVFBJRF9XUk9OR19QSUQ6Ci0JCQlyZXR1cm4gIndhaXRwaWQgaXMgY29uZnVzZWQiOwotCQljYXNlIC1FUlJfUlVOX0NPTU1BTkRfV0FJVFBJRF9TSUdOQUw6Ci0JCQlyZXR1cm4gInVucGFja2VyIGRpZWQgb2Ygc2lnbmFsIjsKLQkJY2FzZSAtRVJSX1JVTl9DT01NQU5EX1dBSVRQSURfTk9FWElUOgotCQkJcmV0dXJuICJ1bnBhY2tlciBkaWVkIHN0cmFuZ2VseSI7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gInVucGFja2VyIGV4aXRlZCB3aXRoIGVycm9yIGNvZGUiOwotCQl9CisJCXJldHVybiAidW5wYWNrLW9iamVjdHMgYWJub3JtYWwgZXhpdCI7CiAJfSBlbHNlIHsKIAkJY29uc3QgY2hhciAqa2VlcGVyWzddOwogCQlpbnQgcywgc3RhdHVzLCBpID0gMDsKQEAgLTU3OCw4ICs2MjgsMTAgQEAKIAkJaXAuYXJndiA9IGtlZXBlcjsKIAkJaXAub3V0ID0gLTE7CiAJCWlwLmdpdF9jbWQgPSAxOwotCQlpZiAoc3RhcnRfY29tbWFuZCgmaXApKQorCQlzdGF0dXMgPSBzdGFydF9jb21tYW5kKCZpcCk7CisJCWlmIChzdGF0dXMpIHsKIAkJCXJldHVybiAiaW5kZXgtcGFjayBmb3JrIGZhaWxlZCI7CisJCX0KIAkJcGFja19sb2NrZmlsZSA9IGluZGV4X3BhY2tfbG9ja2ZpbGUoaXAub3V0KTsKIAkJY2xvc2UoaXAub3V0KTsKIAkJc3RhdHVzID0gZmluaXNoX2NvbW1hbmQoJmlwKTsKQEAgLTU5NCwxNyArNjQ2LDI1IEBACiBzdGF0aWMgdm9pZCByZXBvcnQoY29uc3QgY2hhciAqdW5wYWNrX3N0YXR1cykKIHsKIAlzdHJ1Y3QgY29tbWFuZCAqY21kOwotCXBhY2tldF93cml0ZSgxLCAidW5wYWNrICVzXG4iLAotCQkgICAgIHVucGFja19zdGF0dXMgPyB1bnBhY2tfc3RhdHVzIDogIm9rIik7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCXBhY2tldF9idWZfd3JpdGUoJmJ1ZiwgInVucGFjayAlc1xuIiwKKwkJCSB1bnBhY2tfc3RhdHVzID8gdW5wYWNrX3N0YXR1cyA6ICJvayIpOwogCWZvciAoY21kID0gY29tbWFuZHM7IGNtZDsgY21kID0gY21kLT5uZXh0KSB7CiAJCWlmICghY21kLT5lcnJvcl9zdHJpbmcpCi0JCQlwYWNrZXRfd3JpdGUoMSwgIm9rICVzXG4iLAotCQkJCSAgICAgY21kLT5yZWZfbmFtZSk7CisJCQlwYWNrZXRfYnVmX3dyaXRlKCZidWYsICJvayAlc1xuIiwKKwkJCQkJIGNtZC0+cmVmX25hbWUpOwogCQllbHNlCi0JCQlwYWNrZXRfd3JpdGUoMSwgIm5nICVzICVzXG4iLAotCQkJCSAgICAgY21kLT5yZWZfbmFtZSwgY21kLT5lcnJvcl9zdHJpbmcpOworCQkJcGFja2V0X2J1Zl93cml0ZSgmYnVmLCAibmcgJXMgJXNcbiIsCisJCQkJCSBjbWQtPnJlZl9uYW1lLCBjbWQtPmVycm9yX3N0cmluZyk7CiAJfQotCXBhY2tldF9mbHVzaCgxKTsKKwlwYWNrZXRfYnVmX2ZsdXNoKCZidWYpOworCisJaWYgKHVzZV9zaWRlYmFuZCkKKwkJc2VuZF9zaWRlYmFuZCgxLCAxLCBidWYuYnVmLCBidWYubGVuLCB1c2Vfc2lkZWJhbmQpOworCWVsc2UKKwkJc2FmZV93cml0ZSgxLCBidWYuYnVmLCBidWYubGVuKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKIH0KIAogc3RhdGljIGludCBkZWxldGVfb25seShzdHJ1Y3QgY29tbWFuZCAqY21kKQpAQCAtNjU4LDYgKzcxOCw4IEBACiAKIGludCBjbWRfcmVjZWl2ZV9wYWNrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQogeworCWludCBhZHZlcnRpc2VfcmVmcyA9IDA7CisJaW50IHN0YXRlbGVzc19ycGMgPSAwOwogCWludCBpOwogCWNoYXIgKmRpciA9IE5VTEw7CiAKQEAgLTY2Niw3ICs3MjgsMTUgQEAKIAkJY29uc3QgY2hhciAqYXJnID0gKmFyZ3YrKzsKIAogCQlpZiAoKmFyZyA9PSAnLScpIHsKLQkJCS8qIERvIGZsYWcgaGFuZGxpbmcgaGVyZSAqLworCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1hZHZlcnRpc2UtcmVmcyIpKSB7CisJCQkJYWR2ZXJ0aXNlX3JlZnMgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zdGF0ZWxlc3MtcnBjIikpIHsKKwkJCQlzdGF0ZWxlc3NfcnBjID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwogCQkJdXNhZ2UocmVjZWl2ZV9wYWNrX3VzYWdlKTsKIAkJfQogCQlpZiAoZGlyKQpAQCAtNjkxLDE2ICs3NjEsMTYgQEAKIAllbHNlIGlmICgwIDw9IHJlY2VpdmVfdW5wYWNrX2xpbWl0KQogCQl1bnBhY2tfbGltaXQgPSByZWNlaXZlX3VucGFja19saW1pdDsKIAotCWNhcGFiaWxpdGllc190b19zZW5kID0gKHByZWZlcl9vZnNfZGVsdGEpID8KLQkJIiByZXBvcnQtc3RhdHVzIGRlbGV0ZS1yZWZzIG9mcy1kZWx0YSAiIDoKLQkJIiByZXBvcnQtc3RhdHVzIGRlbGV0ZS1yZWZzICI7CisJaWYgKGFkdmVydGlzZV9yZWZzIHx8ICFzdGF0ZWxlc3NfcnBjKSB7CisJCWFkZF9hbHRlcm5hdGVfcmVmcygpOworCQl3cml0ZV9oZWFkX2luZm8oKTsKKwkJY2xlYXJfZXh0cmFfcmVmcygpOwogCi0JYWRkX2FsdGVybmF0ZV9yZWZzKCk7Ci0Jd3JpdGVfaGVhZF9pbmZvKCk7Ci0JY2xlYXJfZXh0cmFfcmVmcygpOwotCi0JLyogRU9GICovCi0JcGFja2V0X2ZsdXNoKDEpOworCQkvKiBFT0YgKi8KKwkJcGFja2V0X2ZsdXNoKDEpOworCX0KKwlpZiAoYWR2ZXJ0aXNlX3JlZnMpCisJCXJldHVybiAwOwogCiAJcmVhZF9oZWFkX2luZm8oKTsKIAlpZiAoY29tbWFuZHMpIHsKQEAgLTcxNSw2ICs3ODUsMTYgQEAKIAkJCXJlcG9ydCh1bnBhY2tfc3RhdHVzKTsKIAkJcnVuX3JlY2VpdmVfaG9vayhwb3N0X3JlY2VpdmVfaG9vayk7CiAJCXJ1bl91cGRhdGVfcG9zdF9ob29rKGNvbW1hbmRzKTsKKwkJaWYgKGF1dG9fZ2MpIHsKKwkJCWNvbnN0IGNoYXIgKmFyZ3ZfZ2NfYXV0b1tdID0geworCQkJCSJnYyIsICItLWF1dG8iLCAiLS1xdWlldCIsIE5VTEwsCisJCQl9OworCQkJcnVuX2NvbW1hbmRfdl9vcHQoYXJndl9nY19hdXRvLCBSVU5fR0lUX0NNRCk7CisJCX0KKwkJaWYgKGF1dG9fdXBkYXRlX3NlcnZlcl9pbmZvKQorCQkJdXBkYXRlX3NlcnZlcl9pbmZvKDApOwogCX0KKwlpZiAodXNlX3NpZGViYW5kKQorCQlwYWNrZXRfZmx1c2goMSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9idWlsdGluLXJlZmxvZy5jIGIvYnVpbHRpbi1yZWZsb2cuYwppbmRleCA5NTE5OGM1Li42NGU0NWJkIDEwMDY0NAotLS0gYS9idWlsdGluLXJlZmxvZy5jCisrKyBiL2J1aWx0aW4tcmVmbG9nLmMKQEAgLTM2Miw3ICszNjIsNyBAQAogCQl9IGVsc2UgaWYgKGNtZC0+dXBkYXRlcmVmICYmCiAJCQkod3JpdGVfaW5fZnVsbChsb2NrLT5sb2NrX2ZkLAogCQkJCXNoYTFfdG9faGV4KGNiLmxhc3Rfa2VwdF9zaGExKSwgNDApICE9IDQwIHx8Ci0JCQkgd3JpdGVfaW5fZnVsbChsb2NrLT5sb2NrX2ZkLCAiXG4iLCAxKSAhPSAxIHx8CisJCQkgd3JpdGVfc3RyX2luX2Z1bGwobG9jay0+bG9ja19mZCwgIlxuIikgIT0gMSB8fAogCQkJIGNsb3NlX3JlZihsb2NrKSA8IDApKSB7CiAJCQlzdGF0dXMgfD0gZXJyb3IoIkNvdWxkbid0IHdyaXRlICVzIiwKIAkJCQlsb2NrLT5say0+ZmlsZW5hbWUpOwpAQCAtNTMwLDE2ICs1MzAsMTQgQEAKIAlpbnQgaSwgc3RhdHVzLCBkb19hbGw7CiAJaW50IGV4cGxpY2l0X2V4cGlyeSA9IDA7CiAKKwlkZWZhdWx0X3JlZmxvZ19leHBpcmVfdW5yZWFjaGFibGUgPSBub3cgLSAzMCAqIDI0ICogMzYwMDsKKwlkZWZhdWx0X3JlZmxvZ19leHBpcmUgPSBub3cgLSA5MCAqIDI0ICogMzYwMDsKIAlnaXRfY29uZmlnKHJlZmxvZ19leHBpcmVfY29uZmlnLCBOVUxMKTsKIAogCXNhdmVfY29tbWl0X2J1ZmZlciA9IDA7CiAJZG9fYWxsID0gc3RhdHVzID0gMDsKIAltZW1zZXQoJmNiLCAwLCBzaXplb2YoY2IpKTsKIAotCWlmICghZGVmYXVsdF9yZWZsb2dfZXhwaXJlX3VucmVhY2hhYmxlKQotCQlkZWZhdWx0X3JlZmxvZ19leHBpcmVfdW5yZWFjaGFibGUgPSBub3cgLSAzMCAqIDI0ICogMzYwMDsKLQlpZiAoIWRlZmF1bHRfcmVmbG9nX2V4cGlyZSkKLQkJZGVmYXVsdF9yZWZsb2dfZXhwaXJlID0gbm93IC0gOTAgKiAyNCAqIDM2MDA7CiAJY2IuZXhwaXJlX3RvdGFsID0gZGVmYXVsdF9yZWZsb2dfZXhwaXJlOwogCWNiLmV4cGlyZV91bnJlYWNoYWJsZSA9IGRlZmF1bHRfcmVmbG9nX2V4cGlyZV91bnJlYWNoYWJsZTsKIApAQCAtNjk4LDYgKzY5Niw5IEBACiAKIGludCBjbWRfcmVmbG9nKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQogeworCWlmIChhcmdjID4gMSAmJiAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZShyZWZsb2dfdXNhZ2UpOworCiAJLyogV2l0aCBubyBjb21tYW5kLCB3ZSBkZWZhdWx0IHRvIHNob3dpbmcgaXQuICovCiAJaWYgKGFyZ2MgPCAyIHx8ICphcmd2WzFdID09ICctJykKIAkJcmV0dXJuIGNtZF9sb2dfcmVmbG9nKGFyZ2MsIGFyZ3YsIHByZWZpeCk7CmRpZmYgLS1naXQgYS9idWlsdGluLXJlbW90ZS5jIGIvYnVpbHRpbi1yZW1vdGUuYwppbmRleCA3Njg1Y2ZjLi4yNzc3NjViIDEwMDY0NAotLS0gYS9idWlsdGluLXJlbW90ZS5jCisrKyBiL2J1aWx0aW4tcmVtb3RlLmMKQEAgLTEyLDEwICsxMiw1NSBAQAogCSJnaXQgcmVtb3RlIGFkZCBbLXQgPGJyYW5jaD5dIFstbSA8bWFzdGVyPl0gWy1mXSBbLS1taXJyb3JdIDxuYW1lPiA8dXJsPiIsCiAJImdpdCByZW1vdGUgcmVuYW1lIDxvbGQ+IDxuZXc+IiwKIAkiZ2l0IHJlbW90ZSBybSA8bmFtZT4iLAotCSJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiBbLWEgfCAtZCB8IDxicmFuY2g+XSIsCi0JImdpdCByZW1vdGUgc2hvdyBbLW5dIDxuYW1lPiIsCisJImdpdCByZW1vdGUgc2V0LWhlYWQgPG5hbWU+ICgtYSB8IC1kIHwgPGJyYW5jaD4pIiwKKwkiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8bmFtZT4iLAogCSJnaXQgcmVtb3RlIHBydW5lIFstbiB8IC0tZHJ5LXJ1bl0gPG5hbWU+IiwKLQkiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHVwZGF0ZSBbLXAgfCAtLXBydW5lXSBbZ3JvdXBdIiwKKwkiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHVwZGF0ZSBbLXAgfCAtLXBydW5lXSBbZ3JvdXAgfCByZW1vdGVdIiwKKwkiZ2l0IHJlbW90ZSBzZXQtdXJsIDxuYW1lPiA8bmV3dXJsPiBbPG9sZHVybD5dIiwKKwkiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIDxuYW1lPiA8bmV3dXJsPiIsCisJImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8bmFtZT4gPHVybD4iLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9yZW1vdGVfYWRkX3VzYWdlW10gPSB7CisJImdpdCByZW1vdGUgYWRkIFs8b3B0aW9ucz5dIDxuYW1lPiA8dXJsPiIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX3JlbW90ZV9yZW5hbWVfdXNhZ2VbXSA9IHsKKwkiZ2l0IHJlbW90ZSByZW5hbWUgPG9sZD4gPG5ldz4iLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9yZW1vdGVfcm1fdXNhZ2VbXSA9IHsKKwkiZ2l0IHJlbW90ZSBybSA8bmFtZT4iLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9yZW1vdGVfc2V0aGVhZF91c2FnZVtdID0geworCSJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtZCB8IDxicmFuY2g+XSkiLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9yZW1vdGVfc2hvd191c2FnZVtdID0geworCSJnaXQgcmVtb3RlIHNob3cgWzxvcHRpb25zPl0gPG5hbWU+IiwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fcmVtb3RlX3BydW5lX3VzYWdlW10gPSB7CisJImdpdCByZW1vdGUgcHJ1bmUgWzxvcHRpb25zPl0gPG5hbWU+IiwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fcmVtb3RlX3VwZGF0ZV91c2FnZVtdID0geworCSJnaXQgcmVtb3RlIHVwZGF0ZSBbPG9wdGlvbnM+XSBbPGdyb3VwPiB8IDxyZW1vdGU+XS4uLiIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX3JlbW90ZV9zZXR1cmxfdXNhZ2VbXSA9IHsKKwkiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdIDxuYW1lPiA8bmV3dXJsPiBbPG9sZHVybD5dIiwKKwkiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIDxuYW1lPiA8bmV3dXJsPiIsCisJImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8bmFtZT4gPHVybD4iLAogCU5VTEwKIH07CiAKQEAgLTcwLDcgKzExNSw2IEBACiAJaW50IGk7CiAKIAlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKLQkJT1BUX0dST1VQKCJhZGQgc3BlY2lmaWMgb3B0aW9ucyIpLAogCQlPUFRfQk9PTEVBTignZicsICJmZXRjaCIsICZmZXRjaCwgImZldGNoIHRoZSByZW1vdGUgYnJhbmNoZXMiKSwKIAkJT1BUX0NBTExCQUNLKCd0JywgInRyYWNrIiwgJnRyYWNrLCAiYnJhbmNoIiwKIAkJCSJicmFuY2goZXMpIHRvIHRyYWNrIiwgb3B0X3BhcnNlX3RyYWNrKSwKQEAgLTc5LDEwICsxMjMsMTEgQEAKIAkJT1BUX0VORCgpCiAJfTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGJ1aWx0aW5fcmVtb3RlX3VzYWdlLCAwKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV9hZGRfdXNhZ2UsCisJCQkgICAgIDApOwogCiAJaWYgKGFyZ2MgPCAyKQotCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9yZW1vdGVfdXNhZ2UsIG9wdGlvbnMpOworCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9yZW1vdGVfYWRkX3VzYWdlLCBvcHRpb25zKTsKIAogCW5hbWUgPSBhcmd2WzBdOwogCXVybCA9IGFyZ3ZbMV07CkBAIC0yMjYsMzIgKzI3MSwxMCBAQAogCWludCBxdWVyaWVkOwogfTsKIAotc3RhdGljIGludCBoYW5kbGVfb25lX2JyYW5jaChjb25zdCBjaGFyICpyZWZuYW1lLAotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSkKLXsKLQlzdHJ1Y3QgcmVmX3N0YXRlcyAqc3RhdGVzID0gY2JfZGF0YTsKLQlzdHJ1Y3QgcmVmc3BlYyByZWZzcGVjOwotCi0JbWVtc2V0KCZyZWZzcGVjLCAwLCBzaXplb2YocmVmc3BlYykpOwotCXJlZnNwZWMuZHN0ID0gKGNoYXIgKilyZWZuYW1lOwotCWlmICghcmVtb3RlX2ZpbmRfdHJhY2tpbmcoc3RhdGVzLT5yZW1vdGUsICZyZWZzcGVjKSkgewotCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKLQkJY29uc3QgY2hhciAqbmFtZSA9IGFiYnJldl9icmFuY2gocmVmc3BlYy5zcmMpOwotCQkvKiBzeW1ib2xpYyByZWZzIHBvaW50aW5nIG5vd2hlcmUgd2VyZSBoYW5kbGVkIGFscmVhZHkgKi8KLQkJaWYgKChmbGFncyAmIFJFRl9JU1NZTVJFRikgfHwKLQkJICAgIHN0cmluZ19saXN0X2hhc19zdHJpbmcoJnN0YXRlcy0+dHJhY2tlZCwgbmFtZSkgfHwKLQkJICAgIHN0cmluZ19saXN0X2hhc19zdHJpbmcoJnN0YXRlcy0+bmV3LCBuYW1lKSkKLQkJCXJldHVybiAwOwotCQlpdGVtID0gc3RyaW5nX2xpc3RfYXBwZW5kKG5hbWUsICZzdGF0ZXMtPnN0YWxlKTsKLQkJaXRlbS0+dXRpbCA9IHhzdHJkdXAocmVmbmFtZSk7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGdldF9yZWZfc3RhdGVzKGNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLCBzdHJ1Y3QgcmVmX3N0YXRlcyAqc3RhdGVzKQogewogCXN0cnVjdCByZWYgKmZldGNoX21hcCA9IE5VTEwsICoqdGFpbCA9ICZmZXRjaF9tYXA7Ci0Jc3RydWN0IHJlZiAqcmVmOworCXN0cnVjdCByZWYgKnJlZiwgKnN0YWxlX3JlZnM7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc3RhdGVzLT5yZW1vdGUtPmZldGNoX3JlZnNwZWNfbnI7IGkrKykKQEAgLTI1OSw3ICsyODIsOSBAQAogCQkJZGllKCJDb3VsZCBub3QgZ2V0IGZldGNoIG1hcCBmb3IgcmVmc3BlYyAlcyIsCiAJCQkJc3RhdGVzLT5yZW1vdGUtPmZldGNoX3JlZnNwZWNbaV0pOwogCi0Jc3RhdGVzLT5uZXcuc3RyZHVwX3N0cmluZ3MgPSBzdGF0ZXMtPnRyYWNrZWQuc3RyZHVwX3N0cmluZ3MgPSAxOworCXN0YXRlcy0+bmV3LnN0cmR1cF9zdHJpbmdzID0gMTsKKwlzdGF0ZXMtPnRyYWNrZWQuc3RyZHVwX3N0cmluZ3MgPSAxOworCXN0YXRlcy0+c3RhbGUuc3RyZHVwX3N0cmluZ3MgPSAxOwogCWZvciAocmVmID0gZmV0Y2hfbWFwOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgewogCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwogCQlpZiAoIXJlZi0+cGVlcl9yZWYgfHwgcmVhZF9yZWYocmVmLT5wZWVyX3JlZi0+bmFtZSwgc2hhMSkpCkBAIC0yNjcsMTEgKzI5MiwxNyBAQAogCQllbHNlCiAJCQlzdHJpbmdfbGlzdF9hcHBlbmQoYWJicmV2X2JyYW5jaChyZWYtPm5hbWUpLCAmc3RhdGVzLT50cmFja2VkKTsKIAl9CisJc3RhbGVfcmVmcyA9IGdldF9zdGFsZV9oZWFkcyhzdGF0ZXMtPnJlbW90ZSwgZmV0Y2hfbWFwKTsKKwlmb3IgKHJlZiA9IHN0YWxlX3JlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0KKwkJCXN0cmluZ19saXN0X2FwcGVuZChhYmJyZXZfYnJhbmNoKHJlZi0+bmFtZSksICZzdGF0ZXMtPnN0YWxlKTsKKwkJaXRlbS0+dXRpbCA9IHhzdHJkdXAocmVmLT5uYW1lKTsKKwl9CisJZnJlZV9yZWZzKHN0YWxlX3JlZnMpOwogCWZyZWVfcmVmcyhmZXRjaF9tYXApOwogCiAJc29ydF9zdHJpbmdfbGlzdCgmc3RhdGVzLT5uZXcpOwogCXNvcnRfc3RyaW5nX2xpc3QoJnN0YXRlcy0+dHJhY2tlZCk7Ci0JZm9yX2VhY2hfcmVmKGhhbmRsZV9vbmVfYnJhbmNoLCBzdGF0ZXMpOwogCXNvcnRfc3RyaW5nX2xpc3QoJnN0YXRlcy0+c3RhbGUpOwogCiAJcmV0dXJuIDA7CkBAIC0yOTQsMTcgKzMyNSwxNCBAQAogCXN0cnVjdCByZWZfc3RhdGVzICpzdGF0ZXMpCiB7CiAJc3RydWN0IHJlbW90ZSAqcmVtb3RlID0gc3RhdGVzLT5yZW1vdGU7Ci0Jc3RydWN0IHJlZiAqcmVmLCAqbG9jYWxfcmVmcywgKnB1c2hfbWFwLCAqKnB1c2hfdGFpbDsKKwlzdHJ1Y3QgcmVmICpyZWYsICpsb2NhbF9yZWZzLCAqcHVzaF9tYXA7CiAJaWYgKHJlbW90ZS0+bWlycm9yKQogCQlyZXR1cm4gMDsKIAogCWxvY2FsX3JlZnMgPSBnZXRfbG9jYWxfaGVhZHMoKTsKIAlwdXNoX21hcCA9IGNvcHlfcmVmX2xpc3QocmVtb3RlX3JlZnMpOwogCi0JcHVzaF90YWlsID0gJnB1c2hfbWFwOwotCXdoaWxlICgqcHVzaF90YWlsKQotCQlwdXNoX3RhaWwgPSAmKCgqcHVzaF90YWlsKS0+bmV4dCk7Ci0JbWF0Y2hfcmVmcyhsb2NhbF9yZWZzLCBwdXNoX21hcCwgJnB1c2hfdGFpbCwgcmVtb3RlLT5wdXNoX3JlZnNwZWNfbnIsCisJbWF0Y2hfcmVmcyhsb2NhbF9yZWZzLCAmcHVzaF9tYXAsIHJlbW90ZS0+cHVzaF9yZWZzcGVjX25yLAogCQkgICByZW1vdGUtPnB1c2hfcmVmc3BlYywgTUFUQ0hfUkVGU19OT05FKTsKIAogCXN0YXRlcy0+cHVzaC5zdHJkdXBfc3RyaW5ncyA9IDE7CkBAIC0zODcsNyArNDE1LDcgQEAKIAlnZXRfZmV0Y2hfbWFwKHJlbW90ZV9yZWZzLCAmcmVmc3BlYywgJmZldGNoX21hcF90YWlsLCAwKTsKIAltYXRjaGVzID0gZ3Vlc3NfcmVtb3RlX2hlYWQoZmluZF9yZWZfYnlfbmFtZShyZW1vdGVfcmVmcywgIkhFQUQiKSwKIAkJCQkgICAgZmV0Y2hfbWFwLCAxKTsKLQlmb3IocmVmID0gbWF0Y2hlczsgcmVmOyByZWYgPSByZWYtPm5leHQpCisJZm9yIChyZWYgPSBtYXRjaGVzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkKIAkJc3RyaW5nX2xpc3RfYXBwZW5kKGFiYnJldl9icmFuY2gocmVmLT5uYW1lKSwgJnN0YXRlcy0+aGVhZHMpOwogCiAJZnJlZV9yZWZzKGZldGNoX21hcCk7CkBAIC00ODYsNyArNTE0LDcgQEAKIAljb25zdCBjaGFyICpzeW1yZWY7CiAKIAlzdHJidWZfYWRkZigmYnVmLCAicmVmcy9yZW1vdGVzLyVzIiwgcmVuYW1lLT5vbGQpOwotCWlmKCFwcmVmaXhjbXAocmVmbmFtZSwgYnVmLmJ1ZikpIHsKKwlpZiAoIXByZWZpeGNtcChyZWZuYW1lLCBidWYuYnVmKSkgewogCQlpdGVtID0gc3RyaW5nX2xpc3RfYXBwZW5kKHhzdHJkdXAocmVmbmFtZSksIHJlbmFtZS0+cmVtb3RlX2JyYW5jaGVzKTsKIAkJc3ltcmVmID0gcmVzb2x2ZV9yZWYocmVmbmFtZSwgb3JpZ19zaGExLCAxLCAmZmxhZyk7CiAJCWlmIChmbGFnICYgUkVGX0lTU1lNUkVGKQpAQCAtNTQyLDcgKzU3MCw3IEBACiAJaW50IGk7CiAKIAlpZiAoYXJnYyAhPSAzKQotCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9yZW1vdGVfdXNhZ2UsIG9wdGlvbnMpOworCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9yZW1vdGVfcmVuYW1lX3VzYWdlLCBvcHRpb25zKTsKIAogCXJlbmFtZS5vbGQgPSBhcmd2WzFdOwogCXJlbmFtZS5uZXcgPSBhcmd2WzJdOwpAQCAtNjgzLDcgKzcxMSw3IEBACiAJaW50IGksIHJlc3VsdDsKIAogCWlmIChhcmdjICE9IDIpCi0JCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JlbW90ZV91c2FnZSwgb3B0aW9ucyk7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JlbW90ZV9ybV91c2FnZSwgb3B0aW9ucyk7CiAKIAlyZW1vdGUgPSByZW1vdGVfZ2V0KGFyZ3ZbMV0pOwogCWlmICghcmVtb3RlKQpAQCAtNzQyLDcgKzc3MCw3IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBjbGVhcl9wdXNoX2luZm8odm9pZCAqdXRpbCwgY29uc3QgY2hhciAqc3RyaW5nKQorc3RhdGljIHZvaWQgY2xlYXJfcHVzaF9pbmZvKHZvaWQgKnV0aWwsIGNvbnN0IGNoYXIgKnN0cmluZykKIHsKIAlzdHJ1Y3QgcHVzaF9pbmZvICppbmZvID0gdXRpbDsKIAlmcmVlKGluZm8tPmRlc3QpOwpAQCAtNzUyLDcgKzc4MCw3IEBACiBzdGF0aWMgdm9pZCBmcmVlX3JlbW90ZV9yZWZfc3RhdGVzKHN0cnVjdCByZWZfc3RhdGVzICpzdGF0ZXMpCiB7CiAJc3RyaW5nX2xpc3RfY2xlYXIoJnN0YXRlcy0+bmV3LCAwKTsKLQlzdHJpbmdfbGlzdF9jbGVhcigmc3RhdGVzLT5zdGFsZSwgMCk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJnN0YXRlcy0+c3RhbGUsIDEpOwogCXN0cmluZ19saXN0X2NsZWFyKCZzdGF0ZXMtPnRyYWNrZWQsIDApOwogCXN0cmluZ19saXN0X2NsZWFyKCZzdGF0ZXMtPmhlYWRzLCAwKTsKIAlzdHJpbmdfbGlzdF9jbGVhcl9mdW5jKCZzdGF0ZXMtPnB1c2gsIGNsZWFyX3B1c2hfaW5mbyk7CkBAIC04MTcsNyArODQ1LDcgQEAKIAlpbnQgYW55X3JlYmFzZTsKIH07CiAKLWludCBhZGRfcmVtb3RlX3RvX3Nob3dfaW5mbyhzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwgdm9pZCAqY2JfZGF0YSkKK3N0YXRpYyBpbnQgYWRkX3JlbW90ZV90b19zaG93X2luZm8oc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sIHZvaWQgKmNiX2RhdGEpCiB7CiAJc3RydWN0IHNob3dfaW5mbyAqaW5mbyA9IGNiX2RhdGE7CiAJaW50IG4gPSBzdHJsZW4oaXRlbS0+c3RyaW5nKTsKQEAgLTgyNyw3ICs4NTUsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgc2hvd19yZW1vdGVfaW5mb19pdGVtKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtLCB2b2lkICpjYl9kYXRhKQorc3RhdGljIGludCBzaG93X3JlbW90ZV9pbmZvX2l0ZW0oc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sIHZvaWQgKmNiX2RhdGEpCiB7CiAJc3RydWN0IHNob3dfaW5mbyAqaW5mbyA9IGNiX2RhdGE7CiAJc3RydWN0IHJlZl9zdGF0ZXMgKnN0YXRlcyA9IGluZm8tPnN0YXRlczsKQEAgLTg1NCw3ICs4ODIsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgYWRkX2xvY2FsX3RvX3Nob3dfaW5mbyhzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqYnJhbmNoX2l0ZW0sIHZvaWQgKmNiX2RhdGEpCitzdGF0aWMgaW50IGFkZF9sb2NhbF90b19zaG93X2luZm8oc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmJyYW5jaF9pdGVtLCB2b2lkICpjYl9kYXRhKQogewogCXN0cnVjdCBzaG93X2luZm8gKnNob3dfaW5mbyA9IGNiX2RhdGE7CiAJc3RydWN0IHJlZl9zdGF0ZXMgKnN0YXRlcyA9IHNob3dfaW5mby0+c3RhdGVzOwpAQCAtODc2LDcgKzkwNCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBzaG93X2xvY2FsX2luZm9faXRlbShzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwgdm9pZCAqY2JfZGF0YSkKK3N0YXRpYyBpbnQgc2hvd19sb2NhbF9pbmZvX2l0ZW0oc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sIHZvaWQgKmNiX2RhdGEpCiB7CiAJc3RydWN0IHNob3dfaW5mbyAqc2hvd19pbmZvID0gY2JfZGF0YTsKIAlzdHJ1Y3QgYnJhbmNoX2luZm8gKmJyYW5jaF9pbmZvID0gaXRlbS0+dXRpbDsKQEAgLTkwOCw3ICs5MzYsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgYWRkX3B1c2hfdG9fc2hvd19pbmZvKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpwdXNoX2l0ZW0sIHZvaWQgKmNiX2RhdGEpCitzdGF0aWMgaW50IGFkZF9wdXNoX3RvX3Nob3dfaW5mbyhzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqcHVzaF9pdGVtLCB2b2lkICpjYl9kYXRhKQogewogCXN0cnVjdCBzaG93X2luZm8gKnNob3dfaW5mbyA9IGNiX2RhdGE7CiAJc3RydWN0IHB1c2hfaW5mbyAqcHVzaF9pbmZvID0gcHVzaF9pdGVtLT51dGlsOwpAQCAtOTM3LDcgKzk2NSw3IEBACiAJcmV0dXJuIGNtcCA/IGNtcCA6IHN0cmNtcChhX3B1c2gtPmRlc3QsIGJfcHVzaC0+ZGVzdCk7CiB9CiAKLWludCBzaG93X3B1c2hfaW5mb19pdGVtKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtLCB2b2lkICpjYl9kYXRhKQorc3RhdGljIGludCBzaG93X3B1c2hfaW5mb19pdGVtKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtLCB2b2lkICpjYl9kYXRhKQogewogCXN0cnVjdCBzaG93X2luZm8gKnNob3dfaW5mbyA9IGNiX2RhdGE7CiAJc3RydWN0IHB1c2hfaW5mbyAqcHVzaF9pbmZvID0gaXRlbS0+dXRpbDsKQEAgLTk1NSw3ICs5ODMsNyBAQAogCQlzdGF0dXMgPSAidXAgdG8gZGF0ZSI7CiAJCWJyZWFrOwogCWNhc2UgUFVTSF9TVEFUVVNfRkFTVEZPUldBUkQ6Ci0JCXN0YXR1cyA9ICJmYXN0IGZvcndhcmRhYmxlIjsKKwkJc3RhdHVzID0gImZhc3QtZm9yd2FyZGFibGUiOwogCQlicmVhazsKIAljYXNlIFBVU0hfU1RBVFVTX09VVE9GREFURToKIAkJc3RhdHVzID0gImxvY2FsIG91dCBvZiBkYXRlIjsKQEAgLTk3OCw3ICsxMDA2LDYgQEAKIHsKIAlpbnQgbm9fcXVlcnkgPSAwLCByZXN1bHQgPSAwLCBxdWVyeV9mbGFnID0gMDsKIAlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKLQkJT1BUX0dST1VQKCJzaG93IHNwZWNpZmljIG9wdGlvbnMiKSwKIAkJT1BUX0JPT0xFQU4oJ24nLCBOVUxMLCAmbm9fcXVlcnksICJkbyBub3QgcXVlcnkgcmVtb3RlcyIpLAogCQlPUFRfRU5EKCkKIAl9OwpAQCAtOTg2LDcgKzEwMTMsOCBAQAogCXN0cnVjdCBzdHJpbmdfbGlzdCBpbmZvX2xpc3QgPSB7IE5VTEwsIDAsIDAsIDAgfTsKIAlzdHJ1Y3Qgc2hvd19pbmZvIGluZm87CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV91c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0aW9ucywgYnVpbHRpbl9yZW1vdGVfc2hvd191c2FnZSwKKwkJCSAgICAgMCk7CiAKIAlpZiAoYXJnYyA8IDEpCiAJCXJldHVybiBzaG93X2FsbCgpOwpAQCAtMTAwMCwxNSArMTAyOCwyNSBAQAogCWluZm8ubGlzdCA9ICZpbmZvX2xpc3Q7CiAJZm9yICg7IGFyZ2M7IGFyZ2MtLSwgYXJndisrKSB7CiAJCWludCBpOworCQljb25zdCBjaGFyICoqdXJsOworCQlpbnQgdXJsX25yOwogCiAJCWdldF9yZW1vdGVfcmVmX3N0YXRlcygqYXJndiwgJnN0YXRlcywgcXVlcnlfZmxhZyk7CiAKIAkJcHJpbnRmKCIqIHJlbW90ZSAlc1xuIiwgKmFyZ3YpOwotCQlpZiAoc3RhdGVzLnJlbW90ZS0+dXJsX25yKSB7Ci0JCQlmb3IgKGk9MDsgaSA8IHN0YXRlcy5yZW1vdGUtPnVybF9ucjsgaSsrKQotCQkJCXByaW50ZigiICBVUkw6ICVzXG4iLCBzdGF0ZXMucmVtb3RlLT51cmxbaV0pOwotCQl9IGVsc2UKLQkJCXByaW50ZigiICBVUkw6ICVzXG4iLCAiKG5vIFVSTCkiKTsKKwkJcHJpbnRmKCIgIEZldGNoIFVSTDogJXNcbiIsIHN0YXRlcy5yZW1vdGUtPnVybF9uciA+IDAgPworCQkJc3RhdGVzLnJlbW90ZS0+dXJsWzBdIDogIihubyBVUkwpIik7CisJCWlmIChzdGF0ZXMucmVtb3RlLT5wdXNodXJsX25yKSB7CisJCQl1cmwgPSBzdGF0ZXMucmVtb3RlLT5wdXNodXJsOworCQkJdXJsX25yID0gc3RhdGVzLnJlbW90ZS0+cHVzaHVybF9ucjsKKwkJfSBlbHNlIHsKKwkJCXVybCA9IHN0YXRlcy5yZW1vdGUtPnVybDsKKwkJCXVybF9uciA9IHN0YXRlcy5yZW1vdGUtPnVybF9ucjsKKwkJfQorCQlmb3IgKGk9MDsgaSA8IHVybF9ucjsgaSsrKQorCQkJcHJpbnRmKCIgIFB1c2ggIFVSTDogJXNcbiIsIHVybFtpXSk7CisJCWlmICghaSkKKwkJCXByaW50ZigiICBQdXNoICBVUkw6ICVzXG4iLCAiKG5vIFVSTCkiKTsKIAkJaWYgKG5vX3F1ZXJ5KQogCQkJcHJpbnRmKCIgIEhFQUQgYnJhbmNoOiAobm90IHF1ZXJpZWQpXG4iKTsKIAkJZWxzZSBpZiAoIXN0YXRlcy5oZWFkcy5ucikKQEAgLTEwNzIsMTQgKzExMTAsMTQgQEAKIAljaGFyICpoZWFkX25hbWUgPSBOVUxMOwogCiAJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7Ci0JCU9QVF9HUk9VUCgic2V0LWhlYWQgc3BlY2lmaWMgb3B0aW9ucyIpLAogCQlPUFRfQk9PTEVBTignYScsICJhdXRvIiwgJm9wdF9hLAogCQkJICAgICJzZXQgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIGFjY29yZGluZyB0byByZW1vdGUiKSwKIAkJT1BUX0JPT0xFQU4oJ2QnLCAiZGVsZXRlIiwgJm9wdF9kLAogCQkJICAgICJkZWxldGUgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIiksCiAJCU9QVF9FTkQoKQogCX07Ci0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgYnVpbHRpbl9yZW1vdGVfdXNhZ2UsIDApOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIE5VTEwsIG9wdGlvbnMsIGJ1aWx0aW5fcmVtb3RlX3NldGhlYWRfdXNhZ2UsCisJCQkgICAgIDApOwogCWlmIChhcmdjKQogCQlzdHJidWZfYWRkZigmYnVmLCAicmVmcy9yZW1vdGVzLyVzL0hFQUQiLCBhcmd2WzBdKTsKIApAQCAtMTEwNCw3ICsxMTQyLDcgQEAKIAkJaWYgKGRlbGV0ZV9yZWYoYnVmLmJ1ZiwgTlVMTCwgUkVGX05PREVSRUYpKQogCQkJcmVzdWx0IHw9IGVycm9yKCJDb3VsZCBub3QgZGVsZXRlICVzIiwgYnVmLmJ1Zik7CiAJfSBlbHNlCi0JCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JlbW90ZV91c2FnZSwgb3B0aW9ucyk7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JlbW90ZV9zZXRoZWFkX3VzYWdlLCBvcHRpb25zKTsKIAogCWlmIChoZWFkX25hbWUpIHsKIAkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKQEAgLTExMjgsMTUgKzExNjYsMTUgQEAKIHsKIAlpbnQgZHJ5X3J1biA9IDAsIHJlc3VsdCA9IDA7CiAJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7Ci0JCU9QVF9HUk9VUCgicHJ1bmUgc3BlY2lmaWMgb3B0aW9ucyIpLAogCQlPUFRfX0RSWV9SVU4oJmRyeV9ydW4pLAogCQlPUFRfRU5EKCkKIAl9OwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgYnVpbHRpbl9yZW1vdGVfdXNhZ2UsIDApOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIE5VTEwsIG9wdGlvbnMsIGJ1aWx0aW5fcmVtb3RlX3BydW5lX3VzYWdlLAorCQkJICAgICAwKTsKIAogCWlmIChhcmdjIDwgMSkKLQkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fcmVtb3RlX3VzYWdlLCBvcHRpb25zKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fcmVtb3RlX3BydW5lX3VzYWdlLCBvcHRpb25zKTsKIAogCWZvciAoOyBhcmdjOyBhcmdjLS0sIGFyZ3YrKykKIAkJcmVzdWx0IHw9IHBydW5lX3JlbW90ZSgqYXJndiwgZHJ5X3J1bik7CkBAIC0xMTcxLDEwOCArMTIwOSwxNzQgQEAKIAogCQlwcmludGYoIiAqIFslc10gJXNcbiIsIGRyeV9ydW4gPyAid291bGQgcHJ1bmUiIDogInBydW5lZCIsCiAJCSAgICAgICBhYmJyZXZfcmVmKHJlZm5hbWUsICJyZWZzL3JlbW90ZXMvIikpOwotCQl3YXJuX2RhbmdsaW5nX3N5bXJlZihkYW5nbGluZ19tc2csIHJlZm5hbWUpOworCQl3YXJuX2RhbmdsaW5nX3N5bXJlZihzdGRvdXQsIGRhbmdsaW5nX21zZywgcmVmbmFtZSk7CiAJfQogCiAJZnJlZV9yZW1vdGVfcmVmX3N0YXRlcygmc3RhdGVzKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW50IGdldF9vbmVfcmVtb3RlX2Zvcl91cGRhdGUoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCB2b2lkICpwcml2KQorc3RhdGljIGludCBnZXRfcmVtb3RlX2RlZmF1bHQoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqcHJpdikKIHsKLQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QgPSBwcml2OwotCWlmICghcmVtb3RlLT5za2lwX2RlZmF1bHRfdXBkYXRlKQotCQlzdHJpbmdfbGlzdF9hcHBlbmQocmVtb3RlLT5uYW1lLCBsaXN0KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RydWN0IHJlbW90ZV9ncm91cCB7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3Q7Ci19IHJlbW90ZV9ncm91cDsKLQotc3RhdGljIGludCBnZXRfcmVtb3RlX2dyb3VwKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKm51bV9oaXRzKQotewotCWlmICghcHJlZml4Y21wKGtleSwgInJlbW90ZXMuIikgJiYKLQkJCSFzdHJjbXAoa2V5ICsgOCwgcmVtb3RlX2dyb3VwLm5hbWUpKSB7Ci0JCS8qIHNwbGl0IGxpc3QgYnkgd2hpdGUgc3BhY2UgKi8KLQkJaW50IHNwYWNlID0gc3RyY3Nwbih2YWx1ZSwgIiBcdFxuIik7Ci0JCXdoaWxlICgqdmFsdWUpIHsKLQkJCWlmIChzcGFjZSA+IDEpIHsKLQkJCQlzdHJpbmdfbGlzdF9hcHBlbmQoeHN0cm5kdXAodmFsdWUsIHNwYWNlKSwKLQkJCQkJCXJlbW90ZV9ncm91cC5saXN0KTsKLQkJCQkrKyooKGludCAqKW51bV9oaXRzKTsKLQkJCX0KLQkJCXZhbHVlICs9IHNwYWNlICsgKHZhbHVlW3NwYWNlXSAhPSAnXDAnKTsKLQkJCXNwYWNlID0gc3RyY3Nwbih2YWx1ZSwgIiBcdFxuIik7Ci0JCX0KKwlpZiAoc3RyY21wKGtleSwgInJlbW90ZXMuZGVmYXVsdCIpID09IDApIHsKKwkJaW50ICpmb3VuZCA9IHByaXY7CisJCSpmb3VuZCA9IDE7CiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdXBkYXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKLQlpbnQgaSwgcmVzdWx0ID0gMCwgcHJ1bmUgPSAwOwotCXN0cnVjdCBzdHJpbmdfbGlzdCBsaXN0ID0geyBOVUxMLCAwLCAwLCAwIH07Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKmRlZmF1bHRfYXJndltdID0geyBOVUxMLCAiZGVmYXVsdCIsIE5VTEwgfTsKKwlpbnQgaSwgcHJ1bmUgPSAwOwogCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0gewotCQlPUFRfR1JPVVAoInVwZGF0ZSBzcGVjaWZpYyBvcHRpb25zIiksCiAJCU9QVF9CT09MRUFOKCdwJywgInBydW5lIiwgJnBydW5lLAogCQkJICAgICJwcnVuZSByZW1vdGVzIGFmdGVyIGZldGNoaW5nIiksCiAJCU9QVF9FTkQoKQogCX07CisJY29uc3QgY2hhciAqKmZldGNoX2FyZ3Y7CisJaW50IGZldGNoX2FyZ2MgPSAwOworCWludCBkZWZhdWx0X2RlZmluZWQgPSAwOwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgYnVpbHRpbl9yZW1vdGVfdXNhZ2UsCisJZmV0Y2hfYXJndiA9IHhtYWxsb2Moc2l6ZW9mKGNoYXIgKikgKiAoYXJnYys1KSk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV91cGRhdGVfdXNhZ2UsCiAJCQkgICAgIFBBUlNFX09QVF9LRUVQX0FSR1YwKTsKLQlpZiAoYXJnYyA8IDIpIHsKLQkJYXJnYyA9IDI7Ci0JCWFyZ3YgPSBkZWZhdWx0X2FyZ3Y7CisKKwlmZXRjaF9hcmd2W2ZldGNoX2FyZ2MrK10gPSAiZmV0Y2giOworCisJaWYgKHBydW5lKQorCQlmZXRjaF9hcmd2W2ZldGNoX2FyZ2MrK10gPSAiLS1wcnVuZSI7CisJaWYgKHZlcmJvc2UpCisJCWZldGNoX2FyZ3ZbZmV0Y2hfYXJnYysrXSA9ICItdiI7CisJZmV0Y2hfYXJndltmZXRjaF9hcmdjKytdID0gIi0tbXVsdGlwbGUiOworCWlmIChhcmdjIDwgMikKKwkJZmV0Y2hfYXJndltmZXRjaF9hcmdjKytdID0gImRlZmF1bHQiOworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCisJCWZldGNoX2FyZ3ZbZmV0Y2hfYXJnYysrXSA9IGFyZ3ZbaV07CisKKwlpZiAoc3RyY21wKGZldGNoX2FyZ3ZbZmV0Y2hfYXJnYy0xXSwgImRlZmF1bHQiKSA9PSAwKSB7CisJCWdpdF9jb25maWcoZ2V0X3JlbW90ZV9kZWZhdWx0LCAmZGVmYXVsdF9kZWZpbmVkKTsKKwkJaWYgKCFkZWZhdWx0X2RlZmluZWQpCisJCQlmZXRjaF9hcmd2W2ZldGNoX2FyZ2MtMV0gPSAiLS1hbGwiOwogCX0KIAotCXJlbW90ZV9ncm91cC5saXN0ID0gJmxpc3Q7Ci0JZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgewotCQlpbnQgZ3JvdXBzX2ZvdW5kID0gMDsKLQkJcmVtb3RlX2dyb3VwLm5hbWUgPSBhcmd2W2ldOwotCQlyZXN1bHQgPSBnaXRfY29uZmlnKGdldF9yZW1vdGVfZ3JvdXAsICZncm91cHNfZm91bmQpOwotCQlpZiAoIWdyb3Vwc19mb3VuZCAmJiAoaSAhPSAxIHx8IHN0cmNtcChhcmd2WzFdLCAiZGVmYXVsdCIpKSkgewotCQkJc3RydWN0IHJlbW90ZSAqcmVtb3RlOwotCQkJaWYgKCFyZW1vdGVfaXNfY29uZmlndXJlZChhcmd2W2ldKSkKLQkJCQlkaWUoIk5vIHN1Y2ggcmVtb3RlIG9yIHJlbW90ZSBncm91cDogJXMiLAotCQkJCSAgICBhcmd2W2ldKTsKLQkJCXJlbW90ZSA9IHJlbW90ZV9nZXQoYXJndltpXSk7Ci0JCQlzdHJpbmdfbGlzdF9hcHBlbmQocmVtb3RlLT5uYW1lLCByZW1vdGVfZ3JvdXAubGlzdCk7Ci0JCX0KKwlmZXRjaF9hcmd2W2ZldGNoX2FyZ2NdID0gTlVMTDsKKworCXJldHVybiBydW5fY29tbWFuZF92X29wdChmZXRjaF9hcmd2LCBSVU5fR0lUX0NNRCk7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3VybChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IGksIHB1c2hfbW9kZSA9IDAsIGFkZF9tb2RlID0gMCwgZGVsZXRlX21vZGUgPSAwOworCWludCBtYXRjaGVzID0gMCwgbmVnYXRpdmVfbWF0Y2hlcyA9IDA7CisJY29uc3QgY2hhciAqcmVtb3RlbmFtZSA9IE5VTEw7CisJY29uc3QgY2hhciAqbmV3dXJsID0gTlVMTDsKKwljb25zdCBjaGFyICpvbGR1cmwgPSBOVUxMOworCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKKwlyZWdleF90IG9sZF9yZWdleDsKKwljb25zdCBjaGFyICoqdXJsc2V0OworCWludCB1cmxzZXRfbnI7CisJc3RydWN0IHN0cmJ1ZiBuYW1lX2J1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTEVBTignXDAnLCAicHVzaCIsICZwdXNoX21vZGUsCisJCQkgICAgIm1hbmlwdWxhdGUgcHVzaCBVUkxzIiksCisJCU9QVF9CT09MRUFOKCdcMCcsICJhZGQiLCAmYWRkX21vZGUsCisJCQkgICAgImFkZCBVUkwiKSwKKwkJT1BUX0JPT0xFQU4oJ1wwJywgImRlbGV0ZSIsICZkZWxldGVfbW9kZSwKKwkJCSAgICAiZGVsZXRlIFVSTHMiKSwKKwkJT1BUX0VORCgpCisJfTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV91cGRhdGVfdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9LRUVQX0FSR1YwKTsKKworCWlmIChhZGRfbW9kZSAmJiBkZWxldGVfbW9kZSkKKwkJZGllKCItLWFkZCAtLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2UiKTsKKworCWlmIChhcmdjIDwgMyB8fCBhcmdjID4gNCB8fCAoKGFkZF9tb2RlIHx8IGRlbGV0ZV9tb2RlKSAmJiBhcmdjICE9IDMpKQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9yZW1vdGVfc2V0dXJsX3VzYWdlLCBvcHRpb25zKTsKKworCXJlbW90ZW5hbWUgPSBhcmd2WzFdOworCW5ld3VybCA9IGFyZ3ZbMl07CisJaWYgKGFyZ2MgPiAzKQorCQlvbGR1cmwgPSBhcmd2WzNdOworCisJaWYgKGRlbGV0ZV9tb2RlKQorCQlvbGR1cmwgPSBuZXd1cmw7CisKKwlpZiAoIXJlbW90ZV9pc19jb25maWd1cmVkKHJlbW90ZW5hbWUpKQorCQlkaWUoIk5vIHN1Y2ggcmVtb3RlICclcyciLCByZW1vdGVuYW1lKTsKKwlyZW1vdGUgPSByZW1vdGVfZ2V0KHJlbW90ZW5hbWUpOworCisJaWYgKHB1c2hfbW9kZSkgeworCQlzdHJidWZfYWRkZigmbmFtZV9idWYsICJyZW1vdGUuJXMucHVzaHVybCIsIHJlbW90ZW5hbWUpOworCQl1cmxzZXQgPSByZW1vdGUtPnB1c2h1cmw7CisJCXVybHNldF9uciA9IHJlbW90ZS0+cHVzaHVybF9ucjsKKwl9IGVsc2UgeworCQlzdHJidWZfYWRkZigmbmFtZV9idWYsICJyZW1vdGUuJXMudXJsIiwgcmVtb3RlbmFtZSk7CisJCXVybHNldCA9IHJlbW90ZS0+dXJsOworCQl1cmxzZXRfbnIgPSByZW1vdGUtPnVybF9ucjsKIAl9CiAKLQlpZiAoIXJlc3VsdCAmJiAhbGlzdC5uciAgJiYgYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgImRlZmF1bHQiKSkKLQkJcmVzdWx0ID0gZm9yX2VhY2hfcmVtb3RlKGdldF9vbmVfcmVtb3RlX2Zvcl91cGRhdGUsICZsaXN0KTsKLQotCWZvciAoaSA9IDA7IGkgPCBsaXN0Lm5yOyBpKyspIHsKLQkJaW50IGVyciA9IGZldGNoX3JlbW90ZShsaXN0Lml0ZW1zW2ldLnN0cmluZyk7Ci0JCXJlc3VsdCB8PSBlcnI7Ci0JCWlmICghZXJyICYmIHBydW5lKQotCQkJcmVzdWx0IHw9IHBydW5lX3JlbW90ZShsaXN0Lml0ZW1zW2ldLnN0cmluZywgMCk7CisJLyogU3BlY2lhbCBjYXNlcyB0aGF0IGFkZCBuZXcgZW50cnkuICovCisJaWYgKCghb2xkdXJsICYmICFkZWxldGVfbW9kZSkgfHwgYWRkX21vZGUpIHsKKwkJaWYgKGFkZF9tb2RlKQorCQkJZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIobmFtZV9idWYuYnVmLCBuZXd1cmwsCisJCQkJIl4kIiwgMCk7CisJCWVsc2UKKwkJCWdpdF9jb25maWdfc2V0KG5hbWVfYnVmLmJ1ZiwgbmV3dXJsKTsKKwkJc3RyYnVmX3JlbGVhc2UoJm5hbWVfYnVmKTsKKwkJcmV0dXJuIDA7CiAJfQogCi0JLyogYWxsIG5hbWVzIHdlcmUgc3RyZHVwKCllZCBvciBzdHJuZHVwKCllZCAqLwotCWxpc3Quc3RyZHVwX3N0cmluZ3MgPSAxOwotCXN0cmluZ19saXN0X2NsZWFyKCZsaXN0LCAwKTsKKwkvKiBPbGQgVVJMIHNwZWNpZmllZC4gRGVtYW5kIHRoYXQgb25lIG1hdGNoZXMuICovCisJaWYgKHJlZ2NvbXAoJm9sZF9yZWdleCwgb2xkdXJsLCBSRUdfRVhURU5ERUQpKQorCQlkaWUoIkludmFsaWQgb2xkIFVSTCBwYXR0ZXJuOiAlcyIsIG9sZHVybCk7CiAKLQlyZXR1cm4gcmVzdWx0OworCWZvciAoaSA9IDA7IGkgPCB1cmxzZXRfbnI7IGkrKykKKwkJaWYgKCFyZWdleGVjKCZvbGRfcmVnZXgsIHVybHNldFtpXSwgMCwgTlVMTCwgMCkpCisJCQltYXRjaGVzKys7CisJCWVsc2UKKwkJCW5lZ2F0aXZlX21hdGNoZXMrKzsKKwlpZiAoIWRlbGV0ZV9tb2RlICYmICFtYXRjaGVzKQorCQlkaWUoIk5vIHN1Y2ggVVJMIGZvdW5kOiAlcyIsIG9sZHVybCk7CisJaWYgKGRlbGV0ZV9tb2RlICYmICFuZWdhdGl2ZV9tYXRjaGVzICYmICFwdXNoX21vZGUpCisJCWRpZSgiV2lsbCBub3QgZGVsZXRlIGFsbCBub24tcHVzaCBVUkxzIik7CisKKwlyZWdmcmVlKCZvbGRfcmVnZXgpOworCisJaWYgKCFkZWxldGVfbW9kZSkKKwkJZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIobmFtZV9idWYuYnVmLCBuZXd1cmwsIG9sZHVybCwgMCk7CisJZWxzZQorCQlnaXRfY29uZmlnX3NldF9tdWx0aXZhcihuYW1lX2J1Zi5idWYsIE5VTEwsIG9sZHVybCwgMSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X29uZV9lbnRyeShzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIHZvaWQgKnByaXYpCiB7CiAJc3RydWN0IHN0cmluZ19saXN0ICpsaXN0ID0gcHJpdjsKKwlzdHJ1Y3Qgc3RyYnVmIHVybF9idWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICoqdXJsOworCWludCBpLCB1cmxfbnI7CiAKIAlpZiAocmVtb3RlLT51cmxfbnIgPiAwKSB7Ci0JCWludCBpOwotCi0JCWZvciAoaSA9IDA7IGkgPCByZW1vdGUtPnVybF9ucjsgaSsrKQotCQkJc3RyaW5nX2xpc3RfYXBwZW5kKHJlbW90ZS0+bmFtZSwgbGlzdCktPnV0aWwgPSAodm9pZCAqKXJlbW90ZS0+dXJsW2ldOworCQlzdHJidWZfYWRkZigmdXJsX2J1ZiwgIiVzIChmZXRjaCkiLCByZW1vdGUtPnVybFswXSk7CisJCXN0cmluZ19saXN0X2FwcGVuZChyZW1vdGUtPm5hbWUsIGxpc3QpLT51dGlsID0KKwkJCQlzdHJidWZfZGV0YWNoKCZ1cmxfYnVmLCBOVUxMKTsKIAl9IGVsc2UKIAkJc3RyaW5nX2xpc3RfYXBwZW5kKHJlbW90ZS0+bmFtZSwgbGlzdCktPnV0aWwgPSBOVUxMOworCWlmIChyZW1vdGUtPnB1c2h1cmxfbnIpIHsKKwkJdXJsID0gcmVtb3RlLT5wdXNodXJsOworCQl1cmxfbnIgPSByZW1vdGUtPnB1c2h1cmxfbnI7CisJfSBlbHNlIHsKKwkJdXJsID0gcmVtb3RlLT51cmw7CisJCXVybF9uciA9IHJlbW90ZS0+dXJsX25yOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgdXJsX25yOyBpKyspCisJeworCQlzdHJidWZfYWRkZigmdXJsX2J1ZiwgIiVzIChwdXNoKSIsIHVybFtpXSk7CisJCXN0cmluZ19saXN0X2FwcGVuZChyZW1vdGUtPm5hbWUsIGxpc3QpLT51dGlsID0KKwkJCQlzdHJidWZfZGV0YWNoKCZ1cmxfYnVmLCBOVUxMKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyODAsNyArMTM4NCwxMCBAQAogc3RhdGljIGludCBzaG93X2FsbCh2b2lkKQogewogCXN0cnVjdCBzdHJpbmdfbGlzdCBsaXN0ID0geyBOVUxMLCAwLCAwIH07Ci0JaW50IHJlc3VsdCA9IGZvcl9lYWNoX3JlbW90ZShnZXRfb25lX2VudHJ5LCAmbGlzdCk7CisJaW50IHJlc3VsdDsKKworCWxpc3Quc3RyZHVwX3N0cmluZ3MgPSAxOworCXJlc3VsdCA9IGZvcl9lYWNoX3JlbW90ZShnZXRfb25lX2VudHJ5LCAmbGlzdCk7CiAKIAlpZiAoIXJlc3VsdCkgewogCQlpbnQgaTsKQEAgLTEyOTgsMTggKzE0MDUsMTkgQEAKIAkJCX0KIAkJfQogCX0KKwlzdHJpbmdfbGlzdF9jbGVhcigmbGlzdCwgMSk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAogaW50IGNtZF9yZW1vdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CiAJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7Ci0JCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSksCisJCU9QVF9CT09MRUFOKCd2JywgInZlcmJvc2UiLCAmdmVyYm9zZSwgImJlIHZlcmJvc2U7IG11c3QgYmUgcGxhY2VkIGJlZm9yZSBhIHN1YmNvbW1hbmQiKSwKIAkJT1BUX0VORCgpCiAJfTsKIAlpbnQgcmVzdWx0OwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgYnVpbHRpbl9yZW1vdGVfdXNhZ2UsCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV91c2FnZSwKIAkJUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CiAKIAlpZiAoYXJnYyA8IDEpCkBAIC0xMzIyLDYgKzE0MzAsOCBAQAogCQlyZXN1bHQgPSBybShhcmdjLCBhcmd2KTsKIAllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJzZXQtaGVhZCIpKQogCQlyZXN1bHQgPSBzZXRfaGVhZChhcmdjLCBhcmd2KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJzZXQtdXJsIikpCisJCXJlc3VsdCA9IHNldF91cmwoYXJnYywgYXJndik7CiAJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAic2hvdyIpKQogCQlyZXN1bHQgPSBzaG93KGFyZ2MsIGFyZ3YpOwogCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInBydW5lIikpCmRpZmYgLS1naXQgYS9idWlsdGluLXJlcGxhY2UuYyBiL2J1aWx0aW4tcmVwbGFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlM2E2NDcKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluLXJlcGxhY2UuYwpAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIEJ1aWx0aW4gImdpdCByZXBsYWNlIgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBDaHJpc3RpYW4gQ291ZGVyIDxjaHJpc2Nvb2xAdHV4ZmFtaWx5Lm9yZz4KKyAqCisgKiBCYXNlZCBvbiBidWlsdGluLXRhZy5jIGJ5IEtyaXN0aWFuIEjDuGdzYmVyZyA8a3JoQHJlZGhhdC5jb20+CisgKiBhbmQgQ2FybG9zIFJpY2EgPGphc2FtcGxlckBnbWFpbC5jb20+IHRoYXQgd2FzIGl0c2VsZiBiYXNlZCBvbgorICogZ2l0LXRhZy5zaCBhbmQgbWt0YWcuYyBieSBMaW51cyBUb3J2YWxkcy4KKyAqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfcmVwbGFjZV91c2FnZVtdID0geworCSJnaXQgcmVwbGFjZSBbLWZdIDxvYmplY3Q+IDxyZXBsYWNlbWVudD4iLAorCSJnaXQgcmVwbGFjZSAtZCA8b2JqZWN0Pi4uLiIsCisJImdpdCByZXBsYWNlIC1sIFs8cGF0dGVybj5dIiwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IHNob3dfcmVmZXJlbmNlKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkgIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCWNvbnN0IGNoYXIgKnBhdHRlcm4gPSBjYl9kYXRhOworCisJaWYgKCFmbm1hdGNoKHBhdHRlcm4sIHJlZm5hbWUsIDApKQorCQlwcmludGYoIiVzXG4iLCByZWZuYW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxpc3RfcmVwbGFjZV9yZWZzKGNvbnN0IGNoYXIgKnBhdHRlcm4pCit7CisJaWYgKHBhdHRlcm4gPT0gTlVMTCkKKwkJcGF0dGVybiA9ICIqIjsKKworCWZvcl9lYWNoX3JlcGxhY2VfcmVmKHNob3dfcmVmZXJlbmNlLCAodm9pZCAqKSBwYXR0ZXJuKTsKKworCXJldHVybiAwOworfQorCit0eXBlZGVmIGludCAoKmVhY2hfcmVwbGFjZV9uYW1lX2ZuKShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpyZWYsCisJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworCitzdGF0aWMgaW50IGZvcl9lYWNoX3JlcGxhY2VfbmFtZShjb25zdCBjaGFyICoqYXJndiwgZWFjaF9yZXBsYWNlX25hbWVfZm4gZm4pCit7CisJY29uc3QgY2hhciAqKnA7CisJY2hhciByZWZbUEFUSF9NQVhdOworCWludCBoYWRfZXJyb3IgPSAwOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisKKwlmb3IgKHAgPSBhcmd2OyAqcDsgcCsrKSB7CisJCWlmIChzbnByaW50ZihyZWYsIHNpemVvZihyZWYpLCAicmVmcy9yZXBsYWNlLyVzIiwgKnApCisJCQkJCT49IHNpemVvZihyZWYpKSB7CisJCQllcnJvcigicmVwbGFjZSByZWYgbmFtZSB0b28gbG9uZzogJS4qcy4uLiIsIDUwLCAqcCk7CisJCQloYWRfZXJyb3IgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFyZXNvbHZlX3JlZihyZWYsIHNoYTEsIDEsIE5VTEwpKSB7CisJCQllcnJvcigicmVwbGFjZSByZWYgJyVzJyBub3QgZm91bmQuIiwgKnApOworCQkJaGFkX2Vycm9yID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChmbigqcCwgcmVmLCBzaGExKSkKKwkJCWhhZF9lcnJvciA9IDE7CisJfQorCXJldHVybiBoYWRfZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgZGVsZXRlX3JlcGxhY2VfcmVmKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnJlZiwKKwkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJaWYgKGRlbGV0ZV9yZWYocmVmLCBzaGExLCAwKSkKKwkJcmV0dXJuIDE7CisJcHJpbnRmKCJEZWxldGVkIHJlcGxhY2UgcmVmICclcydcbiIsIG5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlcGxhY2Vfb2JqZWN0KGNvbnN0IGNoYXIgKm9iamVjdF9yZWYsIGNvbnN0IGNoYXIgKnJlcGxhY2VfcmVmLAorCQkJICBpbnQgZm9yY2UpCit7CisJdW5zaWduZWQgY2hhciBvYmplY3RbMjBdLCBwcmV2WzIwXSwgcmVwbFsyMF07CisJY2hhciByZWZbUEFUSF9NQVhdOworCXN0cnVjdCByZWZfbG9jayAqbG9jazsKKworCWlmIChnZXRfc2hhMShvYmplY3RfcmVmLCBvYmplY3QpKQorCQlkaWUoIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIiwgb2JqZWN0X3JlZik7CisJaWYgKGdldF9zaGExKHJlcGxhY2VfcmVmLCByZXBsKSkKKwkJZGllKCJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIsIHJlcGxhY2VfcmVmKTsKKworCWlmIChzbnByaW50ZihyZWYsIHNpemVvZihyZWYpLAorCQkgICAgICJyZWZzL3JlcGxhY2UvJXMiLAorCQkgICAgIHNoYTFfdG9faGV4KG9iamVjdCkpID4gc2l6ZW9mKHJlZikgLSAxKQorCQlkaWUoInJlcGxhY2UgcmVmIG5hbWUgdG9vIGxvbmc6ICUuKnMuLi4iLCA1MCwgcmVmKTsKKwlpZiAoY2hlY2tfcmVmX2Zvcm1hdChyZWYpKQorCQlkaWUoIiclcycgaXMgbm90IGEgdmFsaWQgcmVmIG5hbWUuIiwgcmVmKTsKKworCWlmICghcmVzb2x2ZV9yZWYocmVmLCBwcmV2LCAxLCBOVUxMKSkKKwkJaGFzaGNscihwcmV2KTsKKwllbHNlIGlmICghZm9yY2UpCisJCWRpZSgicmVwbGFjZSByZWYgJyVzJyBhbHJlYWR5IGV4aXN0cyIsIHJlZik7CisKKwlsb2NrID0gbG9ja19hbnlfcmVmX2Zvcl91cGRhdGUocmVmLCBwcmV2LCAwKTsKKwlpZiAoIWxvY2spCisJCWRpZSgiJXM6IGNhbm5vdCBsb2NrIHRoZSByZWYiLCByZWYpOworCWlmICh3cml0ZV9yZWZfc2hhMShsb2NrLCByZXBsLCBOVUxMKSA8IDApCisJCWRpZSgiJXM6IGNhbm5vdCB1cGRhdGUgdGhlIHJlZiIsIHJlZik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9yZXBsYWNlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBsaXN0ID0gMCwgZGVsZXRlID0gMCwgZm9yY2UgPSAwOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTEVBTignbCcsIE5VTEwsICZsaXN0LCAibGlzdCByZXBsYWNlIHJlZnMiKSwKKwkJT1BUX0JPT0xFQU4oJ2QnLCBOVUxMLCAmZGVsZXRlLCAiZGVsZXRlIHJlcGxhY2UgcmVmcyIpLAorCQlPUFRfQk9PTEVBTignZicsIE5VTEwsICZmb3JjZSwgInJlcGxhY2UgdGhlIHJlZiBpZiBpdCBleGlzdHMiKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZ2l0X3JlcGxhY2VfdXNhZ2UsIDApOworCisJaWYgKGxpc3QgJiYgZGVsZXRlKQorCQl1c2FnZV9tc2dfb3B0KCItbCBhbmQgLWQgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiLAorCQkJICAgICAgZ2l0X3JlcGxhY2VfdXNhZ2UsIG9wdGlvbnMpOworCisJaWYgKGZvcmNlICYmIChsaXN0IHx8IGRlbGV0ZSkpCisJCXVzYWdlX21zZ19vcHQoIi1mIGNhbm5vdCBiZSB1c2VkIHdpdGggLWQgb3IgLWwiLAorCQkJICAgICAgZ2l0X3JlcGxhY2VfdXNhZ2UsIG9wdGlvbnMpOworCisJLyogRGVsZXRlIHJlZnMgKi8KKwlpZiAoZGVsZXRlKSB7CisJCWlmIChhcmdjIDwgMSkKKwkJCXVzYWdlX21zZ19vcHQoIi1kIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIsCisJCQkJICAgICAgZ2l0X3JlcGxhY2VfdXNhZ2UsIG9wdGlvbnMpOworCQlyZXR1cm4gZm9yX2VhY2hfcmVwbGFjZV9uYW1lKGFyZ3YsIGRlbGV0ZV9yZXBsYWNlX3JlZik7CisJfQorCisJLyogUmVwbGFjZSBvYmplY3QgKi8KKwlpZiAoIWxpc3QgJiYgYXJnYykgeworCQlpZiAoYXJnYyAhPSAyKQorCQkJdXNhZ2VfbXNnX29wdCgiYmFkIG51bWJlciBvZiBhcmd1bWVudHMiLAorCQkJCSAgICAgIGdpdF9yZXBsYWNlX3VzYWdlLCBvcHRpb25zKTsKKwkJcmV0dXJuIHJlcGxhY2Vfb2JqZWN0KGFyZ3ZbMF0sIGFyZ3ZbMV0sIGZvcmNlKTsKKwl9CisKKwkvKiBMaXN0IHJlZnMsIGV2ZW4gaWYgImxpc3QiIGlzIG5vdCBzZXQgKi8KKwlpZiAoYXJnYyA+IDEpCisJCXVzYWdlX21zZ19vcHQoIm9ubHkgb25lIHBhdHRlcm4gY2FuIGJlIGdpdmVuIHdpdGggLWwiLAorCQkJICAgICAgZ2l0X3JlcGxhY2VfdXNhZ2UsIG9wdGlvbnMpOworCWlmIChmb3JjZSkKKwkJdXNhZ2VfbXNnX29wdCgiLWYgbmVlZHMgc29tZSBhcmd1bWVudHMiLAorCQkJICAgICAgZ2l0X3JlcGxhY2VfdXNhZ2UsIG9wdGlvbnMpOworCisJcmV0dXJuIGxpc3RfcmVwbGFjZV9yZWZzKGFyZ3ZbMF0pOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1yZXJlcmUuYyBiL2J1aWx0aW4tcmVyZXJlLmMKaW5kZXggYWRmYjdiNS4uMzRmOWFjZSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1yZXJlcmUuYworKysgYi9idWlsdGluLXJlcmVyZS5jCkBAIC00OCw2ICs0OCw4IEBACiAKIAlnaXRfY29uZmlnKGdpdF9yZXJlcmVfZ2NfY29uZmlnLCBOVUxMKTsKIAlkaXIgPSBvcGVuZGlyKGdpdF9wYXRoKCJyci1jYWNoZSIpKTsKKwlpZiAoIWRpcikKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gb3BlbiByci1jYWNoZSBkaXJlY3RvcnkiKTsKIAl3aGlsZSAoKGUgPSByZWFkZGlyKGRpcikpKSB7CiAJCWlmIChpc19kb3Rfb3JfZG90ZG90KGUtPmRfbmFtZSkpCiAJCQljb250aW51ZTsKQEAgLTEwMSwxMiArMTAzLDI5IEBACiBpbnQgY21kX3JlcmVyZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKIAlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbWVyZ2VfcnIgPSB7IE5VTEwsIDAsIDAsIDEgfTsKLQlpbnQgaSwgZmQ7CisJaW50IGksIGZkLCBmbGFncyA9IDA7CiAKKwlpZiAoMiA8IGFyZ2MpIHsKKwkJaWYgKCFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCQl1c2FnZShnaXRfcmVyZXJlX3VzYWdlKTsKKwkJaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tcmVyZXJlLWF1dG91cGRhdGUiKSkKKwkJCWZsYWdzID0gUkVSRVJFX0FVVE9VUERBVEU7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tbm8tcmVyZXJlLWF1dG91cGRhdGUiKSkKKwkJCWZsYWdzID0gUkVSRVJFX05PQVVUT1VQREFURTsKKwkJaWYgKGZsYWdzKSB7CisJCQlhcmdjLS07CisJCQlhcmd2Kys7CisJCX0KKwl9CiAJaWYgKGFyZ2MgPCAyKQotCQlyZXR1cm4gcmVyZXJlKCk7CisJCXJldHVybiByZXJlcmUoZmxhZ3MpOwogCi0JZmQgPSBzZXR1cF9yZXJlcmUoJm1lcmdlX3JyKTsKKwlpZiAoIXN0cmNtcChhcmd2WzFdLCAiZm9yZ2V0IikpIHsKKwkJY29uc3QgY2hhciAqKnBhdGhzcGVjID0gZ2V0X3BhdGhzcGVjKHByZWZpeCwgYXJndiArIDIpOworCQlyZXR1cm4gcmVyZXJlX2ZvcmdldChwYXRoc3BlYyk7CisJfQorCisJZmQgPSBzZXR1cF9yZXJlcmUoJm1lcmdlX3JyLCBmbGFncyk7CiAJaWYgKGZkIDwgMCkKIAkJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4tcmVzZXQuYyBiL2J1aWx0aW4tcmVzZXQuYwppbmRleCA3ZTdlYmFiLi5hMTc0YTMxIDEwMDY0NAotLS0gYS9idWlsdGluLXJlc2V0LmMKKysrIGIvYnVpbHRpbi1yZXNldC5jCkBAIC0xOCwxMCArMTgsMTMgQEAKICNpbmNsdWRlICJ0cmVlLmgiCiAjaW5jbHVkZSAiYnJhbmNoLmgiCiAjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInVucGFjay10cmVlcy5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKIAogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfcmVzZXRfdXNhZ2VbXSA9IHsKIAkiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZV0gWy1xXSBbPGNvbW1pdD5dIiwKLQkiZ2l0IHJlc2V0IFstLW1peGVkXSA8Y29tbWl0PiBbLS1dIDxwYXRocz4uLi4iLAorCSJnaXQgcmVzZXQgWy1xXSA8Y29tbWl0PiBbLS1dIDxwYXRocz4uLi4iLAorCSJnaXQgcmVzZXQgLS1wYXRjaCBbPGNvbW1pdD5dIFstLV0gWzxwYXRocz4uLi5dIiwKIAlOVUxMCiB9OwogCkBAIC01NCwyNyArNTcsNDQgQEAKIAogc3RhdGljIGludCByZXNldF9pbmRleF9maWxlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCByZXNldF90eXBlLCBpbnQgcXVpZXQpCiB7Ci0JaW50IGkgPSAwOwotCWNvbnN0IGNoYXIgKmFyZ3NbNl07CisJaW50IG5yID0gMTsKKwlpbnQgbmV3ZmQ7CisJc3RydWN0IHRyZWVfZGVzYyBkZXNjWzJdOworCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyBvcHRzOworCXN0cnVjdCBsb2NrX2ZpbGUgKmxvY2sgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbG9ja19maWxlKSk7CiAKLQlhcmdzW2krK10gPSAicmVhZC10cmVlIjsKKwltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7CisJb3B0cy5oZWFkX2lkeCA9IDE7CisJb3B0cy5zcmNfaW5kZXggPSAmdGhlX2luZGV4OworCW9wdHMuZHN0X2luZGV4ID0gJnRoZV9pbmRleDsKKwlvcHRzLmZuID0gb25ld2F5X21lcmdlOworCW9wdHMubWVyZ2UgPSAxOwogCWlmICghcXVpZXQpCi0JCWFyZ3NbaSsrXSA9ICItdiI7CisJCW9wdHMudmVyYm9zZV91cGRhdGUgPSAxOwogCXN3aXRjaCAocmVzZXRfdHlwZSkgewogCWNhc2UgTUVSR0U6Ci0JCWFyZ3NbaSsrXSA9ICItdSI7Ci0JCWFyZ3NbaSsrXSA9ICItbSI7CisJCW9wdHMudXBkYXRlID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBIQVJEOgotCQlhcmdzW2krK10gPSAiLXUiOworCQlvcHRzLnVwZGF0ZSA9IDE7CiAJCS8qIGZhbGx0aHJvdWdoICovCiAJZGVmYXVsdDoKLQkJYXJnc1tpKytdID0gIi0tcmVzZXQiOworCQlvcHRzLnJlc2V0ID0gMTsKIAl9Ci0JYXJnc1tpKytdID0gc2hhMV90b19oZXgoc2hhMSk7Ci0JYXJnc1tpXSA9IE5VTEw7CiAKLQlyZXR1cm4gcnVuX2NvbW1hbmRfdl9vcHQoYXJncywgUlVOX0dJVF9DTUQpOworCW5ld2ZkID0gaG9sZF9sb2NrZWRfaW5kZXgobG9jaywgMSk7CisKKwlyZWFkX2NhY2hlX3VubWVyZ2VkKCk7CisKKwlpZiAoIWZpbGxfdHJlZV9kZXNjcmlwdG9yKGRlc2MgKyBuciAtIDEsIHNoYTEpKQorCQlyZXR1cm4gZXJyb3IoIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMuIiwgc2hhMV90b19oZXgoc2hhMSkpOworCWlmICh1bnBhY2tfdHJlZXMobnIsIGRlc2MsICZvcHRzKSkKKwkJcmV0dXJuIC0xOworCWlmICh3cml0ZV9jYWNoZShuZXdmZCwgYWN0aXZlX2NhY2hlLCBhY3RpdmVfbnIpIHx8CisJICAgIGNvbW1pdF9sb2NrZWRfaW5kZXgobG9jaykpCisJCXJldHVybiBlcnJvcigiQ291bGQgbm90IHdyaXRlIG5ldyBpbmRleCBmaWxlLiIpOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHByaW50X25ld19oZWFkX2xpbmUoc3RydWN0IGNvbW1pdCAqY29tbWl0KQpAQCAtMTA4LDcgKzEyOCw4IEBACiAJaWYgKHJlYWRfY2FjaGUoKSA8IDApCiAJCXJldHVybiBlcnJvcigiQ291bGQgbm90IHJlYWQgaW5kZXgiKTsKIAotCXJlc3VsdCA9IHJlZnJlc2hfY2FjaGUoZmxhZ3MpID8gMSA6IDA7CisJcmVzdWx0ID0gcmVmcmVzaF9pbmRleCgmdGhlX2luZGV4LCAoZmxhZ3MpLCBOVUxMLCBOVUxMLAorCQkJICAgICAgICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlc2V0OiIpID8gMSA6IDA7CiAJaWYgKHdyaXRlX2NhY2hlKGZkLCBhY3RpdmVfY2FjaGUsIGFjdGl2ZV9ucikgfHwKIAkJCWNvbW1pdF9sb2NrZWRfaW5kZXgoaW5kZXhfbG9jaykpCiAJCXJldHVybiBlcnJvciAoIkNvdWxkIG5vdCByZWZyZXNoIGluZGV4Iik7CkBAIC0xNDIsNiArMTYzLDE3IEBACiAJfQogfQogCitzdGF0aWMgaW50IGludGVyYWN0aXZlX3Jlc2V0KGNvbnN0IGNoYXIgKnJldmlzaW9uLCBjb25zdCBjaGFyICoqYXJndiwKKwkJCSAgICAgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNvbnN0IGNoYXIgKipwYXRoc3BlYyA9IE5VTEw7CisKKwlpZiAoKmFyZ3YpCisJCXBhdGhzcGVjID0gZ2V0X3BhdGhzcGVjKHByZWZpeCwgYXJndik7CisKKwlyZXR1cm4gcnVuX2FkZF9pbnRlcmFjdGl2ZShyZXZpc2lvbiwgIi0tcGF0Y2g9cmVzZXQiLCBwYXRoc3BlYyk7Cit9CisKIHN0YXRpYyBpbnQgcmVhZF9mcm9tX3RyZWUoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICoqYXJndiwKIAkJdW5zaWduZWQgY2hhciAqdHJlZV9zaGExLCBpbnQgcmVmcmVzaF9mbGFncykKIHsKQEAgLTE4MywxMiArMjE1LDE0IEBACiBpbnQgY21kX3Jlc2V0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQogewogCWludCBpID0gMCwgcmVzZXRfdHlwZSA9IE5PTkUsIHVwZGF0ZV9yZWZfc3RhdHVzID0gMCwgcXVpZXQgPSAwOworCWludCBwYXRjaF9tb2RlID0gMDsKIAljb25zdCBjaGFyICpyZXYgPSAiSEVBRCI7CiAJdW5zaWduZWQgY2hhciBzaGExWzIwXSwgKm9yaWcgPSBOVUxMLCBzaGExX29yaWdbMjBdLAogCQkJCSpvbGRfb3JpZyA9IE5VTEwsIHNoYTFfb2xkX29yaWdbMjBdOwogCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKIAljaGFyICpyZWZsb2dfYWN0aW9uLCBtc2dbMTAyNF07CiAJY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9fUVVJRVQoJnF1aWV0KSwKIAkJT1BUX1NFVF9JTlQoMCwgIm1peGVkIiwgJnJlc2V0X3R5cGUsCiAJCQkJCQkicmVzZXQgSEVBRCBhbmQgaW5kZXgiLCBNSVhFRCksCiAJCU9QVF9TRVRfSU5UKDAsICJzb2Z0IiwgJnJlc2V0X3R5cGUsICJyZXNldCBvbmx5IEhFQUQiLCBTT0ZUKSwKQEAgLTE5NiwxNCArMjMwLDEzIEBACiAJCQkJInJlc2V0IEhFQUQsIGluZGV4IGFuZCB3b3JraW5nIHRyZWUiLCBIQVJEKSwKIAkJT1BUX1NFVF9JTlQoMCwgIm1lcmdlIiwgJnJlc2V0X3R5cGUsCiAJCQkJInJlc2V0IEhFQUQsIGluZGV4IGFuZCB3b3JraW5nIHRyZWUiLCBNRVJHRSksCi0JCU9QVF9CT09MRUFOKCdxJywgTlVMTCwgJnF1aWV0LAotCQkJCSJkaXNhYmxlIHNob3dpbmcgbmV3IEhFQUQgaW4gaGFyZCByZXNldCBhbmQgcHJvZ3Jlc3MgbWVzc2FnZSIpLAorCQlPUFRfQk9PTEVBTigncCcsICJwYXRjaCIsICZwYXRjaF9tb2RlLCAic2VsZWN0IGh1bmtzIGludGVyYWN0aXZlbHkiKSwKIAkJT1BUX0VORCgpCiAJfTsKIAogCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGdpdF9yZXNldF91c2FnZSwKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGdpdF9yZXNldF91c2FnZSwKIAkJCQkJCVBBUlNFX09QVF9LRUVQX0RBU0hEQVNIKTsKIAlyZWZsb2dfYWN0aW9uID0gYXJnc190b19zdHIoYXJndik7CiAJc2V0ZW52KCJHSVRfUkVGTE9HX0FDVElPTiIsIHJlZmxvZ19hY3Rpb24sIDApOwpAQCAtMjUxLDYgKzI4NCwxMiBAQAogCQlkaWUoIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJy4iLCByZXYpOwogCWhhc2hjcHkoc2hhMSwgY29tbWl0LT5vYmplY3Quc2hhMSk7CiAKKwlpZiAocGF0Y2hfbW9kZSkgeworCQlpZiAocmVzZXRfdHlwZSAhPSBOT05FKQorCQkJZGllKCItLXBhdGNoIGlzIGluY29tcGF0aWJsZSB3aXRoIC0te2hhcmQsbWl4ZWQsc29mdH0iKTsKKwkJcmV0dXJuIGludGVyYWN0aXZlX3Jlc2V0KHJldiwgYXJndiArIGksIHByZWZpeCk7CisJfQorCiAJLyogZ2l0IHJlc2V0IHRyZWUgWy0tXSBwYXRocy4uLiBjYW4gYmUgdXNlZCB0bwogCSAqIGxvYWQgY2hvc2VuIHBhdGhzIGZyb20gdGhlIHRyZWUgaW50byB0aGUgaW5kZXggd2l0aG91dAogCSAqIGFmZmVjdGluZyB0aGUgd29ya2luZyB0cmVlIG5vciBIRUFELiAqLwpAQCAtMjYxLDEzICszMDAsMTcgQEAKIAkJCWRpZSgiQ2Fubm90IGRvICVzIHJlc2V0IHdpdGggcGF0aHMuIiwKIAkJCQkJcmVzZXRfdHlwZV9uYW1lc1tyZXNldF90eXBlXSk7CiAJCXJldHVybiByZWFkX2Zyb21fdHJlZShwcmVmaXgsIGFyZ3YgKyBpLCBzaGExLAotCQkJCXF1aWV0ID8gUkVGUkVTSF9RVUlFVCA6IFJFRlJFU0hfU0FZX0NIQU5HRUQpOworCQkJCXF1aWV0ID8gUkVGUkVTSF9RVUlFVCA6IFJFRlJFU0hfSU5fUE9SQ0VMQUlOKTsKIAl9CiAJaWYgKHJlc2V0X3R5cGUgPT0gTk9ORSkKIAkJcmVzZXRfdHlwZSA9IE1JWEVEOyAvKiBieSBkZWZhdWx0ICovCiAKLQlpZiAocmVzZXRfdHlwZSA9PSBIQVJEICYmIGlzX2JhcmVfcmVwb3NpdG9yeSgpKQotCQlkaWUoImhhcmQgcmVzZXQgbWFrZXMgbm8gc2Vuc2UgaW4gYSBiYXJlIHJlcG9zaXRvcnkiKTsKKwlpZiAocmVzZXRfdHlwZSA9PSBIQVJEIHx8IHJlc2V0X3R5cGUgPT0gTUVSR0UpCisJCXNldHVwX3dvcmtfdHJlZSgpOworCisJaWYgKHJlc2V0X3R5cGUgPT0gTUlYRUQgJiYgaXNfYmFyZV9yZXBvc2l0b3J5KCkpCisJCWRpZSgiJXMgcmVzZXQgaXMgbm90IGFsbG93ZWQgaW4gYSBiYXJlIHJlcG9zaXRvcnkiLAorCQkgICAgcmVzZXRfdHlwZV9uYW1lc1tyZXNldF90eXBlXSk7CiAKIAkvKiBTb2Z0IHJlc2V0IGRvZXMgbm90IHRvdWNoIHRoZSBpbmRleCBmaWxlIG5vciB0aGUgd29ya2luZyB0cmVlCiAJICogYXQgYWxsLCBidXQgcmVxdWlyZXMgdGhlbSBpbiBhIGdvb2Qgb3JkZXIuICBPdGhlciByZXNldHMgcmVzZXQKQEAgLTMwMiw3ICszNDUsNyBAQAogCQlicmVhazsKIAljYXNlIE1JWEVEOiAvKiBSZXBvcnQgd2hhdCBoYXMgbm90IGJlZW4gdXBkYXRlZC4gKi8KIAkJdXBkYXRlX2luZGV4X3JlZnJlc2goMCwgTlVMTCwKLQkJCQlxdWlldCA/IFJFRlJFU0hfUVVJRVQgOiBSRUZSRVNIX1NBWV9DSEFOR0VEKTsKKwkJCQlxdWlldCA/IFJFRlJFU0hfUVVJRVQgOiBSRUZSRVNIX0lOX1BPUkNFTEFJTik7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvYnVpbHRpbi1yZXYtbGlzdC5jIGIvYnVpbHRpbi1yZXYtbGlzdC5jCmluZGV4IDM4YThmMjMuLjU2NzkxNzAgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tcmV2LWxpc3QuYworKysgYi9idWlsdGluLXJldi1saXN0LmMKQEAgLTk2LDkgKzk2LDEwIEBACiAKIAlpZiAocmV2cy0+dmVyYm9zZV9oZWFkZXIgJiYgY29tbWl0LT5idWZmZXIpIHsKIAkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKLQkJcHJldHR5X3ByaW50X2NvbW1pdChyZXZzLT5jb21taXRfZm9ybWF0LCBjb21taXQsCi0JCQkJICAgICZidWYsIHJldnMtPmFiYnJldiwgTlVMTCwgTlVMTCwKLQkJCQkgICAgcmV2cy0+ZGF0ZV9tb2RlLCAwKTsKKwkJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IGN0eCA9IHswfTsKKwkJY3R4LmFiYnJldiA9IHJldnMtPmFiYnJldjsKKwkJY3R4LmRhdGVfbW9kZSA9IHJldnMtPmRhdGVfbW9kZTsKKwkJcHJldHR5X3ByaW50X2NvbW1pdChyZXZzLT5jb21taXRfZm9ybWF0LCBjb21taXQsICZidWYsICZjdHgpOwogCQlpZiAocmV2cy0+Z3JhcGgpIHsKIAkJCWlmIChidWYubGVuKSB7CiAJCQkJaWYgKHJldnMtPmNvbW1pdF9mb3JtYXQgIT0gQ01JVF9GTVRfT05FTElORSkKQEAgLTIxMSw3ICsyMTIsNyBAQAogICoKICAqIGFuZCBQKDJebiArIHgpIDwgMC41IG1lYW5zIDJebiA8IDN4CiAgKi8KLXN0YXRpYyBpbnQgZXN0aW1hdGVfYmlzZWN0X3N0ZXBzKGludCBhbGwpCitpbnQgZXN0aW1hdGVfYmlzZWN0X3N0ZXBzKGludCBhbGwpCiB7CiAJaW50IG4sIHgsIGU7CiAKQEAgLTIyNSwyNyArMjI2LDQ2IEBACiAJcmV0dXJuIChlIDwgMyAqIHgpID8gbiA6IG4gLSAxOwogfQogCi1zdGF0aWMgdm9pZCBzaG93X3RyaWVkX3JldnMoc3RydWN0IGNvbW1pdF9saXN0ICp0cmllZCwgaW50IHN0cmluZ2VkKQordm9pZCBwcmludF9jb21taXRfbGlzdChzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsCisJCSAgICAgICBjb25zdCBjaGFyICpmb3JtYXRfY3VyLAorCQkgICAgICAgY29uc3QgY2hhciAqZm9ybWF0X2xhc3QpCiB7Ci0JcHJpbnRmKCJiaXNlY3RfdHJpZWQ9JyIpOwotCWZvciAoO3RyaWVkOyB0cmllZCA9IHRyaWVkLT5uZXh0KSB7Ci0JCWNoYXIgKmZvcm1hdCA9IHRyaWVkLT5uZXh0ID8gIiVzfCIgOiAiJXMiOwotCQlwcmludGYoZm9ybWF0LCBzaGExX3RvX2hleCh0cmllZC0+aXRlbS0+b2JqZWN0LnNoYTEpKTsKKwlmb3IgKCA7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KSB7CisJCWNvbnN0IGNoYXIgKmZvcm1hdCA9IGxpc3QtPm5leHQgPyBmb3JtYXRfY3VyIDogZm9ybWF0X2xhc3Q7CisJCXByaW50Zihmb3JtYXQsIHNoYTFfdG9faGV4KGxpc3QtPml0ZW0tPm9iamVjdC5zaGExKSk7CiAJfQotCXByaW50ZihzdHJpbmdlZCA/ICInICYmXG4iIDogIidcbiIpOwogfQogCi1pbnQgc2hvd19iaXNlY3RfdmFycyhzdHJ1Y3QgcmV2X2xpc3RfaW5mbyAqaW5mbywgaW50IHJlYWNoZXMsIGludCBhbGwpCitzdGF0aWMgdm9pZCBzaG93X3RyaWVkX3JldnMoc3RydWN0IGNvbW1pdF9saXN0ICp0cmllZCkKK3sKKwlwcmludGYoImJpc2VjdF90cmllZD0nIik7CisJcHJpbnRfY29tbWl0X2xpc3QodHJpZWQsICIlc3wiLCAiJXMiKTsKKwlwcmludGYoIidcbiIpOworfQorCitzdGF0aWMgdm9pZCBwcmludF92YXJfc3RyKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsKQoreworCXByaW50ZigiJXM9JyVzJ1xuIiwgdmFyLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBwcmludF92YXJfaW50KGNvbnN0IGNoYXIgKnZhciwgaW50IHZhbCkKK3sKKwlwcmludGYoIiVzPSVkXG4iLCB2YXIsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19iaXNlY3RfdmFycyhzdHJ1Y3QgcmV2X2xpc3RfaW5mbyAqaW5mbywgaW50IHJlYWNoZXMsIGludCBhbGwpCiB7CiAJaW50IGNudCwgZmxhZ3MgPSBpbmZvLT5iaXNlY3Rfc2hvd19mbGFnczsKLQljaGFyIGhleFs0MV0gPSAiIiwgKmZvcm1hdDsKKwljaGFyIGhleFs0MV0gPSAiIjsKIAlzdHJ1Y3QgY29tbWl0X2xpc3QgKnRyaWVkOwogCXN0cnVjdCByZXZfaW5mbyAqcmV2cyA9IGluZm8tPnJldnM7CiAKIAlpZiAoIXJldnMtPmNvbW1pdHMgJiYgIShmbGFncyAmIEJJU0VDVF9TSE9XX1RSSUVEKSkKIAkJcmV0dXJuIDE7CiAKLQlyZXZzLT5jb21taXRzID0gZmlsdGVyX3NraXBwZWQocmV2cy0+Y29tbWl0cywgJnRyaWVkLCBmbGFncyAmIEJJU0VDVF9TSE9XX0FMTCk7CisJcmV2cy0+Y29tbWl0cyA9IGZpbHRlcl9za2lwcGVkKHJldnMtPmNvbW1pdHMsICZ0cmllZCwKKwkJCQkgICAgICAgZmxhZ3MgJiBCSVNFQ1RfU0hPV19BTEwsCisJCQkJICAgICAgIE5VTEwsIE5VTEwpOwogCiAJLyoKIAkgKiByZXZzLT5jb21taXRzIGNhbiByZWFjaCAicmVhY2hlcyIgY29tbWl0cyBhbW9uZwpAQCAtMjY5LDI4ICsyODksMTQgQEAKIAl9CiAKIAlpZiAoZmxhZ3MgJiBCSVNFQ1RfU0hPV19UUklFRCkKLQkJc2hvd190cmllZF9yZXZzKHRyaWVkLCBmbGFncyAmIEJJU0VDVF9TSE9XX1NUUklOR0VEKTsKLQlmb3JtYXQgPSAoZmxhZ3MgJiBCSVNFQ1RfU0hPV19TVFJJTkdFRCkgPwotCQkiYmlzZWN0X3Jldj0lcyAmJlxuIgotCQkiYmlzZWN0X25yPSVkICYmXG4iCi0JCSJiaXNlY3RfZ29vZD0lZCAmJlxuIgotCQkiYmlzZWN0X2JhZD0lZCAmJlxuIgotCQkiYmlzZWN0X2FsbD0lZCAmJlxuIgotCQkiYmlzZWN0X3N0ZXBzPSVkXG4iCi0JCToKLQkJImJpc2VjdF9yZXY9JXNcbiIKLQkJImJpc2VjdF9ucj0lZFxuIgotCQkiYmlzZWN0X2dvb2Q9JWRcbiIKLQkJImJpc2VjdF9iYWQ9JWRcbiIKLQkJImJpc2VjdF9hbGw9JWRcbiIKLQkJImJpc2VjdF9zdGVwcz0lZFxuIjsKLQlwcmludGYoZm9ybWF0LAotCSAgICAgICBoZXgsCi0JICAgICAgIGNudCAtIDEsCi0JICAgICAgIGFsbCAtIHJlYWNoZXMgLSAxLAotCSAgICAgICByZWFjaGVzIC0gMSwKLQkgICAgICAgYWxsLAotCSAgICAgICBlc3RpbWF0ZV9iaXNlY3Rfc3RlcHMoYWxsKSk7CisJCXNob3dfdHJpZWRfcmV2cyh0cmllZCk7CisKKwlwcmludF92YXJfc3RyKCJiaXNlY3RfcmV2IiwgaGV4KTsKKwlwcmludF92YXJfaW50KCJiaXNlY3RfbnIiLCBjbnQgLSAxKTsKKwlwcmludF92YXJfaW50KCJiaXNlY3RfZ29vZCIsIGFsbCAtIHJlYWNoZXMgLSAxKTsKKwlwcmludF92YXJfaW50KCJiaXNlY3RfYmFkIiwgcmVhY2hlcyAtIDEpOworCXByaW50X3Zhcl9pbnQoImJpc2VjdF9hbGwiLCBhbGwpOworCXByaW50X3Zhcl9pbnQoImJpc2VjdF9zdGVwcyIsIGVzdGltYXRlX2Jpc2VjdF9zdGVwcyhhbGwpKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzAwLDcgKzMwNiw2IEBACiAJc3RydWN0IHJldl9pbmZvIHJldnM7CiAJc3RydWN0IHJldl9saXN0X2luZm8gaW5mbzsKIAlpbnQgaTsKLQlpbnQgcmVhZF9mcm9tX3N0ZGluID0gMDsKIAlpbnQgYmlzZWN0X2xpc3QgPSAwOwogCWludCBiaXNlY3Rfc2hvd192YXJzID0gMDsKIAlpbnQgYmlzZWN0X2ZpbmRfYWxsID0gMDsKQEAgLTMxNCw4ICszMTksMTAgQEAKIAogCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKIAlpbmZvLnJldnMgPSAmcmV2czsKKwlpZiAocmV2cy5iaXNlY3QpCisJCWJpc2VjdF9saXN0ID0gMTsKIAotCXF1aWV0ID0gRElGRl9PUFRfVFNUKCZyZXZzLmRpZmZvcHQsIFFVSUVUKTsKKwlxdWlldCA9IERJRkZfT1BUX1RTVCgmcmV2cy5kaWZmb3B0LCBRVUlDSyk7CiAJZm9yIChpID0gMSA7IGkgPCBhcmdjOyBpKyspIHsKIAkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKIApAQCAtMzQzLDEyICszNTAsNiBAQAogCQkJYmlzZWN0X3Nob3dfdmFycyA9IDE7CiAJCQljb250aW51ZTsKIAkJfQotCQlpZiAoIXN0cmNtcChhcmcsICItLXN0ZGluIikpIHsKLQkJCWlmIChyZWFkX2Zyb21fc3RkaW4rKykKLQkJCQlkaWUoIi0tc3RkaW4gZ2l2ZW4gdHdpY2U/Iik7Ci0JCQlyZWFkX3JldmlzaW9uc19mcm9tX3N0ZGluKCZyZXZzKTsKLQkJCWNvbnRpbnVlOwotCQl9CiAJCXVzYWdlKHJldl9saXN0X3VzYWdlKTsKIAogCX0KQEAgLTM3MCw4ICszNzEsOSBAQAogCSAgICByZXZzLmRpZmYpCiAJCXVzYWdlKHJldl9saXN0X3VzYWdlKTsKIAotCXNhdmVfY29tbWl0X2J1ZmZlciA9IHJldnMudmVyYm9zZV9oZWFkZXIgfHwKLQkJcmV2cy5ncmVwX2ZpbHRlci5wYXR0ZXJuX2xpc3Q7CisJc2F2ZV9jb21taXRfYnVmZmVyID0gKHJldnMudmVyYm9zZV9oZWFkZXIgfHwKKwkJCSAgICAgIHJldnMuZ3JlcF9maWx0ZXIucGF0dGVybl9saXN0IHx8CisJCQkgICAgICByZXZzLmdyZXBfZmlsdGVyLmhlYWRlcl9saXN0KTsKIAlpZiAoYmlzZWN0X2xpc3QpCiAJCXJldnMubGltaXRlZCA9IDE7CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4tcmV2LXBhcnNlLmMgYi9idWlsdGluLXJldi1wYXJzZS5jCmluZGV4IDIyYzZkNmEuLmI3NmYyMDUgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tcmV2LXBhcnNlLmMKKysrIGIvYnVpbHRpbi1yZXYtcGFyc2UuYwpAQCAtNDEsNiArNDEsNyBAQAogCQkiLS1hbGwiLAogCQkiLS1iaXNlY3QiLAogCQkiLS1kZW5zZSIsCisJCSItLWJyYW5jaGVzPSIsCiAJCSItLWJyYW5jaGVzIiwKIAkJIi0taGVhZGVyIiwKIAkJIi0tbWF4LWFnZT0iLApAQCAtNTEsOCArNTIsMTEgQEAKIAkJIi0tb2JqZWN0cy1lZGdlIiwKIAkJIi0tcGFyZW50cyIsCiAJCSItLXByZXR0eSIsCisJCSItLXJlbW90ZXM9IiwKIAkJIi0tcmVtb3RlcyIsCisJCSItLWdsb2I9IiwKIAkJIi0tc3BhcnNlIiwKKwkJIi0tdGFncz0iLAogCQkiLS10YWdzIiwKIAkJIi0tdG9wby1vcmRlciIsCiAJCSItLWRhdGUtb3JkZXIiLApAQCAtMTgwLDYgKzE4NCwxMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGFudGlfcmVmZXJlbmNlKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXNob3dfcmV2KFJFVkVSU0VELCBzaGExLCByZWZuYW1lKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgc2hvd19kYXRlc3RyaW5nKGNvbnN0IGNoYXIgKmZsYWcsIGNvbnN0IGNoYXIgKmRhdGVzdHIpCiB7CiAJc3RhdGljIGNoYXIgYnVmZmVyWzEwMF07CkBAIC0zMDEsNyArMzExLDcgQEAKIAogc3RhdGljIGludCBjbWRfcGFyc2VvcHQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7Ci0Jc3RhdGljIGludCBrZWVwX2Rhc2hkYXNoID0gMDsKKwlzdGF0aWMgaW50IGtlZXBfZGFzaGRhc2ggPSAwLCBzdG9wX2F0X25vbl9vcHRpb24gPSAwOwogCXN0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgcGFyc2VvcHRfdXNhZ2VbXSA9IHsKIAkJImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbb3B0aW9uc10gLS0gWzxhcmdzPi4uLl0iLAogCQlOVUxMCkBAIC0zMDksNiArMzE5LDkgQEAKIAlzdGF0aWMgc3RydWN0IG9wdGlvbiBwYXJzZW9wdF9vcHRzW10gPSB7CiAJCU9QVF9CT09MRUFOKDAsICJrZWVwLWRhc2hkYXNoIiwgJmtlZXBfZGFzaGRhc2gsCiAJCQkJCSJrZWVwIHRoZSBgLS1gIHBhc3NlZCBhcyBhbiBhcmciKSwKKwkJT1BUX0JPT0xFQU4oMCwgInN0b3AtYXQtbm9uLW9wdGlvbiIsICZzdG9wX2F0X25vbl9vcHRpb24sCisJCQkJCSJzdG9wIHBhcnNpbmcgYWZ0ZXIgdGhlICIKKwkJCQkJImZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQiKSwKIAkJT1BUX0VORCgpLAogCX07CiAKQEAgLTMxOCw3ICszMzEsNyBAQAogCWludCBvbmIgPSAwLCBvc3ogPSAwLCB1bmIgPSAwLCB1c3ogPSAwOwogCiAJc3RyYnVmX2FkZHN0cigmcGFyc2VkLCAic2V0IC0tIik7Ci0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcGFyc2VvcHRfb3B0cywgcGFyc2VvcHRfdXNhZ2UsCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBwYXJzZW9wdF9vcHRzLCBwYXJzZW9wdF91c2FnZSwKIAkgICAgICAgICAgICAgICAgICAgICBQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCk7CiAJaWYgKGFyZ2MgPCAxIHx8IHN0cmNtcChhcmd2WzBdLCAiLS0iKSkKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKHBhcnNlb3B0X3VzYWdlLCBwYXJzZW9wdF9vcHRzKTsKQEAgLTM5Myw4ICs0MDYsOSBAQAogCS8qIHB1dCBhbiBPUFRfRU5EKCkgKi8KIAlBTExPQ19HUk9XKG9wdHMsIG9uYiArIDEsIG9zeik7CiAJbWVtc2V0KG9wdHMgKyBvbmIsIDAsIHNpemVvZihvcHRzW29uYl0pKTsKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRzLCB1c2FnZSwKLQkgICAgICAgICAgICAgICAgICAgICBrZWVwX2Rhc2hkYXNoID8gUEFSU0VfT1BUX0tFRVBfREFTSERBU0ggOiAwKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdHMsIHVzYWdlLAorCQkJa2VlcF9kYXNoZGFzaCA/IFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIIDogMCB8CisJCQlzdG9wX2F0X25vbl9vcHRpb24gPyBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OIDogMCk7CiAKIAlzdHJidWZfYWRkZigmcGFyc2VkLCAiIC0tIik7CiAJc3FfcXVvdGVfYXJndigmcGFyc2VkLCBhcmd2LCAwKTsKQEAgLTQwMiw2ICs0MTYsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBjbWRfc3FfcXVvdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoYXJnYykKKwkJc3FfcXVvdGVfYXJndigmYnVmLCBhcmd2LCAwKTsKKwlwcmludGYoIiVzXG4iLCBidWYuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBkaWVfbm9fc2luZ2xlX3JldihpbnQgcXVpZXQpCiB7CiAJaWYgKHF1aWV0KQpAQCAtNDEwLDYgKzQzNiwxMyBAQAogCQlkaWUoIk5lZWRlZCBhIHNpbmdsZSByZXZpc2lvbiIpOwogfQogCitzdGF0aWMgY29uc3QgY2hhciBidWlsdGluX3Jldl9wYXJzZV91c2FnZVtdID0KKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgW29wdGlvbnNdIC0tIFs8YXJncz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBbPGFyZz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgW29wdGlvbnNdIFs8YXJnPi4uLl1cbiIKKyJcbiIKKyJSdW4gXCJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLWhcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgZmlyc3QgdXNhZ2UuIjsKKwogaW50IGNtZF9yZXZfcGFyc2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CiAJaW50IGksIGFzX2lzID0gMCwgdmVyaWZ5ID0gMCwgcXVpZXQgPSAwLCByZXZzX2NvdW50ID0gMCwgdHlwZSA9IDA7CkBAIC00MTksNiArNDUyLDE5IEBACiAJaWYgKGFyZ2MgPiAxICYmICFzdHJjbXAoIi0tcGFyc2VvcHQiLCBhcmd2WzFdKSkKIAkJcmV0dXJuIGNtZF9wYXJzZW9wdChhcmdjIC0gMSwgYXJndiArIDEsIHByZWZpeCk7CiAKKwlpZiAoYXJnYyA+IDEgJiYgIXN0cmNtcCgiLS1zcS1xdW90ZSIsIGFyZ3ZbMV0pKQorCQlyZXR1cm4gY21kX3NxX3F1b3RlKGFyZ2MgLSAyLCBhcmd2ICsgMik7CisKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoIi0tbG9jYWwtZW52LXZhcnMiLCBhcmd2WzFdKSkgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgbG9jYWxfcmVwb19lbnZbaV07IGkrKykKKwkJCXByaW50ZigiJXNcbiIsIGxvY2FsX3JlcG9fZW52W2ldKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGFyZ2MgPiAxICYmICFzdHJjbXAoIi1oIiwgYXJndlsxXSkpCisJCXVzYWdlKGJ1aWx0aW5fcmV2X3BhcnNlX3VzYWdlKTsKKwogCXByZWZpeCA9IHNldHVwX2dpdF9kaXJlY3RvcnkoKTsKIAlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CiAJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgewpAQCAtNTI5LDE4ICs1NzUsNDggQEAKIAkJCQlmb3JfZWFjaF9yZWYoc2hvd19yZWZlcmVuY2UsIE5VTEwpOwogCQkJCWNvbnRpbnVlOwogCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1iaXNlY3QiKSkgeworCQkJCWZvcl9lYWNoX3JlZl9pbigicmVmcy9iaXNlY3QvYmFkIiwgc2hvd19yZWZlcmVuY2UsIE5VTEwpOworCQkJCWZvcl9lYWNoX3JlZl9pbigicmVmcy9iaXNlY3QvZ29vZCIsIGFudGlfcmVmZXJlbmNlLCBOVUxMKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghcHJlZml4Y21wKGFyZywgIi0tYnJhbmNoZXM9IikpIHsKKwkJCQlmb3JfZWFjaF9nbG9iX3JlZl9pbihzaG93X3JlZmVyZW5jZSwgYXJnICsgMTEsCisJCQkJCSJyZWZzL2hlYWRzLyIsIE5VTEwpOworCQkJCWNvbnRpbnVlOworCQkJfQogCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1icmFuY2hlcyIpKSB7CiAJCQkJZm9yX2VhY2hfYnJhbmNoX3JlZihzaG93X3JlZmVyZW5jZSwgTlVMTCk7CiAJCQkJY29udGludWU7CiAJCQl9CisJCQlpZiAoIXByZWZpeGNtcChhcmcsICItLXRhZ3M9IikpIHsKKwkJCQlmb3JfZWFjaF9nbG9iX3JlZl9pbihzaG93X3JlZmVyZW5jZSwgYXJnICsgNywKKwkJCQkJInJlZnMvdGFncy8iLCBOVUxMKTsKKwkJCQljb250aW51ZTsKKwkJCX0KIAkJCWlmICghc3RyY21wKGFyZywgIi0tdGFncyIpKSB7CiAJCQkJZm9yX2VhY2hfdGFnX3JlZihzaG93X3JlZmVyZW5jZSwgTlVMTCk7CiAJCQkJY29udGludWU7CiAJCQl9CisJCQlpZiAoIXByZWZpeGNtcChhcmcsICItLWdsb2I9IikpIHsKKwkJCQlmb3JfZWFjaF9nbG9iX3JlZihzaG93X3JlZmVyZW5jZSwgYXJnICsgNywgTlVMTCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXByZWZpeGNtcChhcmcsICItLXJlbW90ZXM9IikpIHsKKwkJCQlmb3JfZWFjaF9nbG9iX3JlZl9pbihzaG93X3JlZmVyZW5jZSwgYXJnICsgMTAsCisJCQkJCSJyZWZzL3JlbW90ZXMvIiwgTlVMTCk7CisJCQkJY29udGludWU7CisJCQl9CiAJCQlpZiAoIXN0cmNtcChhcmcsICItLXJlbW90ZXMiKSkgewogCQkJCWZvcl9lYWNoX3JlbW90ZV9yZWYoc2hvd19yZWZlcmVuY2UsIE5VTEwpOwogCQkJCWNvbnRpbnVlOwogCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zaG93LXRvcGxldmVsIikpIHsKKwkJCQljb25zdCBjaGFyICp3b3JrX3RyZWUgPSBnZXRfZ2l0X3dvcmtfdHJlZSgpOworCQkJCWlmICh3b3JrX3RyZWUpCisJCQkJCXB1dHMod29ya190cmVlKTsKKwkJCQljb250aW51ZTsKKwkJCX0KIAkJCWlmICghc3RyY21wKGFyZywgIi0tc2hvdy1wcmVmaXgiKSkgewogCQkJCWlmIChwcmVmaXgpCiAJCQkJCXB1dHMocHJlZml4KTsKQEAgLTU3Nyw3ICs2NTMsNyBAQAogCQkJCQljb250aW51ZTsKIAkJCQl9CiAJCQkJaWYgKCFnZXRjd2QoY3dkLCBQQVRIX01BWCkpCi0JCQkJCWRpZSgidW5hYmxlIHRvIGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5Iik7CisJCQkJCWRpZV9lcnJubygidW5hYmxlIHRvIGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5Iik7CiAJCQkJcHJpbnRmKCIlcy8uZ2l0XG4iLCBjd2QpOwogCQkJCWNvbnRpbnVlOwogCQkJfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1yZXZlcnQuYyBiL2J1aWx0aW4tcmV2ZXJ0LmMKaW5kZXggM2YyNjE0ZS4uZWZmNTI2OCAxMDA2NDQKLS0tIGEvYnVpbHRpbi1yZXZlcnQuYworKysgYi9idWlsdGluLXJldmVydC5jCkBAIC0zOCw2ICszOCw4IEBACiBzdGF0aWMgaW50IGVkaXQsIG5vX3JlcGxheSwgbm9fY29tbWl0LCBtYWlubGluZSwgc2lnbm9mZjsKIHN0YXRpYyBlbnVtIHsgUkVWRVJULCBDSEVSUllfUElDSyB9IGFjdGlvbjsKIHN0YXRpYyBzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CitzdGF0aWMgY29uc3QgY2hhciAqY29tbWl0X25hbWU7CitzdGF0aWMgaW50IGFsbG93X3JlcmVyZV9hdXRvOwogCiBzdGF0aWMgY29uc3QgY2hhciAqbWU7CiAKQEAgLTQ4LDcgKzUwLDYgQEAKIAljb25zdCBjaGFyICogY29uc3QgKiB1c2FnZV9zdHIgPQogCQlhY3Rpb24gPT0gUkVWRVJUID8gIHJldmVydF91c2FnZSA6IGNoZXJyeV9waWNrX3VzYWdlOwogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07Ci0JY29uc3QgY2hhciAqYXJnOwogCWludCBub29wOwogCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0gewogCQlPUFRfQk9PTEVBTignbicsICJuby1jb21taXQiLCAmbm9fY29tbWl0LCAiZG9uJ3QgYXV0b21hdGljYWxseSBjb21taXQiKSwKQEAgLTU3LDI0ICs1OCwxOSBAQAogCQlPUFRfQk9PTEVBTigncicsIE5VTEwsICZub29wLCAibm8tb3AgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIiksCiAJCU9QVF9CT09MRUFOKCdzJywgInNpZ25vZmYiLCAmc2lnbm9mZiwgImFkZCBTaWduZWQtb2ZmLWJ5OiIpLAogCQlPUFRfSU5URUdFUignbScsICJtYWlubGluZSIsICZtYWlubGluZSwgInBhcmVudCBudW1iZXIiKSwKKwkJT1BUX1JFUkVSRV9BVVRPVVBEQVRFKCZhbGxvd19yZXJlcmVfYXV0byksCiAJCU9QVF9FTkQoKSwKIAl9OwogCi0JaWYgKHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgdXNhZ2Vfc3RyLCAwKSAhPSAxKQorCWlmIChwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIE5VTEwsIG9wdGlvbnMsIHVzYWdlX3N0ciwgMCkgIT0gMSkKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKHVzYWdlX3N0ciwgb3B0aW9ucyk7Ci0JYXJnID0gYXJndlswXTsKIAotCWlmIChnZXRfc2hhMShhcmcsIHNoYTEpKQotCQlkaWUgKCJDYW5ub3QgZmluZCAnJXMnIiwgYXJnKTsKLQljb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKXBhcnNlX29iamVjdChzaGExKTsKKwljb21taXRfbmFtZSA9IGFyZ3ZbMF07CisJaWYgKGdldF9zaGExKGNvbW1pdF9uYW1lLCBzaGExKSkKKwkJZGllICgiQ2Fubm90IGZpbmQgJyVzJyIsIGNvbW1pdF9uYW1lKTsKKwljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShzaGExKTsKIAlpZiAoIWNvbW1pdCkKLQkJZGllICgiQ291bGQgbm90IGZpbmQgJXMiLCBzaGExX3RvX2hleChzaGExKSk7Ci0JaWYgKGNvbW1pdC0+b2JqZWN0LnR5cGUgPT0gT0JKX1RBRykgewotCQljb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKQotCQkJZGVyZWZfdGFnKChzdHJ1Y3Qgb2JqZWN0ICopY29tbWl0LCBhcmcsIHN0cmxlbihhcmcpKTsKLQl9Ci0JaWYgKGNvbW1pdC0+b2JqZWN0LnR5cGUgIT0gT0JKX0NPTU1JVCkKLQkJZGllICgiJyVzJyBkb2VzIG5vdCBwb2ludCB0byBhIGNvbW1pdCIsIGFyZyk7CisJCWV4aXQoMSk7CiB9CiAKIHN0YXRpYyBjaGFyICpnZXRfb25lbGluZShjb25zdCBjaGFyICptZXNzYWdlKQpAQCAtMTM1LDcgKzEzMSw3IEBACiB7CiAJaW50IGxlbiA9IHN0cmxlbihzdHJpbmcpOwogCWlmICh3cml0ZV9pbl9mdWxsKG1zZ19mZCwgc3RyaW5nLCBsZW4pIDwgMCkKLQkJZGllICgiQ291bGQgbm90IHdyaXRlIHRvIE1FUkdFX01TRyIpOworCQlkaWVfZXJybm8gKCJDb3VsZCBub3Qgd3JpdGUgdG8gTUVSR0VfTVNHIik7CiB9CiAKIHN0YXRpYyB2b2lkIGFkZF9tZXNzYWdlX3RvX21zZyhjb25zdCBjaGFyICptZXNzYWdlKQpAQCAtMjAyLDI1ICsxOTgsMjcgQEAKIAkJCXNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKIH0KIAotc3RhdGljIGNoYXIgKmhlbHBfbXNnKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCitzdGF0aWMgY2hhciAqaGVscF9tc2coY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdGF0aWMgY2hhciBoZWxwYnVmWzEwMjRdOworCXN0cnVjdCBzdHJidWYgaGVscGJ1ZiA9IFNUUkJVRl9JTklUOwogCWNoYXIgKm1zZyA9IGdldGVudigiR0lUX0NIRVJSWV9QSUNLX0hFTFAiKTsKIAogCWlmIChtc2cpCiAJCXJldHVybiBtc2c7CiAKLQlzdHJjcHkoaGVscGJ1ZiwgIiAgQWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsXG4iCi0JICAgICAgICJtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHMgd2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyAiCi0JICAgICAgICJvciAnZ2l0IHJtIDxwYXRocz4nIGFuZCBjb21taXQgdGhlIHJlc3VsdC4iKTsKKwlzdHJidWZfYWRkc3RyKCZoZWxwYnVmLCAiICBBZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cyxcbiIKKwkJIm1hcmsgdGhlIGNvcnJlY3RlZCBwYXRocyB3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPidcbiIKKwkJImFuZCBjb21taXQgdGhlIHJlc3VsdCIpOwogCiAJaWYgKGFjdGlvbiA9PSBDSEVSUllfUElDSykgewotCQlzcHJpbnRmKGhlbHBidWYgKyBzdHJsZW4oaGVscGJ1ZiksCi0JCQkiXG5XaGVuIGNvbW1pdGluZywgdXNlIHRoZSBvcHRpb24gIgotCQkJIictYyAlcycgdG8gcmV0YWluIGF1dGhvcnNoaXAgYW5kIG1lc3NhZ2UuIiwKLQkJCWZpbmRfdW5pcXVlX2FiYnJldihzaGExLCBERUZBVUxUX0FCQlJFVikpOworCQlzdHJidWZfYWRkZigmaGVscGJ1ZiwgIiB3aXRoOiBcbiIKKwkJCSJcbiIKKwkJCSIgICAgICAgIGdpdCBjb21taXQgLWMgJXNcbiIsCisJCQluYW1lKTsKIAl9Ci0JcmV0dXJuIGhlbHBidWY7CisJZWxzZQorCQlzdHJidWZfYWRkY2goJmhlbHBidWYsICcuJyk7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmhlbHBidWYsIE5VTEwpOwogfQogCiBzdGF0aWMgc3RydWN0IHRyZWUgKmVtcHR5X3RyZWUodm9pZCkKQEAgLTIzMyw2ICsyMzEsMTkgQEAKIAlyZXR1cm4gdHJlZTsKIH0KIAorc3RhdGljIE5PUkVUVVJOIHZvaWQgZGllX2RpcnR5X2luZGV4KGNvbnN0IGNoYXIgKm1lKQoreworCWlmIChyZWFkX2NhY2hlX3VubWVyZ2VkKCkpIHsKKwkJZGllX3Jlc29sdmVfY29uZmxpY3QobWUpOworCX0gZWxzZSB7CisJCWlmIChhZHZpY2VfY29tbWl0X2JlZm9yZV9tZXJnZSkKKwkJCWRpZSgiWW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzLlxuIgorCQkJICAgICJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkLiIsIG1lKTsKKwkJZWxzZQorCQkJZGllKCJZb3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXMuXG4iLCBtZSk7CisJfQorfQorCiBzdGF0aWMgaW50IHJldmVydF9vcl9jaGVycnlfcGljayhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CiAJdW5zaWduZWQgY2hhciBoZWFkWzIwXTsKQEAgLTI2OSw3ICsyODAsNyBAQAogCQlpZiAoZ2V0X3NoYTEoIkhFQUQiLCBoZWFkKSkKIAkJCWRpZSAoIllvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIEhFQUQiKTsKIAkJaWYgKGluZGV4X2RpZmZlcnNfZnJvbSgiSEVBRCIsIDApKQotCQkJZGllICgiRGlydHkgaW5kZXg6IGNhbm5vdCAlcyIsIG1lKTsKKwkJCWRpZV9kaXJ0eV9pbmRleChtZSk7CiAJfQogCWRpc2NhcmRfY2FjaGUoKTsKIApAQCAtMzIzLDkgKzMzNCw5IEBACiAKIAllbmNvZGluZyA9IGdldF9lbmNvZGluZyhtZXNzYWdlKTsKIAlpZiAoIWVuY29kaW5nKQotCQllbmNvZGluZyA9ICJ1dGYtOCI7CisJCWVuY29kaW5nID0gIlVURi04IjsKIAlpZiAoIWdpdF9jb21taXRfZW5jb2RpbmcpCi0JCWdpdF9jb21taXRfZW5jb2RpbmcgPSAidXRmLTgiOworCQlnaXRfY29tbWl0X2VuY29kaW5nID0gIlVURi04IjsKIAlpZiAoKHJlZW5jb2RlZF9tZXNzYWdlID0gcmVlbmNvZGVfc3RyaW5nKG1lc3NhZ2UsCiAJCQkJCWdpdF9jb21taXRfZW5jb2RpbmcsIGVuY29kaW5nKSkpCiAJCW1lc3NhZ2UgPSByZWVuY29kZWRfbWVzc2FnZTsKQEAgLTM5NCw4ICs0MDUsOCBAQAogCQlpZiAoY29tbWl0X2xvY2tfZmlsZSgmbXNnX2ZpbGUpIDwgMCkKIAkJCWRpZSAoIkVycm9yIHdyYXBwaW5nIHVwICVzIiwgZGVmbXNnKTsKIAkJZnByaW50ZihzdGRlcnIsICJBdXRvbWF0aWMgJXMgZmFpbGVkLiVzXG4iLAotCQkJbWUsIGhlbHBfbXNnKGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKLQkJcmVyZXJlKCk7CisJCQltZSwgaGVscF9tc2coY29tbWl0X25hbWUpKTsKKwkJcmVyZXJlKGFsbG93X3JlcmVyZV9hdXRvKTsKIAkJZXhpdCgxKTsKIAl9CiAJaWYgKGNvbW1pdF9sb2NrX2ZpbGUoJm1zZ19maWxlKSA8IDApCmRpZmYgLS1naXQgYS9idWlsdGluLXJtLmMgYi9idWlsdGluLXJtLmMKaW5kZXggMjY5ZDYwOC4uZjM3NzJjOCAxMDA2NDQKLS0tIGEvYnVpbHRpbi1ybS5jCisrKyBiL2J1aWx0aW4tcm0uYwpAQCAtMTU3LDcgKzE1Nyw4IEBACiAKIAlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBidWlsdGluX3JtX29wdGlvbnMsIGJ1aWx0aW5fcm1fdXNhZ2UsIDApOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgYnVpbHRpbl9ybV9vcHRpb25zLAorCQkJICAgICBidWlsdGluX3JtX3VzYWdlLCAwKTsKIAlpZiAoIWFyZ2MpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JtX3VzYWdlLCBidWlsdGluX3JtX29wdGlvbnMpOwogCkBAIC0xNjgsOSArMTY5LDEwIEBACiAKIAlpZiAocmVhZF9jYWNoZSgpIDwgMCkKIAkJZGllKCJpbmRleCBmaWxlIGNvcnJ1cHQiKTsKLQlyZWZyZXNoX2NhY2hlKFJFRlJFU0hfUVVJRVQpOwogCiAJcGF0aHNwZWMgPSBnZXRfcGF0aHNwZWMocHJlZml4LCBhcmd2KTsKKwlyZWZyZXNoX2luZGV4KCZ0aGVfaW5kZXgsIFJFRlJFU0hfUVVJRVQsIHBhdGhzcGVjLCBOVUxMLCBOVUxMKTsKKwogCXNlZW4gPSBOVUxMOwogCWZvciAoaSA9IDA7IHBhdGhzcGVjW2ldIDsgaSsrKQogCQkvKiBub3RoaW5nICovOwpAQCAtMjU2LDcgKzI1OCw3IEBACiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlpZiAoIXJlbW92ZWQpCi0JCQkJZGllKCJnaXQgcm06ICVzOiAlcyIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisJCQkJZGllX2Vycm5vKCJnaXQgcm06ICclcyciLCBwYXRoKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvYnVpbHRpbi1zZW5kLXBhY2suYyBiL2J1aWx0aW4tc2VuZC1wYWNrLmMKaW5kZXggNDczYTNkZS4uMjE4M2E0NyAxMDA2NDQKLS0tIGEvYnVpbHRpbi1zZW5kLXBhY2suYworKysgYi9idWlsdGluLXNlbmQtcGFjay5jCkBAIC0yLDkgKzIsMTEgQEAKICNpbmNsdWRlICJjb21taXQuaCIKICNpbmNsdWRlICJyZWZzLmgiCiAjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJzaWRlYmFuZC5oIgogI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCiAjaW5jbHVkZSAicmVtb3RlLmgiCiAjaW5jbHVkZSAic2VuZC1wYWNrLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKIAogc3RhdGljIGNvbnN0IGNoYXIgc2VuZF9wYWNrX3VzYWdlW10gPQogImdpdCBzZW5kLXBhY2sgWy0tYWxsIHwgLS1taXJyb3JdIFstLWRyeS1ydW5dIFstLWZvcmNlXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC1yZWNlaXZlLXBhY2s+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbPGhvc3Q+Ol08ZGlyZWN0b3J5PiBbPHJlZj4uLi5dXG4iCkBAIC0zOCwxMiArNDAsMTMgQEAKIAkgKi8KIAljb25zdCBjaGFyICphcmd2W10gPSB7CiAJCSJwYWNrLW9iamVjdHMiLAotCQkiLS1hbGwtcHJvZ3Jlc3MiLAorCQkiLS1hbGwtcHJvZ3Jlc3MtaW1wbGllZCIsCiAJCSItLXJldnMiLAogCQkiLS1zdGRvdXQiLAogCQlOVUxMLAogCQlOVUxMLAogCQlOVUxMLAorCQlOVUxMLAogCX07CiAJc3RydWN0IGNoaWxkX3Byb2Nlc3MgcG87CiAJaW50IGk7CkBAIC01MywxMyArNTYsMTUgQEAKIAkJYXJndltpKytdID0gIi0tdGhpbiI7CiAJaWYgKGFyZ3MtPnVzZV9vZnNfZGVsdGEpCiAJCWFyZ3ZbaSsrXSA9ICItLWRlbHRhLWJhc2Utb2Zmc2V0IjsKKwlpZiAoYXJncy0+cXVpZXQpCisJCWFyZ3ZbaSsrXSA9ICItcSI7CiAJbWVtc2V0KCZwbywgMCwgc2l6ZW9mKHBvKSk7CiAJcG8uYXJndiA9IGFyZ3Y7CiAJcG8uaW4gPSAtMTsKLQlwby5vdXQgPSBmZDsKKwlwby5vdXQgPSBhcmdzLT5zdGF0ZWxlc3NfcnBjID8gLTEgOiBmZDsKIAlwby5naXRfY21kID0gMTsKIAlpZiAoc3RhcnRfY29tbWFuZCgmcG8pKQotCQlkaWUoImdpdCBwYWNrLW9iamVjdHMgZmFpbGVkICglcykiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImdpdCBwYWNrLW9iamVjdHMgZmFpbGVkIik7CiAKIAkvKgogCSAqIFdlIGZlZWQgdGhlIHBhY2stb2JqZWN0cyB3ZSBqdXN0IHNwYXduZWQgd2l0aCByZXZpc2lvbgpAQCAtODAsNiArODUsMjAgQEAKIAl9CiAKIAljbG9zZShwby5pbik7CisKKwlpZiAoYXJncy0+c3RhdGVsZXNzX3JwYykgeworCQljaGFyICpidWYgPSB4bWFsbG9jKExBUkdFX1BBQ0tFVF9NQVgpOworCQl3aGlsZSAoMSkgeworCQkJc3NpemVfdCBuID0geHJlYWQocG8ub3V0LCBidWYsIExBUkdFX1BBQ0tFVF9NQVgpOworCQkJaWYgKG4gPD0gMCkKKwkJCQlicmVhazsKKwkJCXNlbmRfc2lkZWJhbmQoZmQsIC0xLCBidWYsIG4sIExBUkdFX1BBQ0tFVF9NQVgpOworCQl9CisJCWZyZWUoYnVmKTsKKwkJY2xvc2UocG8ub3V0KTsKKwkJcG8ub3V0ID0gLTE7CisJfQorCiAJaWYgKGZpbmlzaF9jb21tYW5kKCZwbykpCiAJCXJldHVybiBlcnJvcigicGFjay1vYmplY3RzIGRpZWQgd2l0aCBzdHJhbmdlIGVycm9yIik7CiAJcmV0dXJuIDA7CkBAIC0xNzgsOSArMTk3LDkgQEAKIHsKIAlmcHJpbnRmKHN0ZGVyciwgIiAlYyAlLSpzICIsIGZsYWcsIFNVTU1BUllfV0lEVEgsIHN1bW1hcnkpOwogCWlmIChmcm9tKQotCQlmcHJpbnRmKHN0ZGVyciwgIiVzIC0+ICVzIiwgcHJldHRpZnlfcmVmKGZyb20pLCBwcmV0dGlmeV9yZWYodG8pKTsKKwkJZnByaW50ZihzdGRlcnIsICIlcyAtPiAlcyIsIHByZXR0aWZ5X3JlZm5hbWUoZnJvbS0+bmFtZSksIHByZXR0aWZ5X3JlZm5hbWUodG8tPm5hbWUpKTsKIAllbHNlCi0JCWZwdXRzKHByZXR0aWZ5X3JlZih0byksIHN0ZGVycik7CisJCWZwdXRzKHByZXR0aWZ5X3JlZm5hbWUodG8tPm5hbWUpLCBzdGRlcnIpOwogCWlmIChtc2cpIHsKIAkJZnB1dHMoIiAoIiwgc3RkZXJyKTsKIAkJZnB1dHMobXNnLCBzdGRlcnIpOwpAQCAtMjQzLDcgKzI2Miw3IEBACiAJCWJyZWFrOwogCWNhc2UgUkVGX1NUQVRVU19SRUpFQ1RfTk9ORkFTVEZPUldBUkQ6CiAJCXByaW50X3JlZl9zdGF0dXMoJyEnLCAiW3JlamVjdGVkXSIsIHJlZiwgcmVmLT5wZWVyX3JlZiwKLQkJCQkibm9uLWZhc3QgZm9yd2FyZCIpOworCQkJCSJub24tZmFzdC1mb3J3YXJkIik7CiAJCWJyZWFrOwogCWNhc2UgUkVGX1NUQVRVU19SRU1PVEVfUkVKRUNUOgogCQlwcmludF9yZWZfc3RhdHVzKCchJywgIltyZW1vdGUgcmVqZWN0ZWRdIiwgcmVmLApAQCAtMzAwLDYgKzMxOSw2NyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBwcmludF9oZWxwZXJfc3RhdHVzKHN0cnVjdCByZWYgKnJlZikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJZm9yICg7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCWNvbnN0IGNoYXIgKm1zZyA9IE5VTEw7CisJCWNvbnN0IGNoYXIgKnJlczsKKworCQlzd2l0Y2gocmVmLT5zdGF0dXMpIHsKKwkJY2FzZSBSRUZfU1RBVFVTX05PTkU6CisJCQlyZXMgPSAiZXJyb3IiOworCQkJbXNnID0gIm5vIG1hdGNoIjsKKwkJCWJyZWFrOworCisJCWNhc2UgUkVGX1NUQVRVU19PSzoKKwkJCXJlcyA9ICJvayI7CisJCQlicmVhazsKKworCQljYXNlIFJFRl9TVEFUVVNfVVBUT0RBVEU6CisJCQlyZXMgPSAib2siOworCQkJbXNnID0gInVwIHRvIGRhdGUiOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRUZfU1RBVFVTX1JFSkVDVF9OT05GQVNURk9SV0FSRDoKKwkJCXJlcyA9ICJlcnJvciI7CisJCQltc2cgPSAibm9uLWZhc3QgZm9yd2FyZCI7CisJCQlicmVhazsKKworCQljYXNlIFJFRl9TVEFUVVNfUkVKRUNUX05PREVMRVRFOgorCQljYXNlIFJFRl9TVEFUVVNfUkVNT1RFX1JFSkVDVDoKKwkJCXJlcyA9ICJlcnJvciI7CisJCQlicmVhazsKKworCQljYXNlIFJFRl9TVEFUVVNfRVhQRUNUSU5HX1JFUE9SVDoKKwkJZGVmYXVsdDoKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQlzdHJidWZfYWRkZigmYnVmLCAiJXMgJXMiLCByZXMsIHJlZi0+bmFtZSk7CisJCWlmIChyZWYtPnJlbW90ZV9zdGF0dXMpCisJCQltc2cgPSByZWYtPnJlbW90ZV9zdGF0dXM7CisJCWlmIChtc2cpIHsKKwkJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnICcpOworCQkJcXVvdGVfdHdvX2Nfc3R5bGUoJmJ1ZiwgIiIsIG1zZywgMCk7CisJCX0KKwkJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOworCisJCXNhZmVfd3JpdGUoMSwgYnVmLmJ1ZiwgYnVmLmxlbik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgaW50IHNpZGViYW5kX2RlbXV4KGludCBpbiwgaW50IG91dCwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgKmZkID0gZGF0YTsKKwlpbnQgcmV0ID0gcmVjdl9zaWRlYmFuZCgic2VuZC1wYWNrIiwgZmRbMF0sIG91dCk7CisJY2xvc2Uob3V0KTsKKwlyZXR1cm4gcmV0OworfQorCiBpbnQgc2VuZF9wYWNrKHN0cnVjdCBzZW5kX3BhY2tfYXJncyAqYXJncywKIAkgICAgICBpbnQgZmRbXSwgc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNvbm4sCiAJICAgICAgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMsCkBAIC0zMDcsMjAgKzM4NywyNSBAQAogewogCWludCBpbiA9IGZkWzBdOwogCWludCBvdXQgPSBmZFsxXTsKKwlzdHJ1Y3Qgc3RyYnVmIHJlcV9idWYgPSBTVFJCVUZfSU5JVDsKIAlzdHJ1Y3QgcmVmICpyZWY7CiAJaW50IG5ld19yZWZzOwotCWludCBhc2tfZm9yX3N0YXR1c19yZXBvcnQgPSAwOwogCWludCBhbGxvd19kZWxldGluZ19yZWZzID0gMDsKLQlpbnQgZXhwZWN0X3N0YXR1c19yZXBvcnQgPSAwOworCWludCBzdGF0dXNfcmVwb3J0ID0gMDsKKwlpbnQgdXNlX3NpZGViYW5kID0gMDsKKwl1bnNpZ25lZCBjbWRzX3NlbnQgPSAwOwogCWludCByZXQ7CisJc3RydWN0IGFzeW5jIGRlbXV4OwogCiAJLyogRG9lcyB0aGUgb3RoZXIgZW5kIHN1cHBvcnQgdGhlIHJlcG9ydGluZz8gKi8KIAlpZiAoc2VydmVyX3N1cHBvcnRzKCJyZXBvcnQtc3RhdHVzIikpCi0JCWFza19mb3Jfc3RhdHVzX3JlcG9ydCA9IDE7CisJCXN0YXR1c19yZXBvcnQgPSAxOwogCWlmIChzZXJ2ZXJfc3VwcG9ydHMoImRlbGV0ZS1yZWZzIikpCiAJCWFsbG93X2RlbGV0aW5nX3JlZnMgPSAxOwogCWlmIChzZXJ2ZXJfc3VwcG9ydHMoIm9mcy1kZWx0YSIpKQogCQlhcmdzLT51c2Vfb2ZzX2RlbHRhID0gMTsKKwlpZiAoc2VydmVyX3N1cHBvcnRzKCJzaWRlLWJhbmQtNjRrIikpCisJCXVzZV9zaWRlYmFuZCA9IDE7CiAKIAlpZiAoIXJlbW90ZV9yZWZzKSB7CiAJCWZwcmludGYoc3RkZXJyLCAiTm8gcmVmcyBpbiBjb21tb24gYW5kIG5vbmUgc3BlY2lmaWVkOyBkb2luZyBub3RoaW5nLlxuIgpAQCAtMzMzLDg5ICs0MTgsOTUgQEAKIAkgKi8KIAluZXdfcmVmcyA9IDA7CiAJZm9yIChyZWYgPSByZW1vdGVfcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKLQotCQlpZiAocmVmLT5wZWVyX3JlZikKLQkJCWhhc2hjcHkocmVmLT5uZXdfc2hhMSwgcmVmLT5wZWVyX3JlZi0+bmV3X3NoYTEpOwotCQllbHNlIGlmICghYXJncy0+c2VuZF9taXJyb3IpCisJCWlmICghcmVmLT5wZWVyX3JlZiAmJiAhYXJncy0+c2VuZF9taXJyb3IpCiAJCQljb250aW51ZTsKIAotCQlyZWYtPmRlbGV0aW9uID0gaXNfbnVsbF9zaGExKHJlZi0+bmV3X3NoYTEpOworCQkvKiBDaGVjayBmb3Igc3RhdHVzZXMgc2V0IGJ5IHNldF9yZWZfc3RhdHVzX2Zvcl9wdXNoKCkgKi8KKwkJc3dpdGNoIChyZWYtPnN0YXR1cykgeworCQljYXNlIFJFRl9TVEFUVVNfUkVKRUNUX05PTkZBU1RGT1JXQVJEOgorCQljYXNlIFJFRl9TVEFUVVNfVVBUT0RBVEU6CisJCQljb250aW51ZTsKKwkJZGVmYXVsdDoKKwkJCTsgLyogZG8gbm90aGluZyAqLworCQl9CisKIAkJaWYgKHJlZi0+ZGVsZXRpb24gJiYgIWFsbG93X2RlbGV0aW5nX3JlZnMpIHsKIAkJCXJlZi0+c3RhdHVzID0gUkVGX1NUQVRVU19SRUpFQ1RfTk9ERUxFVEU7CiAJCQljb250aW51ZTsKIAkJfQotCQlpZiAoIXJlZi0+ZGVsZXRpb24gJiYKLQkJICAgICFoYXNoY21wKHJlZi0+b2xkX3NoYTEsIHJlZi0+bmV3X3NoYTEpKSB7Ci0JCQlyZWYtPnN0YXR1cyA9IFJFRl9TVEFUVVNfVVBUT0RBVEU7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qIFRoaXMgcGFydCBkZXRlcm1pbmVzIHdoYXQgY2FuIG92ZXJ3cml0ZSB3aGF0LgotCQkgKiBUaGUgcnVsZXMgYXJlOgotCQkgKgotCQkgKiAoMCkgeW91IGNhbiBhbHdheXMgdXNlIC0tZm9yY2Ugb3IgK0E6QiBub3RhdGlvbiB0bwotCQkgKiAgICAgc2VsZWN0aXZlbHkgZm9yY2UgaW5kaXZpZHVhbCByZWYgcGFpcnMuCi0JCSAqCi0JCSAqICgxKSBpZiB0aGUgb2xkIHRoaW5nIGRvZXMgbm90IGV4aXN0LCBpdCBpcyBPSy4KLQkJICoKLQkJICogKDIpIGlmIHlvdSBkbyBub3QgaGF2ZSB0aGUgb2xkIHRoaW5nLCB5b3UgYXJlIG5vdCBhbGxvd2VkCi0JCSAqICAgICB0byBvdmVyd3JpdGUgaXQ7IHlvdSB3b3VsZCBub3Qga25vdyB3aGF0IHlvdSBhcmUgbG9zaW5nCi0JCSAqICAgICBvdGhlcndpc2UuCi0JCSAqCi0JCSAqICgzKSBpZiBib3RoIG5ldyBhbmQgb2xkIGFyZSBjb21taXQtaXNoLCBhbmQgbmV3IGlzIGEKLQkJICogICAgIGRlc2NlbmRhbnQgb2Ygb2xkLCBpdCBpcyBPSy4KLQkJICoKLQkJICogKDQpIHJlZ2FyZGxlc3Mgb2YgYWxsIG9mIHRoZSBhYm92ZSwgcmVtb3ZpbmcgOkIgaXMKLQkJICogICAgIGFsd2F5cyBhbGxvd2VkLgotCQkgKi8KLQotCQlyZWYtPm5vbmZhc3Rmb3J3YXJkID0KLQkJICAgICFyZWYtPmRlbGV0aW9uICYmCi0JCSAgICAhaXNfbnVsbF9zaGExKHJlZi0+b2xkX3NoYTEpICYmCi0JCSAgICAoIWhhc19zaGExX2ZpbGUocmVmLT5vbGRfc2hhMSkKLQkJICAgICAgfHwgIXJlZl9uZXdlcihyZWYtPm5ld19zaGExLCByZWYtPm9sZF9zaGExKSk7Ci0KLQkJaWYgKHJlZi0+bm9uZmFzdGZvcndhcmQgJiYgIXJlZi0+Zm9yY2UgJiYgIWFyZ3MtPmZvcmNlX3VwZGF0ZSkgewotCQkJcmVmLT5zdGF0dXMgPSBSRUZfU1RBVFVTX1JFSkVDVF9OT05GQVNURk9SV0FSRDsKLQkJCWNvbnRpbnVlOwotCQl9CiAKIAkJaWYgKCFyZWYtPmRlbGV0aW9uKQogCQkJbmV3X3JlZnMrKzsKIAotCQlpZiAoIWFyZ3MtPmRyeV9ydW4pIHsKKwkJaWYgKGFyZ3MtPmRyeV9ydW4pIHsKKwkJCXJlZi0+c3RhdHVzID0gUkVGX1NUQVRVU19PSzsKKwkJfSBlbHNlIHsKIAkJCWNoYXIgKm9sZF9oZXggPSBzaGExX3RvX2hleChyZWYtPm9sZF9zaGExKTsKIAkJCWNoYXIgKm5ld19oZXggPSBzaGExX3RvX2hleChyZWYtPm5ld19zaGExKTsKIAotCQkJaWYgKGFza19mb3Jfc3RhdHVzX3JlcG9ydCkgewotCQkJCXBhY2tldF93cml0ZShvdXQsICIlcyAlcyAlcyVjJXMiLAorCQkJaWYgKCFjbWRzX3NlbnQgJiYgKHN0YXR1c19yZXBvcnQgfHwgdXNlX3NpZGViYW5kKSkgeworCQkJCXBhY2tldF9idWZfd3JpdGUoJnJlcV9idWYsICIlcyAlcyAlcyVjJXMlcyIsCiAJCQkJCW9sZF9oZXgsIG5ld19oZXgsIHJlZi0+bmFtZSwgMCwKLQkJCQkJInJlcG9ydC1zdGF0dXMiKTsKLQkJCQlhc2tfZm9yX3N0YXR1c19yZXBvcnQgPSAwOwotCQkJCWV4cGVjdF9zdGF0dXNfcmVwb3J0ID0gMTsKKwkJCQkJc3RhdHVzX3JlcG9ydCA/ICIgcmVwb3J0LXN0YXR1cyIgOiAiIiwKKwkJCQkJdXNlX3NpZGViYW5kID8gIiBzaWRlLWJhbmQtNjRrIiA6ICIiKTsKIAkJCX0KIAkJCWVsc2UKLQkJCQlwYWNrZXRfd3JpdGUob3V0LCAiJXMgJXMgJXMiLAorCQkJCXBhY2tldF9idWZfd3JpdGUoJnJlcV9idWYsICIlcyAlcyAlcyIsCiAJCQkJCW9sZF9oZXgsIG5ld19oZXgsIHJlZi0+bmFtZSk7CisJCQlyZWYtPnN0YXR1cyA9IHN0YXR1c19yZXBvcnQgPworCQkJCVJFRl9TVEFUVVNfRVhQRUNUSU5HX1JFUE9SVCA6CisJCQkJUkVGX1NUQVRVU19PSzsKKwkJCWNtZHNfc2VudCsrOwogCQl9Ci0JCXJlZi0+c3RhdHVzID0gZXhwZWN0X3N0YXR1c19yZXBvcnQgPwotCQkJUkVGX1NUQVRVU19FWFBFQ1RJTkdfUkVQT1JUIDoKLQkJCVJFRl9TVEFUVVNfT0s7CiAJfQogCi0JcGFja2V0X2ZsdXNoKG91dCk7Ci0JaWYgKG5ld19yZWZzICYmICFhcmdzLT5kcnlfcnVuKSB7CisJaWYgKGFyZ3MtPnN0YXRlbGVzc19ycGMpIHsKKwkJaWYgKCFhcmdzLT5kcnlfcnVuICYmIGNtZHNfc2VudCkgeworCQkJcGFja2V0X2J1Zl9mbHVzaCgmcmVxX2J1Zik7CisJCQlzZW5kX3NpZGViYW5kKG91dCwgLTEsIHJlcV9idWYuYnVmLCByZXFfYnVmLmxlbiwgTEFSR0VfUEFDS0VUX01BWCk7CisJCX0KKwl9IGVsc2UgeworCQlzYWZlX3dyaXRlKG91dCwgcmVxX2J1Zi5idWYsIHJlcV9idWYubGVuKTsKKwkJcGFja2V0X2ZsdXNoKG91dCk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZyZXFfYnVmKTsKKworCWlmICh1c2Vfc2lkZWJhbmQgJiYgY21kc19zZW50KSB7CisJCW1lbXNldCgmZGVtdXgsIDAsIHNpemVvZihkZW11eCkpOworCQlkZW11eC5wcm9jID0gc2lkZWJhbmRfZGVtdXg7CisJCWRlbXV4LmRhdGEgPSBmZDsKKwkJZGVtdXgub3V0ID0gLTE7CisJCWlmIChzdGFydF9hc3luYygmZGVtdXgpKQorCQkJZGllKCJyZWNlaXZlLXBhY2s6IHVuYWJsZSB0byBmb3JrIG9mZiBzaWRlYmFuZCBkZW11bHRpcGxleGVyIik7CisJCWluID0gZGVtdXgub3V0OworCX0KKworCWlmIChuZXdfcmVmcyAmJiBjbWRzX3NlbnQpIHsKIAkJaWYgKHBhY2tfb2JqZWN0cyhvdXQsIHJlbW90ZV9yZWZzLCBleHRyYV9oYXZlLCBhcmdzKSA8IDApIHsKIAkJCWZvciAocmVmID0gcmVtb3RlX3JlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQogCQkJCXJlZi0+c3RhdHVzID0gUkVGX1NUQVRVU19OT05FOworCQkJaWYgKHVzZV9zaWRlYmFuZCkKKwkJCQlmaW5pc2hfYXN5bmMoJmRlbXV4KTsKIAkJCXJldHVybiAtMTsKIAkJfQogCX0KKwlpZiAoYXJncy0+c3RhdGVsZXNzX3JwYyAmJiBjbWRzX3NlbnQpCisJCXBhY2tldF9mbHVzaChvdXQpOwogCi0JaWYgKGV4cGVjdF9zdGF0dXNfcmVwb3J0KQorCWlmIChzdGF0dXNfcmVwb3J0ICYmIGNtZHNfc2VudCkKIAkJcmV0ID0gcmVjZWl2ZV9zdGF0dXMoaW4sIHJlbW90ZV9yZWZzKTsKIAllbHNlCiAJCXJldCA9IDA7CisJaWYgKGFyZ3MtPnN0YXRlbGVzc19ycGMpCisJCXBhY2tldF9mbHVzaChvdXQpOworCisJaWYgKHVzZV9zaWRlYmFuZCAmJiBjbWRzX3NlbnQpIHsKKwkJaWYgKGZpbmlzaF9hc3luYygmZGVtdXgpKSB7CisJCQllcnJvcigiZXJyb3IgaW4gc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIpOworCQkJcmV0ID0gLTE7CisJCX0KKwkJY2xvc2UoZGVtdXgub3V0KTsKKwl9CiAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKQEAgLTQ3Myw4ICs1NjQsOSBAQAogCWludCBmZFsyXTsKIAlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY29ubjsKIAlzdHJ1Y3QgZXh0cmFfaGF2ZV9vYmplY3RzIGV4dHJhX2hhdmU7Ci0Jc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMsICoqcmVtb3RlX3RhaWwsICpsb2NhbF9yZWZzOworCXN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLCAqbG9jYWxfcmVmczsKIAlpbnQgcmV0OworCWludCBoZWxwZXJfc3RhdHVzID0gMDsKIAlpbnQgc2VuZF9hbGwgPSAwOwogCWNvbnN0IGNoYXIgKnJlY2VpdmVwYWNrID0gImdpdC1yZWNlaXZlLXBhY2siOwogCWludCBmbGFnczsKQEAgLTUyMCw2ICs2MTIsMTQgQEAKIAkJCQlhcmdzLnVzZV90aGluX3BhY2sgPSAxOwogCQkJCWNvbnRpbnVlOwogCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zdGF0ZWxlc3MtcnBjIikpIHsKKwkJCQlhcmdzLnN0YXRlbGVzc19ycGMgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1oZWxwZXItc3RhdHVzIikpIHsKKwkJCQloZWxwZXJfc3RhdHVzID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KIAkJCXVzYWdlKHNlbmRfcGFja191c2FnZSk7CiAJCX0KIAkJaWYgKCFkZXN0KSB7CkBAIC01NDgsNyArNjQ4LDE0IEBACiAJCX0KIAl9CiAKLQljb25uID0gZ2l0X2Nvbm5lY3QoZmQsIGRlc3QsIHJlY2VpdmVwYWNrLCBhcmdzLnZlcmJvc2UgPyBDT05ORUNUX1ZFUkJPU0UgOiAwKTsKKwlpZiAoYXJncy5zdGF0ZWxlc3NfcnBjKSB7CisJCWNvbm4gPSBOVUxMOworCQlmZFswXSA9IDA7CisJCWZkWzFdID0gMTsKKwl9IGVsc2UgeworCQljb25uID0gZ2l0X2Nvbm5lY3QoZmQsIGRlc3QsIHJlY2VpdmVwYWNrLAorCQkJYXJncy52ZXJib3NlID8gQ09OTkVDVF9WRVJCT1NFIDogMCk7CisJfQogCiAJbWVtc2V0KCZleHRyYV9oYXZlLCAwLCBzaXplb2YoZXh0cmFfaGF2ZSkpOwogCkBAIC01NjcsMjIgKzY3NCwyNCBAQAogCQlmbGFncyB8PSBNQVRDSF9SRUZTX01JUlJPUjsKIAogCS8qIG1hdGNoIHRoZW0gdXAgKi8KLQlyZW1vdGVfdGFpbCA9ICZyZW1vdGVfcmVmczsKLQl3aGlsZSAoKnJlbW90ZV90YWlsKQotCQlyZW1vdGVfdGFpbCA9ICYoKCpyZW1vdGVfdGFpbCktPm5leHQpOwotCWlmIChtYXRjaF9yZWZzKGxvY2FsX3JlZnMsIHJlbW90ZV9yZWZzLCAmcmVtb3RlX3RhaWwsCi0JCSAgICAgICBucl9yZWZzcGVjcywgcmVmc3BlY3MsIGZsYWdzKSkgeworCWlmIChtYXRjaF9yZWZzKGxvY2FsX3JlZnMsICZyZW1vdGVfcmVmcywgbnJfcmVmc3BlY3MsIHJlZnNwZWNzLCBmbGFncykpCiAJCXJldHVybiAtMTsKLQl9CisKKwlzZXRfcmVmX3N0YXR1c19mb3JfcHVzaChyZW1vdGVfcmVmcywgYXJncy5zZW5kX21pcnJvciwKKwkJYXJncy5mb3JjZV91cGRhdGUpOwogCiAJcmV0ID0gc2VuZF9wYWNrKCZhcmdzLCBmZCwgY29ubiwgcmVtb3RlX3JlZnMsICZleHRyYV9oYXZlKTsKIAorCWlmIChoZWxwZXJfc3RhdHVzKQorCQlwcmludF9oZWxwZXJfc3RhdHVzKHJlbW90ZV9yZWZzKTsKKwogCWNsb3NlKGZkWzFdKTsKIAljbG9zZShmZFswXSk7CiAKIAlyZXQgfD0gZmluaXNoX2Nvbm5lY3QoY29ubik7CiAKLQlwcmludF9wdXNoX3N0YXR1cyhkZXN0LCByZW1vdGVfcmVmcyk7CisJaWYgKCFoZWxwZXJfc3RhdHVzKQorCQlwcmludF9wdXNoX3N0YXR1cyhkZXN0LCByZW1vdGVfcmVmcyk7CiAKIAlpZiAoIWFyZ3MuZHJ5X3J1biAmJiByZW1vdGUpIHsKIAkJc3RydWN0IHJlZiAqcmVmOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1zaG9ydGxvZy5jIGIvYnVpbHRpbi1zaG9ydGxvZy5jCmluZGV4IGIyODA5MWIuLmVjZDJkNDUgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tc2hvcnRsb2cuYworKysgYi9idWlsdGluLXNob3J0bG9nLmMKQEAgLTU2LDcgKzU2LDcgQEAKIAkvKiBjb3B5IGF1dGhvciBuYW1lIHRvIG5hbWVidWYsIHRvIHN1cHBvcnQgbWF0Y2hpbmcgb24gYm90aCBuYW1lIGFuZCBlbWFpbCAqLwogCW1lbWNweShuYW1lYnVmLCBhdXRob3IsIGJvZW1haWwgLSBhdXRob3IpOwogCWxlbiA9IGJvZW1haWwgLSBhdXRob3I7Ci0Jd2hpbGUobGVuID4gMCAmJiBpc3NwYWNlKG5hbWVidWZbbGVuLTFdKSkKKwl3aGlsZSAobGVuID4gMCAmJiBpc3NwYWNlKG5hbWVidWZbbGVuLTFdKSkKIAkJbGVuLS07CiAJbmFtZWJ1ZltsZW5dID0gMDsKIApAQCAtMTM5LDggKzEzOSwxMiBAQAogdm9pZCBzaG9ydGxvZ19hZGRfY29tbWl0KHN0cnVjdCBzaG9ydGxvZyAqbG9nLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCiB7CiAJY29uc3QgY2hhciAqYXV0aG9yID0gTlVMTCwgKmJ1ZmZlcjsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgdWZidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgY3R4ID0gezB9OwogCi0JYnVmZmVyID0gY29tbWl0LT5idWZmZXI7CisJcHJldHR5X3ByaW50X2NvbW1pdChDTUlUX0ZNVF9SQVcsIGNvbW1pdCwgJmJ1ZiwgJmN0eCk7CisJYnVmZmVyID0gYnVmLmJ1ZjsKIAl3aGlsZSAoKmJ1ZmZlciAmJiAqYnVmZmVyICE9ICdcbicpIHsKIAkJY29uc3QgY2hhciAqZW9sID0gc3RyY2hyKGJ1ZmZlciwgJ1xuJyk7CiAKQEAgLTE1NywxNyArMTYxLDE5IEBACiAJCWRpZSgiTWlzc2luZyBhdXRob3I6ICVzIiwKIAkJICAgIHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKIAlpZiAobG9nLT51c2VyX2Zvcm1hdCkgewotCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOwotCi0JCXByZXR0eV9wcmludF9jb21taXQoQ01JVF9GTVRfVVNFUkZPUk1BVCwgY29tbWl0LCAmYnVmLAotCQkJREVGQVVMVF9BQkJSRVYsICIiLCAiIiwgREFURV9OT1JNQUwsIDApOwotCQlpbnNlcnRfb25lX3JlY29yZChsb2csIGF1dGhvciwgYnVmLmJ1Zik7Ci0JCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOwotCQlyZXR1cm47Ci0JfQotCWlmICgqYnVmZmVyKQorCQlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgY3R4ID0gezB9OworCQljdHguYWJicmV2ID0gREVGQVVMVF9BQkJSRVY7CisJCWN0eC5zdWJqZWN0ID0gIiI7CisJCWN0eC5hZnRlcl9zdWJqZWN0ID0gIiI7CisJCWN0eC5kYXRlX21vZGUgPSBEQVRFX05PUk1BTDsKKwkJcHJldHR5X3ByaW50X2NvbW1pdChDTUlUX0ZNVF9VU0VSRk9STUFULCBjb21taXQsICZ1ZmJ1ZiwgJmN0eCk7CisJCWJ1ZmZlciA9IHVmYnVmLmJ1ZjsKKwl9IGVsc2UgaWYgKCpidWZmZXIpIHsKIAkJYnVmZmVyKys7CisJfQogCWluc2VydF9vbmVfcmVjb3JkKGxvZywgYXV0aG9yLCAhKmJ1ZmZlciA/ICI8bm9uZT4iIDogYnVmZmVyKTsKKwlzdHJidWZfcmVsZWFzZSgmdWZidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOwogfQogCiBzdGF0aWMgdm9pZCBnZXRfZnJvbV9yZXYoc3RydWN0IHJldl9pbmZvICpyZXYsIHN0cnVjdCBzaG9ydGxvZyAqbG9nKQpAQCAtMjYzLDcgKzI2OSw3IEBACiAJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwogCXNob3J0bG9nX2luaXQoJmxvZyk7CiAJaW5pdF9yZXZpc2lvbnMoJnJldiwgcHJlZml4KTsKLQlwYXJzZV9vcHRpb25zX3N0YXJ0KCZjdHgsIGFyZ2MsIGFyZ3YsIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIIHwKKwlwYXJzZV9vcHRpb25zX3N0YXJ0KCZjdHgsIGFyZ2MsIGFyZ3YsIHByZWZpeCwgUEFSU0VfT1BUX0tFRVBfREFTSERBU0ggfAogCQkJICAgIFBBUlNFX09QVF9LRUVQX0FSR1YwKTsKIAogCWZvciAoOzspIHsKQEAgLTI5OCw5ICszMDQsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgYWRkX3dyYXBwZWRfc2hvcnRsb2dfbXNnKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpzLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IHNob3J0bG9nICpsb2cpCit7CisJaW50IGNvbCA9IHN0cmJ1Zl9hZGRfd3JhcHBlZF90ZXh0KHNiLCBzLCBsb2ctPmluMSwgbG9nLT5pbjIsIGxvZy0+d3JhcCk7CisJaWYgKGNvbCAhPSBsb2ctPndyYXApCisJCXN0cmJ1Zl9hZGRjaChzYiwgJ1xuJyk7Cit9CisKIHZvaWQgc2hvcnRsb2dfb3V0cHV0KHN0cnVjdCBzaG9ydGxvZyAqbG9nKQogewogCWludCBpLCBqOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwogCWlmIChsb2ctPnNvcnRfYnlfbnVtYmVyKQogCQlxc29ydChsb2ctPmxpc3QuaXRlbXMsIGxvZy0+bGlzdC5uciwgc2l6ZW9mKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtKSwKIAkJCWNvbXBhcmVfYnlfbnVtYmVyKTsKQEAgLTMxNSw5ICszMzEsOSBAQAogCQkJCWNvbnN0IGNoYXIgKm1zZyA9IG9uZWxpbmVzLT5pdGVtc1tqXS5zdHJpbmc7CiAKIAkJCQlpZiAobG9nLT53cmFwX2xpbmVzKSB7Ci0JCQkJCWludCBjb2wgPSBwcmludF93cmFwcGVkX3RleHQobXNnLCBsb2ctPmluMSwgbG9nLT5pbjIsIGxvZy0+d3JhcCk7Ci0JCQkJCWlmIChjb2wgIT0gbG9nLT53cmFwKQotCQkJCQkJcHV0Y2hhcignXG4nKTsKKwkJCQkJc3RyYnVmX3Jlc2V0KCZzYik7CisJCQkJCWFkZF93cmFwcGVkX3Nob3J0bG9nX21zZygmc2IsIG1zZywgbG9nKTsKKwkJCQkJZndyaXRlKHNiLmJ1Ziwgc2IubGVuLCAxLCBzdGRvdXQpOwogCQkJCX0KIAkJCQllbHNlCiAJCQkJCXByaW50ZigiICAgICAgJXNcbiIsIG1zZyk7CkBAIC0zMzEsNiArMzQ3LDcgQEAKIAkJbG9nLT5saXN0Lml0ZW1zW2ldLnV0aWwgPSBOVUxMOwogCX0KIAorCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CiAJbG9nLT5saXN0LnN0cmR1cF9zdHJpbmdzID0gMTsKIAlzdHJpbmdfbGlzdF9jbGVhcigmbG9nLT5saXN0LCAxKTsKIAljbGVhcl9tYWlsbWFwKCZsb2ctPm1haWxtYXApOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1zaG93LWJyYW5jaC5jIGIvYnVpbHRpbi1zaG93LWJyYW5jaC5jCmluZGV4IGMzYWZhYmIuLjM1YTcwOWUgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tc2hvdy1icmFuY2guYworKysgYi9idWlsdGluLXNob3ctYnJhbmNoLmMKQEAgLTIsMTEgKzIsMjYgQEAKICNpbmNsdWRlICJjb21taXQuaCIKICNpbmNsdWRlICJyZWZzLmgiCiAjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNvbG9yLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgogCi1zdGF0aWMgY29uc3QgY2hhciBzaG93X2JyYW5jaF91c2FnZVtdID0KLSJnaXQgc2hvdy1icmFuY2ggWy0tc3BhcnNlXSBbLS1jdXJyZW50XSBbLS1hbGxdIFstLXJlbW90ZXNdIFstLXRvcG8tb3JkZXJdIFstLW1vcmU9Y291bnQgfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlIF0gWy0tdG9waWNzXSBbPHJlZnM+Li4uXSB8IC0tcmVmbG9nWz1uWyxiXV0gPGJyYW5jaD4iOwotc3RhdGljIGNvbnN0IGNoYXIgc2hvd19icmFuY2hfdXNhZ2VfcmVmbG9nW10gPQotIi0tcmVmbG9nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLXJlbW90ZXMsIC0taW5kZXBlbmRlbnQgb3IgLS1tZXJnZS1iYXNlIjsKK3N0YXRpYyBjb25zdCBjaGFyKiBzaG93X2JyYW5jaF91c2FnZVtdID0geworICAgICJnaXQgc2hvdy1icmFuY2ggWy1hfC0tYWxsXSBbLXJ8LS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyIHwgLS1kYXRlLW9yZGVyXSBbLS1jdXJyZW50XSBbLS1jb2xvciB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV0gWy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXSBbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWzxyZXY+IHwgPGdsb2I+XS4uLiIsCisgICAgImdpdCBzaG93LWJyYW5jaCAoLWd8LS1yZWZsb2cpWz08bj5bLDxiYXNlPl1dIFstLWxpc3RdIFs8cmVmPl0iLAorICAgIE5VTEwKK307CisKK3N0YXRpYyBpbnQgc2hvd2JyYW5jaF91c2VfY29sb3IgPSAtMTsKK3N0YXRpYyBjaGFyIGNvbHVtbl9jb2xvcnNbXVtDT0xPUl9NQVhMRU5dID0geworCUdJVF9DT0xPUl9SRUQsCisJR0lUX0NPTE9SX0dSRUVOLAorCUdJVF9DT0xPUl9ZRUxMT1csCisJR0lUX0NPTE9SX0JMVUUsCisJR0lUX0NPTE9SX01BR0VOVEEsCisJR0lUX0NPTE9SX0NZQU4sCit9OworCisjZGVmaW5lIENPTFVNTl9DT0xPUlNfTUFYIChBUlJBWV9TSVpFKGNvbHVtbl9jb2xvcnMpKQogCiBzdGF0aWMgaW50IGRlZmF1bHRfbnVtOwogc3RhdGljIGludCBkZWZhdWx0X2FsbG9jOwpAQCAtMTksNiArMzQsMjAgQEAKIAogI2RlZmluZSBERUZBVUxUX1JFRkxPRwk0CiAKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfY29sb3JfY29kZShpbnQgaWR4KQoreworCWlmIChzaG93YnJhbmNoX3VzZV9jb2xvcikKKwkJcmV0dXJuIGNvbHVtbl9jb2xvcnNbaWR4XTsKKwlyZXR1cm4gIiI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfY29sb3JfcmVzZXRfY29kZSh2b2lkKQoreworCWlmIChzaG93YnJhbmNoX3VzZV9jb2xvcikKKwkJcmV0dXJuIEdJVF9DT0xPUl9SRVNFVDsKKwlyZXR1cm4gIiI7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY29tbWl0ICppbnRlcmVzdGluZyhzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QpCiB7CiAJd2hpbGUgKGxpc3QpIHsKQEAgLTI2NCw4ICsyOTMsOCBAQAogCXN0cnVjdCBjb21taXRfbmFtZSAqbmFtZSA9IGNvbW1pdC0+dXRpbDsKIAogCWlmIChjb21taXQtPm9iamVjdC5wYXJzZWQpIHsKLQkJcHJldHR5X3ByaW50X2NvbW1pdChDTUlUX0ZNVF9PTkVMSU5FLCBjb21taXQsCi0JCQkJICAgICZwcmV0dHksIDAsIE5VTEwsIE5VTEwsIDAsIDApOworCQlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgY3R4ID0gezB9OworCQlwcmV0dHlfcHJpbnRfY29tbWl0KENNSVRfRk1UX09ORUxJTkUsIGNvbW1pdCwgJnByZXR0eSwgJmN0eCk7CiAJCXByZXR0eV9zdHIgPSBwcmV0dHkuYnVmOwogCX0KIAlpZiAoIXByZWZpeGNtcChwcmV0dHlfc3RyLCAiW1BBVENIXSAiKSkKQEAgLTUzNiw3ICs1NjUsMTUgQEAKIAlpZiAoIXN0cmNtcCh2YXIsICJzaG93YnJhbmNoLmRlZmF1bHQiKSkgewogCQlpZiAoIXZhbHVlKQogCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7Ci0JCWlmIChkZWZhdWx0X2FsbG9jIDw9IGRlZmF1bHRfbnVtICsgMSkgeworCQkvKgorCQkgKiBkZWZhdWx0X2FyZyBpcyBub3cgcGFzc2VkIHRvIHBhcnNlX29wdGlvbnMoKSwgc28gd2UgbmVlZCB0bworCQkgKiBtaW1pYyB0aGUgcmVhbCBhcmd2IGEgYml0IGJldHRlci4KKwkJICovCisJCWlmICghZGVmYXVsdF9udW0pIHsKKwkJCWRlZmF1bHRfYWxsb2MgPSAyMDsKKwkJCWRlZmF1bHRfYXJnID0geGNhbGxvYyhkZWZhdWx0X2FsbG9jLCBzaXplb2YoKmRlZmF1bHRfYXJnKSk7CisJCQlkZWZhdWx0X2FyZ1tkZWZhdWx0X251bSsrXSA9ICJzaG93LWJyYW5jaCI7CisJCX0gZWxzZSBpZiAoZGVmYXVsdF9hbGxvYyA8PSBkZWZhdWx0X251bSArIDEpIHsKIAkJCWRlZmF1bHRfYWxsb2MgPSBkZWZhdWx0X2FsbG9jICogMyAvIDIgKyAyMDsKIAkJCWRlZmF1bHRfYXJnID0geHJlYWxsb2MoZGVmYXVsdF9hcmcsIHNpemVvZiAqZGVmYXVsdF9hcmcgKiBkZWZhdWx0X2FsbG9jKTsKIAkJfQpAQCAtNTQ1LDcgKzU4MiwxMiBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKKwlpZiAoIXN0cmNtcCh2YXIsICJjb2xvci5zaG93YnJhbmNoIikpIHsKKwkJc2hvd2JyYW5jaF91c2VfY29sb3IgPSBnaXRfY29uZmlnX2NvbG9yYm9vbCh2YXIsIHZhbHVlLCAtMSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBnaXRfY29sb3JfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOwogfQogCiBzdGF0aWMgaW50IG9taXRfaW5fZGVuc2Uoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgY29tbWl0ICoqcmV2LCBpbnQgbikKQEAgLTU2OSwxOCArNjExLDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHBhcnNlX3JlZmxvZ19wYXJhbShjb25zdCBjaGFyICphcmcsIGludCAqY250LCBjb25zdCBjaGFyICoqYmFzZSkKK3N0YXRpYyBpbnQgcmVmbG9nID0gMDsKKworc3RhdGljIGludCBwYXJzZV9yZWZsb2dfcGFyYW0oY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkgICAgICBpbnQgdW5zZXQpCiB7CiAJY2hhciAqZXA7Ci0JKmNudCA9IHN0cnRvdWwoYXJnLCAmZXAsIDEwKTsKKwljb25zdCBjaGFyICoqYmFzZSA9IChjb25zdCBjaGFyICoqKW9wdC0+dmFsdWU7CisJaWYgKCFhcmcpCisJCWFyZyA9ICIiOworCXJlZmxvZyA9IHN0cnRvdWwoYXJnLCAmZXAsIDEwKTsKIAlpZiAoKmVwID09ICcsJykKIAkJKmJhc2UgPSBlcCArIDE7CiAJZWxzZSBpZiAoKmVwKQotCQlkaWUoInVucmVjb2duaXplZCByZWZsb2cgcGFyYW0gJyVzJyIsIGFyZyk7CisJCXJldHVybiBlcnJvcigidW5yZWNvZ25pemVkIHJlZmxvZyBwYXJhbSAnJXMnIiwgYXJnKTsKIAllbHNlCiAJCSpiYXNlID0gTlVMTDsKLQlpZiAoKmNudCA8PSAwKQotCQkqY250ID0gREVGQVVMVF9SRUZMT0c7CisJaWYgKHJlZmxvZyA8PSAwKQorCQlyZWZsb2cgPSBERUZBVUxUX1JFRkxPRzsKKwlyZXR1cm4gMDsKIH0KIAogaW50IGNtZF9zaG93X2JyYW5jaChpbnQgYWMsIGNvbnN0IGNoYXIgKiphdiwgY29uc3QgY2hhciAqcHJlZml4KQpAQCAtNjA2LDcwICs2NTUsNjcgQEAKIAlpbnQgaGVhZF9hdCA9IC0xOwogCWludCB0b3BpY3MgPSAwOwogCWludCBkZW5zZSA9IDE7Ci0JaW50IHJlZmxvZyA9IDA7CiAJY29uc3QgY2hhciAqcmVmbG9nX2Jhc2UgPSBOVUxMOworCXN0cnVjdCBvcHRpb24gYnVpbHRpbl9zaG93X2JyYW5jaF9vcHRpb25zW10gPSB7CisJCU9QVF9CT09MRUFOKCdhJywgImFsbCIsICZhbGxfaGVhZHMsCisJCQkgICAgInNob3cgcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIpLAorCQlPUFRfQk9PTEVBTigncicsICJyZW1vdGVzIiwgJmFsbF9yZW1vdGVzLAorCQkJICAgICJzaG93IHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIpLAorCQlPUFRfQk9PTEVBTigwLCAiY29sb3IiLCAmc2hvd2JyYW5jaF91c2VfY29sb3IsCisJCQkgICAgImNvbG9yICcqISstJyBjb3JyZXNwb25kaW5nIHRvIHRoZSBicmFuY2giKSwKKwkJeyBPUFRJT05fSU5URUdFUiwgMCwgIm1vcmUiLCAmZXh0cmEsICJuIiwKKwkJCSAgICAic2hvdyA8bj4gbW9yZSBjb21taXRzIGFmdGVyIHRoZSBjb21tb24gYW5jZXN0b3IiLAorCQkJICAgIFBBUlNFX09QVF9PUFRBUkcsIE5VTEwsIChpbnRwdHJfdCkxIH0sCisJCU9QVF9TRVRfSU5UKDAsICJsaXN0IiwgJmV4dHJhLCAic3lub255bSB0byBtb3JlPS0xIiwgLTEpLAorCQlPUFRfQk9PTEVBTigwLCAibm8tbmFtZSIsICZub19uYW1lLCAic3VwcHJlc3MgbmFtaW5nIHN0cmluZ3MiKSwKKwkJT1BUX0JPT0xFQU4oMCwgImN1cnJlbnQiLCAmd2l0aF9jdXJyZW50X2JyYW5jaCwKKwkJCSAgICAiaW5jbHVkZSB0aGUgY3VycmVudCBicmFuY2giKSwKKwkJT1BUX0JPT0xFQU4oMCwgInNoYTEtbmFtZSIsICZzaGExX25hbWUsCisJCQkgICAgIm5hbWUgY29tbWl0cyB3aXRoIHRoZWlyIG9iamVjdCBuYW1lcyIpLAorCQlPUFRfQk9PTEVBTigwLCAibWVyZ2UtYmFzZSIsICZtZXJnZV9iYXNlLAorCQkJICAgICJzaG93IHBvc3NpYmxlIG1lcmdlIGJhc2VzIiksCisJCU9QVF9CT09MRUFOKDAsICJpbmRlcGVuZGVudCIsICZpbmRlcGVuZGVudCwKKwkJCSAgICAic2hvdyByZWZzIHVucmVhY2hhYmxlIGZyb20gYW55IG90aGVyIHJlZiIpLAorCQlPUFRfQk9PTEVBTigwLCAidG9wby1vcmRlciIsICZsaWZvLAorCQkJICAgICJzaG93IGNvbW1pdHMgaW4gdG9wb2xvZ2ljYWwgb3JkZXIiKSwKKwkJT1BUX0JPT0xFQU4oMCwgInRvcGljcyIsICZ0b3BpY3MsCisJCQkgICAgInNob3cgb25seSBjb21taXRzIG5vdCBvbiB0aGUgZmlyc3QgYnJhbmNoIiksCisJCU9QVF9TRVRfSU5UKDAsICJzcGFyc2UiLCAmZGVuc2UsCisJCQkgICAgInNob3cgbWVyZ2VzIHJlYWNoYWJsZSBmcm9tIG9ubHkgb25lIHRpcCIsIDApLAorCQlPUFRfU0VUX0lOVCgwLCAiZGF0ZS1vcmRlciIsICZsaWZvLAorCQkJICAgICJzaG93IGNvbW1pdHMgd2hlcmUgbm8gcGFyZW50IGNvbWVzIGJlZm9yZSBpdHMgIgorCQkJICAgICJjaGlsZHJlbiIsIDApLAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ2cnLCAicmVmbG9nIiwgJnJlZmxvZ19iYXNlLCAiPG4+Wyw8YmFzZT5dIiwKKwkJCSAgICAic2hvdyA8bj4gbW9zdCByZWNlbnQgcmVmLWxvZyBlbnRyaWVzIHN0YXJ0aW5nIGF0ICIKKwkJCSAgICAiYmFzZSIsCisJCQkgICAgUEFSU0VfT1BUX09QVEFSRyB8IFBBUlNFX09QVF9MSVRFUkFMX0FSR0hFTFAsCisJCQkgICAgcGFyc2VfcmVmbG9nX3BhcmFtIH0sCisJCU9QVF9FTkQoKQorCX07CiAKIAlnaXRfY29uZmlnKGdpdF9zaG93X2JyYW5jaF9jb25maWcsIE5VTEwpOwogCisJaWYgKHNob3dicmFuY2hfdXNlX2NvbG9yID09IC0xKQorCQlzaG93YnJhbmNoX3VzZV9jb2xvciA9IGdpdF91c2VfY29sb3JfZGVmYXVsdDsKKwogCS8qIElmIG5vdGhpbmcgaXMgc3BlY2lmaWVkLCB0cnkgdGhlIGRlZmF1bHQgZmlyc3QgKi8KIAlpZiAoYWMgPT0gMSAmJiBkZWZhdWx0X251bSkgewotCQlhYyA9IGRlZmF1bHRfbnVtICsgMTsKLQkJYXYgPSBkZWZhdWx0X2FyZyAtIDE7IC8qIGljazsgd2Ugd291bGQgbm90IGFkZHJlc3MgYXZbMF0gKi8KKwkJYWMgPSBkZWZhdWx0X251bTsKKwkJYXYgPSBkZWZhdWx0X2FyZzsKIAl9CiAKLQl3aGlsZSAoMSA8IGFjICYmIGF2WzFdWzBdID09ICctJykgewotCQljb25zdCBjaGFyICphcmcgPSBhdlsxXTsKLQkJaWYgKCFzdHJjbXAoYXJnLCAiLS0iKSkgewotCQkJYWMtLTsgYXYrKzsKLQkJCWJyZWFrOwotCQl9Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1hbGwiKSB8fCAhc3RyY21wKGFyZywgIi1hIikpCi0JCQlhbGxfaGVhZHMgPSBhbGxfcmVtb3RlcyA9IDE7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1yZW1vdGVzIikgfHwgIXN0cmNtcChhcmcsICItciIpKQotCQkJYWxsX3JlbW90ZXMgPSAxOwotCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tbW9yZSIpKQotCQkJZXh0cmEgPSAxOwotCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tbGlzdCIpKQotCQkJZXh0cmEgPSAtMTsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLW5hbWUiKSkKLQkJCW5vX25hbWUgPSAxOwotCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tY3VycmVudCIpKQotCQkJd2l0aF9jdXJyZW50X2JyYW5jaCA9IDE7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1zaGExLW5hbWUiKSkKLQkJCXNoYTFfbmFtZSA9IDE7Ci0JCWVsc2UgaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1tb3JlPSIpKQotCQkJZXh0cmEgPSBhdG9pKGFyZyArIDcpOwotCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tbWVyZ2UtYmFzZSIpKQotCQkJbWVyZ2VfYmFzZSA9IDE7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1pbmRlcGVuZGVudCIpKQotCQkJaW5kZXBlbmRlbnQgPSAxOwotCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tdG9wby1vcmRlciIpKQotCQkJbGlmbyA9IDE7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS10b3BpY3MiKSkKLQkJCXRvcGljcyA9IDE7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1zcGFyc2UiKSkKLQkJCWRlbnNlID0gMDsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWRhdGUtb3JkZXIiKSkKLQkJCWxpZm8gPSAwOwotCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tcmVmbG9nIikgfHwgIXN0cmNtcChhcmcsICItZyIpKSB7Ci0JCQlyZWZsb2cgPSBERUZBVUxUX1JFRkxPRzsKLQkJfQotCQllbHNlIGlmICghcHJlZml4Y21wKGFyZywgIi0tcmVmbG9nPSIpKQotCQkJcGFyc2VfcmVmbG9nX3BhcmFtKGFyZyArIDksICZyZWZsb2csICZyZWZsb2dfYmFzZSk7Ci0JCWVsc2UgaWYgKCFwcmVmaXhjbXAoYXJnLCAiLWc9IikpCi0JCQlwYXJzZV9yZWZsb2dfcGFyYW0oYXJnICsgMywgJnJlZmxvZywgJnJlZmxvZ19iYXNlKTsKLQkJZWxzZQotCQkJdXNhZ2Uoc2hvd19icmFuY2hfdXNhZ2UpOwotCQlhYy0tOyBhdisrOwotCX0KLQlhYy0tOyBhdisrOworCWFjID0gcGFyc2Vfb3B0aW9ucyhhYywgYXYsIHByZWZpeCwgYnVpbHRpbl9zaG93X2JyYW5jaF9vcHRpb25zLAorCQkJICAgc2hvd19icmFuY2hfdXNhZ2UsIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOworCWlmIChhbGxfaGVhZHMpCisJCWFsbF9yZW1vdGVzID0gMTsKIAogCWlmIChleHRyYSB8fCByZWZsb2cpIHsKIAkJLyogImxpc3RpbmciIG1vZGUgaXMgaW5jb21wYXRpYmxlIHdpdGgKIAkJICogaW5kZXBlbmRlbnQgbm9yIG1lcmdlLWJhc2UgbW9kZXMuCiAJCSAqLwogCQlpZiAoaW5kZXBlbmRlbnQgfHwgbWVyZ2VfYmFzZSkKLQkJCXVzYWdlKHNob3dfYnJhbmNoX3VzYWdlKTsKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyhzaG93X2JyYW5jaF91c2FnZSwKKwkJCQkJICAgYnVpbHRpbl9zaG93X2JyYW5jaF9vcHRpb25zKTsKIAkJaWYgKHJlZmxvZyAmJiAoKDAgPCBleHRyYSkgfHwgYWxsX2hlYWRzIHx8IGFsbF9yZW1vdGVzKSkKIAkJCS8qCiAJCQkgKiBBc2tpbmcgZm9yIC0tbW9yZSBpbiByZWZsb2cgbW9kZSBkb2VzIG5vdApAQCAtNjc3LDcgKzcyMyw4IEBACiAJCQkgKgogCQkJICogQWxzbyAtLWFsbCBhbmQgLS1yZW1vdGVzIGRvIG5vdCBtYWtlIHNlbnNlIGVpdGhlci4KIAkJCSAqLwotCQkJdXNhZ2Uoc2hvd19icmFuY2hfdXNhZ2VfcmVmbG9nKTsKKwkJCWRpZSgiLS1yZWZsb2cgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tcmVtb3RlcywgIgorCQkJICAgICItLWluZGVwZW5kZW50IG9yIC0tbWVyZ2UtYmFzZSIpOwogCX0KIAogCS8qIElmIG5vdGhpbmcgaXMgc3BlY2lmaWVkLCBzaG93IGFsbCBicmFuY2hlcyBieSBkZWZhdWx0ICovCkBAIC04NDMsOCArODkwLDEwIEBACiAJCQllbHNlIHsKIAkJCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQogCQkJCQlwdXRjaGFyKCcgJyk7Ci0JCQkJcHJpbnRmKCIlYyBbJXNdICIsCi0JCQkJICAgICAgIGlzX2hlYWQgPyAnKicgOiAnIScsIHJlZl9uYW1lW2ldKTsKKwkJCQlwcmludGYoIiVzJWMlcyBbJXNdICIsCisJCQkJICAgICAgIGdldF9jb2xvcl9jb2RlKGkgJSBDT0xVTU5fQ09MT1JTX01BWCksCisJCQkJICAgICAgIGlzX2hlYWQgPyAnKicgOiAnIScsCisJCQkJICAgICAgIGdldF9jb2xvcl9yZXNldF9jb2RlKCksIHJlZl9uYW1lW2ldKTsKIAkJCX0KIAogCQkJaWYgKCFyZWZsb2cpIHsKQEAgLTkwMyw3ICs5NTIsOSBAQAogCQkJCQltYXJrID0gJyonOwogCQkJCWVsc2UKIAkJCQkJbWFyayA9ICcrJzsKLQkJCQlwdXRjaGFyKG1hcmspOworCQkJCXByaW50ZigiJXMlYyVzIiwKKwkJCQkgICAgICAgZ2V0X2NvbG9yX2NvZGUoaSAlIENPTFVNTl9DT0xPUlNfTUFYKSwKKwkJCQkgICAgICAgbWFyaywgZ2V0X2NvbG9yX3Jlc2V0X2NvZGUoKSk7CiAJCQl9CiAJCQlwdXRjaGFyKCcgJyk7CiAJCX0KZGlmZiAtLWdpdCBhL2J1aWx0aW4tc2hvdy1yZWYuYyBiL2J1aWx0aW4tc2hvdy1yZWYuYwppbmRleCBkYzc2YzUwLi4xN2FkYTg4IDEwMDY0NAotLS0gYS9idWlsdGluLXNob3ctcmVmLmMKKysrIGIvYnVpbHRpbi1zaG93LXJlZi5jCkBAIC00LDEyICs0LDE4IEBACiAjaW5jbHVkZSAib2JqZWN0LmgiCiAjaW5jbHVkZSAidGFnLmgiCiAjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCiAKLXN0YXRpYyBjb25zdCBjaGFyIHNob3dfcmVmX3VzYWdlW10gPSAiZ2l0IHNob3ctcmVmIFstcXwtLXF1aWV0XSBbLS12ZXJpZnldIFstaHwtLWhlYWRdIFstZHwtLWRlcmVmZXJlbmNlXSBbLXN8LS1oYXNoWz08bGVuZ3RoPl1dIFstLWFiYnJldls9PGxlbmd0aD5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbcGF0dGVybipdIDwgcmVmLWxpc3QiOworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzaG93X3JlZl91c2FnZVtdID0geworCSJnaXQgc2hvdy1yZWYgWy1xfC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kfC0tZGVyZWZlcmVuY2VdIFstc3wtLWhhc2hbPTxuPl1dIFstLWFiYnJldls9PG4+XV0gWy0tdGFnc10gWy0taGVhZHNdIFstLV0gW3BhdHRlcm4qXSAiLAorCSJnaXQgc2hvdy1yZWYgLS1leGNsdWRlLWV4aXN0aW5nWz1wYXR0ZXJuXSA8IHJlZi1saXN0IiwKKwlOVUxMCit9OwogCi1zdGF0aWMgaW50IGRlcmVmX3RhZ3MgPSAwLCBzaG93X2hlYWQgPSAwLCB0YWdzX29ubHkgPSAwLCBoZWFkc19vbmx5ID0gMCwKLQlmb3VuZF9tYXRjaCA9IDAsIHZlcmlmeSA9IDAsIHF1aWV0ID0gMCwgaGFzaF9vbmx5ID0gMCwgYWJicmV2ID0gMDsKK3N0YXRpYyBpbnQgZGVyZWZfdGFncywgc2hvd19oZWFkLCB0YWdzX29ubHksIGhlYWRzX29ubHksIGZvdW5kX21hdGNoLCB2ZXJpZnksCisJICAgcXVpZXQsIGhhc2hfb25seSwgYWJicmV2LCBleGNsdWRlX2FyZzsKIHN0YXRpYyBjb25zdCBjaGFyICoqcGF0dGVybjsKK3N0YXRpYyBjb25zdCBjaGFyICpleGNsdWRlX2V4aXN0aW5nX2FyZzsKIAogc3RhdGljIHZvaWQgc2hvd19vbmUoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKQEAgLTE1MCw3OSArMTU2LDY2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaGFzaF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWhhc2hfb25seSA9IDE7CisJLyogVXNlIGZ1bGwgbGVuZ3RoIFNIQTEgaWYgbm8gYXJndW1lbnQgKi8KKwlpZiAoIWFyZykKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHBhcnNlX29wdF9hYmJyZXZfY2Iob3B0LCBhcmcsIHVuc2V0KTsKK30KKworc3RhdGljIGludCBleGNsdWRlX2V4aXN0aW5nX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJCSAgICAgaW50IHVuc2V0KQoreworCWV4Y2x1ZGVfYXJnID0gMTsKKwkqKGNvbnN0IGNoYXIgKiopb3B0LT52YWx1ZSA9IGFyZzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoZWxwX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBzaG93X3JlZl9vcHRpb25zW10gPSB7CisJT1BUX0JPT0xFQU4oMCwgInRhZ3MiLCAmdGFnc19vbmx5LCAib25seSBzaG93IHRhZ3MgKGNhbiBiZSBjb21iaW5lZCB3aXRoIGhlYWRzKSIpLAorCU9QVF9CT09MRUFOKDAsICJoZWFkcyIsICZoZWFkc19vbmx5LCAib25seSBzaG93IGhlYWRzIChjYW4gYmUgY29tYmluZWQgd2l0aCB0YWdzKSIpLAorCU9QVF9CT09MRUFOKDAsICJ2ZXJpZnkiLCAmdmVyaWZ5LCAic3RyaWN0ZXIgcmVmZXJlbmNlIGNoZWNraW5nLCAiCisJCSAgICAicmVxdWlyZXMgZXhhY3QgcmVmIHBhdGgiKSwKKwl7IE9QVElPTl9CT09MRUFOLCAnaCcsIE5VTEwsICZzaG93X2hlYWQsIE5VTEwsCisJICAic2hvdyB0aGUgSEVBRCByZWZlcmVuY2UiLAorCSAgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX0hJRERFTiB9LAorCU9QVF9CT09MRUFOKDAsICJoZWFkIiwgJnNob3dfaGVhZCwgInNob3cgdGhlIEhFQUQgcmVmZXJlbmNlIiksCisJT1BUX0JPT0xFQU4oJ2QnLCAiZGVyZWZlcmVuY2UiLCAmZGVyZWZfdGFncywKKwkJICAgICJkZXJlZmVyZW5jZSB0YWdzIGludG8gb2JqZWN0IElEcyIpLAorCXsgT1BUSU9OX0NBTExCQUNLLCAncycsICJoYXNoIiwgJmFiYnJldiwgIm4iLAorCSAgIm9ubHkgc2hvdyBTSEExIGhhc2ggdXNpbmcgPG4+IGRpZ2l0cyIsCisJICBQQVJTRV9PUFRfT1BUQVJHLCAmaGFzaF9jYWxsYmFjayB9LAorCU9QVF9fQUJCUkVWKCZhYmJyZXYpLAorCU9QVF9fUVVJRVQoJnF1aWV0KSwKKwl7IE9QVElPTl9DQUxMQkFDSywgMCwgImV4Y2x1ZGUtZXhpc3RpbmciLCAmZXhjbHVkZV9leGlzdGluZ19hcmcsCisJICAicGF0dGVybiIsICJzaG93IHJlZnMgZnJvbSBzdGRpbiB0aGF0IGFyZW4ndCBpbiBsb2NhbCByZXBvc2l0b3J5IiwKKwkgIFBBUlNFX09QVF9PUFRBUkcgfCBQQVJTRV9PUFRfTk9ORUcsIGV4Y2x1ZGVfZXhpc3RpbmdfY2FsbGJhY2sgfSwKKwl7IE9QVElPTl9DQUxMQkFDSywgMCwgImhlbHAtYWxsIiwgTlVMTCwgTlVMTCwgInNob3cgdXNhZ2UiLAorCSAgUEFSU0VfT1BUX0hJRERFTiB8IFBBUlNFX09QVF9OT0FSRywgaGVscF9jYWxsYmFjayB9LAorCU9QVF9FTkQoKQorfTsKKwogaW50IGNtZF9zaG93X3JlZihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKLQlpbnQgaTsKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhzaG93X3JlZl91c2FnZSwgc2hvd19yZWZfb3B0aW9ucyk7CiAKLQlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7Ci0JCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07Ci0JCWlmICgqYXJnICE9ICctJykgewotCQkJcGF0dGVybiA9IGFyZ3YgKyBpOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLS0iKSkgewotCQkJcGF0dGVybiA9IGFyZ3YgKyBpICsgMTsKLQkJCWlmICghKnBhdHRlcm4pCi0JCQkJcGF0dGVybiA9IE5VTEw7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoIXN0cmNtcChhcmcsICItcSIpIHx8ICFzdHJjbXAoYXJnLCAiLS1xdWlldCIpKSB7Ci0JCQlxdWlldCA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcChhcmcsICItaCIpIHx8ICFzdHJjbXAoYXJnLCAiLS1oZWFkIikpIHsKLQkJCXNob3dfaGVhZCA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcChhcmcsICItZCIpIHx8ICFzdHJjbXAoYXJnLCAiLS1kZXJlZmVyZW5jZSIpKSB7Ci0JCQlkZXJlZl90YWdzID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKGFyZywgIi1zIikgfHwgIXN0cmNtcChhcmcsICItLWhhc2giKSkgewotCQkJaGFzaF9vbmx5ID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghcHJlZml4Y21wKGFyZywgIi0taGFzaD0iKSB8fAotCQkgICAgKCFwcmVmaXhjbXAoYXJnLCAiLS1hYmJyZXYiKSAmJgotCQkgICAgIChhcmdbOF0gPT0gJz0nIHx8IGFyZ1s4XSA9PSAnXDAnKSkpIHsKLQkJCWlmIChhcmdbMl0gIT0gJ2gnICYmICFhcmdbOF0pCi0JCQkJLyogLS1hYmJyZXYgb25seSAqLwotCQkJCWFiYnJldiA9IERFRkFVTFRfQUJCUkVWOwotCQkJZWxzZSB7Ci0JCQkJLyogLS1oYXNoPSBvciAtLWFiYnJldj0gKi8KLQkJCQljaGFyICplbmQ7Ci0JCQkJaWYgKGFyZ1syXSA9PSAnaCcpIHsKLQkJCQkJaGFzaF9vbmx5ID0gMTsKLQkJCQkJYXJnICs9IDc7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQkJYXJnICs9IDk7Ci0JCQkJYWJicmV2ID0gc3RydG91bChhcmcsICZlbmQsIDEwKTsKLQkJCQlpZiAoKmVuZCB8fCBhYmJyZXYgPiA0MCkKLQkJCQkJdXNhZ2Uoc2hvd19yZWZfdXNhZ2UpOwotCQkJCWlmIChhYmJyZXYgPCBNSU5JTVVNX0FCQlJFVikKLQkJCQkJYWJicmV2ID0gTUlOSU1VTV9BQkJSRVY7Ci0JCQl9Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcChhcmcsICItLXZlcmlmeSIpKSB7Ci0JCQl2ZXJpZnkgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLS10YWdzIikpIHsKLQkJCXRhZ3Nfb25seSA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcChhcmcsICItLWhlYWRzIikpIHsKLQkJCWhlYWRzX29ubHkgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1leGNsdWRlLWV4aXN0aW5nIikpCi0JCQlyZXR1cm4gZXhjbHVkZV9leGlzdGluZyhOVUxMKTsKLQkJaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1leGNsdWRlLWV4aXN0aW5nPSIpKQotCQkJcmV0dXJuIGV4Y2x1ZGVfZXhpc3RpbmcoYXJnICsgMTkpOwotCQl1c2FnZShzaG93X3JlZl91c2FnZSk7Ci0JfQorCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgc2hvd19yZWZfb3B0aW9ucywKKwkJCSAgICAgc2hvd19yZWZfdXNhZ2UsIFBBUlNFX09QVF9OT19JTlRFUk5BTF9IRUxQKTsKKworCWlmIChleGNsdWRlX2FyZykKKwkJcmV0dXJuIGV4Y2x1ZGVfZXhpc3RpbmcoZXhjbHVkZV9leGlzdGluZ19hcmcpOworCisJcGF0dGVybiA9IGFyZ3Y7CisJaWYgKCEqcGF0dGVybikKKwkJcGF0dGVybiA9IE5VTEw7CiAKIAlpZiAodmVyaWZ5KSB7CiAJCWlmICghcGF0dGVybikKZGlmZiAtLWdpdCBhL2J1aWx0aW4tc3RyaXBzcGFjZS5jIGIvYnVpbHRpbi1zdHJpcHNwYWNlLmMKaW5kZXggZDZlMzg5Ni4uNGQzYjkzZiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1zdHJpcHNwYWNlLmMKKysrIGIvYnVpbHRpbi1zdHJpcHNwYWNlLmMKQEAgLTczLDEyICs3MywxNCBAQAogCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CiAJaW50IHN0cmlwX2NvbW1lbnRzID0gMDsKIAotCWlmIChhcmdjID4gMSAmJiAoIXN0cmNtcChhcmd2WzFdLCAiLXMiKSB8fAorCWlmIChhcmdjID09IDIgJiYgKCFzdHJjbXAoYXJndlsxXSwgIi1zIikgfHwKIAkJCQkhc3RyY21wKGFyZ3ZbMV0sICItLXN0cmlwLWNvbW1lbnRzIikpKQogCQlzdHJpcF9jb21tZW50cyA9IDE7CisJZWxzZSBpZiAoYXJnYyA+IDEpCisJCXVzYWdlKCJnaXQgc3RyaXBzcGFjZSBbLXMgfCAtLXN0cmlwLWNvbW1lbnRzXSA8IDxzdHJlYW0+Iik7CiAKIAlpZiAoc3RyYnVmX3JlYWQoJmJ1ZiwgMCwgMTAyNCkgPCAwKQotCQlkaWUoImNvdWxkIG5vdCByZWFkIHRoZSBpbnB1dCIpOworCQlkaWVfZXJybm8oImNvdWxkIG5vdCByZWFkIHRoZSBpbnB1dCIpOwogCiAJc3RyaXBzcGFjZSgmYnVmLCBzdHJpcF9jb21tZW50cyk7CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4tc3ltYm9saWMtcmVmLmMgYi9idWlsdGluLXN5bWJvbGljLXJlZi5jCmluZGV4IDZhZTZiY2MuLmNhODU1YTUgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tc3ltYm9saWMtcmVmLmMKKysrIGIvYnVpbHRpbi1zeW1ib2xpYy1yZWYuYwpAQCAtMzYsNyArMzYsOCBAQAogCX07CiAKIAlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7Ci0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgZ2l0X3N5bWJvbGljX3JlZl91c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLAorCQkJICAgICBnaXRfc3ltYm9saWNfcmVmX3VzYWdlLCAwKTsKIAlpZiAobXNnICYmISptc2cpCiAJCWRpZSgiUmVmdXNpbmcgdG8gcGVyZm9ybSB1cGRhdGUgd2l0aCBlbXB0eSBtZXNzYWdlIik7CiAJc3dpdGNoIChhcmdjKSB7CmRpZmYgLS1naXQgYS9idWlsdGluLXRhZy5jIGIvYnVpbHRpbi10YWcuYwppbmRleCBlNTQ0NDMwLi40ZWYxYzRmIDEwMDY0NAotLS0gYS9idWlsdGluLXRhZy5jCisrKyBiL2J1aWx0aW4tdGFnLmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogewogCWlmIChkZWxldGVfcmVmKHJlZiwgc2hhMSwgMCkpCiAJCXJldHVybiAxOwotCXByaW50ZigiRGVsZXRlZCB0YWcgJyVzJ1xuIiwgbmFtZSk7CisJcHJpbnRmKCJEZWxldGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iLCBuYW1lLCBmaW5kX3VuaXF1ZV9hYmJyZXYoc2hhMSwgREVGQVVMVF9BQkJSRVYpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzA4LDggKzMwOCw3IEBACiAJCXBhdGggPSBnaXRfcGF0aGR1cCgiVEFHX0VESVRNU0ciKTsKIAkJZmQgPSBvcGVuKHBhdGgsIE9fQ1JFQVQgfCBPX1RSVU5DIHwgT19XUk9OTFksIDA2MDApOwogCQlpZiAoZmQgPCAwKQotCQkJZGllKCJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJzogJXMiLAotCQkJCQkJcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygiY291bGQgbm90IGNyZWF0ZSBmaWxlICclcyciLCBwYXRoKTsKIAogCQlpZiAoIWlzX251bGxfc2hhMShwcmV2KSkKIAkJCXdyaXRlX3RhZ19ib2R5KGZkLCBwcmV2KTsKQEAgLTM3Niw4ICszNzUsOCBAQAogCXN0cnVjdCBjb21taXRfbGlzdCAqd2l0aF9jb21taXQgPSBOVUxMOwogCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0gewogCQlPUFRfQk9PTEVBTignbCcsIE5VTEwsICZsaXN0LCAibGlzdCB0YWcgbmFtZXMiKSwKLQkJeyBPUFRJT05fSU5URUdFUiwgJ24nLCBOVUxMLCAmbGluZXMsIE5VTEwsCi0JCQkJInByaW50IG4gbGluZXMgb2YgZWFjaCB0YWcgbWVzc2FnZSIsCisJCXsgT1BUSU9OX0lOVEVHRVIsICduJywgTlVMTCwgJmxpbmVzLCAibiIsCisJCQkJInByaW50IDxuPiBsaW5lcyBvZiBlYWNoIHRhZyBtZXNzYWdlIiwKIAkJCQlQQVJTRV9PUFRfT1BUQVJHLCBOVUxMLCAxIH0sCiAJCU9QVF9CT09MRUFOKCdkJywgTlVMTCwgJmRlbGV0ZSwgImRlbGV0ZSB0YWdzIiksCiAJCU9QVF9CT09MRUFOKCd2JywgTlVMTCwgJnZlcmlmeSwgInZlcmlmeSB0YWdzIiksCkBAIC0zODcsMTEgKzM4NiwxMSBAQAogCQkJCQkiYW5ub3RhdGVkIHRhZywgbmVlZHMgYSBtZXNzYWdlIiksCiAJCU9QVF9DQUxMQkFDSygnbScsIE5VTEwsICZtc2csICJtc2ciLAogCQkJICAgICAibWVzc2FnZSBmb3IgdGhlIHRhZyIsIHBhcnNlX21zZ19hcmcpLAotCQlPUFRfU1RSSU5HKCdGJywgTlVMTCwgJm1zZ2ZpbGUsICJmaWxlIiwgIm1lc3NhZ2UgaW4gYSBmaWxlIiksCisJCU9QVF9GSUxFTkFNRSgnRicsIE5VTEwsICZtc2dmaWxlLCAibWVzc2FnZSBpbiBhIGZpbGUiKSwKIAkJT1BUX0JPT0xFQU4oJ3MnLCBOVUxMLCAmc2lnbiwgImFubm90YXRlZCBhbmQgR1BHLXNpZ25lZCB0YWciKSwKIAkJT1BUX1NUUklORygndScsIE5VTEwsICZrZXlpZCwgImtleS1pZCIsCiAJCQkJCSJ1c2UgYW5vdGhlciBrZXkgdG8gc2lnbiB0aGUgdGFnIiksCi0JCU9QVF9CT09MRUFOKCdmJywgTlVMTCwgJmZvcmNlLCAicmVwbGFjZSB0aGUgdGFnIGlmIGV4aXN0cyIpLAorCQlPUFRfQk9PTEVBTignZicsICJmb3JjZSIsICZmb3JjZSwgInJlcGxhY2UgdGhlIHRhZyBpZiBleGlzdHMiKSwKIAogCQlPUFRfR1JPVVAoIlRhZyBsaXN0aW5nIG9wdGlvbnMiKSwKIAkJewpAQCAtNDA1LDggKzQwNCw3IEBACiAKIAlnaXRfY29uZmlnKGdpdF90YWdfY29uZmlnLCBOVUxMKTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGdpdF90YWdfdXNhZ2UsIDApOwotCW1zZ2ZpbGUgPSBwYXJzZV9vcHRpb25zX2ZpeF9maWxlbmFtZShwcmVmaXgsIG1zZ2ZpbGUpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZ2l0X3RhZ191c2FnZSwgMCk7CiAKIAlpZiAoa2V5aWQpIHsKIAkJc2lnbiA9IDE7CkBAIC00NDQsMTEgKzQ0MiwxMSBAQAogCQllbHNlIHsKIAkJCWlmICghc3RyY21wKG1zZ2ZpbGUsICItIikpIHsKIAkJCQlpZiAoc3RyYnVmX3JlYWQoJmJ1ZiwgMCwgMTAyNCkgPCAwKQotCQkJCQlkaWUoImNhbm5vdCByZWFkICVzIiwgbXNnZmlsZSk7CisJCQkJCWRpZV9lcnJubygiY2Fubm90IHJlYWQgJyVzJyIsIG1zZ2ZpbGUpOwogCQkJfSBlbHNlIHsKIAkJCQlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmYnVmLCBtc2dmaWxlLCAxMDI0KSA8IDApCi0JCQkJCWRpZSgiY291bGQgbm90IG9wZW4gb3IgcmVhZCAnJXMnOiAlcyIsCi0JCQkJCQltc2dmaWxlLCBzdHJlcnJvcihlcnJubykpOworCQkJCQlkaWVfZXJybm8oImNvdWxkIG5vdCBvcGVuIG9yIHJlYWQgJyVzJyIsCisJCQkJCQltc2dmaWxlKTsKIAkJCX0KIAkJfQogCX0KQEAgLTQ4MSw2ICs0NzksOCBAQAogCQlkaWUoIiVzOiBjYW5ub3QgbG9jayB0aGUgcmVmIiwgcmVmKTsKIAlpZiAod3JpdGVfcmVmX3NoYTEobG9jaywgb2JqZWN0LCBOVUxMKSA8IDApCiAJCWRpZSgiJXM6IGNhbm5vdCB1cGRhdGUgdGhlIHJlZiIsIHJlZik7CisJaWYgKGZvcmNlICYmIGhhc2hjbXAocHJldiwgb2JqZWN0KSkKKwkJcHJpbnRmKCJVcGRhdGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iLCB0YWcsIGZpbmRfdW5pcXVlX2FiYnJldihwcmV2LCBERUZBVUxUX0FCQlJFVikpOwogCiAJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9idWlsdGluLXRhci10cmVlLmMgYi9idWlsdGluLXRhci10cmVlLmMKaW5kZXggZjg4ZTcyMS4uM2YxZTcwMSAxMDA2NDQKLS0tIGEvYnVpbHRpbi10YXItdHJlZS5jCisrKyBiL2J1aWx0aW4tdGFyLXRyZWUuYwpAQCAtMTEsNiArMTEsOSBAQAogImdpdCB0YXItdHJlZSBbLS1yZW1vdGU9PHJlcG8+XSA8dHJlZS1pc2g+IFtiYXNlZGlyXVxuIgogIioqKiBOb3RlIHRoYXQgdGhpcyBjb21tYW5kIGlzIG5vdyBkZXByZWNhdGVkOyB1c2UgXCJnaXQgYXJjaGl2ZVwiIGluc3RlYWQuIjsKIAorc3RhdGljIGNvbnN0IGNoYXIgYnVpbHRpbl9nZXRfdGFyX2NvbW1pdF9pZF91c2FnZVtdID0KKyJnaXQgZ2V0LXRhci1jb21taXQtaWQgPCA8dGFyZmlsZT4iOworCiBpbnQgY21kX3Rhcl90cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQogewogCS8qCkBAIC04MSw2ICs4NCw5IEBACiAJY2hhciAqY29udGVudCA9IGJ1ZmZlciArIFJFQ09SRFNJWkU7CiAJc3NpemVfdCBuOwogCisJaWYgKGFyZ2MgIT0gMSkKKwkJdXNhZ2UoYnVpbHRpbl9nZXRfdGFyX2NvbW1pdF9pZF91c2FnZSk7CisKIAluID0gcmVhZF9pbl9mdWxsKDAsIGJ1ZmZlciwgSEVBREVSU0laRSk7CiAJaWYgKG4gPCBIRUFERVJTSVpFKQogCQlkaWUoImdpdCBnZXQtdGFyLWNvbW1pdC1pZDogcmVhZCBlcnJvciIpOwpAQCAtOTEsNyArOTcsNyBAQAogCiAJbiA9IHdyaXRlX2luX2Z1bGwoMSwgY29udGVudCArIDExLCA0MSk7CiAJaWYgKG4gPCA0MSkKLQkJZGllKCJnaXQgZ2V0LXRhci1jb21taXQtaWQ6IHdyaXRlIGVycm9yIik7CisJCWRpZV9lcnJubygiZ2l0IGdldC10YXItY29tbWl0LWlkOiB3cml0ZSBlcnJvciIpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS91bnBhY2stZmlsZS5jIGIvYnVpbHRpbi11bnBhY2stZmlsZS5jCnNpbWlsYXJpdHkgaW5kZXggODElCnJlbmFtZSBmcm9tIHVucGFjay1maWxlLmMKcmVuYW1lIHRvIGJ1aWx0aW4tdW5wYWNrLWZpbGUuYwppbmRleCA3NWNkMmYxLi42MDg1OTBhIDEwMDY0NAotLS0gYS91bnBhY2stZmlsZS5jCisrKyBiL2J1aWx0aW4tdW5wYWNrLWZpbGUuYwpAQCAtMTcsMjMgKzE3LDIwIEBACiAJc3RyY3B5KHBhdGgsICIubWVyZ2VfZmlsZV9YWFhYWFgiKTsKIAlmZCA9IHhta3N0ZW1wKHBhdGgpOwogCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBidWYsIHNpemUpICE9IHNpemUpCi0JCWRpZSgidW5hYmxlIHRvIHdyaXRlIHRlbXAtZmlsZSIpOworCQlkaWVfZXJybm8oInVuYWJsZSB0byB3cml0ZSB0ZW1wLWZpbGUiKTsKIAljbG9zZShmZCk7CiAJcmV0dXJuIHBhdGg7CiB9CiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK2ludCBjbWRfdW5wYWNrX2ZpbGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CiAJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKIAotCWdpdF9leHRyYWN0X2FyZ3YwX3BhdGgoYXJndlswXSk7Ci0KLQlpZiAoYXJnYyAhPSAyKQorCWlmIChhcmdjICE9IDIgfHwgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKIAkJdXNhZ2UoImdpdCB1bnBhY2stZmlsZSA8c2hhMT4iKTsKIAlpZiAoZ2V0X3NoYTEoYXJndlsxXSwgc2hhMSkpCiAJCWRpZSgiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiLCBhcmd2WzFdKTsKIAotCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKIAlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CiAKIAlwdXRzKGNyZWF0ZV90ZW1wX2ZpbGUoc2hhMSkpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi11bnBhY2stb2JqZWN0cy5jIGIvYnVpbHRpbi11bnBhY2stb2JqZWN0cy5jCmluZGV4IDhlODMxYmUuLjY4NTU2NmUgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tdW5wYWNrLW9iamVjdHMuYworKysgYi9idWlsdGluLXVucGFjay1vYmplY3RzLmMKQEAgLTY4LDcgKzY4LDcgQEAKIAkJaWYgKHJldCA8PSAwKSB7CiAJCQlpZiAoIXJldCkKIAkJCQlkaWUoImVhcmx5IEVPRiIpOwotCQkJZGllKCJyZWFkIGVycm9yIG9uIGlucHV0OiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCQlkaWVfZXJybm8oInJlYWQgZXJyb3Igb24gaW5wdXQiKTsKIAkJfQogCQlsZW4gKz0gcmV0OwogCX0gd2hpbGUgKGxlbiA8IG1pbik7CkBAIC0xNTgsNyArMTU4LDcgQEAKICNkZWZpbmUgRkxBR19XUklUVEVOICgxdTw8MjEpCiAKIHN0YXRpYyBzdHJ1Y3Qgb2JqX2luZm8gKm9ial9saXN0OwotdW5zaWduZWQgbnJfb2JqZWN0czsKK3N0YXRpYyB1bnNpZ25lZCBucl9vYmplY3RzOwogCiAvKgogICogQ2FsbGVkIG9ubHkgZnJvbSBjaGVja19vYmplY3QoKSBhZnRlciBpdCB2ZXJpZmllZCB0aGlzIG9iamVjdApAQCAtMTgxLDEwICsxODEsMTAgQEAKIHN0YXRpYyBpbnQgY2hlY2tfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iaiwgaW50IHR5cGUsIHZvaWQgKmRhdGEpCiB7CiAJaWYgKCFvYmopCi0JCXJldHVybiAwOworCQlyZXR1cm4gMTsKIAogCWlmIChvYmotPmZsYWdzICYgRkxBR19XUklUVEVOKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIDA7CiAKIAlpZiAodHlwZSAhPSBPQkpfQU5ZICYmIG9iai0+dHlwZSAhPSB0eXBlKQogCQlkaWUoIm9iamVjdCB0eXBlIG1pc21hdGNoIik7CkBAIC0xOTUsMjIgKzE5NSwyNCBAQAogCQlpZiAodHlwZSAhPSBvYmotPnR5cGUgfHwgdHlwZSA8PSAwKQogCQkJZGllKCJvYmplY3Qgb2YgdW5leHBlY3RlZCB0eXBlIik7CiAJCW9iai0+ZmxhZ3MgfD0gRkxBR19XUklUVEVOOwotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKGZzY2tfb2JqZWN0KG9iaiwgMSwgZnNja19lcnJvcl9mdW5jdGlvbikpCiAJCWRpZSgiRXJyb3IgaW4gb2JqZWN0Iik7Ci0JaWYgKCFmc2NrX3dhbGsob2JqLCBjaGVja19vYmplY3QsIDApKQorCWlmIChmc2NrX3dhbGsob2JqLCBjaGVja19vYmplY3QsIE5VTEwpKQogCQlkaWUoIkVycm9yIG9uIHJlYWNoYWJsZSBvYmplY3RzIG9mICVzIiwgc2hhMV90b19oZXgob2JqLT5zaGExKSk7CiAJd3JpdGVfY2FjaGVkX29iamVjdChvYmopOwotCXJldHVybiAxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCB3cml0ZV9yZXN0KHZvaWQpCiB7CiAJdW5zaWduZWQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKQotCQljaGVja19vYmplY3Qob2JqX2xpc3RbaV0ub2JqLCBPQkpfQU5ZLCAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CisJCWlmIChvYmpfbGlzdFtpXS5vYmopCisJCQljaGVja19vYmplY3Qob2JqX2xpc3RbaV0ub2JqLCBPQkpfQU5ZLCBOVUxMKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGFkZGVkX29iamVjdCh1bnNpZ25lZCBuciwgZW51bSBvYmplY3RfdHlwZSB0eXBlLApAQCAtNDk1LDYgKzQ5Nyw4IEBACiAJaW50IGk7CiAJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKIAorCXJlYWRfcmVwbGFjZV9yZWZzID0gMDsKKwogCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKIAogCXF1aWV0ID0gIWlzYXR0eSgyKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tdXBkYXRlLWluZGV4LmMgYi9idWlsdGluLXVwZGF0ZS1pbmRleC5jCmluZGV4IDkyYmVhYWYuLjNhYjIxNGQgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tdXBkYXRlLWluZGV4LmMKKysrIGIvYnVpbHRpbi11cGRhdGUtaW5kZXguYwpAQCAtOSw2ICs5LDcgQEAKICNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKICNpbmNsdWRlICJidWlsdGluLmgiCiAjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInJlc29sdmUtdW5kby5oIgogCiAvKgogICogRGVmYXVsdCB0byBub3QgYWxsb3dpbmcgY2hhbmdlcyB0byB0aGUgbGlzdCBvZiBmaWxlcy4gVGhlCkBAIC0yNCw5ICsyNSwxMSBAQAogc3RhdGljIGludCBmb3JjZV9yZW1vdmU7CiBzdGF0aWMgaW50IHZlcmJvc2U7CiBzdGF0aWMgaW50IG1hcmtfdmFsaWRfb25seTsKLSNkZWZpbmUgTUFSS19WQUxJRCAxCi0jZGVmaW5lIFVOTUFSS19WQUxJRCAyCitzdGF0aWMgaW50IG1hcmtfc2tpcF93b3JrdHJlZV9vbmx5OworI2RlZmluZSBNQVJLX0ZMQUcgMQorI2RlZmluZSBVTk1BUktfRkxBRyAyCiAKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCiBzdGF0aWMgdm9pZCByZXBvcnQoY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJdmFfbGlzdCB2cDsKQEAgLTQwLDE5ICs0MywxNSBAQAogCXZhX2VuZCh2cCk7CiB9CiAKLXN0YXRpYyBpbnQgbWFya192YWxpZChjb25zdCBjaGFyICpwYXRoKQorc3RhdGljIGludCBtYXJrX2NlX2ZsYWdzKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmbGFnLCBpbnQgbWFyaykKIHsKIAlpbnQgbmFtZWxlbiA9IHN0cmxlbihwYXRoKTsKIAlpbnQgcG9zID0gY2FjaGVfbmFtZV9wb3MocGF0aCwgbmFtZWxlbik7CiAJaWYgKDAgPD0gcG9zKSB7Ci0JCXN3aXRjaCAobWFya192YWxpZF9vbmx5KSB7Ci0JCWNhc2UgTUFSS19WQUxJRDoKLQkJCWFjdGl2ZV9jYWNoZVtwb3NdLT5jZV9mbGFncyB8PSBDRV9WQUxJRDsKLQkJCWJyZWFrOwotCQljYXNlIFVOTUFSS19WQUxJRDoKLQkJCWFjdGl2ZV9jYWNoZVtwb3NdLT5jZV9mbGFncyAmPSB+Q0VfVkFMSUQ7Ci0JCQlicmVhazsKLQkJfQorCQlpZiAobWFyaykKKwkJCWFjdGl2ZV9jYWNoZVtwb3NdLT5jZV9mbGFncyB8PSBmbGFnOworCQllbHNlCisJCQlhY3RpdmVfY2FjaGVbcG9zXS0+Y2VfZmxhZ3MgJj0gfmZsYWc7CiAJCWNhY2hlX3RyZWVfaW52YWxpZGF0ZV9wYXRoKGFjdGl2ZV9jYWNoZV90cmVlLCBwYXRoKTsKIAkJYWN0aXZlX2NhY2hlX2NoYW5nZWQgPSAxOwogCQlyZXR1cm4gMDsKQEAgLTE3NSwyOSArMTc0LDI5IEBACiAJcmV0dXJuIGVycm9yKCIlczogaXMgYSBkaXJlY3RvcnkgLSBhZGQgZmlsZXMgaW5zaWRlIGluc3RlYWQiLCBwYXRoKTsKIH0KIAotLyoKLSAqIFByb2Nlc3MgYSByZWd1bGFyIGZpbGUKLSAqLwotc3RhdGljIGludCBwcm9jZXNzX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgaW50IGxlbiwgc3RydWN0IHN0YXQgKnN0KQotewotCWludCBwb3MgPSBjYWNoZV9uYW1lX3BvcyhwYXRoLCBsZW4pOwotCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBwb3MgPCAwID8gTlVMTCA6IGFjdGl2ZV9jYWNoZVtwb3NdOwotCi0JaWYgKGNlICYmIFNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSkKLQkJcmV0dXJuIGVycm9yKCIlcyBpcyBhbHJlYWR5IGEgZ2l0bGluaywgbm90IHJlcGxhY2luZyIsIHBhdGgpOwotCi0JcmV0dXJuIGFkZF9vbmVfcGF0aChjZSwgcGF0aCwgbGVuLCBzdCk7Ci19Ci0KIHN0YXRpYyBpbnQgcHJvY2Vzc19wYXRoKGNvbnN0IGNoYXIgKnBhdGgpCiB7Ci0JaW50IGxlbjsKKwlpbnQgcG9zLCBsZW47CiAJc3RydWN0IHN0YXQgc3Q7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKIAogCWxlbiA9IHN0cmxlbihwYXRoKTsKIAlpZiAoaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKHBhdGgsIGxlbikpCiAJCXJldHVybiBlcnJvcigiJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIiwgcGF0aCk7CiAKKwlwb3MgPSBjYWNoZV9uYW1lX3BvcyhwYXRoLCBsZW4pOworCWNlID0gcG9zIDwgMCA/IE5VTEwgOiBhY3RpdmVfY2FjaGVbcG9zXTsKKwlpZiAoY2UgJiYgY2Vfc2tpcF93b3JrdHJlZShjZSkpIHsKKwkJLyoKKwkJICogd29ya2luZyBkaXJlY3RvcnkgdmVyc2lvbiBpcyBhc3N1bWVkICJnb29kIgorCQkgKiBzbyB1cGRhdGluZyBpdCBkb2VzIG5vdCBtYWtlIHNlbnNlLgorCQkgKiBPbiB0aGUgb3RoZXIgaGFuZCwgcmVtb3ZpbmcgaXQgZnJvbSBpbmRleCBzaG91bGQgd29yaworCQkgKi8KKwkJaWYgKGFsbG93X3JlbW92ZSAmJiByZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGgpKQorCQkJcmV0dXJuIGVycm9yKCIlczogY2Fubm90IHJlbW92ZSBmcm9tIHRoZSBpbmRleCIsIHBhdGgpOworCQlyZXR1cm4gMDsKKwl9CisKIAkvKgogCSAqIEZpcnN0IHRoaW5ncyBmaXJzdDogZ2V0IHRoZSBzdGF0IGluZm9ybWF0aW9uLCB0byBkZWNpZGUKIAkgKiB3aGF0IHRvIGRvIGFib3V0IHRoZSBwYXRobmFtZSEKQEAgLTIwOCw3ICsyMDcsMTMgQEAKIAlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkKIAkJcmV0dXJuIHByb2Nlc3NfZGlyZWN0b3J5KHBhdGgsIGxlbiwgJnN0KTsKIAotCXJldHVybiBwcm9jZXNzX2ZpbGUocGF0aCwgbGVuLCAmc3QpOworCS8qCisJICogUHJvY2VzcyBhIHJlZ3VsYXIgZmlsZQorCSAqLworCWlmIChjZSAmJiBTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpCisJCXJldHVybiBlcnJvcigiJXMgaXMgYWxyZWFkeSBhIGdpdGxpbmssIG5vdCByZXBsYWNpbmciLCBwYXRoKTsKKworCXJldHVybiBhZGRfb25lX3BhdGgoY2UsIHBhdGgsIGxlbiwgJnN0KTsKIH0KIAogc3RhdGljIGludCBhZGRfY2FjaGVpbmZvKHVuc2lnbmVkIGludCBtb2RlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLApAQCAtMjc2LDcgKzI4MSwxMiBAQAogCQlnb3RvIGZyZWVfcmV0dXJuOwogCX0KIAlpZiAobWFya192YWxpZF9vbmx5KSB7Ci0JCWlmIChtYXJrX3ZhbGlkKHApKQorCQlpZiAobWFya19jZV9mbGFncyhwLCBDRV9WQUxJRCwgbWFya192YWxpZF9vbmx5ID09IE1BUktfRkxBRykpCisJCQlkaWUoIlVuYWJsZSB0byBtYXJrIGZpbGUgJXMiLCBwYXRoKTsKKwkJZ290byBmcmVlX3JldHVybjsKKwl9CisJaWYgKG1hcmtfc2tpcF93b3JrdHJlZV9vbmx5KSB7CisJCWlmIChtYXJrX2NlX2ZsYWdzKHAsIENFX1NLSVBfV09SS1RSRUUsIG1hcmtfc2tpcF93b3JrdHJlZV9vbmx5ID09IE1BUktfRkxBRykpCiAJCQlkaWUoIlVuYWJsZSB0byBtYXJrIGZpbGUgJXMiLCBwYXRoKTsKIAkJZ290byBmcmVlX3JldHVybjsKIAl9CkBAIC0zODgsNyArMzk4LDcgQEAKIH0KIAogc3RhdGljIGNvbnN0IGNoYXIgdXBkYXRlX2luZGV4X3VzYWdlW10gPQotImdpdCB1cGRhdGUtaW5kZXggWy1xXSBbLS1hZGRdIFstLXJlcGxhY2VdIFstLXJlbW92ZV0gWy0tdW5tZXJnZWRdIFstLXJlZnJlc2hdIFstLXJlYWxseS1yZWZyZXNoXSBbLS1jYWNoZWluZm9dIFstLWNobW9kPSgrfC0peF0gWy0tYXNzdW1lLXVuY2hhbmdlZF0gWy0taW5mby1vbmx5XSBbLS1mb3JjZS1yZW1vdmVdIFstLXN0ZGluXSBbLS1pbmRleC1pbmZvXSBbLS11bnJlc29sdmVdIFstLWFnYWluIHwgLWddIFstLWlnbm9yZS1taXNzaW5nXSBbLXpdIFstLXZlcmJvc2VdIFstLV0gPGZpbGU+Li4uIjsKKyJnaXQgdXBkYXRlLWluZGV4IFstcV0gWy0tYWRkXSBbLS1yZXBsYWNlXSBbLS1yZW1vdmVdIFstLXVubWVyZ2VkXSBbLS1yZWZyZXNoXSBbLS1yZWFsbHktcmVmcmVzaF0gWy0tY2FjaGVpbmZvXSBbLS1jaG1vZD0oK3wtKXhdIFstLWFzc3VtZS11bmNoYW5nZWRdIFstLXNraXAtd29ya3RyZWV8LS1uby1za2lwLXdvcmt0cmVlXSBbLS1pbmZvLW9ubHldIFstLWZvcmNlLXJlbW92ZV0gWy0tc3RkaW5dIFstLWluZGV4LWluZm9dIFstLXVucmVzb2x2ZV0gWy0tYWdhaW4gfCAtZ10gWy0taWdub3JlLW1pc3NpbmddIFstel0gWy0tdmVyYm9zZV0gWy0tXSA8ZmlsZT4uLi4iOwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBoZWFkX3NoYTFbMjBdOwogc3RhdGljIHVuc2lnbmVkIGNoYXIgbWVyZ2VfaGVhZF9zaGExWzIwXTsKQEAgLTQzMSw3ICs0NDEsMTggQEAKIAogCS8qIFNlZSBpZiB0aGVyZSBpcyBzdWNoIGVudHJ5IGluIHRoZSBpbmRleC4gKi8KIAlwb3MgPSBjYWNoZV9uYW1lX3BvcyhwYXRoLCBuYW1lbGVuKTsKLQlpZiAocG9zIDwgMCkgeworCWlmICgwIDw9IHBvcykgeworCQkvKiBhbHJlYWR5IG1lcmdlZCAqLworCQlwb3MgPSB1bm1lcmdlX2NhY2hlX2VudHJ5X2F0KHBvcyk7CisJCWlmIChwb3MgPCBhY3RpdmVfbnIpIHsKKwkJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKKwkJCWlmIChjZV9zdGFnZShjZSkgJiYKKwkJCSAgICBjZV9uYW1lbGVuKGNlKSA9PSBuYW1lbGVuICYmCisJCQkgICAgIW1lbWNtcChjZS0+bmFtZSwgcGF0aCwgbmFtZWxlbikpCisJCQkJcmV0dXJuIDA7CisJCX0KKwkJLyogbm8gcmVzb2x2ZS11bmRvIGluZm9ybWF0aW9uOyBmYWxsIGJhY2sgKi8KKwl9IGVsc2UgewogCQkvKiBJZiB0aGVyZSBpc24ndCwgZWl0aGVyIGl0IGlzIHVubWVyZ2VkLCBvcgogCQkgKiByZXNvbHZlZCBhcyAicmVtb3ZlZCIgYnkgbWlzdGFrZS4gIFdlIGRvIG5vdAogCQkgKiB3YW50IHRvIGRvIGFueXRoaW5nIGluIHRoZSBmb3JtZXIgY2FzZS4KQEAgLTY0NywxMSArNjY4LDE5IEBACiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlpZiAoIXN0cmNtcChwYXRoLCAiLS1hc3N1bWUtdW5jaGFuZ2VkIikpIHsKLQkJCQltYXJrX3ZhbGlkX29ubHkgPSBNQVJLX1ZBTElEOworCQkJCW1hcmtfdmFsaWRfb25seSA9IE1BUktfRkxBRzsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWlmICghc3RyY21wKHBhdGgsICItLW5vLWFzc3VtZS11bmNoYW5nZWQiKSkgewotCQkJCW1hcmtfdmFsaWRfb25seSA9IFVOTUFSS19WQUxJRDsKKwkJCQltYXJrX3ZhbGlkX29ubHkgPSBVTk1BUktfRkxBRzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKHBhdGgsICItLW5vLXNraXAtd29ya3RyZWUiKSkgeworCQkJCW1hcmtfc2tpcF93b3JrdHJlZV9vbmx5ID0gVU5NQVJLX0ZMQUc7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChwYXRoLCAiLS1za2lwLXdvcmt0cmVlIikpIHsKKwkJCQltYXJrX3NraXBfd29ya3RyZWVfb25seSA9IE1BUktfRkxBRzsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWlmICghc3RyY21wKHBhdGgsICItLWluZm8tb25seSIpKSB7CkBAIC03MDIsNiArNzMxLDEwIEBACiAJCQkJdmVyYm9zZSA9IDE7CiAJCQkJY29udGludWU7CiAJCQl9CisJCQlpZiAoIXN0cmNtcChwYXRoLCAiLS1jbGVhci1yZXNvbHZlLXVuZG8iKSkgeworCQkJCXJlc29sdmVfdW5kb19jbGVhcigpOworCQkJCWNvbnRpbnVlOworCQkJfQogCQkJaWYgKCFzdHJjbXAocGF0aCwgIi1oIikgfHwgIXN0cmNtcChwYXRoLCAiLS1oZWxwIikpCiAJCQkJdXNhZ2UodXBkYXRlX2luZGV4X3VzYWdlKTsKIAkJCWRpZSgidW5rbm93biBvcHRpb24gJXMiLCBwYXRoKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tdXBkYXRlLXJlZi5jIGIvYnVpbHRpbi11cGRhdGUtcmVmLmMKaW5kZXggMzc4ZGMxYi4uNzZiYTFkNSAxMDA2NDQKLS0tIGEvYnVpbHRpbi11cGRhdGUtcmVmLmMKKysrIGIvYnVpbHRpbi11cGRhdGUtcmVmLmMKQEAgLTIzLDcgKzIzLDggQEAKIAl9OwogCiAJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGdpdF91cGRhdGVfcmVmX3VzYWdlLCAwKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGdpdF91cGRhdGVfcmVmX3VzYWdlLAorCQkJICAgICAwKTsKIAlpZiAobXNnICYmICEqbXNnKQogCQlkaWUoIlJlZnVzaW5nIHRvIHBlcmZvcm0gdXBkYXRlIHdpdGggZW1wdHkgbWVzc2FnZS4iKTsKIApkaWZmIC0tZ2l0IGEvYnVpbHRpbi11cGRhdGUtc2VydmVyLWluZm8uYyBiL2J1aWx0aW4tdXBkYXRlLXNlcnZlci1pbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIzZmRkYwotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4tdXBkYXRlLXNlcnZlci1pbmZvLmMKQEAgLTAsMCArMSwyNSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB1cGRhdGVfc2VydmVyX2luZm9fdXNhZ2VbXSA9IHsKKwkiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBbLS1mb3JjZV0iLAorCU5VTEwKK307CisKK2ludCBjbWRfdXBkYXRlX3NlcnZlcl9pbmZvKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBmb3JjZSA9IDA7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MRUFOKCdmJywgImZvcmNlIiwgJmZvcmNlLAorCQkJInVwZGF0ZSB0aGUgaW5mbyBmaWxlcyBmcm9tIHNjcmF0Y2giKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywKKwkJCSAgICAgdXBkYXRlX3NlcnZlcl9pbmZvX3VzYWdlLCAwKTsKKwlpZiAoYXJnYyA+IDApCisJCXVzYWdlX3dpdGhfb3B0aW9ucyh1cGRhdGVfc2VydmVyX2luZm9fdXNhZ2UsIG9wdGlvbnMpOworCisJcmV0dXJuICEhdXBkYXRlX3NlcnZlcl9pbmZvKGZvcmNlKTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4tdXBsb2FkLWFyY2hpdmUuYyBiL2J1aWx0aW4tdXBsb2FkLWFyY2hpdmUuYwppbmRleCBjNGNkMWUxLi43M2Y3ODhlIDEwMDY0NAotLS0gYS9idWlsdGluLXVwbG9hZC1hcmNoaXZlLmMKKysrIGIvYnVpbHRpbi11cGxvYWQtYXJjaGl2ZS5jCkBAIC02Nyw2ICs2Nyw3IEBACiAJcmV0dXJuIHdyaXRlX2FyY2hpdmUoc2VudF9hcmdjLCBzZW50X2FyZ3YsIHByZWZpeCwgMCk7CiB9CiAKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCiBzdGF0aWMgdm9pZCBlcnJvcl9jbG50KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCWNoYXIgYnVmWzEwMjRdOwpAQCAtMTMyLDcgKzEzMyw2IEBACiAKIAl3aGlsZSAoMSkgewogCQlzdHJ1Y3QgcG9sbGZkIHBmZFsyXTsKLQkJc3NpemVfdCBwcm9jZXNzZWRbMl0gPSB7IDAsIDAgfTsKIAkJaW50IHN0YXR1czsKIAogCQlwZmRbMF0uZmQgPSBmZDFbMF07CkBAIC0xNDcsMTUgKzE0NywxNCBAQAogCQkJfQogCQkJY29udGludWU7CiAJCX0KLQkJaWYgKHBmZFswXS5yZXZlbnRzICYgUE9MTElOKQotCQkJLyogRGF0YSBzdHJlYW0gcmVhZHkgKi8KLQkJCXByb2Nlc3NlZFswXSA9IHByb2Nlc3NfaW5wdXQocGZkWzBdLmZkLCAxKTsKIAkJaWYgKHBmZFsxXS5yZXZlbnRzICYgUE9MTElOKQogCQkJLyogU3RhdHVzIHN0cmVhbSByZWFkeSAqLwotCQkJcHJvY2Vzc2VkWzFdID0gcHJvY2Vzc19pbnB1dChwZmRbMV0uZmQsIDIpOwotCQkvKiBBbHdheXMgZmluaXNoIHRvIHJlYWQgZGF0YSB3aGVuIGF2YWlsYWJsZSAqLwotCQlpZiAocHJvY2Vzc2VkWzBdIHx8IHByb2Nlc3NlZFsxXSkKLQkJCWNvbnRpbnVlOworCQkJaWYgKHByb2Nlc3NfaW5wdXQocGZkWzFdLmZkLCAyKSkKKwkJCQljb250aW51ZTsKKwkJaWYgKHBmZFswXS5yZXZlbnRzICYgUE9MTElOKQorCQkJLyogRGF0YSBzdHJlYW0gcmVhZHkgKi8KKwkJCWlmIChwcm9jZXNzX2lucHV0KHBmZFswXS5mZCwgMSkpCisJCQkJY29udGludWU7CiAKIAkJaWYgKHdhaXRwaWQod3JpdGVyLCAmc3RhdHVzLCAwKSA8IDApCiAJCQllcnJvcl9jbG50KCIlcyIsIGxvc3RjaGlsZCk7CmRpZmYgLS1naXQgYS92YXIuYyBiL2J1aWx0aW4tdmFyLmMKc2ltaWxhcml0eSBpbmRleCA2NCUKcmVuYW1lIGZyb20gdmFyLmMKcmVuYW1lIHRvIGJ1aWx0aW4tdmFyLmMKaW5kZXggNzM2MmVkOC4uNzBmZGI0ZCAxMDA2NDQKLS0tIGEvdmFyLmMKKysrIGIvYnVpbHRpbi12YXIuYwpAQCAtNiw3ICs2LDI2IEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlICJleGVjX2NtZC5oIgogCi1zdGF0aWMgY29uc3QgY2hhciB2YXJfdXNhZ2VbXSA9ICJnaXQgdmFyIFstbCB8IDx2YXJpYWJsZT5dIjsKK3N0YXRpYyBjb25zdCBjaGFyIHZhcl91c2FnZVtdID0gImdpdCB2YXIgKC1sIHwgPHZhcmlhYmxlPikiOworCitzdGF0aWMgY29uc3QgY2hhciAqZWRpdG9yKGludCBmbGFnKQoreworCWNvbnN0IGNoYXIgKnBnbSA9IGdpdF9lZGl0b3IoKTsKKworCWlmICghcGdtICYmIGZsYWcgJiBJREVOVF9FUlJPUl9PTl9OT19OQU1FKQorCQlkaWUoIlRlcm1pbmFsIGlzIGR1bWIsIGJ1dCBFRElUT1IgdW5zZXQiKTsKKworCXJldHVybiBwZ207Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwYWdlcihpbnQgZmxhZykKK3sKKwljb25zdCBjaGFyICpwZ20gPSBnaXRfcGFnZXIoMSk7CisKKwlpZiAoIXBnbSkKKwkJcGdtID0gImNhdCI7CisJcmV0dXJuIHBnbTsKK30KIAogc3RydWN0IGdpdF92YXIgewogCWNvbnN0IGNoYXIgKm5hbWU7CkBAIC0xNSwxNSArMzQsMTkgQEAKIHN0YXRpYyBzdHJ1Y3QgZ2l0X3ZhciBnaXRfdmFyc1tdID0gewogCXsgIkdJVF9DT01NSVRURVJfSURFTlQiLCBnaXRfY29tbWl0dGVyX2luZm8gfSwKIAl7ICJHSVRfQVVUSE9SX0lERU5UIiwgICBnaXRfYXV0aG9yX2luZm8gfSwKKwl7ICJHSVRfRURJVE9SIiwgZWRpdG9yIH0sCisJeyAiR0lUX1BBR0VSIiwgcGFnZXIgfSwKIAl7ICIiLCBOVUxMIH0sCiB9OwogCiBzdGF0aWMgdm9pZCBsaXN0X3ZhcnModm9pZCkKIHsKIAlzdHJ1Y3QgZ2l0X3ZhciAqcHRyOwotCWZvcihwdHIgPSBnaXRfdmFyczsgcHRyLT5yZWFkOyBwdHIrKykgewotCQlwcmludGYoIiVzPSVzXG4iLCBwdHItPm5hbWUsIHB0ci0+cmVhZChJREVOVF9XQVJOX09OX05PX05BTUUpKTsKLQl9CisJY29uc3QgY2hhciAqdmFsOworCisJZm9yIChwdHIgPSBnaXRfdmFyczsgcHRyLT5yZWFkOyBwdHIrKykKKwkJaWYgKCh2YWwgPSBwdHItPnJlYWQoMCkpKQorCQkJcHJpbnRmKCIlcz0lc1xuIiwgcHRyLT5uYW1lLCB2YWwpOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqcmVhZF92YXIoY29uc3QgY2hhciAqdmFyKQpAQCAtMzEsNyArNTQsNyBAQAogCXN0cnVjdCBnaXRfdmFyICpwdHI7CiAJY29uc3QgY2hhciAqdmFsOwogCXZhbCA9IE5VTEw7Ci0JZm9yKHB0ciA9IGdpdF92YXJzOyBwdHItPnJlYWQ7IHB0cisrKSB7CisJZm9yIChwdHIgPSBnaXRfdmFyczsgcHRyLT5yZWFkOyBwdHIrKykgewogCQlpZiAoc3RyY21wKHZhciwgcHRyLT5uYW1lKSA9PSAwKSB7CiAJCQl2YWwgPSBwdHItPnJlYWQoSURFTlRfRVJST1JfT05fTk9fTkFNRSk7CiAJCQlicmVhazsKQEAgLTQ5LDcgKzcyLDcgQEAKIAlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKIH0KIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoraW50IGNtZF92YXIoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CiAJY29uc3QgY2hhciAqdmFsOwogCWludCBub25naXQ7CkBAIC01Nyw4ICs4MCw2IEBACiAJCXVzYWdlKHZhcl91c2FnZSk7CiAJfQogCi0JZ2l0X2V4dHJhY3RfYXJndjBfcGF0aChhcmd2WzBdKTsKLQogCXNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KCZub25naXQpOwogCXZhbCA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4tdmVyaWZ5LXBhY2suYyBiL2J1aWx0aW4tdmVyaWZ5LXBhY2suYwppbmRleCBhMThkZjA0Li5iNjA3OWFlIDEwMDY0NAotLS0gYS9idWlsdGluLXZlcmlmeS1wYWNrLmMKKysrIGIvYnVpbHRpbi12ZXJpZnktcGFjay5jCkBAIC0yLDEzICsyLDE4IEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlICJwYWNrLmgiCiAjaW5jbHVkZSAicGFjay1yZXZpbmRleC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKIAogI2RlZmluZSBNQVhfQ0hBSU4gNTAKIAotc3RhdGljIHZvaWQgc2hvd19wYWNrX2luZm8oc3RydWN0IHBhY2tlZF9naXQgKnApCisjZGVmaW5lIFZFUklGWV9QQUNLX1ZFUkJPU0UgMDEKKyNkZWZpbmUgVkVSSUZZX1BBQ0tfU1RBVF9PTkxZIDAyCisKK3N0YXRpYyB2b2lkIHNob3dfcGFja19pbmZvKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJdWludDMyX3QgbnJfb2JqZWN0cywgaTsKIAlpbnQgY250OworCWludCBzdGF0X29ubHkgPSBmbGFncyAmIFZFUklGWV9QQUNLX1NUQVRfT05MWTsKIAl1bnNpZ25lZCBsb25nIGNoYWluX2hpc3RvZ3JhbVtNQVhfQ0hBSU4rMV0sIGJhc2VvYmplY3RzOwogCiAJbnJfb2JqZWN0cyA9IHAtPm51bV9vYmplY3RzOwpAQCAtMzEsMTYgKzM2LDE5IEBACiAJCXR5cGUgPSBwYWNrZWRfb2JqZWN0X2luZm9fZGV0YWlsKHAsIG9mZnNldCwgJnNpemUsICZzdG9yZV9zaXplLAogCQkJCQkJICZkZWx0YV9jaGFpbl9sZW5ndGgsCiAJCQkJCQkgYmFzZV9zaGExKTsKLQkJcHJpbnRmKCIlcyAiLCBzaGExX3RvX2hleChzaGExKSk7CisJCWlmICghc3RhdF9vbmx5KQorCQkJcHJpbnRmKCIlcyAiLCBzaGExX3RvX2hleChzaGExKSk7CiAJCWlmICghZGVsdGFfY2hhaW5fbGVuZ3RoKSB7Ci0JCQlwcmludGYoIiUtNnMgJWx1ICVsdSAlIlBSSXVNQVgiXG4iLAotCQkJICAgICAgIHR5cGUsIHNpemUsIHN0b3JlX3NpemUsICh1aW50bWF4X3Qpb2Zmc2V0KTsKKwkJCWlmICghc3RhdF9vbmx5KQorCQkJCXByaW50ZigiJS02cyAlbHUgJWx1ICUiUFJJdU1BWCJcbiIsCisJCQkJICAgICAgIHR5cGUsIHNpemUsIHN0b3JlX3NpemUsICh1aW50bWF4X3Qpb2Zmc2V0KTsKIAkJCWJhc2VvYmplY3RzKys7CiAJCX0KIAkJZWxzZSB7Ci0JCQlwcmludGYoIiUtNnMgJWx1ICVsdSAlIlBSSXVNQVgiICV1ICVzXG4iLAotCQkJICAgICAgIHR5cGUsIHNpemUsIHN0b3JlX3NpemUsICh1aW50bWF4X3Qpb2Zmc2V0LAotCQkJICAgICAgIGRlbHRhX2NoYWluX2xlbmd0aCwgc2hhMV90b19oZXgoYmFzZV9zaGExKSk7CisJCQlpZiAoIXN0YXRfb25seSkKKwkJCQlwcmludGYoIiUtNnMgJWx1ICVsdSAlIlBSSXVNQVgiICV1ICVzXG4iLAorCQkJCSAgICAgICB0eXBlLCBzaXplLCBzdG9yZV9zaXplLCAodWludG1heF90KW9mZnNldCwKKwkJCQkgICAgICAgZGVsdGFfY2hhaW5fbGVuZ3RoLCBzaGExX3RvX2hleChiYXNlX3NoYTEpKTsKIAkJCWlmIChkZWx0YV9jaGFpbl9sZW5ndGggPD0gTUFYX0NIQUlOKQogCQkJCWNoYWluX2hpc3RvZ3JhbVtkZWx0YV9jaGFpbl9sZW5ndGhdKys7CiAJCQllbHNlCkBAIC02NSwxMCArNzMsMTIgQEAKIAkJICAgICAgIGNoYWluX2hpc3RvZ3JhbVswXSA+IDEgPyAicyIgOiAiIik7CiB9CiAKLXN0YXRpYyBpbnQgdmVyaWZ5X29uZV9wYWNrKGNvbnN0IGNoYXIgKnBhdGgsIGludCB2ZXJib3NlKQorc3RhdGljIGludCB2ZXJpZnlfb25lX3BhY2soY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgaW50IGZsYWdzKQogewogCWNoYXIgYXJnW1BBVEhfTUFYXTsKIAlpbnQgbGVuOworCWludCB2ZXJib3NlID0gZmxhZ3MgJiBWRVJJRllfUEFDS19WRVJCT1NFOworCWludCBzdGF0X29ubHkgPSBmbGFncyAmIFZFUklGWV9QQUNLX1NUQVRfT05MWTsKIAlzdHJ1Y3QgcGFja2VkX2dpdCAqcGFjazsKIAlpbnQgZXJyOwogCkBAIC0xMDQsNTAgKzExNCw1MyBAQAogCQlyZXR1cm4gZXJyb3IoInBhY2tmaWxlICVzIG5vdCBmb3VuZC4iLCBhcmcpOwogCiAJaW5zdGFsbF9wYWNrZWRfZ2l0KHBhY2spOwotCWVyciA9IHZlcmlmeV9wYWNrKHBhY2spOwogCi0JaWYgKHZlcmJvc2UpIHsKKwlpZiAoIXN0YXRfb25seSkKKwkJZXJyID0gdmVyaWZ5X3BhY2socGFjayk7CisJZWxzZQorCQllcnIgPSBvcGVuX3BhY2tfaW5kZXgocGFjayk7CisKKwlpZiAodmVyYm9zZSB8fCBzdGF0X29ubHkpIHsKIAkJaWYgKGVycikKIAkJCXByaW50ZigiJXM6IGJhZFxuIiwgcGFjay0+cGFja19uYW1lKTsKIAkJZWxzZSB7Ci0JCQlzaG93X3BhY2tfaW5mbyhwYWNrKTsKLQkJCXByaW50ZigiJXM6IG9rXG4iLCBwYWNrLT5wYWNrX25hbWUpOworCQkJc2hvd19wYWNrX2luZm8ocGFjaywgZmxhZ3MpOworCQkJaWYgKCFzdGF0X29ubHkpCisJCQkJcHJpbnRmKCIlczogb2tcbiIsIHBhY2stPnBhY2tfbmFtZSk7CiAJCX0KIAl9CiAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciB2ZXJpZnlfcGFja191c2FnZVtdID0gImdpdCB2ZXJpZnktcGFjayBbLXZdIDxwYWNrPi4uLiI7CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHZlcmlmeV9wYWNrX3VzYWdlW10gPSB7CisJImdpdCB2ZXJpZnktcGFjayBbLXZ8LS12ZXJib3NlXSBbLXN8LS1zdGF0LW9ubHldIDxwYWNrPi4uLiIsCisJTlVMTAorfTsKIAogaW50IGNtZF92ZXJpZnlfcGFjayhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKIAlpbnQgZXJyID0gMDsKLQlpbnQgdmVyYm9zZSA9IDA7Ci0JaW50IG5vX21vcmVfb3B0aW9ucyA9IDA7Ci0JaW50IG5vdGhpbmdfZG9uZSA9IDE7CisJdW5zaWduZWQgaW50IGZsYWdzID0gMDsKKwlpbnQgaTsKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uIHZlcmlmeV9wYWNrX29wdGlvbnNbXSA9IHsKKwkJT1BUX0JJVCgndicsICJ2ZXJib3NlIiwgJmZsYWdzLCAidmVyYm9zZSIsCisJCQlWRVJJRllfUEFDS19WRVJCT1NFKSwKKwkJT1BUX0JJVCgncycsICJzdGF0LW9ubHkiLCAmZmxhZ3MsICJzaG93IHN0YXRpc3RpY3Mgb25seSIsCisJCQlWRVJJRllfUEFDS19TVEFUX09OTFkpLAorCQlPUFRfRU5EKCkKKwl9OwogCiAJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwotCXdoaWxlICgxIDwgYXJnYykgewotCQlpZiAoIW5vX21vcmVfb3B0aW9ucyAmJiBhcmd2WzFdWzBdID09ICctJykgewotCQkJaWYgKCFzdHJjbXAoIi12IiwgYXJndlsxXSkpCi0JCQkJdmVyYm9zZSA9IDE7Ci0JCQllbHNlIGlmICghc3RyY21wKCItLSIsIGFyZ3ZbMV0pKQotCQkJCW5vX21vcmVfb3B0aW9ucyA9IDE7Ci0JCQllbHNlCi0JCQkJdXNhZ2UodmVyaWZ5X3BhY2tfdXNhZ2UpOwotCQl9Ci0JCWVsc2UgewotCQkJaWYgKHZlcmlmeV9vbmVfcGFjayhhcmd2WzFdLCB2ZXJib3NlKSkKLQkJCQllcnIgPSAxOwotCQkJZGlzY2FyZF9yZXZpbmRleCgpOwotCQkJbm90aGluZ19kb25lID0gMDsKLQkJfQotCQlhcmdjLS07IGFyZ3YrKzsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIHZlcmlmeV9wYWNrX29wdGlvbnMsCisJCQkgICAgIHZlcmlmeV9wYWNrX3VzYWdlLCAwKTsKKwlpZiAoYXJnYyA8IDEpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyh2ZXJpZnlfcGFja191c2FnZSwgdmVyaWZ5X3BhY2tfb3B0aW9ucyk7CisJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworCQlpZiAodmVyaWZ5X29uZV9wYWNrKGFyZ3ZbaV0sIGZsYWdzKSkKKwkJCWVyciA9IDE7CisJCWRpc2NhcmRfcmV2aW5kZXgoKTsKIAl9CiAKLQlpZiAobm90aGluZ19kb25lKQotCQl1c2FnZSh2ZXJpZnlfcGFja191c2FnZSk7Ci0KIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi12ZXJpZnktdGFnLmMgYi9idWlsdGluLXZlcmlmeS10YWcuYwppbmRleCA3ZjdmZGE0Li45ZjQ4MmMyIDEwMDY0NAotLS0gYS9idWlsdGluLXZlcmlmeS10YWcuYworKysgYi9idWlsdGluLXZlcmlmeS10YWcuYwpAQCAtMTAsOSArMTAsMTIgQEAKICNpbmNsdWRlICJ0YWcuaCIKICNpbmNsdWRlICJydW4tY29tbWFuZC5oIgogI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKIAotc3RhdGljIGNvbnN0IGNoYXIgYnVpbHRpbl92ZXJpZnlfdGFnX3VzYWdlW10gPQotCQkiZ2l0IHZlcmlmeS10YWcgWy12fC0tdmVyYm9zZV0gPHRhZz4uLi4iOworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB2ZXJpZnlfdGFnX3VzYWdlW10gPSB7CisJCSJnaXQgdmVyaWZ5LXRhZyBbLXZ8LS12ZXJib3NlXSA8dGFnPi4uLiIsCisJCU5VTEwKK307CiAKICNkZWZpbmUgUEdQX1NJR05BVFVSRSAiLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0iCiAKQEAgLTg5LDE3ICs5MiwxNyBAQAogaW50IGNtZF92ZXJpZnlfdGFnKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQogewogCWludCBpID0gMSwgdmVyYm9zZSA9IDAsIGhhZF9lcnJvciA9IDA7CisJY29uc3Qgc3RydWN0IG9wdGlvbiB2ZXJpZnlfdGFnX29wdGlvbnNbXSA9IHsKKwkJT1BUX19WRVJCT1NFKCZ2ZXJib3NlKSwKKwkJT1BUX0VORCgpCisJfTsKIAogCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKIAotCWlmIChhcmdjID4gMSAmJgotCSAgICAoIXN0cmNtcChhcmd2W2ldLCAiLXYiKSB8fCAhc3RyY21wKGFyZ3ZbaV0sICItLXZlcmJvc2UiKSkpIHsKLQkJdmVyYm9zZSA9IDE7Ci0JCWkrKzsKLQl9Ci0KKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIHZlcmlmeV90YWdfb3B0aW9ucywKKwkJCSAgICAgdmVyaWZ5X3RhZ191c2FnZSwgUEFSU0VfT1BUX0tFRVBfQVJHVjApOwogCWlmIChhcmdjIDw9IGkpCi0JCXVzYWdlKGJ1aWx0aW5fdmVyaWZ5X3RhZ191c2FnZSk7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyh2ZXJpZnlfdGFnX3VzYWdlLCB2ZXJpZnlfdGFnX29wdGlvbnMpOwogCiAJLyogc29tZXRpbWVzIHRoZSBwcm9ncmFtIHdhcyB0ZXJtaW5hdGVkIGJlY2F1c2UgdGhpcyBzaWduYWwKIAkgKiB3YXMgcmVjZWl2ZWQgaW4gdGhlIHByb2Nlc3Mgb2Ygd3JpdGluZyB0aGUgZ3BnIGlucHV0OiAqLwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi13cml0ZS10cmVlLmMgYi9idWlsdGluLXdyaXRlLXRyZWUuYwppbmRleCA5ZDY0MDUwLi5iMjIzYWY0IDEwMDY0NAotLS0gYS9idWlsdGluLXdyaXRlLXRyZWUuYworKysgYi9idWlsdGluLXdyaXRlLXRyZWUuYwpAQCAtNywzMyArNywzNyBAQAogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSAidHJlZS5oIgogI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCiAKLXN0YXRpYyBjb25zdCBjaGFyIHdyaXRlX3RyZWVfdXNhZ2VbXSA9Ci0iZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTxwcmVmaXg+L10iOworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB3cml0ZV90cmVlX3VzYWdlW10gPSB7CisJImdpdCB3cml0ZS10cmVlIFstLW1pc3Npbmctb2tdIFstLXByZWZpeD08cHJlZml4Pi9dIiwKKwlOVUxMCit9OwogCiBpbnQgY21kX3dyaXRlX3RyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICp1bnVzZWRfcHJlZml4KQogewotCWludCBtaXNzaW5nX29rID0gMCwgcmV0OworCWludCBmbGFncyA9IDAsIHJldDsKIAljb25zdCBjaGFyICpwcmVmaXggPSBOVUxMOwogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CiAJY29uc3QgY2hhciAqbWUgPSAiZ2l0LXdyaXRlLXRyZWUiOworCXN0cnVjdCBvcHRpb24gd3JpdGVfdHJlZV9vcHRpb25zW10gPSB7CisJCU9QVF9CSVQoMCwgIm1pc3Npbmctb2siLCAmZmxhZ3MsICJhbGxvdyBtaXNzaW5nIG9iamVjdHMiLAorCQkJV1JJVEVfVFJFRV9NSVNTSU5HX09LKSwKKwkJeyBPUFRJT05fU1RSSU5HLCAwLCAicHJlZml4IiwgJnByZWZpeCwgIjxwcmVmaXg+LyIsCisJCSAgIndyaXRlIHRyZWUgb2JqZWN0IGZvciBhIHN1YmRpcmVjdG9yeSA8cHJlZml4PiIgLAorCQkgIFBBUlNFX09QVF9MSVRFUkFMX0FSR0hFTFAgfSwKKwkJeyBPUFRJT05fQklULCAwLCAiaWdub3JlLWNhY2hlLXRyZWUiLCAmZmxhZ3MsIE5VTEwsCisJCSAgIm9ubHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmciLAorCQkgIFBBUlNFX09QVF9ISURERU4gfCBQQVJTRV9PUFRfTk9BUkcsIE5VTEwsCisJCSAgV1JJVEVfVFJFRV9JR05PUkVfQ0FDSEVfVFJFRSB9LAorCQlPUFRfRU5EKCkKKwl9OwogCiAJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwotCXdoaWxlICgxIDwgYXJnYykgewotCQljb25zdCBjaGFyICphcmcgPSBhcmd2WzFdOwotCQlpZiAoIXN0cmNtcChhcmcsICItLW1pc3Npbmctb2siKSkKLQkJCW1pc3Npbmdfb2sgPSAxOwotCQllbHNlIGlmICghcHJlZml4Y21wKGFyZywgIi0tcHJlZml4PSIpKQotCQkJcHJlZml4ID0gYXJnICsgOTsKLQkJZWxzZQotCQkJdXNhZ2Uod3JpdGVfdHJlZV91c2FnZSk7Ci0JCWFyZ2MtLTsgYXJndisrOwotCX0KKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCB1bnVzZWRfcHJlZml4LCB3cml0ZV90cmVlX29wdGlvbnMsCisJCQkgICAgIHdyaXRlX3RyZWVfdXNhZ2UsIDApOwogCi0JaWYgKGFyZ2MgPiAyKQotCQlkaWUoInRvbyBtYW55IG9wdGlvbnMiKTsKLQotCXJldCA9IHdyaXRlX2NhY2hlX2FzX3RyZWUoc2hhMSwgbWlzc2luZ19vaywgcHJlZml4KTsKKwlyZXQgPSB3cml0ZV9jYWNoZV9hc190cmVlKHNoYTEsIGZsYWdzLCBwcmVmaXgpOwogCXN3aXRjaCAocmV0KSB7CiAJY2FzZSAwOgogCQlwcmludGYoIiVzXG4iLCBzaGExX3RvX2hleChzaGExKSk7CmRpZmYgLS1naXQgYS9idWlsdGluLmggYi9idWlsdGluLmgKaW5kZXggNDI1ZmY4ZS4uZTgyMDJmMyAxMDA2NDQKLS0tIGEvYnVpbHRpbi5oCisrKyBiL2J1aWx0aW4uaApAQCAtMTMsNyArMTMsNiBAQAogZXh0ZXJuIHZvaWQgbGlzdF9jb21tb25fY21kc19oZWxwKHZvaWQpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKmhlbHBfdW5rbm93bl9jbWQoY29uc3QgY2hhciAqY21kKTsKIGV4dGVybiB2b2lkIHBydW5lX3BhY2tlZF9vYmplY3RzKGludCk7Ci1leHRlcm4gaW50IHJlYWRfbGluZV93aXRoX251bChjaGFyICpidWYsIGludCBzaXplLCBGSUxFICpmaWxlKTsKIGV4dGVybiBpbnQgZm10X21lcmdlX21zZyhpbnQgbWVyZ2Vfc3VtbWFyeSwgc3RydWN0IHN0cmJ1ZiAqaW4sCiAJc3RydWN0IHN0cmJ1ZiAqb3V0KTsKIGV4dGVybiBpbnQgY29tbWl0X3RyZWUoY29uc3QgY2hhciAqbXNnLCB1bnNpZ25lZCBjaGFyICp0cmVlLApAQCAtNDksNyArNDgsNiBAQAogZXh0ZXJuIGludCBjbWRfZmFzdF9leHBvcnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfZmV0Y2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfZmV0Y2hfcGFjayhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7Ci1leHRlcm4gaW50IGNtZF9mZXRjaF9fdG9vbChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9mbXRfbWVyZ2VfbXNnKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX2Zvcl9lYWNoX3JlZihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9mb3JtYXRfcGF0Y2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwpAQCAtNTcsOCArNTUsMTAgQEAKIGV4dGVybiBpbnQgY21kX2djKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX2dldF90YXJfY29tbWl0X2lkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX2dyZXAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfaGFzaF9vYmplY3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfaGVscChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9odHRwX2ZldGNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2luZGV4X3BhY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfaW5pdF9kYihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9sb2coaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfbG9nX3JlZmxvZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CkBAIC02OSwxMiArNjksMTggQEAKIGV4dGVybiBpbnQgY21kX21haWxzcGxpdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9tZXJnZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9tZXJnZV9iYXNlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX21lcmdlX2luZGV4KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX21lcmdlX291cnMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfbWVyZ2VfZmlsZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9tZXJnZV9yZWN1cnNpdmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfbWVyZ2VfdHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9ta3RhZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9ta3RyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfbXYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfbmFtZV9yZXYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfcGFja19vYmplY3RzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3BhY2tfcmVkdW5kYW50KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3BhdGNoX2lkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX3BpY2theGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfcHJ1bmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfcHJ1bmVfcGFja2VkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKQEAgLTk5LDExICsxMDUsMTQgQEAKIGV4dGVybiBpbnQgY21kX3N5bWJvbGljX3JlZihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF90YWcoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfdGFyX3RyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfdW5wYWNrX2ZpbGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfdW5wYWNrX29iamVjdHMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfdXBkYXRlX2luZGV4KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX3VwZGF0ZV9yZWYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfdXBkYXRlX3NlcnZlcl9pbmZvKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX3VwbG9hZF9hcmNoaXZlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX3VwbG9hZF90YXIoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfdmFyKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX3ZlcmlmeV90YWcoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfdmVyc2lvbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF93aGF0Y2hhbmdlZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CkBAIC0xMTEsNSArMTIwLDYgQEAKIGV4dGVybiBpbnQgY21kX3ZlcmlmeV9wYWNrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX3Nob3dfcmVmKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX3BhY2tfcmVmcyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9yZXBsYWNlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9idW5kbGUuYyBiL2J1bmRsZS5jCmluZGV4IGQwZGQ4MTguLmZmOTdhZGMgMTAwNjQ0Ci0tLSBhL2J1bmRsZS5jCisrKyBiL2J1bmRsZS5jCkBAIC05OCw3ICs5OCw3IEBACiAJICovCiAJc3RydWN0IHJlZl9saXN0ICpwID0gJmhlYWRlci0+cHJlcmVxdWlzaXRlczsKIAlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKLQljb25zdCBjaGFyICphcmd2W10gPSB7TlVMTCwgIi0tYWxsIn07CisJY29uc3QgY2hhciAqYXJndltdID0ge05VTEwsICItLWFsbCIsIE5VTEx9OwogCXN0cnVjdCBvYmplY3RfYXJyYXkgcmVmczsKIAlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CiAJaW50IGksIHJldCA9IDAsIHJlcV9ucjsKQEAgLTIwNCw3ICsyMDQsNiBAQAogCWludCBpLCByZWZfY291bnQgPSAwOwogCWNoYXIgYnVmZmVyWzEwMjRdOwogCXN0cnVjdCByZXZfaW5mbyByZXZzOwotCWludCByZWFkX2Zyb21fc3RkaW4gPSAwOwogCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHJsczsKIAlGSUxFICpybHNfZm91dDsKIApAQCAtMjM0LDcgKzIzMyw3IEBACiAJcmxzLmdpdF9jbWQgPSAxOwogCWlmIChzdGFydF9jb21tYW5kKCZybHMpKQogCQlyZXR1cm4gLTE7Ci0JcmxzX2ZvdXQgPSBmZG9wZW4ocmxzLm91dCwgInIiKTsKKwlybHNfZm91dCA9IHhmZG9wZW4ocmxzLm91dCwgInIiKTsKIAl3aGlsZSAoZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgcmxzX2ZvdXQpKSB7CiAJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CiAJCWlmIChidWZmZXJbMF0gPT0gJy0nKSB7CkBAIC0yNTYsMTUgKzI1NSw4IEBACiAJLyogd3JpdGUgcmVmZXJlbmNlcyAqLwogCWFyZ2MgPSBzZXR1cF9yZXZpc2lvbnMoYXJnYywgYXJndiwgJnJldnMsIE5VTEwpOwogCi0JZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgewotCQlpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS1zdGRpbiIpKSB7Ci0JCQlpZiAocmVhZF9mcm9tX3N0ZGluKyspCi0JCQkJZGllKCItLXN0ZGluIGdpdmVuIHR3aWNlPyIpOwotCQkJcmVhZF9yZXZpc2lvbnNfZnJvbV9zdGRpbigmcmV2cyk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlyZXR1cm4gZXJyb3IoInVucmVjb2duaXplZCBhcmd1bWVudDogJXMnIiwgYXJndltpXSk7Ci0JfQorCWlmIChhcmdjID4gMSkKKwkJcmV0dXJuIGVycm9yKCJ1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICVzJyIsIGFyZ3ZbMV0pOwogCiAJb2JqZWN0X2FycmF5X3JlbW92ZV9kdXBsaWNhdGVzKCZyZXZzLnBlbmRpbmcpOwogCkBAIC0zNTEsNyArMzQzLDcgQEAKIAogCS8qIHdyaXRlIHBhY2sgKi8KIAlhcmd2X3BhY2tbMF0gPSAicGFjay1vYmplY3RzIjsKLQlhcmd2X3BhY2tbMV0gPSAiLS1hbGwtcHJvZ3Jlc3MiOworCWFyZ3ZfcGFja1sxXSA9ICItLWFsbC1wcm9ncmVzcy1pbXBsaWVkIjsKIAlhcmd2X3BhY2tbMl0gPSAiLS1zdGRvdXQiOwogCWFyZ3ZfcGFja1szXSA9ICItLXRoaW4iOwogCWFyZ3ZfcGFja1s0XSA9IE5VTEw7CmRpZmYgLS1naXQgYS9jYWNoZS10cmVlLmMgYi9jYWNoZS10cmVlLmMKaW5kZXggMzdiZjM1ZS4uZDkxNzQzNyAxMDA2NDQKLS0tIGEvY2FjaGUtdHJlZS5jCisrKyBiL2NhY2hlLXRyZWUuYwpAQCAtMzI5LDcgKzMyOSw4IEBACiAJCQllbnRsZW4gPSBwYXRobGVuIC0gYmFzZWxlbjsKIAkJfQogCQlpZiAobW9kZSAhPSBTX0lGR0lUTElOSyAmJiAhbWlzc2luZ19vayAmJiAhaGFzX3NoYTFfZmlsZShzaGExKSkKLQkJCXJldHVybiBlcnJvcigiaW52YWxpZCBvYmplY3QgJXMiLCBzaGExX3RvX2hleChzaGExKSk7CisJCQlyZXR1cm4gZXJyb3IoImludmFsaWQgb2JqZWN0ICUwNm8gJXMgZm9yICclLipzJyIsCisJCQkJbW9kZSwgc2hhMV90b19oZXgoc2hhMSksIGVudGxlbitiYXNlbGVuLCBwYXRoKTsKIAogCQlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfUkVNT1ZFKQogCQkJY29udGludWU7IC8qIGVudHJ5IGJlaW5nIHJlbW92ZWQgKi8KQEAgLTUxNCw2ICs1MTUsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNhY2hlX3RyZWUgKmNhY2hlX3RyZWVfZmluZChzdHJ1Y3QgY2FjaGVfdHJlZSAqaXQsIGNvbnN0IGNoYXIgKnBhdGgpCiB7CisJaWYgKCFpdCkKKwkJcmV0dXJuIE5VTEw7CiAJd2hpbGUgKCpwYXRoKSB7CiAJCWNvbnN0IGNoYXIgKnNsYXNoOwogCQlzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgKnN1YjsKQEAgLTUzOCwyOCArNTQxLDMyIEBACiAJcmV0dXJuIGl0OwogfQogCi1pbnQgd3JpdGVfY2FjaGVfYXNfdHJlZSh1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgbWlzc2luZ19vaywgY29uc3QgY2hhciAqcHJlZml4KQoraW50IHdyaXRlX2NhY2hlX2FzX3RyZWUodW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZsYWdzLCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CiAJaW50IGVudHJpZXMsIHdhc192YWxpZCwgbmV3ZmQ7CisJc3RydWN0IGxvY2tfZmlsZSAqbG9ja19maWxlOwogCiAJLyoKIAkgKiBXZSBjYW4ndCBmcmVlIHRoaXMgbWVtb3J5LCBpdCBiZWNvbWVzIHBhcnQgb2YgYSBsaW5rZWQgbGlzdAogCSAqIHBhcnNlZCBhdGV4aXQoKQogCSAqLwotCXN0cnVjdCBsb2NrX2ZpbGUgKmxvY2tfZmlsZSA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBsb2NrX2ZpbGUpKTsKKwlsb2NrX2ZpbGUgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbG9ja19maWxlKSk7CiAKIAluZXdmZCA9IGhvbGRfbG9ja2VkX2luZGV4KGxvY2tfZmlsZSwgMSk7CiAKIAllbnRyaWVzID0gcmVhZF9jYWNoZSgpOwogCWlmIChlbnRyaWVzIDwgMCkKIAkJcmV0dXJuIFdSSVRFX1RSRUVfVU5SRUFEQUJMRV9JTkRFWDsKKwlpZiAoZmxhZ3MgJiBXUklURV9UUkVFX0lHTk9SRV9DQUNIRV9UUkVFKQorCQljYWNoZV90cmVlX2ZyZWUoJihhY3RpdmVfY2FjaGVfdHJlZSkpOwogCiAJaWYgKCFhY3RpdmVfY2FjaGVfdHJlZSkKIAkJYWN0aXZlX2NhY2hlX3RyZWUgPSBjYWNoZV90cmVlKCk7CiAKIAl3YXNfdmFsaWQgPSBjYWNoZV90cmVlX2Z1bGx5X3ZhbGlkKGFjdGl2ZV9jYWNoZV90cmVlKTsKLQogCWlmICghd2FzX3ZhbGlkKSB7CisJCWludCBtaXNzaW5nX29rID0gZmxhZ3MgJiBXUklURV9UUkVFX01JU1NJTkdfT0s7CisKIAkJaWYgKGNhY2hlX3RyZWVfdXBkYXRlKGFjdGl2ZV9jYWNoZV90cmVlLAogCQkJCSAgICAgIGFjdGl2ZV9jYWNoZSwgYWN0aXZlX25yLAogCQkJCSAgICAgIG1pc3Npbmdfb2ssIDApIDwgMCkKQEAgLTYyNSwzICs2MzIsMzUgQEAKIAkqaXQgPSBjYWNoZV90cmVlKCk7CiAJcHJpbWVfY2FjaGVfdHJlZV9yZWMoKml0LCB0cmVlKTsKIH0KKworLyoKKyAqIGZpbmQgdGhlIGNhY2hlX3RyZWUgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgY3VycmVudCBsZXZlbCB3aXRob3V0CisgKiBleHBsb2RpbmcgdGhlIGZ1bGwgcGF0aCBpbnRvIHRleHR1YWwgZm9ybS4gIFRoZSByb290IG9mIHRoZQorICogY2FjaGUgdHJlZSBpcyBnaXZlbiBhcyAicm9vdCIsIGFuZCBvdXIgY3VycmVudCBsZXZlbCBpcyAiaW5mbyIuCisgKiAoMSkgV2hlbiBhdCByb290IGxldmVsLCBpbmZvLT5wcmV2IGlzIE5VTEwsIHNvIGl0IGlzICJyb290IiBpdHNlbGYuCisgKiAoMikgT3RoZXJ3aXNlLCBmaW5kIHRoZSBjYWNoZV90cmVlIHRoYXQgY29ycmVzcG9uZHMgdG8gb25lIGxldmVsCisgKiAgICAgYWJvdmUgdXMsIGFuZCBmaW5kIG91cnNlbHZlcyBpbiB0aGVyZS4KKyAqLworc3RhdGljIHN0cnVjdCBjYWNoZV90cmVlICpmaW5kX2NhY2hlX3RyZWVfZnJvbV90cmF2ZXJzYWwoc3RydWN0IGNhY2hlX3RyZWUgKnJvb3QsCisJCQkJCQkJIHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvKQoreworCXN0cnVjdCBjYWNoZV90cmVlICpvdXJfcGFyZW50OworCisJaWYgKCFpbmZvLT5wcmV2KQorCQlyZXR1cm4gcm9vdDsKKwlvdXJfcGFyZW50ID0gZmluZF9jYWNoZV90cmVlX2Zyb21fdHJhdmVyc2FsKHJvb3QsIGluZm8tPnByZXYpOworCXJldHVybiBjYWNoZV90cmVlX2ZpbmQob3VyX3BhcmVudCwgaW5mby0+bmFtZS5wYXRoKTsKK30KKworaW50IGNhY2hlX3RyZWVfbWF0Y2hlc190cmF2ZXJzYWwoc3RydWN0IGNhY2hlX3RyZWUgKnJvb3QsCisJCQkJIHN0cnVjdCBuYW1lX2VudHJ5ICplbnQsCisJCQkJIHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvKQoreworCXN0cnVjdCBjYWNoZV90cmVlICppdDsKKworCWl0ID0gZmluZF9jYWNoZV90cmVlX2Zyb21fdHJhdmVyc2FsKHJvb3QsIGluZm8pOworCWl0ID0gY2FjaGVfdHJlZV9maW5kKGl0LCBlbnQtPnBhdGgpOworCWlmIChpdCAmJiBpdC0+ZW50cnlfY291bnQgPiAwICYmICFoYXNoY21wKGVudC0+c2hhMSwgaXQtPnNoYTEpKQorCQlyZXR1cm4gaXQtPmVudHJ5X2NvdW50OworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY2FjaGUtdHJlZS5oIGIvY2FjaGUtdHJlZS5oCmluZGV4IGU5NTg4MzUuLjNkZjY0MWYgMTAwNjQ0Ci0tLSBhL2NhY2hlLXRyZWUuaAorKysgYi9jYWNoZS10cmVlLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIENBQ0hFX1RSRUVfSAogCiAjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgogCiBzdHJ1Y3QgY2FjaGVfdHJlZTsKIHN0cnVjdCBjYWNoZV90cmVlX3N1YiB7CkBAIC0zMCwxMSArMzEsMTggQEAKIGludCBjYWNoZV90cmVlX2Z1bGx5X3ZhbGlkKHN0cnVjdCBjYWNoZV90cmVlICopOwogaW50IGNhY2hlX3RyZWVfdXBkYXRlKHN0cnVjdCBjYWNoZV90cmVlICosIHN0cnVjdCBjYWNoZV9lbnRyeSAqKiwgaW50LCBpbnQsIGludCk7CiAKKy8qIGJpdG1hc2tzIHRvIHdyaXRlX2NhY2hlX2FzX3RyZWUgZmxhZ3MgKi8KKyNkZWZpbmUgV1JJVEVfVFJFRV9NSVNTSU5HX09LIDEKKyNkZWZpbmUgV1JJVEVfVFJFRV9JR05PUkVfQ0FDSEVfVFJFRSAyCisKKy8qIGVycm9yIHJldHVybiBjb2RlcyAqLwogI2RlZmluZSBXUklURV9UUkVFX1VOUkVBREFCTEVfSU5ERVggKC0xKQogI2RlZmluZSBXUklURV9UUkVFX1VOTUVSR0VEX0lOREVYICgtMikKICNkZWZpbmUgV1JJVEVfVFJFRV9QUkVGSVhfRVJST1IgKC0zKQogCi1pbnQgd3JpdGVfY2FjaGVfYXNfdHJlZSh1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgbWlzc2luZ19vaywgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCB3cml0ZV9jYWNoZV9hc190cmVlKHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFncywgY29uc3QgY2hhciAqcHJlZml4KTsKIHZvaWQgcHJpbWVfY2FjaGVfdHJlZShzdHJ1Y3QgY2FjaGVfdHJlZSAqKiwgc3RydWN0IHRyZWUgKik7CiAKK2V4dGVybiBpbnQgY2FjaGVfdHJlZV9tYXRjaGVzX3RyYXZlcnNhbChzdHJ1Y3QgY2FjaGVfdHJlZSAqLCBzdHJ1Y3QgbmFtZV9lbnRyeSAqZW50LCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbyk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvY2FjaGUuaCBiL2NhY2hlLmgKaW5kZXggYjg1MDNhZC4uNmU1NDk5MyAxMDA2NDQKLS0tIGEvY2FjaGUuaAorKysgYi9jYWNoZS5oCkBAIC00LDYgKzQsNyBAQAogI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgogI2luY2x1ZGUgInN0cmJ1Zi5oIgogI2luY2x1ZGUgImhhc2guaCIKKyNpbmNsdWRlICJhZHZpY2UuaCIKIAogI2luY2x1ZGUgU0hBMV9IRUFERVIKICNpZm5kZWYgZ2l0X1NIQV9DVFgKQEAgLTE3NiwxNSArMTc3LDIyIEBACiAKICNkZWZpbmUgQ0VfSEFTSEVEICAgICgweDEwMDAwMCkKICNkZWZpbmUgQ0VfVU5IQVNIRUQgICgweDIwMDAwMCkKKyNkZWZpbmUgQ0VfQ09ORkxJQ1RFRCAoMHg4MDAwMDApCisKKy8qIE9ubHkgcmVtb3ZlIGluIHdvcmsgZGlyZWN0b3J5LCBub3QgaW5kZXggKi8KKyNkZWZpbmUgQ0VfV1RfUkVNT1ZFICgweDQwMDAwMCkKKworI2RlZmluZSBDRV9VTlBBQ0tFRCAgKDB4MTAwMDAwMCkKIAogLyoKICAqIEV4dGVuZGVkIG9uLWRpc2sgZmxhZ3MKICAqLwogI2RlZmluZSBDRV9JTlRFTlRfVE9fQUREIDB4MjAwMDAwMDAKKyNkZWZpbmUgQ0VfU0tJUF9XT1JLVFJFRSAweDQwMDAwMDAwCiAvKiBDRV9FWFRFTkRFRDIgaXMgZm9yIGZ1dHVyZSBleHRlbnNpb24gKi8KICNkZWZpbmUgQ0VfRVhURU5ERUQyIDB4ODAwMDAwMDAKIAotI2RlZmluZSBDRV9FWFRFTkRFRF9GTEFHUyAoQ0VfSU5URU5UX1RPX0FERCkKKyNkZWZpbmUgQ0VfRVhURU5ERURfRkxBR1MgKENFX0lOVEVOVF9UT19BREQgfCBDRV9TS0lQX1dPUktUUkVFKQogCiAvKgogICogU2FmZWd1YXJkIHRvIGF2b2lkIHNhdmluZyB3cm9uZyBmbGFnczoKQEAgLTIzMyw2ICsyNDEsNyBAQAogCQkJICAgIG9uZGlza19jYWNoZV9lbnRyeV9zaXplKGNlX25hbWVsZW4oY2UpKSkKICNkZWZpbmUgY2Vfc3RhZ2UoY2UpICgoQ0VfU1RBR0VNQVNLICYgKGNlKS0+Y2VfZmxhZ3MpID4+IENFX1NUQUdFU0hJRlQpCiAjZGVmaW5lIGNlX3VwdG9kYXRlKGNlKSAoKGNlKS0+Y2VfZmxhZ3MgJiBDRV9VUFRPREFURSkKKyNkZWZpbmUgY2Vfc2tpcF93b3JrdHJlZShjZSkgKChjZSktPmNlX2ZsYWdzICYgQ0VfU0tJUF9XT1JLVFJFRSkKICNkZWZpbmUgY2VfbWFya191cHRvZGF0ZShjZSkgKChjZSktPmNlX2ZsYWdzIHw9IENFX1VQVE9EQVRFKQogCiAjZGVmaW5lIGNlX3Blcm1pc3Npb25zKG1vZGUpICgoKG1vZGUpICYgMDEwMCkgPyAwNzU1IDogMDY0NCkKQEAgLTI4MSw2ICsyOTAsNyBAQAogc3RydWN0IGluZGV4X3N0YXRlIHsKIAlzdHJ1Y3QgY2FjaGVfZW50cnkgKipjYWNoZTsKIAl1bnNpZ25lZCBpbnQgY2FjaGVfbnIsIGNhY2hlX2FsbG9jLCBjYWNoZV9jaGFuZ2VkOworCXN0cnVjdCBzdHJpbmdfbGlzdCAqcmVzb2x2ZV91bmRvOwogCXN0cnVjdCBjYWNoZV90cmVlICpjYWNoZV90cmVlOwogCXN0cnVjdCBjYWNoZV90aW1lIHRpbWVzdGFtcDsKIAl2b2lkICphbGxvYzsKQEAgLTMzMCwxMSArMzQwLDE0IEBACiAjZGVmaW5lIHJlbW92ZV9maWxlX2Zyb21fY2FjaGUocGF0aCkgcmVtb3ZlX2ZpbGVfZnJvbV9pbmRleCgmdGhlX2luZGV4LCAocGF0aCkpCiAjZGVmaW5lIGFkZF90b19jYWNoZShwYXRoLCBzdCwgZmxhZ3MpIGFkZF90b19pbmRleCgmdGhlX2luZGV4LCAocGF0aCksIChzdCksIChmbGFncykpCiAjZGVmaW5lIGFkZF9maWxlX3RvX2NhY2hlKHBhdGgsIGZsYWdzKSBhZGRfZmlsZV90b19pbmRleCgmdGhlX2luZGV4LCAocGF0aCksIChmbGFncykpCi0jZGVmaW5lIHJlZnJlc2hfY2FjaGUoZmxhZ3MpIHJlZnJlc2hfaW5kZXgoJnRoZV9pbmRleCwgKGZsYWdzKSwgTlVMTCwgTlVMTCkKKyNkZWZpbmUgcmVmcmVzaF9jYWNoZShmbGFncykgcmVmcmVzaF9pbmRleCgmdGhlX2luZGV4LCAoZmxhZ3MpLCBOVUxMLCBOVUxMLCBOVUxMKQogI2RlZmluZSBjZV9tYXRjaF9zdGF0KGNlLCBzdCwgb3B0aW9ucykgaWVfbWF0Y2hfc3RhdCgmdGhlX2luZGV4LCAoY2UpLCAoc3QpLCAob3B0aW9ucykpCiAjZGVmaW5lIGNlX21vZGlmaWVkKGNlLCBzdCwgb3B0aW9ucykgaWVfbW9kaWZpZWQoJnRoZV9pbmRleCwgKGNlKSwgKHN0KSwgKG9wdGlvbnMpKQogI2RlZmluZSBjYWNoZV9uYW1lX2V4aXN0cyhuYW1lLCBuYW1lbGVuLCBpZ25jYXNlKSBpbmRleF9uYW1lX2V4aXN0cygmdGhlX2luZGV4LCAobmFtZSksIChuYW1lbGVuKSwgKGlnbmNhc2UpKQogI2RlZmluZSBjYWNoZV9uYW1lX2lzX290aGVyKG5hbWUsIG5hbWVsZW4pIGluZGV4X25hbWVfaXNfb3RoZXIoJnRoZV9pbmRleCwgKG5hbWUpLCAobmFtZWxlbikpCisjZGVmaW5lIHJlc29sdmVfdW5kb19jbGVhcigpIHJlc29sdmVfdW5kb19jbGVhcl9pbmRleCgmdGhlX2luZGV4KQorI2RlZmluZSB1bm1lcmdlX2NhY2hlX2VudHJ5X2F0KGF0KSB1bm1lcmdlX2luZGV4X2VudHJ5X2F0KCZ0aGVfaW5kZXgsIGF0KQorI2RlZmluZSB1bm1lcmdlX2NhY2hlKHBhdGhzcGVjKSB1bm1lcmdlX2luZGV4KCZ0aGVfaW5kZXgsIHBhdGhzcGVjKQogI2VuZGlmCiAKIGVudW0gb2JqZWN0X3R5cGUgewpAQCAtMzY4LDkgKzM4MSwyMSBAQAogI2RlZmluZSBDT05GSUdfRU5WSVJPTk1FTlQgIkdJVF9DT05GSUciCiAjZGVmaW5lIEVYRUNfUEFUSF9FTlZJUk9OTUVOVCAiR0lUX0VYRUNfUEFUSCIKICNkZWZpbmUgQ0VJTElOR19ESVJFQ1RPUklFU19FTlZJUk9OTUVOVCAiR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMiCisjZGVmaW5lIE5PX1JFUExBQ0VfT0JKRUNUU19FTlZJUk9OTUVOVCAiR0lUX05PX1JFUExBQ0VfT0JKRUNUUyIKICNkZWZpbmUgR0lUQVRUUklCVVRFU19GSUxFICIuZ2l0YXR0cmlidXRlcyIKICNkZWZpbmUgSU5GT0FUVFJJQlVURVNfRklMRSAiaW5mby9hdHRyaWJ1dGVzIgogI2RlZmluZSBBVFRSSUJVVEVfTUFDUk9fUFJFRklYICJbYXR0cl0iCisjZGVmaW5lIEdJVF9OT1RFU19SRUZfRU5WSVJPTk1FTlQgIkdJVF9OT1RFU19SRUYiCisjZGVmaW5lIEdJVF9OT1RFU19ERUZBVUxUX1JFRiAicmVmcy9ub3Rlcy9jb21taXRzIgorCisvKgorICogUmVwb3NpdG9yeS1sb2NhbCBHSVRfKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAqIFRoZSBhcnJheSBpcyBOVUxMLXRlcm1pbmF0ZWQgdG8gc2ltcGxpZnkgaXRzIHVzYWdlIGluIGNvbnRleHRzIHN1Y2gKKyAqIGVudmlyb25tZW50IGNyZWF0aW9uIG9yIHNpbXBsZSB3YWxrIG9mIHRoZSBsaXN0LgorICogVGhlIG51bWJlciBvZiBub24tTlVMTCBlbnRyaWVzIGlzIGF2YWlsYWJsZSBhcyBhIG1hY3JvLgorICovCisjZGVmaW5lIExPQ0FMX1JFUE9fRU5WX1NJWkUgOAorZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IGxvY2FsX3JlcG9fZW52W0xPQ0FMX1JFUE9fRU5WX1NJWkUgKyAxXTsKIAogZXh0ZXJuIGludCBpc19iYXJlX3JlcG9zaXRvcnlfY2ZnOwogZXh0ZXJuIGludCBpc19iYXJlX3JlcG9zaXRvcnkodm9pZCk7CkBAIC0zOTUsNiArNDIwLDcgQEAKIGV4dGVybiBjb25zdCBjaGFyICpzZXR1cF9naXRfZGlyZWN0b3J5KHZvaWQpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKnByZWZpeF9wYXRoKGNvbnN0IGNoYXIgKnByZWZpeCwgaW50IGxlbiwgY29uc3QgY2hhciAqcGF0aCk7CiBleHRlcm4gY29uc3QgY2hhciAqcHJlZml4X2ZpbGVuYW1lKGNvbnN0IGNoYXIgKnByZWZpeCwgaW50IGxlbiwgY29uc3QgY2hhciAqcGF0aCk7CitleHRlcm4gaW50IGNoZWNrX2ZpbGVuYW1lKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gdm9pZCB2ZXJpZnlfZmlsZW5hbWUoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpuYW1lKTsKIGV4dGVybiB2b2lkIHZlcmlmeV9ub25fZmlsZW5hbWUoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpuYW1lKTsKIApAQCAtNDQwLDcgKzQ2Niw2IEBACiAjZGVmaW5lIEFERF9DQUNIRV9KVVNUX0FQUEVORCA4CQkvKiBBcHBlbmQgb25seTsgdHJlZS5jOjpyZWFkX3RyZWUoKSAqLwogI2RlZmluZSBBRERfQ0FDSEVfTkVXX09OTFkgMTYJCS8qIERvIG5vdCByZXBsYWNlIGV4aXN0aW5nIG9uZXMgKi8KIGV4dGVybiBpbnQgYWRkX2luZGV4X2VudHJ5KHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBpbnQgb3B0aW9uKTsKLWV4dGVybiBzdHJ1Y3QgY2FjaGVfZW50cnkgKnJlZnJlc2hfY2FjaGVfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgaW50IHJlYWxseSk7CiBleHRlcm4gdm9pZCByZW5hbWVfaW5kZXhfZW50cnlfYXQoc3RydWN0IGluZGV4X3N0YXRlICosIGludCBwb3MsIGNvbnN0IGNoYXIgKm5ld19uYW1lKTsKIGV4dGVybiBpbnQgcmVtb3ZlX2luZGV4X2VudHJ5X2F0KHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBpbnQgcG9zKTsKIGV4dGVybiB2b2lkIHJlbW92ZV9tYXJrZWRfY2FjaGVfZW50cmllcyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSk7CkBAIC00NTksNyArNDg0LDkgQEAKIC8qIGRvIHN0YXQgY29tcGFyaXNvbiBldmVuIGlmIENFX1ZBTElEIGlzIHRydWUgKi8KICNkZWZpbmUgQ0VfTUFUQ0hfSUdOT1JFX1ZBTElECQkwMQogLyogZG8gbm90IGNoZWNrIHRoZSBjb250ZW50cyBidXQgcmVwb3J0IGRpcnR5IG9uIHJhY2lseS1jbGVhbiBlbnRyaWVzICovCi0jZGVmaW5lIENFX01BVENIX1JBQ1lfSVNfRElSVFkJMDIKKyNkZWZpbmUgQ0VfTUFUQ0hfUkFDWV9JU19ESVJUWQkJMDIKKy8qIGRvIHN0YXQgY29tcGFyaXNvbiBldmVuIGlmIENFX1NLSVBfV09SS1RSRUUgaXMgdHJ1ZSAqLworI2RlZmluZSBDRV9NQVRDSF9JR05PUkVfU0tJUF9XT1JLVFJFRQkwNAogZXh0ZXJuIGludCBpZV9tYXRjaF9zdGF0KGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiwgc3RydWN0IHN0YXQgKiwgdW5zaWduZWQgaW50KTsKIGV4dGVybiBpbnQgaWVfbW9kaWZpZWQoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICosIHN0cnVjdCBjYWNoZV9lbnRyeSAqLCBzdHJ1Y3Qgc3RhdCAqLCB1bnNpZ25lZCBpbnQpOwogCkBAIC00NzMsOCArNTAwLDggQEAKICNkZWZpbmUgUkVGUkVTSF9RVUlFVAkJMHgwMDA0CS8qIGJlIHF1aWV0IGFib3V0IGl0ICovCiAjZGVmaW5lIFJFRlJFU0hfSUdOT1JFX01JU1NJTkcJMHgwMDA4CS8qIGlnbm9yZSBub24tZXhpc3RlbnQgKi8KICNkZWZpbmUgUkVGUkVTSF9JR05PUkVfU1VCTU9EVUxFUwkweDAwMTAJLyogaWdub3JlIHN1Ym1vZHVsZXMgKi8KLSNkZWZpbmUgUkVGUkVTSF9TQVlfQ0hBTkdFRAkweDAwMjAJLyogc2F5ICJjaGFuZ2VkIiBub3QgIm5lZWRzIHVwZGF0ZSIgKi8KLWV4dGVybiBpbnQgcmVmcmVzaF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgdW5zaWduZWQgaW50IGZsYWdzLCBjb25zdCBjaGFyICoqcGF0aHNwZWMsIGNoYXIgKnNlZW4pOworI2RlZmluZSBSRUZSRVNIX0lOX1BPUkNFTEFJTgkweDAwMjAJLyogdXNlciBmcmllbmRseSBvdXRwdXQsIG5vdCAibmVlZHMgdXBkYXRlIiAqLworZXh0ZXJuIGludCByZWZyZXNoX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKipwYXRoc3BlYywgY2hhciAqc2VlbiwgY2hhciAqaGVhZGVyX21zZyk7CiAKIHN0cnVjdCBsb2NrX2ZpbGUgewogCXN0cnVjdCBsb2NrX2ZpbGUgKm5leHQ7CkBAIC00ODUsNiArNTEyLDcgQEAKIH07CiAjZGVmaW5lIExPQ0tfRElFX09OX0VSUk9SIDEKICNkZWZpbmUgTE9DS19OT0RFUkVGIDIKK2V4dGVybiBpbnQgdW5hYmxlX3RvX2xvY2tfZXJyb3IoY29uc3QgY2hhciAqcGF0aCwgaW50IGVycik7CiBleHRlcm4gTk9SRVRVUk4gdm9pZCB1bmFibGVfdG9fbG9ja19pbmRleF9kaWUoY29uc3QgY2hhciAqcGF0aCwgaW50IGVycik7CiBleHRlcm4gaW50IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoc3RydWN0IGxvY2tfZmlsZSAqLCBjb25zdCBjaGFyICpwYXRoLCBpbnQpOwogZXh0ZXJuIGludCBob2xkX2xvY2tfZmlsZV9mb3JfYXBwZW5kKHN0cnVjdCBsb2NrX2ZpbGUgKiwgY29uc3QgY2hhciAqcGF0aCwgaW50KTsKQEAgLTUwOSw2ICs1MzcsNyBAQAogZXh0ZXJuIGludCB3YXJuX2FtYmlndW91c19yZWZzOwogZXh0ZXJuIGludCBzaGFyZWRfcmVwb3NpdG9yeTsKIGV4dGVybiBjb25zdCBjaGFyICphcHBseV9kZWZhdWx0X3doaXRlc3BhY2U7CitleHRlcm4gY29uc3QgY2hhciAqYXBwbHlfZGVmYXVsdF9pZ25vcmV3aGl0ZXNwYWNlOwogZXh0ZXJuIGludCB6bGliX2NvbXByZXNzaW9uX2xldmVsOwogZXh0ZXJuIGludCBjb3JlX2NvbXByZXNzaW9uX2xldmVsOwogZXh0ZXJuIGludCBjb3JlX2NvbXByZXNzaW9uX3NlZW47CkBAIC01MTYsOCArNTQ1LDEwIEBACiBleHRlcm4gc2l6ZV90IHBhY2tlZF9naXRfbGltaXQ7CiBleHRlcm4gc2l6ZV90IGRlbHRhX2Jhc2VfY2FjaGVfbGltaXQ7CiBleHRlcm4gaW50IGF1dG9fY3JsZjsKK2V4dGVybiBpbnQgcmVhZF9yZXBsYWNlX3JlZnM7CiBleHRlcm4gaW50IGZzeW5jX29iamVjdF9maWxlczsKIGV4dGVybiBpbnQgY29yZV9wcmVsb2FkX2luZGV4OworZXh0ZXJuIGludCBjb3JlX2FwcGx5X3NwYXJzZV9jaGVja291dDsKIAogZW51bSBzYWZlX2NybGYgewogCVNBRkVfQ1JMRl9GQUxTRSA9IDAsCkBAIC01MzMsNiArNTY0LDcgQEAKIAlCUkFOQ0hfVFJBQ0tfUkVNT1RFLAogCUJSQU5DSF9UUkFDS19BTFdBWVMsCiAJQlJBTkNIX1RSQUNLX0VYUExJQ0lULAorCUJSQU5DSF9UUkFDS19PVkVSUklERSwKIH07CiAKIGVudW0gcmViYXNlX3NldHVwX3R5cGUgewpAQCAtNTQzLDcgKzU3NSw2IEBACiB9OwogCiBlbnVtIHB1c2hfZGVmYXVsdF90eXBlIHsKLQlQVVNIX0RFRkFVTFRfVU5TUEVDSUZJRUQgPSAtMSwKIAlQVVNIX0RFRkFVTFRfTk9USElORyA9IDAsCiAJUFVTSF9ERUZBVUxUX01BVENISU5HLAogCVBVU0hfREVGQVVMVF9UUkFDS0lORywKQEAgLTU2MSw2ICs1OTIsMTAgQEAKIAogZXh0ZXJuIGVudW0gb2JqZWN0X2NyZWF0aW9uX21vZGUgb2JqZWN0X2NyZWF0aW9uX21vZGU7CiAKK2V4dGVybiBjaGFyICpub3Rlc19yZWZfbmFtZTsKKworZXh0ZXJuIGludCBncmFmdHNfcmVwbGFjZV9wYXJlbnRzOworCiAjZGVmaW5lIEdJVF9SRVBPX1ZFUlNJT04gMAogZXh0ZXJuIGludCByZXBvc2l0b3J5X2Zvcm1hdF92ZXJzaW9uOwogZXh0ZXJuIGludCBjaGVja19yZXBvc2l0b3J5X2Zvcm1hdCh2b2lkKTsKQEAgLTYwNCw3ICs2MzksNiBAQAogewogCW1lbXNldChoYXNoLCAwLCAyMCk7CiB9Ci1leHRlcm4gaW50IGlzX2VtcHR5X2Jsb2Jfc2hhMShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKIAogI2RlZmluZSBFTVBUWV9UUkVFX1NIQTFfSEVYIFwKIAkiNGI4MjVkYzY0MmNiNmViOWEwNjBlNTRiZjhkNjkyODhmYmVlNDkwNCIKQEAgLTYxNCw2ICs2NDgsMTIgQEAKIAogaW50IGdpdF9ta3N0ZW1wKGNoYXIgKnBhdGgsIHNpemVfdCBuLCBjb25zdCBjaGFyICp0ZW1wbGF0ZSk7CiAKK2ludCBnaXRfbWtzdGVtcHMoY2hhciAqcGF0aCwgc2l6ZV90IG4sIGNvbnN0IGNoYXIgKnRlbXBsYXRlLCBpbnQgc3VmZml4X2xlbik7CisKKy8qIHNldCBkZWZhdWx0IHBlcm1pc3Npb25zIGJ5IHBhc3NpbmcgbW9kZSBhcmd1bWVudHMgdG8gb3BlbigyKSAqLworaW50IGdpdF9ta3N0ZW1wc19tb2RlKGNoYXIgKnBhdHRlcm4sIGludCBzdWZmaXhfbGVuLCBpbnQgbW9kZSk7CitpbnQgZ2l0X21rc3RlbXBfbW9kZShjaGFyICpwYXR0ZXJuLCBpbnQgbW9kZSk7CisKIC8qCiAgKiBOT1RFIE5PVEUgTk9URSEhCiAgKgpAQCAtNjM0LDYgKzY3NCw3IEBACiAjZGVmaW5lIGFkanVzdF9zaGFyZWRfcGVybShwYXRoKSBzZXRfc2hhcmVkX3Blcm0oKHBhdGgpLCAwKQogaW50IHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXMoY2hhciAqcGF0aCk7CiBpbnQgc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChjb25zdCBjaGFyICpwYXRoKTsKK2V4dGVybiBjaGFyICpleHBhbmRfdXNlcl9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpOwogY2hhciAqZW50ZXJfcmVwbyhjaGFyICpwYXRoLCBpbnQgc3RyaWN0KTsKIHN0YXRpYyBpbmxpbmUgaW50IGlzX2Fic29sdXRlX3BhdGgoY29uc3QgY2hhciAqcGF0aCkKIHsKQEAgLTY0NiwxMCArNjg3LDE1IEBACiBpbnQgbm9ybWFsaXplX3BhdGhfY29weShjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYyk7CiBpbnQgbG9uZ2VzdF9hbmNlc3Rvcl9sZW5ndGgoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqcHJlZml4X2xpc3QpOwogY2hhciAqc3RyaXBfcGF0aF9zdWZmaXgoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3VmZml4KTsKK2ludCBkYWVtb25fYXZvaWRfYWxpYXMoY29uc3QgY2hhciAqcGF0aCk7CiAKIC8qIFJlYWQgYW5kIHVucGFjayBhIHNoYTEgZmlsZSBpbnRvIG1lbW9yeSwgd3JpdGUgbWVtb3J5IHRvIGEgc2hhMSBmaWxlICovCiBleHRlcm4gaW50IHNoYTFfb2JqZWN0X2luZm8oY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBsb25nICopOwotZXh0ZXJuIHZvaWQgKiByZWFkX3NoYTFfZmlsZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBlbnVtIG9iamVjdF90eXBlICp0eXBlLCB1bnNpZ25lZCBsb25nICpzaXplKTsKK2V4dGVybiB2b2lkICpyZWFkX3NoYTFfZmlsZV9yZXBsKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGVudW0gb2JqZWN0X3R5cGUgKnR5cGUsIHVuc2lnbmVkIGxvbmcgKnNpemUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipyZXBsYWNlbWVudCk7CitzdGF0aWMgaW5saW5lIHZvaWQgKnJlYWRfc2hhMV9maWxlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGVudW0gb2JqZWN0X3R5cGUgKnR5cGUsIHVuc2lnbmVkIGxvbmcgKnNpemUpCit7CisJcmV0dXJuIHJlYWRfc2hhMV9maWxlX3JlcGwoc2hhMSwgdHlwZSwgc2l6ZSwgTlVMTCk7Cit9CiBleHRlcm4gaW50IGhhc2hfc2hhMV9maWxlKGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4sIGNvbnN0IGNoYXIgKnR5cGUsIHVuc2lnbmVkIGNoYXIgKnNoYTEpOwogZXh0ZXJuIGludCB3cml0ZV9zaGExX2ZpbGUodm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbiwgY29uc3QgY2hhciAqdHlwZSwgdW5zaWduZWQgY2hhciAqcmV0dXJuX3NoYTEpOwogZXh0ZXJuIGludCBwcmV0ZW5kX3NoYTFfZmlsZSh2b2lkICosIHVuc2lnbmVkIGxvbmcsIGVudW0gb2JqZWN0X3R5cGUsIHVuc2lnbmVkIGNoYXIgKik7CkBAIC02NjYsNyArNzEyLDYgQEAKIGV4dGVybiBpbnQgaGFzX3NoYTFfZmlsZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKIGV4dGVybiBpbnQgaGFzX2xvb3NlX29iamVjdF9ub25sb2NhbChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKIAotZXh0ZXJuIGludCBoYXNfcGFja19maWxlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOwogZXh0ZXJuIGludCBoYXNfcGFja19pbmRleChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKIAogZXh0ZXJuIGNvbnN0IHNpZ25lZCBjaGFyIGhleHZhbF90YWJsZVsyNTZdOwpAQCAtNjgwLDcgKzcyNSwxMSBAQAogI2RlZmluZSBERUZBVUxUX0FCQlJFViA3CiAKIGV4dGVybiBpbnQgZ2V0X3NoYTEoY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBjaGFyICpzaGExKTsKLWV4dGVybiBpbnQgZ2V0X3NoYTFfd2l0aF9tb2RlKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgY2hhciAqc2hhMSwgdW5zaWduZWQgKm1vZGUpOworZXh0ZXJuIGludCBnZXRfc2hhMV93aXRoX21vZGVfMShjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGNoYXIgKnNoYTEsIHVuc2lnbmVkICptb2RlLCBpbnQgZ2VudGx5LCBjb25zdCBjaGFyICpwcmVmaXgpOworc3RhdGljIGlubGluZSBpbnQgZ2V0X3NoYTFfd2l0aF9tb2RlKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgY2hhciAqc2hhMSwgdW5zaWduZWQgKm1vZGUpCit7CisJcmV0dXJuIGdldF9zaGExX3dpdGhfbW9kZV8xKHN0ciwgc2hhMSwgbW9kZSwgMSwgTlVMTCk7Cit9CiBleHRlcm4gaW50IGdldF9zaGExX2hleChjb25zdCBjaGFyICpoZXgsIHVuc2lnbmVkIGNoYXIgKnNoYTEpOwogZXh0ZXJuIGNoYXIgKnNoYTFfdG9faGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOwkvKiBzdGF0aWMgYnVmZmVyIHJlc3VsdCEgKi8KIGV4dGVybiBpbnQgcmVhZF9yZWYoY29uc3QgY2hhciAqZmlsZW5hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEpOwpAQCAtNjg4LDYgKzczNyw3IEBACiBleHRlcm4gaW50IGR3aW1fcmVmKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwgdW5zaWduZWQgY2hhciAqc2hhMSwgY2hhciAqKnJlZik7CiBleHRlcm4gaW50IGR3aW1fbG9nKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwgdW5zaWduZWQgY2hhciAqc2hhMSwgY2hhciAqKnJlZik7CiBleHRlcm4gaW50IGludGVycHJldF9icmFuY2hfbmFtZShjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBzdHJidWYgKik7CitleHRlcm4gaW50IGdldF9zaGExX21iKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgY2hhciAqc2hhMSk7CiAKIGV4dGVybiBpbnQgcmVmbmFtZV9tYXRjaChjb25zdCBjaGFyICphYmJyZXZfbmFtZSwgY29uc3QgY2hhciAqZnVsbF9uYW1lLCBjb25zdCBjaGFyICoqcnVsZXMpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKnJlZl9yZXZfcGFyc2VfcnVsZXNbXTsKQEAgLTcxOSw5ICs3NjksMTUgQEAKIH07CiAKIGNvbnN0IGNoYXIgKnNob3dfZGF0ZSh1bnNpZ25lZCBsb25nIHRpbWUsIGludCB0aW1lem9uZSwgZW51bSBkYXRlX21vZGUgbW9kZSk7Citjb25zdCBjaGFyICpzaG93X2RhdGVfcmVsYXRpdmUodW5zaWduZWQgbG9uZyB0aW1lLCBpbnQgdHosCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHRpbWV2YWwgKm5vdywKKwkJCSAgICAgICBjaGFyICp0aW1lYnVmLAorCQkJICAgICAgIHNpemVfdCB0aW1lYnVmX3NpemUpOwogaW50IHBhcnNlX2RhdGUoY29uc3QgY2hhciAqZGF0ZSwgY2hhciAqYnVmLCBpbnQgYnVmc2l6ZSk7CiB2b2lkIGRhdGVzdGFtcChjaGFyICpidWYsIGludCBidWZzaXplKTsKLXVuc2lnbmVkIGxvbmcgYXBwcm94aWRhdGUoY29uc3QgY2hhciAqKTsKKyNkZWZpbmUgYXBwcm94aWRhdGUocykgYXBwcm94aWRhdGVfY2FyZWZ1bCgocyksIE5VTEwpCit1bnNpZ25lZCBsb25nIGFwcHJveGlkYXRlX2NhcmVmdWwoY29uc3QgY2hhciAqLCBpbnQgKik7Cit1bnNpZ25lZCBsb25nIGFwcHJveGlkYXRlX3JlbGF0aXZlKGNvbnN0IGNoYXIgKmRhdGUsIGNvbnN0IHN0cnVjdCB0aW1ldmFsICpub3cpOwogZW51bSBkYXRlX21vZGUgcGFyc2VfZGF0ZV9mb3JtYXQoY29uc3QgY2hhciAqZm9ybWF0KTsKIAogI2RlZmluZSBJREVOVF9XQVJOX09OX05PX05BTUUgIDEKQEAgLTczMSw2ICs3ODcsOCBAQAogZXh0ZXJuIGNvbnN0IGNoYXIgKmdpdF9jb21taXR0ZXJfaW5mbyhpbnQpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKmZtdF9pZGVudChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICplbWFpbCwgY29uc3QgY2hhciAqZGF0ZV9zdHIsIGludCk7CiBleHRlcm4gY29uc3QgY2hhciAqZm10X25hbWUoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZW1haWwpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdpdF9lZGl0b3Iodm9pZCk7CitleHRlcm4gY29uc3QgY2hhciAqZ2l0X3BhZ2VyKGludCBzdGRvdXRfaXNfdHR5KTsKIAogc3RydWN0IGNoZWNrb3V0IHsKIAljb25zdCBjaGFyICpiYXNlX2RpcjsKQEAgLTc0MiwxMSArODAwLDE5IEBACiB9OwogCiBleHRlcm4gaW50IGNoZWNrb3V0X2VudHJ5KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGNvbnN0IHN0cnVjdCBjaGVja291dCAqc3RhdGUsIGNoYXIgKnRvcGF0aCk7CisKK3N0cnVjdCBjYWNoZV9kZWYgeworCWNoYXIgcGF0aFtQQVRIX01BWCArIDFdOworCWludCBsZW47CisJaW50IGZsYWdzOworCWludCB0cmFja19mbGFnczsKKwlpbnQgcHJlZml4X2xlbl9zdGF0X2Z1bmM7Cit9OworCiBleHRlcm4gaW50IGhhc19zeW1saW5rX2xlYWRpbmdfcGF0aChjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKTsKK2V4dGVybiBpbnQgdGhyZWFkZWRfaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKHN0cnVjdCBjYWNoZV9kZWYgKiwgY29uc3QgY2hhciAqLCBpbnQpOwogZXh0ZXJuIGludCBoYXNfc3ltbGlua19vcl9ub2VudF9sZWFkaW5nX3BhdGgoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbik7CiBleHRlcm4gaW50IGhhc19kaXJzX29ubHlfcGF0aChjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLCBpbnQgcHJlZml4X2xlbik7Ci1leHRlcm4gdm9pZCBpbnZhbGlkYXRlX2xzdGF0X2NhY2hlKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pOwotZXh0ZXJuIHZvaWQgY2xlYXJfbHN0YXRfY2FjaGUodm9pZCk7CiBleHRlcm4gdm9pZCBzY2hlZHVsZV9kaXJfZm9yX3JlbW92YWwoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbik7CiBleHRlcm4gdm9pZCByZW1vdmVfc2NoZWR1bGVkX2RpcnModm9pZCk7CiAKQEAgLTgyNyw3ICs4OTMsNiBAQAogZXh0ZXJuIHN0cnVjdCBjaGlsZF9wcm9jZXNzICpnaXRfY29ubmVjdChpbnQgZmRbMl0sIGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqcHJvZywgaW50IGZsYWdzKTsKIGV4dGVybiBpbnQgZmluaXNoX2Nvbm5lY3Qoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNvbm4pOwogZXh0ZXJuIGludCBwYXRoX21hdGNoKGNvbnN0IGNoYXIgKnBhdGgsIGludCBuciwgY2hhciAqKm1hdGNoKTsKLWV4dGVybiBpbnQgZ2V0X2FjayhpbnQgZmQsIHVuc2lnbmVkIGNoYXIgKnJlc3VsdF9zaGExKTsKIHN0cnVjdCBleHRyYV9oYXZlX29iamVjdHMgewogCWludCBuciwgYWxsb2M7CiAJdW5zaWduZWQgY2hhciAoKmFycmF5KVsyMF07CkBAIC04NzMsNiArOTM4LDcgQEAKIGV4dGVybiBpbnQgZ2l0X2NvbmZpZ19ib29sX29yX2ludChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50ICopOwogZXh0ZXJuIGludCBnaXRfY29uZmlnX2Jvb2woY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogZXh0ZXJuIGludCBnaXRfY29uZmlnX3N0cmluZyhjb25zdCBjaGFyICoqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gaW50IGdpdF9jb25maWdfcGF0aG5hbWUoY29uc3QgY2hhciAqKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogZXh0ZXJuIGludCBnaXRfY29uZmlnX3NldChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiBleHRlcm4gaW50IGdpdF9jb25maWdfc2V0X211bHRpdmFyKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CiBleHRlcm4gaW50IGdpdF9jb25maWdfcmVuYW1lX3NlY3Rpb24oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpAQCAtODg2LDcgKzk1MiwxMSBAQAogI2RlZmluZSBNQVhfR0lUTkFNRSAoMTAwMCkKIGV4dGVybiBjaGFyIGdpdF9kZWZhdWx0X2VtYWlsW01BWF9HSVROQU1FXTsKIGV4dGVybiBjaGFyIGdpdF9kZWZhdWx0X25hbWVbTUFYX0dJVE5BTUVdOworI2RlZmluZSBJREVOVF9OQU1FX0dJVkVOIDAxCisjZGVmaW5lIElERU5UX01BSUxfR0lWRU4gMDIKKyNkZWZpbmUgSURFTlRfQUxMX0dJVkVOIChJREVOVF9OQU1FX0dJVkVOfElERU5UX01BSUxfR0lWRU4pCiBleHRlcm4gaW50IHVzZXJfaWRlbnRfZXhwbGljaXRseV9naXZlbjsKK2V4dGVybiBpbnQgdXNlcl9pZGVudF9zdWZmaWNpZW50bHlfZ2l2ZW4odm9pZCk7CiAKIGV4dGVybiBjb25zdCBjaGFyICpnaXRfY29tbWl0X2VuY29kaW5nOwogZXh0ZXJuIGNvbnN0IGNoYXIgKmdpdF9sb2dfb3V0cHV0X2VuY29kaW5nOwpAQCAtODk2LDEzICs5NjYsMTkgQEAKIGV4dGVybiB2b2lkIG1heWJlX2ZsdXNoX29yX2RpZShGSUxFICosIGNvbnN0IGNoYXIgKik7CiBleHRlcm4gaW50IGNvcHlfZmQoaW50IGlmZCwgaW50IG9mZCk7CiBleHRlcm4gaW50IGNvcHlfZmlsZShjb25zdCBjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgaW50IG1vZGUpOwotZXh0ZXJuIHNzaXplX3QgcmVhZF9pbl9mdWxsKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpOwotZXh0ZXJuIHNzaXplX3Qgd3JpdGVfaW5fZnVsbChpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKK2V4dGVybiBpbnQgY29weV9maWxlX3dpdGhfdGltZShjb25zdCBjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgaW50IG1vZGUpOwogZXh0ZXJuIHZvaWQgd3JpdGVfb3JfZGllKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpOwogZXh0ZXJuIGludCB3cml0ZV9vcl93aGluZShpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LCBjb25zdCBjaGFyICptc2cpOwogZXh0ZXJuIGludCB3cml0ZV9vcl93aGluZV9waXBlKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsIGNvbnN0IGNoYXIgKm1zZyk7CiBleHRlcm4gdm9pZCBmc3luY19vcl9kaWUoaW50IGZkLCBjb25zdCBjaGFyICopOwogCitleHRlcm4gc3NpemVfdCByZWFkX2luX2Z1bGwoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCk7CitleHRlcm4gc3NpemVfdCB3cml0ZV9pbl9mdWxsKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpOworc3RhdGljIGlubGluZSBzc2l6ZV90IHdyaXRlX3N0cl9pbl9mdWxsKGludCBmZCwgY29uc3QgY2hhciAqc3RyKQoreworCXJldHVybiB3cml0ZV9pbl9mdWxsKGZkLCBzdHIsIHN0cmxlbihzdHIpKTsKK30KKwogLyogcGFnZXIuYyAqLwogZXh0ZXJuIHZvaWQgc2V0dXBfcGFnZXIodm9pZCk7CiBleHRlcm4gY29uc3QgY2hhciAqcGFnZXJfcHJvZ3JhbTsKQEAgLTkyNSw3ICsxMDAxLDkgQEAKIGV4dGVybiB2b2lkIGFsbG9jX3JlcG9ydCh2b2lkKTsKIAogLyogdHJhY2UuYyAqLworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKIGV4dGVybiB2b2lkIHRyYWNlX3ByaW50Zihjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKQogZXh0ZXJuIHZvaWQgdHJhY2VfYXJndl9wcmludGYoY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKIAogLyogY29udmVydC5jICovCkBAIC05NDYsMTUgKzEwMjQsMTggQEAKIAogLyogbWF0Y2gtdHJlZXMuYyAqLwogdm9pZCBzaGlmdF90cmVlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosIGludCk7Cit2b2lkIHNoaWZ0X3RyZWVfYnkoY29uc3QgdW5zaWduZWQgY2hhciAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiwgY29uc3QgY2hhciAqKTsKIAogLyoKICAqIHdoaXRlc3BhY2UgcnVsZXMuCiAgKiB1c2VkIGJ5IGJvdGggZGlmZiBhbmQgYXBwbHkKICAqLwotI2RlZmluZSBXU19UUkFJTElOR19TUEFDRQkwMQorI2RlZmluZSBXU19CTEFOS19BVF9FT0wgICAgICAgICAwMQogI2RlZmluZSBXU19TUEFDRV9CRUZPUkVfVEFCCTAyCiAjZGVmaW5lIFdTX0lOREVOVF9XSVRIX05PTl9UQUIJMDQKICNkZWZpbmUgV1NfQ1JfQVRfRU9MICAgICAgICAgICAwMTAKKyNkZWZpbmUgV1NfQkxBTktfQVRfRU9GICAgICAgICAwMjAKKyNkZWZpbmUgV1NfVFJBSUxJTkdfU1BBQ0UgICAgICAoV1NfQkxBTktfQVRfRU9MfFdTX0JMQU5LX0FUX0VPRikKICNkZWZpbmUgV1NfREVGQVVMVF9SVUxFIChXU19UUkFJTElOR19TUEFDRXxXU19TUEFDRV9CRUZPUkVfVEFCKQogZXh0ZXJuIHVuc2lnbmVkIHdoaXRlc3BhY2VfcnVsZV9jZmc7CiBleHRlcm4gdW5zaWduZWQgd2hpdGVzcGFjZV9ydWxlKGNvbnN0IGNoYXIgKik7CmRpZmYgLS1naXQgYS9jb2xvci5jIGIvY29sb3IuYwppbmRleCA2Mjk3N2Y0Li5lOGJjYWMwIDEwMDY0NAotLS0gYS9jb2xvci5jCisrKyBiL2NvbG9yLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKIHsKIAljb25zdCBjaGFyICpwdHIgPSB2YWx1ZTsKIAlpbnQgbGVuID0gdmFsdWVfbGVuOwotCWludCBhdHRyID0gLTE7CisJdW5zaWduZWQgaW50IGF0dHIgPSAwOwogCWludCBmZyA9IC0yOwogCWludCBiZyA9IC0yOwogCkBAIC01Niw3ICs1Niw3IEBACiAJCXJldHVybjsKIAl9CiAKLQkvKiBbZmcgW2JnXV0gW2F0dHJdICovCisJLyogW2ZnIFtiZ11dIFthdHRyXS4uLiAqLwogCXdoaWxlIChsZW4gPiAwKSB7CiAJCWNvbnN0IGNoYXIgKndvcmQgPSBwdHI7CiAJCWludCB2YWwsIHdvcmRsZW4gPSAwOwpAQCAtODUsMTkgKzg1LDI3IEBACiAJCQlnb3RvIGJhZDsKIAkJfQogCQl2YWwgPSBwYXJzZV9hdHRyKHdvcmQsIHdvcmRsZW4pOwotCQlpZiAodmFsIDwgMCB8fCBhdHRyICE9IC0xKQorCQlpZiAoMCA8PSB2YWwpCisJCQlhdHRyIHw9ICgxIDw8IHZhbCk7CisJCWVsc2UKIAkJCWdvdG8gYmFkOwotCQlhdHRyID0gdmFsOwogCX0KIAotCWlmIChhdHRyID49IDAgfHwgZmcgPj0gMCB8fCBiZyA+PSAwKSB7CisJaWYgKGF0dHIgfHwgZmcgPj0gMCB8fCBiZyA+PSAwKSB7CiAJCWludCBzZXAgPSAwOworCQlpbnQgaTsKIAogCQkqZHN0KysgPSAnXDAzMyc7CiAJCSpkc3QrKyA9ICdbJzsKLQkJaWYgKGF0dHIgPj0gMCkgewotCQkJKmRzdCsrID0gJzAnICsgYXR0cjsKLQkJCXNlcCsrOworCisJCWZvciAoaSA9IDA7IGF0dHI7IGkrKykgeworCQkJdW5zaWduZWQgYml0ID0gKDEgPDwgaSk7CisJCQlpZiAoIShhdHRyICYgYml0KSkKKwkJCQljb250aW51ZTsKKwkJCWF0dHIgJj0gfmJpdDsKKwkJCWlmIChzZXArKykKKwkJCQkqZHN0KysgPSAnOyc7CisJCQkqZHN0KysgPSAnMCcgKyBpOwogCQl9CiAJCWlmIChmZyA+PSAwKSB7CiAJCQlpZiAoc2VwKyspCmRpZmYgLS1naXQgYS9jb2xvci5oIGIvY29sb3IuaAppbmRleCAxOGFiZWI3Li5iY2IyOGNmIDEwMDY0NAotLS0gYS9jb2xvci5oCisrKyBiL2NvbG9yLmgKQEAgLTEsOSArMSwyNiBAQAogI2lmbmRlZiBDT0xPUl9ICiAjZGVmaW5lIENPTE9SX0gKIAotLyogIlwwMzNbMTszODs1OzJ4eDs0ODs1OzJ4eG1cMCIgaXMgMjMgYnl0ZXMgKi8KLSNkZWZpbmUgQ09MT1JfTUFYTEVOIDI0CisvKiAgMiArICgyICogbnVtX2F0dHJzKSArIDggKyAxICsgOCArICdtJyArIE5VTCAqLworLyogIlwwMzNbMTsyOzQ7NTs3OzM4OzU7Mnh4OzQ4OzU7Mnh4bVwwIiAqLworLyoKKyAqIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiBBTlNJIGNvbG9yIHNlcXVlbmNlIHdlIHdvdWxkIGdlbmVyYXRlOgorICogLSBsZWFkaW5nIEVTQyAnWycgICAgICAgICAgICAyCisgKiAtIGF0dHIgKyAnOycgICAgICAgICAgICAgICAgIDIgKiA4IChlLmcuICIxOyIpCisgKiAtIGZnIGNvbG9yICsgJzsnICAgICAgICAgICAgIDkgKGUuZy4gIjM4OzU7Mnh4OyIpCisgKiAtIGZnIGNvbG9yICsgJzsnICAgICAgICAgICAgIDkgKGUuZy4gIjQ4OzU7Mnh4OyIpCisgKiAtIHRlcm1pbmF0aW5nICdtJyBOVUwgICAgICAgIDIKKyAqCisgKiBUaGUgYWJvdmUgb3ZlcmNvdW50cyBhdHRyICh3ZSBvbmx5IHVzZSA1IG5vdCA4KSBhbmQgb25lIHNlbWljb2xvbgorICogYnV0IGl0IGlzIGNsb3NlIGVub3VnaC4KKyAqLworI2RlZmluZSBDT0xPUl9NQVhMRU4gNDAKIAorLyoKKyAqIElNUE9SVEFOVDogRHVlIHRvIHRoZSB3YXkgdGhlc2UgY29sb3IgY29kZXMgYXJlIGVtdWxhdGVkIG9uIFdpbmRvd3MsCisgKiB3cml0ZSB0aGVtIG9ubHkgdXNpbmcgcHJpbnRmKCksIGZwcmludGYoKSwgYW5kIGZwdXRzKCkuIEluIHBhcnRpY3VsYXIsCisgKiBkbyBub3QgdXNlIHB1dHMoKSBvciB3cml0ZSgpLgorICovCiAjZGVmaW5lIEdJVF9DT0xPUl9OT1JNQUwJIiIKICNkZWZpbmUgR0lUX0NPTE9SX1JFU0VUCQkiXDAzM1ttIgogI2RlZmluZSBHSVRfQ09MT1JfQk9MRAkJIlwwMzNbMW0iCkBAIC0yOSw3ICs0Niw5IEBACiBpbnQgZ2l0X2NvbmZpZ19jb2xvcmJvb2woY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgaW50IHN0ZG91dF9pc190dHkpOwogdm9pZCBjb2xvcl9wYXJzZShjb25zdCBjaGFyICp2YWx1ZSwgY29uc3QgY2hhciAqdmFyLCBjaGFyICpkc3QpOwogdm9pZCBjb2xvcl9wYXJzZV9tZW0oY29uc3QgY2hhciAqdmFsdWUsIGludCBsZW4sIGNvbnN0IGNoYXIgKnZhciwgY2hhciAqZHN0KTsKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpCiBpbnQgY29sb3JfZnByaW50ZihGSUxFICpmcCwgY29uc3QgY2hhciAqY29sb3IsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpCiBpbnQgY29sb3JfZnByaW50Zl9sbihGSUxFICpmcCwgY29uc3QgY2hhciAqY29sb3IsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKIGludCBjb2xvcl9md3JpdGVfbGluZXMoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmNvbG9yLCBzaXplX3QgY291bnQsIGNvbnN0IGNoYXIgKmJ1Zik7CiAKZGlmZiAtLWdpdCBhL2NvbWJpbmUtZGlmZi5jIGIvY29tYmluZS1kaWZmLmMKaW5kZXggMWE2ZjlkMS4uNjE2MjY5MSAxMDA2NDQKLS0tIGEvY29tYmluZS1kaWZmLmMKKysrIGIvY29tYmluZS1kaWZmLmMKQEAgLTUyNCw2ICs1MjQsNyBAQAogCWludCBpOwogCXVuc2lnbmVkIGxvbmcgbG5vID0gMDsKIAljb25zdCBjaGFyICpjX2ZyYWcgPSBkaWZmX2dldF9jb2xvcih1c2VfY29sb3IsIERJRkZfRlJBR0lORk8pOworCWNvbnN0IGNoYXIgKmNfZnVuYyA9IGRpZmZfZ2V0X2NvbG9yKHVzZV9jb2xvciwgRElGRl9GVU5DSU5GTyk7CiAJY29uc3QgY2hhciAqY19uZXcgPSBkaWZmX2dldF9jb2xvcih1c2VfY29sb3IsIERJRkZfRklMRV9ORVcpOwogCWNvbnN0IGNoYXIgKmNfb2xkID0gZGlmZl9nZXRfY29sb3IodXNlX2NvbG9yLCBESUZGX0ZJTEVfT0xEKTsKIAljb25zdCBjaGFyICpjX3BsYWluID0gZGlmZl9nZXRfY29sb3IodXNlX2NvbG9yLCBESUZGX1BMQUlOKTsKQEAgLTU4OCw3ICs1ODksOSBAQAogCQkJCSAgICBjb21tZW50X2VuZCA9IGk7CiAJCQl9CiAJCQlpZiAoY29tbWVudF9lbmQpCi0JCQkJcHV0Y2hhcignICcpOworCQkJCXByaW50ZigiJXMlcyAlcyVzIiwgY19yZXNldCwKKwkJCQkJCSAgICBjX3BsYWluLCBjX3Jlc2V0LAorCQkJCQkJICAgIGNfZnVuYyk7CiAJCQlmb3IgKGkgPSAwOyBpIDwgY29tbWVudF9lbmQ7IGkrKykKIAkJCQlwdXRjaGFyKGh1bmtfY29tbWVudFtpXSk7CiAJCX0KQEAgLTc0NSw3ICs3NDgsNyBAQAogCiAJCQlkb25lID0gcmVhZF9pbl9mdWxsKGZkLCByZXN1bHQsIGxlbik7CiAJCQlpZiAoZG9uZSA8IDApCi0JCQkJZGllKCJyZWFkIGVycm9yICclcyciLCBlbGVtLT5wYXRoKTsKKwkJCQlkaWVfZXJybm8oInJlYWQgZXJyb3IgJyVzJyIsIGVsZW0tPnBhdGgpOwogCQkJZWxzZSBpZiAoZG9uZSA8IGxlbikKIAkJCQlkaWUoImVhcmx5IEVPRiAnJXMnIiwgZWxlbS0+cGF0aCk7CiAKZGlmZiAtLWdpdCBhL2NvbW1hbmQtbGlzdC50eHQgYi9jb21tYW5kLWxpc3QudHh0CmluZGV4IGZiMDNhMmUuLjk1YmYxOGMgMTAwNjQ0Ci0tLSBhL2NvbW1hbmQtbGlzdC50eHQKKysrIGIvY29tbWFuZC1saXN0LnR4dApAQCAtNDksNiArNDksNyBAQAogZ2l0LWd1aSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KIGdpdC1oYXNoLW9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ21hbmlwdWxhdG9ycwogZ2l0LWhlbHAJCQkJYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycworZ2l0LWh0dHAtYmFja2VuZCAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNoaW5ncmVwb3NpdG9yaWVzCiBnaXQtaHR0cC1mZXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY2hlbHBlcnMKIGdpdC1odHRwLXB1c2ggICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jaGVscGVycwogZ2l0LWltYXAtc2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVpZ25zY21pbnRlcmZhY2UKQEAgLTc0LDYgKzc1LDcgQEAKIGdpdC1ta3RyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ21hbmlwdWxhdG9ycwogZ2l0LW12ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gY29tbW9uCiBnaXQtbmFtZS1yZXYgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdpbnRlcnJvZ2F0b3JzCitnaXQtbm90ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgogZ2l0LXBhY2stb2JqZWN0cyAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCiBnaXQtcGFjay1yZWR1bmRhbnQgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdpbnRlcnJvZ2F0b3JzCiBnaXQtcGFjay1yZWZzICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzCkBAIC05Miw2ICs5NCw3IEBACiBnaXQtcmVsaW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzCiBnaXQtcmVtb3RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzCiBnaXQtcmVwYWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzCitnaXQtcmVwbGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzCiBnaXQtcmVwby1jb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzCWRlcHJlY2F0ZWQKIGdpdC1yZXF1ZXN0LXB1bGwgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduc2NtaW50ZXJmYWNlCiBnaXQtcmVyZXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycwpkaWZmIC0tZ2l0IGEvY29tbWl0LmMgYi9jb21taXQuYwppbmRleCBhYTNiMzViLi43MzExOTFlIDEwMDY0NAotLS0gYS9jb21taXQuYworKysgYi9jb21taXQuYwpAQCAtNSw2ICs1LDcgQEAKICNpbmNsdWRlICJ1dGY4LmgiCiAjaW5jbHVkZSAiZGlmZi5oIgogI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAibm90ZXMuaCIKIAogaW50IHNhdmVfY29tbWl0X2J1ZmZlciA9IDE7CiAKQEAgLTUwLDcgKzUxLDYgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFyc2VfY29tbWl0X2RhdGUoY29uc3QgY2hhciAqYnVmLCBjb25zdCBjaGFyICp0YWlsKQogewotCXVuc2lnbmVkIGxvbmcgZGF0ZTsKIAljb25zdCBjaGFyICpkYXRlcHRyOwogCiAJaWYgKGJ1ZiArIDYgPj0gdGFpbCkKQEAgLTczLDEwICs3Myw3IEBACiAJaWYgKGJ1ZiA+PSB0YWlsKQogCQlyZXR1cm4gMDsKIAkvKiBkYXRlcHRyIDwgYnVmICYmIGJ1ZlstMV0gPT0gJ1xuJywgc28gc3RydG91bCB3aWxsIHN0b3AgYXQgYnVmLTEgKi8KLQlkYXRlID0gc3RydG91bChkYXRlcHRyLCBOVUxMLCAxMCk7Ci0JaWYgKGRhdGUgPT0gVUxPTkdfTUFYKQotCQlkYXRlID0gMDsKLQlyZXR1cm4gZGF0ZTsKKwlyZXR1cm4gc3RydG91bChkYXRlcHRyLCBOVUxMLCAxMCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY29tbWl0X2dyYWZ0ICoqY29tbWl0X2dyYWZ0OwpAQCAtMTM2LDggKzEzMyw4IEBACiAJaW50IGk7CiAJc3RydWN0IGNvbW1pdF9ncmFmdCAqZ3JhZnQgPSBOVUxMOwogCi0JaWYgKGJ1ZltsZW4tMV0gPT0gJ1xuJykKLQkJYnVmWy0tbGVuXSA9IDA7CisJd2hpbGUgKGxlbiAmJiBpc3NwYWNlKGJ1ZltsZW4tMV0pKQorCQlidWZbLS1sZW5dID0gJ1wwJzsKIAlpZiAoYnVmWzBdID09ICcjJyB8fCBidWZbMF0gPT0gJ1wwJykKIAkJcmV0dXJuIE5VTEw7CiAJaWYgKChsZW4gKyAxKSAlIDQxKSB7CkBAIC0yMDMsNyArMjAwLDcgQEAKIAlyZXR1cm4gY29tbWl0X2dyYWZ0W3Bvc107CiB9CiAKLWludCB3cml0ZV9zaGFsbG93X2NvbW1pdHMoaW50IGZkLCBpbnQgdXNlX3BhY2tfcHJvdG9jb2wpCitpbnQgd3JpdGVfc2hhbGxvd19jb21taXRzKHN0cnVjdCBzdHJidWYgKm91dCwgaW50IHVzZV9wYWNrX3Byb3RvY29sKQogewogCWludCBpLCBjb3VudCA9IDA7CiAJZm9yIChpID0gMDsgaSA8IGNvbW1pdF9ncmFmdF9ucjsgaSsrKQpAQCAtMjEyLDEyICsyMDksMTAgQEAKIAkJCQlzaGExX3RvX2hleChjb21taXRfZ3JhZnRbaV0tPnNoYTEpOwogCQkJY291bnQrKzsKIAkJCWlmICh1c2VfcGFja19wcm90b2NvbCkKLQkJCQlwYWNrZXRfd3JpdGUoZmQsICJzaGFsbG93ICVzIiwgaGV4KTsKKwkJCQlwYWNrZXRfYnVmX3dyaXRlKG91dCwgInNoYWxsb3cgJXMiLCBoZXgpOwogCQkJZWxzZSB7Ci0JCQkJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGhleCwgIDQwKSAhPSA0MCkKLQkJCQkJYnJlYWs7Ci0JCQkJaWYgKHdyaXRlX2luX2Z1bGwoZmQsICJcbiIsIDEpICE9IDEpCi0JCQkJCWJyZWFrOworCQkJCXN0cmJ1Zl9hZGRzdHIob3V0LCBoZXgpOworCQkJCXN0cmJ1Zl9hZGRjaChvdXQsICdcbicpOwogCQkJfQogCQl9CiAJcmV0dXJuIGNvdW50OwpAQCAtMjI5LDcgKzIyNCw3IEBACiAJaWYgKHBvcyA8IDApCiAJCXJldHVybiAtMTsKIAlpZiAocG9zICsgMSA8IGNvbW1pdF9ncmFmdF9ucikKLQkJbWVtY3B5KGNvbW1pdF9ncmFmdCArIHBvcywgY29tbWl0X2dyYWZ0ICsgcG9zICsgMSwKKwkJbWVtbW92ZShjb21taXRfZ3JhZnQgKyBwb3MsIGNvbW1pdF9ncmFmdCArIHBvcyArIDEsCiAJCQkJc2l6ZW9mKHN0cnVjdCBjb21taXRfZ3JhZnQgKikKIAkJCQkqIChjb21taXRfZ3JhZnRfbnIgLSBwb3MgLSAxKSk7CiAJY29tbWl0X2dyYWZ0X25yLS07CkBAIC0yNjYsNyArMjYxLDExIEBACiAJCSAgICBidWZwdHJbNDddICE9ICdcbicpCiAJCQlyZXR1cm4gZXJyb3IoImJhZCBwYXJlbnRzIGluIGNvbW1pdCAlcyIsIHNoYTFfdG9faGV4KGl0ZW0tPm9iamVjdC5zaGExKSk7CiAJCWJ1ZnB0ciArPSA0ODsKLQkJaWYgKGdyYWZ0KQorCQkvKgorCQkgKiBUaGUgY2xvbmUgaXMgc2hhbGxvdyBpZiBucl9wYXJlbnQgPCAwLCBhbmQgd2UgbXVzdAorCQkgKiBub3QgdHJhdmVyc2UgaXRzIHJlYWwgcGFyZW50cyBldmVuIHdoZW4gd2UgdW5oaWRlIHRoZW0uCisJCSAqLworCQlpZiAoZ3JhZnQgJiYgKGdyYWZ0LT5ucl9wYXJlbnQgPCAwIHx8IGdyYWZ0c19yZXBsYWNlX3BhcmVudHMpKQogCQkJY29udGludWU7CiAJCW5ld19wYXJlbnQgPSBsb29rdXBfY29tbWl0KHBhcmVudCk7CiAJCWlmIChuZXdfcGFyZW50KQpAQCAtNTY0LDEzICs1NjMsMTMgQEAKIAl3aGlsZSAoaW50ZXJlc3RpbmcobGlzdCkpIHsKIAkJc3RydWN0IGNvbW1pdCAqY29tbWl0OwogCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7Ci0JCXN0cnVjdCBjb21taXRfbGlzdCAqbjsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpuZXh0OwogCQlpbnQgZmxhZ3M7CiAKIAkJY29tbWl0ID0gbGlzdC0+aXRlbTsKLQkJbiA9IGxpc3QtPm5leHQ7CisJCW5leHQgPSBsaXN0LT5uZXh0OwogCQlmcmVlKGxpc3QpOwotCQlsaXN0ID0gbjsKKwkJbGlzdCA9IG5leHQ7CiAKIAkJZmxhZ3MgPSBjb21taXQtPm9iamVjdC5mbGFncyAmIChQQVJFTlQxIHwgUEFSRU5UMiB8IFNUQUxFKTsKIAkJaWYgKGZsYWdzID09IChQQVJFTlQxIHwgUEFSRU5UMikpIHsKQEAgLTU5OCwxMSArNTk3LDExIEBACiAJZnJlZV9jb21taXRfbGlzdChsaXN0KTsKIAlsaXN0ID0gcmVzdWx0OyByZXN1bHQgPSBOVUxMOwogCXdoaWxlIChsaXN0KSB7Ci0JCXN0cnVjdCBjb21taXRfbGlzdCAqbiA9IGxpc3QtPm5leHQ7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqbmV4dCA9IGxpc3QtPm5leHQ7CiAJCWlmICghKGxpc3QtPml0ZW0tPm9iamVjdC5mbGFncyAmIFNUQUxFKSkKIAkJCWluc2VydF9ieV9kYXRlKGxpc3QtPml0ZW0sICZyZXN1bHQpOwogCQlmcmVlKGxpc3QpOwotCQlsaXN0ID0gbjsKKwkJbGlzdCA9IG5leHQ7CiAJfQogCXJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9jb21taXQuaCBiL2NvbW1pdC5oCmluZGV4IGJhOWY2MzguLjNjZjUxNjYgMTAwNjQ0Ci0tLSBhL2NvbW1pdC5oCisrKyBiL2NvbW1pdC5oCkBAIC02MywxOSArNjMsMjggQEAKIAlDTUlUX0ZNVF9VTlNQRUNJRklFRCwKIH07CiAKLWV4dGVybiBpbnQgbm9uX2FzY2lpKGludCk7CitzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQKK3sKKwlpbnQgYWJicmV2OworCWNvbnN0IGNoYXIgKnN1YmplY3Q7CisJY29uc3QgY2hhciAqYWZ0ZXJfc3ViamVjdDsKKwllbnVtIGRhdGVfbW9kZSBkYXRlX21vZGU7CisJaW50IG5lZWRfOGJpdF9jdGU7CisJaW50IHNob3dfbm90ZXM7CisJc3RydWN0IHJlZmxvZ193YWxrX2luZm8gKnJlZmxvZ19pbmZvOworfTsKKworZXh0ZXJuIGludCBoYXNfbm9uX2FzY2lpKGNvbnN0IGNoYXIgKnRleHQpOwogc3RydWN0IHJldl9pbmZvOyAvKiBpbiByZXZpc2lvbi5oLCBpdCBjaXJjdWxhcmx5IHVzZXMgZW51bSBjbWl0X2ZtdCAqLwogZXh0ZXJuIGNoYXIgKnJlZW5jb2RlX2NvbW1pdF9tZXNzYWdlKGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwKIAkJCQkgICAgIGNvbnN0IGNoYXIgKiplbmNvZGluZ19wKTsKIGV4dGVybiB2b2lkIGdldF9jb21taXRfZm9ybWF0KGNvbnN0IGNoYXIgKmFyZywgc3RydWN0IHJldl9pbmZvICopOwogZXh0ZXJuIHZvaWQgZm9ybWF0X2NvbW1pdF9tZXNzYWdlKGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwKLQkJCQkgIGNvbnN0IHZvaWQgKmZvcm1hdCwgc3RydWN0IHN0cmJ1ZiAqc2IsCi0JCQkJICBlbnVtIGRhdGVfbW9kZSBkbW9kZSk7Ci1leHRlcm4gdm9pZCBwcmV0dHlfcHJpbnRfY29tbWl0KGVudW0gY21pdF9mbXQgZm10LCBjb25zdCBzdHJ1Y3QgY29tbWl0KiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0cmJ1ZiAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWJicmV2LCBjb25zdCBjaGFyICpzdWJqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphZnRlcl9zdWJqZWN0LCBlbnVtIGRhdGVfbW9kZSwKLQkJCQlpbnQgbmVlZF84Yml0X2N0ZSk7CisJCQkJICBjb25zdCBjaGFyICpmb3JtYXQsIHN0cnVjdCBzdHJidWYgKnNiLAorCQkJCSAgY29uc3Qgc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpjb250ZXh0KTsKK2V4dGVybiB2b2lkIHByZXR0eV9wcmludF9jb21taXQoZW51bSBjbWl0X2ZtdCBmbXQsIGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCQlzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCQljb25zdCBzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgKmNvbnRleHQpOwogdm9pZCBwcF91c2VyX2luZm8oY29uc3QgY2hhciAqd2hhdCwgZW51bSBjbWl0X2ZtdCBmbXQsIHN0cnVjdCBzdHJidWYgKnNiLAogCQkgICBjb25zdCBjaGFyICpsaW5lLCBlbnVtIGRhdGVfbW9kZSBkbW9kZSwKIAkJICAgY29uc3QgY2hhciAqZW5jb2RpbmcpOwpAQCAtMTIyLDEzICsxMzEsMTUgQEAKIGludCByZWdpc3Rlcl9jb21taXRfZ3JhZnQoc3RydWN0IGNvbW1pdF9ncmFmdCAqLCBpbnQpOwogc3RydWN0IGNvbW1pdF9ncmFmdCAqbG9va3VwX2NvbW1pdF9ncmFmdChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKIAorY29uc3QgdW5zaWduZWQgY2hhciAqbG9va3VwX3JlcGxhY2Vfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworCiBleHRlcm4gc3RydWN0IGNvbW1pdF9saXN0ICpnZXRfbWVyZ2VfYmFzZXMoc3RydWN0IGNvbW1pdCAqcmV2MSwgc3RydWN0IGNvbW1pdCAqcmV2MiwgaW50IGNsZWFudXApOwogZXh0ZXJuIHN0cnVjdCBjb21taXRfbGlzdCAqZ2V0X21lcmdlX2Jhc2VzX21hbnkoc3RydWN0IGNvbW1pdCAqb25lLCBpbnQgbiwgc3RydWN0IGNvbW1pdCAqKnR3b3MsIGludCBjbGVhbnVwKTsKIGV4dGVybiBzdHJ1Y3QgY29tbWl0X2xpc3QgKmdldF9vY3RvcHVzX21lcmdlX2Jhc2VzKHN0cnVjdCBjb21taXRfbGlzdCAqaW4pOwogCiBleHRlcm4gaW50IHJlZ2lzdGVyX3NoYWxsb3coY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSk7CiBleHRlcm4gaW50IHVucmVnaXN0ZXJfc2hhbGxvdyhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKLWV4dGVybiBpbnQgd3JpdGVfc2hhbGxvd19jb21taXRzKGludCBmZCwgaW50IHVzZV9wYWNrX3Byb3RvY29sKTsKK2V4dGVybiBpbnQgd3JpdGVfc2hhbGxvd19jb21taXRzKHN0cnVjdCBzdHJidWYgKm91dCwgaW50IHVzZV9wYWNrX3Byb3RvY29sKTsKIGV4dGVybiBpbnQgaXNfcmVwb3NpdG9yeV9zaGFsbG93KHZvaWQpOwogZXh0ZXJuIHN0cnVjdCBjb21taXRfbGlzdCAqZ2V0X3NoYWxsb3dfY29tbWl0cyhzdHJ1Y3Qgb2JqZWN0X2FycmF5ICpoZWFkcywKIAkJaW50IGRlcHRoLCBpbnQgc2hhbGxvd19mbGFnLCBpbnQgbm90X3NoYWxsb3dfZmxhZyk7CkBAIC0xMzcsNiArMTQ4LDggQEAKIGludCBpbl9tZXJnZV9iYXNlcyhzdHJ1Y3QgY29tbWl0ICosIHN0cnVjdCBjb21taXQgKiosIGludCk7CiAKIGV4dGVybiBpbnQgaW50ZXJhY3RpdmVfYWRkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgcnVuX2FkZF9pbnRlcmFjdGl2ZShjb25zdCBjaGFyICpyZXZpc2lvbiwgY29uc3QgY2hhciAqcGF0Y2hfbW9kZSwKKwkJCSAgICAgICBjb25zdCBjaGFyICoqcGF0aHNwZWMpOwogCiBzdGF0aWMgaW5saW5lIGludCBzaW5nbGVfcGFyZW50KHN0cnVjdCBjb21taXQgKmNvbW1pdCkKIHsKZGlmZiAtLWdpdCBhL2NvbXBhdC9iYXNlbmFtZS5jIGIvY29tcGF0L2Jhc2VuYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhmOGEzYwotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9iYXNlbmFtZS5jCkBAIC0wLDAgKzEsMTUgQEAKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKworLyogQWRhcHRlZCBmcm9tIGxpYmliZXJ0eSdzIGJhc2VuYW1lLmMuICAqLworY2hhciAqZ2l0YmFzZW5hbWUgKGNoYXIgKnBhdGgpCit7CisJY29uc3QgY2hhciAqYmFzZTsKKwkvKiBTa2lwIG92ZXIgdGhlIGRpc2sgbmFtZSBpbiBNU0RPUyBwYXRobmFtZXMuICovCisJaWYgKGhhc19kb3NfZHJpdmVfcHJlZml4KHBhdGgpKQorCQlwYXRoICs9IDI7CisJZm9yIChiYXNlID0gcGF0aDsgKnBhdGg7IHBhdGgrKykgeworCQlpZiAoaXNfZGlyX3NlcCgqcGF0aCkpCisJCQliYXNlID0gcGF0aCArIDE7CisJfQorCXJldHVybiAoY2hhciAqKWJhc2U7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvYnN3YXAuaCBiL2NvbXBhdC9ic3dhcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NzU2ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvYnN3YXAuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogTGV0J3MgbWFrZSBzdXJlIHdlIGFsd2F5cyBoYXZlIGEgc2FuZSBkZWZpbml0aW9uIGZvciBudG9obCgpL2h0b25sKCkuCisgKiBTb21lIGxpYnJhcmllcyBkZWZpbmUgdGhvc2UgYXMgYSBmdW5jdGlvbiBjYWxsLCBqdXN0IHRvIHBlcmZvcm0gYnl0ZQorICogc2hpZnRpbmcsIGJyaW5naW5nIHNpZ25pZmljYW50IG92ZXJoZWFkIHRvIHdoYXQgc2hvdWxkIGJlIGEgc2ltcGxlCisgKiBvcGVyYXRpb24uCisgKi8KKworLyoKKyAqIERlZmF1bHQgdmVyc2lvbiB0aGF0IHRoZSBjb21waWxlciBvdWdodCB0byBvcHRpbWl6ZSBwcm9wZXJseSB3aXRoCisgKiBjb25zdGFudCB2YWx1ZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgZGVmYXVsdF9zd2FiMzIodWludDMyX3QgdmFsKQoreworCXJldHVybiAoKCh2YWwgJiAweGZmMDAwMDAwKSA+PiAyNCkgfAorCQkoKHZhbCAmIDB4MDBmZjAwMDApID4+ICA4KSB8CisJCSgodmFsICYgMHgwMDAwZmYwMCkgPDwgIDgpIHwKKwkJKCh2YWwgJiAweDAwMDAwMGZmKSA8PCAyNCkpOworfQorCisjdW5kZWYgYnN3YXAzMgorCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykpCisKKyNkZWZpbmUgYnN3YXAzMih4KSAoeyBcCisJdWludDMyX3QgX19yZXM7IFwKKwlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoeCkpIHsgXAorCQlfX3JlcyA9IGRlZmF1bHRfc3dhYjMyKHgpOyBcCisJfSBlbHNlIHsgXAorCQlfX2FzbV9fKCJic3dhcCAlMCIgOiAiPXIiIChfX3JlcykgOiAiMCIgKCh1aW50MzJfdCkoeCkpKTsgXAorCX0gXAorCV9fcmVzOyB9KQorCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAoZGVmaW5lZChfTV9JWDg2KSB8fCBkZWZpbmVkKF9NX1g2NCkpCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2RlZmluZSBic3dhcDMyKHgpIF9ieXRlc3dhcF91bG9uZyh4KQorCisjZW5kaWYKKworI2lmZGVmIGJzd2FwMzIKKworI3VuZGVmIG50b2hsCisjdW5kZWYgaHRvbmwKKyNkZWZpbmUgbnRvaGwoeCkgYnN3YXAzMih4KQorI2RlZmluZSBodG9ubCh4KSBic3dhcDMyKHgpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29tcGF0L21pbmd3LmMgYi9jb21wYXQvbWluZ3cuYwppbmRleCBjZGVkYTFkLi41OWIxOGRjIDEwMDY0NAotLS0gYS9jb21wYXQvbWluZ3cuYworKysgYi9jb21wYXQvbWluZ3cuYwpAQCAtMSwxMCArMSw5IEBACiAjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCiAjaW5jbHVkZSAid2luMzIuaCIKKyNpbmNsdWRlIDxjb25pby5oPgogI2luY2x1ZGUgIi4uL3N0cmJ1Zi5oIgogCi11bnNpZ25lZCBpbnQgX0NSVF9mbW9kZSA9IF9PX0JJTkFSWTsKLQotc3RhdGljIGludCBlcnJfd2luX3RvX3Bvc2l4KERXT1JEIHdpbmVycikKK2ludCBlcnJfd2luX3RvX3Bvc2l4KERXT1JEIHdpbmVycikKIHsKIAlpbnQgZXJyb3IgPSBFTk9TWVM7CiAJc3dpdGNoKHdpbmVycikgewpAQCAtMTIyLDEzICsxMjEsMTcgQEAKIHsKIAl2YV9saXN0IGFyZ3M7CiAJdW5zaWduZWQgbW9kZTsKKwlpbnQgZmQ7CisKIAl2YV9zdGFydChhcmdzLCBvZmxhZ3MpOwogCW1vZGUgPSB2YV9hcmcoYXJncywgaW50KTsKIAl2YV9lbmQoYXJncyk7CiAKIAlpZiAoIXN0cmNtcChmaWxlbmFtZSwgIi9kZXYvbnVsbCIpKQogCQlmaWxlbmFtZSA9ICJudWwiOwotCWludCBmZCA9IG9wZW4oZmlsZW5hbWUsIG9mbGFncywgbW9kZSk7CisKKwlmZCA9IG9wZW4oZmlsZW5hbWUsIG9mbGFncywgbW9kZSk7CisKIAlpZiAoZmQgPCAwICYmIChvZmxhZ3MgJiBPX0NSRUFUKSAmJiBlcnJubyA9PSBFQUNDRVMpIHsKIAkJRFdPUkQgYXR0cnMgPSBHZXRGaWxlQXR0cmlidXRlcyhmaWxlbmFtZSk7CiAJCWlmIChhdHRycyAhPSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUyAmJiAoYXR0cnMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpKQpAQCAtMTM3LDEyICsxNDAsMjAgQEAKIAlyZXR1cm4gZmQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdGltZV90IGZpbGV0aW1lX3RvX3RpbWVfdChjb25zdCBGSUxFVElNRSAqZnQpCisvKgorICogVGhlIHVuaXQgb2YgRklMRVRJTUUgaXMgMTAwLW5hbm9zZWNvbmRzIHNpbmNlIEphbnVhcnkgMSwgMTYwMSwgVVRDLgorICogUmV0dXJucyB0aGUgMTAwLW5hbm9zZWNvbmRzICgiaGVrdG8gbmFub3NlY29uZHMiKSBzaW5jZSB0aGUgZXBvY2guCisgKi8KK3N0YXRpYyBpbmxpbmUgbG9uZyBsb25nIGZpbGV0aW1lX3RvX2huc2VjKGNvbnN0IEZJTEVUSU1FICpmdCkKIHsKIAlsb25nIGxvbmcgd2luVGltZSA9ICgobG9uZyBsb25nKWZ0LT5kd0hpZ2hEYXRlVGltZSA8PCAzMikgKyBmdC0+ZHdMb3dEYXRlVGltZTsKLQl3aW5UaW1lIC09IDExNjQ0NDczNjAwMDAwMDAwMExMOyAvKiBXaW5kb3dzIHRvIFVuaXggRXBvY2ggY29udmVyc2lvbiAqLwotCXdpblRpbWUgLz0gMTAwMDAwMDA7CQkgLyogTmFubyB0byBzZWNvbmRzIHJlc29sdXRpb24gKi8KLQlyZXR1cm4gKHRpbWVfdCl3aW5UaW1lOworCS8qIFdpbmRvd3MgdG8gVW5peCBFcG9jaCBjb252ZXJzaW9uICovCisJcmV0dXJuIHdpblRpbWUgLSAxMTY0NDQ3MzYwMDAwMDAwMDBMTDsKK30KKworc3RhdGljIGlubGluZSB0aW1lX3QgZmlsZXRpbWVfdG9fdGltZV90KGNvbnN0IEZJTEVUSU1FICpmdCkKK3sKKwlyZXR1cm4gKHRpbWVfdCkoZmlsZXRpbWVfdG9faG5zZWMoZnQpIC8gMTAwMDAwMDApOwogfQogCiAvKiBXZSBrZWVwIHRoZSBkb19sc3RhdCBjb2RlIGluIGEgc2VwYXJhdGUgZnVuY3Rpb24gdG8gYXZvaWQgcmVjdXJzaW9uLgpAQCAtMjQ4LDggKzI1OSwxNyBAQAogCWludCBmaCwgcmM7CiAKIAkvKiBtdXN0IGhhdmUgd3JpdGUgcGVybWlzc2lvbiAqLwotCWlmICgoZmggPSBvcGVuKGZpbGVfbmFtZSwgT19SRFdSIHwgT19CSU5BUlkpKSA8IDApCi0JCXJldHVybiAtMTsKKwlEV09SRCBhdHRycyA9IEdldEZpbGVBdHRyaWJ1dGVzKGZpbGVfbmFtZSk7CisJaWYgKGF0dHJzICE9IElOVkFMSURfRklMRV9BVFRSSUJVVEVTICYmCisJICAgIChhdHRycyAmIEZJTEVfQVRUUklCVVRFX1JFQURPTkxZKSkgeworCQkvKiBpZ25vcmUgZXJyb3JzIGhlcmU7IG9wZW4oKSB3aWxsIHJlcG9ydCB0aGVtICovCisJCVNldEZpbGVBdHRyaWJ1dGVzKGZpbGVfbmFtZSwgYXR0cnMgJiB+RklMRV9BVFRSSUJVVEVfUkVBRE9OTFkpOworCX0KKworCWlmICgoZmggPSBvcGVuKGZpbGVfbmFtZSwgT19SRFdSIHwgT19CSU5BUlkpKSA8IDApIHsKKwkJcmMgPSAtMTsKKwkJZ290byByZXZlcnRfYXR0cnM7CisJfQogCiAJdGltZV90X3RvX2ZpbGV0aW1lKHRpbWVzLT5tb2R0aW1lLCAmbWZ0KTsKIAl0aW1lX3RfdG9fZmlsZXRpbWUodGltZXMtPmFjdGltZSwgJmFmdCk7CkBAIC0yNTksNiArMjc5LDEzIEBACiAJfSBlbHNlCiAJCXJjID0gMDsKIAljbG9zZShmaCk7CisKK3JldmVydF9hdHRyczoKKwlpZiAoYXR0cnMgIT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMgJiYKKwkgICAgKGF0dHJzICYgRklMRV9BVFRSSUJVVEVfUkVBRE9OTFkpKSB7CisJCS8qIGlnbm9yZSBlcnJvcnMgYWdhaW4gKi8KKwkJU2V0RmlsZUF0dHJpYnV0ZXMoZmlsZV9uYW1lLCBhdHRycyk7CisJfQogCXJldHVybiByYzsKIH0KIApAQCAtMjc4LDY0ICszMDUsMzcgQEAKIAogaW50IGdldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYsIHZvaWQgKnR6KQogewotCVNZU1RFTVRJTUUgc3Q7Ci0Jc3RydWN0IHRtIHRtOwotCUdldFN5c3RlbVRpbWUoJnN0KTsKLQl0bS50bV95ZWFyID0gc3Qud1llYXItMTkwMDsKLQl0bS50bV9tb24gPSBzdC53TW9udGgtMTsKLQl0bS50bV9tZGF5ID0gc3Qud0RheTsKLQl0bS50bV9ob3VyID0gc3Qud0hvdXI7Ci0JdG0udG1fbWluID0gc3Qud01pbnV0ZTsKLQl0bS50bV9zZWMgPSBzdC53U2Vjb25kOwotCXR2LT50dl9zZWMgPSB0bV90b190aW1lX3QoJnRtKTsKLQlpZiAodHYtPnR2X3NlYyA8IDApCi0JCXJldHVybiAtMTsKLQl0di0+dHZfdXNlYyA9IHN0LndNaWxsaXNlY29uZHMqMTAwMDsKKwlGSUxFVElNRSBmdDsKKwlsb25nIGxvbmcgaG5zZWM7CisKKwlHZXRTeXN0ZW1UaW1lQXNGaWxlVGltZSgmZnQpOworCWhuc2VjID0gZmlsZXRpbWVfdG9faG5zZWMoJmZ0KTsKKwl0di0+dHZfc2VjID0gaG5zZWMgLyAxMDAwMDAwMDsKKwl0di0+dHZfdXNlYyA9IChobnNlYyAlIDEwMDAwMDAwKSAvIDEwOwogCXJldHVybiAwOwogfQogCiBpbnQgcGlwZShpbnQgZmlsZWRlc1syXSkKIHsKLQlpbnQgZmQ7Ci0JSEFORExFIGhbMl0sIHBhcmVudDsKKwlIQU5ETEUgaFsyXTsKIAotCWlmIChfcGlwZShmaWxlZGVzLCA4MTkyLCAwKSA8IDApCi0JCXJldHVybiAtMTsKLQotCXBhcmVudCA9IEdldEN1cnJlbnRQcm9jZXNzKCk7Ci0KLQlpZiAoIUR1cGxpY2F0ZUhhbmRsZSAocGFyZW50LCAoSEFORExFKV9nZXRfb3NmaGFuZGxlKGZpbGVkZXNbMF0pLAotCQkJcGFyZW50LCAmaFswXSwgMCwgRkFMU0UsIERVUExJQ0FURV9TQU1FX0FDQ0VTUykpIHsKLQkJY2xvc2UoZmlsZWRlc1swXSk7Ci0JCWNsb3NlKGZpbGVkZXNbMV0pOworCS8qIHRoaXMgY3JlYXRlcyBub24taW5oZXJpdGFibGUgaGFuZGxlcyAqLworCWlmICghQ3JlYXRlUGlwZSgmaFswXSwgJmhbMV0sIE5VTEwsIDgxOTIpKSB7CisJCWVycm5vID0gZXJyX3dpbl90b19wb3NpeChHZXRMYXN0RXJyb3IoKSk7CiAJCXJldHVybiAtMTsKIAl9Ci0JaWYgKCFEdXBsaWNhdGVIYW5kbGUgKHBhcmVudCwgKEhBTkRMRSlfZ2V0X29zZmhhbmRsZShmaWxlZGVzWzFdKSwKLQkJCXBhcmVudCwgJmhbMV0sIDAsIEZBTFNFLCBEVVBMSUNBVEVfU0FNRV9BQ0NFU1MpKSB7Ci0JCWNsb3NlKGZpbGVkZXNbMF0pOwotCQljbG9zZShmaWxlZGVzWzFdKTsKLQkJQ2xvc2VIYW5kbGUoaFswXSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0JZmQgPSBfb3Blbl9vc2ZoYW5kbGUoKGludCloWzBdLCBPX05PSU5IRVJJVCk7Ci0JaWYgKGZkIDwgMCkgewotCQljbG9zZShmaWxlZGVzWzBdKTsKLQkJY2xvc2UoZmlsZWRlc1sxXSk7CisJZmlsZWRlc1swXSA9IF9vcGVuX29zZmhhbmRsZSgoaW50KWhbMF0sIE9fTk9JTkhFUklUKTsKKwlpZiAoZmlsZWRlc1swXSA8IDApIHsKIAkJQ2xvc2VIYW5kbGUoaFswXSk7CiAJCUNsb3NlSGFuZGxlKGhbMV0pOwogCQlyZXR1cm4gLTE7CiAJfQotCWNsb3NlKGZpbGVkZXNbMF0pOwotCWZpbGVkZXNbMF0gPSBmZDsKLQlmZCA9IF9vcGVuX29zZmhhbmRsZSgoaW50KWhbMV0sIE9fTk9JTkhFUklUKTsKLQlpZiAoZmQgPCAwKSB7CisJZmlsZWRlc1sxXSA9IF9vcGVuX29zZmhhbmRsZSgoaW50KWhbMV0sIE9fTk9JTkhFUklUKTsKKwlpZiAoZmlsZWRlc1swXSA8IDApIHsKIAkJY2xvc2UoZmlsZWRlc1swXSk7Ci0JCWNsb3NlKGZpbGVkZXNbMV0pOwogCQlDbG9zZUhhbmRsZShoWzFdKTsKIAkJcmV0dXJuIC0xOwogCX0KLQljbG9zZShmaWxlZGVzWzFdKTsKLQlmaWxlZGVzWzFdID0gZmQ7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTUyNSw4ICs1MjUsOCBAQAogCWlmIChidWZbMF0gIT0gJyMnIHx8IGJ1ZlsxXSAhPSAnIScpCiAJCXJldHVybiBOVUxMOwogCWJ1ZltuXSA9ICdcMCc7Ci0JcCA9IHN0cmNocihidWYsICdcbicpOwotCWlmICghcCkKKwlwID0gYnVmICsgc3RyY3NwbihidWYsICJcclxuIik7CisJaWYgKCEqcCkKIAkJcmV0dXJuIE5VTEw7CiAKIAkqcCA9ICdcMCc7CkBAIC01NzksMTAgKzU3OSwxMSBAQAogCiBzdGF0aWMgdm9pZCBmcmVlX3BhdGhfc3BsaXQoY2hhciAqKnBhdGgpCiB7CisJY2hhciAqKnAgPSBwYXRoOworCiAJaWYgKCFwYXRoKQogCQlyZXR1cm47CiAKLQljaGFyICoqcCA9IHBhdGg7CiAJd2hpbGUgKCpwKQogCQlmcmVlKCpwKyspOwogCWZyZWUocGF0aCk7CkBAIC02MzIsOCArNjMzLDggQEAKIAlyZXR1cm4gc3RyY2FzZWNtcCgqZWEsICplYik7CiB9CiAKLXN0YXRpYyBwaWRfdCBtaW5nd19zcGF3bnZlKGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnYsCi0JCQkgICBpbnQgcHJlcGVuZF9jbWQpCitzdGF0aWMgcGlkX3QgbWluZ3dfc3Bhd252ZV9mZChjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKiphcmd2LCBjaGFyICoqZW52LAorCQkJICAgICAgaW50IHByZXBlbmRfY21kLCBpbnQgZmhpbiwgaW50IGZob3V0LCBpbnQgZmhlcnIpCiB7CiAJU1RBUlRVUElORk8gc2k7CiAJUFJPQ0VTU19JTkZPUk1BVElPTiBwaTsKQEAgLTY2OSw5ICs2NzAsOSBAQAogCW1lbXNldCgmc2ksIDAsIHNpemVvZihzaSkpOwogCXNpLmNiID0gc2l6ZW9mKHNpKTsKIAlzaS5kd0ZsYWdzID0gU1RBUlRGX1VTRVNUREhBTkRMRVM7Ci0Jc2kuaFN0ZElucHV0ID0gKEhBTkRMRSkgX2dldF9vc2ZoYW5kbGUoMCk7Ci0Jc2kuaFN0ZE91dHB1dCA9IChIQU5ETEUpIF9nZXRfb3NmaGFuZGxlKDEpOwotCXNpLmhTdGRFcnJvciA9IChIQU5ETEUpIF9nZXRfb3NmaGFuZGxlKDIpOworCXNpLmhTdGRJbnB1dCA9IChIQU5ETEUpIF9nZXRfb3NmaGFuZGxlKGZoaW4pOworCXNpLmhTdGRPdXRwdXQgPSAoSEFORExFKSBfZ2V0X29zZmhhbmRsZShmaG91dCk7CisJc2kuaFN0ZEVycm9yID0gKEhBTkRMRSkgX2dldF9vc2ZoYW5kbGUoZmhlcnIpOwogCiAJLyogY29uY2F0ZW5hdGUgYXJndiwgcXVvdGluZyBhcmdzIGFzIHdlIGdvICovCiAJc3RyYnVmX2luaXQoJmFyZ3MsIDApOwpAQCAtNzI2LDcgKzcyNywxNCBAQAogCXJldHVybiAocGlkX3QpcGkuaFByb2Nlc3M7CiB9CiAKLXBpZF90IG1pbmd3X3NwYXdudnBlKGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnYpCitzdGF0aWMgcGlkX3QgbWluZ3dfc3Bhd252ZShjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKiphcmd2LCBjaGFyICoqZW52LAorCQkJICAgaW50IHByZXBlbmRfY21kKQoreworCXJldHVybiBtaW5nd19zcGF3bnZlX2ZkKGNtZCwgYXJndiwgZW52LCBwcmVwZW5kX2NtZCwgMCwgMSwgMik7Cit9CisKK3BpZF90IG1pbmd3X3NwYXdudnBlKGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnYsCisJCSAgICAgaW50IGZoaW4sIGludCBmaG91dCwgaW50IGZoZXJyKQogewogCXBpZF90IHBpZDsKIAljaGFyICoqcGF0aCA9IGdldF9wYXRoX3NwbGl0KCk7CkBAIC03NDgsMTMgKzc1NiwxNSBAQAogCQkJCXBpZCA9IC0xOwogCQkJfQogCQkJZWxzZSB7Ci0JCQkJcGlkID0gbWluZ3dfc3Bhd252ZShpcHJvZywgYXJndiwgZW52LCAxKTsKKwkJCQlwaWQgPSBtaW5nd19zcGF3bnZlX2ZkKGlwcm9nLCBhcmd2LCBlbnYsIDEsCisJCQkJCQkgICAgICAgZmhpbiwgZmhvdXQsIGZoZXJyKTsKIAkJCQlmcmVlKGlwcm9nKTsKIAkJCX0KIAkJCWFyZ3ZbMF0gPSBhcmd2MDsKIAkJfQogCQllbHNlCi0JCQlwaWQgPSBtaW5nd19zcGF3bnZlKHByb2csIGFyZ3YsIGVudiwgMCk7CisJCQlwaWQgPSBtaW5nd19zcGF3bnZlX2ZkKHByb2csIGFyZ3YsIGVudiwgMCwKKwkJCQkJICAgICAgIGZoaW4sIGZob3V0LCBmaGVycik7CiAJCWZyZWUocHJvZyk7CiAJfQogCWZyZWVfcGF0aF9zcGxpdChwYXRoKTsKQEAgLTgyMyw3ICs4MzMsNyBAQAogCWZyZWVfcGF0aF9zcGxpdChwYXRoKTsKIH0KIAotY2hhciAqKmNvcHlfZW52aXJvbigpCitzdGF0aWMgY2hhciAqKmNvcHlfZW52aXJvbih2b2lkKQogewogCWNoYXIgKiplbnY7CiAJaW50IGkgPSAwOwpAQCAtODYwLDcgKzg3MCw3IEBACiAvKgogICogSWYgbmFtZSBjb250YWlucyAnPScsIHRoZW4gc2V0cyB0aGUgdmFyaWFibGUsIG90aGVyd2lzZSBpdCB1bnNldHMgaXQKICAqLwotY2hhciAqKmVudl9zZXRlbnYoY2hhciAqKmVudiwgY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyBjaGFyICoqZW52X3NldGVudihjaGFyICoqZW52LCBjb25zdCBjaGFyICpuYW1lKQogewogCWNoYXIgKmVxID0gc3RyY2hybnVsKG5hbWUsICc9Jyk7CiAJaW50IGkgPSBsb29rdXBfZW52KGVudiwgbmFtZSwgZXEtbmFtZSk7CkBAIC04ODUsMTkgKzg5NSwyMDcgQEAKIAlyZXR1cm4gZW52OwogfQogCi0vKiB0aGlzIGlzIHRoZSBmaXJzdCBmdW5jdGlvbiB0byBjYWxsIGludG8gV1NfMzI7IGluaXRpYWxpemUgaXQgKi8KLSN1bmRlZiBnZXRob3N0YnluYW1lCi1zdHJ1Y3QgaG9zdGVudCAqbWluZ3dfZ2V0aG9zdGJ5bmFtZShjb25zdCBjaGFyICpob3N0KQorLyoKKyAqIENvcGllcyBnbG9iYWwgZW52aXJvbiBhbmQgYWRqdXN0cyB2YXJpYWJsZXMgYXMgc3BlY2lmaWVkIGJ5IHZhcnMuCisgKi8KK2NoYXIgKiptYWtlX2F1Z21lbnRlZF9lbnZpcm9uKGNvbnN0IGNoYXIgKmNvbnN0ICp2YXJzKQoreworCWNoYXIgKiplbnYgPSBjb3B5X2Vudmlyb24oKTsKKworCXdoaWxlICgqdmFycykKKwkJZW52ID0gZW52X3NldGVudihlbnYsICp2YXJzKyspOworCXJldHVybiBlbnY7Cit9CisKKy8qCisgKiBOb3RlLCB0aGlzIGlzbid0IGEgY29tcGxldGUgcmVwbGFjZW1lbnQgZm9yIGdldGFkZHJpbmZvLiBJdCBhc3N1bWVzCisgKiB0aGF0IHNlcnZpY2UgY29udGFpbnMgYSBudW1lcmljYWwgcG9ydCwgb3IgdGhhdCBpdCBpdCBpcyBudWxsLiBJdAorICogZG9lcyBhIHNpbXBsZSBzZWFyY2ggdXNpbmcgZ2V0aG9zdGJ5bmFtZSwgYW5kIHJldHVybnMgb25lIElQdjQgaG9zdAorICogaWYgb25lIHdhcyBmb3VuZC4KKyAqLworc3RhdGljIGludCBXU0FBUEkgZ2V0YWRkcmluZm9fc3R1Yihjb25zdCBjaGFyICpub2RlLCBjb25zdCBjaGFyICpzZXJ2aWNlLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqaGludHMsCisJCQkJICAgc3RydWN0IGFkZHJpbmZvICoqcmVzKQoreworCXN0cnVjdCBob3N0ZW50ICpoID0gZ2V0aG9zdGJ5bmFtZShub2RlKTsKKwlzdHJ1Y3QgYWRkcmluZm8gKmFpOworCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCisJaWYgKCFoKQorCQlyZXR1cm4gV1NBR2V0TGFzdEVycm9yKCk7CisKKwlhaSA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBhZGRyaW5mbykpOworCSpyZXMgPSBhaTsKKwlhaS0+YWlfZmxhZ3MgPSAwOworCWFpLT5haV9mYW1pbHkgPSBBRl9JTkVUOworCWFpLT5haV9zb2NrdHlwZSA9IGhpbnRzLT5haV9zb2NrdHlwZTsKKwlzd2l0Y2ggKGhpbnRzLT5haV9zb2NrdHlwZSkgeworCWNhc2UgU09DS19TVFJFQU06CisJCWFpLT5haV9wcm90b2NvbCA9IElQUFJPVE9fVENQOworCQlicmVhazsKKwljYXNlIFNPQ0tfREdSQU06CisJCWFpLT5haV9wcm90b2NvbCA9IElQUFJPVE9fVURQOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlhaS0+YWlfcHJvdG9jb2wgPSAwOworCQlicmVhazsKKwl9CisJYWktPmFpX2FkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKwlhaS0+YWlfY2Fub25uYW1lID0gc3RyZHVwKGgtPmhfbmFtZSk7CisKKwlzaW4gPSB4bWFsbG9jKGFpLT5haV9hZGRybGVuKTsKKwltZW1zZXQoc2luLCAwLCBhaS0+YWlfYWRkcmxlbik7CisJc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlpZiAoc2VydmljZSkKKwkJc2luLT5zaW5fcG9ydCA9IGh0b25zKGF0b2koc2VydmljZSkpOworCXNpbi0+c2luX2FkZHIgPSAqKHN0cnVjdCBpbl9hZGRyICopaC0+aF9hZGRyOworCWFpLT5haV9hZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKXNpbjsKKwlhaS0+YWlfbmV4dCA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIFdTQUFQSSBmcmVlYWRkcmluZm9fc3R1YihzdHJ1Y3QgYWRkcmluZm8gKnJlcykKK3sKKwlmcmVlKHJlcy0+YWlfY2Fub25uYW1lKTsKKwlmcmVlKHJlcy0+YWlfYWRkcik7CisJZnJlZShyZXMpOworfQorCitzdGF0aWMgaW50IFdTQUFQSSBnZXRuYW1laW5mb19zdHViKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EsIHNvY2tsZW5fdCBzYWxlbiwKKwkJCQkgICBjaGFyICpob3N0LCBEV09SRCBob3N0bGVuLAorCQkJCSAgIGNoYXIgKnNlcnYsIERXT1JEIHNlcnZsZW4sIGludCBmbGFncykKK3sKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYTsKKwlpZiAoc2EtPnNhX2ZhbWlseSAhPSBBRl9JTkVUKQorCQlyZXR1cm4gRUFJX0ZBTUlMWTsKKwlpZiAoIWhvc3QgJiYgIXNlcnYpCisJCXJldHVybiBFQUlfTk9OQU1FOworCisJaWYgKGhvc3QgJiYgaG9zdGxlbiA+IDApIHsKKwkJc3RydWN0IGhvc3RlbnQgKmVudCA9IE5VTEw7CisJCWlmICghKGZsYWdzICYgTklfTlVNRVJJQ0hPU1QpKQorCQkJZW50ID0gZ2V0aG9zdGJ5YWRkcigoY29uc3QgY2hhciAqKSZzaW4tPnNpbl9hZGRyLAorCQkJCQkgICAgc2l6ZW9mKHNpbi0+c2luX2FkZHIpLCBBRl9JTkVUKTsKKworCQlpZiAoZW50KQorCQkJc25wcmludGYoaG9zdCwgaG9zdGxlbiwgIiVzIiwgZW50LT5oX25hbWUpOworCQllbHNlIGlmIChmbGFncyAmIE5JX05BTUVSRVFEKQorCQkJcmV0dXJuIEVBSV9OT05BTUU7CisJCWVsc2UKKwkJCXNucHJpbnRmKGhvc3QsIGhvc3RsZW4sICIlcyIsIGluZXRfbnRvYShzaW4tPnNpbl9hZGRyKSk7CisJfQorCisJaWYgKHNlcnYgJiYgc2VydmxlbiA+IDApIHsKKwkJc3RydWN0IHNlcnZlbnQgKmVudCA9IE5VTEw7CisJCWlmICghKGZsYWdzICYgTklfTlVNRVJJQ1NFUlYpKQorCQkJZW50ID0gZ2V0c2VydmJ5cG9ydChzaW4tPnNpbl9wb3J0LAorCQkJCQkgICAgZmxhZ3MgJiBOSV9ER1JBTSA/ICJ1ZHAiIDogInRjcCIpOworCisJCWlmIChlbnQpCisJCQlzbnByaW50ZihzZXJ2LCBzZXJ2bGVuLCAiJXMiLCBlbnQtPnNfbmFtZSk7CisJCWVsc2UKKwkJCXNucHJpbnRmKHNlcnYsIHNlcnZsZW4sICIlZCIsIG50b2hzKHNpbi0+c2luX3BvcnQpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIEhNT0RVTEUgaXB2Nl9kbGwgPSBOVUxMOworc3RhdGljIHZvaWQgKFdTQUFQSSAqaXB2Nl9mcmVlYWRkcmluZm8pKHN0cnVjdCBhZGRyaW5mbyAqcmVzKTsKK3N0YXRpYyBpbnQgKFdTQUFQSSAqaXB2Nl9nZXRhZGRyaW5mbykoY29uc3QgY2hhciAqbm9kZSwgY29uc3QgY2hhciAqc2VydmljZSwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKmhpbnRzLAorCQkJCSAgICAgIHN0cnVjdCBhZGRyaW5mbyAqKnJlcyk7CitzdGF0aWMgaW50IChXU0FBUEkgKmlwdjZfZ2V0bmFtZWluZm8pKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EsIHNvY2tsZW5fdCBzYWxlbiwKKwkJCQkgICAgICBjaGFyICpob3N0LCBEV09SRCBob3N0bGVuLAorCQkJCSAgICAgIGNoYXIgKnNlcnYsIERXT1JEIHNlcnZsZW4sIGludCBmbGFncyk7CisvKgorICogZ2FpX3N0cmVycm9yIGlzIGFuIGlubGluZSBmdW5jdGlvbiBpbiB0aGUgd3MydGNwaXAuaCBoZWFkZXIsIHNvIHdlCisgKiBkb24ndCBuZWVkIHRvIHRyeSB0byBsb2FkIHRoYXQgb25lIGR5bmFtaWNhbGx5LgorICovCisKK3N0YXRpYyB2b2lkIHNvY2tldF9jbGVhbnVwKHZvaWQpCit7CisJV1NBQ2xlYW51cCgpOworCWlmIChpcHY2X2RsbCkKKwkJRnJlZUxpYnJhcnkoaXB2Nl9kbGwpOworCWlwdjZfZGxsID0gTlVMTDsKKwlpcHY2X2ZyZWVhZGRyaW5mbyA9IGZyZWVhZGRyaW5mb19zdHViOworCWlwdjZfZ2V0YWRkcmluZm8gPSBnZXRhZGRyaW5mb19zdHViOworCWlwdjZfZ2V0bmFtZWluZm8gPSBnZXRuYW1laW5mb19zdHViOworfQorCitzdGF0aWMgdm9pZCBlbnN1cmVfc29ja2V0X2luaXRpYWxpemF0aW9uKHZvaWQpCiB7CiAJV1NBREFUQSB3c2E7CisJc3RhdGljIGludCBpbml0aWFsaXplZCA9IDA7CisJY29uc3QgY2hhciAqbGlicmFyaWVzW10gPSB7ICJ3czJfMzIuZGxsIiwgIndzaGlwNi5kbGwiLCBOVUxMIH07CisJY29uc3QgY2hhciAqKm5hbWU7CisKKwlpZiAoaW5pdGlhbGl6ZWQpCisJCXJldHVybjsKIAogCWlmIChXU0FTdGFydHVwKE1BS0VXT1JEKDIsMiksICZ3c2EpKQogCQlkaWUoInVuYWJsZSB0byBpbml0aWFsaXplIHdpbnNvY2sgc3Vic3lzdGVtLCBlcnJvciAlZCIsCiAJCQlXU0FHZXRMYXN0RXJyb3IoKSk7Ci0JYXRleGl0KCh2b2lkKCopKHZvaWQpKSBXU0FDbGVhbnVwKTsKKworCWZvciAobmFtZSA9IGxpYnJhcmllczsgKm5hbWU7IG5hbWUrKykgeworCQlpcHY2X2RsbCA9IExvYWRMaWJyYXJ5KCpuYW1lKTsKKwkJaWYgKCFpcHY2X2RsbCkKKwkJCWNvbnRpbnVlOworCisJCWlwdjZfZnJlZWFkZHJpbmZvID0gKHZvaWQgKFdTQUFQSSAqKShzdHJ1Y3QgYWRkcmluZm8gKikpCisJCQlHZXRQcm9jQWRkcmVzcyhpcHY2X2RsbCwgImZyZWVhZGRyaW5mbyIpOworCQlpcHY2X2dldGFkZHJpbmZvID0gKGludCAoV1NBQVBJICopKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAorCQkJCQkJICAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICosCisJCQkJCQkgICBzdHJ1Y3QgYWRkcmluZm8gKiopKQorCQkJR2V0UHJvY0FkZHJlc3MoaXB2Nl9kbGwsICJnZXRhZGRyaW5mbyIpOworCQlpcHY2X2dldG5hbWVpbmZvID0gKGludCAoV1NBQVBJICopKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLAorCQkJCQkJICAgc29ja2xlbl90LCBjaGFyICosIERXT1JELAorCQkJCQkJICAgY2hhciAqLCBEV09SRCwgaW50KSkKKwkJCUdldFByb2NBZGRyZXNzKGlwdjZfZGxsLCAiZ2V0bmFtZWluZm8iKTsKKwkJaWYgKCFpcHY2X2ZyZWVhZGRyaW5mbyB8fCAhaXB2Nl9nZXRhZGRyaW5mbyB8fCAhaXB2Nl9nZXRuYW1laW5mbykgeworCQkJRnJlZUxpYnJhcnkoaXB2Nl9kbGwpOworCQkJaXB2Nl9kbGwgPSBOVUxMOworCQl9IGVsc2UKKwkJCWJyZWFrOworCX0KKwlpZiAoIWlwdjZfZnJlZWFkZHJpbmZvIHx8ICFpcHY2X2dldGFkZHJpbmZvIHx8ICFpcHY2X2dldG5hbWVpbmZvKSB7CisJCWlwdjZfZnJlZWFkZHJpbmZvID0gZnJlZWFkZHJpbmZvX3N0dWI7CisJCWlwdjZfZ2V0YWRkcmluZm8gPSBnZXRhZGRyaW5mb19zdHViOworCQlpcHY2X2dldG5hbWVpbmZvID0gZ2V0bmFtZWluZm9fc3R1YjsKKwl9CisKKwlhdGV4aXQoc29ja2V0X2NsZWFudXApOworCWluaXRpYWxpemVkID0gMTsKK30KKworI3VuZGVmIGdldGhvc3RieW5hbWUKK3N0cnVjdCBob3N0ZW50ICptaW5nd19nZXRob3N0YnluYW1lKGNvbnN0IGNoYXIgKmhvc3QpCit7CisJZW5zdXJlX3NvY2tldF9pbml0aWFsaXphdGlvbigpOwogCXJldHVybiBnZXRob3N0YnluYW1lKGhvc3QpOwogfQogCit2b2lkIG1pbmd3X2ZyZWVhZGRyaW5mbyhzdHJ1Y3QgYWRkcmluZm8gKnJlcykKK3sKKwlpcHY2X2ZyZWVhZGRyaW5mbyhyZXMpOworfQorCitpbnQgbWluZ3dfZ2V0YWRkcmluZm8oY29uc3QgY2hhciAqbm9kZSwgY29uc3QgY2hhciAqc2VydmljZSwKKwkJICAgICAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICpoaW50cywgc3RydWN0IGFkZHJpbmZvICoqcmVzKQoreworCWVuc3VyZV9zb2NrZXRfaW5pdGlhbGl6YXRpb24oKTsKKwlyZXR1cm4gaXB2Nl9nZXRhZGRyaW5mbyhub2RlLCBzZXJ2aWNlLCBoaW50cywgcmVzKTsKK30KKworaW50IG1pbmd3X2dldG5hbWVpbmZvKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EsIHNvY2tsZW5fdCBzYWxlbiwKKwkJICAgICAgY2hhciAqaG9zdCwgRFdPUkQgaG9zdGxlbiwgY2hhciAqc2VydiwgRFdPUkQgc2VydmxlbiwKKwkJICAgICAgaW50IGZsYWdzKQoreworCWVuc3VyZV9zb2NrZXRfaW5pdGlhbGl6YXRpb24oKTsKKwlyZXR1cm4gaXB2Nl9nZXRuYW1laW5mbyhzYSwgc2FsZW4sIGhvc3QsIGhvc3RsZW4sIHNlcnYsIHNlcnZsZW4sIGZsYWdzKTsKK30KKwogaW50IG1pbmd3X3NvY2tldChpbnQgZG9tYWluLCBpbnQgdHlwZSwgaW50IHByb3RvY29sKQogewogCWludCBzb2NrZmQ7CkBAIC05ODIsNiArMTE4MCwxOCBAQAogCXJldHVybiAtMTsKIH0KIAorLyoKKyAqIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3QgcmV0dXJuIHRoZSBhY3R1YWwgcGFnZXNpemUsIGJ1dAorICogdGhlIGFsbG9jYXRpb24gZ3JhbnVsYXJpdHkuIElmIGZ1dHVyZSBXaW5kb3dzIHNwZWNpZmljIGdpdCBjb2RlCisgKiBuZWVkcyB0aGUgcmVhbCBnZXRwYWdlc2l6ZSBmdW5jdGlvbiwgd2UgbmVlZCB0byBmaW5kIGFub3RoZXIgc29sdXRpb24uCisgKi8KK2ludCBtaW5nd19nZXRwYWdlc2l6ZSh2b2lkKQoreworCVNZU1RFTV9JTkZPIHNpOworCUdldFN5c3RlbUluZm8oJnNpKTsKKwlyZXR1cm4gc2kuZHdBbGxvY2F0aW9uR3JhbnVsYXJpdHk7Cit9CisKIHN0cnVjdCBwYXNzd2QgKmdldHB3dWlkKGludCB1aWQpCiB7CiAJc3RhdGljIGNoYXIgdXNlcl9uYW1lWzEwMF07CkBAIC0xMDExLDcgKzEyMjEsNyBAQAogICogbGVuZ3RoIHRvIGNhbGwgdGhlIHNpZ25hbCBoYW5kbGVyLgogICovCiAKLXN0YXRpYyBfX3N0ZGNhbGwgdW5zaWduZWQgdGlja3RhY2sodm9pZCAqZHVtbXkpCitzdGF0aWMgdW5zaWduZWQgX19zdGRjYWxsIHRpY2t0YWNrKHZvaWQgKmR1bW15KQogewogCXdoaWxlIChXYWl0Rm9yU2luZ2xlT2JqZWN0KHRpbWVyX2V2ZW50LCB0aW1lcl9pbnRlcnZhbCkgPT0gV0FJVF9USU1FT1VUKSB7CiAJCWlmICh0aW1lcl9mbiA9PSBTSUdfREZMKQpAQCAtMTEwNyw5ICsxMzE3LDkgQEAKICN1bmRlZiBzaWduYWwKIHNpZ19oYW5kbGVyX3QgbWluZ3dfc2lnbmFsKGludCBzaWcsIHNpZ19oYW5kbGVyX3QgaGFuZGxlcikKIHsKKwlzaWdfaGFuZGxlcl90IG9sZCA9IHRpbWVyX2ZuOwogCWlmIChzaWcgIT0gU0lHQUxSTSkKIAkJcmV0dXJuIHNpZ25hbChzaWcsIGhhbmRsZXIpOwotCXNpZ19oYW5kbGVyX3Qgb2xkID0gdGltZXJfZm47CiAJdGltZXJfZm4gPSBoYW5kbGVyOwogCXJldHVybiBvbGQ7CiB9CkBAIC0xMTMyLDEzICsxMzQyLDI3IEBACiB2b2lkIG1pbmd3X29wZW5faHRtbChjb25zdCBjaGFyICp1bml4cGF0aCkKIHsKIAljb25zdCBjaGFyICpodG1scGF0aCA9IG1ha2VfYmFja3NsYXNoX3BhdGgodW5peHBhdGgpOworCXR5cGVkZWYgSElOU1RBTkNFIChXSU5BUEkgKlQpKEhXTkQsIGNvbnN0IGNoYXIgKiwKKwkJCWNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIElOVCk7CisJVCBTaGVsbEV4ZWN1dGU7CisJSE1PRFVMRSBzaGVsbDMyOworCisJc2hlbGwzMiA9IExvYWRMaWJyYXJ5KCJzaGVsbDMyLmRsbCIpOworCWlmICghc2hlbGwzMikKKwkJZGllKCJjYW5ub3QgbG9hZCBzaGVsbDMyLmRsbCIpOworCVNoZWxsRXhlY3V0ZSA9IChUKUdldFByb2NBZGRyZXNzKHNoZWxsMzIsICJTaGVsbEV4ZWN1dGVBIik7CisJaWYgKCFTaGVsbEV4ZWN1dGUpCisJCWRpZSgiY2Fubm90IHJ1biBicm93c2VyIik7CisKIAlwcmludGYoIkxhdW5jaGluZyBkZWZhdWx0IGJyb3dzZXIgdG8gZGlzcGxheSBIVE1MIC4uLlxuIik7CiAJU2hlbGxFeGVjdXRlKE5VTEwsICJvcGVuIiwgaHRtbHBhdGgsIE5VTEwsICJcXCIsIDApOworCisJRnJlZUxpYnJhcnkoc2hlbGwzMik7CiB9CiAKIGludCBsaW5rKGNvbnN0IGNoYXIgKm9sZHBhdGgsIGNvbnN0IGNoYXIgKm5ld3BhdGgpCiB7Ci0JdHlwZWRlZiBCT09MIFdJTkFQSSAoKlQpKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgTFBTRUNVUklUWV9BVFRSSUJVVEVTKTsKKwl0eXBlZGVmIEJPT0wgKFdJTkFQSSAqVCkoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBMUFNFQ1VSSVRZX0FUVFJJQlVURVMpOwogCXN0YXRpYyBUIGNyZWF0ZV9oYXJkX2xpbmsgPSBOVUxMOwogCWlmICghY3JlYXRlX2hhcmRfbGluaykgewogCQljcmVhdGVfaGFyZF9saW5rID0gKFQpIEdldFByb2NBZGRyZXNzKApAQCAtMTE1NiwzICsxMzgwLDc4IEBACiAJfQogCXJldHVybiAwOwogfQorCitjaGFyICpnZXRwYXNzKGNvbnN0IGNoYXIgKnByb21wdCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJZnB1dHMocHJvbXB0LCBzdGRlcnIpOworCWZvciAoOzspIHsKKwkJY2hhciBjID0gX2dldGNoKCk7CisJCWlmIChjID09ICdccicgfHwgYyA9PSAnXG4nKQorCQkJYnJlYWs7CisJCXN0cmJ1Zl9hZGRjaCgmYnVmLCBjKTsKKwl9CisJZnB1dHMoIlxuIiwgc3RkZXJyKTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKK30KKworI2lmbmRlZiBOT19NSU5HV19SRVBMQUNFX1JFQURESVIKKy8qIE1pbkdXIHJlYWRkaXIgaW1wbGVtZW50YXRpb24gdG8gYXZvaWQgZXh0cmEgbHN0YXRzIGZvciBHaXQgKi8KK3N0cnVjdCBtaW5nd19ESVIKK3sKKwlzdHJ1Y3QgX2ZpbmRkYXRhX3QJZGRfZHRhOwkJLyogZGlzayB0cmFuc2ZlciBhcmVhIGZvciB0aGlzIGRpciAqLworCXN0cnVjdCBtaW5nd19kaXJlbnQJZGRfZGlyOwkJLyogT3VyIG93biBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nIGRfdHlwZSAqLworCWxvbmcJCQlkZF9oYW5kbGU7CS8qIF9maW5kbmV4dCBoYW5kbGUgKi8KKwlpbnQJCQlkZF9zdGF0OyAJLyogMCA9IG5leHQgZW50cnkgdG8gcmVhZCBpcyBmaXJzdCBlbnRyeSwgLTEgPSBvZmYgdGhlIGVuZCwgcG9zaXRpdmUgPSAwIGJhc2VkIGluZGV4IG9mIG5leHQgZW50cnkgKi8KKwljaGFyCQkJZGRfbmFtZVsxXTsgCS8qIGdpdmVuIHBhdGggZm9yIGRpciB3aXRoIHNlYXJjaCBwYXR0ZXJuIChzdHJ1Y3QgaXMgZXh0ZW5kZWQpICovCit9OworCitzdHJ1Y3QgZGlyZW50ICptaW5nd19yZWFkZGlyKERJUiAqZGlyKQoreworCVdJTjMyX0ZJTkRfREFUQUEgYnVmOworCUhBTkRMRSBoYW5kbGU7CisJc3RydWN0IG1pbmd3X0RJUiAqbWRpciA9IChzdHJ1Y3QgbWluZ3dfRElSKilkaXI7CisKKwlpZiAoIWRpci0+ZGRfaGFuZGxlKSB7CisJCWVycm5vID0gRUJBREY7IC8qIE5vIHNldF9lcnJubyBmb3IgbWluZ3cgKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKGRpci0+ZGRfaGFuZGxlID09IChsb25nKUlOVkFMSURfSEFORExFX1ZBTFVFICYmIGRpci0+ZGRfc3RhdCA9PSAwKQorCXsKKwkJRFdPUkQgbGFzdGVycjsKKwkJaGFuZGxlID0gRmluZEZpcnN0RmlsZUEoZGlyLT5kZF9uYW1lLCAmYnVmKTsKKwkJbGFzdGVyciA9IEdldExhc3RFcnJvcigpOworCQlkaXItPmRkX2hhbmRsZSA9IChsb25nKWhhbmRsZTsKKwkJaWYgKGhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSAmJiAobGFzdGVyciAhPSBFUlJPUl9OT19NT1JFX0ZJTEVTKSkgeworCQkJZXJybm8gPSBlcnJfd2luX3RvX3Bvc2l4KGxhc3RlcnIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9IGVsc2UgaWYgKGRpci0+ZGRfaGFuZGxlID09IChsb25nKUlOVkFMSURfSEFORExFX1ZBTFVFKSB7CisJCXJldHVybiBOVUxMOworCX0gZWxzZSBpZiAoIUZpbmROZXh0RmlsZUEoKEhBTkRMRSlkaXItPmRkX2hhbmRsZSwgJmJ1ZikpIHsKKwkJRFdPUkQgbGFzdGVyciA9IEdldExhc3RFcnJvcigpOworCQlGaW5kQ2xvc2UoKEhBTkRMRSlkaXItPmRkX2hhbmRsZSk7CisJCWRpci0+ZGRfaGFuZGxlID0gKGxvbmcpSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisJCS8qIFBPU0lYIHNheXMgeW91IHNob3VsZG4ndCBzZXQgZXJybm8gd2hlbiByZWFkZGlyIGNhbid0CisJCSAgIGZpbmQgYW55IG1vcmUgZmlsZXM7IHNvLCBpZiBhbm90aGVyIGVycm9yIHdlIGxlYXZlIGl0IHNldC4gKi8KKwkJaWYgKGxhc3RlcnIgIT0gRVJST1JfTk9fTU9SRV9GSUxFUykKKwkJCWVycm5vID0gZXJyX3dpbl90b19wb3NpeChsYXN0ZXJyKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogV2UgZ2V0IGhlcmUgaWYgYGJ1ZicgY29udGFpbnMgdmFsaWQgZGF0YS4gICovCisJc3RyY3B5KGRpci0+ZGRfZGlyLmRfbmFtZSwgYnVmLmNGaWxlTmFtZSk7CisJKytkaXItPmRkX3N0YXQ7CisKKwkvKiBTZXQgZmlsZSB0eXBlLCBiYXNlZCBvbiBXSU4zMl9GSU5EX0RBVEEgKi8KKwltZGlyLT5kZF9kaXIuZF90eXBlID0gMDsKKwlpZiAoYnVmLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpCisJCW1kaXItPmRkX2Rpci5kX3R5cGUgfD0gRFRfRElSOworCWVsc2UKKwkJbWRpci0+ZGRfZGlyLmRfdHlwZSB8PSBEVF9SRUc7CisKKwlyZXR1cm4gKHN0cnVjdCBkaXJlbnQqKSZkaXItPmRkX2RpcjsKK30KKyNlbmRpZiAvLyAhTk9fTUlOR1dfUkVQTEFDRV9SRUFERElSCmRpZmYgLS1naXQgYS9jb21wYXQvbWluZ3cuaCBiL2NvbXBhdC9taW5ndy5oCmluZGV4IDc2MmViMTQuLmUyNTRmYjQgMTAwNjQ0Ci0tLSBhL2NvbXBhdC9taW5ndy5oCisrKyBiL2NvbXBhdC9taW5ndy5oCkBAIC0xLDQgKzEsNSBAQAogI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaW5jbHVkZSA8d3MydGNwaXAuaD4KIAogLyoKICAqIHRoaW5ncyB0aGF0IGFyZSBub3QgYXZhaWxhYmxlIGluIGhlYWRlciBmaWxlcwpAQCAtMTcsOSArMTgsMTAgQEAKICNkZWZpbmUgU19JUk9USCAwCiAjZGVmaW5lIFNfSVhPVEggMAogCi0jZGVmaW5lIFdJRkVYSVRFRCh4KSAoKHVuc2lnbmVkKSh4KSA8IDI1OSkJLyogU1RJTExfQUNUSVZFICovCisjZGVmaW5lIFdJRkVYSVRFRCh4KSAxCisjZGVmaW5lIFdJRlNJR05BTEVEKHgpIDAKICNkZWZpbmUgV0VYSVRTVEFUVVMoeCkgKCh4KSAmIDB4ZmYpCi0jZGVmaW5lIFdJRlNJR05BTEVEKHgpICgodW5zaWduZWQpKHgpID4gMjU5KQorI2RlZmluZSBXVEVSTVNJRyh4KSBTSUdURVJNCiAKICNkZWZpbmUgU0lHSFVQIDEKICNkZWZpbmUgU0lHUVVJVCAzCkBAIC0zOCw2ICs0MCw5IEBACiAJY2hhciAqcHdfZGlyOwogfTsKIAorZXh0ZXJuIGNoYXIgKmdldHBhc3MoY29uc3QgY2hhciAqcHJvbXB0KTsKKworI2lmbmRlZiBQT0xMSU4KIHN0cnVjdCBwb2xsZmQgewogCWludCBmZDsgICAgICAgICAgIC8qIGZpbGUgZGVzY3JpcHRvciAqLwogCXNob3J0IGV2ZW50czsgICAgIC8qIHJlcXVlc3RlZCBldmVudHMgKi8KQEAgLTQ1LDYgKzUwLDcgQEAKIH07CiAjZGVmaW5lIFBPTExJTiAxCiAjZGVmaW5lIFBPTExIVVAgMgorI2VuZGlmCiAKIHR5cGVkZWYgdm9pZCAoX19jZGVjbCAqc2lnX2hhbmRsZXJfdCkoaW50KTsKIHN0cnVjdCBzaWdhY3Rpb24gewpAQCAtOTAsNiArOTYsOCBAQAogCWVycm5vID0gRUlOVkFMOwogCXJldHVybiAtMTsKIH0KKy8qIGJhc2ggY2Fubm90IHJlbGlhYmx5IGRldGVjdCBuZWdhdGl2ZSByZXR1cm4gY29kZXMgYXMgZmFpbHVyZSAqLworI2RlZmluZSBleGl0KGNvZGUpIGV4aXQoKGNvZGUpICYgMHhmZikKIAogLyoKICAqIHNpbXBsZSBhZGFwdG9ycwpAQCAtMTA5LDcgKzExNyw3IEBACiB9CiAjZGVmaW5lIHVubGluayBtaW5nd191bmxpbmsKIAotc3RhdGljIGlubGluZSBpbnQgd2FpdHBpZChwaWRfdCBwaWQsIHVuc2lnbmVkICpzdGF0dXMsIHVuc2lnbmVkIG9wdGlvbnMpCitzdGF0aWMgaW5saW5lIGludCB3YWl0cGlkKHBpZF90IHBpZCwgaW50ICpzdGF0dXMsIHVuc2lnbmVkIG9wdGlvbnMpCiB7CiAJaWYgKG9wdGlvbnMgPT0gMCkKIAkJcmV0dXJuIF9jd2FpdChzdGF0dXMsIHBpZCwgMCk7CkBAIC0xMTcsNiArMTI1LDI3IEBACiAJcmV0dXJuIC0xOwogfQogCisjaWZuZGVmIE5PX09QRU5TU0wKKyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgorc3RhdGljIGlubGluZSBpbnQgbWluZ3dfU1NMX3NldF9mZChTU0wgKnNzbCwgaW50IGZkKQoreworCXJldHVybiBTU0xfc2V0X2ZkKHNzbCwgX2dldF9vc2ZoYW5kbGUoZmQpKTsKK30KKyNkZWZpbmUgU1NMX3NldF9mZCBtaW5nd19TU0xfc2V0X2ZkCisKK3N0YXRpYyBpbmxpbmUgaW50IG1pbmd3X1NTTF9zZXRfcmZkKFNTTCAqc3NsLCBpbnQgZmQpCit7CisJcmV0dXJuIFNTTF9zZXRfcmZkKHNzbCwgX2dldF9vc2ZoYW5kbGUoZmQpKTsKK30KKyNkZWZpbmUgU1NMX3NldF9yZmQgbWluZ3dfU1NMX3NldF9yZmQKKworc3RhdGljIGlubGluZSBpbnQgbWluZ3dfU1NMX3NldF93ZmQoU1NMICpzc2wsIGludCBmZCkKK3sKKwlyZXR1cm4gU1NMX3NldF93ZmQoc3NsLCBfZ2V0X29zZmhhbmRsZShmZCkpOworfQorI2RlZmluZSBTU0xfc2V0X3dmZCBtaW5nd19TU0xfc2V0X3dmZAorI2VuZGlmCisKIC8qCiAgKiBpbXBsZW1lbnRhdGlvbnMgb2YgbWlzc2luZyBmdW5jdGlvbnMKICAqLwpAQCAtMTUwLDYgKzE3OSwxOCBAQAogc3RydWN0IGhvc3RlbnQgKm1pbmd3X2dldGhvc3RieW5hbWUoY29uc3QgY2hhciAqaG9zdCk7CiAjZGVmaW5lIGdldGhvc3RieW5hbWUgbWluZ3dfZ2V0aG9zdGJ5bmFtZQogCit2b2lkIG1pbmd3X2ZyZWVhZGRyaW5mbyhzdHJ1Y3QgYWRkcmluZm8gKnJlcyk7CisjZGVmaW5lIGZyZWVhZGRyaW5mbyBtaW5nd19mcmVlYWRkcmluZm8KKworaW50IG1pbmd3X2dldGFkZHJpbmZvKGNvbnN0IGNoYXIgKm5vZGUsIGNvbnN0IGNoYXIgKnNlcnZpY2UsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqaGludHMsIHN0cnVjdCBhZGRyaW5mbyAqKnJlcyk7CisjZGVmaW5lIGdldGFkZHJpbmZvIG1pbmd3X2dldGFkZHJpbmZvCisKK2ludCBtaW5nd19nZXRuYW1laW5mbyhjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBzb2NrbGVuX3Qgc2FsZW4sCisJCSAgICAgIGNoYXIgKmhvc3QsIERXT1JEIGhvc3RsZW4sIGNoYXIgKnNlcnYsIERXT1JEIHNlcnZsZW4sCisJCSAgICAgIGludCBmbGFncyk7CisjZGVmaW5lIGdldG5hbWVpbmZvIG1pbmd3X2dldG5hbWVpbmZvCisKIGludCBtaW5nd19zb2NrZXQoaW50IGRvbWFpbiwgaW50IHR5cGUsIGludCBwcm90b2NvbCk7CiAjZGVmaW5lIHNvY2tldCBtaW5nd19zb2NrZXQKIApAQCAtMTU5LDcgKzIwMCw3IEBACiBpbnQgbWluZ3dfcmVuYW1lKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CiAjZGVmaW5lIHJlbmFtZSBtaW5nd19yZW5hbWUKIAotI2lmZGVmIFVTRV9XSU4zMl9NTUFQCisjaWYgZGVmaW5lZChVU0VfV0lOMzJfTU1BUCkgfHwgZGVmaW5lZChfTVNDX1ZFUikKIGludCBtaW5nd19nZXRwYWdlc2l6ZSh2b2lkKTsKICNkZWZpbmUgZ2V0cGFnZXNpemUgbWluZ3dfZ2V0cGFnZXNpemUKICNlbmRpZgpAQCAtMTY4LDE4ICsyMDksMjEgQEAKICAqIG1pbmd3X2ZzdGF0KCkgaW5zdGVhZCBvZiBmc3RhdCgpIG9uIFdpbmRvd3MuCiAgKi8KICNkZWZpbmUgb2ZmX3Qgb2ZmNjRfdAotI2RlZmluZSBzdGF0IF9zdGF0aTY0CiAjZGVmaW5lIGxzZWVrIF9sc2Vla2k2NAorI2lmbmRlZiBBTFJFQURZX0RFQ0xBUkVEX1NUQVRfRlVOQ1MKKyNkZWZpbmUgc3RhdCBfc3RhdGk2NAogaW50IG1pbmd3X2xzdGF0KGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgc3RydWN0IHN0YXQgKmJ1Zik7CiBpbnQgbWluZ3dfZnN0YXQoaW50IGZkLCBzdHJ1Y3Qgc3RhdCAqYnVmKTsKICNkZWZpbmUgZnN0YXQgbWluZ3dfZnN0YXQKICNkZWZpbmUgbHN0YXQgbWluZ3dfbHN0YXQKICNkZWZpbmUgX3N0YXRpNjQoeCx5KSBtaW5nd19sc3RhdCh4LHkpCisjZW5kaWYKIAogaW50IG1pbmd3X3V0aW1lKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgY29uc3Qgc3RydWN0IHV0aW1idWYgKnRpbWVzKTsKICNkZWZpbmUgdXRpbWUgbWluZ3dfdXRpbWUKIAotcGlkX3QgbWluZ3dfc3Bhd252cGUoY29uc3QgY2hhciAqY21kLCBjb25zdCBjaGFyICoqYXJndiwgY2hhciAqKmVudik7CitwaWRfdCBtaW5nd19zcGF3bnZwZShjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKiphcmd2LCBjaGFyICoqZW52LAorCQkgICAgIGludCBmaGluLCBpbnQgZmhvdXQsIGludCBmaGVycik7CiB2b2lkIG1pbmd3X2V4ZWN2cChjb25zdCBjaGFyICpjbWQsIGNoYXIgKmNvbnN0ICphcmd2KTsKICNkZWZpbmUgZXhlY3ZwIG1pbmd3X2V4ZWN2cAogCkBAIC0yMTcsMTkgKzI2MSw1NyBAQAogICogaGVscGVycwogICovCiAKLWNoYXIgKipjb3B5X2Vudmlyb24odm9pZCk7CitjaGFyICoqbWFrZV9hdWdtZW50ZWRfZW52aXJvbihjb25zdCBjaGFyICpjb25zdCAqdmFycyk7CiB2b2lkIGZyZWVfZW52aXJvbihjaGFyICoqZW52KTsKLWNoYXIgKiplbnZfc2V0ZW52KGNoYXIgKiplbnYsIGNvbnN0IGNoYXIgKm5hbWUpOwogCiAvKgogICogQSByZXBsYWNlbWVudCBvZiBtYWluKCkgdGhhdCBlbnN1cmVzIHRoYXQgYXJndlswXSBoYXMgYSBwYXRoCisgKiBhbmQgdGhhdCBkZWZhdWx0IGZtb2RlIGFuZCBzdGQoaW58b3V0fGVycikgYXJlIGluIGJpbmFyeSBtb2RlCiAgKi8KIAogI2RlZmluZSBtYWluKGMsdikgZHVtbXlfZGVjbF9taW5nd19tYWluKCk7IFwKIHN0YXRpYyBpbnQgbWluZ3dfbWFpbigpOyBcCiBpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpIFwKIHsgXAorCV9mbW9kZSA9IF9PX0JJTkFSWTsgXAorCV9zZXRtb2RlKF9maWxlbm8oc3RkaW4pLCBfT19CSU5BUlkpOyBcCisJX3NldG1vZGUoX2ZpbGVubyhzdGRvdXQpLCBfT19CSU5BUlkpOyBcCisJX3NldG1vZGUoX2ZpbGVubyhzdGRlcnIpLCBfT19CSU5BUlkpOyBcCiAJYXJndlswXSA9IHhzdHJkdXAoX3BnbXB0cik7IFwKIAlyZXR1cm4gbWluZ3dfbWFpbihhcmdjLCBhcmd2KTsgXAogfSBcCiBzdGF0aWMgaW50IG1pbmd3X21haW4oYyx2KQorCisjaWZuZGVmIE5PX01JTkdXX1JFUExBQ0VfUkVBRERJUgorLyoKKyAqIEEgcmVwbGFjZW1lbnQgb2YgcmVhZGRpciwgdG8gZW5zdXJlIHRoYXQgaXQgcmVhZHMgdGhlIGZpbGUgdHlwZSBhdAorICogdGhlIHNhbWUgdGltZS4gVGhpcyBhdm9pZCBleHRyYSB1bm5lZWRlZCBsc3RhdHMgaW4gZ2l0IG9uIE1pbkdXCisgKi8KKyN1bmRlZiBEVF9VTktOT1dOCisjdW5kZWYgRFRfRElSCisjdW5kZWYgRFRfUkVHCisjdW5kZWYgRFRfTE5LCisjZGVmaW5lIERUX1VOS05PV04JMAorI2RlZmluZSBEVF9ESVIJCTEKKyNkZWZpbmUgRFRfUkVHCQkyCisjZGVmaW5lIERUX0xOSwkJMworCitzdHJ1Y3QgbWluZ3dfZGlyZW50Cit7CisJbG9uZwkJZF9pbm87CQkJLyogQWx3YXlzIHplcm8uICovCisJdW5pb24geworCQl1bnNpZ25lZCBzaG9ydAlkX3JlY2xlbjsJLyogQWx3YXlzIHplcm8uICovCisJCXVuc2lnbmVkIGNoYXIgICBkX3R5cGU7CQkvKiBSZWltcGxlbWVudGF0aW9uIGFkZHMgdGhpcyAqLworCX07CisJdW5zaWduZWQgc2hvcnQJZF9uYW1sZW47CQkvKiBMZW5ndGggb2YgbmFtZSBpbiBkX25hbWUuICovCisJY2hhcgkJZF9uYW1lW0ZJTEVOQU1FX01BWF07CS8qIEZpbGUgbmFtZS4gKi8KK307CisjZGVmaW5lIGRpcmVudCBtaW5nd19kaXJlbnQKKyNkZWZpbmUgcmVhZGRpcih4KSBtaW5nd19yZWFkZGlyKHgpCitzdHJ1Y3QgZGlyZW50ICptaW5nd19yZWFkZGlyKERJUiAqZGlyKTsKKyNlbmRpZiAvLyAhTk9fTUlOR1dfUkVQTEFDRV9SRUFERElSCisKKy8qCisgKiBVc2VkIGJ5IFB0aHJlYWQgQVBJIGltcGxlbWVudGF0aW9uIGZvciBXaW5kb3dzCisgKi8KK2V4dGVybiBpbnQgZXJyX3dpbl90b19wb3NpeChEV09SRCB3aW5lcnIpOwpkaWZmIC0tZ2l0IGEvY29tcGF0L21rZHRlbXAuYyBiL2NvbXBhdC9ta2R0ZW1wLmMKaW5kZXggMzRkNGI0OS4uMTEzNjExOSAxMDA2NDQKLS0tIGEvY29tcGF0L21rZHRlbXAuYworKysgYi9jb21wYXQvbWtkdGVtcC5jCkBAIC0yLDcgKzIsNyBAQAogCiBjaGFyICpnaXRta2R0ZW1wKGNoYXIgKnRlbXBsYXRlKQogewotCWlmICghbWt0ZW1wKHRlbXBsYXRlKSB8fCBta2Rpcih0ZW1wbGF0ZSwgMDcwMCkpCisJaWYgKCEqbWt0ZW1wKHRlbXBsYXRlKSB8fCBta2Rpcih0ZW1wbGF0ZSwgMDcwMCkpCiAJCXJldHVybiBOVUxMOwogCXJldHVybiB0ZW1wbGF0ZTsKIH0KZGlmZiAtLWdpdCBhL2NvbXBhdC9tc3ZjLmMgYi9jb21wYXQvbXN2Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMDRhNGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvbXN2Yy5jCkBAIC0wLDAgKzEsMzUgQEAKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJ3aW4zMi5oIgorI2luY2x1ZGUgPGNvbmlvLmg+CisjaW5jbHVkZSAiLi4vc3RyYnVmLmgiCisKK0RJUiAqb3BlbmRpcihjb25zdCBjaGFyICpuYW1lKQoreworCWludCBsZW47CisJRElSICpwOworCXAgPSAoRElSKiltYWxsb2Moc2l6ZW9mKERJUikpOworCW1lbXNldChwLCAwLCBzaXplb2YoRElSKSk7CisJc3RybmNweShwLT5kZF9uYW1lLCBuYW1lLCBQQVRIX01BWCk7CisJbGVuID0gc3RybGVuKHAtPmRkX25hbWUpOworCXAtPmRkX25hbWVbbGVuXSA9ICcvJzsKKwlwLT5kZF9uYW1lW2xlbisxXSA9ICcqJzsKKworCWlmIChwID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJcC0+ZGRfaGFuZGxlID0gX2ZpbmRmaXJzdChwLT5kZF9uYW1lLCAmcC0+ZGRfZHRhKTsKKworCWlmIChwLT5kZF9oYW5kbGUgPT0gLTEpIHsKKwkJZnJlZShwKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBwOworfQoraW50IGNsb3NlZGlyKERJUiAqZGlyKQoreworCV9maW5kY2xvc2UoZGlyLT5kZF9oYW5kbGUpOworCWZyZWUoZGlyKTsKKwlyZXR1cm4gMDsKK30KKworI2luY2x1ZGUgIm1pbmd3LmMiCmRpZmYgLS1naXQgYS9jb21wYXQvbXN2Yy5oIGIvY29tcGF0L21zdmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjNhYmEwCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L21zdmMuaApAQCAtMCwwICsxLDQyIEBACisjaWZuZGVmIF9fTVNWQ19fSEVBRAorI2RlZmluZSBfX01TVkNfX0hFQUQKKworI2luY2x1ZGUgPGRpcmVjdC5oPgorI2luY2x1ZGUgPHByb2Nlc3MuaD4KKyNpbmNsdWRlIDxtYWxsb2MuaD4KKworLyogcG9ydGluZyBmdW5jdGlvbiAqLworI2RlZmluZSBpbmxpbmUgX19pbmxpbmUKKyNkZWZpbmUgX19pbmxpbmVfXyBfX2lubGluZQorI2RlZmluZSBfX2F0dHJpYnV0ZV9fKHgpCisjZGVmaW5lIHZhX2NvcHkoZHN0LCBzcmMpICAgICAoKGRzdCkgPSAoc3JjKSkKKyNkZWZpbmUgc3RybmNhc2VjbXAgIF9zdHJuaWNtcAorI2RlZmluZSBmdHJ1bmNhdGUgICAgX2Noc2l6ZQorCitzdGF0aWMgX19pbmxpbmUgaW50IHN0cmNhc2VjbXAgKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMikKK3sKKwlpbnQgc2l6ZTEgPSBzdHJsZW4oczEpOworCWludCBzaXN6MiA9IHN0cmxlbihzMik7CisJcmV0dXJuIF9zdHJuaWNtcChzMSwgczIsIHNpc3oyID4gc2l6ZTEgPyBzaXN6MiA6IHNpemUxKTsKK30KKworI3VuZGVmIEVSUk9SCisKKy8qIFVzZSBtaW5nd19sc3RhdCgpIGluc3RlYWQgb2YgbHN0YXQoKS9zdGF0KCkgYW5kIG1pbmd3X2ZzdGF0KCkgaW5zdGVhZAorICogb2YgZnN0YXQoKS4gV2UgYWRkIHRoZSBkZWNsYXJhdGlvbiBvZiB0aGVzZSBmdW5jdGlvbnMgaGVyZSwgc3VwcHJlc3NpbmcKKyAqIHRoZSBjb3JyZXNwb25kaW5nIGRlY2xhcmF0aW9ucyBpbiBtaW5ndy5oLCBzbyB0aGF0IHdlIGNhbiB1c2UgdGhlCisgKiBhcHByb3ByaWF0ZSBzdHJ1Y3R1cmUgdHlwZSAoYW5kIGZ1bmN0aW9uKSBuYW1lcyBmcm9tIHRoZSBtc3ZjIGhlYWRlcnMuCisgKi8KKyNkZWZpbmUgc3RhdCBfc3RhdDY0CitpbnQgbWluZ3dfbHN0YXQoY29uc3QgY2hhciAqZmlsZV9uYW1lLCBzdHJ1Y3Qgc3RhdCAqYnVmKTsKK2ludCBtaW5nd19mc3RhdChpbnQgZmQsIHN0cnVjdCBzdGF0ICpidWYpOworI2RlZmluZSBmc3RhdCBtaW5nd19mc3RhdAorI2RlZmluZSBsc3RhdCBtaW5nd19sc3RhdAorI2RlZmluZSBfc3RhdDY0KHgseSkgbWluZ3dfbHN0YXQoeCx5KQorI2RlZmluZSBBTFJFQURZX0RFQ0xBUkVEX1NUQVRfRlVOQ1MKKworI2luY2x1ZGUgImNvbXBhdC9taW5ndy5oIgorCisjdW5kZWYgQUxSRUFEWV9ERUNMQVJFRF9TVEFUX0ZVTkNTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29tcGF0L25lZG1hbGxvYy9MaWNlbnNlLnR4dCBiL2NvbXBhdC9uZWRtYWxsb2MvTGljZW5zZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZiN2NkOQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9uZWRtYWxsb2MvTGljZW5zZS50eHQKQEAgLTAsMCArMSwyMyBAQAorQm9vc3QgU29mdHdhcmUgTGljZW5zZSAtIFZlcnNpb24gMS4wIC0gQXVndXN0IDE3dGgsIDIwMDMKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9uCitvYnRhaW5pbmcgYSBjb3B5IG9mIHRoZSBzb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gY292ZXJlZCBieQordGhpcyBsaWNlbnNlICh0aGUgIlNvZnR3YXJlIikgdG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIGRpc3RyaWJ1dGUsCitleGVjdXRlLCBhbmQgdHJhbnNtaXQgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZQorU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgdGhpcmQtcGFydGllcyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8KK2RvIHNvLCBhbGwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nOgorCitUaGUgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIFNvZnR3YXJlIGFuZCB0aGlzIGVudGlyZSBzdGF0ZW1lbnQsIGluY2x1ZGluZwordGhlIGFib3ZlIGxpY2Vuc2UgZ3JhbnQsIHRoaXMgcmVzdHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKK211c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGluIHdob2xlIG9yIGluIHBhcnQsIGFuZAorYWxsIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNvZnR3YXJlLCB1bmxlc3Mgc3VjaCBjb3BpZXMgb3IgZGVyaXZhdGl2ZQord29ya3MgYXJlIHNvbGVseSBpbiB0aGUgZm9ybSBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgb2JqZWN0IGNvZGUgZ2VuZXJhdGVkIGJ5CithIHNvdXJjZSBsYW5ndWFnZSBwcm9jZXNzb3IuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKK1NIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBBTllPTkUgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSBCRSBMSUFCTEUKK0ZPUiBBTlkgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCitERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCmRpZmYgLS1naXQgYS9jb21wYXQvbmVkbWFsbG9jL1JlYWRtZS50eHQgYi9jb21wYXQvbmVkbWFsbG9jL1JlYWRtZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc2MzY1NgotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9uZWRtYWxsb2MvUmVhZG1lLnR4dApAQCAtMCwwICsxLDEzNiBAQAorbmVkYWxsb2MgdjEuMDUgMTV0aCBKdW5lIDIwMDg6CistPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0KKworYnkgTmlhbGwgRG91Z2xhcyAoaHR0cDovL3d3dy5uZWRwcm9kLmNvbS9wcm9ncmFtcy9wb3J0YWJsZS9uZWRtYWxsb2MvKQorCitFbmNsb3NlZCBpcyBuZWRhbGxvYywgYW4gYWx0ZXJuYXRpdmUgbWFsbG9jIGltcGxlbWVudGF0aW9uIGZvciBtdWx0aXBsZQordGhyZWFkcyB3aXRob3V0IGxvY2sgY29udGVudGlvbiBiYXNlZCBvbiBkbG1hbGxvYyB2Mi44LjQuIEl0IGlzIG1vcmUKK29yIGxlc3MgYSBuZXdlciBpbXBsZW1lbnRhdGlvbiBvZiBwdG1hbGxvYzIsIHRoZSBzdGFuZGFyZCBhbGxvY2F0b3IgaW4KK0xpbnV4ICh3aGljaCBpcyBiYXNlZCBvbiBkbG1hbGxvYyB2Mi43LjApIGJ1dCBhbHNvIGNvbnRhaW5zIGEgcGVyLXRocmVhZAorY2FjaGUgZm9yIG1heGltdW0gQ1BVIHNjYWxhYmlsaXR5LgorCitJdCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSB3aGljaCBiYXNpY2FsbHkgbWVhbnMKK3lvdSBjYW4gZG8gYW55dGhpbmcgeW91IGxpa2Ugd2l0aCBpdC4gVGhpcyBkb2VzIG5vdCBhcHBseSB0byB0aGUgbWFsbG9jLmMuaAorZmlsZSB3aGljaCByZW1haW5zIGNvcHlyaWdodCB0byBvdGhlcnMuCisKK0l0IGhhcyBiZWVuIHRlc3RlZCBvbiB3aW4zMiAoeDg2KSwgd2luNjQgKHg2NCksIExpbnV4ICh4NjQpLCBGcmVlQlNEICh4NjQpCithbmQgQXBwbGUgTWFjT1MgWCAoeDg2KS4gSXQgd29ya3MgdmVyeSB3ZWxsIG9uIGFsbCBvZiB0aGVzZSBhbmQgaXMgdmVyeQorc2lnbmlmaWNhbnRseSBmYXN0ZXIgdGhhbiB0aGUgc3lzdGVtIGFsbG9jYXRvciBvbiBhbGwgb2YgdGhlc2UgcGxhdGZvcm1zLgorCitCeSBsaXRlcmFsbHkgZHJvcHBpbmcgaW4gdGhpcyBhbGxvY2F0b3IgYXMgYSByZXBsYWNlbWVudCBmb3IgeW91ciBzeXN0ZW0KK2FsbG9jYXRvciwgeW91IGNhbiBzZWUgcmVhbCB3b3JsZCBpbXByb3ZlbWVudHMgb2YgdXAgdG8gdGhyZWUgdGltZXMgaW4gbm9ybWFsCitjb2RlIQorCitUbyB1c2U6CistPS09LT0tCitEcm9wIGluIG5lZG1hbGxvYy5oLCBuZWRtYWxsb2MuYyBhbmQgbWFsbG9jLmMuaCBpbnRvIHlvdXIgcHJvamVjdC4KK0NvbmZpZ3VyZSB1c2luZyB0aGUgaW5zdHJ1Y3Rpb25zIGluIG5lZG1hbGxvYy5oLiBSdW4gYW5kIGVuam95LgorCitUbyB0ZXN0LCBjb21waWxlIHRlc3QuYy4gSXQgd2lsbCBydW4gYSBjb21wYXJpc29uIGJldHdlZW4geW91ciBzeXN0ZW0KK2FsbG9jYXRvciBhbmQgbmVkYWxsb2MgYW5kIHRlbGwgeW91IGhvdyBtdWNoIGZhc3RlciBuZWRhbGxvYyBpcy4gSXQgYWxzbworc2VydmVzIGFzIGFuIGV4YW1wbGUgb2YgdXNhZ2UuCisKK05vdGVzOgorLT0tPS09CitJZiB5b3Ugd2FudCB0aGUgdmVyeSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGFsbG9jYXRvciwgZ2V0IGl0IGZyb20gdGhlCitUbkZPWCBTVk4gcmVwb3NpdG9yeSBhdCBzdm46Ly9zdm4uYmVybGlvcy5kZS92aWV3Y3ZzL3RuZm94L3RydW5rL3NyYy9uZWRtYWxsb2MKKworQmVjYXVzZSBvZiBob3cgbmVkYWxsb2MgYWxsb2NhdGVzIGFuIG1zcGFjZSBwZXIgdGhyZWFkLCBpdCBjYW4gY2F1c2UKK3NldmVyZSBibG9hdGluZyBvZiBtZW1vcnkgdXNhZ2UgdW5kZXIgY2VydGFpbiBhbGxvY2F0aW9uIHBhdHRlcm5zLgorWW91IGNhbiBzdWJzdGFudGlhbGx5IHJlZHVjZSB0aGlzIHdhc3RhZ2UgYnkgc2V0dGluZyBNQVhUSFJFQURTSU5QT09MCitvciB0aGUgdGhyZWFkcyBwYXJhbWV0ZXIgdG8gbmVkY3JlYXRlcG9vbCgpIHRvIGEgZnJhY3Rpb24gb2YgdGhlIG51bWJlciBvZgordGhyZWFkcyB3aGljaCB3b3VsZCBub3JtYWxseSBiZSBpbiBhIHBvb2wgYXQgb25jZS4gVGhpcyB3aWxsIHJlZHVjZQorYmxvYXRpbmcgYXQgdGhlIGNvc3Qgb2YgYW4gaW5jcmVhc2UgaW4gbG9jayBjb250ZW50aW9uLiBJZiBhbGxvY2F0ZWQgc2l6ZQoraXMgbGVzcyB0aGFuIFRIUkVBRENBQ0hFTUFYLCBsb2NraW5nIGlzIGF2b2lkZWQgOTAtOTklIG9mIHRoZSB0aW1lIGFuZAoraWYgbW9zdCBvZiB5b3VyIGFsbG9jYXRpb25zIGFyZSBiZWxvdyB0aGlzIHZhbHVlLCB5b3UgY2FuIHNhZmVseSBzZXQKK01BWFRIUkVBRFNJTlBPT0wgdG8gb25lLgorCitZb3Ugd2lsbCBzdWZmZXIgbWVtb3J5IGxlYWthZ2UgdW5sZXNzIHlvdSBjYWxsIG5lZGRpc2FibGV0aHJlYWRjYWNoZSgpCitwZXIgcG9vbCBmb3IgZXZlcnkgdGhyZWFkIHdoaWNoIGV4aXRzLiBUaGlzIGlzIGJlY2F1c2UgbmVkYWxsb2MgY2Fubm90Citwb3J0YWJseSBrbm93IHdoZW4gYSB0aHJlYWQgZXhpdHMgYW5kIHRodXMgd2hlbiBpdHMgdGhyZWFkIGNhY2hlIGNhbgorYmUgcmV0dXJuZWQgZm9yIHVzZSBieSBvdGhlciBjb2RlLiBEb24ndCBmb3JnZXQgcG9vbCB6ZXJvLCB0aGUgc3lzdGVtIHBvb2wuCisKK0ZvciBDKysgdHlwZSBhbGxvY2F0aW9uIHBhdHRlcm5zICh3aGVyZSB0aGUgc2FtZSBzaXplcyBvZiBtZW1vcnkgYXJlCityZWd1bGFybHkgYWxsb2NhdGVkIGFuZCBkZWFsbG9jYXRlZCBhcyBvYmplY3RzIGFyZSBjcmVhdGVkIGFuZCBkZXN0cm95ZWQpLAordGhlIHRocmVhZGNhY2hlIGFsd2F5cyBiZW5lZml0cyBwZXJmb3JtYW5jZS4gSWYgaG93ZXZlciB5b3VyIGFsbG9jYXRpb24KK3BhdHRlcm5zIGFyZSBkaWZmZXJlbnQsIHNlYXJjaGluZyB0aGUgdGhyZWFkY2FjaGUgbWF5IHNpZ25pZmljYW50bHkgc2xvdworZG93biB5b3VyIGNvZGUgLSBhcyBhIHJ1bGUgb2YgdGh1bWIsIGlmIGNhY2hlIHV0aWxpc2F0aW9uIGlzIGJlbG93IDgwJQorKHNlZSB0aGUgc291cmNlIGZvciBuZWRkaXNhYmxldGhyZWFkY2FjaGUoKSBmb3IgaG93IHRvIGVuYWJsZSBkZWJ1ZworcHJpbnRpbmcgaW4gcmVsZWFzZSBtb2RlKSB0aGVuIHlvdSBzaG91bGQgZGlzYWJsZSB0aGUgdGhyZWFkIGNhY2hlIGZvcgordGhhdCB0aHJlYWQuIFlvdSBjYW4gY29tcGlsZSBvdXQgdGhlIHRocmVhZGNhY2hlIGNvZGUgYnkgc2V0dGluZworVEhSRUFEQ0FDSEVNQVggdG8gemVyby4KKworU3BlZWQgY29tcGFyaXNvbnM6CistPS09LT0tPS09LT0tPS09LT0KK1NlZSBCZW5jaG1hcmtzLnhscyBmb3IgZGV0YWlscy4KKworVGhlIGVuY2xvc2VkIHRlc3QuYyBjYW4gZG8gdHdvIHRoaW5nczogaXQgY2FuIGJlIGEgdG9ydHVyZSB0ZXN0IG9yIGEgc3BlZWQKK3Rlc3QuIFRoZSBzcGVlZCB0ZXN0IGlzIGRlc2lnbmVkIHRvIGJlIGEgcmVwcmVzZW50YXRpdmUgc3ludGhldGljCittZW1vcnkgYWxsb2NhdG9yIHRlc3QuIEl0IHdvcmtzIGJ5IHJhbmRvbWx5IG1peGluZyBhbGxvY2F0aW9ucyB3aXRoIGZyZWVzCit3aXRoIGhhbGYgb2YgdGhlIGFsbG9jYXRpb24gc2l6ZXMgYmVpbmcgYSB0d28gcG93ZXIgbXVsdGlwbGUgbGVzcyB0aGFuCis1MTIgYnl0ZXMgKHRvIG1pbWljIEMrKyBzdGFjayBpbnN0YW50aWF0ZWQgb2JqZWN0cykgYW5kIHRoZSBvdGhlciBoYWxmCitiZWluZyBhIHNpbXBsZSByYW5kb20gdmFsdWUgbGVzcyB0aGFuIDE2S2IuCisKK1RoZSByZWFsIHdvcmxkIGNvZGUgcmVzdWx0cyBhcmUgZnJvbSBUbidzIFRlc3RJTyBiZW5jaG1hcmsuIFRoaXMgaXMgYQoraGVhdmlseSBtdWx0aXRocmVhZGVkIGFuZCBtZW1vcnkgaW50ZW5zaXZlIGJlbmNobWFyayB3aXRoIGEgbG90IG9mIGJyYW5jaGluZworYW5kIG90aGVyIHN0dWZmIG1vZGVybiBwcm9jZXNzb3JzIGRvbid0IGxpa2Ugc28gbXVjaC4gQXMgeW91J2xsIG5vdGUsIHRoZQordGVzdCBkb2Vzbid0IHNob3cgdGhlIGJlbmVmaXRzIG9mIHRoZSB0aHJlYWRjYWNoZSBtb3N0bHkgZHVlIHRvIHRoZSBzYXR1cmF0aW9uCitvZiB0aGUgbWVtb3J5IGJ1cyBiZWluZyB0aGUgbGltaXRpbmcgZmFjdG9yLgorCitDaGFuZ2VMb2c6CistPS09LT0tPS09Cit2MS4wNSAxNXRoIEp1bmUgMjAwODoKKyAqIHsgMTA0MiB9IEFkZGVkIGVycm9yIGNoZWNrIGZvciBUTFNTRVQoKSBhbmQgVExTRlJFRSgpIG1hY3Jvcy4gVGhhbmtzIHRvCitNYXJrdXMgRWxmcmluZyBmb3IgcmVwb3J0aW5nIHRoaXMuCisgKiB7IDEwNDMgfSBGaXhlZCBhIHNlZ2ZhdWx0IHdoZW4gZnJlZWluZyBtZW1vcnkgYWxsb2NhdGVkIHVzaW5nCituZWRpbmRlcGVuZGVudF9jb21hbGxvYygpLiBUaGFua3MgdG8gUGF2ZWwgVm96ZW5pbGVrIGZvciByZXBvcnRpbmcgdGhpcy4KKwordjEuMDQgMTR0aCBKdWx5IDIwMDc6CisgKiBGaXhlZCBhIGJ1ZyB3aXRoIHRoZSBuZXcgb3B0aW1pc2VkIGltcGxlbWVudGF0aW9uIHRoYXQgZmFpbGVkIHRvIGxvY2sKK29uIGEgcmVhbGxvYyB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuCisgKiBGaXhlZCBsYWNrIG9mIHRocmVhZCBzeW5jaHJvbmlzYXRpb24gaW4gSW5pdFBvb2woKSBjYXVzaW5nIHBvb2wgY29ycnVwdGlvbgorICogRml4ZWQgYSBtZW1vcnkgbGVhayBvZiB0aHJlYWQgY2FjaGUgY29udGVudHMgb24gZGlzYWJsaW5nLiBUaGFua3MgdG8gRWFybAorQ2hldyBmb3IgcmVwb3J0aW5nIHRoaXMuCisgKiBBZGRlZCBhIHNhbml0eSBjaGVjayBmb3IgZnJlZWQgYmxvY2tzIGJlaW5nIHZhbGlkLgorICogUmV3b3JrZWQgdGVzdC5jIGludG8gYmVpbmcgYSB0b3J0dXJlIHRlc3QuCisgKiBGaXhlZCBHQ0MgYXNzZW1ibGVyIG9wdGltaXNhdGlvbiBtaXNzcGVjaWZpY2F0aW9uCisKK3YxLjA0YWxwaGFfc3ZuOTE1IDd0aCBPY3RvYmVyIDIwMDY6CisgKiBGaXhlZCBmYWlsdXJlIHRvIHVubG9jayB0aHJlYWQgY2FjaGUgbGlzdCBpZiBhbGxvY2F0aW5nIGEgbmV3IGxpc3QgZmFpbGVkLgorVGhhbmtzIHRvIERtaXRyeSBDaGljaGtvdiBmb3IgcmVwb3J0aW5nIHRoaXMuIEZ1dGhlciB0aGFua3MgdG8gQWxla3NleSBTYW5pbi4KKyAqIEZpeGVkIHJlYWxsb2MoMCwgPHNpemU+KSBzZWdmYXVsdGluZy4gVGhhbmtzIHRvIERtaXRyeSBDaGljaGtvdiBmb3IKK3JlcG9ydGluZyB0aGlzLgorICogTWFkZSBjb25maWcgZGVmaW5lcyAjaWZuZGVmIHNvIHRoZXkgY2FuIGJlIG92ZXJyaWRlbiBieSB0aGUgYnVpbGQgc3lzdGVtLgorVGhhbmtzIHRvIEFsZWtzZXkgU2FuaW4gZm9yIHN1Z2dlc3RpbmcgdGhpcy4KKyAqIEZpeGVkIGRlYWRsb2NrIGluIG5lZHByZWFsbG9jKCkgZHVlIHRvIHVubmVjZXNzYXJ5IGxvY2tpbmcgb2YgcHJlZmVycmVkCit0aHJlYWQgbXNwYWNlIHdoZW4gbXNwYWNlX3JlYWxsb2MoKSBhbHdheXMgdXNlcyB0aGUgb3JpZ2luYWwgYmxvY2sncyBtc3BhY2UKK2FueXdheS4gVGhhbmtzIHRvIEFsZWtzZXkgU2FuaW4gZm9yIHJlcG9ydGluZyB0aGlzLgorICogTWFkZSBzb21lIHNwZWVkIGltcHJvdmVtZW50cyBieSBoYWNraW5nIG1zcGFjZV9tYWxsb2MoKSB0byBubyBsb25nZXIgbG9jaworaXRzIG1zcGFjZSwgdGh1cyBhbGxvd2luZyB0aGUgcmVjdXJzaXZlIG11dGV4IGltcGxlbWVudGF0aW9uIHRvIGJlIHJlbW92ZWQKK3dpdGggYW4gYXNzb2NpYXRlZCBzcGVlZCBpbmNyZWFzZS4gVGhhbmtzIHRvIEFsZWtzZXkgU2FuaW4gZm9yIHN1Z2dlc3RpbmcgdGhpcy4KKyAqIEZpeGVkIGEgYnVnIHdoZXJlIGFsbG9jYXRpbmcgbXNwYWNlcyBvdmVycmFuIGl0cyBtYXggbGltaXQuIFRoYW5rcyB0bworQWxla3NleSBTYW5pbiBmb3IgcmVwb3J0aW5nIHRoaXMuCisKK3YxLjAzIDEwdGggSnVseSAyMDA2OgorICogRml4ZWQgbWVtb3J5IGNvcnJ1cHRpb24gYnVnIGluIHRocmVhZGNhY2hlIGNvZGUgd2hpY2ggb25seSBhcHBlYXJlZCB3aXRoID40Cit0aHJlYWRzIGFuZCBpbiBoZWF2eSB1c2Ugb2YgdGhlIHRocmVhZGNhY2hlLgorCit2MS4wMiAxNXRoIE1heSAyMDA2OgorICogSW50ZWdyYXRlZCBkbG1hbGxvYyB2Mi44LjQsIGZpeGluZyB0aGUgd2luMzIgbWVtb3J5IHJlbGVhc2UgcHJvYmxlbSBhbmQKK2ltcHJvdmluZyBwZXJmb3JtYW5jZSBzdGlsbCBmdXJ0aGVyLiBTcGVlZCBpcyBub3cgdXAgdG8gdHdpY2UgdGhlIHNwZWVkIG9mIHYxLjAxCisoYXZlcmFnZSBpcyA2NyUgZmFzdGVyKS4KKyAqIEZpeGVkIHdpbjMyIGNyaXRpY2FsIHNlY3Rpb24gaW1wbGVtZW50YXRpb24uIFRoYW5rcyB0byBQYXZlbCBLdXpuZXRzb3YKK2ZvciByZXBvcnRpbmcgdGhpcy4KKyAqIFdhc24ndCBsb2NraW5nIG1zcGFjZSBpZiBhbGwgbXNwYWNlcyB3ZXJlIGxvY2tlZC4gVGhhbmtzIHRvIFBhdmVsIEt1em5ldHNvdgorZm9yIHJlcG9ydGluZyB0aGlzLgorICogQWRkZWQgQXBwbGUgTWFjIE9TIFggc3VwcG9ydC4KKwordjEuMDEgMjR0aCBGZWJydWFyeSAyMDA2OgorICogRml4ZWQgbXVsdGlwcm9jZXNzb3Igc2NhbGluZyBwcm9ibGVtcyBieSByZW1vdmluZyBzb3VyY2VzIG9mIGNhY2hlIHNsb3NoaW5nCisgKiBFYXJsIENoZXcgPGVhcmxfY2hldyA8YXQ+IGFnaWxlbnQgPGRvdD4gY29tPiBzZW50IHBhdGNoZXMgZm9yIHRoZSBmb2xsb3dpbmc6CisgICAxLiBzaXplMmJpbmlkeCgpIHdhc24ndCB3b3JraW5nIGZvciBkZWZhdWx0IGNvZGUgcGF0aCAobm9uIHg4NikKKyAgIDIuIEZpeGVkIGZhaWx1cmUgdG8gcmVsZWFzZSBtc3BhY2UgbG9jayB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgd2hpY2gKKyAgICAgIGNhdXNlZCBhIGRlYWRsb2NrCisKK3YxLjAwIDFzdCBKYW51YXJ5IDIwMDY6CisgKiBGaXJzdCByZWxlYXNlCmRpZmYgLS1naXQgYS9jb21wYXQvbmVkbWFsbG9jL21hbGxvYy5jLmggYi9jb21wYXQvbmVkbWFsbG9jL21hbGxvYy5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRjNDJlMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9uZWRtYWxsb2MvbWFsbG9jLmMuaApAQCAtMCwwICsxLDU3NTIgQEAKKy8qCisgIFRoaXMgaXMgYSB2ZXJzaW9uIChha2EgZGxtYWxsb2MpIG9mIG1hbGxvYy9mcmVlL3JlYWxsb2Mgd3JpdHRlbiBieQorICBEb3VnIExlYSBhbmQgcmVsZWFzZWQgdG8gdGhlIHB1YmxpYyBkb21haW4sIGFzIGV4cGxhaW5lZCBhdAorICBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9wdWJsaWNkb21haW4uICBTZW5kIHF1ZXN0aW9ucywKKyAgY29tbWVudHMsIGNvbXBsYWludHMsIHBlcmZvcm1hbmNlIGRhdGEsIGV0YyB0byBkbEBjcy5vc3dlZ28uZWR1CisKKyogVmVyc2lvbiBwcmUtMi44LjQgTW9uIE5vdiAyNyAxMToyMjozNyAyMDA2ICAgIChkbCBhdCBnZWUpCisKKyAgIE5vdGU6IFRoZXJlIG1heSBiZSBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhpcyBtYWxsb2Mgb2J0YWluYWJsZSBhdAorCSAgIGZ0cDovL2dlZS5jcy5vc3dlZ28uZWR1L3B1Yi9taXNjL21hbGxvYy5jCisJIENoZWNrIGJlZm9yZSBpbnN0YWxsaW5nIQorCisqIFF1aWNrc3RhcnQKKworICBUaGlzIGxpYnJhcnkgaXMgYWxsIGluIG9uZSBmaWxlIHRvIHNpbXBsaWZ5IHRoZSBtb3N0IGNvbW1vbiB1c2FnZToKKyAgZnRwIGl0LCBjb21waWxlIGl0ICgtTzMpLCBhbmQgbGluayBpdCBpbnRvIGFub3RoZXIgcHJvZ3JhbS4gQWxsIG9mCisgIHRoZSBjb21waWxlLXRpbWUgb3B0aW9ucyBkZWZhdWx0IHRvIHJlYXNvbmFibGUgdmFsdWVzIGZvciB1c2Ugb24KKyAgbW9zdCBwbGF0Zm9ybXMuICBZb3UgbWlnaHQgbGF0ZXIgd2FudCB0byBzdGVwIHRocm91Z2ggdmFyaW91cworICBjb21waWxlLXRpbWUgYW5kIGR5bmFtaWMgdHVuaW5nIG9wdGlvbnMuCisKKyAgRm9yIGNvbnZlbmllbmNlLCBhbiBpbmNsdWRlIGZpbGUgZm9yIGNvZGUgdXNpbmcgdGhpcyBtYWxsb2MgaXMgYXQ6CisgICAgIGZ0cDovL2dlZS5jcy5vc3dlZ28uZWR1L3B1Yi9taXNjL21hbGxvYy0yLjguNC5oCisgIFlvdSBkb24ndCByZWFsbHkgbmVlZCB0aGlzIC5oIGZpbGUgdW5sZXNzIHlvdSBjYWxsIGZ1bmN0aW9ucyBub3QKKyAgZGVmaW5lZCBpbiB5b3VyIHN5c3RlbSBpbmNsdWRlIGZpbGVzLiAgVGhlIC5oIGZpbGUgY29udGFpbnMgb25seSB0aGUKKyAgZXhjZXJwdHMgZnJvbSB0aGlzIGZpbGUgbmVlZGVkIGZvciB1c2luZyB0aGlzIG1hbGxvYyBvbiBBTlNJIEMvQysrCisgIHN5c3RlbXMsIHNvIGxvbmcgYXMgeW91IGhhdmVuJ3QgY2hhbmdlZCBjb21waWxlLXRpbWUgb3B0aW9ucyBhYm91dAorICBuYW1pbmcgYW5kIHR1bmluZyBwYXJhbWV0ZXJzLiAgSWYgeW91IGRvLCB0aGVuIHlvdSBjYW4gY3JlYXRlIHlvdXIKKyAgb3duIG1hbGxvYy5oIHRoYXQgZG9lcyBpbmNsdWRlIGFsbCBzZXR0aW5ncyBieSBjdXR0aW5nIGF0IHRoZSBwb2ludAorICBpbmRpY2F0ZWQgYmVsb3cuIE5vdGUgdGhhdCB5b3UgbWF5IGFscmVhZHkgYnkgZGVmYXVsdCBiZSB1c2luZyBhIEMKKyAgbGlicmFyeSBjb250YWluaW5nIGEgbWFsbG9jIHRoYXQgaXMgYmFzZWQgb24gc29tZSB2ZXJzaW9uIG9mIHRoaXMKKyAgbWFsbG9jIChmb3IgZXhhbXBsZSBpbiBsaW51eCkuIFlvdSBtaWdodCBzdGlsbCB3YW50IHRvIHVzZSB0aGUgb25lCisgIGluIHRoaXMgZmlsZSB0byBjdXN0b21pemUgc2V0dGluZ3Mgb3IgdG8gYXZvaWQgb3ZlcmhlYWRzIGFzc29jaWF0ZWQKKyAgd2l0aCBsaWJyYXJ5IHZlcnNpb25zLgorCisqIFZpdGFsIHN0YXRpc3RpY3M6CisKKyAgU3VwcG9ydGVkIHBvaW50ZXIvc2l6ZV90IHJlcHJlc2VudGF0aW9uOiAgICAgICA0IG9yIDggYnl0ZXMKKyAgICAgICBzaXplX3QgTVVTVCBiZSBhbiB1bnNpZ25lZCB0eXBlIG9mIHRoZSBzYW1lIHdpZHRoIGFzCisgICAgICAgcG9pbnRlcnMuIChJZiB5b3UgYXJlIHVzaW5nIGFuIGFuY2llbnQgc3lzdGVtIHRoYXQgZGVjbGFyZXMKKyAgICAgICBzaXplX3QgYXMgYSBzaWduZWQgdHlwZSwgb3IgbmVlZCBpdCB0byBiZSBhIGRpZmZlcmVudCB3aWR0aAorICAgICAgIHRoYW4gcG9pbnRlcnMsIHlvdSBjYW4gdXNlIGEgcHJldmlvdXMgcmVsZWFzZSBvZiB0aGlzIG1hbGxvYworICAgICAgIChlLmcuIDIuNy4yKSBzdXBwb3J0aW5nIHRoZXNlLikKKworICBBbGlnbm1lbnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggYnl0ZXMgKGRlZmF1bHQpCisgICAgICAgVGhpcyBzdWZmaWNlcyBmb3IgbmVhcmx5IGFsbCBjdXJyZW50IG1hY2hpbmVzIGFuZCBDIGNvbXBpbGVycy4KKyAgICAgICBIb3dldmVyLCB5b3UgY2FuIGRlZmluZSBNQUxMT0NfQUxJR05NRU5UIHRvIGJlIHdpZGVyIHRoYW4gdGhpcworICAgICAgIGlmIG5lY2Vzc2FyeSAodXAgdG8gMTI4Ynl0ZXMpLCBhdCB0aGUgZXhwZW5zZSBvZiB1c2luZyBtb3JlIHNwYWNlLgorCisgIE1pbmltdW0gb3ZlcmhlYWQgcGVyIGFsbG9jYXRlZCBjaHVuazogICA0IG9yICA4IGJ5dGVzIChpZiA0Ynl0ZSBzaXplcykKKwkJCQkJICA4IG9yIDE2IGJ5dGVzIChpZiA4Ynl0ZSBzaXplcykKKyAgICAgICBFYWNoIG1hbGxvY2VkIGNodW5rIGhhcyBhIGhpZGRlbiB3b3JkIG9mIG92ZXJoZWFkIGhvbGRpbmcgc2l6ZQorICAgICAgIGFuZCBzdGF0dXMgaW5mb3JtYXRpb24sIGFuZCBhZGRpdGlvbmFsIGNyb3NzLWNoZWNrIHdvcmQKKyAgICAgICBpZiBGT09URVJTIGlzIGRlZmluZWQuCisKKyAgTWluaW11bSBhbGxvY2F0ZWQgc2l6ZTogNC1ieXRlIHB0cnM6ICAxNiBieXRlcyAgICAoaW5jbHVkaW5nIG92ZXJoZWFkKQorCQkJICA4LWJ5dGUgcHRyczogIDMyIGJ5dGVzICAgIChpbmNsdWRpbmcgb3ZlcmhlYWQpCisKKyAgICAgICBFdmVuIGEgcmVxdWVzdCBmb3IgemVybyBieXRlcyAoaS5lLiwgbWFsbG9jKDApKSByZXR1cm5zIGEKKyAgICAgICBwb2ludGVyIHRvIHNvbWV0aGluZyBvZiB0aGUgbWluaW11bSBhbGxvY2F0YWJsZSBzaXplLgorICAgICAgIFRoZSBtYXhpbXVtIG92ZXJoZWFkIHdhc3RhZ2UgKGkuZS4sIG51bWJlciBvZiBleHRyYSBieXRlcworICAgICAgIGFsbG9jYXRlZCB0aGFuIHdlcmUgcmVxdWVzdGVkIGluIG1hbGxvYykgaXMgbGVzcyB0aGFuIG9yIGVxdWFsCisgICAgICAgdG8gdGhlIG1pbmltdW0gc2l6ZSwgZXhjZXB0IGZvciByZXF1ZXN0cyA+PSBtbWFwX3RocmVzaG9sZCB0aGF0CisgICAgICAgYXJlIHNlcnZpY2VkIHZpYSBtbWFwKCksIHdoZXJlIHRoZSB3b3JzdCBjYXNlIHdhc3RhZ2UgaXMgYWJvdXQKKyAgICAgICAzMiBieXRlcyBwbHVzIHRoZSByZW1haW5kZXIgZnJvbSBhIHN5c3RlbSBwYWdlICh0aGUgbWluaW1hbAorICAgICAgIG1tYXAgdW5pdCk7IHR5cGljYWxseSA0MDk2IG9yIDgxOTIgYnl0ZXMuCisKKyAgU2VjdXJpdHk6IHN0YXRpYy1zYWZlOyBvcHRpb25hbGx5IG1vcmUgb3IgbGVzcworICAgICAgIFRoZSAic2VjdXJpdHkiIG9mIG1hbGxvYyByZWZlcnMgdG8gdGhlIGFiaWxpdHkgb2YgbWFsaWNpb3VzCisgICAgICAgY29kZSB0byBhY2NlbnR1YXRlIHRoZSBlZmZlY3RzIG9mIGVycm9ycyAoZm9yIGV4YW1wbGUsIGZyZWVpbmcKKyAgICAgICBzcGFjZSB0aGF0IGlzIG5vdCBjdXJyZW50bHkgbWFsbG9jJ2VkIG9yIG92ZXJ3cml0aW5nIHBhc3QgdGhlCisgICAgICAgZW5kcyBvZiBjaHVua3MpIGluIGNvZGUgdGhhdCBjYWxscyBtYWxsb2MuICBUaGlzIG1hbGxvYworICAgICAgIGd1YXJhbnRlZXMgbm90IHRvIG1vZGlmeSBhbnkgbWVtb3J5IGxvY2F0aW9ucyBiZWxvdyB0aGUgYmFzZSBvZgorICAgICAgIGhlYXAsIGkuZS4sIHN0YXRpYyB2YXJpYWJsZXMsIGV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mIHVzYWdlCisgICAgICAgZXJyb3JzLiAgVGhlIHJvdXRpbmVzIGFkZGl0aW9uYWxseSBkZXRlY3QgbW9zdCBpbXByb3BlciBmcmVlcworICAgICAgIGFuZCByZWFsbG9jcy4gIEFsbCB0aGlzIGhvbGRzIGFzIGxvbmcgYXMgdGhlIHN0YXRpYyBib29ra2VlcGluZworICAgICAgIGZvciBtYWxsb2MgaXRzZWxmIGlzIG5vdCBjb3JydXB0ZWQgYnkgc29tZSBvdGhlciBtZWFucy4gIFRoaXMKKyAgICAgICBpcyBvbmx5IG9uZSBhc3BlY3Qgb2Ygc2VjdXJpdHkgLS0gdGhlc2UgY2hlY2tzIGRvIG5vdCwgYW5kCisgICAgICAgY2Fubm90LCBkZXRlY3QgYWxsIHBvc3NpYmxlIHByb2dyYW1taW5nIGVycm9ycy4KKworICAgICAgIElmIEZPT1RFUlMgaXMgZGVmaW5lZCBub256ZXJvLCB0aGVuIGVhY2ggYWxsb2NhdGVkIGNodW5rCisgICAgICAgY2FycmllcyBhbiBhZGRpdGlvbmFsIGNoZWNrIHdvcmQgdG8gdmVyaWZ5IHRoYXQgaXQgd2FzIG1hbGxvY2VkCisgICAgICAgZnJvbSBpdHMgc3BhY2UuICBUaGVzZSBjaGVjayB3b3JkcyBhcmUgdGhlIHNhbWUgd2l0aGluIGVhY2gKKyAgICAgICBleGVjdXRpb24gb2YgYSBwcm9ncmFtIHVzaW5nIG1hbGxvYywgYnV0IGRpZmZlciBhY3Jvc3MKKyAgICAgICBleGVjdXRpb25zLCBzbyBleHRlcm5hbGx5IGNyYWZ0ZWQgZmFrZSBjaHVua3MgY2Fubm90IGJlCisgICAgICAgZnJlZWQuIFRoaXMgaW1wcm92ZXMgc2VjdXJpdHkgYnkgcmVqZWN0aW5nIGZyZWVzL3JlYWxsb2NzIHRoYXQKKyAgICAgICBjb3VsZCBjb3JydXB0IGhlYXAgbWVtb3J5LCBpbiBhZGRpdGlvbiB0byB0aGUgY2hlY2tzIHByZXZlbnRpbmcKKyAgICAgICB3cml0ZXMgdG8gc3RhdGljcyB0aGF0IGFyZSBhbHdheXMgb24uICBUaGlzIG1heSBmdXJ0aGVyIGltcHJvdmUKKyAgICAgICBzZWN1cml0eSBhdCB0aGUgZXhwZW5zZSBvZiB0aW1lIGFuZCBzcGFjZSBvdmVyaGVhZC4gIChOb3RlIHRoYXQKKyAgICAgICBGT09URVJTIG1heSBhbHNvIGJlIHdvcnRoIHVzaW5nIHdpdGggTVNQQUNFUy4pCisKKyAgICAgICBCeSBkZWZhdWx0IGRldGVjdGVkIGVycm9ycyBjYXVzZSB0aGUgcHJvZ3JhbSB0byBhYm9ydCAoY2FsbGluZworICAgICAgICJhYm9ydCgpIikuIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyB0byBpbnN0ZWFkIHByb2NlZWQgcGFzdAorICAgICAgIGVycm9ycyBieSBkZWZpbmluZyBQUk9DRUVEX09OX0VSUk9SLiAgSW4gdGhpcyBjYXNlLCBhIGJhZCBmcmVlCisgICAgICAgaGFzIG5vIGVmZmVjdCwgYW5kIGEgbWFsbG9jIHRoYXQgZW5jb3VudGVycyBhIGJhZCBhZGRyZXNzCisgICAgICAgY2F1c2VkIGJ5IHVzZXIgb3ZlcndyaXRlcyB3aWxsIGlnbm9yZSB0aGUgYmFkIGFkZHJlc3MgYnkKKyAgICAgICBkcm9wcGluZyBwb2ludGVycyBhbmQgaW5kaWNlcyB0byBhbGwga25vd24gbWVtb3J5LiBUaGlzIG1heQorICAgICAgIGJlIGFwcHJvcHJpYXRlIGZvciBwcm9ncmFtcyB0aGF0IHNob3VsZCBjb250aW51ZSBpZiBhdCBhbGwKKyAgICAgICBwb3NzaWJsZSBpbiB0aGUgZmFjZSBvZiBwcm9ncmFtbWluZyBlcnJvcnMsIGFsdGhvdWdoIHRoZXkgbWF5CisgICAgICAgcnVuIG91dCBvZiBtZW1vcnkgYmVjYXVzZSBkcm9wcGVkIG1lbW9yeSBpcyBuZXZlciByZWNsYWltZWQuCisKKyAgICAgICBJZiB5b3UgZG9uJ3QgbGlrZSBlaXRoZXIgb2YgdGhlc2Ugb3B0aW9ucywgeW91IGNhbiBkZWZpbmUKKyAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTiBhbmQgVVNBR0VfRVJST1JfQUNUSU9OIHRvIGRvIGFueXRoaW5nCisgICAgICAgZWxzZS4gQW5kIGlmIGlmIHlvdSBhcmUgc3VyZSB0aGF0IHlvdXIgcHJvZ3JhbSB1c2luZyBtYWxsb2MgaGFzCisgICAgICAgbm8gZXJyb3JzIG9yIHZ1bG5lcmFiaWxpdGllcywgeW91IGNhbiBkZWZpbmUgSU5TRUNVUkUgdG8gMSwKKyAgICAgICB3aGljaCBtaWdodCAob3IgbWlnaHQgbm90KSBwcm92aWRlIGEgc21hbGwgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuCisKKyAgVGhyZWFkLXNhZmV0eTogTk9UIHRocmVhZC1zYWZlIHVubGVzcyBVU0VfTE9DS1MgZGVmaW5lZAorICAgICAgIFdoZW4gVVNFX0xPQ0tTIGlzIGRlZmluZWQsIGVhY2ggcHVibGljIGNhbGwgdG8gbWFsbG9jLCBmcmVlLAorICAgICAgIGV0YyBpcyBzdXJyb3VuZGVkIHdpdGggZWl0aGVyIGEgcHRocmVhZCBtdXRleCBvciBhIHdpbjMyCisgICAgICAgc3BpbmxvY2sgKGRlcGVuZGluZyBvbiBXSU4zMikuIFRoaXMgaXMgbm90IGVzcGVjaWFsbHkgZmFzdCwgYW5kCisgICAgICAgY2FuIGJlIGEgbWFqb3IgYm90dGxlbmVjay4gIEl0IGlzIGRlc2lnbmVkIG9ubHkgdG8gcHJvdmlkZQorICAgICAgIG1pbmltYWwgcHJvdGVjdGlvbiBpbiBjb25jdXJyZW50IGVudmlyb25tZW50cywgYW5kIHRvIHByb3ZpZGUgYQorICAgICAgIGJhc2lzIGZvciBleHRlbnNpb25zLiAgSWYgeW91IGFyZSB1c2luZyBtYWxsb2MgaW4gYSBjb25jdXJyZW50CisgICAgICAgcHJvZ3JhbSwgY29uc2lkZXIgaW5zdGVhZCB1c2luZyBuZWRtYWxsb2MKKyAgICAgICAoaHR0cDovL3d3dy5uZWRwcm9kLmNvbS9wcm9ncmFtcy9wb3J0YWJsZS9uZWRtYWxsb2MvKSBvcgorICAgICAgIHB0bWFsbG9jIChTZWUgaHR0cDovL3d3dy5tYWxsb2MuZGUpLCB3aGljaCBhcmUgZGVyaXZlZAorICAgICAgIGZyb20gdmVyc2lvbnMgb2YgdGhpcyBtYWxsb2MuCisKKyAgU3lzdGVtIHJlcXVpcmVtZW50czogQW55IGNvbWJpbmF0aW9uIG9mIE1PUkVDT1JFIGFuZC9vciBNTUFQL01VTk1BUAorICAgICAgIFRoaXMgbWFsbG9jIGNhbiB1c2UgdW5peCBzYnJrIG9yIGFueSBlbXVsYXRpb24gKGludm9rZWQgdXNpbmcKKyAgICAgICB0aGUgQ0FMTF9NT1JFQ09SRSBtYWNybykgYW5kL29yIG1tYXAvbXVubWFwIG9yIGFueSBlbXVsYXRpb24KKyAgICAgICAoaW52b2tlZCB1c2luZyBDQUxMX01NQVAvQ0FMTF9NVU5NQVApIHRvIGdldCBhbmQgcmVsZWFzZSBzeXN0ZW0KKyAgICAgICBtZW1vcnkuICBPbiBtb3N0IHVuaXggc3lzdGVtcywgaXQgdGVuZHMgdG8gd29yayBiZXN0IGlmIGJvdGgKKyAgICAgICBNT1JFQ09SRSBhbmQgTU1BUCBhcmUgZW5hYmxlZC4gIE9uIFdpbjMyLCBpdCB1c2VzIGVtdWxhdGlvbnMKKyAgICAgICBiYXNlZCBvbiBWaXJ0dWFsQWxsb2MuIEl0IGFsc28gdXNlcyBjb21tb24gQyBsaWJyYXJ5IGZ1bmN0aW9ucworICAgICAgIGxpa2UgbWVtc2V0LgorCisgIENvbXBsaWFuY2U6IEkgYmVsaWV2ZSBpdCBpcyBjb21wbGlhbnQgd2l0aCB0aGUgU2luZ2xlIFVuaXggU3BlY2lmaWNhdGlvbgorICAgICAgIChTZWUgaHR0cDovL3d3dy51bml4Lm9yZykuIEFsc28gU1ZJRC9YUEcsIEFOU0kgQywgYW5kIHByb2JhYmx5CisgICAgICAgb3RoZXJzIGFzIHdlbGwuCisKKyogT3ZlcnZpZXcgb2YgYWxnb3JpdGhtcworCisgIFRoaXMgaXMgbm90IHRoZSBmYXN0ZXN0LCBtb3N0IHNwYWNlLWNvbnNlcnZpbmcsIG1vc3QgcG9ydGFibGUsIG9yCisgIG1vc3QgdHVuYWJsZSBtYWxsb2MgZXZlciB3cml0dGVuLiBIb3dldmVyIGl0IGlzIGFtb25nIHRoZSBmYXN0ZXN0CisgIHdoaWxlIGFsc28gYmVpbmcgYW1vbmcgdGhlIG1vc3Qgc3BhY2UtY29uc2VydmluZywgcG9ydGFibGUgYW5kCisgIHR1bmFibGUuICBDb25zaXN0ZW50IGJhbGFuY2UgYWNyb3NzIHRoZXNlIGZhY3RvcnMgcmVzdWx0cyBpbiBhIGdvb2QKKyAgZ2VuZXJhbC1wdXJwb3NlIGFsbG9jYXRvciBmb3IgbWFsbG9jLWludGVuc2l2ZSBwcm9ncmFtcy4KKworICBJbiBtb3N0IHdheXMsIHRoaXMgbWFsbG9jIGlzIGEgYmVzdC1maXQgYWxsb2NhdG9yLiBHZW5lcmFsbHksIGl0CisgIGNob29zZXMgdGhlIGJlc3QtZml0dGluZyBleGlzdGluZyBjaHVuayBmb3IgYSByZXF1ZXN0LCB3aXRoIHRpZXMKKyAgYnJva2VuIGluIGFwcHJveGltYXRlbHkgbGVhc3QtcmVjZW50bHktdXNlZCBvcmRlci4gKFRoaXMgc3RyYXRlZ3kKKyAgbm9ybWFsbHkgbWFpbnRhaW5zIGxvdyBmcmFnbWVudGF0aW9uLikgSG93ZXZlciwgZm9yIHJlcXVlc3RzIGxlc3MKKyAgdGhhbiAyNTZieXRlcywgaXQgZGV2aWF0ZXMgZnJvbSBiZXN0LWZpdCB3aGVuIHRoZXJlIGlzIG5vdCBhbgorICBleGFjdGx5IGZpdHRpbmcgYXZhaWxhYmxlIGNodW5rIGJ5IHByZWZlcnJpbmcgdG8gdXNlIHNwYWNlIGFkamFjZW50CisgIHRvIHRoYXQgdXNlZCBmb3IgdGhlIHByZXZpb3VzIHNtYWxsIHJlcXVlc3QsIGFzIHdlbGwgYXMgYnkgYnJlYWtpbmcKKyAgdGllcyBpbiBhcHByb3hpbWF0ZWx5IG1vc3QtcmVjZW50bHktdXNlZCBvcmRlci4gKFRoZXNlIGVuaGFuY2UKKyAgbG9jYWxpdHkgb2Ygc2VyaWVzIG9mIHNtYWxsIGFsbG9jYXRpb25zLikgIEFuZCBmb3IgdmVyeSBsYXJnZSByZXF1ZXN0cworICAoPj0gMjU2S2IgYnkgZGVmYXVsdCksIGl0IHJlbGllcyBvbiBzeXN0ZW0gbWVtb3J5IG1hcHBpbmcKKyAgZmFjaWxpdGllcywgaWYgc3VwcG9ydGVkLiAgKFRoaXMgaGVscHMgYXZvaWQgY2FycnlpbmcgYXJvdW5kIGFuZAorICBwb3NzaWJseSBmcmFnbWVudGluZyBtZW1vcnkgdXNlZCBvbmx5IGZvciBsYXJnZSBjaHVua3MuKQorCisgIEFsbCBvcGVyYXRpb25zIChleGNlcHQgbWFsbG9jX3N0YXRzIGFuZCBtYWxsaW5mbykgaGF2ZSBleGVjdXRpb24KKyAgdGltZXMgdGhhdCBhcmUgYm91bmRlZCBieSBhIGNvbnN0YW50IGZhY3RvciBvZiB0aGUgbnVtYmVyIG9mIGJpdHMgaW4KKyAgYSBzaXplX3QsIG5vdCBjb3VudGluZyBhbnkgY2xlYXJpbmcgaW4gY2FsbG9jIG9yIGNvcHlpbmcgaW4gcmVhbGxvYywKKyAgb3IgYWN0aW9ucyBzdXJyb3VuZGluZyBNT1JFQ09SRSBhbmQgTU1BUCB0aGF0IGhhdmUgdGltZXMKKyAgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2Ygbm9uLWNvbnRpZ3VvdXMgcmVnaW9ucyByZXR1cm5lZCBieQorICBzeXN0ZW0gYWxsb2NhdGlvbiByb3V0aW5lcywgd2hpY2ggaXMgb2Z0ZW4ganVzdCAxLiBJbiByZWFsLXRpbWUKKyAgYXBwbGljYXRpb25zLCB5b3UgY2FuIG9wdGlvbmFsbHkgc3VwcHJlc3Mgc2VnbWVudCB0cmF2ZXJzYWxzIHVzaW5nCisgIE5PX1NFR01FTlRfVFJBVkVSU0FMLCB3aGljaCBhc3N1cmVzIGJvdW5kZWQgZXhlY3V0aW9uIGV2ZW4gd2hlbgorICBzeXN0ZW0gYWxsb2NhdG9ycyByZXR1cm4gbm9uLWNvbnRpZ3VvdXMgc3BhY2VzLCBhdCB0aGUgdHlwaWNhbAorICBleHBlbnNlIG9mIGNhcnJ5aW5nIGFyb3VuZCBtb3JlIG1lbW9yeSBhbmQgaW5jcmVhc2VkIGZyYWdtZW50YXRpb24uCisKKyAgVGhlIGltcGxlbWVudGF0aW9uIGlzIG5vdCB2ZXJ5IG1vZHVsYXIgYW5kIHNlcmlvdXNseSBvdmVydXNlcworICBtYWNyb3MuIFBlcmhhcHMgc29tZWRheSBhbGwgQyBjb21waWxlcnMgd2lsbCBkbyBhcyBnb29kIGEgam9iCisgIGlubGluaW5nIG1vZHVsYXIgY29kZSBhcyBjYW4gbm93IGJlIGRvbmUgYnkgYnJ1dGUtZm9yY2UgZXhwYW5zaW9uLAorICBidXQgbm93LCBlbm91Z2ggb2YgdGhlbSBzZWVtIG5vdCB0by4KKworICBTb21lIGNvbXBpbGVycyBpc3N1ZSBhIGxvdCBvZiB3YXJuaW5ncyBhYm91dCBjb2RlIHRoYXQgaXMKKyAgZGVhZC91bnJlYWNoYWJsZSBvbmx5IG9uIHNvbWUgcGxhdGZvcm1zLCBhbmQgYWxzbyBhYm91dCBpbnRlbnRpb25hbAorICB1c2VzIG9mIG5lZ2F0aW9uIG9uIHVuc2lnbmVkIHR5cGVzLiBBbGwga25vd24gY2FzZXMgb2YgZWFjaCBjYW4gYmUKKyAgaWdub3JlZC4KKworICBGb3IgYSBsb25nZXIgYnV0IG91dCBvZiBkYXRlIGhpZ2gtbGV2ZWwgZGVzY3JpcHRpb24sIHNlZQorICAgICBodHRwOi8vZ2VlLmNzLm9zd2Vnby5lZHUvZGwvaHRtbC9tYWxsb2MuaHRtbAorCisqIE1TUEFDRVMKKyAgSWYgTVNQQUNFUyBpcyBkZWZpbmVkLCB0aGVuIGluIGFkZGl0aW9uIHRvIG1hbGxvYywgZnJlZSwgZXRjLiwKKyAgdGhpcyBmaWxlIGFsc28gZGVmaW5lcyBtc3BhY2VfbWFsbG9jLCBtc3BhY2VfZnJlZSwgZXRjLiBUaGVzZQorICBhcmUgdmVyc2lvbnMgb2YgbWFsbG9jIHJvdXRpbmVzIHRoYXQgdGFrZSBhbiAibXNwYWNlIiBhcmd1bWVudAorICBvYnRhaW5lZCB1c2luZyBjcmVhdGVfbXNwYWNlLCB0byBjb250cm9sIGFsbCBpbnRlcm5hbCBib29ra2VlcGluZy4KKyAgSWYgT05MWV9NU1BBQ0VTIGlzIGRlZmluZWQsIG9ubHkgdGhlc2UgdmVyc2lvbnMgYXJlIGNvbXBpbGVkLgorICBTbyBpZiB5b3Ugd291bGQgbGlrZSB0byB1c2UgdGhpcyBhbGxvY2F0b3IgZm9yIG9ubHkgc29tZSBhbGxvY2F0aW9ucywKKyAgYW5kIHlvdXIgc3lzdGVtIG1hbGxvYyBmb3Igb3RoZXJzLCB5b3UgY2FuIGNvbXBpbGUgd2l0aAorICBPTkxZX01TUEFDRVMgYW5kIHRoZW4gZG8gc29tZXRoaW5nIGxpa2UuLi4KKyAgICBzdGF0aWMgbXNwYWNlIG15bXNwYWNlID0gY3JlYXRlX21zcGFjZSgwLDApOyAvLyBmb3IgZXhhbXBsZQorICAgICNkZWZpbmUgbXltYWxsb2MoYnl0ZXMpICBtc3BhY2VfbWFsbG9jKG15bXNwYWNlLCBieXRlcykKKworICAoTm90ZTogSWYgeW91IG9ubHkgbmVlZCBvbmUgaW5zdGFuY2Ugb2YgYW4gbXNwYWNlLCB5b3UgY2FuIGluc3RlYWQKKyAgdXNlICJVU0VfRExfUFJFRklYIiB0byByZWxhYmVsIHRoZSBnbG9iYWwgbWFsbG9jLikKKworICBZb3UgY2FuIHNpbWlsYXJseSBjcmVhdGUgdGhyZWFkLWxvY2FsIGFsbG9jYXRvcnMgYnkgc3RvcmluZworICBtc3BhY2VzIGFzIHRocmVhZC1sb2NhbHMuIEZvciBleGFtcGxlOgorICAgIHN0YXRpYyBfX3RocmVhZCBtc3BhY2UgdGxtcyA9IDA7CisgICAgdm9pZCogIHRsbWFsbG9jKHNpemVfdCBieXRlcykgeworICAgICAgaWYgKHRsbXMgPT0gMCkgdGxtcyA9IGNyZWF0ZV9tc3BhY2UoMCwgMCk7CisgICAgICByZXR1cm4gbXNwYWNlX21hbGxvYyh0bG1zLCBieXRlcyk7CisgICAgfQorICAgIHZvaWQgIHRsZnJlZSh2b2lkKiBtZW0pIHsgbXNwYWNlX2ZyZWUodGxtcywgbWVtKTsgfQorCisgIFVubGVzcyBGT09URVJTIGlzIGRlZmluZWQsIGVhY2ggbXNwYWNlIGlzIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQuCisgIFlvdSBjYW5ub3QgYWxsb2NhdGUgZnJvbSBvbmUgYW5kIGZyZWUgdG8gYW5vdGhlciAoYWx0aG91Z2gKKyAgY29uZm9ybWFuY2UgaXMgb25seSB3ZWFrbHkgY2hlY2tlZCwgc28gdXNhZ2UgZXJyb3JzIGFyZSBub3QgYWx3YXlzCisgIGNhdWdodCkuIElmIEZPT1RFUlMgaXMgZGVmaW5lZCwgdGhlbiBlYWNoIGNodW5rIGNhcnJpZXMgYXJvdW5kIGEgdGFnCisgIGluZGljYXRpbmcgaXRzIG9yaWdpbmF0aW5nIG1zcGFjZSwgYW5kIGZyZWVzIGFyZSBkaXJlY3RlZCB0byB0aGVpcgorICBvcmlnaW5hdGluZyBzcGFjZXMuCisKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDb21waWxlLXRpbWUgb3B0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQmUgY2FyZWZ1bCBpbiBzZXR0aW5nICNkZWZpbmUgdmFsdWVzIGZvciBudW1lcmljYWwgY29uc3RhbnRzIG9mIHR5cGUKK3NpemVfdC4gT24gc29tZSBzeXN0ZW1zLCBsaXRlcmFsIHZhbHVlcyBhcmUgbm90IGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQKK3RvIHNpemVfdCBwcmVjaXNpb24gdW5sZXNzIHRoZXkgYXJlIGV4cGxpY2l0bHkgY2FzdGVkLiBZb3UgY2FuIGFsc28KK3VzZSB0aGUgc3ltYm9saWMgdmFsdWVzIE1BWF9TSVpFX1QsIFNJWkVfVF9PTkUsIGV0YyBiZWxvdy4KKworV0lOMzIgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGRlZmluZWQgaWYgX1dJTjMyIGRlZmluZWQKKyAgRGVmaW5pbmcgV0lOMzIgc2V0cyB1cCBkZWZhdWx0cyBmb3IgTVMgZW52aXJvbm1lbnQgYW5kIGNvbXBpbGVycy4KKyAgT3RoZXJ3aXNlIGRlZmF1bHRzIGFyZSBmb3IgdW5peC4gQmV3YXJlIHRoYXQgdGhlcmUgc2VlbSB0byBiZSBzb21lCisgIGNhc2VzIHdoZXJlIHRoaXMgbWFsbG9jIG1pZ2h0IG5vdCBiZSBhIHB1cmUgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IKKyAgV2luMzIgbWFsbG9jOiBSYW5kb20tbG9va2luZyBmYWlsdXJlcyBmcm9tIFdpbjMyIEdESSBBUEkncyAoZWc7CisgIFNldERJQml0cygpKSBtYXkgYmUgZHVlIHRvIGJ1Z3MgaW4gc29tZSB2aWRlbyBkcml2ZXIgaW1wbGVtZW50YXRpb25zCisgIHdoZW4gcGl4ZWwgYnVmZmVycyBhcmUgbWFsbG9jKCllZCwgYW5kIHRoZSByZWdpb24gc3BhbnMgbW9yZSB0aGFuCisgIG9uZSBWaXJ0dWFsQWxsb2MoKWVkIHJlZ2lvbi4gQmVjYXVzZSBkbG1hbGxvYyB1c2VzIGEgc21hbGwgKDY0S2IpCisgIGRlZmF1bHQgZ3JhbnVsYXJpdHksIHBpeGVsIGJ1ZmZlcnMgbWF5IHN0cmFkZGxlIHZpcnR1YWwgYWxsb2NhdGlvbgorICByZWdpb25zIG1vcmUgb2Z0ZW4gdGhhbiB3aGVuIHVzaW5nIHRoZSBNaWNyb3NvZnQgYWxsb2NhdG9yLiAgWW91IGNhbgorICBhdm9pZCB0aGlzIGJ5IHVzaW5nIFZpcnR1YWxBbGxvYygpIGFuZCBWaXJ0dWFsRnJlZSgpIGZvciBhbGwgcGl4ZWwKKyAgYnVmZmVycyByYXRoZXIgdGhhbiB1c2luZyBtYWxsb2MoKS4gIElmIHRoaXMgaXMgbm90IHBvc3NpYmxlLAorICByZWNvbXBpbGUgdGhpcyBtYWxsb2Mgd2l0aCBhIGxhcmdlciBERUZBVUxUX0dSQU5VTEFSSVRZLgorCitNQUxMT0NfQUxJR05NRU5UICAgICAgICAgZGVmYXVsdDogKHNpemVfdCk4CisgIENvbnRyb2xzIHRoZSBtaW5pbXVtIGFsaWdubWVudCBmb3IgbWFsbG9jJ2VkIGNodW5rcy4gIEl0IG11c3QgYmUgYQorICBwb3dlciBvZiB0d28gYW5kIGF0IGxlYXN0IDgsIGV2ZW4gb24gbWFjaGluZXMgZm9yIHdoaWNoIHNtYWxsZXIKKyAgYWxpZ25tZW50cyB3b3VsZCBzdWZmaWNlLiBJdCBtYXkgYmUgZGVmaW5lZCBhcyBsYXJnZXIgdGhhbiB0aGlzCisgIHRob3VnaC4gTm90ZSBob3dldmVyIHRoYXQgY29kZSBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBvcHRpbWl6ZWQgZm9yCisgIHRoZSBjYXNlIG9mIDgtYnl0ZSBhbGlnbm1lbnQuCisKK01TUEFDRVMgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAwIChmYWxzZSkKKyAgSWYgdHJ1ZSwgY29tcGlsZSBpbiBzdXBwb3J0IGZvciBpbmRlcGVuZGVudCBhbGxvY2F0aW9uIHNwYWNlcy4KKyAgVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBpZiBIQVZFX01NQVAgaXMgdHJ1ZS4KKworT05MWV9NU1BBQ0VTICAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGZhbHNlKQorICBJZiB0cnVlLCBvbmx5IGNvbXBpbGUgaW4gbXNwYWNlIHZlcnNpb25zLCBub3QgcmVndWxhciB2ZXJzaW9ucy4KKworVVNFX0xPQ0tTICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGZhbHNlKQorICBDYXVzZXMgZWFjaCBjYWxsIHRvIGVhY2ggcHVibGljIHJvdXRpbmUgdG8gYmUgc3Vycm91bmRlZCB3aXRoCisgIHB0aHJlYWQgb3IgV0lOMzIgbXV0ZXggbG9jay91bmxvY2suIChJZiBzZXQgdHJ1ZSwgdGhpcyBjYW4gYmUKKyAgb3ZlcnJpZGRlbiBvbiBhIHBlci1tc3BhY2UgYmFzaXMgZm9yIG1zcGFjZSB2ZXJzaW9ucy4pIElmIHNldCB0byBhCisgIG5vbi16ZXJvIHZhbHVlIG90aGVyIHRoYW4gMSwgbG9ja3MgYXJlIHVzZWQsIGJ1dCB0aGVpcgorICBpbXBsZW1lbnRhdGlvbiBpcyBsZWZ0IG91dCwgc28gbG9jayBmdW5jdGlvbnMgbXVzdCBiZSBzdXBwbGllZCBtYW51YWxseS4KKworVVNFX1NQSU5fTE9DS1MgICAgICAgICAgIGRlZmF1bHQ6IDEgaWZmIFVTRV9MT0NLUyBhbmQgb24geDg2IHVzaW5nIGdjYyBvciBNU0MKKyAgSWYgdHJ1ZSwgdXNlcyBjdXN0b20gc3BpbiBsb2NrcyBmb3IgbG9ja2luZy4gVGhpcyBpcyBjdXJyZW50bHkKKyAgc3VwcG9ydGVkIG9ubHkgZm9yIHg4NiBwbGF0Zm9ybXMgdXNpbmcgZ2NjIG9yIHJlY2VudCBNUyBjb21waWxlcnMuCisgIE90aGVyd2lzZSwgcG9zaXggbG9ja3Mgb3Igd2luMzIgY3JpdGljYWwgc2VjdGlvbnMgYXJlIHVzZWQuCisKK0ZPT1RFUlMgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAwCisgIElmIHRydWUsIHByb3ZpZGUgZXh0cmEgY2hlY2tpbmcgYW5kIGRpc3BhdGNoaW5nIGJ5IHBsYWNpbmcKKyAgaW5mb3JtYXRpb24gaW4gdGhlIGZvb3RlcnMgb2YgYWxsb2NhdGVkIGNodW5rcy4gVGhpcyBhZGRzCisgIHNwYWNlIGFuZCB0aW1lIG92ZXJoZWFkLgorCitJTlNFQ1VSRSAgICAgICAgICAgICAgICAgZGVmYXVsdDogMAorICBJZiB0cnVlLCBvbWl0IGNoZWNrcyBmb3IgdXNhZ2UgZXJyb3JzIGFuZCBoZWFwIHNwYWNlIG92ZXJ3cml0ZXMuCisKK1VTRV9ETF9QUkVGSVggICAgICAgICAgICBkZWZhdWx0OiBOT1QgZGVmaW5lZAorICBDYXVzZXMgY29tcGlsZXIgdG8gcHJlZml4IGFsbCBwdWJsaWMgcm91dGluZXMgd2l0aCB0aGUgc3RyaW5nICdkbCcuCisgIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIHlvdSBvbmx5IHdhbnQgdG8gdXNlIHRoaXMgbWFsbG9jIGluIG9uZSBwYXJ0CisgIG9mIGEgcHJvZ3JhbSwgdXNpbmcgeW91ciByZWd1bGFyIHN5c3RlbSBtYWxsb2MgZWxzZXdoZXJlLgorCitBQk9SVCAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogZGVmaW5lZCBhcyBhYm9ydCgpCisgIERlZmluZXMgaG93IHRvIGFib3J0IG9uIGZhaWxlZCBjaGVja3MuICBPbiBtb3N0IHN5c3RlbXMsIGEgZmFpbGVkCisgIGNoZWNrIGNhbm5vdCBkaWUgd2l0aCBhbiAiYXNzZXJ0IiBvciBldmVuIHByaW50IGFuIGluZm9ybWF0aXZlCisgIG1lc3NhZ2UsIGJlY2F1c2UgdGhlIHVuZGVybHlpbmcgcHJpbnQgcm91dGluZXMgaW4gdHVybiBjYWxsIG1hbGxvYywKKyAgd2hpY2ggd2lsbCBmYWlsIGFnYWluLiAgR2VuZXJhbGx5LCB0aGUgYmVzdCBwb2xpY3kgaXMgdG8gc2ltcGx5IGNhbGwKKyAgYWJvcnQoKS4gSXQncyBub3QgdmVyeSB1c2VmdWwgdG8gZG8gbW9yZSB0aGFuIHRoaXMgYmVjYXVzZSBtYW55CisgIGVycm9ycyBkdWUgdG8gb3ZlcndyaXRpbmcgd2lsbCBzaG93IHVwIGFzIGFkZHJlc3MgZmF1bHRzIChudWxsLCBvZGQKKyAgYWRkcmVzc2VzIGV0YykgcmF0aGVyIHRoYW4gbWFsbG9jLXRyaWdnZXJlZCBjaGVja3MsIHNvIHdpbGwgYWxzbworICBhYm9ydC4gIEFsc28sIG1vc3QgY29tcGlsZXJzIGtub3cgdGhhdCBhYm9ydCgpIGRvZXMgbm90IHJldHVybiwgc28KKyAgY2FuIGJldHRlciBvcHRpbWl6ZSBjb2RlIGNvbmRpdGlvbmFsbHkgY2FsbGluZyBpdC4KKworUFJPQ0VFRF9PTl9FUlJPUiAgICAgICAgICAgZGVmYXVsdDogZGVmaW5lZCBhcyAwIChmYWxzZSkKKyAgQ29udHJvbHMgd2hldGhlciBkZXRlY3RlZCBiYWQgYWRkcmVzc2VzIGNhdXNlIHRoZW0gdG8gYnlwYXNzZWQKKyAgcmF0aGVyIHRoYW4gYWJvcnRpbmcuIElmIHNldCwgZGV0ZWN0ZWQgYmFkIGFyZ3VtZW50cyB0byBmcmVlIGFuZAorICByZWFsbG9jIGFyZSBpZ25vcmVkLiBBbmQgYWxsIGJvb2trZWVwaW5nIGluZm9ybWF0aW9uIGlzIHplcm9lZCBvdXQKKyAgdXBvbiBhIGRldGVjdGVkIG92ZXJ3cml0ZSBvZiBmcmVlZCBoZWFwIHNwYWNlLCB0aHVzIGxvc2luZyB0aGUKKyAgYWJpbGl0eSB0byBldmVyIHJldHVybiBpdCBmcm9tIG1hbGxvYyBhZ2FpbiwgYnV0IGVuYWJsaW5nIHRoZQorICBhcHBsaWNhdGlvbiB0byBwcm9jZWVkLiBJZiBQUk9DRUVEX09OX0VSUk9SIGlzIGRlZmluZWQsIHRoZQorICBzdGF0aWMgdmFyaWFibGUgbWFsbG9jX2NvcnJ1cHRpb25fZXJyb3JfY291bnQgaXMgY29tcGlsZWQgaW4KKyAgYW5kIGNhbiBiZSBleGFtaW5lZCB0byBzZWUgaWYgZXJyb3JzIGhhdmUgb2NjdXJyZWQuIFRoaXMgb3B0aW9uCisgIGdlbmVyYXRlcyBzbG93ZXIgY29kZSB0aGFuIHRoZSBkZWZhdWx0IGFib3J0IHBvbGljeS4KKworREVCVUcgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IE5PVCBkZWZpbmVkCisgIFRoZSBERUJVRyBzZXR0aW5nIGlzIG1haW5seSBpbnRlbmRlZCBmb3IgcGVvcGxlIHRyeWluZyB0byBtb2RpZnkKKyAgdGhpcyBjb2RlIG9yIGRpYWdub3NlIHByb2JsZW1zIHdoZW4gcG9ydGluZyB0byBuZXcgcGxhdGZvcm1zLgorICBIb3dldmVyLCBpdCBtYXkgYWxzbyBiZSBhYmxlIHRvIGJldHRlciBpc29sYXRlIHVzZXIgZXJyb3JzIHRoYW4ganVzdAorICB1c2luZyBydW50aW1lIGNoZWNrcy4gIFRoZSBhc3NlcnRpb25zIGluIHRoZSBjaGVjayByb3V0aW5lcyBzcGVsbAorICBvdXQgaW4gbW9yZSBkZXRhaWwgdGhlIGFzc3VtcHRpb25zIGFuZCBpbnZhcmlhbnRzIHVuZGVybHlpbmcgdGhlCisgIGFsZ29yaXRobXMuICBUaGUgY2hlY2tpbmcgaXMgZmFpcmx5IGV4dGVuc2l2ZSwgYW5kIHdpbGwgc2xvdyBkb3duCisgIGV4ZWN1dGlvbiBub3RpY2VhYmx5LiBDYWxsaW5nIG1hbGxvY19zdGF0cyBvciBtYWxsaW5mbyB3aXRoIERFQlVHCisgIHNldCB3aWxsIGF0dGVtcHQgdG8gY2hlY2sgZXZlcnkgbm9uLW1tYXBwZWQgYWxsb2NhdGVkIGFuZCBmcmVlIGNodW5rCisgIGluIHRoZSBjb3Vyc2Ugb2YgY29tcHV0aW5nIHRoZSBzdW1tYXJpZXMuCisKK0FCT1JUX09OX0FTU0VSVF9GQUlMVVJFICAgZGVmYXVsdDogZGVmaW5lZCBhcyAxICh0cnVlKQorICBEZWJ1Z2dpbmcgYXNzZXJ0aW9uIGZhaWx1cmVzIGNhbiBiZSBuZWFybHkgaW1wb3NzaWJsZSBpZiB5b3VyCisgIHZlcnNpb24gb2YgdGhlIGFzc2VydCBtYWNybyBjYXVzZXMgbWFsbG9jIHRvIGJlIGNhbGxlZCwgd2hpY2ggd2lsbAorICBsZWFkIHRvIGEgY2FzY2FkZSBvZiBmdXJ0aGVyIGZhaWx1cmVzLCBibG93aW5nIHRoZSBydW50aW1lIHN0YWNrLgorICBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSBjYXVzZSBhc3NlcnRpb25zIGZhaWx1cmVzIHRvIGNhbGwgYWJvcnQoKSwKKyAgd2hpY2ggd2lsbCB1c3VhbGx5IG1ha2UgZGVidWdnaW5nIGVhc2llci4KKworTUFMTE9DX0ZBSUxVUkVfQUNUSU9OICAgICBkZWZhdWx0OiBzZXRzIGVycm5vIHRvIEVOT01FTSwgb3Igbm8tb3Agb24gd2luMzIKKyAgVGhlIGFjdGlvbiB0byB0YWtlIGJlZm9yZSAicmV0dXJuIDAiIHdoZW4gbWFsbG9jIGZhaWxzIHRvIGJlIGFibGUgdG8KKyAgcmV0dXJuIG1lbW9yeSBiZWNhdXNlIHRoZXJlIGlzIG5vbmUgYXZhaWxhYmxlLgorCitIQVZFX01PUkVDT1JFICAgICAgICAgICAgIGRlZmF1bHQ6IDEgKHRydWUpIHVubGVzcyB3aW4zMiBvciBPTkxZX01TUEFDRVMKKyAgVHJ1ZSBpZiB0aGlzIHN5c3RlbSBzdXBwb3J0cyBzYnJrIG9yIGFuIGVtdWxhdGlvbiBvZiBpdC4KKworTU9SRUNPUkUgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBzYnJrCisgIFRoZSBuYW1lIG9mIHRoZSBzYnJrLXN0eWxlIHN5c3RlbSByb3V0aW5lIHRvIGNhbGwgdG8gb2J0YWluIG1vcmUKKyAgbWVtb3J5LiAgU2VlIGJlbG93IGZvciBndWlkYW5jZSBvbiB3cml0aW5nIGN1c3RvbSBNT1JFQ09SRQorICBmdW5jdGlvbnMuIFRoZSB0eXBlIG9mIHRoZSBhcmd1bWVudCB0byBzYnJrL01PUkVDT1JFIHZhcmllcyBhY3Jvc3MKKyAgc3lzdGVtcy4gIEl0IGNhbm5vdCBiZSBzaXplX3QsIGJlY2F1c2UgaXQgc3VwcG9ydHMgbmVnYXRpdmUKKyAgYXJndW1lbnRzLCBzbyBpdCBpcyBub3JtYWxseSB0aGUgc2lnbmVkIHR5cGUgb2YgdGhlIHNhbWUgd2lkdGggYXMKKyAgc2l6ZV90IChzb21ldGltZXMgZGVjbGFyZWQgYXMgImludHB0cl90IikuICBJdCBkb2Vzbid0IG11Y2ggbWF0dGVyCisgIHRob3VnaC4gSW50ZXJuYWxseSwgd2Ugb25seSBjYWxsIGl0IHdpdGggYXJndW1lbnRzIGxlc3MgdGhhbiBoYWxmCisgIHRoZSBtYXggdmFsdWUgb2YgYSBzaXplX3QsIHdoaWNoIHNob3VsZCB3b3JrIGFjcm9zcyBhbGwgcmVhc29uYWJsZQorICBwb3NzaWJpbGl0aWVzLCBhbHRob3VnaCBzb21ldGltZXMgZ2VuZXJhdGluZyBjb21waWxlciB3YXJuaW5ncy4KKworTU9SRUNPUkVfQ09OVElHVU9VUyAgICAgICBkZWZhdWx0OiAxICh0cnVlKSBpZiBIQVZFX01PUkVDT1JFCisgIElmIHRydWUsIHRha2UgYWR2YW50YWdlIG9mIGZhY3QgdGhhdCBjb25zZWN1dGl2ZSBjYWxscyB0byBNT1JFQ09SRQorICB3aXRoIHBvc2l0aXZlIGFyZ3VtZW50cyBhbHdheXMgcmV0dXJuIGNvbnRpZ3VvdXMgaW5jcmVhc2luZworICBhZGRyZXNzZXMuICBUaGlzIGlzIHRydWUgb2YgdW5peCBzYnJrLiBJdCBkb2VzIG5vdCBodXJ0IHRvbyBtdWNoIHRvCisgIHNldCBpdCB0cnVlIGFueXdheSwgc2luY2UgbWFsbG9jIGNvcGVzIHdpdGggbm9uLWNvbnRpZ3VpdGllcy4KKyAgU2V0dGluZyBpdCBmYWxzZSB3aGVuIGRlZmluaXRlbHkgbm9uLWNvbnRpZ3VvdXMgc2F2ZXMgdGltZQorICBhbmQgcG9zc2libHkgd2FzdGVkIHNwYWNlIGl0IHdvdWxkIHRha2UgdG8gZGlzY292ZXIgdGhpcyB0aG91Z2guCisKK01PUkVDT1JFX0NBTk5PVF9UUklNICAgICAgZGVmYXVsdDogTk9UIGRlZmluZWQKKyAgVHJ1ZSBpZiBNT1JFQ09SRSBjYW5ub3QgcmVsZWFzZSBzcGFjZSBiYWNrIHRvIHRoZSBzeXN0ZW0gd2hlbiBnaXZlbgorICBuZWdhdGl2ZSBhcmd1bWVudHMuIFRoaXMgaXMgZ2VuZXJhbGx5IG5lY2Vzc2FyeSBvbmx5IGlmIHlvdSBhcmUKKyAgdXNpbmcgYSBoYW5kLWNyYWZ0ZWQgTU9SRUNPUkUgZnVuY3Rpb24gdGhhdCBjYW5ub3QgaGFuZGxlIG5lZ2F0aXZlCisgIGFyZ3VtZW50cy4KKworTk9fU0VHTUVOVF9UUkFWRVJTQUwgICAgICAgZGVmYXVsdDogMAorICBJZiBub24temVybywgc3VwcHJlc3NlcyB0cmF2ZXJzYWxzIG9mIG1lbW9yeSBzZWdtZW50cworICByZXR1cm5lZCBieSBlaXRoZXIgTU9SRUNPUkUgb3IgQ0FMTF9NTUFQLiBUaGlzIGRpc2FibGVzCisgIG1lcmdpbmcgb2Ygc2VnbWVudHMgdGhhdCBhcmUgY29udGlndW91cywgYW5kIHNlbGVjdGl2ZWx5CisgIHJlbGVhc2luZyB0aGVtIHRvIHRoZSBPUyBpZiB1bnVzZWQsIGJ1dCBib3VuZHMgZXhlY3V0aW9uIHRpbWVzLgorCitIQVZFX01NQVAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDEgKHRydWUpCisgIFRydWUgaWYgdGhpcyBzeXN0ZW0gc3VwcG9ydHMgbW1hcCBvciBhbiBlbXVsYXRpb24gb2YgaXQuICBJZiBzbywgYW5kCisgIEhBVkVfTU9SRUNPUkUgaXMgbm90IHRydWUsIE1NQVAgaXMgdXNlZCBmb3IgYWxsIHN5c3RlbQorICBhbGxvY2F0aW9uLiBJZiBzZXQgYW5kIEhBVkVfTU9SRUNPUkUgaXMgdHJ1ZSBhcyB3ZWxsLCBNTUFQIGlzCisgIHByaW1hcmlseSB1c2VkIHRvIGRpcmVjdGx5IGFsbG9jYXRlIHZlcnkgbGFyZ2UgYmxvY2tzLiBJdCBpcyBhbHNvCisgIHVzZWQgYXMgYSBiYWNrdXAgc3RyYXRlZ3kgaW4gY2FzZXMgd2hlcmUgTU9SRUNPUkUgZmFpbHMgdG8gcHJvdmlkZQorICBzcGFjZSBmcm9tIHN5c3RlbS4gTm90ZTogQSBzaW5nbGUgY2FsbCB0byBNVU5NQVAgaXMgYXNzdW1lZCB0byBiZQorICBhYmxlIHRvIHVubWFwIG1lbW9yeSB0aGF0IG1heSBoYXZlIGJlIGFsbG9jYXRlZCB1c2luZyBtdWx0aXBsZSBjYWxscworICB0byBNTUFQLCBzbyBsb25nIGFzIHRoZXkgYXJlIGFkamFjZW50LgorCitIQVZFX01SRU1BUCAgICAgICAgICAgICAgIGRlZmF1bHQ6IDEgb24gbGludXgsIGVsc2UgMAorICBJZiB0cnVlIHJlYWxsb2MoKSB1c2VzIG1yZW1hcCgpIHRvIHJlLWFsbG9jYXRlIGxhcmdlIGJsb2NrcyBhbmQKKyAgZXh0ZW5kIG9yIHNocmluayBhbGxvY2F0aW9uIHNwYWNlcy4KKworTU1BUF9DTEVBUlMgICAgICAgICAgICAgICBkZWZhdWx0OiAxIGV4Y2VwdCBvbiBXSU5DRS4KKyAgVHJ1ZSBpZiBtbWFwIGNsZWFycyBtZW1vcnkgc28gY2FsbG9jIGRvZXNuJ3QgbmVlZCB0by4gVGhpcyBpcyB0cnVlCisgIGZvciBzdGFuZGFyZCB1bml4IG1tYXAgdXNpbmcgL2Rldi96ZXJvIGFuZCBvbiBXSU4zMiBleGNlcHQgZm9yIFdJTkNFLgorCitVU0VfQlVJTFRJTl9GRlMgICAgICAgICAgICBkZWZhdWx0OiAwIChpLmUuLCBub3QgdXNlZCkKKyAgQ2F1c2VzIG1hbGxvYyB0byB1c2UgdGhlIGJ1aWx0aW4gZmZzKCkgZnVuY3Rpb24gdG8gY29tcHV0ZSBpbmRpY2VzLgorICBTb21lIGNvbXBpbGVycyBtYXkgcmVjb2duaXplIGFuZCBpbnRyaW5zaWZ5IGZmcyB0byBiZSBmYXN0ZXIgdGhhbiB0aGUKKyAgc3VwcGxpZWQgQyB2ZXJzaW9uLiBBbHNvLCB0aGUgY2FzZSBvZiB4ODYgdXNpbmcgZ2NjIGlzIHNwZWNpYWwtY2FzZWQKKyAgdG8gYW4gYXNtIGluc3RydWN0aW9uLCBzbyBpcyBhbHJlYWR5IGFzIGZhc3QgYXMgaXQgY2FuIGJlLCBhbmQgc28KKyAgdGhpcyBzZXR0aW5nIGhhcyBubyBlZmZlY3QuIFNpbWlsYXJseSBmb3IgV2luMzIgdW5kZXIgcmVjZW50IE1TIGNvbXBpbGVycy4KKyAgKE9uIG1vc3QgeDg2cywgdGhlIGFzbSB2ZXJzaW9uIGlzIG9ubHkgc2xpZ2h0bHkgZmFzdGVyIHRoYW4gdGhlIEMgdmVyc2lvbi4pCisKK21hbGxvY19nZXRwYWdlc2l6ZSAgICAgICAgIGRlZmF1bHQ6IGRlcml2ZSBmcm9tIHN5c3RlbSBpbmNsdWRlcywgb3IgNDA5Ni4KKyAgVGhlIHN5c3RlbSBwYWdlIHNpemUuIFRvIHRoZSBleHRlbnQgcG9zc2libGUsIHRoaXMgbWFsbG9jIG1hbmFnZXMKKyAgbWVtb3J5IGZyb20gdGhlIHN5c3RlbSBpbiBwYWdlLXNpemUgdW5pdHMuICBUaGlzIG1heSBiZSAoYW5kCisgIHVzdWFsbHkgaXMpIGEgZnVuY3Rpb24gcmF0aGVyIHRoYW4gYSBjb25zdGFudC4gVGhpcyBpcyBpZ25vcmVkCisgIGlmIFdJTjMyLCB3aGVyZSBwYWdlIHNpemUgaXMgZGV0ZXJtaW5lZCB1c2luZyBnZXRTeXN0ZW1JbmZvIGR1cmluZworICBpbml0aWFsaXphdGlvbi4KKworVVNFX0RFVl9SQU5ET00gICAgICAgICAgICAgZGVmYXVsdDogMCAoaS5lLiwgbm90IHVzZWQpCisgIENhdXNlcyBtYWxsb2MgdG8gdXNlIC9kZXYvcmFuZG9tIHRvIGluaXRpYWxpemUgc2VjdXJlIG1hZ2ljIHNlZWQgZm9yCisgIHN0YW1waW5nIGZvb3RlcnMuIE90aGVyd2lzZSwgdGhlIGN1cnJlbnQgdGltZSBpcyB1c2VkLgorCitOT19NQUxMSU5GTyAgICAgICAgICAgICAgICBkZWZhdWx0OiAwCisgIElmIGRlZmluZWQsIGRvbid0IGNvbXBpbGUgIm1hbGxpbmZvIi4gVGhpcyBjYW4gYmUgYSBzaW1wbGUgd2F5CisgIG9mIGRlYWxpbmcgd2l0aCBtaXNtYXRjaGVzIGJldHdlZW4gc3lzdGVtIGRlY2xhcmF0aW9ucyBhbmQKKyAgdGhvc2UgaW4gdGhpcyBmaWxlLgorCitNQUxMSU5GT19GSUVMRF9UWVBFICAgICAgICBkZWZhdWx0OiBzaXplX3QKKyAgVGhlIHR5cGUgb2YgdGhlIGZpZWxkcyBpbiB0aGUgbWFsbGluZm8gc3RydWN0LiBUaGlzIHdhcyBvcmlnaW5hbGx5CisgIGRlZmluZWQgYXMgImludCIgaW4gU1ZJRCBldGMsIGJ1dCBpcyBtb3JlIHVzZWZ1bGx5IGRlZmluZWQgYXMKKyAgc2l6ZV90LiBUaGUgdmFsdWUgaXMgdXNlZCBvbmx5IGlmICBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IIGlzIG5vdCBzZXQKKworUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTICAgIGRlZmF1bHQ6IG5vdCBkZWZpbmVkCisgIFRoaXMgc2hvdWxkIGJlIHNldCBpZiBhIGNhbGwgdG8gcmVhbGxvYyB3aXRoIHplcm8gYnl0ZXMgc2hvdWxkCisgIGJlIHRoZSBzYW1lIGFzIGEgY2FsbCB0byBmcmVlLiBTb21lIHBlb3BsZSB0aGluayBpdCBzaG91bGQuIE90aGVyd2lzZSwKKyAgc2luY2UgdGhpcyBtYWxsb2MgcmV0dXJucyBhIHVuaXF1ZSBwb2ludGVyIGZvciBtYWxsb2MoMCksIHNvIGRvZXMKKyAgcmVhbGxvYyhwLCAwKS4KKworTEFDS1NfVU5JU1REX0gsIExBQ0tTX0ZDTlRMX0gsIExBQ0tTX1NZU19QQVJBTV9ILCBMQUNLU19TWVNfTU1BTl9ICitMQUNLU19TVFJJTkdTX0gsIExBQ0tTX1NUUklOR19ILCBMQUNLU19TWVNfVFlQRVNfSCwgIExBQ0tTX0VSUk5PX0gKK0xBQ0tTX1NURExJQl9IICAgICAgICAgICAgICAgIGRlZmF1bHQ6IE5PVCBkZWZpbmVkIHVubGVzcyBvbiBXSU4zMgorICBEZWZpbmUgdGhlc2UgaWYgeW91ciBzeXN0ZW0gZG9lcyBub3QgaGF2ZSB0aGVzZSBoZWFkZXIgZmlsZXMuCisgIFlvdSBtaWdodCBuZWVkIHRvIG1hbnVhbGx5IGluc2VydCBzb21lIG9mIHRoZSBkZWNsYXJhdGlvbnMgdGhleSBwcm92aWRlLgorCitERUZBVUxUX0dSQU5VTEFSSVRZICAgICAgICBkZWZhdWx0OiBwYWdlIHNpemUgaWYgTU9SRUNPUkVfQ09OVElHVU9VUywKKwkJCQlzeXN0ZW1faW5mby5kd0FsbG9jYXRpb25HcmFudWxhcml0eSBpbiBXSU4zMiwKKwkJCQlvdGhlcndpc2UgNjRLLgorICAgICAgQWxzbyBzZXR0YWJsZSB1c2luZyBtYWxsb3B0KE1fR1JBTlVMQVJJVFksIHgpCisgIFRoZSB1bml0IGZvciBhbGxvY2F0aW5nIGFuZCBkZWFsbG9jYXRpbmcgbWVtb3J5IGZyb20gdGhlIHN5c3RlbS4gIE9uCisgIG1vc3Qgc3lzdGVtcyB3aXRoIGNvbnRpZ3VvdXMgTU9SRUNPUkUsIHRoZXJlIGlzIG5vIHJlYXNvbiB0bworICBtYWtlIHRoaXMgbW9yZSB0aGFuIGEgcGFnZS4gSG93ZXZlciwgc3lzdGVtcyB3aXRoIE1NQVAgdGVuZCB0bworICBlaXRoZXIgcmVxdWlyZSBvciBlbmNvdXJhZ2UgbGFyZ2VyIGdyYW51bGFyaXRpZXMuICBZb3UgY2FuIGluY3JlYXNlCisgIHRoaXMgdmFsdWUgdG8gcHJldmVudCBzeXN0ZW0gYWxsb2NhdGlvbiBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIHNvCisgIG9mdGVuLCBlc3BlY2lhbGx5IGlmIHRoZXkgYXJlIHNsb3cuICBUaGUgdmFsdWUgbXVzdCBiZSBhdCBsZWFzdCBvbmUKKyAgcGFnZSBhbmQgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4gIFNldHRpbmcgdG8gMCBjYXVzZXMgaW5pdGlhbGl6YXRpb24KKyAgdG8gZWl0aGVyIHBhZ2Ugc2l6ZSBvciB3aW4zMiByZWdpb24gc2l6ZS4gIChOb3RlOiBJbiBwcmV2aW91cworICB2ZXJzaW9ucyBvZiBtYWxsb2MsIHRoZSBlcXVpdmFsZW50IG9mIHRoaXMgb3B0aW9uIHdhcyBjYWxsZWQKKyAgIlRPUF9QQUQiKQorCitERUZBVUxUX1RSSU1fVEhSRVNIT0xEICAgIGRlZmF1bHQ6IDJNQgorICAgICAgQWxzbyBzZXR0YWJsZSB1c2luZyBtYWxsb3B0KE1fVFJJTV9USFJFU0hPTEQsIHgpCisgIFRoZSBtYXhpbXVtIGFtb3VudCBvZiB1bnVzZWQgdG9wLW1vc3QgbWVtb3J5IHRvIGtlZXAgYmVmb3JlCisgIHJlbGVhc2luZyB2aWEgbWFsbG9jX3RyaW0gaW4gZnJlZSgpLiAgQXV0b21hdGljIHRyaW1taW5nIGlzIG1haW5seQorICB1c2VmdWwgaW4gbG9uZy1saXZlZCBwcm9ncmFtcyB1c2luZyBjb250aWd1b3VzIE1PUkVDT1JFLiAgQmVjYXVzZQorICB0cmltbWluZyB2aWEgc2JyayBjYW4gYmUgc2xvdyBvbiBzb21lIHN5c3RlbXMsIGFuZCBjYW4gc29tZXRpbWVzIGJlCisgIHdhc3RlZnVsIChpbiBjYXNlcyB3aGVyZSBwcm9ncmFtcyBpbW1lZGlhdGVseSBhZnRlcndhcmQgYWxsb2NhdGUKKyAgbW9yZSBsYXJnZSBjaHVua3MpIHRoZSB2YWx1ZSBzaG91bGQgYmUgaGlnaCBlbm91Z2ggc28gdGhhdCB5b3VyCisgIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlIHdvdWxkIGltcHJvdmUgYnkgcmVsZWFzaW5nIHRoaXMgbXVjaAorICBtZW1vcnkuICBBcyBhIHJvdWdoIGd1aWRlLCB5b3UgbWlnaHQgc2V0IHRvIGEgdmFsdWUgY2xvc2UgdG8gdGhlCisgIGF2ZXJhZ2Ugc2l6ZSBvZiBhIHByb2Nlc3MgKHByb2dyYW0pIHJ1bm5pbmcgb24geW91ciBzeXN0ZW0uCisgIFJlbGVhc2luZyB0aGlzIG11Y2ggbWVtb3J5IHdvdWxkIGFsbG93IHN1Y2ggYSBwcm9jZXNzIHRvIHJ1biBpbgorICBtZW1vcnkuICBHZW5lcmFsbHksIGl0IGlzIHdvcnRoIHR1bmluZyB0cmltIHRocmVzaG9sZHMgd2hlbiBhCisgIHByb2dyYW0gdW5kZXJnb2VzIHBoYXNlcyB3aGVyZSBzZXZlcmFsIGxhcmdlIGNodW5rcyBhcmUgYWxsb2NhdGVkCisgIGFuZCByZWxlYXNlZCBpbiB3YXlzIHRoYXQgY2FuIHJldXNlIGVhY2ggb3RoZXIncyBzdG9yYWdlLCBwZXJoYXBzCisgIG1peGVkIHdpdGggcGhhc2VzIHdoZXJlIHRoZXJlIGFyZSBubyBzdWNoIGNodW5rcyBhdCBhbGwuIFRoZSB0cmltCisgIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIHBhZ2Ugc2l6ZSB0byBoYXZlIGFueSB1c2VmdWwgZWZmZWN0LiAgVG8KKyAgZGlzYWJsZSB0cmltbWluZyBjb21wbGV0ZWx5LCB5b3UgY2FuIHNldCB0byBNQVhfU0laRV9ULiBOb3RlIHRoYXQgdGhlIHRyaWNrCisgIHNvbWUgcGVvcGxlIHVzZSBvZiBtYWxsb2NpbmcgYSBodWdlIHNwYWNlIGFuZCB0aGVuIGZyZWVpbmcgaXQgYXQKKyAgcHJvZ3JhbSBzdGFydHVwLCBpbiBhbiBhdHRlbXB0IHRvIHJlc2VydmUgc3lzdGVtIG1lbW9yeSwgZG9lc24ndAorICBoYXZlIHRoZSBpbnRlbmRlZCBlZmZlY3QgdW5kZXIgYXV0b21hdGljIHRyaW1taW5nLCBzaW5jZSB0aGF0IG1lbW9yeQorICB3aWxsIGltbWVkaWF0ZWx5IGJlIHJldHVybmVkIHRvIHRoZSBzeXN0ZW0uCisKK0RFRkFVTFRfTU1BUF9USFJFU0hPTEQgICAgICAgZGVmYXVsdDogMjU2SworICAgICAgQWxzbyBzZXR0YWJsZSB1c2luZyBtYWxsb3B0KE1fTU1BUF9USFJFU0hPTEQsIHgpCisgIFRoZSByZXF1ZXN0IHNpemUgdGhyZXNob2xkIGZvciB1c2luZyBNTUFQIHRvIGRpcmVjdGx5IHNlcnZpY2UgYQorICByZXF1ZXN0LiBSZXF1ZXN0cyBvZiBhdCBsZWFzdCB0aGlzIHNpemUgdGhhdCBjYW5ub3QgYmUgYWxsb2NhdGVkCisgIHVzaW5nIGFscmVhZHktZXhpc3Rpbmcgc3BhY2Ugd2lsbCBiZSBzZXJ2aWNlZCB2aWEgbW1hcC4gIChJZiBlbm91Z2gKKyAgbm9ybWFsIGZyZWVkIHNwYWNlIGFscmVhZHkgZXhpc3RzIGl0IGlzIHVzZWQgaW5zdGVhZC4pICBVc2luZyBtbWFwCisgIHNlZ3JlZ2F0ZXMgcmVsYXRpdmVseSBsYXJnZSBjaHVua3Mgb2YgbWVtb3J5IHNvIHRoYXQgdGhleSBjYW4gYmUKKyAgaW5kaXZpZHVhbGx5IG9idGFpbmVkIGFuZCByZWxlYXNlZCBmcm9tIHRoZSBob3N0IHN5c3RlbS4gQSByZXF1ZXN0CisgIHNlcnZpY2VkIHRocm91Z2ggbW1hcCBpcyBuZXZlciByZXVzZWQgYnkgYW55IG90aGVyIHJlcXVlc3QgKGF0IGxlYXN0CisgIG5vdCBkaXJlY3RseTsgdGhlIHN5c3RlbSBtYXkganVzdCBzbyBoYXBwZW4gdG8gcmVtYXAgc3VjY2Vzc2l2ZQorICByZXF1ZXN0cyB0byB0aGUgc2FtZSBsb2NhdGlvbnMpLiAgU2VncmVnYXRpbmcgc3BhY2UgaW4gdGhpcyB3YXkgaGFzCisgIHRoZSBiZW5lZml0cyB0aGF0OiBNbWFwcGVkIHNwYWNlIGNhbiBhbHdheXMgYmUgaW5kaXZpZHVhbGx5IHJlbGVhc2VkCisgIGJhY2sgdG8gdGhlIHN5c3RlbSwgd2hpY2ggaGVscHMga2VlcCB0aGUgc3lzdGVtIGxldmVsIG1lbW9yeSBkZW1hbmRzCisgIG9mIGEgbG9uZy1saXZlZCBwcm9ncmFtIGxvdy4gIEFsc28sIG1hcHBlZCBtZW1vcnkgZG9lc24ndCBiZWNvbWUKKyAgYGxvY2tlZCcgYmV0d2VlbiBvdGhlciBjaHVua3MsIGFzIGNhbiBoYXBwZW4gd2l0aCBub3JtYWxseSBhbGxvY2F0ZWQKKyAgY2h1bmtzLCB3aGljaCBtZWFucyB0aGF0IGV2ZW4gdHJpbW1pbmcgdmlhIG1hbGxvY190cmltIHdvdWxkIG5vdAorICByZWxlYXNlIHRoZW0uICBIb3dldmVyLCBpdCBoYXMgdGhlIGRpc2FkdmFudGFnZSB0aGF0IHRoZSBzcGFjZQorICBjYW5ub3QgYmUgcmVjbGFpbWVkLCBjb25zb2xpZGF0ZWQsIGFuZCB0aGVuIHVzZWQgdG8gc2VydmljZSBsYXRlcgorICByZXF1ZXN0cywgYXMgaGFwcGVucyB3aXRoIG5vcm1hbCBjaHVua3MuICBUaGUgYWR2YW50YWdlcyBvZiBtbWFwCisgIG5lYXJseSBhbHdheXMgb3V0d2VpZ2ggZGlzYWR2YW50YWdlcyBmb3IgImxhcmdlIiBjaHVua3MsIGJ1dCB0aGUKKyAgdmFsdWUgb2YgImxhcmdlIiBtYXkgdmFyeSBhY3Jvc3Mgc3lzdGVtcy4gIFRoZSBkZWZhdWx0IGlzIGFuCisgIGVtcGlyaWNhbGx5IGRlcml2ZWQgdmFsdWUgdGhhdCB3b3JrcyB3ZWxsIGluIG1vc3Qgc3lzdGVtcy4gWW91IGNhbgorICBkaXNhYmxlIG1tYXAgYnkgc2V0dGluZyB0byBNQVhfU0laRV9ULgorCitNQVhfUkVMRUFTRV9DSEVDS19SQVRFICAgZGVmYXVsdDogNDA5NSB1bmxlc3Mgbm90IEhBVkVfTU1BUAorICBUaGUgbnVtYmVyIG9mIGNvbnNvbGlkYXRlZCBmcmVlcyBiZXR3ZWVuIGNoZWNrcyB0byByZWxlYXNlCisgIHVudXNlZCBzZWdtZW50cyB3aGVuIGZyZWVpbmcuIFdoZW4gdXNpbmcgbm9uLWNvbnRpZ3VvdXMgc2VnbWVudHMsCisgIGVzcGVjaWFsbHkgd2l0aCBtdWx0aXBsZSBtc3BhY2VzLCBjaGVja2luZyBvbmx5IGZvciB0b3Btb3N0IHNwYWNlCisgIGRvZXNuJ3QgYWx3YXlzIHN1ZmZpY2UgdG8gdHJpZ2dlciB0cmltbWluZy4gVG8gY29tcGVuc2F0ZSBmb3IgdGhpcywKKyAgZnJlZSgpIHdpbGwsIHdpdGggYSBwZXJpb2Qgb2YgTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURSAob3IgdGhlCisgIGN1cnJlbnQgbnVtYmVyIG9mIHNlZ21lbnRzLCBpZiBncmVhdGVyKSB0cnkgdG8gcmVsZWFzZSB1bnVzZWQKKyAgc2VnbWVudHMgdG8gdGhlIE9TIHdoZW4gZnJlZWluZyBjaHVua3MgdGhhdCByZXN1bHQgaW4KKyAgY29uc29saWRhdGlvbi4gVGhlIGJlc3QgdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyIGlzIGEgY29tcHJvbWlzZQorICBiZXR3ZWVuIHNsb3dpbmcgZG93biBmcmVlcyB3aXRoIHJlbGF0aXZlbHkgY29zdGx5IGNoZWNrcyB0aGF0CisgIHJhcmVseSB0cmlnZ2VyIHZlcnN1cyBob2xkaW5nIG9uIHRvIHVudXNlZCBtZW1vcnkuIFRvIGVmZmVjdGl2ZWx5CisgIGRpc2FibGUsIHNldCB0byBNQVhfU0laRV9ULiBUaGlzIG1heSBsZWFkIHRvIGEgdmVyeSBzbGlnaHQgc3BlZWQKKyAgaW1wcm92ZW1lbnQgYXQgdGhlIGV4cGVuc2Ugb2YgY2FycnlpbmcgYXJvdW5kIG1vcmUgbWVtb3J5LgorKi8KKworLyogVmVyc2lvbiBpZGVudGlmaWVyIHRvIGFsbG93IHBlb3BsZSB0byBzdXBwb3J0IG11bHRpcGxlIHZlcnNpb25zICovCisjaWZuZGVmIERMTUFMTE9DX1ZFUlNJT04KKyNkZWZpbmUgRExNQUxMT0NfVkVSU0lPTiAyMDgwNAorI2VuZGlmIC8qIERMTUFMTE9DX1ZFUlNJT04gKi8KKworI2lmbmRlZiBXSU4zMgorI2lmZGVmIF9XSU4zMgorI2RlZmluZSBXSU4zMiAxCisjZW5kaWYgIC8qIF9XSU4zMiAqLworI2lmZGVmIF9XSU4zMl9XQ0UKKyNkZWZpbmUgTEFDS1NfRkNOVExfSAorI2RlZmluZSBXSU4zMiAxCisjZW5kaWYgLyogX1dJTjMyX1dDRSAqLworI2VuZGlmICAvKiBXSU4zMiAqLworI2lmZGVmIFdJTjMyCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgX1dJTjMyX1dJTk5UIDB4NDAzCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2RlZmluZSBIQVZFX01NQVAgMQorI2RlZmluZSBIQVZFX01PUkVDT1JFIDAKKyNkZWZpbmUgTEFDS1NfVU5JU1REX0gKKyNkZWZpbmUgTEFDS1NfU1lTX1BBUkFNX0gKKyNkZWZpbmUgTEFDS1NfU1lTX01NQU5fSAorI2RlZmluZSBMQUNLU19TVFJJTkdfSAorI2RlZmluZSBMQUNLU19TVFJJTkdTX0gKKyNkZWZpbmUgTEFDS1NfU1lTX1RZUEVTX0gKKyNkZWZpbmUgTEFDS1NfRVJSTk9fSAorI2lmbmRlZiBNQUxMT0NfRkFJTFVSRV9BQ1RJT04KKyNkZWZpbmUgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OCisjZW5kaWYgLyogTUFMTE9DX0ZBSUxVUkVfQUNUSU9OICovCisjaWZkZWYgX1dJTjMyX1dDRSAvKiBXSU5DRSByZXBvcnRlZGx5IGRvZXMgbm90IGNsZWFyICovCisjZGVmaW5lIE1NQVBfQ0xFQVJTIDAKKyNlbHNlCisjZGVmaW5lIE1NQVBfQ0xFQVJTIDEKKyNlbmRpZiAvKiBfV0lOMzJfV0NFICovCisjZW5kaWYgIC8qIFdJTjMyICovCisKKyNpZiBkZWZpbmVkKERBUldJTikgfHwgZGVmaW5lZChfREFSV0lOKQorLyogTWFjIE9TWCBkb2NzIGFkdmlzZSBub3QgdG8gdXNlIHNicms7IGl0IHNlZW1zIGJldHRlciB0byB1c2UgbW1hcCAqLworI2lmbmRlZiBIQVZFX01PUkVDT1JFCisjZGVmaW5lIEhBVkVfTU9SRUNPUkUgMAorI2RlZmluZSBIQVZFX01NQVAgMQorLyogT1NYIGFsbG9jYXRvcnMgcHJvdmlkZSAxNiBieXRlIGFsaWdubWVudCAqLworI2lmbmRlZiBNQUxMT0NfQUxJR05NRU5UCisjZGVmaW5lIE1BTExPQ19BTElHTk1FTlQgKChzaXplX3QpMTZVKQorI2VuZGlmCisjZW5kaWYgIC8qIEhBVkVfTU9SRUNPUkUgKi8KKyNlbmRpZiAgLyogREFSV0lOICovCisKKyNpZm5kZWYgTEFDS1NfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4gIC8qIEZvciBzaXplX3QgKi8KKyNlbmRpZiAgLyogTEFDS1NfU1lTX1RZUEVTX0ggKi8KKworLyogVGhlIG1heGltdW0gcG9zc2libGUgc2l6ZV90IHZhbHVlIGhhcyBhbGwgYml0cyBzZXQgKi8KKyNkZWZpbmUgTUFYX1NJWkVfVCAgICAgICAgICAgKH4oc2l6ZV90KTApCisKKyNpZm5kZWYgT05MWV9NU1BBQ0VTCisjZGVmaW5lIE9OTFlfTVNQQUNFUyAwICAgICAvKiBkZWZpbmUgdG8gYSB2YWx1ZSAqLworI2Vsc2UKKyNkZWZpbmUgT05MWV9NU1BBQ0VTIDEKKyNlbmRpZiAgLyogT05MWV9NU1BBQ0VTICovCisjaWZuZGVmIE1TUEFDRVMKKyNpZiBPTkxZX01TUEFDRVMKKyNkZWZpbmUgTVNQQUNFUyAxCisjZWxzZSAgIC8qIE9OTFlfTVNQQUNFUyAqLworI2RlZmluZSBNU1BBQ0VTIDAKKyNlbmRpZiAgLyogT05MWV9NU1BBQ0VTICovCisjZW5kaWYgIC8qIE1TUEFDRVMgKi8KKyNpZm5kZWYgTUFMTE9DX0FMSUdOTUVOVAorI2RlZmluZSBNQUxMT0NfQUxJR05NRU5UICgoc2l6ZV90KThVKQorI2VuZGlmICAvKiBNQUxMT0NfQUxJR05NRU5UICovCisjaWZuZGVmIEZPT1RFUlMKKyNkZWZpbmUgRk9PVEVSUyAwCisjZW5kaWYgIC8qIEZPT1RFUlMgKi8KKyNpZm5kZWYgQUJPUlQKKyNkZWZpbmUgQUJPUlQgIGFib3J0KCkKKyNlbmRpZiAgLyogQUJPUlQgKi8KKyNpZm5kZWYgQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUKKyNkZWZpbmUgQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgMQorI2VuZGlmICAvKiBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAqLworI2lmbmRlZiBQUk9DRUVEX09OX0VSUk9SCisjZGVmaW5lIFBST0NFRURfT05fRVJST1IgMAorI2VuZGlmICAvKiBQUk9DRUVEX09OX0VSUk9SICovCisjaWZuZGVmIFVTRV9MT0NLUworI2RlZmluZSBVU0VfTE9DS1MgMAorI2VuZGlmICAvKiBVU0VfTE9DS1MgKi8KKyNpZm5kZWYgVVNFX1NQSU5fTE9DS1MKKyNpZiBVU0VfTE9DS1MgJiYgKGRlZmluZWQoX19HTlVDX18pICYmICgoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSkpKSB8fCAoZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVI+PTEzMTApCisjZGVmaW5lIFVTRV9TUElOX0xPQ0tTIDEKKyNlbHNlCisjZGVmaW5lIFVTRV9TUElOX0xPQ0tTIDAKKyNlbmRpZiAvKiBVU0VfTE9DS1MgJiYgLi4uICovCisjZW5kaWYgLyogVVNFX1NQSU5fTE9DS1MgKi8KKyNpZm5kZWYgSU5TRUNVUkUKKyNkZWZpbmUgSU5TRUNVUkUgMAorI2VuZGlmICAvKiBJTlNFQ1VSRSAqLworI2lmbmRlZiBIQVZFX01NQVAKKyNkZWZpbmUgSEFWRV9NTUFQIDEKKyNlbmRpZiAgLyogSEFWRV9NTUFQICovCisjaWZuZGVmIE1NQVBfQ0xFQVJTCisjZGVmaW5lIE1NQVBfQ0xFQVJTIDEKKyNlbmRpZiAgLyogTU1BUF9DTEVBUlMgKi8KKyNpZm5kZWYgSEFWRV9NUkVNQVAKKyNpZmRlZiBsaW51eAorI2RlZmluZSBIQVZFX01SRU1BUCAxCisjZWxzZSAgIC8qIGxpbnV4ICovCisjZGVmaW5lIEhBVkVfTVJFTUFQIDAKKyNlbmRpZiAgLyogbGludXggKi8KKyNlbmRpZiAgLyogSEFWRV9NUkVNQVAgKi8KKyNpZm5kZWYgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OCisjZGVmaW5lIE1BTExPQ19GQUlMVVJFX0FDVElPTiAgZXJybm8gPSBFTk9NRU07CisjZW5kaWYgIC8qIE1BTExPQ19GQUlMVVJFX0FDVElPTiAqLworI2lmbmRlZiBIQVZFX01PUkVDT1JFCisjaWYgT05MWV9NU1BBQ0VTCisjZGVmaW5lIEhBVkVfTU9SRUNPUkUgMAorI2Vsc2UgICAvKiBPTkxZX01TUEFDRVMgKi8KKyNkZWZpbmUgSEFWRV9NT1JFQ09SRSAxCisjZW5kaWYgIC8qIE9OTFlfTVNQQUNFUyAqLworI2VuZGlmICAvKiBIQVZFX01PUkVDT1JFICovCisjaWYgIUhBVkVfTU9SRUNPUkUKKyNkZWZpbmUgTU9SRUNPUkVfQ09OVElHVU9VUyAwCisjZWxzZSAgIC8qICFIQVZFX01PUkVDT1JFICovCisjZGVmaW5lIE1PUkVDT1JFX0RFRkFVTFQgc2JyaworI2lmbmRlZiBNT1JFQ09SRV9DT05USUdVT1VTCisjZGVmaW5lIE1PUkVDT1JFX0NPTlRJR1VPVVMgMQorI2VuZGlmICAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovCisjZW5kaWYgIC8qIEhBVkVfTU9SRUNPUkUgKi8KKyNpZm5kZWYgREVGQVVMVF9HUkFOVUxBUklUWQorI2lmIChNT1JFQ09SRV9DT05USUdVT1VTIHx8IGRlZmluZWQoV0lOMzIpKQorI2RlZmluZSBERUZBVUxUX0dSQU5VTEFSSVRZICgwKSAgLyogMCBtZWFucyB0byBjb21wdXRlIGluIGluaXRfbXBhcmFtcyAqLworI2Vsc2UgICAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovCisjZGVmaW5lIERFRkFVTFRfR1JBTlVMQVJJVFkgKChzaXplX3QpNjRVICogKHNpemVfdCkxMDI0VSkKKyNlbmRpZiAgLyogTU9SRUNPUkVfQ09OVElHVU9VUyAqLworI2VuZGlmICAvKiBERUZBVUxUX0dSQU5VTEFSSVRZICovCisjaWZuZGVmIERFRkFVTFRfVFJJTV9USFJFU0hPTEQKKyNpZm5kZWYgTU9SRUNPUkVfQ0FOTk9UX1RSSU0KKyNkZWZpbmUgREVGQVVMVF9UUklNX1RIUkVTSE9MRCAoKHNpemVfdCkyVSAqIChzaXplX3QpMTAyNFUgKiAoc2l6ZV90KTEwMjRVKQorI2Vsc2UgICAvKiBNT1JFQ09SRV9DQU5OT1RfVFJJTSAqLworI2RlZmluZSBERUZBVUxUX1RSSU1fVEhSRVNIT0xEIE1BWF9TSVpFX1QKKyNlbmRpZiAgLyogTU9SRUNPUkVfQ0FOTk9UX1RSSU0gKi8KKyNlbmRpZiAgLyogREVGQVVMVF9UUklNX1RIUkVTSE9MRCAqLworI2lmbmRlZiBERUZBVUxUX01NQVBfVEhSRVNIT0xECisjaWYgSEFWRV9NTUFQCisjZGVmaW5lIERFRkFVTFRfTU1BUF9USFJFU0hPTEQgKChzaXplX3QpMjU2VSAqIChzaXplX3QpMTAyNFUpCisjZWxzZSAgIC8qIEhBVkVfTU1BUCAqLworI2RlZmluZSBERUZBVUxUX01NQVBfVEhSRVNIT0xEIE1BWF9TSVpFX1QKKyNlbmRpZiAgLyogSEFWRV9NTUFQICovCisjZW5kaWYgIC8qIERFRkFVTFRfTU1BUF9USFJFU0hPTEQgKi8KKyNpZm5kZWYgTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURQorI2lmIEhBVkVfTU1BUAorI2RlZmluZSBNQVhfUkVMRUFTRV9DSEVDS19SQVRFIDQwOTUKKyNlbHNlCisjZGVmaW5lIE1BWF9SRUxFQVNFX0NIRUNLX1JBVEUgTUFYX1NJWkVfVAorI2VuZGlmIC8qIEhBVkVfTU1BUCAqLworI2VuZGlmIC8qIE1BWF9SRUxFQVNFX0NIRUNLX1JBVEUgKi8KKyNpZm5kZWYgVVNFX0JVSUxUSU5fRkZTCisjZGVmaW5lIFVTRV9CVUlMVElOX0ZGUyAwCisjZW5kaWYgIC8qIFVTRV9CVUlMVElOX0ZGUyAqLworI2lmbmRlZiBVU0VfREVWX1JBTkRPTQorI2RlZmluZSBVU0VfREVWX1JBTkRPTSAwCisjZW5kaWYgIC8qIFVTRV9ERVZfUkFORE9NICovCisjaWZuZGVmIE5PX01BTExJTkZPCisjZGVmaW5lIE5PX01BTExJTkZPIDAKKyNlbmRpZiAgLyogTk9fTUFMTElORk8gKi8KKyNpZm5kZWYgTUFMTElORk9fRklFTERfVFlQRQorI2RlZmluZSBNQUxMSU5GT19GSUVMRF9UWVBFIHNpemVfdAorI2VuZGlmICAvKiBNQUxMSU5GT19GSUVMRF9UWVBFICovCisjaWZuZGVmIE5PX1NFR01FTlRfVFJBVkVSU0FMCisjZGVmaW5lIE5PX1NFR01FTlRfVFJBVkVSU0FMIDAKKyNlbmRpZiAvKiBOT19TRUdNRU5UX1RSQVZFUlNBTCAqLworCisvKgorICBtYWxsb3B0IHR1bmluZyBvcHRpb25zLiAgU1ZJRC9YUEcgZGVmaW5lcyBmb3VyIHN0YW5kYXJkIHBhcmFtZXRlcgorICBudW1iZXJzIGZvciBtYWxsb3B0LCBub3JtYWxseSBkZWZpbmVkIGluIG1hbGxvYy5oLiAgTm9uZSBvZiB0aGVzZQorICBhcmUgdXNlZCBpbiB0aGlzIG1hbGxvYywgc28gc2V0dGluZyB0aGVtIGhhcyBubyBlZmZlY3QuIEJ1dCB0aGlzCisgIG1hbGxvYyBkb2VzIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBvcHRpb25zLgorKi8KKworI2RlZmluZSBNX1RSSU1fVEhSRVNIT0xEICAgICAoLTEpCisjZGVmaW5lIE1fR1JBTlVMQVJJVFkgICAgICAgICgtMikKKyNkZWZpbmUgTV9NTUFQX1RIUkVTSE9MRCAgICAgKC0zKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTWFsbGluZm8gZGVjbGFyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgIU5PX01BTExJTkZPCisvKgorICBUaGlzIHZlcnNpb24gb2YgbWFsbG9jIHN1cHBvcnRzIHRoZSBzdGFuZGFyZCBTVklEL1hQRyBtYWxsaW5mbworICByb3V0aW5lIHRoYXQgcmV0dXJucyBhIHN0cnVjdCBjb250YWluaW5nIHVzYWdlIHByb3BlcnRpZXMgYW5kCisgIHN0YXRpc3RpY3MuIEl0IHNob3VsZCB3b3JrIG9uIGFueSBzeXN0ZW0gdGhhdCBoYXMgYQorICAvdXNyL2luY2x1ZGUvbWFsbG9jLmggZGVmaW5pbmcgc3RydWN0IG1hbGxpbmZvLiAgVGhlIG1haW4KKyAgZGVjbGFyYXRpb24gbmVlZGVkIGlzIHRoZSBtYWxsaW5mbyBzdHJ1Y3QgdGhhdCBpcyByZXR1cm5lZCAoYnktY29weSkKKyAgYnkgbWFsbGluZm8oKS4gIFRoZSBtYWxsb2luZm8gc3RydWN0IGNvbnRhaW5zIGEgYnVuY2ggb2YgZmllbGRzIHRoYXQKKyAgYXJlIG5vdCBldmVuIG1lYW5pbmdmdWwgaW4gdGhpcyB2ZXJzaW9uIG9mIG1hbGxvYy4gIFRoZXNlIGZpZWxkcyBhcmUKKyAgYXJlIGluc3RlYWQgZmlsbGVkIGJ5IG1hbGxpbmZvKCkgd2l0aCBvdGhlciBudW1iZXJzIHRoYXQgbWlnaHQgYmUgb2YKKyAgaW50ZXJlc3QuCisKKyAgSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCBzaG91bGQgYmUgc2V0IGlmIHlvdSBoYXZlIGEKKyAgL3Vzci9pbmNsdWRlL21hbGxvYy5oIGZpbGUgdGhhdCBpbmNsdWRlcyBhIGRlY2xhcmF0aW9uIG9mIHN0cnVjdAorICBtYWxsaW5mby4gIElmIHNvLCBpdCBpcyBpbmNsdWRlZDsgZWxzZSBhIGNvbXBsaWFudCB2ZXJzaW9uIGlzCisgIGRlY2xhcmVkIGJlbG93LiAgVGhlc2UgbXVzdCBiZSBwcmVjaXNlbHkgdGhlIHNhbWUgZm9yIG1hbGxpbmZvKCkgdG8KKyAgd29yay4gIFRoZSBvcmlnaW5hbCBTVklEIHZlcnNpb24gb2YgdGhpcyBzdHJ1Y3QsIGRlZmluZWQgb24gbW9zdAorICBzeXN0ZW1zIHdpdGggbWFsbGluZm8sIGRlY2xhcmVzIGFsbCBmaWVsZHMgYXMgaW50cy4gQnV0IHNvbWUgb3RoZXJzCisgIGRlZmluZSBhcyB1bnNpZ25lZCBsb25nLiBJZiB5b3VyIHN5c3RlbSBkZWZpbmVzIHRoZSBmaWVsZHMgdXNpbmcgYQorICB0eXBlIG9mIGRpZmZlcmVudCB3aWR0aCB0aGFuIGxpc3RlZCBoZXJlLCB5b3UgTVVTVCAjaW5jbHVkZSB5b3VyCisgIHN5c3RlbSB2ZXJzaW9uIGFuZCAjZGVmaW5lIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0guCisqLworCisvKiAjZGVmaW5lIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggKi8KKworI2lmZGVmIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0gKKyNpbmNsdWRlICIvdXNyL2luY2x1ZGUvbWFsbG9jLmgiCisjZWxzZSAvKiBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IICovCisjaWZuZGVmIFNUUlVDVF9NQUxMSU5GT19ERUNMQVJFRAorI2RlZmluZSBTVFJVQ1RfTUFMTElORk9fREVDTEFSRUQgMQorc3RydWN0IG1hbGxpbmZvIHsKKyAgTUFMTElORk9fRklFTERfVFlQRSBhcmVuYTsgICAgLyogbm9uLW1tYXBwZWQgc3BhY2UgYWxsb2NhdGVkIGZyb20gc3lzdGVtICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgb3JkYmxrczsgIC8qIG51bWJlciBvZiBmcmVlIGNodW5rcyAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIHNtYmxrczsgICAvKiBhbHdheXMgMCAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIGhibGtzOyAgICAvKiBhbHdheXMgMCAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIGhibGtoZDsgICAvKiBzcGFjZSBpbiBtbWFwcGVkIHJlZ2lvbnMgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSB1c21ibGtzOyAgLyogbWF4aW11bSB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBmc21ibGtzOyAgLyogYWx3YXlzIDAgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSB1b3JkYmxrczsgLyogdG90YWwgYWxsb2NhdGVkIHNwYWNlICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgZm9yZGJsa3M7IC8qIHRvdGFsIGZyZWUgc3BhY2UgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBrZWVwY29zdDsgLyogcmVsZWFzYWJsZSAodmlhIG1hbGxvY190cmltKSBzcGFjZSAqLworfTsKKyNlbmRpZiAvKiBTVFJVQ1RfTUFMTElORk9fREVDTEFSRUQgKi8KKyNlbmRpZiAvKiBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IICovCisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8KKworLyoKKyAgVHJ5IHRvIHBlcnN1YWRlIGNvbXBpbGVycyB0byBpbmxpbmUuIFRoZSBtb3N0IGNyaXRpY2FsIGZ1bmN0aW9ucyBmb3IKKyAgaW5saW5pbmcgYXJlIGRlZmluZWQgYXMgbWFjcm9zLCBzbyB0aGVzZSBhcmVuJ3QgdXNlZCBmb3IgdGhlbS4KKyovCisKKyNpZm5kZWYgRk9SQ0VJTkxJTkUKKyAgI2lmIGRlZmluZWQoX19HTlVDX18pCisjZGVmaW5lIEZPUkNFSU5MSU5FIF9faW5saW5lIF9fYXR0cmlidXRlX18gKChhbHdheXNfaW5saW5lKSkKKyAgI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyAgICAjZGVmaW5lIEZPUkNFSU5MSU5FIF9fZm9yY2VpbmxpbmUKKyAgI2VuZGlmCisjZW5kaWYKKyNpZm5kZWYgTk9JTkxJTkUKKyAgI2lmIGRlZmluZWQoX19HTlVDX18pCisgICAgI2RlZmluZSBOT0lOTElORSBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQorICAjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorICAgICNkZWZpbmUgTk9JTkxJTkUgX19kZWNsc3BlYyhub2lubGluZSkKKyAgI2Vsc2UKKyAgICAjZGVmaW5lIE5PSU5MSU5FCisgICNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjaWZuZGVmIEZPUkNFSU5MSU5FCisgI2RlZmluZSBGT1JDRUlOTElORSBpbmxpbmUKKyNlbmRpZgorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisjaWZuZGVmIEZPUkNFSU5MSU5FCisgI2RlZmluZSBGT1JDRUlOTElORQorI2VuZGlmCisKKyNpZiAhT05MWV9NU1BBQ0VTCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gRGVjbGFyYXRpb25zIG9mIHB1YmxpYyByb3V0aW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZm5kZWYgVVNFX0RMX1BSRUZJWAorI2RlZmluZSBkbGNhbGxvYyAgICAgICAgICAgICAgIGNhbGxvYworI2RlZmluZSBkbGZyZWUgICAgICAgICAgICAgICAgIGZyZWUKKyNkZWZpbmUgZGxtYWxsb2MgICAgICAgICAgICAgICBtYWxsb2MKKyNkZWZpbmUgZGxtZW1hbGlnbiAgICAgICAgICAgICBtZW1hbGlnbgorI2RlZmluZSBkbHJlYWxsb2MgICAgICAgICAgICAgIHJlYWxsb2MKKyNkZWZpbmUgZGx2YWxsb2MgICAgICAgICAgICAgICB2YWxsb2MKKyNkZWZpbmUgZGxwdmFsbG9jICAgICAgICAgICAgICBwdmFsbG9jCisjZGVmaW5lIGRsbWFsbGluZm8gICAgICAgICAgICAgbWFsbGluZm8KKyNkZWZpbmUgZGxtYWxsb3B0ICAgICAgICAgICAgICBtYWxsb3B0CisjZGVmaW5lIGRsbWFsbG9jX3RyaW0gICAgICAgICAgbWFsbG9jX3RyaW0KKyNkZWZpbmUgZGxtYWxsb2Nfc3RhdHMgICAgICAgICBtYWxsb2Nfc3RhdHMKKyNkZWZpbmUgZGxtYWxsb2NfdXNhYmxlX3NpemUgICBtYWxsb2NfdXNhYmxlX3NpemUKKyNkZWZpbmUgZGxtYWxsb2NfZm9vdHByaW50ICAgICBtYWxsb2NfZm9vdHByaW50CisjZGVmaW5lIGRsbWFsbG9jX21heF9mb290cHJpbnQgbWFsbG9jX21heF9mb290cHJpbnQKKyNkZWZpbmUgZGxpbmRlcGVuZGVudF9jYWxsb2MgICBpbmRlcGVuZGVudF9jYWxsb2MKKyNkZWZpbmUgZGxpbmRlcGVuZGVudF9jb21hbGxvYyBpbmRlcGVuZGVudF9jb21hbGxvYworI2VuZGlmIC8qIFVTRV9ETF9QUkVGSVggKi8KKworCisvKgorICBtYWxsb2Moc2l6ZV90IG4pCisgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIGNodW5rIG9mIGF0IGxlYXN0IG4gYnl0ZXMsIG9yCisgIG51bGwgaWYgbm8gc3BhY2UgaXMgYXZhaWxhYmxlLCBpbiB3aGljaCBjYXNlIGVycm5vIGlzIHNldCB0byBFTk9NRU0KKyAgb24gQU5TSSBDIHN5c3RlbXMuCisKKyAgSWYgbiBpcyB6ZXJvLCBtYWxsb2MgcmV0dXJucyBhIG1pbmltdW0tc2l6ZWQgY2h1bmsuIChUaGUgbWluaW11bQorICBzaXplIGlzIDE2IGJ5dGVzIG9uIG1vc3QgMzJiaXQgc3lzdGVtcywgYW5kIDMyIGJ5dGVzIG9uIDY0Yml0CisgIHN5c3RlbXMuKSAgTm90ZSB0aGF0IHNpemVfdCBpcyBhbiB1bnNpZ25lZCB0eXBlLCBzbyBjYWxscyB3aXRoCisgIGFyZ3VtZW50cyB0aGF0IHdvdWxkIGJlIG5lZ2F0aXZlIGlmIHNpZ25lZCBhcmUgaW50ZXJwcmV0ZWQgYXMKKyAgcmVxdWVzdHMgZm9yIGh1Z2UgYW1vdW50cyBvZiBzcGFjZSwgd2hpY2ggd2lsbCBvZnRlbiBmYWlsLiBUaGUKKyAgbWF4aW11bSBzdXBwb3J0ZWQgdmFsdWUgb2YgbiBkaWZmZXJzIGFjcm9zcyBzeXN0ZW1zLCBidXQgaXMgaW4gYWxsCisgIGNhc2VzIGxlc3MgdGhhbiB0aGUgbWF4aW11bSByZXByZXNlbnRhYmxlIHZhbHVlIG9mIGEgc2l6ZV90LgorKi8KK3ZvaWQqIGRsbWFsbG9jKHNpemVfdCk7CisKKy8qCisgIGZyZWUodm9pZCogcCkKKyAgUmVsZWFzZXMgdGhlIGNodW5rIG9mIG1lbW9yeSBwb2ludGVkIHRvIGJ5IHAsIHRoYXQgaGFkIGJlZW4gcHJldmlvdXNseQorICBhbGxvY2F0ZWQgdXNpbmcgbWFsbG9jIG9yIGEgcmVsYXRlZCByb3V0aW5lIHN1Y2ggYXMgcmVhbGxvYy4KKyAgSXQgaGFzIG5vIGVmZmVjdCBpZiBwIGlzIG51bGwuIElmIHAgd2FzIG5vdCBtYWxsb2NlZCBvciBhbHJlYWR5CisgIGZyZWVkLCBmcmVlKHApIHdpbGwgYnkgZGVmYXVsdCBjYXVzZSB0aGUgY3VycmVudCBwcm9ncmFtIHRvIGFib3J0LgorKi8KK3ZvaWQgIGRsZnJlZSh2b2lkKik7CisKKy8qCisgIGNhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1lbnRfc2l6ZSk7CisgIFJldHVybnMgYSBwb2ludGVyIHRvIG5fZWxlbWVudHMgKiBlbGVtZW50X3NpemUgYnl0ZXMsIHdpdGggYWxsIGxvY2F0aW9ucworICBzZXQgdG8gemVyby4KKyovCit2b2lkKiBkbGNhbGxvYyhzaXplX3QsIHNpemVfdCk7CisKKy8qCisgIHJlYWxsb2Modm9pZCogcCwgc2l6ZV90IG4pCisgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgY2h1bmsgb2Ygc2l6ZSBuIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgZGF0YQorICBhcyBkb2VzIGNodW5rIHAgdXAgdG8gdGhlIG1pbmltdW0gb2YgKG4sIHAncyBzaXplKSBieXRlcywgb3IgbnVsbAorICBpZiBubyBzcGFjZSBpcyBhdmFpbGFibGUuCisKKyAgVGhlIHJldHVybmVkIHBvaW50ZXIgbWF5IG9yIG1heSBub3QgYmUgdGhlIHNhbWUgYXMgcC4gVGhlIGFsZ29yaXRobQorICBwcmVmZXJzIGV4dGVuZGluZyBwIGluIG1vc3QgY2FzZXMgd2hlbiBwb3NzaWJsZSwgb3RoZXJ3aXNlIGl0CisgIGVtcGxveXMgdGhlIGVxdWl2YWxlbnQgb2YgYSBtYWxsb2MtY29weS1mcmVlIHNlcXVlbmNlLgorCisgIElmIHAgaXMgbnVsbCwgcmVhbGxvYyBpcyBlcXVpdmFsZW50IHRvIG1hbGxvYy4KKworICBJZiBzcGFjZSBpcyBub3QgYXZhaWxhYmxlLCByZWFsbG9jIHJldHVybnMgbnVsbCwgZXJybm8gaXMgc2V0IChpZiBvbgorICBBTlNJKSBhbmQgcCBpcyBOT1QgZnJlZWQuCisKKyAgaWYgbiBpcyBmb3IgZmV3ZXIgYnl0ZXMgdGhhbiBhbHJlYWR5IGhlbGQgYnkgcCwgdGhlIG5ld2x5IHVudXNlZAorICBzcGFjZSBpcyBsb3BwZWQgb2ZmIGFuZCBmcmVlZCBpZiBwb3NzaWJsZS4gIHJlYWxsb2Mgd2l0aCBhIHNpemUKKyAgYXJndW1lbnQgb2YgemVybyAocmUpYWxsb2NhdGVzIGEgbWluaW11bS1zaXplZCBjaHVuay4KKworICBUaGUgb2xkIHVuaXggcmVhbGxvYyBjb252ZW50aW9uIG9mIGFsbG93aW5nIHRoZSBsYXN0LWZyZWUnZCBjaHVuaworICB0byBiZSB1c2VkIGFzIGFuIGFyZ3VtZW50IHRvIHJlYWxsb2MgaXMgbm90IHN1cHBvcnRlZC4KKyovCisKK3ZvaWQqIGRscmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKKworLyoKKyAgbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IG4pOworICBSZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCBjaHVuayBvZiBuIGJ5dGVzLCBhbGlnbmVkCisgIGluIGFjY29yZCB3aXRoIHRoZSBhbGlnbm1lbnQgYXJndW1lbnQuCisKKyAgVGhlIGFsaWdubWVudCBhcmd1bWVudCBzaG91bGQgYmUgYSBwb3dlciBvZiB0d28uIElmIHRoZSBhcmd1bWVudCBpcworICBub3QgYSBwb3dlciBvZiB0d28sIHRoZSBuZWFyZXN0IGdyZWF0ZXIgcG93ZXIgaXMgdXNlZC4KKyAgOC1ieXRlIGFsaWdubWVudCBpcyBndWFyYW50ZWVkIGJ5IG5vcm1hbCBtYWxsb2MgY2FsbHMsIHNvIGRvbid0CisgIGJvdGhlciBjYWxsaW5nIG1lbWFsaWduIHdpdGggYW4gYXJndW1lbnQgb2YgOCBvciBsZXNzLgorCisgIE92ZXJyZWxpYW5jZSBvbiBtZW1hbGlnbiBpcyBhIHN1cmUgd2F5IHRvIGZyYWdtZW50IHNwYWNlLgorKi8KK3ZvaWQqIGRsbWVtYWxpZ24oc2l6ZV90LCBzaXplX3QpOworCisvKgorICB2YWxsb2Moc2l6ZV90IG4pOworICBFcXVpdmFsZW50IHRvIG1lbWFsaWduKHBhZ2VzaXplLCBuKSwgd2hlcmUgcGFnZXNpemUgaXMgdGhlIHBhZ2UKKyAgc2l6ZSBvZiB0aGUgc3lzdGVtLiBJZiB0aGUgcGFnZXNpemUgaXMgdW5rbm93biwgNDA5NiBpcyB1c2VkLgorKi8KK3ZvaWQqIGRsdmFsbG9jKHNpemVfdCk7CisKKy8qCisgIG1hbGxvcHQoaW50IHBhcmFtZXRlcl9udW1iZXIsIGludCBwYXJhbWV0ZXJfdmFsdWUpCisgIFNldHMgdHVuYWJsZSBwYXJhbWV0ZXJzIFRoZSBmb3JtYXQgaXMgdG8gcHJvdmlkZSBhCisgIChwYXJhbWV0ZXItbnVtYmVyLCBwYXJhbWV0ZXItdmFsdWUpIHBhaXIuICBtYWxsb3B0IHRoZW4gc2V0cyB0aGUKKyAgY29ycmVzcG9uZGluZyBwYXJhbWV0ZXIgdG8gdGhlIGFyZ3VtZW50IHZhbHVlIGlmIGl0IGNhbiAoaS5lLiwgc28KKyAgbG9uZyBhcyB0aGUgdmFsdWUgaXMgbWVhbmluZ2Z1bCksIGFuZCByZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCBlbHNlCisgIDAuICBUbyB3b3JrYXJvdW5kIHRoZSBmYWN0IHRoYXQgbWFsbG9wdCBpcyBzcGVjaWZpZWQgdG8gdXNlIGludCwKKyAgbm90IHNpemVfdCBwYXJhbWV0ZXJzLCB0aGUgdmFsdWUgLTEgaXMgc3BlY2lhbGx5IHRyZWF0ZWQgYXMgdGhlCisgIG1heGltdW0gdW5zaWduZWQgc2l6ZV90IHZhbHVlLgorCisgIFNWSUQvWFBHL0FOU0kgZGVmaW5lcyBmb3VyIHN0YW5kYXJkIHBhcmFtIG51bWJlcnMgZm9yIG1hbGxvcHQsCisgIG5vcm1hbGx5IGRlZmluZWQgaW4gbWFsbG9jLmguICBOb25lIG9mIHRoZXNlIGFyZSB1c2UgaW4gdGhpcyBtYWxsb2MsCisgIHNvIHNldHRpbmcgdGhlbSBoYXMgbm8gZWZmZWN0LiBCdXQgdGhpcyBtYWxsb2MgYWxzbyBzdXBwb3J0cyBvdGhlcgorICBvcHRpb25zIGluIG1hbGxvcHQuIFNlZSBiZWxvdyBmb3IgZGV0YWlscy4gIEJyaWVmbHksIHN1cHBvcnRlZAorICBwYXJhbWV0ZXJzIGFyZSBhcyBmb2xsb3dzIChsaXN0ZWQgZGVmYXVsdHMgYXJlIGZvciAidHlwaWNhbCIKKyAgY29uZmlndXJhdGlvbnMpLgorCisgIFN5bWJvbCAgICAgICAgICAgIHBhcmFtICMgIGRlZmF1bHQgICAgYWxsb3dlZCBwYXJhbSB2YWx1ZXMKKyAgTV9UUklNX1RIUkVTSE9MRCAgICAgLTEgICAyKjEwMjQqMTAyNCAgIGFueSAgICgtMSBkaXNhYmxlcykKKyAgTV9HUkFOVUxBUklUWSAgICAgICAgLTIgICAgIHBhZ2Ugc2l6ZSAgIGFueSBwb3dlciBvZiAyID49IHBhZ2Ugc2l6ZQorICBNX01NQVBfVEhSRVNIT0xEICAgICAtMyAgICAgIDI1NioxMDI0ICAgYW55ICAgKG9yIDAgaWYgbm8gTU1BUCBzdXBwb3J0KQorKi8KK2ludCBkbG1hbGxvcHQoaW50LCBpbnQpOworCisvKgorICBtYWxsb2NfZm9vdHByaW50KCk7CisgIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBvYnRhaW5lZCBmcm9tIHRoZSBzeXN0ZW0uICBUaGUgdG90YWwKKyAgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCBieSBtYWxsb2MsIHJlYWxsb2MgZXRjLiwgaXMgbGVzcyB0aGFuIHRoaXMKKyAgdmFsdWUuIFVubGlrZSBtYWxsaW5mbywgdGhpcyBmdW5jdGlvbiByZXR1cm5zIG9ubHkgYSBwcmVjb21wdXRlZAorICByZXN1bHQsIHNvIGNhbiBiZSBjYWxsZWQgZnJlcXVlbnRseSB0byBtb25pdG9yIG1lbW9yeSBjb25zdW1wdGlvbi4KKyAgRXZlbiBpZiBsb2NrcyBhcmUgb3RoZXJ3aXNlIGRlZmluZWQsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdXNlIHRoZW0sCisgIHNvIHJlc3VsdHMgbWlnaHQgbm90IGJlIHVwIHRvIGRhdGUuCisqLworc2l6ZV90IGRsbWFsbG9jX2Zvb3RwcmludCh2b2lkKTsKKworLyoKKyAgbWFsbG9jX21heF9mb290cHJpbnQoKTsKKyAgUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtLiBUaGlzCisgIHZhbHVlIHdpbGwgYmUgZ3JlYXRlciB0aGFuIGN1cnJlbnQgZm9vdHByaW50IGlmIGRlYWxsb2NhdGVkIHNwYWNlCisgIGhhcyBiZWVuIHJlY2xhaW1lZCBieSB0aGUgc3lzdGVtLiBUaGUgcGVhayBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkCisgIGJ5IG1hbGxvYywgcmVhbGxvYyBldGMuLCBpcyBsZXNzIHRoYW4gdGhpcyB2YWx1ZS4gVW5saWtlIG1hbGxpbmZvLAorICB0aGlzIGZ1bmN0aW9uIHJldHVybnMgb25seSBhIHByZWNvbXB1dGVkIHJlc3VsdCwgc28gY2FuIGJlIGNhbGxlZAorICBmcmVxdWVudGx5IHRvIG1vbml0b3IgbWVtb3J5IGNvbnN1bXB0aW9uLiAgRXZlbiBpZiBsb2NrcyBhcmUKKyAgb3RoZXJ3aXNlIGRlZmluZWQsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdXNlIHRoZW0sIHNvIHJlc3VsdHMgbWlnaHQKKyAgbm90IGJlIHVwIHRvIGRhdGUuCisqLworc2l6ZV90IGRsbWFsbG9jX21heF9mb290cHJpbnQodm9pZCk7CisKKyNpZiAhTk9fTUFMTElORk8KKy8qCisgIG1hbGxpbmZvKCkKKyAgUmV0dXJucyAoYnkgY29weSkgYSBzdHJ1Y3QgY29udGFpbmluZyB2YXJpb3VzIHN1bW1hcnkgc3RhdGlzdGljczoKKworICBhcmVuYTogICAgIGN1cnJlbnQgdG90YWwgbm9uLW1tYXBwZWQgYnl0ZXMgYWxsb2NhdGVkIGZyb20gc3lzdGVtCisgIG9yZGJsa3M6ICAgdGhlIG51bWJlciBvZiBmcmVlIGNodW5rcworICBzbWJsa3M6ICAgIGFsd2F5cyB6ZXJvLgorICBoYmxrczogICAgIGN1cnJlbnQgbnVtYmVyIG9mIG1tYXBwZWQgcmVnaW9ucworICBoYmxraGQ6ICAgIHRvdGFsIGJ5dGVzIGhlbGQgaW4gbW1hcHBlZCByZWdpb25zCisgIHVzbWJsa3M6ICAgdGhlIG1heGltdW0gdG90YWwgYWxsb2NhdGVkIHNwYWNlLiBUaGlzIHdpbGwgYmUgZ3JlYXRlcgorCQl0aGFuIGN1cnJlbnQgdG90YWwgaWYgdHJpbW1pbmcgaGFzIG9jY3VycmVkLgorICBmc21ibGtzOiAgIGFsd2F5cyB6ZXJvCisgIHVvcmRibGtzOiAgY3VycmVudCB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UgKG5vcm1hbCBvciBtbWFwcGVkKQorICBmb3JkYmxrczogIHRvdGFsIGZyZWUgc3BhY2UKKyAga2VlcGNvc3Q6ICB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjb3VsZCBpZGVhbGx5IGJlIHJlbGVhc2VkCisJICAgICAgIGJhY2sgdG8gc3lzdGVtIHZpYSBtYWxsb2NfdHJpbS4gKCJpZGVhbGx5IiBtZWFucyB0aGF0CisJICAgICAgIGl0IGlnbm9yZXMgcGFnZSByZXN0cmljdGlvbnMgZXRjLikKKworICBCZWNhdXNlIHRoZXNlIGZpZWxkcyBhcmUgaW50cywgYnV0IGludGVybmFsIGJvb2trZWVwaW5nIG1heQorICBiZSBrZXB0IGFzIGxvbmdzLCB0aGUgcmVwb3J0ZWQgdmFsdWVzIG1heSB3cmFwIGFyb3VuZCB6ZXJvIGFuZAorICB0aHVzIGJlIGluYWNjdXJhdGUuCisqLworc3RydWN0IG1hbGxpbmZvIGRsbWFsbGluZm8odm9pZCk7CisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8KKworLyoKKyAgaW5kZXBlbmRlbnRfY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbWVudF9zaXplLCB2b2lkKiBjaHVua3NbXSk7CisKKyAgaW5kZXBlbmRlbnRfY2FsbG9jIGlzIHNpbWlsYXIgdG8gY2FsbG9jLCBidXQgaW5zdGVhZCBvZiByZXR1cm5pbmcgYQorICBzaW5nbGUgY2xlYXJlZCBzcGFjZSwgaXQgcmV0dXJucyBhbiBhcnJheSBvZiBwb2ludGVycyB0byBuX2VsZW1lbnRzCisgIGluZGVwZW5kZW50IGVsZW1lbnRzIHRoYXQgY2FuIGhvbGQgY29udGVudHMgb2Ygc2l6ZSBlbGVtX3NpemUsIGVhY2gKKyAgb2Ygd2hpY2ggc3RhcnRzIG91dCBjbGVhcmVkLCBhbmQgY2FuIGJlIGluZGVwZW5kZW50bHkgZnJlZWQsCisgIHJlYWxsb2MnZWQgZXRjLiBUaGUgZWxlbWVudHMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgYWRqYWNlbnRseQorICBhbGxvY2F0ZWQgKHRoaXMgaXMgbm90IGd1YXJhbnRlZWQgdG8gb2NjdXIgd2l0aCBtdWx0aXBsZSBjYWxsb2NzIG9yCisgIG1hbGxvY3MpLCB3aGljaCBtYXkgYWxzbyBpbXByb3ZlIGNhY2hlIGxvY2FsaXR5IGluIHNvbWUKKyAgYXBwbGljYXRpb25zLgorCisgIFRoZSAiY2h1bmtzIiBhcmd1bWVudCBpcyBvcHRpb25hbCAoaS5lLiwgbWF5IGJlIG51bGwsIHdoaWNoIGlzCisgIHByb2JhYmx5IHRoZSBtb3N0IHR5cGljYWwgdXNhZ2UpLiBJZiBpdCBpcyBudWxsLCB0aGUgcmV0dXJuZWQgYXJyYXkKKyAgaXMgaXRzZWxmIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgc2hvdWxkIGFsc28gYmUgZnJlZWQgd2hlbiBpdCBpcworICBubyBsb25nZXIgbmVlZGVkLiBPdGhlcndpc2UsIHRoZSBjaHVua3MgYXJyYXkgbXVzdCBiZSBvZiBhdCBsZWFzdAorICBuX2VsZW1lbnRzIGluIGxlbmd0aC4gSXQgaXMgZmlsbGVkIGluIHdpdGggdGhlIHBvaW50ZXJzIHRvIHRoZQorICBjaHVua3MuCisKKyAgSW4gZWl0aGVyIGNhc2UsIGluZGVwZW5kZW50X2NhbGxvYyByZXR1cm5zIHRoaXMgcG9pbnRlciBhcnJheSwgb3IKKyAgbnVsbCBpZiB0aGUgYWxsb2NhdGlvbiBmYWlsZWQuICBJZiBuX2VsZW1lbnRzIGlzIHplcm8gYW5kICJjaHVua3MiCisgIGlzIG51bGwsIGl0IHJldHVybnMgYSBjaHVuayByZXByZXNlbnRpbmcgYW4gYXJyYXkgd2l0aCB6ZXJvIGVsZW1lbnRzCisgICh3aGljaCBzaG91bGQgYmUgZnJlZWQgaWYgbm90IHdhbnRlZCkuCisKKyAgRWFjaCBlbGVtZW50IG11c3QgYmUgaW5kaXZpZHVhbGx5IGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2VyCisgIG5lZWRlZC4gSWYgeW91J2QgbGlrZSB0byBpbnN0ZWFkIGJlIGFibGUgdG8gZnJlZSBhbGwgYXQgb25jZSwgeW91CisgIHNob3VsZCBpbnN0ZWFkIHVzZSByZWd1bGFyIGNhbGxvYyBhbmQgYXNzaWduIHBvaW50ZXJzIGludG8gdGhpcworICBzcGFjZSB0byByZXByZXNlbnQgZWxlbWVudHMuICAoSW4gdGhpcyBjYXNlIHRob3VnaCwgeW91IGNhbm5vdAorICBpbmRlcGVuZGVudGx5IGZyZWUgZWxlbWVudHMuKQorCisgIGluZGVwZW5kZW50X2NhbGxvYyBzaW1wbGlmaWVzIGFuZCBzcGVlZHMgdXAgaW1wbGVtZW50YXRpb25zIG9mIG1hbnkKKyAga2luZHMgb2YgcG9vbHMuICBJdCBtYXkgYWxzbyBiZSB1c2VmdWwgd2hlbiBjb25zdHJ1Y3RpbmcgbGFyZ2UgZGF0YQorICBzdHJ1Y3R1cmVzIHRoYXQgaW5pdGlhbGx5IGhhdmUgYSBmaXhlZCBudW1iZXIgb2YgZml4ZWQtc2l6ZWQgbm9kZXMsCisgIGJ1dCB0aGUgbnVtYmVyIGlzIG5vdCBrbm93biBhdCBjb21waWxlIHRpbWUsIGFuZCBzb21lIG9mIHRoZSBub2RlcworICBtYXkgbGF0ZXIgbmVlZCB0byBiZSBmcmVlZC4gRm9yIGV4YW1wbGU6CisKKyAgc3RydWN0IE5vZGUgeyBpbnQgaXRlbTsgc3RydWN0IE5vZGUqIG5leHQ7IH07CisKKyAgc3RydWN0IE5vZGUqIGJ1aWxkX2xpc3QoKSB7CisgICAgc3RydWN0IE5vZGUqKiBwb29sOworICAgIGludCBuID0gcmVhZF9udW1iZXJfb2Zfbm9kZXNfbmVlZGVkKCk7CisgICAgaWYgKG4gPD0gMCkgcmV0dXJuIDA7CisgICAgcG9vbCA9IChzdHJ1Y3QgTm9kZSoqKShpbmRlcGVuZGVudF9jYWxsb2Mobiwgc2l6ZW9mKHN0cnVjdCBOb2RlKSwgMCk7CisgICAgaWYgKHBvb2wgPT0gMCkgZGllKCk7CisgICAgLy8gb3JnYW5pemUgaW50byBhIGxpbmtlZCBsaXN0Li4uCisgICAgc3RydWN0IE5vZGUqIGZpcnN0ID0gcG9vbFswXTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbi0xOyArK2kpCisgICAgICBwb29sW2ldLT5uZXh0ID0gcG9vbFtpKzFdOworICAgIGZyZWUocG9vbCk7ICAgICAvLyBDYW4gbm93IGZyZWUgdGhlIGFycmF5IChvciBub3QsIGlmIGl0IGlzIG5lZWRlZCBsYXRlcikKKyAgICByZXR1cm4gZmlyc3Q7CisgIH0KKyovCit2b2lkKiogZGxpbmRlcGVuZGVudF9jYWxsb2Moc2l6ZV90LCBzaXplX3QsIHZvaWQqKik7CisKKy8qCisgIGluZGVwZW5kZW50X2NvbWFsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3Qgc2l6ZXNbXSwgdm9pZCogY2h1bmtzW10pOworCisgIGluZGVwZW5kZW50X2NvbWFsbG9jIGFsbG9jYXRlcywgYWxsIGF0IG9uY2UsIGEgc2V0IG9mIG5fZWxlbWVudHMKKyAgY2h1bmtzIHdpdGggc2l6ZXMgaW5kaWNhdGVkIGluIHRoZSAic2l6ZXMiIGFycmF5LiAgICBJdCByZXR1cm5zCisgIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHRoZXNlIGVsZW1lbnRzLCBlYWNoIG9mIHdoaWNoIGNhbiBiZQorICBpbmRlcGVuZGVudGx5IGZyZWVkLCByZWFsbG9jJ2VkIGV0Yy4gVGhlIGVsZW1lbnRzIGFyZSBndWFyYW50ZWVkIHRvCisgIGJlIGFkamFjZW50bHkgYWxsb2NhdGVkICh0aGlzIGlzIG5vdCBndWFyYW50ZWVkIHRvIG9jY3VyIHdpdGgKKyAgbXVsdGlwbGUgY2FsbG9jcyBvciBtYWxsb2NzKSwgd2hpY2ggbWF5IGFsc28gaW1wcm92ZSBjYWNoZSBsb2NhbGl0eQorICBpbiBzb21lIGFwcGxpY2F0aW9ucy4KKworICBUaGUgImNodW5rcyIgYXJndW1lbnQgaXMgb3B0aW9uYWwgKGkuZS4sIG1heSBiZSBudWxsKS4gSWYgaXQgaXMgbnVsbAorICB0aGUgcmV0dXJuZWQgYXJyYXkgaXMgaXRzZWxmIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgc2hvdWxkIGFsc28KKyAgYmUgZnJlZWQgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLiBPdGhlcndpc2UsIHRoZSBjaHVua3MgYXJyYXkKKyAgbXVzdCBiZSBvZiBhdCBsZWFzdCBuX2VsZW1lbnRzIGluIGxlbmd0aC4gSXQgaXMgZmlsbGVkIGluIHdpdGggdGhlCisgIHBvaW50ZXJzIHRvIHRoZSBjaHVua3MuCisKKyAgSW4gZWl0aGVyIGNhc2UsIGluZGVwZW5kZW50X2NvbWFsbG9jIHJldHVybnMgdGhpcyBwb2ludGVyIGFycmF5LCBvcgorICBudWxsIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4gIElmIG5fZWxlbWVudHMgaXMgemVybyBhbmQgY2h1bmtzIGlzCisgIG51bGwsIGl0IHJldHVybnMgYSBjaHVuayByZXByZXNlbnRpbmcgYW4gYXJyYXkgd2l0aCB6ZXJvIGVsZW1lbnRzCisgICh3aGljaCBzaG91bGQgYmUgZnJlZWQgaWYgbm90IHdhbnRlZCkuCisKKyAgRWFjaCBlbGVtZW50IG11c3QgYmUgaW5kaXZpZHVhbGx5IGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2VyCisgIG5lZWRlZC4gSWYgeW91J2QgbGlrZSB0byBpbnN0ZWFkIGJlIGFibGUgdG8gZnJlZSBhbGwgYXQgb25jZSwgeW91CisgIHNob3VsZCBpbnN0ZWFkIHVzZSBhIHNpbmdsZSByZWd1bGFyIG1hbGxvYywgYW5kIGFzc2lnbiBwb2ludGVycyBhdAorICBwYXJ0aWN1bGFyIG9mZnNldHMgaW4gdGhlIGFnZ3JlZ2F0ZSBzcGFjZS4gKEluIHRoaXMgY2FzZSB0aG91Z2gsIHlvdQorICBjYW5ub3QgaW5kZXBlbmRlbnRseSBmcmVlIGVsZW1lbnRzLikKKworICBpbmRlcGVuZGVudF9jb21hbGxhYyBkaWZmZXJzIGZyb20gaW5kZXBlbmRlbnRfY2FsbG9jIGluIHRoYXQgZWFjaAorICBlbGVtZW50IG1heSBoYXZlIGEgZGlmZmVyZW50IHNpemUsIGFuZCBhbHNvIHRoYXQgaXQgZG9lcyBub3QKKyAgYXV0b21hdGljYWxseSBjbGVhciBlbGVtZW50cy4KKworICBpbmRlcGVuZGVudF9jb21hbGxvYyBjYW4gYmUgdXNlZCB0byBzcGVlZCB1cCBhbGxvY2F0aW9uIGluIGNhc2VzCisgIHdoZXJlIHNldmVyYWwgc3RydWN0cyBvciBvYmplY3RzIG11c3QgYWx3YXlzIGJlIGFsbG9jYXRlZCBhdCB0aGUKKyAgc2FtZSB0aW1lLiAgRm9yIGV4YW1wbGU6CisKKyAgc3RydWN0IEhlYWQgeyAuLi4gfQorICBzdHJ1Y3QgRm9vdCB7IC4uLiB9CisKKyAgdm9pZCBzZW5kX21lc3NhZ2UoY2hhciogbXNnKSB7CisgICAgaW50IG1zZ2xlbiA9IHN0cmxlbihtc2cpOworICAgIHNpemVfdCBzaXplc1szXSA9IHsgc2l6ZW9mKHN0cnVjdCBIZWFkKSwgbXNnbGVuLCBzaXplb2Yoc3RydWN0IEZvb3QpIH07CisgICAgdm9pZCogY2h1bmtzWzNdOworICAgIGlmIChpbmRlcGVuZGVudF9jb21hbGxvYygzLCBzaXplcywgY2h1bmtzKSA9PSAwKQorICAgICAgZGllKCk7CisgICAgc3RydWN0IEhlYWQqIGhlYWQgPSAoc3RydWN0IEhlYWQqKShjaHVua3NbMF0pOworICAgIGNoYXIqICAgICAgICBib2R5ID0gKGNoYXIqKShjaHVua3NbMV0pOworICAgIHN0cnVjdCBGb290KiBmb290ID0gKHN0cnVjdCBGb290KikoY2h1bmtzWzJdKTsKKyAgICAvLyAuLi4KKyAgfQorCisgIEluIGdlbmVyYWwgdGhvdWdoLCBpbmRlcGVuZGVudF9jb21hbGxvYyBpcyB3b3J0aCB1c2luZyBvbmx5IGZvcgorICBsYXJnZXIgdmFsdWVzIG9mIG5fZWxlbWVudHMuIEZvciBzbWFsbCB2YWx1ZXMsIHlvdSBwcm9iYWJseSB3b24ndAorICBkZXRlY3QgZW5vdWdoIGRpZmZlcmVuY2UgZnJvbSBzZXJpZXMgb2YgbWFsbG9jIGNhbGxzIHRvIGJvdGhlci4KKworICBPdmVydXNlIG9mIGluZGVwZW5kZW50X2NvbWFsbG9jIGNhbiBpbmNyZWFzZSBvdmVyYWxsIG1lbW9yeSB1c2FnZSwKKyAgc2luY2UgaXQgY2Fubm90IHJldXNlIGV4aXN0aW5nIG5vbmNvbnRpZ3VvdXMgc21hbGwgY2h1bmtzIHRoYXQKKyAgbWlnaHQgYmUgYXZhaWxhYmxlIGZvciBzb21lIG9mIHRoZSBlbGVtZW50cy4KKyovCit2b2lkKiogZGxpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3QsIHNpemVfdCosIHZvaWQqKik7CisKKworLyoKKyAgcHZhbGxvYyhzaXplX3Qgbik7CisgIEVxdWl2YWxlbnQgdG8gdmFsbG9jKG1pbmltdW0tcGFnZS10aGF0LWhvbGRzKG4pKSwgdGhhdCBpcywKKyAgcm91bmQgdXAgbiB0byBuZWFyZXN0IHBhZ2VzaXplLgorICovCit2b2lkKiAgZGxwdmFsbG9jKHNpemVfdCk7CisKKy8qCisgIG1hbGxvY190cmltKHNpemVfdCBwYWQpOworCisgIElmIHBvc3NpYmxlLCBnaXZlcyBtZW1vcnkgYmFjayB0byB0aGUgc3lzdGVtICh2aWEgbmVnYXRpdmUgYXJndW1lbnRzCisgIHRvIHNicmspIGlmIHRoZXJlIGlzIHVudXNlZCBtZW1vcnkgYXQgdGhlIGBoaWdoJyBlbmQgb2YgdGhlIG1hbGxvYworICBwb29sIG9yIGluIHVudXNlZCBNTUFQIHNlZ21lbnRzLiBZb3UgY2FuIGNhbGwgdGhpcyBhZnRlciBmcmVlaW5nCisgIGxhcmdlIGJsb2NrcyBvZiBtZW1vcnkgdG8gcG90ZW50aWFsbHkgcmVkdWNlIHRoZSBzeXN0ZW0tbGV2ZWwgbWVtb3J5CisgIHJlcXVpcmVtZW50cyBvZiBhIHByb2dyYW0uIEhvd2V2ZXIsIGl0IGNhbm5vdCBndWFyYW50ZWUgdG8gcmVkdWNlCisgIG1lbW9yeS4gVW5kZXIgc29tZSBhbGxvY2F0aW9uIHBhdHRlcm5zLCBzb21lIGxhcmdlIGZyZWUgYmxvY2tzIG9mCisgIG1lbW9yeSB3aWxsIGJlIGxvY2tlZCBiZXR3ZWVuIHR3byB1c2VkIGNodW5rcywgc28gdGhleSBjYW5ub3QgYmUKKyAgZ2l2ZW4gYmFjayB0byB0aGUgc3lzdGVtLgorCisgIFRoZSBgcGFkJyBhcmd1bWVudCB0byBtYWxsb2NfdHJpbSByZXByZXNlbnRzIHRoZSBhbW91bnQgb2YgZnJlZQorICB0cmFpbGluZyBzcGFjZSB0byBsZWF2ZSB1bnRyaW1tZWQuIElmIHRoaXMgYXJndW1lbnQgaXMgemVybywgb25seQorICB0aGUgbWluaW11bSBhbW91bnQgb2YgbWVtb3J5IHRvIG1haW50YWluIGludGVybmFsIGRhdGEgc3RydWN0dXJlcworICB3aWxsIGJlIGxlZnQuIE5vbi16ZXJvIGFyZ3VtZW50cyBjYW4gYmUgc3VwcGxpZWQgdG8gbWFpbnRhaW4gZW5vdWdoCisgIHRyYWlsaW5nIHNwYWNlIHRvIHNlcnZpY2UgZnV0dXJlIGV4cGVjdGVkIGFsbG9jYXRpb25zIHdpdGhvdXQgaGF2aW5nCisgIHRvIHJlLW9idGFpbiBtZW1vcnkgZnJvbSB0aGUgc3lzdGVtLgorCisgIE1hbGxvY190cmltIHJldHVybnMgMSBpZiBpdCBhY3R1YWxseSByZWxlYXNlZCBhbnkgbWVtb3J5LCBlbHNlIDAuCisqLworaW50ICBkbG1hbGxvY190cmltKHNpemVfdCk7CisKKy8qCisgIG1hbGxvY19zdGF0cygpOworICBQcmludHMgb24gc3RkZXJyIHRoZSBhbW91bnQgb2Ygc3BhY2Ugb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtIChib3RoCisgIHZpYSBzYnJrIGFuZCBtbWFwKSwgdGhlIG1heGltdW0gYW1vdW50ICh3aGljaCBtYXkgYmUgbW9yZSB0aGFuCisgIGN1cnJlbnQgaWYgbWFsbG9jX3RyaW0gYW5kL29yIG11bm1hcCBnb3QgY2FsbGVkKSwgYW5kIHRoZSBjdXJyZW50CisgIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgdmlhIG1hbGxvYyAob3IgcmVhbGxvYywgZXRjKSBidXQgbm90IHlldAorICBmcmVlZC4gTm90ZSB0aGF0IHRoaXMgaXMgdGhlIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQsIG5vdCB0aGUKKyAgbnVtYmVyIHJlcXVlc3RlZC4gSXQgd2lsbCBiZSBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZAorICBiZWNhdXNlIG9mIGFsaWdubWVudCBhbmQgYm9va2tlZXBpbmcgb3ZlcmhlYWQuIEJlY2F1c2UgaXQgaW5jbHVkZXMKKyAgYWxpZ25tZW50IHdhc3RhZ2UgYXMgYmVpbmcgaW4gdXNlLCB0aGlzIGZpZ3VyZSBtYXkgYmUgZ3JlYXRlciB0aGFuCisgIHplcm8gZXZlbiB3aGVuIG5vIHVzZXItbGV2ZWwgY2h1bmtzIGFyZSBhbGxvY2F0ZWQuCisKKyAgVGhlIHJlcG9ydGVkIGN1cnJlbnQgYW5kIG1heGltdW0gc3lzdGVtIG1lbW9yeSBjYW4gYmUgaW5hY2N1cmF0ZSBpZgorICBhIHByb2dyYW0gbWFrZXMgb3RoZXIgY2FsbHMgdG8gc3lzdGVtIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucworICAobm9ybWFsbHkgc2Jyaykgb3V0c2lkZSBvZiBtYWxsb2MuCisKKyAgbWFsbG9jX3N0YXRzIHByaW50cyBvbmx5IHRoZSBtb3N0IGNvbW1vbmx5IGludGVyZXN0aW5nIHN0YXRpc3RpY3MuCisgIE1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIG9idGFpbmVkIGJ5IGNhbGxpbmcgbWFsbGluZm8uCisqLwordm9pZCAgZGxtYWxsb2Nfc3RhdHModm9pZCk7CisKKyNlbmRpZiAvKiBPTkxZX01TUEFDRVMgKi8KKworLyoKKyAgbWFsbG9jX3VzYWJsZV9zaXplKHZvaWQqIHApOworCisgIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB5b3UgY2FuIGFjdHVhbGx5IHVzZSBpbgorICBhbiBhbGxvY2F0ZWQgY2h1bmssIHdoaWNoIG1heSBiZSBtb3JlIHRoYW4geW91IHJlcXVlc3RlZCAoYWx0aG91Z2gKKyAgb2Z0ZW4gbm90KSBkdWUgdG8gYWxpZ25tZW50IGFuZCBtaW5pbXVtIHNpemUgY29uc3RyYWludHMuCisgIFlvdSBjYW4gdXNlIHRoaXMgbWFueSBieXRlcyB3aXRob3V0IHdvcnJ5aW5nIGFib3V0CisgIG92ZXJ3cml0aW5nIG90aGVyIGFsbG9jYXRlZCBvYmplY3RzLiBUaGlzIGlzIG5vdCBhIHBhcnRpY3VsYXJseSBncmVhdAorICBwcm9ncmFtbWluZyBwcmFjdGljZS4gbWFsbG9jX3VzYWJsZV9zaXplIGNhbiBiZSBtb3JlIHVzZWZ1bCBpbgorICBkZWJ1Z2dpbmcgYW5kIGFzc2VydGlvbnMsIGZvciBleGFtcGxlOgorCisgIHAgPSBtYWxsb2Mobik7CisgIGFzc2VydChtYWxsb2NfdXNhYmxlX3NpemUocCkgPj0gMjU2KTsKKyovCitzaXplX3QgZGxtYWxsb2NfdXNhYmxlX3NpemUodm9pZCopOworCisKKyNpZiBNU1BBQ0VTCisKKy8qCisgIG1zcGFjZSBpcyBhbiBvcGFxdWUgdHlwZSByZXByZXNlbnRpbmcgYW4gaW5kZXBlbmRlbnQKKyAgcmVnaW9uIG9mIHNwYWNlIHRoYXQgc3VwcG9ydHMgbXNwYWNlX21hbGxvYywgZXRjLgorKi8KK3R5cGVkZWYgdm9pZCogbXNwYWNlOworCisvKgorICBjcmVhdGVfbXNwYWNlIGNyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgaW5kZXBlbmRlbnQgc3BhY2Ugd2l0aCB0aGUKKyAgZ2l2ZW4gaW5pdGlhbCBjYXBhY2l0eSwgb3IsIGlmIDAsIHRoZSBkZWZhdWx0IGdyYW51bGFyaXR5IHNpemUuICBJdAorICByZXR1cm5zIG51bGwgaWYgdGhlcmUgaXMgbm8gc3lzdGVtIG1lbW9yeSBhdmFpbGFibGUgdG8gY3JlYXRlIHRoZQorICBzcGFjZS4gIElmIGFyZ3VtZW50IGxvY2tlZCBpcyBub24temVybywgdGhlIHNwYWNlIHVzZXMgYSBzZXBhcmF0ZQorICBsb2NrIHRvIGNvbnRyb2wgYWNjZXNzLiBUaGUgY2FwYWNpdHkgb2YgdGhlIHNwYWNlIHdpbGwgZ3JvdworICBkeW5hbWljYWxseSBhcyBuZWVkZWQgdG8gc2VydmljZSBtc3BhY2VfbWFsbG9jIHJlcXVlc3RzLiAgWW91IGNhbgorICBjb250cm9sIHRoZSBzaXplcyBvZiBpbmNyZW1lbnRhbCBpbmNyZWFzZXMgb2YgdGhpcyBzcGFjZSBieQorICBjb21waWxpbmcgd2l0aCBhIGRpZmZlcmVudCBERUZBVUxUX0dSQU5VTEFSSVRZIG9yIGR5bmFtaWNhbGx5CisgIHNldHRpbmcgd2l0aCBtYWxsb3B0KE1fR1JBTlVMQVJJVFksIHZhbHVlKS4KKyovCittc3BhY2UgY3JlYXRlX21zcGFjZShzaXplX3QgY2FwYWNpdHksIGludCBsb2NrZWQpOworCisvKgorICBkZXN0cm95X21zcGFjZSBkZXN0cm95cyB0aGUgZ2l2ZW4gc3BhY2UsIGFuZCBhdHRlbXB0cyB0byByZXR1cm4gYWxsCisgIG9mIGl0cyBtZW1vcnkgYmFjayB0byB0aGUgc3lzdGVtLCByZXR1cm5pbmcgdGhlIHRvdGFsIG51bWJlciBvZgorICBieXRlcyBmcmVlZC4gQWZ0ZXIgZGVzdHJ1Y3Rpb24sIHRoZSByZXN1bHRzIG9mIGFjY2VzcyB0byBhbGwgbWVtb3J5CisgIHVzZWQgYnkgdGhlIHNwYWNlIGJlY29tZSB1bmRlZmluZWQuCisqLworc2l6ZV90IGRlc3Ryb3lfbXNwYWNlKG1zcGFjZSBtc3ApOworCisvKgorICBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSB1c2VzIHRoZSBtZW1vcnkgc3VwcGxpZWQgYXMgdGhlIGluaXRpYWwgYmFzZQorICBvZiBhIG5ldyBtc3BhY2UuIFBhcnQgKGxlc3MgdGhhbiAxMjgqc2l6ZW9mKHNpemVfdCkgYnl0ZXMpIG9mIHRoaXMKKyAgc3BhY2UgaXMgdXNlZCBmb3IgYm9va2tlZXBpbmcsIHNvIHRoZSBjYXBhY2l0eSBtdXN0IGJlIGF0IGxlYXN0IHRoaXMKKyAgbGFyZ2UuIChPdGhlcndpc2UgMCBpcyByZXR1cm5lZC4pIFdoZW4gdGhpcyBpbml0aWFsIHNwYWNlIGlzCisgIGV4aGF1c3RlZCwgYWRkaXRpb25hbCBtZW1vcnkgd2lsbCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBzeXN0ZW0uCisgIERlc3Ryb3lpbmcgdGhpcyBzcGFjZSB3aWxsIGRlYWxsb2NhdGUgYWxsIGFkZGl0aW9uYWxseSBhbGxvY2F0ZWQKKyAgc3BhY2UgKGlmIHBvc3NpYmxlKSBidXQgbm90IHRoZSBpbml0aWFsIGJhc2UuCisqLworbXNwYWNlIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlKHZvaWQqIGJhc2UsIHNpemVfdCBjYXBhY2l0eSwgaW50IGxvY2tlZCk7CisKKy8qCisgIG1zcGFjZV9tbWFwX2xhcmdlX2NodW5rcyBjb250cm9scyB3aGV0aGVyIHJlcXVlc3RzIGZvciBsYXJnZSBjaHVua3MKKyAgYXJlIGFsbG9jYXRlZCBpbiB0aGVpciBvd24gbW1hcHBlZCByZWdpb25zLCBzZXBhcmF0ZSBmcm9tIG90aGVycyBpbgorICB0aGlzIG1zcGFjZS4gQnkgZGVmYXVsdCB0aGlzIGlzIGVuYWJsZWQsIHdoaWNoIHJlZHVjZXMKKyAgZnJhZ21lbnRhdGlvbi4gSG93ZXZlciwgc3VjaCBjaHVua3MgYXJlIG5vdCBuZWNlc3NhcmlseSByZWxlYXNlZCB0bworICB0aGUgc3lzdGVtIHVwb24gZGVzdHJveV9tc3BhY2UuICBEaXNhYmxpbmcgYnkgc2V0dGluZyB0byBmYWxzZSBtYXkKKyAgaW5jcmVhc2UgZnJhZ21lbnRhdGlvbiwgYnV0IGF2b2lkcyBsZWFrYWdlIHdoZW4gcmVseWluZyBvbgorICBkZXN0cm95X21zcGFjZSB0byByZWxlYXNlIGFsbCBtZW1vcnkgYWxsb2NhdGVkIHVzaW5nIHRoaXMgc3BhY2UuCisqLworaW50IG1zcGFjZV9tbWFwX2xhcmdlX2NodW5rcyhtc3BhY2UgbXNwLCBpbnQgZW5hYmxlKTsKKworCisvKgorICBtc3BhY2VfbWFsbG9jIGJlaGF2ZXMgYXMgbWFsbG9jLCBidXQgb3BlcmF0ZXMgd2l0aGluCisgIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkKiBtc3BhY2VfbWFsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBieXRlcyk7CisKKy8qCisgIG1zcGFjZV9mcmVlIGJlaGF2ZXMgYXMgZnJlZSwgYnV0IG9wZXJhdGVzIHdpdGhpbgorICB0aGUgZ2l2ZW4gc3BhY2UuCisKKyAgSWYgY29tcGlsZWQgd2l0aCBGT09URVJTPT0xLCBtc3BhY2VfZnJlZSBpcyBub3QgYWN0dWFsbHkgbmVlZGVkLgorICBmcmVlIG1heSBiZSBjYWxsZWQgaW5zdGVhZCBvZiBtc3BhY2VfZnJlZSBiZWNhdXNlIGZyZWVkIGNodW5rcyBmcm9tCisgIGFueSBzcGFjZSBhcmUgaGFuZGxlZCBieSB0aGVpciBvcmlnaW5hdGluZyBzcGFjZXMuCisqLwordm9pZCBtc3BhY2VfZnJlZShtc3BhY2UgbXNwLCB2b2lkKiBtZW0pOworCisvKgorICBtc3BhY2VfcmVhbGxvYyBiZWhhdmVzIGFzIHJlYWxsb2MsIGJ1dCBvcGVyYXRlcyB3aXRoaW4KKyAgdGhlIGdpdmVuIHNwYWNlLgorCisgIElmIGNvbXBpbGVkIHdpdGggRk9PVEVSUz09MSwgbXNwYWNlX3JlYWxsb2MgaXMgbm90IGFjdHVhbGx5CisgIG5lZWRlZC4gIHJlYWxsb2MgbWF5IGJlIGNhbGxlZCBpbnN0ZWFkIG9mIG1zcGFjZV9yZWFsbG9jIGJlY2F1c2UKKyAgcmVhbGxvY2VkIGNodW5rcyBmcm9tIGFueSBzcGFjZSBhcmUgaGFuZGxlZCBieSB0aGVpciBvcmlnaW5hdGluZworICBzcGFjZXMuCisqLwordm9pZCogbXNwYWNlX3JlYWxsb2MobXNwYWNlIG1zcCwgdm9pZCogbWVtLCBzaXplX3QgbmV3c2l6ZSk7CisKKy8qCisgIG1zcGFjZV9jYWxsb2MgYmVoYXZlcyBhcyBjYWxsb2MsIGJ1dCBvcGVyYXRlcyB3aXRoaW4KKyAgdGhlIGdpdmVuIHNwYWNlLgorKi8KK3ZvaWQqIG1zcGFjZV9jYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpOworCisvKgorICBtc3BhY2VfbWVtYWxpZ24gYmVoYXZlcyBhcyBtZW1hbGlnbiwgYnV0IG9wZXJhdGVzIHdpdGhpbgorICB0aGUgZ2l2ZW4gc3BhY2UuCisqLwordm9pZCogbXNwYWNlX21lbWFsaWduKG1zcGFjZSBtc3AsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcyk7CisKKy8qCisgIG1zcGFjZV9pbmRlcGVuZGVudF9jYWxsb2MgYmVoYXZlcyBhcyBpbmRlcGVuZGVudF9jYWxsb2MsIGJ1dAorICBvcGVyYXRlcyB3aXRoaW4gdGhlIGdpdmVuIHNwYWNlLgorKi8KK3ZvaWQqKiBtc3BhY2VfaW5kZXBlbmRlbnRfY2FsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLAorCQkJCSBzaXplX3QgZWxlbV9zaXplLCB2b2lkKiBjaHVua3NbXSk7CisKKy8qCisgIG1zcGFjZV9pbmRlcGVuZGVudF9jb21hbGxvYyBiZWhhdmVzIGFzIGluZGVwZW5kZW50X2NvbWFsbG9jLCBidXQKKyAgb3BlcmF0ZXMgd2l0aGluIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkKiogbXNwYWNlX2luZGVwZW5kZW50X2NvbWFsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLAorCQkJCSAgIHNpemVfdCBzaXplc1tdLCB2b2lkKiBjaHVua3NbXSk7CisKKy8qCisgIG1zcGFjZV9mb290cHJpbnQoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2J0YWluZWQgZnJvbSB0aGUKKyAgc3lzdGVtIGZvciB0aGlzIHNwYWNlLgorKi8KK3NpemVfdCBtc3BhY2VfZm9vdHByaW50KG1zcGFjZSBtc3ApOworCisvKgorICBtc3BhY2VfbWF4X2Zvb3RwcmludCgpIHJldHVybnMgdGhlIHBlYWsgbnVtYmVyIG9mIGJ5dGVzIG9idGFpbmVkIGZyb20gdGhlCisgIHN5c3RlbSBmb3IgdGhpcyBzcGFjZS4KKyovCitzaXplX3QgbXNwYWNlX21heF9mb290cHJpbnQobXNwYWNlIG1zcCk7CisKKworI2lmICFOT19NQUxMSU5GTworLyoKKyAgbXNwYWNlX21hbGxpbmZvIGJlaGF2ZXMgYXMgbWFsbGluZm8sIGJ1dCByZXBvcnRzIHByb3BlcnRpZXMgb2YKKyAgdGhlIGdpdmVuIHNwYWNlLgorKi8KK3N0cnVjdCBtYWxsaW5mbyBtc3BhY2VfbWFsbGluZm8obXNwYWNlIG1zcCk7CisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8KKworLyoKKyAgbWFsbG9jX3VzYWJsZV9zaXplKHZvaWQqIHApIGJlaGF2ZXMgdGhlIHNhbWUgYXMgbWFsbG9jX3VzYWJsZV9zaXplOworKi8KKyAgc2l6ZV90IG1zcGFjZV91c2FibGVfc2l6ZSh2b2lkKiBtZW0pOworCisvKgorICBtc3BhY2VfbWFsbG9jX3N0YXRzIGJlaGF2ZXMgYXMgbWFsbG9jX3N0YXRzLCBidXQgcmVwb3J0cworICBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkIG1zcGFjZV9tYWxsb2Nfc3RhdHMobXNwYWNlIG1zcCk7CisKKy8qCisgIG1zcGFjZV90cmltIGJlaGF2ZXMgYXMgbWFsbG9jX3RyaW0sIGJ1dAorICBvcGVyYXRlcyB3aXRoaW4gdGhlIGdpdmVuIHNwYWNlLgorKi8KK2ludCBtc3BhY2VfdHJpbShtc3BhY2UgbXNwLCBzaXplX3QgcGFkKTsKKworLyoKKyAgQW4gYWxpYXMgZm9yIG1hbGxvcHQuCisqLworaW50IG1zcGFjZV9tYWxsb3B0KGludCwgaW50KTsKKworI2VuZGlmIC8qIE1TUEFDRVMgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9OyAgLyogZW5kIG9mIGV4dGVybiAiQyIgKi8KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisvKgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgVG8gbWFrZSBhIGZ1bGx5IGN1c3RvbWl6YWJsZSBtYWxsb2MuaCBoZWFkZXIgZmlsZSwgY3V0IGV2ZXJ5dGhpbmcKKyAgYWJvdmUgdGhpcyBsaW5lLCBwdXQgaW50byBmaWxlIG1hbGxvYy5oLCBlZGl0IHRvIHN1aXQsIGFuZCAjaW5jbHVkZSBpdAorICBvbiB0aGUgbmV4dCBsaW5lLCBhcyB3ZWxsIGFzIGluIHByb2dyYW1zIHRoYXQgdXNlIHRoaXMgbWFsbG9jLgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCisKKy8qICNpbmNsdWRlICJtYWxsb2MuaCIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaW50ZXJuYWwgI2luY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmZGVmIFdJTjMyCisjaWZuZGVmIF9fR05VQ19fCisjcHJhZ21hIHdhcm5pbmcoIGRpc2FibGUgOiA0MTQ2ICkgLyogbm8gInVuc2lnbmVkIiB3YXJuaW5ncyAqLworI2VuZGlmCisjZW5kaWYgLyogV0lOMzIgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+ICAgICAgIC8qIGZvciBwcmludGluZyBpbiBtYWxsb2Nfc3RhdHMgKi8KKworI2lmbmRlZiBMQUNLU19FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4gICAgICAgLyogZm9yIE1BTExPQ19GQUlMVVJFX0FDVElPTiAqLworI2VuZGlmIC8qIExBQ0tTX0VSUk5PX0ggKi8KKyNpZiBGT09URVJTCisjaW5jbHVkZSA8dGltZS5oPiAgICAgICAgLyogZm9yIG1hZ2ljIGluaXRpYWxpemF0aW9uICovCisjZW5kaWYgLyogRk9PVEVSUyAqLworI2lmbmRlZiBMQUNLU19TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPiAgICAgIC8qIGZvciBhYm9ydCgpICovCisjZW5kaWYgLyogTEFDS1NfU1RETElCX0ggKi8KKyNpZmRlZiBERUJVRworI2lmIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFCisjZGVmaW5lIGFzc2VydCh4KSBpZighKHgpKSBBQk9SVAorI2Vsc2UgLyogQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgKi8KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZiAvKiBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAqLworI2Vsc2UgIC8qIERFQlVHICovCisjaWZuZGVmIGFzc2VydAorI2RlZmluZSBhc3NlcnQoeCkKKyNlbmRpZgorI2RlZmluZSBERUJVRyAwCisjZW5kaWYgLyogREVCVUcgKi8KKyNpZm5kZWYgTEFDS1NfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4gICAgICAvKiBmb3IgbWVtc2V0IGV0YyAqLworI2VuZGlmICAvKiBMQUNLU19TVFJJTkdfSCAqLworI2lmIFVTRV9CVUlMVElOX0ZGUworI2lmbmRlZiBMQUNLU19TVFJJTkdTX0gKKyNpbmNsdWRlIDxzdHJpbmdzLmg+ICAgICAvKiBmb3IgZmZzICovCisjZW5kaWYgLyogTEFDS1NfU1RSSU5HU19IICovCisjZW5kaWYgLyogVVNFX0JVSUxUSU5fRkZTICovCisjaWYgSEFWRV9NTUFQCisjaWZuZGVmIExBQ0tTX1NZU19NTUFOX0gKKyNpbmNsdWRlIDxzeXMvbW1hbi5oPiAgICAvKiBmb3IgbW1hcCAqLworI2VuZGlmIC8qIExBQ0tTX1NZU19NTUFOX0ggKi8KKyNpZm5kZWYgTEFDS1NfRkNOVExfSAorI2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYgLyogTEFDS1NfRkNOVExfSCAqLworI2VuZGlmIC8qIEhBVkVfTU1BUCAqLworI2lmbmRlZiBMQUNLU19VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPiAgICAgLyogZm9yIHNicmssIHN5c2NvbmYgKi8KKyNlbHNlIC8qIExBQ0tTX1VOSVNURF9IICovCisjaWYgIWRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fT3BlbkJTRF9fKSAmJiAhZGVmaW5lZChfX05ldEJTRF9fKQorZXh0ZXJuIHZvaWQqICAgICBzYnJrKHB0cmRpZmZfdCk7CisjZW5kaWYgLyogRnJlZUJTRCBldGMgKi8KKyNlbmRpZiAvKiBMQUNLU19VTklTVERfSCAqLworCisvKiBEZWNsYXJhdGlvbnMgZm9yIGxvY2tpbmcgKi8KKyNpZiBVU0VfTE9DS1MKKyNpZm5kZWYgV0lOMzIKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaWYgZGVmaW5lZCAoX19TVlI0KSAmJiBkZWZpbmVkIChfX3N1bikgIC8qIHNvbGFyaXMgKi8KKyNpbmNsdWRlIDx0aHJlYWQuaD4KKyNlbmRpZiAvKiBzb2xhcmlzICovCisjZWxzZQorI2lmbmRlZiBfTV9BTUQ2NAorLyogVGhlc2UgYXJlIGFscmVhZHkgZGVmaW5lZCBvbiBBTUQ2NCBidWlsZHMgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKyNpZm5kZWYgX19NSU5HVzMyX18KK0xPTkcgX19jZGVjbCBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UoTE9ORyB2b2xhdGlsZSAqRGVzdCwgTE9ORyBFeGNoYW5nZSwgTE9ORyBDb21wKTsKK0xPTkcgX19jZGVjbCBfSW50ZXJsb2NrZWRFeGNoYW5nZShMT05HIHZvbGF0aWxlICpUYXJnZXQsIExPTkcgVmFsdWUpOworI2VuZGlmCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworI2VuZGlmIC8qIF9NX0FNRDY0ICovCisjaWZuZGVmIF9fTUlOR1czMl9fCisjcHJhZ21hIGludHJpbnNpYyAoX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKQorI3ByYWdtYSBpbnRyaW5zaWMgKF9JbnRlcmxvY2tlZEV4Y2hhbmdlKQorI2Vsc2UKKyAgLyogLS1bIHN0YXJ0IEdDQyBjb21wYXRpYmlsaXR5IF0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAqIENvbXBhdGliaWxpdHkgPGludHJpbl94ODYuaD4gaGVhZGVyIGZvciBHQ0MgLS0gR0NDIGVxdWl2YWxlbnRzIG9mIGludHJpbnNpYworICAgKiBNaWNyb3NvZnQgVmlzdWFsIEMrKyBmdW5jdGlvbnMuIE9yaWdpbmFsbHkgZGV2ZWxvcGVkIGZvciB0aGUgUmVhY3RPUworICAgKiAoPGh0dHA6Ly93d3cucmVhY3Rvcy5vcmcvPikgYW5kIFRpbnlLcm5sICg8aHR0cDovL3d3dy50aW55a3JubC5vcmcvPikKKyAgICogcHJvamVjdHMuCisgICAqCisgICAqIENvcHlyaWdodCAoYykgMjAwNiBLSks6Okh5cGVyaW9uIDxoYWNrYnVubnlAcmVhY3Rvcy5jb20+CisgICAqCisgICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgICAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAgICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgICAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICAgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICAgKgorICAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICAgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAgICoKKyAgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAgICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgICAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICAgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgICAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgICAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAgICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICAgKi8KKworICAvKioqIEF0b21pYyBvcGVyYXRpb25zICoqKi8KKyAgI2lmIChfX0dOVUNfXyAqIDEwMDAwICsgX19HTlVDX01JTk9SX18gKiAxMDAgKyBfX0dOVUNfUEFUQ0hMRVZFTF9fKSA+IDQwMTAwCisgICAgI2RlZmluZSBfUmVhZFdyaXRlQmFycmllcigpIF9fc3luY19zeW5jaHJvbml6ZSgpCisgICNlbHNlCisgICAgc3RhdGljIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIGxvbmcgX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0KHZvbGF0aWxlIGxvbmcgKiBjb25zdCBUYXJnZXQsIGNvbnN0IGxvbmcgVmFsdWUpCisgICAgeworICAgICAgbG9uZyByZXM7CisgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygieGNoZyV6MCAlMiwgJTAiIDogIj1nIiAoKihUYXJnZXQpKSwgIj1yIiAocmVzKSA6ICIxIiAoVmFsdWUpKTsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgIHN0YXRpYyB2b2lkIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9NZW1vcnlCYXJyaWVyKHZvaWQpCisgICAgeworICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIiIgOiA6IDogIm1lbW9yeSIpOworICAgIH0KKyAgICAjZGVmaW5lIF9SZWFkV3JpdGVCYXJyaWVyKCkgX01lbW9yeUJhcnJpZXIoKQorICAjZW5kaWYKKyAgLyogQlVHQlVHOiBHQ0Mgb25seSBzdXBwb3J0cyBmdWxsIGJhcnJpZXJzICovCisgIHN0YXRpYyBfX2lubGluZV9fIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBsb25nIF9JbnRlcmxvY2tlZEV4Y2hhbmdlKHZvbGF0aWxlIGxvbmcgKiBjb25zdCBUYXJnZXQsIGNvbnN0IGxvbmcgVmFsdWUpCisgIHsKKyAgICAvKiBOT1RFOiBfX3N5bmNfbG9ja190ZXN0X2FuZF9zZXQgd291bGQgYmUgYW4gYWNxdWlyZSBiYXJyaWVyLCBzbyB3ZSBmb3JjZSBhIGZ1bGwgYmFycmllciAqLworICAgIF9SZWFkV3JpdGVCYXJyaWVyKCk7CisgICAgcmV0dXJuIF9fc3luY19sb2NrX3Rlc3RfYW5kX3NldChUYXJnZXQsIFZhbHVlKTsKKyAgfQorICAvKiAtLVsgZW5kIEdDQyBjb21wYXRpYmlsaXR5IF0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZW5kaWYKKyNkZWZpbmUgaW50ZXJsb2NrZWRjb21wYXJlZXhjaGFuZ2UgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlCisjZGVmaW5lIGludGVybG9ja2VkZXhjaGFuZ2UgX0ludGVybG9ja2VkRXhjaGFuZ2UKKyNlbmRpZiAvKiBXaW4zMiAqLworI2VuZGlmIC8qIFVTRV9MT0NLUyAqLworCisvKiBEZWNsYXJhdGlvbnMgZm9yIGJpdCBzY2FubmluZyBvbiB3aW4zMiAqLworI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSPj0xMzAwCisjaWZuZGVmIEJpdFNjYW5Gb3J3YXJkCS8qIFRyeSB0byBhdm9pZCBwdWxsaW5nIGluIFdpbk5ULmggKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KK3Vuc2lnbmVkIGNoYXIgX0JpdFNjYW5Gb3J3YXJkKHVuc2lnbmVkIGxvbmcgKmluZGV4LCB1bnNpZ25lZCBsb25nIG1hc2spOwordW5zaWduZWQgY2hhciBfQml0U2NhblJldmVyc2UodW5zaWduZWQgbG9uZyAqaW5kZXgsIHVuc2lnbmVkIGxvbmcgbWFzayk7CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZGVmaW5lIEJpdFNjYW5Gb3J3YXJkIF9CaXRTY2FuRm9yd2FyZAorI2RlZmluZSBCaXRTY2FuUmV2ZXJzZSBfQml0U2NhblJldmVyc2UKKyNwcmFnbWEgaW50cmluc2ljKF9CaXRTY2FuRm9yd2FyZCkKKyNwcmFnbWEgaW50cmluc2ljKF9CaXRTY2FuUmV2ZXJzZSkKKyNlbmRpZiAvKiBCaXRTY2FuRm9yd2FyZCAqLworI2VuZGlmIC8qIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSPj0xMzAwICovCisKKyNpZm5kZWYgV0lOMzIKKyNpZm5kZWYgbWFsbG9jX2dldHBhZ2VzaXplCisjICBpZmRlZiBfU0NfUEFHRVNJWkUgICAgICAgICAvKiBzb21lIFNWUjQgc3lzdGVtcyBvbWl0IGFuIHVuZGVyc2NvcmUgKi8KKyMgICAgaWZuZGVmIF9TQ19QQUdFX1NJWkUKKyMgICAgICBkZWZpbmUgX1NDX1BBR0VfU0laRSBfU0NfUEFHRVNJWkUKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZmRlZiBfU0NfUEFHRV9TSVpFCisjICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgc3lzY29uZihfU0NfUEFHRV9TSVpFKQorIyAgZWxzZQorIyAgICBpZiBkZWZpbmVkKEJTRCkgfHwgZGVmaW5lZChER1VYKSB8fCBkZWZpbmVkKEhBVkVfR0VUUEFHRVNJWkUpCisgICAgICAgZXh0ZXJuIHNpemVfdCBnZXRwYWdlc2l6ZSgpOworIyAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgZ2V0cGFnZXNpemUoKQorIyAgICBlbHNlCisjICAgICAgaWZkZWYgV0lOMzIgLyogdXNlIHN1cHBsaWVkIGVtdWxhdGlvbiBvZiBnZXRwYWdlc2l6ZSAqLworIyAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBnZXRwYWdlc2l6ZSgpCisjICAgICAgZWxzZQorIyAgICAgICAgaWZuZGVmIExBQ0tTX1NZU19QQVJBTV9ICisjICAgICAgICAgIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorIyAgICAgICAgZW5kaWYKKyMgICAgICAgIGlmZGVmIEVYRUNfUEFHRVNJWkUKKyMgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBFWEVDX1BBR0VTSVpFCisjICAgICAgICBlbHNlCisjICAgICAgICAgIGlmZGVmIE5CUEcKKyMgICAgICAgICAgICBpZm5kZWYgQ0xTSVpFCisjICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIE5CUEcKKyMgICAgICAgICAgICBlbHNlCisjICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIChOQlBHICogQ0xTSVpFKQorIyAgICAgICAgICAgIGVuZGlmCisjICAgICAgICAgIGVsc2UKKyMgICAgICAgICAgICBpZmRlZiBOQlBDCisjICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIE5CUEMKKyMgICAgICAgICAgICBlbHNlCisjICAgICAgICAgICAgICBpZmRlZiBQQUdFU0laRQorIyAgICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIFBBR0VTSVpFCisjICAgICAgICAgICAgICBlbHNlIC8qIGp1c3QgZ3Vlc3MgKi8KKyMgICAgICAgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSAoKHNpemVfdCk0MDk2VSkKKyMgICAgICAgICAgICAgIGVuZGlmCisjICAgICAgICAgICAgZW5kaWYKKyMgICAgICAgICAgZW5kaWYKKyMgICAgICAgIGVuZGlmCisjICAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKyNlbmRpZgorCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBzaXplX3QgYW5kIGFsaWdubWVudCBwcm9wZXJ0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFRoZSBieXRlIGFuZCBiaXQgc2l6ZSBvZiBhIHNpemVfdCAqLworI2RlZmluZSBTSVpFX1RfU0laRSAgICAgICAgIChzaXplb2Yoc2l6ZV90KSkKKyNkZWZpbmUgU0laRV9UX0JJVFNJWkUgICAgICAoc2l6ZW9mKHNpemVfdCkgPDwgMykKKworLyogU29tZSBjb25zdGFudHMgY29lcmNlZCB0byBzaXplX3QgKi8KKy8qIEFubm95aW5nIGJ1dCBuZWNlc3NhcnkgdG8gYXZvaWQgZXJyb3JzIG9uIHNvbWUgcGxhdGZvcm1zICovCisjZGVmaW5lIFNJWkVfVF9aRVJPICAgICAgICAgKChzaXplX3QpMCkKKyNkZWZpbmUgU0laRV9UX09ORSAgICAgICAgICAoKHNpemVfdCkxKQorI2RlZmluZSBTSVpFX1RfVFdPICAgICAgICAgICgoc2l6ZV90KTIpCisjZGVmaW5lIFNJWkVfVF9GT1VSICAgICAgICAgKChzaXplX3QpNCkKKyNkZWZpbmUgVFdPX1NJWkVfVF9TSVpFUyAgICAoU0laRV9UX1NJWkU8PDEpCisjZGVmaW5lIEZPVVJfU0laRV9UX1NJWkVTICAgKFNJWkVfVF9TSVpFPDwyKQorI2RlZmluZSBTSVhfU0laRV9UX1NJWkVTICAgIChGT1VSX1NJWkVfVF9TSVpFUytUV09fU0laRV9UX1NJWkVTKQorI2RlZmluZSBIQUxGX01BWF9TSVpFX1QgICAgIChNQVhfU0laRV9UIC8gMlUpCisKKy8qIFRoZSBiaXQgbWFzayB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIE1BTExPQ19BTElHTk1FTlQgKi8KKyNkZWZpbmUgQ0hVTktfQUxJR05fTUFTSyAgICAoTUFMTE9DX0FMSUdOTUVOVCAtIFNJWkVfVF9PTkUpCisKKy8qIFRydWUgaWYgYWRkcmVzcyBhIGhhcyBhY2NlcHRhYmxlIGFsaWdubWVudCAqLworI2RlZmluZSBpc19hbGlnbmVkKEEpICAgICAgICgoKHNpemVfdCkoKEEpKSAmIChDSFVOS19BTElHTl9NQVNLKSkgPT0gMCkKKworLyogdGhlIG51bWJlciBvZiBieXRlcyB0byBvZmZzZXQgYW4gYWRkcmVzcyB0byBhbGlnbiBpdCAqLworI2RlZmluZSBhbGlnbl9vZmZzZXQoQSlcCisgKCgoKHNpemVfdCkoQSkgJiBDSFVOS19BTElHTl9NQVNLKSA9PSAwKT8gMCA6XAorICAoKE1BTExPQ19BTElHTk1FTlQgLSAoKHNpemVfdCkoQSkgJiBDSFVOS19BTElHTl9NQVNLKSkgJiBDSFVOS19BTElHTl9NQVNLKSkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTU1BUCBwcmVsaW1pbmFyaWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgIElmIEhBVkVfTU9SRUNPUkUgb3IgSEFWRV9NTUFQIGFyZSBmYWxzZSwgd2UganVzdCBkZWZpbmUgY2FsbHMgYW5kCisgICBjaGVja3MgdG8gZmFpbCBzbyBjb21waWxlciBvcHRpbWl6ZXIgY2FuIGRlbGV0ZSBjb2RlIHJhdGhlciB0aGFuCisgICB1c2luZyBzbyBtYW55ICIjaWYicy4KKyovCisKKworLyogTU9SRUNPUkUgYW5kIE1NQVAgbXVzdCByZXR1cm4gTUZBSUwgb24gZmFpbHVyZSAqLworI2RlZmluZSBNRkFJTCAgICAgICAgICAgICAgICAoKHZvaWQqKShNQVhfU0laRV9UKSkKKyNkZWZpbmUgQ01GQUlMICAgICAgICAgICAgICAgKChjaGFyKikoTUZBSUwpKSAvKiBkZWZpbmVkIGZvciBjb252ZW5pZW5jZSAqLworCisjaWYgSEFWRV9NTUFQCisKKyNpZm5kZWYgV0lOMzIKKyNkZWZpbmUgTVVOTUFQX0RFRkFVTFQoYSwgcykgIG11bm1hcCgoYSksIChzKSkKKyNkZWZpbmUgTU1BUF9QUk9UICAgICAgICAgICAgKFBST1RfUkVBRHxQUk9UX1dSSVRFKQorI2lmICFkZWZpbmVkKE1BUF9BTk9OWU1PVVMpICYmIGRlZmluZWQoTUFQX0FOT04pCisjZGVmaW5lIE1BUF9BTk9OWU1PVVMgICAgICAgIE1BUF9BTk9OCisjZW5kaWYgLyogTUFQX0FOT04gKi8KKyNpZmRlZiBNQVBfQU5PTllNT1VTCisjZGVmaW5lIE1NQVBfRkxBR1MgICAgICAgICAgIChNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VTKQorI2RlZmluZSBNTUFQX0RFRkFVTFQocykgICAgICAgbW1hcCgwLCAocyksIE1NQVBfUFJPVCwgTU1BUF9GTEFHUywgLTEsIDApCisjZWxzZSAvKiBNQVBfQU5PTllNT1VTICovCisvKgorICAgTmVhcmx5IGFsbCB2ZXJzaW9ucyBvZiBtbWFwIHN1cHBvcnQgTUFQX0FOT05ZTU9VUywgc28gdGhlIGZvbGxvd2luZworICAgaXMgdW5saWtlbHkgdG8gYmUgbmVlZGVkLCBidXQgaXMgc3VwcGxpZWQganVzdCBpbiBjYXNlLgorKi8KKyNkZWZpbmUgTU1BUF9GTEFHUyAgICAgICAgICAgKE1BUF9QUklWQVRFKQorc3RhdGljIGludCBkZXZfemVyb19mZCA9IC0xOyAvKiBDYWNoZWQgZmlsZSBkZXNjcmlwdG9yIGZvciAvZGV2L3plcm8uICovCisjZGVmaW5lIE1NQVBfREVGQVVMVChzKSAoKGRldl96ZXJvX2ZkIDwgMCkgPyBcCisJICAgKGRldl96ZXJvX2ZkID0gb3BlbigiL2Rldi96ZXJvIiwgT19SRFdSKSwgXAorCSAgICBtbWFwKDAsIChzKSwgTU1BUF9QUk9ULCBNTUFQX0ZMQUdTLCBkZXZfemVyb19mZCwgMCkpIDogXAorCSAgICBtbWFwKDAsIChzKSwgTU1BUF9QUk9ULCBNTUFQX0ZMQUdTLCBkZXZfemVyb19mZCwgMCkpCisjZW5kaWYgLyogTUFQX0FOT05ZTU9VUyAqLworCisjZGVmaW5lIERJUkVDVF9NTUFQX0RFRkFVTFQocykgTU1BUF9ERUZBVUxUKHMpCisKKyNlbHNlIC8qIFdJTjMyICovCisKKy8qIFdpbjMyIE1NQVAgdmlhIFZpcnR1YWxBbGxvYyAqLworc3RhdGljIEZPUkNFSU5MSU5FIHZvaWQqIHdpbjMybW1hcChzaXplX3Qgc2l6ZSkgeworICB2b2lkKiBwdHIgPSBWaXJ0dWFsQWxsb2MoMCwgc2l6ZSwgTUVNX1JFU0VSVkV8TUVNX0NPTU1JVCwgUEFHRV9SRUFEV1JJVEUpOworICByZXR1cm4gKHB0ciAhPSAwKT8gcHRyOiBNRkFJTDsKK30KKworLyogRm9yIGRpcmVjdCBNTUFQLCB1c2UgTUVNX1RPUF9ET1dOIHRvIG1pbmltaXplIGludGVyZmVyZW5jZSAqLworc3RhdGljIEZPUkNFSU5MSU5FIHZvaWQqIHdpbjMyZGlyZWN0X21tYXAoc2l6ZV90IHNpemUpIHsKKyAgdm9pZCogcHRyID0gVmlydHVhbEFsbG9jKDAsIHNpemUsIE1FTV9SRVNFUlZFfE1FTV9DT01NSVR8TUVNX1RPUF9ET1dOLAorCQkJICAgUEFHRV9SRUFEV1JJVEUpOworICByZXR1cm4gKHB0ciAhPSAwKT8gcHRyOiBNRkFJTDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyByZWxlYXNpbmcgY29hbGVzZWQgc2VnbWVudHMgKi8KK3N0YXRpYyBGT1JDRUlOTElORSBpbnQgd2luMzJtdW5tYXAodm9pZCogcHRyLCBzaXplX3Qgc2l6ZSkgeworICBNRU1PUllfQkFTSUNfSU5GT1JNQVRJT04gbWluZm87CisgIGNoYXIqIGNwdHIgPSAoY2hhciopcHRyOworICB3aGlsZSAoc2l6ZSkgeworICAgIGlmIChWaXJ0dWFsUXVlcnkoY3B0ciwgJm1pbmZvLCBzaXplb2YobWluZm8pKSA9PSAwKQorICAgICAgcmV0dXJuIC0xOworICAgIGlmIChtaW5mby5CYXNlQWRkcmVzcyAhPSBjcHRyIHx8IG1pbmZvLkFsbG9jYXRpb25CYXNlICE9IGNwdHIgfHwKKwltaW5mby5TdGF0ZSAhPSBNRU1fQ09NTUlUIHx8IG1pbmZvLlJlZ2lvblNpemUgPiBzaXplKQorICAgICAgcmV0dXJuIC0xOworICAgIGlmIChWaXJ0dWFsRnJlZShjcHRyLCAwLCBNRU1fUkVMRUFTRSkgPT0gMCkKKyAgICAgIHJldHVybiAtMTsKKyAgICBjcHRyICs9IG1pbmZvLlJlZ2lvblNpemU7CisgICAgc2l6ZSAtPSBtaW5mby5SZWdpb25TaXplOworICB9CisgIHJldHVybiAwOworfQorCisjZGVmaW5lIE1NQVBfREVGQVVMVChzKSAgICAgICAgICAgICB3aW4zMm1tYXAocykKKyNkZWZpbmUgTVVOTUFQX0RFRkFVTFQoYSwgcykgICAgICAgIHdpbjMybXVubWFwKChhKSwgKHMpKQorI2RlZmluZSBESVJFQ1RfTU1BUF9ERUZBVUxUKHMpICAgICAgd2luMzJkaXJlY3RfbW1hcChzKQorI2VuZGlmIC8qIFdJTjMyICovCisjZW5kaWYgLyogSEFWRV9NTUFQICovCisKKyNpZiBIQVZFX01SRU1BUAorI2lmbmRlZiBXSU4zMgorI2RlZmluZSBNUkVNQVBfREVGQVVMVChhZGRyLCBvc3osIG5zeiwgbXYpIG1yZW1hcCgoYWRkciksIChvc3opLCAobnN6KSwgKG12KSkKKyNlbmRpZiAvKiBXSU4zMiAqLworI2VuZGlmIC8qIEhBVkVfTVJFTUFQICovCisKKworLyoqCisgKiBEZWZpbmUgQ0FMTF9NT1JFQ09SRQorICovCisjaWYgSEFWRV9NT1JFQ09SRQorICAgICNpZmRlZiBNT1JFQ09SRQorCSNkZWZpbmUgQ0FMTF9NT1JFQ09SRShTKSAgICBNT1JFQ09SRShTKQorICAgICNlbHNlICAvKiBNT1JFQ09SRSAqLworCSNkZWZpbmUgQ0FMTF9NT1JFQ09SRShTKSAgICBNT1JFQ09SRV9ERUZBVUxUKFMpCisgICAgI2VuZGlmIC8qIE1PUkVDT1JFICovCisjZWxzZSAgLyogSEFWRV9NT1JFQ09SRSAqLworICAgICNkZWZpbmUgQ0FMTF9NT1JFQ09SRShTKSAgICAgICAgTUZBSUwKKyNlbmRpZiAvKiBIQVZFX01PUkVDT1JFICovCisKKy8qKgorICogRGVmaW5lIENBTExfTU1BUC9DQUxMX01VTk1BUC9DQUxMX0RJUkVDVF9NTUFQCisgKi8KKyNpZiBIQVZFX01NQVAKKyAgICAjZGVmaW5lIElTX01NQVBQRURfQklUICAgICAgICAgIChTSVpFX1RfT05FKQorICAgICNkZWZpbmUgVVNFX01NQVBfQklUICAgICAgICAgICAgKFNJWkVfVF9PTkUpCisKKyAgICAjaWZkZWYgTU1BUAorCSNkZWZpbmUgQ0FMTF9NTUFQKHMpICAgICAgICBNTUFQKHMpCisgICAgI2Vsc2UgLyogTU1BUCAqLworCSNkZWZpbmUgQ0FMTF9NTUFQKHMpICAgICAgICBNTUFQX0RFRkFVTFQocykKKyAgICAjZW5kaWYgLyogTU1BUCAqLworICAgICNpZmRlZiBNVU5NQVAKKwkjZGVmaW5lIENBTExfTVVOTUFQKGEsIHMpICAgTVVOTUFQKChhKSwgKHMpKQorICAgICNlbHNlIC8qIE1VTk1BUCAqLworCSNkZWZpbmUgQ0FMTF9NVU5NQVAoYSwgcykgICBNVU5NQVBfREVGQVVMVCgoYSksIChzKSkKKyAgICAjZW5kaWYgLyogTVVOTUFQICovCisgICAgI2lmZGVmIERJUkVDVF9NTUFQCisJI2RlZmluZSBDQUxMX0RJUkVDVF9NTUFQKHMpIERJUkVDVF9NTUFQKHMpCisgICAgI2Vsc2UgLyogRElSRUNUX01NQVAgKi8KKwkjZGVmaW5lIENBTExfRElSRUNUX01NQVAocykgRElSRUNUX01NQVBfREVGQVVMVChzKQorICAgICNlbmRpZiAvKiBESVJFQ1RfTU1BUCAqLworI2Vsc2UgIC8qIEhBVkVfTU1BUCAqLworICAgICNkZWZpbmUgSVNfTU1BUFBFRF9CSVQgICAgICAgICAgKFNJWkVfVF9aRVJPKQorICAgICNkZWZpbmUgVVNFX01NQVBfQklUICAgICAgICAgICAgKFNJWkVfVF9aRVJPKQorCisgICAgI2RlZmluZSBNTUFQKHMpICAgICAgICAgICAgICAgICBNRkFJTAorICAgICNkZWZpbmUgTVVOTUFQKGEsIHMpICAgICAgICAgICAgKC0xKQorICAgICNkZWZpbmUgRElSRUNUX01NQVAocykgICAgICAgICAgTUZBSUwKKyAgICAjZGVmaW5lIENBTExfRElSRUNUX01NQVAocykgICAgIERJUkVDVF9NTUFQKHMpCisgICAgI2RlZmluZSBDQUxMX01NQVAocykgICAgICAgICAgICBNTUFQKHMpCisgICAgI2RlZmluZSBDQUxMX01VTk1BUChhLCBzKSAgICAgICBNVU5NQVAoKGEpLCAocykpCisjZW5kaWYgLyogSEFWRV9NTUFQICovCisKKy8qKgorICogRGVmaW5lIENBTExfTVJFTUFQCisgKi8KKyNpZiBIQVZFX01NQVAgJiYgSEFWRV9NUkVNQVAKKyAgICAjaWZkZWYgTVJFTUFQCisJI2RlZmluZSBDQUxMX01SRU1BUChhZGRyLCBvc3osIG5zeiwgbXYpIE1SRU1BUCgoYWRkciksIChvc3opLCAobnN6KSwgKG12KSkKKyAgICAjZWxzZSAvKiBNUkVNQVAgKi8KKwkjZGVmaW5lIENBTExfTVJFTUFQKGFkZHIsIG9zeiwgbnN6LCBtdikgTVJFTUFQX0RFRkFVTFQoKGFkZHIpLCAob3N6KSwgKG5zeiksIChtdikpCisgICAgI2VuZGlmIC8qIE1SRU1BUCAqLworI2Vsc2UgIC8qIEhBVkVfTU1BUCAmJiBIQVZFX01SRU1BUCAqLworICAgICNkZWZpbmUgQ0FMTF9NUkVNQVAoYWRkciwgb3N6LCBuc3osIG12KSAgICAgTUZBSUwKKyNlbmRpZiAvKiBIQVZFX01NQVAgJiYgSEFWRV9NUkVNQVAgKi8KKworLyogbXN0YXRlIGJpdCBzZXQgaWYgY29udGluZ3VvdXMgbW9yZWNvcmUgZGlzYWJsZWQgb3IgZmFpbGVkICovCisjZGVmaW5lIFVTRV9OT05DT05USUdVT1VTX0JJVCAoNFUpCisKKy8qIHNlZ21lbnQgYml0IHNldCBpbiBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSAqLworI2RlZmluZSBFWFRFUk5fQklUICAgICAgICAgICAgKDhVKQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb2NrIHByZWxpbWluYXJpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIFdoZW4gbG9ja3MgYXJlIGRlZmluZWQsIHRoZXJlIGlzIG9uZSBnbG9iYWwgbG9jaywgcGx1cworICBvbmUgcGVyLW1zcGFjZSBsb2NrLgorCisgIFRoZSBnbG9iYWwgbG9ja19lbnN1cmVzIHRoYXQgbXBhcmFtcy5tYWdpYyBhbmQgb3RoZXIgdW5pcXVlCisgIG1wYXJhbXMgdmFsdWVzIGFyZSBpbml0aWFsaXplZCBvbmx5IG9uY2UuIEl0IGFsc28gcHJvdGVjdHMKKyAgc2VxdWVuY2VzIG9mIGNhbGxzIHRvIE1PUkVDT1JFLiAgSW4gbWFueSBjYXNlcyBzeXNfYWxsb2MgcmVxdWlyZXMKKyAgdHdvIGNhbGxzLCB0aGF0IHNob3VsZCBub3QgYmUgaW50ZXJsZWF2ZWQgd2l0aCBjYWxscyBieSBvdGhlcgorICB0aHJlYWRzLiAgVGhpcyBkb2VzIG5vdCBwcm90ZWN0IGFnYWluc3QgZGlyZWN0IGNhbGxzIHRvIE1PUkVDT1JFCisgIGJ5IG90aGVyIHRocmVhZHMgbm90IHVzaW5nIHRoaXMgbG9jaywgc28gdGhlcmUgaXMgc3RpbGwgY29kZSB0bworICBjb3BlIHRoZSBiZXN0IHdlIGNhbiBvbiBpbnRlcmZlcmVuY2UuCisKKyAgUGVyLW1zcGFjZSBsb2NrcyBzdXJyb3VuZCBjYWxscyB0byBtYWxsb2MsIGZyZWUsIGV0Yy4gIFRvIGVuYWJsZSB1c2UKKyAgaW4gbGF5ZXJlZCBleHRlbnNpb25zLCBwZXItbXNwYWNlIGxvY2tzIGFyZSByZWVudHJhbnQuCisKKyAgQmVjYXVzZSBsb2NrLXByb3RlY3RlZCByZWdpb25zIGdlbmVyYWxseSBoYXZlIGJvdW5kZWQgdGltZXMsIGl0IGlzCisgIE9LIHRvIHVzZSB0aGUgc3VwcGxpZWQgc2ltcGxlIHNwaW5sb2NrcyBpbiB0aGUgY3VzdG9tIHZlcnNpb25zIGZvcgorICB4ODYuCisKKyAgSWYgVVNFX0xPQ0tTIGlzID4gMSwgdGhlIGRlZmluaXRpb25zIG9mIGxvY2sgcm91dGluZXMgaGVyZSBhcmUKKyAgYnlwYXNzZWQsIGluIHdoaWNoIGNhc2UgeW91IHdpbGwgbmVlZCB0byBkZWZpbmUgYXQgbGVhc3QKKyAgSU5JVElBTF9MT0NLLCBBQ1FVSVJFX0xPQ0ssIFJFTEVBU0VfTE9DSyBhbmQgcG9zc2libHkgVFJZX0xPQ0sKKyAgKHdoaWNoIGlzIG5vdCB1c2VkIGluIHRoaXMgbWFsbG9jLCBidXQgY29tbW9ubHkgbmVlZGVkIGluCisgIGV4dGVuc2lvbnMuKQorKi8KKworI2lmIFVTRV9MT0NLUyA9PSAxCisKKyNpZiBVU0VfU1BJTl9MT0NLUworI2lmbmRlZiBXSU4zMgorCisvKiBDdXN0b20gcHRocmVhZC1zdHlsZSBzcGluIGxvY2tzIG9uIHg4NiBhbmQgeDY0IGZvciBnY2MgKi8KK3N0cnVjdCBwdGhyZWFkX21sb2NrX3QgeworICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbDsKKyAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGM7CisgIHZvbGF0aWxlIHB0aHJlYWRfdCB0aHJlYWRpZDsKK307CisjZGVmaW5lIE1MT0NLX1Qgc3RydWN0ICAgICAgICBwdGhyZWFkX21sb2NrX3QKKyNkZWZpbmUgQ1VSUkVOVF9USFJFQUQgICAgICAgIHB0aHJlYWRfc2VsZigpCisjZGVmaW5lIElOSVRJQUxfTE9DSyhzbCkgICAgICAobWVtc2V0KHNsLCAwLCBzaXplb2YoTUxPQ0tfVCkpLCAwKQorI2RlZmluZSBBQ1FVSVJFX0xPQ0soc2wpICAgICAgcHRocmVhZF9hY3F1aXJlX2xvY2soc2wpCisjZGVmaW5lIFJFTEVBU0VfTE9DSyhzbCkgICAgICBwdGhyZWFkX3JlbGVhc2VfbG9jayhzbCkKKyNkZWZpbmUgVFJZX0xPQ0soc2wpICAgICAgICAgIHB0aHJlYWRfdHJ5X2xvY2soc2wpCisjZGVmaW5lIFNQSU5TX1BFUl9ZSUVMRCAgICAgICA2MworCitzdGF0aWMgTUxPQ0tfVCBtYWxsb2NfZ2xvYmFsX211dGV4ID0geyAwLCAwLCAwfTsKKworc3RhdGljIEZPUkNFSU5MSU5FIGludCBwdGhyZWFkX2FjcXVpcmVfbG9jayAoTUxPQ0tfVCAqc2wpIHsKKyAgaW50IHNwaW5zID0gMDsKKyAgdm9sYXRpbGUgdW5zaWduZWQgaW50KiBscCA9ICZzbC0+bDsKKyAgZm9yICg7OykgeworICAgIGlmICgqbHAgIT0gMCkgeworICAgICAgaWYgKHNsLT50aHJlYWRpZCA9PSBDVVJSRU5UX1RIUkVBRCkgeworCSsrc2wtPmM7CisJcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogcGxhY2UgYXJncyB0byBjbXB4Y2hnbCBpbiBsb2NhbHMgdG8gZXZhZGUgb2RkaXRpZXMgaW4gc29tZSBnY2NzICovCisgICAgICBpbnQgY21wID0gMDsKKyAgICAgIGludCB2YWwgPSAxOworICAgICAgaW50IHJldDsKKyAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICAoImxvY2s7IGNtcHhjaGdsICUxLCAlMiIKKwkJCSAgICAgOiAiPWEiIChyZXQpCisJCQkgICAgIDogInIiICh2YWwpLCAibSIgKCoobHApKSwgIjAiKGNtcCkKKwkJCSAgICAgOiAibWVtb3J5IiwgImNjIik7CisgICAgICBpZiAoIXJldCkgeworCWFzc2VydCghc2wtPnRocmVhZGlkKTsKKwlzbC0+YyA9IDE7CisJc2wtPnRocmVhZGlkID0gQ1VSUkVOVF9USFJFQUQ7CisJcmV0dXJuIDA7CisgICAgICB9CisgICAgICBpZiAoKCsrc3BpbnMgJiBTUElOU19QRVJfWUlFTEQpID09IDApIHsKKyNpZiBkZWZpbmVkIChfX1NWUjQpICYmIGRlZmluZWQgKF9fc3VuKSAvKiBzb2xhcmlzICovCisJdGhyX3lpZWxkKCk7CisjZWxzZQorI2lmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykKKwlzY2hlZF95aWVsZCgpOworI2Vsc2UgIC8qIG5vLW9wIHlpZWxkIG9uIHVua25vd24gc3lzdGVtcyAqLworCTsKKyNlbmRpZiAvKiBfX2xpbnV4X18gfHwgX19GcmVlQlNEX18gfHwgX19BUFBMRV9fICovCisjZW5kaWYgLyogc29sYXJpcyAqLworICAgICAgfQorICAgIH0KKyAgfQorfQorCitzdGF0aWMgRk9SQ0VJTkxJTkUgdm9pZCBwdGhyZWFkX3JlbGVhc2VfbG9jayAoTUxPQ0tfVCAqc2wpIHsKKyAgYXNzZXJ0KHNsLT5sICE9IDApOworICBhc3NlcnQoc2wtPnRocmVhZGlkID09IENVUlJFTlRfVEhSRUFEKTsKKyAgaWYgKC0tc2wtPmMgPT0gMCkgeworICAgIHNsLT50aHJlYWRpZCA9IDA7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgaW50KiBscCA9ICZzbC0+bDsKKyAgICBpbnQgcHJldiA9IDA7CisgICAgaW50IHJldDsKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IHhjaGdsICUwLCAlMSIKKwkJCSAgOiAiPXIiIChyZXQpCisJCQkgIDogIm0iICgqKGxwKSksICIwIihwcmV2KQorCQkJICA6ICJtZW1vcnkiKTsKKyAgfQorfQorCitzdGF0aWMgRk9SQ0VJTkxJTkUgaW50IHB0aHJlYWRfdHJ5X2xvY2sgKE1MT0NLX1QgKnNsKSB7CisgIHZvbGF0aWxlIHVuc2lnbmVkIGludCogbHAgPSAmc2wtPmw7CisgIGlmICgqbHAgIT0gMCkgeworICAgICAgaWYgKHNsLT50aHJlYWRpZCA9PSBDVVJSRU5UX1RIUkVBRCkgeworCSsrc2wtPmM7CisJcmV0dXJuIDE7CisgICAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgaW50IGNtcCA9IDA7CisgICAgaW50IHZhbCA9IDE7CisgICAgaW50IHJldDsKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAgKCJsb2NrOyBjbXB4Y2hnbCAlMSwgJTIiCisJCQkgICA6ICI9YSIgKHJldCkKKwkJCSAgIDogInIiICh2YWwpLCAibSIgKCoobHApKSwgIjAiKGNtcCkKKwkJCSAgIDogIm1lbW9yeSIsICJjYyIpOworICAgIGlmICghcmV0KSB7CisgICAgICBhc3NlcnQoIXNsLT50aHJlYWRpZCk7CisgICAgICBzbC0+YyA9IDE7CisgICAgICBzbC0+dGhyZWFkaWQgPSBDVVJSRU5UX1RIUkVBRDsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworCisjZWxzZSAvKiBXSU4zMiAqLworLyogQ3VzdG9tIHdpbjMyLXN0eWxlIHNwaW4gbG9ja3Mgb24geDg2IGFuZCB4NjQgZm9yIE1TQyAqLworc3RydWN0IHdpbjMyX21sb2NrX3QKK3sKKyAgdm9sYXRpbGUgbG9uZyBsOworICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYzsKKyAgdm9sYXRpbGUgbG9uZyB0aHJlYWRpZDsKK307CisKKyNkZWZpbmUgTUxPQ0tfVCAgICAgICAgICAgICAgIHN0cnVjdCB3aW4zMl9tbG9ja190CisjZGVmaW5lIENVUlJFTlRfVEhSRUFEICAgICAgICB3aW4zMl9nZXRjdXJyZW50dGhyZWFkaWQoKQorI2RlZmluZSBJTklUSUFMX0xPQ0soc2wpICAgICAgKG1lbXNldChzbCwgMCwgc2l6ZW9mKE1MT0NLX1QpKSwgMCkKKyNkZWZpbmUgQUNRVUlSRV9MT0NLKHNsKSAgICAgIHdpbjMyX2FjcXVpcmVfbG9jayhzbCkKKyNkZWZpbmUgUkVMRUFTRV9MT0NLKHNsKSAgICAgIHdpbjMyX3JlbGVhc2VfbG9jayhzbCkKKyNkZWZpbmUgVFJZX0xPQ0soc2wpICAgICAgICAgIHdpbjMyX3RyeV9sb2NrKHNsKQorI2RlZmluZSBTUElOU19QRVJfWUlFTEQgICAgICAgNjMKKworc3RhdGljIE1MT0NLX1QgbWFsbG9jX2dsb2JhbF9tdXRleCA9IHsgMCwgMCwgMH07CisKK3N0YXRpYyBGT1JDRUlOTElORSBsb25nIHdpbjMyX2dldGN1cnJlbnR0aHJlYWRpZCgpIHsKKyNpZmRlZiBfTVNDX1ZFUgorI2lmIGRlZmluZWQoX01fSVg4NikKKyAgbG9uZyAqdGhyZWFkc3RydWN0PShsb25nICopX19yZWFkZnNkd29yZCgweDE4KTsKKyAgbG9uZyB0aHJlYWRpZD10aHJlYWRzdHJ1Y3RbMHgyNC9zaXplb2YobG9uZyldOworICByZXR1cm4gdGhyZWFkaWQ7CisjZWxpZiBkZWZpbmVkKF9NX1g2NCkKKyAgLyogdG9kbyAqLworICByZXR1cm4gR2V0Q3VycmVudFRocmVhZElkKCk7CisjZWxzZQorICByZXR1cm4gR2V0Q3VycmVudFRocmVhZElkKCk7CisjZW5kaWYKKyNlbHNlCisgIHJldHVybiBHZXRDdXJyZW50VGhyZWFkSWQoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgRk9SQ0VJTkxJTkUgaW50IHdpbjMyX2FjcXVpcmVfbG9jayAoTUxPQ0tfVCAqc2wpIHsKKyAgaW50IHNwaW5zID0gMDsKKyAgZm9yICg7OykgeworICAgIGlmIChzbC0+bCAhPSAwKSB7CisgICAgICBpZiAoc2wtPnRocmVhZGlkID09IENVUlJFTlRfVEhSRUFEKSB7CisJKytzbC0+YzsKKwlyZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICBpZiAoIWludGVybG9ja2VkZXhjaGFuZ2UoJnNsLT5sLCAxKSkgeworCWFzc2VydCghc2wtPnRocmVhZGlkKTsKKwkJc2wtPmM9Q1VSUkVOVF9USFJFQUQ7CisJc2wtPnRocmVhZGlkID0gQ1VSUkVOVF9USFJFQUQ7CisJc2wtPmMgPSAxOworCXJldHVybiAwOworICAgICAgfQorICAgIH0KKyAgICBpZiAoKCsrc3BpbnMgJiBTUElOU19QRVJfWUlFTEQpID09IDApCisgICAgICBTbGVlcEV4KDAsIEZBTFNFKTsKKyAgfQorfQorCitzdGF0aWMgRk9SQ0VJTkxJTkUgdm9pZCB3aW4zMl9yZWxlYXNlX2xvY2sgKE1MT0NLX1QgKnNsKSB7CisgIGFzc2VydChzbC0+dGhyZWFkaWQgPT0gQ1VSUkVOVF9USFJFQUQpOworICBhc3NlcnQoc2wtPmwgIT0gMCk7CisgIGlmICgtLXNsLT5jID09IDApIHsKKyAgICBzbC0+dGhyZWFkaWQgPSAwOworICAgIGludGVybG9ja2VkZXhjaGFuZ2UgKCZzbC0+bCwgMCk7CisgIH0KK30KKworc3RhdGljIEZPUkNFSU5MSU5FIGludCB3aW4zMl90cnlfbG9jayAoTUxPQ0tfVCAqc2wpIHsKKyAgaWYoc2wtPmwgIT0gMCkgeworICAgICAgaWYgKHNsLT50aHJlYWRpZCA9PSBDVVJSRU5UX1RIUkVBRCkgeworCSsrc2wtPmM7CisJcmV0dXJuIDE7CisgICAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgaWYgKCFpbnRlcmxvY2tlZGV4Y2hhbmdlKCZzbC0+bCwgMSkpeworICAgICAgYXNzZXJ0KCFzbC0+dGhyZWFkaWQpOworICAgICAgc2wtPnRocmVhZGlkID0gQ1VSUkVOVF9USFJFQUQ7CisgICAgICBzbC0+YyA9IDE7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBXSU4zMiAqLworI2Vsc2UgLyogVVNFX1NQSU5fTE9DS1MgKi8KKworI2lmbmRlZiBXSU4zMgorLyogcHRocmVhZHMtYmFzZWQgbG9ja3MgKi8KKworI2RlZmluZSBNTE9DS19UICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90CisjZGVmaW5lIENVUlJFTlRfVEhSRUFEICAgICAgICBwdGhyZWFkX3NlbGYoKQorI2RlZmluZSBJTklUSUFMX0xPQ0soc2wpICAgICAgcHRocmVhZF9pbml0X2xvY2soc2wpCisjZGVmaW5lIEFDUVVJUkVfTE9DSyhzbCkgICAgICBwdGhyZWFkX211dGV4X2xvY2soc2wpCisjZGVmaW5lIFJFTEVBU0VfTE9DSyhzbCkgICAgICBwdGhyZWFkX211dGV4X3VubG9jayhzbCkKKyNkZWZpbmUgVFJZX0xPQ0soc2wpICAgICAgICAgICghcHRocmVhZF9tdXRleF90cnlsb2NrKHNsKSkKKworc3RhdGljIE1MT0NLX1QgbWFsbG9jX2dsb2JhbF9tdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisKKy8qIENvcGUgd2l0aCBvbGQtc3R5bGUgbGludXggcmVjdXJzaXZlIGxvY2sgaW5pdGlhbGl6YXRpb24gYnkgYWRkaW5nICovCisvKiBza2lwcGVkIGludGVybmFsIGRlY2xhcmF0aW9uIGZyb20gcHRocmVhZC5oICovCisjaWZkZWYgbGludXgKKyNpZm5kZWYgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUKK2V4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0a2luZF9ucCBfX1AgKChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsCisJCQkJCSAgIGludCBfX2tpbmQpKTsKKyNkZWZpbmUgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAKKyNkZWZpbmUgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSh4LHkpIHB0aHJlYWRfbXV0ZXhhdHRyX3NldGtpbmRfbnAoeCx5KQorI2VuZGlmCisjZW5kaWYKKworc3RhdGljIGludCBwdGhyZWFkX2luaXRfbG9jayAoTUxPQ0tfVCAqc2wpIHsKKyAgcHRocmVhZF9tdXRleGF0dHJfdCBhdHRyOworICBpZiAocHRocmVhZF9tdXRleGF0dHJfaW5pdCgmYXR0cikpIHJldHVybiAxOworICBpZiAocHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSgmYXR0ciwgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUpKSByZXR1cm4gMTsKKyAgaWYgKHB0aHJlYWRfbXV0ZXhfaW5pdChzbCwgJmF0dHIpKSByZXR1cm4gMTsKKyAgaWYgKHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3koJmF0dHIpKSByZXR1cm4gMTsKKyAgcmV0dXJuIDA7Cit9CisKKyNlbHNlIC8qIFdJTjMyICovCisvKiBXaW4zMiBjcml0aWNhbCBzZWN0aW9ucyAqLworI2RlZmluZSBNTE9DS19UICAgICAgICAgICAgICAgQ1JJVElDQUxfU0VDVElPTgorI2RlZmluZSBDVVJSRU5UX1RIUkVBRCAgICAgICAgR2V0Q3VycmVudFRocmVhZElkKCkKKyNkZWZpbmUgSU5JVElBTF9MT0NLKHMpICAgICAgICghSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbkFuZFNwaW5Db3VudCgocyksIDB4ODAwMDAwMDB8NDAwMCkpCisjZGVmaW5lIEFDUVVJUkVfTE9DSyhzKSAgICAgICAoRW50ZXJDcml0aWNhbFNlY3Rpb24ocyksIDApCisjZGVmaW5lIFJFTEVBU0VfTE9DSyhzKSAgICAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbihzKQorI2RlZmluZSBUUllfTE9DSyhzKSAgICAgICAgICAgVHJ5RW50ZXJDcml0aWNhbFNlY3Rpb24ocykKKyNkZWZpbmUgTkVFRF9HTE9CQUxfTE9DS19JTklUCisKK3N0YXRpYyBNTE9DS19UIG1hbGxvY19nbG9iYWxfbXV0ZXg7CitzdGF0aWMgdm9sYXRpbGUgbG9uZyBtYWxsb2NfZ2xvYmFsX211dGV4X3N0YXR1czsKKworLyogVXNlIHNwaW4gbG9vcCB0byBpbml0aWFsaXplIGdsb2JhbCBsb2NrICovCitzdGF0aWMgdm9pZCBpbml0X21hbGxvY19nbG9iYWxfbXV0ZXgoKSB7CisgIGZvciAoOzspIHsKKyAgICBsb25nIHN0YXQgPSBtYWxsb2NfZ2xvYmFsX211dGV4X3N0YXR1czsKKyAgICBpZiAoc3RhdCA+IDApCisgICAgICByZXR1cm47CisgICAgLyogdHJhbnNpdGlvbiB0byA8IDAgd2hpbGUgaW5pdGlhbGl6aW5nLCB0aGVuIHRvID4gMCkgKi8KKyAgICBpZiAoc3RhdCA9PSAwICYmCisJaW50ZXJsb2NrZWRjb21wYXJlZXhjaGFuZ2UoJm1hbGxvY19nbG9iYWxfbXV0ZXhfc3RhdHVzLCAtMSwgMCkgPT0gMCkgeworICAgICAgSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmbWFsbG9jX2dsb2JhbF9tdXRleCk7CisgICAgICBpbnRlcmxvY2tlZGV4Y2hhbmdlKCZtYWxsb2NfZ2xvYmFsX211dGV4X3N0YXR1cywxKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgU2xlZXBFeCgwLCBGQUxTRSk7CisgIH0KK30KKworI2VuZGlmIC8qIFdJTjMyICovCisjZW5kaWYgLyogVVNFX1NQSU5fTE9DS1MgKi8KKyNlbmRpZiAvKiBVU0VfTE9DS1MgPT0gMSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVXNlci1kZWZpbmVkIGxvY2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgVVNFX0xPQ0tTID4gMQorLyogRGVmaW5lIHlvdXIgb3duIGxvY2sgaW1wbGVtZW50YXRpb24gaGVyZSAqLworLyogI2RlZmluZSBJTklUSUFMX0xPQ0soc2wpICAuLi4gKi8KKy8qICNkZWZpbmUgQUNRVUlSRV9MT0NLKHNsKSAgLi4uICovCisvKiAjZGVmaW5lIFJFTEVBU0VfTE9DSyhzbCkgIC4uLiAqLworLyogI2RlZmluZSBUUllfTE9DSyhzbCkgLi4uICovCisvKiBzdGF0aWMgTUxPQ0tfVCBtYWxsb2NfZ2xvYmFsX211dGV4ID0gLi4uICovCisjZW5kaWYgLyogVVNFX0xPQ0tTID4gMSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgTG9jay1iYXNlZCBzdGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIFVTRV9MT0NLUworI2RlZmluZSBVU0VfTE9DS19CSVQgICAgICAgICAgICAgICAoMlUpCisjZWxzZSAgLyogVVNFX0xPQ0tTICovCisjZGVmaW5lIFVTRV9MT0NLX0JJVCAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgSU5JVElBTF9MT0NLKGwpCisjZW5kaWYgLyogVVNFX0xPQ0tTICovCisKKyNpZiBVU0VfTE9DS1MKKyNkZWZpbmUgQUNRVUlSRV9NQUxMT0NfR0xPQkFMX0xPQ0soKSAgQUNRVUlSRV9MT0NLKCZtYWxsb2NfZ2xvYmFsX211dGV4KTsKKyNkZWZpbmUgUkVMRUFTRV9NQUxMT0NfR0xPQkFMX0xPQ0soKSAgUkVMRUFTRV9MT0NLKCZtYWxsb2NfZ2xvYmFsX211dGV4KTsKKyNlbHNlICAvKiBVU0VfTE9DS1MgKi8KKyNkZWZpbmUgQUNRVUlSRV9NQUxMT0NfR0xPQkFMX0xPQ0soKQorI2RlZmluZSBSRUxFQVNFX01BTExPQ19HTE9CQUxfTE9DSygpCisjZW5kaWYgLyogVVNFX0xPQ0tTICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENodW5rIHJlcHJlc2VudGF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgKFRoZSBmb2xsb3dpbmcgaW5jbHVkZXMgbGlnaHRseSBlZGl0ZWQgZXhwbGFuYXRpb25zIGJ5IENvbGluIFBsdW1iLikKKworICBUaGUgbWFsbG9jX2NodW5rIGRlY2xhcmF0aW9uIGJlbG93IGlzIG1pc2xlYWRpbmcgKGJ1dCBhY2N1cmF0ZSBhbmQKKyAgbmVjZXNzYXJ5KS4gIEl0IGRlY2xhcmVzIGEgInZpZXciIGludG8gbWVtb3J5IGFsbG93aW5nIGFjY2VzcyB0bworICBuZWNlc3NhcnkgZmllbGRzIGF0IGtub3duIG9mZnNldHMgZnJvbSBhIGdpdmVuIGJhc2UuCisKKyAgQ2h1bmtzIG9mIG1lbW9yeSBhcmUgbWFpbnRhaW5lZCB1c2luZyBhIGBib3VuZGFyeSB0YWcnIG1ldGhvZCBhcworICBvcmlnaW5hbGx5IGRlc2NyaWJlZCBieSBLbnV0aC4gIChTZWUgdGhlIHBhcGVyIGJ5IFBhdWwgV2lsc29uCisgIGZ0cDovL2Z0cC5jcy51dGV4YXMuZWR1L3B1Yi9nYXJiYWdlL2FsbG9jc3J2LnBzIGZvciBhIHN1cnZleSBvZiBzdWNoCisgIHRlY2huaXF1ZXMuKSAgU2l6ZXMgb2YgZnJlZSBjaHVua3MgYXJlIHN0b3JlZCBib3RoIGluIHRoZSBmcm9udCBvZgorICBlYWNoIGNodW5rIGFuZCBhdCB0aGUgZW5kLiAgVGhpcyBtYWtlcyBjb25zb2xpZGF0aW5nIGZyYWdtZW50ZWQKKyAgY2h1bmtzIGludG8gYmlnZ2VyIGNodW5rcyBmYXN0LiAgVGhlIGhlYWQgZmllbGRzIGFsc28gaG9sZCBiaXRzCisgIHJlcHJlc2VudGluZyB3aGV0aGVyIGNodW5rcyBhcmUgZnJlZSBvciBpbiB1c2UuCisKKyAgSGVyZSBhcmUgc29tZSBwaWN0dXJlcyB0byBtYWtlIGl0IGNsZWFyZXIuICBUaGV5IGFyZSAiZXhwbG9kZWQiIHRvCisgIHNob3cgdGhhdCB0aGUgc3RhdGUgb2YgYSBjaHVuayBjYW4gYmUgdGhvdWdodCBvZiBhcyBleHRlbmRpbmcgZnJvbQorICB0aGUgaGlnaCAzMSBiaXRzIG9mIHRoZSBoZWFkIGZpZWxkIG9mIGl0cyBoZWFkZXIgdGhyb3VnaCB0aGUKKyAgcHJldl9mb290IGFuZCBQSU5VU0VfQklUIGJpdCBvZiB0aGUgZm9sbG93aW5nIGNodW5rIGhlYWRlci4KKworICBBIGNodW5rIHRoYXQncyBpbiB1c2UgbG9va3MgbGlrZToKKworICAgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgIHwgU2l6ZSBvZiBwcmV2aW91cyBjaHVuayAoaWYgUCA9IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHxQfAorCSB8IFNpemUgb2YgdGhpcyBjaHVuayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMXwgKy0rCisgICBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSArLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKworCSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSArLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKworCSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOgorCSArLSAgICAgIHNpemUgLSBzaXplb2Yoc2l6ZV90KSBhdmFpbGFibGUgcGF5bG9hZCBieXRlcyAgICAgICAgICAtKworCSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIGNodW5rLT4gKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKKwkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsgfDF8CisgICAgICAgfCBTaXplIG9mIG5leHQgY2h1bmsgKG1heSBvciBtYXkgbm90IGJlIGluIHVzZSkgICAgICAgICAgICAgICB8ICstKworIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisKKyAgICBBbmQgaWYgaXQncyBmcmVlLCBpdCBsb29rcyBsaWtlIHRoaXM6CisKKyAgIGNodW5rLT4gKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKKwkgICB8IFVzZXIgcGF5bG9hZCAobXVzdCBiZSBpbiB1c2UsIG9yIHdlIHdvdWxkIGhhdmUgbWVyZ2VkISkgICAgICAgfAorCSAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyB8UHwKKwkgfCBTaXplIG9mIHRoaXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB8ICstKworICAgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgfCBOZXh0IHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgfCBQcmV2IHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKKwkgKy0gICAgICBzaXplIC0gc2l6ZW9mKHN0cnVjdCBjaHVuaykgdW51c2VkIGJ5dGVzICAgICAgICAgICAgICAgLSsKKwkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyBjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJIHwgU2l6ZSBvZiB0aGlzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHwwfAorICAgICAgIHwgU2l6ZSBvZiBuZXh0IGNodW5rIChtdXN0IGJlIGluIHVzZSwgb3Igd2Ugd291bGQgaGF2ZSBtZXJnZWQpfCArLSsKKyBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6CisgICAgICAgKy0gVXNlciBwYXlsb2FkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKKyAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJCQkJCQkJCSAgICAgfDB8CisJCQkJCQkJCSAgICAgKy0rCisgIE5vdGUgdGhhdCBzaW5jZSB3ZSBhbHdheXMgbWVyZ2UgYWRqYWNlbnQgZnJlZSBjaHVua3MsIHRoZSBjaHVua3MKKyAgYWRqYWNlbnQgdG8gYSBmcmVlIGNodW5rIG11c3QgYmUgaW4gdXNlLgorCisgIEdpdmVuIGEgcG9pbnRlciB0byBhIGNodW5rICh3aGljaCBjYW4gYmUgZGVyaXZlZCB0cml2aWFsbHkgZnJvbSB0aGUKKyAgcGF5bG9hZCBwb2ludGVyKSB3ZSBjYW4sIGluIE8oMSkgdGltZSwgZmluZCBvdXQgd2hldGhlciB0aGUgYWRqYWNlbnQKKyAgY2h1bmtzIGFyZSBmcmVlLCBhbmQgaWYgc28sIHVubGluayB0aGVtIGZyb20gdGhlIGxpc3RzIHRoYXQgdGhleQorICBhcmUgb24gYW5kIG1lcmdlIHRoZW0gd2l0aCB0aGUgY3VycmVudCBjaHVuay4KKworICBDaHVua3MgYWx3YXlzIGJlZ2luIG9uIGV2ZW4gd29yZCBib3VuZGFyaWVzLCBzbyB0aGUgbWVtIHBvcnRpb24KKyAgKHdoaWNoIGlzIHJldHVybmVkIHRvIHRoZSB1c2VyKSBpcyBhbHNvIG9uIGFuIGV2ZW4gd29yZCBib3VuZGFyeSwgYW5kCisgIHRodXMgYXQgbGVhc3QgZG91YmxlLXdvcmQgYWxpZ25lZC4KKworICBUaGUgUCAoUElOVVNFX0JJVCkgYml0LCBzdG9yZWQgaW4gdGhlIHVudXNlZCBsb3ctb3JkZXIgYml0IG9mIHRoZQorICBjaHVuayBzaXplICh3aGljaCBpcyBhbHdheXMgYSBtdWx0aXBsZSBvZiB0d28gd29yZHMpLCBpcyBhbiBpbi11c2UKKyAgYml0IGZvciB0aGUgKnByZXZpb3VzKiBjaHVuay4gIElmIHRoYXQgYml0IGlzICpjbGVhciosIHRoZW4gdGhlCisgIHdvcmQgYmVmb3JlIHRoZSBjdXJyZW50IGNodW5rIHNpemUgY29udGFpbnMgdGhlIHByZXZpb3VzIGNodW5rCisgIHNpemUsIGFuZCBjYW4gYmUgdXNlZCB0byBmaW5kIHRoZSBmcm9udCBvZiB0aGUgcHJldmlvdXMgY2h1bmsuCisgIFRoZSB2ZXJ5IGZpcnN0IGNodW5rIGFsbG9jYXRlZCBhbHdheXMgaGFzIHRoaXMgYml0IHNldCwgcHJldmVudGluZworICBhY2Nlc3MgdG8gbm9uLWV4aXN0ZW50IChvciBub24tb3duZWQpIG1lbW9yeS4gSWYgcGludXNlIGlzIHNldCBmb3IKKyAgYW55IGdpdmVuIGNodW5rLCB0aGVuIHlvdSBDQU5OT1QgZGV0ZXJtaW5lIHRoZSBzaXplIG9mIHRoZQorICBwcmV2aW91cyBjaHVuaywgYW5kIG1pZ2h0IGV2ZW4gZ2V0IGEgbWVtb3J5IGFkZHJlc3NpbmcgZmF1bHQgd2hlbgorICB0cnlpbmcgdG8gZG8gc28uCisKKyAgVGhlIEMgKENJTlVTRV9CSVQpIGJpdCwgc3RvcmVkIGluIHRoZSB1bnVzZWQgc2Vjb25kLWxvd2VzdCBiaXQgb2YKKyAgdGhlIGNodW5rIHNpemUgcmVkdW5kYW50bHkgcmVjb3JkcyB3aGV0aGVyIHRoZSBjdXJyZW50IGNodW5rIGlzCisgIGludXNlLiBUaGlzIHJlZHVuZGFuY3kgZW5hYmxlcyB1c2FnZSBjaGVja3Mgd2l0aGluIGZyZWUgYW5kIHJlYWxsb2MsCisgIGFuZCByZWR1Y2VzIGluZGlyZWN0aW9uIHdoZW4gZnJlZWluZyBhbmQgY29uc29saWRhdGluZyBjaHVua3MuCisKKyAgRWFjaCBmcmVzaGx5IGFsbG9jYXRlZCBjaHVuayBtdXN0IGhhdmUgYm90aCBjaW51c2UgYW5kIHBpbnVzZSBzZXQuCisgIFRoYXQgaXMsIGVhY2ggYWxsb2NhdGVkIGNodW5rIGJvcmRlcnMgZWl0aGVyIGEgcHJldmlvdXNseSBhbGxvY2F0ZWQKKyAgYW5kIHN0aWxsIGluLXVzZSBjaHVuaywgb3IgdGhlIGJhc2Ugb2YgaXRzIG1lbW9yeSBhcmVuYS4gVGhpcyBpcworICBlbnN1cmVkIGJ5IG1ha2luZyBhbGwgYWxsb2NhdGlvbnMgZnJvbSB0aGUgdGhlIGBsb3dlc3QnIHBhcnQgb2YgYW55CisgIGZvdW5kIGNodW5rLiAgRnVydGhlciwgbm8gZnJlZSBjaHVuayBwaHlzaWNhbGx5IGJvcmRlcnMgYW5vdGhlciBvbmUsCisgIHNvIGVhY2ggZnJlZSBjaHVuayBpcyBrbm93biB0byBiZSBwcmVjZWRlZCBhbmQgZm9sbG93ZWQgYnkgZWl0aGVyCisgIGludXNlIGNodW5rcyBvciB0aGUgZW5kcyBvZiBtZW1vcnkuCisKKyAgTm90ZSB0aGF0IHRoZSBgZm9vdCcgb2YgdGhlIGN1cnJlbnQgY2h1bmsgaXMgYWN0dWFsbHkgcmVwcmVzZW50ZWQKKyAgYXMgdGhlIHByZXZfZm9vdCBvZiB0aGUgTkVYVCBjaHVuay4gVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8KKyAgZGVhbCB3aXRoIGFsaWdubWVudHMgZXRjIGJ1dCBjYW4gYmUgdmVyeSBjb25mdXNpbmcgd2hlbiB0cnlpbmcKKyAgdG8gZXh0ZW5kIG9yIGFkYXB0IHRoaXMgY29kZS4KKworICBUaGUgZXhjZXB0aW9ucyB0byBhbGwgdGhpcyBhcmUKKworICAgICAxLiBUaGUgc3BlY2lhbCBjaHVuayBgdG9wJyBpcyB0aGUgdG9wLW1vc3QgYXZhaWxhYmxlIGNodW5rIChpLmUuLAorCXRoZSBvbmUgYm9yZGVyaW5nIHRoZSBlbmQgb2YgYXZhaWxhYmxlIG1lbW9yeSkuIEl0IGlzIHRyZWF0ZWQKKwlzcGVjaWFsbHkuICBUb3AgaXMgbmV2ZXIgaW5jbHVkZWQgaW4gYW55IGJpbiwgaXMgdXNlZCBvbmx5IGlmCisJbm8gb3RoZXIgY2h1bmsgaXMgYXZhaWxhYmxlLCBhbmQgaXMgcmVsZWFzZWQgYmFjayB0byB0aGUKKwlzeXN0ZW0gaWYgaXQgaXMgdmVyeSBsYXJnZSAoc2VlIE1fVFJJTV9USFJFU0hPTEQpLiAgSW4gZWZmZWN0LAorCXRoZSB0b3AgY2h1bmsgaXMgdHJlYXRlZCBhcyBsYXJnZXIgKGFuZCB0aHVzIGxlc3Mgd2VsbAorCWZpdHRpbmcpIHRoYW4gYW55IG90aGVyIGF2YWlsYWJsZSBjaHVuay4gIFRoZSB0b3AgY2h1bmsKKwlkb2Vzbid0IHVwZGF0ZSBpdHMgdHJhaWxpbmcgc2l6ZSBmaWVsZCBzaW5jZSB0aGVyZSBpcyBubyBuZXh0CisJY29udGlndW91cyBjaHVuayB0aGF0IHdvdWxkIGhhdmUgdG8gaW5kZXggb2ZmIGl0LiBIb3dldmVyLAorCXNwYWNlIGlzIHN0aWxsIGFsbG9jYXRlZCBmb3IgaXQgKFRPUF9GT09UX1NJWkUpIHRvIGVuYWJsZQorCXNlcGFyYXRpb24gb3IgbWVyZ2luZyB3aGVuIHNwYWNlIGlzIGV4dGVuZGVkLgorCisgICAgIDMuIENodW5rcyBhbGxvY2F0ZWQgdmlhIG1tYXAsIHdoaWNoIGhhdmUgdGhlIGxvd2VzdC1vcmRlciBiaXQKKwkoSVNfTU1BUFBFRF9CSVQpIHNldCBpbiB0aGVpciBwcmV2X2Zvb3QgZmllbGRzLCBhbmQgZG8gbm90IHNldAorCVBJTlVTRV9CSVQgaW4gdGhlaXIgaGVhZCBmaWVsZHMuICBCZWNhdXNlIHRoZXkgYXJlIGFsbG9jYXRlZAorCW9uZS1ieS1vbmUsIGVhY2ggbXVzdCBjYXJyeSBpdHMgb3duIHByZXZfZm9vdCBmaWVsZCwgd2hpY2ggaXMKKwlhbHNvIHVzZWQgdG8gaG9sZCB0aGUgb2Zmc2V0IHRoaXMgY2h1bmsgaGFzIHdpdGhpbiBpdHMgbW1hcHBlZAorCXJlZ2lvbiwgd2hpY2ggaXMgbmVlZGVkIHRvIHByZXNlcnZlIGFsaWdubWVudC4gRWFjaCBtbWFwcGVkCisJY2h1bmsgaXMgdHJhaWxlZCBieSB0aGUgZmlyc3QgdHdvIGZpZWxkcyBvZiBhIGZha2UgbmV4dC1jaHVuaworCWZvciBzYWtlIG9mIHVzYWdlIGNoZWNrcy4KKworKi8KKworc3RydWN0IG1hbGxvY19jaHVuayB7CisgIHNpemVfdCAgICAgICAgICAgICAgIHByZXZfZm9vdDsgIC8qIFNpemUgb2YgcHJldmlvdXMgY2h1bmsgKGlmIGZyZWUpLiAgKi8KKyAgc2l6ZV90ICAgICAgICAgICAgICAgaGVhZDsgICAgICAgLyogU2l6ZSBhbmQgaW51c2UgYml0cy4gKi8KKyAgc3RydWN0IG1hbGxvY19jaHVuayogZmQ7ICAgICAgICAgLyogZG91YmxlIGxpbmtzIC0tIHVzZWQgb25seSBpZiBmcmVlLiAqLworICBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBiazsKK307CisKK3R5cGVkZWYgc3RydWN0IG1hbGxvY19jaHVuayAgbWNodW5rOwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBtY2h1bmtwdHI7Cit0eXBlZGVmIHN0cnVjdCBtYWxsb2NfY2h1bmsqIHNiaW5wdHI7ICAvKiBUaGUgdHlwZSBvZiBiaW5zIG9mIGNodW5rcyAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgYmluZGV4X3Q7ICAgICAgICAgLyogRGVzY3JpYmVkIGJlbG93ICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBiaW5tYXBfdDsgICAgICAgICAvKiBEZXNjcmliZWQgYmVsb3cgKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50IGZsYWdfdDsgICAgICAgICAgIC8qIFRoZSB0eXBlIG9mIHZhcmlvdXMgYml0IGZsYWcgc2V0cyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tIENodW5rcyBzaXplcyBhbmQgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIE1DSFVOS19TSVpFICAgICAgICAgKHNpemVvZihtY2h1bmspKQorCisjaWYgRk9PVEVSUworI2RlZmluZSBDSFVOS19PVkVSSEVBRCAgICAgIChUV09fU0laRV9UX1NJWkVTKQorI2Vsc2UgLyogRk9PVEVSUyAqLworI2RlZmluZSBDSFVOS19PVkVSSEVBRCAgICAgIChTSVpFX1RfU0laRSkKKyNlbmRpZiAvKiBGT09URVJTICovCisKKy8qIE1NYXBwZWQgY2h1bmtzIG5lZWQgYSBzZWNvbmQgd29yZCBvZiBvdmVyaGVhZCAuLi4gKi8KKyNkZWZpbmUgTU1BUF9DSFVOS19PVkVSSEVBRCAoVFdPX1NJWkVfVF9TSVpFUykKKy8qIC4uLiBhbmQgYWRkaXRpb25hbCBwYWRkaW5nIGZvciBmYWtlIG5leHQtY2h1bmsgYXQgZm9vdCAqLworI2RlZmluZSBNTUFQX0ZPT1RfUEFEICAgICAgIChGT1VSX1NJWkVfVF9TSVpFUykKKworLyogVGhlIHNtYWxsZXN0IHNpemUgd2UgY2FuIG1hbGxvYyBpcyBhbiBhbGlnbmVkIG1pbmltYWwgY2h1bmsgKi8KKyNkZWZpbmUgTUlOX0NIVU5LX1NJWkVcCisgICgoTUNIVU5LX1NJWkUgKyBDSFVOS19BTElHTl9NQVNLKSAmIH5DSFVOS19BTElHTl9NQVNLKQorCisvKiBjb252ZXJzaW9uIGZyb20gbWFsbG9jIGhlYWRlcnMgdG8gdXNlciBwb2ludGVycywgYW5kIGJhY2sgKi8KKyNkZWZpbmUgY2h1bmsybWVtKHApICAgICAgICAoKHZvaWQqKSgoY2hhciopKHApICAgICAgICsgVFdPX1NJWkVfVF9TSVpFUykpCisjZGVmaW5lIG1lbTJjaHVuayhtZW0pICAgICAgKChtY2h1bmtwdHIpKChjaGFyKikobWVtKSAtIFRXT19TSVpFX1RfU0laRVMpKQorLyogY2h1bmsgYXNzb2NpYXRlZCB3aXRoIGFsaWduZWQgYWRkcmVzcyBBICovCisjZGVmaW5lIGFsaWduX2FzX2NodW5rKEEpICAgKG1jaHVua3B0cikoKEEpICsgYWxpZ25fb2Zmc2V0KGNodW5rMm1lbShBKSkpCisKKy8qIEJvdW5kcyBvbiByZXF1ZXN0IChub3QgY2h1bmspIHNpemVzLiAqLworI2RlZmluZSBNQVhfUkVRVUVTVCAgICAgICAgICgoLU1JTl9DSFVOS19TSVpFKSA8PCAyKQorI2RlZmluZSBNSU5fUkVRVUVTVCAgICAgICAgIChNSU5fQ0hVTktfU0laRSAtIENIVU5LX09WRVJIRUFEIC0gU0laRV9UX09ORSkKKworLyogcGFkIHJlcXVlc3QgYnl0ZXMgaW50byBhIHVzYWJsZSBzaXplICovCisjZGVmaW5lIHBhZF9yZXF1ZXN0KHJlcSkgXAorICAgKCgocmVxKSArIENIVU5LX09WRVJIRUFEICsgQ0hVTktfQUxJR05fTUFTSykgJiB+Q0hVTktfQUxJR05fTUFTSykKKworLyogcGFkIHJlcXVlc3QsIGNoZWNraW5nIGZvciBtaW5pbXVtIChidXQgbm90IG1heGltdW0pICovCisjZGVmaW5lIHJlcXVlc3Qyc2l6ZShyZXEpIFwKKyAgKCgocmVxKSA8IE1JTl9SRVFVRVNUKT8gTUlOX0NIVU5LX1NJWkUgOiBwYWRfcmVxdWVzdChyZXEpKQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRpb25zIG9uIGhlYWQgYW5kIGZvb3QgZmllbGRzIC0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIFRoZSBoZWFkIGZpZWxkIG9mIGEgY2h1bmsgaXMgb3InZWQgd2l0aCBQSU5VU0VfQklUIHdoZW4gcHJldmlvdXMKKyAgYWRqYWNlbnQgY2h1bmsgaW4gdXNlLCBhbmQgb3InZWQgd2l0aCBDSU5VU0VfQklUIGlmIHRoaXMgY2h1bmsgaXMgaW4KKyAgdXNlLiBJZiB0aGUgY2h1bmsgd2FzIG9idGFpbmVkIHdpdGggbW1hcCwgdGhlIHByZXZfZm9vdCBmaWVsZCBoYXMKKyAgSVNfTU1BUFBFRF9CSVQgc2V0LCBvdGhlcndpc2UgaG9sZGluZyB0aGUgb2Zmc2V0IG9mIHRoZSBiYXNlIG9mIHRoZQorICBtbWFwcGVkIHJlZ2lvbiB0byB0aGUgYmFzZSBvZiB0aGUgY2h1bmsuCisKKyAgRkxBRzRfQklUIGlzIG5vdCB1c2VkIGJ5IHRoaXMgbWFsbG9jLCBidXQgbWlnaHQgYmUgdXNlZnVsIGluIGV4dGVuc2lvbnMuCisqLworCisjZGVmaW5lIFBJTlVTRV9CSVQgICAgICAgICAgKFNJWkVfVF9PTkUpCisjZGVmaW5lIENJTlVTRV9CSVQgICAgICAgICAgKFNJWkVfVF9UV08pCisjZGVmaW5lIEZMQUc0X0JJVCAgICAgICAgICAgKFNJWkVfVF9GT1VSKQorI2RlZmluZSBJTlVTRV9CSVRTICAgICAgICAgIChQSU5VU0VfQklUfENJTlVTRV9CSVQpCisjZGVmaW5lIEZMQUdfQklUUyAgICAgICAgICAgKFBJTlVTRV9CSVR8Q0lOVVNFX0JJVHxGTEFHNF9CSVQpCisKKy8qIEhlYWQgdmFsdWUgZm9yIGZlbmNlcG9zdHMgKi8KKyNkZWZpbmUgRkVOQ0VQT1NUX0hFQUQgICAgICAoSU5VU0VfQklUU3xTSVpFX1RfU0laRSkKKworLyogZXh0cmFjdGlvbiBvZiBmaWVsZHMgZnJvbSBoZWFkIHdvcmRzICovCisjZGVmaW5lIGNpbnVzZShwKSAgICAgICAgICAgKChwKS0+aGVhZCAmIENJTlVTRV9CSVQpCisjZGVmaW5lIHBpbnVzZShwKSAgICAgICAgICAgKChwKS0+aGVhZCAmIFBJTlVTRV9CSVQpCisjZGVmaW5lIGNodW5rc2l6ZShwKSAgICAgICAgKChwKS0+aGVhZCAmIH4oRkxBR19CSVRTKSkKKworI2RlZmluZSBjbGVhcl9waW51c2UocCkgICAgICgocCktPmhlYWQgJj0gflBJTlVTRV9CSVQpCisjZGVmaW5lIGNsZWFyX2NpbnVzZShwKSAgICAgKChwKS0+aGVhZCAmPSB+Q0lOVVNFX0JJVCkKKworLyogVHJlYXQgc3BhY2UgYXQgcHRyICsvLSBvZmZzZXQgYXMgYSBjaHVuayAqLworI2RlZmluZSBjaHVua19wbHVzX29mZnNldChwLCBzKSAgKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpCisjZGVmaW5lIGNodW5rX21pbnVzX29mZnNldChwLCBzKSAoKG1jaHVua3B0cikoKChjaGFyKikocCkpIC0gKHMpKSkKKworLyogUHRyIHRvIG5leHQgb3IgcHJldmlvdXMgcGh5c2ljYWwgbWFsbG9jX2NodW5rLiAqLworI2RlZmluZSBuZXh0X2NodW5rKHApICgobWNodW5rcHRyKSggKChjaGFyKikocCkpICsgKChwKS0+aGVhZCAmIH5GTEFHX0JJVFMpKSkKKyNkZWZpbmUgcHJldl9jaHVuayhwKSAoKG1jaHVua3B0cikoICgoY2hhciopKHApKSAtICgocCktPnByZXZfZm9vdCkgKSkKKworLyogZXh0cmFjdCBuZXh0IGNodW5rJ3MgcGludXNlIGJpdCAqLworI2RlZmluZSBuZXh0X3BpbnVzZShwKSAgKChuZXh0X2NodW5rKHApLT5oZWFkKSAmIFBJTlVTRV9CSVQpCisKKy8qIEdldC9zZXQgc2l6ZSBhdCBmb290ZXIgKi8KKyNkZWZpbmUgZ2V0X2Zvb3QocCwgcykgICgoKG1jaHVua3B0cikoKGNoYXIqKShwKSArIChzKSkpLT5wcmV2X2Zvb3QpCisjZGVmaW5lIHNldF9mb290KHAsIHMpICAoKChtY2h1bmtwdHIpKChjaGFyKikocCkgKyAocykpKS0+cHJldl9mb290ID0gKHMpKQorCisvKiBTZXQgc2l6ZSwgcGludXNlIGJpdCwgYW5kIGZvb3QgKi8KKyNkZWZpbmUgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIHMpXAorICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVCksIHNldF9mb290KHAsIHMpKQorCisvKiBTZXQgc2l6ZSwgcGludXNlIGJpdCwgZm9vdCwgYW5kIGNsZWFyIG5leHQgcGludXNlICovCisjZGVmaW5lIHNldF9mcmVlX3dpdGhfcGludXNlKHAsIHMsIG4pXAorICAoY2xlYXJfcGludXNlKG4pLCBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgcykpCisKKyNkZWZpbmUgaXNfbW1hcHBlZChwKVwKKyAgKCEoKHApLT5oZWFkICYgUElOVVNFX0JJVCkgJiYgKChwKS0+cHJldl9mb290ICYgSVNfTU1BUFBFRF9CSVQpKQorCisvKiBHZXQgdGhlIGludGVybmFsIG92ZXJoZWFkIGFzc29jaWF0ZWQgd2l0aCBjaHVuayBwICovCisjZGVmaW5lIG92ZXJoZWFkX2ZvcihwKVwKKyAoaXNfbW1hcHBlZChwKT8gTU1BUF9DSFVOS19PVkVSSEVBRCA6IENIVU5LX09WRVJIRUFEKQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBtYWxsb2NlZCBzcGFjZSBpcyBub3QgbmVjZXNzYXJpbHkgY2xlYXJlZCAqLworI2lmIE1NQVBfQ0xFQVJTCisjZGVmaW5lIGNhbGxvY19tdXN0X2NsZWFyKHApICghaXNfbW1hcHBlZChwKSkKKyNlbHNlIC8qIE1NQVBfQ0xFQVJTICovCisjZGVmaW5lIGNhbGxvY19tdXN0X2NsZWFyKHApICgxKQorI2VuZGlmIC8qIE1NQVBfQ0xFQVJTICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3ZlcmxhaWQgZGF0YSBzdHJ1Y3R1cmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIFdoZW4gY2h1bmtzIGFyZSBub3QgaW4gdXNlLCB0aGV5IGFyZSB0cmVhdGVkIGFzIG5vZGVzIG9mIGVpdGhlcgorICBsaXN0cyBvciB0cmVlcy4KKworICAiU21hbGwiICBjaHVua3MgYXJlIHN0b3JlZCBpbiBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3RzLCBhbmQgbG9vaworICBsaWtlIHRoaXM6CisKKyAgICBjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgIHwgICAgICAgICAgICAgU2l6ZSBvZiBwcmV2aW91cyBjaHVuayAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgYGhlYWQ6JyB8ICAgICAgICAgICAgIFNpemUgb2YgY2h1bmssIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgIHxQfAorICAgICAgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICAgfCAgICAgICAgICAgICBGb3J3YXJkIHBvaW50ZXIgdG8gbmV4dCBjaHVuayBpbiBsaXN0ICAgICAgICAgICAgIHwKKwkgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICAgfCAgICAgICAgICAgICBCYWNrIHBvaW50ZXIgdG8gcHJldmlvdXMgY2h1bmsgaW4gbGlzdCAgICAgICAgICAgIHwKKwkgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICAgfCAgICAgICAgICAgICBVbnVzZWQgc3BhY2UgKG1heSBiZSAwIGJ5dGVzIGxvbmcpICAgICAgICAgICAgICAgIC4KKwkgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KKwkgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK25leHRjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgYGZvb3Q6JyB8ICAgICAgICAgICAgIFNpemUgb2YgY2h1bmssIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCisgIExhcmdlciBjaHVua3MgYXJlIGtlcHQgaW4gYSBmb3JtIG9mIGJpdHdpc2UgZGlnaXRhbCB0cmVlcyAoYWthCisgIHRyaWVzKSBrZXllZCBvbiBjaHVua3NpemVzLiAgQmVjYXVzZSBtYWxsb2NfdHJlZV9jaHVua3MgYXJlIG9ubHkgZm9yCisgIGZyZWUgY2h1bmtzIGdyZWF0ZXIgdGhhbiAyNTYgYnl0ZXMsIHRoZWlyIHNpemUgZG9lc24ndCBpbXBvc2UgYW55CisgIGNvbnN0cmFpbnRzIG9uIHVzZXIgY2h1bmsgc2l6ZXMuICBFYWNoIG5vZGUgbG9va3MgbGlrZToKKworICAgIGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICAgfCAgICAgICAgICAgICBTaXplIG9mIHByZXZpb3VzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICBgaGVhZDonIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuaywgaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgfFB8CisgICAgICBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIEZvcndhcmQgcG9pbnRlciB0byBuZXh0IGNodW5rIG9mIHNhbWUgc2l6ZSAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIEJhY2sgcG9pbnRlciB0byBwcmV2aW91cyBjaHVuayBvZiBzYW1lIHNpemUgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIFBvaW50ZXIgdG8gbGVmdCBjaGlsZCAoY2hpbGRbMF0pICAgICAgICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIFBvaW50ZXIgdG8gcmlnaHQgY2hpbGQgKGNoaWxkWzFdKSAgICAgICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIFBvaW50ZXIgdG8gcGFyZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIGJpbiBpbmRleCBvZiB0aGlzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIFVudXNlZCBzcGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLgorCSAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorbmV4dGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICBgZm9vdDonIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuaywgaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisKKyAgRWFjaCB0cmVlIGhvbGRpbmcgdHJlZW5vZGVzIGlzIGEgdHJlZSBvZiB1bmlxdWUgY2h1bmsgc2l6ZXMuICBDaHVua3MKKyAgb2YgdGhlIHNhbWUgc2l6ZSBhcmUgYXJyYW5nZWQgaW4gYSBjaXJjdWxhcmx5LWxpbmtlZCBsaXN0LCB3aXRoIG9ubHkKKyAgdGhlIG9sZGVzdCBjaHVuayAodGhlIG5leHQgdG8gYmUgdXNlZCwgaW4gb3VyIEZJRk8gb3JkZXJpbmcpCisgIGFjdHVhbGx5IGluIHRoZSB0cmVlLiAgKFRyZWUgbWVtYmVycyBhcmUgZGlzdGluZ3Vpc2hlZCBieSBhIG5vbi1udWxsCisgIHBhcmVudCBwb2ludGVyLikgIElmIGEgY2h1bmsgd2l0aCB0aGUgc2FtZSBzaXplIGFuIGFuIGV4aXN0aW5nIG5vZGUKKyAgaXMgaW5zZXJ0ZWQsIGl0IGlzIGxpbmtlZCBvZmYgdGhlIGV4aXN0aW5nIG5vZGUgdXNpbmcgcG9pbnRlcnMgdGhhdAorICB3b3JrIGluIHRoZSBzYW1lIHdheSBhcyBmZC9iayBwb2ludGVycyBvZiBzbWFsbCBjaHVua3MuCisKKyAgRWFjaCB0cmVlIGNvbnRhaW5zIGEgcG93ZXIgb2YgMiBzaXplZCByYW5nZSBvZiBjaHVuayBzaXplcyAodGhlCisgIHNtYWxsZXN0IGlzIDB4MTAwIDw9IHggPCAweDE4MCksIHdoaWNoIGlzIGlzIGRpdmlkZWQgaW4gaGFsZiBhdCBlYWNoCisgIHRyZWUgbGV2ZWwsIHdpdGggdGhlIGNodW5rcyBpbiB0aGUgc21hbGxlciBoYWxmIG9mIHRoZSByYW5nZSAoMHgxMDAKKyAgPD0geCA8IDB4MTQwIGZvciB0aGUgdG9wIG5vc2UpIGluIHRoZSBsZWZ0IHN1YnRyZWUgYW5kIHRoZSBsYXJnZXIKKyAgaGFsZiAoMHgxNDAgPD0geCA8IDB4MTgwKSBpbiB0aGUgcmlnaHQgc3VidHJlZS4gIFRoaXMgaXMsIG9mIGNvdXJzZSwKKyAgZG9uZSBieSBpbnNwZWN0aW5nIGluZGl2aWR1YWwgYml0cy4KKworICBVc2luZyB0aGVzZSBydWxlcywgZWFjaCBub2RlJ3MgbGVmdCBzdWJ0cmVlIGNvbnRhaW5zIGFsbCBzbWFsbGVyCisgIHNpemVzIHRoYW4gaXRzIHJpZ2h0IHN1YnRyZWUuICBIb3dldmVyLCB0aGUgbm9kZSBhdCB0aGUgcm9vdCBvZiBlYWNoCisgIHN1YnRyZWUgaGFzIG5vIHBhcnRpY3VsYXIgb3JkZXJpbmcgcmVsYXRpb25zaGlwIHRvIGVpdGhlci4gIChUaGUKKyAgZGl2aWRpbmcgbGluZSBiZXR3ZWVuIHRoZSBzdWJ0cmVlIHNpemVzIGlzIGJhc2VkIG9uIHRyaWUgcmVsYXRpb24uKQorICBJZiB3ZSByZW1vdmUgdGhlIGxhc3QgY2h1bmsgb2YgYSBnaXZlbiBzaXplIGZyb20gdGhlIGludGVyaW9yIG9mIHRoZQorICB0cmVlLCB3ZSBuZWVkIHRvIHJlcGxhY2UgaXQgd2l0aCBhIGxlYWYgbm9kZS4gIFRoZSB0cmVlIG9yZGVyaW5nCisgIHJ1bGVzIHBlcm1pdCBhIG5vZGUgdG8gYmUgcmVwbGFjZWQgYnkgYW55IGxlYWYgYmVsb3cgaXQuCisKKyAgVGhlIHNtYWxsZXN0IGNodW5rIGluIGEgdHJlZSAoYSBjb21tb24gb3BlcmF0aW9uIGluIGEgYmVzdC1maXQKKyAgYWxsb2NhdG9yKSBjYW4gYmUgZm91bmQgYnkgd2Fsa2luZyBhIHBhdGggdG8gdGhlIGxlZnRtb3N0IGxlYWYgaW4KKyAgdGhlIHRyZWUuICBVbmxpa2UgYSB1c3VhbCBiaW5hcnkgdHJlZSwgd2hlcmUgd2UgZm9sbG93IGxlZnQgY2hpbGQKKyAgcG9pbnRlcnMgdW50aWwgd2UgcmVhY2ggYSBudWxsLCBoZXJlIHdlIGZvbGxvdyB0aGUgcmlnaHQgY2hpbGQKKyAgcG9pbnRlciBhbnkgdGltZSB0aGUgbGVmdCBvbmUgaXMgbnVsbCwgdW50aWwgd2UgcmVhY2ggYSBsZWFmIHdpdGgKKyAgYm90aCBjaGlsZCBwb2ludGVycyBudWxsLiBUaGUgc21hbGxlc3QgY2h1bmsgaW4gdGhlIHRyZWUgd2lsbCBiZQorICBzb21ld2hlcmUgYWxvbmcgdGhhdCBwYXRoLgorCisgIFRoZSB3b3JzdCBjYXNlIG51bWJlciBvZiBzdGVwcyB0byBhZGQsIGZpbmQsIG9yIHJlbW92ZSBhIG5vZGUgaXMKKyAgYm91bmRlZCBieSB0aGUgbnVtYmVyIG9mIGJpdHMgZGlmZmVyZW50aWF0aW5nIGNodW5rcyB3aXRoaW4KKyAgYmlucy4gVW5kZXIgY3VycmVudCBiaW4gY2FsY3VsYXRpb25zLCB0aGlzIHJhbmdlcyBmcm9tIDYgdXAgdG8gMjEKKyAgKGZvciAzMiBiaXQgc2l6ZXMpIG9yIHVwIHRvIDUzIChmb3IgNjQgYml0IHNpemVzKS4gVGhlIHR5cGljYWwgY2FzZQorICBpcyBvZiBjb3Vyc2UgbXVjaCBiZXR0ZXIuCisqLworCitzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsgeworICAvKiBUaGUgZmlyc3QgZm91ciBmaWVsZHMgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggbWFsbG9jX2NodW5rICovCisgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgcHJldl9mb290OworICBzaXplX3QgICAgICAgICAgICAgICAgICAgIGhlYWQ7CisgIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogZmQ7CisgIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogYms7CisKKyAgc3RydWN0IG1hbGxvY190cmVlX2NodW5rKiBjaGlsZFsyXTsKKyAgc3RydWN0IG1hbGxvY190cmVlX2NodW5rKiBwYXJlbnQ7CisgIGJpbmRleF90ICAgICAgICAgICAgICAgICAgaW5kZXg7Cit9OworCit0eXBlZGVmIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayAgdGNodW5rOwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsqIHRjaHVua3B0cjsKK3R5cGVkZWYgc3RydWN0IG1hbGxvY190cmVlX2NodW5rKiB0YmlucHRyOyAvKiBUaGUgdHlwZSBvZiBiaW5zIG9mIHRyZWVzICovCisKKy8qIEEgbGl0dGxlIGhlbHBlciBtYWNybyBmb3IgdHJlZXMgKi8KKyNkZWZpbmUgbGVmdG1vc3RfY2hpbGQodCkgKCh0KS0+Y2hpbGRbMF0gIT0gMD8gKHQpLT5jaGlsZFswXSA6ICh0KS0+Y2hpbGRbMV0pCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNlZ21lbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIEVhY2ggbWFsbG9jIHNwYWNlIG1heSBpbmNsdWRlIG5vbi1jb250aWd1b3VzIHNlZ21lbnRzLCBoZWxkIGluIGEKKyAgbGlzdCBoZWFkZWQgYnkgYW4gZW1iZWRkZWQgbWFsbG9jX3NlZ21lbnQgcmVjb3JkIHJlcHJlc2VudGluZyB0aGUKKyAgdG9wLW1vc3Qgc3BhY2UuIFNlZ21lbnRzIGFsc28gaW5jbHVkZSBmbGFncyBob2xkaW5nIHByb3BlcnRpZXMgb2YKKyAgdGhlIHNwYWNlLiBMYXJnZSBjaHVua3MgdGhhdCBhcmUgZGlyZWN0bHkgYWxsb2NhdGVkIGJ5IG1tYXAgYXJlIG5vdAorICBpbmNsdWRlZCBpbiB0aGlzIGxpc3QuIFRoZXkgYXJlIGluc3RlYWQgaW5kZXBlbmRlbnRseSBjcmVhdGVkIGFuZAorICBkZXN0cm95ZWQgd2l0aG91dCBvdGhlcndpc2Uga2VlcGluZyB0cmFjayBvZiB0aGVtLgorCisgIFNlZ21lbnQgbWFuYWdlbWVudCBtYWlubHkgY29tZXMgaW50byBwbGF5IGZvciBzcGFjZXMgYWxsb2NhdGVkIGJ5CisgIE1NQVAuICBBbnkgY2FsbCB0byBNTUFQIG1pZ2h0IG9yIG1pZ2h0IG5vdCByZXR1cm4gbWVtb3J5IHRoYXQgaXMKKyAgYWRqYWNlbnQgdG8gYW4gZXhpc3Rpbmcgc2VnbWVudC4gIE1PUkVDT1JFIG5vcm1hbGx5IGNvbnRpZ3VvdXNseQorICBleHRlbmRzIHRoZSBjdXJyZW50IHNwYWNlLCBzbyB0aGlzIHNwYWNlIGlzIGFsbW9zdCBhbHdheXMgYWRqYWNlbnQsCisgIHdoaWNoIGlzIHNpbXBsZXIgYW5kIGZhc3RlciB0byBkZWFsIHdpdGguIChUaGlzIGlzIHdoeSBNT1JFQ09SRSBpcworICB1c2VkIHByZWZlcmVudGlhbGx5IHRvIE1NQVAgd2hlbiBib3RoIGFyZSBhdmFpbGFibGUgLS0gc2VlCisgIHN5c19hbGxvYy4pICBXaGVuIGFsbG9jYXRpbmcgdXNpbmcgTU1BUCwgd2UgZG9uJ3QgdXNlIGFueSBvZiB0aGUKKyAgaGludGluZyBtZWNoYW5pc21zIChpbmNvbnNpc3RlbnRseSkgc3VwcG9ydGVkIGluIHZhcmlvdXMKKyAgaW1wbGVtZW50YXRpb25zIG9mIHVuaXggbW1hcCwgb3IgZGlzdGluZ3Vpc2ggcmVzZXJ2aW5nIGZyb20KKyAgY29tbWl0dGluZyBtZW1vcnkuIEluc3RlYWQsIHdlIGp1c3QgYXNrIGZvciBzcGFjZSwgYW5kIGV4cGxvaXQKKyAgY29udGlndWl0eSB3aGVuIHdlIGdldCBpdC4gIEl0IGlzIHByb2JhYmx5IHBvc3NpYmxlIHRvIGRvCisgIGJldHRlciB0aGFuIHRoaXMgb24gc29tZSBzeXN0ZW1zLCBidXQgbm8gZ2VuZXJhbCBzY2hlbWUgc2VlbXMKKyAgdG8gYmUgc2lnbmlmaWNhbnRseSBiZXR0ZXIuCisKKyAgTWFuYWdlbWVudCBlbnRhaWxzIGEgc2ltcGxlciB2YXJpYW50IG9mIHRoZSBjb25zb2xpZGF0aW9uIHNjaGVtZQorICB1c2VkIGZvciBjaHVua3MgdG8gcmVkdWNlIGZyYWdtZW50YXRpb24gLS0gbmV3IGFkamFjZW50IG1lbW9yeSBpcworICBub3JtYWxseSBwcmVwZW5kZWQgb3IgYXBwZW5kZWQgdG8gYW4gZXhpc3Rpbmcgc2VnbWVudC4gSG93ZXZlciwKKyAgdGhlcmUgYXJlIGxpbWl0YXRpb25zIGNvbXBhcmVkIHRvIGNodW5rIGNvbnNvbGlkYXRpb24gdGhhdCBtb3N0bHkKKyAgcmVmbGVjdCB0aGUgZmFjdCB0aGF0IHNlZ21lbnQgcHJvY2Vzc2luZyBpcyByZWxhdGl2ZWx5IGluZnJlcXVlbnQKKyAgKG9jY3VycmluZyBvbmx5IHdoZW4gZ2V0dGluZyBtZW1vcnkgZnJvbSBzeXN0ZW0pIGFuZCB0aGF0IHdlCisgIGRvbid0IGV4cGVjdCB0byBoYXZlIGh1Z2UgbnVtYmVycyBvZiBzZWdtZW50czoKKworICAqIFNlZ21lbnRzIGFyZSBub3QgaW5kZXhlZCwgc28gdHJhdmVyc2FsIHJlcXVpcmVzIGxpbmVhciBzY2Fucy4gIChJdAorICAgIHdvdWxkIGJlIHBvc3NpYmxlIHRvIGluZGV4IHRoZXNlLCBidXQgaXMgbm90IHdvcnRoIHRoZSBleHRyYQorICAgIG92ZXJoZWFkIGFuZCBjb21wbGV4aXR5IGZvciBtb3N0IHByb2dyYW1zIG9uIG1vc3QgcGxhdGZvcm1zLikKKyAgKiBOZXcgc2VnbWVudHMgYXJlIG9ubHkgYXBwZW5kZWQgdG8gb2xkIG9uZXMgd2hlbiBob2xkaW5nIHRvcC1tb3N0CisgICAgbWVtb3J5OyBpZiB0aGV5IGNhbm5vdCBiZSBwcmVwZW5kZWQgdG8gb3RoZXJzLCB0aGV5IGFyZSBoZWxkIGluCisgICAgZGlmZmVyZW50IHNlZ21lbnRzLgorCisgIEV4Y2VwdCBmb3IgdGhlIHRvcC1tb3N0IHNlZ21lbnQgb2YgYW4gbXN0YXRlLCBlYWNoIHNlZ21lbnQgcmVjb3JkCisgIGlzIGtlcHQgYXQgdGhlIHRhaWwgb2YgaXRzIHNlZ21lbnQuIFNlZ21lbnRzIGFyZSBhZGRlZCBieSBwdXNoaW5nCisgIHNlZ21lbnQgcmVjb3JkcyBvbnRvIHRoZSBsaXN0IGhlYWRlZCBieSAmbXN0YXRlLnNlZyBmb3IgdGhlCisgIGNvbnRhaW5pbmcgbXN0YXRlLgorCisgIFNlZ21lbnQgZmxhZ3MgY29udHJvbCBhbGxvY2F0aW9uL21lcmdlL2RlYWxsb2NhdGlvbiBwb2xpY2llczoKKyAgKiBJZiBFWFRFUk5fQklUIHNldCwgdGhlbiB3ZSBkaWQgbm90IGFsbG9jYXRlIHRoaXMgc2VnbWVudCwKKyAgICBhbmQgc28gc2hvdWxkIG5vdCB0cnkgdG8gZGVhbGxvY2F0ZSBvciBtZXJnZSB3aXRoIG90aGVycy4KKyAgICAoVGhpcyBjdXJyZW50bHkgaG9sZHMgb25seSBmb3IgdGhlIGluaXRpYWwgc2VnbWVudCBwYXNzZWQKKyAgICBpbnRvIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlLikKKyAgKiBJZiBJU19NTUFQUEVEX0JJVCBzZXQsIHRoZSBzZWdtZW50IG1heSBiZSBtZXJnZWQgd2l0aAorICAgIG90aGVyIHN1cnJvdW5kaW5nIG1tYXBwZWQgc2VnbWVudHMgYW5kIHRyaW1tZWQvZGUtYWxsb2NhdGVkCisgICAgdXNpbmcgbXVubWFwLgorICAqIElmIG5laXRoZXIgYml0IGlzIHNldCwgdGhlbiB0aGUgc2VnbWVudCB3YXMgb2J0YWluZWQgdXNpbmcKKyAgICBNT1JFQ09SRSBzbyBjYW4gYmUgbWVyZ2VkIHdpdGggc3Vycm91bmRpbmcgTU9SRUNPUkUnZCBzZWdtZW50cworICAgIGFuZCBkZWFsbG9jYXRlZC90cmltbWVkIHVzaW5nIE1PUkVDT1JFIHdpdGggbmVnYXRpdmUgYXJndW1lbnRzLgorKi8KKworc3RydWN0IG1hbGxvY19zZWdtZW50IHsKKyAgY2hhciogICAgICAgIGJhc2U7ICAgICAgICAgICAgIC8qIGJhc2UgYWRkcmVzcyAqLworICBzaXplX3QgICAgICAgc2l6ZTsgICAgICAgICAgICAgLyogYWxsb2NhdGVkIHNpemUgKi8KKyAgc3RydWN0IG1hbGxvY19zZWdtZW50KiBuZXh0OyAgIC8qIHB0ciB0byBuZXh0IHNlZ21lbnQgKi8KKyAgZmxhZ190ICAgICAgIHNmbGFnczsgICAgICAgICAgIC8qIG1tYXAgYW5kIGV4dGVybiBmbGFnICovCit9OworCisjZGVmaW5lIGlzX21tYXBwZWRfc2VnbWVudChTKSAgKChTKS0+c2ZsYWdzICYgSVNfTU1BUFBFRF9CSVQpCisjZGVmaW5lIGlzX2V4dGVybl9zZWdtZW50KFMpICAgKChTKS0+c2ZsYWdzICYgRVhURVJOX0JJVCkKKwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQgIG1zZWdtZW50OwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQqIG1zZWdtZW50cHRyOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1hbGxvY19zdGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICAgQSBtYWxsb2Nfc3RhdGUgaG9sZHMgYWxsIG9mIHRoZSBib29ra2VlcGluZyBmb3IgYSBzcGFjZS4KKyAgIFRoZSBtYWluIGZpZWxkcyBhcmU6CisKKyAgVG9wCisgICAgVGhlIHRvcG1vc3QgY2h1bmsgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgc2VnbWVudC4gSXRzIHNpemUgaXMKKyAgICBjYWNoZWQgaW4gdG9wc2l6ZS4gIFRoZSBhY3R1YWwgc2l6ZSBvZiB0b3Btb3N0IHNwYWNlIGlzCisgICAgdG9wc2l6ZStUT1BfRk9PVF9TSVpFLCB3aGljaCBpbmNsdWRlcyBzcGFjZSByZXNlcnZlZCBmb3IgYWRkaW5nCisgICAgZmVuY2Vwb3N0cyBhbmQgc2VnbWVudCByZWNvcmRzIGlmIG5lY2Vzc2FyeSB3aGVuIGdldHRpbmcgbW9yZQorICAgIHNwYWNlIGZyb20gdGhlIHN5c3RlbS4gIFRoZSBzaXplIGF0IHdoaWNoIHRvIGF1dG90cmltIHRvcCBpcworICAgIGNhY2hlZCBmcm9tIG1wYXJhbXMgaW4gdHJpbV9jaGVjaywgZXhjZXB0IHRoYXQgaXQgaXMgZGlzYWJsZWQgaWYKKyAgICBhbiBhdXRvdHJpbSBmYWlscy4KKworICBEZXNpZ25hdGVkIHZpY3RpbSAoZHYpCisgICAgVGhpcyBpcyB0aGUgcHJlZmVycmVkIGNodW5rIGZvciBzZXJ2aWNpbmcgc21hbGwgcmVxdWVzdHMgdGhhdAorICAgIGRvbid0IGhhdmUgZXhhY3QgZml0cy4gIEl0IGlzIG5vcm1hbGx5IHRoZSBjaHVuayBzcGxpdCBvZmYgbW9zdAorICAgIHJlY2VudGx5IHRvIHNlcnZpY2UgYW5vdGhlciBzbWFsbCByZXF1ZXN0LiAgSXRzIHNpemUgaXMgY2FjaGVkIGluCisgICAgZHZzaXplLiBUaGUgbGluayBmaWVsZHMgb2YgdGhpcyBjaHVuayBhcmUgbm90IG1haW50YWluZWQgc2luY2UgaXQKKyAgICBpcyBub3Qga2VwdCBpbiBhIGJpbi4KKworICBTbWFsbEJpbnMKKyAgICBBbiBhcnJheSBvZiBiaW4gaGVhZGVycyBmb3IgZnJlZSBjaHVua3MuICBUaGVzZSBiaW5zIGhvbGQgY2h1bmtzCisgICAgd2l0aCBzaXplcyBsZXNzIHRoYW4gTUlOX0xBUkdFX1NJWkUgYnl0ZXMuIEVhY2ggYmluIGNvbnRhaW5zCisgICAgY2h1bmtzIG9mIGFsbCB0aGUgc2FtZSBzaXplLCBzcGFjZWQgOCBieXRlcyBhcGFydC4gIFRvIHNpbXBsaWZ5CisgICAgdXNlIGluIGRvdWJsZS1saW5rZWQgbGlzdHMsIGVhY2ggYmluIGhlYWRlciBhY3RzIGFzIGEgbWFsbG9jX2NodW5rCisgICAgcG9pbnRpbmcgdG8gdGhlIHJlYWwgZmlyc3Qgbm9kZSwgaWYgaXQgZXhpc3RzIChlbHNlIHBvaW50aW5nIHRvCisgICAgaXRzZWxmKS4gIFRoaXMgYXZvaWRzIHNwZWNpYWwtY2FzaW5nIGZvciBoZWFkZXJzLiAgQnV0IHRvIGF2b2lkCisgICAgd2FzdGUsIHdlIGFsbG9jYXRlIG9ubHkgdGhlIGZkL2JrIHBvaW50ZXJzIG9mIGJpbnMsIGFuZCB0aGVuIHVzZQorICAgIHJlcG9zaXRpb25pbmcgdHJpY2tzIHRvIHRyZWF0IHRoZXNlIGFzIHRoZSBmaWVsZHMgb2YgYSBjaHVuay4KKworICBUcmVlQmlucworICAgIFRyZWViaW5zIGFyZSBwb2ludGVycyB0byB0aGUgcm9vdHMgb2YgdHJlZXMgaG9sZGluZyBhIHJhbmdlIG9mCisgICAgc2l6ZXMuIFRoZXJlIGFyZSAyIGVxdWFsbHkgc3BhY2VkIHRyZWViaW5zIGZvciBlYWNoIHBvd2VyIG9mIHR3bworICAgIGZyb20gVFJFRV9TSElGVCB0byBUUkVFX1NISUZUKzE2LiBUaGUgbGFzdCBiaW4gaG9sZHMgYW55dGhpbmcKKyAgICBsYXJnZXIuCisKKyAgQmluIG1hcHMKKyAgICBUaGVyZSBpcyBvbmUgYml0IG1hcCBmb3Igc21hbGwgYmlucyAoInNtYWxsbWFwIikgYW5kIG9uZSBmb3IKKyAgICB0cmVlYmlucyAoInRyZWVtYXApLiAgRWFjaCBiaW4gc2V0cyBpdHMgYml0IHdoZW4gbm9uLWVtcHR5LCBhbmQKKyAgICBjbGVhcnMgdGhlIGJpdCB3aGVuIGVtcHR5LiAgQml0IG9wZXJhdGlvbnMgYXJlIHRoZW4gdXNlZCB0byBhdm9pZAorICAgIGJpbi1ieS1iaW4gc2VhcmNoaW5nIC0tIG5lYXJseSBhbGwgInNlYXJjaCIgaXMgZG9uZSB3aXRob3V0IGV2ZXIKKyAgICBsb29raW5nIGF0IGJpbnMgdGhhdCB3b24ndCBiZSBzZWxlY3RlZC4gIFRoZSBiaXQgbWFwcworICAgIGNvbnNlcnZhdGl2ZWx5IHVzZSAzMiBiaXRzIHBlciBtYXAgd29yZCwgZXZlbiBpZiBvbiA2NGJpdCBzeXN0ZW0uCisgICAgRm9yIGEgZ29vZCBkZXNjcmlwdGlvbiBvZiBzb21lIG9mIHRoZSBiaXQtYmFzZWQgdGVjaG5pcXVlcyB1c2VkCisgICAgaGVyZSwgc2VlIEhlbnJ5IFMuIFdhcnJlbiBKcidzIGJvb2sgIkhhY2tlcidzIERlbGlnaHQiIChhbmQKKyAgICBzdXBwbGVtZW50IGF0IGh0dHA6Ly9oYWNrZXJzZGVsaWdodC5vcmcvKS4gTWFueSBvZiB0aGVzZSBhcmUKKyAgICBpbnRlbmRlZCB0byByZWR1Y2UgdGhlIGJyYW5jaGluZXNzIG9mIHBhdGhzIHRocm91Z2ggbWFsbG9jIGV0YywgYXMKKyAgICB3ZWxsIGFzIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIG1lbW9yeSBsb2NhdGlvbnMgcmVhZCBvciB3cml0dGVuLgorCisgIFNlZ21lbnRzCisgICAgQSBsaXN0IG9mIHNlZ21lbnRzIGhlYWRlZCBieSBhbiBlbWJlZGRlZCBtYWxsb2Nfc2VnbWVudCByZWNvcmQKKyAgICByZXByZXNlbnRpbmcgdGhlIGluaXRpYWwgc3BhY2UuCisKKyAgQWRkcmVzcyBjaGVjayBzdXBwb3J0CisgICAgVGhlIGxlYXN0X2FkZHIgZmllbGQgaXMgdGhlIGxlYXN0IGFkZHJlc3MgZXZlciBvYnRhaW5lZCBmcm9tCisgICAgTU9SRUNPUkUgb3IgTU1BUC4gQXR0ZW1wdGVkIGZyZWVzIGFuZCByZWFsbG9jcyBvZiBhbnkgYWRkcmVzcyBsZXNzCisgICAgdGhhbiB0aGlzIGFyZSB0cmFwcGVkICh1bmxlc3MgSU5TRUNVUkUgaXMgZGVmaW5lZCkuCisKKyAgTWFnaWMgdGFnCisgICAgQSBjcm9zcy1jaGVjayBmaWVsZCB0aGF0IHNob3VsZCBhbHdheXMgaG9sZCBzYW1lIHZhbHVlIGFzIG1wYXJhbXMubWFnaWMuCisKKyAgRmxhZ3MKKyAgICBCaXRzIHJlY29yZGluZyB3aGV0aGVyIHRvIHVzZSBNTUFQLCBsb2Nrcywgb3IgY29udGlndW91cyBNT1JFQ09SRQorCisgIFN0YXRpc3RpY3MKKyAgICBFYWNoIHNwYWNlIGtlZXBzIHRyYWNrIG9mIGN1cnJlbnQgYW5kIG1heGltdW0gc3lzdGVtIG1lbW9yeQorICAgIG9idGFpbmVkIHZpYSBNT1JFQ09SRSBvciBNTUFQLgorCisgIFRyaW0gc3VwcG9ydAorICAgIEZpZWxkcyBob2xkaW5nIHRoZSBhbW91bnQgb2YgdW51c2VkIHRvcG1vc3QgbWVtb3J5IHRoYXQgc2hvdWxkIHRyaWdnZXIKKyAgICB0aW1taW5nLCBhbmQgYSBjb3VudGVyIHRvIGZvcmNlIHBlcmlvZGljIHNjYW5uaW5nIHRvIHJlbGVhc2UgdW51c2VkCisgICAgbm9uLXRvcG1vc3Qgc2VnbWVudHMuCisKKyAgTG9ja2luZworICAgIElmIFVTRV9MT0NLUyBpcyBkZWZpbmVkLCB0aGUgIm11dGV4IiBsb2NrIGlzIGFjcXVpcmVkIGFuZCByZWxlYXNlZAorICAgIGFyb3VuZCBldmVyeSBwdWJsaWMgY2FsbCB1c2luZyB0aGlzIG1zcGFjZS4KKworICBFeHRlbnNpb24gc3VwcG9ydAorICAgIEEgdm9pZCogcG9pbnRlciBhbmQgYSBzaXplX3QgZmllbGQgdGhhdCBjYW4gYmUgdXNlZCB0byBoZWxwIGltcGxlbWVudAorICAgIGV4dGVuc2lvbnMgdG8gdGhpcyBtYWxsb2MuCisqLworCisvKiBCaW4gdHlwZXMsIHdpZHRocyBhbmQgc2l6ZXMgKi8KKyNkZWZpbmUgTlNNQUxMQklOUyAgICAgICAgKDMyVSkKKyNkZWZpbmUgTlRSRUVCSU5TICAgICAgICAgKDMyVSkKKyNkZWZpbmUgU01BTExCSU5fU0hJRlQgICAgKDNVKQorI2RlZmluZSBTTUFMTEJJTl9XSURUSCAgICAoU0laRV9UX09ORSA8PCBTTUFMTEJJTl9TSElGVCkKKyNkZWZpbmUgVFJFRUJJTl9TSElGVCAgICAgKDhVKQorI2RlZmluZSBNSU5fTEFSR0VfU0laRSAgICAoU0laRV9UX09ORSA8PCBUUkVFQklOX1NISUZUKQorI2RlZmluZSBNQVhfU01BTExfU0laRSAgICAoTUlOX0xBUkdFX1NJWkUgLSBTSVpFX1RfT05FKQorI2RlZmluZSBNQVhfU01BTExfUkVRVUVTVCAoTUFYX1NNQUxMX1NJWkUgLSBDSFVOS19BTElHTl9NQVNLIC0gQ0hVTktfT1ZFUkhFQUQpCisKK3N0cnVjdCBtYWxsb2Nfc3RhdGUgeworICBiaW5tYXBfdCAgIHNtYWxsbWFwOworICBiaW5tYXBfdCAgIHRyZWVtYXA7CisgIHNpemVfdCAgICAgZHZzaXplOworICBzaXplX3QgICAgIHRvcHNpemU7CisgIGNoYXIqICAgICAgbGVhc3RfYWRkcjsKKyAgbWNodW5rcHRyICBkdjsKKyAgbWNodW5rcHRyICB0b3A7CisgIHNpemVfdCAgICAgdHJpbV9jaGVjazsKKyAgc2l6ZV90ICAgICByZWxlYXNlX2NoZWNrczsKKyAgc2l6ZV90ICAgICBtYWdpYzsKKyAgbWNodW5rcHRyICBzbWFsbGJpbnNbKE5TTUFMTEJJTlMrMSkqMl07CisgIHRiaW5wdHIgICAgdHJlZWJpbnNbTlRSRUVCSU5TXTsKKyAgc2l6ZV90ICAgICBmb290cHJpbnQ7CisgIHNpemVfdCAgICAgbWF4X2Zvb3RwcmludDsKKyAgZmxhZ190ICAgICBtZmxhZ3M7CisjaWYgVVNFX0xPQ0tTCisgIE1MT0NLX1QgICAgbXV0ZXg7ICAgICAvKiBsb2NhdGUgbG9jayBhbW9uZyBmaWVsZHMgdGhhdCByYXJlbHkgY2hhbmdlICovCisjZW5kaWYgLyogVVNFX0xPQ0tTICovCisgIG1zZWdtZW50ICAgc2VnOworICB2b2lkKiAgICAgIGV4dHA7ICAgICAgLyogVW51c2VkIGJ1dCBhdmFpbGFibGUgZm9yIGV4dGVuc2lvbnMgKi8KKyAgc2l6ZV90ICAgICBleHRzOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3N0YXRlKiAgICBtc3RhdGU7CisKKy8qIC0tLS0tLS0tLS0tLS0gR2xvYmFsIG1hbGxvY19zdGF0ZSBhbmQgbWFsbG9jX3BhcmFtcyAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIG1hbGxvY19wYXJhbXMgaG9sZHMgZ2xvYmFsIHByb3BlcnRpZXMsIGluY2x1ZGluZyB0aG9zZSB0aGF0IGNhbiBiZQorICBkeW5hbWljYWxseSBzZXQgdXNpbmcgbWFsbG9wdC4gVGhlcmUgaXMgYSBzaW5nbGUgaW5zdGFuY2UsIG1wYXJhbXMsCisgIGluaXRpYWxpemVkIGluIGluaXRfbXBhcmFtcy4gTm90ZSB0aGF0IHRoZSBub24temVyb25lc3Mgb2YgIm1hZ2ljIgorICBhbHNvIHNlcnZlcyBhcyBhbiBpbml0aWFsaXphdGlvbiBmbGFnLgorKi8KKworc3RydWN0IG1hbGxvY19wYXJhbXMgeworICB2b2xhdGlsZSBzaXplX3QgbWFnaWM7CisgIHNpemVfdCBwYWdlX3NpemU7CisgIHNpemVfdCBncmFudWxhcml0eTsKKyAgc2l6ZV90IG1tYXBfdGhyZXNob2xkOworICBzaXplX3QgdHJpbV90aHJlc2hvbGQ7CisgIGZsYWdfdCBkZWZhdWx0X21mbGFnczsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWFsbG9jX3BhcmFtcyBtcGFyYW1zOworCisvKiBFbnN1cmUgbXBhcmFtcyBpbml0aWFsaXplZCAqLworI2RlZmluZSBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKSAoKHZvaWQpKG1wYXJhbXMubWFnaWMgIT0gMCB8fCBpbml0X21wYXJhbXMoKSkpCisKKyNpZiAhT05MWV9NU1BBQ0VTCisKKy8qIFRoZSBnbG9iYWwgbWFsbG9jX3N0YXRlIHVzZWQgZm9yIGFsbCBub24tIm1zcGFjZSIgY2FsbHMgKi8KK3N0YXRpYyBzdHJ1Y3QgbWFsbG9jX3N0YXRlIF9nbV87CisjZGVmaW5lIGdtICAgICAgICAgICAgICAgICAoJl9nbV8pCisjZGVmaW5lIGlzX2dsb2JhbChNKSAgICAgICAoKE0pID09ICZfZ21fKQorCisjZW5kaWYgLyogIU9OTFlfTVNQQUNFUyAqLworCisjZGVmaW5lIGlzX2luaXRpYWxpemVkKE0pICAoKE0pLT50b3AgIT0gMCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3lzdGVtIGFsbG9jIHNldHVwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogT3BlcmF0aW9ucyBvbiBtZmxhZ3MgKi8KKworI2RlZmluZSB1c2VfbG9jayhNKSAgICAgICAgICAgKChNKS0+bWZsYWdzICYgICBVU0VfTE9DS19CSVQpCisjZGVmaW5lIGVuYWJsZV9sb2NrKE0pICAgICAgICAoKE0pLT5tZmxhZ3MgfD0gIFVTRV9MT0NLX0JJVCkKKyNkZWZpbmUgZGlzYWJsZV9sb2NrKE0pICAgICAgICgoTSktPm1mbGFncyAmPSB+VVNFX0xPQ0tfQklUKQorCisjZGVmaW5lIHVzZV9tbWFwKE0pICAgICAgICAgICAoKE0pLT5tZmxhZ3MgJiAgIFVTRV9NTUFQX0JJVCkKKyNkZWZpbmUgZW5hYmxlX21tYXAoTSkgICAgICAgICgoTSktPm1mbGFncyB8PSAgVVNFX01NQVBfQklUKQorI2RlZmluZSBkaXNhYmxlX21tYXAoTSkgICAgICAgKChNKS0+bWZsYWdzICY9IH5VU0VfTU1BUF9CSVQpCisKKyNkZWZpbmUgdXNlX25vbmNvbnRpZ3VvdXMoTSkgICgoTSktPm1mbGFncyAmICAgVVNFX05PTkNPTlRJR1VPVVNfQklUKQorI2RlZmluZSBkaXNhYmxlX2NvbnRpZ3VvdXMoTSkgKChNKS0+bWZsYWdzIHw9ICBVU0VfTk9OQ09OVElHVU9VU19CSVQpCisKKyNkZWZpbmUgc2V0X2xvY2soTSxMKVwKKyAoKE0pLT5tZmxhZ3MgPSAoTCk/XAorICAoKE0pLT5tZmxhZ3MgfCBVU0VfTE9DS19CSVQpIDpcCisgICgoTSktPm1mbGFncyAmIH5VU0VfTE9DS19CSVQpKQorCisvKiBwYWdlLWFsaWduIGEgc2l6ZSAqLworI2RlZmluZSBwYWdlX2FsaWduKFMpXAorICgoKFMpICsgKG1wYXJhbXMucGFnZV9zaXplIC0gU0laRV9UX09ORSkpICYgfihtcGFyYW1zLnBhZ2Vfc2l6ZSAtIFNJWkVfVF9PTkUpKQorCisvKiBncmFudWxhcml0eS1hbGlnbiBhIHNpemUgKi8KKyNkZWZpbmUgZ3JhbnVsYXJpdHlfYWxpZ24oUylcCisgICgoKFMpICsgKG1wYXJhbXMuZ3JhbnVsYXJpdHkgLSBTSVpFX1RfT05FKSlcCisgICAmIH4obXBhcmFtcy5ncmFudWxhcml0eSAtIFNJWkVfVF9PTkUpKQorCisKKy8qIEZvciBtbWFwLCB1c2UgZ3JhbnVsYXJpdHkgYWxpZ25tZW50IG9uIHdpbmRvd3MsIGVsc2UgcGFnZS1hbGlnbiAqLworI2lmZGVmIFdJTjMyCisjZGVmaW5lIG1tYXBfYWxpZ24oUykgZ3JhbnVsYXJpdHlfYWxpZ24oUykKKyNlbHNlCisjZGVmaW5lIG1tYXBfYWxpZ24oUykgcGFnZV9hbGlnbihTKQorI2VuZGlmCisKKy8qIEZvciBzeXNfYWxsb2MsIGVub3VnaCBwYWRkaW5nIHRvIGVuc3VyZSBjYW4gbWFsbG9jIHJlcXVlc3Qgb24gc3VjY2VzcyAqLworI2RlZmluZSBTWVNfQUxMT0NfUEFERElORyAoVE9QX0ZPT1RfU0laRSArIE1BTExPQ19BTElHTk1FTlQpCisKKyNkZWZpbmUgaXNfcGFnZV9hbGlnbmVkKFMpXAorICAgKCgoc2l6ZV90KShTKSAmIChtcGFyYW1zLnBhZ2Vfc2l6ZSAtIFNJWkVfVF9PTkUpKSA9PSAwKQorI2RlZmluZSBpc19ncmFudWxhcml0eV9hbGlnbmVkKFMpXAorICAgKCgoc2l6ZV90KShTKSAmIChtcGFyYW1zLmdyYW51bGFyaXR5IC0gU0laRV9UX09ORSkpID09IDApCisKKy8qICBUcnVlIGlmIHNlZ21lbnQgUyBob2xkcyBhZGRyZXNzIEEgKi8KKyNkZWZpbmUgc2VnbWVudF9ob2xkcyhTLCBBKVwKKyAgKChjaGFyKikoQSkgPj0gUy0+YmFzZSAmJiAoY2hhciopKEEpIDwgUy0+YmFzZSArIFMtPnNpemUpCisKKy8qIFJldHVybiBzZWdtZW50IGhvbGRpbmcgZ2l2ZW4gYWRkcmVzcyAqLworc3RhdGljIG1zZWdtZW50cHRyIHNlZ21lbnRfaG9sZGluZyhtc3RhdGUgbSwgY2hhciogYWRkcikgeworICBtc2VnbWVudHB0ciBzcCA9ICZtLT5zZWc7CisgIGZvciAoOzspIHsKKyAgICBpZiAoYWRkciA+PSBzcC0+YmFzZSAmJiBhZGRyIDwgc3AtPmJhc2UgKyBzcC0+c2l6ZSkKKyAgICAgIHJldHVybiBzcDsKKyAgICBpZiAoKHNwID0gc3AtPm5leHQpID09IDApCisgICAgICByZXR1cm4gMDsKKyAgfQorfQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBzZWdtZW50IGNvbnRhaW5zIGEgc2VnbWVudCBsaW5rICovCitzdGF0aWMgaW50IGhhc19zZWdtZW50X2xpbmsobXN0YXRlIG0sIG1zZWdtZW50cHRyIHNzKSB7CisgIG1zZWdtZW50cHRyIHNwID0gJm0tPnNlZzsKKyAgZm9yICg7OykgeworICAgIGlmICgoY2hhciopc3AgPj0gc3MtPmJhc2UgJiYgKGNoYXIqKXNwIDwgc3MtPmJhc2UgKyBzcy0+c2l6ZSkKKyAgICAgIHJldHVybiAxOworICAgIGlmICgoc3AgPSBzcC0+bmV4dCkgPT0gMCkKKyAgICAgIHJldHVybiAwOworICB9Cit9CisKKyNpZm5kZWYgTU9SRUNPUkVfQ0FOTk9UX1RSSU0KKyNkZWZpbmUgc2hvdWxkX3RyaW0oTSxzKSAgKChzKSA+IChNKS0+dHJpbV9jaGVjaykKKyNlbHNlICAvKiBNT1JFQ09SRV9DQU5OT1RfVFJJTSAqLworI2RlZmluZSBzaG91bGRfdHJpbShNLHMpICAoMCkKKyNlbmRpZiAvKiBNT1JFQ09SRV9DQU5OT1RfVFJJTSAqLworCisvKgorICBUT1BfRk9PVF9TSVpFIGlzIHBhZGRpbmcgYXQgdGhlIGVuZCBvZiBhIHNlZ21lbnQsIGluY2x1ZGluZyBzcGFjZQorICB0aGF0IG1heSBiZSBuZWVkZWQgdG8gcGxhY2Ugc2VnbWVudCByZWNvcmRzIGFuZCBmZW5jZXBvc3RzIHdoZW4gbmV3CisgIG5vbmNvbnRpZ3VvdXMgc2VnbWVudHMgYXJlIGFkZGVkLgorKi8KKyNkZWZpbmUgVE9QX0ZPT1RfU0laRVwKKyAgKGFsaWduX29mZnNldChjaHVuazJtZW0oMCkpK3BhZF9yZXF1ZXN0KHNpemVvZihzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQpKStNSU5fQ0hVTktfU0laRSkKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBIb29rcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBQUkVBQ1RJT04gc2hvdWxkIGJlIGRlZmluZWQgdG8gcmV0dXJuIDAgb24gc3VjY2VzcywgYW5kIG5vbnplcm8gb24KKyAgZmFpbHVyZS4gSWYgeW91IGFyZSBub3QgdXNpbmcgbG9ja2luZywgeW91IGNhbiByZWRlZmluZSB0aGVzZSB0byBkbworICBhbnl0aGluZyB5b3UgbGlrZS4KKyovCisKKyNpZiBVU0VfTE9DS1MKKworI2RlZmluZSBQUkVBQ1RJT04oTSkgICgodXNlX2xvY2soTSkpPyBBQ1FVSVJFX0xPQ0soJihNKS0+bXV0ZXgpIDogMCkKKyNkZWZpbmUgUE9TVEFDVElPTihNKSB7IGlmICh1c2VfbG9jayhNKSkgUkVMRUFTRV9MT0NLKCYoTSktPm11dGV4KTsgfQorI2Vsc2UgLyogVVNFX0xPQ0tTICovCisKKyNpZm5kZWYgUFJFQUNUSU9OCisjZGVmaW5lIFBSRUFDVElPTihNKSAoMCkKKyNlbmRpZiAgLyogUFJFQUNUSU9OICovCisKKyNpZm5kZWYgUE9TVEFDVElPTgorI2RlZmluZSBQT1NUQUNUSU9OKE0pCisjZW5kaWYgIC8qIFBPU1RBQ1RJT04gKi8KKworI2VuZGlmIC8qIFVTRV9MT0NLUyAqLworCisvKgorICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTiBpcyB0cmlnZ2VyZWQgdXBvbiBkZXRlY3RlZCBiYWQgYWRkcmVzc2VzLgorICBVU0FHRV9FUlJPUl9BQ1RJT04gaXMgdHJpZ2dlcmVkIG9uIGRldGVjdGVkIGJhZCBmcmVlcyBhbmQKKyAgcmVhbGxvY3MuIFRoZSBhcmd1bWVudCBwIGlzIGFuIGFkZHJlc3MgdGhhdCBtaWdodCBoYXZlIHRyaWdnZXJlZCB0aGUKKyAgZmF1bHQuIEl0IGlzIGlnbm9yZWQgYnkgdGhlIHR3byBwcmVkZWZpbmVkIGFjdGlvbnMsIGJ1dCBtaWdodCBiZQorICB1c2VmdWwgaW4gY3VzdG9tIGFjdGlvbnMgdGhhdCB0cnkgdG8gaGVscCBkaWFnbm9zZSBlcnJvcnMuCisqLworCisjaWYgUFJPQ0VFRF9PTl9FUlJPUgorCisvKiBBIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgY29ycnVwdGlvbiBlcnJvcnMgY2F1c2luZyByZXNldHMgKi8KK2ludCBtYWxsb2NfY29ycnVwdGlvbl9lcnJvcl9jb3VudDsKKworLyogZGVmYXVsdCBjb3JydXB0aW9uIGFjdGlvbiAqLworc3RhdGljIHZvaWQgcmVzZXRfb25fZXJyb3IobXN0YXRlIG0pOworCisjZGVmaW5lIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pICByZXNldF9vbl9lcnJvcihtKQorI2RlZmluZSBVU0FHRV9FUlJPUl9BQ1RJT04obSwgcCkKKworI2Vsc2UgLyogUFJPQ0VFRF9PTl9FUlJPUiAqLworCisjaWZuZGVmIENPUlJVUFRJT05fRVJST1JfQUNUSU9OCisjZGVmaW5lIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pIEFCT1JUCisjZW5kaWYgLyogQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04gKi8KKworI2lmbmRlZiBVU0FHRV9FUlJPUl9BQ1RJT04KKyNkZWZpbmUgVVNBR0VfRVJST1JfQUNUSU9OKG0scCkgQUJPUlQKKyNlbmRpZiAvKiBVU0FHRV9FUlJPUl9BQ1RJT04gKi8KKworI2VuZGlmIC8qIFBST0NFRURfT05fRVJST1IgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVidWdnaW5nIHNldHVwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmICEgREVCVUcKKworI2RlZmluZSBjaGVja19mcmVlX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfaW51c2VfY2h1bmsoTSxQKQorI2RlZmluZSBjaGVja19tYWxsb2NlZF9jaHVuayhNLFAsTikKKyNkZWZpbmUgY2hlY2tfbW1hcHBlZF9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX21hbGxvY19zdGF0ZShNKQorI2RlZmluZSBjaGVja190b3BfY2h1bmsoTSxQKQorCisjZWxzZSAvKiBERUJVRyAqLworI2RlZmluZSBjaGVja19mcmVlX2NodW5rKE0sUCkgICAgICAgZG9fY2hlY2tfZnJlZV9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX2ludXNlX2NodW5rKE0sUCkgICAgICBkb19jaGVja19pbnVzZV9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX3RvcF9jaHVuayhNLFApICAgICAgICBkb19jaGVja190b3BfY2h1bmsoTSxQKQorI2RlZmluZSBjaGVja19tYWxsb2NlZF9jaHVuayhNLFAsTikgZG9fY2hlY2tfbWFsbG9jZWRfY2h1bmsoTSxQLE4pCisjZGVmaW5lIGNoZWNrX21tYXBwZWRfY2h1bmsoTSxQKSAgICBkb19jaGVja19tbWFwcGVkX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfbWFsbG9jX3N0YXRlKE0pICAgICAgIGRvX2NoZWNrX21hbGxvY19zdGF0ZShNKQorCitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX2FueV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApOworc3RhdGljIHZvaWQgICBkb19jaGVja190b3BfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfbW1hcHBlZF9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApOworc3RhdGljIHZvaWQgICBkb19jaGVja19pbnVzZV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApOworc3RhdGljIHZvaWQgICBkb19jaGVja19mcmVlX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX21hbGxvY2VkX2NodW5rKG1zdGF0ZSBtLCB2b2lkKiBtZW0sIHNpemVfdCBzKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfdHJlZShtc3RhdGUgbSwgdGNodW5rcHRyIHQpOworc3RhdGljIHZvaWQgICBkb19jaGVja190cmVlYmluKG1zdGF0ZSBtLCBiaW5kZXhfdCBpKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfc21hbGxiaW4obXN0YXRlIG0sIGJpbmRleF90IGkpOworc3RhdGljIHZvaWQgICBkb19jaGVja19tYWxsb2Nfc3RhdGUobXN0YXRlIG0pOworc3RhdGljIGludCAgICBiaW5fZmluZChtc3RhdGUgbSwgbWNodW5rcHRyIHgpOworc3RhdGljIHNpemVfdCB0cmF2ZXJzZV9hbmRfY2hlY2sobXN0YXRlIG0pOworI2VuZGlmIC8qIERFQlVHICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSW5kZXhpbmcgQmlucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgaXNfc21hbGwocykgICAgICAgICAoKChzKSA+PiBTTUFMTEJJTl9TSElGVCkgPCBOU01BTExCSU5TKQorI2RlZmluZSBzbWFsbF9pbmRleChzKSAgICAgICgocykgID4+IFNNQUxMQklOX1NISUZUKQorI2RlZmluZSBzbWFsbF9pbmRleDJzaXplKGkpICgoaSkgIDw8IFNNQUxMQklOX1NISUZUKQorI2RlZmluZSBNSU5fU01BTExfSU5ERVggICAgIChzbWFsbF9pbmRleChNSU5fQ0hVTktfU0laRSkpCisKKy8qIGFkZHJlc3NpbmcgYnkgaW5kZXguIFNlZSBhYm92ZSBhYm91dCBzbWFsbGJpbiByZXBvc2l0aW9uaW5nICovCisjZGVmaW5lIHNtYWxsYmluX2F0KE0sIGkpICAgKChzYmlucHRyKSgoY2hhciopJigoTSktPnNtYWxsYmluc1soaSk8PDFdKSkpCisjZGVmaW5lIHRyZWViaW5fYXQoTSxpKSAgICAgKCYoKE0pLT50cmVlYmluc1tpXSkpCisKKy8qIGFzc2lnbiB0cmVlIGluZGV4IGZvciBzaXplIFMgdG8gdmFyaWFibGUgSS4gVXNlIHg4NiBhc20gaWYgcG9zc2libGUgICovCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykpCisjZGVmaW5lIGNvbXB1dGVfdHJlZV9pbmRleChTLCBJKVwKK3tcCisgIHVuc2lnbmVkIGludCBYID0gUyA+PiBUUkVFQklOX1NISUZUO1wKKyAgaWYgKFggPT0gMClcCisgICAgSSA9IDA7XAorICBlbHNlIGlmIChYID4gMHhGRkZGKVwKKyAgICBJID0gTlRSRUVCSU5TLTE7XAorICBlbHNlIHtcCisgICAgdW5zaWduZWQgaW50IEs7XAorICAgIF9fYXNtX18oImJzcmxcdCUxLCAlMFxuXHQiIDogIj1yIiAoSykgOiAicm0iICAoWCkpO1wKKyAgICBJID0gIChiaW5kZXhfdCkoKEsgPDwgMSkgKyAoKFMgPj4gKEsgKyAoVFJFRUJJTl9TSElGVC0xKSkgJiAxKSkpO1wKKyAgfVwKK30KKworI2VsaWYgZGVmaW5lZCAoX19JTlRFTF9DT01QSUxFUikKKyNkZWZpbmUgY29tcHV0ZV90cmVlX2luZGV4KFMsIEkpXAore1wKKyAgc2l6ZV90IFggPSBTID4+IFRSRUVCSU5fU0hJRlQ7XAorICBpZiAoWCA9PSAwKVwKKyAgICBJID0gMDtcCisgIGVsc2UgaWYgKFggPiAweEZGRkYpXAorICAgIEkgPSBOVFJFRUJJTlMtMTtcCisgIGVsc2Uge1wKKyAgICB1bnNpZ25lZCBpbnQgSyA9IF9iaXRfc2Nhbl9yZXZlcnNlIChYKTsgXAorICAgIEkgPSAgKGJpbmRleF90KSgoSyA8PCAxKSArICgoUyA+PiAoSyArIChUUkVFQklOX1NISUZULTEpKSAmIDEpKSk7XAorICB9XAorfQorCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUj49MTMwMAorI2RlZmluZSBjb21wdXRlX3RyZWVfaW5kZXgoUywgSSlcCit7XAorICBzaXplX3QgWCA9IFMgPj4gVFJFRUJJTl9TSElGVDtcCisgIGlmIChYID09IDApXAorICAgIEkgPSAwO1wKKyAgZWxzZSBpZiAoWCA+IDB4RkZGRilcCisgICAgSSA9IE5UUkVFQklOUy0xO1wKKyAgZWxzZSB7XAorICAgIHVuc2lnbmVkIGludCBLO1wKKyAgICBfQml0U2NhblJldmVyc2UoKERXT1JEICopICZLLCBYKTtcCisgICAgSSA9ICAoYmluZGV4X3QpKChLIDw8IDEpICsgKChTID4+IChLICsgKFRSRUVCSU5fU0hJRlQtMSkpICYgMSkpKTtcCisgIH1cCit9CisKKyNlbHNlIC8qIEdOVUMgKi8KKyNkZWZpbmUgY29tcHV0ZV90cmVlX2luZGV4KFMsIEkpXAore1wKKyAgc2l6ZV90IFggPSBTID4+IFRSRUVCSU5fU0hJRlQ7XAorICBpZiAoWCA9PSAwKVwKKyAgICBJID0gMDtcCisgIGVsc2UgaWYgKFggPiAweEZGRkYpXAorICAgIEkgPSBOVFJFRUJJTlMtMTtcCisgIGVsc2Uge1wKKyAgICB1bnNpZ25lZCBpbnQgWSA9ICh1bnNpZ25lZCBpbnQpWDtcCisgICAgdW5zaWduZWQgaW50IE4gPSAoKFkgLSAweDEwMCkgPj4gMTYpICYgODtcCisgICAgdW5zaWduZWQgaW50IEsgPSAoKChZIDw8PSBOKSAtIDB4MTAwMCkgPj4gMTYpICYgNDtcCisgICAgTiArPSBLO1wKKyAgICBOICs9IEsgPSAoKChZIDw8PSBLKSAtIDB4NDAwMCkgPj4gMTYpICYgMjtcCisgICAgSyA9IDE0IC0gTiArICgoWSA8PD0gSykgPj4gMTUpO1wKKyAgICBJID0gKEsgPDwgMSkgKyAoKFMgPj4gKEsgKyAoVFJFRUJJTl9TSElGVC0xKSkgJiAxKSk7XAorICB9XAorfQorI2VuZGlmIC8qIEdOVUMgKi8KKworLyogQml0IHJlcHJlc2VudGluZyBtYXhpbXVtIHJlc29sdmVkIHNpemUgaW4gYSB0cmVlYmluIGF0IGkgKi8KKyNkZWZpbmUgYml0X2Zvcl90cmVlX2luZGV4KGkpIFwKKyAgIChpID09IE5UUkVFQklOUy0xKT8gKFNJWkVfVF9CSVRTSVpFLTEpIDogKCgoaSkgPj4gMSkgKyBUUkVFQklOX1NISUZUIC0gMikKKworLyogU2hpZnQgcGxhY2luZyBtYXhpbXVtIHJlc29sdmVkIGJpdCBpbiBhIHRyZWViaW4gYXQgaSBhcyBzaWduIGJpdCAqLworI2RlZmluZSBsZWZ0c2hpZnRfZm9yX3RyZWVfaW5kZXgoaSkgXAorICAgKChpID09IE5UUkVFQklOUy0xKT8gMCA6IFwKKyAgICAoKFNJWkVfVF9CSVRTSVpFLVNJWkVfVF9PTkUpIC0gKCgoaSkgPj4gMSkgKyBUUkVFQklOX1NISUZUIC0gMikpKQorCisvKiBUaGUgc2l6ZSBvZiB0aGUgc21hbGxlc3QgY2h1bmsgaGVsZCBpbiBiaW4gd2l0aCBpbmRleCBpICovCisjZGVmaW5lIG1pbnNpemVfZm9yX3RyZWVfaW5kZXgoaSkgXAorICAgKChTSVpFX1RfT05FIDw8ICgoKGkpID4+IDEpICsgVFJFRUJJTl9TSElGVCkpIHwgIFwKKyAgICgoKHNpemVfdCkoKGkpICYgU0laRV9UX09ORSkpIDw8ICgoKGkpID4+IDEpICsgVFJFRUJJTl9TSElGVCAtIDEpKSkKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3BlcmF0aW9ucyBvbiBiaW4gbWFwcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBiaXQgY29ycmVzcG9uZGluZyB0byBnaXZlbiBpbmRleCAqLworI2RlZmluZSBpZHgyYml0KGkpICAgICAgICAgICAgICAoKGJpbm1hcF90KSgxKSA8PCAoaSkpCisKKy8qIE1hcmsvQ2xlYXIgYml0cyB3aXRoIGdpdmVuIGluZGV4ICovCisjZGVmaW5lIG1hcmtfc21hbGxtYXAoTSxpKSAgICAgICgoTSktPnNtYWxsbWFwIHw9ICBpZHgyYml0KGkpKQorI2RlZmluZSBjbGVhcl9zbWFsbG1hcChNLGkpICAgICAoKE0pLT5zbWFsbG1hcCAmPSB+aWR4MmJpdChpKSkKKyNkZWZpbmUgc21hbGxtYXBfaXNfbWFya2VkKE0saSkgKChNKS0+c21hbGxtYXAgJiAgIGlkeDJiaXQoaSkpCisKKyNkZWZpbmUgbWFya190cmVlbWFwKE0saSkgICAgICAgKChNKS0+dHJlZW1hcCAgfD0gIGlkeDJiaXQoaSkpCisjZGVmaW5lIGNsZWFyX3RyZWVtYXAoTSxpKSAgICAgICgoTSktPnRyZWVtYXAgICY9IH5pZHgyYml0KGkpKQorI2RlZmluZSB0cmVlbWFwX2lzX21hcmtlZChNLGkpICAoKE0pLT50cmVlbWFwICAmICAgaWR4MmJpdChpKSkKKworLyogaXNvbGF0ZSB0aGUgbGVhc3Qgc2V0IGJpdCBvZiBhIGJpdG1hcCAqLworI2RlZmluZSBsZWFzdF9iaXQoeCkgICAgICAgICAoKHgpICYgLSh4KSkKKworLyogbWFzayB3aXRoIGFsbCBiaXRzIHRvIGxlZnQgb2YgbGVhc3QgYml0IG9mIHggb24gKi8KKyNkZWZpbmUgbGVmdF9iaXRzKHgpICAgICAgICAgKCh4PDwxKSB8IC0oeDw8MSkpCisKKy8qIG1hc2sgd2l0aCBhbGwgYml0cyB0byBsZWZ0IG9mIG9yIGVxdWFsIHRvIGxlYXN0IGJpdCBvZiB4IG9uICovCisjZGVmaW5lIHNhbWVfb3JfbGVmdF9iaXRzKHgpICgoeCkgfCAtKHgpKQorCisvKiBpbmRleCBjb3JyZXNwb25kaW5nIHRvIGdpdmVuIGJpdC4gVXNlIHg4NiBhc20gaWYgcG9zc2libGUgKi8KKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pKQorI2RlZmluZSBjb21wdXRlX2JpdDJpZHgoWCwgSSlcCit7XAorICB1bnNpZ25lZCBpbnQgSjtcCisgIF9fYXNtX18oImJzZmxcdCUxLCAlMFxuXHQiIDogIj1yIiAoSikgOiAicm0iIChYKSk7XAorICBJID0gKGJpbmRleF90KUo7XAorfQorCisjZWxpZiBkZWZpbmVkIChfX0lOVEVMX0NPTVBJTEVSKQorI2RlZmluZSBjb21wdXRlX2JpdDJpZHgoWCwgSSlcCit7XAorICB1bnNpZ25lZCBpbnQgSjtcCisgIEogPSBfYml0X3NjYW5fZm9yd2FyZCAoWCk7IFwKKyAgSSA9IChiaW5kZXhfdClKO1wKK30KKworI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVI+PTEzMDAKKyNkZWZpbmUgY29tcHV0ZV9iaXQyaWR4KFgsIEkpXAore1wKKyAgdW5zaWduZWQgaW50IEo7XAorICBfQml0U2NhbkZvcndhcmQoKERXT1JEICopICZKLCBYKTtcCisgIEkgPSAoYmluZGV4X3QpSjtcCit9CisKKyNlbGlmIFVTRV9CVUlMVElOX0ZGUworI2RlZmluZSBjb21wdXRlX2JpdDJpZHgoWCwgSSkgSSA9IGZmcyhYKS0xCisKKyNlbHNlCisjZGVmaW5lIGNvbXB1dGVfYml0MmlkeChYLCBJKVwKK3tcCisgIHVuc2lnbmVkIGludCBZID0gWCAtIDE7XAorICB1bnNpZ25lZCBpbnQgSyA9IFkgPj4gKDE2LTQpICYgMTY7XAorICB1bnNpZ25lZCBpbnQgTiA9IEs7ICAgICAgICBZID4+PSBLO1wKKyAgTiArPSBLID0gWSA+PiAoOC0zKSAmICA4OyAgWSA+Pj0gSztcCisgIE4gKz0gSyA9IFkgPj4gKDQtMikgJiAgNDsgIFkgPj49IEs7XAorICBOICs9IEsgPSBZID4+ICgyLTEpICYgIDI7ICBZID4+PSBLO1wKKyAgTiArPSBLID0gWSA+PiAoMS0wKSAmICAxOyAgWSA+Pj0gSztcCisgIEkgPSAoYmluZGV4X3QpKE4gKyBZKTtcCit9CisjZW5kaWYgLyogR05VQyAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJ1bnRpbWUgQ2hlY2sgU3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIEZvciBzZWN1cml0eSwgdGhlIG1haW4gaW52YXJpYW50IGlzIHRoYXQgbWFsbG9jL2ZyZWUvZXRjIG5ldmVyCisgIHdyaXRlcyB0byBhIHN0YXRpYyBhZGRyZXNzIG90aGVyIHRoYW4gbWFsbG9jX3N0YXRlLCB1bmxlc3Mgc3RhdGljCisgIG1hbGxvY19zdGF0ZSBpdHNlbGYgaGFzIGJlZW4gY29ycnVwdGVkLCB3aGljaCBjYW5ub3Qgb2NjdXIgdmlhCisgIG1hbGxvYyAoYmVjYXVzZSBvZiB0aGVzZSBjaGVja3MpLiBJbiBlc3NlbmNlIHRoaXMgbWVhbnMgdGhhdCB3ZQorICBiZWxpZXZlIGFsbCBwb2ludGVycywgc2l6ZXMsIG1hcHMgZXRjIGhlbGQgaW4gbWFsbG9jX3N0YXRlLCBidXQKKyAgY2hlY2sgYWxsIG9mIHRob3NlIGxpbmtlZCBvciBvZmZzZXR0ZWQgZnJvbSBvdGhlciBlbWJlZGRlZCBkYXRhCisgIHN0cnVjdHVyZXMuICBUaGVzZSBjaGVja3MgYXJlIGludGVyc3BlcnNlZCB3aXRoIG1haW4gY29kZSBpbiBhIHdheQorICB0aGF0IHRlbmRzIHRvIG1pbmltaXplIHRoZWlyIHJ1bi10aW1lIGNvc3QuCisKKyAgV2hlbiBGT09URVJTIGlzIGRlZmluZWQsIGluIGFkZGl0aW9uIHRvIHJhbmdlIGNoZWNraW5nLCB3ZSBhbHNvCisgIHZlcmlmeSBmb290ZXIgZmllbGRzIG9mIGludXNlIGNodW5rcywgd2hpY2ggY2FuIGJlIHVzZWQgZ3VhcmFudGVlCisgIHRoYXQgdGhlIG1zdGF0ZSBjb250cm9sbGluZyBtYWxsb2MvZnJlZSBpcyBpbnRhY3QuICBUaGlzIGlzIGEKKyAgc3RyZWFtbGluZWQgdmVyc2lvbiBvZiB0aGUgYXBwcm9hY2ggZGVzY3JpYmVkIGJ5IFdpbGxpYW0gUm9iZXJ0c29uCisgIGV0IGFsIGluICJSdW4tdGltZSBEZXRlY3Rpb24gb2YgSGVhcC1iYXNlZCBPdmVyZmxvd3MiIExJU0EnMDMKKyAgaHR0cDovL3d3dy51c2VuaXgub3JnL2V2ZW50cy9saXNhMDMvdGVjaC9yb2JlcnRzb24uaHRtbCBUaGUgZm9vdGVyCisgIG9mIGFuIGludXNlIGNodW5rIGhvbGRzIHRoZSB4b3Igb2YgaXRzIG1zdGF0ZSBhbmQgYSByYW5kb20gc2VlZCwKKyAgdGhhdCBpcyBjaGVja2VkIHVwb24gY2FsbHMgdG8gZnJlZSgpIGFuZCByZWFsbG9jKCkuICBUaGlzIGlzCisgIChwcm9iYWJsaXN0aWNhbGx5KSB1bmd1ZXNzYWJsZSBmcm9tIG91dHNpZGUgdGhlIHByb2dyYW0sIGJ1dCBjYW4gYmUKKyAgY29tcHV0ZWQgYnkgYW55IGNvZGUgc3VjY2Vzc2Z1bGx5IG1hbGxvYydpbmcgYW55IGNodW5rLCBzbyBkb2VzIG5vdAorICBpdHNlbGYgcHJvdmlkZSBwcm90ZWN0aW9uIGFnYWluc3QgY29kZSB0aGF0IGhhcyBhbHJlYWR5IGJyb2tlbgorICBzZWN1cml0eSB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMuICBVbmxpa2UgUm9iZXJ0c29uIGV0IGFsLCB3ZQorICBhbHdheXMgZHluYW1pY2FsbHkgY2hlY2sgYWRkcmVzc2VzIG9mIGFsbCBvZmZzZXQgY2h1bmtzIChwcmV2aW91cywKKyAgbmV4dCwgZXRjKS4gVGhpcyB0dXJucyBvdXQgdG8gYmUgY2hlYXBlciB0aGFuIHJlbHlpbmcgb24gaGFzaGVzLgorKi8KKworI2lmICFJTlNFQ1VSRQorLyogQ2hlY2sgaWYgYWRkcmVzcyBhIGlzIGF0IGxlYXN0IGFzIGhpZ2ggYXMgYW55IGZyb20gTU9SRUNPUkUgb3IgTU1BUCAqLworI2RlZmluZSBva19hZGRyZXNzKE0sIGEpICgoY2hhciopKGEpID49IChNKS0+bGVhc3RfYWRkcikKKy8qIENoZWNrIGlmIGFkZHJlc3Mgb2YgbmV4dCBjaHVuayBuIGlzIGhpZ2hlciB0aGFuIGJhc2UgY2h1bmsgcCAqLworI2RlZmluZSBva19uZXh0KHAsIG4pICAgICgoY2hhciopKHApIDwgKGNoYXIqKShuKSkKKy8qIENoZWNrIGlmIHAgaGFzIGl0cyBjaW51c2UgYml0IG9uICovCisjZGVmaW5lIG9rX2NpbnVzZShwKSAgICAgY2ludXNlKHApCisvKiBDaGVjayBpZiBwIGhhcyBpdHMgcGludXNlIGJpdCBvbiAqLworI2RlZmluZSBva19waW51c2UocCkgICAgIHBpbnVzZShwKQorCisjZWxzZSAvKiAhSU5TRUNVUkUgKi8KKyNkZWZpbmUgb2tfYWRkcmVzcyhNLCBhKSAoMSkKKyNkZWZpbmUgb2tfbmV4dChiLCBuKSAgICAoMSkKKyNkZWZpbmUgb2tfY2ludXNlKHApICAgICAoMSkKKyNkZWZpbmUgb2tfcGludXNlKHApICAgICAoMSkKKyNlbmRpZiAvKiAhSU5TRUNVUkUgKi8KKworI2lmIChGT09URVJTICYmICFJTlNFQ1VSRSkKKy8qIENoZWNrIGlmIChhbGxlZ2VkKSBtc3RhdGUgbSBoYXMgZXhwZWN0ZWQgbWFnaWMgZmllbGQgKi8KKyNkZWZpbmUgb2tfbWFnaWMoTSkgICAgICAoKE0pLT5tYWdpYyA9PSBtcGFyYW1zLm1hZ2ljKQorI2Vsc2UgIC8qIChGT09URVJTICYmICFJTlNFQ1VSRSkgKi8KKyNkZWZpbmUgb2tfbWFnaWMoTSkgICAgICAoMSkKKyNlbmRpZiAvKiAoRk9PVEVSUyAmJiAhSU5TRUNVUkUpICovCisKKworLyogSW4gZ2NjLCB1c2UgX19idWlsdGluX2V4cGVjdCB0byBtaW5pbWl6ZSBpbXBhY3Qgb2YgY2hlY2tzICovCisjaWYgIUlOU0VDVVJFCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0gMworI2RlZmluZSBSVENIRUNLKGUpICBfX2J1aWx0aW5fZXhwZWN0KGUsIDEpCisjZWxzZSAvKiBHTlVDICovCisjZGVmaW5lIFJUQ0hFQ0soZSkgIChlKQorI2VuZGlmIC8qIEdOVUMgKi8KKyNlbHNlIC8qICFJTlNFQ1VSRSAqLworI2RlZmluZSBSVENIRUNLKGUpICAoMSkKKyNlbmRpZiAvKiAhSU5TRUNVUkUgKi8KKworLyogbWFjcm9zIHRvIHNldCB1cCBpbnVzZSBjaHVua3Mgd2l0aCBvciB3aXRob3V0IGZvb3RlcnMgKi8KKworI2lmICFGT09URVJTCisKKyNkZWZpbmUgbWFya19pbnVzZV9mb290KE0scCxzKQorCisvKiBTZXQgY2ludXNlIGJpdCBhbmQgcGludXNlIGJpdCBvZiBuZXh0IGNodW5rICovCisjZGVmaW5lIHNldF9pbnVzZShNLHAscylcCisgICgocCktPmhlYWQgPSAoKChwKS0+aGVhZCAmIFBJTlVTRV9CSVQpfHN8Q0lOVVNFX0JJVCksXAorICAoKG1jaHVua3B0cikoKChjaGFyKikocCkpICsgKHMpKSktPmhlYWQgfD0gUElOVVNFX0JJVCkKKworLyogU2V0IGNpbnVzZSBhbmQgcGludXNlIG9mIHRoaXMgY2h1bmsgYW5kIHBpbnVzZSBvZiBuZXh0IGNodW5rICovCisjZGVmaW5lIHNldF9pbnVzZV9hbmRfcGludXNlKE0scCxzKVwKKyAgKChwKS0+aGVhZCA9IChzfFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCksXAorICAoKG1jaHVua3B0cikoKChjaGFyKikocCkpICsgKHMpKSktPmhlYWQgfD0gUElOVVNFX0JJVCkKKworLyogU2V0IHNpemUsIGNpbnVzZSBhbmQgcGludXNlIGJpdCBvZiB0aGlzIGNodW5rICovCisjZGVmaW5lIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsoTSwgcCwgcylcCisgICgocCktPmhlYWQgPSAoc3xQSU5VU0VfQklUfENJTlVTRV9CSVQpKQorCisjZWxzZSAvKiBGT09URVJTICovCisKKy8qIFNldCBmb290IG9mIGludXNlIGNodW5rIHRvIGJlIHhvciBvZiBtc3RhdGUgYW5kIHNlZWQgKi8KKyNkZWZpbmUgbWFya19pbnVzZV9mb290KE0scCxzKVwKKyAgKCgobWNodW5rcHRyKSgoY2hhciopKHApICsgKHMpKSktPnByZXZfZm9vdCA9ICgoc2l6ZV90KShNKSBeIG1wYXJhbXMubWFnaWMpKQorCisjZGVmaW5lIGdldF9tc3RhdGVfZm9yKHApXAorICAoKG1zdGF0ZSkoKChtY2h1bmtwdHIpKChjaGFyKikocCkgK1wKKyAgICAoY2h1bmtzaXplKHApKSkpLT5wcmV2X2Zvb3QgXiBtcGFyYW1zLm1hZ2ljKSkKKworI2RlZmluZSBzZXRfaW51c2UoTSxwLHMpXAorICAoKHApLT5oZWFkID0gKCgocCktPmhlYWQgJiBQSU5VU0VfQklUKXxzfENJTlVTRV9CSVQpLFwKKyAgKCgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKS0+aGVhZCB8PSBQSU5VU0VfQklUKSwgXAorICBtYXJrX2ludXNlX2Zvb3QoTSxwLHMpKQorCisjZGVmaW5lIHNldF9pbnVzZV9hbmRfcGludXNlKE0scCxzKVwKKyAgKChwKS0+aGVhZCA9IChzfFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCksXAorICAoKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpLT5oZWFkIHw9IFBJTlVTRV9CSVQpLFwKKyBtYXJrX2ludXNlX2Zvb3QoTSxwLHMpKQorCisjZGVmaW5lIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsoTSwgcCwgcylcCisgICgocCktPmhlYWQgPSAoc3xQSU5VU0VfQklUfENJTlVTRV9CSVQpLFwKKyAgbWFya19pbnVzZV9mb290KE0sIHAsIHMpKQorCisjZW5kaWYgLyogIUZPT1RFUlMgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzZXR0aW5nIG1wYXJhbXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogSW5pdGlhbGl6ZSBtcGFyYW1zICovCitzdGF0aWMgaW50IGluaXRfbXBhcmFtcyh2b2lkKSB7CisjaWZkZWYgTkVFRF9HTE9CQUxfTE9DS19JTklUCisgIGlmIChtYWxsb2NfZ2xvYmFsX211dGV4X3N0YXR1cyA8PSAwKQorICAgIGluaXRfbWFsbG9jX2dsb2JhbF9tdXRleCgpOworI2VuZGlmCisKKyAgQUNRVUlSRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsKKyAgaWYgKG1wYXJhbXMubWFnaWMgPT0gMCkgeworICAgIHNpemVfdCBtYWdpYzsKKyAgICBzaXplX3QgcHNpemU7CisgICAgc2l6ZV90IGdzaXplOworCisjaWZuZGVmIFdJTjMyCisgICAgcHNpemUgPSBtYWxsb2NfZ2V0cGFnZXNpemU7CisgICAgZ3NpemUgPSAoKERFRkFVTFRfR1JBTlVMQVJJVFkgIT0gMCk/IERFRkFVTFRfR1JBTlVMQVJJVFkgOiBwc2l6ZSk7CisjZWxzZSAvKiBXSU4zMiAqLworICAgIHsKKyAgICAgIFNZU1RFTV9JTkZPIHN5c3RlbV9pbmZvOworICAgICAgR2V0U3lzdGVtSW5mbygmc3lzdGVtX2luZm8pOworICAgICAgcHNpemUgPSBzeXN0ZW1faW5mby5kd1BhZ2VTaXplOworICAgICAgZ3NpemUgPSAoKERFRkFVTFRfR1JBTlVMQVJJVFkgIT0gMCk/CisJICAgICAgIERFRkFVTFRfR1JBTlVMQVJJVFkgOiBzeXN0ZW1faW5mby5kd0FsbG9jYXRpb25HcmFudWxhcml0eSk7CisgICAgfQorI2VuZGlmIC8qIFdJTjMyICovCisKKyAgICAvKiBTYW5pdHktY2hlY2sgY29uZmlndXJhdGlvbjoKKyAgICAgICBzaXplX3QgbXVzdCBiZSB1bnNpZ25lZCBhbmQgYXMgd2lkZSBhcyBwb2ludGVyIHR5cGUuCisgICAgICAgaW50cyBtdXN0IGJlIGF0IGxlYXN0IDQgYnl0ZXMuCisgICAgICAgYWxpZ25tZW50IG11c3QgYmUgYXQgbGVhc3QgOC4KKyAgICAgICBBbGlnbm1lbnQsIG1pbiBjaHVuayBzaXplLCBhbmQgcGFnZSBzaXplIG11c3QgYWxsIGJlIHBvd2VycyBvZiAyLgorICAgICovCisgICAgaWYgKChzaXplb2Yoc2l6ZV90KSAhPSBzaXplb2YoY2hhciopKSB8fAorCShNQVhfU0laRV9UIDwgTUlOX0NIVU5LX1NJWkUpICB8fAorCShzaXplb2YoaW50KSA8IDQpICB8fAorCShNQUxMT0NfQUxJR05NRU5UIDwgKHNpemVfdCk4VSkgfHwKKwkoKE1BTExPQ19BTElHTk1FTlQgJiAoTUFMTE9DX0FMSUdOTUVOVC1TSVpFX1RfT05FKSkgIT0gMCkgfHwKKwkoKE1DSFVOS19TSVpFICAgICAgJiAoTUNIVU5LX1NJWkUtU0laRV9UX09ORSkpICAgICAgIT0gMCkgfHwKKwkoKGdzaXplICAgICAgICAgICAgJiAoZ3NpemUtU0laRV9UX09ORSkpICAgICAgICAgICAgIT0gMCkgfHwKKwkoKHBzaXplICAgICAgICAgICAgJiAocHNpemUtU0laRV9UX09ORSkpICAgICAgICAgICAgIT0gMCkpCisgICAgICBBQk9SVDsKKworICAgIG1wYXJhbXMuZ3JhbnVsYXJpdHkgPSBnc2l6ZTsKKyAgICBtcGFyYW1zLnBhZ2Vfc2l6ZSA9IHBzaXplOworICAgIG1wYXJhbXMubW1hcF90aHJlc2hvbGQgPSBERUZBVUxUX01NQVBfVEhSRVNIT0xEOworICAgIG1wYXJhbXMudHJpbV90aHJlc2hvbGQgPSBERUZBVUxUX1RSSU1fVEhSRVNIT0xEOworI2lmIE1PUkVDT1JFX0NPTlRJR1VPVVMKKyAgICBtcGFyYW1zLmRlZmF1bHRfbWZsYWdzID0gVVNFX0xPQ0tfQklUfFVTRV9NTUFQX0JJVDsKKyNlbHNlICAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovCisgICAgbXBhcmFtcy5kZWZhdWx0X21mbGFncyA9IFVTRV9MT0NLX0JJVHxVU0VfTU1BUF9CSVR8VVNFX05PTkNPTlRJR1VPVVNfQklUOworI2VuZGlmIC8qIE1PUkVDT1JFX0NPTlRJR1VPVVMgKi8KKworI2lmICFPTkxZX01TUEFDRVMKKyAgICAvKiBTZXQgdXAgbG9jayBmb3IgbWFpbiBtYWxsb2MgYXJlYSAqLworICAgIGdtLT5tZmxhZ3MgPSBtcGFyYW1zLmRlZmF1bHRfbWZsYWdzOworICAgIElOSVRJQUxfTE9DSygmZ20tPm11dGV4KTsKKyNlbmRpZgorCisjaWYgKEZPT1RFUlMgJiYgIUlOU0VDVVJFKQorICAgIHsKKyNpZiBVU0VfREVWX1JBTkRPTQorICAgICAgaW50IGZkOworICAgICAgdW5zaWduZWQgY2hhciBidWZbc2l6ZW9mKHNpemVfdCldOworICAgICAgLyogVHJ5IHRvIHVzZSAvZGV2L3VyYW5kb20sIGVsc2UgZmFsbCBiYWNrIG9uIHVzaW5nIHRpbWUgKi8KKyAgICAgIGlmICgoZmQgPSBvcGVuKCIvZGV2L3VyYW5kb20iLCBPX1JET05MWSkpID49IDAgJiYKKwkgIHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpID09IHNpemVvZihidWYpKSB7CisJbWFnaWMgPSAqKChzaXplX3QgKikgYnVmKTsKKwljbG9zZShmZCk7CisgICAgICB9CisgICAgICBlbHNlCisjZW5kaWYgLyogVVNFX0RFVl9SQU5ET00gKi8KKyNpZmRlZiBXSU4zMgorCW1hZ2ljID0gKHNpemVfdCkoR2V0VGlja0NvdW50KCkgXiAoc2l6ZV90KTB4NTU1NTU1NTVVKTsKKyNlbHNlCisgICAgICBtYWdpYyA9IChzaXplX3QpKHRpbWUoMCkgXiAoc2l6ZV90KTB4NTU1NTU1NTVVKTsKKyNlbmRpZgorICAgICAgbWFnaWMgfD0gKHNpemVfdCk4VTsgICAgLyogZW5zdXJlIG5vbnplcm8gKi8KKyAgICAgIG1hZ2ljICY9IH4oc2l6ZV90KTdVOyAgIC8qIGltcHJvdmUgY2hhbmNlcyBvZiBmYXVsdCBmb3IgYmFkIHZhbHVlcyAqLworICAgIH0KKyNlbHNlIC8qIChGT09URVJTICYmICFJTlNFQ1VSRSkgKi8KKyAgICBtYWdpYyA9IChzaXplX3QpMHg1ODU4NTg1OFU7CisjZW5kaWYgLyogKEZPT1RFUlMgJiYgIUlOU0VDVVJFKSAqLworCisgICAgbXBhcmFtcy5tYWdpYyA9IG1hZ2ljOworICB9CisKKyAgUkVMRUFTRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsKKyAgcmV0dXJuIDE7Cit9CisKKy8qIHN1cHBvcnQgZm9yIG1hbGxvcHQgKi8KK3N0YXRpYyBpbnQgY2hhbmdlX21wYXJhbShpbnQgcGFyYW1fbnVtYmVyLCBpbnQgdmFsdWUpIHsKKyAgc2l6ZV90IHZhbCA9ICh2YWx1ZSA9PSAtMSk/IE1BWF9TSVpFX1QgOiAoc2l6ZV90KXZhbHVlOworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKyAgc3dpdGNoKHBhcmFtX251bWJlcikgeworICBjYXNlIE1fVFJJTV9USFJFU0hPTEQ6CisgICAgbXBhcmFtcy50cmltX3RocmVzaG9sZCA9IHZhbDsKKyAgICByZXR1cm4gMTsKKyAgY2FzZSBNX0dSQU5VTEFSSVRZOgorICAgIGlmICh2YWwgPj0gbXBhcmFtcy5wYWdlX3NpemUgJiYgKCh2YWwgJiAodmFsLTEpKSA9PSAwKSkgeworICAgICAgbXBhcmFtcy5ncmFudWxhcml0eSA9IHZhbDsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBlbHNlCisgICAgICByZXR1cm4gMDsKKyAgY2FzZSBNX01NQVBfVEhSRVNIT0xEOgorICAgIG1wYXJhbXMubW1hcF90aHJlc2hvbGQgPSB2YWw7CisgICAgcmV0dXJuIDE7CisgIGRlZmF1bHQ6CisgICAgcmV0dXJuIDA7CisgIH0KK30KKworI2lmIERFQlVHCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlYnVnZ2luZyBTdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIGFueSBjaHVuaywgd2hldGhlciBmcmVlLCBpbnVzZSwgbW1hcHBlZCBldGMgICovCitzdGF0aWMgdm9pZCBkb19jaGVja19hbnlfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKSB7CisgIGFzc2VydCgoaXNfYWxpZ25lZChjaHVuazJtZW0ocCkpKSB8fCAocC0+aGVhZCA9PSBGRU5DRVBPU1RfSEVBRCkpOworICBhc3NlcnQob2tfYWRkcmVzcyhtLCBwKSk7Cit9CisKKy8qIENoZWNrIHByb3BlcnRpZXMgb2YgdG9wIGNodW5rICovCitzdGF0aWMgdm9pZCBkb19jaGVja190b3BfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKSB7CisgIG1zZWdtZW50cHRyIHNwID0gc2VnbWVudF9ob2xkaW5nKG0sIChjaGFyKilwKTsKKyAgc2l6ZV90ICBzeiA9IHAtPmhlYWQgJiB+SU5VU0VfQklUUzsgLyogdGhpcmQtbG93ZXN0IGJpdCBjYW4gYmUgc2V0ISAqLworICBhc3NlcnQoc3AgIT0gMCk7CisgIGFzc2VydCgoaXNfYWxpZ25lZChjaHVuazJtZW0ocCkpKSB8fCAocC0+aGVhZCA9PSBGRU5DRVBPU1RfSEVBRCkpOworICBhc3NlcnQob2tfYWRkcmVzcyhtLCBwKSk7CisgIGFzc2VydChzeiA9PSBtLT50b3BzaXplKTsKKyAgYXNzZXJ0KHN6ID4gMCk7CisgIGFzc2VydChzeiA9PSAoKHNwLT5iYXNlICsgc3AtPnNpemUpIC0gKGNoYXIqKXApIC0gVE9QX0ZPT1RfU0laRSk7CisgIGFzc2VydChwaW51c2UocCkpOworICBhc3NlcnQoIXBpbnVzZShjaHVua19wbHVzX29mZnNldChwLCBzeikpKTsKK30KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiAoaW51c2UpIG1tYXBwZWQgY2h1bmtzICovCitzdGF0aWMgdm9pZCBkb19jaGVja19tbWFwcGVkX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCkgeworICBzaXplX3QgIHN6ID0gY2h1bmtzaXplKHApOworICBzaXplX3QgbGVuID0gKHN6ICsgKHAtPnByZXZfZm9vdCAmIH5JU19NTUFQUEVEX0JJVCkgKyBNTUFQX0ZPT1RfUEFEKTsKKyAgYXNzZXJ0KGlzX21tYXBwZWQocCkpOworICBhc3NlcnQodXNlX21tYXAobSkpOworICBhc3NlcnQoKGlzX2FsaWduZWQoY2h1bmsybWVtKHApKSkgfHwgKHAtPmhlYWQgPT0gRkVOQ0VQT1NUX0hFQUQpKTsKKyAgYXNzZXJ0KG9rX2FkZHJlc3MobSwgcCkpOworICBhc3NlcnQoIWlzX3NtYWxsKHN6KSk7CisgIGFzc2VydCgobGVuICYgKG1wYXJhbXMucGFnZV9zaXplLVNJWkVfVF9PTkUpKSA9PSAwKTsKKyAgYXNzZXJ0KGNodW5rX3BsdXNfb2Zmc2V0KHAsIHN6KS0+aGVhZCA9PSBGRU5DRVBPU1RfSEVBRCk7CisgIGFzc2VydChjaHVua19wbHVzX29mZnNldChwLCBzeitTSVpFX1RfU0laRSktPmhlYWQgPT0gMCk7Cit9CisKKy8qIENoZWNrIHByb3BlcnRpZXMgb2YgaW51c2UgY2h1bmtzICovCitzdGF0aWMgdm9pZCBkb19jaGVja19pbnVzZV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApIHsKKyAgZG9fY2hlY2tfYW55X2NodW5rKG0sIHApOworICBhc3NlcnQoY2ludXNlKHApKTsKKyAgYXNzZXJ0KG5leHRfcGludXNlKHApKTsKKyAgLyogSWYgbm90IHBpbnVzZSBhbmQgbm90IG1tYXBwZWQsIHByZXZpb3VzIGNodW5rIGhhcyBPSyBvZmZzZXQgKi8KKyAgYXNzZXJ0KGlzX21tYXBwZWQocCkgfHwgcGludXNlKHApIHx8IG5leHRfY2h1bmsocHJldl9jaHVuayhwKSkgPT0gcCk7CisgIGlmIChpc19tbWFwcGVkKHApKQorICAgIGRvX2NoZWNrX21tYXBwZWRfY2h1bmsobSwgcCk7Cit9CisKKy8qIENoZWNrIHByb3BlcnRpZXMgb2YgZnJlZSBjaHVua3MgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX2ZyZWVfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKSB7CisgIHNpemVfdCBzeiA9IGNodW5rc2l6ZShwKTsKKyAgbWNodW5rcHRyIG5leHQgPSBjaHVua19wbHVzX29mZnNldChwLCBzeik7CisgIGRvX2NoZWNrX2FueV9jaHVuayhtLCBwKTsKKyAgYXNzZXJ0KCFjaW51c2UocCkpOworICBhc3NlcnQoIW5leHRfcGludXNlKHApKTsKKyAgYXNzZXJ0ICghaXNfbW1hcHBlZChwKSk7CisgIGlmIChwICE9IG0tPmR2ICYmIHAgIT0gbS0+dG9wKSB7CisgICAgaWYgKHN6ID49IE1JTl9DSFVOS19TSVpFKSB7CisgICAgICBhc3NlcnQoKHN6ICYgQ0hVTktfQUxJR05fTUFTSykgPT0gMCk7CisgICAgICBhc3NlcnQoaXNfYWxpZ25lZChjaHVuazJtZW0ocCkpKTsKKyAgICAgIGFzc2VydChuZXh0LT5wcmV2X2Zvb3QgPT0gc3opOworICAgICAgYXNzZXJ0KHBpbnVzZShwKSk7CisgICAgICBhc3NlcnQgKG5leHQgPT0gbS0+dG9wIHx8IGNpbnVzZShuZXh0KSk7CisgICAgICBhc3NlcnQocC0+ZmQtPmJrID09IHApOworICAgICAgYXNzZXJ0KHAtPmJrLT5mZCA9PSBwKTsKKyAgICB9CisgICAgZWxzZSAgLyogbWFya2VycyBhcmUgYWx3YXlzIG9mIHNpemUgU0laRV9UX1NJWkUgKi8KKyAgICAgIGFzc2VydChzeiA9PSBTSVpFX1RfU0laRSk7CisgIH0KK30KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiBtYWxsb2NlZCBjaHVua3MgYXQgdGhlIHBvaW50IHRoZXkgYXJlIG1hbGxvY2VkICovCitzdGF0aWMgdm9pZCBkb19jaGVja19tYWxsb2NlZF9jaHVuayhtc3RhdGUgbSwgdm9pZCogbWVtLCBzaXplX3QgcykgeworICBpZiAobWVtICE9IDApIHsKKyAgICBtY2h1bmtwdHIgcCA9IG1lbTJjaHVuayhtZW0pOworICAgIHNpemVfdCBzeiA9IHAtPmhlYWQgJiB+KFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCk7CisgICAgZG9fY2hlY2tfaW51c2VfY2h1bmsobSwgcCk7CisgICAgYXNzZXJ0KChzeiAmIENIVU5LX0FMSUdOX01BU0spID09IDApOworICAgIGFzc2VydChzeiA+PSBNSU5fQ0hVTktfU0laRSk7CisgICAgYXNzZXJ0KHN6ID49IHMpOworICAgIC8qIHVubGVzcyBtbWFwcGVkLCBzaXplIGlzIGxlc3MgdGhhbiBNSU5fQ0hVTktfU0laRSBtb3JlIHRoYW4gcmVxdWVzdCAqLworICAgIGFzc2VydChpc19tbWFwcGVkKHApIHx8IHN6IDwgKHMgKyBNSU5fQ0hVTktfU0laRSkpOworICB9Cit9CisKKy8qIENoZWNrIGEgdHJlZSBhbmQgaXRzIHN1YnRyZWVzLiAgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX3RyZWUobXN0YXRlIG0sIHRjaHVua3B0ciB0KSB7CisgIHRjaHVua3B0ciBoZWFkID0gMDsKKyAgdGNodW5rcHRyIHUgPSB0OworICBiaW5kZXhfdCB0aW5kZXggPSB0LT5pbmRleDsKKyAgc2l6ZV90IHRzaXplID0gY2h1bmtzaXplKHQpOworICBiaW5kZXhfdCBpZHg7CisgIGNvbXB1dGVfdHJlZV9pbmRleCh0c2l6ZSwgaWR4KTsKKyAgYXNzZXJ0KHRpbmRleCA9PSBpZHgpOworICBhc3NlcnQodHNpemUgPj0gTUlOX0xBUkdFX1NJWkUpOworICBhc3NlcnQodHNpemUgPj0gbWluc2l6ZV9mb3JfdHJlZV9pbmRleChpZHgpKTsKKyAgYXNzZXJ0KChpZHggPT0gTlRSRUVCSU5TLTEpIHx8ICh0c2l6ZSA8IG1pbnNpemVfZm9yX3RyZWVfaW5kZXgoKGlkeCsxKSkpKTsKKworICBkbyB7IC8qIHRyYXZlcnNlIHRocm91Z2ggY2hhaW4gb2Ygc2FtZS1zaXplZCBub2RlcyAqLworICAgIGRvX2NoZWNrX2FueV9jaHVuayhtLCAoKG1jaHVua3B0cil1KSk7CisgICAgYXNzZXJ0KHUtPmluZGV4ID09IHRpbmRleCk7CisgICAgYXNzZXJ0KGNodW5rc2l6ZSh1KSA9PSB0c2l6ZSk7CisgICAgYXNzZXJ0KCFjaW51c2UodSkpOworICAgIGFzc2VydCghbmV4dF9waW51c2UodSkpOworICAgIGFzc2VydCh1LT5mZC0+YmsgPT0gdSk7CisgICAgYXNzZXJ0KHUtPmJrLT5mZCA9PSB1KTsKKyAgICBpZiAodS0+cGFyZW50ID09IDApIHsKKyAgICAgIGFzc2VydCh1LT5jaGlsZFswXSA9PSAwKTsKKyAgICAgIGFzc2VydCh1LT5jaGlsZFsxXSA9PSAwKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBhc3NlcnQoaGVhZCA9PSAwKTsgLyogb25seSBvbmUgbm9kZSBvbiBjaGFpbiBoYXMgcGFyZW50ICovCisgICAgICBoZWFkID0gdTsKKyAgICAgIGFzc2VydCh1LT5wYXJlbnQgIT0gdSk7CisgICAgICBhc3NlcnQgKHUtPnBhcmVudC0+Y2hpbGRbMF0gPT0gdSB8fAorCSAgICAgIHUtPnBhcmVudC0+Y2hpbGRbMV0gPT0gdSB8fAorCSAgICAgICooKHRiaW5wdHIqKSh1LT5wYXJlbnQpKSA9PSB1KTsKKyAgICAgIGlmICh1LT5jaGlsZFswXSAhPSAwKSB7CisJYXNzZXJ0KHUtPmNoaWxkWzBdLT5wYXJlbnQgPT0gdSk7CisJYXNzZXJ0KHUtPmNoaWxkWzBdICE9IHUpOworCWRvX2NoZWNrX3RyZWUobSwgdS0+Y2hpbGRbMF0pOworICAgICAgfQorICAgICAgaWYgKHUtPmNoaWxkWzFdICE9IDApIHsKKwlhc3NlcnQodS0+Y2hpbGRbMV0tPnBhcmVudCA9PSB1KTsKKwlhc3NlcnQodS0+Y2hpbGRbMV0gIT0gdSk7CisJZG9fY2hlY2tfdHJlZShtLCB1LT5jaGlsZFsxXSk7CisgICAgICB9CisgICAgICBpZiAodS0+Y2hpbGRbMF0gIT0gMCAmJiB1LT5jaGlsZFsxXSAhPSAwKSB7CisJYXNzZXJ0KGNodW5rc2l6ZSh1LT5jaGlsZFswXSkgPCBjaHVua3NpemUodS0+Y2hpbGRbMV0pKTsKKyAgICAgIH0KKyAgICB9CisgICAgdSA9IHUtPmZkOworICB9IHdoaWxlICh1ICE9IHQpOworICBhc3NlcnQoaGVhZCAhPSAwKTsKK30KKworLyogIENoZWNrIGFsbCB0aGUgY2h1bmtzIGluIGEgdHJlZWJpbi4gICovCitzdGF0aWMgdm9pZCBkb19jaGVja190cmVlYmluKG1zdGF0ZSBtLCBiaW5kZXhfdCBpKSB7CisgIHRiaW5wdHIqIHRiID0gdHJlZWJpbl9hdChtLCBpKTsKKyAgdGNodW5rcHRyIHQgPSAqdGI7CisgIGludCBlbXB0eSA9IChtLT50cmVlbWFwICYgKDFVIDw8IGkpKSA9PSAwOworICBpZiAodCA9PSAwKQorICAgIGFzc2VydChlbXB0eSk7CisgIGlmICghZW1wdHkpCisgICAgZG9fY2hlY2tfdHJlZShtLCB0KTsKK30KKworLyogIENoZWNrIGFsbCB0aGUgY2h1bmtzIGluIGEgc21hbGxiaW4uICAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfc21hbGxiaW4obXN0YXRlIG0sIGJpbmRleF90IGkpIHsKKyAgc2JpbnB0ciBiID0gc21hbGxiaW5fYXQobSwgaSk7CisgIG1jaHVua3B0ciBwID0gYi0+Yms7CisgIHVuc2lnbmVkIGludCBlbXB0eSA9IChtLT5zbWFsbG1hcCAmICgxVSA8PCBpKSkgPT0gMDsKKyAgaWYgKHAgPT0gYikKKyAgICBhc3NlcnQoZW1wdHkpOworICBpZiAoIWVtcHR5KSB7CisgICAgZm9yICg7IHAgIT0gYjsgcCA9IHAtPmJrKSB7CisgICAgICBzaXplX3Qgc2l6ZSA9IGNodW5rc2l6ZShwKTsKKyAgICAgIG1jaHVua3B0ciBxOworICAgICAgLyogZWFjaCBjaHVuayBjbGFpbXMgdG8gYmUgZnJlZSAqLworICAgICAgZG9fY2hlY2tfZnJlZV9jaHVuayhtLCBwKTsKKyAgICAgIC8qIGNodW5rIGJlbG9uZ3MgaW4gYmluICovCisgICAgICBhc3NlcnQoc21hbGxfaW5kZXgoc2l6ZSkgPT0gaSk7CisgICAgICBhc3NlcnQocC0+YmsgPT0gYiB8fCBjaHVua3NpemUocC0+YmspID09IGNodW5rc2l6ZShwKSk7CisgICAgICAvKiBjaHVuayBpcyBmb2xsb3dlZCBieSBhbiBpbnVzZSBjaHVuayAqLworICAgICAgcSA9IG5leHRfY2h1bmsocCk7CisgICAgICBpZiAocS0+aGVhZCAhPSBGRU5DRVBPU1RfSEVBRCkKKwlkb19jaGVja19pbnVzZV9jaHVuayhtLCBxKTsKKyAgICB9CisgIH0KK30KKworLyogRmluZCB4IGluIGEgYmluLiBVc2VkIGluIG90aGVyIGNoZWNrIGZ1bmN0aW9ucy4gKi8KK3N0YXRpYyBpbnQgYmluX2ZpbmQobXN0YXRlIG0sIG1jaHVua3B0ciB4KSB7CisgIHNpemVfdCBzaXplID0gY2h1bmtzaXplKHgpOworICBpZiAoaXNfc21hbGwoc2l6ZSkpIHsKKyAgICBiaW5kZXhfdCBzaWR4ID0gc21hbGxfaW5kZXgoc2l6ZSk7CisgICAgc2JpbnB0ciBiID0gc21hbGxiaW5fYXQobSwgc2lkeCk7CisgICAgaWYgKHNtYWxsbWFwX2lzX21hcmtlZChtLCBzaWR4KSkgeworICAgICAgbWNodW5rcHRyIHAgPSBiOworICAgICAgZG8geworCWlmIChwID09IHgpCisJICByZXR1cm4gMTsKKyAgICAgIH0gd2hpbGUgKChwID0gcC0+ZmQpICE9IGIpOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBiaW5kZXhfdCB0aWR4OworICAgIGNvbXB1dGVfdHJlZV9pbmRleChzaXplLCB0aWR4KTsKKyAgICBpZiAodHJlZW1hcF9pc19tYXJrZWQobSwgdGlkeCkpIHsKKyAgICAgIHRjaHVua3B0ciB0ID0gKnRyZWViaW5fYXQobSwgdGlkeCk7CisgICAgICBzaXplX3Qgc2l6ZWJpdHMgPSBzaXplIDw8IGxlZnRzaGlmdF9mb3JfdHJlZV9pbmRleCh0aWR4KTsKKyAgICAgIHdoaWxlICh0ICE9IDAgJiYgY2h1bmtzaXplKHQpICE9IHNpemUpIHsKKwl0ID0gdC0+Y2hpbGRbKHNpemViaXRzID4+IChTSVpFX1RfQklUU0laRS1TSVpFX1RfT05FKSkgJiAxXTsKKwlzaXplYml0cyA8PD0gMTsKKyAgICAgIH0KKyAgICAgIGlmICh0ICE9IDApIHsKKwl0Y2h1bmtwdHIgdSA9IHQ7CisJZG8geworCSAgaWYgKHUgPT0gKHRjaHVua3B0cil4KQorCSAgICByZXR1cm4gMTsKKwl9IHdoaWxlICgodSA9IHUtPmZkKSAhPSB0KTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIFRyYXZlcnNlIGVhY2ggY2h1bmsgYW5kIGNoZWNrIGl0OyByZXR1cm4gdG90YWwgKi8KK3N0YXRpYyBzaXplX3QgdHJhdmVyc2VfYW5kX2NoZWNrKG1zdGF0ZSBtKSB7CisgIHNpemVfdCBzdW0gPSAwOworICBpZiAoaXNfaW5pdGlhbGl6ZWQobSkpIHsKKyAgICBtc2VnbWVudHB0ciBzID0gJm0tPnNlZzsKKyAgICBzdW0gKz0gbS0+dG9wc2l6ZSArIFRPUF9GT09UX1NJWkU7CisgICAgd2hpbGUgKHMgIT0gMCkgeworICAgICAgbWNodW5rcHRyIHEgPSBhbGlnbl9hc19jaHVuayhzLT5iYXNlKTsKKyAgICAgIG1jaHVua3B0ciBsYXN0cSA9IDA7CisgICAgICBhc3NlcnQocGludXNlKHEpKTsKKyAgICAgIHdoaWxlIChzZWdtZW50X2hvbGRzKHMsIHEpICYmCisJICAgICBxICE9IG0tPnRvcCAmJiBxLT5oZWFkICE9IEZFTkNFUE9TVF9IRUFEKSB7CisJc3VtICs9IGNodW5rc2l6ZShxKTsKKwlpZiAoY2ludXNlKHEpKSB7CisJICBhc3NlcnQoIWJpbl9maW5kKG0sIHEpKTsKKwkgIGRvX2NoZWNrX2ludXNlX2NodW5rKG0sIHEpOworCX0KKwllbHNlIHsKKwkgIGFzc2VydChxID09IG0tPmR2IHx8IGJpbl9maW5kKG0sIHEpKTsKKwkgIGFzc2VydChsYXN0cSA9PSAwIHx8IGNpbnVzZShsYXN0cSkpOyAvKiBOb3QgMiBjb25zZWN1dGl2ZSBmcmVlICovCisJICBkb19jaGVja19mcmVlX2NodW5rKG0sIHEpOworCX0KKwlsYXN0cSA9IHE7CisJcSA9IG5leHRfY2h1bmsocSk7CisgICAgICB9CisgICAgICBzID0gcy0+bmV4dDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHN1bTsKK30KKworLyogQ2hlY2sgYWxsIHByb3BlcnRpZXMgb2YgbWFsbG9jX3N0YXRlLiAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfbWFsbG9jX3N0YXRlKG1zdGF0ZSBtKSB7CisgIGJpbmRleF90IGk7CisgIHNpemVfdCB0b3RhbDsKKyAgLyogY2hlY2sgYmlucyAqLworICBmb3IgKGkgPSAwOyBpIDwgTlNNQUxMQklOUzsgKytpKQorICAgIGRvX2NoZWNrX3NtYWxsYmluKG0sIGkpOworICBmb3IgKGkgPSAwOyBpIDwgTlRSRUVCSU5TOyArK2kpCisgICAgZG9fY2hlY2tfdHJlZWJpbihtLCBpKTsKKworICBpZiAobS0+ZHZzaXplICE9IDApIHsgLyogY2hlY2sgZHYgY2h1bmsgKi8KKyAgICBkb19jaGVja19hbnlfY2h1bmsobSwgbS0+ZHYpOworICAgIGFzc2VydChtLT5kdnNpemUgPT0gY2h1bmtzaXplKG0tPmR2KSk7CisgICAgYXNzZXJ0KG0tPmR2c2l6ZSA+PSBNSU5fQ0hVTktfU0laRSk7CisgICAgYXNzZXJ0KGJpbl9maW5kKG0sIG0tPmR2KSA9PSAwKTsKKyAgfQorCisgIGlmIChtLT50b3AgIT0gMCkgeyAgIC8qIGNoZWNrIHRvcCBjaHVuayAqLworICAgIGRvX2NoZWNrX3RvcF9jaHVuayhtLCBtLT50b3ApOworICAgIC8qYXNzZXJ0KG0tPnRvcHNpemUgPT0gY2h1bmtzaXplKG0tPnRvcCkpOyByZWR1bmRhbnQgKi8KKyAgICBhc3NlcnQobS0+dG9wc2l6ZSA+IDApOworICAgIGFzc2VydChiaW5fZmluZChtLCBtLT50b3ApID09IDApOworICB9CisKKyAgdG90YWwgPSB0cmF2ZXJzZV9hbmRfY2hlY2sobSk7CisgIGFzc2VydCh0b3RhbCA8PSBtLT5mb290cHJpbnQpOworICBhc3NlcnQobS0+Zm9vdHByaW50IDw9IG0tPm1heF9mb290cHJpbnQpOworfQorI2VuZGlmIC8qIERFQlVHICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN0YXRpc3RpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiAhTk9fTUFMTElORk8KK3N0YXRpYyBzdHJ1Y3QgbWFsbGluZm8gaW50ZXJuYWxfbWFsbGluZm8obXN0YXRlIG0pIHsKKyAgc3RydWN0IG1hbGxpbmZvIG5tID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07CisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworICBpZiAoIVBSRUFDVElPTihtKSkgeworICAgIGNoZWNrX21hbGxvY19zdGF0ZShtKTsKKyAgICBpZiAoaXNfaW5pdGlhbGl6ZWQobSkpIHsKKyAgICAgIHNpemVfdCBuZnJlZSA9IFNJWkVfVF9PTkU7IC8qIHRvcCBhbHdheXMgZnJlZSAqLworICAgICAgc2l6ZV90IG1mcmVlID0gbS0+dG9wc2l6ZSArIFRPUF9GT09UX1NJWkU7CisgICAgICBzaXplX3Qgc3VtID0gbWZyZWU7CisgICAgICBtc2VnbWVudHB0ciBzID0gJm0tPnNlZzsKKyAgICAgIHdoaWxlIChzICE9IDApIHsKKwltY2h1bmtwdHIgcSA9IGFsaWduX2FzX2NodW5rKHMtPmJhc2UpOworCXdoaWxlIChzZWdtZW50X2hvbGRzKHMsIHEpICYmCisJICAgICAgIHEgIT0gbS0+dG9wICYmIHEtPmhlYWQgIT0gRkVOQ0VQT1NUX0hFQUQpIHsKKwkgIHNpemVfdCBzeiA9IGNodW5rc2l6ZShxKTsKKwkgIHN1bSArPSBzejsKKwkgIGlmICghY2ludXNlKHEpKSB7CisJICAgIG1mcmVlICs9IHN6OworCSAgICArK25mcmVlOworCSAgfQorCSAgcSA9IG5leHRfY2h1bmsocSk7CisJfQorCXMgPSBzLT5uZXh0OworICAgICAgfQorCisgICAgICBubS5hcmVuYSAgICA9IHN1bTsKKyAgICAgIG5tLm9yZGJsa3MgID0gbmZyZWU7CisgICAgICBubS5oYmxraGQgICA9IG0tPmZvb3RwcmludCAtIHN1bTsKKyAgICAgIG5tLnVzbWJsa3MgID0gbS0+bWF4X2Zvb3RwcmludDsKKyAgICAgIG5tLnVvcmRibGtzID0gbS0+Zm9vdHByaW50IC0gbWZyZWU7CisgICAgICBubS5mb3JkYmxrcyA9IG1mcmVlOworICAgICAgbm0ua2VlcGNvc3QgPSBtLT50b3BzaXplOworICAgIH0KKworICAgIFBPU1RBQ1RJT04obSk7CisgIH0KKyAgcmV0dXJuIG5tOworfQorI2VuZGlmIC8qICFOT19NQUxMSU5GTyAqLworCitzdGF0aWMgdm9pZCBpbnRlcm5hbF9tYWxsb2Nfc3RhdHMobXN0YXRlIG0pIHsKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CisgIGlmICghUFJFQUNUSU9OKG0pKSB7CisgICAgc2l6ZV90IG1heGZwID0gMDsKKyAgICBzaXplX3QgZnAgPSAwOworICAgIHNpemVfdCB1c2VkID0gMDsKKyAgICBjaGVja19tYWxsb2Nfc3RhdGUobSk7CisgICAgaWYgKGlzX2luaXRpYWxpemVkKG0pKSB7CisgICAgICBtc2VnbWVudHB0ciBzID0gJm0tPnNlZzsKKyAgICAgIG1heGZwID0gbS0+bWF4X2Zvb3RwcmludDsKKyAgICAgIGZwID0gbS0+Zm9vdHByaW50OworICAgICAgdXNlZCA9IGZwIC0gKG0tPnRvcHNpemUgKyBUT1BfRk9PVF9TSVpFKTsKKworICAgICAgd2hpbGUgKHMgIT0gMCkgeworCW1jaHVua3B0ciBxID0gYWxpZ25fYXNfY2h1bmsocy0+YmFzZSk7CisJd2hpbGUgKHNlZ21lbnRfaG9sZHMocywgcSkgJiYKKwkgICAgICAgcSAhPSBtLT50b3AgJiYgcS0+aGVhZCAhPSBGRU5DRVBPU1RfSEVBRCkgeworCSAgaWYgKCFjaW51c2UocSkpCisJICAgIHVzZWQgLT0gY2h1bmtzaXplKHEpOworCSAgcSA9IG5leHRfY2h1bmsocSk7CisJfQorCXMgPSBzLT5uZXh0OworICAgICAgfQorICAgIH0KKworICAgIGZwcmludGYoc3RkZXJyLCAibWF4IHN5c3RlbSBieXRlcyA9ICUxMGx1XG4iLCAodW5zaWduZWQgbG9uZykobWF4ZnApKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgInN5c3RlbSBieXRlcyAgICAgPSAlMTBsdVxuIiwgKHVuc2lnbmVkIGxvbmcpKGZwKSk7CisgICAgZnByaW50ZihzdGRlcnIsICJpbiB1c2UgYnl0ZXMgICAgID0gJTEwbHVcbiIsICh1bnNpZ25lZCBsb25nKSh1c2VkKSk7CisKKyAgICBQT1NUQUNUSU9OKG0pOworICB9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9wZXJhdGlvbnMgb24gc21hbGxiaW5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIFZhcmlvdXMgZm9ybXMgb2YgbGlua2luZyBhbmQgdW5saW5raW5nIGFyZSBkZWZpbmVkIGFzIG1hY3Jvcy4gIEV2ZW4KKyAgdGhlIG9uZXMgZm9yIHRyZWVzLCB3aGljaCBhcmUgdmVyeSBsb25nIGJ1dCBoYXZlIHZlcnkgc2hvcnQgdHlwaWNhbAorICBwYXRocy4gIFRoaXMgaXMgdWdseSBidXQgcmVkdWNlcyByZWxpYW5jZSBvbiBpbmxpbmluZyBzdXBwb3J0IG9mCisgIGNvbXBpbGVycy4KKyovCisKKy8qIExpbmsgYSBmcmVlIGNodW5rIGludG8gYSBzbWFsbGJpbiAgKi8KKyNkZWZpbmUgaW5zZXJ0X3NtYWxsX2NodW5rKE0sIFAsIFMpIHtcCisgIGJpbmRleF90IEkgID0gc21hbGxfaW5kZXgoUyk7XAorICBtY2h1bmtwdHIgQiA9IHNtYWxsYmluX2F0KE0sIEkpO1wKKyAgbWNodW5rcHRyIEYgPSBCO1wKKyAgYXNzZXJ0KFMgPj0gTUlOX0NIVU5LX1NJWkUpO1wKKyAgaWYgKCFzbWFsbG1hcF9pc19tYXJrZWQoTSwgSSkpXAorICAgIG1hcmtfc21hbGxtYXAoTSwgSSk7XAorICBlbHNlIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgQi0+ZmQpKSlcCisgICAgRiA9IEItPmZkO1wKKyAgZWxzZSB7XAorICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgfVwKKyAgQi0+ZmQgPSBQO1wKKyAgRi0+YmsgPSBQO1wKKyAgUC0+ZmQgPSBGO1wKKyAgUC0+YmsgPSBCO1wKK30KKworLyogVW5saW5rIGEgY2h1bmsgZnJvbSBhIHNtYWxsYmluICAqLworI2RlZmluZSB1bmxpbmtfc21hbGxfY2h1bmsoTSwgUCwgUykge1wKKyAgbWNodW5rcHRyIEYgPSBQLT5mZDtcCisgIG1jaHVua3B0ciBCID0gUC0+Yms7XAorICBiaW5kZXhfdCBJID0gc21hbGxfaW5kZXgoUyk7XAorICBhc3NlcnQoUCAhPSBCKTtcCisgIGFzc2VydChQICE9IEYpO1wKKyAgYXNzZXJ0KGNodW5rc2l6ZShQKSA9PSBzbWFsbF9pbmRleDJzaXplKEkpKTtcCisgIGlmIChGID09IEIpXAorICAgIGNsZWFyX3NtYWxsbWFwKE0sIEkpO1wKKyAgZWxzZSBpZiAoUlRDSEVDSygoRiA9PSBzbWFsbGJpbl9hdChNLEkpIHx8IG9rX2FkZHJlc3MoTSwgRikpICYmXAorCQkgICAoQiA9PSBzbWFsbGJpbl9hdChNLEkpIHx8IG9rX2FkZHJlc3MoTSwgQikpKSkge1wKKyAgICBGLT5iayA9IEI7XAorICAgIEItPmZkID0gRjtcCisgIH1cCisgIGVsc2Uge1wKKyAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgIH1cCit9CisKKy8qIFVubGluayB0aGUgZmlyc3QgY2h1bmsgZnJvbSBhIHNtYWxsYmluICovCisjZGVmaW5lIHVubGlua19maXJzdF9zbWFsbF9jaHVuayhNLCBCLCBQLCBJKSB7XAorICBtY2h1bmtwdHIgRiA9IFAtPmZkO1wKKyAgYXNzZXJ0KFAgIT0gQik7XAorICBhc3NlcnQoUCAhPSBGKTtcCisgIGFzc2VydChjaHVua3NpemUoUCkgPT0gc21hbGxfaW5kZXgyc2l6ZShJKSk7XAorICBpZiAoQiA9PSBGKVwKKyAgICBjbGVhcl9zbWFsbG1hcChNLCBJKTtcCisgIGVsc2UgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBGKSkpIHtcCisgICAgQi0+ZmQgPSBGO1wKKyAgICBGLT5iayA9IEI7XAorICB9XAorICBlbHNlIHtcCisgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICB9XAorfQorCisKKworLyogUmVwbGFjZSBkdiBub2RlLCBiaW5uaW5nIHRoZSBvbGQgb25lICovCisvKiBVc2VkIG9ubHkgd2hlbiBkdnNpemUga25vd24gdG8gYmUgc21hbGwgKi8KKyNkZWZpbmUgcmVwbGFjZV9kdihNLCBQLCBTKSB7XAorICBzaXplX3QgRFZTID0gTS0+ZHZzaXplO1wKKyAgaWYgKERWUyAhPSAwKSB7XAorICAgIG1jaHVua3B0ciBEViA9IE0tPmR2O1wKKyAgICBhc3NlcnQoaXNfc21hbGwoRFZTKSk7XAorICAgIGluc2VydF9zbWFsbF9jaHVuayhNLCBEViwgRFZTKTtcCisgIH1cCisgIE0tPmR2c2l6ZSA9IFM7XAorICBNLT5kdiA9IFA7XAorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9wZXJhdGlvbnMgb24gdHJlZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBJbnNlcnQgY2h1bmsgaW50byB0cmVlICovCisjZGVmaW5lIGluc2VydF9sYXJnZV9jaHVuayhNLCBYLCBTKSB7XAorICB0YmlucHRyKiBIO1wKKyAgYmluZGV4X3QgSTtcCisgIGNvbXB1dGVfdHJlZV9pbmRleChTLCBJKTtcCisgIEggPSB0cmVlYmluX2F0KE0sIEkpO1wKKyAgWC0+aW5kZXggPSBJO1wKKyAgWC0+Y2hpbGRbMF0gPSBYLT5jaGlsZFsxXSA9IDA7XAorICBpZiAoIXRyZWVtYXBfaXNfbWFya2VkKE0sIEkpKSB7XAorICAgIG1hcmtfdHJlZW1hcChNLCBJKTtcCisgICAgKkggPSBYO1wKKyAgICBYLT5wYXJlbnQgPSAodGNodW5rcHRyKUg7XAorICAgIFgtPmZkID0gWC0+YmsgPSBYO1wKKyAgfVwKKyAgZWxzZSB7XAorICAgIHRjaHVua3B0ciBUID0gKkg7XAorICAgIHNpemVfdCBLID0gUyA8PCBsZWZ0c2hpZnRfZm9yX3RyZWVfaW5kZXgoSSk7XAorICAgIGZvciAoOzspIHtcCisgICAgICBpZiAoY2h1bmtzaXplKFQpICE9IFMpIHtcCisJdGNodW5rcHRyKiBDID0gJihULT5jaGlsZFsoSyA+PiAoU0laRV9UX0JJVFNJWkUtU0laRV9UX09ORSkpICYgMV0pO1wKKwlLIDw8PSAxO1wKKwlpZiAoKkMgIT0gMClcCisJICBUID0gKkM7XAorCWVsc2UgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBDKSkpIHtcCisJICAqQyA9IFg7XAorCSAgWC0+cGFyZW50ID0gVDtcCisJICBYLT5mZCA9IFgtPmJrID0gWDtcCisJICBicmVhaztcCisJfVwKKwllbHNlIHtcCisJICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisJICBicmVhaztcCisJfVwKKyAgICAgIH1cCisgICAgICBlbHNlIHtcCisJdGNodW5rcHRyIEYgPSBULT5mZDtcCisJaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBUKSAmJiBva19hZGRyZXNzKE0sIEYpKSkge1wKKwkgIFQtPmZkID0gRi0+YmsgPSBYO1wKKwkgIFgtPmZkID0gRjtcCisJICBYLT5iayA9IFQ7XAorCSAgWC0+cGFyZW50ID0gMDtcCisJICBicmVhaztcCisJfVwKKwllbHNlIHtcCisJICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisJICBicmVhaztcCisJfVwKKyAgICAgIH1cCisgICAgfVwKKyAgfVwKK30KKworLyoKKyAgVW5saW5rIHN0ZXBzOgorCisgIDEuIElmIHggaXMgYSBjaGFpbmVkIG5vZGUsIHVubGluayBpdCBmcm9tIGl0cyBzYW1lLXNpemVkIGZkL2JrIGxpbmtzCisgICAgIGFuZCBjaG9vc2UgaXRzIGJrIG5vZGUgYXMgaXRzIHJlcGxhY2VtZW50LgorICAyLiBJZiB4IHdhcyB0aGUgbGFzdCBub2RlIG9mIGl0cyBzaXplLCBidXQgbm90IGEgbGVhZiBub2RlLCBpdCBtdXN0CisgICAgIGJlIHJlcGxhY2VkIHdpdGggYSBsZWFmIG5vZGUgKG5vdCBtZXJlbHkgb25lIHdpdGggYW4gb3BlbiBsZWZ0IG9yCisgICAgIHJpZ2h0KSwgdG8gbWFrZSBzdXJlIHRoYXQgbGVmdHMgYW5kIHJpZ2h0cyBvZiBkZXNjZW5kZW50cworICAgICBjb3JyZXNwb25kIHByb3Blcmx5IHRvIGJpdCBtYXNrcy4gIFdlIHVzZSB0aGUgcmlnaHRtb3N0IGRlc2NlbmRlbnQKKyAgICAgb2YgeC4gIFdlIGNvdWxkIHVzZSBhbnkgb3RoZXIgbGVhZiwgYnV0IHRoaXMgaXMgZWFzeSB0byBsb2NhdGUgYW5kCisgICAgIHRlbmRzIHRvIGNvdW50ZXJhY3QgcmVtb3ZhbCBvZiBsZWZ0bW9zdHMgZWxzZXdoZXJlLCBhbmQgc28ga2VlcHMKKyAgICAgcGF0aHMgc2hvcnRlciB0aGFuIG1pbmltYWxseSBndWFyYW50ZWVkLiAgVGhpcyBkb2Vzbid0IGxvb3AgbXVjaAorICAgICBiZWNhdXNlIG9uIGF2ZXJhZ2UgYSBub2RlIGluIGEgdHJlZSBpcyBuZWFyIHRoZSBib3R0b20uCisgIDMuIElmIHggaXMgdGhlIGJhc2Ugb2YgYSBjaGFpbiAoaS5lLiwgaGFzIHBhcmVudCBsaW5rcykgcmVsaW5rCisgICAgIHgncyBwYXJlbnQgYW5kIGNoaWxkcmVuIHRvIHgncyByZXBsYWNlbWVudCAob3IgbnVsbCBpZiBub25lKS4KKyovCisKKyNkZWZpbmUgdW5saW5rX2xhcmdlX2NodW5rKE0sIFgpIHtcCisgIHRjaHVua3B0ciBYUCA9IFgtPnBhcmVudDtcCisgIHRjaHVua3B0ciBSO1wKKyAgaWYgKFgtPmJrICE9IFgpIHtcCisgICAgdGNodW5rcHRyIEYgPSBYLT5mZDtcCisgICAgUiA9IFgtPmJrO1wKKyAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEYpKSkge1wKKyAgICAgIEYtPmJrID0gUjtcCisgICAgICBSLT5mZCA9IEY7XAorICAgIH1cCisgICAgZWxzZSB7XAorICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICAgIH1cCisgIH1cCisgIGVsc2Uge1wKKyAgICB0Y2h1bmtwdHIqIFJQO1wKKyAgICBpZiAoKChSID0gKihSUCA9ICYoWC0+Y2hpbGRbMV0pKSkgIT0gMCkgfHxcCisJKChSID0gKihSUCA9ICYoWC0+Y2hpbGRbMF0pKSkgIT0gMCkpIHtcCisgICAgICB0Y2h1bmtwdHIqIENQO1wKKyAgICAgIHdoaWxlICgoKihDUCA9ICYoUi0+Y2hpbGRbMV0pKSAhPSAwKSB8fFwKKwkgICAgICgqKENQID0gJihSLT5jaGlsZFswXSkpICE9IDApKSB7XAorCVIgPSAqKFJQID0gQ1ApO1wKKyAgICAgIH1cCisgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIFJQKSkpXAorCSpSUCA9IDA7XAorICAgICAgZWxzZSB7XAorCUNPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgICAgIH1cCisgICAgfVwKKyAgfVwKKyAgaWYgKFhQICE9IDApIHtcCisgICAgdGJpbnB0ciogSCA9IHRyZWViaW5fYXQoTSwgWC0+aW5kZXgpO1wKKyAgICBpZiAoWCA9PSAqSCkge1wKKyAgICAgIGlmICgoKkggPSBSKSA9PSAwKSBcCisJY2xlYXJfdHJlZW1hcChNLCBYLT5pbmRleCk7XAorICAgIH1cCisgICAgZWxzZSBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIFhQKSkpIHtcCisgICAgICBpZiAoWFAtPmNoaWxkWzBdID09IFgpIFwKKwlYUC0+Y2hpbGRbMF0gPSBSO1wKKyAgICAgIGVsc2UgXAorCVhQLT5jaGlsZFsxXSA9IFI7XAorICAgIH1cCisgICAgZWxzZVwKKyAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgICBpZiAoUiAhPSAwKSB7XAorICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBSKSkpIHtcCisJdGNodW5rcHRyIEMwLCBDMTtcCisJUi0+cGFyZW50ID0gWFA7XAorCWlmICgoQzAgPSBYLT5jaGlsZFswXSkgIT0gMCkge1wKKwkgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgQzApKSkge1wKKwkgICAgUi0+Y2hpbGRbMF0gPSBDMDtcCisJICAgIEMwLT5wYXJlbnQgPSBSO1wKKwkgIH1cCisJICBlbHNlXAorCSAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisJfVwKKwlpZiAoKEMxID0gWC0+Y2hpbGRbMV0pICE9IDApIHtcCisJICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEMxKSkpIHtcCisJICAgIFItPmNoaWxkWzFdID0gQzE7XAorCSAgICBDMS0+cGFyZW50ID0gUjtcCisJICB9XAorCSAgZWxzZVwKKwkgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorCX1cCisgICAgICB9XAorICAgICAgZWxzZVwKKwlDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgICAgfVwKKyAgfVwKK30KKworLyogUmVsYXlzIHRvIGxhcmdlIHZzIHNtYWxsIGJpbiBvcGVyYXRpb25zICovCisKKyNkZWZpbmUgaW5zZXJ0X2NodW5rKE0sIFAsIFMpXAorICBpZiAoaXNfc21hbGwoUykpIGluc2VydF9zbWFsbF9jaHVuayhNLCBQLCBTKVwKKyAgZWxzZSB7IHRjaHVua3B0ciBUUCA9ICh0Y2h1bmtwdHIpKFApOyBpbnNlcnRfbGFyZ2VfY2h1bmsoTSwgVFAsIFMpOyB9CisKKyNkZWZpbmUgdW5saW5rX2NodW5rKE0sIFAsIFMpXAorICBpZiAoaXNfc21hbGwoUykpIHVubGlua19zbWFsbF9jaHVuayhNLCBQLCBTKVwKKyAgZWxzZSB7IHRjaHVua3B0ciBUUCA9ICh0Y2h1bmtwdHIpKFApOyB1bmxpbmtfbGFyZ2VfY2h1bmsoTSwgVFApOyB9CisKKworLyogUmVsYXlzIHRvIGludGVybmFsIGNhbGxzIHRvIG1hbGxvYy9mcmVlIGZyb20gcmVhbGxvYywgbWVtYWxpZ24gZXRjICovCisKKyNpZiBPTkxZX01TUEFDRVMKKyNkZWZpbmUgaW50ZXJuYWxfbWFsbG9jKG0sIGIpIG1zcGFjZV9tYWxsb2MobSwgYikKKyNkZWZpbmUgaW50ZXJuYWxfZnJlZShtLCBtZW0pIG1zcGFjZV9mcmVlKG0sbWVtKTsKKyNlbHNlIC8qIE9OTFlfTVNQQUNFUyAqLworI2lmIE1TUEFDRVMKKyNkZWZpbmUgaW50ZXJuYWxfbWFsbG9jKG0sIGIpXAorICAgKG0gPT0gZ20pPyBkbG1hbGxvYyhiKSA6IG1zcGFjZV9tYWxsb2MobSwgYikKKyNkZWZpbmUgaW50ZXJuYWxfZnJlZShtLCBtZW0pXAorICAgaWYgKG0gPT0gZ20pIGRsZnJlZShtZW0pOyBlbHNlIG1zcGFjZV9mcmVlKG0sbWVtKTsKKyNlbHNlIC8qIE1TUEFDRVMgKi8KKyNkZWZpbmUgaW50ZXJuYWxfbWFsbG9jKG0sIGIpIGRsbWFsbG9jKGIpCisjZGVmaW5lIGludGVybmFsX2ZyZWUobSwgbWVtKSBkbGZyZWUobWVtKQorI2VuZGlmIC8qIE1TUEFDRVMgKi8KKyNlbmRpZiAvKiBPTkxZX01TUEFDRVMgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERpcmVjdC1tbWFwcGluZyBjaHVua3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgRGlyZWN0bHkgbW1hcHBlZCBjaHVua3MgYXJlIHNldCB1cCB3aXRoIGFuIG9mZnNldCB0byB0aGUgc3RhcnQgb2YKKyAgdGhlIG1tYXBwZWQgcmVnaW9uIHN0b3JlZCBpbiB0aGUgcHJldl9mb290IGZpZWxkIG9mIHRoZSBjaHVuay4gVGhpcworICBhbGxvd3MgcmVjb25zdHJ1Y3Rpb24gb2YgdGhlIHJlcXVpcmVkIGFyZ3VtZW50IHRvIE1VTk1BUCB3aGVuIGZyZWVkLAorICBhbmQgYWxzbyBhbGxvd3MgYWRqdXN0bWVudCBvZiB0aGUgcmV0dXJuZWQgY2h1bmsgdG8gbWVldCBhbGlnbm1lbnQKKyAgcmVxdWlyZW1lbnRzIChlc3BlY2lhbGx5IGluIG1lbWFsaWduKS4gIFRoZXJlIGlzIGFsc28gZW5vdWdoIHNwYWNlCisgIGFsbG9jYXRlZCB0byBob2xkIGEgZmFrZSBuZXh0IGNodW5rIG9mIHNpemUgU0laRV9UX1NJWkUgdG8gbWFpbnRhaW4KKyAgdGhlIFBJTlVTRSBiaXQgc28gZnJlZXMgY2FuIGJlIGNoZWNrZWQuCisqLworCisvKiBNYWxsb2MgdXNpbmcgbW1hcCAqLworc3RhdGljIHZvaWQqIG1tYXBfYWxsb2MobXN0YXRlIG0sIHNpemVfdCBuYikgeworICBzaXplX3QgbW1zaXplID0gbW1hcF9hbGlnbihuYiArIFNJWF9TSVpFX1RfU0laRVMgKyBDSFVOS19BTElHTl9NQVNLKTsKKyAgaWYgKG1tc2l6ZSA+IG5iKSB7ICAgICAvKiBDaGVjayBmb3Igd3JhcCBhcm91bmQgMCAqLworICAgIGNoYXIqIG1tID0gKGNoYXIqKShDQUxMX0RJUkVDVF9NTUFQKG1tc2l6ZSkpOworICAgIGlmIChtbSAhPSBDTUZBSUwpIHsKKyAgICAgIHNpemVfdCBvZmZzZXQgPSBhbGlnbl9vZmZzZXQoY2h1bmsybWVtKG1tKSk7CisgICAgICBzaXplX3QgcHNpemUgPSBtbXNpemUgLSBvZmZzZXQgLSBNTUFQX0ZPT1RfUEFEOworICAgICAgbWNodW5rcHRyIHAgPSAobWNodW5rcHRyKShtbSArIG9mZnNldCk7CisgICAgICBwLT5wcmV2X2Zvb3QgPSBvZmZzZXQgfCBJU19NTUFQUEVEX0JJVDsKKyAgICAgIChwKS0+aGVhZCA9IChwc2l6ZXxDSU5VU0VfQklUKTsKKyAgICAgIG1hcmtfaW51c2VfZm9vdChtLCBwLCBwc2l6ZSk7CisgICAgICBjaHVua19wbHVzX29mZnNldChwLCBwc2l6ZSktPmhlYWQgPSBGRU5DRVBPU1RfSEVBRDsKKyAgICAgIGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplK1NJWkVfVF9TSVpFKS0+aGVhZCA9IDA7CisKKyAgICAgIGlmIChtbSA8IG0tPmxlYXN0X2FkZHIpCisJbS0+bGVhc3RfYWRkciA9IG1tOworICAgICAgaWYgKChtLT5mb290cHJpbnQgKz0gbW1zaXplKSA+IG0tPm1heF9mb290cHJpbnQpCisJbS0+bWF4X2Zvb3RwcmludCA9IG0tPmZvb3RwcmludDsKKyAgICAgIGFzc2VydChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpOworICAgICAgY2hlY2tfbW1hcHBlZF9jaHVuayhtLCBwKTsKKyAgICAgIHJldHVybiBjaHVuazJtZW0ocCk7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisvKiBSZWFsbG9jIHVzaW5nIG1tYXAgKi8KK3N0YXRpYyBtY2h1bmtwdHIgbW1hcF9yZXNpemUobXN0YXRlIG0sIG1jaHVua3B0ciBvbGRwLCBzaXplX3QgbmIpIHsKKyAgc2l6ZV90IG9sZHNpemUgPSBjaHVua3NpemUob2xkcCk7CisgIGlmIChpc19zbWFsbChuYikpIC8qIENhbid0IHNocmluayBtbWFwIHJlZ2lvbnMgYmVsb3cgc21hbGwgc2l6ZSAqLworICAgIHJldHVybiAwOworICAvKiBLZWVwIG9sZCBjaHVuayBpZiBiaWcgZW5vdWdoIGJ1dCBub3QgdG9vIGJpZyAqLworICBpZiAob2xkc2l6ZSA+PSBuYiArIFNJWkVfVF9TSVpFICYmCisgICAgICAob2xkc2l6ZSAtIG5iKSA8PSAobXBhcmFtcy5ncmFudWxhcml0eSA8PCAxKSkKKyAgICByZXR1cm4gb2xkcDsKKyAgZWxzZSB7CisgICAgc2l6ZV90IG9mZnNldCA9IG9sZHAtPnByZXZfZm9vdCAmIH5JU19NTUFQUEVEX0JJVDsKKyAgICBzaXplX3Qgb2xkbW1zaXplID0gb2xkc2l6ZSArIG9mZnNldCArIE1NQVBfRk9PVF9QQUQ7CisgICAgc2l6ZV90IG5ld21tc2l6ZSA9IG1tYXBfYWxpZ24obmIgKyBTSVhfU0laRV9UX1NJWkVTICsgQ0hVTktfQUxJR05fTUFTSyk7CisgICAgY2hhciogY3AgPSAoY2hhciopQ0FMTF9NUkVNQVAoKGNoYXIqKW9sZHAgLSBvZmZzZXQsCisJCQkJICBvbGRtbXNpemUsIG5ld21tc2l6ZSwgMSk7CisgICAgaWYgKGNwICE9IENNRkFJTCkgeworICAgICAgbWNodW5rcHRyIG5ld3AgPSAobWNodW5rcHRyKShjcCArIG9mZnNldCk7CisgICAgICBzaXplX3QgcHNpemUgPSBuZXdtbXNpemUgLSBvZmZzZXQgLSBNTUFQX0ZPT1RfUEFEOworICAgICAgbmV3cC0+aGVhZCA9IChwc2l6ZXxDSU5VU0VfQklUKTsKKyAgICAgIG1hcmtfaW51c2VfZm9vdChtLCBuZXdwLCBwc2l6ZSk7CisgICAgICBjaHVua19wbHVzX29mZnNldChuZXdwLCBwc2l6ZSktPmhlYWQgPSBGRU5DRVBPU1RfSEVBRDsKKyAgICAgIGNodW5rX3BsdXNfb2Zmc2V0KG5ld3AsIHBzaXplK1NJWkVfVF9TSVpFKS0+aGVhZCA9IDA7CisKKyAgICAgIGlmIChjcCA8IG0tPmxlYXN0X2FkZHIpCisJbS0+bGVhc3RfYWRkciA9IGNwOworICAgICAgaWYgKChtLT5mb290cHJpbnQgKz0gbmV3bW1zaXplIC0gb2xkbW1zaXplKSA+IG0tPm1heF9mb290cHJpbnQpCisJbS0+bWF4X2Zvb3RwcmludCA9IG0tPmZvb3RwcmludDsKKyAgICAgIGNoZWNrX21tYXBwZWRfY2h1bmsobSwgbmV3cCk7CisgICAgICByZXR1cm4gbmV3cDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1zcGFjZSBtYW5hZ2VtZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEluaXRpYWxpemUgdG9wIGNodW5rIGFuZCBpdHMgc2l6ZSAqLworc3RhdGljIHZvaWQgaW5pdF90b3AobXN0YXRlIG0sIG1jaHVua3B0ciBwLCBzaXplX3QgcHNpemUpIHsKKyAgLyogRW5zdXJlIGFsaWdubWVudCAqLworICBzaXplX3Qgb2Zmc2V0ID0gYWxpZ25fb2Zmc2V0KGNodW5rMm1lbShwKSk7CisgIHAgPSAobWNodW5rcHRyKSgoY2hhciopcCArIG9mZnNldCk7CisgIHBzaXplIC09IG9mZnNldDsKKworICBtLT50b3AgPSBwOworICBtLT50b3BzaXplID0gcHNpemU7CisgIHAtPmhlYWQgPSBwc2l6ZSB8IFBJTlVTRV9CSVQ7CisgIC8qIHNldCBzaXplIG9mIGZha2UgdHJhaWxpbmcgY2h1bmsgaG9sZGluZyBvdmVyaGVhZCBzcGFjZSBvbmx5IG9uY2UgKi8KKyAgY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUpLT5oZWFkID0gVE9QX0ZPT1RfU0laRTsKKyAgbS0+dHJpbV9jaGVjayA9IG1wYXJhbXMudHJpbV90aHJlc2hvbGQ7IC8qIHJlc2V0IG9uIGVhY2ggdXBkYXRlICovCit9CisKKy8qIEluaXRpYWxpemUgYmlucyBmb3IgYSBuZXcgbXN0YXRlIHRoYXQgaXMgb3RoZXJ3aXNlIHplcm9lZCBvdXQgKi8KK3N0YXRpYyB2b2lkIGluaXRfYmlucyhtc3RhdGUgbSkgeworICAvKiBFc3RhYmxpc2ggY2lyY3VsYXIgbGlua3MgZm9yIHNtYWxsYmlucyAqLworICBiaW5kZXhfdCBpOworICBmb3IgKGkgPSAwOyBpIDwgTlNNQUxMQklOUzsgKytpKSB7CisgICAgc2JpbnB0ciBiaW4gPSBzbWFsbGJpbl9hdChtLGkpOworICAgIGJpbi0+ZmQgPSBiaW4tPmJrID0gYmluOworICB9Cit9CisKKyNpZiBQUk9DRUVEX09OX0VSUk9SCisKKy8qIGRlZmF1bHQgY29ycnVwdGlvbiBhY3Rpb24gKi8KK3N0YXRpYyB2b2lkIHJlc2V0X29uX2Vycm9yKG1zdGF0ZSBtKSB7CisgIGludCBpOworICArK21hbGxvY19jb3JydXB0aW9uX2Vycm9yX2NvdW50OworICAvKiBSZWluaXRpYWxpemUgZmllbGRzIHRvIGZvcmdldCBhYm91dCBhbGwgbWVtb3J5ICovCisgIG0tPnNtYWxsYmlucyA9IG0tPnRyZWViaW5zID0gMDsKKyAgbS0+ZHZzaXplID0gbS0+dG9wc2l6ZSA9IDA7CisgIG0tPnNlZy5iYXNlID0gMDsKKyAgbS0+c2VnLnNpemUgPSAwOworICBtLT5zZWcubmV4dCA9IDA7CisgIG0tPnRvcCA9IG0tPmR2ID0gMDsKKyAgZm9yIChpID0gMDsgaSA8IE5UUkVFQklOUzsgKytpKQorICAgICp0cmVlYmluX2F0KG0sIGkpID0gMDsKKyAgaW5pdF9iaW5zKG0pOworfQorI2VuZGlmIC8qIFBST0NFRURfT05fRVJST1IgKi8KKworLyogQWxsb2NhdGUgY2h1bmsgYW5kIHByZXBlbmQgcmVtYWluZGVyIHdpdGggY2h1bmsgaW4gc3VjY2Vzc29yIGJhc2UuICovCitzdGF0aWMgdm9pZCogcHJlcGVuZF9hbGxvYyhtc3RhdGUgbSwgY2hhciogbmV3YmFzZSwgY2hhciogb2xkYmFzZSwKKwkJCSAgIHNpemVfdCBuYikgeworICBtY2h1bmtwdHIgcCA9IGFsaWduX2FzX2NodW5rKG5ld2Jhc2UpOworICBtY2h1bmtwdHIgb2xkZmlyc3QgPSBhbGlnbl9hc19jaHVuayhvbGRiYXNlKTsKKyAgc2l6ZV90IHBzaXplID0gKGNoYXIqKW9sZGZpcnN0IC0gKGNoYXIqKXA7CisgIG1jaHVua3B0ciBxID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICBzaXplX3QgcXNpemUgPSBwc2l6ZSAtIG5iOworICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHAsIG5iKTsKKworICBhc3NlcnQoKGNoYXIqKW9sZGZpcnN0ID4gKGNoYXIqKXEpOworICBhc3NlcnQocGludXNlKG9sZGZpcnN0KSk7CisgIGFzc2VydChxc2l6ZSA+PSBNSU5fQ0hVTktfU0laRSk7CisKKyAgLyogY29uc29saWRhdGUgcmVtYWluZGVyIHdpdGggZmlyc3QgY2h1bmsgb2Ygb2xkIGJhc2UgKi8KKyAgaWYgKG9sZGZpcnN0ID09IG0tPnRvcCkgeworICAgIHNpemVfdCB0c2l6ZSA9IG0tPnRvcHNpemUgKz0gcXNpemU7CisgICAgbS0+dG9wID0gcTsKKyAgICBxLT5oZWFkID0gdHNpemUgfCBQSU5VU0VfQklUOworICAgIGNoZWNrX3RvcF9jaHVuayhtLCBxKTsKKyAgfQorICBlbHNlIGlmIChvbGRmaXJzdCA9PSBtLT5kdikgeworICAgIHNpemVfdCBkc2l6ZSA9IG0tPmR2c2l6ZSArPSBxc2l6ZTsKKyAgICBtLT5kdiA9IHE7CisgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHEsIGRzaXplKTsKKyAgfQorICBlbHNlIHsKKyAgICBpZiAoIWNpbnVzZShvbGRmaXJzdCkpIHsKKyAgICAgIHNpemVfdCBuc2l6ZSA9IGNodW5rc2l6ZShvbGRmaXJzdCk7CisgICAgICB1bmxpbmtfY2h1bmsobSwgb2xkZmlyc3QsIG5zaXplKTsKKyAgICAgIG9sZGZpcnN0ID0gY2h1bmtfcGx1c19vZmZzZXQob2xkZmlyc3QsIG5zaXplKTsKKyAgICAgIHFzaXplICs9IG5zaXplOworICAgIH0KKyAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShxLCBxc2l6ZSwgb2xkZmlyc3QpOworICAgIGluc2VydF9jaHVuayhtLCBxLCBxc2l6ZSk7CisgICAgY2hlY2tfZnJlZV9jaHVuayhtLCBxKTsKKyAgfQorCisgIGNoZWNrX21hbGxvY2VkX2NodW5rKG0sIGNodW5rMm1lbShwKSwgbmIpOworICByZXR1cm4gY2h1bmsybWVtKHApOworfQorCisvKiBBZGQgYSBzZWdtZW50IHRvIGhvbGQgYSBuZXcgbm9uY29udGlndW91cyByZWdpb24gKi8KK3N0YXRpYyB2b2lkIGFkZF9zZWdtZW50KG1zdGF0ZSBtLCBjaGFyKiB0YmFzZSwgc2l6ZV90IHRzaXplLCBmbGFnX3QgbW1hcHBlZCkgeworICAvKiBEZXRlcm1pbmUgbG9jYXRpb25zIGFuZCBzaXplcyBvZiBzZWdtZW50LCBmZW5jZXBvc3RzLCBvbGQgdG9wICovCisgIGNoYXIqIG9sZF90b3AgPSAoY2hhciopbS0+dG9wOworICBtc2VnbWVudHB0ciBvbGRzcCA9IHNlZ21lbnRfaG9sZGluZyhtLCBvbGRfdG9wKTsKKyAgY2hhciogb2xkX2VuZCA9IG9sZHNwLT5iYXNlICsgb2xkc3AtPnNpemU7CisgIHNpemVfdCBzc2l6ZSA9IHBhZF9yZXF1ZXN0KHNpemVvZihzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQpKTsKKyAgY2hhciogcmF3c3AgPSBvbGRfZW5kIC0gKHNzaXplICsgRk9VUl9TSVpFX1RfU0laRVMgKyBDSFVOS19BTElHTl9NQVNLKTsKKyAgc2l6ZV90IG9mZnNldCA9IGFsaWduX29mZnNldChjaHVuazJtZW0ocmF3c3ApKTsKKyAgY2hhciogYXNwID0gcmF3c3AgKyBvZmZzZXQ7CisgIGNoYXIqIGNzcCA9IChhc3AgPCAob2xkX3RvcCArIE1JTl9DSFVOS19TSVpFKSk/IG9sZF90b3AgOiBhc3A7CisgIG1jaHVua3B0ciBzcCA9IChtY2h1bmtwdHIpY3NwOworICBtc2VnbWVudHB0ciBzcyA9IChtc2VnbWVudHB0cikoY2h1bmsybWVtKHNwKSk7CisgIG1jaHVua3B0ciB0bmV4dCA9IGNodW5rX3BsdXNfb2Zmc2V0KHNwLCBzc2l6ZSk7CisgIG1jaHVua3B0ciBwID0gdG5leHQ7CisgIGludCBuZmVuY2VzID0gMDsKKworICAvKiByZXNldCB0b3AgdG8gbmV3IHNwYWNlICovCisgIGluaXRfdG9wKG0sIChtY2h1bmtwdHIpdGJhc2UsIHRzaXplIC0gVE9QX0ZPT1RfU0laRSk7CisKKyAgLyogU2V0IHVwIHNlZ21lbnQgcmVjb3JkICovCisgIGFzc2VydChpc19hbGlnbmVkKHNzKSk7CisgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgc3AsIHNzaXplKTsKKyAgKnNzID0gbS0+c2VnOyAvKiBQdXNoIGN1cnJlbnQgcmVjb3JkICovCisgIG0tPnNlZy5iYXNlID0gdGJhc2U7CisgIG0tPnNlZy5zaXplID0gdHNpemU7CisgIG0tPnNlZy5zZmxhZ3MgPSBtbWFwcGVkOworICBtLT5zZWcubmV4dCA9IHNzOworCisgIC8qIEluc2VydCB0cmFpbGluZyBmZW5jZXBvc3RzICovCisgIGZvciAoOzspIHsKKyAgICBtY2h1bmtwdHIgbmV4dHAgPSBjaHVua19wbHVzX29mZnNldChwLCBTSVpFX1RfU0laRSk7CisgICAgcC0+aGVhZCA9IEZFTkNFUE9TVF9IRUFEOworICAgICsrbmZlbmNlczsKKyAgICBpZiAoKGNoYXIqKSgmKG5leHRwLT5oZWFkKSkgPCBvbGRfZW5kKQorICAgICAgcCA9IG5leHRwOworICAgIGVsc2UKKyAgICAgIGJyZWFrOworICB9CisgIGFzc2VydChuZmVuY2VzID49IDIpOworCisgIC8qIEluc2VydCB0aGUgcmVzdCBvZiBvbGQgdG9wIGludG8gYSBiaW4gYXMgYW4gb3JkaW5hcnkgZnJlZSBjaHVuayAqLworICBpZiAoY3NwICE9IG9sZF90b3ApIHsKKyAgICBtY2h1bmtwdHIgcSA9IChtY2h1bmtwdHIpb2xkX3RvcDsKKyAgICBzaXplX3QgcHNpemUgPSBjc3AgLSBvbGRfdG9wOworICAgIG1jaHVua3B0ciB0biA9IGNodW5rX3BsdXNfb2Zmc2V0KHEsIHBzaXplKTsKKyAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShxLCBwc2l6ZSwgdG4pOworICAgIGluc2VydF9jaHVuayhtLCBxLCBwc2l6ZSk7CisgIH0KKworICBjaGVja190b3BfY2h1bmsobSwgbS0+dG9wKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3lzdGVtIGFsbG9jYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogR2V0IG1lbW9yeSBmcm9tIHN5c3RlbSB1c2luZyBNT1JFQ09SRSBvciBNTUFQICovCitzdGF0aWMgdm9pZCogc3lzX2FsbG9jKG1zdGF0ZSBtLCBzaXplX3QgbmIpIHsKKyAgY2hhciogdGJhc2UgPSBDTUZBSUw7CisgIHNpemVfdCB0c2l6ZSA9IDA7CisgIGZsYWdfdCBtbWFwX2ZsYWcgPSAwOworCisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworCisgIC8qIERpcmVjdGx5IG1hcCBsYXJnZSBjaHVua3MgKi8KKyAgaWYgKHVzZV9tbWFwKG0pICYmIG5iID49IG1wYXJhbXMubW1hcF90aHJlc2hvbGQpIHsKKyAgICB2b2lkKiBtZW0gPSBtbWFwX2FsbG9jKG0sIG5iKTsKKyAgICBpZiAobWVtICE9IDApCisgICAgICByZXR1cm4gbWVtOworICB9CisKKyAgLyoKKyAgICBUcnkgZ2V0dGluZyBtZW1vcnkgaW4gYW55IG9mIHRocmVlIHdheXMgKGluIG1vc3QtcHJlZmVycmVkIHRvCisgICAgbGVhc3QtcHJlZmVycmVkIG9yZGVyKToKKyAgICAxLiBBIGNhbGwgdG8gTU9SRUNPUkUgdGhhdCBjYW4gbm9ybWFsbHkgY29udGlndW91c2x5IGV4dGVuZCBtZW1vcnkuCisgICAgICAgKGRpc2FibGVkIGlmIG5vdCBNT1JFQ09SRV9DT05USUdVT1VTIG9yIG5vdCBIQVZFX01PUkVDT1JFIG9yCisgICAgICAgb3IgbWFpbiBzcGFjZSBpcyBtbWFwcGVkIG9yIGEgcHJldmlvdXMgY29udGlndW91cyBjYWxsIGZhaWxlZCkKKyAgICAyLiBBIGNhbGwgdG8gTU1BUCBuZXcgc3BhY2UgKGRpc2FibGVkIGlmIG5vdCBIQVZFX01NQVApLgorICAgICAgIE5vdGUgdGhhdCB1bmRlciB0aGUgZGVmYXVsdCBzZXR0aW5ncywgaWYgTU9SRUNPUkUgaXMgdW5hYmxlIHRvCisgICAgICAgZnVsZmlsbCBhIHJlcXVlc3QsIGFuZCBIQVZFX01NQVAgaXMgdHJ1ZSwgdGhlbiBtbWFwIGlzCisgICAgICAgdXNlZCBhcyBhIG5vbmNvbnRpZ3VvdXMgc3lzdGVtIGFsbG9jYXRvci4gVGhpcyBpcyBhIHVzZWZ1bCBiYWNrdXAKKyAgICAgICBzdHJhdGVneSBmb3Igc3lzdGVtcyB3aXRoIGhvbGVzIGluIGFkZHJlc3Mgc3BhY2VzIC0tIGluIHRoaXMgY2FzZQorICAgICAgIHNicmsgY2Fubm90IGNvbnRpZ3VvdXNseSBleHBhbmQgdGhlIGhlYXAsIGJ1dCBtbWFwIG1heSBiZSBhYmxlIHRvCisgICAgICAgZmluZCBzcGFjZS4KKyAgICAzLiBBIGNhbGwgdG8gTU9SRUNPUkUgdGhhdCBjYW5ub3QgdXN1YWxseSBjb250aWd1b3VzbHkgZXh0ZW5kIG1lbW9yeS4KKyAgICAgICAoZGlzYWJsZWQgaWYgbm90IEhBVkVfTU9SRUNPUkUpCisKKyAgIEluIGFsbCBjYXNlcywgd2UgbmVlZCB0byByZXF1ZXN0IGVub3VnaCBieXRlcyBmcm9tIHN5c3RlbSB0byBlbnN1cmUKKyAgIHdlIGNhbiBtYWxsb2MgbmIgYnl0ZXMgdXBvbiBzdWNjZXNzLCBzbyBwYWQgd2l0aCBlbm91Z2ggc3BhY2UgZm9yCisgICB0b3BfZm9vdCwgcGx1cyBhbGlnbm1lbnQtcGFkIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBsb3NlIGJ5dGVzIGlmCisgICBub3Qgb24gYm91bmRhcnksIGFuZCByb3VuZCB0aGlzIHVwIHRvIGEgZ3JhbnVsYXJpdHkgdW5pdC4KKyAgKi8KKworICBpZiAoTU9SRUNPUkVfQ09OVElHVU9VUyAmJiAhdXNlX25vbmNvbnRpZ3VvdXMobSkpIHsKKyAgICBjaGFyKiBiciA9IENNRkFJTDsKKyAgICBtc2VnbWVudHB0ciBzcyA9IChtLT50b3AgPT0gMCk/IDAgOiBzZWdtZW50X2hvbGRpbmcobSwgKGNoYXIqKW0tPnRvcCk7CisgICAgc2l6ZV90IGFzaXplID0gMDsKKyAgICBBQ1FVSVJFX01BTExPQ19HTE9CQUxfTE9DSygpOworCisgICAgaWYgKHNzID09IDApIHsgIC8qIEZpcnN0IHRpbWUgdGhyb3VnaCBvciByZWNvdmVyeSAqLworICAgICAgY2hhciogYmFzZSA9IChjaGFyKilDQUxMX01PUkVDT1JFKDApOworICAgICAgaWYgKGJhc2UgIT0gQ01GQUlMKSB7CisJYXNpemUgPSBncmFudWxhcml0eV9hbGlnbihuYiArIFNZU19BTExPQ19QQURESU5HKTsKKwkvKiBBZGp1c3QgdG8gZW5kIG9uIGEgcGFnZSBib3VuZGFyeSAqLworCWlmICghaXNfcGFnZV9hbGlnbmVkKGJhc2UpKQorCSAgYXNpemUgKz0gKHBhZ2VfYWxpZ24oKHNpemVfdCliYXNlKSAtIChzaXplX3QpYmFzZSk7CisJLyogQ2FuJ3QgY2FsbCBNT1JFQ09SRSBpZiBzaXplIGlzIG5lZ2F0aXZlIHdoZW4gdHJlYXRlZCBhcyBzaWduZWQgKi8KKwlpZiAoYXNpemUgPCBIQUxGX01BWF9TSVpFX1QgJiYKKwkgICAgKGJyID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKGFzaXplKSkpID09IGJhc2UpIHsKKwkgIHRiYXNlID0gYmFzZTsKKwkgIHRzaXplID0gYXNpemU7CisJfQorICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIFN1YnRyYWN0IG91dCBleGlzdGluZyBhdmFpbGFibGUgdG9wIHNwYWNlIGZyb20gTU9SRUNPUkUgcmVxdWVzdC4gKi8KKyAgICAgIGFzaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24obmIgLSBtLT50b3BzaXplICsgU1lTX0FMTE9DX1BBRERJTkcpOworICAgICAgLyogVXNlIG1lbSBoZXJlIG9ubHkgaWYgaXQgZGlkIGNvbnRpbnVvdXNseSBleHRlbmQgb2xkIHNwYWNlICovCisgICAgICBpZiAoYXNpemUgPCBIQUxGX01BWF9TSVpFX1QgJiYKKwkgIChiciA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRShhc2l6ZSkpKSA9PSBzcy0+YmFzZStzcy0+c2l6ZSkgeworCXRiYXNlID0gYnI7CisJdHNpemUgPSBhc2l6ZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodGJhc2UgPT0gQ01GQUlMKSB7ICAgIC8qIENvcGUgd2l0aCBwYXJ0aWFsIGZhaWx1cmUgKi8KKyAgICAgIGlmIChiciAhPSBDTUZBSUwpIHsgICAgLyogVHJ5IHRvIHVzZS9leHRlbmQgdGhlIHNwYWNlIHdlIGRpZCBnZXQgKi8KKwlpZiAoYXNpemUgPCBIQUxGX01BWF9TSVpFX1QgJiYKKwkgICAgYXNpemUgPCBuYiArIFNZU19BTExPQ19QQURESU5HKSB7CisJICBzaXplX3QgZXNpemUgPSBncmFudWxhcml0eV9hbGlnbihuYiArIFNZU19BTExPQ19QQURESU5HIC0gYXNpemUpOworCSAgaWYgKGVzaXplIDwgSEFMRl9NQVhfU0laRV9UKSB7CisJICAgIGNoYXIqIGVuZCA9IChjaGFyKilDQUxMX01PUkVDT1JFKGVzaXplKTsKKwkgICAgaWYgKGVuZCAhPSBDTUZBSUwpCisJICAgICAgYXNpemUgKz0gZXNpemU7CisJICAgIGVsc2UgeyAgICAgICAgICAgIC8qIENhbid0IHVzZTsgdHJ5IHRvIHJlbGVhc2UgKi8KKwkgICAgICAodm9pZCkgQ0FMTF9NT1JFQ09SRSgtYXNpemUpOworCSAgICAgIGJyID0gQ01GQUlMOworCSAgICB9CisJICB9CisJfQorICAgICAgfQorICAgICAgaWYgKGJyICE9IENNRkFJTCkgeyAgICAvKiBVc2UgdGhlIHNwYWNlIHdlIGRpZCBnZXQgKi8KKwl0YmFzZSA9IGJyOworCXRzaXplID0gYXNpemU7CisgICAgICB9CisgICAgICBlbHNlCisJZGlzYWJsZV9jb250aWd1b3VzKG0pOyAvKiBEb24ndCB0cnkgY29udGlndW91cyBwYXRoIGluIHRoZSBmdXR1cmUgKi8KKyAgICB9CisKKyAgICBSRUxFQVNFX01BTExPQ19HTE9CQUxfTE9DSygpOworICB9CisKKyAgaWYgKEhBVkVfTU1BUCAmJiB0YmFzZSA9PSBDTUZBSUwpIHsgIC8qIFRyeSBNTUFQICovCisgICAgc2l6ZV90IHJzaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24obmIgKyBTWVNfQUxMT0NfUEFERElORyk7CisgICAgaWYgKHJzaXplID4gbmIpIHsgLyogRmFpbCBpZiB3cmFwcyBhcm91bmQgemVybyAqLworICAgICAgY2hhciogbXAgPSAoY2hhciopKENBTExfTU1BUChyc2l6ZSkpOworICAgICAgaWYgKG1wICE9IENNRkFJTCkgeworCXRiYXNlID0gbXA7CisJdHNpemUgPSByc2l6ZTsKKwltbWFwX2ZsYWcgPSBJU19NTUFQUEVEX0JJVDsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZiAoSEFWRV9NT1JFQ09SRSAmJiB0YmFzZSA9PSBDTUZBSUwpIHsgLyogVHJ5IG5vbmNvbnRpZ3VvdXMgTU9SRUNPUkUgKi8KKyAgICBzaXplX3QgYXNpemUgPSBncmFudWxhcml0eV9hbGlnbihuYiArIFNZU19BTExPQ19QQURESU5HKTsKKyAgICBpZiAoYXNpemUgPCBIQUxGX01BWF9TSVpFX1QpIHsKKyAgICAgIGNoYXIqIGJyID0gQ01GQUlMOworICAgICAgY2hhciogZW5kID0gQ01GQUlMOworICAgICAgQUNRVUlSRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsKKyAgICAgIGJyID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKGFzaXplKSk7CisgICAgICBlbmQgPSAoY2hhciopKENBTExfTU9SRUNPUkUoMCkpOworICAgICAgUkVMRUFTRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsKKyAgICAgIGlmIChiciAhPSBDTUZBSUwgJiYgZW5kICE9IENNRkFJTCAmJiBiciA8IGVuZCkgeworCXNpemVfdCBzc2l6ZSA9IGVuZCAtIGJyOworCWlmIChzc2l6ZSA+IG5iICsgVE9QX0ZPT1RfU0laRSkgeworCSAgdGJhc2UgPSBicjsKKwkgIHRzaXplID0gc3NpemU7CisJfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmICh0YmFzZSAhPSBDTUZBSUwpIHsKKworICAgIGlmICgobS0+Zm9vdHByaW50ICs9IHRzaXplKSA+IG0tPm1heF9mb290cHJpbnQpCisgICAgICBtLT5tYXhfZm9vdHByaW50ID0gbS0+Zm9vdHByaW50OworCisgICAgaWYgKCFpc19pbml0aWFsaXplZChtKSkgeyAvKiBmaXJzdC10aW1lIGluaXRpYWxpemF0aW9uICovCisgICAgICBtLT5zZWcuYmFzZSA9IG0tPmxlYXN0X2FkZHIgPSB0YmFzZTsKKyAgICAgIG0tPnNlZy5zaXplID0gdHNpemU7CisgICAgICBtLT5zZWcuc2ZsYWdzID0gbW1hcF9mbGFnOworICAgICAgbS0+bWFnaWMgPSBtcGFyYW1zLm1hZ2ljOworICAgICAgbS0+cmVsZWFzZV9jaGVja3MgPSBNQVhfUkVMRUFTRV9DSEVDS19SQVRFOworICAgICAgaW5pdF9iaW5zKG0pOworI2lmICFPTkxZX01TUEFDRVMKKyAgICAgIGlmIChpc19nbG9iYWwobSkpCisJaW5pdF90b3AobSwgKG1jaHVua3B0cil0YmFzZSwgdHNpemUgLSBUT1BfRk9PVF9TSVpFKTsKKyAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgeworCS8qIE9mZnNldCB0b3AgYnkgZW1iZWRkZWQgbWFsbG9jX3N0YXRlICovCisJbWNodW5rcHRyIG1uID0gbmV4dF9jaHVuayhtZW0yY2h1bmsobSkpOworCWluaXRfdG9wKG0sIG1uLCAoc2l6ZV90KSgodGJhc2UgKyB0c2l6ZSkgLSAoY2hhciopbW4pIC1UT1BfRk9PVF9TSVpFKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBlbHNlIHsKKyAgICAgIC8qIFRyeSB0byBtZXJnZSB3aXRoIGFuIGV4aXN0aW5nIHNlZ21lbnQgKi8KKyAgICAgIG1zZWdtZW50cHRyIHNwID0gJm0tPnNlZzsKKyAgICAgIC8qIE9ubHkgY29uc2lkZXIgbW9zdCByZWNlbnQgc2VnbWVudCBpZiB0cmF2ZXJzYWwgc3VwcHJlc3NlZCAqLworICAgICAgd2hpbGUgKHNwICE9IDAgJiYgdGJhc2UgIT0gc3AtPmJhc2UgKyBzcC0+c2l6ZSkKKwlzcCA9IChOT19TRUdNRU5UX1RSQVZFUlNBTCkgPyAwIDogc3AtPm5leHQ7CisgICAgICBpZiAoc3AgIT0gMCAmJgorCSAgIWlzX2V4dGVybl9zZWdtZW50KHNwKSAmJgorCSAgKHNwLT5zZmxhZ3MgJiBJU19NTUFQUEVEX0JJVCkgPT0gbW1hcF9mbGFnICYmCisJICBzZWdtZW50X2hvbGRzKHNwLCBtLT50b3ApKSB7IC8qIGFwcGVuZCAqLworCXNwLT5zaXplICs9IHRzaXplOworCWluaXRfdG9wKG0sIG0tPnRvcCwgbS0+dG9wc2l6ZSArIHRzaXplKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCWlmICh0YmFzZSA8IG0tPmxlYXN0X2FkZHIpCisJICBtLT5sZWFzdF9hZGRyID0gdGJhc2U7CisJc3AgPSAmbS0+c2VnOworCXdoaWxlIChzcCAhPSAwICYmIHNwLT5iYXNlICE9IHRiYXNlICsgdHNpemUpCisJICBzcCA9IChOT19TRUdNRU5UX1RSQVZFUlNBTCkgPyAwIDogc3AtPm5leHQ7CisJaWYgKHNwICE9IDAgJiYKKwkgICAgIWlzX2V4dGVybl9zZWdtZW50KHNwKSAmJgorCSAgICAoc3AtPnNmbGFncyAmIElTX01NQVBQRURfQklUKSA9PSBtbWFwX2ZsYWcpIHsKKwkgIGNoYXIqIG9sZGJhc2UgPSBzcC0+YmFzZTsKKwkgIHNwLT5iYXNlID0gdGJhc2U7CisJICBzcC0+c2l6ZSArPSB0c2l6ZTsKKwkgIHJldHVybiBwcmVwZW5kX2FsbG9jKG0sIHRiYXNlLCBvbGRiYXNlLCBuYik7CisJfQorCWVsc2UKKwkgIGFkZF9zZWdtZW50KG0sIHRiYXNlLCB0c2l6ZSwgbW1hcF9mbGFnKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobmIgPCBtLT50b3BzaXplKSB7IC8qIEFsbG9jYXRlIGZyb20gbmV3IG9yIGV4dGVuZGVkIHRvcCBzcGFjZSAqLworICAgICAgc2l6ZV90IHJzaXplID0gbS0+dG9wc2l6ZSAtPSBuYjsKKyAgICAgIG1jaHVua3B0ciBwID0gbS0+dG9wOworICAgICAgbWNodW5rcHRyIHIgPSBtLT50b3AgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisgICAgICByLT5oZWFkID0gcnNpemUgfCBQSU5VU0VfQklUOworICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBwLCBuYik7CisgICAgICBjaGVja190b3BfY2h1bmsobSwgbS0+dG9wKTsKKyAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKG0sIGNodW5rMm1lbShwKSwgbmIpOworICAgICAgcmV0dXJuIGNodW5rMm1lbShwKTsKKyAgICB9CisgIH0KKworICBNQUxMT0NfRkFJTFVSRV9BQ1RJT047CisgIHJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgc3lzdGVtIGRlYWxsb2NhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBVbm1hcCBhbmQgdW5saW5rIGFueSBtbWFwcGVkIHNlZ21lbnRzIHRoYXQgZG9uJ3QgY29udGFpbiB1c2VkIGNodW5rcyAqLworc3RhdGljIHNpemVfdCByZWxlYXNlX3VudXNlZF9zZWdtZW50cyhtc3RhdGUgbSkgeworICBzaXplX3QgcmVsZWFzZWQgPSAwOworICBpbnQgbnNlZ3MgPSAwOworICBtc2VnbWVudHB0ciBwcmVkID0gJm0tPnNlZzsKKyAgbXNlZ21lbnRwdHIgc3AgPSBwcmVkLT5uZXh0OworICB3aGlsZSAoc3AgIT0gMCkgeworICAgIGNoYXIqIGJhc2UgPSBzcC0+YmFzZTsKKyAgICBzaXplX3Qgc2l6ZSA9IHNwLT5zaXplOworICAgIG1zZWdtZW50cHRyIG5leHQgPSBzcC0+bmV4dDsKKyAgICArK25zZWdzOworICAgIGlmIChpc19tbWFwcGVkX3NlZ21lbnQoc3ApICYmICFpc19leHRlcm5fc2VnbWVudChzcCkpIHsKKyAgICAgIG1jaHVua3B0ciBwID0gYWxpZ25fYXNfY2h1bmsoYmFzZSk7CisgICAgICBzaXplX3QgcHNpemUgPSBjaHVua3NpemUocCk7CisgICAgICAvKiBDYW4gdW5tYXAgaWYgZmlyc3QgY2h1bmsgaG9sZHMgZW50aXJlIHNlZ21lbnQgYW5kIG5vdCBwaW5uZWQgKi8KKyAgICAgIGlmICghY2ludXNlKHApICYmIChjaGFyKilwICsgcHNpemUgPj0gYmFzZSArIHNpemUgLSBUT1BfRk9PVF9TSVpFKSB7CisJdGNodW5rcHRyIHRwID0gKHRjaHVua3B0cilwOworCWFzc2VydChzZWdtZW50X2hvbGRzKHNwLCAoY2hhciopc3ApKTsKKwlpZiAocCA9PSBtLT5kdikgeworCSAgbS0+ZHYgPSAwOworCSAgbS0+ZHZzaXplID0gMDsKKwl9CisJZWxzZSB7CisJICB1bmxpbmtfbGFyZ2VfY2h1bmsobSwgdHApOworCX0KKwlpZiAoQ0FMTF9NVU5NQVAoYmFzZSwgc2l6ZSkgPT0gMCkgeworCSAgcmVsZWFzZWQgKz0gc2l6ZTsKKwkgIG0tPmZvb3RwcmludCAtPSBzaXplOworCSAgLyogdW5saW5rIG9ic29sZXRlZCByZWNvcmQgKi8KKwkgIHNwID0gcHJlZDsKKwkgIHNwLT5uZXh0ID0gbmV4dDsKKwl9CisJZWxzZSB7IC8qIGJhY2sgb3V0IGlmIGNhbm5vdCB1bm1hcCAqLworCSAgaW5zZXJ0X2xhcmdlX2NodW5rKG0sIHRwLCBwc2l6ZSk7CisJfQorICAgICAgfQorICAgIH0KKyAgICBpZiAoTk9fU0VHTUVOVF9UUkFWRVJTQUwpIC8qIHNjYW4gb25seSBmaXJzdCBzZWdtZW50ICovCisgICAgICBicmVhazsKKyAgICBwcmVkID0gc3A7CisgICAgc3AgPSBuZXh0OworICB9CisgIC8qIFJlc2V0IGNoZWNrIGNvdW50ZXIgKi8KKyAgbS0+cmVsZWFzZV9jaGVja3MgPSAoKG5zZWdzID4gTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURSk/CisJCSAgICAgICBuc2VncyA6IE1BWF9SRUxFQVNFX0NIRUNLX1JBVEUpOworICByZXR1cm4gcmVsZWFzZWQ7Cit9CisKK3N0YXRpYyBpbnQgc3lzX3RyaW0obXN0YXRlIG0sIHNpemVfdCBwYWQpIHsKKyAgc2l6ZV90IHJlbGVhc2VkID0gMDsKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CisgIGlmIChwYWQgPCBNQVhfUkVRVUVTVCAmJiBpc19pbml0aWFsaXplZChtKSkgeworICAgIHBhZCArPSBUT1BfRk9PVF9TSVpFOyAvKiBlbnN1cmUgZW5vdWdoIHJvb20gZm9yIHNlZ21lbnQgb3ZlcmhlYWQgKi8KKworICAgIGlmIChtLT50b3BzaXplID4gcGFkKSB7CisgICAgICAvKiBTaHJpbmsgdG9wIHNwYWNlIGluIGdyYW51bGFyaXR5LXNpemUgdW5pdHMsIGtlZXBpbmcgYXQgbGVhc3Qgb25lICovCisgICAgICBzaXplX3QgdW5pdCA9IG1wYXJhbXMuZ3JhbnVsYXJpdHk7CisgICAgICBzaXplX3QgZXh0cmEgPSAoKG0tPnRvcHNpemUgLSBwYWQgKyAodW5pdCAtIFNJWkVfVF9PTkUpKSAvIHVuaXQgLQorCQkgICAgICBTSVpFX1RfT05FKSAqIHVuaXQ7CisgICAgICBtc2VnbWVudHB0ciBzcCA9IHNlZ21lbnRfaG9sZGluZyhtLCAoY2hhciopbS0+dG9wKTsKKworICAgICAgaWYgKCFpc19leHRlcm5fc2VnbWVudChzcCkpIHsKKwlpZiAoaXNfbW1hcHBlZF9zZWdtZW50KHNwKSkgeworCSAgaWYgKEhBVkVfTU1BUCAmJgorCSAgICAgIHNwLT5zaXplID49IGV4dHJhICYmCisJICAgICAgIWhhc19zZWdtZW50X2xpbmsobSwgc3ApKSB7IC8qIGNhbid0IHNocmluayBpZiBwaW5uZWQgKi8KKwkgICAgc2l6ZV90IG5ld3NpemUgPSBzcC0+c2l6ZSAtIGV4dHJhOworCSAgICAvKiBQcmVmZXIgbXJlbWFwLCBmYWxsIGJhY2sgdG8gbXVubWFwICovCisJICAgIGlmICgoQ0FMTF9NUkVNQVAoc3AtPmJhc2UsIHNwLT5zaXplLCBuZXdzaXplLCAwKSAhPSBNRkFJTCkgfHwKKwkJKENBTExfTVVOTUFQKHNwLT5iYXNlICsgbmV3c2l6ZSwgZXh0cmEpID09IDApKSB7CisJICAgICAgcmVsZWFzZWQgPSBleHRyYTsKKwkgICAgfQorCSAgfQorCX0KKwllbHNlIGlmIChIQVZFX01PUkVDT1JFKSB7CisJICBpZiAoZXh0cmEgPj0gSEFMRl9NQVhfU0laRV9UKSAvKiBBdm9pZCB3cmFwcGluZyBuZWdhdGl2ZSAqLworCSAgICBleHRyYSA9IChIQUxGX01BWF9TSVpFX1QpICsgU0laRV9UX09ORSAtIHVuaXQ7CisJICBBQ1FVSVJFX01BTExPQ19HTE9CQUxfTE9DSygpOworCSAgeworCSAgICAvKiBNYWtlIHN1cmUgZW5kIG9mIG1lbW9yeSBpcyB3aGVyZSB3ZSBsYXN0IHNldCBpdC4gKi8KKwkgICAgY2hhciogb2xkX2JyID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKDApKTsKKwkgICAgaWYgKG9sZF9iciA9PSBzcC0+YmFzZSArIHNwLT5zaXplKSB7CisJICAgICAgY2hhciogcmVsX2JyID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKC1leHRyYSkpOworCSAgICAgIGNoYXIqIG5ld19iciA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRSgwKSk7CisJICAgICAgaWYgKHJlbF9iciAhPSBDTUZBSUwgJiYgbmV3X2JyIDwgb2xkX2JyKQorCQlyZWxlYXNlZCA9IG9sZF9iciAtIG5ld19icjsKKwkgICAgfQorCSAgfQorCSAgUkVMRUFTRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsKKwl9CisgICAgICB9CisKKyAgICAgIGlmIChyZWxlYXNlZCAhPSAwKSB7CisJc3AtPnNpemUgLT0gcmVsZWFzZWQ7CisJbS0+Zm9vdHByaW50IC09IHJlbGVhc2VkOworCWluaXRfdG9wKG0sIG0tPnRvcCwgbS0+dG9wc2l6ZSAtIHJlbGVhc2VkKTsKKwljaGVja190b3BfY2h1bmsobSwgbS0+dG9wKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBVbm1hcCBhbnkgdW51c2VkIG1tYXBwZWQgc2VnbWVudHMgKi8KKyAgICBpZiAoSEFWRV9NTUFQKQorICAgICAgcmVsZWFzZWQgKz0gcmVsZWFzZV91bnVzZWRfc2VnbWVudHMobSk7CisKKyAgICAvKiBPbiBmYWlsdXJlLCBkaXNhYmxlIGF1dG90cmltIHRvIGF2b2lkIHJlcGVhdGVkIGZhaWxlZCBmdXR1cmUgY2FsbHMgKi8KKyAgICBpZiAocmVsZWFzZWQgPT0gMCAmJiBtLT50b3BzaXplID4gbS0+dHJpbV9jaGVjaykKKyAgICAgIG0tPnRyaW1fY2hlY2sgPSBNQVhfU0laRV9UOworICB9CisKKyAgcmV0dXJuIChyZWxlYXNlZCAhPSAwKT8gMSA6IDA7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtYWxsb2Mgc3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogYWxsb2NhdGUgYSBsYXJnZSByZXF1ZXN0IGZyb20gdGhlIGJlc3QgZml0dGluZyBjaHVuayBpbiBhIHRyZWViaW4gKi8KK3N0YXRpYyB2b2lkKiB0bWFsbG9jX2xhcmdlKG1zdGF0ZSBtLCBzaXplX3QgbmIpIHsKKyAgdGNodW5rcHRyIHYgPSAwOworICBzaXplX3QgcnNpemUgPSAtbmI7IC8qIFVuc2lnbmVkIG5lZ2F0aW9uICovCisgIHRjaHVua3B0ciB0OworICBiaW5kZXhfdCBpZHg7CisgIGNvbXB1dGVfdHJlZV9pbmRleChuYiwgaWR4KTsKKyAgaWYgKCh0ID0gKnRyZWViaW5fYXQobSwgaWR4KSkgIT0gMCkgeworICAgIC8qIFRyYXZlcnNlIHRyZWUgZm9yIHRoaXMgYmluIGxvb2tpbmcgZm9yIG5vZGUgd2l0aCBzaXplID09IG5iICovCisgICAgc2l6ZV90IHNpemViaXRzID0gbmIgPDwgbGVmdHNoaWZ0X2Zvcl90cmVlX2luZGV4KGlkeCk7CisgICAgdGNodW5rcHRyIHJzdCA9IDA7ICAvKiBUaGUgZGVlcGVzdCB1bnRha2VuIHJpZ2h0IHN1YnRyZWUgKi8KKyAgICBmb3IgKDs7KSB7CisgICAgICB0Y2h1bmtwdHIgcnQ7CisgICAgICBzaXplX3QgdHJlbSA9IGNodW5rc2l6ZSh0KSAtIG5iOworICAgICAgaWYgKHRyZW0gPCByc2l6ZSkgeworCXYgPSB0OworCWlmICgocnNpemUgPSB0cmVtKSA9PSAwKQorCSAgYnJlYWs7CisgICAgICB9CisgICAgICBydCA9IHQtPmNoaWxkWzFdOworICAgICAgdCA9IHQtPmNoaWxkWyhzaXplYml0cyA+PiAoU0laRV9UX0JJVFNJWkUtU0laRV9UX09ORSkpICYgMV07CisgICAgICBpZiAocnQgIT0gMCAmJiBydCAhPSB0KQorCXJzdCA9IHJ0OworICAgICAgaWYgKHQgPT0gMCkgeworCXQgPSByc3Q7IC8qIHNldCB0IHRvIGxlYXN0IHN1YnRyZWUgaG9sZGluZyBzaXplcyA+IG5iICovCisJYnJlYWs7CisgICAgICB9CisgICAgICBzaXplYml0cyA8PD0gMTsKKyAgICB9CisgIH0KKyAgaWYgKHQgPT0gMCAmJiB2ID09IDApIHsgLyogc2V0IHQgdG8gcm9vdCBvZiBuZXh0IG5vbi1lbXB0eSB0cmVlYmluICovCisgICAgYmlubWFwX3QgbGVmdGJpdHMgPSBsZWZ0X2JpdHMoaWR4MmJpdChpZHgpKSAmIG0tPnRyZWVtYXA7CisgICAgaWYgKGxlZnRiaXRzICE9IDApIHsKKyAgICAgIGJpbmRleF90IGk7CisgICAgICBiaW5tYXBfdCBsZWFzdGJpdCA9IGxlYXN0X2JpdChsZWZ0Yml0cyk7CisgICAgICBjb21wdXRlX2JpdDJpZHgobGVhc3RiaXQsIGkpOworICAgICAgdCA9ICp0cmVlYmluX2F0KG0sIGkpOworICAgIH0KKyAgfQorCisgIHdoaWxlICh0ICE9IDApIHsgLyogZmluZCBzbWFsbGVzdCBvZiB0cmVlIG9yIHN1YnRyZWUgKi8KKyAgICBzaXplX3QgdHJlbSA9IGNodW5rc2l6ZSh0KSAtIG5iOworICAgIGlmICh0cmVtIDwgcnNpemUpIHsKKyAgICAgIHJzaXplID0gdHJlbTsKKyAgICAgIHYgPSB0OworICAgIH0KKyAgICB0ID0gbGVmdG1vc3RfY2hpbGQodCk7CisgIH0KKworICAvKiAgSWYgZHYgaXMgYSBiZXR0ZXIgZml0LCByZXR1cm4gMCBzbyBtYWxsb2Mgd2lsbCB1c2UgaXQgKi8KKyAgaWYgKHYgIT0gMCAmJiByc2l6ZSA8IChzaXplX3QpKG0tPmR2c2l6ZSAtIG5iKSkgeworICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MobSwgdikpKSB7IC8qIHNwbGl0ICovCisgICAgICBtY2h1bmtwdHIgciA9IGNodW5rX3BsdXNfb2Zmc2V0KHYsIG5iKTsKKyAgICAgIGFzc2VydChjaHVua3NpemUodikgPT0gcnNpemUgKyBuYik7CisgICAgICBpZiAoUlRDSEVDSyhva19uZXh0KHYsIHIpKSkgeworCXVubGlua19sYXJnZV9jaHVuayhtLCB2KTsKKwlpZiAocnNpemUgPCBNSU5fQ0hVTktfU0laRSkKKwkgIHNldF9pbnVzZV9hbmRfcGludXNlKG0sIHYsIChyc2l6ZSArIG5iKSk7CisJZWxzZSB7CisJICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHYsIG5iKTsKKwkgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7CisJICBpbnNlcnRfY2h1bmsobSwgciwgcnNpemUpOworCX0KKwlyZXR1cm4gY2h1bmsybWVtKHYpOworICAgICAgfQorICAgIH0KKyAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihtKTsKKyAgfQorICByZXR1cm4gMDsKK30KKworLyogYWxsb2NhdGUgYSBzbWFsbCByZXF1ZXN0IGZyb20gdGhlIGJlc3QgZml0dGluZyBjaHVuayBpbiBhIHRyZWViaW4gKi8KK3N0YXRpYyB2b2lkKiB0bWFsbG9jX3NtYWxsKG1zdGF0ZSBtLCBzaXplX3QgbmIpIHsKKyAgdGNodW5rcHRyIHQsIHY7CisgIHNpemVfdCByc2l6ZTsKKyAgYmluZGV4X3QgaTsKKyAgYmlubWFwX3QgbGVhc3RiaXQgPSBsZWFzdF9iaXQobS0+dHJlZW1hcCk7CisgIGNvbXB1dGVfYml0MmlkeChsZWFzdGJpdCwgaSk7CisgIHYgPSB0ID0gKnRyZWViaW5fYXQobSwgaSk7CisgIHJzaXplID0gY2h1bmtzaXplKHQpIC0gbmI7CisKKyAgd2hpbGUgKCh0ID0gbGVmdG1vc3RfY2hpbGQodCkpICE9IDApIHsKKyAgICBzaXplX3QgdHJlbSA9IGNodW5rc2l6ZSh0KSAtIG5iOworICAgIGlmICh0cmVtIDwgcnNpemUpIHsKKyAgICAgIHJzaXplID0gdHJlbTsKKyAgICAgIHYgPSB0OworICAgIH0KKyAgfQorCisgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MobSwgdikpKSB7CisgICAgbWNodW5rcHRyIHIgPSBjaHVua19wbHVzX29mZnNldCh2LCBuYik7CisgICAgYXNzZXJ0KGNodW5rc2l6ZSh2KSA9PSByc2l6ZSArIG5iKTsKKyAgICBpZiAoUlRDSEVDSyhva19uZXh0KHYsIHIpKSkgeworICAgICAgdW5saW5rX2xhcmdlX2NodW5rKG0sIHYpOworICAgICAgaWYgKHJzaXplIDwgTUlOX0NIVU5LX1NJWkUpCisJc2V0X2ludXNlX2FuZF9waW51c2UobSwgdiwgKHJzaXplICsgbmIpKTsKKyAgICAgIGVsc2UgeworCXNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgdiwgbmIpOworCXNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7CisJcmVwbGFjZV9kdihtLCByLCByc2l6ZSk7CisgICAgICB9CisgICAgICByZXR1cm4gY2h1bmsybWVtKHYpOworICAgIH0KKyAgfQorCisgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pOworICByZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHJlYWxsb2Mgc3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHZvaWQqIGludGVybmFsX3JlYWxsb2MobXN0YXRlIG0sIHZvaWQqIG9sZG1lbSwgc2l6ZV90IGJ5dGVzKSB7CisgIGlmIChieXRlcyA+PSBNQVhfUkVRVUVTVCkgeworICAgIE1BTExPQ19GQUlMVVJFX0FDVElPTjsKKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAoIVBSRUFDVElPTihtKSkgeworICAgIG1jaHVua3B0ciBvbGRwID0gbWVtMmNodW5rKG9sZG1lbSk7CisgICAgc2l6ZV90IG9sZHNpemUgPSBjaHVua3NpemUob2xkcCk7CisgICAgbWNodW5rcHRyIG5leHQgPSBjaHVua19wbHVzX29mZnNldChvbGRwLCBvbGRzaXplKTsKKyAgICBtY2h1bmtwdHIgbmV3cCA9IDA7CisgICAgdm9pZCogZXh0cmEgPSAwOworCisgICAgLyogVHJ5IHRvIGVpdGhlciBzaHJpbmsgb3IgZXh0ZW5kIGludG8gdG9wLiBFbHNlIG1hbGxvYy1jb3B5LWZyZWUgKi8KKworICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MobSwgb2xkcCkgJiYgb2tfY2ludXNlKG9sZHApICYmCisJCW9rX25leHQob2xkcCwgbmV4dCkgJiYgb2tfcGludXNlKG5leHQpKSkgeworICAgICAgc2l6ZV90IG5iID0gcmVxdWVzdDJzaXplKGJ5dGVzKTsKKyAgICAgIGlmIChpc19tbWFwcGVkKG9sZHApKQorCW5ld3AgPSBtbWFwX3Jlc2l6ZShtLCBvbGRwLCBuYik7CisgICAgICBlbHNlIGlmIChvbGRzaXplID49IG5iKSB7IC8qIGFscmVhZHkgYmlnIGVub3VnaCAqLworCXNpemVfdCByc2l6ZSA9IG9sZHNpemUgLSBuYjsKKwluZXdwID0gb2xkcDsKKwlpZiAocnNpemUgPj0gTUlOX0NIVU5LX1NJWkUpIHsKKwkgIG1jaHVua3B0ciByZW1haW5kZXIgPSBjaHVua19wbHVzX29mZnNldChuZXdwLCBuYik7CisJICBzZXRfaW51c2UobSwgbmV3cCwgbmIpOworCSAgc2V0X2ludXNlKG0sIHJlbWFpbmRlciwgcnNpemUpOworCSAgZXh0cmEgPSBjaHVuazJtZW0ocmVtYWluZGVyKTsKKwl9CisgICAgICB9CisgICAgICBlbHNlIGlmIChuZXh0ID09IG0tPnRvcCAmJiBvbGRzaXplICsgbS0+dG9wc2l6ZSA+IG5iKSB7CisJLyogRXhwYW5kIGludG8gdG9wICovCisJc2l6ZV90IG5ld3NpemUgPSBvbGRzaXplICsgbS0+dG9wc2l6ZTsKKwlzaXplX3QgbmV3dG9wc2l6ZSA9IG5ld3NpemUgLSBuYjsKKwltY2h1bmtwdHIgbmV3dG9wID0gY2h1bmtfcGx1c19vZmZzZXQob2xkcCwgbmIpOworCXNldF9pbnVzZShtLCBvbGRwLCBuYik7CisJbmV3dG9wLT5oZWFkID0gbmV3dG9wc2l6ZSB8UElOVVNFX0JJVDsKKwltLT50b3AgPSBuZXd0b3A7CisJbS0+dG9wc2l6ZSA9IG5ld3RvcHNpemU7CisJbmV3cCA9IG9sZHA7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKG0sIG9sZG1lbSk7CisgICAgICBQT1NUQUNUSU9OKG0pOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUE9TVEFDVElPTihtKTsKKworICAgIGlmIChuZXdwICE9IDApIHsKKyAgICAgIGlmIChleHRyYSAhPSAwKSB7CisJaW50ZXJuYWxfZnJlZShtLCBleHRyYSk7CisgICAgICB9CisgICAgICBjaGVja19pbnVzZV9jaHVuayhtLCBuZXdwKTsKKyAgICAgIHJldHVybiBjaHVuazJtZW0obmV3cCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgdm9pZCogbmV3bWVtID0gaW50ZXJuYWxfbWFsbG9jKG0sIGJ5dGVzKTsKKyAgICAgIGlmIChuZXdtZW0gIT0gMCkgeworCXNpemVfdCBvYyA9IG9sZHNpemUgLSBvdmVyaGVhZF9mb3Iob2xkcCk7CisJbWVtY3B5KG5ld21lbSwgb2xkbWVtLCAob2MgPCBieXRlcyk/IG9jIDogYnl0ZXMpOworCWludGVybmFsX2ZyZWUobSwgb2xkbWVtKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBuZXdtZW07CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWVtYWxpZ24gc3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdm9pZCogaW50ZXJuYWxfbWVtYWxpZ24obXN0YXRlIG0sIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykgeworICBpZiAoYWxpZ25tZW50IDw9IE1BTExPQ19BTElHTk1FTlQpICAgIC8qIENhbiBqdXN0IHVzZSBtYWxsb2MgKi8KKyAgICByZXR1cm4gaW50ZXJuYWxfbWFsbG9jKG0sIGJ5dGVzKTsKKyAgaWYgKGFsaWdubWVudCA8ICBNSU5fQ0hVTktfU0laRSkgLyogbXVzdCBiZSBhdCBsZWFzdCBhIG1pbmltdW0gY2h1bmsgc2l6ZSAqLworICAgIGFsaWdubWVudCA9IE1JTl9DSFVOS19TSVpFOworICBpZiAoKGFsaWdubWVudCAmIChhbGlnbm1lbnQtU0laRV9UX09ORSkpICE9IDApIHsvKiBFbnN1cmUgYSBwb3dlciBvZiAyICovCisgICAgc2l6ZV90IGEgPSBNQUxMT0NfQUxJR05NRU5UIDw8IDE7CisgICAgd2hpbGUgKGEgPCBhbGlnbm1lbnQpIGEgPDw9IDE7CisgICAgYWxpZ25tZW50ID0gYTsKKyAgfQorCisgIGlmIChieXRlcyA+PSBNQVhfUkVRVUVTVCAtIGFsaWdubWVudCkgeworICAgIGlmIChtICE9IDApICB7IC8qIFRlc3QgaXNuJ3QgbmVlZGVkIGJ1dCBhdm9pZHMgY29tcGlsZXIgd2FybmluZyAqLworICAgICAgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBzaXplX3QgbmIgPSByZXF1ZXN0MnNpemUoYnl0ZXMpOworICAgIHNpemVfdCByZXEgPSBuYiArIGFsaWdubWVudCArIE1JTl9DSFVOS19TSVpFIC0gQ0hVTktfT1ZFUkhFQUQ7CisgICAgY2hhciogbWVtID0gKGNoYXIqKWludGVybmFsX21hbGxvYyhtLCByZXEpOworICAgIGlmIChtZW0gIT0gMCkgeworICAgICAgdm9pZCogbGVhZGVyID0gMDsKKyAgICAgIHZvaWQqIHRyYWlsZXIgPSAwOworICAgICAgbWNodW5rcHRyIHAgPSBtZW0yY2h1bmsobWVtKTsKKworICAgICAgaWYgKFBSRUFDVElPTihtKSkgcmV0dXJuIDA7CisgICAgICBpZiAoKCgoc2l6ZV90KShtZW0pKSAlIGFsaWdubWVudCkgIT0gMCkgeyAvKiBtaXNhbGlnbmVkICovCisJLyoKKwkgIEZpbmQgYW4gYWxpZ25lZCBzcG90IGluc2lkZSBjaHVuay4gIFNpbmNlIHdlIG5lZWQgdG8gZ2l2ZQorCSAgYmFjayBsZWFkaW5nIHNwYWNlIGluIGEgY2h1bmsgb2YgYXQgbGVhc3QgTUlOX0NIVU5LX1NJWkUsIGlmCisJICB0aGUgZmlyc3QgY2FsY3VsYXRpb24gcGxhY2VzIHVzIGF0IGEgc3BvdCB3aXRoIGxlc3MgdGhhbgorCSAgTUlOX0NIVU5LX1NJWkUgbGVhZGVyLCB3ZSBjYW4gbW92ZSB0byB0aGUgbmV4dCBhbGlnbmVkIHNwb3QuCisJICBXZSd2ZSBhbGxvY2F0ZWQgZW5vdWdoIHRvdGFsIHJvb20gc28gdGhhdCB0aGlzIGlzIGFsd2F5cworCSAgcG9zc2libGUuCisJKi8KKwljaGFyKiBiciA9IChjaGFyKiltZW0yY2h1bmsoKHNpemVfdCkoKChzaXplX3QpKG1lbSArCisJCQkJCQkgICAgICAgYWxpZ25tZW50IC0KKwkJCQkJCSAgICAgICBTSVpFX1RfT05FKSkgJgorCQkJCQkgICAgIC1hbGlnbm1lbnQpKTsKKwljaGFyKiBwb3MgPSAoKHNpemVfdCkoYnIgLSAoY2hhciopKHApKSA+PSBNSU5fQ0hVTktfU0laRSk/CisJICBiciA6IGJyK2FsaWdubWVudDsKKwltY2h1bmtwdHIgbmV3cCA9IChtY2h1bmtwdHIpcG9zOworCXNpemVfdCBsZWFkc2l6ZSA9IHBvcyAtIChjaGFyKikocCk7CisJc2l6ZV90IG5ld3NpemUgPSBjaHVua3NpemUocCkgLSBsZWFkc2l6ZTsKKworCWlmIChpc19tbWFwcGVkKHApKSB7IC8qIEZvciBtbWFwcGVkIGNodW5rcywganVzdCBhZGp1c3Qgb2Zmc2V0ICovCisJICBuZXdwLT5wcmV2X2Zvb3QgPSBwLT5wcmV2X2Zvb3QgKyBsZWFkc2l6ZTsKKwkgIG5ld3AtPmhlYWQgPSAobmV3c2l6ZXxDSU5VU0VfQklUKTsKKwl9CisJZWxzZSB7IC8qIE90aGVyd2lzZSwgZ2l2ZSBiYWNrIGxlYWRlciwgdXNlIHRoZSByZXN0ICovCisJICBzZXRfaW51c2UobSwgbmV3cCwgbmV3c2l6ZSk7CisJICBzZXRfaW51c2UobSwgcCwgbGVhZHNpemUpOworCSAgbGVhZGVyID0gY2h1bmsybWVtKHApOworCX0KKwlwID0gbmV3cDsKKyAgICAgIH0KKworICAgICAgLyogR2l2ZSBiYWNrIHNwYXJlIHJvb20gYXQgdGhlIGVuZCAqLworICAgICAgaWYgKCFpc19tbWFwcGVkKHApKSB7CisJc2l6ZV90IHNpemUgPSBjaHVua3NpemUocCk7CisJaWYgKHNpemUgPiBuYiArIE1JTl9DSFVOS19TSVpFKSB7CisJICBzaXplX3QgcmVtYWluZGVyX3NpemUgPSBzaXplIC0gbmI7CisJICBtY2h1bmtwdHIgcmVtYWluZGVyID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworCSAgc2V0X2ludXNlKG0sIHAsIG5iKTsKKwkgIHNldF9pbnVzZShtLCByZW1haW5kZXIsIHJlbWFpbmRlcl9zaXplKTsKKwkgIHRyYWlsZXIgPSBjaHVuazJtZW0ocmVtYWluZGVyKTsKKwl9CisgICAgICB9CisKKyAgICAgIGFzc2VydCAoY2h1bmtzaXplKHApID49IG5iKTsKKyAgICAgIGFzc2VydCgoKChzaXplX3QpKGNodW5rMm1lbShwKSkpICUgYWxpZ25tZW50KSA9PSAwKTsKKyAgICAgIGNoZWNrX2ludXNlX2NodW5rKG0sIHApOworICAgICAgUE9TVEFDVElPTihtKTsKKyAgICAgIGlmIChsZWFkZXIgIT0gMCkgeworCWludGVybmFsX2ZyZWUobSwgbGVhZGVyKTsKKyAgICAgIH0KKyAgICAgIGlmICh0cmFpbGVyICE9IDApIHsKKwlpbnRlcm5hbF9mcmVlKG0sIHRyYWlsZXIpOworICAgICAgfQorICAgICAgcmV0dXJuIGNodW5rMm1lbShwKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjb21hbGxvYy9jb2FsbG9jIHN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyB2b2lkKiogaWFsbG9jKG1zdGF0ZSBtLAorCQkgICAgIHNpemVfdCBuX2VsZW1lbnRzLAorCQkgICAgIHNpemVfdCogc2l6ZXMsCisJCSAgICAgaW50IG9wdHMsCisJCSAgICAgdm9pZCogY2h1bmtzW10pIHsKKyAgLyoKKyAgICBUaGlzIHByb3ZpZGVzIGNvbW1vbiBzdXBwb3J0IGZvciBpbmRlcGVuZGVudF9YIHJvdXRpbmVzLCBoYW5kbGluZworICAgIGFsbCBvZiB0aGUgY29tYmluYXRpb25zIHRoYXQgY2FuIHJlc3VsdC4KKworICAgIFRoZSBvcHRzIGFyZyBoYXM6CisgICAgYml0IDAgc2V0IGlmIGFsbCBlbGVtZW50cyBhcmUgc2FtZSBzaXplICh1c2luZyBzaXplc1swXSkKKyAgICBiaXQgMSBzZXQgaWYgZWxlbWVudHMgc2hvdWxkIGJlIHplcm9lZAorICAqLworCisgIHNpemVfdCAgICBlbGVtZW50X3NpemU7ICAgLyogY2h1bmtzaXplIG9mIGVhY2ggZWxlbWVudCwgaWYgYWxsIHNhbWUgKi8KKyAgc2l6ZV90ICAgIGNvbnRlbnRzX3NpemU7ICAvKiB0b3RhbCBzaXplIG9mIGVsZW1lbnRzICovCisgIHNpemVfdCAgICBhcnJheV9zaXplOyAgICAgLyogcmVxdWVzdCBzaXplIG9mIHBvaW50ZXIgYXJyYXkgKi8KKyAgdm9pZCogICAgIG1lbTsgICAgICAgICAgICAvKiBtYWxsb2NlZCBhZ2dyZWdhdGUgc3BhY2UgKi8KKyAgbWNodW5rcHRyIHA7ICAgICAgICAgICAgICAvKiBjb3JyZXNwb25kaW5nIGNodW5rICovCisgIHNpemVfdCAgICByZW1haW5kZXJfc2l6ZTsgLyogcmVtYWluaW5nIGJ5dGVzIHdoaWxlIHNwbGl0dGluZyAqLworICB2b2lkKiogICAgbWFycmF5OyAgICAgICAgIC8qIGVpdGhlciAiY2h1bmtzIiBvciBtYWxsb2NlZCBwdHIgYXJyYXkgKi8KKyAgbWNodW5rcHRyIGFycmF5X2NodW5rOyAgICAvKiBjaHVuayBmb3IgbWFsbG9jZWQgcHRyIGFycmF5ICovCisgIGZsYWdfdCAgICB3YXNfZW5hYmxlZDsgICAgLyogdG8gZGlzYWJsZSBtbWFwICovCisgIHNpemVfdCAgICBzaXplOworICBzaXplX3QgICAgaTsKKworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKyAgLyogY29tcHV0ZSBhcnJheSBsZW5ndGgsIGlmIG5lZWRlZCAqLworICBpZiAoY2h1bmtzICE9IDApIHsKKyAgICBpZiAobl9lbGVtZW50cyA9PSAwKQorICAgICAgcmV0dXJuIGNodW5rczsgLyogbm90aGluZyB0byBkbyAqLworICAgIG1hcnJheSA9IGNodW5rczsKKyAgICBhcnJheV9zaXplID0gMDsKKyAgfQorICBlbHNlIHsKKyAgICAvKiBpZiBlbXB0eSByZXEsIG11c3Qgc3RpbGwgcmV0dXJuIGNodW5rIHJlcHJlc2VudGluZyBlbXB0eSBhcnJheSAqLworICAgIGlmIChuX2VsZW1lbnRzID09IDApCisgICAgICByZXR1cm4gKHZvaWQqKilpbnRlcm5hbF9tYWxsb2MobSwgMCk7CisgICAgbWFycmF5ID0gMDsKKyAgICBhcnJheV9zaXplID0gcmVxdWVzdDJzaXplKG5fZWxlbWVudHMgKiAoc2l6ZW9mKHZvaWQqKSkpOworICB9CisKKyAgLyogY29tcHV0ZSB0b3RhbCBlbGVtZW50IHNpemUgKi8KKyAgaWYgKG9wdHMgJiAweDEpIHsgLyogYWxsLXNhbWUtc2l6ZSAqLworICAgIGVsZW1lbnRfc2l6ZSA9IHJlcXVlc3Qyc2l6ZSgqc2l6ZXMpOworICAgIGNvbnRlbnRzX3NpemUgPSBuX2VsZW1lbnRzICogZWxlbWVudF9zaXplOworICB9CisgIGVsc2UgeyAvKiBhZGQgdXAgYWxsIHRoZSBzaXplcyAqLworICAgIGVsZW1lbnRfc2l6ZSA9IDA7CisgICAgY29udGVudHNfc2l6ZSA9IDA7CisgICAgZm9yIChpID0gMDsgaSAhPSBuX2VsZW1lbnRzOyArK2kpCisgICAgICBjb250ZW50c19zaXplICs9IHJlcXVlc3Qyc2l6ZShzaXplc1tpXSk7CisgIH0KKworICBzaXplID0gY29udGVudHNfc2l6ZSArIGFycmF5X3NpemU7CisKKyAgLyoKKyAgICAgQWxsb2NhdGUgdGhlIGFnZ3JlZ2F0ZSBjaHVuay4gIEZpcnN0IGRpc2FibGUgZGlyZWN0LW1tYXBwaW5nIHNvCisgICAgIG1hbGxvYyB3b24ndCB1c2UgaXQsIHNpbmNlIHdlIHdvdWxkIG5vdCBiZSBhYmxlIHRvIGxhdGVyCisgICAgIGZyZWUvcmVhbGxvYyBzcGFjZSBpbnRlcm5hbCB0byBhIHNlZ3JlZ2F0ZWQgbW1hcCByZWdpb24uCisgICovCisgIHdhc19lbmFibGVkID0gdXNlX21tYXAobSk7CisgIGRpc2FibGVfbW1hcChtKTsKKyAgbWVtID0gaW50ZXJuYWxfbWFsbG9jKG0sIHNpemUgLSBDSFVOS19PVkVSSEVBRCk7CisgIGlmICh3YXNfZW5hYmxlZCkKKyAgICBlbmFibGVfbW1hcChtKTsKKyAgaWYgKG1lbSA9PSAwKQorICAgIHJldHVybiAwOworCisgIGlmIChQUkVBQ1RJT04obSkpIHJldHVybiAwOworICBwID0gbWVtMmNodW5rKG1lbSk7CisgIHJlbWFpbmRlcl9zaXplID0gY2h1bmtzaXplKHApOworCisgIGFzc2VydCghaXNfbW1hcHBlZChwKSk7CisKKyAgaWYgKG9wdHMgJiAweDIpIHsgICAgICAgLyogb3B0aW9uYWxseSBjbGVhciB0aGUgZWxlbWVudHMgKi8KKyAgICBtZW1zZXQoKHNpemVfdCopbWVtLCAwLCByZW1haW5kZXJfc2l6ZSAtIFNJWkVfVF9TSVpFIC0gYXJyYXlfc2l6ZSk7CisgIH0KKworICAvKiBJZiBub3QgcHJvdmlkZWQsIGFsbG9jYXRlIHRoZSBwb2ludGVyIGFycmF5IGFzIGZpbmFsIHBhcnQgb2YgY2h1bmsgKi8KKyAgaWYgKG1hcnJheSA9PSAwKSB7CisgICAgc2l6ZV90ICBhcnJheV9jaHVua19zaXplOworICAgIGFycmF5X2NodW5rID0gY2h1bmtfcGx1c19vZmZzZXQocCwgY29udGVudHNfc2l6ZSk7CisgICAgYXJyYXlfY2h1bmtfc2l6ZSA9IHJlbWFpbmRlcl9zaXplIC0gY29udGVudHNfc2l6ZTsKKyAgICBtYXJyYXkgPSAodm9pZCoqKSAoY2h1bmsybWVtKGFycmF5X2NodW5rKSk7CisgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBhcnJheV9jaHVuaywgYXJyYXlfY2h1bmtfc2l6ZSk7CisgICAgcmVtYWluZGVyX3NpemUgPSBjb250ZW50c19zaXplOworICB9CisKKyAgLyogc3BsaXQgb3V0IGVsZW1lbnRzICovCisgIGZvciAoaSA9IDA7IDsgKytpKSB7CisgICAgbWFycmF5W2ldID0gY2h1bmsybWVtKHApOworICAgIGlmIChpICE9IG5fZWxlbWVudHMtMSkgeworICAgICAgaWYgKGVsZW1lbnRfc2l6ZSAhPSAwKQorCXNpemUgPSBlbGVtZW50X3NpemU7CisgICAgICBlbHNlCisJc2l6ZSA9IHJlcXVlc3Qyc2l6ZShzaXplc1tpXSk7CisgICAgICByZW1haW5kZXJfc2l6ZSAtPSBzaXplOworICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBwLCBzaXplKTsKKyAgICAgIHAgPSBjaHVua19wbHVzX29mZnNldChwLCBzaXplKTsKKyAgICB9CisgICAgZWxzZSB7IC8qIHRoZSBmaW5hbCBlbGVtZW50IGFic29yYnMgYW55IG92ZXJhbGxvY2F0aW9uIHNsb3AgKi8KKyAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgcCwgcmVtYWluZGVyX3NpemUpOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyNpZiBERUJVRworICBpZiAobWFycmF5ICE9IGNodW5rcykgeworICAgIC8qIGZpbmFsIGVsZW1lbnQgbXVzdCBoYXZlIGV4YWN0bHkgZXhoYXVzdGVkIGNodW5rICovCisgICAgaWYgKGVsZW1lbnRfc2l6ZSAhPSAwKSB7CisgICAgICBhc3NlcnQocmVtYWluZGVyX3NpemUgPT0gZWxlbWVudF9zaXplKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBhc3NlcnQocmVtYWluZGVyX3NpemUgPT0gcmVxdWVzdDJzaXplKHNpemVzW2ldKSk7CisgICAgfQorICAgIGNoZWNrX2ludXNlX2NodW5rKG0sIG1lbTJjaHVuayhtYXJyYXkpKTsKKyAgfQorICBmb3IgKGkgPSAwOyBpICE9IG5fZWxlbWVudHM7ICsraSkKKyAgICBjaGVja19pbnVzZV9jaHVuayhtLCBtZW0yY2h1bmsobWFycmF5W2ldKSk7CisKKyNlbmRpZiAvKiBERUJVRyAqLworCisgIFBPU1RBQ1RJT04obSk7CisgIHJldHVybiBtYXJyYXk7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcHVibGljIHJvdXRpbmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmICFPTkxZX01TUEFDRVMKKwordm9pZCogZGxtYWxsb2Moc2l6ZV90IGJ5dGVzKSB7CisgIC8qCisgICAgIEJhc2ljIGFsZ29yaXRobToKKyAgICAgSWYgYSBzbWFsbCByZXF1ZXN0ICg8IDI1NiBieXRlcyBtaW51cyBwZXItY2h1bmsgb3ZlcmhlYWQpOgorICAgICAgIDEuIElmIG9uZSBleGlzdHMsIHVzZSBhIHJlbWFpbmRlcmxlc3MgY2h1bmsgaW4gYXNzb2NpYXRlZCBzbWFsbGJpbi4KKwkgIChSZW1haW5kZXJsZXNzIG1lYW5zIHRoYXQgdGhlcmUgYXJlIHRvbyBmZXcgZXhjZXNzIGJ5dGVzIHRvCisJICByZXByZXNlbnQgYXMgYSBjaHVuay4pCisgICAgICAgMi4gSWYgaXQgaXMgYmlnIGVub3VnaCwgdXNlIHRoZSBkdiBjaHVuaywgd2hpY2ggaXMgbm9ybWFsbHkgdGhlCisJICBjaHVuayBhZGphY2VudCB0byB0aGUgb25lIHVzZWQgZm9yIHRoZSBtb3N0IHJlY2VudCBzbWFsbCByZXF1ZXN0LgorICAgICAgIDMuIElmIG9uZSBleGlzdHMsIHNwbGl0IHRoZSBzbWFsbGVzdCBhdmFpbGFibGUgY2h1bmsgaW4gYSBiaW4sCisJICBzYXZpbmcgcmVtYWluZGVyIGluIGR2LgorICAgICAgIDQuIElmIGl0IGlzIGJpZyBlbm91Z2gsIHVzZSB0aGUgdG9wIGNodW5rLgorICAgICAgIDUuIElmIGF2YWlsYWJsZSwgZ2V0IG1lbW9yeSBmcm9tIHN5c3RlbSBhbmQgdXNlIGl0CisgICAgIE90aGVyd2lzZSwgZm9yIGEgbGFyZ2UgcmVxdWVzdDoKKyAgICAgICAxLiBGaW5kIHRoZSBzbWFsbGVzdCBhdmFpbGFibGUgYmlubmVkIGNodW5rIHRoYXQgZml0cywgYW5kIHVzZSBpdAorCSAgaWYgaXQgaXMgYmV0dGVyIGZpdHRpbmcgdGhhbiBkdiBjaHVuaywgc3BsaXR0aW5nIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAyLiBJZiBiZXR0ZXIgZml0dGluZyB0aGFuIGFueSBiaW5uZWQgY2h1bmssIHVzZSB0aGUgZHYgY2h1bmsuCisgICAgICAgMy4gSWYgaXQgaXMgYmlnIGVub3VnaCwgdXNlIHRoZSB0b3AgY2h1bmsuCisgICAgICAgNC4gSWYgcmVxdWVzdCBzaXplID49IG1tYXAgdGhyZXNob2xkLCB0cnkgdG8gZGlyZWN0bHkgbW1hcCB0aGlzIGNodW5rLgorICAgICAgIDUuIElmIGF2YWlsYWJsZSwgZ2V0IG1lbW9yeSBmcm9tIHN5c3RlbSBhbmQgdXNlIGl0CisKKyAgICAgVGhlIHVnbHkgZ290bydzIGhlcmUgZW5zdXJlIHRoYXQgcG9zdGFjdGlvbiBvY2N1cnMgYWxvbmcgYWxsIHBhdGhzLgorICAqLworCisjaWYgVVNFX0xPQ0tTCisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOyAvKiBpbml0aWFsaXplIGluIHN5c19hbGxvYyBpZiBub3QgdXNpbmcgbG9ja3MgKi8KKyNlbmRpZgorCisgIGlmICghUFJFQUNUSU9OKGdtKSkgeworICAgIHZvaWQqIG1lbTsKKyAgICBzaXplX3QgbmI7CisgICAgaWYgKGJ5dGVzIDw9IE1BWF9TTUFMTF9SRVFVRVNUKSB7CisgICAgICBiaW5kZXhfdCBpZHg7CisgICAgICBiaW5tYXBfdCBzbWFsbGJpdHM7CisgICAgICBuYiA9IChieXRlcyA8IE1JTl9SRVFVRVNUKT8gTUlOX0NIVU5LX1NJWkUgOiBwYWRfcmVxdWVzdChieXRlcyk7CisgICAgICBpZHggPSBzbWFsbF9pbmRleChuYik7CisgICAgICBzbWFsbGJpdHMgPSBnbS0+c21hbGxtYXAgPj4gaWR4OworCisgICAgICBpZiAoKHNtYWxsYml0cyAmIDB4M1UpICE9IDApIHsgLyogUmVtYWluZGVybGVzcyBmaXQgdG8gYSBzbWFsbGJpbi4gKi8KKwltY2h1bmtwdHIgYiwgcDsKKwlpZHggKz0gfnNtYWxsYml0cyAmIDE7ICAgICAgIC8qIFVzZXMgbmV4dCBiaW4gaWYgaWR4IGVtcHR5ICovCisJYiA9IHNtYWxsYmluX2F0KGdtLCBpZHgpOworCXAgPSBiLT5mZDsKKwlhc3NlcnQoY2h1bmtzaXplKHApID09IHNtYWxsX2luZGV4MnNpemUoaWR4KSk7CisJdW5saW5rX2ZpcnN0X3NtYWxsX2NodW5rKGdtLCBiLCBwLCBpZHgpOworCXNldF9pbnVzZV9hbmRfcGludXNlKGdtLCBwLCBzbWFsbF9pbmRleDJzaXplKGlkeCkpOworCW1lbSA9IGNodW5rMm1lbShwKTsKKwljaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisJZ290byBwb3N0YWN0aW9uOworICAgICAgfQorCisgICAgICBlbHNlIGlmIChuYiA+IGdtLT5kdnNpemUpIHsKKwlpZiAoc21hbGxiaXRzICE9IDApIHsgLyogVXNlIGNodW5rIGluIG5leHQgbm9uZW1wdHkgc21hbGxiaW4gKi8KKwkgIG1jaHVua3B0ciBiLCBwLCByOworCSAgc2l6ZV90IHJzaXplOworCSAgYmluZGV4X3QgaTsKKwkgIGJpbm1hcF90IGxlZnRiaXRzID0gKHNtYWxsYml0cyA8PCBpZHgpICYgbGVmdF9iaXRzKGlkeDJiaXQoaWR4KSk7CisJICBiaW5tYXBfdCBsZWFzdGJpdCA9IGxlYXN0X2JpdChsZWZ0Yml0cyk7CisJICBjb21wdXRlX2JpdDJpZHgobGVhc3RiaXQsIGkpOworCSAgYiA9IHNtYWxsYmluX2F0KGdtLCBpKTsKKwkgIHAgPSBiLT5mZDsKKwkgIGFzc2VydChjaHVua3NpemUocCkgPT0gc21hbGxfaW5kZXgyc2l6ZShpKSk7CisJICB1bmxpbmtfZmlyc3Rfc21hbGxfY2h1bmsoZ20sIGIsIHAsIGkpOworCSAgcnNpemUgPSBzbWFsbF9pbmRleDJzaXplKGkpIC0gbmI7CisJICAvKiBGaXQgaGVyZSBjYW5ub3QgYmUgcmVtYWluZGVybGVzcyBpZiA0Ynl0ZSBzaXplcyAqLworCSAgaWYgKFNJWkVfVF9TSVpFICE9IDQgJiYgcnNpemUgPCBNSU5fQ0hVTktfU0laRSkKKwkgICAgc2V0X2ludXNlX2FuZF9waW51c2UoZ20sIHAsIHNtYWxsX2luZGV4MnNpemUoaSkpOworCSAgZWxzZSB7CisJICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsoZ20sIHAsIG5iKTsKKwkgICAgciA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKwkgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKwkgICAgcmVwbGFjZV9kdihnbSwgciwgcnNpemUpOworCSAgfQorCSAgbWVtID0gY2h1bmsybWVtKHApOworCSAgY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOworCSAgZ290byBwb3N0YWN0aW9uOworCX0KKworCWVsc2UgaWYgKGdtLT50cmVlbWFwICE9IDAgJiYgKG1lbSA9IHRtYWxsb2Nfc21hbGwoZ20sIG5iKSkgIT0gMCkgeworCSAgY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOworCSAgZ290byBwb3N0YWN0aW9uOworCX0KKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoYnl0ZXMgPj0gTUFYX1JFUVVFU1QpCisgICAgICBuYiA9IE1BWF9TSVpFX1Q7IC8qIFRvbyBiaWcgdG8gYWxsb2NhdGUuIEZvcmNlIGZhaWx1cmUgKGluIHN5cyBhbGxvYykgKi8KKyAgICBlbHNlIHsKKyAgICAgIG5iID0gcGFkX3JlcXVlc3QoYnl0ZXMpOworICAgICAgaWYgKGdtLT50cmVlbWFwICE9IDAgJiYgKG1lbSA9IHRtYWxsb2NfbGFyZ2UoZ20sIG5iKSkgIT0gMCkgeworCWNoZWNrX21hbGxvY2VkX2NodW5rKGdtLCBtZW0sIG5iKTsKKwlnb3RvIHBvc3RhY3Rpb247CisgICAgICB9CisgICAgfQorCisgICAgaWYgKG5iIDw9IGdtLT5kdnNpemUpIHsKKyAgICAgIHNpemVfdCByc2l6ZSA9IGdtLT5kdnNpemUgLSBuYjsKKyAgICAgIG1jaHVua3B0ciBwID0gZ20tPmR2OworICAgICAgaWYgKHJzaXplID49IE1JTl9DSFVOS19TSVpFKSB7IC8qIHNwbGl0IGR2ICovCisJbWNodW5rcHRyIHIgPSBnbS0+ZHYgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisJZ20tPmR2c2l6ZSA9IHJzaXplOworCXNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7CisJc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhnbSwgcCwgbmIpOworICAgICAgfQorICAgICAgZWxzZSB7IC8qIGV4aGF1c3QgZHYgKi8KKwlzaXplX3QgZHZzID0gZ20tPmR2c2l6ZTsKKwlnbS0+ZHZzaXplID0gMDsKKwlnbS0+ZHYgPSAwOworCXNldF9pbnVzZV9hbmRfcGludXNlKGdtLCBwLCBkdnMpOworICAgICAgfQorICAgICAgbWVtID0gY2h1bmsybWVtKHApOworICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOworICAgICAgZ290byBwb3N0YWN0aW9uOworICAgIH0KKworICAgIGVsc2UgaWYgKG5iIDwgZ20tPnRvcHNpemUpIHsgLyogU3BsaXQgdG9wICovCisgICAgICBzaXplX3QgcnNpemUgPSBnbS0+dG9wc2l6ZSAtPSBuYjsKKyAgICAgIG1jaHVua3B0ciBwID0gZ20tPnRvcDsKKyAgICAgIG1jaHVua3B0ciByID0gZ20tPnRvcCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKyAgICAgIHItPmhlYWQgPSByc2l6ZSB8IFBJTlVTRV9CSVQ7CisgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKGdtLCBwLCBuYik7CisgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7CisgICAgICBjaGVja190b3BfY2h1bmsoZ20sIGdtLT50b3ApOworICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOworICAgICAgZ290byBwb3N0YWN0aW9uOworICAgIH0KKworICAgIG1lbSA9IHN5c19hbGxvYyhnbSwgbmIpOworCisgIHBvc3RhY3Rpb246CisgICAgUE9TVEFDVElPTihnbSk7CisgICAgcmV0dXJuIG1lbTsKKyAgfQorCisgIHJldHVybiAwOworfQorCit2b2lkIGRsZnJlZSh2b2lkKiBtZW0pIHsKKyAgLyoKKyAgICAgQ29uc29saWRhdGUgZnJlZWQgY2h1bmtzIHdpdGggcHJlY2VlZGluZyBvciBzdWNjZWVkaW5nIGJvcmRlcmluZworICAgICBmcmVlIGNodW5rcywgaWYgdGhleSBleGlzdCwgYW5kIHRoZW4gcGxhY2UgaW4gYSBiaW4uICBJbnRlcm1peGVkCisgICAgIHdpdGggc3BlY2lhbCBjYXNlcyBmb3IgdG9wLCBkdiwgbW1hcHBlZCBjaHVua3MsIGFuZCB1c2FnZSBlcnJvcnMuCisgICovCisKKyAgaWYgKG1lbSAhPSAwKSB7CisgICAgbWNodW5rcHRyIHAgID0gbWVtMmNodW5rKG1lbSk7CisjaWYgRk9PVEVSUworICAgIG1zdGF0ZSBmbSA9IGdldF9tc3RhdGVfZm9yKHApOworICAgIGlmICghb2tfbWFnaWMoZm0pKSB7CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04oZm0sIHApOworICAgICAgcmV0dXJuOworICAgIH0KKyNlbHNlIC8qIEZPT1RFUlMgKi8KKyNkZWZpbmUgZm0gZ20KKyNlbmRpZiAvKiBGT09URVJTICovCisgICAgaWYgKCFQUkVBQ1RJT04oZm0pKSB7CisgICAgICBjaGVja19pbnVzZV9jaHVuayhmbSwgcCk7CisgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKGZtLCBwKSAmJiBva19jaW51c2UocCkpKSB7CisJc2l6ZV90IHBzaXplID0gY2h1bmtzaXplKHApOworCW1jaHVua3B0ciBuZXh0ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUpOworCWlmICghcGludXNlKHApKSB7CisJICBzaXplX3QgcHJldnNpemUgPSBwLT5wcmV2X2Zvb3Q7CisJICBpZiAoKHByZXZzaXplICYgSVNfTU1BUFBFRF9CSVQpICE9IDApIHsKKwkgICAgcHJldnNpemUgJj0gfklTX01NQVBQRURfQklUOworCSAgICBwc2l6ZSArPSBwcmV2c2l6ZSArIE1NQVBfRk9PVF9QQUQ7CisJICAgIGlmIChDQUxMX01VTk1BUCgoY2hhciopcCAtIHByZXZzaXplLCBwc2l6ZSkgPT0gMCkKKwkgICAgICBmbS0+Zm9vdHByaW50IC09IHBzaXplOworCSAgICBnb3RvIHBvc3RhY3Rpb247CisJICB9CisJICBlbHNlIHsKKwkgICAgbWNodW5rcHRyIHByZXYgPSBjaHVua19taW51c19vZmZzZXQocCwgcHJldnNpemUpOworCSAgICBwc2l6ZSArPSBwcmV2c2l6ZTsKKwkgICAgcCA9IHByZXY7CisJICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoZm0sIHByZXYpKSkgeyAvKiBjb25zb2xpZGF0ZSBiYWNrd2FyZCAqLworCSAgICAgIGlmIChwICE9IGZtLT5kdikgeworCQl1bmxpbmtfY2h1bmsoZm0sIHAsIHByZXZzaXplKTsKKwkgICAgICB9CisJICAgICAgZWxzZSBpZiAoKG5leHQtPmhlYWQgJiBJTlVTRV9CSVRTKSA9PSBJTlVTRV9CSVRTKSB7CisJCWZtLT5kdnNpemUgPSBwc2l6ZTsKKwkJc2V0X2ZyZWVfd2l0aF9waW51c2UocCwgcHNpemUsIG5leHQpOworCQlnb3RvIHBvc3RhY3Rpb247CisJICAgICAgfQorCSAgICB9CisJICAgIGVsc2UKKwkgICAgICBnb3RvIGVycm9yYWN0aW9uOworCSAgfQorCX0KKworCWlmIChSVENIRUNLKG9rX25leHQocCwgbmV4dCkgJiYgb2tfcGludXNlKG5leHQpKSkgeworCSAgaWYgKCFjaW51c2UobmV4dCkpIHsgIC8qIGNvbnNvbGlkYXRlIGZvcndhcmQgKi8KKwkgICAgaWYgKG5leHQgPT0gZm0tPnRvcCkgeworCSAgICAgIHNpemVfdCB0c2l6ZSA9IGZtLT50b3BzaXplICs9IHBzaXplOworCSAgICAgIGZtLT50b3AgPSBwOworCSAgICAgIHAtPmhlYWQgPSB0c2l6ZSB8IFBJTlVTRV9CSVQ7CisJICAgICAgaWYgKHAgPT0gZm0tPmR2KSB7CisJCWZtLT5kdiA9IDA7CisJCWZtLT5kdnNpemUgPSAwOworCSAgICAgIH0KKwkgICAgICBpZiAoc2hvdWxkX3RyaW0oZm0sIHRzaXplKSkKKwkJc3lzX3RyaW0oZm0sIDApOworCSAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKwkgICAgfQorCSAgICBlbHNlIGlmIChuZXh0ID09IGZtLT5kdikgeworCSAgICAgIHNpemVfdCBkc2l6ZSA9IGZtLT5kdnNpemUgKz0gcHNpemU7CisJICAgICAgZm0tPmR2ID0gcDsKKwkgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgZHNpemUpOworCSAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKwkgICAgfQorCSAgICBlbHNlIHsKKwkgICAgICBzaXplX3QgbnNpemUgPSBjaHVua3NpemUobmV4dCk7CisJICAgICAgcHNpemUgKz0gbnNpemU7CisJICAgICAgdW5saW5rX2NodW5rKGZtLCBuZXh0LCBuc2l6ZSk7CisJICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIHBzaXplKTsKKwkgICAgICBpZiAocCA9PSBmbS0+ZHYpIHsKKwkJZm0tPmR2c2l6ZSA9IHBzaXplOworCQlnb3RvIHBvc3RhY3Rpb247CisJICAgICAgfQorCSAgICB9CisJICB9CisJICBlbHNlCisJICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHAsIHBzaXplLCBuZXh0KTsKKworCSAgaWYgKGlzX3NtYWxsKHBzaXplKSkgeworCSAgICBpbnNlcnRfc21hbGxfY2h1bmsoZm0sIHAsIHBzaXplKTsKKwkgICAgY2hlY2tfZnJlZV9jaHVuayhmbSwgcCk7CisJICB9CisJICBlbHNlIHsKKwkgICAgdGNodW5rcHRyIHRwID0gKHRjaHVua3B0cilwOworCSAgICBpbnNlcnRfbGFyZ2VfY2h1bmsoZm0sIHRwLCBwc2l6ZSk7CisJICAgIGNoZWNrX2ZyZWVfY2h1bmsoZm0sIHApOworCSAgICBpZiAoLS1mbS0+cmVsZWFzZV9jaGVja3MgPT0gMCkKKwkgICAgICByZWxlYXNlX3VudXNlZF9zZWdtZW50cyhmbSk7CisJICB9CisJICBnb3RvIHBvc3RhY3Rpb247CisJfQorICAgICAgfQorICAgIGVycm9yYWN0aW9uOgorICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKGZtLCBwKTsKKyAgICBwb3N0YWN0aW9uOgorICAgICAgUE9TVEFDVElPTihmbSk7CisgICAgfQorICB9CisjaWYgIUZPT1RFUlMKKyN1bmRlZiBmbQorI2VuZGlmIC8qIEZPT1RFUlMgKi8KK30KKwordm9pZCogZGxjYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpIHsKKyAgdm9pZCogbWVtOworICBzaXplX3QgcmVxID0gMDsKKyAgaWYgKG5fZWxlbWVudHMgIT0gMCkgeworICAgIHJlcSA9IG5fZWxlbWVudHMgKiBlbGVtX3NpemU7CisgICAgaWYgKCgobl9lbGVtZW50cyB8IGVsZW1fc2l6ZSkgJiB+KHNpemVfdCkweGZmZmYpICYmCisJKHJlcSAvIG5fZWxlbWVudHMgIT0gZWxlbV9zaXplKSkKKyAgICAgIHJlcSA9IE1BWF9TSVpFX1Q7IC8qIGZvcmNlIGRvd25zdHJlYW0gZmFpbHVyZSBvbiBvdmVyZmxvdyAqLworICB9CisgIG1lbSA9IGRsbWFsbG9jKHJlcSk7CisgIGlmIChtZW0gIT0gMCAmJiBjYWxsb2NfbXVzdF9jbGVhcihtZW0yY2h1bmsobWVtKSkpCisgICAgbWVtc2V0KG1lbSwgMCwgcmVxKTsKKyAgcmV0dXJuIG1lbTsKK30KKwordm9pZCogZGxyZWFsbG9jKHZvaWQqIG9sZG1lbSwgc2l6ZV90IGJ5dGVzKSB7CisgIGlmIChvbGRtZW0gPT0gMCkKKyAgICByZXR1cm4gZGxtYWxsb2MoYnl0ZXMpOworI2lmZGVmIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUworICBpZiAoYnl0ZXMgPT0gMCkgeworICAgIGRsZnJlZShvbGRtZW0pOworICAgIHJldHVybiAwOworICB9CisjZW5kaWYgLyogUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTICovCisgIGVsc2UgeworI2lmICEgRk9PVEVSUworICAgIG1zdGF0ZSBtID0gZ207CisjZWxzZSAvKiBGT09URVJTICovCisgICAgbXN0YXRlIG0gPSBnZXRfbXN0YXRlX2ZvcihtZW0yY2h1bmsob2xkbWVtKSk7CisgICAgaWYgKCFva19tYWdpYyhtKSkgeworICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKG0sIG9sZG1lbSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisjZW5kaWYgLyogRk9PVEVSUyAqLworICAgIHJldHVybiBpbnRlcm5hbF9yZWFsbG9jKG0sIG9sZG1lbSwgYnl0ZXMpOworICB9Cit9CisKK3ZvaWQqIGRsbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSB7CisgIHJldHVybiBpbnRlcm5hbF9tZW1hbGlnbihnbSwgYWxpZ25tZW50LCBieXRlcyk7Cit9CisKK3ZvaWQqKiBkbGluZGVwZW5kZW50X2NhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSwKKwkJCQkgdm9pZCogY2h1bmtzW10pIHsKKyAgc2l6ZV90IHN6ID0gZWxlbV9zaXplOyAvKiBzZXJ2ZXMgYXMgMS1lbGVtZW50IGFycmF5ICovCisgIHJldHVybiBpYWxsb2MoZ20sIG5fZWxlbWVudHMsICZzeiwgMywgY2h1bmtzKTsKK30KKwordm9pZCoqIGRsaW5kZXBlbmRlbnRfY29tYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBzaXplc1tdLAorCQkJCSAgIHZvaWQqIGNodW5rc1tdKSB7CisgIHJldHVybiBpYWxsb2MoZ20sIG5fZWxlbWVudHMsIHNpemVzLCAwLCBjaHVua3MpOworfQorCit2b2lkKiBkbHZhbGxvYyhzaXplX3QgYnl0ZXMpIHsKKyAgc2l6ZV90IHBhZ2VzejsKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CisgIHBhZ2VzeiA9IG1wYXJhbXMucGFnZV9zaXplOworICByZXR1cm4gZGxtZW1hbGlnbihwYWdlc3osIGJ5dGVzKTsKK30KKwordm9pZCogZGxwdmFsbG9jKHNpemVfdCBieXRlcykgeworICBzaXplX3QgcGFnZXN6OworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKyAgcGFnZXN6ID0gbXBhcmFtcy5wYWdlX3NpemU7CisgIHJldHVybiBkbG1lbWFsaWduKHBhZ2VzeiwgKGJ5dGVzICsgcGFnZXN6IC0gU0laRV9UX09ORSkgJiB+KHBhZ2VzeiAtIFNJWkVfVF9PTkUpKTsKK30KKworaW50IGRsbWFsbG9jX3RyaW0oc2l6ZV90IHBhZCkgeworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKyAgaW50IHJlc3VsdCA9IDA7CisgIGlmICghUFJFQUNUSU9OKGdtKSkgeworICAgIHJlc3VsdCA9IHN5c190cmltKGdtLCBwYWQpOworICAgIFBPU1RBQ1RJT04oZ20pOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3NpemVfdCBkbG1hbGxvY19mb290cHJpbnQodm9pZCkgeworICByZXR1cm4gZ20tPmZvb3RwcmludDsKK30KKworc2l6ZV90IGRsbWFsbG9jX21heF9mb290cHJpbnQodm9pZCkgeworICByZXR1cm4gZ20tPm1heF9mb290cHJpbnQ7Cit9CisKKyNpZiAhTk9fTUFMTElORk8KK3N0cnVjdCBtYWxsaW5mbyBkbG1hbGxpbmZvKHZvaWQpIHsKKyAgcmV0dXJuIGludGVybmFsX21hbGxpbmZvKGdtKTsKK30KKyNlbmRpZiAvKiBOT19NQUxMSU5GTyAqLworCit2b2lkIGRsbWFsbG9jX3N0YXRzKCkgeworICBpbnRlcm5hbF9tYWxsb2Nfc3RhdHMoZ20pOworfQorCitpbnQgZGxtYWxsb3B0KGludCBwYXJhbV9udW1iZXIsIGludCB2YWx1ZSkgeworICByZXR1cm4gY2hhbmdlX21wYXJhbShwYXJhbV9udW1iZXIsIHZhbHVlKTsKK30KKworI2VuZGlmIC8qICFPTkxZX01TUEFDRVMgKi8KKworc2l6ZV90IGRsbWFsbG9jX3VzYWJsZV9zaXplKHZvaWQqIG1lbSkgeworICBpZiAobWVtICE9IDApIHsKKyAgICBtY2h1bmtwdHIgcCA9IG1lbTJjaHVuayhtZW0pOworICAgIGlmIChjaW51c2UocCkpCisgICAgICByZXR1cm4gY2h1bmtzaXplKHApIC0gb3ZlcmhlYWRfZm9yKHApOworICB9CisgIHJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB1c2VyIG1zcGFjZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgTVNQQUNFUworCitzdGF0aWMgbXN0YXRlIGluaXRfdXNlcl9tc3RhdGUoY2hhciogdGJhc2UsIHNpemVfdCB0c2l6ZSkgeworICBzaXplX3QgbXNpemUgPSBwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zdGF0ZSkpOworICBtY2h1bmtwdHIgbW47CisgIG1jaHVua3B0ciBtc3AgPSBhbGlnbl9hc19jaHVuayh0YmFzZSk7CisgIG1zdGF0ZSBtID0gKG1zdGF0ZSkoY2h1bmsybWVtKG1zcCkpOworICBtZW1zZXQobSwgMCwgbXNpemUpOworICBJTklUSUFMX0xPQ0soJm0tPm11dGV4KTsKKyAgbXNwLT5oZWFkID0gKG1zaXplfFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCk7CisgIG0tPnNlZy5iYXNlID0gbS0+bGVhc3RfYWRkciA9IHRiYXNlOworICBtLT5zZWcuc2l6ZSA9IG0tPmZvb3RwcmludCA9IG0tPm1heF9mb290cHJpbnQgPSB0c2l6ZTsKKyAgbS0+bWFnaWMgPSBtcGFyYW1zLm1hZ2ljOworICBtLT5yZWxlYXNlX2NoZWNrcyA9IE1BWF9SRUxFQVNFX0NIRUNLX1JBVEU7CisgIG0tPm1mbGFncyA9IG1wYXJhbXMuZGVmYXVsdF9tZmxhZ3M7CisgIG0tPmV4dHAgPSAwOworICBtLT5leHRzID0gMDsKKyAgZGlzYWJsZV9jb250aWd1b3VzKG0pOworICBpbml0X2JpbnMobSk7CisgIG1uID0gbmV4dF9jaHVuayhtZW0yY2h1bmsobSkpOworICBpbml0X3RvcChtLCBtbiwgKHNpemVfdCkoKHRiYXNlICsgdHNpemUpIC0gKGNoYXIqKW1uKSAtIFRPUF9GT09UX1NJWkUpOworICBjaGVja190b3BfY2h1bmsobSwgbS0+dG9wKTsKKyAgcmV0dXJuIG07Cit9CisKK21zcGFjZSBjcmVhdGVfbXNwYWNlKHNpemVfdCBjYXBhY2l0eSwgaW50IGxvY2tlZCkgeworICBtc3RhdGUgbSA9IDA7CisgIHNpemVfdCBtc2l6ZTsKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CisgIG1zaXplID0gcGFkX3JlcXVlc3Qoc2l6ZW9mKHN0cnVjdCBtYWxsb2Nfc3RhdGUpKTsKKyAgaWYgKGNhcGFjaXR5IDwgKHNpemVfdCkgLShtc2l6ZSArIFRPUF9GT09UX1NJWkUgKyBtcGFyYW1zLnBhZ2Vfc2l6ZSkpIHsKKyAgICBzaXplX3QgcnMgPSAoKGNhcGFjaXR5ID09IDApPyBtcGFyYW1zLmdyYW51bGFyaXR5IDoKKwkJIChjYXBhY2l0eSArIFRPUF9GT09UX1NJWkUgKyBtc2l6ZSkpOworICAgIHNpemVfdCB0c2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKHJzKTsKKyAgICBjaGFyKiB0YmFzZSA9IChjaGFyKikoQ0FMTF9NTUFQKHRzaXplKSk7CisgICAgaWYgKHRiYXNlICE9IENNRkFJTCkgeworICAgICAgbSA9IGluaXRfdXNlcl9tc3RhdGUodGJhc2UsIHRzaXplKTsKKyAgICAgIG0tPnNlZy5zZmxhZ3MgPSBJU19NTUFQUEVEX0JJVDsKKyAgICAgIHNldF9sb2NrKG0sIGxvY2tlZCk7CisgICAgfQorICB9CisgIHJldHVybiAobXNwYWNlKW07Cit9CisKK21zcGFjZSBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSh2b2lkKiBiYXNlLCBzaXplX3QgY2FwYWNpdHksIGludCBsb2NrZWQpIHsKKyAgbXN0YXRlIG0gPSAwOworICBzaXplX3QgbXNpemU7CisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworICBtc2l6ZSA9IHBhZF9yZXF1ZXN0KHNpemVvZihzdHJ1Y3QgbWFsbG9jX3N0YXRlKSk7CisgIGlmIChjYXBhY2l0eSA+IG1zaXplICsgVE9QX0ZPT1RfU0laRSAmJgorICAgICAgY2FwYWNpdHkgPCAoc2l6ZV90KSAtKG1zaXplICsgVE9QX0ZPT1RfU0laRSArIG1wYXJhbXMucGFnZV9zaXplKSkgeworICAgIG0gPSBpbml0X3VzZXJfbXN0YXRlKChjaGFyKiliYXNlLCBjYXBhY2l0eSk7CisgICAgbS0+c2VnLnNmbGFncyA9IEVYVEVSTl9CSVQ7CisgICAgc2V0X2xvY2sobSwgbG9ja2VkKTsKKyAgfQorICByZXR1cm4gKG1zcGFjZSltOworfQorCitpbnQgbXNwYWNlX21tYXBfbGFyZ2VfY2h1bmtzKG1zcGFjZSBtc3AsIGludCBlbmFibGUpIHsKKyAgaW50IHJldCA9IDA7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAoIVBSRUFDVElPTihtcykpIHsKKyAgICBpZiAodXNlX21tYXAobXMpKQorICAgICAgcmV0ID0gMTsKKyAgICBpZiAoZW5hYmxlKQorICAgICAgZW5hYmxlX21tYXAobXMpOworICAgIGVsc2UKKyAgICAgIGRpc2FibGVfbW1hcChtcyk7CisgICAgUE9TVEFDVElPTihtcyk7CisgIH0KKyAgcmV0dXJuIHJldDsKK30KKworc2l6ZV90IGRlc3Ryb3lfbXNwYWNlKG1zcGFjZSBtc3ApIHsKKyAgc2l6ZV90IGZyZWVkID0gMDsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmIChva19tYWdpYyhtcykpIHsKKyAgICBtc2VnbWVudHB0ciBzcCA9ICZtcy0+c2VnOworICAgIHdoaWxlIChzcCAhPSAwKSB7CisgICAgICBjaGFyKiBiYXNlID0gc3AtPmJhc2U7CisgICAgICBzaXplX3Qgc2l6ZSA9IHNwLT5zaXplOworICAgICAgZmxhZ190IGZsYWcgPSBzcC0+c2ZsYWdzOworICAgICAgc3AgPSBzcC0+bmV4dDsKKyAgICAgIGlmICgoZmxhZyAmIElTX01NQVBQRURfQklUKSAmJiAhKGZsYWcgJiBFWFRFUk5fQklUKSAmJgorCSAgQ0FMTF9NVU5NQVAoYmFzZSwgc2l6ZSkgPT0gMCkKKwlmcmVlZCArPSBzaXplOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICB9CisgIHJldHVybiBmcmVlZDsKK30KKworLyoKKyAgbXNwYWNlIHZlcnNpb25zIG9mIHJvdXRpbmVzIGFyZSBuZWFyLWNsb25lcyBvZiB0aGUgZ2xvYmFsCisgIHZlcnNpb25zLiBUaGlzIGlzIG5vdCBzbyBuaWNlIGJ1dCBiZXR0ZXIgdGhhbiB0aGUgYWx0ZXJuYXRpdmVzLgorKi8KKworCit2b2lkKiBtc3BhY2VfbWFsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBieXRlcykgeworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKCFva19tYWdpYyhtcykpIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICAgIHJldHVybiAwOworICB9CisgIGlmICghUFJFQUNUSU9OKG1zKSkgeworICAgIHZvaWQqIG1lbTsKKyAgICBzaXplX3QgbmI7CisgICAgaWYgKGJ5dGVzIDw9IE1BWF9TTUFMTF9SRVFVRVNUKSB7CisgICAgICBiaW5kZXhfdCBpZHg7CisgICAgICBiaW5tYXBfdCBzbWFsbGJpdHM7CisgICAgICBuYiA9IChieXRlcyA8IE1JTl9SRVFVRVNUKT8gTUlOX0NIVU5LX1NJWkUgOiBwYWRfcmVxdWVzdChieXRlcyk7CisgICAgICBpZHggPSBzbWFsbF9pbmRleChuYik7CisgICAgICBzbWFsbGJpdHMgPSBtcy0+c21hbGxtYXAgPj4gaWR4OworCisgICAgICBpZiAoKHNtYWxsYml0cyAmIDB4M1UpICE9IDApIHsgLyogUmVtYWluZGVybGVzcyBmaXQgdG8gYSBzbWFsbGJpbi4gKi8KKwltY2h1bmtwdHIgYiwgcDsKKwlpZHggKz0gfnNtYWxsYml0cyAmIDE7ICAgICAgIC8qIFVzZXMgbmV4dCBiaW4gaWYgaWR4IGVtcHR5ICovCisJYiA9IHNtYWxsYmluX2F0KG1zLCBpZHgpOworCXAgPSBiLT5mZDsKKwlhc3NlcnQoY2h1bmtzaXplKHApID09IHNtYWxsX2luZGV4MnNpemUoaWR4KSk7CisJdW5saW5rX2ZpcnN0X3NtYWxsX2NodW5rKG1zLCBiLCBwLCBpZHgpOworCXNldF9pbnVzZV9hbmRfcGludXNlKG1zLCBwLCBzbWFsbF9pbmRleDJzaXplKGlkeCkpOworCW1lbSA9IGNodW5rMm1lbShwKTsKKwljaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisJZ290byBwb3N0YWN0aW9uOworICAgICAgfQorCisgICAgICBlbHNlIGlmIChuYiA+IG1zLT5kdnNpemUpIHsKKwlpZiAoc21hbGxiaXRzICE9IDApIHsgLyogVXNlIGNodW5rIGluIG5leHQgbm9uZW1wdHkgc21hbGxiaW4gKi8KKwkgIG1jaHVua3B0ciBiLCBwLCByOworCSAgc2l6ZV90IHJzaXplOworCSAgYmluZGV4X3QgaTsKKwkgIGJpbm1hcF90IGxlZnRiaXRzID0gKHNtYWxsYml0cyA8PCBpZHgpICYgbGVmdF9iaXRzKGlkeDJiaXQoaWR4KSk7CisJICBiaW5tYXBfdCBsZWFzdGJpdCA9IGxlYXN0X2JpdChsZWZ0Yml0cyk7CisJICBjb21wdXRlX2JpdDJpZHgobGVhc3RiaXQsIGkpOworCSAgYiA9IHNtYWxsYmluX2F0KG1zLCBpKTsKKwkgIHAgPSBiLT5mZDsKKwkgIGFzc2VydChjaHVua3NpemUocCkgPT0gc21hbGxfaW5kZXgyc2l6ZShpKSk7CisJICB1bmxpbmtfZmlyc3Rfc21hbGxfY2h1bmsobXMsIGIsIHAsIGkpOworCSAgcnNpemUgPSBzbWFsbF9pbmRleDJzaXplKGkpIC0gbmI7CisJICAvKiBGaXQgaGVyZSBjYW5ub3QgYmUgcmVtYWluZGVybGVzcyBpZiA0Ynl0ZSBzaXplcyAqLworCSAgaWYgKFNJWkVfVF9TSVpFICE9IDQgJiYgcnNpemUgPCBNSU5fQ0hVTktfU0laRSkKKwkgICAgc2V0X2ludXNlX2FuZF9waW51c2UobXMsIHAsIHNtYWxsX2luZGV4MnNpemUoaSkpOworCSAgZWxzZSB7CisJICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobXMsIHAsIG5iKTsKKwkgICAgciA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKwkgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKwkgICAgcmVwbGFjZV9kdihtcywgciwgcnNpemUpOworCSAgfQorCSAgbWVtID0gY2h1bmsybWVtKHApOworCSAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobXMsIG1lbSwgbmIpOworCSAgZ290byBwb3N0YWN0aW9uOworCX0KKworCWVsc2UgaWYgKG1zLT50cmVlbWFwICE9IDAgJiYgKG1lbSA9IHRtYWxsb2Nfc21hbGwobXMsIG5iKSkgIT0gMCkgeworCSAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobXMsIG1lbSwgbmIpOworCSAgZ290byBwb3N0YWN0aW9uOworCX0KKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoYnl0ZXMgPj0gTUFYX1JFUVVFU1QpCisgICAgICBuYiA9IE1BWF9TSVpFX1Q7IC8qIFRvbyBiaWcgdG8gYWxsb2NhdGUuIEZvcmNlIGZhaWx1cmUgKGluIHN5cyBhbGxvYykgKi8KKyAgICBlbHNlIHsKKyAgICAgIG5iID0gcGFkX3JlcXVlc3QoYnl0ZXMpOworICAgICAgaWYgKG1zLT50cmVlbWFwICE9IDAgJiYgKG1lbSA9IHRtYWxsb2NfbGFyZ2UobXMsIG5iKSkgIT0gMCkgeworCWNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsKKwlnb3RvIHBvc3RhY3Rpb247CisgICAgICB9CisgICAgfQorCisgICAgaWYgKG5iIDw9IG1zLT5kdnNpemUpIHsKKyAgICAgIHNpemVfdCByc2l6ZSA9IG1zLT5kdnNpemUgLSBuYjsKKyAgICAgIG1jaHVua3B0ciBwID0gbXMtPmR2OworICAgICAgaWYgKHJzaXplID49IE1JTl9DSFVOS19TSVpFKSB7IC8qIHNwbGl0IGR2ICovCisJbWNodW5rcHRyIHIgPSBtcy0+ZHYgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisJbXMtPmR2c2l6ZSA9IHJzaXplOworCXNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7CisJc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtcywgcCwgbmIpOworICAgICAgfQorICAgICAgZWxzZSB7IC8qIGV4aGF1c3QgZHYgKi8KKwlzaXplX3QgZHZzID0gbXMtPmR2c2l6ZTsKKwltcy0+ZHZzaXplID0gMDsKKwltcy0+ZHYgPSAwOworCXNldF9pbnVzZV9hbmRfcGludXNlKG1zLCBwLCBkdnMpOworICAgICAgfQorICAgICAgbWVtID0gY2h1bmsybWVtKHApOworICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobXMsIG1lbSwgbmIpOworICAgICAgZ290byBwb3N0YWN0aW9uOworICAgIH0KKworICAgIGVsc2UgaWYgKG5iIDwgbXMtPnRvcHNpemUpIHsgLyogU3BsaXQgdG9wICovCisgICAgICBzaXplX3QgcnNpemUgPSBtcy0+dG9wc2l6ZSAtPSBuYjsKKyAgICAgIG1jaHVua3B0ciBwID0gbXMtPnRvcDsKKyAgICAgIG1jaHVua3B0ciByID0gbXMtPnRvcCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKyAgICAgIHItPmhlYWQgPSByc2l6ZSB8IFBJTlVTRV9CSVQ7CisgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG1zLCBwLCBuYik7CisgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7CisgICAgICBjaGVja190b3BfY2h1bmsobXMsIG1zLT50b3ApOworICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobXMsIG1lbSwgbmIpOworICAgICAgZ290byBwb3N0YWN0aW9uOworICAgIH0KKworICAgIG1lbSA9IHN5c19hbGxvYyhtcywgbmIpOworCisgIHBvc3RhY3Rpb246CisgICAgUE9TVEFDVElPTihtcyk7CisgICAgcmV0dXJuIG1lbTsKKyAgfQorCisgIHJldHVybiAwOworfQorCit2b2lkIG1zcGFjZV9mcmVlKG1zcGFjZSBtc3AsIHZvaWQqIG1lbSkgeworICBpZiAobWVtICE9IDApIHsKKyAgICBtY2h1bmtwdHIgcCAgPSBtZW0yY2h1bmsobWVtKTsKKyNpZiBGT09URVJTCisgICAgbXN0YXRlIGZtID0gZ2V0X21zdGF0ZV9mb3IocCk7CisjZWxzZSAvKiBGT09URVJTICovCisgICAgbXN0YXRlIGZtID0gKG1zdGF0ZSltc3A7CisjZW5kaWYgLyogRk9PVEVSUyAqLworICAgIGlmICghb2tfbWFnaWMoZm0pKSB7CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04oZm0sIHApOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIVBSRUFDVElPTihmbSkpIHsKKyAgICAgIGNoZWNrX2ludXNlX2NodW5rKGZtLCBwKTsKKyAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoZm0sIHApICYmIG9rX2NpbnVzZShwKSkpIHsKKwlzaXplX3QgcHNpemUgPSBjaHVua3NpemUocCk7CisJbWNodW5rcHRyIG5leHQgPSBjaHVua19wbHVzX29mZnNldChwLCBwc2l6ZSk7CisJaWYgKCFwaW51c2UocCkpIHsKKwkgIHNpemVfdCBwcmV2c2l6ZSA9IHAtPnByZXZfZm9vdDsKKwkgIGlmICgocHJldnNpemUgJiBJU19NTUFQUEVEX0JJVCkgIT0gMCkgeworCSAgICBwcmV2c2l6ZSAmPSB+SVNfTU1BUFBFRF9CSVQ7CisJICAgIHBzaXplICs9IHByZXZzaXplICsgTU1BUF9GT09UX1BBRDsKKwkgICAgaWYgKENBTExfTVVOTUFQKChjaGFyKilwIC0gcHJldnNpemUsIHBzaXplKSA9PSAwKQorCSAgICAgIGZtLT5mb290cHJpbnQgLT0gcHNpemU7CisJICAgIGdvdG8gcG9zdGFjdGlvbjsKKwkgIH0KKwkgIGVsc2UgeworCSAgICBtY2h1bmtwdHIgcHJldiA9IGNodW5rX21pbnVzX29mZnNldChwLCBwcmV2c2l6ZSk7CisJICAgIHBzaXplICs9IHByZXZzaXplOworCSAgICBwID0gcHJldjsKKwkgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhmbSwgcHJldikpKSB7IC8qIGNvbnNvbGlkYXRlIGJhY2t3YXJkICovCisJICAgICAgaWYgKHAgIT0gZm0tPmR2KSB7CisJCXVubGlua19jaHVuayhmbSwgcCwgcHJldnNpemUpOworCSAgICAgIH0KKwkgICAgICBlbHNlIGlmICgobmV4dC0+aGVhZCAmIElOVVNFX0JJVFMpID09IElOVVNFX0JJVFMpIHsKKwkJZm0tPmR2c2l6ZSA9IHBzaXplOworCQlzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBwc2l6ZSwgbmV4dCk7CisJCWdvdG8gcG9zdGFjdGlvbjsKKwkgICAgICB9CisJICAgIH0KKwkgICAgZWxzZQorCSAgICAgIGdvdG8gZXJyb3JhY3Rpb247CisJICB9CisJfQorCisJaWYgKFJUQ0hFQ0sob2tfbmV4dChwLCBuZXh0KSAmJiBva19waW51c2UobmV4dCkpKSB7CisJICBpZiAoIWNpbnVzZShuZXh0KSkgeyAgLyogY29uc29saWRhdGUgZm9yd2FyZCAqLworCSAgICBpZiAobmV4dCA9PSBmbS0+dG9wKSB7CisJICAgICAgc2l6ZV90IHRzaXplID0gZm0tPnRvcHNpemUgKz0gcHNpemU7CisJICAgICAgZm0tPnRvcCA9IHA7CisJICAgICAgcC0+aGVhZCA9IHRzaXplIHwgUElOVVNFX0JJVDsKKwkgICAgICBpZiAocCA9PSBmbS0+ZHYpIHsKKwkJZm0tPmR2ID0gMDsKKwkJZm0tPmR2c2l6ZSA9IDA7CisJICAgICAgfQorCSAgICAgIGlmIChzaG91bGRfdHJpbShmbSwgdHNpemUpKQorCQlzeXNfdHJpbShmbSwgMCk7CisJICAgICAgZ290byBwb3N0YWN0aW9uOworCSAgICB9CisJICAgIGVsc2UgaWYgKG5leHQgPT0gZm0tPmR2KSB7CisJICAgICAgc2l6ZV90IGRzaXplID0gZm0tPmR2c2l6ZSArPSBwc2l6ZTsKKwkgICAgICBmbS0+ZHYgPSBwOworCSAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBkc2l6ZSk7CisJICAgICAgZ290byBwb3N0YWN0aW9uOworCSAgICB9CisJICAgIGVsc2UgeworCSAgICAgIHNpemVfdCBuc2l6ZSA9IGNodW5rc2l6ZShuZXh0KTsKKwkgICAgICBwc2l6ZSArPSBuc2l6ZTsKKwkgICAgICB1bmxpbmtfY2h1bmsoZm0sIG5leHQsIG5zaXplKTsKKwkgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgcHNpemUpOworCSAgICAgIGlmIChwID09IGZtLT5kdikgeworCQlmbS0+ZHZzaXplID0gcHNpemU7CisJCWdvdG8gcG9zdGFjdGlvbjsKKwkgICAgICB9CisJICAgIH0KKwkgIH0KKwkgIGVsc2UKKwkgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocCwgcHNpemUsIG5leHQpOworCisJICBpZiAoaXNfc21hbGwocHNpemUpKSB7CisJICAgIGluc2VydF9zbWFsbF9jaHVuayhmbSwgcCwgcHNpemUpOworCSAgICBjaGVja19mcmVlX2NodW5rKGZtLCBwKTsKKwkgIH0KKwkgIGVsc2UgeworCSAgICB0Y2h1bmtwdHIgdHAgPSAodGNodW5rcHRyKXA7CisJICAgIGluc2VydF9sYXJnZV9jaHVuayhmbSwgdHAsIHBzaXplKTsKKwkgICAgY2hlY2tfZnJlZV9jaHVuayhmbSwgcCk7CisJICAgIGlmICgtLWZtLT5yZWxlYXNlX2NoZWNrcyA9PSAwKQorCSAgICAgIHJlbGVhc2VfdW51c2VkX3NlZ21lbnRzKGZtKTsKKwkgIH0KKwkgIGdvdG8gcG9zdGFjdGlvbjsKKwl9CisgICAgICB9CisgICAgZXJyb3JhY3Rpb246CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04oZm0sIHApOworICAgIHBvc3RhY3Rpb246CisgICAgICBQT1NUQUNUSU9OKGZtKTsKKyAgICB9CisgIH0KK30KKwordm9pZCogbXNwYWNlX2NhbGxvYyhtc3BhY2UgbXNwLCBzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSkgeworICB2b2lkKiBtZW07CisgIHNpemVfdCByZXEgPSAwOworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKCFva19tYWdpYyhtcykpIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICAgIHJldHVybiAwOworICB9CisgIGlmIChuX2VsZW1lbnRzICE9IDApIHsKKyAgICByZXEgPSBuX2VsZW1lbnRzICogZWxlbV9zaXplOworICAgIGlmICgoKG5fZWxlbWVudHMgfCBlbGVtX3NpemUpICYgfihzaXplX3QpMHhmZmZmKSAmJgorCShyZXEgLyBuX2VsZW1lbnRzICE9IGVsZW1fc2l6ZSkpCisgICAgICByZXEgPSBNQVhfU0laRV9UOyAvKiBmb3JjZSBkb3duc3RyZWFtIGZhaWx1cmUgb24gb3ZlcmZsb3cgKi8KKyAgfQorICBtZW0gPSBpbnRlcm5hbF9tYWxsb2MobXMsIHJlcSk7CisgIGlmIChtZW0gIT0gMCAmJiBjYWxsb2NfbXVzdF9jbGVhcihtZW0yY2h1bmsobWVtKSkpCisgICAgbWVtc2V0KG1lbSwgMCwgcmVxKTsKKyAgcmV0dXJuIG1lbTsKK30KKwordm9pZCogbXNwYWNlX3JlYWxsb2MobXNwYWNlIG1zcCwgdm9pZCogb2xkbWVtLCBzaXplX3QgYnl0ZXMpIHsKKyAgaWYgKG9sZG1lbSA9PSAwKQorICAgIHJldHVybiBtc3BhY2VfbWFsbG9jKG1zcCwgYnl0ZXMpOworI2lmZGVmIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUworICBpZiAoYnl0ZXMgPT0gMCkgeworICAgIG1zcGFjZV9mcmVlKG1zcCwgb2xkbWVtKTsKKyAgICByZXR1cm4gMDsKKyAgfQorI2VuZGlmIC8qIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUyAqLworICBlbHNlIHsKKyNpZiBGT09URVJTCisgICAgbWNodW5rcHRyIHAgID0gbWVtMmNodW5rKG9sZG1lbSk7CisgICAgbXN0YXRlIG1zID0gZ2V0X21zdGF0ZV9mb3IocCk7CisjZWxzZSAvKiBGT09URVJTICovCisgICAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisjZW5kaWYgLyogRk9PVEVSUyAqLworICAgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBpbnRlcm5hbF9yZWFsbG9jKG1zLCBvbGRtZW0sIGJ5dGVzKTsKKyAgfQorfQorCit2b2lkKiBtc3BhY2VfbWVtYWxpZ24obXNwYWNlIG1zcCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSB7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIGludGVybmFsX21lbWFsaWduKG1zLCBhbGlnbm1lbnQsIGJ5dGVzKTsKK30KKwordm9pZCoqIG1zcGFjZV9pbmRlcGVuZGVudF9jYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsCisJCQkJIHNpemVfdCBlbGVtX3NpemUsIHZvaWQqIGNodW5rc1tdKSB7CisgIHNpemVfdCBzeiA9IGVsZW1fc2l6ZTsgLyogc2VydmVzIGFzIDEtZWxlbWVudCBhcnJheSAqLworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKCFva19tYWdpYyhtcykpIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICAgIHJldHVybiAwOworICB9CisgIHJldHVybiBpYWxsb2MobXMsIG5fZWxlbWVudHMsICZzeiwgMywgY2h1bmtzKTsKK30KKwordm9pZCoqIG1zcGFjZV9pbmRlcGVuZGVudF9jb21hbGxvYyhtc3BhY2UgbXNwLCBzaXplX3Qgbl9lbGVtZW50cywKKwkJCQkgICBzaXplX3Qgc2l6ZXNbXSwgdm9pZCogY2h1bmtzW10pIHsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gaWFsbG9jKG1zLCBuX2VsZW1lbnRzLCBzaXplcywgMCwgY2h1bmtzKTsKK30KKworaW50IG1zcGFjZV90cmltKG1zcGFjZSBtc3AsIHNpemVfdCBwYWQpIHsKKyAgaW50IHJlc3VsdCA9IDA7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAob2tfbWFnaWMobXMpKSB7CisgICAgaWYgKCFQUkVBQ1RJT04obXMpKSB7CisgICAgICByZXN1bHQgPSBzeXNfdHJpbShtcywgcGFkKTsKKyAgICAgIFBPU1RBQ1RJT04obXMpOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgbXNwYWNlX21hbGxvY19zdGF0cyhtc3BhY2UgbXNwKSB7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAob2tfbWFnaWMobXMpKSB7CisgICAgaW50ZXJuYWxfbWFsbG9jX3N0YXRzKG1zKTsKKyAgfQorICBlbHNlIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICB9Cit9CisKK3NpemVfdCBtc3BhY2VfZm9vdHByaW50KG1zcGFjZSBtc3ApIHsKKyAgc2l6ZV90IHJlc3VsdCA9IDA7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAob2tfbWFnaWMobXMpKSB7CisgICAgcmVzdWx0ID0gbXMtPmZvb3RwcmludDsKKyAgfQorICBlbHNlIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKworc2l6ZV90IG1zcGFjZV9tYXhfZm9vdHByaW50KG1zcGFjZSBtc3ApIHsKKyAgc2l6ZV90IHJlc3VsdCA9IDA7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAob2tfbWFnaWMobXMpKSB7CisgICAgcmVzdWx0ID0gbXMtPm1heF9mb290cHJpbnQ7CisgIH0KKyAgZWxzZSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisKKyNpZiAhTk9fTUFMTElORk8KK3N0cnVjdCBtYWxsaW5mbyBtc3BhY2VfbWFsbGluZm8obXNwYWNlIG1zcCkgeworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKCFva19tYWdpYyhtcykpIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICB9CisgIHJldHVybiBpbnRlcm5hbF9tYWxsaW5mbyhtcyk7Cit9CisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8KKworc2l6ZV90IG1zcGFjZV91c2FibGVfc2l6ZSh2b2lkKiBtZW0pIHsKKyAgaWYgKG1lbSAhPSAwKSB7CisgICAgbWNodW5rcHRyIHAgPSBtZW0yY2h1bmsobWVtKTsKKyAgICBpZiAoY2ludXNlKHApKQorICAgICAgcmV0dXJuIGNodW5rc2l6ZShwKSAtIG92ZXJoZWFkX2ZvcihwKTsKKyAgfQorICByZXR1cm4gMDsKK30KKworaW50IG1zcGFjZV9tYWxsb3B0KGludCBwYXJhbV9udW1iZXIsIGludCB2YWx1ZSkgeworICByZXR1cm4gY2hhbmdlX21wYXJhbShwYXJhbV9udW1iZXIsIHZhbHVlKTsKK30KKworI2VuZGlmIC8qIE1TUEFDRVMgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gQWx0ZXJuYXRpdmUgTU9SRUNPUkUgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgR3VpZGVsaW5lcyBmb3IgY3JlYXRpbmcgYSBjdXN0b20gdmVyc2lvbiBvZiBNT1JFQ09SRToKKworICAqIEZvciBiZXN0IHBlcmZvcm1hbmNlLCBNT1JFQ09SRSBzaG91bGQgYWxsb2NhdGUgaW4gbXVsdGlwbGVzIG9mIHBhZ2VzaXplLgorICAqIE1PUkVDT1JFIG1heSBhbGxvY2F0ZSBtb3JlIG1lbW9yeSB0aGFuIHJlcXVlc3RlZC4gKE9yIGV2ZW4gbGVzcywKKyAgICAgIGJ1dCB0aGlzIHdpbGwgdXN1YWxseSByZXN1bHQgaW4gYSBtYWxsb2MgZmFpbHVyZS4pCisgICogTU9SRUNPUkUgbXVzdCBub3QgYWxsb2NhdGUgbWVtb3J5IHdoZW4gZ2l2ZW4gYXJndW1lbnQgemVybywgYnV0CisgICAgICBpbnN0ZWFkIHJldHVybiBvbmUgcGFzdCB0aGUgZW5kIGFkZHJlc3Mgb2YgbWVtb3J5IGZyb20gcHJldmlvdXMKKyAgICAgIG5vbnplcm8gY2FsbC4KKyAgKiBGb3IgYmVzdCBwZXJmb3JtYW5jZSwgY29uc2VjdXRpdmUgY2FsbHMgdG8gTU9SRUNPUkUgd2l0aCBwb3NpdGl2ZQorICAgICAgYXJndW1lbnRzIHNob3VsZCByZXR1cm4gaW5jcmVhc2luZyBhZGRyZXNzZXMsIGluZGljYXRpbmcgdGhhdAorICAgICAgc3BhY2UgaGFzIGJlZW4gY29udGlndW91c2x5IGV4dGVuZGVkLgorICAqIEV2ZW4gdGhvdWdoIGNvbnNlY3V0aXZlIGNhbGxzIHRvIE1PUkVDT1JFIG5lZWQgbm90IHJldHVybiBjb250aWd1b3VzCisgICAgICBhZGRyZXNzZXMsIGl0IG11c3QgYmUgT0sgZm9yIG1hbGxvYydlZCBjaHVua3MgdG8gc3BhbiBtdWx0aXBsZQorICAgICAgcmVnaW9ucyBpbiB0aG9zZSBjYXNlcyB3aGVyZSB0aGV5IGRvIGhhcHBlbiB0byBiZSBjb250aWd1b3VzLgorICAqIE1PUkVDT1JFIG5lZWQgbm90IGhhbmRsZSBuZWdhdGl2ZSBhcmd1bWVudHMgLS0gaXQgbWF5IGluc3RlYWQKKyAgICAgIGp1c3QgcmV0dXJuIE1GQUlMIHdoZW4gZ2l2ZW4gbmVnYXRpdmUgYXJndW1lbnRzLgorICAgICAgTmVnYXRpdmUgYXJndW1lbnRzIGFyZSBhbHdheXMgbXVsdGlwbGVzIG9mIHBhZ2VzaXplLiBNT1JFQ09SRQorICAgICAgbXVzdCBub3QgbWlzaW50ZXJwcmV0IG5lZ2F0aXZlIGFyZ3MgYXMgbGFyZ2UgcG9zaXRpdmUgdW5zaWduZWQKKyAgICAgIGFyZ3MuIFlvdSBjYW4gc3VwcHJlc3MgYWxsIHN1Y2ggY2FsbHMgZnJvbSBldmVuIG9jY3VycmluZyBieSBkZWZpbmluZworICAgICAgTU9SRUNPUkVfQ0FOTk9UX1RSSU0sCisKKyAgQXMgYW4gZXhhbXBsZSBhbHRlcm5hdGl2ZSBNT1JFQ09SRSwgaGVyZSBpcyBhIGN1c3RvbSBhbGxvY2F0b3IKKyAga2luZGx5IGNvbnRyaWJ1dGVkIGZvciBwcmUtT1NYIG1hY09TLiAgSXQgdXNlcyB2aXJ0dWFsbHkgYnV0IG5vdAorICBuZWNlc3NhcmlseSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbm9uLXBhZ2VkIG1lbW9yeSAobG9ja2VkIGluLAorICBwcmVzZW50IGFuZCB3b24ndCBnZXQgc3dhcHBlZCBvdXQpLiAgWW91IGNhbiB1c2UgaXQgYnkgdW5jb21tZW50aW5nCisgIHRoaXMgc2VjdGlvbiwgYWRkaW5nIHNvbWUgI2luY2x1ZGVzLCBhbmQgc2V0dGluZyB1cCB0aGUgYXBwcm9wcmlhdGUKKyAgZGVmaW5lcyBhYm92ZToKKworICAgICAgI2RlZmluZSBNT1JFQ09SRSBvc01vcmVDb3JlCisKKyAgVGhlcmUgaXMgYWxzbyBhIHNodXRkb3duIHJvdXRpbmUgdGhhdCBzaG91bGQgc29tZWhvdyBiZSBjYWxsZWQgZm9yCisgIGNsZWFudXAgdXBvbiBwcm9ncmFtIGV4aXQuCisKKyAgI2RlZmluZSBNQVhfUE9PTF9FTlRSSUVTIDEwMAorICAjZGVmaW5lIE1JTklNVU1fTU9SRUNPUkVfU0laRSAgKDY0ICogMTAyNFUpCisgIHN0YXRpYyBpbnQgbmV4dF9vc19wb29sOworICB2b2lkICpvdXJfb3NfcG9vbHNbTUFYX1BPT0xfRU5UUklFU107CisKKyAgdm9pZCAqb3NNb3JlQ29yZShpbnQgc2l6ZSkKKyAgeworICAgIHZvaWQgKnB0ciA9IDA7CisgICAgc3RhdGljIHZvaWQgKnNicmtfdG9wID0gMDsKKworICAgIGlmIChzaXplID4gMCkKKyAgICB7CisgICAgICBpZiAoc2l6ZSA8IE1JTklNVU1fTU9SRUNPUkVfU0laRSkKKwkgc2l6ZSA9IE1JTklNVU1fTU9SRUNPUkVfU0laRTsKKyAgICAgIGlmIChDdXJyZW50RXhlY3V0aW9uTGV2ZWwoKSA9PSBrVGFza0xldmVsKQorCSBwdHIgPSBQb29sQWxsb2NhdGVSZXNpZGVudChzaXplICsgUk1fUEFHRV9TSVpFLCAwKTsKKyAgICAgIGlmIChwdHIgPT0gMCkKKyAgICAgIHsKKwlyZXR1cm4gKHZvaWQgKikgTUZBSUw7CisgICAgICB9CisgICAgICAvLyBzYXZlIHB0cnMgc28gdGhleSBjYW4gYmUgZnJlZWQgZHVyaW5nIGNsZWFudXAKKyAgICAgIG91cl9vc19wb29sc1tuZXh0X29zX3Bvb2xdID0gcHRyOworICAgICAgbmV4dF9vc19wb29sKys7CisgICAgICBwdHIgPSAodm9pZCAqKSAoKCgoc2l6ZV90KSBwdHIpICsgUk1fUEFHRV9NQVNLKSAmIH5STV9QQUdFX01BU0spOworICAgICAgc2Jya190b3AgPSAoY2hhciAqKSBwdHIgKyBzaXplOworICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisgICAgZWxzZSBpZiAoc2l6ZSA8IDApCisgICAgeworICAgICAgLy8gd2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgc2hyaW5rIGJlaGF2aW9yCisgICAgICByZXR1cm4gKHZvaWQgKikgTUZBSUw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICByZXR1cm4gc2Jya190b3A7CisgICAgfQorICB9CisKKyAgLy8gY2xlYW51cCBhbnkgYWxsb2NhdGVkIG1lbW9yeSBwb29scworICAvLyBjYWxsZWQgYXMgbGFzdCB0aGluZyBiZWZvcmUgc2h1dHRpbmcgZG93biBkcml2ZXIKKworICB2b2lkIG9zQ2xlYW51cE1lbSh2b2lkKQorICB7CisgICAgdm9pZCAqKnB0cjsKKworICAgIGZvciAocHRyID0gb3VyX29zX3Bvb2xzOyBwdHIgPCAmb3VyX29zX3Bvb2xzW01BWF9QT09MX0VOVFJJRVNdOyBwdHIrKykKKyAgICAgIGlmICgqcHRyKQorICAgICAgeworCSBQb29sRGVhbGxvY2F0ZSgqcHRyKTsKKwkgKnB0ciA9IDA7CisgICAgICB9CisgIH0KKworKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSGlzdG9yeToKKyAgICBWMi44LjQgKG5vdCB5ZXQgcmVsZWFzZWQpCisgICAgICAqIEFkZCBtc3BhY2VfbW1hcF9sYXJnZV9jaHVua3M7IHRoYW5rcyB0byBKZWFuIEJyb3V3ZXJzCisgICAgICAqIEZpeCBpbnN1ZmZpY2llbnQgc3lzX2FsbG9jIHBhZGRpbmcgd2hlbiB1c2luZyAxNmJ5dGUgYWxpZ25tZW50CisgICAgICAqIEZpeCBiYWQgZXJyb3IgY2hlY2sgaW4gbXNwYWNlX2Zvb3RwcmludAorICAgICAgKiBBZGFwdGF0aW9ucyBmb3IgcHRtYWxsb2MsIGNvdXJ0ZXN5IG9mIFdvbGZyYW0gR2xvZ2VyLgorICAgICAgKiBSZWVudHJhbnQgc3BpbiBsb2NrcywgY291cnRlc3kgb2YgRWFybCBDaGV3IGFuZCBvdGhlcnMKKyAgICAgICogV2luMzIgaW1wcm92ZW1lbnRzLCBjb3VydGVzeSBvZiBOaWFsbCBEb3VnbGFzIGFuZCBFYXJsIENoZXcKKyAgICAgICogQWRkIE5PX1NFR01FTlRfVFJBVkVSU0FMIGFuZCBNQVhfUkVMRUFTRV9DSEVDS19SQVRFIG9wdGlvbnMKKyAgICAgICogRXh0ZW5zaW9uIGhvb2sgaW4gbWFsbG9jX3N0YXRlCisgICAgICAqIFZhcmlvdXMgc21hbGwgYWRqdXN0bWVudHMgdG8gcmVkdWNlIHdhcm5pbmdzIG9uIHNvbWUgY29tcGlsZXJzCisgICAgICAqIFZhcmlvdXMgY29uZmlndXJhdGlvbiBleHRlbnNpb25zL2NoYW5nZXMgZm9yIG1vcmUgcGxhdGZvcm1zLiBUaGFua3MKKwkgdG8gYWxsIHdobyBjb250cmlidXRlZCB0aGVzZS4KKworICAgIFYyLjguMyBUaHUgU2VwIDIyIDExOjE2OjMyIDIwMDUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBBZGQgbWF4X2Zvb3RwcmludCBmdW5jdGlvbnMKKyAgICAgICogRW5zdXJlIGFsbCBhcHByb3ByaWF0ZSBsaXRlcmFscyBhcmUgc2l6ZV90CisgICAgICAqIEZpeCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBwcm9ibGVtIGZvciBzb21lICNkZWZpbmUgc2V0dGluZ3MKKyAgICAgICogQXZvaWQgY29uY2F0ZW5hdGluZyBzZWdtZW50cyB3aXRoIHRoZSBvbmUgcHJvdmlkZWQKKwlpbiBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZQorICAgICAgKiBSZW5hbWUgc29tZSB2YXJpYWJsZXMgdG8gYXZvaWQgY29tcGlsZXIgc2hhZG93aW5nIHdhcm5pbmdzCisgICAgICAqIFVzZSBleHBsaWNpdCBsb2NrIGluaXRpYWxpemF0aW9uLgorICAgICAgKiBCZXR0ZXIgaGFuZGxpbmcgb2Ygc2JyayBpbnRlcmZlcmVuY2UuCisgICAgICAqIFNpbXBsaWZ5IGFuZCBmaXggc2VnbWVudCBpbnNlcnRpb24sIHRyaW1taW5nIGFuZCBtc3BhY2VfZGVzdHJveQorICAgICAgKiBSZWluc3RhdGUgUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTIG9wdGlvbiBmcm9tIDIuNy54CisgICAgICAqIFRoYW5rcyBlc3BlY2lhbGx5IHRvIERlbm5pcyBGbGFuYWdhbiBmb3IgaGVscCBvbiB0aGVzZS4KKworICAgIFYyLjguMiBTdW4gSnVuIDEyIDE2OjAxOjEwIDIwMDUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBGaXggbWVtYWxpZ24gYnJhY2UgZXJyb3IuCisKKyAgICBWMi44LjEgV2VkIEp1biAgOCAxNjoxMTo0NiAyMDA1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogRml4IGltcHJvcGVyICNlbmRpZiBuZXN0aW5nIGluIEMrKworICAgICAgKiBBZGQgZXhwbGljaXQgY2FzdHMgbmVlZGVkIGZvciBDKysKKworICAgIFYyLjguMCBNb24gTWF5IDMwIDE0OjA5OjAyIDIwMDUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBVc2UgdHJlZXMgZm9yIGxhcmdlIGJpbnMKKyAgICAgICogU3VwcG9ydCBtc3BhY2VzCisgICAgICAqIFVzZSBzZWdtZW50cyB0byB1bmlmeSBzYnJrLWJhc2VkIGFuZCBtbWFwLWJhc2VkIHN5c3RlbSBhbGxvY2F0aW9uLAorCXJlbW92aW5nIG5lZWQgZm9yIGVtdWxhdGlvbiBvbiBtb3N0IHBsYXRmb3JtcyB3aXRob3V0IHNicmsuCisgICAgICAqIERlZmF1bHQgc2FmZXR5IGNoZWNrcworICAgICAgKiBPcHRpb25hbCBmb290ZXIgY2hlY2tzLiBUaGFua3MgdG8gV2lsbGlhbSBSb2JlcnRzb24gZm9yIHRoZSBpZGVhLgorICAgICAgKiBJbnRlcm5hbCBjb2RlIHJlZmFjdG9yaW5nCisgICAgICAqIEluY29ycG9yYXRlIHN1Z2dlc3Rpb25zIGFuZCBwbGF0Zm9ybS1zcGVjaWZpYyBjaGFuZ2VzLgorCVRoYW5rcyB0byBEZW5uaXMgRmxhbmFnYW4sIENvbGluIFBsdW1iLCBOaWFsbCBEb3VnbGFzLAorCUFhcm9uIEJhY2htYW5uLCAgRW1lcnkgQmVyZ2VyLCBhbmQgb3RoZXJzLgorICAgICAgKiBTcGVlZCB1cCBub24tZmFzdGJpbiBwcm9jZXNzaW5nIGVub3VnaCB0byByZW1vdmUgZmFzdGJpbnMuCisgICAgICAqIFJlbW92ZSB1c2VsZXNzIGNmcmVlKCkgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggb3RoZXIgYXBwcy4KKyAgICAgICogUmVtb3ZlIGludGVybmFsIG1lbWNweSwgbWVtc2V0LiBDb21waWxlcnMgaGFuZGxlIGJ1aWx0aW5zIGJldHRlci4KKyAgICAgICogUmVtb3ZlIHNvbWUgb3B0aW9ucyB0aGF0IG5vIG9uZSBldmVyIHVzZWQgYW5kIHJlbmFtZSBvdGhlcnMuCisKKyAgICBWMi43LjIgU2F0IEF1ZyAxNyAwOTowNzozMCAyMDAyICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogRml4IG1hbGxvY19zdGF0ZSBiaXRtYXAgYXJyYXkgbWlzZGVjbGFyYXRpb24KKworICAgIFYyLjcuMSBUaHUgSnVsIDI1IDEwOjU4OjAzIDIwMDIgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBBbGxvdyB0dW5pbmcgb2YgRklSU1RfU09SVEVEX0JJTl9TSVpFCisgICAgICAqIFVzZSBQVFJfVUlOVCBhcyB0eXBlIGZvciBhbGwgcHRyLT5pbnQgY2FzdHMuIFRoYW5rcyB0byBKb2huIEJlbG1vbnRlLgorICAgICAgKiBCZXR0ZXIgZGV0ZWN0aW9uIGFuZCBzdXBwb3J0IGZvciBub24tY29udGlndW91c25lc3Mgb2YgTU9SRUNPUkUuCisJVGhhbmtzIHRvIEFuZHJlYXMgTXVlbGxlciwgQ29uYWwgV2Fsc2gsIGFuZCBXb2xmcmFtIEdsb2dlcgorICAgICAgKiBCeXBhc3MgbW9zdCBvZiBtYWxsb2MgaWYgbm8gZnJlZXMuIFRoYW5rcyBUbyBFbWVyeSBCZXJnZXIuCisgICAgICAqIEZpeCBmcmVlaW5nIG9mIG9sZCB0b3Agbm9uLWNvbnRpZ3VvdXMgY2h1bmsgaW0gc3lzbWFsbG9jLgorICAgICAgKiBSYWlzZWQgZGVmYXVsdCB0cmltIGFuZCBtYXAgdGhyZXNob2xkcyB0byAyNTZLLgorICAgICAgKiBGaXggbW1hcC1yZWxhdGVkICNkZWZpbmVzLiBUaGFua3MgdG8gTHVib3MgTHVuYWsuCisgICAgICAqIEZpeCBjb3B5IG1hY3JvczsgYWRkZWQgTEFDS1NfRkNOVExfSC4gVGhhbmtzIHRvIE5lYWwgV2FsZmllbGQuCisgICAgICAqIEJyYW5jaC1mcmVlIGJpbiBjYWxjdWxhdGlvbgorICAgICAgKiBEZWZhdWx0IHRyaW0gYW5kIG1tYXAgdGhyZXNob2xkcyBub3cgMjU2Sy4KKworICAgIFYyLjcuMCBTdW4gTWFyIDExIDE0OjE0OjA2IDIwMDEgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBJbnRyb2R1Y2UgaW5kZXBlbmRlbnRfY29tYWxsb2MgYW5kIGluZGVwZW5kZW50X2NhbGxvYy4KKwlUaGFua3MgdG8gTWljaGFlbCBQYWNob3MgZm9yIG1vdGl2YXRpb24gYW5kIGhlbHAuCisgICAgICAqIE1ha2Ugb3B0aW9uYWwgLmggZmlsZSBhdmFpbGFibGUKKyAgICAgICogQWxsb3cgPiAyR0IgcmVxdWVzdHMgb24gMzJiaXQgc3lzdGVtcy4KKyAgICAgICogbmV3IFdJTjMyIHNicmssIG1tYXAsIG11bm1hcCwgbG9jayBjb2RlIGZyb20gPFdhbHRlckBHZU5lU3lzLWUuZGU+LgorCVRoYW5rcyBhbHNvIHRvIEFuZHJlYXMgTXVlbGxlciA8YS5tdWVsbGVyIGF0IHBhcmFkYXRlYy5kZT4sCisJYW5kIEFub255bW91cy4KKyAgICAgICogQWxsb3cgb3ZlcnJpZGUgb2YgTUFMTE9DX0FMSUdOTUVOVCAoVGhhbmtzIHRvIFJ1dWQgV2FpaiBmb3IKKwloZWxwaW5nIHRlc3QgdGhpcy4pCisgICAgICAqIG1lbWFsaWduOiBjaGVjayBhbGlnbm1lbnQgYXJnCisgICAgICAqIHJlYWxsb2M6IGRvbid0IHRyeSB0byBzaGlmdCBjaHVua3MgYmFja3dhcmRzLCBzaW5jZSB0aGlzCisJbGVhZHMgdG8gIG1vcmUgZnJhZ21lbnRhdGlvbiBpbiBzb21lIHByb2dyYW1zIGFuZCBkb2Vzbid0CisJc2VlbSB0byBoZWxwIGluIGFueSBvdGhlcnMuCisgICAgICAqIENvbGxlY3QgYWxsIGNhc2VzIGluIG1hbGxvYyByZXF1aXJpbmcgc3lzdGVtIG1lbW9yeSBpbnRvIHN5c21hbGxvYworICAgICAgKiBVc2UgbW1hcCBhcyBiYWNrdXAgdG8gc2JyaworICAgICAgKiBQbGFjZSBhbGwgaW50ZXJuYWwgc3RhdGUgaW4gbWFsbG9jX3N0YXRlCisgICAgICAqIEludHJvZHVjZSBmYXN0YmlucyAoYWx0aG91Z2ggc2ltaWxhciB0byAyLjUuMSkKKyAgICAgICogTWFueSBtaW5vciB0dW5pbmdzIGFuZCBjb3NtZXRpYyBpbXByb3ZlbWVudHMKKyAgICAgICogSW50cm9kdWNlIFVTRV9QVUJMSUNfTUFMTE9DX1dSQVBQRVJTLCBVU0VfTUFMTE9DX0xPQ0sKKyAgICAgICogSW50cm9kdWNlIE1BTExPQ19GQUlMVVJFX0FDVElPTiwgTU9SRUNPUkVfQ09OVElHVU9VUworCVRoYW5rcyB0byBUb255IEUuIEJlbm5ldHQgPHRiZW5uZXR0QG52aWRpYS5jb20+IGFuZCBvdGhlcnMuCisgICAgICAqIEluY2x1ZGUgZXJybm8uaCB0byBzdXBwb3J0IGRlZmF1bHQgZmFpbHVyZSBhY3Rpb24uCisKKyAgICBWMi42LjYgU3VuIERlYyAgNSAwNzo0MjoxOSAxOTk5ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogcmV0dXJuIG51bGwgZm9yIG5lZ2F0aXZlIGFyZ3VtZW50cworICAgICAgKiBBZGRlZCBTZXZlcmFsIFdJTjMyIGNsZWFudXBzIGZyb20gTWFydGluIEMuIEZvbmcgPG1jZm9uZyBhdCB5YWhvby5jb20+CisJICogQWRkICdMQUNLU19TWVNfUEFSQU1fSCcgZm9yIHRob3NlIHN5c3RlbXMgd2l0aG91dCAnc3lzL3BhcmFtLmgnCisJICAoZS5nLiBXSU4zMiBwbGF0Zm9ybXMpCisJICogQ2xlYW51cCBoZWFkZXIgZmlsZSBpbmNsdXNpb24gZm9yIFdJTjMyIHBsYXRmb3JtcworCSAqIENsZWFudXAgY29kZSB0byBhdm9pZCBNaWNyb3NvZnQgVmlzdWFsIEMrKyBjb21waWxlciBjb21wbGFpbnRzCisJICogQWRkICdVU0VfRExfUFJFRklYJyB0byBxdWlja2x5IGFsbG93IGNvLWV4aXN0ZW5jZSB3aXRoIGV4aXN0aW5nCisJICAgbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMKKwkgKiBTZXQgJ21hbGxvY19nZXRwYWdlc2l6ZScgZm9yIFdJTjMyIHBsYXRmb3JtcyAobmVlZHMgbW9yZSB3b3JrKQorCSAqIFVzZSAnYXNzZXJ0JyByYXRoZXIgdGhhbiAnQVNTRVJUJyBpbiBXSU4zMiBjb2RlIHRvIGNvbmZvcm0gdG8KKwkgICB1c2FnZSBvZiAnYXNzZXJ0JyBpbiBub24tV0lOMzIgY29kZQorCSAqIEltcHJvdmUgV0lOMzIgJ3NicmsoKScgZW11bGF0aW9uJ3MgJ2ZpbmRSZWdpb24oKScgcm91dGluZSB0bworCSAgIGF2b2lkIGluZmluaXRlIGxvb3AKKyAgICAgICogQWx3YXlzIGNhbGwgJ2ZSRWUoKScgcmF0aGVyIHRoYW4gJ2ZyZWUoKScKKworICAgIFYyLjYuNSBXZWQgSnVuIDE3IDE1OjU3OjMxIDE5OTggIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBGaXhlZCBvcmRlcmluZyBwcm9ibGVtIHdpdGggYm91bmRhcnktc3RhbXBpbmcKKworICAgIFYyLjYuMyBTdW4gTWF5IDE5IDA4OjE3OjU4IDE5OTYgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBBZGRlZCBwdmFsbG9jLCBhcyByZWNvbW1lbmRlZCBieSBILkouIExpdQorICAgICAgKiBBZGRlZCA2NGJpdCBwb2ludGVyIHN1cHBvcnQgbWFpbmx5IGZyb20gV29sZnJhbSBHbG9nZXIKKyAgICAgICogQWRkZWQgYW5vbnltb3VzbHkgZG9uYXRlZCBXSU4zMiBzYnJrIGVtdWxhdGlvbgorICAgICAgKiBNYWxsb2MsIGNhbGxvYywgZ2V0cGFnZXNpemU6IGFkZCBvcHRpbWl6YXRpb25zIGZyb20gUmF5bW9uZCBOaWpzc2VuCisgICAgICAqIG1hbGxvY19leHRlbmRfdG9wOiBmaXggbWFzayBlcnJvciB0aGF0IGNhdXNlZCB3YXN0YWdlIGFmdGVyCisJZm9yZWlnbiBzYnJrcworICAgICAgKiBBZGQgbGludXggbXJlbWFwIHN1cHBvcnQgY29kZSBmcm9tIEhKIExpdQorCisgICAgVjIuNi4yIFR1ZSBEZWMgIDUgMDY6NTI6NTUgMTk5NSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEludGVncmF0ZWQgbW9zdCBkb2N1bWVudGF0aW9uIHdpdGggdGhlIGNvZGUuCisgICAgICAqIEFkZCBzdXBwb3J0IGZvciBtbWFwLCB3aXRoIGhlbHAgZnJvbQorCVdvbGZyYW0gR2xvZ2VyIChHbG9nZXJAbHJ6LnVuaS1tdWVuY2hlbi5kZSkuCisgICAgICAqIFVzZSBsYXN0X3JlbWFpbmRlciBpbiBtb3JlIGNhc2VzLgorICAgICAgKiBQYWNrIGJpbnMgdXNpbmcgaWRlYSBmcm9tICBjb2xpbkBueXgxMC5jcy5kdS5lZHUKKyAgICAgICogVXNlIG9yZGVyZWQgYmlucyBpbnN0ZWFkIG9mIGJlc3QtZml0IHRocmVzaGhvbGQKKyAgICAgICogRWxpbWluYXRlIGJsb2NrLWxvY2FsIGRlY2xzIHRvIHNpbXBsaWZ5IHRyYWNpbmcgYW5kIGRlYnVnZ2luZy4KKyAgICAgICogU3VwcG9ydCBhbm90aGVyIGNhc2Ugb2YgcmVhbGxvYyB2aWEgbW92ZSBpbnRvIHRvcAorICAgICAgKiBGaXggZXJyb3Igb2NjdXJpbmcgd2hlbiBpbml0aWFsIHNicmtfYmFzZSBub3Qgd29yZC1hbGlnbmVkLgorICAgICAgKiBSZWx5IG9uIHBhZ2Ugc2l6ZSBmb3IgdW5pdHMgaW5zdGVhZCBvZiBTQlJLX1VOSVQgdG8KKwlhdm9pZCBzdXJwcmlzZXMgYWJvdXQgc2JyayBhbGlnbm1lbnQgY29udmVudGlvbnMuCisgICAgICAqIEFkZCBtYWxsaW5mbywgbWFsbG9wdC4gVGhhbmtzIHRvIFJheW1vbmQgTmlqc3NlbgorCShyYXltb25kQGVzLmVsZS50dWUubmwpIGZvciB0aGUgc3VnZ2VzdGlvbi4KKyAgICAgICogQWRkIGBwYWQnIGFyZ3VtZW50IHRvIG1hbGxvY190cmltIGFuZCB0b3BfcGFkIG1hbGxvcHQgcGFyYW1ldGVyLgorICAgICAgKiBNb3JlIHByZWNhdXRpb25zIGZvciBjYXNlcyB3aGVyZSBvdGhlciByb3V0aW5lcyBjYWxsIHNicmssCisJY291cnRlc3kgb2YgV29sZnJhbSBHbG9nZXIgKEdsb2dlckBscnoudW5pLW11ZW5jaGVuLmRlKS4KKyAgICAgICogQWRkZWQgbWFjcm9zIGV0Yy4sIGFsbG93aW5nIHVzZSBpbiBsaW51eCBsaWJjIGZyb20KKwlILkouIEx1IChoamxAZ251LmFpLm1pdC5lZHUpCisgICAgICAqIEludmVydGVkIHRoaXMgaGlzdG9yeSBsaXN0CisKKyAgICBWMi42LjEgU2F0IERlYyAgMiAxNDoxMDo1NyAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogUmUtdHVuZWQgYW5kIGZpeGVkIHRvIGJlaGF2ZSBtb3JlIG5pY2VseSB3aXRoIFYyLjYuMCBjaGFuZ2VzLgorICAgICAgKiBSZW1vdmVkIGFsbCBwcmVhbGxvY2F0aW9uIGNvZGUgc2luY2UgdW5kZXIgY3VycmVudCBzY2hlbWUKKwl0aGUgd29yayByZXF1aXJlZCB0byB1bmRvIGJhZCBwcmVhbGxvY2F0aW9ucyBleGNlZWRzCisJdGhlIHdvcmsgc2F2ZWQgaW4gZ29vZCBjYXNlcyBmb3IgbW9zdCB0ZXN0IHByb2dyYW1zLgorICAgICAgKiBObyBsb25nZXIgdXNlIHJldHVybiBsaXN0IG9yIHVuY29uc29saWRhdGVkIGJpbnMgc2luY2UKKwlubyBzY2hlbWUgdXNpbmcgdGhlbSBjb25zaXN0ZW50bHkgb3V0cGVyZm9ybXMgdGhvc2UgdGhhdCBkb24ndAorCWdpdmVuIGFib3ZlIGNoYW5nZXMuCisgICAgICAqIFVzZSBiZXN0IGZpdCBmb3IgdmVyeSBsYXJnZSBjaHVua3MgdG8gcHJldmVudCBzb21lIHdvcnN0LWNhc2VzLgorICAgICAgKiBBZGRlZCBzb21lIHN1cHBvcnQgZm9yIGRlYnVnZ2luZworCisgICAgVjIuNi4wIFNhdCBOb3YgIDQgMDc6MDU6MjMgMTk5NSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIFJlbW92ZWQgZm9vdGVycyB3aGVuIGNodW5rcyBhcmUgaW4gdXNlLiBUaGFua3MgdG8KKwlQYXVsIFdpbHNvbiAod2lsc29uQGNzLnRleGFzLmVkdSkgZm9yIHRoZSBzdWdnZXN0aW9uLgorCisgICAgVjIuNS40IFdlZCBOb3YgIDEgMDc6NTQ6NTEgMTk5NSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEFkZGVkIG1hbGxvY190cmltLCB3aXRoIGhlbHAgZnJvbSBXb2xmcmFtIEdsb2dlcgorCSh3bWdsb0BEZW50Lk1FRC5VbmktTXVlbmNoZW4uREUpLgorCisgICAgVjIuNS4zIFR1ZSBBcHIgMjYgMTA6MTY6MDEgMTk5NCAgRG91ZyBMZWEgIChkbCBhdCBnKQorCisgICAgVjIuNS4yIFR1ZSBBcHIgIDUgMTY6MjA6NDAgMTk5NCAgRG91ZyBMZWEgIChkbCBhdCBnKQorICAgICAgKiByZWFsbG9jOiB0cnkgdG8gZXhwYW5kIGluIGJvdGggZGlyZWN0aW9ucworICAgICAgKiBtYWxsb2M6IHN3YXAgb3JkZXIgb2YgY2xlYW4tYmluIHN0cmF0ZWd5OworICAgICAgKiByZWFsbG9jOiBvbmx5IGNvbmRpdGlvbmFsbHkgZXhwYW5kIGJhY2t3YXJkcworICAgICAgKiBUcnkgbm90IHRvIHNjYXZlbmdlIHVzZWQgYmlucworICAgICAgKiBVc2UgYmluIGNvdW50cyBhcyBhIGd1aWRlIHRvIHByZWFsbG9jYXRpb24KKyAgICAgICogT2NjYXNpb25hbGx5IGJpbiByZXR1cm4gbGlzdCBjaHVua3MgaW4gZmlyc3Qgc2NhbgorICAgICAgKiBBZGQgYSBmZXcgb3B0aW1pemF0aW9ucyBmcm9tIGNvbGluQG55eDEwLmNzLmR1LmVkdQorCisgICAgVjIuNS4xIFNhdCBBdWcgMTQgMTU6NDA6NDMgMTk5MyAgRG91ZyBMZWEgIChkbCBhdCBnKQorICAgICAgKiBmYXN0ZXIgYmluIGNvbXB1dGF0aW9uICYgc2xpZ2h0bHkgZGlmZmVyZW50IGJpbm5pbmcKKyAgICAgICogbWVyZ2VkIGFsbCBjb25zb2xpZGF0aW9ucyB0byBvbmUgcGFydCBvZiBtYWxsb2MgcHJvcGVyCisJIChlbGltaW5hdGluZyBvbGQgbWFsbG9jX2ZpbmRfc3BhY2UgJiBtYWxsb2NfY2xlYW5fYmluKQorICAgICAgKiBTY2FuIDIgcmV0dXJucyBjaHVua3MgKG5vdCBqdXN0IDEpCisgICAgICAqIFByb3BhZ2F0ZSBmYWlsdXJlIGluIHJlYWxsb2MgaWYgbWFsbG9jIHJldHVybnMgMAorICAgICAgKiBBZGQgc3R1ZmYgdG8gYWxsb3cgY29tcGlsYXRpb24gb24gbm9uLUFOU0kgY29tcGlsZXJzCisJICBmcm9tIGtwdkByZXNlYXJjaC5hdHQuY29tCisKKyAgICBWMi41IFNhdCBBdWcgIDcgMDc6NDE6NTkgMTk5MyAgRG91ZyBMZWEgIChkbCBhdCBnLm9zd2Vnby5lZHUpCisgICAgICAqIHJlbW92ZWQgcG90ZW50aWFsIGZvciBvZGQgYWRkcmVzcyBhY2Nlc3MgaW4gcHJldl9jaHVuaworICAgICAgKiByZW1vdmVkIGRlcGVuZGVuY3kgb24gZ2V0cGFnZXNpemUuaAorICAgICAgKiBtaXNjIGNvc21ldGljcyBhbmQgYSBiaXQgbW9yZSBpbnRlcm5hbCBkb2N1bWVudGF0aW9uCisgICAgICAqIGFudGljb3NtZXRpY3M6IG1hbmdsZWQgbmFtZXMgaW4gbWFjcm9zIHRvIGV2YWRlIGRlYnVnZ2VyIHN0cmFuZ2VuZXNzCisgICAgICAqIHRlc3RlZCBvbiBzcGFyYywgaHAtNzAwLCBkZWMtbWlwcywgcnM2MDAwCisJICB3aXRoIGdjYyAmIG5hdGl2ZSBjYyAoaHAsIGRlYyBvbmx5KSBhbGxvd2luZworCSAgRGV0bGVmcyAmIFpvcm4gY29tcGFyaXNvbiBzdHVkeSAoaW4gU0lHUExBTiBOb3RpY2VzLikKKworICAgIFRyaWFsIHZlcnNpb24gRnJpIEF1ZyAyOCAxMzoxNDoyOSAxOTkyICBEb3VnIExlYSAgKGRsIGF0IGcub3N3ZWdvLmVkdSkKKyAgICAgICogQmFzZWQgbG9vc2VseSBvbiBsaWJnKystMS4yWCBtYWxsb2MuIChJdCByZXRhaW5zIHNvbWUgb2YgdGhlIG92ZXJhbGwKKwkgc3RydWN0dXJlIG9mIG9sZCB2ZXJzaW9uLCAgYnV0IG1vc3QgZGV0YWlscyBkaWZmZXIuKQorCisqLworCisKZGlmZiAtLWdpdCBhL2NvbXBhdC9uZWRtYWxsb2MvbmVkbWFsbG9jLmMgYi9jb21wYXQvbmVkbWFsbG9jL25lZG1hbGxvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5YTE3YTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvbmVkbWFsbG9jL25lZG1hbGxvYy5jCkBAIC0wLDAgKzEsOTY2IEBACisvKiBBbHRlcm5hdGl2ZSBtYWxsb2MgaW1wbGVtZW50YXRpb24gZm9yIG11bHRpcGxlIHRocmVhZHMgd2l0aG91dAorbG9jayBjb250ZW50aW9uIGJhc2VkIG9uIGRsbWFsbG9jLiAoQykgMjAwNS0yMDA2IE5pYWxsIERvdWdsYXMKKworQm9vc3QgU29mdHdhcmUgTGljZW5zZSAtIFZlcnNpb24gMS4wIC0gQXVndXN0IDE3dGgsIDIwMDMKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9uCitvYnRhaW5pbmcgYSBjb3B5IG9mIHRoZSBzb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gY292ZXJlZCBieQordGhpcyBsaWNlbnNlICh0aGUgIlNvZnR3YXJlIikgdG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIGRpc3RyaWJ1dGUsCitleGVjdXRlLCBhbmQgdHJhbnNtaXQgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZQorU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgdGhpcmQtcGFydGllcyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8KK2RvIHNvLCBhbGwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nOgorCitUaGUgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIFNvZnR3YXJlIGFuZCB0aGlzIGVudGlyZSBzdGF0ZW1lbnQsIGluY2x1ZGluZwordGhlIGFib3ZlIGxpY2Vuc2UgZ3JhbnQsIHRoaXMgcmVzdHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKK211c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGluIHdob2xlIG9yIGluIHBhcnQsIGFuZAorYWxsIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNvZnR3YXJlLCB1bmxlc3Mgc3VjaCBjb3BpZXMgb3IgZGVyaXZhdGl2ZQord29ya3MgYXJlIHNvbGVseSBpbiB0aGUgZm9ybSBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgb2JqZWN0IGNvZGUgZ2VuZXJhdGVkIGJ5CithIHNvdXJjZSBsYW5ndWFnZSBwcm9jZXNzb3IuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKK1NIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBBTllPTkUgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSBCRSBMSUFCTEUKK0ZPUiBBTlkgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCitERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisqLworCisjaWZkZWYgX01TQ19WRVIKKy8qIEVuYWJsZSBmdWxsIGFsaWFzaW5nIG9uIE1TVkMgKi8KKy8qI3ByYWdtYSBvcHRpbWl6ZSgiYSIsIG9uKSovCisjZW5kaWYKKworLyojZGVmaW5lIEZVTExTQU5JVFlDSEVDS1MqLworCisjaW5jbHVkZSAibmVkbWFsbG9jLmgiCisjaWYgZGVmaW5lZChXSU4zMikKKyAjaW5jbHVkZSA8bWFsbG9jLmg+CisjZW5kaWYKKyNkZWZpbmUgTVNQQUNFUyAxCisjZGVmaW5lIE9OTFlfTVNQQUNFUyAxCisjaWZuZGVmIFVTRV9MT0NLUworICNkZWZpbmUgVVNFX0xPQ0tTIDEKKyNlbmRpZgorI2RlZmluZSBGT09URVJTIDEgICAgICAgICAgIC8qIE5lZWQgdG8gZW5hYmxlIGZvb3RlcnMgc28gZnJlZXMgbG9jayB0aGUgcmlnaHQgbXNwYWNlICovCisjdW5kZWYgREVCVUcJCQkJLyogZGxtYWxsb2Mgd2FudHMgREVCVUcgZWl0aGVyIDAgb3IgMSAqLworI2lmZGVmIF9ERUJVRworICNkZWZpbmUgREVCVUcgMQorI2Vsc2UKKyAjZGVmaW5lIERFQlVHIDAKKyNlbmRpZgorI2lmZGVmIE5ERUJVRyAgICAgICAgICAgICAgIC8qIERpc2FibGUgYXNzZXJ0IGNoZWNraW5nIG9uIHJlbGVhc2UgYnVpbGRzICovCisgI3VuZGVmIERFQlVHCisjZW5kaWYKKy8qIFRoZSBkZWZhdWx0IG9mIDY0S2IgbWVhbnMgd2Ugc3BlbmQgdG9vIG11Y2ggdGltZSBrZXJuZWwtc2lkZSAqLworI2lmbmRlZiBERUZBVUxUX0dSQU5VTEFSSVRZCisjZGVmaW5lIERFRkFVTFRfR1JBTlVMQVJJVFkgKDEqMTAyNCoxMDI0KQorI2VuZGlmCisvKiNkZWZpbmUgVVNFX1NQSU5fTE9DS1MgMCovCisKKworLyojZGVmaW5lIEZPUkNFSU5MSU5FKi8KKyNpbmNsdWRlICJtYWxsb2MuYy5oIgorI2lmZGVmIE5ERUJVRyAgICAgICAgICAgICAgIC8qIERpc2FibGUgYXNzZXJ0IGNoZWNraW5nIG9uIHJlbGVhc2UgYnVpbGRzICovCisgI3VuZGVmIERFQlVHCisjZW5kaWYKKworLyogVGhlIG1heGltdW0gY29uY3VycmVudCB0aHJlYWRzIGluIGEgcG9vbCBwb3NzaWJsZSAqLworI2lmbmRlZiBNQVhUSFJFQURTSU5QT09MCisjZGVmaW5lIE1BWFRIUkVBRFNJTlBPT0wgMTYKKyNlbmRpZgorLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZGNhY2hlcyB3aGljaCBjYW4gYmUgYWxsb2NhdGVkICovCisjaWZuZGVmIFRIUkVBRENBQ0hFTUFYQ0FDSEVTCisjZGVmaW5lIFRIUkVBRENBQ0hFTUFYQ0FDSEVTIDI1NgorI2VuZGlmCisvKiBUaGUgbWF4aW11bSBzaXplIHRvIGJlIGFsbG9jYXRlZCBmcm9tIHRoZSB0aHJlYWQgY2FjaGUgKi8KKyNpZm5kZWYgVEhSRUFEQ0FDSEVNQVgKKyNkZWZpbmUgVEhSRUFEQ0FDSEVNQVggODE5MgorI2VuZGlmCisjaWYgMAorLyogVGhlIG51bWJlciBvZiBjYWNoZSBlbnRyaWVzIGZvciBmaW5lciBncmFpbmVkIGJpbnMuIFRoaXMgaXMgKHRvcGJpdHBvcyhUSFJFQURDQUNIRU1BWCktNCkqMiAqLworI2RlZmluZSBUSFJFQURDQUNIRU1BWEJJTlMgKCgxMy00KSoyKQorI2Vsc2UKKy8qIFRoZSBudW1iZXIgb2YgY2FjaGUgZW50cmllcy4gVGhpcyBpcyAodG9wYml0cG9zKFRIUkVBRENBQ0hFTUFYKS00KSAqLworI2RlZmluZSBUSFJFQURDQUNIRU1BWEJJTlMgKDEzLTQpCisjZW5kaWYKKy8qIFBvaW50IGF0IHdoaWNoIHRoZSBmcmVlIHNwYWNlIGluIGEgdGhyZWFkIGNhY2hlIGlzIGdhcmJhZ2UgY29sbGVjdGVkICovCisjaWZuZGVmIFRIUkVBRENBQ0hFTUFYRlJFRVNQQUNFCisjZGVmaW5lIFRIUkVBRENBQ0hFTUFYRlJFRVNQQUNFICg1MTIqMTAyNCkKKyNlbmRpZgorCisKKyNpZmRlZiBXSU4zMgorICNkZWZpbmUgVExTVkFSCQkJRFdPUkQKKyAjZGVmaW5lIFRMU0FMTE9DKGspCSgqKGspPVRsc0FsbG9jKCksIFRMU19PVVRfT0ZfSU5ERVhFUz09KihrKSkKKyAjZGVmaW5lIFRMU0ZSRUUoaykJCSghVGxzRnJlZShrKSkKKyAjZGVmaW5lIFRMU0dFVChrKQkJVGxzR2V0VmFsdWUoaykKKyAjZGVmaW5lIFRMU1NFVChrLCBhKQkoIVRsc1NldFZhbHVlKGssIGEpKQorICNpZmRlZiBERUJVRworc3RhdGljIExQVk9JRCBDaGtlZFRsc0dldFZhbHVlKERXT1JEIGlkeCkKK3sKKwlMUFZPSUQgcmV0PVRsc0dldFZhbHVlKGlkeCk7CisJYXNzZXJ0KFNfT0s9PUdldExhc3RFcnJvcigpKTsKKwlyZXR1cm4gcmV0OworfQorICAjdW5kZWYgVExTR0VUCisgICNkZWZpbmUgVExTR0VUKGspIENoa2VkVGxzR2V0VmFsdWUoaykKKyAjZW5kaWYKKyNlbHNlCisgI2RlZmluZSBUTFNWQVIJCQlwdGhyZWFkX2tleV90CisgI2RlZmluZSBUTFNBTExPQyhrKQlwdGhyZWFkX2tleV9jcmVhdGUoaywgMCkKKyAjZGVmaW5lIFRMU0ZSRUUoaykJCXB0aHJlYWRfa2V5X2RlbGV0ZShrKQorICNkZWZpbmUgVExTR0VUKGspCQlwdGhyZWFkX2dldHNwZWNpZmljKGspCisgI2RlZmluZSBUTFNTRVQoaywgYSkJcHRocmVhZF9zZXRzcGVjaWZpYyhrLCBhKQorI2VuZGlmCisKKyNpZiAwCisvKiBPbmx5IGVuYWJsZSBpZiB0ZXN0aW5nIHdpdGggdmFsZ3JpbmQuIENhdXNlcyBtaXNvcGVyYXRpb24gKi8KKyNkZWZpbmUgbXNwYWNlX21hbGxvYyhwLCBzKSBtYWxsb2MocykKKyNkZWZpbmUgbXNwYWNlX3JlYWxsb2MocCwgbSwgcykgcmVhbGxvYyhtLCBzKQorI2RlZmluZSBtc3BhY2VfY2FsbG9jKHAsIG4sIHMpIGNhbGxvYyhuLCBzKQorI2RlZmluZSBtc3BhY2VfZnJlZShwLCBtKSBmcmVlKG0pCisjZW5kaWYKKworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKKyNpZiAhZGVmaW5lZChOT19ORURfTkFNRVNQQUNFKQorbmFtZXNwYWNlIG5lZGFsbG9jIHsKKyNlbHNlCitleHRlcm4gIkMiIHsKKyNlbmRpZgorI2VuZGlmCisKK3NpemVfdCBuZWRibGtzaXplKHZvaWQgKm1lbSkgVEhST1dTUEVDCit7CisjaWYgMAorCS8qIE9ubHkgZW5hYmxlIGlmIHRlc3Rpbmcgd2l0aCB2YWxncmluZC4gQ2F1c2VzIG1pc29wZXJhdGlvbiAqLworCXJldHVybiBUSFJFQURDQUNIRU1BWDsKKyNlbHNlCisJaWYobWVtKQorCXsKKwkJbWNodW5rcHRyIHA9bWVtMmNodW5rKG1lbSk7CisJCWFzc2VydChjaW51c2UocCkpOwkvKiBJZiB0aGlzIGZhaWxzLCBzb21lb25lIHRyaWVkIHRvIGZyZWUgYSBibG9jayB0d2ljZSAqLworCQlpZihjaW51c2UocCkpCisJCQlyZXR1cm4gY2h1bmtzaXplKHApLW92ZXJoZWFkX2ZvcihwKTsKKwl9CisJcmV0dXJuIDA7CisjZW5kaWYKK30KKwordm9pZCBuZWRzZXR2YWx1ZSh2b2lkICp2KSBUSFJPV1NQRUMJCQkJCXsgbmVkcHNldHZhbHVlKDAsIHYpOyB9Cit2b2lkICogbmVkbWFsbG9jKHNpemVfdCBzaXplKSBUSFJPV1NQRUMJCQkJeyByZXR1cm4gbmVkcG1hbGxvYygwLCBzaXplKTsgfQordm9pZCAqIG5lZGNhbGxvYyhzaXplX3Qgbm8sIHNpemVfdCBzaXplKSBUSFJPV1NQRUMJeyByZXR1cm4gbmVkcGNhbGxvYygwLCBubywgc2l6ZSk7IH0KK3ZvaWQgKiBuZWRyZWFsbG9jKHZvaWQgKm1lbSwgc2l6ZV90IHNpemUpIFRIUk9XU1BFQwl7IHJldHVybiBuZWRwcmVhbGxvYygwLCBtZW0sIHNpemUpOyB9Cit2b2lkICAgbmVkZnJlZSh2b2lkICptZW0pIFRIUk9XU1BFQwkJCQkJeyBuZWRwZnJlZSgwLCBtZW0pOyB9Cit2b2lkICogbmVkbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSBUSFJPV1NQRUMgeyByZXR1cm4gbmVkcG1lbWFsaWduKDAsIGFsaWdubWVudCwgYnl0ZXMpOyB9CisjaWYgIU5PX01BTExJTkZPCitzdHJ1Y3QgbWFsbGluZm8gbmVkbWFsbGluZm8odm9pZCkgVEhST1dTUEVDCQkJeyByZXR1cm4gbmVkcG1hbGxpbmZvKDApOyB9CisjZW5kaWYKK2ludCAgICBuZWRtYWxsb3B0KGludCBwYXJubywgaW50IHZhbHVlKSBUSFJPV1NQRUMJeyByZXR1cm4gbmVkcG1hbGxvcHQoMCwgcGFybm8sIHZhbHVlKTsgfQoraW50ICAgIG5lZG1hbGxvY190cmltKHNpemVfdCBwYWQpIFRIUk9XU1BFQwkJCXsgcmV0dXJuIG5lZHBtYWxsb2NfdHJpbSgwLCBwYWQpOyB9Cit2b2lkICAgbmVkbWFsbG9jX3N0YXRzKCkgVEhST1dTUEVDCQkJCQl7IG5lZHBtYWxsb2Nfc3RhdHMoMCk7IH0KK3NpemVfdCBuZWRtYWxsb2NfZm9vdHByaW50KCkgVEhST1dTUEVDCQkJCXsgcmV0dXJuIG5lZHBtYWxsb2NfZm9vdHByaW50KDApOyB9Cit2b2lkICoqbmVkaW5kZXBlbmRlbnRfY2FsbG9jKHNpemVfdCBlbGVtc25vLCBzaXplX3QgZWxlbXNpemUsIHZvaWQgKipjaHVua3MpIFRIUk9XU1BFQwl7IHJldHVybiBuZWRwaW5kZXBlbmRlbnRfY2FsbG9jKDAsIGVsZW1zbm8sIGVsZW1zaXplLCBjaHVua3MpOyB9Cit2b2lkICoqbmVkaW5kZXBlbmRlbnRfY29tYWxsb2Moc2l6ZV90IGVsZW1zLCBzaXplX3QgKnNpemVzLCB2b2lkICoqY2h1bmtzKSBUSFJPV1NQRUMJeyByZXR1cm4gbmVkcGluZGVwZW5kZW50X2NvbWFsbG9jKDAsIGVsZW1zLCBzaXplcywgY2h1bmtzKTsgfQorCitzdHJ1Y3QgdGhyZWFkY2FjaGVibGtfdDsKK3R5cGVkZWYgc3RydWN0IHRocmVhZGNhY2hlYmxrX3QgdGhyZWFkY2FjaGVibGs7CitzdHJ1Y3QgdGhyZWFkY2FjaGVibGtfdAorewkvKiBLZWVwIGxlc3MgdGhhbiAxNiBieXRlcyBvbiAzMiBiaXQgc3lzdGVtcyBhbmQgMzIgYnl0ZXMgb24gNjQgYml0IHN5c3RlbXMgKi8KKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJdW5zaWduZWQgaW50IG1hZ2ljOworI2VuZGlmCisJdW5zaWduZWQgaW50IGxhc3RVc2VkLCBzaXplOworCXRocmVhZGNhY2hlYmxrICpuZXh0LCAqcHJldjsKK307Cit0eXBlZGVmIHN0cnVjdCB0aHJlYWRjYWNoZV90Cit7CisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCXVuc2lnbmVkIGludCBtYWdpYzE7CisjZW5kaWYKKwlpbnQgbXltc3BhY2U7CQkJCQkJLyogTGFzdCBtc3BhY2UgZW50cnkgdGhpcyB0aHJlYWQgdXNlZCAqLworCWxvbmcgdGhyZWFkaWQ7CisJdW5zaWduZWQgaW50IG1hbGxvY3MsIGZyZWVzLCBzdWNjZXNzZXM7CisJc2l6ZV90IGZyZWVJbkNhY2hlOwkJCQkJLyogSG93IG11Y2ggZnJlZSBzcGFjZSBpcyBzdG9yZWQgaW4gdGhpcyBjYWNoZSAqLworCXRocmVhZGNhY2hlYmxrICpiaW5zWyhUSFJFQURDQUNIRU1BWEJJTlMrMSkqMl07CisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCXVuc2lnbmVkIGludCBtYWdpYzI7CisjZW5kaWYKK30gdGhyZWFkY2FjaGU7CitzdHJ1Y3QgbmVkcG9vbF90Cit7CisJTUxPQ0tfVCBtdXRleDsKKwl2b2lkICp1c2VydmFsdWU7CisJaW50IHRocmVhZHM7CQkJCQkJLyogTWF4IGVudHJpZXMgaW4gbSB0byB1c2UgKi8KKwl0aHJlYWRjYWNoZSAqY2FjaGVzW1RIUkVBRENBQ0hFTUFYQ0FDSEVTXTsKKwlUTFNWQVIgbXljYWNoZTsJCQkJCQkvKiBUaHJlYWQgY2FjaGUgZm9yIHRoaXMgdGhyZWFkLiAwIGZvciB1bnNldCwgbmVnYXRpdmUgZm9yIHVzZSBtc3BhY2UtMSBkaXJlY3RseSwgb3RoZXJ3aXNlIGlzIGNhY2hlLTEgKi8KKwltc3RhdGUgbVtNQVhUSFJFQURTSU5QT09MKzFdOwkJLyogbXNwYWNlIGVudHJpZXMgZm9yIHRoaXMgcG9vbCAqLworfTsKK3N0YXRpYyBuZWRwb29sIHN5c3Bvb2w7CisKK3N0YXRpYyBGT1JDRUlOTElORSB1bnNpZ25lZCBpbnQgc2l6ZTJiaW5pZHgoc2l6ZV90IF9zaXplKSBUSFJPV1NQRUMKK3sJLyogOD0xMDAwCTE2PTEwMDAwCTIwPTEwMTAwCTI0PTExMDAwCTMyPTEwMDAwMAk0OD0xMTAwMDAJNDA5Nj0xMDAwMDAwMDAwMDAwICovCisJdW5zaWduZWQgaW50IHRvcGJpdCwgc2l6ZT0odW5zaWduZWQgaW50KShfc2l6ZT4+NCk7CisJLyogMTY9MQkJMjA9MQkyND0xCTMyPTEwCTQ4PTExCTY0PTEwMAk5Nj0xMTAJMTI4PTEwMDAJNDA5Nj0xMDAwMDAwMDAgKi8KKworI2lmIGRlZmluZWQoX19HTlVDX18pCisJdG9wYml0ID0gc2l6ZW9mKHNpemUpKl9fQ0hBUl9CSVRfXyAtIDEgLSBfX2J1aWx0aW5fY2x6KHNpemUpOworI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVI+PTEzMDAKKwl7CisJICAgIHVuc2lnbmVkIGxvbmcgYnNyVG9wQml0OworCisJICAgIF9CaXRTY2FuUmV2ZXJzZSgmYnNyVG9wQml0LCBzaXplKTsKKworCSAgICB0b3BiaXQgPSBic3JUb3BCaXQ7CisJfQorI2Vsc2UKKyNpZiAwCisJdW5pb24geworCQl1bnNpZ25lZCBhc0ludFsyXTsKKwkJZG91YmxlIGFzRG91YmxlOworCX07CisJaW50IG47CisKKwlhc0RvdWJsZSA9IChkb3VibGUpc2l6ZSArIDAuNTsKKwl0b3BiaXQgPSAoYXNJbnRbIUZPWF9CSUdFTkRJQU5dID4+IDIwKSAtIDEwMjM7CisjZWxzZQorCXsKKwkJdW5zaWduZWQgaW50IHg9c2l6ZTsKKwkJeCA9IHggfCAoeCA+PiAxKTsKKwkJeCA9IHggfCAoeCA+PiAyKTsKKwkJeCA9IHggfCAoeCA+PiA0KTsKKwkJeCA9IHggfCAoeCA+PiA4KTsKKwkJeCA9IHggfCAoeCA+PjE2KTsKKwkJeCA9IH54OworCQl4ID0geCAtICgoeCA+PiAxKSAmIDB4NTU1NTU1NTUpOworCQl4ID0gKHggJiAweDMzMzMzMzMzKSArICgoeCA+PiAyKSAmIDB4MzMzMzMzMzMpOworCQl4ID0gKHggKyAoeCA+PiA0KSkgJiAweDBGMEYwRjBGOworCQl4ID0geCArICh4IDw8IDgpOworCQl4ID0geCArICh4IDw8IDE2KTsKKwkJdG9wYml0PTMxIC0gKHggPj4gMjQpOworCX0KKyNlbmRpZgorI2VuZGlmCisJcmV0dXJuIHRvcGJpdDsKK30KKworCisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworc3RhdGljIHZvaWQgdGNzYW5pdHljaGVjayh0aHJlYWRjYWNoZWJsayAqKnB0cikgVEhST1dTUEVDCit7CisJYXNzZXJ0KChwdHJbMF0gJiYgcHRyWzFdKSB8fCAoIXB0clswXSAmJiAhcHRyWzFdKSk7CisJaWYocHRyWzBdICYmIHB0clsxXSkKKwl7CisJCWFzc2VydChuZWRibGtzaXplKHB0clswXSk+PXNpemVvZih0aHJlYWRjYWNoZWJsaykpOworCQlhc3NlcnQobmVkYmxrc2l6ZShwdHJbMV0pPj1zaXplb2YodGhyZWFkY2FjaGVibGspKTsKKwkJYXNzZXJ0KCoodW5zaWduZWQgaW50ICopICJORUROIj09cHRyWzBdLT5tYWdpYyk7CisJCWFzc2VydCgqKHVuc2lnbmVkIGludCAqKSAiTkVETiI9PXB0clsxXS0+bWFnaWMpOworCQlhc3NlcnQoIXB0clswXS0+cHJldik7CisJCWFzc2VydCghcHRyWzFdLT5uZXh0KTsKKwkJaWYocHRyWzBdPT1wdHJbMV0pCisJCXsKKwkJCWFzc2VydCghcHRyWzBdLT5uZXh0KTsKKwkJCWFzc2VydCghcHRyWzFdLT5wcmV2KTsKKwkJfQorCX0KK30KK3N0YXRpYyB2b2lkIHRjZnVsbHNhbml0eWNoZWNrKHRocmVhZGNhY2hlICp0YykgVEhST1dTUEVDCit7CisJdGhyZWFkY2FjaGVibGsgKip0Y2JwdHI9dGMtPmJpbnM7CisJaW50IG47CisJZm9yKG49MDsgbjw9VEhSRUFEQ0FDSEVNQVhCSU5TOyBuKyssIHRjYnB0cis9MikKKwl7CisJCXRocmVhZGNhY2hlYmxrICpiLCAqb2I9MDsKKwkJdGNzYW5pdHljaGVjayh0Y2JwdHIpOworCQlmb3IoYj10Y2JwdHJbMF07IGI7IG9iPWIsIGI9Yi0+bmV4dCkKKwkJeworCQkJYXNzZXJ0KCoodW5zaWduZWQgaW50ICopICJORUROIj09Yi0+bWFnaWMpOworCQkJYXNzZXJ0KCFvYiB8fCBvYi0+bmV4dD09Yik7CisJCQlhc3NlcnQoIW9iIHx8IGItPnByZXY9PW9iKTsKKwkJfQorCX0KK30KKyNlbmRpZgorCitzdGF0aWMgTk9JTkxJTkUgdm9pZCBSZW1vdmVDYWNoZUVudHJpZXMobmVkcG9vbCAqcCwgdGhyZWFkY2FjaGUgKnRjLCB1bnNpZ25lZCBpbnQgYWdlKSBUSFJPV1NQRUMKK3sKKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJdGNmdWxsc2FuaXR5Y2hlY2sodGMpOworI2VuZGlmCisJaWYodGMtPmZyZWVJbkNhY2hlKQorCXsKKwkJdGhyZWFkY2FjaGVibGsgKip0Y2JwdHI9dGMtPmJpbnM7CisJCWludCBuOworCQlmb3Iobj0wOyBuPD1USFJFQURDQUNIRU1BWEJJTlM7IG4rKywgdGNicHRyKz0yKQorCQl7CisJCQl0aHJlYWRjYWNoZWJsayAqKnRjYj10Y2JwdHIrMTsJCS8qIGNvbWUgZnJvbSBvbGRlc3QgZW5kIG9mIGxpc3QgKi8KKwkJCS8qdGNzYW5pdHljaGVjayh0Y2JwdHIpOyovCisJCQlmb3IoOyAqdGNiICYmIHRjLT5mcmVlcy0oKnRjYiktPmxhc3RVc2VkPj1hZ2U7ICkKKwkJCXsKKwkJCQl0aHJlYWRjYWNoZWJsayAqZj0qdGNiOworCQkJCXNpemVfdCBibGtzaXplPWYtPnNpemU7IC8qbmVkYmxrc2l6ZShmKTsqLworCQkJCWFzc2VydChibGtzaXplPD1uZWRibGtzaXplKGYpKTsKKwkJCQlhc3NlcnQoYmxrc2l6ZSk7CisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCQkJCWFzc2VydCgqKHVuc2lnbmVkIGludCAqKSAiTkVETiI9PSgqdGNiKS0+bWFnaWMpOworI2VuZGlmCisJCQkJKnRjYj0oKnRjYiktPnByZXY7CisJCQkJaWYoKnRjYikKKwkJCQkJKCp0Y2IpLT5uZXh0PTA7CisJCQkJZWxzZQorCQkJCQkqdGNicHRyPTA7CisJCQkJdGMtPmZyZWVJbkNhY2hlLT1ibGtzaXplOworCQkJCWFzc2VydCgobG9uZykgdGMtPmZyZWVJbkNhY2hlPj0wKTsKKwkJCQltc3BhY2VfZnJlZSgwLCBmKTsKKwkJCQkvKnRjc2FuaXR5Y2hlY2sodGNicHRyKTsqLworCQkJfQorCQl9CisJfQorI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwl0Y2Z1bGxzYW5pdHljaGVjayh0Yyk7CisjZW5kaWYKK30KK3N0YXRpYyB2b2lkIERlc3Ryb3lDYWNoZXMobmVkcG9vbCAqcCkgVEhST1dTUEVDCit7CisJaWYocC0+Y2FjaGVzKQorCXsKKwkJdGhyZWFkY2FjaGUgKnRjOworCQlpbnQgbjsKKwkJZm9yKG49MDsgbjxUSFJFQURDQUNIRU1BWENBQ0hFUzsgbisrKQorCQl7CisJCQlpZigodGM9cC0+Y2FjaGVzW25dKSkKKwkJCXsKKwkJCQl0Yy0+ZnJlZXMrKzsKKwkJCQlSZW1vdmVDYWNoZUVudHJpZXMocCwgdGMsIDApOworCQkJCWFzc2VydCghdGMtPmZyZWVJbkNhY2hlKTsKKwkJCQl0Yy0+bXltc3BhY2U9LTE7CisJCQkJdGMtPnRocmVhZGlkPTA7CisJCQkJbXNwYWNlX2ZyZWUoMCwgdGMpOworCQkJCXAtPmNhY2hlc1tuXT0wOworCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgTk9JTkxJTkUgdGhyZWFkY2FjaGUgKkFsbG9jQ2FjaGUobmVkcG9vbCAqcCkgVEhST1dTUEVDCit7CisJdGhyZWFkY2FjaGUgKnRjPTA7CisJaW50IG4sIGVuZDsKKwlBQ1FVSVJFX0xPQ0soJnAtPm11dGV4KTsKKwlmb3Iobj0wOyBuPFRIUkVBRENBQ0hFTUFYQ0FDSEVTICYmIHAtPmNhY2hlc1tuXTsgbisrKTsKKwlpZihUSFJFQURDQUNIRU1BWENBQ0hFUz09bikKKwl7CS8qIExpc3QgZXhoYXVzdGVkLCBzbyBkaXNhYmxlIGZvciB0aGlzIHRocmVhZCAqLworCQlSRUxFQVNFX0xPQ0soJnAtPm11dGV4KTsKKwkJcmV0dXJuIDA7CisJfQorCXRjPXAtPmNhY2hlc1tuXT0odGhyZWFkY2FjaGUgKikgbXNwYWNlX2NhbGxvYyhwLT5tWzBdLCAxLCBzaXplb2YodGhyZWFkY2FjaGUpKTsKKwlpZighdGMpCisJeworCQlSRUxFQVNFX0xPQ0soJnAtPm11dGV4KTsKKwkJcmV0dXJuIDA7CisJfQorI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwl0Yy0+bWFnaWMxPSoodW5zaWduZWQgaW50ICopIk5FRE1BTEMxIjsKKwl0Yy0+bWFnaWMyPSoodW5zaWduZWQgaW50ICopIk5FRE1BTEMyIjsKKyNlbmRpZgorCXRjLT50aHJlYWRpZD0obG9uZykoc2l6ZV90KUNVUlJFTlRfVEhSRUFEOworCWZvcihlbmQ9MDsgcC0+bVtlbmRdOyBlbmQrKyk7CisJdGMtPm15bXNwYWNlPXRjLT50aHJlYWRpZCAlIGVuZDsKKwlSRUxFQVNFX0xPQ0soJnAtPm11dGV4KTsKKwlpZihUTFNTRVQocC0+bXljYWNoZSwgKHZvaWQgKikoc2l6ZV90KShuKzEpKSkgYWJvcnQoKTsKKwlyZXR1cm4gdGM7Cit9CisKK3N0YXRpYyB2b2lkICp0aHJlYWRjYWNoZV9tYWxsb2MobmVkcG9vbCAqcCwgdGhyZWFkY2FjaGUgKnRjLCBzaXplX3QgKnNpemUpIFRIUk9XU1BFQworeworCXZvaWQgKnJldD0wOworCXVuc2lnbmVkIGludCBiZXN0c2l6ZTsKKwl1bnNpZ25lZCBpbnQgaWR4PXNpemUyYmluaWR4KCpzaXplKTsKKwlzaXplX3QgYmxrc2l6ZT0wOworCXRocmVhZGNhY2hlYmxrICpibGssICoqYmluc3B0cjsKKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJdGNmdWxsc2FuaXR5Y2hlY2sodGMpOworI2VuZGlmCisJLyogQ2FsY3VsYXRlIGJlc3QgZml0IGJpbiBzaXplICovCisJYmVzdHNpemU9MTw8KGlkeCs0KTsKKyNpZiAwCisJLyogRmluZXIgZ3JhaW5lZCBiaW4gZml0ICovCisJaWR4PDw9MTsKKwlpZigqc2l6ZT5iZXN0c2l6ZSkKKwl7CisJCWlkeCsrOworCQliZXN0c2l6ZSs9YmVzdHNpemU+PjE7CisJfQorCWlmKCpzaXplPmJlc3RzaXplKQorCXsKKwkJaWR4Kys7CisJCWJlc3RzaXplPTE8PCg0KyhpZHg+PjEpKTsKKwl9CisjZWxzZQorCWlmKCpzaXplPmJlc3RzaXplKQorCXsKKwkJaWR4Kys7CisJCWJlc3RzaXplPDw9MTsKKwl9CisjZW5kaWYKKwlhc3NlcnQoYmVzdHNpemU+PSpzaXplKTsKKwlpZigqc2l6ZTxiZXN0c2l6ZSkgKnNpemU9YmVzdHNpemU7CisJYXNzZXJ0KCpzaXplPD1USFJFQURDQUNIRU1BWCk7CisJYXNzZXJ0KGlkeDw9VEhSRUFEQ0FDSEVNQVhCSU5TKTsKKwliaW5zcHRyPSZ0Yy0+Ymluc1tpZHgqMl07CisJLyogVHJ5IHRvIG1hdGNoIGNsb3NlLCBidXQgbW92ZSB1cCBhIGJpbiBpZiBuZWNlc3NhcnkgKi8KKwlibGs9KmJpbnNwdHI7CisJaWYoIWJsayB8fCBibGstPnNpemU8KnNpemUpCisJewkvKiBCdW1wIGl0IHVwIGEgYmluICovCisJCWlmKGlkeDxUSFJFQURDQUNIRU1BWEJJTlMpCisJCXsKKwkJCWlkeCsrOworCQkJYmluc3B0cis9MjsKKwkJCWJsaz0qYmluc3B0cjsKKwkJfQorCX0KKwlpZihibGspCisJeworCQlibGtzaXplPWJsay0+c2l6ZTsgLypuZWRibGtzaXplKGJsayk7Ki8KKwkJYXNzZXJ0KG5lZGJsa3NpemUoYmxrKT49Ymxrc2l6ZSk7CisJCWFzc2VydChibGtzaXplPj0qc2l6ZSk7CisJCWlmKGJsay0+bmV4dCkKKwkJCWJsay0+bmV4dC0+cHJldj0wOworCQkqYmluc3B0cj1ibGstPm5leHQ7CisJCWlmKCEqYmluc3B0cikKKwkJCWJpbnNwdHJbMV09MDsKKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJCWJsay0+bWFnaWM9MDsKKyNlbmRpZgorCQlhc3NlcnQoYmluc3B0clswXSE9YmxrICYmIGJpbnNwdHJbMV0hPWJsayk7CisJCWFzc2VydChuZWRibGtzaXplKGJsayk+PXNpemVvZih0aHJlYWRjYWNoZWJsaykgJiYgbmVkYmxrc2l6ZShibGspPD1USFJFQURDQUNIRU1BWCtDSFVOS19PVkVSSEVBRCk7CisJCS8qcHJpbnRmKCJtYWxsb2M6ICVwLCAlcCwgJXAsICVsdVxuIiwgcCwgdGMsIGJsaywgKGxvbmcpIHNpemUpOyovCisJCXJldD0odm9pZCAqKSBibGs7CisJfQorCSsrdGMtPm1hbGxvY3M7CisJaWYocmV0KQorCXsKKwkJYXNzZXJ0KGJsa3NpemU+PSpzaXplKTsKKwkJKyt0Yy0+c3VjY2Vzc2VzOworCQl0Yy0+ZnJlZUluQ2FjaGUtPWJsa3NpemU7CisJCWFzc2VydCgobG9uZykgdGMtPmZyZWVJbkNhY2hlPj0wKTsKKwl9CisjaWYgZGVmaW5lZChERUJVRykgJiYgMAorCWlmKCEodGMtPm1hbGxvY3MgJiAweGZmZikpCisJeworCQlwcmludGYoIioqKiB0aHJlYWRjYWNoZT0ldSwgbWFsbG9jcz0ldSAoJWYpLCBmcmVlPSV1ICglZiksIGZyZWVJbkNhY2hlPSV1XG4iLCAodW5zaWduZWQgaW50KSB0Yy0+dGhyZWFkaWQsIHRjLT5tYWxsb2NzLAorCQkJKGZsb2F0KSB0Yy0+c3VjY2Vzc2VzL3RjLT5tYWxsb2NzLCB0Yy0+ZnJlZXMsIChmbG9hdCkgdGMtPnN1Y2Nlc3Nlcy90Yy0+ZnJlZXMsICh1bnNpZ25lZCBpbnQpIHRjLT5mcmVlSW5DYWNoZSk7CisJfQorI2VuZGlmCisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCXRjZnVsbHNhbml0eWNoZWNrKHRjKTsKKyNlbmRpZgorCXJldHVybiByZXQ7Cit9CitzdGF0aWMgTk9JTkxJTkUgdm9pZCBSZWxlYXNlRnJlZUluQ2FjaGUobmVkcG9vbCAqcCwgdGhyZWFkY2FjaGUgKnRjLCBpbnQgbXltc3BhY2UpIFRIUk9XU1BFQworeworCXVuc2lnbmVkIGludCBhZ2U9VEhSRUFEQ0FDSEVNQVhGUkVFU1BBQ0UvODE5MjsKKwkvKkFDUVVJUkVfTE9DSygmcC0+bVtteW1zcGFjZV0tPm11dGV4KTsqLworCXdoaWxlKGFnZSAmJiB0Yy0+ZnJlZUluQ2FjaGU+PVRIUkVBRENBQ0hFTUFYRlJFRVNQQUNFKQorCXsKKwkJUmVtb3ZlQ2FjaGVFbnRyaWVzKHAsIHRjLCBhZ2UpOworCQkvKnByaW50ZigiKioqIFJlbW92aW5nIGNhY2hlIGVudHJpZXMgb2xkZXIgdGhhbiAldSAoJXUpXG4iLCBhZ2UsICh1bnNpZ25lZCBpbnQpIHRjLT5mcmVlSW5DYWNoZSk7Ki8KKwkJYWdlPj49MTsKKwl9CisJLypSRUxFQVNFX0xPQ0soJnAtPm1bbXltc3BhY2VdLT5tdXRleCk7Ki8KK30KK3N0YXRpYyB2b2lkIHRocmVhZGNhY2hlX2ZyZWUobmVkcG9vbCAqcCwgdGhyZWFkY2FjaGUgKnRjLCBpbnQgbXltc3BhY2UsIHZvaWQgKm1lbSwgc2l6ZV90IHNpemUpIFRIUk9XU1BFQworeworCXVuc2lnbmVkIGludCBiZXN0c2l6ZTsKKwl1bnNpZ25lZCBpbnQgaWR4PXNpemUyYmluaWR4KHNpemUpOworCXRocmVhZGNhY2hlYmxrICoqYmluc3B0ciwgKnRjaz0odGhyZWFkY2FjaGVibGsgKikgbWVtOworCWFzc2VydChzaXplPj1zaXplb2YodGhyZWFkY2FjaGVibGspICYmIHNpemU8PVRIUkVBRENBQ0hFTUFYK0NIVU5LX09WRVJIRUFEKTsKKyNpZmRlZiBERUJVRworCXsJLyogTWFrZSBzdXJlIHRoaXMgaXMgYSB2YWxpZCBtZW1vcnkgYmxvY2sgKi8KKwkgICAgbWNodW5rcHRyIHAgID0gbWVtMmNodW5rKG1lbSk7CisJICAgIG1zdGF0ZSBmbSA9IGdldF9tc3RhdGVfZm9yKHApOworCSAgICBpZiAoIW9rX21hZ2ljKGZtKSkgeworCSAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihmbSwgcCk7CisJICAgICAgcmV0dXJuOworCSAgICB9CisJfQorI2VuZGlmCisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCXRjZnVsbHNhbml0eWNoZWNrKHRjKTsKKyNlbmRpZgorCS8qIENhbGN1bGF0ZSBiZXN0IGZpdCBiaW4gc2l6ZSAqLworCWJlc3RzaXplPTE8PChpZHgrNCk7CisjaWYgMAorCS8qIEZpbmVyIGdyYWluZWQgYmluIGZpdCAqLworCWlkeDw8PTE7CisJaWYoc2l6ZT5iZXN0c2l6ZSkKKwl7CisJCXVuc2lnbmVkIGludCBiaWdnZXJiZXN0c2l6ZT1iZXN0c2l6ZStiZXN0c2l6ZTw8MTsKKwkJaWYoc2l6ZT49YmlnZ2VyYmVzdHNpemUpCisJCXsKKwkJCWlkeCsrOworCQkJYmVzdHNpemU9YmlnZ2VyYmVzdHNpemU7CisJCX0KKwl9CisjZW5kaWYKKwlpZihiZXN0c2l6ZSE9c2l6ZSkJLyogZGxtYWxsb2MgY2FuIHJvdW5kIHVwLCBzbyB3ZSByb3VuZCBkb3duIHRvIHByZXNlcnZlIGluZGV4aW5nICovCisJCXNpemU9YmVzdHNpemU7CisJYmluc3B0cj0mdGMtPmJpbnNbaWR4KjJdOworCWFzc2VydChpZHg8PVRIUkVBRENBQ0hFTUFYQklOUyk7CisJaWYodGNrPT0qYmluc3B0cikKKwl7CisJCWZwcmludGYoc3RkZXJyLCAiQXR0ZW1wdCB0byBmcmVlIGFscmVhZHkgZnJlZWQgbWVtb3J5IGJsb2NrICVwIC0gYWJvcnRpbmchXG4iLCB0Y2spOworCQlhYm9ydCgpOworCX0KKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJdGNrLT5tYWdpYz0qKHVuc2lnbmVkIGludCAqKSAiTkVETiI7CisjZW5kaWYKKwl0Y2stPmxhc3RVc2VkPSsrdGMtPmZyZWVzOworCXRjay0+c2l6ZT0odW5zaWduZWQgaW50KSBzaXplOworCXRjay0+bmV4dD0qYmluc3B0cjsKKwl0Y2stPnByZXY9MDsKKwlpZih0Y2stPm5leHQpCisJCXRjay0+bmV4dC0+cHJldj10Y2s7CisJZWxzZQorCQliaW5zcHRyWzFdPXRjazsKKwlhc3NlcnQoISpiaW5zcHRyIHx8ICgqYmluc3B0ciktPnNpemU9PXRjay0+c2l6ZSk7CisJKmJpbnNwdHI9dGNrOworCWFzc2VydCh0Y2s9PXRjLT5iaW5zW2lkeCoyXSk7CisJYXNzZXJ0KHRjLT5iaW5zW2lkeCoyKzFdPT10Y2sgfHwgYmluc3B0clswXS0+bmV4dC0+cHJldj09dGNrKTsKKwkvKnByaW50ZigiZnJlZTogJXAsICVwLCAlcCwgJWx1XG4iLCBwLCB0YywgbWVtLCAobG9uZykgc2l6ZSk7Ki8KKwl0Yy0+ZnJlZUluQ2FjaGUrPXNpemU7CisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCXRjZnVsbHNhbml0eWNoZWNrKHRjKTsKKyNlbmRpZgorI2lmIDEKKwlpZih0Yy0+ZnJlZUluQ2FjaGU+PVRIUkVBRENBQ0hFTUFYRlJFRVNQQUNFKQorCQlSZWxlYXNlRnJlZUluQ2FjaGUocCwgdGMsIG15bXNwYWNlKTsKKyNlbmRpZgorfQorCisKKworCitzdGF0aWMgTk9JTkxJTkUgaW50IEluaXRQb29sKG5lZHBvb2wgKnAsIHNpemVfdCBjYXBhY2l0eSwgaW50IHRocmVhZHMpIFRIUk9XU1BFQworewkvKiB0aHJlYWRzIGlzIC0xIGZvciBzeXN0ZW0gcG9vbCAqLworCWVuc3VyZV9pbml0aWFsaXphdGlvbigpOworCUFDUVVJUkVfTUFMTE9DX0dMT0JBTF9MT0NLKCk7CisJaWYocC0+dGhyZWFkcykgZ290byBkb25lOworCWlmKElOSVRJQUxfTE9DSygmcC0+bXV0ZXgpKSBnb3RvIGVycjsKKwlpZihUTFNBTExPQygmcC0+bXljYWNoZSkpIGdvdG8gZXJyOworCWlmKCEocC0+bVswXT0obXN0YXRlKSBjcmVhdGVfbXNwYWNlKGNhcGFjaXR5LCAxKSkpIGdvdG8gZXJyOworCXAtPm1bMF0tPmV4dHA9cDsKKwlwLT50aHJlYWRzPSh0aHJlYWRzPDEgfHwgdGhyZWFkcz5NQVhUSFJFQURTSU5QT09MKSA/IE1BWFRIUkVBRFNJTlBPT0wgOiB0aHJlYWRzOworZG9uZToKKwlSRUxFQVNFX01BTExPQ19HTE9CQUxfTE9DSygpOworCXJldHVybiAxOworZXJyOgorCWlmKHRocmVhZHM8MCkKKwkJYWJvcnQoKTsJCQkvKiBJZiB5b3UgY2FuJ3QgYWxsb2NhdGUgZm9yIHN5c3RlbSBwb29sLCB3ZSdyZSBzY3Jld2VkICovCisJRGVzdHJveUNhY2hlcyhwKTsKKwlpZihwLT5tWzBdKQorCXsKKwkJZGVzdHJveV9tc3BhY2UocC0+bVswXSk7CisJCXAtPm1bMF09MDsKKwl9CisJaWYocC0+bXljYWNoZSkKKwl7CisJCWlmKFRMU0ZSRUUocC0+bXljYWNoZSkpIGFib3J0KCk7CisJCXAtPm15Y2FjaGU9MDsKKwl9CisJUkVMRUFTRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBOT0lOTElORSBtc3RhdGUgRmluZE1TcGFjZShuZWRwb29sICpwLCB0aHJlYWRjYWNoZSAqdGMsIGludCAqbGFzdFVzZWQsIHNpemVfdCBzaXplKSBUSFJPV1NQRUMKK3sJLyogR2V0cyBjYWxsZWQgd2hlbiB0aHJlYWQncyBsYXN0IHVzZWQgbXNwYWNlIGlzIGluIHVzZS4gVGhlIHN0cmF0ZWd5CisJaXMgdG8gcnVuIHRocm91Z2ggdGhlIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSBtc3BhY2VzIGxvb2tpbmcgZm9yIGFuCisJdW5sb2NrZWQgb25lIGFuZCBpZiB3ZSBmYWlsLCB3ZSBjcmVhdGUgYSBuZXcgb25lIHNvIGxvbmcgYXMgd2UgZG9uJ3QKKwlleGNlZWQgcC0+dGhyZWFkcyAqLworCWludCBuLCBlbmQ7CisJZm9yKG49ZW5kPSpsYXN0VXNlZCsxOyBwLT5tW25dOyBlbmQ9KytuKQorCXsKKwkJaWYoVFJZX0xPQ0soJnAtPm1bbl0tPm11dGV4KSkgZ290byBmb3VuZDsKKwl9CisJZm9yKG49MDsgbjwqbGFzdFVzZWQgJiYgcC0+bVtuXTsgbisrKQorCXsKKwkJaWYoVFJZX0xPQ0soJnAtPm1bbl0tPm11dGV4KSkgZ290byBmb3VuZDsKKwl9CisJaWYoZW5kPHAtPnRocmVhZHMpCisJeworCQltc3RhdGUgdGVtcDsKKwkJaWYoISh0ZW1wPShtc3RhdGUpIGNyZWF0ZV9tc3BhY2Uoc2l6ZSwgMSkpKQorCQkJZ290byBiYWRleGl0OworCQkvKiBOb3cgd2UncmUgcmVhZHkgdG8gbW9kaWZ5IHRoZSBsaXN0cywgd2UgbG9jayAqLworCQlBQ1FVSVJFX0xPQ0soJnAtPm11dGV4KTsKKwkJd2hpbGUocC0+bVtlbmRdICYmIGVuZDxwLT50aHJlYWRzKQorCQkJZW5kKys7CisJCWlmKGVuZD49cC0+dGhyZWFkcykKKwkJewkvKiBEcmF0LCBtdXN0IGRlc3Ryb3kgaXQgbm93ICovCisJCQlSRUxFQVNFX0xPQ0soJnAtPm11dGV4KTsKKwkJCWRlc3Ryb3lfbXNwYWNlKChtc3BhY2UpIHRlbXApOworCQkJZ290byBiYWRleGl0OworCQl9CisJCS8qIFdlIHJlYWxseSB3YW50IHRvIG1ha2Ugc3VyZSB0aGlzIGdvZXMgaW50byBtZW1vcnkgbm93IGJ1dCB3ZQorCQloYXZlIHRvIGJlIGNhcmVmdWwgb2YgYnJlYWtpbmcgYWxpYXNpbmcgcnVsZXMsIHNvIHdyaXRlIGl0IHR3aWNlICovCisJCSooKHZvbGF0aWxlIHN0cnVjdCBtYWxsb2Nfc3RhdGUgKiopICZwLT5tW2VuZF0pPXAtPm1bZW5kXT10ZW1wOworCQlBQ1FVSVJFX0xPQ0soJnAtPm1bZW5kXS0+bXV0ZXgpOworCQkvKnByaW50ZigiQ3JlYXRlZCBtc3BhY2UgaWR4ICVkXG4iLCBlbmQpOyovCisJCVJFTEVBU0VfTE9DSygmcC0+bXV0ZXgpOworCQluPWVuZDsKKwkJZ290byBmb3VuZDsKKwl9CisJLyogTGV0IGl0IGxvY2sgb24gdGhlIGxhc3Qgb25lIGl0IHVzZWQgKi8KK2JhZGV4aXQ6CisJQUNRVUlSRV9MT0NLKCZwLT5tWypsYXN0VXNlZF0tPm11dGV4KTsKKwlyZXR1cm4gcC0+bVsqbGFzdFVzZWRdOworZm91bmQ6CisJKmxhc3RVc2VkPW47CisJaWYodGMpCisJCXRjLT5teW1zcGFjZT1uOworCWVsc2UKKwl7CisJCWlmKFRMU1NFVChwLT5teWNhY2hlLCAodm9pZCAqKShzaXplX3QpKC0obisxKSkpKSBhYm9ydCgpOworCX0KKwlyZXR1cm4gcC0+bVtuXTsKK30KKworbmVkcG9vbCAqbmVkY3JlYXRlcG9vbChzaXplX3QgY2FwYWNpdHksIGludCB0aHJlYWRzKSBUSFJPV1NQRUMKK3sKKwluZWRwb29sICpyZXQ7CisJaWYoIShyZXQ9KG5lZHBvb2wgKikgbmVkcGNhbGxvYygwLCAxLCBzaXplb2YobmVkcG9vbCkpKSkgcmV0dXJuIDA7CisJaWYoIUluaXRQb29sKHJldCwgY2FwYWNpdHksIHRocmVhZHMpKQorCXsKKwkJbmVkcGZyZWUoMCwgcmV0KTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiByZXQ7Cit9Cit2b2lkIG5lZGRlc3Ryb3lwb29sKG5lZHBvb2wgKnApIFRIUk9XU1BFQworeworCWludCBuOworCUFDUVVJUkVfTE9DSygmcC0+bXV0ZXgpOworCURlc3Ryb3lDYWNoZXMocCk7CisJZm9yKG49MDsgcC0+bVtuXTsgbisrKQorCXsKKwkJZGVzdHJveV9tc3BhY2UocC0+bVtuXSk7CisJCXAtPm1bbl09MDsKKwl9CisJUkVMRUFTRV9MT0NLKCZwLT5tdXRleCk7CisJaWYoVExTRlJFRShwLT5teWNhY2hlKSkgYWJvcnQoKTsKKwluZWRwZnJlZSgwLCBwKTsKK30KKwordm9pZCBuZWRwc2V0dmFsdWUobmVkcG9vbCAqcCwgdm9pZCAqdikgVEhST1dTUEVDCit7CisJaWYoIXApIHsgcD0mc3lzcG9vbDsgaWYoIXN5c3Bvb2wudGhyZWFkcykgSW5pdFBvb2woJnN5c3Bvb2wsIDAsIC0xKTsgfQorCXAtPnVzZXJ2YWx1ZT12OworfQordm9pZCAqbmVkZ2V0dmFsdWUobmVkcG9vbCAqKnAsIHZvaWQgKm1lbSkgVEhST1dTUEVDCit7CisJbmVkcG9vbCAqbnA9MDsKKwltY2h1bmtwdHIgbWNwPW1lbTJjaHVuayhtZW0pOworCW1zdGF0ZSBmbTsKKwlpZighKGlzX2FsaWduZWQoY2h1bmsybWVtKG1jcCkpKSAmJiBtY3AtPmhlYWQgIT0gRkVOQ0VQT1NUX0hFQUQpIHJldHVybiAwOworCWlmKCFjaW51c2UobWNwKSkgcmV0dXJuIDA7CisJaWYoIW5leHRfcGludXNlKG1jcCkpIHJldHVybiAwOworCWlmKCFpc19tbWFwcGVkKG1jcCkgJiYgIXBpbnVzZShtY3ApKQorCXsKKwkJaWYobmV4dF9jaHVuayhwcmV2X2NodW5rKG1jcCkpIT1tY3ApIHJldHVybiAwOworCX0KKwlmbT1nZXRfbXN0YXRlX2ZvcihtY3ApOworCWlmKCFva19tYWdpYyhmbSkpIHJldHVybiAwOworCWlmKCFva19hZGRyZXNzKGZtLCBtY3ApKSByZXR1cm4gMDsKKwlpZighZm0tPmV4dHApIHJldHVybiAwOworCW5wPShuZWRwb29sICopIGZtLT5leHRwOworCWlmKHApICpwPW5wOworCXJldHVybiBucC0+dXNlcnZhbHVlOworfQorCit2b2lkIG5lZGRpc2FibGV0aHJlYWRjYWNoZShuZWRwb29sICpwKSBUSFJPV1NQRUMKK3sKKwlpbnQgbXljYWNoZTsKKwlpZighcCkKKwl7CisJCXA9JnN5c3Bvb2w7CisJCWlmKCFzeXNwb29sLnRocmVhZHMpIEluaXRQb29sKCZzeXNwb29sLCAwLCAtMSk7CisJfQorCW15Y2FjaGU9KGludCkoc2l6ZV90KSBUTFNHRVQocC0+bXljYWNoZSk7CisJaWYoIW15Y2FjaGUpCisJewkvKiBTZXQgdG8gbXNwYWNlIDAgKi8KKwkJaWYoVExTU0VUKHAtPm15Y2FjaGUsICh2b2lkICopLTEpKSBhYm9ydCgpOworCX0KKwllbHNlIGlmKG15Y2FjaGU+MCkKKwl7CS8qIFNldCB0byBsYXN0IHVzZWQgbXNwYWNlICovCisJCXRocmVhZGNhY2hlICp0Yz1wLT5jYWNoZXNbbXljYWNoZS0xXTsKKyNpZiBkZWZpbmVkKERFQlVHKQorCQlwcmludGYoIlRocmVhZGNhY2hlIHV0aWxpc2F0aW9uOiAlbGYlJSBpbiBjYWNoZSB3aXRoICVsZiUlIGxvc3QgdG8gb3RoZXIgdGhyZWFkc1xuIiwKKwkJCTEwMC4wKnRjLT5zdWNjZXNzZXMvdGMtPm1hbGxvY3MsIDEwMC4wKigoZG91YmxlKSB0Yy0+bWFsbG9jcy10Yy0+ZnJlZXMpL3RjLT5tYWxsb2NzKTsKKyNlbmRpZgorCQlpZihUTFNTRVQocC0+bXljYWNoZSwgKHZvaWQgKikoc2l6ZV90KSgtdGMtPm15bXNwYWNlKSkpIGFib3J0KCk7CisJCXRjLT5mcmVlcysrOworCQlSZW1vdmVDYWNoZUVudHJpZXMocCwgdGMsIDApOworCQlhc3NlcnQoIXRjLT5mcmVlSW5DYWNoZSk7CisJCXRjLT5teW1zcGFjZT0tMTsKKwkJdGMtPnRocmVhZGlkPTA7CisJCW1zcGFjZV9mcmVlKDAsIHAtPmNhY2hlc1tteWNhY2hlLTFdKTsKKwkJcC0+Y2FjaGVzW215Y2FjaGUtMV09MDsKKwl9Cit9CisKKyNkZWZpbmUgR0VUTVNQQUNFKG0scCx0YyxtcyxzLGFjdGlvbikgICAgICAgICAgIFwKKyAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtc3RhdGUgbSA9IEdldE1TcGFjZSgocCksKHRjKSwobXMpLChzKSk7ICAgIFwKKyAgICBhY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBSRUxFQVNFX0xPQ0soJm0tPm11dGV4KTsgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKworc3RhdGljIEZPUkNFSU5MSU5FIG1zdGF0ZSBHZXRNU3BhY2UobmVkcG9vbCAqcCwgdGhyZWFkY2FjaGUgKnRjLCBpbnQgbXltc3BhY2UsIHNpemVfdCBzaXplKSBUSFJPV1NQRUMKK3sJLyogUmV0dXJucyBhIGxvY2tlZCBhbmQgcmVhZHkgZm9yIHVzZSBtc3BhY2UgKi8KKwltc3RhdGUgbT1wLT5tW215bXNwYWNlXTsKKwlhc3NlcnQobSk7CisJaWYoIVRSWV9MT0NLKCZwLT5tW215bXNwYWNlXS0+bXV0ZXgpKSBtPUZpbmRNU3BhY2UocCwgdGMsICZteW1zcGFjZSwgc2l6ZSk7XAorCS8qYXNzZXJ0KElTX0xPQ0tFRCgmcC0+bVtteW1zcGFjZV0tPm11dGV4KSk7Ki8KKwlyZXR1cm4gbTsKK30KK3N0YXRpYyBGT1JDRUlOTElORSB2b2lkIEdldFRocmVhZENhY2hlKG5lZHBvb2wgKipwLCB0aHJlYWRjYWNoZSAqKnRjLCBpbnQgKm15bXNwYWNlLCBzaXplX3QgKnNpemUpIFRIUk9XU1BFQworeworCWludCBteWNhY2hlOworCWlmKHNpemUgJiYgKnNpemU8c2l6ZW9mKHRocmVhZGNhY2hlYmxrKSkgKnNpemU9c2l6ZW9mKHRocmVhZGNhY2hlYmxrKTsKKwlpZighKnApCisJeworCQkqcD0mc3lzcG9vbDsKKwkJaWYoIXN5c3Bvb2wudGhyZWFkcykgSW5pdFBvb2woJnN5c3Bvb2wsIDAsIC0xKTsKKwl9CisJbXljYWNoZT0oaW50KShzaXplX3QpIFRMU0dFVCgoKnApLT5teWNhY2hlKTsKKwlpZihteWNhY2hlPjApCisJeworCQkqdGM9KCpwKS0+Y2FjaGVzW215Y2FjaGUtMV07CisJCSpteW1zcGFjZT0oKnRjKS0+bXltc3BhY2U7CisJfQorCWVsc2UgaWYoIW15Y2FjaGUpCisJeworCQkqdGM9QWxsb2NDYWNoZSgqcCk7CisJCWlmKCEqdGMpCisJCXsJLyogRGlzYWJsZSAqLworCQkJaWYoVExTU0VUKCgqcCktPm15Y2FjaGUsICh2b2lkICopLTEpKSBhYm9ydCgpOworCQkJKm15bXNwYWNlPTA7CisJCX0KKwkJZWxzZQorCQkJKm15bXNwYWNlPSgqdGMpLT5teW1zcGFjZTsKKwl9CisJZWxzZQorCXsKKwkJKnRjPTA7CisJCSpteW1zcGFjZT0tbXljYWNoZS0xOworCX0KKwlhc3NlcnQoKm15bXNwYWNlPj0wKTsKKwlhc3NlcnQoKGxvbmcpKHNpemVfdClDVVJSRU5UX1RIUkVBRD09KCp0YyktPnRocmVhZGlkKTsKKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJaWYoKnRjKQorCXsKKwkJaWYoKih1bnNpZ25lZCBpbnQgKikiTkVETUFMQzEiIT0oKnRjKS0+bWFnaWMxIHx8ICoodW5zaWduZWQgaW50ICopIk5FRE1BTEMyIiE9KCp0YyktPm1hZ2ljMikKKwkJeworCQkJYWJvcnQoKTsKKwkJfQorCX0KKyNlbmRpZgorfQorCit2b2lkICogbmVkcG1hbGxvYyhuZWRwb29sICpwLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDCit7CisJdm9pZCAqcmV0PTA7CisJdGhyZWFkY2FjaGUgKnRjOworCWludCBteW1zcGFjZTsKKwlHZXRUaHJlYWRDYWNoZSgmcCwgJnRjLCAmbXltc3BhY2UsICZzaXplKTsKKyNpZiBUSFJFQURDQUNIRU1BWAorCWlmKHRjICYmIHNpemU8PVRIUkVBRENBQ0hFTUFYKQorCXsJLyogVXNlIHRoZSB0aHJlYWQgY2FjaGUgKi8KKwkJcmV0PXRocmVhZGNhY2hlX21hbGxvYyhwLCB0YywgJnNpemUpOworCX0KKyNlbmRpZgorCWlmKCFyZXQpCisJewkvKiBVc2UgdGhpcyB0aHJlYWQncyBtc3BhY2UgKi8KKwlHRVRNU1BBQ0UobSwgcCwgdGMsIG15bXNwYWNlLCBzaXplLAorCQkgIHJldD1tc3BhY2VfbWFsbG9jKG0sIHNpemUpKTsKKwl9CisJcmV0dXJuIHJldDsKK30KK3ZvaWQgKiBuZWRwY2FsbG9jKG5lZHBvb2wgKnAsIHNpemVfdCBubywgc2l6ZV90IHNpemUpIFRIUk9XU1BFQworeworCXNpemVfdCByc2l6ZT1zaXplKm5vOworCXZvaWQgKnJldD0wOworCXRocmVhZGNhY2hlICp0YzsKKwlpbnQgbXltc3BhY2U7CisJR2V0VGhyZWFkQ2FjaGUoJnAsICZ0YywgJm15bXNwYWNlLCAmcnNpemUpOworI2lmIFRIUkVBRENBQ0hFTUFYCisJaWYodGMgJiYgcnNpemU8PVRIUkVBRENBQ0hFTUFYKQorCXsJLyogVXNlIHRoZSB0aHJlYWQgY2FjaGUgKi8KKwkJaWYoKHJldD10aHJlYWRjYWNoZV9tYWxsb2MocCwgdGMsICZyc2l6ZSkpKQorCQkJbWVtc2V0KHJldCwgMCwgcnNpemUpOworCX0KKyNlbmRpZgorCWlmKCFyZXQpCisJewkvKiBVc2UgdGhpcyB0aHJlYWQncyBtc3BhY2UgKi8KKwlHRVRNU1BBQ0UobSwgcCwgdGMsIG15bXNwYWNlLCByc2l6ZSwKKwkJICByZXQ9bXNwYWNlX2NhbGxvYyhtLCAxLCByc2l6ZSkpOworCX0KKwlyZXR1cm4gcmV0OworfQordm9pZCAqIG5lZHByZWFsbG9jKG5lZHBvb2wgKnAsIHZvaWQgKm1lbSwgc2l6ZV90IHNpemUpIFRIUk9XU1BFQworeworCXZvaWQgKnJldD0wOworCXRocmVhZGNhY2hlICp0YzsKKwlpbnQgbXltc3BhY2U7CisJaWYoIW1lbSkgcmV0dXJuIG5lZHBtYWxsb2MocCwgc2l6ZSk7CisJR2V0VGhyZWFkQ2FjaGUoJnAsICZ0YywgJm15bXNwYWNlLCAmc2l6ZSk7CisjaWYgVEhSRUFEQ0FDSEVNQVgKKwlpZih0YyAmJiBzaXplICYmIHNpemU8PVRIUkVBRENBQ0hFTUFYKQorCXsJLyogVXNlIHRoZSB0aHJlYWQgY2FjaGUgKi8KKwkJc2l6ZV90IG1lbXNpemU9bmVkYmxrc2l6ZShtZW0pOworCQlhc3NlcnQobWVtc2l6ZSk7CisJCWlmKChyZXQ9dGhyZWFkY2FjaGVfbWFsbG9jKHAsIHRjLCAmc2l6ZSkpKQorCQl7CisJCQltZW1jcHkocmV0LCBtZW0sIG1lbXNpemU8c2l6ZSA/IG1lbXNpemUgOiBzaXplKTsKKwkJCWlmKG1lbXNpemU8PVRIUkVBRENBQ0hFTUFYKQorCQkJCXRocmVhZGNhY2hlX2ZyZWUocCwgdGMsIG15bXNwYWNlLCBtZW0sIG1lbXNpemUpOworCQkJZWxzZQorCQkJCW1zcGFjZV9mcmVlKDAsIG1lbSk7CisJCX0KKwl9CisjZW5kaWYKKwlpZighcmV0KQorCXsJLyogUmVhbGxvY3MgYWx3YXlzIGhhcHBlbiBpbiB0aGUgbXNwYWNlIHRoZXkgaGFwcGVuZWQgaW4sIHNvIHNraXAKKwkJbG9ja2luZyB0aGUgcHJlZmVycmVkIG1zcGFjZSBmb3IgdGhpcyB0aHJlYWQgKi8KKwkJcmV0PW1zcGFjZV9yZWFsbG9jKDAsIG1lbSwgc2l6ZSk7CisJfQorCXJldHVybiByZXQ7Cit9Cit2b2lkICAgbmVkcGZyZWUobmVkcG9vbCAqcCwgdm9pZCAqbWVtKSBUSFJPV1NQRUMKK3sJLyogRnJlZXMgYWx3YXlzIGhhcHBlbiBpbiB0aGUgbXNwYWNlIHRoZXkgaGFwcGVuZWQgaW4sIHNvIHNraXAKKwlsb2NraW5nIHRoZSBwcmVmZXJyZWQgbXNwYWNlIGZvciB0aGlzIHRocmVhZCAqLworCXRocmVhZGNhY2hlICp0YzsKKwlpbnQgbXltc3BhY2U7CisJc2l6ZV90IG1lbXNpemU7CisJYXNzZXJ0KG1lbSk7CisJR2V0VGhyZWFkQ2FjaGUoJnAsICZ0YywgJm15bXNwYWNlLCAwKTsKKyNpZiBUSFJFQURDQUNIRU1BWAorCW1lbXNpemU9bmVkYmxrc2l6ZShtZW0pOworCWFzc2VydChtZW1zaXplKTsKKwlpZihtZW0gJiYgdGMgJiYgbWVtc2l6ZTw9KFRIUkVBRENBQ0hFTUFYK0NIVU5LX09WRVJIRUFEKSkKKwkJdGhyZWFkY2FjaGVfZnJlZShwLCB0YywgbXltc3BhY2UsIG1lbSwgbWVtc2l6ZSk7CisJZWxzZQorI2VuZGlmCisJCW1zcGFjZV9mcmVlKDAsIG1lbSk7Cit9Cit2b2lkICogbmVkcG1lbWFsaWduKG5lZHBvb2wgKnAsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykgVEhST1dTUEVDCit7CisJdm9pZCAqcmV0OworCXRocmVhZGNhY2hlICp0YzsKKwlpbnQgbXltc3BhY2U7CisJR2V0VGhyZWFkQ2FjaGUoJnAsICZ0YywgJm15bXNwYWNlLCAmYnl0ZXMpOworCXsJLyogVXNlIHRoaXMgdGhyZWFkJ3MgbXNwYWNlICovCisJR0VUTVNQQUNFKG0sIHAsIHRjLCBteW1zcGFjZSwgYnl0ZXMsCisJCSAgcmV0PW1zcGFjZV9tZW1hbGlnbihtLCBhbGlnbm1lbnQsIGJ5dGVzKSk7CisJfQorCXJldHVybiByZXQ7Cit9CisjaWYgIU5PX01BTExJTkZPCitzdHJ1Y3QgbWFsbGluZm8gbmVkcG1hbGxpbmZvKG5lZHBvb2wgKnApIFRIUk9XU1BFQworeworCWludCBuOworCXN0cnVjdCBtYWxsaW5mbyByZXQ9ezB9OworCWlmKCFwKSB7IHA9JnN5c3Bvb2w7IGlmKCFzeXNwb29sLnRocmVhZHMpIEluaXRQb29sKCZzeXNwb29sLCAwLCAtMSk7IH0KKwlmb3Iobj0wOyBwLT5tW25dOyBuKyspCisJeworCQlzdHJ1Y3QgbWFsbGluZm8gdD1tc3BhY2VfbWFsbGluZm8ocC0+bVtuXSk7CisJCXJldC5hcmVuYSs9dC5hcmVuYTsKKwkJcmV0Lm9yZGJsa3MrPXQub3JkYmxrczsKKwkJcmV0LmhibGtoZCs9dC5oYmxraGQ7CisJCXJldC51c21ibGtzKz10LnVzbWJsa3M7CisJCXJldC51b3JkYmxrcys9dC51b3JkYmxrczsKKwkJcmV0LmZvcmRibGtzKz10LmZvcmRibGtzOworCQlyZXQua2VlcGNvc3QrPXQua2VlcGNvc3Q7CisJfQorCXJldHVybiByZXQ7Cit9CisjZW5kaWYKK2ludCAgICBuZWRwbWFsbG9wdChuZWRwb29sICpwLCBpbnQgcGFybm8sIGludCB2YWx1ZSkgVEhST1dTUEVDCit7CisJcmV0dXJuIG1zcGFjZV9tYWxsb3B0KHBhcm5vLCB2YWx1ZSk7Cit9CitpbnQgICAgbmVkcG1hbGxvY190cmltKG5lZHBvb2wgKnAsIHNpemVfdCBwYWQpIFRIUk9XU1BFQworeworCWludCBuLCByZXQ9MDsKKwlpZighcCkgeyBwPSZzeXNwb29sOyBpZighc3lzcG9vbC50aHJlYWRzKSBJbml0UG9vbCgmc3lzcG9vbCwgMCwgLTEpOyB9CisJZm9yKG49MDsgcC0+bVtuXTsgbisrKQorCXsKKwkJcmV0Kz1tc3BhY2VfdHJpbShwLT5tW25dLCBwYWQpOworCX0KKwlyZXR1cm4gcmV0OworfQordm9pZCAgIG5lZHBtYWxsb2Nfc3RhdHMobmVkcG9vbCAqcCkgVEhST1dTUEVDCit7CisJaW50IG47CisJaWYoIXApIHsgcD0mc3lzcG9vbDsgaWYoIXN5c3Bvb2wudGhyZWFkcykgSW5pdFBvb2woJnN5c3Bvb2wsIDAsIC0xKTsgfQorCWZvcihuPTA7IHAtPm1bbl07IG4rKykKKwl7CisJCW1zcGFjZV9tYWxsb2Nfc3RhdHMocC0+bVtuXSk7CisJfQorfQorc2l6ZV90IG5lZHBtYWxsb2NfZm9vdHByaW50KG5lZHBvb2wgKnApIFRIUk9XU1BFQworeworCXNpemVfdCByZXQ9MDsKKwlpbnQgbjsKKwlpZighcCkgeyBwPSZzeXNwb29sOyBpZighc3lzcG9vbC50aHJlYWRzKSBJbml0UG9vbCgmc3lzcG9vbCwgMCwgLTEpOyB9CisJZm9yKG49MDsgcC0+bVtuXTsgbisrKQorCXsKKwkJcmV0Kz1tc3BhY2VfZm9vdHByaW50KHAtPm1bbl0pOworCX0KKwlyZXR1cm4gcmV0OworfQordm9pZCAqKm5lZHBpbmRlcGVuZGVudF9jYWxsb2MobmVkcG9vbCAqcCwgc2l6ZV90IGVsZW1zbm8sIHNpemVfdCBlbGVtc2l6ZSwgdm9pZCAqKmNodW5rcykgVEhST1dTUEVDCit7CisJdm9pZCAqKnJldDsKKwl0aHJlYWRjYWNoZSAqdGM7CisJaW50IG15bXNwYWNlOworCUdldFRocmVhZENhY2hlKCZwLCAmdGMsICZteW1zcGFjZSwgJmVsZW1zaXplKTsKKyAgICBHRVRNU1BBQ0UobSwgcCwgdGMsIG15bXNwYWNlLCBlbGVtc25vKmVsZW1zaXplLAorCSAgICAgIHJldD1tc3BhY2VfaW5kZXBlbmRlbnRfY2FsbG9jKG0sIGVsZW1zbm8sIGVsZW1zaXplLCBjaHVua3MpKTsKKwlyZXR1cm4gcmV0OworfQordm9pZCAqKm5lZHBpbmRlcGVuZGVudF9jb21hbGxvYyhuZWRwb29sICpwLCBzaXplX3QgZWxlbXMsIHNpemVfdCAqc2l6ZXMsIHZvaWQgKipjaHVua3MpIFRIUk9XU1BFQworeworCXZvaWQgKipyZXQ7CisJdGhyZWFkY2FjaGUgKnRjOworCWludCBteW1zcGFjZTsKKyAgICBzaXplX3QgaSwgKmFkanVzdGVkc2l6ZXM9KHNpemVfdCAqKSBhbGxvY2EoZWxlbXMqc2l6ZW9mKHNpemVfdCkpOworICAgIGlmKCFhZGp1c3RlZHNpemVzKSByZXR1cm4gMDsKKyAgICBmb3IoaT0wOyBpPGVsZW1zOyBpKyspCisJYWRqdXN0ZWRzaXplc1tpXT1zaXplc1tpXTxzaXplb2YodGhyZWFkY2FjaGVibGspID8gc2l6ZW9mKHRocmVhZGNhY2hlYmxrKSA6IHNpemVzW2ldOworCUdldFRocmVhZENhY2hlKCZwLCAmdGMsICZteW1zcGFjZSwgMCk7CisJR0VUTVNQQUNFKG0sIHAsIHRjLCBteW1zcGFjZSwgMCwKKwkgICAgICByZXQ9bXNwYWNlX2luZGVwZW5kZW50X2NvbWFsbG9jKG0sIGVsZW1zLCBhZGp1c3RlZHNpemVzLCBjaHVua3MpKTsKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgT1ZFUlJJREVfU1RSRFVQCisvKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBwdXJlbHkgdGhlcmUgdG8gb3ZlcnJpZGUgdGhlIGxpYmMgdmVyc2lvbiwgdG8KKyAqIGF2b2lkIGEgY3Jhc2ggZHVlIHRvIGFsbG9jYXRpb24gYW5kIGZyZWUgb24gZGlmZmVyZW50ICdoZWFwcycuCisgKi8KK2NoYXIgKnN0cmR1cChjb25zdCBjaGFyICpzMSkKK3sKKwljaGFyICpzMiA9IDA7CisJaWYgKHMxKSB7CisJCXMyID0gbWFsbG9jKHN0cmxlbihzMSkgKyAxKTsKKwkJc3RyY3B5KHMyLCBzMSk7CisJfQorCXJldHVybiBzMjsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29tcGF0L25lZG1hbGxvYy9uZWRtYWxsb2MuaCBiL2NvbXBhdC9uZWRtYWxsb2MvbmVkbWFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk2MGU2NgotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9uZWRtYWxsb2MvbmVkbWFsbG9jLmgKQEAgLTAsMCArMSwxODAgQEAKKy8qIG5lZGFsbG9jLCBhbiBhbHRlcm5hdGl2ZSBtYWxsb2MgaW1wbGVtZW50YXRpb24gZm9yIG11bHRpcGxlIHRocmVhZHMgd2l0aG91dAorbG9jayBjb250ZW50aW9uIGJhc2VkIG9uIGRsbWFsbG9jIHYyLjguMy4gKEMpIDIwMDUgTmlhbGwgRG91Z2xhcworCitCb29zdCBTb2Z0d2FyZSBMaWNlbnNlIC0gVmVyc2lvbiAxLjAgLSBBdWd1c3QgMTd0aCwgMjAwMworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvciBvcmdhbml6YXRpb24KK29idGFpbmluZyBhIGNvcHkgb2YgdGhlIHNvZnR3YXJlIGFuZCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBjb3ZlcmVkIGJ5Cit0aGlzIGxpY2Vuc2UgKHRoZSAiU29mdHdhcmUiKSB0byB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgZGlzdHJpYnV0ZSwKK2V4ZWN1dGUsIGFuZCB0cmFuc21pdCB0aGUgU29mdHdhcmUsIGFuZCB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlCitTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCB0aGlyZC1wYXJ0aWVzIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0bworZG8gc28sIGFsbCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmc6CisKK1RoZSBjb3B5cmlnaHQgbm90aWNlcyBpbiB0aGUgU29mdHdhcmUgYW5kIHRoaXMgZW50aXJlIHN0YXRlbWVudCwgaW5jbHVkaW5nCit0aGUgYWJvdmUgbGljZW5zZSBncmFudCwgdGhpcyByZXN0cmljdGlvbiBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgaW4gd2hvbGUgb3IgaW4gcGFydCwgYW5kCithbGwgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU29mdHdhcmUsIHVubGVzcyBzdWNoIGNvcGllcyBvciBkZXJpdmF0aXZlCit3b3JrcyBhcmUgc29sZWx5IGluIHRoZSBmb3JtIG9mIG1hY2hpbmUtZXhlY3V0YWJsZSBvYmplY3QgY29kZSBnZW5lcmF0ZWQgYnkKK2Egc291cmNlIGxhbmd1YWdlIHByb2Nlc3Nvci4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVAorU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIEFOWU9ORSBESVNUUklCVVRJTkcgVEhFIFNPRlRXQVJFIEJFIExJQUJMRQorRk9SIEFOWSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCitBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKK0RFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyovCisKKyNpZm5kZWYgTkVETUFMTE9DX0gKKyNkZWZpbmUgTkVETUFMTE9DX0gKKworCisvKiBTZWUgbWFsbG9jLmMuaCBmb3Igd2hhdCBlYWNoIGZ1bmN0aW9uIGRvZXMuCisKK1JFUExBQ0VfU1lTVEVNX0FMTE9DQVRPUiBjYXVzZXMgbmVkYWxsb2MncyBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIG1hbGxvYywKK2ZyZWUgZXRjLiBpbnN0ZWFkIG9mIG5lZG1hbGxvYywgbmVkZnJlZSBldGMuIFlvdSBtYXkgb3IgbWF5IG5vdCB3YW50IHRoaXMuCisKK05PX05FRF9OQU1FU1BBQ0UgcHJldmVudHMgdGhlIGZ1bmN0aW9ucyBmcm9tIGJlaW5nIGRlZmluZWQgaW4gdGhlIG5lZGFsbG9jCituYW1lc3BhY2Ugd2hlbiBpbiBDKysgKHVzZXMgdGhlIGdsb2JhbCBuYW1lc3BhY2UgaW5zdGVhZCkuCisKK0VYVFNQRUMgY2FuIGJlIGRlZmluZWQgdG8gYmUgX19kZWNsc3BlYyhkbGxleHBvcnQpIG9yCitfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgb3Igd2hhdGV2ZXIgeW91IGxpa2UuIEl0IGRlZmF1bHRzCit0byBleHRlcm4uCisKK1VTRV9MT0NLUyBjYW4gYmUgMiBpZiB5b3Ugd2FudCB0byBkZWZpbmUgeW91ciBvd24gTUxPQ0tfVCwgSU5JVElBTF9MT0NLLAorQUNRVUlSRV9MT0NLLCBSRUxFQVNFX0xPQ0ssIFRSWV9MT0NLLCBJU19MT0NLRUQgYW5kIE5VTExfTE9DS19JTklUSUFMSVpFUi4KKworKi8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPiAgIC8qIGZvciBzaXplX3QgKi8KKworI2lmbmRlZiBFWFRTUEVDCisgI2RlZmluZSBFWFRTUEVDIGV4dGVybgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUj49MTQwMAorICNkZWZpbmUgTUFMTE9DQVRUUiBfX2RlY2xzcGVjKHJlc3RyaWN0KQorI2VuZGlmCisjaWZkZWYgX19HTlVDX18KKyAjZGVmaW5lIE1BTExPQ0FUVFIgX19hdHRyaWJ1dGVfXyAoKG1hbGxvYykpCisjZW5kaWYKKyNpZm5kZWYgTUFMTE9DQVRUUgorICNkZWZpbmUgTUFMTE9DQVRUUgorI2VuZGlmCisKKyNpZmRlZiBSRVBMQUNFX1NZU1RFTV9BTExPQ0FUT1IKKyAjZGVmaW5lIG5lZG1hbGxvYyAgICAgICAgICAgICAgIG1hbGxvYworICNkZWZpbmUgbmVkY2FsbG9jICAgICAgICAgICAgICAgY2FsbG9jCisgI2RlZmluZSBuZWRyZWFsbG9jICAgICAgICAgICAgICByZWFsbG9jCisgI2RlZmluZSBuZWRmcmVlICAgICAgICAgICAgICAgICBmcmVlCisgI2RlZmluZSBuZWRtZW1hbGlnbiAgICAgICAgICAgICBtZW1hbGlnbgorICNkZWZpbmUgbmVkbWFsbGluZm8gICAgICAgICAgICAgbWFsbGluZm8KKyAjZGVmaW5lIG5lZG1hbGxvcHQgICAgICAgICAgICAgIG1hbGxvcHQKKyAjZGVmaW5lIG5lZG1hbGxvY190cmltICAgICAgICAgIG1hbGxvY190cmltCisgI2RlZmluZSBuZWRtYWxsb2Nfc3RhdHMgICAgICAgICBtYWxsb2Nfc3RhdHMKKyAjZGVmaW5lIG5lZG1hbGxvY19mb290cHJpbnQgICAgIG1hbGxvY19mb290cHJpbnQKKyAjZGVmaW5lIG5lZGluZGVwZW5kZW50X2NhbGxvYyAgIGluZGVwZW5kZW50X2NhbGxvYworICNkZWZpbmUgbmVkaW5kZXBlbmRlbnRfY29tYWxsb2MgaW5kZXBlbmRlbnRfY29tYWxsb2MKKyAjaWZkZWYgX01TQ19WRVIKKyAgI2RlZmluZSBuZWRibGtzaXplICAgICAgICAgICAgICBfbXNpemUKKyAjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIE5PX01BTExJTkZPCisjZGVmaW5lIE5PX01BTExJTkZPIDAKKyNlbmRpZgorCisjaWYgIU5PX01BTExJTkZPCitzdHJ1Y3QgbWFsbGluZm87CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCisgI2lmICFkZWZpbmVkKE5PX05FRF9OQU1FU1BBQ0UpCituYW1lc3BhY2UgbmVkYWxsb2MgeworICNlbHNlCitleHRlcm4gIkMiIHsKKyAjZW5kaWYKKyAjZGVmaW5lIFRIUk9XU1BFQyB0aHJvdygpCisjZWxzZQorICNkZWZpbmUgVEhST1dTUEVDCisjZW5kaWYKKworLyogVGhlc2UgYXJlIHRoZSBnbG9iYWwgZnVuY3Rpb25zICovCisKKy8qIEdldHMgdGhlIHVzYWJsZSBzaXplIG9mIGFuIGFsbG9jYXRlZCBibG9jay4gTm90ZSB0aGlzIHdpbGwgYWx3YXlzIGJlIGJpZ2dlciB0aGFuIHdoYXQgd2FzCithc2tlZCBmb3IgZHVlIHRvIHJvdW5kaW5nIGV0Yy4KKyovCitFWFRTUEVDIHNpemVfdCBuZWRibGtzaXplKHZvaWQgKm1lbSkgVEhST1dTUEVDOworCitFWFRTUEVDIHZvaWQgbmVkc2V0dmFsdWUodm9pZCAqdikgVEhST1dTUEVDOworCitFWFRTUEVDIE1BTExPQ0FUVFIgdm9pZCAqIG5lZG1hbGxvYyhzaXplX3Qgc2l6ZSkgVEhST1dTUEVDOworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKiBuZWRjYWxsb2Moc2l6ZV90IG5vLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDOworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKiBuZWRyZWFsbG9jKHZvaWQgKm1lbSwgc2l6ZV90IHNpemUpIFRIUk9XU1BFQzsKK0VYVFNQRUMgdm9pZCAgIG5lZGZyZWUodm9pZCAqbWVtKSBUSFJPV1NQRUM7CitFWFRTUEVDIE1BTExPQ0FUVFIgdm9pZCAqIG5lZG1lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykgVEhST1dTUEVDOworI2lmICFOT19NQUxMSU5GTworRVhUU1BFQyBzdHJ1Y3QgbWFsbGluZm8gbmVkbWFsbGluZm8odm9pZCkgVEhST1dTUEVDOworI2VuZGlmCitFWFRTUEVDIGludCAgICBuZWRtYWxsb3B0KGludCBwYXJubywgaW50IHZhbHVlKSBUSFJPV1NQRUM7CitFWFRTUEVDIGludCAgICBuZWRtYWxsb2NfdHJpbShzaXplX3QgcGFkKSBUSFJPV1NQRUM7CitFWFRTUEVDIHZvaWQgICBuZWRtYWxsb2Nfc3RhdHModm9pZCkgVEhST1dTUEVDOworRVhUU1BFQyBzaXplX3QgbmVkbWFsbG9jX2Zvb3RwcmludCh2b2lkKSBUSFJPV1NQRUM7CitFWFRTUEVDIE1BTExPQ0FUVFIgdm9pZCAqKm5lZGluZGVwZW5kZW50X2NhbGxvYyhzaXplX3QgZWxlbXNubywgc2l6ZV90IGVsZW1zaXplLCB2b2lkICoqY2h1bmtzKSBUSFJPV1NQRUM7CitFWFRTUEVDIE1BTExPQ0FUVFIgdm9pZCAqKm5lZGluZGVwZW5kZW50X2NvbWFsbG9jKHNpemVfdCBlbGVtcywgc2l6ZV90ICpzaXplcywgdm9pZCAqKmNodW5rcykgVEhST1dTUEVDOworCisvKiBUaGVzZSBhcmUgdGhlIHBvb2wgZnVuY3Rpb25zICovCitzdHJ1Y3QgbmVkcG9vbF90OwordHlwZWRlZiBzdHJ1Y3QgbmVkcG9vbF90IG5lZHBvb2w7CisKKy8qIENyZWF0ZXMgYSBtZW1vcnkgcG9vbCBmb3IgdXNlIHdpdGggdGhlIG5lZHAqIGZ1bmN0aW9ucyBiZWxvdy4KK0NhcGFjaXR5IGlzIGhvdyBtdWNoIHRvIGFsbG9jYXRlIGltbWVkaWF0ZWx5IChpZiB5b3Uga25vdyB5b3UnbGwgYmUgYWxsb2NhdGluZyBhIGxvdAorb2YgbWVtb3J5IHZlcnkgc29vbikgd2hpY2ggeW91IGNhbiBsZWF2ZSBhdCB6ZXJvLiBUaHJlYWRzIHNwZWNpZmllcyBob3cgbWFueSB0aHJlYWRzCit3aWxsICpub3JtYWxseSogYmUgYWNjZXNzaW5nIHRoZSBwb29sIGNvbmN1cnJlbnRseS4gU2V0dGluZyB0aGlzIHRvIHplcm8gbWVhbnMgaXQKK2V4dGVuZHMgb24gZGVtYW5kLCBidXQgYmUgY2FyZWZ1bCBvZiB0aGlzIGFzIGl0IGNhbiByYXBpZGx5IGNvbnN1bWUgc3lzdGVtIHJlc291cmNlcword2hlcmUgYnVyc3RzIG9mIGNvbmN1cnJlbnQgdGhyZWFkcyB1c2UgYSBwb29sIGF0IG9uY2UuCisqLworRVhUU1BFQyBNQUxMT0NBVFRSIG5lZHBvb2wgKm5lZGNyZWF0ZXBvb2woc2l6ZV90IGNhcGFjaXR5LCBpbnQgdGhyZWFkcykgVEhST1dTUEVDOworCisvKiBEZXN0cm95cyBhIG1lbW9yeSBwb29sIHByZXZpb3VzbHkgY3JlYXRlZCBieSBuZWRjcmVhdGVwb29sKCkuCisqLworRVhUU1BFQyB2b2lkIG5lZGRlc3Ryb3lwb29sKG5lZHBvb2wgKnApIFRIUk9XU1BFQzsKKworLyogU2V0cyBhIHZhbHVlIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBhIHBvb2wuIFlvdSBjYW4gcmV0cmlldmUgdGhpcyB2YWx1ZSBieSBwYXNzaW5nCithbnkgbWVtb3J5IGJsb2NrIGFsbG9jYXRlZCBmcm9tIHRoYXQgcG9vbC4KKyovCitFWFRTUEVDIHZvaWQgbmVkcHNldHZhbHVlKG5lZHBvb2wgKnAsIHZvaWQgKnYpIFRIUk9XU1BFQzsKKy8qIEdldHMgYSBwcmV2aW91c2x5IHNldCB2YWx1ZSB1c2luZyBuZWRwc2V0dmFsdWUoKSBvciB6ZXJvIGlmIG1lbW9yeSBpcyB1bmtub3duLgorT3B0aW9uYWxseSBjYW4gYWxzbyByZXRyaWV2ZSBwb29sLgorKi8KK0VYVFNQRUMgdm9pZCAqbmVkZ2V0dmFsdWUobmVkcG9vbCAqKnAsIHZvaWQgKm1lbSkgVEhST1dTUEVDOworCisvKiBEaXNhYmxlcyB0aGUgdGhyZWFkIGNhY2hlIGZvciB0aGUgY2FsbGluZyB0aHJlYWQsIHJldHVybmluZyBhbnkgZXhpc3RpbmcgY2FjaGUKK2RhdGEgdG8gdGhlIGNlbnRyYWwgcG9vbC4KKyovCitFWFRTUEVDIHZvaWQgbmVkZGlzYWJsZXRocmVhZGNhY2hlKG5lZHBvb2wgKnApIFRIUk9XU1BFQzsKKworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKiBuZWRwbWFsbG9jKG5lZHBvb2wgKnAsIHNpemVfdCBzaXplKSBUSFJPV1NQRUM7CitFWFRTUEVDIE1BTExPQ0FUVFIgdm9pZCAqIG5lZHBjYWxsb2MobmVkcG9vbCAqcCwgc2l6ZV90IG5vLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDOworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKiBuZWRwcmVhbGxvYyhuZWRwb29sICpwLCB2b2lkICptZW0sIHNpemVfdCBzaXplKSBUSFJPV1NQRUM7CitFWFRTUEVDIHZvaWQgICBuZWRwZnJlZShuZWRwb29sICpwLCB2b2lkICptZW0pIFRIUk9XU1BFQzsKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICogbmVkcG1lbWFsaWduKG5lZHBvb2wgKnAsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykgVEhST1dTUEVDOworI2lmICFOT19NQUxMSU5GTworRVhUU1BFQyBzdHJ1Y3QgbWFsbGluZm8gbmVkcG1hbGxpbmZvKG5lZHBvb2wgKnApIFRIUk9XU1BFQzsKKyNlbmRpZgorRVhUU1BFQyBpbnQgICAgbmVkcG1hbGxvcHQobmVkcG9vbCAqcCwgaW50IHBhcm5vLCBpbnQgdmFsdWUpIFRIUk9XU1BFQzsKK0VYVFNQRUMgaW50ICAgIG5lZHBtYWxsb2NfdHJpbShuZWRwb29sICpwLCBzaXplX3QgcGFkKSBUSFJPV1NQRUM7CitFWFRTUEVDIHZvaWQgICBuZWRwbWFsbG9jX3N0YXRzKG5lZHBvb2wgKnApIFRIUk9XU1BFQzsKK0VYVFNQRUMgc2l6ZV90IG5lZHBtYWxsb2NfZm9vdHByaW50KG5lZHBvb2wgKnApIFRIUk9XU1BFQzsKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICoqbmVkcGluZGVwZW5kZW50X2NhbGxvYyhuZWRwb29sICpwLCBzaXplX3QgZWxlbXNubywgc2l6ZV90IGVsZW1zaXplLCB2b2lkICoqY2h1bmtzKSBUSFJPV1NQRUM7CitFWFRTUEVDIE1BTExPQ0FUVFIgdm9pZCAqKm5lZHBpbmRlcGVuZGVudF9jb21hbGxvYyhuZWRwb29sICpwLCBzaXplX3QgZWxlbXMsIHNpemVfdCAqc2l6ZXMsIHZvaWQgKipjaHVua3MpIFRIUk9XU1BFQzsKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworI3VuZGVmIE1BTExPQ0FUVFIKKyN1bmRlZiBFWFRTUEVDCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29tcGF0L3JlZ2V4L3JlZ2V4LmMgYi9jb21wYXQvcmVnZXgvcmVnZXguYwppbmRleCA1ZWEwMDc1Li41NTZkOGFiIDEwMDY0NAotLS0gYS9jb21wYXQvcmVnZXgvcmVnZXguYworKysgYi9jb21wYXQvcmVnZXgvcmVnZXguYwpAQCAtMjgwOCw3ICsyODA4LDcgQEAKICAgICB7CiAgICAgICBidWZwLT5yZWdzX2FsbG9jYXRlZCA9IFJFR1NfVU5BTExPQ0FURUQ7CiAgICAgICByZWdzLT5udW1fcmVncyA9IDA7Ci0gICAgICByZWdzLT5zdGFydCA9IHJlZ3MtPmVuZCA9IChyZWdvZmZfdCkgMDsKKyAgICAgIHJlZ3MtPnN0YXJ0ID0gcmVncy0+ZW5kID0gKHJlZ29mZl90ICopIDA7CiAgICAgfQogfQogDApAQCAtNDg1MiwxMSArNDg1Miw4IEBACiAgICBmcm9tIGVpdGhlciByZWdjb21wIG9yIHJlZ2V4ZWMuICAgV2UgZG9uJ3QgdXNlIFBSRUcgaGVyZS4gICovCiAKIHNpemVfdAotcmVnZXJyb3IgKGVycmNvZGUsIHByZWcsIGVycmJ1ZiwgZXJyYnVmX3NpemUpCi0gICAgaW50IGVycmNvZGU7Ci0gICAgY29uc3QgcmVnZXhfdCAqcHJlZzsKLSAgICBjaGFyICplcnJidWY7Ci0gICAgc2l6ZV90IGVycmJ1Zl9zaXplOworcmVnZXJyb3IoaW50IGVycmNvZGUsIGNvbnN0IHJlZ2V4X3QgKnByZWcsCisJIGNoYXIgKmVycmJ1Ziwgc2l6ZV90IGVycmJ1Zl9zaXplKQogewogICBjb25zdCBjaGFyICptc2c7CiAgIHNpemVfdCBtc2dfc2l6ZTsKZGlmZiAtLWdpdCBhL2NvbXBhdC9zbnByaW50Zi5jIGIvY29tcGF0L3NucHJpbnRmLmMKaW5kZXggMzU3ZTczMy4uZTFlMGU3NSAxMDA2NDQKLS0tIGEvY29tcGF0L3NucHJpbnRmLmMKKysrIGIvY29tcGF0L3NucHJpbnRmLmMKQEAgLTIsMTIgKzIsMTkgQEAKIAogLyoKICAqIFRoZSBzaXplIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIGF2YWlsYWJsZSBzcGFjZSwgaS5lLiBpbmNsdWRlcwotICogdGhlIHRyYWlsaW5nIE5VTCBieXRlOyBidXQgV2luZG93cydzIHZzbnByaW50ZiBleHBlY3RzIHRoZQotICogbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gd3JpdGUgd2l0aG91dCB0aGUgdHJhaWxpbmcgTlVMLgorICogdGhlIHRyYWlsaW5nIE5VTCBieXRlOyBidXQgV2luZG93cydzIHZzbnByaW50ZiB1c2VzIHRoZSBlbnRpcmUKKyAqIGJ1ZmZlciBhbmQgYXZvaWRzIHRoZSB0cmFpbGluZyBOVUwsIHNob3VsZCB0aGUgYnVmZmVyIGJlIGV4YWN0bHkKKyAqIGJpZyBlbm91Z2ggZm9yIHRoZSByZXN1bHQuIERlZmluaW5nIFNOUFJJTlRGX1NJWkVfQ09SUiB0byAxIHdpbGwKKyAqIHRoZXJlZm9yZSByZW1vdmUgMSBieXRlIGZyb20gdGhlIHJlcG9ydGVkIGJ1ZmZlciBzaXplLCBzbyB3ZQorICogYWx3YXlzIGhhdmUgcm9vbSBmb3IgYSB0cmFpbGluZyBOVUwgYnl0ZS4KICAqLwogI2lmbmRlZiBTTlBSSU5URl9TSVpFX0NPUlIKKyNpZiBkZWZpbmVkKFdJTjMyKSAmJiAoIWRlZmluZWQoX19HTlVDX18pIHx8IF9fR05VQ19fIDwgNCkKKyNkZWZpbmUgU05QUklOVEZfU0laRV9DT1JSIDEKKyNlbHNlCiAjZGVmaW5lIFNOUFJJTlRGX1NJWkVfQ09SUiAwCiAjZW5kaWYKKyNlbmRpZgogCiAjdW5kZWYgdnNucHJpbnRmCiBpbnQgZ2l0X3ZzbnByaW50ZihjaGFyICpzdHIsIHNpemVfdCBtYXhzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXApCmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9SRUFETUUgYi9jb21wYXQvdmNidWlsZC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY4YTY1NwotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC92Y2J1aWxkL1JFQURNRQpAQCAtMCwwICsxLDUwIEBACitUaGUgU3RlcHMgb2YgQnVpbGQgR2l0IHdpdGggVlMyMDA4CisKKzEuIFlvdSBuZWVkIHRoZSBidWlsZCBlbnZpcm9ubWVudCwgd2hpY2ggY29udGFpbnMgdGhlIEdpdCBkZXBlbmRlbmNpZXMKKyAgIHRvIGJlIGFibGUgdG8gY29tcGlsZSwgbGluayBhbmQgcnVuIEdpdCB3aXRoIE1TVkMuCisKKyAgIFlvdSBjYW4gZWl0aGVyIHVzZSB0aGUgYmluYXJ5IHJlcG9zaXRvcnk6CisKKyAgICAgICBXV1c6IGh0dHA6Ly9yZXBvLm9yLmN6L3cvbXN2Y2dpdC5naXQKKyAgICAgICBHaXQ6IGdpdCBjbG9uZSBnaXQ6Ly9yZXBvLm9yLmN6L21zdmNnaXQuZ2l0CisgICAgICAgWmlwOiBodHRwOi8vcmVwby5vci5jei93L21zdmNnaXQuZ2l0P2E9c25hcHNob3Q7aD1tYXN0ZXI7c2Y9emlwCisKKyAgIGFuZCBjYWxsIHRoZSBzZXR1cF8zMmJpdF9lbnYuY21kIGJhdGNoIHNjcmlwdCBiZWZvcmUgY29tcGlsaW5nIEdpdCwKKyAgIChzZWUgcmVwby9wYWNrYWdlIFJFQURNRSBmb3IgZGV0YWlscyksIG9yIHRoZSBzb3VyY2UgcmVwb3NpdG9yeToKKworICAgICAgIFdXVzogaHR0cDovL3JlcG8ub3IuY3ovdy9naXRidWlsZC5naXQKKyAgICAgICBHaXQ6IGdpdCBjbG9uZSBnaXQ6Ly9yZXBvLm9yLmN6L2dpdGJ1aWxkLmdpdAorICAgICAgIFppcDogKE5vbmUsIGFzIGl0J3MgYSBwcm9qZWN0IHdpdGggc3VibW9kdWxlcykKKworICAgYW5kIGJ1aWxkIHRoZSBzdXBwb3J0IGxpYnMgYXMgaW5zdHJ1Y3RlZCBpbiB0aGF0IHJlcG8vcGFja2FnZS4KKworMi4gRW5zdXJlIHlvdSBoYXZlIHRoZSBtc3lzZ2l0IGVudmlyb25tZW50IGluIHlvdXIgcGF0aCwgc28geW91IGhhdmUKKyAgIEdOVSBNYWtlLCBiYXNoIGFuZCBwZXJsIGF2YWlsYWJsZS4KKworICAgICAgIFdXVzogaHR0cDovL3JlcG8ub3IuY3ovdy9tc3lzZ2l0LmdpdAorICAgICAgIEdpdDogZ2l0IGNsb25lIGdpdDovL3JlcG8ub3IuY3ovbXN5c2dpdC5naXQKKyAgICAgICBaaXA6IGh0dHA6Ly9yZXBvLm9yLmN6L3cvbXN5c2dpdC5naXQ/YT1zbmFwc2hvdDtoPW1hc3RlcjtzZj16aXAKKworICAgVGhpcyBlbnZpcm9ubWVudCBpcyBhbHNvIG5lZWRlZCB3aGVuIHlvdSB1c2UgdGhlIHJlc3VsdGluZworICAgZXhlY3V0YWJsZXMsIHNpbmNlIEdpdCBtaWdodCBuZWVkIHRvIHJ1biBzY3JpcHRzIHdoaWNoIGFyZSBwYXJ0IG9mCisgICB0aGUgZ2l0IG9wZXJhdGlvbnMuCisKKzMuIEluc2lkZSBHaXQncyBkaXJlY3RvcnkgcnVuIHRoZSBjb21tYW5kOgorICAgICAgIG1ha2UgY29tbW9uLWNtZHMuaAorICAgdG8gZ2VuZXJhdGUgdGhlIGNvbW1vbi1jbWRzLmggZmlsZSBuZWVkZWQgdG8gY29tcGlsZSBnaXQuCisKKzQuIFRoZW4gZWl0aGVyIGJ1aWxkIEdpdCB3aXRoIHRoZSBHTlUgTWFrZSBNYWtlZmlsZSBpbiB0aGUgR2l0IHByb2plY3RzCisgICByb290CisgICAgICAgbWFrZSBNU1ZDPTEKKyAgIG9yIGdlbmVyYXRlIFZpc3VhbCBTdHVkaW8gc29sdXRpb24vcHJvamVjdHMgKC5zbG4vLnZjcHJvaikgd2l0aCB0aGUKKyAgIGNvbW1hbmQKKyAgICAgICBwZXJsIGNvbnRyaWIvYnVpbGRzeXN0ZW1zL2dlbmVyYXRlIC1nIFZjcHJvagorICAgYW5kIG9wZW4gYW5kIGJ1aWxkIHRoZSBzb2x1dGlvbiB3aXRoIHRoZSBJREUKKyAgICAgICBkZXZlbnYgZ2l0LnNsbiAvdXNlZW52CisgICBvciBidWlsZCB3aXRoIHRoZSBJREUgYnVpbGQgZW5naW5lIGRpcmVjdGx5IGZyb20gdGhlIGNvbW1hbmQgbGluZQorICAgICAgIGRldmVudiBnaXQuc2xuIC91c2VlbnYgL2J1aWxkICJSZWxlYXNlfFdpbjMyIgorICAgVGhlIC91c2VlbnYgb3B0aW9uIGlzIHJlcXVpcmVkLCBzbyBWaXN1YWwgU3R1ZGlvIHBpY2tzIHVwIHRoZQorICAgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgc3VwcG9ydCBsaWJyYXJpZXMgcmVxdWlyZWQgdG8gYnVpbGQKKyAgIEdpdCwgd2hpY2ggeW91IHNldCB1cCBpbiBzdGVwIDEuCisKK0RvbmUhCmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9pbmNsdWRlL2FsbG9jYS5oIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS9hbGxvY2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGQ3OTg1Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS9hbGxvY2EuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8bWFsbG9jLmg+CmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9pbmNsdWRlL2FycGEvaW5ldC5oIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS9hcnBhL2luZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDg1NTJhCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS9hcnBhL2luZXQuaApAQCAtMCwwICsxIEBACisvKiBJbnRlbnRpb25hbGx5IGVtcHR5IGZpbGUgdG8gc3VwcG9ydCBidWlsZGluZyBnaXQgd2l0aCBNU1ZDICovCmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9pbmNsdWRlL2RpcmVudC5oIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS9kaXJlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDA2MThkCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS9kaXJlbnQuaApAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIERJUkVOVC5IIChmb3JtZXJseSBESVJMSUIuSCkKKyAqIFRoaXMgZmlsZSBoYXMgbm8gY29weXJpZ2h0IGFzc2lnbmVkIGFuZCBpcyBwbGFjZWQgaW4gdGhlIFB1YmxpYyBEb21haW4uCisgKiBUaGlzIGZpbGUgaXMgYSBwYXJ0IG9mIHRoZSBtaW5ndy1ydW50aW1lIHBhY2thZ2UuCisgKgorICogVGhlIG1pbmd3LXJ1bnRpbWUgcGFja2FnZSBhbmQgaXRzIGNvZGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAorICogd2lsbCBiZSB1c2VmdWwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLiAgQUxMIFdBUlJBTlRJRVMsIEVYUFJFU1NFRCBPUgorICogSU1QTElFRCBBUkUgSEVSRUJZIERJU0NMQUlNRUQuICBUaGlzIGluY2x1ZGVzIGJ1dCBpcyBub3QgbGltaXRlZCB0bworICogd2FycmFudGllcyBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKgorICogWW91IGFyZSBmcmVlIHRvIHVzZSB0aGlzIHBhY2thZ2UgYW5kIGl0cyBjb2RlIHdpdGhvdXQgbGltaXRhdGlvbi4KKyAqLworI2lmbmRlZiBfRElSRU5UX0hfCisjZGVmaW5lIF9ESVJFTlRfSF8KKyNpbmNsdWRlIDxpby5oPgorCisjZGVmaW5lIFBBVEhfTUFYIDUxMgorCisjZGVmaW5lIF9fTUlOR1dfTk9USFJPVworCisjaWZuZGVmIFJDX0lOVk9LRUQKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitzdHJ1Y3QgZGlyZW50Cit7CisJbG9uZwkJZF9pbm87CQkvKiBBbHdheXMgemVyby4gKi8KKwl1bnNpZ25lZCBzaG9ydAlkX3JlY2xlbjsJLyogQWx3YXlzIHplcm8uICovCisJdW5zaWduZWQgc2hvcnQJZF9uYW1sZW47CS8qIExlbmd0aCBvZiBuYW1lIGluIGRfbmFtZS4gKi8KKwljaGFyCQlkX25hbWVbRklMRU5BTUVfTUFYXTsgLyogRmlsZSBuYW1lLiAqLworfTsKKworLyoKKyAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUuIEdvb2QgcHJvZ3JhbW1lcnMgd2lsbCBub3QgdXNlIGl0CisgKiBleGNlcHQgYXMgYW4gYXJndW1lbnQgdG8gb25lIG9mIHRoZSBmdW5jdGlvbnMgYmVsb3cuCisgKiBkZF9zdGF0IGZpZWxkIGlzIG5vdyBpbnQgKHdhcyBzaG9ydCBpbiBvbGRlciB2ZXJzaW9ucykuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJLyogZGlzayB0cmFuc2ZlciBhcmVhIGZvciB0aGlzIGRpciAqLworCXN0cnVjdCBfZmluZGRhdGFfdAlkZF9kdGE7CisKKwkvKiBkaXJlbnQgc3RydWN0IHRvIHJldHVybiBmcm9tIGRpciAoTk9URTogdGhpcyBtYWtlcyB0aGlzIHRocmVhZAorCSAqIHNhZmUgYXMgbG9uZyBhcyBvbmx5IG9uZSB0aHJlYWQgdXNlcyBhIHBhcnRpY3VsYXIgRElSIHN0cnVjdCBhdAorCSAqIGEgdGltZSkgKi8KKwlzdHJ1Y3QgZGlyZW50CQlkZF9kaXI7CisKKwkvKiBfZmluZG5leHQgaGFuZGxlICovCisJbG9uZwkJCWRkX2hhbmRsZTsKKworCS8qCisJICogU3RhdHVzIG9mIHNlYXJjaDoKKwkgKiAgIDAgPSBub3Qgc3RhcnRlZCB5ZXQgKG5leHQgZW50cnkgdG8gcmVhZCBpcyBmaXJzdCBlbnRyeSkKKwkgKiAgLTEgPSBvZmYgdGhlIGVuZAorCSAqICAgcG9zaXRpdmUgPSAwIGJhc2VkIGluZGV4IG9mIG5leHQgZW50cnkKKwkgKi8KKwlpbnQJCQlkZF9zdGF0OworCisJLyogZ2l2ZW4gcGF0aCBmb3IgZGlyIHdpdGggc2VhcmNoIHBhdHRlcm4gKHN0cnVjdCBpcyBleHRlbmRlZCkgKi8KKwljaGFyCQkJZGRfbmFtZVtQQVRIX01BWCszXTsKK30gRElSOworCitESVIqIF9fY2RlY2wgX19NSU5HV19OT1RIUk9XIG9wZW5kaXIgKGNvbnN0IGNoYXIqKTsKK3N0cnVjdCBkaXJlbnQqIF9fY2RlY2wgX19NSU5HV19OT1RIUk9XIHJlYWRkaXIgKERJUiopOworaW50IF9fY2RlY2wgX19NSU5HV19OT1RIUk9XIGNsb3NlZGlyIChESVIqKTsKK3ZvaWQgX19jZGVjbCBfX01JTkdXX05PVEhST1cgcmV3aW5kZGlyIChESVIqKTsKK2xvbmcgX19jZGVjbCBfX01JTkdXX05PVEhST1cgdGVsbGRpciAoRElSKik7Cit2b2lkIF9fY2RlY2wgX19NSU5HV19OT1RIUk9XIHNlZWtkaXIgKERJUiosIGxvbmcpOworCisKKy8qIHdpZGUgY2hhciB2ZXJzaW9ucyAqLworCitzdHJ1Y3QgX3dkaXJlbnQKK3sKKwlsb25nCQlkX2lubzsJCS8qIEFsd2F5cyB6ZXJvLiAqLworCXVuc2lnbmVkIHNob3J0CWRfcmVjbGVuOwkvKiBBbHdheXMgemVyby4gKi8KKwl1bnNpZ25lZCBzaG9ydAlkX25hbWxlbjsJLyogTGVuZ3RoIG9mIG5hbWUgaW4gZF9uYW1lLiAqLworCXdjaGFyX3QJCWRfbmFtZVtGSUxFTkFNRV9NQVhdOyAvKiBGaWxlIG5hbWUuICovCit9OworCisvKgorICogVGhpcyBpcyBhbiBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZS4gR29vZCBwcm9ncmFtbWVycyB3aWxsIG5vdCB1c2UgaXQKKyAqIGV4Y2VwdCBhcyBhbiBhcmd1bWVudCB0byBvbmUgb2YgdGhlIGZ1bmN0aW9ucyBiZWxvdy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwkvKiBkaXNrIHRyYW5zZmVyIGFyZWEgZm9yIHRoaXMgZGlyICovCisJLy9zdHJ1Y3QgX3dmaW5kZGF0YV90CWRkX2R0YTsKKworCS8qIGRpcmVudCBzdHJ1Y3QgdG8gcmV0dXJuIGZyb20gZGlyIChOT1RFOiB0aGlzIG1ha2VzIHRoaXMgdGhyZWFkCisJICogc2FmZSBhcyBsb25nIGFzIG9ubHkgb25lIHRocmVhZCB1c2VzIGEgcGFydGljdWxhciBESVIgc3RydWN0IGF0CisJICogYSB0aW1lKSAqLworCXN0cnVjdCBfd2RpcmVudAkJZGRfZGlyOworCisJLyogX2ZpbmRuZXh0IGhhbmRsZSAqLworCWxvbmcJCQlkZF9oYW5kbGU7CisKKwkvKgorCSAqIFN0YXR1cyBvZiBzZWFyY2g6CisJICogICAwID0gbm90IHN0YXJ0ZWQgeWV0IChuZXh0IGVudHJ5IHRvIHJlYWQgaXMgZmlyc3QgZW50cnkpCisJICogIC0xID0gb2ZmIHRoZSBlbmQKKwkgKiAgIHBvc2l0aXZlID0gMCBiYXNlZCBpbmRleCBvZiBuZXh0IGVudHJ5CisJICovCisJaW50CQkJZGRfc3RhdDsKKworCS8qIGdpdmVuIHBhdGggZm9yIGRpciB3aXRoIHNlYXJjaCBwYXR0ZXJuIChzdHJ1Y3QgaXMgZXh0ZW5kZWQpICovCisJd2NoYXJfdAkJCWRkX25hbWVbMV07Cit9IF9XRElSOworCisKKworX1dESVIqIF9fY2RlY2wgX19NSU5HV19OT1RIUk9XIF93b3BlbmRpciAoY29uc3Qgd2NoYXJfdCopOworc3RydWN0IF93ZGlyZW50KiAgX19jZGVjbCBfX01JTkdXX05PVEhST1cgX3dyZWFkZGlyIChfV0RJUiopOworaW50IF9fY2RlY2wgX19NSU5HV19OT1RIUk9XIF93Y2xvc2VkaXIgKF9XRElSKik7Cit2b2lkIF9fY2RlY2wgX19NSU5HV19OT1RIUk9XIF93cmV3aW5kZGlyIChfV0RJUiopOworbG9uZyBfX2NkZWNsIF9fTUlOR1dfTk9USFJPVyBfd3RlbGxkaXIgKF9XRElSKik7Cit2b2lkIF9fY2RlY2wgX19NSU5HV19OT1RIUk9XIF93c2Vla2RpciAoX1dESVIqLCBsb25nKTsKKworCisjaWZkZWYJX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYJLyogTm90IFJDX0lOVk9LRUQgKi8KKworI2VuZGlmCS8qIE5vdCBfRElSRU5UX0hfICovCmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9pbmNsdWRlL2dycC5oIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS9ncnAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDg1NTJhCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS9ncnAuaApAQCAtMCwwICsxIEBACisvKiBJbnRlbnRpb25hbGx5IGVtcHR5IGZpbGUgdG8gc3VwcG9ydCBidWlsZGluZyBnaXQgd2l0aCBNU1ZDICovCmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9pbmNsdWRlL2ludHR5cGVzLmggYi9jb21wYXQvdmNidWlsZC9pbmNsdWRlL2ludHR5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ4NTUyYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvaW50dHlwZXMuaApAQCAtMCwwICsxIEBACisvKiBJbnRlbnRpb25hbGx5IGVtcHR5IGZpbGUgdG8gc3VwcG9ydCBidWlsZGluZyBnaXQgd2l0aCBNU1ZDICovCmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9pbmNsdWRlL25ldGRiLmggYi9jb21wYXQvdmNidWlsZC9pbmNsdWRlL25ldGRiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ4NTUyYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvbmV0ZGIuaApAQCAtMCwwICsxIEBACisvKiBJbnRlbnRpb25hbGx5IGVtcHR5IGZpbGUgdG8gc3VwcG9ydCBidWlsZGluZyBnaXQgd2l0aCBNU1ZDICovCmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9pbmNsdWRlL25ldGluZXQvaW4uaCBiL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvbmV0aW5ldC9pbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkODU1MmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvdmNidWlsZC9pbmNsdWRlL25ldGluZXQvaW4uaApAQCAtMCwwICsxIEBACisvKiBJbnRlbnRpb25hbGx5IGVtcHR5IGZpbGUgdG8gc3VwcG9ydCBidWlsZGluZyBnaXQgd2l0aCBNU1ZDICovCmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9pbmNsdWRlL25ldGluZXQvdGNwLmggYi9jb21wYXQvdmNidWlsZC9pbmNsdWRlL25ldGluZXQvdGNwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ4NTUyYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvbmV0aW5ldC90Y3AuaApAQCAtMCwwICsxIEBACisvKiBJbnRlbnRpb25hbGx5IGVtcHR5IGZpbGUgdG8gc3VwcG9ydCBidWlsZGluZyBnaXQgd2l0aCBNU1ZDICovCmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3B3ZC5oIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS9wd2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDg1NTJhCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS9wd2QuaApAQCAtMCwwICsxIEBACisvKiBJbnRlbnRpb25hbGx5IGVtcHR5IGZpbGUgdG8gc3VwcG9ydCBidWlsZGluZyBnaXQgd2l0aCBNU1ZDICovCmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3N5cy9pb2N0bC5oIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS9zeXMvaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDg1NTJhCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS9zeXMvaW9jdGwuaApAQCAtMCwwICsxIEBACisvKiBJbnRlbnRpb25hbGx5IGVtcHR5IGZpbGUgdG8gc3VwcG9ydCBidWlsZGluZyBnaXQgd2l0aCBNU1ZDICovCmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3N5cy9wYXJhbS5oIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS9zeXMvcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDg1NTJhCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS9zeXMvcGFyYW0uaApAQCAtMCwwICsxIEBACisvKiBJbnRlbnRpb25hbGx5IGVtcHR5IGZpbGUgdG8gc3VwcG9ydCBidWlsZGluZyBnaXQgd2l0aCBNU1ZDICovCmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3N5cy9wb2xsLmggYi9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3N5cy9wb2xsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ4NTUyYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvc3lzL3BvbGwuaApAQCAtMCwwICsxIEBACisvKiBJbnRlbnRpb25hbGx5IGVtcHR5IGZpbGUgdG8gc3VwcG9ydCBidWlsZGluZyBnaXQgd2l0aCBNU1ZDICovCmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3N5cy9zZWxlY3QuaCBiL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvc3lzL3NlbGVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkODU1MmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3N5cy9zZWxlY3QuaApAQCAtMCwwICsxIEBACisvKiBJbnRlbnRpb25hbGx5IGVtcHR5IGZpbGUgdG8gc3VwcG9ydCBidWlsZGluZyBnaXQgd2l0aCBNU1ZDICovCmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3N5cy9zb2NrZXQuaCBiL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvc3lzL3NvY2tldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkODU1MmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3N5cy9zb2NrZXQuaApAQCAtMCwwICsxIEBACisvKiBJbnRlbnRpb25hbGx5IGVtcHR5IGZpbGUgdG8gc3VwcG9ydCBidWlsZGluZyBnaXQgd2l0aCBNU1ZDICovCmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3N5cy90aW1lLmggYi9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3N5cy90aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ4NTUyYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvc3lzL3RpbWUuaApAQCAtMCwwICsxIEBACisvKiBJbnRlbnRpb25hbGx5IGVtcHR5IGZpbGUgdG8gc3VwcG9ydCBidWlsZGluZyBnaXQgd2l0aCBNU1ZDICovCmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3N5cy91dGltZS5oIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS9zeXMvdXRpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODI1ODljCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS9zeXMvdXRpbWUuaApAQCAtMCwwICsxLDM0IEBACisjaWZuZGVmCV9VVElNRV9IXworI2RlZmluZQlfVVRJTUVfSF8KKy8qCisgKiBVVElNRS5ICisgKiBUaGlzIGZpbGUgaGFzIG5vIGNvcHlyaWdodCBhc3NpZ25lZCBhbmQgaXMgcGxhY2VkIGluIHRoZSBQdWJsaWMgRG9tYWluLgorICogVGhpcyBmaWxlIGlzIGEgcGFydCBvZiB0aGUgbWluZ3ctcnVudGltZSBwYWNrYWdlLgorICoKKyAqIFRoZSBtaW5ndy1ydW50aW1lIHBhY2thZ2UgYW5kIGl0cyBjb2RlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKKyAqIHdpbGwgYmUgdXNlZnVsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWS4gIEFMTCBXQVJSQU5USUVTLCBFWFBSRVNTRUQgT1IKKyAqIElNUExJRUQgQVJFIEhFUkVCWSBESVNDTEFJTUVELiAgVGhpcyBpbmNsdWRlcyBidXQgaXMgbm90IGxpbWl0ZWQgdG8KKyAqIHdhcnJhbnRpZXMgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICoKKyAqIFlvdSBhcmUgZnJlZSB0byB1c2UgdGhpcyBwYWNrYWdlIGFuZCBpdHMgY29kZSB3aXRob3V0IGxpbWl0YXRpb24uCisgKi8KKworLyoKKyAqIFN0cnVjdHVyZSB1c2VkIGJ5IF91dGltZSBmdW5jdGlvbi4KKyAqLworc3RydWN0IF91dGltYnVmCit7CisJdGltZV90CWFjdGltZTsJCS8qIEFjY2VzcyB0aW1lICovCisJdGltZV90CW1vZHRpbWU7CS8qIE1vZGlmaWNhdGlvbiB0aW1lICovCit9OworCisjaWZuZGVmCV9OT19PTEROQU1FUworLyogTk9URTogTXVzdCBiZSB0aGUgc2FtZSBhcyBfdXRpbWJ1ZiBhYm92ZS4gKi8KK3N0cnVjdCB1dGltYnVmCit7CisJdGltZV90CWFjdGltZTsKKwl0aW1lX3QJbW9kdGltZTsKK307CisjZW5kaWYJLyogTm90IF9OT19PTEROQU1FUyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvc3lzL3dhaXQuaCBiL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvc3lzL3dhaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDg1NTJhCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS9zeXMvd2FpdC5oCkBAIC0wLDAgKzEgQEAKKy8qIEludGVudGlvbmFsbHkgZW1wdHkgZmlsZSB0byBzdXBwb3J0IGJ1aWxkaW5nIGdpdCB3aXRoIE1TVkMgKi8KZGlmZiAtLWdpdCBhL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvdW5pc3RkLmggYi9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3VuaXN0ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNGYyNzYKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3VuaXN0ZC5oCkBAIC0wLDAgKzEsOTIgQEAKKyNpZm5kZWYgX1VOSVNURF8KKyNkZWZpbmUgX1VOSVNURF8KKworLyogV2luMzIgZGVmaW5lIGZvciBwb3J0aW5nIGdpdCovCisKKyNpZm5kZWYgX01PREVfVF8KKyNkZWZpbmUJX01PREVfVF8KK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX21vZGVfdDsKKworI2lmbmRlZglfTk9fT0xETkFNRVMKK3R5cGVkZWYgX21vZGVfdAltb2RlX3Q7CisjZW5kaWYKKyNlbmRpZgkvKiBOb3QgX01PREVfVF8gKi8KKworI2lmbmRlZiBfU1NJWkVfVF8KKyNkZWZpbmUgX1NTSVpFX1RfCit0eXBlZGVmIGxvbmcgX3NzaXplX3Q7CisKKyNpZm5kZWYJX09GRl9UXworI2RlZmluZQlfT0ZGX1RfCit0eXBlZGVmIGxvbmcgX29mZl90OworCisjaWZuZGVmCV9OT19PTEROQU1FUwordHlwZWRlZiBfb2ZmX3QJb2ZmX3Q7CisjZW5kaWYKKyNlbmRpZgkvKiBOb3QgX09GRl9UXyAqLworCisKKyNpZm5kZWYJX05PX09MRE5BTUVTCit0eXBlZGVmIF9zc2l6ZV90IHNzaXplX3Q7CisjZW5kaWYKKyNlbmRpZiAvKiBOb3QgX1NTSVpFX1RfICovCisKK3R5cGVkZWYgc2lnbmVkIGNoYXIgaW50OF90OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgdWludDhfdDsKK3R5cGVkZWYgc2hvcnQgIGludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICB1aW50MTZfdDsKK3R5cGVkZWYgaW50ICBpbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCAgIHVpbnQzMl90OwordHlwZWRlZiBsb25nIGxvbmcgIGludDY0X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyAgIHVpbnQ2NF90OworCit0eXBlZGVmIGxvbmcgbG9uZyAgaW50bWF4X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1aW50bWF4X3Q7CisKK3R5cGVkZWYgaW50NjRfdCBvZmY2NF90OworCisjZGVmaW5lIFNURE9VVF9GSUxFTk8gMQorI2RlZmluZSBTVERFUlJfRklMRU5PIDIKKworLyogU29tZSBkZWZpbmVzIGZvciBfYWNjZXNzIG5BY2Nlc3NNb2RlIChNUyBkb2Vzbid0IGRlZmluZSB0aGVtLCBidXQKKyAqIGl0IGRvZXNuJ3Qgc2VlbSB0byBodXJ0IHRvIGFkZCB0aGVtKS4gKi8KKyNkZWZpbmUJRl9PSwkwCS8qIENoZWNrIGZvciBmaWxlIGV4aXN0ZW5jZSAqLworLyogV2VsbCBtYXliZSBpdCBkb2VzIGh1cnQuICBPbiBuZXdlciB2ZXJzaW9ucyBvZiBNU1ZDUlQsIGFuIGFjY2VzcyBtb2RlCisgICBvZiAxIGNhdXNlcyBpbnZhbGlkIHBhcmFtZXRlciBlcnJvci4gKi8KKyNkZWZpbmUJWF9PSwkwCS8qIE1TIGFjY2VzcygpIGRvZXNuJ3QgY2hlY2sgZm9yIGV4ZWN1dGUgcGVybWlzc2lvbi4gKi8KKyNkZWZpbmUJV19PSwkyCS8qIENoZWNrIGZvciB3cml0ZSBwZXJtaXNzaW9uICovCisjZGVmaW5lCVJfT0sJNAkvKiBDaGVjayBmb3IgcmVhZCBwZXJtaXNzaW9uICovCisKKyNkZWZpbmUJX1NfSUZJRk8JMHgxMDAwCS8qIEZJRk8gKi8KKyNkZWZpbmUJX1NfSUZDSFIJMHgyMDAwCS8qIENoYXJhY3RlciAqLworI2RlZmluZQlfU19JRkJMSwkweDMwMDAJLyogQmxvY2s6IElzIHRoaXMgZXZlciBzZXQgdW5kZXIgdzMyPyAqLworI2RlZmluZQlfU19JRkRJUgkweDQwMDAJLyogRGlyZWN0b3J5ICovCisjZGVmaW5lCV9TX0lGUkVHCTB4ODAwMAkvKiBSZWd1bGFyICovCisKKyNkZWZpbmUJX1NfSUZNVAkJMHhGMDAwCS8qIEZpbGUgdHlwZSBtYXNrICovCisKKyNkZWZpbmUJX1NfSVhVU1IJX1NfSUVYRUMKKyNkZWZpbmUJX1NfSVdVU1IJX1NfSVdSSVRFCisjZGVmaW5lCV9TX0lSVVNSCV9TX0lSRUFECisjZGVmaW5lCV9TX0lTRElSKG0pCSgoKG0pICYgX1NfSUZNVCkgPT0gX1NfSUZESVIpCisKKyNkZWZpbmUJU19JRklGTwkJX1NfSUZJRk8KKyNkZWZpbmUJU19JRkNIUgkJX1NfSUZDSFIKKyNkZWZpbmUJU19JRkJMSwkJX1NfSUZCTEsKKyNkZWZpbmUJU19JRkRJUgkJX1NfSUZESVIKKyNkZWZpbmUJU19JRlJFRwkJX1NfSUZSRUcKKyNkZWZpbmUJU19JRk1UCQlfU19JRk1UCisjZGVmaW5lCVNfSUVYRUMJCV9TX0lFWEVDCisjZGVmaW5lCVNfSVdSSVRFCV9TX0lXUklURQorI2RlZmluZQlTX0lSRUFECQlfU19JUkVBRAorI2RlZmluZQlTX0lSV1hVCQlfU19JUldYVQorI2RlZmluZQlTX0lYVVNSCQlfU19JWFVTUgorI2RlZmluZQlTX0lXVVNSCQlfU19JV1VTUgorI2RlZmluZQlTX0lSVVNSCQlfU19JUlVTUgorCisKKyNkZWZpbmUJU19JU0RJUihtKQkoKChtKSAmIFNfSUZNVCkgPT0gU19JRkRJUikKKyNkZWZpbmUJU19JU1JFRyhtKQkoKChtKSAmIFNfSUZNVCkgPT0gU19JRlJFRykKKyNkZWZpbmUJU19JU0ZJRk8obSkJKCgobSkgJiBTX0lGTVQpID09IFNfSUZJRk8pCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS91dGltZS5oIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS91dGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyODVmMzgKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3V0aW1lLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPHN5cy91dGltZS5oPgpkaWZmIC0tZ2l0IGEvY29tcGF0L3ZjYnVpbGQvc2NyaXB0cy9jbGluay5wbCBiL2NvbXBhdC92Y2J1aWxkL3NjcmlwdHMvY2xpbmsucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM3NDc3MQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC92Y2J1aWxkL3NjcmlwdHMvY2xpbmsucGwKQEAgLTAsMCArMSw1MiBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvbXBpbGVzIG9yIGxpbmtzIGZpbGVzCisjCisjIFRoaXMgaXMgYSB3cmFwcGVyIHRvIGZhY2lsaXRhdGUgdGhlIGNvbXBpbGF0aW9uIG9mIEdpdCB3aXRoIE1TVkMKKyMgdXNpbmcgR05VIE1ha2UgYXMgdGhlIGJ1aWxkIHN5c3RlbS4gU28sIGluc3RlYWQgb2YgbWFuaXB1bGF0aW5nIHRoZQorIyBNYWtlZmlsZSBpbnRvIHNvbWV0aGluZyBuYXN0eSwganVzdCB0byBzdXBwb3J0IG5vbi1zcGFjZSBhcmd1bWVudHMKKyMgZXRjLCB3ZSB1c2UgdGhpcyB3cmFwcGVyIHRvIGZpeCB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbnMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA5IE1hcml1cyBTdG9ybS1PbHNlbiA8bXN0b3Jtb0BnbWFpbC5jb20+CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCit1c2Ugc3RyaWN0OworbXkgQGFyZ3MgPSAoKTsKK215IEBjZmxhZ3MgPSAoKTsKK215ICRpc19saW5raW5nID0gMDsKK3doaWxlIChAQVJHVikgeworCW15ICRhcmcgPSBzaGlmdCBAQVJHVjsKKwlpZiAoIiRhcmciID1+IC9eLVtESU1HT10vKSB7CisJCXB1c2goQGNmbGFncywgJGFyZyk7CisJfSBlbHNpZiAoIiRhcmciIGVxICItbyIpIHsKKwkJbXkgJGZpbGVfb3V0ID0gc2hpZnQgQEFSR1Y7CisJCWlmICgiJGZpbGVfb3V0IiA9fiAvZXhlJC8pIHsKKwkJCSRpc19saW5raW5nID0gMTsKKwkJCXB1c2goQGFyZ3MsICItT1VUOiRmaWxlX291dCIpOworCQl9IGVsc2UgeworCQkJcHVzaChAYXJncywgIi1GbyRmaWxlX291dCIpOworCQl9CisJfSBlbHNpZiAoIiRhcmciIGVxICItbHoiKSB7CisJCXB1c2goQGFyZ3MsICJ6bGliLmxpYiIpOworCX0gZWxzaWYgKCIkYXJnIiBlcSAiLWxpY29udiIpIHsKKwkJcHVzaChAYXJncywgImljb252LmxpYiIpOworCX0gZWxzaWYgKCIkYXJnIiBlcSAiLWxjcnlwdG8iKSB7CisJCXB1c2goQGFyZ3MsICJsaWJlYXkzMi5saWIiKTsKKwl9IGVsc2lmICgiJGFyZyIgZXEgIi1sc3NsIikgeworCQlwdXNoKEBhcmdzLCAic3NsZWF5MzIubGliIik7CisJfSBlbHNpZiAoIiRhcmciID1+IC9eLUwvICYmICIkYXJnIiBuZSAiLUxUQ0ciKSB7CisJCSRhcmcgPX4gcy9eLUwvLUxJQlBBVEg6LzsKKwkJcHVzaChAYXJncywgJGFyZyk7CisJfSBlbHNpZiAoIiRhcmciID1+IC9eLVIvKSB7CisJCSMgZWF0CisJfSBlbHNlIHsKKwkJcHVzaChAYXJncywgJGFyZyk7CisJfQorfQoraWYgKCRpc19saW5raW5nKSB7CisJdW5zaGlmdChAYXJncywgImxpbmsuZXhlIik7Cit9IGVsc2UgeworCXVuc2hpZnQoQGFyZ3MsICJjbC5leGUiKTsKKwlwdXNoKEBhcmdzLCBAY2ZsYWdzKTsKK30KKyNwcmludGYoIioqKiogQGFyZ3NcbiIpOworZXhpdCAoc3lzdGVtKEBhcmdzKSAhPSAwKTsKZGlmZiAtLWdpdCBhL2NvbXBhdC92Y2J1aWxkL3NjcmlwdHMvbGliLnBsIGIvY29tcGF0L3ZjYnVpbGQvc2NyaXB0cy9saWIucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgwNTRlNAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC92Y2J1aWxkL3NjcmlwdHMvbGliLnBsCkBAIC0wLDAgKzEsMjYgQEAKKyMhL3Vzci9iaW4vcGVybCAtdworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBMaWJpZmllcyBmaWxlcyBvbiBXaW5kb3dzCisjCisjIFRoaXMgaXMgYSB3cmFwcGVyIHRvIGZhY2lsaXRhdGUgdGhlIGNvbXBpbGF0aW9uIG9mIEdpdCB3aXRoIE1TVkMKKyMgdXNpbmcgR05VIE1ha2UgYXMgdGhlIGJ1aWxkIHN5c3RlbS4gU28sIGluc3RlYWQgb2YgbWFuaXB1bGF0aW5nIHRoZQorIyBNYWtlZmlsZSBpbnRvIHNvbWV0aGluZyBuYXN0eSwganVzdCB0byBzdXBwb3J0IG5vbi1zcGFjZSBhcmd1bWVudHMKKyMgZXRjLCB3ZSB1c2UgdGhpcyB3cmFwcGVyIHRvIGZpeCB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbnMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA5IE1hcml1cyBTdG9ybS1PbHNlbiA8bXN0b3Jtb0BnbWFpbC5jb20+CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCit1c2Ugc3RyaWN0OworbXkgQGFyZ3MgPSAoKTsKK3doaWxlIChAQVJHVikgeworCW15ICRhcmcgPSBzaGlmdCBAQVJHVjsKKwlpZiAoIiRhcmciIGVxICJyY3MiKSB7CisJCSMgQ29uc3VtZSB0aGUgcmNzIG9wdGlvbgorCX0gZWxzaWYgKCIkYXJnIiA9fiAvXC5hJC8pIHsKKwkJcHVzaChAYXJncywgIi1PVVQ6JGFyZyIpOworCX0gZWxzZSB7CisJCXB1c2goQGFyZ3MsICRhcmcpOworCX0KK30KK3Vuc2hpZnQoQGFyZ3MsICJsaWIuZXhlIik7CisjIHByaW50ZigiKioqKiBAYXJnc1xuIik7CitleGl0IChzeXN0ZW0oQGFyZ3MpICE9IDApOwpkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbjMyLmggYi9jb21wYXQvd2luMzIuaAppbmRleCBjMjYzODRlLi44Y2U5MTA0IDEwMDY0NAotLS0gYS9jb21wYXQvd2luMzIuaAorKysgYi9jb21wYXQvd2luMzIuaApAQCAtMSw1ICsxLDEwIEBACisjaWZuZGVmIFdJTjMyX0gKKyNkZWZpbmUgV0lOMzJfSAorCiAvKiBjb21tb24gV2luMzIgZnVuY3Rpb25zIGZvciBNaW5HVyBhbmQgQ3lnd2luICovCisjaWZuZGVmIFdJTjMyICAgICAgICAgLyogTm90IGRlZmluZWQgYnkgQ3lnd2luICovCiAjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgaW50IGZpbGVfYXR0cl90b19zdF9tb2RlIChEV09SRCBhdHRyKQogewpAQCAtMzIsMyArMzcsNSBAQAogCQlyZXR1cm4gRU5PRU5UOwogCX0KIH0KKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb21wYXQvd2luMzIvcHRocmVhZC5jIGIvY29tcGF0L3dpbjMyL3B0aHJlYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjk0OWZjCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3dpbjMyL3B0aHJlYWQuYwpAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBbmRyemVqIEsuIEhhY3pld3NraSA8YWhhY3pld3NraUBnbWFpbC5jb20+CisgKgorICogRElTQ0xBSU1FUjogVGhlIGltcGxlbWVudGF0aW9uIGlzIEdpdC1zcGVjaWZpYywgaXQgaXMgc3Vic2V0IG9mIG9yaWdpbmFsCisgKiBQdGhyZWFkcyBBUEksIHdpdGhvdXQgbG90cyBvZiBvdGhlciBmZWF0dXJlcyB0aGF0IEdpdCBkb2Vzbid0IHVzZS4KKyAqIEdpdCBhbHNvIG1ha2VzIHN1cmUgdGhhdCB0aGUgcGFzc2VkIGFyZ3VtZW50cyBhcmUgdmFsaWQsIHNvIHRoZXJlJ3MKKyAqIG5vIG5lZWQgZm9yIGRvdWJsZS1jaGVja2luZy4KKyAqLworCisjaW5jbHVkZSAiLi4vLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAicHRocmVhZC5oIgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworc3RhdGljIHVuc2lnbmVkIF9fc3RkY2FsbCB3aW4zMl9zdGFydF9yb3V0aW5lKHZvaWQgKmFyZykKK3sKKwlwdGhyZWFkX3QgKnRocmVhZCA9IGFyZzsKKwl0aHJlYWQtPmFyZyA9IHRocmVhZC0+c3RhcnRfcm91dGluZSh0aHJlYWQtPmFyZyk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwdGhyZWFkX2NyZWF0ZShwdGhyZWFkX3QgKnRocmVhZCwgY29uc3Qgdm9pZCAqdW51c2VkLAorCQkgICB2b2lkICooKnN0YXJ0X3JvdXRpbmUpKHZvaWQqKSwgdm9pZCAqYXJnKQoreworCXRocmVhZC0+YXJnID0gYXJnOworCXRocmVhZC0+c3RhcnRfcm91dGluZSA9IHN0YXJ0X3JvdXRpbmU7CisJdGhyZWFkLT5oYW5kbGUgPSAoSEFORExFKQorCQlfYmVnaW50aHJlYWRleChOVUxMLCAwLCB3aW4zMl9zdGFydF9yb3V0aW5lLCB0aHJlYWQsIDAsIE5VTEwpOworCisJaWYgKCF0aHJlYWQtPmhhbmRsZSkKKwkJcmV0dXJuIGVycm5vOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK2ludCB3aW4zMl9wdGhyZWFkX2pvaW4ocHRocmVhZF90ICp0aHJlYWQsIHZvaWQgKip2YWx1ZV9wdHIpCit7CisJRFdPUkQgcmVzdWx0ID0gV2FpdEZvclNpbmdsZU9iamVjdCh0aHJlYWQtPmhhbmRsZSwgSU5GSU5JVEUpOworCXN3aXRjaCAocmVzdWx0KSB7CisJCWNhc2UgV0FJVF9PQkpFQ1RfMDoKKwkJCWlmICh2YWx1ZV9wdHIpCisJCQkJKnZhbHVlX3B0ciA9IHRocmVhZC0+YXJnOworCQkJcmV0dXJuIDA7CisJCWNhc2UgV0FJVF9BQkFORE9ORUQ6CisJCQlyZXR1cm4gRUlOVkFMOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIGVycl93aW5fdG9fcG9zaXgoR2V0TGFzdEVycm9yKCkpOworCX0KK30KKworaW50IHB0aHJlYWRfY29uZF9pbml0KHB0aHJlYWRfY29uZF90ICpjb25kLCBjb25zdCB2b2lkICp1bnVzZWQpCit7CisJY29uZC0+d2FpdGVycyA9IDA7CisJY29uZC0+d2FzX2Jyb2FkY2FzdCA9IDA7CisJSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmY29uZC0+d2FpdGVyc19sb2NrKTsKKworCWNvbmQtPnNlbWEgPSBDcmVhdGVTZW1hcGhvcmUoTlVMTCwgMCwgTE9OR19NQVgsIE5VTEwpOworCWlmICghY29uZC0+c2VtYSkKKwkJZGllKCJDcmVhdGVTZW1hcGhvcmUoKSBmYWlsZWQiKTsKKworCWNvbmQtPmNvbnRpbnVlX2Jyb2FkY2FzdCA9IENyZWF0ZUV2ZW50KE5VTEwsCS8qIHNlY3VyaXR5ICovCisJCQkJRkFMU0UsCQkJLyogYXV0by1yZXNldCAqLworCQkJCUZBTFNFLAkJCS8qIG5vdCBzaWduYWxlZCAqLworCQkJCU5VTEwpOwkJCS8qIG5hbWUgKi8KKwlpZiAoIWNvbmQtPmNvbnRpbnVlX2Jyb2FkY2FzdCkKKwkJZGllKCJDcmVhdGVFdmVudCgpIGZhaWxlZCIpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBwdGhyZWFkX2NvbmRfZGVzdHJveShwdGhyZWFkX2NvbmRfdCAqY29uZCkKK3sKKwlDbG9zZUhhbmRsZShjb25kLT5zZW1hKTsKKwlDbG9zZUhhbmRsZShjb25kLT5jb250aW51ZV9icm9hZGNhc3QpOworCURlbGV0ZUNyaXRpY2FsU2VjdGlvbigmY29uZC0+d2FpdGVyc19sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHB0aHJlYWRfY29uZF93YWl0KHB0aHJlYWRfY29uZF90ICpjb25kLCBDUklUSUNBTF9TRUNUSU9OICptdXRleCkKK3sKKwlpbnQgbGFzdF93YWl0ZXI7CisKKwlFbnRlckNyaXRpY2FsU2VjdGlvbigmY29uZC0+d2FpdGVyc19sb2NrKTsKKwljb25kLT53YWl0ZXJzKys7CisJTGVhdmVDcml0aWNhbFNlY3Rpb24oJmNvbmQtPndhaXRlcnNfbG9jayk7CisKKwkvKgorCSAqIFVubG9jayBleHRlcm5hbCBtdXRleCBhbmQgd2FpdCBmb3Igc2lnbmFsLgorCSAqIE5PVEU6IHdlJ3ZlIGhlbGQgbXV0ZXggbG9ja2VkIGxvbmcgZW5vdWdoIHRvIGluY3JlbWVudAorCSAqIHdhaXRlcnMgY291bnQgYWJvdmUsIHNvIHRoZXJlJ3Mgbm8gcHJvYmxlbSB3aXRoCisJICogbGVhdmluZyBtdXRleCB1bmxvY2tlZCBiZWZvcmUgd2Ugd2FpdCBvbiBzZW1hcGhvcmUuCisJICovCisJTGVhdmVDcml0aWNhbFNlY3Rpb24obXV0ZXgpOworCisJLyogbGV0J3Mgd2FpdCAtIGlnbm9yZSByZXR1cm4gdmFsdWUgKi8KKwlXYWl0Rm9yU2luZ2xlT2JqZWN0KGNvbmQtPnNlbWEsIElORklOSVRFKTsKKworCS8qCisJICogRGVjcmVhc2Ugd2FpdGVycyBjb3VudC4gSWYgd2UgYXJlIHRoZSBsYXN0IHdhaXRlciwgdGhlbiB3ZSBtdXN0CisJICogbm90aWZ5IHRoZSBicm9hZGNhc3RpbmcgdGhyZWFkIHRoYXQgaXQgY2FuIGNvbnRpbnVlLgorCSAqIEJ1dCBpZiB3ZSBjb250aW51ZWQgZHVlIHRvIGNvbmRfc2lnbmFsLCB3ZSBkbyBub3QgaGF2ZSB0byBkbyB0aGF0CisJICogYmVjYXVzZSB0aGUgc2lnbmFsaW5nIHRocmVhZCBrbm93cyB0aGF0IG9ubHkgb25lIHdhaXRlciBjb250aW51ZWQuCisJICovCisJRW50ZXJDcml0aWNhbFNlY3Rpb24oJmNvbmQtPndhaXRlcnNfbG9jayk7CisJY29uZC0+d2FpdGVycy0tOworCWxhc3Rfd2FpdGVyID0gY29uZC0+d2FzX2Jyb2FkY2FzdCAmJiBjb25kLT53YWl0ZXJzID09IDA7CisJTGVhdmVDcml0aWNhbFNlY3Rpb24oJmNvbmQtPndhaXRlcnNfbG9jayk7CisKKwlpZiAobGFzdF93YWl0ZXIpIHsKKwkJLyoKKwkJICogY29uZF9icm9hZGNhc3Qgd2FzIGlzc3VlZCB3aGlsZSBtdXRleCB3YXMgaGVsZC4gVGhpcyBtZWFucworCQkgKiB0aGF0IGFsbCBvdGhlciB3YWl0ZXJzIGhhdmUgY29udGludWVkLCBidXQgYXJlIGNvbnRlbmRpbmcKKwkJICogZm9yIHRoZSBtdXRleCBhdCB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24gYmVjYXVzZSB0aGUKKwkJICogYnJvYWRjYXN0aW5nIHRocmVhZCBkaWQgbm90IGxlYXZlIGNvbmRfYnJvYWRjYXN0LCB5ZXQuCisJCSAqIChUaGlzIGlzIHNvIHRoYXQgaXQgY2FuIGJlIHN1cmUgdGhhdCBlYWNoIHdhaXRlciBoYXMKKwkJICogY29uc3VtZWQgZXhhY3RseSBvbmUgc2xpY2Ugb2YgdGhlIHNlbWFwaG9yLikKKwkJICogVGhlIGxhc3Qgd2FpdGVyIG11c3QgdGVsbCB0aGUgYnJvYWRjYXN0aW5nIHRocmVhZCB0aGF0IGl0CisJCSAqIGNhbiBnbyBvbi4KKwkJICovCisJCVNldEV2ZW50KGNvbmQtPmNvbnRpbnVlX2Jyb2FkY2FzdCk7CisJCS8qCisJCSAqIE5vdyB3ZSBnbyBvbiB0byBjb250ZW5kIHdpdGggYWxsIG90aGVyIHdhaXRlcnMgZm9yCisJCSAqIHRoZSBtdXRleC4gQXVmIGluIGRlbiBLYW1wZiEKKwkJICovCisJfQorCS8qIGxvY2sgZXh0ZXJuYWwgbXV0ZXggYWdhaW4gKi8KKwlFbnRlckNyaXRpY2FsU2VjdGlvbihtdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIElNUE9SVEFOVDogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXF1aXJlcyB0aGF0IHB0aHJlYWRfY29uZF9zaWduYWwKKyAqIGlzIGNhbGxlZCB3aGlsZSB0aGUgbXV0ZXggaXMgaGVsZCB0aGF0IGlzIHVzZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcKKyAqIHB0aHJlYWRfY29uZF93YWl0IGNhbGxzIQorICovCitpbnQgcHRocmVhZF9jb25kX3NpZ25hbChwdGhyZWFkX2NvbmRfdCAqY29uZCkKK3sKKwlpbnQgaGF2ZV93YWl0ZXJzOworCisJRW50ZXJDcml0aWNhbFNlY3Rpb24oJmNvbmQtPndhaXRlcnNfbG9jayk7CisJaGF2ZV93YWl0ZXJzID0gY29uZC0+d2FpdGVycyA+IDA7CisJTGVhdmVDcml0aWNhbFNlY3Rpb24oJmNvbmQtPndhaXRlcnNfbG9jayk7CisKKwkvKgorCSAqIFNpZ25hbCBvbmx5IHdoZW4gdGhlcmUgYXJlIHdhaXRlcnMKKwkgKi8KKwlpZiAoaGF2ZV93YWl0ZXJzKQorCQlyZXR1cm4gUmVsZWFzZVNlbWFwaG9yZShjb25kLT5zZW1hLCAxLCBOVUxMKSA/CisJCQkwIDogZXJyX3dpbl90b19wb3NpeChHZXRMYXN0RXJyb3IoKSk7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyoKKyAqIERPVUJMWSBJTVBPUlRBTlQ6IFRoaXMgaW1wbGVtZW50YXRpb24gcmVxdWlyZXMgdGhhdCBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0CisgKiBpcyBjYWxsZWQgd2hpbGUgdGhlIG11dGV4IGlzIGhlbGQgdGhhdCBpcyB1c2VkIGluIHRoZSBjb3JyZXNwb25kaW5nCisgKiBwdGhyZWFkX2NvbmRfd2FpdCBjYWxscyEKKyAqLworaW50IHB0aHJlYWRfY29uZF9icm9hZGNhc3QocHRocmVhZF9jb25kX3QgKmNvbmQpCit7CisJRW50ZXJDcml0aWNhbFNlY3Rpb24oJmNvbmQtPndhaXRlcnNfbG9jayk7CisKKwlpZiAoKGNvbmQtPndhc19icm9hZGNhc3QgPSBjb25kLT53YWl0ZXJzID4gMCkpIHsKKwkJLyogd2FrZSB1cCBhbGwgd2FpdGVycyAqLworCQlSZWxlYXNlU2VtYXBob3JlKGNvbmQtPnNlbWEsIGNvbmQtPndhaXRlcnMsIE5VTEwpOworCQlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmY29uZC0+d2FpdGVyc19sb2NrKTsKKwkJLyoKKwkJICogQXQgdGhpcyBwb2ludCBhbGwgd2FpdGVycyBjb250aW51ZS4gRWFjaCBvbmUgdGFrZXMgaXRzCisJCSAqIHNsaWNlIG9mIHRoZSBzZW1hcGhvci4gTm93IGl0J3Mgb3VyIHR1cm4gdG8gd2FpdDogU2luY2UKKwkJICogdGhlIGV4dGVybmFsIG11dGV4IGlzIGhlbGQsIG5vIHRocmVhZCBjYW4gbGVhdmUgY29uZF93YWl0LAorCQkgKiB5ZXQuIEZvciB0aGlzIHJlYXNvbiwgd2UgY2FuIGJlIHN1cmUgdGhhdCBubyB0aHJlYWQgZ2V0cworCQkgKiBhIGNoYW5jZSB0byBlYXQgKm1vcmUqIHRoYW4gb25lIHNsaWNlLiBPVE9ILCBpdCBtZWFucworCQkgKiB0aGF0IHRoZSBsYXN0IHdhaXRlciBtdXN0IHNlbmQgdXMgYSB3YWtlLXVwLgorCQkgKi8KKwkJV2FpdEZvclNpbmdsZU9iamVjdChjb25kLT5jb250aW51ZV9icm9hZGNhc3QsIElORklOSVRFKTsKKwkJLyoKKwkJICogU2luY2UgdGhlIGV4dGVybmFsIG11dGV4IGlzIGhlbGQsIG5vIHRocmVhZCBjYW4gZW50ZXIKKwkJICogY29uZF93YWl0LCBhbmQsIGhlbmNlLCBpdCBpcyBzYWZlIHRvIHJlc2V0IHRoaXMgZmxhZworCQkgKiB3aXRob3V0IGNvbmQtPndhaXRlcnNfbG9jayBoZWxkLgorCQkgKi8KKwkJY29uZC0+d2FzX2Jyb2FkY2FzdCA9IDA7CisJfSBlbHNlIHsKKwkJTGVhdmVDcml0aWNhbFNlY3Rpb24oJmNvbmQtPndhaXRlcnNfbG9jayk7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbjMyL3B0aHJlYWQuaCBiL2NvbXBhdC93aW4zMi9wdGhyZWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcyZjEwMAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC93aW4zMi9wdGhyZWFkLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIEhlYWRlciB1c2VkIHRvIGFkYXB0IHB0aHJlYWQtYmFzZWQgUE9TSVggY29kZSB0byBXaW5kb3dzIEFQSSB0aHJlYWRzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBbmRyemVqIEsuIEhhY3pld3NraSA8YWhhY3pld3NraUBnbWFpbC5jb20+CisgKi8KKworI2lmbmRlZiBQVEhSRUFEX0gKKyNkZWZpbmUgUFRIUkVBRF9ICisKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworLyoKKyAqIERlZmluZXMgdGhhdCBhZGFwdCBXaW5kb3dzIEFQSSB0aHJlYWRzIHRvIHB0aHJlYWRzIEFQSQorICovCisjZGVmaW5lIHB0aHJlYWRfbXV0ZXhfdCBDUklUSUNBTF9TRUNUSU9OCisKKyNkZWZpbmUgcHRocmVhZF9tdXRleF9pbml0KGEsYikgSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigoYSkpCisjZGVmaW5lIHB0aHJlYWRfbXV0ZXhfZGVzdHJveShhKSBEZWxldGVDcml0aWNhbFNlY3Rpb24oKGEpKQorI2RlZmluZSBwdGhyZWFkX211dGV4X2xvY2sgRW50ZXJDcml0aWNhbFNlY3Rpb24KKyNkZWZpbmUgcHRocmVhZF9tdXRleF91bmxvY2sgTGVhdmVDcml0aWNhbFNlY3Rpb24KKworLyoKKyAqIEltcGxlbWVudCBzaW1wbGUgY29uZGl0aW9uIHZhcmlhYmxlIGZvciBXaW5kb3dzIHRocmVhZHMsIGJhc2VkIG9uIEFDRQorICogaW1wbGVtZW50YXRpb24uCisgKgorICogU2VlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uOiBodHRwOi8vYml0Lmx5LzF2a0RqbworICogQUNFIGhvbWVwYWdlOiBodHRwOi8vd3d3LmNzZS53dXN0bC5lZHUvfnNjaG1pZHQvQUNFLmh0bWwKKyAqIFNlZSBhbHNvOiBodHRwOi8vd3d3LmNzZS53dXN0bC5lZHUvfnNjaG1pZHQvd2luMzItY3YtMS5odG1sCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlMT05HIHdhaXRlcnM7CisJaW50IHdhc19icm9hZGNhc3Q7CisJQ1JJVElDQUxfU0VDVElPTiB3YWl0ZXJzX2xvY2s7CisJSEFORExFIHNlbWE7CisJSEFORExFIGNvbnRpbnVlX2Jyb2FkY2FzdDsKK30gcHRocmVhZF9jb25kX3Q7CisKK2V4dGVybiBpbnQgcHRocmVhZF9jb25kX2luaXQocHRocmVhZF9jb25kX3QgKmNvbmQsIGNvbnN0IHZvaWQgKnVudXNlZCk7CitleHRlcm4gaW50IHB0aHJlYWRfY29uZF9kZXN0cm95KHB0aHJlYWRfY29uZF90ICpjb25kKTsKK2V4dGVybiBpbnQgcHRocmVhZF9jb25kX3dhaXQocHRocmVhZF9jb25kX3QgKmNvbmQsIENSSVRJQ0FMX1NFQ1RJT04gKm11dGV4KTsKK2V4dGVybiBpbnQgcHRocmVhZF9jb25kX3NpZ25hbChwdGhyZWFkX2NvbmRfdCAqY29uZCk7CitleHRlcm4gaW50IHB0aHJlYWRfY29uZF9icm9hZGNhc3QocHRocmVhZF9jb25kX3QgKmNvbmQpOworCisvKgorICogU2ltcGxlIHRocmVhZCBjcmVhdGlvbiBpbXBsZW1lbnRhdGlvbiB1c2luZyBwdGhyZWFkIEFQSQorICovCit0eXBlZGVmIHN0cnVjdCB7CisJSEFORExFIGhhbmRsZTsKKwl2b2lkICooKnN0YXJ0X3JvdXRpbmUpKHZvaWQqKTsKKwl2b2lkICphcmc7Cit9IHB0aHJlYWRfdDsKKworZXh0ZXJuIGludCBwdGhyZWFkX2NyZWF0ZShwdGhyZWFkX3QgKnRocmVhZCwgY29uc3Qgdm9pZCAqdW51c2VkLAorCQkJICB2b2lkICooKnN0YXJ0X3JvdXRpbmUpKHZvaWQqKSwgdm9pZCAqYXJnKTsKKworLyoKKyAqIFRvIGF2b2lkIHRoZSBuZWVkIG9mIGNvcHlpbmcgYSBzdHJ1Y3QsIHdlIHVzZSBzbWFsbCBtYWNybyB3cmFwcGVyIHRvIHBhc3MKKyAqIHBvaW50ZXIgdG8gd2luMzJfcHRocmVhZF9qb2luIGluc3RlYWQuCisgKi8KKyNkZWZpbmUgcHRocmVhZF9qb2luKGEsIGIpIHdpbjMyX3B0aHJlYWRfam9pbigmKGEpLCAoYikpCisKK2V4dGVybiBpbnQgd2luMzJfcHRocmVhZF9qb2luKHB0aHJlYWRfdCAqdGhyZWFkLCB2b2lkICoqdmFsdWVfcHRyKTsKKworI2VuZGlmIC8qIFBUSFJFQURfSCAqLwpkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbjMybW1hcC5jIGIvY29tcGF0L3dpbjMybW1hcC5jCmluZGV4IDc3OWQ3OTYuLjFjNWExNDkgMTAwNjQ0Ci0tLSBhL2NvbXBhdC93aW4zMm1tYXAuYworKysgYi9jb21wYXQvd2luMzJtbWFwLmMKQEAgLTEsMTcgKzEsNSBAQAogI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgogCi0vKgotICogTm90ZSB0aGF0IHRoaXMgZG9lc24ndCByZXR1cm4gdGhlIGFjdHVhbCBwYWdlc2l6ZSwgYnV0Ci0gKiB0aGUgYWxsb2NhdGlvbiBncmFudWxhcml0eS4gSWYgZnV0dXJlIFdpbmRvd3Mgc3BlY2lmaWMgZ2l0IGNvZGUKLSAqIG5lZWRzIHRoZSByZWFsIGdldHBhZ2VzaXplIGZ1bmN0aW9uLCB3ZSBuZWVkIHRvIGZpbmQgYW5vdGhlciBzb2x1dGlvbi4KLSAqLwotaW50IG1pbmd3X2dldHBhZ2VzaXplKHZvaWQpCi17Ci0JU1lTVEVNX0lORk8gc2k7Ci0JR2V0U3lzdGVtSW5mbygmc2kpOwotCXJldHVybiBzaS5kd0FsbG9jYXRpb25HcmFudWxhcml0eTsKLX0KLQogdm9pZCAqZ2l0X21tYXAodm9pZCAqc3RhcnQsIHNpemVfdCBsZW5ndGgsIGludCBwcm90LCBpbnQgZmxhZ3MsIGludCBmZCwgb2ZmX3Qgb2Zmc2V0KQogewogCUhBTkRMRSBobWFwOwpkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbmFuc2kuYyBiL2NvbXBhdC93aW5hbnNpLmMKaW5kZXggNDRkYzI5My4uZGVkY2UyMSAxMDA2NDQKLS0tIGEvY29tcGF0L3dpbmFuc2kuYworKysgYi9jb21wYXQvd2luYW5zaS5jCkBAIC0yLDcgKzIsNiBAQAogICogQ29weXJpZ2h0IDIwMDggUGV0ZXIgSGFycmlzIDxnaXRAcGV0ZXIuaXMtYS1nZWVrLm9yZz4KICAqLwogCi0jaW5jbHVkZSA8d2luZG93cy5oPgogI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgogCiAvKgpAQCAtODAsNiArNzksNyBAQAogc3RhdGljIHZvaWQgZXJhc2VfaW5fbGluZSh2b2lkKQogewogCUNPTlNPTEVfU0NSRUVOX0JVRkZFUl9JTkZPIHNiaTsKKwlEV09SRCBkdW1teTsgLyogTmVlZGVkIGZvciBXaW5kb3dzIDcgKG9yIFZpc3RhKSByZWdyZXNzaW9uICovCiAKIAlpZiAoIWNvbnNvbGUpCiAJCXJldHVybjsKQEAgLTg3LDcgKzg3LDcgQEAKIAlHZXRDb25zb2xlU2NyZWVuQnVmZmVySW5mbyhjb25zb2xlLCAmc2JpKTsKIAlGaWxsQ29uc29sZU91dHB1dENoYXJhY3RlckEoY29uc29sZSwgJyAnLAogCQlzYmkuZHdTaXplLlggLSBzYmkuZHdDdXJzb3JQb3NpdGlvbi5YLCBzYmkuZHdDdXJzb3JQb3NpdGlvbiwKLQkJTlVMTCk7CisJCSZkdW1teSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvY29uZmlnLmMgYi9jb25maWcuYwppbmRleCA3ZTU1OTRiLi42OTYzZmJlIDEwMDY0NAotLS0gYS9jb25maWcuYworKysgYi9jb25maWcuYwpAQCAtMzUxLDYgKzM1MSwxNiBAQAogCXJldHVybiAwOwogfQogCitpbnQgZ2l0X2NvbmZpZ19wYXRobmFtZShjb25zdCBjaGFyICoqZGVzdCwgY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkqZGVzdCA9IGV4cGFuZF91c2VyX3BhdGgodmFsdWUpOworCWlmICghKmRlc3QpCisJCWRpZSgiRmFpbGVkIHRvIGV4cGFuZCB1c2VyIGRpciBpbjogJyVzJyIsIHZhbHVlKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBnaXRfZGVmYXVsdF9jb3JlX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQogewogCS8qIFRoaXMgbmVlZHMgYSBiZXR0ZXIgbmFtZSAqLwpAQCAtNDY3LDYgKzQ3NywxMSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLm5vdGVzcmVmIikpIHsKKwkJbm90ZXNfcmVmX25hbWUgPSB4c3RyZHVwKHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5wYWdlciIpKQogCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJnBhZ2VyX3Byb2dyYW0sIHZhciwgdmFsdWUpOwogCkBAIC00NzQsNyArNDg5LDcgQEAKIAkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZlZGl0b3JfcHJvZ3JhbSwgdmFyLCB2YWx1ZSk7CiAKIAlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmV4Y2x1ZGVzZmlsZSIpKQotCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmV4Y2x1ZGVzX2ZpbGUsIHZhciwgdmFsdWUpOworCQlyZXR1cm4gZ2l0X2NvbmZpZ19wYXRobmFtZSgmZXhjbHVkZXNfZmlsZSwgdmFyLCB2YWx1ZSk7CiAKIAlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLndoaXRlc3BhY2UiKSkgewogCQlpZiAoIXZhbHVlKQpAQCAtNTAzLDYgKzUxOCwxMSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLnNwYXJzZWNoZWNrb3V0IikpIHsKKwkJY29yZV9hcHBseV9zcGFyc2VfY2hlY2tvdXQgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwogCS8qIEFkZCBvdGhlciBjb25maWcgdmFyaWFibGVzIGhlcmUgYW5kIHRvIERvY3VtZW50YXRpb24vY29uZmlnLnR4dC4gKi8KIAlyZXR1cm4gMDsKIH0KQEAgLTUxMyw4ICs1MzMsNyBAQAogCQlpZiAoIXZhbHVlKQogCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CiAJCXN0cmxjcHkoZ2l0X2RlZmF1bHRfbmFtZSwgdmFsdWUsIHNpemVvZihnaXRfZGVmYXVsdF9uYW1lKSk7Ci0JCWlmIChnaXRfZGVmYXVsdF9lbWFpbFswXSkKLQkJCXVzZXJfaWRlbnRfZXhwbGljaXRseV9naXZlbiA9IDE7CisJCXVzZXJfaWRlbnRfZXhwbGljaXRseV9naXZlbiB8PSBJREVOVF9OQU1FX0dJVkVOOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTUyMiw4ICs1NDEsNyBAQAogCQlpZiAoIXZhbHVlKQogCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CiAJCXN0cmxjcHkoZ2l0X2RlZmF1bHRfZW1haWwsIHZhbHVlLCBzaXplb2YoZ2l0X2RlZmF1bHRfZW1haWwpKTsKLQkJaWYgKGdpdF9kZWZhdWx0X25hbWVbMF0pCi0JCQl1c2VyX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW4gPSAxOworCQl1c2VyX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW4gfD0gSURFTlRfTUFJTF9HSVZFTjsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC02MjcsNiArNjQ1LDkgQEAKIAlpZiAoIXByZWZpeGNtcCh2YXIsICJtYWlsbWFwLiIpKQogCQlyZXR1cm4gZ2l0X2RlZmF1bHRfbWFpbG1hcF9jb25maWcodmFyLCB2YWx1ZSk7CiAKKwlpZiAoIXByZWZpeGNtcCh2YXIsICJhZHZpY2UuIikpCisJCXJldHVybiBnaXRfZGVmYXVsdF9hZHZpY2VfY29uZmlnKHZhciwgdmFsdWUpOworCiAJaWYgKCFzdHJjbXAodmFyLCAicGFnZXIuY29sb3IiKSB8fCAhc3RyY21wKHZhciwgImNvbG9yLnBhZ2VyIikpIHsKIAkJcGFnZXJfdXNlX2NvbG9yID0gZ2l0X2NvbmZpZ19ib29sKHZhcix2YWx1ZSk7CiAJCXJldHVybiAwOwpAQCAtMTExNiw3ICsxMTM3LDcgQEAKIAkJCQkgICAgY29weV9lbmQgLSBjb3B5X2JlZ2luKQogCQkJCQlnb3RvIHdyaXRlX2Vycl9vdXQ7CiAJCQkJaWYgKG5ld19saW5lICYmCi0JCQkJICAgIHdyaXRlX2luX2Z1bGwoZmQsICJcbiIsIDEpICE9IDEpCisJCQkJICAgIHdyaXRlX3N0cl9pbl9mdWxsKGZkLCAiXG4iKSAhPSAxKQogCQkJCQlnb3RvIHdyaXRlX2Vycl9vdXQ7CiAJCQl9CiAJCQljb3B5X2JlZ2luID0gc3RvcmUub2Zmc2V0W2ldOwpAQCAtMTE3Miw3ICsxMTkzLDkgQEAKIHN0YXRpYyBpbnQgc2VjdGlvbl9uYW1lX21hdGNoIChjb25zdCBjaGFyICpidWYsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJaW50IGkgPSAwLCBqID0gMCwgZG90ID0gMDsKLQlmb3IgKDsgYnVmW2ldICYmIGJ1ZltpXSAhPSAnXSc7IGkrKykgeworCWlmIChidWZbaV0gIT0gJ1snKQorCQlyZXR1cm4gMDsKKwlmb3IgKGkgPSAxOyBidWZbaV0gJiYgYnVmW2ldICE9ICddJzsgaSsrKSB7CiAJCWlmICghZG90ICYmIGlzc3BhY2UoYnVmW2ldKSkgewogCQkJZG90ID0gMTsKIAkJCWlmIChuYW1lW2orK10gIT0gJy4nKQpAQCAtMTE5Myw3ICsxMjE2LDE3IEBACiAJCWlmIChidWZbaV0gIT0gbmFtZVtqKytdKQogCQkJYnJlYWs7CiAJfQotCXJldHVybiAoYnVmW2ldID09ICddJyAmJiBuYW1lW2pdID09IDApOworCWlmIChidWZbaV0gPT0gJ10nICYmIG5hbWVbal0gPT0gMCkgeworCQkvKgorCQkgKiBXZSBtYXRjaCwgbm93IGp1c3QgZmluZCB0aGUgcmlnaHQgbGVuZ3RoIG9mZnNldCBieQorCQkgKiBnb2JibGluZyB1cCBhbnkgd2hpdGVzcGFjZSBhZnRlciBpdCwgYXMgd2VsbAorCQkgKi8KKwkJaSsrOworCQlmb3IgKDsgYnVmW2ldICYmIGlzc3BhY2UoYnVmW2ldKTsgaSsrKQorCQkJOyAvKiBkbyBub3RoaW5nICovCisJCXJldHVybiBpOworCX0KKwlyZXR1cm4gMDsKIH0KIAogLyogaWYgbmV3X25hbWUgPT0gTlVMTCwgdGhlIHNlY3Rpb24gaXMgcmVtb3ZlZCBpbnN0ZWFkICovCkBAIC0xMjIzLDExICsxMjU2LDEzIEBACiAJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGNvbmZpZ19maWxlKSkgewogCQlpbnQgaTsKIAkJaW50IGxlbmd0aDsKKwkJY2hhciAqb3V0cHV0ID0gYnVmOwogCQlmb3IgKGkgPSAwOyBidWZbaV0gJiYgaXNzcGFjZShidWZbaV0pOyBpKyspCiAJCQk7IC8qIGRvIG5vdGhpbmcgKi8KIAkJaWYgKGJ1ZltpXSA9PSAnWycpIHsKIAkJCS8qIGl0J3MgYSBzZWN0aW9uICovCi0JCQlpZiAoc2VjdGlvbl9uYW1lX21hdGNoICgmYnVmW2krMV0sIG9sZF9uYW1lKSkgeworCQkJaW50IG9mZnNldCA9IHNlY3Rpb25fbmFtZV9tYXRjaCgmYnVmW2ldLCBvbGRfbmFtZSk7CisJCQlpZiAob2Zmc2V0ID4gMCkgewogCQkJCXJldCsrOwogCQkJCWlmIChuZXdfbmFtZSA9PSBOVUxMKSB7CiAJCQkJCXJlbW92ZSA9IDE7CkBAIC0xMjM4LDE0ICsxMjczLDI5IEBACiAJCQkJCXJldCA9IHdyaXRlX2Vycm9yKGxvY2stPmZpbGVuYW1lKTsKIAkJCQkJZ290byBvdXQ7CiAJCQkJfQotCQkJCWNvbnRpbnVlOworCQkJCS8qCisJCQkJICogV2Ugd3JvdGUgb3V0IHRoZSBuZXcgc2VjdGlvbiwgd2l0aAorCQkJCSAqIGEgbmV3bGluZSwgbm93IHNraXAgdGhlIG9sZAorCQkJCSAqIHNlY3Rpb24ncyBsZW5ndGgKKwkJCQkgKi8KKwkJCQlvdXRwdXQgKz0gb2Zmc2V0ICsgaTsKKwkJCQlpZiAoc3RybGVuKG91dHB1dCkgPiAwKSB7CisJCQkJCS8qCisJCQkJCSAqIE1vcmUgY29udGVudCBtZWFucyB0aGVyZSdzCisJCQkJCSAqIGEgZGVjbGFyYXRpb24gdG8gcHV0IG9uIHRoZQorCQkJCQkgKiBuZXh0IGxpbmU7IGluZGVudCB3aXRoIGEKKwkJCQkJICogdGFiCisJCQkJCSAqLworCQkJCQlvdXRwdXQgLT0gMTsKKwkJCQkJb3V0cHV0WzBdID0gJ1x0JzsKKwkJCQl9CiAJCQl9CiAJCQlyZW1vdmUgPSAwOwogCQl9CiAJCWlmIChyZW1vdmUpCiAJCQljb250aW51ZTsKLQkJbGVuZ3RoID0gc3RybGVuKGJ1Zik7Ci0JCWlmICh3cml0ZV9pbl9mdWxsKG91dF9mZCwgYnVmLCBsZW5ndGgpICE9IGxlbmd0aCkgeworCQlsZW5ndGggPSBzdHJsZW4ob3V0cHV0KTsKKwkJaWYgKHdyaXRlX2luX2Z1bGwob3V0X2ZkLCBvdXRwdXQsIGxlbmd0aCkgIT0gbGVuZ3RoKSB7CiAJCQlyZXQgPSB3cml0ZV9lcnJvcihsb2NrLT5maWxlbmFtZSk7CiAJCQlnb3RvIG91dDsKIAkJfQpkaWZmIC0tZ2l0IGEvY29uZmlnLm1hay5pbiBiL2NvbmZpZy5tYWsuaW4KaW5kZXggN2NjZTBjMS4uNjAwOGFjOSAxMDA2NDQKLS0tIGEvY29uZmlnLm1hay5pbgorKysgYi9jb25maWcubWFrLmluCkBAIC0zMCw4ICszMCwxMSBAQAogTk9fT1BFTlNTTD1ATk9fT1BFTlNTTEAKIE5PX0NVUkw9QE5PX0NVUkxACiBOT19FWFBBVD1ATk9fRVhQQVRACitOT19MSUJHRU5fSD1ATk9fTElCR0VOX0hACiBORUVEU19MSUJJQ09OVj1ATkVFRFNfTElCSUNPTlZACiBORUVEU19TT0NLRVQ9QE5FRURTX1NPQ0tFVEAKK05FRURTX1JFU09MVj1ATkVFRFNfUkVTT0xWQAorTkVFRFNfTElCR0VOPUBORUVEU19MSUJHRU5ACiBOT19TWVNfU0VMRUNUX0g9QE5PX1NZU19TRUxFQ1RfSEAKIE5PX0RfSU5PX0lOX0RJUkVOVD1ATk9fRF9JTk9fSU5fRElSRU5UQAogTk9fRF9UWVBFX0lOX0RJUkVOVD1ATk9fRF9UWVBFX0lOX0RJUkVOVEAKQEAgLTQ2LDExICs0OSwxMSBAQAogTk9fU0VURU5WPUBOT19TRVRFTlZACiBOT19VTlNFVEVOVj1ATk9fVU5TRVRFTlZACiBOT19NS0RURU1QPUBOT19NS0RURU1QQAorTk9fTUtTVEVNUFM9QE5PX01LU1RFTVBTQAogTk9fSUNPTlY9QE5PX0lDT05WQAogT0xEX0lDT05WPUBPTERfSUNPTlZACiBOT19ERUZMQVRFX0JPVU5EPUBOT19ERUZMQVRFX0JPVU5EQAogRlJFQURfUkVBRFNfRElSRUNUT1JJRVM9QEZSRUFEX1JFQURTX0RJUkVDVE9SSUVTQAogU05QUklOVEZfUkVUVVJOU19CT0dVUz1AU05QUklOVEZfUkVUVVJOU19CT0dVU0AKIE5PX1BUSFJFQURTPUBOT19QVEhSRUFEU0AKLVRIUkVBREVEX0RFTFRBX1NFQVJDSD1AVEhSRUFERURfREVMVEFfU0VBUkNIQAogUFRIUkVBRF9MSUJTPUBQVEhSRUFEX0xJQlNACmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggMjVmYmUzYi4uOTE0YWU1NyAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMjMsMjEgKzIzLDMyIEBACiAjIEdJVF9BUkdfU0VUX1BBVEgoUFJPR1JBTSkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBQcm92aWRlIC0td2l0aC1QUk9HUkFNPVBBVEggb3B0aW9uIHRvIHNldCBQQVRIIHRvIFBST0dSQU0KKyMgT3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IGFsbG93cyBzZXR0aW5nIE5PX1BST0dSQU09WWVzUGxlYXNlIGlmCisjIC0td2l0aG91dC1QUk9HUkFNIHZlcnNpb24gdXNlZC4KIEFDX0RFRlVOKFtHSVRfQVJHX1NFVF9QQVRIXSwKIFtBQ19BUkdfV0lUSChbJDFdLAogIFtBU19IRUxQX1NUUklORyhbLS13aXRoLSQxPVBBVEhdLAogICAgICAgICAgICAgICAgICBbcHJvdmlkZSBQQVRIIHRvICQxXSldLAotIFtHSVRfQ09ORl9BUFBFTkRfUEFUSCgkMSldLFtdKQorIFtHSVRfQ09ORl9BUFBFTkRfUEFUSCgkMSwkMildLFtdKQogXSkjIEdJVF9BUkdfU0VUX1BBVEgKICMKICMgR0lUX0NPTkZfQVBQRU5EX1BBVEgoUFJPR1JBTSkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFBhcnNlIC0td2l0aC1QUk9HUkFNPVBBVEggb3B0aW9uIHRvIHNldCBQUk9HUkFNX1BBVEg9UEFUSAogIyBVc2VkIGJ5IEdJVF9BUkdfU0VUX1BBVEgoUFJPR1JBTSkKKyMgT3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IGFsbG93cyBzZXR0aW5nIE5PX1BST0dSQU09WWVzUGxlYXNlIGlmCisjIC0td2l0aG91dC1QUk9HUkFNIGlzIHVzZWQuCiBBQ19ERUZVTihbR0lUX0NPTkZfQVBQRU5EX1BBVEhdLAogW1BST0dSQU09bTRfdG91cHBlcigkMSk7IFwKIGlmIHRlc3QgIiR3aXRodmFsIiA9ICJubyI7IHRoZW4gXAotCUFDX01TR19FUlJPUihbWW91IGNhbm5vdCB1c2UgZ2l0IHdpdGhvdXQgJDFdKTsgXAorCWlmIHRlc3QgLW4gIiQyIjsgdGhlbiBcCisJCW00X3RvdXBwZXIoJDEpX1BBVEg9JHdpdGh2YWw7IFwKKwkJQUNfTVNHX05PVElDRShbRGlzYWJsaW5nIHVzZSBvZiAke1BST0dSQU19XSk7IFwKKwkJR0lUX0NPTkZfQVBQRU5EX0xJTkUoTk9fJHtQUk9HUkFNfT1ZZXNQbGVhc2UpOyBcCisJCUdJVF9DT05GX0FQUEVORF9MSU5FKCR7UFJPR1JBTX1fUEFUSD0pOyBcCisJZWxzZSBcCisJCUFDX01TR19FUlJPUihbWW91IGNhbm5vdCB1c2UgZ2l0IHdpdGhvdXQgJDFdKTsgXAorCWZpOyBcCiBlbHNlIFwKIAlpZiB0ZXN0ICIkd2l0aHZhbCIgPSAieWVzIjsgdGhlbiBcCiAJCUFDX01TR19XQVJOKFtZb3Ugc2hvdWxkIHByb3ZpZGUgcGF0aCBmb3IgLS13aXRoLSQxPVBBVEhdKTsgXApAQCAtNjgsNiArNzksMjYgQEAKIAlHSVRfQ09ORl9BUFBFTkRfTElORSgke1BBQ0tBR0V9RElSPSR3aXRodmFsKTsgXAogZmkgXAogXSkjIEdJVF9QQVJTRV9XSVRICisjCisjIEdJVF9QQVJTRV9XSVRIX1NFVF9NQUtFX1ZBUihXSVRITkFNRSwgVkFSLCBIRUxQX1RFWFQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgVkFSIHRvIHRoZSB2YWx1ZSBzcGVjaWVkIGJ5IC0td2l0aC1XSVRITkFNRS4KKyMgTm8gdmVyaWZpY2F0aW9uIG9mIGFyZ3VtZW50cyBpcyBwZXJmb3JtZWQsIGJ1dCB3YXJuaW5ncyBhcmUgaXNzdWVkCisjIGlmIGVpdGhlciAneWVzJyBvciAnbm8nIGlzIHNwZWNpZmllZC4KKyMgSEVMUF9URVhUIGlzIHByZXNlbnRlZCB3aGVuIC0taGVscCBpcyBjYWxsZWQuCisjIFRoaXMgaXMgYSBkaXJlY3Qgd2F5IHRvIGFsbG93IHNldHRpbmcgdmFyaWFibGVzIGluIHRoZSBNYWtlZmlsZS4KK0FDX0RFRlVOKFtHSVRfUEFSU0VfV0lUSF9TRVRfTUFLRV9WQVJdLAorW0FDX0FSR19XSVRIKFskMV0sCisgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtJDE9VkFMVUVdLCAkMyldLAorIGlmIHRlc3QgLW4gIiR3aXRodmFsIjsgdGhlbiBcCisgIGlmIHRlc3QgIiR3aXRodmFsIiA9ICJ5ZXMiIC1vICIkd2l0aHZhbCIgPSAibm8iOyB0aGVuIFwKKyAgICBBQ19NU0dfV0FSTihbWW91IGxpa2VseSBkbyBub3Qgd2FudCBlaXRoZXIgJ3llcycgb3IgJ25vJyBhc10KKwkJICAgICBbYSB2YWx1ZSBmb3IgJDEgKCQyKS4gIE1heWJlIHlvdSBkby4uLj9dKTsgXAorICBmaTsgXAorICBcCisgIEFDX01TR19OT1RJQ0UoW1NldHRpbmcgJDIgdG8gJHdpdGh2YWxdKTsgXAorICBHSVRfQ09ORl9BUFBFTkRfTElORSgkMj0kd2l0aHZhbCk7IFwKKyBmaSldKSMgR0lUX1BBUlNFX1dJVEhfU0VUX01BS0VfVkFSCiAKIGRubAogZG5sIEdJVF9DSEVDS19GVU5DKEZVTkNUSU9OLCBJRlRSVUUsIElGRkFMU0UpCkBAIC0xNTYsMTkgKzE4NywxMSBAQAogIyB0ZXN0cy4gIFRoZXNlIHRlc3RzIHRha2UgdXAgYSBzaWduaWZpY2FudCBhbW91bnQgb2YgdGhlIHRvdGFsIHRlc3QgdGltZQogIyBidXQgYXJlIG5vdCBuZWVkZWQgdW5sZXNzIHlvdSBwbGFuIHRvIHRhbGsgdG8gU1ZOIHJlcG9zLgogIwotIyBEZWZpbmUgTU9aSUxMQV9TSEExIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4gcnVubmluZyBtYWtlIHRvIG1ha2UgdXNlIG9mCi0jIGEgYnVuZGxlZCBTSEExIHJvdXRpbmUgY29taW5nIGZyb20gTW96aWxsYS4gSXQgaXMgR1BMJ2QgYW5kIHNob3VsZCBiZSBmYXN0Ci0jIG9uIG5vbi14ODYgYXJjaGl0ZWN0dXJlcyAoZS5nLiBQb3dlclBDKSwgd2hpbGUgdGhlIE9wZW5TU0wgdmVyc2lvbiAoZGVmYXVsdAotIyBjaG9pY2UpIGhhcyB2ZXJ5IGZhc3QgdmVyc2lvbiBvcHRpbWl6ZWQgZm9yIGk1ODYuCi0jCiAjIERlZmluZSBQUENfU0hBMSBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGVuIHJ1bm5pbmcgbWFrZSB0byBtYWtlIHVzZSBvZgogIyBhIGJ1bmRsZWQgU0hBMSByb3V0aW5lIG9wdGltaXplZCBmb3IgUG93ZXJQQy4KICMKLSMgRGVmaW5lIEFSTV9TSEExIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4gcnVubmluZyBtYWtlIHRvIG1ha2UgdXNlIG9mCi0jIGEgYnVuZGxlZCBTSEExIHJvdXRpbmUgb3B0aW1pemVkIGZvciBBUk0uCi0jCiAjIERlZmluZSBOT19PUEVOU1NMIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHlvdSBkbyBub3QgaGF2ZSBPcGVuU1NMLgotIyBUaGlzIGFsc28gaW1wbGllcyBNT1pJTExBX1NIQTEuCisjIFRoaXMgYWxzbyBpbXBsaWVzIEJMS19TSEExLgogIwogIyBEZWZpbmUgT1BFTlNTTERJUj0vZm9vL2JhciBpZiB5b3VyIG9wZW5zc2wgaGVhZGVyIGFuZCBsaWJyYXJ5IGZpbGVzIGFyZSBpbgogIyAvZm9vL2Jhci9pbmNsdWRlIGFuZCAvZm9vL2Jhci9saWIgZGlyZWN0b3JpZXMuCkBAIC0yMzUsMTIgKzI1OCwzOCBAQAogIyBjaGFuZ2UgYmVpbmcgY29uc2lkZXJlZCBhbiBpbm9kZSBjaGFuZ2UgZnJvbSB0aGUgdXBkYXRlLWluZGV4IHBlcnNwZWN0aXZlLgogCiAjCisjIEFsbG93IHVzZXIgdG8gc2V0IEVUQ19HSVRDT05GSUcgdmFyaWFibGUKK0dJVF9QQVJTRV9XSVRIX1NFVF9NQUtFX1ZBUihnaXRjb25maWcsIEVUQ19HSVRDT05GSUcsCisJCQlVc2UgVkFMVUUgaW5zdGVhZCBvZiAvZXRjL2dpdGNvbmZpZyBhcyB0aGUKKwkJCWdsb2JhbCBnaXQgY29uZmlndXJhdGlvbiBmaWxlLgorCQkJSWYgVkFMVUUgaXMgbm90IGZ1bGx5IHF1YWxpZmllZCBpdCB3aWxsIGJlIGludGVycHJldHRlZAorCQkJYXMgYSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBjb21wdXRlZCBwcmVmaXggYXQgcnVudGltZS4pCisKKyMKKyMgQWxsb3cgdXNlciB0byBzZXQgdGhlIGRlZmF1bHQgcGFnZXIKK0dJVF9QQVJTRV9XSVRIX1NFVF9NQUtFX1ZBUihwYWdlciwgREVGQVVMVF9QQUdFUiwKKwkJCVVzZSBWQUxVRSBhcyB0aGUgZmFsbC1iYWNrIHBhZ2VyIGluc3RlYWQgb2YgJ2xlc3MnLgorCQkJVGhpcyBpcyB1c2VkIGJ5IHRoaW5ncyBsaWtlICdnaXQgbG9nJyB3aGVuIHRoZSB1c2VyCisJCQlkb2VzIG5vdCBzcGVjaWZ5IGEgcGFnZXIgdG8gdXNlIHRocm91Z2ggYWx0ZXJuYXRlCisJCQltZXRob2RzLiBlZzogL3Vzci9iaW4vcGFnZXIpCisjCisjIEFsbG93IHVzZXIgdG8gc2V0IHRoZSBkZWZhdWx0IGVkaXRvcgorR0lUX1BBUlNFX1dJVEhfU0VUX01BS0VfVkFSKGVkaXRvciwgREVGQVVMVF9FRElUT1IsCisJCQlVc2UgVkFMVUUgYXMgdGhlIGZhbGwtYmFjayBlZGl0b3IgaW5zdGVhZCBvZiAndmknLgorCQkJVGhpcyBpcyB1c2VkIGJ5IHRoaW5ncyBsaWtlICdnaXQgY29tbWl0JyB3aGVuIHRoZSB1c2VyCisJCQlkb2VzIG5vdCBzcGVjaWZ5IGEgcHJlZmVycmVkIGVkaXRvciB0aHJvdWdoIG90aGVyCisJCQltZXRob2RzLiBlZzogL3Vzci9iaW4vZWRpdG9yKQorCisjCiAjIERlZmluZSBTSEVMTF9QQVRIIHRvIHByb3ZpZGUgcGF0aCB0byBzaGVsbC4KIEdJVF9BUkdfU0VUX1BBVEgoc2hlbGwpCiAjCiAjIERlZmluZSBQRVJMX1BBVEggdG8gcHJvdmlkZSBwYXRoIHRvIFBlcmwuCiBHSVRfQVJHX1NFVF9QQVRIKHBlcmwpCiAjCisjIERlZmluZSBQWVRIT05fUEFUSCB0byBwcm92aWRlIHBhdGggdG8gUHl0aG9uLgorR0lUX0FSR19TRVRfUEFUSChweXRob24sIGFsbG93LXdpdGhvdXQpCisjCiAjIERlZmluZSBaTElCX1BBVEggdG8gcHJvdmlkZSBwYXRoIHRvIHpsaWIuCiBHSVRfQVJHX1NFVF9QQVRIKHpsaWIpCiAjCkBAIC0zNDIsOSArMzkxLDggQEAKIEFDX0NIRUNLX0xJQihbY3J5cHRvXSwgW1NIQTFfSW5pdF0sCiBbTkVFRFNfU1NMX1dJVEhfQ1JZUFRPPV0sCiBbQUNfQ0hFQ0tfTElCKFtzc2xdLCBbU0hBMV9Jbml0XSwKLSBbTkVFRFNfU1NMX1dJVEhfQ1JZUFRPPVllc1BsZWFzZQotICBORUVEU19TU0xfV0lUSF9DUllQVE89XSwKLSBbTk9fT1BFTlNTTD1ZZXNQbGVhc2VdKV0pCisgW05FRURTX1NTTF9XSVRIX0NSWVBUTz1ZZXNQbGVhc2VdLAorIFtORUVEU19TU0xfV0lUSF9DUllQVE89IE5PX09QRU5TU0w9WWVzUGxlYXNlXSldKQogCiBHSVRfVU5TVEFTSF9GTEFHUygkT1BFTlNTTERJUikKIApAQCAtNDc1LDYgKzUyMywyMSBAQAogQUNfU1VCU1QoTkVFRFNfU09DS0VUKQogdGVzdCAtbiAiJE5FRURTX1NPQ0tFVCIgJiYgTElCUz0iJExJQlMgLWxzb2NrZXQiCiAKKyMKKyMgRGVmaW5lIE5FRURTX1JFU09MViBpZiBsaW5raW5nIHdpdGggLWxuc2wgYW5kL29yIC1sc29ja2V0IGlzIG5vdCBlbm91Z2guCisjIE5vdGFibHkgb24gU29sYXJpcyBoc3RyZXJyb3IgcmVzaWRlcyBpbiBsaWJyZXNvbHYgYW5kIG9uIFNvbGFyaXMgNworIyBpbmV0X250b3AgYW5kIGluZXRfcHRvbiBhZGRpdGlvbmFsbHkgcmVzaWRlIHRoZXJlLgorQUNfQ0hFQ0tfTElCKFtjXSwgW2hzdHJlcnJvcl0sCitbTkVFRFNfUkVTT0xWPV0sCitbTkVFRFNfUkVTT0xWPVllc1BsZWFzZV0pCitBQ19TVUJTVChORUVEU19SRVNPTFYpCit0ZXN0IC1uICIkTkVFRFNfUkVTT0xWIiAmJiBMSUJTPSIkTElCUyAtbHJlc29sdiIKKworQUNfQ0hFQ0tfTElCKFtjXSwgW2Jhc2VuYW1lXSwKK1tORUVEU19MSUJHRU49XSwKK1tORUVEU19MSUJHRU49WWVzUGxlYXNlXSkKK0FDX1NVQlNUKE5FRURTX0xJQkdFTikKK3Rlc3QgLW4gIiRORUVEU19MSUJHRU4iICYmIExJQlM9IiRMSUJTIC1sZ2VuIgogCiAjIyBDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4KIEFDX01TR19OT1RJQ0UoW0NIRUNLUyBmb3IgaGVhZGVyIGZpbGVzXSkKQEAgLTYzNSw2ICs2OTgsMTIgQEAKICMjIChpbiBkZWZhdWx0IEMgbGlicmFyeSBhbmQgbGlicmFyaWVzIGNoZWNrZWQgYnkgQUNfQ0hFQ0tfTElCKQogQUNfTVNHX05PVElDRShbQ0hFQ0tTIGZvciBsaWJyYXJ5IGZ1bmN0aW9uc10pCiAjCisjIERlZmluZSBOT19MSUJHRU5fSCBpZiB5b3UgZG9uJ3QgaGF2ZSBsaWJnZW4uaC4KK0FDX0NIRUNLX0hFQURFUihbbGliZ2VuLmhdLAorW05PX0xJQkdFTl9IPV0sCitbTk9fTElCR0VOX0g9WWVzUGxlYXNlXSkKK0FDX1NVQlNUKE5PX0xJQkdFTl9IKQorIwogIyBEZWZpbmUgTk9fU1RSQ0FTRVNUUiBpZiB5b3UgZG9uJ3QgaGF2ZSBzdHJjYXNlc3RyLgogR0lUX0NIRUNLX0ZVTkMoc3RyY2FzZXN0ciwKIFtOT19TVFJDQVNFU1RSPV0sCkBAIC02ODUsNiArNzU0LDEzIEBACiBbTk9fTUtEVEVNUD1ZZXNQbGVhc2VdKQogQUNfU1VCU1QoTk9fTUtEVEVNUCkKICMKKyMgRGVmaW5lIE5PX01LU1RFTVBTIGlmIHlvdSBkb24ndCBoYXZlIG1rc3RlbXBzIGluIHRoZSBDIGxpYnJhcnkuCitHSVRfQ0hFQ0tfRlVOQyhta3N0ZW1wcywKK1tOT19NS1NURU1QUz1dLAorW05PX01LU1RFTVBTPVllc1BsZWFzZV0pCitBQ19TVUJTVChOT19NS1NURU1QUykKKyMKKyMKICMgRGVmaW5lIE5PX01NQVAgaWYgeW91IHdhbnQgdG8gYXZvaWQgbW1hcC4KICMKICMgRGVmaW5lIE5PX0lDT05WIGlmIHlvdXIgbGliYyBkb2VzIG5vdCBwcm9wZXJseSBzdXBwb3J0IGljb252LgpAQCAtNjk3LDEwICs3NzMsOSBAQAogIyBEZWZpbmUgTk9fU1lNTElOS19IRUFEIGlmIHlvdSBuZXZlciB3YW50IC5naXQvSEVBRCB0byBiZSBhIHN5bWJvbGljIGxpbmsuCiAjIEVuYWJsZSBpdCBvbiBXaW5kb3dzLiAgQnkgZGVmYXVsdCwgc3ltcmVmcyBhcmUgc3RpbGwgdXNlZC4KICMKLSMgRGVmaW5lIE5PX1BUSFJFQURTIGlmIHdlIGRvIG5vdCBoYXZlIHB0aHJlYWRzCisjIERlZmluZSBOT19QVEhSRUFEUyBpZiB3ZSBkbyBub3QgaGF2ZSBwdGhyZWFkcy4KICMKLSMgRGVmaW5lIFBUSFJFQURfTElCUyB0byB0aGUgbGlua2VyIGZsYWcgdXNlZCBmb3IgUHRocmVhZCBzdXBwb3J0IGFuZCBkZWZpbmUKLSMgVEhSRUFERURfREVMVEFfU0VBUkNIIGlmIFB0aHJlYWRzIGFyZSBhdmFpbGFibGUuCisjIERlZmluZSBQVEhSRUFEX0xJQlMgdG8gdGhlIGxpbmtlciBmbGFnIHVzZWQgZm9yIFB0aHJlYWQgc3VwcG9ydC4KIEFDX0RFRlVOKFtQVEhSRUFEVEVTVF9TUkNdLCBbCiAjaW5jbHVkZSA8cHRocmVhZC5oPgogCkBAIC03MTcsNyArNzkyLDYgQEAKIGRubCApXSkKIAogTk9fUFRIUkVBRFM9VW5mb3J0dW5hdGVseVllcwotVEhSRUFERURfREVMVEFfU0VBUkNIPQogUFRIUkVBRF9MSUJTPQogCiBpZiB0ZXN0IC1uICIkVVNFUl9OT1BUSFJFQUQiOyB0aGVuCkBAIC03MzMsNyArODA3LDYgQEAKIAlbQUNfTVNHX1JFU1VMVChbeWVzXSkKIAkJTk9fUFRIUkVBRFM9CiAJCVBUSFJFQURfTElCUz0iJG9wdCIKLQkJVEhSRUFERURfREVMVEFfU0VBUkNIPVllc1BsZWFzZQogCQlicmVhawogCV0sCiAJW0FDX01TR19SRVNVTFQoW25vXSldKQpAQCAtNzQ3LDcgKzgyMCw2IEBACiAJW0FDX01TR19SRVNVTFQoW3llc10pCiAJCU5PX1BUSFJFQURTPQogCQlQVEhSRUFEX0xJQlM9IiRQVEhSRUFEX0NGTEFHUyIKLQkJVEhSRUFERURfREVMVEFfU0VBUkNIPVllc1BsZWFzZQogCV0sCiAJW0FDX01TR19SRVNVTFQoW25vXSldKQogCkBAIC03NTgsNyArODMwLDYgQEAKIAogQUNfU1VCU1QoUFRIUkVBRF9MSUJTKQogQUNfU1VCU1QoTk9fUFRIUkVBRFMpCi1BQ19TVUJTVChUSFJFQURFRF9ERUxUQV9TRUFSQ0gpCiAKICMjIE91dHB1dCBmaWxlcwogQUNfQ09ORklHX0ZJTEVTKFsiJHtjb25maWdfZmlsZX0iOiIke2NvbmZpZ19pbn0iOiIke2NvbmZpZ19hcHBlbmR9Il0pCmRpZmYgLS1naXQgYS9jb25uZWN0LmMgYi9jb25uZWN0LmMKaW5kZXggOTU4YzgzMS4uYmVhZmY5OCAxMDA2NDQKLS0tIGEvY29ubmVjdC5jCisrKyBiL2Nvbm5lY3QuYwpAQCAtMTA3LDI3ICsxMDcsNiBAQAogCQlzdHJzdHIoc2VydmVyX2NhcGFiaWxpdGllcywgZmVhdHVyZSkgIT0gTlVMTDsKIH0KIAotaW50IGdldF9hY2soaW50IGZkLCB1bnNpZ25lZCBjaGFyICpyZXN1bHRfc2hhMSkKLXsKLQlzdGF0aWMgY2hhciBsaW5lWzEwMDBdOwotCWludCBsZW4gPSBwYWNrZXRfcmVhZF9saW5lKGZkLCBsaW5lLCBzaXplb2YobGluZSkpOwotCi0JaWYgKCFsZW4pCi0JCWRpZSgiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBFT0YiKTsKLQlpZiAobGluZVtsZW4tMV0gPT0gJ1xuJykKLQkJbGluZVstLWxlbl0gPSAwOwotCWlmICghc3RyY21wKGxpbmUsICJOQUsiKSkKLQkJcmV0dXJuIDA7Ci0JaWYgKCFwcmVmaXhjbXAobGluZSwgIkFDSyAiKSkgewotCQlpZiAoIWdldF9zaGExX2hleChsaW5lKzQsIHJlc3VsdF9zaGExKSkgewotCQkJaWYgKHN0cnN0cihsaW5lKzQ1LCAiY29udGludWUiKSkKLQkJCQlyZXR1cm4gMjsKLQkJCXJldHVybiAxOwotCQl9Ci0JfQotCWRpZSgiZ2l0IGZldGNoX3BhY2s6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCAnJXMnIiwgbGluZSk7Ci19Ci0KIGludCBwYXRoX21hdGNoKGNvbnN0IGNoYXIgKnBhdGgsIGludCBuciwgY2hhciAqKm1hdGNoKQogewogCWludCBpOwpAQCAtNDY0LDcgKzQ0Myw3IEBACiAKICNkZWZpbmUgTUFYX0NNRF9MRU4gMTAyNAogCi1jaGFyICpnZXRfcG9ydChjaGFyICpob3N0KQorc3RhdGljIGNoYXIgKmdldF9wb3J0KGNoYXIgKmhvc3QpCiB7CiAJY2hhciAqZW5kOwogCWNoYXIgKnAgPSBzdHJjaHIoaG9zdCwgJzonKTsKQEAgLTUxMyw3ICs0OTIsNyBAQAogCXNpZ25hbChTSUdDSExELCBTSUdfREZMKTsKIAogCWhvc3QgPSBzdHJzdHIodXJsLCAiOi8vIik7Ci0JaWYoaG9zdCkgeworCWlmIChob3N0KSB7CiAJCSpob3N0ID0gJ1wwJzsKIAkJcHJvdG9jb2wgPSBnZXRfcHJvdG9jb2wodXJsKTsKIAkJaG9zdCArPSAzOwpAQCAtNTIzLDEyICs1MDIsMTggQEAKIAkJYyA9ICc6JzsKIAl9CiAKKwkvKgorCSAqIERvbid0IGRvIGRlc3RydWN0aXZlIHRyYW5zZm9ybXMgd2l0aCBnaXQ6Ly8gYXMgdGhhdAorCSAqIHByb3RvY29sIGNvZGUgZG9lcyAnW10nIHVud3JhcHBpbmcgb2YgaXRzIG93bi4KKwkgKi8KIAlpZiAoaG9zdFswXSA9PSAnWycpIHsKIAkJZW5kID0gc3RyY2hyKGhvc3QgKyAxLCAnXScpOwogCQlpZiAoZW5kKSB7Ci0JCQkqZW5kID0gMDsKKwkJCWlmIChwcm90b2NvbCAhPSBQUk9UT19HSVQpIHsKKwkJCQkqZW5kID0gMDsKKwkJCQlob3N0Kys7CisJCQl9CiAJCQllbmQrKzsKLQkJCWhvc3QrKzsKIAkJfSBlbHNlCiAJCQllbmQgPSBob3N0OwogCX0gZWxzZQpAQCAtNjA1LDMyICs1OTAsMjYgQEAKIAkJZGllKCJjb21tYW5kIGxpbmUgdG9vIGxvbmciKTsKIAogCWNvbm4tPmluID0gY29ubi0+b3V0ID0gLTE7Ci0JY29ubi0+YXJndiA9IGFyZyA9IHhjYWxsb2MoNiwgc2l6ZW9mKCphcmcpKTsKKwljb25uLT5hcmd2ID0gYXJnID0geGNhbGxvYyg3LCBzaXplb2YoKmFyZykpOwogCWlmIChwcm90b2NvbCA9PSBQUk9UT19TU0gpIHsKIAkJY29uc3QgY2hhciAqc3NoID0gZ2V0ZW52KCJHSVRfU1NIIik7CisJCWludCBwdXR0eSA9IHNzaCAmJiBzdHJjYXNlc3RyKHNzaCwgInBsaW5rIik7CiAJCWlmICghc3NoKSBzc2ggPSAic3NoIjsKIAogCQkqYXJnKysgPSBzc2g7CisJCWlmIChwdXR0eSAmJiAhc3RyY2FzZXN0cihzc2gsICJ0b3J0b2lzZXBsaW5rIikpCisJCQkqYXJnKysgPSAiLWJhdGNoIjsKIAkJaWYgKHBvcnQpIHsKLQkJCSphcmcrKyA9ICItcCI7CisJCQkvKiBQIGlzIGZvciBQdVRUWSwgcCBpcyBmb3IgT3BlblNTSCAqLworCQkJKmFyZysrID0gcHV0dHkgPyAiLVAiIDogIi1wIjsKIAkJCSphcmcrKyA9IHBvcnQ7CiAJCX0KIAkJKmFyZysrID0gaG9zdDsKIAl9CiAJZWxzZSB7Ci0JCS8qIHJlbW92ZSB0aGVzZSBmcm9tIHRoZSBlbnZpcm9ubWVudCAqLwotCQljb25zdCBjaGFyICplbnZbXSA9IHsKLQkJCUFMVEVSTkFURV9EQl9FTlZJUk9OTUVOVCwKLQkJCURCX0VOVklST05NRU5ULAotCQkJR0lUX0RJUl9FTlZJUk9OTUVOVCwKLQkJCUdJVF9XT1JLX1RSRUVfRU5WSVJPTk1FTlQsCi0JCQlHUkFGVF9FTlZJUk9OTUVOVCwKLQkJCUlOREVYX0VOVklST05NRU5ULAotCQkJTlVMTAotCQl9OwotCQljb25uLT5lbnYgPSBlbnY7Ci0JCSphcmcrKyA9ICJzaCI7Ci0JCSphcmcrKyA9ICItYyI7CisJCS8qIHJlbW92ZSByZXBvLWxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBlbnZpcm9ubWVudCAqLworCQljb25uLT5lbnYgPSBsb2NhbF9yZXBvX2VudjsKKwkJY29ubi0+dXNlX3NoZWxsID0gMTsKIAl9CiAJKmFyZysrID0gY21kLmJ1ZjsKIAkqYXJnID0gTlVMTDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL0dlbmVyYXRvcnMucG0gYi9jb250cmliL2J1aWxkc3lzdGVtcy9HZW5lcmF0b3JzLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwOGVmNzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2J1aWxkc3lzdGVtcy9HZW5lcmF0b3JzLnBtCkBAIC0wLDAgKzEsNDIgQEAKK3BhY2thZ2UgR2VuZXJhdG9yczsKK3JlcXVpcmUgRXhwb3J0ZXI7CisKK3VzZSBzdHJpY3Q7Cit1c2UgRmlsZTo6QmFzZW5hbWU7CitubyBzdHJpY3QgJ3JlZnMnOwordXNlIHZhcnMgcXcoJFZFUlNJT04gQEFWQUlMQUJMRSk7CisKK291ciAkVkVSU0lPTiA9ICcxLjAwJzsKK291cihASVNBLCBARVhQT1JULCBARVhQT1JUX09LLCBAQVZBSUxBQkxFKTsKK0BJU0EgPSBxdyhFeHBvcnRlcik7CisKK0JFR0lOIHsKKyAgICBsb2NhbCgqRCk7CisgICAgbXkgJG1lID0gJElOQ3siR2VuZXJhdG9ycy5wbSJ9OworICAgIGRpZSAiQ291bGRuJ3QgZmluZCBteXNlbGYgaW4gXEBJTkMsIHdoaWNoIGlzIHJlcXVpcmVkIHRvIGxvYWQgdGhlIGdlbmVyYXRvcnMhIiBpZiAoIiRtZSIgZXEgIiIpOworICAgICRtZSA9IGRpcm5hbWUoJG1lKTsKKyAgICBpZiAob3BlbmRpcihELCIkbWUvR2VuZXJhdG9ycyIpKSB7CisgICAgICAgIGZvcmVhY2ggbXkgJGdlbiAocmVhZGRpcihEKSkgeworICAgICAgICAgICAgbmV4dCBpZiAoJGdlbiAgPX4gL15cLlwuPyQvKTsKKyAgICAgICAgICAgIHJlcXVpcmUgIiR7bWV9L0dlbmVyYXRvcnMvJGdlbiI7CisgICAgICAgICAgICAkZ2VuID1+IHMsXC5wbSwsOworICAgICAgICAgICAgcHVzaChAQVZBSUxBQkxFLCAkZ2VuKTsKKyAgICAgICAgfQorICAgICAgICBjbG9zZWRpcihEKTsKKyAgICAgICAgbXkgJGdlbnMgPSBqb2luKCcsICcsIEBBVkFJTEFCTEUpOworICAgIH0KKworICAgIHB1c2ggQEVYUE9SVF9PSywgcXcoYXZhaWxhYmxlKTsKK30KKworc3ViIGF2YWlsYWJsZSB7CisgICAgcmV0dXJuIEBBVkFJTEFCTEU7Cit9CisKK3N1YiBnZW5lcmF0ZSB7CisgICAgbXkgKCRnZW4sICRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICVidWlsZF9zdHJ1Y3R1cmUpID0gQF87CisgICAgcmV0dXJuIGV2YWwoIkdlbmVyYXRvcnM6OiR7Z2VufTo6Z2VuZXJhdGUoXCRnaXRfZGlyLCBcJG91dF9kaXIsIFwkcmVsX2RpciwgXCVidWlsZF9zdHJ1Y3R1cmUpIikgaWYgZ3JlcCgvXiRnZW4kLywgQEFWQUlMQUJMRSk7CisgICAgZGllICJHZW5lcmF0b3IgXCIke2dlbn1cIiBpcyBub3QgYXZhaWxhYmxlIVxuQXZhaWxhYmxlIGdlbmVyYXRvcnMgYXJlOiBAQVZBSUxBQkxFXG4iOworfQorCisxOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9idWlsZHN5c3RlbXMvR2VuZXJhdG9ycy9RTWFrZS5wbSBiL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL0dlbmVyYXRvcnMvUU1ha2UucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYzYjY1NwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL0dlbmVyYXRvcnMvUU1ha2UucG0KQEAgLTAsMCArMSwxODkgQEAKK3BhY2thZ2UgR2VuZXJhdG9yczo6UU1ha2U7CityZXF1aXJlIEV4cG9ydGVyOworCit1c2Ugc3RyaWN0OwordXNlIHZhcnMgcXcoJFZFUlNJT04pOworCitvdXIgJFZFUlNJT04gPSAnMS4wMCc7CitvdXIoQElTQSwgQEVYUE9SVCwgQEVYUE9SVF9PSywgQEFWQUlMQUJMRSk7CitASVNBID0gcXcoRXhwb3J0ZXIpOworCitCRUdJTiB7CisgICAgcHVzaCBARVhQT1JUX09LLCBxdyhnZW5lcmF0ZSk7Cit9CisKK3N1YiBnZW5lcmF0ZSB7CisgICAgbXkgKCRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICVidWlsZF9zdHJ1Y3R1cmUpID0gQF87CisKKyAgICBteSBAbGlicyA9IEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCUyJ9fTsKKyAgICBmb3JlYWNoIChAbGlicykgeworICAgICAgICBjcmVhdGVMaWJQcm9qZWN0KCRfLCAkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCAlYnVpbGRfc3RydWN0dXJlKTsKKyAgICB9CisKKyAgICBteSBAYXBwcyA9IEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQUyJ9fTsKKyAgICBmb3JlYWNoIChAYXBwcykgeworICAgICAgICBjcmVhdGVBcHBQcm9qZWN0KCRfLCAkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCAlYnVpbGRfc3RydWN0dXJlKTsKKyAgICB9CisKKyAgICBjcmVhdGVHbHVlUHJvamVjdCgkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCAlYnVpbGRfc3RydWN0dXJlKTsKKyAgICByZXR1cm4gMDsKK30KKworc3ViIGNyZWF0ZUxpYlByb2plY3QgeworICAgIG15ICgkbGlibmFtZSwgJGdpdF9kaXIsICRvdXRfZGlyLCAkcmVsX2RpciwgJWJ1aWxkX3N0cnVjdHVyZSkgPSBAXzsKKyAgICBwcmludCAiR2VuZXJhdGUgJGxpYm5hbWUgbGliIHByb2plY3RcbiI7CisgICAgJHJlbF9kaXIgPSAiLi4vJHJlbF9kaXIiOworCisgICAgbXkgJHNvdXJjZXMgPSBqb2luKCIgXFxcblx0Iiwgc29ydChtYXAoIiRyZWxfZGlyLyRfIiwgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlibmFtZX1fU09VUkNFUyJ9fSkpKTsKKyAgICBteSAkZGVmaW5lcyA9IGpvaW4oIiBcXFxuXHQiLCBzb3J0KEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm5hbWV9X0RFRklORVMifX0pKTsKKyAgICBteSAkaW5jbHVkZXM9IGpvaW4oIiBcXFxuXHQiLCBzb3J0KG1hcCgiJHJlbF9kaXIvJF8iLCBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJuYW1lfV9JTkNMVURFUyJ9fSkpKTsKKyAgICBteSAkY2ZsYWdzICA9IGpvaW4oIiAiLCBzb3J0KEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm5hbWV9X0NGTEFHUyJ9fSkpOworCisgICAgbXkgJGNmbGFnc19kZWJ1ZyA9ICRjZmxhZ3M7CisgICAgJGNmbGFnc19kZWJ1ZyA9fiBzLy1NVC8tTVRkLzsKKyAgICAkY2ZsYWdzX2RlYnVnID1+IHMvLU8uLy87CisKKyAgICBteSAkY2ZsYWdzX3JlbGVhc2UgPSAkY2ZsYWdzOworICAgICRjZmxhZ3NfcmVsZWFzZSA9fiBzLy1NVGQvLU1ULzsKKworICAgIG15IEB0bXAgID0gQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlibmFtZX1fTEZMQUdTIn19OworICAgIG15IEB0bXAyID0gKCk7CisgICAgZm9yZWFjaCAoQHRtcCkgeworICAgICAgICBpZiAoL14tTFRDRy8pIHsKKyAgICAgICAgfSBlbHNpZiAoL14tTC8pIHsKKyAgICAgICAgICAgICRfID1+IHMvXi1MLy1MSUJQQVRIOiRyZWxfZGlyXC8vOworICAgICAgICB9CisgICAgICAgIHB1c2goQHRtcDIsICRfKTsKKyAgICB9CisgICAgbXkgJGxmbGFncyA9IGpvaW4oIiAiLCBzb3J0KEB0bXApKTsKKworICAgIG15ICR0YXJnZXQgPSAkbGlibmFtZTsKKyAgICAkdGFyZ2V0ID1+IHMvXC8vXy9nOworICAgICRkZWZpbmVzID1+IHMvLUQvL2c7CisgICAgJGRlZmluZXMgPX4gcy8iL1xcXFwiL2c7CisgICAgJGluY2x1ZGVzID1+IHMvLUkvL2c7CisgICAgbWtkaXIgIiR0YXJnZXQiIHx8IGRpZSAiQ291bGQgbm90IGNyZWF0ZSB0aGUgZGlyZWN0b3J5ICR0YXJnZXQgZm9yIGxpYiBwcm9qZWN0IVxuIjsKKyAgICBvcGVuIEYsICI+JHRhcmdldC8kdGFyZ2V0LnBybyIgfHwgZGllICJDb3VsZCBub3Qgb3BlbiAkdGFyZ2V0LyR0YXJnZXQucHJvIGZvciB3cml0aW5nIVxuIjsKKyAgICBwcmludCBGIDw8ICJFT00iOworVEVNUExBVEUgPSBsaWIKK1RBUkdFVCA9ICR0YXJnZXQKK0RFU1RESVIgPSAkcmVsX2RpcgorCitDT05GSUcgLT0gcXQKK0NPTkZJRyArPSBzdGF0aWMKKworUU1BS0VfQ0ZMQUdTID0KK1FNQUtFX0NGTEFHU19SRUxFQVNFID0gJGNmbGFnc19yZWxlYXNlCitRTUFLRV9DRkxBR1NfREVCVUcgPSAkY2ZsYWdzX2RlYnVnCitRTUFLRV9MSUJGTEFHUyA9ICRsZmxhZ3MKKworREVGSU5FUyArPSBcXAorICAgICAgICAkZGVmaW5lcworCitJTkNMVURFUEFUSCArPSBcXAorICAgICAgICAkaW5jbHVkZXMKKworU09VUkNFUyArPSBcXAorICAgICAgICAkc291cmNlcworRU9NCisgICAgY2xvc2UgRjsKK30KKworc3ViIGNyZWF0ZUFwcFByb2plY3QgeworICAgIG15ICgkYXBwbmFtZSwgJGdpdF9kaXIsICRvdXRfZGlyLCAkcmVsX2RpciwgJWJ1aWxkX3N0cnVjdHVyZSkgPSBAXzsKKyAgICBwcmludCAiR2VuZXJhdGUgJGFwcG5hbWUgYXBwIHByb2plY3RcbiI7CisgICAgJHJlbF9kaXIgPSAiLi4vJHJlbF9kaXIiOworCisgICAgbXkgJHNvdXJjZXMgPSBqb2luKCIgXFxcblx0Iiwgc29ydChtYXAoIiRyZWxfZGlyLyRfIiwgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwbmFtZX1fU09VUkNFUyJ9fSkpKTsKKyAgICBteSAkZGVmaW5lcyA9IGpvaW4oIiBcXFxuXHQiLCBzb3J0KEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0RFRklORVMifX0pKTsKKyAgICBteSAkaW5jbHVkZXM9IGpvaW4oIiBcXFxuXHQiLCBzb3J0KG1hcCgiJHJlbF9kaXIvJF8iLCBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBuYW1lfV9JTkNMVURFUyJ9fSkpKTsKKyAgICBteSAkY2ZsYWdzICA9IGpvaW4oIiAiLCBzb3J0KEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0NGTEFHUyJ9fSkpOworCisgICAgbXkgJGNmbGFnc19kZWJ1ZyA9ICRjZmxhZ3M7CisgICAgJGNmbGFnc19kZWJ1ZyA9fiBzLy1NVC8tTVRkLzsKKyAgICAkY2ZsYWdzX2RlYnVnID1+IHMvLU8uLy87CisKKyAgICBteSAkY2ZsYWdzX3JlbGVhc2UgPSAkY2ZsYWdzOworICAgICRjZmxhZ3NfcmVsZWFzZSA9fiBzLy1NVGQvLU1ULzsKKworICAgIG15ICRsaWJzOworICAgIGZvcmVhY2ggKHNvcnQoQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwbmFtZX1fTElCUyJ9fSkpIHsKKyAgICAgICAgJF8gPX4gcy9cLy9fL2c7CisgICAgICAgICRsaWJzIC49ICIgJF8iOworICAgIH0KKyAgICBteSBAdG1wICA9IEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0xGTEFHUyJ9fTsKKyAgICBteSBAdG1wMiA9ICgpOworICAgIGZvcmVhY2ggKEB0bXApIHsKKyAgICAgICAgIyBuZXh0IGlmICgkXyBlcSAiLU5PREVGQVVMVExJQjpNU1ZDUlQubGliIik7CisgICAgICAgIGlmICgvXi1MVENHLykgeworICAgICAgICB9IGVsc2lmICgvXi1MLykgeworICAgICAgICAgICAgJF8gPX4gcy9eLUwvLUxJQlBBVEg6JHJlbF9kaXJcLy87CisgICAgICAgIH0KKyAgICAgICAgcHVzaChAdG1wMiwgJF8pOworICAgIH0KKyAgICBteSAkbGZsYWdzID0gam9pbigiICIsIHNvcnQoQHRtcCkpOworCisgICAgbXkgJHRhcmdldCA9ICRhcHBuYW1lOworICAgICR0YXJnZXQgPX4gcy9cLmV4ZS8vOworICAgICR0YXJnZXQgPX4gcy9cLy9fL2c7CisgICAgJGRlZmluZXMgPX4gcy8tRC8vZzsKKyAgICAkZGVmaW5lcyA9fiBzLyIvXFxcXCIvZzsKKyAgICAkaW5jbHVkZXMgPX4gcy8tSS8vZzsKKyAgICBta2RpciAiJHRhcmdldCIgfHwgZGllICJDb3VsZCBub3QgY3JlYXRlIHRoZSBkaXJlY3RvcnkgJHRhcmdldCBmb3IgYXBwIHByb2plY3QhXG4iOworICAgIG9wZW4gRiwgIj4kdGFyZ2V0LyR0YXJnZXQucHJvIiB8fCBkaWUgIkNvdWxkIG5vdCBvcGVuICR0YXJnZXQvJHRhcmdldC5wcm8gZm9yIHdyaXRpbmchXG4iOworICAgIHByaW50IEYgPDwgIkVPTSI7CitURU1QTEFURSA9IGFwcAorVEFSR0VUID0gJHRhcmdldAorREVTVERJUiA9ICRyZWxfZGlyCisKK0NPTkZJRyAtPSBxdCBlbWJlZF9tYW5pZmVzdF9leGUKK0NPTkZJRyArPSBjb25zb2xlCisKK1FNQUtFX0NGTEFHUyA9CitRTUFLRV9DRkxBR1NfUkVMRUFTRSA9ICRjZmxhZ3NfcmVsZWFzZQorUU1BS0VfQ0ZMQUdTX0RFQlVHID0gJGNmbGFnc19kZWJ1ZworUU1BS0VfTEZMQUdTID0gJGxmbGFncworTElCUyAgID0gJGxpYnMKKworREVGSU5FUyArPSBcXAorICAgICAgICAkZGVmaW5lcworCitJTkNMVURFUEFUSCArPSBcXAorICAgICAgICAkaW5jbHVkZXMKKword2luMzI6UU1BS0VfTEZMQUdTICs9IC1MSUJQQVRIOiRyZWxfZGlyCitlbHNlOiBRTUFLRV9MRkxBR1MgKz0gLUwkcmVsX2RpcgorCitTT1VSQ0VTICs9IFxcCisgICAgICAgICRzb3VyY2VzCitFT00KKyAgICBjbG9zZSBGOworfQorCitzdWIgY3JlYXRlR2x1ZVByb2plY3QgeworICAgIG15ICgkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCAlYnVpbGRfc3RydWN0dXJlKSA9IEBfOworICAgIG15ICRsaWJzID0gam9pbigiIFxcIFxuIiwgbWFwKCJcdCRffCRfLnBybyIsIEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCUyJ9fSkpOworICAgIG15ICRhcHBzID0gam9pbigiIFxcIFxuIiwgbWFwKCJcdCRffCRfLnBybyIsIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQUyJ9fSkpOworICAgICRsaWJzID1+IHMvXC5hLy9nOworICAgICRsaWJzID1+IHMvXC8vXy9nOworICAgICRsaWJzID1+IHMvXHwvXC8vZzsKKyAgICAkYXBwcyA9fiBzL1wuZXhlLy9nOworICAgICRhcHBzID1+IHMvXC8vXy9nOworICAgICRhcHBzID1+IHMvXHwvXC8vZzsKKworICAgIG15ICRmaWxlbmFtZSA9ICRvdXRfZGlyOworICAgICRmaWxlbmFtZSA9fiBzLy4qXC8oW15cL10rKSQvJDEvOworICAgICRmaWxlbmFtZSA9fiBzL1wvJC8vOworICAgIHByaW50ICJHZW5lcmF0ZSBnbHVlIHByb2plY3QgJGZpbGVuYW1lLnByb1xuIjsKKyAgICBvcGVuIEYsICI+JGZpbGVuYW1lLnBybyIgfHwgZGllICJDb3VsZCBub3Qgb3BlbiAkZmlsZW5hbWUucHJvIGZvciB3cml0aW5nIVxuIjsKKyAgICBwcmludCBGIDw8ICJFT00iOworVEVNUExBVEUgPSBzdWJkaXJzCitDT05GSUcgKz0gb3JkZXJlZAorU1VCRElSUyArPSBcXAorJGxpYnMgXFwKKyRhcHBzCitFT00KKyAgICBjbG9zZSBGOworfQorCisxOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9idWlsZHN5c3RlbXMvR2VuZXJhdG9ycy9WY3Byb2oucG0gYi9jb250cmliL2J1aWxkc3lzdGVtcy9HZW5lcmF0b3JzL1ZjcHJvai5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmE3NGFkCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9idWlsZHN5c3RlbXMvR2VuZXJhdG9ycy9WY3Byb2oucG0KQEAgLTAsMCArMSw2MjYgQEAKK3BhY2thZ2UgR2VuZXJhdG9yczo6VmNwcm9qOworcmVxdWlyZSBFeHBvcnRlcjsKKwordXNlIHN0cmljdDsKK3VzZSB2YXJzIHF3KCRWRVJTSU9OKTsKKworb3VyICRWRVJTSU9OID0gJzEuMDAnOworb3VyKEBJU0EsIEBFWFBPUlQsIEBFWFBPUlRfT0ssIEBBVkFJTEFCTEUpOworQElTQSA9IHF3KEV4cG9ydGVyKTsKKworQkVHSU4geworICAgIHB1c2ggQEVYUE9SVF9PSywgcXcoZ2VuZXJhdGUpOworfQorCitteSAkZ3VpZF9pbmRleCA9IDA7CitteSBAR1VJRFMgPSAoCisgICAgIntFMDdCOTk4OS0yQkY3LTRGMjEtODkxOC1CRTIyQkE0NjdBQzN9IiwKKyAgICAiezI3OEZGQjUxLTAyOTYtNEE0NC1BODFBLTIyQjg3QjdDMzU5Mn0iLAorICAgICJ7NzM0NkEyQzQtRjBGRC00NDRGLTlFQkUtMUFGMjNCMkI1NjUwfSIsCisgICAgIns2N0Y0MjFBQy1FQjM0LTRENDktODIwQi0zMTk2ODA3QjQyM0Z9IiwKKyAgICAiezM4NURDRkUxLUNDOEMtNDIxMS1BNDUxLTgwRkNGQzMxQ0E1MX0iLAorICAgICJ7OTdDQzQ2QzUtRDJDQy00RDI2LUI2MzQtRTc1NzkyQjc5OTE2fSIsCisgICAgIntDN0NFMjFGRS02RUY4LTQwMTItQTVDNy1BMjJCQ0VERkJBMTF9IiwKKyAgICAiezUxNTc1MTM0LTNGREYtNDJEMS1CQUJELTNGQjEyNjY5QzZDOX0iLAorICAgICJ7MEFFMTk1RTQtOTgyMy00Qjg3LThFNkYtMjBDNTYxNEFGMkZGfSIsCisgICAgIns0QjkxODI1NS02N0NBLTQzQkItQTQ2Qy0yNjcwNEI2NjZFNkJ9IiwKKyAgICAiezE4Q0NGRUVGLUM4RUUtNENDMS1BMjY1LTI2Rjk1QzlGNDY0OX0iLAorICAgICJ7NUQ1RDkwRkEtMDFCNy00OTczLUFGRTUtQ0E4OEM1M0FDMTk3fSIsCisgICAgInsxRjA1NDMyMC0wMzZELTQ5RTEtQjM4NC1GQjVERjBCQzhBQzB9IiwKKyAgICAiezdDRUQ2NUVFLUYyRDktNDE3MS04MjVCLUM3RDU2MUZFNTc4Nn0iLAorICAgICJ7OEQzNDE2NzktMEYwNy00NjY0LTlBNTYtM0JBMERFODhCOUJDfSIsCisgICAgIntDMTg5RkVEQy0yOTU3LTRCRDctOUZBNC03NjIyMjQxRUExNDV9IiwKKyAgICAiezY2ODQ0MjAzLTFCOUYtNEM1My05Mjc0LTE2NEZGRjk1Qjg0N30iLAorICAgICJ7RTRGRUExNDUtREVDQy00NDBELUFFRUEtNTk4Q0YzODFGRDQzfSIsCisgICAgIns3MzMwMEE4RS1DOEFDLTQxQjAtQjU1NS00RjU5NkI2ODFCQTd9IiwKKyAgICAiezg3M0ZERUIxLUQwMUQtNDBCRi1BMUJGLThCQkM1OEVDMEY1MX0iLAorICAgICJ7NzkyMkM4QkUtNzZDNS00QUM2LThCRjctODg1QzBGOTNCNzgyfSIsCisgICAgIntFMjQ1RDM3MC0zMDhCLTRBNDktQkZDMS0xRTUyNzgyNzk3NUZ9IiwKKyAgICAie0Y2RkE5NTdCLTY2RkMtNEVENy1CMjYwLUU1OUJCRTRGRTgxM30iLAorICAgICJ7RTYwNTUwNzAtMDE5OC00MzFBLUJDNDktOERCNkNFRTc3MEFFfSIsCisgICAgIns1NDE1OTIzNC1DM0VCLTQzREEtOTA2Qi1DRTVEQTVDNzQ2NTR9IiwKKyAgICAiezU5NENGQzM1LTBCNjAtNDZGNi1COEVGLTk5ODNBQ0MxMTg3RH0iLAorICAgICJ7RDkzRkNBQjctMUYwMS00OEQyLUI4MzItRjc2MUI4MzIzMUE1fSIsCisgICAgIntEQkE1RTZBQy1FN0JFLTQyRDMtODcwMy00RTc4NzE0MTUyNkV9IiwKKyAgICAiezYxNzE5NTNGLUREMjYtNDRDNy1BM0JFLUNDNDVGODZGQzExRn0iLAorICAgICJ7OUUxOUREQkUtRjVFNC00QTI2LUEyRkUtMDYxNkUwNDg3OUI4fSIsCisgICAgIntBRTgxQTYxNS05OUUzLTQ4ODUtOUNFMC1EOUNBQTE5M0U4Njd9IiwKKyAgICAie0ZCRjQwNjdFLTE4NTUtNEY2Qy04QkNELTRENjJFODAxQTA0RH0iLAorICAgICJ7MTcwMDc5NDgtNjU5My00QUVCLTgxMDYtRjc4ODRCNEYyQzE5fSIsCisgICAgInsxOTlENEM4RC04NjM5LTREQTYtODJFRi0wODY2OEMzNURFRTB9IiwKKyAgICAie0UwODVFNTBFLUMxNDAtNENGMy1CRTRCLTA5NEIxNEYwRERENn0iLAorICAgICJ7MDA3ODUyNjgtQTlDQy00RTQwLUFDMjktQkFDMDAxOTE1OUNFfSIsCisgICAgIns0QzA2RjU2QS1EQ0RCLTQ2QTYtQjY3Qy0wMjMzOTkzNUNGMTJ9IiwKKyAgICAiezNBNjJEM0ZELTUxOUUtNEVDOS04MTcxLUQyQzFCRkVBMDIyRn0iLAorICAgICJ7M0E2MkQzRkQtNTE5RS00RUM5LTgxNzEtRDJDMUJGRUEwMjJGfSIsCisgICAgIns5MzkyRUI1OC1EN0JBLTQxMEItQjFGMC1CMkZBQTZCQzg5QTd9IiwKKyAgICAiezJBQ0FCMkQ1LUUwQ0UtNDAyNy1CQ0EwLUQ3OEIyRDdBNkM2Nn0iLAorICAgICJ7ODZFMjE2QzMtNDNDRS00ODFBLUJDQjItQkU1RTYyODUwNjM1fSIsCisgICAgIntGQjYzMTI5MS03OTIzLTRCOTEtOUE1Ny03QjE4RkRCQjdBNDJ9IiwKKyAgICAiezBBMTc2RUM5LUU5MzQtNDVCOC1CODdGLTE2QzdGNEM4MDAzOX0iLAorICAgICJ7REY1NUNBODAtNDZFOC00QzUzLUI2NUItNDk5MEEyM0RENDQ0fSIsCisgICAgInszQTBGOTg5NS01NUQyLTQ3MTAtQkU1RS1BRDc0OThCNUJGNDR9IiwKKyAgICAiezI5NEJEQzVBLUY0NDgtNDhCNi04MTEwLUREMEE4MTgyMEY4Q30iLAorICAgICJ7NEI5RjY2RTktRkFDOS00N0FCLUIxRUYtQzE2NzU2RkJGRDA2fSIsCisgICAgIns3MkVBNDlDNi0yODA2LTQ4QkQtQjgxQi1ENDkwNTEwMkUxOUN9IiwKKyAgICAiezU3MjhFQjdFLTg5MjktNDg2Qy04Q0Q1LTMyMzhEMDYwRTc2OH0iCispOworCitzdWIgZ2VuZXJhdGUgeworICAgIG15ICgkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCAlYnVpbGRfc3RydWN0dXJlKSA9IEBfOworICAgIG15IEBsaWJzID0gQHskYnVpbGRfc3RydWN0dXJleyJMSUJTIn19OworICAgIGZvcmVhY2ggKEBsaWJzKSB7CisgICAgICAgIGNyZWF0ZUxpYlByb2plY3QoJF8sICRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsIFwlYnVpbGRfc3RydWN0dXJlKTsKKyAgICB9CisKKyAgICBteSBAYXBwcyA9IEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQUyJ9fTsKKyAgICBmb3JlYWNoIChAYXBwcykgeworICAgICAgICBjcmVhdGVBcHBQcm9qZWN0KCRfLCAkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCBcJWJ1aWxkX3N0cnVjdHVyZSk7CisgICAgfQorCisgICAgY3JlYXRlR2x1ZVByb2plY3QoJGdpdF9kaXIsICRvdXRfZGlyLCAkcmVsX2RpciwgJWJ1aWxkX3N0cnVjdHVyZSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N1YiBjcmVhdGVMaWJQcm9qZWN0IHsKKyAgICBteSAoJGxpYm5hbWUsICRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICRidWlsZF9zdHJ1Y3R1cmUpID0gQF87CisgICAgcHJpbnQgIkdlbmVyYXRlICRsaWJuYW1lIHZjcHJvaiBsaWIgcHJvamVjdFxuIjsKKyAgICAkcmVsX2RpciA9ICIuLlxcJHJlbF9kaXIiOworICAgICRyZWxfZGlyID1+IHMvXC8vXFwvZzsKKworICAgIG15ICR0YXJnZXQgPSAkbGlibmFtZTsKKyAgICAkdGFyZ2V0ID1+IHMvXC8vXy9nOworICAgICR0YXJnZXQgPX4gcy9cLmEvLzsKKworICAgIG15ICR1dWlkID0gJEdVSURTWyRndWlkX2luZGV4XTsKKyAgICAkJGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke3RhcmdldH1fR1VJRCJ9ID0gJHV1aWQ7CisgICAgJGd1aWRfaW5kZXggKz0gMTsKKworICAgIG15IEBzcmNzID0gc29ydChtYXAoIiRyZWxfZGlyXFwkXyIsIEB7JCRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJuYW1lfV9TT1VSQ0VTIn19KSk7CisgICAgbXkgQHNvdXJjZXM7CisgICAgZm9yZWFjaCAoQHNyY3MpIHsKKyAgICAgICAgJF8gPX4gcy9cLy9cXC9nOworICAgICAgICBwdXNoKEBzb3VyY2VzLCAkXyk7CisgICAgfQorICAgIG15ICRkZWZpbmVzID0gam9pbigiLCIsIHNvcnQoQHskJGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm5hbWV9X0RFRklORVMifX0pKTsKKyAgICBteSAkaW5jbHVkZXM9IGpvaW4oIjsiLCBzb3J0KG1hcCgiJnF1b3Q7JHJlbF9kaXJcXCRfJnF1b3Q7IiwgQHskJGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm5hbWV9X0lOQ0xVREVTIn19KSkpOworICAgIG15ICRjZmxhZ3MgID0gam9pbigiICIsIHNvcnQoQHskJGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm5hbWV9X0NGTEFHUyJ9fSkpOworICAgICRjZmxhZ3MgPX4gcy9cIi8mcXVvdDsvZzsKKworICAgIG15ICRjZmxhZ3NfZGVidWcgPSAkY2ZsYWdzOworICAgICRjZmxhZ3NfZGVidWcgPX4gcy8tTVQvLU1UZC87CisgICAgJGNmbGFnc19kZWJ1ZyA9fiBzLy1PLi8vOworCisgICAgbXkgJGNmbGFnc19yZWxlYXNlID0gJGNmbGFnczsKKyAgICAkY2ZsYWdzX3JlbGVhc2UgPX4gcy8tTVRkLy1NVC87CisKKyAgICBteSBAdG1wICA9IEB7JCRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJuYW1lfV9MRkxBR1MifX07CisgICAgbXkgQHRtcDIgPSAoKTsKKyAgICBmb3JlYWNoIChAdG1wKSB7CisgICAgICAgIGlmICgvXi1MVENHLykgeworICAgICAgICB9IGVsc2lmICgvXi1MLykgeworICAgICAgICAgICAgJF8gPX4gcy9eLUwvLUxJQlBBVEg6JHJlbF9kaXJcLy87CisgICAgICAgIH0KKyAgICAgICAgcHVzaChAdG1wMiwgJF8pOworICAgIH0KKyAgICBteSAkbGZsYWdzID0gam9pbigiICIsIHNvcnQoQHRtcCkpOworCisgICAgJGRlZmluZXMgPX4gcy8tRC8vZzsKKyAgICAkZGVmaW5lcyA9fiBzL1wiL1xcJnF1b3Q7L2c7CisgICAgJGRlZmluZXMgPX4gcy9cJy8vZzsKKyAgICAkaW5jbHVkZXMgPX4gcy8tSS8vZzsKKyAgICBta2RpciAiJHRhcmdldCIgfHwgZGllICJDb3VsZCBub3QgY3JlYXRlIHRoZSBkaXJlY3RvcnkgJHRhcmdldCBmb3IgbGliIHByb2plY3QhXG4iOworICAgIG9wZW4gRiwgIj4kdGFyZ2V0LyR0YXJnZXQudmNwcm9qIiB8fCBkaWUgIkNvdWxkIG5vdCBvcGVuICR0YXJnZXQvJHRhcmdldC5wcm8gZm9yIHdyaXRpbmchXG4iOworICAgIGJpbm1vZGUgRiwgIjpjcmxmIjsKKyAgICBwcmludCBGIDw8ICJFT00iOworPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZyA9ICJXaW5kb3dzLTEyNTIiPz4KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0CisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiCisJVmVyc2lvbj0iOSwwMCIKKwlOYW1lPSIkdGFyZ2V0IgorCVByb2plY3RHVUlEPSIkdXVpZCI+CisJPFBsYXRmb3Jtcz4KKwkJPFBsYXRmb3JtCisJCQlOYW1lPSJXaW4zMiIvPgorCTwvUGxhdGZvcm1zPgorCTxUb29sRmlsZXM+CisJPC9Ub29sRmlsZXM+CisJPENvbmZpZ3VyYXRpb25zPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiRyZWxfZGlyIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiCisJCQlDaGFyYWN0ZXJTZXQ9IjAiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlwkKFByb2plY3REaXIpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJQWRkaXRpb25hbE9wdGlvbnM9IiRjZmxhZ3NfZGVidWciCisJCQkJT3B0aW1pemF0aW9uPSIwIgorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiRpbmNsdWRlcyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzIsX0RFQlVHLCRkZWZpbmVzIgorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSJcJChJbnREaXIpXFxcJChUYXJnZXROYW1lKS5wZGIiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkcmVsX2RpciIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0IgorCQkJQ2hhcmFjdGVyU2V0PSIwIgorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJcJChQcm9qZWN0RGlyKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIkY2ZsYWdzX3JlbGVhc2UiCisJCQkJT3B0aW1pemF0aW9uPSIyIgorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgorCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0idHJ1ZSIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkaW5jbHVkZXMiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyLE5ERUJVRywkZGVmaW5lcyIKKwkJCQlSdW50aW1lTGlicmFyeT0iMCIKKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iXCQoSW50RGlyKVxcXCQoVGFyZ2V0TmFtZSkucGRiIgorCQkJCVdhcm5pbmdMZXZlbD0iMyIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIgorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCTwvQ29uZmlndXJhdGlvbnM+CisJPEZpbGVzPgorCQk8RmlsdGVyCisJCQlOYW1lPSJTb3VyY2UgRmlsZXMiCisJCQlGaWx0ZXI9ImNwcDtjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214IgorCQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn0iPgorRU9NCisgICAgZm9yZWFjaChAc291cmNlcykgeworICAgICAgICBwcmludCBGIDw8ICJFT00iOworCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9IiRfIi8+CitFT00KKyAgICB9CisgICAgcHJpbnQgRiA8PCAiRU9NIjsKKwkJPC9GaWx0ZXI+CisJPC9GaWxlcz4KKwk8R2xvYmFscz4KKwk8L0dsb2JhbHM+Cis8L1Zpc3VhbFN0dWRpb1Byb2plY3Q+CitFT00KKyAgICBjbG9zZSBGOworfQorCitzdWIgY3JlYXRlQXBwUHJvamVjdCB7CisgICAgbXkgKCRhcHBuYW1lLCAkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCAkYnVpbGRfc3RydWN0dXJlKSA9IEBfOworICAgIHByaW50ICJHZW5lcmF0ZSAkYXBwbmFtZSB2Y3Byb2ogYXBwIHByb2plY3RcbiI7CisgICAgJHJlbF9kaXIgPSAiLi5cXCRyZWxfZGlyIjsKKyAgICAkcmVsX2RpciA9fiBzL1wvL1xcL2c7CisKKyAgICBteSAkdGFyZ2V0ID0gJGFwcG5hbWU7CisgICAgJHRhcmdldCA9fiBzL1wvL18vZzsKKyAgICAkdGFyZ2V0ID1+IHMvXC5leGUvLzsKKworICAgIG15ICR1dWlkID0gJEdVSURTWyRndWlkX2luZGV4XTsKKyAgICAkJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke3RhcmdldH1fR1VJRCJ9ID0gJHV1aWQ7CisgICAgJGd1aWRfaW5kZXggKz0gMTsKKworICAgIG15IEBzcmNzID0gc29ydChtYXAoIiRyZWxfZGlyXFwkXyIsIEB7JCRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBuYW1lfV9TT1VSQ0VTIn19KSk7CisgICAgbXkgQHNvdXJjZXM7CisgICAgZm9yZWFjaCAoQHNyY3MpIHsKKyAgICAgICAgJF8gPX4gcy9cLy9cXC9nOworICAgICAgICBwdXNoKEBzb3VyY2VzLCAkXyk7CisgICAgfQorICAgIG15ICRkZWZpbmVzID0gam9pbigiLCIsIHNvcnQoQHskJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0RFRklORVMifX0pKTsKKyAgICBteSAkaW5jbHVkZXM9IGpvaW4oIjsiLCBzb3J0KG1hcCgiJnF1b3Q7JHJlbF9kaXJcXCRfJnF1b3Q7IiwgQHskJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0lOQ0xVREVTIn19KSkpOworICAgIG15ICRjZmxhZ3MgID0gam9pbigiICIsIHNvcnQoQHskJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0NGTEFHUyJ9fSkpOworICAgICRjZmxhZ3MgPX4gcy9cIi8mcXVvdDsvZzsKKworICAgIG15ICRjZmxhZ3NfZGVidWcgPSAkY2ZsYWdzOworICAgICRjZmxhZ3NfZGVidWcgPX4gcy8tTVQvLU1UZC87CisgICAgJGNmbGFnc19kZWJ1ZyA9fiBzLy1PLi8vOworCisgICAgbXkgJGNmbGFnc19yZWxlYXNlID0gJGNmbGFnczsKKyAgICAkY2ZsYWdzX3JlbGVhc2UgPX4gcy8tTVRkLy1NVC87CisKKyAgICBteSAkbGliczsKKyAgICBmb3JlYWNoIChzb3J0KEB7JCRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBuYW1lfV9MSUJTIn19KSkgeworICAgICAgICAkXyA9fiBzL1wvL18vZzsKKyAgICAgICAgJGxpYnMgLj0gIiAkXyI7CisgICAgfQorICAgIG15IEB0bXAgID0gQHskJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0xGTEFHUyJ9fTsKKyAgICBteSBAdG1wMiA9ICgpOworICAgIGZvcmVhY2ggKEB0bXApIHsKKyAgICAgICAgaWYgKC9eLUxUQ0cvKSB7CisgICAgICAgIH0gZWxzaWYgKC9eLUwvKSB7CisgICAgICAgICAgICAkXyA9fiBzL14tTC8tTElCUEFUSDokcmVsX2RpclwvLzsKKyAgICAgICAgfQorICAgICAgICBwdXNoKEB0bXAyLCAkXyk7CisgICAgfQorICAgIG15ICRsZmxhZ3MgPSBqb2luKCIgIiwgc29ydChAdG1wKSkgLiAiIC1MSUJQQVRIOiRyZWxfZGlyIjsKKworICAgICRkZWZpbmVzID1+IHMvLUQvL2c7CisgICAgJGRlZmluZXMgPX4gcy9cIi9cXCZxdW90Oy9nOworICAgICRkZWZpbmVzID1+IHMvXCcvL2c7CisgICAgJGRlZmluZXMgPX4gcy9cXFxcL1xcL2c7CisgICAgJGluY2x1ZGVzID1+IHMvLUkvL2c7CisgICAgbWtkaXIgIiR0YXJnZXQiIHx8IGRpZSAiQ291bGQgbm90IGNyZWF0ZSB0aGUgZGlyZWN0b3J5ICR0YXJnZXQgZm9yIGxpYiBwcm9qZWN0IVxuIjsKKyAgICBvcGVuIEYsICI+JHRhcmdldC8kdGFyZ2V0LnZjcHJvaiIgfHwgZGllICJDb3VsZCBub3Qgb3BlbiAkdGFyZ2V0LyR0YXJnZXQucHJvIGZvciB3cml0aW5nIVxuIjsKKyAgICBiaW5tb2RlIEYsICI6Y3JsZiI7CisgICAgcHJpbnQgRiA8PCAiRU9NIjsKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2RpbmcgPSAiV2luZG93cy0xMjUyIj8+Cis8VmlzdWFsU3R1ZGlvUHJvamVjdAorCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIgorCVZlcnNpb249IjksMDAiCisJTmFtZT0iJHRhcmdldCIKKwlQcm9qZWN0R1VJRD0iJHV1aWQiPgorCTxQbGF0Zm9ybXM+CisJCTxQbGF0Zm9ybQorCQkJTmFtZT0iV2luMzIiLz4KKwk8L1BsYXRmb3Jtcz4KKwk8VG9vbEZpbGVzPgorCTwvVG9vbEZpbGVzPgorCTxDb25maWd1cmF0aW9ucz4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkcmVsX2RpciIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIgorCQkJQ2hhcmFjdGVyU2V0PSIwIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJcJChQcm9qZWN0RGlyKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIkY2ZsYWdzX2RlYnVnIgorCQkJCU9wdGltaXphdGlvbj0iMCIKKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkaW5jbHVkZXMiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyLF9ERUJVRywkZGVmaW5lcyIKKwkJCQlNaW5pbWFsUmVidWlsZD0idHJ1ZSIKKwkJCQlSdW50aW1lTGlicmFyeT0iMSIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iXCQoSW50RGlyKVxcXCQoVGFyZ2V0TmFtZSkucGRiIgorCQkJCVdhcm5pbmdMZXZlbD0iMyIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiRsaWJzIgorCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIkbGZsYWdzIgorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMiIKKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCisJCQkJU3ViU3lzdGVtPSIxIgorCQkJCVRhcmdldE1hY2hpbmU9IjEiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiRyZWxfZGlyIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiCisJCQlDaGFyYWN0ZXJTZXQ9IjAiCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlwkKFByb2plY3REaXIpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJQWRkaXRpb25hbE9wdGlvbnM9IiRjZmxhZ3NfcmVsZWFzZSIKKwkJCQlPcHRpbWl6YXRpb249IjIiCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCisJCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJ0cnVlIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiRpbmNsdWRlcyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzIsTkRFQlVHLCRkZWZpbmVzIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIgorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSJcJChJbnREaXIpXFxcJChUYXJnZXROYW1lKS5wZGIiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJGxpYnMiCisJCQkJQWRkaXRpb25hbE9wdGlvbnM9IiRsZmxhZ3MiCisJCQkJTGlua0luY3JlbWVudGFsPSIxIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJCQlTdWJTeXN0ZW09IjEiCisJCQkJVGFyZ2V0TWFjaGluZT0iMSIKKwkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiCisJCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMiIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCTwvQ29uZmlndXJhdGlvbnM+CisJPEZpbGVzPgorCQk8RmlsdGVyCisJCQlOYW1lPSJTb3VyY2UgRmlsZXMiCisJCQlGaWx0ZXI9ImNwcDtjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214IgorCQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn0iPgorRU9NCisgICAgZm9yZWFjaChAc291cmNlcykgeworICAgICAgICBwcmludCBGIDw8ICJFT00iOworCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9IiRfIi8+CitFT00KKyAgICB9CisgICAgcHJpbnQgRiA8PCAiRU9NIjsKKwkJPC9GaWx0ZXI+CisJPC9GaWxlcz4KKwk8R2xvYmFscz4KKwk8L0dsb2JhbHM+Cis8L1Zpc3VhbFN0dWRpb1Byb2plY3Q+CitFT00KKyAgICBjbG9zZSBGOworfQorCitzdWIgY3JlYXRlR2x1ZVByb2plY3QgeworICAgIG15ICgkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCAlYnVpbGRfc3RydWN0dXJlKSA9IEBfOworICAgIHByaW50ICJHZW5lcmF0ZSBzb2x1dGlvbnMgZmlsZVxuIjsKKyAgICAkcmVsX2RpciA9ICIuLlxcJHJlbF9kaXIiOworICAgICRyZWxfZGlyID1+IHMvXC8vXFwvZzsKKyAgICBteSAkU0xOX0hFQUQgPSAiTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gU29sdXRpb24gRmlsZSwgRm9ybWF0IFZlcnNpb24gMTAuMDBcbiMgVmlzdWFsIFN0dWRpbyAyMDA4XG4iOworICAgIG15ICRTTE5fUFJFICA9ICJQcm9qZWN0KFwiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn1cIikgPSAiOworICAgIG15ICRTTE5fUE9TVCA9ICJcbkVuZFByb2plY3RcbiI7CisKKyAgICBteSBAbGlicyA9IEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCUyJ9fTsKKyAgICBteSBAdG1wOworICAgIGZvcmVhY2ggKEBsaWJzKSB7CisgICAgICAgICRfID1+IHMvXC8vXy9nOworICAgICAgICAkXyA9fiBzL1wuYS8vOworICAgICAgICBwdXNoKEB0bXAsICRfKTsKKyAgICB9CisgICAgQGxpYnMgPSBAdG1wOworCisgICAgbXkgQGFwcHMgPSBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFMifX07CisgICAgQHRtcCA9ICgpOworICAgIGZvcmVhY2ggKEBhcHBzKSB7CisgICAgICAgICRfID1+IHMvXC8vXy9nOworICAgICAgICAkXyA9fiBzL1wuZXhlLy87CisgICAgICAgIHB1c2goQHRtcCwgJF8pOworICAgIH0KKyAgICBAYXBwcyA9IEB0bXA7CisKKyAgICBvcGVuIEYsICI+Z2l0LnNsbiIgfHwgZGllICJDb3VsZCBub3Qgb3BlbiBnaXQuc2xuIGZvciB3cml0aW5nIVxuIjsKKyAgICBiaW5tb2RlIEYsICI6Y3JsZiI7CisgICAgcHJpbnQgRiAiJFNMTl9IRUFEIjsKKyAgICBmb3JlYWNoIChAbGlicykgeworICAgICAgICBteSAkbGlibmFtZSA9ICRfOworICAgICAgICBteSAkdXVpZCA9ICRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJuYW1lfV9HVUlEIn07CisgICAgICAgIHByaW50IEYgIiRTTE5fUFJFIjsKKyAgICAgICAgcHJpbnQgRiAiXCIke2xpYm5hbWV9XCIsIFwiJHtsaWJuYW1lfVxcJHtsaWJuYW1lfS52Y3Byb2pcIiwgXCIke3V1aWR9XCIiOworICAgICAgICBwcmludCBGICIkU0xOX1BPU1QiOworICAgIH0KKyAgICBteSAkdXVpZF9saWJnaXQgPSAkYnVpbGRfc3RydWN0dXJleyJMSUJTX2xpYmdpdF9HVUlEIn07CisgICAgbXkgJHV1aWRfeGRpZmZfbGliID0gJGJ1aWxkX3N0cnVjdHVyZXsiTElCU194ZGlmZl9saWJfR1VJRCJ9OworICAgIGZvcmVhY2ggKEBhcHBzKSB7CisgICAgICAgIG15ICRhcHBuYW1lID0gJF87CisgICAgICAgIG15ICR1dWlkID0gJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0dVSUQifTsKKyAgICAgICAgcHJpbnQgRiAiJFNMTl9QUkUiOworICAgICAgICBwcmludCBGICJcIiR7YXBwbmFtZX1cIiwgXCIke2FwcG5hbWV9XFwke2FwcG5hbWV9LnZjcHJvalwiLCBcIiR7dXVpZH1cIlxuIjsKKyAgICAgICAgcHJpbnQgRiAiCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3RcbiI7CisgICAgICAgIHByaW50IEYgIgkJJHt1dWlkX2xpYmdpdH0gPSAke3V1aWRfbGliZ2l0fVxuIjsKKyAgICAgICAgcHJpbnQgRiAiCQkke3V1aWRfeGRpZmZfbGlifSA9ICR7dXVpZF94ZGlmZl9saWJ9XG4iOworICAgICAgICBwcmludCBGICIJRW5kUHJvamVjdFNlY3Rpb24iOworICAgICAgICBwcmludCBGICIkU0xOX1BPU1QiOworICAgIH0KKworICAgIHByaW50IEYgPDwgIkVPTSI7CitHbG9iYWwKKwlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uQ29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwcmVTb2x1dGlvbgorCQlEZWJ1Z3xXaW4zMiA9IERlYnVnfFdpbjMyCisJCVJlbGVhc2V8V2luMzIgPSBSZWxlYXNlfFdpbjMyCisJRW5kR2xvYmFsU2VjdGlvbgorRU9NCisgICAgcHJpbnQgRiA8PCAiRU9NIjsKKwlHbG9iYWxTZWN0aW9uKFByb2plY3RDb25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHBvc3RTb2x1dGlvbgorRU9NCisgICAgZm9yZWFjaCAoQGxpYnMpIHsKKyAgICAgICAgbXkgJGxpYm5hbWUgPSAkXzsKKyAgICAgICAgbXkgJHV1aWQgPSAkYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlibmFtZX1fR1VJRCJ9OworICAgICAgICBwcmludCBGICJcdFx0JHt1dWlkfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMlxuIjsKKyAgICAgICAgcHJpbnQgRiAiXHRcdCR7dXVpZH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyXG4iOworICAgICAgICBwcmludCBGICJcdFx0JHt1dWlkfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzJcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzJcbiI7CisgICAgfQorICAgIGZvcmVhY2ggKEBhcHBzKSB7CisgICAgICAgIG15ICRhcHBuYW1lID0gJF87CisgICAgICAgIG15ICR1dWlkID0gJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0dVSUQifTsKKyAgICAgICAgcHJpbnQgRiAiXHRcdCR7dXVpZH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzJcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMlxuIjsKKyAgICAgICAgcHJpbnQgRiAiXHRcdCR7dXVpZH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyXG4iOworICAgICAgICBwcmludCBGICJcdFx0JHt1dWlkfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyXG4iOworICAgIH0KKworICAgIHByaW50IEYgPDwgIkVPTSI7CisJRW5kR2xvYmFsU2VjdGlvbgorRW5kR2xvYmFsCitFT00KKyAgICBjbG9zZSBGOworfQorCisxOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9idWlsZHN5c3RlbXMvZW5naW5lLnBsIGIvY29udHJpYi9idWlsZHN5c3RlbXMvZW5naW5lLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZGE3ODcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2J1aWxkc3lzdGVtcy9lbmdpbmUucGwKQEAgLTAsMCArMSwzNTkgQEAKKyMhL3Vzci9iaW4vcGVybCAtdworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEbyBub3QgY2FsbCB0aGlzIHNjcmlwdCBkaXJlY3RseSEKKyMKKyMgVGhlIGdlbmVyYXRlIHNjcmlwdCBlbnN1cmVzIHRoYXQgQElOQyBpcyBjb3JyZWN0IGJlZm9yZSB0aGUgZW5naW5lCisjIGlzIGV4ZWN1dGVkLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDkgTWFyaXVzIFN0b3JtLU9sc2VuIDxtc3Rvcm1vQGdtYWlsLmNvbT4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3VzZSBzdHJpY3Q7Cit1c2UgRmlsZTo6QmFzZW5hbWU7Cit1c2UgRmlsZTo6U3BlYzsKK3VzZSBDd2Q7Cit1c2UgR2VuZXJhdG9yczsKKworbXkgKCVidWlsZF9zdHJ1Y3R1cmUsICVjb21waWxlX29wdGlvbnMsIEBtYWtlZHJ5KTsKK215ICRvdXRfZGlyID0gZ2V0Y3dkKCk7CitteSAkZ2l0X2RpciA9ICRvdXRfZGlyOworJGdpdF9kaXIgPX4gcz1cXD0vPWc7CiskZ2l0X2RpciA9IGRpcm5hbWUoJGdpdF9kaXIpIHdoaWxlICghLWUgIiRnaXRfZGlyL2dpdC5jIiAmJiAiJGdpdF9kaXIiIG5lICIiKTsKK2RpZSAiQ291bGRuJ3QgZmluZCBHaXQgcmVwbyIgaWYgKCIkZ2l0X2RpciIgZXEgIiIpOworCitteSBAZ2VucyA9IEdlbmVyYXRvcnM6OmF2YWlsYWJsZSgpOworbXkgJGdlbiA9ICJWY3Byb2oiOworCitzdWIgc2hvd1VzYWdlCit7CisgICAgbXkgJGdlbmxpc3QgPSBqb2luKCcsICcsIEBnZW5zKTsKKyAgICBwcmludCA8PCAiRU9NIjsKK2dlbmVyYXRlIHVzYWdlOgorICAtZyA8R0VORVJBVE9SPiAgLS1nZW4gPEdFTkVSQVRPUj4gU3BlY2lmeSB0aGUgYnVpbGRzeXN0ZW0gZ2VuZXJhdG9yICAgIChkZWZhdWx0OiAkZ2VuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmxlOiAkZ2VubGlzdAorICAtbyA8UEFUSD4gICAgICAgLS1vdXQgPFBBVEg+ICAgICAgU3BlY2lmeSBvdXRwdXQgZGlyZWN0b3J5IGdlbmVyYXRpb24gIChkZWZhdWx0OiAuKQorICAtaSA8RklMRT4gICAgICAgLS1pbiA8RklMRT4gICAgICAgU3BlY2lmeSBpbnB1dCBmaWxlLCBpbnN0ZWFkIG9mIHJ1bm5pbmcgR05VIE1ha2UKKyAgLWgsLT8gICAgICAgICAgIC0taGVscCAgICAgICAgICAgIFRoaXMgaGVscAorRU9NCisgICAgZXhpdCAwOworfQorCisjIFBhcnNlIGNvbW1hbmQtbGluZSBvcHRpb25zCit3aGlsZSAoQEFSR1YpIHsKKyAgICBteSAkYXJnID0gc2hpZnQgQEFSR1Y7CisgICAgaWYgKCIkYXJnIiBlcSAiLWgiIHx8ICIkYXJnIiBlcSAiLS1oZWxwIiB8fCAiJGFyZyIgZXEgIi0/IikgeworCXNob3dVc2FnZSgpOworCWV4aXQoMCk7CisgICAgfSBlbHNpZigiJGFyZyIgZXEgIi0tb3V0IiB8fCAiJGFyZyIgZXEgIi1vIikgeworCSRvdXRfZGlyID0gc2hpZnQgQEFSR1Y7CisgICAgfSBlbHNpZigiJGFyZyIgZXEgIi0tZ2VuIiB8fCAiJGFyZyIgZXEgIi1nIikgeworCSRnZW4gPSBzaGlmdCBAQVJHVjsKKyAgICB9IGVsc2lmKCIkYXJnIiBlcSAiLS1pbiIgfHwgIiRhcmciIGVxICItaSIpIHsKKwlteSAkaW5maWxlID0gc2hpZnQgQEFSR1Y7CisgICAgICAgIG9wZW4oRiwgIjwkaW5maWxlIikgfHwgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJGluZmlsZSI7CisgICAgICAgIEBtYWtlZHJ5ID0gPEY+OworICAgICAgICBjbG9zZShGKTsKKyAgICB9Cit9CisKKyMgTk9UIHVzaW5nIEZpbGU6OlNwZWMtPnJlbDJhYnMoJHBhdGgsICRiYXNlKSBoZXJlLCBhcworIyBpdCBmYWlscyBiYWRseSBmb3IgbWUgaW4gdGhlIG1zeXNnaXQgZW52aXJvbm1lbnQKKyRnaXRfZGlyID0gRmlsZTo6U3BlYy0+cmVsMmFicygkZ2l0X2Rpcik7Ciskb3V0X2RpciA9IEZpbGU6OlNwZWMtPnJlbDJhYnMoJG91dF9kaXIpOworbXkgJHJlbF9kaXIgPSBtYWtlT3V0UmVsMkdpdCgkZ2l0X2RpciwgJG91dF9kaXIpOworCisjIFByaW50IHNvbWUgaW5mb3JtYXRpb24gc28gdGhlIHVzZXIgZmVlbHMgaW5mb3JtZWQKK3ByaW50IDw8ICJFT00iOworLS0tLS0KK0dlbmVyYXRvcjogJGdlbgorR2l0IGRpcjogICAkZ2l0X2RpcgorT3V0IGRpcjogICAkb3V0X2RpcgorLS0tLS0KK1J1bm5pbmcgR05VIE1ha2UgdG8gZmlndXJlIG91dCBidWlsZCBzdHJ1Y3R1cmUuLi4KK0VPTQorCisjIFBpcGUgYSBtYWtlIC0tZHJ5LXJ1biBpbnRvIGEgdmFyaWFibGUsIGlmIG5vdCBhbHJlYWR5IGxvYWRlZCBmcm9tIGZpbGUKK0BtYWtlZHJ5ID0gYGNkICRnaXRfZGlyICYmIG1ha2UgLW4gTVNWQz0xIFY9MSAyPi9kZXYvbnVsbGAgaWYgIUBtYWtlZHJ5OworCisjIFBhcnNlIHRoZSBtYWtlIG91dHB1dCBpbnRvIHVzYWJsZSBpbmZvCitwYXJzZU1ha2VPdXRwdXQoKTsKKworIyBGaW5hbGx5LCBhc2sgdGhlIGdlbmVyYXRvciB0byBzdGFydCBnZW5lcmF0aW5nLi4KK0dlbmVyYXRvcnM6OmdlbmVyYXRlKCRnZW4sICRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICVidWlsZF9zdHJ1Y3R1cmUpOworCisjIG1haW4gZmxvdyBlbmRzIGhlcmUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKyMgMSkgcGF0aDogL2Zvby9iYXIvYmF6ICAgICAgICAyKSBwYXRoOiAvZm9vL2Jhci9iYXogICAzKSBwYXRoOiAvZm9vL2Jhci9iYXoKKyMgICAgYmFzZTogL2Zvby9iYXIvYmF6L3RlbXAgICAgICBiYXNlOiAvZm9vL2JhciAgICAgICAgICBiYXNlOiAvdG1wCisjICAgIHJlbDogIC4uICAgICAgICAgICAgICAgICAgICAgcmVsOiAgYmF6ICAgICAgICAgICAgICAgcmVsOiAgLi4vZm9vL2Jhci9iYXoKK3N1YiBtYWtlT3V0UmVsMkdpdAoreworICAgIG15ICgkcGF0aCwgJGJhc2UpID0gQF87CisgICAgbXkgJHJlbDsKKyAgICBpZiAoIiRwYXRoIiBlcSAiJGJhc2UiKSB7CisgICAgICAgIHJldHVybiAiLiI7CisgICAgfSBlbHNpZiAoJGJhc2UgPX4gL14kcGF0aC8pIHsKKyAgICAgICAgIyBjYXNlIDEKKyAgICAgICAgbXkgJHRtcCA9ICRiYXNlOworICAgICAgICAkdG1wID1+IHMvXiRwYXRoLy87CisgICAgICAgIGZvcmVhY2ggKHNwbGl0KCcvJywgJHRtcCkpIHsKKyAgICAgICAgICAgICRyZWwgLj0gIi4uLyIgaWYgKCIkXyIgbmUgIiIpOworICAgICAgICB9CisgICAgfSBlbHNpZiAoJHBhdGggPX4gL14kYmFzZS8pIHsKKyAgICAgICAgIyBjYXNlIDIKKyAgICAgICAgJHJlbCA9ICRwYXRoOworICAgICAgICAkcmVsID1+IHMvXiRiYXNlLy87CisgICAgICAgICRyZWwgPSAiLi8kcmVsIjsKKyAgICB9IGVsc2UgeworICAgICAgICBteSAkdG1wID0gJGJhc2U7CisgICAgICAgIGZvcmVhY2ggKHNwbGl0KCcvJywgJHRtcCkpIHsKKyAgICAgICAgICAgICRyZWwgLj0gIi4uLyIgaWYgKCIkXyIgbmUgIiIpOworICAgICAgICB9CisgICAgICAgICRyZWwgLj0gJHBhdGg7CisgICAgfQorICAgICRyZWwgPX4gcy9cL1wvL1wvL2c7ICMgc2ltcGxpZnkKKyAgICAkcmVsID1+IHMvXC8kLy87ICAgICAjIGRvbid0IGVuZCB3aXRoIC8KKyAgICByZXR1cm4gJHJlbDsKK30KKworc3ViIHBhcnNlTWFrZU91dHB1dAoreworICAgIHByaW50ICJQYXJzaW5nIEdOVSBNYWtlIG91dHB1dCB0byBmaWd1cmUgb3V0IGJ1aWxkIHN0cnVjdHVyZS4uLlxuIjsKKyAgICBteSAkbGluZSA9IDA7CisgICAgd2hpbGUgKG15ICR0ZXh0ID0gc2hpZnQgQG1ha2VkcnkpIHsKKyAgICAgICAgbXkgJGF0ZV9uZXh0OworICAgICAgICBkbyB7CisgICAgICAgICAgICAkYXRlX25leHQgPSAwOworICAgICAgICAgICAgJGxpbmUrKzsKKyAgICAgICAgICAgIGNob21wICR0ZXh0OworICAgICAgICAgICAgY2hvcCAkdGV4dCBpZiAoJHRleHQgPX4gL1xyJC8pOworICAgICAgICAgICAgaWYgKCR0ZXh0ID1+IC9cXCQvKSB7CisgICAgICAgICAgICAgICAgJHRleHQgPX4gcy9cXCQvLzsKKyAgICAgICAgICAgICAgICAkdGV4dCAuPSBzaGlmdCBAbWFrZWRyeTsKKyAgICAgICAgICAgICAgICAkYXRlX25leHQgPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlKCRhdGVfbmV4dCk7CisKKyAgICAgICAgaWYgKCR0ZXh0ID1+IC9edGVzdCAvKSB7CisgICAgICAgICAgICAjIG9wdGlvbnMgdG8gdGVzdCAoZWcgLW8pIG1heSBiZSBtaXN0YWtlbiBmb3IgbGlua2VyIG9wdGlvbnMKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKworICAgICAgICBpZigkdGV4dCA9fiAvIC1jIC8pIHsKKyAgICAgICAgICAgICMgY29tcGlsYXRpb24KKyAgICAgICAgICAgIGhhbmRsZUNvbXBpbGVMaW5lKCR0ZXh0LCAkbGluZSk7CisKKyAgICAgICAgfSBlbHNpZiAoJHRleHQgPX4gLyAtbyAvKSB7CisgICAgICAgICAgICAjIGxpbmtpbmcgZXhlY3V0YWJsZQorICAgICAgICAgICAgaGFuZGxlTGlua0xpbmUoJHRleHQsICRsaW5lKTsKKworICAgICAgICB9IGVsc2lmICgkdGV4dCA9fiAvXC5vIC8gJiYgJHRleHQgPX4gL1wuYSAvKSB7CisgICAgICAgICAgICAjIGxpYmlmeWluZworICAgICAgICAgICAgaGFuZGxlTGliTGluZSgkdGV4dCwgJGxpbmUpOworIworIyAgICAgICAgfSBlbHNpZiAoJHRleHQgPX4gL15jcCAvKSB7CisjICAgICAgICAgICAgIyBjb3B5IGZpbGUgYXJvdW5kCisjCisjICAgICAgICB9IGVsc2lmICgkdGV4dCA9fiAvXnJtIC1mIC8pIHsKKyMgICAgICAgICAgICAjIHNoZWxsIGNvbW1hbmQKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9ebWFrZVsgXFtdLykgeworIyAgICAgICAgICAgICMgbWFrZSBvdXRwdXQKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9eZWNobyAvKSB7CisjICAgICAgICAgICAgIyBlY2hvIHRvIGZpbGUKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9eaWYgLykgeworIyAgICAgICAgICAgICMgc2hlbGwgY29uZGl0aW9uYWwKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9edGNsc2ggLykgeworIyAgICAgICAgICAgICMgdHJhbnNsYXRpb24gc3R1ZmYKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9edW1hc2sgLykgeworIyAgICAgICAgICAgICMgaGFuZGxpbmcgYm9pbGVycGxhdGVzCisjCisjICAgICAgICB9IGVsc2lmICgkdGV4dCA9fiAvXCRcKFw6XCkvKSB7CisjICAgICAgICAgICAgIyBpZ25vcmUKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9eRkxBR1M9LykgeworIyAgICAgICAgICAgICMgZmxhZ3MgY2hlY2sgZm9yIGRlcGVuZGVuY2llcworIworIyAgICAgICAgfSBlbHNpZiAoJHRleHQgPX4gL14nXC91c3JcL2JpblwvcGVybCcgLU1FcnJvciAtZS8pIHsKKyMgICAgICAgICAgICAjIHBlcmwgY29tbWFuZHMgZm9yIGNvcHlpbmcgZmlsZXMKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9nZW5lcmF0ZS1jbWRsaXN0XC5zaC8pIHsKKyMgICAgICAgICAgICAjIGNvbW1hbmQgZm9yIGdlbmVyYXRpbmcgbGlzdCBvZiBjb21tYW5kcworIworIyAgICAgICAgfSBlbHNpZiAoJHRleHQgPX4gL25ldyBsb2NhdGlvbnMgb3IgVGNsLykgeworIyAgICAgICAgICAgICMgY29tbWFuZCBmb3IgZGV0ZWN0aW5nIFRjbC9UayBjaGFuZ2VzCisjCisjICAgICAgICB9IGVsc2lmICgkdGV4dCA9fiAvbWtkaXIgLXAvKSB7CisjICAgICAgICAgICAgIyBjb21tYW5kIGNyZWF0aW5nIHBhdGgKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC86IG5vIGN1c3RvbSB0ZW1wbGF0ZXMgeWV0LykgeworIyAgICAgICAgICAgICMgd2hhdGV2ZXIKKyMKKyMgICAgICAgIH0gZWxzZSB7CisjICAgICAgICAgICAgcHJpbnQgIlVuaGFuZGxlZCAobGluZTogJGxpbmUpOiAkdGV4dFxuIjsKKyAgICAgICAgfQorICAgIH0KKworIyAgICB1c2UgRGF0YTo6RHVtcGVyOworIyAgICBwcmludCAiUGFyc2VkIGJ1aWxkIHN0cnVjdHVyZTpcbiI7CisjICAgIHByaW50IER1bXBlciglYnVpbGRfc3RydWN0dXJlKTsKK30KKworIyB2YXJpYWJsZXMgZm9yIHRoZSBjb21waWxhdGlvbiBwYXJ0IG9mIGVhY2ggc3RlcAorbXkgKEBkZWZpbmVzLCBAaW5jcGF0aHMsIEBjZmxhZ3MsIEBzb3VyY2VzKTsKKworc3ViIGNsZWFyQ29tcGlsZVN0ZXAKK3sKKyAgICBAZGVmaW5lcyA9ICgpOworICAgIEBpbmNwYXRocyA9ICgpOworICAgIEBjZmxhZ3MgPSAoKTsKKyAgICBAc291cmNlcyA9ICgpOworfQorCitzdWIgcmVtb3ZlRHVwbGljYXRlcworeworICAgIG15ICglZHVwSGFzaCwgJGVudHJ5KTsKKyAgICAlZHVwSGFzaCA9IG1hcCB7ICRfLCAxIH0gQGRlZmluZXM7CisgICAgQGRlZmluZXMgPSBrZXlzICVkdXBIYXNoOworCisgICAgJWR1cEhhc2ggPSBtYXAgeyAkXywgMSB9IEBpbmNwYXRoczsKKyAgICBAaW5jcGF0aHMgPSBrZXlzICVkdXBIYXNoOworCisgICAgJWR1cEhhc2ggPSBtYXAgeyAkXywgMSB9IEBjZmxhZ3M7CisgICAgQGNmbGFncyA9IGtleXMgJWR1cEhhc2g7Cit9CisKK3N1YiBoYW5kbGVDb21waWxlTGluZQoreworICAgIG15ICgkbGluZSwgJGxpbmVubykgPSBAXzsKKyAgICBteSBAcGFydHMgPSBzcGxpdCgnICcsICRsaW5lKTsKKyAgICBteSAkc291cmNlZmlsZTsKKyAgICBzaGlmdChAcGFydHMpOyAjIGlnbm9yZSBjbWQKKyAgICB3aGlsZSAobXkgJHBhcnQgPSBzaGlmdCBAcGFydHMpIHsKKyAgICAgICAgaWYgKCIkcGFydCIgZXEgIi1vIikgeworICAgICAgICAgICAgIyBpZ25vcmUgb2JqZWN0IGZpbGUKKyAgICAgICAgICAgIHNoaWZ0IEBwYXJ0czsKKyAgICAgICAgfSBlbHNpZiAoIiRwYXJ0IiBlcSAiLWMiKSB7CisgICAgICAgICAgICAjIGlnbm9yZSBjb21waWxlIGZsYWcKKyAgICAgICAgfSBlbHNpZiAoIiRwYXJ0IiBlcSAiLWMiKSB7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9eLj8tSS8pIHsKKyAgICAgICAgICAgIHB1c2goQGluY3BhdGhzLCAkcGFydCk7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9eLj8tRC8pIHsKKyAgICAgICAgICAgIHB1c2goQGRlZmluZXMsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL14tLykgeworICAgICAgICAgICAgcHVzaChAY2ZsYWdzLCAkcGFydCk7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9cLihjfGNjfGNwcCkkLykgeworICAgICAgICAgICAgJHNvdXJjZWZpbGUgPSAkcGFydDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRpZSAiVW5oYW5kbGVkIGNvbXBpbGVyIG9wdGlvbiBAIGxpbmUgJGxpbmVubzogJHBhcnQiOworICAgICAgICB9CisgICAgfQorICAgIEB7JGNvbXBpbGVfb3B0aW9uc3siJHtzb3VyY2VmaWxlfV9DRkxBR1MifX0gPSBAY2ZsYWdzOworICAgIEB7JGNvbXBpbGVfb3B0aW9uc3siJHtzb3VyY2VmaWxlfV9ERUZJTkVTIn19ID0gQGRlZmluZXM7CisgICAgQHskY29tcGlsZV9vcHRpb25zeyIke3NvdXJjZWZpbGV9X0lOQ1BBVEhTIn19ID0gQGluY3BhdGhzOworICAgIGNsZWFyQ29tcGlsZVN0ZXAoKTsKK30KKworc3ViIGhhbmRsZUxpYkxpbmUKK3sKKyAgICBteSAoJGxpbmUsICRsaW5lbm8pID0gQF87CisgICAgbXkgKEBvYmpmaWxlcywgQGxmbGFncywgJGxpYm91dCwgJHBhcnQpOworICAgICMga2lsbCBjbWQgYW5kIHJtICdwcmVmaXgnCisgICAgJGxpbmUgPX4gcy9ecm0gLWYgLiogJiYgLiogcmNzIC8vOworICAgIG15IEBwYXJ0cyA9IHNwbGl0KCcgJywgJGxpbmUpOworICAgIHdoaWxlICgkcGFydCA9IHNoaWZ0IEBwYXJ0cykgeworICAgICAgICBpZiAoJHBhcnQgPX4gL14tLykgeworICAgICAgICAgICAgcHVzaChAbGZsYWdzLCAkcGFydCk7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9cLihvfG9iaikkLykgeworICAgICAgICAgICAgcHVzaChAb2JqZmlsZXMsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL1wuKGF8bGliKSQvKSB7CisgICAgICAgICAgICAkbGlib3V0ID0gJHBhcnQ7CisgICAgICAgICAgICAkbGlib3V0ID1+IHMvXC5hJC8vOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGllICJVbmhhbmRsZWQgbGliIG9wdGlvbiBAIGxpbmUgJGxpbmVubzogJHBhcnQiOworICAgICAgICB9CisgICAgfQorIyAgICBwcmludCAiTGliT3V0OiAnJGxpYm91dCdcbkxGbGFnczogQGxmbGFnc1xuT2ZpbGVzOiBAb2JqZmlsZXNcbiI7CisjICAgIGV4aXQoMSk7CisgICAgZm9yZWFjaCAoQG9iamZpbGVzKSB7CisgICAgICAgIG15ICRzb3VyY2VmaWxlID0gJF87CisgICAgICAgICRzb3VyY2VmaWxlID1+IHMvXC5vLy5jLzsKKyAgICAgICAgcHVzaChAc291cmNlcywgJHNvdXJjZWZpbGUpOworICAgICAgICBwdXNoKEBjZmxhZ3MsIEB7JGNvbXBpbGVfb3B0aW9uc3siJHtzb3VyY2VmaWxlfV9DRkxBR1MifX0pOworICAgICAgICBwdXNoKEBkZWZpbmVzLCBAeyRjb21waWxlX29wdGlvbnN7IiR7c291cmNlZmlsZX1fREVGSU5FUyJ9fSk7CisgICAgICAgIHB1c2goQGluY3BhdGhzLCBAeyRjb21waWxlX29wdGlvbnN7IiR7c291cmNlZmlsZX1fSU5DUEFUSFMifX0pOworICAgIH0KKyAgICByZW1vdmVEdXBsaWNhdGVzKCk7CisKKyAgICBwdXNoKEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCUyJ9fSwgJGxpYm91dCk7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlib3V0fSJ9fSA9ICgiX0RFRklORVMiLCAiX0lOQ0xVREVTIiwgIl9DRkxBR1MiLCAiX1NPVVJDRVMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9PQkpFQ1RTIik7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlib3V0fV9ERUZJTkVTIn19ID0gQGRlZmluZXM7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlib3V0fV9JTkNMVURFUyJ9fSA9IEBpbmNwYXRoczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJvdXR9X0NGTEFHUyJ9fSA9IEBjZmxhZ3M7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlib3V0fV9MRkxBR1MifX0gPSBAbGZsYWdzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm91dH1fU09VUkNFUyJ9fSA9IEBzb3VyY2VzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm91dH1fT0JKRUNUUyJ9fSA9IEBvYmpmaWxlczsKKyAgICBjbGVhckNvbXBpbGVTdGVwKCk7Cit9CisKK3N1YiBoYW5kbGVMaW5rTGluZQoreworICAgIG15ICgkbGluZSwgJGxpbmVubykgPSBAXzsKKyAgICBteSAoQG9iamZpbGVzLCBAbGZsYWdzLCBAbGlicywgJGFwcG91dCwgJHBhcnQpOworICAgIG15IEBwYXJ0cyA9IHNwbGl0KCcgJywgJGxpbmUpOworICAgIHNoaWZ0KEBwYXJ0cyk7ICMgaWdub3JlIGNtZAorICAgIHdoaWxlICgkcGFydCA9IHNoaWZ0IEBwYXJ0cykgeworICAgICAgICBpZiAoJHBhcnQgPX4gL14tSUdOT1JFLykgeworICAgICAgICAgICAgcHVzaChAbGZsYWdzLCAkcGFydCk7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9eLVtHUklNRE9dLykgeworICAgICAgICAgICAgIyBlYXQgY29tcGlsZXIgZmxhZ3MKKyAgICAgICAgfSBlbHNpZiAoIiRwYXJ0IiBlcSAiLW8iKSB7CisgICAgICAgICAgICAkYXBwb3V0ID0gc2hpZnQgQHBhcnRzOworICAgICAgICB9IGVsc2lmICgiJHBhcnQiIGVxICItbHoiKSB7CisgICAgICAgICAgICBwdXNoKEBsaWJzLCAiemxpYi5saWIiKTsKKwl9IGVsc2lmICgiJHBhcnQiIGVxICItbGNyeXB0byIpIHsKKyAgICAgICAgICAgIHB1c2goQGxpYnMsICJsaWJlYXkzMi5saWIiKTsKKyAgICAgICAgfSBlbHNpZiAoIiRwYXJ0IiBlcSAiLWxzc2wiKSB7CisgICAgICAgICAgICBwdXNoKEBsaWJzLCAic3NsZWF5MzIubGliIik7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9eLS8pIHsKKyAgICAgICAgICAgIHB1c2goQGxmbGFncywgJHBhcnQpOworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXC4oYXxsaWIpJC8pIHsKKyAgICAgICAgICAgICRwYXJ0ID1+IHMvXC5hJC8ubGliLzsKKyAgICAgICAgICAgIHB1c2goQGxpYnMsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL1wuKG98b2JqKSQvKSB7CisgICAgICAgICAgICBwdXNoKEBvYmpmaWxlcywgJHBhcnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGllICJVbmhhbmRsZWQgbGliIG9wdGlvbiBAIGxpbmUgJGxpbmVubzogJHBhcnQiOworICAgICAgICB9CisgICAgfQorIyAgICBwcmludCAiQXBwT3V0OiAnJGFwcG91dCdcbkxGbGFnczogQGxmbGFnc1xuTGlicyAgOiBAbGlic1xuT2ZpbGVzOiBAb2JqZmlsZXNcbiI7CisjICAgIGV4aXQoMSk7CisgICAgZm9yZWFjaCAoQG9iamZpbGVzKSB7CisgICAgICAgIG15ICRzb3VyY2VmaWxlID0gJF87CisgICAgICAgICRzb3VyY2VmaWxlID1+IHMvXC5vLy5jLzsKKyAgICAgICAgcHVzaChAc291cmNlcywgJHNvdXJjZWZpbGUpOworICAgICAgICBwdXNoKEBjZmxhZ3MsIEB7JGNvbXBpbGVfb3B0aW9uc3siJHtzb3VyY2VmaWxlfV9DRkxBR1MifX0pOworICAgICAgICBwdXNoKEBkZWZpbmVzLCBAeyRjb21waWxlX29wdGlvbnN7IiR7c291cmNlZmlsZX1fREVGSU5FUyJ9fSk7CisgICAgICAgIHB1c2goQGluY3BhdGhzLCBAeyRjb21waWxlX29wdGlvbnN7IiR7c291cmNlZmlsZX1fSU5DUEFUSFMifX0pOworICAgIH0KKyAgICByZW1vdmVEdXBsaWNhdGVzKCk7CisKKyAgICByZW1vdmVEdXBsaWNhdGVzKCk7CisgICAgcHVzaChAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFMifX0sICRhcHBvdXQpOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG91dH0ifX0gPSAoIl9ERUZJTkVTIiwgIl9JTkNMVURFUyIsICJfQ0ZMQUdTIiwgIl9MRkxBR1MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9TT1VSQ0VTIiwgIl9PQkpFQ1RTIiwgIl9MSUJTIik7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwb3V0fV9ERUZJTkVTIn19ID0gQGRlZmluZXM7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwb3V0fV9JTkNMVURFUyJ9fSA9IEBpbmNwYXRoczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBvdXR9X0NGTEFHUyJ9fSA9IEBjZmxhZ3M7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwb3V0fV9MRkxBR1MifX0gPSBAbGZsYWdzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG91dH1fU09VUkNFUyJ9fSA9IEBzb3VyY2VzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG91dH1fT0JKRUNUUyJ9fSA9IEBvYmpmaWxlczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBvdXR9X0xJQlMifX0gPSBAbGliczsKKyAgICBjbGVhckNvbXBpbGVTdGVwKCk7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL2J1aWxkc3lzdGVtcy9nZW5lcmF0ZSBiL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL2dlbmVyYXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMTBmMjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2J1aWxkc3lzdGVtcy9nZW5lcmF0ZQpAQCAtMCwwICsxLDI5IEBACisjIS91c3IvYmluL3BlcmwgLXcKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgR2VuZXJhdGUgYnVpbGRzeXN0ZW0gZmlsZXMKKyMKKyMgVGhpcyBzY3JpcHQgZ2VuZXJhdGUgYnVpbGRzeXN0ZW0gZmlsZXMgYmFzZWQgb24gdGhlIG91dHB1dCBvZiBhCisjIEdOVSBNYWtlIC0tZHJ5LXJ1biwgZW5hYmxpbmcgV2luZG93cyB1c2VycyB0byBkZXZlbG9wIEdpdCB3aXRoIHRoZWlyCisjIHRydXN0ZWQgSURFIHdpdGggbmF0aXZlIHByb2plY3RzLgorIworIyBOb3RlOgorIyBJdCBpcyBub3QgbWVhbnQgYXMgKnRoZSogd2F5IG9mIGJ1aWxkaW5nIEdpdCB3aXRoIE1TVkMsIGJ1dCBtZXJlbHkgYQorIyBjb252ZW5pZW5jZS4gVGhlIGNvcnJlY3Qgd2F5IG9mIGJ1aWxkaW5nIEdpdCB3aXRoIE1TVkMgaXMgdG8gdXNlIHRoZQorIyBHTlUgTWFrZSB0b29sIHRvIGJ1aWxkIHdpdGggdGhlIG1haW50YWluZWQgTWFrZWZpbGUgaW4gdGhlIHJvb3Qgb2YKKyMgdGhlIHByb2plY3QuIElmIHlvdSBoYXZlIHRoZSBtc3lzZ2l0IGVudmlyb25tZW50IGluc3RhbGxlZCBhbmQKKyMgYXZhaWxhYmxlIGluIHlvdXIgY3VycmVudCBjb25zb2xlLCB0b2dldGhlciB3aXRoIHRoZSBWaXN1YWwgU3R1ZGlvCisjIGVudmlyb25tZW50IHlvdSB3aXNoIHRvIGJ1aWxkIGZvciwgYWxsIHlvdSBoYXZlIHRvIGRvIGlzIHJ1biB0aGUKKyMgY29tbWFuZDoKKyMgICAgIG1ha2UgTVNWQz0xCisjCisjIENvcHlyaWdodCAoQykgMjAwOSBNYXJpdXMgU3Rvcm0tT2xzZW4gPG1zdG9ybW9AZ21haWwuY29tPgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwordXNlIHN0cmljdDsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKK3VzZSBDd2Q7CisKK215ICRnaXRfZGlyID0gZ2V0Y3dkKCk7CiskZ2l0X2RpciA9fiBzPVxcPS89ZzsKKyRnaXRfZGlyID0gZGlybmFtZSgkZ2l0X2Rpcikgd2hpbGUgKCEtZSAiJGdpdF9kaXIvZ2l0LmMiICYmICIkZ2l0X2RpciIgbmUgIiIpOworZGllICJDb3VsZG4ndCBmaW5kIEdpdCByZXBvIiBpZiAoIiRnaXRfZGlyIiBlcSAiIik7CitleGVjIGpvaW4oIiAiLCAoIlBFUkw1TElCPSR7Z2l0X2Rpcn0vY29udHJpYi9idWlsZHN5c3RlbXMgJHtnaXRfZGlyfS9jb250cmliL2J1aWxkc3lzdGVtcy9lbmdpbmUucGwiLCBAQVJHVikpOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9idWlsZHN5c3RlbXMvcGFyc2UucGwgYi9jb250cmliL2J1aWxkc3lzdGVtcy9wYXJzZS5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTY1NmVjCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9idWlsZHN5c3RlbXMvcGFyc2UucGwKQEAgLTAsMCArMSwyMjggQEAKKyMhL3Vzci9iaW4vcGVybCAtdworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEbyBub3QgY2FsbCB0aGlzIHNjcmlwdCBkaXJlY3RseSEKKyMKKyMgVGhlIGdlbmVyYXRlIHNjcmlwdCBlbnN1cmVzIHRoYXQgQElOQyBpcyBjb3JyZWN0IGJlZm9yZSB0aGUgZW5naW5lCisjIGlzIGV4ZWN1dGVkLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDkgTWFyaXVzIFN0b3JtLU9sc2VuIDxtc3Rvcm1vQGdtYWlsLmNvbT4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3VzZSBzdHJpY3Q7Cit1c2UgRmlsZTo6QmFzZW5hbWU7Cit1c2UgQ3dkOworCitteSAkZmlsZSA9ICRBUkdWWzBdOworZGllICJObyBmaWxlIHByb3ZpZGVkISIgaWYgIWRlZmluZWQgJGZpbGU7CisKK215ICgkY2ZsYWdzLCAkdGFyZ2V0LCAkdHlwZSwgJGxpbmUpOworCitvcGVuKEYsICI8JGZpbGUiKSB8fCBkaWUgIkNvdWxkbid0IG9wZW4gZmlsZSAkZmlsZSI7CitteSBAZGF0YSA9IDxGPjsKK2Nsb3NlKEYpOworCit3aGlsZSAobXkgJHRleHQgPSBzaGlmdCBAZGF0YSkgeworICAgIG15ICRhdGVfbmV4dDsKKyAgICBkbyB7CisgICAgICAgICRhdGVfbmV4dCA9IDA7CisgICAgICAgICRsaW5lKys7CisgICAgICAgIGNob21wICR0ZXh0OworICAgICAgICBjaG9wICR0ZXh0IGlmICgkdGV4dCA9fiAvXHIkLyk7CisgICAgICAgIGlmICgkdGV4dCA9fiAvXFwkLykgeworICAgICAgICAgICAgJHRleHQgPX4gcy9cXCQvLzsKKyAgICAgICAgICAgICR0ZXh0IC49IHNoaWZ0IEBkYXRhOworICAgICAgICAgICAgJGF0ZV9uZXh0ID0gMTsKKyAgICAgICAgfQorICAgIH0gd2hpbGUoJGF0ZV9uZXh0KTsKKworICAgIGlmKCR0ZXh0ID1+IC8gLWMgLykgeworICAgICAgICAjIGNvbXBpbGF0aW9uCisgICAgICAgIGhhbmRsZUNvbXBpbGVMaW5lKCR0ZXh0LCAkbGluZSk7CisKKyAgICB9IGVsc2lmICgkdGV4dCA9fiAvIC1vIC8pIHsKKyAgICAgICAgIyBsaW5raW5nIGV4ZWN1dGFibGUKKyAgICAgICAgaGFuZGxlTGlua0xpbmUoJHRleHQsICRsaW5lKTsKKworICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9cLm8gLyAmJiAkdGV4dCA9fiAvXC5hIC8pIHsKKyAgICAgICAgIyBsaWJpZnlpbmcKKyAgICAgICAgaGFuZGxlTGliTGluZSgkdGV4dCwgJGxpbmUpOworCisjICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9eY3AgLykgeworIyAgICAgICAgIyBjb3B5IGZpbGUgYXJvdW5kCisjCisjICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9ecm0gLWYgLykgeworIyAgICAgICAgIyBzaGVsbCBjb21tYW5kCisjCisjICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9ebWFrZVsgXFtdLykgeworIyAgICAgICAgIyBtYWtlIG91dHB1dAorIworIyAgICB9IGVsc2lmICgkdGV4dCA9fiAvXmVjaG8gLykgeworIyAgICAgICAgIyBlY2hvIHRvIGZpbGUKKyMKKyMgICAgfSBlbHNpZiAoJHRleHQgPX4gL15pZiAvKSB7CisjICAgICAgICAjIHNoZWxsIGNvbmRpdGlvbmFsCisjCisjICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9edGNsc2ggLykgeworIyAgICAgICAgIyB0cmFuc2xhdGlvbiBzdHVmZgorIworIyAgICB9IGVsc2lmICgkdGV4dCA9fiAvXnVtYXNrIC8pIHsKKyMgICAgICAgICMgaGFuZGxpbmcgYm9pbGVycGxhdGVzCisjCisjICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9cJFwoXDpcKS8pIHsKKyMgICAgICAgICMgaWdub3JlCisjCisjICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9eRkxBR1M9LykgeworIyAgICAgICAgIyBmbGFncyBjaGVjayBmb3IgZGVwZW5kZW5jaWVzCisjCisjICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9eJ1wvdXNyXC9iaW5cL3BlcmwnIC1NRXJyb3IgLWUvKSB7CisjICAgICAgICAjIHBlcmwgY29tbWFuZHMgZm9yIGNvcHlpbmcgZmlsZXMKKyMKKyMgICAgfSBlbHNpZiAoJHRleHQgPX4gL2dlbmVyYXRlLWNtZGxpc3RcLnNoLykgeworIyAgICAgICAgIyBjb21tYW5kIGZvciBnZW5lcmF0aW5nIGxpc3Qgb2YgY29tbWFuZHMKKyMKKyMgICAgfSBlbHNpZiAoJHRleHQgPX4gL150ZXN0IC8gJiYgJHRleHQgPX4gL3x8IHJtIC1mIC8pIHsKKyMgICAgICAgICMgY29tbWFuZHMgcmVtb3ZpbmcgZXhlY3V0YWJsZXMsIGlmIHRoZXkgZXhpc3QKKyMKKyMgICAgfSBlbHNpZiAoJHRleHQgPX4gL25ldyBsb2NhdGlvbnMgb3IgVGNsLykgeworIyAgICAgICAgIyBjb21tYW5kIGZvciBkZXRlY3RpbmcgVGNsL1RrIGNoYW5nZXMKKyMKKyMgICAgfSBlbHNpZiAoJHRleHQgPX4gL21rZGlyIC1wLykgeworIyAgICAgICAgIyBjb21tYW5kIGNyZWF0aW5nIHBhdGgKKyMKKyMgICAgfSBlbHNpZiAoJHRleHQgPX4gLzogbm8gY3VzdG9tIHRlbXBsYXRlcyB5ZXQvKSB7CisjICAgICAgICAjIHdoYXRldmVyCisKKyAgICB9IGVsc2UgeworIyAgICAgICAgcHJpbnQgIlVuaGFuZGxlZCAobGluZTogJGxpbmUpOiAkdGV4dFxuIjsKKyAgICB9Cit9CitjbG9zZShGKTsKKworIyB1c2UgRGF0YTo6RHVtcGVyOworIyBwcmludCAiUGFyc2VkIGJ1aWxkIHN0cnVjdHVyZTpcbiI7CisjIHByaW50IER1bXBlciglYnVpbGRfc3RydWN0dXJlKTsKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZ1bmN0aW9ucyB1bmRlciBoZXJlCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK215ICglYnVpbGRfc3RydWN0dXJlLCBAZGVmaW5lcywgQGluY3BhdGhzLCBAY2ZsYWdzLCBAc291cmNlcyk7CisKK3N1YiBjbGVhckNvbXBpbGVTdGVwCit7CisgICAgQGRlZmluZXMgPSAoKTsKKyAgICBAaW5jcGF0aHMgPSAoKTsKKyAgICBAY2ZsYWdzID0gKCk7CisgICAgQHNvdXJjZXMgPSAoKTsKK30KKworc3ViIHJlbW92ZUR1cGxpY2F0ZXMKK3sKKyAgICBteSAoJWR1cEhhc2gsICRlbnRyeSk7CisgICAgJWR1cEhhc2ggPSBtYXAgeyAkXywgMSB9IEBkZWZpbmVzOworICAgIEBkZWZpbmVzID0ga2V5cyAlZHVwSGFzaDsKKworICAgICVkdXBIYXNoID0gbWFwIHsgJF8sIDEgfSBAaW5jcGF0aHM7CisgICAgQGluY3BhdGhzID0ga2V5cyAlZHVwSGFzaDsKKworICAgICVkdXBIYXNoID0gbWFwIHsgJF8sIDEgfSBAY2ZsYWdzOworICAgIEBjZmxhZ3MgPSBrZXlzICVkdXBIYXNoOworCisgICAgJWR1cEhhc2ggPSBtYXAgeyAkXywgMSB9IEBzb3VyY2VzOworICAgIEBzb3VyY2VzID0ga2V5cyAlZHVwSGFzaDsKK30KKworc3ViIGhhbmRsZUNvbXBpbGVMaW5lCit7CisgICAgbXkgKCRsaW5lLCAkbGluZW5vKSA9IEBfOworICAgIG15IEBwYXJ0cyA9IHNwbGl0KCcgJywgJGxpbmUpOworICAgIHNoaWZ0KEBwYXJ0cyk7ICMgaWdub3JlIGNtZAorICAgIHdoaWxlIChteSAkcGFydCA9IHNoaWZ0IEBwYXJ0cykgeworICAgICAgICBpZiAoIiRwYXJ0IiBlcSAiLW8iKSB7CisgICAgICAgICAgICAjIGlnbm9yZSBvYmplY3QgZmlsZQorICAgICAgICAgICAgc2hpZnQgQHBhcnRzOworICAgICAgICB9IGVsc2lmICgiJHBhcnQiIGVxICItYyIpIHsKKyAgICAgICAgICAgICMgaWdub3JlIGNvbXBpbGUgZmxhZworICAgICAgICB9IGVsc2lmICgiJHBhcnQiIGVxICItYyIpIHsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL14uPy1JLykgeworICAgICAgICAgICAgcHVzaChAaW5jcGF0aHMsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL14uPy1ELykgeworICAgICAgICAgICAgcHVzaChAZGVmaW5lcywgJHBhcnQpOworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXi0vKSB7CisgICAgICAgICAgICBwdXNoKEBjZmxhZ3MsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL1wuKGN8Y2N8Y3BwKSQvKSB7CisgICAgICAgICAgICBwdXNoKEBzb3VyY2VzLCAkcGFydCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkaWUgIlVuaGFuZGxlZCBjb21waWxlciBvcHRpb24gQCBsaW5lICRsaW5lbm86ICRwYXJ0IjsKKyAgICAgICAgfQorICAgIH0KKyAgICAjcHJpbnQgIlNvdXJjZXM6IEBzb3VyY2VzXG5DRmxhZ3M6IEBjZmxhZ3NcbkRlZmluZTogQGRlZmluZXNcbkluY3BhdDogQGluY3BhdGhzXG4iOworICAgICNleGl0KDEpOworfQorCitzdWIgaGFuZGxlTGliTGluZQoreworICAgIG15ICgkbGluZSwgJGxpbmVubykgPSBAXzsKKyAgICBteSAoQG9iamZpbGVzLCBAbGZsYWdzLCAkbGlib3V0LCAkcGFydCk7CisgICAgIyBraWxsIGNtZCBhbmQgcm0gJ3ByZWZpeCcKKyAgICAkbGluZSA9fiBzL15ybSAtZiAuKiAmJiAuKiByY3MgLy87CisgICAgbXkgQHBhcnRzID0gc3BsaXQoJyAnLCAkbGluZSk7CisgICAgd2hpbGUgKCRwYXJ0ID0gc2hpZnQgQHBhcnRzKSB7CisgICAgICAgIGlmICgkcGFydCA9fiAvXi0vKSB7CisgICAgICAgICAgICBwdXNoKEBsZmxhZ3MsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL1wuKG98b2JqKSQvKSB7CisgICAgICAgICAgICBwdXNoKEBvYmpmaWxlcywgJHBhcnQpOworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXC4oYXxsaWIpJC8pIHsKKyAgICAgICAgICAgICRsaWJvdXQgPSAkcGFydDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRpZSAiVW5oYW5kbGVkIGxpYiBvcHRpb24gQCBsaW5lICRsaW5lbm86ICRwYXJ0IjsKKyAgICAgICAgfQorICAgIH0KKyAgICAjcHJpbnQgIkxpYk91dDogJyRsaWJvdXQnXG5MRmxhZ3M6IEBsZmxhZ3Ncbk9maWxlczogQG9iamZpbGVzXG4iOworICAgICNleGl0KDEpOworICAgIHJlbW92ZUR1cGxpY2F0ZXMoKTsKKyAgICBwdXNoKEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCUyJ9fSwgJGxpYm91dCk7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlib3V0fSJ9fSA9ICgiX0RFRklORVMiLCAiX0lOQ0xVREVTIiwgIl9DRkxBR1MiLCAiX1NPVVJDRVMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9PQkpFQ1RTIik7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlib3V0fV9ERUZJTkVTIn19ID0gQGRlZmluZXM7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlib3V0fV9JTkNMVURFUyJ9fSA9IEBpbmNwYXRoczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJvdXR9X0NGTEFHUyJ9fSA9IEBjZmxhZ3M7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlib3V0fV9TT1VSQ0VTIn19ID0gQHNvdXJjZXM7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlib3V0fV9PQkpFQ1RTIn19ID0gQG9iamZpbGVzOworICAgIGNsZWFyQ29tcGlsZVN0ZXAoKTsKK30KKworc3ViIGhhbmRsZUxpbmtMaW5lCit7CisgICAgbXkgKCRsaW5lLCAkbGluZW5vKSA9IEBfOworICAgIG15IChAb2JqZmlsZXMsIEBsZmxhZ3MsIEBsaWJzLCAkYXBwb3V0LCAkcGFydCk7CisgICAgbXkgQHBhcnRzID0gc3BsaXQoJyAnLCAkbGluZSk7CisgICAgc2hpZnQoQHBhcnRzKTsgIyBpZ25vcmUgY21kCisgICAgd2hpbGUgKCRwYXJ0ID0gc2hpZnQgQHBhcnRzKSB7CisgICAgICAgIGlmICgkcGFydCA9fiAvXi1bR1JJRE9dLykgeworICAgICAgICAgICAgIyBlYXQgY29tcGlsZXIgZmxhZ3MKKyAgICAgICAgfSBlbHNpZiAoIiRwYXJ0IiBlcSAiLW8iKSB7CisgICAgICAgICAgICAkYXBwb3V0ID0gc2hpZnQgQHBhcnRzOworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXi0vKSB7CisgICAgICAgICAgICBwdXNoKEBsZmxhZ3MsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL1wuKGF8bGliKSQvKSB7CisgICAgICAgICAgICBwdXNoKEBsaWJzLCAkcGFydCk7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9cLihvfG9iaikkLykgeworICAgICAgICAgICAgcHVzaChAb2JqZmlsZXMsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRpZSAiVW5oYW5kbGVkIGxpYiBvcHRpb24gQCBsaW5lICRsaW5lbm86ICRwYXJ0IjsKKyAgICAgICAgfQorICAgIH0KKyAgICAjcHJpbnQgIkFwcE91dDogJyRhcHBvdXQnXG5MRmxhZ3M6IEBsZmxhZ3NcbkxpYnMgIDogQGxpYnNcbk9maWxlczogQG9iamZpbGVzXG4iOworICAgICNleGl0KDEpOworICAgIHJlbW92ZUR1cGxpY2F0ZXMoKTsKKyAgICBwdXNoKEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQUyJ9fSwgJGFwcG91dCk7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwb3V0fSJ9fSA9ICgiX0RFRklORVMiLCAiX0lOQ0xVREVTIiwgIl9DRkxBR1MiLCAiX0xGTEFHUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX1NPVVJDRVMiLCAiX09CSkVDVFMiLCAiX0xJQlMiKTsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBvdXR9X0RFRklORVMifX0gPSBAZGVmaW5lczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBvdXR9X0lOQ0xVREVTIn19ID0gQGluY3BhdGhzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG91dH1fQ0ZMQUdTIn19ID0gQGNmbGFnczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBvdXR9X0xGTEFHUyJ9fSA9IEBsZmxhZ3M7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwb3V0fV9TT1VSQ0VTIn19ID0gQHNvdXJjZXM7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwb3V0fV9PQkpFQ1RTIn19ID0gQG9iamZpbGVzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG91dH1fTElCUyJ9fSA9IEBsaWJzOworICAgIGNsZWFyQ29tcGlsZVN0ZXAoKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29tcGxldGlvbi9naXQtY29tcGxldGlvbi5iYXNoIGIvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2gKaW5kZXggZjQ0MTUyYy4uNzMzYWMzOSAxMDA3NTUKLS0tIGEvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2gKKysrIGIvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2gKQEAgLTIxLDEzICsyMSw3IEBACiAjICAgIDIpIEFkZGVkIHRoZSBmb2xsb3dpbmcgbGluZSB0byB5b3VyIC5iYXNocmM6CiAjICAgICAgICBzb3VyY2Ugfi8uZ2l0LWNvbXBsZXRpb24uc2gKICMKLSMgICAgMykgWW91IG1heSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgZ2l0IGV4ZWN1dGFibGUgaXMgYXZhaWxhYmxlCi0jICAgICAgIGluIHlvdXIgUEFUSCBiZWZvcmUgdGhpcyBzY3JpcHQgaXMgc291cmNlZCwgYXMgc29tZSBjYWNoaW5nCi0jICAgICAgIGlzIHBlcmZvcm1lZCB3aGlsZSB0aGUgc2NyaXB0IGxvYWRzLiAgSWYgZ2l0IGlzbid0IGZvdW5kCi0jICAgICAgIGF0IHNvdXJjZSB0aW1lIHRoZW4gYWxsIGxvb2t1cHMgd2lsbCBiZSBkb25lIG9uIGRlbWFuZCwKLSMgICAgICAgd2hpY2ggbWF5IGJlIHNsaWdodGx5IHNsb3dlci4KLSMKLSMgICAgNCkgQ29uc2lkZXIgY2hhbmdpbmcgeW91ciBQUzEgdG8gYWxzbyBzaG93IHRoZSBjdXJyZW50IGJyYW5jaDoKKyMgICAgMykgQ29uc2lkZXIgY2hhbmdpbmcgeW91ciBQUzEgdG8gYWxzbyBzaG93IHRoZSBjdXJyZW50IGJyYW5jaDoKICMgICAgICAgIFBTMT0nW1x1QFxoIFxXJChfX2dpdF9wczEgIiAoJXMpIildXCQgJwogIwogIyAgICAgICBUaGUgYXJndW1lbnQgdG8gX19naXRfcHMxIHdpbGwgYmUgZGlzcGxheWVkIG9ubHkgaWYgeW91CkBAIC00MCw2ICszNCwxNCBAQAogIyAgICAgICB3aXRoIHRoZSBiYXNoLnNob3dEaXJ0eVN0YXRlIHZhcmlhYmxlLCB3aGljaCBkZWZhdWx0cyB0byB0cnVlCiAjICAgICAgIG9uY2UgR0lUX1BTMV9TSE9XRElSVFlTVEFURSBpcyBlbmFibGVkLgogIworIyAgICAgICBZb3UgY2FuIGFsc28gc2VlIGlmIGN1cnJlbnRseSBzb21ldGhpbmcgaXMgc3Rhc2hlZCwgYnkgc2V0dGluZworIyAgICAgICBHSVRfUFMxX1NIT1dTVEFTSFNUQVRFIHRvIGEgbm9uZW1wdHkgdmFsdWUuIElmIHNvbWV0aGluZyBpcyBzdGFzaGVkLAorIyAgICAgICB0aGVuIGEgJyQnIHdpbGwgYmUgc2hvd24gbmV4dCB0byB0aGUgYnJhbmNoIG5hbWUuCisjCisjICAgICAgIElmIHlvdSB3b3VsZCBsaWtlIHRvIHNlZSBpZiB0aGVyZSdyZSB1bnRyYWNrZWQgZmlsZXMsIHRoZW4geW91IGNhbgorIyAgICAgICBzZXQgR0lUX1BTMV9TSE9XVU5UUkFDS0VERklMRVMgdG8gYSBub25lbXB0eSB2YWx1ZS4gSWYgdGhlcmUncmUKKyMgICAgICAgdW50cmFja2VkIGZpbGVzLCB0aGVuIGEgJyUnIHdpbGwgYmUgc2hvd24gbmV4dCB0byB0aGUgYnJhbmNoIG5hbWUuCisjCiAjIFRvIHN1Ym1pdCBwYXRjaGVzOgogIwogIyAgICAqKSBSZWFkIERvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKQEAgLTg0LDI2ICs4NiwyNCBAQAogCWlmIFsgLW4gIiRnIiBdOyB0aGVuCiAJCWxvY2FsIHIKIAkJbG9jYWwgYgotCQlpZiBbIC1kICIkZy9yZWJhc2UtYXBwbHkiIF07IHRoZW4KLQkJCWlmIFsgLWYgIiRnL3JlYmFzZS1hcHBseS9yZWJhc2luZyIgXTsgdGhlbgotCQkJCXI9InxSRUJBU0UiCi0JCWVsaWYgWyAtZiAiJGcvcmViYXNlLWFwcGx5L2FwcGx5aW5nIiBdOyB0aGVuCi0JCQkJcj0ifEFNIgotCQkJZWxzZQotCQkJCXI9InxBTS9SRUJBU0UiCi0JCQlmaQotCQkJYj0iJChnaXQgc3ltYm9saWMtcmVmIEhFQUQgMj4vZGV2L251bGwpIgotCQllbGlmIFsgLWYgIiRnL3JlYmFzZS1tZXJnZS9pbnRlcmFjdGl2ZSIgXTsgdGhlbgorCQlpZiBbIC1mICIkZy9yZWJhc2UtbWVyZ2UvaW50ZXJhY3RpdmUiIF07IHRoZW4KIAkJCXI9InxSRUJBU0UtaSIKIAkJCWI9IiQoY2F0ICIkZy9yZWJhc2UtbWVyZ2UvaGVhZC1uYW1lIikiCiAJCWVsaWYgWyAtZCAiJGcvcmViYXNlLW1lcmdlIiBdOyB0aGVuCiAJCQlyPSJ8UkVCQVNFLW0iCiAJCQliPSIkKGNhdCAiJGcvcmViYXNlLW1lcmdlL2hlYWQtbmFtZSIpIgogCQllbHNlCi0JCQlpZiBbIC1mICIkZy9NRVJHRV9IRUFEIiBdOyB0aGVuCisJCQlpZiBbIC1kICIkZy9yZWJhc2UtYXBwbHkiIF07IHRoZW4KKwkJCQlpZiBbIC1mICIkZy9yZWJhc2UtYXBwbHkvcmViYXNpbmciIF07IHRoZW4KKwkJCQkJcj0ifFJFQkFTRSIKKwkJCQllbGlmIFsgLWYgIiRnL3JlYmFzZS1hcHBseS9hcHBseWluZyIgXTsgdGhlbgorCQkJCQlyPSJ8QU0iCisJCQkJZWxzZQorCQkJCQlyPSJ8QU0vUkVCQVNFIgorCQkJCWZpCisJCQllbGlmIFsgLWYgIiRnL01FUkdFX0hFQUQiIF07IHRoZW4KIAkJCQlyPSJ8TUVSR0lORyIKLQkJCWZpCi0JCQlpZiBbIC1mICIkZy9CSVNFQ1RfTE9HIiBdOyB0aGVuCisJCQllbGlmIFsgLWYgIiRnL0JJU0VDVF9MT0ciIF07IHRoZW4KIAkJCQlyPSJ8QklTRUNUSU5HIgogCQkJZmkKIApAQCAtMTI5LDYgKzEyOSw4IEBACiAKIAkJbG9jYWwgdwogCQlsb2NhbCBpCisJCWxvY2FsIHMKKwkJbG9jYWwgdQogCQlsb2NhbCBjCiAKIAkJaWYgWyAidHJ1ZSIgPSAiJChnaXQgcmV2LXBhcnNlIC0taXMtaW5zaWRlLWdpdC1kaXIgMj4vZGV2L251bGwpIiBdOyB0aGVuCkBAIC0xNDAsMjUgKzE0MiwyNyBAQAogCQllbGlmIFsgInRydWUiID0gIiQoZ2l0IHJldi1wYXJzZSAtLWlzLWluc2lkZS13b3JrLXRyZWUgMj4vZGV2L251bGwpIiBdOyB0aGVuCiAJCQlpZiBbIC1uICIke0dJVF9QUzFfU0hPV0RJUlRZU1RBVEUtfSIgXTsgdGhlbgogCQkJCWlmIFsgIiQoZ2l0IGNvbmZpZyAtLWJvb2wgYmFzaC5zaG93RGlydHlTdGF0ZSkiICE9ICJmYWxzZSIgXTsgdGhlbgotCQkJCQlnaXQgZGlmZiAtLW5vLWV4dC1kaWZmIC0taWdub3JlLXN1Ym1vZHVsZXMgXAotCQkJCQkJLS1xdWlldCAtLWV4aXQtY29kZSB8fCB3PSIqIgorCQkJCQlnaXQgZGlmZiAtLW5vLWV4dC1kaWZmIC0tcXVpZXQgLS1leGl0LWNvZGUgfHwgdz0iKiIKIAkJCQkJaWYgZ2l0IHJldi1wYXJzZSAtLXF1aWV0IC0tdmVyaWZ5IEhFQUQgPi9kZXYvbnVsbDsgdGhlbgotCQkJCQkJZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1xdWlldCBcCi0JCQkJCQkJLS1pZ25vcmUtc3VibW9kdWxlcyBIRUFEIC0tIHx8IGk9IisiCisJCQkJCQlnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLXF1aWV0IEhFQUQgLS0gfHwgaT0iKyIKIAkJCQkJZWxzZQogCQkJCQkJaT0iIyIKIAkJCQkJZmkKIAkJCQlmaQogCQkJZmkKLQkJZmkKKwkJCWlmIFsgLW4gIiR7R0lUX1BTMV9TSE9XU1RBU0hTVEFURS19IiBdOyB0aGVuCisJCQkgICAgICAgIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9zdGFzaCA+L2Rldi9udWxsIDI+JjEgJiYgcz0iJCIKKwkJCWZpCiAKLQkJaWYgWyAtbiAiJGIiIF07IHRoZW4KLQkJCWlmIFsgLW4gIiR7MS19IiBdOyB0aGVuCi0JCQkJcHJpbnRmICIkMSIgIiRjJHtiIyNyZWZzL2hlYWRzL30kdyRpJHIiCi0JCQllbHNlCi0JCQkJcHJpbnRmICIgKCVzKSIgIiRjJHtiIyNyZWZzL2hlYWRzL30kdyRpJHIiCisJCQlpZiBbIC1uICIke0dJVF9QUzFfU0hPV1VOVFJBQ0tFREZJTEVTLX0iIF07IHRoZW4KKwkJCSAgIGlmIFsgLW4gIiQoZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZXhjbHVkZS1zdGFuZGFyZCkiIF07IHRoZW4KKwkJCSAgICAgIHU9IiUiCisJCQkgICBmaQogCQkJZmkKIAkJZmkKKworCQlsb2NhbCBmPSIkdyRpJHMkdSIKKwkJcHJpbnRmICIkezE6LSAoJXMpfSIgIiRjJHtiIyNyZWZzL2hlYWRzL30ke2Y6KyAkZn0kciIKIAlmaQogfQogCkBAIC0yNDYsNyArMjUwLDkgQEAKIAkJCXJlZnM9IiR7Y3VyJS8qfSIKIAkJCTs7CiAJCSopCi0JCQlpZiBbIC1lICIkZGlyL0hFQUQiIF07IHRoZW4gZWNobyBIRUFEOyBmaQorCQkJZm9yIGkgaW4gSEVBRCBGRVRDSF9IRUFEIE9SSUdfSEVBRCBNRVJHRV9IRUFEOyBkbworCQkJCWlmIFsgLWUgIiRkaXIvJGkiIF07IHRoZW4gZWNobyAkaTsgZmkKKwkJCWRvbmUKIAkJCWZvcm1hdD0icmVmbmFtZTpzaG9ydCIKIAkJCXJlZnM9InJlZnMvdGFncyByZWZzL2hlYWRzIHJlZnMvcmVtb3RlcyIKIAkJCTs7CkBAIC0zMDMsMjIgKzMwOSwxNCBAQAogCQllY2hvICR7aSMkZC9yZW1vdGVzL30KIAlkb25lCiAJWyAiJG5nb2ZmIiBdICYmIHNob3B0IC11IG51bGxnbG9iCi0JZm9yIGkgaW4gJChnaXQgLS1naXQtZGlyPSIkZCIgY29uZmlnIC0tbGlzdCk7IGRvCi0JCWNhc2UgIiRpIiBpbgotCQlyZW1vdGUuKi51cmw9KikKLQkJCWk9IiR7aSNyZW1vdGUufSIKLQkJCWVjaG8gIiR7aS8udXJsPSovfSIKLQkJCTs7Ci0JCWVzYWMKKwlmb3IgaSBpbiAkKGdpdCAtLWdpdC1kaXI9IiRkIiBjb25maWcgLS1nZXQtcmVnZXhwICdyZW1vdGVcLi4qXC51cmwnIDI+L2Rldi9udWxsKTsgZG8KKwkJaT0iJHtpI3JlbW90ZS59IgorCQllY2hvICIke2kvLnVybCovfSIKIAlkb25lCiB9CiAKLV9fZ2l0X21lcmdlX3N0cmF0ZWdpZXMgKCkKK19fZ2l0X2xpc3RfbWVyZ2Vfc3RyYXRlZ2llcyAoKQogewotCWlmIFsgLW4gIiR7X19naXRfbWVyZ2Vfc3RyYXRlZ3lsaXN0LX0iIF07IHRoZW4KLQkJZWNobyAiJF9fZ2l0X21lcmdlX3N0cmF0ZWd5bGlzdCIKLQkJcmV0dXJuCi0JZmkKIAlnaXQgbWVyZ2UgLXMgaGVscCAyPiYxIHwKIAlzZWQgLW4gLWUgJy9bQWFddmFpbGFibGUgc3RyYXRlZ2llcyBhcmU6IC8sL14kL3sKIAkJcy9cLiQvLwpAQCAtMzI4LDggKzMyNiwxNyBAQAogCQlwCiAJfScKIH0KLV9fZ2l0X21lcmdlX3N0cmF0ZWd5bGlzdD0KLV9fZ2l0X21lcmdlX3N0cmF0ZWd5bGlzdD0kKF9fZ2l0X21lcmdlX3N0cmF0ZWdpZXMgMj4vZGV2L251bGwpCisKK19fZ2l0X21lcmdlX3N0cmF0ZWdpZXM9CisjICdnaXQgbWVyZ2UgLXMgaGVscCcgKGFuZCB0aHVzIGRldGVjdGlvbiBvZiB0aGUgbWVyZ2Ugc3RyYXRlZ3kKKyMgbGlzdCkgZmFpbHMsIHVuZm9ydHVuYXRlbHksIGlmIHJ1biBvdXRzaWRlIG9mIGFueSBnaXQgd29ya2luZworIyB0cmVlLiAgX19naXRfbWVyZ2Vfc3RyYXRlZ2llcyBpcyBzZXQgdG8gdGhlIGVtcHR5IHN0cmluZyBpbgorIyB0aGF0IGNhc2UsIGFuZCB0aGUgZGV0ZWN0aW9uIHdpbGwgYmUgcmVwZWF0ZWQgdGhlIG5leHQgdGltZSBpdAorIyBpcyBuZWVkZWQuCitfX2dpdF9jb21wdXRlX21lcmdlX3N0cmF0ZWdpZXMgKCkKK3sKKwk6ICR7X19naXRfbWVyZ2Vfc3RyYXRlZ2llczo9JChfX2dpdF9saXN0X21lcmdlX3N0cmF0ZWdpZXMpfQorfQogCiBfX2dpdF9jb21wbGV0ZV9maWxlICgpCiB7CkBAIC00MDcsNyArNDE0LDE3IEBACiAJd2hpbGUgWyAkYyAtbHQgJENPTVBfQ1dPUkQgXTsgZG8KIAkJaT0iJHtDT01QX1dPUkRTW2NdfSIKIAkJY2FzZSAiJGkiIGluCi0JCS0tYWxsfC0tbWlycm9yKSBbICIkY21kIiA9ICJwdXNoIiBdICYmIG5vX2NvbXBsZXRlX3JlZnNwZWM9MSA7OworCQktLW1pcnJvcikgWyAiJGNtZCIgPSAicHVzaCIgXSAmJiBub19jb21wbGV0ZV9yZWZzcGVjPTEgOzsKKwkJLS1hbGwpCisJCQljYXNlICIkY21kIiBpbgorCQkJcHVzaCkgbm9fY29tcGxldGVfcmVmc3BlYz0xIDs7CisJCQlmZXRjaCkKKwkJCQlDT01QUkVQTFk9KCkKKwkJCQlyZXR1cm4KKwkJCQk7OworCQkJKikgOzsKKwkJCWVzYWMKKwkJCTs7CiAJCS0qKSA7OwogCQkqKSByZW1vdGU9IiRpIjsgYnJlYWsgOzsKIAkJZXNhYwpAQCAtNDYzLDI5ICs0ODAsMjYgQEAKIAogX19naXRfY29tcGxldGVfc3RyYXRlZ3kgKCkKIHsKKwlfX2dpdF9jb21wdXRlX21lcmdlX3N0cmF0ZWdpZXMKIAljYXNlICIke0NPTVBfV09SRFNbQ09NUF9DV09SRC0xXX0iIGluCiAJLXN8LS1zdHJhdGVneSkKLQkJX19naXRjb21wICIkKF9fZ2l0X21lcmdlX3N0cmF0ZWdpZXMpIgorCQlfX2dpdGNvbXAgIiRfX2dpdF9tZXJnZV9zdHJhdGVnaWVzIgogCQlyZXR1cm4gMAogCWVzYWMKIAlsb2NhbCBjdXI9IiR7Q09NUF9XT1JEU1tDT01QX0NXT1JEXX0iCiAJY2FzZSAiJGN1ciIgaW4KIAktLXN0cmF0ZWd5PSopCi0JCV9fZ2l0Y29tcCAiJChfX2dpdF9tZXJnZV9zdHJhdGVnaWVzKSIgIiIgIiR7Y3VyIyMtLXN0cmF0ZWd5PX0iCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X21lcmdlX3N0cmF0ZWdpZXMiICIiICIke2N1ciMjLS1zdHJhdGVneT19IgogCQlyZXR1cm4gMAogCQk7OwogCWVzYWMKIAlyZXR1cm4gMQogfQogCi1fX2dpdF9hbGxfY29tbWFuZHMgKCkKK19fZ2l0X2xpc3RfYWxsX2NvbW1hbmRzICgpCiB7Ci0JaWYgWyAtbiAiJHtfX2dpdF9hbGxfY29tbWFuZGxpc3QtfSIgXTsgdGhlbgotCQllY2hvICIkX19naXRfYWxsX2NvbW1hbmRsaXN0IgotCQlyZXR1cm4KLQlmaQogCWxvY2FsIGkgSUZTPSIgIiQnXG4nCi0JZm9yIGkgaW4gJChnaXQgaGVscCAtYXxlZ3JlcCAnXiAnKQorCWZvciBpIGluICQoZ2l0IGhlbHAgLWF8ZWdyZXAgJ14gIFthLXpBLVowLTldJykKIAlkbwogCQljYXNlICRpIGluCiAJCSotLSopICAgICAgICAgICAgIDogaGVscGVyIHBhdHRlcm47OwpAQCAtNDkzLDE3ICs1MDcsMTggQEAKIAkJZXNhYwogCWRvbmUKIH0KLV9fZ2l0X2FsbF9jb21tYW5kbGlzdD0KLV9fZ2l0X2FsbF9jb21tYW5kbGlzdD0iJChfX2dpdF9hbGxfY29tbWFuZHMgMj4vZGV2L251bGwpIgogCi1fX2dpdF9wb3JjZWxhaW5fY29tbWFuZHMgKCkKK19fZ2l0X2FsbF9jb21tYW5kcz0KK19fZ2l0X2NvbXB1dGVfYWxsX2NvbW1hbmRzICgpCiB7Ci0JaWYgWyAtbiAiJHtfX2dpdF9wb3JjZWxhaW5fY29tbWFuZGxpc3QtfSIgXTsgdGhlbgotCQllY2hvICIkX19naXRfcG9yY2VsYWluX2NvbW1hbmRsaXN0IgotCQlyZXR1cm4KLQlmaQorCTogJHtfX2dpdF9hbGxfY29tbWFuZHM6PSQoX19naXRfbGlzdF9hbGxfY29tbWFuZHMpfQorfQorCitfX2dpdF9saXN0X3BvcmNlbGFpbl9jb21tYW5kcyAoKQorewogCWxvY2FsIGkgSUZTPSIgIiQnXG4nCi0JZm9yIGkgaW4gImhlbHAiICQoX19naXRfYWxsX2NvbW1hbmRzKQorCV9fZ2l0X2NvbXB1dGVfYWxsX2NvbW1hbmRzCisJZm9yIGkgaW4gImhlbHAiICRfX2dpdF9hbGxfY29tbWFuZHMKIAlkbwogCQljYXNlICRpIGluCiAJCSotLSopICAgICAgICAgICAgIDogaGVscGVyIHBhdHRlcm47OwpAQCAtNTU1LDYgKzU3MCw3IEBACiAJCXJlYWQtdHJlZSkgICAgICAgIDogcGx1bWJpbmc7OwogCQlyZWNlaXZlLXBhY2spICAgICA6IHBsdW1iaW5nOzsKIAkJcmVmbG9nKSAgICAgICAgICAgOiBwbHVtYmluZzs7CisJCXJlbW90ZS0qKSAgICAgICAgIDogdHJhbnNwb3J0OzsKIAkJcmVwby1jb25maWcpICAgICAgOiBkZXByZWNhdGVkOzsKIAkJcmVyZXJlKSAgICAgICAgICAgOiBwbHVtYmluZzs7CiAJCXJldi1saXN0KSAgICAgICAgIDogcGx1bWJpbmc7OwpAQCAtNTg0LDE3ICs2MDAsMjIgQEAKIAkJZXNhYwogCWRvbmUKIH0KLV9fZ2l0X3BvcmNlbGFpbl9jb21tYW5kbGlzdD0KLV9fZ2l0X3BvcmNlbGFpbl9jb21tYW5kbGlzdD0iJChfX2dpdF9wb3JjZWxhaW5fY29tbWFuZHMgMj4vZGV2L251bGwpIgorCitfX2dpdF9wb3JjZWxhaW5fY29tbWFuZHM9CitfX2dpdF9jb21wdXRlX3BvcmNlbGFpbl9jb21tYW5kcyAoKQoreworCV9fZ2l0X2NvbXB1dGVfYWxsX2NvbW1hbmRzCisJOiAke19fZ2l0X3BvcmNlbGFpbl9jb21tYW5kczo9JChfX2dpdF9saXN0X3BvcmNlbGFpbl9jb21tYW5kcyl9Cit9CiAKIF9fZ2l0X2FsaWFzZXMgKCkKIHsKIAlsb2NhbCBpIElGUz0kJ1xuJwotCWZvciBpIGluICQoZ2l0IC0tZ2l0LWRpcj0iJChfX2dpdGRpcikiIGNvbmZpZyAtLWxpc3QpOyBkbworCWZvciBpIGluICQoZ2l0IC0tZ2l0LWRpcj0iJChfX2dpdGRpcikiIGNvbmZpZyAtLWdldC1yZWdleHAgImFsaWFzXC4uKiIgMj4vZGV2L251bGwpOyBkbwogCQljYXNlICIkaSIgaW4KIAkJYWxpYXMuKikKIAkJCWk9IiR7aSNhbGlhcy59IgotCQkJZWNobyAiJHtpLz0qL30iCisJCQllY2hvICIke2kvICovfSIKIAkJCTs7CiAJCWVzYWMKIAlkb25lCkBAIC02MTMsOCArNjM0LDggQEAKIAlkb25lCiB9CiAKLSMgX19naXRfZmluZF9zdWJjb21tYW5kIHJlcXVpcmVzIDEgYXJndW1lbnQKLV9fZ2l0X2ZpbmRfc3ViY29tbWFuZCAoKQorIyBfX2dpdF9maW5kX29uX2NtZGxpbmUgcmVxdWlyZXMgMSBhcmd1bWVudAorX19naXRfZmluZF9vbl9jbWRsaW5lICgpCiB7CiAJbG9jYWwgd29yZCBzdWJjb21tYW5kIGM9MQogCkBAIC02NDgsNyArNjY5LDcgQEAKIHsKIAlsb2NhbCBjdXI9IiR7Q09NUF9XT1JEU1tDT01QX0NXT1JEXX0iIGRpcj0iJChfX2dpdGRpcikiCiAJaWYgWyAtZCAiJGRpciIvcmViYXNlLWFwcGx5IF07IHRoZW4KLQkJX19naXRjb21wICItLXNraXAgLS1yZXNvbHZlZCAtLWFib3J0IgorCQlfX2dpdGNvbXAgIi0tc2tpcCAtLWNvbnRpbnVlIC0tcmVzb2x2ZWQgLS1hYm9ydCIKIAkJcmV0dXJuCiAJZmkKIAljYXNlICIkY3VyIiBpbgpAQCAtNjU5LDggKzY4MCw5IEBACiAJLS0qKQogCQlfX2dpdGNvbXAgIgogCQkJLS0zd2F5IC0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGUgLS1pZ25vcmUtZGF0ZQorCQkJLS1pZ25vcmUtd2hpdGVzcGFjZSAtLWlnbm9yZS1zcGFjZS1jaGFuZ2UKIAkJCS0taW50ZXJhY3RpdmUgLS1rZWVwIC0tbm8tdXRmOCAtLXNpZ25vZmYgLS11dGY4Ci0JCQktLXdoaXRlc3BhY2U9CisJCQktLXdoaXRlc3BhY2U9IC0tc2Npc3NvcnMKIAkJCSIKIAkJcmV0dXJuCiAJZXNhYwpAQCAtNjgwLDYgKzcwMiw3IEBACiAJCQktLXN0YXQgLS1udW1zdGF0IC0tc3VtbWFyeSAtLWNoZWNrIC0taW5kZXgKIAkJCS0tY2FjaGVkIC0taW5kZXgtaW5mbyAtLXJldmVyc2UgLS1yZWplY3QgLS11bmlkaWZmLXplcm8KIAkJCS0tYXBwbHkgLS1uby1hZGQgLS1leGNsdWRlPQorCQkJLS1pZ25vcmUtd2hpdGVzcGFjZSAtLWlnbm9yZS1zcGFjZS1jaGFuZ2UKIAkJCS0td2hpdGVzcGFjZT0gLS1pbmFjY3VyYXRlLWVvZiAtLXZlcmJvc2UKIAkJCSIKIAkJcmV0dXJuCkBAIC03MzEsNyArNzU0LDcgQEAKIAlfX2dpdF9oYXNfZG91YmxlZGFzaCAmJiByZXR1cm4KIAogCWxvY2FsIHN1YmNvbW1hbmRzPSJzdGFydCBiYWQgZ29vZCBza2lwIHJlc2V0IHZpc3VhbGl6ZSByZXBsYXkgbG9nIHJ1biIKLQlsb2NhbCBzdWJjb21tYW5kPSIkKF9fZ2l0X2ZpbmRfc3ViY29tbWFuZCAiJHN1YmNvbW1hbmRzIikiCisJbG9jYWwgc3ViY29tbWFuZD0iJChfX2dpdF9maW5kX29uX2NtZGxpbmUgIiRzdWJjb21tYW5kcyIpIgogCWlmIFsgLXogIiRzdWJjb21tYW5kIiBdOyB0aGVuCiAJCV9fZ2l0Y29tcCAiJHN1YmNvbW1hbmRzIgogCQlyZXR1cm4KQEAgLTgwMSw3ICs4MjQsMjEgQEAKIHsKIAlfX2dpdF9oYXNfZG91YmxlZGFzaCAmJiByZXR1cm4KIAotCV9fZ2l0Y29tcCAiJChfX2dpdF9yZWZzKSIKKwlsb2NhbCBjdXI9IiR7Q09NUF9XT1JEU1tDT01QX0NXT1JEXX0iCisJY2FzZSAiJGN1ciIgaW4KKwktLWNvbmZsaWN0PSopCisJCV9fZ2l0Y29tcCAiZGlmZjMgbWVyZ2UiICIiICIke2N1ciMjLS1jb25mbGljdD19IgorCQk7OworCS0tKikKKwkJX19naXRjb21wICIKKwkJCS0tcXVpZXQgLS1vdXJzIC0tdGhlaXJzIC0tdHJhY2sgLS1uby10cmFjayAtLW1lcmdlCisJCQktLWNvbmZsaWN0PSAtLXBhdGNoCisJCQkiCisJCTs7CisJKikKKwkJX19naXRjb21wICIkKF9fZ2l0X3JlZnMpIgorCQk7OworCWVzYWMKIH0KIAogX2dpdF9jaGVycnkgKCkKQEAgLTg2NywxMCArOTA0LDMxIEBACiAKIAlsb2NhbCBjdXI9IiR7Q09NUF9XT1JEU1tDT01QX0NXT1JEXX0iCiAJY2FzZSAiJGN1ciIgaW4KKwktLWNsZWFudXA9KikKKwkJX19naXRjb21wICJkZWZhdWx0IHN0cmlwIHZlcmJhdGltIHdoaXRlc3BhY2UKKwkJCSIgIiIgIiR7Y3VyIyMtLWNsZWFudXA9fSIKKwkJcmV0dXJuCisJCTs7CisJLS1yZXVzZS1tZXNzYWdlPSopCisJCV9fZ2l0Y29tcCAiJChfX2dpdF9yZWZzKSIgIiIgIiR7Y3VyIyMtLXJldXNlLW1lc3NhZ2U9fSIKKwkJcmV0dXJuCisJCTs7CisJLS1yZWVkaXQtbWVzc2FnZT0qKQorCQlfX2dpdGNvbXAgIiQoX19naXRfcmVmcykiICIiICIke2N1ciMjLS1yZWVkaXQtbWVzc2FnZT19IgorCQlyZXR1cm4KKwkJOzsKKwktLXVudHJhY2tlZC1maWxlcz0qKQorCQlfX2dpdGNvbXAgImFsbCBubyBub3JtYWwiICIiICIke2N1ciMjLS11bnRyYWNrZWQtZmlsZXM9fSIKKwkJcmV0dXJuCisJCTs7CiAJLS0qKQogCQlfX2dpdGNvbXAgIgogCQkJLS1hbGwgLS1hdXRob3I9IC0tc2lnbm9mZiAtLXZlcmlmeSAtLW5vLXZlcmlmeQogCQkJLS1lZGl0IC0tYW1lbmQgLS1pbmNsdWRlIC0tb25seSAtLWludGVyYWN0aXZlCisJCQktLWRyeS1ydW4gLS1yZXVzZS1tZXNzYWdlPSAtLXJlZWRpdC1tZXNzYWdlPQorCQkJLS1yZXNldC1hdXRob3IgLS1maWxlPSAtLW1lc3NhZ2U9IC0tdGVtcGxhdGU9CisJCQktLWNsZWFudXA9IC0tdW50cmFja2VkLWZpbGVzIC0tdW50cmFja2VkLWZpbGVzPQorCQkJLS12ZXJib3NlIC0tcXVpZXQKIAkJCSIKIAkJcmV0dXJuCiAJZXNhYwpAQCAtOTAzLDYgKzk2MSw4IEBACiAJCQktLWludGVyLWh1bmstY29udGV4dD0KIAkJCS0tcGF0aWVuY2UKIAkJCS0tcmF3CisJCQktLWRpcnN0YXQgLS1kaXJzdGF0PSAtLWRpcnN0YXQtYnktZmlsZQorCQkJLS1kaXJzdGF0LWJ5LWZpbGU9IC0tY3VtdWxhdGl2ZQogIgogCiBfZ2l0X2RpZmYgKCkKQEAgLTkyMywxMSArOTgzLDEzIEBACiB9CiAKIF9fZ2l0X21lcmdldG9vbHNfY29tbW9uPSJkaWZmdXNlIGVjbWVyZ2UgZW1lcmdlIGtkaWZmMyBtZWxkIG9wZW5kaWZmCi0JCQl0a2RpZmYgdmltZGlmZiBndmltZGlmZiB4eGRpZmYKKwkJCXRrZGlmZiB2aW1kaWZmIGd2aW1kaWZmIHh4ZGlmZiBhcmF4aXMgcDRtZXJnZQogIgogCiBfZ2l0X2RpZmZ0b29sICgpCiB7CisJX19naXRfaGFzX2RvdWJsZWRhc2ggJiYgcmV0dXJuCisKIAlsb2NhbCBjdXI9IiR7Q09NUF9XT1JEU1tDT01QX0NXT1JEXX0iCiAJY2FzZSAiJGN1ciIgaW4KIAktLXRvb2w9KikKQEAgLTkzNSwxNiArOTk3LDIwIEBACiAJCXJldHVybgogCQk7OwogCS0tKikKLQkJX19naXRjb21wICItLXRvb2w9IgorCQlfX2dpdGNvbXAgIi0tY2FjaGVkIC0tc3RhZ2VkIC0tcGlja2F4ZS1hbGwgLS1waWNrYXhlLXJlZ2V4CisJCQktLWJhc2UgLS1vdXJzIC0tdGhlaXJzCisJCQktLW5vLXJlbmFtZXMgLS1kaWZmLWZpbHRlcj0gLS1maW5kLWNvcGllcy1oYXJkZXIKKwkJCS0tcmVsYXRpdmUgLS1pZ25vcmUtc3VibW9kdWxlcworCQkJLS10b29sPSIKIAkJcmV0dXJuCiAJCTs7CiAJZXNhYwotCUNPTVBSRVBMWT0oKQorCV9fZ2l0X2NvbXBsZXRlX2ZpbGUKIH0KIAogX19naXRfZmV0Y2hfb3B0aW9ucz0iCiAJLS1xdWlldCAtLXZlcmJvc2UgLS1hcHBlbmQgLS11cGxvYWQtcGFjayAtLWZvcmNlIC0ta2VlcCAtLWRlcHRoPQotCS0tdGFncyAtLW5vLXRhZ3MKKwktLXRhZ3MgLS1uby10YWdzIC0tYWxsIC0tcHJ1bmUgLS1kcnktcnVuCiAiCiAKIF9naXRfZmV0Y2ggKCkKQEAgLTEwMzIsMTMgKzEwOTgsMTUgQEAKIAkJCS0tZXh0ZW5kZWQtcmVnZXhwIC0tYmFzaWMtcmVnZXhwIC0tZml4ZWQtc3RyaW5ncwogCQkJLS1maWxlcy13aXRoLW1hdGNoZXMgLS1uYW1lLW9ubHkKIAkJCS0tZmlsZXMtd2l0aG91dC1tYXRjaAorCQkJLS1tYXgtZGVwdGgKIAkJCS0tY291bnQKIAkJCS0tYW5kIC0tb3IgLS1ub3QgLS1hbGwtbWF0Y2gKIAkJCSIKIAkJcmV0dXJuCiAJCTs7CiAJZXNhYwotCUNPTVBSRVBMWT0oKQorCisJX19naXRjb21wICIkKF9fZ2l0X3JlZnMpIgogfQogCiBfZ2l0X2hlbHAgKCkKQEAgLTEwNTAsNyArMTExOCw4IEBACiAJCXJldHVybgogCQk7OwogCWVzYWMKLQlfX2dpdGNvbXAgIiQoX19naXRfYWxsX2NvbW1hbmRzKQorCV9fZ2l0X2NvbXB1dGVfYWxsX2NvbW1hbmRzCisJX19naXRjb21wICIkX19naXRfYWxsX2NvbW1hbmRzCiAJCWF0dHJpYnV0ZXMgY2xpIGNvcmUtdHV0b3JpYWwgY3ZzLW1pZ3JhdGlvbgogCQlkaWZmY29yZSBnaXRrIGdsb3NzYXJ5IGhvb2tzIGlnbm9yZSBtb2R1bGVzCiAJCXJlcG9zaXRvcnktbGF5b3V0IHR1dG9yaWFsIHR1dG9yaWFsLTIKQEAgLTExMTAsNyArMTE3OSw3IEBACiBfX2dpdF9sb2dfY29tbW9uX29wdGlvbnM9IgogCS0tbm90IC0tYWxsCiAJLS1icmFuY2hlcyAtLXRhZ3MgLS1yZW1vdGVzCi0JLS1maXJzdC1wYXJlbnQgLS1uby1tZXJnZXMKKwktLWZpcnN0LXBhcmVudCAtLW1lcmdlcyAtLW5vLW1lcmdlcwogCS0tbWF4LWNvdW50PQogCS0tbWF4LWFnZT0gLS1zaW5jZT0gLS1hZnRlcj0KIAktLW1pbi1hZ2U9IC0tdW50aWw9IC0tYmVmb3JlPQpAQCAtMTE1NSwxOSArMTIyNCwyMyBAQAogCQlfX2dpdGNvbXAgIiRfX2dpdF9sb2dfZGF0ZV9mb3JtYXRzIiAiIiAiJHtjdXIjIy0tZGF0ZT19IgogCQlyZXR1cm4KIAkJOzsKKwktLWRlY29yYXRlPSopCisJCV9fZ2l0Y29tcCAibG9uZyBzaG9ydCIgIiIgIiR7Y3VyIyMtLWRlY29yYXRlPX0iCisJCXJldHVybgorCQk7OwogCS0tKikKIAkJX19naXRjb21wICIKIAkJCSRfX2dpdF9sb2dfY29tbW9uX29wdGlvbnMKIAkJCSRfX2dpdF9sb2dfc2hvcnRsb2dfb3B0aW9ucwogCQkJJF9fZ2l0X2xvZ19naXRrX29wdGlvbnMKIAkJCS0tcm9vdCAtLXRvcG8tb3JkZXIgLS1kYXRlLW9yZGVyIC0tcmV2ZXJzZQotCQkJLS1mb2xsb3cKKwkJCS0tZm9sbG93IC0tZnVsbC1kaWZmCiAJCQktLWFiYnJldi1jb21taXQgLS1hYmJyZXY9CiAJCQktLXJlbGF0aXZlLWRhdGUgLS1kYXRlPQogCQkJLS1wcmV0dHk9IC0tZm9ybWF0PSAtLW9uZWxpbmUKIAkJCS0tY2hlcnJ5LXBpY2sKIAkJCS0tZ3JhcGgKLQkJCS0tZGVjb3JhdGUKKwkJCS0tZGVjb3JhdGUgLS1kZWNvcmF0ZT0KIAkJCS0td2Fsay1yZWZsb2dzCiAJCQktLXBhcmVudHMgLS1jaGlsZHJlbgogCQkJJG1lcmdlCkBAIC0xMTgyLDcgKzEyNTUsNyBAQAogCiBfX2dpdF9tZXJnZV9vcHRpb25zPSIKIAktLW5vLWNvbW1pdCAtLW5vLXN0YXQgLS1sb2cgLS1uby1sb2cgLS1zcXVhc2ggLS1zdHJhdGVneQotCS0tY29tbWl0IC0tc3RhdCAtLW5vLXNxdWFzaCAtLWZmIC0tbm8tZmYKKwktLWNvbW1pdCAtLXN0YXQgLS1uby1zcXVhc2ggLS1mZiAtLW5vLWZmIC0tZmYtb25seQogIgogCiBfZ2l0X21lcmdlICgpCkBAIC0xMjM2LDYgKzEzMDksMjQgQEAKIAlfX2dpdGNvbXAgIi0tdGFncyAtLWFsbCAtLXN0ZGluIgogfQogCitfZ2l0X25vdGVzICgpCit7CisJbG9jYWwgc3ViY29tbWFuZHM9ImVkaXQgc2hvdyIKKwlpZiBbIC16ICIkKF9fZ2l0X2ZpbmRfb25fY21kbGluZSAiJHN1YmNvbW1hbmRzIikiIF07IHRoZW4KKwkJX19naXRjb21wICIkc3ViY29tbWFuZHMiCisJCXJldHVybgorCWZpCisKKwljYXNlICIke0NPTVBfV09SRFNbQ09NUF9DV09SRC0xXX0iIGluCisJLW18LUYpCisJCUNPTVBSRVBMWT0oKQorCQk7OworCSopCisJCV9fZ2l0Y29tcCAiJChfX2dpdF9yZWZzKSIKKwkJOzsKKwllc2FjCit9CisKIF9naXRfcHVsbCAoKQogewogCV9fZ2l0X2NvbXBsZXRlX3N0cmF0ZWd5ICYmIHJldHVybgpAQCAtMTI4NywxNSArMTM3OCwyNiBAQAogCWZpCiAJX19naXRfY29tcGxldGVfc3RyYXRlZ3kgJiYgcmV0dXJuCiAJY2FzZSAiJGN1ciIgaW4KKwktLXdoaXRlc3BhY2U9KikKKwkJX19naXRjb21wICIkX19naXRfd2hpdGVzcGFjZWxpc3QiICIiICIke2N1ciMjLS13aGl0ZXNwYWNlPX0iCisJCXJldHVybgorCQk7OwogCS0tKikKLQkJX19naXRjb21wICItLW9udG8gLS1tZXJnZSAtLXN0cmF0ZWd5IC0taW50ZXJhY3RpdmUiCisJCV9fZ2l0Y29tcCAiCisJCQktLW9udG8gLS1tZXJnZSAtLXN0cmF0ZWd5IC0taW50ZXJhY3RpdmUKKwkJCS0tcHJlc2VydmUtbWVyZ2VzIC0tc3RhdCAtLW5vLXN0YXQKKwkJCS0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGUgLS1pZ25vcmUtZGF0ZQorCQkJLS1pZ25vcmUtd2hpdGVzcGFjZSAtLXdoaXRlc3BhY2U9CisJCQktLWF1dG9zcXVhc2gKKwkJCSIKKwogCQlyZXR1cm4KIAllc2FjCiAJX19naXRjb21wICIkKF9fZ2l0X3JlZnMpIgogfQogCiBfX2dpdF9zZW5kX2VtYWlsX2NvbmZpcm1fb3B0aW9ucz0iYWx3YXlzIG5ldmVyIGF1dG8gY2MgY29tcG9zZSIKLV9fZ2l0X3NlbmRfZW1haWxfc3VwcHJlc3NjY19vcHRpb25zPSJhdXRob3Igc2VsZiBjYyBjY2JvZHkgc29iIGNjY21kIGJvZHkgYWxsIgorX19naXRfc2VuZF9lbWFpbF9zdXBwcmVzc2NjX29wdGlvbnM9ImF1dGhvciBzZWxmIGNjIGJvZHljYyBzb2IgY2NjbWQgYm9keSBhbGwiCiAKIF9naXRfc2VuZF9lbWFpbCAoKQogewpAQCAtMTMzNCw2ICsxNDM2LDM2IEBACiAJQ09NUFJFUExZPSgpCiB9CiAKK19fZ2l0X2NvbmZpZ19nZXRfc2V0X3ZhcmlhYmxlcyAoKQoreworCWxvY2FsIHByZXZ3b3JkIHdvcmQgY29uZmlnX2ZpbGU9IGM9JENPTVBfQ1dPUkQKKwl3aGlsZSBbICRjIC1ndCAxIF07IGRvCisJCXdvcmQ9IiR7Q09NUF9XT1JEU1tjXX0iCisJCWNhc2UgIiR3b3JkIiBpbgorCQktLWdsb2JhbHwtLXN5c3RlbXwtLWZpbGU9KikKKwkJCWNvbmZpZ19maWxlPSIkd29yZCIKKwkJCWJyZWFrCisJCQk7OworCQktZnwtLWZpbGUpCisJCQljb25maWdfZmlsZT0iJHdvcmQgJHByZXZ3b3JkIgorCQkJYnJlYWsKKwkJCTs7CisJCWVzYWMKKwkJcHJldndvcmQ9JHdvcmQKKwkJYz0kKCgtLWMpKQorCWRvbmUKKworCWdpdCAtLWdpdC1kaXI9IiQoX19naXRkaXIpIiBjb25maWcgJGNvbmZpZ19maWxlIC0tbGlzdCAyPi9kZXYvbnVsbCB8CisJd2hpbGUgcmVhZCBsaW5lCisJZG8KKwkJY2FzZSAiJGxpbmUiIGluCisJCSouKj0qKQorCQkJZWNobyAiJHtsaW5lLz0qL30iCisJCQk7OworCQllc2FjCisJZG9uZQorfQorCiBfZ2l0X2NvbmZpZyAoKQogewogCWxvY2FsIGN1cj0iJHtDT01QX1dPUkRTW0NPTVBfQ1dPUkRdfSIKQEAgLTEzNjIsMTAgKzE0OTQsMTIgQEAKIAkJcmV0dXJuCiAJCTs7CiAJcHVsbC50d29oZWFkfHB1bGwub2N0b3B1cykKLQkJX19naXRjb21wICIkKF9fZ2l0X21lcmdlX3N0cmF0ZWdpZXMpIgorCQlfX2dpdF9jb21wdXRlX21lcmdlX3N0cmF0ZWdpZXMKKwkJX19naXRjb21wICIkX19naXRfbWVyZ2Vfc3RyYXRlZ2llcyIKIAkJcmV0dXJuCiAJCTs7Ci0JY29sb3IuYnJhbmNofGNvbG9yLmRpZmZ8Y29sb3IuaW50ZXJhY3RpdmV8Y29sb3Iuc3RhdHVzfGNvbG9yLnVpKQorCWNvbG9yLmJyYW5jaHxjb2xvci5kaWZmfGNvbG9yLmludGVyYWN0aXZlfFwKKwljb2xvci5zaG93YnJhbmNofGNvbG9yLnN0YXR1c3xjb2xvci51aSkKIAkJX19naXRjb21wICJhbHdheXMgbmV2ZXIgYXV0byIKIAkJcmV0dXJuCiAJCTs7CkBAIC0xNDAwLDYgKzE1MzQsMTAgQEAKIAkJX19naXRjb21wICIkX19naXRfc2VuZF9lbWFpbF9zdXBwcmVzc2NjX29wdGlvbnMiCiAJCXJldHVybgogCQk7OworCS0tZ2V0fC0tZ2V0LWFsbHwtLXVuc2V0fC0tdW5zZXQtYWxsKQorCQlfX2dpdGNvbXAgIiQoX19naXRfY29uZmlnX2dldF9zZXRfdmFyaWFibGVzKSIKKwkJcmV0dXJuCisJCTs7CiAJKi4qKQogCQlDT01QUkVQTFk9KCkKIAkJcmV0dXJuCkBAIC0xNDE5LDcgKzE1NTcsNyBAQAogCWJyYW5jaC4qLiopCiAJCWxvY2FsIHBmeD0iJHtjdXIlLip9LiIKIAkJY3VyPSIke2N1ciMjKi59IgotCQlfX2dpdGNvbXAgInJlbW90ZSBtZXJnZSBtZXJnZW9wdGlvbnMiICIkcGZ4IiAiJGN1ciIKKwkJX19naXRjb21wICJyZW1vdGUgbWVyZ2UgbWVyZ2VvcHRpb25zIHJlYmFzZSIgIiRwZngiICIkY3VyIgogCQlyZXR1cm4KIAkJOzsKIAlicmFuY2guKikKQEAgLTE0NTgsNyArMTU5Niw4IEBACiAJcGFnZXIuKikKIAkJbG9jYWwgcGZ4PSIke2N1ciUuKn0uIgogCQljdXI9IiR7Y3VyIyoufSIKLQkJX19naXRjb21wICIkKF9fZ2l0X2FsbF9jb21tYW5kcykiICIkcGZ4IiAiJGN1ciIKKwkJX19naXRfY29tcHV0ZV9hbGxfY29tbWFuZHMKKwkJX19naXRjb21wICIkX19naXRfYWxsX2NvbW1hbmRzIiAiJHBmeCIgIiRjdXIiCiAJCXJldHVybgogCQk7OwogCXJlbW90ZS4qLiopCkBAIC0xNDY2LDcgKzE2MDUsNyBAQAogCQljdXI9IiR7Y3VyIyMqLn0iCiAJCV9fZ2l0Y29tcCAiCiAJCQl1cmwgcHJveHkgZmV0Y2ggcHVzaCBtaXJyb3Igc2tpcERlZmF1bHRVcGRhdGUKLQkJCXJlY2VpdmVwYWNrIHVwbG9hZHBhY2sgdGFnb3B0CisJCQlyZWNlaXZlcGFjayB1cGxvYWRwYWNrIHRhZ29wdCBwdXNodXJsCiAJCQkiICIkcGZ4IiAiJGN1ciIKIAkJcmV0dXJuCiAJCTs7CkBAIC0xNDc5LDEyICsxNjE4LDE0IEBACiAJdXJsLiouKikKIAkJbG9jYWwgcGZ4PSIke2N1ciUuKn0uIgogCQljdXI9IiR7Y3VyIyMqLn0iCi0JCV9fZ2l0Y29tcCAiaW5zdGVhZG9mIiAiJHBmeCIgIiRjdXIiCisJCV9fZ2l0Y29tcCAiaW5zdGVhZE9mIHB1c2hJbnN0ZWFkT2YiICIkcGZ4IiAiJGN1ciIKIAkJcmV0dXJuCiAJCTs7CiAJZXNhYwogCV9fZ2l0Y29tcCAiCisJCWFkZC5pZ25vcmUtZXJyb3JzCiAJCWFsaWFzLgorCQlhcHBseS5pZ25vcmV3aGl0ZXNwYWNlCiAJCWFwcGx5LndoaXRlc3BhY2UKIAkJYnJhbmNoLmF1dG9zZXR1cG1lcmdlCiAJCWJyYW5jaC5hdXRvc2V0dXByZWJhc2UKQEAgLTE1MTAsNiArMTY1MSw3IEBACiAJCWNvbG9yLmludGVyYWN0aXZlLmhlbHAKIAkJY29sb3IuaW50ZXJhY3RpdmUucHJvbXB0CiAJCWNvbG9yLnBhZ2VyCisJCWNvbG9yLnNob3dicmFuY2gKIAkJY29sb3Iuc3RhdHVzCiAJCWNvbG9yLnN0YXR1cy5hZGRlZAogCQljb2xvci5zdGF0dXMuY2hhbmdlZApAQCAtMTcwMSw3ICsxODQzLDcgQEAKIF9naXRfcmVtb3RlICgpCiB7CiAJbG9jYWwgc3ViY29tbWFuZHM9ImFkZCByZW5hbWUgcm0gc2hvdyBwcnVuZSB1cGRhdGUgc2V0LWhlYWQiCi0JbG9jYWwgc3ViY29tbWFuZD0iJChfX2dpdF9maW5kX3N1YmNvbW1hbmQgIiRzdWJjb21tYW5kcyIpIgorCWxvY2FsIHN1YmNvbW1hbmQ9IiQoX19naXRfZmluZF9vbl9jbWRsaW5lICIkc3ViY29tbWFuZHMiKSIKIAlpZiBbIC16ICIkc3ViY29tbWFuZCIgXTsgdGhlbgogCQlfX2dpdGNvbXAgIiRzdWJjb21tYW5kcyIKIAkJcmV0dXJuCkBAIC0xNzEzLDEzICsxODU1LDkgQEAKIAkJOzsKIAl1cGRhdGUpCiAJCWxvY2FsIGkgYz0nJyBJRlM9JCdcbicKLQkJZm9yIGkgaW4gJChnaXQgLS1naXQtZGlyPSIkKF9fZ2l0ZGlyKSIgY29uZmlnIC0tbGlzdCk7IGRvCi0JCQljYXNlICIkaSIgaW4KLQkJCXJlbW90ZXMuKikKLQkJCQlpPSIke2kjcmVtb3Rlcy59IgotCQkJCWM9IiRjICR7aS89Ki99IgotCQkJCTs7Ci0JCQllc2FjCisJCWZvciBpIGluICQoZ2l0IC0tZ2l0LWRpcj0iJChfX2dpdGRpcikiIGNvbmZpZyAtLWdldC1yZWdleHAgInJlbW90ZXNcLi4qIiAyPi9kZXYvbnVsbCk7IGRvCisJCQlpPSIke2kjcmVtb3Rlcy59IgorCQkJYz0iJGMgJHtpLyAqL30iCiAJCWRvbmUKIAkJX19naXRjb21wICIkYyIKIAkJOzsKQEAgLTE3MjksNiArMTg2NywxMSBAQAogCWVzYWMKIH0KIAorX2dpdF9yZXBsYWNlICgpCit7CisJX19naXRjb21wICIkKF9fZ2l0X3JlZnMpIgorfQorCiBfZ2l0X3Jlc2V0ICgpCiB7CiAJX19naXRfaGFzX2RvdWJsZWRhc2ggJiYgcmV0dXJuCkBAIC0xNzM2LDcgKzE4NzksNyBAQAogCWxvY2FsIGN1cj0iJHtDT01QX1dPUkRTW0NPTVBfQ1dPUkRdfSIKIAljYXNlICIkY3VyIiBpbgogCS0tKikKLQkJX19naXRjb21wICItLW1lcmdlIC0tbWl4ZWQgLS1oYXJkIC0tc29mdCIKKwkJX19naXRjb21wICItLW1lcmdlIC0tbWl4ZWQgLS1oYXJkIC0tc29mdCAtLXBhdGNoIgogCQlyZXR1cm4KIAkJOzsKIAllc2FjCkBAIC0xODIxLDYgKzE5NjQsNyBAQAogCQlfX2dpdGNvbXAgIgogCQkJLS1hbGwgLS1yZW1vdGVzIC0tdG9wby1vcmRlciAtLWN1cnJlbnQgLS1tb3JlPQogCQkJLS1saXN0IC0taW5kZXBlbmRlbnQgLS1tZXJnZS1iYXNlIC0tbm8tbmFtZQorCQkJLS1jb2xvciAtLW5vLWNvbG9yCiAJCQktLXNoYTEtbmFtZSAtLXNwYXJzZSAtLXRvcGljcyAtLXJlZmxvZwogCQkJIgogCQlyZXR1cm4KQEAgLTE4MzEsMjAgKzE5NzUsMzIgQEAKIAogX2dpdF9zdGFzaCAoKQogeworCWxvY2FsIGN1cj0iJHtDT01QX1dPUkRTW0NPTVBfQ1dPUkRdfSIKKwlsb2NhbCBzYXZlX29wdHM9Jy0ta2VlcC1pbmRleCAtLW5vLWtlZXAtaW5kZXggLS1xdWlldCAtLXBhdGNoJwogCWxvY2FsIHN1YmNvbW1hbmRzPSdzYXZlIGxpc3Qgc2hvdyBhcHBseSBjbGVhciBkcm9wIHBvcCBjcmVhdGUgYnJhbmNoJwotCWxvY2FsIHN1YmNvbW1hbmQ9IiQoX19naXRfZmluZF9zdWJjb21tYW5kICIkc3ViY29tbWFuZHMiKSIKKwlsb2NhbCBzdWJjb21tYW5kPSIkKF9fZ2l0X2ZpbmRfb25fY21kbGluZSAiJHN1YmNvbW1hbmRzIikiCiAJaWYgWyAteiAiJHN1YmNvbW1hbmQiIF07IHRoZW4KLQkJX19naXRjb21wICIkc3ViY29tbWFuZHMiCisJCWNhc2UgIiRjdXIiIGluCisJCS0tKikKKwkJCV9fZ2l0Y29tcCAiJHNhdmVfb3B0cyIKKwkJCTs7CisJCSopCisJCQlpZiBbIC16ICIkKF9fZ2l0X2ZpbmRfb25fY21kbGluZSAiJHNhdmVfb3B0cyIpIiBdOyB0aGVuCisJCQkJX19naXRjb21wICIkc3ViY29tbWFuZHMiCisJCQllbHNlCisJCQkJQ09NUFJFUExZPSgpCisJCQlmaQorCQkJOzsKKwkJZXNhYwogCWVsc2UKLQkJbG9jYWwgY3VyPSIke0NPTVBfV09SRFNbQ09NUF9DV09SRF19IgogCQljYXNlICIkc3ViY29tbWFuZCwkY3VyIiBpbgogCQlzYXZlLC0tKikKLQkJCV9fZ2l0Y29tcCAiLS1rZWVwLWluZGV4IgorCQkJX19naXRjb21wICIkc2F2ZV9vcHRzIgogCQkJOzsKLQkJYXBwbHksLS0qKQotCQkJX19naXRjb21wICItLWluZGV4IgorCQlhcHBseSwtLSp8cG9wLC0tKikKKwkJCV9fZ2l0Y29tcCAiLS1pbmRleCAtLXF1aWV0IgogCQkJOzsKLQkJc2hvdywtLSp8ZHJvcCwtLSp8cG9wLC0tKnxicmFuY2gsLS0qKQorCQlzaG93LC0tKnxkcm9wLC0tKnxicmFuY2gsLS0qKQogCQkJQ09NUFJFUExZPSgpCiAJCQk7OwogCQlzaG93LCp8YXBwbHksKnxkcm9wLCp8cG9wLCp8YnJhbmNoLCopCkBAIC0xODYzLDcgKzIwMTksNyBAQAogCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgogCiAJbG9jYWwgc3ViY29tbWFuZHM9ImFkZCBzdGF0dXMgaW5pdCB1cGRhdGUgc3VtbWFyeSBmb3JlYWNoIHN5bmMiCi0JaWYgWyAteiAiJChfX2dpdF9maW5kX3N1YmNvbW1hbmQgIiRzdWJjb21tYW5kcyIpIiBdOyB0aGVuCisJaWYgWyAteiAiJChfX2dpdF9maW5kX29uX2NtZGxpbmUgIiRzdWJjb21tYW5kcyIpIiBdOyB0aGVuCiAJCWxvY2FsIGN1cj0iJHtDT01QX1dPUkRTW0NPTVBfQ1dPUkRdfSIKIAkJY2FzZSAiJGN1ciIgaW4KIAkJLS0qKQpAQCAtMTg4Myw5ICsyMDM5LDkgQEAKIAkJaW5pdCBmZXRjaCBjbG9uZSByZWJhc2UgZGNvbW1pdCBsb2cgZmluZC1yZXYKIAkJc2V0LXRyZWUgY29tbWl0LWRpZmYgaW5mbyBjcmVhdGUtaWdub3JlIHByb3BnZXQKIAkJcHJvcGxpc3Qgc2hvdy1pZ25vcmUgc2hvdy1leHRlcm5hbHMgYnJhbmNoIHRhZyBibGFtZQotCQltaWdyYXRlCisJCW1pZ3JhdGUgbWtkaXJzIHJlc2V0IGdjCiAJCSIKLQlsb2NhbCBzdWJjb21tYW5kPSIkKF9fZ2l0X2ZpbmRfc3ViY29tbWFuZCAiJHN1YmNvbW1hbmRzIikiCisJbG9jYWwgc3ViY29tbWFuZD0iJChfX2dpdF9maW5kX29uX2NtZGxpbmUgIiRzdWJjb21tYW5kcyIpIgogCWlmIFsgLXogIiRzdWJjb21tYW5kIiBdOyB0aGVuCiAJCV9fZ2l0Y29tcCAiJHN1YmNvbW1hbmRzIgogCWVsc2UKQEAgLTE5MzAsNyArMjA4Niw3IEBACiAJCQlfX2dpdGNvbXAgIi0tc3RkaW4gJGNtdF9vcHRzICRmY19vcHRzIgogCQkJOzsKIAkJY3JlYXRlLWlnbm9yZSwtLSp8cHJvcGdldCwtLSp8cHJvcGxpc3QsLS0qfHNob3ctaWdub3JlLC0tKnxcCi0JCXNob3ctZXh0ZXJuYWxzLC0tKikKKwkJc2hvdy1leHRlcm5hbHMsLS0qfG1rZGlycywtLSopCiAJCQlfX2dpdGNvbXAgIi0tcmV2aXNpb249IgogCQkJOzsKIAkJbG9nLC0tKikKQEAgLTE5NjcsNiArMjEyMyw5IEBACiAJCQkJLS1uby1hdXRoLWNhY2hlIC0tdXNlcm5hbWU9CiAJCQkJIgogCQkJOzsKKwkJcmVzZXQsLS0qKQorCQkJX19naXRjb21wICItLXJldmlzaW9uPSAtLXBhcmVudCIKKwkJCTs7CiAJCSopCiAJCQlDT01QUkVQTFk9KCkKIAkJCTs7CkBAIC0yMDM4LDcgKzIxOTcsOCBAQAogCQkJLS1oZWxwCiAJCQkiCiAJCQk7OwotCQkqKSAgICAgX19naXRjb21wICIkKF9fZ2l0X3BvcmNlbGFpbl9jb21tYW5kcykgJChfX2dpdF9hbGlhc2VzKSIgOzsKKwkJKikgICAgIF9fZ2l0X2NvbXB1dGVfcG9yY2VsYWluX2NvbW1hbmRzCisJCSAgICAgICBfX2dpdGNvbXAgIiRfX2dpdF9wb3JjZWxhaW5fY29tbWFuZHMgJChfX2dpdF9hbGlhc2VzKSIgOzsKIAkJZXNhYwogCQlyZXR1cm4KIAlmaQpAQCAtMjA4MCwxMCArMjI0MCwxMiBAQAogCW1lcmdlLWJhc2UpICBfZ2l0X21lcmdlX2Jhc2UgOzsKIAltdikgICAgICAgICAgX2dpdF9tdiA7OwogCW5hbWUtcmV2KSAgICBfZ2l0X25hbWVfcmV2IDs7CisJbm90ZXMpICAgICAgIF9naXRfbm90ZXMgOzsKIAlwdWxsKSAgICAgICAgX2dpdF9wdWxsIDs7CiAJcHVzaCkgICAgICAgIF9naXRfcHVzaCA7OwogCXJlYmFzZSkgICAgICBfZ2l0X3JlYmFzZSA7OwogCXJlbW90ZSkgICAgICBfZ2l0X3JlbW90ZSA7OworCXJlcGxhY2UpICAgICBfZ2l0X3JlcGxhY2UgOzsKIAlyZXNldCkgICAgICAgX2dpdF9yZXNldCA7OwogCXJldmVydCkgICAgICBfZ2l0X3JldmVydCA7OwogCXJtKSAgICAgICAgICBfZ2l0X3JtIDs7CmRpZmYgLS1naXQgYS9jb250cmliL2VtYWNzL2dpdC1ibGFtZS5lbCBiL2NvbnRyaWIvZW1hY3MvZ2l0LWJsYW1lLmVsCmluZGV4IDRmYTcwYzUuLjdmNGM3OTIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvZW1hY3MvZ2l0LWJsYW1lLmVsCisrKyBiL2NvbnRyaWIvZW1hY3MvZ2l0LWJsYW1lLmVsCkBAIC04MCw2ICs4MCw1NyBAQAogCiAoZXZhbC13aGVuLWNvbXBpbGUgKHJlcXVpcmUgJ2NsKSkJCQkgICAgICA7IHRvIHVzZSBgcHVzaCcsIGBwb3AnCiAKKyhkZWZmYWNlIGdpdC1ibGFtZS1wcmVmaXgtZmFjZQorICAnKCgoKGJhY2tncm91bmQgZGFyaykpICg6Zm9yZWdyb3VuZCAiZ3JheSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOmJhY2tncm91bmQgImJsYWNrIikpCisgICAgKCgoYmFja2dyb3VuZCBsaWdodCkpICg6Zm9yZWdyb3VuZCAiZ3JheSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDpiYWNrZ3JvdW5kICJ3aGl0ZSIpKQorICAgICh0ICg6d2VpZ2h0IGJvbGQpKSkKKyAgIlRoZSBmYWNlIHVzZWQgZm9yIHRoZSBoYXNoIHByZWZpeC4iCisgIDpncm91cCAnZ2l0LWJsYW1lKQorCisoZGVmZ3JvdXAgZ2l0LWJsYW1lIG5pbAorICAiQSBtaW5vciBtb2RlIHNob3dpbmcgR2l0IGJsYW1lIGluZm9ybWF0aW9uLiIKKyAgOmdyb3VwICdnaXQKKyAgOmxpbmsgJyhmdW5jdGlvbi1saW5rIGdpdC1ibGFtZS1tb2RlKSkKKworCisoZGVmY3VzdG9tIGdpdC1ibGFtZS11c2UtY29sb3JzIHQKKyAgIlVzZSBjb2xvcnMgdG8gaW5kaWNhdGUgY29tbWl0cyBpbiBgZ2l0LWJsYW1lLW1vZGUnLiIKKyAgOnR5cGUgJ2Jvb2xlYW4KKyAgOmdyb3VwICdnaXQtYmxhbWUpCisKKyhkZWZjdXN0b20gZ2l0LWJsYW1lLXByZWZpeC1mb3JtYXQKKyAgIiVoICUyMEE6IgorICAiVGhlIGZvcm1hdCBvZiB0aGUgcHJlZml4IGFkZGVkIHRvIGVhY2ggbGluZSBpbiBgZ2l0LWJsYW1lJworbW9kZS4gVGhlIGZvcm1hdCBpcyBwYXNzZWQgdG8gYGZvcm1hdC1zcGVjJyB3aXRoIHRoZSBmb2xsb3dpbmcgZm9ybWF0IGtleXM6CisKKyAgJWggLSB0aGUgYWJicmV2aWF0ZWQgaGFzaAorICAlSCAtIHRoZSBmdWxsIGhhc2gKKyAgJWEgLSB0aGUgYXV0aG9yIG5hbWUKKyAgJUEgLSB0aGUgYXV0aG9yIGVtYWlsCisgICVjIC0gdGhlIGNvbW1pdHRlciBuYW1lCisgICVDIC0gdGhlIGNvbW1pdHRlciBlbWFpbAorICAlcyAtIHRoZSBjb21taXQgc3VtbWFyeQorIgorICA6Z3JvdXAgJ2dpdC1ibGFtZSkKKworKGRlZmN1c3RvbSBnaXQtYmxhbWUtbW91c2VvdmVyLWZvcm1hdAorICAiJWggJWEgJUE6ICVzIgorICAiVGhlIGZvcm1hdCBvZiB0aGUgZGVzY3JpcHRpb24gc2hvd24gd2hlbiBwb2ludGluZyBhdCBhIGxpbmUgaW4KK2BnaXQtYmxhbWUnIG1vZGUuIFRoZSBmb3JtYXQgc3RyaW5nIGlzIHBhc3NlZCB0byBgZm9ybWF0LXNwZWMnCit3aXRoIHRoZSBmb2xsb3dpbmcgZm9ybWF0IGtleXM6CisKKyAgJWggLSB0aGUgYWJicmV2aWF0ZWQgaGFzaAorICAlSCAtIHRoZSBmdWxsIGhhc2gKKyAgJWEgLSB0aGUgYXV0aG9yIG5hbWUKKyAgJUEgLSB0aGUgYXV0aG9yIGVtYWlsCisgICVjIC0gdGhlIGNvbW1pdHRlciBuYW1lCisgICVDIC0gdGhlIGNvbW1pdHRlciBlbWFpbAorICAlcyAtIHRoZSBjb21taXQgc3VtbWFyeQorIgorICA6Z3JvdXAgJ2dpdC1ibGFtZSkKKwogCiAoZGVmdW4gZ2l0LWJsYW1lLWNvbG9yLXNjYWxlICgmcmVzdCBlbGVtZW50cykKICAgIkdpdmVuIGEgbGlzdCwgcmV0dXJucyBhIGxpc3Qgb2YgdHJpcGxlcyBmb3JtZWQgd2l0aCBlYWNoCkBAIC0zMDIsNzIgKzM1Myw2OSBAQAogICAgICAgICAgICAgICAgKHNyYy1saW5lIChzdHJpbmctdG8tbnVtYmVyIChtYXRjaC1zdHJpbmcgMikpKQogICAgICAgICAgICAgICAgKHJlcy1saW5lIChzdHJpbmctdG8tbnVtYmVyIChtYXRjaC1zdHJpbmcgMykpKQogICAgICAgICAgICAgICAgKG51bS1saW5lcyAoc3RyaW5nLXRvLW51bWJlciAobWF0Y2gtc3RyaW5nIDQpKSkpCi0gICAgICAgICAgIChzZXRxIGdpdC1ibGFtZS1jdXJyZW50Ci0gICAgICAgICAgICAgICAgIChpZiAoc3RyaW5nPSBoYXNoICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIikKLSAgICAgICAgICAgICAgICAgICAgIG5pbAotICAgICAgICAgICAgICAgICAgIChnaXQtYmxhbWUtbmV3LWNvbW1pdAotICAgICAgICAgICAgICAgICAgICBoYXNoIHNyYy1saW5lIHJlcy1saW5lIG51bS1saW5lcykpKSkKLSAgICAgICAgIChkZWxldGUtcmVnaW9uIChwb2ludCkgKG1hdGNoLWVuZCAwKSkKLSAgICAgICAgIHQpCi0gICAgICAgICgobG9va2luZy1hdCAiZmlsZW5hbWUgXFwoLitcXClcbiIpCi0gICAgICAgICAobGV0ICgoZmlsZW5hbWUgKG1hdGNoLXN0cmluZyAxKSkpCi0gICAgICAgICAgIChnaXQtYmxhbWUtYWRkLWluZm8gImZpbGVuYW1lIiBmaWxlbmFtZSkpCi0gICAgICAgICAoZGVsZXRlLXJlZ2lvbiAocG9pbnQpIChtYXRjaC1lbmQgMCkpCisgICAgICAgICAgIChkZWxldGUtcmVnaW9uIChwb2ludCkgKG1hdGNoLWVuZCAwKSkKKyAgICAgICAgICAgKHNldHEgZ2l0LWJsYW1lLWN1cnJlbnQgKGxpc3QgKGdpdC1ibGFtZS1uZXctY29tbWl0IGhhc2gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYy1saW5lIHJlcy1saW5lIG51bS1saW5lcykpKQogICAgICAgICAgdCkKICAgICAgICAgKChsb29raW5nLWF0ICJcXChbYS16LV0rXFwpIFxcKC4rXFwpXG4iKQogICAgICAgICAgKGxldCAoKGtleSAobWF0Y2gtc3RyaW5nIDEpKQogICAgICAgICAgICAgICAgKHZhbHVlIChtYXRjaC1zdHJpbmcgMikpKQotICAgICAgICAgICAoZ2l0LWJsYW1lLWFkZC1pbmZvIGtleSB2YWx1ZSkpCi0gICAgICAgICAoZGVsZXRlLXJlZ2lvbiAocG9pbnQpIChtYXRjaC1lbmQgMCkpCi0gICAgICAgICB0KQotICAgICAgICAoKGxvb2tpbmctYXQgImJvdW5kYXJ5XG4iKQotICAgICAgICAgKHNldHEgZ2l0LWJsYW1lLWN1cnJlbnQgbmlsKQotICAgICAgICAgKGRlbGV0ZS1yZWdpb24gKHBvaW50KSAobWF0Y2gtZW5kIDApKQorICAgICAgICAgICAoZGVsZXRlLXJlZ2lvbiAocG9pbnQpIChtYXRjaC1lbmQgMCkpCisgICAgICAgICAgIChnaXQtYmxhbWUtYWRkLWluZm8gKGNhciBnaXQtYmxhbWUtY3VycmVudCkga2V5IHZhbHVlKQorICAgICAgICAgICAod2hlbiAoc3RyaW5nPSBrZXkgImZpbGVuYW1lIikKKyAgICAgICAgICAgICAoZ2l0LWJsYW1lLWNyZWF0ZS1vdmVybGF5IChjYXIgZ2l0LWJsYW1lLWN1cnJlbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FkZHIgZ2l0LWJsYW1lLWN1cnJlbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FkZGRyIGdpdC1ibGFtZS1jdXJyZW50KSkKKyAgICAgICAgICAgICAoc2V0cSBnaXQtYmxhbWUtY3VycmVudCBuaWwpKSkKICAgICAgICAgIHQpCiAgICAgICAgICh0CiAgICAgICAgICBuaWwpKSkKIAotKGRlZnVuIGdpdC1ibGFtZS1uZXctY29tbWl0IChoYXNoIHNyYy1saW5lIHJlcy1saW5lIG51bS1saW5lcykKKyhkZWZ1biBnaXQtYmxhbWUtbmV3LWNvbW1pdCAoaGFzaCkKKyAgKHdpdGgtY3VycmVudC1idWZmZXIgZ2l0LWJsYW1lLWZpbGUKKyAgICAob3IgKGdldGhhc2ggaGFzaCBnaXQtYmxhbWUtY2FjaGUpCisgICAgICAgIDs7IEFzc2lnbiBhIHJhbmRvbSBjb2xvciB0byBlYWNoIG5ldyBjb21taXQgaW5mbworICAgICAgICA7OyBUYWtlIGNhcmUgbm90IHRvIHNlbGVjdCB0aGUgc2FtZSBjb2xvciBtdWx0aXBsZSB0aW1lcworICAgICAgICAobGV0KiAoKGNvbG9yIChpZiBnaXQtYmxhbWUtY29sb3JzCisgICAgICAgICAgICAgICAgICAgICAgICAgIChnaXQtYmxhbWUtcmFuZG9tLXBvcCBnaXQtYmxhbWUtY29sb3JzKQorICAgICAgICAgICAgICAgICAgICAgICAgZ2l0LWJsYW1lLWFuY2llbnQtY29sb3IpKQorICAgICAgICAgICAgICAgKGluZm8gYCgsaGFzaCAoY29sb3IgLiAsY29sb3IpKSkpCisgICAgICAgICAgKHB1dGhhc2ggaGFzaCBpbmZvIGdpdC1ibGFtZS1jYWNoZSkKKyAgICAgICAgICBpbmZvKSkpKQorCisoZGVmdW4gZ2l0LWJsYW1lLWNyZWF0ZS1vdmVybGF5IChpbmZvIHN0YXJ0LWxpbmUgbnVtLWxpbmVzKQogICAoc2F2ZS1leGN1cnNpb24KICAgICAoc2V0LWJ1ZmZlciBnaXQtYmxhbWUtZmlsZSkKLSAgICAobGV0ICgoaW5mbyAoZ2V0aGFzaCBoYXNoIGdpdC1ibGFtZS1jYWNoZSkpCi0gICAgICAgICAgKGluaGliaXQtcG9pbnQtbW90aW9uLWhvb2tzIHQpCisgICAgKGxldCAoKGluaGliaXQtcG9pbnQtbW90aW9uLWhvb2tzIHQpCiAgICAgICAgICAgKGluaGliaXQtbW9kaWZpY2F0aW9uLWhvb2tzIHQpKQotICAgICAgKHdoZW4gKG5vdCBpbmZvKQotCTs7IEFzc2lnbiBhIHJhbmRvbSBjb2xvciB0byBlYWNoIG5ldyBjb21taXQgaW5mbwotCTs7IFRha2UgY2FyZSBub3QgdG8gc2VsZWN0IHRoZSBzYW1lIGNvbG9yIG11bHRpcGxlIHRpbWVzCi0JKGxldCAoKGNvbG9yIChpZiBnaXQtYmxhbWUtY29sb3JzCi0JCQkgKGdpdC1ibGFtZS1yYW5kb20tcG9wIGdpdC1ibGFtZS1jb2xvcnMpCi0JCSAgICAgICBnaXQtYmxhbWUtYW5jaWVudC1jb2xvcikpKQotICAgICAgICAgIChzZXRxIGluZm8gKGxpc3QgaGFzaCBzcmMtbGluZSByZXMtbGluZSBudW0tbGluZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChnaXQtZGVzY3JpYmUtY29tbWl0IGhhc2gpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoY29ucyAnY29sb3IgY29sb3IpKSkpCi0gICAgICAgIChwdXRoYXNoIGhhc2ggaW5mbyBnaXQtYmxhbWUtY2FjaGUpKQotICAgICAgKGdvdG8tbGluZSByZXMtbGluZSkKLSAgICAgICh3aGlsZSAoPiBudW0tbGluZXMgMCkKLSAgICAgICAgKGlmIChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpICdnaXQtYmxhbWUpCi0gICAgICAgICAgICAoZm9yd2FyZC1saW5lKQotICAgICAgICAgIChsZXQqICgoc3RhcnQgKHBvaW50KSkKLSAgICAgICAgICAgICAgICAgKGVuZCAocHJvZ24gKGZvcndhcmQtbGluZSAxKSAocG9pbnQpKSkKLSAgICAgICAgICAgICAgICAgKG92bCAobWFrZS1vdmVybGF5IHN0YXJ0IGVuZCkpKQotICAgICAgICAgICAgKHB1c2ggb3ZsIGdpdC1ibGFtZS1vdmVybGF5cykKLSAgICAgICAgICAgIChvdmVybGF5LXB1dCBvdmwgJ2dpdC1ibGFtZSBpbmZvKQotICAgICAgICAgICAgKG92ZXJsYXktcHV0IG92bCAnaGVscC1lY2hvIGhhc2gpCisgICAgICAoZ290by1saW5lIHN0YXJ0LWxpbmUpCisgICAgICAobGV0KiAoKHN0YXJ0IChwb2ludCkpCisgICAgICAgICAgICAgKGVuZCAocHJvZ24gKGZvcndhcmQtbGluZSBudW0tbGluZXMpIChwb2ludCkpKQorICAgICAgICAgICAgIChvdmwgKG1ha2Utb3ZlcmxheSBzdGFydCBlbmQpKQorICAgICAgICAgICAgIChoYXNoIChjYXIgaW5mbykpCisgICAgICAgICAgICAgKHNwZWMgYCgoP2ggLiAsKHN1YnN0cmluZyBoYXNoIDAgNikpCisgICAgICAgICAgICAgICAgICAgICAoP0ggLiAsaGFzaCkKKyAgICAgICAgICAgICAgICAgICAgICg/YSAuICwoZ2l0LWJsYW1lLWdldC1pbmZvIGluZm8gJ2F1dGhvcikpCisgICAgICAgICAgICAgICAgICAgICAoP0EgLiAsKGdpdC1ibGFtZS1nZXQtaW5mbyBpbmZvICdhdXRob3ItbWFpbCkpCisgICAgICAgICAgICAgICAgICAgICAoP2MgLiAsKGdpdC1ibGFtZS1nZXQtaW5mbyBpbmZvICdjb21taXR0ZXIpKQorICAgICAgICAgICAgICAgICAgICAgKD9DIC4gLChnaXQtYmxhbWUtZ2V0LWluZm8gaW5mbyAnY29tbWl0dGVyLW1haWwpKQorICAgICAgICAgICAgICAgICAgICAgKD9zIC4gLChnaXQtYmxhbWUtZ2V0LWluZm8gaW5mbyAnc3VtbWFyeSkpKSkpCisgICAgICAgIChwdXNoIG92bCBnaXQtYmxhbWUtb3ZlcmxheXMpCisgICAgICAgIChvdmVybGF5LXB1dCBvdmwgJ2dpdC1ibGFtZSBpbmZvKQorICAgICAgICAob3ZlcmxheS1wdXQgb3ZsICdoZWxwLWVjaG8KKyAgICAgICAgICAgICAgICAgICAgIChmb3JtYXQtc3BlYyBnaXQtYmxhbWUtbW91c2VvdmVyLWZvcm1hdCBzcGVjKSkKKyAgICAgICAgKGlmIGdpdC1ibGFtZS11c2UtY29sb3JzCiAgICAgICAgICAgICAob3ZlcmxheS1wdXQgb3ZsICdmYWNlIChsaXN0IDpiYWNrZ3JvdW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZHIgKGFzc3EgJ2NvbG9yIChudGhjZHIgNSBpbmZvKSkpKSkKLSAgICAgICAgICAgIDs7IHRoZSBwb2ludC1lbnRlcmVkIHByb3BlcnR5IGRvZXNuJ3Qgc2VlbSB0byB3b3JrIGluIG92ZXJsYXlzCi0gICAgICAgICAgICA7OyhvdmVybGF5LXB1dCBvdmwgJ3BvaW50LWVudGVyZWQKLSAgICAgICAgICAgIDs7ICAgICAgICAgICAgIGAobGFtYmRhICh4IHkpIChnaXQtYmxhbWUtaWRlbnRpZnkgLGhhc2gpKSkKLSAgICAgICAgICAgIChsZXQgKChtb2RpZmllZCAoYnVmZmVyLW1vZGlmaWVkLXApKSkKLSAgICAgICAgICAgICAgKHB1dC10ZXh0LXByb3BlcnR5IChpZiAoPSBzdGFydCAxKSBzdGFydCAoMS0gc3RhcnQpKSAoMS0gZW5kKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BvaW50LWVudGVyZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAobGFtYmRhICh4IHkpIChnaXQtYmxhbWUtaWRlbnRpZnkgLGhhc2gpKSkKLSAgICAgICAgICAgICAgKHNldC1idWZmZXItbW9kaWZpZWQtcCBtb2RpZmllZCkpKSkKLSAgICAgICAgKHNldHEgbnVtLWxpbmVzICgxLSBudW0tbGluZXMpKSkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNkciAoYXNzcSAnY29sb3IgKGNkciBpbmZvKSkpKSkpCisgICAgICAgIChvdmVybGF5LXB1dCBvdmwgJ2xpbmUtcHJlZml4CisgICAgICAgICAgICAgICAgICAgICAocHJvcGVydGl6ZSAoZm9ybWF0LXNwZWMgZ2l0LWJsYW1lLXByZWZpeC1mb3JtYXQgc3BlYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYWNlICdnaXQtYmxhbWUtcHJlZml4LWZhY2UpKSkpKSkKIAotKGRlZnVuIGdpdC1ibGFtZS1hZGQtaW5mbyAoa2V5IHZhbHVlKQotICAoaWYgZ2l0LWJsYW1lLWN1cnJlbnQKLSAgICAgIChuY29uYyBnaXQtYmxhbWUtY3VycmVudCAobGlzdCAoY29ucyAoaW50ZXJuIGtleSkgdmFsdWUpKSkpKQorKGRlZnVuIGdpdC1ibGFtZS1hZGQtaW5mbyAoaW5mbyBrZXkgdmFsdWUpCisgIChuY29uYyBpbmZvIChsaXN0IChjb25zIChpbnRlcm4ga2V5KSB2YWx1ZSkpKSkKKworKGRlZnVuIGdpdC1ibGFtZS1nZXQtaW5mbyAoaW5mbyBrZXkpCisgIChjZHIgKGFzc3Ega2V5IChjZHIgaW5mbykpKSkKIAogKGRlZnVuIGdpdC1ibGFtZS1jdXJyZW50LWNvbW1pdCAoKQogICAobGV0ICgoaW5mbyAoZ2V0LWNoYXItcHJvcGVydHkgKHBvaW50KSAnZ2l0LWJsYW1lKSkpCmRpZmYgLS1naXQgYS9jb250cmliL2VtYWNzL2dpdC5lbCBiL2NvbnRyaWIvZW1hY3MvZ2l0LmVsCmluZGV4IGVhY2U5YzEuLjIxNDkzMGEgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvZW1hY3MvZ2l0LmVsCisrKyBiL2NvbnRyaWIvZW1hY3MvZ2l0LmVsCkBAIC00MjksMTYgKzQyOSwxOSBAQAogICAgIChnaXQtZ2V0LXN0cmluZy1zaGExCiAgICAgIChnaXQtY2FsbC1wcm9jZXNzLXN0cmluZy1kaXNwbGF5LWVycm9yICJ3cml0ZS10cmVlIikpKSkKIAotKGRlZnVuIGdpdC1jb21taXQtdHJlZSAoYnVmZmVyIHRyZWUgaGVhZCkKLSAgIkNhbGwgZ2l0LWNvbW1pdC10cmVlIHdpdGggYnVmZmVyIGFzIGlucHV0IGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBjb21taXQgU0hBMS4iCisoZGVmdW4gZ2l0LWNvbW1pdC10cmVlIChidWZmZXIgdHJlZSBwYXJlbnQpCisgICJDcmVhdGUgYSBjb21taXQgYW5kIHBvc3NpYmx5IHVwZGF0ZSBIRUFELgorQ3JlYXRlIGEgY29tbWl0IHdpdGggdGhlIG1lc3NhZ2UgaW4gQlVGRkVSIHVzaW5nIHRoZSB0cmVlIHdpdGggaGFzaCBUUkVFLgorVXNlIFBBUkVOVCBhcyB0aGUgcGFyZW50IG9mIHRoZSBuZXcgY29tbWl0LiBJZiBQQVJFTlQgaXMgdGhlIGN1cnJlbnQgXCJIRUFEXCIsCit1cGRhdGUgdGhlIFwiSEVBRFwiIHJlZmVyZW5jZSB0byB0aGUgbmV3IGNvbW1pdC4iCiAgIChsZXQgKChhdXRob3ItbmFtZSAoZ2l0LWdldC1jb21taXR0ZXItbmFtZSkpCiAgICAgICAgIChhdXRob3ItZW1haWwgKGdpdC1nZXQtY29tbWl0dGVyLWVtYWlsKSkKICAgICAgICAgKHN1YmplY3QgImNvbW1pdCAoaW5pdGlhbCk6ICIpCiAgICAgICAgIGF1dGhvci1kYXRlIGxvZy1zdGFydCBsb2ctZW5kIGFyZ3MgY29kaW5nLXN5c3RlbS1mb3Itd3JpdGUpCi0gICAgKHdoZW4gaGVhZAorICAgICh3aGVuIHBhcmVudAogICAgICAgKHNldHEgc3ViamVjdCAiY29tbWl0OiAiKQogICAgICAgKHB1c2ggIi1wIiBhcmdzKQotICAgICAgKHB1c2ggaGVhZCBhcmdzKSkKKyAgICAgIChwdXNoIHBhcmVudCBhcmdzKSkKICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBidWZmZXIKICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCiAgICAgICAoaWYKQEAgLTQ3NCw3ICs0NzcsNyBAQAogICAgICAgICAgICAgICAoYXBwbHkgIydnaXQtcnVuLWNvbW1hbmQtcmVnaW9uCiAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgbG9nLXN0YXJ0IGxvZy1lbmQgZW52CiAgICAgICAgICAgICAgICAgICAgICAiY29tbWl0LXRyZWUiIHRyZWUgKG5yZXZlcnNlIGFyZ3MpKSkpKSkKLSAgICAgICh3aGVuIGNvbW1pdCAoZ2l0LXVwZGF0ZS1yZWYgIkhFQUQiIGNvbW1pdCBoZWFkIHN1YmplY3QpKQorICAgICAgKHdoZW4gY29tbWl0IChnaXQtdXBkYXRlLXJlZiAiSEVBRCIgY29tbWl0IHBhcmVudCBzdWJqZWN0KSkKICAgICAgIGNvbW1pdCkpKQogCiAoZGVmdW4gZ2l0LWVtcHR5LWRiLXAgKCkKQEAgLTEwNDMsNyArMTA0Niw3IEBACiAoZGVmdW4gZ2l0LWFkZC1maWxlICgpCiAgICJBZGQgbWFya2VkIGZpbGUocykgdG8gdGhlIGluZGV4IGNhY2hlLiIKICAgKGludGVyYWN0aXZlKQotICAobGV0ICgoZmlsZXMgKGdpdC1nZXQtZmlsZW5hbWVzIChnaXQtbWFya2VkLWZpbGVzLXN0YXRlICd1bmtub3duICdpZ25vcmVkKSkpKQorICAobGV0ICgoZmlsZXMgKGdpdC1nZXQtZmlsZW5hbWVzIChnaXQtbWFya2VkLWZpbGVzLXN0YXRlICd1bmtub3duICdpZ25vcmVkICd1bm1lcmdlZCkpKSkKICAgICA7OyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIGRpcmVjdG9yaWVzCiAgICAgKHVubGVzcyBmaWxlcwogICAgICAgKHB1c2ggKGZpbGUtcmVsYXRpdmUtbmFtZSAocmVhZC1maWxlLW5hbWUgIkZpbGUgdG8gYWRkOiAiIG5pbCBuaWwgdCkpIGZpbGVzKSkKQEAgLTExMTYsMTUgKzExMTksNiBAQAogICAgICAgICAgICAgICAod2hlbiBidWZmZXIgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmZmVyIChyZXZlcnQtYnVmZmVyIHQgdCB0KSkpKSkKICAgICAgICAgICAoZ2l0LXN1Y2Nlc3MtbWVzc2FnZSAiUmV2ZXJ0ZWQiIG5hbWVzKSkpKSkpCiAKLShkZWZ1biBnaXQtcmVzb2x2ZS1maWxlICgpCi0gICJSZXNvbHZlIGNvbmZsaWN0cyBpbiBtYXJrZWQgZmlsZShzKS4iCi0gIChpbnRlcmFjdGl2ZSkKLSAgKGxldCAoKGZpbGVzIChnaXQtZ2V0LWZpbGVuYW1lcyAoZ2l0LW1hcmtlZC1maWxlcy1zdGF0ZSAndW5tZXJnZWQpKSkpCi0gICAgKHdoZW4gZmlsZXMKLSAgICAgICh3aGVuIChhcHBseSAnZ2l0LWNhbGwtcHJvY2Vzcy1kaXNwbGF5LWVycm9yICJ1cGRhdGUtaW5kZXgiICItLSIgZmlsZXMpCi0gICAgICAgIChnaXQtdXBkYXRlLXN0YXR1cy1maWxlcyBmaWxlcykKLSAgICAgICAgKGdpdC1zdWNjZXNzLW1lc3NhZ2UgIlJlc29sdmVkIiBmaWxlcykpKSkpCi0KIChkZWZ1biBnaXQtcmVtb3ZlLWhhbmRsZWQgKCkKICAgIlJlbW92ZSBoYW5kbGVkIGZpbGVzIGZyb20gdGhlIHN0YXR1cyBsaXN0LiIKICAgKGludGVyYWN0aXZlKQpAQCAtMTU1Myw3ICsxNTQ3LDYgQEAKICAgICAoZGVmaW5lLWtleSBtYXAgIlAiICAgJ2dpdC1wcmV2LXVubWVyZ2VkLWZpbGUpCiAgICAgKGRlZmluZS1rZXkgbWFwICJxIiAgICdnaXQtc3RhdHVzLXF1aXQpCiAgICAgKGRlZmluZS1rZXkgbWFwICJyIiAgICdnaXQtcmVtb3ZlLWZpbGUpCi0gICAgKGRlZmluZS1rZXkgbWFwICJSIiAgICdnaXQtcmVzb2x2ZS1maWxlKQogICAgIChkZWZpbmUta2V5IG1hcCAidCIgICAgdG9nZ2xlLW1hcCkKICAgICAoZGVmaW5lLWtleSBtYXAgIlQiICAgJ2dpdC10b2dnbGUtYWxsLW1hcmtzKQogICAgIChkZWZpbmUta2V5IG1hcCAidSIgICAnZ2l0LXVubWFyay1maWxlKQpAQCAtMTU5NSw3ICsxNTg4LDYgQEAKICAgICAgICgiTWVyZ2UiCiAJWyJOZXh0IFVubWVyZ2VkIEZpbGUiIGdpdC1uZXh0LXVubWVyZ2VkLWZpbGUgdF0KIAlbIlByZXYgVW5tZXJnZWQgRmlsZSIgZ2l0LXByZXYtdW5tZXJnZWQtZmlsZSB0XQotCVsiTWFyayBhcyBSZXNvbHZlZCIgZ2l0LXJlc29sdmUtZmlsZSB0XQogCVsiSW50ZXJhY3RpdmUgTWVyZ2UgRmlsZSIgZ2l0LWZpbmQtZmlsZS1pbWVyZ2UgdF0KIAlbIkRpZmYgQWdhaW5zdCBDb21tb24gQmFzZSBGaWxlIiBnaXQtZGlmZi1maWxlLWJhc2UgdF0KIAlbIkRpZmYgQ29tYmluZWQiIGdpdC1kaWZmLWZpbGUtY29tYmluZWQgdF0KZGlmZiAtLWdpdCBhL2J1aWx0aW4tZmV0Y2gtLXRvb2wuYyBiL2NvbnRyaWIvZXhhbXBsZXMvYnVpbHRpbi1mZXRjaC0tdG9vbC5jCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGJ1aWx0aW4tZmV0Y2gtLXRvb2wuYwpyZW5hbWUgdG8gY29udHJpYi9leGFtcGxlcy9idWlsdGluLWZldGNoLS10b29sLmMKaW5kZXggMjkzNTZkMi4uY2QxMGRiYyAxMDA2NDQKLS0tIGEvYnVpbHRpbi1mZXRjaC0tdG9vbC5jCisrKyBiL2NvbnRyaWIvZXhhbXBsZXMvYnVpbHRpbi1mZXRjaC0tdG9vbC5jCkBAIC04LDcgKzgsNyBAQAogewogCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CiAJaWYgKHN0cmJ1Zl9yZWFkKCZidWYsIDAsIDEwMjQpIDwgMCkgewotCQlkaWUoImVycm9yIHJlYWRpbmcgc3RhbmRhcmQgaW5wdXQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJlcnJvciByZWFkaW5nIHN0YW5kYXJkIGlucHV0Iik7CiAJfQogCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOwogfQpAQCAtOTcsMjEgKzk3LDIxIEBACiAJc3RyY3B5KG5ld2gsIGZpbmRfdW5pcXVlX2FiYnJldihzaGExX25ldywgREVGQVVMVF9BQkJSRVYpKTsKIAogCWlmIChpbl9tZXJnZV9iYXNlcyhjdXJyZW50LCAmdXBkYXRlZCwgMSkpIHsKLQkJZnByaW50ZihzdGRlcnIsICIqICVzOiBmYXN0IGZvcndhcmQgdG8gJXNcbiIsCisJCWZwcmludGYoc3RkZXJyLCAiKiAlczogZmFzdC1mb3J3YXJkIHRvICVzXG4iLAogCQkJbmFtZSwgbm90ZSk7CiAJCWZwcmludGYoc3RkZXJyLCAiICBvbGQuLm5ldzogJXMuLiVzXG4iLCBvbGRoLCBuZXdoKTsKLQkJcmV0dXJuIHVwZGF0ZV9yZWZfZW52KCJmYXN0IGZvcndhcmQiLCBuYW1lLCBzaGExX25ldywgc2hhMV9vbGQpOworCQlyZXR1cm4gdXBkYXRlX3JlZl9lbnYoImZhc3QtZm9yd2FyZCIsIG5hbWUsIHNoYTFfbmV3LCBzaGExX29sZCk7CiAJfQogCWlmICghZm9yY2UpIHsKIAkJZnByaW50ZihzdGRlcnIsCi0JCQkiKiAlczogbm90IHVwZGF0aW5nIHRvIG5vbi1mYXN0IGZvcndhcmQgJXNcbiIsCisJCQkiKiAlczogbm90IHVwZGF0aW5nIHRvIG5vbi1mYXN0LWZvcndhcmQgJXNcbiIsCiAJCQluYW1lLCBub3RlKTsKIAkJZnByaW50ZihzdGRlcnIsCiAJCQkiICBvbGQuLi5uZXc6ICVzLi4uJXNcbiIsIG9sZGgsIG5ld2gpOwogCQlyZXR1cm4gMTsKIAl9CiAJZnByaW50ZihzdGRlcnIsCi0JCSIqICVzOiBmb3JjaW5nIHVwZGF0ZSB0byBub24tZmFzdCBmb3J3YXJkICVzXG4iLAorCQkiKiAlczogZm9yY2luZyB1cGRhdGUgdG8gbm9uLWZhc3QtZm9yd2FyZCAlc1xuIiwKIAkJbmFtZSwgbm90ZSk7CiAJZnByaW50ZihzdGRlcnIsICIgIG9sZC4uLm5ldzogJXMuLi4lc1xuIiwgb2xkaCwgbmV3aCk7CiAJcmV0dXJuIHVwZGF0ZV9yZWZfZW52KCJmb3JjZWQtdXBkYXRlIiwgbmFtZSwgc2hhMV9uZXcsIHNoYTFfb2xkKTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LW1lcmdlLnNoIGIvY29udHJpYi9leGFtcGxlcy9naXQtbWVyZ2Uuc2gKaW5kZXggZTk1ODhlZS4uOGY2MTdmYyAxMDA3NTUKLS0tIGEvY29udHJpYi9leGFtcGxlcy9naXQtbWVyZ2Uuc2gKKysrIGIvY29udHJpYi9leGFtcGxlcy9naXQtbWVyZ2Uuc2gKQEAgLTE0LDcgKzE0LDcgQEAKIGxvZyAgICAgICAgICAgICAgICAgIGFkZCBsaXN0IG9mIG9uZS1saW5lIGxvZyB0byBtZXJnZSBjb21taXQgbWVzc2FnZQogc3F1YXNoICAgICAgICAgICAgICAgY3JlYXRlIGEgc2luZ2xlIGNvbW1pdCBpbnN0ZWFkIG9mIGRvaW5nIGEgbWVyZ2UKIGNvbW1pdCAgICAgICAgICAgICAgIHBlcmZvcm0gYSBjb21taXQgaWYgdGhlIG1lcmdlIHN1Y2NlZWRzIChkZWZhdWx0KQotZmYgICAgICAgICAgICAgICAgICAgYWxsb3cgZmFzdCBmb3J3YXJkIChkZWZhdWx0KQorZmYgICAgICAgICAgICAgICAgICAgYWxsb3cgZmFzdC1mb3J3YXJkIChkZWZhdWx0KQogcyxzdHJhdGVneT0gICAgICAgICAgbWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlCiBtLG1lc3NhZ2U9ICAgICAgICAgICBtZXNzYWdlIHRvIGJlIHVzZWQgZm9yIHRoZSBtZXJnZSBjb21taXQgKGlmIGFueSkKICIKQEAgLTMxLDEwICszMSwxMSBAQAogJwogCiBhbGxfc3RyYXRlZ2llcz0ncmVjdXIgcmVjdXJzaXZlIG9jdG9wdXMgcmVzb2x2ZSBzdHVwaWQgb3VycyBzdWJ0cmVlJworYWxsX3N0cmF0ZWdpZXM9IiRhbGxfc3RyYXRlZ2llcyByZWN1cnNpdmUtb3VycyByZWN1cnNpdmUtdGhlaXJzIgogZGVmYXVsdF90d29oZWFkX3N0cmF0ZWdpZXM9J3JlY3Vyc2l2ZScKIGRlZmF1bHRfb2N0b3B1c19zdHJhdGVnaWVzPSdvY3RvcHVzJwogbm9fZmFzdF9mb3J3YXJkX3N0cmF0ZWdpZXM9J3N1YnRyZWUgb3VycycKLW5vX3RyaXZpYWxfc3RyYXRlZ2llcz0ncmVjdXJzaXZlIHJlY3VyIHN1YnRyZWUgb3VycycKK25vX3RyaXZpYWxfc3RyYXRlZ2llcz0ncmVjdXJzaXZlIHJlY3VyIHN1YnRyZWUgb3VycyByZWN1cnNpdmUtb3VycyByZWN1cnNpdmUtdGhlaXJzJwogdXNlX3N0cmF0ZWdpZXM9CiAKIGFsbG93X2Zhc3RfZm9yd2FyZD10CkBAIC0zNTMsNyArMzU0LDcgQEAKIAkjIEFnYWluIHRoZSBtb3N0IGNvbW1vbiBjYXNlIG9mIG1lcmdpbmcgb25lIHJlbW90ZS4KIAllY2hvICJVcGRhdGluZyAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkaGVhZCkuLiQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQxKSIKIAlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAyPi9kZXYvbnVsbAotCW1zZz0iRmFzdCBmb3J3YXJkIgorCW1zZz0iRmFzdC1mb3J3YXJkIgogCWlmIHRlc3QgLW4gIiRoYXZlX21lc3NhZ2UiCiAJdGhlbgogCQltc2c9IiRtc2cgKG5vIGNvbW1pdCBjcmVhdGVkOyAtbSBvcHRpb24gaWdub3JlZCkiCkBAIC0zNjUsMTEgKzM2NiwxMSBAQAogCWV4aXQgMAogCTs7CiA/LDEsPyoiJExGIj8qLCopCi0JIyBXZSBhcmUgbm90IGRvaW5nIG9jdG9wdXMgYW5kIG5vdCBmYXN0IGZvcndhcmQuICBOZWVkIGEKKwkjIFdlIGFyZSBub3QgZG9pbmcgb2N0b3B1cyBhbmQgbm90IGZhc3QtZm9yd2FyZC4gIE5lZWQgYQogCSMgcmVhbCBtZXJnZS4KIAk7OwogPywxLCosKQotCSMgV2UgYXJlIG5vdCBkb2luZyBvY3RvcHVzLCBub3QgZmFzdCBmb3J3YXJkLCBhbmQgaGF2ZSBvbmx5CisJIyBXZSBhcmUgbm90IGRvaW5nIG9jdG9wdXMsIG5vdCBmYXN0LWZvcndhcmQsIGFuZCBoYXZlIG9ubHkKIAkjIG9uZSBjb21tb24uCiAJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggMj4vZGV2L251bGwKIAljYXNlICIkYWxsb3dfdHJpdmlhbF9tZXJnZSIgaW4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LXJlc29sdmUuc2ggYi9jb250cmliL2V4YW1wbGVzL2dpdC1yZXNvbHZlLnNoCmluZGV4IDBlZTFiZDguLjhmOTgxNDIgMTAwNzU1Ci0tLSBhL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LXJlc29sdmUuc2gKKysrIGIvY29udHJpYi9leGFtcGxlcy9naXQtcmVzb2x2ZS5zaApAQCAtNDgsNyArNDgsNyBAQAogIiRoZWFkIikKIAllY2hvICJVcGRhdGluZyAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkaGVhZCkuLiQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICRtZXJnZSkiCiAJZ2l0IHJlYWQtdHJlZSAtdSAtbSAkaGVhZCAkbWVyZ2UgfHwgZXhpdCAxCi0JZ2l0IHVwZGF0ZS1yZWYgLW0gInJlc29sdmUgJG1lcmdlX25hbWU6IEZhc3QgZm9yd2FyZCIgXAorCWdpdCB1cGRhdGUtcmVmIC1tICJyZXNvbHZlICRtZXJnZV9uYW1lOiBGYXN0LWZvcndhcmQiIFwKIAkJSEVBRCAiJG1lcmdlIiAiJGhlYWQiCiAJZ2l0IGRpZmYtdHJlZSAtcCAkaGVhZCAkbWVyZ2UgfCBnaXQgYXBwbHkgLS1zdGF0CiAJZHJvcGhlYWRzCmRpZmYgLS1naXQgYS9jb250cmliL2Zhc3QtaW1wb3J0L2dpdC1wNCBiL2NvbnRyaWIvZmFzdC1pbXBvcnQvZ2l0LXA0CmluZGV4IDM0MjUyOWQuLmNkOTZjNmYgMTAwNzU1Ci0tLSBhL2NvbnRyaWIvZmFzdC1pbXBvcnQvZ2l0LXA0CisrKyBiL2NvbnRyaWIvZmFzdC1pbXBvcnQvZ2l0LXA0CkBAIC04LDEyICs4LDEwIEBACiAjIExpY2Vuc2U6IE1JVCA8aHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHA+CiAjCiAKLWltcG9ydCBvcHRwYXJzZSwgc3lzLCBvcywgbWFyc2hhbCwgcG9wZW4yLCBzdWJwcm9jZXNzLCBzaGVsdmUKLWltcG9ydCB0ZW1wZmlsZSwgZ2V0b3B0LCBzaGEsIG9zLnBhdGgsIHRpbWUsIHBsYXRmb3JtCitpbXBvcnQgb3B0cGFyc2UsIHN5cywgb3MsIG1hcnNoYWwsIHN1YnByb2Nlc3MsIHNoZWx2ZQoraW1wb3J0IHRlbXBmaWxlLCBnZXRvcHQsIG9zLnBhdGgsIHRpbWUsIHBsYXRmb3JtCiBpbXBvcnQgcmUKIAotZnJvbSBzZXRzIGltcG9ydCBTZXQ7Ci0KIHZlcmJvc2UgPSBGYWxzZQogCiAKQEAgLTIwMSw3ICsxOTksNyBAQAogZGVmIGlzTW9kZUV4ZWNDaGFuZ2VkKHNyY19tb2RlLCBkc3RfbW9kZSk6CiAgICAgcmV0dXJuIGlzTW9kZUV4ZWMoc3JjX21vZGUpICE9IGlzTW9kZUV4ZWMoZHN0X21vZGUpCiAKLWRlZiBwNENtZExpc3QoY21kLCBzdGRpbj1Ob25lLCBzdGRpbl9tb2RlPSd3K2InKToKK2RlZiBwNENtZExpc3QoY21kLCBzdGRpbj1Ob25lLCBzdGRpbl9tb2RlPSd3K2InLCBjYj1Ob25lKToKICAgICBjbWQgPSBwNF9idWlsZF9jbWQoIi1HICVzIiAlIChjbWQpKQogICAgIGlmIHZlcmJvc2U6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIk9wZW5pbmcgcGlwZTogJXNcbiIgJSBjbWQpCkBAIC0yMjQsNyArMjIyLDEwIEBACiAgICAgdHJ5OgogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgZW50cnkgPSBtYXJzaGFsLmxvYWQocDQuc3Rkb3V0KQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChlbnRyeSkKKwkgICAgaWYgY2IgaXMgbm90IE5vbmU6CisJCWNiKGVudHJ5KQorCSAgICBlbHNlOgorCQlyZXN1bHQuYXBwZW5kKGVudHJ5KQogICAgIGV4Y2VwdCBFT0ZFcnJvcjoKICAgICAgICAgcGFzcwogICAgIGV4aXRDb2RlID0gcDQud2FpdCgpCkBAIC03MjgsMTMgKzcyOSwxMCBAQAogICAgICAgICAgICAgdG1wRmlsZS53cml0ZShzdWJtaXRUZW1wbGF0ZSArIHNlcGFyYXRvckxpbmUgKyBkaWZmICsgbmV3ZGlmZikKICAgICAgICAgICAgIHRtcEZpbGUuY2xvc2UoKQogICAgICAgICAgICAgbXRpbWUgPSBvcy5zdGF0KGZpbGVOYW1lKS5zdF9tdGltZQotICAgICAgICAgICAgZGVmYXVsdEVkaXRvciA9ICJ2aSIKLSAgICAgICAgICAgIGlmIHBsYXRmb3JtLnN5c3RlbSgpID09ICJXaW5kb3dzIjoKLSAgICAgICAgICAgICAgICBkZWZhdWx0RWRpdG9yID0gIm5vdGVwYWQiCiAgICAgICAgICAgICBpZiBvcy5lbnZpcm9uLmhhc19rZXkoIlA0RURJVE9SIik6CiAgICAgICAgICAgICAgICAgZWRpdG9yID0gb3MuZW52aXJvbi5nZXQoIlA0RURJVE9SIikKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZWRpdG9yID0gb3MuZW52aXJvbi5nZXQoIkVESVRPUiIsIGRlZmF1bHRFZGl0b3IpOworICAgICAgICAgICAgICAgIGVkaXRvciA9IHJlYWRfcGlwZSgiZ2l0IHZhciBHSVRfRURJVE9SIikuc3RyaXAoKQogICAgICAgICAgICAgc3lzdGVtKGVkaXRvciArICIgIiArIGZpbGVOYW1lKQogCiAgICAgICAgICAgICByZXNwb25zZSA9ICJ5IgpAQCAtODYxLDggKzg1OSw4IEBACiAKICAgICAgICAgc2VsZi51c2FnZSArPSAiIC8vZGVwb3QvcGF0aFtAcmV2UmFuZ2VdIgogICAgICAgICBzZWxmLnNpbGVudCA9IEZhbHNlCi0gICAgICAgIHNlbGYuY3JlYXRlZEJyYW5jaGVzID0gU2V0KCkKLSAgICAgICAgc2VsZi5jb21taXR0ZWRDaGFuZ2VzID0gU2V0KCkKKyAgICAgICAgc2VsZi5jcmVhdGVkQnJhbmNoZXMgPSBzZXQoKQorICAgICAgICBzZWxmLmNvbW1pdHRlZENoYW5nZXMgPSBzZXQoKQogICAgICAgICBzZWxmLmJyYW5jaCA9ICIiCiAgICAgICAgIHNlbGYuZGV0ZWN0QnJhbmNoZXMgPSBGYWxzZQogICAgICAgICBzZWxmLmRldGVjdExhYmVscyA9IEZhbHNlCkBAIC05NTAsMTAgKzk0OCw4MyBAQAogCiAgICAgICAgIHJldHVybiBicmFuY2hlcwogCi0gICAgIyMgU2hvdWxkIG1vdmUgdGhpcyBvdXQsIGRvZXNuJ3QgdXNlIFNFTEYuCi0gICAgZGVmIHJlYWRQNEZpbGVzKHNlbGYsIGZpbGVzKToKKyAgICAjIG91dHB1dCBvbmUgZmlsZSBmcm9tIHRoZSBQNCBzdHJlYW0KKyAgICAjIC0gaGVscGVyIGZvciBzdHJlYW1QNEZpbGVzCisKKyAgICBkZWYgc3RyZWFtT25lUDRGaWxlKHNlbGYsIGZpbGUsIGNvbnRlbnRzKToKKwlpZiBmaWxlWyJ0eXBlIl0gPT0gImFwcGxlIjoKKwkgICAgcHJpbnQgIlxuZmlsZSAlcyBpcyBhIHN0cmFuZ2UgYXBwbGUgZmlsZSB0aGF0IGZvcmtzLiBJZ25vcmluZyIgJSBcCisJCWZpbGVbJ2RlcG90RmlsZSddCisJICAgIHJldHVybgorCisgICAgICAgIHJlbFBhdGggPSBzZWxmLnN0cmlwUmVwb1BhdGgoZmlsZVsnZGVwb3RGaWxlJ10sIHNlbGYuYnJhbmNoUHJlZml4ZXMpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCIlc1xuIiAlIHJlbFBhdGgpCisKKyAgICAgICAgbW9kZSA9ICI2NDQiCisgICAgICAgIGlmIGlzUDRFeGVjKGZpbGVbInR5cGUiXSk6CisgICAgICAgICAgICBtb2RlID0gIjc1NSIKKyAgICAgICAgZWxpZiBmaWxlWyJ0eXBlIl0gPT0gInN5bWxpbmsiOgorICAgICAgICAgICAgbW9kZSA9ICIxMjAwMDAiCisgICAgICAgICAgICAjIHA0IHByaW50IG9uIGEgc3ltbGluayBjb250YWlucyAidGFyZ2V0XG4iLCBzbyBzdHJpcCBpdCBvZmYKKyAgICAgICAgICAgIGRhdGEgPSAnJy5qb2luKGNvbnRlbnRzKQorICAgICAgICAgICAgY29udGVudHMgPSBbZGF0YVs6LTFdXQorCisgICAgICAgIGlmIHNlbGYuaXNXaW5kb3dzIGFuZCBmaWxlWyJ0eXBlIl0uZW5kc3dpdGgoInRleHQiKToKKyAgICAgICAgICAgIG1hbmdsZWQgPSBbXQorICAgICAgICAgICAgZm9yIGRhdGEgaW4gY29udGVudHM6CisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgiXHJcbiIsICJcbiIpCisgICAgICAgICAgICAgICAgbWFuZ2xlZC5hcHBlbmQoZGF0YSkKKyAgICAgICAgICAgIGNvbnRlbnRzID0gbWFuZ2xlZAorCisgICAgICAgIGlmIGZpbGVbJ3R5cGUnXSBpbiAoJ3RleHQra28nLCAndW5pY29kZStrbycsICdiaW5hcnkra28nKToKKyAgICAgICAgICAgIGNvbnRlbnRzID0gbWFwKGxhbWJkYSB0ZXh0OiByZS5zdWIocicoP2kpXCQoSWR8SGVhZGVyKTpbXiRdKlwkJyxyJyRcMSQnLCB0ZXh0KSwgY29udGVudHMpCisgICAgICAgIGVsaWYgZmlsZVsndHlwZSddIGluICgndGV4dCtrJywgJ2t0ZXh0JywgJ2t4dGV4dCcsICd1bmljb2RlK2snLCAnYmluYXJ5K2snKToKKyAgICAgICAgICAgIGNvbnRlbnRzID0gbWFwKGxhbWJkYSB0ZXh0OiByZS5zdWIocidcJChJZHxIZWFkZXJ8QXV0aG9yfERhdGV8RGF0ZVRpbWV8Q2hhbmdlfEZpbGV8UmV2aXNpb24pOlteJFxuXSpcJCcscickXDEkJywgdGV4dCksIGNvbnRlbnRzKQorCisgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKCJNICVzIGlubGluZSAlc1xuIiAlIChtb2RlLCByZWxQYXRoKSkKKworICAgICAgICAjIHRvdGFsIGxlbmd0aC4uLgorICAgICAgICBsZW5ndGggPSAwCisgICAgICAgIGZvciBkIGluIGNvbnRlbnRzOgorICAgICAgICAgICAgbGVuZ3RoID0gbGVuZ3RoICsgbGVuKGQpCisKKyAgICAgICAgc2VsZi5naXRTdHJlYW0ud3JpdGUoImRhdGEgJWRcbiIgJSBsZW5ndGgpCisgICAgICAgIGZvciBkIGluIGNvbnRlbnRzOgorICAgICAgICAgICAgc2VsZi5naXRTdHJlYW0ud3JpdGUoZCkKKyAgICAgICAgc2VsZi5naXRTdHJlYW0ud3JpdGUoIlxuIikKKworICAgIGRlZiBzdHJlYW1PbmVQNERlbGV0aW9uKHNlbGYsIGZpbGUpOgorICAgICAgICByZWxQYXRoID0gc2VsZi5zdHJpcFJlcG9QYXRoKGZpbGVbJ3BhdGgnXSwgc2VsZi5icmFuY2hQcmVmaXhlcykKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoImRlbGV0ZSAlc1xuIiAlIHJlbFBhdGgpCisgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKCJEICVzXG4iICUgcmVsUGF0aCkKKworICAgICMgaGFuZGxlIGFub3RoZXIgY2h1bmsgb2Ygc3RyZWFtaW5nIGRhdGEKKyAgICBkZWYgc3RyZWFtUDRGaWxlc0NiKHNlbGYsIG1hcnNoYWxsZWQpOgorCisJaWYgbWFyc2hhbGxlZC5oYXNfa2V5KCdkZXBvdEZpbGUnKSBhbmQgc2VsZi5zdHJlYW1faGF2ZV9maWxlX2luZm86CisJICAgICMgc3RhcnQgb2YgYSBuZXcgZmlsZSAtIG91dHB1dCB0aGUgb2xkIG9uZSBmaXJzdAorCSAgICBzZWxmLnN0cmVhbU9uZVA0RmlsZShzZWxmLnN0cmVhbV9maWxlLCBzZWxmLnN0cmVhbV9jb250ZW50cykKKwkgICAgc2VsZi5zdHJlYW1fZmlsZSA9IHt9CisJICAgIHNlbGYuc3RyZWFtX2NvbnRlbnRzID0gW10KKwkgICAgc2VsZi5zdHJlYW1faGF2ZV9maWxlX2luZm8gPSBGYWxzZQorCisJIyBwaWNrIHVwIHRoZSBuZXcgZmlsZSBpbmZvcm1hdGlvbi4uLiBmb3IgdGhlCisJIyAnZGF0YScgZmllbGQgd2UgbmVlZCB0byBhcHBlbmQgdG8gb3VyIGFycmF5CisJZm9yIGsgaW4gbWFyc2hhbGxlZC5rZXlzKCk6CisJICAgIGlmIGsgPT0gJ2RhdGEnOgorCQlzZWxmLnN0cmVhbV9jb250ZW50cy5hcHBlbmQobWFyc2hhbGxlZFsnZGF0YSddKQorCSAgICBlbHNlOgorCQlzZWxmLnN0cmVhbV9maWxlW2tdID0gbWFyc2hhbGxlZFtrXQorCisJc2VsZi5zdHJlYW1faGF2ZV9maWxlX2luZm8gPSBUcnVlCisKKyAgICAjIFN0cmVhbSBkaXJlY3RseSBmcm9tICJwNCBmaWxlcyIgaW50byAiZ2l0IGZhc3QtaW1wb3J0IgorICAgIGRlZiBzdHJlYW1QNEZpbGVzKHNlbGYsIGZpbGVzKToKICAgICAgICAgZmlsZXNGb3JDb21taXQgPSBbXQogICAgICAgICBmaWxlc1RvUmVhZCA9IFtdCisgICAgICAgIGZpbGVzVG9EZWxldGUgPSBbXQogCiAgICAgICAgIGZvciBmIGluIGZpbGVzOgogICAgICAgICAgICAgaW5jbHVkZUZpbGUgPSBUcnVlCkBAIC05NjUsNTIgKzEwMzYsMzcgQEAKIAogICAgICAgICAgICAgaWYgaW5jbHVkZUZpbGU6CiAgICAgICAgICAgICAgICAgZmlsZXNGb3JDb21taXQuYXBwZW5kKGYpCi0gICAgICAgICAgICAgICAgaWYgZlsnYWN0aW9uJ10gbm90IGluICgnZGVsZXRlJywgJ3B1cmdlJyk6CisgICAgICAgICAgICAgICAgaWYgZlsnYWN0aW9uJ10gbm90IGluICgnZGVsZXRlJywgJ21vdmUvZGVsZXRlJywgJ3B1cmdlJyk6CiAgICAgICAgICAgICAgICAgICAgIGZpbGVzVG9SZWFkLmFwcGVuZChmKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGZpbGVzVG9EZWxldGUuYXBwZW5kKGYpCiAKLSAgICAgICAgZmlsZWRhdGEgPSBbXQorICAgICAgICAjIGRlbGV0ZWQgZmlsZXMuLi4KKyAgICAgICAgZm9yIGYgaW4gZmlsZXNUb0RlbGV0ZToKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtT25lUDREZWxldGlvbihmKQorCiAgICAgICAgIGlmIGxlbihmaWxlc1RvUmVhZCkgPiAwOgotICAgICAgICAgICAgZmlsZWRhdGEgPSBwNENtZExpc3QoJy14IC0gcHJpbnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49J1xuJy5qb2luKFsnJXMjJXMnICUgKGZbJ3BhdGgnXSwgZlsncmV2J10pCisgICAgICAgICAgICBzZWxmLnN0cmVhbV9maWxlID0ge30KKyAgICAgICAgICAgIHNlbGYuc3RyZWFtX2NvbnRlbnRzID0gW10KKyAgICAgICAgICAgIHNlbGYuc3RyZWFtX2hhdmVfZmlsZV9pbmZvID0gRmFsc2UKKworCSAgICAjIGN1cnJ5IHNlbGYgYXJndW1lbnQKKwkgICAgZGVmIHN0cmVhbVA0RmlsZXNDYlNlbGYoZW50cnkpOgorCQlzZWxmLnN0cmVhbVA0RmlsZXNDYihlbnRyeSkKKworCSAgICBwNENtZExpc3QoIi14IC0gcHJpbnQiLAorCQknXG4nLmpvaW4oWyclcyMlcycgJSAoZlsncGF0aCddLCBmWydyZXYnXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXNUb1JlYWRdKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluX21vZGU9J3crJykKKwkgICAgICAgIGNiPXN0cmVhbVA0RmlsZXNDYlNlbGYpCiAKLSAgICAgICAgICAgIGlmICJwNEV4aXRDb2RlIiBpbiBmaWxlZGF0YVswXToKLSAgICAgICAgICAgICAgICBkaWUoIlByb2JsZW1zIGV4ZWN1dGluZyBwNC4gRXJyb3I6IFslZF0uIgotICAgICAgICAgICAgICAgICAgICAlIChmaWxlZGF0YVswXVsncDRFeGl0Q29kZSddKSk7Ci0KLSAgICAgICAgaiA9IDA7Ci0gICAgICAgIGNvbnRlbnRzID0ge30KLSAgICAgICAgd2hpbGUgaiA8IGxlbihmaWxlZGF0YSk6Ci0gICAgICAgICAgICBzdGF0ID0gZmlsZWRhdGFbal0KLSAgICAgICAgICAgIGogKz0gMQotICAgICAgICAgICAgdGV4dCA9ICcnCi0gICAgICAgICAgICB3aGlsZSBqIDwgbGVuKGZpbGVkYXRhKSBhbmQgZmlsZWRhdGFbal1bJ2NvZGUnXSBpbiAoJ3RleHQnLCAndW5pY29kZScsICdiaW5hcnknKToKLSAgICAgICAgICAgICAgICB0ZXh0ICs9IGZpbGVkYXRhW2pdWydkYXRhJ10KLSAgICAgICAgICAgICAgICBkZWwgZmlsZWRhdGFbal1bJ2RhdGEnXQotICAgICAgICAgICAgICAgIGogKz0gMQotCi0gICAgICAgICAgICBpZiBub3Qgc3RhdC5oYXNfa2V5KCdkZXBvdEZpbGUnKToKLSAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJwNCBwcmludCBmYWlscyB3aXRoOiAlc1xuIiAlIHJlcHIoc3RhdCkpCi0gICAgICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICAgICAgaWYgc3RhdFsndHlwZSddIGluICgndGV4dCtrbycsICd1bmljb2RlK2tvJywgJ2JpbmFyeStrbycpOgotICAgICAgICAgICAgICAgIHRleHQgPSByZS5zdWIocicoP2kpXCQoSWR8SGVhZGVyKTpbXiRdKlwkJyxyJyRcMSQnLCB0ZXh0KQotICAgICAgICAgICAgZWxpZiBzdGF0Wyd0eXBlJ10gaW4gKCd0ZXh0K2snLCAna3RleHQnLCAna3h0ZXh0JywgJ3VuaWNvZGUraycsICdiaW5hcnkraycpOgotICAgICAgICAgICAgICAgIHRleHQgPSByZS5zdWIocidcJChJZHxIZWFkZXJ8QXV0aG9yfERhdGV8RGF0ZVRpbWV8Q2hhbmdlfEZpbGV8UmV2aXNpb24pOlteJFxuXSpcJCcscickXDEkJywgdGV4dCkKLQotICAgICAgICAgICAgY29udGVudHNbc3RhdFsnZGVwb3RGaWxlJ11dID0gdGV4dAotCi0gICAgICAgIGZvciBmIGluIGZpbGVzRm9yQ29tbWl0OgotICAgICAgICAgICAgcGF0aCA9IGZbJ3BhdGgnXQotICAgICAgICAgICAgaWYgY29udGVudHMuaGFzX2tleShwYXRoKToKLSAgICAgICAgICAgICAgICBmWydkYXRhJ10gPSBjb250ZW50c1twYXRoXQotCi0gICAgICAgIHJldHVybiBmaWxlc0ZvckNvbW1pdAorICAgICAgICAgICAgIyBkbyB0aGUgbGFzdCBjaHVuaworICAgICAgICAgICAgaWYgc2VsZi5zdHJlYW1fZmlsZS5oYXNfa2V5KCdkZXBvdEZpbGUnKToKKyAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbU9uZVA0RmlsZShzZWxmLnN0cmVhbV9maWxlLCBzZWxmLnN0cmVhbV9jb250ZW50cykKIAogICAgIGRlZiBjb21taXQoc2VsZiwgZGV0YWlscywgZmlsZXMsIGJyYW5jaCwgYnJhbmNoUHJlZml4ZXMsIHBhcmVudCA9ICIiKToKICAgICAgICAgZXBvY2ggPSBkZXRhaWxzWyJ0aW1lIl0KICAgICAgICAgYXV0aG9yID0gZGV0YWlsc1sidXNlciJdCisJc2VsZi5icmFuY2hQcmVmaXhlcyA9IGJyYW5jaFByZWZpeGVzCiAKICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgogICAgICAgICAgICAgcHJpbnQgImNvbW1pdCBpbnRvICVzIiAlIGJyYW5jaApAQCAtMTAyMyw3ICsxMDc5LDYgQEAKICAgICAgICAgICAgICAgICBuZXdfZmlsZXMuYXBwZW5kIChmKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJJZ25vcmluZyBmaWxlIG91dHNpZGUgb2YgcHJlZml4OiAlc1xuIiAlIHBhdGgpCi0gICAgICAgIGZpbGVzID0gc2VsZi5yZWFkUDRGaWxlcyhuZXdfZmlsZXMpCiAKICAgICAgICAgc2VsZi5naXRTdHJlYW0ud3JpdGUoImNvbW1pdCAlc1xuIiAlIGJyYW5jaCkKICMgICAgICAgIGdpdFN0cmVhbS53cml0ZSgibWFyayA6JXNcbiIgJSBkZXRhaWxzWyJjaGFuZ2UiXSkKQEAgLTEwNTEsMzMgKzExMDYsNyBAQAogICAgICAgICAgICAgICAgIHByaW50ICJwYXJlbnQgJXMiICUgcGFyZW50CiAgICAgICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgiZnJvbSAlc1xuIiAlIHBhcmVudCkKIAotICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKLSAgICAgICAgICAgIGlmIGZpbGVbInR5cGUiXSA9PSAiYXBwbGUiOgotICAgICAgICAgICAgICAgIHByaW50ICJcbmZpbGUgJXMgaXMgYSBzdHJhbmdlIGFwcGxlIGZpbGUgdGhhdCBmb3Jrcy4gSWdub3JpbmchIiAlIGZpbGVbJ3BhdGgnXQotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgICAgIHJlbFBhdGggPSBzZWxmLnN0cmlwUmVwb1BhdGgoZmlsZVsncGF0aCddLCBicmFuY2hQcmVmaXhlcykKLSAgICAgICAgICAgIGlmIGZpbGVbImFjdGlvbiJdIGluICgiZGVsZXRlIiwgInB1cmdlIik6Ci0gICAgICAgICAgICAgICAgc2VsZi5naXRTdHJlYW0ud3JpdGUoIkQgJXNcbiIgJSByZWxQYXRoKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBkYXRhID0gZmlsZVsnZGF0YSddCi0KLSAgICAgICAgICAgICAgICBtb2RlID0gIjY0NCIKLSAgICAgICAgICAgICAgICBpZiBpc1A0RXhlYyhmaWxlWyJ0eXBlIl0pOgotICAgICAgICAgICAgICAgICAgICBtb2RlID0gIjc1NSIKLSAgICAgICAgICAgICAgICBlbGlmIGZpbGVbInR5cGUiXSA9PSAic3ltbGluayI6Ci0gICAgICAgICAgICAgICAgICAgIG1vZGUgPSAiMTIwMDAwIgotICAgICAgICAgICAgICAgICAgICAjIHA0IHByaW50IG9uIGEgc3ltbGluayBjb250YWlucyAidGFyZ2V0XG4iLCBzbyBzdHJpcCBpdCBvZmYKLSAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbOi0xXQotCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5pc1dpbmRvd3MgYW5kIGZpbGVbInR5cGUiXS5lbmRzd2l0aCgidGV4dCIpOgotICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKCJcclxuIiwgIlxuIikKLQotICAgICAgICAgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKCJNICVzIGlubGluZSAlc1xuIiAlIChtb2RlLCByZWxQYXRoKSkKLSAgICAgICAgICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgiZGF0YSAlc1xuIiAlIGxlbihkYXRhKSkKLSAgICAgICAgICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZShkYXRhKQotICAgICAgICAgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKCJcbiIpCi0KKyAgICAgICAgc2VsZi5zdHJlYW1QNEZpbGVzKG5ld19maWxlcykKICAgICAgICAgc2VsZi5naXRTdHJlYW0ud3JpdGUoIlxuIikKIAogICAgICAgICBjaGFuZ2UgPSBpbnQoZGV0YWlsc1siY2hhbmdlIl0pCkBAIC0xNjI3LDcgKzE2NTYsNyBAQAogCiAgICAgICAgICAgICBpZiBsZW4oc2VsZi5jaGFuZ2VzRmlsZSkgPiAwOgogICAgICAgICAgICAgICAgIG91dHB1dCA9IG9wZW4oc2VsZi5jaGFuZ2VzRmlsZSkucmVhZGxpbmVzKCkKLSAgICAgICAgICAgICAgICBjaGFuZ2VTZXQgPSBTZXQoKQorICAgICAgICAgICAgICAgIGNoYW5nZVNldCA9IHNldCgpCiAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0OgogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VTZXQuYWRkKGludChsaW5lKSkKIApkaWZmIC0tZ2l0IGEvY29udHJpYi9mYXN0LWltcG9ydC9pbXBvcnQtZGlyZWN0b3JpZXMucGVybCBiL2NvbnRyaWIvZmFzdC1pbXBvcnQvaW1wb3J0LWRpcmVjdG9yaWVzLnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2E1ZGE0YQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZmFzdC1pbXBvcnQvaW1wb3J0LWRpcmVjdG9yaWVzLnBlcmwKQEAgLTAsMCArMSw0MTYgQEAKKyMhL3Vzci9iaW4vcGVybCAtdworIworIyBDb3B5cmlnaHQgMjAwOC0yMDA5IFBldGVyIEtyZWZ0aW5nIDxwZXRlckBzb2Z0d29sdmVzLnBwLnNlPgorIworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisjCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis9cG9kCisKKz1oZWFkMSBOQU1FCisKK2ltcG9ydC1kaXJlY3RvcmllcyAtIEltcG9ydCBiaXRzIGFuZCBwaWVjZXMgdG8gR2l0LgorCis9aGVhZDEgU1lOT1BTSVMKKworQjxpbXBvcnQtZGlyZWN0b3JpZXMucGVybD4gRjxjb25maWdmaWxlPiBGPG91dHB1dGZpbGU+CisKKz1oZWFkMSBERVNDUklQVElPTgorCitTY3JpcHQgdG8gaW1wb3J0IGFyYml0cmFyeSBwcm9qZWN0cyB2ZXJzaW9uIGNvbnRyb2xsZWQgYnkgdGhlICJjb3B5IHRoZQorc291cmNlIGRpcmVjdG9yeSB0byBhIG5ldyBsb2NhdGlvbiBhbmQgZWRpdCBpdCB0aGVyZSItdmVyc2lvbiBjb250cm9sbGVkCitwcm9qZWN0cyBpbnRvIHZlcnNpb24gY29udHJvbC4gSGFuZGxlcyBwcm9qZWN0cyB3aXRoIGFyYml0cmFyeSBicmFuY2hpbmcKK2FuZCB2ZXJzaW9uIHRyZWVzLCB0YWtpbmcgYSBmaWxlIGRlc2NyaWJpbmcgdGhlIGlucHV0cyBhbmQgZ2VuZXJhdGluZyBhCitmaWxlIGNvbXBhdGlibGUgd2l0aCB0aGUgTDxnaXQtZmFzdC1pbXBvcnQoMSk+IGZvcm1hdC4KKworPWhlYWQxIENPTkZJR1VSQVRJT04gRklMRQorCis9aGVhZDIgRm9ybWF0CisKK1RoZSBjb25maWd1cmF0aW9uIGZpbGUgaXMgYmFzZWQgb24gdGhlIHN0YW5kYXJkIEk8LmluaT4gZm9ybWF0LgorCisgOyBDb21tZW50cyBzdGFydCB3aXRoIHNlbWktY29sb25zCisgW3NlY3Rpb25dCisga2V5PXZhbHVlCisKK1BsZWFzZSBzZWUgYmVsb3cgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBlc2NhcGUgc3BlY2lhbCBjaGFyYWN0ZXJzLgorCis9aGVhZDIgR2xvYmFsIGNvbmZpZ3VyYXRpb24KKworR2xvYmFsIGNvbmZpZ3VyYXRpb24gaXMgZG9uZSBpbiB0aGUgQjxbY29uZmlnXT4gc2VjdGlvbiwgd2hpY2ggc2hvdWxkIGJlCit0aGUgZmlyc3Qgc2VjdGlvbiBpbiB0aGUgZmlsZS4gQ29uZmlndXJhdGlvbiBjYW4gYmUgY2hhbmdlZCBieQorcmVwZWF0aW5nIGNvbmZpZ3VyYXRpb24gc2VjdGlvbnMgbGF0ZXIgb24uCisKKyBbY29uZmlnXQorIDsgY29uZmlndXJlIGNvbnZlcnNpb24gb2YgQ1JMRnMuICJjb252ZXJ0IiBtZWFucyB0aGF0IGFsbCBDUkxGcworIDsgc2hvdWxkIGJlIGNvbnZlcnRlZCBpbnRvIExGcyAoc3VpdGFibGUgZm9yIHRoZSBjb3JlLmF1dG9jcmxmCisgOyBzZXR0aW5nIHNldCB0byB0cnVlIGluIEdpdCkuICJub25lIiBtZWFucyB0aGF0IGFsbCBkYXRhIGlzCisgOyB0cmVhdGVkIGFzIGJpbmFyeS4KKyBjcmxmPWNvbnZlcnQKKworPWhlYWQyIFJldmlzaW9uIGNvbmZpZ3VyYXRpb24KKworRWFjaCByZXZpc2lvbiB0aGF0IGlzIHRvIGJlIGltcG9ydGVkIGlzIGRlc2NyaWJlZCBpbiB0aHJlZQorc2VjdGlvbnMuIFJldmlzaW9ucyBzaG91bGQgYmUgZGVmaW5lZCBpbiB0b3BvbG9naWNhbCBvcmRlciwgc28KK3RoYXQgYSByZXZpc2lvbidzIHBhcmVudCBoYXMgYWx3YXlzIGJlZW4gZGVmaW5lZCB3aGVuIGEgbmV3IHJldmlzaW9uCitpcyBpbnRyb2R1Y2VkLiBBbGwgdGhlIHNlY3Rpb25zIGZvciBvbmUgcmV2aXNpb24gbXVzdCBiZSBkZWZpbmVkCitiZWZvcmUgZGVmaW5pbmcgdGhlIG5leHQgcmV2aXNpb24uCisKK0VhY2ggcmV2aXNpb24gaXMgYXNzaWduZWQgYSB1bmlxdWUgbnVtZXJpY2FsIGlkZW50aWZpZXIuIFRoZQorbnVtYmVycyBkbyBub3QgbmVlZCB0byBiZSBjb25zZWN1dGl2ZSwgbm9yIG1vbm90b25pY2FsbHkKK2luY3JlYXNpbmcuCisKK0ZvciBpbnN0YW5jZSwgaWYgeW91ciBjb25maWd1cmF0aW9uIGZpbGUgY29udGFpbnMgb25seSB0aGUgdHdvCityZXZpc2lvbnMgNDcxMSBhbmQgNDIsIHdoZXJlIDQ3MTEgaXMgdGhlIGluaXRpYWwgY29tbWl0LCB0aGUKK29ubHkgcmVxdWlyZW1lbnQgaXMgdGhhdCA0NzExIGlzIGNvbXBsZXRlbHkgZGVmaW5lZCBiZWZvcmUgNDIuCisKKz1wb2QKKworPWhlYWQzIFJldmlzaW9uIGRlc2NyaXB0aW9uIHNlY3Rpb24KKworQSBzZWN0aW9uIHdob3NlIHNlY3Rpb24gbmFtZSBpcyBqdXN0IGFuIGludGVnZXIgZ2l2ZXMgbWV0YS1kYXRhCithYm91dCB0aGUgcmV2aXNpb24uCisKKyBbM10KKyA7IGF1dGhvciBzZXRzIHRoZSBhdXRob3Igb2YgdGhlIHJldmlzaW9ucworIGF1dGhvcj1QZXRlciBLcmVmdGluZyA8cGV0ZXJAc29mdHdvbHZlcy5wcC5zZT4KKyA7IGJyYW5jaCBzZXRzIHRoZSBicmFuY2ggdGhhdCB0aGUgcmV2aXNpb24gc2hvdWxkIGJlIGNvbW1pdHRlZCB0bworIGJyYW5jaD1tYXN0ZXIKKyA7IHBhcmVudCBkZXNjcmliZXMgdGhlIHJldmlzaW9uIHRoYXQgaXMgdGhlIHBhcmVudCBvZiB0aGlzIGNvbW1pdAorIDsgKG9wdGlvbmFsKQorIHBhcmVudD0xCisgOyBtZXJnZXMgZGVzY3JpYmVzIGEgcmV2aXNpb24gdGhhdCBpcyBtZXJnZWQgaW50byB0aGlzIGNvbW1pdAorIDsgKG9wdGlvbmFsOyBjYW4gYmUgcmVwZWF0ZWQpCisgbWVyZ2VzPTIKKyA7IHNlbGVjdHMgb25lIGZpbGUgdG8gdGFrZSB0aGUgdGltZXN0YW1wIGZyb20KKyA7IChvcHRpb25hbDsgaWYgdW5zcGVjaWZpZWQsIHRoZSBtb3N0IHJlY2VudCBmaWxlIGZyb20gdGhlIC5maWxlcworIDsgIHNlY3Rpb24gaXMgdXNlZCkKKyB0aW1lc3RhbXA9My9zb3VyY2UuYworCis9aGVhZDMgUmV2aXNpb24gY29udGVudHMgc2VjdGlvbgorCitBIHNlY3Rpb24gd2hvc2Ugc2VjdGlvbiBuYW1lIGlzIGFuIGludGVnZXIgZm9sbG93ZWQgYnkgQjwuZmlsZXM+CitkZXNjcmliZSBhbGwgdGhlIGZpbGVzIGluY2x1ZGVkIGluIHRoaXMgcmV2aXNpb24uIElmIGEgZmlsZSB0aGF0Cit3YXMgYXZhaWxhYmxlIHByZXZpb3VzbHkgaXMgbm90IGluY2x1ZGVkIGluIHRoaXMgcmV2aXNpb24sIGl0IHdpbGwKK2JlIHJlbW92ZWQuCisKK0lmIGFuIG9uLWRpc2sgcmV2aXNpb24gaXMgaW5jb21wbGV0ZSwgeW91IGNhbiBwb2ludCB0byBmaWxlcyBmcm9tCithIHByZXZpb3VzIHJldmlzaW9uLiBUaGVyZSBhcmUgbm8gcmVzdHJpY3Rpb24gYXMgdG8gd2hlcmUgdGhlIHNvdXJjZQorZmlsZXMgYXJlIGxvY2F0ZWQsIG5vciB0byB0aGUgbmFtZXMgb2YgdGhlbS4KKworIFszLmZpbGVzXQorIDsgdGhlIGtleSBpcyB0aGUgcGF0aCBpbnNpZGUgdGhlIHJlcG9zaXRvcnksIHRoZSB2YWx1ZSBpcyB0aGUgcGF0aAorIDsgYXMgc2VlbiBmcm9tIHRoZSBpbXBvcnRlciBzY3JpcHQuCisgc291cmNlLmM9dmVyLTMuMDAvc291cmNlLmMKKyBzb3VyY2UuaD12ZXItMi45OS9zb3VyY2UuaAorIHJlYWRtZS50eHQ9dmVyLTMuMDAvaW50cm9kdWN0aW9uIHRvIHRoZSBwcm9qZWN0LnR4dAorCitGaWxlIG5hbWVzIGFyZSB0cmVhdGVkIGFzIGJ5dGUgc3RyaW5ncyAoYnV0IHBsZWFzZSBzZWUgYmVsb3cgb24KK3F1b3RpbmcgcnVsZXMpLCBhbmQgc2hvdWxkIGJlIHN0b3JlZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGluCit0aGUgZW5jb2RpbmcgdGhhdCBzaG91bGQgYmUgdXNlZCBpbiB0aGUgZ2VuZXJhdGVkIHJlcG9zaXRvcnkuCisKKz1oZWFkMyBSZXZpc2lvbiBjb21taXQgbWVzc2FnZSBzZWN0aW9uCisKK0Egc2VjdGlvbiB3aG9zZSBzZWN0aW9uIG5hbWUgaXMgYW4gaW50ZWdlciBmb2xsb3dlZCBieSBCPC5tZXNzYWdlPgorZ2l2ZXMgdGhlIGNvbW1pdCBtZXNzYWdlLiBUaGlzIHNlY3Rpb24gaXMgcmVhZCB2ZXJiYXRpbSwgdXAgdW50aWwKK3RoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgc2VjdGlvbi4gQXMgc3VjaCwgYSBjb21taXQgbWVzc2FnZSBtYXkgbm90Citjb250YWluIGEgbGluZSB0aGF0IGJlZ2lucyB3aXRoIGFuIG9wZW5pbmcgc3F1YXJlIGJyYWNrZXQgKCJbIikgYW5kCitlbmRzIHdpdGggYSBjbG9zaW5nIHNxdWFyZSBicmFja2V0ICgiXSIpLCB1bmxlc3MgdGhleSBhcmUgc3Vycm91bmRlZAorYnkgd2hpdGVzcGFjZSBvciBvdGhlciBjaGFyYWN0ZXJzLgorCisgWzMubWVzc2FnZV0KKyBJbXBsZW1lbnQgZm9vYmFyLgorIDsgdHJhaWxpbmcgYmxhbmsgbGluZXMgYXJlIGlnbm9yZWQuCisKKz1jdXQKKworIyBHbG9iYWxzCit1c2Ugc3RyaWN0OwordXNlIGludGVnZXI7CitteSAkY3JsZm1vZGUgPSAwOworbXkgQHJldnM7CitteSAoJXJldm1hcCwgJW1lc3NhZ2UsICVmaWxlcywgJWF1dGhvciwgJWJyYW5jaCwgJXBhcmVudCwgJW1lcmdlcywgJXRpbWUsICV0aW1lc291cmNlKTsKK215ICRzZWN0aW9udHlwZSA9IDA7CitteSAkcmV2ID0gMDsKK215ICRtYXJrID0gMTsKKworIyBDaGVjayBjb21tYW5kIGxpbmUKK2lmICgkI0FSR1YgPCAxIHx8ICRBUkdWWzBdID1+IC9eLS0/aC8pCit7CisgICAgZXhlYygncGVybGRvYycsICQwKTsKKyAgICBleGl0IDE7Cit9CisKKyMgT3BlbiBjb25maWd1cmF0aW9uCitteSAkY29uZmlnID0gJEFSR1ZbMF07CitvcGVuIENGRywgJzwnLCAkY29uZmlnIG9yIGRpZSAiQ2Fubm90IG9wZW4gY29uZmlndXJhdGlvbiBmaWxlIFwiJGNvbmZpZ1wiOiAiOworCisjIE9wZW4gb3V0cHV0CitteSAkb3V0cHV0ID0gJEFSR1ZbMV07CitvcGVuIE9VVCwgJz4nLCAkb3V0cHV0IG9yIGRpZSAiQ2Fubm90IGNyZWF0ZSBvdXRwdXQgZmlsZSBcIiRvdXRwdXRcIjogIjsKK2Jpbm1vZGUgT1VUOworCitMSU5FOiB3aGlsZSAobXkgJGxpbmUgPSA8Q0ZHPikKK3sKKwkkbGluZSA9fiBzL1xyP1xuJC8vOworCW5leHQgTElORSBpZiAkc2VjdGlvbnR5cGUgIT0gNCAmJiAkbGluZSBlcSAnJzsKKwluZXh0IExJTkUgaWYgJGxpbmUgPX4gL147LzsKKwlteSAkb2xkc2VjdGlvbnR5cGUgPSAkc2VjdGlvbnR5cGU7CisJbXkgJG9sZHJldiA9ICRyZXY7CisKKwkjIFNlY3Rpb25zCisJaWYgKCRsaW5lID1+IG0iXlxbKGNvbmZpZ3woXGQrKSh8XC5maWxlc3xcLm1lc3NhZ2UpKVxdJCIpCisJeworCQlpZiAoJDEgZXEgJ2NvbmZpZycpCisJCXsKKwkJCSRzZWN0aW9udHlwZSA9IDE7CisJCX0KKwkJZWxzaWYgKCQzIGVxICcnKQorCQl7CisJCQkkc2VjdGlvbnR5cGUgPSAyOworCQkJJHJldiA9ICQyOworCQkJIyBDcmVhdGUgYSBuZXcgcmV2aXNpb24KKwkJCWRpZSAiRHVwbGljYXRlIHJldjogJGxpbmVcbiAiIGlmIGRlZmluZWQgJHJldm1hcHskcmV2fTsKKwkJCXByaW50ICJSZWFkaW5nIHJldmlzaW9uICRyZXZcbiI7CisJCQlwdXNoIEByZXZzLCAkcmV2OworCQkJJHJldm1hcHskcmV2fSA9ICRtYXJrICsrOworCQkJJHRpbWV7JHJldm1hcHskcmV2fX0gPSAwOworCQl9CisJCWVsc2lmICgkMyBlcSAnLmZpbGVzJykKKwkJeworCQkJJHNlY3Rpb250eXBlID0gMzsKKwkJCSRyZXYgPSAkMjsKKwkJCWRpZSAiUmV2aXNpb24gbWlzbWF0Y2g6ICRsaW5lXG4gIiB1bmxlc3MgJHJldiA9PSAkb2xkcmV2OworCQl9CisJCWVsc2lmICgkMyBlcSAnLm1lc3NhZ2UnKQorCQl7CisJCQkkc2VjdGlvbnR5cGUgPSA0OworCQkJJHJldiA9ICQyOworCQkJZGllICJSZXZpc2lvbiBtaXNtYXRjaDogJGxpbmVcbiAiIHVubGVzcyAkcmV2ID09ICRvbGRyZXY7CisJCX0KKwkJZWxzZQorCQl7CisJCQlkaWUgIkludGVybmFsIHBhcnNlIGVycm9yOiAkbGluZVxuICI7CisJCX0KKwkJbmV4dCBMSU5FOworCX0KKworCSMgUGFyc2UgZGF0YQorCWlmICgkc2VjdGlvbnR5cGUgIT0gNCkKKwl7CisJCSMgS2V5IGFuZCB2YWx1ZQorCQlpZiAoJGxpbmUgPX4gbSJeXHMqKFteXHNdLio9LipbXlxzXSlccyokIikKKwkJeworCQkJbXkgKCRrZXksICR2YWx1ZSkgPSAmcGFyc2VrZXl2YWx1ZXBhaXIoJDEpOworCQkJIyBHbG9iYWwgY29uZmlndXJhdGlvbgorCQkJaWYgKDEgPT0gJHNlY3Rpb250eXBlKQorCQkJeworCQkJCWlmICgka2V5IGVxICdjcmxmJykKKwkJCQl7CisJCQkJCSRjcmxmbW9kZSA9IDEsIG5leHQgTElORSBpZiAkdmFsdWUgZXEgJ2NvbnZlcnQnOworCQkJCQkkY3JsZm1vZGUgPSAwLCBuZXh0IExJTkUgaWYgJHZhbHVlIGVxICdub25lJzsKKwkJCQl9CisJCQkJZGllICJVbmtub3duIGNvbmZpZ3VyYXRpb24gb3B0aW9uOiAkbGluZVxuICI7CisJCQl9CisJCQkjIFJldmlzaW9uIHNwZWNpZmljYXRpb24KKwkJCWlmICgyID09ICRzZWN0aW9udHlwZSkKKwkJCXsKKwkJCQlteSAkY3VycmVudCA9ICRyZXZtYXB7JHJldn07CisJCQkJJGF1dGhvcnskY3VycmVudH0gPSAkdmFsdWUsIG5leHQgTElORSBpZiAka2V5IGVxICdhdXRob3InOworCQkJCSRicmFuY2h7JGN1cnJlbnR9ID0gJHZhbHVlLCBuZXh0IExJTkUgaWYgJGtleSBlcSAnYnJhbmNoJzsKKwkJCQkkcGFyZW50eyRjdXJyZW50fSA9ICR2YWx1ZSwgbmV4dCBMSU5FIGlmICRrZXkgZXEgJ3BhcmVudCc7CisJCQkJJHRpbWVzb3VyY2V7JGN1cnJlbnR9ID0gJHZhbHVlLCBuZXh0IExJTkUgaWYgJGtleSBlcSAndGltZXN0YW1wJzsKKwkJCQlwdXNoKEB7JG1lcmdlc3skY3VycmVudH19LCAkdmFsdWUpLCBuZXh0IExJTkUgaWYgJGtleSBlcSAnbWVyZ2VzJzsKKwkJCQlkaWUgIlVua25vd24gcmV2aXNpb24gb3B0aW9uOiAkbGluZVxuICI7CisJCQl9CisJCQkjIEZpbGVzcGVjcworCQkJaWYgKDMgPT0gJHNlY3Rpb250eXBlKQorCQkJeworCQkJCSMgQWRkIHRoZSBmaWxlIGFuZCBjcmVhdGUgYSBtYXJrZXIKKwkJCQlkaWUgIkZpbGUgbm90IGZvdW5kOiAkbGluZVxuICIgdW5sZXNzIC1mICR2YWx1ZTsKKwkJCQlteSAkY3VycmVudCA9ICRyZXZtYXB7JHJldn07CisJCQkJJHskZmlsZXN7JGN1cnJlbnR9fXska2V5fSA9ICRtYXJrOworCQkJCW15ICR0aW1lID0gJmZpbGVibG9iKCR2YWx1ZSwgJGNybGZtb2RlLCAkbWFyayArKyk7CisKKwkJCQkjIFVwZGF0ZSByZXZpc2lvbiB0aW1lc3RhbXAgaWYgbW9yZSByZWNlbnQgdGhhbiBvdGhlcgorCQkJCSMgZmlsZXMgc2Vlbiwgb3IgaWYgdGhpcyBpcyB0aGUgZmlsZSB3ZSBoYXZlIHNlbGVjdGVkCisJCQkJIyB0byB0YWtlIHRoZSB0aW1lIHN0YW1wIGZyb20gdXNpbmcgdGhlICJ0aW1lc3RhbXAiCisJCQkJIyBkaXJlY3RpdmUuCisJCQkJaWYgKChkZWZpbmVkICR0aW1lc291cmNleyRjdXJyZW50fSAmJiAkdGltZXNvdXJjZXskY3VycmVudH0gZXEgJHZhbHVlKQorCQkJCSAgICB8fCAkdGltZSA+ICR0aW1leyRjdXJyZW50fSkKKwkJCQl7CisJCQkJCSR0aW1leyRjdXJyZW50fSA9ICR0aW1lOworCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCWRpZSAiUGFyc2UgZXJyb3I6ICRsaW5lXG4gIjsKKwkJfQorCX0KKwllbHNlCisJeworCQkjIENvbW1pdCBtZXNzYWdlCisJCW15ICRjdXJyZW50ID0gJHJldm1hcHskcmV2fTsKKwkJaWYgKGRlZmluZWQgJG1lc3NhZ2V7JGN1cnJlbnR9KQorCQl7CisJCQkkbWVzc2FnZXskY3VycmVudH0gLj0gIlxuIjsKKwkJfQorCQkkbWVzc2FnZXskY3VycmVudH0gLj0gJGxpbmU7CisJfQorfQorY2xvc2UgQ0ZHOworCisjIFN0YXJ0IHNwZXdpbmcgb3V0IGRhdGEgZm9yIGdpdC1mYXN0LWltcG9ydAorZm9yZWFjaCBteSAkY29tbWl0IChAcmV2cykKK3sKKwkjIFByb2dyZXNzCisJcHJpbnQgT1VUICJwcm9ncmVzcyBDcmVhdGluZyByZXZpc2lvbiAkY29tbWl0XG4iOworCisJIyBDcmVhdGUgY29tbWl0IGhlYWRlcgorCW15ICRtYXJrID0gJHJldm1hcHskY29tbWl0fTsKKworCSMgQnJhbmNoIGFuZCBjb21taXQgaWQKKwlwcmludCBPVVQgImNvbW1pdCByZWZzL2hlYWRzLyIsICRicmFuY2h7JG1hcmt9LCAiXG5tYXJrIDoiLCAkbWFyaywgIlxuIjsKKworCSMgQXV0aG9yIGFuZCB0aW1lc3RhbXAKKwlkaWUgIk5vIHRpbWVzdGFtcCBkZWZpbmVkIGZvciAkY29tbWl0IChubyBmaWxlcz8pXG4iIHVubGVzcyBkZWZpbmVkICR0aW1leyRtYXJrfTsKKwlwcmludCBPVVQgImNvbW1pdHRlciAiLCAkYXV0aG9yeyRtYXJrfSwgIiAiLCAkdGltZXskbWFya30sICIgKzAxMDBcbiI7CisKKwkjIENvbW1pdCBtZXNzYWdlCisJZGllICJObyBtZXNzYWdlIGRlZmluZWQgZm9yICRjb21taXRcbiIgdW5sZXNzIGRlZmluZWQgJG1lc3NhZ2V7JG1hcmt9OworCW15ICRtZXNzYWdlID0gJG1lc3NhZ2V7JG1hcmt9OworCSRtZXNzYWdlID1+IHMvXG4kLy87ICMgS2lsbCB0cmFpbGluZyBlbXB0eSBsaW5lCisJcHJpbnQgT1VUICJkYXRhICIsIGxlbmd0aCgkbWVzc2FnZSksICJcbiIsICRtZXNzYWdlLCAiXG4iOworCisJIyBQYXJlbnQgYW5kIGFueSBtZXJnZXMKKwlwcmludCBPVVQgImZyb20gOiIsICRyZXZtYXB7JHBhcmVudHskbWFya319LCAiXG4iIGlmIGRlZmluZWQgJHBhcmVudHskbWFya307CisJaWYgKGRlZmluZWQgJG1lcmdlc3skbWFya30pCisJeworCQlmb3JlYWNoIG15ICRtZXJnZSAoQHskbWVyZ2VzeyRtYXJrfX0pCisJCXsKKwkJCXByaW50IE9VVCAibWVyZ2UgOiIsICRyZXZtYXB7JG1lcmdlfSwgIlxuIjsKKwkJfQorCX0KKworCSMgT3V0cHV0IGZpbGUgbWFya3MKKwlwcmludCBPVVQgImRlbGV0ZWFsbFxuIjsgIyBzdGFydCBmcm9tIHNjcmF0Y2gKKwlmb3JlYWNoIG15ICRmaWxlIChzb3J0IGtleXMgJXskZmlsZXN7JG1hcmt9fSkKKwl7CisJCXByaW50IE9VVCAiTSA2NDQgOiIsICR7JGZpbGVzeyRtYXJrfX17JGZpbGV9LCAiICRmaWxlXG4iOworCX0KKwlwcmludCBPVVQgIlxuIjsKK30KKworIyBDcmVhdGUgb25lIGZpbGUgYmxvYgorc3ViIGZpbGVibG9iCit7CisJbXkgKCRmaWxlbmFtZSwgJGNybGZtb2RlLCAkbWFyaykgPSBAXzsKKworCSMgSW1wb3J0IHRoZSBmaWxlCisJcHJpbnQgT1VUICJwcm9ncmVzcyBJbXBvcnRpbmcgJGZpbGVuYW1lXG5ibG9iXG5tYXJrIDokbWFya1xuIjsKKwlvcGVuIEZJTEUsICc8JywgJGZpbGVuYW1lIG9yIGRpZSAiQ2Fubm90IHJlYWQgJGZpbGVuYW1lXG4gIjsKKwliaW5tb2RlIEZJTEU7CisJbXkgKCRzaXplLCAkbXRpbWUpID0gKHN0YXQoRklMRSkpWzcsOV07CisJbXkgJGZpbGU7CisJcmVhZCBGSUxFLCAkZmlsZSwgJHNpemU7CisJY2xvc2UgRklMRTsKKwkkZmlsZSA9fiBzL1xyXG4vXG4vZyBpZiAkY3JsZm1vZGU7CisJcHJpbnQgT1VUICJkYXRhICIsIGxlbmd0aCgkZmlsZSksICJcbiIsICRmaWxlLCAiXG4iOworCisJcmV0dXJuICRtdGltZTsKK30KKworIyBQYXJzZSBhIGtleT12YWx1ZSBwYWlyCitzdWIgcGFyc2VrZXl2YWx1ZXBhaXIKK3sKKz1wb2QKKworPWhlYWQyIEVzY2FwaW5nIHNwZWNpYWwgY2hhcmFjdGVycworCitLZXkgYW5kIHZhbHVlIHN0cmluZ3MgbWF5IGJlIGVuY2xvc2VkIGluIHF1b3RlcywgaW4gd2hpY2ggY2FzZQord2hpdGVzcGFjZSBpbnNpZGUgdGhlIHF1b3RlcyBpcyBwcmVzZXJ2ZWQuIEFkZGl0aW9uYWxseSwgYW4gZXF1YWwKK3NpZ24gbWF5IGJlIGluY2x1ZGVkIGluIHRoZSBrZXkgYnkgcHJlY2VkaW5nIGl0IHdpdGggYSBiYWNrc2xhc2guCitGb3IgZXhhbXBsZToKKworICJrZXkxICI9dmFsdWUxCisga2V5Mj0iIHZhbHVlMiIKKyBrZXlcPTM9dmFsdWUzCisga2V5ND12YWx1ZT00CisgImtleTUiIj12YWx1ZTUKKworSGVyZSB0aGUgZmlyc3Qga2V5IGlzICJrZXkxICIgKG5vdGUgdGhlIHRyYWlsaW5nIHdoaXRlLXNwYWNlKSBhbmQgdGhlCitzZWNvbmQgdmFsdWUgaXMgIiB2YWx1ZTIiIChub3RlIHRoZSBsZWFkaW5nIHdoaXRlLXNwYWNlKS4gVGhlIHRoaXJkCitrZXkgY29udGFpbnMgYW4gZXF1YWwgc2lnbiAia2V5PTMiIGFuZCBzbyBkb2VzIHRoZSBmb3VydGggdmFsdWUsIHdoaWNoCitkb2VzIG5vdCBuZWVkIHRvIGJlIGVzY2FwZWQuIFRoZSBmaWZ0aCBrZXkgY29udGFpbnMgYSB0cmFpbGluZyBxdW90ZSwKK3doaWNoIGRvZXMgbm90IG5lZWQgdG8gYmUgZXNjYXBlZCBzaW5jZSBpdCBpcyBpbnNpZGUgYSBzdXJyb3VuZGluZworcXVvdGUuCisKKz1jdXQKKwlteSAkcGFpciA9IHNoaWZ0OworCisJIyBTZXBhcmF0ZSBrZXkgYW5kIHZhbHVlIGJ5IHRoZSBmaXJzdCBub24tcXVvdGVkIGVxdWFsIHNpZ24KKwlteSAoJGtleSwgJHZhbHVlKTsKKwlpZiAoJHBhaXIgPX4gL14oLipbXlxcXSk9KC4qKSQvKQorCXsKKwkJKCRrZXksICR2YWx1ZSkgPSAoJDEsICQyKQorCX0KKwllbHNlCisJeworCQlkaWUgIlBhcnNlIGVycm9yOiAkcGFpclxuICI7CisJfQorCisJIyBVbnF1b3RlIGFuZCB1bmVzY2FwZSB0aGUga2V5IGFuZCB2YWx1ZSBzZXBhcmF0ZWx5CisJcmV0dXJuICgmdW5lc2NhcGUoJGtleSksICZ1bmVzY2FwZSgkdmFsdWUpKTsKK30KKworIyBVbnF1b3RlIGFuZCB1bmVzY2FwZQorc3ViIHVuZXNjYXBlCit7CisJbXkgJHN0cmluZyA9IHNoaWZ0OworCisJIyBGaXJzdCByZW1vdmUgZW5jbG9zaW5nIHF1b3Rlcy4gQmFja3NsYXNoIGJlZm9yZSB0aGUgdHJhaWxpbmcKKwkjIHF1b3RlIGxlYXZlcyBib3RoLgorCWlmICgkc3RyaW5nID1+IC9eIiguKlteXFxdKSIkLykKKwl7CisJCSRzdHJpbmcgPSAkMTsKKwl9CisKKwkjIFNlY29uZCByZW1vdmUgYW55IGJhY2tzbGFzaGVzIGluc2lkZSB0aGUgdW5xdW90ZWQgc3RyaW5nLgorCSMgRm9yIGxhdGVyOiBIYW5kbGUgc3BlY2lhbCBzZXF1ZW5jZXMgbGlrZSBcdCA/CisJJHN0cmluZyA9fiBzL1xcKC4pLyQxL2c7CisKKwlyZXR1cm4gJHN0cmluZzsKK30KKworX19FTkRfXworCis9cG9kCisKKz1oZWFkMSBFWEFNUExFUworCitCPGltcG9ydC1kaXJlY3Rvcmllcy5wZXJsPiBGPHByb2plY3QuaW1wb3J0PgorCis9aGVhZDEgQVVUSE9SCisKK0NvcHlyaWdodCAyMDA4LTIwMDkgUGV0ZXIgS3JlZnRpbmcgRTxsdD5wZXRlckBzb2Z0d29sdmVzLnBwLnNlPgorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKz1jdXQKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZmFzdC1pbXBvcnQvaW1wb3J0LXRhcnMucGVybCBiL2NvbnRyaWIvZmFzdC1pbXBvcnQvaW1wb3J0LXRhcnMucGVybAppbmRleCA3OGU0MGQyLi45NTQzOGUxIDEwMDc1NQotLS0gYS9jb250cmliL2Zhc3QtaW1wb3J0L2ltcG9ydC10YXJzLnBlcmwKKysrIGIvY29udHJpYi9mYXN0LWltcG9ydC9pbXBvcnQtdGFycy5wZXJsCkBAIC04LDkgKzgsMjAgQEAKICMjICBwZXJsIGltcG9ydC10YXJzLnBlcmwgKi50YXIuYnoyCiAjIyAgZ2l0IHdoYXRjaGFuZ2VkIGltcG9ydC10YXJzCiAjIworIyMgVXNlIC0tbWV0YWluZm8gdG8gc3BlY2lmeSB0aGUgZXh0ZW5zaW9uIGZvciBhIG1ldGEgZGF0YSBmaWxlLCB3aGVyZQorIyMgaW1wb3J0LXRhcnMgY2FuIHJlYWQgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCBvcHRpb25hbGx5IGF1dGhvciBhbmQKKyMjIGNvbW1pdHRlciBpbmZvcm1hdGlvbi4KKyMjCisjIyAgZWNobyAnVGhpcyBpcyB0aGUgY29tbWl0IG1lc3NhZ2UnID4gbXlmaWxlLnRhci5iejIubXNnCisjIyAgcGVybCBpbXBvcnQtdGFycy5wZXJsIC0tbWV0YWluZm89bXNnIG15ZmlsZS50YXIuYnoyCiAKIHVzZSBzdHJpY3Q7Ci1kaWUgInVzYWdlOiBpbXBvcnQtdGFycyAqLnRhci57Z3osYnoyLFp9XG4iIHVubGVzcyBAQVJHVjsKK3VzZSBHZXRvcHQ6Okxvbmc7CisKK215ICRtZXRhZXh0ID0gJyc7CisKK2RpZSAidXNhZ2U6IGltcG9ydC10YXJzIFstLW1ldGFpbmZvPWV4dGVuc2lvbl0gKi50YXIue2d6LGJ6Mixsem1hLHh6LFp9XG4iCisJdW5sZXNzIEdldE9wdGlvbnMoJ21ldGFpbmZvPXMnID0+IFwkbWV0YWV4dCkgJiYgQEFSR1Y7CiAKIG15ICRicmFuY2hfbmFtZSA9ICdpbXBvcnQtdGFycyc7CiBteSAkYnJhbmNoX3JlZiA9ICJyZWZzL2hlYWRzLyRicmFuY2hfbmFtZSI7CkBAIC0zOCw2ICs0OSw5IEBACiAJfSBlbHNpZiAoJHRhcl9uYW1lID1+IHMvXC50YXJcLlokLy8pIHsKIAkJb3BlbihJLCAnLXwnLCAndW5jb21wcmVzcycsICctYycsICR0YXJfZmlsZSkKIAkJCW9yIGRpZSAiVW5hYmxlIHRvIHVuY29tcHJlc3MgLWMgJHRhcl9maWxlOiAkIVxuIjsKKwl9IGVsc2lmICgkdGFyX25hbWUgPX4gcy9cLih0YXJcLihsem1hfHh6KXwodGx6fHR4eikpJC8vKSB7CisJCW9wZW4oSSwgJy18JywgJ3h6JywgJy1kYycsICR0YXJfZmlsZSkKKwkJCW9yIGRpZSAiVW5hYmxlIHRvIHh6IC1kYyAkdGFyX2ZpbGU6ICQhXG4iOwogCX0gZWxzaWYgKCR0YXJfbmFtZSA9fiBzL1wudGFyJC8vKSB7CiAJCW9wZW4oSSwgJHRhcl9maWxlKSBvciBkaWUgIlVuYWJsZSB0byBvcGVuICR0YXJfZmlsZTogJCFcbiI7CiAJfSBlbHNlIHsKQEAgLTEwOSwxMiArMTIzLDQzIEBACiAJCSRoYXZlX3RvcF9kaXIgPSAwIGlmICR0b3BfZGlyIG5lICQxOwogCX0KIAorCW15ICRjb21taXRfbXNnID0gIkltcG9ydGVkIGZyb20gJHRhcl9maWxlLiI7CisJbXkgJHRoaXNfY29tbWl0dGVyX25hbWUgPSAkY29tbWl0dGVyX25hbWU7CisJbXkgJHRoaXNfY29tbWl0dGVyX2VtYWlsID0gJGNvbW1pdHRlcl9lbWFpbDsKKwlteSAkdGhpc19hdXRob3JfbmFtZSA9ICRhdXRob3JfbmFtZTsKKwlteSAkdGhpc19hdXRob3JfZW1haWwgPSAkYXV0aG9yX2VtYWlsOworCWlmICgkbWV0YWV4dCBuZSAnJykgeworCQkjIE9wdGlvbmFsbHkgcmVhZCBhIGNvbW1pdCBtZXNzYWdlIGZyb20gPGZpbGVuYW1lLnRhcj4ubXNnCisJCSMgQWRkIGEgbGluZSBvbiB0aGUgZm9ybSAiQ29tbWl0dGVyOiBuYW1lIDxlLW1haWw+IiB0byBvdmVycmlkZQorCQkjIHRoZSBjb21taXR0ZXIgYW5kICJBdXRob3I6IG5hbWUgPGUtbWFpbD4iIHRvIG92ZXJyaWRlIHRoZQorCQkjIGF1dGhvciBmb3IgdGhpcyB0YXIgYmFsbC4KKwkJaWYgKG9wZW4gTVNHLCAnPCcsICIke3Rhcl9maWxlfS4ke21ldGFleHR9IikgeworCQkJbXkgJGhlYWRlcl9kb25lID0gMDsKKwkJCSRjb21taXRfbXNnID0gJyc7CisJCQl3aGlsZSAoPE1TRz4pIHsKKwkJCQlpZiAoISRoZWFkZXJfZG9uZSAmJiAvXkNvbW1pdHRlcjpccysoW148Pl0qKVxzKzwoLiopPlxzKiQvaSkgeworCQkJCQkkdGhpc19jb21taXR0ZXJfbmFtZSA9ICQxOworCQkJCQkkdGhpc19jb21taXR0ZXJfZW1haWwgPSAkMjsKKwkJCQl9IGVsc2lmICghJGhlYWRlcl9kb25lICYmIC9eQXV0aG9yOlxzKyhbXjw+XSopXHMrPCguKik+XHMqJC9pKSB7CisJCQkJCSR0aGlzX2F1dGhvcl9uYW1lID0gJDE7CisJCQkJCSR0aGlzX2F1dGhvcl9lbWFpbCA9ICQyOworCQkJCX0gZWxzaWYgKCEkaGVhZGVyX2RvbmUgJiYgL14kLykgeyAjIGVtcHR5IGxpbmUgZW5kcyBoZWFkZXIuCisJCQkJCSRoZWFkZXJfZG9uZSA9IDE7CisJCQkJfSBlbHNlIHsKKwkJCQkJJGNvbW1pdF9tc2cgLj0gJF87CisJCQkJCSRoZWFkZXJfZG9uZSA9IDE7CisJCQkJfQorCQkJfQorCQkJY2xvc2UgTVNHOworCQl9CisJfQorCiAJcHJpbnQgRkkgPDxFT0Y7CiBjb21taXQgJGJyYW5jaF9yZWYKLWF1dGhvciAkYXV0aG9yX25hbWUgPCRhdXRob3JfZW1haWw+ICRhdXRob3JfdGltZSArMDAwMAotY29tbWl0dGVyICRjb21taXR0ZXJfbmFtZSA8JGNvbW1pdHRlcl9lbWFpbD4gJGNvbW1pdF90aW1lICswMDAwCithdXRob3IgJHRoaXNfYXV0aG9yX25hbWUgPCR0aGlzX2F1dGhvcl9lbWFpbD4gJGF1dGhvcl90aW1lICswMDAwCitjb21taXR0ZXIgJHRoaXNfY29tbWl0dGVyX25hbWUgPCR0aGlzX2NvbW1pdHRlcl9lbWFpbD4gJGNvbW1pdF90aW1lICswMDAwCiBkYXRhIDw8RU5EX09GX0NPTU1JVF9NRVNTQUdFCi1JbXBvcnRlZCBmcm9tICR0YXJfZmlsZS4KKyRjb21taXRfbXNnCiBFTkRfT0ZfQ09NTUlUX01FU1NBR0UKIAogZGVsZXRlYWxsCmRpZmYgLS1naXQgYS9jb250cmliL2hnLXRvLWdpdC9oZy10by1naXQucHkgYi9jb250cmliL2hnLXRvLWdpdC9oZy10by1naXQucHkKaW5kZXggMmE2ODM5ZC4uODU0Y2Q5NCAxMDA3NTUKLS0tIGEvY29udHJpYi9oZy10by1naXQvaGctdG8tZ2l0LnB5CisrKyBiL2NvbnRyaWIvaGctdG8tZ2l0L2hnLXRvLWdpdC5weQpAQCAtNTksMTQgKzU5LDE0IEBACiAgICAgZWxlbXMgPSByZS5jb21waWxlKCcoLio/KVxzKzwoLiopPicpLm1hdGNoKHVzZXIpCiAgICAgaWYgZWxlbXM6CiAgICAgICAgIGVudiArPSAnZXhwb3J0IEdJVF9BVVRIT1JfTkFNRT0iJXMiIDsnICUgZWxlbXMuZ3JvdXAoMSkKLSAgICAgICAgZW52ICs9ICdleHBvcnQgR0lUX0NPTU1JVEVSX05BTUU9IiVzIiA7JyAlIGVsZW1zLmdyb3VwKDEpCisgICAgICAgIGVudiArPSAnZXhwb3J0IEdJVF9DT01NSVRURVJfTkFNRT0iJXMiIDsnICUgZWxlbXMuZ3JvdXAoMSkKICAgICAgICAgZW52ICs9ICdleHBvcnQgR0lUX0FVVEhPUl9FTUFJTD0iJXMiIDsnICUgZWxlbXMuZ3JvdXAoMikKLSAgICAgICAgZW52ICs9ICdleHBvcnQgR0lUX0NPTU1JVEVSX0VNQUlMPSIlcyIgOycgJSBlbGVtcy5ncm91cCgyKQorICAgICAgICBlbnYgKz0gJ2V4cG9ydCBHSVRfQ09NTUlUVEVSX0VNQUlMPSIlcyIgOycgJSBlbGVtcy5ncm91cCgyKQogICAgIGVsc2U6CiAgICAgICAgIGVudiArPSAnZXhwb3J0IEdJVF9BVVRIT1JfTkFNRT0iJXMiIDsnICUgdXNlcgotICAgICAgICBlbnYgKz0gJ2V4cG9ydCBHSVRfQ09NTUlURVJfTkFNRT0iJXMiIDsnICUgdXNlcgorICAgICAgICBlbnYgKz0gJ2V4cG9ydCBHSVRfQ09NTUlUVEVSX05BTUU9IiVzIiA7JyAlIHVzZXIKICAgICAgICAgZW52ICs9ICdleHBvcnQgR0lUX0FVVEhPUl9FTUFJTD0gOycKLSAgICAgICAgZW52ICs9ICdleHBvcnQgR0lUX0NPTU1JVEVSX0VNQUlMPSA7JworICAgICAgICBlbnYgKz0gJ2V4cG9ydCBHSVRfQ09NTUlUVEVSX0VNQUlMPSA7JwogCiAgICAgZW52ICs9ICdleHBvcnQgR0lUX0FVVEhPUl9EQVRFPSIlcyIgOycgJSBkYXRlCiAgICAgZW52ICs9ICdleHBvcnQgR0lUX0NPTU1JVFRFUl9EQVRFPSIlcyIgOycgJSBkYXRlCmRpZmYgLS1naXQgYS9jb250cmliL2hvb2tzL3Bvc3QtcmVjZWl2ZS1lbWFpbCBiL2NvbnRyaWIvaG9va3MvcG9zdC1yZWNlaXZlLWVtYWlsCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggNjBjYmFiNi4uNThhMzVjOAotLS0gYS9jb250cmliL2hvb2tzL3Bvc3QtcmVjZWl2ZS1lbWFpbAorKysgYi9jb250cmliL2hvb2tzL3Bvc3QtcmVjZWl2ZS1lbWFpbApAQCAtNDQsNiArNDQsMTAgQEAKICMgICAtLXByZXR0eSAlcyIsIGRpc3BsYXlpbmcgdGhlIGNvbW1pdCBpZCwgYXV0aG9yLCBkYXRlIGFuZCBsb2cKICMgICBtZXNzYWdlLiAgVG8gbGlzdCBmdWxsIHBhdGNoZXMgc2VwYXJhdGVkIGJ5IGEgYmxhbmsgbGluZSwgeW91CiAjICAgY291bGQgc2V0IHRoaXMgdG8gImdpdCBzaG93IC1DICVzOyBlY2hvIi4KKyMgICBUbyBsaXN0IGEgZ2l0d2ViL2NnaXQgVVJMICphbmQqIGEgZnVsbCBwYXRjaCBmb3IgZWFjaCBjaGFuZ2Ugc2V0LCB1c2UgdGhpczoKKyMgICAgICJ0PSVzOyBwcmludGYgJ2h0dHA6Ly8uLi4vP2lkPSUlcycgXCR0OyBlY2hvO2VjaG87IGdpdCBzaG93IC1DIFwkdDsgZWNobyIKKyMgICBCZSBjYXJlZnVsIGlmICIuLi4iIGNvbnRhaW5zIHRoaW5ncyB0aGF0IHdpbGwgYmUgZXhwYW5kZWQgYnkgc2hlbGwgImV2YWwiCisjICAgb3IgcHJpbnRmLgogIwogIyBOb3RlcwogIyAtLS0tLQpAQCAtMzExLDggKzMxNSw4IEBACiAJIyAicmVtb3Rlcy8iIHdpbGwgYmUgaWdub3JlZCBhcyB3ZWxsLgogCiAJIyBMaXN0IGFsbCBvZiB0aGUgcmV2aXNpb25zIHRoYXQgd2VyZSByZW1vdmVkIGJ5IHRoaXMgdXBkYXRlLCBpbiBhCi0JIyBmYXN0IGZvcndhcmQgdXBkYXRlLCB0aGlzIGxpc3Qgd2lsbCBiZSBlbXB0eSwgYmVjYXVzZSByZXYtbGlzdCBPCi0JIyBeTiBpcyBlbXB0eS4gIEZvciBhIG5vbiBmYXN0IGZvcndhcmQsIE8gXk4gaXMgdGhlIGxpc3Qgb2YgcmVtb3ZlZAorCSMgZmFzdC1mb3J3YXJkIHVwZGF0ZSwgdGhpcyBsaXN0IHdpbGwgYmUgZW1wdHksIGJlY2F1c2UgcmV2LWxpc3QgTworCSMgXk4gaXMgZW1wdHkuICBGb3IgYSBub24tZmFzdC1mb3J3YXJkLCBPIF5OIGlzIHRoZSBsaXN0IG9mIHJlbW92ZWQKIAkjIHJldmlzaW9ucwogCWZhc3RfZm9yd2FyZD0iIgogCXJldj0iIgpAQCAtNDA3LDcgKzQxMSw3IEBACiAJIyByZXZpc2lvbiBiZWNhdXNlIHRoZSBiYXNlIGlzIGVmZmVjdGl2ZWx5IGEgcmFuZG9tIHJldmlzaW9uIGF0IHRoaXMKIAkjIHBvaW50IC0gdGhlIHVzZXIgd2lsbCBiZSBpbnRlcmVzdGVkIGluIHdoYXQgdGhpcyByZXZpc2lvbiBjaGFuZ2VkCiAJIyAtIGluY2x1ZGluZyB0aGUgdW5kb2luZyBvZiBwcmV2aW91cyByZXZpc2lvbnMgaW4gdGhlIGNhc2Ugb2YKLQkjIG5vbi1mYXN0IGZvcndhcmQgdXBkYXRlcy4KKwkjIG5vbi1mYXN0LWZvcndhcmQgdXBkYXRlcy4KIAllY2hvICIiCiAJZWNobyAiU3VtbWFyeSBvZiBjaGFuZ2VzOiIKIAlnaXQgZGlmZi10cmVlIC0tc3RhdCAtLXN1bW1hcnkgLS1maW5kLWNvcGllcy1oYXJkZXIgJG9sZHJldi4uJG5ld3JldgpkaWZmIC0tZ2l0IGEvY29udmVydC5jIGIvY29udmVydC5jCmluZGV4IDE4MTZlOTcuLjRmOGZjYjcgMTAwNjQ0Ci0tLSBhL2NvbnZlcnQuYworKysgYi9jb252ZXJ0LmMKQEAgLTI0MSw3ICsyNDEsNyBAQAogCWNvbnN0IGNoYXIgKmNtZDsKIH07CiAKLXN0YXRpYyBpbnQgZmlsdGVyX2J1ZmZlcihpbnQgZmQsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGZpbHRlcl9idWZmZXIoaW50IGluLCBpbnQgb3V0LCB2b2lkICpkYXRhKQogewogCS8qCiAJICogU3Bhd24gY21kIGFuZCBmZWVkIHRoZSBidWZmZXIgY29udGVudHMgdGhyb3VnaCBpdHMgc3RkaW4uCkBAIC0yNDksMTIgKzI0OSwxMyBAQAogCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNoaWxkX3Byb2Nlc3M7CiAJc3RydWN0IGZpbHRlcl9wYXJhbXMgKnBhcmFtcyA9IChzdHJ1Y3QgZmlsdGVyX3BhcmFtcyAqKWRhdGE7CiAJaW50IHdyaXRlX2Vyciwgc3RhdHVzOwotCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsgInNoIiwgIi1jIiwgcGFyYW1zLT5jbWQsIE5VTEwgfTsKKwljb25zdCBjaGFyICphcmd2W10gPSB7IHBhcmFtcy0+Y21kLCBOVUxMIH07CiAKIAltZW1zZXQoJmNoaWxkX3Byb2Nlc3MsIDAsIHNpemVvZihjaGlsZF9wcm9jZXNzKSk7CiAJY2hpbGRfcHJvY2Vzcy5hcmd2ID0gYXJndjsKKwljaGlsZF9wcm9jZXNzLnVzZV9zaGVsbCA9IDE7CiAJY2hpbGRfcHJvY2Vzcy5pbiA9IC0xOwotCWNoaWxkX3Byb2Nlc3Mub3V0ID0gZmQ7CisJY2hpbGRfcHJvY2Vzcy5vdXQgPSBvdXQ7CiAKIAlpZiAoc3RhcnRfY29tbWFuZCgmY2hpbGRfcHJvY2VzcykpCiAJCXJldHVybiBlcnJvcigiY2Fubm90IGZvcmsgdG8gcnVuIGV4dGVybmFsIGZpbHRlciAlcyIsIHBhcmFtcy0+Y21kKTsKQEAgLTI2Nyw3ICsyNjgsNyBAQAogCiAJc3RhdHVzID0gZmluaXNoX2NvbW1hbmQoJmNoaWxkX3Byb2Nlc3MpOwogCWlmIChzdGF0dXMpCi0JCWVycm9yKCJleHRlcm5hbCBmaWx0ZXIgJXMgZmFpbGVkICVkIiwgcGFyYW1zLT5jbWQsIC1zdGF0dXMpOworCQllcnJvcigiZXh0ZXJuYWwgZmlsdGVyICVzIGZhaWxlZCAlZCIsIHBhcmFtcy0+Y21kLCBzdGF0dXMpOwogCXJldHVybiAod3JpdGVfZXJyIHx8IHN0YXR1cyk7CiB9CiAKQEAgLTI5MSw2ICsyOTIsNyBAQAogCW1lbXNldCgmYXN5bmMsIDAsIHNpemVvZihhc3luYykpOwogCWFzeW5jLnByb2MgPSBmaWx0ZXJfYnVmZmVyOwogCWFzeW5jLmRhdGEgPSAmcGFyYW1zOworCWFzeW5jLm91dCA9IC0xOwogCXBhcmFtcy5zcmMgPSBzcmM7CiAJcGFyYW1zLnNpemUgPSBsZW47CiAJcGFyYW1zLmNtZCA9IGNtZDsKQEAgLTM3Nyw5ICszNzksOSBAQAogCXN0YXRpYyBzdHJ1Y3QgZ2l0X2F0dHIgKmF0dHJfZmlsdGVyOwogCiAJaWYgKCFhdHRyX2NybGYpIHsKLQkJYXR0cl9jcmxmID0gZ2l0X2F0dHIoImNybGYiLCA0KTsKLQkJYXR0cl9pZGVudCA9IGdpdF9hdHRyKCJpZGVudCIsIDUpOwotCQlhdHRyX2ZpbHRlciA9IGdpdF9hdHRyKCJmaWx0ZXIiLCA2KTsKKwkJYXR0cl9jcmxmID0gZ2l0X2F0dHIoImNybGYiKTsKKwkJYXR0cl9pZGVudCA9IGdpdF9hdHRyKCJpZGVudCIpOworCQlhdHRyX2ZpbHRlciA9IGdpdF9hdHRyKCJmaWx0ZXIiKTsKIAkJdXNlcl9jb252ZXJ0X3RhaWwgPSAmdXNlcl9jb252ZXJ0OwogCQlnaXRfY29uZmlnKHJlYWRfY29udmVydF9jb25maWcsIE5VTEwpOwogCX0KZGlmZiAtLWdpdCBhL2NvcHkuYyBiL2NvcHkuYwppbmRleCBlNTRkMTVhLi5hN2Y1OGZkIDEwMDY0NAotLS0gYS9jb3B5LmMKKysrIGIvY29weS5jCkBAIC0zNSw2ICszNSwxOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGNvcHlfdGltZXMoY29uc3QgY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJc3RydWN0IHV0aW1idWYgdGltZXM7CisJaWYgKHN0YXQoc3JjLCAmc3QpIDwgMCkKKwkJcmV0dXJuIC0xOworCXRpbWVzLmFjdGltZSA9IHN0LnN0X2F0aW1lOworCXRpbWVzLm1vZHRpbWUgPSBzdC5zdF9tdGltZTsKKwlpZiAodXRpbWUoZHN0LCAmdGltZXMpIDwgMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCiBpbnQgY29weV9maWxlKGNvbnN0IGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBpbnQgbW9kZSkKIHsKIAlpbnQgZmRpLCBmZG8sIHN0YXR1czsKQEAgLTU1LDMgKzY4LDExIEBACiAKIAlyZXR1cm4gc3RhdHVzOwogfQorCitpbnQgY29weV9maWxlX3dpdGhfdGltZShjb25zdCBjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgaW50IG1vZGUpCit7CisJaW50IHN0YXR1cyA9IGNvcHlfZmlsZShkc3QsIHNyYywgbW9kZSk7CisJaWYgKCFzdGF0dXMpCisJCXJldHVybiBjb3B5X3RpbWVzKGRzdCwgc3JjKTsKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvY3N1bS1maWxlLmMgYi9jc3VtLWZpbGUuYwppbmRleCAyZGRiMTJhLi40ZDUwY2M1IDEwMDY0NAotLS0gYS9jc3VtLWZpbGUuYworKysgYi9jc3VtLWZpbGUuYwpAQCAtMjYsNyArMjYsNyBAQAogCQl9CiAJCWlmICghcmV0KQogCQkJZGllKCJzaGExIGZpbGUgJyVzJyB3cml0ZSBlcnJvci4gT3V0IG9mIGRpc2tzcGFjZSIsIGYtPm5hbWUpOwotCQlkaWUoInNoYTEgZmlsZSAnJXMnIHdyaXRlIGVycm9yICglcykiLCBmLT5uYW1lLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oInNoYTEgZmlsZSAnJXMnIHdyaXRlIGVycm9yIiwgZi0+bmFtZSk7CiAJfQogfQogCkBAIC01NSw4ICs1NSw3IEBACiAJCWlmIChmbGFncyAmIENTVU1fRlNZTkMpCiAJCQlmc3luY19vcl9kaWUoZi0+ZmQsIGYtPm5hbWUpOwogCQlpZiAoY2xvc2UoZi0+ZmQpKQotCQkJZGllKCIlczogc2hhMSBmaWxlIGVycm9yIG9uIGNsb3NlICglcykiLAotCQkJICAgIGYtPm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCQlkaWVfZXJybm8oIiVzOiBzaGExIGZpbGUgZXJyb3Igb24gY2xvc2UiLCBmLT5uYW1lKTsKIAkJZmQgPSAwOwogCX0gZWxzZQogCQlmZCA9IGYtPmZkOwpkaWZmIC0tZ2l0IGEvZGFlbW9uLmMgYi9kYWVtb24uYwppbmRleCBiMmJhYmNjLi43ZDllMWMwIDEwMDY0NAotLS0gYS9kYWVtb24uYworKysgYi9kYWVtb24uYwpAQCAtMSw2ICsxLDggQEAKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgInBrdC1saW5lLmgiCiAjaW5jbHVkZSAiZXhlY19jbWQuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgogCiAjaW5jbHVkZSA8c3lzbG9nLmg+CiAKQEAgLTc1LDYgKzc3LDcgQEAKIAl9CiB9CiAKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCiBzdGF0aWMgdm9pZCBsb2dlcnJvcihjb25zdCBjaGFyICplcnIsIC4uLikKIHsKIAl2YV9saXN0IHBhcmFtczsKQEAgLTgzLDYgKzg2LDcgQEAKIAl2YV9lbmQocGFyYW1zKTsKIH0KIAorX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKIHN0YXRpYyB2b2lkIGxvZ2luZm8oY29uc3QgY2hhciAqZXJyLCAuLi4pCiB7CiAJdmFfbGlzdCBwYXJhbXM7CkBAIC05OSw1MyArMTAzLDYgQEAKIAlleGl0KDEpOwogfQogCi1zdGF0aWMgaW50IGF2b2lkX2FsaWFzKGNoYXIgKnApCi17Ci0JaW50IHNsLCBuZG90OwotCi0JLyoKLQkgKiBUaGlzIHJlc3VycmVjdHMgdGhlIGJlbHRzIGFuZCBzdXNwZW5kZXJzIHBhcmFub2lhIGNoZWNrIGJ5IEhQQQotCSAqIGRvbmUgaW4gPDQzNTU2MEY3LjQwODAwMDZAenl0b3IuY29tPiB0aHJlYWQsIG5vdyBlbnRlcl9yZXBvKCkKLQkgKiBkb2VzIG5vdCBkbyBnZXRjd2QoKSBiYXNlZCBwYXRoIGNhbm9uaWNhbGl6YXRpb25zLgotCSAqCi0JICogc2wgYmVjb21lcyB0cnVlIGltbWVkaWF0ZWx5IGFmdGVyIHNlZWluZyAnLycgYW5kIGNvbnRpbnVlcyB0bwotCSAqIGJlIHRydWUgYXMgbG9uZyBhcyBkb3RzIGNvbnRpbnVlIGFmdGVyIHRoYXQgd2l0aG91dCBpbnRlcnZlbmluZwotCSAqIG5vbi1kb3QgY2hhcmFjdGVyLgotCSAqLwotCWlmICghcCB8fCAoKnAgIT0gJy8nICYmICpwICE9ICd+JykpCi0JCXJldHVybiAtMTsKLQlzbCA9IDE7IG5kb3QgPSAwOwotCXArKzsKLQotCXdoaWxlICgxKSB7Ci0JCWNoYXIgY2ggPSAqcCsrOwotCQlpZiAoc2wpIHsKLQkJCWlmIChjaCA9PSAnLicpCi0JCQkJbmRvdCsrOwotCQkJZWxzZSBpZiAoY2ggPT0gJy8nKSB7Ci0JCQkJaWYgKG5kb3QgPCAzKQotCQkJCQkvKiByZWplY3QgLy8sIC8uLyBhbmQgLy4uLyAqLwotCQkJCQlyZXR1cm4gLTE7Ci0JCQkJbmRvdCA9IDA7Ci0JCQl9Ci0JCQllbHNlIGlmIChjaCA9PSAwKSB7Ci0JCQkJaWYgKDAgPCBuZG90ICYmIG5kb3QgPCAzKQotCQkJCQkvKiByZWplY3QgLy4kIGFuZCAvLi4kICovCi0JCQkJCXJldHVybiAtMTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCWVsc2UKLQkJCQlzbCA9IG5kb3QgPSAwOwotCQl9Ci0JCWVsc2UgaWYgKGNoID09IDApCi0JCQlyZXR1cm4gMDsKLQkJZWxzZSBpZiAoY2ggPT0gJy8nKSB7Ci0JCQlzbCA9IDE7Ci0JCQluZG90ID0gMDsKLQkJfQotCX0KLX0KLQogc3RhdGljIGNoYXIgKnBhdGhfb2soY2hhciAqZGlyZWN0b3J5KQogewogCXN0YXRpYyBjaGFyIHJwYXRoW1BBVEhfTUFYXTsKQEAgLTE1NSw3ICsxMTIsNyBAQAogCiAJZGlyID0gZGlyZWN0b3J5OwogCi0JaWYgKGF2b2lkX2FsaWFzKGRpcikpIHsKKwlpZiAoZGFlbW9uX2F2b2lkX2FsaWFzKGRpcikpIHsKIAkJbG9nZXJyb3IoIiclcyc6IGFsaWFzZWQiLCBkaXIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC0xOTAsNyArMTQ3LDYgQEAKIAkJCXsgIklQIiwgaXBfYWRkcmVzcyB9LAogCQkJeyAiUCIsIHRjcF9wb3J0IH0sCiAJCQl7ICJEIiwgZGlyZWN0b3J5IH0sCi0JCQl7ICIlIiwgIiUiIH0sCiAJCQl7IE5VTEwgfQogCQl9OwogCkBAIC0zNDMsMjggKzI5OSw2NiBAQAogCXJldHVybiBzZXJ2aWNlLT5mbigpOwogfQogCitzdGF0aWMgdm9pZCBjb3B5X3RvX2xvZyhpbnQgZmQpCit7CisJc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CisJRklMRSAqZnA7CisKKwlmcCA9IGZkb3BlbihmZCwgInIiKTsKKwlpZiAoZnAgPT0gTlVMTCkgeworCQlsb2dlcnJvcigiZmRvcGVuIG9mIGVycm9yIGNoYW5uZWwgZmFpbGVkIik7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuOworCX0KKworCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmbGluZSwgZnAsICdcbicpICE9IEVPRikgeworCQlsb2dlcnJvcigiJXMiLCBsaW5lLmJ1Zik7CisJCXN0cmJ1Zl9zZXRsZW4oJmxpbmUsIDApOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lKTsKKwlmY2xvc2UoZnApOworfQorCitzdGF0aWMgaW50IHJ1bl9zZXJ2aWNlX2NvbW1hbmQoY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY2xkOworCisJbWVtc2V0KCZjbGQsIDAsIHNpemVvZihjbGQpKTsKKwljbGQuYXJndiA9IGFyZ3Y7CisJY2xkLmdpdF9jbWQgPSAxOworCWNsZC5lcnIgPSAtMTsKKwlpZiAoc3RhcnRfY29tbWFuZCgmY2xkKSkKKwkJcmV0dXJuIC0xOworCisJY2xvc2UoMCk7CisJY2xvc2UoMSk7CisKKwljb3B5X3RvX2xvZyhjbGQuZXJyKTsKKworCXJldHVybiBmaW5pc2hfY29tbWFuZCgmY2xkKTsKK30KKwogc3RhdGljIGludCB1cGxvYWRfcGFjayh2b2lkKQogewogCS8qIFRpbWVvdXQgYXMgc3RyaW5nICovCiAJY2hhciB0aW1lb3V0X2J1Zls2NF07CisJY29uc3QgY2hhciAqYXJndltdID0geyAidXBsb2FkLXBhY2siLCAiLS1zdHJpY3QiLCB0aW1lb3V0X2J1ZiwgIi4iLCBOVUxMIH07CiAKIAlzbnByaW50Zih0aW1lb3V0X2J1Ziwgc2l6ZW9mIHRpbWVvdXRfYnVmLCAiLS10aW1lb3V0PSV1IiwgdGltZW91dCk7Ci0KLQkvKiBnaXQtdXBsb2FkLXBhY2sgb25seSBldmVyIHJlYWRzIHN0dWZmLCBzbyB0aGlzIGlzIHNhZmUgKi8KLQlleGVjbF9naXRfY21kKCJ1cGxvYWQtcGFjayIsICItLXN0cmljdCIsIHRpbWVvdXRfYnVmLCAiLiIsIE5VTEwpOwotCXJldHVybiAtMTsKKwlyZXR1cm4gcnVuX3NlcnZpY2VfY29tbWFuZChhcmd2KTsKIH0KIAogc3RhdGljIGludCB1cGxvYWRfYXJjaGl2ZSh2b2lkKQogewotCWV4ZWNsX2dpdF9jbWQoInVwbG9hZC1hcmNoaXZlIiwgIi4iLCBOVUxMKTsKLQlyZXR1cm4gLTE7CisJc3RhdGljIGNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsgInVwbG9hZC1hcmNoaXZlIiwgIi4iLCBOVUxMIH07CisJcmV0dXJuIHJ1bl9zZXJ2aWNlX2NvbW1hbmQoYXJndik7CiB9CiAKIHN0YXRpYyBpbnQgcmVjZWl2ZV9wYWNrKHZvaWQpCiB7Ci0JZXhlY2xfZ2l0X2NtZCgicmVjZWl2ZS1wYWNrIiwgIi4iLCBOVUxMKTsKLQlyZXR1cm4gLTE7CisJc3RhdGljIGNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsgInJlY2VpdmUtcGFjayIsICIuIiwgTlVMTCB9OworCXJldHVybiBydW5fc2VydmljZV9jb21tYW5kKGFyZ3YpOwogfQogCiBzdGF0aWMgc3RydWN0IGRhZW1vbl9zZXJ2aWNlIGRhZW1vbl9zZXJ2aWNlW10gPSB7CkBAIC00MDUsNiArMzk5LDMzIEBACiAJcmV0dXJuIGR1cDsKIH0KIAorc3RhdGljIHZvaWQgcGFyc2VfaG9zdF9hbmRfcG9ydChjaGFyICpob3N0cG9ydCwgY2hhciAqKmhvc3QsCisJY2hhciAqKnBvcnQpCit7CisJaWYgKCpob3N0cG9ydCA9PSAnWycpIHsKKwkJY2hhciAqZW5kOworCisJCWVuZCA9IHN0cmNocihob3N0cG9ydCwgJ10nKTsKKwkJaWYgKCFlbmQpCisJCQlkaWUoIkludmFsaWQgcmVxdWVzdCAoJ1snIHdpdGhvdXQgJ10nKSIpOworCQkqZW5kID0gJ1wwJzsKKwkJKmhvc3QgPSBob3N0cG9ydCArIDE7CisJCWlmICghZW5kWzFdKQorCQkJKnBvcnQgPSBOVUxMOworCQllbHNlIGlmIChlbmRbMV0gPT0gJzonKQorCQkJKnBvcnQgPSBlbmQgKyAyOworCQllbHNlCisJCQlkaWUoIkdhcmJhZ2UgYWZ0ZXIgZW5kIG9mIGhvc3QgcGFydCIpOworCX0gZWxzZSB7CisJCSpob3N0ID0gaG9zdHBvcnQ7CisJCSpwb3J0ID0gc3RycmNocihob3N0cG9ydCwgJzonKTsKKwkJaWYgKCpwb3J0KSB7CisJCQkqKnBvcnQgPSAnXDAnOworCQkJKysqcG9ydDsKKwkJfQorCX0KK30KKwogLyoKICAqIFJlYWQgdGhlIGhvc3QgYXMgc3VwcGxpZWQgYnkgdGhlIGNsaWVudCBjb25uZWN0aW9uLgogICovCkBAIC00MjEsMTEgKzQ0MiwxMCBAQAogCQkJdmFsbGVuID0gc3RybGVuKHZhbCkgKyAxOwogCQkJaWYgKCp2YWwpIHsKIAkJCQkvKiBTcGxpdCA8aG9zdD46PHBvcnQ+IGF0IGNvbG9uLiAqLwotCQkJCWNoYXIgKmhvc3QgPSB2YWw7Ci0JCQkJY2hhciAqcG9ydCA9IHN0cnJjaHIoaG9zdCwgJzonKTsKKwkJCQljaGFyICpob3N0OworCQkJCWNoYXIgKnBvcnQ7CisJCQkJcGFyc2VfaG9zdF9hbmRfcG9ydCh2YWwsICZob3N0LCAmcG9ydCk7CiAJCQkJaWYgKHBvcnQpIHsKLQkJCQkJKnBvcnQgPSAwOwotCQkJCQlwb3J0Kys7CiAJCQkJCWZyZWUodGNwX3BvcnQpOwogCQkJCQl0Y3BfcG9ydCA9IHhzdHJkdXAocG9ydCk7CiAJCQkJfQpAQCAtNDUzLDcgKzQ3Myw3IEBACiAJCW1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOwogCQloaW50cy5haV9mbGFncyA9IEFJX0NBTk9OTkFNRTsKIAotCQlnYWkgPSBnZXRhZGRyaW5mbyhob3N0bmFtZSwgMCwgJmhpbnRzLCAmYWkpOworCQlnYWkgPSBnZXRhZGRyaW5mbyhob3N0bmFtZSwgTlVMTCwgJmhpbnRzLCAmYWkpOwogCQlpZiAoIWdhaSkgewogCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW5fYWRkciA9ICh2b2lkICopYWktPmFpX2FkZHI7CiAKQEAgLTU2Nyw2ICs1ODcsMjQgQEAKIAlyZXR1cm4gLTE7CiB9CiAKK3N0YXRpYyBpbnQgYWRkcmNtcChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqczEsCisgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKnMyKQoreworCWlmIChzMS0+c3NfZmFtaWx5ICE9IHMyLT5zc19mYW1pbHkpCisJCXJldHVybiBzMS0+c3NfZmFtaWx5IC0gczItPnNzX2ZhbWlseTsKKwlpZiAoczEtPnNzX2ZhbWlseSA9PSBBRl9JTkVUKQorCQlyZXR1cm4gbWVtY21wKCYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXMxKS0+c2luX2FkZHIsCisJCSAgICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzMiktPnNpbl9hZGRyLAorCQkgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7CisjaWZuZGVmIE5PX0lQVjYKKwlpZiAoczEtPnNzX2ZhbWlseSA9PSBBRl9JTkVUNikKKwkJcmV0dXJuIG1lbWNtcCgmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopczEpLT5zaW42X2FkZHIsCisJCSAgICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopczIpLT5zaW42X2FkZHIsCisJCSAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBtYXhfY29ubmVjdGlvbnMgPSAzMjsKIAogc3RhdGljIHVuc2lnbmVkIGludCBsaXZlX2NoaWxkcmVuOwpAQCAtNTgxLDE3ICs2MTksMTIgQEAKIHsKIAlzdHJ1Y3QgY2hpbGQgKm5ld2Jvcm4sICoqY3JhZGxlOwogCi0JLyoKLQkgKiBUaGlzIG11c3QgYmUgeGNhbGxvYygpIC0tIHdlJ2xsIGNvbXBhcmUgdGhlIHdob2xlIHNvY2thZGRyX3N0b3JhZ2UKLQkgKiBidXQgaW5kaXZpZHVhbCBhZGRyZXNzIG1heSBiZSBzaG9ydGVyLgotCSAqLwogCW5ld2Jvcm4gPSB4Y2FsbG9jKDEsIHNpemVvZigqbmV3Ym9ybikpOwogCWxpdmVfY2hpbGRyZW4rKzsKIAluZXdib3JuLT5waWQgPSBwaWQ7CiAJbWVtY3B5KCZuZXdib3JuLT5hZGRyZXNzLCBhZGRyLCBhZGRybGVuKTsKIAlmb3IgKGNyYWRsZSA9ICZmaXJzdGJvcm47ICpjcmFkbGU7IGNyYWRsZSA9ICYoKmNyYWRsZSktPm5leHQpCi0JCWlmICghbWVtY21wKCYoKmNyYWRsZSktPmFkZHJlc3MsICZuZXdib3JuLT5hZGRyZXNzLAotCQkJICAgIHNpemVvZihuZXdib3JuLT5hZGRyZXNzKSkpCisJCWlmICghYWRkcmNtcCgmKCpjcmFkbGUpLT5hZGRyZXNzLCAmbmV3Ym9ybi0+YWRkcmVzcykpCiAJCQlicmVhazsKIAluZXdib3JuLT5uZXh0ID0gKmNyYWRsZTsKIAkqY3JhZGxlID0gbmV3Ym9ybjsKQEAgLTYyNCw4ICs2NTcsNyBAQAogCQlyZXR1cm47CiAKIAlmb3IgKDsgKG5leHQgPSBibGFua2V0LT5uZXh0KTsgYmxhbmtldCA9IG5leHQpCi0JCWlmICghbWVtY21wKCZibGFua2V0LT5hZGRyZXNzLCAmbmV4dC0+YWRkcmVzcywKLQkJCSAgICBzaXplb2YobmV4dC0+YWRkcmVzcykpKSB7CisJCWlmICghYWRkcmNtcCgmYmxhbmtldC0+YWRkcmVzcywgJm5leHQtPmFkZHJlc3MpKSB7CiAJCQlraWxsKGJsYW5rZXQtPnBpZCwgU0lHVEVSTSk7CiAJCQlicmVhazsKIAkJfQpAQCAtODYyLDcgKzg5NCw3IEBACiAJCQkJCWNhc2UgRUNPTk5BQk9SVEVEOgogCQkJCQkJY29udGludWU7CiAJCQkJCWRlZmF1bHQ6Ci0JCQkJCQlkaWUoImFjY2VwdCByZXR1cm5lZCAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCQkJCQlkaWVfZXJybm8oImFjY2VwdCByZXR1cm5lZCIpOwogCQkJCQl9CiAJCQkJfQogCQkJCWhhbmRsZShpbmNvbWluZywgKHN0cnVjdCBzb2NrYWRkciAqKSZzcywgc3NsZW4pOwpAQCAtODc4LDcgKzkxMCw3IEBACiAJd2hpbGUgKGZkICE9IC0xICYmIGZkIDwgMikKIAkJZmQgPSBkdXAoZmQpOwogCWlmIChmZCA9PSAtMSkKLQkJZGllKCJvcGVuIC9kZXYvbnVsbCBvciBkdXAgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygib3BlbiAvZGV2L251bGwgb3IgZHVwIGZhaWxlZCIpOwogCWlmIChmZCA+IDIpCiAJCWNsb3NlKGZkKTsKIH0KQEAgLTg4OSwxMiArOTIxLDEyIEBACiAJCWNhc2UgMDoKIAkJCWJyZWFrOwogCQljYXNlIC0xOgotCQkJZGllKCJmb3JrIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJmb3JrIGZhaWxlZCIpOwogCQlkZWZhdWx0OgogCQkJZXhpdCgwKTsKIAl9CiAJaWYgKHNldHNpZCgpID09IC0xKQotCQlkaWUoInNldHNpZCBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJzZXRzaWQgZmFpbGVkIik7CiAJY2xvc2UoMCk7CiAJY2xvc2UoMSk7CiAJY2xvc2UoMik7CkBAIC05MDUsOSArOTM3LDkgQEAKIHsKIAlGSUxFICpmID0gZm9wZW4ocGF0aCwgInciKTsKIAlpZiAoIWYpCi0JCWRpZSgiY2Fubm90IG9wZW4gcGlkIGZpbGUgJXM6ICVzIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJjYW5ub3Qgb3BlbiBwaWQgZmlsZSAnJXMnIiwgcGF0aCk7CiAJaWYgKGZwcmludGYoZiwgIiUiUFJJdU1BWCJcbiIsICh1aW50bWF4X3QpIGdldHBpZCgpKSA8IDAgfHwgZmNsb3NlKGYpICE9IDApCi0JCWRpZSgiZmFpbGVkIHRvIHdyaXRlIHBpZCBmaWxlICVzOiAlcyIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiZmFpbGVkIHRvIHdyaXRlIHBpZCBmaWxlICclcyciLCBwYXRoKTsKIH0KIAogc3RhdGljIGludCBzZXJ2ZShjaGFyICpsaXN0ZW5fYWRkciwgaW50IGxpc3Rlbl9wb3J0LCBzdHJ1Y3QgcGFzc3dkICpwYXNzLCBnaWRfdCBnaWQpCkBAIC0xMTA3LDggKzExMzksNyBAQAogCQlzb2NrbGVuX3Qgc2xlbiA9IHNpemVvZihzcyk7CiAKIAkJaWYgKCFmcmVvcGVuKCIvZGV2L251bGwiLCAidyIsIHN0ZGVycikpCi0JCQlkaWUoImZhaWxlZCB0byByZWRpcmVjdCBzdGRlcnIgdG8gL2Rldi9udWxsOiAlcyIsCi0JCQkgICAgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygiZmFpbGVkIHRvIHJlZGlyZWN0IHN0ZGVyciB0byAvZGV2L251bGwiKTsKIAogCQlpZiAoZ2V0cGVlcm5hbWUoMCwgcGVlciwgJnNsZW4pKQogCQkJcGVlciA9IE5VTEw7CmRpZmYgLS1naXQgYS9kYXRlLmMgYi9kYXRlLmMKaW5kZXggZjAxMTY5Mi4uMDAyYWEzYyAxMDA2NDQKLS0tIGEvZGF0ZS5jCisrKyBiL2RhdGUuYwpAQCAtOSw3ICs5LDcgQEAKIC8qCiAgKiBUaGlzIGlzIGxpa2UgbWt0aW1lLCBidXQgd2l0aG91dCBub3JtYWxpemF0aW9uIG9mIHRtX3dkYXkgYW5kIHRtX3lkYXkuCiAgKi8KLXRpbWVfdCB0bV90b190aW1lX3QoY29uc3Qgc3RydWN0IHRtICp0bSkKK3N0YXRpYyB0aW1lX3QgdG1fdG9fdGltZV90KGNvbnN0IHN0cnVjdCB0bSAqdG0pCiB7CiAJc3RhdGljIGNvbnN0IGludCBtZGF5c1tdID0gewogCSAgICAwLCAzMSwgNTksIDkwLCAxMjAsIDE1MSwgMTgxLCAyMTIsIDI0MywgMjczLCAzMDQsIDMzNApAQCAtMjQsNiArMjQsOCBAQAogCQlyZXR1cm4gLTE7CiAJaWYgKG1vbnRoIDwgMiB8fCAoeWVhciArIDIpICUgNCkKIAkJZGF5LS07CisJaWYgKHRtLT50bV9ob3VyIDwgMCB8fCB0bS0+dG1fbWluIDwgMCB8fCB0bS0+dG1fc2VjIDwgMCkKKwkJcmV0dXJuIC0xOwogCXJldHVybiAoeWVhciAqIDM2NSArICh5ZWFyICsgMSkgLyA0ICsgbWRheXNbbW9udGhdICsgZGF5KSAqIDI0KjYwKjYwVUwgKwogCQl0bS0+dG1faG91ciAqIDYwKjYwICsgdG0tPnRtX21pbiAqIDYwICsgdG0tPnRtX3NlYzsKIH0KQEAgLTg0LDYgKzg2LDY3IEBACiAJcmV0dXJuIG9mZnNldCAqIGVhc3R3ZXN0OwogfQogCitjb25zdCBjaGFyICpzaG93X2RhdGVfcmVsYXRpdmUodW5zaWduZWQgbG9uZyB0aW1lLCBpbnQgdHosCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHRpbWV2YWwgKm5vdywKKwkJCSAgICAgICBjaGFyICp0aW1lYnVmLAorCQkJICAgICAgIHNpemVfdCB0aW1lYnVmX3NpemUpCit7CisJdW5zaWduZWQgbG9uZyBkaWZmOworCWlmIChub3ctPnR2X3NlYyA8IHRpbWUpCisJCXJldHVybiAiaW4gdGhlIGZ1dHVyZSI7CisJZGlmZiA9IG5vdy0+dHZfc2VjIC0gdGltZTsKKwlpZiAoZGlmZiA8IDkwKSB7CisJCXNucHJpbnRmKHRpbWVidWYsIHRpbWVidWZfc2l6ZSwgIiVsdSBzZWNvbmRzIGFnbyIsIGRpZmYpOworCQlyZXR1cm4gdGltZWJ1ZjsKKwl9CisJLyogVHVybiBpdCBpbnRvIG1pbnV0ZXMgKi8KKwlkaWZmID0gKGRpZmYgKyAzMCkgLyA2MDsKKwlpZiAoZGlmZiA8IDkwKSB7CisJCXNucHJpbnRmKHRpbWVidWYsIHRpbWVidWZfc2l6ZSwgIiVsdSBtaW51dGVzIGFnbyIsIGRpZmYpOworCQlyZXR1cm4gdGltZWJ1ZjsKKwl9CisJLyogVHVybiBpdCBpbnRvIGhvdXJzICovCisJZGlmZiA9IChkaWZmICsgMzApIC8gNjA7CisJaWYgKGRpZmYgPCAzNikgeworCQlzbnByaW50Zih0aW1lYnVmLCB0aW1lYnVmX3NpemUsICIlbHUgaG91cnMgYWdvIiwgZGlmZik7CisJCXJldHVybiB0aW1lYnVmOworCX0KKwkvKiBXZSBkZWFsIHdpdGggbnVtYmVyIG9mIGRheXMgZnJvbSBoZXJlIG9uICovCisJZGlmZiA9IChkaWZmICsgMTIpIC8gMjQ7CisJaWYgKGRpZmYgPCAxNCkgeworCQlzbnByaW50Zih0aW1lYnVmLCB0aW1lYnVmX3NpemUsICIlbHUgZGF5cyBhZ28iLCBkaWZmKTsKKwkJcmV0dXJuIHRpbWVidWY7CisJfQorCS8qIFNheSB3ZWVrcyBmb3IgdGhlIHBhc3QgMTAgd2Vla3Mgb3Igc28gKi8KKwlpZiAoZGlmZiA8IDcwKSB7CisJCXNucHJpbnRmKHRpbWVidWYsIHRpbWVidWZfc2l6ZSwgIiVsdSB3ZWVrcyBhZ28iLCAoZGlmZiArIDMpIC8gNyk7CisJCXJldHVybiB0aW1lYnVmOworCX0KKwkvKiBTYXkgbW9udGhzIGZvciB0aGUgcGFzdCAxMiBtb250aHMgb3Igc28gKi8KKwlpZiAoZGlmZiA8IDM2NSkgeworCQlzbnByaW50Zih0aW1lYnVmLCB0aW1lYnVmX3NpemUsICIlbHUgbW9udGhzIGFnbyIsIChkaWZmICsgMTUpIC8gMzApOworCQlyZXR1cm4gdGltZWJ1ZjsKKwl9CisJLyogR2l2ZSB5ZWFycyBhbmQgbW9udGhzIGZvciA1IHllYXJzIG9yIHNvICovCisJaWYgKGRpZmYgPCAxODI1KSB7CisJCXVuc2lnbmVkIGxvbmcgeWVhcnMgPSBkaWZmIC8gMzY1OworCQl1bnNpZ25lZCBsb25nIG1vbnRocyA9IChkaWZmICUgMzY1ICsgMTUpIC8gMzA7CisJCWludCBuOworCQluID0gc25wcmludGYodGltZWJ1ZiwgdGltZWJ1Zl9zaXplLCAiJWx1IHllYXIlcyIsCisJCQkJeWVhcnMsICh5ZWFycyA+IDEgPyAicyIgOiAiIikpOworCQlpZiAobW9udGhzKQorCQkJc25wcmludGYodGltZWJ1ZiArIG4sIHRpbWVidWZfc2l6ZSAtIG4sCisJCQkJCSIsICVsdSBtb250aCVzIGFnbyIsCisJCQkJCW1vbnRocywgKG1vbnRocyA+IDEgPyAicyIgOiAiIikpOworCQllbHNlCisJCQlzbnByaW50Zih0aW1lYnVmICsgbiwgdGltZWJ1Zl9zaXplIC0gbiwgIiBhZ28iKTsKKwkJcmV0dXJuIHRpbWVidWY7CisJfQorCS8qIE90aGVyd2lzZSwganVzdCB5ZWFycy4gQ2VudHVyaWVzIGlzIHByb2JhYmx5IG92ZXJraWxsLiAqLworCXNucHJpbnRmKHRpbWVidWYsIHRpbWVidWZfc2l6ZSwgIiVsdSB5ZWFycyBhZ28iLCAoZGlmZiArIDE4MykgLyAzNjUpOworCXJldHVybiB0aW1lYnVmOworfQorCiBjb25zdCBjaGFyICpzaG93X2RhdGUodW5zaWduZWQgbG9uZyB0aW1lLCBpbnQgdHosIGVudW0gZGF0ZV9tb2RlIG1vZGUpCiB7CiAJc3RydWN0IHRtICp0bTsKQEAgLTk1LDYzICsxNTgsMTAgQEAKIAl9CiAKIAlpZiAobW9kZSA9PSBEQVRFX1JFTEFUSVZFKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZGlmZjsKIAkJc3RydWN0IHRpbWV2YWwgbm93OwogCQlnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCk7Ci0JCWlmIChub3cudHZfc2VjIDwgdGltZSkKLQkJCXJldHVybiAiaW4gdGhlIGZ1dHVyZSI7Ci0JCWRpZmYgPSBub3cudHZfc2VjIC0gdGltZTsKLQkJaWYgKGRpZmYgPCA5MCkgewotCQkJc25wcmludGYodGltZWJ1Ziwgc2l6ZW9mKHRpbWVidWYpLCAiJWx1IHNlY29uZHMgYWdvIiwgZGlmZik7Ci0JCQlyZXR1cm4gdGltZWJ1ZjsKLQkJfQotCQkvKiBUdXJuIGl0IGludG8gbWludXRlcyAqLwotCQlkaWZmID0gKGRpZmYgKyAzMCkgLyA2MDsKLQkJaWYgKGRpZmYgPCA5MCkgewotCQkJc25wcmludGYodGltZWJ1Ziwgc2l6ZW9mKHRpbWVidWYpLCAiJWx1IG1pbnV0ZXMgYWdvIiwgZGlmZik7Ci0JCQlyZXR1cm4gdGltZWJ1ZjsKLQkJfQotCQkvKiBUdXJuIGl0IGludG8gaG91cnMgKi8KLQkJZGlmZiA9IChkaWZmICsgMzApIC8gNjA7Ci0JCWlmIChkaWZmIDwgMzYpIHsKLQkJCXNucHJpbnRmKHRpbWVidWYsIHNpemVvZih0aW1lYnVmKSwgIiVsdSBob3VycyBhZ28iLCBkaWZmKTsKLQkJCXJldHVybiB0aW1lYnVmOwotCQl9Ci0JCS8qIFdlIGRlYWwgd2l0aCBudW1iZXIgb2YgZGF5cyBmcm9tIGhlcmUgb24gKi8KLQkJZGlmZiA9IChkaWZmICsgMTIpIC8gMjQ7Ci0JCWlmIChkaWZmIDwgMTQpIHsKLQkJCXNucHJpbnRmKHRpbWVidWYsIHNpemVvZih0aW1lYnVmKSwgIiVsdSBkYXlzIGFnbyIsIGRpZmYpOwotCQkJcmV0dXJuIHRpbWVidWY7Ci0JCX0KLQkJLyogU2F5IHdlZWtzIGZvciB0aGUgcGFzdCAxMCB3ZWVrcyBvciBzbyAqLwotCQlpZiAoZGlmZiA8IDcwKSB7Ci0JCQlzbnByaW50Zih0aW1lYnVmLCBzaXplb2YodGltZWJ1ZiksICIlbHUgd2Vla3MgYWdvIiwgKGRpZmYgKyAzKSAvIDcpOwotCQkJcmV0dXJuIHRpbWVidWY7Ci0JCX0KLQkJLyogU2F5IG1vbnRocyBmb3IgdGhlIHBhc3QgMTIgbW9udGhzIG9yIHNvICovCi0JCWlmIChkaWZmIDwgMzYwKSB7Ci0JCQlzbnByaW50Zih0aW1lYnVmLCBzaXplb2YodGltZWJ1ZiksICIlbHUgbW9udGhzIGFnbyIsIChkaWZmICsgMTUpIC8gMzApOwotCQkJcmV0dXJuIHRpbWVidWY7Ci0JCX0KLQkJLyogR2l2ZSB5ZWFycyBhbmQgbW9udGhzIGZvciA1IHllYXJzIG9yIHNvICovCi0JCWlmIChkaWZmIDwgMTgyNSkgewotCQkJdW5zaWduZWQgbG9uZyB5ZWFycyA9IGRpZmYgLyAzNjU7Ci0JCQl1bnNpZ25lZCBsb25nIG1vbnRocyA9IChkaWZmICUgMzY1ICsgMTUpIC8gMzA7Ci0JCQlpbnQgbjsKLQkJCW4gPSBzbnByaW50Zih0aW1lYnVmLCBzaXplb2YodGltZWJ1ZiksICIlbHUgeWVhciVzIiwKLQkJCQkJeWVhcnMsICh5ZWFycyA+IDEgPyAicyIgOiAiIikpOwotCQkJaWYgKG1vbnRocykKLQkJCQlzbnByaW50Zih0aW1lYnVmICsgbiwgc2l6ZW9mKHRpbWVidWYpIC0gbiwKLQkJCQkJIiwgJWx1IG1vbnRoJXMgYWdvIiwKLQkJCQkJbW9udGhzLCAobW9udGhzID4gMSA/ICJzIiA6ICIiKSk7Ci0JCQllbHNlCi0JCQkJc25wcmludGYodGltZWJ1ZiArIG4sIHNpemVvZih0aW1lYnVmKSAtIG4sCi0JCQkJCSIgYWdvIik7Ci0JCQlyZXR1cm4gdGltZWJ1ZjsKLQkJfQotCQkvKiBPdGhlcndpc2UsIGp1c3QgeWVhcnMuIENlbnR1cmllcyBpcyBwcm9iYWJseSBvdmVya2lsbC4gKi8KLQkJc25wcmludGYodGltZWJ1Ziwgc2l6ZW9mKHRpbWVidWYpLCAiJWx1IHllYXJzIGFnbyIsIChkaWZmICsgMTgzKSAvIDM2NSk7Ci0JCXJldHVybiB0aW1lYnVmOworCQlyZXR1cm4gc2hvd19kYXRlX3JlbGF0aXZlKHRpbWUsIHR6LCAmbm93LAorCQkJCQkgIHRpbWVidWYsIHNpemVvZih0aW1lYnVmKSk7CiAJfQogCiAJaWYgKG1vZGUgPT0gREFURV9MT0NBTCkKQEAgLTQyNSwxMyArNDM1LDE5IEBACiAJcmV0dXJuIGVuZCAtIGRhdGU7CiB9CiAKLS8qIEhhdmUgd2UgZmlsbGVkIGluIGFueSBwYXJ0IG9mIHRoZSB0aW1lL2RhdGUgeWV0PyAqLworLyoKKyAqIEhhdmUgd2UgZmlsbGVkIGluIGFueSBwYXJ0IG9mIHRoZSB0aW1lL2RhdGUgeWV0PworICogV2UganVzdCBkbyBhIGJpbmFyeSAnYW5kJyB0byBzZWUgaWYgdGhlIHNpZ24gYml0CisgKiBpcyBzZXQgaW4gYWxsIHRoZSB2YWx1ZXMuCisgKi8KIHN0YXRpYyBpbmxpbmUgaW50IG5vZGF0ZShzdHJ1Y3QgdG0gKnRtKQogewotCXJldHVybiB0bS0+dG1feWVhciA8IDAgJiYKLQkJdG0tPnRtX21vbiA8IDAgJiYKLQkJdG0tPnRtX21kYXkgPCAwICYmCi0JCSEodG0tPnRtX2hvdXIgfCB0bS0+dG1fbWluIHwgdG0tPnRtX3NlYyk7CisJcmV0dXJuICh0bS0+dG1feWVhciAmCisJCXRtLT50bV9tb24gJgorCQl0bS0+dG1fbWRheSAmCisJCXRtLT50bV9ob3VyICYKKwkJdG0tPnRtX21pbiAmCisJCXRtLT50bV9zZWMpIDwgMDsKIH0KIAogLyoKQEAgLTUyNSwxMSArNTQxLDggQEAKIAkJfQogCX0KIAotCWlmIChudW0gPiAwICYmIG51bSA8IDMyKSB7Ci0JCXRtLT50bV9tZGF5ID0gbnVtOwotCX0gZWxzZSBpZiAobnVtID4gMCAmJiBudW0gPCAxMykgeworCWlmIChudW0gPiAwICYmIG51bSA8IDEzICYmIHRtLT50bV9tb24gPCAwKQogCQl0bS0+dG1fbW9uID0gbnVtLTE7Ci0JfQogCiAJcmV0dXJuIG47CiB9CkBAIC01ODMsNiArNTk2LDkgQEAKIAl0bS50bV9tb24gPSAtMTsKIAl0bS50bV9tZGF5ID0gLTE7CiAJdG0udG1faXNkc3QgPSAtMTsKKwl0bS50bV9ob3VyID0gLTE7CisJdG0udG1fbWluID0gLTE7CisJdG0udG1fc2VjID0gLTE7CiAJb2Zmc2V0ID0gLTE7CiAJdG1fZ210ID0gMDsKIApAQCAtNjU3LDQyICs2NzMsNjQgQEAKIAlkYXRlX3N0cmluZyhub3csIG9mZnNldCwgYnVmLCBidWZzaXplKTsKIH0KIAotc3RhdGljIHZvaWQgdXBkYXRlX3RtKHN0cnVjdCB0bSAqdG0sIHVuc2lnbmVkIGxvbmcgc2VjKQorLyoKKyAqIFJlbGF0aXZlIHRpbWUgdXBkYXRlIChlZyAiMiBkYXlzIGFnbyIpLiAgSWYgd2UgaGF2ZW4ndCBzZXQgdGhlIHRpbWUKKyAqIHlldCwgd2UgbmVlZCB0byBzZXQgaXQgZnJvbSBjdXJyZW50IHRpbWUuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHVwZGF0ZV90bShzdHJ1Y3QgdG0gKnRtLCBzdHJ1Y3QgdG0gKm5vdywgdW5zaWduZWQgbG9uZyBzZWMpCiB7Ci0JdGltZV90IG4gPSBta3RpbWUodG0pIC0gc2VjOworCXRpbWVfdCBuOworCisJaWYgKHRtLT50bV9tZGF5IDwgMCkKKwkJdG0tPnRtX21kYXkgPSBub3ctPnRtX21kYXk7CisJaWYgKHRtLT50bV9tb24gPCAwKQorCQl0bS0+dG1fbW9uID0gbm93LT50bV9tb247CisJaWYgKHRtLT50bV95ZWFyIDwgMCkgeworCQl0bS0+dG1feWVhciA9IG5vdy0+dG1feWVhcjsKKwkJaWYgKHRtLT50bV9tb24gPiBub3ctPnRtX21vbikKKwkJCXRtLT50bV95ZWFyLS07CisJfQorCisJbiA9IG1rdGltZSh0bSkgLSBzZWM7CiAJbG9jYWx0aW1lX3IoJm4sIHRtKTsKKwlyZXR1cm4gbjsKIH0KIAotc3RhdGljIHZvaWQgZGF0ZV95ZXN0ZXJkYXkoc3RydWN0IHRtICp0bSwgaW50ICpudW0pCitzdGF0aWMgdm9pZCBkYXRlX25vdyhzdHJ1Y3QgdG0gKnRtLCBzdHJ1Y3QgdG0gKm5vdywgaW50ICpudW0pCiB7Ci0JdXBkYXRlX3RtKHRtLCAyNCo2MCo2MCk7CisJdXBkYXRlX3RtKHRtLCBub3csIDApOwogfQogCi1zdGF0aWMgdm9pZCBkYXRlX3RpbWUoc3RydWN0IHRtICp0bSwgaW50IGhvdXIpCitzdGF0aWMgdm9pZCBkYXRlX3llc3RlcmRheShzdHJ1Y3QgdG0gKnRtLCBzdHJ1Y3QgdG0gKm5vdywgaW50ICpudW0pCit7CisJdXBkYXRlX3RtKHRtLCBub3csIDI0KjYwKjYwKTsKK30KKworc3RhdGljIHZvaWQgZGF0ZV90aW1lKHN0cnVjdCB0bSAqdG0sIHN0cnVjdCB0bSAqbm93LCBpbnQgaG91cikKIHsKIAlpZiAodG0tPnRtX2hvdXIgPCBob3VyKQotCQlkYXRlX3llc3RlcmRheSh0bSwgTlVMTCk7CisJCWRhdGVfeWVzdGVyZGF5KHRtLCBub3csIE5VTEwpOwogCXRtLT50bV9ob3VyID0gaG91cjsKIAl0bS0+dG1fbWluID0gMDsKIAl0bS0+dG1fc2VjID0gMDsKIH0KIAotc3RhdGljIHZvaWQgZGF0ZV9taWRuaWdodChzdHJ1Y3QgdG0gKnRtLCBpbnQgKm51bSkKK3N0YXRpYyB2b2lkIGRhdGVfbWlkbmlnaHQoc3RydWN0IHRtICp0bSwgc3RydWN0IHRtICpub3csIGludCAqbnVtKQogewotCWRhdGVfdGltZSh0bSwgMCk7CisJZGF0ZV90aW1lKHRtLCBub3csIDApOwogfQogCi1zdGF0aWMgdm9pZCBkYXRlX25vb24oc3RydWN0IHRtICp0bSwgaW50ICpudW0pCitzdGF0aWMgdm9pZCBkYXRlX25vb24oc3RydWN0IHRtICp0bSwgc3RydWN0IHRtICpub3csIGludCAqbnVtKQogewotCWRhdGVfdGltZSh0bSwgMTIpOworCWRhdGVfdGltZSh0bSwgbm93LCAxMik7CiB9CiAKLXN0YXRpYyB2b2lkIGRhdGVfdGVhKHN0cnVjdCB0bSAqdG0sIGludCAqbnVtKQorc3RhdGljIHZvaWQgZGF0ZV90ZWEoc3RydWN0IHRtICp0bSwgc3RydWN0IHRtICpub3csIGludCAqbnVtKQogewotCWRhdGVfdGltZSh0bSwgMTcpOworCWRhdGVfdGltZSh0bSwgbm93LCAxNyk7CiB9CiAKLXN0YXRpYyB2b2lkIGRhdGVfcG0oc3RydWN0IHRtICp0bSwgaW50ICpudW0pCitzdGF0aWMgdm9pZCBkYXRlX3BtKHN0cnVjdCB0bSAqdG0sIHN0cnVjdCB0bSAqbm93LCBpbnQgKm51bSkKIHsKIAlpbnQgaG91ciwgbiA9ICpudW07CiAJKm51bSA9IDA7CkBAIC03MDYsNyArNzQ0LDcgQEAKIAl0bS0+dG1faG91ciA9IChob3VyICUgMTIpICsgMTI7CiB9CiAKLXN0YXRpYyB2b2lkIGRhdGVfYW0oc3RydWN0IHRtICp0bSwgaW50ICpudW0pCitzdGF0aWMgdm9pZCBkYXRlX2FtKHN0cnVjdCB0bSAqdG0sIHN0cnVjdCB0bSAqbm93LCBpbnQgKm51bSkKIHsKIAlpbnQgaG91ciwgbiA9ICpudW07CiAJKm51bSA9IDA7CkBAIC03MjAsNyArNzU4LDcgQEAKIAl0bS0+dG1faG91ciA9IChob3VyICUgMTIpOwogfQogCi1zdGF0aWMgdm9pZCBkYXRlX25ldmVyKHN0cnVjdCB0bSAqdG0sIGludCAqbnVtKQorc3RhdGljIHZvaWQgZGF0ZV9uZXZlcihzdHJ1Y3QgdG0gKnRtLCBzdHJ1Y3QgdG0gKm5vdywgaW50ICpudW0pCiB7CiAJdGltZV90IG4gPSAwOwogCWxvY2FsdGltZV9yKCZuLCB0bSk7CkBAIC03MjgsNyArNzY2LDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzcGVjaWFsIHsKIAljb25zdCBjaGFyICpuYW1lOwotCXZvaWQgKCpmbikoc3RydWN0IHRtICosIGludCAqKTsKKwl2b2lkICgqZm4pKHN0cnVjdCB0bSAqLCBzdHJ1Y3QgdG0gKiwgaW50ICopOwogfSBzcGVjaWFsW10gPSB7CiAJeyAieWVzdGVyZGF5IiwgZGF0ZV95ZXN0ZXJkYXkgfSwKIAl7ICJub29uIiwgZGF0ZV9ub29uIH0sCkBAIC03MzcsNiArNzc1LDcgQEAKIAl7ICJQTSIsIGRhdGVfcG0gfSwKIAl7ICJBTSIsIGRhdGVfYW0gfSwKIAl7ICJuZXZlciIsIGRhdGVfbmV2ZXIgfSwKKwl7ICJub3ciLCBkYXRlX25vdyB9LAogCXsgTlVMTCB9CiB9OwogCkBAIC03NTcsNyArNzk2LDcgQEAKIAl7IE5VTEwgfQogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgKmFwcHJveGlkYXRlX2FscGhhKGNvbnN0IGNoYXIgKmRhdGUsIHN0cnVjdCB0bSAqdG0sIGludCAqbnVtKQorc3RhdGljIGNvbnN0IGNoYXIgKmFwcHJveGlkYXRlX2FscGhhKGNvbnN0IGNoYXIgKmRhdGUsIHN0cnVjdCB0bSAqdG0sIHN0cnVjdCB0bSAqbm93LCBpbnQgKm51bSwgaW50ICp0b3VjaGVkKQogewogCWNvbnN0IHN0cnVjdCB0eXBlbGVuICp0bDsKIAljb25zdCBzdHJ1Y3Qgc3BlY2lhbCAqczsKQEAgLTc3MSw2ICs4MTAsNyBAQAogCQlpbnQgbWF0Y2ggPSBtYXRjaF9zdHJpbmcoZGF0ZSwgbW9udGhfbmFtZXNbaV0pOwogCQlpZiAobWF0Y2ggPj0gMykgewogCQkJdG0tPnRtX21vbiA9IGk7CisJCQkqdG91Y2hlZCA9IDE7CiAJCQlyZXR1cm4gZW5kOwogCQl9CiAJfQpAQCAtNzc4LDcgKzgxOCw4IEBACiAJZm9yIChzID0gc3BlY2lhbDsgcy0+bmFtZTsgcysrKSB7CiAJCWludCBsZW4gPSBzdHJsZW4ocy0+bmFtZSk7CiAJCWlmIChtYXRjaF9zdHJpbmcoZGF0ZSwgcy0+bmFtZSkgPT0gbGVuKSB7Ci0JCQlzLT5mbih0bSwgbnVtKTsKKwkJCXMtPmZuKHRtLCBub3csIG51bSk7CisJCQkqdG91Y2hlZCA9IDE7CiAJCQlyZXR1cm4gZW5kOwogCQl9CiAJfQpAQCAtNzg4LDExICs4MjksMTQgQEAKIAkJCWludCBsZW4gPSBzdHJsZW4obnVtYmVyX25hbWVbaV0pOwogCQkJaWYgKG1hdGNoX3N0cmluZyhkYXRlLCBudW1iZXJfbmFtZVtpXSkgPT0gbGVuKSB7CiAJCQkJKm51bSA9IGk7CisJCQkJKnRvdWNoZWQgPSAxOwogCQkJCXJldHVybiBlbmQ7CiAJCQl9CiAJCX0KLQkJaWYgKG1hdGNoX3N0cmluZyhkYXRlLCAibGFzdCIpID09IDQpCisJCWlmIChtYXRjaF9zdHJpbmcoZGF0ZSwgImxhc3QiKSA9PSA0KSB7CiAJCQkqbnVtID0gMTsKKwkJCSp0b3VjaGVkID0gMTsKKwkJfQogCQlyZXR1cm4gZW5kOwogCX0KIApAQCAtODAwLDggKzg0NCw5IEBACiAJd2hpbGUgKHRsLT50eXBlKSB7CiAJCWludCBsZW4gPSBzdHJsZW4odGwtPnR5cGUpOwogCQlpZiAobWF0Y2hfc3RyaW5nKGRhdGUsIHRsLT50eXBlKSA+PSBsZW4tMSkgewotCQkJdXBkYXRlX3RtKHRtLCB0bC0+bGVuZ3RoICogKm51bSk7CisJCQl1cGRhdGVfdG0odG0sIG5vdywgdGwtPmxlbmd0aCAqICpudW0pOwogCQkJKm51bSA9IDA7CisJCQkqdG91Y2hlZCA9IDE7CiAJCQlyZXR1cm4gZW5kOwogCQl9CiAJCXRsKys7CkBAIC04MTgsMjUgKzg2MywzMSBAQAogCQkJCW4rKzsKIAkJCWRpZmYgKz0gNypuOwogCi0JCQl1cGRhdGVfdG0odG0sIGRpZmYgKiAyNCAqIDYwICogNjApOworCQkJdXBkYXRlX3RtKHRtLCBub3csIGRpZmYgKiAyNCAqIDYwICogNjApOworCQkJKnRvdWNoZWQgPSAxOwogCQkJcmV0dXJuIGVuZDsKIAkJfQogCX0KIAogCWlmIChtYXRjaF9zdHJpbmcoZGF0ZSwgIm1vbnRocyIpID49IDUpIHsKLQkJaW50IG4gPSB0bS0+dG1fbW9uIC0gKm51bTsKKwkJaW50IG47CisJCXVwZGF0ZV90bSh0bSwgbm93LCAwKTsgLyogZmlsbCBpbiBkYXRlIGZpZWxkcyBpZiBuZWVkZWQgKi8KKwkJbiA9IHRtLT50bV9tb24gLSAqbnVtOwogCQkqbnVtID0gMDsKIAkJd2hpbGUgKG4gPCAwKSB7CiAJCQluICs9IDEyOwogCQkJdG0tPnRtX3llYXItLTsKIAkJfQogCQl0bS0+dG1fbW9uID0gbjsKKwkJKnRvdWNoZWQgPSAxOwogCQlyZXR1cm4gZW5kOwogCX0KIAogCWlmIChtYXRjaF9zdHJpbmcoZGF0ZSwgInllYXJzIikgPj0gNCkgeworCQl1cGRhdGVfdG0odG0sIG5vdywgMCk7IC8qIGZpbGwgaW4gZGF0ZSBmaWVsZHMgaWYgbmVlZGVkICovCiAJCXRtLT50bV95ZWFyIC09ICpudW07CiAJCSpudW0gPSAwOworCQkqdG91Y2hlZCA9IDE7CiAJCXJldHVybiBlbmQ7CiAJfQogCkBAIC04NjYsMzYgKzkxNyw5NCBAQAogCXJldHVybiBlbmQ7CiB9CiAKLXVuc2lnbmVkIGxvbmcgYXBwcm94aWRhdGUoY29uc3QgY2hhciAqZGF0ZSkKKy8qCisgKiBEbyB3ZSBoYXZlIGEgcGVuZGluZyBudW1iZXIgYXQgdGhlIGVuZCwgb3Igd2hlbgorICogd2Ugc2VlIGEgbmV3IG9uZT8gTGV0J3MgYXNzdW1lIGl0J3MgYSBtb250aCBkYXksCisgKiBhcyBpbiAiRGVjIDYsIDE5OTIiCisgKi8KK3N0YXRpYyB2b2lkIHBlbmRpbmdfbnVtYmVyKHN0cnVjdCB0bSAqdG0sIGludCAqbnVtKQoreworCWludCBudW1iZXIgPSAqbnVtOworCisJaWYgKG51bWJlcikgeworCQkqbnVtID0gMDsKKwkJaWYgKHRtLT50bV9tZGF5IDwgMCAmJiBudW1iZXIgPCAzMikKKwkJCXRtLT50bV9tZGF5ID0gbnVtYmVyOworCQllbHNlIGlmICh0bS0+dG1fbW9uIDwgMCAmJiBudW1iZXIgPCAxMykKKwkJCXRtLT50bV9tb24gPSBudW1iZXItMTsKKwkJZWxzZSBpZiAodG0tPnRtX3llYXIgPCAwKSB7CisJCQlpZiAobnVtYmVyID4gMTk2OSAmJiBudW1iZXIgPCAyMTAwKQorCQkJCXRtLT50bV95ZWFyID0gbnVtYmVyIC0gMTkwMDsKKwkJCWVsc2UgaWYgKG51bWJlciA+IDY5ICYmIG51bWJlciA8IDEwMCkKKwkJCQl0bS0+dG1feWVhciA9IG51bWJlcjsKKwkJCWVsc2UgaWYgKG51bWJlciA8IDM4KQorCQkJCXRtLT50bV95ZWFyID0gMTAwICsgbnVtYmVyOworCQkJLyogV2Ugc2NyZXcgdXAgZm9yIG51bWJlciA9IDAwID8gKi8KKwkJfQorCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgYXBwcm94aWRhdGVfc3RyKGNvbnN0IGNoYXIgKmRhdGUsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqdHYsCisJCQkJICAgICBpbnQgKmVycm9yX3JldCkKIHsKIAlpbnQgbnVtYmVyID0gMDsKKwlpbnQgdG91Y2hlZCA9IDA7CiAJc3RydWN0IHRtIHRtLCBub3c7Ci0Jc3RydWN0IHRpbWV2YWwgdHY7CiAJdGltZV90IHRpbWVfc2VjOwotCWNoYXIgYnVmZmVyWzUwXTsKIAotCWlmIChwYXJzZV9kYXRlKGRhdGUsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpID4gMCkKLQkJcmV0dXJuIHN0cnRvdWwoYnVmZmVyLCBOVUxMLCAxMCk7Ci0KLQlnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsKLQl0aW1lX3NlYyA9IHR2LnR2X3NlYzsKKwl0aW1lX3NlYyA9IHR2LT50dl9zZWM7CiAJbG9jYWx0aW1lX3IoJnRpbWVfc2VjLCAmdG0pOwogCW5vdyA9IHRtOworCisJdG0udG1feWVhciA9IC0xOworCXRtLnRtX21vbiA9IC0xOworCXRtLnRtX21kYXkgPSAtMTsKKwogCWZvciAoOzspIHsKIAkJdW5zaWduZWQgY2hhciBjID0gKmRhdGU7CiAJCWlmICghYykKIAkJCWJyZWFrOwogCQlkYXRlKys7CiAJCWlmIChpc2RpZ2l0KGMpKSB7CisJCQlwZW5kaW5nX251bWJlcigmdG0sICZudW1iZXIpOwogCQkJZGF0ZSA9IGFwcHJveGlkYXRlX2RpZ2l0KGRhdGUtMSwgJnRtLCAmbnVtYmVyKTsKKwkJCXRvdWNoZWQgPSAxOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKGlzYWxwaGEoYykpCi0JCQlkYXRlID0gYXBwcm94aWRhdGVfYWxwaGEoZGF0ZS0xLCAmdG0sICZudW1iZXIpOworCQkJZGF0ZSA9IGFwcHJveGlkYXRlX2FscGhhKGRhdGUtMSwgJnRtLCAmbm93LCAmbnVtYmVyLCAmdG91Y2hlZCk7CiAJfQotCWlmIChudW1iZXIgPiAwICYmIG51bWJlciA8IDMyKQotCQl0bS50bV9tZGF5ID0gbnVtYmVyOwotCWlmICh0bS50bV9tb24gPiBub3cudG1fbW9uICYmIHRtLnRtX3llYXIgPT0gbm93LnRtX3llYXIpCi0JCXRtLnRtX3llYXItLTsKLQlyZXR1cm4gbWt0aW1lKCZ0bSk7CisJcGVuZGluZ19udW1iZXIoJnRtLCAmbnVtYmVyKTsKKwlpZiAoIXRvdWNoZWQpCisJCSplcnJvcl9yZXQgPSAxOworCXJldHVybiB1cGRhdGVfdG0oJnRtLCAmbm93LCAwKTsKK30KKwordW5zaWduZWQgbG9uZyBhcHByb3hpZGF0ZV9yZWxhdGl2ZShjb25zdCBjaGFyICpkYXRlLCBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqdHYpCit7CisJY2hhciBidWZmZXJbNTBdOworCWludCBlcnJvcnMgPSAwOworCisJaWYgKHBhcnNlX2RhdGUoZGF0ZSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkgPiAwKQorCQlyZXR1cm4gc3RydG91bChidWZmZXIsIE5VTEwsIDApOworCisJcmV0dXJuIGFwcHJveGlkYXRlX3N0cihkYXRlLCB0diwgJmVycm9ycyk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgYXBwcm94aWRhdGVfY2FyZWZ1bChjb25zdCBjaGFyICpkYXRlLCBpbnQgKmVycm9yX3JldCkKK3sKKwlzdHJ1Y3QgdGltZXZhbCB0djsKKwljaGFyIGJ1ZmZlcls1MF07CisJaW50IGR1bW15ID0gMDsKKwlpZiAoIWVycm9yX3JldCkKKwkJZXJyb3JfcmV0ID0gJmR1bW15OworCisJaWYgKHBhcnNlX2RhdGUoZGF0ZSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkgPiAwKSB7CisJCSplcnJvcl9yZXQgPSAwOworCQlyZXR1cm4gc3RydG91bChidWZmZXIsIE5VTEwsIDApOworCX0KKworCWdldHRpbWVvZmRheSgmdHYsIE5VTEwpOworCXJldHVybiBhcHByb3hpZGF0ZV9zdHIoZGF0ZSwgJnR2LCBlcnJvcl9yZXQpOwogfQpkaWZmIC0tZ2l0IGEvZGVjb3JhdGUuYyBiL2RlY29yYXRlLmMKaW5kZXggZTZmZDhhNy4uMmY4YTYzZSAxMDA2NDQKLS0tIGEvZGVjb3JhdGUuYworKysgYi9kZWNvcmF0ZS5jCkBAIC0xOCw3ICsxOCw3IEBACiB7CiAJaW50IHNpemUgPSBuLT5zaXplOwogCXN0cnVjdCBvYmplY3RfZGVjb3JhdGlvbiAqaGFzaCA9IG4tPmhhc2g7Ci0JaW50IGogPSBoYXNoX29iaihiYXNlLCBzaXplKTsKKwl1bnNpZ25lZCBpbnQgaiA9IGhhc2hfb2JqKGJhc2UsIHNpemUpOwogCiAJd2hpbGUgKGhhc2hbal0uYmFzZSkgewogCQlpZiAoaGFzaFtqXS5iYXNlID09IGJhc2UpIHsKQEAgLTcwLDcgKzcwLDcgQEAKIC8qIExvb2t1cCBhIGRlY29yYXRpb24gcG9pbnRlciAqLwogdm9pZCAqbG9va3VwX2RlY29yYXRpb24oc3RydWN0IGRlY29yYXRpb24gKm4sIGNvbnN0IHN0cnVjdCBvYmplY3QgKm9iaikKIHsKLQlpbnQgajsKKwl1bnNpZ25lZCBpbnQgajsKIAogCS8qIG5vdGhpbmcgdG8gbG9va3VwICovCiAJaWYgKCFuLT5zaXplKQpkaWZmIC0tZ2l0IGEvZGlmZi1kZWx0YS5jIGIvZGlmZi1kZWx0YS5jCmluZGV4IGE0ZTI4ZGYuLjQ2NGFjM2YgMTAwNjQ0Ci0tLSBhL2RpZmYtZGVsdGEuYworKysgYi9kaWZmLWRlbHRhLmMKQEAgLTQsNyArNCw3IEBACiAgKiBUaGlzIGNvZGUgd2FzIGdyZWF0bHkgaW5zcGlyZWQgYnkgcGFydHMgb2YgTGliWERpZmYgZnJvbSBEYXZpZGUgTGliZW56aQogICogaHR0cDovL3d3dy54bWFpbHNlcnZlci5vcmcveGRpZmYtbGliLmh0bWwKICAqCi0gKiBSZXdyaXR0ZW4gZm9yIEdJVCBieSBOaWNvbGFzIFBpdHJlIDxuaWNvQGNhbS5vcmc+LCAoQykgMjAwNS0yMDA3CisgKiBSZXdyaXR0ZW4gZm9yIEdJVCBieSBOaWNvbGFzIFBpdHJlIDxuaWNvQGZsdXhuaWMubmV0PiwgKEMpIDIwMDUtMjAwNwogICoKICAqIFRoaXMgY29kZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpkaWZmIC0tZ2l0IGEvZGlmZi1saWIuYyBiL2RpZmYtbGliLmMKaW5kZXggMGFiYTZjZC4uZDdlMTNjYiAxMDA2NDQKLS0tIGEvZGlmZi1saWIuYworKysgYi9kaWZmLWxpYi5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgogI2luY2x1ZGUgInVucGFjay10cmVlcy5oIgogI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKIAogLyoKICAqIGRpZmYtZmlsZXMKQEAgLTcyLDggKzczLDkgQEAKIAkJdW5zaWduZWQgaW50IG9sZG1vZGUsIG5ld21vZGU7CiAJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbaV07CiAJCWludCBjaGFuZ2VkOworCQl1bnNpZ25lZCBkaXJ0eV9zdWJtb2R1bGUgPSAwOwogCi0JCWlmIChESUZGX09QVF9UU1QoJnJldnMtPmRpZmZvcHQsIFFVSUVUKSAmJgorCQlpZiAoRElGRl9PUFRfVFNUKCZyZXZzLT5kaWZmb3B0LCBRVUlDSykgJiYKIAkJCURJRkZfT1BUX1RTVCgmcmV2cy0+ZGlmZm9wdCwgSEFTX0NIQU5HRVMpKQogCQkJYnJlYWs7CiAKQEAgLTE1OSwxMCArMTYxLDExIEBACiAJCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoY2VfdXB0b2RhdGUoY2UpKQorCQlpZiAoY2VfdXB0b2RhdGUoY2UpIHx8IGNlX3NraXBfd29ya3RyZWUoY2UpKQogCQkJY29udGludWU7CiAKLQkJY2hhbmdlZCA9IGNoZWNrX3JlbW92ZWQoY2UsICZzdCk7CisJCS8qIElmIENFX1ZBTElEIGlzIHNldCwgZG9uJ3QgbG9vayBhdCB3b3JrZGlyIGZvciBmaWxlIHJlbW92YWwgKi8KKwkJY2hhbmdlZCA9IChjZS0+Y2VfZmxhZ3MgJiBDRV9WQUxJRCkgPyAwIDogY2hlY2tfcmVtb3ZlZChjZSwgJnN0KTsKIAkJaWYgKGNoYW5nZWQpIHsKIAkJCWlmIChjaGFuZ2VkIDwgMCkgewogCQkJCXBlcnJvcihjZS0+bmFtZSk7CkBAIC0xNzEsMTAgKzE3NCwxNyBAQAogCQkJaWYgKHNpbGVudF9vbl9yZW1vdmVkKQogCQkJCWNvbnRpbnVlOwogCQkJZGlmZl9hZGRyZW1vdmUoJnJldnMtPmRpZmZvcHQsICctJywgY2UtPmNlX21vZGUsCi0JCQkJICAgICAgIGNlLT5zaGExLCBjZS0+bmFtZSk7CisJCQkJICAgICAgIGNlLT5zaGExLCBjZS0+bmFtZSwgMCk7CiAJCQljb250aW51ZTsKIAkJfQogCQljaGFuZ2VkID0gY2VfbWF0Y2hfc3RhdChjZSwgJnN0LCBjZV9vcHRpb24pOworCQlpZiAoU19JU0dJVExJTksoY2UtPmNlX21vZGUpCisJCSAgICAmJiAhRElGRl9PUFRfVFNUKCZyZXZzLT5kaWZmb3B0LCBJR05PUkVfU1VCTU9EVUxFUykKKwkJICAgICYmICghY2hhbmdlZCB8fCAocmV2cy0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfUEFUQ0gpKQorCQkgICAgJiYgaXNfc3VibW9kdWxlX21vZGlmaWVkKGNlLT5uYW1lKSkgeworCQkJY2hhbmdlZCA9IDE7CisJCQlkaXJ0eV9zdWJtb2R1bGUgPSAxOworCQl9CiAJCWlmICghY2hhbmdlZCkgewogCQkJY2VfbWFya191cHRvZGF0ZShjZSk7CiAJCQlpZiAoIURJRkZfT1BUX1RTVCgmcmV2cy0+ZGlmZm9wdCwgRklORF9DT1BJRVNfSEFSREVSKSkKQEAgLTE4NCw3ICsxOTQsNyBAQAogCQluZXdtb2RlID0gY2VfbW9kZV9mcm9tX3N0YXQoY2UsIHN0LnN0X21vZGUpOwogCQlkaWZmX2NoYW5nZSgmcmV2cy0+ZGlmZm9wdCwgb2xkbW9kZSwgbmV3bW9kZSwKIAkJCSAgICBjZS0+c2hhMSwgKGNoYW5nZWQgPyBudWxsX3NoYTEgOiBjZS0+c2hhMSksCi0JCQkgICAgY2UtPm5hbWUpOworCQkJICAgIGNlLT5uYW1lLCAwLCBkaXJ0eV9zdWJtb2R1bGUpOwogCiAJfQogCWRpZmZjb3JlX3N0ZCgmcmV2cy0+ZGlmZm9wdCk7CkBAIC0yMDAsMTYgKzIxMCwxOCBAQAogc3RhdGljIHZvaWQgZGlmZl9pbmRleF9zaG93X2ZpbGUoc3RydWN0IHJldl9pbmZvICpyZXZzLAogCQkJCSBjb25zdCBjaGFyICpwcmVmaXgsCiAJCQkJIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCi0JCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHVuc2lnbmVkIGludCBtb2RlKQorCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB1bnNpZ25lZCBpbnQgbW9kZSwKKwkJCQkgdW5zaWduZWQgZGlydHlfc3VibW9kdWxlKQogewogCWRpZmZfYWRkcmVtb3ZlKCZyZXZzLT5kaWZmb3B0LCBwcmVmaXhbMF0sIG1vZGUsCi0JCSAgICAgICBzaGExLCBjZS0+bmFtZSk7CisJCSAgICAgICBzaGExLCBjZS0+bmFtZSwgZGlydHlfc3VibW9kdWxlKTsKIH0KIAogc3RhdGljIGludCBnZXRfc3RhdF9kYXRhKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCiAJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqKnNoYTFwLAogCQkJIHVuc2lnbmVkIGludCAqbW9kZXAsCi0JCQkgaW50IGNhY2hlZCwgaW50IG1hdGNoX21pc3NpbmcpCisJCQkgaW50IGNhY2hlZCwgaW50IG1hdGNoX21pc3NpbmcsCisJCQkgdW5zaWduZWQgKmRpcnR5X3N1Ym1vZHVsZSwgc3RydWN0IGRpZmZfb3B0aW9ucyAqZGlmZm9wdCkKIHsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExID0gY2UtPnNoYTE7CiAJdW5zaWduZWQgaW50IG1vZGUgPSBjZS0+Y2VfbW9kZTsKQEAgLTIyOSw2ICsyNDEsMTMgQEAKIAkJCXJldHVybiAtMTsKIAkJfQogCQljaGFuZ2VkID0gY2VfbWF0Y2hfc3RhdChjZSwgJnN0LCAwKTsKKwkJaWYgKFNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKQorCQkgICAgJiYgIURJRkZfT1BUX1RTVChkaWZmb3B0LCBJR05PUkVfU1VCTU9EVUxFUykKKwkJICAgICYmICghY2hhbmdlZCB8fCAoZGlmZm9wdC0+b3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX1BBVENIKSkKKwkJICAgICYmIGlzX3N1Ym1vZHVsZV9tb2RpZmllZChjZS0+bmFtZSkpIHsKKwkJCWNoYW5nZWQgPSAxOworCQkJKmRpcnR5X3N1Ym1vZHVsZSA9IDE7CisJCX0KIAkJaWYgKGNoYW5nZWQpIHsKIAkJCW1vZGUgPSBjZV9tb2RlX2Zyb21fc3RhdChjZSwgc3Quc3RfbW9kZSk7CiAJCQlzaGExID0gbnVsbF9zaGExOwpAQCAtMjQ2LDE1ICsyNjUsMTcgQEAKIHsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExOwogCXVuc2lnbmVkIGludCBtb2RlOworCXVuc2lnbmVkIGRpcnR5X3N1Ym1vZHVsZSA9IDA7CiAKIAkvKgogCSAqIE5ldyBmaWxlIGluIHRoZSBpbmRleDogaXQgbWlnaHQgYWN0dWFsbHkgYmUgZGlmZmVyZW50IGluCiAJICogdGhlIHdvcmtpbmcgY29weS4KIAkgKi8KLQlpZiAoZ2V0X3N0YXRfZGF0YShuZXcsICZzaGExLCAmbW9kZSwgY2FjaGVkLCBtYXRjaF9taXNzaW5nKSA8IDApCisJaWYgKGdldF9zdGF0X2RhdGEobmV3LCAmc2hhMSwgJm1vZGUsIGNhY2hlZCwgbWF0Y2hfbWlzc2luZywKKwkgICAgJmRpcnR5X3N1Ym1vZHVsZSwgJnJldnMtPmRpZmZvcHQpIDwgMCkKIAkJcmV0dXJuOwogCi0JZGlmZl9pbmRleF9zaG93X2ZpbGUocmV2cywgIisiLCBuZXcsIHNoYTEsIG1vZGUpOworCWRpZmZfaW5kZXhfc2hvd19maWxlKHJldnMsICIrIiwgbmV3LCBzaGExLCBtb2RlLCBkaXJ0eV9zdWJtb2R1bGUpOwogfQogCiBzdGF0aWMgaW50IHNob3dfbW9kaWZpZWQoc3RydWN0IHJldl9pbmZvICpyZXZzLApAQCAtMjY1LDExICsyODYsMTMgQEAKIHsKIAl1bnNpZ25lZCBpbnQgbW9kZSwgb2xkbW9kZTsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExOworCXVuc2lnbmVkIGRpcnR5X3N1Ym1vZHVsZSA9IDA7CiAKLQlpZiAoZ2V0X3N0YXRfZGF0YShuZXcsICZzaGExLCAmbW9kZSwgY2FjaGVkLCBtYXRjaF9taXNzaW5nKSA8IDApIHsKKwlpZiAoZ2V0X3N0YXRfZGF0YShuZXcsICZzaGExLCAmbW9kZSwgY2FjaGVkLCBtYXRjaF9taXNzaW5nLAorCQkJICAmZGlydHlfc3VibW9kdWxlLCAmcmV2cy0+ZGlmZm9wdCkgPCAwKSB7CiAJCWlmIChyZXBvcnRfbWlzc2luZykKIAkJCWRpZmZfaW5kZXhfc2hvd19maWxlKHJldnMsICItIiwgb2xkLAotCQkJCQkgICAgIG9sZC0+c2hhMSwgb2xkLT5jZV9tb2RlKTsKKwkJCQkJICAgICBvbGQtPnNoYTEsIG9sZC0+Y2VfbW9kZSwgMCk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTMwNCwyNyArMzI3LDExIEBACiAJCXJldHVybiAwOwogCiAJZGlmZl9jaGFuZ2UoJnJldnMtPmRpZmZvcHQsIG9sZG1vZGUsIG1vZGUsCi0JCSAgICBvbGQtPnNoYTEsIHNoYTEsIG9sZC0+bmFtZSk7CisJCSAgICBvbGQtPnNoYTEsIHNoYTEsIG9sZC0+bmFtZSwgMCwgZGlydHlfc3VibW9kdWxlKTsKIAlyZXR1cm4gMDsKIH0KIAogLyoKLSAqIFRoaXMgdHVybnMgYWxsIG1lcmdlIGVudHJpZXMgaW50byAic3RhZ2UgMyIuIFRoYXQgZ3VhcmFudGVlcyB0aGF0Ci0gKiB3aGVuIHdlIHJlYWQgaW4gdGhlIG5ldyB0cmVlIChpbnRvICJzdGFnZSAxIiksIHdlIHdvbid0IGxvc2Ugc2lnaHQKLSAqIG9mIHRoZSBmYWN0IHRoYXQgd2UgaGFkIHVubWVyZ2VkIGVudHJpZXMuCi0gKi8KLXN0YXRpYyB2b2lkIG1hcmtfbWVyZ2VfZW50cmllcyh2b2lkKQotewotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7IGkrKykgewotCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOwotCQlpZiAoIWNlX3N0YWdlKGNlKSkKLQkJCWNvbnRpbnVlOwotCQljZS0+Y2VfZmxhZ3MgfD0gQ0VfU1RBR0VNQVNLOwotCX0KLX0KLQotLyoKICAqIFRoaXMgZ2V0cyBhIG1peCBvZiBhbiBleGlzdGluZyBpbmRleCBhbmQgYSB0cmVlLCBvbmUgcGF0aG5hbWUgZW50cnkKICAqIGF0IGEgdGltZS4gVGhlIGluZGV4IGVudHJ5IG1heSBiZSBhIHNpbmdsZSBzdGFnZS0wIG9uZSwgYnV0IGl0IGNvdWxkCiAgKiBhbHNvIGJlIG11bHRpcGxlIHVubWVyZ2VkIGVudHJpZXMgKGluIHdoaWNoIGNhc2UgaWR4X3Bvcy9pZHhfbnIgd2lsbApAQCAtMzM3LDYgKzM0NCw5IEBACiAJc3RydWN0IHJldl9pbmZvICpyZXZzID0gby0+dW5wYWNrX2RhdGE7CiAJaW50IG1hdGNoX21pc3NpbmcsIGNhY2hlZDsKIAorCS8qIGlmIHRoZSBlbnRyeSBpcyBub3QgY2hlY2tlZCBvdXQsIGRvbid0IGV4YW1pbmUgd29yayB0cmVlICovCisJY2FjaGVkID0gby0+aW5kZXhfb25seSB8fAorCQkoaWR4ICYmICgoaWR4LT5jZV9mbGFncyAmIENFX1ZBTElEKSB8fCBjZV9za2lwX3dvcmt0cmVlKGlkeCkpKTsKIAkvKgogCSAqIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2FydCAtICJkaWZmLWluZGV4IC1tIiBkb2VzCiAJICogbm90IG1lYW4gImRvIG5vdCBpZ25vcmUgbWVyZ2VzIiwgYnV0ICJtYXRjaF9taXNzaW5nIi4KQEAgLTM0NCwxMiArMzU0LDExIEBACiAJICogQnV0IHdpdGggdGhlIHJldmlzaW9uIGZsYWcgcGFyc2luZywgdGhhdCdzIGZvdW5kIGluCiAJICogIiFyZXZzLT5pZ25vcmVfbWVyZ2VzIi4KIAkgKi8KLQljYWNoZWQgPSBvLT5pbmRleF9vbmx5OwogCW1hdGNoX21pc3NpbmcgPSAhcmV2cy0+aWdub3JlX21lcmdlczsKIAogCWlmIChjYWNoZWQgJiYgaWR4ICYmIGNlX3N0YWdlKGlkeCkpIHsKLQkJaWYgKHRyZWUpCi0JCQlkaWZmX3VubWVyZ2UoJnJldnMtPmRpZmZvcHQsIGlkeC0+bmFtZSwgaWR4LT5jZV9tb2RlLCBpZHgtPnNoYTEpOworCQlkaWZmX3VubWVyZ2UoJnJldnMtPmRpZmZvcHQsIGlkeC0+bmFtZSwgaWR4LT5jZV9tb2RlLAorCQkJICAgICBpZHgtPnNoYTEpOwogCQlyZXR1cm47CiAJfQogCkBAIC0zNjUsNyArMzc0LDcgQEAKIAkgKiBTb21ldGhpbmcgcmVtb3ZlZCBmcm9tIHRoZSB0cmVlPwogCSAqLwogCWlmICghaWR4KSB7Ci0JCWRpZmZfaW5kZXhfc2hvd19maWxlKHJldnMsICItIiwgdHJlZSwgdHJlZS0+c2hhMSwgdHJlZS0+Y2VfbW9kZSk7CisJCWRpZmZfaW5kZXhfc2hvd19maWxlKHJldnMsICItIiwgdHJlZSwgdHJlZS0+c2hhMSwgdHJlZS0+Y2VfbW9kZSwgMCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTM3MywyMSArMzgyLDYgQEAKIAlzaG93X21vZGlmaWVkKHJldnMsIHRyZWUsIGlkeCwgMSwgY2FjaGVkLCBtYXRjaF9taXNzaW5nKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNraXBfc2FtZV9uYW1lKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKLXsKLQlpbnQgbGVuID0gY2VfbmFtZWxlbihjZSk7Ci0JY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppbmRleCA9IG8tPnNyY19pbmRleDsKLQotCXdoaWxlIChvLT5wb3MgPCBpbmRleC0+Y2FjaGVfbnIpIHsKLQkJc3RydWN0IGNhY2hlX2VudHJ5ICpuZXh0ID0gaW5kZXgtPmNhY2hlW28tPnBvc107Ci0JCWlmIChsZW4gIT0gY2VfbmFtZWxlbihuZXh0KSkKLQkJCWJyZWFrOwotCQlpZiAobWVtY21wKGNlLT5uYW1lLCBuZXh0LT5uYW1lLCBsZW4pKQotCQkJYnJlYWs7Ci0JCW8tPnBvcysrOwotCX0KLX0KLQogLyoKICAqIFRoZSB1bnBhY2tfdHJlZXMoKSBpbnRlcmZhY2UgaXMgZGVzaWduZWQgZm9yIG1lcmdpbmcsIHNvCiAgKiB0aGUgZGlmZmVyZW50IHNvdXJjZSBlbnRyaWVzIGFyZSBkZXNpZ25lZCBwcmltYXJpbHkgZm9yCkBAIC0zOTcsNyArMzkxLDcgQEAKICAqIEZvciBkaWZmaW5nLCB0aGUgaW5kZXggaXMgbW9yZSBpbXBvcnRhbnQsIGFuZCB3ZSBvbmx5IGhhdmUgYQogICogc2luZ2xlIHRyZWUuCiAgKgotICogV2UncmUgc3VwcG9zZWQgdG8gcmV0dXJuIGhvdyBtYW55IGluZGV4IGVudHJpZXMgd2Ugd2FudCB0byBza2lwLgorICogV2UncmUgc3VwcG9zZWQgdG8gYWR2YW5jZSBvLT5wb3MgdG8gc2tpcCB3aGF0IHdlIGhhdmUgYWxyZWFkeSBwcm9jZXNzZWQuCiAgKgogICogVGhpcyB3cmFwcGVyIG1ha2VzIGl0IGFsbCBtb3JlIHJlYWRhYmxlLCBhbmQgdGFrZXMgY2FyZSBvZiBhbGwKICAqIHRoZSBmYWlybHkgY29tcGxleCB1bnBhY2tfdHJlZXMoKSBzZW1hbnRpYyByZXF1aXJlbWVudHMsIGluY2x1ZGluZwpAQCAtNDA5LDkgKzQwMyw2IEBACiAJc3RydWN0IGNhY2hlX2VudHJ5ICp0cmVlID0gc3JjWzFdOwogCXN0cnVjdCByZXZfaW5mbyAqcmV2cyA9IG8tPnVucGFja19kYXRhOwogCi0JaWYgKGlkeCAmJiBjZV9zdGFnZShpZHgpKQotCQlza2lwX3NhbWVfbmFtZShpZHgsIG8pOwotCiAJLyoKIAkgKiBVbnBhY2stdHJlZXMgZ2VuZXJhdGVzIGEgREYvY29uZmxpY3QgZW50cnkgaWYKIAkgKiB0aGVyZSB3YXMgYSBkaXJlY3RvcnkgaW4gdGhlIGluZGV4IGFuZCBhIHRyZWUKQEAgLTQzNSw4ICs0MjYsNiBAQAogCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyBvcHRzOwogCXN0cnVjdCB0cmVlX2Rlc2MgdDsKIAotCW1hcmtfbWVyZ2VfZW50cmllcygpOwotCiAJZW50ID0gcmV2cy0+cGVuZGluZy5vYmplY3RzWzBdLml0ZW07CiAJdHJlZV9uYW1lID0gcmV2cy0+cGVuZGluZy5vYmplY3RzWzBdLm5hbWU7CiAJdHJlZSA9IHBhcnNlX3RyZWVfaW5kaXJlY3QoZW50LT5zaGExKTsKQEAgLTQ0Niw2ICs0MzUsOCBAQAogCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKIAlvcHRzLmhlYWRfaWR4ID0gMTsKIAlvcHRzLmluZGV4X29ubHkgPSBjYWNoZWQ7CisJb3B0cy5kaWZmX2luZGV4X2NhY2hlZCA9IChjYWNoZWQgJiYKKwkJCQkgICFESUZGX09QVF9UU1QoJnJldnMtPmRpZmZvcHQsIEZJTkRfQ09QSUVTX0hBUkRFUikpOwogCW9wdHMubWVyZ2UgPSAxOwogCW9wdHMuZm4gPSBvbmV3YXlfZGlmZjsKIAlvcHRzLnVucGFja19kYXRhID0gcmV2czsKQEAgLTQ1Nyw2ICs0NDgsNyBAQAogCQlleGl0KDEyOCk7CiAKIAlkaWZmX3NldF9tbmVtb25pY19wcmVmaXgoJnJldnMtPmRpZmZvcHQsICJjLyIsIGNhY2hlZCA/ICJpLyIgOiAidy8iKTsKKwlkaWZmY29yZV9maXhfZGlmZl9pbmRleCgmcmV2cy0+ZGlmZm9wdCk7CiAJZGlmZmNvcmVfc3RkKCZyZXZzLT5kaWZmb3B0KTsKIAlkaWZmX2ZsdXNoKCZyZXZzLT5kaWZmb3B0KTsKIAlyZXR1cm4gMDsKQEAgLTUwMiw2ICs0OTQsNyBAQAogCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKIAlvcHRzLmhlYWRfaWR4ID0gMTsKIAlvcHRzLmluZGV4X29ubHkgPSAxOworCW9wdHMuZGlmZl9pbmRleF9jYWNoZWQgPSAhRElGRl9PUFRfVFNUKG9wdCwgRklORF9DT1BJRVNfSEFSREVSKTsKIAlvcHRzLm1lcmdlID0gMTsKIAlvcHRzLmZuID0gb25ld2F5X2RpZmY7CiAJb3B0cy51bnBhY2tfZGF0YSA9ICZyZXZzOwpAQCAtNTIwLDcgKzUxMyw3IEBACiAKIAlpbml0X3JldmlzaW9ucygmcmV2LCBOVUxMKTsKIAlzZXR1cF9yZXZpc2lvbnMoMCwgTlVMTCwgJnJldiwgZGVmKTsKLQlESUZGX09QVF9TRVQoJnJldi5kaWZmb3B0LCBRVUlFVCk7CisJRElGRl9PUFRfU0VUKCZyZXYuZGlmZm9wdCwgUVVJQ0spOwogCURJRkZfT1BUX1NFVCgmcmV2LmRpZmZvcHQsIEVYSVRfV0lUSF9TVEFUVVMpOwogCXJldi5kaWZmb3B0LmZsYWdzIHw9IGRpZmZfZmxhZ3M7CiAJcnVuX2RpZmZfaW5kZXgoJnJldiwgMSk7CmRpZmYgLS1naXQgYS9kaWZmLW5vLWluZGV4LmMgYi9kaWZmLW5vLWluZGV4LmMKaW5kZXggNGViYzFkYi4uYWFlOGU3YSAxMDA2NDQKLS0tIGEvZGlmZi1uby1pbmRleC5jCisrKyBiL2RpZmYtbm8taW5kZXguYwpAQCAtMjAxLDggKzIwMSw4IEBACiAJCQlyZXR1cm47CiAJfQogCWlmIChhcmdjICE9IGkgKyAyKQotCQlkaWUoImdpdCBkaWZmICVzIHRha2VzIHR3byBwYXRocyIsCi0JCSAgICBub19pbmRleCA/ICItLW5vLWluZGV4IiA6ICJbLS1uby1pbmRleF0iKTsKKwkJdXNhZ2VmKCJnaXQgZGlmZiAlcyA8cGF0aD4gPHBhdGg+IiwKKwkJICAgICAgIG5vX2luZGV4ID8gIi0tbm8taW5kZXgiIDogIlstLW5vLWluZGV4XSIpOwogCiAJZGlmZl9zZXR1cCgmcmV2cy0+ZGlmZm9wdCk7CiAJZm9yIChpID0gMTsgaSA8IGFyZ2MgLSAyOyApIHsKZGlmZiAtLWdpdCBhL2RpZmYuYyBiL2RpZmYuYwppbmRleCBhZDVjMGEyLi45OTA1OTIzIDEwMDY0NAotLS0gYS9kaWZmLmMKKysrIGIvZGlmZi5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSAidXRmOC5oIgogI2luY2x1ZGUgInVzZXJkaWZmLmgiCiAjaW5jbHVkZSAic2lnY2hhaW4uaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKIAogI2lmZGVmIE5PX0ZBU1RfV09SS0lOR19ESVJFQ1RPUlkKICNkZWZpbmUgRkFTVF9XT1JLSU5HX0RJUkVDVE9SWSAwCkBAIC0zOCw2ICszOSw3IEBACiAJR0lUX0NPTE9SX0dSRUVOLAkvKiBORVcgKi8KIAlHSVRfQ09MT1JfWUVMTE9XLAkvKiBDT01NSVQgKi8KIAlHSVRfQ09MT1JfQkdfUkVELAkvKiBXSElURVNQQUNFICovCisJR0lUX0NPTE9SX05PUk1BTCwJLyogRlVOQ0lORk8gKi8KIH07CiAKIHN0YXRpYyB2b2lkIGRpZmZfZmlsZXNwZWNfbG9hZF9kcml2ZXIoc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSk7CkBAIC01OSw3ICs2MSw5IEBACiAJCXJldHVybiBESUZGX0NPTU1JVDsKIAlpZiAoIXN0cmNhc2VjbXAodmFyK29mcywgIndoaXRlc3BhY2UiKSkKIAkJcmV0dXJuIERJRkZfV0hJVEVTUEFDRTsKLQlkaWUoImJhZCBjb25maWcgdmFyaWFibGUgJyVzJyIsIHZhcik7CisJaWYgKCFzdHJjYXNlY21wKHZhcitvZnMsICJmdW5jIikpCisJCXJldHVybiBESUZGX0ZVTkNJTkZPOworCXJldHVybiAtMTsKIH0KIAogc3RhdGljIGludCBnaXRfY29uZmlnX3JlbmFtZShjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQpAQCAtMTE4LDYgKzEyMiw4IEBACiAKIAlpZiAoIXByZWZpeGNtcCh2YXIsICJkaWZmLmNvbG9yLiIpIHx8ICFwcmVmaXhjbXAodmFyLCAiY29sb3IuZGlmZi4iKSkgewogCQlpbnQgc2xvdCA9IHBhcnNlX2RpZmZfY29sb3Jfc2xvdCh2YXIsIDExKTsKKwkJaWYgKHNsb3QgPCAwKQorCQkJcmV0dXJuIDA7CiAJCWlmICghdmFsdWUpCiAJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKIAkJY29sb3JfcGFyc2UodmFsdWUsIHZhciwgZGlmZl9jb2xvcnNbc2xvdF0pOwpAQCAtMTc0LDYgKzE4MCwyMTMgQEAKIAljaGFyIHRtcF9wYXRoW1BBVEhfTUFYXTsKIH0gZGlmZl90ZW1wWzJdOwogCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgKCpzYW5lX3RydW5jYXRlX2ZuKShjaGFyICpsaW5lLCB1bnNpZ25lZCBsb25nIGxlbik7CisKK3N0cnVjdCBlbWl0X2NhbGxiYWNrIHsKKwlpbnQgY29sb3JfZGlmZjsKKwl1bnNpZ25lZCB3c19ydWxlOworCWludCBibGFua19hdF9lb2ZfaW5fcHJlaW1hZ2U7CisJaW50IGJsYW5rX2F0X2VvZl9pbl9wb3N0aW1hZ2U7CisJaW50IGxub19pbl9wcmVpbWFnZTsKKwlpbnQgbG5vX2luX3Bvc3RpbWFnZTsKKwlzYW5lX3RydW5jYXRlX2ZuIHRydW5jYXRlOworCWNvbnN0IGNoYXIgKipsYWJlbF9wYXRoOworCXN0cnVjdCBkaWZmX3dvcmRzX2RhdGEgKmRpZmZfd29yZHM7CisJaW50ICpmb3VuZF9jaGFuZ2VzcDsKKwlGSUxFICpmaWxlOworCXN0cnVjdCBzdHJidWYgKmhlYWRlcjsKK307CisKK3N0YXRpYyBpbnQgY291bnRfbGluZXMoY29uc3QgY2hhciAqZGF0YSwgaW50IHNpemUpCit7CisJaW50IGNvdW50LCBjaCwgY29tcGxldGVseV9lbXB0eSA9IDEsIG5sX2p1c3Rfc2VlbiA9IDA7CisJY291bnQgPSAwOworCXdoaWxlICgwIDwgc2l6ZS0tKSB7CisJCWNoID0gKmRhdGErKzsKKwkJaWYgKGNoID09ICdcbicpIHsKKwkJCWNvdW50Kys7CisJCQlubF9qdXN0X3NlZW4gPSAxOworCQkJY29tcGxldGVseV9lbXB0eSA9IDA7CisJCX0KKwkJZWxzZSB7CisJCQlubF9qdXN0X3NlZW4gPSAwOworCQkJY29tcGxldGVseV9lbXB0eSA9IDA7CisJCX0KKwl9CisJaWYgKGNvbXBsZXRlbHlfZW1wdHkpCisJCXJldHVybiAwOworCWlmICghbmxfanVzdF9zZWVuKQorCQljb3VudCsrOyAvKiBubyB0cmFpbGluZyBuZXdsaW5lICovCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IGZpbGxfbW1maWxlKG1tZmlsZV90ICptZiwgc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSkKK3sKKwlpZiAoIURJRkZfRklMRV9WQUxJRChvbmUpKSB7CisJCW1mLT5wdHIgPSAoY2hhciAqKSIiOyAvKiBkb2VzIG5vdCBtYXR0ZXIgKi8KKwkJbWYtPnNpemUgPSAwOworCQlyZXR1cm4gMDsKKwl9CisJZWxzZSBpZiAoZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhvbmUsIDApKQorCQlyZXR1cm4gLTE7CisKKwltZi0+cHRyID0gb25lLT5kYXRhOworCW1mLT5zaXplID0gb25lLT5zaXplOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvdW50X3RyYWlsaW5nX2JsYW5rKG1tZmlsZV90ICptZiwgdW5zaWduZWQgd3NfcnVsZSkKK3sKKwljaGFyICpwdHIgPSBtZi0+cHRyOworCWxvbmcgc2l6ZSA9IG1mLT5zaXplOworCWludCBjbnQgPSAwOworCisJaWYgKCFzaXplKQorCQlyZXR1cm4gY250OworCXB0ciArPSBzaXplIC0gMTsgLyogcG9pbnRpbmcgYXQgdGhlIHZlcnkgZW5kICovCisJaWYgKCpwdHIgIT0gJ1xuJykKKwkJOyAvKiBpbmNvbXBsZXRlIGxpbmUgKi8KKwllbHNlCisJCXB0ci0tOyAvKiBza2lwIHRoZSBsYXN0IExGICovCisJd2hpbGUgKG1mLT5wdHIgPCBwdHIpIHsKKwkJY2hhciAqcHJldl9lb2w7CisJCWZvciAocHJldl9lb2wgPSBwdHI7IG1mLT5wdHIgPD0gcHJldl9lb2w7IHByZXZfZW9sLS0pCisJCQlpZiAoKnByZXZfZW9sID09ICdcbicpCisJCQkJYnJlYWs7CisJCWlmICghd3NfYmxhbmtfbGluZShwcmV2X2VvbCArIDEsIHB0ciAtIHByZXZfZW9sLCB3c19ydWxlKSkKKwkJCWJyZWFrOworCQljbnQrKzsKKwkJcHRyID0gcHJldl9lb2wgLSAxOworCX0KKwlyZXR1cm4gY250OworfQorCitzdGF0aWMgdm9pZCBjaGVja19ibGFua19hdF9lb2YobW1maWxlX3QgKm1mMSwgbW1maWxlX3QgKm1mMiwKKwkJCSAgICAgICBzdHJ1Y3QgZW1pdF9jYWxsYmFjayAqZWNiZGF0YSkKK3sKKwlpbnQgbDEsIGwyLCBhdDsKKwl1bnNpZ25lZCB3c19ydWxlID0gZWNiZGF0YS0+d3NfcnVsZTsKKwlsMSA9IGNvdW50X3RyYWlsaW5nX2JsYW5rKG1mMSwgd3NfcnVsZSk7CisJbDIgPSBjb3VudF90cmFpbGluZ19ibGFuayhtZjIsIHdzX3J1bGUpOworCWlmIChsMiA8PSBsMSkgeworCQllY2JkYXRhLT5ibGFua19hdF9lb2ZfaW5fcHJlaW1hZ2UgPSAwOworCQllY2JkYXRhLT5ibGFua19hdF9lb2ZfaW5fcG9zdGltYWdlID0gMDsKKwkJcmV0dXJuOworCX0KKwlhdCA9IGNvdW50X2xpbmVzKG1mMS0+cHRyLCBtZjEtPnNpemUpOworCWVjYmRhdGEtPmJsYW5rX2F0X2VvZl9pbl9wcmVpbWFnZSA9IChhdCAtIGwxKSArIDE7CisKKwlhdCA9IGNvdW50X2xpbmVzKG1mMi0+cHRyLCBtZjItPnNpemUpOworCWVjYmRhdGEtPmJsYW5rX2F0X2VvZl9pbl9wb3N0aW1hZ2UgPSAoYXQgLSBsMikgKyAxOworfQorCitzdGF0aWMgdm9pZCBlbWl0X2xpbmVfMChGSUxFICpmaWxlLCBjb25zdCBjaGFyICpzZXQsIGNvbnN0IGNoYXIgKnJlc2V0LAorCQkJaW50IGZpcnN0LCBjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuKQoreworCWludCBoYXNfdHJhaWxpbmdfbmV3bGluZSwgaGFzX3RyYWlsaW5nX2NhcnJpYWdlX3JldHVybjsKKwlpbnQgbm9maXJzdDsKKworCWlmIChsZW4gPT0gMCkgeworCQloYXNfdHJhaWxpbmdfbmV3bGluZSA9IChmaXJzdCA9PSAnXG4nKTsKKwkJaGFzX3RyYWlsaW5nX2NhcnJpYWdlX3JldHVybiA9ICghaGFzX3RyYWlsaW5nX25ld2xpbmUgJiYKKwkJCQkJCShmaXJzdCA9PSAnXHInKSk7CisJCW5vZmlyc3QgPSBoYXNfdHJhaWxpbmdfbmV3bGluZSB8fCBoYXNfdHJhaWxpbmdfY2FycmlhZ2VfcmV0dXJuOworCX0gZWxzZSB7CisJCWhhc190cmFpbGluZ19uZXdsaW5lID0gKGxlbiA+IDAgJiYgbGluZVtsZW4tMV0gPT0gJ1xuJyk7CisJCWlmIChoYXNfdHJhaWxpbmdfbmV3bGluZSkKKwkJCWxlbi0tOworCQloYXNfdHJhaWxpbmdfY2FycmlhZ2VfcmV0dXJuID0gKGxlbiA+IDAgJiYgbGluZVtsZW4tMV0gPT0gJ1xyJyk7CisJCWlmIChoYXNfdHJhaWxpbmdfY2FycmlhZ2VfcmV0dXJuKQorCQkJbGVuLS07CisJCW5vZmlyc3QgPSAwOworCX0KKworCWlmIChsZW4gfHwgIW5vZmlyc3QpIHsKKwkJZnB1dHMoc2V0LCBmaWxlKTsKKwkJaWYgKCFub2ZpcnN0KQorCQkJZnB1dGMoZmlyc3QsIGZpbGUpOworCQlmd3JpdGUobGluZSwgbGVuLCAxLCBmaWxlKTsKKwkJZnB1dHMocmVzZXQsIGZpbGUpOworCX0KKwlpZiAoaGFzX3RyYWlsaW5nX2NhcnJpYWdlX3JldHVybikKKwkJZnB1dGMoJ1xyJywgZmlsZSk7CisJaWYgKGhhc190cmFpbGluZ19uZXdsaW5lKQorCQlmcHV0YygnXG4nLCBmaWxlKTsKK30KKworc3RhdGljIHZvaWQgZW1pdF9saW5lKEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIgKnNldCwgY29uc3QgY2hhciAqcmVzZXQsCisJCSAgICAgIGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4pCit7CisJZW1pdF9saW5lXzAoZmlsZSwgc2V0LCByZXNldCwgbGluZVswXSwgbGluZSsxLCBsZW4tMSk7Cit9CisKK3N0YXRpYyBpbnQgbmV3X2JsYW5rX2xpbmVfYXRfZW9mKHN0cnVjdCBlbWl0X2NhbGxiYWNrICplY2JkYXRhLCBjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuKQoreworCWlmICghKChlY2JkYXRhLT53c19ydWxlICYgV1NfQkxBTktfQVRfRU9GKSAmJgorCSAgICAgIGVjYmRhdGEtPmJsYW5rX2F0X2VvZl9pbl9wcmVpbWFnZSAmJgorCSAgICAgIGVjYmRhdGEtPmJsYW5rX2F0X2VvZl9pbl9wb3N0aW1hZ2UgJiYKKwkgICAgICBlY2JkYXRhLT5ibGFua19hdF9lb2ZfaW5fcHJlaW1hZ2UgPD0gZWNiZGF0YS0+bG5vX2luX3ByZWltYWdlICYmCisJICAgICAgZWNiZGF0YS0+YmxhbmtfYXRfZW9mX2luX3Bvc3RpbWFnZSA8PSBlY2JkYXRhLT5sbm9faW5fcG9zdGltYWdlKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHdzX2JsYW5rX2xpbmUobGluZSwgbGVuLCBlY2JkYXRhLT53c19ydWxlKTsKK30KKworc3RhdGljIHZvaWQgZW1pdF9hZGRfbGluZShjb25zdCBjaGFyICpyZXNldCwKKwkJCSAgc3RydWN0IGVtaXRfY2FsbGJhY2sgKmVjYmRhdGEsCisJCQkgIGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4pCit7CisJY29uc3QgY2hhciAqd3MgPSBkaWZmX2dldF9jb2xvcihlY2JkYXRhLT5jb2xvcl9kaWZmLCBESUZGX1dISVRFU1BBQ0UpOworCWNvbnN0IGNoYXIgKnNldCA9IGRpZmZfZ2V0X2NvbG9yKGVjYmRhdGEtPmNvbG9yX2RpZmYsIERJRkZfRklMRV9ORVcpOworCisJaWYgKCEqd3MpCisJCWVtaXRfbGluZV8wKGVjYmRhdGEtPmZpbGUsIHNldCwgcmVzZXQsICcrJywgbGluZSwgbGVuKTsKKwllbHNlIGlmIChuZXdfYmxhbmtfbGluZV9hdF9lb2YoZWNiZGF0YSwgbGluZSwgbGVuKSkKKwkJLyogQmxhbmsgbGluZSBhdCBFT0YgLSBwYWludCAnKycgYXMgd2VsbCAqLworCQllbWl0X2xpbmVfMChlY2JkYXRhLT5maWxlLCB3cywgcmVzZXQsICcrJywgbGluZSwgbGVuKTsKKwllbHNlIHsKKwkJLyogRW1pdCBqdXN0IHRoZSBwcmVmaXgsIHRoZW4gdGhlIHJlc3QuICovCisJCWVtaXRfbGluZV8wKGVjYmRhdGEtPmZpbGUsIHNldCwgcmVzZXQsICcrJywgIiIsIDApOworCQl3c19jaGVja19lbWl0KGxpbmUsIGxlbiwgZWNiZGF0YS0+d3NfcnVsZSwKKwkJCSAgICAgIGVjYmRhdGEtPmZpbGUsIHNldCwgcmVzZXQsIHdzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRfaHVua19oZWFkZXIoc3RydWN0IGVtaXRfY2FsbGJhY2sgKmVjYmRhdGEsCisJCQkgICAgIGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4pCit7CisJY29uc3QgY2hhciAqcGxhaW4gPSBkaWZmX2dldF9jb2xvcihlY2JkYXRhLT5jb2xvcl9kaWZmLCBESUZGX1BMQUlOKTsKKwljb25zdCBjaGFyICpmcmFnID0gZGlmZl9nZXRfY29sb3IoZWNiZGF0YS0+Y29sb3JfZGlmZiwgRElGRl9GUkFHSU5GTyk7CisJY29uc3QgY2hhciAqZnVuYyA9IGRpZmZfZ2V0X2NvbG9yKGVjYmRhdGEtPmNvbG9yX2RpZmYsIERJRkZfRlVOQ0lORk8pOworCWNvbnN0IGNoYXIgKnJlc2V0ID0gZGlmZl9nZXRfY29sb3IoZWNiZGF0YS0+Y29sb3JfZGlmZiwgRElGRl9SRVNFVCk7CisJc3RhdGljIGNvbnN0IGNoYXIgYXRhdFsyXSA9IHsgJ0AnLCAnQCcgfTsKKwljb25zdCBjaGFyICpjcCwgKmVwOworCisJLyoKKwkgKiBBcyBhIGh1bmsgaGVhZGVyIG11c3QgYmVnaW4gd2l0aCAiQEAgLTxvbGQ+LCArPG5ldz4gQEAiLAorCSAqIGl0IGFsd2F5cyBpcyBhdCBsZWFzdCAxMCBieXRlcyBsb25nLgorCSAqLworCWlmIChsZW4gPCAxMCB8fAorCSAgICBtZW1jbXAobGluZSwgYXRhdCwgMikgfHwKKwkgICAgIShlcCA9IG1lbW1lbShsaW5lICsgMiwgbGVuIC0gMiwgYXRhdCwgMikpKSB7CisJCWVtaXRfbGluZShlY2JkYXRhLT5maWxlLCBwbGFpbiwgcmVzZXQsIGxpbmUsIGxlbik7CisJCXJldHVybjsKKwl9CisJZXAgKz0gMjsgLyogc2tpcCBvdmVyIEBAICovCisKKwkvKiBUaGUgaHVuayBoZWFkZXIgaW4gZnJhZ2luZm8gY29sb3IgKi8KKwllbWl0X2xpbmUoZWNiZGF0YS0+ZmlsZSwgZnJhZywgcmVzZXQsIGxpbmUsIGVwIC0gbGluZSk7CisKKwkvKiBibGFuayBiZWZvcmUgdGhlIGZ1bmMgaGVhZGVyICovCisJZm9yIChjcCA9IGVwOyBlcCAtIGxpbmUgPCBsZW47IGVwKyspCisJCWlmICgqZXAgIT0gJyAnICYmICplcCAhPSAnXHQnKQorCQkJYnJlYWs7CisJaWYgKGVwICE9IGNwKQorCQllbWl0X2xpbmUoZWNiZGF0YS0+ZmlsZSwgcGxhaW4sIHJlc2V0LCBjcCwgZXAgLSBjcCk7CisKKwlpZiAoZXAgPCBsaW5lICsgbGVuKQorCQllbWl0X2xpbmUoZWNiZGF0YS0+ZmlsZSwgZnVuYywgcmVzZXQsIGVwLCBsaW5lICsgbGVuIC0gZXApOworfQorCiBzdGF0aWMgc3RydWN0IGRpZmZfdGVtcGZpbGUgKmNsYWltX2RpZmZfdGVtcGZpbGUodm9pZCkgewogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRpZmZfdGVtcCk7IGkrKykKQEAgLTIwMSwyOSArNDE0LDYgQEAKIAlyYWlzZShzaWdubyk7CiB9CiAKLXN0YXRpYyBpbnQgY291bnRfbGluZXMoY29uc3QgY2hhciAqZGF0YSwgaW50IHNpemUpCi17Ci0JaW50IGNvdW50LCBjaCwgY29tcGxldGVseV9lbXB0eSA9IDEsIG5sX2p1c3Rfc2VlbiA9IDA7Ci0JY291bnQgPSAwOwotCXdoaWxlICgwIDwgc2l6ZS0tKSB7Ci0JCWNoID0gKmRhdGErKzsKLQkJaWYgKGNoID09ICdcbicpIHsKLQkJCWNvdW50Kys7Ci0JCQlubF9qdXN0X3NlZW4gPSAxOwotCQkJY29tcGxldGVseV9lbXB0eSA9IDA7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlubF9qdXN0X3NlZW4gPSAwOwotCQkJY29tcGxldGVseV9lbXB0eSA9IDA7Ci0JCX0KLQl9Ci0JaWYgKGNvbXBsZXRlbHlfZW1wdHkpCi0JCXJldHVybiAwOwotCWlmICghbmxfanVzdF9zZWVuKQotCQljb3VudCsrOyAvKiBubyB0cmFpbGluZyBuZXdsaW5lICovCi0JcmV0dXJuIGNvdW50OwotfQotCiBzdGF0aWMgdm9pZCBwcmludF9saW5lX2NvdW50KEZJTEUgKmZpbGUsIGludCBjb3VudCkKIHsKIAlzd2l0Y2ggKGNvdW50KSB7CkBAIC0yMzksMjYgKzQyOSwzNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgY29weV9maWxlX3dpdGhfcHJlZml4KEZJTEUgKmZpbGUsCi0JCQkJICBpbnQgcHJlZml4LCBjb25zdCBjaGFyICpkYXRhLCBpbnQgc2l6ZSwKLQkJCQkgIGNvbnN0IGNoYXIgKnNldCwgY29uc3QgY2hhciAqcmVzZXQpCitzdGF0aWMgdm9pZCBlbWl0X3Jld3JpdGVfbGluZXMoc3RydWN0IGVtaXRfY2FsbGJhY2sgKmVjYiwKKwkJCSAgICAgICBpbnQgcHJlZml4LCBjb25zdCBjaGFyICpkYXRhLCBpbnQgc2l6ZSkKIHsKLQlpbnQgY2gsIG5sX2p1c3Rfc2VlbiA9IDE7Ci0Jd2hpbGUgKDAgPCBzaXplLS0pIHsKLQkJY2ggPSAqZGF0YSsrOwotCQlpZiAobmxfanVzdF9zZWVuKSB7Ci0JCQlmcHV0cyhzZXQsIGZpbGUpOwotCQkJcHV0YyhwcmVmaXgsIGZpbGUpOworCWNvbnN0IGNoYXIgKmVuZHAgPSBOVUxMOworCXN0YXRpYyBjb25zdCBjaGFyICpubmVvZiA9ICIgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuIjsKKwljb25zdCBjaGFyICpvbGQgPSBkaWZmX2dldF9jb2xvcihlY2ItPmNvbG9yX2RpZmYsIERJRkZfRklMRV9PTEQpOworCWNvbnN0IGNoYXIgKnJlc2V0ID0gZGlmZl9nZXRfY29sb3IoZWNiLT5jb2xvcl9kaWZmLCBESUZGX1JFU0VUKTsKKworCXdoaWxlICgwIDwgc2l6ZSkgeworCQlpbnQgbGVuOworCisJCWVuZHAgPSBtZW1jaHIoZGF0YSwgJ1xuJywgc2l6ZSk7CisJCWxlbiA9IGVuZHAgPyAoZW5kcCAtIGRhdGEgKyAxKSA6IHNpemU7CisJCWlmIChwcmVmaXggIT0gJysnKSB7CisJCQllY2ItPmxub19pbl9wcmVpbWFnZSsrOworCQkJZW1pdF9saW5lXzAoZWNiLT5maWxlLCBvbGQsIHJlc2V0LCAnLScsCisJCQkJICAgIGRhdGEsIGxlbik7CisJCX0gZWxzZSB7CisJCQllY2ItPmxub19pbl9wb3N0aW1hZ2UrKzsKKwkJCWVtaXRfYWRkX2xpbmUocmVzZXQsIGVjYiwgZGF0YSwgbGVuKTsKIAkJfQotCQlpZiAoY2ggPT0gJ1xuJykgewotCQkJbmxfanVzdF9zZWVuID0gMTsKLQkJCWZwdXRzKHJlc2V0LCBmaWxlKTsKLQkJfSBlbHNlCi0JCQlubF9qdXN0X3NlZW4gPSAwOwotCQlwdXRjKGNoLCBmaWxlKTsKKwkJc2l6ZSAtPSBsZW47CisJCWRhdGEgKz0gbGVuOwogCX0KLQlpZiAoIW5sX2p1c3Rfc2VlbikKLQkJZnByaW50ZihmaWxlLCAiJXNcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbiIsIHJlc2V0KTsKKwlpZiAoIWVuZHApIHsKKwkJY29uc3QgY2hhciAqcGxhaW4gPSBkaWZmX2dldF9jb2xvcihlY2ItPmNvbG9yX2RpZmYsCisJCQkJCQkgICBESUZGX1BMQUlOKTsKKwkJZW1pdF9saW5lXzAoZWNiLT5maWxlLCBwbGFpbiwgcmVzZXQsICdcXCcsCisJCQkgICAgbm5lb2YsIHN0cmxlbihubmVvZikpOworCX0KIH0KIAogc3RhdGljIHZvaWQgZW1pdF9yZXdyaXRlX2RpZmYoY29uc3QgY2hhciAqbmFtZV9hLApAQCAtMjc0LDEzICs0NzQsMTIgQEAKIAljb25zdCBjaGFyICpuYW1lX2FfdGFiLCAqbmFtZV9iX3RhYjsKIAljb25zdCBjaGFyICptZXRhaW5mbyA9IGRpZmZfZ2V0X2NvbG9yKGNvbG9yX2RpZmYsIERJRkZfTUVUQUlORk8pOwogCWNvbnN0IGNoYXIgKmZyYWdpbmZvID0gZGlmZl9nZXRfY29sb3IoY29sb3JfZGlmZiwgRElGRl9GUkFHSU5GTyk7Ci0JY29uc3QgY2hhciAqb2xkID0gZGlmZl9nZXRfY29sb3IoY29sb3JfZGlmZiwgRElGRl9GSUxFX09MRCk7Ci0JY29uc3QgY2hhciAqbmV3ID0gZGlmZl9nZXRfY29sb3IoY29sb3JfZGlmZiwgRElGRl9GSUxFX05FVyk7CiAJY29uc3QgY2hhciAqcmVzZXQgPSBkaWZmX2dldF9jb2xvcihjb2xvcl9kaWZmLCBESUZGX1JFU0VUKTsKIAlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBhX25hbWUgPSBTVFJCVUZfSU5JVCwgYl9uYW1lID0gU1RSQlVGX0lOSVQ7CiAJY29uc3QgY2hhciAqYV9wcmVmaXgsICpiX3ByZWZpeDsKIAljb25zdCBjaGFyICpkYXRhX29uZSwgKmRhdGFfdHdvOwogCXNpemVfdCBzaXplX29uZSwgc2l6ZV90d287CisJc3RydWN0IGVtaXRfY2FsbGJhY2sgZWNiZGF0YTsKIAogCWlmIChkaWZmX21uZW1vbmljX3ByZWZpeCAmJiBESUZGX09QVF9UU1QobywgUkVWRVJTRV9ESUZGKSkgewogCQlhX3ByZWZpeCA9IG8tPmJfcHJlZml4OwpAQCAtMzIxLDYgKzUyMCwyMiBAQAogCQlzaXplX3R3byA9IHR3by0+c2l6ZTsKIAl9CiAKKwltZW1zZXQoJmVjYmRhdGEsIDAsIHNpemVvZihlY2JkYXRhKSk7CisJZWNiZGF0YS5jb2xvcl9kaWZmID0gY29sb3JfZGlmZjsKKwllY2JkYXRhLmZvdW5kX2NoYW5nZXNwID0gJm8tPmZvdW5kX2NoYW5nZXM7CisJZWNiZGF0YS53c19ydWxlID0gd2hpdGVzcGFjZV9ydWxlKG5hbWVfYiA/IG5hbWVfYiA6IG5hbWVfYSk7CisJZWNiZGF0YS5maWxlID0gby0+ZmlsZTsKKwlpZiAoZWNiZGF0YS53c19ydWxlICYgV1NfQkxBTktfQVRfRU9GKSB7CisJCW1tZmlsZV90IG1mMSwgbWYyOworCQltZjEucHRyID0gKGNoYXIgKilkYXRhX29uZTsKKwkJbWYyLnB0ciA9IChjaGFyICopZGF0YV90d287CisJCW1mMS5zaXplID0gc2l6ZV9vbmU7CisJCW1mMi5zaXplID0gc2l6ZV90d287CisJCWNoZWNrX2JsYW5rX2F0X2VvZigmbWYxLCAmbWYyLCAmZWNiZGF0YSk7CisJfQorCWVjYmRhdGEubG5vX2luX3ByZWltYWdlID0gMTsKKwllY2JkYXRhLmxub19pbl9wb3N0aW1hZ2UgPSAxOworCiAJbGNfYSA9IGNvdW50X2xpbmVzKGRhdGFfb25lLCBzaXplX29uZSk7CiAJbGNfYiA9IGNvdW50X2xpbmVzKGRhdGFfdHdvLCBzaXplX3R3byk7CiAJZnByaW50ZihvLT5maWxlLApAQCAtMzMyLDI0ICs1NDcsOSBAQAogCXByaW50X2xpbmVfY291bnQoby0+ZmlsZSwgbGNfYik7CiAJZnByaW50ZihvLT5maWxlLCAiIEBAJXNcbiIsIHJlc2V0KTsKIAlpZiAobGNfYSkKLQkJY29weV9maWxlX3dpdGhfcHJlZml4KG8tPmZpbGUsICctJywgZGF0YV9vbmUsIHNpemVfb25lLCBvbGQsIHJlc2V0KTsKKwkJZW1pdF9yZXdyaXRlX2xpbmVzKCZlY2JkYXRhLCAnLScsIGRhdGFfb25lLCBzaXplX29uZSk7CiAJaWYgKGxjX2IpCi0JCWNvcHlfZmlsZV93aXRoX3ByZWZpeChvLT5maWxlLCAnKycsIGRhdGFfdHdvLCBzaXplX3R3bywgbmV3LCByZXNldCk7Ci19Ci0KLXN0YXRpYyBpbnQgZmlsbF9tbWZpbGUobW1maWxlX3QgKm1mLCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lKQotewotCWlmICghRElGRl9GSUxFX1ZBTElEKG9uZSkpIHsKLQkJbWYtPnB0ciA9IChjaGFyICopIiI7IC8qIGRvZXMgbm90IG1hdHRlciAqLwotCQltZi0+c2l6ZSA9IDA7Ci0JCXJldHVybiAwOwotCX0KLQllbHNlIGlmIChkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKG9uZSwgMCkpCi0JCXJldHVybiAtMTsKLQotCW1mLT5wdHIgPSBvbmUtPmRhdGE7Ci0JbWYtPnNpemUgPSBvbmUtPnNpemU7Ci0JcmV0dXJuIDA7CisJCWVtaXRfcmV3cml0ZV9saW5lcygmZWNiZGF0YSwgJysnLCBkYXRhX3R3bywgc2l6ZV90d28pOwogfQogCiBzdHJ1Y3QgZGlmZl93b3Jkc19idWZmZXIgewpAQCAtNTI5LDI2ICs3MjksMTggQEAKIAlkaWZmX3dvcmRzLT5taW51cy50ZXh0LnNpemUgPSBkaWZmX3dvcmRzLT5wbHVzLnRleHQuc2l6ZSA9IDA7CiB9CiAKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAoKnNhbmVfdHJ1bmNhdGVfZm4pKGNoYXIgKmxpbmUsIHVuc2lnbmVkIGxvbmcgbGVuKTsKLQotc3RydWN0IGVtaXRfY2FsbGJhY2sgewotCWludCBucGFyZW50cywgY29sb3JfZGlmZjsKLQl1bnNpZ25lZCB3c19ydWxlOwotCXNhbmVfdHJ1bmNhdGVfZm4gdHJ1bmNhdGU7Ci0JY29uc3QgY2hhciAqKmxhYmVsX3BhdGg7Ci0Jc3RydWN0IGRpZmZfd29yZHNfZGF0YSAqZGlmZl93b3JkczsKLQlpbnQgKmZvdW5kX2NoYW5nZXNwOwotCUZJTEUgKmZpbGU7Ci19OworLyogSW4gImNvbG9yLXdvcmRzIiBtb2RlLCBzaG93IHdvcmQtZGlmZiBvZiB3b3JkcyBhY2N1bXVsYXRlZCBpbiB0aGUgYnVmZmVyICovCitzdGF0aWMgdm9pZCBkaWZmX3dvcmRzX2ZsdXNoKHN0cnVjdCBlbWl0X2NhbGxiYWNrICplY2JkYXRhKQoreworCWlmIChlY2JkYXRhLT5kaWZmX3dvcmRzLT5taW51cy50ZXh0LnNpemUgfHwKKwkgICAgZWNiZGF0YS0+ZGlmZl93b3Jkcy0+cGx1cy50ZXh0LnNpemUpCisJCWRpZmZfd29yZHNfc2hvdyhlY2JkYXRhLT5kaWZmX3dvcmRzKTsKK30KIAogc3RhdGljIHZvaWQgZnJlZV9kaWZmX3dvcmRzX2RhdGEoc3RydWN0IGVtaXRfY2FsbGJhY2sgKmVjYmRhdGEpCiB7CiAJaWYgKGVjYmRhdGEtPmRpZmZfd29yZHMpIHsKLQkJLyogZmx1c2ggYnVmZmVycyAqLwotCQlpZiAoZWNiZGF0YS0+ZGlmZl93b3Jkcy0+bWludXMudGV4dC5zaXplIHx8Ci0JCQkJZWNiZGF0YS0+ZGlmZl93b3Jkcy0+cGx1cy50ZXh0LnNpemUpCi0JCQlkaWZmX3dvcmRzX3Nob3coZWNiZGF0YS0+ZGlmZl93b3Jkcyk7Ci0KKwkJZGlmZl93b3Jkc19mbHVzaChlY2JkYXRhKTsKIAkJZnJlZSAoZWNiZGF0YS0+ZGlmZl93b3Jkcy0+bWludXMudGV4dC5wdHIpOwogCQlmcmVlIChlY2JkYXRhLT5kaWZmX3dvcmRzLT5taW51cy5vcmlnKTsKIAkJZnJlZSAoZWNiZGF0YS0+ZGlmZl93b3Jkcy0+cGx1cy50ZXh0LnB0cik7CkBAIC01NjYsNDIgKzc1OCw2IEBACiAJcmV0dXJuICIiOwogfQogCi1zdGF0aWMgdm9pZCBlbWl0X2xpbmUoRklMRSAqZmlsZSwgY29uc3QgY2hhciAqc2V0LCBjb25zdCBjaGFyICpyZXNldCwgY29uc3QgY2hhciAqbGluZSwgaW50IGxlbikKLXsKLQlpbnQgaGFzX3RyYWlsaW5nX25ld2xpbmUsIGhhc190cmFpbGluZ19jYXJyaWFnZV9yZXR1cm47Ci0KLQloYXNfdHJhaWxpbmdfbmV3bGluZSA9IChsZW4gPiAwICYmIGxpbmVbbGVuLTFdID09ICdcbicpOwotCWlmIChoYXNfdHJhaWxpbmdfbmV3bGluZSkKLQkJbGVuLS07Ci0JaGFzX3RyYWlsaW5nX2NhcnJpYWdlX3JldHVybiA9IChsZW4gPiAwICYmIGxpbmVbbGVuLTFdID09ICdccicpOwotCWlmIChoYXNfdHJhaWxpbmdfY2FycmlhZ2VfcmV0dXJuKQotCQlsZW4tLTsKLQotCWZwdXRzKHNldCwgZmlsZSk7Ci0JZndyaXRlKGxpbmUsIGxlbiwgMSwgZmlsZSk7Ci0JZnB1dHMocmVzZXQsIGZpbGUpOwotCWlmIChoYXNfdHJhaWxpbmdfY2FycmlhZ2VfcmV0dXJuKQotCQlmcHV0YygnXHInLCBmaWxlKTsKLQlpZiAoaGFzX3RyYWlsaW5nX25ld2xpbmUpCi0JCWZwdXRjKCdcbicsIGZpbGUpOwotfQotCi1zdGF0aWMgdm9pZCBlbWl0X2FkZF9saW5lKGNvbnN0IGNoYXIgKnJlc2V0LCBzdHJ1Y3QgZW1pdF9jYWxsYmFjayAqZWNiZGF0YSwgY29uc3QgY2hhciAqbGluZSwgaW50IGxlbikKLXsKLQljb25zdCBjaGFyICp3cyA9IGRpZmZfZ2V0X2NvbG9yKGVjYmRhdGEtPmNvbG9yX2RpZmYsIERJRkZfV0hJVEVTUEFDRSk7Ci0JY29uc3QgY2hhciAqc2V0ID0gZGlmZl9nZXRfY29sb3IoZWNiZGF0YS0+Y29sb3JfZGlmZiwgRElGRl9GSUxFX05FVyk7Ci0KLQlpZiAoISp3cykKLQkJZW1pdF9saW5lKGVjYmRhdGEtPmZpbGUsIHNldCwgcmVzZXQsIGxpbmUsIGxlbik7Ci0JZWxzZSB7Ci0JCS8qIEVtaXQganVzdCB0aGUgcHJlZml4LCB0aGVuIHRoZSByZXN0LiAqLwotCQllbWl0X2xpbmUoZWNiZGF0YS0+ZmlsZSwgc2V0LCByZXNldCwgbGluZSwgZWNiZGF0YS0+bnBhcmVudHMpOwotCQl3c19jaGVja19lbWl0KGxpbmUgKyBlY2JkYXRhLT5ucGFyZW50cywKLQkJCSAgICAgIGxlbiAtIGVjYmRhdGEtPm5wYXJlbnRzLCBlY2JkYXRhLT53c19ydWxlLAotCQkJICAgICAgZWNiZGF0YS0+ZmlsZSwgc2V0LCByZXNldCwgd3MpOwotCX0KLX0KLQogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2FuZV90cnVuY2F0ZV9saW5lKHN0cnVjdCBlbWl0X2NhbGxiYWNrICplY2IsIGNoYXIgKmxpbmUsIHVuc2lnbmVkIGxvbmcgbGVuKQogewogCWNvbnN0IGNoYXIgKmNwOwpAQCAtNjIwLDE1ICs3NzYsMzMgQEAKIAlyZXR1cm4gYWxsb3QgLSBsOwogfQogCitzdGF0aWMgdm9pZCBmaW5kX2xubyhjb25zdCBjaGFyICpsaW5lLCBzdHJ1Y3QgZW1pdF9jYWxsYmFjayAqZWNiZGF0YSkKK3sKKwljb25zdCBjaGFyICpwOworCWVjYmRhdGEtPmxub19pbl9wcmVpbWFnZSA9IDA7CisJZWNiZGF0YS0+bG5vX2luX3Bvc3RpbWFnZSA9IDA7CisJcCA9IHN0cmNocihsaW5lLCAnLScpOworCWlmICghcCkKKwkJcmV0dXJuOyAvKiBjYW5ub3QgaGFwcGVuICovCisJZWNiZGF0YS0+bG5vX2luX3ByZWltYWdlID0gc3RydG9sKHAgKyAxLCBOVUxMLCAxMCk7CisJcCA9IHN0cmNocihwLCAnKycpOworCWlmICghcCkKKwkJcmV0dXJuOyAvKiBjYW5ub3QgaGFwcGVuICovCisJZWNiZGF0YS0+bG5vX2luX3Bvc3RpbWFnZSA9IHN0cnRvbChwICsgMSwgTlVMTCwgMTApOworfQorCiBzdGF0aWMgdm9pZCBmbl9vdXRfY29uc3VtZSh2b2lkICpwcml2LCBjaGFyICpsaW5lLCB1bnNpZ25lZCBsb25nIGxlbikKIHsKLQlpbnQgaTsKLQlpbnQgY29sb3I7CiAJc3RydWN0IGVtaXRfY2FsbGJhY2sgKmVjYmRhdGEgPSBwcml2OwogCWNvbnN0IGNoYXIgKm1ldGEgPSBkaWZmX2dldF9jb2xvcihlY2JkYXRhLT5jb2xvcl9kaWZmLCBESUZGX01FVEFJTkZPKTsKIAljb25zdCBjaGFyICpwbGFpbiA9IGRpZmZfZ2V0X2NvbG9yKGVjYmRhdGEtPmNvbG9yX2RpZmYsIERJRkZfUExBSU4pOwogCWNvbnN0IGNoYXIgKnJlc2V0ID0gZGlmZl9nZXRfY29sb3IoZWNiZGF0YS0+Y29sb3JfZGlmZiwgRElGRl9SRVNFVCk7CiAKKwlpZiAoZWNiZGF0YS0+aGVhZGVyKSB7CisJCWZwcmludGYoZWNiZGF0YS0+ZmlsZSwgIiVzIiwgZWNiZGF0YS0+aGVhZGVyLT5idWYpOworCQlzdHJidWZfcmVzZXQoZWNiZGF0YS0+aGVhZGVyKTsKKwkJZWNiZGF0YS0+aGVhZGVyID0gTlVMTDsKKwl9CiAJKihlY2JkYXRhLT5mb3VuZF9jaGFuZ2VzcCkgPSAxOwogCiAJaWYgKGVjYmRhdGEtPmxhYmVsX3BhdGhbMF0pIHsKQEAgLTY1MCwzMSArODI0LDIyIEBACiAJCWxlbiA9IDE7CiAJfQogCi0JLyogVGhpcyBpcyBub3QgcmVhbGx5IG5lY2Vzc2FyeSBmb3Igbm93IGJlY2F1c2UKLQkgKiB0aGlzIGNvZGVwYXRoIG9ubHkgZGVhbHMgd2l0aCB0d28td2F5IGRpZmZzLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBsZW4gJiYgbGluZVtpXSA9PSAnQCc7IGkrKykKLQkJOwotCWlmICgyIDw9IGkgJiYgaSA8IGxlbiAmJiBsaW5lW2ldID09ICcgJykgewotCQllY2JkYXRhLT5ucGFyZW50cyA9IGkgLSAxOworCWlmIChsaW5lWzBdID09ICdAJykgeworCQlpZiAoZWNiZGF0YS0+ZGlmZl93b3JkcykKKwkJCWRpZmZfd29yZHNfZmx1c2goZWNiZGF0YSk7CiAJCWxlbiA9IHNhbmVfdHJ1bmNhdGVfbGluZShlY2JkYXRhLCBsaW5lLCBsZW4pOwotCQllbWl0X2xpbmUoZWNiZGF0YS0+ZmlsZSwKLQkJCSAgZGlmZl9nZXRfY29sb3IoZWNiZGF0YS0+Y29sb3JfZGlmZiwgRElGRl9GUkFHSU5GTyksCi0JCQkgIHJlc2V0LCBsaW5lLCBsZW4pOworCQlmaW5kX2xubyhsaW5lLCBlY2JkYXRhKTsKKwkJZW1pdF9odW5rX2hlYWRlcihlY2JkYXRhLCBsaW5lLCBsZW4pOwogCQlpZiAobGluZVtsZW4tMV0gIT0gJ1xuJykKIAkJCXB1dGMoJ1xuJywgZWNiZGF0YS0+ZmlsZSk7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAobGVuIDwgZWNiZGF0YS0+bnBhcmVudHMpIHsKKwlpZiAobGVuIDwgMSkgewogCQllbWl0X2xpbmUoZWNiZGF0YS0+ZmlsZSwgcmVzZXQsIHJlc2V0LCBsaW5lLCBsZW4pOwogCQlyZXR1cm47CiAJfQogCi0JY29sb3IgPSBESUZGX1BMQUlOOwotCWlmIChlY2JkYXRhLT5kaWZmX3dvcmRzICYmIGVjYmRhdGEtPm5wYXJlbnRzICE9IDEpCi0JCS8qIGZhbGwgYmFjayB0byBub3JtYWwgZGlmZiAqLwotCQlmcmVlX2RpZmZfd29yZHNfZGF0YShlY2JkYXRhKTsKIAlpZiAoZWNiZGF0YS0+ZGlmZl93b3JkcykgewogCQlpZiAobGluZVswXSA9PSAnLScpIHsKIAkJCWRpZmZfd29yZHNfYXBwZW5kKGxpbmUsIGxlbiwKQEAgLTY4NSwyOCArODUwLDI1IEBACiAJCQkJCSAgJmVjYmRhdGEtPmRpZmZfd29yZHMtPnBsdXMpOwogCQkJcmV0dXJuOwogCQl9Ci0JCWlmIChlY2JkYXRhLT5kaWZmX3dvcmRzLT5taW51cy50ZXh0LnNpemUgfHwKLQkJICAgIGVjYmRhdGEtPmRpZmZfd29yZHMtPnBsdXMudGV4dC5zaXplKQotCQkJZGlmZl93b3Jkc19zaG93KGVjYmRhdGEtPmRpZmZfd29yZHMpOworCQlkaWZmX3dvcmRzX2ZsdXNoKGVjYmRhdGEpOwogCQlsaW5lKys7CiAJCWxlbi0tOwogCQllbWl0X2xpbmUoZWNiZGF0YS0+ZmlsZSwgcGxhaW4sIHJlc2V0LCBsaW5lLCBsZW4pOwogCQlyZXR1cm47CiAJfQotCWZvciAoaSA9IDA7IGkgPCBlY2JkYXRhLT5ucGFyZW50cyAmJiBsZW47IGkrKykgewotCQlpZiAobGluZVtpXSA9PSAnLScpCi0JCQljb2xvciA9IERJRkZfRklMRV9PTEQ7Ci0JCWVsc2UgaWYgKGxpbmVbaV0gPT0gJysnKQotCQkJY29sb3IgPSBESUZGX0ZJTEVfTkVXOwotCX0KIAotCWlmIChjb2xvciAhPSBESUZGX0ZJTEVfTkVXKSB7Ci0JCWVtaXRfbGluZShlY2JkYXRhLT5maWxlLAotCQkJICBkaWZmX2dldF9jb2xvcihlY2JkYXRhLT5jb2xvcl9kaWZmLCBjb2xvciksCi0JCQkgIHJlc2V0LCBsaW5lLCBsZW4pOwotCQlyZXR1cm47CisJaWYgKGxpbmVbMF0gIT0gJysnKSB7CisJCWNvbnN0IGNoYXIgKmNvbG9yID0KKwkJCWRpZmZfZ2V0X2NvbG9yKGVjYmRhdGEtPmNvbG9yX2RpZmYsCisJCQkJICAgICAgIGxpbmVbMF0gPT0gJy0nID8gRElGRl9GSUxFX09MRCA6IERJRkZfUExBSU4pOworCQllY2JkYXRhLT5sbm9faW5fcHJlaW1hZ2UrKzsKKwkJaWYgKGxpbmVbMF0gPT0gJyAnKQorCQkJZWNiZGF0YS0+bG5vX2luX3Bvc3RpbWFnZSsrOworCQllbWl0X2xpbmUoZWNiZGF0YS0+ZmlsZSwgY29sb3IsIHJlc2V0LCBsaW5lLCBsZW4pOworCX0gZWxzZSB7CisJCWVjYmRhdGEtPmxub19pbl9wb3N0aW1hZ2UrKzsKKwkJZW1pdF9hZGRfbGluZShyZXNldCwgZWNiZGF0YSwgbGluZSArIDEsIGxlbiAtIDEpOwogCX0KLQllbWl0X2FkZF9saW5lKHJlc2V0LCBlY2JkYXRhLCBsaW5lLCBsZW4pOwogfQogCiBzdGF0aWMgY2hhciAqcHByaW50X3JlbmFtZShjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKQpAQCAtODM5LDEwICsxMDAxLDkgQEAKIH0KIAogc3RhdGljIHZvaWQgc2hvd19uYW1lKEZJTEUgKmZpbGUsCi0JCSAgICAgIGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwKLQkJICAgICAgY29uc3QgY2hhciAqcmVzZXQsIGNvbnN0IGNoYXIgKnNldCkKKwkJICAgICAgY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKQogewotCWZwcmludGYoZmlsZSwgIiAlcyVzJS0qcyVzIHwiLCBzZXQsIHByZWZpeCwgbGVuLCBuYW1lLCByZXNldCk7CisJZnByaW50ZihmaWxlLCAiICVzJS0qcyB8IiwgcHJlZml4LCBsZW4sIG5hbWUpOwogfQogCiBzdGF0aWMgdm9pZCBzaG93X2dyYXBoKEZJTEUgKmZpbGUsIGNoYXIgY2gsIGludCBjbnQsIGNvbnN0IGNoYXIgKnNldCwgY29uc3QgY2hhciAqcmVzZXQpCkBAIC05NTYsNyArMTExNyw3IEBACiAJCX0KIAogCQlpZiAoZGF0YS0+ZmlsZXNbaV0tPmlzX2JpbmFyeSkgewotCQkJc2hvd19uYW1lKG9wdGlvbnMtPmZpbGUsIHByZWZpeCwgbmFtZSwgbGVuLCByZXNldCwgc2V0KTsKKwkJCXNob3dfbmFtZShvcHRpb25zLT5maWxlLCBwcmVmaXgsIG5hbWUsIGxlbik7CiAJCQlmcHJpbnRmKG9wdGlvbnMtPmZpbGUsICIgIEJpbiAiKTsKIAkJCWZwcmludGYob3B0aW9ucy0+ZmlsZSwgIiVzJWQlcyIsIGRlbF9jLCBkZWxldGVkLCByZXNldCk7CiAJCQlmcHJpbnRmKG9wdGlvbnMtPmZpbGUsICIgLT4gIik7CkBAIC05NjYsNyArMTEyNyw3IEBACiAJCQljb250aW51ZTsKIAkJfQogCQllbHNlIGlmIChkYXRhLT5maWxlc1tpXS0+aXNfdW5tZXJnZWQpIHsKLQkJCXNob3dfbmFtZShvcHRpb25zLT5maWxlLCBwcmVmaXgsIG5hbWUsIGxlbiwgcmVzZXQsIHNldCk7CisJCQlzaG93X25hbWUob3B0aW9ucy0+ZmlsZSwgcHJlZml4LCBuYW1lLCBsZW4pOwogCQkJZnByaW50ZihvcHRpb25zLT5maWxlLCAiICBVbm1lcmdlZFxuIik7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtOTg4LDcgKzExNDksNyBAQAogCQkJYWRkID0gc2NhbGVfbGluZWFyKGFkZCwgd2lkdGgsIG1heF9jaGFuZ2UpOwogCQkJZGVsID0gc2NhbGVfbGluZWFyKGRlbCwgd2lkdGgsIG1heF9jaGFuZ2UpOwogCQl9Ci0JCXNob3dfbmFtZShvcHRpb25zLT5maWxlLCBwcmVmaXgsIG5hbWUsIGxlbiwgcmVzZXQsIHNldCk7CisJCXNob3dfbmFtZShvcHRpb25zLT5maWxlLCBwcmVmaXgsIG5hbWUsIGxlbik7CiAJCWZwcmludGYob3B0aW9ucy0+ZmlsZSwgIiU1ZCVzIiwgYWRkZWQgKyBkZWxldGVkLAogCQkJCWFkZGVkICsgZGVsZXRlZCA/ICIgIiA6ICIiKTsKIAkJc2hvd19ncmFwaChvcHRpb25zLT5maWxlLCAnKycsIGFkZCwgYWRkX2MsIHJlc2V0KTsKQEAgLTk5NiwxMSArMTE1NywxMSBAQAogCQlmcHJpbnRmKG9wdGlvbnMtPmZpbGUsICJcbiIpOwogCX0KIAlmcHJpbnRmKG9wdGlvbnMtPmZpbGUsCi0JICAgICAgICIlcyAlZCBmaWxlcyBjaGFuZ2VkLCAlZCBpbnNlcnRpb25zKCspLCAlZCBkZWxldGlvbnMoLSklc1xuIiwKLQkgICAgICAgc2V0LCB0b3RhbF9maWxlcywgYWRkcywgZGVscywgcmVzZXQpOworCSAgICAgICAiICVkIGZpbGVzIGNoYW5nZWQsICVkIGluc2VydGlvbnMoKyksICVkIGRlbGV0aW9ucygtKVxuIiwKKwkgICAgICAgdG90YWxfZmlsZXMsIGFkZHMsIGRlbHMpOwogfQogCi1zdGF0aWMgdm9pZCBzaG93X3Nob3J0c3RhdHMoc3RydWN0IGRpZmZzdGF0X3QqIGRhdGEsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMpCitzdGF0aWMgdm9pZCBzaG93X3Nob3J0c3RhdHMoc3RydWN0IGRpZmZzdGF0X3QgKmRhdGEsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMpCiB7CiAJaW50IGksIGFkZHMgPSAwLCBkZWxzID0gMCwgdG90YWxfZmlsZXMgPSBkYXRhLT5ucjsKIApAQCAtMTIxMiw3ICsxMzczLDYgQEAKIAlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvOwogCXVuc2lnbmVkIHdzX3J1bGU7CiAJdW5zaWduZWQgc3RhdHVzOwotCWludCB0cmFpbGluZ19ibGFua3Nfc3RhcnQ7CiB9OwogCiBzdGF0aWMgaW50IGlzX2NvbmZsaWN0X21hcmtlcihjb25zdCBjaGFyICpsaW5lLCB1bnNpZ25lZCBsb25nIGxlbikKQEAgLTEyNTYsMTAgKzE0MTYsNiBAQAogCWlmIChsaW5lWzBdID09ICcrJykgewogCQl1bnNpZ25lZCBiYWQ7CiAJCWRhdGEtPmxpbmVubysrOwotCQlpZiAoIXdzX2JsYW5rX2xpbmUobGluZSArIDEsIGxlbiAtIDEsIGRhdGEtPndzX3J1bGUpKQotCQkJZGF0YS0+dHJhaWxpbmdfYmxhbmtzX3N0YXJ0ID0gMDsKLQkJZWxzZSBpZiAoIWRhdGEtPnRyYWlsaW5nX2JsYW5rc19zdGFydCkKLQkJCWRhdGEtPnRyYWlsaW5nX2JsYW5rc19zdGFydCA9IGRhdGEtPmxpbmVubzsKIAkJaWYgKGlzX2NvbmZsaWN0X21hcmtlcihsaW5lICsgMSwgbGVuIC0gMSkpIHsKIAkJCWRhdGEtPnN0YXR1cyB8PSAxOwogCQkJZnByaW50ZihkYXRhLT5vLT5maWxlLApAQCAtMTI3OSwxNCArMTQzNSwxMiBAQAogCQkJICAgICAgZGF0YS0+by0+ZmlsZSwgc2V0LCByZXNldCwgd3MpOwogCX0gZWxzZSBpZiAobGluZVswXSA9PSAnICcpIHsKIAkJZGF0YS0+bGluZW5vKys7Ci0JCWRhdGEtPnRyYWlsaW5nX2JsYW5rc19zdGFydCA9IDA7CiAJfSBlbHNlIGlmIChsaW5lWzBdID09ICdAJykgewogCQljaGFyICpwbHVzID0gc3RyY2hyKGxpbmUsICcrJyk7CiAJCWlmIChwbHVzKQogCQkJZGF0YS0+bGluZW5vID0gc3RydG9sKHBsdXMsIE5VTEwsIDEwKSAtIDE7CiAJCWVsc2UKIAkJCWRpZSgiaW52YWxpZCBkaWZmIik7Ci0JCWRhdGEtPnRyYWlsaW5nX2JsYW5rc19zdGFydCA9IDA7CiAJfQogfQogCkBAIC0xNDUzLDYgKzE2MDcsMTggQEAKIAljb25zdCBjaGFyICpyZXNldCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX1JFU0VUKTsKIAljb25zdCBjaGFyICphX3ByZWZpeCwgKmJfcHJlZml4OwogCWNvbnN0IGNoYXIgKnRleHRjb252X29uZSA9IE5VTEwsICp0ZXh0Y29udl90d28gPSBOVUxMOworCXN0cnVjdCBzdHJidWYgaGVhZGVyID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoRElGRl9PUFRfVFNUKG8sIFNVQk1PRFVMRV9MT0cpICYmCisJCQkoIW9uZS0+bW9kZSB8fCBTX0lTR0lUTElOSyhvbmUtPm1vZGUpKSAmJgorCQkJKCF0d28tPm1vZGUgfHwgU19JU0dJVExJTksodHdvLT5tb2RlKSkpIHsKKwkJY29uc3QgY2hhciAqZGVsID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfRklMRV9PTEQpOworCQljb25zdCBjaGFyICphZGQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9GSUxFX05FVyk7CisJCXNob3dfc3VibW9kdWxlX3N1bW1hcnkoby0+ZmlsZSwgb25lID8gb25lLT5wYXRoIDogdHdvLT5wYXRoLAorCQkJCW9uZS0+c2hhMSwgdHdvLT5zaGExLCB0d28tPmRpcnR5X3N1Ym1vZHVsZSwKKwkJCQlkZWwsIGFkZCwgcmVzZXQpOworCQlyZXR1cm47CisJfQogCiAJaWYgKERJRkZfT1BUX1RTVChvLCBBTExPV19URVhUQ09OVikpIHsKIAkJdGV4dGNvbnZfb25lID0gZ2V0X3RleHRjb252KG9uZSk7CkBAIC0xNDc2LDI1ICsxNjQyLDI2IEBACiAJYl90d28gPSBxdW90ZV90d28oYl9wcmVmaXgsIG5hbWVfYiArICgqbmFtZV9iID09ICcvJykpOwogCWxibFswXSA9IERJRkZfRklMRV9WQUxJRChvbmUpID8gYV9vbmUgOiAiL2Rldi9udWxsIjsKIAlsYmxbMV0gPSBESUZGX0ZJTEVfVkFMSUQodHdvKSA/IGJfdHdvIDogIi9kZXYvbnVsbCI7Ci0JZnByaW50ZihvLT5maWxlLCAiJXNkaWZmIC0tZ2l0ICVzICVzJXNcbiIsIHNldCwgYV9vbmUsIGJfdHdvLCByZXNldCk7CisJc3RyYnVmX2FkZGYoJmhlYWRlciwgIiVzZGlmZiAtLWdpdCAlcyAlcyVzXG4iLCBzZXQsIGFfb25lLCBiX3R3bywgcmVzZXQpOwogCWlmIChsYmxbMF1bMF0gPT0gJy8nKSB7CiAJCS8qIC9kZXYvbnVsbCAqLwotCQlmcHJpbnRmKG8tPmZpbGUsICIlc25ldyBmaWxlIG1vZGUgJTA2byVzXG4iLCBzZXQsIHR3by0+bW9kZSwgcmVzZXQpOworCQlzdHJidWZfYWRkZigmaGVhZGVyLCAiJXNuZXcgZmlsZSBtb2RlICUwNm8lc1xuIiwgc2V0LCB0d28tPm1vZGUsIHJlc2V0KTsKIAkJaWYgKHhmcm1fbXNnICYmIHhmcm1fbXNnWzBdKQotCQkJZnByaW50ZihvLT5maWxlLCAiJXMlcyVzXG4iLCBzZXQsIHhmcm1fbXNnLCByZXNldCk7CisJCQlzdHJidWZfYWRkZigmaGVhZGVyLCAiJXMlcyVzXG4iLCBzZXQsIHhmcm1fbXNnLCByZXNldCk7CiAJfQogCWVsc2UgaWYgKGxibFsxXVswXSA9PSAnLycpIHsKLQkJZnByaW50ZihvLT5maWxlLCAiJXNkZWxldGVkIGZpbGUgbW9kZSAlMDZvJXNcbiIsIHNldCwgb25lLT5tb2RlLCByZXNldCk7CisJCXN0cmJ1Zl9hZGRmKCZoZWFkZXIsICIlc2RlbGV0ZWQgZmlsZSBtb2RlICUwNm8lc1xuIiwgc2V0LCBvbmUtPm1vZGUsIHJlc2V0KTsKIAkJaWYgKHhmcm1fbXNnICYmIHhmcm1fbXNnWzBdKQotCQkJZnByaW50ZihvLT5maWxlLCAiJXMlcyVzXG4iLCBzZXQsIHhmcm1fbXNnLCByZXNldCk7CisJCQlzdHJidWZfYWRkZigmaGVhZGVyLCAiJXMlcyVzXG4iLCBzZXQsIHhmcm1fbXNnLCByZXNldCk7CiAJfQogCWVsc2UgewogCQlpZiAob25lLT5tb2RlICE9IHR3by0+bW9kZSkgewotCQkJZnByaW50ZihvLT5maWxlLCAiJXNvbGQgbW9kZSAlMDZvJXNcbiIsIHNldCwgb25lLT5tb2RlLCByZXNldCk7Ci0JCQlmcHJpbnRmKG8tPmZpbGUsICIlc25ldyBtb2RlICUwNm8lc1xuIiwgc2V0LCB0d28tPm1vZGUsIHJlc2V0KTsKKwkJCXN0cmJ1Zl9hZGRmKCZoZWFkZXIsICIlc29sZCBtb2RlICUwNm8lc1xuIiwgc2V0LCBvbmUtPm1vZGUsIHJlc2V0KTsKKwkJCXN0cmJ1Zl9hZGRmKCZoZWFkZXIsICIlc25ldyBtb2RlICUwNm8lc1xuIiwgc2V0LCB0d28tPm1vZGUsIHJlc2V0KTsKIAkJfQogCQlpZiAoeGZybV9tc2cgJiYgeGZybV9tc2dbMF0pCi0JCQlmcHJpbnRmKG8tPmZpbGUsICIlcyVzJXNcbiIsIHNldCwgeGZybV9tc2csIHJlc2V0KTsKKwkJCXN0cmJ1Zl9hZGRmKCZoZWFkZXIsICIlcyVzJXNcbiIsIHNldCwgeGZybV9tc2csIHJlc2V0KTsKKwogCQkvKgogCQkgKiB3ZSBkbyBub3QgcnVuIGRpZmYgYmV0d2VlbiBkaWZmZXJlbnQga2luZAogCQkgKiBvZiBvYmplY3RzLgpAQCAtMTUwNCw2ICsxNjcxLDggQEAKIAkJaWYgKGNvbXBsZXRlX3Jld3JpdGUgJiYKIAkJICAgICh0ZXh0Y29udl9vbmUgfHwgIWRpZmZfZmlsZXNwZWNfaXNfYmluYXJ5KG9uZSkpICYmCiAJCSAgICAodGV4dGNvbnZfdHdvIHx8ICFkaWZmX2ZpbGVzcGVjX2lzX2JpbmFyeSh0d28pKSkgeworCQkJZnByaW50ZihvLT5maWxlLCAiJXMiLCBoZWFkZXIuYnVmKTsKKwkJCXN0cmJ1Zl9yZXNldCgmaGVhZGVyKTsKIAkJCWVtaXRfcmV3cml0ZV9kaWZmKG5hbWVfYSwgbmFtZV9iLCBvbmUsIHR3bywKIAkJCQkJCXRleHRjb252X29uZSwgdGV4dGNvbnZfdHdvLCBvKTsKIAkJCW8tPmZvdW5kX2NoYW5nZXMgPSAxOwpAQCAtMTUyMSw2ICsxNjkwLDggQEAKIAkJaWYgKG1mMS5zaXplID09IG1mMi5zaXplICYmCiAJCSAgICAhbWVtY21wKG1mMS5wdHIsIG1mMi5wdHIsIG1mMS5zaXplKSkKIAkJCWdvdG8gZnJlZV9hYl9hbmRfcmV0dXJuOworCQlmcHJpbnRmKG8tPmZpbGUsICIlcyIsIGhlYWRlci5idWYpOworCQlzdHJidWZfcmVzZXQoJmhlYWRlcik7CiAJCWlmIChESUZGX09QVF9UU1QobywgQklOQVJZKSkKIAkJCWVtaXRfYmluYXJ5X2RpZmYoby0+ZmlsZSwgJm1mMSwgJm1mMik7CiAJCWVsc2UKQEAgLTE1MzcsNiArMTcwOCwxMSBAQAogCQlzdHJ1Y3QgZW1pdF9jYWxsYmFjayBlY2JkYXRhOwogCQljb25zdCBzdHJ1Y3QgdXNlcmRpZmZfZnVuY25hbWUgKnBlOwogCisJCWlmICghRElGRl9YRExfVFNUKG8sIFdISVRFU1BBQ0VfRkxBR1MpKSB7CisJCQlmcHJpbnRmKG8tPmZpbGUsICIlcyIsIGhlYWRlci5idWYpOworCQkJc3RyYnVmX3Jlc2V0KCZoZWFkZXIpOworCQl9CisKIAkJaWYgKHRleHRjb252X29uZSkgewogCQkJc2l6ZV90IHNpemU7CiAJCQltZjEucHRyID0gcnVuX3RleHRjb252KHRleHRjb252X29uZSwgb25lLCAmc2l6ZSk7CkBAIC0xNTYzLDcgKzE3MzksMTAgQEAKIAkJZWNiZGF0YS5jb2xvcl9kaWZmID0gRElGRl9PUFRfVFNUKG8sIENPTE9SX0RJRkYpOwogCQllY2JkYXRhLmZvdW5kX2NoYW5nZXNwID0gJm8tPmZvdW5kX2NoYW5nZXM7CiAJCWVjYmRhdGEud3NfcnVsZSA9IHdoaXRlc3BhY2VfcnVsZShuYW1lX2IgPyBuYW1lX2IgOiBuYW1lX2EpOworCQlpZiAoZWNiZGF0YS53c19ydWxlICYgV1NfQkxBTktfQVRfRU9GKQorCQkJY2hlY2tfYmxhbmtfYXRfZW9mKCZtZjEsICZtZjIsICZlY2JkYXRhKTsKIAkJZWNiZGF0YS5maWxlID0gby0+ZmlsZTsKKwkJZWNiZGF0YS5oZWFkZXIgPSBoZWFkZXIubGVuID8gJmhlYWRlciA6IE5VTEw7CiAJCXhwcC5mbGFncyA9IFhERl9ORUVEX01JTklNQUwgfCBvLT54ZGxfb3B0czsKIAkJeGVjZmcuY3R4bGVuID0gby0+Y29udGV4dDsKIAkJeGVjZmcuaW50ZXJodW5rY3R4bGVuID0gby0+aW50ZXJodW5rY29udGV4dDsKQEAgLTE2MDQsOSArMTc4MywxMSBAQAogCQkJZnJlZShtZjEucHRyKTsKIAkJaWYgKHRleHRjb252X3R3bykKIAkJCWZyZWUobWYyLnB0cik7CisJCXhkaWZmX2NsZWFyX2ZpbmRfZnVuYygmeGVjZmcpOwogCX0KIAogIGZyZWVfYWJfYW5kX3JldHVybjoKKwlzdHJidWZfcmVsZWFzZSgmaGVhZGVyKTsKIAlkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YShvbmUpOwogCWRpZmZfZnJlZV9maWxlc3BlY19kYXRhKHR3byk7CiAJZnJlZShhX29uZSk7CkBAIC0xNzA0LDExICsxODg1LDIyIEBACiAJCXhkaV9kaWZmX291dGYoJm1mMSwgJm1mMiwgY2hlY2tkaWZmX2NvbnN1bWUsICZkYXRhLAogCQkJICAgICAgJnhwcCwgJnhlY2ZnLCAmZWNiKTsKIAotCQlpZiAoKGRhdGEud3NfcnVsZSAmIFdTX1RSQUlMSU5HX1NQQUNFKSAmJgotCQkgICAgZGF0YS50cmFpbGluZ19ibGFua3Nfc3RhcnQpIHsKLQkJCWZwcmludGYoby0+ZmlsZSwgIiVzOiVkOiBlbmRzIHdpdGggYmxhbmsgbGluZXMuXG4iLAotCQkJCWRhdGEuZmlsZW5hbWUsIGRhdGEudHJhaWxpbmdfYmxhbmtzX3N0YXJ0KTsKLQkJCWRhdGEuc3RhdHVzID0gMTsgLyogcmVwb3J0IGVycm9ycyAqLworCQlpZiAoZGF0YS53c19ydWxlICYgV1NfQkxBTktfQVRfRU9GKSB7CisJCQlzdHJ1Y3QgZW1pdF9jYWxsYmFjayBlY2JkYXRhOworCQkJaW50IGJsYW5rX2F0X2VvZjsKKworCQkJZWNiZGF0YS53c19ydWxlID0gZGF0YS53c19ydWxlOworCQkJY2hlY2tfYmxhbmtfYXRfZW9mKCZtZjEsICZtZjIsICZlY2JkYXRhKTsKKwkJCWJsYW5rX2F0X2VvZiA9IGVjYmRhdGEuYmxhbmtfYXRfZW9mX2luX3ByZWltYWdlOworCisJCQlpZiAoYmxhbmtfYXRfZW9mKSB7CisJCQkJc3RhdGljIGNoYXIgKmVycjsKKwkJCQlpZiAoIWVycikKKwkJCQkJZXJyID0gd2hpdGVzcGFjZV9lcnJvcl9zdHJpbmcoV1NfQkxBTktfQVRfRU9GKTsKKwkJCQlmcHJpbnRmKG8tPmZpbGUsICIlczolZDogJXMuXG4iLAorCQkJCQlkYXRhLmZpbGVuYW1lLCBibGFua19hdF9lb2YsIGVycik7CisJCQkJZGF0YS5zdGF0dXMgPSAxOyAvKiByZXBvcnQgZXJyb3JzICovCisJCQl9CiAJCX0KIAl9CiAgZnJlZV9hbmRfcmV0dXJuOgpAQCAtMTgwNSw3ICsxOTk3LDcgQEAKIAkgKiBJZiBjZSBpcyBtYXJrZWQgYXMgImFzc3VtZSB1bmNoYW5nZWQiLCB0aGVyZSBpcyBubwogCSAqIGd1YXJhbnRlZSB0aGF0IHdvcmsgdHJlZSBtYXRjaGVzIHdoYXQgd2UgYXJlIGxvb2tpbmcgZm9yLgogCSAqLwotCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9WQUxJRCkKKwlpZiAoKGNlLT5jZV9mbGFncyAmIENFX1ZBTElEKSB8fCBjZV9za2lwX3dvcmt0cmVlKGNlKSkKIAkJcmV0dXJuIDA7CiAKIAkvKgpAQCAtMTgzNyw5ICsyMDI5LDE0IEBACiBzdGF0aWMgaW50IGRpZmZfcG9wdWxhdGVfZ2l0bGluayhzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqcywgaW50IHNpemVfb25seSkKIHsKIAlpbnQgbGVuOwotCWNoYXIgKmRhdGEgPSB4bWFsbG9jKDEwMCk7CisJY2hhciAqZGF0YSA9IHhtYWxsb2MoMTAwKSwgKmRpcnR5ID0gIiI7CisKKwkvKiBBcmUgd2UgbG9va2luZyBhdCB0aGUgd29yayB0cmVlPyAqLworCWlmICghcy0+c2hhMV92YWxpZCAmJiBzLT5kaXJ0eV9zdWJtb2R1bGUpCisJCWRpcnR5ID0gIi1kaXJ0eSI7CisKIAlsZW4gPSBzbnByaW50ZihkYXRhLCAxMDAsCi0JCSJTdWJwcm9qZWN0IGNvbW1pdCAlc1xuIiwgc2hhMV90b19oZXgocy0+c2hhMSkpOworCQkgICAgICAgIlN1YnByb2plY3QgY29tbWl0ICVzJXNcbiIsIHNoYTFfdG9faGV4KHMtPnNoYTEpLCBkaXJ0eSk7CiAJcy0+ZGF0YSA9IGRhdGE7CiAJcy0+c2l6ZSA9IGxlbjsKIAlzLT5zaG91bGRfZnJlZSA9IDE7CkBAIC0xOTY1LDIzICsyMTYyLDMzIEBACiB7CiAJaW50IGZkOwogCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiB0ZW1wbGF0ZSA9IFNUUkJVRl9JTklUOworCWNoYXIgKnBhdGhfZHVwID0geHN0cmR1cChwYXRoKTsKKwljb25zdCBjaGFyICpiYXNlID0gYmFzZW5hbWUocGF0aF9kdXApOwogCi0JZmQgPSBnaXRfbWtzdGVtcCh0ZW1wLT50bXBfcGF0aCwgUEFUSF9NQVgsICIuZGlmZl9YWFhYWFgiKTsKKwkvKiBHZW5lcmF0ZSAiWFhYWFhYX2Jhc2VuYW1lLmV4dCIgKi8KKwlzdHJidWZfYWRkc3RyKCZ0ZW1wbGF0ZSwgIlhYWFhYWF8iKTsKKwlzdHJidWZfYWRkc3RyKCZ0ZW1wbGF0ZSwgYmFzZSk7CisKKwlmZCA9IGdpdF9ta3N0ZW1wcyh0ZW1wLT50bXBfcGF0aCwgUEFUSF9NQVgsIHRlbXBsYXRlLmJ1ZiwKKwkJCXN0cmxlbihiYXNlKSArIDEpOwogCWlmIChmZCA8IDApCi0JCWRpZSgidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wLWZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gY3JlYXRlIHRlbXAtZmlsZSIpOwogCWlmIChjb252ZXJ0X3RvX3dvcmtpbmdfdHJlZShwYXRoLAogCQkJKGNvbnN0IGNoYXIgKilibG9iLCAoc2l6ZV90KXNpemUsICZidWYpKSB7CiAJCWJsb2IgPSBidWYuYnVmOwogCQlzaXplID0gYnVmLmxlbjsKIAl9CiAJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGJsb2IsIHNpemUpICE9IHNpemUpCi0JCWRpZSgidW5hYmxlIHRvIHdyaXRlIHRlbXAtZmlsZSIpOworCQlkaWVfZXJybm8oInVuYWJsZSB0byB3cml0ZSB0ZW1wLWZpbGUiKTsKIAljbG9zZShmZCk7CiAJdGVtcC0+bmFtZSA9IHRlbXAtPnRtcF9wYXRoOwogCXN0cmNweSh0ZW1wLT5oZXgsIHNoYTFfdG9faGV4KHNoYTEpKTsKIAl0ZW1wLT5oZXhbNDBdID0gMDsKIAlzcHJpbnRmKHRlbXAtPm1vZGUsICIlMDZvIiwgbW9kZSk7CiAJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnRlbXBsYXRlKTsKKwlmcmVlKHBhdGhfZHVwKTsKIH0KIAogc3RhdGljIHN0cnVjdCBkaWZmX3RlbXBmaWxlICpwcmVwYXJlX3RlbXBfZmlsZShjb25zdCBjaGFyICpuYW1lLApAQCAtMjAxMiwyMSArMjIxOSwxOCBAQAogCQlpZiAobHN0YXQobmFtZSwgJnN0KSA8IDApIHsKIAkJCWlmIChlcnJubyA9PSBFTk9FTlQpCiAJCQkJZ290byBub3RfYV92YWxpZF9maWxlOwotCQkJZGllKCJzdGF0KCVzKTogJXMiLCBuYW1lLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJzdGF0KCVzKSIsIG5hbWUpOwogCQl9CiAJCWlmIChTX0lTTE5LKHN0LnN0X21vZGUpKSB7Ci0JCQlpbnQgcmV0OwotCQkJY2hhciBidWZbUEFUSF9NQVggKyAxXTsgLyogb3VnaHQgdG8gYmUgU1lNTElOS19NQVggKi8KLQkJCXJldCA9IHJlYWRsaW5rKG5hbWUsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCQkJaWYgKHJldCA8IDApCi0JCQkJZGllKCJyZWFkbGluayglcykiLCBuYW1lKTsKLQkJCWlmIChyZXQgPT0gc2l6ZW9mKGJ1ZikpCi0JCQkJZGllKCJzeW1saW5rIHRvbyBsb25nOiAlcyIsIG5hbWUpOwotCQkJcHJlcF90ZW1wX2Jsb2IobmFtZSwgdGVtcCwgYnVmLCByZXQsCisJCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJCQlpZiAoc3RyYnVmX3JlYWRsaW5rKCZzYiwgbmFtZSwgc3Quc3Rfc2l6ZSkgPCAwKQorCQkJCWRpZV9lcnJubygicmVhZGxpbmsoJXMpIiwgbmFtZSk7CisJCQlwcmVwX3RlbXBfYmxvYihuYW1lLCB0ZW1wLCBzYi5idWYsIHNiLmxlbiwKIAkJCQkgICAgICAgKG9uZS0+c2hhMV92YWxpZCA/CiAJCQkJCW9uZS0+c2hhMSA6IG51bGxfc2hhMSksCiAJCQkJICAgICAgIChvbmUtPnNoYTFfdmFsaWQgPwogCQkJCQlvbmUtPm1vZGUgOiBTX0lGTE5LKSk7CisJCQlzdHJidWZfcmVsZWFzZSgmc2IpOwogCQl9CiAJCWVsc2UgewogCQkJLyogd2UgY2FuIGJvcnJvdyBmcm9tIHRoZSBmaWxlIGluIHRoZSB3b3JrIHRyZWUgKi8KQEAgLTIwOTUsNyArMjI5OSw3IEBACiAJfQogCSphcmcgPSBOVUxMOwogCWZmbHVzaChOVUxMKTsKLQlyZXR2YWwgPSBydW5fY29tbWFuZF92X29wdChzcGF3bl9hcmcsIDApOworCXJldHZhbCA9IHJ1bl9jb21tYW5kX3Zfb3B0KHNwYXduX2FyZywgUlVOX1VTSU5HX1NIRUxMKTsKIAlyZW1vdmVfdGVtcGZpbGUoKTsKIAlpZiAocmV0dmFsKSB7CiAJCWZwcmludGYoc3RkZXJyLCAiZXh0ZXJuYWwgZGlmZiBkaWVkLCBzdG9wcGluZyBhdCAlcy5cbiIsIG5hbWUpOwpAQCAtMjIxMyw3ICsyNDE3LDcgQEAKIAkJCQlyZXR1cm47CiAJCQl9CiAJCQlpZiAobHN0YXQob25lLT5wYXRoLCAmc3QpIDwgMCkKLQkJCQlkaWUoInN0YXQgJXMiLCBvbmUtPnBhdGgpOworCQkJCWRpZV9lcnJubygic3RhdCAnJXMnIiwgb25lLT5wYXRoKTsKIAkJCWlmIChpbmRleF9wYXRoKG9uZS0+c2hhMSwgb25lLT5wYXRoLCAmc3QsIDApKQogCQkJCWRpZSgiY2Fubm90IGhhc2ggJXMiLCBvbmUtPnBhdGgpOwogCQl9CkBAIC0yMzcxLDYgKzI1NzUsMjAgQEAKIAlpZiAoY291bnQgPiAxKQogCQlkaWUoIi0tbmFtZS1vbmx5LCAtLW5hbWUtc3RhdHVzLCAtLWNoZWNrIGFuZCAtcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIik7CiAKKwkvKgorCSAqIE1vc3Qgb2YgdGhlIHRpbWUgd2UgY2FuIHNheSAidGhlcmUgYXJlIGNoYW5nZXMiCisJICogb25seSBieSBjaGVja2luZyBpZiB0aGVyZSBhcmUgY2hhbmdlZCBwYXRocywgYnV0CisJICogLS1pZ25vcmUtd2hpdGVzcGFjZSogb3B0aW9ucyBmb3JjZSB1cyB0byBsb29rCisJICogaW5zaWRlIGNvbnRlbnRzLgorCSAqLworCisJaWYgKERJRkZfWERMX1RTVChvcHRpb25zLCBJR05PUkVfV0hJVEVTUEFDRSkgfHwKKwkgICAgRElGRl9YRExfVFNUKG9wdGlvbnMsIElHTk9SRV9XSElURVNQQUNFX0NIQU5HRSkgfHwKKwkgICAgRElGRl9YRExfVFNUKG9wdGlvbnMsIElHTk9SRV9XSElURVNQQUNFX0FUX0VPTCkpCisJCURJRkZfT1BUX1NFVChvcHRpb25zLCBESUZGX0ZST01fQ09OVEVOVFMpOworCWVsc2UKKwkJRElGRl9PUFRfQ0xSKG9wdGlvbnMsIERJRkZfRlJPTV9DT05URU5UUyk7CisKIAlpZiAoRElGRl9PUFRfVFNUKG9wdGlvbnMsIEZJTkRfQ09QSUVTX0hBUkRFUikpCiAJCW9wdGlvbnMtPmRldGVjdF9yZW5hbWUgPSBESUZGX0RFVEVDVF9DT1BZOwogCkBAIC0yNDMxLDcgKzI2NDksNyBAQAogCSAqIHRvIGhhdmUgZm91bmQuICBJdCBkb2VzIG5vdCBtYWtlIHNlbnNlIG5vdCB0byByZXR1cm4gd2l0aAogCSAqIGV4aXQgY29kZSBpbiBzdWNoIGEgY2FzZSBlaXRoZXIuCiAJICovCi0JaWYgKERJRkZfT1BUX1RTVChvcHRpb25zLCBRVUlFVCkpIHsKKwlpZiAoRElGRl9PUFRfVFNUKG9wdGlvbnMsIFFVSUNLKSkgewogCQlvcHRpb25zLT5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfTk9fT1VUUFVUOwogCQlESUZGX09QVF9TRVQob3B0aW9ucywgRVhJVF9XSVRIX1NUQVRVUyk7CiAJfQpAQCAtMjYyMiw3ICsyODQwLDcgQEAKIAllbHNlIGlmICghc3RyY21wKGFyZywgIi0tZXhpdC1jb2RlIikpCiAJCURJRkZfT1BUX1NFVChvcHRpb25zLCBFWElUX1dJVEhfU1RBVFVTKTsKIAllbHNlIGlmICghc3RyY21wKGFyZywgIi0tcXVpZXQiKSkKLQkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIFFVSUVUKTsKKwkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIFFVSUNLKTsKIAllbHNlIGlmICghc3RyY21wKGFyZywgIi0tZXh0LWRpZmYiKSkKIAkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIEFMTE9XX0VYVEVSTkFMKTsKIAllbHNlIGlmICghc3RyY21wKGFyZywgIi0tbm8tZXh0LWRpZmYiKSkKQEAgLTI2MzMsNiArMjg1MSwxMiBAQAogCQlESUZGX09QVF9DTFIob3B0aW9ucywgQUxMT1dfVEVYVENPTlYpOwogCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1pZ25vcmUtc3VibW9kdWxlcyIpKQogCQlESUZGX09QVF9TRVQob3B0aW9ucywgSUdOT1JFX1NVQk1PRFVMRVMpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1zdWJtb2R1bGUiKSkKKwkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIFNVQk1PRFVMRV9MT0cpOworCWVsc2UgaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1zdWJtb2R1bGU9IikpIHsKKwkJaWYgKCFzdHJjbXAoYXJnICsgMTIsICJsb2ciKSkKKwkJCURJRkZfT1BUX1NFVChvcHRpb25zLCBTVUJNT0RVTEVfTE9HKTsKKwl9CiAKIAkvKiBtaXNjIG9wdGlvbnMgKi8KIAllbHNlIGlmICghc3RyY21wKGFyZywgIi16IikpCkBAIC0yNjY5LDYgKzI4OTMsOCBAQAogCQk7CiAJZWxzZSBpZiAoIXByZWZpeGNtcChhcmcsICItLW91dHB1dD0iKSkgewogCQlvcHRpb25zLT5maWxlID0gZm9wZW4oYXJnICsgc3RybGVuKCItLW91dHB1dD0iKSwgInciKTsKKwkJaWYgKCFvcHRpb25zLT5maWxlKQorCQkJZGllX2Vycm5vKCJDb3VsZCBub3Qgb3BlbiAnJXMnIiwgYXJnICsgc3RybGVuKCItLW91dHB1dD0iKSk7CiAJCW9wdGlvbnMtPmNsb3NlX2ZpbGUgPSAxOwogCX0gZWxzZQogCQlyZXR1cm4gMDsKQEAgLTI2ODQsNyArMjkxMCw3IEBACiAJbnVtID0gMDsKIAlzY2FsZSA9IDE7CiAJZG90ID0gMDsKLQlmb3IoOzspIHsKKwlmb3IgKDs7KSB7CiAJCWNoID0gKmNwOwogCQlpZiAoICFkb3QgJiYgY2ggPT0gJy4nICkgewogCQkJc2NhbGUgPSAxOwpAQCAtMzI5Niw2ICszNTIyLDI5IEBACiAJCXNlcGFyYXRvcisrOwogCX0KIAorCWlmIChvdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfTk9fT1VUUFVUICYmCisJICAgIERJRkZfT1BUX1RTVChvcHRpb25zLCBFWElUX1dJVEhfU1RBVFVTKSAmJgorCSAgICBESUZGX09QVF9UU1Qob3B0aW9ucywgRElGRl9GUk9NX0NPTlRFTlRTKSkgeworCQkvKgorCQkgKiBydW4gZGlmZl9mbHVzaF9wYXRjaCBmb3IgdGhlIGV4aXQgc3RhdHVzLiBzZXR0aW5nCisJCSAqIG9wdGlvbnMtPmZpbGUgdG8gL2Rldi9udWxsIHNob3VsZCBiZSBzYWZlLCBiZWNhdWUgd2UKKwkJICogYXJlbid0IHN1cHBvc2VkIHRvIHByb2R1Y2UgYW55IG91dHB1dCBhbnl3YXkuCisJCSAqLworCQlpZiAob3B0aW9ucy0+Y2xvc2VfZmlsZSkKKwkJCWZjbG9zZShvcHRpb25zLT5maWxlKTsKKwkJb3B0aW9ucy0+ZmlsZSA9IGZvcGVuKCIvZGV2L251bGwiLCAidyIpOworCQlpZiAoIW9wdGlvbnMtPmZpbGUpCisJCQlkaWVfZXJybm8oIkNvdWxkIG5vdCBvcGVuIC9kZXYvbnVsbCIpOworCQlvcHRpb25zLT5jbG9zZV9maWxlID0gMTsKKwkJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gcS0+cXVldWVbaV07CisJCQlpZiAoY2hlY2tfcGFpcl9zdGF0dXMocCkpCisJCQkJZGlmZl9mbHVzaF9wYXRjaChwLCBvcHRpb25zKTsKKwkJCWlmIChvcHRpb25zLT5mb3VuZF9jaGFuZ2VzKQorCQkJCWJyZWFrOworCQl9CisJfQorCiAJaWYgKG91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9QQVRDSCkgewogCQlpZiAoc2VwYXJhdG9yKSB7CiAJCQlwdXRjKG9wdGlvbnMtPmxpbmVfdGVybWluYXRpb24sIG9wdGlvbnMtPmZpbGUpOwpAQCAtMzMyMyw2ICszNTcyLDE4IEBACiAJcS0+bnIgPSBxLT5hbGxvYyA9IDA7CiAJaWYgKG9wdGlvbnMtPmNsb3NlX2ZpbGUpCiAJCWZjbG9zZShvcHRpb25zLT5maWxlKTsKKworCS8qCisJICogUmVwb3J0IHRoZSBjb250ZW50LWxldmVsIGRpZmZlcmVuY2VzIHdpdGggSEFTX0NIQU5HRVM7CisJICogZGlmZl9hZGRyZW1vdmUvZGlmZl9jaGFuZ2UgZG9lcyBub3Qgc2V0IHRoZSBiaXQgd2hlbgorCSAqIERJRkZfRlJPTV9DT05URU5UUyBpcyBpbiBlZmZlY3QgKGUuZy4gd2l0aCAtdykuCisJICovCisJaWYgKERJRkZfT1BUX1RTVChvcHRpb25zLCBESUZGX0ZST01fQ09OVEVOVFMpKSB7CisJCWlmIChvcHRpb25zLT5mb3VuZF9jaGFuZ2VzKQorCQkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIEhBU19DSEFOR0VTKTsKKwkJZWxzZQorCQkJRElGRl9PUFRfQ0xSKG9wdGlvbnMsIEhBU19DSEFOR0VTKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGRpZmZjb3JlX2FwcGx5X2ZpbHRlcihjb25zdCBjaGFyICpmaWx0ZXIpCkBAIC0zNDA2LDcgKzM2NjcsNyBAQAogCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IHEtPnF1ZXVlW2ldOwogCiAJCS8qCi0JCSAqIDEuIEVudHJpZXMgdGhhdCBjb21lIGZyb20gc3RhdCBpbmZvIGRpcnR5bmVzcworCQkgKiAxLiBFbnRyaWVzIHRoYXQgY29tZSBmcm9tIHN0YXQgaW5mbyBkaXJ0aW5lc3MKIAkJICogICAgYWx3YXlzIGhhdmUgYm90aCBzaWRlcyAoaW93LCBub3QgY3JlYXRlL2RlbGV0ZSksCiAJCSAqICAgIG9uZSBzaWRlIG9mIHRoZSBvYmplY3QgbmFtZSBpcyB1bmtub3duLCB3aXRoCiAJCSAqICAgIHRoZSBzYW1lIG1vZGUgYW5kIHNpemUuICBLZWVwIHRoZSBvbmVzIHRoYXQKQEAgLTM0NDIsNiArMzcwMywyMyBAQAogCSpxID0gb3V0cTsKIH0KIAorc3RhdGljIGludCBkaWZmbmFtZWNtcChjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJY29uc3Qgc3RydWN0IGRpZmZfZmlsZXBhaXIgKmEgPSAqKChjb25zdCBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqKilhXyk7CisJY29uc3Qgc3RydWN0IGRpZmZfZmlsZXBhaXIgKmIgPSAqKChjb25zdCBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqKiliXyk7CisJY29uc3QgY2hhciAqbmFtZV9hLCAqbmFtZV9iOworCisJbmFtZV9hID0gYS0+b25lID8gYS0+b25lLT5wYXRoIDogYS0+dHdvLT5wYXRoOworCW5hbWVfYiA9IGItPm9uZSA/IGItPm9uZS0+cGF0aCA6IGItPnR3by0+cGF0aDsKKwlyZXR1cm4gc3RyY21wKG5hbWVfYSwgbmFtZV9iKTsKK30KKwordm9pZCBkaWZmY29yZV9maXhfZGlmZl9pbmRleChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zKQoreworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOworCXFzb3J0KHEtPnF1ZXVlLCBxLT5uciwgc2l6ZW9mKHEtPnF1ZXVlWzBdKSwgZGlmZm5hbWVjbXApOworfQorCiB2b2lkIGRpZmZjb3JlX3N0ZChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zKQogewogCWlmIChvcHRpb25zLT5za2lwX3N0YXRfdW5tYXRjaCkKQEAgLTM0NTksNyArMzczNyw3IEBACiAJZGlmZl9yZXNvbHZlX3JlbmFtZV9jb3B5KCk7CiAJZGlmZmNvcmVfYXBwbHlfZmlsdGVyKG9wdGlvbnMtPmZpbHRlcik7CiAKLQlpZiAoZGlmZl9xdWV1ZWRfZGlmZi5ucikKKwlpZiAoZGlmZl9xdWV1ZWRfZGlmZi5uciAmJiAhRElGRl9PUFRfVFNUKG9wdGlvbnMsIERJRkZfRlJPTV9DT05URU5UUykpCiAJCURJRkZfT1BUX1NFVChvcHRpb25zLCBIQVNfQ0hBTkdFUyk7CiAJZWxzZQogCQlESUZGX09QVF9DTFIob3B0aW9ucywgSEFTX0NIQU5HRVMpOwpAQCAtMzQ4Myw3ICszNzYxLDcgQEAKIHZvaWQgZGlmZl9hZGRyZW1vdmUoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywKIAkJICAgIGludCBhZGRyZW1vdmUsIHVuc2lnbmVkIG1vZGUsCiAJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAotCQkgICAgY29uc3QgY2hhciAqY29uY2F0cGF0aCkKKwkJICAgIGNvbnN0IGNoYXIgKmNvbmNhdHBhdGgsIHVuc2lnbmVkIGRpcnR5X3N1Ym1vZHVsZSkKIHsKIAlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLCAqdHdvOwogCkBAIC0zNTE1LDE4ICszNzkzLDIyIEBACiAKIAlpZiAoYWRkcmVtb3ZlICE9ICcrJykKIAkJZmlsbF9maWxlc3BlYyhvbmUsIHNoYTEsIG1vZGUpOwotCWlmIChhZGRyZW1vdmUgIT0gJy0nKQorCWlmIChhZGRyZW1vdmUgIT0gJy0nKSB7CiAJCWZpbGxfZmlsZXNwZWModHdvLCBzaGExLCBtb2RlKTsKKwkJdHdvLT5kaXJ0eV9zdWJtb2R1bGUgPSBkaXJ0eV9zdWJtb2R1bGU7CisJfQogCiAJZGlmZl9xdWV1ZSgmZGlmZl9xdWV1ZWRfZGlmZiwgb25lLCB0d28pOwotCURJRkZfT1BUX1NFVChvcHRpb25zLCBIQVNfQ0hBTkdFUyk7CisJaWYgKCFESUZGX09QVF9UU1Qob3B0aW9ucywgRElGRl9GUk9NX0NPTlRFTlRTKSkKKwkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIEhBU19DSEFOR0VTKTsKIH0KIAogdm9pZCBkaWZmX2NoYW5nZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAogCQkgdW5zaWduZWQgb2xkX21vZGUsIHVuc2lnbmVkIG5ld19tb2RlLAogCQkgY29uc3QgdW5zaWduZWQgY2hhciAqb2xkX3NoYTEsCiAJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXdfc2hhMSwKLQkJIGNvbnN0IGNoYXIgKmNvbmNhdHBhdGgpCisJCSBjb25zdCBjaGFyICpjb25jYXRwYXRoLAorCQkgdW5zaWduZWQgb2xkX2RpcnR5X3N1Ym1vZHVsZSwgdW5zaWduZWQgbmV3X2RpcnR5X3N1Ym1vZHVsZSkKIHsKIAlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLCAqdHdvOwogCkBAIC0zNTM5LDYgKzM4MjEsOCBAQAogCQljb25zdCB1bnNpZ25lZCBjaGFyICp0bXBfYzsKIAkJdG1wID0gb2xkX21vZGU7IG9sZF9tb2RlID0gbmV3X21vZGU7IG5ld19tb2RlID0gdG1wOwogCQl0bXBfYyA9IG9sZF9zaGExOyBvbGRfc2hhMSA9IG5ld19zaGExOyBuZXdfc2hhMSA9IHRtcF9jOworCQl0bXAgPSBvbGRfZGlydHlfc3VibW9kdWxlOyBvbGRfZGlydHlfc3VibW9kdWxlID0gbmV3X2RpcnR5X3N1Ym1vZHVsZTsKKwkJCW5ld19kaXJ0eV9zdWJtb2R1bGUgPSB0bXA7CiAJfQogCiAJaWYgKG9wdGlvbnMtPnByZWZpeCAmJgpAQCAtMzU0OSw5ICszODMzLDEyIEBACiAJdHdvID0gYWxsb2NfZmlsZXNwZWMoY29uY2F0cGF0aCk7CiAJZmlsbF9maWxlc3BlYyhvbmUsIG9sZF9zaGExLCBvbGRfbW9kZSk7CiAJZmlsbF9maWxlc3BlYyh0d28sIG5ld19zaGExLCBuZXdfbW9kZSk7CisJb25lLT5kaXJ0eV9zdWJtb2R1bGUgPSBvbGRfZGlydHlfc3VibW9kdWxlOworCXR3by0+ZGlydHlfc3VibW9kdWxlID0gbmV3X2RpcnR5X3N1Ym1vZHVsZTsKIAogCWRpZmZfcXVldWUoJmRpZmZfcXVldWVkX2RpZmYsIG9uZSwgdHdvKTsKLQlESUZGX09QVF9TRVQob3B0aW9ucywgSEFTX0NIQU5HRVMpOworCWlmICghRElGRl9PUFRfVFNUKG9wdGlvbnMsIERJRkZfRlJPTV9DT05URU5UUykpCisJCURJRkZfT1BUX1NFVChvcHRpb25zLCBIQVNfQ0hBTkdFUyk7CiB9CiAKIHZvaWQgZGlmZl91bm1lcmdlKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCkBAIC0zNTc4LDYgKzM4NjUsNyBAQAogCWNvbnN0IGNoYXIgKiphcmcgPSBhcmd2OwogCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNoaWxkOwogCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IGVyciA9IDA7CiAKIAl0ZW1wID0gcHJlcGFyZV90ZW1wX2ZpbGUoc3BlYy0+cGF0aCwgc3BlYyk7CiAJKmFyZysrID0gcGdtOwpAQCAtMzU4NSwxOCArMzg3MywyMyBAQAogCSphcmcgPSBOVUxMOwogCiAJbWVtc2V0KCZjaGlsZCwgMCwgc2l6ZW9mKGNoaWxkKSk7CisJY2hpbGQudXNlX3NoZWxsID0gMTsKIAljaGlsZC5hcmd2ID0gYXJndjsKIAljaGlsZC5vdXQgPSAtMTsKLQlpZiAoc3RhcnRfY29tbWFuZCgmY2hpbGQpICE9IDAgfHwKLQkgICAgc3RyYnVmX3JlYWQoJmJ1ZiwgY2hpbGQub3V0LCAwKSA8IDAgfHwKLQkgICAgZmluaXNoX2NvbW1hbmQoJmNoaWxkKSAhPSAwKSB7Ci0JCWNsb3NlKGNoaWxkLm91dCk7Ci0JCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCWlmIChzdGFydF9jb21tYW5kKCZjaGlsZCkpIHsKIAkJcmVtb3ZlX3RlbXBmaWxlKCk7Ci0JCWVycm9yKCJlcnJvciBydW5uaW5nIHRleHRjb252IGNvbW1hbmQgJyVzJyIsIHBnbSk7CiAJCXJldHVybiBOVUxMOwogCX0KKworCWlmIChzdHJidWZfcmVhZCgmYnVmLCBjaGlsZC5vdXQsIDApIDwgMCkKKwkJZXJyID0gZXJyb3IoImVycm9yIHJlYWRpbmcgZnJvbSB0ZXh0Y29udiBjb21tYW5kICclcyciLCBwZ20pOwogCWNsb3NlKGNoaWxkLm91dCk7CisKKwlpZiAoZmluaXNoX2NvbW1hbmQoJmNoaWxkKSB8fCBlcnIpIHsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCXJlbW92ZV90ZW1wZmlsZSgpOworCQlyZXR1cm4gTlVMTDsKKwl9CiAJcmVtb3ZlX3RlbXBmaWxlKCk7CiAKIAlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYnVmLCBvdXRzaXplKTsKZGlmZiAtLWdpdCBhL2RpZmYuaCBiL2RpZmYuaAppbmRleCA2NjE2ODc3Li4yZWYzMzQxIDEwMDY0NAotLS0gYS9kaWZmLmgKKysrIGIvZGlmZi5oCkBAIC0xNCwxMiArMTQsMTMgQEAKIAkJIHVuc2lnbmVkIG9sZF9tb2RlLCB1bnNpZ25lZCBuZXdfbW9kZSwKIAkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9zaGExLAogCQkgY29uc3QgdW5zaWduZWQgY2hhciAqbmV3X3NoYTEsCi0JCSBjb25zdCBjaGFyICpmdWxscGF0aCk7CisJCSBjb25zdCBjaGFyICpmdWxscGF0aCwKKwkJIHVuc2lnbmVkIG9sZF9kaXJ0eV9zdWJtb2R1bGUsIHVuc2lnbmVkIG5ld19kaXJ0eV9zdWJtb2R1bGUpOwogCiB0eXBlZGVmIHZvaWQgKCphZGRfcmVtb3ZlX2ZuX3QpKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCiAJCSAgICBpbnQgYWRkcmVtb3ZlLCB1bnNpZ25lZCBtb2RlLAogCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKLQkJICAgIGNvbnN0IGNoYXIgKmZ1bGxwYXRoKTsKKwkJICAgIGNvbnN0IGNoYXIgKmZ1bGxwYXRoLCB1bnNpZ25lZCBkaXJ0eV9zdWJtb2R1bGUpOwogCiB0eXBlZGVmIHZvaWQgKCpkaWZmX2Zvcm1hdF9mbl90KShzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEsCiAJCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsIHZvaWQgKmRhdGEpOwpAQCAtNTUsNyArNTYsNyBAQAogI2RlZmluZSBESUZGX09QVF9DT0xPUl9ESUZGICAgICAgICAgICgxIDw8ICA4KQogI2RlZmluZSBESUZGX09QVF9DT0xPUl9ESUZGX1dPUkRTICAgICgxIDw8ICA5KQogI2RlZmluZSBESUZGX09QVF9IQVNfQ0hBTkdFUyAgICAgICAgICgxIDw8IDEwKQotI2RlZmluZSBESUZGX09QVF9RVUlFVCAgICAgICAgICAgICAgICgxIDw8IDExKQorI2RlZmluZSBESUZGX09QVF9RVUlDSyAgICAgICAgICAgICAgICgxIDw8IDExKQogI2RlZmluZSBESUZGX09QVF9OT19JTkRFWCAgICAgICAgICAgICgxIDw8IDEyKQogI2RlZmluZSBESUZGX09QVF9BTExPV19FWFRFUk5BTCAgICAgICgxIDw8IDEzKQogI2RlZmluZSBESUZGX09QVF9FWElUX1dJVEhfU1RBVFVTICAgICgxIDw8IDE0KQpAQCAtNjYsNiArNjcsOSBAQAogI2RlZmluZSBESUZGX09QVF9ESVJTVEFUX0NVTVVMQVRJVkUgICgxIDw8IDE5KQogI2RlZmluZSBESUZGX09QVF9ESVJTVEFUX0JZX0ZJTEUgICAgICgxIDw8IDIwKQogI2RlZmluZSBESUZGX09QVF9BTExPV19URVhUQ09OViAgICAgICgxIDw8IDIxKQorI2RlZmluZSBESUZGX09QVF9ESUZGX0ZST01fQ09OVEVOVFMgICgxIDw8IDIyKQorI2RlZmluZSBESUZGX09QVF9TVUJNT0RVTEVfTE9HICAgICAgICgxIDw8IDIzKQorCiAjZGVmaW5lIERJRkZfT1BUX1RTVChvcHRzLCBmbGFnKSAgICAoKG9wdHMpLT5mbGFncyAmIERJRkZfT1BUXyMjZmxhZykKICNkZWZpbmUgRElGRl9PUFRfU0VUKG9wdHMsIGZsYWcpICAgICgob3B0cyktPmZsYWdzIHw9IERJRkZfT1BUXyMjZmxhZykKICNkZWZpbmUgRElGRl9PUFRfQ0xSKG9wdHMsIGZsYWcpICAgICgob3B0cyktPmZsYWdzICY9IH5ESUZGX09QVF8jI2ZsYWcpCkBAIC0xMjcsNiArMTMxLDcgQEAKIAlESUZGX0ZJTEVfTkVXID0gNSwKIAlESUZGX0NPTU1JVCA9IDYsCiAJRElGRl9XSElURVNQQUNFID0gNywKKwlESUZGX0ZVTkNJTkZPID0gOCwKIH07CiBjb25zdCBjaGFyICpkaWZmX2dldF9jb2xvcihpbnQgZGlmZl91c2VfY29sb3IsIGVudW0gY29sb3JfZGlmZiBpeCk7CiAjZGVmaW5lIGRpZmZfZ2V0X2NvbG9yX29wdChvLCBpeCkgXApAQCAtMTczLDEzICsxNzgsMTQgQEAKIAkJCSAgIGludCBhZGRyZW1vdmUsCiAJCQkgICB1bnNpZ25lZCBtb2RlLAogCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKLQkJCSAgIGNvbnN0IGNoYXIgKmZ1bGxwYXRoKTsKKwkJCSAgIGNvbnN0IGNoYXIgKmZ1bGxwYXRoLCB1bnNpZ25lZCBkaXJ0eV9zdWJtb2R1bGUpOwogCiBleHRlcm4gdm9pZCBkaWZmX2NoYW5nZShzdHJ1Y3QgZGlmZl9vcHRpb25zICosCiAJCQl1bnNpZ25lZCBtb2RlMSwgdW5zaWduZWQgbW9kZTIsCiAJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAogCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMiwKLQkJCWNvbnN0IGNoYXIgKmZ1bGxwYXRoKTsKKwkJCWNvbnN0IGNoYXIgKmZ1bGxwYXRoLAorCQkJdW5zaWduZWQgZGlydHlfc3VibW9kdWxlMSwgdW5zaWduZWQgZGlydHlfc3VibW9kdWxlMik7CiAKIGV4dGVybiB2b2lkIGRpZmZfdW5tZXJnZShzdHJ1Y3QgZGlmZl9vcHRpb25zICosCiAJCQkgY29uc3QgY2hhciAqcGF0aCwKQEAgLTIwNCw2ICsyMTAsNyBAQAogI2RlZmluZSBESUZGX1BJQ0tBWEVfUkVHRVgJMgogCiBleHRlcm4gdm9pZCBkaWZmY29yZV9zdGQoc3RydWN0IGRpZmZfb3B0aW9ucyAqKTsKK2V4dGVybiB2b2lkIGRpZmZjb3JlX2ZpeF9kaWZmX2luZGV4KHN0cnVjdCBkaWZmX29wdGlvbnMgKik7CiAKICNkZWZpbmUgQ09NTU9OX0RJRkZfT1BUSU9OU19IRUxQIFwKICJcbmNvbW1vbiBkaWZmIG9wdGlvbnM6XG4iIFwKZGlmZiAtLWdpdCBhL2RpZmZjb3JlLWJyZWFrLmMgYi9kaWZmY29yZS1icmVhay5jCmluZGV4IGQ3MDk3YmIuLjNhN2I2MGEgMTAwNjQ0Ci0tLSBhL2RpZmZjb3JlLWJyZWFrLmMKKysrIGIvZGlmZmNvcmUtYnJlYWsuYwpAQCAtNjksNyArNjksNyBAQAogCQlyZXR1cm4gMDsgLyogd2UgZG8gbm90IGJyZWFrIHRvbyBzbWFsbCBmaWxlcGFpciAqLwogCiAJaWYgKGRpZmZjb3JlX2NvdW50X2NoYW5nZXMoc3JjLCBkc3QsCi0JCQkJICAgTlVMTCwgTlVMTCwKKwkJCQkgICAmc3JjLT5jbnRfZGF0YSwgJmRzdC0+Y250X2RhdGEsCiAJCQkJICAgMCwKIAkJCQkgICAmc3JjX2NvcGllZCwgJmxpdGVyYWxfYWRkZWQpKQogCQlyZXR1cm4gMDsKQEAgLTIwNCwxMiArMjA0LDE2IEBACiAJCQkJZHAtPnNjb3JlID0gc2NvcmU7CiAJCQkJZHAtPmJyb2tlbl9wYWlyID0gMTsKIAorCQkJCWRpZmZfZnJlZV9maWxlc3BlY19ibG9iKHAtPm9uZSk7CisJCQkJZGlmZl9mcmVlX2ZpbGVzcGVjX2Jsb2IocC0+dHdvKTsKIAkJCQlmcmVlKHApOyAvKiBub3QgZGlmZl9mcmVlX2ZpbGVwYWlyKCksIHdlIGFyZQogCQkJCQkgICogcmV1c2luZyBvbmUgYW5kIHR3byBoZXJlLgogCQkJCQkgICovCiAJCQkJY29udGludWU7CiAJCQl9CiAJCX0KKwkJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEocC0+b25lKTsKKwkJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEocC0+dHdvKTsKIAkJZGlmZl9xKCZvdXRxLCBwKTsKIAl9CiAJZnJlZShxLT5xdWV1ZSk7CmRpZmYgLS1naXQgYS9kaWZmY29yZS1kZWx0YS5jIGIvZGlmZmNvcmUtZGVsdGEuYwppbmRleCBlNjcwZjg1Li43Y2Y0MzFkIDEwMDY0NAotLS0gYS9kaWZmY29yZS1kZWx0YS5jCisrKyBiL2RpZmZjb3JlLWRlbHRhLmMKQEAgLTIwMSwxMCArMjAxLDE1IEBACiAJCXdoaWxlIChkLT5jbnQpIHsKIAkJCWlmIChkLT5oYXNodmFsID49IHMtPmhhc2h2YWwpCiAJCQkJYnJlYWs7CisJCQlsYSArPSBkLT5jbnQ7CiAJCQlkKys7CiAJCX0KIAkJc3JjX2NudCA9IHMtPmNudDsKLQkJZHN0X2NudCA9IGQtPmhhc2h2YWwgPT0gcy0+aGFzaHZhbCA/IGQtPmNudCA6IDA7CisJCWRzdF9jbnQgPSAwOworCQlpZiAoZC0+Y250ICYmIGQtPmhhc2h2YWwgPT0gcy0+aGFzaHZhbCkgeworCQkJZHN0X2NudCA9IGQtPmNudDsKKwkJCWQrKzsKKwkJfQogCQlpZiAoc3JjX2NudCA8IGRzdF9jbnQpIHsKIAkJCWxhICs9IGRzdF9jbnQgLSBzcmNfY250OwogCQkJc2MgKz0gc3JjX2NudDsKQEAgLTIxMyw2ICsyMTgsMTAgQEAKIAkJCXNjICs9IGRzdF9jbnQ7CiAJCXMrKzsKIAl9CisJd2hpbGUgKGQtPmNudCkgeworCQlsYSArPSBkLT5jbnQ7CisJCWQrKzsKKwl9CiAKIAlpZiAoIXNyY19jb3VudF9wKQogCQlmcmVlKHNyY19jb3VudCk7CmRpZmYgLS1naXQgYS9kaWZmY29yZS1yZW5hbWUuYyBiL2RpZmZjb3JlLXJlbmFtZS5jCmluZGV4IDYzYWM5OTguLmQ2ZmQzY2EgMTAwNjQ0Ci0tLSBhL2RpZmZjb3JlLXJlbmFtZS5jCisrKyBiL2RpZmZjb3JlLXJlbmFtZS5jCkBAIC01MjMsMTAgKzUyMywxMyBAQAogCQkJdGhpc19zcmMuZHN0ID0gaTsKIAkJCXRoaXNfc3JjLnNyYyA9IGo7CiAJCQlyZWNvcmRfaWZfYmV0dGVyKG0sICZ0aGlzX3NyYyk7CisJCQkvKgorCQkJICogT25jZSB3ZSBydW4gZXN0aW1hdGVfc2ltaWxhcml0eSwKKwkJCSAqIFdlIGRvIG5vdCBuZWVkIHRoZSB0ZXh0IGFueW1vcmUuCisJCQkgKi8KIAkJCWRpZmZfZnJlZV9maWxlc3BlY19ibG9iKG9uZSk7CisJCQlkaWZmX2ZyZWVfZmlsZXNwZWNfYmxvYih0d28pOwogCQl9Ci0JCS8qIFdlIGRvIG5vdCBuZWVkIHRoZSB0ZXh0IGFueW1vcmUgKi8KLQkJZGlmZl9mcmVlX2ZpbGVzcGVjX2Jsb2IodHdvKTsKIAkJZHN0X2NudCsrOwogCX0KIApkaWZmIC0tZ2l0IGEvZGlmZmNvcmUuaCBiL2RpZmZjb3JlLmgKaW5kZXggNWI2MzQ1OC4uNjY2ODdjMyAxMDA2NDQKLS0tIGEvZGlmZmNvcmUuaAorKysgYi9kaWZmY29yZS5oCkBAIC00Miw2ICs0Miw3IEBACiAjZGVmaW5lIERJRkZfRklMRV9WQUxJRChzcGVjKSAoKChzcGVjKS0+bW9kZSkgIT0gMCkKIAl1bnNpZ25lZCBzaG91bGRfZnJlZSA6IDE7IC8qIGRhdGEgc2hvdWxkIGJlIGZyZWUoKSdlZCAqLwogCXVuc2lnbmVkIHNob3VsZF9tdW5tYXAgOiAxOyAvKiBkYXRhIHNob3VsZCBiZSBtdW5tYXAoKSdlZCAqLworCXVuc2lnbmVkIGRpcnR5X3N1Ym1vZHVsZSA6IDE7ICAvKiBGb3Igc3VibW9kdWxlczogaXRzIHdvcmsgdHJlZSBpcyBkaXJ0eSAqLwogCiAJc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqZHJpdmVyOwogCS8qIGRhdGEgc2hvdWxkIGJlIGNvbnNpZGVyZWQgImJpbmFyeSI7IC0xIG1lYW5zICJkb24ndCBrbm93IHlldCIgKi8KZGlmZiAtLWdpdCBhL2Rpci5jIGIvZGlyLmMKaW5kZXggMGU2Yjc1Mi4uY2I4MzMzMiAxMDA2NDQKLS0tIGEvZGlyLmMKKysrIGIvZGlyLmMKQEAgLTE0LDEyICsxNCwxMSBAQAogCWNvbnN0IGNoYXIgKnBhdGg7CiB9OwogCi1zdGF0aWMgaW50IHJlYWRfZGlyZWN0b3J5X3JlY3Vyc2l2ZShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLAotCWNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLAorc3RhdGljIGludCByZWFkX2RpcmVjdG9yeV9yZWN1cnNpdmUoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgY29uc3QgY2hhciAqcGF0aCwgaW50IGxlbiwKIAlpbnQgY2hlY2tfb25seSwgY29uc3Qgc3RydWN0IHBhdGhfc2ltcGxpZnkgKnNpbXBsaWZ5KTsKLXN0YXRpYyBpbnQgZ2V0X2R0eXBlKHN0cnVjdCBkaXJlbnQgKmRlLCBjb25zdCBjaGFyICpwYXRoKTsKK3N0YXRpYyBpbnQgZ2V0X2R0eXBlKHN0cnVjdCBkaXJlbnQgKmRlLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgbGVuKTsKIAotaW50IGNvbW1vbl9wcmVmaXgoY29uc3QgY2hhciAqKnBhdGhzcGVjKQorc3RhdGljIGludCBjb21tb25fcHJlZml4KGNvbnN0IGNoYXIgKipwYXRoc3BlYykKIHsKIAljb25zdCBjaGFyICpwYXRoLCAqc2xhc2gsICpuZXh0OwogCWludCBwcmVmaXg7CkBAIC01Miw2ICs1MSwyNiBAQAogCXJldHVybiBwcmVmaXg7CiB9CiAKK2ludCBmaWxsX2RpcmVjdG9yeShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBjb25zdCBjaGFyICoqcGF0aHNwZWMpCit7CisJY29uc3QgY2hhciAqcGF0aDsKKwlpbnQgbGVuOworCisJLyoKKwkgKiBDYWxjdWxhdGUgY29tbW9uIHByZWZpeCBmb3IgdGhlIHBhdGhzcGVjLCBhbmQKKwkgKiB1c2UgdGhhdCB0byBvcHRpbWl6ZSB0aGUgZGlyZWN0b3J5IHdhbGsKKwkgKi8KKwlsZW4gPSBjb21tb25fcHJlZml4KHBhdGhzcGVjKTsKKwlwYXRoID0gIiI7CisKKwlpZiAobGVuKQorCQlwYXRoID0geG1lbWR1cHooKnBhdGhzcGVjLCBsZW4pOworCisJLyogUmVhZCB0aGUgZGlyZWN0b3J5IGFuZCBwcnVuZSBpdCAqLworCXJlYWRfZGlyZWN0b3J5KGRpciwgcGF0aCwgbGVuLCBwYXRoc3BlYyk7CisJcmV0dXJuIGxlbjsKK30KKwogLyoKICAqIERvZXMgJ21hdGNoJyBtYXRjaCB0aGUgZ2l2ZW4gbmFtZT8KICAqIEEgbWF0Y2ggaXMgZm91bmQgaWYKQEAgLTE4MSwxMSArMjAwLDM1IEBACiAJd2hpY2gtPmV4Y2x1ZGVzW3doaWNoLT5ucisrXSA9IHg7CiB9CiAKLXN0YXRpYyBpbnQgYWRkX2V4Y2x1ZGVzX2Zyb21fZmlsZV8xKGNvbnN0IGNoYXIgKmZuYW1lLAotCQkJCSAgICBjb25zdCBjaGFyICpiYXNlLAotCQkJCSAgICBpbnQgYmFzZWxlbiwKLQkJCQkgICAgY2hhciAqKmJ1Zl9wLAotCQkJCSAgICBzdHJ1Y3QgZXhjbHVkZV9saXN0ICp3aGljaCkKK3N0YXRpYyB2b2lkICpyZWFkX3NraXBfd29ya3RyZWVfZmlsZV9mcm9tX2luZGV4KGNvbnN0IGNoYXIgKnBhdGgsIHNpemVfdCAqc2l6ZSkKK3sKKwlpbnQgcG9zLCBsZW47CisJdW5zaWduZWQgbG9uZyBzejsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdm9pZCAqZGF0YTsKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSA9ICZ0aGVfaW5kZXg7CisKKwlsZW4gPSBzdHJsZW4ocGF0aCk7CisJcG9zID0gaW5kZXhfbmFtZV9wb3MoaXN0YXRlLCBwYXRoLCBsZW4pOworCWlmIChwb3MgPCAwKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoIWNlX3NraXBfd29ya3RyZWUoaXN0YXRlLT5jYWNoZVtwb3NdKSkKKwkJcmV0dXJuIE5VTEw7CisJZGF0YSA9IHJlYWRfc2hhMV9maWxlKGlzdGF0ZS0+Y2FjaGVbcG9zXS0+c2hhMSwgJnR5cGUsICZzeik7CisJaWYgKCFkYXRhIHx8IHR5cGUgIT0gT0JKX0JMT0IpIHsKKwkJZnJlZShkYXRhKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCSpzaXplID0geHNpemVfdChzeik7CisJcmV0dXJuIGRhdGE7Cit9CisKK2ludCBhZGRfZXhjbHVkZXNfZnJvbV9maWxlX3RvX2xpc3QoY29uc3QgY2hhciAqZm5hbWUsCisJCQkJICAgY29uc3QgY2hhciAqYmFzZSwKKwkJCQkgICBpbnQgYmFzZWxlbiwKKwkJCQkgICBjaGFyICoqYnVmX3AsCisJCQkJICAgc3RydWN0IGV4Y2x1ZGVfbGlzdCAqd2hpY2gsCisJCQkJICAgaW50IGNoZWNrX2luZGV4KQogewogCXN0cnVjdCBzdGF0IHN0OwogCWludCBmZCwgaTsKQEAgLTE5MywyNCArMjM2LDM5IEBACiAJY2hhciAqYnVmLCAqZW50cnk7CiAKIAlmZCA9IG9wZW4oZm5hbWUsIE9fUkRPTkxZKTsKLQlpZiAoZmQgPCAwIHx8IGZzdGF0KGZkLCAmc3QpIDwgMCkKLQkJZ290byBlcnI7Ci0Jc2l6ZSA9IHhzaXplX3Qoc3Quc3Rfc2l6ZSk7Ci0JaWYgKHNpemUgPT0gMCkgeworCWlmIChmZCA8IDAgfHwgZnN0YXQoZmQsICZzdCkgPCAwKSB7CisJCWlmICgwIDw9IGZkKQorCQkJY2xvc2UoZmQpOworCQlpZiAoIWNoZWNrX2luZGV4IHx8CisJCSAgICAoYnVmID0gcmVhZF9za2lwX3dvcmt0cmVlX2ZpbGVfZnJvbV9pbmRleChmbmFtZSwgJnNpemUpKSA9PSBOVUxMKQorCQkJcmV0dXJuIC0xOworCQlpZiAoc2l6ZSA9PSAwKSB7CisJCQlmcmVlKGJ1Zik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAoYnVmW3NpemUtMV0gIT0gJ1xuJykgeworCQkJYnVmID0geHJlYWxsb2MoYnVmLCBzaXplKzEpOworCQkJYnVmW3NpemUrK10gPSAnXG4nOworCQl9CisJfQorCWVsc2UgeworCQlzaXplID0geHNpemVfdChzdC5zdF9zaXplKTsKKwkJaWYgKHNpemUgPT0gMCkgeworCQkJY2xvc2UoZmQpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJYnVmID0geG1hbGxvYyhzaXplKzEpOworCQlpZiAocmVhZF9pbl9mdWxsKGZkLCBidWYsIHNpemUpICE9IHNpemUpIHsKKwkJCWZyZWUoYnVmKTsKKwkJCWNsb3NlKGZkKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlidWZbc2l6ZSsrXSA9ICdcbic7CiAJCWNsb3NlKGZkKTsKLQkJcmV0dXJuIDA7CiAJfQotCWJ1ZiA9IHhtYWxsb2Moc2l6ZSsxKTsKLQlpZiAocmVhZF9pbl9mdWxsKGZkLCBidWYsIHNpemUpICE9IHNpemUpCi0JewotCQlmcmVlKGJ1Zik7Ci0JCWdvdG8gZXJyOwotCX0KLQljbG9zZShmZCk7CiAKIAlpZiAoYnVmX3ApCiAJCSpidWZfcCA9IGJ1ZjsKLQlidWZbc2l6ZSsrXSA9ICdcbic7CiAJZW50cnkgPSBidWY7CiAJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewogCQlpZiAoYnVmW2ldID09ICdcbicpIHsKQEAgLTIyMiwxNyArMjgwLDEyIEBACiAJCX0KIAl9CiAJcmV0dXJuIDA7Ci0KLSBlcnI6Ci0JaWYgKDAgPD0gZmQpCi0JCWNsb3NlKGZkKTsKLQlyZXR1cm4gLTE7CiB9CiAKIHZvaWQgYWRkX2V4Y2x1ZGVzX2Zyb21fZmlsZShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBjb25zdCBjaGFyICpmbmFtZSkKIHsKLQlpZiAoYWRkX2V4Y2x1ZGVzX2Zyb21fZmlsZV8xKGZuYW1lLCAiIiwgMCwgTlVMTCwKLQkJCQkgICAgICZkaXItPmV4Y2x1ZGVfbGlzdFtFWENfRklMRV0pIDwgMCkKKwlpZiAoYWRkX2V4Y2x1ZGVzX2Zyb21fZmlsZV90b19saXN0KGZuYW1lLCAiIiwgMCwgTlVMTCwKKwkJCQkJICAgJmRpci0+ZXhjbHVkZV9saXN0W0VYQ19GSUxFXSwgMCkgPCAwKQogCQlkaWUoImNhbm5vdCB1c2UgJXMgYXMgYW4gZXhjbHVkZSBmaWxlIiwgZm5hbWUpOwogfQogCkBAIC0yODEsOSArMzM0LDkgQEAKIAkJbWVtY3B5KGRpci0+YmFzZWJ1ZiArIGN1cnJlbnQsIGJhc2UgKyBjdXJyZW50LAogCQkgICAgICAgc3RrLT5iYXNlbGVuIC0gY3VycmVudCk7CiAJCXN0cmNweShkaXItPmJhc2VidWYgKyBzdGstPmJhc2VsZW4sIGRpci0+ZXhjbHVkZV9wZXJfZGlyKTsKLQkJYWRkX2V4Y2x1ZGVzX2Zyb21fZmlsZV8xKGRpci0+YmFzZWJ1ZiwKLQkJCQkJIGRpci0+YmFzZWJ1Ziwgc3RrLT5iYXNlbGVuLAotCQkJCQkgJnN0ay0+ZmlsZWJ1ZiwgZWwpOworCQlhZGRfZXhjbHVkZXNfZnJvbV9maWxlX3RvX2xpc3QoZGlyLT5iYXNlYnVmLAorCQkJCQkgICAgICAgZGlyLT5iYXNlYnVmLCBzdGstPmJhc2VsZW4sCisJCQkJCSAgICAgICAmc3RrLT5maWxlYnVmLCBlbCwgMSk7CiAJCWRpci0+ZXhjbHVkZV9zdGFjayA9IHN0azsKIAkJY3VycmVudCA9IHN0ay0+YmFzZWxlbjsKIAl9CkBAIC0yOTMsOSArMzQ2LDkgQEAKIC8qIFNjYW4gdGhlIGxpc3QgYW5kIGxldCB0aGUgbGFzdCBtYXRjaCBkZXRlcm1pbmUgdGhlIGZhdGUuCiAgKiBSZXR1cm4gMSBmb3IgZXhjbHVkZSwgMCBmb3IgaW5jbHVkZSBhbmQgLTEgZm9yIHVuZGVjaWRlZC4KICAqLwotc3RhdGljIGludCBleGNsdWRlZF8xKGNvbnN0IGNoYXIgKnBhdGhuYW1lLAotCQkgICAgICBpbnQgcGF0aGxlbiwgY29uc3QgY2hhciAqYmFzZW5hbWUsIGludCAqZHR5cGUsCi0JCSAgICAgIHN0cnVjdCBleGNsdWRlX2xpc3QgKmVsKQoraW50IGV4Y2x1ZGVkX2Zyb21fbGlzdChjb25zdCBjaGFyICpwYXRobmFtZSwKKwkJICAgICAgIGludCBwYXRobGVuLCBjb25zdCBjaGFyICpiYXNlbmFtZSwgaW50ICpkdHlwZSwKKwkJICAgICAgIHN0cnVjdCBleGNsdWRlX2xpc3QgKmVsKQogewogCWludCBpOwogCkBAIC0zMDYsOCArMzU5LDE0IEBACiAJCQlpbnQgdG9fZXhjbHVkZSA9IHgtPnRvX2V4Y2x1ZGU7CiAKIAkJCWlmICh4LT5mbGFncyAmIEVYQ19GTEFHX01VU1RCRURJUikgeworCQkJCWlmICghZHR5cGUpIHsKKwkJCQkJaWYgKCFwcmVmaXhjbXAocGF0aG5hbWUsIGV4Y2x1ZGUpKQorCQkJCQkJcmV0dXJuIHRvX2V4Y2x1ZGU7CisJCQkJCWVsc2UKKwkJCQkJCWNvbnRpbnVlOworCQkJCX0KIAkJCQlpZiAoKmR0eXBlID09IERUX1VOS05PV04pCi0JCQkJCSpkdHlwZSA9IGdldF9kdHlwZShOVUxMLCBwYXRobmFtZSk7CisJCQkJCSpkdHlwZSA9IGdldF9kdHlwZShOVUxMLCBwYXRobmFtZSwgcGF0aGxlbik7CiAJCQkJaWYgKCpkdHlwZSAhPSBEVF9ESVIpCiAJCQkJCWNvbnRpbnVlOwogCQkJfQpAQCAtMzYzLDggKzQyMiw4IEBACiAKIAlwcmVwX2V4Y2x1ZGUoZGlyLCBwYXRobmFtZSwgYmFzZW5hbWUtcGF0aG5hbWUpOwogCWZvciAoc3QgPSBFWENfQ01ETDsgc3QgPD0gRVhDX0ZJTEU7IHN0KyspIHsKLQkJc3dpdGNoIChleGNsdWRlZF8xKHBhdGhuYW1lLCBwYXRobGVuLCBiYXNlbmFtZSwKLQkJCQkgICBkdHlwZV9wLCAmZGlyLT5leGNsdWRlX2xpc3Rbc3RdKSkgeworCQlzd2l0Y2ggKGV4Y2x1ZGVkX2Zyb21fbGlzdChwYXRobmFtZSwgcGF0aGxlbiwgYmFzZW5hbWUsCisJCQkJCSAgIGR0eXBlX3AsICZkaXItPmV4Y2x1ZGVfbGlzdFtzdF0pKSB7CiAJCWNhc2UgMDoKIAkJCXJldHVybiAwOwogCQljYXNlIDE6CkBAIC0zOTYsNyArNDU1LDcgQEAKIAogc3RhdGljIHN0cnVjdCBkaXJfZW50cnkgKmRpcl9hZGRfaWdub3JlZChzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IGxlbikKIHsKLQlpZiAoY2FjaGVfbmFtZV9wb3MocGF0aG5hbWUsIGxlbikgPj0gMCkKKwlpZiAoIWNhY2hlX25hbWVfaXNfb3RoZXIocGF0aG5hbWUsIGxlbikpCiAJCXJldHVybiBOVUxMOwogCiAJQUxMT0NfR1JPVyhkaXItPmlnbm9yZWQsIGRpci0+aWdub3JlZF9ucisxLCBkaXItPmlnbm9yZWRfYWxsb2MpOwpAQCAtNTA1LDcgKzU2NCw3IEBACiAJLyogVGhpcyBpcyB0aGUgInNob3dfb3RoZXJfZGlyZWN0b3JpZXMiIGNhc2UgKi8KIAlpZiAoIShkaXItPmZsYWdzICYgRElSX0hJREVfRU1QVFlfRElSRUNUT1JJRVMpKQogCQlyZXR1cm4gc2hvd19kaXJlY3Rvcnk7Ci0JaWYgKCFyZWFkX2RpcmVjdG9yeV9yZWN1cnNpdmUoZGlyLCBkaXJuYW1lLCBkaXJuYW1lLCBsZW4sIDEsIHNpbXBsaWZ5KSkKKwlpZiAoIXJlYWRfZGlyZWN0b3J5X3JlY3Vyc2l2ZShkaXIsIGRpcm5hbWUsIGxlbiwgMSwgc2ltcGxpZnkpKQogCQlyZXR1cm4gaWdub3JlX2RpcmVjdG9yeTsKIAlyZXR1cm4gc2hvd19kaXJlY3Rvcnk7CiB9CkBAIC01MzUsMjUgKzU5NCw4MiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGluX3BhdGhzcGVjKGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4sIGNvbnN0IHN0cnVjdCBwYXRoX3NpbXBsaWZ5ICpzaW1wbGlmeSkKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHRlbGxzIHVzIHdoZXRoZXIgYW4gZXhjbHVkZWQgcGF0aCBtYXRjaGVzIGEKKyAqIGxpc3Qgb2YgImludGVyZXN0aW5nIiBwYXRoc3BlY3MuIFRoYXQgaXMsIHdoZXRoZXIgYSBwYXRoIG1hdGNoZWQKKyAqIGJ5IGFueSBvZiB0aGUgcGF0aHNwZWNzIGNvdWxkIHBvc3NpYmx5IGJlIGlnbm9yZWQgYnkgZXhjbHVkaW5nCisgKiB0aGUgc3BlY2lmaWVkIHBhdGguIFRoaXMgY2FuIGhhcHBlbiBpZjoKKyAqCisgKiAgIDEuIHRoZSBwYXRoIGlzIG1lbnRpb25lZCBleHBsaWNpdGx5IGluIHRoZSBwYXRoc3BlYworICoKKyAqICAgMi4gdGhlIHBhdGggaXMgYSBkaXJlY3RvcnkgcHJlZml4IG9mIHNvbWUgZWxlbWVudCBpbiB0aGUKKyAqICAgICAgcGF0aHNwZWMKKyAqLworc3RhdGljIGludCBleGNsdWRlX21hdGNoZXNfcGF0aHNwZWMoY29uc3QgY2hhciAqcGF0aCwgaW50IGxlbiwKKwkJY29uc3Qgc3RydWN0IHBhdGhfc2ltcGxpZnkgKnNpbXBsaWZ5KQogewogCWlmIChzaW1wbGlmeSkgewogCQlmb3IgKDsgc2ltcGxpZnktPnBhdGg7IHNpbXBsaWZ5KyspIHsKIAkJCWlmIChsZW4gPT0gc2ltcGxpZnktPmxlbgogCQkJICAgICYmICFtZW1jbXAocGF0aCwgc2ltcGxpZnktPnBhdGgsIGxlbikpCiAJCQkJcmV0dXJuIDE7CisJCQlpZiAobGVuIDwgc2ltcGxpZnktPmxlbgorCQkJICAgICYmIHNpbXBsaWZ5LT5wYXRoW2xlbl0gPT0gJy8nCisJCQkgICAgJiYgIW1lbWNtcChwYXRoLCBzaW1wbGlmeS0+cGF0aCwgbGVuKSkKKwkJCQlyZXR1cm4gMTsKIAkJfQogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZXRfZHR5cGUoc3RydWN0IGRpcmVudCAqZGUsIGNvbnN0IGNoYXIgKnBhdGgpCitzdGF0aWMgaW50IGdldF9pbmRleF9kdHlwZShjb25zdCBjaGFyICpwYXRoLCBpbnQgbGVuKQoreworCWludCBwb3M7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKworCWNlID0gY2FjaGVfbmFtZV9leGlzdHMocGF0aCwgbGVuLCAwKTsKKwlpZiAoY2UpIHsKKwkJaWYgKCFjZV91cHRvZGF0ZShjZSkpCisJCQlyZXR1cm4gRFRfVU5LTk9XTjsKKwkJaWYgKFNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSkKKwkJCXJldHVybiBEVF9ESVI7CisJCS8qCisJCSAqIE5vYm9keSBhY3R1YWxseSBjYXJlcyBhYm91dCB0aGUKKwkJICogZGlmZmVyZW5jZSBiZXR3ZWVuIERUX0xOSyBhbmQgRFRfUkVHCisJCSAqLworCQlyZXR1cm4gRFRfUkVHOworCX0KKworCS8qIFRyeSB0byBsb29rIGl0IHVwIGFzIGEgZGlyZWN0b3J5ICovCisJcG9zID0gY2FjaGVfbmFtZV9wb3MocGF0aCwgbGVuKTsKKwlpZiAocG9zID49IDApCisJCXJldHVybiBEVF9VTktOT1dOOworCXBvcyA9IC1wb3MtMTsKKwl3aGlsZSAocG9zIDwgYWN0aXZlX25yKSB7CisJCWNlID0gYWN0aXZlX2NhY2hlW3BvcysrXTsKKwkJaWYgKHN0cm5jbXAoY2UtPm5hbWUsIHBhdGgsIGxlbikpCisJCQlicmVhazsKKwkJaWYgKGNlLT5uYW1lW2xlbl0gPiAnLycpCisJCQlicmVhazsKKwkJaWYgKGNlLT5uYW1lW2xlbl0gPCAnLycpCisJCQljb250aW51ZTsKKwkJaWYgKCFjZV91cHRvZGF0ZShjZSkpCisJCQlicmVhazsJLyogY29udGludWU/ICovCisJCXJldHVybiBEVF9ESVI7CisJfQorCXJldHVybiBEVF9VTktOT1dOOworfQorCitzdGF0aWMgaW50IGdldF9kdHlwZShzdHJ1Y3QgZGlyZW50ICpkZSwgY29uc3QgY2hhciAqcGF0aCwgaW50IGxlbikKIHsKIAlpbnQgZHR5cGUgPSBkZSA/IERUWVBFKGRlKSA6IERUX1VOS05PV047CiAJc3RydWN0IHN0YXQgc3Q7CiAKIAlpZiAoZHR5cGUgIT0gRFRfVU5LTk9XTikKIAkJcmV0dXJuIGR0eXBlOworCWR0eXBlID0gZ2V0X2luZGV4X2R0eXBlKHBhdGgsIGxlbik7CisJaWYgKGR0eXBlICE9IERUX1VOS05PV04pCisJCXJldHVybiBkdHlwZTsKIAlpZiAobHN0YXQocGF0aCwgJnN0KSkKIAkJcmV0dXJuIGR0eXBlOwogCWlmIChTX0lTUkVHKHN0LnN0X21vZGUpKQpAQCAtNTY1LDYgKzY4MSw5MiBAQAogCXJldHVybiBkdHlwZTsKIH0KIAorZW51bSBwYXRoX3RyZWF0bWVudCB7CisJcGF0aF9pZ25vcmVkLAorCXBhdGhfaGFuZGxlZCwKKwlwYXRoX3JlY3Vyc2UsCit9OworCitzdGF0aWMgZW51bSBwYXRoX3RyZWF0bWVudCB0cmVhdF9vbmVfcGF0aChzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLAorCQkJCQkgIGNoYXIgKnBhdGgsIGludCAqbGVuLAorCQkJCQkgIGNvbnN0IHN0cnVjdCBwYXRoX3NpbXBsaWZ5ICpzaW1wbGlmeSwKKwkJCQkJICBpbnQgZHR5cGUsIHN0cnVjdCBkaXJlbnQgKmRlKQoreworCWludCBleGNsdWRlID0gZXhjbHVkZWQoZGlyLCBwYXRoLCAmZHR5cGUpOworCWlmIChleGNsdWRlICYmIChkaXItPmZsYWdzICYgRElSX0NPTExFQ1RfSUdOT1JFRCkKKwkgICAgJiYgZXhjbHVkZV9tYXRjaGVzX3BhdGhzcGVjKHBhdGgsICpsZW4sIHNpbXBsaWZ5KSkKKwkJZGlyX2FkZF9pZ25vcmVkKGRpciwgcGF0aCwgKmxlbik7CisKKwkvKgorCSAqIEV4Y2x1ZGVkPyBJZiB3ZSBkb24ndCBleHBsaWNpdGx5IHdhbnQgdG8gc2hvdworCSAqIGlnbm9yZWQgZmlsZXMsIGlnbm9yZSBpdAorCSAqLworCWlmIChleGNsdWRlICYmICEoZGlyLT5mbGFncyAmIERJUl9TSE9XX0lHTk9SRUQpKQorCQlyZXR1cm4gcGF0aF9pZ25vcmVkOworCisJaWYgKGR0eXBlID09IERUX1VOS05PV04pCisJCWR0eXBlID0gZ2V0X2R0eXBlKGRlLCBwYXRoLCAqbGVuKTsKKworCS8qCisJICogRG8gd2Ugd2FudCB0byBzZWUganVzdCB0aGUgaWdub3JlZCBmaWxlcz8KKwkgKiBXZSBzdGlsbCBuZWVkIHRvIHJlY3Vyc2UgaW50byBkaXJlY3RvcmllcywKKwkgKiBldmVuIGlmIHdlIGRvbid0IGlnbm9yZSB0aGVtLCBzaW5jZSB0aGUKKwkgKiBkaXJlY3RvcnkgbWF5IGNvbnRhaW4gZmlsZXMgdGhhdCB3ZSBkby4uCisJICovCisJaWYgKCFleGNsdWRlICYmIChkaXItPmZsYWdzICYgRElSX1NIT1dfSUdOT1JFRCkpIHsKKwkJaWYgKGR0eXBlICE9IERUX0RJUikKKwkJCXJldHVybiBwYXRoX2lnbm9yZWQ7CisJfQorCisJc3dpdGNoIChkdHlwZSkgeworCWRlZmF1bHQ6CisJCXJldHVybiBwYXRoX2lnbm9yZWQ7CisJY2FzZSBEVF9ESVI6CisJCW1lbWNweShwYXRoICsgKmxlbiwgIi8iLCAyKTsKKwkJKCpsZW4pKys7CisJCXN3aXRjaCAodHJlYXRfZGlyZWN0b3J5KGRpciwgcGF0aCwgKmxlbiwgc2ltcGxpZnkpKSB7CisJCWNhc2Ugc2hvd19kaXJlY3Rvcnk6CisJCQlpZiAoZXhjbHVkZSAhPSAhIShkaXItPmZsYWdzCisJCQkJCSAgJiBESVJfU0hPV19JR05PUkVEKSkKKwkJCQlyZXR1cm4gcGF0aF9pZ25vcmVkOworCQkJYnJlYWs7CisJCWNhc2UgcmVjdXJzZV9pbnRvX2RpcmVjdG9yeToKKwkJCXJldHVybiBwYXRoX3JlY3Vyc2U7CisJCWNhc2UgaWdub3JlX2RpcmVjdG9yeToKKwkJCXJldHVybiBwYXRoX2lnbm9yZWQ7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBEVF9SRUc6CisJY2FzZSBEVF9MTks6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcGF0aF9oYW5kbGVkOworfQorCitzdGF0aWMgZW51bSBwYXRoX3RyZWF0bWVudCB0cmVhdF9wYXRoKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJCQkJICAgICAgc3RydWN0IGRpcmVudCAqZGUsCisJCQkJICAgICAgY2hhciAqcGF0aCwgaW50IHBhdGhfbWF4LAorCQkJCSAgICAgIGludCBiYXNlbGVuLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBwYXRoX3NpbXBsaWZ5ICpzaW1wbGlmeSwKKwkJCQkgICAgICBpbnQgKmxlbikKK3sKKwlpbnQgZHR5cGU7CisKKwlpZiAoaXNfZG90X29yX2RvdGRvdChkZS0+ZF9uYW1lKSB8fCAhc3RyY21wKGRlLT5kX25hbWUsICIuZ2l0IikpCisJCXJldHVybiBwYXRoX2lnbm9yZWQ7CisJKmxlbiA9IHN0cmxlbihkZS0+ZF9uYW1lKTsKKwkvKiBJZ25vcmUgb3Zlcmx5IGxvbmcgcGF0aG5hbWVzISAqLworCWlmICgqbGVuICsgYmFzZWxlbiArIDggPiBwYXRoX21heCkKKwkJcmV0dXJuIHBhdGhfaWdub3JlZDsKKwltZW1jcHkocGF0aCArIGJhc2VsZW4sIGRlLT5kX25hbWUsICpsZW4gKyAxKTsKKwkqbGVuICs9IGJhc2VsZW47CisJaWYgKHNpbXBsaWZ5X2F3YXkocGF0aCwgKmxlbiwgc2ltcGxpZnkpKQorCQlyZXR1cm4gcGF0aF9pZ25vcmVkOworCisJZHR5cGUgPSBEVFlQRShkZSk7CisJcmV0dXJuIHRyZWF0X29uZV9wYXRoKGRpciwgcGF0aCwgbGVuLCBzaW1wbGlmeSwgZHR5cGUsIGRlKTsKK30KKwogLyoKICAqIFJlYWQgYSBkaXJlY3RvcnkgdHJlZS4gV2UgY3VycmVudGx5IGlnbm9yZSBhbnl0aGluZyBidXQKICAqIGRpcmVjdG9yaWVzLCByZWd1bGFyIGZpbGVzIGFuZCBzeW1saW5rcy4gVGhhdCdzIGJlY2F1c2UgZ2l0CkBAIC01NzQsODcgKzc3NiwzNyBAQAogICogQWxzbywgd2UgaWdub3JlIHRoZSBuYW1lICIuZ2l0IiAoZXZlbiBpZiBpdCBpcyBub3QgYSBkaXJlY3RvcnkpLgogICogVGhhdCBsaWtlbHkgd2lsbCBub3QgY2hhbmdlLgogICovCi1zdGF0aWMgaW50IHJlYWRfZGlyZWN0b3J5X3JlY3Vyc2l2ZShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpiYXNlLCBpbnQgYmFzZWxlbiwgaW50IGNoZWNrX29ubHksIGNvbnN0IHN0cnVjdCBwYXRoX3NpbXBsaWZ5ICpzaW1wbGlmeSkKK3N0YXRpYyBpbnQgcmVhZF9kaXJlY3RvcnlfcmVjdXJzaXZlKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJCQkJICAgIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLAorCQkJCSAgICBpbnQgY2hlY2tfb25seSwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHBhdGhfc2ltcGxpZnkgKnNpbXBsaWZ5KQogewotCURJUiAqZmRpciA9IG9wZW5kaXIoKnBhdGggPyBwYXRoIDogIi4iKTsKKwlESVIgKmZkaXIgPSBvcGVuZGlyKCpiYXNlID8gYmFzZSA6ICIuIik7CiAJaW50IGNvbnRlbnRzID0gMDsKIAogCWlmIChmZGlyKSB7CiAJCXN0cnVjdCBkaXJlbnQgKmRlOwotCQljaGFyIGZ1bGxuYW1lW1BBVEhfTUFYICsgMV07Ci0JCW1lbWNweShmdWxsbmFtZSwgYmFzZSwgYmFzZWxlbik7CisJCWNoYXIgcGF0aFtQQVRIX01BWCArIDFdOworCQltZW1jcHkocGF0aCwgYmFzZSwgYmFzZWxlbik7CiAKIAkJd2hpbGUgKChkZSA9IHJlYWRkaXIoZmRpcikpICE9IE5VTEwpIHsKLQkJCWludCBsZW4sIGR0eXBlOwotCQkJaW50IGV4Y2x1ZGU7Ci0KLQkJCWlmIChpc19kb3Rfb3JfZG90ZG90KGRlLT5kX25hbWUpIHx8Ci0JCQkgICAgICFzdHJjbXAoZGUtPmRfbmFtZSwgIi5naXQiKSkKKwkJCWludCBsZW47CisJCQlzd2l0Y2ggKHRyZWF0X3BhdGgoZGlyLCBkZSwgcGF0aCwgc2l6ZW9mKHBhdGgpLAorCQkJCQkgICBiYXNlbGVuLCBzaW1wbGlmeSwgJmxlbikpIHsKKwkJCWNhc2UgcGF0aF9yZWN1cnNlOgorCQkJCWNvbnRlbnRzICs9IHJlYWRfZGlyZWN0b3J5X3JlY3Vyc2l2ZQorCQkJCQkoZGlyLCBwYXRoLCBsZW4sIDAsIHNpbXBsaWZ5KTsKIAkJCQljb250aW51ZTsKLQkJCWxlbiA9IHN0cmxlbihkZS0+ZF9uYW1lKTsKLQkJCS8qIElnbm9yZSBvdmVybHkgbG9uZyBwYXRobmFtZXMhICovCi0JCQlpZiAobGVuICsgYmFzZWxlbiArIDggPiBzaXplb2YoZnVsbG5hbWUpKQorCQkJY2FzZSBwYXRoX2lnbm9yZWQ6CiAJCQkJY29udGludWU7Ci0JCQltZW1jcHkoZnVsbG5hbWUgKyBiYXNlbGVuLCBkZS0+ZF9uYW1lLCBsZW4rMSk7Ci0JCQlpZiAoc2ltcGxpZnlfYXdheShmdWxsbmFtZSwgYmFzZWxlbiArIGxlbiwgc2ltcGxpZnkpKQotCQkJCWNvbnRpbnVlOwotCi0JCQlkdHlwZSA9IERUWVBFKGRlKTsKLQkJCWV4Y2x1ZGUgPSBleGNsdWRlZChkaXIsIGZ1bGxuYW1lLCAmZHR5cGUpOwotCQkJaWYgKGV4Y2x1ZGUgJiYgKGRpci0+ZmxhZ3MgJiBESVJfQ09MTEVDVF9JR05PUkVEKQotCQkJICAgICYmIGluX3BhdGhzcGVjKGZ1bGxuYW1lLCBiYXNlbGVuICsgbGVuLCBzaW1wbGlmeSkpCi0JCQkJZGlyX2FkZF9pZ25vcmVkKGRpciwgZnVsbG5hbWUsIGJhc2VsZW4gKyBsZW4pOwotCi0JCQkvKgotCQkJICogRXhjbHVkZWQ/IElmIHdlIGRvbid0IGV4cGxpY2l0bHkgd2FudCB0byBzaG93Ci0JCQkgKiBpZ25vcmVkIGZpbGVzLCBpZ25vcmUgaXQKLQkJCSAqLwotCQkJaWYgKGV4Y2x1ZGUgJiYgIShkaXItPmZsYWdzICYgRElSX1NIT1dfSUdOT1JFRCkpCi0JCQkJY29udGludWU7Ci0KLQkJCWlmIChkdHlwZSA9PSBEVF9VTktOT1dOKQotCQkJCWR0eXBlID0gZ2V0X2R0eXBlKGRlLCBmdWxsbmFtZSk7Ci0KLQkJCS8qCi0JCQkgKiBEbyB3ZSB3YW50IHRvIHNlZSBqdXN0IHRoZSBpZ25vcmVkIGZpbGVzPwotCQkJICogV2Ugc3RpbGwgbmVlZCB0byByZWN1cnNlIGludG8gZGlyZWN0b3JpZXMsCi0JCQkgKiBldmVuIGlmIHdlIGRvbid0IGlnbm9yZSB0aGVtLCBzaW5jZSB0aGUKLQkJCSAqIGRpcmVjdG9yeSBtYXkgY29udGFpbiBmaWxlcyB0aGF0IHdlIGRvLi4KLQkJCSAqLwotCQkJaWYgKCFleGNsdWRlICYmIChkaXItPmZsYWdzICYgRElSX1NIT1dfSUdOT1JFRCkpIHsKLQkJCQlpZiAoZHR5cGUgIT0gRFRfRElSKQotCQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJc3dpdGNoIChkdHlwZSkgewotCQkJZGVmYXVsdDoKLQkJCQljb250aW51ZTsKLQkJCWNhc2UgRFRfRElSOgotCQkJCW1lbWNweShmdWxsbmFtZSArIGJhc2VsZW4gKyBsZW4sICIvIiwgMik7Ci0JCQkJbGVuKys7Ci0JCQkJc3dpdGNoICh0cmVhdF9kaXJlY3RvcnkoZGlyLCBmdWxsbmFtZSwgYmFzZWxlbiArIGxlbiwgc2ltcGxpZnkpKSB7Ci0JCQkJY2FzZSBzaG93X2RpcmVjdG9yeToKLQkJCQkJaWYgKGV4Y2x1ZGUgIT0gISEoZGlyLT5mbGFncwotCQkJCQkJCSYgRElSX1NIT1dfSUdOT1JFRCkpCi0JCQkJCQljb250aW51ZTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSByZWN1cnNlX2ludG9fZGlyZWN0b3J5OgotCQkJCQljb250ZW50cyArPSByZWFkX2RpcmVjdG9yeV9yZWN1cnNpdmUoZGlyLAotCQkJCQkJZnVsbG5hbWUsIGZ1bGxuYW1lLCBiYXNlbGVuICsgbGVuLCAwLCBzaW1wbGlmeSk7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCWNhc2UgaWdub3JlX2RpcmVjdG9yeToKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJY2FzZSBEVF9SRUc6Ci0JCQljYXNlIERUX0xOSzoKKwkJCWNhc2UgcGF0aF9oYW5kbGVkOgogCQkJCWJyZWFrOwogCQkJfQogCQkJY29udGVudHMrKzsKIAkJCWlmIChjaGVja19vbmx5KQogCQkJCWdvdG8gZXhpdF9lYXJseTsKIAkJCWVsc2UKLQkJCQlkaXJfYWRkX25hbWUoZGlyLCBmdWxsbmFtZSwgYmFzZWxlbiArIGxlbik7CisJCQkJZGlyX2FkZF9uYW1lKGRpciwgcGF0aCwgbGVuKTsKIAkJfQogZXhpdF9lYXJseToKIAkJY2xvc2VkaXIoZmRpcik7CkBAIC03MTcsMTUgKzg2OSw1MSBAQAogCWZyZWUoc2ltcGxpZnkpOwogfQogCi1pbnQgcmVhZF9kaXJlY3Rvcnkoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYmFzZSwgaW50IGJhc2VsZW4sIGNvbnN0IGNoYXIgKipwYXRoc3BlYykKK3N0YXRpYyBpbnQgdHJlYXRfbGVhZGluZ19wYXRoKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJCQkgICAgICBjb25zdCBjaGFyICpwYXRoLCBpbnQgbGVuLAorCQkJICAgICAgY29uc3Qgc3RydWN0IHBhdGhfc2ltcGxpZnkgKnNpbXBsaWZ5KQoreworCWNoYXIgcGF0aGJ1ZltQQVRIX01BWF07CisJaW50IGJhc2VsZW4sIGJsZW47CisJY29uc3QgY2hhciAqY3A7CisKKwl3aGlsZSAobGVuICYmIHBhdGhbbGVuIC0gMV0gPT0gJy8nKQorCQlsZW4tLTsKKwlpZiAoIWxlbikKKwkJcmV0dXJuIDE7CisJYmFzZWxlbiA9IDA7CisJd2hpbGUgKDEpIHsKKwkJY3AgPSBwYXRoICsgYmFzZWxlbiArICEhYmFzZWxlbjsKKwkJY3AgPSBtZW1jaHIoY3AsICcvJywgcGF0aCArIGxlbiAtIGNwKTsKKwkJaWYgKCFjcCkKKwkJCWJhc2VsZW4gPSBsZW47CisJCWVsc2UKKwkJCWJhc2VsZW4gPSBjcCAtIHBhdGg7CisJCW1lbWNweShwYXRoYnVmLCBwYXRoLCBiYXNlbGVuKTsKKwkJcGF0aGJ1ZltiYXNlbGVuXSA9ICdcMCc7CisJCWlmICghaXNfZGlyZWN0b3J5KHBhdGhidWYpKQorCQkJcmV0dXJuIDA7CisJCWlmIChzaW1wbGlmeV9hd2F5KHBhdGhidWYsIGJhc2VsZW4sIHNpbXBsaWZ5KSkKKwkJCXJldHVybiAwOworCQlibGVuID0gYmFzZWxlbjsKKwkJaWYgKHRyZWF0X29uZV9wYXRoKGRpciwgcGF0aGJ1ZiwgJmJsZW4sIHNpbXBsaWZ5LAorCQkJCSAgIERUX0RJUiwgTlVMTCkgPT0gcGF0aF9pZ25vcmVkKQorCQkJcmV0dXJuIDA7IC8qIGRvIG5vdCByZWN1cnNlIGludG8gaXQgKi8KKwkJaWYgKGxlbiA8PSBiYXNlbGVuKQorCQkJcmV0dXJuIDE7IC8qIGZpbmlzaGVkIGNoZWNraW5nICovCisJfQorfQorCitpbnQgcmVhZF9kaXJlY3Rvcnkoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgY29uc3QgY2hhciAqcGF0aCwgaW50IGxlbiwgY29uc3QgY2hhciAqKnBhdGhzcGVjKQogewogCXN0cnVjdCBwYXRoX3NpbXBsaWZ5ICpzaW1wbGlmeTsKIAotCWlmIChoYXNfc3ltbGlua19sZWFkaW5nX3BhdGgocGF0aCwgc3RybGVuKHBhdGgpKSkKKwlpZiAoaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKHBhdGgsIGxlbikpCiAJCXJldHVybiBkaXItPm5yOwogCiAJc2ltcGxpZnkgPSBjcmVhdGVfc2ltcGxpZnkocGF0aHNwZWMpOwotCXJlYWRfZGlyZWN0b3J5X3JlY3Vyc2l2ZShkaXIsIHBhdGgsIGJhc2UsIGJhc2VsZW4sIDAsIHNpbXBsaWZ5KTsKKwlpZiAoIWxlbiB8fCB0cmVhdF9sZWFkaW5nX3BhdGgoZGlyLCBwYXRoLCBsZW4sIHNpbXBsaWZ5KSkKKwkJcmVhZF9kaXJlY3RvcnlfcmVjdXJzaXZlKGRpciwgcGF0aCwgbGVuLCAwLCBzaW1wbGlmeSk7CiAJZnJlZV9zaW1wbGlmeShzaW1wbGlmeSk7CiAJcXNvcnQoZGlyLT5lbnRyaWVzLCBkaXItPm5yLCBzaXplb2Yoc3RydWN0IGRpcl9lbnRyeSAqKSwgY21wX25hbWUpOwogCXFzb3J0KGRpci0+aWdub3JlZCwgZGlyLT5pZ25vcmVkX25yLCBzaXplb2Yoc3RydWN0IGRpcl9lbnRyeSAqKSwgY21wX25hbWUpOwpAQCAtNzU5LDcgKzk0Nyw3IEBACiAJaWYgKCFkaXIpCiAJCXJldHVybiBOVUxMOwogCWlmICghZ2V0Y3dkKGJ1ZmZlciwgc2l6ZSkpCi0JCWRpZSgiY2FuJ3QgZmluZCB0aGUgY3VycmVudCBkaXJlY3Rvcnk6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJjYW4ndCBmaW5kIHRoZSBjdXJyZW50IGRpcmVjdG9yeSIpOwogCiAJaWYgKCFpc19hYnNvbHV0ZV9wYXRoKGRpcikpCiAJCWRpciA9IG1ha2VfYWJzb2x1dGVfcGF0aChkaXIpOwpAQCAtODAwLDEyICs5ODgsMjAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseShzdHJ1Y3Qgc3RyYnVmICpwYXRoLCBpbnQgb25seV9lbXB0eSkKK2ludCByZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5KHN0cnVjdCBzdHJidWYgKnBhdGgsIGludCBmbGFnKQogewotCURJUiAqZGlyID0gb3BlbmRpcihwYXRoLT5idWYpOworCURJUiAqZGlyOwogCXN0cnVjdCBkaXJlbnQgKmU7CiAJaW50IHJldCA9IDAsIG9yaWdpbmFsX2xlbiA9IHBhdGgtPmxlbiwgbGVuOworCWludCBvbmx5X2VtcHR5ID0gKGZsYWcgJiBSRU1PVkVfRElSX0VNUFRZX09OTFkpOworCXVuc2lnbmVkIGNoYXIgc3VibW9kdWxlX2hlYWRbMjBdOwogCisJaWYgKChmbGFnICYgUkVNT1ZFX0RJUl9LRUVQX05FU1RFRF9HSVQpICYmCisJICAgICFyZXNvbHZlX2dpdGxpbmtfcmVmKHBhdGgtPmJ1ZiwgIkhFQUQiLCBzdWJtb2R1bGVfaGVhZCkpCisJCS8qIERvIG5vdCBkZXNjZW5kIGFuZCBudWtlIGEgbmVzdGVkIGdpdCB3b3JrIHRyZWUuICovCisJCXJldHVybiAwOworCisJZGlyID0gb3BlbmRpcihwYXRoLT5idWYpOwogCWlmICghZGlyKQogCQlyZXR1cm4gLTE7CiAJaWYgKHBhdGgtPmJ1ZltvcmlnaW5hbF9sZW4gLSAxXSAhPSAnLycpCkBAIC04NjQsNyArMTA2MCw3IEBACiAJCXNsYXNoID0gZGlycyArIChzbGFzaCAtIG5hbWUpOwogCQlkbyB7CiAJCQkqc2xhc2ggPSAnXDAnOwotCQl9IHdoaWxlIChybWRpcihkaXJzKSAmJiAoc2xhc2ggPSBzdHJyY2hyKGRpcnMsICcvJykpKTsKKwkJfSB3aGlsZSAocm1kaXIoZGlycykgPT0gMCAmJiAoc2xhc2ggPSBzdHJyY2hyKGRpcnMsICcvJykpKTsKIAkJZnJlZShkaXJzKTsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kaXIuaCBiL2Rpci5oCmluZGV4IDU0MTI4NmEuLjNiZWFkNWYgMTAwNjQ0Ci0tLSBhL2Rpci5oCisrKyBiL2Rpci5oCkBAIC02MSwxNiArNjEsMTkgQEAKIAljaGFyIGJhc2VidWZbUEFUSF9NQVhdOwogfTsKIAotZXh0ZXJuIGludCBjb21tb25fcHJlZml4KGNvbnN0IGNoYXIgKipwYXRoc3BlYyk7Ci0KICNkZWZpbmUgTUFUQ0hFRF9SRUNVUlNJVkVMWSAxCiAjZGVmaW5lIE1BVENIRURfRk5NQVRDSCAyCiAjZGVmaW5lIE1BVENIRURfRVhBQ1RMWSAzCiBleHRlcm4gaW50IG1hdGNoX3BhdGhzcGVjKGNvbnN0IGNoYXIgKipwYXRoc3BlYywgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGludCBwcmVmaXgsIGNoYXIgKnNlZW4pOwogCi1leHRlcm4gaW50IHJlYWRfZGlyZWN0b3J5KHN0cnVjdCBkaXJfc3RydWN0ICosIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLCBjb25zdCBjaGFyICoqcGF0aHNwZWMpOworZXh0ZXJuIGludCBmaWxsX2RpcmVjdG9yeShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBjb25zdCBjaGFyICoqcGF0aHNwZWMpOworZXh0ZXJuIGludCByZWFkX2RpcmVjdG9yeShzdHJ1Y3QgZGlyX3N0cnVjdCAqLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgbGVuLCBjb25zdCBjaGFyICoqcGF0aHNwZWMpOwogCitleHRlcm4gaW50IGV4Y2x1ZGVkX2Zyb21fbGlzdChjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IHBhdGhsZW4sIGNvbnN0IGNoYXIgKmJhc2VuYW1lLAorCQkJICAgICAgaW50ICpkdHlwZSwgc3RydWN0IGV4Y2x1ZGVfbGlzdCAqZWwpOwogZXh0ZXJuIGludCBleGNsdWRlZChzdHJ1Y3QgZGlyX3N0cnVjdCAqLCBjb25zdCBjaGFyICosIGludCAqKTsKK2V4dGVybiBpbnQgYWRkX2V4Y2x1ZGVzX2Zyb21fZmlsZV90b19saXN0KGNvbnN0IGNoYXIgKmZuYW1lLCBjb25zdCBjaGFyICpiYXNlLCBpbnQgYmFzZWxlbiwKKwkJCQkJICBjaGFyICoqYnVmX3AsIHN0cnVjdCBleGNsdWRlX2xpc3QgKndoaWNoLCBpbnQgY2hlY2tfaW5kZXgpOwogZXh0ZXJuIHZvaWQgYWRkX2V4Y2x1ZGVzX2Zyb21fZmlsZShzdHJ1Y3QgZGlyX3N0cnVjdCAqLCBjb25zdCBjaGFyICpmbmFtZSk7CiBleHRlcm4gdm9pZCBhZGRfZXhjbHVkZShjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKmJhc2UsCiAJCQlpbnQgYmFzZWxlbiwgc3RydWN0IGV4Y2x1ZGVfbGlzdCAqd2hpY2gpOwpAQCAtODksNyArOTIsMTAgQEAKIGV4dGVybiBpbnQgaXNfZW1wdHlfZGlyKGNvbnN0IGNoYXIgKmRpcik7CiAKIGV4dGVybiB2b2lkIHNldHVwX3N0YW5kYXJkX2V4Y2x1ZGVzKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIpOwotZXh0ZXJuIGludCByZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5KHN0cnVjdCBzdHJidWYgKnBhdGgsIGludCBvbmx5X2VtcHR5KTsKKworI2RlZmluZSBSRU1PVkVfRElSX0VNUFRZX09OTFkgMDEKKyNkZWZpbmUgUkVNT1ZFX0RJUl9LRUVQX05FU1RFRF9HSVQgMDIKK2V4dGVybiBpbnQgcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseShzdHJ1Y3Qgc3RyYnVmICpwYXRoLCBpbnQgZmxhZyk7CiAKIC8qIHRyaWVzIHRvIHJlbW92ZSB0aGUgcGF0aCB3aXRoIGVtcHR5IGRpcmVjdG9yaWVzIGFsb25nIGl0LCBpZ25vcmVzIEVOT0VOVCAqLwogZXh0ZXJuIGludCByZW1vdmVfcGF0aChjb25zdCBjaGFyICpwYXRoKTsKZGlmZiAtLWdpdCBhL2VkaXRvci5jIGIvZWRpdG9yLmMKaW5kZXggNGQ0NjlkMC4uZDgzNDAwMyAxMDA2NDQKLS0tIGEvZWRpdG9yLmMKKysrIGIvZWRpdG9yLmMKQEAgLTIsNDYgKzIsNDMgQEAKICNpbmNsdWRlICJzdHJidWYuaCIKICNpbmNsdWRlICJydW4tY29tbWFuZC5oIgogCi1pbnQgbGF1bmNoX2VkaXRvcihjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RyYnVmICpidWZmZXIsIGNvbnN0IGNoYXIgKmNvbnN0ICplbnYpCi17Ci0JY29uc3QgY2hhciAqZWRpdG9yLCAqdGVybWluYWw7CisjaWZuZGVmIERFRkFVTFRfRURJVE9SCisjZGVmaW5lIERFRkFVTFRfRURJVE9SICJ2aSIKKyNlbmRpZgogCi0JZWRpdG9yID0gZ2V0ZW52KCJHSVRfRURJVE9SIik7Citjb25zdCBjaGFyICpnaXRfZWRpdG9yKHZvaWQpCit7CisJY29uc3QgY2hhciAqZWRpdG9yID0gZ2V0ZW52KCJHSVRfRURJVE9SIik7CisJY29uc3QgY2hhciAqdGVybWluYWwgPSBnZXRlbnYoIlRFUk0iKTsKKwlpbnQgdGVybWluYWxfaXNfZHVtYiA9ICF0ZXJtaW5hbCB8fCAhc3RyY21wKHRlcm1pbmFsLCAiZHVtYiIpOworCiAJaWYgKCFlZGl0b3IgJiYgZWRpdG9yX3Byb2dyYW0pCiAJCWVkaXRvciA9IGVkaXRvcl9wcm9ncmFtOwotCWlmICghZWRpdG9yKQorCWlmICghZWRpdG9yICYmICF0ZXJtaW5hbF9pc19kdW1iKQogCQllZGl0b3IgPSBnZXRlbnYoIlZJU1VBTCIpOwogCWlmICghZWRpdG9yKQogCQllZGl0b3IgPSBnZXRlbnYoIkVESVRPUiIpOwogCi0JdGVybWluYWwgPSBnZXRlbnYoIlRFUk0iKTsKLQlpZiAoIWVkaXRvciAmJiAoIXRlcm1pbmFsIHx8ICFzdHJjbXAodGVybWluYWwsICJkdW1iIikpKQotCQlyZXR1cm4gZXJyb3IoIlRlcm1pbmFsIGlzIGR1bWIgYnV0IG5vIFZJU1VBTCBub3IgRURJVE9SIGRlZmluZWQuIik7CisJaWYgKCFlZGl0b3IgJiYgdGVybWluYWxfaXNfZHVtYikKKwkJcmV0dXJuIE5VTEw7CiAKIAlpZiAoIWVkaXRvcikKLQkJZWRpdG9yID0gInZpIjsKKwkJZWRpdG9yID0gREVGQVVMVF9FRElUT1I7CisKKwlyZXR1cm4gZWRpdG9yOworfQorCitpbnQgbGF1bmNoX2VkaXRvcihjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RyYnVmICpidWZmZXIsIGNvbnN0IGNoYXIgKmNvbnN0ICplbnYpCit7CisJY29uc3QgY2hhciAqZWRpdG9yID0gZ2l0X2VkaXRvcigpOworCisJaWYgKCFlZGl0b3IpCisJCXJldHVybiBlcnJvcigiVGVybWluYWwgaXMgZHVtYiwgYnV0IEVESVRPUiB1bnNldCIpOwogCiAJaWYgKHN0cmNtcChlZGl0b3IsICI6IikpIHsKLQkJc2l6ZV90IGxlbiA9IHN0cmxlbihlZGl0b3IpOwotCQlpbnQgaSA9IDA7Ci0JCWludCBmYWlsZWQ7Ci0JCWNvbnN0IGNoYXIgKmFyZ3NbNl07Ci0JCXN0cnVjdCBzdHJidWYgYXJnMCA9IFNUUkJVRl9JTklUOworCQljb25zdCBjaGFyICphcmdzW10gPSB7IGVkaXRvciwgcGF0aCwgTlVMTCB9OwogCi0JCWlmIChzdHJjc3BuKGVkaXRvciwgIiQgXHQnIikgIT0gbGVuKSB7Ci0JCQkvKiB0aGVyZSBhcmUgc3BlY2lhbHMgKi8KLQkJCXN0cmJ1Zl9hZGRmKCZhcmcwLCAiJXMgXCIkQFwiIiwgZWRpdG9yKTsKLQkJCWFyZ3NbaSsrXSA9ICJzaCI7Ci0JCQlhcmdzW2krK10gPSAiLWMiOwotCQkJYXJnc1tpKytdID0gYXJnMC5idWY7Ci0JCX0KLQkJYXJnc1tpKytdID0gZWRpdG9yOwotCQlhcmdzW2krK10gPSBwYXRoOwotCQlhcmdzW2ldID0gTlVMTDsKLQotCQlmYWlsZWQgPSBydW5fY29tbWFuZF92X29wdF9jZF9lbnYoYXJncywgMCwgTlVMTCwgZW52KTsKLQkJc3RyYnVmX3JlbGVhc2UoJmFyZzApOwotCQlpZiAoZmFpbGVkKQorCQlpZiAocnVuX2NvbW1hbmRfdl9vcHRfY2RfZW52KGFyZ3MsIFJVTl9VU0lOR19TSEVMTCwgTlVMTCwgZW52KSkKIAkJCXJldHVybiBlcnJvcigiVGhlcmUgd2FzIGEgcHJvYmxlbSB3aXRoIHRoZSBlZGl0b3IgJyVzJy4iLAogCQkJCQllZGl0b3IpOwogCX0KZGlmZiAtLWdpdCBhL2VudHJ5LmMgYi9lbnRyeS5jCmluZGV4IGNjODQxZWQuLjAwNDE4MmMgMTAwNjQ0Ci0tLSBhL2VudHJ5LmMKKysrIGIvZW50cnkuYwpAQCAtMzcsNyArMzcsNyBAQAogCQkJaWYgKGVycm5vID09IEVFWElTVCAmJiBzdGF0ZS0+Zm9yY2UgJiYKIAkJCSAgICAhdW5saW5rX29yX3dhcm4oYnVmKSAmJiAhbWtkaXIoYnVmLCAwNzc3KSkKIAkJCQljb250aW51ZTsKLQkJCWRpZSgiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgYXQgJXMiLCBidWYpOworCQkJZGllX2Vycm5vKCJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBhdCAnJXMnIiwgYnVmKTsKIAkJfQogCX0KIAlmcmVlKGJ1Zik7CkBAIC01MSw3ICs1MSw3IEBACiAJY2hhciAqbmFtZTsKIAogCWlmICghZGlyKQotCQlkaWUoImNhbm5vdCBvcGVuZGlyICVzICglcykiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImNhbm5vdCBvcGVuZGlyICclcyciLCBwYXRoKTsKIAlzdHJjcHkocGF0aGJ1ZiwgcGF0aCk7CiAJbmFtZSA9IHBhdGhidWYgKyBzdHJsZW4ocGF0aCk7CiAJKm5hbWUrKyA9ICcvJzsKQEAgLTYxLDE1ICs2MSwxNSBAQAogCQkJY29udGludWU7CiAJCXN0cmNweShuYW1lLCBkZS0+ZF9uYW1lKTsKIAkJaWYgKGxzdGF0KHBhdGhidWYsICZzdCkpCi0JCQlkaWUoImNhbm5vdCBsc3RhdCAlcyAoJXMpIiwgcGF0aGJ1Ziwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygiY2Fubm90IGxzdGF0ICclcyciLCBwYXRoYnVmKTsKIAkJaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpCiAJCQlyZW1vdmVfc3VidHJlZShwYXRoYnVmKTsKIAkJZWxzZSBpZiAodW5saW5rKHBhdGhidWYpKQotCQkJZGllKCJjYW5ub3QgdW5saW5rICVzICglcykiLCBwYXRoYnVmLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJjYW5ub3QgdW5saW5rICclcyciLCBwYXRoYnVmKTsKIAl9CiAJY2xvc2VkaXIoZGlyKTsKIAlpZiAocm1kaXIocGF0aCkpCi0JCWRpZSgiY2Fubm90IHJtZGlyICVzICglcykiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImNhbm5vdCBybWRpciAnJXMnIiwgcGF0aCk7CiB9CiAKIHN0YXRpYyBpbnQgY3JlYXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgaW50IG1vZGUpCkBAIC0xNzUsNiArMTc1LDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBUaGlzIGlzIGxpa2UgJ2xzdGF0KCknLCBleGNlcHQgaXQgcmVmdXNlcyB0byBmb2xsb3cgc3ltbGlua3MKKyAqIGluIHRoZSBwYXRoLCBhZnRlciBza2lwcGluZyAic2tpcGxlbiIuCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfcGF0aChjb25zdCBjaGFyICpwYXRoLCBpbnQgbGVuLCBzdHJ1Y3Qgc3RhdCAqc3QsIGludCBza2lwbGVuKQoreworCWNvbnN0IGNoYXIgKnNsYXNoID0gcGF0aCArIGxlbjsKKworCXdoaWxlIChwYXRoIDwgc2xhc2ggJiYgKnNsYXNoICE9ICcvJykKKwkJc2xhc2gtLTsKKwlpZiAoIWhhc19kaXJzX29ubHlfcGF0aChwYXRoLCBzbGFzaCAtIHBhdGgsIHNraXBsZW4pKSB7CisJCWVycm5vID0gRU5PRU5UOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiBsc3RhdChwYXRoLCBzdCk7Cit9CisKIGludCBjaGVja291dF9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBjb25zdCBzdHJ1Y3QgY2hlY2tvdXQgKnN0YXRlLCBjaGFyICp0b3BhdGgpCiB7CiAJc3RhdGljIGNoYXIgcGF0aFtQQVRIX01BWCArIDFdOwpAQCAtMTg4LDggKzIwNSw4IEBACiAJc3RyY3B5KHBhdGggKyBsZW4sIGNlLT5uYW1lKTsKIAlsZW4gKz0gY2VfbmFtZWxlbihjZSk7CiAKLQlpZiAoIWxzdGF0KHBhdGgsICZzdCkpIHsKLQkJdW5zaWduZWQgY2hhbmdlZCA9IGNlX21hdGNoX3N0YXQoY2UsICZzdCwgQ0VfTUFUQ0hfSUdOT1JFX1ZBTElEKTsKKwlpZiAoIWNoZWNrX3BhdGgocGF0aCwgbGVuLCAmc3QsIHN0YXRlLT5iYXNlX2Rpcl9sZW4pKSB7CisJCXVuc2lnbmVkIGNoYW5nZWQgPSBjZV9tYXRjaF9zdGF0KGNlLCAmc3QsIENFX01BVENIX0lHTk9SRV9WQUxJRHxDRV9NQVRDSF9JR05PUkVfU0tJUF9XT1JLVFJFRSk7CiAJCWlmICghY2hhbmdlZCkKIAkJCXJldHVybiAwOwogCQlpZiAoIXN0YXRlLT5mb3JjZSkgewpkaWZmIC0tZ2l0IGEvZW52aXJvbm1lbnQuYyBiL2Vudmlyb25tZW50LmMKaW5kZXggODAxYTAwNS4uODc2YzVlNSAxMDA2NDQKLS0tIGEvZW52aXJvbm1lbnQuYworKysgYi9lbnZpcm9ubWVudC5jCkBAIC0yNiw2ICsyNiw3IEBACiBjb25zdCBjaGFyICpnaXRfbG9nX291dHB1dF9lbmNvZGluZzsKIGludCBzaGFyZWRfcmVwb3NpdG9yeSA9IFBFUk1fVU1BU0s7CiBjb25zdCBjaGFyICphcHBseV9kZWZhdWx0X3doaXRlc3BhY2U7Citjb25zdCBjaGFyICphcHBseV9kZWZhdWx0X2lnbm9yZXdoaXRlc3BhY2U7CiBpbnQgemxpYl9jb21wcmVzc2lvbl9sZXZlbCA9IFpfQkVTVF9TUEVFRDsKIGludCBjb3JlX2NvbXByZXNzaW9uX2xldmVsOwogaW50IGNvcmVfY29tcHJlc3Npb25fc2VlbjsKQEAgLTM4LDE1ICszOSwxOSBAQAogY29uc3QgY2hhciAqZWRpdG9yX3Byb2dyYW07CiBjb25zdCBjaGFyICpleGNsdWRlc19maWxlOwogaW50IGF1dG9fY3JsZiA9IDA7CS8qIDE6IGJvdGggd2F5cywgLTE6IG9ubHkgd2hlbiBhZGRpbmcgZ2l0IG9iamVjdHMgKi8KK2ludCByZWFkX3JlcGxhY2VfcmVmcyA9IDE7CiBlbnVtIHNhZmVfY3JsZiBzYWZlX2NybGYgPSBTQUZFX0NSTEZfV0FSTjsKIHVuc2lnbmVkIHdoaXRlc3BhY2VfcnVsZV9jZmcgPSBXU19ERUZBVUxUX1JVTEU7CiBlbnVtIGJyYW5jaF90cmFjayBnaXRfYnJhbmNoX3RyYWNrID0gQlJBTkNIX1RSQUNLX1JFTU9URTsKIGVudW0gcmViYXNlX3NldHVwX3R5cGUgYXV0b3JlYmFzZSA9IEFVVE9SRUJBU0VfTkVWRVI7Ci1lbnVtIHB1c2hfZGVmYXVsdF90eXBlIHB1c2hfZGVmYXVsdCA9IFBVU0hfREVGQVVMVF9VTlNQRUNJRklFRDsKK2VudW0gcHVzaF9kZWZhdWx0X3R5cGUgcHVzaF9kZWZhdWx0ID0gUFVTSF9ERUZBVUxUX01BVENISU5HOwogI2lmbmRlZiBPQkpFQ1RfQ1JFQVRJT05fTU9ERQogI2RlZmluZSBPQkpFQ1RfQ1JFQVRJT05fTU9ERSBPQkpFQ1RfQ1JFQVRJT05fVVNFU19IQVJETElOS1MKICNlbmRpZgogZW51bSBvYmplY3RfY3JlYXRpb25fbW9kZSBvYmplY3RfY3JlYXRpb25fbW9kZSA9IE9CSkVDVF9DUkVBVElPTl9NT0RFOworY2hhciAqbm90ZXNfcmVmX25hbWU7CitpbnQgZ3JhZnRzX3JlcGxhY2VfcGFyZW50cyA9IDE7CitpbnQgY29yZV9hcHBseV9zcGFyc2VfY2hlY2tvdXQ7CiAKIC8qIFBhcmFsbGVsIGluZGV4IHN0YXQgZGF0YSBwcmVsb2FkPyAqLwogaW50IGNvcmVfcHJlbG9hZF9pbmRleCA9IDA7CkBAIC01OCw2ICs2MywyMyBAQAogc3RhdGljIGNvbnN0IGNoYXIgKmdpdF9kaXI7CiBzdGF0aWMgY2hhciAqZ2l0X29iamVjdF9kaXIsICpnaXRfaW5kZXhfZmlsZSwgKmdpdF9yZWZzX2RpciwgKmdpdF9ncmFmdF9maWxlOwogCisvKgorICogUmVwb3NpdG9yeS1sb2NhbCBHSVRfKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAqIFJlbWVtYmVyIHRvIHVwZGF0ZSBsb2NhbF9yZXBvX2Vudl9zaXplIGluIGNhY2hlLmggd2hlbgorICogdGhlIHNpemUgb2YgdGhlIGxpc3QgY2hhbmdlcworICovCitjb25zdCBjaGFyICogY29uc3QgbG9jYWxfcmVwb19lbnZbTE9DQUxfUkVQT19FTlZfU0laRSArIDFdID0geworCUFMVEVSTkFURV9EQl9FTlZJUk9OTUVOVCwKKwlDT05GSUdfRU5WSVJPTk1FTlQsCisJREJfRU5WSVJPTk1FTlQsCisJR0lUX0RJUl9FTlZJUk9OTUVOVCwKKwlHSVRfV09SS19UUkVFX0VOVklST05NRU5ULAorCUdSQUZUX0VOVklST05NRU5ULAorCUlOREVYX0VOVklST05NRU5ULAorCU5PX1JFUExBQ0VfT0JKRUNUU19FTlZJUk9OTUVOVCwKKwlOVUxMCit9OworCiBzdGF0aWMgdm9pZCBzZXR1cF9naXRfZW52KHZvaWQpCiB7CiAJZ2l0X2RpciA9IGdldGVudihHSVRfRElSX0VOVklST05NRU5UKTsKQEAgLTgwLDYgKzEwMiw4IEBACiAJZ2l0X2dyYWZ0X2ZpbGUgPSBnZXRlbnYoR1JBRlRfRU5WSVJPTk1FTlQpOwogCWlmICghZ2l0X2dyYWZ0X2ZpbGUpCiAJCWdpdF9ncmFmdF9maWxlID0gZ2l0X3BhdGhkdXAoImluZm8vZ3JhZnRzIik7CisJaWYgKGdldGVudihOT19SRVBMQUNFX09CSkVDVFNfRU5WSVJPTk1FTlQpKQorCQlyZWFkX3JlcGxhY2VfcmVmcyA9IDA7CiB9CiAKIGludCBpc19iYXJlX3JlcG9zaXRvcnkodm9pZCkKZGlmZiAtLWdpdCBhL2Zhc3QtaW1wb3J0LmMgYi9mYXN0LWltcG9ydC5jCmluZGV4IGEyYTI0NTguLjc0ZjA4YmQgMTAwNjQ0Ci0tLSBhL2Zhc3QtaW1wb3J0LmMKKysrIGIvZmFzdC1pbXBvcnQuYwpAQCAtMTksMTEgKzE5LDExIEBACiAKICAgbmV3X2NvbW1pdCA6Oj0gJ2NvbW1pdCcgc3AgcmVmX3N0ciBsZgogICAgIG1hcms/Ci0gICAgKCdhdXRob3InIHNwIG5hbWUgc3AgJzwnIGVtYWlsICc+JyBzcCB3aGVuIGxmKT8KLSAgICAnY29tbWl0dGVyJyBzcCBuYW1lIHNwICc8JyBlbWFpbCAnPicgc3Agd2hlbiBsZgorICAgICgnYXV0aG9yJyAoc3AgbmFtZSk/IHNwICc8JyBlbWFpbCAnPicgc3Agd2hlbiBsZik/CisgICAgJ2NvbW1pdHRlcicgKHNwIG5hbWUpPyBzcCAnPCcgZW1haWwgJz4nIHNwIHdoZW4gbGYKICAgICBjb21taXRfbXNnCi0gICAgKCdmcm9tJyBzcCAocmVmX3N0ciB8IGhleHNoYTEgfCBzaGExZXhwX3N0ciB8IGlkbnVtKSBsZik/Ci0gICAgKCdtZXJnZScgc3AgKHJlZl9zdHIgfCBoZXhzaGExIHwgc2hhMWV4cF9zdHIgfCBpZG51bSkgbGYpKgorICAgICgnZnJvbScgc3AgY29tbWl0dGlzaCBsZik/CisgICAgKCdtZXJnZScgc3AgY29tbWl0dGlzaCBsZikqCiAgICAgZmlsZV9jaGFuZ2UqCiAgICAgbGY/OwogICBjb21taXRfbXNnIDo6PSBkYXRhOwpAQCAtNDEsMTUgKzQxLDE4IEBACiAgIGZpbGVfb2JtIDo6PSAnTScgc3AgbW9kZSBzcCAoaGV4c2hhMSB8IGlkbnVtKSBzcCBwYXRoX3N0ciBsZjsKICAgZmlsZV9pbm0gOjo9ICdNJyBzcCBtb2RlIHNwICdpbmxpbmUnIHNwIHBhdGhfc3RyIGxmCiAgICAgZGF0YTsKKyAgbm90ZV9vYm0gOjo9ICdOJyBzcCAoaGV4c2hhMSB8IGlkbnVtKSBzcCBjb21taXR0aXNoIGxmOworICBub3RlX2lubSA6Oj0gJ04nIHNwICdpbmxpbmUnIHNwIGNvbW1pdHRpc2ggbGYKKyAgICBkYXRhOwogCiAgIG5ld190YWcgOjo9ICd0YWcnIHNwIHRhZ19zdHIgbGYKLSAgICAnZnJvbScgc3AgKHJlZl9zdHIgfCBoZXhzaGExIHwgc2hhMWV4cF9zdHIgfCBpZG51bSkgbGYKLSAgICAoJ3RhZ2dlcicgc3AgbmFtZSBzcCAnPCcgZW1haWwgJz4nIHNwIHdoZW4gbGYpPworICAgICdmcm9tJyBzcCBjb21taXR0aXNoIGxmCisgICAgKCd0YWdnZXInIChzcCBuYW1lKT8gc3AgJzwnIGVtYWlsICc+JyBzcCB3aGVuIGxmKT8KICAgICB0YWdfbXNnOwogICB0YWdfbXNnIDo6PSBkYXRhOwogCiAgIHJlc2V0X2JyYW5jaCA6Oj0gJ3Jlc2V0JyBzcCByZWZfc3RyIGxmCi0gICAgKCdmcm9tJyBzcCAocmVmX3N0ciB8IGhleHNoYTEgfCBzaGExZXhwX3N0ciB8IGlkbnVtKSBsZik/CisgICAgKCdmcm9tJyBzcCBjb21taXR0aXNoIGxmKT8KICAgICBsZj87CiAKICAgY2hlY2twb2ludCA6Oj0gJ2NoZWNrcG9pbnQnIGxmCkBAIC04OCw2ICs5MSw3IEBACiAgICAgICMgc3RyZWFtIGZvcm1hdHRpbmcgaXM6IFwsICIgYW5kIExGLiAgT3RoZXJ3aXNlIHRoZXNlIHZhbHVlcwogICAgICAjIGFyZSBVVEY4LgogICAgICAjCisgIGNvbW1pdHRpc2ggIDo6PSAocmVmX3N0ciB8IGhleHNoYTEgfCBzaGExZXhwX3N0ciB8IGlkbnVtKTsKICAgcmVmX3N0ciAgICAgOjo9IHJlZjsKICAgc2hhMWV4cF9zdHIgOjo9IHNoYTFleHA7CiAgIHRhZ19zdHIgICAgIDo6PSB0YWc7CkBAIC0xNjAsMTIgKzE2NCwxMSBAQAogCiBzdHJ1Y3Qgb2JqZWN0X2VudHJ5CiB7CisJc3RydWN0IHBhY2tfaWR4X2VudHJ5IGlkeDsKIAlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpuZXh0OwotCXVpbnQzMl90IG9mZnNldDsKIAl1aW50MzJfdCB0eXBlIDogVFlQRV9CSVRTLAogCQlwYWNrX2lkIDogUEFDS19JRF9CSVRTLAogCQlkZXB0aCA6IERFUFRIX0JJVFM7Ci0JdW5zaWduZWQgY2hhciBzaGExWzIwXTsKIH07CiAKIHN0cnVjdCBvYmplY3RfZW50cnlfcG9vbApAQCAtMTg4LDcgKzE5MSw3IEBACiBzdHJ1Y3QgbGFzdF9vYmplY3QKIHsKIAlzdHJ1Y3Qgc3RyYnVmIGRhdGE7Ci0JdWludDMyX3Qgb2Zmc2V0OworCW9mZl90IG9mZnNldDsKIAl1bnNpZ25lZCBpbnQgZGVwdGg7CiAJdW5zaWduZWQgbm9fc3dhcCA6IDE7CiB9OwpAQCAtMjQxLDYgKzI0NCw3IEBACiAJY29uc3QgY2hhciAqbmFtZTsKIAlzdHJ1Y3QgdHJlZV9lbnRyeSBicmFuY2hfdHJlZTsKIAl1aW50bWF4X3QgbGFzdF9jb21taXQ7CisJdWludG1heF90IG51bV9ub3RlczsKIAl1bnNpZ25lZCBhY3RpdmUgOiAxOwogCXVuc2lnbmVkIHBhY2tfaWQgOiBQQUNLX0lEX0JJVFM7CiAJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKQEAgLTI3NSw3ICsyNzksOCBAQAogCiAvKiBDb25maWd1cmVkIGxpbWl0cyBvbiBvdXRwdXQgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1heF9kZXB0aCA9IDEwOwotc3RhdGljIG9mZl90IG1heF9wYWNrc2l6ZSA9ICgxTEwgPDwgMzIpIC0gMTsKK3N0YXRpYyBvZmZfdCBtYXhfcGFja3NpemU7CitzdGF0aWMgdWludG1heF90IGJpZ19maWxlX3RocmVzaG9sZCA9IDUxMiAqIDEwMjQgKiAxMDI0Owogc3RhdGljIGludCBmb3JjZV91cGRhdGU7CiBzdGF0aWMgaW50IHBhY2tfY29tcHJlc3Npb25fbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047CiBzdGF0aWMgaW50IHBhY2tfY29tcHJlc3Npb25fc2VlbjsKQEAgLTI5MSw2ICsyOTYsOSBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYnJhbmNoX2xvYWRfY291bnQ7CiBzdGF0aWMgaW50IGZhaWx1cmU7CiBzdGF0aWMgRklMRSAqcGFja19lZGdlczsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2hvd19zdGF0cyA9IDE7CitzdGF0aWMgaW50IGdsb2JhbF9hcmdjOworc3RhdGljIGNvbnN0IGNoYXIgKipnbG9iYWxfYXJndjsKIAogLyogTWVtb3J5IHBvb2xzICovCiBzdGF0aWMgc2l6ZV90IG1lbV9wb29sX2FsbG9jID0gMioxMDI0KjEwMjQgLSBzaXplb2Yoc3RydWN0IG1lbV9wb29sKTsKQEAgLTMwNCwxNiArMzEyLDIwIEBACiAKIC8qIFRoZSAucGFjayBmaWxlIGJlaW5nIGdlbmVyYXRlZCAqLwogc3RhdGljIHVuc2lnbmVkIGludCBwYWNrX2lkOworc3RhdGljIHN0cnVjdCBzaGExZmlsZSAqcGFja19maWxlOwogc3RhdGljIHN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrX2RhdGE7CiBzdGF0aWMgc3RydWN0IHBhY2tlZF9naXQgKiphbGxfcGFja3M7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYWNrX3NpemU7CitzdGF0aWMgb2ZmX3QgcGFja19zaXplOwogCiAvKiBUYWJsZSBvZiBvYmplY3RzIHdlJ3ZlIHdyaXR0ZW4uICovCiBzdGF0aWMgdW5zaWduZWQgaW50IG9iamVjdF9lbnRyeV9hbGxvYyA9IDUwMDA7CiBzdGF0aWMgc3RydWN0IG9iamVjdF9lbnRyeV9wb29sICpibG9ja3M7CiBzdGF0aWMgc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqZWN0X3RhYmxlWzEgPDwgMTZdOwogc3RhdGljIHN0cnVjdCBtYXJrX3NldCAqbWFya3M7Ci1zdGF0aWMgY29uc3QgY2hhciAqbWFya19maWxlOworc3RhdGljIGNvbnN0IGNoYXIgKmV4cG9ydF9tYXJrc19maWxlOworc3RhdGljIGNvbnN0IGNoYXIgKmltcG9ydF9tYXJrc19maWxlOworc3RhdGljIGludCBpbXBvcnRfbWFya3NfZmlsZV9mcm9tX3N0cmVhbTsKK3N0YXRpYyBpbnQgcmVsYXRpdmVfbWFya3NfcGF0aHM7CiAKIC8qIE91ciBsYXN0IGJsb2IgKi8KIHN0YXRpYyBzdHJ1Y3QgbGFzdF9vYmplY3QgbGFzdF9ibG9iID0geyBTVFJCVUZfSU5JVCwgMCwgMCwgMCB9OwpAQCAtMzQ3LDYgKzM1OSw5IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGNtZF9zYXZlID0gMTAwOwogc3RhdGljIHVpbnRtYXhfdCBuZXh0X21hcms7CiBzdGF0aWMgc3RydWN0IHN0cmJ1ZiBuZXdfZGF0YSA9IFNUUkJVRl9JTklUOworc3RhdGljIGludCBzZWVuX2RhdGFfY29tbWFuZDsKKworc3RhdGljIHZvaWQgcGFyc2VfYXJndih2b2lkKTsKIAogc3RhdGljIHZvaWQgd3JpdGVfYnJhbmNoX3JlcG9ydChGSUxFICpycHQsIHN0cnVjdCBicmFuY2ggKmIpCiB7CkBAIC00NTAsOCArNDY1LDggQEAKIAlmcHV0YygnXG4nLCBycHQpOwogCWZwdXRzKCJNYXJrc1xuIiwgcnB0KTsKIAlmcHV0cygiLS0tLS1cbiIsIHJwdCk7Ci0JaWYgKG1hcmtfZmlsZSkKLQkJZnByaW50ZihycHQsICIgIGV4cG9ydGVkIHRvICVzXG4iLCBtYXJrX2ZpbGUpOworCWlmIChleHBvcnRfbWFya3NfZmlsZSkKKwkJZnByaW50ZihycHQsICIgIGV4cG9ydGVkIHRvICVzXG4iLCBleHBvcnRfbWFya3NfZmlsZSk7CiAJZWxzZQogCQlkdW1wX21hcmtzX2hlbHBlcihycHQsIDAsIG1hcmtzKTsKIApAQCAtNTA2LDcgKzUyMSw3IEBACiAJCWFsbG9jX29iamVjdHMob2JqZWN0X2VudHJ5X2FsbG9jKTsKIAogCWUgPSBibG9ja3MtPm5leHRfZnJlZSsrOwotCWhhc2hjcHkoZS0+c2hhMSwgc2hhMSk7CisJaGFzaGNweShlLT5pZHguc2hhMSwgc2hhMSk7CiAJcmV0dXJuIGU7CiB9CiAKQEAgLTUxNSw3ICs1MzAsNyBAQAogCXVuc2lnbmVkIGludCBoID0gc2hhMVswXSA8PCA4IHwgc2hhMVsxXTsKIAlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplOwogCWZvciAoZSA9IG9iamVjdF90YWJsZVtoXTsgZTsgZSA9IGUtPm5leHQpCi0JCWlmICghaGFzaGNtcChzaGExLCBlLT5zaGExKSkKKwkJaWYgKCFoYXNoY21wKHNoYTEsIGUtPmlkeC5zaGExKSkKIAkJCXJldHVybiBlOwogCXJldHVybiBOVUxMOwogfQpAQCAtNTI3LDcgKzU0Miw3IEBACiAJc3RydWN0IG9iamVjdF9lbnRyeSAqcCA9IE5VTEw7CiAKIAl3aGlsZSAoZSkgewotCQlpZiAoIWhhc2hjbXAoc2hhMSwgZS0+c2hhMSkpCisJCWlmICghaGFzaGNtcChzaGExLCBlLT5pZHguc2hhMSkpCiAJCQlyZXR1cm4gZTsKIAkJcCA9IGU7CiAJCWUgPSBlLT5uZXh0OwpAQCAtNTM1LDcgKzU1MCw3IEBACiAKIAllID0gbmV3X29iamVjdChzaGExKTsKIAllLT5uZXh0ID0gTlVMTDsKLQllLT5vZmZzZXQgPSAwOworCWUtPmlkeC5vZmZzZXQgPSAwOwogCWlmIChwKQogCQlwLT5uZXh0ID0gZTsKIAllbHNlCkBAIC02ODksNiArNzA0LDcgQEAKIAliLT50YWJsZV9uZXh0X2JyYW5jaCA9IGJyYW5jaF90YWJsZVtoY107CiAJYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMF0ubW9kZSA9IFNfSUZESVI7CiAJYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMV0ubW9kZSA9IFNfSUZESVI7CisJYi0+bnVtX25vdGVzID0gMDsKIAliLT5hY3RpdmUgPSAwOwogCWItPnBhY2tfaWQgPSBNQVhfUEFDS19JRDsKIAlicmFuY2hfdGFibGVbaGNdID0gYjsKQEAgLTgyMywxMSArODM5LDEyIEBACiAJcCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpwKSArIHN0cmxlbih0bXBmaWxlKSArIDIpOwogCXN0cmNweShwLT5wYWNrX25hbWUsIHRtcGZpbGUpOwogCXAtPnBhY2tfZmQgPSBwYWNrX2ZkOworCXBhY2tfZmlsZSA9IHNoYTFmZChwYWNrX2ZkLCBwLT5wYWNrX25hbWUpOwogCiAJaGRyLmhkcl9zaWduYXR1cmUgPSBodG9ubChQQUNLX1NJR05BVFVSRSk7CiAJaGRyLmhkcl92ZXJzaW9uID0gaHRvbmwoMik7CiAJaGRyLmhkcl9lbnRyaWVzID0gMDsKLQl3cml0ZV9vcl9kaWUocC0+cGFja19mZCwgJmhkciwgc2l6ZW9mKGhkcikpOworCXNoYTF3cml0ZShwYWNrX2ZpbGUsICZoZHIsIHNpemVvZihoZHIpKTsKIAogCXBhY2tfZGF0YSA9IHA7CiAJcGFja19zaXplID0gc2l6ZW9mKGhkcik7CkBAIC04MzcsNjcgKzg1NCwzMCBAQAogCWFsbF9wYWNrc1twYWNrX2lkXSA9IHA7CiB9CiAKLXN0YXRpYyBpbnQgb2VjbXAgKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykKK3N0YXRpYyBjb25zdCBjaGFyICpjcmVhdGVfaW5kZXgodm9pZCkKIHsKLQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICphID0gKigoc3RydWN0IG9iamVjdF9lbnRyeSoqKWFfKTsKLQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpiID0gKigoc3RydWN0IG9iamVjdF9lbnRyeSoqKWJfKTsKLQlyZXR1cm4gaGFzaGNtcChhLT5zaGExLCBiLT5zaGExKTsKLX0KLQotc3RhdGljIGNoYXIgKmNyZWF0ZV9pbmRleCh2b2lkKQotewotCXN0YXRpYyBjaGFyIHRtcGZpbGVbUEFUSF9NQVhdOwotCWdpdF9TSEFfQ1RYIGN0eDsKLQlzdHJ1Y3Qgc2hhMWZpbGUgKmY7Ci0Jc3RydWN0IG9iamVjdF9lbnRyeSAqKmlkeCwgKipjLCAqKmxhc3QsICplOworCWNvbnN0IGNoYXIgKnRtcGZpbGU7CisJc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqaWR4LCAqKmMsICoqbGFzdDsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplOwogCXN0cnVjdCBvYmplY3RfZW50cnlfcG9vbCAqbzsKLQl1aW50MzJfdCBhcnJheVsyNTZdOwotCWludCBpLCBpZHhfZmQ7CiAKLQkvKiBCdWlsZCB0aGUgc29ydGVkIHRhYmxlIG9mIG9iamVjdCBJRHMuICovCi0JaWR4ID0geG1hbGxvYyhvYmplY3RfY291bnQgKiBzaXplb2Yoc3RydWN0IG9iamVjdF9lbnRyeSopKTsKKwkvKiBCdWlsZCB0aGUgdGFibGUgb2Ygb2JqZWN0IElEcy4gKi8KKwlpZHggPSB4bWFsbG9jKG9iamVjdF9jb3VudCAqIHNpemVvZigqaWR4KSk7CiAJYyA9IGlkeDsKIAlmb3IgKG8gPSBibG9ja3M7IG87IG8gPSBvLT5uZXh0X3Bvb2wpCiAJCWZvciAoZSA9IG8tPm5leHRfZnJlZTsgZS0tICE9IG8tPmVudHJpZXM7KQogCQkJaWYgKHBhY2tfaWQgPT0gZS0+cGFja19pZCkKLQkJCQkqYysrID0gZTsKKwkJCQkqYysrID0gJmUtPmlkeDsKIAlsYXN0ID0gaWR4ICsgb2JqZWN0X2NvdW50OwogCWlmIChjICE9IGxhc3QpCiAJCWRpZSgiaW50ZXJuYWwgY29uc2lzdGVuY3kgZXJyb3IgY3JlYXRpbmcgdGhlIGluZGV4Iik7Ci0JcXNvcnQoaWR4LCBvYmplY3RfY291bnQsIHNpemVvZihzdHJ1Y3Qgb2JqZWN0X2VudHJ5KiksIG9lY21wKTsKIAotCS8qIEdlbmVyYXRlIHRoZSBmYW4tb3V0IGFycmF5LiAqLwotCWMgPSBpZHg7Ci0JZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0JCXN0cnVjdCBvYmplY3RfZW50cnkgKipuZXh0ID0gYzsKLQkJd2hpbGUgKG5leHQgPCBsYXN0KSB7Ci0JCQlpZiAoKCpuZXh0KS0+c2hhMVswXSAhPSBpKQotCQkJCWJyZWFrOwotCQkJbmV4dCsrOwotCQl9Ci0JCWFycmF5W2ldID0gaHRvbmwobmV4dCAtIGlkeCk7Ci0JCWMgPSBuZXh0OwotCX0KLQotCWlkeF9mZCA9IG9kYl9ta3N0ZW1wKHRtcGZpbGUsIHNpemVvZih0bXBmaWxlKSwKLQkJCSAgICAgInBhY2svdG1wX2lkeF9YWFhYWFgiKTsKLQlmID0gc2hhMWZkKGlkeF9mZCwgdG1wZmlsZSk7Ci0Jc2hhMXdyaXRlKGYsIGFycmF5LCAyNTYgKiBzaXplb2YoaW50KSk7Ci0JZ2l0X1NIQTFfSW5pdCgmY3R4KTsKLQlmb3IgKGMgPSBpZHg7IGMgIT0gbGFzdDsgYysrKSB7Ci0JCXVpbnQzMl90IG9mZnNldCA9IGh0b25sKCgqYyktPm9mZnNldCk7Ci0JCXNoYTF3cml0ZShmLCAmb2Zmc2V0LCA0KTsKLQkJc2hhMXdyaXRlKGYsICgqYyktPnNoYTEsIHNpemVvZigoKmMpLT5zaGExKSk7Ci0JCWdpdF9TSEExX1VwZGF0ZSgmY3R4LCAoKmMpLT5zaGExLCAyMCk7Ci0JfQotCXNoYTF3cml0ZShmLCBwYWNrX2RhdGEtPnNoYTEsIHNpemVvZihwYWNrX2RhdGEtPnNoYTEpKTsKLQlzaGExY2xvc2UoZiwgTlVMTCwgQ1NVTV9GU1lOQyk7CisJdG1wZmlsZSA9IHdyaXRlX2lkeF9maWxlKE5VTEwsIGlkeCwgb2JqZWN0X2NvdW50LCBwYWNrX2RhdGEtPnNoYTEpOwogCWZyZWUoaWR4KTsKLQlnaXRfU0hBMV9GaW5hbChwYWNrX2RhdGEtPnNoYTEsICZjdHgpOwogCXJldHVybiB0bXBmaWxlOwogfQogCi1zdGF0aWMgY2hhciAqa2VlcF9wYWNrKGNoYXIgKmN1cnJfaW5kZXhfbmFtZSkKK3N0YXRpYyBjaGFyICprZWVwX3BhY2soY29uc3QgY2hhciAqY3Vycl9pbmRleF9uYW1lKQogewogCXN0YXRpYyBjaGFyIG5hbWVbUEFUSF9NQVhdOwogCXN0YXRpYyBjb25zdCBjaGFyICprZWVwX21zZyA9ICJmYXN0LWltcG9ydCI7CkBAIC05MDUsMTAgKzg4NSwxMCBAQAogCiAJa2VlcF9mZCA9IG9kYl9wYWNrX2tlZXAobmFtZSwgc2l6ZW9mKG5hbWUpLCBwYWNrX2RhdGEtPnNoYTEpOwogCWlmIChrZWVwX2ZkIDwgMCkKLQkJZGllKCJjYW5ub3QgY3JlYXRlIGtlZXAgZmlsZSIpOworCQlkaWVfZXJybm8oImNhbm5vdCBjcmVhdGUga2VlcCBmaWxlIik7CiAJd3JpdGVfb3JfZGllKGtlZXBfZmQsIGtlZXBfbXNnLCBzdHJsZW4oa2VlcF9tc2cpKTsKIAlpZiAoY2xvc2Uoa2VlcF9mZCkpCi0JCWRpZSgiZmFpbGVkIHRvIHdyaXRlIGtlZXAgZmlsZSIpOworCQlkaWVfZXJybm8oImZhaWxlZCB0byB3cml0ZSBrZWVwIGZpbGUiKTsKIAogCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzL3BhY2svcGFjay0lcy5wYWNrIiwKIAkJIGdldF9vYmplY3RfZGlyZWN0b3J5KCksIHNoYTFfdG9faGV4KHBhY2tfZGF0YS0+c2hhMSkpOwpAQCAtOTE5LDYgKzg5OSw3IEBACiAJCSBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpLCBzaGExX3RvX2hleChwYWNrX2RhdGEtPnNoYTEpKTsKIAlpZiAobW92ZV90ZW1wX3RvX2ZpbGUoY3Vycl9pbmRleF9uYW1lLCBuYW1lKSkKIAkJZGllKCJjYW5ub3Qgc3RvcmUgaW5kZXggZmlsZSIpOworCWZyZWUoKHZvaWQgKiljdXJyX2luZGV4X25hbWUpOwogCXJldHVybiBuYW1lOwogfQogCkBAIC05NDEsMTUgKzkyMiwxNyBAQAogCiAJY2xlYXJfZGVsdGFfYmFzZV9jYWNoZSgpOwogCWlmIChvYmplY3RfY291bnQpIHsKKwkJdW5zaWduZWQgY2hhciBjdXJfcGFja19zaGExWzIwXTsKIAkJY2hhciAqaWR4X25hbWU7CiAJCWludCBpOwogCQlzdHJ1Y3QgYnJhbmNoICpiOwogCQlzdHJ1Y3QgdGFnICp0OwogCiAJCWNsb3NlX3BhY2tfd2luZG93cyhwYWNrX2RhdGEpOworCQlzaGExY2xvc2UocGFja19maWxlLCBjdXJfcGFja19zaGExLCAwKTsKIAkJZml4dXBfcGFja19oZWFkZXJfZm9vdGVyKHBhY2tfZGF0YS0+cGFja19mZCwgcGFja19kYXRhLT5zaGExLAogCQkJCSAgICBwYWNrX2RhdGEtPnBhY2tfbmFtZSwgb2JqZWN0X2NvdW50LAotCQkJCSAgICBOVUxMLCAwKTsKKwkJCQkgICAgY3VyX3BhY2tfc2hhMSwgcGFja19zaXplKTsKIAkJY2xvc2UocGFja19kYXRhLT5wYWNrX2ZkKTsKIAkJaWR4X25hbWUgPSBrZWVwX3BhY2soY3JlYXRlX2luZGV4KCkpOwogCkBAIC05OTksNyArOTgyLDcgQEAKIAogc3RhdGljIHNpemVfdCBlbmNvZGVfaGVhZGVyKAogCWVudW0gb2JqZWN0X3R5cGUgdHlwZSwKLQlzaXplX3Qgc2l6ZSwKKwl1aW50bWF4X3Qgc2l6ZSwKIAl1bnNpZ25lZCBjaGFyICpoZHIpCiB7CiAJaW50IG4gPSAxOwpAQCAtMTA0NywyNSArMTAzMCwyMSBAQAogCWUgPSBpbnNlcnRfb2JqZWN0KHNoYTEpOwogCWlmIChtYXJrKQogCQlpbnNlcnRfbWFyayhtYXJrLCBlKTsKLQlpZiAoZS0+b2Zmc2V0KSB7CisJaWYgKGUtPmlkeC5vZmZzZXQpIHsKIAkJZHVwbGljYXRlX2NvdW50X2J5X3R5cGVbdHlwZV0rKzsKIAkJcmV0dXJuIDE7CiAJfSBlbHNlIGlmIChmaW5kX3NoYTFfcGFjayhzaGExLCBwYWNrZWRfZ2l0KSkgewogCQllLT50eXBlID0gdHlwZTsKIAkJZS0+cGFja19pZCA9IE1BWF9QQUNLX0lEOwotCQllLT5vZmZzZXQgPSAxOyAvKiBqdXN0IG5vdCB6ZXJvISAqLworCQllLT5pZHgub2Zmc2V0ID0gMTsgLyoganVzdCBub3QgemVybyEgKi8KIAkJZHVwbGljYXRlX2NvdW50X2J5X3R5cGVbdHlwZV0rKzsKIAkJcmV0dXJuIDE7CiAJfQogCi0JaWYgKGxhc3QgJiYgbGFzdC0+ZGF0YS5idWYgJiYgbGFzdC0+ZGVwdGggPCBtYXhfZGVwdGgpIHsKKwlpZiAobGFzdCAmJiBsYXN0LT5kYXRhLmJ1ZiAmJiBsYXN0LT5kZXB0aCA8IG1heF9kZXB0aCAmJiBkYXQtPmxlbiA+IDIwKSB7CiAJCWRlbHRhID0gZGlmZl9kZWx0YShsYXN0LT5kYXRhLmJ1ZiwgbGFzdC0+ZGF0YS5sZW4sCiAJCQlkYXQtPmJ1ZiwgZGF0LT5sZW4sCi0JCQkmZGVsdGFsZW4sIDApOwotCQlpZiAoZGVsdGEgJiYgZGVsdGFsZW4gPj0gZGF0LT5sZW4pIHsKLQkJCWZyZWUoZGVsdGEpOwotCQkJZGVsdGEgPSBOVUxMOwotCQl9CisJCQkmZGVsdGFsZW4sIGRhdC0+bGVuIC0gMjApOwogCX0gZWxzZQogCQlkZWx0YSA9IE5VTEw7CiAKQEAgLTEwODUsNyArMTA2NCw3IEBACiAJZGVmbGF0ZUVuZCgmcyk7CiAKIAkvKiBEZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIGF1dG8tY2hlY2twb2ludC4gKi8KLQlpZiAoKHBhY2tfc2l6ZSArIDYwICsgcy50b3RhbF9vdXQpID4gbWF4X3BhY2tzaXplCisJaWYgKChtYXhfcGFja3NpemUgJiYgKHBhY2tfc2l6ZSArIDYwICsgcy50b3RhbF9vdXQpID4gbWF4X3BhY2tzaXplKQogCQl8fCAocGFja19zaXplICsgNjAgKyBzLnRvdGFsX291dCkgPCBwYWNrX3NpemUpIHsKIAogCQkvKiBUaGlzIG5ldyBvYmplY3QgbmVlZHMgdG8gKm5vdCogaGF2ZSB0aGUgY3VycmVudCBwYWNrX2lkLiAqLwpAQCAtMTExMSwzNiArMTA5MCw0MCBAQAogCiAJZS0+dHlwZSA9IHR5cGU7CiAJZS0+cGFja19pZCA9IHBhY2tfaWQ7Ci0JZS0+b2Zmc2V0ID0gcGFja19zaXplOworCWUtPmlkeC5vZmZzZXQgPSBwYWNrX3NpemU7CiAJb2JqZWN0X2NvdW50Kys7CiAJb2JqZWN0X2NvdW50X2J5X3R5cGVbdHlwZV0rKzsKIAorCWNyYzMyX2JlZ2luKHBhY2tfZmlsZSk7CisKIAlpZiAoZGVsdGEpIHsKLQkJdW5zaWduZWQgbG9uZyBvZnMgPSBlLT5vZmZzZXQgLSBsYXN0LT5vZmZzZXQ7CisJCW9mZl90IG9mcyA9IGUtPmlkeC5vZmZzZXQgLSBsYXN0LT5vZmZzZXQ7CiAJCXVuc2lnbmVkIHBvcyA9IHNpemVvZihoZHIpIC0gMTsKIAogCQlkZWx0YV9jb3VudF9ieV90eXBlW3R5cGVdKys7CiAJCWUtPmRlcHRoID0gbGFzdC0+ZGVwdGggKyAxOwogCiAJCWhkcmxlbiA9IGVuY29kZV9oZWFkZXIoT0JKX09GU19ERUxUQSwgZGVsdGFsZW4sIGhkcik7Ci0JCXdyaXRlX29yX2RpZShwYWNrX2RhdGEtPnBhY2tfZmQsIGhkciwgaGRybGVuKTsKKwkJc2hhMXdyaXRlKHBhY2tfZmlsZSwgaGRyLCBoZHJsZW4pOwogCQlwYWNrX3NpemUgKz0gaGRybGVuOwogCiAJCWhkcltwb3NdID0gb2ZzICYgMTI3OwogCQl3aGlsZSAob2ZzID4+PSA3KQogCQkJaGRyWy0tcG9zXSA9IDEyOCB8ICgtLW9mcyAmIDEyNyk7Ci0JCXdyaXRlX29yX2RpZShwYWNrX2RhdGEtPnBhY2tfZmQsIGhkciArIHBvcywgc2l6ZW9mKGhkcikgLSBwb3MpOworCQlzaGExd3JpdGUocGFja19maWxlLCBoZHIgKyBwb3MsIHNpemVvZihoZHIpIC0gcG9zKTsKIAkJcGFja19zaXplICs9IHNpemVvZihoZHIpIC0gcG9zOwogCX0gZWxzZSB7CiAJCWUtPmRlcHRoID0gMDsKIAkJaGRybGVuID0gZW5jb2RlX2hlYWRlcih0eXBlLCBkYXQtPmxlbiwgaGRyKTsKLQkJd3JpdGVfb3JfZGllKHBhY2tfZGF0YS0+cGFja19mZCwgaGRyLCBoZHJsZW4pOworCQlzaGExd3JpdGUocGFja19maWxlLCBoZHIsIGhkcmxlbik7CiAJCXBhY2tfc2l6ZSArPSBoZHJsZW47CiAJfQogCi0Jd3JpdGVfb3JfZGllKHBhY2tfZGF0YS0+cGFja19mZCwgb3V0LCBzLnRvdGFsX291dCk7CisJc2hhMXdyaXRlKHBhY2tfZmlsZSwgb3V0LCBzLnRvdGFsX291dCk7CiAJcGFja19zaXplICs9IHMudG90YWxfb3V0OwogCisJZS0+aWR4LmNyYzMyID0gY3JjMzJfZW5kKHBhY2tfZmlsZSk7CisKIAlmcmVlKG91dCk7CiAJZnJlZShkZWx0YSk7CiAJaWYgKGxhc3QpIHsKQEAgLTExNDksMTIgKzExMzIsMTM3IEBACiAJCX0gZWxzZSB7CiAJCQlzdHJidWZfc3dhcCgmbGFzdC0+ZGF0YSwgZGF0KTsKIAkJfQotCQlsYXN0LT5vZmZzZXQgPSBlLT5vZmZzZXQ7CisJCWxhc3QtPm9mZnNldCA9IGUtPmlkeC5vZmZzZXQ7CiAJCWxhc3QtPmRlcHRoID0gZS0+ZGVwdGg7CiAJfQogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCB0cnVuY2F0ZV9wYWNrKG9mZl90IHRvLCBnaXRfU0hBX0NUWCAqY3R4KQoreworCWlmIChmdHJ1bmNhdGUocGFja19kYXRhLT5wYWNrX2ZkLCB0bykKKwkgfHwgbHNlZWsocGFja19kYXRhLT5wYWNrX2ZkLCB0bywgU0VFS19TRVQpICE9IHRvKQorCQlkaWVfZXJybm8oImNhbm5vdCB0cnVuY2F0ZSBwYWNrIHRvIHNraXAgZHVwbGljYXRlIik7CisJcGFja19zaXplID0gdG87CisKKwkvKiB5ZXMgdGhpcyBpcyBhIGxheWVyaW5nIHZpb2xhdGlvbiAqLworCXBhY2tfZmlsZS0+dG90YWwgPSB0bzsKKwlwYWNrX2ZpbGUtPm9mZnNldCA9IDA7CisJcGFja19maWxlLT5jdHggPSAqY3R4OworfQorCitzdGF0aWMgdm9pZCBzdHJlYW1fYmxvYih1aW50bWF4X3QgbGVuLCB1bnNpZ25lZCBjaGFyICpzaGExb3V0LCB1aW50bWF4X3QgbWFyaykKK3sKKwlzaXplX3QgaW5fc3ogPSA2NCAqIDEwMjQsIG91dF9zeiA9IDY0ICogMTAyNDsKKwl1bnNpZ25lZCBjaGFyICppbl9idWYgPSB4bWFsbG9jKGluX3N6KTsKKwl1bnNpZ25lZCBjaGFyICpvdXRfYnVmID0geG1hbGxvYyhvdXRfc3opOworCXN0cnVjdCBvYmplY3RfZW50cnkgKmU7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwl1bnNpZ25lZCBsb25nIGhkcmxlbjsKKwlvZmZfdCBvZmZzZXQ7CisJZ2l0X1NIQV9DVFggYzsKKwlnaXRfU0hBX0NUWCBwYWNrX2ZpbGVfY3R4OworCXpfc3RyZWFtIHM7CisJaW50IHN0YXR1cyA9IFpfT0s7CisKKwkvKiBEZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIGF1dG8tY2hlY2twb2ludC4gKi8KKwlpZiAoKG1heF9wYWNrc2l6ZSAmJiAocGFja19zaXplICsgNjAgKyBsZW4pID4gbWF4X3BhY2tzaXplKQorCQl8fCAocGFja19zaXplICsgNjAgKyBsZW4pIDwgcGFja19zaXplKQorCQljeWNsZV9wYWNrZmlsZSgpOworCisJb2Zmc2V0ID0gcGFja19zaXplOworCisJLyogcHJlc2VydmUgdGhlIHBhY2tfZmlsZSBTSEExIGN0eCBpbiBjYXNlIHdlIGhhdmUgdG8gdHJ1bmNhdGUgbGF0ZXIgKi8KKwlzaGExZmx1c2gocGFja19maWxlKTsKKwlwYWNrX2ZpbGVfY3R4ID0gcGFja19maWxlLT5jdHg7CisKKwloZHJsZW4gPSBzbnByaW50ZigoY2hhciAqKW91dF9idWYsIG91dF9zeiwgImJsb2IgJSIgUFJJdU1BWCwgbGVuKSArIDE7CisJaWYgKG91dF9zeiA8PSBoZHJsZW4pCisJCWRpZSgiaW1wb3NzaWJseSBsYXJnZSBvYmplY3QgaGVhZGVyIik7CisKKwlnaXRfU0hBMV9Jbml0KCZjKTsKKwlnaXRfU0hBMV9VcGRhdGUoJmMsIG91dF9idWYsIGhkcmxlbik7CisKKwljcmMzMl9iZWdpbihwYWNrX2ZpbGUpOworCisJbWVtc2V0KCZzLCAwLCBzaXplb2YocykpOworCWRlZmxhdGVJbml0KCZzLCBwYWNrX2NvbXByZXNzaW9uX2xldmVsKTsKKworCWhkcmxlbiA9IGVuY29kZV9oZWFkZXIoT0JKX0JMT0IsIGxlbiwgb3V0X2J1Zik7CisJaWYgKG91dF9zeiA8PSBoZHJsZW4pCisJCWRpZSgiaW1wb3NzaWJseSBsYXJnZSBvYmplY3QgaGVhZGVyIik7CisKKwlzLm5leHRfb3V0ID0gb3V0X2J1ZiArIGhkcmxlbjsKKwlzLmF2YWlsX291dCA9IG91dF9zeiAtIGhkcmxlbjsKKworCXdoaWxlIChzdGF0dXMgIT0gWl9TVFJFQU1fRU5EKSB7CisJCWlmICgwIDwgbGVuICYmICFzLmF2YWlsX2luKSB7CisJCQlzaXplX3QgY250ID0gaW5fc3ogPCBsZW4gPyBpbl9zeiA6IChzaXplX3QpbGVuOworCQkJc2l6ZV90IG4gPSBmcmVhZChpbl9idWYsIDEsIGNudCwgc3RkaW4pOworCQkJaWYgKCFuICYmIGZlb2Yoc3RkaW4pKQorCQkJCWRpZSgiRU9GIGluIGRhdGEgKCUiIFBSSXVNQVggIiBieXRlcyByZW1haW5pbmcpIiwgbGVuKTsKKworCQkJZ2l0X1NIQTFfVXBkYXRlKCZjLCBpbl9idWYsIG4pOworCQkJcy5uZXh0X2luID0gaW5fYnVmOworCQkJcy5hdmFpbF9pbiA9IG47CisJCQlsZW4gLT0gbjsKKwkJfQorCisJCXN0YXR1cyA9IGRlZmxhdGUoJnMsIGxlbiA/IDAgOiBaX0ZJTklTSCk7CisKKwkJaWYgKCFzLmF2YWlsX291dCB8fCBzdGF0dXMgPT0gWl9TVFJFQU1fRU5EKSB7CisJCQlzaXplX3QgbiA9IHMubmV4dF9vdXQgLSBvdXRfYnVmOworCQkJc2hhMXdyaXRlKHBhY2tfZmlsZSwgb3V0X2J1Ziwgbik7CisJCQlwYWNrX3NpemUgKz0gbjsKKwkJCXMubmV4dF9vdXQgPSBvdXRfYnVmOworCQkJcy5hdmFpbF9vdXQgPSBvdXRfc3o7CisJCX0KKworCQlzd2l0Y2ggKHN0YXR1cykgeworCQljYXNlIFpfT0s6CisJCWNhc2UgWl9CVUZfRVJST1I6CisJCWNhc2UgWl9TVFJFQU1fRU5EOgorCQkJY29udGludWU7CisJCWRlZmF1bHQ6CisJCQlkaWUoInVuZXhwZWN0ZWQgZGVmbGF0ZSBmYWlsdXJlOiAlZCIsIHN0YXR1cyk7CisJCX0KKwl9CisJZGVmbGF0ZUVuZCgmcyk7CisJZ2l0X1NIQTFfRmluYWwoc2hhMSwgJmMpOworCisJaWYgKHNoYTFvdXQpCisJCWhhc2hjcHkoc2hhMW91dCwgc2hhMSk7CisKKwllID0gaW5zZXJ0X29iamVjdChzaGExKTsKKworCWlmIChtYXJrKQorCQlpbnNlcnRfbWFyayhtYXJrLCBlKTsKKworCWlmIChlLT5pZHgub2Zmc2V0KSB7CisJCWR1cGxpY2F0ZV9jb3VudF9ieV90eXBlW09CSl9CTE9CXSsrOworCQl0cnVuY2F0ZV9wYWNrKG9mZnNldCwgJnBhY2tfZmlsZV9jdHgpOworCisJfSBlbHNlIGlmIChmaW5kX3NoYTFfcGFjayhzaGExLCBwYWNrZWRfZ2l0KSkgeworCQllLT50eXBlID0gT0JKX0JMT0I7CisJCWUtPnBhY2tfaWQgPSBNQVhfUEFDS19JRDsKKwkJZS0+aWR4Lm9mZnNldCA9IDE7IC8qIGp1c3Qgbm90IHplcm8hICovCisJCWR1cGxpY2F0ZV9jb3VudF9ieV90eXBlW09CSl9CTE9CXSsrOworCQl0cnVuY2F0ZV9wYWNrKG9mZnNldCwgJnBhY2tfZmlsZV9jdHgpOworCisJfSBlbHNlIHsKKwkJZS0+ZGVwdGggPSAwOworCQllLT50eXBlID0gT0JKX0JMT0I7CisJCWUtPnBhY2tfaWQgPSBwYWNrX2lkOworCQllLT5pZHgub2Zmc2V0ID0gb2Zmc2V0OworCQllLT5pZHguY3JjMzIgPSBjcmMzMl9lbmQocGFja19maWxlKTsKKwkJb2JqZWN0X2NvdW50Kys7CisJCW9iamVjdF9jb3VudF9ieV90eXBlW09CSl9CTE9CXSsrOworCX0KKworCWZyZWUoaW5fYnVmKTsKKwlmcmVlKG91dF9idWYpOworfQorCiAvKiBBbGwgY2FsbHMgbXVzdCBiZSBndWFyZGVkIGJ5IGZpbmRfb2JqZWN0KCkgb3IgZmluZF9tYXJrKCkgdG8KICAqIGVuc3VyZSB0aGUgJ3N0cnVjdCBvYmplY3RfZW50cnknIHBhc3NlZCB3YXMgd3JpdHRlbiBieSB0aGlzCiAgKiBwcm9jZXNzIGluc3RhbmNlLiAgV2UgdW5wYWNrIHRoZSBlbnRyeSBieSB0aGUgb2Zmc2V0LCBhdm9pZGluZwpAQCAtMTE4OSw2ICsxMjk3LDcgQEAKIAkJICogdGhlIG5ld2x5IHdyaXR0ZW4gZGF0YS4KIAkJICovCiAJCWNsb3NlX3BhY2tfd2luZG93cyhwKTsKKwkJc2hhMWZsdXNoKHBhY2tfZmlsZSk7CiAKIAkJLyogV2UgaGF2ZSB0byBvZmZlciAyMCBieXRlcyBhZGRpdGlvbmFsIG9uIHRoZSBlbmQgb2YKIAkJICogdGhlIHBhY2tmaWxlIGFzIHRoZSBjb3JlIHVucGFja2VyIGNvZGUgYXNzdW1lcyB0aGUKQEAgLTExOTgsNyArMTMwNyw3IEBACiAJCSAqLwogCQlwLT5wYWNrX3NpemUgPSBwYWNrX3NpemUgKyAyMDsKIAl9Ci0JcmV0dXJuIHVucGFja19lbnRyeShwLCBvZS0+b2Zmc2V0LCAmdHlwZSwgc2l6ZXApOworCXJldHVybiB1bnBhY2tfZW50cnkocCwgb2UtPmlkeC5vZmZzZXQsICZ0eXBlLCBzaXplcCk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICpnZXRfbW9kZShjb25zdCBjaGFyICpzdHIsIHVpbnQxNl90ICptb2RlcCkKQEAgLTEzMjksNyArMTQzOCw3IEBACiAJaWYgKFNfSVNESVIocm9vdC0+dmVyc2lvbnNbMF0ubW9kZSkgJiYgbGUgJiYgbGUtPnBhY2tfaWQgPT0gcGFja19pZCkgewogCQlta3RyZWUodCwgMCwgJm9sZF90cmVlKTsKIAkJbG8uZGF0YSA9IG9sZF90cmVlOwotCQlsby5vZmZzZXQgPSBsZS0+b2Zmc2V0OworCQlsby5vZmZzZXQgPSBsZS0+aWR4Lm9mZnNldDsKIAkJbG8uZGVwdGggPSB0LT5kZWx0YV9kZXB0aDsKIAl9CiAKQEAgLTE1ODcsNyArMTY5Niw3IEBACiAJCWZvciAoayA9IDA7IGsgPCAxMDI0OyBrKyspIHsKIAkJCWlmIChtLT5kYXRhLm1hcmtlZFtrXSkKIAkJCQlmcHJpbnRmKGYsICI6JSIgUFJJdU1BWCAiICVzXG4iLCBiYXNlICsgaywKLQkJCQkJc2hhMV90b19oZXgobS0+ZGF0YS5tYXJrZWRba10tPnNoYTEpKTsKKwkJCQkJc2hhMV90b19oZXgobS0+ZGF0YS5tYXJrZWRba10tPmlkeC5zaGExKSk7CiAJCX0KIAl9CiB9CkBAIC0xNTk4LDEzICsxNzA3LDEzIEBACiAJaW50IG1hcmtfZmQ7CiAJRklMRSAqZjsKIAotCWlmICghbWFya19maWxlKQorCWlmICghZXhwb3J0X21hcmtzX2ZpbGUpCiAJCXJldHVybjsKIAotCW1hcmtfZmQgPSBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZtYXJrX2xvY2ssIG1hcmtfZmlsZSwgMCk7CisJbWFya19mZCA9IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoJm1hcmtfbG9jaywgZXhwb3J0X21hcmtzX2ZpbGUsIDApOwogCWlmIChtYXJrX2ZkIDwgMCkgewogCQlmYWlsdXJlIHw9IGVycm9yKCJVbmFibGUgdG8gd3JpdGUgbWFya3MgZmlsZSAlczogJXMiLAotCQkJbWFya19maWxlLCBzdHJlcnJvcihlcnJubykpOworCQkJZXhwb3J0X21hcmtzX2ZpbGUsIHN0cmVycm9yKGVycm5vKSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE2MTMsNyArMTcyMiw3IEBACiAJCWludCBzYXZlZF9lcnJubyA9IGVycm5vOwogCQlyb2xsYmFja19sb2NrX2ZpbGUoJm1hcmtfbG9jayk7CiAJCWZhaWx1cmUgfD0gZXJyb3IoIlVuYWJsZSB0byB3cml0ZSBtYXJrcyBmaWxlICVzOiAlcyIsCi0JCQltYXJrX2ZpbGUsIHN0cmVycm9yKHNhdmVkX2Vycm5vKSk7CisJCQlleHBvcnRfbWFya3NfZmlsZSwgc3RyZXJyb3Ioc2F2ZWRfZXJybm8pKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTYyOSw3ICsxNzM4LDcgQEAKIAkJaW50IHNhdmVkX2Vycm5vID0gZXJybm87CiAJCXJvbGxiYWNrX2xvY2tfZmlsZSgmbWFya19sb2NrKTsKIAkJZmFpbHVyZSB8PSBlcnJvcigiVW5hYmxlIHRvIHdyaXRlIG1hcmtzIGZpbGUgJXM6ICVzIiwKLQkJCW1hcmtfZmlsZSwgc3RyZXJyb3Ioc2F2ZWRfZXJybm8pKTsKKwkJCWV4cG9ydF9tYXJrc19maWxlLCBzdHJlcnJvcihzYXZlZF9lcnJubykpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xNjM3LDExICsxNzQ2LDQ3IEBACiAJCWludCBzYXZlZF9lcnJubyA9IGVycm5vOwogCQlyb2xsYmFja19sb2NrX2ZpbGUoJm1hcmtfbG9jayk7CiAJCWZhaWx1cmUgfD0gZXJyb3IoIlVuYWJsZSB0byBjb21taXQgbWFya3MgZmlsZSAlczogJXMiLAotCQkJbWFya19maWxlLCBzdHJlcnJvcihzYXZlZF9lcnJubykpOworCQkJZXhwb3J0X21hcmtzX2ZpbGUsIHN0cmVycm9yKHNhdmVkX2Vycm5vKSk7CiAJCXJldHVybjsKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHJlYWRfbWFya3Modm9pZCkKK3sKKwljaGFyIGxpbmVbNTEyXTsKKwlGSUxFICpmID0gZm9wZW4oaW1wb3J0X21hcmtzX2ZpbGUsICJyIik7CisJaWYgKCFmKQorCQlkaWVfZXJybm8oImNhbm5vdCByZWFkICclcyciLCBpbXBvcnRfbWFya3NfZmlsZSk7CisJd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHsKKwkJdWludG1heF90IG1hcms7CisJCWNoYXIgKmVuZDsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqZTsKKworCQllbmQgPSBzdHJjaHIobGluZSwgJ1xuJyk7CisJCWlmIChsaW5lWzBdICE9ICc6JyB8fCAhZW5kKQorCQkJZGllKCJjb3JydXB0IG1hcmsgbGluZTogJXMiLCBsaW5lKTsKKwkJKmVuZCA9IDA7CisJCW1hcmsgPSBzdHJ0b3VtYXgobGluZSArIDEsICZlbmQsIDEwKTsKKwkJaWYgKCFtYXJrIHx8IGVuZCA9PSBsaW5lICsgMQorCQkJfHwgKmVuZCAhPSAnICcgfHwgZ2V0X3NoYTEoZW5kICsgMSwgc2hhMSkpCisJCQlkaWUoImNvcnJ1cHQgbWFyayBsaW5lOiAlcyIsIGxpbmUpOworCQllID0gZmluZF9vYmplY3Qoc2hhMSk7CisJCWlmICghZSkgeworCQkJZW51bSBvYmplY3RfdHlwZSB0eXBlID0gc2hhMV9vYmplY3RfaW5mbyhzaGExLCBOVUxMKTsKKwkJCWlmICh0eXBlIDwgMCkKKwkJCQlkaWUoIm9iamVjdCBub3QgZm91bmQ6ICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworCQkJZSA9IGluc2VydF9vYmplY3Qoc2hhMSk7CisJCQllLT50eXBlID0gdHlwZTsKKwkJCWUtPnBhY2tfaWQgPSBNQVhfUEFDS19JRDsKKwkJCWUtPmlkeC5vZmZzZXQgPSAxOyAvKiBqdXN0IG5vdCB6ZXJvISAqLworCQl9CisJCWluc2VydF9tYXJrKG1hcmssIGUpOworCX0KKwlmY2xvc2UoZik7Cit9CisKKwogc3RhdGljIGludCByZWFkX25leHRfY29tbWFuZCh2b2lkKQogewogCXN0YXRpYyBpbnQgc3RkaW5fZW9mID0gMDsKQEAgLTE2NjIsNiArMTgwNywxMiBAQAogCQkJaWYgKHN0ZGluX2VvZikKIAkJCQlyZXR1cm4gRU9GOwogCisJCQlpZiAoIXNlZW5fZGF0YV9jb21tYW5kCisJCQkJJiYgcHJlZml4Y21wKGNvbW1hbmRfYnVmLmJ1ZiwgImZlYXR1cmUgIikKKwkJCQkmJiBwcmVmaXhjbXAoY29tbWFuZF9idWYuYnVmLCAib3B0aW9uICIpKSB7CisJCQkJcGFyc2VfYXJndigpOworCQkJfQorCiAJCQlyYyA9IHJjX2ZyZWU7CiAJCQlpZiAocmMpCiAJCQkJcmNfZnJlZSA9IHJjLT5uZXh0OwpAQCAtMTcwMCw3ICsxODUxLDcgQEAKIAkJbmV4dF9tYXJrID0gMDsKIH0KIAotc3RhdGljIHZvaWQgcGFyc2VfZGF0YShzdHJ1Y3Qgc3RyYnVmICpzYikKK3N0YXRpYyBpbnQgcGFyc2VfZGF0YShzdHJ1Y3Qgc3RyYnVmICpzYiwgdWludG1heF90IGxpbWl0LCB1aW50bWF4X3QgKmxlbl9yZXMpCiB7CiAJc3RyYnVmX3Jlc2V0KHNiKTsKIApAQCAtMTcyNCw5ICsxODc1LDE1IEBACiAJCWZyZWUodGVybSk7CiAJfQogCWVsc2UgewotCQlzaXplX3QgbiA9IDAsIGxlbmd0aDsKKwkJdWludG1heF90IGxlbiA9IHN0cnRvdW1heChjb21tYW5kX2J1Zi5idWYgKyA1LCBOVUxMLCAxMCk7CisJCXNpemVfdCBuID0gMCwgbGVuZ3RoID0gKHNpemVfdClsZW47CiAKLQkJbGVuZ3RoID0gc3RydG91bChjb21tYW5kX2J1Zi5idWYgKyA1LCBOVUxMLCAxMCk7CisJCWlmIChsaW1pdCAmJiBsaW1pdCA8IGxlbikgeworCQkJKmxlbl9yZXMgPSBsZW47CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAobGVuZ3RoIDwgbGVuKQorCQkJZGllKCJkYXRhIGlzIHRvbyBsYXJnZSB0byB1c2UgaW4gdGhpcyBjb250ZXh0Iik7CiAKIAkJd2hpbGUgKG4gPCBsZW5ndGgpIHsKIAkJCXNpemVfdCBzID0gc3RyYnVmX2ZyZWFkKHNiLCBsZW5ndGggLSBuLCBzdGRpbik7CkBAIC0xNzM4LDE2ICsxODk1LDE5IEBACiAJfQogCiAJc2tpcF9vcHRpb25hbF9sZigpOworCXJldHVybiAxOwogfQogCiBzdGF0aWMgaW50IHZhbGlkYXRlX3Jhd19kYXRlKGNvbnN0IGNoYXIgKnNyYywgY2hhciAqcmVzdWx0LCBpbnQgbWF4bGVuKQogewogCWNvbnN0IGNoYXIgKm9yaWdfc3JjID0gc3JjOwogCWNoYXIgKmVuZHA7CisJdW5zaWduZWQgbG9uZyBudW07CiAKIAllcnJubyA9IDA7CiAKLQlzdHJ0b3VsKHNyYywgJmVuZHAsIDEwKTsKKwludW0gPSBzdHJ0b3VsKHNyYywgJmVuZHAsIDEwKTsKKwkvKiBORUVEU1dPUks6IHBlcmhhcHMgY2hlY2sgZm9yIHJlYXNvbmFibGUgdmFsdWVzPyAqLwogCWlmIChlcnJubyB8fCBlbmRwID09IHNyYyB8fCAqZW5kcCAhPSAnICcpCiAJCXJldHVybiAtMTsKIApAQCAtMTc1NSw4ICsxOTE1LDkgQEAKIAlpZiAoKnNyYyAhPSAnLScgJiYgKnNyYyAhPSAnKycpCiAJCXJldHVybiAtMTsKIAotCXN0cnRvdWwoc3JjICsgMSwgJmVuZHAsIDEwKTsKLQlpZiAoZXJybm8gfHwgZW5kcCA9PSBzcmMgfHwgKmVuZHAgfHwgKGVuZHAgLSBvcmlnX3NyYykgPj0gbWF4bGVuKQorCW51bSA9IHN0cnRvdWwoc3JjICsgMSwgJmVuZHAsIDEwKTsKKwlpZiAoZXJybm8gfHwgZW5kcCA9PSBzcmMgKyAxIHx8ICplbmRwIHx8IChlbmRwIC0gb3JpZ19zcmMpID49IG1heGxlbiB8fAorCSAgICAxNDAwIDwgbnVtKQogCQlyZXR1cm4gLTE7CiAKIAlzdHJjcHkocmVzdWx0LCBvcmlnX3NyYyk7CkBAIC0xNzk5LDE0ICsxOTYwLDMyIEBACiAJcmV0dXJuIGlkZW50OwogfQogCi1zdGF0aWMgdm9pZCBwYXJzZV9uZXdfYmxvYih2b2lkKQorc3RhdGljIHZvaWQgcGFyc2VfYW5kX3N0b3JlX2Jsb2IoCisJc3RydWN0IGxhc3Rfb2JqZWN0ICpsYXN0LAorCXVuc2lnbmVkIGNoYXIgKnNoYTFvdXQsCisJdWludG1heF90IG1hcmspCiB7CiAJc3RhdGljIHN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJdWludG1heF90IGxlbjsKIAorCWlmIChwYXJzZV9kYXRhKCZidWYsIGJpZ19maWxlX3RocmVzaG9sZCwgJmxlbikpCisJCXN0b3JlX29iamVjdChPQkpfQkxPQiwgJmJ1ZiwgbGFzdCwgc2hhMW91dCwgbWFyayk7CisJZWxzZSB7CisJCWlmIChsYXN0KSB7CisJCQlzdHJidWZfcmVsZWFzZSgmbGFzdC0+ZGF0YSk7CisJCQlsYXN0LT5vZmZzZXQgPSAwOworCQkJbGFzdC0+ZGVwdGggPSAwOworCQl9CisJCXN0cmVhbV9ibG9iKGxlbiwgc2hhMW91dCwgbWFyayk7CisJCXNraXBfb3B0aW9uYWxfbGYoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX25ld19ibG9iKHZvaWQpCit7CiAJcmVhZF9uZXh0X2NvbW1hbmQoKTsKIAlwYXJzZV9tYXJrKCk7Ci0JcGFyc2VfZGF0YSgmYnVmKTsKLQlzdG9yZV9vYmplY3QoT0JKX0JMT0IsICZidWYsICZsYXN0X2Jsb2IsIE5VTEwsIG5leHRfbWFyayk7CisJcGFyc2VfYW5kX3N0b3JlX2Jsb2IoJmxhc3RfYmxvYiwgTlVMTCwgbmV4dF9tYXJrKTsKIH0KIAogc3RhdGljIHZvaWQgdW5sb2FkX29uZV9icmFuY2godm9pZCkKQEAgLTE4NTMsNiArMjAzMiwxMDkgQEAKIAl9CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGNvbnZlcnRfbnVtX25vdGVzX3RvX2Zhbm91dCh1aW50bWF4X3QgbnVtX25vdGVzKQoreworCXVuc2lnbmVkIGNoYXIgZmFub3V0ID0gMDsKKwl3aGlsZSAoKG51bV9ub3RlcyA+Pj0gOCkpCisJCWZhbm91dCsrOworCXJldHVybiBmYW5vdXQ7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnN0cnVjdF9wYXRoX3dpdGhfZmFub3V0KGNvbnN0IGNoYXIgKmhleF9zaGExLAorCQl1bnNpZ25lZCBjaGFyIGZhbm91dCwgY2hhciAqcGF0aCkKK3sKKwl1bnNpZ25lZCBpbnQgaSA9IDAsIGogPSAwOworCWlmIChmYW5vdXQgPj0gMjApCisJCWRpZSgiVG9vIGxhcmdlIGZhbm91dCAoJXUpIiwgZmFub3V0KTsKKwl3aGlsZSAoZmFub3V0KSB7CisJCXBhdGhbaSsrXSA9IGhleF9zaGExW2orK107CisJCXBhdGhbaSsrXSA9IGhleF9zaGExW2orK107CisJCXBhdGhbaSsrXSA9ICcvJzsKKwkJZmFub3V0LS07CisJfQorCW1lbWNweShwYXRoICsgaSwgaGV4X3NoYTEgKyBqLCA0MCAtIGopOworCXBhdGhbaSArIDQwIC0gal0gPSAnXDAnOworfQorCitzdGF0aWMgdWludG1heF90IGRvX2NoYW5nZV9ub3RlX2Zhbm91dCgKKwkJc3RydWN0IHRyZWVfZW50cnkgKm9yaWdfcm9vdCwgc3RydWN0IHRyZWVfZW50cnkgKnJvb3QsCisJCWNoYXIgKmhleF9zaGExLCB1bnNpZ25lZCBpbnQgaGV4X3NoYTFfbGVuLAorCQljaGFyICpmdWxscGF0aCwgdW5zaWduZWQgaW50IGZ1bGxwYXRoX2xlbiwKKwkJdW5zaWduZWQgY2hhciBmYW5vdXQpCit7CisJc3RydWN0IHRyZWVfY29udGVudCAqdCA9IHJvb3QtPnRyZWU7CisJc3RydWN0IHRyZWVfZW50cnkgKmUsIGxlYWY7CisJdW5zaWduZWQgaW50IGksIHRtcF9oZXhfc2hhMV9sZW4sIHRtcF9mdWxscGF0aF9sZW47CisJdWludG1heF90IG51bV9ub3RlcyA9IDA7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwljaGFyIHJlYWxwYXRoWzYwXTsKKworCWZvciAoaSA9IDA7IHQgJiYgaSA8IHQtPmVudHJ5X2NvdW50OyBpKyspIHsKKwkJZSA9IHQtPmVudHJpZXNbaV07CisJCXRtcF9oZXhfc2hhMV9sZW4gPSBoZXhfc2hhMV9sZW4gKyBlLT5uYW1lLT5zdHJfbGVuOworCQl0bXBfZnVsbHBhdGhfbGVuID0gZnVsbHBhdGhfbGVuOworCisJCS8qCisJCSAqIFdlJ3JlIGludGVyZXN0ZWQgaW4gRUlUSEVSIGV4aXN0aW5nIG5vdGUgZW50cmllcyAoZW50cmllcworCQkgKiB3aXRoIGV4YWN0bHkgNDAgaGV4IGNoYXJzIGluIHBhdGgsIG5vdCBpbmNsdWRpbmcgZGlyZWN0b3J5CisJCSAqIHNlcGFyYXRvcnMpLCBPUiBkaXJlY3RvcnkgZW50cmllcyB0aGF0IG1heSBjb250YWluIG5vdGUKKwkJICogZW50cmllcyAod2l0aCA8IDQwIGhleCBjaGFycyBpbiBwYXRoKS4KKwkJICogQWxzbywgZWFjaCBwYXRoIGNvbXBvbmVudCBpbiBhIG5vdGUgZW50cnkgbXVzdCBiZSBhIG11bHRpcGxlCisJCSAqIG9mIDIgY2hhcnMuCisJCSAqLworCQlpZiAoIWUtPnZlcnNpb25zWzFdLm1vZGUgfHwKKwkJICAgIHRtcF9oZXhfc2hhMV9sZW4gPiA0MCB8fAorCQkgICAgZS0+bmFtZS0+c3RyX2xlbiAlIDIpCisJCQljb250aW51ZTsKKworCQkvKiBUaGlzIF9tYXlfIGJlIGEgbm90ZSBlbnRyeSwgb3IgYSBzdWJkaXIgY29udGFpbmluZyBub3RlcyAqLworCQltZW1jcHkoaGV4X3NoYTEgKyBoZXhfc2hhMV9sZW4sIGUtPm5hbWUtPnN0cl9kYXQsCisJCSAgICAgICBlLT5uYW1lLT5zdHJfbGVuKTsKKwkJaWYgKHRtcF9mdWxscGF0aF9sZW4pCisJCQlmdWxscGF0aFt0bXBfZnVsbHBhdGhfbGVuKytdID0gJy8nOworCQltZW1jcHkoZnVsbHBhdGggKyB0bXBfZnVsbHBhdGhfbGVuLCBlLT5uYW1lLT5zdHJfZGF0LAorCQkgICAgICAgZS0+bmFtZS0+c3RyX2xlbik7CisJCXRtcF9mdWxscGF0aF9sZW4gKz0gZS0+bmFtZS0+c3RyX2xlbjsKKwkJZnVsbHBhdGhbdG1wX2Z1bGxwYXRoX2xlbl0gPSAnXDAnOworCisJCWlmICh0bXBfaGV4X3NoYTFfbGVuID09IDQwICYmICFnZXRfc2hhMV9oZXgoaGV4X3NoYTEsIHNoYTEpKSB7CisJCQkvKiBUaGlzIGlzIGEgbm90ZSBlbnRyeSAqLworCQkJY29uc3RydWN0X3BhdGhfd2l0aF9mYW5vdXQoaGV4X3NoYTEsIGZhbm91dCwgcmVhbHBhdGgpOworCQkJaWYgKCFzdHJjbXAoZnVsbHBhdGgsIHJlYWxwYXRoKSkgeworCQkJCS8qIE5vdGUgZW50cnkgaXMgaW4gY29ycmVjdCBsb2NhdGlvbiAqLworCQkJCW51bV9ub3RlcysrOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBSZW5hbWUgZnVsbHBhdGggdG8gcmVhbHBhdGggKi8KKwkJCWlmICghdHJlZV9jb250ZW50X3JlbW92ZShvcmlnX3Jvb3QsIGZ1bGxwYXRoLCAmbGVhZikpCisJCQkJZGllKCJGYWlsZWQgdG8gcmVtb3ZlIHBhdGggJXMiLCBmdWxscGF0aCk7CisJCQl0cmVlX2NvbnRlbnRfc2V0KG9yaWdfcm9vdCwgcmVhbHBhdGgsCisJCQkJbGVhZi52ZXJzaW9uc1sxXS5zaGExLAorCQkJCWxlYWYudmVyc2lvbnNbMV0ubW9kZSwKKwkJCQlsZWFmLnRyZWUpOworCQl9IGVsc2UgaWYgKFNfSVNESVIoZS0+dmVyc2lvbnNbMV0ubW9kZSkpIHsKKwkJCS8qIFRoaXMgaXMgYSBzdWJkaXIgdGhhdCBtYXkgY29udGFpbiBub3RlIGVudHJpZXMgKi8KKwkJCWlmICghZS0+dHJlZSkKKwkJCQlsb2FkX3RyZWUoZSk7CisJCQludW1fbm90ZXMgKz0gZG9fY2hhbmdlX25vdGVfZmFub3V0KG9yaWdfcm9vdCwgZSwKKwkJCQloZXhfc2hhMSwgdG1wX2hleF9zaGExX2xlbiwKKwkJCQlmdWxscGF0aCwgdG1wX2Z1bGxwYXRoX2xlbiwgZmFub3V0KTsKKwkJfQorCisJCS8qIFRoZSBhYm92ZSBtYXkgaGF2ZSByZWFsbG9jYXRlZCB0aGUgY3VycmVudCB0cmVlX2NvbnRlbnQgKi8KKwkJdCA9IHJvb3QtPnRyZWU7CisJfQorCXJldHVybiBudW1fbm90ZXM7Cit9CisKK3N0YXRpYyB1aW50bWF4X3QgY2hhbmdlX25vdGVfZmFub3V0KHN0cnVjdCB0cmVlX2VudHJ5ICpyb290LAorCQl1bnNpZ25lZCBjaGFyIGZhbm91dCkKK3sKKwljaGFyIGhleF9zaGExWzQwXSwgcGF0aFs2MF07CisJcmV0dXJuIGRvX2NoYW5nZV9ub3RlX2Zhbm91dChyb290LCByb290LCBoZXhfc2hhMSwgMCwgcGF0aCwgMCwgZmFub3V0KTsKK30KKwogc3RhdGljIHZvaWQgZmlsZV9jaGFuZ2VfbShzdHJ1Y3QgYnJhbmNoICpiKQogewogCWNvbnN0IGNoYXIgKnAgPSBjb21tYW5kX2J1Zi5idWYgKyAyOwpAQCAtMTg4Miw3ICsyMTY0LDcgQEAKIAlpZiAoKnAgPT0gJzonKSB7CiAJCWNoYXIgKng7CiAJCW9lID0gZmluZF9tYXJrKHN0cnRvdW1heChwICsgMSwgJngsIDEwKSk7Ci0JCWhhc2hjcHkoc2hhMSwgb2UtPnNoYTEpOworCQloYXNoY3B5KHNoYTEsIG9lLT5pZHguc2hhMSk7CiAJCXAgPSB4OwogCX0gZWxzZSBpZiAoIXByZWZpeGNtcChwLCAiaW5saW5lIikpIHsKIAkJaW5saW5lX2RhdGEgPSAxOwpAQCAtMTkxNywxNSArMjE5OSwxMiBAQAogCQkgKiBhbm90aGVyIHJlcG9zaXRvcnkuCiAJCSAqLwogCX0gZWxzZSBpZiAoaW5saW5lX2RhdGEpIHsKLQkJc3RhdGljIHN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7Ci0KIAkJaWYgKHAgIT0gdXEuYnVmKSB7CiAJCQlzdHJidWZfYWRkc3RyKCZ1cSwgcCk7CiAJCQlwID0gdXEuYnVmOwogCQl9CiAJCXJlYWRfbmV4dF9jb21tYW5kKCk7Ci0JCXBhcnNlX2RhdGEoJmJ1Zik7Ci0JCXN0b3JlX29iamVjdChPQkpfQkxPQiwgJmJ1ZiwgJmxhc3RfYmxvYiwgc2hhMSwgMCk7CisJCXBhcnNlX2FuZF9zdG9yZV9ibG9iKCZsYXN0X2Jsb2IsIHNoYTEsIDApOwogCX0gZWxzZSBpZiAob2UpIHsKIAkJaWYgKG9lLT50eXBlICE9IE9CSl9CTE9CKQogCQkJZGllKCJOb3QgYSBibG9iIChhY3R1YWxseSBhICVzKTogJXMiLApAQCAtMjAwMywxMiArMjI4Miw5NSBAQAogCQlsZWFmLnRyZWUpOwogfQogCitzdGF0aWMgdm9pZCBub3RlX2NoYW5nZV9uKHN0cnVjdCBicmFuY2ggKmIsIHVuc2lnbmVkIGNoYXIgb2xkX2Zhbm91dCkKK3sKKwljb25zdCBjaGFyICpwID0gY29tbWFuZF9idWYuYnVmICsgMjsKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiB1cSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBvYmplY3RfZW50cnkgKm9lID0gb2U7CisJc3RydWN0IGJyYW5jaCAqczsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdLCBjb21taXRfc2hhMVsyMF07CisJY2hhciBwYXRoWzYwXTsKKwl1aW50MTZfdCBpbmxpbmVfZGF0YSA9IDA7CisJdW5zaWduZWQgY2hhciBuZXdfZmFub3V0OworCisJLyogPGRhdGFyZWY+IG9yICdpbmxpbmUnICovCisJaWYgKCpwID09ICc6JykgeworCQljaGFyICp4OworCQlvZSA9IGZpbmRfbWFyayhzdHJ0b3VtYXgocCArIDEsICZ4LCAxMCkpOworCQloYXNoY3B5KHNoYTEsIG9lLT5pZHguc2hhMSk7CisJCXAgPSB4OworCX0gZWxzZSBpZiAoIXByZWZpeGNtcChwLCAiaW5saW5lIikpIHsKKwkJaW5saW5lX2RhdGEgPSAxOworCQlwICs9IDY7CisJfSBlbHNlIHsKKwkJaWYgKGdldF9zaGExX2hleChwLCBzaGExKSkKKwkJCWRpZSgiSW52YWxpZCBTSEExOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJCW9lID0gZmluZF9vYmplY3Qoc2hhMSk7CisJCXAgKz0gNDA7CisJfQorCWlmICgqcCsrICE9ICcgJykKKwkJZGllKCJNaXNzaW5nIHNwYWNlIGFmdGVyIFNIQTE6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKworCS8qIDxjb21taXR0aXNoPiAqLworCXMgPSBsb29rdXBfYnJhbmNoKHApOworCWlmIChzKSB7CisJCWhhc2hjcHkoY29tbWl0X3NoYTEsIHMtPnNoYTEpOworCX0gZWxzZSBpZiAoKnAgPT0gJzonKSB7CisJCXVpbnRtYXhfdCBjb21taXRfbWFyayA9IHN0cnRvdW1heChwICsgMSwgTlVMTCwgMTApOworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpjb21taXRfb2UgPSBmaW5kX21hcmsoY29tbWl0X21hcmspOworCQlpZiAoY29tbWl0X29lLT50eXBlICE9IE9CSl9DT01NSVQpCisJCQlkaWUoIk1hcmsgOiUiIFBSSXVNQVggIiBub3QgYSBjb21taXQiLCBjb21taXRfbWFyayk7CisJCWhhc2hjcHkoY29tbWl0X3NoYTEsIGNvbW1pdF9vZS0+aWR4LnNoYTEpOworCX0gZWxzZSBpZiAoIWdldF9zaGExKHAsIGNvbW1pdF9zaGExKSkgeworCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCWNoYXIgKmJ1ZiA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKGNvbW1pdF9zaGExLAorCQkJY29tbWl0X3R5cGUsICZzaXplLCBjb21taXRfc2hhMSk7CisJCWlmICghYnVmIHx8IHNpemUgPCA0NikKKwkJCWRpZSgiTm90IGEgdmFsaWQgY29tbWl0OiAlcyIsIHApOworCQlmcmVlKGJ1Zik7CisJfSBlbHNlCisJCWRpZSgiSW52YWxpZCByZWYgbmFtZSBvciBTSEExIGV4cHJlc3Npb246ICVzIiwgcCk7CisKKwlpZiAoaW5saW5lX2RhdGEpIHsKKwkJaWYgKHAgIT0gdXEuYnVmKSB7CisJCQlzdHJidWZfYWRkc3RyKCZ1cSwgcCk7CisJCQlwID0gdXEuYnVmOworCQl9CisJCXJlYWRfbmV4dF9jb21tYW5kKCk7CisJCXBhcnNlX2FuZF9zdG9yZV9ibG9iKCZsYXN0X2Jsb2IsIHNoYTEsIDApOworCX0gZWxzZSBpZiAob2UpIHsKKwkJaWYgKG9lLT50eXBlICE9IE9CSl9CTE9CKQorCQkJZGllKCJOb3QgYSBibG9iIChhY3R1YWxseSBhICVzKTogJXMiLAorCQkJCXR5cGVuYW1lKG9lLT50eXBlKSwgY29tbWFuZF9idWYuYnVmKTsKKwl9IGVsc2UgaWYgKCFpc19udWxsX3NoYTEoc2hhMSkpIHsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlID0gc2hhMV9vYmplY3RfaW5mbyhzaGExLCBOVUxMKTsKKwkJaWYgKHR5cGUgPCAwKQorCQkJZGllKCJCbG9iIG5vdCBmb3VuZDogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCQlpZiAodHlwZSAhPSBPQkpfQkxPQikKKwkJCWRpZSgiTm90IGEgYmxvYiAoYWN0dWFsbHkgYSAlcyk6ICVzIiwKKwkJCSAgICB0eXBlbmFtZSh0eXBlKSwgY29tbWFuZF9idWYuYnVmKTsKKwl9CisKKwljb25zdHJ1Y3RfcGF0aF93aXRoX2Zhbm91dChzaGExX3RvX2hleChjb21taXRfc2hhMSksIG9sZF9mYW5vdXQsIHBhdGgpOworCWlmICh0cmVlX2NvbnRlbnRfcmVtb3ZlKCZiLT5icmFuY2hfdHJlZSwgcGF0aCwgTlVMTCkpCisJCWItPm51bV9ub3Rlcy0tOworCisJaWYgKGlzX251bGxfc2hhMShzaGExKSkKKwkJcmV0dXJuOyAvKiBub3RoaW5nIHRvIGluc2VydCAqLworCisJYi0+bnVtX25vdGVzKys7CisJbmV3X2Zhbm91dCA9IGNvbnZlcnRfbnVtX25vdGVzX3RvX2Zhbm91dChiLT5udW1fbm90ZXMpOworCWNvbnN0cnVjdF9wYXRoX3dpdGhfZmFub3V0KHNoYTFfdG9faGV4KGNvbW1pdF9zaGExKSwgbmV3X2Zhbm91dCwgcGF0aCk7CisJdHJlZV9jb250ZW50X3NldCgmYi0+YnJhbmNoX3RyZWUsIHBhdGgsIHNoYTEsIFNfSUZSRUcgfCAwNjQ0LCBOVUxMKTsKK30KKwogc3RhdGljIHZvaWQgZmlsZV9jaGFuZ2VfZGVsZXRlYWxsKHN0cnVjdCBicmFuY2ggKmIpCiB7CiAJcmVsZWFzZV90cmVlX2NvbnRlbnRfcmVjdXJzaXZlKGItPmJyYW5jaF90cmVlLnRyZWUpOwogCWhhc2hjbHIoYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMF0uc2hhMSk7CiAJaGFzaGNscihiLT5icmFuY2hfdHJlZS52ZXJzaW9uc1sxXS5zaGExKTsKIAlsb2FkX3RyZWUoJmItPmJyYW5jaF90cmVlKTsKKwliLT5udW1fbm90ZXMgPSAwOwogfQogCiBzdGF0aWMgdm9pZCBwYXJzZV9mcm9tX2NvbW1pdChzdHJ1Y3QgYnJhbmNoICpiLCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKQEAgLTIwNjUsNyArMjQyNyw3IEBACiAJCXN0cnVjdCBvYmplY3RfZW50cnkgKm9lID0gZmluZF9tYXJrKGlkbnVtKTsKIAkJaWYgKG9lLT50eXBlICE9IE9CSl9DT01NSVQpCiAJCQlkaWUoIk1hcmsgOiUiIFBSSXVNQVggIiBub3QgYSBjb21taXQiLCBpZG51bSk7Ci0JCWhhc2hjcHkoYi0+c2hhMSwgb2UtPnNoYTEpOworCQloYXNoY3B5KGItPnNoYTEsIG9lLT5pZHguc2hhMSk7CiAJCWlmIChvZS0+cGFja19pZCAhPSBNQVhfUEFDS19JRCkgewogCQkJdW5zaWduZWQgbG9uZyBzaXplOwogCQkJY2hhciAqYnVmID0gZ2ZpX3VucGFja19lbnRyeShvZSwgJnNpemUpOwpAQCAtMjEwMCw3ICsyNDYyLDcgQEAKIAkJCXN0cnVjdCBvYmplY3RfZW50cnkgKm9lID0gZmluZF9tYXJrKGlkbnVtKTsKIAkJCWlmIChvZS0+dHlwZSAhPSBPQkpfQ09NTUlUKQogCQkJCWRpZSgiTWFyayA6JSIgUFJJdU1BWCAiIG5vdCBhIGNvbW1pdCIsIGlkbnVtKTsKLQkJCWhhc2hjcHkobi0+c2hhMSwgb2UtPnNoYTEpOworCQkJaGFzaGNweShuLT5zaGExLCBvZS0+aWR4LnNoYTEpOwogCQl9IGVsc2UgaWYgKCFnZXRfc2hhMShmcm9tLCBuLT5zaGExKSkgewogCQkJdW5zaWduZWQgbG9uZyBzaXplOwogCQkJY2hhciAqYnVmID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2Uobi0+c2hhMSwKQEAgLTIxMzIsNiArMjQ5NCw3IEBACiAJY2hhciAqY29tbWl0dGVyID0gTlVMTDsKIAlzdHJ1Y3QgaGFzaF9saXN0ICptZXJnZV9saXN0ID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgbWVyZ2VfY291bnQ7CisJdW5zaWduZWQgY2hhciBwcmV2X2Zhbm91dCwgbmV3X2Zhbm91dDsKIAogCS8qIE9idGFpbiB0aGUgYnJhbmNoIG5hbWUgZnJvbSB0aGUgcmVzdCBvZiBvdXIgY29tbWFuZCAqLwogCXNwID0gc3RyY2hyKGNvbW1hbmRfYnVmLmJ1ZiwgJyAnKSArIDE7CkBAIC0yMTUxLDcgKzI1MTQsNyBAQAogCX0KIAlpZiAoIWNvbW1pdHRlcikKIAkJZGllKCJFeHBlY3RlZCBjb21taXR0ZXIgYnV0IGRpZG4ndCBnZXQgb25lIik7Ci0JcGFyc2VfZGF0YSgmbXNnKTsKKwlwYXJzZV9kYXRhKCZtc2csIDAsIE5VTEwpOwogCXJlYWRfbmV4dF9jb21tYW5kKCk7CiAJcGFyc2VfZnJvbShiKTsKIAltZXJnZV9saXN0ID0gcGFyc2VfbWVyZ2UoJm1lcmdlX2NvdW50KTsKQEAgLTIxNjIsNiArMjUyNSw4IEBACiAJCWxvYWRfYnJhbmNoKGIpOwogCX0KIAorCXByZXZfZmFub3V0ID0gY29udmVydF9udW1fbm90ZXNfdG9fZmFub3V0KGItPm51bV9ub3Rlcyk7CisKIAkvKiBmaWxlX2NoYW5nZSogKi8KIAl3aGlsZSAoY29tbWFuZF9idWYubGVuID4gMCkgewogCQlpZiAoIXByZWZpeGNtcChjb21tYW5kX2J1Zi5idWYsICJNICIpKQpAQCAtMjE3Miw2ICsyNTM3LDggQEAKIAkJCWZpbGVfY2hhbmdlX2NyKGIsIDEpOwogCQllbHNlIGlmICghcHJlZml4Y21wKGNvbW1hbmRfYnVmLmJ1ZiwgIkMgIikpCiAJCQlmaWxlX2NoYW5nZV9jcihiLCAwKTsKKwkJZWxzZSBpZiAoIXByZWZpeGNtcChjb21tYW5kX2J1Zi5idWYsICJOICIpKQorCQkJbm90ZV9jaGFuZ2VfbihiLCBwcmV2X2Zhbm91dCk7CiAJCWVsc2UgaWYgKCFzdHJjbXAoImRlbGV0ZWFsbCIsIGNvbW1hbmRfYnVmLmJ1ZikpCiAJCQlmaWxlX2NoYW5nZV9kZWxldGVhbGwoYik7CiAJCWVsc2UgewpAQCAtMjE4Miw2ICsyNTQ5LDEwIEBACiAJCQlicmVhazsKIAl9CiAKKwluZXdfZmFub3V0ID0gY29udmVydF9udW1fbm90ZXNfdG9fZmFub3V0KGItPm51bV9ub3Rlcyk7CisJaWYgKG5ld19mYW5vdXQgIT0gcHJldl9mYW5vdXQpCisJCWItPm51bV9ub3RlcyA9IGNoYW5nZV9ub3RlX2Zhbm91dCgmYi0+YnJhbmNoX3RyZWUsIG5ld19mYW5vdXQpOworCiAJLyogYnVpbGQgdGhlIHRyZWUgYW5kIHRoZSBjb21taXQgKi8KIAlzdG9yZV90cmVlKCZiLT5icmFuY2hfdHJlZSk7CiAJaGFzaGNweShiLT5icmFuY2hfdHJlZS52ZXJzaW9uc1swXS5zaGExLApAQCAtMjIyMiw2ICsyNTkzLDcgQEAKIAlzdHJ1Y3QgdGFnICp0OwogCXVpbnRtYXhfdCBmcm9tX21hcmsgPSAwOwogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOwogCiAJLyogT2J0YWluIHRoZSBuZXcgdGFnIG5hbWUgZnJvbSB0aGUgcmVzdCBvZiBvdXIgY29tbWFuZCAqLwogCXNwID0gc3RyY2hyKGNvbW1hbmRfYnVmLmJ1ZiwgJyAnKSArIDE7CkBAIC0yMjQyLDE5ICsyNjE0LDE4IEBACiAJcyA9IGxvb2t1cF9icmFuY2goZnJvbSk7CiAJaWYgKHMpIHsKIAkJaGFzaGNweShzaGExLCBzLT5zaGExKTsKKwkJdHlwZSA9IE9CSl9DT01NSVQ7CiAJfSBlbHNlIGlmICgqZnJvbSA9PSAnOicpIHsKIAkJc3RydWN0IG9iamVjdF9lbnRyeSAqb2U7CiAJCWZyb21fbWFyayA9IHN0cnRvdW1heChmcm9tICsgMSwgTlVMTCwgMTApOwogCQlvZSA9IGZpbmRfbWFyayhmcm9tX21hcmspOwotCQlpZiAob2UtPnR5cGUgIT0gT0JKX0NPTU1JVCkKLQkJCWRpZSgiTWFyayA6JSIgUFJJdU1BWCAiIG5vdCBhIGNvbW1pdCIsIGZyb21fbWFyayk7Ci0JCWhhc2hjcHkoc2hhMSwgb2UtPnNoYTEpOworCQl0eXBlID0gb2UtPnR5cGU7CisJCWhhc2hjcHkoc2hhMSwgb2UtPmlkeC5zaGExKTsKIAl9IGVsc2UgaWYgKCFnZXRfc2hhMShmcm9tLCBzaGExKSkgewogCQl1bnNpZ25lZCBsb25nIHNpemU7CiAJCWNoYXIgKmJ1ZjsKIAotCQlidWYgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShzaGExLAotCQkJY29tbWl0X3R5cGUsICZzaXplLCBzaGExKTsKKwkJYnVmID0gcmVhZF9zaGExX2ZpbGUoc2hhMSwgJnR5cGUsICZzaXplKTsKIAkJaWYgKCFidWYgfHwgc2l6ZSA8IDQ2KQogCQkJZGllKCJOb3QgYSB2YWxpZCBjb21taXQ6ICVzIiwgZnJvbSk7CiAJCWZyZWUoYnVmKTsKQEAgLTIyNzAsNyArMjY0MSw3IEBACiAJCXRhZ2dlciA9IE5VTEw7CiAKIAkvKiB0YWcgcGF5bG9hZC9tZXNzYWdlICovCi0JcGFyc2VfZGF0YSgmbXNnKTsKKwlwYXJzZV9kYXRhKCZtc2csIDAsIE5VTEwpOwogCiAJLyogYnVpbGQgdGhlIHRhZyBvYmplY3QgKi8KIAlzdHJidWZfcmVzZXQoJm5ld19kYXRhKTsKQEAgLTIyNzksNyArMjY1MCw3IEBACiAJCSAgICAib2JqZWN0ICVzXG4iCiAJCSAgICAidHlwZSAlc1xuIgogCQkgICAgInRhZyAlc1xuIiwKLQkJICAgIHNoYTFfdG9faGV4KHNoYTEpLCBjb21taXRfdHlwZSwgdC0+bmFtZSk7CisJCSAgICBzaGExX3RvX2hleChzaGExKSwgdHlwZW5hbWUodHlwZSksIHQtPm5hbWUpOwogCWlmICh0YWdnZXIpCiAJCXN0cmJ1Zl9hZGRmKCZuZXdfZGF0YSwKIAkJCSAgICAidGFnZ2VyICVzXG4iLCB0YWdnZXIpOwpAQCAtMjMzNywzOSArMjcwOCwxNTAgQEAKIAlza2lwX29wdGlvbmFsX2xmKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGltcG9ydF9tYXJrcyhjb25zdCBjaGFyICppbnB1dF9maWxlKQorc3RhdGljIGNoYXIqIG1ha2VfZmFzdF9pbXBvcnRfcGF0aChjb25zdCBjaGFyICpwYXRoKQogewotCWNoYXIgbGluZVs1MTJdOwotCUZJTEUgKmYgPSBmb3BlbihpbnB1dF9maWxlLCAiciIpOwotCWlmICghZikKLQkJZGllKCJjYW5ub3QgcmVhZCAlczogJXMiLCBpbnB1dF9maWxlLCBzdHJlcnJvcihlcnJubykpOwotCXdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7Ci0JCXVpbnRtYXhfdCBtYXJrOwotCQljaGFyICplbmQ7Ci0JCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07Ci0JCXN0cnVjdCBvYmplY3RfZW50cnkgKmU7CisJc3RydWN0IHN0cmJ1ZiBhYnNfcGF0aCA9IFNUUkJVRl9JTklUOwogCi0JCWVuZCA9IHN0cmNocihsaW5lLCAnXG4nKTsKLQkJaWYgKGxpbmVbMF0gIT0gJzonIHx8ICFlbmQpCi0JCQlkaWUoImNvcnJ1cHQgbWFyayBsaW5lOiAlcyIsIGxpbmUpOwotCQkqZW5kID0gMDsKLQkJbWFyayA9IHN0cnRvdW1heChsaW5lICsgMSwgJmVuZCwgMTApOwotCQlpZiAoIW1hcmsgfHwgZW5kID09IGxpbmUgKyAxCi0JCQl8fCAqZW5kICE9ICcgJyB8fCBnZXRfc2hhMShlbmQgKyAxLCBzaGExKSkKLQkJCWRpZSgiY29ycnVwdCBtYXJrIGxpbmU6ICVzIiwgbGluZSk7Ci0JCWUgPSBmaW5kX29iamVjdChzaGExKTsKLQkJaWYgKCFlKSB7Ci0JCQllbnVtIG9iamVjdF90eXBlIHR5cGUgPSBzaGExX29iamVjdF9pbmZvKHNoYTEsIE5VTEwpOwotCQkJaWYgKHR5cGUgPCAwKQotCQkJCWRpZSgib2JqZWN0IG5vdCBmb3VuZDogJXMiLCBzaGExX3RvX2hleChzaGExKSk7Ci0JCQllID0gaW5zZXJ0X29iamVjdChzaGExKTsKLQkJCWUtPnR5cGUgPSB0eXBlOwotCQkJZS0+cGFja19pZCA9IE1BWF9QQUNLX0lEOwotCQkJZS0+b2Zmc2V0ID0gMTsgLyoganVzdCBub3QgemVybyEgKi8KLQkJfQotCQlpbnNlcnRfbWFyayhtYXJrLCBlKTsKKwlpZiAoIXJlbGF0aXZlX21hcmtzX3BhdGhzIHx8IGlzX2Fic29sdXRlX3BhdGgocGF0aCkpCisJCXJldHVybiB4c3RyZHVwKHBhdGgpOworCXN0cmJ1Zl9hZGRmKCZhYnNfcGF0aCwgIiVzL2luZm8vZmFzdC1pbXBvcnQvJXMiLCBnZXRfZ2l0X2RpcigpLCBwYXRoKTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYWJzX3BhdGgsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBvcHRpb25faW1wb3J0X21hcmtzKGNvbnN0IGNoYXIgKm1hcmtzLCBpbnQgZnJvbV9zdHJlYW0pCit7CisJaWYgKGltcG9ydF9tYXJrc19maWxlKSB7CisJCWlmIChmcm9tX3N0cmVhbSkKKwkJCWRpZSgiT25seSBvbmUgaW1wb3J0LW1hcmtzIGNvbW1hbmQgYWxsb3dlZCBwZXIgc3RyZWFtIik7CisKKwkJLyogcmVhZCBwcmV2aW91cyBtYXJrIGZpbGUgKi8KKwkJaWYoIWltcG9ydF9tYXJrc19maWxlX2Zyb21fc3RyZWFtKQorCQkJcmVhZF9tYXJrcygpOwogCX0KLQlmY2xvc2UoZik7CisKKwlpbXBvcnRfbWFya3NfZmlsZSA9IG1ha2VfZmFzdF9pbXBvcnRfcGF0aChtYXJrcyk7CisJaW1wb3J0X21hcmtzX2ZpbGVfZnJvbV9zdHJlYW0gPSBmcm9tX3N0cmVhbTsKK30KKworc3RhdGljIHZvaWQgb3B0aW9uX2RhdGVfZm9ybWF0KGNvbnN0IGNoYXIgKmZtdCkKK3sKKwlpZiAoIXN0cmNtcChmbXQsICJyYXciKSkKKwkJd2hlbnNwZWMgPSBXSEVOU1BFQ19SQVc7CisJZWxzZSBpZiAoIXN0cmNtcChmbXQsICJyZmMyODIyIikpCisJCXdoZW5zcGVjID0gV0hFTlNQRUNfUkZDMjgyMjsKKwllbHNlIGlmICghc3RyY21wKGZtdCwgIm5vdyIpKQorCQl3aGVuc3BlYyA9IFdIRU5TUEVDX05PVzsKKwllbHNlCisJCWRpZSgidW5rbm93biAtLWRhdGUtZm9ybWF0IGFyZ3VtZW50ICVzIiwgZm10KTsKK30KKworc3RhdGljIHZvaWQgb3B0aW9uX2RlcHRoKGNvbnN0IGNoYXIgKmRlcHRoKQoreworCW1heF9kZXB0aCA9IHN0cnRvdWwoZGVwdGgsIE5VTEwsIDApOworCWlmIChtYXhfZGVwdGggPiBNQVhfREVQVEgpCisJCWRpZSgiLS1kZXB0aCBjYW5ub3QgZXhjZWVkICV1IiwgTUFYX0RFUFRIKTsKK30KKworc3RhdGljIHZvaWQgb3B0aW9uX2FjdGl2ZV9icmFuY2hlcyhjb25zdCBjaGFyICpicmFuY2hlcykKK3sKKwltYXhfYWN0aXZlX2JyYW5jaGVzID0gc3RydG91bChicmFuY2hlcywgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIG9wdGlvbl9leHBvcnRfbWFya3MoY29uc3QgY2hhciAqbWFya3MpCit7CisJZXhwb3J0X21hcmtzX2ZpbGUgPSBtYWtlX2Zhc3RfaW1wb3J0X3BhdGgobWFya3MpOworfQorCitzdGF0aWMgdm9pZCBvcHRpb25fZXhwb3J0X3BhY2tfZWRnZXMoY29uc3QgY2hhciAqZWRnZXMpCit7CisJaWYgKHBhY2tfZWRnZXMpCisJCWZjbG9zZShwYWNrX2VkZ2VzKTsKKwlwYWNrX2VkZ2VzID0gZm9wZW4oZWRnZXMsICJhIik7CisJaWYgKCFwYWNrX2VkZ2VzKQorCQlkaWVfZXJybm8oIkNhbm5vdCBvcGVuICclcyciLCBlZGdlcyk7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2Vfb25lX29wdGlvbihjb25zdCBjaGFyICpvcHRpb24pCit7CisJaWYgKCFwcmVmaXhjbXAob3B0aW9uLCAibWF4LXBhY2stc2l6ZT0iKSkgeworCQl1bnNpZ25lZCBsb25nIHY7CisJCWlmICghZ2l0X3BhcnNlX3Vsb25nKG9wdGlvbiArIDE0LCAmdikpCisJCQlyZXR1cm4gMDsKKwkJaWYgKHYgPCA4MTkyKSB7CisJCQl3YXJuaW5nKCJtYXgtcGFjay1zaXplIGlzIG5vdyBpbiBieXRlcywgYXNzdW1pbmcgLS1tYXgtcGFjay1zaXplPSVsdW0iLCB2KTsKKwkJCXYgKj0gMTAyNCAqIDEwMjQ7CisJCX0gZWxzZSBpZiAodiA8IDEwMjQgKiAxMDI0KSB7CisJCQl3YXJuaW5nKCJtaW5pbXVtIG1heC1wYWNrLXNpemUgaXMgMSBNaUIiKTsKKwkJCXYgPSAxMDI0ICogMTAyNDsKKwkJfQorCQltYXhfcGFja3NpemUgPSB2OworCX0gZWxzZSBpZiAoIXByZWZpeGNtcChvcHRpb24sICJiaWctZmlsZS10aHJlc2hvbGQ9IikpIHsKKwkJdW5zaWduZWQgbG9uZyB2OworCQlpZiAoIWdpdF9wYXJzZV91bG9uZyhvcHRpb24gKyAxOSwgJnYpKQorCQkJcmV0dXJuIDA7CisJCWJpZ19maWxlX3RocmVzaG9sZCA9IHY7CisJfSBlbHNlIGlmICghcHJlZml4Y21wKG9wdGlvbiwgImRlcHRoPSIpKSB7CisJCW9wdGlvbl9kZXB0aChvcHRpb24gKyA2KTsKKwl9IGVsc2UgaWYgKCFwcmVmaXhjbXAob3B0aW9uLCAiYWN0aXZlLWJyYW5jaGVzPSIpKSB7CisJCW9wdGlvbl9hY3RpdmVfYnJhbmNoZXMob3B0aW9uICsgMTYpOworCX0gZWxzZSBpZiAoIXByZWZpeGNtcChvcHRpb24sICJleHBvcnQtcGFjay1lZGdlcz0iKSkgeworCQlvcHRpb25fZXhwb3J0X3BhY2tfZWRnZXMob3B0aW9uICsgMTgpOworCX0gZWxzZSBpZiAoIXByZWZpeGNtcChvcHRpb24sICJxdWlldCIpKSB7CisJCXNob3dfc3RhdHMgPSAwOworCX0gZWxzZSBpZiAoIXByZWZpeGNtcChvcHRpb24sICJzdGF0cyIpKSB7CisJCXNob3dfc3RhdHMgPSAxOworCX0gZWxzZSB7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHBhcnNlX29uZV9mZWF0dXJlKGNvbnN0IGNoYXIgKmZlYXR1cmUsIGludCBmcm9tX3N0cmVhbSkKK3sKKwlpZiAoIXByZWZpeGNtcChmZWF0dXJlLCAiZGF0ZS1mb3JtYXQ9IikpIHsKKwkJb3B0aW9uX2RhdGVfZm9ybWF0KGZlYXR1cmUgKyAxMik7CisJfSBlbHNlIGlmICghcHJlZml4Y21wKGZlYXR1cmUsICJpbXBvcnQtbWFya3M9IikpIHsKKwkJb3B0aW9uX2ltcG9ydF9tYXJrcyhmZWF0dXJlICsgMTMsIGZyb21fc3RyZWFtKTsKKwl9IGVsc2UgaWYgKCFwcmVmaXhjbXAoZmVhdHVyZSwgImV4cG9ydC1tYXJrcz0iKSkgeworCQlvcHRpb25fZXhwb3J0X21hcmtzKGZlYXR1cmUgKyAxMyk7CisJfSBlbHNlIGlmICghcHJlZml4Y21wKGZlYXR1cmUsICJyZWxhdGl2ZS1tYXJrcyIpKSB7CisJCXJlbGF0aXZlX21hcmtzX3BhdGhzID0gMTsKKwl9IGVsc2UgaWYgKCFwcmVmaXhjbXAoZmVhdHVyZSwgIm5vLXJlbGF0aXZlLW1hcmtzIikpIHsKKwkJcmVsYXRpdmVfbWFya3NfcGF0aHMgPSAwOworCX0gZWxzZSBpZiAoIXByZWZpeGNtcChmZWF0dXJlLCAiZm9yY2UiKSkgeworCQlmb3JjZV91cGRhdGUgPSAxOworCX0gZWxzZSB7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9mZWF0dXJlKHZvaWQpCit7CisJY2hhciAqZmVhdHVyZSA9IGNvbW1hbmRfYnVmLmJ1ZiArIDg7CisKKwlpZiAoc2Vlbl9kYXRhX2NvbW1hbmQpCisJCWRpZSgiR290IGZlYXR1cmUgY29tbWFuZCAnJXMnIGFmdGVyIGRhdGEgY29tbWFuZCIsIGZlYXR1cmUpOworCisJaWYgKHBhcnNlX29uZV9mZWF0dXJlKGZlYXR1cmUsIDEpKQorCQlyZXR1cm47CisKKwlkaWUoIlRoaXMgdmVyc2lvbiBvZiBmYXN0LWltcG9ydCBkb2VzIG5vdCBzdXBwb3J0IGZlYXR1cmUgJXMuIiwgZmVhdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX29wdGlvbih2b2lkKQoreworCWNoYXIgKm9wdGlvbiA9IGNvbW1hbmRfYnVmLmJ1ZiArIDExOworCisJaWYgKHNlZW5fZGF0YV9jb21tYW5kKQorCQlkaWUoIkdvdCBvcHRpb24gY29tbWFuZCAnJXMnIGFmdGVyIGRhdGEgY29tbWFuZCIsIG9wdGlvbik7CisKKwlpZiAocGFyc2Vfb25lX29wdGlvbihvcHRpb24pKQorCQlyZXR1cm47CisKKwlkaWUoIlRoaXMgdmVyc2lvbiBvZiBmYXN0LWltcG9ydCBkb2VzIG5vdCBzdXBwb3J0IG9wdGlvbjogJXMiLCBvcHRpb24pOwogfQogCiBzdGF0aWMgaW50IGdpdF9wYWNrX2NvbmZpZyhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2LCB2b2lkICpjYikKQEAgLTIzOTAsMTggKzI4NzIsNjIgQEAKIAkJcGFja19jb21wcmVzc2lvbl9zZWVuID0gMTsKIAkJcmV0dXJuIDA7CiAJfQorCWlmICghc3RyY21wKGssICJwYWNrLmluZGV4dmVyc2lvbiIpKSB7CisJCXBhY2tfaWR4X2RlZmF1bHRfdmVyc2lvbiA9IGdpdF9jb25maWdfaW50KGssIHYpOworCQlpZiAocGFja19pZHhfZGVmYXVsdF92ZXJzaW9uID4gMikKKwkJCWRpZSgiYmFkIHBhY2suaW5kZXh2ZXJzaW9uPSUiUFJJdTMyLAorCQkJICAgIHBhY2tfaWR4X2RlZmF1bHRfdmVyc2lvbik7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChrLCAicGFjay5wYWNrc2l6ZWxpbWl0IikpIHsKKwkJbWF4X3BhY2tzaXplID0gZ2l0X2NvbmZpZ191bG9uZyhrLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJjb3JlLmJpZ2ZpbGV0aHJlc2hvbGQiKSkgeworCQlsb25nIG4gPSBnaXRfY29uZmlnX2ludChrLCB2KTsKKwkJYmlnX2ZpbGVfdGhyZXNob2xkID0gMCA8IG4gPyBuIDogMDsKKwl9CiAJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyhrLCB2LCBjYik7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyIGZhc3RfaW1wb3J0X3VzYWdlW10gPQotImdpdCBmYXN0LWltcG9ydCBbLS1kYXRlLWZvcm1hdD1mXSBbLS1tYXgtcGFjay1zaXplPW5dIFstLWRlcHRoPW5dIFstLWFjdGl2ZS1icmFuY2hlcz1uXSBbLS1leHBvcnQtbWFya3M9bWFya3MuZmlsZV0iOworImdpdCBmYXN0LWltcG9ydCBbLS1kYXRlLWZvcm1hdD1mXSBbLS1tYXgtcGFjay1zaXplPW5dIFstLWJpZy1maWxlLXRocmVzaG9sZD1uXSBbLS1kZXB0aD1uXSBbLS1hY3RpdmUtYnJhbmNoZXM9bl0gWy0tZXhwb3J0LW1hcmtzPW1hcmtzLmZpbGVdIjsKKworc3RhdGljIHZvaWQgcGFyc2VfYXJndih2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMTsgaSA8IGdsb2JhbF9hcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYSA9IGdsb2JhbF9hcmd2W2ldOworCisJCWlmICgqYSAhPSAnLScgfHwgIXN0cmNtcChhLCAiLS0iKSkKKwkJCWJyZWFrOworCisJCWlmIChwYXJzZV9vbmVfb3B0aW9uKGEgKyAyKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChwYXJzZV9vbmVfZmVhdHVyZShhICsgMiwgMCkpCisJCQljb250aW51ZTsKKworCQlkaWUoInVua25vd24gb3B0aW9uICVzIiwgYSk7CisJfQorCWlmIChpICE9IGdsb2JhbF9hcmdjKQorCQl1c2FnZShmYXN0X2ltcG9ydF91c2FnZSk7CisKKwlzZWVuX2RhdGFfY29tbWFuZCA9IDE7CisJaWYgKGltcG9ydF9tYXJrc19maWxlKQorCQlyZWFkX21hcmtzKCk7Cit9CiAKIGludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKLQl1bnNpZ25lZCBpbnQgaSwgc2hvd19zdGF0cyA9IDE7CisJdW5zaWduZWQgaW50IGk7CiAKIAlnaXRfZXh0cmFjdF9hcmd2MF9wYXRoKGFyZ3ZbMF0pOwogCisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZShmYXN0X2ltcG9ydF91c2FnZSk7CisKIAlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CiAJZ2l0X2NvbmZpZyhnaXRfcGFja19jb25maWcsIE5VTEwpOwogCWlmICghcGFja19jb21wcmVzc2lvbl9zZWVuICYmIGNvcmVfY29tcHJlc3Npb25fc2VlbikKQEAgLTI0MTQsNTIgKzI5NDAsOCBAQAogCWF2YWlsX3RyZWVfdGFibGUgPSB4Y2FsbG9jKGF2YWlsX3RyZWVfdGFibGVfc3osIHNpemVvZihzdHJ1Y3QgYXZhaWxfdHJlZV9jb250ZW50KikpOwogCW1hcmtzID0gcG9vbF9jYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBtYXJrX3NldCkpOwogCi0JZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgewotCQljb25zdCBjaGFyICphID0gYXJndltpXTsKLQotCQlpZiAoKmEgIT0gJy0nIHx8ICFzdHJjbXAoYSwgIi0tIikpCi0JCQlicmVhazsKLQkJZWxzZSBpZiAoIXByZWZpeGNtcChhLCAiLS1kYXRlLWZvcm1hdD0iKSkgewotCQkJY29uc3QgY2hhciAqZm10ID0gYSArIDE0OwotCQkJaWYgKCFzdHJjbXAoZm10LCAicmF3IikpCi0JCQkJd2hlbnNwZWMgPSBXSEVOU1BFQ19SQVc7Ci0JCQllbHNlIGlmICghc3RyY21wKGZtdCwgInJmYzI4MjIiKSkKLQkJCQl3aGVuc3BlYyA9IFdIRU5TUEVDX1JGQzI4MjI7Ci0JCQllbHNlIGlmICghc3RyY21wKGZtdCwgIm5vdyIpKQotCQkJCXdoZW5zcGVjID0gV0hFTlNQRUNfTk9XOwotCQkJZWxzZQotCQkJCWRpZSgidW5rbm93biAtLWRhdGUtZm9ybWF0IGFyZ3VtZW50ICVzIiwgZm10KTsKLQkJfQotCQllbHNlIGlmICghcHJlZml4Y21wKGEsICItLW1heC1wYWNrLXNpemU9IikpCi0JCQltYXhfcGFja3NpemUgPSBzdHJ0b3VtYXgoYSArIDE2LCBOVUxMLCAwKSAqIDEwMjQgKiAxMDI0OwotCQllbHNlIGlmICghcHJlZml4Y21wKGEsICItLWRlcHRoPSIpKSB7Ci0JCQltYXhfZGVwdGggPSBzdHJ0b3VsKGEgKyA4LCBOVUxMLCAwKTsKLQkJCWlmIChtYXhfZGVwdGggPiBNQVhfREVQVEgpCi0JCQkJZGllKCItLWRlcHRoIGNhbm5vdCBleGNlZWQgJXUiLCBNQVhfREVQVEgpOwotCQl9Ci0JCWVsc2UgaWYgKCFwcmVmaXhjbXAoYSwgIi0tYWN0aXZlLWJyYW5jaGVzPSIpKQotCQkJbWF4X2FjdGl2ZV9icmFuY2hlcyA9IHN0cnRvdWwoYSArIDE4LCBOVUxMLCAwKTsKLQkJZWxzZSBpZiAoIXByZWZpeGNtcChhLCAiLS1pbXBvcnQtbWFya3M9IikpCi0JCQlpbXBvcnRfbWFya3MoYSArIDE1KTsKLQkJZWxzZSBpZiAoIXByZWZpeGNtcChhLCAiLS1leHBvcnQtbWFya3M9IikpCi0JCQltYXJrX2ZpbGUgPSBhICsgMTU7Ci0JCWVsc2UgaWYgKCFwcmVmaXhjbXAoYSwgIi0tZXhwb3J0LXBhY2stZWRnZXM9IikpIHsKLQkJCWlmIChwYWNrX2VkZ2VzKQotCQkJCWZjbG9zZShwYWNrX2VkZ2VzKTsKLQkJCXBhY2tfZWRnZXMgPSBmb3BlbihhICsgMjAsICJhIik7Ci0JCQlpZiAoIXBhY2tfZWRnZXMpCi0JCQkJZGllKCJDYW5ub3Qgb3BlbiAlczogJXMiLCBhICsgMjAsIHN0cmVycm9yKGVycm5vKSk7Ci0JCX0gZWxzZSBpZiAoIXN0cmNtcChhLCAiLS1mb3JjZSIpKQotCQkJZm9yY2VfdXBkYXRlID0gMTsKLQkJZWxzZSBpZiAoIXN0cmNtcChhLCAiLS1xdWlldCIpKQotCQkJc2hvd19zdGF0cyA9IDA7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYSwgIi0tc3RhdHMiKSkKLQkJCXNob3dfc3RhdHMgPSAxOwotCQllbHNlCi0JCQlkaWUoInVua25vd24gb3B0aW9uICVzIiwgYSk7Ci0JfQotCWlmIChpICE9IGFyZ2MpCi0JCXVzYWdlKGZhc3RfaW1wb3J0X3VzYWdlKTsKKwlnbG9iYWxfYXJnYyA9IGFyZ2M7CisJZ2xvYmFsX2FyZ3YgPSBhcmd2OwogCiAJcmNfZnJlZSA9IHBvb2xfYWxsb2MoY21kX3NhdmUgKiBzaXplb2YoKnJjX2ZyZWUpKTsKIAlmb3IgKGkgPSAwOyBpIDwgKGNtZF9zYXZlIC0gMSk7IGkrKykKQEAgLTI0ODIsOSArMjk2NCwyMCBAQAogCQkJcGFyc2VfY2hlY2twb2ludCgpOwogCQllbHNlIGlmICghcHJlZml4Y21wKGNvbW1hbmRfYnVmLmJ1ZiwgInByb2dyZXNzICIpKQogCQkJcGFyc2VfcHJvZ3Jlc3MoKTsKKwkJZWxzZSBpZiAoIXByZWZpeGNtcChjb21tYW5kX2J1Zi5idWYsICJmZWF0dXJlICIpKQorCQkJcGFyc2VfZmVhdHVyZSgpOworCQllbHNlIGlmICghcHJlZml4Y21wKGNvbW1hbmRfYnVmLmJ1ZiwgIm9wdGlvbiBnaXQgIikpCisJCQlwYXJzZV9vcHRpb24oKTsKKwkJZWxzZSBpZiAoIXByZWZpeGNtcChjb21tYW5kX2J1Zi5idWYsICJvcHRpb24gIikpCisJCQkvKiBpZ25vcmUgbm9uLWdpdCBvcHRpb25zKi87CiAJCWVsc2UKIAkJCWRpZSgiVW5zdXBwb3J0ZWQgY29tbWFuZDogJXMiLCBjb21tYW5kX2J1Zi5idWYpOwogCX0KKworCS8qIGFyZ3YgaGFzbid0IGJlZW4gcGFyc2VkIHlldCwgZG8gc28gKi8KKwlpZiAoIXNlZW5fZGF0YV9jb21tYW5kKQorCQlwYXJzZV9hcmd2KCk7CisKIAllbmRfcGFja2ZpbGUoKTsKIAogCWR1bXBfYnJhbmNoZXMoKTsKZGlmZiAtLWdpdCBhL2ZldGNoLXBhY2suaCBiL2ZldGNoLXBhY2suaAppbmRleCA4YmQ5YzMyLi5mYmU4NWFjIDEwMDY0NAotLS0gYS9mZXRjaC1wYWNrLmgKKysrIGIvZmV0Y2gtcGFjay5oCkBAIC0xMyw3ICsxMyw4IEBACiAJCWZldGNoX2FsbDoxLAogCQl2ZXJib3NlOjEsCiAJCW5vX3Byb2dyZXNzOjEsCi0JCWluY2x1ZGVfdGFnOjE7CisJCWluY2x1ZGVfdGFnOjEsCisJCXN0YXRlbGVzc19ycGM6MTsKIH07CiAKIHN0cnVjdCByZWYgKmZldGNoX3BhY2soc3RydWN0IGZldGNoX3BhY2tfYXJncyAqYXJncywKZGlmZiAtLWdpdCBhL2ZzY2suYyBiL2ZzY2suYwppbmRleCA1MTFiODJjLi44OTI3OGMxIDEwMDY0NAotLS0gYS9mc2NrLmMKKysrIGIvZnNjay5jCkBAIC0yMjksNyArMjI5LDcgQEAKIAlzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpncmFmdDsKIAlpbnQgcGFyZW50cyA9IDA7CiAKLQlpZiAoIWNvbW1pdC0+ZGF0ZSkKKwlpZiAoY29tbWl0LT5kYXRlID09IFVMT05HX01BWCkKIAkJcmV0dXJuIGVycm9yX2Z1bmMoJmNvbW1pdC0+b2JqZWN0LCBGU0NLX0VSUk9SLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUiKTsKIAogCWlmIChtZW1jbXAoYnVmZmVyLCAidHJlZSAiLCA1KSkKZGlmZiAtLWdpdCBhL2ZzY2suaCBiL2ZzY2suaAppbmRleCAwMDg0NTZiLi4xZTRmNTI3IDEwMDY0NAotLS0gYS9mc2NrLmgKKysrIGIvZnNjay5oCkBAIC0xNyw2ICsxNyw3IEBACiAvKiBjYWxsYmFjayBmb3IgZnNja19vYmplY3QsIHR5cGUgaXMgRlNDS19FUlJPUiBvciBGU0NLX1dBUk4gKi8KIHR5cGVkZWYgaW50ICgqZnNja19lcnJvcikoc3RydWN0IG9iamVjdCAqb2JqLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqZXJyLCAuLi4pOwogCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKQogaW50IGZzY2tfZXJyb3JfZnVuY3Rpb24oc3RydWN0IG9iamVjdCAqb2JqLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqZm10LCAuLi4pOwogCiAvKiBkZXNjZW5kIGluIGFsbCBsaW5rZWQgY2hpbGQgb2JqZWN0cwpkaWZmIC0tZ2l0IGEvZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybCBiL2dpdC1hZGQtLWludGVyYWN0aXZlLnBlcmwKaW5kZXggMDZmNzA2MC4uMjFmMTMzMCAxMDA3NTUKLS0tIGEvZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybAorKysgYi9naXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsCkBAIC03Miw2ICs3Miw3OSBAQAogCiAjIGNvbW1hbmQgbGluZSBvcHRpb25zCiBteSAkcGF0Y2hfbW9kZTsKK215ICRwYXRjaF9tb2RlX3JldmlzaW9uOworCitzdWIgYXBwbHlfcGF0Y2g7CitzdWIgYXBwbHlfcGF0Y2hfZm9yX2NoZWNrb3V0X2NvbW1pdDsKK3N1YiBhcHBseV9wYXRjaF9mb3Jfc3Rhc2g7CisKK215ICVwYXRjaF9tb2RlcyA9ICgKKwknc3RhZ2UnID0+IHsKKwkJRElGRiA9PiAnZGlmZi1maWxlcyAtcCcsCisJCUFQUExZID0+IHN1YiB7IGFwcGx5X3BhdGNoICdhcHBseSAtLWNhY2hlZCcsIEBfOyB9LAorCQlBUFBMWV9DSEVDSyA9PiAnYXBwbHkgLS1jYWNoZWQnLAorCQlWRVJCID0+ICdTdGFnZScsCisJCVRBUkdFVCA9PiAnJywKKwkJUEFSVElDSVBMRSA9PiAnc3RhZ2luZycsCisJCUZJTFRFUiA9PiAnZmlsZS1vbmx5JywKKwl9LAorCSdzdGFzaCcgPT4geworCQlESUZGID0+ICdkaWZmLWluZGV4IC1wIEhFQUQnLAorCQlBUFBMWSA9PiBzdWIgeyBhcHBseV9wYXRjaCAnYXBwbHkgLS1jYWNoZWQnLCBAXzsgfSwKKwkJQVBQTFlfQ0hFQ0sgPT4gJ2FwcGx5IC0tY2FjaGVkJywKKwkJVkVSQiA9PiAnU3Rhc2gnLAorCQlUQVJHRVQgPT4gJycsCisJCVBBUlRJQ0lQTEUgPT4gJ3N0YXNoaW5nJywKKwkJRklMVEVSID0+IHVuZGVmLAorCX0sCisJJ3Jlc2V0X2hlYWQnID0+IHsKKwkJRElGRiA9PiAnZGlmZi1pbmRleCAtcCAtLWNhY2hlZCcsCisJCUFQUExZID0+IHN1YiB7IGFwcGx5X3BhdGNoICdhcHBseSAtUiAtLWNhY2hlZCcsIEBfOyB9LAorCQlBUFBMWV9DSEVDSyA9PiAnYXBwbHkgLVIgLS1jYWNoZWQnLAorCQlWRVJCID0+ICdVbnN0YWdlJywKKwkJVEFSR0VUID0+ICcnLAorCQlQQVJUSUNJUExFID0+ICd1bnN0YWdpbmcnLAorCQlGSUxURVIgPT4gJ2luZGV4LW9ubHknLAorCX0sCisJJ3Jlc2V0X25vdGhlYWQnID0+IHsKKwkJRElGRiA9PiAnZGlmZi1pbmRleCAtUiAtcCAtLWNhY2hlZCcsCisJCUFQUExZID0+IHN1YiB7IGFwcGx5X3BhdGNoICdhcHBseSAtLWNhY2hlZCcsIEBfOyB9LAorCQlBUFBMWV9DSEVDSyA9PiAnYXBwbHkgLS1jYWNoZWQnLAorCQlWRVJCID0+ICdBcHBseScsCisJCVRBUkdFVCA9PiAnIHRvIGluZGV4JywKKwkJUEFSVElDSVBMRSA9PiAnYXBwbHlpbmcnLAorCQlGSUxURVIgPT4gJ2luZGV4LW9ubHknLAorCX0sCisJJ2NoZWNrb3V0X2luZGV4JyA9PiB7CisJCURJRkYgPT4gJ2RpZmYtZmlsZXMgLXAnLAorCQlBUFBMWSA9PiBzdWIgeyBhcHBseV9wYXRjaCAnYXBwbHkgLVInLCBAXzsgfSwKKwkJQVBQTFlfQ0hFQ0sgPT4gJ2FwcGx5IC1SJywKKwkJVkVSQiA9PiAnRGlzY2FyZCcsCisJCVRBUkdFVCA9PiAnIGZyb20gd29ya3RyZWUnLAorCQlQQVJUSUNJUExFID0+ICdkaXNjYXJkaW5nJywKKwkJRklMVEVSID0+ICdmaWxlLW9ubHknLAorCX0sCisJJ2NoZWNrb3V0X2hlYWQnID0+IHsKKwkJRElGRiA9PiAnZGlmZi1pbmRleCAtcCcsCisJCUFQUExZID0+IHN1YiB7IGFwcGx5X3BhdGNoX2Zvcl9jaGVja291dF9jb21taXQgJy1SJywgQF8gfSwKKwkJQVBQTFlfQ0hFQ0sgPT4gJ2FwcGx5IC1SJywKKwkJVkVSQiA9PiAnRGlzY2FyZCcsCisJCVRBUkdFVCA9PiAnIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlJywKKwkJUEFSVElDSVBMRSA9PiAnZGlzY2FyZGluZycsCisJCUZJTFRFUiA9PiB1bmRlZiwKKwl9LAorCSdjaGVja291dF9ub3RoZWFkJyA9PiB7CisJCURJRkYgPT4gJ2RpZmYtaW5kZXggLVIgLXAnLAorCQlBUFBMWSA9PiBzdWIgeyBhcHBseV9wYXRjaF9mb3JfY2hlY2tvdXRfY29tbWl0ICcnLCBAXyB9LAorCQlBUFBMWV9DSEVDSyA9PiAnYXBwbHknLAorCQlWRVJCID0+ICdBcHBseScsCisJCVRBUkdFVCA9PiAnIHRvIGluZGV4IGFuZCB3b3JrdHJlZScsCisJCVBBUlRJQ0lQTEUgPT4gJ2FwcGx5aW5nJywKKwkJRklMVEVSID0+IHVuZGVmLAorCX0sCispOworCitteSAlcGF0Y2hfbW9kZV9mbGF2b3VyID0gJXskcGF0Y2hfbW9kZXN7c3RhZ2V9fTsKIAogc3ViIHJ1bl9jbWRfcGlwZSB7CiAJaWYgKCReTyBlcSAnTVNXaW4zMicgfHwgJF5PIGVxICdtc3lzJykgewpAQCAtMTg2LDExICsyNTksMTggQEAKIAkJQHRyYWNrZWQgPSBtYXAgewogCQkJY2hvbXAgJF87CiAJCQl1bnF1b3RlX3BhdGgoJF8pOwotCQl9IHJ1bl9jbWRfcGlwZShxdyhnaXQgbHMtZmlsZXMgLS1leGNsdWRlLXN0YW5kYXJkIC0tKSwgQEFSR1YpOworCQl9IHJ1bl9jbWRfcGlwZShxdyhnaXQgbHMtZmlsZXMgLS0pLCBAQVJHVik7CiAJCXJldHVybiBpZiAoIUB0cmFja2VkKTsKIAl9CiAKLQlteSAkcmVmZXJlbmNlID0gaXNfaW5pdGlhbF9jb21taXQoKSA/IGdldF9lbXB0eV90cmVlKCkgOiAnSEVBRCc7CisJbXkgJHJlZmVyZW5jZTsKKwlpZiAoZGVmaW5lZCAkcGF0Y2hfbW9kZV9yZXZpc2lvbiBhbmQgJHBhdGNoX21vZGVfcmV2aXNpb24gbmUgJ0hFQUQnKSB7CisJCSRyZWZlcmVuY2UgPSAkcGF0Y2hfbW9kZV9yZXZpc2lvbjsKKwl9IGVsc2lmIChpc19pbml0aWFsX2NvbW1pdCgpKSB7CisJCSRyZWZlcmVuY2UgPSBnZXRfZW1wdHlfdHJlZSgpOworCX0gZWxzZSB7CisJCSRyZWZlcmVuY2UgPSAnSEVBRCc7CisJfQogCWZvciAocnVuX2NtZF9waXBlKHF3KGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkCiAJCQkgICAgIC0tbnVtc3RhdCAtLXN1bW1hcnkpLCAkcmVmZXJlbmNlLAogCQkJICAgICAnLS0nLCBAdHJhY2tlZCkpIHsKQEAgLTYxMywxMiArNjkzLDI0IEBACiAJcHJpbnQgIlxuIjsKIH0KIAorc3ViIHJ1bl9naXRfYXBwbHkgeworCW15ICRjbWQgPSBzaGlmdDsKKwlteSAkZmg7CisJb3BlbiAkZmgsICd8IGdpdCAnIC4gJGNtZDsKKwlwcmludCAkZmggQF87CisJcmV0dXJuIGNsb3NlICRmaDsKK30KKwogc3ViIHBhcnNlX2RpZmYgewogCW15ICgkcGF0aCkgPSBAXzsKLQlteSBAZGlmZiA9IHJ1bl9jbWRfcGlwZShxdyhnaXQgZGlmZi1maWxlcyAtcCAtLSksICRwYXRoKTsKKwlteSBAZGlmZl9jbWQgPSBzcGxpdCgiICIsICRwYXRjaF9tb2RlX2ZsYXZvdXJ7RElGRn0pOworCWlmIChkZWZpbmVkICRwYXRjaF9tb2RlX3JldmlzaW9uKSB7CisJCXB1c2ggQGRpZmZfY21kLCAkcGF0Y2hfbW9kZV9yZXZpc2lvbjsKKwl9CisJbXkgQGRpZmYgPSBydW5fY21kX3BpcGUoImdpdCIsIEBkaWZmX2NtZCwgIi0tIiwgJHBhdGgpOwogCW15IEBjb2xvcmVkID0gKCk7CiAJaWYgKCRkaWZmX3VzZV9jb2xvcikgewotCQlAY29sb3JlZCA9IHJ1bl9jbWRfcGlwZShxdyhnaXQgZGlmZi1maWxlcyAtcCAtLWNvbG9yIC0tKSwgJHBhdGgpOworCQlAY29sb3JlZCA9IHJ1bl9jbWRfcGlwZSgiZ2l0IiwgQGRpZmZfY21kLCBxdygtLWNvbG9yIC0tKSwgJHBhdGgpOwogCX0KIAlteSAoQGh1bmspID0geyBURVhUID0+IFtdLCBESVNQTEFZID0+IFtdLCBUWVBFID0+ICdoZWFkZXInIH07CiAKQEAgLTYzOSwxNCArNzMxLDE3IEBACiAKIAlteSAkaGVhZCA9IHsgVEVYVCA9PiBbXSwgRElTUExBWSA9PiBbXSwgVFlQRSA9PiAnaGVhZGVyJyB9OwogCW15ICRtb2RlID0geyBURVhUID0+IFtdLCBESVNQTEFZID0+IFtdLCBUWVBFID0+ICdtb2RlJyB9OworCW15ICRkZWxldGlvbiA9IHsgVEVYVCA9PiBbXSwgRElTUExBWSA9PiBbXSwgVFlQRSA9PiAnZGVsZXRpb24nIH07CiAKIAlmb3IgKG15ICRpID0gMDsgJGkgPCBAeyRzcmMtPntURVhUfX07ICRpKyspIHsKLQkJbXkgJGRlc3QgPSAkc3JjLT57VEVYVH0tPlskaV0gPX4gL14ob2xkfG5ldykgbW9kZSAoXGQrKSQvID8KLQkJCSRtb2RlIDogJGhlYWQ7CisJCW15ICRkZXN0ID0KKwkJICAgJHNyYy0+e1RFWFR9LT5bJGldID1+IC9eKG9sZHxuZXcpIG1vZGUgKFxkKykkLyA/ICRtb2RlIDoKKwkJICAgJHNyYy0+e1RFWFR9LT5bJGldID1+IC9eZGVsZXRlZCBmaWxlLyA/ICRkZWxldGlvbiA6CisJCSAgICRoZWFkOwogCQlwdXNoIEB7JGRlc3QtPntURVhUfX0sICRzcmMtPntURVhUfS0+WyRpXTsKIAkJcHVzaCBAeyRkZXN0LT57RElTUExBWX19LCAkc3JjLT57RElTUExBWX0tPlskaV07CiAJfQotCXJldHVybiAoJGhlYWQsICRtb2RlKTsKKwlyZXR1cm4gKCRoZWFkLCAkbW9kZSwgJGRlbGV0aW9uKTsKIH0KIAogc3ViIGh1bmtfc3BsaXR0YWJsZSB7CkBAIC04NjIsNiArOTU3LDI4IEBACiAJcmV0dXJuIEBvdXQ7CiB9CiAKK3N1YiByZWFzc2VtYmxlX3BhdGNoIHsKKwlteSAkaGVhZCA9IHNoaWZ0OworCW15IEBwYXRjaDsKKworCSMgSW5jbHVkZSBldmVyeXRoaW5nIGluIHRoZSBoZWFkZXIgZXhjZXB0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRpZmYuCisJcHVzaCBAcGF0Y2gsIChncmVwIHsgIS9eWy0rXXszfS8gfSBAJGhlYWQpOworCisJIyBUaGVuIGluY2x1ZGUgYW55IGhlYWRlcnMgZnJvbSB0aGUgaHVuayBsaW5lcywgd2hpY2ggbXVzdAorCSMgY29tZSBiZWZvcmUgYW55IGFjdHVhbCBodW5rLgorCXdoaWxlIChAXyAmJiAkX1swXSAhfiAvXkAvKSB7CisJCXB1c2ggQHBhdGNoLCBzaGlmdDsKKwl9CisKKwkjIFRoZW4gYmVnaW4gdGhlIGRpZmYuCisJcHVzaCBAcGF0Y2gsIGdyZXAgeyAvXlstK117M30vIH0gQCRoZWFkOworCisJIyBBbmQgdGhlbiB0aGUgYWN0dWFsIGh1bmtzLgorCXB1c2ggQHBhdGNoLCBAXzsKKworCXJldHVybiBAcGF0Y2g7Cit9CisKIHN1YiBjb2xvcl9kaWZmIHsKIAlyZXR1cm4gbWFwIHsKIAkJY29sb3JlZCgoL15ALyAgPyAkZnJhZ2luZm9fY29sb3IgOgpAQCAtODgxLDYgKzk5OCw3IEBACiAJCW9yIGRpZSAiZmFpbGVkIHRvIG9wZW4gaHVuayBlZGl0IGZpbGUgZm9yIHdyaXRpbmc6ICIgLiAkITsKIAlwcmludCAkZmggIiMgTWFudWFsIGh1bmsgZWRpdCBtb2RlIC0tIHNlZSBib3R0b20gZm9yIGEgcXVpY2sgZ3VpZGVcbiI7CiAJcHJpbnQgJGZoIEAkb2xkdGV4dDsKKwlteSAkcGFydGljaXBsZSA9ICRwYXRjaF9tb2RlX2ZsYXZvdXJ7UEFSVElDSVBMRX07CiAJcHJpbnQgJGZoIDw8RU9GOwogIyAtLS0KICMgVG8gcmVtb3ZlICctJyBsaW5lcywgbWFrZSB0aGVtICcgJyBsaW5lcyAoY29udGV4dCkuCkBAIC04ODgsMTQgKzEwMDYsMTMgQEAKICMgTGluZXMgc3RhcnRpbmcgd2l0aCAjIHdpbGwgYmUgcmVtb3ZlZC4KICMKICMgSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmUKLSMgbWFya2VkIGZvciBzdGFnaW5nLiBJZiBpdCBkb2VzIG5vdCBhcHBseSBjbGVhbmx5LCB5b3Ugd2lsbCBiZSBnaXZlbgorIyBtYXJrZWQgZm9yICRwYXJ0aWNpcGxlLiBJZiBpdCBkb2VzIG5vdCBhcHBseSBjbGVhbmx5LCB5b3Ugd2lsbCBiZSBnaXZlbgogIyBhbiBvcHBvcnR1bml0eSB0byBlZGl0IGFnYWluLiBJZiBhbGwgbGluZXMgb2YgdGhlIGh1bmsgYXJlIHJlbW92ZWQsCiAjIHRoZW4gdGhlIGVkaXQgaXMgYWJvcnRlZCBhbmQgdGhlIGh1bmsgaXMgbGVmdCB1bmNoYW5nZWQuCiBFT0YKIAljbG9zZSAkZmg7CiAKLQlteSAkZWRpdG9yID0gJEVOVntHSVRfRURJVE9SfSB8fCAkcmVwby0+Y29uZmlnKCJjb3JlLmVkaXRvciIpCi0JCXx8ICRFTlZ7VklTVUFMfSB8fCAkRU5We0VESVRPUn0gfHwgInZpIjsKKwljaG9tcChteSAkZWRpdG9yID0gcnVuX2NtZF9waXBlKHF3KGdpdCB2YXIgR0lUX0VESVRPUikpKTsKIAlzeXN0ZW0oJ3NoJywgJy1jJywgJGVkaXRvci4nICIkQCInLCAkZWRpdG9yLCAkaHVua2ZpbGUpOwogCiAJaWYgKCQ/ICE9IDApIHsKQEAgLTkyMiwxMSArMTAzOSw4IEBACiAKIHN1YiBkaWZmX2FwcGxpZXMgewogCW15ICRmaDsKLQlvcGVuICRmaCwgJ3wgZ2l0IGFwcGx5IC0tcmVjb3VudCAtLWNhY2hlZCAtLWNoZWNrJzsKLQlmb3IgbXkgJGggKEBfKSB7Ci0JCXByaW50ICRmaCBAeyRoLT57VEVYVH19OwotCX0KLQlyZXR1cm4gY2xvc2UgJGZoOworCXJldHVybiBydW5fZ2l0X2FwcGx5KCRwYXRjaF9tb2RlX2ZsYXZvdXJ7QVBQTFlfQ0hFQ0t9IC4gJyAtLXJlY291bnQgLS1jaGVjaycsCisJCQkgICAgIG1hcCB7IEB7JF8tPntURVhUfX0gfSBAXyk7CiB9CiAKIHN1YiBfcmVzdG9yZV90ZXJtaW5hbF9hbmRfZGllIHsKQEAgLTk5MiwxMiArMTEwNiwxNCBAQAogfQogCiBzdWIgaGVscF9wYXRjaF9jbWQgewotCXByaW50IGNvbG9yZWQgJGhlbHBfY29sb3IsIDw8XEVPRiA7Ci15IC0gc3RhZ2UgdGhpcyBodW5rCi1uIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVuawotcSAtIHF1aXQsIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgbm9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXMKLWEgLSBzdGFnZSB0aGlzIGFuZCBhbGwgdGhlIHJlbWFpbmluZyBodW5rcyBpbiB0aGUgZmlsZQotZCAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgbm9yIGFueSBvZiB0aGUgcmVtYWluaW5nIGh1bmtzIGluIHRoZSBmaWxlCisJbXkgJHZlcmIgPSBsYyAkcGF0Y2hfbW9kZV9mbGF2b3Vye1ZFUkJ9OworCW15ICR0YXJnZXQgPSAkcGF0Y2hfbW9kZV9mbGF2b3Vye1RBUkdFVH07CisJcHJpbnQgY29sb3JlZCAkaGVscF9jb2xvciwgPDxFT0YgOworeSAtICR2ZXJiIHRoaXMgaHVuayR0YXJnZXQKK24gLSBkbyBub3QgJHZlcmIgdGhpcyBodW5rJHRhcmdldAorcSAtIHF1aXQsIGRvIG5vdCAkdmVyYiB0aGlzIGh1bmsgbm9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXMKK2EgLSAkdmVyYiB0aGlzIGFuZCBhbGwgdGhlIHJlbWFpbmluZyBodW5rcyBpbiB0aGUgZmlsZQorZCAtIGRvIG5vdCAkdmVyYiB0aGlzIGh1bmsgbm9yIGFueSBvZiB0aGUgcmVtYWluaW5nIGh1bmtzIGluIHRoZSBmaWxlCiBnIC0gc2VsZWN0IGEgaHVuayB0byBnbyB0bwogLyAtIHNlYXJjaCBmb3IgYSBodW5rIG1hdGNoaW5nIHRoZSBnaXZlbiByZWdleAogaiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IHVuZGVjaWRlZCBodW5rCkBAIC0xMDEwLDggKzExMjYsNDAgQEAKIEVPRgogfQogCitzdWIgYXBwbHlfcGF0Y2ggeworCW15ICRjbWQgPSBzaGlmdDsKKwlteSAkcmV0ID0gcnVuX2dpdF9hcHBseSAkY21kIC4gJyAtLXJlY291bnQnLCBAXzsKKwlpZiAoISRyZXQpIHsKKwkJcHJpbnQgU1RERVJSIEBfOworCX0KKwlyZXR1cm4gJHJldDsKK30KKworc3ViIGFwcGx5X3BhdGNoX2Zvcl9jaGVja291dF9jb21taXQgeworCW15ICRyZXZlcnNlID0gc2hpZnQ7CisJbXkgJGFwcGxpZXNfaW5kZXggPSBydW5fZ2l0X2FwcGx5ICdhcHBseSAnLiRyZXZlcnNlLicgLS1jYWNoZWQgLS1yZWNvdW50IC0tY2hlY2snLCBAXzsKKwlteSAkYXBwbGllc193b3JrdHJlZSA9IHJ1bl9naXRfYXBwbHkgJ2FwcGx5ICcuJHJldmVyc2UuJyAtLXJlY291bnQgLS1jaGVjaycsIEBfOworCisJaWYgKCRhcHBsaWVzX3dvcmt0cmVlICYmICRhcHBsaWVzX2luZGV4KSB7CisJCXJ1bl9naXRfYXBwbHkgJ2FwcGx5ICcuJHJldmVyc2UuJyAtLWNhY2hlZCAtLXJlY291bnQnLCBAXzsKKwkJcnVuX2dpdF9hcHBseSAnYXBwbHkgJy4kcmV2ZXJzZS4nIC0tcmVjb3VudCcsIEBfOworCQlyZXR1cm4gMTsKKwl9IGVsc2lmICghJGFwcGxpZXNfaW5kZXgpIHsKKwkJcHJpbnQgY29sb3JlZCAkZXJyb3JfY29sb3IsICJUaGUgc2VsZWN0ZWQgaHVua3MgZG8gbm90IGFwcGx5IHRvIHRoZSBpbmRleCFcbiI7CisJCWlmIChwcm9tcHRfeWVzbm8gIkFwcGx5IHRoZW0gdG8gdGhlIHdvcmt0cmVlIGFueXdheT8gIikgeworCQkJcmV0dXJuIHJ1bl9naXRfYXBwbHkgJ2FwcGx5ICcuJHJldmVyc2UuJyAtLXJlY291bnQnLCBAXzsKKwkJfSBlbHNlIHsKKwkJCXByaW50IGNvbG9yZWQgJGVycm9yX2NvbG9yLCAiTm90aGluZyB3YXMgYXBwbGllZC5cbiI7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0gZWxzZSB7CisJCXByaW50IFNUREVSUiBAXzsKKwkJcmV0dXJuIDA7CisJfQorfQorCiBzdWIgcGF0Y2hfdXBkYXRlX2NtZCB7Ci0JbXkgQGFsbF9tb2RzID0gbGlzdF9tb2RpZmllZCgnZmlsZS1vbmx5Jyk7CisJbXkgQGFsbF9tb2RzID0gbGlzdF9tb2RpZmllZCgkcGF0Y2hfbW9kZV9mbGF2b3Vye0ZJTFRFUn0pOwogCW15IEBtb2RzID0gZ3JlcCB7ICEoJF8tPntCSU5BUll9KSB9IEBhbGxfbW9kczsKIAlteSBAdGhlbTsKIApAQCAtMTA4Miw3ICsxMjMwLDcgQEAKIAlteSAoJGl4LCAkbnVtKTsKIAlteSAkcGF0aCA9IHNoaWZ0OwogCW15ICgkaGVhZCwgQGh1bmspID0gcGFyc2VfZGlmZigkcGF0aCk7Ci0JKCRoZWFkLCBteSAkbW9kZSkgPSBwYXJzZV9kaWZmX2hlYWRlcigkaGVhZCk7CisJKCRoZWFkLCBteSAkbW9kZSwgbXkgJGRlbGV0aW9uKSA9IHBhcnNlX2RpZmZfaGVhZGVyKCRoZWFkKTsKIAlmb3IgKEB7JGhlYWQtPntESVNQTEFZfX0pIHsKIAkJcHJpbnQ7CiAJfQpAQCAtMTA5MCw2ICsxMjM4LDEzIEBACiAJaWYgKEB7JG1vZGUtPntURVhUfX0pIHsKIAkJdW5zaGlmdCBAaHVuaywgJG1vZGU7CiAJfQorCWlmIChAeyRkZWxldGlvbi0+e1RFWFR9fSkgeworCQlmb3JlYWNoIG15ICRodW5rIChAaHVuaykgeworCQkJcHVzaCBAeyRkZWxldGlvbi0+e1RFWFR9fSwgQHskaHVuay0+e1RFWFR9fTsKKwkJCXB1c2ggQHskZGVsZXRpb24tPntESVNQTEFZfX0sIEB7JGh1bmstPntESVNQTEFZfX07CisJCX0KKwkJQGh1bmsgPSAoJGRlbGV0aW9uKTsKKwl9CiAKIAkkbnVtID0gc2NhbGFyIEBodW5rOwogCSRpeCA9IDA7CkBAIC0xMTQyLDggKzEyOTcsMTEgQEAKIAkJZm9yIChAeyRodW5rWyRpeF17RElTUExBWX19KSB7CiAJCQlwcmludDsKIAkJfQotCQlwcmludCBjb2xvcmVkICRwcm9tcHRfY29sb3IsICdTdGFnZSAnLAotCQkgICgkaHVua1skaXhde1RZUEV9IGVxICdtb2RlJyA/ICdtb2RlIGNoYW5nZScgOiAndGhpcyBodW5rJyksCisJCXByaW50IGNvbG9yZWQgJHByb21wdF9jb2xvciwgJHBhdGNoX21vZGVfZmxhdm91cntWRVJCfSwKKwkJICAoJGh1bmtbJGl4XXtUWVBFfSBlcSAnbW9kZScgPyAnIG1vZGUgY2hhbmdlJyA6CisJCSAgICRodW5rWyRpeF17VFlQRX0gZXEgJ2RlbGV0aW9uJyA/ICcgZGVsZXRpb24nIDoKKwkJICAgJyB0aGlzIGh1bmsnKSwKKwkJICAkcGF0Y2hfbW9kZV9mbGF2b3Vye1RBUkdFVH0sCiAJCSAgIiBbeSxuLHEsYSxkLC8kb3RoZXIsP10/ICI7CiAJCW15ICRsaW5lID0gcHJvbXB0X3NpbmdsZV9jaGFyYWN0ZXI7CiAJCWlmICgkbGluZSkgewpAQCAtMTMxNywxNiArMTQ3NSw5IEBACiAKIAlpZiAoQHJlc3VsdCkgewogCQlteSAkZmg7Ci0KLQkJb3BlbiAkZmgsICd8IGdpdCBhcHBseSAtLWNhY2hlZCAtLXJlY291bnQnOwotCQlmb3IgKEB7JGhlYWQtPntURVhUfX0sIEByZXN1bHQpIHsKLQkJCXByaW50ICRmaCAkXzsKLQkJfQotCQlpZiAoIWNsb3NlICRmaCkgewotCQkJZm9yIChAeyRoZWFkLT57VEVYVH19LCBAcmVzdWx0KSB7Ci0JCQkJcHJpbnQgU1RERVJSICRfOwotCQkJfQotCQl9CisJCW15IEBwYXRjaCA9IHJlYXNzZW1ibGVfcGF0Y2goJGhlYWQtPntURVhUfSwgQHJlc3VsdCk7CisJCW15ICRhcHBseV9yb3V0aW5lID0gJHBhdGNoX21vZGVfZmxhdm91cntBUFBMWX07CisJCSYkYXBwbHlfcm91dGluZShAcGF0Y2gpOwogCQlyZWZyZXNoKCk7CiAJfQogCkBAIC0xMzY3LDExICsxNTE4LDQxIEBACiBzdWIgcHJvY2Vzc19hcmdzIHsKIAlyZXR1cm4gdW5sZXNzIEBBUkdWOwogCW15ICRhcmcgPSBzaGlmdCBAQVJHVjsKLQlpZiAoJGFyZyBlcSAiLS1wYXRjaCIpIHsKLQkJJHBhdGNoX21vZGUgPSAxOwotCQkkYXJnID0gc2hpZnQgQEFSR1Ygb3IgZGllICJtaXNzaW5nIC0tIjsKKwlpZiAoJGFyZyA9fiAvLS1wYXRjaCg/Oj0oLiopKT8vKSB7CisJCWlmIChkZWZpbmVkICQxKSB7CisJCQlpZiAoJDEgZXEgJ3Jlc2V0JykgeworCQkJCSRwYXRjaF9tb2RlID0gJ3Jlc2V0X2hlYWQnOworCQkJCSRwYXRjaF9tb2RlX3JldmlzaW9uID0gJ0hFQUQnOworCQkJCSRhcmcgPSBzaGlmdCBAQVJHViBvciBkaWUgIm1pc3NpbmcgLS0iOworCQkJCWlmICgkYXJnIG5lICctLScpIHsKKwkJCQkJJHBhdGNoX21vZGVfcmV2aXNpb24gPSAkYXJnOworCQkJCQkkcGF0Y2hfbW9kZSA9ICgkYXJnIGVxICdIRUFEJyA/CisJCQkJCQkgICAgICAgJ3Jlc2V0X2hlYWQnIDogJ3Jlc2V0X25vdGhlYWQnKTsKKwkJCQkJJGFyZyA9IHNoaWZ0IEBBUkdWIG9yIGRpZSAibWlzc2luZyAtLSI7CisJCQkJfQorCQkJfSBlbHNpZiAoJDEgZXEgJ2NoZWNrb3V0JykgeworCQkJCSRhcmcgPSBzaGlmdCBAQVJHViBvciBkaWUgIm1pc3NpbmcgLS0iOworCQkJCWlmICgkYXJnIGVxICctLScpIHsKKwkJCQkJJHBhdGNoX21vZGUgPSAnY2hlY2tvdXRfaW5kZXgnOworCQkJCX0gZWxzZSB7CisJCQkJCSRwYXRjaF9tb2RlX3JldmlzaW9uID0gJGFyZzsKKwkJCQkJJHBhdGNoX21vZGUgPSAoJGFyZyBlcSAnSEVBRCcgPworCQkJCQkJICAgICAgICdjaGVja291dF9oZWFkJyA6ICdjaGVja291dF9ub3RoZWFkJyk7CisJCQkJCSRhcmcgPSBzaGlmdCBAQVJHViBvciBkaWUgIm1pc3NpbmcgLS0iOworCQkJCX0KKwkJCX0gZWxzaWYgKCQxIGVxICdzdGFnZScgb3IgJDEgZXEgJ3N0YXNoJykgeworCQkJCSRwYXRjaF9tb2RlID0gJDE7CisJCQkJJGFyZyA9IHNoaWZ0IEBBUkdWIG9yIGRpZSAibWlzc2luZyAtLSI7CisJCQl9IGVsc2UgeworCQkJCWRpZSAidW5rbm93biAtLXBhdGNoIG1vZGU6ICQxIjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCSRwYXRjaF9tb2RlID0gJ3N0YWdlJzsKKwkJCSRhcmcgPSBzaGlmdCBAQVJHViBvciBkaWUgIm1pc3NpbmcgLS0iOworCQl9CiAJCWRpZSAiaW52YWxpZCBhcmd1bWVudCAkYXJnLCBleHBlY3RpbmcgLS0iCiAJCSAgICB1bmxlc3MgJGFyZyBlcSAiLS0iOworCQklcGF0Y2hfbW9kZV9mbGF2b3VyID0gJXskcGF0Y2hfbW9kZXN7JHBhdGNoX21vZGV9fTsKIAl9CiAJZWxzaWYgKCRhcmcgbmUgIi0tIikgewogCQlkaWUgImludmFsaWQgYXJndW1lbnQgJGFyZywgZXhwZWN0aW5nIC0tIjsKZGlmZiAtLWdpdCBhL2dpdC1hbS5zaCBiL2dpdC1hbS5zaAppbmRleCA2ZDE4NDhiLi45ZGY5NTFhIDEwMDc1NQotLS0gYS9naXQtYW0uc2gKKysrIGIvZ2l0LWFtLnNoCkBAIC0xMSwyMCArMTEsMjcgQEAKIGksaW50ZXJhY3RpdmUgICBydW4gaW50ZXJhY3RpdmVseQogYixiaW5hcnkqICAgICAgIChoaXN0b3JpY2FsIG9wdGlvbiAtLSBuby1vcCkKIDMsM3dheSAgICAgICAgICBhbGxvdyBmYWxsIGJhY2sgb24gM3dheSBtZXJnaW5nIGlmIG5lZWRlZAorcSxxdWlldCAgICAgICAgIGJlIHF1aWV0CiBzLHNpZ25vZmYgICAgICAgYWRkIGEgU2lnbmVkLW9mZi1ieSBsaW5lIHRvIHRoZSBjb21taXQgbWVzc2FnZQogdSx1dGY4ICAgICAgICAgIHJlY29kZSBpbnRvIHV0ZjggKGRlZmF1bHQpCiBrLGtlZXAgICAgICAgICAgcGFzcyAtayBmbGFnIHRvIGdpdC1tYWlsaW5mbworYyxzY2lzc29ycyAgICAgIHN0cmlwIGV2ZXJ5dGhpbmcgYmVmb3JlIGEgc2Npc3NvcnMgbGluZQogd2hpdGVzcGFjZT0gICAgIHBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkKK2lnbm9yZS1zcGFjZS1jaGFuZ2UgcGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseQoraWdub3JlLXdoaXRlc3BhY2UgcGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseQogZGlyZWN0b3J5PSAgICAgIHBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkKIEM9ICAgICAgICAgICAgICBwYXNzIGl0IHRocm91Z2ggZ2l0LWFwcGx5CiBwPSAgICAgICAgICAgICAgcGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseQorcGF0Y2gtZm9ybWF0PSAgIGZvcm1hdCB0aGUgcGF0Y2goZXMpIGFyZSBpbgogcmVqZWN0ICAgICAgICAgIHBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkKIHJlc29sdmVtc2c9ICAgICBvdmVycmlkZSBlcnJvciBtZXNzYWdlIHdoZW4gcGF0Y2ggZmFpbHVyZSBvY2N1cnMKLXIscmVzb2x2ZWQgICAgICB0byBiZSB1c2VkIGFmdGVyIGEgcGF0Y2ggZmFpbHVyZQorY29udGludWUgICAgICAgIGNvbnRpbnVlIGFwcGx5aW5nIHBhdGNoZXMgYWZ0ZXIgcmVzb2x2aW5nIGEgY29uZmxpY3QKK3IscmVzb2x2ZWQgICAgICBzeW5vbnltcyBmb3IgLS1jb250aW51ZQogc2tpcCAgICAgICAgICAgIHNraXAgdGhlIGN1cnJlbnQgcGF0Y2gKIGFib3J0ICAgICAgICAgICByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIGFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24uCiBjb21taXR0ZXItZGF0ZS1pcy1hdXRob3ItZGF0ZSAgICBsaWUgYWJvdXQgY29tbWl0dGVyIGRhdGUKIGlnbm9yZS1kYXRlICAgICB1c2UgY3VycmVudCB0aW1lc3RhbXAgZm9yIGF1dGhvciBkYXRlCityZXJlcmUtYXV0b3VwZGF0ZSB1cGRhdGUgdGhlIGluZGV4IHdpdGggcmV1c2VkIGNvbmZsaWN0IHJlc29sdXRpb24gaWYgcG9zc2libGUKIHJlYmFzaW5nKiAgICAgICAoaW50ZXJuYWwgdXNlIGZvciBnaXQtcmViYXNlKSIKIAogLiBnaXQtc2gtc2V0dXAKQEAgLTQ0LDExICs1MSw3IEBACiBmaQogCiBzcSAoKSB7Ci0JZm9yIHNxYXJnCi0JZG8KLQkJcHJpbnRmICIlcyIgIiRzcWFyZyIgfAotCQlzZWQgLWUgJ3MvJ1wnJy8nXCcnXFwnXCcnJ1wnJy9nJyAtZSAncy8uKi8gJ1wnJyYnXCcnLycKLQlkb25lCisJZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlICIkQCIKIH0KIAogc3RvcF9oZXJlICgpIHsKQEAgLTEwMyw3ICsxMDYsNyBAQAogICAgIGdpdCB3cml0ZS10cmVlID4iJGRvdGVzdC9wYXRjaC1tZXJnZS1iYXNlKyIgfHwKICAgICBjYW5ub3RfZmFsbGJhY2sgIlJlcG9zaXRvcnkgbGFja3MgbmVjZXNzYXJ5IGJsb2JzIHRvIGZhbGwgYmFjayBvbiAzLXdheSBtZXJnZS4iCiAKLSAgICBlY2hvIFVzaW5nIGluZGV4IGluZm8gdG8gcmVjb25zdHJ1Y3QgYSBiYXNlIHRyZWUuLi4KKyAgICBzYXkgVXNpbmcgaW5kZXggaW5mbyB0byByZWNvbnN0cnVjdCBhIGJhc2UgdHJlZS4uLgogICAgIGlmIEdJVF9JTkRFWF9GSUxFPSIkZG90ZXN0L3BhdGNoLW1lcmdlLXRtcC1pbmRleCIgXAogCWdpdCBhcHBseSAtLWNhY2hlZCA8IiRkb3Rlc3QvcGF0Y2giCiAgICAgdGhlbgpAQCAtMTE5LDcgKzEyMiw3IEBACiAgICAgb3JpZ190cmVlPSQoY2F0ICIkZG90ZXN0L3BhdGNoLW1lcmdlLWJhc2UiKSAmJgogICAgIHJtIC1mciAiJGRvdGVzdCIvcGF0Y2gtbWVyZ2UtKiB8fCBleGl0IDEKIAotICAgIGVjaG8gRmFsbGluZyBiYWNrIHRvIHBhdGNoaW5nIGJhc2UgYW5kIDMtd2F5IG1lcmdlLi4uCisgICAgc2F5IEZhbGxpbmcgYmFjayB0byBwYXRjaGluZyBiYXNlIGFuZCAzLXdheSBtZXJnZS4uLgogCiAgICAgIyBUaGlzIGlzIG5vdCBzbyB3cm9uZy4gIERlcGVuZGluZyBvbiB3aGljaCBiYXNlIHdlIHBpY2tlZCwKICAgICAjIG9yaWdfdHJlZSBtYXkgYmUgd2lsZGx5IGRpZmZlcmVudCBmcm9tIG91cnMsIGJ1dCBoaXNfdHJlZQpAQCAtMTI5LDIxICsxMzIsMTcxIEBACiAKICAgICBldmFsIEdJVEhFQURfJGhpc190cmVlPSciJEZJUlNUTElORSInCiAgICAgZXhwb3J0IEdJVEhFQURfJGhpc190cmVlCisgICAgaWYgdGVzdCAtbiAiJEdJVF9RVUlFVCIKKyAgICB0aGVuCisJICAgIGV4cG9ydCBHSVRfTUVSR0VfVkVSQk9TSVRZPTAKKyAgICBmaQogICAgIGdpdC1tZXJnZS1yZWN1cnNpdmUgJG9yaWdfdHJlZSAtLSBIRUFEICRoaXNfdHJlZSB8fCB7Ci0JICAgIGdpdCByZXJlcmUKKwkgICAgZ2l0IHJlcmVyZSAkYWxsb3dfcmVyZXJlX2F1dG91cGRhdGUKIAkgICAgZWNobyBGYWlsZWQgdG8gbWVyZ2UgaW4gdGhlIGNoYW5nZXMuCiAJICAgIGV4aXQgMQogICAgIH0KICAgICB1bnNldCBHSVRIRUFEXyRoaXNfdHJlZQogfQogCitjbGVhbl9hYm9ydCAoKSB7CisJdGVzdCAkIyA9IDAgfHwgZWNobyA+JjIgIiRAIgorCXJtIC1mciAiJGRvdGVzdCIKKwlleGl0IDEKK30KKworcGF0Y2hfZm9ybWF0PQorCitjaGVja19wYXRjaF9mb3JtYXQgKCkgeworCSMgZWFybHkgcmV0dXJuIGlmIHBhdGNoX2Zvcm1hdCB3YXMgc2V0IGZyb20gdGhlIGNvbW1hbmQgbGluZQorCWlmIHRlc3QgLW4gIiRwYXRjaF9mb3JtYXQiCisJdGhlbgorCQlyZXR1cm4gMAorCWZpCisKKwkjIHdlIGRlZmF1bHQgdG8gbWJveCBmb3JtYXQgaWYgaW5wdXQgaXMgZnJvbSBzdGRpbiBhbmQgZm9yCisJIyBkaXJlY3RvcmllcworCWlmIHRlc3QgJCMgPSAwIHx8IHRlc3QgIngkMSIgPSAieC0iIHx8IHRlc3QgLWQgIiQxIgorCXRoZW4KKwkJcGF0Y2hfZm9ybWF0PW1ib3gKKwkJcmV0dXJuIDAKKwlmaQorCisJIyBvdGhlcndpc2UsIGNoZWNrIHRoZSBmaXJzdCBmZXcgbGluZXMgb2YgdGhlIGZpcnN0IHBhdGNoIHRvIHRyeQorCSMgdG8gZGV0ZWN0IGl0cyBmb3JtYXQKKwl7CisJCXJlYWQgbDEKKwkJcmVhZCBsMgorCQlyZWFkIGwzCisJCWNhc2UgIiRsMSIgaW4KKwkJIkZyb20gIiogfCAiRnJvbTogIiopCisJCQlwYXRjaF9mb3JtYXQ9bWJveAorCQkJOzsKKwkJJyMgVGhpcyBzZXJpZXMgYXBwbGllcyBvbiBHSVQgY29tbWl0JyopCisJCQlwYXRjaF9mb3JtYXQ9c3RnaXQtc2VyaWVzCisJCQk7OworCQkiIyBIRyBjaGFuZ2VzZXQgcGF0Y2giKQorCQkJcGF0Y2hfZm9ybWF0PWhnCisJCQk7OworCQkqKQorCQkJIyBpZiB0aGUgc2Vjb25kIGxpbmUgaXMgZW1wdHkgYW5kIHRoZSB0aGlyZCBpcworCQkJIyBhIEZyb20sIEF1dGhvciBvciBEYXRlIGVudHJ5LCB0aGlzIGlzIHZlcnkKKwkJCSMgbGlrZWx5IGFuIFN0R0lUIHBhdGNoCisJCQljYXNlICIkbDIsJGwzIiBpbgorCQkJLCJGcm9tOiAiKiB8ICwiQXV0aG9yOiAiKiB8ICwiRGF0ZTogIiopCisJCQkJcGF0Y2hfZm9ybWF0PXN0Z2l0CisJCQkJOzsKKwkJCSopCisJCQkJOzsKKwkJCWVzYWMKKwkJCTs7CisJCWVzYWMKKwkJaWYgdGVzdCAteiAiJHBhdGNoX2Zvcm1hdCIgJiYKKwkJCXRlc3QgLW4gIiRsMSIgJiYKKwkJCXRlc3QgLW4gIiRsMiIgJiYKKwkJCXRlc3QgLW4gIiRsMyIKKwkJdGhlbgorCQkJIyBUaGlzIGJlZ2lucyB3aXRoIHRocmVlIG5vbi1lbXB0eSBsaW5lcy4gIElzIHRoaXMgYQorCQkJIyBwaWVjZSBvZiBlLW1haWwgYS1sYSBSRkMyODIyPyAgR3JhYiBhbGwgdGhlIGhlYWRlcnMsCisJCQkjIGRpc2NhcmRpbmcgdGhlIGluZGVudGVkIHJlbWFpbmRlciBvZiBmb2xkZWQgbGluZXMsCisJCQkjIGFuZCBzZWUgaWYgaXQgbG9va3MgbGlrZSB0aGF0IHRoZXkgYWxsIGJlZ2luIHdpdGggdGhlCisJCQkjIGhlYWRlciBmaWVsZCBuYW1lcy4uLgorCQkJdHIgLWQgJ1wwMTUnIDwiJDEiIHwKKwkJCXNlZCAtbiAtZSAnL14kL3EnIC1lICcvXlsgCV0vZCcgLWUgcCB8CisJCQlzYW5lX2VncmVwIC12ICdeWyEtOTstfl0rOicgPi9kZXYvbnVsbCB8fAorCQkJcGF0Y2hfZm9ybWF0PW1ib3gKKwkJZmkKKwl9IDwgIiQxIiB8fCBjbGVhbl9hYm9ydAorfQorCitzcGxpdF9wYXRjaGVzICgpIHsKKwljYXNlICIkcGF0Y2hfZm9ybWF0IiBpbgorCW1ib3gpCisJCWNhc2UgIiRyZWJhc2luZyIgaW4KKwkJJycpCisJCQlrZWVwX2NyPSA7OworCQk/KikKKwkJCWtlZXBfY3I9LS1rZWVwLWNyIDs7CisJCWVzYWMKKwkJZ2l0IG1haWxzcGxpdCAtZCIkcHJlYyIgLW8iJGRvdGVzdCIgLWIgJGtlZXBfY3IgLS0gIiRAIiA+ICIkZG90ZXN0L2xhc3QiIHx8CisJCWNsZWFuX2Fib3J0CisJCTs7CisJc3RnaXQtc2VyaWVzKQorCQlpZiB0ZXN0ICQjIC1uZSAxCisJCXRoZW4KKwkJCWNsZWFuX2Fib3J0ICJPbmx5IG9uZSBTdEdJVCBwYXRjaCBzZXJpZXMgY2FuIGJlIGFwcGxpZWQgYXQgb25jZSIKKwkJZmkKKwkJc2VyaWVzX2Rpcj1gZGlybmFtZSAiJDEiYAorCQlzZXJpZXNfZmlsZT0iJDEiCisJCXNoaWZ0CisJCXsKKwkJCXNldCB4CisJCQl3aGlsZSByZWFkIGZpbGVuYW1lCisJCQlkbworCQkJCXNldCAiJEAiICIkc2VyaWVzX2Rpci8kZmlsZW5hbWUiCisJCQlkb25lCisJCQkjIHJlbW92ZSB0aGUgc2FmZXR5IHgKKwkJCXNoaWZ0CisJCQkjIHJlbW92ZSB0aGUgYXJnIGNvbWluZyBmcm9tIHRoZSBmaXJzdC1saW5lIGNvbW1lbnQKKwkJCXNoaWZ0CisJCX0gPCAiJHNlcmllc19maWxlIiB8fCBjbGVhbl9hYm9ydAorCQkjIHNldCB0aGUgcGF0Y2ggZm9ybWF0IGFwcHJvcHJpYXRlbHkKKwkJcGF0Y2hfZm9ybWF0PXN0Z2l0CisJCSMgbm93IGhhbmRsZSB0aGUgYWN0dWFsIFN0R0lUIHBhdGNoZXMKKwkJc3BsaXRfcGF0Y2hlcyAiJEAiCisJCTs7CisJc3RnaXQpCisJCXRoaXM9MAorCQlmb3Igc3RnaXQgaW4gIiRAIgorCQlkbworCQkJdGhpcz1gZXhwciAiJHRoaXMiICsgMWAKKwkJCW1zZ251bT1gcHJpbnRmICIlMCR7cHJlY31kIiAkdGhpc2AKKwkJCSMgUGVybCB2ZXJzaW9uIG9mIFN0R0lUIHBhcnNlX3BhdGNoLiBUaGUgZmlyc3Qgbm9uZW1wdHlsaW5lCisJCQkjIG5vdCBzdGFydGluZyB3aXRoIEF1dGhvciwgRnJvbSBvciBEYXRlIGlzIHRoZQorCQkJIyBzdWJqZWN0LCBhbmQgdGhlIGJvZHkgc3RhcnRzIHdpdGggdGhlIG5leHQgbm9uZW1wdHkKKwkJCSMgbGluZSBub3Qgc3RhcnRpbmcgd2l0aCBBdXRob3IsIEZyb20gb3IgRGF0ZQorCQkJcGVybCAtbmUgJ0JFR0lOIHsgJHN1YmplY3QgPSAwIH0KKwkJCQlpZiAoJHN1YmplY3QgPiAxKSB7IHByaW50IDsgfQorCQkJCWVsc2lmICgvXlxzKyQvKSB7IG5leHQgOyB9CisJCQkJZWxzaWYgKC9eQXV0aG9yOi8pIHsgcHJpbnQgcy9BdXRob3IvRnJvbS8gOyB9CisJCQkJZWxzaWYgKC9eKEZyb218RGF0ZSkvKSB7IHByaW50IDsgfQorCQkJCWVsc2lmICgkc3ViamVjdCkgeworCQkJCQkkc3ViamVjdCA9IDIgOworCQkJCQlwcmludCAiXG4iIDsKKwkJCQkJcHJpbnQgOworCQkJCX0gZWxzZSB7CisJCQkJCXByaW50ICJTdWJqZWN0OiAiLCAkXyA7CisJCQkJCSRzdWJqZWN0ID0gMTsKKwkJCQl9CisJCQknIDwgIiRzdGdpdCIgPiAiJGRvdGVzdC8kbXNnbnVtIiB8fCBjbGVhbl9hYm9ydAorCQlkb25lCisJCWVjaG8gIiR0aGlzIiA+ICIkZG90ZXN0L2xhc3QiCisJCXRoaXM9CisJCW1zZ251bT0KKwkJOzsKKwkqKQorCQlpZiB0ZXN0IC1uICIkcGFyc2VfcGF0Y2giIDsgdGhlbgorCQkJY2xlYW5fYWJvcnQgIlBhdGNoIGZvcm1hdCAkcGF0Y2hfZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQuIgorCQllbHNlCisJCQljbGVhbl9hYm9ydCAiUGF0Y2ggZm9ybWF0IGRldGVjdGlvbiBmYWlsZWQuIgorCQlmaQorCQk7OworCWVzYWMKK30KKwogcHJlYz00CiBkb3Rlc3Q9IiRHSVRfRElSL3JlYmFzZS1hcHBseSIKIHNpZ249IHV0Zjg9dCBrZWVwPSBza2lwPSBpbnRlcmFjdGl2ZT0gcmVzb2x2ZWQ9IHJlYmFzaW5nPSBhYm9ydD0KLXJlc29sdmVtc2c9IHJlc3VtZT0KK3Jlc29sdmVtc2c9IHJlc3VtZT0gc2Npc3NvcnM9IG5vX2luYm9keV9oZWFkZXJzPQogZ2l0X2FwcGx5X29wdD0KIGNvbW1pdHRlcl9kYXRlX2lzX2F1dGhvcl9kYXRlPQogaWdub3JlX2RhdGU9CithbGxvd19yZXJlcmVfYXV0b3VwZGF0ZT0KIAogd2hpbGUgdGVzdCAkIyAhPSAwCiBkbwpAQCAtMTYyLDE0ICszMTUsMTggQEAKIAkJdXRmOD0gOzsKIAkta3wtLWtlZXApCiAJCWtlZXA9dCA7OwotCS1yfC0tcmVzb2x2ZWQpCisJLWN8LS1zY2lzc29ycykKKwkJc2Npc3NvcnM9dCA7OworCS0tbm8tc2Npc3NvcnMpCisJCXNjaXNzb3JzPWYgOzsKKwktcnwtLXJlc29sdmVkfC0tY29udGludWUpCiAJCXJlc29sdmVkPXQgOzsKIAktLXNraXApCiAJCXNraXA9dCA7OwogCS0tYWJvcnQpCiAJCWFib3J0PXQgOzsKIAktLXJlYmFzaW5nKQotCQlyZWJhc2luZz10IHRocmVld2F5PXQga2VlcD10IDs7CisJCXJlYmFzaW5nPXQgdGhyZWV3YXk9dCBrZWVwPXQgc2Npc3NvcnM9ZiBub19pbmJvZHlfaGVhZGVycz10IDs7CiAJLWR8LS1kb3Rlc3QpCiAJCWRpZSAiLWQgb3B0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuICBEbyBub3QgdXNlLiIKIAkJOzsKQEAgLTE3OSwxMiArMzM2LDE4IEBACiAJCWdpdF9hcHBseV9vcHQ9IiRnaXRfYXBwbHlfb3B0ICQoc3EgIiQxPSQyIikiOyBzaGlmdCA7OwogCS1DfC1wKQogCQlnaXRfYXBwbHlfb3B0PSIkZ2l0X2FwcGx5X29wdCAkKHNxICIkMSQyIikiOyBzaGlmdCA7OwotCS0tcmVqZWN0KQorCS0tcGF0Y2gtZm9ybWF0KQorCQlzaGlmdCA7IHBhdGNoX2Zvcm1hdD0iJDEiIDs7CisJLS1yZWplY3R8LS1pZ25vcmUtd2hpdGVzcGFjZXwtLWlnbm9yZS1zcGFjZS1jaGFuZ2UpCiAJCWdpdF9hcHBseV9vcHQ9IiRnaXRfYXBwbHlfb3B0ICQxIiA7OwogCS0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGUpCiAJCWNvbW1pdHRlcl9kYXRlX2lzX2F1dGhvcl9kYXRlPXQgOzsKIAktLWlnbm9yZS1kYXRlKQogCQlpZ25vcmVfZGF0ZT10IDs7CisJLS1yZXJlcmUtYXV0b3VwZGF0ZXwtLW5vLXJlcmVyZS1hdXRvdXBkYXRlKQorCQlhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZT0iJDEiIDs7CisJLXF8LS1xdWlldCkKKwkJR0lUX1FVSUVUPXQgOzsKIAktLSkKIAkJc2hpZnQ7IGJyZWFrIDs7CiAJKikKQEAgLTI3OCwxOSArNDQxLDIxIEBACiAJCWRvbmUKIAkJc2hpZnQKIAlmaQotCWdpdCBtYWlsc3BsaXQgLWQiJHByZWMiIC1vIiRkb3Rlc3QiIC1iIC0tICIkQCIgPiAiJGRvdGVzdC9sYXN0IiB8fCAgewotCQlybSAtZnIgIiRkb3Rlc3QiCi0JCWV4aXQgMQotCX0KIAotCSMgLXMsIC11LCAtaywgLS13aGl0ZXNwYWNlLCAtMywgLUMgYW5kIC1wIGZsYWdzIGFyZSBrZXB0Ci0JIyBmb3IgdGhlIHJlc3VtaW5nIHNlc3Npb24gYWZ0ZXIgYSBwYXRjaCBmYWlsdXJlLgotCSMgLWkgY2FuIGFuZCBtdXN0IGJlIGdpdmVuIHdoZW4gcmVzdW1pbmcuCisJY2hlY2tfcGF0Y2hfZm9ybWF0ICIkQCIKKworCXNwbGl0X3BhdGNoZXMgIiRAIgorCisJIyAtaSBjYW4gYW5kIG11c3QgYmUgZ2l2ZW4gd2hlbiByZXN1bWluZzsgZXZlcnl0aGluZworCSMgZWxzZSBpcyBrZXB0CiAJZWNobyAiICRnaXRfYXBwbHlfb3B0IiA+IiRkb3Rlc3QvYXBwbHktb3B0IgogCWVjaG8gIiR0aHJlZXdheSIgPiIkZG90ZXN0L3RocmVld2F5IgogCWVjaG8gIiRzaWduIiA+IiRkb3Rlc3Qvc2lnbiIKIAllY2hvICIkdXRmOCIgPiIkZG90ZXN0L3V0ZjgiCiAJZWNobyAiJGtlZXAiID4iJGRvdGVzdC9rZWVwIgorCWVjaG8gIiRzY2lzc29ycyIgPiIkZG90ZXN0L3NjaXNzb3JzIgorCWVjaG8gIiRub19pbmJvZHlfaGVhZGVycyIgPiIkZG90ZXN0L25vX2luYm9keV9oZWFkZXJzIgorCWVjaG8gIiRHSVRfUVVJRVQiID4iJGRvdGVzdC9xdWlldCIKIAllY2hvIDEgPiIkZG90ZXN0L25leHQiCiAJaWYgdGVzdCAtbiAiJHJlYmFzaW5nIgogCXRoZW4KQEAgLTMzMSw2ICs0OTYsMjIgQEAKIHRoZW4KIAlrZWVwPS1rCiBmaQorY2FzZSAiJChjYXQgIiRkb3Rlc3Qvc2Npc3NvcnMiKSIgaW4KK3QpCisJc2Npc3NvcnM9LS1zY2lzc29ycyA7OworZikKKwlzY2lzc29ycz0tLW5vLXNjaXNzb3JzIDs7Citlc2FjCitpZiB0ZXN0ICIkKGNhdCAiJGRvdGVzdC9ub19pbmJvZHlfaGVhZGVycyIpIiA9IHQKK3RoZW4KKwlub19pbmJvZHlfaGVhZGVycz0tLW5vLWluYm9keS1oZWFkZXJzCitlbHNlCisJbm9faW5ib2R5X2hlYWRlcnM9CitmaQoraWYgdGVzdCAiJChjYXQgIiRkb3Rlc3QvcXVpZXQiKSIgPSB0Cit0aGVuCisJR0lUX1FVSUVUPXQKK2ZpCiBpZiB0ZXN0ICIkKGNhdCAiJGRvdGVzdC90aHJlZXdheSIpIiA9IHQKIHRoZW4KIAl0aHJlZXdheT10CkBAIC0zNTYsNyArNTM3LDcgQEAKIAogaWYgdGVzdCAiJHRoaXMiIC1ndCAiJGxhc3QiCiB0aGVuCi0JZWNobyBOb3RoaW5nIHRvIGRvLgorCXNheSBOb3RoaW5nIHRvIGRvLgogCXJtIC1mciAiJGRvdGVzdCIKIAlleGl0CiBmaQpAQCAtMzgxLDEyICs1NjIsMTIgQEAKIAkjIGJ5IHRoZSB1c2VyLCBvciB0aGUgdXNlciBjYW4gdGVsbCB1cyB0byBkbyBzbyBieSAtLXJlc29sdmVkIGZsYWcuCiAJY2FzZSAiJHJlc3VtZSIgaW4KIAknJykKLQkJZ2l0IG1haWxpbmZvICRrZWVwICR1dGY4ICIkZG90ZXN0L21zZyIgIiRkb3Rlc3QvcGF0Y2giIFwKKwkJZ2l0IG1haWxpbmZvICRrZWVwICRub19pbmJvZHlfaGVhZGVycyAkc2Npc3NvcnMgJHV0ZjggIiRkb3Rlc3QvbXNnIiAiJGRvdGVzdC9wYXRjaCIgXAogCQkJPCIkZG90ZXN0LyRtc2dudW0iID4iJGRvdGVzdC9pbmZvIiB8fAogCQkJc3RvcF9oZXJlICR0aGlzCiAKIAkJIyBza2lwIHBpbmUncyBpbnRlcm5hbCBmb2xkZXIgZGF0YQotCQlncmVwICdeQXV0aG9yOiBNYWlsIFN5c3RlbSBJbnRlcm5hbCBEYXRhJCcgXAorCQlzYW5lX2dyZXAgJ15BdXRob3I6IE1haWwgU3lzdGVtIEludGVybmFsIERhdGEkJyBcCiAJCQk8IiRkb3Rlc3QiL2luZm8gPi9kZXYvbnVsbCAmJgogCQkJZ29fbmV4dCAmJiBjb250aW51ZQogCkBAIC00MDIsMTEgKzU4MywxMiBAQAogCQkJZ2l0IGNhdC1maWxlIGNvbW1pdCAiJGNvbW1pdCIgfAogCQkJc2VkIC1lICcxLC9eJC9kJyA+IiRkb3Rlc3QvbXNnLWNsZWFuIgogCQllbHNlCi0JCQlTVUJKRUNUPSIkKHNlZCAtbiAnL15TdWJqZWN0LyBzL1N1YmplY3Q6IC8vcCcgIiRkb3Rlc3QvaW5mbyIpIgotCQkJY2FzZSAiJGtlZXBfc3ViamVjdCIgaW4gLWspICBTVUJKRUNUPSJbUEFUQ0hdICRTVUJKRUNUIiA7OyBlc2FjCi0KLQkJCShwcmludGYgJyVzXG5cbicgIiRTVUJKRUNUIjsgY2F0ICIkZG90ZXN0L21zZyIpIHwKLQkJCQlnaXQgc3RyaXBzcGFjZSA+ICIkZG90ZXN0L21zZy1jbGVhbiIKKwkJCXsKKwkJCQlzZWQgLW4gJy9eU3ViamVjdC8gcy9TdWJqZWN0OiAvL3AnICIkZG90ZXN0L2luZm8iCisJCQkJZWNobworCQkJCWNhdCAiJGRvdGVzdC9tc2ciCisJCQl9IHwKKwkJCWdpdCBzdHJpcHNwYWNlID4gIiRkb3Rlc3QvbXNnLWNsZWFuIgogCQlmaQogCQk7OwogCWVzYWMKQEAgLTQ4MSw3ICs2NjMsNyBAQAogCQlbZUVdKikgZ2l0X2VkaXRvciAiJGRvdGVzdC9maW5hbC1jb21taXQiCiAJCSAgICAgICBhY3Rpb249YWdhaW4gOzsKIAkJW3ZWXSopIGFjdGlvbj1hZ2FpbgotCQkgICAgICAgTEVTUz0tUyAke1BBR0VSOi1sZXNzfSAiJGRvdGVzdC9wYXRjaCIgOzsKKwkJICAgICAgIGdpdF9wYWdlciAiJGRvdGVzdC9wYXRjaCIgOzsKIAkJKikgICAgIGFjdGlvbj1hZ2FpbiA7OwogCQllc2FjCiAJICAgIGRvbmUKQEAgLTUwMiwxMSArNjg0LDE4IEBACiAJCXN0b3BfaGVyZSAkdGhpcwogCWZpCiAKLQlwcmludGYgJ0FwcGx5aW5nOiAlc1xuJyAiJEZJUlNUTElORSIKKwlzYXkgIkFwcGx5aW5nOiAkRklSU1RMSU5FIgogCiAJY2FzZSAiJHJlc29sdmVkIiBpbgogCScnKQotCQlldmFsICdnaXQgYXBwbHkgJyIkZ2l0X2FwcGx5X29wdCInIC0taW5kZXggIiRkb3Rlc3QvcGF0Y2giJworCQkjIFdoZW4gd2UgYXJlIGFsbG93ZWQgdG8gZmFsbCBiYWNrIHRvIDMtd2F5IGxhdGVyLCBkb24ndCBnaXZlCisJCSMgZmFsc2UgZXJyb3JzIGR1cmluZyB0aGUgaW5pdGlhbCBhdHRlbXB0LgorCQlzcXVlbGNoPQorCQlpZiB0ZXN0ICIkdGhyZWV3YXkiID0gdAorCQl0aGVuCisJCQlzcXVlbGNoPSc+L2Rldi9udWxsIDI+JjEgJworCQlmaQorCQlldmFsICJnaXQgYXBwbHkgJHNxdWVsY2gkZ2l0X2FwcGx5X29wdCInIC0taW5kZXggIiRkb3Rlc3QvcGF0Y2giJwogCQlhcHBseV9zdGF0dXM9JD8KIAkJOzsKIAl0KQpAQCAtNTM4LDcgKzcyNyw3IEBACiAJCSAgICAjIEFwcGx5aW5nIHRoZSBwYXRjaCB0byBhbiBlYXJsaWVyIHRyZWUgYW5kIG1lcmdpbmcgdGhlCiAJCSAgICAjIHJlc3VsdCBtYXkgaGF2ZSBwcm9kdWNlZCB0aGUgc2FtZSB0cmVlIGFzIG91cnMuCiAJCSAgICBnaXQgZGlmZi1pbmRleCAtLXF1aWV0IC0tY2FjaGVkIEhFQUQgLS0gJiYgewotCQkJZWNobyBObyBjaGFuZ2VzIC0tIFBhdGNoIGFscmVhZHkgYXBwbGllZC4KKwkJCXNheSBObyBjaGFuZ2VzIC0tIFBhdGNoIGFscmVhZHkgYXBwbGllZC4KIAkJCWdvX25leHQKIAkJCWNvbnRpbnVlCiAJCSAgICB9CkBAIC01NjQsNyArNzUzLDcgQEAKIAkJCUdJVF9BVVRIT1JfREFURT0KIAkJZmkKIAkJcGFyZW50PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSBIRUFEKSB8fAotCQllY2hvID4mMiAiYXBwbHlpbmcgdG8gYW4gZW1wdHkgaGlzdG9yeSIKKwkJc2F5ID4mMiAiYXBwbHlpbmcgdG8gYW4gZW1wdHkgaGlzdG9yeSIKIAogCQlpZiB0ZXN0IC1uICIkY29tbWl0dGVyX2RhdGVfaXNfYXV0aG9yX2RhdGUiCiAJCXRoZW4KQEAgLTU4NCw2ICs3NzMsNSBAQAogCWdvX25leHQKIGRvbmUKIAotZ2l0IGdjIC0tYXV0bwotCiBybSAtZnIgIiRkb3Rlc3QiCitnaXQgZ2MgLS1hdXRvCmRpZmYgLS1naXQgYS9naXQtYmlzZWN0LnNoIGIvZ2l0LWJpc2VjdC5zaAppbmRleCAyNDcxMmZmLi42ZTJhY2I4IDEwMDc1NQotLS0gYS9naXQtYmlzZWN0LnNoCisrKyBiL2dpdC1iaXNlY3Quc2gKQEAgLTEzLDggKzEzLDggQEAKICAgICAgICAgbWFyayA8cmV2Pi4uLiB1bnRlc3RhYmxlIHJldmlzaW9ucy4KIGdpdCBiaXNlY3QgbmV4dAogICAgICAgICBmaW5kIG5leHQgYmlzZWN0aW9uIHRvIHRlc3QgYW5kIGNoZWNrIGl0IG91dC4KLWdpdCBiaXNlY3QgcmVzZXQgWzxicmFuY2g+XQotICAgICAgICBmaW5pc2ggYmlzZWN0aW9uIHNlYXJjaCBhbmQgZ28gYmFjayB0byBicmFuY2guCitnaXQgYmlzZWN0IHJlc2V0IFs8Y29tbWl0Pl0KKyAgICAgICAgZmluaXNoIGJpc2VjdGlvbiBzZWFyY2ggYW5kIGdvIGJhY2sgdG8gY29tbWl0LgogZ2l0IGJpc2VjdCB2aXN1YWxpemUKICAgICAgICAgc2hvdyBiaXNlY3Qgc3RhdHVzIGluIGdpdGsuCiBnaXQgYmlzZWN0IHJlcGxheSA8bG9nZmlsZT4KQEAgLTMzLDE2ICszMyw2IEBACiBfeDQwPSdbMC05YS1mXVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdJwogX3g0MD0iJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCIKIAotc3EoKSB7Ci0JQEBQRVJMQEAgLWUgJwotCQlmb3IgKEBBUkdWKSB7Ci0JCQlzLydcJycvJ1wnXFxcXFwnXCcnL2c7Ci0JCQlwcmludCAiICdcJyckXydcJyciOwotCQl9Ci0JCXByaW50ICJcbiI7Ci0JJyAiJEAiCi19Ci0KIGJpc2VjdF9hdXRvc3RhcnQoKSB7CiAJdGVzdCAtcyAiJEdJVF9ESVIvQklTRUNUX1NUQVJUIiB8fCB7CiAJCWVjaG8gPiYyICdZb3UgbmVlZCB0byBzdGFydCBieSAiZ2l0IGJpc2VjdCBzdGFydCInCkBAIC0xMDcsNyArOTcsNyBAQAogCWZvciBhcmc7IGRvCiAJICAgIGNhc2UgIiRhcmciIGluIC0tKSBoYXNfZG91YmxlX2Rhc2g9MTsgYnJlYWsgOzsgZXNhYwogCWRvbmUKLQlvcmlnX2FyZ3M9JChzcSAiJEAiKQorCW9yaWdfYXJncz0kKGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSAiJEAiKQogCWJhZF9zZWVuPTAKIAlldmFsPScnCiAJd2hpbGUgWyAkIyAtZ3QgMCBdOyBkbwpAQCAtMTQ3LDcgKzEzNyw3IEBACiAJIyBXcml0ZSBuZXcgc3RhcnQgc3RhdGUuCiAJIwogCWVjaG8gIiRzdGFydF9oZWFkIiA+IiRHSVRfRElSL0JJU0VDVF9TVEFSVCIgJiYKLQlzcSAiJEAiID4iJEdJVF9ESVIvQklTRUNUX05BTUVTIiAmJgorCWdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSAiJEAiID4iJEdJVF9ESVIvQklTRUNUX05BTUVTIiAmJgogCWV2YWwgIiRldmFsIiAmJgogCWVjaG8gImdpdCBiaXNlY3Qgc3RhcnQkb3JpZ19hcmdzIiA+PiIkR0lUX0RJUi9CSVNFQ1RfTE9HIiB8fCBleGl0CiAJIwpAQCAtMTc3LDEwICsxNjcsNiBAQAogCXRlc3QgIiQxIiA9ICQoY2F0ICIkR0lUX0RJUi9CSVNFQ1RfRVhQRUNURURfUkVWIikKIH0KIAotbWFya19leHBlY3RlZF9yZXYoKSB7Ci0JZWNobyAiJDEiID4gIiRHSVRfRElSL0JJU0VDVF9FWFBFQ1RFRF9SRVYiCi19Ci0KIGNoZWNrX2V4cGVjdGVkX3JldnMoKSB7CiAJZm9yIF9yZXYgaW4gIiRAIjsgZG8KIAkJaWYgISBpc19leHBlY3RlZF9yZXYgIiRfcmV2IjsgdGhlbgpAQCAtMTk5LDcgKzE4NSw3IEBACiAgICAgICAgICAgICAqLi4qKQogICAgICAgICAgICAgICAgIHJldnM9JChnaXQgcmV2LWxpc3QgIiRhcmciKSB8fCBkaWUgIkJhZCByZXYgaW5wdXQ6ICRhcmciIDs7CiAgICAgICAgICAgICAqKQotICAgICAgICAgICAgICAgIHJldnM9JChzcSAiJGFyZyIpIDs7CisgICAgICAgICAgICAgICAgcmV2cz0kKGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSAiJGFyZyIpIDs7CiAJICAgIGVzYWMKICAgICAgICAgICAgIGFsbD0iJGFsbCAkcmV2cyIKICAgICAgICAgZG9uZQpAQCAtMjc5LDE2MiArMjY1LDIyIEBACiAJYmlzZWN0X25leHRfY2hlY2sgJiYgYmlzZWN0X25leHQgfHwgOgogfQogCi1leGl0X2lmX3NraXBwZWRfY29tbWl0cyAoKSB7Ci0JX3RyaWVkPSQxCi0JX2JhZD0kMgotCWlmIHRlc3QgLW4gIiRfdHJpZWQiIDsgdGhlbgotCQllY2hvICJUaGVyZSBhcmUgb25seSAnc2tpcCdwZWQgY29tbWl0IGxlZnQgdG8gdGVzdC4iCi0JCWVjaG8gIlRoZSBmaXJzdCBiYWQgY29tbWl0IGNvdWxkIGJlIGFueSBvZjoiCi0JCWVjaG8gIiRfdHJpZWQiIHwgdHIgJ1t8XScgJ1tcMDEyXScKLQkJdGVzdCAtbiAiJF9iYWQiICYmIGVjaG8gIiRfYmFkIgotCQllY2hvICJXZSBjYW5ub3QgYmlzZWN0IG1vcmUhIgotCQlleGl0IDIKLQlmaQotfQotCi1iaXNlY3RfY2hlY2tvdXQoKSB7Ci0JX3Jldj0iJDEiCi0JX21zZz0iJDIiCi0JZWNobyAiQmlzZWN0aW5nOiAkX21zZyIKLQltYXJrX2V4cGVjdGVkX3JldiAiJF9yZXYiCi0JZ2l0IGNoZWNrb3V0IC1xICIkX3JldiIgLS0gfHwgZXhpdAotCWdpdCBzaG93LWJyYW5jaCAiJF9yZXYiCi19Ci0KLWlzX2Ftb25nKCkgewotCV9yZXY9IiQxIgotCV9saXN0PSIkMiIKLQljYXNlICIkX2xpc3QiIGluICokX3JldiopIHJldHVybiAwIDs7IGVzYWMKLQlyZXR1cm4gMQotfQotCi1oYW5kbGVfYmFkX21lcmdlX2Jhc2UoKSB7Ci0JX2JhZG1iPSIkMSIKLQlfZ29vZD0iJDIiCi0JaWYgaXNfZXhwZWN0ZWRfcmV2ICIkX2JhZG1iIjsgdGhlbgotCQljYXQgPiYyIDw8RU9GCi1UaGUgbWVyZ2UgYmFzZSAkX2JhZG1iIGlzIGJhZC4KLVRoaXMgbWVhbnMgdGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCBiZXR3ZWVuICRfYmFkbWIgYW5kIFskX2dvb2RdLgotRU9GCi0JCWV4aXQgMwotCWVsc2UKLQkJY2F0ID4mMiA8PEVPRgotU29tZSBnb29kIHJldnMgYXJlIG5vdCBhbmNlc3RvciBvZiB0aGUgYmFkIHJldi4KLWdpdCBiaXNlY3QgY2Fubm90IHdvcmsgcHJvcGVybHkgaW4gdGhpcyBjYXNlLgotTWF5YmUgeW91IG1pc3Rha2UgZ29vZCBhbmQgYmFkIHJldnM/Ci1FT0YKLQkJZXhpdCAxCi0JZmkKLX0KLQotaGFuZGxlX3NraXBwZWRfbWVyZ2VfYmFzZSgpIHsKLQlfbWI9IiQxIgotCV9iYWQ9IiQyIgotCV9nb29kPSIkMyIKLQljYXQgPiYyIDw8RU9GCi1XYXJuaW5nOiB0aGUgbWVyZ2UgYmFzZSBiZXR3ZWVuICRfYmFkIGFuZCBbJF9nb29kXSBtdXN0IGJlIHNraXBwZWQuCi1TbyB3ZSBjYW5ub3QgYmUgc3VyZSB0aGUgZmlyc3QgYmFkIGNvbW1pdCBpcyBiZXR3ZWVuICRfbWIgYW5kICRfYmFkLgotV2UgY29udGludWUgYW55d2F5LgotRU9GCi19Ci0KLSMKLSMgImNoZWNrX21lcmdlX2Jhc2VzIiBjaGVja3MgdGhhdCBtZXJnZSBiYXNlcyBhcmUgbm90ICJiYWQiLgotIwotIyAtIElmIG9uZSBpcyAiZ29vZCIsIHRoYXQncyBnb29kLCB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0jIC0gSWYgb25lIGlzICJiYWQiLCBpdCBtZWFucyB0aGUgdXNlciBhc3N1bWVkIHNvbWV0aGluZyB3cm9uZwotIyBhbmQgd2UgbXVzdCBleGl0LgotIyAtIElmIG9uZSBpcyAic2tpcHBlZCIsIHdlIGNhbid0IGtub3cgYnV0IHdlIHNob3VsZCB3YXJuLgotIyAtIElmIHdlIGRvbid0IGtub3csIHdlIHNob3VsZCBjaGVjayBpdCBvdXQgYW5kIGFzayB0aGUgdXNlciB0byB0ZXN0LgotIwotIyBJbiB0aGUgbGFzdCBjYXNlIHdlIHdpbGwgcmV0dXJuIDEsIGFuZCBvdGhlcndpc2UgMC4KLSMKLWNoZWNrX21lcmdlX2Jhc2VzKCkgewotCV9iYWQ9IiQxIgotCV9nb29kPSIkMiIKLQlfc2tpcD0iJDMiCi0JZm9yIF9tYiBpbiAkKGdpdCBtZXJnZS1iYXNlIC0tYWxsICRfYmFkICRfZ29vZCkKLQlkbwotCQlpZiBpc19hbW9uZyAiJF9tYiIgIiRfZ29vZCI7IHRoZW4KLQkJCWNvbnRpbnVlCi0JCWVsaWYgdGVzdCAiJF9tYiIgPSAiJF9iYWQiOyB0aGVuCi0JCQloYW5kbGVfYmFkX21lcmdlX2Jhc2UgIiRfYmFkIiAiJF9nb29kIgotCQllbGlmIGlzX2Ftb25nICIkX21iIiAiJF9za2lwIjsgdGhlbgotCQkJaGFuZGxlX3NraXBwZWRfbWVyZ2VfYmFzZSAiJF9tYiIgIiRfYmFkIiAiJF9nb29kIgotCQllbHNlCi0JCQliaXNlY3RfY2hlY2tvdXQgIiRfbWIiICJhIG1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWQiCi0JCQlyZXR1cm4gMQotCQlmaQotCWRvbmUKLQlyZXR1cm4gMAotfQotCi0jCi0jICJjaGVja19nb29kX2FyZV9hbmNlc3RvcnNfb2ZfYmFkIiBjaGVja3MgdGhhdCBhbGwgImdvb2QiIHJldnMgYXJlCi0jIGFuY2VzdG9yIG9mIHRoZSAiYmFkIiByZXYuCi0jCi0jIElmIHRoYXQncyBub3QgdGhlIGNhc2UsIHdlIG5lZWQgdG8gY2hlY2sgdGhlIG1lcmdlIGJhc2VzLgotIyBJZiBhIG1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWQgYnkgdGhlIHVzZXIgd2UgcmV0dXJuIDEgYW5kCi0jIG90aGVyd2lzZSAwLgotIwotY2hlY2tfZ29vZF9hcmVfYW5jZXN0b3JzX29mX2JhZCgpIHsKLQl0ZXN0IC1mICIkR0lUX0RJUi9CSVNFQ1RfQU5DRVNUT1JTX09LIiAmJgotCQlyZXR1cm4KLQotCV9iYWQ9IiQxIgotCV9nb29kPSQoZWNobyAkMiB8IHNlZCAtZSAncy9cXi8vZycpCi0JX3NraXA9IiQzIgotCi0JIyBCaXNlY3Rpbmcgd2l0aCBubyBnb29kIHJldiBpcyBvawotCXRlc3QgLXogIiRfZ29vZCIgJiYgcmV0dXJuCi0KLQlfc2lkZT0kKGdpdCByZXYtbGlzdCAkX2dvb2QgXiRfYmFkKQotCWlmIHRlc3QgLW4gIiRfc2lkZSI7IHRoZW4KLQkJIyBSZXR1cm4gaWYgYSBjaGVja291dCB3YXMgZG9uZQotCQljaGVja19tZXJnZV9iYXNlcyAiJF9iYWQiICIkX2dvb2QiICIkX3NraXAiIHx8IHJldHVybgotCWZpCi0KLQk6ID4gIiRHSVRfRElSL0JJU0VDVF9BTkNFU1RPUlNfT0siCi0KLQlyZXR1cm4gMAotfQotCiBiaXNlY3RfbmV4dCgpIHsKIAljYXNlICIkIyIgaW4gMCkgOzsgKikgdXNhZ2UgOzsgZXNhYwogCWJpc2VjdF9hdXRvc3RhcnQKIAliaXNlY3RfbmV4dF9jaGVjayBnb29kCiAKLQkjIEdldCBiYWQsIGdvb2QgYW5kIHNraXBwZWQgcmV2cwotCWJhZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9iaXNlY3QvYmFkKSAmJgotCWdvb2Q9JChnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSdeJShvYmplY3RuYW1lKScgXAotCQkicmVmcy9iaXNlY3QvZ29vZC0qIiB8IHRyICdcMDEyJyAnICcpICYmCi0Jc2tpcD0kKGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9JyUob2JqZWN0bmFtZSknIFwKLQkJInJlZnMvYmlzZWN0L3NraXAtKiIgfCB0ciAnXDAxMicgJyAnKSB8fCBleGl0CisJIyBQZXJmb3JtIGFsbCBiaXNlY3Rpb24gY29tcHV0YXRpb24sIGRpc3BsYXkgYW5kIGNoZWNrb3V0CisJZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwKKwlyZXM9JD8KIAotCSMgTWF5YmUgc29tZSBtZXJnZSBiYXNlcyBtdXN0IGJlIHRlc3RlZCBmaXJzdAotCWNoZWNrX2dvb2RfYXJlX2FuY2VzdG9yc19vZl9iYWQgIiRiYWQiICIkZ29vZCIgIiRza2lwIgotCSMgUmV0dXJuIG5vdyBpZiBhIGNoZWNrb3V0IGhhcyBhbHJlYWR5IGJlZW4gZG9uZQotCXRlc3QgIiQ/IiAtZXEgIjEiICYmIHJldHVybgorICAgICAgICAjIENoZWNrIGlmIHdlIHNob3VsZCBleGl0IGJlY2F1c2UgYmlzZWN0aW9uIGlzIGZpbmlzaGVkCisJdGVzdCAkcmVzIC1lcSAxMCAmJiBleGl0IDAKIAotCSMgR2V0IGJpc2VjdGlvbiBpbmZvcm1hdGlvbgotCWV2YWw9JChldmFsICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1uZXh0LXZhcnMiKSAmJgotCWV2YWwgIiRldmFsIiB8fCBleGl0CisJIyBDaGVjayBmb3IgYW4gZXJyb3IgaW4gdGhlIGJpc2VjdGlvbiBwcm9jZXNzCisJdGVzdCAkcmVzIC1uZSAwICYmIGV4aXQgJHJlcwogCi0JaWYgWyAteiAiJGJpc2VjdF9yZXYiIF07IHRoZW4KLQkJIyBXZSBzaG91bGQgZXhpdCBoZXJlIG9ubHkgaWYgdGhlICJiYWQiCi0JCSMgY29tbWl0IGlzIGFsc28gYSAic2tpcCIgY29tbWl0IChzZWUgYWJvdmUpLgotCQlleGl0X2lmX3NraXBwZWRfY29tbWl0cyAiJGJpc2VjdF90cmllZCIKLQkJZWNobyAiJGJhZCB3YXMgYm90aCBnb29kIGFuZCBiYWQiCi0JCWV4aXQgMQotCWZpCi0JaWYgWyAiJGJpc2VjdF9yZXYiID0gIiRiYWQiIF07IHRoZW4KLQkJZXhpdF9pZl9za2lwcGVkX2NvbW1pdHMgIiRiaXNlY3RfdHJpZWQiICIkYmFkIgotCQllY2hvICIkYmlzZWN0X3JldiBpcyBmaXJzdCBiYWQgY29tbWl0IgotCQlnaXQgZGlmZi10cmVlIC0tcHJldHR5ICRiaXNlY3RfcmV2Ci0JCWV4aXQgMAotCWZpCi0KLQliaXNlY3RfY2hlY2tvdXQgIiRiaXNlY3RfcmV2IiAiJGJpc2VjdF9uciByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgKHJvdWdobHkgJGJpc2VjdF9zdGVwcyBzdGVwcykiCisJcmV0dXJuIDAKIH0KIAogYmlzZWN0X3Zpc3VhbGl6ZSgpIHsKQEAgLTQ1NCw4ICszMDAsNyBAQAogCQllc2FjCiAJZmkKIAotCW5vdD0kKGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9JyUocmVmbmFtZSknICJyZWZzL2Jpc2VjdC9nb29kLSoiKQotCWV2YWwgJyIkQCInIHJlZnMvYmlzZWN0L2JhZCAtLW5vdCAkbm90IC0tICQoY2F0ICIkR0lUX0RJUi9CSVNFQ1RfTkFNRVMiKQorCWV2YWwgJyIkQCInIC0tYmlzZWN0IC0tICQoY2F0ICIkR0lUX0RJUi9CSVNFQ1RfTkFNRVMiKQogfQogCiBiaXNlY3RfcmVzZXQoKSB7CkBAIC00NjUsOCArMzEwLDggQEAKIAl9CiAJY2FzZSAiJCMiIGluCiAJMCkgYnJhbmNoPSQoY2F0ICIkR0lUX0RJUi9CSVNFQ1RfU1RBUlQiKSA7OwotCTEpIGdpdCBzaG93LXJlZiAtLXZlcmlmeSAtLXF1aWV0IC0tICJyZWZzL2hlYWRzLyQxIiB8fAotCSAgICAgICBkaWUgIiQxIGRvZXMgbm90IHNlZW0gdG8gYmUgYSB2YWxpZCBicmFuY2giCisJMSkgZ2l0IHJldi1wYXJzZSAtLXF1aWV0IC0tdmVyaWZ5ICIkMV57Y29tbWl0fSIgPiAvZGV2L251bGwgfHwKKwkgICAgICAgZGllICInJDEnIGlzIG5vdCBhIHZhbGlkIGNvbW1pdCIKIAkgICBicmFuY2g9IiQxIiA7OwogCSopCiAJICAgIHVzYWdlIDs7CkBAIC01NDcsNyArMzkyLDcgQEAKIAogICAgICAgY2F0ICIkR0lUX0RJUi9CSVNFQ1RfUlVOIgogCi0gICAgICBpZiBncmVwICJmaXJzdCBiYWQgY29tbWl0IGNvdWxkIGJlIGFueSBvZiIgIiRHSVRfRElSL0JJU0VDVF9SVU4iIFwKKyAgICAgIGlmIHNhbmVfZ3JlcCAiZmlyc3QgYmFkIGNvbW1pdCBjb3VsZCBiZSBhbnkgb2YiICIkR0lUX0RJUi9CSVNFQ1RfUlVOIiBcCiAJCT4gL2Rldi9udWxsOyB0aGVuCiAJICBlY2hvID4mMiAiYmlzZWN0IHJ1biBjYW5ub3QgY29udGludWUgYW55IG1vcmUiCiAJICBleGl0ICRyZXMKQEAgLTU1OSw3ICs0MDQsNyBAQAogCSAgZXhpdCAkcmVzCiAgICAgICBmaQogCi0gICAgICBpZiBncmVwICJpcyBmaXJzdCBiYWQgY29tbWl0IiAiJEdJVF9ESVIvQklTRUNUX1JVTiIgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIGlmIHNhbmVfZ3JlcCAiaXMgdGhlIGZpcnN0IGJhZCBjb21taXQiICIkR0lUX0RJUi9CSVNFQ1RfUlVOIiA+IC9kZXYvbnVsbDsgdGhlbgogCSAgZWNobyAiYmlzZWN0IHJ1biBzdWNjZXNzIgogCSAgZXhpdCAwOwogICAgICAgZmkKZGlmZiAtLWdpdCBhL2dpdC1jb21wYXQtdXRpbC5oIGIvZ2l0LWNvbXBhdC11dGlsLmgKaW5kZXggYzdjZjJkNS4uYTNjNDUzNyAxMDA2NDQKLS0tIGEvZ2l0LWNvbXBhdC11dGlsLmgKKysrIGIvZ2l0LWNvbXBhdC11dGlsLmgKQEAgLTcsNyArNyw3IEBACiAvKgogICogU2VlIGlmIG91ciBjb21waWxlciBpcyBrbm93biB0byBzdXBwb3J0IGZsZXhpYmxlIGFycmF5IG1lbWJlcnMuCiAgKi8KLSNpZiBkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pICYmIChfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwpCisjaWYgZGVmaW5lZChfX1NURENfVkVSU0lPTl9fKSAmJiAoX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMKSAmJiAoIWRlZmluZWQoX19TVU5QUk9fQykgfHwgKF9fU1VOUFJPX0MgPiAweDU4MCkpCiAjIGRlZmluZSBGTEVYX0FSUkFZIC8qIGVtcHR5ICovCiAjZWxpZiBkZWZpbmVkKF9fR05VQ19fKQogIyBpZiAoX19HTlVDX18gPj0gMykKQEAgLTI2LDYgKzI2LDcgQEAKICNlbmRpZgogCiAjZGVmaW5lIEFSUkFZX1NJWkUoeCkgKHNpemVvZih4KS9zaXplb2YoeFswXSkpCisjZGVmaW5lIGJpdHNpemVvZih4KSAgKENIQVJfQklUICogc2l6ZW9mKHgpKQogCiAjaWZkZWYgX19HTlVDX18KICNkZWZpbmUgVFlQRU9GKHgpIChfX3R5cGVvZl9fKHgpKQpAQCAtMzMsMTMgKzM0LDI4IEBACiAjZGVmaW5lIFRZUEVPRih4KQogI2VuZGlmCiAKLSNkZWZpbmUgTVNCKHgsIGJpdHMpICgoeCkgJiBUWVBFT0YoeCkofjBVTEwgPDwgKHNpemVvZih4KSAqIDggLSAoYml0cykpKSkKKyNkZWZpbmUgTVNCKHgsIGJpdHMpICgoeCkgJiBUWVBFT0YoeCkofjBVTEwgPDwgKGJpdHNpemVvZih4KSAtIChiaXRzKSkpKQogI2RlZmluZSBIQVNfTVVMVElfQklUUyhpKSAgKChpKSAmICgoaSkgLSAxKSkgIC8qIGNoZWNrcyBpZiBhbiBpbnRlZ2VyIGhhcyBtb3JlIHRoYW4gMSBiaXQgc2V0ICovCiAKKyNkZWZpbmUgRElWX1JPVU5EX1VQKG4sZCkgKCgobikgKyAoZCkgLSAxKSAvIChkKSkKKwogLyogQXBwcm94aW1hdGlvbiBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgdHlwZS4gKi8KICNkZWZpbmUgZGVjaW1hbF9sZW5ndGgoeCkJKChpbnQpKHNpemVvZih4KSAqIDIuNTYgKyAwLjUpICsgMSkKIAotI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19GcmVlQlNEX18pICAmJiAhZGVmaW5lZChfX1VTTENfXykgJiYgIWRlZmluZWQoX01fVU5JWCkKKyNpZiBkZWZpbmVkKF9fc3VuX18pCisgLyoKKyAgKiBPbiBTb2xhcmlzLCB3aGVuIF9YT1BFTl9FWFRFTkRFRCBpcyBzZXQsIGl0cyBoZWFkZXIgZmlsZQorICAqIGZvcmNlcyB0aGUgcHJvZ3JhbXMgdG8gYmUgWFBHNHYyLCBkZWZlYXRpbmcgYW55IF9YT1BFTl9TT1VSQ0UKKyAgKiBzZXR0aW5nIHRvIHNheSB3ZSBhcmUgWFBHNSBvciBYUEc2LiAgQWxzbyBvbiBTb2xhcmlzLAorICAqIFhQRzYgcHJvZ3JhbXMgbXVzdCBiZSBjb21waWxlZCB3aXRoIGEgYzk5IGNvbXBpbGVyLCB3aGlsZQorICAqIG5vbiBYUEc2IHByb2dyYW1zIG11c3QgYmUgY29tcGlsZWQgd2l0aCBhIHByZS1jOTkgY29tcGlsZXIuCisgICovCisjIGlmIF9fU1REQ19WRVJTSU9OX18gLSAwID49IDE5OTkwMUwKKyMgZGVmaW5lIF9YT1BFTl9TT1VSQ0UgNjAwCisjIGVsc2UKKyMgZGVmaW5lIF9YT1BFTl9TT1VSQ0UgNTAwCisjIGVuZGlmCisjZWxpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fRnJlZUJTRF9fKSAgJiYgIWRlZmluZWQoX19VU0xDX18pICYmICFkZWZpbmVkKF9NX1VOSVgpICYmICFkZWZpbmVkKHNnaSkKICNkZWZpbmUgX1hPUEVOX1NPVVJDRSA2MDAgLyogZ2xpYmMyIGFuZCBBSVggNS4zTCBuZWVkIDUwMCwgT3BlbkJTRCBuZWVkcyA2MDAgZm9yIFNfSVNMTksoKSAqLwogI2RlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVEIDEgLyogQUlYIDUuM0wgbmVlZHMgdGhpcyAqLwogI2VuZGlmCkBAIC00Nyw2ICs2MywxMyBAQAogI2RlZmluZSBfR05VX1NPVVJDRSAxCiAjZGVmaW5lIF9CU0RfU09VUkNFIDEKICNkZWZpbmUgX05FVEJTRF9TT1VSQ0UgMQorI2RlZmluZSBfU0dJX1NPVVJDRSAxCisKKyNpZmRlZiBXSU4zMiAvKiBCb3RoIE1pbkdXIGFuZCBNU1ZDICovCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4gIC8qIHN0b3BzIHdpbmRvd3MuaCBpbmNsdWRpbmcgd2luc29jay5oICovCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZW5kaWYKIAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC03Myw2ICs5Niw3IEBACiAjaW5jbHVkZSA8c3lzL3BvbGwuaD4KICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8dGVybWlvcy5oPgogI2lmbmRlZiBOT19TWVNfU0VMRUNUX0gKICNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CiAjZW5kaWYKQEAgLTk2LDYgKzEyMCwxNiBAQAogLyogcHVsbCBpbiBXaW5kb3dzIGNvbXBhdGliaWxpdHkgc3R1ZmYgKi8KICNpbmNsdWRlICJjb21wYXQvbWluZ3cuaCIKICNlbmRpZgkvKiBfX01JTkdXMzJfXyAqLworI2lmZGVmIF9NU0NfVkVSCisjaW5jbHVkZSAiY29tcGF0L21zdmMuaCIKKyNlbmRpZgorCisjaWZuZGVmIE5PX0xJQkdFTl9ICisjaW5jbHVkZSA8bGliZ2VuLmg+CisjZWxzZQorI2RlZmluZSBiYXNlbmFtZSBnaXRiYXNlbmFtZQorZXh0ZXJuIGNoYXIgKmdpdGJhc2VuYW1lKGNoYXIgKik7CisjZW5kaWYKIAogI2lmbmRlZiBOT19JQ09OVgogI2luY2x1ZGUgPGljb252Lmg+CkBAIC0xNDMsMjMgKzE3NywzMiBAQAogCiAjaWZkZWYgX19HTlVDX18KICNkZWZpbmUgTk9SRVRVUk4gX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSkKKyNkZWZpbmUgTk9SRVRVUk5fUFRSIF9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmluZSBOT1JFVFVSTiBfX2RlY2xzcGVjKG5vcmV0dXJuKQorI2RlZmluZSBOT1JFVFVSTl9QVFIKICNlbHNlCiAjZGVmaW5lIE5PUkVUVVJOCisjZGVmaW5lIE5PUkVUVVJOX1BUUgogI2lmbmRlZiBfX2F0dHJpYnV0ZV9fCiAjZGVmaW5lIF9fYXR0cmlidXRlX18oeCkKICNlbmRpZgogI2VuZGlmCiAKKyNpbmNsdWRlICJjb21wYXQvYnN3YXAuaCIKKwogLyogR2VuZXJhbCBoZWxwZXIgZnVuY3Rpb25zICovCi1leHRlcm4gdm9pZCB1c2FnZShjb25zdCBjaGFyICplcnIpIE5PUkVUVVJOOwotZXh0ZXJuIHZvaWQgZGllKGNvbnN0IGNoYXIgKmVyciwgLi4uKSBOT1JFVFVSTiBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKK2V4dGVybiBOT1JFVFVSTiB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKmVycik7CitleHRlcm4gTk9SRVRVUk4gdm9pZCB1c2FnZWYoY29uc3QgY2hhciAqZXJyLCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOworZXh0ZXJuIE5PUkVUVVJOIHZvaWQgZGllKGNvbnN0IGNoYXIgKmVyciwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKK2V4dGVybiBOT1JFVFVSTiB2b2lkIGRpZV9lcnJubyhjb25zdCBjaGFyICplcnIsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CiBleHRlcm4gaW50IGVycm9yKGNvbnN0IGNoYXIgKmVyciwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKIGV4dGVybiB2b2lkIHdhcm5pbmcoY29uc3QgY2hhciAqZXJyLCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOwogCi1leHRlcm4gdm9pZCBzZXRfZGllX3JvdXRpbmUodm9pZCAoKnJvdXRpbmUpKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpIE5PUkVUVVJOKTsKK2V4dGVybiB2b2lkIHNldF9kaWVfcm91dGluZShOT1JFVFVSTl9QVFIgdm9pZCAoKnJvdXRpbmUpKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpKTsKIAogZXh0ZXJuIGludCBwcmVmaXhjbXAoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpwcmVmaXgpOwotZXh0ZXJuIHRpbWVfdCB0bV90b190aW1lX3QoY29uc3Qgc3RydWN0IHRtICp0bSk7CitleHRlcm4gaW50IHN1ZmZpeGNtcChjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnN1ZmZpeCk7CiAKIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqc2tpcF9wcmVmaXgoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CkBAIC0yMzIsNiArMjc1LDExIEBACiBleHRlcm4gY2hhciAqZ2l0bWtkdGVtcChjaGFyICopOwogI2VuZGlmCiAKKyNpZmRlZiBOT19NS1NURU1QUworI2RlZmluZSBta3N0ZW1wcyBnaXRta3N0ZW1wcworZXh0ZXJuIGludCBnaXRta3N0ZW1wcyhjaGFyICosIGludCk7CisjZW5kaWYKKwogI2lmZGVmIE5PX1VOU0VURU5WCiAjZGVmaW5lIHVuc2V0ZW52IGdpdHVuc2V0ZW52CiBleHRlcm4gdm9pZCBnaXR1bnNldGVudihjb25zdCBjaGFyICopOwpAQCAtMzAwLDYgKzM0OCw3IEBACiAKIGV4dGVybiBjaGFyICp4c3RyZHVwKGNvbnN0IGNoYXIgKnN0cik7CiBleHRlcm4gdm9pZCAqeG1hbGxvYyhzaXplX3Qgc2l6ZSk7CitleHRlcm4gdm9pZCAqeG1hbGxvY3ooc2l6ZV90IHNpemUpOwogZXh0ZXJuIHZvaWQgKnhtZW1kdXB6KGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwogZXh0ZXJuIGNoYXIgKnhzdHJuZHVwKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbik7CiBleHRlcm4gdm9pZCAqeHJlYWxsb2Modm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CmRpZmYgLS1naXQgYS9naXQtY3ZzZXhwb3J0Y29tbWl0LnBlcmwgYi9naXQtY3ZzZXhwb3J0Y29tbWl0LnBlcmwKaW5kZXggNmQ5ZjBlZi4uNTliNjcyMiAxMDA3NTUKLS0tIGEvZ2l0LWN2c2V4cG9ydGNvbW1pdC5wZXJsCisrKyBiL2dpdC1jdnNleHBvcnRjb21taXQucGVybApAQCAtOCw5ICs4LDkgQEAKIHVzZSBGaWxlOjpTcGVjOwogdXNlIEdpdDsKIAotb3VyICgkb3B0X2gsICRvcHRfUCwgJG9wdF9wLCAkb3B0X3YsICRvcHRfYywgJG9wdF9mLCAkb3B0X2EsICRvcHRfbSwgJG9wdF9kLCAkb3B0X3UsICRvcHRfdywgJG9wdF9XKTsKK291ciAoJG9wdF9oLCAkb3B0X1AsICRvcHRfcCwgJG9wdF92LCAkb3B0X2MsICRvcHRfZiwgJG9wdF9hLCAkb3B0X20sICRvcHRfZCwgJG9wdF91LCAkb3B0X3csICRvcHRfVywgJG9wdF9rKTsKIAotZ2V0b3B0cygndWhQcHZjZmFtOmQ6dzpXJyk7CitnZXRvcHRzKCd1aFBwdmNma2FtOmQ6dzpXJyk7CiAKICRvcHRfaCAmJiB1c2FnZSgpOwogCkBAIC0yMjUsNyArMjI1LDE0IEBACiAgICAgICBmb3JlYWNoIG15ICRuYW1lIChrZXlzICV0b2RvKSB7CiAJbXkgJGJhc2VuYW1lID0gYmFzZW5hbWUoJG5hbWUpOwogCi0JJGJhc2VuYW1lID0gIm5vIGZpbGUgIiAuICRiYXNlbmFtZSBpZiAoZXhpc3RzKCRhZGRlZHskYmFzZW5hbWV9KSk7CisJIyBDVlMgcmVwb3J0cyBmaWxlcyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBjdXJyZW50IHJldmlzaW9uIGFzCisJIyAibm8gZmlsZSAkYmFzZW5hbWUiIGluIGl0cyAic3RhdHVzIiBvdXRwdXQsIHNvIHdlIHNob3VsZAorCSMgYW50aWNpcGF0ZSB0aGF0LiAgVG90YWxseSB1bmtub3duIGZpbGVzIHdpbGwgaGF2ZSBhIHN0YXR1cworCSMgIlVua25vd24iLiBIb3dldmVyLCBpZiB0aGV5IGV4aXN0IGluIHRoZSBBdHRpYywgdGhlaXIgc3RhdHVzCisJIyB3aWxsIGJlICJVcC10by1kYXRlIiAodGhpcyBtZWFucyB0aGV5IHdlcmUgYWRkZWQgb25jZSBidXQgaGF2ZQorCSMgYmVlbiByZW1vdmVkKS4KKwkkYmFzZW5hbWUgPSAibm8gZmlsZSAkYmFzZW5hbWUiIGlmICRhZGRlZHskYmFzZW5hbWV9OworCiAJJGJhc2VuYW1lID1+IHMvXlxzKy8vOwogCSRiYXNlbmFtZSA9fiBzL1xzKyQvLzsKIApAQCAtMjMzLDMxICsyNDAsNDYgQEAKIAkgICRmdWxsbmFtZXskYmFzZW5hbWV9ID0gJG5hbWU7CiAJICBwdXNoIChAY2Fuc3RhdHVzZmlsZXMyLCAkbmFtZSk7CiAJICBkZWxldGUoJHRvZG97JG5hbWV9KTsKLSAgICAgICAgfQorCX0KICAgICAgIH0KICAgICAgIG15IEBjdnNvdXRwdXQ7CiAgICAgICBAY3Zzb3V0cHV0ID0geGFyZ3Nfc2FmZV9waXBlX2NhcHR1cmUoW0BjdnMsICdzdGF0dXMnXSwgQGNhbnN0YXR1c2ZpbGVzMik7CiAgICAgICBmb3JlYWNoIG15ICRsIChAY3Zzb3V0cHV0KSB7Ci0gICAgICAgIGNob21wICRsOwotICAgICAgICBpZiAoJGwgPX4gL15GaWxlOlxzKyguKlxTKVxzK1N0YXR1czogKC4qKSQvKSB7Ci0JICBpZiAoIWV4aXN0cygkZnVsbG5hbWV7JDF9KSkgewotCSAgICBwcmludCBTVERFUlIgIkh1aD8gU3RhdHVzIHJlcG9ydGVkIGZvciB1bmV4cGVjdGVkIGZpbGUgJyQxJ1xuIjsKLQkgIH0gZWxzZSB7Ci0JICAgICRjdnNzdGF0eyRmdWxsbmFtZXskMX19ID0gJDI7Ci0JICB9Ci0JfQorCWNob21wICRsOworCW5leHQgdW5sZXNzCisJICAgIG15ICgkZmlsZSwgJHN0YXR1cykgPSAkbCA9fiAvXkZpbGU6XHMrKC4qXFMpXHMrU3RhdHVzOiAoLiopJC87CisKKwlteSAkZnVsbG5hbWUgPSAkZnVsbG5hbWV7JGZpbGV9OworCXByaW50IFNUREVSUiAiSHVoPyBTdGF0dXMgJyRzdGF0dXMnIHJlcG9ydGVkIGZvciB1bmV4cGVjdGVkIGZpbGUgJyRmaWxlJ1xuIgorCSAgICB1bmxlc3MgZGVmaW5lZCAkZnVsbG5hbWU7CisKKwkjIFRoaXMgcmVzcG9uc2UgbWVhbnMgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QgZXhjZXB0IGluCisJIyBDVlMncyBhdHRpYywgc28gc2V0IHRoZSBzdGF0dXMgYWNjb3JkaW5nbHkKKwkkc3RhdHVzID0gIkluLWF0dGljIgorCSAgICBpZiAkZmlsZSA9fiAvXm5vIGZpbGUgLworCQkmJiAkc3RhdHVzIGVxICdVcC10by1kYXRlJzsKKworCSRjdnNzdGF0eyRmdWxsbmFtZXskZmlsZX19ID0gJHN0YXR1cworCSAgICBpZiBkZWZpbmVkICRmdWxsbmFtZXskZmlsZX07CiAgICAgICB9CiAgICAgfQogfQogCi0jIC4uLiB2YWxpZGF0ZSBuZXcgZmlsZXMsCisjIC4uLiBWYWxpZGF0ZSB0aGF0IG5ldyBmaWxlcyBoYXZlIHRoZSBjb3JyZWN0IHN0YXR1cwogZm9yZWFjaCBteSAkZiAoQGFmaWxlcykgewotICAgIGlmIChkZWZpbmVkICgkY3Zzc3RhdHskZn0pIGFuZCAkY3Zzc3RhdHskZn0gbmUgIlVua25vd24iKSB7Ci0JJGRpcnR5ID0gMTsKKyAgICBuZXh0IHVubGVzcyBkZWZpbmVkKG15ICRzdGF0ID0gJGN2c3N0YXR7JGZ9KTsKKworICAgICMgVGhpcyBtZWFucyB0aGUgZmlsZSBoYXMgbmV2ZXIgYmVlbiBzZWVuIGJlZm9yZQorICAgIG5leHQgaWYgJHN0YXQgZXEgJ1Vua25vd24nOworCisgICAgIyBUaGlzIG1lYW5zIHRoZSBmaWxlIGhhcyBiZWVuIHNlZW4gYmVmb3JlIGJ1dCB3YXMgcmVtb3ZlZAorICAgIG5leHQgaWYgJHN0YXQgZXEgJ0luLWF0dGljJzsKKworICAgICRkaXJ0eSA9IDE7CiAJd2FybiAiRmlsZSAkZiBpcyBhbHJlYWR5IGtub3duIGluIHlvdXIgQ1ZTIGNoZWNrb3V0IC0tIHBlcmhhcHMgaXQgaGFzIGJlZW4gYWRkZWQgYnkgYW5vdGhlciB1c2VyLiBPciB0aGlzIG1heSBpbmRpY2F0ZSB0aGF0IGl0IGV4aXN0cyBvbiBhIGRpZmZlcmVudCBicmFuY2guIElmIHRoaXMgaXMgdGhlIGNhc2UsIHVzZSAtZiB0byBmb3JjZSB0aGUgbWVyZ2UuXG4iOwogCXdhcm4gIlN0YXR1cyB3YXM6ICRjdnNzdGF0eyRmfVxuIjsKLSAgICB9CiB9CisKICMgLi4uIHZhbGlkYXRlIGtub3duIGZpbGVzLgogZm9yZWFjaCBteSAkZiAoQGZpbGVzKSB7CiAgICAgbmV4dCBpZiBncmVwIHsgJF8gZXEgJGYgfSBAYWZpbGVzOwpAQCAtMjY2LDcgKzI4OCwyNiBAQAogCSRkaXJ0eSA9IDE7CiAJd2FybiAiRmlsZSAkZiBub3QgdXAgdG8gZGF0ZSBidXQgaGFzIHN0YXR1cyAnJGN2c3N0YXR7JGZ9JyBpbiB5b3VyIENWUyBjaGVja291dCFcbiI7CiAgICAgfQorCisgICAgIyBEZXBlbmRpbmcgb24gaG93IHlvdXIgR0lUIHRyZWUgZ290IGltcG9ydGVkIGZyb20gQ1ZTIHlvdSBtYXkKKyAgICAjIGhhdmUgYSBjb25mbGljdCBiZXR3ZWVuIGV4cGFuZGVkIGtleXdvcmRzIGluIHlvdXIgQ1ZTIHRyZWUgYW5kCisgICAgIyB1bmV4cGFuZGVkIGtleXdvcmRzIGluIHRoZSBwYXRjaCBhYm91dCB0byBiZSBhcHBsaWVkLgorICAgIGlmICgkb3B0X2spIHsKKwlteSAkb3JpZ19maWxlID0iJGYub3JpZyI7CisJcmVuYW1lICRmLCAkb3JpZ19maWxlOworCW9wZW4oRklMVEVSX0lOLCAiPCRvcmlnX2ZpbGUiKSBvciBkaWUgIkNhbm5vdCBvcGVuICRvcmlnX2ZpbGVcbiI7CisJb3BlbihGSUxURVJfT1VULCAiPiRmIikgb3IgZGllICJDYW5ub3Qgb3BlbiAkZlxuIjsKKwl3aGlsZSAoPEZJTFRFUl9JTj4pCisJeworCSAgICBteSAkbGluZSA9ICRfOworCSAgICAkbGluZSA9fiBzL1wkKFtBLVpdW2Etel0rKTpbXlwkXStcJC9cJCQxXCQvZzsKKwkgICAgcHJpbnQgRklMVEVSX09VVCAkbGluZTsKKwl9CisJY2xvc2UgRklMVEVSX0lOOworCWNsb3NlIEZJTFRFUl9PVVQ7CisgICAgfQogfQorCiBpZiAoJGRpcnR5KSB7CiAgICAgaWYgKCRvcHRfZikgewl3YXJuICJUaGUgdHJlZSBpcyBub3QgY2xlYW4gLS0gZm9yY2VkIG1lcmdlXG4iOwogCSRkaXJ0eSA9IDA7CkBAIC0zNzAsNyArNDExLDcgQEAKIAogc3ViIHVzYWdlIHsKIAlwcmludCBTVERFUlIgPDxFTkQ7Ci1Vc2FnZTogR0lUX0RJUj0vcGF0aC90by8uZ2l0IGdpdCBjdnNleHBvcnRjb21taXQgWy1oXSBbLXBdIFstdl0gWy1jXSBbLWZdIFstdV0gWy13IGN2c3dvcmtkaXJdIFstbSBtc2dwcmVmaXhdIFsgcGFyZW50IF0gY29tbWl0CitVc2FnZTogR0lUX0RJUj0vcGF0aC90by8uZ2l0IGdpdCBjdnNleHBvcnRjb21taXQgWy1oXSBbLXBdIFstdl0gWy1jXSBbLWZdIFstdV0gWy1rXSBbLXcgY3Zzd29ya2Rpcl0gWy1tIG1zZ3ByZWZpeF0gWyBwYXJlbnQgXSBjb21taXQKIEVORAogCWV4aXQoMSk7CiB9CmRpZmYgLS1naXQgYS9naXQtY3ZzaW1wb3J0LnBlcmwgYi9naXQtY3ZzaW1wb3J0LnBlcmwKaW5kZXggZTQzOTIwMi4uNDg1M2JmNyAxMDA3NTUKLS0tIGEvZ2l0LWN2c2ltcG9ydC5wZXJsCisrKyBiL2dpdC1jdnNpbXBvcnQucGVybApAQCAtMjM4LDcgKzIzOCw5IEBACiAJCX0KIAkJbXkgJHJyID0gIjpwc2VydmVyOiR1c2VyXEAkc2VydjokcG9ydCRyZXBvIjsKIAotCQl1bmxlc3MgKCRwYXNzKSB7CisJCWlmICgkcGFzcykgeworCQkJJHBhc3MgPSAkc2VsZi0+X3NjcmFtYmxlKCRwYXNzKTsKKwkJfSBlbHNlIHsKIAkJCW9wZW4oSCwkRU5WeydIT01FJ30uIi8uY3ZzcGFzcyIpIGFuZCBkbyB7CiAJCQkJIyA6cHNlcnZlcjpjdnNAbWVhLnRtdC50ZWxlLmZpOi9jdnNyb290L3ptYWlsZXIgQWg8WgogCQkJCXdoaWxlICg8SD4pIHsKQEAgLTI1MSw4ICsyNTMsOCBAQAogCQkJCQl9CiAJCQkJfQogCQkJfTsKKwkJCSRwYXNzID0gIkEiIHVubGVzcyAkcGFzczsKIAkJfQotCQkkcGFzcz0iQSIgdW5sZXNzICRwYXNzOwogCiAJCW15ICgkcywgJHJlcCk7CiAJCWlmICgkcHJveHlob3N0KSB7CkBAIC00ODQsNiArNDg2LDQyIEBACiAJcmV0dXJuICRyZXM7CiB9CiAKK3N1YiBfc2NyYW1ibGUgeworCW15ICgkc2VsZiwgJHBhc3MpID0gQF87CisJbXkgJHNjcmFtYmxlZCA9ICJBIjsKKworCXJldHVybiAkc2NyYW1ibGVkIHVubGVzcyAkcGFzczsKKworCW15ICRwYXNzX2xlbiA9IGxlbmd0aCgkcGFzcyk7CisJbXkgQHBhc3NfYXJyID0gc3BsaXQoIiIsICRwYXNzKTsKKwlteSAkaTsKKworCSMgZnJvbSBjdnMvc3JjL3NjcmFtYmxlLmMKKwlteSBAc2hpZnRzID0gKAorCQkgIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsCisJCSAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwKKwkJMTE0LDEyMCwgNTMsIDc5LCA5NiwxMDksIDcyLDEwOCwgNzAsIDY0LCA3NiwgNjcsMTE2LCA3NCwgNjgsIDg3LAorCQkxMTEsIDUyLCA3NSwxMTksIDQ5LCAzNCwgODIsIDgxLCA5NSwgNjUsMTEyLCA4NiwxMTgsMTEwLDEyMiwxMDUsCisJCSA0MSwgNTcsIDgzLCA0MywgNDYsMTAyLCA0MCwgODksIDM4LDEwMywgNDUsIDUwLCA0MiwxMjMsIDkxLCAzNSwKKwkJMTI1LCA1NSwgNTQsIDY2LDEyNCwxMjYsIDU5LCA0NywgOTIsIDcxLDExNSwgNzgsIDg4LDEwNywxMDYsIDU2LAorCQkgMzYsMTIxLDExNywxMDQsMTAxLDEwMCwgNjksIDczLCA5OSwgNjMsIDk0LCA5MywgMzksIDM3LCA2MSwgNDgsCisJCSA1OCwxMTMsIDMyLCA5MCwgNDQsIDk4LCA2MCwgNTEsIDMzLCA5NywgNjIsIDc3LCA4NCwgODAsIDg1LDIyMywKKwkJMjI1LDIxNiwxODcsMTY2LDIyOSwxODksMjIyLDE4OCwxNDEsMjQ5LDE0OCwyMDAsMTg0LDEzNiwyNDgsMTkwLAorCQkxOTksMTcwLDE4MSwyMDQsMTM4LDIzMiwyMTgsMTgzLDI1NSwyMzQsMjIwLDI0NywyMTMsMjAzLDIyNiwxOTMsCisJCTE3NCwxNzIsMjI4LDI1MiwyMTcsMjAxLDEzMSwyMzAsMTk3LDIxMSwxNDUsMjM4LDE2MSwxNzksMTYwLDIxMiwKKwkJMjA3LDIyMSwyNTQsMTczLDIwMiwxNDYsMjI0LDE1MSwxNDAsMTk2LDIwNSwxMzAsMTM1LDEzMywxNDMsMjQ2LAorCQkxOTIsMTU5LDI0NCwyMzksMTg1LDE2OCwyMTUsMTQ0LDEzOSwxNjUsMTgwLDE1NywxNDcsMTg2LDIxNCwxNzYsCisJCTIyNywyMzEsMjE5LDE2OSwxNzUsMTU2LDIwNiwxOTgsMTI5LDE2NCwxNTAsMjEwLDE1NCwxNzcsMTM0LDEyNywKKwkJMTgyLDEyOCwxNTgsMjA4LDE2MiwxMzIsMTY3LDIwOSwxNDksMjQxLDE1MywyNTEsMjM3LDIzNiwxNzEsMTk1LAorCQkyNDMsMjMzLDI1MywyNDAsMTk0LDI1MCwxOTEsMTU1LDE0MiwxMzcsMjQ1LDIzNSwxNjMsMjQyLDE3OCwxNTIKKwkpOworCisJZm9yICgkaSA9IDA7ICRpIDwgJHBhc3NfbGVuOyAkaSsrKSB7CisJCSRzY3JhbWJsZWQgLj0gcGFjaygiQyIsICRzaGlmdHNbb3JkKCRwYXNzX2FyclskaV0pXSk7CisJfQorCisJcmV0dXJuICRzY3JhbWJsZWQ7Cit9CiAKIHBhY2thZ2UgbWFpbjsKIApAQCAtNTQxLDEwICs1NzksMjEgQEAKIAlyZXR1cm4gJHI7CiB9CiAKK215ICR1c2VyX2ZpbGVuYW1lX3ByZXBlbmQgPSAnJzsKK3N1YiBtdW5nZV91c2VyX2ZpbGVuYW1lIHsKKwlteSAkbmFtZSA9IHNoaWZ0OworCXJldHVybiBGaWxlOjpTcGVjLT5maWxlX25hbWVfaXNfYWJzb2x1dGUoJG5hbWUpID8KKwkJJG5hbWUgOgorCQkkdXNlcl9maWxlbmFtZV9wcmVwZW5kIC4gJG5hbWU7Cit9CisKIC1kICRnaXRfdHJlZQogCW9yIG1rZGlyKCRnaXRfdHJlZSwwNzc3KQogCW9yIGRpZSAiQ291bGQgbm90IGNyZWF0ZSAkZ2l0X3RyZWU6ICQhIjsKLWNoZGlyKCRnaXRfdHJlZSk7CitpZiAoJGdpdF90cmVlIG5lICcuJykgeworCSR1c2VyX2ZpbGVuYW1lX3ByZXBlbmQgPSBnZXR3ZCgpIC4gJy8nOworCWNoZGlyKCRnaXRfdHJlZSk7Cit9CiAKIG15ICRsYXN0X2JyYW5jaCA9ICIiOwogbXkgJG9yaWdfYnJhbmNoID0gIiI7CkBAIC01NjAsMTYgKzYwOSwxNiBAQAogbXkgJWluZGV4OyAjIGhvbGRzIGZpbGVuYW1lcyBvZiBvbmUgaW5kZXggcGVyIGJyYW5jaAogCiB1bmxlc3MgKC1kICRnaXRfZGlyKSB7Ci0Jc3lzdGVtKCJnaXQtaW5pdCIpOworCXN5c3RlbShxdyhnaXQgaW5pdCkpOwogCWRpZSAiQ2Fubm90IGluaXQgdGhlIEdJVCBkYiBhdCAkZ2l0X3RyZWU6ICQ/XG4iIGlmICQ/OwotCXN5c3RlbSgiZ2l0LXJlYWQtdHJlZSIpOworCXN5c3RlbShxdyhnaXQgcmVhZC10cmVlKSk7CiAJZGllICJDYW5ub3QgaW5pdCBhbiBlbXB0eSB0cmVlOiAkP1xuIiBpZiAkPzsKIAogCSRsYXN0X2JyYW5jaCA9ICRvcHRfbzsKIAkkb3JpZ19icmFuY2ggPSAiIjsKIH0gZWxzZSB7Ci0Jb3BlbihGLCAiZ2l0LXN5bWJvbGljLXJlZiBIRUFEIHwiKSBvcgotCQlkaWUgIkNhbm5vdCBydW4gZ2l0LXN5bWJvbGljLXJlZjogJCFcbiI7CisJb3BlbihGLCAiLXwiLCBxdyhnaXQgc3ltYm9saWMtcmVmIEhFQUQpKSBvcgorCQlkaWUgIkNhbm5vdCBydW4gZ2l0IHN5bWJvbGljLXJlZjogJCFcbiI7CiAJY2hvbXAgKCRsYXN0X2JyYW5jaCA9IDxGPik7CiAJJGxhc3RfYnJhbmNoID0gYmFzZW5hbWUoJGxhc3RfYnJhbmNoKTsKIAljbG9zZShGKTsKQEAgLTU3OCwxMiArNjI3LDEyIEBACiAJCSRsYXN0X2JyYW5jaCA9ICJtYXN0ZXIiOwogCX0KIAkkb3JpZ19icmFuY2ggPSAkbGFzdF9icmFuY2g7Ci0JJHRpcF9hdF9zdGFydCA9IGBnaXQtcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQURgOworCSR0aXBfYXRfc3RhcnQgPSBgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEYDsKIAogCSMgR2V0IHRoZSBsYXN0IGltcG9ydCB0aW1lc3RhbXBzCiAJbXkgJGZtdCA9ICcoJHJlZiwgJGF1dGhvcikgPSAoJShyZWZuYW1lKSwgJShhdXRob3IpKTsnOwotCW9wZW4oSCwgImdpdC1mb3ItZWFjaC1yZWYgLS1wZXJsIC0tZm9ybWF0PSckZm10JyAkcmVtb3RlIHwiKSBvcgotCQlkaWUgIkNhbm5vdCBydW4gZ2l0LWZvci1lYWNoLXJlZjogJCFcbiI7CisJbXkgQGNtZCA9ICgnZ2l0JywgJ2Zvci1lYWNoLXJlZicsICctLXBlcmwnLCAiLS1mb3JtYXQ9JGZtdCIsICRyZW1vdGUpOworCW9wZW4oSCwgIi18IiwgQGNtZCkgb3IgZGllICJDYW5ub3QgcnVuIGdpdCBmb3ItZWFjaC1yZWY6ICQhXG4iOwogCXdoaWxlIChkZWZpbmVkKG15ICRlbnRyeSA9IDxIPikpIHsKIAkJbXkgKCRyZWYsICRhdXRob3IpOwogCQlldmFsKCRlbnRyeSkgfHwgZGllICJjYW5ub3QgZXZhbCByZWZzIGxpc3Q6ICRAIjsKQEAgLTYwNiw3ICs2NTUsNyBAQAogLWYgIiRnaXRfZGlyL2N2cy1hdXRob3JzIiBhbmQKICAgcmVhZF9hdXRob3JfaW5mbygiJGdpdF9kaXIvY3ZzLWF1dGhvcnMiKTsKIGlmICgkb3B0X0EpIHsKLQlyZWFkX2F1dGhvcl9pbmZvKCRvcHRfQSk7CisJcmVhZF9hdXRob3JfaW5mbyhtdW5nZV91c2VyX2ZpbGVuYW1lKCRvcHRfQSkpOwogCXdyaXRlX2F1dGhvcl9pbmZvKCIkZ2l0X2Rpci9jdnMtYXV0aG9ycyIpOwogfQogCkBAIC02MzgsMTAgKzY4NywxMCBAQAogCSAgICBwcmludCAkY3ZzcHNmaCAkXzsKIAl9CiAJY2xvc2UgQ1ZTUFM7Ci0JJD8gPT0gMCBvciBkaWUgImdpdC1jdnNpbXBvcnQ6IGZhdGFsOiBjdnNwcyByZXBvcnRlZCBlcnJvclxuIjsKKwkkPyA9PSAwIG9yIGRpZSAiZ2l0IGN2c2ltcG9ydDogZmF0YWw6IGN2c3BzIHJlcG9ydGVkIGVycm9yXG4iOwogCWNsb3NlICRjdnNwc2ZoOwogfSBlbHNlIHsKLQkkY3ZzcHNmaWxlID0gJG9wdF9QOworCSRjdnNwc2ZpbGUgPSBtdW5nZV91c2VyX2ZpbGVuYW1lKCRvcHRfUCk7CiB9CiAKIG9wZW4oQ1ZTLCAiPCRjdnNwc2ZpbGUiKSBvciBkaWUgJCE7CkBAIC02NjcsMjcgKzcxNiwyNyBAQAogc3ViIHVwZGF0ZV9pbmRleCAoXEBcQCkgewogCW15ICRvbGQgPSBzaGlmdDsKIAlteSAkbmV3ID0gc2hpZnQ7Ci0Jb3BlbihteSAkZmgsICd8LScsIHF3KGdpdC11cGRhdGUtaW5kZXggLXogLS1pbmRleC1pbmZvKSkKLQkJb3IgZGllICJ1bmFibGUgdG8gb3BlbiBnaXQtdXBkYXRlLWluZGV4OiAkISI7CisJb3BlbihteSAkZmgsICd8LScsIHF3KGdpdCB1cGRhdGUtaW5kZXggLXogLS1pbmRleC1pbmZvKSkKKwkJb3IgZGllICJ1bmFibGUgdG8gb3BlbiBnaXQgdXBkYXRlLWluZGV4OiAkISI7CiAJcHJpbnQgJGZoCiAJCShtYXAgeyAiMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXHQkX1wwIiB9CiAJCQlAJG9sZCksCiAJCShtYXAgeyAnMTAwJyAuIHNwcmludGYoJyVvJywgJF8tPlswXSkgLiAiICRfLT5bMV1cdCRfLT5bMl1cMCIgfQogCQkJQCRuZXcpCi0JCW9yIGRpZSAidW5hYmxlIHRvIHdyaXRlIHRvIGdpdC11cGRhdGUtaW5kZXg6ICQhIjsKKwkJb3IgZGllICJ1bmFibGUgdG8gd3JpdGUgdG8gZ2l0IHVwZGF0ZS1pbmRleDogJCEiOwogCWNsb3NlICRmaAotCQlvciBkaWUgInVuYWJsZSB0byB3cml0ZSB0byBnaXQtdXBkYXRlLWluZGV4OiAkISI7Ci0JJD8gYW5kIGRpZSAiZ2l0LXVwZGF0ZS1pbmRleCByZXBvcnRlZCBlcnJvcjogJD8iOworCQlvciBkaWUgInVuYWJsZSB0byB3cml0ZSB0byBnaXQgdXBkYXRlLWluZGV4OiAkISI7CisJJD8gYW5kIGRpZSAiZ2l0IHVwZGF0ZS1pbmRleCByZXBvcnRlZCBlcnJvcjogJD8iOwogfQogCiBzdWIgd3JpdGVfdHJlZSAoKSB7Ci0Jb3BlbihteSAkZmgsICctfCcsIHF3KGdpdC13cml0ZS10cmVlKSkKLQkJb3IgZGllICJ1bmFibGUgdG8gb3BlbiBnaXQtd3JpdGUtdHJlZTogJCEiOworCW9wZW4obXkgJGZoLCAnLXwnLCBxdyhnaXQgd3JpdGUtdHJlZSkpCisJCW9yIGRpZSAidW5hYmxlIHRvIG9wZW4gZ2l0IHdyaXRlLXRyZWU6ICQhIjsKIAljaG9tcChteSAkdHJlZSA9IDwkZmg+KTsKIAlpc19zaGExKCR0cmVlKQogCQlvciBkaWUgIkNhbm5vdCBnZXQgdHJlZSBpZCAoJHRyZWUpOiAkISI7CiAJY2xvc2UoJGZoKQotCQlvciBkaWUgIkVycm9yIHJ1bm5pbmcgZ2l0LXdyaXRlLXRyZWU6ICQ/XG4iOworCQlvciBkaWUgIkVycm9yIHJ1bm5pbmcgZ2l0IHdyaXRlLXRyZWU6ICQ/XG4iOwogCXByaW50ICJUcmVlIElEICR0cmVlXG4iIGlmICRvcHRfdjsKIAlyZXR1cm4gJHRyZWU7CiB9CkBAIC03MDIsNyArNzUxLDcgQEAKIAlpZiAoJGJyYW5jaCBlcSAkb3B0X28gJiYgISRpbmRleHticmFuY2h9ICYmCiAJCSFnZXRfaGVhZHJlZigiJHJlbW90ZS8kYnJhbmNoIikpIHsKIAkgICAgIyBsb29rcyBsaWtlIGFuIGluaXRpYWwgY29tbWl0Ci0JICAgICMgdXNlIHRoZSBpbmRleCBwcmltZWQgYnkgZ2l0LWluaXQKKwkgICAgIyB1c2UgdGhlIGluZGV4IHByaW1lZCBieSBnaXQgaW5pdAogCSAgICAkRU5We0dJVF9JTkRFWF9GSUxFfSA9ICIkZ2l0X2Rpci9pbmRleCI7CiAJICAgICRpbmRleHskYnJhbmNofSA9ICIkZ2l0X2Rpci9pbmRleCI7CiAJfSBlbHNlIHsKQEAgLTcxMiw5ICs3NjEsOSBAQAogCQkkaW5kZXh7JGJyYW5jaH0gPSB0bXBuYW0oKTsKIAkJJEVOVntHSVRfSU5ERVhfRklMRX0gPSAkaW5kZXh7JGJyYW5jaH07CiAJCWlmICgkYW5jZXN0b3IpIHsKLQkJICAgIHN5c3RlbSgiZ2l0LXJlYWQtdHJlZSIsICIkcmVtb3RlLyRhbmNlc3RvciIpOworCQkgICAgc3lzdGVtKCJnaXQiLCAicmVhZC10cmVlIiwgIiRyZW1vdGUvJGFuY2VzdG9yIik7CiAJCX0gZWxzZSB7Ci0JCSAgICBzeXN0ZW0oImdpdC1yZWFkLXRyZWUiLCAiJHJlbW90ZS8kYnJhbmNoIik7CisJCSAgICBzeXN0ZW0oImdpdCIsICJyZWFkLXRyZWUiLCAiJHJlbW90ZS8kYnJhbmNoIik7CiAJCX0KIAkJZGllICJyZWFkLXRyZWUgZmFpbGVkOiAkP1xuIiBpZiAkPzsKIAkgICAgfQpAQCAtNzQ5LDcgKzc5OCw3IEBACiAJJEVOVntHSVRfQ09NTUlUVEVSX0VNQUlMfSA9ICRhdXRob3JfZW1haWw7CiAJJEVOVntHSVRfQ09NTUlUVEVSX0RBVEV9ID0gJGNvbW1pdF9kYXRlOwogCW15ICRwaWQgPSBvcGVuMihteSAkY29tbWl0X3JlYWQsIG15ICRjb21taXRfd3JpdGUsCi0JCSdnaXQtY29tbWl0LXRyZWUnLCAkdHJlZSwgQGNvbW1pdF9hcmdzKTsKKwkJJ2dpdCcsICdjb21taXQtdHJlZScsICR0cmVlLCBAY29tbWl0X2FyZ3MpOwogCiAJIyBjb21wYXRpYmlsaXR5IHdpdGggZ2l0MmN2cwogCXN1YnN0cigkbG9nbXNnLDMyNzY3KSA9ICIiIGlmIGxlbmd0aCgkbG9nbXNnKSA+IDMyNzY3OwpAQCAtNzYyLDcgKzgxMSw3IEBACiAJfQogCiAJcHJpbnQoJGNvbW1pdF93cml0ZSAiJGxvZ21zZ1xuIikgJiYgY2xvc2UoJGNvbW1pdF93cml0ZSkKLQkJb3IgZGllICJFcnJvciB3cml0aW5nIHRvIGdpdC1jb21taXQtdHJlZTogJCFcbiI7CisJCW9yIGRpZSAiRXJyb3Igd3JpdGluZyB0byBnaXQgY29tbWl0LXRyZWU6ICQhXG4iOwogCiAJcHJpbnQgIkNvbW1pdHRlZCBwYXRjaCAkcGF0Y2hzZXQgKCRicmFuY2ggJGNvbW1pdF9kYXRlKVxuIiBpZiAkb3B0X3Y7CiAJY2hvbXAobXkgJGNpZCA9IDwkY29tbWl0X3JlYWQ+KTsKQEAgLTc3MSw5ICs4MjAsOSBAQAogCWNsb3NlKCRjb21taXRfcmVhZCk7CiAKIAl3YWl0cGlkKCRwaWQsMCk7Ci0JZGllICJFcnJvciBydW5uaW5nIGdpdC1jb21taXQtdHJlZTogJD9cbiIgaWYgJD87CisJZGllICJFcnJvciBydW5uaW5nIGdpdCBjb21taXQtdHJlZTogJD9cbiIgaWYgJD87CiAKLQlzeXN0ZW0oJ2dpdC11cGRhdGUtcmVmJywgIiRyZW1vdGUvJGJyYW5jaCIsICRjaWQpID09IDAKKwlzeXN0ZW0oJ2dpdCcgLCAndXBkYXRlLXJlZicsICIkcmVtb3RlLyRicmFuY2giLCAkY2lkKSA9PSAwCiAJCW9yIGRpZSAiQ2Fubm90IHdyaXRlIGJyYW5jaCAkYnJhbmNoIGZvciB1cGRhdGU6ICQhXG4iOwogCiAJaWYgKCR0YWcpIHsKQEAgLTc4Myw3ICs4MzIsNyBAQAogCQkkeHRhZyA9fiBzL1tcL10vJG9wdF9zL2c7CiAJCSR4dGFnID1+IHMvXFsvL2c7CiAKLQkJc3lzdGVtKCdnaXQtdGFnJywgJy1mJywgJHh0YWcsICRjaWQpID09IDAKKwkJc3lzdGVtKCdnaXQnICwgJ3RhZycsICctZicsICR4dGFnLCAkY2lkKSA9PSAwCiAJCQlvciBkaWUgIkNhbm5vdCBjcmVhdGUgdGFnICR4dGFnOiAkIVxuIjsKIAogCQlwcmludCAiQ3JlYXRlZCB0YWcgJyR4dGFnJyBvbiAnJGJyYW5jaCdcbiIgaWYgJG9wdF92OwpAQCAtOTIwLDcgKzk2OSw3IEBACiAJCQlteSAkcGlkID0gb3BlbihteSAkRiwgJy18Jyk7CiAJCQlkaWUgJCEgdW5sZXNzIGRlZmluZWQgJHBpZDsKIAkJCWlmICghJHBpZCkgewotCQkJICAgIGV4ZWMoImdpdC1oYXNoLW9iamVjdCIsICItdyIsICR0bXBuYW1lKQorCQkJICAgIGV4ZWMoImdpdCIsICJoYXNoLW9iamVjdCIsICItdyIsICR0bXBuYW1lKQogCQkJCW9yIGRpZSAiQ2Fubm90IGNyZWF0ZSBvYmplY3Q6ICQhXG4iOwogCQkJfQogCQkJbXkgJHNoYSA9IDwkRj47CkBAIC05NDQsNyArOTkzLDcgQEAKIAkJfQogCQljb21taXQoKTsKIAkJaWYgKCgkY29tbWl0Y291bnQgJiAxMDIzKSA9PSAwKSB7Ci0JCQlzeXN0ZW0oImdpdCByZXBhY2sgLWEgLWQiKTsKKwkJCXN5c3RlbShxdyhnaXQgcmVwYWNrIC1hIC1kKSk7CiAJCX0KIAkJJHN0YXRlID0gMTsKIAl9IGVsc2lmICgkc3RhdGUgPT0gMTEgYW5kIC9eLSskLykgewpAQCAtOTY0LDExICsxMDEzLDExIEBACiAjIFRoZSBoZXVyaXN0aWMgb2YgcmVwYWNraW5nIGV2ZXJ5IDEwMjQgY29tbWl0cyBjYW4gbGVhdmUgYQogIyBsb3Qgb2YgdW5wYWNrZWQgZGF0YS4gIElmIHRoZXJlIGlzIG1vcmUgdGhhbiAxTUIgd29ydGggb2YKICMgbm90LXBhY2tlZCBvYmplY3RzLCByZXBhY2sgb25jZSBtb3JlLgotbXkgJGxpbmUgPSBgZ2l0LWNvdW50LW9iamVjdHNgOworbXkgJGxpbmUgPSBgZ2l0IGNvdW50LW9iamVjdHNgOwogaWYgKCRsaW5lID1+IC9eKFxkKykgb2JqZWN0cywgKFxkKykga2lsb2J5dGVzJC8pIHsKICAgbXkgKCRuX29iamVjdHMsICRrYikgPSAoJDEsICQyKTsKICAgMTAyNCA8ICRrYgotICAgIGFuZCBzeXN0ZW0oImdpdCByZXBhY2sgLWEgLWQiKTsKKyAgICBhbmQgc3lzdGVtKHF3KGdpdCByZXBhY2sgLWEgLWQpKTsKIH0KIAogZm9yZWFjaCBteSAkZ2l0X2luZGV4ICh2YWx1ZXMgJWluZGV4KSB7CkBAIC05ODksMjggKzEwMzgsMjggQEAKIAlpZiAoJG9wdF9pKSB7CiAJCWV4aXQgMDsKIAl9Ci0JbXkgJHRpcF9hdF9lbmQgPSBgZ2l0LXJldi1wYXJzZSAtLXZlcmlmeSBIRUFEYDsKKwlteSAkdGlwX2F0X2VuZCA9IGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQURgOwogCWlmICgkdGlwX2F0X3N0YXJ0IG5lICR0aXBfYXRfZW5kKSB7CiAJCWZvciAoJHRpcF9hdF9zdGFydCwgJHRpcF9hdF9lbmQpIHsgY2hvbXA7IH0KIAkJcHJpbnQgIkZldGNoZWQgaW50byB0aGUgY3VycmVudCBicmFuY2guXG4iIGlmICRvcHRfdjsKLQkJc3lzdGVtKHF3KGdpdC1yZWFkLXRyZWUgLXUgLW0pLAorCQlzeXN0ZW0ocXcoZ2l0IHJlYWQtdHJlZSAtdSAtbSksCiAJCSAgICAgICAkdGlwX2F0X3N0YXJ0LCAkdGlwX2F0X2VuZCk7CiAJCWRpZSAiRmFzdC1mb3J3YXJkIHVwZGF0ZSBmYWlsZWQ6ICQ/XG4iIGlmICQ/OwogCX0KIAllbHNlIHsKLQkJc3lzdGVtKHF3KGdpdC1tZXJnZSBjdnNpbXBvcnQgSEVBRCksICIkcmVtb3RlLyRvcHRfbyIpOworCQlzeXN0ZW0ocXcoZ2l0IG1lcmdlIGN2c2ltcG9ydCBIRUFEKSwgIiRyZW1vdGUvJG9wdF9vIik7CiAJCWRpZSAiQ291bGQgbm90IG1lcmdlICRvcHRfbyBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaC5cbiIgaWYgJD87CiAJfQogfSBlbHNlIHsKIAkkb3JpZ19icmFuY2ggPSAibWFzdGVyIjsKIAlwcmludCAiRE9ORTsgY3JlYXRpbmcgJG9yaWdfYnJhbmNoIGJyYW5jaFxuIiBpZiAkb3B0X3Y7Ci0Jc3lzdGVtKCJnaXQtdXBkYXRlLXJlZiIsICJyZWZzL2hlYWRzL21hc3RlciIsICIkcmVtb3RlLyRvcHRfbyIpCisJc3lzdGVtKCJnaXQiLCAidXBkYXRlLXJlZiIsICJyZWZzL2hlYWRzL21hc3RlciIsICIkcmVtb3RlLyRvcHRfbyIpCiAJCXVubGVzcyBkZWZpbmVkIGdldF9oZWFkcmVmKCdyZWZzL2hlYWRzL21hc3RlcicpOwotCXN5c3RlbSgiZ2l0LXN5bWJvbGljLXJlZiIsICIkcmVtb3RlL0hFQUQiLCAiJHJlbW90ZS8kb3B0X28iKQorCXN5c3RlbSgiZ2l0IiwgInN5bWJvbGljLXJlZiIsICIkcmVtb3RlL0hFQUQiLCAiJHJlbW90ZS8kb3B0X28iKQogCQlpZiAoJG9wdF9yICYmICRvcHRfbyBuZSAnSEVBRCcpOwotCXN5c3RlbSgnZ2l0LXVwZGF0ZS1yZWYnLCAnSEVBRCcsICIkb3JpZ19icmFuY2giKTsKKwlzeXN0ZW0oJ2dpdCcsICd1cGRhdGUtcmVmJywgJ0hFQUQnLCAiJG9yaWdfYnJhbmNoIik7CiAJdW5sZXNzICgkb3B0X2kpIHsKLQkJc3lzdGVtKCdnaXQgY2hlY2tvdXQgLWYnKTsKKwkJc3lzdGVtKHF3KGdpdCBjaGVja291dCAtZikpOwogCQlkaWUgImNoZWNrb3V0IGZhaWxlZDogJD9cbiIgaWYgJD87CiAJfQogfQpkaWZmIC0tZ2l0IGEvZ2l0LWN2c3NlcnZlci5wZXJsIGIvZ2l0LWN2c3NlcnZlci5wZXJsCmluZGV4IDZkYzQ1ZjUuLjEzNzUxZGIgMTAwNzU1Ci0tLSBhL2dpdC1jdnNzZXJ2ZXIucGVybAorKysgYi9naXQtY3Zzc2VydmVyLnBlcmwKQEAgLTEwNCw2ICsxMDQsNyBAQAogbXkgJHVzYWdlID0KICAgICAiVXNhZ2U6IGdpdCBjdnNzZXJ2ZXIgW29wdGlvbnNdIFtwc2VydmVyfHNlcnZlcl0gWzxkaXJlY3Rvcnk+IC4uLl1cbiIuCiAgICAgIiAgICAtLWJhc2UtcGF0aCA8cGF0aD4gIDogUHJlcGVuZCB0byByZXF1ZXN0ZWQgQ1ZTUk9PVFxuIi4KKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgcmVhZCBmcm9tIEdJVF9DVlNTRVJWRVJfQkFTRV9QQVRIXG4iLgogICAgICIgICAgLS1zdHJpY3QtcGF0aHMgICAgICA6IERvbid0IGFsbG93IHJlY3Vyc2luZyBpbnRvIHN1YmRpcmVjdG9yaWVzXG4iLgogICAgICIgICAgLS1leHBvcnQtYWxsICAgICAgICA6IERvbid0IGNoZWNrIGZvciBnaXRjdnMuZW5hYmxlZCBpbiBjb25maWdcbiIuCiAgICAgIiAgICAtLXZlcnNpb24sIC1WICAgICAgIDogUHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIi4KQEAgLTExMSw3ICsxMTIsOCBAQAogICAgICJcbiIuCiAgICAgIjxkaXJlY3Rvcnk+IC4uLiBpcyBhIGxpc3Qgb2YgYWxsb3dlZCBkaXJlY3Rvcmllcy4gSWYgbm8gZGlyZWN0b3JpZXNcbiIuCiAgICAgImFyZSBnaXZlbiwgYWxsIGFyZSBhbGxvd2VkLiBUaGlzIGlzIGFuIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb24sIGdpdGN2c1xuIi4KLSAgICAiYWNjZXNzIHN0aWxsIG5lZWRzIHRvIGJlIGVuYWJsZWQgYnkgdGhlIGdpdGN2cy5lbmFibGVkIGNvbmZpZyBvcHRpb24uXG4iOworICAgICJhY2Nlc3Mgc3RpbGwgbmVlZHMgdG8gYmUgZW5hYmxlZCBieSB0aGUgZ2l0Y3ZzLmVuYWJsZWQgY29uZmlnIG9wdGlvbi5cbiIuCisgICAgIkFsdGVybmF0ZWx5LCBvbmUgZGlyZWN0b3J5IG1heSBiZSBzcGVjaWZpZWQgaW4gR0lUX0NWU1NFUlZFUl9ST09ULlxuIjsKIAogbXkgQG9wdHMgPSAoICdoZWxwfGh8SCcsICd2ZXJzaW9ufFYnLAogCSAgICAgJ2Jhc2UtcGF0aD1zJywgJ3N0cmljdC1wYXRocycsICdleHBvcnQtYWxsJyApOwpAQCAtMTQ4LDYgKzE1MCwyNCBAQAogICAgIGRpZSAiLS1leHBvcnQtYWxsIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBhbiBleHBsaWNpdCB3aGl0ZWxpc3RcbiI7CiB9CiAKKyMgRW52aXJvbm1lbnQgaGFuZGxpbmcgZm9yIHJ1bm5pbmcgdW5kZXIgZ2l0LXNoZWxsCitpZiAoZXhpc3RzICRFTlZ7R0lUX0NWU1NFUlZFUl9CQVNFX1BBVEh9KSB7CisgICAgaWYgKCRzdGF0ZS0+eydiYXNlLXBhdGgnfSkgeworCWRpZSAiQ2Fubm90IHNwZWNpZnkgYmFzZSBwYXRoIGJvdGggd2F5cy5cbiI7CisgICAgfQorICAgIG15ICRiYXNlX3BhdGggPSAkRU5We0dJVF9DVlNTRVJWRVJfQkFTRV9QQVRIfTsKKyAgICAkc3RhdGUtPnsnYmFzZS1wYXRoJ30gPSAkYmFzZV9wYXRoOworICAgICRsb2ctPmRlYnVnKCJQaWNrZWQgdXAgYmFzZSBwYXRoICckYmFzZV9wYXRoJyBmcm9tIGVudmlyb25tZW50LlxuIik7Cit9CitpZiAoZXhpc3RzICRFTlZ7R0lUX0NWU1NFUlZFUl9ST09UfSkgeworICAgIGlmIChAeyRzdGF0ZS0+e2FsbG93ZWRfcm9vdHN9fSkgeworCWRpZSAiQ2Fubm90IHNwZWNpZnkgcm9vdHMgYm90aCB3YXlzOiBAQVJHVlxuIjsKKyAgICB9CisgICAgbXkgJGFsbG93ZWRfcm9vdCA9ICRFTlZ7R0lUX0NWU1NFUlZFUl9ST09UfTsKKyAgICAkc3RhdGUtPnthbGxvd2VkX3Jvb3RzfSA9IFsgJGFsbG93ZWRfcm9vdCBdOworICAgICRsb2ctPmRlYnVnKCJQaWNrZWQgdXAgYWxsb3dlZCByb290ICckYWxsb3dlZF9yb290JyBmcm9tIGVudmlyb25tZW50LlxuIik7Cit9CisKICMgaWYgd2UgYXJlIGNhbGxlZCB3aXRoIGEgcHNlcnZlciBhcmd1bWVudCwKICMgZGVhbCB3aXRoIHRoZSBhdXRoZW50aWNhdGlvbiBjYXQgYmVmb3JlIGVudGVyaW5nIHRoZQogIyBtYWluIGxvb3AKQEAgLTM4OCw3ICs0MDgsNyBAQAogICAgICRzdGF0ZS0+e2xvY2FsZGlyfSA9ICRkYXRhOwogICAgICRzdGF0ZS0+e3JlcG9zaXRvcnl9ID0gJHJlcG9zaXRvcnk7CiAgICAgJHN0YXRlLT57cGF0aH0gPSAkcmVwb3NpdG9yeTsKLSAgICAkc3RhdGUtPntwYXRofSA9fiBzL14kc3RhdGUtPntDVlNST09UfVwvLy87CisgICAgJHN0YXRlLT57cGF0aH0gPX4gcy9eXFEkc3RhdGUtPntDVlNST09UfVxFXC8vLzsKICAgICAkc3RhdGUtPnttb2R1bGV9ID0gJDEgaWYgKCRzdGF0ZS0+e3BhdGh9ID1+IHMvXiguKj8pKFwvfCQpLy8pOwogICAgICRzdGF0ZS0+e3BhdGh9IC49ICIvIiBpZiAoICRzdGF0ZS0+e3BhdGh9ID1+IC9cUy8gKTsKIApAQCAtOTgxLDYgKzEwMDEsOCBAQAogCiAgICAgIyRsb2ctPmRlYnVnKCJ1cGRhdGUgc3RhdGUgOiAiIC4gRHVtcGVyKCRzdGF0ZSkpOwogCisgICAgbXkgJGxhc3RfZGlybmFtZSA9ICIvLy8iOworCiAgICAgIyBmb3JlYWNoIGZpbGUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgLi4uCiAgICAgZm9yZWFjaCBteSAkZmlsZW5hbWUgKCBAeyRzdGF0ZS0+e2FyZ3N9fSApCiAgICAgewpAQCAtOTg4LDYgKzEwMTAsMjAgQEAKIAogICAgICAgICAkbG9nLT5kZWJ1ZygiUHJvY2Vzc2luZyBmaWxlICRmaWxlbmFtZSIpOwogCisgICAgICAgIHVubGVzcyAoICRzdGF0ZS0+e2dsb2JhbG9wdGlvbnN9ey1RfSB8fCAkc3RhdGUtPntnbG9iYWxvcHRpb25zfXstcX0gKQorICAgICAgICB7CisgICAgICAgICAgICBteSAkY3VyX2Rpcm5hbWUgPSBkaXJuYW1lKCRmaWxlbmFtZSk7CisgICAgICAgICAgICBpZiAoICRjdXJfZGlybmFtZSBuZSAkbGFzdF9kaXJuYW1lICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAkbGFzdF9kaXJuYW1lID0gJGN1cl9kaXJuYW1lOworICAgICAgICAgICAgICAgIGlmICggJGN1cl9kaXJuYW1lIGVxICIiICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICRjdXJfZGlybmFtZSA9ICIuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJpbnQgIkUgY3ZzIHVwZGF0ZTogVXBkYXRpbmcgJGN1cl9kaXJuYW1lXG4iOworICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgIyBpZiB3ZSBoYXZlIGEgLUMgd2Ugc2hvdWxkIHByZXRlbmQgd2UgbmV2ZXIgc2F3IG1vZGlmaWVkIHN0dWZmCiAgICAgICAgIGlmICggZXhpc3RzICggJHN0YXRlLT57b3B0fXtDfSApICkKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvZ2l0LWRpZmZ0b29sLS1oZWxwZXIuc2ggYi9naXQtZGlmZnRvb2wtLWhlbHBlci5zaAppbmRleCA1N2U4ZTMyLi41MjRmNWVhIDEwMDc1NQotLS0gYS9naXQtZGlmZnRvb2wtLWhlbHBlci5zaAorKysgYi9naXQtZGlmZnRvb2wtLWhlbHBlci5zaApAQCAtMywxNiArMywxNiBAQAogIyBUaGlzIHNjcmlwdCBpcyB0eXBpY2FsbHkgbGF1bmNoZWQgYnkgdXNpbmcgdGhlICdnaXQgZGlmZnRvb2wnCiAjIGNvbnZlbmllbmNlIGNvbW1hbmQuCiAjCi0jIENvcHlyaWdodCAoYykgMjAwOSBEYXZpZCBBZ3VpbGFyCisjIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCBEYXZpZCBBZ3VpbGFyCiAKLSMgTG9hZCBjb21tb24gZnVuY3Rpb25zIGZyb20gZ2l0LW1lcmdldG9vbC0tbGliCiBUT09MX01PREU9ZGlmZgogLiBnaXQtbWVyZ2V0b29sLS1saWIKIAogIyBkaWZmdG9vbC5wcm9tcHQgY29udHJvbHMgdGhlIGRlZmF1bHQgcHJvbXB0L25vLXByb21wdCBiZWhhdmlvcgogIyBhbmQgaXMgb3ZlcnJpZGRlbiB3aXRoICRHSVRfRElGRlRPT0wqX1BST01QVC4KIHNob3VsZF9wcm9tcHQgKCkgewotCXByb21wdD0kKGdpdCBjb25maWcgLS1ib29sIGRpZmZ0b29sLnByb21wdCB8fCBlY2hvIHRydWUpCisJcHJvbXB0X21lcmdlPSQoZ2l0IGNvbmZpZyAtLWJvb2wgbWVyZ2V0b29sLnByb21wdCB8fCBlY2hvIHRydWUpCisJcHJvbXB0PSQoZ2l0IGNvbmZpZyAtLWJvb2wgZGlmZnRvb2wucHJvbXB0IHx8IGVjaG8gJHByb21wdF9tZXJnZSkKIAlpZiB0ZXN0ICIkcHJvbXB0IiA9IHRydWU7IHRoZW4KIAkJdGVzdCAteiAiJEdJVF9ESUZGVE9PTF9OT19QUk9NUFQiCiAJZWxzZQpAQCAtMjAsNyArMjAsMTEgQEAKIAlmaQogfQogCi0jIFNldHMgdXAgc2hlbGwgdmFyaWFibGVzIGFuZCBydW5zIGEgbWVyZ2UgdG9vbAorIyBJbmRpY2F0ZXMgdGhhdCAtLWV4dGNtZD0uLi4gd2FzIHNwZWNpZmllZAordXNlX2V4dF9jbWQgKCkgeworCXRlc3QgLW4gIiRHSVRfRElGRlRPT0xfRVhUQ01EIgorfQorCiBsYXVuY2hfbWVyZ2VfdG9vbCAoKSB7CiAJIyBNZXJnZWQgaXMgdGhlIGZpbGVuYW1lIGFzIGl0IGFwcGVhcnMgaW4gdGhlIHdvcmsgdHJlZQogCSMgTG9jYWwgaXMgdGhlIGNvbnRlbnRzIG9mIGEvZmlsZW5hbWUKQEAgLTM1LDIwICszOSwyOCBAQAogCSMgdGhlIHVzZXIgd2l0aCB0aGUgcmVhbCAkTUVSR0VEIG5hbWUgYmVmb3JlIGxhdW5jaGluZyAkbWVyZ2VfdG9vbC4KIAlpZiBzaG91bGRfcHJvbXB0OyB0aGVuCiAJCXByaW50ZiAiXG5WaWV3aW5nOiAnJE1FUkdFRCdcbiIKLQkJcHJpbnRmICJIaXQgcmV0dXJuIHRvIGxhdW5jaCAnJXMnOiAiICIkbWVyZ2VfdG9vbCIKKwkJaWYgdXNlX2V4dF9jbWQ7IHRoZW4KKwkJCXByaW50ZiAiSGl0IHJldHVybiB0byBsYXVuY2ggJyVzJzogIiBcCisJCQkJIiRHSVRfRElGRlRPT0xfRVhUQ01EIgorCQllbHNlCisJCQlwcmludGYgIkhpdCByZXR1cm4gdG8gbGF1bmNoICclcyc6ICIgIiRtZXJnZV90b29sIgorCQlmaQogCQlyZWFkIGFucwogCWZpCiAKLQkjIFJ1biB0aGUgYXBwcm9wcmlhdGUgbWVyZ2UgdG9vbCBjb21tYW5kCi0JcnVuX21lcmdlX3Rvb2wgIiRtZXJnZV90b29sIgorCWlmIHVzZV9leHRfY21kOyB0aGVuCisJCWV2YWwgJEdJVF9ESUZGVE9PTF9FWFRDTUQgJyIkTE9DQUwiJyAnIiRSRU1PVEUiJworCWVsc2UKKwkJcnVuX21lcmdlX3Rvb2wgIiRtZXJnZV90b29sIgorCWZpCiB9CiAKLSMgQWxsb3cgR0lUX0RJRkZfVE9PTCBhbmQgR0lUX01FUkdFX1RPT0wgdG8gcHJvdmlkZSBkZWZhdWx0IHZhbHVlcwotdGVzdCAtbiAiJEdJVF9NRVJHRV9UT09MIiAmJiBtZXJnZV90b29sPSIkR0lUX01FUkdFX1RPT0wiCi10ZXN0IC1uICIkR0lUX0RJRkZfVE9PTCIgJiYgbWVyZ2VfdG9vbD0iJEdJVF9ESUZGX1RPT0wiCi0KLWlmIHRlc3QgLXogIiRtZXJnZV90b29sIjsgdGhlbgotCW1lcmdlX3Rvb2w9IiQoZ2V0X21lcmdlX3Rvb2wpIiB8fCBleGl0CitpZiAhIHVzZV9leHRfY21kOyB0aGVuCisJaWYgdGVzdCAtbiAiJEdJVF9ESUZGX1RPT0wiOyB0aGVuCisJCW1lcmdlX3Rvb2w9IiRHSVRfRElGRl9UT09MIgorCWVsc2UKKwkJbWVyZ2VfdG9vbD0iJChnZXRfbWVyZ2VfdG9vbCkiIHx8IGV4aXQKKwlmaQogZmkKIAogIyBMYXVuY2ggdGhlIG1lcmdlIHRvb2wgb24gZWFjaCBwYXRoIHByb3ZpZGVkIGJ5ICdnaXQgZGlmZicKZGlmZiAtLWdpdCBhL2dpdC1kaWZmdG9vbC5wZXJsIGIvZ2l0LWRpZmZ0b29sLnBlcmwKaW5kZXggYmE1ZTYwYS4uYWRjNDJkZSAxMDA3NTUKLS0tIGEvZ2l0LWRpZmZ0b29sLnBlcmwKKysrIGIvZ2l0LWRpZmZ0b29sLnBlcmwKQEAgLTEsNSArMSw1IEBACiAjIS91c3IvYmluL2VudiBwZXJsCi0jIENvcHlyaWdodCAoYykgMjAwOSBEYXZpZCBBZ3VpbGFyCisjIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCBEYXZpZCBBZ3VpbGFyCiAjCiAjIFRoaXMgaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgR0lUX0VYVEVSTkFMX0RJRkYtY29tcGF0aWJsZQogIyBnaXQtZGlmZnRvb2wtLWhlbHBlciBzY3JpcHQuCkBAIC0xNSwxMyArMTUsMTcgQEAKIHVzZSBDd2QgcXcoYWJzX3BhdGgpOwogdXNlIEZpbGU6OkJhc2VuYW1lIHF3KGRpcm5hbWUpOwogCityZXF1aXJlIEdpdDsKKwogbXkgJERJUiA9IGFic19wYXRoKGRpcm5hbWUoJDApKTsKIAogCiBzdWIgdXNhZ2UKIHsKIAlwcmludCA8PCAnVVNBR0UnOwotdXNhZ2U6IGdpdCBkaWZmdG9vbCBbLS10b29sPTx0b29sPl0gWy15fC0tbm8tcHJvbXB0XSBbImdpdCBkaWZmIiBvcHRpb25zXQordXNhZ2U6IGdpdCBkaWZmdG9vbCBbLXR8LS10b29sPTx0b29sPl0gWy14fC0tZXh0Y21kPTxjbWQ+XQorICAgICAgICAgICAgICAgICAgICBbLXl8LS1uby1wcm9tcHRdICAgWy1nfC0tZ3VpXQorICAgICAgICAgICAgICAgICAgICBbJ2dpdCBkaWZmJyBvcHRpb25zXQogVVNBR0UKIAlleGl0IDE7CiB9CkBAIC02Myw2ICs2NywyNiBAQAogCQkJJEVOVntHSVRfRElGRl9UT09MfSA9IHN1YnN0cigkYXJnLCA3KTsKIAkJCW5leHQ7CiAJCX0KKwkJaWYgKCRhcmcgZXEgJy14JyB8fCAkYXJnIGVxICctLWV4dGNtZCcpIHsKKwkJCXVzYWdlKCkgaWYgJCNBUkdWIDw9ICRpZHg7CisJCQkkRU5We0dJVF9ESUZGVE9PTF9FWFRDTUR9ID0gJEFSR1ZbJGlkeCArIDFdOworCQkJJHNraXBfbmV4dCA9IDE7CisJCQluZXh0OworCQl9CisJCWlmICgkYXJnID1+IC9eLS1leHRjbWQ9LykgeworCQkJJEVOVntHSVRfRElGRlRPT0xfRVhUQ01EfSA9IHN1YnN0cigkYXJnLCA5KTsKKwkJCW5leHQ7CisJCX0KKwkJaWYgKCRhcmcgZXEgJy1nJyB8fCAkYXJnIGVxICctLWd1aScpIHsKKwkJCWV2YWwgeworCQkJCW15ICR0b29sID0gR2l0Ojpjb21tYW5kX29uZWxpbmUoJ2NvbmZpZycsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlmZi5ndWl0b29sJyk7CisJCQkJaWYgKGxlbmd0aCgkdG9vbCkpIHsKKwkJCQkJJEVOVntHSVRfRElGRl9UT09MfSA9ICR0b29sOworCQkJCX0KKwkJCX07CisJCQluZXh0OworCQl9CiAJCWlmICgkYXJnIGVxICcteScgfHwgJGFyZyBlcSAnLS1uby1wcm9tcHQnKSB7CiAJCQkkRU5We0dJVF9ESUZGVE9PTF9OT19QUk9NUFR9ID0gJ3RydWUnOwogCQkJZGVsZXRlICRFTlZ7R0lUX0RJRkZUT09MX1BST01QVH07CmRpZmYgLS1naXQgYS9naXQtZmlsdGVyLWJyYW5jaC5zaCBiL2dpdC1maWx0ZXItYnJhbmNoLnNoCmluZGV4IDM3ZTA0NGQuLjg4ZmIwZjAgMTAwNzU1Ci0tLSBhL2dpdC1maWx0ZXItYnJhbmNoLnNoCisrKyBiL2dpdC1maWx0ZXItYnJhbmNoLnNoCkBAIC05NywxMiArOTcsMTIgQEAKIAllY2hvICJjYXNlIFwiXCRHSVRfJHt1aWR9X05BTUVcIiBpbiBcIlwiKSBHSVRfJHt1aWR9X05BTUU9XCJcJHtHSVRfJHt1aWR9X0VNQUlMJSVAKn1cIiAmJiBleHBvcnQgR0lUXyR7dWlkfV9OQU1FOzsgZXNhYyIKIH0KIAotVVNBR0U9IlstLWVudi1maWx0ZXIgPGNvbW1hbmQ+XSBbLS10cmVlLWZpbHRlciA8Y29tbWFuZD5dIFwKLVstLWluZGV4LWZpbHRlciA8Y29tbWFuZD5dIFstLXBhcmVudC1maWx0ZXIgPGNvbW1hbmQ+XSBcCi1bLS1tc2ctZmlsdGVyIDxjb21tYW5kPl0gWy0tY29tbWl0LWZpbHRlciA8Y29tbWFuZD5dIFwKLVstLXRhZy1uYW1lLWZpbHRlciA8Y29tbWFuZD5dIFstLXN1YmRpcmVjdG9yeS1maWx0ZXIgPGRpcmVjdG9yeT5dIFwKLVstLW9yaWdpbmFsIDxuYW1lc3BhY2U+XSBbLWQgPGRpcmVjdG9yeT5dIFstZiB8IC0tZm9yY2VdIFwKLVs8cmV2LWxpc3Qgb3B0aW9ucz4uLi5dIgorVVNBR0U9IlstLWVudi1maWx0ZXIgPGNvbW1hbmQ+XSBbLS10cmVlLWZpbHRlciA8Y29tbWFuZD5dCisgICAgICAgICAgICBbLS1pbmRleC1maWx0ZXIgPGNvbW1hbmQ+XSBbLS1wYXJlbnQtZmlsdGVyIDxjb21tYW5kPl0KKyAgICAgICAgICAgIFstLW1zZy1maWx0ZXIgPGNvbW1hbmQ+XSBbLS1jb21taXQtZmlsdGVyIDxjb21tYW5kPl0KKyAgICAgICAgICAgIFstLXRhZy1uYW1lLWZpbHRlciA8Y29tbWFuZD5dIFstLXN1YmRpcmVjdG9yeS1maWx0ZXIgPGRpcmVjdG9yeT5dCisgICAgICAgICAgICBbLS1vcmlnaW5hbCA8bmFtZXNwYWNlPl0gWy1kIDxkaXJlY3Rvcnk+XSBbLWYgfCAtLWZvcmNlXQorICAgICAgICAgICAgWzxyZXYtbGlzdCBvcHRpb25zPi4uLl0iCiAKIE9QVElPTlNfU1BFQz0KIC4gZ2l0LXNoLXNldHVwCkBAIC0xMjUsNiArMTI1LDcgQEAKIG9yaWdfbmFtZXNwYWNlPXJlZnMvb3JpZ2luYWwvCiBmb3JjZT0KIHBydW5lX2VtcHR5PQorcmVtYXBfdG9fYW5jZXN0b3I9CiB3aGlsZSA6CiBkbwogCWNhc2UgIiQxIiBpbgpAQCAtMTM3LDYgKzEzOCwxMSBAQAogCQlmb3JjZT10CiAJCWNvbnRpbnVlCiAJCTs7CisJLS1yZW1hcC10by1hbmNlc3RvcikKKwkJc2hpZnQKKwkJcmVtYXBfdG9fYW5jZXN0b3I9dAorCQljb250aW51ZQorCQk7OwogCS0tcHJ1bmUtZW1wdHkpCiAJCXNoaWZ0CiAJCXBydW5lX2VtcHR5PXQKQEAgLTE4Miw2ICsxODgsNyBAQAogCQk7OwogCS0tc3ViZGlyZWN0b3J5LWZpbHRlcikKIAkJZmlsdGVyX3N1YmRpcj0iJE9QVEFSRyIKKwkJcmVtYXBfdG9fYW5jZXN0b3I9dAogCQk7OwogCS0tb3JpZ2luYWwpCiAJCW9yaWdfbmFtZXNwYWNlPSQoZXhwciAiJE9QVEFSRy8iIDogJ1woLipbXi9dXCkvKiQnKS8KQEAgLTIwMCw3ICsyMDcsNyBAQAogLCopCiAJOzsKICopCi0JZGllICJDYW5ub3Qgc2V0IC0tcHJ1bmUtZW1wdHkgYW5kIC0tZmlsdGVyLWNvbW1pdCBhdCB0aGUgc2FtZSB0aW1lIgorCWRpZSAiQ2Fubm90IHNldCAtLXBydW5lLWVtcHR5IGFuZCAtLWNvbW1pdC1maWx0ZXIgYXQgdGhlIHNhbWUgdGltZSIKIGVzYWMKIAogY2FzZSAiJGZvcmNlIiBpbgpAQCAtMjUyLDIwICsyNTksMjggQEAKIAogR0lUX0lOREVYX0ZJTEU9IiQocHdkKS8uLi9pbmRleCIKIGV4cG9ydCBHSVRfSU5ERVhfRklMRQotZ2l0IHJlYWQtdHJlZSB8fCBkaWUgIkNvdWxkIG5vdCBzZWVkIHRoZSBpbmRleCIKIAogIyBtYXAgb2xkLT5uZXcgY29tbWl0IGlkcyBmb3IgcmV3cml0aW5nIHBhcmVudHMKIG1rZGlyIC4uL21hcCB8fCBkaWUgIkNvdWxkIG5vdCBjcmVhdGUgbWFwLyBkaXJlY3RvcnkiCiAKKyMgd2UgbmVlZCAiLS0iIG9ubHkgaWYgdGhlcmUgYXJlIG5vIHBhdGggYXJndW1lbnRzIGluICRACitub25yZXZzPSQoZ2l0IHJldi1wYXJzZSAtLW5vLXJldnMgIiRAIikgfHwgZXhpdAordGVzdCAteiAiJG5vbnJldnMiICYmIGRhc2hkYXNoPS0tIHx8IGRhc2hkYXNoPQorcmV2X2FyZ3M9JChnaXQgcmV2LXBhcnNlIC0tcmV2cy1vbmx5ICIkQCIpCisKIGNhc2UgIiRmaWx0ZXJfc3ViZGlyIiBpbgogIiIpCi0JZ2l0IHJldi1saXN0IC0tcmV2ZXJzZSAtLXRvcG8tb3JkZXIgLS1kZWZhdWx0IEhFQUQgXAotCQktLXBhcmVudHMgLS1zaW1wbGlmeS1tZXJnZXMgIiRAIgorCWV2YWwgc2V0IC0tICIkKGdpdCByZXYtcGFyc2UgLS1zcSAtLW5vLXJldnMgIiRAIikiCiAJOzsKICopCi0JZ2l0IHJldi1saXN0IC0tcmV2ZXJzZSAtLXRvcG8tb3JkZXIgLS1kZWZhdWx0IEhFQUQgXAotCQktLXBhcmVudHMgLS1zaW1wbGlmeS1tZXJnZXMgIiRAIiAtLSAiJGZpbHRlcl9zdWJkaXIiCi1lc2FjID4gLi4vcmV2cyB8fCBkaWUgIkNvdWxkIG5vdCBnZXQgdGhlIGNvbW1pdHMiCisJZXZhbCBzZXQgLS0gIiQoZ2l0IHJldi1wYXJzZSAtLXNxIC0tbm8tcmV2cyAiJEAiICRkYXNoZGFzaCBcCisJCSIkZmlsdGVyX3N1YmRpciIpIgorCTs7Citlc2FjCisKK2dpdCByZXYtbGlzdCAtLXJldmVyc2UgLS10b3BvLW9yZGVyIC0tZGVmYXVsdCBIRUFEIFwKKwktLXBhcmVudHMgLS1zaW1wbGlmeS1tZXJnZXMgJHJldl9hcmdzICIkQCIgPiAuLi9yZXZzIHx8CisJZGllICJDb3VsZCBub3QgZ2V0IHRoZSBjb21taXRzIgogY29tbWl0cz0kKHdjIC1sIDwuLi9yZXZzIHwgdHIgLWQgIiAiKQogCiB0ZXN0ICRjb21taXRzIC1lcSAwICYmIGRpZSAiRm91bmQgbm90aGluZyB0byByZXdyaXRlIgpAQCAtMzE2LDcgKzMzMSw3IEBACiAJCQlkaWUgInRyZWUgZmlsdGVyIGZhaWxlZDogJGZpbHRlcl90cmVlIgogCiAJCSgKLQkJCWdpdCBkaWZmLWluZGV4IC1yIC0tbmFtZS1vbmx5ICRjb21taXQgJiYKKwkJCWdpdCBkaWZmLWluZGV4IC1yIC0tbmFtZS1vbmx5IC0taWdub3JlLXN1Ym1vZHVsZXMgJGNvbW1pdCAmJgogCQkJZ2l0IGxzLWZpbGVzIC0tb3RoZXJzCiAJCSkgPiAiJHRlbXBkaXIiL3RyZWUtc3RhdGUgfHwgZXhpdAogCQlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVwbGFjZSAtLXJlbW92ZSAtLXN0ZGluIFwKQEAgLTM0NSwxOSArMzYwLDE5IEBACiAJCQlkaWUgImNvdWxkIG5vdCB3cml0ZSByZXdyaXR0ZW4gY29tbWl0IgogZG9uZSA8Li4vcmV2cwogCi0jIEluIGNhc2Ugb2YgYSBzdWJkaXJlY3RvcnkgZmlsdGVyLCBpdCBpcyBwb3NzaWJsZSB0aGF0IGEgc3BlY2lmaWVkIGhlYWQKLSMgaXMgbm90IGluIHRoZSBzZXQgb2YgcmV3cml0dGVuIGNvbW1pdHMsIGJlY2F1c2UgaXQgd2FzIHBydW5lZCBieSB0aGUKLSMgcmV2aXNpb24gd2Fsa2VyLiAgRml4IGl0IGJ5IG1hcHBpbmcgdGhlc2UgaGVhZHMgdG8gdGhlIHVuaXF1ZSBuZWFyZXN0Ci0jIGFuY2VzdG9yIHRoYXQgc3Vydml2ZWQgdGhlIHBydW5pbmcuCisjIElmIHdlIGFyZSBmaWx0ZXJpbmcgZm9yIHBhdGhzLCBhcyBpbiB0aGUgY2FzZSBvZiBhIHN1YmRpcmVjdG9yeQorIyBmaWx0ZXIsIGl0IGlzIHBvc3NpYmxlIHRoYXQgYSBzcGVjaWZpZWQgaGVhZCBpcyBub3QgaW4gdGhlIHNldCBvZgorIyByZXdyaXR0ZW4gY29tbWl0cywgYmVjYXVzZSBpdCB3YXMgcHJ1bmVkIGJ5IHRoZSByZXZpc2lvbiB3YWxrZXIuCisjIEFuY2VzdG9yIHJlbWFwcGluZyBmaXhlcyB0aGlzIGJ5IG1hcHBpbmcgdGhlc2UgaGVhZHMgdG8gdGhlIHVuaXF1ZQorIyBuZWFyZXN0IGFuY2VzdG9yIHRoYXQgc3Vydml2ZWQgdGhlIHBydW5pbmcuCiAKLWlmIHRlc3QgIiRmaWx0ZXJfc3ViZGlyIgoraWYgdGVzdCAiJHJlbWFwX3RvX2FuY2VzdG9yIiA9IHQKIHRoZW4KIAl3aGlsZSByZWFkIHJlZgogCWRvCiAJCXNoYTE9JChnaXQgcmV2LXBhcnNlICIkcmVmIl4wKQogCQl0ZXN0IC1mICIkd29ya2RpciIvLi4vbWFwLyRzaGExICYmIGNvbnRpbnVlCi0JCWFuY2VzdG9yPSQoZ2l0IHJldi1saXN0IC0tc2ltcGxpZnktbWVyZ2VzIC0xIFwKLQkJCQkkcmVmIC0tICIkZmlsdGVyX3N1YmRpciIpCisJCWFuY2VzdG9yPSQoZ2l0IHJldi1saXN0IC0tc2ltcGxpZnktbWVyZ2VzIC0xICIkcmVmIiAiJEAiKQogCQl0ZXN0ICIkYW5jZXN0b3IiICYmIGVjaG8gJChtYXAgJGFuY2VzdG9yKSA+PiAiJHdvcmtkaXIiLy4uL21hcC8kc2hhMQogCWRvbmUgPCAiJHRlbXBkaXIiL2hlYWRzCiBmaQpAQCAtNDQ3LDE3ICs0NjIsMTcgQEAKIAkJCQkJCSIkbmV3X3NoYTEiICIkbmV3X3JlZiIKIAkJCQlnaXQgY2F0LWZpbGUgdGFnICIkcmVmIiB8CiAJCQkJc2VkIC1uIFwKLQkJCQkgICAgLWUgIjEsL14kL3sKKwkJCQkgICAgLWUgJzEsL14kL3sKIAkJCQkJICAvXm9iamVjdCAvZAogCQkJCQkgIC9edHlwZSAvZAogCQkJCQkgIC9edGFnIC9kCi0JCQkJCX0iIFwKKwkJCQkJfScgXAogCQkJCSAgICAtZSAnL14tLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLS9xJyBcCiAJCQkJICAgIC1lICdwJyApIHwKIAkJCQlnaXQgbWt0YWcpIHx8CiAJCQkJZGllICJDb3VsZCBub3QgY3JlYXRlIG5ldyB0YWcgb2JqZWN0IGZvciAkcmVmIgogCQkJaWYgZ2l0IGNhdC1maWxlIHRhZyAiJHJlZiIgfCBcCi0JCQkgICBncmVwICdeLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4vZGV2L251bGwgMj4mMQorCQkJICAgc2FuZV9ncmVwICdeLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4vZGV2L251bGwgMj4mMQogCQkJdGhlbgogCQkJCXdhcm4gImdwZyBzaWduYXR1cmUgc3RyaXBwZWQgZnJvbSB0YWcgb2JqZWN0ICRzaGExdCIKIAkJCWZpCmRpZmYgLS1naXQgYS9naXQtZ3VpL01ha2VmaWxlIGIvZ2l0LWd1aS9NYWtlZmlsZQppbmRleCBiMzU4MGU5Li4xOTdiNTVlIDEwMDY0NAotLS0gYS9naXQtZ3VpL01ha2VmaWxlCisrKyBiL2dpdC1ndWkvTWFrZWZpbGUKQEAgLTcsNyArNyw3IEBACiAjIFRDTF9QQVRIIG11c3QgYmUgdmFpbGQgZm9yIHRoaXMgdG8gd29yay4KICMKIAotR0lULVZFUlNJT04tRklMRTogLkZPUkNFLUdJVC1WRVJTSU9OLUZJTEUKK0dJVC1WRVJTSU9OLUZJTEU6IEZPUkNFCiAJQCQoU0hFTExfUEFUSCkgLi9HSVQtVkVSU0lPTi1HRU4KIC1pbmNsdWRlIEdJVC1WRVJTSU9OLUZJTEUKIApAQCAtMjcwLDcgKzI3MCw3IEBACiAJR0lUR1VJX01BQ09TWEFQUD0kKEdJVEdVSV9NQUNPU1hBUFApIFwKICNlbmQgVFJBQ0tfVkFSUwogCi1HSVQtR1VJLVZBUlM6IC5GT1JDRS1HSVQtR1VJLVZBUlMKK0dJVC1HVUktVkFSUzogRk9SQ0UKIAlAVkFSUz0nJChUUkFDS19WQVJTKSc7IFwKIAlpZiB0ZXN0IHgiJCRWQVJTIiAhPSB4ImBjYXQgJEAgMj4vZGV2L251bGxgIiA7IHRoZW4gXAogCQllY2hvIDE+JjIgIiAgICAqIG5ldyBsb2NhdGlvbnMgb3IgVGNsL1RrIGludGVycHJldGVyIjsgXApAQCAtMzQwLDUgKzM0MCw0IEBACiBlbmRpZgogCiAuUEhPTlk6IGFsbCBpbnN0YWxsIHVuaW5zdGFsbCBkaXN0LXZlcnNpb24gY2xlYW4KLS5QSE9OWTogLkZPUkNFLUdJVC1WRVJTSU9OLUZJTEUKLS5QSE9OWTogLkZPUkNFLUdJVC1HVUktVkFSUworLlBIT05ZOiBGT1JDRQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9naXQtZ3VpLnNoIGIvZ2l0LWd1aS9naXQtZ3VpLnNoCmluZGV4IDE0YjkyYmEuLjdkNTQ1MTEgMTAwNzU1Ci0tLSBhL2dpdC1ndWkvZ2l0LWd1aS5zaAorKysgYi9naXQtZ3VpL2dpdC1ndWkuc2gKQEAgLTEyMSw2ICsxMjEsOCBAQAogCiBzZXQgX2FwcG5hbWUge0dpdCBHdWl9CiBzZXQgX2dpdGRpciB7fQorc2V0IF9naXR3b3JrdHJlZSB7fQorc2V0IF9pc2JhcmUge30KIHNldCBfZ2l0ZXhlYyB7fQogc2V0IF9naXRodG1sZGlyIHt9CiBzZXQgX3JlcG9uYW1lIHt9CkBAIC0yNzYsNiArMjc4LDMyIEBACiAJfQogfQogCitwcm9jIGlzX2JhcmUge30geworCWdsb2JhbCBfaXNiYXJlCisJZ2xvYmFsIF9naXRkaXIKKwlnbG9iYWwgX2dpdHdvcmt0cmVlCisKKwlpZiB7JF9pc2JhcmUgZXEge319IHsKKwkJaWYge1tjYXRjaCB7CisJCQlzZXQgX2JhcmUgW2dpdCByZXYtcGFyc2UgLS1pcy1iYXJlLXJlcG9zaXRvcnldCisJCQlzd2l0Y2ggIC0tICRfYmFyZSB7CisJCQl0cnVlIHsgc2V0IF9pc2JhcmUgMSB9CisJCQlmYWxzZSB7IHNldCBfaXNiYXJlIDB9CisJCQlkZWZhdWx0IHsgdGhyb3cgfQorCQkJfQorCQl9XX0geworCQkJaWYge1tpc19jb25maWdfdHJ1ZSBjb3JlLmJhcmVdCisJCQkJfHwgKCRfZ2l0d29ya3RyZWUgZXEge30KKwkJCQkJJiYgW2xpbmRleCBbZmlsZSBzcGxpdCAkX2dpdGRpcl0gZW5kXSBuZSB7LmdpdH0pfSB7CisJCQkJc2V0IF9pc2JhcmUgMQorCQkJfSBlbHNlIHsKKwkJCQlzZXQgX2lzYmFyZSAwCisJCQl9CisJCX0KKwl9CisJcmV0dXJuICRfaXNiYXJlCit9CisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjCiAjIyBoYW5keSB1dGlscwpAQCAtNjQ5LDEyICs2NzcsMTcgQEAKICMjIGNvbmZpZyBkZWZhdWx0cwogCiBzZXQgY3Vyc29yX3B0ciBhcnJvdwotZm9udCBjcmVhdGUgZm9udF9kaWZmIC1mYW1pbHkgQ291cmllciAtc2l6ZSAxMAogZm9udCBjcmVhdGUgZm9udF91aQotY2F0Y2ggewotCWxhYmVsIC5kdW1teQotCWV2YWwgZm9udCBjb25maWd1cmUgZm9udF91aSBbZm9udCBhY3R1YWwgWy5kdW1teSBjZ2V0IC1mb250XV0KLQlkZXN0cm95IC5kdW1teQoraWYge1tsc2VhcmNoIC1leGFjdCBbZm9udCBuYW1lc10gVGtEZWZhdWx0Rm9udF0gIT0gLTF9IHsKKwlldmFsIFtsaW5zZXJ0IFtmb250IGFjdHVhbCBUa0RlZmF1bHRGb250XSAwIGZvbnQgY29uZmlndXJlIGZvbnRfdWldCisJZXZhbCBbbGluc2VydCBbZm9udCBhY3R1YWwgVGtGaXhlZEZvbnRdIDAgZm9udCBjcmVhdGUgZm9udF9kaWZmXQorfSBlbHNlIHsKKwlmb250IGNyZWF0ZSBmb250X2RpZmYgLWZhbWlseSBDb3VyaWVyIC1zaXplIDEwCisJY2F0Y2ggeworCQlsYWJlbCAuZHVtbXkKKwkJZXZhbCBmb250IGNvbmZpZ3VyZSBmb250X3VpIFtmb250IGFjdHVhbCBbLmR1bW15IGNnZXQgLWZvbnRdXQorCQlkZXN0cm95IC5kdW1teQorCX0KIH0KIAogZm9udCBjcmVhdGUgZm9udF91aWl0YWxpYwpAQCAtNjY5LDYgKzcwMiw5IEBACiB9CiBpZiB7IVtpc19NYWNPU1hdfSB7CiAJb3B0aW9uIGFkZCAqTWVudS5mb250IGZvbnRfdWkKKwlvcHRpb24gYWRkICpFbnRyeS5ib3JkZXJXaWR0aCAxIHN0YXJ0dXBGaWxlCisJb3B0aW9uIGFkZCAqRW50cnkucmVsaWVmIHN1bmtlbiBzdGFydHVwRmlsZQorCW9wdGlvbiBhZGQgKlJhZGlvQnV0dG9uLmFuY2hvciB3IHN0YXJ0dXBGaWxlCiB9CiB1bnNldCBjbGFzcwogCkBAIC03MjEsNiArNzU3LDE4IEBACiAJCWZvbnQgY29uZmlndXJlICR7Zm9udH1ib2xkIC13ZWlnaHQgYm9sZAogCQlmb250IGNvbmZpZ3VyZSAke2ZvbnR9aXRhbGljIC1zbGFudCBpdGFsaWMKIAl9CisKKwlnbG9iYWwgdXNlX3R0ayBOUworCXNldCB1c2VfdHRrIDAKKwlzZXQgTlMge30KKwlpZiB7JHJlcG9fY29uZmlnKGd1aS51c2V0dGspfSB7CisJCXNldCB1c2VfdHRrIFtwYWNrYWdlIHZzYXRpc2ZpZXMgW3BhY2thZ2UgcHJvdmlkZSBUa10gOC41XQorCQlpZiB7JHVzZV90dGt9IHsKKwkJCXNldCBOUyB0dGsKKwkJCWJpbmQgW3dpbmZvIGNsYXNzIC5dIDw8VGhlbWVDaGFuZ2VkPj4gW2xpc3QgSW5pdFRoZW1lXQorCQkJcGF2ZV90b3BsZXZlbCAuCisJCX0KKwl9CiB9CiAKIHNldCBkZWZhdWx0X2NvbmZpZyhicmFuY2guYXV0b3NldHVwbWVyZ2UpIHRydWUKQEAgLTc0NSw2ICs3OTMsOSBAQAogc2V0IGRlZmF1bHRfY29uZmlnKGd1aS5zcGVsbGluZ2RpY3Rpb25hcnkpIHt9CiBzZXQgZGVmYXVsdF9jb25maWcoZ3VpLmZvbnR1aSkgW2ZvbnQgY29uZmlndXJlIGZvbnRfdWldCiBzZXQgZGVmYXVsdF9jb25maWcoZ3VpLmZvbnRkaWZmKSBbZm9udCBjb25maWd1cmUgZm9udF9kaWZmXQorIyBUT0RPOiB0aGlzIG9wdGlvbiBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGdpdC1jb25maWcgZG9jdW1lbnRhdGlvbgorc2V0IGRlZmF1bHRfY29uZmlnKGd1aS5tYXhmaWxlc2Rpc3BsYXllZCkgNTAwMAorc2V0IGRlZmF1bHRfY29uZmlnKGd1aS51c2V0dGspIDEKIHNldCBmb250X2Rlc2NzIHsKIAl7Zm9udHVpICAgZm9udF91aSAgIHttYyAiTWFpbiBGb250In19CiAJe2ZvbnRkaWZmIGZvbnRfZGlmZiB7bWMgIkRpZmYvQ29uc29sZSBGb250In19CkBAIC0xMDcyLDYgKzExMjMsOCBAQAogCQlzZXQgX3ByZWZpeCB7fQogCQl9XQogCSYmIFtjYXRjaCB7CisJCSMgYmV3YXJlIHRoYXQgZnJvbSB0aGUgLmdpdCBkaXIgdGhpcyBzZXRzIF9naXRkaXIgdG8gLgorCQkjIGFuZCBfcHJlZml4IHRvIHRoZSBlbXB0eSBzdHJpbmcKIAkJc2V0IF9naXRkaXIgW2dpdCByZXYtcGFyc2UgLS1naXQtZGlyXQogCQlzZXQgX3ByZWZpeCBbZ2l0IHJldi1wYXJzZSAtLXNob3ctcHJlZml4XQogCX0gZXJyXX0gewpAQCAtMTA4MCw2ICsxMTMzLDE0IEBACiAJY2hvb3NlX3JlcG9zaXRvcnk6OnBpY2sKIAlzZXQgcGlja2VkIDEKIH0KKworIyB3ZSBleHBhbmQgdGhlIF9naXRkaXIgd2hlbiBpdCdzIGp1c3QgYSBzaW5nbGUgZG90IChpLmUuIHdoZW4gd2UncmUgYmVpbmcKKyMgcnVuIGZyb20gdGhlIC5naXQgZGlyIGl0c2VsZikgbGVzdCB0aGUgcm91dGluZXMgdG8gZmluZCB0aGUgd29ya3RyZWUKKyMgZ2V0IGNvbmZ1c2VkCitpZiB7JF9naXRkaXIgZXEgIi4ifSB7CisJc2V0IF9naXRkaXIgW3B3ZF0KK30KKwogaWYgeyFbZmlsZSBpc2RpcmVjdG9yeSAkX2dpdGRpcl0gJiYgW2lzX0N5Z3dpbl19IHsKIAljYXRjaCB7c2V0IF9naXRkaXIgW2V4ZWMgY3lncGF0aCAtLXdpbmRvd3MgJF9naXRkaXJdfQogfQpAQCAtMTA4OCwyNSArMTE0OSw0MSBAQAogCWVycm9yX3BvcHVwIFtzdHJjYXQgW21jICJHaXQgZGlyZWN0b3J5IG5vdCBmb3VuZDoiXSAiXG5cbiRfZ2l0ZGlyIl0KIAlleGl0IDEKIH0KKyMgX2dpdGRpciBleGlzdHMsIHNvIHRyeSBsb2FkaW5nIHRoZSBjb25maWcKK2xvYWRfY29uZmlnIDAKK2FwcGx5X2NvbmZpZworIyB0cnkgdG8gc2V0IHdvcmsgdHJlZSBmcm9tIGVudmlyb25tZW50LCBmYWxsaW5nIGJhY2sgdG8gY29yZS53b3JrdHJlZQoraWYge1tjYXRjaCB7IHNldCBfZ2l0d29ya3RyZWUgJGVudihHSVRfV09SS19UUkVFKSB9XX0geworCXNldCBfZ2l0d29ya3RyZWUgW2dldF9jb25maWcgY29yZS53b3JrdHJlZV0KK30KIGlmIHskX3ByZWZpeCBuZSB7fX0gewotCXJlZ3N1YiAtYWxsIHtbXi9dKy99ICRfcHJlZml4IC4uLyBjZHVwCisJaWYgeyRfZ2l0d29ya3RyZWUgZXEge319IHsKKwkJcmVnc3ViIC1hbGwge1teL10rL30gJF9wcmVmaXggLi4vIGNkdXAKKwl9IGVsc2UgeworCQlzZXQgY2R1cCAkX2dpdHdvcmt0cmVlCisJfQogCWlmIHtbY2F0Y2gge2NkICRjZHVwfSBlcnJdfSB7CiAJCWNhdGNoIHt3bSB3aXRoZHJhdyAufQogCQllcnJvcl9wb3B1cCBbc3RyY2F0IFttYyAiQ2Fubm90IG1vdmUgdG8gdG9wIG9mIHdvcmtpbmcgZGlyZWN0b3J5OiJdICJcblxuJGVyciJdCiAJCWV4aXQgMQogCX0KKwlzZXQgX2dpdHdvcmt0cmVlIFtwd2RdCiAJdW5zZXQgY2R1cAogfSBlbHNlaWYgeyFbaXNfZW5hYmxlZCBiYXJlXX0gewotCWlmIHtbbGluZGV4IFtmaWxlIHNwbGl0ICRfZ2l0ZGlyXSBlbmRdIG5lIHsuZ2l0fX0geworCWlmIHtbaXNfYmFyZV19IHsKIAkJY2F0Y2gge3dtIHdpdGhkcmF3IC59Ci0JCWVycm9yX3BvcHVwIFtzdHJjYXQgW21jICJDYW5ub3QgdXNlIGZ1bm55IC5naXQgZGlyZWN0b3J5OiJdICJcblxuJF9naXRkaXIiXQorCQllcnJvcl9wb3B1cCBbc3RyY2F0IFttYyAiQ2Fubm90IHVzZSBiYXJlIHJlcG9zaXRvcnk6Il0gIlxuXG4kX2dpdGRpciJdCiAJCWV4aXQgMQogCX0KLQlpZiB7W2NhdGNoIHtjZCBbZmlsZSBkaXJuYW1lICRfZ2l0ZGlyXX0gZXJyXX0geworCWlmIHskX2dpdHdvcmt0cmVlIGVxIHt9fSB7CisJCXNldCBfZ2l0d29ya3RyZWUgW2ZpbGUgZGlybmFtZSAkX2dpdGRpcl0KKwl9CisJaWYge1tjYXRjaCB7Y2QgJF9naXR3b3JrdHJlZX0gZXJyXX0gewogCQljYXRjaCB7d20gd2l0aGRyYXcgLn0KLQkJZXJyb3JfcG9wdXAgW3N0cmNhdCBbbWMgIk5vIHdvcmtpbmcgZGlyZWN0b3J5Il0gIiBbZmlsZSBkaXJuYW1lICRfZ2l0ZGlyXTpcblxuJGVyciJdCisJCWVycm9yX3BvcHVwIFtzdHJjYXQgW21jICJObyB3b3JraW5nIGRpcmVjdG9yeSJdICIgJF9naXR3b3JrdHJlZTpcblxuJGVyciJdCiAJCWV4aXQgMQogCX0KKwlzZXQgX2dpdHdvcmt0cmVlIFtwd2RdCiB9CiBzZXQgX3JlcG9uYW1lIFtmaWxlIHNwbGl0IFtmaWxlIG5vcm1hbGl6ZSAkX2dpdGRpcl1dCiBpZiB7W2xpbmRleCAkX3JlcG9uYW1lIGVuZF0gZXEgey5naXR9fSB7CkBAIC0xMTE1LDYgKzExOTIsOSBAQAogCXNldCBfcmVwb25hbWUgW2xpbmRleCAkX3JlcG9uYW1lIGVuZF0KIH0KIAorc2V0IGVudihHSVRfRElSKSAkX2dpdGRpcgorc2V0IGVudihHSVRfV09SS19UUkVFKSAkX2dpdHdvcmt0cmVlCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjCiAjIyBnbG9iYWwgaW5pdApAQCAtMTEzMiw2ICsxMjEyLDcgQEAKIHNldCBpc19kZXRhY2hlZCAwCiBzZXQgY3VycmVudF9kaWZmX3BhdGgge30KIHNldCBpc18zd2F5X2RpZmYgMAorc2V0IGlzX3N1Ym1vZHVsZV9kaWZmIDAKIHNldCBpc19jb25mbGljdF9kaWZmIDAKIHNldCBzZWxlY3RlZF9jb21taXRfdHlwZSBuZXcKIHNldCBkaWZmX2VtcHR5X2NvdW50IDAKQEAgLTE2MTAsNiArMTY5MSw5IEBACiAJfSBlbHNlaWYgeyRzMCBuZSB7X30gJiYgW3N0cmluZyBpbmRleCAkc3RhdGUgMF0gZXEge199CiAJCSYmICRoZWFkX2luZm8gZXEge319IHsKIAkJc2V0IGhlYWRfaW5mbyAkaW5kZXhfaW5mbworCX0gZWxzZWlmIHskczAgZXEge199ICYmIFtzdHJpbmcgaW5kZXggJHN0YXRlIDBdIG5lIHtffX0geworCQlzZXQgaW5kZXhfaW5mbyAkaGVhZF9pbmZvCisJCXNldCBoZWFkX2luZm8ge30KIAl9CiAKIAlzZXQgZmlsZV9zdGF0ZXMoJHBhdGgpIFtsaXN0ICRzMCRzMSAkaWNvbiBcCkBAIC0xNjk4LDEwICsxNzgyLDEyIEBACiAJJHcgaW5zZXJ0IGVuZCAiW2VzY2FwZV9wYXRoICRwYXRoXVxuIgogfQogCitzZXQgZmlsZXNfd2FybmluZyAwCiBwcm9jIGRpc3BsYXlfYWxsX2ZpbGVzIHt9IHsKIAlnbG9iYWwgdWlfaW5kZXggdWlfd29ya2RpcgogCWdsb2JhbCBmaWxlX3N0YXRlcyBmaWxlX2xpc3RzCiAJZ2xvYmFsIGxhc3RfY2xpY2tlZAorCWdsb2JhbCBmaWxlc193YXJuaW5nCiAKIAkkdWlfaW5kZXggY29uZiAtc3RhdGUgbm9ybWFsCiAJJHVpX3dvcmtkaXIgY29uZiAtc3RhdGUgbm9ybWFsCkBAIC0xNzEzLDcgKzE3OTksMTggQEAKIAlzZXQgZmlsZV9saXN0cygkdWlfaW5kZXgpIFtsaXN0XQogCXNldCBmaWxlX2xpc3RzKCR1aV93b3JrZGlyKSBbbGlzdF0KIAotCWZvcmVhY2ggcGF0aCBbbHNvcnQgW2FycmF5IG5hbWVzIGZpbGVfc3RhdGVzXV0geworCXNldCB0b19kaXNwbGF5IFtsc29ydCBbYXJyYXkgbmFtZXMgZmlsZV9zdGF0ZXNdXQorCXNldCBkaXNwbGF5X2xpbWl0IFtnZXRfY29uZmlnIGd1aS5tYXhmaWxlc2Rpc3BsYXllZF0KKwlpZiB7W2xsZW5ndGggJHRvX2Rpc3BsYXldID4gJGRpc3BsYXlfbGltaXR9IHsKKwkJaWYgeyEkZmlsZXNfd2FybmluZ30geworCQkJIyBkbyBub3QgcmVwZWF0ZWRseSB3YXJuOgorCQkJc2V0IGZpbGVzX3dhcm5pbmcgMQorCQkJaW5mb19wb3B1cCBbbWMgIkRpc3BsYXlpbmcgb25seSAlcyBvZiAlcyBmaWxlcy4iIFwKKwkJCQkkZGlzcGxheV9saW1pdCBbbGxlbmd0aCAkdG9fZGlzcGxheV1dCisJCX0KKwkJc2V0IHRvX2Rpc3BsYXkgW2xyYW5nZSAkdG9fZGlzcGxheSAwIFtleHByIHskZGlzcGxheV9saW1pdC0xfV1dCisJfQorCWZvcmVhY2ggcGF0aCAkdG9fZGlzcGxheSB7CiAJCXNldCBzICRmaWxlX3N0YXRlcygkcGF0aCkKIAkJc2V0IG0gW2xpbmRleCAkcyAwXQogCQlzZXQgaWNvbl9uYW1lIFtsaW5kZXggJHMgMV0KQEAgLTE3NzksMTUgKzE4NzYsNiBAQAogICAgMHg2MiwgMHgxMCwgMHgwMiwgMHgxMCwgMHhmZSwgMHgxZn07CiB9IC1tYXNrZGF0YSAkZmlsZW1hc2sKIAotaW1hZ2UgY3JlYXRlIGJpdG1hcCBmaWxlX3BhcnR0aWNrIC1iYWNrZ3JvdW5kIHdoaXRlIC1mb3JlZ3JvdW5kICIjMDA1MDUwIiAtZGF0YSB7Ci0jZGVmaW5lIHBhcnR0aWNrX3dpZHRoIDE0Ci0jZGVmaW5lIHBhcnR0aWNrX2hlaWdodCAxNQotc3RhdGljIHVuc2lnbmVkIGNoYXIgcGFydHRpY2tfYml0c1tdID0gewotICAgMHhmZSwgMHgwMSwgMHgwMiwgMHgwMywgMHg3YSwgMHgwNSwgMHgwMiwgMHgwOSwgMHg3YSwgMHgxZiwgMHgwMiwgMHgxMCwKLSAgIDB4N2EsIDB4MTQsIDB4MDIsIDB4MTYsIDB4MDIsIDB4MTMsIDB4OGEsIDB4MTEsIDB4ZGEsIDB4MTAsIDB4NzIsIDB4MTAsCi0gICAweDIyLCAweDEwLCAweDAyLCAweDEwLCAweGZlLCAweDFmfTsKLX0gLW1hc2tkYXRhICRmaWxlbWFzawotCiBpbWFnZSBjcmVhdGUgYml0bWFwIGZpbGVfcXVlc3Rpb24gLWJhY2tncm91bmQgd2hpdGUgLWZvcmVncm91bmQgYmxhY2sgLWRhdGEgewogI2RlZmluZSBmaWxlX3F1ZXN0aW9uX3dpZHRoIDE0CiAjZGVmaW5lIGZpbGVfcXVlc3Rpb25faGVpZ2h0IDE1CkBAIC0xODI4LDcgKzE5MTYsNyBAQAogc2V0IHVpX3dvcmtkaXIgLnZwYW5lLmZpbGVzLndvcmtkaXIubGlzdAogCiBzZXQgYWxsX2ljb25zKF8kdWlfaW5kZXgpICAgZmlsZV9wbGFpbgotc2V0IGFsbF9pY29ucyhBJHVpX2luZGV4KSAgIGZpbGVfZnVsbHRpY2sKK3NldCBhbGxfaWNvbnMoQSR1aV9pbmRleCkgICBmaWxlX3BsYWluCiBzZXQgYWxsX2ljb25zKE0kdWlfaW5kZXgpICAgZmlsZV9mdWxsdGljawogc2V0IGFsbF9pY29ucyhEJHVpX2luZGV4KSAgIGZpbGVfcmVtb3ZlZAogc2V0IGFsbF9pY29ucyhVJHVpX2luZGV4KSAgIGZpbGVfbWVyZ2UKQEAgLTE5MDQsNyArMTk5MiwxMCBAQAogCiBzZXQgc3RhcnRpbmdfZ2l0a19tc2cgW21jICJTdGFydGluZyBnaXRrLi4uIHBsZWFzZSB3YWl0Li4uIl0KIAotcHJvYyBkb19naXRrIHtyZXZzfSB7Citwcm9jIGRvX2dpdGsge3JldnMge2lzX3N1Ym1vZHVsZSBmYWxzZX19IHsKKwlnbG9iYWwgY3VycmVudF9kaWZmX3BhdGggZmlsZV9zdGF0ZXMgY3VycmVudF9kaWZmX3NpZGUgdWlfaW5kZXgKKwlnbG9iYWwgX2dpdGRpciBfZ2l0d29ya3RyZWUKKwogCSMgLS0gQWx3YXlzIHN0YXJ0IGdpdGsgdGhyb3VnaCB3aGF0ZXZlciB3ZSB3ZXJlIGxvYWRlZCB3aXRoLiAgVGhpcwogCSMgICAgbGV0cyB1cyBieXBhc3MgdXNpbmcgc2hlbGwgcHJvY2VzcyBvbiBXaW5kb3dzIHN5c3RlbXMuCiAJIwpAQCAtMTkxNSwyMyArMjAwNiw3OCBAQAogCX0gZWxzZSB7CiAJCWdsb2JhbCBlbnYKIAotCQlpZiB7W2luZm8gZXhpc3RzIGVudihHSVRfRElSKV19IHsKLQkJCXNldCBvbGRfR0lUX0RJUiAkZW52KEdJVF9ESVIpCisJCXNldCBwd2QgW3B3ZF0KKworCQlpZiB7ISRpc19zdWJtb2R1bGV9IHsKKwkJCWlmIHshW2lzX2JhcmVdfSB7CisJCQkJY2QgJF9naXR3b3JrdHJlZQorCQkJfQogCQl9IGVsc2UgewotCQkJc2V0IG9sZF9HSVRfRElSIHt9CisJCQljZCAkY3VycmVudF9kaWZmX3BhdGgKKwkJCWlmIHskcmV2cyBlcSB7LS19fSB7CisJCQkJc2V0IHMgJGZpbGVfc3RhdGVzKCRjdXJyZW50X2RpZmZfcGF0aCkKKwkJCQlzZXQgb2xkX3NoYTEge30KKwkJCQlzZXQgbmV3X3NoYTEge30KKwkJCQlzd2l0Y2ggLWdsb2IgLS0gW2xpbmRleCAkcyAwXSB7CisJCQkJTV8geyBzZXQgb2xkX3NoYTEgW2xpbmRleCBbbGluZGV4ICRzIDJdIDFdIH0KKwkJCQlfTSB7IHNldCBvbGRfc2hhMSBbbGluZGV4IFtsaW5kZXggJHMgM10gMV0gfQorCQkJCU1NIHsKKwkJCQkJaWYgeyRjdXJyZW50X2RpZmZfc2lkZSBlcSAkdWlfaW5kZXh9IHsKKwkJCQkJCXNldCBvbGRfc2hhMSBbbGluZGV4IFtsaW5kZXggJHMgMl0gMV0KKwkJCQkJCXNldCBuZXdfc2hhMSBbbGluZGV4IFtsaW5kZXggJHMgM10gMV0KKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXNldCBvbGRfc2hhMSBbbGluZGV4IFtsaW5kZXggJHMgM10gMV0KKwkJCQkJfQorCQkJCX0KKwkJCQl9CisJCQkJc2V0IHJldnMgJG9sZF9zaGExLi4uJG5ld19zaGExCisJCQl9CisJCQkjIEdJVF9ESVIgYW5kIEdJVF9XT1JLX1RSRUUgZm9yIHRoZSBzdWJtb2R1bGUgYXJlIG5vdCB0aGUgb25lcworCQkJIyB3ZSd2ZSBiZWVuIHVzaW5nIGZvciB0aGUgbWFpbiByZXBvc2l0b3J5LCBzbyB1bnNldCB0aGVtLgorCQkJIyBUT0RPIHdlIGNvdWxkIG1ha2UgbGlmZSBlYXNpZXIgKHN0YXJ0IHVwIGZhc3Rlcj8pIGZvciBnaXRrCisJCQkjIGJ5IHNldHRpbmcgdGhlc2UgdG8gdGhlIGFwcHJvcHJpYXRlIHZhbHVlcyB0byBhbGxvdyBnaXRrCisJCQkjIHRvIHNraXAgdGhlIGhldXJpc3RpY3MgdG8gZmluZCB0aGVpciBwcm9wZXIgdmFsdWUKKwkJCXVuc2V0IGVudihHSVRfRElSKQorCQkJdW5zZXQgZW52KEdJVF9XT1JLX1RSRUUpCiAJCX0KKwkJZXZhbCBleGVjICRjbWQgJHJldnMgIi0tIiAiLS0iICYKKworCQlzZXQgZW52KEdJVF9ESVIpICRfZ2l0ZGlyCisJCXNldCBlbnYoR0lUX1dPUktfVFJFRSkgJF9naXR3b3JrdHJlZQorCQljZCAkcHdkCisKKwkJdWlfc3RhdHVzICQ6OnN0YXJ0aW5nX2dpdGtfbXNnCisJCWFmdGVyIDEwMDAwIHsKKwkJCXVpX3JlYWR5ICRzdGFydGluZ19naXRrX21zZworCQl9CisJfQorfQorCitwcm9jIGRvX2dpdF9ndWkge30geworCWdsb2JhbCBjdXJyZW50X2RpZmZfcGF0aAorCisJIyAtLSBBbHdheXMgc3RhcnQgZ2l0IGd1aSB0aHJvdWdoIHdoYXRldmVyIHdlIHdlcmUgbG9hZGVkIHdpdGguICBUaGlzCisJIyAgICBsZXRzIHVzIGJ5cGFzcyB1c2luZyBzaGVsbCBwcm9jZXNzIG9uIFdpbmRvd3Mgc3lzdGVtcy4KKwkjCisJc2V0IGV4ZSBbbGlzdCBbX3doaWNoIGdpdF1dCisJaWYgeyRleGUgZXEge319IHsKKwkJZXJyb3JfcG9wdXAgW21jICJDb3VsZG4ndCBmaW5kIGdpdCBndWkgaW4gUEFUSCJdCisJfSBlbHNlIHsKKwkJZ2xvYmFsIGVudgorCQlnbG9iYWwgX2dpdGRpciBfZ2l0d29ya3RyZWUKKworCQkjIHNlZSBub3RlIGluIGRvX2dpdGsgYWJvdXQgdW5zZXR0aW5nIHRoZXNlIHZhcnMgd2hlbgorCQkjIHJ1bm5pbmcgdG9vbHMgaW4gYSBzdWJtb2R1bGUKKwkJdW5zZXQgZW52KEdJVF9ESVIpCisJCXVuc2V0IGVudihHSVRfV09SS19UUkVFKQogCiAJCXNldCBwd2QgW3B3ZF0KLQkJY2QgW2ZpbGUgZGlybmFtZSBbZ2l0ZGlyXV0KLQkJc2V0IGVudihHSVRfRElSKSBbZmlsZSB0YWlsIFtnaXRkaXJdXQorCQljZCAkY3VycmVudF9kaWZmX3BhdGgKIAotCQlldmFsIGV4ZWMgJGNtZCAkcmV2cyAmCisJCWV2YWwgZXhlYyAkZXhlIGd1aSAmCiAKLQkJaWYgeyRvbGRfR0lUX0RJUiBlcSB7fX0gewotCQkJdW5zZXQgZW52KEdJVF9ESVIpCi0JCX0gZWxzZSB7Ci0JCQlzZXQgZW52KEdJVF9ESVIpICRvbGRfR0lUX0RJUgotCQl9CisJCXNldCBlbnYoR0lUX0RJUikgJF9naXRkaXIKKwkJc2V0IGVudihHSVRfV09SS19UUkVFKSAkX2dpdHdvcmt0cmVlCiAJCWNkICRwd2QKIAogCQl1aV9zdGF0dXMgJDo6c3RhcnRpbmdfZ2l0a19tc2cKQEAgLTE5NDIsNiArMjA4OCw3IEBACiB9CiAKIHByb2MgZG9fZXhwbG9yZSB7fSB7CisJZ2xvYmFsIF9naXR3b3JrdHJlZQogCXNldCBleHBsb3JlciB7fQogCWlmIHtbaXNfQ3lnd2luXSB8fCBbaXNfV2luZG93c119IHsKIAkJc2V0IGV4cGxvcmVyICJleHBsb3Jlci5leGUiCkBAIC0xOTUxLDcgKzIwOTgsNyBAQAogCQkjIGZyZWVkZXNrdG9wLm9yZy1jb25mb3JtaW5nIHN5c3RlbSBpcyBvdXIgYmVzdCBzaG90CiAJCXNldCBleHBsb3JlciAieGRnLW9wZW4iCiAJfQotCWV2YWwgZXhlYyAkZXhwbG9yZXIgW2xpc3QgW2ZpbGUgbmF0aXZlbmFtZSBbZmlsZSBkaXJuYW1lIFtnaXRkaXJdXV1dICYKKwlldmFsIGV4ZWMgJGV4cGxvcmVyICRfZ2l0d29ya3RyZWUgJgogfQogCiBzZXQgaXNfcXVpdHRpbmcgMApAQCAtMTk2Nyw3ICsyMTE0LDcgQEAKIAlnbG9iYWwgdWlfY29tbSBpc19xdWl0dGluZyByZXBvX2NvbmZpZyBjb21taXRfdHlwZQogCWdsb2JhbCBHSVRHVUlfQkNLX2V4aXN0cyBHSVRHVUlfQkNLX2kKIAlnbG9iYWwgdWlfY29tbV9zcGVsbAotCWdsb2JhbCByZXRfY29kZQorCWdsb2JhbCByZXRfY29kZSB1c2VfdHRrCiAKIAlpZiB7JGlzX3F1aXR0aW5nfSByZXR1cm4KIAlzZXQgaXNfcXVpdHRpbmcgMQpAQCAtMjAxMCwxMCArMjE1NywyOCBAQAogCiAJCSMgLS0gU3Rhc2ggb3VyIGN1cnJlbnQgd2luZG93IGdlb21ldHJ5IGludG8gdGhpcyByZXBvc2l0b3J5LgogCQkjCisJCXNldCBjZmdfd21zdGF0ZSBbd20gc3RhdGUgLl0KKwkJaWYge1tjYXRjaCB7c2V0IHJjX3dtc3RhdGUgJHJlcG9fY29uZmlnKGd1aS53bXN0YXRlKX1dfSB7CisJCQlzZXQgcmNfd21zdGF0ZSB7fQorCQl9CisJCWlmIHskY2ZnX3dtc3RhdGUgbmUgJHJjX3dtc3RhdGV9IHsKKwkJCWNhdGNoIHtnaXQgY29uZmlnIGd1aS53bXN0YXRlICRjZmdfd21zdGF0ZX0KKwkJfQorCQlpZiB7JGNmZ193bXN0YXRlIGVxIHt6b29tZWR9fSB7CisJCQkjIG9uIFdpbmRvd3Mgd20gZ2VvbWV0cnkgd2lsbCBsaWUgYWJvdXQgd2luZG93CisJCQkjIHBvc2l0aW9uIChidXQgbm90IHNpemUpIHdoZW4gd2luZG93IGlzIHpvb21lZAorCQkJIyByZXN0b3JlIHRoZSB3aW5kb3cgYmVmb3JlIHF1ZXJ5aW5nIHdtIGdlb21ldHJ5CisJCQl3bSBzdGF0ZSAuIG5vcm1hbAorCQl9CiAJCXNldCBjZmdfZ2VvbWV0cnkgW2xpc3RdCiAJCWxhcHBlbmQgY2ZnX2dlb21ldHJ5IFt3bSBnZW9tZXRyeSAuXQotCQlsYXBwZW5kIGNmZ19nZW9tZXRyeSBbbGluZGV4IFsudnBhbmUgc2FzaCBjb29yZCAwXSAwXQotCQlsYXBwZW5kIGNmZ19nZW9tZXRyeSBbbGluZGV4IFsudnBhbmUuZmlsZXMgc2FzaCBjb29yZCAwXSAxXQorCQlpZiB7JHVzZV90dGt9IHsKKwkJCWxhcHBlbmQgY2ZnX2dlb21ldHJ5IFsudnBhbmUgc2FzaHBvcyAwXQorCQkJbGFwcGVuZCBjZmdfZ2VvbWV0cnkgWy52cGFuZS5maWxlcyBzYXNocG9zIDBdCisJCX0gZWxzZSB7CisJCQlsYXBwZW5kIGNmZ19nZW9tZXRyeSBbbGluZGV4IFsudnBhbmUgc2FzaCBjb29yZCAwXSAwXQorCQkJbGFwcGVuZCBjZmdfZ2VvbWV0cnkgW2xpbmRleCBbLnZwYW5lLmZpbGVzIHNhc2ggY29vcmQgMF0gMV0KKwkJfQogCQlpZiB7W2NhdGNoIHtzZXQgcmNfZ2VvbWV0cnkgJHJlcG9fY29uZmlnKGd1aS5nZW9tZXRyeSl9XX0gewogCQkJc2V0IHJjX2dlb21ldHJ5IHt9CiAJCX0KQEAgLTIwMjMsNiArMjE4OCwxMSBAQAogCX0KIAogCXNldCByZXRfY29kZSAkcmMKKworCSMgQnJpZWZseSBlbmFibGUgc2VuZCBhZ2Fpbiwgd29ya2luZyBhcm91bmQgVGsgYnVnCisJIyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2Z1bmM9ZGV0YWlsJmF0aWQ9MTEyOTk3JmFpZD0xODIxMTc0Jmdyb3VwX2lkPTEyOTk3CisJdGsgYXBwbmFtZSBbYXBwbmFtZV0KKwogCWRlc3Ryb3kgLgogfQogCkBAIC0yMjk3LDggKzI0NjcsNiBAQAogIyMKICMjIHVpIGNvbnN0cnVjdGlvbgogCi1sb2FkX2NvbmZpZyAwCi1hcHBseV9jb25maWcKIHNldCB1aV9jb21tIHt9CiAKICMgLS0gTWVudSBCYXIKQEAgLTIzMzAsMTAgKzI0OTgsMTIgQEAKICMKIG1lbnUgLm1iYXIucmVwb3NpdG9yeQogCi0ubWJhci5yZXBvc2l0b3J5IGFkZCBjb21tYW5kIFwKLQktbGFiZWwgW21jICJFeHBsb3JlIFdvcmtpbmcgQ29weSJdIFwKLQktY29tbWFuZCB7ZG9fZXhwbG9yZX0KLS5tYmFyLnJlcG9zaXRvcnkgYWRkIHNlcGFyYXRvcgoraWYgeyFbaXNfYmFyZV19IHsKKwkubWJhci5yZXBvc2l0b3J5IGFkZCBjb21tYW5kIFwKKwkJLWxhYmVsIFttYyAiRXhwbG9yZSBXb3JraW5nIENvcHkiXSBcCisJCS1jb21tYW5kIHtkb19leHBsb3JlfQorCS5tYmFyLnJlcG9zaXRvcnkgYWRkIHNlcGFyYXRvcgorfQogCiAubWJhci5yZXBvc2l0b3J5IGFkZCBjb21tYW5kIFwKIAktbGFiZWwgW21jICJCcm93c2UgQ3VycmVudCBCcmFuY2gncyBGaWxlcyJdIFwKQEAgLTI1MDksMTIgKzI2NzksMTQgQEAKIAkJW2xpc3QgLm1iYXIuY29tbWl0IGVudHJ5Y29uZiBbLm1iYXIuY29tbWl0IGluZGV4IGxhc3RdIC1zdGF0ZV0KIAogCS5tYmFyLmNvbW1pdCBhZGQgY29tbWFuZCAtbGFiZWwgW21jICJVbnN0YWdlIEZyb20gQ29tbWl0Il0gXAotCQktY29tbWFuZCBkb191bnN0YWdlX3NlbGVjdGlvbgorCQktY29tbWFuZCBkb191bnN0YWdlX3NlbGVjdGlvbiBcCisJCS1hY2NlbGVyYXRvciAkTTFULVUKIAlsYXBwZW5kIGRpc2FibGVfb25fbG9jayBcCiAJCVtsaXN0IC5tYmFyLmNvbW1pdCBlbnRyeWNvbmYgWy5tYmFyLmNvbW1pdCBpbmRleCBsYXN0XSAtc3RhdGVdCiAKIAkubWJhci5jb21taXQgYWRkIGNvbW1hbmQgLWxhYmVsIFttYyAiUmV2ZXJ0IENoYW5nZXMiXSBcCi0JCS1jb21tYW5kIGRvX3JldmVydF9zZWxlY3Rpb24KKwkJLWNvbW1hbmQgZG9fcmV2ZXJ0X3NlbGVjdGlvbiBcCisJCS1hY2NlbGVyYXRvciAkTTFULUoKIAlsYXBwZW5kIGRpc2FibGVfb25fbG9jayBcCiAJCVtsaXN0IC5tYmFyLmNvbW1pdCBlbnRyeWNvbmYgWy5tYmFyLmNvbW1pdCBpbmRleCBsYXN0XSAtc3RhdGVdCiAKQEAgLTI3NzMsMTQgKzI5NDUsMTMgQEAKIAogIyAtLSBCcmFuY2ggQ29udHJvbAogIwotZnJhbWUgLmJyYW5jaCBcCi0JLWJvcmRlcndpZHRoIDEgXAotCS1yZWxpZWYgc3Vua2VuCi1sYWJlbCAuYnJhbmNoLmwxIFwKKyR7TlN9OjpmcmFtZSAuYnJhbmNoCitpZiB7ISR1c2VfdHRrfSB7LmJyYW5jaCBjb25maWd1cmUgLWJvcmRlcndpZHRoIDEgLXJlbGllZiBzdW5rZW59Ciske05TfTo6bGFiZWwgLmJyYW5jaC5sMSBcCiAJLXRleHQgW21jICJDdXJyZW50IEJyYW5jaDoiXSBcCiAJLWFuY2hvciB3IFwKIAktanVzdGlmeSBsZWZ0Ci1sYWJlbCAuYnJhbmNoLmNiIFwKKyR7TlN9OjpsYWJlbCAuYnJhbmNoLmNiIFwKIAktdGV4dHZhcmlhYmxlIGN1cnJlbnRfYnJhbmNoIFwKIAktYW5jaG9yIHcgXAogCS1qdXN0aWZ5IGxlZnQKQEAgLTI3OTAsMTUgKzI5NjEsMjAgQEAKIAogIyAtLSBNYWluIFdpbmRvdyBMYXlvdXQKICMKLXBhbmVkd2luZG93IC52cGFuZSAtb3JpZW50IGhvcml6b250YWwKLXBhbmVkd2luZG93IC52cGFuZS5maWxlcyAtb3JpZW50IHZlcnRpY2FsCi0udnBhbmUgYWRkIC52cGFuZS5maWxlcyAtc3RpY2t5IG5zZXcgLWhlaWdodCAxMDAgLXdpZHRoIDIwMAorJHtOU306OnBhbmVkd2luZG93IC52cGFuZSAtb3JpZW50IGhvcml6b250YWwKKyR7TlN9OjpwYW5lZHdpbmRvdyAudnBhbmUuZmlsZXMgLW9yaWVudCB2ZXJ0aWNhbAoraWYgeyR1c2VfdHRrfSB7CisJLnZwYW5lIGFkZCAudnBhbmUuZmlsZXMKK30gZWxzZSB7CisJLnZwYW5lIGFkZCAudnBhbmUuZmlsZXMgLXN0aWNreSBuc2V3IC1oZWlnaHQgMTAwIC13aWR0aCAyMDAKK30KIHBhY2sgLnZwYW5lIC1hbmNob3IgbiAtc2lkZSB0b3AgLWZpbGwgYm90aCAtZXhwYW5kIDEKIAogIyAtLSBJbmRleCBGaWxlIExpc3QKICMKLWZyYW1lIC52cGFuZS5maWxlcy5pbmRleCAtaGVpZ2h0IDEwMCAtd2lkdGggMjAwCi1sYWJlbCAudnBhbmUuZmlsZXMuaW5kZXgudGl0bGUgLXRleHQgW21jICJTdGFnZWQgQ2hhbmdlcyAoV2lsbCBDb21taXQpIl0gXAorJHtOU306OmZyYW1lIC52cGFuZS5maWxlcy5pbmRleCAtaGVpZ2h0IDEwMCAtd2lkdGggMjAwCit0bGFiZWwgLnZwYW5lLmZpbGVzLmluZGV4LnRpdGxlIFwKKwktdGV4dCBbbWMgIlN0YWdlZCBDaGFuZ2VzIChXaWxsIENvbW1pdCkiXSBcCiAJLWJhY2tncm91bmQgbGlnaHRncmVlbiAtZm9yZWdyb3VuZCBibGFjawogdGV4dCAkdWlfaW5kZXggLWJhY2tncm91bmQgd2hpdGUgLWZvcmVncm91bmQgYmxhY2sgXAogCS1ib3JkZXJ3aWR0aCAwIFwKQEAgLTI4MDgsOCArMjk4NCw4IEBACiAJLXhzY3JvbGxjb21tYW5kIHsudnBhbmUuZmlsZXMuaW5kZXguc3ggc2V0fSBcCiAJLXlzY3JvbGxjb21tYW5kIHsudnBhbmUuZmlsZXMuaW5kZXguc3kgc2V0fSBcCiAJLXN0YXRlIGRpc2FibGVkCi1zY3JvbGxiYXIgLnZwYW5lLmZpbGVzLmluZGV4LnN4IC1vcmllbnQgaCAtY29tbWFuZCBbbGlzdCAkdWlfaW5kZXggeHZpZXddCi1zY3JvbGxiYXIgLnZwYW5lLmZpbGVzLmluZGV4LnN5IC1vcmllbnQgdiAtY29tbWFuZCBbbGlzdCAkdWlfaW5kZXggeXZpZXddCiske05TfTo6c2Nyb2xsYmFyIC52cGFuZS5maWxlcy5pbmRleC5zeCAtb3JpZW50IGggLWNvbW1hbmQgW2xpc3QgJHVpX2luZGV4IHh2aWV3XQorJHtOU306OnNjcm9sbGJhciAudnBhbmUuZmlsZXMuaW5kZXguc3kgLW9yaWVudCB2IC1jb21tYW5kIFtsaXN0ICR1aV9pbmRleCB5dmlld10KIHBhY2sgLnZwYW5lLmZpbGVzLmluZGV4LnRpdGxlIC1zaWRlIHRvcCAtZmlsbCB4CiBwYWNrIC52cGFuZS5maWxlcy5pbmRleC5zeCAtc2lkZSBib3R0b20gLWZpbGwgeAogcGFjayAudnBhbmUuZmlsZXMuaW5kZXguc3kgLXNpZGUgcmlnaHQgLWZpbGwgeQpAQCAtMjgxNyw4ICsyOTkzLDggQEAKIAogIyAtLSBXb3JraW5nIERpcmVjdG9yeSBGaWxlIExpc3QKICMKLWZyYW1lIC52cGFuZS5maWxlcy53b3JrZGlyIC1oZWlnaHQgMTAwIC13aWR0aCAyMDAKLWxhYmVsIC52cGFuZS5maWxlcy53b3JrZGlyLnRpdGxlIC10ZXh0IFttYyAiVW5zdGFnZWQgQ2hhbmdlcyJdIFwKKyR7TlN9OjpmcmFtZSAudnBhbmUuZmlsZXMud29ya2RpciAtaGVpZ2h0IDEwMCAtd2lkdGggMjAwCit0bGFiZWwgLnZwYW5lLmZpbGVzLndvcmtkaXIudGl0bGUgLXRleHQgW21jICJVbnN0YWdlZCBDaGFuZ2VzIl0gXAogCS1iYWNrZ3JvdW5kIGxpZ2h0c2FsbW9uIC1mb3JlZ3JvdW5kIGJsYWNrCiB0ZXh0ICR1aV93b3JrZGlyIC1iYWNrZ3JvdW5kIHdoaXRlIC1mb3JlZ3JvdW5kIGJsYWNrIFwKIAktYm9yZGVyd2lkdGggMCBcCkBAIC0yODI4LDE1ICszMDA0LDE5IEBACiAJLXhzY3JvbGxjb21tYW5kIHsudnBhbmUuZmlsZXMud29ya2Rpci5zeCBzZXR9IFwKIAkteXNjcm9sbGNvbW1hbmQgey52cGFuZS5maWxlcy53b3JrZGlyLnN5IHNldH0gXAogCS1zdGF0ZSBkaXNhYmxlZAotc2Nyb2xsYmFyIC52cGFuZS5maWxlcy53b3JrZGlyLnN4IC1vcmllbnQgaCAtY29tbWFuZCBbbGlzdCAkdWlfd29ya2RpciB4dmlld10KLXNjcm9sbGJhciAudnBhbmUuZmlsZXMud29ya2Rpci5zeSAtb3JpZW50IHYgLWNvbW1hbmQgW2xpc3QgJHVpX3dvcmtkaXIgeXZpZXddCiske05TfTo6c2Nyb2xsYmFyIC52cGFuZS5maWxlcy53b3JrZGlyLnN4IC1vcmllbnQgaCAtY29tbWFuZCBbbGlzdCAkdWlfd29ya2RpciB4dmlld10KKyR7TlN9OjpzY3JvbGxiYXIgLnZwYW5lLmZpbGVzLndvcmtkaXIuc3kgLW9yaWVudCB2IC1jb21tYW5kIFtsaXN0ICR1aV93b3JrZGlyIHl2aWV3XQogcGFjayAudnBhbmUuZmlsZXMud29ya2Rpci50aXRsZSAtc2lkZSB0b3AgLWZpbGwgeAogcGFjayAudnBhbmUuZmlsZXMud29ya2Rpci5zeCAtc2lkZSBib3R0b20gLWZpbGwgeAogcGFjayAudnBhbmUuZmlsZXMud29ya2Rpci5zeSAtc2lkZSByaWdodCAtZmlsbCB5CiBwYWNrICR1aV93b3JrZGlyIC1zaWRlIGxlZnQgLWZpbGwgYm90aCAtZXhwYW5kIDEKIAotLnZwYW5lLmZpbGVzIGFkZCAudnBhbmUuZmlsZXMud29ya2RpciAtc3RpY2t5IG5zZXcKLS52cGFuZS5maWxlcyBhZGQgLnZwYW5lLmZpbGVzLmluZGV4IC1zdGlja3kgbnNldworLnZwYW5lLmZpbGVzIGFkZCAudnBhbmUuZmlsZXMud29ya2RpcgorLnZwYW5lLmZpbGVzIGFkZCAudnBhbmUuZmlsZXMuaW5kZXgKK2lmIHshJHVzZV90dGt9IHsKKwkudnBhbmUuZmlsZXMgcGFuZWNvbmZpZ3VyZSAudnBhbmUuZmlsZXMud29ya2RpciAtc3RpY2t5IG5ld3MKKwkudnBhbmUuZmlsZXMgcGFuZWNvbmZpZ3VyZSAudnBhbmUuZmlsZXMuaW5kZXggLXN0aWNreSBuZXdzCit9CiAKIGZvcmVhY2ggaSBbbGlzdCAkdWlfaW5kZXggJHVpX3dvcmtkaXJdIHsKIAlybXNlbF90YWcgJGkKQEAgLTI4NDYsNjggKzMwMjYsNjkgQEAKIAogIyAtLSBEaWZmIGFuZCBDb21taXQgQXJlYQogIwotZnJhbWUgLnZwYW5lLmxvd2VyIC1oZWlnaHQgMzAwIC13aWR0aCA0MDAKLWZyYW1lIC52cGFuZS5sb3dlci5jb21tYXJlYQotZnJhbWUgLnZwYW5lLmxvd2VyLmRpZmYgLXJlbGllZiBzdW5rZW4gLWJvcmRlcndpZHRoIDEKKyR7TlN9OjpmcmFtZSAudnBhbmUubG93ZXIgLWhlaWdodCAzMDAgLXdpZHRoIDQwMAorJHtOU306OmZyYW1lIC52cGFuZS5sb3dlci5jb21tYXJlYQorJHtOU306OmZyYW1lIC52cGFuZS5sb3dlci5kaWZmIC1yZWxpZWYgc3Vua2VuIC1ib3JkZXJ3aWR0aCAxCiBwYWNrIC52cGFuZS5sb3dlci5kaWZmIC1maWxsIGJvdGggLWV4cGFuZCAxCiBwYWNrIC52cGFuZS5sb3dlci5jb21tYXJlYSAtc2lkZSBib3R0b20gLWZpbGwgeAotLnZwYW5lIGFkZCAudnBhbmUubG93ZXIgLXN0aWNreSBuc2V3CisudnBhbmUgYWRkIC52cGFuZS5sb3dlcgoraWYgeyEkdXNlX3R0a30gey52cGFuZSBwYW5lY29uZmlndXJlIC52cGFuZS5sb3dlciAtc3RpY2t5IG5zZXd9CiAKICMgLS0gQ29tbWl0IEFyZWEgQnV0dG9ucwogIwotZnJhbWUgLnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1dHRvbnMKLWxhYmVsIC52cGFuZS5sb3dlci5jb21tYXJlYS5idXR0b25zLmwgLXRleHQge30gXAorJHtOU306OmZyYW1lIC52cGFuZS5sb3dlci5jb21tYXJlYS5idXR0b25zCiske05TfTo6bGFiZWwgLnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1dHRvbnMubCAtdGV4dCB7fSBcCiAJLWFuY2hvciB3IFwKIAktanVzdGlmeSBsZWZ0CiBwYWNrIC52cGFuZS5sb3dlci5jb21tYXJlYS5idXR0b25zLmwgLXNpZGUgdG9wIC1maWxsIHgKIHBhY2sgLnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1dHRvbnMgLXNpZGUgbGVmdCAtZmlsbCB5CiAKLWJ1dHRvbiAudnBhbmUubG93ZXIuY29tbWFyZWEuYnV0dG9ucy5yZXNjYW4gLXRleHQgW21jIFJlc2Nhbl0gXAorJHtOU306OmJ1dHRvbiAudnBhbmUubG93ZXIuY29tbWFyZWEuYnV0dG9ucy5yZXNjYW4gLXRleHQgW21jIFJlc2Nhbl0gXAogCS1jb21tYW5kIHVpX2RvX3Jlc2NhbgogcGFjayAudnBhbmUubG93ZXIuY29tbWFyZWEuYnV0dG9ucy5yZXNjYW4gLXNpZGUgdG9wIC1maWxsIHgKIGxhcHBlbmQgZGlzYWJsZV9vbl9sb2NrIFwKIAl7LnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1dHRvbnMucmVzY2FuIGNvbmYgLXN0YXRlfQogCi1idXR0b24gLnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1dHRvbnMuaW5jYWxsIC10ZXh0IFttYyAiU3RhZ2UgQ2hhbmdlZCJdIFwKKyR7TlN9OjpidXR0b24gLnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1dHRvbnMuaW5jYWxsIC10ZXh0IFttYyAiU3RhZ2UgQ2hhbmdlZCJdIFwKIAktY29tbWFuZCBkb19hZGRfYWxsCiBwYWNrIC52cGFuZS5sb3dlci5jb21tYXJlYS5idXR0b25zLmluY2FsbCAtc2lkZSB0b3AgLWZpbGwgeAogbGFwcGVuZCBkaXNhYmxlX29uX2xvY2sgXAogCXsudnBhbmUubG93ZXIuY29tbWFyZWEuYnV0dG9ucy5pbmNhbGwgY29uZiAtc3RhdGV9CiAKIGlmIHshW2lzX2VuYWJsZWQgbm9jb21taXRtc2ddfSB7Ci0JYnV0dG9uIC52cGFuZS5sb3dlci5jb21tYXJlYS5idXR0b25zLnNpZ25vZmYgLXRleHQgW21jICJTaWduIE9mZiJdIFwKKwkke05TfTo6YnV0dG9uIC52cGFuZS5sb3dlci5jb21tYXJlYS5idXR0b25zLnNpZ25vZmYgLXRleHQgW21jICJTaWduIE9mZiJdIFwKIAkJLWNvbW1hbmQgZG9fc2lnbm9mZgogCXBhY2sgLnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1dHRvbnMuc2lnbm9mZiAtc2lkZSB0b3AgLWZpbGwgeAogfQogCi1idXR0b24gLnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1dHRvbnMuY29tbWl0IC10ZXh0IFtjb21taXRfYnRuX2NhcHRpb25dIFwKKyR7TlN9OjpidXR0b24gLnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1dHRvbnMuY29tbWl0IC10ZXh0IFtjb21taXRfYnRuX2NhcHRpb25dIFwKIAktY29tbWFuZCBkb19jb21taXQKIHBhY2sgLnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1dHRvbnMuY29tbWl0IC1zaWRlIHRvcCAtZmlsbCB4CiBsYXBwZW5kIGRpc2FibGVfb25fbG9jayBcCiAJey52cGFuZS5sb3dlci5jb21tYXJlYS5idXR0b25zLmNvbW1pdCBjb25mIC1zdGF0ZX0KIAogaWYgeyFbaXNfZW5hYmxlZCBub2NvbW1pdF19IHsKLQlidXR0b24gLnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1dHRvbnMucHVzaCAtdGV4dCBbbWMgUHVzaF0gXAorCSR7TlN9OjpidXR0b24gLnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1dHRvbnMucHVzaCAtdGV4dCBbbWMgUHVzaF0gXAogCQktY29tbWFuZCBkb19wdXNoX2FueXdoZXJlCiAJcGFjayAudnBhbmUubG93ZXIuY29tbWFyZWEuYnV0dG9ucy5wdXNoIC1zaWRlIHRvcCAtZmlsbCB4CiB9CiAKICMgLS0gQ29tbWl0IE1lc3NhZ2UgQnVmZmVyCiAjCi1mcmFtZSAudnBhbmUubG93ZXIuY29tbWFyZWEuYnVmZmVyCi1mcmFtZSAudnBhbmUubG93ZXIuY29tbWFyZWEuYnVmZmVyLmhlYWRlcgorJHtOU306OmZyYW1lIC52cGFuZS5sb3dlci5jb21tYXJlYS5idWZmZXIKKyR7TlN9OjpmcmFtZSAudnBhbmUubG93ZXIuY29tbWFyZWEuYnVmZmVyLmhlYWRlcgogc2V0IHVpX2NvbW0gLnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1ZmZlci50CiBzZXQgdWlfY29tbCAudnBhbmUubG93ZXIuY29tbWFyZWEuYnVmZmVyLmhlYWRlci5sCiAKIGlmIHshW2lzX2VuYWJsZWQgbm9jb21taXRdfSB7Ci0JcmFkaW9idXR0b24gLnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1ZmZlci5oZWFkZXIubmV3IFwKKwkke05TfTo6cmFkaW9idXR0b24gLnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1ZmZlci5oZWFkZXIubmV3IFwKIAkJLXRleHQgW21jICJOZXcgQ29tbWl0Il0gXAogCQktY29tbWFuZCBkb19zZWxlY3RfY29tbWl0X3R5cGUgXAogCQktdmFyaWFibGUgc2VsZWN0ZWRfY29tbWl0X3R5cGUgXAogCQktdmFsdWUgbmV3CiAJbGFwcGVuZCBkaXNhYmxlX29uX2xvY2sgXAogCQlbbGlzdCAudnBhbmUubG93ZXIuY29tbWFyZWEuYnVmZmVyLmhlYWRlci5uZXcgY29uZiAtc3RhdGVdCi0JcmFkaW9idXR0b24gLnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1ZmZlci5oZWFkZXIuYW1lbmQgXAorCSR7TlN9OjpyYWRpb2J1dHRvbiAudnBhbmUubG93ZXIuY29tbWFyZWEuYnVmZmVyLmhlYWRlci5hbWVuZCBcCiAJCS10ZXh0IFttYyAiQW1lbmQgTGFzdCBDb21taXQiXSBcCiAJCS1jb21tYW5kIGRvX3NlbGVjdF9jb21taXRfdHlwZSBcCiAJCS12YXJpYWJsZSBzZWxlY3RlZF9jb21taXRfdHlwZSBcCkBAIC0yOTE2LDcgKzMwOTcsNyBAQAogCQlbbGlzdCAudnBhbmUubG93ZXIuY29tbWFyZWEuYnVmZmVyLmhlYWRlci5hbWVuZCBjb25mIC1zdGF0ZV0KIH0KIAotbGFiZWwgJHVpX2NvbWwgXAorJHtOU306OmxhYmVsICR1aV9jb21sIFwKIAktYW5jaG9yIHcgXAogCS1qdXN0aWZ5IGxlZnQKIHByb2MgdHJhY2VfY29tbWl0X3R5cGUge3Zhcm5hbWUgYXJnc30gewpAQCAtMjk0OCw3ICszMTI5LDcgQEAKIAktd2lkdGggJHJlcG9fY29uZmlnKGd1aS5jb21taXRtc2d3aWR0aCkgLWhlaWdodCA5IC13cmFwIG5vbmUgXAogCS1mb250IGZvbnRfZGlmZiBcCiAJLXlzY3JvbGxjb21tYW5kIHsudnBhbmUubG93ZXIuY29tbWFyZWEuYnVmZmVyLnNieSBzZXR9Ci1zY3JvbGxiYXIgLnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1ZmZlci5zYnkgXAorJHtOU306OnNjcm9sbGJhciAudnBhbmUubG93ZXIuY29tbWFyZWEuYnVmZmVyLnNieSBcCiAJLWNvbW1hbmQgW2xpc3QgJHVpX2NvbW0geXZpZXddCiBwYWNrIC52cGFuZS5sb3dlci5jb21tYXJlYS5idWZmZXIuaGVhZGVyIC1zaWRlIHRvcCAtZmlsbCB4CiBwYWNrIC52cGFuZS5sb3dlci5jb21tYXJlYS5idWZmZXIuc2J5IC1zaWRlIHJpZ2h0IC1maWxsIHkKQEAgLTMwMTQsMTkgKzMxOTUsMTkgQEAKIH0KIHRyYWNlIGFkZCB2YXJpYWJsZSBjdXJyZW50X2RpZmZfcGF0aCB3cml0ZSB0cmFjZV9jdXJyZW50X2RpZmZfcGF0aAogCi1mcmFtZSAudnBhbmUubG93ZXIuZGlmZi5oZWFkZXIgLWJhY2tncm91bmQgZ29sZAotbGFiZWwgLnZwYW5lLmxvd2VyLmRpZmYuaGVhZGVyLnN0YXR1cyBcCitnb2xkX2ZyYW1lIC52cGFuZS5sb3dlci5kaWZmLmhlYWRlcgordGxhYmVsIC52cGFuZS5sb3dlci5kaWZmLmhlYWRlci5zdGF0dXMgXAogCS1iYWNrZ3JvdW5kIGdvbGQgXAogCS1mb3JlZ3JvdW5kIGJsYWNrIFwKIAktd2lkdGggJG1heF9zdGF0dXNfZGVzYyBcCiAJLWFuY2hvciB3IFwKIAktanVzdGlmeSBsZWZ0Ci1sYWJlbCAudnBhbmUubG93ZXIuZGlmZi5oZWFkZXIuZmlsZSBcCit0bGFiZWwgLnZwYW5lLmxvd2VyLmRpZmYuaGVhZGVyLmZpbGUgXAogCS1iYWNrZ3JvdW5kIGdvbGQgXAogCS1mb3JlZ3JvdW5kIGJsYWNrIFwKIAktYW5jaG9yIHcgXAogCS1qdXN0aWZ5IGxlZnQKLWxhYmVsIC52cGFuZS5sb3dlci5kaWZmLmhlYWRlci5wYXRoIFwKK3RsYWJlbCAudnBhbmUubG93ZXIuZGlmZi5oZWFkZXIucGF0aCBcCiAJLWJhY2tncm91bmQgZ29sZCBcCiAJLWZvcmVncm91bmQgYmxhY2sgXAogCS1hbmNob3IgdyBcCkBAIC0zMDUwLDE4ICszMjMxLDE4IEBACiAKICMgLS0gRGlmZiBCb2R5CiAjCi1mcmFtZSAudnBhbmUubG93ZXIuZGlmZi5ib2R5Ciske05TfTo6ZnJhbWUgLnZwYW5lLmxvd2VyLmRpZmYuYm9keQogc2V0IHVpX2RpZmYgLnZwYW5lLmxvd2VyLmRpZmYuYm9keS50CiB0ZXh0ICR1aV9kaWZmIC1iYWNrZ3JvdW5kIHdoaXRlIC1mb3JlZ3JvdW5kIGJsYWNrIFwKIAktYm9yZGVyd2lkdGggMCBcCi0JLXdpZHRoIDgwIC1oZWlnaHQgMTUgLXdyYXAgbm9uZSBcCisJLXdpZHRoIDgwIC1oZWlnaHQgNSAtd3JhcCBub25lIFwKIAktZm9udCBmb250X2RpZmYgXAogCS14c2Nyb2xsY29tbWFuZCB7LnZwYW5lLmxvd2VyLmRpZmYuYm9keS5zYnggc2V0fSBcCiAJLXlzY3JvbGxjb21tYW5kIHsudnBhbmUubG93ZXIuZGlmZi5ib2R5LnNieSBzZXR9IFwKIAktc3RhdGUgZGlzYWJsZWQKLXNjcm9sbGJhciAudnBhbmUubG93ZXIuZGlmZi5ib2R5LnNieCAtb3JpZW50IGhvcml6b250YWwgXAorJHtOU306OnNjcm9sbGJhciAudnBhbmUubG93ZXIuZGlmZi5ib2R5LnNieCAtb3JpZW50IGhvcml6b250YWwgXAogCS1jb21tYW5kIFtsaXN0ICR1aV9kaWZmIHh2aWV3XQotc2Nyb2xsYmFyIC52cGFuZS5sb3dlci5kaWZmLmJvZHkuc2J5IC1vcmllbnQgdmVydGljYWwgXAorJHtOU306OnNjcm9sbGJhciAudnBhbmUubG93ZXIuZGlmZi5ib2R5LnNieSAtb3JpZW50IHZlcnRpY2FsIFwKIAktY29tbWFuZCBbbGlzdCAkdWlfZGlmZiB5dmlld10KIHBhY2sgLnZwYW5lLmxvd2VyLmRpZmYuYm9keS5zYnggLXNpZGUgYm90dG9tIC1maWxsIHgKIHBhY2sgLnZwYW5lLmxvd2VyLmRpZmYuYm9keS5zYnkgLXNpZGUgcmlnaHQgLWZpbGwgeQpAQCAtMzEwNiwxNSArMzI4Nyw2IEBACiAKIHByb2MgY3JlYXRlX2NvbW1vbl9kaWZmX3BvcHVwIHtjdHhtfSB7CiAJJGN0eG0gYWRkIGNvbW1hbmQgXAotCQktbGFiZWwgW21jICJTaG93IExlc3MgQ29udGV4dCJdIFwKLQkJLWNvbW1hbmQgc2hvd19sZXNzX2NvbnRleHQKLQlsYXBwZW5kIGRpZmZfYWN0aW9ucyBbbGlzdCAkY3R4bSBlbnRyeWNvbmYgWyRjdHhtIGluZGV4IGxhc3RdIC1zdGF0ZV0KLQkkY3R4bSBhZGQgY29tbWFuZCBcCi0JCS1sYWJlbCBbbWMgIlNob3cgTW9yZSBDb250ZXh0Il0gXAotCQktY29tbWFuZCBzaG93X21vcmVfY29udGV4dAotCWxhcHBlbmQgZGlmZl9hY3Rpb25zIFtsaXN0ICRjdHhtIGVudHJ5Y29uZiBbJGN0eG0gaW5kZXggbGFzdF0gLXN0YXRlXQotCSRjdHhtIGFkZCBzZXBhcmF0b3IKLQkkY3R4bSBhZGQgY29tbWFuZCBcCiAJCS1sYWJlbCBbbWMgUmVmcmVzaF0gXAogCQktY29tbWFuZCByZXNob3dfZGlmZgogCWxhcHBlbmQgZGlmZl9hY3Rpb25zIFtsaXN0ICRjdHhtIGVudHJ5Y29uZiBbJGN0eG0gaW5kZXggbGFzdF0gLXN0YXRlXQpAQCAtMzE2NSwxMCArMzMzNywxOSBAQAogbGFwcGVuZCBkaWZmX2FjdGlvbnMgW2xpc3QgJGN0eG0gZW50cnljb25mICR1aV9kaWZmX2FwcGx5aHVuayAtc3RhdGVdCiAkY3R4bSBhZGQgY29tbWFuZCBcCiAJLWxhYmVsIFttYyAiQXBwbHkvUmV2ZXJzZSBMaW5lIl0gXAotCS1jb21tYW5kIHthcHBseV9saW5lICRjdXJzb3JYICRjdXJzb3JZOyBkb19yZXNjYW59CisJLWNvbW1hbmQge2FwcGx5X3JhbmdlX29yX2xpbmUgJGN1cnNvclggJGN1cnNvclk7IGRvX3Jlc2Nhbn0KIHNldCB1aV9kaWZmX2FwcGx5bGluZSBbJGN0eG0gaW5kZXggbGFzdF0KIGxhcHBlbmQgZGlmZl9hY3Rpb25zIFtsaXN0ICRjdHhtIGVudHJ5Y29uZiAkdWlfZGlmZl9hcHBseWxpbmUgLXN0YXRlXQogJGN0eG0gYWRkIHNlcGFyYXRvcgorJGN0eG0gYWRkIGNvbW1hbmQgXAorCS1sYWJlbCBbbWMgIlNob3cgTGVzcyBDb250ZXh0Il0gXAorCS1jb21tYW5kIHNob3dfbGVzc19jb250ZXh0CitsYXBwZW5kIGRpZmZfYWN0aW9ucyBbbGlzdCAkY3R4bSBlbnRyeWNvbmYgWyRjdHhtIGluZGV4IGxhc3RdIC1zdGF0ZV0KKyRjdHhtIGFkZCBjb21tYW5kIFwKKwktbGFiZWwgW21jICJTaG93IE1vcmUgQ29udGV4dCJdIFwKKwktY29tbWFuZCBzaG93X21vcmVfY29udGV4dAorbGFwcGVuZCBkaWZmX2FjdGlvbnMgW2xpc3QgJGN0eG0gZW50cnljb25mIFskY3R4bSBpbmRleCBsYXN0XSAtc3RhdGVdCiskY3R4bSBhZGQgc2VwYXJhdG9yCiBjcmVhdGVfY29tbW9uX2RpZmZfcG9wdXAgJGN0eG0KIAogc2V0IGN0eG1tZyAudnBhbmUubG93ZXIuZGlmZi5ib2R5LmN0eG1tZwpAQCAtMzE5MSw5ICszMzcyLDQwIEBACiAJLWNvbW1hbmQge21lcmdlX3Jlc29sdmVfb25lIDF9CiBsYXBwZW5kIGRpZmZfYWN0aW9ucyBbbGlzdCAkY3R4bW1nIGVudHJ5Y29uZiBbJGN0eG1tZyBpbmRleCBsYXN0XSAtc3RhdGVdCiAkY3R4bW1nIGFkZCBzZXBhcmF0b3IKKyRjdHhtbWcgYWRkIGNvbW1hbmQgXAorCS1sYWJlbCBbbWMgIlNob3cgTGVzcyBDb250ZXh0Il0gXAorCS1jb21tYW5kIHNob3dfbGVzc19jb250ZXh0CitsYXBwZW5kIGRpZmZfYWN0aW9ucyBbbGlzdCAkY3R4bW1nIGVudHJ5Y29uZiBbJGN0eG1tZyBpbmRleCBsYXN0XSAtc3RhdGVdCiskY3R4bW1nIGFkZCBjb21tYW5kIFwKKwktbGFiZWwgW21jICJTaG93IE1vcmUgQ29udGV4dCJdIFwKKwktY29tbWFuZCBzaG93X21vcmVfY29udGV4dAorbGFwcGVuZCBkaWZmX2FjdGlvbnMgW2xpc3QgJGN0eG1tZyBlbnRyeWNvbmYgWyRjdHhtbWcgaW5kZXggbGFzdF0gLXN0YXRlXQorJGN0eG1tZyBhZGQgc2VwYXJhdG9yCiBjcmVhdGVfY29tbW9uX2RpZmZfcG9wdXAgJGN0eG1tZwogCi1wcm9jIHBvcHVwX2RpZmZfbWVudSB7Y3R4bSBjdHhtbWcgeCB5IFggWX0geworc2V0IGN0eG1zbSAudnBhbmUubG93ZXIuZGlmZi5ib2R5LmN0eG1zbQorbWVudSAkY3R4bXNtIC10ZWFyb2ZmIDAKKyRjdHhtc20gYWRkIGNvbW1hbmQgXAorCS1sYWJlbCBbbWMgIlZpc3VhbGl6ZSBUaGVzZSBDaGFuZ2VzIEluIFRoZSBTdWJtb2R1bGUiXSBcCisJLWNvbW1hbmQge2RvX2dpdGsgLS0gdHJ1ZX0KK2xhcHBlbmQgZGlmZl9hY3Rpb25zIFtsaXN0ICRjdHhtc20gZW50cnljb25mIFskY3R4bXNtIGluZGV4IGxhc3RdIC1zdGF0ZV0KKyRjdHhtc20gYWRkIGNvbW1hbmQgXAorCS1sYWJlbCBbbWMgIlZpc3VhbGl6ZSBDdXJyZW50IEJyYW5jaCBIaXN0b3J5IEluIFRoZSBTdWJtb2R1bGUiXSBcCisJLWNvbW1hbmQge2RvX2dpdGsge30gdHJ1ZX0KK2xhcHBlbmQgZGlmZl9hY3Rpb25zIFtsaXN0ICRjdHhtc20gZW50cnljb25mIFskY3R4bXNtIGluZGV4IGxhc3RdIC1zdGF0ZV0KKyRjdHhtc20gYWRkIGNvbW1hbmQgXAorCS1sYWJlbCBbbWMgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSJdIFwKKwktY29tbWFuZCB7ZG9fZ2l0ayAtLWFsbCB0cnVlfQorbGFwcGVuZCBkaWZmX2FjdGlvbnMgW2xpc3QgJGN0eG1zbSBlbnRyeWNvbmYgWyRjdHhtc20gaW5kZXggbGFzdF0gLXN0YXRlXQorJGN0eG1zbSBhZGQgc2VwYXJhdG9yCiskY3R4bXNtIGFkZCBjb21tYW5kIFwKKwktbGFiZWwgW21jICJTdGFydCBnaXQgZ3VpIEluIFRoZSBTdWJtb2R1bGUiXSBcCisJLWNvbW1hbmQge2RvX2dpdF9ndWl9CitsYXBwZW5kIGRpZmZfYWN0aW9ucyBbbGlzdCAkY3R4bXNtIGVudHJ5Y29uZiBbJGN0eG1zbSBpbmRleCBsYXN0XSAtc3RhdGVdCiskY3R4bXNtIGFkZCBzZXBhcmF0b3IKK2NyZWF0ZV9jb21tb25fZGlmZl9wb3B1cCAkY3R4bXNtCisKK3Byb2MgcG9wdXBfZGlmZl9tZW51IHtjdHhtIGN0eG1tZyBjdHhtc20geCB5IFggWX0gewogCWdsb2JhbCBjdXJyZW50X2RpZmZfcGF0aCBmaWxlX3N0YXRlcwogCXNldCA6OmN1cnNvclggJHgKIAlzZXQgOjpjdXJzb3JZICR5CkBAIC0zMjA0LDEzICszNDE2LDI0IEBACiAJfQogCWlmIHtbc3RyaW5nIGZpcnN0IHtVfSAkc3RhdGVdID49IDB9IHsKIAkJdGtfcG9wdXAgJGN0eG1tZyAkWCAkWQorCX0gZWxzZWlmIHskOjppc19zdWJtb2R1bGVfZGlmZn0geworCQl0a19wb3B1cCAkY3R4bXNtICRYICRZCiAJfSBlbHNlIHsKKwkJc2V0IGhhc19yYW5nZSBbZXhwciB7WyQ6OnVpX2RpZmYgdGFnIG5leHRyYW5nZSBzZWwgMC4wXSAhPSB7fX1dCiAJCWlmIHskOjp1aV9pbmRleCBlcSAkOjpjdXJyZW50X2RpZmZfc2lkZX0gewogCQkJc2V0IGwgW21jICJVbnN0YWdlIEh1bmsgRnJvbSBDb21taXQiXQotCQkJc2V0IHQgW21jICJVbnN0YWdlIExpbmUgRnJvbSBDb21taXQiXQorCQkJaWYgeyRoYXNfcmFuZ2V9IHsKKwkJCQlzZXQgdCBbbWMgIlVuc3RhZ2UgTGluZXMgRnJvbSBDb21taXQiXQorCQkJfSBlbHNlIHsKKwkJCQlzZXQgdCBbbWMgIlVuc3RhZ2UgTGluZSBGcm9tIENvbW1pdCJdCisJCQl9CiAJCX0gZWxzZSB7CiAJCQlzZXQgbCBbbWMgIlN0YWdlIEh1bmsgRm9yIENvbW1pdCJdCi0JCQlzZXQgdCBbbWMgIlN0YWdlIExpbmUgRm9yIENvbW1pdCJdCisJCQlpZiB7JGhhc19yYW5nZX0geworCQkJCXNldCB0IFttYyAiU3RhZ2UgTGluZXMgRm9yIENvbW1pdCJdCisJCQl9IGVsc2UgeworCQkJCXNldCB0IFttYyAiU3RhZ2UgTGluZSBGb3IgQ29tbWl0Il0KKwkJCX0KIAkJfQogCQlpZiB7JDo6aXNfM3dheV9kaWZmCiAJCQl8fCAkY3VycmVudF9kaWZmX3BhdGggZXEge30KQEAgLTMyMjcsNyArMzQ1MCw3IEBACiAJCXRrX3BvcHVwICRjdHhtICRYICRZCiAJfQogfQotYmluZF9idXR0b24zICR1aV9kaWZmIFtsaXN0IHBvcHVwX2RpZmZfbWVudSAkY3R4bSAkY3R4bW1nICV4ICV5ICVYICVZXQorYmluZF9idXR0b24zICR1aV9kaWZmIFtsaXN0IHBvcHVwX2RpZmZfbWVudSAkY3R4bSAkY3R4bW1nICRjdHhtc20gJXggJXkgJVggJVldCiAKICMgLS0gU3RhdHVzIEJhcgogIwpAQCAtMzI0MCwyMCArMzQ2MywzNyBAQAogY2F0Y2ggewogc2V0IGdtICRyZXBvX2NvbmZpZyhndWkuZ2VvbWV0cnkpCiB3bSBnZW9tZXRyeSAuIFtsaW5kZXggJGdtIDBdCi0udnBhbmUgc2FzaCBwbGFjZSAwIFwKLQlbbGluZGV4ICRnbSAxXSBcCi0JW2xpbmRleCBbLnZwYW5lIHNhc2ggY29vcmQgMF0gMV0KLS52cGFuZS5maWxlcyBzYXNoIHBsYWNlIDAgXAotCVtsaW5kZXggWy52cGFuZS5maWxlcyBzYXNoIGNvb3JkIDBdIDBdIFwKLQlbbGluZGV4ICRnbSAyXQoraWYgeyR1c2VfdHRrfSB7CisJLnZwYW5lIHNhc2hwb3MgMCBbbGluZGV4ICRnbSAxXQorCS52cGFuZS5maWxlcyBzYXNocG9zIDAgW2xpbmRleCAkZ20gMl0KK30gZWxzZSB7CisJLnZwYW5lIHNhc2ggcGxhY2UgMCBcCisJCVtsaW5kZXggJGdtIDFdIFwKKwkJW2xpbmRleCBbLnZwYW5lIHNhc2ggY29vcmQgMF0gMV0KKwkudnBhbmUuZmlsZXMgc2FzaCBwbGFjZSAwIFwKKwkJW2xpbmRleCBbLnZwYW5lLmZpbGVzIHNhc2ggY29vcmQgMF0gMF0gXAorCQlbbGluZGV4ICRnbSAyXQorfQogdW5zZXQgZ20KIH0KIAorIyAtLSBMb2FkIHdpbmRvdyBzdGF0ZQorIworY2F0Y2ggeworc2V0IGd3cyAkcmVwb19jb25maWcoZ3VpLndtc3RhdGUpCit3bSBzdGF0ZSAuICRnd3MKK3Vuc2V0IGd3cworfQorCiAjIC0tIEtleSBCaW5kaW5ncwogIwogYmluZCAkdWlfY29tbSA8JE0xQi1LZXktUmV0dXJuPiB7ZG9fY29tbWl0O2JyZWFrfQogYmluZCAkdWlfY29tbSA8JE0xQi1LZXktdD4ge2RvX2FkZF9zZWxlY3Rpb247YnJlYWt9CiBiaW5kICR1aV9jb21tIDwkTTFCLUtleS1UPiB7ZG9fYWRkX3NlbGVjdGlvbjticmVha30KK2JpbmQgJHVpX2NvbW0gPCRNMUItS2V5LXU+IHtkb191bnN0YWdlX3NlbGVjdGlvbjticmVha30KK2JpbmQgJHVpX2NvbW0gPCRNMUItS2V5LVU+IHtkb191bnN0YWdlX3NlbGVjdGlvbjticmVha30KK2JpbmQgJHVpX2NvbW0gPCRNMUItS2V5LWo+IHtkb19yZXZlcnRfc2VsZWN0aW9uO2JyZWFrfQorYmluZCAkdWlfY29tbSA8JE0xQi1LZXktSj4ge2RvX3JldmVydF9zZWxlY3Rpb247YnJlYWt9CiBiaW5kICR1aV9jb21tIDwkTTFCLUtleS1pPiB7ZG9fYWRkX2FsbDticmVha30KIGJpbmQgJHVpX2NvbW0gPCRNMUItS2V5LUk+IHtkb19hZGRfYWxsO2JyZWFrfQogYmluZCAkdWlfY29tbSA8JE0xQi1LZXkteD4ge3RrX3RleHRDdXQgJVc7YnJlYWt9CkBAIC0zMzEwLDYgKzM1NTAsOCBAQAogYmluZCAuICAgPCRNMUItS2V5LVM+IGRvX3NpZ25vZmYKIGJpbmQgLiAgIDwkTTFCLUtleS10PiBkb19hZGRfc2VsZWN0aW9uCiBiaW5kIC4gICA8JE0xQi1LZXktVD4gZG9fYWRkX3NlbGVjdGlvbgorYmluZCAuICAgPCRNMUItS2V5LWo+IGRvX3JldmVydF9zZWxlY3Rpb24KK2JpbmQgLiAgIDwkTTFCLUtleS1KPiBkb19yZXZlcnRfc2VsZWN0aW9uCiBiaW5kIC4gICA8JE0xQi1LZXktaT4gZG9fYWRkX2FsbAogYmluZCAuICAgPCRNMUItS2V5LUk+IGRvX2FkZF9hbGwKIGJpbmQgLiAgIDwkTTFCLUtleS1taW51cz4ge3Nob3dfbGVzc19jb250ZXh0O2JyZWFrfQpAQCAtMzMyOCw3ICszNTcwLDcgQEAKIHNldCBmaWxlX2xpc3RzKCR1aV9pbmRleCkgW2xpc3RdCiBzZXQgZmlsZV9saXN0cygkdWlfd29ya2RpcikgW2xpc3RdCiAKLXdtIHRpdGxlIC4gIlthcHBuYW1lXSAoW3JlcG9uYW1lXSkgW2ZpbGUgbm9ybWFsaXplIFtmaWxlIGRpcm5hbWUgW2dpdGRpcl1dXSIKK3dtIHRpdGxlIC4gIlthcHBuYW1lXSAoW3JlcG9uYW1lXSkgW2ZpbGUgbm9ybWFsaXplICRfZ2l0d29ya3RyZWVdIgogZm9jdXMgLWZvcmNlICR1aV9jb21tCiAKICMgLS0gV2FybiB0aGUgdXNlciBhYm91dCBlbnZpcm9ubWVudGFsIHByb2JsZW1zLiAgQ3lnd2luJ3MgVGNsCkBAIC0zNTAxLDMgKzM3NDMsOSBAQAogaWYgeyRwaWNrZWQgJiYgW2lzX2NvbmZpZ190cnVlIGd1aS5hdXRvZXhwbG9yZV19IHsKIAlkb19leHBsb3JlCiB9CisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBtb2RlOiB0Y2wKKyMgaW5kZW50LXRhYnMtbW9kZTogdAorIyB0YWItd2lkdGg6IDQKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvYWJvdXQudGNsIGIvZ2l0LWd1aS9saWIvYWJvdXQudGNsCmluZGV4IDI0MWFiODkuLmNmYTUwZmMgMTAwNjQ0Ci0tLSBhL2dpdC1ndWkvbGliL2Fib3V0LnRjbAorKysgYi9naXQtZ3VpL2xpYi9hYm91dC50Y2wKQEAgLTQsMzEgKzQsMjYgQEAKIHByb2MgZG9fYWJvdXQge30gewogCWdsb2JhbCBhcHB2ZXJzIGNvcHlyaWdodCBvZ3VpbGliCiAJZ2xvYmFsIHRjbF9wYXRjaExldmVsIHRrX3BhdGNoTGV2ZWwKLQlnbG9iYWwgdWlfY29tbV9zcGVsbAorCWdsb2JhbCB1aV9jb21tX3NwZWxsIE5TIHVzZV90dGsKIAogCXNldCB3IC5hYm91dF9kaWFsb2cKLQl0b3BsZXZlbCAkdworCURpYWxvZyAkdwogCXdtIGdlb21ldHJ5ICR3ICIrW3dpbmZvIHJvb3R4IC5dK1t3aW5mbyByb290eSAuXSIKIAogCXBhY2sgW2dpdF9sb2dvICR3LmdpdF9sb2dvXSAtc2lkZSBsZWZ0IC1maWxsIHkgLXBhZHggMTAgLXBhZHkgMTAKLQlsYWJlbCAkdy5oZWFkZXIgLXRleHQgW21jICJBYm91dCAlcyIgW2FwcG5hbWVdXSBcCi0JCS1mb250IGZvbnRfdWlib2xkCisJJHtOU306OmxhYmVsICR3LmhlYWRlciAtdGV4dCBbbWMgIkFib3V0ICVzIiBbYXBwbmFtZV1dIFwKKwkJLWZvbnQgZm9udF91aWJvbGQgLWFuY2hvciBjZW50ZXIKIAlwYWNrICR3LmhlYWRlciAtc2lkZSB0b3AgLWZpbGwgeAogCi0JZnJhbWUgJHcuYnV0dG9ucwotCWJ1dHRvbiAkdy5idXR0b25zLmNsb3NlIC10ZXh0IHtDbG9zZX0gXAorCSR7TlN9OjpmcmFtZSAkdy5idXR0b25zCisJJHtOU306OmJ1dHRvbiAkdy5idXR0b25zLmNsb3NlIC10ZXh0IHtDbG9zZX0gXAogCQktZGVmYXVsdCBhY3RpdmUgXAogCQktY29tbWFuZCBbbGlzdCBkZXN0cm95ICR3XQogCXBhY2sgJHcuYnV0dG9ucy5jbG9zZSAtc2lkZSByaWdodAogCXBhY2sgJHcuYnV0dG9ucyAtc2lkZSBib3R0b20gLWZpbGwgeCAtcGFkeSAxMCAtcGFkeCAxMAogCi0JbGFiZWwgJHcuZGVzYyBcCi0JCS10ZXh0ICJbbWMgImdpdC1ndWkgLSBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBmb3IgR2l0LiJdXG4kY29weXJpZ2h0IiBcCi0JCS1wYWR4IDUgLXBhZHkgNSBcCi0JCS1qdXN0aWZ5IGxlZnQgXAotCQktYW5jaG9yIHcgXAotCQktYm9yZGVyd2lkdGggMSBcCi0JCS1yZWxpZWYgc29saWQKKwlwYWRkZWRsYWJlbCAkdy5kZXNjIFwKKwkJLXRleHQgIlttYyAiZ2l0LWd1aSAtIGEgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIGZvciBHaXQuIl1cbiRjb3B5cmlnaHQiCiAJcGFjayAkdy5kZXNjIC1zaWRlIHRvcCAtZmlsbCB4IC1wYWR4IDUgLXBhZHkgNQogCiAJc2V0IHYge30KQEAgLTUyLDIyICs0NywxMCBAQAogCWFwcGVuZCBkICJnaXQgZXhlYyBkaXI6IFtnaXRleGVjXVxuIgogCWFwcGVuZCBkICJnaXQtZ3VpIGxpYjogJG9ndWlsaWIiCiAKLQlsYWJlbCAkdy52ZXJzIFwKLQkJLXRleHQgJHYgXAotCQktcGFkeCA1IC1wYWR5IDUgXAotCQktanVzdGlmeSBsZWZ0IFwKLQkJLWFuY2hvciB3IFwKLQkJLWJvcmRlcndpZHRoIDEgXAotCQktcmVsaWVmIHNvbGlkCisJcGFkZGVkbGFiZWwgJHcudmVycyAtdGV4dCAkdgogCXBhY2sgJHcudmVycyAtc2lkZSB0b3AgLWZpbGwgeCAtcGFkeCA1IC1wYWR5IDUKIAotCWxhYmVsICR3LmRpcnMgXAotCQktdGV4dCAkZCBcCi0JCS1wYWR4IDUgLXBhZHkgNSBcCi0JCS1qdXN0aWZ5IGxlZnQgXAotCQktYW5jaG9yIHcgXAotCQktYm9yZGVyd2lkdGggMSBcCi0JCS1yZWxpZWYgc29saWQKKwlwYWRkZWRsYWJlbCAkdy5kaXJzIC10ZXh0ICRkCiAJcGFjayAkdy5kaXJzIC1zaWRlIHRvcCAtZmlsbCB4IC1wYWR4IDUgLXBhZHkgNQogCiAJbWVudSAkdy5jdHhtIC10ZWFyb2ZmIDAKZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL2JsYW1lLnRjbCBiL2dpdC1ndWkvbGliL2JsYW1lLnRjbAppbmRleCAxZjNiMDhmLi43ODZiNTBiIDEwMDY0NAotLS0gYS9naXQtZ3VpL2xpYi9ibGFtZS50Y2wKKysrIGIvZ2l0LWd1aS9saWIvYmxhbWUudGNsCkBAIC02MSw3ICs2MSw3IEBACiBmaWVsZCB0b29sdGlwX2NvbW1pdCAgICB7fSA7ICMgQ29tbWl0KHMpIGluIHRvb2x0aXAKIAogY29uc3RydWN0b3IgbmV3IHtpX2NvbW1pdCBpX3BhdGggaV9qdW1wfSB7Ci0JZ2xvYmFsIGN1cnNvcl9wdHIgTTFCIE0xVCBoYXZlX3RrODUKKwlnbG9iYWwgY3Vyc29yX3B0ciBNMUIgTTFUIGhhdmVfdGs4NSB1c2VfdHRrIE5TCiAJdmFyaWFibGUgYWN0aXZlX2NvbG9yCiAJdmFyaWFibGUgZ3JvdXBfY29sb3JzCiAKQEAgLTczLDE1ICs3MywxNSBAQAogCiAJc2V0IGZvbnRfdyBbZm9udCBtZWFzdXJlIGZvbnRfZGlmZiAiMCJdCiAKLQlmcmFtZSAkdy5oZWFkZXIgLWJhY2tncm91bmQgZ29sZAotCWxhYmVsICR3LmhlYWRlci5jb21taXRfbCBcCisJZ29sZF9mcmFtZSAkdy5oZWFkZXIKKwl0bGFiZWwgJHcuaGVhZGVyLmNvbW1pdF9sIFwKIAkJLXRleHQgW21jICJDb21taXQ6Il0gXAogCQktYmFja2dyb3VuZCBnb2xkIFwKIAkJLWZvcmVncm91bmQgYmxhY2sgXAogCQktYW5jaG9yIHcgXAogCQktanVzdGlmeSBsZWZ0CiAJc2V0IHdfYmFjayAkdy5oZWFkZXIuY29tbWl0X2IKLQlsYWJlbCAkd19iYWNrIFwKKwl0bGFiZWwgJHdfYmFjayBcCiAJCS1pbWFnZSA6OmJsYW1lOjppbWdfYmFja19hcnJvdyBcCiAJCS1ib3JkZXJ3aWR0aCAwIFwKIAkJLXJlbGllZiBmbGF0IFwKQEAgLTk0LDIwICs5NCwyMCBAQAogCQkJW2NiIF9oaXN0b3J5X21lbnVdCiAJCX0KIAkJIgotCWxhYmVsICR3LmhlYWRlci5jb21taXQgXAorCXRsYWJlbCAkdy5oZWFkZXIuY29tbWl0IFwKIAkJLXRleHR2YXJpYWJsZSBAY29tbWl0IFwKIAkJLWJhY2tncm91bmQgZ29sZCBcCiAJCS1mb3JlZ3JvdW5kIGJsYWNrIFwKIAkJLWFuY2hvciB3IFwKIAkJLWp1c3RpZnkgbGVmdAotCWxhYmVsICR3LmhlYWRlci5wYXRoX2wgXAorCXRsYWJlbCAkdy5oZWFkZXIucGF0aF9sIFwKIAkJLXRleHQgW21jICJGaWxlOiJdIFwKIAkJLWJhY2tncm91bmQgZ29sZCBcCiAJCS1mb3JlZ3JvdW5kIGJsYWNrIFwKIAkJLWFuY2hvciB3IFwKIAkJLWp1c3RpZnkgbGVmdAogCXNldCB3X3BhdGggJHcuaGVhZGVyLnBhdGgKLQlsYWJlbCAkd19wYXRoIFwKKwl0bGFiZWwgJHdfcGF0aCBcCiAJCS1iYWNrZ3JvdW5kIGdvbGQgXAogCQktZm9yZWdyb3VuZCBibGFjayBcCiAJCS1hbmNob3IgdyBcCkBAIC0yMDksMTAgKzIwOSwxMCBAQAogCiAJc2V0IHdfY29sdW1ucyBbbGlzdCAkd19hbW92ICR3X2FzaW0gJHdfbGluZSAkd19maWxlXQogCi0Jc2Nyb2xsYmFyICR3LmZpbGVfcGFuZS5vdXQuc2J4IFwKKwkke05TfTo6c2Nyb2xsYmFyICR3LmZpbGVfcGFuZS5vdXQuc2J4IFwKIAkJLW9yaWVudCBoIFwKIAkJLWNvbW1hbmQgW2xpc3QgJHdfZmlsZSB4dmlld10KLQlzY3JvbGxiYXIgJHcuZmlsZV9wYW5lLm91dC5zYnkgXAorCSR7TlN9OjpzY3JvbGxiYXIgJHcuZmlsZV9wYW5lLm91dC5zYnkgXAogCQktb3JpZW50IHYgXAogCQktY29tbWFuZCBbbGlzdCBzY3JvbGxiYXIybWFueSAkd19jb2x1bW5zIHl2aWV3XQogCWV2YWwgZ3JpZCAkd19jb2x1bW5zICR3LmZpbGVfcGFuZS5vdXQuc2J5IC1zdGlja3kgbnNldwpAQCAtMjU0LDEwICsyNTQsMTAgQEAKIAkJLWJhY2tncm91bmQgJGFjdGl2ZV9jb2xvciBcCiAJCS1mb250IGZvbnRfdWkKIAkkd19jdmlld2VyIHRhZyByYWlzZSBzZWwKLQlzY3JvbGxiYXIgJHcuZmlsZV9wYW5lLmNtLnNieCBcCisJJHtOU306OnNjcm9sbGJhciAkdy5maWxlX3BhbmUuY20uc2J4IFwKIAkJLW9yaWVudCBoIFwKIAkJLWNvbW1hbmQgW2xpc3QgJHdfY3ZpZXdlciB4dmlld10KLQlzY3JvbGxiYXIgJHcuZmlsZV9wYW5lLmNtLnNieSBcCisJJHtOU306OnNjcm9sbGJhciAkdy5maWxlX3BhbmUuY20uc2J5IFwKIAkJLW9yaWVudCB2IFwKIAkJLWNvbW1hbmQgW2xpc3QgJHdfY3ZpZXdlciB5dmlld10KIAlwYWNrICR3LmZpbGVfcGFuZS5jbS5zYnkgLXNpZGUgcmlnaHQgLWZpbGwgeQpAQCAtMTI0NSw2ICsxMjQ1LDE4IEBACiAKIAkkdG9vbHRpcF90IGNvbmYgLXN0YXRlIGRpc2FibGVkCiAJX3Bvc2l0aW9uX3Rvb2x0aXAgJHRoaXMKKworCSMgT24gTWFjT1MgcmFpc2luZyBhIHdpbmRvdyBjYXVzZXMgaXQgdG8gYWNxdWlyZSBmb2N1cy4KKwkjIFRrIDguNSBvbiBNYWNPUyBzZWVtcyB0byBwcm9wZXJseSBzdXBwb3J0IHdtIHRyYW5zaWVudCwKKwkjIHNvIHdlIGNhbiBzYWZlbHkgY291bnRlciB0aGUgZWZmZWN0IHRoZXJlLgorCWlmIHskOjpoYXZlX3RrODUgJiYgW2lzX01hY09TWF19IHsKKwkJdXBkYXRlCisJCWlmIHskdyBlcSB7fX0geworCQkJcmFpc2UgLgorCQl9IGVsc2UgeworCQkJcmFpc2UgJHcKKwkJfQorCX0KIH0KIAogbWV0aG9kIF9wb3NpdGlvbl90b29sdGlwIHt9IHsKQEAgLTEyNjgsNyArMTI4MCw5IEBACiAJYXBwZW5kIGcgJHBvc195CiAKIAl3bSBnZW9tZXRyeSAkdG9vbHRpcF93bSAkZwotCXJhaXNlICR0b29sdGlwX3dtCisJaWYgeyFbaXNfTWFjT1NYXX0geworCQlyYWlzZSAkdG9vbHRpcF93bQorCX0KIH0KIAogbWV0aG9kIF9oaWRlX3Rvb2x0aXAge30gewpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvYnJhbmNoX2NoZWNrb3V0LnRjbCBiL2dpdC1ndWkvbGliL2JyYW5jaF9jaGVja291dC50Y2wKaW5kZXggNjYwMzcwMy4uMmU0NTlhOCAxMDA2NDQKLS0tIGEvZ2l0LWd1aS9saWIvYnJhbmNoX2NoZWNrb3V0LnRjbAorKysgYi9naXQtZ3VpL2xpYi9icmFuY2hfY2hlY2tvdXQudGNsCkBAIC0xMCwyMSArMTAsMjQgQEAKIGZpZWxkIG9wdF9kZXRhY2ggICAgMDsgIyBmb3JjZSBhIGRldGFjaGVkIGhlYWQgY2FzZT8KIAogY29uc3RydWN0b3IgZGlhbG9nIHt9IHsKLQltYWtlX3RvcGxldmVsIHRvcCB3CisJZ2xvYmFsIHVzZV90dGsgTlMKKwltYWtlX2RpYWxvZyB0b3AgdworCXdtIHdpdGhkcmF3ICR3CiAJd20gdGl0bGUgJHRvcCBbYXBwZW5kICJbYXBwbmFtZV0gKFtyZXBvbmFtZV0pOiAiIFttYyAiQ2hlY2tvdXQgQnJhbmNoIl1dCiAJaWYgeyR0b3AgbmUgey59fSB7CiAJCXdtIGdlb21ldHJ5ICR0b3AgIitbd2luZm8gcm9vdHggLl0rW3dpbmZvIHJvb3R5IC5dIgogCX0KIAotCWxhYmVsICR3LmhlYWRlciAtdGV4dCBbbWMgIkNoZWNrb3V0IEJyYW5jaCJdIC1mb250IGZvbnRfdWlib2xkCisJJHtOU306OmxhYmVsICR3LmhlYWRlciAtdGV4dCBbbWMgIkNoZWNrb3V0IEJyYW5jaCJdIFwKKwkJLWZvbnQgZm9udF91aWJvbGQgLWFuY2hvciBjZW50ZXIKIAlwYWNrICR3LmhlYWRlciAtc2lkZSB0b3AgLWZpbGwgeAogCi0JZnJhbWUgJHcuYnV0dG9ucwotCWJ1dHRvbiAkdy5idXR0b25zLmNyZWF0ZSAtdGV4dCBbbWMgQ2hlY2tvdXRdIFwKKwkke05TfTo6ZnJhbWUgJHcuYnV0dG9ucworCSR7TlN9OjpidXR0b24gJHcuYnV0dG9ucy5jcmVhdGUgLXRleHQgW21jIENoZWNrb3V0XSBcCiAJCS1kZWZhdWx0IGFjdGl2ZSBcCiAJCS1jb21tYW5kIFtjYiBfY2hlY2tvdXRdCiAJcGFjayAkdy5idXR0b25zLmNyZWF0ZSAtc2lkZSByaWdodAotCWJ1dHRvbiAkdy5idXR0b25zLmNhbmNlbCAtdGV4dCBbbWMgQ2FuY2VsXSBcCisJJHtOU306OmJ1dHRvbiAkdy5idXR0b25zLmNhbmNlbCAtdGV4dCBbbWMgQ2FuY2VsXSBcCiAJCS1jb21tYW5kIFtsaXN0IGRlc3Ryb3kgJHddCiAJcGFjayAkdy5idXR0b25zLmNhbmNlbCAtc2lkZSByaWdodCAtcGFkeCA1CiAJcGFjayAkdy5idXR0b25zIC1zaWRlIGJvdHRvbSAtZmlsbCB4IC1wYWR5IDEwIC1wYWR4IDEwCkBAIC0zMywxNCArMzYsMTQgQEAKIAkkd19yZXYgYmluZF9saXN0Ym94IDxEb3VibGUtQnV0dG9uLTE+IFtjYiBfY2hlY2tvdXRdCiAJcGFjayAkdy5yZXYgLWFuY2hvciBudyAtZmlsbCBib3RoIC1leHBhbmQgMSAtcGFkeSA1IC1wYWR4IDUKIAotCWxhYmVsZnJhbWUgJHcub3B0aW9ucyAtdGV4dCBbbWMgT3B0aW9uc10KKwkke05TfTo6bGFiZWxmcmFtZSAkdy5vcHRpb25zIC10ZXh0IFttYyBPcHRpb25zXQogCi0JY2hlY2tidXR0b24gJHcub3B0aW9ucy5mZXRjaCBcCisJJHtOU306OmNoZWNrYnV0dG9uICR3Lm9wdGlvbnMuZmV0Y2ggXAogCQktdGV4dCBbbWMgIkZldGNoIFRyYWNraW5nIEJyYW5jaCJdIFwKIAkJLXZhcmlhYmxlIEBvcHRfZmV0Y2gKIAlwYWNrICR3Lm9wdGlvbnMuZmV0Y2ggLWFuY2hvciBudwogCi0JY2hlY2tidXR0b24gJHcub3B0aW9ucy5kZXRhY2ggXAorCSR7TlN9OjpjaGVja2J1dHRvbiAkdy5vcHRpb25zLmRldGFjaCBcCiAJCS10ZXh0IFttYyAiRGV0YWNoIEZyb20gTG9jYWwgQnJhbmNoIl0gXAogCQktdmFyaWFibGUgQG9wdF9kZXRhY2gKIAlwYWNrICR3Lm9wdGlvbnMuZGV0YWNoIC1hbmNob3IgbncKQEAgLTUwLDYgKzUzLDcgQEAKIAliaW5kICR3IDxWaXNpYmlsaXR5PiBbY2IgX3Zpc2libGVdCiAJYmluZCAkdyA8S2V5LUVzY2FwZT4gW2xpc3QgZGVzdHJveSAkd10KIAliaW5kICR3IDxLZXktUmV0dXJuPiBbY2IgX2NoZWNrb3V0XVw7YnJlYWsKKwl3bSBkZWljb25pZnkgJHcKIAl0a3dhaXQgd2luZG93ICR3CiB9CiAKZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL2JyYW5jaF9jcmVhdGUudGNsIGIvZ2l0LWd1aS9saWIvYnJhbmNoX2NyZWF0ZS50Y2wKaW5kZXggMzgxNzc3MS4uNGJiOTA3NyAxMDA2NDQKLS0tIGEvZ2l0LWd1aS9saWIvYnJhbmNoX2NyZWF0ZS50Y2wKKysrIGIvZ2l0LWd1aS9saWIvYnJhbmNoX2NyZWF0ZS50Y2wKQEAgLTE2LDQ4ICsxNiw0OCBAQAogZmllbGQgcmVzZXRfb2sgICAgICAwOyAjIGRpZCB0aGUgdXNlciBhZ3JlZSB0byByZXNldD8KIAogY29uc3RydWN0b3IgZGlhbG9nIHt9IHsKLQlnbG9iYWwgcmVwb19jb25maWcKKwlnbG9iYWwgcmVwb19jb25maWcgdXNlX3R0ayBOUwogCi0JbWFrZV90b3BsZXZlbCB0b3AgdworCW1ha2VfZGlhbG9nIHRvcCB3CisJd20gd2l0aGRyYXcgJHcKIAl3bSB0aXRsZSAkdG9wIFthcHBlbmQgIlthcHBuYW1lXSAoW3JlcG9uYW1lXSk6ICIgW21jICJDcmVhdGUgQnJhbmNoIl1dCiAJaWYgeyR0b3AgbmUgey59fSB7CiAJCXdtIGdlb21ldHJ5ICR0b3AgIitbd2luZm8gcm9vdHggLl0rW3dpbmZvIHJvb3R5IC5dIgogCX0KIAotCWxhYmVsICR3LmhlYWRlciAtdGV4dCBbbWMgIkNyZWF0ZSBOZXcgQnJhbmNoIl0gLWZvbnQgZm9udF91aWJvbGQKKwkke05TfTo6bGFiZWwgJHcuaGVhZGVyIC10ZXh0IFttYyAiQ3JlYXRlIE5ldyBCcmFuY2giXSBcCisJCS1mb250IGZvbnRfdWlib2xkIC1hbmNob3IgY2VudGVyCiAJcGFjayAkdy5oZWFkZXIgLXNpZGUgdG9wIC1maWxsIHgKIAotCWZyYW1lICR3LmJ1dHRvbnMKLQlidXR0b24gJHcuYnV0dG9ucy5jcmVhdGUgLXRleHQgW21jIENyZWF0ZV0gXAorCSR7TlN9OjpmcmFtZSAkdy5idXR0b25zCisJJHtOU306OmJ1dHRvbiAkdy5idXR0b25zLmNyZWF0ZSAtdGV4dCBbbWMgQ3JlYXRlXSBcCiAJCS1kZWZhdWx0IGFjdGl2ZSBcCiAJCS1jb21tYW5kIFtjYiBfY3JlYXRlXQogCXBhY2sgJHcuYnV0dG9ucy5jcmVhdGUgLXNpZGUgcmlnaHQKLQlidXR0b24gJHcuYnV0dG9ucy5jYW5jZWwgLXRleHQgW21jIENhbmNlbF0gXAorCSR7TlN9OjpidXR0b24gJHcuYnV0dG9ucy5jYW5jZWwgLXRleHQgW21jIENhbmNlbF0gXAogCQktY29tbWFuZCBbbGlzdCBkZXN0cm95ICR3XQogCXBhY2sgJHcuYnV0dG9ucy5jYW5jZWwgLXNpZGUgcmlnaHQgLXBhZHggNQogCXBhY2sgJHcuYnV0dG9ucyAtc2lkZSBib3R0b20gLWZpbGwgeCAtcGFkeSAxMCAtcGFkeCAxMAogCi0JbGFiZWxmcmFtZSAkdy5kZXNjIC10ZXh0IFttYyAiQnJhbmNoIE5hbWUiXQotCXJhZGlvYnV0dG9uICR3LmRlc2MubmFtZV9yIFwKLQkJLWFuY2hvciB3IFwKKwkke05TfTo6bGFiZWxmcmFtZSAkdy5kZXNjIC10ZXh0IFttYyAiQnJhbmNoIE5hbWUiXQorCSR7TlN9OjpyYWRpb2J1dHRvbiAkdy5kZXNjLm5hbWVfciBcCiAJCS10ZXh0IFttYyAiTmFtZToiXSBcCiAJCS12YWx1ZSB1c2VyIFwKIAkJLXZhcmlhYmxlIEBuYW1lX3R5cGUKKwlpZiB7ISR1c2VfdHRrfSB7JHcuZGVzYy5uYW1lX3IgY29uZmlndXJlIC1hbmNob3Igd30KIAlzZXQgd19uYW1lICR3LmRlc2MubmFtZV90Ci0JZW50cnkgJHdfbmFtZSBcCi0JCS1ib3JkZXJ3aWR0aCAxIFwKLQkJLXJlbGllZiBzdW5rZW4gXAorCSR7TlN9OjplbnRyeSAkd19uYW1lIFwKIAkJLXdpZHRoIDQwIFwKIAkJLXRleHR2YXJpYWJsZSBAbmFtZSBcCiAJCS12YWxpZGF0ZSBrZXkgXAogCQktdmFsaWRhdGVjb21tYW5kIFtjYiBfdmFsaWRhdGUgJWQgJVNdCiAJZ3JpZCAkdy5kZXNjLm5hbWVfciAkd19uYW1lIC1zdGlja3kgd2UgLXBhZHggezAgNX0KIAotCXJhZGlvYnV0dG9uICR3LmRlc2MubWF0Y2hfciBcCi0JCS1hbmNob3IgdyBcCisJJHtOU306OnJhZGlvYnV0dG9uICR3LmRlc2MubWF0Y2hfciBcCiAJCS10ZXh0IFttYyAiTWF0Y2ggVHJhY2tpbmcgQnJhbmNoIE5hbWUiXSBcCiAJCS12YWx1ZSBtYXRjaCBcCiAJCS12YXJpYWJsZSBAbmFtZV90eXBlCisJaWYgeyEkdXNlX3R0a30geyR3LmRlc2MubWF0Y2hfciBjb25maWd1cmUgLWFuY2hvciB3fQogCWdyaWQgJHcuZGVzYy5tYXRjaF9yIC1zdGlja3kgd2UgLXBhZHggezAgNX0gLWNvbHVtbnNwYW4gMgogCiAJZ3JpZCBjb2x1bW5jb25maWd1cmUgJHcuZGVzYyAxIC13ZWlnaHQgMQpAQCAtNjYsMzQgKzY2LDM0IEBACiAJc2V0IHdfcmV2IFs6OmNob29zZV9yZXY6Om5ldyAkdy5yZXYgW21jICJTdGFydGluZyBSZXZpc2lvbiJdXQogCXBhY2sgJHcucmV2IC1hbmNob3IgbncgLWZpbGwgYm90aCAtZXhwYW5kIDEgLXBhZHkgNSAtcGFkeCA1CiAKLQlsYWJlbGZyYW1lICR3Lm9wdGlvbnMgLXRleHQgW21jIE9wdGlvbnNdCisJJHtOU306OmxhYmVsZnJhbWUgJHcub3B0aW9ucyAtdGV4dCBbbWMgT3B0aW9uc10KIAotCWZyYW1lICR3Lm9wdGlvbnMubWVyZ2UKLQlsYWJlbCAkdy5vcHRpb25zLm1lcmdlLmwgLXRleHQgW21jICJVcGRhdGUgRXhpc3RpbmcgQnJhbmNoOiJdCisJJHtOU306OmZyYW1lICR3Lm9wdGlvbnMubWVyZ2UKKwkke05TfTo6bGFiZWwgJHcub3B0aW9ucy5tZXJnZS5sIC10ZXh0IFttYyAiVXBkYXRlIEV4aXN0aW5nIEJyYW5jaDoiXQogCXBhY2sgJHcub3B0aW9ucy5tZXJnZS5sIC1zaWRlIGxlZnQKLQlyYWRpb2J1dHRvbiAkdy5vcHRpb25zLm1lcmdlLm5vIFwKKwkke05TfTo6cmFkaW9idXR0b24gJHcub3B0aW9ucy5tZXJnZS5ubyBcCiAJCS10ZXh0IFttYyBOb10gXAogCQktdmFsdWUgbm9uZSBcCiAJCS12YXJpYWJsZSBAb3B0X21lcmdlCiAJcGFjayAkdy5vcHRpb25zLm1lcmdlLm5vIC1zaWRlIGxlZnQKLQlyYWRpb2J1dHRvbiAkdy5vcHRpb25zLm1lcmdlLmZmIFwKKwkke05TfTo6cmFkaW9idXR0b24gJHcub3B0aW9ucy5tZXJnZS5mZiBcCiAJCS10ZXh0IFttYyAiRmFzdCBGb3J3YXJkIE9ubHkiXSBcCiAJCS12YWx1ZSBmZiBcCiAJCS12YXJpYWJsZSBAb3B0X21lcmdlCiAJcGFjayAkdy5vcHRpb25zLm1lcmdlLmZmIC1zaWRlIGxlZnQKLQlyYWRpb2J1dHRvbiAkdy5vcHRpb25zLm1lcmdlLnJlc2V0IFwKKwkke05TfTo6cmFkaW9idXR0b24gJHcub3B0aW9ucy5tZXJnZS5yZXNldCBcCiAJCS10ZXh0IFttYyBSZXNldF0gXAogCQktdmFsdWUgcmVzZXQgXAogCQktdmFyaWFibGUgQG9wdF9tZXJnZQogCXBhY2sgJHcub3B0aW9ucy5tZXJnZS5yZXNldCAtc2lkZSBsZWZ0CiAJcGFjayAkdy5vcHRpb25zLm1lcmdlIC1hbmNob3IgbncKIAotCWNoZWNrYnV0dG9uICR3Lm9wdGlvbnMuZmV0Y2ggXAorCSR7TlN9OjpjaGVja2J1dHRvbiAkdy5vcHRpb25zLmZldGNoIFwKIAkJLXRleHQgW21jICJGZXRjaCBUcmFja2luZyBCcmFuY2giXSBcCiAJCS12YXJpYWJsZSBAb3B0X2ZldGNoCiAJcGFjayAkdy5vcHRpb25zLmZldGNoIC1hbmNob3IgbncKIAotCWNoZWNrYnV0dG9uICR3Lm9wdGlvbnMuY2hlY2tvdXQgXAorCSR7TlN9OjpjaGVja2J1dHRvbiAkdy5vcHRpb25zLmNoZWNrb3V0IFwKIAkJLXRleHQgW21jICJDaGVja291dCBBZnRlciBDcmVhdGlvbiJdIFwKIAkJLXZhcmlhYmxlIEBvcHRfY2hlY2tvdXQKIAlwYWNrICR3Lm9wdGlvbnMuY2hlY2tvdXQgLWFuY2hvciBudwpAQCAtMTA5LDYgKzEwOSw3IEBACiAJYmluZCAkdyA8VmlzaWJpbGl0eT4gW2NiIF92aXNpYmxlXQogCWJpbmQgJHcgPEtleS1Fc2NhcGU+IFtsaXN0IGRlc3Ryb3kgJHddCiAJYmluZCAkdyA8S2V5LVJldHVybj4gW2NiIF9jcmVhdGVdXDticmVhaworCXdtIGRlaWNvbmlmeSAkdwogCXRrd2FpdCB3aW5kb3cgJHcKIH0KIApkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvYnJhbmNoX2RlbGV0ZS50Y2wgYi9naXQtZ3VpL2xpYi9icmFuY2hfZGVsZXRlLnRjbAppbmRleCAyMGQ1ZTQyLi44Njc5MzhlIDEwMDY0NAotLS0gYS9naXQtZ3VpL2xpYi9icmFuY2hfZGVsZXRlLnRjbAorKysgYi9naXQtZ3VpL2xpYi9icmFuY2hfZGVsZXRlLnRjbApAQCAtOSw0MSArOSw0MCBAQAogZmllbGQgd19kZWxldGUgICAgICAgIDsgIyBkZWxldGUgYnV0dG9uCiAKIGNvbnN0cnVjdG9yIGRpYWxvZyB7fSB7Ci0JZ2xvYmFsIGN1cnJlbnRfYnJhbmNoCisJZ2xvYmFsIGN1cnJlbnRfYnJhbmNoIHVzZV90dGsgTlMKIAotCW1ha2VfdG9wbGV2ZWwgdG9wIHcKKwltYWtlX2RpYWxvZyB0b3AgdworCXdtIHdpdGhkcmF3ICR3CiAJd20gdGl0bGUgJHRvcCBbYXBwZW5kICJbYXBwbmFtZV0gKFtyZXBvbmFtZV0pOiAiIFttYyAiRGVsZXRlIEJyYW5jaCJdXQogCWlmIHskdG9wIG5lIHsufX0gewogCQl3bSBnZW9tZXRyeSAkdG9wICIrW3dpbmZvIHJvb3R4IC5dK1t3aW5mbyByb290eSAuXSIKIAl9CiAKLQlsYWJlbCAkdy5oZWFkZXIgLXRleHQgW21jICJEZWxldGUgTG9jYWwgQnJhbmNoIl0gLWZvbnQgZm9udF91aWJvbGQKKwkke05TfTo6bGFiZWwgJHcuaGVhZGVyIC10ZXh0IFttYyAiRGVsZXRlIExvY2FsIEJyYW5jaCJdIFwKKwkJLWZvbnQgZm9udF91aWJvbGQgLWFuY2hvciBjZW50ZXIKIAlwYWNrICR3LmhlYWRlciAtc2lkZSB0b3AgLWZpbGwgeAogCi0JZnJhbWUgJHcuYnV0dG9ucworCSR7TlN9OjpmcmFtZSAkdy5idXR0b25zCiAJc2V0IHdfZGVsZXRlICR3LmJ1dHRvbnMuZGVsZXRlCi0JYnV0dG9uICR3X2RlbGV0ZSBcCisJJHtOU306OmJ1dHRvbiAkd19kZWxldGUgXAogCQktdGV4dCBbbWMgRGVsZXRlXSBcCiAJCS1kZWZhdWx0IGFjdGl2ZSBcCiAJCS1zdGF0ZSBkaXNhYmxlZCBcCiAJCS1jb21tYW5kIFtjYiBfZGVsZXRlXQogCXBhY2sgJHdfZGVsZXRlIC1zaWRlIHJpZ2h0Ci0JYnV0dG9uICR3LmJ1dHRvbnMuY2FuY2VsIFwKKwkke05TfTo6YnV0dG9uICR3LmJ1dHRvbnMuY2FuY2VsIFwKIAkJLXRleHQgW21jIENhbmNlbF0gXAogCQktY29tbWFuZCBbbGlzdCBkZXN0cm95ICR3XQogCXBhY2sgJHcuYnV0dG9ucy5jYW5jZWwgLXNpZGUgcmlnaHQgLXBhZHggNQogCXBhY2sgJHcuYnV0dG9ucyAtc2lkZSBib3R0b20gLWZpbGwgeCAtcGFkeSAxMCAtcGFkeCAxMAogCi0JbGFiZWxmcmFtZSAkdy5saXN0IC10ZXh0IFttYyAiTG9jYWwgQnJhbmNoZXMiXQorCSR7TlN9OjpsYWJlbGZyYW1lICR3Lmxpc3QgLXRleHQgW21jICJMb2NhbCBCcmFuY2hlcyJdCiAJc2V0IHdfaGVhZHMgJHcubGlzdC5sCi0JbGlzdGJveCAkd19oZWFkcyBcCisJc2xpc3Rib3ggJHdfaGVhZHMgXAogCQktaGVpZ2h0IDEwIFwKIAkJLXdpZHRoIDcwIFwKIAkJLXNlbGVjdG1vZGUgZXh0ZW5kZWQgXAotCQktZXhwb3J0c2VsZWN0aW9uIGZhbHNlIFwKLQkJLXlzY3JvbGxjb21tYW5kIFtsaXN0ICR3Lmxpc3Quc2J5IHNldF0KLQlzY3JvbGxiYXIgJHcubGlzdC5zYnkgLWNvbW1hbmQgW2xpc3QgJHcubGlzdC5sIHl2aWV3XQotCXBhY2sgJHcubGlzdC5zYnkgLXNpZGUgcmlnaHQgLWZpbGwgeQorCQktZXhwb3J0c2VsZWN0aW9uIGZhbHNlCiAJcGFjayAkdy5saXN0LmwgLXNpZGUgbGVmdCAtZmlsbCBib3RoIC1leHBhbmQgMQogCXBhY2sgJHcubGlzdCAtZmlsbCBib3RoIC1leHBhbmQgMSAtcGFkeSA1IC1wYWR4IDUKIApAQCAtNjcsNiArNjYsNyBAQAogCSIKIAliaW5kICR3IDxLZXktRXNjYXBlPiBbbGlzdCBkZXN0cm95ICR3XQogCWJpbmQgJHcgPEtleS1SZXR1cm4+IFtjYiBfZGVsZXRlXVw7YnJlYWsKKwl3bSBkZWljb25pZnkgJHcKIAl0a3dhaXQgd2luZG93ICR3CiB9CiAKZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL2JyYW5jaF9yZW5hbWUudGNsIGIvZ2l0LWd1aS9saWIvYnJhbmNoX3JlbmFtZS50Y2wKaW5kZXggMTY2NTM4OC4uNjM5ODg3NyAxMDA2NDQKLS0tIGEvZ2l0LWd1aS9saWIvYnJhbmNoX3JlbmFtZS50Y2wKKysrIGIvZ2l0LWd1aS9saWIvYnJhbmNoX3JlbmFtZS50Y2wKQEAgLTgsOSArOCwxMCBAQAogZmllbGQgbmV3bmFtZQogCiBjb25zdHJ1Y3RvciBkaWFsb2cge30gewotCWdsb2JhbCBjdXJyZW50X2JyYW5jaAorCWdsb2JhbCBjdXJyZW50X2JyYW5jaCB1c2VfdHRrIE5TCiAKLQltYWtlX3RvcGxldmVsIHRvcCB3CisJbWFrZV9kaWFsb2cgdG9wIHcKKwl3bSB3aXRoZHJhdyAkdwogCXdtIHRpdGxlICR0b3AgW2FwcGVuZCAiW2FwcG5hbWVdIChbcmVwb25hbWVdKTogIiBbbWMgIlJlbmFtZSBCcmFuY2giXV0KIAlpZiB7JHRvcCBuZSB7Ln19IHsKIAkJd20gZ2VvbWV0cnkgJHRvcCAiK1t3aW5mbyByb290eCAuXStbd2luZm8gcm9vdHkgLl0iCkBAIC0xOSwyNyArMjAsMzEgQEAKIAlzZXQgb2xkbmFtZSAkY3VycmVudF9icmFuY2gKIAlzZXQgbmV3bmFtZSBbZ2V0X2NvbmZpZyBndWkubmV3YnJhbmNodGVtcGxhdGVdCiAKLQlsYWJlbCAkdy5oZWFkZXIgLXRleHQgW21jICJSZW5hbWUgQnJhbmNoIl0gLWZvbnQgZm9udF91aWJvbGQKKwkke05TfTo6bGFiZWwgJHcuaGVhZGVyIC10ZXh0IFttYyAiUmVuYW1lIEJyYW5jaCJdXAorCQktZm9udCBmb250X3VpYm9sZCAtYW5jaG9yIGNlbnRlcgogCXBhY2sgJHcuaGVhZGVyIC1zaWRlIHRvcCAtZmlsbCB4CiAKLQlmcmFtZSAkdy5idXR0b25zCi0JYnV0dG9uICR3LmJ1dHRvbnMucmVuYW1lIC10ZXh0IFttYyBSZW5hbWVdIFwKKwkke05TfTo6ZnJhbWUgJHcuYnV0dG9ucworCSR7TlN9OjpidXR0b24gJHcuYnV0dG9ucy5yZW5hbWUgLXRleHQgW21jIFJlbmFtZV0gXAogCQktZGVmYXVsdCBhY3RpdmUgXAogCQktY29tbWFuZCBbY2IgX3JlbmFtZV0KIAlwYWNrICR3LmJ1dHRvbnMucmVuYW1lIC1zaWRlIHJpZ2h0Ci0JYnV0dG9uICR3LmJ1dHRvbnMuY2FuY2VsIC10ZXh0IFttYyBDYW5jZWxdIFwKKwkke05TfTo6YnV0dG9uICR3LmJ1dHRvbnMuY2FuY2VsIC10ZXh0IFttYyBDYW5jZWxdIFwKIAkJLWNvbW1hbmQgW2xpc3QgZGVzdHJveSAkd10KIAlwYWNrICR3LmJ1dHRvbnMuY2FuY2VsIC1zaWRlIHJpZ2h0IC1wYWR4IDUKIAlwYWNrICR3LmJ1dHRvbnMgLXNpZGUgYm90dG9tIC1maWxsIHggLXBhZHkgMTAgLXBhZHggMTAKIAotCWZyYW1lICR3LnJlbmFtZQotCWxhYmVsICR3LnJlbmFtZS5vbGRuYW1lX2wgLXRleHQgW21jICJCcmFuY2g6Il0KLQlldmFsIHRrX29wdGlvbk1lbnUgJHcucmVuYW1lLm9sZG5hbWVfbSBAb2xkbmFtZSBbbG9hZF9hbGxfaGVhZHNdCisJJHtOU306OmZyYW1lICR3LnJlbmFtZQorCSR7TlN9OjpsYWJlbCAkdy5yZW5hbWUub2xkbmFtZV9sIC10ZXh0IFttYyAiQnJhbmNoOiJdCisJaWYgeyR1c2VfdHRrfSB7CisJCXR0azo6Y29tYm9ib3ggJHcucmVuYW1lLm9sZG5hbWVfbSAtdGV4dHZhcmlhYmxlIEBvbGRuYW1lIFwKKwkJCS12YWx1ZXMgW2xvYWRfYWxsX2hlYWRzXSAtc3RhdGUgcmVhZG9ubHkKKwl9IGVsc2UgeworCQlldmFsIHRrX29wdGlvbk1lbnUgJHcucmVuYW1lLm9sZG5hbWVfbSBAb2xkbmFtZSBbbG9hZF9hbGxfaGVhZHNdCisJfQogCi0JbGFiZWwgJHcucmVuYW1lLm5ld25hbWVfbCAtdGV4dCBbbWMgIk5ldyBOYW1lOiJdCi0JZW50cnkgJHcucmVuYW1lLm5ld25hbWVfdCBcCi0JCS1ib3JkZXJ3aWR0aCAxIFwKLQkJLXJlbGllZiBzdW5rZW4gXAorCSR7TlN9OjpsYWJlbCAkdy5yZW5hbWUubmV3bmFtZV9sIC10ZXh0IFttYyAiTmV3IE5hbWU6Il0KKwkke05TfTo6ZW50cnkgJHcucmVuYW1lLm5ld25hbWVfdCBcCiAJCS13aWR0aCA0MCBcCiAJCS10ZXh0dmFyaWFibGUgQG5ld25hbWUgXAogCQktdmFsaWRhdGUga2V5IFwKQEAgLTYwLDYgKzY1LDcgQEAKIAkJJHcucmVuYW1lLm5ld25hbWVfdCBpY3Vyc29yIGVuZAogCQlmb2N1cyAkdy5yZW5hbWUubmV3bmFtZV90CiAJIgorCXdtIGRlaWNvbmlmeSAkdwogCXRrd2FpdCB3aW5kb3cgJHcKIH0KIApkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvYnJvd3Nlci50Y2wgYi9naXQtZ3VpL2xpYi9icm93c2VyLnRjbAppbmRleCAwNDEwY2M2Li5jMjQxNTcyIDEwMDY0NAotLS0gYS9naXQtZ3VpL2xpYi9icm93c2VyLnRjbAorKysgYi9naXQtZ3VpL2xpYi9icm93c2VyLnRjbApAQCAtMjEsMjMgKzIxLDIzIEBACiBmaWVsZCBsc19idWYgICAgIHt9OyAjIEJ1ZmZlcmVkIHJlY29yZCBvdXRwdXQgZnJvbSBscy10cmVlCiAKIGNvbnN0cnVjdG9yIG5ldyB7Y29tbWl0IHtwYXRoIHt9fX0gewotCWdsb2JhbCBjdXJzb3JfcHRyIE0xQgotCW1ha2VfdG9wbGV2ZWwgdG9wIHcKKwlnbG9iYWwgY3Vyc29yX3B0ciBNMUIgdXNlX3R0ayBOUworCW1ha2VfZGlhbG9nIHRvcCB3CisJd20gd2l0aGRyYXcgJHRvcAogCXdtIHRpdGxlICR0b3AgW2FwcGVuZCAiW2FwcG5hbWVdIChbcmVwb25hbWVdKTogIiBbbWMgIkZpbGUgQnJvd3NlciJdXQogCiAJc2V0IGJyb3dzZXJfY29tbWl0ICRjb21taXQKIAlzZXQgYnJvd3Nlcl9wYXRoICRicm93c2VyX2NvbW1pdDokcGF0aAogCi0JbGFiZWwgJHcucGF0aCBcCisJJHtOU306OmxhYmVsICR3LnBhdGggXAogCQktdGV4dHZhcmlhYmxlIEBicm93c2VyX3BhdGggXAogCQktYW5jaG9yIHcgXAogCQktanVzdGlmeSBsZWZ0IFwKLQkJLWJvcmRlcndpZHRoIDEgXAotCQktcmVsaWVmIHN1bmtlbiBcCiAJCS1mb250IGZvbnRfdWlib2xkCisJaWYgeyEkdXNlX3R0a30geyAkdy5wYXRoIGNvbmZpZ3VyZSAtYm9yZGVyd2lkdGggMSAtcmVsaWVmIHN1bmtlbn0KIAlwYWNrICR3LnBhdGggLWFuY2hvciB3IC1zaWRlIHRvcCAtZmlsbCB4CiAKLQlmcmFtZSAkdy5saXN0CisJJHtOU306OmZyYW1lICR3Lmxpc3QKIAlzZXQgd19saXN0ICR3Lmxpc3QubAogCXRleHQgJHdfbGlzdCAtYmFja2dyb3VuZCB3aGl0ZSAtZm9yZWdyb3VuZCBibGFjayBcCiAJCS1ib3JkZXJ3aWR0aCAwIFwKQEAgLTQ5LDE5ICs0OSwxOCBAQAogCQkteHNjcm9sbGNvbW1hbmQgW2xpc3QgJHcubGlzdC5zYnggc2V0XSBcCiAJCS15c2Nyb2xsY29tbWFuZCBbbGlzdCAkdy5saXN0LnNieSBzZXRdCiAJcm1zZWxfdGFnICR3X2xpc3QKLQlzY3JvbGxiYXIgJHcubGlzdC5zYnggLW9yaWVudCBoIC1jb21tYW5kIFtsaXN0ICR3X2xpc3QgeHZpZXddCi0Jc2Nyb2xsYmFyICR3Lmxpc3Quc2J5IC1vcmllbnQgdiAtY29tbWFuZCBbbGlzdCAkd19saXN0IHl2aWV3XQorCSR7TlN9OjpzY3JvbGxiYXIgJHcubGlzdC5zYnggLW9yaWVudCBoIC1jb21tYW5kIFtsaXN0ICR3X2xpc3QgeHZpZXddCisJJHtOU306OnNjcm9sbGJhciAkdy5saXN0LnNieSAtb3JpZW50IHYgLWNvbW1hbmQgW2xpc3QgJHdfbGlzdCB5dmlld10KIAlwYWNrICR3Lmxpc3Quc2J4IC1zaWRlIGJvdHRvbSAtZmlsbCB4CiAJcGFjayAkdy5saXN0LnNieSAtc2lkZSByaWdodCAtZmlsbCB5CiAJcGFjayAkd19saXN0IC1zaWRlIGxlZnQgLWZpbGwgYm90aCAtZXhwYW5kIDEKIAlwYWNrICR3Lmxpc3QgLXNpZGUgdG9wIC1maWxsIGJvdGggLWV4cGFuZCAxCiAKLQlsYWJlbCAkdy5zdGF0dXMgXAorCSR7TlN9OjpsYWJlbCAkdy5zdGF0dXMgXAogCQktdGV4dHZhcmlhYmxlIEBicm93c2VyX3N0YXR1cyBcCiAJCS1hbmNob3IgdyBcCi0JCS1qdXN0aWZ5IGxlZnQgXAotCQktYm9yZGVyd2lkdGggMSBcCi0JCS1yZWxpZWYgc3Vua2VuCisJCS1qdXN0aWZ5IGxlZnQKKwlpZiB7ISR1c2VfdHRrfSB7ICR3LnN0YXR1cyBjb25maWd1cmUgLWJvcmRlcndpZHRoIDEgLXJlbGllZiBzdW5rZW59CiAJcGFjayAkdy5zdGF0dXMgLWFuY2hvciB3IC1zaWRlIGJvdHRvbSAtZmlsbCB4CiAKIAliaW5kICR3X2xpc3QgPEJ1dHRvbi0xPiAgICAgICAgIltjYiBfY2xpY2sgMCBAJXgsJXldO2JyZWFrIgpAQCAtNzgsNiArNzcsNyBAQAogCWJpbmQgJHdfbGlzdCA8UmlnaHQ+ICAgICAgICAgICBicmVhawogCiAJYmluZCAkd19saXN0IDxWaXNpYmlsaXR5PiBbbGlzdCBmb2N1cyAkd19saXN0XQorCXdtIGRlaWNvbmlmeSAkdG9wCiAJc2V0IHcgJHdfbGlzdAogCWlmIHskcGF0aCBuZSB7fX0gewogCQlfbHMgJHRoaXMgJGJyb3dzZXJfY29tbWl0OiRwYXRoICRwYXRoCkBAIC0yNjMsMjMgKzI2MywyNyBAQAogZmllbGQgd19yZXYgICAgICAgICAgOyAjIG1lZ2Etd2lkZ2V0IHRvIHBpY2sgdGhlIGluaXRpYWwgcmV2aXNpb24KIAogY29uc3RydWN0b3IgZGlhbG9nIHt9IHsKLQltYWtlX3RvcGxldmVsIHRvcCB3CisJZ2xvYmFsIHVzZV90dGsgTlMKKwltYWtlX2RpYWxvZyB0b3AgdworCXdtIHdpdGhkcmF3ICR0b3AKIAl3bSB0aXRsZSAkdG9wIFthcHBlbmQgIlthcHBuYW1lXSAoW3JlcG9uYW1lXSk6ICIgW21jICJCcm93c2UgQnJhbmNoIEZpbGVzIl1dCiAJaWYgeyR0b3AgbmUgey59fSB7CiAJCXdtIGdlb21ldHJ5ICR0b3AgIitbd2luZm8gcm9vdHggLl0rW3dpbmZvIHJvb3R5IC5dIgorCQl3bSB0cmFuc2llbnQgJHRvcCAuCiAJfQogCi0JbGFiZWwgJHcuaGVhZGVyIFwKKwkke05TfTo6bGFiZWwgJHcuaGVhZGVyIFwKIAkJLXRleHQgW21jICJCcm93c2UgQnJhbmNoIEZpbGVzIl0gXAotCQktZm9udCBmb250X3VpYm9sZAorCQktZm9udCBmb250X3VpYm9sZCBcCisJCS1hbmNob3IgY2VudGVyCiAJcGFjayAkdy5oZWFkZXIgLXNpZGUgdG9wIC1maWxsIHgKIAotCWZyYW1lICR3LmJ1dHRvbnMKLQlidXR0b24gJHcuYnV0dG9ucy5icm93c2UgLXRleHQgW21jIEJyb3dzZV0gXAorCSR7TlN9OjpmcmFtZSAkdy5idXR0b25zCisJJHtOU306OmJ1dHRvbiAkdy5idXR0b25zLmJyb3dzZSAtdGV4dCBbbWMgQnJvd3NlXSBcCiAJCS1kZWZhdWx0IGFjdGl2ZSBcCiAJCS1jb21tYW5kIFtjYiBfb3Blbl0KIAlwYWNrICR3LmJ1dHRvbnMuYnJvd3NlIC1zaWRlIHJpZ2h0Ci0JYnV0dG9uICR3LmJ1dHRvbnMuY2FuY2VsIC10ZXh0IFttYyBDYW5jZWxdIFwKKwkke05TfTo6YnV0dG9uICR3LmJ1dHRvbnMuY2FuY2VsIC10ZXh0IFttYyBDYW5jZWxdIFwKIAkJLWNvbW1hbmQgW2xpc3QgZGVzdHJveSAkd10KIAlwYWNrICR3LmJ1dHRvbnMuY2FuY2VsIC1zaWRlIHJpZ2h0IC1wYWR4IDUKIAlwYWNrICR3LmJ1dHRvbnMgLXNpZGUgYm90dG9tIC1maWxsIHggLXBhZHkgMTAgLXBhZHggMTAKQEAgLTI5MSw2ICsyOTUsNyBAQAogCWJpbmQgJHcgPFZpc2liaWxpdHk+IFtjYiBfdmlzaWJsZV0KIAliaW5kICR3IDxLZXktRXNjYXBlPiBbbGlzdCBkZXN0cm95ICR3XQogCWJpbmQgJHcgPEtleS1SZXR1cm4+IFtjYiBfb3Blbl1cO2JyZWFrCisJd20gZGVpY29uaWZ5ICR0b3AKIAl0a3dhaXQgd2luZG93ICR3CiB9CiAKZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL2Nob29zZV9mb250LnRjbCBiL2dpdC1ndWkvbGliL2Nob29zZV9mb250LnRjbAppbmRleCA1NjQ0M2IwLi5lYmU1MGJkIDEwMDY0NAotLS0gYS9naXQtZ3VpL2xpYi9jaG9vc2VfZm9udC50Y2wKKysrIGIvZ2l0LWd1aS9saWIvY2hvb3NlX2ZvbnQudGNsCkBAIC0xNyw2ICsxNyw3IEBACiAKIGNvbnN0cnVjdG9yIHBpY2sge3BhdGggdGl0bGUgYV9mYW1pbHkgYV9zaXplfSB7CiAJdmFyaWFibGUgYWxsX2ZhbWlsaWVzCisJZ2xvYmFsIHVzZV90dGsgTlMKIAogCXNldCB2X2ZhbWlseSAkYV9mYW1pbHkKIAlzZXQgdl9zaXplICRhX3NpemUKQEAgLTI3LDI5ICsyOCwzMCBAQAogCXNldCBmX2ZhbWlseSAkcHZfZmFtaWx5CiAJc2V0IGZfc2l6ZSAkcHZfc2l6ZQogCi0JbWFrZV90b3BsZXZlbCB0b3AgdworCW1ha2VfZGlhbG9nIHRvcCB3CisJd20gd2l0aGRyYXcgJHRvcAogCXdtIHRpdGxlICR0b3AgIlthcHBuYW1lXSAoW3JlcG9uYW1lXSk6ICR0aXRsZSIKIAl3bSBnZW9tZXRyeSAkdG9wICIrW3dpbmZvIHJvb3R4ICRwYXRoXStbd2luZm8gcm9vdHkgJHBhdGhdIgogCi0JbGFiZWwgJHcuaGVhZGVyIC10ZXh0ICR0aXRsZSAtZm9udCBmb250X3VpYm9sZAorCSR7TlN9OjpsYWJlbCAkdy5oZWFkZXIgLXRleHQgJHRpdGxlIC1mb250IGZvbnRfdWlib2xkIC1hbmNob3IgY2VudGVyCiAJcGFjayAkdy5oZWFkZXIgLXNpZGUgdG9wIC1maWxsIHgKIAotCWZyYW1lICR3LmJ1dHRvbnMKLQlidXR0b24gJHcuYnV0dG9ucy5zZWxlY3QgXAorCSR7TlN9OjpmcmFtZSAkdy5idXR0b25zCisJJHtOU306OmJ1dHRvbiAkdy5idXR0b25zLnNlbGVjdCBcCiAJCS10ZXh0IFttYyBTZWxlY3RdIFwKIAkJLWRlZmF1bHQgYWN0aXZlIFwKIAkJLWNvbW1hbmQgW2NiIF9zZWxlY3RdCi0JYnV0dG9uICR3LmJ1dHRvbnMuY2FuY2VsIFwKKwkke05TfTo6YnV0dG9uICR3LmJ1dHRvbnMuY2FuY2VsIFwKIAkJLXRleHQgW21jIENhbmNlbF0gXAogCQktY29tbWFuZCBbbGlzdCBkZXN0cm95ICR3XQogCXBhY2sgJHcuYnV0dG9ucy5zZWxlY3QgLXNpZGUgcmlnaHQKIAlwYWNrICR3LmJ1dHRvbnMuY2FuY2VsIC1zaWRlIHJpZ2h0IC1wYWR4IDUKIAlwYWNrICR3LmJ1dHRvbnMgLXNpZGUgYm90dG9tIC1maWxsIHggLXBhZHkgMTAgLXBhZHggMTAKIAotCWZyYW1lICR3LmlubmVyCisJJHtOU306OmZyYW1lICR3LmlubmVyCiAKLQlmcmFtZSAkdy5pbm5lci5mYW1pbHkKLQlsYWJlbCAkdy5pbm5lci5mYW1pbHkubCBcCisJJHtOU306OmZyYW1lICR3LmlubmVyLmZhbWlseQorCSR7TlN9OjpsYWJlbCAkdy5pbm5lci5mYW1pbHkubCBcCiAJCS10ZXh0IFttYyAiRm9udCBGYW1pbHkiXSBcCiAJCS1hbmNob3IgdwogCXNldCB3X2ZhbWlseSAkdy5pbm5lci5mYW1pbHkudgpAQCAtNjQsMTYgKzY2LDE2IEBACiAJCS1oZWlnaHQgMTAgXAogCQkteXNjcm9sbGNvbW1hbmQgW2xpc3QgJHcuaW5uZXIuZmFtaWx5LnNieSBzZXRdCiAJcm1zZWxfdGFnICR3X2ZhbWlseQotCXNjcm9sbGJhciAkdy5pbm5lci5mYW1pbHkuc2J5IC1jb21tYW5kIFtsaXN0ICR3X2ZhbWlseSB5dmlld10KKwkke05TfTo6c2Nyb2xsYmFyICR3LmlubmVyLmZhbWlseS5zYnkgLWNvbW1hbmQgW2xpc3QgJHdfZmFtaWx5IHl2aWV3XQogCXBhY2sgJHcuaW5uZXIuZmFtaWx5LmwgLXNpZGUgdG9wIC1maWxsIHgKIAlwYWNrICR3LmlubmVyLmZhbWlseS5zYnkgLXNpZGUgcmlnaHQgLWZpbGwgeQogCXBhY2sgJHdfZmFtaWx5IC1maWxsIGJvdGggLWV4cGFuZCAxCiAKLQlmcmFtZSAkdy5pbm5lci5zaXplCi0JbGFiZWwgJHcuaW5uZXIuc2l6ZS5sIFwKKwkke05TfTo6ZnJhbWUgJHcuaW5uZXIuc2l6ZQorCSR7TlN9OjpsYWJlbCAkdy5pbm5lci5zaXplLmwgXAogCQktdGV4dCBbbWMgIkZvbnQgU2l6ZSJdIFwKIAkJLWFuY2hvciB3Ci0Jc3BpbmJveCAkdy5pbm5lci5zaXplLnYgXAorCXRzcGluYm94ICR3LmlubmVyLnNpemUudiBcCiAJCS10ZXh0dmFyaWFibGUgQGZfc2l6ZSBcCiAJCS1mcm9tIDIgLXRvIDgwIC1pbmNyZW1lbnQgMSBcCiAJCS13aWR0aCAzCkBAIC04Niw4ICs4OCw4IEBACiAJZ3JpZCBjb2x1bW5jb25maWd1cmUgJHcuaW5uZXIgMCAtd2VpZ2h0IDEKIAlwYWNrICR3LmlubmVyIC1maWxsIGJvdGggLWV4cGFuZCAxIC1wYWR4IDUgLXBhZHkgNQogCi0JZnJhbWUgJHcuZXhhbXBsZQotCWxhYmVsICR3LmV4YW1wbGUubCBcCisJJHtOU306OmZyYW1lICR3LmV4YW1wbGUKKwkke05TfTo6bGFiZWwgJHcuZXhhbXBsZS5sIFwKIAkJLXRleHQgW21jICJGb250IEV4YW1wbGUiXSBcCiAJCS1hbmNob3IgdwogCXNldCB3X2V4YW1wbGUgJHcuZXhhbXBsZS50CkBAIC0xMjksNiArMTMxLDcgQEAKIAkJZ3JhYiAkdwogCQlmb2N1cyAkdwogCSIKKwl3bSBkZWljb25pZnkgJHcKIAl0a3dhaXQgd2luZG93ICR3CiB9CiAKZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbCBiL2dpdC1ndWkvbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbAppbmRleCA2MzNjYzU3Li42NGYwNjc0IDEwMDY0NAotLS0gYS9naXQtZ3VpL2xpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2wKKysrIGIvZ2l0LWd1aS9saWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsCkBAIC0yMiw5ICsyMiw5IEBACiBmaWVsZCBzb3J0ZWRfcmVjZW50ICAgICAgIDsgIyByZWNlbnQgcmVwb3NpdG9yaWVzIChzb3J0ZWQpCiAKIGNvbnN0cnVjdG9yIHBpY2sge30gewotCWdsb2JhbCBNMVQgTTFCCisJZ2xvYmFsIE0xVCBNMUIgdXNlX3R0ayBOUwogCi0JbWFrZV90b3BsZXZlbCB0b3AgdworCW1ha2VfZGlhbG9nIHRvcCB3CiAJd20gdGl0bGUgJHRvcCBbbWMgIkdpdCBHdWkiXQogCiAJaWYgeyR0b3AgZXEgey59fSB7CkBAIC03MSwxMSArNzEsMTEgQEAKIAogCXNldCB3X2JvZHkgJHcuYm9keQogCXNldCBvcHRzICR3X2JvZHkub3B0aW9ucwotCWZyYW1lICR3X2JvZHkKKwkke05TfTo6ZnJhbWUgJHdfYm9keQogCXRleHQgJG9wdHMgXAogCQktY3Vyc29yICQ6OmN1cnNvcl9wdHIgXAogCQktcmVsaWVmIGZsYXQgXAotCQktYmFja2dyb3VuZCBbJHdfYm9keSBjZ2V0IC1iYWNrZ3JvdW5kXSBcCisJCS1iYWNrZ3JvdW5kIFtnZXRfYmdfY29sb3IgJHdfYm9keV0gXAogCQktd3JhcCBub25lIFwKIAkJLXNwYWNpbmcxIDUgXAogCQktd2lkdGggNTAgXApAQCAtMTMyLDE1ICsxMzIsMTUgQEAKIAkJCQktbGFiZWwgW21jICJSZWNlbnQgUmVwb3NpdG9yaWVzIl0KIAkJfQogCi0JCWxhYmVsICR3X2JvZHkuc3BhY2UKLQkJbGFiZWwgJHdfYm9keS5yZWNlbnRsYWJlbCBcCisJCSR7TlN9OjpsYWJlbCAkd19ib2R5LnNwYWNlCisJCSR7TlN9OjpsYWJlbCAkd19ib2R5LnJlY2VudGxhYmVsIFwKIAkJCS1hbmNob3IgdyBcCiAJCQktdGV4dCBbbWMgIk9wZW4gUmVjZW50IFJlcG9zaXRvcnk6Il0KIAkJc2V0IHdfcmVjZW50bGlzdCAkd19ib2R5LnJlY2VudGxpc3QKIAkJdGV4dCAkd19yZWNlbnRsaXN0IFwKIAkJCS1jdXJzb3IgJDo6Y3Vyc29yX3B0ciBcCiAJCQktcmVsaWVmIGZsYXQgXAotCQkJLWJhY2tncm91bmQgWyR3X2JvZHkucmVjZW50bGFiZWwgY2dldCAtYmFja2dyb3VuZF0gXAorCQkJLWJhY2tncm91bmQgW2dldF9iZ19jb2xvciAkd19ib2R5LnJlY2VudGxhYmVsXSBcCiAJCQktd3JhcCBub25lIFwKIAkJCS13aWR0aCA1MCBcCiAJCQktaGVpZ2h0IDEwCkBAIC0xNzYsMTAgKzE3NiwxMCBAQAogCX0KIAlwYWNrICR3X2JvZHkgLWZpbGwgeCAtcGFkeCAxMCAtcGFkeSAxMAogCi0JZnJhbWUgJHcuYnV0dG9ucworCSR7TlN9OjpmcmFtZSAkdy5idXR0b25zCiAJc2V0IHdfbmV4dCAkdy5idXR0b25zLm5leHQKIAlzZXQgd19xdWl0ICR3LmJ1dHRvbnMucXVpdAotCWJ1dHRvbiAkd19xdWl0IFwKKwkke05TfTo6YnV0dG9uICR3X3F1aXQgXAogCQktdGV4dCBbbWMgIlF1aXQiXSBcCiAJCS1jb21tYW5kIGV4aXQKIAlwYWNrICR3X3F1aXQgLXNpZGUgcmlnaHQgLXBhZHggNQpAQCAtMjAzLDYgKzIwMyw3IEBACiAJd20gZGVpY29uaWZ5ICR0b3AKIAl0a3dhaXQgdmFyaWFibGUgQGRvbmUKIAorCWdyYWIgcmVsZWFzZSAkdG9wCiAJaWYgeyR0b3AgZXEgey59fSB7CiAJCWV2YWwgZGVzdHJveSBbd2luZm8gY2hpbGRyZW4gJHRvcF0KIAl9CkBAIC0yMzUsNiArMjM2LDggQEAKIAlmb3JlYWNoIHAgW2dldF9jb25maWcgZ3VpLnJlY2VudHJlcG9dIHsKIAkJaWYge1tfaXNfZ2l0IFtmaWxlIGpvaW4gJHAgLmdpdF1dfSB7CiAJCQlsYXBwZW5kIHJlY2VudCAkcAorCQl9IGVsc2UgeworCQkJX3Vuc2V0X3JlY2VudHJlcG8gJHAKIAkJfQogCX0KIAlyZXR1cm4gW2xzb3J0ICRyZWNlbnRdCkBAIC0yNDMsNiArMjQ2LDcgQEAKIHByb2MgX3Vuc2V0X3JlY2VudHJlcG8ge3B9IHsKIAlyZWdzdWIgLWFsbCAtLSB7KFsoKVxbXF17fVwuXiQrKj9cXF0pfSAkcCB7XFxcMX0gcAogCWdpdCBjb25maWcgLS1nbG9iYWwgLS11bnNldCBndWkucmVjZW50cmVwbyAiXiRwXCQiCisJbG9hZF9jb25maWcgMQogfQogCiBwcm9jIF9hcHBlbmRfcmVjZW50cmVwb3Mge3BhdGh9IHsKQEAgLTI2MSw2ICsyNjUsNyBAQAogCiAJbGFwcGVuZCByZWNlbnQgJHBhdGgKIAlnaXQgY29uZmlnIC0tZ2xvYmFsIC0tYWRkIGd1aS5yZWNlbnRyZXBvICRwYXRoCisJbG9hZF9jb25maWcgMQogCiAJd2hpbGUge1tsbGVuZ3RoICRyZWNlbnRdID4gMTB9IHsKIAkJX3Vuc2V0X3JlY2VudHJlcG8gW2xpbmRleCAkcmVjZW50IDBdCkBAIC0yODAsOSArMjg1LDEwIEBACiB9CiAKIG1ldGhvZCBfbmV4dCB7YWN0aW9ufSB7CisJZ2xvYmFsIE5TCiAJZGVzdHJveSAkd19ib2R5CiAJaWYgeyFbd2luZm8gZXhpc3RzICR3X25leHRdfSB7Ci0JCWJ1dHRvbiAkd19uZXh0IC1kZWZhdWx0IGFjdGl2ZQorCQkke05TfTo6YnV0dG9uICR3X25leHQgLWRlZmF1bHQgYWN0aXZlCiAJCXBhY2sgJHdfbmV4dCAtc2lkZSByaWdodCAtcGFkeCA1IC1iZWZvcmUgJHdfcXVpdAogCX0KIAlfZG9fJGFjdGlvbiAkdGhpcwpAQCAtMzcxLDI2ICszNzcsMjUgQEAKICMjIENyZWF0ZSBOZXcgUmVwb3NpdG9yeQogCiBtZXRob2QgX2RvX25ldyB7fSB7CisJZ2xvYmFsIHVzZV90dGsgTlMKIAkkd19uZXh0IGNvbmYgXAogCQktc3RhdGUgZGlzYWJsZWQgXAogCQktY29tbWFuZCBbY2IgX2RvX25ldzJdIFwKIAkJLXRleHQgW21jICJDcmVhdGUiXQogCi0JZnJhbWUgJHdfYm9keQotCWxhYmVsICR3X2JvZHkuaCBcCi0JCS1mb250IGZvbnRfdWlib2xkIFwKKwkke05TfTo6ZnJhbWUgJHdfYm9keQorCSR7TlN9OjpsYWJlbCAkd19ib2R5LmggXAorCQktZm9udCBmb250X3VpYm9sZCAtYW5jaG9yIGNlbnRlciBcCiAJCS10ZXh0IFttYyAiQ3JlYXRlIE5ldyBSZXBvc2l0b3J5Il0KIAlwYWNrICR3X2JvZHkuaCAtc2lkZSB0b3AgLWZpbGwgeCAtcGFkeSAxMAogCXBhY2sgJHdfYm9keSAtZmlsbCB4IC1wYWR4IDEwCiAKLQlmcmFtZSAkd19ib2R5LndoZXJlCi0JbGFiZWwgJHdfYm9keS53aGVyZS5sIC10ZXh0IFttYyAiRGlyZWN0b3J5OiJdCi0JZW50cnkgJHdfYm9keS53aGVyZS50IFwKKwkke05TfTo6ZnJhbWUgJHdfYm9keS53aGVyZQorCSR7TlN9OjpsYWJlbCAkd19ib2R5LndoZXJlLmwgLXRleHQgW21jICJEaXJlY3Rvcnk6Il0KKwkke05TfTo6ZW50cnkgJHdfYm9keS53aGVyZS50IFwKIAkJLXRleHR2YXJpYWJsZSBAbG9jYWxfcGF0aCBcCi0JCS1ib3JkZXJ3aWR0aCAxIFwKLQkJLXJlbGllZiBzdW5rZW4gXAogCQktd2lkdGggNTAKLQlidXR0b24gJHdfYm9keS53aGVyZS5iIFwKKwkke05TfTo6YnV0dG9uICR3X2JvZHkud2hlcmUuYiBcCiAJCS10ZXh0IFttYyAiQnJvd3NlIl0gXAogCQktY29tbWFuZCBbY2IgX25ld19sb2NhbF9wYXRoXQogCXNldCB3X2xvY2FscGF0aCAkd19ib2R5LndoZXJlLnQKQEAgLTQ1Niw2MyArNDYxLDU3IEBACiAjIyBDbG9uZSBFeGlzdGluZyBSZXBvc2l0b3J5CiAKIG1ldGhvZCBfZG9fY2xvbmUge30geworCWdsb2JhbCB1c2VfdHRrIE5TCiAJJHdfbmV4dCBjb25mIFwKIAkJLXN0YXRlIGRpc2FibGVkIFwKIAkJLWNvbW1hbmQgW2NiIF9kb19jbG9uZTJdIFwKIAkJLXRleHQgW21jICJDbG9uZSJdCiAKLQlmcmFtZSAkd19ib2R5Ci0JbGFiZWwgJHdfYm9keS5oIFwKLQkJLWZvbnQgZm9udF91aWJvbGQgXAorCSR7TlN9OjpmcmFtZSAkd19ib2R5CisJJHtOU306OmxhYmVsICR3X2JvZHkuaCBcCisJCS1mb250IGZvbnRfdWlib2xkIC1hbmNob3IgY2VudGVyIFwKIAkJLXRleHQgW21jICJDbG9uZSBFeGlzdGluZyBSZXBvc2l0b3J5Il0KIAlwYWNrICR3X2JvZHkuaCAtc2lkZSB0b3AgLWZpbGwgeCAtcGFkeSAxMAogCXBhY2sgJHdfYm9keSAtZmlsbCB4IC1wYWR4IDEwCiAKIAlzZXQgYXJncyAkd19ib2R5LmFyZ3MKLQlmcmFtZSAkd19ib2R5LmFyZ3MKKwkke05TfTo6ZnJhbWUgJHdfYm9keS5hcmdzCiAJcGFjayAkYXJncyAtZmlsbCBib3RoCiAKLQlsYWJlbCAkYXJncy5vcmlnaW5fbCAtdGV4dCBbbWMgIlNvdXJjZSBMb2NhdGlvbjoiXQotCWVudHJ5ICRhcmdzLm9yaWdpbl90IFwKKwkke05TfTo6bGFiZWwgJGFyZ3Mub3JpZ2luX2wgLXRleHQgW21jICJTb3VyY2UgTG9jYXRpb246Il0KKwkke05TfTo6ZW50cnkgJGFyZ3Mub3JpZ2luX3QgXAogCQktdGV4dHZhcmlhYmxlIEBvcmlnaW5fdXJsIFwKLQkJLWJvcmRlcndpZHRoIDEgXAotCQktcmVsaWVmIHN1bmtlbiBcCiAJCS13aWR0aCA1MAotCWJ1dHRvbiAkYXJncy5vcmlnaW5fYiBcCisJJHtOU306OmJ1dHRvbiAkYXJncy5vcmlnaW5fYiBcCiAJCS10ZXh0IFttYyAiQnJvd3NlIl0gXAogCQktY29tbWFuZCBbY2IgX29wZW5fb3JpZ2luXQogCWdyaWQgJGFyZ3Mub3JpZ2luX2wgJGFyZ3Mub3JpZ2luX3QgJGFyZ3Mub3JpZ2luX2IgLXN0aWNreSBldwogCi0JbGFiZWwgJGFyZ3Mud2hlcmVfbCAtdGV4dCBbbWMgIlRhcmdldCBEaXJlY3Rvcnk6Il0KLQllbnRyeSAkYXJncy53aGVyZV90IFwKKwkke05TfTo6bGFiZWwgJGFyZ3Mud2hlcmVfbCAtdGV4dCBbbWMgIlRhcmdldCBEaXJlY3Rvcnk6Il0KKwkke05TfTo6ZW50cnkgJGFyZ3Mud2hlcmVfdCBcCiAJCS10ZXh0dmFyaWFibGUgQGxvY2FsX3BhdGggXAotCQktYm9yZGVyd2lkdGggMSBcCi0JCS1yZWxpZWYgc3Vua2VuIFwKIAkJLXdpZHRoIDUwCi0JYnV0dG9uICRhcmdzLndoZXJlX2IgXAorCSR7TlN9OjpidXR0b24gJGFyZ3Mud2hlcmVfYiBcCiAJCS10ZXh0IFttYyAiQnJvd3NlIl0gXAogCQktY29tbWFuZCBbY2IgX25ld19sb2NhbF9wYXRoXQogCWdyaWQgJGFyZ3Mud2hlcmVfbCAkYXJncy53aGVyZV90ICRhcmdzLndoZXJlX2IgLXN0aWNreSBldwogCXNldCB3X2xvY2FscGF0aCAkYXJncy53aGVyZV90CiAKLQlsYWJlbCAkYXJncy50eXBlX2wgLXRleHQgW21jICJDbG9uZSBUeXBlOiJdCi0JZnJhbWUgJGFyZ3MudHlwZV9mCisJJHtOU306OmxhYmVsICRhcmdzLnR5cGVfbCAtdGV4dCBbbWMgIkNsb25lIFR5cGU6Il0KKwkke05TfTo6ZnJhbWUgJGFyZ3MudHlwZV9mCiAJc2V0IHdfdHlwZXMgW2xpc3RdCi0JbGFwcGVuZCB3X3R5cGVzIFtyYWRpb2J1dHRvbiAkYXJncy50eXBlX2YuaGFyZGxpbmsgXAorCWxhcHBlbmQgd190eXBlcyBbJHtOU306OnJhZGlvYnV0dG9uICRhcmdzLnR5cGVfZi5oYXJkbGluayBcCiAJCS1zdGF0ZSBkaXNhYmxlZCBcCi0JCS1hbmNob3IgdyBcCiAJCS10ZXh0IFttYyAiU3RhbmRhcmQgKEZhc3QsIFNlbWktUmVkdW5kYW50LCBIYXJkbGlua3MpIl0gXAogCQktdmFyaWFibGUgQGNsb25lX3R5cGUgXAogCQktdmFsdWUgaGFyZGxpbmtdCi0JbGFwcGVuZCB3X3R5cGVzIFtyYWRpb2J1dHRvbiAkYXJncy50eXBlX2YuZnVsbCBcCisJbGFwcGVuZCB3X3R5cGVzIFske05TfTo6cmFkaW9idXR0b24gJGFyZ3MudHlwZV9mLmZ1bGwgXAogCQktc3RhdGUgZGlzYWJsZWQgXAotCQktYW5jaG9yIHcgXAogCQktdGV4dCBbbWMgIkZ1bGwgQ29weSAoU2xvd2VyLCBSZWR1bmRhbnQgQmFja3VwKSJdIFwKIAkJLXZhcmlhYmxlIEBjbG9uZV90eXBlIFwKIAkJLXZhbHVlIGZ1bGxdCi0JbGFwcGVuZCB3X3R5cGVzIFtyYWRpb2J1dHRvbiAkYXJncy50eXBlX2Yuc2hhcmVkIFwKKwlsYXBwZW5kIHdfdHlwZXMgWyR7TlN9OjpyYWRpb2J1dHRvbiAkYXJncy50eXBlX2Yuc2hhcmVkIFwKIAkJLXN0YXRlIGRpc2FibGVkIFwKLQkJLWFuY2hvciB3IFwKIAkJLXRleHQgW21jICJTaGFyZWQgKEZhc3Rlc3QsIE5vdCBSZWNvbW1lbmRlZCwgTm8gQmFja3VwKSJdIFwKIAkJLXZhcmlhYmxlIEBjbG9uZV90eXBlIFwKIAkJLXZhbHVlIHNoYXJlZF0KQEAgLTEwMDEsMjYgKzEwMDAsMjUgQEAKICMjIE9wZW4gRXhpc3RpbmcgUmVwb3NpdG9yeQogCiBtZXRob2QgX2RvX29wZW4ge30geworCWdsb2JhbCBOUwogCSR3X25leHQgY29uZiBcCiAJCS1zdGF0ZSBkaXNhYmxlZCBcCiAJCS1jb21tYW5kIFtjYiBfZG9fb3BlbjJdIFwKIAkJLXRleHQgW21jICJPcGVuIl0KIAotCWZyYW1lICR3X2JvZHkKLQlsYWJlbCAkd19ib2R5LmggXAotCQktZm9udCBmb250X3VpYm9sZCBcCisJJHtOU306OmZyYW1lICR3X2JvZHkKKwkke05TfTo6bGFiZWwgJHdfYm9keS5oIFwKKwkJLWZvbnQgZm9udF91aWJvbGQgLWFuY2hvciBjZW50ZXIgXAogCQktdGV4dCBbbWMgIk9wZW4gRXhpc3RpbmcgUmVwb3NpdG9yeSJdCiAJcGFjayAkd19ib2R5LmggLXNpZGUgdG9wIC1maWxsIHggLXBhZHkgMTAKIAlwYWNrICR3X2JvZHkgLWZpbGwgeCAtcGFkeCAxMAogCi0JZnJhbWUgJHdfYm9keS53aGVyZQotCWxhYmVsICR3X2JvZHkud2hlcmUubCAtdGV4dCBbbWMgIlJlcG9zaXRvcnk6Il0KLQllbnRyeSAkd19ib2R5LndoZXJlLnQgXAorCSR7TlN9OjpmcmFtZSAkd19ib2R5LndoZXJlCisJJHtOU306OmxhYmVsICR3X2JvZHkud2hlcmUubCAtdGV4dCBbbWMgIlJlcG9zaXRvcnk6Il0KKwkke05TfTo6ZW50cnkgJHdfYm9keS53aGVyZS50IFwKIAkJLXRleHR2YXJpYWJsZSBAbG9jYWxfcGF0aCBcCi0JCS1ib3JkZXJ3aWR0aCAxIFwKLQkJLXJlbGllZiBzdW5rZW4gXAogCQktd2lkdGggNTAKLQlidXR0b24gJHdfYm9keS53aGVyZS5iIFwKKwkke05TfTo6YnV0dG9uICR3X2JvZHkud2hlcmUuYiBcCiAJCS10ZXh0IFttYyAiQnJvd3NlIl0gXAogCQktY29tbWFuZCBbY2IgX29wZW5fbG9jYWxfcGF0aF0KIApkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvY2hvb3NlX3Jldi50Y2wgYi9naXQtZ3VpL2xpYi9jaG9vc2VfcmV2LnRjbAppbmRleCBjODgyMWMxLi5jMTJkNWUxIDEwMDY0NAotLS0gYS9naXQtZ3VpL2xpYi9jaG9vc2VfcmV2LnRjbAorKysgYi9naXQtZ3VpL2xpYi9jaG9vc2VfcmV2LnRjbApAQCAtMTAsNyArMTAsNyBAQAogZmllbGQgd19maWx0ZXIgICAgICAgIDsgIyBmaWx0ZXIgZW50cnkgZm9yICR3X2xpc3QKIAogZmllbGQgY19leHByICAgICAgICB7fTsgIyBjdXJyZW50IHJldmlzaW9uIGV4cHJlc3Npb24KLWZpZWxkIGZpbHRlciAgICAgICAgICA7ICMgY3VycmVudCBmaWx0ZXIgc3RyaW5nCitmaWVsZCBmaWx0ZXIgICAgICAgICIiOyAjIGN1cnJlbnQgZmlsdGVyIHN0cmluZwogZmllbGQgcmV2dHlwZSAgICAgaGVhZDsgIyB0eXBlIG9mIHJldmlzaW9uIGNob3NlbgogZmllbGQgY3VyX3NwZWNzIFtsaXN0XTsgIyBsaXN0IG9mIHNwZWNzIGZvciAkcmV2dHlwZQogZmllbGQgc3BlY19oZWFkICAgICAgIDsgIyBsaXN0IG9mIGFsbCBoZWFkIHNwZWNzCkBAIC0zMiw3ICszMiw3IEBACiB9CiAKIGNvbnN0cnVjdG9yIF9uZXcge3BhdGggdW5tZXJnZWRfb25seSB0aXRsZX0gewotCWdsb2JhbCBjdXJyZW50X2JyYW5jaCBpc19kZXRhY2hlZAorCWdsb2JhbCBjdXJyZW50X2JyYW5jaCBpc19kZXRhY2hlZCB1c2VfdHRrIE5TCiAKIAlpZiB7IVtpbmZvIGV4aXN0cyA6OmFsbF9yZW1vdGVzXX0gewogCQlsb2FkX2FsbF9yZW1vdGVzCkBAIC00MSw2NSArNDEsNjUgQEAKIAlzZXQgdyAkcGF0aAogCiAJaWYgeyR0aXRsZSBuZSB7fX0gewotCQlsYWJlbGZyYW1lICR3IC10ZXh0ICR0aXRsZQorCQkke05TfTo6bGFiZWxmcmFtZSAkdyAtdGV4dCAkdGl0bGUKIAl9IGVsc2UgewotCQlmcmFtZSAkdworCQkke05TfTo6ZnJhbWUgJHcKIAl9CiAJYmluZCAkdyA8RGVzdHJveT4gW2NiIF9kZWxldGUgJVddCiAKIAlpZiB7JGlzX2RldGFjaGVkfSB7Ci0JCXJhZGlvYnV0dG9uICR3LmRldGFjaGVkaGVhZF9yIFwKLQkJCS1hbmNob3IgdyBcCisJCSR7TlN9OjpyYWRpb2J1dHRvbiAkdy5kZXRhY2hlZGhlYWRfciBcCiAJCQktdGV4dCBbbWMgIlRoaXMgRGV0YWNoZWQgQ2hlY2tvdXQiXSBcCiAJCQktdmFsdWUgSEVBRCBcCiAJCQktdmFyaWFibGUgQHJldnR5cGUKKwkJaWYgeyEkdXNlX3R0a30geyR3LmRldGFjaGVkaGVhZF9yIGNvbmZpZ3VyZSAtYW5jaG9yIHd9CiAJCWdyaWQgJHcuZGV0YWNoZWRoZWFkX3IgLXN0aWNreSB3ZSAtcGFkeCB7MCA1fSAtY29sdW1uc3BhbiAyCiAJfQogCi0JcmFkaW9idXR0b24gJHcuZXhwcl9yIFwKKwkke05TfTo6cmFkaW9idXR0b24gJHcuZXhwcl9yIFwKIAkJLXRleHQgW21jICJSZXZpc2lvbiBFeHByZXNzaW9uOiJdIFwKIAkJLXZhbHVlIGV4cHIgXAogCQktdmFyaWFibGUgQHJldnR5cGUKLQllbnRyeSAkdy5leHByX3QgXAotCQktYm9yZGVyd2lkdGggMSBcCi0JCS1yZWxpZWYgc3Vua2VuIFwKKwkke05TfTo6ZW50cnkgJHcuZXhwcl90IFwKIAkJLXdpZHRoIDUwIFwKIAkJLXRleHR2YXJpYWJsZSBAY19leHByIFwKIAkJLXZhbGlkYXRlIGtleSBcCiAJCS12YWxpZGF0ZWNvbW1hbmQgW2NiIF92YWxpZGF0ZSAlZCAlU10KIAlncmlkICR3LmV4cHJfciAkdy5leHByX3QgLXN0aWNreSB3ZSAtcGFkeCB7MCA1fQogCi0JZnJhbWUgJHcudHlwZXMKLQlyYWRpb2J1dHRvbiAkdy50eXBlcy5oZWFkX3IgXAorCSR7TlN9OjpmcmFtZSAkdy50eXBlcworCSR7TlN9OjpyYWRpb2J1dHRvbiAkdy50eXBlcy5oZWFkX3IgXAogCQktdGV4dCBbbWMgIkxvY2FsIEJyYW5jaCJdIFwKIAkJLXZhbHVlIGhlYWQgXAogCQktdmFyaWFibGUgQHJldnR5cGUKIAlwYWNrICR3LnR5cGVzLmhlYWRfciAtc2lkZSBsZWZ0Ci0JcmFkaW9idXR0b24gJHcudHlwZXMudHJja19yIFwKKwkke05TfTo6cmFkaW9idXR0b24gJHcudHlwZXMudHJja19yIFwKIAkJLXRleHQgW21jICJUcmFja2luZyBCcmFuY2giXSBcCiAJCS12YWx1ZSB0cmNrIFwKIAkJLXZhcmlhYmxlIEByZXZ0eXBlCiAJcGFjayAkdy50eXBlcy50cmNrX3IgLXNpZGUgbGVmdAotCXJhZGlvYnV0dG9uICR3LnR5cGVzLnRhZ19yIFwKKwkke05TfTo6cmFkaW9idXR0b24gJHcudHlwZXMudGFnX3IgXAogCQktdGV4dCBbbWMgIlRhZyJdIFwKIAkJLXZhbHVlIHRhZyBcCiAJCS12YXJpYWJsZSBAcmV2dHlwZQogCXBhY2sgJHcudHlwZXMudGFnX3IgLXNpZGUgbGVmdAogCXNldCB3X2ZpbHRlciAkdy50eXBlcy5maWx0ZXIKLQllbnRyeSAkd19maWx0ZXIgXAotCQktYm9yZGVyd2lkdGggMSBcCi0JCS1yZWxpZWYgc3Vua2VuIFwKKwkke05TfTo6ZW50cnkgJHdfZmlsdGVyIFwKIAkJLXdpZHRoIDEyIFwKIAkJLXRleHR2YXJpYWJsZSBAZmlsdGVyIFwKIAkJLXZhbGlkYXRlIGtleSBcCiAJCS12YWxpZGF0ZWNvbW1hbmQgW2NiIF9maWx0ZXIgJVBdCiAJcGFjayAkd19maWx0ZXIgLXNpZGUgcmlnaHQKLQlwYWNrIFtsYWJlbCAkdy50eXBlcy5maWx0ZXJfaWNvbiBcCisJcGFjayBbJHtOU306OmxhYmVsICR3LnR5cGVzLmZpbHRlcl9pY29uIFwKIAkJLWltYWdlIDo6Y2hvb3NlX3Jldjo6aW1nX2ZpbmQgXAogCQldIC1zaWRlIHJpZ2h0CiAJZ3JpZCAkdy50eXBlcyAtc3RpY2t5IHdlIC1wYWR4IHswIDV9IC1jb2x1bW5zcGFuIDIKIAotCWZyYW1lICR3Lmxpc3QKKwlpZiB7JHVzZV90dGt9IHsKKwkJdHRrOjpmcmFtZSAkdy5saXN0IC1zdHlsZSBTTGlzdGJveC5URnJhbWUgLXBhZGRpbmcgMgorCX0gZWxzZSB7CisJCWZyYW1lICR3Lmxpc3QKKwl9CiAJc2V0IHdfbGlzdCAkdy5saXN0LmwKIAlsaXN0Ym94ICR3X2xpc3QgXAogCQktZm9udCBmb250X2RpZmYgXApAQCAtMTA5LDYgKzEwOSw5IEBACiAJCS1leHBvcnRzZWxlY3Rpb24gZmFsc2UgXAogCQkteHNjcm9sbGNvbW1hbmQgW2NiIF9zYl9zZXQgJHcubGlzdC5zYnggaF0gXAogCQkteXNjcm9sbGNvbW1hbmQgW2NiIF9zYl9zZXQgJHcubGlzdC5zYnkgdl0KKwlpZiB7JHVzZV90dGt9IHsKKwkJJHdfbGlzdCBjb25maWd1cmUgLXJlbGllZiBmbGF0IC1oaWdobGlnaHR0aGlja25lc3MgMCAtYm9yZGVyd2lkdGggMAorCX0KIAlwYWNrICR3X2xpc3QgLWZpbGwgYm90aCAtZXhwYW5kIDEKIAlncmlkICR3Lmxpc3QgLXN0aWNreSBuc3dlIC1wYWR4IHsyMCA1fSAtY29sdW1uc3BhbiAyCiAJYmluZCAkd19saXN0IDxBbnktTW90aW9uPiAgW2NiIF9zaG93X3Rvb2x0aXAgQCV4LCV5XQpAQCAtMjM1LDExICsyMzgsMTIgQEAKIH0KIAogbWV0aG9kIG5vbmUge3RleHR9IHsKKwlnbG9iYWwgTlMgdXNlX3R0awogCWlmIHshW3dpbmZvIGV4aXN0cyAkdy5ub25lX3JdfSB7Ci0JCXJhZGlvYnV0dG9uICR3Lm5vbmVfciBcCi0JCQktYW5jaG9yIHcgXAorCQkke05TfTo6cmFkaW9idXR0b24gJHcubm9uZV9yIFwKIAkJCS12YWx1ZSBub25lIFwKIAkJCS12YXJpYWJsZSBAcmV2dHlwZQorCQlpZiB7ISR1c2VfdHRrfSB7JHcubm9uZV9yIGNvbmZpZ3VyZSAtYW5jaG9yIHd9CiAJCWdyaWQgJHcubm9uZV9yIC1zdGlja3kgd2UgLXBhZHggezAgNX0gLWNvbHVtbnNwYW4gMgogCX0KIAkkdy5ub25lX3IgY29uZmlndXJlIC10ZXh0ICR0ZXh0CkBAIC00MjUsNiArNDI5LDcgQEAKIH0KIAogbWV0aG9kIF9zYl9zZXQge3NiIG9yaWVudCBmaXJzdCBsYXN0fSB7CisJZ2xvYmFsIE5TCiAJc2V0IG9sZF9mb2N1cyBbZm9jdXMgLWxhc3Rmb3IgJHddCiAKIAlpZiB7JGZpcnN0ID09IDAgJiYgJGxhc3QgPT0gMX0gewpAQCAtNDQwLDEwICs0NDUsMTAgQEAKIAogCWlmIHshW3dpbmZvIGV4aXN0cyAkc2JdfSB7CiAJCWlmIHskb3JpZW50IGVxIHtofX0gewotCQkJc2Nyb2xsYmFyICRzYiAtb3JpZW50IGggLWNvbW1hbmQgW2xpc3QgJHdfbGlzdCB4dmlld10KKwkJCSR7TlN9OjpzY3JvbGxiYXIgJHNiIC1vcmllbnQgaCAtY29tbWFuZCBbbGlzdCAkd19saXN0IHh2aWV3XQogCQkJcGFjayAkc2IgLWZpbGwgeCAtc2lkZSBib3R0b20gLWJlZm9yZSAkd19saXN0CiAJCX0gZWxzZSB7Ci0JCQlzY3JvbGxiYXIgJHNiIC1vcmllbnQgdiAtY29tbWFuZCBbbGlzdCAkd19saXN0IHl2aWV3XQorCQkJJHtOU306OnNjcm9sbGJhciAkc2IgLW9yaWVudCB2IC1jb21tYW5kIFtsaXN0ICR3X2xpc3QgeXZpZXddCiAJCQlwYWNrICRzYiAtZmlsbCB5IC1zaWRlIHJpZ2h0IC1iZWZvcmUgJHdfbGlzdAogCQl9CiAJCWlmIHskb2xkX2ZvY3VzIG5lIHt9fSB7CmRpZmYgLS1naXQgYS9naXQtZ3VpL2xpYi9jbGFzcy50Y2wgYi9naXQtZ3VpL2xpYi9jbGFzcy50Y2wKaW5kZXggZGMyMTQxMS4uYzI3YjcxNCAxMDA2NDQKLS0tIGEvZ2l0LWd1aS9saWIvY2xhc3MudGNsCisrKyBiL2dpdC1ndWkvbGliL2NsYXNzLnRjbApAQCAtMTM0LDYgKzEzNCwxMyBAQAogCWlmIHtbbmFtZXNwYWNlIGV4aXN0cyAkdF19IHtuYW1lc3BhY2UgZGVsZXRlICR0fQogfQogCitwcm9jIG1ha2VfZGlhbG9nIHt0IHcgYXJnc30geworCXVwdmFyICR0IHRvcCAkdyBwZnggdGhpcyB0aGlzCisJZ2xvYmFsIHVzZV90dGsKKwl1cGxldmVsIFtsaW5zZXJ0ICRhcmdzIDAgbWFrZV90b3BsZXZlbCAkdCAkd10KKwlwYXZlX3RvcGxldmVsICRwZngKK30KKwogcHJvYyBtYWtlX3RvcGxldmVsIHt0IHcgYXJnc30gewogCXVwdmFyICR0IHRvcCAkdyBwZnggdGhpcyB0aGlzCiAKZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL2NvbnNvbGUudGNsIGIvZ2l0LWd1aS9saWIvY29uc29sZS50Y2wKaW5kZXggYzExMjQ2NC4uMWYzMjQ4ZiAxMDA2NDQKLS0tIGEvZ2l0LWd1aS9saWIvY29uc29sZS50Y2wKKysrIGIvZ2l0LWd1aS9saWIvY29uc29sZS50Y2wKQEAgLTI3LDIwICsyNywyMCBAQAogfQogCiBtZXRob2QgX2luaXQge30gewotCWdsb2JhbCBNMUIKKwlnbG9iYWwgTTFCIHVzZV90dGsgTlMKIAogCWlmIHskaXNfdG9wbGV2ZWx9IHsKLQkJbWFrZV90b3BsZXZlbCB0b3AgdyAtYXV0b2RlbGV0ZSAwCisJCW1ha2VfZGlhbG9nIHRvcCB3IC1hdXRvZGVsZXRlIDAKIAkJd20gdGl0bGUgJHRvcCAiW2FwcG5hbWVdIChbcmVwb25hbWVdKTogJHRfc2hvcnQiCiAJfSBlbHNlIHsKLQkJZnJhbWUgJHcKKwkJJHtOU306OmZyYW1lICR3CiAJfQogCiAJc2V0IGNvbnNvbGVfY3IgMS4wCiAJc2V0IHdfdCAkdy5tLnQKIAotCWZyYW1lICR3Lm0KLQlsYWJlbCAkdy5tLmwxIFwKKwkke05TfTo6ZnJhbWUgJHcubQorCSR7TlN9OjpsYWJlbCAkdy5tLmwxIFwKIAkJLXRleHR2YXJpYWJsZSBAdF9sb25nICBcCiAJCS1hbmNob3IgdyBcCiAJCS1qdXN0aWZ5IGxlZnQgXApAQCAtNzgsNyArNzgsNyBAQAogCQkiCiAKIAlpZiB7JGlzX3RvcGxldmVsfSB7Ci0JCWJ1dHRvbiAkdy5vayAtdGV4dCBbbWMgIkNsb3NlIl0gXAorCQkke05TfTo6YnV0dG9uICR3Lm9rIC10ZXh0IFttYyAiQ2xvc2UiXSBcCiAJCQktc3RhdGUgZGlzYWJsZWQgXAogCQkJLWNvbW1hbmQgW2xpc3QgZGVzdHJveSAkd10KIAkJcGFjayAkdy5vayAtc2lkZSBib3R0b20gLWFuY2hvciBlIC1wYWR5IDEwIC1wYWR4IDEwCkBAIC0yMDYsMTMgKzIwNiwxNCBAQAogfQogCiBtZXRob2QgX3NiX3NldCB7c2Igb3JpZW50IGZpcnN0IGxhc3R9IHsKKwlnbG9iYWwgTlMKIAlpZiB7IVt3aW5mbyBleGlzdHMgJHNiXX0gewogCQlpZiB7JGZpcnN0ID09ICRsYXN0IHx8ICgkZmlyc3QgPT0gMCAmJiAkbGFzdCA9PSAxKX0gcmV0dXJuCiAJCWlmIHskb3JpZW50IGVxIHtofX0gewotCQkJc2Nyb2xsYmFyICRzYiAtb3JpZW50IGggLWNvbW1hbmQgW2xpc3QgJHdfdCB4dmlld10KKwkJCSR7TlN9OjpzY3JvbGxiYXIgJHNiIC1vcmllbnQgaCAtY29tbWFuZCBbbGlzdCAkd190IHh2aWV3XQogCQkJcGFjayAkc2IgLWZpbGwgeCAtc2lkZSBib3R0b20gLWJlZm9yZSAkd190CiAJCX0gZWxzZSB7Ci0JCQlzY3JvbGxiYXIgJHNiIC1vcmllbnQgdiAtY29tbWFuZCBbbGlzdCAkd190IHl2aWV3XQorCQkJJHtOU306OnNjcm9sbGJhciAkc2IgLW9yaWVudCB2IC1jb21tYW5kIFtsaXN0ICR3X3QgeXZpZXddCiAJCQlwYWNrICRzYiAtZmlsbCB5IC1zaWRlIHJpZ2h0IC1iZWZvcmUgJHdfdAogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvZGF0YWJhc2UudGNsIGIvZ2l0LWd1aS9saWIvZGF0YWJhc2UudGNsCmluZGV4IGExOGFjOGIuLjFmMTg3ZWQgMTAwNjQ0Ci0tLSBhL2dpdC1ndWkvbGliL2RhdGFiYXNlLnRjbAorKysgYi9naXQtZ3VpL2xpYi9kYXRhYmFzZS50Y2wKQEAgLTIsNiArMiw3IEBACiAjIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBTaGF3biBQZWFyY2UKIAogcHJvYyBkb19zdGF0cyB7fSB7CisJZ2xvYmFsIHVzZV90dGsgTlMKIAlzZXQgZmQgW2dpdF9yZWFkIGNvdW50LW9iamVjdHMgLXZdCiAJd2hpbGUge1tnZXRzICRmZCBsaW5lXSA+IDB9IHsKIAkJaWYge1tyZWdleHAge14oW146XSspOiAoXGQrKSR9ICRsaW5lIF8gbmFtZSB2YWx1ZV19IHsKQEAgLTIxLDI0ICsyMiwyMiBAQAogCX0KIAogCXNldCB3IC5zdGF0c192aWV3Ci0JdG9wbGV2ZWwgJHcKKwlEaWFsb2cgJHcKKwl3bSB3aXRoZHJhdyAkdwogCXdtIGdlb21ldHJ5ICR3ICIrW3dpbmZvIHJvb3R4IC5dK1t3aW5mbyByb290eSAuXSIKIAotCWxhYmVsICR3LmhlYWRlciAtdGV4dCBbbWMgIkRhdGFiYXNlIFN0YXRpc3RpY3MiXQotCXBhY2sgJHcuaGVhZGVyIC1zaWRlIHRvcCAtZmlsbCB4Ci0KLQlmcmFtZSAkdy5idXR0b25zIC1ib3JkZXIgMQotCWJ1dHRvbiAkdy5idXR0b25zLmNsb3NlIC10ZXh0IFttYyBDbG9zZV0gXAorCSR7TlN9OjpmcmFtZSAkdy5idXR0b25zCisJJHtOU306OmJ1dHRvbiAkdy5idXR0b25zLmNsb3NlIC10ZXh0IFttYyBDbG9zZV0gXAogCQktZGVmYXVsdCBhY3RpdmUgXAogCQktY29tbWFuZCBbbGlzdCBkZXN0cm95ICR3XQotCWJ1dHRvbiAkdy5idXR0b25zLmdjIC10ZXh0IFttYyAiQ29tcHJlc3MgRGF0YWJhc2UiXSBcCisJJHtOU306OmJ1dHRvbiAkdy5idXR0b25zLmdjIC10ZXh0IFttYyAiQ29tcHJlc3MgRGF0YWJhc2UiXSBcCiAJCS1kZWZhdWx0IG5vcm1hbCBcCiAJCS1jb21tYW5kICJkZXN0cm95ICR3O2RvX2djIgogCXBhY2sgJHcuYnV0dG9ucy5jbG9zZSAtc2lkZSByaWdodAogCXBhY2sgJHcuYnV0dG9ucy5nYyAtc2lkZSBsZWZ0CiAJcGFjayAkdy5idXR0b25zIC1zaWRlIGJvdHRvbSAtZmlsbCB4IC1wYWR5IDEwIC1wYWR4IDEwCiAKLQlmcmFtZSAkdy5zdGF0IC1ib3JkZXJ3aWR0aCAxIC1yZWxpZWYgc29saWQKKwkke05TfTo6bGFiZWxmcmFtZSAkdy5zdGF0IC10ZXh0IFttYyAiRGF0YWJhc2UgU3RhdGlzdGljcyJdCiAJZm9yZWFjaCBzIHsKIAkJe2NvdW50ICAgICAgICAgICB7bWMgIk51bWJlciBvZiBsb29zZSBvYmplY3RzIn19CiAJCXtzaXplICAgICAgICAgICAge21jICJEaXNrIHNwYWNlIHVzZWQgYnkgbG9vc2Ugb2JqZWN0cyJ9IHsgS2lCfX0KQEAgLTU1LDggKzU0LDggQEAKIAkJCXNldCB2YWx1ZSAiJHZhbHVlW2xpbmRleCAkcyAyXSIKIAkJfQogCi0JCWxhYmVsICR3LnN0YXQubF8kbmFtZSAtdGV4dCAiJGxhYmVsOiIgLWFuY2hvciB3Ci0JCWxhYmVsICR3LnN0YXQudl8kbmFtZSAtdGV4dCAkdmFsdWUgLWFuY2hvciB3CisJCSR7TlN9OjpsYWJlbCAkdy5zdGF0LmxfJG5hbWUgLXRleHQgIiRsYWJlbDoiIC1hbmNob3IgdworCQkke05TfTo6bGFiZWwgJHcuc3RhdC52XyRuYW1lIC10ZXh0ICR2YWx1ZSAtYW5jaG9yIHcKIAkJZ3JpZCAkdy5zdGF0LmxfJG5hbWUgJHcuc3RhdC52XyRuYW1lIC1zdGlja3kgd2UgLXBhZHggezAgNX0KIAl9CiAJcGFjayAkdy5zdGF0IC1wYWR5IDEwIC1wYWR4IDEwCkBAIC02NSw2ICs2NCw3IEBACiAJYmluZCAkdyA8S2V5LUVzY2FwZT4gW2xpc3QgZGVzdHJveSAkd10KIAliaW5kICR3IDxLZXktUmV0dXJuPiBbbGlzdCBkZXN0cm95ICR3XQogCXdtIHRpdGxlICR3IFthcHBlbmQgIlthcHBuYW1lXSAoW3JlcG9uYW1lXSk6ICIgW21jICJEYXRhYmFzZSBTdGF0aXN0aWNzIl1dCisJd20gZGVpY29uaWZ5ICR3CiAJdGt3YWl0IHdpbmRvdyAkdwogfQogCkBAIC04OSwyNyArODksMjYgQEAKIH0KIAogcHJvYyBoaW50X2djIHt9IHsKLQlzZXQgb2JqZWN0X2xpbWl0IDgKKwlzZXQgbmRpcnMgMQorCXNldCBsaW1pdCA4CiAJaWYge1tpc19XaW5kb3dzXX0gewotCQlzZXQgb2JqZWN0X2xpbWl0IDEKKwkJc2V0IG5kaXJzIDQKKwkJc2V0IGxpbWl0IDEKIAl9CiAKLQlzZXQgb2JqZWN0c19jdXJyZW50IFtsbGVuZ3RoIFtnbG9iIFwKLQkJLWRpcmVjdG9yeSBbZ2l0ZGlyIG9iamVjdHMgNDJdIFwKKwlzZXQgY291bnQgW2xsZW5ndGggW2dsb2IgXAogCQktbm9jb21wbGFpbiBcCi0JCS10YWlscyBcCiAJCS0tIFwKLQkJKl1dCisJCVtnaXRkaXIgb2JqZWN0cyA0XFswLVtleHByIHskbmRpcnMtMX1dXF0vKl1dXQogCi0JaWYgeyRvYmplY3RzX2N1cnJlbnQgPj0gJG9iamVjdF9saW1pdH0gewotCQlzZXQgb2JqZWN0c19jdXJyZW50IFtleHByIHskb2JqZWN0c19jdXJyZW50ICogMjUwfV0KLQkJc2V0IG9iamVjdF9saW1pdCAgICBbZXhwciB7JG9iamVjdF9saW1pdCAgICAqIDI1MH1dCisJaWYgeyRjb3VudCA+PSAkbGltaXQgKiAkbmRpcnN9IHsKKwkJc2V0IG9iamVjdHNfY3VycmVudCBbZXhwciB7JGNvdW50ICogMjU2LyRuZGlyc31dCiAJCWlmIHtbYXNrX3BvcHVwIFwKIAkJCVttYyAiVGhpcyByZXBvc2l0b3J5IGN1cnJlbnRseSBoYXMgYXBwcm94aW1hdGVseSAlaSBsb29zZSBvYmplY3RzLgogCi1UbyBtYWludGFpbiBvcHRpbWFsIHBlcmZvcm1hbmNlIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgeW91IGNvbXByZXNzIHRoZSBkYXRhYmFzZSB3aGVuIG1vcmUgdGhhbiAlaSBsb29zZSBvYmplY3RzIGV4aXN0LgorVG8gbWFpbnRhaW4gb3B0aW1hbCBwZXJmb3JtYW5jZSBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBjb21wcmVzcyB0aGUgZGF0YWJhc2UuCiAKLUNvbXByZXNzIHRoZSBkYXRhYmFzZSBub3c/IiAkb2JqZWN0c19jdXJyZW50ICRvYmplY3RfbGltaXRdXSBlcSB5ZXN9IHsKK0NvbXByZXNzIHRoZSBkYXRhYmFzZSBub3c/IiAkb2JqZWN0c19jdXJyZW50XV0gZXEgeWVzfSB7CiAJCQlkb19nYwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvZGlmZi50Y2wgYi9naXQtZ3VpL2xpYi9kaWZmLnRjbAppbmRleCA5MjViM2Y1Li5lYzhjMTFlIDEwMDY0NAotLS0gYS9naXQtZ3VpL2xpYi9kaWZmLnRjbAorKysgYi9naXQtZ3VpL2xpYi9kaWZmLnRjbApAQCAtMjU1LDcgKzI1NSw3IEBACiAKIHByb2Mgc3RhcnRfc2hvd19kaWZmIHtjb250X2luZm8ge2FkZF9vcHRzIHt9fX0gewogCWdsb2JhbCBmaWxlX3N0YXRlcyBmaWxlX2xpc3RzCi0JZ2xvYmFsIGlzXzN3YXlfZGlmZiBkaWZmX2FjdGl2ZSByZXBvX2NvbmZpZworCWdsb2JhbCBpc18zd2F5X2RpZmYgaXNfc3VibW9kdWxlX2RpZmYgZGlmZl9hY3RpdmUgcmVwb19jb25maWcKIAlnbG9iYWwgdWlfZGlmZiB1aV9pbmRleCB1aV93b3JrZGlyCiAJZ2xvYmFsIGN1cnJlbnRfZGlmZl9wYXRoIGN1cnJlbnRfZGlmZl9zaWRlIGN1cnJlbnRfZGlmZl9oZWFkZXIKIApAQCAtMjY1LDYgKzI2NSw3IEBACiAJc2V0IHMgJGZpbGVfc3RhdGVzKCRwYXRoKQogCXNldCBtIFtsaW5kZXggJHMgMF0KIAlzZXQgaXNfM3dheV9kaWZmIDAKKwlzZXQgaXNfc3VibW9kdWxlX2RpZmYgMAogCXNldCBkaWZmX2FjdGl2ZSAxCiAJc2V0IGN1cnJlbnRfZGlmZl9oZWFkZXIge30KIApAQCAtMjgwLDYgKzI4MSwxNSBAQAogCQl9CiAJfQogCisJaWYge1tzdHJpbmcgbWF0Y2ggezE2MDAwMCAqfSBbbGluZGV4ICRzIDJdXQorCSB8fCBbc3RyaW5nIG1hdGNoIHsxNjAwMDAgKn0gW2xpbmRleCAkcyAzXV19IHsKKwkJc2V0IGlzX3N1Ym1vZHVsZV9kaWZmIDEKKworCQlpZiB7W2dpdC12ZXJzaW9uID49ICIxLjYuNiJdfSB7CisJCQlsYXBwZW5kIGNtZCAtLXN1Ym1vZHVsZQorCQl9CisJfQorCiAJbGFwcGVuZCBjbWQgLXAKIAlsYXBwZW5kIGNtZCAtLW5vLWNvbG9yCiAJaWYgeyRyZXBvX2NvbmZpZyhndWkuZGlmZmNvbnRleHQpID49IDF9IHsKQEAgLTI5NSw2ICszMDUsMTQgQEAKIAkJbGFwcGVuZCBjbWQgJHBhdGgKIAl9CiAKKwlpZiB7JGlzX3N1Ym1vZHVsZV9kaWZmICYmIFtnaXQtdmVyc2lvbiA8ICIxLjYuNiJdfSB7CisJCWlmIHskdyBlcSAkdWlfaW5kZXh9IHsKKwkJCXNldCBjbWQgW2xpc3Qgc3VibW9kdWxlIHN1bW1hcnkgLS1jYWNoZWQgLS0gJHBhdGhdCisJCX0gZWxzZSB7CisJCQlzZXQgY21kIFtsaXN0IHN1Ym1vZHVsZSBzdW1tYXJ5IC0tZmlsZXMgLS0gJHBhdGhdCisJCX0KKwl9CisKIAlpZiB7W2NhdGNoIHtzZXQgZmQgW2V2YWwgZ2l0X3JlYWQgLS1uaWNlICRjbWRdfSBlcnJdfSB7CiAJCXNldCBkaWZmX2FjdGl2ZSAwCiAJCXVubG9ja19pbmRleApAQCAtMzEyLDcgKzMzMCw3IEBACiB9CiAKIHByb2MgcmVhZF9kaWZmIHtmZCBjb250X2luZm99IHsKLQlnbG9iYWwgdWlfZGlmZiBkaWZmX2FjdGl2ZQorCWdsb2JhbCB1aV9kaWZmIGRpZmZfYWN0aXZlIGlzX3N1Ym1vZHVsZV9kaWZmCiAJZ2xvYmFsIGlzXzN3YXlfZGlmZiBpc19jb25mbGljdF9kaWZmIGN1cnJlbnRfZGlmZl9oZWFkZXIKIAlnbG9iYWwgY3VycmVudF9kaWZmX3F1ZXVlCiAJZ2xvYmFsIGRpZmZfZW1wdHlfY291bnQKQEAgLTM3NCw2ICszOTIsMjUgQEAKIAkJCQlzZXQgdGFncyB7fQogCQkJfQogCQkJfQorCQl9IGVsc2VpZiB7JGlzX3N1Ym1vZHVsZV9kaWZmfSB7CisJCQlpZiB7JGxpbmUgPT0gIiJ9IGNvbnRpbnVlCisJCQlpZiB7W3JlZ2V4cCB7XlN1Ym1vZHVsZSB9ICRsaW5lXX0geworCQkJCXNldCB0YWdzIGRfQAorCQkJfSBlbHNlaWYge1tyZWdleHAge15cKiB9ICRsaW5lXX0geworCQkJCXNldCBsaW5lIFtzdHJpbmcgcmVwbGFjZSAkbGluZSAwIDEge1N1Ym1vZHVsZSB9XQorCQkJCXNldCB0YWdzIGRfQAorCQkJfSBlbHNlIHsKKwkJCQlzZXQgb3AgW3N0cmluZyByYW5nZSAkbGluZSAwIDJdCisJCQkJc3dpdGNoIC0tICRvcCB7CisJCQkJeyAgPH0ge3NldCB0YWdzIGRfLX0KKwkJCQl7ICA+fSB7c2V0IHRhZ3MgZF8rfQorCQkJCXsgIFd9IHtzZXQgdGFncyB7fX0KKwkJCQlkZWZhdWx0IHsKKwkJCQkJcHV0cyAiZXJyb3I6IFVuaGFuZGxlZCBzdWJtb2R1bGUgZGlmZiBtYXJrZXI6IHskb3B9IgorCQkJCQlzZXQgdGFncyB7fQorCQkJCX0KKwkJCQl9CisJCQl9CiAJCX0gZWxzZSB7CiAJCQlzZXQgb3AgW3N0cmluZyBpbmRleCAkbGluZSAwXQogCQkJc3dpdGNoIC0tICRvcCB7CkBAIC01MDUsMTAgKzU0MiwyMyBAQAogCX0KIH0KIAotcHJvYyBhcHBseV9saW5lIHt4IHl9IHsKK3Byb2MgYXBwbHlfcmFuZ2Vfb3JfbGluZSB7eCB5fSB7CiAJZ2xvYmFsIGN1cnJlbnRfZGlmZl9wYXRoIGN1cnJlbnRfZGlmZl9oZWFkZXIgY3VycmVudF9kaWZmX3NpZGUKIAlnbG9iYWwgdWlfZGlmZiB1aV9pbmRleCBmaWxlX3N0YXRlcwogCisJc2V0IHNlbGVjdGVkIFskdWlfZGlmZiB0YWcgbmV4dHJhbmdlIHNlbCAwLjBdCisKKwlpZiB7JHNlbGVjdGVkID09IHt9fSB7CisJCXNldCBmaXJzdCBbJHVpX2RpZmYgaW5kZXggIkAkeCwkeSJdCisJCXNldCBsYXN0ICRmaXJzdAorCX0gZWxzZSB7CisJCXNldCBmaXJzdCBbbGluZGV4ICRzZWxlY3RlZCAwXQorCQlzZXQgbGFzdCBbbGluZGV4ICRzZWxlY3RlZCAxXQorCX0KKworCXNldCBmaXJzdF9sIFskdWlfZGlmZiBpbmRleCAiJGZpcnN0IGxpbmVzdGFydCJdCisJc2V0IGxhc3RfbCBbJHVpX2RpZmYgaW5kZXggIiRsYXN0IGxpbmVlbmQiXQorCiAJaWYgeyRjdXJyZW50X2RpZmZfcGF0aCBlcSB7fSB8fCAkY3VycmVudF9kaWZmX2hlYWRlciBlcSB7fX0gcmV0dXJuCiAJaWYgeyFbbG9ja19pbmRleCBhcHBseV9odW5rXX0gcmV0dXJuCiAKQEAgLTUzMSwxMTkgKzU4MSwxNDcgQEAKIAkJfQogCX0KIAotCXNldCB0aGVfbCBbJHVpX2RpZmYgaW5kZXggQCR4LCR5XQorCXNldCB3aG9sZXBhdGNoIHt9CiAKLQkjIG9wZXJhdGUgb25seSBvbiBjaGFuZ2UgbGluZXMKLQlzZXQgYzEgWyR1aV9kaWZmIGdldCAiJHRoZV9sIGxpbmVzdGFydCJdCi0JaWYgeyRjMSBuZSB7K30gJiYgJGMxIG5lIHstfX0gewotCQl1bmxvY2tfaW5kZXgKLQkJcmV0dXJuCi0JfQotCXNldCBzaWduICRjMQotCi0Jc2V0IGlfbCBbJHVpX2RpZmYgc2VhcmNoIC1iYWNrd2FyZHMgLXJlZ2V4cCBeQEAgJHRoZV9sIDAuMF0KLQlpZiB7JGlfbCBlcSB7fX0gewotCQl1bmxvY2tfaW5kZXgKLQkJcmV0dXJuCi0JfQotCSMgJGlfbCBpcyBub3cgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUKLQotCSMgcGljayBzdGFydCBsaW5lIG51bWJlciBmcm9tIGh1bmsgaGVhZGVyCi0Jc2V0IGhoIFskdWlfZGlmZiBnZXQgJGlfbCAiJGlfbCArIDEgbGluZXMiXQotCXNldCBoaCBbbGluZGV4IFtzcGxpdCAkaGggLF0gMF0KLQlzZXQgaGxuIFtsaW5kZXggW3NwbGl0ICRoaCAtXSAxXQotCi0JIyBUaGVyZSBpcyBhIHNwZWNpYWwgc2l0dWF0aW9uIHRvIHRha2UgY2FyZSBvZi4gQ29uc2lkZXIgdGhpcyBodW5rOgotCSMKLQkjICAgIEBAIC0xMCw0ICsxMCw0IEBACi0JIyAgICAgY29udGV4dCBiZWZvcmUKLQkjICAgIC1vbGQgMQotCSMgICAgLW9sZCAyCi0JIyAgICArbmV3IDEKLQkjICAgICtuZXcgMgotCSMgICAgIGNvbnRleHQgYWZ0ZXIKLQkjCi0JIyBXZSB1c2VkIHRvIGtlZXAgdGhlIGNvbnRleHQgbGluZXMgaW4gdGhlIG9yZGVyIHRoZXkgYXBwZWFyIGluIHRoZQotCSMgaHVuay4gQnV0IHRoZW4gaXQgaXMgbm90IHBvc3NpYmxlIHRvIGNvcnJlY3RseSBzdGFnZSBvbmx5Ci0JIyAiLW9sZCAxIiBhbmQgIituZXcgMSIgLSBpdCB3b3VsZCByZXN1bHQgaW4gdGhpcyBzdGFnZWQgdGV4dDoKLQkjCi0JIyAgICBjb250ZXh0IGJlZm9yZQotCSMgICAgb2xkIDIKLQkjICAgIG5ldyAxCi0JIyAgICBjb250ZXh0IGFmdGVyCi0JIwotCSMgKEJ5IHN5bW1ldHJ5IGl0IGlzIG5vdCBwb3NzaWJsZSB0byAqdW4qc3RhZ2UgIm9sZCAyIiBhbmQgIm5ldyAyIi4pCi0JIwotCSMgV2UgcmVzb2x2ZSB0aGUgcHJvYmxlbSBieSBpbnRyb2R1Y2luZyBhbiBhc3ltbWV0cnksIG5hbWVseSwgd2hlbgotCSMgYSAiKyIgbGluZSBpcyAqc3RhZ2VkKiwgaXQgaXMgbW92ZWQgaW4gZnJvbnQgb2YgdGhlIGNvbnRleHQgbGluZXMKLQkjIHRoYXQgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSAiLSIgbGluZXMgdGhhdCBhcmUgaW1tZWRpYXRlbHkgYmVmb3JlCi0JIyB0aGUgIisiIGJsb2NrLiBUaGF0IGlzLCB3ZSBjb25zdHJ1Y3QgdGhpcyBwYXRjaDoKLQkjCi0JIyAgICBAQCAtMTAsNCArMTAsNSBAQAotCSMgICAgIGNvbnRleHQgYmVmb3JlCi0JIyAgICArbmV3IDEKLQkjICAgICBvbGQgMQotCSMgICAgIG9sZCAyCi0JIyAgICAgY29udGV4dCBhZnRlcgotCSMKLQkjIEJ1dCB3ZSBkbyAqbm90KiB0cmVhdCAiLSIgbGluZXMgdGhhdCBhcmUgKnVuKnN0YWdlZCBpbiBhIHNwZWNpYWwKLQkjIHdheS4KLQkjCi0JIyBXaXRoIHRoaXMgYXN5bW1ldHJ5IGl0IGlzIHBvc3NpYmxlIHRvIHN0YWdlIHRoZSBjaGFuZ2UKLQkjICJvbGQgMSIgLT4gIm5ldyAxIiBkaXJlY3RseSwgYW5kIHRvIHN0YWdlIHRoZSBjaGFuZ2UKLQkjICJvbGQgMiIgLT4gIm5ldyAyIiBieSBmaXJzdCBzdGFnaW5nIHRoZSBlbnRpcmUgaHVuayBhbmQKLQkjIHRoZW4gdW5zdGFnaW5nIHRoZSBjaGFuZ2UgIm9sZCAxIiAtPiAibmV3IDEiLgotCi0JIyBUaGlzIGlzIG5vbi1lbXB0eSBpZiBhbmQgb25seSBpZiB3ZSBhcmUgX3N0YWdpbmdfIGNoYW5nZXM7Ci0JIyB0aGVuIGl0IGFjY3VtdWxhdGVzIHRoZSBjb25zZWN1dGl2ZSAiLSIgbGluZXMgKGFmdGVyIGNvbnZlcnRpbmcKLQkjIHRoZW0gdG8gY29udGV4dCBsaW5lcykgaW4gb3JkZXIgdG8gYmUgbW92ZWQgYWZ0ZXIgdGhlICIrIiBjaGFuZ2UKLQkjIGxpbmUuCi0Jc2V0IHByZV9jb250ZXh0IHt9Ci0KLQlzZXQgbiAwCi0Jc2V0IGlfbCBbJHVpX2RpZmYgaW5kZXggIiRpX2wgKyAxIGxpbmVzIl0KLQlzZXQgcGF0Y2gge30KLQl3aGlsZSB7WyR1aV9kaWZmIGNvbXBhcmUgJGlfbCA8ICJlbmQgLSAxIGNoYXJzIl0gJiYKLQkgICAgICAgWyR1aV9kaWZmIGdldCAkaV9sICIkaV9sICsgMiBjaGFycyJdIG5lIHtAQH19IHsKLQkJc2V0IG5leHRfbCBbJHVpX2RpZmYgaW5kZXggIiRpX2wgKyAxIGxpbmVzIl0KLQkJc2V0IGMxIFskdWlfZGlmZiBnZXQgJGlfbF0KLQkJaWYge1skdWlfZGlmZiBjb21wYXJlICRpX2wgPD0gJHRoZV9sXSAmJgotCQkgICAgWyR1aV9kaWZmIGNvbXBhcmUgJHRoZV9sIDwgJG5leHRfbF19IHsKLQkJCSMgdGhlIGxpbmUgdG8gc3RhZ2UvdW5zdGFnZQotCQkJc2V0IGxuIFskdWlfZGlmZiBnZXQgJGlfbCAkbmV4dF9sXQotCQkJaWYgeyRjMSBlcSB7LX19IHsKLQkJCQlzZXQgbiBbZXhwciAkbisxXQotCQkJCXNldCBwYXRjaCAiJHBhdGNoJHByZV9jb250ZXh0JGxuIgotCQkJfSBlbHNlIHsKLQkJCQlzZXQgcGF0Y2ggIiRwYXRjaCRsbiRwcmVfY29udGV4dCIKLQkJCX0KLQkJCXNldCBwcmVfY29udGV4dCB7fQotCQl9IGVsc2VpZiB7JGMxIG5lIHstfSAmJiAkYzEgbmUgeyt9fSB7Ci0JCQkjIGNvbnRleHQgbGluZQotCQkJc2V0IGxuIFskdWlfZGlmZiBnZXQgJGlfbCAkbmV4dF9sXQotCQkJc2V0IHBhdGNoICIkcGF0Y2gkcHJlX2NvbnRleHQkbG4iCi0JCQlzZXQgbiBbZXhwciAkbisxXQotCQkJc2V0IHByZV9jb250ZXh0IHt9Ci0JCX0gZWxzZWlmIHskYzEgZXEgJHRvX2NvbnRleHR9IHsKLQkJCSMgdHVybiBjaGFuZ2UgbGluZSBpbnRvIGNvbnRleHQgbGluZQotCQkJc2V0IGxuIFskdWlfZGlmZiBnZXQgIiRpX2wgKyAxIGNoYXJzIiAkbmV4dF9sXQotCQkJaWYgeyRjMSBlcSB7LX19IHsKLQkJCQlzZXQgcHJlX2NvbnRleHQgIiRwcmVfY29udGV4dCAkbG4iCi0JCQl9IGVsc2UgewotCQkJCXNldCBwYXRjaCAiJHBhdGNoICRsbiIKLQkJCX0KLQkJCXNldCBuIFtleHByICRuKzFdCisJd2hpbGUgeyRmaXJzdF9sIDwgJGxhc3RfbH0geworCQlzZXQgaV9sIFskdWlfZGlmZiBzZWFyY2ggLWJhY2t3YXJkcyAtcmVnZXhwIF5AQCAkZmlyc3RfbCAwLjBdCisJCWlmIHskaV9sIGVxIHt9fSB7CisJCQkjIElmIHRoZXJlJ3Mgbm90IGEgQEAgYWJvdmUsIHRoZW4gdGhlIHNlbGVjdGVkIHJhbmdlCisJCQkjIG11c3QgaGF2ZSBjb21lIGJlZm9yZSB0aGUgZmlyc3RfbCBAQAorCQkJc2V0IGlfbCBbJHVpX2RpZmYgc2VhcmNoIC1yZWdleHAgXkBAICRmaXJzdF9sICRsYXN0X2xdCiAJCX0KLQkJc2V0IGlfbCAkbmV4dF9sCisJCWlmIHskaV9sIGVxIHt9fSB7CisJCQl1bmxvY2tfaW5kZXgKKwkJCXJldHVybgorCQl9CisJCSMgJGlfbCBpcyBub3cgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUKKworCQkjIHBpY2sgc3RhcnQgbGluZSBudW1iZXIgZnJvbSBodW5rIGhlYWRlcgorCQlzZXQgaGggWyR1aV9kaWZmIGdldCAkaV9sICIkaV9sICsgMSBsaW5lcyJdCisJCXNldCBoaCBbbGluZGV4IFtzcGxpdCAkaGggLF0gMF0KKwkJc2V0IGhsbiBbbGluZGV4IFtzcGxpdCAkaGggLV0gMV0KKworCQkjIFRoZXJlIGlzIGEgc3BlY2lhbCBzaXR1YXRpb24gdG8gdGFrZSBjYXJlIG9mLiBDb25zaWRlciB0aGlzCisJCSMgaHVuazoKKwkJIworCQkjICAgIEBAIC0xMCw0ICsxMCw0IEBACisJCSMgICAgIGNvbnRleHQgYmVmb3JlCisJCSMgICAgLW9sZCAxCisJCSMgICAgLW9sZCAyCisJCSMgICAgK25ldyAxCisJCSMgICAgK25ldyAyCisJCSMgICAgIGNvbnRleHQgYWZ0ZXIKKwkJIworCQkjIFdlIHVzZWQgdG8ga2VlcCB0aGUgY29udGV4dCBsaW5lcyBpbiB0aGUgb3JkZXIgdGhleSBhcHBlYXIgaW4KKwkJIyB0aGUgaHVuay4gQnV0IHRoZW4gaXQgaXMgbm90IHBvc3NpYmxlIHRvIGNvcnJlY3RseSBzdGFnZSBvbmx5CisJCSMgIi1vbGQgMSIgYW5kICIrbmV3IDEiIC0gaXQgd291bGQgcmVzdWx0IGluIHRoaXMgc3RhZ2VkIHRleHQ6CisJCSMKKwkJIyAgICBjb250ZXh0IGJlZm9yZQorCQkjICAgIG9sZCAyCisJCSMgICAgbmV3IDEKKwkJIyAgICBjb250ZXh0IGFmdGVyCisJCSMKKwkJIyAoQnkgc3ltbWV0cnkgaXQgaXMgbm90IHBvc3NpYmxlIHRvICp1bipzdGFnZSAib2xkIDIiIGFuZCAibmV3CisJCSMgMiIuKQorCQkjCisJCSMgV2UgcmVzb2x2ZSB0aGUgcHJvYmxlbSBieSBpbnRyb2R1Y2luZyBhbiBhc3ltbWV0cnksIG5hbWVseSwKKwkJIyB3aGVuIGEgIisiIGxpbmUgaXMgKnN0YWdlZCosIGl0IGlzIG1vdmVkIGluIGZyb250IG9mIHRoZQorCQkjIGNvbnRleHQgbGluZXMgdGhhdCBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlICItIiBsaW5lcyB0aGF0IGFyZQorCQkjIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgIisiIGJsb2NrLiBUaGF0IGlzLCB3ZSBjb25zdHJ1Y3QgdGhpcworCQkjIHBhdGNoOgorCQkjCisJCSMgICAgQEAgLTEwLDQgKzEwLDUgQEAKKwkJIyAgICAgY29udGV4dCBiZWZvcmUKKwkJIyAgICArbmV3IDEKKwkJIyAgICAgb2xkIDEKKwkJIyAgICAgb2xkIDIKKwkJIyAgICAgY29udGV4dCBhZnRlcgorCQkjCisJCSMgQnV0IHdlIGRvICpub3QqIHRyZWF0ICItIiBsaW5lcyB0aGF0IGFyZSAqdW4qc3RhZ2VkIGluIGEKKwkJIyBzcGVjaWFsIHdheS4KKwkJIworCQkjIFdpdGggdGhpcyBhc3ltbWV0cnkgaXQgaXMgcG9zc2libGUgdG8gc3RhZ2UgdGhlIGNoYW5nZSAib2xkCisJCSMgMSIgLT4gIm5ldyAxIiBkaXJlY3RseSwgYW5kIHRvIHN0YWdlIHRoZSBjaGFuZ2UgIm9sZCAyIiAtPgorCQkjICJuZXcgMiIgYnkgZmlyc3Qgc3RhZ2luZyB0aGUgZW50aXJlIGh1bmsgYW5kIHRoZW4gdW5zdGFnaW5nCisJCSMgdGhlIGNoYW5nZSAib2xkIDEiIC0+ICJuZXcgMSIuCisJCSMKKwkJIyBBcHBseWluZyBtdWx0aXBsZSBsaW5lcyBhZGRzIGNvbXBsZXhpdHkgdG8gdGhlIHNwZWNpYWwKKwkJIyBzaXR1YXRpb24uICBUaGUgcHJlX2NvbnRleHQgbXVzdCBiZSBtb3ZlZCBhZnRlciB0aGUgZW50aXJlCisJCSMgZmlyc3QgYmxvY2sgb2YgY29uc2VjdXRpdmUgc3RhZ2VkICIrIiBsaW5lcywgc28gdGhhdAorCQkjIHN0YWdpbmcgYm90aCBhZGRpdGlvbnMgZ2l2ZXMgdGhlIGZvbGxvd2luZyBwYXRjaDoKKwkJIworCQkjICAgIEBAIC0xMCw0ICsxMCw2IEBACisJCSMgICAgIGNvbnRleHQgYmVmb3JlCisJCSMgICAgK25ldyAxCisJCSMgICAgK25ldyAyCisJCSMgICAgIG9sZCAxCisJCSMgICAgIG9sZCAyCisJCSMgICAgIGNvbnRleHQgYWZ0ZXIKKworCQkjIFRoaXMgaXMgbm9uLWVtcHR5IGlmIGFuZCBvbmx5IGlmIHdlIGFyZSBfc3RhZ2luZ18gY2hhbmdlczsKKwkJIyB0aGVuIGl0IGFjY3VtdWxhdGVzIHRoZSBjb25zZWN1dGl2ZSAiLSIgbGluZXMgKGFmdGVyCisJCSMgY29udmVydGluZyB0aGVtIHRvIGNvbnRleHQgbGluZXMpIGluIG9yZGVyIHRvIGJlIG1vdmVkIGFmdGVyCisJCSMgIisiIGNoYW5nZSBsaW5lcy4KKwkJc2V0IHByZV9jb250ZXh0IHt9CisKKwkJc2V0IG4gMAorCQlzZXQgbSAwCisJCXNldCBpX2wgWyR1aV9kaWZmIGluZGV4ICIkaV9sICsgMSBsaW5lcyJdCisJCXNldCBwYXRjaCB7fQorCQl3aGlsZSB7WyR1aV9kaWZmIGNvbXBhcmUgJGlfbCA8ICJlbmQgLSAxIGNoYXJzIl0gJiYKKwkJICAgICAgIFskdWlfZGlmZiBnZXQgJGlfbCAiJGlfbCArIDIgY2hhcnMiXSBuZSB7QEB9fSB7CisJCQlzZXQgbmV4dF9sIFskdWlfZGlmZiBpbmRleCAiJGlfbCArIDEgbGluZXMiXQorCQkJc2V0IGMxIFskdWlfZGlmZiBnZXQgJGlfbF0KKwkJCWlmIHtbJHVpX2RpZmYgY29tcGFyZSAkZmlyc3RfbCA8PSAkaV9sXSAmJgorCQkJICAgIFskdWlfZGlmZiBjb21wYXJlICRpX2wgPCAkbGFzdF9sXSAmJgorCQkJICAgICgkYzEgZXEgey19IHx8ICRjMSBlcSB7K30pfSB7CisJCQkJIyBhIGxpbmUgdG8gc3RhZ2UvdW5zdGFnZQorCQkJCXNldCBsbiBbJHVpX2RpZmYgZ2V0ICRpX2wgJG5leHRfbF0KKwkJCQlpZiB7JGMxIGVxIHstfX0geworCQkJCQlzZXQgbiBbZXhwciAkbisxXQorCQkJCQlzZXQgcGF0Y2ggIiRwYXRjaCRwcmVfY29udGV4dCRsbiIKKwkJCQkJc2V0IHByZV9jb250ZXh0IHt9CisJCQkJfSBlbHNlIHsKKwkJCQkJc2V0IG0gW2V4cHIgJG0rMV0KKwkJCQkJc2V0IHBhdGNoICIkcGF0Y2gkbG4iCisJCQkJfQorCQkJfSBlbHNlaWYgeyRjMSBuZSB7LX0gJiYgJGMxIG5lIHsrfX0geworCQkJCSMgY29udGV4dCBsaW5lCisJCQkJc2V0IGxuIFskdWlfZGlmZiBnZXQgJGlfbCAkbmV4dF9sXQorCQkJCXNldCBwYXRjaCAiJHBhdGNoJHByZV9jb250ZXh0JGxuIgorCQkJCXNldCBuIFtleHByICRuKzFdCisJCQkJc2V0IG0gW2V4cHIgJG0rMV0KKwkJCQlzZXQgcHJlX2NvbnRleHQge30KKwkJCX0gZWxzZWlmIHskYzEgZXEgJHRvX2NvbnRleHR9IHsKKwkJCQkjIHR1cm4gY2hhbmdlIGxpbmUgaW50byBjb250ZXh0IGxpbmUKKwkJCQlzZXQgbG4gWyR1aV9kaWZmIGdldCAiJGlfbCArIDEgY2hhcnMiICRuZXh0X2xdCisJCQkJaWYgeyRjMSBlcSB7LX19IHsKKwkJCQkJc2V0IHByZV9jb250ZXh0ICIkcHJlX2NvbnRleHQgJGxuIgorCQkJCX0gZWxzZSB7CisJCQkJCXNldCBwYXRjaCAiJHBhdGNoICRsbiIKKwkJCQl9CisJCQkJc2V0IG4gW2V4cHIgJG4rMV0KKwkJCQlzZXQgbSBbZXhwciAkbSsxXQorCQkJfSBlbHNlIHsKKwkJCQkjIGEgY2hhbmdlIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gb2YKKwkJCQkjIHRvX2NvbnRleHQgd2hpY2ggaXMgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YKKwkJCQkjIGxpbmVzIHRvIGFwcGx5LgorCQkJCXNldCBwYXRjaCAiJHBhdGNoJHByZV9jb250ZXh0IgorCQkJCXNldCBwcmVfY29udGV4dCB7fQorCQkJfQorCQkJc2V0IGlfbCAkbmV4dF9sCisJCX0KKwkJc2V0IHBhdGNoICIkcGF0Y2gkcHJlX2NvbnRleHQiCisJCXNldCB3aG9sZXBhdGNoICIkd2hvbGVwYXRjaEBAIC0kaGxuLCRuICskaGxuLCRtIEBAXG4kcGF0Y2giCisJCXNldCBmaXJzdF9sIFskdWlfZGlmZiBpbmRleCAiJG5leHRfbCArIDEgbGluZXMiXQogCX0KLQlzZXQgcGF0Y2ggIkBAIC0kaGxuLCRuICskaGxuLFtldmFsIGV4cHIgJG4gJHNpZ24gMV0gQEBcbiRwYXRjaCIKIAogCWlmIHtbY2F0Y2ggewogCQlzZXQgZW5jIFtnZXRfcGF0aF9lbmNvZGluZyAkY3VycmVudF9kaWZmX3BhdGhdCiAJCXNldCBwIFtldmFsIGdpdF93cml0ZSAkYXBwbHlfY21kXQogCQlmY29uZmlndXJlICRwIC10cmFuc2xhdGlvbiBiaW5hcnkgLWVuY29kaW5nICRlbmMKIAkJcHV0cyAtbm9uZXdsaW5lICRwICRjdXJyZW50X2RpZmZfaGVhZGVyCi0JCXB1dHMgLW5vbmV3bGluZSAkcCAkcGF0Y2gKKwkJcHV0cyAtbm9uZXdsaW5lICRwICR3aG9sZXBhdGNoCiAJCWNsb3NlICRwfSBlcnJdfSB7CiAJCWVycm9yX3BvcHVwIFthcHBlbmQgJGZhaWxlZF9tc2cgIlxuXG4kZXJyIl0KIAl9CmRpZmYgLS1naXQgYS9naXQtZ3VpL2xpYi9lcnJvci50Y2wgYi9naXQtZ3VpL2xpYi9lcnJvci50Y2wKaW5kZXggNzU2NTAxNS4uYzBmYTY5YSAxMDA2NDQKLS0tIGEvZ2l0LWd1aS9saWIvZXJyb3IudGNsCisrKyBiL2dpdC1ndWkvbGliL2Vycm9yLnRjbApAQCAtNzEsMTEgKzcxLDEzIEBACiB9CiAKIHByb2MgaG9va19mYWlsZWRfcG9wdXAge2hvb2sgbXNnIHtpc19mYXRhbCAxfX0geworCWdsb2JhbCB1c2VfdHRrIE5TCiAJc2V0IHcgLmhvb2tmYWlsCi0JdG9wbGV2ZWwgJHcKKwlEaWFsb2cgJHcKKwl3bSB3aXRoZHJhdyAkdwogCi0JZnJhbWUgJHcubQotCWxhYmVsICR3Lm0ubDEgLXRleHQgIiRob29rIGhvb2sgZmFpbGVkOiIgXAorCSR7TlN9OjpmcmFtZSAkdy5tCisJJHtOU306OmxhYmVsICR3Lm0ubDEgLXRleHQgIiRob29rIGhvb2sgZmFpbGVkOiIgXAogCQktYW5jaG9yIHcgXAogCQktanVzdGlmeSBsZWZ0IFwKIAkJLWZvbnQgZm9udF91aWJvbGQKQEAgLTg3LDEwICs4OSwxMCBAQAogCQktd2lkdGggODAgLWhlaWdodCAxMCBcCiAJCS1mb250IGZvbnRfZGlmZiBcCiAJCS15c2Nyb2xsY29tbWFuZCBbbGlzdCAkdy5tLnNieSBzZXRdCi0Jc2Nyb2xsYmFyICR3Lm0uc2J5IC1jb21tYW5kIFtsaXN0ICR3Lm0udCB5dmlld10KKwkke05TfTo6c2Nyb2xsYmFyICR3Lm0uc2J5IC1jb21tYW5kIFtsaXN0ICR3Lm0udCB5dmlld10KIAlwYWNrICR3Lm0ubDEgLXNpZGUgdG9wIC1maWxsIHgKIAlpZiB7JGlzX2ZhdGFsfSB7Ci0JCWxhYmVsICR3Lm0ubDIgXAorCQkke05TfTo6bGFiZWwgJHcubS5sMiBcCiAJCQktdGV4dCBbbWMgIllvdSBtdXN0IGNvcnJlY3QgdGhlIGFib3ZlIGVycm9ycyBiZWZvcmUgY29tbWl0dGluZy4iXSBcCiAJCQktYW5jaG9yIHcgXAogCQkJLWp1c3RpZnkgbGVmdCBcCkBAIC0xMDQsNyArMTA2LDcgQEAKIAkkdy5tLnQgaW5zZXJ0IDEuMCAkbXNnCiAJJHcubS50IGNvbmYgLXN0YXRlIGRpc2FibGVkCiAKLQlidXR0b24gJHcub2sgLXRleHQgT0sgXAorCSR7TlN9OjpidXR0b24gJHcub2sgLXRleHQgT0sgXAogCQktd2lkdGggMTUgXAogCQktY29tbWFuZCAiZGVzdHJveSAkdyIKIAlwYWNrICR3Lm9rIC1zaWRlIGJvdHRvbSAtYW5jaG9yIGUgLXBhZHkgMTAgLXBhZHggMTAKQEAgLTExMiw1ICsxMTQsNiBAQAogCWJpbmQgJHcgPFZpc2liaWxpdHk+ICJncmFiICR3OyBmb2N1cyAkdyIKIAliaW5kICR3IDxLZXktUmV0dXJuPiAiZGVzdHJveSAkdyIKIAl3bSB0aXRsZSAkdyBbc3RyY2F0ICJbYXBwbmFtZV0gKFtyZXBvbmFtZV0pOiAiIFttYyAiZXJyb3IiXV0KKwl3bSBkZWljb25pZnkgJHcKIAl0a3dhaXQgd2luZG93ICR3CiB9CmRpZmYgLS1naXQgYS9naXQtZ3VpL2xpYi9pbmRleC50Y2wgYi9naXQtZ3VpL2xpYi9pbmRleC50Y2wKaW5kZXggZDMzODk2YS4uZTlkYjBjNCAxMDA2NDQKLS0tIGEvZ2l0LWd1aS9saWIvaW5kZXgudGNsCisrKyBiL2dpdC1ndWkvbGliL2luZGV4LnRjbApAQCAtOCwzNiArOCw0MSBAQAogfQogCiBwcm9jIF9jbG9zZV91cGRhdGVpbmRleCB7ZmQgYWZ0ZXJ9IHsKKwlnbG9iYWwgdXNlX3R0ayBOUwogCWZjb25maWd1cmUgJGZkIC1ibG9ja2luZyAxCiAJaWYge1tjYXRjaCB7Y2xvc2UgJGZkfSBlcnJdfSB7CiAJCXNldCB3IC5pbmRleGZyaWVkCi0JCXRvcGxldmVsICR3CisJCURpYWxvZyAkdworCQl3bSB3aXRoZHJhdyAkdwogCQl3bSB0aXRsZSAkdyBbc3RyY2F0ICJbYXBwbmFtZV0gKFtyZXBvbmFtZV0pOiAiIFttYyAiSW5kZXggRXJyb3IiXV0KIAkJd20gZ2VvbWV0cnkgJHcgIitbd2luZm8gcm9vdHggLl0rW3dpbmZvIHJvb3R5IC5dIgotCQlwYWNrIFtsYWJlbCAkdy5tc2cgXAotCQkJLWp1c3RpZnkgbGVmdCBcCi0JCQktYW5jaG9yIHcgXAotCQkJLXRleHQgW3N0cmNhdCBcCi0JCQkJW21jICJVcGRhdGluZyB0aGUgR2l0IGluZGV4IGZhaWxlZC4gIEEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvIHJlc3luY2hyb25pemUgZ2l0LWd1aS4iXSBcCi0JCQkJIlxuXG4kZXJyIl0gXAotCQkJXSAtYW5jaG9yIHcKKwkJc2V0IHMgW21jICJVcGRhdGluZyB0aGUgR2l0IGluZGV4IGZhaWxlZC4gIEEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvIHJlc3luY2hyb25pemUgZ2l0LWd1aS4iXQorCQl0ZXh0ICR3Lm1zZyAteXNjcm9sbGNvbW1hbmQgW2xpc3QgJHcudnMgc2V0XSBcCisJCQktd2lkdGggW3N0cmluZyBsZW5ndGggJHNdIC1yZWxpZWYgZmxhdCBcCisJCQktYm9yZGVyd2lkdGggMCAtaGlnaGxpZ2h0dGhpY2tuZXNzIDAgXAorCQkJLWJhY2tncm91bmQgW2dldF9iZ19jb2xvciAkd10KKwkJJHcubXNnIHRhZyBjb25maWd1cmUgYm9sZCAtZm9udCBmb250X3VpYm9sZCAtanVzdGlmeSBjZW50ZXIKKwkJJHtOU306OnNjcm9sbGJhciAkdy52cyAtY29tbWFuZCBbbGlzdCAkdy5tc2cgeXZpZXddCisJCSR3Lm1zZyBpbnNlcnQgZW5kICRzIGJvbGQgXG5cbiRlcnIge30KKwkJJHcubXNnIGNvbmZpZ3VyZSAtc3RhdGUgZGlzYWJsZWQKIAotCQlmcmFtZSAkdy5idXR0b25zCi0JCWJ1dHRvbiAkdy5idXR0b25zLmNvbnRpbnVlIFwKKwkJJHtOU306OmJ1dHRvbiAkdy5jb250aW51ZSBcCiAJCQktdGV4dCBbbWMgIkNvbnRpbnVlIl0gXAogCQkJLWNvbW1hbmQgW2xpc3QgZGVzdHJveSAkd10KLQkJcGFjayAkdy5idXR0b25zLmNvbnRpbnVlIC1zaWRlIHJpZ2h0IC1wYWR4IDUKLQkJYnV0dG9uICR3LmJ1dHRvbnMudW5sb2NrIFwKKwkJJHtOU306OmJ1dHRvbiAkdy51bmxvY2sgXAogCQkJLXRleHQgW21jICJVbmxvY2sgSW5kZXgiXSBcCiAJCQktY29tbWFuZCAiZGVzdHJveSAkdzsgX2RlbGV0ZV9pbmRleGxvY2siCi0JCXBhY2sgJHcuYnV0dG9ucy51bmxvY2sgLXNpZGUgcmlnaHQKLQkJcGFjayAkdy5idXR0b25zIC1zaWRlIGJvdHRvbSAtZmlsbCB4IC1wYWR5IDEwIC1wYWR4IDEwCisJCWdyaWQgJHcubXNnIC0gJHcudnMgLXN0aWNreSBuZXdzCisJCWdyaWQgJHcudW5sb2NrICR3LmNvbnRpbnVlIC0gLXN0aWNreSBzZSAtcGFkeCAyIC1wYWR5IDIKKwkJZ3JpZCBjb2x1bW5jb25maWd1cmUgJHcgMCAtd2VpZ2h0IDEKKwkJZ3JpZCByb3djb25maWd1cmUgJHcgMCAtd2VpZ2h0IDEKIAogCQl3bSBwcm90b2NvbCAkdyBXTV9ERUxFVEVfV0lORE9XIHVwZGF0ZQotCQliaW5kICR3LmJ1dHRvbnMuY29udGludWUgPFZpc2liaWxpdHk+ICIKKwkJYmluZCAkdy5jb250aW51ZSA8VmlzaWJpbGl0eT4gIgogCQkJZ3JhYiAkdwotCQkJZm9jdXMgJHcuYnV0dG9ucy5jb250aW51ZQorCQkJZm9jdXMgJVcKIAkJIgorCQl3bSBkZWljb25pZnkgJHcKIAkJdGt3YWl0IHdpbmRvdyAkdwogCiAJCSQ6Om1haW5fc3RhdHVzIHN0b3AKZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL21lcmdlLnRjbCBiL2dpdC1ndWkvbGliL21lcmdlLnRjbAppbmRleCAyODNlNDkxLi41Y2RlZDIzIDEwMDY0NAotLS0gYS9naXQtZ3VpL2xpYi9tZXJnZS50Y2wKKysrIGIvZ2l0LWd1aS9saWIvbWVyZ2UudGNsCkBAIC0xMzksMTQgKzEzOSwxNCBAQAogCiBjb25zdHJ1Y3RvciBkaWFsb2cge30gewogCWdsb2JhbCBjdXJyZW50X2JyYW5jaAotCWdsb2JhbCBNMUIKKwlnbG9iYWwgTTFCIHVzZV90dGsgTlMKIAogCWlmIHshW19jYW5fbWVyZ2UgJHRoaXNdfSB7CiAJCWRlbGV0ZV90aGlzCiAJCXJldHVybgogCX0KIAotCW1ha2VfdG9wbGV2ZWwgdG9wIHcKKwltYWtlX2RpYWxvZyB0b3AgdwogCXdtIHRpdGxlICR0b3AgW2FwcGVuZCAiW2FwcG5hbWVdIChbcmVwb25hbWVdKTogIiBbbWMgIk1lcmdlIl1dCiAJaWYgeyR0b3AgbmUgey59fSB7CiAJCXdtIGdlb21ldHJ5ICR0b3AgIitbd2luZm8gcm9vdHggLl0rW3dpbmZvIHJvb3R5IC5dIgpAQCAtMTU0LDIxICsxNTQsMjEgQEAKIAogCXNldCBfc3RhcnQgW2NiIF9zdGFydF0KIAotCWxhYmVsICR3LmhlYWRlciBcCisJJHtOU306OmxhYmVsICR3LmhlYWRlciBcCiAJCS10ZXh0IFttYyAiTWVyZ2UgSW50byAlcyIgJGN1cnJlbnRfYnJhbmNoXSBcCiAJCS1mb250IGZvbnRfdWlib2xkCiAJcGFjayAkdy5oZWFkZXIgLXNpZGUgdG9wIC1maWxsIHgKIAotCWZyYW1lICR3LmJ1dHRvbnMKLQlidXR0b24gJHcuYnV0dG9ucy52aXN1YWxpemUgXAorCSR7TlN9OjpmcmFtZSAkdy5idXR0b25zCisJJHtOU306OmJ1dHRvbiAkdy5idXR0b25zLnZpc3VhbGl6ZSBcCiAJCS10ZXh0IFttYyBWaXN1YWxpemVdIFwKIAkJLWNvbW1hbmQgW2NiIF92aXN1YWxpemVdCiAJcGFjayAkdy5idXR0b25zLnZpc3VhbGl6ZSAtc2lkZSBsZWZ0Ci0JYnV0dG9uICR3LmJ1dHRvbnMubWVyZ2UgXAorCSR7TlN9OjpidXR0b24gJHcuYnV0dG9ucy5tZXJnZSBcCiAJCS10ZXh0IFttYyBNZXJnZV0gXAogCQktY29tbWFuZCAkX3N0YXJ0CiAJcGFjayAkdy5idXR0b25zLm1lcmdlIC1zaWRlIHJpZ2h0Ci0JYnV0dG9uICR3LmJ1dHRvbnMuY2FuY2VsIFwKKwkke05TfTo6YnV0dG9uICR3LmJ1dHRvbnMuY2FuY2VsIFwKIAkJLXRleHQgW21jICJDYW5jZWwiXSBcCiAJCS1jb21tYW5kIFtjYiBfY2FuY2VsXQogCXBhY2sgJHcuYnV0dG9ucy5jYW5jZWwgLXNpZGUgcmlnaHQgLXBhZHggNQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvb3B0aW9uLnRjbCBiL2dpdC1ndWkvbGliL29wdGlvbi50Y2wKaW5kZXggMWQ1NWI0OS4uZDRjNWU0NSAxMDA2NDQKLS0tIGEvZ2l0LWd1aS9saWIvb3B0aW9uLnRjbAorKysgYi9naXQtZ3VpL2xpYi9vcHRpb24udGNsCkBAIC05MSw3ICs5MSw3IEBACiBwcm9jIGRvX29wdGlvbnMge30gewogCWdsb2JhbCByZXBvX2NvbmZpZyBnbG9iYWxfY29uZmlnIGZvbnRfZGVzY3MKIAlnbG9iYWwgcmVwb19jb25maWdfbmV3IGdsb2JhbF9jb25maWdfbmV3Ci0JZ2xvYmFsIHVpX2NvbW1fc3BlbGwKKwlnbG9iYWwgdWlfY29tbV9zcGVsbCB1c2VfdHRrIE5TCiAKIAlhcnJheSB1bnNldCByZXBvX2NvbmZpZ19uZXcKIAlhcnJheSB1bnNldCBnbG9iYWxfY29uZmlnX25ldwpAQCAtMTEwLDI2ICsxMTAsMjggQEAKIAl9CiAKIAlzZXQgdyAub3B0aW9uc19lZGl0b3IKLQl0b3BsZXZlbCAkdworCURpYWxvZyAkdworCXdtIHdpdGhkcmF3ICR3CisJd20gdHJhbnNpZW50ICR3IFt3aW5mbyBwYXJlbnQgJHddCiAJd20gZ2VvbWV0cnkgJHcgIitbd2luZm8gcm9vdHggLl0rW3dpbmZvIHJvb3R5IC5dIgogCi0JZnJhbWUgJHcuYnV0dG9ucwotCWJ1dHRvbiAkdy5idXR0b25zLnJlc3RvcmUgLXRleHQgW21jICJSZXN0b3JlIERlZmF1bHRzIl0gXAorCSR7TlN9OjpmcmFtZSAkdy5idXR0b25zCisJJHtOU306OmJ1dHRvbiAkdy5idXR0b25zLnJlc3RvcmUgLXRleHQgW21jICJSZXN0b3JlIERlZmF1bHRzIl0gXAogCQktZGVmYXVsdCBub3JtYWwgXAogCQktY29tbWFuZCBkb19yZXN0b3JlX2RlZmF1bHRzCiAJcGFjayAkdy5idXR0b25zLnJlc3RvcmUgLXNpZGUgbGVmdAotCWJ1dHRvbiAkdy5idXR0b25zLnNhdmUgLXRleHQgW21jIFNhdmVdIFwKKwkke05TfTo6YnV0dG9uICR3LmJ1dHRvbnMuc2F2ZSAtdGV4dCBbbWMgU2F2ZV0gXAogCQktZGVmYXVsdCBhY3RpdmUgXAogCQktY29tbWFuZCBbbGlzdCBkb19zYXZlX2NvbmZpZyAkd10KIAlwYWNrICR3LmJ1dHRvbnMuc2F2ZSAtc2lkZSByaWdodAotCWJ1dHRvbiAkdy5idXR0b25zLmNhbmNlbCAtdGV4dCBbbWMgIkNhbmNlbCJdIFwKKwkke05TfTo6YnV0dG9uICR3LmJ1dHRvbnMuY2FuY2VsIC10ZXh0IFttYyAiQ2FuY2VsIl0gXAogCQktZGVmYXVsdCBub3JtYWwgXAogCQktY29tbWFuZCBbbGlzdCBkZXN0cm95ICR3XQogCXBhY2sgJHcuYnV0dG9ucy5jYW5jZWwgLXNpZGUgcmlnaHQgLXBhZHggNQogCXBhY2sgJHcuYnV0dG9ucyAtc2lkZSBib3R0b20gLWZpbGwgeCAtcGFkeSAxMCAtcGFkeCAxMAogCi0JbGFiZWxmcmFtZSAkdy5yZXBvIC10ZXh0IFttYyAiJXMgUmVwb3NpdG9yeSIgW3JlcG9uYW1lXV0KLQlsYWJlbGZyYW1lICR3Lmdsb2JhbCAtdGV4dCBbbWMgIkdsb2JhbCAoQWxsIFJlcG9zaXRvcmllcykiXQorCSR7TlN9OjpsYWJlbGZyYW1lICR3LnJlcG8gLXRleHQgW21jICIlcyBSZXBvc2l0b3J5IiBbcmVwb25hbWVdXQorCSR7TlN9OjpsYWJlbGZyYW1lICR3Lmdsb2JhbCAtdGV4dCBbbWMgIkdsb2JhbCAoQWxsIFJlcG9zaXRvcmllcykiXQogCXBhY2sgJHcucmVwbyAtc2lkZSBsZWZ0IC1maWxsIGJvdGggLWV4cGFuZCAxIC1wYWR5IDUgLXBhZHggNQogCXBhY2sgJHcuZ2xvYmFsIC1zaWRlIHJpZ2h0IC1maWxsIGJvdGggLWV4cGFuZCAxIC1wYWR5IDUgLXBhZHggNQogCkBAIC0xNjEsNyArMTYzLDcgQEAKIAkJZm9yZWFjaCBmIHtyZXBvIGdsb2JhbH0gewogCQkJc3dpdGNoIC1nbG9iIC0tICR0eXBlIHsKIAkJCWIgewotCQkJCWNoZWNrYnV0dG9uICR3LiRmLiRvcHRpZCAtdGV4dCAkdGV4dCBcCisJCQkJJHtOU306OmNoZWNrYnV0dG9uICR3LiRmLiRvcHRpZCAtdGV4dCAkdGV4dCBcCiAJCQkJCS12YXJpYWJsZSAke2Z9X2NvbmZpZ19uZXcoJG5hbWUpIFwKIAkJCQkJLW9udmFsdWUgdHJ1ZSBcCiAJCQkJCS1vZmZ2YWx1ZSBmYWxzZQpAQCAtMTY5LDEwICsxNzEsMTAgQEAKIAkJCX0KIAkJCWktKiB7CiAJCQkJcmVnZXhwIC0tIHstKFxkKylcLlwuKFxkKykkfSAkdHlwZSBfanVuayBtaW4gbWF4Ci0JCQkJZnJhbWUgJHcuJGYuJG9wdGlkCi0JCQkJbGFiZWwgJHcuJGYuJG9wdGlkLmwgLXRleHQgIiR0ZXh0OiIKKwkJCQkke05TfTo6ZnJhbWUgJHcuJGYuJG9wdGlkCisJCQkJJHtOU306OmxhYmVsICR3LiRmLiRvcHRpZC5sIC10ZXh0ICIkdGV4dDoiCiAJCQkJcGFjayAkdy4kZi4kb3B0aWQubCAtc2lkZSBsZWZ0IC1hbmNob3IgdyAtZmlsbCB4Ci0JCQkJc3BpbmJveCAkdy4kZi4kb3B0aWQudiBcCisJCQkJdHNwaW5ib3ggJHcuJGYuJG9wdGlkLnYgXAogCQkJCQktdGV4dHZhcmlhYmxlICR7Zn1fY29uZmlnX25ldygkbmFtZSkgXAogCQkJCQktZnJvbSAkbWluIFwKIAkJCQkJLXRvICRtYXggXApAQCAtMTg0LDExICsxODYsOSBAQAogCQkJfQogCQkJYyAtCiAJCQl0IHsKLQkJCQlmcmFtZSAkdy4kZi4kb3B0aWQKLQkJCQlsYWJlbCAkdy4kZi4kb3B0aWQubCAtdGV4dCAiJHRleHQ6IgotCQkJCWVudHJ5ICR3LiRmLiRvcHRpZC52IFwKLQkJCQkJLWJvcmRlcndpZHRoIDEgXAotCQkJCQktcmVsaWVmIHN1bmtlbiBcCisJCQkJJHtOU306OmZyYW1lICR3LiRmLiRvcHRpZAorCQkJCSR7TlN9OjpsYWJlbCAkdy4kZi4kb3B0aWQubCAtdGV4dCAiJHRleHQ6IgorCQkJCSR7TlN9OjplbnRyeSAkdy4kZi4kb3B0aWQudiBcCiAJCQkJCS13aWR0aCAyMCBcCiAJCQkJCS10ZXh0dmFyaWFibGUgJHtmfV9jb25maWdfbmV3KCRuYW1lKQogCQkJCXBhY2sgJHcuJGYuJG9wdGlkLmwgLXNpZGUgbGVmdCAtYW5jaG9yIHcKQEAgLTE5OSw3ICsxOTksNyBAQAogCQkJCQltZW51ICR3LiRmLiRvcHRpZC5tCiAJCQkJCWJ1aWxkX2VuY29kaW5nX21lbnUgJHcuJGYuJG9wdGlkLm0gXAogCQkJCQkJW2xpc3Qgc2V0ICR7Zn1fY29uZmlnX25ldygkbmFtZSldIDEKLQkJCQkJYnV0dG9uICR3LiRmLiRvcHRpZC5iIFwKKwkJCQkJJHtOU306OmJ1dHRvbiAkdy4kZi4kb3B0aWQuYiBcCiAJCQkJCQktdGV4dCBbbWMgIkNoYW5nZSJdIFwKIAkJCQkJCS1jb21tYW5kIFtsaXN0IHBvcHVwX2J0bl9tZW51IFwKIAkJCQkJCQkkdy4kZi4kb3B0aWQubSAkdy4kZi4kb3B0aWQuYl0KQEAgLTIyNiwxMSArMjI2LDE3IEBACiAJCQlzZXQgJHtmfV9jb25maWdfbmV3KGd1aS5zcGVsbGluZ2RpY3Rpb25hcnkpICR2YWx1ZQogCQl9CiAKLQkJZnJhbWUgJHcuJGYuJG9wdGlkCi0JCWxhYmVsICR3LiRmLiRvcHRpZC5sIC10ZXh0IFttYyAiU3BlbGxpbmcgRGljdGlvbmFyeToiXQotCQlldmFsIHRrX29wdGlvbk1lbnUgJHcuJGYuJG9wdGlkLnYgXAotCQkJJHtmfV9jb25maWdfbmV3KGd1aS5zcGVsbGluZ2RpY3Rpb25hcnkpIFwKLQkJCSRhbGxfZGljdHMKKwkJJHtOU306OmZyYW1lICR3LiRmLiRvcHRpZAorCQkke05TfTo6bGFiZWwgJHcuJGYuJG9wdGlkLmwgLXRleHQgW21jICJTcGVsbGluZyBEaWN0aW9uYXJ5OiJdCisJCWlmIHskdXNlX3R0a30geworCQkJdHRrOjpjb21ib2JveCAkdy4kZi4kb3B0aWQudiBcCisJCQkJLXRleHR2YXJpYWJsZSAke2Z9X2NvbmZpZ19uZXcoZ3VpLnNwZWxsaW5nZGljdGlvbmFyeSkgXAorCQkJCS12YWx1ZXMgJGFsbF9kaWN0cyAtc3RhdGUgcmVhZG9ubHkKKwkJfSBlbHNlIHsKKwkJCWV2YWwgdGtfb3B0aW9uTWVudSAkdy4kZi4kb3B0aWQudiBcCisJCQkJJHtmfV9jb25maWdfbmV3KGd1aS5zcGVsbGluZ2RpY3Rpb25hcnkpIFwKKwkJCQkkYWxsX2RpY3RzCisJCX0KIAkJcGFjayAkdy4kZi4kb3B0aWQubCAtc2lkZSBsZWZ0IC1hbmNob3IgdyAtZmlsbCB4CiAJCXBhY2sgJHcuJGYuJG9wdGlkLnYgLXNpZGUgcmlnaHQgLWFuY2hvciBlIC1wYWR4IDUKIAkJcGFjayAkdy4kZi4kb3B0aWQgLXNpZGUgdG9wIC1hbmNob3IgdyAtZmlsbCB4CkBAIC0yNDgsMjAgKzI1NCwyMCBAQAogCQlzZXQgZ2xvYmFsX2NvbmZpZ19uZXcoZ3VpLiRmb250Xl5zaXplKSBcCiAJCQlbZm9udCBjb25maWd1cmUgJGZvbnQgLXNpemVdCiAKLQkJZnJhbWUgJHcuZ2xvYmFsLiRuYW1lCi0JCWxhYmVsICR3Lmdsb2JhbC4kbmFtZS5sIC10ZXh0ICIkdGV4dDoiCi0JCWJ1dHRvbiAkdy5nbG9iYWwuJG5hbWUuYiBcCisJCSR7TlN9OjpmcmFtZSAkdy5nbG9iYWwuJG5hbWUKKwkJJHtOU306OmxhYmVsICR3Lmdsb2JhbC4kbmFtZS5sIC10ZXh0ICIkdGV4dDoiCisJCSR7TlN9OjpidXR0b24gJHcuZ2xvYmFsLiRuYW1lLmIgXAogCQkJLXRleHQgW21jICJDaGFuZ2UgRm9udCJdIFwKIAkJCS1jb21tYW5kIFtsaXN0IFwKLQkJCQljaG9vc2VfZm9udDo6cGljayBcCisJCQkJdGNob29zZWZvbnQgXAogCQkJCSR3IFwKIAkJCQlbbWMgIkNob29zZSAlcyIgJHRleHRdIFwKIAkJCQlnbG9iYWxfY29uZmlnX25ldyhndWkuJGZvbnReXmZhbWlseSkgXAogCQkJCWdsb2JhbF9jb25maWdfbmV3KGd1aS4kZm9udF5ec2l6ZSkgXAogCQkJCV0KLQkJbGFiZWwgJHcuZ2xvYmFsLiRuYW1lLmYgLXRleHR2YXJpYWJsZSBnbG9iYWxfY29uZmlnX25ldyhndWkuJGZvbnReXmZhbWlseSkKLQkJbGFiZWwgJHcuZ2xvYmFsLiRuYW1lLnMgLXRleHR2YXJpYWJsZSBnbG9iYWxfY29uZmlnX25ldyhndWkuJGZvbnReXnNpemUpCi0JCWxhYmVsICR3Lmdsb2JhbC4kbmFtZS5wdCAtdGV4dCBbbWMgInB0LiJdCisJCSR7TlN9OjpsYWJlbCAkdy5nbG9iYWwuJG5hbWUuZiAtdGV4dHZhcmlhYmxlIGdsb2JhbF9jb25maWdfbmV3KGd1aS4kZm9udF5eZmFtaWx5KQorCQkke05TfTo6bGFiZWwgJHcuZ2xvYmFsLiRuYW1lLnMgLXRleHR2YXJpYWJsZSBnbG9iYWxfY29uZmlnX25ldyhndWkuJGZvbnReXnNpemUpCisJCSR7TlN9OjpsYWJlbCAkdy5nbG9iYWwuJG5hbWUucHQgLXRleHQgW21jICJwdC4iXQogCQlwYWNrICR3Lmdsb2JhbC4kbmFtZS5sIC1zaWRlIGxlZnQgLWFuY2hvciB3CiAJCXBhY2sgJHcuZ2xvYmFsLiRuYW1lLmIgLXNpZGUgcmlnaHQgLWFuY2hvciBlCiAJCXBhY2sgJHcuZ2xvYmFsLiRuYW1lLnB0IC1zaWRlIHJpZ2h0IC1hbmNob3IgdwpAQCAtMjgwLDYgKzI4Niw3IEBACiAJCXNldCB0IFttYyAiT3B0aW9ucyJdCiAJfQogCXdtIHRpdGxlICR3ICJbYXBwbmFtZV0gKFtyZXBvbmFtZV0pOiAkdCIKKwl3bSBkZWljb25pZnkgJHcKIAl0a3dhaXQgd2luZG93ICR3CiB9CiAKZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL3JlbW90ZV9hZGQudGNsIGIvZ2l0LWd1aS9saWIvcmVtb3RlX2FkZC50Y2wKaW5kZXggZmIyOTQyMi4uNTAwMjlkMCAxMDA2NDQKLS0tIGEvZ2l0LWd1aS9saWIvcmVtb3RlX2FkZC50Y2wKKysrIGIvZ2l0LWd1aS9saWIvcmVtb3RlX2FkZC50Y2wKQEAgLTEzLDQ1ICsxMyw0MyBAQAogZmllbGQgb3B0X2FjdGlvbiBmZXRjaDsgIyBhY3Rpb24gdG8gZG8gYWZ0ZXIgcmVnaXN0ZXJpbmcgdGhlIHJlbW90ZSBsb2NhbGx5CiAKIGNvbnN0cnVjdG9yIGRpYWxvZyB7fSB7Ci0JZ2xvYmFsIHJlcG9fY29uZmlnCisJZ2xvYmFsIHJlcG9fY29uZmlnIHVzZV90dGsgTlMKIAotCW1ha2VfdG9wbGV2ZWwgdG9wIHcKKwltYWtlX2RpYWxvZyB0b3AgdworCXdtIHdpdGhkcmF3ICR0b3AKIAl3bSB0aXRsZSAkdG9wIFthcHBlbmQgIlthcHBuYW1lXSAoW3JlcG9uYW1lXSk6ICIgW21jICJBZGQgUmVtb3RlIl1dCiAJaWYgeyR0b3AgbmUgey59fSB7CiAJCXdtIGdlb21ldHJ5ICR0b3AgIitbd2luZm8gcm9vdHggLl0rW3dpbmZvIHJvb3R5IC5dIgogCX0KIAotCWxhYmVsICR3LmhlYWRlciAtdGV4dCBbbWMgIkFkZCBOZXcgUmVtb3RlIl0gLWZvbnQgZm9udF91aWJvbGQKKwkke05TfTo6bGFiZWwgJHcuaGVhZGVyIC10ZXh0IFttYyAiQWRkIE5ldyBSZW1vdGUiXSBcCisJCS1mb250IGZvbnRfdWlib2xkIC1hbmNob3IgY2VudGVyCiAJcGFjayAkdy5oZWFkZXIgLXNpZGUgdG9wIC1maWxsIHgKIAotCWZyYW1lICR3LmJ1dHRvbnMKLQlidXR0b24gJHcuYnV0dG9ucy5jcmVhdGUgLXRleHQgW21jIEFkZF0gXAorCSR7TlN9OjpmcmFtZSAkdy5idXR0b25zCisJJHtOU306OmJ1dHRvbiAkdy5idXR0b25zLmNyZWF0ZSAtdGV4dCBbbWMgQWRkXSBcCiAJCS1kZWZhdWx0IGFjdGl2ZSBcCiAJCS1jb21tYW5kIFtjYiBfYWRkXQogCXBhY2sgJHcuYnV0dG9ucy5jcmVhdGUgLXNpZGUgcmlnaHQKLQlidXR0b24gJHcuYnV0dG9ucy5jYW5jZWwgLXRleHQgW21jIENhbmNlbF0gXAorCSR7TlN9OjpidXR0b24gJHcuYnV0dG9ucy5jYW5jZWwgLXRleHQgW21jIENhbmNlbF0gXAogCQktY29tbWFuZCBbbGlzdCBkZXN0cm95ICR3XQogCXBhY2sgJHcuYnV0dG9ucy5jYW5jZWwgLXNpZGUgcmlnaHQgLXBhZHggNQogCXBhY2sgJHcuYnV0dG9ucyAtc2lkZSBib3R0b20gLWZpbGwgeCAtcGFkeSAxMCAtcGFkeCAxMAogCi0JbGFiZWxmcmFtZSAkdy5kZXNjIC10ZXh0IFttYyAiUmVtb3RlIERldGFpbHMiXQorCSR7TlN9OjpsYWJlbGZyYW1lICR3LmRlc2MgLXRleHQgW21jICJSZW1vdGUgRGV0YWlscyJdCiAKLQlsYWJlbCAkdy5kZXNjLm5hbWVfbCAtdGV4dCBbbWMgIk5hbWU6Il0KKwkke05TfTo6bGFiZWwgJHcuZGVzYy5uYW1lX2wgLXRleHQgW21jICJOYW1lOiJdCiAJc2V0IHdfbmFtZSAkdy5kZXNjLm5hbWVfdAotCWVudHJ5ICR3X25hbWUgXAotCQktYm9yZGVyd2lkdGggMSBcCi0JCS1yZWxpZWYgc3Vua2VuIFwKKwkke05TfTo6ZW50cnkgJHdfbmFtZSBcCiAJCS13aWR0aCA0MCBcCiAJCS10ZXh0dmFyaWFibGUgQG5hbWUgXAogCQktdmFsaWRhdGUga2V5IFwKIAkJLXZhbGlkYXRlY29tbWFuZCBbY2IgX3ZhbGlkYXRlX25hbWUgJWQgJVNdCiAJZ3JpZCAkdy5kZXNjLm5hbWVfbCAkd19uYW1lIC1zdGlja3kgd2UgLXBhZHggezAgNX0KIAotCWxhYmVsICR3LmRlc2MubG9jX2wgLXRleHQgW21jICJMb2NhdGlvbjoiXQorCSR7TlN9OjpsYWJlbCAkdy5kZXNjLmxvY19sIC10ZXh0IFttYyAiTG9jYXRpb246Il0KIAlzZXQgd19sb2MgJHcuZGVzYy5sb2NfdAotCWVudHJ5ICR3X2xvYyBcCi0JCS1ib3JkZXJ3aWR0aCAxIFwKLQkJLXJlbGllZiBzdW5rZW4gXAorCSR7TlN9OjplbnRyeSAkd19sb2MgXAogCQktd2lkdGggNDAgXAogCQktdGV4dHZhcmlhYmxlIEBsb2NhdGlvbgogCWdyaWQgJHcuZGVzYy5sb2NfbCAkd19sb2MgLXN0aWNreSB3ZSAtcGFkeCB7MCA1fQpAQCAtNTksMjEgKzU3LDIxIEBACiAJZ3JpZCBjb2x1bW5jb25maWd1cmUgJHcuZGVzYyAxIC13ZWlnaHQgMQogCXBhY2sgJHcuZGVzYyAtYW5jaG9yIG53IC1maWxsIHggLXBhZHkgNSAtcGFkeCA1CiAKLQlsYWJlbGZyYW1lICR3LmFjdGlvbiAtdGV4dCBbbWMgIkZ1cnRoZXIgQWN0aW9uIl0KKwkke05TfTo6bGFiZWxmcmFtZSAkdy5hY3Rpb24gLXRleHQgW21jICJGdXJ0aGVyIEFjdGlvbiJdCiAKLQlyYWRpb2J1dHRvbiAkdy5hY3Rpb24uZmV0Y2ggXAorCSR7TlN9OjpyYWRpb2J1dHRvbiAkdy5hY3Rpb24uZmV0Y2ggXAogCQktdGV4dCBbbWMgIkZldGNoIEltbWVkaWF0ZWx5Il0gXAogCQktdmFsdWUgZmV0Y2ggXAogCQktdmFyaWFibGUgQG9wdF9hY3Rpb24KIAlwYWNrICR3LmFjdGlvbi5mZXRjaCAtYW5jaG9yIG53CiAKLQlyYWRpb2J1dHRvbiAkdy5hY3Rpb24ucHVzaCBcCisJJHtOU306OnJhZGlvYnV0dG9uICR3LmFjdGlvbi5wdXNoIFwKIAkJLXRleHQgW21jICJJbml0aWFsaXplIFJlbW90ZSBSZXBvc2l0b3J5IGFuZCBQdXNoIl0gXAogCQktdmFsdWUgcHVzaCBcCiAJCS12YXJpYWJsZSBAb3B0X2FjdGlvbgogCXBhY2sgJHcuYWN0aW9uLnB1c2ggLWFuY2hvciBudwogCi0JcmFkaW9idXR0b24gJHcuYWN0aW9uLm5vbmUgXAorCSR7TlN9OjpyYWRpb2J1dHRvbiAkdy5hY3Rpb24ubm9uZSBcCiAJCS10ZXh0IFttYyAiRG8gTm90aGluZyBFbHNlIE5vdyJdIFwKIAkJLXZhbHVlIG5vbmUgXAogCQktdmFyaWFibGUgQG9wdF9hY3Rpb24KQEAgLTg1LDYgKzgzLDcgQEAKIAliaW5kICR3IDxWaXNpYmlsaXR5PiBbY2IgX3Zpc2libGVdCiAJYmluZCAkdyA8S2V5LUVzY2FwZT4gW2xpc3QgZGVzdHJveSAkd10KIAliaW5kICR3IDxLZXktUmV0dXJuPiBbY2IgX2FkZF1cO2JyZWFrCisJd20gZGVpY29uaWZ5ICR0b3AKIAl0a3dhaXQgd2luZG93ICR3CiB9CiAKZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbCBiL2dpdC1ndWkvbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbAppbmRleCA0ZTAyZmMwLi5mODcyYTNkIDEwMDY0NAotLS0gYS9naXQtZ3VpL2xpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2wKKysrIGIvZ2l0LWd1aS9saWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsCkBAIC0yMywzNCArMjMsNDAgQEAKIGZpZWxkIGNhY2hlZAogCiBjb25zdHJ1Y3RvciBkaWFsb2cge30gewotCWdsb2JhbCBhbGxfcmVtb3RlcyBNMUIKKwlnbG9iYWwgYWxsX3JlbW90ZXMgTTFCIHVzZV90dGsgTlMKIAotCW1ha2VfdG9wbGV2ZWwgdG9wIHcKKwltYWtlX2RpYWxvZyB0b3AgdwogCXdtIHRpdGxlICR0b3AgW2FwcGVuZCAiW2FwcG5hbWVdIChbcmVwb25hbWVdKTogIiBbbWMgIkRlbGV0ZSBCcmFuY2ggUmVtb3RlbHkiXV0KIAlpZiB7JHRvcCBuZSB7Ln19IHsKIAkJd20gZ2VvbWV0cnkgJHRvcCAiK1t3aW5mbyByb290eCAuXStbd2luZm8gcm9vdHkgLl0iCiAJfQogCi0JbGFiZWwgJHcuaGVhZGVyIC10ZXh0IFttYyAiRGVsZXRlIEJyYW5jaCBSZW1vdGVseSJdIC1mb250IGZvbnRfdWlib2xkCisJJHtOU306OmxhYmVsICR3LmhlYWRlciAtdGV4dCBbbWMgIkRlbGV0ZSBCcmFuY2ggUmVtb3RlbHkiXSBcCisJCS1mb250IGZvbnRfdWlib2xkIC1hbmNob3IgY2VudGVyCiAJcGFjayAkdy5oZWFkZXIgLXNpZGUgdG9wIC1maWxsIHgKIAotCWZyYW1lICR3LmJ1dHRvbnMKLQlidXR0b24gJHcuYnV0dG9ucy5kZWxldGUgLXRleHQgW21jIERlbGV0ZV0gXAorCSR7TlN9OjpmcmFtZSAkdy5idXR0b25zCisJJHtOU306OmJ1dHRvbiAkdy5idXR0b25zLmRlbGV0ZSAtdGV4dCBbbWMgRGVsZXRlXSBcCiAJCS1kZWZhdWx0IGFjdGl2ZSBcCiAJCS1jb21tYW5kIFtjYiBfZGVsZXRlXQogCXBhY2sgJHcuYnV0dG9ucy5kZWxldGUgLXNpZGUgcmlnaHQKLQlidXR0b24gJHcuYnV0dG9ucy5jYW5jZWwgLXRleHQgW21jICJDYW5jZWwiXSBcCisJJHtOU306OmJ1dHRvbiAkdy5idXR0b25zLmNhbmNlbCAtdGV4dCBbbWMgIkNhbmNlbCJdIFwKIAkJLWNvbW1hbmQgW2xpc3QgZGVzdHJveSAkd10KIAlwYWNrICR3LmJ1dHRvbnMuY2FuY2VsIC1zaWRlIHJpZ2h0IC1wYWR4IDUKIAlwYWNrICR3LmJ1dHRvbnMgLXNpZGUgYm90dG9tIC1maWxsIHggLXBhZHkgMTAgLXBhZHggMTAKIAotCWxhYmVsZnJhbWUgJHcuZGVzdCAtdGV4dCBbbWMgIkZyb20gUmVwb3NpdG9yeSJdCisJJHtOU306OmxhYmVsZnJhbWUgJHcuZGVzdCAtdGV4dCBbbWMgIkZyb20gUmVwb3NpdG9yeSJdCiAJaWYgeyRhbGxfcmVtb3RlcyBuZSB7fX0gewotCQlyYWRpb2J1dHRvbiAkdy5kZXN0LnJlbW90ZV9yIFwKKwkJJHtOU306OnJhZGlvYnV0dG9uICR3LmRlc3QucmVtb3RlX3IgXAogCQkJLXRleHQgW21jICJSZW1vdGU6Il0gXAogCQkJLXZhbHVlIHJlbW90ZSBcCiAJCQktdmFyaWFibGUgQHVybHR5cGUKLQkJZXZhbCB0a19vcHRpb25NZW51ICR3LmRlc3QucmVtb3RlX20gQHJlbW90ZSAkYWxsX3JlbW90ZXMKKwkJaWYgeyR1c2VfdHRrfSB7CisJCQl0dGs6OmNvbWJvYm94ICR3LmRlc3QucmVtb3RlX20gLXRleHR2YXJpYWJsZSBAcmVtb3RlIFwKKwkJCQktdmFsdWVzICRhbGxfcmVtb3RlcyAtc3RhdGUgcmVhZG9ubHkKKwkJfSBlbHNlIHsKKwkJCWV2YWwgdGtfb3B0aW9uTWVudSAkdy5kZXN0LnJlbW90ZV9tIEByZW1vdGUgJGFsbF9yZW1vdGVzCisJCX0KIAkJZ3JpZCAkdy5kZXN0LnJlbW90ZV9yICR3LmRlc3QucmVtb3RlX20gLXN0aWNreSB3CiAJCWlmIHtbbHNlYXJjaCAtc29ydGVkIC1leGFjdCAkYWxsX3JlbW90ZXMgb3JpZ2luXSAhPSAtMX0gewogCQkJc2V0IHJlbW90ZSBvcmlnaW4KQEAgLTYyLDEzICs2OCwxMSBAQAogCX0gZWxzZSB7CiAJCXNldCB1cmx0eXBlIHVybAogCX0KLQlyYWRpb2J1dHRvbiAkdy5kZXN0LnVybF9yIFwKKwkke05TfTo6cmFkaW9idXR0b24gJHcuZGVzdC51cmxfciBcCiAJCS10ZXh0IFttYyAiQXJiaXRyYXJ5IExvY2F0aW9uOiJdIFwKIAkJLXZhbHVlIHVybCBcCiAJCS12YXJpYWJsZSBAdXJsdHlwZQotCWVudHJ5ICR3LmRlc3QudXJsX3QgXAotCQktYm9yZGVyd2lkdGggMSBcCi0JCS1yZWxpZWYgc3Vua2VuIFwKKwkke05TfTo6ZW50cnkgJHcuZGVzdC51cmxfdCBcCiAJCS13aWR0aCA1MCBcCiAJCS10ZXh0dmFyaWFibGUgQHVybCBcCiAJCS12YWxpZGF0ZSBrZXkgXApAQCAtODEsMzMgKzg1LDMwIEBACiAJZ3JpZCBjb2x1bW5jb25maWd1cmUgJHcuZGVzdCAxIC13ZWlnaHQgMQogCXBhY2sgJHcuZGVzdCAtYW5jaG9yIG53IC1maWxsIHggLXBhZHkgNSAtcGFkeCA1CiAKLQlsYWJlbGZyYW1lICR3LmhlYWRzIC10ZXh0IFttYyAiQnJhbmNoZXMiXQotCWxpc3Rib3ggJHcuaGVhZHMubCBcCisJJHtOU306OmxhYmVsZnJhbWUgJHcuaGVhZHMgLXRleHQgW21jICJCcmFuY2hlcyJdCisJc2xpc3Rib3ggJHcuaGVhZHMubCBcCiAJCS1oZWlnaHQgMTAgXAogCQktd2lkdGggNzAgXAogCQktbGlzdHZhcmlhYmxlIEBoZWFkX2xpc3QgXAotCQktc2VsZWN0bW9kZSBleHRlbmRlZCBcCi0JCS15c2Nyb2xsY29tbWFuZCBbbGlzdCAkdy5oZWFkcy5zYnkgc2V0XQotCXNjcm9sbGJhciAkdy5oZWFkcy5zYnkgLWNvbW1hbmQgW2xpc3QgJHcuaGVhZHMubCB5dmlld10KKwkJLXNlbGVjdG1vZGUgZXh0ZW5kZWQKIAotCWZyYW1lICR3LmhlYWRzLmZvb3RlcgotCWxhYmVsICR3LmhlYWRzLmZvb3Rlci5zdGF0dXMgXAorCSR7TlN9OjpmcmFtZSAkdy5oZWFkcy5mb290ZXIKKwkke05TfTo6bGFiZWwgJHcuaGVhZHMuZm9vdGVyLnN0YXR1cyBcCiAJCS10ZXh0dmFyaWFibGUgQHN0YXR1cyBcCiAJCS1hbmNob3IgdyBcCiAJCS1qdXN0aWZ5IGxlZnQKLQlidXR0b24gJHcuaGVhZHMuZm9vdGVyLnJlc2NhbiBcCisJJHtOU306OmJ1dHRvbiAkdy5oZWFkcy5mb290ZXIucmVzY2FuIFwKIAkJLXRleHQgW21jICJSZXNjYW4iXSBcCiAJCS1jb21tYW5kIFtjYiBfcmVzY2FuXQogCXBhY2sgJHcuaGVhZHMuZm9vdGVyLnN0YXR1cyAtc2lkZSBsZWZ0IC1maWxsIHgKIAlwYWNrICR3LmhlYWRzLmZvb3Rlci5yZXNjYW4gLXNpZGUgcmlnaHQKIAogCXBhY2sgJHcuaGVhZHMuZm9vdGVyIC1zaWRlIGJvdHRvbSAtZmlsbCB4Ci0JcGFjayAkdy5oZWFkcy5zYnkgLXNpZGUgcmlnaHQgLWZpbGwgeQogCXBhY2sgJHcuaGVhZHMubCAtc2lkZSBsZWZ0IC1maWxsIGJvdGggLWV4cGFuZCAxCiAJcGFjayAkdy5oZWFkcyAtZmlsbCBib3RoIC1leHBhbmQgMSAtcGFkeSA1IC1wYWR4IDUKIAotCWxhYmVsZnJhbWUgJHcudmFsaWRhdGUgLXRleHQgW21jICJEZWxldGUgT25seSBJZiJdCi0JcmFkaW9idXR0b24gJHcudmFsaWRhdGUuaGVhZF9yIFwKKwkke05TfTo6bGFiZWxmcmFtZSAkdy52YWxpZGF0ZSAtdGV4dCBbbWMgIkRlbGV0ZSBPbmx5IElmIl0KKwkke05TfTo6cmFkaW9idXR0b24gJHcudmFsaWRhdGUuaGVhZF9yIFwKIAkJLXRleHQgW21jICJNZXJnZWQgSW50bzoiXSBcCiAJCS12YWx1ZSBoZWFkIFwKIAkJLXZhcmlhYmxlIEBjaGVja3R5cGUKQEAgLTExNSw3ICsxMTYsNyBAQAogCXRyYWNlIGFkZCB2YXJpYWJsZSBAaGVhZF9saXN0IHdyaXRlIFtjYiBfd3JpdGVfaGVhZF9saXN0XQogCXRyYWNlIGFkZCB2YXJpYWJsZSBAY2hlY2tfaGVhZCB3cml0ZSBbY2IgX3dyaXRlX2NoZWNrX2hlYWRdCiAJZ3JpZCAkdy52YWxpZGF0ZS5oZWFkX3IgJHcudmFsaWRhdGUuaGVhZF9tIC1zdGlja3kgdwotCXJhZGlvYnV0dG9uICR3LnZhbGlkYXRlLmFsd2F5c19yIFwKKwkke05TfTo6cmFkaW9idXR0b24gJHcudmFsaWRhdGUuYWx3YXlzX3IgXAogCQktdGV4dCBbbWMgIkFsd2F5cyAoRG8gbm90IHBlcmZvcm0gbWVyZ2UgY2hlY2tzKSJdIFwKIAkJLXZhbHVlIGFsd2F5cyBcCiAJCS12YXJpYWJsZSBAY2hlY2t0eXBlCkBAIC0yMDgsMTMgKzIwOSwxNSBAQAogCQlyZXR1cm4KIAl9CiAKLQlpZiB7W3RrX21lc3NhZ2VCb3ggXAotCQktaWNvbiB3YXJuaW5nIFwKLQkJLXR5cGUgeWVzbm8gXAotCQktdGl0bGUgW3dtIHRpdGxlICR3XSBcCi0JCS1wYXJlbnQgJHcgXAotCQktbWVzc2FnZSBbbWMgIlJlY292ZXJpbmcgZGVsZXRlZCBicmFuY2hlcyBpcyBkaWZmaWN1bHQuXG5cbkRlbGV0ZSB0aGUgc2VsZWN0ZWQgYnJhbmNoZXM/Il1dIG5lIHllc30gewotCQlyZXR1cm4KKwlpZiB7JGNoZWNrdHlwZSBuZSB7aGVhZH19IHsKKwkJaWYge1t0a19tZXNzYWdlQm94IFwKKwkJCS1pY29uIHdhcm5pbmcgXAorCQkJLXR5cGUgeWVzbm8gXAorCQkJLXRpdGxlIFt3bSB0aXRsZSAkd10gXAorCQkJLXBhcmVudCAkdyBcCisJCQktbWVzc2FnZSBbbWMgIlJlY292ZXJpbmcgZGVsZXRlZCBicmFuY2hlcyBpcyBkaWZmaWN1bHQuXG5cbkRlbGV0ZSB0aGUgc2VsZWN0ZWQgYnJhbmNoZXM/Il1dIG5lIHllc30geworCQkJcmV0dXJuCisJCX0KIAl9CiAKIAlkZXN0cm95ICR3CkBAIC0yNDgsNiArMjUxLDggQEAKIG1ldGhvZCBfd3JpdGVfY2hlY2tfaGVhZCB7YXJnc30geyBzZXQgY2hlY2t0eXBlIGhlYWQgfQogCiBtZXRob2QgX3dyaXRlX2hlYWRfbGlzdCB7YXJnc30geworCWdsb2JhbCBjdXJyZW50X2JyYW5jaAorCiAJJGhlYWRfbSBkZWxldGUgMCBlbmQKIAlmb3JlYWNoIGFiciAkaGVhZF9saXN0IHsKIAkJJGhlYWRfbSBpbnNlcnQgZW5kIHJhZGlvYnV0dG9uIFwKQEAgLTI1Niw3ICsyNjEsMTEgQEAKIAkJCS12YXJpYWJsZSBAY2hlY2tfaGVhZAogCX0KIAlpZiB7W2xzZWFyY2ggLWV4YWN0IC1zb3J0ZWQgJGhlYWRfbGlzdCAkY2hlY2tfaGVhZF0gPCAwfSB7Ci0JCXNldCBjaGVja19oZWFkIHt9CisJCWlmIHtbbHNlYXJjaCAtZXhhY3QgLXNvcnRlZCAkaGVhZF9saXN0ICRjdXJyZW50X2JyYW5jaF0gPCAwfSB7CisJCQlzZXQgY2hlY2tfaGVhZCB7fQorCQl9IGVsc2UgeworCQkJc2V0IGNoZWNrX2hlYWQgJGN1cnJlbnRfYnJhbmNoCisJCX0KIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL3NlYXJjaC50Y2wgYi9naXQtZ3VpL2xpYi9zZWFyY2gudGNsCmluZGV4IGIzNzFlOWEuLjdmZGJmODcgMTAwNjQ0Ci0tLSBhL2dpdC1ndWkvbGliL3NlYXJjaC50Y2wKKysrIGIvZ2l0LWd1aS9saWIvc2VhcmNoLnRjbApAQCAtMTQsMTUgKzE0LDE2IEBACiBmaWVsZCBzbWFya2JvdAogCiBjb25zdHJ1Y3RvciBuZXcge2lfdyBpX3RleHQgYXJnc30geworCWdsb2JhbCB1c2VfdHRrIE5TCiAJc2V0IHcgICAgICAkaV93CiAJc2V0IGN0ZXh0ICAkaV90ZXh0CiAKLQlmcmFtZSAgJHcKLQlsYWJlbCAgJHcubCAgICAgICAtdGV4dCBbbWMgRmluZDpdCisJJHtOU306OmZyYW1lICAkdworCSR7TlN9OjpsYWJlbCAgJHcubCAgICAgICAtdGV4dCBbbWMgRmluZDpdCiAJZW50cnkgICR3LmVudCAtdGV4dHZhcmlhYmxlICR7X190aGlzfTo6c2VhcmNoc3RyaW5nIC1iYWNrZ3JvdW5kIGxpZ2h0Z3JlZW4KLQlidXR0b24gJHcuYm4gICAgICAtdGV4dCBbbWMgTmV4dF0gLWNvbW1hbmQgW2NiIGZpbmRfbmV4dF0KLQlidXR0b24gJHcuYnAgICAgICAtdGV4dCBbbWMgUHJldl0gLWNvbW1hbmQgW2NiIGZpbmRfcHJldl0KLQljaGVja2J1dHRvbiAkdy5jcyAtdGV4dCBbbWMgQ2FzZS1TZW5zaXRpdmVdIFwKKwkke05TfTo6YnV0dG9uICR3LmJuICAgICAgLXRleHQgW21jIE5leHRdIC1jb21tYW5kIFtjYiBmaW5kX25leHRdCisJJHtOU306OmJ1dHRvbiAkdy5icCAgICAgIC10ZXh0IFttYyBQcmV2XSAtY29tbWFuZCBbY2IgZmluZF9wcmV2XQorCSR7TlN9OjpjaGVja2J1dHRvbiAkdy5jcyAtdGV4dCBbbWMgQ2FzZS1TZW5zaXRpdmVdIFwKIAkJLXZhcmlhYmxlICR7X190aGlzfTo6Y2FzZXNlbnNpdGl2ZSAtY29tbWFuZCBbY2IgX2luY3JzZWFyY2hdCiAJcGFjayAgICR3LmwgICAtc2lkZSBsZWZ0CiAJcGFjayAgICR3LmNzICAtc2lkZSByaWdodApkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvc2hvcnRjdXQudGNsIGIvZ2l0LWd1aS9saWIvc2hvcnRjdXQudGNsCmluZGV4IDJmMjBlYjMuLjc5YzE4ODggMTAwNjQ0Ci0tLSBhL2dpdC1ndWkvbGliL3Nob3J0Y3V0LnRjbAorKysgYi9naXQtZ3VpL2xpYi9zaG9ydGN1dC50Y2wKQEAgLTIsNiArMiw3IEBACiAjIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBTaGF3biBQZWFyY2UKIAogcHJvYyBkb193aW5kb3dzX3Nob3J0Y3V0IHt9IHsKKwlnbG9iYWwgX2dpdHdvcmt0cmVlCiAJc2V0IGZuIFt0a19nZXRTYXZlRmlsZSBcCiAJCS1wYXJlbnQgLiBcCiAJCS10aXRsZSBbYXBwZW5kICJbYXBwbmFtZV0gKFtyZXBvbmFtZV0pOiAiIFttYyAiQ3JlYXRlIERlc2t0b3AgSWNvbiJdXSBcCkBAIC0xNSw3ICsxNiw3IEBACiAJCQkJCVtpbmZvIG5hbWVvZmV4ZWN1dGFibGVdIFwKIAkJCQkJW2ZpbGUgbm9ybWFsaXplICQ6OmFyZ3YwXSBcCiAJCQkJCV0gXAotCQkJCQlbZmlsZSBkaXJuYW1lIFtmaWxlIG5vcm1hbGl6ZSBbZ2l0ZGlyXV1dCisJCQkJCVtmaWxlIG5vcm1hbGl6ZSBbJF9naXR3b3JrdHJlZV1dCiAJCQl9IGVycl19IHsKIAkJCWVycm9yX3BvcHVwIFtzdHJjYXQgW21jICJDYW5ub3Qgd3JpdGUgc2hvcnRjdXQ6Il0gIlxuXG4kZXJyIl0KIAkJfQpAQCAtMjMsNyArMjQsNyBAQAogfQogCiBwcm9jIGRvX2N5Z3dpbl9zaG9ydGN1dCB7fSB7Ci0JZ2xvYmFsIGFyZ3YwCisJZ2xvYmFsIGFyZ3YwIF9naXR3b3JrdHJlZQogCiAJaWYge1tjYXRjaCB7CiAJCXNldCBkZXNrdG9wIFtleGVjIGN5Z3BhdGggXApAQCAtNTYsNyArNTcsNyBAQAogCQkJCQkkc2ggLWMgXAogCQkJCQkiQ0hFUkVfSU5WT0tJTkc9MSBzb3VyY2UgL2V0Yy9wcm9maWxlO1tzcSAkbWVdICYiIFwKIAkJCQkJXSBcCi0JCQkJCVtmaWxlIGRpcm5hbWUgW2ZpbGUgbm9ybWFsaXplIFtnaXRkaXJdXV0KKwkJCQkJW2ZpbGUgbm9ybWFsaXplIFskX2dpdHdvcmt0cmVlXV0KIAkJCX0gZXJyXX0gewogCQkJZXJyb3JfcG9wdXAgW3N0cmNhdCBbbWMgIkNhbm5vdCB3cml0ZSBzaG9ydGN1dDoiXSAiXG5cbiRlcnIiXQogCQl9CmRpZmYgLS1naXQgYS9naXQtZ3VpL2xpYi9zc2hrZXkudGNsIGIvZ2l0LWd1aS9saWIvc3Noa2V5LnRjbAppbmRleCA4MmExYTgwLi41Zjc1YmM5IDEwMDY0NAotLS0gYS9naXQtZ3VpL2xpYi9zc2hrZXkudGNsCisrKyBiL2dpdC1ndWkvbGliL3NzaGtleS50Y2wKQEAgLTE1LDcgKzE1LDcgQEAKIH0KIAogcHJvYyBkb19zc2hfa2V5IHt9IHsKLQlnbG9iYWwgc3Noa2V5X3RpdGxlIGhhdmVfdGs4NSBzc2hrZXlfZmQKKwlnbG9iYWwgc3Noa2V5X3RpdGxlIGhhdmVfdGs4NSBzc2hrZXlfZmQgdXNlX3R0ayBOUwogCiAJc2V0IHcgLnNzaGtleV9kaWFsb2cKIAlpZiB7W3dpbmZvIGV4aXN0cyAkd119IHsKQEAgLTIzLDcgKzIzLDcgQEAKIAkJcmV0dXJuCiAJfQogCi0JdG9wbGV2ZWwgJHcKKwlEaWFsb2cgJHcKIAl3bSB0cmFuc2llbnQgJHcgLgogCiAJc2V0IGZpbmZvIFtmaW5kX3NzaF9rZXldCkBAIC0zNSw5ICszNSw5IEBACiAJCXNldCBnZW5fc3RhdGUgICBkaXNhYmxlZAogCX0KIAotCWZyYW1lICR3LmhlYWRlciAtcmVsaWVmIGZsYXQKLQlsYWJlbCAkdy5oZWFkZXIubGJsIC10ZXh0dmFyaWFibGUgc3Noa2V5X3RpdGxlIC1hbmNob3IgdwotCWJ1dHRvbiAkdy5oZWFkZXIuZ2VuIC10ZXh0IFttYyAiR2VuZXJhdGUgS2V5Il0gXAorCSR7TlN9OjpmcmFtZSAkdy5oZWFkZXIKKwkke05TfTo6bGFiZWwgJHcuaGVhZGVyLmxibCAtdGV4dHZhcmlhYmxlIHNzaGtleV90aXRsZSAtYW5jaG9yIHcKKwkke05TfTo6YnV0dG9uICR3LmhlYWRlci5nZW4gLXRleHQgW21jICJHZW5lcmF0ZSBLZXkiXSBcCiAJCS1jb21tYW5kIFtsaXN0IG1ha2Vfc3NoX2tleSAkd10gLXN0YXRlICRnZW5fc3RhdGUKIAlwYWNrICR3LmhlYWRlci5sYmwgLXNpZGUgbGVmdCAtZXhwYW5kIDEgLWZpbGwgeAogCXBhY2sgJHcuaGVhZGVyLmdlbiAtc2lkZSByaWdodApAQCAtNDYsMTQgKzQ2LDE2IEBACiAJdGV4dCAkdy5jb250ZW50cyAtd2lkdGggNjAgLWhlaWdodCAxMCAtd3JhcCBjaGFyIC1yZWxpZWYgc3Vua2VuCiAJcGFjayAkdy5jb250ZW50cyAtZmlsbCBib3RoIC1leHBhbmQgMQogCWlmIHskaGF2ZV90azg1fSB7Ci0JCSR3LmNvbnRlbnRzIGNvbmZpZ3VyZSAtaW5hY3RpdmVzZWxlY3RiYWNrZ3JvdW5kIGRhcmtibHVlCisJCXNldCBjbHIgZGFya2JsdWUKKwkJaWYgeyR1c2VfdHRrfSB7IHNldCBjbHIgW3R0azo6c3R5bGUgbG9va3VwIC4gLXNlbGVjdGJhY2tncm91bmRdIH0KKwkJJHcuY29udGVudHMgY29uZmlndXJlIC1pbmFjdGl2ZXNlbGVjdGJhY2tncm91bmQgJGNscgogCX0KIAotCWZyYW1lICR3LmJ1dHRvbnMKLQlidXR0b24gJHcuYnV0dG9ucy5jbG9zZSAtdGV4dCBbbWMgQ2xvc2VdIFwKKwkke05TfTo6ZnJhbWUgJHcuYnV0dG9ucworCSR7TlN9OjpidXR0b24gJHcuYnV0dG9ucy5jbG9zZSAtdGV4dCBbbWMgQ2xvc2VdIFwKIAkJLWRlZmF1bHQgYWN0aXZlIC1jb21tYW5kIFtsaXN0IGRlc3Ryb3kgJHddCiAJcGFjayAkdy5idXR0b25zLmNsb3NlIC1zaWRlIHJpZ2h0Ci0JYnV0dG9uICR3LmJ1dHRvbnMuY29weSAtdGV4dCBbbWMgIkNvcHkgVG8gQ2xpcGJvYXJkIl0gXAorCSR7TlN9OjpidXR0b24gJHcuYnV0dG9ucy5jb3B5IC10ZXh0IFttYyAiQ29weSBUbyBDbGlwYm9hcmQiXSBcCiAJCS1jb21tYW5kIFtsaXN0IHRrX3RleHRDb3B5ICR3LmNvbnRlbnRzXQogCXBhY2sgJHcuYnV0dG9ucy5jb3B5IC1zaWRlIGxlZnQKIAlwYWNrICR3LmJ1dHRvbnMgLXNpZGUgYm90dG9tIC1maWxsIHggLXBhZHkgNSAtcGFkeCA1CmRpZmYgLS1naXQgYS9naXQtZ3VpL2xpYi9zdGF0dXNfYmFyLnRjbCBiL2dpdC1ndWkvbGliL3N0YXR1c19iYXIudGNsCmluZGV4IDUxZDQxNzcuLjVmZTNhYWQgMTAwNjQ0Ci0tLSBhL2dpdC1ndWkvbGliL3N0YXR1c19iYXIudGNsCisrKyBiL2dpdC1ndWkvbGliL3N0YXR1c19iYXIudGNsCkBAIC0xMywxNCArMTMsMTYgQEAKIGZpZWxkIG1ldGVyICAge307ICMgY3VycmVudCBjb3JlIGdpdCBwcm9ncmVzcyBtZXRlciAoaWYgYWN0aXZlKQogCiBjb25zdHJ1Y3RvciBuZXcge3BhdGh9IHsKKwlnbG9iYWwgdXNlX3R0ayBOUwogCXNldCB3ICRwYXRoCiAJc2V0IHdfbCAkdy5sCiAJc2V0IHdfYyAkdy5jCiAKLQlmcmFtZSAkdyBcCi0JCS1ib3JkZXJ3aWR0aCAxIFwKLQkJLXJlbGllZiBzdW5rZW4KLQlsYWJlbCAkd19sIFwKKwkke05TfTo6ZnJhbWUgJHcKKwlpZiB7ISR1c2VfdHRrfSB7CisJCSR3IGNvbmZpZ3VyZSAtYm9yZGVyd2lkdGggMSAtcmVsaWVmIHN1bmtlbgorCX0KKwkke05TfTo6bGFiZWwgJHdfbCBcCiAJCS10ZXh0dmFyaWFibGUgQHN0YXR1cyBcCiAJCS1hbmNob3IgdyBcCiAJCS1qdXN0aWZ5IGxlZnQKQEAgLTQxLDggKzQzLDggQEAKIAlzZXQgd19sICR3LmwKIAlzZXQgd19jICR3LmMKIAotCWZyYW1lICR3Ci0JbGFiZWwgJHdfbCBcCisJJHtOU306OmZyYW1lICR3CisJJHtOU306OmxhYmVsICR3X2wgXAogCQktdGV4dHZhcmlhYmxlIEBzdGF0dXMgXAogCQktYW5jaG9yIHcgXAogCQktanVzdGlmeSBsZWZ0CmRpZmYgLS1naXQgYS9naXQtZ3VpL2xpYi90aGVtZWQudGNsIGIvZ2l0LWd1aS9saWIvdGhlbWVkLnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGE0NTg2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9saWIvdGhlbWVkLnRjbApAQCAtMCwwICsxLDE3NCBAQAorIyBGdW5jdGlvbnMgZm9yIHN1cHBvcnRpbmcgdGhlIHVzZSBvZiB0aGVtZWQgVGsgd2lkZ2V0cyBpbiBnaXQtZ3VpLgorIyBDb3B5cmlnaHQgKEMpIDIwMDkgUGF0IFRob3l0cyA8cGF0dGhveXRzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworcHJvYyBJbml0VGhlbWUge30geworCSMgQ3JlYXRlIGEgY29sb3IgbGFiZWwgc3R5bGUgKGJnIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHdpZGdldCBvcHRpb24pCisJdHRrOjpzdHlsZSBsYXlvdXQgQ29sb3IuVExhYmVsIHsKKwkJQ29sb3IuTGFiZWwuYm9yZGVyIC1zdGlja3kgbmV3cyAtY2hpbGRyZW4geworCQkJQ29sb3IubGFiZWwuZmlsbCAtc3RpY2t5IG5ld3MgLWNoaWxkcmVuIHsKKwkJCQlDb2xvci5MYWJlbC5wYWRkaW5nIC1zdGlja3kgbmV3cyAtY2hpbGRyZW4geworCQkJCQlDb2xvci5MYWJlbC5sYWJlbCAtc3RpY2t5IG5ld3N9fX19CisJZXZhbCBbbGluc2VydCBbdHRrOjpzdHlsZSBjb25maWd1cmUgVExhYmVsXSAwIFwKKwkJCSAgdHRrOjpzdHlsZSBjb25maWd1cmUgQ29sb3IuVExhYmVsXQorCXR0azo6c3R5bGUgY29uZmlndXJlIENvbG9yLlRMYWJlbCBcCisJCS1ib3JkZXJ3aWR0aCAwIC1yZWxpZWYgZmxhdCAtcGFkZGluZyAyCisJdHRrOjpzdHlsZSBtYXAgQ29sb3IuVExhYmVsIC1iYWNrZ3JvdW5kIHt7fSBnb2xkfQorCSMgV2UgYWxzbyBuZWVkIGEgcGFkZGVkIGxhYmVsLgorCXR0azo6c3R5bGUgY29uZmlndXJlIFBhZGRlZC5UTGFiZWwgXAorCQktcGFkZGluZyB7NSA1fSAtYm9yZGVyd2lkdGggMSAtcmVsaWVmIHNvbGlkCisJIyBXZSBuZWVkIGEgZ29sZCBmcmFtZS4KKwl0dGs6OnN0eWxlIGxheW91dCBHb2xkLlRGcmFtZSB7CisJCUdvbGQuRnJhbWUuYm9yZGVyIC1zdGlja3kgbnN3ZSAtY2hpbGRyZW4geworCQkJR29sZC5GcmFtZS5maWxsIC1zdGlja3kgbnN3ZX19CisJdHRrOjpzdHlsZSBjb25maWd1cmUgR29sZC5URnJhbWUgLWJhY2tncm91bmQgZ29sZCAtcmVsaWVmIGZsYXQKKwkjIGxpc3Rib3hlcyBzaG91bGQgaGF2ZSBhIHRoZW1lIGJvcmRlciBzbyBlbWJlZCBpbiB0dGs6OmZyYW1lCisJdHRrOjpzdHlsZSBsYXlvdXQgU0xpc3Rib3guVEZyYW1lIHsKKyAgICAgICAgU0xpc3Rib3guRnJhbWUuRW50cnkuZmllbGQgLXN0aWNreSBuZXdzIC1ib3JkZXIgdHJ1ZSAtY2hpbGRyZW4geworICAgICAgICAgICAgU0xpc3Rib3guRnJhbWUucGFkZGluZyAtc3RpY2t5IG5ld3MKKyAgICAgICAgfQorICAgIH0KK30KKworcHJvYyBnb2xkX2ZyYW1lIHt3IGFyZ3N9IHsKKwlnbG9iYWwgdXNlX3R0aworCWlmIHskdXNlX3R0a30geworCQlldmFsIFtsaW5zZXJ0ICRhcmdzIDAgdHRrOjpmcmFtZSAkdyAtc3R5bGUgR29sZC5URnJhbWVdCisJfSBlbHNlIHsKKwkJZXZhbCBbbGluc2VydCAkYXJncyAwIGZyYW1lICR3IC1iYWNrZ3JvdW5kIGdvbGRdCisJfQorfQorCitwcm9jIHRsYWJlbCB7dyBhcmdzfSB7CisJZ2xvYmFsIHVzZV90dGsKKwlpZiB7JHVzZV90dGt9IHsKKwkJc2V0IGNtZCBbbGlzdCB0dGs6OmxhYmVsICR3IC1zdHlsZSBDb2xvci5UTGFiZWxdCisJCWZvcmVhY2gge2sgdn0gJGFyZ3MgeworCQkJc3dpdGNoIC1nbG9iIC0tICRrIHsKKwkJCQktYWN0aXZlYmFja2dyb3VuZCB7fQorCQkJCWRlZmF1bHQgeyBsYXBwZW5kIGNtZCAkayAkdiB9CisJCQl9CisJCX0KKwkJZXZhbCAkY21kCisJfSBlbHNlIHsKKwkJZXZhbCBbbGluc2VydCAkYXJncyAwIGxhYmVsICR3XQorCX0KK30KKworIyBUaGUgcGFkZGVkIGxhYmVsIGdldHMgdXNlZCBpbiB0aGUgYWJvdXQgY2xhc3MuCitwcm9jIHBhZGRlZGxhYmVsIHt3IGFyZ3N9IHsKKwlnbG9iYWwgdXNlX3R0aworCWlmIHskdXNlX3R0a30geworCQlldmFsIFtsaW5zZXJ0ICRhcmdzIDAgdHRrOjpsYWJlbCAkdyAtc3R5bGUgUGFkZGVkLlRMYWJlbF0KKwl9IGVsc2UgeworCQlldmFsIFtsaW5zZXJ0ICRhcmdzIDAgbGFiZWwgJHcgXAorCQkJCSAgLXBhZHggNSAtcGFkeSA1IFwKKwkJCQkgIC1qdXN0aWZ5IGxlZnQgXAorCQkJCSAgLWFuY2hvciB3IFwKKwkJCQkgIC1ib3JkZXJ3aWR0aCAxIFwKKwkJCQkgIC1yZWxpZWYgc29saWRdCisJfQorfQorCisjIENyZWF0ZSBhIHRvcGxldmVsIGZvciB1c2UgYXMgYSBkaWFsb2cuCisjIElmIGF2YWlsYWJsZSwgc2V0cyB0aGUgRVdNSCBkaWFsb2cgaGludCBhbmQgaWYgdHRrIGlzIGVuYWJsZWQKKyMgcGxhY2UgYSB0aGVtZWQgZnJhbWUgb3ZlciB0aGUgc3VyZmFjZS4KK3Byb2MgRGlhbG9nIHt3IGFyZ3N9IHsKKwlldmFsIFtsaW5zZXJ0ICRhcmdzIDAgdG9wbGV2ZWwgJHcgLWNsYXNzIERpYWxvZ10KKwlwYXZlX3RvcGxldmVsICR3CisJcmV0dXJuICR3Cit9CisKKyMgVGsgdG9wbGV2ZWxzIGFyZSBub3QgdGhlbWVkIC0gc28gcGF2ZSBpdCBvdmVyIHdpdGggYSB0aGVtZWQgZnJhbWUgdG8gZ2V0CisjIHRoZSBiYXNlIGNvbG9yIGNvcnJlY3QgcGVyIHRoZW1lLgorcHJvYyBwYXZlX3RvcGxldmVsIHt3fSB7CisJZ2xvYmFsIHVzZV90dGsKKwlpZiB7JHVzZV90dGsgJiYgIVt3aW5mbyBleGlzdHMgJHcuIXBhdmluZ119IHsKKwkJc2V0IHBhdmluZyBbdHRrOjpmcmFtZSAkdy4hcGF2aW5nXQorCQlwbGFjZSAkcGF2aW5nIC14IDAgLXkgMCAtcmVsd2lkdGggMSAtcmVsaGVpZ2h0IDEKKwkJbG93ZXIgJHBhdmluZworCX0KK30KKworIyBDcmVhdGUgYSBzY3JvbGxlZCBsaXN0Ym94IHdpdGggYXBwcm9wcmlhdGUgYm9yZGVyIGZvciB0aGUgY3VycmVudCB0aGVtZS4KKyMgT24gbWFueSB0aGVtZXMgdGhlIGJvcmRlciBmb3IgYSBzY3JvbGxlZCBsaXN0Ym94IG5lZWRzIHRvIGdvIGFyb3VuZCB0aGUKKyMgbGlzdGJveCBhbmQgdGhlIHNjcm9sbGJhci4KK3Byb2Mgc2xpc3Rib3gge3cgYXJnc30geworCWdsb2JhbCB1c2VfdHRrIE5TCisJaWYgeyR1c2VfdHRrfSB7CisJCXNldCBmIFt0dGs6OmZyYW1lICR3IC1zdHlsZSBTTGlzdGJveC5URnJhbWUgLXBhZGRpbmcgMl0KKwl9IGVsc2UgeworCQlzZXQgZiBbZnJhbWUgJHcgLXJlbGllZiBmbGF0XQorCX0KKyAgICBpZiB7W2NhdGNoIHsKKwkJaWYgeyR1c2VfdHRrfSB7CisJCQlldmFsIFtsaW5zZXJ0ICRhcmdzIDAgbGlzdGJveCAkZi5saXN0IC1yZWxpZWYgZmxhdCBcCisJCQkJCSAgLWhpZ2hsaWdodHRoaWNrbmVzcyAwIC1ib3JkZXJ3aWR0aCAwXQorCQl9IGVsc2UgeworCQkJZXZhbCBbbGluc2VydCAkYXJncyAwIGxpc3Rib3ggJGYubGlzdF0KKwkJfQorICAgICAgICAke05TfTo6c2Nyb2xsYmFyICRmLnZzIC1jb21tYW5kIFtsaXN0ICRmLmxpc3QgeXZpZXddCisgICAgICAgICRmLmxpc3QgY29uZmlndXJlIC15c2Nyb2xsY29tbWFuZCBbbGlzdCAkZi52cyBzZXRdCisgICAgICAgIGdyaWQgJGYubGlzdCAkZi52cyAtc3RpY2t5IG5ld3MKKyAgICAgICAgZ3JpZCByb3djb25maWd1cmUgJGYgMCAtd2VpZ2h0IDEKKyAgICAgICAgZ3JpZCBjb2x1bW5jb25maWd1cmUgJGYgMCAtd2VpZ2h0IDEKKwkJYmluZCAkZi5saXN0IDw8TGlzdGJveFNlbGVjdD4+IFwKKwkJCVtsaXN0IGV2ZW50IGdlbmVyYXRlICR3IDw8TGlzdGJveFNlbGVjdD4+XQorICAgICAgICBpbnRlcnAgaGlkZSB7fSAkdworICAgICAgICBpbnRlcnAgYWxpYXMge30gJHcge30gJGYubGlzdAorICAgIH0gZXJyXX0geworICAgICAgICBkZXN0cm95ICRmCisgICAgICAgIHJldHVybiAtY29kZSBlcnJvciAkZXJyCisgICAgfQorICAgIHJldHVybiAkdworfQorCisjIGZldGNoIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGZyb20gYSB3aWRnZXQuCitwcm9jIGdldF9iZ19jb2xvciB7d30geworCWdsb2JhbCB1c2VfdHRrCisJaWYgeyR1c2VfdHRrfSB7CisJCXNldCBiZyBbdHRrOjpzdHlsZSBsb29rdXAgW3dpbmZvIGNsYXNzICR3XSAtYmFja2dyb3VuZF0KKwl9IGVsc2UgeworCQlzZXQgYmcgWyR3IGNnZXQgLWJhY2tncm91bmRdCisJfQorCXJldHVybiAkYmcKK30KKworIyB0dGs6OnNwaW5ib3ggZGlkbid0IGdldCBhZGRlZCB1bnRpbCA4LjYKK3Byb2MgdHNwaW5ib3gge3cgYXJnc30geworCWdsb2JhbCB1c2VfdHRrCisJaWYgeyR1c2VfdHRrICYmIFtsbGVuZ3RoIFtpbmZvIGNvbW1hbmRzIHR0azo6c3BpbmJveF1dID4gMH0geworCQlldmFsIFtsaW5zZXJ0ICRhcmdzIDAgdHRrOjpzcGluYm94ICR3XQorCX0gZWxzZSB7CisJCWV2YWwgW2xpbnNlcnQgJGFyZ3MgMCBzcGluYm94ICR3XQorCX0KK30KKworIyBUayA4LjYgcHJvdmlkZXMgYSBzdGFuZGFyZCBmb250IHNlbGVjdGlvbiBkaWFsb2cuIFRoaXMgdXNlcyB0aGUgbmF0aXZlCisjIGRpYWxvZ3Mgb24gV2luZG93cyBhbmQgTWFjT1NYIG9yIGEgc3RhbmRhcmQgVGsgZGlhbG9nIG9uIFgxMS4KK3Byb2MgdGNob29zZWZvbnQge3cgdGl0bGUgZmFtaWx5dmFyIHNpemV2YXJ9IHsKKwlpZiB7W3BhY2thZ2UgdnNhdGlzZmllcyBbcGFja2FnZSBwcm92aWRlIFRrXSA4LjZdfSB7CisJCXVwdmFyICMwICRmYW1pbHl2YXIgZmFtaWx5CisJCXVwdmFyICMwICRzaXpldmFyIHNpemUKKwkJdGsgZm9udGNob29zZXIgY29uZmlndXJlIC1wYXJlbnQgJHcgLXRpdGxlICR0aXRsZSBcCisJCQktZm9udCBbbGlzdCAkZmFtaWx5ICRzaXplXSBcCisJCQktY29tbWFuZCBbbGlzdCBvbl9jaG9vc2Vmb250ICRmYW1pbHl2YXIgJHNpemV2YXJdCisJCXRrIGZvbnRjaG9vc2VyIHNob3cKKwl9IGVsc2UgeworCQljaG9vc2VfZm9udDo6cGljayAkdyAkdGl0bGUgJGZhbWlseXZhciAkc2l6ZXZhcgorCX0KK30KKworIyBDYWxsZWQgd2hlbiB0aGUgVGsgOC42IGZvbnRjaG9vc2VyIHNlbGVjdHMgYSBmb250LgorcHJvYyBvbl9jaG9vc2Vmb250IHtmYW1pbHl2YXIgc2l6ZXZhciBmb250fSB7CisJdXB2YXIgIzAgJGZhbWlseXZhciBmYW1pbHkKKwl1cHZhciAjMCAkc2l6ZXZhciBzaXplCisJc2V0IGZvbnQgW2ZvbnQgYWN0dWFsICRmb250XQorCXNldCBmYW1pbHkgW2RpY3QgZ2V0ICRmb250IC1mYW1pbHldCisJc2V0IHNpemUgW2RpY3QgZ2V0ICRmb250IC1zaXplXQorfQorCisjIExvY2FsIHZhcmlhYmxlczoKKyMgbW9kZTogdGNsCisjIGluZGVudC10YWJzLW1vZGU6IHQKKyMgdGFiLXdpZHRoOiA0CisjIEVuZDoKZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL3Rvb2xzX2RsZy50Y2wgYi9naXQtZ3VpL2xpYi90b29sc19kbGcudGNsCmluZGV4IDVmN2YwOGUuLjdlZWRhOWQgMTAwNjQ0Ci0tLSBhL2dpdC1ndWkvbGliL3Rvb2xzX2RsZy50Y2wKKysrIGIvZ2l0LWd1aS9saWIvdG9vbHNfZGxnLnRjbApAQCAtMTYsNTMgKzE2LDUwIEBACiBmaWVsZCBhc2tfYXJncyAgICAgIDA7ICMgYXNrIGZvciBhZGRpdGlvbmFsIGFyZ3MKIAogY29uc3RydWN0b3IgZGlhbG9nIHt9IHsKLQlnbG9iYWwgcmVwb19jb25maWcKKwlnbG9iYWwgcmVwb19jb25maWcgdXNlX3R0ayBOUwogCi0JbWFrZV90b3BsZXZlbCB0b3AgdworCW1ha2VfZGlhbG9nIHRvcCB3CiAJd20gdGl0bGUgJHRvcCBbYXBwZW5kICJbYXBwbmFtZV0gKFtyZXBvbmFtZV0pOiAiIFttYyAiQWRkIFRvb2wiXV0KIAlpZiB7JHRvcCBuZSB7Ln19IHsKIAkJd20gZ2VvbWV0cnkgJHRvcCAiK1t3aW5mbyByb290eCAuXStbd2luZm8gcm9vdHkgLl0iCiAJCXdtIHRyYW5zaWVudCAkdG9wIC4KIAl9CiAKLQlsYWJlbCAkdy5oZWFkZXIgLXRleHQgW21jICJBZGQgTmV3IFRvb2wgQ29tbWFuZCJdIC1mb250IGZvbnRfdWlib2xkCisJJHtOU306OmxhYmVsICR3LmhlYWRlciAtdGV4dCBbbWMgIkFkZCBOZXcgVG9vbCBDb21tYW5kIl0gXAorCQktZm9udCBmb250X3VpYm9sZCAtYW5jaG9yIGNlbnRlcgogCXBhY2sgJHcuaGVhZGVyIC1zaWRlIHRvcCAtZmlsbCB4CiAKLQlmcmFtZSAkdy5idXR0b25zCi0JY2hlY2tidXR0b24gJHcuYnV0dG9ucy5nbG9iYWwgXAorCSR7TlN9OjpmcmFtZSAkdy5idXR0b25zCisJJHtOU306OmNoZWNrYnV0dG9uICR3LmJ1dHRvbnMuZ2xvYmFsIFwKIAkJLXRleHQgW21jICJBZGQgZ2xvYmFsbHkiXSBcCiAJCS12YXJpYWJsZSBAYWRkX2dsb2JhbAogCXBhY2sgJHcuYnV0dG9ucy5nbG9iYWwgLXNpZGUgbGVmdCAtcGFkeCA1Ci0JYnV0dG9uICR3LmJ1dHRvbnMuY3JlYXRlIC10ZXh0IFttYyBBZGRdIFwKKwkke05TfTo6YnV0dG9uICR3LmJ1dHRvbnMuY3JlYXRlIC10ZXh0IFttYyBBZGRdIFwKIAkJLWRlZmF1bHQgYWN0aXZlIFwKIAkJLWNvbW1hbmQgW2NiIF9hZGRdCiAJcGFjayAkdy5idXR0b25zLmNyZWF0ZSAtc2lkZSByaWdodAotCWJ1dHRvbiAkdy5idXR0b25zLmNhbmNlbCAtdGV4dCBbbWMgQ2FuY2VsXSBcCisJJHtOU306OmJ1dHRvbiAkdy5idXR0b25zLmNhbmNlbCAtdGV4dCBbbWMgQ2FuY2VsXSBcCiAJCS1jb21tYW5kIFtsaXN0IGRlc3Ryb3kgJHddCiAJcGFjayAkdy5idXR0b25zLmNhbmNlbCAtc2lkZSByaWdodCAtcGFkeCA1CiAJcGFjayAkdy5idXR0b25zIC1zaWRlIGJvdHRvbSAtZmlsbCB4IC1wYWR5IDEwIC1wYWR4IDEwCiAKLQlsYWJlbGZyYW1lICR3LmRlc2MgLXRleHQgW21jICJUb29sIERldGFpbHMiXQorCSR7TlN9OjpsYWJlbGZyYW1lICR3LmRlc2MgLXRleHQgW21jICJUb29sIERldGFpbHMiXQogCi0JbGFiZWwgJHcuZGVzYy5uYW1lX2NtbnQgLWFuY2hvciB3XAorCSR7TlN9OjpsYWJlbCAkdy5kZXNjLm5hbWVfY21udCAtYW5jaG9yIHdcCiAJCS10ZXh0IFttYyAiVXNlICcvJyBzZXBhcmF0b3JzIHRvIGNyZWF0ZSBhIHN1Ym1lbnUgdHJlZToiXQogCWdyaWQgeCAkdy5kZXNjLm5hbWVfY21udCAtc3RpY2t5IHdlIC1wYWR4IHswIDV9IC1wYWR5IHswIDJ9Ci0JbGFiZWwgJHcuZGVzYy5uYW1lX2wgLXRleHQgW21jICJOYW1lOiJdCisJJHtOU306OmxhYmVsICR3LmRlc2MubmFtZV9sIC10ZXh0IFttYyAiTmFtZToiXQogCXNldCB3X25hbWUgJHcuZGVzYy5uYW1lX3QKLQllbnRyeSAkd19uYW1lIFwKLQkJLWJvcmRlcndpZHRoIDEgXAotCQktcmVsaWVmIHN1bmtlbiBcCisJJHtOU306OmVudHJ5ICR3X25hbWUgXAogCQktd2lkdGggNDAgXAogCQktdGV4dHZhcmlhYmxlIEBuYW1lIFwKIAkJLXZhbGlkYXRlIGtleSBcCiAJCS12YWxpZGF0ZWNvbW1hbmQgW2NiIF92YWxpZGF0ZV9uYW1lICVkICVTXQogCWdyaWQgJHcuZGVzYy5uYW1lX2wgJHdfbmFtZSAtc3RpY2t5IHdlIC1wYWR4IHswIDV9CiAKLQlsYWJlbCAkdy5kZXNjLmNtZF9sIC10ZXh0IFttYyAiQ29tbWFuZDoiXQorCSR7TlN9OjpsYWJlbCAkdy5kZXNjLmNtZF9sIC10ZXh0IFttYyAiQ29tbWFuZDoiXQogCXNldCB3X2NtZCAkdy5kZXNjLmNtZF90Ci0JZW50cnkgJHdfY21kIFwKLQkJLWJvcmRlcndpZHRoIDEgXAotCQktcmVsaWVmIHN1bmtlbiBcCisJJHtOU306OmVudHJ5ICR3X2NtZCBcCiAJCS13aWR0aCA0MCBcCiAJCS10ZXh0dmFyaWFibGUgQGNvbW1hbmQKIAlncmlkICR3LmRlc2MuY21kX2wgJHdfY21kIC1zdGlja3kgd2UgLXBhZHggezAgNX0gLXBhZHkgezAgM30KQEAgLTcwLDMwICs2NywzMCBAQAogCWdyaWQgY29sdW1uY29uZmlndXJlICR3LmRlc2MgMSAtd2VpZ2h0IDEKIAlwYWNrICR3LmRlc2MgLWFuY2hvciBudyAtZmlsbCB4IC1wYWR5IDUgLXBhZHggNQogCi0JY2hlY2tidXR0b24gJHcuY29uZmlybSBcCisJJHtOU306OmNoZWNrYnV0dG9uICR3LmNvbmZpcm0gXAogCQktdGV4dCBbbWMgIlNob3cgYSBkaWFsb2cgYmVmb3JlIHJ1bm5pbmciXSBcCiAJCS12YXJpYWJsZSBAY29uZmlybSAtY29tbWFuZCBbY2IgX2NoZWNrX2VuYWJsZV9kbGddCiAKLQlsYWJlbGZyYW1lICR3LmRsZyAtbGFiZWx3aWRnZXQgJHcuY29uZmlybQorCSR7TlN9OjpsYWJlbGZyYW1lICR3LmRsZyAtbGFiZWx3aWRnZXQgJHcuY29uZmlybQogCi0JY2hlY2tidXR0b24gJHcuZGxnLmFza2JyYW5jaCBcCisJJHtOU306OmNoZWNrYnV0dG9uICR3LmRsZy5hc2ticmFuY2ggXAogCQktdGV4dCBbbWMgIkFzayB0aGUgdXNlciB0byBzZWxlY3QgYSByZXZpc2lvbiAoc2V0cyBcJFJFVklTSU9OKSJdIFwKIAkJLXZhcmlhYmxlIEBhc2tfYnJhbmNoIC1zdGF0ZSBkaXNhYmxlZAogCXBhY2sgJHcuZGxnLmFza2JyYW5jaCAtYW5jaG9yIHcgLXBhZHggMTUKIAotCWNoZWNrYnV0dG9uICR3LmRsZy5hc2thcmdzIFwKKwkke05TfTo6Y2hlY2tidXR0b24gJHcuZGxnLmFza2FyZ3MgXAogCQktdGV4dCBbbWMgIkFzayB0aGUgdXNlciBmb3IgYWRkaXRpb25hbCBhcmd1bWVudHMgKHNldHMgXCRBUkdTKSJdIFwKIAkJLXZhcmlhYmxlIEBhc2tfYXJncyAtc3RhdGUgZGlzYWJsZWQKIAlwYWNrICR3LmRsZy5hc2thcmdzIC1hbmNob3IgdyAtcGFkeCAxNQogCiAJcGFjayAkdy5kbGcgLWFuY2hvciBudyAtZmlsbCB4IC1wYWR5IHswIDh9IC1wYWR4IDUKIAotCWNoZWNrYnV0dG9uICR3Lm5vY29uc29sZSBcCisJJHtOU306OmNoZWNrYnV0dG9uICR3Lm5vY29uc29sZSBcCiAJCS10ZXh0IFttYyAiRG9uJ3Qgc2hvdyB0aGUgY29tbWFuZCBvdXRwdXQgd2luZG93Il0gXAogCQktdmFyaWFibGUgQG5vX2NvbnNvbGUKIAlwYWNrICR3Lm5vY29uc29sZSAtYW5jaG9yIHcgLXBhZHggNQogCi0JY2hlY2tidXR0b24gJHcubmVlZHNmaWxlIFwKKwkke05TfTo6Y2hlY2tidXR0b24gJHcubmVlZHNmaWxlIFwKIAkJLXRleHQgW21jICJSdW4gb25seSBpZiBhIGRpZmYgaXMgc2VsZWN0ZWQgKFwkRklMRU5BTUUgbm90IGVtcHR5KSJdIFwKIAkJLXZhcmlhYmxlIEBuZWVkc19maWxlCiAJcGFjayAkdy5uZWVkc2ZpbGUgLWFuY2hvciB3IC1wYWR4IDUKQEAgLTE4Miw0MCArMTc5LDM4IEBACiBmaWVsZCB3X25hbWVzICAgICAgICA7ICMgbmFtZSBsaXN0CiAKIGNvbnN0cnVjdG9yIGRpYWxvZyB7fSB7Ci0JZ2xvYmFsIHJlcG9fY29uZmlnIGdsb2JhbF9jb25maWcgc3lzdGVtX2NvbmZpZworCWdsb2JhbCByZXBvX2NvbmZpZyBnbG9iYWxfY29uZmlnIHN5c3RlbV9jb25maWcgdXNlX3R0ayBOUwogCiAJbG9hZF9jb25maWcgMQogCi0JbWFrZV90b3BsZXZlbCB0b3AgdworCW1ha2VfZGlhbG9nIHRvcCB3CiAJd20gdGl0bGUgJHRvcCBbYXBwZW5kICJbYXBwbmFtZV0gKFtyZXBvbmFtZV0pOiAiIFttYyAiUmVtb3ZlIFRvb2wiXV0KIAlpZiB7JHRvcCBuZSB7Ln19IHsKIAkJd20gZ2VvbWV0cnkgJHRvcCAiK1t3aW5mbyByb290eCAuXStbd2luZm8gcm9vdHkgLl0iCiAJCXdtIHRyYW5zaWVudCAkdG9wIC4KIAl9CiAKLQlsYWJlbCAkdy5oZWFkZXIgLXRleHQgW21jICJSZW1vdmUgVG9vbCBDb21tYW5kcyJdIC1mb250IGZvbnRfdWlib2xkCisJJHtOU306OmxhYmVsICR3LmhlYWRlciAtdGV4dCBbbWMgIlJlbW92ZSBUb29sIENvbW1hbmRzIl0gXAorCQktZm9udCBmb250X3VpYm9sZCAtYW5jaG9yIGNlbnRlcgogCXBhY2sgJHcuaGVhZGVyIC1zaWRlIHRvcCAtZmlsbCB4CiAKLQlmcmFtZSAkdy5idXR0b25zCi0JYnV0dG9uICR3LmJ1dHRvbnMuY3JlYXRlIC10ZXh0IFttYyBSZW1vdmVdIFwKKwkke05TfTo6ZnJhbWUgJHcuYnV0dG9ucworCSR7TlN9OjpidXR0b24gJHcuYnV0dG9ucy5jcmVhdGUgLXRleHQgW21jIFJlbW92ZV0gXAogCQktZGVmYXVsdCBhY3RpdmUgXAogCQktY29tbWFuZCBbY2IgX3JlbW92ZV0KIAlwYWNrICR3LmJ1dHRvbnMuY3JlYXRlIC1zaWRlIHJpZ2h0Ci0JYnV0dG9uICR3LmJ1dHRvbnMuY2FuY2VsIC10ZXh0IFttYyBDYW5jZWxdIFwKKwkke05TfTo6YnV0dG9uICR3LmJ1dHRvbnMuY2FuY2VsIC10ZXh0IFttYyBDYW5jZWxdIFwKIAkJLWNvbW1hbmQgW2xpc3QgZGVzdHJveSAkd10KIAlwYWNrICR3LmJ1dHRvbnMuY2FuY2VsIC1zaWRlIHJpZ2h0IC1wYWR4IDUKIAlwYWNrICR3LmJ1dHRvbnMgLXNpZGUgYm90dG9tIC1maWxsIHggLXBhZHkgMTAgLXBhZHggMTAKIAotCWZyYW1lICR3Lmxpc3QKKwkke05TfTo6ZnJhbWUgJHcubGlzdAogCXNldCB3X25hbWVzICR3Lmxpc3QubAotCWxpc3Rib3ggJHdfbmFtZXMgXAorCXNsaXN0Ym94ICR3X25hbWVzIFwKIAkJLWhlaWdodCAxMCBcCiAJCS13aWR0aCAzMCBcCiAJCS1zZWxlY3Rtb2RlIGV4dGVuZGVkIFwKLQkJLWV4cG9ydHNlbGVjdGlvbiBmYWxzZSBcCi0JCS15c2Nyb2xsY29tbWFuZCBbbGlzdCAkdy5saXN0LnNieSBzZXRdCi0Jc2Nyb2xsYmFyICR3Lmxpc3Quc2J5IC1jb21tYW5kIFtsaXN0ICR3Lmxpc3QubCB5dmlld10KLQlwYWNrICR3Lmxpc3Quc2J5IC1zaWRlIHJpZ2h0IC1maWxsIHkKKwkJLWV4cG9ydHNlbGVjdGlvbiBmYWxzZQogCXBhY2sgJHcubGlzdC5sIC1zaWRlIGxlZnQgLWZpbGwgYm90aCAtZXhwYW5kIDEKIAlwYWNrICR3Lmxpc3QgLWZpbGwgYm90aCAtZXhwYW5kIDEgLXBhZHkgNSAtcGFkeCA1CiAKQEAgLTIzMiw3ICsyMjcsNyBAQAogCX0KIAogCWlmIHskbG9jYWxfY250ID4gMH0gewotCQlsYWJlbCAkdy5jb2xvcmxibCAtZm9yZWdyb3VuZCBibHVlIFwKKwkJJHtOU306OmxhYmVsICR3LmNvbG9ybGJsIC1mb3JlZ3JvdW5kIGJsdWUgXAogCQkJLXRleHQgW21jICIoQmx1ZSBkZW5vdGVzIHJlcG9zaXRvcnktbG9jYWwgdG9vbHMpIl0KIAkJcGFjayAkdy5jb2xvcmxibCAtZmlsbCB4IC1wYWR5IDUgLXBhZHggNQogCX0KQEAgLTI3NywxNCArMjcyLDE0IEBACiBmaWVsZCBhcmdzdHIgICAgICAge307ICMgYXJndW1lbnRzCiAKIGNvbnN0cnVjdG9yIGRpYWxvZyB7ZnVsbG5hbWV9IHsKLQlnbG9iYWwgTTFCCisJZ2xvYmFsIE0xQiB1c2VfdHRrIE5TCiAKIAlzZXQgdGl0bGUgW2dldF9jb25maWcgImd1aXRvb2wuJGZ1bGxuYW1lLnRpdGxlIl0KIAlpZiB7JHRpdGxlIGVxIHt9fSB7CiAJCXJlZ3N1YiB7L30gJGZ1bGxuYW1lIHsgLyB9IHRpdGxlCiAJfQogCi0JbWFrZV90b3BsZXZlbCB0b3AgdyAtYXV0b2RlbGV0ZSAwCisJbWFrZV9kaWFsb2cgdG9wIHcgLWF1dG9kZWxldGUgMAogCXdtIHRpdGxlICR0b3AgW2FwcGVuZCAiW2FwcG5hbWVdIChbcmVwb25hbWVdKTogIiAkdGl0bGVdCiAJaWYgeyR0b3AgbmUgey59fSB7CiAJCXdtIGdlb21ldHJ5ICR0b3AgIitbd2luZm8gcm9vdHggLl0rW3dpbmZvIHJvb3R5IC5dIgpAQCAtMjk3LDcgKzI5Miw3IEBACiAJCXNldCBwcm9tcHQgW21jICJSdW4gQ29tbWFuZDogJXMiICRjb21tYW5kXQogCX0KIAotCWxhYmVsICR3LmhlYWRlciAtdGV4dCAkcHJvbXB0IC1mb250IGZvbnRfdWlib2xkCisJJHtOU306OmxhYmVsICR3LmhlYWRlciAtdGV4dCAkcHJvbXB0IC1mb250IGZvbnRfdWlib2xkIC1hbmNob3IgY2VudGVyCiAJcGFjayAkdy5oZWFkZXIgLXNpZGUgdG9wIC1maWxsIHgKIAogCXNldCBhcmdwcm9tcHQgW2dldF9jb25maWcgImd1aXRvb2wuJGZ1bGxuYW1lLmFyZ3Byb21wdCJdCkBAIC0zMTEsMTIgKzMwNiwxMCBAQAogCQkJc2V0IGFyZ3Byb21wdCBbbWMgIkFyZ3VtZW50cyJdCiAJCX0KIAotCQlsYWJlbGZyYW1lICR3LmFyZyAtdGV4dCAkYXJncHJvbXB0CisJCSR7TlN9OjpsYWJlbGZyYW1lICR3LmFyZyAtdGV4dCAkYXJncHJvbXB0CiAKIAkJc2V0IHdfYXJncyAkdy5hcmcudHh0Ci0JCWVudHJ5ICR3X2FyZ3MgXAotCQkJLWJvcmRlcndpZHRoIDEgXAotCQkJLXJlbGllZiBzdW5rZW4gXAorCQkke05TfTo6ZW50cnkgJHdfYXJncyBcCiAJCQktd2lkdGggNDAgXAogCQkJLXRleHR2YXJpYWJsZSBAYXJnc3RyCiAJCXBhY2sgJHdfYXJncyAtcGFkeCA1IC1wYWR5IDUgLWZpbGwgYm90aApAQCAtMzM3LDE4ICszMzAsMTggQEAKIAkJcGFjayAkdy5yZXYgLWFuY2hvciBudyAtZmlsbCBib3RoIC1leHBhbmQgMSAtcGFkeSA1IC1wYWR4IDUKIAl9CiAKLQlmcmFtZSAkdy5idXR0b25zCisJJHtOU306OmZyYW1lICR3LmJ1dHRvbnMKIAlpZiB7JGlzX2Fza19yZXZzfSB7Ci0JCWJ1dHRvbiAkdy5idXR0b25zLnZpc3VhbGl6ZSBcCisJCSR7TlN9OjpidXR0b24gJHcuYnV0dG9ucy52aXN1YWxpemUgXAogCQkJLXRleHQgW21jIFZpc3VhbGl6ZV0gXAogCQkJLWNvbW1hbmQgW2NiIF92aXN1YWxpemVdCiAJCXBhY2sgJHcuYnV0dG9ucy52aXN1YWxpemUgLXNpZGUgbGVmdAogCX0KLQlidXR0b24gJHcuYnV0dG9ucy5vayBcCisJJHtOU306OmJ1dHRvbiAkdy5idXR0b25zLm9rIFwKIAkJLXRleHQgW21jIE9LXSBcCiAJCS1jb21tYW5kIFtjYiBfc3RhcnRdCiAJcGFjayAkdy5idXR0b25zLm9rIC1zaWRlIHJpZ2h0Ci0JYnV0dG9uICR3LmJ1dHRvbnMuY2FuY2VsIFwKKwkke05TfTo6YnV0dG9uICR3LmJ1dHRvbnMuY2FuY2VsIFwKIAkJLXRleHQgW21jICJDYW5jZWwiXSBcCiAJCS1jb21tYW5kIFtjYiBfY2FuY2VsXQogCXBhY2sgJHcuYnV0dG9ucy5jYW5jZWwgLXNpZGUgcmlnaHQgLXBhZHggNQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvdHJhbnNwb3J0LnRjbCBiL2dpdC1ndWkvbGliL3RyYW5zcG9ydC50Y2wKaW5kZXggYjE4ZDljNy4uNjBlM2E2NCAxMDA2NDQKLS0tIGEvZ2l0LWd1aS9saWIvdHJhbnNwb3J0LnRjbAorKysgYi9naXQtZ3VpL2xpYi90cmFuc3BvcnQudGNsCkBAIC05MSw1MCArOTEsNTUgQEAKIHByb2MgZG9fcHVzaF9hbnl3aGVyZSB7fSB7CiAJZ2xvYmFsIGFsbF9yZW1vdGVzIGN1cnJlbnRfYnJhbmNoCiAJZ2xvYmFsIHB1c2hfdXJsdHlwZSBwdXNoX3JlbW90ZSBwdXNoX3VybCBwdXNoX3RoaW4gcHVzaF90YWdzCi0JZ2xvYmFsIHB1c2hfZm9yY2UKKwlnbG9iYWwgcHVzaF9mb3JjZSB1c2VfdHRrIE5TCiAKIAlzZXQgdyAucHVzaF9zZXR1cAogCXRvcGxldmVsICR3CisJd20gd2l0aGRyYXcgJHcKIAl3bSBnZW9tZXRyeSAkdyAiK1t3aW5mbyByb290eCAuXStbd2luZm8gcm9vdHkgLl0iCisJcGF2ZV90b3BsZXZlbCAkdwogCi0JbGFiZWwgJHcuaGVhZGVyIC10ZXh0IFttYyAiUHVzaCBCcmFuY2hlcyJdIC1mb250IGZvbnRfdWlib2xkCisJJHtOU306OmxhYmVsICR3LmhlYWRlciAtdGV4dCBbbWMgIlB1c2ggQnJhbmNoZXMiXSBcCisJCS1mb250IGZvbnRfdWlib2xkIC1hbmNob3IgY2VudGVyCiAJcGFjayAkdy5oZWFkZXIgLXNpZGUgdG9wIC1maWxsIHgKIAotCWZyYW1lICR3LmJ1dHRvbnMKLQlidXR0b24gJHcuYnV0dG9ucy5jcmVhdGUgLXRleHQgW21jIFB1c2hdIFwKKwkke05TfTo6ZnJhbWUgJHcuYnV0dG9ucworCSR7TlN9OjpidXR0b24gJHcuYnV0dG9ucy5jcmVhdGUgLXRleHQgW21jIFB1c2hdIFwKIAkJLWRlZmF1bHQgYWN0aXZlIFwKIAkJLWNvbW1hbmQgW2xpc3Qgc3RhcnRfcHVzaF9hbnl3aGVyZV9hY3Rpb24gJHddCiAJcGFjayAkdy5idXR0b25zLmNyZWF0ZSAtc2lkZSByaWdodAotCWJ1dHRvbiAkdy5idXR0b25zLmNhbmNlbCAtdGV4dCBbbWMgIkNhbmNlbCJdIFwKKwkke05TfTo6YnV0dG9uICR3LmJ1dHRvbnMuY2FuY2VsIC10ZXh0IFttYyAiQ2FuY2VsIl0gXAogCQktZGVmYXVsdCBub3JtYWwgXAogCQktY29tbWFuZCBbbGlzdCBkZXN0cm95ICR3XQogCXBhY2sgJHcuYnV0dG9ucy5jYW5jZWwgLXNpZGUgcmlnaHQgLXBhZHggNQogCXBhY2sgJHcuYnV0dG9ucyAtc2lkZSBib3R0b20gLWZpbGwgeCAtcGFkeSAxMCAtcGFkeCAxMAogCi0JbGFiZWxmcmFtZSAkdy5zb3VyY2UgLXRleHQgW21jICJTb3VyY2UgQnJhbmNoZXMiXQotCWxpc3Rib3ggJHcuc291cmNlLmwgXAorCSR7TlN9OjpsYWJlbGZyYW1lICR3LnNvdXJjZSAtdGV4dCBbbWMgIlNvdXJjZSBCcmFuY2hlcyJdCisJc2xpc3Rib3ggJHcuc291cmNlLmwgXAogCQktaGVpZ2h0IDEwIFwKIAkJLXdpZHRoIDcwIFwKLQkJLXNlbGVjdG1vZGUgZXh0ZW5kZWQgXAotCQkteXNjcm9sbGNvbW1hbmQgW2xpc3QgJHcuc291cmNlLnNieSBzZXRdCisJCS1zZWxlY3Rtb2RlIGV4dGVuZGVkCiAJZm9yZWFjaCBoIFtsb2FkX2FsbF9oZWFkc10gewogCQkkdy5zb3VyY2UubCBpbnNlcnQgZW5kICRoCiAJCWlmIHskaCBlcSAkY3VycmVudF9icmFuY2h9IHsKIAkJCSR3LnNvdXJjZS5sIHNlbGVjdCBzZXQgZW5kCiAJCX0KIAl9Ci0Jc2Nyb2xsYmFyICR3LnNvdXJjZS5zYnkgLWNvbW1hbmQgW2xpc3QgJHcuc291cmNlLmwgeXZpZXddCi0JcGFjayAkdy5zb3VyY2Uuc2J5IC1zaWRlIHJpZ2h0IC1maWxsIHkKIAlwYWNrICR3LnNvdXJjZS5sIC1zaWRlIGxlZnQgLWZpbGwgYm90aCAtZXhwYW5kIDEKIAlwYWNrICR3LnNvdXJjZSAtZmlsbCBib3RoIC1leHBhbmQgMSAtcGFkeSA1IC1wYWR4IDUKIAotCWxhYmVsZnJhbWUgJHcuZGVzdCAtdGV4dCBbbWMgIkRlc3RpbmF0aW9uIFJlcG9zaXRvcnkiXQorCSR7TlN9OjpsYWJlbGZyYW1lICR3LmRlc3QgLXRleHQgW21jICJEZXN0aW5hdGlvbiBSZXBvc2l0b3J5Il0KIAlpZiB7JGFsbF9yZW1vdGVzIG5lIHt9fSB7Ci0JCXJhZGlvYnV0dG9uICR3LmRlc3QucmVtb3RlX3IgXAorCQkke05TfTo6cmFkaW9idXR0b24gJHcuZGVzdC5yZW1vdGVfciBcCiAJCQktdGV4dCBbbWMgIlJlbW90ZToiXSBcCiAJCQktdmFsdWUgcmVtb3RlIFwKIAkJCS12YXJpYWJsZSBwdXNoX3VybHR5cGUKLQkJZXZhbCB0a19vcHRpb25NZW51ICR3LmRlc3QucmVtb3RlX20gcHVzaF9yZW1vdGUgJGFsbF9yZW1vdGVzCisJCWlmIHskdXNlX3R0a30geworCQkJdHRrOjpjb21ib2JveCAkdy5kZXN0LnJlbW90ZV9tIC10ZXh0dmFyaWFibGUgcHVzaF9yZW1vdGUgXAorCQkJCS12YWx1ZXMgJGFsbF9yZW1vdGVzCisJCX0gZWxzZSB7CisJCQlldmFsIHRrX29wdGlvbk1lbnUgJHcuZGVzdC5yZW1vdGVfbSBwdXNoX3JlbW90ZSAkYWxsX3JlbW90ZXMKKwkJfQogCQlncmlkICR3LmRlc3QucmVtb3RlX3IgJHcuZGVzdC5yZW1vdGVfbSAtc3RpY2t5IHcKIAkJaWYge1tsc2VhcmNoIC1zb3J0ZWQgLWV4YWN0ICRhbGxfcmVtb3RlcyBvcmlnaW5dICE9IC0xfSB7CiAJCQlzZXQgcHVzaF9yZW1vdGUgb3JpZ2luCkBAIC0xNDUsMTMgKzE1MCwxMSBAQAogCX0gZWxzZSB7CiAJCXNldCBwdXNoX3VybHR5cGUgdXJsCiAJfQotCXJhZGlvYnV0dG9uICR3LmRlc3QudXJsX3IgXAorCSR7TlN9OjpyYWRpb2J1dHRvbiAkdy5kZXN0LnVybF9yIFwKIAkJLXRleHQgW21jICJBcmJpdHJhcnkgTG9jYXRpb246Il0gXAogCQktdmFsdWUgdXJsIFwKIAkJLXZhcmlhYmxlIHB1c2hfdXJsdHlwZQotCWVudHJ5ICR3LmRlc3QudXJsX3QgXAotCQktYm9yZGVyd2lkdGggMSBcCi0JCS1yZWxpZWYgc3Vua2VuIFwKKwkke05TfTo6ZW50cnkgJHcuZGVzdC51cmxfdCBcCiAJCS13aWR0aCA1MCBcCiAJCS10ZXh0dmFyaWFibGUgcHVzaF91cmwgXAogCQktdmFsaWRhdGUga2V5IFwKQEAgLTE2NiwxNiArMTY5LDE2IEBACiAJZ3JpZCBjb2x1bW5jb25maWd1cmUgJHcuZGVzdCAxIC13ZWlnaHQgMQogCXBhY2sgJHcuZGVzdCAtYW5jaG9yIG53IC1maWxsIHggLXBhZHkgNSAtcGFkeCA1CiAKLQlsYWJlbGZyYW1lICR3Lm9wdGlvbnMgLXRleHQgW21jICJUcmFuc2ZlciBPcHRpb25zIl0KLQljaGVja2J1dHRvbiAkdy5vcHRpb25zLmZvcmNlIFwKKwkke05TfTo6bGFiZWxmcmFtZSAkdy5vcHRpb25zIC10ZXh0IFttYyAiVHJhbnNmZXIgT3B0aW9ucyJdCisJJHtOU306OmNoZWNrYnV0dG9uICR3Lm9wdGlvbnMuZm9yY2UgXAogCQktdGV4dCBbbWMgIkZvcmNlIG92ZXJ3cml0ZSBleGlzdGluZyBicmFuY2ggKG1heSBkaXNjYXJkIGNoYW5nZXMpIl0gXAogCQktdmFyaWFibGUgcHVzaF9mb3JjZQogCWdyaWQgJHcub3B0aW9ucy5mb3JjZSAtY29sdW1uc3BhbiAyIC1zdGlja3kgdwotCWNoZWNrYnV0dG9uICR3Lm9wdGlvbnMudGhpbiBcCisJJHtOU306OmNoZWNrYnV0dG9uICR3Lm9wdGlvbnMudGhpbiBcCiAJCS10ZXh0IFttYyAiVXNlIHRoaW4gcGFjayAoZm9yIHNsb3cgbmV0d29yayBjb25uZWN0aW9ucykiXSBcCiAJCS12YXJpYWJsZSBwdXNoX3RoaW4KIAlncmlkICR3Lm9wdGlvbnMudGhpbiAtY29sdW1uc3BhbiAyIC1zdGlja3kgdwotCWNoZWNrYnV0dG9uICR3Lm9wdGlvbnMudGFncyBcCisJJHtOU306OmNoZWNrYnV0dG9uICR3Lm9wdGlvbnMudGFncyBcCiAJCS10ZXh0IFttYyAiSW5jbHVkZSB0YWdzIl0gXAogCQktdmFyaWFibGUgcHVzaF90YWdzCiAJZ3JpZCAkdy5vcHRpb25zLnRhZ3MgLWNvbHVtbnNwYW4gMiAtc3RpY2t5IHcKQEAgLTE5MSw1ICsxOTQsNiBAQAogCWJpbmQgJHcgPEtleS1Fc2NhcGU+ICJkZXN0cm95ICR3IgogCWJpbmQgJHcgPEtleS1SZXR1cm4+IFtsaXN0IHN0YXJ0X3B1c2hfYW55d2hlcmVfYWN0aW9uICR3XQogCXdtIHRpdGxlICR3IFthcHBlbmQgIlthcHBuYW1lXSAoW3JlcG9uYW1lXSk6ICIgW21jICJQdXNoIl1dCisJd20gZGVpY29uaWZ5ICR3CiAJdGt3YWl0IHdpbmRvdyAkdwogfQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9wby9kZS5wbyBiL2dpdC1ndWkvcG8vZGUucG8KaW5kZXggNTFhYmI1MC4uNDRjNWRkYyAxMDA2NDQKLS0tIGEvZ2l0LWd1aS9wby9kZS5wbworKysgYi9naXQtZ3VpL3BvL2RlLnBvCkBAIC03LDQxICs3LDQxIEBACiBtc2dzdHIgIiIKICJQcm9qZWN0LUlkLVZlcnNpb246IGdpdC1ndWlcbiIKICJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMDgtMTItMDYgMjA6NTErMDEwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMDgtMTItMDYgMjE6MjIrMDEwMFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEwLTAxLTI2IDIyOjIyKzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTAxLTI2IDIyOjI1KzAxMDBcbiIKICJMYXN0LVRyYW5zbGF0b3I6IENocmlzdGlhbiBTdGltbWluZyA8c3RpbW1pbmdAdHVoaC5kZT5cbiIKICJMYW5ndWFnZS1UZWFtOiBHZXJtYW5cbiIKICJNSU1FLVZlcnNpb246IDEuMFxuIgogIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgogIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKIAotIzogZ2l0LWd1aS5zaDo0MSBnaXQtZ3VpLnNoOjYzNCBnaXQtZ3VpLnNoOjY0OCBnaXQtZ3VpLnNoOjY2MSBnaXQtZ3VpLnNoOjc0NAotIzogZ2l0LWd1aS5zaDo3NjMKKyM6IGdpdC1ndWkuc2g6NDEgZ2l0LWd1aS5zaDo3OTMgZ2l0LWd1aS5zaDo4MDcgZ2l0LWd1aS5zaDo4MjAgZ2l0LWd1aS5zaDo5MDMKKyM6IGdpdC1ndWkuc2g6OTIyCiBtc2dpZCAiZ2l0LWd1aTogZmF0YWwgZXJyb3IiCiBtc2dzdHIgImdpdC1ndWk6IFByb2dyYW1tZmVobGVyIgogCi0jOiBnaXQtZ3VpLnNoOjU5MworIzogZ2l0LWd1aS5zaDo3NDMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJJbnZhbGlkIGZvbnQgc3BlY2lmaWVkIGluICVzOiIKIG1zZ3N0ciAiVW5nw7xsdGlnZSBaZWljaGVuc2F0ei1BbmdhYmUgaW4gJXM6IgogCi0jOiBnaXQtZ3VpLnNoOjYyMAorIzogZ2l0LWd1aS5zaDo3NzkKIG1zZ2lkICJNYWluIEZvbnQiCiBtc2dzdHIgIlByb2dyYW1tc2NocmlmdGFydCIKIAotIzogZ2l0LWd1aS5zaDo2MjEKKyM6IGdpdC1ndWkuc2g6NzgwCiBtc2dpZCAiRGlmZi9Db25zb2xlIEZvbnQiCiBtc2dzdHIgIlZlcmdsZWljaC1TY2hyaWZ0YXJ0IgogCi0jOiBnaXQtZ3VpLnNoOjYzNQorIzogZ2l0LWd1aS5zaDo3OTQKIG1zZ2lkICJDYW5ub3QgZmluZCBnaXQgaW4gUEFUSC4iCiBtc2dzdHIgIkdpdCBrYW5uIGltIFBBVEggbmljaHQgZ2VmdW5kZW4gd2VyZGVuLiIKIAotIzogZ2l0LWd1aS5zaDo2NjIKKyM6IGdpdC1ndWkuc2g6ODIxCiBtc2dpZCAiQ2Fubm90IHBhcnNlIEdpdCB2ZXJzaW9uIHN0cmluZzoiCiBtc2dzdHIgIkdpdCBWZXJzaW9uc2FuZ2FiZSBrYW5uIG5pY2h0IGVya2FubnQgd2VyZGVuOiIKIAotIzogZ2l0LWd1aS5zaDo2ODAKKyM6IGdpdC1ndWkuc2g6ODM5CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiIgogIkdpdCB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuIgpAQCAtNjAsNDQ3ICs2MCw0NzkgQEAKICJcbiIKICJTb2xsIGFuZ2Vub21tZW4gd2VyZGVuLCDCuyVzwqsgc2VpIFZlcnNpb24gMS41LjA/XG4iCiAKLSM6IGdpdC1ndWkuc2g6OTE4CisjOiBnaXQtZ3VpLnNoOjExMjgKIG1zZ2lkICJHaXQgZGlyZWN0b3J5IG5vdCBmb3VuZDoiCiBtc2dzdHIgIkdpdC1WZXJ6ZWljaG5pcyBuaWNodCBnZWZ1bmRlbjoiCiAKLSM6IGdpdC1ndWkuc2g6OTI1CisjOiBnaXQtZ3VpLnNoOjExNDYKIG1zZ2lkICJDYW5ub3QgbW92ZSB0byB0b3Agb2Ygd29ya2luZyBkaXJlY3Rvcnk6IgogbXNnc3RyICIiCiAiRXMga29ubnRlIG5pY2h0IGluIGRhcyBvYmVyc3RlIFZlcnplaWNobmlzIGRlciBBcmJlaXRza29waWUgZ2V3ZWNoc2VsdCAiCiAid2VyZGVuOiIKIAotIzogZ2l0LWd1aS5zaDo5MzIKLW1zZ2lkICJDYW5ub3QgdXNlIGZ1bm55IC5naXQgZGlyZWN0b3J5OiIKLW1zZ3N0ciAiVW5lcndhcnRldGUgU3RydWt0dXIgZGVzIC5naXQgVmVyemVpY2huaXM6IgorIzogZ2l0LWd1aS5zaDoxMTU0Cittc2dpZCAiQ2Fubm90IHVzZSBiYXJlIHJlcG9zaXRvcnk6IgorbXNnc3RyICJMZWVyZXMgUHJvamVrdGFyY2hpdiBrYW5uIG5pY2h0IGJlbnV0enQgd2VyZGVuOiIKIAotIzogZ2l0LWd1aS5zaDo5MzcKKyM6IGdpdC1ndWkuc2g6MTE2MgogbXNnaWQgIk5vIHdvcmtpbmcgZGlyZWN0b3J5IgogbXNnc3RyICJLZWluIEFyYmVpdHN2ZXJ6ZWljaG5pcyIKIAotIzogZ2l0LWd1aS5zaDoxMDg0IGxpYi9jaGVja291dF9vcC50Y2w6MjgzCisjOiBnaXQtZ3VpLnNoOjEzMzQgbGliL2NoZWNrb3V0X29wLnRjbDozMDYKIG1zZ2lkICJSZWZyZXNoaW5nIGZpbGUgc3RhdHVzLi4uIgogbXNnc3RyICJEYXRlaXN0YXR1cyBha3R1YWxpc2llcmVuLi4uIgogCi0jOiBnaXQtZ3VpLnNoOjExNDkKKyM6IGdpdC1ndWkuc2g6MTM5MAogbXNnaWQgIlNjYW5uaW5nIGZvciBtb2RpZmllZCBmaWxlcyAuLi4iCiBtc2dzdHIgIk5hY2ggZ2XDpG5kZXJ0ZW4gRGF0ZWllbiBzdWNoZW4uLi4iCiAKLSM6IGdpdC1ndWkuc2g6MTM2NworIzogZ2l0LWd1aS5zaDoxNDU0CiBtc2dpZCAiQ2FsbGluZyBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4uLiIKIG1zZ3N0ciAiQXVmcnVmZW4gZGVyIEVpbnRyYWdlbi1Wb3JiZXJlaXRlbi1Lb250cm9sbGUuLi4iCiAKLSM6IGdpdC1ndWkuc2g6MTM4NAorIzogZ2l0LWd1aS5zaDoxNDcxCiBtc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZXBhcmUtY29tbWl0LW1zZyBob29rLiIKLW1zZ3N0ciAiRWludHJhZ2VuIGFiZ2VsZWhudCBkdXJjaCBFaW50cmFnZW4tVm9yYmVyZWl0ZW4tS29udHJvbGxlICjCu3ByZXBhcmUtY29tbWl0IGhvb2vCqykuIgorbXNnc3RyICIiCisiRWludHJhZ2VuIGFiZ2VsZWhudCBkdXJjaCBFaW50cmFnZW4tVm9yYmVyZWl0ZW4tS29udHJvbGxlICjCu3ByZXBhcmUtY29tbWl0ICIKKyJob29rwqspLiIKIAotIzogZ2l0LWd1aS5zaDoxNTQyIGxpYi9icm93c2VyLnRjbDoyNDYKKyM6IGdpdC1ndWkuc2g6MTYyOSBsaWIvYnJvd3Nlci50Y2w6MjQ2CiBtc2dpZCAiUmVhZHkuIgogbXNnc3RyICJCZXJlaXQuIgogCi0jOiBnaXQtZ3VpLnNoOjE1OTAKKyM6IGdpdC1ndWkuc2g6MTc4NworIywgdGNsLWZvcm1hdAorbXNnaWQgIkRpc3BsYXlpbmcgb25seSAlcyBvZiAlcyBmaWxlcy4iCittc2dzdHIgIk51ciAlcyB2b24gJXMgRGF0ZWllbiB3ZXJkZW4gYW5nZXplaWd0LiIKKworIzogZ2l0LWd1aS5zaDoxOTEzCiBtc2dpZCAiVW5tb2RpZmllZCIKIG1zZ3N0ciAiVW52ZXLDpG5kZXJ0IgogCi0jOiBnaXQtZ3VpLnNoOjE1OTIKKyM6IGdpdC1ndWkuc2g6MTkxNQogbXNnaWQgIk1vZGlmaWVkLCBub3Qgc3RhZ2VkIgogbXNnc3RyICJWZXLDpG5kZXJ0LCBuaWNodCBiZXJlaXRnZXN0ZWxsdCIKIAotIzogZ2l0LWd1aS5zaDoxNTkzIGdpdC1ndWkuc2g6MTU5OAorIzogZ2l0LWd1aS5zaDoxOTE2IGdpdC1ndWkuc2g6MTkyNAogbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0IgogbXNnc3RyICJCZXJlaXRnZXN0ZWxsdCB6dW0gRWludHJhZ2VuIgogCi0jOiBnaXQtZ3VpLnNoOjE1OTQgZ2l0LWd1aS5zaDoxNTk5CisjOiBnaXQtZ3VpLnNoOjE5MTcgZ2l0LWd1aS5zaDoxOTI1CiBtc2dpZCAiUG9ydGlvbnMgc3RhZ2VkIGZvciBjb21taXQiCiBtc2dzdHIgIlRlaWx3ZWlzZSBiZXJlaXRnZXN0ZWxsdCB6dW0gRWludHJhZ2VuIgogCi0jOiBnaXQtZ3VpLnNoOjE1OTUgZ2l0LWd1aS5zaDoxNjAwCisjOiBnaXQtZ3VpLnNoOjE5MTggZ2l0LWd1aS5zaDoxOTI2CiBtc2dpZCAiU3RhZ2VkIGZvciBjb21taXQsIG1pc3NpbmciCiBtc2dzdHIgIkJlcmVpdGdlc3RlbGx0IHp1bSBFaW50cmFnZW4sIGZlaGxlbmQiCiAKLSM6IGdpdC1ndWkuc2g6MTY1OAorIzogZ2l0LWd1aS5zaDoxOTIwCiBtc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIG5vdCBzdGFnZWQiCiBtc2dzdHIgIkRhdGVpdHlwIGdlw6RuZGVydCwgbmljaHQgYmVyZWl0Z2VzdGVsbHQiCiAKLSM6IGdpdC1ndWkuc2g6MTY1OQorIzogZ2l0LWd1aS5zaDoxOTIxCiBtc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIHN0YWdlZCIKIG1zZ3N0ciAiRGF0ZWl0eXAgZ2XDpG5kZXJ0LCBiZXJlaXRnZXN0ZWxsdCIKIAotIzogZ2l0LWd1aS5zaDoxNjYxCisjOiBnaXQtZ3VpLnNoOjE5MjMKIG1zZ2lkICJVbnRyYWNrZWQsIG5vdCBzdGFnZWQiCiBtc2dzdHIgIk5pY2h0IHVudGVyIFZlcnNpb25za29udHJvbGxlLCBuaWNodCBiZXJlaXRnZXN0ZWxsdCIKIAotIzogZ2l0LWd1aS5zaDoxNjAyCisjOiBnaXQtZ3VpLnNoOjE5MjgKIG1zZ2lkICJNaXNzaW5nIgogbXNnc3RyICJGZWhsZW5kIgogCi0jOiBnaXQtZ3VpLnNoOjE2MDMKKyM6IGdpdC1ndWkuc2g6MTkyOQogbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCIKIG1zZ3N0ciAiQmVyZWl0Z2VzdGVsbHQgenVtIEzDtnNjaGVuIgogCi0jOiBnaXQtZ3VpLnNoOjE2MDQKKyM6IGdpdC1ndWkuc2g6MTkzMAogbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCwgc3RpbGwgcHJlc2VudCIKIG1zZ3N0ciAiQmVyZWl0Z2VzdGVsbHQgenVtIEzDtnNjaGVuLCB0cm90emRlbSB2b3JoYW5kZW4iCiAKLSM6IGdpdC1ndWkuc2g6MTYwNiBnaXQtZ3VpLnNoOjE2MDcgZ2l0LWd1aS5zaDoxNjA4IGdpdC1ndWkuc2g6MTYwOQorIzogZ2l0LWd1aS5zaDoxOTMyIGdpdC1ndWkuc2g6MTkzMyBnaXQtZ3VpLnNoOjE5MzQgZ2l0LWd1aS5zaDoxOTM1CisjOiBnaXQtZ3VpLnNoOjE5MzYgZ2l0LWd1aS5zaDoxOTM3CiBtc2dpZCAiUmVxdWlyZXMgbWVyZ2UgcmVzb2x1dGlvbiIKIG1zZ3N0ciAiS29uZmxpa3RhdWZsw7ZzdW5nIG7DtnRpZyIKIAotIzogZ2l0LWd1aS5zaDoxNjQ0CisjOiBnaXQtZ3VpLnNoOjE5NzIKIG1zZ2lkICJTdGFydGluZyBnaXRrLi4uIHBsZWFzZSB3YWl0Li4uIgogbXNnc3RyICJHaXRrIHdpcmQgZ2VzdGFydGV0Li4uIGJpdHRlIHdhcnRlbi4iCiAKLSM6IGdpdC1ndWkuc2g6MTY5OAorIzogZ2l0LWd1aS5zaDoxOTg0CiBtc2dpZCAiQ291bGRuJ3QgZmluZCBnaXRrIGluIFBBVEgiCiBtc2dzdHIgIkdpdGsga2FubiBpbSBQQVRIIG5pY2h0IGdlZnVuZGVuIHdlcmRlbi4iCiAKLSM6IGdpdC1ndWkuc2g6MTk0OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM2CisjOiBnaXQtZ3VpLnNoOjIwNDMKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdCBndWkgaW4gUEFUSCIKK21zZ3N0ciAiwrtHaXQgZ3Vpwqsga2FubiBpbSBQQVRIIG5pY2h0IGdlZnVuZGVuIHdlcmRlbi4iCisKKyM6IGdpdC1ndWkuc2g6MjQ1NSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM2CiBtc2dpZCAiUmVwb3NpdG9yeSIKIG1zZ3N0ciAiUHJvamVrdGFyY2hpdiIKIAotIzogZ2l0LWd1aS5zaDoxODYxCisjOiBnaXQtZ3VpLnNoOjI0NTYKIG1zZ2lkICJFZGl0IgogbXNnc3RyICJCZWFyYmVpdGVuIgogCi0jOiBnaXQtZ3VpLnNoOjE4NjMgbGliL2Nob29zZV9yZXYudGNsOjU2MQorIzogZ2l0LWd1aS5zaDoyNDU4IGxpYi9jaG9vc2VfcmV2LnRjbDo1NjEKIG1zZ2lkICJCcmFuY2giCiBtc2dzdHIgIlp3ZWlnIgogCi0jOiBnaXQtZ3VpLnNoOjE4NjYgbGliL2Nob29zZV9yZXYudGNsOjU0OAorIzogZ2l0LWd1aS5zaDoyNDYxIGxpYi9jaG9vc2VfcmV2LnRjbDo1NDgKIG1zZ2lkICJDb21taXRAQG5vdW4iCiBtc2dzdHIgIlZlcnNpb24iCiAKLSM6IGdpdC1ndWkuc2g6MTg2OSBsaWIvbWVyZ2UudGNsOjEyMCBsaWIvbWVyZ2UudGNsOjE0OSBsaWIvbWVyZ2UudGNsOjE2NworIzogZ2l0LWd1aS5zaDoyNDY0IGxpYi9tZXJnZS50Y2w6MTIxIGxpYi9tZXJnZS50Y2w6MTUwIGxpYi9tZXJnZS50Y2w6MTY4CiBtc2dpZCAiTWVyZ2UiCiBtc2dzdHIgIlp1c2FtbWVuZsO8aHJlbiIKIAotIzogZ2l0LWd1aS5zaDoxODcwIGxpYi9jaG9vc2VfcmV2LnRjbDo1NTcKKyM6IGdpdC1ndWkuc2g6MjQ2NSBsaWIvY2hvb3NlX3Jldi50Y2w6NTU3CiBtc2dpZCAiUmVtb3RlIgogbXNnc3RyICJBbmRlcmUgQXJjaGl2ZSIKIAotIzogZ2l0LWd1aS5zaDoyMjkzCisjOiBnaXQtZ3VpLnNoOjI0NjgKIG1zZ2lkICJUb29scyIKIG1zZ3N0ciAiV2Vya3pldWdlIgogCi0jOiBnaXQtZ3VpLnNoOjIzMDIKKyM6IGdpdC1ndWkuc2g6MjQ3NwogbXNnaWQgIkV4cGxvcmUgV29ya2luZyBDb3B5IgogbXNnc3RyICJBcmJlaXRza29waWUgaW0gRGF0ZWltYW5hZ2VyIgogCi0jOiBnaXQtZ3VpLnNoOjIyNDcKKyM6IGdpdC1ndWkuc2g6MjQ4MwogbXNnaWQgIkJyb3dzZSBDdXJyZW50IEJyYW5jaCdzIEZpbGVzIgogbXNnc3RyICJBa3R1ZWxsZW4gWndlaWcgZHVyY2hibMOkdHRlcm4iCiAKLSM6IGdpdC1ndWkuc2g6MTg4MworIzogZ2l0LWd1aS5zaDoyNDg3CiBtc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcy4uLiIKIG1zZ3N0ciAiRWluZW4gWndlaWcgZHVyY2hibMOkdHRlcm4uLi4iCiAKLSM6IGdpdC1ndWkuc2g6MTg4OAorIzogZ2l0LWd1aS5zaDoyNDkyCiBtc2dpZCAiVmlzdWFsaXplIEN1cnJlbnQgQnJhbmNoJ3MgSGlzdG9yeSIKIG1zZ3N0ciAiQWt0dWVsbGVuIFp3ZWlnIGRhcnN0ZWxsZW4iCiAKLSM6IGdpdC1ndWkuc2g6MTg5MgorIzogZ2l0LWd1aS5zaDoyNDk2CiBtc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSIKIG1zZ3N0ciAiQWxsZSBad2VpZ2UgZGFyc3RlbGxlbiIKIAotIzogZ2l0LWd1aS5zaDoxODk5CisjOiBnaXQtZ3VpLnNoOjI1MDMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJCcm93c2UgJXMncyBGaWxlcyIKIG1zZ3N0ciAiWndlaWcgwrslc8KrIGR1cmNoYmzDpHR0ZXJuIgogCi0jOiBnaXQtZ3VpLnNoOjE5MDEKKyM6IGdpdC1ndWkuc2g6MjUwNQogIywgdGNsLWZvcm1hdAogbXNnaWQgIlZpc3VhbGl6ZSAlcydzIEhpc3RvcnkiCiBtc2dzdHIgIkhpc3RvcmllIHZvbiDCuyVzwqsgZGFyc3RlbGxlbiIKIAotIzogZ2l0LWd1aS5zaDoxOTA2IGxpYi9kYXRhYmFzZS50Y2w6MjcgbGliL2RhdGFiYXNlLnRjbDo2NworIzogZ2l0LWd1aS5zaDoyNTEwIGxpYi9kYXRhYmFzZS50Y2w6MjcgbGliL2RhdGFiYXNlLnRjbDo2NwogbXNnaWQgIkRhdGFiYXNlIFN0YXRpc3RpY3MiCiBtc2dzdHIgIkRhdGVuYmFua3N0YXRpc3RpayIKIAotIzogZ2l0LWd1aS5zaDoxOTA5IGxpYi9kYXRhYmFzZS50Y2w6MzQKKyM6IGdpdC1ndWkuc2g6MjUxMyBsaWIvZGF0YWJhc2UudGNsOjM0CiBtc2dpZCAiQ29tcHJlc3MgRGF0YWJhc2UiCiBtc2dzdHIgIkRhdGVuYmFuayBrb21wcmltaWVyZW4iCiAKLSM6IGdpdC1ndWkuc2g6MTkxMgorIzogZ2l0LWd1aS5zaDoyNTE2CiBtc2dpZCAiVmVyaWZ5IERhdGFiYXNlIgogbXNnc3RyICJEYXRlbmJhbmsgw7xiZXJwcsO8ZmVuIgogCi0jOiBnaXQtZ3VpLnNoOjE5MTkgZ2l0LWd1aS5zaDoxOTIzIGdpdC1ndWkuc2g6MTkyNyBsaWIvc2hvcnRjdXQudGNsOjcKLSM6IGxpYi9zaG9ydGN1dC50Y2w6MzkgbGliL3Nob3J0Y3V0LnRjbDo3MQorIzogZ2l0LWd1aS5zaDoyNTIzIGdpdC1ndWkuc2g6MjUyNyBnaXQtZ3VpLnNoOjI1MzEgbGliL3Nob3J0Y3V0LnRjbDo4CisjOiBsaWIvc2hvcnRjdXQudGNsOjQwIGxpYi9zaG9ydGN1dC50Y2w6NzIKIG1zZ2lkICJDcmVhdGUgRGVza3RvcCBJY29uIgogbXNnc3RyICJEZXNrdG9wLUljb24gZXJzdGVsbGVuIgogCi0jOiBnaXQtZ3VpLnNoOjE5MzIgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxNzcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxODUKKyM6IGdpdC1ndWkuc2g6MjUzOSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE4MyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE5MQogbXNnaWQgIlF1aXQiCiBtc2dzdHIgIkJlZW5kZW4iCiAKLSM6IGdpdC1ndWkuc2g6MTkzOQorIzogZ2l0LWd1aS5zaDoyNTQ3CiBtc2dpZCAiVW5kbyIKIG1zZ3N0ciAiUsO8Y2tnw6RuZ2lnIgogCi0jOiBnaXQtZ3VpLnNoOjE5NDIKKyM6IGdpdC1ndWkuc2g6MjU1MAogbXNnaWQgIlJlZG8iCiBtc2dzdHIgIldpZWRlcmhvbGVuIgogCi0jOiBnaXQtZ3VpLnNoOjE5NDYgZ2l0LWd1aS5zaDoyNDQzCisjOiBnaXQtZ3VpLnNoOjI1NTQgZ2l0LWd1aS5zaDozMTA5CiBtc2dpZCAiQ3V0IgogbXNnc3RyICJBdXNzY2huZWlkZW4iCiAKLSM6IGdpdC1ndWkuc2g6MTk0OSBnaXQtZ3VpLnNoOjI0NDYgZ2l0LWd1aS5zaDoyNTIwIGdpdC1ndWkuc2g6MjYxNAorIzogZ2l0LWd1aS5zaDoyNTU3IGdpdC1ndWkuc2g6MzExMiBnaXQtZ3VpLnNoOjMxODYgZ2l0LWd1aS5zaDozMjU5CiAjOiBsaWIvY29uc29sZS50Y2w6NjkKIG1zZ2lkICJDb3B5IgogbXNnc3RyICJLb3BpZXJlbiIKIAotIzogZ2l0LWd1aS5zaDoxOTUyIGdpdC1ndWkuc2g6MjQ0OQorIzogZ2l0LWd1aS5zaDoyNTYwIGdpdC1ndWkuc2g6MzExNQogbXNnaWQgIlBhc3RlIgogbXNnc3RyICJFaW5mw7xnZW4iCiAKLSM6IGdpdC1ndWkuc2g6MTk1NSBnaXQtZ3VpLnNoOjI0NTIgbGliL2JyYW5jaF9kZWxldGUudGNsOjI2CisjOiBnaXQtZ3VpLnNoOjI1NjMgZ2l0LWd1aS5zaDozMTE4IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyNgogIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozOAogbXNnaWQgIkRlbGV0ZSIKIG1zZ3N0ciAiTMO2c2NoZW4iCiAKLSM6IGdpdC1ndWkuc2g6MTk1OSBnaXQtZ3VpLnNoOjI0NTYgZ2l0LWd1aS5zaDoyNjE4IGxpYi9jb25zb2xlLnRjbDo3MQorIzogZ2l0LWd1aS5zaDoyNTY3IGdpdC1ndWkuc2g6MzEyMiBnaXQtZ3VpLnNoOjMyNjMgbGliL2NvbnNvbGUudGNsOjcxCiBtc2dpZCAiU2VsZWN0IEFsbCIKIG1zZ3N0ciAiQWxsZSBhdXN3w6RobGVuIgogCi0jOiBnaXQtZ3VpLnNoOjE5NjgKKyM6IGdpdC1ndWkuc2g6MjU3NgogbXNnaWQgIkNyZWF0ZS4uLiIKIG1zZ3N0ciAiRXJzdGVsbGVuLi4uIgogCi0jOiBnaXQtZ3VpLnNoOjE5NzQKKyM6IGdpdC1ndWkuc2g6MjU4MgogbXNnaWQgIkNoZWNrb3V0Li4uIgogbXNnc3RyICJVbXN0ZWxsZW4uLi4iCiAKLSM6IGdpdC1ndWkuc2g6MTk4MAorIzogZ2l0LWd1aS5zaDoyNTg4CiBtc2dpZCAiUmVuYW1lLi4uIgogbXNnc3RyICJVbWJlbmVubmVuLi4uIgogCi0jOiBnaXQtZ3VpLnNoOjE5ODUgZ2l0LWd1aS5zaDoyMDg1CisjOiBnaXQtZ3VpLnNoOjI1OTMKIG1zZ2lkICJEZWxldGUuLi4iCiBtc2dzdHIgIkzDtnNjaGVuLi4uIgogCi0jOiBnaXQtZ3VpLnNoOjE5OTAKKyM6IGdpdC1ndWkuc2g6MjU5OAogbXNnaWQgIlJlc2V0Li4uIgogbXNnc3RyICJadXLDvGNrc2V0emVuLi4uIgogCi0jOiBnaXQtZ3VpLnNoOjIzNzIKKyM6IGdpdC1ndWkuc2g6MjYwOAogbXNnaWQgIkRvbmUiCiBtc2dzdHIgIkZlcnRpZyIKIAotIzogZ2l0LWd1aS5zaDoyMzc0CisjOiBnaXQtZ3VpLnNoOjI2MTAKIG1zZ2lkICJDb21taXRAQHZlcmIiCiBtc2dzdHIgIkVpbnRyYWdlbiIKIAotIzogZ2l0LWd1aS5zaDoyMzgzIGdpdC1ndWkuc2g6Mjc4NgorIzogZ2l0LWd1aS5zaDoyNjE5IGdpdC1ndWkuc2g6MzA1MAogbXNnaWQgIk5ldyBDb21taXQiCiBtc2dzdHIgIk5ldWUgVmVyc2lvbiIKIAotIzogZ2l0LWd1aS5zaDoyMDEwIGdpdC1ndWkuc2g6MjM5NgorIzogZ2l0LWd1aS5zaDoyNjI3IGdpdC1ndWkuc2g6MzA1NwogbXNnaWQgIkFtZW5kIExhc3QgQ29tbWl0IgogbXNnc3RyICJMZXR6dGUgbmFjaGJlc3Nlcm4iCiAKLSM6IGdpdC1ndWkuc2g6MjAxOSBnaXQtZ3VpLnNoOjIzNTYgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo5OQorIzogZ2l0LWd1aS5zaDoyNjM3IGdpdC1ndWkuc2g6MzAxMSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjk5CiBtc2dpZCAiUmVzY2FuIgogbXNnc3RyICJOZXUgbGFkZW4iCiAKLSM6IGdpdC1ndWkuc2g6MjAyNQorIzogZ2l0LWd1aS5zaDoyNjQzCiBtc2dpZCAiU3RhZ2UgVG8gQ29tbWl0IgogbXNnc3RyICJadW0gRWludHJhZ2VuIGJlcmVpdHN0ZWxsZW4iCiAKLSM6IGdpdC1ndWkuc2g6MjAzMQorIzogZ2l0LWd1aS5zaDoyNjQ5CiBtc2dpZCAiU3RhZ2UgQ2hhbmdlZCBGaWxlcyBUbyBDb21taXQiCiBtc2dzdHIgIkdlw6RuZGVydGUgRGF0ZWllbiBiZXJlaXRzdGVsbGVuIgogCi0jOiBnaXQtZ3VpLnNoOjIwMzcKKyM6IGdpdC1ndWkuc2g6MjY1NQogbXNnaWQgIlVuc3RhZ2UgRnJvbSBDb21taXQiCiBtc2dzdHIgIkF1cyBkZXIgQmVyZWl0c3RlbGx1bmcgaGVyYXVzbmVobWVuIgogCi0jOiBnaXQtZ3VpLnNoOjIwNDIgbGliL2luZGV4LnRjbDozOTUKKyM6IGdpdC1ndWkuc2g6MjY2MSBsaWIvaW5kZXgudGNsOjQxMgogbXNnaWQgIlJldmVydCBDaGFuZ2VzIgogbXNnc3RyICLDhG5kZXJ1bmdlbiB2ZXJ3ZXJmZW4iCiAKLSM6IGdpdC1ndWkuc2g6MjE0MSBnaXQtZ3VpLnNoOjI3MDIKKyM6IGdpdC1ndWkuc2g6MjY2OSBnaXQtZ3VpLnNoOjMzMTAgZ2l0LWd1aS5zaDozMzQxCiBtc2dpZCAiU2hvdyBMZXNzIENvbnRleHQiCiBtc2dzdHIgIldlbmlnZXIgWmVpbGVuIGFuemVpZ2VuIgogCi0jOiBnaXQtZ3VpLnNoOjIxNDUgZ2l0LWd1aS5zaDoyNzA2CisjOiBnaXQtZ3VpLnNoOjI2NzMgZ2l0LWd1aS5zaDozMzE0IGdpdC1ndWkuc2g6MzM0NQogbXNnaWQgIlNob3cgTW9yZSBDb250ZXh0IgogbXNnc3RyICJNZWhyIFplaWxlbiBhbnplaWdlbiIKIAotIzogZ2l0LWd1aS5zaDoyMTUxIGdpdC1ndWkuc2g6MjQ3MCBnaXQtZ3VpLnNoOjI1NjkKKyM6IGdpdC1ndWkuc2g6MjY4MCBnaXQtZ3VpLnNoOjMwMjQgZ2l0LWd1aS5zaDozMTMzCiBtc2dpZCAiU2lnbiBPZmYiCiBtc2dzdHIgIkFiemVpY2huZW4iCiAKLSM6IGdpdC1ndWkuc2g6MjQ1OAorIzogZ2l0LWd1aS5zaDoyNjk2CiBtc2dpZCAiTG9jYWwgTWVyZ2UuLi4iCiBtc2dzdHIgIkxva2FsZXMgWnVzYW1tZW5mw7xocmVuLi4uIgogCi0jOiBnaXQtZ3VpLnNoOjIwNjkKKyM6IGdpdC1ndWkuc2g6MjcwMQogbXNnaWQgIkFib3J0IE1lcmdlLi4uIgogbXNnc3RyICJadXNhbW1lbmbDvGhyZW4gYWJicmVjaGVuLi4uIgogCi0jOiBnaXQtZ3VpLnNoOjI0NzUKKyM6IGdpdC1ndWkuc2g6MjcxMyBnaXQtZ3VpLnNoOjI3NDEKIG1zZ2lkICJBZGQuLi4iCiBtc2dzdHIgIkhpbnp1ZsO8Z2VuLi4uIgogCi0jOiBnaXQtZ3VpLnNoOjI0NzkKKyM6IGdpdC1ndWkuc2g6MjcxNwogbXNnaWQgIlB1c2guLi4iCiBtc2dzdHIgIlZlcnNlbmRlbi4uLiIKIAotIzogZ2l0LWd1aS5zaDoyNDgzCisjOiBnaXQtZ3VpLnNoOjI3MjEKIG1zZ2lkICJEZWxldGUgQnJhbmNoLi4uIgogbXNnc3RyICJad2VpZyBsw7ZzY2hlbi4uLiIKIAotIzogZ2l0LWd1aS5zaDoyNDkzIGdpdC1ndWkuc2g6MjUxNSBsaWIvYWJvdXQudGNsOjE0Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAKKyM6IGdpdC1ndWkuc2g6MjczMSBnaXQtZ3VpLnNoOjMyOTIKK21zZ2lkICJPcHRpb25zLi4uIgorbXNnc3RyICJPcHRpb25lbi4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzQyCittc2dpZCAiUmVtb3ZlLi4uIgorbXNnc3RyICJFbnRmZXJuZW4uLi4iCisKKyM6IGdpdC1ndWkuc2g6Mjc1MSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwCittc2dpZCAiSGVscCIKK21zZ3N0ciAiSGlsZmUiCisKKyM6IGdpdC1ndWkuc2g6Mjc1NSBnaXQtZ3VpLnNoOjI3NTkgbGliL2Fib3V0LnRjbDoxNAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUzCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQWJvdXQgJXMiCiBtc2dzdHIgIsOcYmVyICVzIgogCi0jOiBnaXQtZ3VpLnNoOjIwOTkKLW1zZ2lkICJQcmVmZXJlbmNlcy4uLiIKLW1zZ3N0ciAiRWluc3RlbGx1bmdlbi4uLiIKLQotIzogZ2l0LWd1aS5zaDoyMTA3IGdpdC1ndWkuc2g6MjYzOQotbXNnaWQgIk9wdGlvbnMuLi4iCi1tc2dzdHIgIk9wdGlvbmVuLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI1NzYKLW1zZ2lkICJSZW1vdmUuLi4iCi1tc2dzdHIgIkVudGZlcm5lbi4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNTg1IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAKLW1zZ2lkICJIZWxwIgotbXNnc3RyICJIaWxmZSIKLQotIzogZ2l0LWd1aS5zaDoyMTU0CisjOiBnaXQtZ3VpLnNoOjI3ODMKIG1zZ2lkICJPbmxpbmUgRG9jdW1lbnRhdGlvbiIKIG1zZ3N0ciAiT25saW5lLURva3VtZW50YXRpb24iCiAKLSM6IGdpdC1ndWkuc2g6MjYxNCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTYKKyM6IGdpdC1ndWkuc2g6Mjc4NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTYKIG1zZ2lkICJTaG93IFNTSCBLZXkiCiBtc2dzdHIgIlNTSC1TY2hsw7xzc2VsIGFuemVpZ2VuIgogCi0jOiBnaXQtZ3VpLnNoOjI3MDcKKyM6IGdpdC1ndWkuc2g6Mjg5MwogIywgdGNsLWZvcm1hdAogbXNnaWQgImZhdGFsOiBjYW5ub3Qgc3RhdCBwYXRoICVzOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IgogbXNnc3RyICIiCiAiRmVobGVyOiBWZXJ6ZWljaG5pcyDCuyVzwqsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbjogRGF0ZWkgb2RlciBWZXJ6ZWljaG5pcyAiCiAibmljaHQgZ2VmdW5kZW4iCiAKLSM6IGdpdC1ndWkuc2g6MjI3MQorIzogZ2l0LWd1aS5zaDoyOTI2CiBtc2dpZCAiQ3VycmVudCBCcmFuY2g6IgogbXNnc3RyICJBa3R1ZWxsZXIgWndlaWc6IgogCi0jOiBnaXQtZ3VpLnNoOjIyOTIKKyM6IGdpdC1ndWkuc2g6Mjk0NwogbXNnaWQgIlN0YWdlZCBDaGFuZ2VzIChXaWxsIENvbW1pdCkiCiBtc2dzdHIgIkJlcmVpdHN0ZWxsdW5nICh6dW0gRWludHJhZ2VuKSIKIAotIzogZ2l0LWd1aS5zaDoyMzEyCisjOiBnaXQtZ3VpLnNoOjI5NjcKIG1zZ2lkICJVbnN0YWdlZCBDaGFuZ2VzIgogbXNnc3RyICJOaWNodCBiZXJlaXRnZXN0ZWxsdGUgw4RuZGVydW5nZW4iCiAKLSM6IGdpdC1ndWkuc2g6MjM2MgorIzogZ2l0LWd1aS5zaDozMDE3CiBtc2dpZCAiU3RhZ2UgQ2hhbmdlZCIKIG1zZ3N0ciAiQWxsZXMgYmVyZWl0c3RlbGxlbiIKIAotIzogZ2l0LWd1aS5zaDoyMzc4IGxpYi90cmFuc3BvcnQudGNsOjkzIGxpYi90cmFuc3BvcnQudGNsOjE4MgorIzogZ2l0LWd1aS5zaDozMDM2IGxpYi90cmFuc3BvcnQudGNsOjEwNCBsaWIvdHJhbnNwb3J0LnRjbDoxOTMKIG1zZ2lkICJQdXNoIgogbXNnc3RyICJWZXJzZW5kZW4iCiAKLSM6IGdpdC1ndWkuc2g6MjQwOAorIzogZ2l0LWd1aS5zaDozMDcxCiBtc2dpZCAiSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCiBtc2dzdHIgIkVyc3RlIFZlcnNpb25zYmVzY2hyZWlidW5nOiIKIAotIzogZ2l0LWd1aS5zaDoyNDA5CisjOiBnaXQtZ3VpLnNoOjMwNzIKIG1zZ2lkICJBbWVuZGVkIENvbW1pdCBNZXNzYWdlOiIKIG1zZ3N0ciAiTmFjaGdlYmVzc2VydGUgQmVzY2hyZWlidW5nOiIKIAotIzogZ2l0LWd1aS5zaDoyNDEwCisjOiBnaXQtZ3VpLnNoOjMwNzMKIG1zZ2lkICJBbWVuZGVkIEluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgogbXNnc3RyICJOYWNoZ2ViZXNzZXJ0ZSBlcnN0ZSBCZXNjaHJlaWJ1bmc6IgogCi0jOiBnaXQtZ3VpLnNoOjI0MTEKKyM6IGdpdC1ndWkuc2g6MzA3NAogbXNnaWQgIkFtZW5kZWQgTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgogbXNnc3RyICJOYWNoZ2ViZXNzZXJ0ZSBadXNhbW1lbmbDvGhydW5ncy1CZXNjaHJlaWJ1bmc6IgogCi0jOiBnaXQtZ3VpLnNoOjI0MTIKKyM6IGdpdC1ndWkuc2g6MzA3NQogbXNnaWQgIk1lcmdlIENvbW1pdCBNZXNzYWdlOiIKIG1zZ3N0ciAiWnVzYW1tZW5mw7xocnVuZ3MtQmVzY2hyZWlidW5nOiIKIAotIzogZ2l0LWd1aS5zaDoyNDEzCisjOiBnaXQtZ3VpLnNoOjMwNzYKIG1zZ2lkICJDb21taXQgTWVzc2FnZToiCiBtc2dzdHIgIlZlcnNpb25zYmVzY2hyZWlidW5nOiIKIAotIzogZ2l0LWd1aS5zaDoyNDU5IGdpdC1ndWkuc2g6MjYyMiBsaWIvY29uc29sZS50Y2w6NzMKKyM6IGdpdC1ndWkuc2g6MzEyNSBnaXQtZ3VpLnNoOjMyNjcgbGliL2NvbnNvbGUudGNsOjczCiBtc2dpZCAiQ29weSBBbGwiCiBtc2dzdHIgIkFsbGUga29waWVyZW4iCiAKLSM6IGdpdC1ndWkuc2g6MjQ4MyBsaWIvYmxhbWUudGNsOjEwNworIzogZ2l0LWd1aS5zaDozMTQ5IGxpYi9ibGFtZS50Y2w6MTA0CiBtc2dpZCAiRmlsZToiCiBtc2dzdHIgIkRhdGVpOiIKIAotIzogZ2l0LWd1aS5zaDoyODM0CisjOiBnaXQtZ3VpLnNoOjMyNTUKIG1zZ2lkICJSZWZyZXNoIgogbXNnc3RyICJBa3R1YWxpc2llcmVuIgogCi0jOiBnaXQtZ3VpLnNoOjI2MzEKKyM6IGdpdC1ndWkuc2g6MzI3NgogbXNnaWQgIkRlY3JlYXNlIEZvbnQgU2l6ZSIKIG1zZ3N0ciAiU2NocmlmdGdyw7bDn2UgdmVya2xlaW5lcm4iCiAKLSM6IGdpdC1ndWkuc2g6MjYzNQorIzogZ2l0LWd1aS5zaDozMjgwCiBtc2dpZCAiSW5jcmVhc2UgRm9udCBTaXplIgogbXNnc3RyICJTY2hyaWZ0Z3LDtsOfZSB2ZXJncsO2w59lcm4iCiAKLSM6IGdpdC1ndWkuc2g6MzAzMyBsaWIvYmxhbWUudGNsOjI4MQorIzogZ2l0LWd1aS5zaDozMjg4IGxpYi9ibGFtZS50Y2w6MjgxCiBtc2dpZCAiRW5jb2RpbmciCiBtc2dzdHIgIlplaWNoZW5rb2RpZXJ1bmciCiAKLSM6IGdpdC1ndWkuc2g6MzA0NAorIzogZ2l0LWd1aS5zaDozMjk5CiBtc2dpZCAiQXBwbHkvUmV2ZXJzZSBIdW5rIgogbXNnc3RyICJLb250ZXh0IGFud2VuZGVuL3Vta2VocmVuIgogCi0jOiBnaXQtZ3VpLnNoOjI4NzUKKyM6IGdpdC1ndWkuc2g6MzMwNAogbXNnaWQgIkFwcGx5L1JldmVyc2UgTGluZSIKIG1zZ3N0ciAiWmVpbGUgYW53ZW5kZW4vdW1rZWhyZW4iCiAKLSM6IGdpdC1ndWkuc2g6Mjg4NQorIzogZ2l0LWd1aS5zaDozMzIzCiBtc2dpZCAiUnVuIE1lcmdlIFRvb2wiCiBtc2dzdHIgIlp1c2FtbWVuZsO8aHJ1bmdzd2Vya3pldWciCiAKLSM6IGdpdC1ndWkuc2g6Mjg5MAorIzogZ2l0LWd1aS5zaDozMzI4CiBtc2dpZCAiVXNlIFJlbW90ZSBWZXJzaW9uIgogbXNnc3RyICJFbnRmZXJudGUgVmVyc2lvbiBiZW51dHplbiIKIAotIzogZ2l0LWd1aS5zaDoyODk0CisjOiBnaXQtZ3VpLnNoOjMzMzIKIG1zZ2lkICJVc2UgTG9jYWwgVmVyc2lvbiIKIG1zZ3N0ciAiTG9rYWxlIFZlcnNpb24gYmVudXR6ZW4iCiAKLSM6IGdpdC1ndWkuc2g6Mjg5OAorIzogZ2l0LWd1aS5zaDozMzM2CiBtc2dpZCAiUmV2ZXJ0IFRvIEJhc2UiCiBtc2dzdHIgIlVyc3Byw7xuZ2xpY2hlIFZlcnNpb24gYmVudXR6ZW4iCiAKLSM6IGdpdC1ndWkuc2g6MzA5MQorIzogZ2l0LWd1aS5zaDozMzU0Cittc2dpZCAiVmlzdWFsaXplIFRoZXNlIENoYW5nZXMgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAiRGllc2Ugw4RuZGVydW5nZW4gaW0gVW50ZXJtb2R1bCBkYXJzdGVsbGVuIgorCisjOiBnaXQtZ3VpLnNoOjMzNTgKK21zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICJBa3R1ZWxsZW4gWndlaWcgaW0gVW50ZXJtb2R1bCBkYXJzdGVsbGVuIgorCisjOiBnaXQtZ3VpLnNoOjMzNjIKK21zZ2lkICJWaXN1YWxpemUgQWxsIEJyYW5jaCBIaXN0b3J5IEluIFRoZSBTdWJtb2R1bGUiCittc2dzdHIgIkFsbGUgWndlaWdlIGltIFVudGVybW9kdWwgZGFyc3RlbGxlbiIKKworIzogZ2l0LWd1aS5zaDozMzY3Cittc2dpZCAiU3RhcnQgZ2l0IGd1aSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICJHaXQgZ3VpIGltIFVudGVybW9kdWwgc3RhcnRlbiIKKworIzogZ2l0LWd1aS5zaDozMzg5CiBtc2dpZCAiVW5zdGFnZSBIdW5rIEZyb20gQ29tbWl0IgogbXNnc3RyICJLb250ZXh0IGF1cyBCZXJlaXRzdGVsbHVuZyBoZXJhdXNuZWhtZW4iCiAKLSM6IGdpdC1ndWkuc2g6Mjc0OAorIzogZ2l0LWd1aS5zaDozMzkxCittc2dpZCAiVW5zdGFnZSBMaW5lcyBGcm9tIENvbW1pdCIKK21zZ3N0ciAiWmVpbGVuIGF1cyBkZXIgQmVyZWl0c3RlbGx1bmcgaGVyYXVzbmVobWVuIgorCisjOiBnaXQtZ3VpLnNoOjMzOTMKIG1zZ2lkICJVbnN0YWdlIExpbmUgRnJvbSBDb21taXQiCiBtc2dzdHIgIlplaWxlIGF1cyBkZXIgQmVyZWl0c3RlbGx1bmcgaGVyYXVzbmVobWVuIgogCi0jOiBnaXQtZ3VpLnNoOjI3NTAKKyM6IGdpdC1ndWkuc2g6MzM5NgogbXNnaWQgIlN0YWdlIEh1bmsgRm9yIENvbW1pdCIKIG1zZ3N0ciAiS29udGV4dCB6dXIgQmVyZWl0c3RlbGx1bmcgaGluenVmw7xnZW4iCiAKLSM6IGdpdC1ndWkuc2g6Mjc1MQorIzogZ2l0LWd1aS5zaDozMzk4Cittc2dpZCAiU3RhZ2UgTGluZXMgRm9yIENvbW1pdCIKK21zZ3N0ciAiWmVpbGVuIHp1ciBCZXJlaXRzdGVsbHVuZyBoaW56dWbDvGdlbiIKKworIzogZ2l0LWd1aS5zaDozNDAwCiBtc2dpZCAiU3RhZ2UgTGluZSBGb3IgQ29tbWl0IgogbXNnc3RyICJaZWlsZSB6dXIgQmVyZWl0c3RlbGx1bmcgaGluenVmw7xnZW4iCiAKLSM6IGdpdC1ndWkuc2g6Mjc3MQorIzogZ2l0LWd1aS5zaDozNDI0CiBtc2dpZCAiSW5pdGlhbGl6aW5nLi4uIgogbXNnc3RyICJJbml0aWFsaXNpZXJlbi4uLiIKIAotIzogZ2l0LWd1aS5zaDoyNzYyCisjOiBnaXQtZ3VpLnNoOjM1NDEKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiUG9zc2libGUgZW52aXJvbm1lbnQgaXNzdWVzIGV4aXN0LlxuIgpAQCAtNTE2LDcgKzU0OCw3IEBACiAidm9uICVzIGFuIEdpdCB3ZWl0ZXJnZWdlYmVuIHdlcmRlbjpcbiIKICJcbiIKIAotIzogZ2l0LWd1aS5zaDoyNzkyCisjOiBnaXQtZ3VpLnNoOjM1NzAKIG1zZ2lkICIiCiAiXG4iCiAiVGhpcyBpcyBkdWUgdG8gYSBrbm93biBpc3N1ZSB3aXRoIHRoZVxuIgpAQCAtNTI2LDcgKzU1OCw3IEBACiAiRGllcyBpc3QgZWluIGJla2FubnRlcyBQcm9ibGVtIGRlciBUY2wtVmVyc2lvbiwgZGllXG4iCiAiaW4gQ3lnd2luIG1pdGdlbGllZmVydCB3aXJkLiIKIAotIzogZ2l0LWd1aS5zaDoyNzk3CisjOiBnaXQtZ3VpLnNoOjM1NzUKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiXG4iCkBAIC01NDYsMTUgKzU3OCwxNSBAQAogbXNnaWQgImdpdC1ndWkgLSBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBmb3IgR2l0LiIKIG1zZ3N0ciAiZ2l0LWd1aSAtIGVpbmUgZ3JhZmlzY2hlIE9iZXJmbMOkY2hlIGbDvHIgR2l0LiIKIAotIzogbGliL2JsYW1lLnRjbDo3NworIzogbGliL2JsYW1lLnRjbDo3MgogbXNnaWQgIkZpbGUgVmlld2VyIgogbXNnc3RyICJEYXRlaS1Ccm93c2VyIgogCi0jOiBsaWIvYmxhbWUudGNsOjgxCisjOiBsaWIvYmxhbWUudGNsOjc4CiBtc2dpZCAiQ29tbWl0OiIKIG1zZ3N0ciAiVmVyc2lvbjoiCiAKLSM6IGxpYi9ibGFtZS50Y2w6MjY0CisjOiBsaWIvYmxhbWUudGNsOjI3MQogbXNnaWQgIkNvcHkgQ29tbWl0IgogbXNnc3RyICJWZXJzaW9uIGtvcGllcmVuIgogCkBAIC01NjYsODggKzU5OCw4OCBAQAogbXNnaWQgIkRvIEZ1bGwgQ29weSBEZXRlY3Rpb24iCiBtc2dzdHIgIlZvbGxlIEtvcGllLUVya2VubnVuZyIKIAotIzogbGliL2JsYW1lLnRjbDoyNjMKKyM6IGxpYi9ibGFtZS50Y2w6Mjg4CiBtc2dpZCAiU2hvdyBIaXN0b3J5IENvbnRleHQiCiBtc2dzdHIgIkhpc3Rvcmllbi1Lb250ZXh0IGFuemVpZ2VuIgogCi0jOiBsaWIvYmxhbWUudGNsOjI2NgorIzogbGliL2JsYW1lLnRjbDoyOTEKIG1zZ2lkICJCbGFtZSBQYXJlbnQgQ29tbWl0IgogbXNnc3RyICJFbHRlcm52ZXJzaW9uIGFubm90aWVyZW4iCiAKLSM6IGxpYi9ibGFtZS50Y2w6Mzk0CisjOiBsaWIvYmxhbWUudGNsOjQ1MAogIywgdGNsLWZvcm1hdAogbXNnaWQgIlJlYWRpbmcgJXMuLi4iCiBtc2dzdHIgIiVzIGxlc2VuLi4uIgogCi0jOiBsaWIvYmxhbWUudGNsOjQ4OAorIzogbGliL2JsYW1lLnRjbDo1NTcKIG1zZ2lkICJMb2FkaW5nIGNvcHkvbW92ZSB0cmFja2luZyBhbm5vdGF0aW9ucy4uLiIKIG1zZ3N0ciAiQW5ub3RpZXJ1bmdlbiBmw7xyIEtvcGllcmVuL1ZlcnNjaGllYmVuIHdlcmRlbiBnZWxhZGVuLi4uIgogCi0jOiBsaWIvYmxhbWUudGNsOjUwOAorIzogbGliL2JsYW1lLnRjbDo1NzcKIG1zZ2lkICJsaW5lcyBhbm5vdGF0ZWQiCiBtc2dzdHIgIlplaWxlbiBhbm5vdGllcnQiCiAKLSM6IGxpYi9ibGFtZS50Y2w6Njg5CisjOiBsaWIvYmxhbWUudGNsOjc2OQogbXNnaWQgIkxvYWRpbmcgb3JpZ2luYWwgbG9jYXRpb24gYW5ub3RhdGlvbnMuLi4iCiBtc2dzdHIgIkFubm90aWVydW5nZW4gZsO8ciB1cnNwcsO8bmdsaWNoZW4gT3J0IHdlcmRlbiBnZWxhZGVuLi4uIgogCi0jOiBsaWIvYmxhbWUudGNsOjY5MgorIzogbGliL2JsYW1lLnRjbDo3NzIKIG1zZ2lkICJBbm5vdGF0aW9uIGNvbXBsZXRlLiIKIG1zZ3N0ciAiQW5ub3RpZXJ1bmcgdm9sbHN0w6RuZGlnLiIKIAotIzogbGliL2JsYW1lLnRjbDo3MzcKKyM6IGxpYi9ibGFtZS50Y2w6ODAyCiBtc2dpZCAiQnVzeSIKIG1zZ3N0ciAiVmVyYXJiZWl0dW5nIGzDpHVmdCIKIAotIzogbGliL2JsYW1lLnRjbDo3MzgKKyM6IGxpYi9ibGFtZS50Y2w6ODAzCiBtc2dpZCAiQW5ub3RhdGlvbiBwcm9jZXNzIGlzIGFscmVhZHkgcnVubmluZy4iCiBtc2dzdHIgIkFubm90aWVydW5nIGzDpHVmdCBiZXJlaXRzLiIKIAotIzogbGliL2JsYW1lLnRjbDo3NzcKKyM6IGxpYi9ibGFtZS50Y2w6ODQyCiBtc2dpZCAiUnVubmluZyB0aG9yb3VnaCBjb3B5IGRldGVjdGlvbi4uLiIKIG1zZ3N0ciAiSW50ZW5zaXZlIEtvcGllLUVya2VubnVuZyBsw6R1ZnQuLi4iCiAKLSM6IGxpYi9ibGFtZS50Y2w6ODI3CisjOiBsaWIvYmxhbWUudGNsOjkxMAogbXNnaWQgIkxvYWRpbmcgYW5ub3RhdGlvbi4uLiIKIG1zZ3N0ciAiQW5ub3RpZXJ1bmcgbGFkZW4uLi4iCiAKLSM6IGxpYi9ibGFtZS50Y2w6ODAyCisjOiBsaWIvYmxhbWUudGNsOjk2MwogbXNnaWQgIkF1dGhvcjoiCiBtc2dzdHIgIkF1dG9yOiIKIAotIzogbGliL2JsYW1lLnRjbDo4MDYKKyM6IGxpYi9ibGFtZS50Y2w6OTY3CiBtc2dpZCAiQ29tbWl0dGVyOiIKIG1zZ3N0ciAiRWludHJhZ2VuZGVyOiIKIAotIzogbGliL2JsYW1lLnRjbDo4MTEKKyM6IGxpYi9ibGFtZS50Y2w6OTcyCiBtc2dpZCAiT3JpZ2luYWwgRmlsZToiCiBtc2dzdHIgIlVyc3Byw7xuZ2xpY2hlIERhdGVpOiIKIAotIzogbGliL2JsYW1lLnRjbDoxMDIxCisjOiBsaWIvYmxhbWUudGNsOjEwMjAKIG1zZ2lkICJDYW5ub3QgZmluZCBIRUFEIGNvbW1pdDoiCiBtc2dzdHIgIlp3ZWlnc3BpdHplICjCu0hFQUTCqykga2FubiBuaWNodCBnZWZ1bmRlbiB3ZXJkZW46IgogCi0jOiBsaWIvYmxhbWUudGNsOjEwNzYKKyM6IGxpYi9ibGFtZS50Y2w6MTA3NQogbXNnaWQgIkNhbm5vdCBmaW5kIHBhcmVudCBjb21taXQ6IgogbXNnc3RyICJFbHRlcm52ZXJzaW9uIGthbm4gbmljaHQgZ2VmdW5kZW4gd2VyZGVuOiIKIAotIzogbGliL2JsYW1lLnRjbDoxMDAxCisjOiBsaWIvYmxhbWUudGNsOjEwOTAKIG1zZ2lkICJVbmFibGUgdG8gZGlzcGxheSBwYXJlbnQiCiBtc2dzdHIgIkVsdGVybnZlcnNpb24ga2FubiBuaWNodCBhbmdlemVpZ3Qgd2VyZGVuIgogCi0jOiBsaWIvYmxhbWUudGNsOjEwMDIgbGliL2RpZmYudGNsOjE5MQorIzogbGliL2JsYW1lLnRjbDoxMDkxIGxpYi9kaWZmLnRjbDozMjAKIG1zZ2lkICJFcnJvciBsb2FkaW5nIGRpZmY6IgogbXNnc3RyICJGZWhsZXIgYmVpbSBMYWRlbiBkZXMgVmVyZ2xlaWNoczoiCiAKLSM6IGxpYi9ibGFtZS50Y2w6MTE0MgorIzogbGliL2JsYW1lLnRjbDoxMjMxCiBtc2dpZCAiT3JpZ2luYWxseSBCeToiCiBtc2dzdHIgIlVyc3Byw7xuZ2xpY2ggdm9uOiIKIAotIzogbGliL2JsYW1lLnRjbDo5MzEKKyM6IGxpYi9ibGFtZS50Y2w6MTIzNwogbXNnaWQgIkluIEZpbGU6IgogbXNnc3RyICJJbiBEYXRlaToiCiAKLSM6IGxpYi9ibGFtZS50Y2w6OTM2CisjOiBsaWIvYmxhbWUudGNsOjEyNDIKIG1zZ2lkICJDb3BpZWQgT3IgTW92ZWQgSGVyZSBCeToiCiBtc2dzdHIgIktvcGllcnQgb2RlciB2ZXJzY2hvYmVuIGR1cmNoOiIKIApAQCAtNjYxLDE2ICs2OTMsMTggQEAKIAogIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjcgbGliL2JyYW5jaF9jcmVhdGUudGNsOjM1CiAjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzIgbGliL2JyYW5jaF9yZW5hbWUudGNsOjMwIGxpYi9icm93c2VyLnRjbDoyODIKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTIyIGxpYi9jaG9vc2VfZm9udC50Y2w6NDMgbGliL21lcmdlLnRjbDoxNzEKLSM6IGxpYi9vcHRpb24udGNsOjEwMyBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQyIGxpYi90cmFuc3BvcnQudGNsOjk3CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU3OSBsaWIvY2hvb3NlX2ZvbnQudGNsOjQzIGxpYi9tZXJnZS50Y2w6MTcyCisjOiBsaWIvb3B0aW9uLnRjbDoxMjUgbGliL3JlbW90ZV9hZGQudGNsOjMyIGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDIKKyM6IGxpYi90b29sc19kbGcudGNsOjQwIGxpYi90b29sc19kbGcudGNsOjIwNCBsaWIvdG9vbHNfZGxnLnRjbDozNTIKKyM6IGxpYi90cmFuc3BvcnQudGNsOjEwOAogbXNnaWQgIkNhbmNlbCIKIG1zZ3N0ciAiQWJicmVjaGVuIgogCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozMiBsaWIvYnJvd3Nlci50Y2w6Mjg3CisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozMiBsaWIvYnJvd3Nlci50Y2w6Mjg3IGxpYi90b29sc19kbGcudGNsOjMyOAogbXNnaWQgIlJldmlzaW9uIgogbXNnc3RyICJWZXJzaW9uIgogCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozNiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjkgbGliL29wdGlvbi50Y2w6MjQyCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozNiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjkgbGliL29wdGlvbi50Y2w6MjgwCiBtc2dpZCAiT3B0aW9ucyIKIG1zZ3N0ciAiT3B0aW9uZW4iCiAKQEAgLTY5MCw3ICs3MjQsNyBAQAogbXNnaWQgIkNyZWF0ZSBOZXcgQnJhbmNoIgogbXNnc3RyICJOZXVlbiBad2VpZyBlcnN0ZWxsZW4iCiAKLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDozMSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM3MQorIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjMxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzgxCiBtc2dpZCAiQ3JlYXRlIgogbXNnc3RyICJFcnN0ZWxsZW4iCiAKQEAgLTY5OCw3ICs3MzIsNyBAQAogbXNnaWQgIkJyYW5jaCBOYW1lIgogbXNnc3RyICJad2VpZ25hbWUiCiAKLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0MworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjQzIGxpYi9yZW1vdGVfYWRkLnRjbDozOSBsaWIvdG9vbHNfZGxnLnRjbDo1MAogbXNnaWQgIk5hbWU6IgogbXNnc3RyICJOYW1lOiIKIApAQCAtNzIyLDcgKzc1Niw3IEBACiBtc2dpZCAiRmFzdCBGb3J3YXJkIE9ubHkiCiBtc2dzdHIgIk51ciBTY2huZWxsenVzYW1tZW5mw7xocnVuZyIKIAotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjg1IGxpYi9jaGVja291dF9vcC50Y2w6NTE0CisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODUgbGliL2NoZWNrb3V0X29wLnRjbDo1NzEKIG1zZ2lkICJSZXNldCIKIG1zZ3N0ciAiWnVyw7xja3NldHplbiIKIApAQCAtNzY0LDE1ICs3OTgsMjYgQEAKIG1zZ2lkICJEZWxldGUgT25seSBJZiBNZXJnZWQgSW50byIKIG1zZ3N0ciAiTnVyIGzDtnNjaGVuLCB3ZW5uIHp1c2FtbWVuZ2Vmw7xocnQgbmFjaCIKIAotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjU0Ci1tc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSB0ZXN0LikiCi1tc2dzdHIgIkltbWVyIChvaG5lIFp1c2FtbWVuZsO8aHJ1bmdzdGVzdCkiCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTQgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTkKK21zZ2lkICJBbHdheXMgKERvIG5vdCBwZXJmb3JtIG1lcmdlIGNoZWNrcykiCittc2dzdHIgIkltbWVyIChLZWluZSBadXNhbW1lbmbDvGhydW5nc3Byw7xmdW5nKSIKIAogIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjEwMwogIywgdGNsLWZvcm1hdAogbXNnaWQgIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOiIKIG1zZ3N0ciAiRm9sZ2VuZGUgWndlaWdlIHNpbmQgbm9jaCBuaWNodCBtaXQgwrslc8KrIHp1c2FtbWVuZ2Vmw7xocnQ6IgogCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTE1IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjE3Cittc2dpZCAiIgorIlJlY292ZXJpbmcgZGVsZXRlZCBicmFuY2hlcyBpcyBkaWZmaWN1bHQuXG4iCisiXG4iCisiRGVsZXRlIHRoZSBzZWxlY3RlZCBicmFuY2hlcz8iCittc2dzdHIgIiIKKyJEYXMgV2llZGVyaGVyc3RlbGxlbiB2b24gZ2Vsw7ZzY2h0ZW4gWndlaWdlbiBpc3QgbnVyIG1pdCBncsO2w59lcmVtIEF1ZndhbmQgIgorIm3DtmdsaWNoLlxuIgorIlxuIgorIlNvbGxlbiBkaWUgYXVzZ2V3w6RobHRlbiBad2VpZ2UgZ2Vsw7ZzY2h0IHdlcmRlbj8iCisKICM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNDEKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCkBAIC04MDIsNyArODQ3LDcgQEAKIG1zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgYnJhbmNoIHRvIHJlbmFtZS4iCiBtc2dzdHIgIkJpdHRlIHfDpGhsZW4gU2llIGVpbmVuIFp3ZWlnIHp1bSB1bWJlbmVubmVuLiIKIAotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjk2IGxpYi9jaGVja291dF9vcC50Y2w6MTc5CisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6OTYgbGliL2NoZWNrb3V0X29wLnRjbDoyMDIKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4iCiBtc2dzdHIgIlp3ZWlnIMK7JXPCqyBleGlzdGllcnQgYmVyZWl0cy4iCkBAIC04MzMsMzcgKzg3OCwzOCBAQAogbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMiCiBtc2dzdHIgIkRhdGVpZW4gZGVzIFp3ZWlncyBkdXJjaGJsw6R0dGVybiIKIAotIzogbGliL2Jyb3dzZXIudGNsOjI3OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4NwotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NzQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0ODQKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTg3CisjOiBsaWIvYnJvd3Nlci50Y2w6Mjc4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzk4CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5NworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDI4CiBtc2dpZCAiQnJvd3NlIgogbXNnc3RyICJCbMOkdHRlcm4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NzkKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6ODUKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJGZXRjaGluZyAlcyBmcm9tICVzIgogbXNnc3RyICLDhG5kZXJ1bmdlbiDCuyVzwqsgdm9uIMK7JXPCqyBhbmZvcmRlcm4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MTI3CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjEzMwogIywgdGNsLWZvcm1hdAogbXNnaWQgImZhdGFsOiBDYW5ub3QgcmVzb2x2ZSAlcyIKIG1zZ3N0ciAiRmVobGVyOiDCuyVzwqsga2FubiBuaWNodCBhbHMgWndlaWcgb2RlciBWZXJzaW9uIGVya2FubnQgd2VyZGVuIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE0MCBsaWIvY29uc29sZS50Y2w6ODEgbGliL2RhdGFiYXNlLnRjbDozMQorIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNDYgbGliL2NvbnNvbGUudGNsOjgxIGxpYi9kYXRhYmFzZS50Y2w6MzEKKyM6IGxpYi9zc2hrZXkudGNsOjUzCiBtc2dpZCAiQ2xvc2UiCiBtc2dzdHIgIlNjaGxpZcOfZW4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MTY5CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE3NQogIywgdGNsLWZvcm1hdAogbXNnaWQgIkJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0LiIKIG1zZ3N0ciAiWndlaWcgwrslc8KrIGV4aXN0aWVydCBuaWNodC4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MTkzCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE5NAogIywgdGNsLWZvcm1hdAogbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgc2ltcGxpZmllZCBnaXQtcHVsbCBmb3IgJyVzJy4iCiBtc2dzdHIgIkZlaGxlciBiZWltIEVpbnJpY2h0ZW4gZGVyIHZlcmVpbmZhY2h0ZW4gZ2l0LXB1bGwgZsO8ciDCuyVzwqsuIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjIyOAorIzogbGliL2NoZWNrb3V0X29wLnRjbDoyMjkKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuXG4iCkBAIC04NzYsMjEgKzkyMiwyMSBAQAogIlp3ZWlnIGthbm4gbmljaHQgbWl0IMK7JXPCqyBzY2huZWxsenVzYW1tZW5nZWbDvGhydCB3ZXJkZW4uIFJlZ3Vsw6RyZXMgIgogIlp1c2FtbWVuZsO8aHJlbiBpc3Qgbm90d2VuZGlnLiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyMjAKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjQzCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiTWVyZ2Ugc3RyYXRlZ3kgJyVzJyBub3Qgc3VwcG9ydGVkLiIKIG1zZ3N0ciAiWnVzYW1tZW5mw7xocnVuZ3NtZXRob2RlIMK7JXPCqyBuaWNodCB1bnRlcnN0w7x0enQuIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjIzOQorIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNjIKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJGYWlsZWQgdG8gdXBkYXRlICclcycuIgogbXNnc3RyICJBa3R1YWxpc2llcmVuIHZvbiDCuyVzwqsgZmVobGdlc2NobGFnZW4uIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI1MQorIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNzQKIG1zZ2lkICJTdGFnaW5nIGFyZWEgKGluZGV4KSBpcyBhbHJlYWR5IGxvY2tlZC4iCiBtc2dzdHIgIkJlcmVpdHN0ZWxsdW5nICjCu2luZGV4wqspIGlzdCB6dXIgQmVhcmJlaXR1bmcgZ2VzcGVycnQgKMK7bG9ja2VkwqspLiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNjYKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjg5CiBtc2dpZCAiIgogIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgogIlxuIgpAQCAtOTA2LDMyICs5NTIsMzIgQEAKICJcbiIKICJFcyB3aXJkIGdsZWljaCBuZXUgZ2VsYWRlbi5cbiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDozMjIKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ1CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVXBkYXRpbmcgd29ya2luZyBkaXJlY3RvcnkgdG8gJyVzJy4uLiIKIG1zZ3N0ciAiQXJiZWl0c2tvcGllIHVtc3RlbGxlbiBhdWYgwrslc8KrLi4uIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjMyMworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNDYKIG1zZ2lkICJmaWxlcyBjaGVja2VkIG91dCIKIG1zZ3N0ciAiRGF0ZWllbiBha3R1YWxpc2llcnQiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzUzCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM3NgogIywgdGNsLWZvcm1hdAogbXNnaWQgIkFib3J0ZWQgY2hlY2tvdXQgb2YgJyVzJyAoZmlsZSBsZXZlbCBtZXJnaW5nIGlzIHJlcXVpcmVkKS4iCiBtc2dzdHIgIiIKICJBdWYgWndlaWcgwrslc8KrIHVtc3RlbGxlbiBhYmdlYnJvY2hlbiAoWnVzYW1tZW5mw7xocmVuIGRlciBEYXRlaWVuIGlzdCAiCiAibm90d2VuZGlnKS4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzU0CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM3NwogbXNnaWQgIkZpbGUgbGV2ZWwgbWVyZ2UgcmVxdWlyZWQuIgogbXNnc3RyICJadXNhbW1lbmbDvGhyZW4gZGVyIERhdGVpZW4gaXN0IG5vdHdlbmRpZy4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzU4CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM4MQogIywgdGNsLWZvcm1hdAogbXNnaWQgIlN0YXlpbmcgb24gYnJhbmNoICclcycuIgogbXNnc3RyICJFcyB3aXJkIGF1ZiBad2VpZyDCuyVzwqsgdmVyYmxpZWJlbi4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NDI5CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjQ1MgogbXNnaWQgIiIKICJZb3UgYXJlIG5vIGxvbmdlciBvbiBhIGxvY2FsIGJyYW5jaC5cbiIKICJcbiIKQEAgLTk0MywzMiArOTg5LDMyIEBACiAiV2VubiBTaWUgYXVmIGVpbmVtIFp3ZWlnIGFyYmVpdGVuIG3DtmNodGVuLCBlcnN0ZWxsZW4gU2llIGJpdHRlIGpldHp0IGVpbmVuICIKICJad2VpZyBtaXQgZGVyIEF1c3dhaGwgwrtBYmdldHJlbm50ZSBBcmJlaXRza29waWUtVmVyc2lvbsKrLiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo0NDYgbGliL2NoZWNrb3V0X29wLnRjbDo0NTAKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTAzIGxpYi9jaGVja291dF9vcC50Y2w6NTA3CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQ2hlY2tlZCBvdXQgJyVzJy4iCiBtc2dzdHIgIlVtZ2VzdGVsbHQgYXVmIMK7JXPCqy4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NDc4CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUzNQogIywgdGNsLWZvcm1hdAogbXNnaWQgIlJlc2V0dGluZyAnJXMnIHRvICclcycgd2lsbCBsb3NlIHRoZSBmb2xsb3dpbmcgY29tbWl0czoiCiBtc2dzdHIgIlp1csO8Y2tzZXR6ZW4gdm9uIMK7JXPCqyBuYWNoIMK7JXPCqyB3aXJkIGZvbGdlbmRlIFZlcnNpb25lbiB2ZXJ3ZXJmZW46IgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUwMAorIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NTcKIG1zZ2lkICJSZWNvdmVyaW5nIGxvc3QgY29tbWl0cyBtYXkgbm90IGJlIGVhc3kuIgogbXNnc3RyICIiCiAiVmVyd29yZmVuZSBWZXJzaW9uZW4ga8O2bm5lbiBudXIgbWl0IGdyw7bDn2VyZW0gQXVmd2FuZCB3aWVkZXJoZXJnZXN0ZWxsdCAiCiAid2VyZGVuLiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MDUKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTYyCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiUmVzZXQgJyVzJz8iCiBtc2dzdHIgIsK7JXPCqyB6dXLDvGNrc2V0emVuPyIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MTAgbGliL21lcmdlLnRjbDoxNjMKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTY3IGxpYi9tZXJnZS50Y2w6MTY0IGxpYi90b29sc19kbGcudGNsOjM0MwogbXNnaWQgIlZpc3VhbGl6ZSIKIG1zZ3N0ciAiRGFyc3RlbGxlbiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NzgKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NjM1CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiIgogIkZhaWxlZCB0byBzZXQgY3VycmVudCBicmFuY2guXG4iCkBAIC0xMDE0LDIzMSArMTA2MCwyMzEgQEAKIG1zZ2lkICJHaXQgR3VpIgogbXNnc3RyICJHaXQgR3VpIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzc2CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzg2CiBtc2dpZCAiQ3JlYXRlIE5ldyBSZXBvc2l0b3J5IgogbXNnc3RyICJOZXVlcyBQcm9qZWt0YXJjaGl2IgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg3CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzCiBtc2dpZCAiTmV3Li4uIgogbXNnc3RyICJOZXUuLi4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NjAKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDcxCiBtc2dpZCAiQ2xvbmUgRXhpc3RpbmcgUmVwb3NpdG9yeSIKIG1zZ3N0ciAiUHJvamVrdGFyY2hpdiBrbG9uZW4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAwCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNgogbXNnaWQgIkNsb25lLi4uIgogbXNnc3RyICJLbG9uZW4uLi4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTc2CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTYKIG1zZ2lkICJPcGVuIEV4aXN0aW5nIFJlcG9zaXRvcnkiCiBtc2dzdHIgIlByb2pla3RhcmNoaXYgw7ZmZm5lbiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTE5CiBtc2dpZCAiT3Blbi4uLiIKIG1zZ3N0ciAiw5ZmZm5lbi4uLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMjYKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTMyCiBtc2dpZCAiUmVjZW50IFJlcG9zaXRvcmllcyIKIG1zZ3N0ciAiWnVsZXR6dCBiZW51dHp0ZSBQcm9qZWt0YXJjaGl2ZSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMzIKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTM4CiBtc2dpZCAiT3BlbiBSZWNlbnQgUmVwb3NpdG9yeToiCiBtc2dzdHIgIlp1bGV0enQgYmVudXR6dGVzIFByb2pla3RhcmNoaXYgw7ZmZm5lbjoiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mjk2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzAzCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMxMAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMDYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMTMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzIwCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXBvc2l0b3J5ICVzOiIKIG1zZ3N0ciAiUHJvamVrdGFyY2hpdiDCuyVzwqsga29ubnRlIG5pY2h0IGVyc3RlbGx0IHdlcmRlbjoiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzg3CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM5MQogbXNnaWQgIkRpcmVjdG9yeToiCiBtc2dzdHIgIlZlcnplaWNobmlzOiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MTIgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MzcKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxMQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MjMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NTAKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA1MgogbXNnaWQgIkdpdCBSZXBvc2l0b3J5IgogbXNnc3RyICJHaXQgUHJvamVrdGFyY2hpdiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NDIKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQ4CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiRGlyZWN0b3J5ICVzIGFscmVhZHkgZXhpc3RzLiIKIG1zZ3N0ciAiVmVyemVpY2huaXMgwrslc8KrIGV4aXN0aWVydCBiZXJlaXRzLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NDYKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDUyCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiRmlsZSAlcyBhbHJlYWR5IGV4aXN0cy4iCiBtc2dzdHIgIkRhdGVpIMK7JXPCqyBleGlzdGllcnQgYmVyZWl0cy4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDU1CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ2NgogbXNnaWQgIkNsb25lIgogbXNnc3RyICJLbG9uZW4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDczCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3OQogbXNnaWQgIlNvdXJjZSBMb2NhdGlvbjoiCiBtc2dzdHIgIkhlcmt1bmZ0OiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0ODQKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDkwCiBtc2dpZCAiVGFyZ2V0IERpcmVjdG9yeToiCiBtc2dzdHIgIlppZWx2ZXJ6ZWljaG5pczoiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDkwCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwMgogbXNnaWQgIkNsb25lIFR5cGU6IgogbXNnc3RyICJBcnQgZGVzIEtsb25lbnM6IgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5NQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDgKIG1zZ2lkICJTdGFuZGFyZCAoRmFzdCwgU2VtaS1SZWR1bmRhbnQsIEhhcmRsaW5rcykiCiBtc2dzdHIgIlN0YW5kYXJkIChzY2huZWxsLCB0ZWlsd2Vpc2UgcmVkdW5kYW50LCBIYXJkbGlua3MpIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwMQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MTQKIG1zZ2lkICJGdWxsIENvcHkgKFNsb3dlciwgUmVkdW5kYW50IEJhY2t1cCkiCiBtc2dzdHIgIkFsbGVzIGtvcGllcmVuIChsYW5nc2FtZXIsIHZvbGxlIFJlZHVuZGFueikiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTA3CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUyMAogbXNnaWQgIlNoYXJlZCAoRmFzdGVzdCwgTm90IFJlY29tbWVuZGVkLCBObyBCYWNrdXApIgogbXNnc3RyICJWZXJrbsO8cGZ0IChzY2huZWxsLCBuaWNodCBlbXBmb2hsZW4sIGtlaW4gQmFja3VwKSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NDMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzM2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODA2Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDI1CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU1NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYwMworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NDkgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MTkKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA1OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNjYKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJOb3QgYSBHaXQgcmVwb3NpdG9yeTogJXMiCiBtc2dzdHIgIktlaW4gR2l0LVByb2pla3RhcmNoaXYgaW4gwrslc8KrIGdlZnVuZGVuLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NzkKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTkyCiBtc2dpZCAiU3RhbmRhcmQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgogbXNnc3RyICJTdGFuZGFyZCBpc3QgbnVyIGbDvHIgbG9rYWxlIFByb2pla3RhcmNoaXZlIHZlcmbDvGdiYXIuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU4MworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTYKIG1zZ2lkICJTaGFyZWQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgogbXNnc3RyICJWZXJrbsO8cGZ0IGlzdCBudXIgZsO8ciBsb2thbGUgUHJvamVrdGFyY2hpdmUgdmVyZsO8Z2Jhci4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjA0CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxNwogIywgdGNsLWZvcm1hdAogbXNnaWQgIkxvY2F0aW9uICVzIGFscmVhZHkgZXhpc3RzLiIKIG1zZ3N0ciAiUHJvamVrdGFyY2hpdiDCuyVzwqsgZXhpc3RpZXJ0IGJlcmVpdHMuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxNQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MjgKIG1zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIG9yaWdpbiIKIG1zZ3N0ciAiRGVyIFVyc3BydW5nc29ydCBrb25udGUgbmljaHQgZWluZ2VyaWNodGV0IHdlcmRlbiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MjcKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjQwCiBtc2dpZCAiQ291bnRpbmcgb2JqZWN0cyIKIG1zZ3N0ciAiT2JqZWt0ZSB3ZXJkZW4gZ2V6w6RobHQiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjI4CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0MQogbXNnaWQgImJ1Y2tldHMiCiBtc2dzdHIgIkJ1Y2tldHMiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjUyCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY2NQogIywgdGNsLWZvcm1hdAogbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdHMvaW5mby9hbHRlcm5hdGVzOiAlcyIKIG1zZ3N0ciAiS29waWVuIHZvbiBPYmpla3Rlbi9JbmZvL0FsdGVybmF0ZXMga29ubnRlbiBuaWNodCBlcnN0ZWxsdCB3ZXJkZW46ICVzIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY4OAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MDEKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJOb3RoaW5nIHRvIGNsb25lIGZyb20gJXMuIgogbXNnc3RyICJWb24gwrslc8KrIGtvbm50ZSBuaWNodHMgZ2VrbG9udCB3ZXJkZW4uIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY5MCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwNAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTYKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzAzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTE3CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyOQogbXNnaWQgIlRoZSAnbWFzdGVyJyBicmFuY2ggaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLiIKIG1zZ3N0ciAiRGVyIMK7bWFzdGVywqstWndlaWcgd3VyZGUgbm9jaCBuaWNodCBpbml0aWFsaXNpZXJ0LiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MDMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzE2CiBtc2dpZCAiSGFyZGxpbmtzIGFyZSB1bmF2YWlsYWJsZS4gIEZhbGxpbmcgYmFjayB0byBjb3B5aW5nLiIKIG1zZ3N0ciAiSGFyZGxpbmtzIG5pY2h0IHZlcmbDvGdiYXIuIFN0YXR0ZGVzc2VuIHdpcmQga29waWVydC4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzE1CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcyOAogIywgdGNsLWZvcm1hdAogbXNnaWQgIkNsb25pbmcgZnJvbSAlcyIKIG1zZ3N0ciAiS29waWVyZW4gdm9uIMK7JXPCqyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NDYKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzU5CiBtc2dpZCAiQ29weWluZyBvYmplY3RzIgogbXNnc3RyICJPYmpla3RkYXRlbmJhbmsga29waWVyZW4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzQ3CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc2MAogbXNnaWQgIktpQiIKIG1zZ3N0ciAiS0IiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzcxCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc4NAogIywgdGNsLWZvcm1hdAogbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdDogJXMiCiBtc2dzdHIgIk9iamVrdCBrYW5uIG5pY2h0IGtvcGllcnQgd2VyZGVuOiAlcyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODEKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzk0CiBtc2dpZCAiTGlua2luZyBvYmplY3RzIgogbXNnc3RyICJPYmpla3RlIHZlcmxpbmtlbiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODIKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzk1CiBtc2dpZCAib2JqZWN0cyIKIG1zZ3N0ciAiT2JqZWt0ZSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTAKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODAzCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVW5hYmxlIHRvIGhhcmRsaW5rIG9iamVjdDogJXMiCiBtc2dzdHIgIkbDvHIgT2JqZWt0IGtvbm50ZSBrZWluIEhhcmRsaW5rIGVyc3RlbGx0IHdlcmRlbjogJXMiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODQ1CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg1OAogbXNnaWQgIkNhbm5vdCBmZXRjaCBicmFuY2hlcyBhbmQgb2JqZWN0cy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCiBtc2dzdHIgIiIKICJad2VpZ2UgdW5kIE9iamVrdGUga29ubnRlbiBuaWNodCBhbmdlZm9yZGVydCB3ZXJkZW4uICBLb250cm9sbGllcmVuIFNpZSBkaWUgIgogIkF1c2dhYmVuIGF1ZiBkZXIgS29uc29sZSBmw7xyIHdlaXRlcmUgQW5nYWJlbi4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODU2CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg2OQogbXNnaWQgIkNhbm5vdCBmZXRjaCB0YWdzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKIG1zZ3N0ciAiIgogIk1hcmtpZXJ1bmdlbiBrb25udGVuIG5pY2h0IGFuZ2Vmb3JkZXJ0IHdlcmRlbi4gIEtvbnRyb2xsaWVyZW4gU2llIGRpZSAiCiAiQXVzZ2FiZW4gYXVmIGRlciBLb25zb2xlIGbDvHIgd2VpdGVyZSBBbmdhYmVuLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4ODAKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODkzCiBtc2dpZCAiQ2Fubm90IGRldGVybWluZSBIRUFELiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKIG1zZ3N0ciAiIgogIkRpZSBad2VpZ3NwaXR6ZSAoSEVBRCkga29ubnRlIG5pY2h0IGdlZnVuZGVuIHdlcmRlbi4gIEtvbnRyb2xsaWVyZW4gU2llIGRpZSAiCiAiQXVzZ2FiZW4gYXVmIGRlciBLb25zb2xlIGbDvHIgd2VpdGVyZSBBbmdhYmVuLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4ODkKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTAyCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVW5hYmxlIHRvIGNsZWFudXAgJXMiCiBtc2dzdHIgIlZlcnplaWNobmlzIMK7JXPCqyBrYW5uIG5pY2h0IGF1ZmdlcsOkdW10IHdlcmRlbi4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODk1CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwOAogbXNnaWQgIkNsb25lIGZhaWxlZC4iCiBtc2dzdHIgIktsb25lbiBmZWhsZ2VzY2hsYWdlbi4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTAyCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNQogbXNnaWQgIk5vIGRlZmF1bHQgYnJhbmNoIG9idGFpbmVkLiIKIG1zZ3N0ciAiS2VpbiB2b3JlaW5nZXN0ZWxsdGVyIFp3ZWlnIGdlZnVuZGVuLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTI2CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQ2Fubm90IHJlc29sdmUgJXMgYXMgYSBjb21taXQuIgogbXNnc3RyICLCuyVzwqsgd3VyZGUgbmljaHQgYWxzIFZlcnNpb24gZ2VmdW5kZW4uIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyNQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MzgKIG1zZ2lkICJDcmVhdGluZyB3b3JraW5nIGRpcmVjdG9yeSIKIG1zZ3N0ciAiQXJiZWl0c2tvcGllIGVyc3RlbGxlbiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjYgbGliL2luZGV4LnRjbDo2NSBsaWIvaW5kZXgudGNsOjEyNwotIzogbGliL2luZGV4LnRjbDoxOTMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTM5IGxpYi9pbmRleC50Y2w6NjcgbGliL2luZGV4LnRjbDoxMzAKKyM6IGxpYi9pbmRleC50Y2w6MTk4CiBtc2dpZCAiZmlsZXMiCiBtc2dzdHIgIkRhdGVpZW4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTU1CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk2OAogbXNnaWQgIkluaXRpYWwgZmlsZSBjaGVja291dCBmYWlsZWQuIgogbXNnc3RyICJFcnN0ZWxsZW4gZGVyIEFyYmVpdHNrb3BpZSBmZWhsZ2VzY2hsYWdlbi4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTcxCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTEKIG1zZ2lkICJPcGVuIgogbXNnc3RyICLDlmZmbmVuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk4MQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDIxCiBtc2dpZCAiUmVwb3NpdG9yeToiCiBtc2dzdHIgIlByb2pla3RhcmNoaXY6IgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMzEKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA3MgogIywgdGNsLWZvcm1hdAogbXNnaWQgIkZhaWxlZCB0byBvcGVuIHJlcG9zaXRvcnkgJXM6IgogbXNnc3RyICJQcm9qZWt0YXJjaGl2IMK7JXPCqyBrb25udGUgbmljaHQgZ2XDtmZmbmV0IHdlcmRlbi4iCkBAIC0xMzExLDE5ICsxMzU3LDI0IEBACiAidW5mZXJ0aWdlIFp1c2FtbWVuZsO8aHJ1bmcgZXhpc3RpZXJ0LiBEYXp1IG3DvHNzZW4gU2llIGRpZSBadXNhbW1lbmbDvGhydW5nICIKICJiZWVuZGVuIG9kZXIgYWJicmVjaGVuLlxuIgogCi0jOiBsaWIvY29tbWl0LnRjbDo0OQorIzogbGliL2NvbW1pdC50Y2w6NDgKIG1zZ2lkICJFcnJvciBsb2FkaW5nIGNvbW1pdCBkYXRhIGZvciBhbWVuZDoiCiBtc2dzdHIgIkZlaGxlciBiZWltIExhZGVuIGRlciBWZXJzaW9uc2RhdGVuIGbDvHIgTmFjaGJlc3Nlcm46IgogCi0jOiBsaWIvY29tbWl0LnRjbDo3NgorIzogbGliL2NvbW1pdC50Y2w6NzUKIG1zZ2lkICJVbmFibGUgdG8gb2J0YWluIHlvdXIgaWRlbnRpdHk6IgogbXNnc3RyICJCZW51dHplcm5hbWUga29ubnRlIG5pY2h0IGJlc3RpbW10IHdlcmRlbjoiCiAKLSM6IGxpYi9jb21taXQudGNsOjgxCisjOiBsaWIvY29tbWl0LnRjbDo4MAogbXNnaWQgIkludmFsaWQgR0lUX0NPTU1JVFRFUl9JREVOVDoiCiBtc2dzdHIgIlVuZ8O8bHRpZ2VyIFdlcnQgdm9uIEdJVF9DT01NSVRURVJfSU5ERU5UOiIKIAotIzogbGliL2NvbW1pdC50Y2w6MTMzCisjOiBsaWIvY29tbWl0LnRjbDoxMjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBUY2wgZG9lcyBub3Qgc3VwcG9ydCBlbmNvZGluZyAnJXMnLiIKK21zZ3N0ciAiV2FybmluZzogVGNsL1RrIHVudGVyc3TDvHR6dCBkaWUgWmVpY2hlbmNvZGllcnVuZyDCuyVzwqsgbmljaHQuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxNDkKIG1zZ2lkICIiCiAiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCiAiXG4iCkBAIC0xMzM5LDcgKzEzOTAsNyBAQAogIlxuIgogIkVzIHdpcmQgZ2xlaWNoIG5ldSBnZWxhZGVuLlxuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxNTQKKyM6IGxpYi9jb21taXQudGNsOjE3MgogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICJVbm1lcmdlZCBmaWxlcyBjYW5ub3QgYmUgY29tbWl0dGVkLlxuIgpAQCAtMTM1Miw3ICsxNDAzLDcgQEAKICJEaWUgRGF0ZWkgwrslc8KrIGhhdCBub2NoIG5pY2h0IGF1ZmdlbMO2c3RlIFp1c2FtbWVuZsO8aHJ1bmdzLUtvbmZsaWt0ZS4gU2llICIKICJtw7xzc2VuIGRpZXNlIEtvbmZsaWt0ZSBhdWZsw7ZzZW4sIGJldm9yIFNpZSBlaW50cmFnZW4ga8O2bm5lbi5cbiIKIAotIzogbGliL2NvbW1pdC50Y2w6MTYyCisjOiBsaWIvY29tbWl0LnRjbDoxODAKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiVW5rbm93biBmaWxlIHN0YXRlICVzIGRldGVjdGVkLlxuIgpAQCAtMTM2Myw3ICsxNDE0LDcgQEAKICJcbiIKICJEYXRlaSDCuyVzwqsga2FubiBuaWNodCBlaW5nZXRyYWdlbiB3ZXJkZW4uXG4iCiAKLSM6IGxpYi9jb21taXQudGNsOjE3MAorIzogbGliL2NvbW1pdC50Y2w6MTg4CiBtc2dpZCAiIgogIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgogIlxuIgpAQCAtMTM3Myw3ICsxNDI0LDcgQEAKICJcbiIKICJTaWUgbcO8c3NlbiBtaW5kZXN0ZW5zIGVpbmUgRGF0ZWkgYmVyZWl0c3RlbGxlbiwgYmV2b3IgU2llIGVpbnRyYWdlbiBrw7ZubmVuLlxuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxODMKKyM6IGxpYi9jb21taXQudGNsOjIwMwogbXNnaWQgIiIKICJQbGVhc2Ugc3VwcGx5IGEgY29tbWl0IG1lc3NhZ2UuXG4iCiAiXG4iCkBAIC0xMzkzLDQ3ICsxNDQ0LDQyIEBACiAiXG4iCiAiLSBSZXN0OiBFaW5lIGF1c2bDvGhybGljaGUgQmVzY2hyZWlidW5nLCB3YXJ1bSBkaWVzZSDDhG5kZXJ1bmcgaGlsZnJlaWNoIGlzdC5cbiIKIAotIzogbGliL2NvbW1pdC50Y2w6MjA3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAid2FybmluZzogVGNsIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RpbmcgJyVzJy4iCi1tc2dzdHIgIldhcm5pbmc6IFRjbC9UayB1bnRlcnN0w7x0enQgZGllIFplaWNoZW5jb2RpZXJ1bmcgwrslc8KrIG5pY2h0LiIKLQotIzogbGliL2NvbW1pdC50Y2w6MjIxCisjOiBsaWIvY29tbWl0LnRjbDoyMzQKIG1zZ2lkICJDYWxsaW5nIHByZS1jb21taXQgaG9vay4uLiIKIG1zZ3N0ciAiQXVmcnVmZW4gZGVyIFZvci1FaW50cmFnZW4tS29udHJvbGxlLi4uIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyMzYKKyM6IGxpYi9jb21taXQudGNsOjI0OQogbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmUtY29tbWl0IGhvb2suIgogbXNnc3RyICJFaW50cmFnZW4gYWJnZWxlaG50IGR1cmNoIFZvci1FaW50cmFnZW4tS29udHJvbGxlICjCu3ByZS1jb21taXQgaG9va8KrKS4iCiAKLSM6IGxpYi9jb21taXQudGNsOjI1OQorIzogbGliL2NvbW1pdC50Y2w6MjcyCiBtc2dpZCAiQ2FsbGluZyBjb21taXQtbXNnIGhvb2suLi4iCiBtc2dzdHIgIkF1ZnJ1ZmVuIGRlciBWZXJzaW9uc2Jlc2NocmVpYnVuZ3MtS29udHJvbGxlLi4uIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyNzQKKyM6IGxpYi9jb21taXQudGNsOjI4NwogbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBjb21taXQtbXNnIGhvb2suIgogbXNnc3RyICIiCiAiRWludHJhZ2VuIGFiZ2VsZWhudCBkdXJjaCBWZXJzaW9uc2Jlc2NocmVpYnVuZ3MtS29udHJvbGxlICjCu2NvbW1pdC1tZXNzYWdlICIKICJob29rwqspLiIKIAotIzogbGliL2NvbW1pdC50Y2w6Mjg3CisjOiBsaWIvY29tbWl0LnRjbDozMDAKIG1zZ2lkICJDb21taXR0aW5nIGNoYW5nZXMuLi4iCiBtc2dzdHIgIsOEbmRlcnVuZ2VuIGVpbnRyYWdlbi4uLiIKIAotIzogbGliL2NvbW1pdC50Y2w6MzAzCisjOiBsaWIvY29tbWl0LnRjbDozMTYKIG1zZ2lkICJ3cml0ZS10cmVlIGZhaWxlZDoiCiBtc2dzdHIgIndyaXRlLXRyZWUgZmVobGdlc2NobGFnZW46IgogCi0jOiBsaWIvY29tbWl0LnRjbDozMDQgbGliL2NvbW1pdC50Y2w6MzQ4IGxpYi9jb21taXQudGNsOjM2OAorIzogbGliL2NvbW1pdC50Y2w6MzE3IGxpYi9jb21taXQudGNsOjM2MSBsaWIvY29tbWl0LnRjbDozODIKIG1zZ2lkICJDb21taXQgZmFpbGVkLiIKIG1zZ3N0ciAiRWludHJhZ2VuIGZlaGxnZXNjaGxhZ2VuLiIKIAotIzogbGliL2NvbW1pdC50Y2w6MzIxCisjOiBsaWIvY29tbWl0LnRjbDozMzQKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJDb21taXQgJXMgYXBwZWFycyB0byBiZSBjb3JydXB0IgogbXNnc3RyICJWZXJzaW9uIMK7JXPCqyBzY2hlaW50IGJlc2Now6RkaWd0IHp1IHNlaW4iCiAKLSM6IGxpYi9jb21taXQudGNsOjMyNgorIzogbGliL2NvbW1pdC50Y2w6MzM5CiBtc2dpZCAiIgogIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgogIlxuIgpAQCAtMTQ0OCwxOSArMTQ5NCwxOSBAQAogIlxuIgogIkRhcyBBcmJlaXRzdmVyemVpY2huaXMgd2lyZCBkYWhlciBqZXR6dCBuZXUgZ2VsYWRlbi5cbiIKIAotIzogbGliL2NvbW1pdC50Y2w6MzMzCisjOiBsaWIvY29tbWl0LnRjbDozNDYKIG1zZ2lkICJObyBjaGFuZ2VzIHRvIGNvbW1pdC4iCiBtc2dzdHIgIktlaW5lIMOEbmRlcnVuZ2VuLCBkaWUgZWluZ2V0cmFnZW4gd2VyZGVuIGvDtm5uZW4uIgogCi0jOiBsaWIvY29tbWl0LnRjbDozNDcKKyM6IGxpYi9jb21taXQudGNsOjM2MAogbXNnaWQgImNvbW1pdC10cmVlIGZhaWxlZDoiCiBtc2dzdHIgImNvbW1pdC10cmVlIGZlaGxnZXNjaGxhZ2VuOiIKIAotIzogbGliL2NvbW1pdC50Y2w6MzY3CisjOiBsaWIvY29tbWl0LnRjbDozODEKIG1zZ2lkICJ1cGRhdGUtcmVmIGZhaWxlZDoiCiBtc2dzdHIgInVwZGF0ZS1yZWYgZmVobGdlc2NobGFnZW46IgogCi0jOiBsaWIvY29tbWl0LnRjbDo0NTQKKyM6IGxpYi9jb21taXQudGNsOjQ2OQogIywgdGNsLWZvcm1hdAogbXNnaWQgIkNyZWF0ZWQgY29tbWl0ICVzOiAlcyIKIG1zZ3N0ciAiVmVyc2lvbiAlcyDDvGJlcnRyYWdlbjogJXMiCkBAIC0xNTEzLDIxICsxNTU5LDE5IEBACiBtc2dpZCAiVmVyaWZ5aW5nIHRoZSBvYmplY3QgZGF0YWJhc2Ugd2l0aCBmc2NrLW9iamVjdHMiCiBtc2dzdHIgIkRpZSBPYmpla3RkYXRlbmJhbmsgZHVyY2ggwrtmc2NrLW9iamVjdHPCqyDDvGJlcnByw7xmZW4gbGFzc2VuIgogCi0jOiBsaWIvZGF0YWJhc2UudGNsOjEwOAorIzogbGliL2RhdGFiYXNlLnRjbDoxMDcKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiVGhpcyByZXBvc2l0b3J5IGN1cnJlbnRseSBoYXMgYXBwcm94aW1hdGVseSAlaSBsb29zZSBvYmplY3RzLlxuIgogIlxuIgogIlRvIG1haW50YWluIG9wdGltYWwgcGVyZm9ybWFuY2UgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgY29tcHJlc3MgIgotInRoZSBkYXRhYmFzZSB3aGVuIG1vcmUgdGhhbiAlaSBsb29zZSBvYmplY3RzIGV4aXN0LlxuIgorInRoZSBkYXRhYmFzZS5cbiIKICJcbiIKICJDb21wcmVzcyB0aGUgZGF0YWJhc2Ugbm93PyIKIG1zZ3N0ciAiIgogIkRpZXNlcyBQcm9qZWt0YXJjaGl2IGVudGjDpGx0IHVuZ2Vmw6RociAlaSBuaWNodCB2ZXJrbsO8cGZ0ZSBPYmpla3RlLlxuIgogIlxuIgotIkbDvHIgZWluZSBvcHRpbWFsZSBQZXJmb3JtYW5jZSB3aXJkIGVtcGZvaGxlbiwgZGllIERhdGVuYmFuayBkZXMgIgotIlByb2pla3RhcmNoaXZzIHp1IGtvbXByaW1pZXJlbiwgc29iYWxkIG1laHIgYWxzICVpIG5pY2h0IHZlcmtuw7xwZnRlIE9iamVrdGUgIgotInZvcmxpZWdlbi5cbiIKKyJGw7xyIGVpbmUgb3B0aW1hbGUgUGVyZm9ybWFuY2Ugd2lyZCBlbXBmb2hsZW4sIGRpZSBEYXRlbmJhbmsgZGVzIFByb2pla3RhcmNoaXZzIHp1IGtvbXByaW1pZXJlbi5cbiIKICJcbiIKICJTb2xsIGRpZSBEYXRlbmJhbmsgamV0enQga29tcHJpbWllcnQgd2VyZGVuPyIKIApAQCAtMTUzNiw3ICsxNTgwLDcgQEAKIG1zZ2lkICJJbnZhbGlkIGRhdGUgZnJvbSBHaXQ6ICVzIgogbXNnc3RyICJVbmfDvGx0aWdlcyBEYXR1bSB2b24gR2l0OiAlcyIKIAotIzogbGliL2RpZmYudGNsOjQyCisjOiBsaWIvZGlmZi50Y2w6NjQKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiTm8gZGlmZmVyZW5jZXMgZGV0ZWN0ZWQuXG4iCkBAIC0xNTUxLDE5ICsxNTk1LDE5IEBACiBtc2dzdHIgIiIKICJLZWluZSDDhG5kZXJ1bmdlbiBmZXN0c3RlbGxiYXIuXG4iCiAiXG4iCi0iwrslc8KrIGVudGjDpGx0IGtlaW5lIMOEbmRlcnVuZ2VuLiBad2FyIHd1cmRlIGRhcyDDhG5kZXJ1bmdzZGF0dW0gZGllc2VyIERhdGVpICIKLSJ2b24gZWluZW0gYW5kZXJlbiBQcm9ncmFtbSBtb2RpZml6aWVydCwgYWJlciBkZXIgSW5oYWx0IGRlciBEYXRlaSBpc3QgIgorIsK7JXPCqyBlbnRow6RsdCBrZWluZSDDhG5kZXJ1bmdlbi4gWndhciB3dXJkZSBkYXMgw4RuZGVydW5nc2RhdHVtIGRpZXNlciBEYXRlaSB2b24gIgorImVpbmVtIGFuZGVyZW4gUHJvZ3JhbW0gbW9kaWZpemllcnQsIGFiZXIgZGVyIEluaGFsdCBkZXIgRGF0ZWkgaXN0ICIKICJ1bnZlcsOkbmRlcnQuXG4iCiAiXG4iCiAiRGFzIEFyYmVpdHN2ZXJ6ZWljaG5pcyB3aXJkIGpldHp0IG5ldSBnZWxhZGVuLCB1bSBkaWVzZSDDhG5kZXJ1bmcgYmVpIGFsbGVuICIKICJEYXRlaWVuIHp1IHByw7xmZW4uIgogCi0jOiBsaWIvZGlmZi50Y2w6ODEKKyM6IGxpYi9kaWZmLnRjbDoxMDQKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJMb2FkaW5nIGRpZmYgb2YgJXMuLi4iCiBtc2dzdHIgIlZlcmdsZWljaCB2b24gwrslc8KrIGxhZGVuLi4uIgogCi0jOiBsaWIvZGlmZi50Y2w6MTIwCisjOiBsaWIvZGlmZi50Y2w6MTI1CiBtc2dpZCAiIgogIkxPQ0FMOiBkZWxldGVkXG4iCiAiUkVNT1RFOlxuIgpAQCAtMTU3MSw3ICsxNjE1LDcgQEAKICJMT0tBTDogZ2Vsw7ZzY2h0XG4iCiAiQU5ERVJFUzpcbiIKIAotIzogbGliL2RpZmYudGNsOjEyNQorIzogbGliL2RpZmYudGNsOjEzMAogbXNnaWQgIiIKICJSRU1PVEU6IGRlbGV0ZWRcbiIKICJMT0NBTDpcbiIKQEAgLTE1NzksMzIgKzE2MjMsMzIgQEAKICJBTkRFUkVTOiBnZWzDtnNjaHRcbiIKICJMT0tBTDpcbiIKIAotIzogbGliL2RpZmYudGNsOjEzMgorIzogbGliL2RpZmYudGNsOjEzNwogbXNnaWQgIkxPQ0FMOlxuIgogbXNnc3RyICJMT0tBTDpcbiIKIAotIzogbGliL2RpZmYudGNsOjEzNQorIzogbGliL2RpZmYudGNsOjE0MAogbXNnaWQgIlJFTU9URTpcbiIKIG1zZ3N0ciAiQU5ERVJFUzpcbiIKIAotIzogbGliL2RpZmYudGNsOjE5NyBsaWIvZGlmZi50Y2w6Mjk2CisjOiBsaWIvZGlmZi50Y2w6MjAyIGxpYi9kaWZmLnRjbDozMTkKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJVbmFibGUgdG8gZGlzcGxheSAlcyIKIG1zZ3N0ciAiRGF0ZWkgwrslc8KrIGthbm4gbmljaHQgYW5nZXplaWd0IHdlcmRlbiIKIAotIzogbGliL2RpZmYudGNsOjExNQorIzogbGliL2RpZmYudGNsOjIwMwogbXNnaWQgIkVycm9yIGxvYWRpbmcgZmlsZToiCiBtc2dzdHIgIkZlaGxlciBiZWltIExhZGVuIGRlciBEYXRlaToiCiAKLSM6IGxpYi9kaWZmLnRjbDoxMjIKKyM6IGxpYi9kaWZmLnRjbDoyMTAKIG1zZ2lkICJHaXQgUmVwb3NpdG9yeSAoc3VicHJvamVjdCkiCiBtc2dzdHIgIkdpdC1Qcm9qZWt0YXJjaGl2IChVbnRlcnByb2pla3QpIgogCi0jOiBsaWIvZGlmZi50Y2w6MTM0CisjOiBsaWIvZGlmZi50Y2w6MjIyCiBtc2dpZCAiKiBCaW5hcnkgZmlsZSAobm90IHNob3dpbmcgY29udGVudCkuIgogbXNnc3RyICIqIEJpbsOkcmRhdGVpIChJbmhhbHQgd2lyZCBuaWNodCBhbmdlemVpZ3QpIgogCi0jOiBsaWIvZGlmZi50Y2w6MjIyCisjOiBsaWIvZGlmZi50Y2w6MjI3CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiIgogIiogVW50cmFja2VkIGZpbGUgaXMgJWQgYnl0ZXMuXG4iCkBAIC0xNjEzLDcgKzE2NTcsNyBAQAogIiogRGF0ZWkgbmljaHQgdW50ZXIgVmVyc2lvbnNrb250cm9sbGUsIERhdGVpZ3LDtsOfZSAlZCBCeXRlcy5cbiIKICIqIE51ciBlcnN0ZSAlZCBCeXRlcyB3ZXJkZW4gYW5nZXplaWd0LlxuIgogCi0jOiBsaWIvZGlmZi50Y2w6MjI4CisjOiBsaWIvZGlmZi50Y2w6MjMzCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiIgogIlxuIgpAQCAtMTYyNCwyMCArMTY2OCwyMCBAQAogIiogRGF0ZWkgbmljaHQgdW50ZXIgVmVyc2lvbnNrb250cm9sbGUsIGhpZXIgYWJnZXNjaG5pdHRlbiBkdXJjaCAlcy5cbiIKICIqIFp1bSBBbnNlaGVuIGRlciB2b2xsc3TDpG5kaWdlbiBEYXRlaSBleHRlcm5lbiBFZGl0b3IgYmVudXR6ZW4uXG4iCiAKLSM6IGxpYi9kaWZmLnRjbDo0MzYKKyM6IGxpYi9kaWZmLnRjbDo0ODIKIG1zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBodW5rLiIKIG1zZ3N0ciAiIgogIkZlaGxlciBiZWltIEhlcmF1c25laG1lbiBkZXMgZ2V3w6RobHRlbiBLb250ZXh0cyBhdXMgZGVyIEJlcmVpdHN0ZWxsdW5nLiIKIAotIzogbGliL2RpZmYudGNsOjMxMAorIzogbGliL2RpZmYudGNsOjQ4OQogbXNnaWQgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBodW5rLiIKIG1zZ3N0ciAiRmVobGVyIGJlaW0gQmVyZWl0c3RlbGxlbiBkZXMgZ2V3w6RobHRlbiBLb250ZXh0cy4iCiAKLSM6IGxpYi9kaWZmLnRjbDozODYKKyM6IGxpYi9kaWZmLnRjbDo1NjgKIG1zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBsaW5lLiIKIG1zZ3N0ciAiRmVobGVyIGJlaW0gSGVyYXVzbmVobWVuIGRlciBnZXfDpGhsdGVuIFplaWxlIGF1cyBkZXIgQmVyZWl0c3RlbGx1bmcuIgogCi0jOiBsaWIvZGlmZi50Y2w6Mzk0CisjOiBsaWIvZGlmZi50Y2w6NTc2CiBtc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGxpbmUuIgogbXNnc3RyICJGZWhsZXIgYmVpbSBCZXJlaXRzdGVsbGVuIGRlciBnZXfDpGhsdGVuIFplaWxlLiIKIApAQCAtMTY3NSw3ICsxNzE5LDcgQEAKIG1zZ2lkICJJbmRleCBFcnJvciIKIG1zZ3N0ciAiRmVobGVyIGluIEJlcmVpdHN0ZWxsdW5nIgogCi0jOiBsaWIvaW5kZXgudGNsOjIxCisjOiBsaWIvaW5kZXgudGNsOjE3CiBtc2dpZCAiIgogIlVwZGF0aW5nIHRoZSBHaXQgaW5kZXggZmFpbGVkLiAgQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gIgogInJlc3luY2hyb25pemUgZ2l0LWd1aS4iCkBAIC0xNjg0LDcgKzE3MjgsNyBAQAogIkdpdC1Ba3R1YWxpc2llcnVuZyB3aXJkIGpldHp0IGdlc3RhcnRldCwgdW0gZ2l0LWd1aSB3aWVkZXIgbWl0IGdpdCB6dSAiCiAic3luY2hyb25pc2llcmVuLiIKIAotIzogbGliL2luZGV4LnRjbDoyNworIzogbGliL2luZGV4LnRjbDoyOAogbXNnaWQgIkNvbnRpbnVlIgogbXNnc3RyICJGb3J0c2V0emVuIgogCkBAIC0xNjkyLDQ0ICsxNzM2LDQ0IEBACiBtc2dpZCAiVW5sb2NrIEluZGV4IgogbXNnc3RyICJCZXJlaXRzdGVsbHVuZyBmcmVpZ2ViZW4iCiAKLSM6IGxpYi9pbmRleC50Y2w6MjgyCisjOiBsaWIvaW5kZXgudGNsOjI4OQogIywgdGNsLWZvcm1hdAogbXNnaWQgIlVuc3RhZ2luZyAlcyBmcm9tIGNvbW1pdCIKIG1zZ3N0ciAiRGF0ZWkgwrslc8KrIGF1cyBkZXIgQmVyZWl0c3RlbGx1bmcgaGVyYXVzbmVobWVuIgogCi0jOiBsaWIvaW5kZXgudGNsOjMxMworIzogbGliL2luZGV4LnRjbDozMjgKIG1zZ2lkICJSZWFkeSB0byBjb21taXQuIgogbXNnc3RyICJCZXJlaXQgenVtIEVpbnRyYWdlbi4iCiAKLSM6IGxpYi9pbmRleC50Y2w6MzI2CisjOiBsaWIvaW5kZXgudGNsOjM0MQogIywgdGNsLWZvcm1hdAogbXNnaWQgIkFkZGluZyAlcyIKIG1zZ3N0ciAiwrslc8KrIGhpbnp1ZsO8Z2VuLi4uIgogCi0jOiBsaWIvaW5kZXgudGNsOjM4MQorIzogbGliL2luZGV4LnRjbDozOTgKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiBmaWxlICVzPyIKIG1zZ3N0ciAiw4RuZGVydW5nZW4gaW4gRGF0ZWkgwrslc8KrIHZlcndlcmZlbj8iCiAKLSM6IGxpYi9pbmRleC50Y2w6MzgzCisjOiBsaWIvaW5kZXgudGNsOjQwMAogIywgdGNsLWZvcm1hdAogbXNnaWQgIlJldmVydCBjaGFuZ2VzIGluIHRoZXNlICVpIGZpbGVzPyIKIG1zZ3N0ciAiw4RuZGVydW5nZW4gaW4gZGVuIGdld8OkaGx0ZW4gJWkgRGF0ZWllbiB2ZXJ3ZXJmZW4/IgogCi0jOiBsaWIvaW5kZXgudGNsOjM5MQorIzogbGliL2luZGV4LnRjbDo0MDgKIG1zZ2lkICJBbnkgdW5zdGFnZWQgY2hhbmdlcyB3aWxsIGJlIHBlcm1hbmVudGx5IGxvc3QgYnkgdGhlIHJldmVydC4iCiBtc2dzdHIgIiIKICJBbGxlIG5pY2h0IGJlcmVpdGdlc3RlbGx0ZW4gw4RuZGVydW5nZW4gd2VyZGVuIGJlaW0gVmVyd2VyZmVuIHZlcmxvcmVuIGdlaGVuLiIKIAotIzogbGliL2luZGV4LnRjbDozOTQKKyM6IGxpYi9pbmRleC50Y2w6NDExCiBtc2dpZCAiRG8gTm90aGluZyIKIG1zZ3N0ciAiTmljaHRzIHR1biIKIAotIzogbGliL2luZGV4LnRjbDo0MTkKKyM6IGxpYi9pbmRleC50Y2w6NDI5CiBtc2dpZCAiUmV2ZXJ0aW5nIHNlbGVjdGVkIGZpbGVzIgogbXNnc3RyICLDhG5kZXJ1bmdlbiBpbiBnZXfDpGhsdGVuIERhdGVpZW4gdmVyd2VyZmVuIgogCi0jOiBsaWIvaW5kZXgudGNsOjQyMworIzogbGliL2luZGV4LnRjbDo0MzMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJSZXZlcnRpbmcgJXMiCiBtc2dzdHIgIsOEbmRlcnVuZ2VuIGluICVzIHZlcndlcmZlbiIKQEAgLTE3NjEsNyArMTgwNSw3IEBACiAiXG4iCiAiRXMgd2lyZCBnbGVpY2ggbmV1IGdlbGFkZW4uXG4iCiAKLSM6IGxpYi9tZXJnZS50Y2w6NDQKKyM6IGxpYi9tZXJnZS50Y2w6NDUKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY29uZmxpY3RlZCBtZXJnZS5cbiIKQEAgLTE3NzgsNyArMTgyMiw3IEBACiAiYmVyZWl0c3RlbGxlbiB1bmQgZWludHJhZ2VuLCB1bSBkaWUgWnVzYW1tZW5mw7xocnVuZyBhYnp1c2NobGllw59lbi4gRXJzdCAiCiAiZGFuYWNoIGthbm4gZWluZSBuZXVlIFp1c2FtbWVuZsO8aHJ1bmcgYmVnb25uZW4gd2VyZGVuLlxuIgogCi0jOiBsaWIvbWVyZ2UudGNsOjU0CisjOiBsaWIvbWVyZ2UudGNsOjU1CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiIgogIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoYW5nZS5cbiIKQEAgLTE3OTUsMzQgKzE4MzksMzQgQEAKICJSZWloZW5mb2xnZSBrw7ZubmVuIFNpZSBtw7ZnbGljaGUgS29uZmxpa3RlIGJlaW0gWnVzYW1tZW5mw7xocmVuIHdlc2VudGxpY2ggIgogImVpbmZhY2hlciBiZWhlYmVuIG9kZXIgYWJicmVjaGVuLlxuIgogCi0jOiBsaWIvbWVyZ2UudGNsOjEwNgorIzogbGliL21lcmdlLnRjbDoxMDcKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIlcyBvZiAlcyIKIG1zZ3N0ciAiJXMgdm9uICVzIgogCi0jOiBsaWIvbWVyZ2UudGNsOjExOQorIzogbGliL21lcmdlLnRjbDoxMjAKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJNZXJnaW5nICVzIGFuZCAlcy4uLiIKIG1zZ3N0ciAiWnVzYW1tZW5mw7xocmVuIHZvbiAlcyB1bmQgJXMuLi4iCiAKLSM6IGxpYi9tZXJnZS50Y2w6MTMwCisjOiBsaWIvbWVyZ2UudGNsOjEzMQogbXNnaWQgIk1lcmdlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIgogbXNnc3RyICJadXNhbW1lbmbDvGhyZW4gZXJmb2xncmVpY2ggYWJnZXNjaGxvc3Nlbi4iCiAKLSM6IGxpYi9tZXJnZS50Y2w6MTMyCisjOiBsaWIvbWVyZ2UudGNsOjEzMwogbXNnaWQgIk1lcmdlIGZhaWxlZC4gIENvbmZsaWN0IHJlc29sdXRpb24gaXMgcmVxdWlyZWQuIgogbXNnc3RyICJadXNhbW1lbmbDvGhyZW4gZmVobGdlc2NobGFnZW4uIEtvbmZsaWt0YXVmbMO2c3VuZyBpc3Qgbm90d2VuZGlnLiIKIAotIzogbGliL21lcmdlLnRjbDoxNTcKKyM6IGxpYi9tZXJnZS50Y2w6MTU4CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiTWVyZ2UgSW50byAlcyIKIG1zZ3N0ciAiWnVzYW1tZW5mw7xocmVuIGluIMK7JXPCqyIKIAotIzogbGliL21lcmdlLnRjbDoxNzYKKyM6IGxpYi9tZXJnZS50Y2w6MTc3CiBtc2dpZCAiUmV2aXNpb24gVG8gTWVyZ2UiCiBtc2dzdHIgIlp1c2FtbWVuenVmw7xocmVuZGUgVmVyc2lvbiIKIAotIzogbGliL21lcmdlLnRjbDoyMTEKKyM6IGxpYi9tZXJnZS50Y2w6MjEyCiBtc2dpZCAiIgogIkNhbm5vdCBhYm9ydCB3aGlsZSBhbWVuZGluZy5cbiIKICJcbiIKQEAgLTE4MzIsNyArMTg3Niw3IEBACiAiXG4iCiAiU2llIG3DvHNzZW4gZGllIE5hY2hiZXNzZXJ1bmcgZGVyIFZlcnNpb24gYWJzY2hsaWXDn2VuLlxuIgogCi0jOiBsaWIvbWVyZ2UudGNsOjIyMQorIzogbGliL21lcmdlLnRjbDoyMjIKIG1zZ2lkICIiCiAiQWJvcnQgbWVyZ2U/XG4iCiAiXG4iCkBAIC0xODQ3LDcgKzE4OTEsNyBAQAogIlxuIgogIlp1c2FtbWVuZsO8aHJlbiBqZXR6dCBhYmJyZWNoZW4/IgogCi0jOiBsaWIvbWVyZ2UudGNsOjIyNworIzogbGliL21lcmdlLnRjbDoyMjgKIG1zZ2lkICIiCiAiUmVzZXQgY2hhbmdlcz9cbiIKICJcbiIKQEAgLTE4NjIsMzUgKzE5MDYsMzUgQEAKICJcbiIKICLDhG5kZXJ1bmdlbiBqZXR6dCB6dXLDvGNrc2V0emVuPyIKIAotIzogbGliL21lcmdlLnRjbDoyMzgKKyM6IGxpYi9tZXJnZS50Y2w6MjM5CiBtc2dpZCAiQWJvcnRpbmciCiBtc2dzdHIgIkFiYnJ1Y2giCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjM4CisjOiBsaWIvbWVyZ2UudGNsOjIzOQogbXNnaWQgImZpbGVzIHJlc2V0IgogbXNnc3RyICJEYXRlaWVuIHp1csO8Y2tnZXNldHp0IgogCi0jOiBsaWIvbWVyZ2UudGNsOjI2NQorIzogbGliL21lcmdlLnRjbDoyNjcKIG1zZ2lkICJBYm9ydCBmYWlsZWQuIgogbXNnc3RyICJBYmJydWNoIGZlaGxnZXNjaGxhZ2VuLiIKIAotIzogbGliL21lcmdlLnRjbDoyNjcKKyM6IGxpYi9tZXJnZS50Y2w6MjY5CiBtc2dpZCAiQWJvcnQgY29tcGxldGVkLiAgUmVhZHkuIgogbXNnc3RyICJBYmJydWNoIGR1cmNoZ2Vmw7xocnQuIEJlcmVpdC4iCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjE0CisjOiBsaWIvbWVyZ2V0b29sLnRjbDo4CiBtc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgYmFzZSB2ZXJzaW9uPyIKIG1zZ3N0ciAiS29uZmxpa3QgZHVyY2ggQmFzaXN2ZXJzaW9uIGVyc2V0emVuPyIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MTUKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjkKIG1zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoaXMgYnJhbmNoPyIKIG1zZ3N0ciAiS29uZmxpa3QgZHVyY2ggZGllc2VuIFp3ZWlnIGVyc2V0emVuPyIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MTYKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjEwCiBtc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgb3RoZXIgYnJhbmNoPyIKIG1zZ3N0ciAiS29uZmxpa3QgZHVyY2ggYW5kZXJlbiBad2VpZyBlcnNldHplbj8iCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjIwCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoxNAogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICJOb3RlIHRoYXQgdGhlIGRpZmYgc2hvd3Mgb25seSBjb25mbGljdGluZyBjaGFuZ2VzLlxuIgpAQCAtMTkxNiwzMSArMTk2MCwzMSBAQAogbXNnaWQgIkFkZGluZyByZXNvbHV0aW9uIGZvciAlcyIKIG1zZ3N0ciAiQXVmbMO2c3VuZyBoaW56dWdlZsO8Z3QgZsO8ciAlcyIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MTE5CisjOiBsaWIvbWVyZ2V0b29sLnRjbDoxNDEKIG1zZ2lkICJDYW5ub3QgcmVzb2x2ZSBkZWxldGlvbiBvciBsaW5rIGNvbmZsaWN0cyB1c2luZyBhIHRvb2wiCiBtc2dzdHIgIiIKICJLb25mbGlrdGUgZHVyY2ggZ2Vsw7ZzY2h0ZSBEYXRlaWVuIG9kZXIgc3ltYm9saXNjaGUgTGlua3Mga8O2bm5lbiBuaWNodCBkdXJjaCAiCiAiZGFzIFp1c2FtZW5mw7xocnVuZ3N3ZXJremV1ZyBnZWzDtnN0IHdlcmRlbi4iCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjEyNAorIzogbGliL21lcmdldG9vbC50Y2w6MTQ2CiBtc2dpZCAiQ29uZmxpY3QgZmlsZSBkb2VzIG5vdCBleGlzdCIKIG1zZ3N0ciAiS29uZmxpa3QtRGF0ZWkgZXhpc3RpZXJ0IG5pY2h0IgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoyMzYKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjI2NAogIywgdGNsLWZvcm1hdAogbXNnaWQgIk5vdCBhIEdVSSBtZXJnZSB0b29sOiAnJXMnIgogbXNnc3RyICJLZWluIEdVSSBadXNhbW1lbmbDvGhydW5nc3dlcmt6ZXVnOiDCuyVzwqsiCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjI0MAorIzogbGliL21lcmdldG9vbC50Y2w6MjY4CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVW5zdXBwb3J0ZWQgbWVyZ2UgdG9vbCAnJXMnIgogbXNnc3RyICJVbmJla2FubnRlcyBadXNhbW1lbmbDvGhydW5nc3dlcmt6ZXVnOiDCuyVzwqsiCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjI3NQorIzogbGliL21lcmdldG9vbC50Y2w6MzAzCiBtc2dpZCAiTWVyZ2UgdG9vbCBpcyBhbHJlYWR5IHJ1bm5pbmcsIHRlcm1pbmF0ZSBpdD8iCiBtc2dzdHIgIlp1c2FtbWVuZsO8aHJ1bmdzd2Vya3pldWcgbMOkdWZ0IGJlcmVpdHMuIFNvbGwgZXMgYWJnZWJyb2NoZW4gd2VyZGVuPyIKIAotIzogbGliL21lcmdldG9vbC50Y2w6Mjk1CisjOiBsaWIvbWVyZ2V0b29sLnRjbDozMjMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiRXJyb3IgcmV0cmlldmluZyB2ZXJzaW9uczpcbiIKQEAgLTE5NDksNyArMTk5Myw3IEBACiAiRmVobGVyIGJlaW0gQWJydWZlbiBkZXIgRGF0ZWl2ZXJzaW9uZW46XG4iCiAiJXMiCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjMxNQorIzogbGliL21lcmdldG9vbC50Y2w6MzQzCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiIgogIkNvdWxkIG5vdCBzdGFydCB0aGUgbWVyZ2UgdG9vbDpcbiIKQEAgLTE5NjAsMTEgKzIwMDQsMTEgQEAKICJcbiIKICIlcyIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MzE5CisjOiBsaWIvbWVyZ2V0b29sLnRjbDozNDcKIG1zZ2lkICJSdW5uaW5nIG1lcmdlIHRvb2wuLi4iCiBtc2dzdHIgIlp1c2FtbWVuZsO8aHJ1bmdzd2Vya3pldWcgc3RhcnRlbi4uLiIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MzQ3IGxpYi9tZXJnZXRvb2wudGNsOjM2MworIzogbGliL21lcmdldG9vbC50Y2w6Mzc1IGxpYi9tZXJnZXRvb2wudGNsOjM4MwogbXNnaWQgIk1lcmdlIHRvb2wgZmFpbGVkLiIKIG1zZ3N0ciAiWnVzYW1tZW5mw7xocnVuZ3N3ZXJremV1ZyBmZWhsZ2VzY2hsYWdlbi4iCiAKQEAgLTE5ODIsNzYgKzIwMjYsNzYgQEAKIG1zZ2lkICJSZXN0b3JlIERlZmF1bHRzIgogbXNnc3RyICJWb3JlaW5zdGVsbHVuZ2VuIHdpZWRlcmhlcnN0ZWxsZW4iCiAKLSM6IGxpYi9vcHRpb24udGNsOjk5CisjOiBsaWIvb3B0aW9uLnRjbDoxMjEKIG1zZ2lkICJTYXZlIgogbXNnc3RyICJTcGVpY2hlcm4iCiAKLSM6IGxpYi9vcHRpb24udGNsOjEwOQorIzogbGliL29wdGlvbi50Y2w6MTMxCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiJXMgUmVwb3NpdG9yeSIKIG1zZ3N0ciAiUHJvamVrdGFyY2hpdiAlcyIKIAotIzogbGliL29wdGlvbi50Y2w6MTEwCisjOiBsaWIvb3B0aW9uLnRjbDoxMzIKIG1zZ2lkICJHbG9iYWwgKEFsbCBSZXBvc2l0b3JpZXMpIgogbXNnc3RyICJHbG9iYWwgKEFsbGUgUHJvamVrdGFyY2hpdmUpIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxMTYKKyM6IGxpYi9vcHRpb24udGNsOjEzOAogbXNnaWQgIlVzZXIgTmFtZSIKIG1zZ3N0ciAiQmVudXR6ZXJuYW1lIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxMTcKKyM6IGxpYi9vcHRpb24udGNsOjEzOQogbXNnaWQgIkVtYWlsIEFkZHJlc3MiCiBtc2dzdHIgIkUtTWFpbC1BZHJlc3NlIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxMTkKKyM6IGxpYi9vcHRpb24udGNsOjE0MQogbXNnaWQgIlN1bW1hcml6ZSBNZXJnZSBDb21taXRzIgogbXNnc3RyICJadXNhbW1lbmbDvGhydW5ncy1WZXJzaW9uZW4genVzYW1tZW5mYXNzZW4iCiAKLSM6IGxpYi9vcHRpb24udGNsOjEyMAorIzogbGliL29wdGlvbi50Y2w6MTQyCiBtc2dpZCAiTWVyZ2UgVmVyYm9zaXR5IgogbXNnc3RyICJBdXNmw7xocmxpY2hrZWl0IGRlciBadXNhbW1lbmbDvGhyZW4tTWVsZHVuZ2VuIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxMjEKKyM6IGxpYi9vcHRpb24udGNsOjE0MwogbXNnaWQgIlNob3cgRGlmZnN0YXQgQWZ0ZXIgTWVyZ2UiCiBtc2dzdHIgIlZlcmdsZWljaHNzdGF0aXN0aWsgbmFjaCBadXNhbW1lbmbDvGhyZW4gYW56ZWlnZW4iCiAKLSM6IGxpYi9vcHRpb24udGNsOjEyMgorIzogbGliL29wdGlvbi50Y2w6MTQ0CiBtc2dpZCAiVXNlIE1lcmdlIFRvb2wiCiBtc2dzdHIgIlp1c2FtbWVuZsO8aHJ1bmdzd2Vya3pldWciCiAKLSM6IGxpYi9vcHRpb24udGNsOjEyNAorIzogbGliL29wdGlvbi50Y2w6MTQ2CiBtc2dpZCAiVHJ1c3QgRmlsZSBNb2RpZmljYXRpb24gVGltZXN0YW1wcyIKIG1zZ3N0ciAiQXVmIERhdGVpw6RuZGVydW5nc2RhdHVtIHZlcmxhc3NlbiIKIAotIzogbGliL29wdGlvbi50Y2w6MTI0CisjOiBsaWIvb3B0aW9uLnRjbDoxNDcKIG1zZ2lkICJQcnVuZSBUcmFja2luZyBCcmFuY2hlcyBEdXJpbmcgRmV0Y2giCiBtc2dzdHIgIsOcYmVybmFobWV6d2VpZ2UgYXVmcsOkdW1lbiB3w6RocmVuZCBBbmZvcmRlcnVuZyIKIAotIzogbGliL29wdGlvbi50Y2w6MTI1CisjOiBsaWIvb3B0aW9uLnRjbDoxNDgKIG1zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2hlcyIKIG1zZ3N0ciAiUGFzc2VuZCB6dSDDnGJlcm5haG1lendlaWciCiAKLSM6IGxpYi9vcHRpb24udGNsOjEyNgorIzogbGliL29wdGlvbi50Y2w6MTQ5CiBtc2dpZCAiQmxhbWUgQ29weSBPbmx5IE9uIENoYW5nZWQgRmlsZXMiCiBtc2dzdHIgIktvcGllLUFubm90aWVyZW4gbnVyIGJlaSBnZcOkbmRlcnRlbiBEYXRlaWVuIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxMjcKKyM6IGxpYi9vcHRpb24udGNsOjE1MAogbXNnaWQgIk1pbmltdW0gTGV0dGVycyBUbyBCbGFtZSBDb3B5IE9uIgogbXNnc3RyICJNaW5kZXN0emFobCBaZWljaGVuIGbDvHIgS29waWUtQW5ub3RpZXJlbiIKIAotIzogbGliL29wdGlvbi50Y2w6MTI4CisjOiBsaWIvb3B0aW9uLnRjbDoxNTEKIG1zZ2lkICJCbGFtZSBIaXN0b3J5IENvbnRleHQgUmFkaXVzIChkYXlzKSIKIG1zZ3N0ciAiQW56YWhsIFRhZ2UgZsO8ciBIaXN0b3JpZW4tS29udGV4dCIKIAotIzogbGliL29wdGlvbi50Y2w6MTI5CisjOiBsaWIvb3B0aW9uLnRjbDoxNTIKIG1zZ2lkICJOdW1iZXIgb2YgRGlmZiBDb250ZXh0IExpbmVzIgogbXNnc3RyICJBbnphaGwgZGVyIEtvbnRleHR6ZWlsZW4gYmVpbSBWZXJnbGVpY2giCiAKLSM6IGxpYi9vcHRpb24udGNsOjEyNworIzogbGliL29wdGlvbi50Y2w6MTUzCiBtc2dpZCAiQ29tbWl0IE1lc3NhZ2UgVGV4dCBXaWR0aCIKIG1zZ3N0ciAiVGV4dGJyZWl0ZSBkZXIgVmVyc2lvbnNiZXNjaHJlaWJ1bmciCiAKLSM6IGxpYi9vcHRpb24udGNsOjEyOAorIzogbGliL29wdGlvbi50Y2w6MTU0CiBtc2dpZCAiTmV3IEJyYW5jaCBOYW1lIFRlbXBsYXRlIgogbXNnc3RyICJOYW1lbnN2b3JzY2hsYWcgZsO8ciBuZXVlIFp3ZWlnZSIKIApAQCAtMjA2NywyNCArMjExMSwyNCBAQAogbXNnaWQgIlNwZWxsaW5nIERpY3Rpb25hcnk6IgogbXNnc3RyICJXw7ZydGVyYnVjaCBSZWNodHNjaHJlaWJwcsO8ZnVuZzoiCiAKLSM6IGxpYi9vcHRpb24udGNsOjIxNgorIzogbGliL29wdGlvbi50Y2w6MjU0CiBtc2dpZCAiQ2hhbmdlIEZvbnQiCiBtc2dzdHIgIlNjaHJpZnRhcnQgw6RuZGVybiIKIAotIzogbGliL29wdGlvbi50Y2w6MjIwCisjOiBsaWIvb3B0aW9uLnRjbDoyNTgKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJDaG9vc2UgJXMiCiBtc2dzdHIgIiVzIHfDpGhsZW4iCiAKLSM6IGxpYi9vcHRpb24udGNsOjIyNgorIzogbGliL29wdGlvbi50Y2w6MjY0CiBtc2dpZCAicHQuIgogbXNnc3RyICJwdC4iCiAKLSM6IGxpYi9vcHRpb24udGNsOjI0MAorIzogbGliL29wdGlvbi50Y2w6Mjc4CiBtc2dpZCAiUHJlZmVyZW5jZXMiCiBtc2dzdHIgIkVpbnN0ZWxsdW5nZW4iCiAKLSM6IGxpYi9vcHRpb24udGNsOjI3NQorIzogbGliL29wdGlvbi50Y2w6MzE0CiBtc2dpZCAiRmFpbGVkIHRvIGNvbXBsZXRlbHkgc2F2ZSBvcHRpb25zOiIKIG1zZ3N0ciAiT3B0aW9uZW4ga29ubnRlbiBuaWNodCBnZXNwZWljaGVydCB3ZXJkZW46IgogCkBAIC0yMDk2LDcgKzIxNDAsNyBAQAogbXNnaWQgIkFkZCBOZXcgUmVtb3RlIgogbXNnc3RyICJOZXVlcyBhbmRlcmVzIEFyY2hpdiBoaW56dWbDvGdlbiIKIAotIzogbGliL3JlbW90ZV9hZGQudGNsOjI4CisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjggbGliL3Rvb2xzX2RsZy50Y2w6MzYKIG1zZ2lkICJBZGQiCiBtc2dzdHIgIkhpbnp1ZsO8Z2VuIgogCkBAIC0yMTUxLDggKzIxOTUsNyBAQAogIzogbGliL3JlbW90ZV9hZGQudGNsOjE1NwogIywgdGNsLWZvcm1hdAogbXNnaWQgIkRvIG5vdCBrbm93IGhvdyB0byBpbml0aWFsaXplIHJlcG9zaXRvcnkgYXQgbG9jYXRpb24gJyVzJy4iCi1tc2dzdHIgIiIKLSJJbml0aWFsaXNpZXJlbiBlaW5lcyBhbmRlcmVuIEFyY2hpdnMgYW4gQWRyZXNzZSDCuyVzwqsgaXN0IG5pY2h0IG3DtmdsaWNoLiIKK21zZ3N0ciAiSW5pdGlhbGlzaWVyZW4gZWluZXMgYW5kZXJlbiBBcmNoaXZzIGFuIEFkcmVzc2Ugwrslc8KrIGlzdCBuaWNodCBtw7ZnbGljaC4iCiAKICM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNjMgbGliL3RyYW5zcG9ydC50Y2w6MjUgbGliL3RyYW5zcG9ydC50Y2w6NjMKICM6IGxpYi90cmFuc3BvcnQudGNsOjgxCkBAIC0yMTczLDExICsyMjE2LDExIEBACiBtc2dpZCAiRnJvbSBSZXBvc2l0b3J5IgogbXNnc3RyICJJbiBQcm9qZWt0YXJjaGl2IgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjUwIGxpYi90cmFuc3BvcnQudGNsOjEyMworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo1MCBsaWIvdHJhbnNwb3J0LnRjbDoxMzQKIG1zZ2lkICJSZW1vdGU6IgogbXNnc3RyICJBbmRlcmVzIEFyY2hpdjoiCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NjYgbGliL3RyYW5zcG9ydC50Y2w6MTM4CisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjY2IGxpYi90cmFuc3BvcnQudGNsOjE0OQogbXNnaWQgIkFyYml0cmFyeSBMb2NhdGlvbjoiCiBtc2dzdHIgIkFkcmVzc2U6IgogCkBAIC0yMTkzLDEwICsyMjM2LDYgQEAKIG1zZ2lkICJNZXJnZWQgSW50bzoiCiBtc2dzdHIgIlp1c2FtbWVuZ2Vmw7xocnQgbWl0OiIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTkKLW1zZ2lkICJBbHdheXMgKERvIG5vdCBwZXJmb3JtIG1lcmdlIGNoZWNrcykiCi1tc2dzdHIgIkltbWVyIChLZWluZSBadXNhbW1lbmbDvGhydW5nc3Byw7xmdW5nKSIKLQogIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxNTIKIG1zZ2lkICJBIGJyYW5jaCBpcyByZXF1aXJlZCBmb3IgJ01lcmdlZCBJbnRvJy4iCiBtc2dzdHIgIkbDvHIgwrtadXNhbW1lbmbDvGhyZW4gbWl0wqsgbXVzcyBlaW4gWndlaWcgYW5nZWdlYmVuIHdlcmRlbi4iCkBAIC0yMjI2LDI3ICsyMjY1LDE2IEBACiBtc2dpZCAiUGxlYXNlIHNlbGVjdCBvbmUgb3IgbW9yZSBicmFuY2hlcyB0byBkZWxldGUuIgogbXNnc3RyICJCaXR0ZSB3w6RobGVuIFNpZSBtaW5kZXN0ZW5zIGVpbmVuIFp3ZWlnLCBkZXIgZ2Vsw7ZzY2h0IHdlcmRlbiBzb2xsLiIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMTYKLW1zZ2lkICIiCi0iUmVjb3ZlcmluZyBkZWxldGVkIGJyYW5jaGVzIGlzIGRpZmZpY3VsdC5cbiIKLSJcbiIKLSJEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyIKLW1zZ3N0ciAiIgotIkRhcyBXaWVkZXJoZXJzdGVsbGVuIHZvbiBnZWzDtnNjaHRlbiBad2VpZ2VuIGlzdCBudXIgbWl0IGdyw7bDn2VyZW0gQXVmd2FuZCAiCi0ibcO2Z2xpY2guXG4iCi0iXG4iCi0iU29sbGVuIGRpZSBhdXNnZXfDpGhsdGVuIFp3ZWlnZSBnZWzDtnNjaHQgd2VyZGVuPyIKLQogIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMjYKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJEZWxldGluZyBicmFuY2hlcyBmcm9tICVzIgogbXNnc3RyICJad2VpZ2UgYXVmIMK7JXPCqyB3ZXJkZW4gZ2Vsw7ZzY2h0IgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI4NgorIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOTIKIG1zZ2lkICJObyByZXBvc2l0b3J5IHNlbGVjdGVkLiIKIG1zZ3N0ciAiS2VpbiBQcm9qZWt0YXJjaGl2IGF1c2dld8OkaGx0LiIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOTEKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6Mjk3CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiU2Nhbm5pbmcgJXMuLi4iCiBtc2dzdHIgIsK7JXPCqyBsYWRlbi4uLiIKQEAgLTIyNTksMTEgKzIyODcsMTEgQEAKIG1zZ2lkICJQcnVuZSBmcm9tIgogbXNnc3RyICJBdWZyw6R1bWVuIHZvbiIKIAotIzogbGliL3JlbW90ZS50Y2w6MTcwCisjOiBsaWIvcmVtb3RlLnRjbDoxNzMKIG1zZ2lkICJGZXRjaCBmcm9tIgogbXNnc3RyICJBbmZvcmRlcm4gdm9uIgogCi0jOiBsaWIvcmVtb3RlLnRjbDoyMTMKKyM6IGxpYi9yZW1vdGUudGNsOjIxNQogbXNnaWQgIlB1c2ggdG8iCiBtc2dzdHIgIlZlcnNlbmRlbiBuYWNoIgogCkBAIC0yMjcxLDExICsyMjk5LDExIEBACiBtc2dpZCAiRmluZDoiCiBtc2dzdHIgIlN1Y2hlbjoiCiAKLSM6IGxpYi9zZWFyY2gudGNsOjIyCisjOiBsaWIvc2VhcmNoLnRjbDoyMwogbXNnaWQgIk5leHQiCiBtc2dzdHIgIk7DpGNoc3RlciIKIAotIzogbGliL3NlYXJjaC50Y2w6MjMKKyM6IGxpYi9zZWFyY2gudGNsOjI0CiBtc2dpZCAiUHJldiIKIG1zZ3N0ciAiVm9yaWdlciIKIApAQCAtMjI4MywxMSArMjMxMSwxMSBAQAogbXNnaWQgIkNhc2UtU2Vuc2l0aXZlIgogbXNnc3RyICJHcm/Dny0vS2xlaW5zY2hyZWlidW5nIHVudGVyc2NoZWlkZW4iCiAKLSM6IGxpYi9zaG9ydGN1dC50Y2w6MjAgbGliL3Nob3J0Y3V0LnRjbDo2MQorIzogbGliL3Nob3J0Y3V0LnRjbDoyMSBsaWIvc2hvcnRjdXQudGNsOjYyCiBtc2dpZCAiQ2Fubm90IHdyaXRlIHNob3J0Y3V0OiIKIG1zZ3N0ciAiRmVobGVyIGJlaW0gU2NocmVpYmVuIGRlciBWZXJrbsO8cGZ1bmc6IgogCi0jOiBsaWIvc2hvcnRjdXQudGNsOjEzNgorIzogbGliL3Nob3J0Y3V0LnRjbDoxMzcKIG1zZ2lkICJDYW5ub3Qgd3JpdGUgaWNvbjoiCiBtc2dzdHIgIkZlaGxlciBiZWltIEVyc3RlbGxlbiBkZXMgSWNvbnM6IgogCkBAIC0yMzE2LDE1ICsyMzQ0LDE1IEBACiBtc2dpZCAiVW5yZWNvZ25pemVkIHNwZWxsIGNoZWNrZXIiCiBtc2dzdHIgIlVuYmVrYW5udGVzIFJlY2h0c2NocmVpYnByw7xmdW5nc3Byb2dyYW1tIgogCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6MTgwCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6MTg2CiBtc2dpZCAiTm8gU3VnZ2VzdGlvbnMiCiBtc2dzdHIgIktlaW5lIFZvcnNjaGzDpGdlIgogCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6MzgxCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6Mzg4CiBtc2dpZCAiVW5leHBlY3RlZCBFT0YgZnJvbSBzcGVsbCBjaGVja2VyIgogbXNnc3RyICJVbmVyd2FydGV0ZXMgRU9GIHZvbSBSZWNodHNjaHJlaWJwcsO8ZnVuZ3Nwcm9ncmFtbSIKIAotIzogbGliL3NwZWxsY2hlY2sudGNsOjM4NQorIzogbGliL3NwZWxsY2hlY2sudGNsOjM5MgogbXNnaWQgIlNwZWxsIENoZWNrZXIgRmFpbGVkIgogbXNnc3RyICJSZWNodHNjaHJlaWJwcsO8ZnVuZyBmZWhsZ2VzY2hsYWdlbiIKIApAQCAtMjUzNCwzMSArMjU2MiwzMSBAQAogbXNnaWQgIlB1c2hpbmcgJXMgJXMgdG8gJXMiCiBtc2dzdHIgIiVzICVzIG5hY2ggJXMgdmVyc2VuZGVuIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDo4OQorIzogbGliL3RyYW5zcG9ydC50Y2w6MTAwCiBtc2dpZCAiUHVzaCBCcmFuY2hlcyIKIG1zZ3N0ciAiWndlaWdlIHZlcnNlbmRlbiIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTAzCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMTQKIG1zZ2lkICJTb3VyY2UgQnJhbmNoZXMiCiBtc2dzdHIgIkxva2FsZSBad2VpZ2UiCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjEyMAorIzogbGliL3RyYW5zcG9ydC50Y2w6MTMxCiBtc2dpZCAiRGVzdGluYXRpb24gUmVwb3NpdG9yeSIKIG1zZ3N0ciAiWmllbC1Qcm9qZWt0YXJjaGl2IgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNTgKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE2OQogbXNnaWQgIlRyYW5zZmVyIE9wdGlvbnMiCiBtc2dzdHIgIk5ldHp3ZXJrLUVpbnN0ZWxsdW5nZW4iCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjE2MAorIzogbGliL3RyYW5zcG9ydC50Y2w6MTcxCiBtc2dpZCAiRm9yY2Ugb3ZlcndyaXRlIGV4aXN0aW5nIGJyYW5jaCAobWF5IGRpc2NhcmQgY2hhbmdlcykiCiBtc2dzdHIgIiIKICLDnGJlcnNjaHJlaWJlbiB2b24gZXhpc3RpZXJlbmRlbiBad2VpZ2VuIGVyendpbmdlbiAoa8O2bm50ZSDDhG5kZXJ1bmdlbiBsw7ZzY2hlbikiCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjE2NAorIzogbGliL3RyYW5zcG9ydC50Y2w6MTc1CiBtc2dpZCAiVXNlIHRoaW4gcGFjayAoZm9yIHNsb3cgbmV0d29yayBjb25uZWN0aW9ucykiCiBtc2dzdHIgIktvbXBha3RlcyBEYXRlbmZvcm1hdCBiZW51dHplbiAoZsO8ciBsYW5nc2FtZSBOZXR6dmVyYmluZHVuZ2VuKSIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTY4CisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNzkKIG1zZ2lkICJJbmNsdWRlIHRhZ3MiCiBtc2dzdHIgIk1pdCBNYXJraWVydW5nZW4gw7xiZXJ0cmFnZW4iCmRpZmYgLS1naXQgYS9naXQtZ3VpL3BvL2VsLnBvIGIvZ2l0LWd1aS9wby9lbC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjM0YmE0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9wby9lbC5wbwpAQCAtMCwwICsxLDIwMDUgQEAKKyMgVHJhbnNsYXRpb24gb2YgZ2l0LWd1aSB0byBHcmVlaworIyBDb3B5cmlnaHQgKEMpIDIwMDkgSmltbXkgQW5nZWxha29zCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXQtZ3VpIHBhY2thZ2UuCisjIEppbW15IEFuZ2VsYWtvcyA8dnlydXNzQGhlbGx1Zy5ncj4sIDIwMDkuCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBlbFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwOC0wMy0xNCAwNzoxOCswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOS0wNi0yMyAyMTozMyswMzAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBKaW1teSBBbmdlbGFrb3MgPHZ5cnVzc0BoZWxsdWcuZ3I+XG4iCisiTGFuZ3VhZ2UtVGVhbTogR3JlZWsgPGkxOG5AbGlzdHMuaGVsbHVnLmdyPlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlgtR2VuZXJhdG9yOiBMb2thbGl6ZSAwLjNcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKworIzogZ2l0LWd1aS5zaDo0MSBnaXQtZ3VpLnNoOjYzNCBnaXQtZ3VpLnNoOjY0OCBnaXQtZ3VpLnNoOjY2MSBnaXQtZ3VpLnNoOjc0NAorIzogZ2l0LWd1aS5zaDo3NjMKK21zZ2lkICJnaXQtZ3VpOiBmYXRhbCBlcnJvciIKK21zZ3N0ciAiZ2l0LWd1aTogzrrPgc6vz4POuc68zr8gz4PPhs6szrvOvM6xIgorCisjOiBnaXQtZ3VpLnNoOjU5MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZm9udCBzcGVjaWZpZWQgaW4gJXM6IgorbXNnc3RyICLOnM63IM6tzrPOus+Fz4HOtyDOs8+BzrHOvM68zrHPhM6/z4POtc65z4HOrCDPg8+Ezr8gJXM6IgorCisjOiBnaXQtZ3VpLnNoOjYyMAorbXNnaWQgIk1haW4gRm9udCIKK21zZ3N0ciAizprPjc+BzrnOsSDOk8+BzrHOvM68zrHPhM6/z4POtc65z4HOrCIKKworIzogZ2l0LWd1aS5zaDo2MjEKK21zZ2lkICJEaWZmL0NvbnNvbGUgRm9udCIKK21zZ3N0ciAizpPPgc6xzrzOvM6xz4TOv8+DzrXOuc+BzqwgzpTOuc6xz4bOv8+BzqzPgi/Oms6/zr3Pg8+MzrvOsc+CIgorCisjOiBnaXQtZ3VpLnNoOjYzNQorbXNnaWQgIkNhbm5vdCBmaW5kIGdpdCBpbiBQQVRILiIKK21zZ3N0ciAizpTOtSDOss+Bzq3OuM63zrrOtSDPhM6/IGdpdCDPg8+Ezr8gUEFUSC4iCisKKyM6IGdpdC1ndWkuc2g6NjYyCittc2dpZCAiQ2Fubm90IHBhcnNlIEdpdCB2ZXJzaW9uIHN0cmluZzoiCittc2dzdHIgIs6RzrTPjc69zrHPhM63IM63IM6xzr3OrM6zzr3Pic+Dzrcgz4PPhM6/zrnPh861zrnOv8+DzrXOuc+BzqzPgiDOrc66zrTOv8+DzrfPgiBHaXQ6IgorCisjOiBnaXQtZ3VpLnNoOjY4MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJHaXQgdmVyc2lvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiIKKyJcbiIKKyIlcyBjbGFpbXMgaXQgaXMgdmVyc2lvbiAnJXMnLlxuIgorIlxuIgorIiVzIHJlcXVpcmVzIGF0IGxlYXN0IEdpdCAxLjUuMCBvciBsYXRlci5cbiIKKyJcbiIKKyJBc3N1bWUgJyVzJyBpcyB2ZXJzaW9uIDEuNS4wP1xuIgorbXNnc3RyICIiCisizpTOtSDOvM+Azr/Pgc61zq8gzr3OsSDOsc69zrnPh869zrXPhc+EzrXOryDOtyDOrc66zrTOv8+Dzrcgz4TOv8+FIEdpdC4gXG4iCisiXG4iCisizqTOvyAlcyDPhc+Azr/Pg8+EzrfPgc6vzrbOtc65IM+Az4nPgiDOtc6vzr3Osc65IM63IM6tzrrOtM6/z4POtyAnJXMnLlxuIgorIlxuIgorIs6kzr8gJXMgIM6xz4DOsc65z4TOtc6vIM+Ezr/Phc67zqzPh865z4PPhM6/zr0gR2l0IDEuNS4wIM6uIM+AzrnPjCDPgM+Bz4zPg8+GzrHPhM63LlxuIgorIlxuIgorIs6dzrEgz4XPgM6/z4TOtc64zrXOryDPgM+Jz4Igz4TOvyAnJXMnIM61zq/Ovc6xzrkgzrcgzq3Ous60zr/Pg863IDEuNS4wO1xuIgorCisjOiBnaXQtZ3VpLnNoOjkxOAorbXNnaWQgIkdpdCBkaXJlY3Rvcnkgbm90IGZvdW5kOiIKK21zZ3N0ciAizpTOtSDOss+Bzq3OuM63zrrOtSDPhs6szrrOtc67zr/PgiBHaXQ6IgorCisjOiBnaXQtZ3VpLnNoOjkyNQorbXNnaWQgIkNhbm5vdCBtb3ZlIHRvIHRvcCBvZiB3b3JraW5nIGRpcmVjdG9yeToiCittc2dzdHIgIs6UzrXOvSDOtc6vzr3Osc65IM60z4XOvc6xz4TOriDOtyDOvM61z4TOsc66zq/Ovc63z4POtyDPg8+EzrfOvSDOus6/z4HPhc+Gzq4gz4TOv8+FIM+GzrHOus6tzrvOv8+FIM61z4HOs86xz4POr86xz4I6IgorCisjOiBnaXQtZ3VpLnNoOjkzMgorbXNnaWQgIkNhbm5vdCB1c2UgZnVubnkgLmdpdCBkaXJlY3Rvcnk6IgorbXNnc3RyICLOlM61zr0gzrXOr869zrHOuSDOtM+Fzr3Osc+Ezq4gzrcgz4fPgc6uz4POtyDPgM61z4HOr861z4HOs86/z4Ugz4bOsc66zq3Ou86/z4UgLmdpdDoiCisKKyM6IGdpdC1ndWkuc2g6OTM3Cittc2dpZCAiTm8gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIs6UzrXOvSDPhc+AzqzPgc+HzrXOuSDPhs6szrrOtc67zr/PgiDOtc+BzrPOsc+Dzq/Osc+CIgorCisjOiBnaXQtZ3VpLnNoOjEwODQgbGliL2NoZWNrb3V0X29wLnRjbDoyODMKK21zZ2lkICJSZWZyZXNoaW5nIGZpbGUgc3RhdHVzLi4uIgorbXNnc3RyICLOkc69zrHOvc6tz4nPg863IM66zrHPhM6sz4PPhM6xz4POt8+CIM6xz4HPh861zq/Ov8+FLi4uIgorCisjOiBnaXQtZ3VpLnNoOjExNDkKK21zZ2lkICJTY2FubmluZyBmb3IgbW9kaWZpZWQgZmlsZXMgLi4uIgorbXNnc3RyICLOkc69zq/Ph869zrXPhc+DzrcgzrPOuc6xIM+Ez4HOv8+Azr/PgM6/zrnOt868zq3Ovc6xIM6xz4HPh861zq/OsS4uLiIKKworIzogZ2l0LWd1aS5zaDoxMzI0IGxpYi9icm93c2VyLnRjbDoyNDYKK21zZ2lkICJSZWFkeS4iCittc2dzdHIgIs6Iz4TOv865zrzOvy4iCisKKyM6IGdpdC1ndWkuc2g6MTU5MAorbXNnaWQgIlVubW9kaWZpZWQiCittc2dzdHIgIs6czrcgz4TPgc6/z4DOv8+Azr/Ouc63zrzOrc69zr8iCisKKyM6IGdpdC1ndWkuc2g6MTU5MgorbXNnaWQgIk1vZGlmaWVkLCBub3Qgc3RhZ2VkIgorbXNnc3RyICLOpM+Bzr/PgM6/z4DOv865zrfOvM6tzr3OvywgzrzOtyDPg8+EzrHOtM65zr/PgM6/zrnOt868zq3Ovc6/IgorCisjOiBnaXQtZ3VpLnNoOjE1OTMgZ2l0LWd1aS5zaDoxNTk4Cittc2dpZCAiU3RhZ2VkIGZvciBjb21taXQiCittc2dzdHIgIs6jz4TOsc60zrnOv8+Azr/Ouc63zrzOrc69zr8gz4DPgc6/z4Igz4XPgM6/zrLOv867zq4iCisKKyM6IGdpdC1ndWkuc2g6MTU5NCBnaXQtZ3VpLnNoOjE1OTkKK21zZ2lkICJQb3J0aW9ucyBzdGFnZWQgZm9yIGNvbW1pdCIKK21zZ3N0ciAizpzOrc+Bzrcgz4PPhM6xzrTOuc6/z4DOv865zrfOvM6tzr3OsSDPgM+Bzr/PgiDPhc+Azr/Oss6/zrvOriIKKworIzogZ2l0LWd1aS5zaDoxNTk1IGdpdC1ndWkuc2g6MTYwMAorbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0LCBtaXNzaW5nIgorbXNnc3RyICLOo8+EzrHOtM65zr/PgM6/zrnOt868zq3Ovc6/IM+Az4HOv8+CIM+Fz4DOv86yzr/Ou86uLCDOu861zq/PgM61zrkiCisKKyM6IGdpdC1ndWkuc2g6MTU5NworbXNnaWQgIlVudHJhY2tlZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAizpzOtyDPgM6xz4HOsc66zr/Ou86/z4XOuM6/z43OvM61zr3OvywgzrzOtyDPg8+EzrHOtM65zr/PgM6/zrnOt868zq3Ovc6/IgorCisjOiBnaXQtZ3VpLnNoOjE2MDIKK21zZ2lkICJNaXNzaW5nIgorbXNnc3RyICLOm861zq/PgM61zrkiCisKKyM6IGdpdC1ndWkuc2g6MTYwMworbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCIKK21zZ3N0ciAizqPPhM6xzrTOuc6/z4DOv865zrfOvM6tzr3OvyDPgM+Bzr/PgiDOsc+GzrHOr8+BzrXPg863IgorCisjOiBnaXQtZ3VpLnNoOjE2MDQKK21zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwsIHN0aWxsIHByZXNlbnQiCittc2dzdHIgIs6jz4TOsc60zrnOv8+Azr/Ouc63zrzOrc69zr8gz4DPgc6/z4IgzrHPhs6xzq/Pgc61z4POtywgzrHOus+MzrzOsSDPgM6xz4HPjM69IgorCisjOiBnaXQtZ3VpLnNoOjE2MDYgZ2l0LWd1aS5zaDoxNjA3IGdpdC1ndWkuc2g6MTYwOCBnaXQtZ3VpLnNoOjE2MDkKK21zZ2lkICJSZXF1aXJlcyBtZXJnZSByZXNvbHV0aW9uIgorbXNnc3RyICLOkc+AzrHOuc+EzrXOryDOtc+Azq/Ou8+Fz4POtyDPg8+FzrPPh8+Ozr3Otc+Fz4POt8+CIgorCisjOiBnaXQtZ3VpLnNoOjE2NDQKK21zZ2lkICJTdGFydGluZyBnaXRrLi4uIHBsZWFzZSB3YWl0Li4uIgorbXNnc3RyICLOk86vzr3Otc+EzrHOuSDOtc66zrrOr869zrfPg863IM+Ezr/PhSBnaXRrLi4uIM+AzrHPgc6xzrrOsc67z44gz4DOtc+BzrnOvM6tzr3Otc+EzrUuLi4iCisKKyM6IGdpdC1ndWkuc2g6MTY1MworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJVbmFibGUgdG8gc3RhcnQgZ2l0azpcbiIKKyJcbiIKKyIlcyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiIgorIs6RzrTPhc69zrHOvM6vzrEgzrXOus66zq/Ovc63z4POt8+CIM+Ezr/PhSBnaXRrOlxuIgorIlxuIgorIs6kzr8gJXMgzrTOtc69IM+Fz4DOrM+Bz4fOtc65IgorCisjOiBnaXQtZ3VpLnNoOjE4NjAgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozNgorbXNnaWQgIlJlcG9zaXRvcnkiCittc2dzdHIgIs6Rz4DOv864zrXPhM6uz4HOuc6/IgorCisjOiBnaXQtZ3VpLnNoOjE4NjEKK21zZ2lkICJFZGl0IgorbXNnc3RyICLOlc+AzrXOvs61z4HOs86xz4POr86xIgorCisjOiBnaXQtZ3VpLnNoOjE4NjMgbGliL2Nob29zZV9yZXYudGNsOjU2MQorbXNnaWQgIkJyYW5jaCIKK21zZ3N0ciAizprOu86szrTOv8+CIgorCisjOiBnaXQtZ3VpLnNoOjE4NjYgbGliL2Nob29zZV9yZXYudGNsOjU0OAorbXNnaWQgIkNvbW1pdEBAbm91biIKK21zZ3N0ciAizqXPgM6/zrLOv867zq5AQG5vdW4iCisKKyM6IGdpdC1ndWkuc2g6MTg2OSBsaWIvbWVyZ2UudGNsOjEyMCBsaWIvbWVyZ2UudGNsOjE0OSBsaWIvbWVyZ2UudGNsOjE2NworbXNnaWQgIk1lcmdlIgorbXNnc3RyICLOo8+FzrPPh8+Ozr3Otc+Fz4POtyIKKworIzogZ2l0LWd1aS5zaDoxODcwIGxpYi9jaG9vc2VfcmV2LnRjbDo1NTcKK21zZ2lkICJSZW1vdGUiCittc2dzdHIgIs6Rz4DOv868zrHOus+Bz4XPg868zq3Ovc6/IgorCisjOiBnaXQtZ3VpLnNoOjE4NzkKK21zZ2lkICJCcm93c2UgQ3VycmVudCBCcmFuY2gncyBGaWxlcyIKK21zZ3N0ciAizqDOtc+BzrnOrs6zzrfPg863IM6Rz4HPh861zq/Pic69IM6kz4HOrc+Hzr/Ovc+EzrEgzprOu86szrTOv8+FIgorCisjOiBnaXQtZ3VpLnNoOjE4ODMKK21zZ2lkICJCcm93c2UgQnJhbmNoIEZpbGVzLi4uIgorbXNnc3RyICLOoM61z4HOuc6uzrPOt8+DzrcgzpHPgc+HzrXOr8+Jzr0gzprOu86szrTOv8+FLi4uIgorCisjOiBnaXQtZ3VpLnNoOjE4ODgKK21zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2gncyBIaXN0b3J5IgorbXNnc3RyICLOkc+AzrXOuc66z4zOvc65z4POtyDOmc+Dz4TOv8+BzrnOus6/z40gzqTPgc6tz4fOv869z4TOsSDOms67zqzOtM6/z4UiCisKKyM6IGdpdC1ndWkuc2g6MTg5MgorbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkiCittc2dzdHIgIs6Rz4DOtc65zrrPjM69zrnPg863IM6Zz4PPhM6/z4HOuc66zr/PjSDOjM67z4nOvSDPhM+Jzr0gzprOu86szrTPic69IgorCisjOiBnaXQtZ3VpLnNoOjE4OTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcm93c2UgJXMncyBGaWxlcyIKK21zZ3N0ciAizqDOtc+BzrnOrs6zzrfPg863IM6Rz4HPh861zq/Pic69IM+Ezr/PhSAlcyIKKworIzogZ2l0LWd1aS5zaDoxOTAxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVmlzdWFsaXplICVzJ3MgSGlzdG9yeSIKK21zZ3N0ciAizpHPgM61zrnOus+Mzr3Ouc+DzrcgzpnPg8+Ezr/Pgc65zrrOv8+NIM+Ezr/PhSAlcyIKKworIzogZ2l0LWd1aS5zaDoxOTA2IGxpYi9kYXRhYmFzZS50Y2w6MjcgbGliL2RhdGFiYXNlLnRjbDo2NworbXNnaWQgIkRhdGFiYXNlIFN0YXRpc3RpY3MiCittc2dzdHIgIs6jz4TOsc+EzrnPg8+EzrnOus6sIM6SzqzPg863z4IgzpTOtc60zr/OvM6tzr3Pic69IgorCisjOiBnaXQtZ3VpLnNoOjE5MDkgbGliL2RhdGFiYXNlLnRjbDozNAorbXNnaWQgIkNvbXByZXNzIERhdGFiYXNlIgorbXNnc3RyICLOo8+FzrzPgM6vzrXPg863IM6SzqzPg863z4IgzpTOtc60zr/OvM6tzr3Pic69IgorCisjOiBnaXQtZ3VpLnNoOjE5MTIKK21zZ2lkICJWZXJpZnkgRGF0YWJhc2UiCittc2dzdHIgIs6Vz4DOsc67zq7OuM61z4XPg863IM6SzqzPg863z4IgzpTOtc60zr/OvM6tzr3Pic69IgorCisjOiBnaXQtZ3VpLnNoOjE5MTkgZ2l0LWd1aS5zaDoxOTIzIGdpdC1ndWkuc2g6MTkyNyBsaWIvc2hvcnRjdXQudGNsOjcKKyM6IGxpYi9zaG9ydGN1dC50Y2w6MzkgbGliL3Nob3J0Y3V0LnRjbDo3MQorbXNnaWQgIkNyZWF0ZSBEZXNrdG9wIEljb24iCittc2dzdHIgIs6UzrfOvM65zr/Phc+BzrPOr86xIM6VzrnOus6/zr3Ouc60zq/Ov8+FIM6Vz4DOuc+GzqzOvc61zrnOsc+CIM6Vz4HOs86xz4POr86xz4IiCisKKyM6IGdpdC1ndWkuc2g6MTkzMiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE3NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE4NQorbXNnaWQgIlF1aXQiCittc2dzdHIgIs6Izr7Ov860zr/PgiIKKworIzogZ2l0LWd1aS5zaDoxOTM5Cittc2dpZCAiVW5kbyIKK21zZ3N0ciAizpHOvc6xzq/Pgc61z4POtyIKKworIzogZ2l0LWd1aS5zaDoxOTQyCittc2dpZCAiUmVkbyIKK21zZ3N0ciAizp7Osc69zqwiCisKKyM6IGdpdC1ndWkuc2g6MTk0NiBnaXQtZ3VpLnNoOjI0NDMKK21zZ2lkICJDdXQiCittc2dzdHIgIs6Rz4DOv866zr/PgM6uIgorCisjOiBnaXQtZ3VpLnNoOjE5NDkgZ2l0LWd1aS5zaDoyNDQ2IGdpdC1ndWkuc2g6MjUyMCBnaXQtZ3VpLnNoOjI2MTQKKyM6IGxpYi9jb25zb2xlLnRjbDo2OQorbXNnaWQgIkNvcHkiCittc2dzdHIgIs6Rzr3PhM65zrPPgc6xz4bOriIKKworIzogZ2l0LWd1aS5zaDoxOTUyIGdpdC1ndWkuc2g6MjQ0OQorbXNnaWQgIlBhc3RlIgorbXNnc3RyICLOlc+AzrnOus+MzrvOu863z4POtyIKKworIzogZ2l0LWd1aS5zaDoxOTU1IGdpdC1ndWkuc2g6MjQ1MiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjYKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzgKK21zZ2lkICJEZWxldGUiCittc2dzdHIgIs6UzrnOsc6zz4HOsc+Gzq4iCisKKyM6IGdpdC1ndWkuc2g6MTk1OSBnaXQtZ3VpLnNoOjI0NTYgZ2l0LWd1aS5zaDoyNjE4IGxpYi9jb25zb2xlLnRjbDo3MQorbXNnaWQgIlNlbGVjdCBBbGwiCittc2dzdHIgIs6Vz4DOuc67zr/Os86uIM6MzrvPic69IgorCisjOiBnaXQtZ3VpLnNoOjE5NjgKK21zZ2lkICJDcmVhdGUuLi4iCittc2dzdHIgIs6UzrfOvM65zr/Phc+BzrPOr86xLi4uIgorCisjOiBnaXQtZ3VpLnNoOjE5NzQKK21zZ2lkICJDaGVja291dC4uLiIKK21zZ3N0ciAizpXOvs6xzrPPic6zzq4uLi4iCisKKyM6IGdpdC1ndWkuc2g6MTk4MAorbXNnaWQgIlJlbmFtZS4uLiIKK21zZ3N0ciAizpzOtc+Ezr/Ovc6/zrzOsc+Dzq/OsS4uLiIKKworIzogZ2l0LWd1aS5zaDoxOTg1IGdpdC1ndWkuc2g6MjA4NQorbXNnaWQgIkRlbGV0ZS4uLiIKK21zZ3N0ciAizpTOuc6xzrPPgc6xz4bOri4uLiIKKworIzogZ2l0LWd1aS5zaDoxOTkwCittc2dpZCAiUmVzZXQuLi4iCittc2dzdHIgIs6Vz4DOsc69zrHPhs6/z4HOrC4uLiIKKworIzogZ2l0LWd1aS5zaDoyMDAyIGdpdC1ndWkuc2g6MjM4OQorbXNnaWQgIk5ldyBDb21taXQiCittc2dzdHIgIs6dzq3OsSDOpc+Azr/Oss6/zrvOriIKKworIzogZ2l0LWd1aS5zaDoyMDEwIGdpdC1ndWkuc2g6MjM5NgorbXNnaWQgIkFtZW5kIExhc3QgQ29tbWl0IgorbXNnc3RyICLOlM65z4zPgc64z4nPg863IM6kzrXOu861z4XPhM6xzq/Osc+CIM6lz4DOv86yzr/Ou86uz4IiCisKKyM6IGdpdC1ndWkuc2g6MjAxOSBnaXQtZ3VpLnNoOjIzNTYgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo5OQorbXNnaWQgIlJlc2NhbiIKK21zZ3N0ciAizpXPgM6xzr3Osc69zq/Ph869zrXPhc+DzrciCisKKyM6IGdpdC1ndWkuc2g6MjAyNQorbXNnaWQgIlN0YWdlIFRvIENvbW1pdCIKK21zZ3N0ciAizqPPhM6xzrTOuc6/z4DOv86vzrfPg863IM6gz4HOv8+CIM6lz4DOv86yzr/Ou86uIgorCisjOiBnaXQtZ3VpLnNoOjIwMzEKK21zZ2lkICJTdGFnZSBDaGFuZ2VkIEZpbGVzIFRvIENvbW1pdCIKK21zZ3N0ciAizqPPhM6xzrTOuc6/z4DOv86vzrfPg863IM6RzrvOu86xzrPOvM6tzr3Pic69IM6Rz4HPh861zq/Pic69IM6gz4HOv8+CIM6lz4DOv86yzr/Ou86uIgorCisjOiBnaXQtZ3VpLnNoOjIwMzcKK21zZ2lkICJVbnN0YWdlIEZyb20gQ29tbWl0IgorbXNnc3RyICLOkc+Azr/Pg8+EzrHOtM65zr/PgM6/zq/Ot8+DzrcgzpHPgM+MIM6lz4DOv86yzr/Ou86uIgorCisjOiBnaXQtZ3VpLnNoOjIwNDIgbGliL2luZGV4LnRjbDozOTUKK21zZ2lkICJSZXZlcnQgQ2hhbmdlcyIKK21zZ3N0ciAizpHOvc6xzq/Pgc61z4POtyDOkc67zrvOsc6zz47OvSIKKworIzogZ2l0LWd1aS5zaDoyMDQ5IGdpdC1ndWkuc2g6MjM2OCBnaXQtZ3VpLnNoOjI0NjcKK21zZ2lkICJTaWduIE9mZiIKK21zZ3N0ciAizpHPgM6/z4PPjc69zrTOtc+DzrciCisKKyM6IGdpdC1ndWkuc2g6MjA1MyBnaXQtZ3VpLnNoOjIzNzIKK21zZ2lkICJDb21taXRAQHZlcmIiCittc2dzdHIgIs6lz4DOv86yzr/Ou86uQEB2ZXJiIgorCisjOiBnaXQtZ3VpLnNoOjIwNjQKK21zZ2lkICJMb2NhbCBNZXJnZS4uLiIKK21zZ3N0ciAizqTOv8+AzrnOus6uIM6jz4XOs8+Hz47Ovc61z4XPg863Li4uIgorCisjOiBnaXQtZ3VpLnNoOjIwNjkKK21zZ2lkICJBYm9ydCBNZXJnZS4uLiIKK21zZ3N0ciAizpHOus+Nz4HPic+DzrcgzqPPhc6zz4fPjs69zrXPhc+DzrfPgi4uLiIKKworIzogZ2l0LWd1aS5zaDoyMDgxCittc2dpZCAiUHVzaC4uLiIKK21zZ3N0ciAizo/OuM63z4POty4uLiIKKworIzogZ2l0LWd1aS5zaDoyMDkyIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDEKKyMsIGZ1enp5Cittc2dpZCAiQXBwbGUiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyMDk1IGdpdC1ndWkuc2g6MjExNyBsaWIvYWJvdXQudGNsOjE0CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBYm91dCAlcyIKK21zZ3N0ciAizqDOtc+Bzq8gJXMiCisKKyM6IGdpdC1ndWkuc2g6MjA5OQorbXNnaWQgIlByZWZlcmVuY2VzLi4uIgorbXNnc3RyICLOoM+Bzr/PhM65zrzOrs+DzrXOuc+CLi4uIgorCisjOiBnaXQtZ3VpLnNoOjIxMDcgZ2l0LWd1aS5zaDoyNjM5Cittc2dpZCAiT3B0aW9ucy4uLiIKK21zZ3N0ciAizpXPgM65zrvOv86zzq3Pgi4uLiIKKworIzogZ2l0LWd1aS5zaDoyMTEzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDcKK21zZ2lkICJIZWxwIgorbXNnc3RyICLOks6/zq7OuM61zrnOsSIKKworIzogZ2l0LWd1aS5zaDoyMTU0Cittc2dpZCAiT25saW5lIERvY3VtZW50YXRpb24iCittc2dzdHIgIs6UzrnOsc60zrnOus+Ez4XOsc66zq4gzqTOtc66zrzOt8+Bzq/Pic+DzrciCisKKyM6IGdpdC1ndWkuc2g6MjIzOAorIywgdGNsLWZvcm1hdAorbXNnaWQgImZhdGFsOiBjYW5ub3Qgc3RhdCBwYXRoICVzOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IgorbXNnc3RyICLOus+Bzq/Pg865zrzOvzogzrTOtSDOss+Bzq3OuM63zrrOtSDOtyDOtM65zrHOtM+Bzr/OvM6uOiAlczogzpTOtc69IM+Fz4DOrM+Bz4fOtc65IM+Ezr8gzrHPgc+HzrXOr86/IM6uIM6/IM+GzqzOus61zrvOv8+CIgorCisjOiBnaXQtZ3VpLnNoOjIyNzEKK21zZ2lkICJDdXJyZW50IEJyYW5jaDoiCittc2dzdHIgIs6kz4HOrc+Hz4nOvSDOms67zqzOtM6/z4I6IgorCisjOiBnaXQtZ3VpLnNoOjIyOTIKK21zZ2lkICJTdGFnZWQgQ2hhbmdlcyAoV2lsbCBDb21taXQpIgorbXNnc3RyICLOo8+EzrHOtM65zr/PgM6/zrnOt868zq3Ovc61z4IgzpHOu867zrHOs86tz4IgKM6YzrEgzqXPgM6/zrLOu863zrjOv8+Nzr0pIgorCisjOiBnaXQtZ3VpLnNoOjIzMTIKK21zZ2lkICJVbnN0YWdlZCBDaGFuZ2VzIgorbXNnc3RyICLOnM63IM6jz4TOsc60zrnOv8+Azr/Ouc63zrzOrc69zrXPgiDOkc67zrvOsc6zzq3PgiIKKworIzogZ2l0LWd1aS5zaDoyMzYyCittc2dpZCAiU3RhZ2UgQ2hhbmdlZCIKK21zZ3N0ciAizqPPhM6xzrTOuc6/z4DOv86vzrfPg863IM6RzrvOu86xzrPPjs69IgorCisjOiBnaXQtZ3VpLnNoOjIzNzggbGliL3RyYW5zcG9ydC50Y2w6OTMgbGliL3RyYW5zcG9ydC50Y2w6MTgyCittc2dpZCAiUHVzaCIKK21zZ3N0ciAizo/OuM63z4POtyIKKworIzogZ2l0LWd1aS5zaDoyNDA4Cittc2dpZCAiSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIs6Rz4HPh865zrrPjCDOnM6uzr3Phc68zrEgzqXPgM6/zrLOv867zq7PgjoiCisKKyM6IGdpdC1ndWkuc2g6MjQwOQorbXNnaWQgIkFtZW5kZWQgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICLOlM65zr/Pgc64z4nOvM6tzr3OvyDOnM6uzr3Phc68zrEgzqXPgM6/zrLOv867zq7PgjoiCisKKyM6IGdpdC1ndWkuc2g6MjQxMAorbXNnaWQgIkFtZW5kZWQgSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIs6UzrnOv8+BzrjPic68zq3Ovc6/IM6Rz4HPh865zrrPjCDOnM6uzr3Phc68zrEgzqXPgM6/zrLOv867zq7PgjoiCisKKyM6IGdpdC1ndWkuc2g6MjQxMQorbXNnaWQgIkFtZW5kZWQgTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICLOlM65zr/Pgc64z4nOvM6tzr3OvyDOnM6uzr3Phc68zrEgzqXPgM6/zrLOv867zq7PgiDOo8+FzrPPh8+Ozr3Otc+Fz4POt8+COiIKKworIzogZ2l0LWd1aS5zaDoyNDEyCittc2dpZCAiTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICLOnM6uzr3Phc68zrEgzqXPgM6/zrLOv867zq7PgiDOo8+FzrPPh8+Ozr3Otc+Fz4POt8+COiIKKworIzogZ2l0LWd1aS5zaDoyNDEzCittc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICLOnM6uzr3Phc68zrEgzqXPgM6/zrLOv867zq7PgjoiCisKKyM6IGdpdC1ndWkuc2g6MjQ1OSBnaXQtZ3VpLnNoOjI2MjIgbGliL2NvbnNvbGUudGNsOjczCittc2dpZCAiQ29weSBBbGwiCittc2dzdHIgIs6Rzr3PhM65zrPPgc6xz4bOriDOjM67z4nOvSIKKworIzogZ2l0LWd1aS5zaDoyNDgzIGxpYi9ibGFtZS50Y2w6MTA3Cittc2dpZCAiRmlsZToiCittc2dzdHIgIs6Rz4HPh861zq/OvzoiCisKKyM6IGdpdC1ndWkuc2g6MjU4OQorbXNnaWQgIkFwcGx5L1JldmVyc2UgSHVuayIKK21zZ3N0ciAizpXPhs6xz4HOvM6/zrPOri/Okc69z4TOuc+Dz4TPgc6/z4bOriDOms6/zrzOvM6xz4TOuc6/z40iCisKKyM6IGdpdC1ndWkuc2g6MjU5NQorbXNnaWQgIlNob3cgTGVzcyBDb250ZXh0IgorbXNnc3RyICLOoM+Bzr/Oss6/zrvOriDOo8+EzrXOvc+Mz4TOtc+Bzr/PhSDOoM67zrHOuc+Dzq/Ov8+FIgorCisjOiBnaXQtZ3VpLnNoOjI2MDIKK21zZ2lkICJTaG93IE1vcmUgQ29udGV4dCIKK21zZ3N0ciAizqDPgc6/zrLOv867zq4gzpXPhc+Bz43PhM61z4HOv8+FIM6gzrvOsc65z4POr86/z4UiCisKKyM6IGdpdC1ndWkuc2g6MjYxMAorbXNnaWQgIlJlZnJlc2giCittc2dzdHIgIs6Rzr3Osc69zq3Pic+DzrciCisKKyM6IGdpdC1ndWkuc2g6MjYzMQorbXNnaWQgIkRlY3JlYXNlIEZvbnQgU2l6ZSIKK21zZ3N0ciAizpzOtc6vz4nPg863IM6czrXOs86tzrjOv8+Fz4IgzpPPgc6xzrzOvM6xz4TOv8+DzrXOuc+BzqzPgiIKKworIzogZ2l0LWd1aS5zaDoyNjM1Cittc2dpZCAiSW5jcmVhc2UgRm9udCBTaXplIgorbXNnc3RyICLOkc+Nzr7Ot8+DzrcgzpzOtc6zzq3OuM6/z4XPgiDOk8+BzrHOvM68zrHPhM6/z4POtc65z4HOrM+CIgorCisjOiBnaXQtZ3VpLnNoOjI2NDYKK21zZ2lkICJVbnN0YWdlIEh1bmsgRnJvbSBDb21taXQiCittc2dzdHIgIs6Rz4DOv8+Dz4TOsc60zrnOv8+Azr/Or863z4POtyDOms6/zrzOvM6xz4TOuc6/z40gzpHPgM+MIM6lz4DOv86yzr/Ou86uIgorCisjOiBnaXQtZ3VpLnNoOjI2NDgKK21zZ2lkICJTdGFnZSBIdW5rIEZvciBDb21taXQiCittc2dzdHIgIs6jz4TOsc60zrnOv8+Azr/Or863z4POtyDOms6/zrzOvM6xz4TOuc6/z40gzqDPgc6/z4IgzqXPgM6/zrLOv867zq4iCisKKyM6IGdpdC1ndWkuc2g6MjY2NworbXNnaWQgIkluaXRpYWxpemluZy4uLiIKK21zZ3N0ciAizpPOr869zrXPhM6xzrkgzrHPgc+HzrnOus6/z4DOv86vzrfPg863Li4uIgorCisjOiBnaXQtZ3VpLnNoOjI3NjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiUG9zc2libGUgZW52aXJvbm1lbnQgaXNzdWVzIGV4aXN0LlxuIgorIlxuIgorIlRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBwcm9iYWJseVxuIgorImdvaW5nIHRvIGJlIGlnbm9yZWQgYnkgYW55IEdpdCBzdWJwcm9jZXNzIHJ1blxuIgorImJ5ICVzOlxuIgorIlxuIgorbXNnc3RyICIiCisizqXPgM6sz4HPh86/z4XOvSDPgM65zrjOsc69zqwgzrjOrc68zrHPhM6xIM68zrUgz4TOvyDPgM61z4HOuc6yzqzOu867zr/OvS5cbiIKKyJcbiIKKyLOn865IM61zr7Ors+CIM68zrXPhM6xzrLOu863z4TOrc+CIM+AzrXPgc65zrLOrM67zrvOv869z4TOv8+CIM68zqzOu867zr/OvSDOuM6xXG4iCisizrHOs869zr/Ot864zr/Pjc69IM6xz4DPjCDPgM65zrjOsc69zq4gzrXOus+Ezq3Ou861z4POtyDPhc+Azr/OtM65zrXPgc6zzrHPg86vzrHPgiBHaXRcbiIKKyLOsc+Az4wgz4TOvyAlczpcbiIKKyJcbiIKKworIzogZ2l0LWd1aS5zaDoyNzkyCittc2dpZCAiIgorIlxuIgorIlRoaXMgaXMgZHVlIHRvIGEga25vd24gaXNzdWUgd2l0aCB0aGVcbiIKKyJUY2wgYmluYXJ5IGRpc3RyaWJ1dGVkIGJ5IEN5Z3dpbi4iCittc2dzdHIgIiIKKyJcbiIKKyLOkc+Fz4TPjCDOv8+GzrXOr867zrXPhM6xzrkgz4POtSDOrc69zrEgzrPOvc+Jz4PPhM+MIM64zq3OvM6xIM68zrUgz4TOv1xuIgorIs61zrrPhM61zrvOrc+DzrnOvM6/IFRjbCDPgM6/z4UgzrTOuc6xzr3Orc68zrXPhM6xzrkgzrzOtSDPhM6/IEN5Z3dpbi4iCisKKyM6IGdpdC1ndWkuc2g6Mjc5NworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJBIGdvb2QgcmVwbGFjZW1lbnQgZm9yICVzXG4iCisiaXMgcGxhY2luZyB2YWx1ZXMgZm9yIHRoZSB1c2VyLm5hbWUgYW5kXG4iCisidXNlci5lbWFpbCBzZXR0aW5ncyBpbnRvIHlvdXIgcGVyc29uYWxcbiIKKyJ+Ly5naXRjb25maWcgZmlsZS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIs6Izr3OsSDOus6xzrvPjCDPhc+Azr/Ous6xz4TOrM+Dz4TOsc+Ezr8gzrPOuc6xIM+Ezr8gJXNcbiIKKyLOtc6vzr3Osc65IM63IM+Ezr/PgM6/zrjOrc+EzrfPg863IM+EzrnOvM+Ozr0gzrPOuc6xIM+EzrnPgiDPgc+FzrjOvM6vz4POtc65z4JcbiIKKyJ1c2VyLm5hbWUgzrrOsc65IHVzZXIuZW1haWwgz4PPhM6/IM+Az4HOv8+Dz4nPgM65zrrPjCDPg86xz4JcbiIKKyLOsc+Bz4fOtc6vzr8gfi8uZ2l0Y29uZmlnIC5cbiIKKworIzogbGliL2Fib3V0LnRjbDoyNgorbXNnaWQgImdpdC1ndWkgLSBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBmb3IgR2l0LiIKK21zZ3N0ciAiZ2l0LWd1aSAtIM6tzr3OsSDOs8+BzrHPhs65zrrPjCDPgM61z4HOuc6yzqzOu867zr/OvSDOs865zrEgz4TOvyBHaXQuIgorCisjOiBsaWIvYmxhbWUudGNsOjc3Cittc2dpZCAiRmlsZSBWaWV3ZXIiCittc2dzdHIgIs6Vz4bOsc+BzrzOv86zzq4gzqDPgc6/zrLOv867zq7PgiDOkc+Bz4fOtc6vzr/PhSIKKworIzogbGliL2JsYW1lLnRjbDo4MQorbXNnaWQgIkNvbW1pdDoiCittc2dzdHIgIs6lz4DOv86yzr/Ou86uOiIKKworIzogbGliL2JsYW1lLnRjbDoyNjQKK21zZ2lkICJDb3B5IENvbW1pdCIKK21zZ3N0ciAizpHOvc+EzrnOs8+BzrHPhs6uIM6lz4DOv86yzr/Ou86uz4IiCisKKyM6IGxpYi9ibGFtZS50Y2w6Mzg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVhZGluZyAlcy4uLiIKK21zZ3N0ciAizpHOvc6szrPOvc+Jz4POtyAlcy4uLiIKKworIzogbGliL2JsYW1lLnRjbDo0ODgKK21zZ2lkICJMb2FkaW5nIGNvcHkvbW92ZSB0cmFja2luZyBhbm5vdGF0aW9ucy4uLiIKK21zZ3N0ciAizpPOr869zrXPhM6xzrkgz4bPjM+Bz4TPic+Dzrcgz4PPh86/zrvOr8+Jzr0gz4DOsc+BzrHOus6/zrvOv8+NzrjOt8+DzrfPgiDOsc69z4TOuc6zz4HOsc+Gzq7Pgi/OvM61z4TOsc66zq/Ovc63z4POt8+CLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjUwOAorbXNnaWQgImxpbmVzIGFubm90YXRlZCIKK21zZ3N0ciAizrPPgc6xzrzOvM6tz4Igz4PPh86/zrvOuc6xz4POvM6tzr3Otc+CIgorCisjOiBsaWIvYmxhbWUudGNsOjY4OQorbXNnaWQgIkxvYWRpbmcgb3JpZ2luYWwgbG9jYXRpb24gYW5ub3RhdGlvbnMuLi4iCittc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM+Gz4zPgc+Ez4nPg863IM+Dz4fOv867zq/Pic69IM6xz4HPh865zrrOrs+CIM+Ezr/PgM6/zrjOtc+Dzq/Osc+CLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjY5MgorbXNnaWQgIkFubm90YXRpb24gY29tcGxldGUuIgorbXNnc3RyICLOiM6zzrnOvc61IM6/zrvOv866zrvOrs+Bz4nPg863IM+Ezr/PhSDPg8+Hzr/Ou865zrHPg868zr/PjS4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NzQ2Cittc2dpZCAiTG9hZGluZyBhbm5vdGF0aW9uLi4uIgorbXNnc3RyICLOps+Mz4HPhM+Jz4POtyDPg8+Hzr/Ou86vzr/PhS4uLiIKKworIzogbGliL2JsYW1lLnRjbDo4MDIKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICLOlM63zrzOuc6/z4XPgc6zz4zPgjoiCisKKyM6IGxpYi9ibGFtZS50Y2w6ODA2Cittc2dpZCAiQ29tbWl0dGVyOiIKK21zZ3N0ciAizqXPgM6/zrLOv867zq3Osc+COiIKKworIzogbGliL2JsYW1lLnRjbDo4MTEKK21zZ2lkICJPcmlnaW5hbCBGaWxlOiIKK21zZ3N0ciAizpHPgc+HzrnOus+MIM6Rz4HPh861zq/OvzoiCisKKyM6IGxpYi9ibGFtZS50Y2w6OTI1Cittc2dpZCAiT3JpZ2luYWxseSBCeToiCittc2dzdHIgIs6Rz4HPh865zrrOrCDOkc+Az4w6IgorCisjOiBsaWIvYmxhbWUudGNsOjkzMQorbXNnaWQgIkluIEZpbGU6IgorbXNnc3RyICLOo8+Ezr8gzpHPgc+HzrXOr86/OiIKKworIzogbGliL2JsYW1lLnRjbDo5MzYKK21zZ2lkICJDb3BpZWQgT3IgTW92ZWQgSGVyZSBCeToiCittc2dzdHIgIs6Rzr3PhM65zrPPgc6sz4bOt866zrUgzq4gzpzOtc+EzrHOus65zr3Ors64zrfOus61IM6VzrTPjiDOkc+Az4w6IgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoxNCBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoxOQorbXNnaWQgIkNoZWNrb3V0IEJyYW5jaCIKK21zZ3N0ciAizpXOvs6xzrPPic6zzq4gzprOu86szrTOv8+FIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoyMworbXNnaWQgIkNoZWNrb3V0IgorbXNnc3RyICLOlc6+zrHOs8+JzrPOriIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjcgbGliL2JyYW5jaF9jcmVhdGUudGNsOjM1CisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzIgbGliL2JyYW5jaF9yZW5hbWUudGNsOjMwIGxpYi9icm93c2VyLnRjbDoyODIKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTIyIGxpYi9jaG9vc2VfZm9udC50Y2w6NDMgbGliL21lcmdlLnRjbDoxNzEKKyM6IGxpYi9vcHRpb24udGNsOjEwMyBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQyIGxpYi90cmFuc3BvcnQudGNsOjk3Cittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICLOkc66z43Pgc+Jz4POtyIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzIgbGliL2Jyb3dzZXIudGNsOjI4NworbXNnaWQgIlJldmlzaW9uIgorbXNnc3RyICLOkc69zrHOuM61z47Pgc63z4POtyIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzYgbGliL2JyYW5jaF9jcmVhdGUudGNsOjY5IGxpYi9vcHRpb24udGNsOjI0MgorbXNnaWQgIk9wdGlvbnMiCittc2dzdHIgIs6Vz4DOuc67zr/Os86tz4IiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM5IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5MgorbXNnaWQgIkZldGNoIFRyYWNraW5nIEJyYW5jaCIKK21zZ3N0ciAizpHOvc6szrrPhM63z4POtyDOms67zqzOtM6/z4UgzqDOsc+BzrHOus6/zrvOv8+NzrjOt8+DzrfPgiIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6NDQKK21zZ2lkICJEZXRhY2ggRnJvbSBMb2NhbCBCcmFuY2giCittc2dzdHIgIs6Rz4DOv866z4zOu867zrfPg863IM6Rz4DPjCDOpM6/z4DOuc66z4wgzprOu86szrTOvyIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjIyCittc2dpZCAiQ3JlYXRlIEJyYW5jaCIKK21zZ3N0ciAizpTOt868zrnOv8+Fz4HOs86vzrEgzprOu86szrTOv8+FIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MjcKK21zZ2lkICJDcmVhdGUgTmV3IEJyYW5jaCIKK21zZ3N0ciAizpTOt868zrnOv8+Fz4HOs86vzrEgzp3Orc6/z4UgzprOu86szrTOv8+FIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozNzEKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIs6UzrfOvM65zr/Phc+BzrPOr86xIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDAKK21zZ2lkICJCcmFuY2ggTmFtZSIKK21zZ3N0ciAizozOvc6/zrzOsSDOms67zqzOtM6/z4UiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0MworbXNnaWQgIk5hbWU6IgorbXNnc3RyICLOjM69zr/OvM6xOiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjU4Cittc2dpZCAiTWF0Y2ggVHJhY2tpbmcgQnJhbmNoIE5hbWUiCittc2dzdHIgIs6jz4XOvM+Gz4nOvc6vzrEgzp/Ovc+MzrzOsc+Ezr/PgiDOms67zqzOtM6/z4UgzqDOsc+BzrHOus6/zrvOv8+NzrjOt8+DzrfPgiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjY2Cittc2dpZCAiU3RhcnRpbmcgUmV2aXNpb24iCittc2dzdHIgIs6Rz4HPh865zrrOriDOkc69zrHOuM61z47Pgc63z4POtyIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjcyCittc2dpZCAiVXBkYXRlIEV4aXN0aW5nIEJyYW5jaDoiCittc2dzdHIgIs6Vzr3Ot868zq3Pgc+Jz4POtyDOpc+AzqzPgc+Hzr/Ovc+EzrEgzprOu86szrTOv8+FOiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjc1CisjLCBmdXp6eQorbXNnaWQgIk5vIgorbXNnc3RyICLOjM+HzrkiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4MAorbXNnaWQgIkZhc3QgRm9yd2FyZCBPbmx5IgorbXNnc3RyICLOo8+FzrPPh8+Ozr3Otc+Fz4POtyDOlc+AzrnPhM6sz4fPhc69z4POt8+CIM6cz4zOvc6/IgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODUgbGliL2NoZWNrb3V0X29wLnRjbDo1MTQKK21zZ2lkICJSZXNldCIKK21zZ3N0ciAizpXPgM6xzr3Osc+Gzr/Pgc6sIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6OTcKK21zZ2lkICJDaGVja291dCBBZnRlciBDcmVhdGlvbiIKK21zZ3N0ciAizpXOvs6xzrPPic6zzq4gzpzOtc+Ezqwgz4TOtyDOlM63zrzOuc6/z4XPgc6zzq/OsSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjEzMQorbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSB0cmFja2luZyBicmFuY2guIgorbXNnc3RyICLOoM6xz4HOsc66zrHOu8+OIM61z4DOuc67zq3Ovs+EzrUgzq3Ovc6xzr0gzrrOu86szrTOvyDPgM6xz4HOsc66zr/Ou86/z43OuM63z4POt8+CLiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE0MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRyYWNraW5nIGJyYW5jaCAlcyBpcyBub3QgYSBicmFuY2ggaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5LiIKK21zZ3N0ciAiIgorIs6fIM66zrvOrM60zr/PgiDPgM6xz4HOsc66zr/Ou86/z43OuM63z4POt8+CICVzIM60zrXOvSDOtc6vzr3Osc65IM66zrvOrM60zr/PgiDPgM6/z4UgzrLPgc6vz4POus61z4TOsc65IM+Dz4TOvyDOsc+Azr/OvM6xzrrPgc+Fz4POvM6tzr3OvyAiCisizrHPgM6/zrjOtc+Ezq7Pgc65zr8uIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTUzIGxpYi9icmFuY2hfcmVuYW1lLnRjbDo4NgorbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSBicmFuY2ggbmFtZS4iCittc2dzdHIgIs6gzrHPgc6xzrrOsc67z44gzrTPjs+Dz4TOtSDOrc69zrEgz4zOvc6/zrzOsSDOus67zqzOtM6/z4UuIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTY0IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxMDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhbiBhY2NlcHRhYmxlIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAiJyVzJyDOtM61zr0gzrXOr869zrHOuSDOsc+Azr/OtM61zrrPhM+MIM+Mzr3Ov868zrEgzrrOu86szrTOv8+FLiIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjE1Cittc2dpZCAiRGVsZXRlIEJyYW5jaCIKK21zZ3N0ciAizpTOuc6xzrPPgc6xz4bOriDOms67zqzOtM6/z4UiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyMAorbXNnaWQgIkRlbGV0ZSBMb2NhbCBCcmFuY2giCittc2dzdHIgIs6UzrnOsc6zz4HOsc+Gzq4gzqTOv8+AzrnOus6/z40gzprOu86szrTOv8+FIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzcKK21zZ2lkICJMb2NhbCBCcmFuY2hlcyIKK21zZ3N0ciAizqTOv8+AzrnOus6/zq8gzprOu86szrTOv865IgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTIKK21zZ2lkICJEZWxldGUgT25seSBJZiBNZXJnZWQgSW50byIKK21zZ3N0ciAizpTOuc6xzrPPgc6xz4bOriDOnM+Mzr3OvyDOlc6szr0gzpXOr869zrHOuSDOo8+FzrPPh8+Jzr3Otc+FzrzOrc69zr8gzpzOtSIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjU0Cittc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSB0ZXN0LikiCittc2dzdHIgIs6gzqzOvc+EzrEgKM6czrcgzrTOuc61zr3Otc+BzrPOt864zrXOryDOtM6/zrrOuc68zq4gz4PPhc6zz4fPjs69zrXPhc+DzrfPgi4pIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6IgorbXNnc3RyICLOn865IM61zr7Ors+CIM66zrvOrM60zr/OuSDOtM61zr0gzrXOr869zrHOuSDPgM67zq7Pgc+Jz4Igz4PPhc6zz4fPic69zrXPhc68zq3Ovc6/zrkgzrzOtSDPhM6/ICVzOiIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjExNQorbXNnaWQgIiIKKyJSZWNvdmVyaW5nIGRlbGV0ZWQgYnJhbmNoZXMgaXMgZGlmZmljdWx0LiBcbiIKKyJcbiIKKyIgRGVsZXRlIHRoZSBzZWxlY3RlZCBicmFuY2hlcz8iCittc2dzdHIgIiIKKyLOlyDOsc69zqzOus+EzrfPg863IM60zrnOtc6zz4HOsc68zrzOrc69z4nOvSDOus67zqzOtM+Jzr0gzrXOr869zrHOuSDOtM+Nz4POus6/zrvOty5cbiIKKyJcbiIKKyLOlM65zrHOs8+BzrHPhs6uIM+Ez4nOvSDOtc+AzrnOu861zrPOvM6tzr3Pic69IM66zrvOrM60z4nOvTsiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNDEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIGRlbGV0ZSBicmFuY2hlczpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIs6Rz4DOv8+Ez4XPh86vzrEgzrTOuc6xzrPPgc6xz4bOrs+CIM66zrvOrM60z4nOvTpcbiIKKyIlcyIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjE0IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyMgorbXNnaWQgIlJlbmFtZSBCcmFuY2giCittc2dzdHIgIs6czrXPhM6/zr3Ov868zrHPg86vzrEgzprOu86szrTOv8+FIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MjYKK21zZ2lkICJSZW5hbWUiCittc2dzdHIgIs6czrXPhM6/zr3Ov868zrHPg86vzrEiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozNgorbXNnaWQgIkJyYW5jaDoiCittc2dzdHIgIs6azrvOrM60zr/PgjoiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozOQorbXNnaWQgIk5ldyBOYW1lOiIKK21zZ3N0ciAizp3Orc6/IM6Mzr3Ov868zrE6IgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6NzUKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgYnJhbmNoIHRvIHJlbmFtZS4iCittc2dzdHIgIs6gzrHPgc6xzrrOsc67z44gzrXPgM65zrvOrc6+z4TOtSDOus67zqzOtM6/IM+Az4HOv8+CIM68zrXPhM6/zr3Ov868zrHPg86vzrE6IgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6OTYgbGliL2NoZWNrb3V0X29wLnRjbDoxNzkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIs6fIM6azrvOrM60zr/PgiAnJXMnIM+Fz4DOrM+Bz4fOtc65IM6uzrTOty4iCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxMTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVuYW1lICclcycuIgorbXNnc3RyICLOkc+Azr/PhM+Fz4fOr86xIM68zrXPhM6/zr3Ov868zrHPg86vzrHPgiAnJXMnLiIKKworIzogbGliL2Jyb3dzZXIudGNsOjE3Cittc2dpZCAiU3RhcnRpbmcuLi4iCittc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM6VzrrOus6vzr3Ot8+DzrcuLi4iCisKKyM6IGxpYi9icm93c2VyLnRjbDoyNgorbXNnaWQgIkZpbGUgQnJvd3NlciIKK21zZ3N0ciAizqDOtc+BzrnOt86zzrfPhM6uz4IgzpHPgc+HzrXOr8+Jzr0iCisKKyM6IGxpYi9icm93c2VyLnRjbDoxMjYgbGliL2Jyb3dzZXIudGNsOjE0MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvYWRpbmcgJXMuLi4iCittc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM+Gz4zPgc+Ez4nPg863ICVzLi4uIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MTg3CisjLCBmdXp6eQorbXNnaWQgIltVcCBUbyBQYXJlbnRdIgorbXNnc3RyICJbzqDOrM69z4kgzqDPgc6/z4IgzpPOv869zq3OsV0iCisKKyM6IGxpYi9icm93c2VyLnRjbDoyNjcgbGliL2Jyb3dzZXIudGNsOjI3MworbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMiCittc2dzdHIgIs6gzrXPgc65zq7Os863z4POtyDOkc+Bz4fOtc6vz4nOvSDOms67zqzOtM6/z4UiCisKKyM6IGxpYi9icm93c2VyLnRjbDoyNzggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozODcKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDc0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDg0CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk4NworbXNnaWQgIkJyb3dzZSIKK21zZ3N0ciAizqDOtc+BzrnOrs6zzrfPg863IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjc5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgJXMgZnJvbSAlcyIKK21zZ3N0ciAizpHOvc6szrrPhM63z4POtyAlcyDOsc+Az4wgz4TOvyAlcyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxMjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmYXRhbDogQ2Fubm90IHJlc29sdmUgJXMiCittc2dzdHIgIs66z4HOr8+DzrnOvM6/OiDOlM61IM68z4DPjM+BzrXPg861IM69zrEgzrXPgM65zrvPhc64zrXOryDPhM6/ICVzIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE0MCBsaWIvY29uc29sZS50Y2w6ODEgbGliL2RhdGFiYXNlLnRjbDozMQorbXNnaWQgIkNsb3NlIgorbXNnc3RyICLOms67zrXOr8+DzrnOvM6/IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE2OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAizp8gzprOu86szrTOv8+CICclcycgzrTOtc69IM+Fz4DOrM+Bz4fOtc65LiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyMDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuXG4iCisiXG4iCisiSXQgY2Fubm90IGZhc3QtZm9yd2FyZCB0byAlcy5cbiIKKyJBIG1lcmdlIGlzIHJlcXVpcmVkLiIKK21zZ3N0ciAiIgorIs6fIM6azrvOrM60zr/PgiAnJXMnIM+Fz4DOrM+Bz4fOtc65IM6uzrTOty5cbiIKKyJcbiIKKyLOlM61IM6zzq/Ovc61z4TOsc65IM+Dz4XOs8+Hz47Ovc61z4XPg863IM61z4DOuc+EzqzPh8+Fzr3Pg86uz4Igz4TOv8+FIM+Dz4TOvyAlcy5cbiIKKyLOkc+AzrHOuc+EzrXOr8+EzrHOuSDPg8+FzrPPh8+Ozr3Otc+Fz4POty4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjIwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWVyZ2Ugc3RyYXRlZ3kgJyVzJyBub3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAizpcgz4PPhM+BzrHPhM63zrPOuc66zq4gzqPPhc6zz4fPjs69zrXPhc+DzrfPgiAlcyDOtM61zr0gz4XPgM6/z4PPhM63z4HOr862zrXPhM6xzrkuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjIzOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgJyVzJy4iCittc2dzdHIgIs6Rz4DOv8+Ez4XPh86vzrEgzrXOvc63zrzOrc+Bz4nPg863z4IgJyVzJy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjUxCittc2dpZCAiU3RhZ2luZyBhcmVhIChpbmRleCkgaXMgYWxyZWFkeSBsb2NrZWQuIgorbXNnc3RyICLOlyDPgM61z4HOuc6/z4fOriDPg8+EzrHOtM65zr/PgM6/zq/Ot8+DzrfPgiAoz4TOvyDOtc+Fz4HOtc+Ezq7Pgc65zr8pIM61zq/Ovc6xzrkgzq7OtM63IM66zrvOtc65zrTPic68zq3Ovc63LiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNjYKK21zZ2lkICIiCisiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCisiXG4iCisiQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKKyJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIHRoZSBjdXJyZW50IGJyYW5jaCBjYW4gYmUgY2hhbmdlZC5cbiIKKyJcbiIKKyJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKK21zZ3N0ciAiIgorIs6XIM+EzrXOu861z4XPhM6xzq/OsSDOus6xz4TOrM+Dz4TOsc+Dzrcgz4DOv8+FIM6xzr3Ouc+Hzr3Otc+NzrjOt866zrUgzrTOtSDPg8+FzrzPhs+Jzr3Otc6vIM68zrUgz4TOt869IM66zrHPhM6sz4PPhM6xz4POtyDPhM6/z4UgIgorIs6xz4DOv864zrXPhM63z4HOr86/z4UuXG4iCisiXG4iCisizprOrM+Azr/Ouc6/IM6szrvOu86/IM+Az4HPjM6zz4HOsc68zrzOsSBHaXQgz4TPgc6/z4DOv8+Azr/Or863z4POtSDPhM6/IM6xz4DOv864zrXPhM6uz4HOuc6/IM6xz4DPjCDPhM63zr0gz4TOtc67zrXPhc+EzrHOr86xICIKKyLOsc69zq/Ph869zrXPhc+DzrcuIM6gz4HOrc+AzrXOuSDOvc6xIM6zzq/Ovc61zrkgzrXPgM6xzr3Osc69zq/Ph869zrXPhc+Dzrcgz4DPgc65zr0gzr3OsSDOsc67zrvOsc+HzrjOtc6vIM6/IM+Ez4HOrc+Hz4nOvSDOus67zqzOtM6/z4IuXG4iCisiXG4iCisizpcgzrXPgM6xzr3Osc69zq/Ph869zrXPhc+DzrcgzrjOsSDOvs61zrrOuc69zq7Pg861zrkgzrHPhc+Ez4zOvM6xz4TOsSDPhM+Oz4HOsS5cbiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozMjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyB3b3JraW5nIGRpcmVjdG9yeSB0byAnJXMnLi4uIgorbXNnc3RyICLOlc69zrfOvM6tz4HPic+Dzrcgz4bOsc66zq3Ou86/z4UgzrXPgc6zzrHPg86vzrHPgiDPg861ICclcycuLi4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzIzCittc2dpZCAiZmlsZXMgY2hlY2tlZCBvdXQiCittc2dzdHIgIs6xz4HPh861zq/OsSDOrc+Hzr/Phc69IM61zr7Osc+HzrjOtc6vIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM1MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkFib3J0ZWQgY2hlY2tvdXQgb2YgJyVzJyAoZmlsZSBsZXZlbCBtZXJnaW5nIGlzIHJlcXVpcmVkKS4iCittc2dzdHIgIiIKKyLOiM6zzrnOvc61IM6xzrrPjc+Bz4nPg863IM61zr7Osc6zz4nOs86uz4Igz4TOv8+FICclcycgKM6xz4DOsc65z4TOtc6vz4TOsc65IM+Dz4XOs8+Hz47Ovc61z4XPg863IM61z4DOuc+Azq3OtM6/z4UgzrHPgc+HzrXOr86/z4UpLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNTQKK21zZ2lkICJGaWxlIGxldmVsIG1lcmdlIHJlcXVpcmVkLiIKK21zZ3N0ciAizpHPgM6xzrnPhM61zq/PhM6xzrkgz4PPhc6zz4fPjs69zrXPhc+DzrcgzrXPgM65z4DOrc60zr/PhSDOsc+Bz4fOtc6vzr/PhS4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzU4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU3RheWluZyBvbiBicmFuY2ggJyVzJy4iCittc2dzdHIgIs6gzrHPgc6xzrzOv869zq4gz4PPhM6/zr0gzrrOu86szrTOvyAnJXMnLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo0MjkKK21zZ2lkICIiCisiWW91IGFyZSBubyBsb25nZXIgb24gYSBsb2NhbCBicmFuY2guXG4iCisiXG4iCisiSWYgeW91IHdhbnRlZCB0byBiZSBvbiBhIGJyYW5jaCwgY3JlYXRlIG9uZSBub3cgc3RhcnRpbmcgZnJvbSAnVGhpcyBEZXRhY2hlZCAiCisiQ2hlY2tvdXQnLiIKK21zZ3N0ciAiIgorIs6UzrUgzrLPgc6vz4POus61z4PPhM61IM+AzrnOsSDPg861IM+Ezr/PgM65zrrPjCDOus67zqzOtM6/LlxuIgorIlxuIgorIs6Rzr0gzrjOrc67zrHPhM61IM69zrEgzrLPgc6vz4POus61z4PPhM61IM+DzrUgzrrOu86szrTOvywgzrTOt868zrnOv8+Fz4HOs86uz4PPhM61IM6tzr3Osc69IM+Ez47Pgc6xIM6xz4HPh86vzrbOv869z4TOsc+CIM6xz4DPjCAnVGhpcyAiCisiRGV0YWNoZWQgQ2hlY2tvdXQnLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo0NDYgbGliL2NoZWNrb3V0X29wLnRjbDo0NTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDaGVja2VkIG91dCAnJXMnLiIKK21zZ3N0ciAizojOs865zr3OtSDOtc6+zrHOs8+JzrPOriDPhM6/z4UgJyVzJy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NDc4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXR0aW5nICclcycgdG8gJyVzJyB3aWxsIGxvc2UgdGhlIGZvbGxvd2luZyBjb21taXRzOiIKK21zZ3N0ciAizpcgzrXPgM6xzr3Osc+Gzr/Pgc6sICclcycgz4PPhM6/ICclcycgzrjOsSDPh86sz4POtc65IM+EzrnPgiDOtc6+zq7PgiDPhc+Azr/Oss6/zrvOrc+COiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MDAKK21zZ2lkICJSZWNvdmVyaW5nIGxvc3QgY29tbWl0cyBtYXkgbm90IGJlIGVhc3kuIgorbXNnc3RyICLOlyDOsc69zqzOus+EzrfPg863IM+HzrHOvM6tzr3Pic69IM+Fz4DOv86yzr/Ou8+Ozr0gzrzPgM6/z4HOtc6vIM69zrEgzrXOr869zrHOuSDOtM+Nz4POus6/zrvOty4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTA1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJyVzJz8iCittc2dzdHIgIs6Vz4DOsc69zrHPhs6/z4HOrCAnJXMnOyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MTAgbGliL21lcmdlLnRjbDoxNjMKK21zZ2lkICJWaXN1YWxpemUiCittc2dzdHIgIs6Rz4DOtc65zrrPjM69zrnPg863IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU3OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gc2V0IGN1cnJlbnQgYnJhbmNoLlxuIgorIlxuIgorIlRoaXMgd29ya2luZyBkaXJlY3RvcnkgaXMgb25seSBwYXJ0aWFsbHkgc3dpdGNoZWQuICBXZSBzdWNjZXNzZnVsbHkgdXBkYXRlZCAiCisieW91ciBmaWxlcywgYnV0IGZhaWxlZCB0byB1cGRhdGUgYW4gaW50ZXJuYWwgR2l0IGZpbGUuXG4iCisiXG4iCisiVGhpcyBzaG91bGQgbm90IGhhdmUgb2NjdXJyZWQuICAlcyB3aWxsIG5vdyBjbG9zZSBhbmQgZ2l2ZSB1cC4iCittc2dzdHIgIiIKKyLOkc+Azr/PhM+Fz4fOr86xIM6/z4HOuc+DzrzOv8+NIM+Ez4HOrc+Hzr/Ovc+Ezr/PgiDOus67zqzOtM6/z4UuXG4iCisiXG4iCisizpHPhc+Ez4zPgiDOvyDPhs6szrrOtc67zr/PgiDOtc+BzrPOsc+Dzq/Osc+CIM61zq/Ovc6xzrkgzrzPjM69zr8gzrXOvSDOvM6tz4HOtc65IM61z4DOuc67zrXOs868zq3Ovc6/z4IuICfOlc6zzrnOvc61IM61z4DOuc+Ez4XPh86uz4IgIgorIs61zr3Ot868zq3Pgc+Jz4POtyDPhM+Jzr0gzrHPgc+HzrXOr8+Jzr0gz4POsc+CLCDOsc67zrvOrCDOsc+Azq3PhM+Fz4fOtSDOtyDOtc69zrfOvM6tz4HPic+DzrcgzrXOvc+Mz4IgzrXPg8+Jz4TOtc+BzrnOus6/z40gzrHPgc+HzrXOr86/z4UgIgorIs+Ezr/PhSBHaXQuXG4iCisiXG4iCisizpHPhc+Ez4wgzrTOtSDOuM6xIM6tz4DPgc61z4DOtSDOvc6xIM+Dz4XOvM6yzrXOry4gzqTOvyAlcyDOuM6xIM66zrvOtc6vz4POtc65IM66zrHOuSDOuM6xIM61zrPOus6xz4TOsc67zrXOr8+IzrXOuSDPhM+Oz4HOsS4iCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6MzkKK21zZ2lkICJTZWxlY3QiCittc2dzdHIgIs6Vz4DOuc67zr/Os86uIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjUzCittc2dpZCAiRm9udCBGYW1pbHkiCittc2dzdHIgIs6fzrnOus6/zrPOrc69zrXOuc6xIM6Tz4HOsc68zrzOsc+Ezr/Pg861zrnPgc6sz4IiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NzQKK21zZ2lkICJGb250IFNpemUiCittc2dzdHIgIs6czq3Os861zrjOv8+CIM6Tz4HOsc68zrzOsc+Ezr/Pg861zrnPgc6sz4IiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6OTEKK21zZ2lkICJGb250IEV4YW1wbGUiCittc2dzdHIgIs6gzrHPgc6szrTOtc65zrPOvM6xIM6Tz4HOsc68zrzOsc+Ezr/Pg861zrnPgc6sz4IiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6MTAzCittc2dpZCAiIgorIlRoaXMgaXMgZXhhbXBsZSB0ZXh0LlxuIgorIklmIHlvdSBsaWtlIHRoaXMgdGV4dCwgaXQgY2FuIGJlIHlvdXIgZm9udC4iCittc2dzdHIgIiIKKyLOkc+Fz4TPjCDOtc6vzr3Osc65IM6tzr3OsSDPgM6xz4HOrM60zrXOuc6zzrzOsSDOus61zrnOvM6tzr3Ov8+FLlxuIgorIs6Rzr0gz4POsc+CIM6xz4HOrc+DzrXOuSDOsc+Fz4TPjCDPhM6/IM66zrXOr868zrXOvc6/LCDOvM+Azr/Pgc61zq8gzr3OsSDOs86vzr3Otc65IM60zrnOus+MIM+DzrHPgi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MjgKK21zZ2lkICJHaXQgR3VpIgorbXNnc3RyICLOk8+BzrHPhs65zrrPjCDOoM61z4HOuc6yzqzOu867zr/OvSBHaXQiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozNzYKK21zZ2lkICJDcmVhdGUgTmV3IFJlcG9zaXRvcnkiCittc2dzdHIgIs6UzrfOvM65zr/Phc+BzrPOr86xIM6dzq3Ov8+FIM6Rz4DOv864zrXPhM63z4HOr86/z4UiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODcKK21zZ2lkICJOZXcuLi4iCittc2dzdHIgIs6dzq3Ovy4uLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ2MAorbXNnaWQgIkNsb25lIEV4aXN0aW5nIFJlcG9zaXRvcnkiCittc2dzdHIgIs6azrvPic69zr/PgM6/zq/Ot8+DzrcgzqXPgM6sz4HPh86/zr3PhM6/z4IgzpHPgM6/zrjOtc+EzrfPgc6vzr/PhSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDAKK21zZ2lkICJDbG9uZS4uLiIKK21zZ3N0ciAizprOu8+Jzr3Ov8+Azr/Or863z4POty4uLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NzYKK21zZ2lkICJPcGVuIEV4aXN0aW5nIFJlcG9zaXRvcnkiCittc2dzdHIgIs6Gzr3Ov865zrPOvM6xIM6lz4DOrM+Bz4fOv869z4TOv8+CIM6Rz4DOv864zrXPhM63z4HOr86/z4UiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTEzCittc2dpZCAiT3Blbi4uLiIKK21zZ3N0ciAizobOvc6/zrnOs868zrEuLi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTI2Cittc2dpZCAiUmVjZW50IFJlcG9zaXRvcmllcyIKK21zZ3N0ciAizqDPgc+Mz4PPhs6xz4TOsSDOkc+Azr/OuM61z4TOrs+BzrnOsSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMzIKK21zZ2lkICJPcGVuIFJlY2VudCBSZXBvc2l0b3J5OiIKK21zZ3N0ciAizobOvc6/zrnOs868zrEgzqDPgc+Mz4PPhs6xz4TOv8+FIM6Rz4DOv864zrXPhM63z4HOr86/z4U6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjI5NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMwMworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlcG9zaXRvcnkgJXM6IgorbXNnc3RyICLOkc+Azr/PhM+Fz4fOr86xIM60zrfOvM65zr/Phc+BzrPOr86xz4IgzrHPgM6/zrjOtc+EzrfPgc6vzr/PhSAlczoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzgxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDc4Cittc2dpZCAiRGlyZWN0b3J5OiIKK21zZ3N0ciAizqbOrM66zrXOu86/z4I6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQxMiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUzNworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDExCittc2dpZCAiR2l0IFJlcG9zaXRvcnkiCittc2dzdHIgIs6Rz4DOv864zrXPhM6uz4HOuc6/IEdpdCIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MzcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEaXJlY3RvcnkgJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICLOnyDOps6szrrOtc67zr/PgiAnJXMnIM+Fz4DOrM+Bz4fOtc65IM6uzrTOty4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmlsZSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIs6kzr8gzrHPgc+HzrXOr86/ICVzIM+Fz4DOrM+Bz4fOtc65IM6uzrTOty4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDU1Cittc2dpZCAiQ2xvbmUiCittc2dzdHIgIs6azrvPjs69zr/PgiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NjgKKyMsIGZ1enp5Cittc2dpZCAiVVJMOiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4OQorbXNnaWQgIkNsb25lIFR5cGU6IgorbXNnc3RyICLOpM+Nz4DOv8+CIM6azrvPjs69zr/PhToiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDk1Cittc2dpZCAiU3RhbmRhcmQgKEZhc3QsIFNlbWktUmVkdW5kYW50LCBIYXJkbGlua3MpIgorbXNnc3RyICLOpM+Fz4DOuc66z4wgKM6kzrHPh8+NLCDOl868zrktzqDOu861zr/Ovc6szrbOv869LCBIYXJkbGlua3MpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwMQorbXNnaWQgIkZ1bGwgQ29weSAoU2xvd2VyLCBSZWR1bmRhbnQgQmFja3VwKSIKK21zZ3N0ciAizqDOu86uz4HOtc+CIM6Rzr3PhM6vzrPPgc6xz4bOvyAozqDOuc6/IM6xz4HOs8+MLCDOoM67zrXOv869zqzOts6/zr0gzpHOvc+Ezq/Os8+BzrHPhs6/IM6Rz4PPhs6xzrvOtc6vzrHPgikiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTA3Cittc2dpZCAiU2hhcmVkIChGYXN0ZXN0LCBOb3QgUmVjb21tZW5kZWQsIE5vIEJhY2t1cCkiCittc2dzdHIgIs6azr/Ouc69zq4gzqfPgc6uz4POtyAozqTOsc+Hz43PhM6xz4TOvywgzpTOtSDOo8+Fzr3Ouc+Dz4TOrM+EzrHOuSwgzprOsc69zq3Ovc6xIM6Rzr3PhM6vzrPPgc6xz4bOvyDOkc+Dz4bOsc67zrXOr86xz4IpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU0MyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU5MAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MzYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MDYKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxNyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJOb3QgYSBHaXQgcmVwb3NpdG9yeTogJXMiCittc2dzdHIgIs6UzrXOvSDOtc6vzr3Osc65IM6xz4DOv864zrXPhM6uz4HOuc6/IEdpdDogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTc5Cittc2dpZCAiU3RhbmRhcmQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICJcIs6kz4XPgM65zrrPjFwiIM60zrnOsc64zq3Pg865zrzOvyDOvM+Mzr3OvyDOs865zrEgz4TOv8+AzrnOus+MIM6xz4DOv864zrXPhM6uz4HOuc6/LiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1ODMKK21zZ2lkICJTaGFyZWQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICJcIs6azr/Ouc69zq4gzqfPgc6uz4POt1wiIM60zrnOsc64zq3Pg865zrzOtyDOvM+Mzr3OvyDOs865zrEgz4TOv8+AzrnOus+MIM6xz4DOv864zrXPhM6uz4HOuc6/LiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MDQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJMb2NhdGlvbiAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIs6XIM6kzr/PgM6/zrjOtc+Dzq/OsSAlcyDPhc+AzqzPgc+HzrXOuSDOrs60zrcuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxNQorbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgb3JpZ2luIgorbXNnc3RyICLOkc+Azr/PhM+Fz4fOr86xIM+Bz43OuM68zrnPg863z4Igz4DOt86zzq7PgiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MjcKK21zZ2lkICJDb3VudGluZyBvYmplY3RzIgorbXNnc3RyICLOk86vzr3Otc+EzrHOuSDOus6xz4TOsc68zq3PhM+BzrfPg863IM6xzr3PhM65zrrOtc65zrzOrc69z4nOvSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MjgKKyMsIGZ1enp5Cittc2dpZCAiYnVja2V0cyIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY1MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdHMvaW5mby9hbHRlcm5hdGVzOiAlcyIKK21zZ3N0ciAizpHOtM+Fzr3Osc68zq/OsSDOsc69z4TOuc6zz4HOsc+Gzq7PgiDOsc69z4TOuc66zrXOuc68zq3Ovc+Jzr0vz4DOu863z4HOv8+Gzr/Pgc65z47OvS/Otc69zr3Osc67zrHOus+EzrnOus+Ozr06ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY4OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgdG8gY2xvbmUgZnJvbSAlcy4iCittc2dzdHIgIs6kzq/PgM6/z4TOsSDPgM+Bzr/PgiDOus67z4nOvc6/z4DOv86vzrfPg863IM6xz4DPjCDPhM6/ICVzLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2OTAgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MDQKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTE2Cittc2dpZCAiVGhlICdtYXN0ZXInIGJyYW5jaCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuIgorbXNnc3RyICLOnyDOus67zqzOtM6/z4IgJ21hc3RlcicgzrTOtc69IM6tz4fOtc65IM6xz4HPh865zrrOv8+Azr/Ouc63zrjOtc6vLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MDMKK21zZ2lkICJIYXJkbGlua3MgYXJlIHVuYXZhaWxhYmxlLiAgRmFsbGluZyBiYWNrIHRvIGNvcHlpbmcuIgorbXNnc3RyICJIYXJkbGlua3MgzrzOtyDOtM65zrHOuM6tz4POuc68zrEuIM6czrXPhM6sz4DPhM+Jz4POtyDPg861IM6xzr3PhM65zrPPgc6xz4bOri4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzE1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBmcm9tICVzIgorbXNnc3RyICLOk86vzr3Otc+EzrHOuSDOus67z4nOvc6/z4DOv86vzrfPg863IM6xz4DPjCDPhM6/ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc0NgorbXNnaWQgIkNvcHlpbmcgb2JqZWN0cyIKK21zZ3N0ciAizpPOr869zrXPhM6xzrkgzrHOvc+EzrnOs8+BzrHPhs6uIM6xzr3PhM65zrrOtc65zrzOrc69z4nOvSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NDcKKyMsIGZ1enp5Cittc2dpZCAiS2lCIgorbXNnc3RyICIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzcxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0OiAlcyIKK21zZ3N0ciAizpHOtM+Fzr3Osc68zq/OsSDOsc69z4TOuc6zz4HOsc+Gzq7PgiDOsc69z4TOuc66zrXOuc68zq3Ovc6/z4U6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc4MQorbXNnaWQgIkxpbmtpbmcgb2JqZWN0cyIKK21zZ3N0ciAizpPOr869zrXPhM6xzrkgz4PPjc69zrTOtc+DzrcgzrHOvc+EzrnOus61zrnOvM6tzr3Pic69IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc4MgorbXNnaWQgIm9iamVjdHMiCittc2dzdHIgIs6xzr3PhM65zrrOtc6vzrzOtc69zrEiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzkwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGhhcmRsaW5rIG9iamVjdDogJXMiCittc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgaGFyZGxpbmsgzrHOvc+EzrnOus61zrnOvM6tzr3Ov8+FOiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NDUKK21zZ2lkICJDYW5ub3QgZmV0Y2ggYnJhbmNoZXMgYW5kIG9iamVjdHMuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisizpTOtSDOvM+Az4zPgc61z4POtSDOvc6xIM6zzq/Ovc61zrkgzrHOvc6szrrPhM63z4POtyDOus67zqzOtM+Jzr0gzrrOsc65IM6xzr3PhM65zrrOtc65zrzOrc69z4nOvS4gzpTOtc6vz4TOtSDPhM63zr0gzq3Ovs6/zrTOvyAiCisizrrOv869z4PPjM67zrHPgiDOs865zrEgzrvOtc+Az4TOv868zq3Pgc61zrnOtc+CLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NTYKK21zZ2lkICJDYW5ub3QgZmV0Y2ggdGFncy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyLOlM61IM68z4DPjM+BzrXPg861IM69zrEgzrPOr869zrXOuSDOsc69zqzOus+EzrfPg863IM61z4TOuc66zrXPhM+Ozr0uIM6UzrXOr8+EzrUgz4TOt869IM6tzr7Ov860zr8gzrrOv869z4PPjM67zrHPgiDOs865zrEgIgorIs67zrXPgM+Ezr/OvM6tz4HOtc65zrXPgi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODgwCittc2dpZCAiQ2Fubm90IGRldGVybWluZSBIRUFELiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIs6UzrUgzrzPgM+Mz4HOtc+DzrUgzr3OsSDOs86vzr3Otc65IM66zrHOuM6/z4HOuc+DzrzPjM+CIM+Ezr/PhSBIRUFEICjPgM6xz4HOsc66zrvOsc60zrnOv8+NKS4gzpTOtc6vz4TOtSDPhM63zr0gzq3Ovs6/zrTOvyAiCisizrrOv869z4PPjM67zrHPgiDOs865zrEgIgorIs67zrXPgM+Ezr/OvM6tz4HOtc65zrXPgi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODg5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNsZWFudXAgJXMiCittc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzrXOus66zrHOuM6sz4HOuc+DzrfPgiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4OTUKK21zZ2lkICJDbG9uZSBmYWlsZWQuIgorbXNnc3RyICLOkc+Azr/PhM+Fz4fOr86xIM66zrvPic69zr/PgM6/zq/Ot8+DzrfPgi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTAyCittc2dpZCAiTm8gZGVmYXVsdCBicmFuY2ggb2J0YWluZWQuIgorbXNnc3RyICLOlM61zr0gzq3Os865zr3OtSDOsc69zqzOus+EzrfPg863IM+Az4HOv861z4DOuc67zrXOs868zq3Ovc6/z4UgzrrOu86szrTOv8+FLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcmVzb2x2ZSAlcyBhcyBhIGNvbW1pdC4iCittc2dzdHIgIs6UzrUgzrzPgM+Mz4HOtc+DzrUgzr3OsSDOtc+AzrnOu8+FzrjOtc6vIM+Ezr8gJXMgz4nPgiDPhc+Azr/Oss6/zrvOri4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTI1Cittc2dpZCAiQ3JlYXRpbmcgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIs6UzrfOvM65zr/Phc+BzrPOr86xIM+GzrHOus6tzrvOv8+FIM61z4HOs86xz4POr86xz4IiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTI2IGxpYi9pbmRleC50Y2w6NjUgbGliL2luZGV4LnRjbDoxMjcKKyM6IGxpYi9pbmRleC50Y2w6MTkzCittc2dpZCAiZmlsZXMiCittc2dzdHIgIs6xz4HPh861zq/OsSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NTUKK21zZ2lkICJJbml0aWFsIGZpbGUgY2hlY2tvdXQgZmFpbGVkLiIKK21zZ3N0ciAizpcgzrHPgc+HzrnOus6uIM61zr7Osc6zz4nOs86uIM6xz4HPh861zq/Ov8+FIM6xz4DOrc+Ez4XPh861LiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NzEKK21zZ2lkICJPcGVuIgorbXNnc3RyICLOhs69zr/Ouc6zzrzOsSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5ODEKK21zZ2lkICJSZXBvc2l0b3J5OiIKK21zZ3N0ciAizpHPgM6/zrjOtc+Ezq7Pgc65zr86IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMzEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiByZXBvc2l0b3J5ICVzOiIKK21zZ3N0ciAizpHPgM6/z4TPhc+Hzq/OsSDOsc69zr/Or86zzrzOsc+Ezr/PgiDOsc+Azr/OuM61z4TOt8+Bzq/Ov8+FICVzOiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjUzCisjLCBmdXp6eQorbXNnaWQgIlRoaXMgRGV0YWNoZWQgQ2hlY2tvdXQiCittc2dzdHIgIs6Rz4DOv8+Dz4XOvc60zrXOtM61zrzOrc69zrcgzpXOvs6xzrPPic6zzq4iCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo2MAorbXNnaWQgIlJldmlzaW9uIEV4cHJlc3Npb246IgorbXNnc3RyICLOiM66z4bPgc6xz4POtyDOkc69zrHOuM61z47Pgc63z4POt8+COiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjc0Cittc2dpZCAiTG9jYWwgQnJhbmNoIgorbXNnc3RyICLOpM6/z4DOuc66z4zPgiDOms67zqzOtM6/z4IiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3OQorbXNnaWQgIlRyYWNraW5nIEJyYW5jaCIKK21zZ3N0ciAizprOu86szrTOv8+CIM6gzrHPgc6xzrrOv867zr/Pjc64zrfPg863z4IiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo4NCBsaWIvY2hvb3NlX3Jldi50Y2w6NTM4Cittc2dpZCAiVGFnIgorbXNnc3RyICLOlc+EzrnOus6tz4TOsSIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjMxNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcmV2aXNpb246ICVzIgorbXNnc3RyICLOnM63IM6tzrPOus+Fz4HOtyDOsc69zrHOuM61z47Pgc63z4POtzogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMzgKK21zZ2lkICJObyByZXZpc2lvbiBzZWxlY3RlZC4iCittc2dzdHIgIs6UzrXOvSDOrc+HzrXOuSDOtc+AzrnOu861zrPOtc6vIM6xzr3Osc64zrXPjs+BzrfPg863LiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjM0NgorbXNnaWQgIlJldmlzaW9uIGV4cHJlc3Npb24gaXMgZW1wdHkuIgorbXNnc3RyICLOlyDOrc66z4bPgc6xz4POtyDOsc69zrHOuM61z47Pgc63z4POt8+CIM61zq/Ovc6xzrkgzrrOtc69zq4uIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTMxCittc2dpZCAiVXBkYXRlZCIKK21zZ3N0ciAizpXOvc63zrzOtc+Bz4nOvM6tzr3OvyIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjU1OQorIywgZnV6enkKK21zZ2lkICJVUkwiCittc2dzdHIgIiIKKworIzogbGliL2NvbW1pdC50Y2w6OQorbXNnaWQgIiIKKyJUaGVyZSBpcyBub3RoaW5nIHRvIGFtZW5kLlxuIgorIlxuIgorIllvdSBhcmUgYWJvdXQgdG8gY3JlYXRlIHRoZSBpbml0aWFsIGNvbW1pdC4gIFRoZXJlIGlzIG5vIGNvbW1pdCBiZWZvcmUgdGhpcyAiCisidG8gYW1lbmQuXG4iCittc2dzdHIgIiIKKyLOlM61zr0gz4XPgM6sz4HPh861zrkgzrrOrM+Ezrkgz4DPgc6/z4IgzrTOuc+Mz4HOuM+Jz4POty5cbiIKKyJcbiIKKyLOoM+Bz4zOus61zrnPhM6xzrkgzr3OsSDOtM63zrzOuc6/z4XPgc6zzq7Pg861z4TOtSDPhM63zr0gzrHPgc+HzrnOus6uIM+Fz4DOv86yzr/Ou86uLiDOlM61zr0gz4XPgM6sz4HPh861zrkgz4XPgM6/zrLOv867zq4gz4DPgc65zr0gzrHPgM+MICIKKyLOsc+Fz4TOriDOs865zrEgzr3OsSDOtM65zr/Pgc64z47Pg861z4TOtS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTgKK21zZ2lkICIiCisiQ2Fubm90IGFtZW5kIHdoaWxlIG1lcmdpbmcuXG4iCisiXG4iCisiWW91IGFyZSBjdXJyZW50bHkgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIHRoYXQgaGFzIG5vdCBiZWVuIGZ1bGx5ICIKKyJjb21wbGV0ZWQuICBZb3UgY2Fubm90IGFtZW5kIHRoZSBwcmlvciBjb21taXQgdW5sZXNzIHlvdSBmaXJzdCBhYm9ydCB0aGUgIgorImN1cnJlbnQgbWVyZ2UgYWN0aXZpdHkuXG4iCittc2dzdHIgIiIKKyLOlM61IM6zzq/Ovc61z4TOsc65IM60zrnPjM+BzrjPic+DzrcgzrrOsc64z47PgiDPg8+FzrPPh8+Jzr3Otc+NzrXPhM61LlxuIgorIlxuIgorIs6Sz4HOr8+DzrrOtc+Dz4TOtSDPg8+Ezr8gzrzOrc+Dzr8gzrzOuc6xz4Igz4PPhc6zz4fPjs69zrXPhc+DzrfPgiDPgM6/z4UgzrTOtc69IM6tz4fOtc65IM6/zrvOv866zrvOt8+Bz4nOuM61zq8uIM6UzrUgzrzPgM6/z4HOtc6vz4TOtSDOvc6xICIKKyLOtM65zr/Pgc64z47Pg861z4TOtSDPhM63zr0gz4DPgc6/zrfOs86/z43OvM61zr3OtyDPhc+Azr/Oss6/zrvOriDOtc66z4TPjM+CIM61zqzOvSDOsc66z4XPgc+Oz4POtc+EzrUgz4TOt869IM+Ez4HOrc+Hzr/Phc+DzrEgzrXOvc6tz4HOs861zrnOsSAiCisiz4PPhc6zz4fPjs69zrXPhc+DzrfPgi5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6NDkKK21zZ2lkICJFcnJvciBsb2FkaW5nIGNvbW1pdCBkYXRhIGZvciBhbWVuZDoiCittc2dzdHIgIs6jz4bOrM67zrzOsSDPhs+Mz4HPhM+Jz4POt8+CIM60zrXOtM6/zrzOrc69z4nOvSDPhc+Azr/Oss6/zrvOrs+CIM+Az4HOv8+CIM60zrnPjM+BzrjPic+Dzrc6IgorCisjOiBsaWIvY29tbWl0LnRjbDo3NgorbXNnaWQgIlVuYWJsZSB0byBvYnRhaW4geW91ciBpZGVudGl0eToiCittc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzrHOvc6szrrPhM63z4POt8+CIM+EzrfPgiDPhM6xz4XPhM+Mz4TOt8+EzqzPgiDPg86xz4I6IgorCisjOiBsaWIvY29tbWl0LnRjbDo4MQorbXNnaWQgIkludmFsaWQgR0lUX0NPTU1JVFRFUl9JREVOVDoiCittc2dzdHIgIs6czrcgzq3Os866z4XPgc6/IEdJVF9DT01NSVRURVJfSURFTlQ6IgorCisjOiBsaWIvY29tbWl0LnRjbDoxMzMKK21zZ2lkICIiCisiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCisiXG4iCisiQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKKyJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGFub3RoZXIgY29tbWl0IGNhbiBiZSBjcmVhdGVkLlxuIgorIlxuIgorIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisizpcgz4TOtc67zrXPhc+EzrHOr86xIM66zrHPhM6sz4PPhM6xz4POtyDPgM6/z4UgzrHOvc65z4fOvc61z43OuM63zrrOtSDOtM61IM+Dz4XOvM+Gz4nOvc61zq8gzrzOtSDPhM63zr0gzrrOsc+EzqzPg8+EzrHPg863IM+Ezr/PhSAiCisizrHPgM6/zrjOtc+EzrfPgc6vzr/PhS5cbiIKKyJcbiIKKyLOms6sz4DOv865zr8gzqzOu867zr8gz4DPgc+MzrPPgc6xzrzOvM6xIEdpdCDPhM+Bzr/PgM6/z4DOv86vzrfPg861IM+Ezr8gzrHPgM6/zrjOtc+Ezq7Pgc65zr8gzrHPgM+MIM+EzrfOvSDPhM61zrvOtc+Fz4TOsc6vzrEgIgorIs6xzr3Or8+Hzr3Otc+Fz4POty4gzqDPgc6tz4DOtc65IM69zrEgzrPOr869zrXOuSDOtc+AzrHOvc6xzr3Or8+Hzr3Otc+Fz4POtyDPgM+BzrnOvSDPhM63IM60zrfOvM65zr/Phc+BzrPOr86xIM69zq3Osc+CIM+Fz4DOv86yzr/Ou86uz4IuXG4iCisiXG4iCisizpcgzrXPgM6xzr3Osc69zq/Ph869zrXPhc+DzrcgzrjOsSDOvs61zrrOuc69zq7Pg861zrkgzrHPhc+Ez4zOvM6xz4TOsSDPhM+Oz4HOsS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTU0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlVubWVyZ2VkIGZpbGVzIGNhbm5vdCBiZSBjb21taXR0ZWQuXG4iCisiXG4iCisiRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLiAgWW91IG11c3QgcmVzb2x2ZSB0aGVtIGFuZCBzdGFnZSB0aGUgZmlsZSAiCisiYmVmb3JlIGNvbW1pdHRpbmcuXG4iCittc2dzdHIgIiIKKyLOpM6xIM68zrcgz4PPhc6zz4fPic69zrXPhc68zq3Ovc6xIM6xz4HPh861zq/OsSDOtM61IM68z4DOv8+Bzr/Pjc69IM69zrEgz4XPgM6/zrLOu863zrjOv8+Nzr0uXG4iCisiXG4iCisizqTOvyDOsc+Bz4fOtc6vzr8gJXMgzq3Ph861zrkgz4PPhc6zzrrPgc6/z43Pg861zrnPgiDPg8+FzrPPh8+Ozr3Otc+Fz4POt8+CLiDOoM+Bzq3PgM61zrkgzr3OsSDPhM65z4IgzrXPgM65zrvPjc+DzrXPhM61IM66zrHOuSDOvc6xICIKKyLPg8+EzrHOtM65zr/PgM6/zrnOrs+DzrXPhM61IM+Ezr8gzrHPgc+HzrXOr86/IM+Az4HOuc69IM+EzrfOvSDPhc+Azr/Oss6/zrvOri5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlVua25vd24gZmlsZSBzdGF0ZSAlcyBkZXRlY3RlZC5cbiIKKyJcbiIKKyJGaWxlICVzIGNhbm5vdCBiZSBjb21taXR0ZWQgYnkgdGhpcyBwcm9ncmFtLlxuIgorbXNnc3RyICIiCisizobOs869z4nPg8+EzrcgzrrOsc+EzqzPg8+EzrHPg863IM6xz4HPh861zq/Ov8+FICVzIM6xzr3Ouc+Hzr3Otc+NzrjOt866zrUuXG4iCisiXG4iCisizqTOvyDOsc+Bz4fOtc6vzr8gJXMgzrTOtSDOvM+Azr/Pgc61zq8gzr3OsSDPhc+Azr/Oss67zrfOuM61zq8gzrHPgM+MIM6xz4XPhM+MIM+Ezr8gz4DPgc+MzrPPgc6xzrzOvM6xLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxNzAKK21zZ2lkICIiCisiTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCisiXG4iCisiWW91IG11c3Qgc3RhZ2UgYXQgbGVhc3QgMSBmaWxlIGJlZm9yZSB5b3UgY2FuIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIs6UzrXOvSDPhc+AzqzPgc+Hzr/Phc69IM6xzrvOu86xzrPOrc+CIM+Az4HOv8+CIM+Fz4DOv86yzr/Ou86uLlxuIgorIlxuICIKKyLOoM+Bzq3PgM61zrkgzr3OsSDPg8+EzrHOtM65zr/PgM6/zrnOrs+DzrXPhM61IM+Ezr/Phc67zqzPh865z4PPhM6/zr0gMSDOsc+Bz4fOtc6vzr8gz4DPgc65zr0gzr3OsSDOus6szr3Otc+EzrUgz4XPgM6/zrLOv867zq4uXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE4MworbXNnaWQgIiIKKyJQbGVhc2Ugc3VwcGx5IGEgY29tbWl0IG1lc3NhZ2UuXG4iCisiXG4iCisiQSBnb29kIGNvbW1pdCBtZXNzYWdlIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDpcbiIKKyJcbiIKKyItIEZpcnN0IGxpbmU6IERlc2NyaWJlIGluIG9uZSBzZW50ZW5jZSB3aGF0IHlvdSBkaWQuXG4iCisiLSBTZWNvbmQgbGluZTogQmxhbmtcbiIKKyItIFJlbWFpbmluZyBsaW5lczogRGVzY3JpYmUgd2h5IHRoaXMgY2hhbmdlIGlzIGdvb2QuXG4iCittc2dzdHIgIiIKKyLOoM6xz4HOsc66zrHOu8+OIM60z47Pg8+EzrUgzq3Ovc6xIM68zq7Ovc+FzrzOsSDPhc+Azr/Oss6/zrvOrs+CLlxuIgorIlxuIgorIs6Izr3OsSDPg8+Jz4PPhM+MIM68zq7Ovc+FzrzOsSDPhc+Azr/Oss6/zrvOrs+CIM6tz4fOtc65IM+EzrfOvSDOtc6+zq7PgiDOvM6/z4HPhs6uOlxuIgorIlxuIgorIi0gzqDPgc+Oz4TOtyDOs8+BzrHOvM68zq46IM6gzrXPgc65zrPPgc6xz4bOriDPg861IM68zq/OsSDPgM+Bz4zPhM6xz4POtyDPhM6/z4Ugz4TOuSDOus6szr3Osc+EzrUuXG4iCisiLSDOlM61z43PhM61z4HOtyDOs8+BzrHOvM68zq46IM6azrXOvc6uXG4iCisiLSDOpc+Az4zOu86/zrnPgM61z4IgzrPPgc6xzrzOvM6tz4I6IM6gzrXPgc65zrPPgc6xz4bOriDPhM6/z4UgzrPOuc6xz4TOryDOsc+Fz4TOriDOtyDOsc67zrvOsc6zzq4gzrXOr869zrHOuSDPg8+Jz4PPhM6uLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoyMDcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBUY2wgZG9lcyBub3Qgc3VwcG9ydCBlbmNvZGluZyAnJXMnLiIKK21zZ3N0ciAiz4DPgc6/zrXOuc60zr/PgM6/zq/Ot8+Dzrc6IEggVGNsIM60zrXOvSDPhc+Azr/Pg8+EzrfPgc6vzrbOtc65IM+EzrfOvSDOus+JzrTOuc66zr/PgM6/zq/Ot8+DzrcgJyVzJy4iCisKKyM6IGxpYi9jb21taXQudGNsOjIyMQorbXNnaWQgIkNhbGxpbmcgcHJlLWNvbW1pdCBob29rLi4uIgorbXNnc3RyICLOk86vzr3Otc+EzrHOuSDOus67zq7Pg863IM+Ezr/PhSBwcmUtY29tbWl0IGhvb2suLi4iCisKKyM6IGxpYi9jb21taXQudGNsOjIzNgorbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmUtY29tbWl0IGhvb2suIgorbXNnc3RyICLOlyDPhc+Azr/Oss6/zrvOriDOsc+Azr/Pgc+Bzq/Phs64zrfOus61IM6xz4DPjCDPhM6/IHByZS1jb21taXQgaG9vay4iCisKKyM6IGxpYi9jb21taXQudGNsOjI1OQorbXNnaWQgIkNhbGxpbmcgY29tbWl0LW1zZyBob29rLi4uIgorbXNnc3RyICLOk86vzr3Otc+EzrHOuSDOus67zq7Pg863IM+Ezr/PhSBjb21taXQtbXNnIGhvb2suLi4iCisKKyM6IGxpYi9jb21taXQudGNsOjI3NAorbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBjb21taXQtbXNnIGhvb2suIgorbXNnc3RyICLOlyDPhc+Azr/Oss6/zrvOriDOsc+Azr/Pgc+Bzq/Phs64zrfOus61IM6xz4DPjCDPhM6/IGNvbW1pdC1tc2cgaG9vay4iCisKKyM6IGxpYi9jb21taXQudGNsOjI4NworbXNnaWQgIkNvbW1pdHRpbmcgY2hhbmdlcy4uLiIKK21zZ3N0ciAizpPOr869zrXPhM6xzrkgz4XPgM6/zrLOv867zq4gz4TPic69IM6xzrvOu86xzrPPjs69Li4uIgorCisjOiBsaWIvY29tbWl0LnRjbDozMDMKK21zZ2lkICJ3cml0ZS10cmVlIGZhaWxlZDoiCittc2dzdHIgIs+Ezr8gd3JpdGUtdHJlZSDOsc+Azq3PhM+Fz4fOtToiCisKKyM6IGxpYi9jb21taXQudGNsOjMwNCBsaWIvY29tbWl0LnRjbDozNDggbGliL2NvbW1pdC50Y2w6MzY4Cittc2dpZCAiQ29tbWl0IGZhaWxlZC4iCittc2dzdHIgIs6XIM+Fz4DOv86yzr/Ou86uIM6xz4DOrc+Ez4XPh861LiIKKworIzogbGliL2NvbW1pdC50Y2w6MzIxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGFwcGVhcnMgdG8gYmUgY29ycnVwdCIKK21zZ3N0ciAizpcgz4XPgM6/zrLOv867zq4gJXMgzrTOtc6vz4fOvc61zrkgzrrOsc+EzrXPg8+Ez4HOsc68zrzOrc69zrciCisKKyM6IGxpYi9jb21taXQudGNsOjMyNgorbXNnaWQgIiIKKyJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKKyJcbiIKKyJObyBmaWxlcyB3ZXJlIG1vZGlmaWVkIGJ5IHRoaXMgY29tbWl0IGFuZCBpdCB3YXMgbm90IGEgbWVyZ2UgY29tbWl0LlxuIgorIlxuIgorIkEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKK21zZ3N0ciAiIgorIs6UzrXOvSDPhc+AzqzPgc+Hzr/Phc69IM6xzrvOu86xzrPOrc+CIM+Az4HOv8+CIM+Fz4DOv86yzr/Ou86uLlxuIgorIlxuIgorIs6UzrXOvSDPhM+Bzr/PgM6/z4DOv865zq7OuM63zrrOsc69IM6xz4HPh861zq/OsSDOsc+Az4wgzrHPhc+Ezq4gz4TOt869IM+Fz4DOv86yzr/Ou86uIM66zrHOuSDOtM61zr0gzq7PhM6xzr0gz4XPgM6/zrLOv867zq4gIgorIs+Dz4XOs8+Hz47Ovc61z4XPg863z4IuXG4iCisiXG4iCisizpjOsSDOvs61zrrOuc69zq7Pg861zrkgzrHPhc+Ez4zOvM6xz4TOsSDOtc+AzrHOvc6xzr3Or8+Hzr3Otc+Fz4POtyDPhM+Oz4HOsS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MzMzCittc2dpZCAiTm8gY2hhbmdlcyB0byBjb21taXQuIgorbXNnc3RyICLOlM61zr0gz4XPgM6sz4HPh86/z4XOvSDOsc67zrvOsc6zzq3PgiDPgM+Bzr/PgiDPhc+Azr/Oss6/zrvOri4iCisKKyM6IGxpYi9jb21taXQudGNsOjM0NworbXNnaWQgImNvbW1pdC10cmVlIGZhaWxlZDoiCittc2dzdHIgIs+Ezr8gY29tbWl0LXRyZWUgzrHPgM6tz4TPhc+HzrU6IgorCisjOiBsaWIvY29tbWl0LnRjbDozNjcKK21zZ2lkICJ1cGRhdGUtcmVmIGZhaWxlZDoiCittc2dzdHIgIs+Ezr8gdXBkYXRlLXJlZiDOsc+Azq3PhM+Fz4fOtToiCisKKyM6IGxpYi9jb21taXQudGNsOjQ1NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNyZWF0ZWQgY29tbWl0ICVzOiAlcyIKK21zZ3N0ciAizpTOt868zrnOv8+Fz4HOs86uzrjOt866zrUgz4XPgM6/zrLOv867zq4gJXM6ICVzIgorCisjOiBsaWIvY29uc29sZS50Y2w6NTkKK21zZ2lkICJXb3JraW5nLi4uIHBsZWFzZSB3YWl0Li4uIgorbXNnc3RyICLOk86vzr3Otc+EzrHOuSDOtc+BzrPOsc+Dzq/OsS4uLiDOoM6xz4HOsc66zrHOu8+OIM+AzrXPgc65zrzOrc69zrXPhM61Li4uIgorCisjOiBsaWIvY29uc29sZS50Y2w6MTg2Cittc2dpZCAiU3VjY2VzcyIKK21zZ3N0ciAizpXPgM65z4TPhc+Hzq/OsSIKKworIzogbGliL2NvbnNvbGUudGNsOjIwMAorbXNnaWQgIkVycm9yOiBDb21tYW5kIEZhaWxlZCIKK21zZ3N0ciAizqPPhs6szrvOvM6xOiDOlyDOlc69z4TOv867zq4gzpHPgM6tz4TPhc+HzrUiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDMKK21zZ2lkICJOdW1iZXIgb2YgbG9vc2Ugb2JqZWN0cyIKK21zZ3N0ciAizpHPgc65zrjOvM+Mz4IgzrXOu861z43OuM61z4HPic69IM6xzr3PhM65zrrOtc65zrzOrc69z4nOvSIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0NAorbXNnaWQgIkRpc2sgc3BhY2UgdXNlZCBieSBsb29zZSBvYmplY3RzIgorbXNnc3RyICLOp8+Oz4HOv8+CIM66zrHPhM61zrnOu867zrfOvM6tzr3Ov8+CIM6xz4DPjCDOtc67zrXPjc64zrXPgc6xIM6xzr3PhM65zrrOtc6vzrzOtc69zrEiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDUKK21zZ2lkICJOdW1iZXIgb2YgcGFja2VkIG9iamVjdHMiCittc2dzdHIgIs6Rz4HOuc64zrzPjM+CIM+AzrHOus61z4TOsc+BzrnPg868zq3Ovc+Jzr0gzrHOvc+EzrnOus61zrnOvM6tzr3Pic69IgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ2Cittc2dpZCAiTnVtYmVyIG9mIHBhY2tzIgorbXNnc3RyICLOkc+BzrnOuM68z4zPgiDPgM6xzrrOrc+Ez4nOvSIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0NworbXNnaWQgIkRpc2sgc3BhY2UgdXNlZCBieSBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAizqfPjs+Bzr/PgiDOus6xz4TOtc65zrvOu863zrzOrc69zr/PgiDOsc+Az4wgz4DOsc66zrXPhM6xz4HOuc+DzrzOrc69zrEgzrHOvc+EzrnOus61zq/OvM61zr3OsSIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0OAorbXNnaWQgIlBhY2tlZCBvYmplY3RzIHdhaXRpbmcgZm9yIHBydW5pbmciCittc2dzdHIgIs6gzrHOus61z4TOsc+BzrnPg868zq3Ovc6xIM6xzr3PhM65zrrOtc6vzrzOtc69zrEgzq3PhM6/zrnOvM6xIM6zzrnOsSDOus67zqzOtM61zrzOsSIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0OQorbXNnaWQgIkdhcmJhZ2UgZmlsZXMiCittc2dzdHIgIs6Gz4fPgc63z4PPhM6xIM6xz4HPh861zq/OsSIKKworIzogbGliL2RhdGFiYXNlLnRjbDo3MgorbXNnaWQgIkNvbXByZXNzaW5nIHRoZSBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM+Dz4XOvM+Azq/Otc+Dzrcgz4TOt8+CIM6yzqzPg863z4IgzrTOtc60zr/OvM6tzr3Pic69IM6xzr3PhM65zrrOtc65zrzOrc69z4nOvSIKKworIzogbGliL2RhdGFiYXNlLnRjbDo4MworbXNnaWQgIlZlcmlmeWluZyB0aGUgb2JqZWN0IGRhdGFiYXNlIHdpdGggZnNjay1vYmplY3RzIgorbXNnc3RyICIiCisizpPOr869zrXPhM6xzrkgzrXPgM6xzrvOrs64zrXPhc+Dzrcgz4TOt8+CIM6yzqzPg863z4IgzrTOtc60zr/OvM6tzr3Pic69IM6xzr3PhM65zrrOtc65zrzOrc69z4nOvSDOvM61IM6xzr3PhM65zrrOtc6vzrzOtc69zrEgZnNjayIKKworIzogbGliL2RhdGFiYXNlLnRjbDoxMDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyByZXBvc2l0b3J5IGN1cnJlbnRseSBoYXMgYXBwcm94aW1hdGVseSAlaSBsb29zZSBvYmplY3RzLlxuIgorIlxuIgorIlRvIG1haW50YWluIG9wdGltYWwgcGVyZm9ybWFuY2UgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgY29tcHJlc3MgIgorInRoZSBkYXRhYmFzZSB3aGVuIG1vcmUgdGhhbiAlaSBsb29zZSBvYmplY3RzIGV4aXN0LlxuIgorIlxuIgorIkNvbXByZXNzIHRoZSBkYXRhYmFzZSBub3c/IgorbXNnc3RyICIiCisizpHPhc+Ez4wgz4TOvyDOsc+Azr/OuM61z4TOrs+BzrnOvyDOrc+HzrXOuSDOsc+Fz4TOriDPhM63IM+Dz4TOuc6zzrzOriDPgM61z4HOr8+Azr/PhSAlaSDOtc67zrXPjc64zrXPgc6xIM6xzr3PhM65zrrOtc6vzrzOtc69zrEuXG4iCisiXG4iCisizpPOuc6xIM+EzrcgzrTOuc6xz4TOrs+BzrfPg863IM6yzq3Ou8+EzrnPg8+Ez4nOvSDOtc+AzrnOtM+Mz4POtc+Jzr0gz4PPhc69zrnPg8+EzqzPhM6xzrkgzr3OsSDPg8+FzrzPgM65zq3Pg861z4TOtSDPhM63IM6yzqzPg863ICIKKyLOtM61zrTOv868zq3Ovc+Jzr0gz4zPhM6xzr0gz4XPgM6sz4HPh86/z4XOvSDPgM61z4HOuc+Dz4PPjM+EzrXPgc6xIM6xz4DPjCAlaSDOtc67zrXPjc64zrXPgc6xIM6xzr3PhM65zrrOtc6vzrzOtc69zrEuXG4iCisiXG4iCisizqPPhc68z4DOr861z4POtyDPhM63z4IgzrLOrM+DzrfPgiDOtM61zrTOv868zq3Ovc+Jzr0gz4TPjs+BzrE7IgorCisjOiBsaWIvZGF0ZS50Y2w6MjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGRhdGUgZnJvbSBHaXQ6ICVzIgorbXNnc3RyICLOnM63IM6tzrPOus+Fz4HOtyDOt868zrXPgc6/zrzOt869zq/OsSDOsc+Az4wgz4TOvyBHaXQ6ICVzIgorCisjOiBsaWIvZGlmZi50Y2w6NDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiTm8gZGlmZmVyZW5jZXMgZGV0ZWN0ZWQuXG4iCisiXG4iCisiJXMgaGFzIG5vIGNoYW5nZXMuXG4iCisiXG4iCisiVGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoaXMgZmlsZSB3YXMgdXBkYXRlZCBieSBhbm90aGVyIGFwcGxpY2F0aW9uLCBidXQgIgorInRoZSBjb250ZW50IHdpdGhpbiB0aGUgZmlsZSB3YXMgbm90IGNoYW5nZWQuXG4iCisiXG4iCisiQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gZmluZCBvdGhlciBmaWxlcyB3aGljaCBtYXkgaGF2ZSAiCisidGhlIHNhbWUgc3RhdGUuIgorbXNnc3RyICIiCisizpTOtc69IM6xzr3Ouc+Hzr3Otc+NzrjOt866zrHOvSDOtM65zrHPhs6/z4HOrc+CLlxuIgorIlxuIgorIs6kzr8gJXMgzrTOtc69IM6tz4fOtc65IM6xzrvOu86xzrPOrc+CLiIKKyJcbiIKKyLOlyDOt868zrXPgc6/zrzOt869zq/OsSDPhM+Bzr/PgM6/z4DOv86vzrfPg863z4IgzrHPhc+Ezr/PjSDPhM6/z4UgzrHPgc+HzrXOr86/z4UgzrXOvc63zrzOtc+Bz47OuM63zrrOtSDOsc+Az4wgzqzOu867zrcgzrXPhs6xz4HOvM6/zrPOriwgIgorIs6xzrvOu86sIM+Ezr8gz4DOtc+BzrnOtc+Hz4zOvM61zr3OvyDPhM6/z4UgzrHPgc+HzrXOr86/z4UgzrTOtc69IM6szrvOu86xzr7OtS5cbiIKKyJcbiIKKyLOmM6xIM6+zrXOus65zr3Ors+DzrXOuSDOsc+Fz4TPjM68zrHPhM6xIM61z4DOsc69zrHOvc6vz4fOvc61z4XPg863IM6zzrnOsSDOvc6xIM6yz4HOtc64zr/Pjc69IM6szrvOu86xIM6xz4HPh861zq/OsSDPgM6/z4UgzrzPgM6/z4HOtc6vIM69zrEgIgorIs6yz4HOr8+DzrrOv869z4TOsc65IM+DzrUgzq/OtM65zrEgzrrOsc+EzqzPg8+EzrHPg863LiIKKworIzogbGliL2RpZmYudGNsOjgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTG9hZGluZyBkaWZmIG9mICVzLi4uIgorbXNnc3RyICLOk86vzr3Otc+EzrHOuSDPhs+Mz4HPhM+Jz4POtyDOtM65zrHPhs6/z4HOrM+CIM+Ezr/PhSAlcy4uLiIKKworIzogbGliL2RpZmYudGNsOjExNCBsaWIvZGlmZi50Y2w6MTg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgJXMiCittc2dzdHIgIs6UzrXOvSDOtc6vzr3Osc65IM60z4XOvc6xz4TOriDOtyDPgM+Bzr/Oss6/zrvOriDPhM6/z4UgJXMiCisKKyM6IGxpYi9kaWZmLnRjbDoxMTUKK21zZ2lkICJFcnJvciBsb2FkaW5nIGZpbGU6IgorbXNnc3RyICLOo8+GzqzOu868zrEgz4bPjM+Bz4TPic+DzrfPgiDOsc+Bz4fOtc6vzr/PhToiCisKKyM6IGxpYi9kaWZmLnRjbDoxMjIKK21zZ2lkICJHaXQgUmVwb3NpdG9yeSAoc3VicHJvamVjdCkiCittc2dzdHIgIs6Rz4DOv864zrXPhM6uz4HOuc6/IEdpdCAozrjPhc6zzrHPhM+BzrnOus+MIM6tz4HOs86/KSIKKworIzogbGliL2RpZmYudGNsOjEzNAorbXNnaWQgIiogQmluYXJ5IGZpbGUgKG5vdCBzaG93aW5nIGNvbnRlbnQpLiIKK21zZ3N0ciAiKiDOlM+FzrHOtM65zrrPjCDOsc+Bz4fOtc6vzr8gKM68zrcgzrXOvM+GzqzOvc65z4POtyDPgM61z4HOuc61z4fOv868zq3Ovc6/z4UpLiIKKworIzogbGliL2RpZmYudGNsOjE4NQorbXNnaWQgIkVycm9yIGxvYWRpbmcgZGlmZjoiCittc2dzdHIgIs6jz4bOrM67zrzOsSDPhs+Mz4HPhM+Jz4POt8+CIM60zrnOsc+Gzr/Pgc6sz4I6IgorCisjOiBsaWIvZGlmZi50Y2w6MzAzCittc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCittc2dzdHIgIs6Rz4DOv8+Ez4XPh86vzrEgzrHPgM6/z4PPhM6xzrTOuc6/z4DOv86vzrfPg863z4IgzrXPgM65zrvOtc6zzrzOrc69zr/PhSDOus6/zrzOvM6xz4TOuc6/z40uIgorCisjOiBsaWIvZGlmZi50Y2w6MzEwCittc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGh1bmsuIgorbXNnc3RyICLOkc+Azr/PhM+Fz4fOr86xIM+Dz4TOsc60zrnOv8+Azr/Or863z4POt8+CIM61z4DOuc67zrXOs868zq3Ovc6/z4UgzrrOv868zrzOsc+EzrnOv8+NLiIKKworIzogbGliL2Vycm9yLnRjbDoyMCBsaWIvZXJyb3IudGNsOjExNAorbXNnaWQgImVycm9yIgorbXNnc3RyICLPg8+GzqzOu868zrEiCisKKyM6IGxpYi9lcnJvci50Y2w6MzYKK21zZ2lkICJ3YXJuaW5nIgorbXNnc3RyICLPgM+Bzr/Otc65zrTOv8+Azr/Or863z4POtyIKKworIzogbGliL2Vycm9yLnRjbDo5NAorbXNnaWQgIllvdSBtdXN0IGNvcnJlY3QgdGhlIGFib3ZlIGVycm9ycyBiZWZvcmUgY29tbWl0dGluZy4iCittc2dzdHIgIs6gz4HOrc+AzrXOuSDOvc6xIM60zrnOv8+BzrjPjs+DzrXPhM61IM+EzrEgz4DOsc+BzrHPgM6szr3PiSDOu86szrjOtyDPgM+BzrnOvSDPhM63zr0gz4XPgM6/zrLOv867zq4uIgorCisjOiBsaWIvaW5kZXgudGNsOjYKK21zZ2lkICJVbmFibGUgdG8gdW5sb2NrIHRoZSBpbmRleC4iCittc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzr7Otc66zrvOtc65zrTPjs68zrHPhM6/z4Igz4TOv8+FIM61z4XPgc61z4TOt8+Bzq/Ov8+FLiIKKworIzogbGliL2luZGV4LnRjbDoxNQorbXNnaWQgIkluZGV4IEVycm9yIgorbXNnc3RyICLOo8+GzqzOu868zrEgzpXPhc+BzrXPhM63z4HOr86/z4UiCisKKyM6IGxpYi9pbmRleC50Y2w6MjEKK21zZ2lkICIiCisiVXBkYXRpbmcgdGhlIEdpdCBpbmRleCBmYWlsZWQuICBBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byAiCisicmVzeW5jaHJvbml6ZSBnaXQtZ3VpLiIKK21zZ3N0ciAiIgorIs6XIM61zr3Ot868zq3Pgc+Jz4POtyDPhM6/z4UgzrXPhc+BzrXPhM63z4HOr86/z4UgR2l0IM6xz4DOrc+Ez4XPh861LiDOmM6xIM6+zrXOus65zr3Ors+DzrXOuSDOsc+Fz4TPjM68zrHPhM6xIM61z4DOsc69zrHOvc6vz4fOvc61z4XPg863ICIKKyLOs865zrEgzrXPgM6xzr3Osc+Dz4XOs8+Hz4HOv869zrnPg868z4wgz4TOv8+FIGdpdC1ndWkuIgorCisjOiBsaWIvaW5kZXgudGNsOjI3Cittc2dpZCAiQ29udGludWUiCittc2dzdHIgIs6jz4XOvc6tz4fOtc65zrEiCisKKyM6IGxpYi9pbmRleC50Y2w6MzEKK21zZ2lkICJVbmxvY2sgSW5kZXgiCittc2dzdHIgIs6ezrXOus67zrXOr860z4nOvM6xIM6Vz4XPgc61z4TOt8+Bzq/Ov8+FIgorCisjOiBsaWIvaW5kZXgudGNsOjI4MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2luZyAlcyBmcm9tIGNvbW1pdCIKK21zZ3N0ciAizpHPgM6/z4PPhM6xzrTOuc6/z4DOv86vzrfPg863ICVzIM6xz4DPjCDPhc+Azr/Oss6/zrvOriIKKworIzogbGliL2luZGV4LnRjbDozMTMKK21zZ2lkICJSZWFkeSB0byBjb21taXQuIgorbXNnc3RyICLOiM+Ezr/Ouc68zr8gz4DPgc6/z4Igz4XPgM6/zrLOv867zq4uIgorCisjOiBsaWIvaW5kZXgudGNsOjMyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFkZGluZyAlcyIKK21zZ3N0ciAizqDPgc6/z4POuM6uzrrOtyAlcyIKKworIzogbGliL2luZGV4LnRjbDozODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiBmaWxlICVzPyIKK21zZ3N0ciAizpHOvc6xzq/Pgc61z4POtyDOsc67zrvOsc6zz47OvSDPg8+Ezr8gzrHPgc+HzrXOr86/ICVzOyIKKworIzogbGliL2luZGV4LnRjbDozODMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiB0aGVzZSAlaSBmaWxlcz8iCittc2dzdHIgIs6Rzr3Osc6vz4HOtc+DzrcgzrHOu867zrHOs8+Ozr0gz4POtSDOsc+Fz4TOrCDPhM6xICVpIM6xz4HPh861zq/OsTsiCisKKyM6IGxpYi9pbmRleC50Y2w6MzkxCittc2dpZCAiQW55IHVuc3RhZ2VkIGNoYW5nZXMgd2lsbCBiZSBwZXJtYW5lbnRseSBsb3N0IGJ5IHRoZSByZXZlcnQuIgorbXNnc3RyICIiCisizozOu861z4Igzr/OuSDOvM63IM+Dz4TOsc60zrnOv8+Azr/Ouc63zrzOrc69zrXPgiDOsc67zrvOsc6zzq3PgiDOuM6xIM+HzrHOuM6/z43OvSDOv8+BzrnPg8+EzrnOus6sIM6xz4DPjCDPhM63zr0gzrHOvc6xzq/Pgc61z4POty4iCisKKyM6IGxpYi9pbmRleC50Y2w6Mzk0Cittc2dpZCAiRG8gTm90aGluZyIKK21zZ3N0ciAizprOsc68zq/OsSDOlc69zq3Pgc6zzrXOuc6xIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzCittc2dpZCAiIgorIkNhbm5vdCBtZXJnZSB3aGlsZSBhbWVuZGluZy5cbiIKKyJcbiIKKyJZb3UgbXVzdCBmaW5pc2ggYW1lbmRpbmcgdGhpcyBjb21taXQgYmVmb3JlIHN0YXJ0aW5nIGFueSB0eXBlIG9mIG1lcmdlLlxuIgorbXNnc3RyICIiCisizpTOtSDOs86vzr3Otc+EzrHOuSDPg8+FzrPPh8+Ozr3Otc+Fz4POtyDOus6xzrjPjs+CIM60zrnOv8+BzrjPjs69zrXPhM61LlxuIgorIlxuIgorIs6gz4HOrc+AzrXOuSDOvc6xIM+EzrXOu861zrnPjs+DzrXPhM61IM+EzrcgzrTOuc+Mz4HOuM+Jz4POtyDOsc+Fz4TOrs+CIM+EzrfPgiDPhc+Azr/Oss6/zrvOrs+CIM+Az4HOuc69IM69zrEgzr7Otc66zrnOvc6uz4POtc+EzrUgIgorIs6/z4DOv865zrHPg860zq7PgM6/z4TOtSDOvM6/z4HPhs6uz4Igz4PPhc6zz4fPjs69zrXPhc+DzrcuXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjcKK21zZ2lkICIiCisiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCisiXG4iCisiQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKKyJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGEgbWVyZ2UgY2FuIGJlIHBlcmZvcm1lZC5cbiIKKyJcbiIKKyJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKK21zZ3N0ciAiIgorIs6XIM+EzrXOu861z4XPhM6xzq/OsSDOus6xz4TOrM+Dz4TOsc+Dzrcgz4DOv8+FIM6xzr3Ouc+Hzr3Otc+NzrjOt866zrUgzrTOtSDPg8+FzrzPhs+Jzr3Otc6vIM68zrUgz4TOt869IM66zrHPhM6sz4PPhM6xz4POtyDPhM6/z4UgIgorIs6xz4DOv864zrXPhM63z4HOr86/z4UuXG4iCisiXG4iCisizprOrM+Azr/Ouc6/IM6szrvOu86/IM+Az4HPjM6zz4HOsc68zrzOsSBHaXQgz4TPgc6/z4DOv8+Azr/Or863z4POtSDPhM6/IM6xz4DOv864zrXPhM6uz4HOuc6/IM6xz4DPjCDPhM63zr0gz4TOtc67zrXPhc+EzrHOr86xICIKKyLOsc69zq/Ph869zrXPhc+DzrcuIM6gz4HOrc+AzrXOuSDOvc6xIM6zzq/Ovc61zrkgzrXPgM6xzr3Osc69zq/Ph869zrXPhc+Dzrcgz4DPgc65zr0gz4TOtyDOtM65zrXOvc6tz4HOs861zrnOsSDPg8+FzrPPh8+Ozr3Otc+Fz4POt8+CLlxuIgorIlxuIgorIs6XIM61z4DOsc69zrHOvc6vz4fOvc61z4XPg863IM64zrEgzr7Otc66zrnOvc6uz4POtc65IM6xz4XPhM+MzrzOsc+EzrEgz4TPjs+BzrEuXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6NDQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY29uZmxpY3RlZCBtZXJnZS5cbiIKKyJcbiIKKyJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuXG4iCisiXG4iCisiWW91IG11c3QgcmVzb2x2ZSB0aGVtLCBzdGFnZSB0aGUgZmlsZSwgYW5kIGNvbW1pdCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCAiCisibWVyZ2UuICBPbmx5IHRoZW4gY2FuIHlvdSBiZWdpbiBhbm90aGVyIG1lcmdlLlxuIgorbXNnc3RyICIiCisizpLPgc6vz4POus61z4PPhM61IM+Dz4TOvyDOvM6tz4POvyDOvM65zrHPgiDPg8+FzrPOus+Bzr/Phc+MzrzOtc69zrfPgiDPg8+FzrPPh8+Ozr3Otc+Fz4POt8+CLlxuIgorIlxuIgorIs6kzr8gzrHPgc+HzrXOr86/ICVzIM6tz4fOtc65IM+Dz4XOs866z4HOv8+Nz4POtc65z4Igz4PPhc6zz4fPjs69zrXPhc+DzrfPgi5cbiIKKyJcbiIKKyLOoM+Bzq3PgM61zrkgzr3OsSDPhM65z4IgzrXPgM65zrvPjc+DzrXPhM61LCDOvc6xIM+Dz4TOsc60zrnOv8+Azr/Ouc6uz4POtc+EzrUgz4TOvyDOsc+Bz4fOtc6vzr8sIM66zrHOuSDOvc6xIM66zqzOvc61z4TOtSDPhc+Azr/Oss6/zrvOriAiCisizrPOuc6xIM69zrEgzr/Ou86/zrrOu863z4HPjs+DzrXPhM61IM+EzrfOvSDPhM+Bzq3Ph86/z4XPg86xIM+Dz4XOs8+Hz47Ovc61z4XPg863LiDOnM+Mzr3OvyDPhM+Mz4TOtSDOvM+Azr/Pgc61zq/PhM61IM69zrEgIgorIs6+zrXOus65zr3Ors+DzrXPhM61IM6szrvOu863IM+Dz4XOs8+Hz47Ovc61z4XPg863LlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjU0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoYW5nZS5cbiIKKyJcbiIKKyJGaWxlICVzIGlzIG1vZGlmaWVkLlxuIgorIlxuIgorIllvdSBzaG91bGQgY29tcGxldGUgdGhlIGN1cnJlbnQgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhIG1lcmdlLiAgRG9pbmcgc28gIgorIndpbGwgaGVscCB5b3UgYWJvcnQgYSBmYWlsZWQgbWVyZ2UsIHNob3VsZCB0aGUgbmVlZCBhcmlzZS5cbiIKK21zZ3N0ciAiIgorIs6Sz4HOr8+DzrrOtc+Dz4TOtSDPg8+Ezr8gzrzOrc+Dzr8gzrzOuc6xz4IgzrHOu867zrHOs86uz4IuXG4iCisiXG4iCisizqTOvyDOsc+Bz4fOtc6vzr8gJXMgzq3Ph861zrkgz4TPgc6/z4DOv8+Azr/Ouc63zrjOtc6vLlxuIgorIlxuIgorIs6gz4HOrc+AzrXOuSDOvc6xIM6/zrvOv866zrvOt8+Bz47Pg861z4TOtSDPhM63zr0gz4TPgc6tz4fOv8+Fz4POsSDPg8+FzrPPh8+Ozr3Otc+Fz4POtyDPgM+BzrnOvSDOvc6xIM6+zrXOus65zr3Ors+DzrXPhM61IM+Dz4XOs8+Hz47Ovc61z4XPg863LiIKKyIgzpHPhc+Ez4wgzrLOv863zrjOrCDPg8+EzrfOvSDOsc66z43Pgc+Jz4POtyDOsc+Azr/PhM+Fz4fOt868zq3Ovc63z4Igz4PPhc6zz4fPjs69zrXPhc+DzrfPgiwgzrXOrM69IM+Hz4HOtc65zrHPg8+EzrXOry5cbiIKKworIzogbGliL21lcmdlLnRjbDoxMDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlcyBvZiAlcyIKK21zZ3N0ciAiJXMgzrHPgM+MICVzIgorCisjOiBsaWIvbWVyZ2UudGNsOjExOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIk1lcmdpbmcgJXMgYW5kICVzLi4uIgorbXNnc3RyICLOk86vzr3Otc+EzrHOuSDPg8+FzrPPh8+Ozr3Otc+Fz4POtyDPhM6/z4UgJXMgzrzOtSDPhM6/ICVzLi4uIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzMAorbXNnaWQgIk1lcmdlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIgorbXNnc3RyICLOlyDPg8+FzrPPh8+Ozr3Otc+Fz4POtyDOv867zr/Ous67zrfPgc+OzrjOt866zrUgzrXPgM65z4TPhc+Hz47Pgi4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTMyCittc2dpZCAiTWVyZ2UgZmFpbGVkLiAgQ29uZmxpY3QgcmVzb2x1dGlvbiBpcyByZXF1aXJlZC4iCittc2dzdHIgIs6XIM+Dz4XOs8+Hz47Ovc61z4XPg863IM6xz4DOrc+Ez4XPh861LiDOkc+AzrHOuc+EzrXOr8+EzrHOuSDOtc+Azq/Ou8+Fz4POtyDPg8+FzrPOus+Bzr/Pjc+DzrXPic69LiIKKworIzogbGliL21lcmdlLnRjbDoxNTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnZSBJbnRvICVzIgorbXNnc3RyICLOo8+FzrPPh8+Ozr3Otc+Fz4POtyDOvM61ICVzIgorCisjOiBsaWIvbWVyZ2UudGNsOjE3NgorbXNnaWQgIlJldmlzaW9uIFRvIE1lcmdlIgorbXNnc3RyICLOkc69zrHOuM61z47Pgc63z4POtyDOoM+Bzr/PgiDOo8+FzrPPh8+Ozr3Otc+Fz4POtyIKKworIzogbGliL21lcmdlLnRjbDoyMTEKK21zZ2lkICIiCisiQ2Fubm90IGFib3J0IHdoaWxlIGFtZW5kaW5nLlxuIgorIlxuIgorIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIs6UzrUgzrPOr869zrXPhM6xzrkgzrHOus+Nz4HPic+DzrcgzrrOsc64z47PgiDOtM65zr/Pgc64z47Ovc61z4TOtS5cbiIKKyJcbiIKKyLOoM+Bzq3PgM61zrkgzr3OsSDPhM61zrvOtc65z47Pg861z4TOtSDPhM63IM60zrnPjM+BzrjPic+DzrcgzrHPhc+Ezq7PgiDPhM63z4Igz4XPgM6/zrLOv867zq7Pgi5cbiIKKworIzogbGliL21lcmdlLnRjbDoyMjEKK21zZ2lkICIiCisiQWJvcnQgbWVyZ2U/XG4iCisiXG4iCisiQWJvcnRpbmcgdGhlIGN1cnJlbnQgbWVyZ2Ugd2lsbCBjYXVzZSAqQUxMKiB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIGJlIGxvc3QuXG4iCisiXG4iCisiQ29udGludWUgd2l0aCBhYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZT8iCittc2dzdHIgIiIKKyLOkc66z43Pgc+Jz4POtyDPg8+FzrPPh8+Ozr3Otc+Fz4POt8+CO1xuIgorIlxuIgorIs6XIM6xzrrPjc+Bz4nPg863IM+EzrfPgiDPhM+Bzq3Ph86/z4XPg86xz4Igz4PPhc6zz4fPjs69zrXPhc+DzrfPgiDOuM6xIM+Az4HOv866zrHOu86tz4POtc65IM6xz4DPjs67zrXOuc6xICrOn86bzqnOnSogz4TPic69IM68zrcgIgorIs+Fz4DOv86yzrXOss67zrfOvM6tzr3Pic69IM6xzrvOu86xzrPPjs69LlxuIgorIlxuIgorIs6dzrEgz4DPgc6/z4fPic+Bzq7Pg861zrkgzrcgzrHOus+Nz4HPic+Dzrcgz4TOt8+CIM+Ez4HOrc+Hzr/Phc+DzrHPgiDPg8+FzrPPh8+Ozr3Otc+Fz4POt8+COyIKKworIzogbGliL21lcmdlLnRjbDoyMjcKK21zZ2lkICIiCisiUmVzZXQgY2hhbmdlcz9cbiIKKyJcbiIKKyJSZXNldHRpbmcgdGhlIGNoYW5nZXMgd2lsbCBjYXVzZSAqQUxMKiB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIGJlIGxvc3QuXG4iCisiXG4iCisiQ29udGludWUgd2l0aCByZXNldHRpbmcgdGhlIGN1cnJlbnQgY2hhbmdlcz8iCittc2dzdHIgIiIKKyLOlc+AzrHOvc6xz4bOv8+BzqwgzrHOu867zrHOs8+Ozr07XG4iCisiXG4iCisizpcgzrXPgM6xzr3Osc+Gzr/Pgc6sIM+Ez4nOvSDOsc67zrvOsc6zz47OvSDOuM6xIM+Az4HOv866zrHOu86tz4POtc65IM6xz4DPjs67zrXOuc6xICrOn86bzqnOnSogz4TPic69IM68zrcgz4XPgM6/zrLOtc6yzrvOt868zq3Ovc+Jzr0gIgorIs6xzrvOu86xzrPPjs69LlxuIgorIlxuIgorIs6dzrEgz4PPhc69zrXPh86vz4POtc65IM63IM61z4DOsc69zrHPhs6/z4HOrCDPhM+Jzr0gz4TPgc6tz4fOv8+Fz4PPic69IM6xzrvOu86xzrPPjs69OyIKKworIzogbGliL21lcmdlLnRjbDoyMzgKK21zZ2lkICJBYm9ydGluZyIKK21zZ3N0ciAizpPOr869zrXPhM6xzrkgzrHOus+Nz4HPic+DzrciCisKKyM6IGxpYi9tZXJnZS50Y2w6MjM4Cittc2dpZCAiZmlsZXMgcmVzZXQiCittc2dzdHIgIs6xz4HPh861zq/OsSDPgM6/z4UgzrXPgM6xzr3Osc+Gzq3Pgc64zrfOus6xzr0iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjY1Cittc2dpZCAiQWJvcnQgZmFpbGVkLiIKK21zZ3N0ciAizpcgzrHOus+Nz4HPic+DzrcgzrHPgM6tz4TPhc+HzrUuIgorCisjOiBsaWIvbWVyZ2UudGNsOjI2NworbXNnaWQgIkFib3J0IGNvbXBsZXRlZC4gIFJlYWR5LiIKK21zZ3N0ciAizpcgzrHOus+Nz4HPic+DzrcgzrHPgM6tz4TPhc+HzrUuIM6Iz4TOv865zrzOvy4iCisKKyM6IGxpYi9vcHRpb24udGNsOjk1Cittc2dpZCAiUmVzdG9yZSBEZWZhdWx0cyIKK21zZ3N0ciAizpXPgM6xzr3Osc+Gzr/Pgc6sIM6gz4HOv861z4DOuc67zr/Os8+Ozr0iCisKKyM6IGxpYi9vcHRpb24udGNsOjk5Cittc2dpZCAiU2F2ZSIKK21zZ3N0ciAizpHPgM6/zrjOrs66zrXPhc+DzrciCisKKyM6IGxpYi9vcHRpb24udGNsOjEwOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIFJlcG9zaXRvcnkiCittc2dzdHIgIiVzIM6Rz4DOv864zrXPhM6uz4HOuc6/IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMTAKK21zZ2lkICJHbG9iYWwgKEFsbCBSZXBvc2l0b3JpZXMpIgorbXNnc3RyICLOn867zrnOus+MICjOjM67zrEgz4TOsSDOkc+Azr/OuM61z4TOrs+BzrnOsSkiCisKKyM6IGxpYi9vcHRpb24udGNsOjExNgorbXNnaWQgIlVzZXIgTmFtZSIKK21zZ3N0ciAizozOvc6/zrzOsSDOp8+Bzq7Pg8+EzrciCisKKyM6IGxpYi9vcHRpb24udGNsOjExNworbXNnaWQgIkVtYWlsIEFkZHJlc3MiCittc2dzdHIgIs6UzrnOtc+NzrjPhc69z4POtyBFbWFpbCIKKworIzogbGliL29wdGlvbi50Y2w6MTE5Cittc2dpZCAiU3VtbWFyaXplIE1lcmdlIENvbW1pdHMiCittc2dzdHIgIs6gzrXPgc6vzrvOt8+IzrcgzqXPgM6/zrLOv867z47OvSDOo8+FzrPPh8+Ozr3Otc+Fz4POt8+CIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMjAKK21zZ2lkICJNZXJnZSBWZXJib3NpdHkiCittc2dzdHIgIs6bzrXPgM+Ezr/OvM6tz4HOtc65zrEgzqPPhc6zz4fPjs69zrXPhc+DzrfPgiIKKworIzogbGliL29wdGlvbi50Y2w6MTIxCittc2dpZCAiU2hvdyBEaWZmc3RhdCBBZnRlciBNZXJnZSIKK21zZ3N0ciAizqDPgc6/zrLOv867zq4gzqPPhM6xz4TOuc+Dz4TOuc66z47OvSDOlM65zrHPhs6/z4HOrM+CIM6czrXPhM6sIM6xz4DPjCDOo8+FzrPPh8+Ozr3Otc+Fz4POtyIKKworIzogbGliL29wdGlvbi50Y2w6MTIzCittc2dpZCAiVHJ1c3QgRmlsZSBNb2RpZmljYXRpb24gVGltZXN0YW1wcyIKK21zZ3N0ciAizpXOvM+AzrnPg8+Ezr/Pg8+Nzr3OtyDOl868zrXPgc6/zrzOt869zrnPjs69IM6czrXPhM6xz4TPgc6/z4DOrs+CIM6Rz4HPh861zq/Pic69IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMjQKK21zZ2lkICJQcnVuZSBUcmFja2luZyBCcmFuY2hlcyBEdXJpbmcgRmV0Y2giCittc2dzdHIgIs6azrvOrM60zrXOvM6xIM6azrvOrM60z4nOvSDOoM6xz4HOsc66zr/Ou86/z43OuM63z4POt8+CIM6azrHPhM6sIM6kzrfOvSDOkc69zqzOus+EzrfPg863IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMjUKK21zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2hlcyIKK21zZ3N0ciAizqPPhc68z4bPic69zq/OsSDOms67zqzOtM+Jzr0gzqDOsc+BzrHOus6/zrvOv8+NzrjOt8+DzrfPgiIKKworIzogbGliL29wdGlvbi50Y2w6MTI2Cittc2dpZCAiTnVtYmVyIG9mIERpZmYgQ29udGV4dCBMaW5lcyIKK21zZ3N0ciAizpHPgc65zrjOvM+Mz4IgzpPPgc6xzrzOvM+Ozr0gzpXOvc69zr/Ouc6/zrvOv86zzrnOus6/z40gzqDOu86xzrnPg86vzr/PhSDOlM65zrHPhs6/z4HOrM+CIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMjcKK21zZ2lkICJDb21taXQgTWVzc2FnZSBUZXh0IFdpZHRoIgorbXNnc3RyICLOoM67zqzPhM6/z4IgzprOtc65zrzOrc69zr/PhSDOnM63zr3Pjc68zrHPhM6/z4IgzqXPgM6/zrLOv867zq7PgiIKKworIzogbGliL29wdGlvbi50Y2w6MTI4Cittc2dpZCAiTmV3IEJyYW5jaCBOYW1lIFRlbXBsYXRlIgorbXNnc3RyICLOnc6tzr8gzqDPgc+Mz4TPhc+Azr8gzp/Ovc+MzrzOsc+Ezr/PgiDOms67zqzOtM6/z4UiCisKKyM6IGxpYi9vcHRpb24udGNsOjE5MgorbXNnaWQgIlNwZWxsaW5nIERpY3Rpb25hcnk6IgorbXNnc3RyICLOm861zr7Ouc66z4wgzp/Pgc64zr/Os8+BzrHPhs6vzrHPgjoiCisKKyM6IGxpYi9vcHRpb24udGNsOjIxNgorbXNnaWQgIkNoYW5nZSBGb250IgorbXNnc3RyICLOkc67zrvOsc6zzq4gzpPPgc6xzrzOvM6xz4TOv8+DzrXOuc+BzqzPgiIKKworIzogbGliL29wdGlvbi50Y2w6MjIwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2hvb3NlICVzIgorbXNnc3RyICLOlc+AzrnOu86/zrPOriAlcyIKKworIzogbGliL29wdGlvbi50Y2w6MjI2CisjLCBmdXp6eQorbXNnaWQgInB0LiIKK21zZ3N0ciAiIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyNDAKK21zZ2lkICJQcmVmZXJlbmNlcyIKK21zZ3N0ciAizqDPgc6/z4TOuc68zq7Pg861zrnPgiIKKworIzogbGliL29wdGlvbi50Y2w6Mjc1Cittc2dpZCAiRmFpbGVkIHRvIGNvbXBsZXRlbHkgc2F2ZSBvcHRpb25zOiIKK21zZ3N0ciAizpHPgM6/z4TPhc+Hzq/OsSDPgM67zq7Pgc6/z4XPgiDOsc+Azr/OuM6uzrrOtc+Fz4POt8+CIM61z4DOuc67zr/Os8+Ozr06IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzQKK21zZ2lkICJEZWxldGUgUmVtb3RlIEJyYW5jaCIKK21zZ3N0ciAizpTOuc6xzrPPgc6xz4bOriDOkc+Azr/OvM6xzrrPgc+Fz4POvM6tzr3Ov8+FIM6azrvOrM60zr/PhSIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0NworbXNnaWQgIkZyb20gUmVwb3NpdG9yeSIKK21zZ3N0ciAizpHPgM+MIM6Rz4DOv864zrXPhM6uz4HOuc6/IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjUwIGxpYi90cmFuc3BvcnQudGNsOjEyMworbXNnaWQgIlJlbW90ZToiCittc2dzdHIgIs6Rz4DOv868zrHOus+Bz4XPg868zq3Ovc6/OiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo2NiBsaWIvdHJhbnNwb3J0LnRjbDoxMzgKKyMsIGZ1enp5Cittc2dpZCAiQXJiaXRyYXJ5IFVSTDoiCittc2dzdHIgIs6Rz4XOuM6xzq/Pgc61z4TOvyBVUkw6IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjg0Cittc2dpZCAiQnJhbmNoZXMiCittc2dzdHIgIs6azrvOrM60zr/OuSIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMDkKK21zZ2lkICJEZWxldGUgT25seSBJZiIKK21zZ3N0ciAizpTOuc6xzrPPgc6xz4bOriDOnM+Mzr3OvyDOlc6szr0iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTExCittc2dpZCAiTWVyZ2VkIEludG86IgorbXNnc3RyICLOo8+FzrPPh8+Jzr3Otc+FzrzOrc69zr8gzpzOtToiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTE5Cittc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSBjaGVja3MpIgorbXNnc3RyICLOoM6szr3PhM6xICjOnM63IM60zrnOtc69zrXPgc6zzrfOuM6/z43OvSDOrc67zrXOs8+Hzr/OuSDPg8+FzrPPh8+Ozr3Otc+Fz4POt8+CKSIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxNTIKK21zZ2lkICJBIGJyYW5jaCBpcyByZXF1aXJlZCBmb3IgJ01lcmdlZCBJbnRvJy4iCittc2dzdHIgIs6Rz4DOsc65z4TOtc6vz4TOsc65IM6tzr3Osc+CIM66zrvOrM60zr/PgiDOs865zrEgJ86jz4XOs8+Hz4nOvc61z4XOvM6tzr3OvyDOnM61Jy4iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOlxuIgorIlxuIgorIiAtICVzIgorbXNnc3RyICIiCisizp/OuSDOtc6+zq7PgiDOus67zqzOtM6/zrkgzrTOtc69IM61zq/Ovc6xzrkgz4DOu86uz4HPic+CIM+Dz4XOs8+Hz4nOvc61z4XOvM6tzr3Ov865IM68zrUgz4TOvyAlczpcbiIKKyJcbiIKKyIgLSAlcyIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxODkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiT25lIG9yIG1vcmUgb2YgdGhlIG1lcmdlIHRlc3RzIGZhaWxlZCBiZWNhdXNlIHlvdSBoYXZlIG5vdCBmZXRjaGVkIHRoZSAiCisibmVjZXNzYXJ5IGNvbW1pdHMuICBUcnkgZmV0Y2hpbmcgZnJvbSAlcyBmaXJzdC4iCittc2dzdHIgIiIKKyLOnM6vzrEgzq4gz4DOtc+BzrnPg8+Dz4zPhM61z4HOtc+CIM6xz4DPjCDPhM65z4IgzrTOv866zrnOvM6tz4Igz4PPhc6zz4fPjs69zrXPhc+DzrfPgiDOsc+Azq3PhM+Fz4fOsc69IM61z4DOtc65zrTOriDOtM61zr0gzq3Ph861z4TOtSAiCisiz4bOrc+BzrXOuSDPhM65z4IgzrHOvc6xzrPOus6xzq/Otc+CIM+Fz4DOv86yzr/Ou86tz4IuIM6Uzr/Ous65zrzOrM+Dz4TOtSDOsc69zqzOus+EzrfPg863IM6xz4DPjCDPhM6/ICVzIM+Az4HPjs+EzrEuIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIwNworbXNnaWQgIlBsZWFzZSBzZWxlY3Qgb25lIG9yIG1vcmUgYnJhbmNoZXMgdG8gZGVsZXRlLiIKK21zZ3N0ciAizqDOsc+BzrHOus6xzrvPjiDOtc+AzrnOu86tzr7PhM61IM6tzr3Osc69IM6uIM+AzrXPgc65z4PPg8+Mz4TOtc+Bzr/Phc+CIM66zrvOrM60zr/Phc+CIM+Az4HOv8+CIM60zrnOsc6zz4HOsc+Gzq4uIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIxNgorbXNnaWQgIiIKKyJSZWNvdmVyaW5nIGRlbGV0ZWQgYnJhbmNoZXMgaXMgZGlmZmljdWx0LlxuIgorIlxuIgorIkRlbGV0ZSB0aGUgc2VsZWN0ZWQgYnJhbmNoZXM/IgorbXNnc3RyICIiCisizpcgzrHOvc6szrrPhM63z4POtyDOtM65zrXOs8+BzrHOvM68zq3Ovc+Jzr0gzrrOu86szrTPic69IM61zq/Ovc6xzrkgzrTPjc+DzrrOv867zrcuXG4iCisiXG4iCisizpTOuc6xzrPPgc6xz4bOriDPhM+Jzr0gzrXPgM65zrvOtc6zzrzOrc69z4nOvSDOus67zqzOtM+Jzr07IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkRlbGV0aW5nIGJyYW5jaGVzIGZyb20gJXMiCittc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM60zrnOsc6zz4HOsc+Gzq4gzrrOu86szrTPic69IM6xz4DPjCAlcyIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyODYKK21zZ2lkICJObyByZXBvc2l0b3J5IHNlbGVjdGVkLiIKK21zZ3N0ciAizpTOtc69IM6tz4fOtc65IM61z4DOuc67zrXOs861zq8gzrHPgM6/zrjOtc+Ezq7Pgc65zr8uIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nICVzLi4uIgorbXNnc3RyICLOkc69zq/Ph869zrXPhc+DzrcgJXMuLi4iCisKKyM6IGxpYi9yZW1vdGUudGNsOjE2NQorbXNnaWQgIlBydW5lIGZyb20iCittc2dzdHIgIs6azrvOrM60zrXOvM6xIM6xz4DPjCIKKworIzogbGliL3JlbW90ZS50Y2w6MTcwCittc2dpZCAiRmV0Y2ggZnJvbSIKK21zZ3N0ciAizpHOvc6szrrPhM63z4POtyDOsc+Az4wiCisKKyM6IGxpYi9yZW1vdGUudGNsOjIxMworbXNnaWQgIlB1c2ggdG8iCittc2dzdHIgIs6PzrjOt8+Dzrcgz4POtSIKKworIzogbGliL3Nob3J0Y3V0LnRjbDoyMCBsaWIvc2hvcnRjdXQudGNsOjYxCittc2dpZCAiQ2Fubm90IHdyaXRlIHNob3J0Y3V0OiIKK21zZ3N0ciAizpTOtSDOvM+Az4zPgc61z4POtSDOvc6xIM6xz4DOv864zrfOus61z4XPhM61zq8gzrcgz4PPhc69z4TPjM68zrXPhc+Dzrc6IgorCisjOiBsaWIvc2hvcnRjdXQudGNsOjEzNgorbXNnaWQgIkNhbm5vdCB3cml0ZSBpY29uOiIKK21zZ3N0ciAizpTOtSDOvM+Az4zPgc61z4POtSDOvc6xIM6xz4DOv864zrfOus61z4XPhM61zq8gz4TOvyDOtc65zrrOv869zq/OtM65zr86IgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NTcKK21zZ2lkICJVbnN1cHBvcnRlZCBzcGVsbCBjaGVja2VyIgorbXNnc3RyICJNzrcgz4XPgM6/z4PPhM63z4HOuc62z4zOvM61zr3Ov8+CIM61zrvOtc6zzrrPhM6uz4Igzr/Pgc64zr/Os8+BzrHPhs6vzrHPgiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjY1Cittc2dpZCAiU3BlbGwgY2hlY2tpbmcgaXMgdW5hdmFpbGFibGUiCittc2dzdHIgIs6IzrvOtc6zz4fOv8+CIM6/z4HOuM6/zrPPgc6xz4bOr86xz4IgzrzOtyDOtM65zrHOuM6tz4POuc68zr/PgiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjY4Cittc2dpZCAiSW52YWxpZCBzcGVsbCBjaGVja2luZyBjb25maWd1cmF0aW9uIgorbXNnc3RyICLOnM63IM6tzrPOus+Fz4HOtyDPgc+NzrjOvM65z4POtyDOtc67zq3Os8+Hzr/PhSDOv8+BzrjOv86zz4HOsc+Gzq/Osc+CIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnRpbmcgZGljdGlvbmFyeSB0byAlcy4iCittc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM61z4DOsc69zrHPhs6/z4HOrCDPhM6/z4UgzrvOtc6+zrnOus6/z40gz4POtSAlcy4iCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MworbXNnaWQgIlNwZWxsIGNoZWNrZXIgc2lsZW50bHkgZmFpbGVkIG9uIHN0YXJ0dXAiCittc2dzdHIgIs6fIM61zrvOtc6zzrrPhM6uz4Igzr/Pgc64zr/Os8+BzrHPhs6vzrHPgiDOsc+Azq3PhM+Fz4fOtSDPg865z4nPgM63zrvOrCDOus6xz4TOrCDPhM63zr0gzrXOus66zq/Ovc63z4POtyIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjgwCittc2dpZCAiVW5yZWNvZ25pemVkIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgIs6czrcgzrHOvc6xzrPOvc+Jz4HOr8+DzrnOvM6/z4IgzrXOu861zrPOus+Ezq7PgiDOv8+BzrjOv86zz4HOsc+Gzq/Osc+CIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6MTgwCittc2dpZCAiTm8gU3VnZ2VzdGlvbnMiCittc2dzdHIgIs6azrHOvM6vzrEgzqDPgc+Mz4TOsc+DzrciCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDozODEKK21zZ2lkICJVbmV4cGVjdGVkIEVPRiBmcm9tIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgIs6czrcgzrHOvc6xzrzOtc69z4zOvM61zr3OvyDPhM6tzrvOv8+CIM6xz4HPh861zq/Ov8+FIM6xz4DPjCDPhM6/zr0gzrXOu861zrPOus+Ezq4gzr/Pgc64zr/Os8+BzrHPhs6vzrHPgiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjM4NQorbXNnaWQgIlNwZWxsIENoZWNrZXIgRmFpbGVkIgorbXNnc3RyICLOkc+Azr/PhM+Fz4fOr86xIM6VzrvOtc6zzrrPhM6uIM6fz4HOuM6/zrPPgc6xz4bOr86xz4IiCisKKyM6IGxpYi9zdGF0dXNfYmFyLnRjbDo4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIC4uLiAlKmkgb2YgJSppICVzICglM2klJSkiCittc2dzdHIgIiVzIC4uLiAlKmkgzrHPgM+MICUqaSAlcyAoJTNpJSUpIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmV0Y2ggJXMiCittc2dzdHIgIs6xzr3OrM66z4TOt8+DzrcgJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyBuZXcgY2hhbmdlcyBmcm9tICVzIgorbXNnc3RyICLOkc69zqzOus+EzrfPg863IM69zq3Pic69IM6xzrvOu86xzrPPjs69IM6xz4DPjCDPhM6/ICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxOAorIywgdGNsLWZvcm1hdAorbXNnaWQgInJlbW90ZSBwcnVuZSAlcyIKK21zZ3N0ciAizrHPgM6/zrzOsc66z4HPhc+DzrzOrc69zr8gzrrOu86szrTOtc68zrEgJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHJ1bmluZyB0cmFja2luZyBicmFuY2hlcyBkZWxldGVkIGZyb20gJXMiCittc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM66zrvOrM60zrXOvM6xIM66zrvOrM60z4nOvSDPgM6xz4HOsc66zr/Ou86/z43OuM63z4POt8+CIM+Azr/PhSDOtM65zrXOs8+BzqzPhs63z4POsc69IM6xz4DPjCDPhM6/ICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyNSBsaWIvdHJhbnNwb3J0LnRjbDo3MQorIywgdGNsLWZvcm1hdAorbXNnaWQgInB1c2ggJXMiCittc2dzdHIgIs+OzrjOt8+DzrcgJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjI2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHVzaGluZyBjaGFuZ2VzIHRvICVzIgorbXNnc3RyICLOk86vzr3Otc+EzrHOuSDPjs64zrfPg863IM6xzrvOu86xzrPPjs69IM+Dz4TOvyAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6NzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJQdXNoaW5nICVzICVzIHRvICVzIgorbXNnc3RyICLOk86vzr3Otc+EzrHOuSDPjs64zrfPg863ICVzICVzIM+Dz4TOvyAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6ODkKK21zZ2lkICJQdXNoIEJyYW5jaGVzIgorbXNnc3RyICLOj864zrfPg863IM6azrvOrM60z4nOvSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTAzCittc2dpZCAiU291cmNlIEJyYW5jaGVzIgorbXNnc3RyICLOoM63zrPOsc6vzr/OuSDOms67zqzOtM6/zrkiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjEyMAorbXNnaWQgIkRlc3RpbmF0aW9uIFJlcG9zaXRvcnkiCittc2dzdHIgIs6Rz4DOv864zrXPhM6uz4HOuc6/IM6gz4HOv86/z4HOuc+DzrzOv8+NIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNTgKK21zZ2lkICJUcmFuc2ZlciBPcHRpb25zIgorbXNnc3RyICLOlc+AzrnOu86/zrPOrc+CIM6czrXPhM6xz4bOv8+BzqzPgiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTYwCittc2dpZCAiRm9yY2Ugb3ZlcndyaXRlIGV4aXN0aW5nIGJyYW5jaCAobWF5IGRpc2NhcmQgY2hhbmdlcykiCittc2dzdHIgIiIKKyLOlc6+zrHOvc6xzrPOus6xz4POvM+Mz4IgzrXPgM61zrPOs8+BzrHPhs6uz4Igz4XPgM6sz4HPh86/zr3PhM6/z4IgzrrOu86szrTOv8+FICjOvM+Azr/Pgc61zq8gzr3OsSDOsc+Azr/Pgc+Bzq/PiM61zrkgzrHOu867zrHOs86tz4IpIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNjQKK21zZ2lkICJVc2UgdGhpbiBwYWNrIChmb3Igc2xvdyBuZXR3b3JrIGNvbm5lY3Rpb25zKSIKK21zZ3N0ciAizqfPgc6uz4POtyDOuc+Dz4fOvc6/z40gz4DOsc66zq3PhM6/z4UgKM6zzrnOsSDOsc+BzrPOrc+CIM+Dz4XOvc60zq3Pg861zrnPgiDOtM65zrrPhM+Nzr/PhSkiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE2OAorbXNnaWQgIkluY2x1ZGUgdGFncyIKK21zZ3N0ciAizqPPhc68z4DOtc+Bzq/Ou863z4jOtyDOtc+EzrnOus61z4TPjs69IgorCisKZGlmZiAtLWdpdCBhL2dpdC1ndWkvcG8vZnIucG8gYi9naXQtZ3VpL3BvL2ZyLnBvCmluZGV4IGE5NDRhY2UuLjgxNzA2OTYgMTAwNjQ0Ci0tLSBhL2dpdC1ndWkvcG8vZnIucG8KKysrIGIvZ2l0LWd1aS9wby9mci5wbwpAQCAtOSw4ICs5LDggQEAKIG1zZ3N0ciAiIgogIlByb2plY3QtSWQtVmVyc2lvbjogZnJcbiIKICJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMDgtMTEtMTYgMTM6NTYtMDgwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMDgtMTEtMjAgMTA6MjArMDEwMFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEwLTAxLTI2IDE1OjQ3LTA4MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTAyLTAyIDEyOjU5KzAxMDBcbiIKICJMYXN0LVRyYW5zbGF0b3I6IENocmlzdGlhbiBDb3VkZXIgPGNocmlzY29vbEB0dXhmYW1pbHkub3JnPlxuIgogIkxhbmd1YWdlLVRlYW06IEZyZW5jaFxuIgogIk1JTUUtVmVyc2lvbjogMS4wXG4iCkBAIC0xOSwzMyArMTksMzMgQEAKICJYLUdlbmVyYXRvcjogS0JhYmVsIDEuMTEuNFxuIgogIlBsdXJhbC1Gb3JtczogIG5wbHVyYWxzPTI7IHBsdXJhbD0obiA+IDEpO1xuIgogCi0jOiBnaXQtZ3VpLnNoOjQxIGdpdC1ndWkuc2g6NzM3IGdpdC1ndWkuc2g6NzUxIGdpdC1ndWkuc2g6NzY0IGdpdC1ndWkuc2g6ODQ3Ci0jOiBnaXQtZ3VpLnNoOjg2NgorIzogZ2l0LWd1aS5zaDo0MSBnaXQtZ3VpLnNoOjc5MyBnaXQtZ3VpLnNoOjgwNyBnaXQtZ3VpLnNoOjgyMCBnaXQtZ3VpLnNoOjkwMworIzogZ2l0LWd1aS5zaDo5MjIKIG1zZ2lkICJnaXQtZ3VpOiBmYXRhbCBlcnJvciIKIG1zZ3N0ciAiZ2l0LWd1aTogZXJyZXVyIGZhdGFsZSIKIAotIzogZ2l0LWd1aS5zaDo2ODkKKyM6IGdpdC1ndWkuc2g6NzQzCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiSW52YWxpZCBmb250IHNwZWNpZmllZCBpbiAlczoiCiBtc2dzdHIgIlBvbGljZSBpbnZhbGlkZSBzcMOpY2lmacOpZSBkYW5zICVzIDoiCiAKLSM6IGdpdC1ndWkuc2g6NzIzCisjOiBnaXQtZ3VpLnNoOjc3OQogbXNnaWQgIk1haW4gRm9udCIKIG1zZ3N0ciAiUG9saWNlIHByaW5jaXBhbGUiCiAKLSM6IGdpdC1ndWkuc2g6NzI0CisjOiBnaXQtZ3VpLnNoOjc4MAogbXNnaWQgIkRpZmYvQ29uc29sZSBGb250IgogbXNnc3RyICJQb2xpY2UgZGlmZi9jb25zb2xlIgogCi0jOiBnaXQtZ3VpLnNoOjczOAorIzogZ2l0LWd1aS5zaDo3OTQKIG1zZ2lkICJDYW5ub3QgZmluZCBnaXQgaW4gUEFUSC4iCiBtc2dzdHIgIkltcG9zc2libGUgZGUgdHJvdXZlciBnaXQgZGFucyBQQVRILiIKIAotIzogZ2l0LWd1aS5zaDo3NjUKKyM6IGdpdC1ndWkuc2g6ODIxCiBtc2dpZCAiQ2Fubm90IHBhcnNlIEdpdCB2ZXJzaW9uIHN0cmluZzoiCiBtc2dzdHIgIkltcG9zc2libGUgZGUgcGFyc2VyIGxhIHZlcnNpb24gZGUgR2l0IDoiCiAKLSM6IGdpdC1ndWkuc2g6NzgzCisjOiBnaXQtZ3VpLnNoOjgzOQogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICJHaXQgdmVyc2lvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiIKQEAgLTY0LDQ0NiArNjQsNDc1IEBACiAiXG4iCiAiUGV1dC1vbiBjb25zaWTDqXJlciBxdWUgJyVzJyBlc3QgZW4gdmVyc2lvbiAxLjUuMCA/XG4iCiAKLSM6IGdpdC1ndWkuc2g6MTA2MgorIzogZ2l0LWd1aS5zaDoxMTI4CiBtc2dpZCAiR2l0IGRpcmVjdG9yeSBub3QgZm91bmQ6IgogbXNnc3RyICJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbGUgcsOpcGVydG9pcmUgZ2l0IDoiCiAKLSM6IGdpdC1ndWkuc2g6MTA2OQorIzogZ2l0LWd1aS5zaDoxMTQ2CiBtc2dpZCAiQ2Fubm90IG1vdmUgdG8gdG9wIG9mIHdvcmtpbmcgZGlyZWN0b3J5OiIKIG1zZ3N0ciAiSW1wb3NzaWJsZSBkJ2FsbGVyIMOgIGxhIHJhY2luZSBkdSByw6lwZXJ0b2lyZSBkZSB0cmF2YWlsIDoiCiAKLSM6IGdpdC1ndWkuc2g6MTA3NgotbXNnaWQgIkNhbm5vdCB1c2UgZnVubnkgLmdpdCBkaXJlY3Rvcnk6IgotbXNnc3RyICJJbXBvc3NpYmxlIGQndXRpbGlzZXIgbGUgcsOpcGVydG9pcmUgLmdpdDoiCisjOiBnaXQtZ3VpLnNoOjExNTQKK21zZ2lkICJDYW5ub3QgdXNlIGJhcmUgcmVwb3NpdG9yeToiCittc2dzdHIgIkltcG9zc2libGUgZCd1dGlsaXNlciB1biBkw6lww7R0IG51IChiYXJlKSA6IgogCi0jOiBnaXQtZ3VpLnNoOjEwODEKKyM6IGdpdC1ndWkuc2g6MTE2MgogbXNnaWQgIk5vIHdvcmtpbmcgZGlyZWN0b3J5IgogbXNnc3RyICJBdWN1biByw6lwZXJ0b2lyZSBkZSB0cmF2YWlsIgogCi0jOiBnaXQtZ3VpLnNoOjEyNDcgbGliL2NoZWNrb3V0X29wLnRjbDozMDUKKyM6IGdpdC1ndWkuc2g6MTMzNCBsaWIvY2hlY2tvdXRfb3AudGNsOjMwNgogbXNnaWQgIlJlZnJlc2hpbmcgZmlsZSBzdGF0dXMuLi4iCiBtc2dzdHIgIlJhZnJhw65jaGlzc2VtZW50IGR1IHN0YXR1dCBkZXMgZmljaGllcnMuLi4iCiAKLSM6IGdpdC1ndWkuc2g6MTMwMworIzogZ2l0LWd1aS5zaDoxMzkwCiBtc2dpZCAiU2Nhbm5pbmcgZm9yIG1vZGlmaWVkIGZpbGVzIC4uLiIKIG1zZ3N0ciAiUmVjaGVyY2hlIGRlIGZpY2hpZXJzIG1vZGlmacOpcy4uLiIKIAotIzogZ2l0LWd1aS5zaDoxMzY3CisjOiBnaXQtZ3VpLnNoOjE0NTQKIG1zZ2lkICJDYWxsaW5nIHByZXBhcmUtY29tbWl0LW1zZyBob29rLi4uIgogbXNnc3RyICJMYW5jZW1lbnQgZGUgbCdhY3Rpb24gZGUgcHLDqXBhcmF0aW9uIGR1IG1lc3NhZ2UgZGUgY29tbWl0Li4uIgogCi0jOiBnaXQtZ3VpLnNoOjEzODQKKyM6IGdpdC1ndWkuc2g6MTQ3MQogbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4iCiBtc2dzdHIgIkNvbW1pdCByZWZ1c8OpIHBhciBsJ2FjdGlvbiBkZSBwcsOpcGFyYXRpb24gZHUgbWVzc2FnZSBkZSBjb21taXQuIgogCi0jOiBnaXQtZ3VpLnNoOjE1NDIgbGliL2Jyb3dzZXIudGNsOjI0NgorIzogZ2l0LWd1aS5zaDoxNjI5IGxpYi9icm93c2VyLnRjbDoyNDYKIG1zZ2lkICJSZWFkeS4iCiBtc2dzdHIgIlByw6p0LiIKIAotIzogZ2l0LWd1aS5zaDoxODE5CisjOiBnaXQtZ3VpLnNoOjE3ODcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEaXNwbGF5aW5nIG9ubHkgJXMgb2YgJXMgZmlsZXMuIgorbXNnc3RyICJBZmZpY2hlIHNldWxlbWVudCAlcyBmaWNoaWVycyBzdXIgJXMuIgorCisjOiBnaXQtZ3VpLnNoOjE5MTMKIG1zZ2lkICJVbm1vZGlmaWVkIgogbXNnc3RyICJOb24gbW9kaWZpw6kiCiAKLSM6IGdpdC1ndWkuc2g6MTgyMQorIzogZ2l0LWd1aS5zaDoxOTE1CiBtc2dpZCAiTW9kaWZpZWQsIG5vdCBzdGFnZWQiCiBtc2dzdHIgIk1vZGlmacOpLCBwYXMgaW5kZXjDqSIKIAotIzogZ2l0LWd1aS5zaDoxODIyIGdpdC1ndWkuc2g6MTgzMAorIzogZ2l0LWd1aS5zaDoxOTE2IGdpdC1ndWkuc2g6MTkyNAogbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0IgogbXNnc3RyICJJbmRleMOpIgogCi0jOiBnaXQtZ3VpLnNoOjE4MjMgZ2l0LWd1aS5zaDoxODMxCisjOiBnaXQtZ3VpLnNoOjE5MTcgZ2l0LWd1aS5zaDoxOTI1CiBtc2dpZCAiUG9ydGlvbnMgc3RhZ2VkIGZvciBjb21taXQiCiBtc2dzdHIgIlBvcnRpb25zIGluZGV4w6llcyIKIAotIzogZ2l0LWd1aS5zaDoxODI0IGdpdC1ndWkuc2g6MTgzMgorIzogZ2l0LWd1aS5zaDoxOTE4IGdpdC1ndWkuc2g6MTkyNgogbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0LCBtaXNzaW5nIgogbXNnc3RyICJJbmRleMOpcywgbWFucXVhbnQiCiAKLSM6IGdpdC1ndWkuc2g6MTgyNgorIzogZ2l0LWd1aS5zaDoxOTIwCiBtc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIG5vdCBzdGFnZWQiCiBtc2dzdHIgIkxlIHR5cGUgZGUgZmljaGllciBhIGNoYW5nw6ksIG5vbiBpbmRleMOpIgogCi0jOiBnaXQtZ3VpLnNoOjE4MjcKKyM6IGdpdC1ndWkuc2g6MTkyMQogbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBzdGFnZWQiCiBtc2dzdHIgIkxlIHR5cGUgZGUgZmljaGllciBhIGNoYW5nw6ksIGluZGV4w6kiCiAKLSM6IGdpdC1ndWkuc2g6MTgyOQorIzogZ2l0LWd1aS5zaDoxOTIzCiBtc2dpZCAiVW50cmFja2VkLCBub3Qgc3RhZ2VkIgogbXNnc3RyICJOb24gdmVyc2lvbm7DqSwgbm9uIGluZGV4w6kiCiAKLSM6IGdpdC1ndWkuc2g6MTgzNAorIzogZ2l0LWd1aS5zaDoxOTI4CiBtc2dpZCAiTWlzc2luZyIKIG1zZ3N0ciAiTWFucXVhbnQiCiAKLSM6IGdpdC1ndWkuc2g6MTgzNQorIzogZ2l0LWd1aS5zaDoxOTI5CiBtc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsIgogbXNnc3RyICJJbmRleMOpIHBvdXIgc3VwcHJlc3Npb24iCiAKLSM6IGdpdC1ndWkuc2g6MTgzNgorIzogZ2l0LWd1aS5zaDoxOTMwCiBtc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsLCBzdGlsbCBwcmVzZW50IgogbXNnc3RyICJJbmRleMOpIHBvdXIgc3VwcHJlc3Npb24sIHRvdWpvdXJzIHByw6lzZW50IgogCi0jOiBnaXQtZ3VpLnNoOjE4MzggZ2l0LWd1aS5zaDoxODM5IGdpdC1ndWkuc2g6MTg0MCBnaXQtZ3VpLnNoOjE4NDEKLSM6IGdpdC1ndWkuc2g6MTg0MiBnaXQtZ3VpLnNoOjE4NDMKKyM6IGdpdC1ndWkuc2g6MTkzMiBnaXQtZ3VpLnNoOjE5MzMgZ2l0LWd1aS5zaDoxOTM0IGdpdC1ndWkuc2g6MTkzNQorIzogZ2l0LWd1aS5zaDoxOTM2IGdpdC1ndWkuc2g6MTkzNwogbXNnaWQgIlJlcXVpcmVzIG1lcmdlIHJlc29sdXRpb24iCiBtc2dzdHIgIk7DqWNlc3NpdGUgbGEgcsOpc29sdXRpb24gZCd1bmUgZnVzaW9uIgogCi0jOiBnaXQtZ3VpLnNoOjE4NzgKKyM6IGdpdC1ndWkuc2g6MTk3MgogbXNnaWQgIlN0YXJ0aW5nIGdpdGsuLi4gcGxlYXNlIHdhaXQuLi4iCiBtc2dzdHIgIkxhbmNlbWVudCBkZSBnaXRrLi4uIHVuIGluc3RhbnQuLi4iCiAKLSM6IGdpdC1ndWkuc2g6MTg4NworIzogZ2l0LWd1aS5zaDoxOTg0CiBtc2dpZCAiQ291bGRuJ3QgZmluZCBnaXRrIGluIFBBVEgiCiBtc2dzdHIgIkltcG9zc2libGUgZGUgdHJvdXZlciBnaXRrIGRhbnMgUEFUSC4iCiAKLSM6IGdpdC1ndWkuc2g6MjI4MCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM2CisjOiBnaXQtZ3VpLnNoOjIwNDMKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdCBndWkgaW4gUEFUSCIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSB0cm91dmVyIGdpdCBndWkgZGFucyBQQVRIIgorCisjOiBnaXQtZ3VpLnNoOjI0NTUgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozNgogbXNnaWQgIlJlcG9zaXRvcnkiCiBtc2dzdHIgIkTDqXDDtHQiCiAKLSM6IGdpdC1ndWkuc2g6MjI4MQorIzogZ2l0LWd1aS5zaDoyNDU2CiBtc2dpZCAiRWRpdCIKIG1zZ3N0ciAiw4lkaXRpb24iCiAKLSM6IGdpdC1ndWkuc2g6MjI4MyBsaWIvY2hvb3NlX3Jldi50Y2w6NTYxCisjOiBnaXQtZ3VpLnNoOjI0NTggbGliL2Nob29zZV9yZXYudGNsOjU2MQogbXNnaWQgIkJyYW5jaCIKIG1zZ3N0ciAiQnJhbmNoZSIKIAotIzogZ2l0LWd1aS5zaDoyMjg2IGxpYi9jaG9vc2VfcmV2LnRjbDo1NDgKKyM6IGdpdC1ndWkuc2g6MjQ2MSBsaWIvY2hvb3NlX3Jldi50Y2w6NTQ4CiBtc2dpZCAiQ29tbWl0QEBub3VuIgogbXNnc3RyICJDb21taXQiCiAKLSM6IGdpdC1ndWkuc2g6MjI4OSBsaWIvbWVyZ2UudGNsOjEyMSBsaWIvbWVyZ2UudGNsOjE1MCBsaWIvbWVyZ2UudGNsOjE2OAorIzogZ2l0LWd1aS5zaDoyNDY0IGxpYi9tZXJnZS50Y2w6MTIxIGxpYi9tZXJnZS50Y2w6MTUwIGxpYi9tZXJnZS50Y2w6MTY4CiBtc2dpZCAiTWVyZ2UiCiBtc2dzdHIgIkZ1c2lvbm5lciIKIAotIzogZ2l0LWd1aS5zaDoyMjkwIGxpYi9jaG9vc2VfcmV2LnRjbDo1NTcKKyM6IGdpdC1ndWkuc2g6MjQ2NSBsaWIvY2hvb3NlX3Jldi50Y2w6NTU3CiBtc2dpZCAiUmVtb3RlIgogbXNnc3RyICJEw6lww7R0IGRpc3RhbnQiCiAKLSM6IGdpdC1ndWkuc2g6MjI5MworIzogZ2l0LWd1aS5zaDoyNDY4CiBtc2dpZCAiVG9vbHMiCiBtc2dzdHIgIk91dGlscyIKIAotIzogZ2l0LWd1aS5zaDoyMzAyCisjOiBnaXQtZ3VpLnNoOjI0NzcKIG1zZ2lkICJFeHBsb3JlIFdvcmtpbmcgQ29weSIKIG1zZ3N0ciAiRXhwbG9yZXIgbGEgY29waWUgZGUgdHJhdmFpbCIKIAotIzogZ2l0LWd1aS5zaDoyMzA3CisjOiBnaXQtZ3VpLnNoOjI0ODMKIG1zZ2lkICJCcm93c2UgQ3VycmVudCBCcmFuY2gncyBGaWxlcyIKIG1zZ3N0ciAiTmF2aWd1ZXIgZGFucyBsYSBicmFuY2hlIGNvdXJhbnRlIgogCi0jOiBnaXQtZ3VpLnNoOjIzMTEKKyM6IGdpdC1ndWkuc2g6MjQ4NwogbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMuLi4iCiBtc2dzdHIgIk5hdmlndWVyIGRhbnMgbGEgYnJhbmNoZS4uLiIKIAotIzogZ2l0LWd1aS5zaDoyMzE2CisjOiBnaXQtZ3VpLnNoOjI0OTIKIG1zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2gncyBIaXN0b3J5IgogbXNnc3RyICJWaXN1YWxpc2VyIGwnaGlzdG9yaXF1ZSBkZSBsYSBicmFuY2hlIGNvdXJhbnRlIgogCi0jOiBnaXQtZ3VpLnNoOjIzMjAKKyM6IGdpdC1ndWkuc2g6MjQ5NgogbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkiCiBtc2dzdHIgIlZvaXIgbCdoaXN0b3JpcXVlIGRlIHRvdXRlcyBsZXMgYnJhbmNoZXMiCiAKLSM6IGdpdC1ndWkuc2g6MjMyNworIzogZ2l0LWd1aS5zaDoyNTAzCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQnJvd3NlICVzJ3MgRmlsZXMiCiBtc2dzdHIgIlBhcmNvdXJpciBsJ2FyYm9yZXNjZW5jZSBkZSAlcyIKIAotIzogZ2l0LWd1aS5zaDoyMzI5CisjOiBnaXQtZ3VpLnNoOjI1MDUKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJWaXN1YWxpemUgJXMncyBIaXN0b3J5IgogbXNnc3RyICJWb2lyIGwnaGlzdG9yaXF1ZSBkZSBsYSBicmFuY2hlIDogJXMiCiAKLSM6IGdpdC1ndWkuc2g6MjMzNCBsaWIvZGF0YWJhc2UudGNsOjI3IGxpYi9kYXRhYmFzZS50Y2w6NjcKKyM6IGdpdC1ndWkuc2g6MjUxMCBsaWIvZGF0YWJhc2UudGNsOjI3IGxpYi9kYXRhYmFzZS50Y2w6NjcKIG1zZ2lkICJEYXRhYmFzZSBTdGF0aXN0aWNzIgogbXNnc3RyICJTdGF0aXN0aXF1ZXMgZHUgZMOpcMO0dCIKIAotIzogZ2l0LWd1aS5zaDoyMzM3IGxpYi9kYXRhYmFzZS50Y2w6MzQKKyM6IGdpdC1ndWkuc2g6MjUxMyBsaWIvZGF0YWJhc2UudGNsOjM0CiBtc2dpZCAiQ29tcHJlc3MgRGF0YWJhc2UiCiBtc2dzdHIgIkNvbXByaW1lciBsZSBkw6lww7R0IgogCi0jOiBnaXQtZ3VpLnNoOjIzNDAKKyM6IGdpdC1ndWkuc2g6MjUxNgogbXNnaWQgIlZlcmlmeSBEYXRhYmFzZSIKIG1zZ3N0ciAiVsOpcmlmaWVyIGxlIGTDqXDDtHQiCiAKLSM6IGdpdC1ndWkuc2g6MjM0NyBnaXQtZ3VpLnNoOjIzNTEgZ2l0LWd1aS5zaDoyMzU1IGxpYi9zaG9ydGN1dC50Y2w6NwotIzogbGliL3Nob3J0Y3V0LnRjbDozOSBsaWIvc2hvcnRjdXQudGNsOjcxCisjOiBnaXQtZ3VpLnNoOjI1MjMgZ2l0LWd1aS5zaDoyNTI3IGdpdC1ndWkuc2g6MjUzMSBsaWIvc2hvcnRjdXQudGNsOjgKKyM6IGxpYi9zaG9ydGN1dC50Y2w6NDAgbGliL3Nob3J0Y3V0LnRjbDo3MgogbXNnaWQgIkNyZWF0ZSBEZXNrdG9wIEljb24iCiBtc2dzdHIgIkNyw6llciB1bmUgaWPDtG5lIHN1ciBsZSBidXJlYXUiCiAKLSM6IGdpdC1ndWkuc2g6MjM2MyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE4MyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE5MQorIzogZ2l0LWd1aS5zaDoyNTM5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTgzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTkxCiBtc2dpZCAiUXVpdCIKIG1zZ3N0ciAiUXVpdHRlciIKIAotIzogZ2l0LWd1aS5zaDoyMzcxCisjOiBnaXQtZ3VpLnNoOjI1NDcKIG1zZ2lkICJVbmRvIgogbXNnc3RyICJEw6lmYWlyZSIKIAotIzogZ2l0LWd1aS5zaDoyMzc0CisjOiBnaXQtZ3VpLnNoOjI1NTAKIG1zZ2lkICJSZWRvIgogbXNnc3RyICJSZWZhaXJlIgogCi0jOiBnaXQtZ3VpLnNoOjIzNzggZ2l0LWd1aS5zaDoyOTIzCisjOiBnaXQtZ3VpLnNoOjI1NTQgZ2l0LWd1aS5zaDozMTA5CiBtc2dpZCAiQ3V0IgogbXNnc3RyICJDb3VwZXIiCiAKLSM6IGdpdC1ndWkuc2g6MjM4MSBnaXQtZ3VpLnNoOjI5MjYgZ2l0LWd1aS5zaDozMDAwIGdpdC1ndWkuc2g6MzA4MgorIzogZ2l0LWd1aS5zaDoyNTU3IGdpdC1ndWkuc2g6MzExMiBnaXQtZ3VpLnNoOjMxODYgZ2l0LWd1aS5zaDozMjU5CiAjOiBsaWIvY29uc29sZS50Y2w6NjkKIG1zZ2lkICJDb3B5IgogbXNnc3RyICJDb3BpZXIiCiAKLSM6IGdpdC1ndWkuc2g6MjM4NCBnaXQtZ3VpLnNoOjI5MjkKKyM6IGdpdC1ndWkuc2g6MjU2MCBnaXQtZ3VpLnNoOjMxMTUKIG1zZ2lkICJQYXN0ZSIKIG1zZ3N0ciAiQ29sbGVyIgogCi0jOiBnaXQtZ3VpLnNoOjIzODcgZ2l0LWd1aS5zaDoyOTMyIGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyNgorIzogZ2l0LWd1aS5zaDoyNTYzIGdpdC1ndWkuc2g6MzExOCBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjYKICM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzgKIG1zZ2lkICJEZWxldGUiCiBtc2dzdHIgIlN1cHByaW1lciIKIAotIzogZ2l0LWd1aS5zaDoyMzkxIGdpdC1ndWkuc2g6MjkzNiBnaXQtZ3VpLnNoOjMwODYgbGliL2NvbnNvbGUudGNsOjcxCisjOiBnaXQtZ3VpLnNoOjI1NjcgZ2l0LWd1aS5zaDozMTIyIGdpdC1ndWkuc2g6MzI2MyBsaWIvY29uc29sZS50Y2w6NzEKIG1zZ2lkICJTZWxlY3QgQWxsIgogbXNnc3RyICJUb3V0IHPDqWxlY3Rpb25uZXIiCiAKLSM6IGdpdC1ndWkuc2g6MjQwMAorIzogZ2l0LWd1aS5zaDoyNTc2CiBtc2dpZCAiQ3JlYXRlLi4uIgogbXNnc3RyICJDcsOpZXIuLi4iCiAKLSM6IGdpdC1ndWkuc2g6MjQwNgorIzogZ2l0LWd1aS5zaDoyNTgyCiBtc2dpZCAiQ2hlY2tvdXQuLi4iCiBtc2dzdHIgIkNoYXJnZXIgKGNoZWNrb3V0KS4uLiIKIAotIzogZ2l0LWd1aS5zaDoyNDEyCisjOiBnaXQtZ3VpLnNoOjI1ODgKIG1zZ2lkICJSZW5hbWUuLi4iCiBtc2dzdHIgIlJlbm9tbWVyLi4uIgogCi0jOiBnaXQtZ3VpLnNoOjI0MTcKKyM6IGdpdC1ndWkuc2g6MjU5MwogbXNnaWQgIkRlbGV0ZS4uLiIKIG1zZ3N0ciAiU3VwcHJpbWVyLi4uIgogCi0jOiBnaXQtZ3VpLnNoOjI0MjIKKyM6IGdpdC1ndWkuc2g6MjU5OAogbXNnaWQgIlJlc2V0Li4uIgogbXNnc3RyICJSw6lpbml0aWFsaXNlci4uLiIKIAotIzogZ2l0LWd1aS5zaDoyNDMyCisjOiBnaXQtZ3VpLnNoOjI2MDgKIG1zZ2lkICJEb25lIgogbXNnc3RyICJFZmZlY3R1w6kiCiAKLSM6IGdpdC1ndWkuc2g6MjQzNAorIzogZ2l0LWd1aS5zaDoyNjEwCiBtc2dpZCAiQ29tbWl0QEB2ZXJiIgogbXNnc3RyICJDb21taXRlckBAdmVyYiIKIAotIzogZ2l0LWd1aS5zaDoyNDQzIGdpdC1ndWkuc2g6Mjg2NAorIzogZ2l0LWd1aS5zaDoyNjE5IGdpdC1ndWkuc2g6MzA1MAogbXNnaWQgIk5ldyBDb21taXQiCiBtc2dzdHIgIk5vdXZlYXUgY29tbWl0IgogCi0jOiBnaXQtZ3VpLnNoOjI0NTEgZ2l0LWd1aS5zaDoyODcxCisjOiBnaXQtZ3VpLnNoOjI2MjcgZ2l0LWd1aS5zaDozMDU3CiBtc2dpZCAiQW1lbmQgTGFzdCBDb21taXQiCiBtc2dzdHIgIkNvcnJpZ2VyIGRlcm5pZXIgY29tbWl0IgogCi0jOiBnaXQtZ3VpLnNoOjI0NjEgZ2l0LWd1aS5zaDoyODI1IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6OTkKKyM6IGdpdC1ndWkuc2g6MjYzNyBnaXQtZ3VpLnNoOjMwMTEgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo5OQogbXNnaWQgIlJlc2NhbiIKIG1zZ3N0ciAiUmVjaGFyZ2VyIG1vZGlmcy4iCiAKLSM6IGdpdC1ndWkuc2g6MjQ2NworIzogZ2l0LWd1aS5zaDoyNjQzCiBtc2dpZCAiU3RhZ2UgVG8gQ29tbWl0IgogbXNnc3RyICJJbmRleGVyIgogCi0jOiBnaXQtZ3VpLnNoOjI0NzMKKyM6IGdpdC1ndWkuc2g6MjY0OQogbXNnaWQgIlN0YWdlIENoYW5nZWQgRmlsZXMgVG8gQ29tbWl0IgogbXNnc3RyICJJbmRleGVyIHRvdXRlcyBtb2RpZmljYXRpb25zIgogCi0jOiBnaXQtZ3VpLnNoOjI0NzkKKyM6IGdpdC1ndWkuc2g6MjY1NQogbXNnaWQgIlVuc3RhZ2UgRnJvbSBDb21taXQiCiBtc2dzdHIgIkTDqXNpbmRleGVyIgogCi0jOiBnaXQtZ3VpLnNoOjI0ODQgbGliL2luZGV4LnRjbDo0MTAKKyM6IGdpdC1ndWkuc2g6MjY2MSBsaWIvaW5kZXgudGNsOjQxMgogbXNnaWQgIlJldmVydCBDaGFuZ2VzIgogbXNnc3RyICJBbm51bGVyIGxlcyBtb2RpZmljYXRpb25zIgogCi0jOiBnaXQtZ3VpLnNoOjI0OTEgZ2l0LWd1aS5zaDozMDY5CisjOiBnaXQtZ3VpLnNoOjI2NjkgZ2l0LWd1aS5zaDozMzEwIGdpdC1ndWkuc2g6MzM0MQogbXNnaWQgIlNob3cgTGVzcyBDb250ZXh0IgogbXNnc3RyICJNb250cmVyIG1vaW5zIGRlIGNvbnRleHRlIgogCi0jOiBnaXQtZ3VpLnNoOjI0OTUgZ2l0LWd1aS5zaDozMDczCisjOiBnaXQtZ3VpLnNoOjI2NzMgZ2l0LWd1aS5zaDozMzE0IGdpdC1ndWkuc2g6MzM0NQogbXNnaWQgIlNob3cgTW9yZSBDb250ZXh0IgogbXNnc3RyICJNb250cmVyIHBsdXMgZGUgY29udGV4dGUiCiAKLSM6IGdpdC1ndWkuc2g6MjUwMiBnaXQtZ3VpLnNoOjI4MzggZ2l0LWd1aS5zaDoyOTQ3CisjOiBnaXQtZ3VpLnNoOjI2ODAgZ2l0LWd1aS5zaDozMDI0IGdpdC1ndWkuc2g6MzEzMwogbXNnaWQgIlNpZ24gT2ZmIgogbXNnc3RyICJTaWduZXIiCiAKLSM6IGdpdC1ndWkuc2g6MjUxOAorIzogZ2l0LWd1aS5zaDoyNjk2CiBtc2dpZCAiTG9jYWwgTWVyZ2UuLi4iCiBtc2dzdHIgIkZ1c2lvbiBsb2NhbGUuLi4iCiAKLSM6IGdpdC1ndWkuc2g6MjUyMworIzogZ2l0LWd1aS5zaDoyNzAxCiBtc2dpZCAiQWJvcnQgTWVyZ2UuLi4iCiBtc2dzdHIgIkFiYW5kb25uZXIgZnVzaW9uLi4uIgogCi0jOiBnaXQtZ3VpLnNoOjI1MzUgZ2l0LWd1aS5zaDoyNTc1CisjOiBnaXQtZ3VpLnNoOjI3MTMgZ2l0LWd1aS5zaDoyNzQxCiBtc2dpZCAiQWRkLi4uIgogbXNnc3RyICJBam91dGVyLi4uIgogCi0jOiBnaXQtZ3VpLnNoOjI1MzkKKyM6IGdpdC1ndWkuc2g6MjcxNwogbXNnaWQgIlB1c2guLi4iCiBtc2dzdHIgIlBvdXNzZXIuLi4iCiAKLSM6IGdpdC1ndWkuc2g6MjU0MworIzogZ2l0LWd1aS5zaDoyNzIxCiBtc2dpZCAiRGVsZXRlIEJyYW5jaC4uLiIKIG1zZ3N0ciAiU3VwcHJpbWVyIGJyYW5jaGUuLi4iCiAKLSM6IGdpdC1ndWkuc2g6MjU1MyBnaXQtZ3VpLnNoOjI1ODkgbGliL2Fib3V0LnRjbDoxNAorIzogZ2l0LWd1aS5zaDoyNzMxIGdpdC1ndWkuc2g6MzI5MgorbXNnaWQgIk9wdGlvbnMuLi4iCittc2dzdHIgIk9wdGlvbnMuLi4iCisKKyM6IGdpdC1ndWkuc2g6Mjc0MgorbXNnaWQgIlJlbW92ZS4uLiIKK21zZ3N0ciAiU3VwcHJpbWVyLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI3NTEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MAorbXNnaWQgIkhlbHAiCittc2dzdHIgIkFpZGUiCisKKyM6IGdpdC1ndWkuc2g6Mjc1NSBnaXQtZ3VpLnNoOjI3NTkgbGliL2Fib3V0LnRjbDoxNAogIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUzCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQWJvdXQgJXMiCiBtc2dzdHIgIsOAIHByb3BvcyBkZSAlcyIKIAotIzogZ2l0LWd1aS5zaDoyNTU3Ci1tc2dpZCAiUHJlZmVyZW5jZXMuLi4iCi1tc2dzdHIgIlByw6lmw6lyZW5jZXMuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjU2NSBnaXQtZ3VpLnNoOjMxMTUKLW1zZ2lkICJPcHRpb25zLi4uIgotbXNnc3RyICJPcHRpb25zLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI1NzYKLW1zZ2lkICJSZW1vdmUuLi4iCi1tc2dzdHIgIlN1cHByaW1lci4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNTg1IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAKLW1zZ2lkICJIZWxwIgotbXNnc3RyICJBaWRlIgotCi0jOiBnaXQtZ3VpLnNoOjI2MTEKKyM6IGdpdC1ndWkuc2g6Mjc4MwogbXNnaWQgIk9ubGluZSBEb2N1bWVudGF0aW9uIgogbXNnc3RyICJEb2N1bWVudGF0aW9uIGVuIGxpZ25lIgogCi0jOiBnaXQtZ3VpLnNoOjI2MTQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU2CisjOiBnaXQtZ3VpLnNoOjI3ODYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU2CiBtc2dpZCAiU2hvdyBTU0ggS2V5IgogbXNnc3RyICJNb250cmVyIGxhIGNsw6kgU1NIIgogCi0jOiBnaXQtZ3VpLnNoOjI3MDcKKyM6IGdpdC1ndWkuc2g6Mjg5MwogIywgdGNsLWZvcm1hdAogbXNnaWQgImZhdGFsOiBjYW5ub3Qgc3RhdCBwYXRoICVzOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IgogbXNnc3RyICIiCiAiZXJyZXVyIGZhdGFsZSA6IHBhcyBkJ2luZm9zIHN1ciBsZSBjaGVtaW4gJXMgOiBGaWNoaWVyIG91IHLDqXBlcnRvaXJlICIKICJpbmV4aXN0YW50IgogCi0jOiBnaXQtZ3VpLnNoOjI3NDAKKyM6IGdpdC1ndWkuc2g6MjkyNgogbXNnaWQgIkN1cnJlbnQgQnJhbmNoOiIKIG1zZ3N0ciAiQnJhbmNoZSBjb3VyYW50ZSA6IgogCi0jOiBnaXQtZ3VpLnNoOjI3NjEKKyM6IGdpdC1ndWkuc2g6Mjk0NwogbXNnaWQgIlN0YWdlZCBDaGFuZ2VzIChXaWxsIENvbW1pdCkiCiBtc2dzdHIgIk1vZGlmcy4gaW5kZXjDqWVzIChwb3VyIGNvbW1pdCkiCiAKLSM6IGdpdC1ndWkuc2g6Mjc4MQorIzogZ2l0LWd1aS5zaDoyOTY3CiBtc2dpZCAiVW5zdGFnZWQgQ2hhbmdlcyIKIG1zZ3N0ciAiTW9kaWZzLiBub24gaW5kZXjDqWVzIgogCi0jOiBnaXQtZ3VpLnNoOjI4MzEKKyM6IGdpdC1ndWkuc2g6MzAxNwogbXNnaWQgIlN0YWdlIENoYW5nZWQiCiBtc2dzdHIgIkluZGV4ZXIgbW9kaWZzLiIKIAotIzogZ2l0LWd1aS5zaDoyODUwIGxpYi90cmFuc3BvcnQudGNsOjkzIGxpYi90cmFuc3BvcnQudGNsOjE4MgorIzogZ2l0LWd1aS5zaDozMDM2IGxpYi90cmFuc3BvcnQudGNsOjEwNCBsaWIvdHJhbnNwb3J0LnRjbDoxOTMKIG1zZ2lkICJQdXNoIgogbXNnc3RyICJQb3Vzc2VyIgogCi0jOiBnaXQtZ3VpLnNoOjI4ODUKKyM6IGdpdC1ndWkuc2g6MzA3MQogbXNnaWQgIkluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgogbXNnc3RyICJNZXNzYWdlIGRlIGNvbW1pdCBpbml0aWFsIDoiCiAKLSM6IGdpdC1ndWkuc2g6Mjg4NgorIzogZ2l0LWd1aS5zaDozMDcyCiBtc2dpZCAiQW1lbmRlZCBDb21taXQgTWVzc2FnZToiCiBtc2dzdHIgIk1lc3NhZ2UgZGUgY29tbWl0IGNvcnJpZ8OpIDoiCiAKLSM6IGdpdC1ndWkuc2g6Mjg4NworIzogZ2l0LWd1aS5zaDozMDczCiBtc2dpZCAiQW1lbmRlZCBJbml0aWFsIENvbW1pdCBNZXNzYWdlOiIKIG1zZ3N0ciAiTWVzc2FnZSBkZSBjb21taXQgaW5pdGlhbCBjb3JyaWfDqSA6IgogCi0jOiBnaXQtZ3VpLnNoOjI4ODgKKyM6IGdpdC1ndWkuc2g6MzA3NAogbXNnaWQgIkFtZW5kZWQgTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgogbXNnc3RyICJNZXNzYWdlIGRlIGNvbW1pdCBkZSBmdXNpb24gY29ycmlnw6kgOiIKIAotIzogZ2l0LWd1aS5zaDoyODg5CisjOiBnaXQtZ3VpLnNoOjMwNzUKIG1zZ2lkICJNZXJnZSBDb21taXQgTWVzc2FnZToiCiBtc2dzdHIgIk1lc3NhZ2UgZGUgY29tbWl0IGRlIGZ1c2lvbiA6IgogCi0jOiBnaXQtZ3VpLnNoOjI4OTAKKyM6IGdpdC1ndWkuc2g6MzA3NgogbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKIG1zZ3N0ciAiTWVzc2FnZSBkZSBjb21taXQgOiIKIAotIzogZ2l0LWd1aS5zaDoyOTM5IGdpdC1ndWkuc2g6MzA5MCBsaWIvY29uc29sZS50Y2w6NzMKKyM6IGdpdC1ndWkuc2g6MzEyNSBnaXQtZ3VpLnNoOjMyNjcgbGliL2NvbnNvbGUudGNsOjczCiBtc2dpZCAiQ29weSBBbGwiCiBtc2dzdHIgIkNvcGllciB0b3V0IgogCi0jOiBnaXQtZ3VpLnNoOjI5NjMgbGliL2JsYW1lLnRjbDoxMDQKKyM6IGdpdC1ndWkuc2g6MzE0OSBsaWIvYmxhbWUudGNsOjEwNAogbXNnaWQgIkZpbGU6IgogbXNnc3RyICJGaWNoaWVyIDoiCiAKLSM6IGdpdC1ndWkuc2g6MzA3OAorIzogZ2l0LWd1aS5zaDozMjU1CiBtc2dpZCAiUmVmcmVzaCIKIG1zZ3N0ciAiUmFmcmHDrmNoaXIiCiAKLSM6IGdpdC1ndWkuc2g6MzA5OQorIzogZ2l0LWd1aS5zaDozMjc2CiBtc2dpZCAiRGVjcmVhc2UgRm9udCBTaXplIgogbXNnc3RyICJEaW1pbnVlciBsYSBwb2xpY2UiCiAKLSM6IGdpdC1ndWkuc2g6MzEwMworIzogZ2l0LWd1aS5zaDozMjgwCiBtc2dpZCAiSW5jcmVhc2UgRm9udCBTaXplIgogbXNnc3RyICJBZ3JhbmRpciBsYSBwb2xpY2UiCiAKLSM6IGdpdC1ndWkuc2g6MzExMSBsaWIvYmxhbWUudGNsOjI4MQorIzogZ2l0LWd1aS5zaDozMjg4IGxpYi9ibGFtZS50Y2w6MjgxCiBtc2dpZCAiRW5jb2RpbmciCiBtc2dzdHIgIkNvZGFnZSBkZXMgY2FyYWN0w6hyZXMiCiAKLSM6IGdpdC1ndWkuc2g6MzEyMgorIzogZ2l0LWd1aS5zaDozMjk5CiBtc2dpZCAiQXBwbHkvUmV2ZXJzZSBIdW5rIgogbXNnc3RyICJBcHBsaXF1ZXIvSW52ZXJzZXIgc2VjdGlvbiIKIAotIzogZ2l0LWd1aS5zaDozMTI3CisjOiBnaXQtZ3VpLnNoOjMzMDQKIG1zZ2lkICJBcHBseS9SZXZlcnNlIExpbmUiCiBtc2dzdHIgIkFwcGxpcXVlci9JbnZlcnNlciBsYSBsaWduZSIKIAotIzogZ2l0LWd1aS5zaDozMTM3CisjOiBnaXQtZ3VpLnNoOjMzMjMKIG1zZ2lkICJSdW4gTWVyZ2UgVG9vbCIKIG1zZ3N0ciAiTGFuY2VyIGwnb3V0aWwgZGUgZnVzaW9uIgogCi0jOiBnaXQtZ3VpLnNoOjMxNDIKKyM6IGdpdC1ndWkuc2g6MzMyOAogbXNnaWQgIlVzZSBSZW1vdGUgVmVyc2lvbiIKIG1zZ3N0ciAiVXRpbGlzZXIgbGEgdmVyc2lvbiBkaXN0YW50ZSIKIAotIzogZ2l0LWd1aS5zaDozMTQ2CisjOiBnaXQtZ3VpLnNoOjMzMzIKIG1zZ2lkICJVc2UgTG9jYWwgVmVyc2lvbiIKIG1zZ3N0ciAiVXRpbGlzZXIgbGEgdmVyc2lvbiBsb2NhbGUiCiAKLSM6IGdpdC1ndWkuc2g6MzE1MAorIzogZ2l0LWd1aS5zaDozMzM2CiBtc2dpZCAiUmV2ZXJ0IFRvIEJhc2UiCiBtc2dzdHIgIlJldmVuaXIgw6AgbGEgdmVyc2lvbiBkZSBiYXNlIgogCi0jOiBnaXQtZ3VpLnNoOjMxNjkKKyM6IGdpdC1ndWkuc2g6MzM1NAorbXNnaWQgIlZpc3VhbGl6ZSBUaGVzZSBDaGFuZ2VzIEluIFRoZSBTdWJtb2R1bGUiCittc2dzdHIgIlZvaXIgbGVzIGNoYW5nbWVudHMgZGFucyBsZSBzb3VzLW1vZHVsZSIKKworIzogZ2l0LWd1aS5zaDozMzU4Cittc2dpZCAiVmlzdWFsaXplIEN1cnJlbnQgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAiVm9pciBsJ2hpc3RvcmlxdWUgZGUgbGEgYnJhbmNoZSBjb3VyYW50ZSBkdSBzb3VzLW1vZHVsZSIKKworIzogZ2l0LWd1aS5zaDozMzYyCittc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICJWb2lyIGwnaGlzdG9yaXF1ZSBkZSB0b3V0ZXMgbGVzIGJyYW5jaGVzIGR1IHNvdXMtbW9kdWxlIgorCisjOiBnaXQtZ3VpLnNoOjMzNjcKK21zZ2lkICJTdGFydCBnaXQgZ3VpIEluIFRoZSBTdWJtb2R1bGUiCittc2dzdHIgIkTDqW1hcnJlciBnaXQgZ3VpIGRhbnMgbGUgc291cy1tb2R1bGUiCisKKyM6IGdpdC1ndWkuc2g6MzM4OQogbXNnaWQgIlVuc3RhZ2UgSHVuayBGcm9tIENvbW1pdCIKIG1zZ3N0ciAiRMOpc2luZGV4ZXIgbGEgc2VjdGlvbiIKIAotIzogZ2l0LWd1aS5zaDozMTcwCisjOiBnaXQtZ3VpLnNoOjMzOTEKK21zZ2lkICJVbnN0YWdlIExpbmVzIEZyb20gQ29tbWl0IgorbXNnc3RyICJEw6lzaW5kZXhlciBsYSBsaWduZSBkdSBjb21taXQiCisKKyM6IGdpdC1ndWkuc2g6MzM5MwogbXNnaWQgIlVuc3RhZ2UgTGluZSBGcm9tIENvbW1pdCIKIG1zZ3N0ciAiRMOpc2luZGV4ZXIgbGEgbGlnbmUiCiAKLSM6IGdpdC1ndWkuc2g6MzE3MgorIzogZ2l0LWd1aS5zaDozMzk2CiBtc2dpZCAiU3RhZ2UgSHVuayBGb3IgQ29tbWl0IgogbXNnc3RyICJJbmRleGVyIGxhIHNlY3Rpb24iCiAKLSM6IGdpdC1ndWkuc2g6MzE3MworIzogZ2l0LWd1aS5zaDozMzk4Cittc2dpZCAiU3RhZ2UgTGluZXMgRm9yIENvbW1pdCIKK21zZ3N0ciAiSW5kZXhlciBsZXMgbGlnbmVzIgorCisjOiBnaXQtZ3VpLnNoOjM0MDAKIG1zZ2lkICJTdGFnZSBMaW5lIEZvciBDb21taXQiCiBtc2dzdHIgIkluZGV4ZXIgbGEgbGlnbmUiCiAKLSM6IGdpdC1ndWkuc2g6MzE5NgorIzogZ2l0LWd1aS5zaDozNDI0CiBtc2dpZCAiSW5pdGlhbGl6aW5nLi4uIgogbXNnc3RyICJJbml0aWFsaXNhdGlvbi4uLiIKIAotIzogZ2l0LWd1aS5zaDozMzAxCisjOiBnaXQtZ3VpLnNoOjM1NDEKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiUG9zc2libGUgZW52aXJvbm1lbnQgaXNzdWVzIGV4aXN0LlxuIgpAQCAtNTIwLDcgKzU0OSw3IEBACiAic291cy1wcm9jZXNzdXMgZGUgR2l0IGxhbmPDqXMgcGFyICVzXG4iCiAiXG4iCiAKLSM6IGdpdC1ndWkuc2g6MzMzMQorIzogZ2l0LWd1aS5zaDozNTcwCiBtc2dpZCAiIgogIlxuIgogIlRoaXMgaXMgZHVlIHRvIGEga25vd24gaXNzdWUgd2l0aCB0aGVcbiIKQEAgLTUzMCw3ICs1NTksNyBAQAogIkNlY2kgZXN0IGTDuyDDoCB1biBwcm9ibMOobWUgY29ubnUgYXZlY1xuIgogImxlIGJpbmFpcmUgVGNsIGRpc3RyaWJ1w6kgcGFyIEN5Z3dpbi4iCiAKLSM6IGdpdC1ndWkuc2g6MzMzNgorIzogZ2l0LWd1aS5zaDozNTc1CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiIgogIlxuIgpAQCAtNjE2LDQzICs2NDUsNDMgQEAKIG1zZ2lkICJMb2FkaW5nIGFubm90YXRpb24uLi4iCiBtc2dzdHIgIkNoYXJnZW1lbnQgZGVzIGFubm90YXRpb25zLi4uIgogCi0jOiBsaWIvYmxhbWUudGNsOjk2NAorIzogbGliL2JsYW1lLnRjbDo5NjMKIG1zZ2lkICJBdXRob3I6IgogbXNnc3RyICJBdXRldXIgOiIKIAotIzogbGliL2JsYW1lLnRjbDo5NjgKKyM6IGxpYi9ibGFtZS50Y2w6OTY3CiBtc2dpZCAiQ29tbWl0dGVyOiIKIG1zZ3N0ciAiQ29tbWl0ZXVyIDoiCiAKLSM6IGxpYi9ibGFtZS50Y2w6OTczCisjOiBsaWIvYmxhbWUudGNsOjk3MgogbXNnaWQgIk9yaWdpbmFsIEZpbGU6IgogbXNnc3RyICJGaWNoaWVyIG9yaWdpbmFsIDoiCiAKLSM6IGxpYi9ibGFtZS50Y2w6MTAyMQorIzogbGliL2JsYW1lLnRjbDoxMDIwCiBtc2dpZCAiQ2Fubm90IGZpbmQgSEVBRCBjb21taXQ6IgogbXNnc3RyICJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbGUgY29tbWl0IEhFQUQgOiIKIAotIzogbGliL2JsYW1lLnRjbDoxMDc2CisjOiBsaWIvYmxhbWUudGNsOjEwNzUKIG1zZ2lkICJDYW5ub3QgZmluZCBwYXJlbnQgY29tbWl0OiIKIG1zZ3N0ciAiSW1wb3NzaWJsZSBkZSB0cm91dmVyIGxlIGNvbW1pdCBwYXJlbnQgOiIKIAotIzogbGliL2JsYW1lLnRjbDoxMDkxCisjOiBsaWIvYmxhbWUudGNsOjEwOTAKIG1zZ2lkICJVbmFibGUgdG8gZGlzcGxheSBwYXJlbnQiCiBtc2dzdHIgIkltcG9zc2libGUgZCdhZmZpY2hlciBsZSBwYXJlbnQiCiAKLSM6IGxpYi9ibGFtZS50Y2w6MTA5MiBsaWIvZGlmZi50Y2w6Mjk3CisjOiBsaWIvYmxhbWUudGNsOjEwOTEgbGliL2RpZmYudGNsOjMyMAogbXNnaWQgIkVycm9yIGxvYWRpbmcgZGlmZjoiCiBtc2dzdHIgIkVycmV1ciBsb3JzIGR1IGNoYXJnZW1lbnQgZGVzIGRpZmbDqXJlbmNlcyA6IgogCi0jOiBsaWIvYmxhbWUudGNsOjEyMzIKKyM6IGxpYi9ibGFtZS50Y2w6MTIzMQogbXNnaWQgIk9yaWdpbmFsbHkgQnk6IgogbXNnc3RyICLDgCBsJ29yaWdpbmUgcGFyIDoiCiAKLSM6IGxpYi9ibGFtZS50Y2w6MTIzOAorIzogbGliL2JsYW1lLnRjbDoxMjM3CiBtc2dpZCAiSW4gRmlsZToiCiBtc2dzdHIgIkRhbnMgbGUgZmljaGllciA6IgogCi0jOiBsaWIvYmxhbWUudGNsOjEyNDMKKyM6IGxpYi9ibGFtZS50Y2w6MTI0MgogbXNnaWQgIkNvcGllZCBPciBNb3ZlZCBIZXJlIEJ5OiIKIG1zZ3N0ciAiQ29wacOpIG91IGTDqXBsYWPDqSBpY2kgcGFyIDoiCiAKQEAgLTY2NiwxMCArNjk1LDEwIEBACiAKICM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjI3IGxpYi9icmFuY2hfY3JlYXRlLnRjbDozNQogIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjMyIGxpYi9icmFuY2hfcmVuYW1lLnRjbDozMCBsaWIvYnJvd3Nlci50Y2w6MjgyCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU0NCBsaWIvY2hvb3NlX2ZvbnQudGNsOjQzIGxpYi9tZXJnZS50Y2w6MTcyCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU3OSBsaWIvY2hvb3NlX2ZvbnQudGNsOjQzIGxpYi9tZXJnZS50Y2w6MTcyCiAjOiBsaWIvb3B0aW9uLnRjbDoxMjUgbGliL3JlbW90ZV9hZGQudGNsOjMyIGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDIKICM6IGxpYi90b29sc19kbGcudGNsOjQwIGxpYi90b29sc19kbGcudGNsOjIwNCBsaWIvdG9vbHNfZGxnLnRjbDozNTIKLSM6IGxpYi90cmFuc3BvcnQudGNsOjk3CisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMDgKIG1zZ2lkICJDYW5jZWwiCiBtc2dzdHIgIkFubnVsZXIiCiAKQEAgLTY5Nyw3ICs3MjYsNyBAQAogbXNnaWQgIkNyZWF0ZSBOZXcgQnJhbmNoIgogbXNnc3RyICJDcsOpZXIgdW5lIG5vdXZlbGxlIGJyYW5jaGUiCiAKLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDozMSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM3NworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjMxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzgxCiBtc2dpZCAiQ3JlYXRlIgogbXNnc3RyICJDcsOpZXIiCiAKQEAgLTcyOSw3ICs3NTgsNyBAQAogbXNnaWQgIkZhc3QgRm9yd2FyZCBPbmx5IgogbXNnc3RyICJNaXNlIMOgIGpvdXIgcmVjdGlsaWduZSBzZXVsZW1lbnQgKGZhc3QtZm9yd2FyZCkiCiAKLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4NSBsaWIvY2hlY2tvdXRfb3AudGNsOjUzNgorIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjg1IGxpYi9jaGVja291dF9vcC50Y2w6NTcxCiBtc2dpZCAiUmVzZXQiCiBtc2dzdHIgIlLDqWluaXRpYWxpc2VyIgogCkBAIC03NzEsMTUgKzgwMCwyNSBAQAogbXNnaWQgIkRlbGV0ZSBPbmx5IElmIE1lcmdlZCBJbnRvIgogbXNnc3RyICJTdXBwcmltZXIgc2V1bGVtZW50IHNpIGZ1c2lvbm7DqWUgZGFucyA6IgogCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTQKLW1zZ2lkICJBbHdheXMgKERvIG5vdCBwZXJmb3JtIG1lcmdlIHRlc3QuKSIKLW1zZ3N0ciAiVG91am91cnMgKE5lIHBhcyBmYWlyZSBkZSB0ZXN0IGRlIGZ1c2lvbi4pIgorIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjU0IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTE5Cittc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSBjaGVja3MpIgorbXNnc3RyICJUb3Vqb3VycyAobmUgcGFzIHbDqXJpZmllciBsZXMgZnVzaW9ucykiCiAKICM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMDMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczoiCiBtc2dzdHIgIkxlcyBicmFuY2hlcyBzdWl2YW50ZXMgbmUgc29udCBwYXMgY29tcGzDqHRlbWVudCBmdXNpb25uw6llcyBkYW5zICVzIDoiCiAKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMTUgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMTcKK21zZ2lkICIiCisiUmVjb3ZlcmluZyBkZWxldGVkIGJyYW5jaGVzIGlzIGRpZmZpY3VsdC5cbiIKKyJcbiIKKyJEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyIKK21zZ3N0ciAiIgorIklsIGVzdCBkaWZmaWNpbGUgZGUgcsOpY3Vww6lyZXIgZGVzIGJyYW5jaGVzIHN1cHByaW3DqWVzLlxuIgorIlxuIgorIlN1cHByaW1lciBsZXMgYnJhbmNoZXMgc8OpbGVjdGlvbm7DqWVzID8iCisKICM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNDEKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCkBAIC04MDksNyArODQ4LDcgQEAKIG1zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgYnJhbmNoIHRvIHJlbmFtZS4iCiBtc2dzdHIgIk1lcmNpIGRlIHPDqWxlY3Rpb25uZXIgdW5lIGJyYW5jaGUgw6AgcmVub21tZXIuIgogCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6OTYgbGliL2NoZWNrb3V0X29wLnRjbDoyMDEKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo5NiBsaWIvY2hlY2tvdXRfb3AudGNsOjIwMgogIywgdGNsLWZvcm1hdAogbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKIG1zZ3N0ciAiTGEgYnJhbmNoZSAnJXMnIGV4aXN0ZSBkw6lqw6AuIgpAQCAtODQwLDM4ICs4NzksMzggQEAKIG1zZ2lkICJCcm93c2UgQnJhbmNoIEZpbGVzIgogbXNnc3RyICJOYXZpZ3VlciBkYW5zIGxlcyBmaWNoaWVycyBkZSBsZSBicmFuY2hlIgogCi0jOiBsaWIvYnJvd3Nlci50Y2w6Mjc4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzk0Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4MCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5MQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5OTUKKyM6IGxpYi9icm93c2VyLnRjbDoyNzggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozOTgKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDg2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDk3CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjgKIG1zZ2lkICJCcm93c2UiCiBtc2dzdHIgIk5hdmlndWVyIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjg0CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjg1CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiRmV0Y2hpbmcgJXMgZnJvbSAlcyIKIG1zZ3N0ciAiUsOpY3Vww6lyYXRpb24gZGUgJXMgw6AgcGFydGlyIGRlICVzIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjEzMgorIzogbGliL2NoZWNrb3V0X29wLnRjbDoxMzMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJmYXRhbDogQ2Fubm90IHJlc29sdmUgJXMiCiBtc2dzdHIgImVycmV1ciBmYXRhbGUgOiBJbXBvc3NpYmxlIGRlIHLDqXNvdWRyZSAlcyIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNDUgbGliL2NvbnNvbGUudGNsOjgxIGxpYi9kYXRhYmFzZS50Y2w6MzEKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTQ2IGxpYi9jb25zb2xlLnRjbDo4MSBsaWIvZGF0YWJhc2UudGNsOjMxCiAjOiBsaWIvc3Noa2V5LnRjbDo1MwogbXNnaWQgIkNsb3NlIgogbXNnc3RyICJGZXJtZXIiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MTc0CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE3NQogIywgdGNsLWZvcm1hdAogbXNnaWQgIkJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0LiIKIG1zZ3N0ciAiTGEgYnJhbmNoZSAnJXMnIG4nZXhpc3RlIHBhcy4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MTkzCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE5NAogIywgdGNsLWZvcm1hdAogbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgc2ltcGxpZmllZCBnaXQtcHVsbCBmb3IgJyVzJy4iCiBtc2dzdHIgIsOJY2hlYyBkZSBsYSBjb25maWd1cmF0aW9uIHNpbXBsaWZpw6llIGRlIGdpdC1wdWxsIHBvdXIgJyVzJy4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjI4CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjIyOQogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy5cbiIKQEAgLTg4NCwyMSArOTIzLDIxIEBACiAiSW1wb3NzaWJsZSBkZSBmYWlyZSB1bmUgYXZhbmNlIHJhcGlkZSAoZmFzdCBmb3J3YXJkKSB2ZXJzICVzLlxuIgogIlVuZSBmdXNpb24gZXN0IG7DqWNlc3NhaXJlLiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNDIKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjQzCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiTWVyZ2Ugc3RyYXRlZ3kgJyVzJyBub3Qgc3VwcG9ydGVkLiIKIG1zZ3N0ciAiTGEgc3RyYXTDqWdpZSBkZSBmdXNpb24gJyVzJyBuJ2VzdCBwYXMgc3VwcG9ydMOpZS4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjYxCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI2MgogIywgdGNsLWZvcm1hdAogbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgJyVzJy4iCiBtc2dzdHIgIkxhIG1pc2Ugw6Agam91ciBkZSAnJXMnIGEgw6ljaG91w6kuIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI3MworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNzQKIG1zZ2lkICJTdGFnaW5nIGFyZWEgKGluZGV4KSBpcyBhbHJlYWR5IGxvY2tlZC4iCiBtc2dzdHIgIkwnaW5kZXggKHN0YWdpbmcgYXJlYSkgZXN0IGTDqWrDoCB2ZXJyb3VpbGzDqS4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjg4CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI4OQogbXNnaWQgIiIKICJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKICJcbiIKQEAgLTkxNiwzMCArOTU1LDMxIEBACiAiXG4iCiAiQ2VsYSB2YSDDqnRyZSBmYWl0IHRvdXQgZGUgc3VpdGUgYXV0b21hdGlxdWVtZW50LlxuIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NAorIzogbGliL2NoZWNrb3V0X29wLnRjbDozNDUKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJVcGRhdGluZyB3b3JraW5nIGRpcmVjdG9yeSB0byAnJXMnLi4uIgogbXNnc3RyICJNaXNlIMOgIGpvdXIgZHUgcsOpcGVydG9pcmUgY291cmFudCBhdmVjICclcycuLi4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ1CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NgogbXNnaWQgImZpbGVzIGNoZWNrZWQgb3V0IgogbXNnc3RyICJmaWNoaWVycyBjaGFyZ8OpcyIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzUKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc2CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQWJvcnRlZCBjaGVja291dCBvZiAnJXMnIChmaWxlIGxldmVsIG1lcmdpbmcgaXMgcmVxdWlyZWQpLiIKLW1zZ3N0ciAiQ2hhcmdlbWVudCBkZSAnJXMnIGFiYW5kb25uw6kgKGlsIGVzdCBuw6ljZXNzYWlyZSBkZSBmdXNpb25uZXIgZGVzIGZpY2hpZXJzKS4iCittc2dzdHIgIiIKKyJDaGFyZ2VtZW50IGRlICclcycgYWJhbmRvbm7DqSAoaWwgZXN0IG7DqWNlc3NhaXJlIGRlIGZ1c2lvbm5lciBkZXMgZmljaGllcnMpLiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzYKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc3CiBtc2dpZCAiRmlsZSBsZXZlbCBtZXJnZSByZXF1aXJlZC4iCiBtc2dzdHIgIklsIGVzdCBuw6ljZXNzYWlyZSBkZSBmdXNpb25uZXIgZGVzIGZpY2hpZXJzLiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDozODAKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzgxCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiU3RheWluZyBvbiBicmFuY2ggJyVzJy4iCiBtc2dzdHIgIkxlIHLDqXBlcnRvaXJlIGRlIHRyYXZhaWwgcmVzdGUgc3VyIGxhIGJyYW5jaGUgJyVzJy4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NDUxCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjQ1MgogbXNnaWQgIiIKICJZb3UgYXJlIG5vIGxvbmdlciBvbiBhIGxvY2FsIGJyYW5jaC5cbiIKICJcbiIKQEAgLTk1MSwzMCArOTkxLDMwIEBACiAiU2kgdm91cyB2b3VsaWV6IMOqdHJlIHN1ciB1bmUgYnJhbmNoZSwgY3LDqWV6LWVuIHVuZSBtYWludGVuYW50IGVuIHBhcnRhbnQgZGUgIgogIidDZXQgZW1wcnVudCBkw6l0YWNow6knLiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo0NjggbGliL2NoZWNrb3V0X29wLnRjbDo0NzIKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTAzIGxpYi9jaGVja291dF9vcC50Y2w6NTA3CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQ2hlY2tlZCBvdXQgJyVzJy4iCiBtc2dzdHIgIiclcycgY2hhcmfDqS4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTAwCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUzNQogIywgdGNsLWZvcm1hdAogbXNnaWQgIlJlc2V0dGluZyAnJXMnIHRvICclcycgd2lsbCBsb3NlIHRoZSBmb2xsb3dpbmcgY29tbWl0czoiCiBtc2dzdHIgIlLDqWluaXRpYWxpc2VyICclcycgw6AgJyVzJyB2YSBmYWlyZSBwZXJkcmUgbGVzIGNvbW1pdHMgc3VpdmFudHMgOiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MjIKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTU3CiBtc2dpZCAiUmVjb3ZlcmluZyBsb3N0IGNvbW1pdHMgbWF5IG5vdCBiZSBlYXN5LiIKIG1zZ3N0ciAiUsOpY3Vww6lyZXIgbGVzIGNvbW1pdHMgcGVyZHVzIG5lIHNlcmEgcGV1dCDDqnRyZSBwYXMgZmFjaWxlLiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MjcKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTYyCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiUmVzZXQgJyVzJz8iCiBtc2dzdHIgIlLDqWluaXRpYWxpc2VyICclcycgPyIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MzIgbGliL21lcmdlLnRjbDoxNjQgbGliL3Rvb2xzX2RsZy50Y2w6MzQzCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2NyBsaWIvbWVyZ2UudGNsOjE2NCBsaWIvdG9vbHNfZGxnLnRjbDozNDMKIG1zZ2lkICJWaXN1YWxpemUiCiBtc2dzdHIgIlZpc3VhbGlzZXIiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NjAwCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjYzNQogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICJGYWlsZWQgdG8gc2V0IGN1cnJlbnQgYnJhbmNoLlxuIgpAQCAtMTAyMCw3ICsxMDYwLDcgQEAKIG1zZ2lkICJHaXQgR3VpIgogbXNnc3RyICJHaXQgR3VpIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzgyCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzg2CiBtc2dpZCAiQ3JlYXRlIE5ldyBSZXBvc2l0b3J5IgogbXNnc3RyICJDcsOpZXIgbm91dmVhdSBkw6lww7R0IgogCkBAIC0xMDI4LDcgKzEwNjgsNyBAQAogbXNnaWQgIk5ldy4uLiIKIG1zZ3N0ciAiTm91dmVhdS4uLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDAgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NjUKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDcxCiBtc2dpZCAiQ2xvbmUgRXhpc3RpbmcgUmVwb3NpdG9yeSIKIG1zZ3N0ciAiQ2xvbmVyIHVuIGTDqXDDtHQgZXhpc3RhbnQiCiAKQEAgLTEwMzYsNyArMTA3Niw3IEBACiBtc2dpZCAiQ2xvbmUuLi4iCiBtc2dzdHIgIkNsb25lci4uLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5ODMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTEzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxNgogbXNnaWQgIk9wZW4gRXhpc3RpbmcgUmVwb3NpdG9yeSIKIG1zZ3N0ciAiT3V2cmlyIHVuIGTDqXDDtHQgZXhpc3RhbnQiCiAKQEAgLTEwNTIsMTk3ICsxMDkyLDE5OSBAQAogbXNnaWQgIk9wZW4gUmVjZW50IFJlcG9zaXRvcnk6IgogbXNnc3RyICJPdXZyaXIgdW4gZMOpcMO0dCByw6ljZW50IDoiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzAyIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzA5Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMxNgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMDYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMTMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzIwCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXBvc2l0b3J5ICVzOiIKIG1zZ3N0ciAiTGEgY3LDqWF0aW9uIGR1IGTDqXDDtHQgJXMgYSDDqWNob3XDqSA6IgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4NworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozOTEKIG1zZ2lkICJEaXJlY3Rvcnk6IgogbXNnc3RyICJSw6lwZXJ0b2lyZSA6IgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQxNyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU0NAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDE3CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQyMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU1MAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDUyCiBtc2dpZCAiR2l0IFJlcG9zaXRvcnkiCiBtc2dzdHIgIkTDqXDDtHQgR2l0IgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0MgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NDgKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJEaXJlY3RvcnkgJXMgYWxyZWFkeSBleGlzdHMuIgogbXNnc3RyICJMZSByw6lwZXJ0b2lyZSAlcyBleGlzdGUgZMOpasOgLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NDYKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDUyCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiRmlsZSAlcyBhbHJlYWR5IGV4aXN0cy4iCiBtc2dzdHIgIkxlIGZpY2hpZXIgJXMgZXhpc3RlIGTDqWrDoC4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDYwCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ2NgogbXNnaWQgIkNsb25lIgogbXNnc3RyICJDbG9uZXIiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDczCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3OQogbXNnaWQgIlNvdXJjZSBMb2NhdGlvbjoiCiBtc2dzdHIgIkVtcGxhY2VtZW50IHNvdXJjZSA6IgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4NAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTAKIG1zZ2lkICJUYXJnZXQgRGlyZWN0b3J5OiIKIG1zZ3N0ciAiUsOpcGVydG9pcmUgY2libGUgOiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTYKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAyCiBtc2dpZCAiQ2xvbmUgVHlwZToiCiBtc2dzdHIgIlR5cGUgZGUgY2xvbmFnZSA6IgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwMgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDgKIG1zZ2lkICJTdGFuZGFyZCAoRmFzdCwgU2VtaS1SZWR1bmRhbnQsIEhhcmRsaW5rcykiCiBtc2dzdHIgIlN0YW5kYXJkIChyYXBpZGUsIHNlbWktcmVkb25kYW50LCBsaWVucyBkdXJzKSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDgKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTE0CiBtc2dpZCAiRnVsbCBDb3B5IChTbG93ZXIsIFJlZHVuZGFudCBCYWNrdXApIgogbXNnc3RyICJDb3B5IGNvbXBsw6h0ZSAocGx1cyBsZW50LCBzYXV2ZWdhcmRlIHJlZG9uZGFudGUpIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUxNAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MjAKIG1zZ2lkICJTaGFyZWQgKEZhc3Rlc3QsIE5vdCBSZWNvbW1lbmRlZCwgTm8gQmFja3VwKSIKIG1zZ3N0ciAiUGFydGFnw6kgKGxlIHBsdXMgcmFwaWRlLCBub24gcmVjb21tYW5kw6ksIHBhcyBkZSBzYXV2ZWdhcmRlKSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NTAgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTcKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzQzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODEzCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDMxCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU1NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYwMworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NDkgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MTkKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA1OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNjYKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJOb3QgYSBHaXQgcmVwb3NpdG9yeTogJXMiCiBtc2dzdHIgIiclcycgbidlc3QgcGFzIHVuIGTDqXDDtHQgR2l0LiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1ODYKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTkyCiBtc2dpZCAiU3RhbmRhcmQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgogbXNnc3RyICJTdGFuZGFyZCBuJ2VzdCBkaXNwb25pYmxlIHF1ZSBwb3VyIHVuIGTDqXDDtHQgbG9jYWwuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU5MAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTYKIG1zZ2lkICJTaGFyZWQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgogbXNnc3RyICJQYXJ0YWfDqSBuJ2VzdCBkaXNwb25pYmxlIHF1ZSBwb3VyIHVuIGTDqXDDtHQgbG9jYWwuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxMQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MTcKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJMb2NhdGlvbiAlcyBhbHJlYWR5IGV4aXN0cy4iCiBtc2dzdHIgIkwnZW1wbGFjZW1lbnQgJXMgZXhpc3RlIGTDqWrDoC4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjIyCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYyOAogbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgb3JpZ2luIgogbXNnc3RyICJMYSBjb25maWd1cmF0aW9uIGRlIGwnb3JpZ2luZSBhIMOpY2hvdcOpLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MzQKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjQwCiBtc2dpZCAiQ291bnRpbmcgb2JqZWN0cyIKIG1zZ3N0ciAiRMOpY29tcHRlIGRlcyBvYmpldHMiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjM1CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0MQogbXNnaWQgImJ1Y2tldHMiCiBtc2dzdHIgInBhbmllcnMiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjU5CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY2NQogIywgdGNsLWZvcm1hdAogbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdHMvaW5mby9hbHRlcm5hdGVzOiAlcyIKIG1zZ3N0ciAiSW1wb3NzaWJsZSBkZSBjb3BpZXIgJ29iamVjdHMvaW5mby9hbHRlcm5hdGVzJyA6ICVzIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY5NQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MDEKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJOb3RoaW5nIHRvIGNsb25lIGZyb20gJXMuIgogbXNnc3RyICJJbCBuJ3kgYSByaWVuIMOgIGNsb25lciBkZXB1aXMgJXMuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY5NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxMQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzAzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTE3CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyOQogbXNnaWQgIlRoZSAnbWFzdGVyJyBicmFuY2ggaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLiIKIG1zZ3N0ciAiTGEgYnJhbmNoZSAnbWFzdGVyJyBuJ2EgcGFzIMOpdMOpIGluaXRpYWxpc8OpZS4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzEwCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcxNgogbXNnaWQgIkhhcmRsaW5rcyBhcmUgdW5hdmFpbGFibGUuICBGYWxsaW5nIGJhY2sgdG8gY29weWluZy4iCi1tc2dzdHIgIkxlcyBsaWVucyBkdXJzIG5lIHNvbnQgcGFzIHN1cHBvcnTDqXMuIFVuZSBjb3BpZSBzZXJhIGVmZmVjdHXDqWUgw6AgbGEgcGxhY2UuIgorbXNnc3RyICIiCisiTGVzIGxpZW5zIGR1cnMgbmUgc29udCBwYXMgc3VwcG9ydMOpcy4gVW5lIGNvcGllIHNlcmEgZWZmZWN0dcOpZSDDoCBsYSBwbGFjZS4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzIyCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcyOAogIywgdGNsLWZvcm1hdAogbXNnaWQgIkNsb25pbmcgZnJvbSAlcyIKIG1zZ3N0ciAiQ2xvbmFnZSBkZXB1aXMgJXMiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzUzCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc1OQogbXNnaWQgIkNvcHlpbmcgb2JqZWN0cyIKIG1zZ3N0ciAiQ29waWUgZGVzIG9iamV0cyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NTQKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzYwCiBtc2dpZCAiS2lCIgogbXNnc3RyICJLaUIiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzc4CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc4NAogIywgdGNsLWZvcm1hdAogbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdDogJXMiCiBtc2dzdHIgIkltcG9zc2libGUgZGUgY29waWVyIGwnb2JqZXQgOiAlcyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODgKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzk0CiBtc2dpZCAiTGlua2luZyBvYmplY3RzIgogbXNnc3RyICJMaWFpc29uIGRlcyBvYmpldHMiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzg5CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc5NQogbXNnaWQgIm9iamVjdHMiCiBtc2dzdHIgIm9iamV0cyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTcKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODAzCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVW5hYmxlIHRvIGhhcmRsaW5rIG9iamVjdDogJXMiCiBtc2dzdHIgIkltcG9zc2libGUgY3LDqWVyIHVuIGxpZW4gZHVyIHBvdXIgbCdvYmpldCA6ICVzIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg1MgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NTgKIG1zZ2lkICJDYW5ub3QgZmV0Y2ggYnJhbmNoZXMgYW5kIG9iamVjdHMuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgogbXNnc3RyICIiCiAiSW1wb3NzaWJsZSBkZSByw6ljdXDDqXJlciBsZXMgYnJhbmNoZXMgZXQgb2JqZXRzLiBWb2lyIGxhIHNvcnRpZSBjb25zb2xlIHBvdXIgIgogInBsdXMgZGUgZMOpdGFpbHMuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg2MworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NjkKIG1zZ2lkICJDYW5ub3QgZmV0Y2ggdGFncy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCiBtc2dzdHIgIiIKICJJbXBvc3NpYmxlIGRlIHLDqWN1cMOpcmVyIGxlcyBtYXJxdWVzICh0YWdzKS4gVm9pciBsYSBzb3J0aWUgY29uc29sZSBwb3VyIHBsdXMgIgogImRlIGTDqXRhaWxzLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4ODcKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODkzCiBtc2dpZCAiQ2Fubm90IGRldGVybWluZSBIRUFELiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBkZSBkw6l0ZXJtaW5lciBIRUFELiBWb2lyIGxhIHNvcnRpZSBjb25zb2xlIHBvdXIgcGx1cyBkZSBkw6l0YWlscy4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIGTDqXRlcm1pbmVyIEhFQUQuIFZvaXIgbGEgc29ydGllIGNvbnNvbGUgcG91ciBwbHVzIGRlIGTDqXRhaWxzLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4OTYKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTAyCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVW5hYmxlIHRvIGNsZWFudXAgJXMiCiBtc2dzdHIgIkltcG9zc2libGUgZGUgbmV0dG95ZXIgJXMiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTAyCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwOAogbXNnaWQgIkNsb25lIGZhaWxlZC4iCiBtc2dzdHIgIkxlIGNsb25hZ2UgYSDDqWNob3XDqS4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTA5CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNQogbXNnaWQgIk5vIGRlZmF1bHQgYnJhbmNoIG9idGFpbmVkLiIKIG1zZ3N0ciAiQXVjdW5lIGJyYW5jaGUgcGFyIGTDqWZhdXQgbidhIMOpdMOpIG9idGVudWUuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyMAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjYKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJDYW5ub3QgcmVzb2x2ZSAlcyBhcyBhIGNvbW1pdC4iCiBtc2dzdHIgIkltcG9zc2libGUgZGUgcsOpc291ZHJlICVzIGNvbW1lIGNvbW1pdC4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTMyCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzOAogbXNnaWQgIkNyZWF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IgogbXNnc3RyICJDcsOpYXRpb24gZHUgcsOpcGVydG9pcmUgZGUgdHJhdmFpbCIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MzMgbGliL2luZGV4LnRjbDo2NSBsaWIvaW5kZXgudGNsOjEyOAotIzogbGliL2luZGV4LnRjbDoxOTYKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTM5IGxpYi9pbmRleC50Y2w6NjcgbGliL2luZGV4LnRjbDoxMzAKKyM6IGxpYi9pbmRleC50Y2w6MTk4CiBtc2dpZCAiZmlsZXMiCiBtc2dzdHIgImZpY2hpZXJzIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk2MgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NjgKIG1zZ2lkICJJbml0aWFsIGZpbGUgY2hlY2tvdXQgZmFpbGVkLiIKIG1zZ3N0ciAiTGUgY2hhcmdlbWVudCBpbml0aWFsIGR1IGZpY2hpZXIgYSDDqWNob3XDqS4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTc4CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTEKIG1zZ2lkICJPcGVuIgogbXNnc3RyICJPdXZyaXIiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTg4CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjEKIG1zZ2lkICJSZXBvc2l0b3J5OiIKIG1zZ3N0ciAiRMOpcMO0dCA6IgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMzcKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA3MgogIywgdGNsLWZvcm1hdAogbXNnaWQgIkZhaWxlZCB0byBvcGVuIHJlcG9zaXRvcnkgJXM6IgogbXNnc3RyICJJbXBvc3NpYmxlIGQnb3V2cmlyIGxlIGTDqXDDtHQgJXMgOiIKQEAgLTEzMTQsMTkgKzEzNTYsMjQgQEAKICJ0ZXJtaW7DqWUuIFZvdXMgbmUgcG91dmV6IHBhcyBjb3JyaWdlciBsZSBjb21taXQgcHLDqWPDqWRlbnQgc2F1ZiBzaSB2b3VzICIKICJhYmFuZG9ubmV6IGxhIGZ1c2lvbiBjb3VyYW50ZS5cbiIKIAotIzogbGliL2NvbW1pdC50Y2w6NDkKKyM6IGxpYi9jb21taXQudGNsOjQ4CiBtc2dpZCAiRXJyb3IgbG9hZGluZyBjb21taXQgZGF0YSBmb3IgYW1lbmQ6IgogbXNnc3RyICJFcnJldXIgbG9ycyBkdSBjaGFyZ2VtZW50IGRlcyBkb25uw6llcyBkZSBjb21taXQgcG91ciBjb3JyZWN0aW9uIDoiCiAKLSM6IGxpYi9jb21taXQudGNsOjc2CisjOiBsaWIvY29tbWl0LnRjbDo3NQogbXNnaWQgIlVuYWJsZSB0byBvYnRhaW4geW91ciBpZGVudGl0eToiCiBtc2dzdHIgIkltcG9zc2libGUgZCdvYnRlbmlyIHZvdHJlIGlkZW50aXTDqSA6IgogCi0jOiBsaWIvY29tbWl0LnRjbDo4MQorIzogbGliL2NvbW1pdC50Y2w6ODAKIG1zZ2lkICJJbnZhbGlkIEdJVF9DT01NSVRURVJfSURFTlQ6IgogbXNnc3RyICJHSVRfQ09NTUlUVEVSX0lERU5UIGludmFsaWRlIDoiCiAKLSM6IGxpYi9jb21taXQudGNsOjEzMworIzogbGliL2NvbW1pdC50Y2w6MTI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAid2FybmluZzogVGNsIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RpbmcgJyVzJy4iCittc2dzdHIgImF0dGVudGlvbiA6IFRjbCBuZSBzdXBwb3J0ZSBwYXMgbGUgY29kYWdlICclcycuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxNDkKIG1zZ2lkICIiCiAiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCiAiXG4iCkBAIC0xMzQ0LDcgKzEzOTEsNyBAQAogIlxuIgogIkNlbGEgdmEgw6p0cmUgZmFpdCB0b3V0IGRlIHN1aXRlIGF1dG9tYXRpcXVlbWVudC5cbiIKIAotIzogbGliL2NvbW1pdC50Y2w6MTU2CisjOiBsaWIvY29tbWl0LnRjbDoxNzIKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiVW5tZXJnZWQgZmlsZXMgY2Fubm90IGJlIGNvbW1pdHRlZC5cbiIKQEAgLTEzNTcsNyArMTQwNCw3IEBACiAiTGUgZmljaGllciAlcyBhIGRlcyBjb25mbGljdHMgZGUgZnVzaW9uLiBWb3VzIGRldmV6IGxlcyByw6lzb3VkcmUgZXQgcHLDqS0iCiAiY29tbWl0ZXIgbGUgZmljaGllciBhdmFudCBkZSBwb3V2b2lyIGNvbW1pdGVyLlxuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxNjQKKyM6IGxpYi9jb21taXQudGNsOjE4MAogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICJVbmtub3duIGZpbGUgc3RhdGUgJXMgZGV0ZWN0ZWQuXG4iCkBAIC0xMzY4LDcgKzE0MTUsNyBAQAogIlxuIgogIkxlIGZpY2hpZXIgJXMgbmUgcGV1dCBwYXMgw6p0cmUgY29tbWl0w6kgcGFyIGNlIHByb2dyYW1tZS5cbiIKIAotIzogbGliL2NvbW1pdC50Y2w6MTcyCisjOiBsaWIvY29tbWl0LnRjbDoxODgKIG1zZ2lkICIiCiAiTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCiAiXG4iCkBAIC0xMzc4LDcgKzE0MjUsNyBAQAogIlxuIgogIlZvdXMgZGV2ZXogaW5kZXhlciBhdSBtb2lucyAxIGZpY2hpZXIgYXZhbnQgZGUgcG91dm9pciBjb21taXRlci5cbiIKIAotIzogbGliL2NvbW1pdC50Y2w6MTg3CisjOiBsaWIvY29tbWl0LnRjbDoyMDMKIG1zZ2lkICIiCiAiUGxlYXNlIHN1cHBseSBhIGNvbW1pdCBtZXNzYWdlLlxuIgogIlxuIgpAQCAtMTM5Niw0NSArMTQ0Myw0MCBAQAogIi0gRGV1eGnDqG1lIGxpZ25lIDogcmllbi5cbiIKICItIExpZ25lcyBzdWl2YW50ZXMgOiBEw6ljcmlyZSBwb3VycXVvaSBjZXMgbW9kaWZpY2F0aW9ucyBzb250IGJvbm5lcy5cbiIKIAotIzogbGliL2NvbW1pdC50Y2w6MjExCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAid2FybmluZzogVGNsIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RpbmcgJyVzJy4iCi1tc2dzdHIgImF0dGVudGlvbiA6IFRjbCBuZSBzdXBwb3J0ZSBwYXMgbGUgY29kYWdlICclcycuIgotCi0jOiBsaWIvY29tbWl0LnRjbDoyMjcKKyM6IGxpYi9jb21taXQudGNsOjIzNAogbXNnaWQgIkNhbGxpbmcgcHJlLWNvbW1pdCBob29rLi4uIgogbXNnc3RyICJMYW5jZW1lbnQgZGUgbCdhY3Rpb24gZCdhdmFudC1jb21taXQuLi4iCiAKLSM6IGxpYi9jb21taXQudGNsOjI0MgorIzogbGliL2NvbW1pdC50Y2w6MjQ5CiBtc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZS1jb21taXQgaG9vay4iCiBtc2dzdHIgIkNvbW1pdCByZWZ1c8OpIHBhciBsJ2FjdGlvbiBkJ2F2YW50LWNvbW1pdC4iCiAKLSM6IGxpYi9jb21taXQudGNsOjI2NQorIzogbGliL2NvbW1pdC50Y2w6MjcyCiBtc2dpZCAiQ2FsbGluZyBjb21taXQtbXNnIGhvb2suLi4iCiBtc2dzdHIgIkxhbmNlbWVudCBkZSBsJ2FjdGlvbiBcIm1lc3NhZ2UgZGUgY29tbWl0XCIuLi4iCiAKLSM6IGxpYi9jb21taXQudGNsOjI4MAorIzogbGliL2NvbW1pdC50Y2w6Mjg3CiBtc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IGNvbW1pdC1tc2cgaG9vay4iCiBtc2dzdHIgIkNvbW1pdCByZWZ1c8OpIHBhciBsJ2FjdGlvbiBcIm1lc3NhZ2UgZGUgY29tbWl0XCIuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyOTMKKyM6IGxpYi9jb21taXQudGNsOjMwMAogbXNnaWQgIkNvbW1pdHRpbmcgY2hhbmdlcy4uLiIKIG1zZ3N0ciAiQ29tbWl0IGRlcyBtb2RpZmljYXRpb25zLi4uIgogCi0jOiBsaWIvY29tbWl0LnRjbDozMDkKKyM6IGxpYi9jb21taXQudGNsOjMxNgogbXNnaWQgIndyaXRlLXRyZWUgZmFpbGVkOiIKIG1zZ3N0ciAid3JpdGUtdHJlZSBhIMOpY2hvdcOpIDoiCiAKLSM6IGxpYi9jb21taXQudGNsOjMxMCBsaWIvY29tbWl0LnRjbDozNTQgbGliL2NvbW1pdC50Y2w6Mzc0CisjOiBsaWIvY29tbWl0LnRjbDozMTcgbGliL2NvbW1pdC50Y2w6MzYxIGxpYi9jb21taXQudGNsOjM4MgogbXNnaWQgIkNvbW1pdCBmYWlsZWQuIgogbXNnc3RyICJMZSBjb21taXQgYSDDqWNob3XDqS4iCiAKLSM6IGxpYi9jb21taXQudGNsOjMyNworIzogbGliL2NvbW1pdC50Y2w6MzM0CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQ29tbWl0ICVzIGFwcGVhcnMgdG8gYmUgY29ycnVwdCIKIG1zZ3N0ciAiTGUgY29tbWl0ICVzIHNlbWJsZSDDqnRyZSBjb3Jyb21wdSIKIAotIzogbGliL2NvbW1pdC50Y2w6MzMyCisjOiBsaWIvY29tbWl0LnRjbDozMzkKIG1zZ2lkICIiCiAiTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCiAiXG4iCkBAIC0xNDQ5LDE5ICsxNDkxLDE5IEBACiAiXG4iCiAiVW5lIHJlc3luY2hyb25pc2F0aW9uIHZhIMOqdHJlIGxhbmPDqWUgdG91dCBkZSBzdWl0ZSBhdXRvbWF0aXF1ZW1lbnQuXG4iCiAKLSM6IGxpYi9jb21taXQudGNsOjMzOQorIzogbGliL2NvbW1pdC50Y2w6MzQ2CiBtc2dpZCAiTm8gY2hhbmdlcyB0byBjb21taXQuIgogbXNnc3RyICJQYXMgZGUgbW9kaWZpY2F0aW9ucyDDoCBjb21taXRlci4iCiAKLSM6IGxpYi9jb21taXQudGNsOjM1MworIzogbGliL2NvbW1pdC50Y2w6MzYwCiBtc2dpZCAiY29tbWl0LXRyZWUgZmFpbGVkOiIKIG1zZ3N0ciAiY29tbWl0LXRyZWUgYSDDqWNob3XDqSA6IgogCi0jOiBsaWIvY29tbWl0LnRjbDozNzMKKyM6IGxpYi9jb21taXQudGNsOjM4MQogbXNnaWQgInVwZGF0ZS1yZWYgZmFpbGVkOiIKIG1zZ3N0ciAidXBkYXRlLXJlZiBhIMOpY2hvdcOpIDoiCiAKLSM6IGxpYi9jb21taXQudGNsOjQ2MQorIzogbGliL2NvbW1pdC50Y2w6NDY5CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQ3JlYXRlZCBjb21taXQgJXM6ICVzIgogbXNnc3RyICJDb21taXQgJXMgY3LDqcOpIDogJXMiCkBAIC0xNTE0LDEzICsxNTU2LDEzIEBACiBtc2dpZCAiVmVyaWZ5aW5nIHRoZSBvYmplY3QgZGF0YWJhc2Ugd2l0aCBmc2NrLW9iamVjdHMiCiBtc2dzdHIgIlbDqXJpZmljYXRpb24gZGUgbGEgYmFzZSBkZXMgb2JqZXRzIGF2ZWMgZnNjay1vYmplY3RzIgogCi0jOiBsaWIvZGF0YWJhc2UudGNsOjEwOAorIzogbGliL2RhdGFiYXNlLnRjbDoxMDcKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiVGhpcyByZXBvc2l0b3J5IGN1cnJlbnRseSBoYXMgYXBwcm94aW1hdGVseSAlaSBsb29zZSBvYmplY3RzLlxuIgogIlxuIgogIlRvIG1haW50YWluIG9wdGltYWwgcGVyZm9ybWFuY2UgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgY29tcHJlc3MgIgotInRoZSBkYXRhYmFzZSB3aGVuIG1vcmUgdGhhbiAlaSBsb29zZSBvYmplY3RzIGV4aXN0LlxuIgorInRoZSBkYXRhYmFzZS5cbiIKICJcbiIKICJDb21wcmVzcyB0aGUgZGF0YWJhc2Ugbm93PyIKIG1zZ3N0ciAiIgpAQCAtMTUyOCw4ICsxNTcwLDcgQEAKICJwYXJ0aWN1bGllci5cbiIKICJcbiIKICJQb3VyIGNvbnNlcnZlciB1bmUgcGVyZm9ybWFuY2Ugb3B0aW1hbGUsIGlsIGVzdCBmb3J0ZW1lbnQgcmVjb21tYW5kw6kgZGUgIgotImNvbXByaW1lciBsYSBiYXNlIHF1YW5kIHBsdXMgZGUgJWkgb2JqZXRzIGF5YW50IGxldXIgZmljaGllciBwYXJ0aWN1bGllciAiCi0iZXhpc3RlbnQuXG4iCisiY29tcHJpbWVyIGxhIGJhc2UgZGUgZG9ubsOpZS5cbiIKICJcbiIKICJDb21wcmltZXIgbGEgYmFzZSBtYWludGVuYW50ID8iCiAKQEAgLTE1MzgsNyArMTU3OSw3IEBACiBtc2dpZCAiSW52YWxpZCBkYXRlIGZyb20gR2l0OiAlcyIKIG1zZ3N0ciAiRGF0ZSBpbnZhbGlkZSBkZSBHaXQgOiAlcyIKIAotIzogbGliL2RpZmYudGNsOjU5CisjOiBsaWIvZGlmZi50Y2w6NjQKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiTm8gZGlmZmVyZW5jZXMgZGV0ZWN0ZWQuXG4iCkBAIC0xNTYxLDEyICsxNjAyLDEyIEBACiAiVW5lIHJlc3luY2hyb25pc2F0aW9uIHZhIMOqdHJlIGxhbmPDqWUgYXV0b21hdGlxdWVtZW50IHBvdXIgdHJvdXZlciBkJ2F1dHJlcyAiCiAiZmljaGllcnMgcXVpIHBvdXJyYWllbnQgc2UgdHJvdXZlciBkYW5zIGxlIG3Dqm1lIMOpdGF0LiIKIAotIzogbGliL2RpZmYudGNsOjk5CisjOiBsaWIvZGlmZi50Y2w6MTA0CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiTG9hZGluZyBkaWZmIG9mICVzLi4uIgogbXNnc3RyICJDaGFyZ2VtZW50IGRlcyBkaWZmw6lyZW5jZXMgZGUgJXMuLi4iCiAKLSM6IGxpYi9kaWZmLnRjbDoxMjAKKyM6IGxpYi9kaWZmLnRjbDoxMjUKIG1zZ2lkICIiCiAiTE9DQUw6IGRlbGV0ZWRcbiIKICJSRU1PVEU6XG4iCkBAIC0xNTc0LDcgKzE2MTUsNyBAQAogIkxPQ0FMIDogc3VwcHJpbcOpXG4iCiAiRElTVEFOVCA6XG4iCiAKLSM6IGxpYi9kaWZmLnRjbDoxMjUKKyM6IGxpYi9kaWZmLnRjbDoxMzAKIG1zZ2lkICIiCiAiUkVNT1RFOiBkZWxldGVkXG4iCiAiTE9DQUw6XG4iCkBAIC0xNTgyLDMyICsxNjIzLDMyIEBACiAiRElTVEFOVCA6IHN1cHByaW3DqVxuIgogIkxPQ0FMIDpcbiIKIAotIzogbGliL2RpZmYudGNsOjEzMgorIzogbGliL2RpZmYudGNsOjEzNwogbXNnaWQgIkxPQ0FMOlxuIgogbXNnc3RyICJMT0NBTCA6XG4iCiAKLSM6IGxpYi9kaWZmLnRjbDoxMzUKKyM6IGxpYi9kaWZmLnRjbDoxNDAKIG1zZ2lkICJSRU1PVEU6XG4iCiBtc2dzdHIgIkRJU1RBTlQgOlxuIgogCi0jOiBsaWIvZGlmZi50Y2w6MTk3IGxpYi9kaWZmLnRjbDoyOTYKKyM6IGxpYi9kaWZmLnRjbDoyMDIgbGliL2RpZmYudGNsOjMxOQogIywgdGNsLWZvcm1hdAogbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5ICVzIgogbXNnc3RyICJJbXBvc3NpYmxlIGQnYWZmaWNoZXIgJXMiCiAKLSM6IGxpYi9kaWZmLnRjbDoxOTgKKyM6IGxpYi9kaWZmLnRjbDoyMDMKIG1zZ2lkICJFcnJvciBsb2FkaW5nIGZpbGU6IgogbXNnc3RyICJFcnJldXIgbG9ycyBkdSBjaGFyZ2VtZW50IGR1IGZpY2hpZXIgOiIKIAotIzogbGliL2RpZmYudGNsOjIwNQorIzogbGliL2RpZmYudGNsOjIxMAogbXNnaWQgIkdpdCBSZXBvc2l0b3J5IChzdWJwcm9qZWN0KSIKIG1zZ3N0ciAiRMOpcMO0dCBHaXQgKHNvdXMgcHJvamV0KSIKIAotIzogbGliL2RpZmYudGNsOjIxNworIzogbGliL2RpZmYudGNsOjIyMgogbXNnaWQgIiogQmluYXJ5IGZpbGUgKG5vdCBzaG93aW5nIGNvbnRlbnQpLiIKIG1zZ3N0ciAiKiBGaWNoaWVyIGJpbmFpcmUgKHBhcyBkJ2FwcGVyw6d1IGR1IGNvbnRlbnUpLiIKIAotIzogbGliL2RpZmYudGNsOjIyMgorIzogbGliL2RpZmYudGNsOjIyNwogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICIqIFVudHJhY2tlZCBmaWxlIGlzICVkIGJ5dGVzLlxuIgpAQCAtMTYxNiw3ICsxNjU3LDcgQEAKICIqIExlIGZpY2hpZXIgbm9uIHN1aXZpIGZhaXQgJWQgb2N0ZXRzLlxuIgogIiogU2V1bHMgbGVzICVkIHByZW1pZXJzIG9jdGV0cyBzb250IG1vbnRyw6lzLlxuIgogCi0jOiBsaWIvZGlmZi50Y2w6MjI4CisjOiBsaWIvZGlmZi50Y2w6MjMzCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiIgogIlxuIgpAQCAtMTYyNywxOSArMTY2OCwxOSBAQAogIiogRmljaGllciBzdWl2aSByYWNjb3VyY2lzIGljaSBkZSAlcy5cbiIKICIqIFBvdXIgdm9pciBsZSBmaWNoaWVyIGVudGllciwgdXRpbGlzZXogdW4gw6lkaXRldXIgZXh0ZXJuZS5cbiIKIAotIzogbGliL2RpZmYudGNsOjQzNgorIzogbGliL2RpZmYudGNsOjQ4MgogbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGh1bmsuIgogbXNnc3RyICLDiWNoZWMgbG9ycyBkZSBsYSBkw6lzaW5kZXhhdGlvbiBkZSBsYSBzZWN0aW9uIHPDqWxlY3Rpb25uw6llLiIKIAotIzogbGliL2RpZmYudGNsOjQ0MworIzogbGliL2RpZmYudGNsOjQ4OQogbXNnaWQgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBodW5rLiIKIG1zZ3N0ciAiw4ljaGVjIGxvcnMgZGUgbCdpbmRleGF0aW9uIGRlIGxhIHNlY3Rpb24uIgogCi0jOiBsaWIvZGlmZi50Y2w6NTA5CisjOiBsaWIvZGlmZi50Y2w6NTY4CiBtc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCiBtc2dzdHIgIsOJY2hlYyBsb3JzIGRlIGxhIGTDqXNpbmRleGF0aW9uIGRlIGxhIGxpZ25lIHPDqWxlY3Rpb25uw6llLiIKIAotIzogbGliL2RpZmYudGNsOjUxNworIzogbGliL2RpZmYudGNsOjU3NgogbXNnaWQgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBsaW5lLiIKIG1zZ3N0ciAiw4ljaGVjIGxvcnMgZGUgbCdpbmRleGF0aW9uIGRlIGxhIGxpZ25lLiIKIApAQCAtMTY3Niw3ICsxNzE3LDcgQEAKIG1zZ2lkICJJbmRleCBFcnJvciIKIG1zZ3N0ciAiRXJyZXVyIGRlIGwnaW5kZXgiCiAKLSM6IGxpYi9pbmRleC50Y2w6MjEKKyM6IGxpYi9pbmRleC50Y2w6MTcKIG1zZ2lkICIiCiAiVXBkYXRpbmcgdGhlIEdpdCBpbmRleCBmYWlsZWQuICBBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byAiCiAicmVzeW5jaHJvbml6ZSBnaXQtZ3VpLiIKQEAgLTE2ODQsNyArMTcyNSw3IEBACiAiw4ljaGVjIGRlIGxhIG1pc2Ugw6Agam91ciBkZSBsJ2luZGV4LiBVbmUgcmVzeW5jaHJvbmlzYXRpb24gdmEgw6p0cmUgbGFuY8OpZSAiCiAiYXV0b21hdGlxdWVtZW50LiIKIAotIzogbGliL2luZGV4LnRjbDoyNworIzogbGliL2luZGV4LnRjbDoyOAogbXNnaWQgIkNvbnRpbnVlIgogbXNnc3RyICJDb250aW51ZXIiCiAKQEAgLTE2OTIsNDUgKzE3MzMsNDUgQEAKIG1zZ2lkICJVbmxvY2sgSW5kZXgiCiBtc2dzdHIgIkTDqXZlcnJvdWlsbGVyIGwnaW5kZXgiCiAKLSM6IGxpYi9pbmRleC50Y2w6Mjg3CisjOiBsaWIvaW5kZXgudGNsOjI4OQogIywgdGNsLWZvcm1hdAogbXNnaWQgIlVuc3RhZ2luZyAlcyBmcm9tIGNvbW1pdCIKIG1zZ3N0ciAiRMOpc2luZGV4YXRpb24gZGUgOiAlcyIKIAotIzogbGliL2luZGV4LnRjbDozMjYKKyM6IGxpYi9pbmRleC50Y2w6MzI4CiBtc2dpZCAiUmVhZHkgdG8gY29tbWl0LiIKIG1zZ3N0ciAiUHLDqnQgw6Agw6p0cmUgY29tbWl0w6kuIgogCi0jOiBsaWIvaW5kZXgudGNsOjMzOQorIzogbGliL2luZGV4LnRjbDozNDEKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJBZGRpbmcgJXMiCiBtc2dzdHIgIkFqb3V0IGRlICVzIgogCi0jOiBsaWIvaW5kZXgudGNsOjM5NgorIzogbGliL2luZGV4LnRjbDozOTgKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiBmaWxlICVzPyIKIG1zZ3N0ciAiQW5udWxlciBsZXMgbW9kaWZpY2F0aW9ucyBkYW5zIGxlIGZpY2hpZXIgJXMgPyAiCiAKLSM6IGxpYi9pbmRleC50Y2w6Mzk4CisjOiBsaWIvaW5kZXgudGNsOjQwMAogIywgdGNsLWZvcm1hdAogbXNnaWQgIlJldmVydCBjaGFuZ2VzIGluIHRoZXNlICVpIGZpbGVzPyIKIG1zZ3N0ciAiQW5udWxlciBsZXMgbW9kaWZpY2F0aW9ucyBkYW5zIGNlcyAlaSBmaWNoaWVycyA/IgogCi0jOiBsaWIvaW5kZXgudGNsOjQwNgorIzogbGliL2luZGV4LnRjbDo0MDgKIG1zZ2lkICJBbnkgdW5zdGFnZWQgY2hhbmdlcyB3aWxsIGJlIHBlcm1hbmVudGx5IGxvc3QgYnkgdGhlIHJldmVydC4iCiBtc2dzdHIgIiIKICJUb3V0ZXMgbGVzIG1vZGlmaWNhdGlvbnMgbm9uLWluZGV4w6llcyBzZXJvbnQgZMOpZmluaXRpdmVtZW50IHBlcmR1ZXMgcGFyICIKICJsJ2FubnVsYXRpb24uIgogCi0jOiBsaWIvaW5kZXgudGNsOjQwOQorIzogbGliL2luZGV4LnRjbDo0MTEKIG1zZ2lkICJEbyBOb3RoaW5nIgogbXNnc3RyICJOZSByaWVuIGZhaXJlIgogCi0jOiBsaWIvaW5kZXgudGNsOjQyNworIzogbGliL2luZGV4LnRjbDo0MjkKIG1zZ2lkICJSZXZlcnRpbmcgc2VsZWN0ZWQgZmlsZXMiCiBtc2dzdHIgIkFubnVsZXIgbW9kaWZpY2F0aW9ucyBkYW5zIGZpY2hpZXJzIHNlbGVjdGlvbm7DqXMiCiAKLSM6IGxpYi9pbmRleC50Y2w6NDMxCisjOiBsaWIvaW5kZXgudGNsOjQzMwogIywgdGNsLWZvcm1hdAogbXNnaWQgIlJldmVydGluZyAlcyIKIG1zZ3N0ciAiQW5udWxhdGlvbiBkZXMgbW9kaWZpY2F0aW9ucyBkYW5zICVzIgpAQCAtMTkxMyw3ICsxOTU0LDggQEAKICM6IGxpYi9tZXJnZXRvb2wudGNsOjQ1CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiRmlsZSAlcyBzZWVtcyB0byBoYXZlIHVucmVzb2x2ZWQgY29uZmxpY3RzLCBzdGlsbCBzdGFnZT8iCi1tc2dzdHIgIkxlIGZpY2hpZXIgJXMgc2VtYmxlIGF2b2lyIGRlcyBjb25mbGl0cyBub24gcsOpc29sdXMsIGluZGV4ZXIgcXVhbmQgbcOqbWUgPyIKK21zZ3N0ciAiIgorIkxlIGZpY2hpZXIgJXMgc2VtYmxlIGF2b2lyIGRlcyBjb25mbGl0cyBub24gcsOpc29sdXMsIGluZGV4ZXIgcXVhbmQgbcOqbWUgPyIKIAogIzogbGliL21lcmdldG9vbC50Y2w6NjAKICMsIHRjbC1mb3JtYXQKQEAgLTE5MjIsNyArMTk2NCw5IEBACiAKICM6IGxpYi9tZXJnZXRvb2wudGNsOjE0MQogbXNnaWQgIkNhbm5vdCByZXNvbHZlIGRlbGV0aW9uIG9yIGxpbmsgY29uZmxpY3RzIHVzaW5nIGEgdG9vbCIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBkZSByw6lzb3VkcmUgbGEgc3VwcHJlc3Npb24gb3UgZGUgcmVsaWVyIGRlcyBjb25mbGl0cyBlbiB1dGlsaXNhbnQgdW4gb3V0aWwiCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIHLDqXNvdWRyZSBsYSBzdXBwcmVzc2lvbiBvdSBkZSByZWxpZXIgZGVzIGNvbmZsaXRzIGVuIHV0aWxpc2FudCAiCisidW4gb3V0aWwiCiAKICM6IGxpYi9tZXJnZXRvb2wudGNsOjE0NgogbXNnaWQgIkNvbmZsaWN0IGZpbGUgZG9lcyBub3QgZXhpc3QiCkBAIC0yMTcxLDcgKzIyMTUsOCBAQAogbXNnaWQgIkRvIG5vdCBrbm93IGhvdyB0byBpbml0aWFsaXplIHJlcG9zaXRvcnkgYXQgbG9jYXRpb24gJyVzJy4iCiBtc2dzdHIgIlBhcyBkZSBtw6l0aG9kZSBjb25udWUgcG91ciBpbml0aWFsaXNlciBsZSBkw6lww7R0IMOgIGwnZW1wbGFjZW1lbnQgJyVzJy4iCiAKLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNjMgbGliL3RyYW5zcG9ydC50Y2w6MjUgbGliL3RyYW5zcG9ydC50Y2w6NzEKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNjMgbGliL3RyYW5zcG9ydC50Y2w6MjUgbGliL3RyYW5zcG9ydC50Y2w6NjMKKyM6IGxpYi90cmFuc3BvcnQudGNsOjgxCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAicHVzaCAlcyIKIG1zZ3N0ciAicG91c3NlciAlcyIKQEAgLTIxODksMTEgKzIyMzQsMTEgQEAKIG1zZ2lkICJGcm9tIFJlcG9zaXRvcnkiCiBtc2dzdHIgIkTDqXDDtHQgc291cmNlIgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjUwIGxpYi90cmFuc3BvcnQudGNsOjEyMworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo1MCBsaWIvdHJhbnNwb3J0LnRjbDoxMzQKIG1zZ2lkICJSZW1vdGU6IgogbXNnc3RyICJCcmFuY2hlIGRpc3RhbnRlIDoiCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NjYgbGliL3RyYW5zcG9ydC50Y2w6MTM4CisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjY2IGxpYi90cmFuc3BvcnQudGNsOjE0OQogbXNnaWQgIkFyYml0cmFyeSBMb2NhdGlvbjoiCiBtc2dzdHIgIkVtcGxhY2VtZW50IGFyYml0cmFpcmUgOiIKIApAQCAtMjIwOSwxMCArMjI1NCw2IEBACiBtc2dpZCAiTWVyZ2VkIEludG86IgogbXNnc3RyICJGdXNpb25uw6kgZGFucyA6IgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExOQotbXNnaWQgIkFsd2F5cyAoRG8gbm90IHBlcmZvcm0gbWVyZ2UgY2hlY2tzKSIKLW1zZ3N0ciAiVG91am91cnMgKG5lIHBhcyB2w6lyaWZpZXIgbGVzIGZ1c2lvbnMpIgotCiAjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE1MgogbXNnaWQgIkEgYnJhbmNoIGlzIHJlcXVpcmVkIGZvciAnTWVyZ2VkIEludG8nLiIKIG1zZ3N0ciAiVW5lIGJyYW5jaGUgZXN0IG7DqWNlc3NhaXJlIHBvdXIgJ0Z1c2lvbm7DqSBkYW5zJy4iCkBAIC0yMjM1LDMyICsyMjc2LDIzIEBACiAibmVjZXNzYXJ5IGNvbW1pdHMuICBUcnkgZmV0Y2hpbmcgZnJvbSAlcyBmaXJzdC4iCiBtc2dzdHIgIiIKICJVbiBvdSBwbHVzaWV1cnMgZGVzIHRlc3RzIGRlIGZ1c2lvbiBvbnQgw6ljaG91w6kgcGFyY2UgcXVlIHZvdXMgbidhdmV6IHBhcyAiCi0icsOpY3Vww6lyw6kgbGVzIGNvbW1pdHMgbsOpY2Vzc2FpcmVzLiBFc3NheWV6IGRlIHLDqWN1cMOpcmVyIMOgIHBhcnRpciBkZSAlcyBkJ2Fib3JkLiIKKyJyw6ljdXDDqXLDqSBsZXMgY29tbWl0cyBuw6ljZXNzYWlyZXMuIEVzc2F5ZXogZGUgcsOpY3Vww6lyZXIgw6AgcGFydGlyIGRlICVzICIKKyJkJ2Fib3JkLiIKIAogIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMDcKIG1zZ2lkICJQbGVhc2Ugc2VsZWN0IG9uZSBvciBtb3JlIGJyYW5jaGVzIHRvIGRlbGV0ZS4iCiBtc2dzdHIgIk1lcmNpIGRlIHPDqWxlY3Rpb25uZXIgdW5lIG91IHBsdXNpZXVycyBicmFuY2hlcyDDoCBzdXBwcmltZXIuIgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIxNgotbXNnaWQgIiIKLSJSZWNvdmVyaW5nIGRlbGV0ZWQgYnJhbmNoZXMgaXMgZGlmZmljdWx0LlxuIgotIlxuIgotIkRlbGV0ZSB0aGUgc2VsZWN0ZWQgYnJhbmNoZXM/IgotbXNnc3RyICIiCi0iSWwgZXN0IGRpZmZpY2lsZSBkZSByw6ljdXDDqXJlciBkZXMgYnJhbmNoZXMgc3VwcHJpbcOpZXMuXG4iCi0iXG4iCi0iU3VwcHJpbWVyIGxlcyBicmFuY2hlcyBzw6lsZWN0aW9ubsOpZXMgPyIKLQogIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMjYKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJEZWxldGluZyBicmFuY2hlcyBmcm9tICVzIgogbXNnc3RyICJTdXBwcmVzc2lvbiBkZXMgYnJhbmNoZXMgZGUgJXMiCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6Mjg2CisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5MgogbXNnaWQgIk5vIHJlcG9zaXRvcnkgc2VsZWN0ZWQuIgogbXNnc3RyICJBdWN1biBkw6lww7R0IG4nZXN0IHPDqWxlY3Rpb25uw6kuIgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5MQorIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOTcKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJTY2FubmluZyAlcy4uLiIKIG1zZ3N0ciAiU3luY2hyb25pc2F0aW9uIGRlICVzLi4uIgpAQCAtMjI4MSwxMSArMjMxMywxMSBAQAogbXNnaWQgIkNhc2UtU2Vuc2l0aXZlIgogbXNnc3RyICJTZW5zaWJsZSDDoCBsYSBjYXNzZSIKIAotIzogbGliL3Nob3J0Y3V0LnRjbDoyMCBsaWIvc2hvcnRjdXQudGNsOjYxCisjOiBsaWIvc2hvcnRjdXQudGNsOjIxIGxpYi9zaG9ydGN1dC50Y2w6NjIKIG1zZ2lkICJDYW5ub3Qgd3JpdGUgc2hvcnRjdXQ6IgogbXNnc3RyICJJbXBvc3NpYmxlIGQnw6ljcmlyZSBsZSByYWNjb3VyY2kgOiIKIAotIzogbGliL3Nob3J0Y3V0LnRjbDoxMzYKKyM6IGxpYi9zaG9ydGN1dC50Y2w6MTM3CiBtc2dpZCAiQ2Fubm90IHdyaXRlIGljb246IgogbXNnc3RyICJJbXBvc3NpYmxlIGQnw6ljcmlyZSBsJ2ljw7RuZSA6IgogCkBAIC0yNDQwLDcgKzI0NzIsOCBAQAogCiAjOiBsaWIvdG9vbHNfZGxnLnRjbDo4MAogbXNnaWQgIkFzayB0aGUgdXNlciB0byBzZWxlY3QgYSByZXZpc2lvbiAoc2V0cyAkUkVWSVNJT04pIgotbXNnc3RyICJEZW1hbmRlciDDoCBsJ3V0aWxpc2F0ZXVyIGRlIHPDqWxlY3Rpb25uZXIgdW5lIHLDqXZpc2lvbiAoY2hhbmdlICRSRVZJU0lPTikiCittc2dzdHIgIiIKKyJEZW1hbmRlciDDoCBsJ3V0aWxpc2F0ZXVyIGRlIHPDqWxlY3Rpb25uZXIgdW5lIHLDqXZpc2lvbiAoY2hhbmdlICRSRVZJU0lPTikiCiAKICM6IGxpYi90b29sc19kbGcudGNsOjg1CiBtc2dpZCAiQXNrIHRoZSB1c2VyIGZvciBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoc2V0cyAkQVJHUykiCkBAIC0yNTIxLDM4ICsyNTU0LDUxIEBACiBtc2dpZCAiUHVzaGluZyBjaGFuZ2VzIHRvICVzIgogbXNnc3RyICJMZXMgbW9kaWZpY2F0aW9ucyBzb250IHBvdXNzw6llcyB2ZXJzICVzIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDo3MgorIzogbGliL3RyYW5zcG9ydC50Y2w6NjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNaXJyb3JpbmcgdG8gJXMiCittc2dzdHIgIkR1cGxpcXVlciBkYW5zICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo4MgogIywgdGNsLWZvcm1hdAogbXNnaWQgIlB1c2hpbmcgJXMgJXMgdG8gJXMiCiBtc2dzdHIgIlBvdXNzZSAlcyAlcyB2ZXJzICVzIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDo4OQorIzogbGliL3RyYW5zcG9ydC50Y2w6MTAwCiBtc2dpZCAiUHVzaCBCcmFuY2hlcyIKIG1zZ3N0ciAiUG91c3NlciBicmFuY2hlcyIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTAzCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMTQKIG1zZ2lkICJTb3VyY2UgQnJhbmNoZXMiCiBtc2dzdHIgIkJyYW5jaGVzIHNvdXJjZSIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTIwCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMzEKIG1zZ2lkICJEZXN0aW5hdGlvbiBSZXBvc2l0b3J5IgogbXNnc3RyICJEw6lww7R0IGRlIGRlc3RpbmF0aW9uIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNTgKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE2OQogbXNnaWQgIlRyYW5zZmVyIE9wdGlvbnMiCiBtc2dzdHIgIk9wdGlvbnMgZGUgdHJhbnNmZXJ0IgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNjAKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE3MQogbXNnaWQgIkZvcmNlIG92ZXJ3cml0ZSBleGlzdGluZyBicmFuY2ggKG1heSBkaXNjYXJkIGNoYW5nZXMpIgogbXNnc3RyICIiCiAiRm9yY2VyIGwnw6ljcmFzZW1lbnQgZCd1bmUgYnJhbmNoZSBleGlzdGFudGUgKHBldXQgc3VwcHJpbWVyIGRlcyAiCiAibW9kaWZpY2F0aW9ucykiCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjE2NAorIzogbGliL3RyYW5zcG9ydC50Y2w6MTc1CiBtc2dpZCAiVXNlIHRoaW4gcGFjayAoZm9yIHNsb3cgbmV0d29yayBjb25uZWN0aW9ucykiCiBtc2dzdHIgIlV0aWxpc2VyIGRlcyBwZXRpdHMgcGFxdWV0cyAocG91ciBsZXMgY29ubmV4aW9ucyBsZW50ZXMpIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNjgKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE3OQogbXNnaWQgIkluY2x1ZGUgdGFncyIKIG1zZ3N0ciAiSW5jbHVyZSBsZXMgbWFycXVlcyAodGFncykiCiAKKyN+IG1zZ2lkICJDYW5ub3QgdXNlIGZ1bm55IC5naXQgZGlyZWN0b3J5OiIKKyN+IG1zZ3N0ciAiSW1wb3NzaWJsZSBkJ3V0aWxpc2VyIGxlIHLDqXBlcnRvaXJlIC5naXQ6IgorCisjfiBtc2dpZCAiUHJlZmVyZW5jZXMuLi4iCisjfiBtc2dzdHIgIlByw6lmw6lyZW5jZXMuLi4iCisKKyN+IG1zZ2lkICJBbHdheXMgKERvIG5vdCBwZXJmb3JtIG1lcmdlIHRlc3QuKSIKKyN+IG1zZ3N0ciAiVG91am91cnMgKE5lIHBhcyBmYWlyZSBkZSB0ZXN0IGRlIGZ1c2lvbi4pIgpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9wby9naXQtZ3VpLnBvdCBiL2dpdC1ndWkvcG8vZ2l0LWd1aS5wb3QKaW5kZXggNTNiN2QzNi4uMWFlMmFhYSAxMDA2NDQKLS0tIGEvZ2l0LWd1aS9wby9naXQtZ3VpLnBvdAorKysgYi9naXQtZ3VpL3BvL2dpdC1ndWkucG90CkBAIC04LDcgKzgsNyBAQAogbXNnc3RyICIiCiAiUHJvamVjdC1JZC1WZXJzaW9uOiBQQUNLQUdFIFZFUlNJT05cbiIKICJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMDgtMTItMDggMDg6MzEtMDgwMFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEwLTAxLTI2IDE1OjQ3LTA4MDBcbiIKICJQTy1SZXZpc2lvbi1EYXRlOiBZRUFSLU1PLURBIEhPOk1JK1pPTkVcbiIKICJMYXN0LVRyYW5zbGF0b3I6IEZVTEwgTkFNRSA8RU1BSUxAQUREUkVTUz5cbiIKICJMYW5ndWFnZS1UZWFtOiBMQU5HVUFHRSA8TExAbGkub3JnPlxuIgpAQCAtMTYsMzMgKzE2LDMzIEBACiAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUNIQVJTRVRcbiIKICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCiAKLSM6IGdpdC1ndWkuc2g6NDEgZ2l0LWd1aS5zaDo3MzcgZ2l0LWd1aS5zaDo3NTEgZ2l0LWd1aS5zaDo3NjQgZ2l0LWd1aS5zaDo4NDcKLSM6IGdpdC1ndWkuc2g6ODY2CisjOiBnaXQtZ3VpLnNoOjQxIGdpdC1ndWkuc2g6NzkzIGdpdC1ndWkuc2g6ODA3IGdpdC1ndWkuc2g6ODIwIGdpdC1ndWkuc2g6OTAzCisjOiBnaXQtZ3VpLnNoOjkyMgogbXNnaWQgImdpdC1ndWk6IGZhdGFsIGVycm9yIgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6Njg5CisjOiBnaXQtZ3VpLnNoOjc0MwogIywgdGNsLWZvcm1hdAogbXNnaWQgIkludmFsaWQgZm9udCBzcGVjaWZpZWQgaW4gJXM6IgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6NzIzCisjOiBnaXQtZ3VpLnNoOjc3OQogbXNnaWQgIk1haW4gRm9udCIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjcyNAorIzogZ2l0LWd1aS5zaDo3ODAKIG1zZ2lkICJEaWZmL0NvbnNvbGUgRm9udCIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjczOAorIzogZ2l0LWd1aS5zaDo3OTQKIG1zZ2lkICJDYW5ub3QgZmluZCBnaXQgaW4gUEFUSC4iCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDo3NjUKKyM6IGdpdC1ndWkuc2g6ODIxCiBtc2dpZCAiQ2Fubm90IHBhcnNlIEdpdCB2ZXJzaW9uIHN0cmluZzoiCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDo3ODMKKyM6IGdpdC1ndWkuc2g6ODM5CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiIgogIkdpdCB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuIgpAQCAtNTQsNDQ0ICs1NCw0NzMgQEAKICJBc3N1bWUgJyVzJyBpcyB2ZXJzaW9uIDEuNS4wP1xuIgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MTA2MgorIzogZ2l0LWd1aS5zaDoxMTI4CiBtc2dpZCAiR2l0IGRpcmVjdG9yeSBub3QgZm91bmQ6IgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MTA2OQorIzogZ2l0LWd1aS5zaDoxMTQ2CiBtc2dpZCAiQ2Fubm90IG1vdmUgdG8gdG9wIG9mIHdvcmtpbmcgZGlyZWN0b3J5OiIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjEwNzYKLW1zZ2lkICJDYW5ub3QgdXNlIGZ1bm55IC5naXQgZGlyZWN0b3J5OiIKKyM6IGdpdC1ndWkuc2g6MTE1NAorbXNnaWQgIkNhbm5vdCB1c2UgYmFyZSByZXBvc2l0b3J5OiIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjEwODEKKyM6IGdpdC1ndWkuc2g6MTE2MgogbXNnaWQgIk5vIHdvcmtpbmcgZGlyZWN0b3J5IgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MTI0NyBsaWIvY2hlY2tvdXRfb3AudGNsOjMwNQorIzogZ2l0LWd1aS5zaDoxMzM0IGxpYi9jaGVja291dF9vcC50Y2w6MzA2CiBtc2dpZCAiUmVmcmVzaGluZyBmaWxlIHN0YXR1cy4uLiIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjEzMDMKKyM6IGdpdC1ndWkuc2g6MTM5MAogbXNnaWQgIlNjYW5uaW5nIGZvciBtb2RpZmllZCBmaWxlcyAuLi4iCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoxMzY3CisjOiBnaXQtZ3VpLnNoOjE0NTQKIG1zZ2lkICJDYWxsaW5nIHByZXBhcmUtY29tbWl0LW1zZyBob29rLi4uIgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MTM4NAorIzogZ2l0LWd1aS5zaDoxNDcxCiBtc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZXBhcmUtY29tbWl0LW1zZyBob29rLiIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjE1NDIgbGliL2Jyb3dzZXIudGNsOjI0NgorIzogZ2l0LWd1aS5zaDoxNjI5IGxpYi9icm93c2VyLnRjbDoyNDYKIG1zZ2lkICJSZWFkeS4iCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoxODE5CisjOiBnaXQtZ3VpLnNoOjE3ODcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEaXNwbGF5aW5nIG9ubHkgJXMgb2YgJXMgZmlsZXMuIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MTkxMwogbXNnaWQgIlVubW9kaWZpZWQiCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoxODIxCisjOiBnaXQtZ3VpLnNoOjE5MTUKIG1zZ2lkICJNb2RpZmllZCwgbm90IHN0YWdlZCIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjE4MjIgZ2l0LWd1aS5zaDoxODMwCisjOiBnaXQtZ3VpLnNoOjE5MTYgZ2l0LWd1aS5zaDoxOTI0CiBtc2dpZCAiU3RhZ2VkIGZvciBjb21taXQiCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoxODIzIGdpdC1ndWkuc2g6MTgzMQorIzogZ2l0LWd1aS5zaDoxOTE3IGdpdC1ndWkuc2g6MTkyNQogbXNnaWQgIlBvcnRpb25zIHN0YWdlZCBmb3IgY29tbWl0IgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MTgyNCBnaXQtZ3VpLnNoOjE4MzIKKyM6IGdpdC1ndWkuc2g6MTkxOCBnaXQtZ3VpLnNoOjE5MjYKIG1zZ2lkICJTdGFnZWQgZm9yIGNvbW1pdCwgbWlzc2luZyIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjE4MjYKKyM6IGdpdC1ndWkuc2g6MTkyMAogbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBub3Qgc3RhZ2VkIgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MTgyNworIzogZ2l0LWd1aS5zaDoxOTIxCiBtc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIHN0YWdlZCIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjE4MjkKKyM6IGdpdC1ndWkuc2g6MTkyMwogbXNnaWQgIlVudHJhY2tlZCwgbm90IHN0YWdlZCIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjE4MzQKKyM6IGdpdC1ndWkuc2g6MTkyOAogbXNnaWQgIk1pc3NpbmciCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoxODM1CisjOiBnaXQtZ3VpLnNoOjE5MjkKIG1zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwiCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoxODM2CisjOiBnaXQtZ3VpLnNoOjE5MzAKIG1zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwsIHN0aWxsIHByZXNlbnQiCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoxODM4IGdpdC1ndWkuc2g6MTgzOSBnaXQtZ3VpLnNoOjE4NDAgZ2l0LWd1aS5zaDoxODQxCi0jOiBnaXQtZ3VpLnNoOjE4NDIgZ2l0LWd1aS5zaDoxODQzCisjOiBnaXQtZ3VpLnNoOjE5MzIgZ2l0LWd1aS5zaDoxOTMzIGdpdC1ndWkuc2g6MTkzNCBnaXQtZ3VpLnNoOjE5MzUKKyM6IGdpdC1ndWkuc2g6MTkzNiBnaXQtZ3VpLnNoOjE5MzcKIG1zZ2lkICJSZXF1aXJlcyBtZXJnZSByZXNvbHV0aW9uIgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MTg3OAorIzogZ2l0LWd1aS5zaDoxOTcyCiBtc2dpZCAiU3RhcnRpbmcgZ2l0ay4uLiBwbGVhc2Ugd2FpdC4uLiIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjE4ODcKKyM6IGdpdC1ndWkuc2g6MTk4NAogbXNnaWQgIkNvdWxkbid0IGZpbmQgZ2l0ayBpbiBQQVRIIgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MjI4MCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM2CisjOiBnaXQtZ3VpLnNoOjIwNDMKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdCBndWkgaW4gUEFUSCIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjI0NTUgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozNgogbXNnaWQgIlJlcG9zaXRvcnkiCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoyMjgxCisjOiBnaXQtZ3VpLnNoOjI0NTYKIG1zZ2lkICJFZGl0IgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MjI4MyBsaWIvY2hvb3NlX3Jldi50Y2w6NTYxCisjOiBnaXQtZ3VpLnNoOjI0NTggbGliL2Nob29zZV9yZXYudGNsOjU2MQogbXNnaWQgIkJyYW5jaCIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjIyODYgbGliL2Nob29zZV9yZXYudGNsOjU0OAorIzogZ2l0LWd1aS5zaDoyNDYxIGxpYi9jaG9vc2VfcmV2LnRjbDo1NDgKIG1zZ2lkICJDb21taXRAQG5vdW4iCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoyMjg5IGxpYi9tZXJnZS50Y2w6MTIxIGxpYi9tZXJnZS50Y2w6MTUwIGxpYi9tZXJnZS50Y2w6MTY4CisjOiBnaXQtZ3VpLnNoOjI0NjQgbGliL21lcmdlLnRjbDoxMjEgbGliL21lcmdlLnRjbDoxNTAgbGliL21lcmdlLnRjbDoxNjgKIG1zZ2lkICJNZXJnZSIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjIyOTAgbGliL2Nob29zZV9yZXYudGNsOjU1NworIzogZ2l0LWd1aS5zaDoyNDY1IGxpYi9jaG9vc2VfcmV2LnRjbDo1NTcKIG1zZ2lkICJSZW1vdGUiCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoyMjkzCisjOiBnaXQtZ3VpLnNoOjI0NjgKIG1zZ2lkICJUb29scyIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjIzMDIKKyM6IGdpdC1ndWkuc2g6MjQ3NwogbXNnaWQgIkV4cGxvcmUgV29ya2luZyBDb3B5IgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MjMwNworIzogZ2l0LWd1aS5zaDoyNDgzCiBtc2dpZCAiQnJvd3NlIEN1cnJlbnQgQnJhbmNoJ3MgRmlsZXMiCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoyMzExCisjOiBnaXQtZ3VpLnNoOjI0ODcKIG1zZ2lkICJCcm93c2UgQnJhbmNoIEZpbGVzLi4uIgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MjMxNgorIzogZ2l0LWd1aS5zaDoyNDkyCiBtc2dpZCAiVmlzdWFsaXplIEN1cnJlbnQgQnJhbmNoJ3MgSGlzdG9yeSIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjIzMjAKKyM6IGdpdC1ndWkuc2g6MjQ5NgogbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkiCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoyMzI3CisjOiBnaXQtZ3VpLnNoOjI1MDMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJCcm93c2UgJXMncyBGaWxlcyIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjIzMjkKKyM6IGdpdC1ndWkuc2g6MjUwNQogIywgdGNsLWZvcm1hdAogbXNnaWQgIlZpc3VhbGl6ZSAlcydzIEhpc3RvcnkiCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoyMzM0IGxpYi9kYXRhYmFzZS50Y2w6MjcgbGliL2RhdGFiYXNlLnRjbDo2NworIzogZ2l0LWd1aS5zaDoyNTEwIGxpYi9kYXRhYmFzZS50Y2w6MjcgbGliL2RhdGFiYXNlLnRjbDo2NwogbXNnaWQgIkRhdGFiYXNlIFN0YXRpc3RpY3MiCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoyMzM3IGxpYi9kYXRhYmFzZS50Y2w6MzQKKyM6IGdpdC1ndWkuc2g6MjUxMyBsaWIvZGF0YWJhc2UudGNsOjM0CiBtc2dpZCAiQ29tcHJlc3MgRGF0YWJhc2UiCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoyMzQwCisjOiBnaXQtZ3VpLnNoOjI1MTYKIG1zZ2lkICJWZXJpZnkgRGF0YWJhc2UiCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoyMzQ3IGdpdC1ndWkuc2g6MjM1MSBnaXQtZ3VpLnNoOjIzNTUgbGliL3Nob3J0Y3V0LnRjbDo3Ci0jOiBsaWIvc2hvcnRjdXQudGNsOjM5IGxpYi9zaG9ydGN1dC50Y2w6NzEKKyM6IGdpdC1ndWkuc2g6MjUyMyBnaXQtZ3VpLnNoOjI1MjcgZ2l0LWd1aS5zaDoyNTMxIGxpYi9zaG9ydGN1dC50Y2w6OAorIzogbGliL3Nob3J0Y3V0LnRjbDo0MCBsaWIvc2hvcnRjdXQudGNsOjcyCiBtc2dpZCAiQ3JlYXRlIERlc2t0b3AgSWNvbiIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjIzNjMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxODMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxOTEKKyM6IGdpdC1ndWkuc2g6MjUzOSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE4MyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE5MQogbXNnaWQgIlF1aXQiCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoyMzcxCisjOiBnaXQtZ3VpLnNoOjI1NDcKIG1zZ2lkICJVbmRvIgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MjM3NAorIzogZ2l0LWd1aS5zaDoyNTUwCiBtc2dpZCAiUmVkbyIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjIzNzggZ2l0LWd1aS5zaDoyOTM3CisjOiBnaXQtZ3VpLnNoOjI1NTQgZ2l0LWd1aS5zaDozMTA5CiBtc2dpZCAiQ3V0IgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MjM4MSBnaXQtZ3VpLnNoOjI5NDAgZ2l0LWd1aS5zaDozMDE0IGdpdC1ndWkuc2g6MzA5NgorIzogZ2l0LWd1aS5zaDoyNTU3IGdpdC1ndWkuc2g6MzExMiBnaXQtZ3VpLnNoOjMxODYgZ2l0LWd1aS5zaDozMjU5CiAjOiBsaWIvY29uc29sZS50Y2w6NjkKIG1zZ2lkICJDb3B5IgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MjM4NCBnaXQtZ3VpLnNoOjI5NDMKKyM6IGdpdC1ndWkuc2g6MjU2MCBnaXQtZ3VpLnNoOjMxMTUKIG1zZ2lkICJQYXN0ZSIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjIzODcgZ2l0LWd1aS5zaDoyOTQ2IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyNgorIzogZ2l0LWd1aS5zaDoyNTYzIGdpdC1ndWkuc2g6MzExOCBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjYKICM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzgKIG1zZ2lkICJEZWxldGUiCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoyMzkxIGdpdC1ndWkuc2g6Mjk1MCBnaXQtZ3VpLnNoOjMxMDAgbGliL2NvbnNvbGUudGNsOjcxCisjOiBnaXQtZ3VpLnNoOjI1NjcgZ2l0LWd1aS5zaDozMTIyIGdpdC1ndWkuc2g6MzI2MyBsaWIvY29uc29sZS50Y2w6NzEKIG1zZ2lkICJTZWxlY3QgQWxsIgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MjQwMAorIzogZ2l0LWd1aS5zaDoyNTc2CiBtc2dpZCAiQ3JlYXRlLi4uIgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MjQwNgorIzogZ2l0LWd1aS5zaDoyNTgyCiBtc2dpZCAiQ2hlY2tvdXQuLi4iCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoyNDEyCisjOiBnaXQtZ3VpLnNoOjI1ODgKIG1zZ2lkICJSZW5hbWUuLi4iCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoyNDE3CisjOiBnaXQtZ3VpLnNoOjI1OTMKIG1zZ2lkICJEZWxldGUuLi4iCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoyNDIyCisjOiBnaXQtZ3VpLnNoOjI1OTgKIG1zZ2lkICJSZXNldC4uLiIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjI0MzIKKyM6IGdpdC1ndWkuc2g6MjYwOAogbXNnaWQgIkRvbmUiCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoyNDM0CisjOiBnaXQtZ3VpLnNoOjI2MTAKIG1zZ2lkICJDb21taXRAQHZlcmIiCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoyNDQzIGdpdC1ndWkuc2g6Mjg3OAorIzogZ2l0LWd1aS5zaDoyNjE5IGdpdC1ndWkuc2g6MzA1MAogbXNnaWQgIk5ldyBDb21taXQiCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoyNDUxIGdpdC1ndWkuc2g6Mjg4NQorIzogZ2l0LWd1aS5zaDoyNjI3IGdpdC1ndWkuc2g6MzA1NwogbXNnaWQgIkFtZW5kIExhc3QgQ29tbWl0IgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MjQ2MSBnaXQtZ3VpLnNoOjI4MzkgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo5OQorIzogZ2l0LWd1aS5zaDoyNjM3IGdpdC1ndWkuc2g6MzAxMSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjk5CiBtc2dpZCAiUmVzY2FuIgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MjQ2NworIzogZ2l0LWd1aS5zaDoyNjQzCiBtc2dpZCAiU3RhZ2UgVG8gQ29tbWl0IgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MjQ3MworIzogZ2l0LWd1aS5zaDoyNjQ5CiBtc2dpZCAiU3RhZ2UgQ2hhbmdlZCBGaWxlcyBUbyBDb21taXQiCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoyNDc5CisjOiBnaXQtZ3VpLnNoOjI2NTUKIG1zZ2lkICJVbnN0YWdlIEZyb20gQ29tbWl0IgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MjQ4NCBsaWIvaW5kZXgudGNsOjQxMAorIzogZ2l0LWd1aS5zaDoyNjYxIGxpYi9pbmRleC50Y2w6NDEyCiBtc2dpZCAiUmV2ZXJ0IENoYW5nZXMiCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoyNDkxIGdpdC1ndWkuc2g6MzA4MworIzogZ2l0LWd1aS5zaDoyNjY5IGdpdC1ndWkuc2g6MzMxMCBnaXQtZ3VpLnNoOjMzNDEKIG1zZ2lkICJTaG93IExlc3MgQ29udGV4dCIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjI0OTUgZ2l0LWd1aS5zaDozMDg3CisjOiBnaXQtZ3VpLnNoOjI2NzMgZ2l0LWd1aS5zaDozMzE0IGdpdC1ndWkuc2g6MzM0NQogbXNnaWQgIlNob3cgTW9yZSBDb250ZXh0IgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MjUwMiBnaXQtZ3VpLnNoOjI4NTIgZ2l0LWd1aS5zaDoyOTYxCisjOiBnaXQtZ3VpLnNoOjI2ODAgZ2l0LWd1aS5zaDozMDI0IGdpdC1ndWkuc2g6MzEzMwogbXNnaWQgIlNpZ24gT2ZmIgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MjUxOAorIzogZ2l0LWd1aS5zaDoyNjk2CiBtc2dpZCAiTG9jYWwgTWVyZ2UuLi4iCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoyNTIzCisjOiBnaXQtZ3VpLnNoOjI3MDEKIG1zZ2lkICJBYm9ydCBNZXJnZS4uLiIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjI1MzUgZ2l0LWd1aS5zaDoyNTc1CisjOiBnaXQtZ3VpLnNoOjI3MTMgZ2l0LWd1aS5zaDoyNzQxCiBtc2dpZCAiQWRkLi4uIgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MjUzOQorIzogZ2l0LWd1aS5zaDoyNzE3CiBtc2dpZCAiUHVzaC4uLiIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjI1NDMKKyM6IGdpdC1ndWkuc2g6MjcyMQogbXNnaWQgIkRlbGV0ZSBCcmFuY2guLi4iCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoyNTUzIGdpdC1ndWkuc2g6MjU4OSBsaWIvYWJvdXQudGNsOjE0CisjOiBnaXQtZ3VpLnNoOjI3MzEgZ2l0LWd1aS5zaDozMjkyCittc2dpZCAiT3B0aW9ucy4uLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjI3NDIKK21zZ2lkICJSZW1vdmUuLi4iCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyNzUxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAKK21zZ2lkICJIZWxwIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6Mjc1NSBnaXQtZ3VpLnNoOjI3NTkgbGliL2Fib3V0LnRjbDoxNAogIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUzCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQWJvdXQgJXMiCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoyNTU3Ci1tc2dpZCAiUHJlZmVyZW5jZXMuLi4iCi1tc2dzdHIgIiIKLQotIzogZ2l0LWd1aS5zaDoyNTY1IGdpdC1ndWkuc2g6MzEyOQotbXNnaWQgIk9wdGlvbnMuLi4iCi1tc2dzdHIgIiIKLQotIzogZ2l0LWd1aS5zaDoyNTc2Ci1tc2dpZCAiUmVtb3ZlLi4uIgotbXNnc3RyICIiCi0KLSM6IGdpdC1ndWkuc2g6MjU4NSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwCi1tc2dpZCAiSGVscCIKLW1zZ3N0ciAiIgotCi0jOiBnaXQtZ3VpLnNoOjI2MTEKKyM6IGdpdC1ndWkuc2g6Mjc4MwogbXNnaWQgIk9ubGluZSBEb2N1bWVudGF0aW9uIgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MjYxNCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTYKKyM6IGdpdC1ndWkuc2g6Mjc4NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTYKIG1zZ2lkICJTaG93IFNTSCBLZXkiCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoyNzIxCisjOiBnaXQtZ3VpLnNoOjI4OTMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJmYXRhbDogY2Fubm90IHN0YXQgcGF0aCAlczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjI3NTQKKyM6IGdpdC1ndWkuc2g6MjkyNgogbXNnaWQgIkN1cnJlbnQgQnJhbmNoOiIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjI3NzUKKyM6IGdpdC1ndWkuc2g6Mjk0NwogbXNnaWQgIlN0YWdlZCBDaGFuZ2VzIChXaWxsIENvbW1pdCkiCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoyNzk1CisjOiBnaXQtZ3VpLnNoOjI5NjcKIG1zZ2lkICJVbnN0YWdlZCBDaGFuZ2VzIgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6Mjg0NQorIzogZ2l0LWd1aS5zaDozMDE3CiBtc2dpZCAiU3RhZ2UgQ2hhbmdlZCIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjI4NjQgbGliL3RyYW5zcG9ydC50Y2w6MTA0IGxpYi90cmFuc3BvcnQudGNsOjE5MworIzogZ2l0LWd1aS5zaDozMDM2IGxpYi90cmFuc3BvcnQudGNsOjEwNCBsaWIvdHJhbnNwb3J0LnRjbDoxOTMKIG1zZ2lkICJQdXNoIgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6Mjg5OQorIzogZ2l0LWd1aS5zaDozMDcxCiBtc2dpZCAiSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoyOTAwCisjOiBnaXQtZ3VpLnNoOjMwNzIKIG1zZ2lkICJBbWVuZGVkIENvbW1pdCBNZXNzYWdlOiIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjI5MDEKKyM6IGdpdC1ndWkuc2g6MzA3MwogbXNnaWQgIkFtZW5kZWQgSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoyOTAyCisjOiBnaXQtZ3VpLnNoOjMwNzQKIG1zZ2lkICJBbWVuZGVkIE1lcmdlIENvbW1pdCBNZXNzYWdlOiIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjI5MDMKKyM6IGdpdC1ndWkuc2g6MzA3NQogbXNnaWQgIk1lcmdlIENvbW1pdCBNZXNzYWdlOiIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjI5MDQKKyM6IGdpdC1ndWkuc2g6MzA3NgogbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjI5NTMgZ2l0LWd1aS5zaDozMTA0IGxpYi9jb25zb2xlLnRjbDo3MworIzogZ2l0LWd1aS5zaDozMTI1IGdpdC1ndWkuc2g6MzI2NyBsaWIvY29uc29sZS50Y2w6NzMKIG1zZ2lkICJDb3B5IEFsbCIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjI5NzcgbGliL2JsYW1lLnRjbDoxMDQKKyM6IGdpdC1ndWkuc2g6MzE0OSBsaWIvYmxhbWUudGNsOjEwNAogbXNnaWQgIkZpbGU6IgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MzA5MgorIzogZ2l0LWd1aS5zaDozMjU1CiBtc2dpZCAiUmVmcmVzaCIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjMxMTMKKyM6IGdpdC1ndWkuc2g6MzI3NgogbXNnaWQgIkRlY3JlYXNlIEZvbnQgU2l6ZSIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjMxMTcKKyM6IGdpdC1ndWkuc2g6MzI4MAogbXNnaWQgIkluY3JlYXNlIEZvbnQgU2l6ZSIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjMxMjUgbGliL2JsYW1lLnRjbDoyODEKKyM6IGdpdC1ndWkuc2g6MzI4OCBsaWIvYmxhbWUudGNsOjI4MQogbXNnaWQgIkVuY29kaW5nIgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MzEzNgorIzogZ2l0LWd1aS5zaDozMjk5CiBtc2dpZCAiQXBwbHkvUmV2ZXJzZSBIdW5rIgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MzE0MQorIzogZ2l0LWd1aS5zaDozMzA0CiBtc2dpZCAiQXBwbHkvUmV2ZXJzZSBMaW5lIgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MzE1MQorIzogZ2l0LWd1aS5zaDozMzIzCiBtc2dpZCAiUnVuIE1lcmdlIFRvb2wiCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDozMTU2CisjOiBnaXQtZ3VpLnNoOjMzMjgKIG1zZ2lkICJVc2UgUmVtb3RlIFZlcnNpb24iCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDozMTYwCisjOiBnaXQtZ3VpLnNoOjMzMzIKIG1zZ2lkICJVc2UgTG9jYWwgVmVyc2lvbiIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjMxNjQKKyM6IGdpdC1ndWkuc2g6MzMzNgogbXNnaWQgIlJldmVydCBUbyBCYXNlIgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MzE4MworIzogZ2l0LWd1aS5zaDozMzU0Cittc2dpZCAiVmlzdWFsaXplIFRoZXNlIENoYW5nZXMgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjMzNTgKK21zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MzM2MgorbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjMzNjcKK21zZ2lkICJTdGFydCBnaXQgZ3VpIEluIFRoZSBTdWJtb2R1bGUiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDozMzg5CiBtc2dpZCAiVW5zdGFnZSBIdW5rIEZyb20gQ29tbWl0IgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MzE4NAorIzogZ2l0LWd1aS5zaDozMzkxCittc2dpZCAiVW5zdGFnZSBMaW5lcyBGcm9tIENvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjMzOTMKIG1zZ2lkICJVbnN0YWdlIExpbmUgRnJvbSBDb21taXQiCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDozMTg2CisjOiBnaXQtZ3VpLnNoOjMzOTYKIG1zZ2lkICJTdGFnZSBIdW5rIEZvciBDb21taXQiCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDozMTg3CisjOiBnaXQtZ3VpLnNoOjMzOTgKK21zZ2lkICJTdGFnZSBMaW5lcyBGb3IgQ29tbWl0IgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MzQwMAogbXNnaWQgIlN0YWdlIExpbmUgRm9yIENvbW1pdCIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjMyMTAKKyM6IGdpdC1ndWkuc2g6MzQyNAogbXNnaWQgIkluaXRpYWxpemluZy4uLiIKIG1zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjMzMTUKKyM6IGdpdC1ndWkuc2g6MzU0MQogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICJQb3NzaWJsZSBlbnZpcm9ubWVudCBpc3N1ZXMgZXhpc3QuXG4iCkBAIC01MDIsMTQgKzUzMSwxNCBAQAogIlxuIgogbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MzM0NQorIzogZ2l0LWd1aS5zaDozNTcwCiBtc2dpZCAiIgogIlxuIgogIlRoaXMgaXMgZHVlIHRvIGEga25vd24gaXNzdWUgd2l0aCB0aGVcbiIKICJUY2wgYmluYXJ5IGRpc3RyaWJ1dGVkIGJ5IEN5Z3dpbi4iCiBtc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDozMzUwCisjOiBnaXQtZ3VpLnNoOjM1NzUKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiXG4iCkBAIC02MTMsNyArNjQyLDcgQEAKIG1zZ2lkICJVbmFibGUgdG8gZGlzcGxheSBwYXJlbnQiCiBtc2dzdHIgIiIKIAotIzogbGliL2JsYW1lLnRjbDoxMDkxIGxpYi9kaWZmLnRjbDoyOTcKKyM6IGxpYi9ibGFtZS50Y2w6MTA5MSBsaWIvZGlmZi50Y2w6MzIwCiBtc2dpZCAiRXJyb3IgbG9hZGluZyBkaWZmOiIKIG1zZ3N0ciAiIgogCkBAIC02MzksNyArNjY4LDcgQEAKIAogIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjcgbGliL2JyYW5jaF9jcmVhdGUudGNsOjM1CiAjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzIgbGliL2JyYW5jaF9yZW5hbWUudGNsOjMwIGxpYi9icm93c2VyLnRjbDoyODIKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTQ0IGxpYi9jaG9vc2VfZm9udC50Y2w6NDMgbGliL21lcmdlLnRjbDoxNzIKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTc5IGxpYi9jaG9vc2VfZm9udC50Y2w6NDMgbGliL21lcmdlLnRjbDoxNzIKICM6IGxpYi9vcHRpb24udGNsOjEyNSBsaWIvcmVtb3RlX2FkZC50Y2w6MzIgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0MgogIzogbGliL3Rvb2xzX2RsZy50Y2w6NDAgbGliL3Rvb2xzX2RsZy50Y2w6MjA0IGxpYi90b29sc19kbGcudGNsOjM1MgogIzogbGliL3RyYW5zcG9ydC50Y2w6MTA4CkBAIC02NzAsNyArNjk5LDcgQEAKIG1zZ2lkICJDcmVhdGUgTmV3IEJyYW5jaCIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozNzcKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDozMSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4MQogbXNnaWQgIkNyZWF0ZSIKIG1zZ3N0ciAiIgogCkBAIC03MDIsNyArNzMxLDcgQEAKIG1zZ2lkICJGYXN0IEZvcndhcmQgT25seSIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODUgbGliL2NoZWNrb3V0X29wLnRjbDo1MzYKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4NSBsaWIvY2hlY2tvdXRfb3AudGNsOjU3MQogbXNnaWQgIlJlc2V0IgogbXNnc3RyICIiCiAKQEAgLTc0NCw4ICs3NzMsOCBAQAogbXNnaWQgIkRlbGV0ZSBPbmx5IElmIE1lcmdlZCBJbnRvIgogbXNnc3RyICIiCiAKLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1NAotbXNnaWQgIkFsd2F5cyAoRG8gbm90IHBlcmZvcm0gbWVyZ2UgdGVzdC4pIgorIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjU0IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTE5Cittc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSBjaGVja3MpIgogbXNnc3RyICIiCiAKICM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMDMKQEAgLTc1Myw2ICs3ODIsMTMgQEAKIG1zZ2lkICJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczoiCiBtc2dzdHIgIiIKIAorIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjExNSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIxNworbXNnaWQgIiIKKyJSZWNvdmVyaW5nIGRlbGV0ZWQgYnJhbmNoZXMgaXMgZGlmZmljdWx0LlxuIgorIlxuIgorIkRlbGV0ZSB0aGUgc2VsZWN0ZWQgYnJhbmNoZXM/IgorbXNnc3RyICIiCisKICM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNDEKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCkBAIC03ODAsNyArODE2LDcgQEAKIG1zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgYnJhbmNoIHRvIHJlbmFtZS4iCiBtc2dzdHIgIiIKIAotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjk2IGxpYi9jaGVja291dF9vcC50Y2w6MjAxCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6OTYgbGliL2NoZWNrb3V0X29wLnRjbDoyMDIKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4iCiBtc2dzdHIgIiIKQEAgLTgxMSwzOCArODQ3LDM4IEBACiBtc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcyIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvYnJvd3Nlci50Y2w6Mjc4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzk0Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4MCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5MQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5OTUKKyM6IGxpYi9icm93c2VyLnRjbDoyNzggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozOTgKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDg2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDk3CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjgKIG1zZ2lkICJCcm93c2UiCiBtc2dzdHIgIiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo4NAorIzogbGliL2NoZWNrb3V0X29wLnRjbDo4NQogIywgdGNsLWZvcm1hdAogbXNnaWQgIkZldGNoaW5nICVzIGZyb20gJXMiCiBtc2dzdHIgIiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxMzIKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTMzCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiZmF0YWw6IENhbm5vdCByZXNvbHZlICVzIgogbXNnc3RyICIiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MTQ1IGxpYi9jb25zb2xlLnRjbDo4MSBsaWIvZGF0YWJhc2UudGNsOjMxCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE0NiBsaWIvY29uc29sZS50Y2w6ODEgbGliL2RhdGFiYXNlLnRjbDozMQogIzogbGliL3NzaGtleS50Y2w6NTMKIG1zZ2lkICJDbG9zZSIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE3NAorIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNzUKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJCcmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdC4iCiBtc2dzdHIgIiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxOTMKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTk0CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBzaW1wbGlmaWVkIGdpdC1wdWxsIGZvciAnJXMnLiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjIyOAorIzogbGliL2NoZWNrb3V0X29wLnRjbDoyMjkKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuXG4iCkBAIC04NTEsMjEgKzg4NywyMSBAQAogIkEgbWVyZ2UgaXMgcmVxdWlyZWQuIgogbXNnc3RyICIiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjQyCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI0MwogIywgdGNsLWZvcm1hdAogbXNnaWQgIk1lcmdlIHN0cmF0ZWd5ICclcycgbm90IHN1cHBvcnRlZC4iCiBtc2dzdHIgIiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNjEKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjYyCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiRmFpbGVkIHRvIHVwZGF0ZSAnJXMnLiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI3MworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNzQKIG1zZ2lkICJTdGFnaW5nIGFyZWEgKGluZGV4KSBpcyBhbHJlYWR5IGxvY2tlZC4iCiBtc2dzdHIgIiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyODgKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjg5CiBtc2dpZCAiIgogIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgogIlxuIgpAQCAtODc1LDMwICs5MTEsMzAgQEAKICJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NAorIzogbGliL2NoZWNrb3V0X29wLnRjbDozNDUKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJVcGRhdGluZyB3b3JraW5nIGRpcmVjdG9yeSB0byAnJXMnLi4uIgogbXNnc3RyICIiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ1CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NgogbXNnaWQgImZpbGVzIGNoZWNrZWQgb3V0IgogbXNnc3RyICIiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc1CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM3NgogIywgdGNsLWZvcm1hdAogbXNnaWQgIkFib3J0ZWQgY2hlY2tvdXQgb2YgJyVzJyAoZmlsZSBsZXZlbCBtZXJnaW5nIGlzIHJlcXVpcmVkKS4iCiBtc2dzdHIgIiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzYKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc3CiBtc2dpZCAiRmlsZSBsZXZlbCBtZXJnZSByZXF1aXJlZC4iCiBtc2dzdHIgIiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDozODAKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzgxCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiU3RheWluZyBvbiBicmFuY2ggJyVzJy4iCiBtc2dzdHIgIiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo0NTEKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NDUyCiBtc2dpZCAiIgogIllvdSBhcmUgbm8gbG9uZ2VyIG9uIGEgbG9jYWwgYnJhbmNoLlxuIgogIlxuIgpAQCAtOTA2LDMwICs5NDIsMzAgQEAKICJDaGVja291dCcuIgogbXNnc3RyICIiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NDY4IGxpYi9jaGVja291dF9vcC50Y2w6NDcyCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUwMyBsaWIvY2hlY2tvdXRfb3AudGNsOjUwNwogIywgdGNsLWZvcm1hdAogbXNnaWQgIkNoZWNrZWQgb3V0ICclcycuIgogbXNnc3RyICIiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTAwCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUzNQogIywgdGNsLWZvcm1hdAogbXNnaWQgIlJlc2V0dGluZyAnJXMnIHRvICclcycgd2lsbCBsb3NlIHRoZSBmb2xsb3dpbmcgY29tbWl0czoiCiBtc2dzdHIgIiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MjIKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTU3CiBtc2dpZCAiUmVjb3ZlcmluZyBsb3N0IGNvbW1pdHMgbWF5IG5vdCBiZSBlYXN5LiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUyNworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NjIKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJSZXNldCAnJXMnPyIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUzMiBsaWIvbWVyZ2UudGNsOjE2NCBsaWIvdG9vbHNfZGxnLnRjbDozNDMKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTY3IGxpYi9tZXJnZS50Y2w6MTY0IGxpYi90b29sc19kbGcudGNsOjM0MwogbXNnaWQgIlZpc3VhbGl6ZSIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjYwMAorIzogbGliL2NoZWNrb3V0X29wLnRjbDo2MzUKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiRmFpbGVkIHRvIHNldCBjdXJyZW50IGJyYW5jaC5cbiIKQEAgLTk2Niw3ICsxMDAyLDcgQEAKIG1zZ2lkICJHaXQgR3VpIgogbXNnc3RyICIiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozODIKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozODYKIG1zZ2lkICJDcmVhdGUgTmV3IFJlcG9zaXRvcnkiCiBtc2dzdHIgIiIKIApAQCAtOTc0LDcgKzEwMTAsNyBAQAogbXNnaWQgIk5ldy4uLiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ2NQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDAgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NzEKIG1zZ2lkICJDbG9uZSBFeGlzdGluZyBSZXBvc2l0b3J5IgogbXNnc3RyICIiCiAKQEAgLTk4Miw3ICsxMDE4LDcgQEAKIG1zZ2lkICJDbG9uZS4uLiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk4MworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDE2CiBtc2dpZCAiT3BlbiBFeGlzdGluZyBSZXBvc2l0b3J5IgogbXNnc3RyICIiCiAKQEAgLTk5OCwxOTMgKzEwMzQsMTkzIEBACiBtc2dpZCAiT3BlbiBSZWNlbnQgUmVwb3NpdG9yeToiCiBtc2dzdHIgIiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMDIgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMDkKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzE2CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMwNiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMxMworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMjAKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlcG9zaXRvcnkgJXM6IgogbXNnc3RyICIiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzg3CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM5MQogbXNnaWQgIkRpcmVjdG9yeToiCiBtc2dzdHIgIiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MTcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NDQKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxNworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MjMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NTAKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA1MgogbXNnaWQgIkdpdCBSZXBvc2l0b3J5IgogbXNnc3RyICIiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQyCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0OAogIywgdGNsLWZvcm1hdAogbXNnaWQgIkRpcmVjdG9yeSAlcyBhbHJlYWR5IGV4aXN0cy4iCiBtc2dzdHIgIiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NDYKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDUyCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiRmlsZSAlcyBhbHJlYWR5IGV4aXN0cy4iCiBtc2dzdHIgIiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NjAKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDY2CiBtc2dpZCAiQ2xvbmUiCiBtc2dzdHIgIiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NzMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDc5CiBtc2dpZCAiU291cmNlIExvY2F0aW9uOiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4NAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTAKIG1zZ2lkICJUYXJnZXQgRGlyZWN0b3J5OiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5NgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDIKIG1zZ2lkICJDbG9uZSBUeXBlOiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwMgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDgKIG1zZ2lkICJTdGFuZGFyZCAoRmFzdCwgU2VtaS1SZWR1bmRhbnQsIEhhcmRsaW5rcykiCiBtc2dzdHIgIiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDgKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTE0CiBtc2dpZCAiRnVsbCBDb3B5IChTbG93ZXIsIFJlZHVuZGFudCBCYWNrdXApIgogbXNnc3RyICIiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTE0CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUyMAogbXNnaWQgIlNoYXJlZCAoRmFzdGVzdCwgTm90IFJlY29tbWVuZGVkLCBObyBCYWNrdXApIgogbXNnc3RyICIiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTUwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTk3Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc0MyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgxMwotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDIzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAzMQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NTYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MDMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzQ5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODE5CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNTggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDY2CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiTm90IGEgR2l0IHJlcG9zaXRvcnk6ICVzIgogbXNnc3RyICIiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTg2CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU5MgogbXNnaWQgIlN0YW5kYXJkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU5MAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTYKIG1zZ2lkICJTaGFyZWQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgogbXNnc3RyICIiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjExCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxNwogIywgdGNsLWZvcm1hdAogbXNnaWQgIkxvY2F0aW9uICVzIGFscmVhZHkgZXhpc3RzLiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYyMgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MjgKIG1zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIG9yaWdpbiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYzNAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NDAKIG1zZ2lkICJDb3VudGluZyBvYmplY3RzIgogbXNnc3RyICIiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjM1CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0MQogbXNnaWQgImJ1Y2tldHMiCiBtc2dzdHIgIiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NTkKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjY1CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXM6ICVzIgogbXNnc3RyICIiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Njk1CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcwMQogIywgdGNsLWZvcm1hdAogbXNnaWQgIk5vdGhpbmcgdG8gY2xvbmUgZnJvbSAlcy4iCiBtc2dzdHIgIiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2OTcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTEKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTIzCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcwMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjkKIG1zZ2lkICJUaGUgJ21hc3RlcicgYnJhbmNoIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4iCiBtc2dzdHIgIiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MTAKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzE2CiBtc2dpZCAiSGFyZGxpbmtzIGFyZSB1bmF2YWlsYWJsZS4gIEZhbGxpbmcgYmFjayB0byBjb3B5aW5nLiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcyMgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MjgKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJDbG9uaW5nIGZyb20gJXMiCiBtc2dzdHIgIiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NTMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzU5CiBtc2dpZCAiQ29weWluZyBvYmplY3RzIgogbXNnc3RyICIiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzU0CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc2MAogbXNnaWQgIktpQiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc3OAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODQKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3Q6ICVzIgogbXNnc3RyICIiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzg4CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc5NAogbXNnaWQgIkxpbmtpbmcgb2JqZWN0cyIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc4OQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTUKIG1zZ2lkICJvYmplY3RzIgogbXNnc3RyICIiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzk3CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgwMwogIywgdGNsLWZvcm1hdAogbXNnaWQgIlVuYWJsZSB0byBoYXJkbGluayBvYmplY3Q6ICVzIgogbXNnc3RyICIiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODUyCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg1OAogbXNnaWQgIkNhbm5vdCBmZXRjaCBicmFuY2hlcyBhbmQgb2JqZWN0cy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCiBtc2dzdHIgIiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NjMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODY5CiBtc2dpZCAiQ2Fubm90IGZldGNoIHRhZ3MuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgogbXNnc3RyICIiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODg3CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg5MwogbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgSEVBRC4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCiBtc2dzdHIgIiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4OTYKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTAyCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVW5hYmxlIHRvIGNsZWFudXAgJXMiCiBtc2dzdHIgIiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MDIKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTA4CiBtc2dpZCAiQ2xvbmUgZmFpbGVkLiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwOQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTUKIG1zZ2lkICJObyBkZWZhdWx0IGJyYW5jaCBvYnRhaW5lZC4iCiBtc2dzdHIgIiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjAKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTI2CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQ2Fubm90IHJlc29sdmUgJXMgYXMgYSBjb21taXQuIgogbXNnc3RyICIiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTMyCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzOAogbXNnaWQgIkNyZWF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IgogbXNnc3RyICIiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTMzIGxpYi9pbmRleC50Y2w6NjUgbGliL2luZGV4LnRjbDoxMjgKLSM6IGxpYi9pbmRleC50Y2w6MTk2CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzOSBsaWIvaW5kZXgudGNsOjY3IGxpYi9pbmRleC50Y2w6MTMwCisjOiBsaWIvaW5kZXgudGNsOjE5OAogbXNnaWQgImZpbGVzIgogbXNnc3RyICIiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTYyCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk2OAogbXNnaWQgIkluaXRpYWwgZmlsZSBjaGVja291dCBmYWlsZWQuIgogbXNnc3RyICIiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTc4CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTEKIG1zZ2lkICJPcGVuIgogbXNnc3RyICIiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTg4CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjEKIG1zZ2lkICJSZXBvc2l0b3J5OiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMzcKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA3MgogIywgdGNsLWZvcm1hdAogbXNnaWQgIkZhaWxlZCB0byBvcGVuIHJlcG9zaXRvcnkgJXM6IgogbXNnc3RyICIiCkBAIC0xMjU5LDcgKzEyOTUsMTIgQEAKIG1zZ2lkICJJbnZhbGlkIEdJVF9DT01NSVRURVJfSURFTlQ6IgogbXNnc3RyICIiCiAKLSM6IGxpYi9jb21taXQudGNsOjEzMgorIzogbGliL2NvbW1pdC50Y2w6MTI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAid2FybmluZzogVGNsIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RpbmcgJyVzJy4iCittc2dzdHIgIiIKKworIzogbGliL2NvbW1pdC50Y2w6MTQ5CiBtc2dpZCAiIgogIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgogIlxuIgpAQCAtMTI2OSw3ICsxMzEwLDcgQEAKICJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxNTUKKyM6IGxpYi9jb21taXQudGNsOjE3MgogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICJVbm1lcmdlZCBmaWxlcyBjYW5ub3QgYmUgY29tbWl0dGVkLlxuIgpAQCAtMTI3OCw3ICsxMzE5LDcgQEAKICJiZWZvcmUgY29tbWl0dGluZy5cbiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxNjMKKyM6IGxpYi9jb21taXQudGNsOjE4MAogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICJVbmtub3duIGZpbGUgc3RhdGUgJXMgZGV0ZWN0ZWQuXG4iCkBAIC0xMjg2LDE0ICsxMzI3LDE0IEBACiAiRmlsZSAlcyBjYW5ub3QgYmUgY29tbWl0dGVkIGJ5IHRoaXMgcHJvZ3JhbS5cbiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxNzEKKyM6IGxpYi9jb21taXQudGNsOjE4OAogbXNnaWQgIiIKICJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKICJcbiIKICJZb3UgbXVzdCBzdGFnZSBhdCBsZWFzdCAxIGZpbGUgYmVmb3JlIHlvdSBjYW4gY29tbWl0LlxuIgogbXNnc3RyICIiCiAKLSM6IGxpYi9jb21taXQudGNsOjE4NgorIzogbGliL2NvbW1pdC50Y2w6MjAzCiBtc2dpZCAiIgogIlBsZWFzZSBzdXBwbHkgYSBjb21taXQgbWVzc2FnZS5cbiIKICJcbiIKQEAgLTEzMDQsNDUgKzEzNDUsNDAgQEAKICItIFJlbWFpbmluZyBsaW5lczogRGVzY3JpYmUgd2h5IHRoaXMgY2hhbmdlIGlzIGdvb2QuXG4iCiBtc2dzdHIgIiIKIAotIzogbGliL2NvbW1pdC50Y2w6MjEwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAid2FybmluZzogVGNsIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RpbmcgJyVzJy4iCi1tc2dzdHIgIiIKLQotIzogbGliL2NvbW1pdC50Y2w6MjI2CisjOiBsaWIvY29tbWl0LnRjbDoyMzQKIG1zZ2lkICJDYWxsaW5nIHByZS1jb21taXQgaG9vay4uLiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyNDEKKyM6IGxpYi9jb21taXQudGNsOjI0OQogbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmUtY29tbWl0IGhvb2suIgogbXNnc3RyICIiCiAKLSM6IGxpYi9jb21taXQudGNsOjI2NAorIzogbGliL2NvbW1pdC50Y2w6MjcyCiBtc2dpZCAiQ2FsbGluZyBjb21taXQtbXNnIGhvb2suLi4iCiBtc2dzdHIgIiIKIAotIzogbGliL2NvbW1pdC50Y2w6Mjc5CisjOiBsaWIvY29tbWl0LnRjbDoyODcKIG1zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgY29tbWl0LW1zZyBob29rLiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyOTIKKyM6IGxpYi9jb21taXQudGNsOjMwMAogbXNnaWQgIkNvbW1pdHRpbmcgY2hhbmdlcy4uLiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY29tbWl0LnRjbDozMDgKKyM6IGxpYi9jb21taXQudGNsOjMxNgogbXNnaWQgIndyaXRlLXRyZWUgZmFpbGVkOiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY29tbWl0LnRjbDozMDkgbGliL2NvbW1pdC50Y2w6MzUzIGxpYi9jb21taXQudGNsOjM3MworIzogbGliL2NvbW1pdC50Y2w6MzE3IGxpYi9jb21taXQudGNsOjM2MSBsaWIvY29tbWl0LnRjbDozODIKIG1zZ2lkICJDb21taXQgZmFpbGVkLiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY29tbWl0LnRjbDozMjYKKyM6IGxpYi9jb21taXQudGNsOjMzNAogIywgdGNsLWZvcm1hdAogbXNnaWQgIkNvbW1pdCAlcyBhcHBlYXJzIHRvIGJlIGNvcnJ1cHQiCiBtc2dzdHIgIiIKIAotIzogbGliL2NvbW1pdC50Y2w6MzMxCisjOiBsaWIvY29tbWl0LnRjbDozMzkKIG1zZ2lkICIiCiAiTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCiAiXG4iCkBAIC0xMzUxLDE5ICsxMzg3LDE5IEBACiAiQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgogbXNnc3RyICIiCiAKLSM6IGxpYi9jb21taXQudGNsOjMzOAorIzogbGliL2NvbW1pdC50Y2w6MzQ2CiBtc2dpZCAiTm8gY2hhbmdlcyB0byBjb21taXQuIgogbXNnc3RyICIiCiAKLSM6IGxpYi9jb21taXQudGNsOjM1MgorIzogbGliL2NvbW1pdC50Y2w6MzYwCiBtc2dpZCAiY29tbWl0LXRyZWUgZmFpbGVkOiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY29tbWl0LnRjbDozNzIKKyM6IGxpYi9jb21taXQudGNsOjM4MQogbXNnaWQgInVwZGF0ZS1yZWYgZmFpbGVkOiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY29tbWl0LnRjbDo0NjAKKyM6IGxpYi9jb21taXQudGNsOjQ2OQogIywgdGNsLWZvcm1hdAogbXNnaWQgIkNyZWF0ZWQgY29tbWl0ICVzOiAlcyIKIG1zZ3N0ciAiIgpAQCAtMTQxNiwxMyArMTQ1MiwxMyBAQAogbXNnaWQgIlZlcmlmeWluZyB0aGUgb2JqZWN0IGRhdGFiYXNlIHdpdGggZnNjay1vYmplY3RzIgogbXNnc3RyICIiCiAKLSM6IGxpYi9kYXRhYmFzZS50Y2w6MTA4CisjOiBsaWIvZGF0YWJhc2UudGNsOjEwNwogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICJUaGlzIHJlcG9zaXRvcnkgY3VycmVudGx5IGhhcyBhcHByb3hpbWF0ZWx5ICVpIGxvb3NlIG9iamVjdHMuXG4iCiAiXG4iCiAiVG8gbWFpbnRhaW4gb3B0aW1hbCBwZXJmb3JtYW5jZSBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBjb21wcmVzcyAiCi0idGhlIGRhdGFiYXNlIHdoZW4gbW9yZSB0aGFuICVpIGxvb3NlIG9iamVjdHMgZXhpc3QuXG4iCisidGhlIGRhdGFiYXNlLlxuIgogIlxuIgogIkNvbXByZXNzIHRoZSBkYXRhYmFzZSBub3c/IgogbXNnc3RyICIiCkBAIC0xNDMyLDcgKzE0NjgsNyBAQAogbXNnaWQgIkludmFsaWQgZGF0ZSBmcm9tIEdpdDogJXMiCiBtc2dzdHIgIiIKIAotIzogbGliL2RpZmYudGNsOjU5CisjOiBsaWIvZGlmZi50Y2w6NjQKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiTm8gZGlmZmVyZW5jZXMgZGV0ZWN0ZWQuXG4iCkBAIC0xNDQ2LDU2ICsxNDgyLDU2IEBACiAidGhlIHNhbWUgc3RhdGUuIgogbXNnc3RyICIiCiAKLSM6IGxpYi9kaWZmLnRjbDo5OQorIzogbGliL2RpZmYudGNsOjEwNAogIywgdGNsLWZvcm1hdAogbXNnaWQgIkxvYWRpbmcgZGlmZiBvZiAlcy4uLiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvZGlmZi50Y2w6MTIwCisjOiBsaWIvZGlmZi50Y2w6MTI1CiBtc2dpZCAiIgogIkxPQ0FMOiBkZWxldGVkXG4iCiAiUkVNT1RFOlxuIgogbXNnc3RyICIiCiAKLSM6IGxpYi9kaWZmLnRjbDoxMjUKKyM6IGxpYi9kaWZmLnRjbDoxMzAKIG1zZ2lkICIiCiAiUkVNT1RFOiBkZWxldGVkXG4iCiAiTE9DQUw6XG4iCiBtc2dzdHIgIiIKIAotIzogbGliL2RpZmYudGNsOjEzMgorIzogbGliL2RpZmYudGNsOjEzNwogbXNnaWQgIkxPQ0FMOlxuIgogbXNnc3RyICIiCiAKLSM6IGxpYi9kaWZmLnRjbDoxMzUKKyM6IGxpYi9kaWZmLnRjbDoxNDAKIG1zZ2lkICJSRU1PVEU6XG4iCiBtc2dzdHIgIiIKIAotIzogbGliL2RpZmYudGNsOjE5NyBsaWIvZGlmZi50Y2w6Mjk2CisjOiBsaWIvZGlmZi50Y2w6MjAyIGxpYi9kaWZmLnRjbDozMTkKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJVbmFibGUgdG8gZGlzcGxheSAlcyIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvZGlmZi50Y2w6MTk4CisjOiBsaWIvZGlmZi50Y2w6MjAzCiBtc2dpZCAiRXJyb3IgbG9hZGluZyBmaWxlOiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvZGlmZi50Y2w6MjA1CisjOiBsaWIvZGlmZi50Y2w6MjEwCiBtc2dpZCAiR2l0IFJlcG9zaXRvcnkgKHN1YnByb2plY3QpIgogbXNnc3RyICIiCiAKLSM6IGxpYi9kaWZmLnRjbDoyMTcKKyM6IGxpYi9kaWZmLnRjbDoyMjIKIG1zZ2lkICIqIEJpbmFyeSBmaWxlIChub3Qgc2hvd2luZyBjb250ZW50KS4iCiBtc2dzdHIgIiIKIAotIzogbGliL2RpZmYudGNsOjIyMgorIzogbGliL2RpZmYudGNsOjIyNwogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICIqIFVudHJhY2tlZCBmaWxlIGlzICVkIGJ5dGVzLlxuIgogIiogU2hvd2luZyBvbmx5IGZpcnN0ICVkIGJ5dGVzLlxuIgogbXNnc3RyICIiCiAKLSM6IGxpYi9kaWZmLnRjbDoyMjgKKyM6IGxpYi9kaWZmLnRjbDoyMzMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiXG4iCkBAIC0xNTAzLDE5ICsxNTM5LDE5IEBACiAiKiBUbyBzZWUgdGhlIGVudGlyZSBmaWxlLCB1c2UgYW4gZXh0ZXJuYWwgZWRpdG9yLlxuIgogbXNnc3RyICIiCiAKLSM6IGxpYi9kaWZmLnRjbDo0MzYKKyM6IGxpYi9kaWZmLnRjbDo0ODIKIG1zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBodW5rLiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvZGlmZi50Y2w6NDQzCisjOiBsaWIvZGlmZi50Y2w6NDg5CiBtc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGh1bmsuIgogbXNnc3RyICIiCiAKLSM6IGxpYi9kaWZmLnRjbDo1MDkKKyM6IGxpYi9kaWZmLnRjbDo1NjgKIG1zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBsaW5lLiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvZGlmZi50Y2w6NTE3CisjOiBsaWIvZGlmZi50Y2w6NTc2CiBtc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGxpbmUuIgogbXNnc3RyICIiCiAKQEAgLTE1NTIsMTMgKzE1ODgsMTMgQEAKIG1zZ2lkICJJbmRleCBFcnJvciIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvaW5kZXgudGNsOjIxCisjOiBsaWIvaW5kZXgudGNsOjE3CiBtc2dpZCAiIgogIlVwZGF0aW5nIHRoZSBHaXQgaW5kZXggZmFpbGVkLiAgQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gIgogInJlc3luY2hyb25pemUgZ2l0LWd1aS4iCiBtc2dzdHIgIiIKIAotIzogbGliL2luZGV4LnRjbDoyNworIzogbGliL2luZGV4LnRjbDoyOAogbXNnaWQgIkNvbnRpbnVlIgogbXNnc3RyICIiCiAKQEAgLTE1NjYsNDMgKzE2MDIsNDMgQEAKIG1zZ2lkICJVbmxvY2sgSW5kZXgiCiBtc2dzdHIgIiIKIAotIzogbGliL2luZGV4LnRjbDoyODcKKyM6IGxpYi9pbmRleC50Y2w6Mjg5CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVW5zdGFnaW5nICVzIGZyb20gY29tbWl0IgogbXNnc3RyICIiCiAKLSM6IGxpYi9pbmRleC50Y2w6MzI2CisjOiBsaWIvaW5kZXgudGNsOjMyOAogbXNnaWQgIlJlYWR5IHRvIGNvbW1pdC4iCiBtc2dzdHIgIiIKIAotIzogbGliL2luZGV4LnRjbDozMzkKKyM6IGxpYi9pbmRleC50Y2w6MzQxCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQWRkaW5nICVzIgogbXNnc3RyICIiCiAKLSM6IGxpYi9pbmRleC50Y2w6Mzk2CisjOiBsaWIvaW5kZXgudGNsOjM5OAogIywgdGNsLWZvcm1hdAogbXNnaWQgIlJldmVydCBjaGFuZ2VzIGluIGZpbGUgJXM/IgogbXNnc3RyICIiCiAKLSM6IGxpYi9pbmRleC50Y2w6Mzk4CisjOiBsaWIvaW5kZXgudGNsOjQwMAogIywgdGNsLWZvcm1hdAogbXNnaWQgIlJldmVydCBjaGFuZ2VzIGluIHRoZXNlICVpIGZpbGVzPyIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvaW5kZXgudGNsOjQwNgorIzogbGliL2luZGV4LnRjbDo0MDgKIG1zZ2lkICJBbnkgdW5zdGFnZWQgY2hhbmdlcyB3aWxsIGJlIHBlcm1hbmVudGx5IGxvc3QgYnkgdGhlIHJldmVydC4iCiBtc2dzdHIgIiIKIAotIzogbGliL2luZGV4LnRjbDo0MDkKKyM6IGxpYi9pbmRleC50Y2w6NDExCiBtc2dpZCAiRG8gTm90aGluZyIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvaW5kZXgudGNsOjQyNworIzogbGliL2luZGV4LnRjbDo0MjkKIG1zZ2lkICJSZXZlcnRpbmcgc2VsZWN0ZWQgZmlsZXMiCiBtc2dzdHIgIiIKIAotIzogbGliL2luZGV4LnRjbDo0MzEKKyM6IGxpYi9pbmRleC50Y2w6NDMzCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiUmV2ZXJ0aW5nICVzIgogbXNnc3RyICIiCkBAIC0yMDMxLDEwICsyMDY3LDYgQEAKIG1zZ2lkICJNZXJnZWQgSW50bzoiCiBtc2dzdHIgIiIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTkKLW1zZ2lkICJBbHdheXMgKERvIG5vdCBwZXJmb3JtIG1lcmdlIGNoZWNrcykiCi1tc2dzdHIgIiIKLQogIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxNTIKIG1zZ2lkICJBIGJyYW5jaCBpcyByZXF1aXJlZCBmb3IgJ01lcmdlZCBJbnRvJy4iCiBtc2dzdHIgIiIKQEAgLTIwNTgsMjMgKzIwOTAsMTYgQEAKIG1zZ2lkICJQbGVhc2Ugc2VsZWN0IG9uZSBvciBtb3JlIGJyYW5jaGVzIHRvIGRlbGV0ZS4iCiBtc2dzdHIgIiIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMTYKLW1zZ2lkICIiCi0iUmVjb3ZlcmluZyBkZWxldGVkIGJyYW5jaGVzIGlzIGRpZmZpY3VsdC5cbiIKLSJcbiIKLSJEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyIKLW1zZ3N0ciAiIgotCiAjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIyNgogIywgdGNsLWZvcm1hdAogbXNnaWQgIkRlbGV0aW5nIGJyYW5jaGVzIGZyb20gJXMiCiBtc2dzdHIgIiIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyODYKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjkyCiBtc2dpZCAiTm8gcmVwb3NpdG9yeSBzZWxlY3RlZC4iCiBtc2dzdHIgIiIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOTEKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6Mjk3CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiU2Nhbm5pbmcgJXMuLi4iCiBtc2dzdHIgIiIKQEAgLTIwOTUsMTEgKzIxMjAsMTEgQEAKIG1zZ2lkICJDYXNlLVNlbnNpdGl2ZSIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvc2hvcnRjdXQudGNsOjIwIGxpYi9zaG9ydGN1dC50Y2w6NjEKKyM6IGxpYi9zaG9ydGN1dC50Y2w6MjEgbGliL3Nob3J0Y3V0LnRjbDo2MgogbXNnaWQgIkNhbm5vdCB3cml0ZSBzaG9ydGN1dDoiCiBtc2dzdHIgIiIKIAotIzogbGliL3Nob3J0Y3V0LnRjbDoxMzYKKyM6IGxpYi9zaG9ydGN1dC50Y2w6MTM3CiBtc2dpZCAiQ2Fubm90IHdyaXRlIGljb246IgogbXNnc3RyICIiCiAKZGlmZiAtLWdpdCBhL2dpdC1ndWkvcG8vZ2xvc3NhcnkvZWwucG8gYi9naXQtZ3VpL3BvL2dsb3NzYXJ5L2VsLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkM2NjODEKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL3BvL2dsb3NzYXJ5L2VsLnBvCkBAIC0wLDAgKzEsMTcxIEBACisjIFRyYW5zbGF0aW9uIG9mIGdpdC1ndWkgZ2xvc3NhcnkgdG8gR3JlZWsKKyMgQ29weXJpZ2h0IChDKSAyMDA5IEppbW15IEFuZ2VsYWtvcworIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0LWd1aSBwYWNrYWdlLgorIyBKaW1teSBBbmdlbGFrb3MgPHZ5cnVzc0BoZWxsdWcuZ3I+LCAyMDA5LgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0LWd1aS1nbG9zc2FyeVxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA4LTAxLTA3IDIxOjIwKzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA5LTA2LTIzIDIwOjQxKzAzMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEppbW15IEFuZ2VsYWtvcyA8dnlydXNzQGhlbGx1Zy5ncj5cbiIKKyJMYW5ndWFnZS1UZWFtOiBHcmVlayA8aTE4bkBsaXN0cy5oZWxsdWcuZ3I+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiWC1HZW5lcmF0b3I6IExva2FsaXplIDAuM1xuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorCisjLiAiRW5nbGlzaCBEZWZpbml0aW9uIChEZWFyIHRyYW5zbGF0b3I6IFRoaXMgZmlsZSB3aWxsIG5ldmVyIGJlIHZpc2libGUgdG8gdGhlIHVzZXIhIEl0IHNob3VsZCBvbmx5IHNlcnZlIGFzIGEgdG9vbCBmb3IgeW91LCB0aGUgdHJhbnNsYXRvci4gTm90aGluZyBtb3JlLikiCittc2dpZCAiRW5nbGlzaCBUZXJtIChEZWFyIHRyYW5zbGF0b3I6IFRoaXMgZmlsZSB3aWxsIG5ldmVyIGJlIHZpc2libGUgdG8gdGhlIHVzZXIhKSIKK21zZ3N0ciAiIgorCisjLiAiIgorbXNnaWQgImFtZW5kIgorbXNnc3RyICLOtM65z4zPgc64z4nPg863IgorCisjLiAiIgorbXNnaWQgImFubm90YXRlIgorbXNnc3RyICLPg8+Hzr/Ou865zrHPg868z4zPgiIKKworIy4gIkEgJ2JyYW5jaCcgaXMgYW4gYWN0aXZlIGxpbmUgb2YgZGV2ZWxvcG1lbnQuIgorbXNnaWQgImJyYW5jaCBbbm91bl0iCittc2dzdHIgIs66zrvOrM60zr/PgiBbzrHOvc+EzrnOus61zq/OvM61zr3Ov10iCisKKyMuICIiCittc2dpZCAiYnJhbmNoIFt2ZXJiXSIKK21zZ3N0ciAizrTOuc6xzrrOu86szrTPic+DzrcgW861zr3Orc+BzrPOtc65zrFdIgorCisjLiAiIgorbXNnaWQgImNoZWNrb3V0IFtub3VuXSIKK21zZ3N0ciAizrXOvs6xzrPPic6zzq4gW86xzr3PhM65zrrOtc6vzrzOtc69zr9dIgorCisjLiAiVGhlIGFjdGlvbiBvZiB1cGRhdGluZyB0aGUgd29ya2luZyB0cmVlIHRvIGEgcmV2aXNpb24gd2hpY2ggd2FzIHN0b3JlZCBpbiB0aGUgb2JqZWN0IGRhdGFiYXNlLiIKK21zZ2lkICJjaGVja291dCBbdmVyYl0iCittc2dzdHIgIs61zr7Osc6zz4nOs86uIFvOtc69zq3Pgc6zzrXOuc6xXSIKKworIy4gIiIKK21zZ2lkICJjbG9uZSBbdmVyYl0iCittc2dzdHIgIs66zrvPic69zr/PgM6/zq/Ot8+DzrcgW861zr3Orc+BzrPOtc65zrFdIgorCisjLiAiQSBzaW5nbGUgcG9pbnQgaW4gdGhlIGdpdCBoaXN0b3J5LiIKK21zZ2lkICJjb21taXQgW25vdW5dIgorbXNnc3RyICLPhc+Azr/Oss6/zrvOriBbzrHOvc+EzrnOus61zq/OvM61zr3Ov10gIgorCisjLiAiVGhlIGFjdGlvbiBvZiBzdG9yaW5nIGEgbmV3IHNuYXBzaG90IG9mIHRoZSBwcm9qZWN0J3Mgc3RhdGUgaW4gdGhlIGdpdCBoaXN0b3J5LiIKK21zZ2lkICJjb21taXQgW3ZlcmJdIgorbXNnc3RyICLPhc+Azr/Oss6/zrvOriBbzrXOvc6tz4HOs861zrnOsV0iCisKKyMuICIiCittc2dpZCAiZGlmZiBbbm91bl0iCittc2dzdHIgIs60zrnOsc+Gzr/Pgc6sIFvOsc69z4TOuc66zrXOr868zrXOvc6/XSAiCisKKyMuICIiCittc2dpZCAiZGlmZiBbdmVyYl0iCittc2dzdHIgIs60zrnOsc+Gzr/Pgc6sIFvOtc69zq3Pgc6zzrXOuc6xXSIKKworIy4gIkEgZmFzdC1mb3J3YXJkIGlzIGEgc3BlY2lhbCB0eXBlIG9mIG1lcmdlIHdoZXJlIHlvdSBoYXZlIGEgcmV2aXNpb24gYW5kIHlvdSBhcmUgbWVyZ2luZyBhbm90aGVyIGJyYW5jaCdzIGNoYW5nZXMgdGhhdCBoYXBwZW4gdG8gYmUgYSBkZXNjZW5kYW50IG9mIHdoYXQgeW91IGhhdmUuIgorbXNnaWQgImZhc3QgZm9yd2FyZCBtZXJnZSIKK21zZ3N0ciAiz4PPhc6zz4fPjs69zrXPhc+DzrcgzrXPgM65z4TOrM+Hz4XOvc+DzrfPgiIKKworIy4gIkZldGNoaW5nIGEgYnJhbmNoIG1lYW5zIHRvIGdldCB0aGUgYnJhbmNoJ3MgaGVhZCBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnksIHRvIGZpbmQgb3V0IHdoaWNoIG9iamVjdHMgYXJlIG1pc3NpbmcgZnJvbSB0aGUgbG9jYWwgb2JqZWN0IGRhdGFiYXNlLCBhbmQgdG8gZ2V0IHRoZW0sIHRvby4iCittc2dpZCAiZmV0Y2giCittc2dzdHIgIs6xzr3OrM66z4TOt8+DzrciCisKKyMuICJPbmUgY29udGV4dCBvZiBjb25zZWN1dGl2ZSBsaW5lcyBpbiBhIHdob2xlIHBhdGNoLCB3aGljaCBjb25zaXN0cyBvZiBtYW55IHN1Y2ggaHVua3MiCittc2dpZCAiaHVuayIKK21zZ3N0ciAizrrOv868zrzOrM+EzrkiCisKKyMuICJBIGNvbGxlY3Rpb24gb2YgZmlsZXMuIFRoZSBpbmRleCBpcyBhIHN0b3JlZCB2ZXJzaW9uIG9mIHlvdXIgd29ya2luZyB0cmVlLiIKK21zZ2lkICJpbmRleCAoaW4gZ2l0LWd1aTogc3RhZ2luZyBhcmVhKSIKK21zZ3N0ciAizrXPhc+BzrXPhM6uz4HOuc6/ICjPg8+Ezr8gZ2l0LWd1aTogz4DOtc+BzrnOv8+Hzq4gz4PPhM6xzrTOuc6/z4DOv86vzrfPg863z4IpIgorCisjLiAiQSBzdWNjZXNzZnVsIG1lcmdlIHJlc3VsdHMgaW4gdGhlIGNyZWF0aW9uIG9mIGEgbmV3IGNvbW1pdCByZXByZXNlbnRpbmcgdGhlIHJlc3VsdCBvZiB0aGUgbWVyZ2UuIgorbXNnaWQgIm1lcmdlIFtub3VuXSIKK21zZ3N0ciAiz4PPhc6zz4fPjs69zrXPhc+DzrcgW86xzr3PhM65zrrOtc6vzrzOtc69zr9dIgorCisjLiAiVG8gYnJpbmcgdGhlIGNvbnRlbnRzIG9mIGFub3RoZXIgYnJhbmNoIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ2lkICJtZXJnZSBbdmVyYl0iCittc2dzdHIgIs+Dz4XOs8+Hz47Ovc61z4XPg863IFvOtc69zq3Pgc6zzrXOuc6xXSIKKworIy4gIiIKK21zZ2lkICJtZXNzYWdlIgorbXNnc3RyICLOvM6uzr3Phc68zrEiCisKKyMuICJEZWxldGVzIGFsbCBzdGFsZSB0cmFja2luZyBicmFuY2hlcyB1bmRlciA8bmFtZT4uIFRoZXNlIHN0YWxlIGJyYW5jaGVzIGhhdmUgYWxyZWFkeSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgcmVmZXJlbmNlZCBieSA8bmFtZT4sIGJ1dCBhcmUgc3RpbGwgbG9jYWxseSBhdmFpbGFibGUgaW4gJ3JlbW90ZXMvPG5hbWU+Jy4iCittc2dpZCAicHJ1bmUiCittc2dzdHIgIs66zrvOrM60zrXOvM6xIgorCisjLiAiUHVsbGluZyBhIGJyYW5jaCBtZWFucyB0byBmZXRjaCBpdCBhbmQgbWVyZ2UgaXQuIgorbXNnaWQgInB1bGwiCittc2dzdHIgIs67zq7PiM63IgorCisjLiAiUHVzaGluZyBhIGJyYW5jaCBtZWFucyB0byBnZXQgdGhlIGJyYW5jaCdzIGhlYWQgcmVmIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSwgYW5kIC4uLiAod2VsbCwgY2FuIHNvbWVvbmUgcGxlYXNlIGV4cGxhaW4gaXQgZm9yIG1lcmUgbW9ydGFscz8pIgorbXNnaWQgInB1c2giCittc2dzdHIgIs+OzrjOt8+DzrciCisKKyMuICIiCittc2dpZCAicmVkbyIKK21zZ3N0ciAizr7Osc69zqwiCisKKyMuICJBbiBvdGhlciByZXBvc2l0b3J5ICgncmVtb3RlJykuIE9uZSBtaWdodCBoYXZlIGEgc2V0IG9mIHJlbW90ZXMgd2hvc2UgYnJhbmNoZXMgb25lIHRyYWNrcy4iCittc2dpZCAicmVtb3RlIgorbXNnc3RyICLOsc+Azr/OvM6xzrrPgc+Fz4POvM6tzr3OvyIKKworIy4gIkEgY29sbGVjdGlvbiBvZiByZWZzICg/KSB0b2dldGhlciB3aXRoIGFuIG9iamVjdCBkYXRhYmFzZSBjb250YWluaW5nIGFsbCBvYmplY3RzIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB0aGUgcmVmcy4uLiAob29wcywgeW91J3ZlIGxvc3QgbWUgaGVyZS4gQWdhaW4sIHBsZWFzZSBhbiBleHBsYW5hdGlvbiBmb3IgbWVyZSBtb3J0YWxzPykiCittc2dpZCAicmVwb3NpdG9yeSIKK21zZ3N0ciAizrHPgM6/zrjOtc+Ezq7Pgc65zr8iCisKKyMuICIiCittc2dpZCAicmVzZXQiCittc2dzdHIgIs61z4DOsc69zrHPhs6/z4HOrCIKKworIy4gIiIKK21zZ2lkICJyZXZlcnQiCittc2dzdHIgIs6xzr3Osc6vz4HOtc+DzrciCisKKyMuICJBIHBhcnRpY3VsYXIgc3RhdGUgb2YgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHdoaWNoIHdhcyBzdG9yZWQgaW4gdGhlIG9iamVjdCBkYXRhYmFzZS4iCittc2dpZCAicmV2aXNpb24iCittc2dzdHIgIs6xzr3Osc64zrXPjs+BzrfPg863IgorCisjLiAiIgorIywgZnV6enkKK21zZ2lkICJzaWduIG9mZiIKK21zZ3N0ciAizrHPgM6/z4PPjc69zrTOtc+DzrciCisKKyMuICIiCittc2dpZCAic3RhZ2luZyBhcmVhIgorbXNnc3RyICLPgM61z4HOuc6/z4fOriDPg8+EzrHOtM65zr/PgM6/zq/Ot8+DzrfPgiIKKworIy4gIiIKK21zZ2lkICJzdGF0dXMiCittc2dzdHIgIs66zrHPhM6sz4PPhM6xz4POtyIKKworIy4gIkEgcmVmIHBvaW50aW5nIHRvIGEgdGFnIG9yIGNvbW1pdCBvYmplY3QiCittc2dpZCAidGFnIFtub3VuXSIKK21zZ3N0ciAizrXPhM65zrrOrc+EzrEgW86xzr3PhM65zrrOtc6vzrzOtc69zr9dIgorCisjLiAiIgorbXNnaWQgInRhZyBbdmVyYl0iCittc2dzdHIgIs61z4TOuc66zq3PhM6xIFvOtc69zq3Pgc6zzrXOuc6xXSIKKworIy4gIkEgcmVndWxhciBnaXQgYnJhbmNoIHRoYXQgaXMgdXNlZCB0byBmb2xsb3cgY2hhbmdlcyBmcm9tIGFub3RoZXIgcmVwb3NpdG9yeS4iCittc2dpZCAidHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICLOus67zqzOtM6/z4Igz4DOsc+BzrHOus6/zrvOv8+NzrjOt8+DzrfPgiIKKworIy4gIiIKK21zZ2lkICJ1bmRvIgorbXNnc3RyICLOsc69zrHOr8+BzrXPg863IgorCisjLiAiIgorbXNnaWQgInVwZGF0ZSIKK21zZ3N0ciAizrXOvc63zrzOrc+Bz4nPg863IgorCisjLiAiIgorbXNnaWQgInZlcmlmeSIKK21zZ3N0ciAizrXPgM6xzrvOrs64zrXPhc+DzrciCisKKyMuICJUaGUgdHJlZSBvZiBhY3R1YWwgY2hlY2tlZCBvdXQgZmlsZXMuIgorbXNnaWQgIndvcmtpbmcgY29weSwgd29ya2luZyB0cmVlIgorbXNnc3RyICLOsc69z4TOr86zz4HOsc+Gzr8gzrXPgc6zzrHPg86vzrHPgiIKKworCmRpZmYgLS1naXQgYS9naXQtZ3VpL3BvL2l0LnBvIGIvZ2l0LWd1aS9wby9pdC5wbwppbmRleCA3NjI2MzJjLi5hYTE1YTIwIDEwMDY0NAotLS0gYS9naXQtZ3VpL3BvL2l0LnBvCisrKyBiL2dpdC1ndWkvcG8vaXQucG8KQEAgLTksNDEgKzksNDEgQEAKIG1zZ3N0ciAiIgogIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0LWd1aVxuIgogIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwOC0xMi0wOCAwODozMS0wODAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAwOC0xMi0wOSAxMzowNCswMTAwXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTAtMDEtMjYgMTU6NDctMDgwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTAtMDEtMjggMTA6MDQrMDEwMFxuIgogIkxhc3QtVHJhbnNsYXRvcjogTWljaGVsZSBCYWxsYWJpbyA8YmFycmFfY3VkYUBrYXRhbWFpbC5jb20+XG4iCiAiTGFuZ3VhZ2UtVGVhbTogSXRhbGlhbiA8dHBAbGlzdHMubGludXguaXQ+XG4iCiAiTUlNRS1WZXJzaW9uOiAxLjBcbiIKICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCiAKLSM6IGdpdC1ndWkuc2g6NDEgZ2l0LWd1aS5zaDo3MzcgZ2l0LWd1aS5zaDo3NTEgZ2l0LWd1aS5zaDo3NjQgZ2l0LWd1aS5zaDo4NDcKLSM6IGdpdC1ndWkuc2g6ODY2CisjOiBnaXQtZ3VpLnNoOjQxIGdpdC1ndWkuc2g6NzkzIGdpdC1ndWkuc2g6ODA3IGdpdC1ndWkuc2g6ODIwIGdpdC1ndWkuc2g6OTAzCisjOiBnaXQtZ3VpLnNoOjkyMgogbXNnaWQgImdpdC1ndWk6IGZhdGFsIGVycm9yIgogbXNnc3RyICJnaXQtZ3VpOiBlcnJvcmUgZ3JhdmUiCiAKLSM6IGdpdC1ndWkuc2g6Njg5CisjOiBnaXQtZ3VpLnNoOjc0MwogIywgdGNsLWZvcm1hdAogbXNnaWQgIkludmFsaWQgZm9udCBzcGVjaWZpZWQgaW4gJXM6IgogbXNnc3RyICJDYXJhdHRlcmkgbm9uIHZhbGlkaSBzcGVjaWZpY2F0aSBpbiAlczoiCiAKLSM6IGdpdC1ndWkuc2g6NzIzCisjOiBnaXQtZ3VpLnNoOjc3OQogbXNnaWQgIk1haW4gRm9udCIKIG1zZ3N0ciAiQ2FyYXR0ZXJpIHByaW5jaXBhbGkiCiAKLSM6IGdpdC1ndWkuc2g6NzI0CisjOiBnaXQtZ3VpLnNoOjc4MAogbXNnaWQgIkRpZmYvQ29uc29sZSBGb250IgogbXNnc3RyICJDYXJhdHRlcmkgcGVyIGNvbmZyb250aSBlIHRlcm1pbmFsZSIKIAotIzogZ2l0LWd1aS5zaDo3MzgKKyM6IGdpdC1ndWkuc2g6Nzk0CiBtc2dpZCAiQ2Fubm90IGZpbmQgZ2l0IGluIFBBVEguIgogbXNnc3RyICJJbXBvc3NpYmlsZSB0cm92YXJlIGdpdCBuZWwgUEFUSCIKIAotIzogZ2l0LWd1aS5zaDo3NjUKKyM6IGdpdC1ndWkuc2g6ODIxCiBtc2dpZCAiQ2Fubm90IHBhcnNlIEdpdCB2ZXJzaW9uIHN0cmluZzoiCiBtc2dzdHIgIkltcG9zc2liaWxlIGRldGVybWluYXJlIGxhIHZlcnNpb25lIGRpIEdpdDoiCiAKLSM6IGdpdC1ndWkuc2g6NzgzCisjOiBnaXQtZ3VpLnNoOjgzOQogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICJHaXQgdmVyc2lvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiIKQEAgLTYyLDQ0NiArNjIsNDc1IEBACiAiXG4iCiAiQXNzdW1lcmUgY2hlICclcycgc2lhIGFsbGEgdmVyc2lvbmUgMS41LjA/XG4iCiAKLSM6IGdpdC1ndWkuc2g6MTA2MgorIzogZ2l0LWd1aS5zaDoxMTI4CiBtc2dpZCAiR2l0IGRpcmVjdG9yeSBub3QgZm91bmQ6IgogbXNnc3RyICJOb24gdHJvdm8gbGEgZGlyZWN0b3J5IGRpIGdpdDogIgogCi0jOiBnaXQtZ3VpLnNoOjEwNjkKKyM6IGdpdC1ndWkuc2g6MTE0NgogbXNnaWQgIkNhbm5vdCBtb3ZlIHRvIHRvcCBvZiB3b3JraW5nIGRpcmVjdG9yeToiCiBtc2dzdHIgIkltcG9zc2liaWxlIHNwb3N0YXJzaSBzdWxsYSBkaXJlY3RvcnkgcHJpbmNpcGFsZSBkZWwgcHJvZ2V0dG86IgogCi0jOiBnaXQtZ3VpLnNoOjEwNzYKLW1zZ2lkICJDYW5ub3QgdXNlIGZ1bm55IC5naXQgZGlyZWN0b3J5OiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgdXNhcmUgdW5hIC5naXQgZGlyZWN0b3J5IHN0cmFuYToiCisjOiBnaXQtZ3VpLnNoOjExNTQKK21zZ2lkICJDYW5ub3QgdXNlIGJhcmUgcmVwb3NpdG9yeToiCittc2dzdHIgIkltcG9zc2liaWxlIHVzYXJlIHVuIGFyY2hpdmlvIHNlbnphIGRpcmVjdG9yeSBkaSBsYXZvcm86IgogCi0jOiBnaXQtZ3VpLnNoOjEwODEKKyM6IGdpdC1ndWkuc2g6MTE2MgogbXNnaWQgIk5vIHdvcmtpbmcgZGlyZWN0b3J5IgogbXNnc3RyICJOZXNzdW5hIGRpcmVjdG9yeSBkaSBsYXZvcm8iCiAKLSM6IGdpdC1ndWkuc2g6MTI0NyBsaWIvY2hlY2tvdXRfb3AudGNsOjMwNQorIzogZ2l0LWd1aS5zaDoxMzM0IGxpYi9jaGVja291dF9vcC50Y2w6MzA2CiBtc2dpZCAiUmVmcmVzaGluZyBmaWxlIHN0YXR1cy4uLiIKIG1zZ3N0ciAiQ29udHJvbGxvIGRlbGxvIHN0YXRvIGRlaSBmaWxlIGluIGNvcnNvLi4uIgogCi0jOiBnaXQtZ3VpLnNoOjEzMDMKKyM6IGdpdC1ndWkuc2g6MTM5MAogbXNnaWQgIlNjYW5uaW5nIGZvciBtb2RpZmllZCBmaWxlcyAuLi4iCiBtc2dzdHIgIlJpY2VyY2EgZGkgZmlsZSBtb2RpZmljYXRpIGluIGNvcnNvLi4uIgogCi0jOiBnaXQtZ3VpLnNoOjEzNjcKKyM6IGdpdC1ndWkuc2g6MTQ1NAogbXNnaWQgIkNhbGxpbmcgcHJlcGFyZS1jb21taXQtbXNnIGhvb2suLi4iCiBtc2dzdHIgIkF2dmlvIHByZXBhcmUtY29tbWl0LW1zZyBob29rLi4uIgogCi0jOiBnaXQtZ3VpLnNoOjEzODQKKyM6IGdpdC1ndWkuc2g6MTQ3MQogbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4iCiBtc2dzdHIgIlJldmlzaW9uZSByaWZpdXRhdGEgZGFsIHByZXBhcmUtY29tbWl0LW1zZyBob29rLiIKIAotIzogZ2l0LWd1aS5zaDoxNTQyIGxpYi9icm93c2VyLnRjbDoyNDYKKyM6IGdpdC1ndWkuc2g6MTYyOSBsaWIvYnJvd3Nlci50Y2w6MjQ2CiBtc2dpZCAiUmVhZHkuIgogbXNnc3RyICJQcm9udG8uIgogCi0jOiBnaXQtZ3VpLnNoOjE4MTkKKyM6IGdpdC1ndWkuc2g6MTc4NworIywgdGNsLWZvcm1hdAorbXNnaWQgIkRpc3BsYXlpbmcgb25seSAlcyBvZiAlcyBmaWxlcy4iCittc2dzdHIgIlNhcmFubm8gbW9zdHJhdGkgc29sbyAlcyBmaWxlIHN1ICVzLiIKKworIzogZ2l0LWd1aS5zaDoxOTEzCiBtc2dpZCAiVW5tb2RpZmllZCIKIG1zZ3N0ciAiTm9uIG1vZGlmaWNhdG8iCiAKLSM6IGdpdC1ndWkuc2g6MTgyMQorIzogZ2l0LWd1aS5zaDoxOTE1CiBtc2dpZCAiTW9kaWZpZWQsIG5vdCBzdGFnZWQiCiBtc2dzdHIgIk1vZGlmaWNhdG8sIG5vbiBwcmVwYXJhdG8gcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCiAKLSM6IGdpdC1ndWkuc2g6MTgyMiBnaXQtZ3VpLnNoOjE4MzAKKyM6IGdpdC1ndWkuc2g6MTkxNiBnaXQtZ3VpLnNoOjE5MjQKIG1zZ2lkICJTdGFnZWQgZm9yIGNvbW1pdCIKIG1zZ3N0ciAiUHJlcGFyYXRvIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIgogCi0jOiBnaXQtZ3VpLnNoOjE4MjMgZ2l0LWd1aS5zaDoxODMxCisjOiBnaXQtZ3VpLnNoOjE5MTcgZ2l0LWd1aS5zaDoxOTI1CiBtc2dpZCAiUG9ydGlvbnMgc3RhZ2VkIGZvciBjb21taXQiCiBtc2dzdHIgIlBhcnRpIHByZXBhcmF0ZSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKIAotIzogZ2l0LWd1aS5zaDoxODI0IGdpdC1ndWkuc2g6MTgzMgorIzogZ2l0LWd1aS5zaDoxOTE4IGdpdC1ndWkuc2g6MTkyNgogbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0LCBtaXNzaW5nIgogbXNnc3RyICJQcmVwYXJhdG8gcGVyIHVuYSBudW92YSByZXZpc2lvbmUsIG1hbmNhbnRlIgogCi0jOiBnaXQtZ3VpLnNoOjE4MjYKKyM6IGdpdC1ndWkuc2g6MTkyMAogbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBub3Qgc3RhZ2VkIgogbXNnc3RyICJUaXBvIGRpIGZpbGUgbW9kaWZpY2F0bywgbm9uIHByZXBhcmF0byBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKIAotIzogZ2l0LWd1aS5zaDoxODI3CisjOiBnaXQtZ3VpLnNoOjE5MjEKIG1zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgc3RhZ2VkIgogbXNnc3RyICJUaXBvIGRpIGZpbGUgbW9kaWZpY2F0bywgcHJlcGFyYXRvIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIgogCi0jOiBnaXQtZ3VpLnNoOjE4MjkKKyM6IGdpdC1ndWkuc2g6MTkyMwogbXNnaWQgIlVudHJhY2tlZCwgbm90IHN0YWdlZCIKIG1zZ3N0ciAiTm9uIHRyYWNjaWF0bywgbm9uIHByZXBhcmF0byBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKIAotIzogZ2l0LWd1aS5zaDoxODM0CisjOiBnaXQtZ3VpLnNoOjE5MjgKIG1zZ2lkICJNaXNzaW5nIgogbXNnc3RyICJNYW5jYW50ZSIKIAotIzogZ2l0LWd1aS5zaDoxODM1CisjOiBnaXQtZ3VpLnNoOjE5MjkKIG1zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwiCiBtc2dzdHIgIlByZXBhcmF0byBwZXIgbGEgcmltb3ppb25lIgogCi0jOiBnaXQtZ3VpLnNoOjE4MzYKKyM6IGdpdC1ndWkuc2g6MTkzMAogbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCwgc3RpbGwgcHJlc2VudCIKIG1zZ3N0ciAiUHJlcGFyYXRvIGFsbGEgcmltb3ppb25lLCBhbmNvcmEgcHJlc2VudGUiCiAKLSM6IGdpdC1ndWkuc2g6MTgzOCBnaXQtZ3VpLnNoOjE4MzkgZ2l0LWd1aS5zaDoxODQwIGdpdC1ndWkuc2g6MTg0MQotIzogZ2l0LWd1aS5zaDoxODQyIGdpdC1ndWkuc2g6MTg0MworIzogZ2l0LWd1aS5zaDoxOTMyIGdpdC1ndWkuc2g6MTkzMyBnaXQtZ3VpLnNoOjE5MzQgZ2l0LWd1aS5zaDoxOTM1CisjOiBnaXQtZ3VpLnNoOjE5MzYgZ2l0LWd1aS5zaDoxOTM3CiBtc2dpZCAiUmVxdWlyZXMgbWVyZ2UgcmVzb2x1dGlvbiIKIG1zZ3N0ciAiUmljaGllZGUgcmlzb2x1emlvbmUgZGVpIGNvbmZsaXR0aSIKIAotIzogZ2l0LWd1aS5zaDoxODc4CisjOiBnaXQtZ3VpLnNoOjE5NzIKIG1zZ2lkICJTdGFydGluZyBnaXRrLi4uIHBsZWFzZSB3YWl0Li4uIgogbXNnc3RyICJBdnZpbyBkaSBnaXRrLi4uIGF0dGVuZGVyZS4uLiIKIAotIzogZ2l0LWd1aS5zaDoxODg3CisjOiBnaXQtZ3VpLnNoOjE5ODQKIG1zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdGsgaW4gUEFUSCIKIG1zZ3N0ciAiSW1wb3NzaWJpbGUgdHJvdmFyZSBnaXRrIG5lbCBQQVRIIgogCi0jOiBnaXQtZ3VpLnNoOjIyODAgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozNgorIzogZ2l0LWd1aS5zaDoyMDQzCittc2dpZCAiQ291bGRuJ3QgZmluZCBnaXQgZ3VpIGluIFBBVEgiCittc2dzdHIgIkltcG9zc2liaWxlIHRyb3ZhcmUgZ2l0IGd1aSBuZWwgUEFUSCIKKworIzogZ2l0LWd1aS5zaDoyNDU1IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzYKIG1zZ2lkICJSZXBvc2l0b3J5IgogbXNnc3RyICJBcmNoaXZpbyIKIAotIzogZ2l0LWd1aS5zaDoyMjgxCisjOiBnaXQtZ3VpLnNoOjI0NTYKIG1zZ2lkICJFZGl0IgogbXNnc3RyICJNb2RpZmljYSIKIAotIzogZ2l0LWd1aS5zaDoyMjgzIGxpYi9jaG9vc2VfcmV2LnRjbDo1NjEKKyM6IGdpdC1ndWkuc2g6MjQ1OCBsaWIvY2hvb3NlX3Jldi50Y2w6NTYxCiBtc2dpZCAiQnJhbmNoIgogbXNnc3RyICJSYW1vIgogCi0jOiBnaXQtZ3VpLnNoOjIyODYgbGliL2Nob29zZV9yZXYudGNsOjU0OAorIzogZ2l0LWd1aS5zaDoyNDYxIGxpYi9jaG9vc2VfcmV2LnRjbDo1NDgKIG1zZ2lkICJDb21taXRAQG5vdW4iCiBtc2dzdHIgIlJldmlzaW9uZSIKIAotIzogZ2l0LWd1aS5zaDoyMjg5IGxpYi9tZXJnZS50Y2w6MTIxIGxpYi9tZXJnZS50Y2w6MTUwIGxpYi9tZXJnZS50Y2w6MTY4CisjOiBnaXQtZ3VpLnNoOjI0NjQgbGliL21lcmdlLnRjbDoxMjEgbGliL21lcmdlLnRjbDoxNTAgbGliL21lcmdlLnRjbDoxNjgKIG1zZ2lkICJNZXJnZSIKIG1zZ3N0ciAiRnVzaW9uZSAoTWVyZ2UpIgogCi0jOiBnaXQtZ3VpLnNoOjIyOTAgbGliL2Nob29zZV9yZXYudGNsOjU1NworIzogZ2l0LWd1aS5zaDoyNDY1IGxpYi9jaG9vc2VfcmV2LnRjbDo1NTcKIG1zZ2lkICJSZW1vdGUiCiBtc2dzdHIgIlJlbW90byIKIAotIzogZ2l0LWd1aS5zaDoyMjkzCisjOiBnaXQtZ3VpLnNoOjI0NjgKIG1zZ2lkICJUb29scyIKLW1zZ3N0ciAiU3RydW1lbnRpIgorbXNnc3RyICJBY2Nlc3NvcmkiCiAKLSM6IGdpdC1ndWkuc2g6MjMwMgorIzogZ2l0LWd1aS5zaDoyNDc3CiBtc2dpZCAiRXhwbG9yZSBXb3JraW5nIENvcHkiCiBtc2dzdHIgIkVzcGxvcmEgY29waWEgZGkgbGF2b3JvIgogCi0jOiBnaXQtZ3VpLnNoOjIzMDcKKyM6IGdpdC1ndWkuc2g6MjQ4MwogbXNnaWQgIkJyb3dzZSBDdXJyZW50IEJyYW5jaCdzIEZpbGVzIgogbXNnc3RyICJFc3Bsb3JhIGkgZmlsZSBkZWwgcmFtbyBhdHR1YWxlIgogCi0jOiBnaXQtZ3VpLnNoOjIzMTEKKyM6IGdpdC1ndWkuc2g6MjQ4NwogbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMuLi4iCiBtc2dzdHIgIkVzcGxvcmEgaSBmaWxlIGRlbCByYW1vLi4uIgogCi0jOiBnaXQtZ3VpLnNoOjIzMTYKKyM6IGdpdC1ndWkuc2g6MjQ5MgogbXNnaWQgIlZpc3VhbGl6ZSBDdXJyZW50IEJyYW5jaCdzIEhpc3RvcnkiCiBtc2dzdHIgIlZpc3VhbGl6emEgbGEgY3Jvbm9sb2dpYSBkZWwgcmFtbyBhdHR1YWxlIgogCi0jOiBnaXQtZ3VpLnNoOjIzMjAKKyM6IGdpdC1ndWkuc2g6MjQ5NgogbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkiCiBtc2dzdHIgIlZpc3VhbGl6emEgbGEgY3Jvbm9sb2dpYSBkaSB0dXR0aSBpIHJhbWkiCiAKLSM6IGdpdC1ndWkuc2g6MjMyNworIzogZ2l0LWd1aS5zaDoyNTAzCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQnJvd3NlICVzJ3MgRmlsZXMiCiBtc2dzdHIgIkVzcGxvcmEgaSBmaWxlIGRpICVzIgogCi0jOiBnaXQtZ3VpLnNoOjIzMjkKKyM6IGdpdC1ndWkuc2g6MjUwNQogIywgdGNsLWZvcm1hdAogbXNnaWQgIlZpc3VhbGl6ZSAlcydzIEhpc3RvcnkiCiBtc2dzdHIgIlZpc3VhbGl6emEgbGEgY3Jvbm9sb2dpYSBkaSAlcyIKIAotIzogZ2l0LWd1aS5zaDoyMzM0IGxpYi9kYXRhYmFzZS50Y2w6MjcgbGliL2RhdGFiYXNlLnRjbDo2NworIzogZ2l0LWd1aS5zaDoyNTEwIGxpYi9kYXRhYmFzZS50Y2w6MjcgbGliL2RhdGFiYXNlLnRjbDo2NwogbXNnaWQgIkRhdGFiYXNlIFN0YXRpc3RpY3MiCiBtc2dzdHIgIlN0YXRpc3RpY2hlIGRlbGwnYXJjaGl2aW8iCiAKLSM6IGdpdC1ndWkuc2g6MjMzNyBsaWIvZGF0YWJhc2UudGNsOjM0CisjOiBnaXQtZ3VpLnNoOjI1MTMgbGliL2RhdGFiYXNlLnRjbDozNAogbXNnaWQgIkNvbXByZXNzIERhdGFiYXNlIgogbXNnc3RyICJDb21wcmltaSBsJ2FyY2hpdmlvIgogCi0jOiBnaXQtZ3VpLnNoOjIzNDAKKyM6IGdpdC1ndWkuc2g6MjUxNgogbXNnaWQgIlZlcmlmeSBEYXRhYmFzZSIKIG1zZ3N0ciAiVmVyaWZpY2EgbCdhcmNoaXZpbyIKIAotIzogZ2l0LWd1aS5zaDoyMzQ3IGdpdC1ndWkuc2g6MjM1MSBnaXQtZ3VpLnNoOjIzNTUgbGliL3Nob3J0Y3V0LnRjbDo3Ci0jOiBsaWIvc2hvcnRjdXQudGNsOjM5IGxpYi9zaG9ydGN1dC50Y2w6NzEKKyM6IGdpdC1ndWkuc2g6MjUyMyBnaXQtZ3VpLnNoOjI1MjcgZ2l0LWd1aS5zaDoyNTMxIGxpYi9zaG9ydGN1dC50Y2w6OAorIzogbGliL3Nob3J0Y3V0LnRjbDo0MCBsaWIvc2hvcnRjdXQudGNsOjcyCiBtc2dpZCAiQ3JlYXRlIERlc2t0b3AgSWNvbiIKIG1zZ3N0ciAiQ3JlYSBpY29uYSBkZXNrdG9wIgogCi0jOiBnaXQtZ3VpLnNoOjIzNjMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxODMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxOTEKKyM6IGdpdC1ndWkuc2g6MjUzOSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE4MyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE5MQogbXNnaWQgIlF1aXQiCiBtc2dzdHIgIkVzY2kiCiAKLSM6IGdpdC1ndWkuc2g6MjM3MQorIzogZ2l0LWd1aS5zaDoyNTQ3CiBtc2dpZCAiVW5kbyIKIG1zZ3N0ciAiQW5udWxsYSIKIAotIzogZ2l0LWd1aS5zaDoyMzc0CisjOiBnaXQtZ3VpLnNoOjI1NTAKIG1zZ2lkICJSZWRvIgogbXNnc3RyICJSaXBldGkiCiAKLSM6IGdpdC1ndWkuc2g6MjM3OCBnaXQtZ3VpLnNoOjI5MzcKKyM6IGdpdC1ndWkuc2g6MjU1NCBnaXQtZ3VpLnNoOjMxMDkKIG1zZ2lkICJDdXQiCiBtc2dzdHIgIlRhZ2xpYSIKIAotIzogZ2l0LWd1aS5zaDoyMzgxIGdpdC1ndWkuc2g6Mjk0MCBnaXQtZ3VpLnNoOjMwMTQgZ2l0LWd1aS5zaDozMDk2CisjOiBnaXQtZ3VpLnNoOjI1NTcgZ2l0LWd1aS5zaDozMTEyIGdpdC1ndWkuc2g6MzE4NiBnaXQtZ3VpLnNoOjMyNTkKICM6IGxpYi9jb25zb2xlLnRjbDo2OQogbXNnaWQgIkNvcHkiCiBtc2dzdHIgIkNvcGlhIgogCi0jOiBnaXQtZ3VpLnNoOjIzODQgZ2l0LWd1aS5zaDoyOTQzCisjOiBnaXQtZ3VpLnNoOjI1NjAgZ2l0LWd1aS5zaDozMTE1CiBtc2dpZCAiUGFzdGUiCiBtc2dzdHIgIkluY29sbGEiCiAKLSM6IGdpdC1ndWkuc2g6MjM4NyBnaXQtZ3VpLnNoOjI5NDYgbGliL2JyYW5jaF9kZWxldGUudGNsOjI2CisjOiBnaXQtZ3VpLnNoOjI1NjMgZ2l0LWd1aS5zaDozMTE4IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyNgogIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozOAogbXNnaWQgIkRlbGV0ZSIKIG1zZ3N0ciAiRWxpbWluYSIKIAotIzogZ2l0LWd1aS5zaDoyMzkxIGdpdC1ndWkuc2g6Mjk1MCBnaXQtZ3VpLnNoOjMxMDAgbGliL2NvbnNvbGUudGNsOjcxCisjOiBnaXQtZ3VpLnNoOjI1NjcgZ2l0LWd1aS5zaDozMTIyIGdpdC1ndWkuc2g6MzI2MyBsaWIvY29uc29sZS50Y2w6NzEKIG1zZ2lkICJTZWxlY3QgQWxsIgogbXNnc3RyICJTZWxlemlvbmEgdHV0dG8iCiAKLSM6IGdpdC1ndWkuc2g6MjQwMAorIzogZ2l0LWd1aS5zaDoyNTc2CiBtc2dpZCAiQ3JlYXRlLi4uIgogbXNnc3RyICJDcmVhLi4uIgogCi0jOiBnaXQtZ3VpLnNoOjI0MDYKKyM6IGdpdC1ndWkuc2g6MjU4MgogbXNnaWQgIkNoZWNrb3V0Li4uIgogbXNnc3RyICJBdHRpdmEuLi4iCiAKLSM6IGdpdC1ndWkuc2g6MjQxMgorIzogZ2l0LWd1aS5zaDoyNTg4CiBtc2dpZCAiUmVuYW1lLi4uIgogbXNnc3RyICJSaW5vbWluYSIKIAotIzogZ2l0LWd1aS5zaDoyNDE3CisjOiBnaXQtZ3VpLnNoOjI1OTMKIG1zZ2lkICJEZWxldGUuLi4iCiBtc2dzdHIgIkVsaW1pbmEuLi4iCiAKLSM6IGdpdC1ndWkuc2g6MjQyMgorIzogZ2l0LWd1aS5zaDoyNTk4CiBtc2dpZCAiUmVzZXQuLi4iCiBtc2dzdHIgIlJpcHJpc3RpbmEuLi4iCiAKLSM6IGdpdC1ndWkuc2g6MjQzMgorIzogZ2l0LWd1aS5zaDoyNjA4CiBtc2dpZCAiRG9uZSIKIG1zZ3N0ciAiRmF0dG8iCiAKLSM6IGdpdC1ndWkuc2g6MjQzNAorIzogZ2l0LWd1aS5zaDoyNjEwCiBtc2dpZCAiQ29tbWl0QEB2ZXJiIgogbXNnc3RyICJOdW92YSByZXZpc2lvbmUiCiAKLSM6IGdpdC1ndWkuc2g6MjQ0MyBnaXQtZ3VpLnNoOjI4NzgKKyM6IGdpdC1ndWkuc2g6MjYxOSBnaXQtZ3VpLnNoOjMwNTAKIG1zZ2lkICJOZXcgQ29tbWl0IgogbXNnc3RyICJOdW92YSByZXZpc2lvbmUiCiAKLSM6IGdpdC1ndWkuc2g6MjQ1MSBnaXQtZ3VpLnNoOjI4ODUKKyM6IGdpdC1ndWkuc2g6MjYyNyBnaXQtZ3VpLnNoOjMwNTcKIG1zZ2lkICJBbWVuZCBMYXN0IENvbW1pdCIKIG1zZ3N0ciAiQ29ycmVnZ2kgbCd1bHRpbWEgcmV2aXNpb25lIgogCi0jOiBnaXQtZ3VpLnNoOjI0NjEgZ2l0LWd1aS5zaDoyODM5IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6OTkKKyM6IGdpdC1ndWkuc2g6MjYzNyBnaXQtZ3VpLnNoOjMwMTEgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo5OQogbXNnaWQgIlJlc2NhbiIKIG1zZ3N0ciAiQW5hbGl6emEgbnVvdmFtZW50ZSIKIAotIzogZ2l0LWd1aS5zaDoyNDY3CisjOiBnaXQtZ3VpLnNoOjI2NDMKIG1zZ2lkICJTdGFnZSBUbyBDb21taXQiCiBtc2dzdHIgIlByZXBhcmEgcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCiAKLSM6IGdpdC1ndWkuc2g6MjQ3MworIzogZ2l0LWd1aS5zaDoyNjQ5CiBtc2dpZCAiU3RhZ2UgQ2hhbmdlZCBGaWxlcyBUbyBDb21taXQiCiBtc2dzdHIgIlByZXBhcmEgaSBmaWxlIG1vZGlmaWNhdGkgcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCiAKLSM6IGdpdC1ndWkuc2g6MjQ3OQorIzogZ2l0LWd1aS5zaDoyNjU1CiBtc2dpZCAiVW5zdGFnZSBGcm9tIENvbW1pdCIKIG1zZ3N0ciAiQW5udWxsYSBwcmVwYXJhemlvbmUiCiAKLSM6IGdpdC1ndWkuc2g6MjQ4NCBsaWIvaW5kZXgudGNsOjQxMAorIzogZ2l0LWd1aS5zaDoyNjYxIGxpYi9pbmRleC50Y2w6NDEyCiBtc2dpZCAiUmV2ZXJ0IENoYW5nZXMiCiBtc2dzdHIgIkFubnVsbGEgbW9kaWZpY2hlIgogCi0jOiBnaXQtZ3VpLnNoOjI0OTEgZ2l0LWd1aS5zaDozMDgzCisjOiBnaXQtZ3VpLnNoOjI2NjkgZ2l0LWd1aS5zaDozMzEwIGdpdC1ndWkuc2g6MzM0MQogbXNnaWQgIlNob3cgTGVzcyBDb250ZXh0IgogbXNnc3RyICJNb3N0cmEgbWVubyBjb250ZXN0byIKIAotIzogZ2l0LWd1aS5zaDoyNDk1IGdpdC1ndWkuc2g6MzA4NworIzogZ2l0LWd1aS5zaDoyNjczIGdpdC1ndWkuc2g6MzMxNCBnaXQtZ3VpLnNoOjMzNDUKIG1zZ2lkICJTaG93IE1vcmUgQ29udGV4dCIKIG1zZ3N0ciAiTW9zdHJhIHBpw7kgY29udGVzdG8iCiAKLSM6IGdpdC1ndWkuc2g6MjUwMiBnaXQtZ3VpLnNoOjI4NTIgZ2l0LWd1aS5zaDoyOTYxCisjOiBnaXQtZ3VpLnNoOjI2ODAgZ2l0LWd1aS5zaDozMDI0IGdpdC1ndWkuc2g6MzEzMwogbXNnaWQgIlNpZ24gT2ZmIgogbXNnc3RyICJTaWduIE9mZiIKIAotIzogZ2l0LWd1aS5zaDoyNTE4CisjOiBnaXQtZ3VpLnNoOjI2OTYKIG1zZ2lkICJMb2NhbCBNZXJnZS4uLiIKIG1zZ3N0ciAiRnVzaW9uZSBsb2NhbGUuLi4iCiAKLSM6IGdpdC1ndWkuc2g6MjUyMworIzogZ2l0LWd1aS5zaDoyNzAxCiBtc2dpZCAiQWJvcnQgTWVyZ2UuLi4iCiBtc2dzdHIgIkludGVycm9tcGkgZnVzaW9uZS4uLiIKIAotIzogZ2l0LWd1aS5zaDoyNTM1IGdpdC1ndWkuc2g6MjU3NQorIzogZ2l0LWd1aS5zaDoyNzEzIGdpdC1ndWkuc2g6Mjc0MQogbXNnaWQgIkFkZC4uLiIKIG1zZ3N0ciAiQWdnaXVuZ2kuLi4iCiAKLSM6IGdpdC1ndWkuc2g6MjUzOQorIzogZ2l0LWd1aS5zaDoyNzE3CiBtc2dpZCAiUHVzaC4uLiIKIG1zZ3N0ciAiUHJvcGFnYS4uLiIKIAotIzogZ2l0LWd1aS5zaDoyNTQzCisjOiBnaXQtZ3VpLnNoOjI3MjEKIG1zZ2lkICJEZWxldGUgQnJhbmNoLi4uIgogbXNnc3RyICJFbGltaW5hIHJhbW8uLi4iCiAKLSM6IGdpdC1ndWkuc2g6MjU1MyBnaXQtZ3VpLnNoOjI1ODkgbGliL2Fib3V0LnRjbDoxNAorIzogZ2l0LWd1aS5zaDoyNzMxIGdpdC1ndWkuc2g6MzI5MgorbXNnaWQgIk9wdGlvbnMuLi4iCittc2dzdHIgIk9wemlvbmkuLi4iCisKKyM6IGdpdC1ndWkuc2g6Mjc0MgorbXNnaWQgIlJlbW92ZS4uLiIKK21zZ3N0ciAiUmltdW92aS4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzUxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAKK21zZ2lkICJIZWxwIgorbXNnc3RyICJBaXV0byIKKworIzogZ2l0LWd1aS5zaDoyNzU1IGdpdC1ndWkuc2g6Mjc1OSBsaWIvYWJvdXQudGNsOjE0CiAjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJBYm91dCAlcyIKIG1zZ3N0ciAiSW5mb3JtYXppb25pIHN1ICVzIgogCi0jOiBnaXQtZ3VpLnNoOjI1NTcKLW1zZ2lkICJQcmVmZXJlbmNlcy4uLiIKLW1zZ3N0ciAiUHJlZmVyZW56ZS4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNTY1IGdpdC1ndWkuc2g6MzEyOQotbXNnaWQgIk9wdGlvbnMuLi4iCi1tc2dzdHIgIk9wemlvbmkuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjU3NgotbXNnaWQgIlJlbW92ZS4uLiIKLW1zZ3N0ciAiUmltdW92aS4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNTg1IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAKLW1zZ2lkICJIZWxwIgotbXNnc3RyICJBaXV0byIKLQotIzogZ2l0LWd1aS5zaDoyNjExCisjOiBnaXQtZ3VpLnNoOjI3ODMKIG1zZ2lkICJPbmxpbmUgRG9jdW1lbnRhdGlvbiIKIG1zZ3N0ciAiRG9jdW1lbnRhemlvbmUgc3VsIHdlYiIKIAotIzogZ2l0LWd1aS5zaDoyNjE0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NgorIzogZ2l0LWd1aS5zaDoyNzg2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NgogbXNnaWQgIlNob3cgU1NIIEtleSIKIG1zZ3N0ciAiTW9zdHJhIGNoYXZlIFNTSCIKIAotIzogZ2l0LWd1aS5zaDoyNzIxCisjOiBnaXQtZ3VpLnNoOjI4OTMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJmYXRhbDogY2Fubm90IHN0YXQgcGF0aCAlczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKIG1zZ3N0ciAiIgogImVycm9yZSBncmF2ZTogaW1wb3NzaWJpbGUgZWZmZXR0dWFyZSBsbyBzdGF0IGRlbCBwYXRoICVzOiBmaWxlIG8gZGlyZWN0b3J5ICIKICJub24gdHJvdmF0YSIKIAotIzogZ2l0LWd1aS5zaDoyNzU0CisjOiBnaXQtZ3VpLnNoOjI5MjYKIG1zZ2lkICJDdXJyZW50IEJyYW5jaDoiCiBtc2dzdHIgIlJhbW8gYXR0dWFsZToiCiAKLSM6IGdpdC1ndWkuc2g6Mjc3NQorIzogZ2l0LWd1aS5zaDoyOTQ3CiBtc2dpZCAiU3RhZ2VkIENoYW5nZXMgKFdpbGwgQ29tbWl0KSIKIG1zZ3N0ciAiTW9kaWZpY2hlIHByZXBhcmF0ZSAoc2FyYW5ubyBuZWxsYSBudW92YSByZXZpc2lvbmUpIgogCi0jOiBnaXQtZ3VpLnNoOjI3OTUKKyM6IGdpdC1ndWkuc2g6Mjk2NwogbXNnaWQgIlVuc3RhZ2VkIENoYW5nZXMiCiBtc2dzdHIgIk1vZGlmaWNoZSBub24gcHJlcGFyYXRlIgogCi0jOiBnaXQtZ3VpLnNoOjI4NDUKKyM6IGdpdC1ndWkuc2g6MzAxNwogbXNnaWQgIlN0YWdlIENoYW5nZWQiCiBtc2dzdHIgIlByZXBhcmEgbW9kaWZpY2F0aSIKIAotIzogZ2l0LWd1aS5zaDoyODY0IGxpYi90cmFuc3BvcnQudGNsOjEwNCBsaWIvdHJhbnNwb3J0LnRjbDoxOTMKKyM6IGdpdC1ndWkuc2g6MzAzNiBsaWIvdHJhbnNwb3J0LnRjbDoxMDQgbGliL3RyYW5zcG9ydC50Y2w6MTkzCiBtc2dpZCAiUHVzaCIKIG1zZ3N0ciAiUHJvcGFnYSAoUHVzaCkiCiAKLSM6IGdpdC1ndWkuc2g6Mjg5OQorIzogZ2l0LWd1aS5zaDozMDcxCiBtc2dpZCAiSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCiBtc2dzdHIgIk1lc3NhZ2dpbyBkaSByZXZpc2lvbmUgaW5pemlhbGU6IgogCi0jOiBnaXQtZ3VpLnNoOjI5MDAKKyM6IGdpdC1ndWkuc2g6MzA3MgogbXNnaWQgIkFtZW5kZWQgQ29tbWl0IE1lc3NhZ2U6IgogbXNnc3RyICJNZXNzYWdnaW8gZGkgcmV2aXNpb25lIGNvcnJldHRvOiIKIAotIzogZ2l0LWd1aS5zaDoyOTAxCisjOiBnaXQtZ3VpLnNoOjMwNzMKIG1zZ2lkICJBbWVuZGVkIEluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgogbXNnc3RyICJNZXNzYWdnaW8gaW5pemlhbGUgZGkgcmV2aXNpb25lIGNvcnJldHRvOiIKIAotIzogZ2l0LWd1aS5zaDoyOTAyCisjOiBnaXQtZ3VpLnNoOjMwNzQKIG1zZ2lkICJBbWVuZGVkIE1lcmdlIENvbW1pdCBNZXNzYWdlOiIKIG1zZ3N0ciAiTWVzc2FnZ2lvIGRpIGZ1c2lvbmUgY29ycmV0dG86IgogCi0jOiBnaXQtZ3VpLnNoOjI5MDMKKyM6IGdpdC1ndWkuc2g6MzA3NQogbXNnaWQgIk1lcmdlIENvbW1pdCBNZXNzYWdlOiIKIG1zZ3N0ciAiTWVzc2FnZ2lvIGRpIGZ1c2lvbmU6IgogCi0jOiBnaXQtZ3VpLnNoOjI5MDQKKyM6IGdpdC1ndWkuc2g6MzA3NgogbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKIG1zZ3N0ciAiTWVzc2FnZ2lvIGRpIHJldmlzaW9uZToiCiAKLSM6IGdpdC1ndWkuc2g6Mjk1MyBnaXQtZ3VpLnNoOjMxMDQgbGliL2NvbnNvbGUudGNsOjczCisjOiBnaXQtZ3VpLnNoOjMxMjUgZ2l0LWd1aS5zaDozMjY3IGxpYi9jb25zb2xlLnRjbDo3MwogbXNnaWQgIkNvcHkgQWxsIgogbXNnc3RyICJDb3BpYSB0dXR0byIKIAotIzogZ2l0LWd1aS5zaDoyOTc3IGxpYi9ibGFtZS50Y2w6MTA0CisjOiBnaXQtZ3VpLnNoOjMxNDkgbGliL2JsYW1lLnRjbDoxMDQKIG1zZ2lkICJGaWxlOiIKIG1zZ3N0ciAiRmlsZToiCiAKLSM6IGdpdC1ndWkuc2g6MzA5MgorIzogZ2l0LWd1aS5zaDozMjU1CiBtc2dpZCAiUmVmcmVzaCIKIG1zZ3N0ciAiUmluZnJlc2NhIgogCi0jOiBnaXQtZ3VpLnNoOjMxMTMKKyM6IGdpdC1ndWkuc2g6MzI3NgogbXNnaWQgIkRlY3JlYXNlIEZvbnQgU2l6ZSIKIG1zZ3N0ciAiRGltaW51aXNjaSBkaW1lbnNpb25lIGNhcmF0dGVyaSIKIAotIzogZ2l0LWd1aS5zaDozMTE3CisjOiBnaXQtZ3VpLnNoOjMyODAKIG1zZ2lkICJJbmNyZWFzZSBGb250IFNpemUiCiBtc2dzdHIgIkF1bWVudGEgZGltZW5zaW9uZSBjYXJhdHRlcmkiCiAKLSM6IGdpdC1ndWkuc2g6MzEyNSBsaWIvYmxhbWUudGNsOjI4MQorIzogZ2l0LWd1aS5zaDozMjg4IGxpYi9ibGFtZS50Y2w6MjgxCiBtc2dpZCAiRW5jb2RpbmciCiBtc2dzdHIgIkNvZGlmaWNhIgogCi0jOiBnaXQtZ3VpLnNoOjMxMzYKKyM6IGdpdC1ndWkuc2g6MzI5OQogbXNnaWQgIkFwcGx5L1JldmVyc2UgSHVuayIKIG1zZ3N0ciAiQXBwbGljYS9JbnZlcnRpIHNlemlvbmUiCiAKLSM6IGdpdC1ndWkuc2g6MzE0MQorIzogZ2l0LWd1aS5zaDozMzA0CiBtc2dpZCAiQXBwbHkvUmV2ZXJzZSBMaW5lIgogbXNnc3RyICJBcHBsaWNhL0ludmVydGkgcmlnYSIKIAotIzogZ2l0LWd1aS5zaDozMTUxCisjOiBnaXQtZ3VpLnNoOjMzMjMKIG1zZ2lkICJSdW4gTWVyZ2UgVG9vbCIKIG1zZ3N0ciAiQXZ2aWEgcHJvZ3JhbW1hIGVzdGVybm8gcGVyIGxhIHJpc29sdXppb25lIGRlaSBjb25mbGl0dGkiCiAKLSM6IGdpdC1ndWkuc2g6MzE1NgorIzogZ2l0LWd1aS5zaDozMzI4CiBtc2dpZCAiVXNlIFJlbW90ZSBWZXJzaW9uIgogbXNnc3RyICJVc2EgdmVyc2lvbmUgcmVtb3RhIgogCi0jOiBnaXQtZ3VpLnNoOjMxNjAKKyM6IGdpdC1ndWkuc2g6MzMzMgogbXNnaWQgIlVzZSBMb2NhbCBWZXJzaW9uIgogbXNnc3RyICJVc2EgdmVyc2lvbmUgbG9jYWxlIgogCi0jOiBnaXQtZ3VpLnNoOjMxNjQKKyM6IGdpdC1ndWkuc2g6MzMzNgogbXNnaWQgIlJldmVydCBUbyBCYXNlIgogbXNnc3RyICJSaXRvcm5hIGFsbGEgcmV2aXNpb25lIGNvbXVuZSIKIAotIzogZ2l0LWd1aS5zaDozMTgzCisjOiBnaXQtZ3VpLnNoOjMzNTQKK21zZ2lkICJWaXN1YWxpemUgVGhlc2UgQ2hhbmdlcyBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICJWaXN1YWxpenphIHF1ZXN0ZSBtb2RpZmljaGUgbmVsIHNvdHRvbW9kdWxvIgorCisjOiBnaXQtZ3VpLnNoOjMzNTgKK21zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICJWaXN1YWxpenphIGxhIGNyb25vbG9naWEgZGVsIHJhbW8gYXR0dWFsZSBuZWwgc290dG9tb2R1bG8iCisKKyM6IGdpdC1ndWkuc2g6MzM2MgorbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAiVmlzdWFsaXp6YSBsYSBjcm9ub2xvZ2lhIGRpIHR1dHRpIGkgcmFtaSBuZWwgc290dG9tb2R1bG8iCisKKyM6IGdpdC1ndWkuc2g6MzM2NworbXNnaWQgIlN0YXJ0IGdpdCBndWkgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAiQXZ2aWEgZ2l0IGd1aSBuZWwgc290dG9tb2R1bG8iCisKKyM6IGdpdC1ndWkuc2g6MzM4OQogbXNnaWQgIlVuc3RhZ2UgSHVuayBGcm9tIENvbW1pdCIKIG1zZ3N0ciAiQW5udWxsYSBwcmVwYXJhemlvbmUgZGVsbGEgc2V6aW9uZSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKIAotIzogZ2l0LWd1aS5zaDozMTg0CisjOiBnaXQtZ3VpLnNoOjMzOTEKK21zZ2lkICJVbnN0YWdlIExpbmVzIEZyb20gQ29tbWl0IgorbXNnc3RyICJBbm51bGxhIHByZXBhcmF6aW9uZSBkZWxsZSBsaW5lZSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKKworIzogZ2l0LWd1aS5zaDozMzkzCiBtc2dpZCAiVW5zdGFnZSBMaW5lIEZyb20gQ29tbWl0IgogbXNnc3RyICJBbm51bGxhIHByZXBhcmF6aW9uZSBkZWxsYSBsaW5lYSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKIAotIzogZ2l0LWd1aS5zaDozMTg2CisjOiBnaXQtZ3VpLnNoOjMzOTYKIG1zZ2lkICJTdGFnZSBIdW5rIEZvciBDb21taXQiCiBtc2dzdHIgIlByZXBhcmEgc2V6aW9uZSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKIAotIzogZ2l0LWd1aS5zaDozMTg3CisjOiBnaXQtZ3VpLnNoOjMzOTgKK21zZ2lkICJTdGFnZSBMaW5lcyBGb3IgQ29tbWl0IgorbXNnc3RyICJQcmVwYXJhIGxpbmVlIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIgorCisjOiBnaXQtZ3VpLnNoOjM0MDAKIG1zZ2lkICJTdGFnZSBMaW5lIEZvciBDb21taXQiCiBtc2dzdHIgIlByZXBhcmEgbGluZWEgcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCiAKLSM6IGdpdC1ndWkuc2g6MzIxMAorIzogZ2l0LWd1aS5zaDozNDI0CiBtc2dpZCAiSW5pdGlhbGl6aW5nLi4uIgogbXNnc3RyICJJbml6aWFsaXp6YXppb25lLi4uIgogCi0jOiBnaXQtZ3VpLnNoOjMzMTUKKyM6IGdpdC1ndWkuc2g6MzU0MQogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICJQb3NzaWJsZSBlbnZpcm9ubWVudCBpc3N1ZXMgZXhpc3QuXG4iCkBAIC01MTgsNyArNTQ3LDcgQEAKICJkYSAlczpcbiIKICJcbiIKIAotIzogZ2l0LWd1aS5zaDozMzQ1CisjOiBnaXQtZ3VpLnNoOjM1NzAKIG1zZ2lkICIiCiAiXG4iCiAiVGhpcyBpcyBkdWUgdG8gYSBrbm93biBpc3N1ZSB3aXRoIHRoZVxuIgpAQCAtNTI4LDcgKzU1Nyw3IEBACiAiQ2nDsiDDqCBkb3Z1dG8gYSB1biBwcm9ibGVtYSBjb25vc2NpdXRvXG4iCiAiY2F1c2F0byBkYWxsJ2VzZWd1aWJpbGUgVGNsIGRpc3RyaWJ1aXRvIGRhIEN5Z3dpbi4iCiAKLSM6IGdpdC1ndWkuc2g6MzM1MAorIzogZ2l0LWd1aS5zaDozNTc1CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiIgogIlxuIgpAQCAtNjM3LDcgKzY2Niw3IEBACiBtc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgcGFyZW50IgogbXNnc3RyICJJbXBvc3NpYmlsZSB2aXN1YWxpenphcmUgbGEgcmV2aXNpb25lIHByZWNlZGVudGUiCiAKLSM6IGxpYi9ibGFtZS50Y2w6MTA5MSBsaWIvZGlmZi50Y2w6Mjk3CisjOiBsaWIvYmxhbWUudGNsOjEwOTEgbGliL2RpZmYudGNsOjMyMAogbXNnaWQgIkVycm9yIGxvYWRpbmcgZGlmZjoiCiBtc2dzdHIgIkVycm9yZSBuZWwgY2FyaWNhbWVudG8gZGVsbGUgZGlmZmVyZW56ZToiCiAKQEAgLTY2Myw3ICs2OTIsNyBAQAogCiAjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoyNyBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzUKICM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDozMiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzAgbGliL2Jyb3dzZXIudGNsOjI4MgotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NDQgbGliL2Nob29zZV9mb250LnRjbDo0MyBsaWIvbWVyZ2UudGNsOjE3MgorIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NzkgbGliL2Nob29zZV9mb250LnRjbDo0MyBsaWIvbWVyZ2UudGNsOjE3MgogIzogbGliL29wdGlvbi50Y2w6MTI1IGxpYi9yZW1vdGVfYWRkLnRjbDozMiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQyCiAjOiBsaWIvdG9vbHNfZGxnLnRjbDo0MCBsaWIvdG9vbHNfZGxnLnRjbDoyMDQgbGliL3Rvb2xzX2RsZy50Y2w6MzUyCiAjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMDgKQEAgLTY5NCw3ICs3MjMsNyBAQAogbXNnaWQgIkNyZWF0ZSBOZXcgQnJhbmNoIgogbXNnc3RyICJDcmVhIG51b3ZvIHJhbW8iCiAKLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDozMSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM3NworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjMxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzgxCiBtc2dpZCAiQ3JlYXRlIgogbXNnc3RyICJDcmVhIgogCkBAIC03MjYsNyArNzU1LDcgQEAKIG1zZ2lkICJGYXN0IEZvcndhcmQgT25seSIKIG1zZ3N0ciAiU29sbyBmYXN0IGZvcndhcmQiCiAKLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4NSBsaWIvY2hlY2tvdXRfb3AudGNsOjUzNgorIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjg1IGxpYi9jaGVja291dF9vcC50Y2w6NTcxCiBtc2dpZCAiUmVzZXQiCiBtc2dzdHIgIlJpcHJpc3RpbmEiCiAKQEAgLTc2OSwxNSArNzk4LDI1IEBACiBtc2dpZCAiRGVsZXRlIE9ubHkgSWYgTWVyZ2VkIEludG8iCiBtc2dzdHIgIkNhbmNlbGxhIHNvbG8gc2UgZnVzbyBjb24gdW4gYWx0cm8gcmFtbyIKIAotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjU0Ci1tc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSB0ZXN0LikiCi1tc2dzdHIgIlNlbXByZSAoTm9uIGVmZmV0dHVhcmUgdmVyaWZpY2hlIGRpIGZ1c2lvbmUpLiIKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1NCBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExOQorbXNnaWQgIkFsd2F5cyAoRG8gbm90IHBlcmZvcm0gbWVyZ2UgY2hlY2tzKSIKK21zZ3N0ciAiU2VtcHJlIChub24gdmVyaWZpY2FyZSBsZSBmdXNpb25pKSIKIAogIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjEwMwogIywgdGNsLWZvcm1hdAogbXNnaWQgIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOiIKIG1zZ3N0ciAiSSByYW1pIHNlZ3VlbnRpIG5vbiBzb25vIHN0YXRpIGZ1c2kgY29tcGxldGFtZW50ZSBpbiAlczoiCiAKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMTUgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMTcKK21zZ2lkICIiCisiUmVjb3ZlcmluZyBkZWxldGVkIGJyYW5jaGVzIGlzIGRpZmZpY3VsdC5cbiIKKyJcbiIKKyJEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyIKK21zZ3N0ciAiIgorIlJpcHJpc3RpbmFyZSByYW1pIGNhbmNlbGxhdGkgw6ggZGlmZmljaWxlLlxuIgorIlxuIgorIkNhbmNlbGxhcmUgaSByYW1pIHNlbGV6aW9uYXRpPyIKKwogIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjE0MQogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKQEAgLTgwNyw3ICs4NDYsNyBAQAogbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSBicmFuY2ggdG8gcmVuYW1lLiIKIG1zZ3N0ciAiU2NlZ2xpZXJlIHVuIHJhbW8gZGEgcmlub21pbmFyZS4iCiAKLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo5NiBsaWIvY2hlY2tvdXRfb3AudGNsOjIwMQorIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjk2IGxpYi9jaGVja291dF9vcC50Y2w6MjAyCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIgogbXNnc3RyICJJbCByYW1vICclcycgZXNpc3RlIGdpw6AuIgpAQCAtODM4LDM4ICs4NzcsMzggQEAKIG1zZ2lkICJCcm93c2UgQnJhbmNoIEZpbGVzIgogbXNnc3RyICJFc3Bsb3JhIGkgZmlsZSBkZWwgcmFtbyIKIAotIzogbGliL2Jyb3dzZXIudGNsOjI3OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM5NAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0ODAgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTEKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTk1CisjOiBsaWIvYnJvd3Nlci50Y2w6Mjc4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzk4CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5NworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDI4CiBtc2dpZCAiQnJvd3NlIgogbXNnc3RyICJFc3Bsb3JhIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjg0CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjg1CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiRmV0Y2hpbmcgJXMgZnJvbSAlcyIKIG1zZ3N0ciAiUmVjdXBlcm8gJXMgZGEgJXMiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MTMyCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjEzMwogIywgdGNsLWZvcm1hdAogbXNnaWQgImZhdGFsOiBDYW5ub3QgcmVzb2x2ZSAlcyIKIG1zZ3N0ciAiZXJyb3JlIGdyYXZlOiBpbXBvc3NpYmlsZSByaXNvbHZlcmUgJXMiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MTQ1IGxpYi9jb25zb2xlLnRjbDo4MSBsaWIvZGF0YWJhc2UudGNsOjMxCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE0NiBsaWIvY29uc29sZS50Y2w6ODEgbGliL2RhdGFiYXNlLnRjbDozMQogIzogbGliL3NzaGtleS50Y2w6NTMKIG1zZ2lkICJDbG9zZSIKIG1zZ3N0ciAiQ2hpdWRpIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE3NAorIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNzUKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJCcmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdC4iCiBtc2dzdHIgIklsIHJhbW8gJyVzJyBub24gZXNpc3RlLiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxOTMKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTk0CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBzaW1wbGlmaWVkIGdpdC1wdWxsIGZvciAnJXMnLiIKIG1zZ3N0ciAiSW1wb3NzaWJpbGUgY29uZmlndXJhcmUgZ2l0LXB1bGwgc2VtcGxpZmljYXRvIHBlciAnJXMnLiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyMjgKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjI5CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiIgogIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLlxuIgpAQCAtODgyLDIyICs5MjEsMjIgQEAKICJOb24gcHXDsiBlZmZldHR1YXJlIHVuICdmYXN0LWZvcndhcmQnIGEgJXMuXG4iCiAiRScgbmVjZXNzYXJpYSB1bmEgZnVzaW9uZS4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjQyCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI0MwogIywgdGNsLWZvcm1hdAogbXNnaWQgIk1lcmdlIHN0cmF0ZWd5ICclcycgbm90IHN1cHBvcnRlZC4iCiBtc2dzdHIgIkxhIHN0cmF0ZWdpYSBkaSBmdXNpb25lICclcycgbm9uIMOoIHN1cHBvcnRhdGEuIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI2MQorIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNjIKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJGYWlsZWQgdG8gdXBkYXRlICclcycuIgogbXNnc3RyICJJbXBvc3NpYmlsZSBhZ2dpb3JuYXJlICclcycuIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI3MworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNzQKIG1zZ2lkICJTdGFnaW5nIGFyZWEgKGluZGV4KSBpcyBhbHJlYWR5IGxvY2tlZC4iCiBtc2dzdHIgIiIKICJMJ2FyZWEgZGkgcHJlcGFyYXppb25lIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIChpbmRpY2UpIMOoIGdpw6AgYmxvY2NhdGEuIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI4OAorIzogbGliL2NoZWNrb3V0X29wLnRjbDoyODkKIG1zZ2lkICIiCiAiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCiAiXG4iCkBAIC05MTQsMzAgKzk1MywzMCBAQAogIlxuIgogIkxhIG51b3ZhIGFuYWxpc2kgY29taW5jZXLDoCBvcmEuXG4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ0CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NQogIywgdGNsLWZvcm1hdAogbXNnaWQgIlVwZGF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IHRvICclcycuLi4iCiBtc2dzdHIgIkFnZ2lvcm5hbWVudG8gZGVsbGEgZGlyZWN0b3J5IGRpIGxhdm9ybyBhICclcycgaW4gY29yc28uLi4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ1CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NgogbXNnaWQgImZpbGVzIGNoZWNrZWQgb3V0IgogbXNnc3RyICJmaWxlIHByZXNlbnRpIG5lbGxhIGRpcmVjdG9yeSBkaSBsYXZvcm8iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc1CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM3NgogIywgdGNsLWZvcm1hdAogbXNnaWQgIkFib3J0ZWQgY2hlY2tvdXQgb2YgJyVzJyAoZmlsZSBsZXZlbCBtZXJnaW5nIGlzIHJlcXVpcmVkKS4iCiBtc2dzdHIgIkF0dGl2YXppb25lIGRpICclcycgZmFsbGl0YSAocmljaGllc3RhIHVuYSBmdXNpb25lIGEgbGl2ZWxsbyBmaWxlKS4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc2CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM3NwogbXNnaWQgIkZpbGUgbGV2ZWwgbWVyZ2UgcmVxdWlyZWQuIgogbXNnc3RyICJFJyByaWNoaWVzdGEgdW5hIGZ1c2lvbmUgYSBsaXZlbGxvIGZpbGUuIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM4MAorIzogbGliL2NoZWNrb3V0X29wLnRjbDozODEKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJTdGF5aW5nIG9uIGJyYW5jaCAnJXMnLiIKIG1zZ3N0ciAiU2kgcmltYXJyw6Agc3VsIHJhbW8gJyVzJy4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NDUxCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjQ1MgogbXNnaWQgIiIKICJZb3UgYXJlIG5vIGxvbmdlciBvbiBhIGxvY2FsIGJyYW5jaC5cbiIKICJcbiIKQEAgLTk0OSwzMSArOTg4LDMxIEBACiAiU2Ugc2kgdnVvbGUgcmltYW5lcmUgc3UgdW4gcmFtbywgY3JlYXJuZSB1bm8gb3JhIGEgcGFydGlyZSBkYSAnUXVlc3RhICIKICJyZXZpc2lvbmUgYXR0aXZhIHN0YWNjYXRhJy4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NDY4IGxpYi9jaGVja291dF9vcC50Y2w6NDcyCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUwMyBsaWIvY2hlY2tvdXRfb3AudGNsOjUwNwogIywgdGNsLWZvcm1hdAogbXNnaWQgIkNoZWNrZWQgb3V0ICclcycuIgogbXNnc3RyICJBdHRpdmF6aW9uZSBkaSAnJXMnIGNvbXBsZXRhdGEuIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUwMAorIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MzUKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJSZXNldHRpbmcgJyVzJyB0byAnJXMnIHdpbGwgbG9zZSB0aGUgZm9sbG93aW5nIGNvbW1pdHM6IgogbXNnc3RyICIiCiAiUmlwcmlzdGluYXJlICclcycgYSAnJXMnIGNvbXBvcnRlcsOgIGxhIHBlcmRpdGEgZGVsbGUgc2VndWVudGkgcmV2aXNpb25pOiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MjIKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTU3CiBtc2dpZCAiUmVjb3ZlcmluZyBsb3N0IGNvbW1pdHMgbWF5IG5vdCBiZSBlYXN5LiIKIG1zZ3N0ciAiUmljb21wb3JyZSBsZSByZXZpc2lvbmkgcGVyZHV0ZSBwb3RyZWJiZSBub24gZXNzZXJlIHNlbXBsaWNlLiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MjcKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTYyCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiUmVzZXQgJyVzJz8iCiBtc2dzdHIgIlJpcHJpc3RpbmFyZSAnJXMnPyIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MzIgbGliL21lcmdlLnRjbDoxNjQgbGliL3Rvb2xzX2RsZy50Y2w6MzQzCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2NyBsaWIvbWVyZ2UudGNsOjE2NCBsaWIvdG9vbHNfZGxnLnRjbDozNDMKIG1zZ2lkICJWaXN1YWxpemUiCiBtc2dzdHIgIlZpc3VhbGl6emEiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NjAwCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjYzNQogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICJGYWlsZWQgdG8gc2V0IGN1cnJlbnQgYnJhbmNoLlxuIgpAQCAtMTAxOSw3ICsxMDU4LDcgQEAKIG1zZ2lkICJHaXQgR3VpIgogbXNnc3RyICJHaXQgR3VpIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzgyCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzg2CiBtc2dpZCAiQ3JlYXRlIE5ldyBSZXBvc2l0b3J5IgogbXNnc3RyICJDcmVhIG51b3ZvIGFyY2hpdmlvIgogCkBAIC0xMDI3LDcgKzEwNjYsNyBAQAogbXNnaWQgIk5ldy4uLiIKIG1zZ3N0ciAiTnVvdm8uLi4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDY1CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3MQogbXNnaWQgIkNsb25lIEV4aXN0aW5nIFJlcG9zaXRvcnkiCiBtc2dzdHIgIkNsb25hIGFyY2hpdmlvIGVzaXN0ZW50ZSIKIApAQCAtMTAzNSw3ICsxMDc0LDcgQEAKIG1zZ2lkICJDbG9uZS4uLiIKIG1zZ3N0ciAiQ2xvbmEuLi4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTEzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTgzCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTYKIG1zZ2lkICJPcGVuIEV4aXN0aW5nIFJlcG9zaXRvcnkiCiBtc2dzdHIgIkFwcmkgYXJjaGl2aW8gZXNpc3RlbnRlIgogCkBAIC0xMDUxLDE5OCArMTA5MCwxOTggQEAKIG1zZ2lkICJPcGVuIFJlY2VudCBSZXBvc2l0b3J5OiIKIG1zZ3N0ciAiQXByaSBhcmNoaXZpbyByZWNlbnRlOiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMDIgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMDkKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzE2CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMwNiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMxMworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMjAKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlcG9zaXRvcnkgJXM6IgogbXNnc3RyICJJbXBvc3NpYmlsZSBjcmVhcmUgbCdhcmNoaXZpbyAlczoiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzg3CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM5MQogbXNnaWQgIkRpcmVjdG9yeToiCiBtc2dzdHIgIkRpcmVjdG9yeToiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDE3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTQ0Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTcKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDIzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTUwCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNTIKIG1zZ2lkICJHaXQgUmVwb3NpdG9yeSIKIG1zZ3N0ciAiQXJjaGl2aW8gR2l0IgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0MgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NDgKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJEaXJlY3RvcnkgJXMgYWxyZWFkeSBleGlzdHMuIgogbXNnc3RyICJMYSBkaXJlY3RvcnkgJXMgZXNpc3RlIGdpw6AuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0NgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NTIKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJGaWxlICVzIGFscmVhZHkgZXhpc3RzLiIKIG1zZ3N0ciAiSWwgZmlsZSAlcyBlc2lzdGUgZ2nDoC4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDYwCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ2NgogbXNnaWQgIkNsb25lIgogbXNnc3RyICJDbG9uYSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NzMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDc5CiBtc2dpZCAiU291cmNlIExvY2F0aW9uOiIKIG1zZ3N0ciAiUG9zaXppb25lIHNvcmdlbnRlOiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0ODQKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDkwCiBtc2dpZCAiVGFyZ2V0IERpcmVjdG9yeToiCiBtc2dzdHIgIkRpcmVjdG9yeSBkaSBkZXN0aW5hemlvbmU6IgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5NgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDIKIG1zZ2lkICJDbG9uZSBUeXBlOiIKIG1zZ3N0ciAiVGlwbyBkaSBjbG9uZToiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAyCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwOAogbXNnaWQgIlN0YW5kYXJkIChGYXN0LCBTZW1pLVJlZHVuZGFudCwgSGFyZGxpbmtzKSIKIG1zZ3N0ciAiU3RhbmRhcmQgKHZlbG9jZSwgc2VtaS1yaWRvbmRhbnRlLCBjb24gaGFyZGxpbmspIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwOAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MTQKIG1zZ2lkICJGdWxsIENvcHkgKFNsb3dlciwgUmVkdW5kYW50IEJhY2t1cCkiCiBtc2dzdHIgIkNvcGlhIGNvbXBsZXRhIChwacO5IGxlbnRvLCBiYWNrdXAgcmlkb25kYW50ZSkiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTE0CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUyMAogbXNnaWQgIlNoYXJlZCAoRmFzdGVzdCwgTm90IFJlY29tbWVuZGVkLCBObyBCYWNrdXApIgogbXNnc3RyICJTaGFyZWQgKGlsIHBpw7kgdmVsb2NlLCBub24gcmFjY29tYW5kYXRvLCBuZXNzdW4gYmFja3VwKSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NTAgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTcKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzQzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODEzCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDMxCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU1NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYwMworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NDkgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MTkKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA1OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNjYKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJOb3QgYSBHaXQgcmVwb3NpdG9yeTogJXMiCiBtc2dzdHIgIiVzIG5vbiDDqCB1biBhcmNoaXZpbyBHaXQuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU4NgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTIKIG1zZ2lkICJTdGFuZGFyZCBvbmx5IGF2YWlsYWJsZSBmb3IgbG9jYWwgcmVwb3NpdG9yeS4iCiBtc2dzdHIgIlN0YW5kYXJkIMOoIGRpc3BvbmliaWxlIHNvbG8gcGVyIGFyY2hpdmkgbG9jYWxpLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTAKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTk2CiBtc2dpZCAiU2hhcmVkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKIG1zZ3N0ciAiU2hhcmVkIMOoIGRpc3BvbmliaWxlIHNvbG8gcGVyIGFyY2hpdmkgbG9jYWxpLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MTEKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjE3CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiTG9jYXRpb24gJXMgYWxyZWFkeSBleGlzdHMuIgogbXNnc3RyICJJbCBmaWxlL2RpcmVjdG9yeSAlcyBlc2lzdGUgZ2nDoC4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjIyCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYyOAogbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgb3JpZ2luIgogbXNnc3RyICJJbXBvc3NpYmlsZSBjb25maWd1cmFyZSBvcmlnaW4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjM0CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0MAogbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCiBtc2dzdHIgIkNhbGNvbG8gb2dnZXR0aSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MzUKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjQxCiBtc2dpZCAiYnVja2V0cyIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY1OQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NjUKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3RzL2luZm8vYWx0ZXJuYXRlczogJXMiCiBtc2dzdHIgIkltcG9zc2liaWxlIGNvcGlhcmUgb2dnZXR0aS9pbmZvL2FsdGVybmF0ZTogJXMiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Njk1CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcwMQogIywgdGNsLWZvcm1hdAogbXNnaWQgIk5vdGhpbmcgdG8gY2xvbmUgZnJvbSAlcy4iCiBtc2dzdHIgIk5pZW50ZSBkYSBjbG9uYXJlIGRhICVzLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2OTcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTEKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTIzCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcwMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjkKIG1zZ2lkICJUaGUgJ21hc3RlcicgYnJhbmNoIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4iCiBtc2dzdHIgIklsIHJhbW8gJ21hc3Rlcicgbm9uIMOoIHN0YXRvIGluaXppYWxpenphdG8uIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcxMAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MTYKIG1zZ2lkICJIYXJkbGlua3MgYXJlIHVuYXZhaWxhYmxlLiAgRmFsbGluZyBiYWNrIHRvIGNvcHlpbmcuIgogbXNnc3RyICJJbXBvc3NpYmlsZSB1dGlsaXp6YXJlIGdsaSBoYXJkbGluay4gU2kgcmljb3JyZXLDoCBhbGxhIGNvcGlhLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MjIKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzI4CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQ2xvbmluZyBmcm9tICVzIgogbXNnc3RyICJDbG9uYXppb25lIGRhICVzIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc1MworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NTkKIG1zZ2lkICJDb3B5aW5nIG9iamVjdHMiCiBtc2dzdHIgIkNvcGlhIGRlZ2xpIG9nZ2V0dGkiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzU0CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc2MAogbXNnaWQgIktpQiIKIG1zZ3N0ciAiS2lCIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc3OAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODQKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3Q6ICVzIgogbXNnc3RyICJJbXBvc3NpYmlsZSBjb3BpYXJlIG9nZ2V0dG86ICVzIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc4OAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTQKIG1zZ2lkICJMaW5raW5nIG9iamVjdHMiCiBtc2dzdHIgIkNvbGxlZ2FtZW50byBvZ2dldHRpIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc4OQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTUKIG1zZ2lkICJvYmplY3RzIgogbXNnc3RyICJvZ2dldHRpIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc5NworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MDMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJVbmFibGUgdG8gaGFyZGxpbmsgb2JqZWN0OiAlcyIKIG1zZ3N0ciAiSGFyZGxpbmsgaW1wb3NzaWJpbGUgc3VsbCdvZ2dldHRvOiAlcyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NTIKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODU4CiBtc2dpZCAiQ2Fubm90IGZldGNoIGJyYW5jaGVzIGFuZCBvYmplY3RzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKIG1zZ3N0ciAiIgogIkltcG9zc2liaWxlIHJlY3VwZXJhcmUgcmFtaSBlIG9nZ2V0dGkuIENvbnRyb2xsYXJlIGkgZGV0dGFnbGkgZm9ybml0aSBkYWxsYSAiCiAiY29uc29sZS4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODYzCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg2OQogbXNnaWQgIkNhbm5vdCBmZXRjaCB0YWdzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKIG1zZ3N0ciAiIgogIkltcG9zc2liaWxlIHJlY3VwZXJhcmUgbGUgZXRpY2hldHRlLiBDb250cm9sbGFyZSBpIGRldHRhZ2xpIGZvcm5pdGkgZGFsbGEgIgogImNvbnNvbGUuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg4NworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4OTMKIG1zZ2lkICJDYW5ub3QgZGV0ZXJtaW5lIEhFQUQuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgogbXNnc3RyICIiCiAiSW1wb3NzaWJpbGUgZGV0ZXJtaW5hcmUgSEVBRC4gQ29udHJvbGxhcmUgaSBkZXR0YWdsaSBmb3JuaXRpIGRhbGxhIGNvbnNvbGUuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg5NgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MDIKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJVbmFibGUgdG8gY2xlYW51cCAlcyIKIG1zZ3N0ciAiSW1wb3NzaWJpbGUgcmlwdWxpcmUgJXMiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTAyCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwOAogbXNnaWQgIkNsb25lIGZhaWxlZC4iCiBtc2dzdHIgIkNsb25hemlvbmUgbm9uIHJpdXNjaXRhLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MDkKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTE1CiBtc2dpZCAiTm8gZGVmYXVsdCBicmFuY2ggb2J0YWluZWQuIgogbXNnc3RyICJOb24gw6ggc3RhdG8gdHJvdmF0byB1biByYW1vIHByZWRlZmluaXRvLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjAKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTI2CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQ2Fubm90IHJlc29sdmUgJXMgYXMgYSBjb21taXQuIgogbXNnc3RyICJJbXBvc3NpYmlsZSByaXNvbHZlcmUgJXMgY29tZSB1bmEgcmV2aXNpb25lLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MzIKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTM4CiBtc2dpZCAiQ3JlYXRpbmcgd29ya2luZyBkaXJlY3RvcnkiCiBtc2dzdHIgIkNyZWF6aW9uZSBkaXJlY3RvcnkgZGkgbGF2b3JvIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzMyBsaWIvaW5kZXgudGNsOjY1IGxpYi9pbmRleC50Y2w6MTI4Ci0jOiBsaWIvaW5kZXgudGNsOjE5NgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MzkgbGliL2luZGV4LnRjbDo2NyBsaWIvaW5kZXgudGNsOjEzMAorIzogbGliL2luZGV4LnRjbDoxOTgKIG1zZ2lkICJmaWxlcyIKIG1zZ3N0ciAiZmlsZSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NjIKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTY4CiBtc2dpZCAiSW5pdGlhbCBmaWxlIGNoZWNrb3V0IGZhaWxlZC4iCiBtc2dzdHIgIkF0dGl2YXppb25lIGluaXppYWxlIG5vbiByaXVzY2l0YS4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTc4CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTEKIG1zZ2lkICJPcGVuIgogbXNnc3RyICJBcHJpIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk4OAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDIxCiBtc2dpZCAiUmVwb3NpdG9yeToiCiBtc2dzdHIgIkFyY2hpdmlvOiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDM3CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNzIKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJGYWlsZWQgdG8gb3BlbiByZXBvc2l0b3J5ICVzOiIKIG1zZ3N0ciAiSW1wb3NzaWJpbGUgYWNjZWRlcmUgYWxsJ2FyY2hpdmlvICVzOiIKQEAgLTEzMjYsNyArMTM2NSwxMiBAQAogbXNnaWQgIkludmFsaWQgR0lUX0NPTU1JVFRFUl9JREVOVDoiCiBtc2dzdHIgIkdJVF9DT01NSVRURVJfSURFTlQgbm9uIHZhbGlkYToiCiAKLSM6IGxpYi9jb21taXQudGNsOjEzMgorIzogbGliL2NvbW1pdC50Y2w6MTI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAid2FybmluZzogVGNsIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RpbmcgJyVzJy4iCittc2dzdHIgImF0dGVuemlvbmU6IFRjbCBub24gc3VwcG9ydGEgbGEgY29kaWZpY2EgJyVzJy4iCisKKyM6IGxpYi9jb21taXQudGNsOjE0OQogbXNnaWQgIiIKICJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKICJcbiIKQEAgLTEzNDMsNyArMTM4Nyw3IEBACiAiXG4iCiAiTGEgbnVvdmEgYW5hbGlzaSBjb21pbmNlcsOgIG9yYS5cbiIKIAotIzogbGliL2NvbW1pdC50Y2w6MTU1CisjOiBsaWIvY29tbWl0LnRjbDoxNzIKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiVW5tZXJnZWQgZmlsZXMgY2Fubm90IGJlIGNvbW1pdHRlZC5cbiIKQEAgLTEzNTYsNyArMTQwMCw3IEBACiAiSWwgZmlsZSAlcyBwcmVzZW50YSBkZWkgY29uZmxpdHRpLiBEZXZpIHJpc29sdmVybGkgZSBwcmVwYXJhcmUgaWwgZmlsZSBwZXIgIgogImNyZWFyZSB1bmEgbnVvdmEgcmV2aXNpb25lIHByaW1hIGRpIGVmZmV0dHVhcmUgcXVlc3RhIGF6aW9uZS5cbiIKIAotIzogbGliL2NvbW1pdC50Y2w6MTYzCisjOiBsaWIvY29tbWl0LnRjbDoxODAKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiVW5rbm93biBmaWxlIHN0YXRlICVzIGRldGVjdGVkLlxuIgpAQCAtMTM2Nyw3ICsxNDExLDcgQEAKICJcbiIKICJRdWVzdG8gcHJvZ3JhbW1hIG5vbiBwdcOyIGNyZWFyZSB1bmEgcmV2aXNpb25lIGNvbnRlbmVudGUgaWwgZmlsZSAlcy5cbiIKIAotIzogbGliL2NvbW1pdC50Y2w6MTcxCisjOiBsaWIvY29tbWl0LnRjbDoxODgKIG1zZ2lkICIiCiAiTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCiAiXG4iCkBAIC0xMzc4LDcgKzE0MjIsNyBAQAogIkRldmkgcHJlcGFyYXJlIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIGFsbWVubyAxIGZpbGUgcHJpbWEgZGkgZWZmZXR0dWFyZSAiCiAicXVlc3RhIG9wZXJhemlvbmUuXG4iCiAKLSM6IGxpYi9jb21taXQudGNsOjE4NgorIzogbGliL2NvbW1pdC50Y2w6MjAzCiBtc2dpZCAiIgogIlBsZWFzZSBzdXBwbHkgYSBjb21taXQgbWVzc2FnZS5cbiIKICJcbiIKQEAgLTEzOTYsNDUgKzE0NDAsNDAgQEAKICItIFNlY29uZGEgbGluZWE6IHZ1b3RhLlxuIgogIi0gVGVyemEgbGluZWE6IHNwaWVnYSBhIGNvc2Egc2VydmUgbGEgdHVhIG1vZGlmaWNhLlxuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyMTAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJ3YXJuaW5nOiBUY2wgZG9lcyBub3Qgc3VwcG9ydCBlbmNvZGluZyAnJXMnLiIKLW1zZ3N0ciAiYXR0ZW56aW9uZTogVGNsIG5vbiBzdXBwb3J0YSBsYSBjb2RpZmljYSAnJXMnLiIKLQotIzogbGliL2NvbW1pdC50Y2w6MjI2CisjOiBsaWIvY29tbWl0LnRjbDoyMzQKIG1zZ2lkICJDYWxsaW5nIHByZS1jb21taXQgaG9vay4uLiIKIG1zZ3N0ciAiQXZ2aW8gcHJlLWNvbW1pdCBob29rLi4uIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyNDEKKyM6IGxpYi9jb21taXQudGNsOjI0OQogbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmUtY29tbWl0IGhvb2suIgogbXNnc3RyICJSZXZpc2lvbmUgcmlmaXV0YXRhIGRhbCBwcmUtY29tbWl0IGhvb2suIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyNjQKKyM6IGxpYi9jb21taXQudGNsOjI3MgogbXNnaWQgIkNhbGxpbmcgY29tbWl0LW1zZyBob29rLi4uIgogbXNnc3RyICJBdnZpbyBjb21taXQtbXNnIGhvb2suLi4iCiAKLSM6IGxpYi9jb21taXQudGNsOjI3OQorIzogbGliL2NvbW1pdC50Y2w6Mjg3CiBtc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IGNvbW1pdC1tc2cgaG9vay4iCiBtc2dzdHIgIlJldmlzaW9uZSByaWZpdXRhdGEgZGFsIGNvbW1pdC1tc2cgaG9vay4iCiAKLSM6IGxpYi9jb21taXQudGNsOjI5MgorIzogbGliL2NvbW1pdC50Y2w6MzAwCiBtc2dpZCAiQ29tbWl0dGluZyBjaGFuZ2VzLi4uIgogbXNnc3RyICJBcmNoaXZpYXppb25lIG1vZGlmaWNoZS4uLiIKIAotIzogbGliL2NvbW1pdC50Y2w6MzA4CisjOiBsaWIvY29tbWl0LnRjbDozMTYKIG1zZ2lkICJ3cml0ZS10cmVlIGZhaWxlZDoiCiBtc2dzdHIgIndyaXRlLXRyZWUgbm9uIHJpdXNjaXRvOiIKIAotIzogbGliL2NvbW1pdC50Y2w6MzA5IGxpYi9jb21taXQudGNsOjM1MyBsaWIvY29tbWl0LnRjbDozNzMKKyM6IGxpYi9jb21taXQudGNsOjMxNyBsaWIvY29tbWl0LnRjbDozNjEgbGliL2NvbW1pdC50Y2w6MzgyCiBtc2dpZCAiQ29tbWl0IGZhaWxlZC4iCiBtc2dzdHIgIkltcG9zc2liaWxlIGNyZWFyZSB1bmEgbnVvdmEgcmV2aXNpb25lLiIKIAotIzogbGliL2NvbW1pdC50Y2w6MzI2CisjOiBsaWIvY29tbWl0LnRjbDozMzQKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJDb21taXQgJXMgYXBwZWFycyB0byBiZSBjb3JydXB0IgogbXNnc3RyICJMYSByZXZpc2lvbmUgJXMgc2VtYnJhIGVzc2VyZSBkYW5uZWdnaWF0YSIKIAotIzogbGliL2NvbW1pdC50Y2w6MzMxCisjOiBsaWIvY29tbWl0LnRjbDozMzkKIG1zZ2lkICIiCiAiTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCiAiXG4iCkBAIC0xNDQ4LDE5ICsxNDg3LDE5IEBACiAiXG4iCiAiU2kgcHJvY2VkZXLDoCBzdWJpdG8gYWQgdW5hIG51b3ZhIGFuYWxpc2kuXG4iCiAKLSM6IGxpYi9jb21taXQudGNsOjMzOAorIzogbGliL2NvbW1pdC50Y2w6MzQ2CiBtc2dpZCAiTm8gY2hhbmdlcyB0byBjb21taXQuIgogbXNnc3RyICJOZXNzdW5hIG1vZGlmaWNhIHBlciBsYSBudW92YSByZXZpc2lvbmUuIgogCi0jOiBsaWIvY29tbWl0LnRjbDozNTIKKyM6IGxpYi9jb21taXQudGNsOjM2MAogbXNnaWQgImNvbW1pdC10cmVlIGZhaWxlZDoiCiBtc2dzdHIgImNvbW1pdC10cmVlIG5vbiByaXVzY2l0bzoiCiAKLSM6IGxpYi9jb21taXQudGNsOjM3MgorIzogbGliL2NvbW1pdC50Y2w6MzgxCiBtc2dpZCAidXBkYXRlLXJlZiBmYWlsZWQ6IgogbXNnc3RyICJ1cGRhdGUtcmVmIG5vbiByaXVzY2l0bzoiCiAKLSM6IGxpYi9jb21taXQudGNsOjQ2MAorIzogbGliL2NvbW1pdC50Y2w6NDY5CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQ3JlYXRlZCBjb21taXQgJXM6ICVzIgogbXNnc3RyICJDcmVhdGEgcmV2aXNpb25lICVzOiAlcyIKQEAgLTE1MTMsMjAgKzE1NTIsMTkgQEAKIG1zZ2lkICJWZXJpZnlpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSB3aXRoIGZzY2stb2JqZWN0cyIKIG1zZ3N0ciAiVmVyaWZpY2EgZGVsbCdhcmNoaXZpbyBjb24gZnNjay1vYmplY3RzIGluIGNvcnNvIgogCi0jOiBsaWIvZGF0YWJhc2UudGNsOjEwOAorIzogbGliL2RhdGFiYXNlLnRjbDoxMDcKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiVGhpcyByZXBvc2l0b3J5IGN1cnJlbnRseSBoYXMgYXBwcm94aW1hdGVseSAlaSBsb29zZSBvYmplY3RzLlxuIgogIlxuIgogIlRvIG1haW50YWluIG9wdGltYWwgcGVyZm9ybWFuY2UgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgY29tcHJlc3MgIgotInRoZSBkYXRhYmFzZSB3aGVuIG1vcmUgdGhhbiAlaSBsb29zZSBvYmplY3RzIGV4aXN0LlxuIgorInRoZSBkYXRhYmFzZS5cbiIKICJcbiIKICJDb21wcmVzcyB0aGUgZGF0YWJhc2Ugbm93PyIKIG1zZ3N0ciAiIgogIlF1ZXN0byBhcmNoaXZpbyBhdHR1YWxtZW50ZSBoYSBjaXJjYSAlaSBvZ2dldHRpIHNsZWdhdGkuXG4iCiAiXG4iCi0iUGVyIG1hbnRlbmVyZSBidW9uZSBwcmVzdGF6aW9uaSBzaSByYWNjb21hbmRhIGRpIGNvbXByaW1lcmUgbCdhcmNoaXZpbyAiCi0icXVhbmRvIHNvbm8gcHJlc2VudGkgcGnDuSBkaSAlaSBvZ2dldHRpIHNsZWdhdGkuXG4iCisiUGVyIG1hbnRlbmVyZSBidW9uZSBwcmVzdGF6aW9uaSBzaSByYWNjb21hbmRhIGRpIGNvbXByaW1lcmUgbCdhcmNoaXZpby5cbiIKICJcbiIKICJDb21wcmltZXJlIGwnYXJjaGl2aW8gb3JhPyIKIApAQCAtMTUzNSw3ICsxNTczLDcgQEAKIG1zZ2lkICJJbnZhbGlkIGRhdGUgZnJvbSBHaXQ6ICVzIgogbXNnc3RyICJHaXQgaGEgcmVzdGl0dWl0byB1bmEgZGF0YSBub24gdmFsaWRhOiAlcyIKIAotIzogbGliL2RpZmYudGNsOjU5CisjOiBsaWIvZGlmZi50Y2w6NjQKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiTm8gZGlmZmVyZW5jZXMgZGV0ZWN0ZWQuXG4iCkBAIC0xNTU4LDEyICsxNTk2LDEyIEBACiAiU2kgcHJvY2VkZXLDoCBhdXRvbWF0aWNhbWVudGUgYWQgdW5hIG51b3ZhIGFuYWxpc2kgcGVyIHRyb3ZhcmUgYWx0cmkgZmlsZSBjaGUgIgogInBvdHJlYmJlcm8gYXZlcmUgbG8gc3Rlc3NvIHN0YXRvLiIKIAotIzogbGliL2RpZmYudGNsOjk5CisjOiBsaWIvZGlmZi50Y2w6MTA0CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiTG9hZGluZyBkaWZmIG9mICVzLi4uIgogbXNnc3RyICJDYXJpY2FtZW50byBkZWxsZSBkaWZmZXJlbnplIGRpICVzLi4uIgogCi0jOiBsaWIvZGlmZi50Y2w6MTIwCisjOiBsaWIvZGlmZi50Y2w6MTI1CiBtc2dpZCAiIgogIkxPQ0FMOiBkZWxldGVkXG4iCiAiUkVNT1RFOlxuIgpAQCAtMTU3MSw3ICsxNjA5LDcgQEAKICJMT0NBTEU6IGNhbmNlbGxhdG9cbiIKICJSRU1PVE86XG4iCiAKLSM6IGxpYi9kaWZmLnRjbDoxMjUKKyM6IGxpYi9kaWZmLnRjbDoxMzAKIG1zZ2lkICIiCiAiUkVNT1RFOiBkZWxldGVkXG4iCiAiTE9DQUw6XG4iCkBAIC0xNTc5LDMyICsxNjE3LDMyIEBACiAiUkVNT1RPOiBjYW5jZWxsYXRvXG4iCiAiTE9DQUxFOlxuIgogCi0jOiBsaWIvZGlmZi50Y2w6MTMyCisjOiBsaWIvZGlmZi50Y2w6MTM3CiBtc2dpZCAiTE9DQUw6XG4iCiBtc2dzdHIgIkxPQ0FMRTpcbiIKIAotIzogbGliL2RpZmYudGNsOjEzNQorIzogbGliL2RpZmYudGNsOjE0MAogbXNnaWQgIlJFTU9URTpcbiIKIG1zZ3N0ciAiUkVNT1RPOlxuIgogCi0jOiBsaWIvZGlmZi50Y2w6MTk3IGxpYi9kaWZmLnRjbDoyOTYKKyM6IGxpYi9kaWZmLnRjbDoyMDIgbGliL2RpZmYudGNsOjMxOQogIywgdGNsLWZvcm1hdAogbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5ICVzIgogbXNnc3RyICJJbXBvc3NpYmlsZSB2aXN1YWxpenphcmUgJXMiCiAKLSM6IGxpYi9kaWZmLnRjbDoxOTgKKyM6IGxpYi9kaWZmLnRjbDoyMDMKIG1zZ2lkICJFcnJvciBsb2FkaW5nIGZpbGU6IgogbXNnc3RyICJFcnJvcmUgbmVsIGNhcmljYW1lbnRvIGRlbCBmaWxlOiIKIAotIzogbGliL2RpZmYudGNsOjIwNQorIzogbGliL2RpZmYudGNsOjIxMAogbXNnaWQgIkdpdCBSZXBvc2l0b3J5IChzdWJwcm9qZWN0KSIKIG1zZ3N0ciAiQXJjaGl2aW8gR2l0IChzb3R0b3Byb2dldHRvKSIKIAotIzogbGliL2RpZmYudGNsOjIxNworIzogbGliL2RpZmYudGNsOjIyMgogbXNnaWQgIiogQmluYXJ5IGZpbGUgKG5vdCBzaG93aW5nIGNvbnRlbnQpLiIKIG1zZ3N0ciAiKiBGaWxlIGJpbmFyaW8gKGlsIGNvbnRlbnV0byBub24gc2Fyw6AgbW9zdHJhdG8pLiIKIAotIzogbGliL2RpZmYudGNsOjIyMgorIzogbGliL2RpZmYudGNsOjIyNwogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICIqIFVudHJhY2tlZCBmaWxlIGlzICVkIGJ5dGVzLlxuIgpAQCAtMTYxMyw3ICsxNjUxLDcgQEAKICIqIElsIGZpbGUgbm9uIHRyYWNjaWF0byDDqCBkaSAlZCBieXRlLlxuIgogIiogU2FyYW5ubyB2aXN1YWxpenphdGkgc29sbyBpIHByaW1pICVkIGJ5dGUuXG4iCiAKLSM6IGxpYi9kaWZmLnRjbDoyMjgKKyM6IGxpYi9kaWZmLnRjbDoyMzMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiXG4iCkBAIC0xNjI0LDE5ICsxNjYyLDE5IEBACiAiKiAlcyBub24gdmlzdWFsaXp6YSBjb21wbGV0YW1lbnRlIHF1ZXN0byBmaWxlIG5vbiB0cmFjY2lhdG8uXG4iCiAiKiBQZXIgdmlzdWFsaXp6YXJlIGlsIGZpbGUgY29tcGxldG8sIHVzYXJlIHVuIHByb2dyYW1tYSBlc3Rlcm5vLlxuIgogCi0jOiBsaWIvZGlmZi50Y2w6NDM2CisjOiBsaWIvZGlmZi50Y2w6NDgyCiBtc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCiBtc2dzdHIgIkltcG9zc2liaWxlIHJpbXVvdmVyZSBsYSBzZXppb25lIHNjZWx0YSBkYWxsYSBudW92YSByZXZpc2lvbmUuIgogCi0jOiBsaWIvZGlmZi50Y2w6NDQzCisjOiBsaWIvZGlmZi50Y2w6NDg5CiBtc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGh1bmsuIgogbXNnc3RyICJJbXBvc3NpYmlsZSBwcmVwYXJhcmUgbGEgc2V6aW9uZSBzY2VsdGEgcGVyIHVuYSBudW92YSByZXZpc2lvbmUuIgogCi0jOiBsaWIvZGlmZi50Y2w6NTA5CisjOiBsaWIvZGlmZi50Y2w6NTY4CiBtc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCiBtc2dzdHIgIkltcG9zc2liaWxlIHJpbXVvdmVyZSBsYSByaWdhIHNjZWx0YSBkYWxsYSBudW92YSByZXZpc2lvbmUuIgogCi0jOiBsaWIvZGlmZi50Y2w6NTE3CisjOiBsaWIvZGlmZi50Y2w6NTc2CiBtc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGxpbmUuIgogbXNnc3RyICJJbXBvc3NpYmlsZSBwcmVwYXJhcmUgbGEgcmlnYSBzY2VsdGEgcGVyIHVuYSBudW92YSByZXZpc2lvbmUuIgogCkBAIC0xNjc0LDcgKzE3MTIsNyBAQAogbXNnaWQgIkluZGV4IEVycm9yIgogbXNnc3RyICJFcnJvcmUgbmVsbCdpbmRpY2UiCiAKLSM6IGxpYi9pbmRleC50Y2w6MjEKKyM6IGxpYi9pbmRleC50Y2w6MTcKIG1zZ2lkICIiCiAiVXBkYXRpbmcgdGhlIEdpdCBpbmRleCBmYWlsZWQuICBBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byAiCiAicmVzeW5jaHJvbml6ZSBnaXQtZ3VpLiIKQEAgLTE2ODIsNyArMTcyMCw3IEBACiAiSW1wb3NzaWJpbGUgYWdnaW9ybmFyZSBsJ2luZGljZS4gT3JhIHNhcsOgIGF2dmlhdGEgdW5hIG51b3ZhIGFuYWxpc2kgY2hlICIKICJhZ2dpb3JuZXLDoCBnaXQtZ3VpLiIKIAotIzogbGliL2luZGV4LnRjbDoyNworIzogbGliL2luZGV4LnRjbDoyOAogbXNnaWQgIkNvbnRpbnVlIgogbXNnc3RyICJDb250aW51YSIKIApAQCAtMTY5MCw0NSArMTcyOCw0NSBAQAogbXNnaWQgIlVubG9jayBJbmRleCIKIG1zZ3N0ciAiU2Jsb2NjYSBsJ2FjY2Vzc28gYWxsJ2luZGljZSIKIAotIzogbGliL2luZGV4LnRjbDoyODcKKyM6IGxpYi9pbmRleC50Y2w6Mjg5CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVW5zdGFnaW5nICVzIGZyb20gY29tbWl0IgogbXNnc3RyICIlcyBub24gZmFyw6AgcGFydGUgZGVsbGEgcHJvc3NpbWEgcmV2aXNpb25lIgogCi0jOiBsaWIvaW5kZXgudGNsOjMyNgorIzogbGliL2luZGV4LnRjbDozMjgKIG1zZ2lkICJSZWFkeSB0byBjb21taXQuIgogbXNnc3RyICJQcm9udG8gcGVyIGNyZWFyZSB1bmEgbnVvdmEgcmV2aXNpb25lLiIKIAotIzogbGliL2luZGV4LnRjbDozMzkKKyM6IGxpYi9pbmRleC50Y2w6MzQxCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQWRkaW5nICVzIgogbXNnc3RyICJBZ2dpdW50YSBkaSAlcyBpbiBjb3JzbyIKIAotIzogbGliL2luZGV4LnRjbDozOTYKKyM6IGxpYi9pbmRleC50Y2w6Mzk4CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gZmlsZSAlcz8iCiBtc2dzdHIgIkFubnVsbGFyZSBsZSBtb2RpZmljaGUgbmVsIGZpbGUgJXM/IgogCi0jOiBsaWIvaW5kZXgudGNsOjM5OAorIzogbGliL2luZGV4LnRjbDo0MDAKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiB0aGVzZSAlaSBmaWxlcz8iCiBtc2dzdHIgIkFubnVsbGFyZSBsZSBtb2RpZmljaGUgaW4gcXVlc3RpICVpIGZpbGU/IgogCi0jOiBsaWIvaW5kZXgudGNsOjQwNgorIzogbGliL2luZGV4LnRjbDo0MDgKIG1zZ2lkICJBbnkgdW5zdGFnZWQgY2hhbmdlcyB3aWxsIGJlIHBlcm1hbmVudGx5IGxvc3QgYnkgdGhlIHJldmVydC4iCiBtc2dzdHIgIiIKICJUdXR0ZSBsZSBtb2RpZmljaGUgbm9uIHByZXBhcmF0ZSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSBzYXJhbm5vIHBlcnNlIHBlciAiCiAic2VtcHJlLiIKIAotIzogbGliL2luZGV4LnRjbDo0MDkKKyM6IGxpYi9pbmRleC50Y2w6NDExCiBtc2dpZCAiRG8gTm90aGluZyIKIG1zZ3N0ciAiTm9uIGZhcmUgbmllbnRlIgogCi0jOiBsaWIvaW5kZXgudGNsOjQyNworIzogbGliL2luZGV4LnRjbDo0MjkKIG1zZ2lkICJSZXZlcnRpbmcgc2VsZWN0ZWQgZmlsZXMiCiBtc2dzdHIgIkFubnVsbG8gbGUgbW9kaWZpY2hlIG5laSBmaWxlIHNlbGV6aW9uYXRpIgogCi0jOiBsaWIvaW5kZXgudGNsOjQzMQorIzogbGliL2luZGV4LnRjbDo0MzMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJSZXZlcnRpbmcgJXMiCiBtc2dzdHIgIkFubnVsbG8gbGUgbW9kaWZpY2hlIGluICVzIgpAQCAtMjIxNSwxMCArMjI1Myw2IEBACiBtc2dpZCAiTWVyZ2VkIEludG86IgogbXNnc3RyICJGdXNvIGluOiIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTkKLW1zZ2lkICJBbHdheXMgKERvIG5vdCBwZXJmb3JtIG1lcmdlIGNoZWNrcykiCi1tc2dzdHIgIlNlbXByZSAobm9uIHZlcmlmaWNhcmUgbGUgZnVzaW9uaSkiCi0KICM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTUyCiBtc2dpZCAiQSBicmFuY2ggaXMgcmVxdWlyZWQgZm9yICdNZXJnZWQgSW50bycuIgogbXNnc3RyICJTaSByaWNoaWVkZSB1biByYW1vIHBlciAnRnVzbyBpbicuIgpAQCAtMjI0NywyNiArMjI4MSwxNiBAQAogbXNnaWQgIlBsZWFzZSBzZWxlY3Qgb25lIG9yIG1vcmUgYnJhbmNoZXMgdG8gZGVsZXRlLiIKIG1zZ3N0ciAiU2NlZ2xpZXJlIHVubyBvIHBpw7kgcmFtaSBkYSBjYW5jZWxsYXJlLiIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMTYKLW1zZ2lkICIiCi0iUmVjb3ZlcmluZyBkZWxldGVkIGJyYW5jaGVzIGlzIGRpZmZpY3VsdC5cbiIKLSJcbiIKLSJEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyIKLW1zZ3N0ciAiIgotIlJpY29tcG9ycmUgcmFtaSBjYW5jZWxsYXRpIMOoIGRpZmZpY2lsZS5cbiIKLSJcbiIKLSJDYW5jZWxsYXJlIGkgcmFtaSBzZWxlemlvbmF0aT8iCi0KICM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjI2CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiRGVsZXRpbmcgYnJhbmNoZXMgZnJvbSAlcyIKIG1zZ3N0ciAiQ2FuY2VsbGF6aW9uZSByYW1pIGRhICVzIgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI4NgorIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOTIKIG1zZ2lkICJObyByZXBvc2l0b3J5IHNlbGVjdGVkLiIKIG1zZ3N0ciAiTmVzc3VuIGFyY2hpdmlvIHNlbGV6aW9uYXRvLiIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOTEKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6Mjk3CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiU2Nhbm5pbmcgJXMuLi4iCiBtc2dzdHIgIkFuYWxpc2kgaW4gY29yc28gJXMuLi4iCkBAIC0yMjg3LDExICsyMzExLDExIEBACiBtc2dpZCAiQ2FzZS1TZW5zaXRpdmUiCiBtc2dzdHIgIkRpc3Rpbmd1aSBtYWl1c2NvbGUiCiAKLSM6IGxpYi9zaG9ydGN1dC50Y2w6MjAgbGliL3Nob3J0Y3V0LnRjbDo2MQorIzogbGliL3Nob3J0Y3V0LnRjbDoyMSBsaWIvc2hvcnRjdXQudGNsOjYyCiBtc2dpZCAiQ2Fubm90IHdyaXRlIHNob3J0Y3V0OiIKIG1zZ3N0ciAiSW1wb3NzaWJpbGUgc2NyaXZlcmUgc2hvcnRjdXQ6IgogCi0jOiBsaWIvc2hvcnRjdXQudGNsOjEzNgorIzogbGliL3Nob3J0Y3V0LnRjbDoxMzcKIG1zZ2lkICJDYW5ub3Qgd3JpdGUgaWNvbjoiCiBtc2dzdHIgIkltcG9zc2liaWxlIHNjcml2ZXJlIGljb25hOiIKIApAQCAtMjM5OSw3ICsyNDIzLDcgQEAKICM6IGxpYi90b29scy50Y2w6MTEwCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVG9vbDogJXMiCi1tc2dzdHIgIlN0cnVtZW50bzogJXMiCittc2dzdHIgIkFjY2Vzc29yaW86ICVzIgogCiAjOiBsaWIvdG9vbHMudGNsOjExMQogIywgdGNsLWZvcm1hdApAQCAtMjQxOCw3ICsyNDQyLDcgQEAKIAogIzogbGliL3Rvb2xzX2RsZy50Y2w6MjIKIG1zZ2lkICJBZGQgVG9vbCIKLW1zZ3N0ciAiQWdnaXVuZ2kgc3RydW1lbnRvIgorbXNnc3RyICJBZ2dpdW5naSBhY2Nlc3NvcmlvIgogCiAjOiBsaWIvdG9vbHNfZGxnLnRjbDoyOAogbXNnaWQgIkFkZCBOZXcgVG9vbCBDb21tYW5kIgpAQCAtMjQzMCw3ICsyNDU0LDcgQEAKIAogIzogbGliL3Rvb2xzX2RsZy50Y2w6NDUKIG1zZ2lkICJUb29sIERldGFpbHMiCi1tc2dzdHIgIkRldHRhZ2xpIHN1bGxvIHN0cnVtZW50byIKK21zZ3N0ciAiRGV0dGFnbGkgc3VsbCdhY2Nlc3NvcmlvIgogCiAjOiBsaWIvdG9vbHNfZGxnLnRjbDo0OAogbXNnaWQgIlVzZSAnLycgc2VwYXJhdG9ycyB0byBjcmVhdGUgYSBzdWJtZW51IHRyZWU6IgpAQCAtMjQ2MiwxMiArMjQ4NiwxMiBAQAogCiAjOiBsaWIvdG9vbHNfZGxnLnRjbDoxMjEKIG1zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgbmFtZSBmb3IgdGhlIHRvb2wuIgotbXNnc3RyICJCaXNvZ25hIGRhcmUgdW4gbm9tZSBhbGxvIHN0cnVtZW50by4iCittc2dzdHIgIkJpc29nbmEgZGFyZSB1biBub21lIGFsbCdhY2Nlc3NvcmlvLiIKIAogIzogbGliL3Rvb2xzX2RsZy50Y2w6MTI5CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVG9vbCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAiTG8gc3RydW1lbnRvICclcycgZXNpc3RlIGdpw6AuIgorbXNnc3RyICJMJ2FjY2Vzc29yaW8gJyVzJyBlc2lzdGUgZ2nDoC4iCiAKICM6IGxpYi90b29sc19kbGcudGNsOjE1MQogIywgdGNsLWZvcm1hdApAQCAtMjQ3NSwxNyArMjQ5OSwxNyBAQAogIkNvdWxkIG5vdCBhZGQgdG9vbDpcbiIKICIlcyIKIG1zZ3N0ciAiIgotIkltcG9zc2liaWxlIGFnZ2l1bmdlcmUgbG8gc3RydW1lbnRvOlxuIgorIkltcG9zc2liaWxlIGFnZ2l1bmdlcmUgbCdhY2Nlc3NvcmlvOlxuIgogIlxuIgogIiVzIgogCiAjOiBsaWIvdG9vbHNfZGxnLnRjbDoxOTAKIG1zZ2lkICJSZW1vdmUgVG9vbCIKLW1zZ3N0ciAiUmltdW92aSBzdHJ1bWVudG8iCittc2dzdHIgIlJpbXVvdmkgYWNjZXNzb3JpbyIKIAogIzogbGliL3Rvb2xzX2RsZy50Y2w6MTk2CiBtc2dpZCAiUmVtb3ZlIFRvb2wgQ29tbWFuZHMiCi1tc2dzdHIgIlJpbXVvdmkgaSBjb21hbmRpIGRlbGxvIHN0cnVtZW50byIKK21zZ3N0ciAiUmltdW92aSBpIGNvbWFuZGkgYWNjZXNzb3JpIgogCiAjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMDAKIG1zZ2lkICJSZW1vdmUiCkBAIC0yNDkzLDcgKzI1MTcsNyBAQAogCiAjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMzYKIG1zZ2lkICIoQmx1ZSBkZW5vdGVzIHJlcG9zaXRvcnktbG9jYWwgdG9vbHMpIgotbXNnc3RyICIoSWwgY29sb3JlIGJsdSBpbmRpY2Egc3RydW1lbnRpIHBlciBsJ2FyY2hpdmlvIGxvY2FsZSkiCittc2dzdHIgIihJbCBjb2xvcmUgYmx1IGluZGljYSBhY2Nlc3NvcmkgcGVyIGwnYXJjaGl2aW8gbG9jYWxlKSIKIAogIzogbGliL3Rvb2xzX2RsZy50Y2w6Mjk3CiAjLCB0Y2wtZm9ybWF0CmRpZmYgLS1naXQgYS9naXQtZ3VpL3BvL2phLnBvIGIvZ2l0LWd1aS9wby9qYS5wbwppbmRleCA2M2M0Njk1Li4xNTAxNzk4IDEwMDY0NAotLS0gYS9naXQtZ3VpL3BvL2phLnBvCisrKyBiL2dpdC1ndWkvcG8vamEucG8KQEAgLTMsNDYgKzMsNDUgQEAKICMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdC1ndWkgcGFja2FnZS4KICMg44GX44KJ44GE44GXIOOBquOBquOBkyA8bmFuYWtvM0BibHVlYm90dGxlLmNvbT4sIDIwMDcuCiAjCi0jLCBmdXp6eQogbXNnaWQgIiIKIG1zZ3N0ciAiIgogIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0LWd1aVxuIgogIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwOC0xMi0wOCAwODozMS0wODAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAwOC0xMi0wOSAwNjoyNyswOTAwXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTAtMDEtMjYgMTU6NDctMDgwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTAtMDItMDIgMTk6MDMrMDkwMFxuIgogIkxhc3QtVHJhbnNsYXRvcjog44GX44KJ44GE44GXIOOBquOBquOBkyA8bmFuYWtvM0BsYXZhYml0LmNvbT5cbiIKICJMYW5ndWFnZS1UZWFtOiBKYXBhbmVzZVxuIgogIk1JTUUtVmVyc2lvbjogMS4wXG4iCiAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCiAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgogCi0jOiBnaXQtZ3VpLnNoOjQxIGdpdC1ndWkuc2g6NzM3IGdpdC1ndWkuc2g6NzUxIGdpdC1ndWkuc2g6NzY0IGdpdC1ndWkuc2g6ODQ3Ci0jOiBnaXQtZ3VpLnNoOjg2NgorIzogZ2l0LWd1aS5zaDo0MSBnaXQtZ3VpLnNoOjc5MyBnaXQtZ3VpLnNoOjgwNyBnaXQtZ3VpLnNoOjgyMCBnaXQtZ3VpLnNoOjkwMworIzogZ2l0LWd1aS5zaDo5MjIKIG1zZ2lkICJnaXQtZ3VpOiBmYXRhbCBlcnJvciIKIG1zZ3N0ciAiZ2l0LWd1aTog6Ie05ZG955qE44Gq44Ko44Op44O8IgogCi0jOiBnaXQtZ3VpLnNoOjY4OQorIzogZ2l0LWd1aS5zaDo3NDMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJJbnZhbGlkIGZvbnQgc3BlY2lmaWVkIGluICVzOiIKIG1zZ3N0ciAiJXMg44Gr54Sh5Yq544Gq44OV44Kp44Oz44OI44GM5oyH5a6a44GV44KM44Gm44GE44G+44GZOiIKIAotIzogZ2l0LWd1aS5zaDo3MjMKKyM6IGdpdC1ndWkuc2g6Nzc5CiBtc2dpZCAiTWFpbiBGb250IgogbXNnc3RyICLkuLvjg5Xjgqnjg7Pjg4giCiAKLSM6IGdpdC1ndWkuc2g6NzI0CisjOiBnaXQtZ3VpLnNoOjc4MAogbXNnaWQgIkRpZmYvQ29uc29sZSBGb250IgogbXNnc3RyICJkaWZmL+OCs+ODs+OCveODvOODq+ODu+ODleOCqeODs+ODiCIKIAotIzogZ2l0LWd1aS5zaDo3MzgKKyM6IGdpdC1ndWkuc2g6Nzk0CiBtc2dpZCAiQ2Fubm90IGZpbmQgZ2l0IGluIFBBVEguIgogbXNnc3RyICJQQVRIIOS4reOBqyBnaXQg44GM6KaL44Gk44GL44KK44G+44Gb44KTIgogCi0jOiBnaXQtZ3VpLnNoOjc2NQorIzogZ2l0LWd1aS5zaDo4MjEKIG1zZ2lkICJDYW5ub3QgcGFyc2UgR2l0IHZlcnNpb24gc3RyaW5nOiIKIG1zZ3N0ciAiR2l0IOODkOODvOOCuOODp+ODs+WQjeOBjOeQhuino+OBp+OBjeOBvuOBm+OCkzoiCiAKLSM6IGdpdC1ndWkuc2g6NzgzCisjOiBnaXQtZ3VpLnNoOjgzOQogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICJHaXQgdmVyc2lvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiIKQEAgLTYxLDQ0NiArNjAsNDc1IEBACiAiXG4iCiAiJyVzJyDjga/jg5Djg7zjgrjjg6fjg7MgMS41LjAg44Go5oCd44Gj44Gm6Imv44GE44Gn44GZ44GL77yfXG4iCiAKLSM6IGdpdC1ndWkuc2g6MTA2MgorIzogZ2l0LWd1aS5zaDoxMTI4CiBtc2dpZCAiR2l0IGRpcmVjdG9yeSBub3QgZm91bmQ6IgogbXNnc3RyICJHaXQg44OH44Kj44Os44Kv44OI44Oq44GM6KaL44Gk44GL44KK44G+44Gb44KTOiIKIAotIzogZ2l0LWd1aS5zaDoxMDY5CisjOiBnaXQtZ3VpLnNoOjExNDYKIG1zZ2lkICJDYW5ub3QgbW92ZSB0byB0b3Agb2Ygd29ya2luZyBkaXJlY3Rvcnk6IgogbXNnc3RyICLkvZzmpa3jg4fjgqPjg6zjgq/jg4jjg6rjga7mnIDkuIrkvY3jgavnp7vli5XjgafjgY3jgb7jgZvjgpMiCiAKLSM6IGdpdC1ndWkuc2g6MTA3NgotbXNnaWQgIkNhbm5vdCB1c2UgZnVubnkgLmdpdCBkaXJlY3Rvcnk6IgotbXNnc3RyICLlpInjgaogLmdpdCDjg4fjgqPjg6zjgq/jg4jjg6rjga/kvb/jgYjjgb7jgZvjgpMiCisjOiBnaXQtZ3VpLnNoOjExNTQKK21zZ2lkICJDYW5ub3QgdXNlIGJhcmUgcmVwb3NpdG9yeToiCittc2dzdHIgIuijuOOBruODquODneOCuOODiOODquOBr+S9v+OBiOOBvuOBm+OCkzoiCiAKLSM6IGdpdC1ndWkuc2g6MTA4MQorIzogZ2l0LWd1aS5zaDoxMTYyCiBtc2dpZCAiTm8gd29ya2luZyBkaXJlY3RvcnkiCiBtc2dzdHIgIuS9nOalreODh+OCo+ODrOOCr+ODiOODquOBjOOBguOCiuOBvuOBm+OCkyIKIAotIzogZ2l0LWd1aS5zaDoxMjQ3IGxpYi9jaGVja291dF9vcC50Y2w6MzA1CisjOiBnaXQtZ3VpLnNoOjEzMzQgbGliL2NoZWNrb3V0X29wLnRjbDozMDYKIG1zZ2lkICJSZWZyZXNoaW5nIGZpbGUgc3RhdHVzLi4uIgogbXNnc3RyICLjg5XjgqHjgqTjg6vnirbmhYvjgpLmm7TmlrDjgZfjgabjgYTjgb7jgZnigKYiCiAKLSM6IGdpdC1ndWkuc2g6MTMwMworIzogZ2l0LWd1aS5zaDoxMzkwCiBtc2dpZCAiU2Nhbm5pbmcgZm9yIG1vZGlmaWVkIGZpbGVzIC4uLiIKIG1zZ3N0ciAi5aSJ5pu044GV44KM44Gf44OV44Kh44Kk44Or44KS44K544Kt44Oj44Oz44GX44Gm44GE44G+44GZ4oCmIgogCi0jOiBnaXQtZ3VpLnNoOjEzNjcKKyM6IGdpdC1ndWkuc2g6MTQ1NAogbXNnaWQgIkNhbGxpbmcgcHJlcGFyZS1jb21taXQtbXNnIGhvb2suLi4iCiBtc2dzdHIgInByZXBhcmUtY29tbWl0LW1zZyDjg5Xjg4Pjgq/jgpLlrp/ooYzkuK3jg7vjg7vjg7siCiAKLSM6IGdpdC1ndWkuc2g6MTM4NAorIzogZ2l0LWd1aS5zaDoxNDcxCiBtc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZXBhcmUtY29tbWl0LW1zZyBob29rLiIKIG1zZ3N0ciAicHJlcGFyZS1jb21taXQtbXNnIOODleODg+OCr+OBjOOCs+ODn+ODg+ODiOOCkuaLkuWQpuOBl+OBvuOBl+OBnyIKIAotIzogZ2l0LWd1aS5zaDoxNTQyIGxpYi9icm93c2VyLnRjbDoyNDYKKyM6IGdpdC1ndWkuc2g6MTYyOSBsaWIvYnJvd3Nlci50Y2w6MjQ2CiBtc2dpZCAiUmVhZHkuIgogbXNnc3RyICLmupblgpnlrozkuoYiCiAKLSM6IGdpdC1ndWkuc2g6MTgxOQorIzogZ2l0LWd1aS5zaDoxNzg3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRGlzcGxheWluZyBvbmx5ICVzIG9mICVzIGZpbGVzLiIKK21zZ3N0ciAi5YWo5L2T44GnJXPlgIvjga7lhoXjga4lc+ODleOCoeOCpOODq+OBoOOBkeihqOekuuOBl+OBpuOBhOOBvuOBmSIKKworIzogZ2l0LWd1aS5zaDoxOTEzCiBtc2dpZCAiVW5tb2RpZmllZCIKIG1zZ3N0ciAi5aSJ5pu054Sh44GXIgogCi0jOiBnaXQtZ3VpLnNoOjE4MjEKKyM6IGdpdC1ndWkuc2g6MTkxNQogbXNnaWQgIk1vZGlmaWVkLCBub3Qgc3RhZ2VkIgogbXNnc3RyICLlpInmm7TjgYLjgorjgIHjgrPjg5/jg4Pjg4jmnKrkuojlrpoiCiAKLSM6IGdpdC1ndWkuc2g6MTgyMiBnaXQtZ3VpLnNoOjE4MzAKKyM6IGdpdC1ndWkuc2g6MTkxNiBnaXQtZ3VpLnNoOjE5MjQKIG1zZ2lkICJTdGFnZWQgZm9yIGNvbW1pdCIKIG1zZ3N0ciAi44Kz44Of44OD44OI5LqI5a6a5riIIgogCi0jOiBnaXQtZ3VpLnNoOjE4MjMgZ2l0LWd1aS5zaDoxODMxCisjOiBnaXQtZ3VpLnNoOjE5MTcgZ2l0LWd1aS5zaDoxOTI1CiBtc2dpZCAiUG9ydGlvbnMgc3RhZ2VkIGZvciBjb21taXQiCiBtc2dzdHIgIumDqOWIhueahOOBq+OCs+ODn+ODg+ODiOS6iOWumua4iCIKIAotIzogZ2l0LWd1aS5zaDoxODI0IGdpdC1ndWkuc2g6MTgzMgorIzogZ2l0LWd1aS5zaDoxOTE4IGdpdC1ndWkuc2g6MTkyNgogbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0LCBtaXNzaW5nIgogbXNnc3RyICLjgrPjg5/jg4Pjg4jkuojlrprmuIjjgIHjg5XjgqHjgqTjg6vnhKHjgZciCiAKLSM6IGdpdC1ndWkuc2g6MTgyNgorIzogZ2l0LWd1aS5zaDoxOTIwCiBtc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIG5vdCBzdGFnZWQiCiBtc2dzdHIgIuODleOCoeOCpOODq+Wei+WkieabtOOAgeOCs+ODn+ODg+ODiOacquS6iOWumiIKIAotIzogZ2l0LWd1aS5zaDoxODI3CisjOiBnaXQtZ3VpLnNoOjE5MjEKIG1zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgc3RhZ2VkIgogbXNnc3RyICLjg5XjgqHjgqTjg6vlnovlpInmm7TjgIHjgrPjg5/jg4Pjg4jkuojlrprmuIgiCiAKLSM6IGdpdC1ndWkuc2g6MTgyOQorIzogZ2l0LWd1aS5zaDoxOTIzCiBtc2dpZCAiVW50cmFja2VkLCBub3Qgc3RhZ2VkIgogbXNnc3RyICLnrqHnkIblpJbjgIHjgrPjg5/jg4Pjg4jmnKrkuojlrpoiCiAKLSM6IGdpdC1ndWkuc2g6MTgzNAorIzogZ2l0LWd1aS5zaDoxOTI4CiBtc2dpZCAiTWlzc2luZyIKIG1zZ3N0ciAi44OV44Kh44Kk44Or54Sh44GXIgogCi0jOiBnaXQtZ3VpLnNoOjE4MzUKKyM6IGdpdC1ndWkuc2g6MTkyOQogbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCIKIG1zZ3N0ciAi5YmK6Zmk5LqI5a6a5riIIgogCi0jOiBnaXQtZ3VpLnNoOjE4MzYKKyM6IGdpdC1ndWkuc2g6MTkzMAogbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCwgc3RpbGwgcHJlc2VudCIKIG1zZ3N0ciAi5YmK6Zmk5LqI5a6a5riI44CB44OV44Kh44Kk44Or5pyq5YmK6ZmkIgogCi0jOiBnaXQtZ3VpLnNoOjE4MzggZ2l0LWd1aS5zaDoxODM5IGdpdC1ndWkuc2g6MTg0MCBnaXQtZ3VpLnNoOjE4NDEKLSM6IGdpdC1ndWkuc2g6MTg0MiBnaXQtZ3VpLnNoOjE4NDMKKyM6IGdpdC1ndWkuc2g6MTkzMiBnaXQtZ3VpLnNoOjE5MzMgZ2l0LWd1aS5zaDoxOTM0IGdpdC1ndWkuc2g6MTkzNQorIzogZ2l0LWd1aS5zaDoxOTM2IGdpdC1ndWkuc2g6MTkzNwogbXNnaWQgIlJlcXVpcmVzIG1lcmdlIHJlc29sdXRpb24iCiBtc2dzdHIgIuimgeODnuODvOOCuOino+axuiIKIAotIzogZ2l0LWd1aS5zaDoxODc4CisjOiBnaXQtZ3VpLnNoOjE5NzIKIG1zZ2lkICJTdGFydGluZyBnaXRrLi4uIHBsZWFzZSB3YWl0Li4uIgogbXNnc3RyICJnaXRrIOOCkui1t+WLleS4reKApuOBiuW+heOBoeS4i+OBleOBhOKApiIKIAotIzogZ2l0LWd1aS5zaDoxODg3CisjOiBnaXQtZ3VpLnNoOjE5ODQKIG1zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdGsgaW4gUEFUSCIKIG1zZ3N0ciAiUEFUSCDkuK3jgasgZ2l0ayDjgYzopovjgaTjgYvjgorjgb7jgZvjgpMiCiAKLSM6IGdpdC1ndWkuc2g6MjI4MCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM2CisjOiBnaXQtZ3VpLnNoOjIwNDMKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdCBndWkgaW4gUEFUSCIKK21zZ3N0ciAiUEFUSCDkuK3jgasgZ2l0IGd1aSDjgYzopovjgaTjgYvjgorjgb7jgZvjgpMiCisKKyM6IGdpdC1ndWkuc2g6MjQ1NSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM2CiBtc2dpZCAiUmVwb3NpdG9yeSIKIG1zZ3N0ciAi44Oq44Od44K444OI44OqIgogCi0jOiBnaXQtZ3VpLnNoOjIyODEKKyM6IGdpdC1ndWkuc2g6MjQ1NgogbXNnaWQgIkVkaXQiCiBtc2dzdHIgIue3qOmbhiIKIAotIzogZ2l0LWd1aS5zaDoyMjgzIGxpYi9jaG9vc2VfcmV2LnRjbDo1NjEKKyM6IGdpdC1ndWkuc2g6MjQ1OCBsaWIvY2hvb3NlX3Jldi50Y2w6NTYxCiBtc2dpZCAiQnJhbmNoIgogbXNnc3RyICLjg5bjg6njg7Pjg4EiCiAKLSM6IGdpdC1ndWkuc2g6MjI4NiBsaWIvY2hvb3NlX3Jldi50Y2w6NTQ4CisjOiBnaXQtZ3VpLnNoOjI0NjEgbGliL2Nob29zZV9yZXYudGNsOjU0OAogbXNnaWQgIkNvbW1pdEBAbm91biIKIG1zZ3N0ciAi44Kz44Of44OD44OIIgogCi0jOiBnaXQtZ3VpLnNoOjIyODkgbGliL21lcmdlLnRjbDoxMjEgbGliL21lcmdlLnRjbDoxNTAgbGliL21lcmdlLnRjbDoxNjgKKyM6IGdpdC1ndWkuc2g6MjQ2NCBsaWIvbWVyZ2UudGNsOjEyMSBsaWIvbWVyZ2UudGNsOjE1MCBsaWIvbWVyZ2UudGNsOjE2OAogbXNnaWQgIk1lcmdlIgogbXNnc3RyICLjg57jg7zjgrgiCiAKLSM6IGdpdC1ndWkuc2g6MjI5MCBsaWIvY2hvb3NlX3Jldi50Y2w6NTU3CisjOiBnaXQtZ3VpLnNoOjI0NjUgbGliL2Nob29zZV9yZXYudGNsOjU1NwogbXNnaWQgIlJlbW90ZSIKIG1zZ3N0ciAi44Oq44Oi44O844OIIgogCi0jOiBnaXQtZ3VpLnNoOjIyOTMKKyM6IGdpdC1ndWkuc2g6MjQ2OAogbXNnaWQgIlRvb2xzIgogbXNnc3RyICLjg4Tjg7zjg6siCiAKLSM6IGdpdC1ndWkuc2g6MjMwMgorIzogZ2l0LWd1aS5zaDoyNDc3CiBtc2dpZCAiRXhwbG9yZSBXb3JraW5nIENvcHkiCiBtc2dzdHIgIuODr+ODvOOCreODs+OCsOOCs+ODlOODvOOCkuODluODqeOCpuOCuiIKIAotIzogZ2l0LWd1aS5zaDoyMzA3CisjOiBnaXQtZ3VpLnNoOjI0ODMKIG1zZ2lkICJCcm93c2UgQ3VycmVudCBCcmFuY2gncyBGaWxlcyIKIG1zZ3N0ciAi54++5Zyo44Gu44OW44Op44Oz44OB44Gu44OV44Kh44Kk44Or44KS6KaL44KLIgogCi0jOiBnaXQtZ3VpLnNoOjIzMTEKKyM6IGdpdC1ndWkuc2g6MjQ4NwogbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMuLi4iCiBtc2dzdHIgIuODluODqeODs+ODgeOBruODleOCoeOCpOODq+OCkuimi+OCi+KApiIKIAotIzogZ2l0LWd1aS5zaDoyMzE2CisjOiBnaXQtZ3VpLnNoOjI0OTIKIG1zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2gncyBIaXN0b3J5IgogbXNnc3RyICLnj77lnKjjga7jg5bjg6njg7Pjg4Hjga7lsaXmrbTjgpLopovjgosiCiAKLSM6IGdpdC1ndWkuc2g6MjMyMAorIzogZ2l0LWd1aS5zaDoyNDk2CiBtc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSIKIG1zZ3N0ciAi5YWo44Gm44Gu44OW44Op44Oz44OB44Gu5bGl5q2044KS6KaL44KLIgogCi0jOiBnaXQtZ3VpLnNoOjIzMjcKKyM6IGdpdC1ndWkuc2g6MjUwMwogIywgdGNsLWZvcm1hdAogbXNnaWQgIkJyb3dzZSAlcydzIEZpbGVzIgogbXNnc3RyICLjg5bjg6njg7Pjg4EgJXMg44Gu44OV44Kh44Kk44Or44KS6KaL44KLIgogCi0jOiBnaXQtZ3VpLnNoOjIzMjkKKyM6IGdpdC1ndWkuc2g6MjUwNQogIywgdGNsLWZvcm1hdAogbXNnaWQgIlZpc3VhbGl6ZSAlcydzIEhpc3RvcnkiCiBtc2dzdHIgIuODluODqeODs+ODgSAlcyDjga7lsaXmrbTjgpLopovjgosiCiAKLSM6IGdpdC1ndWkuc2g6MjMzNCBsaWIvZGF0YWJhc2UudGNsOjI3IGxpYi9kYXRhYmFzZS50Y2w6NjcKKyM6IGdpdC1ndWkuc2g6MjUxMCBsaWIvZGF0YWJhc2UudGNsOjI3IGxpYi9kYXRhYmFzZS50Y2w6NjcKIG1zZ2lkICJEYXRhYmFzZSBTdGF0aXN0aWNzIgogbXNnc3RyICLjg4fjg7zjgr/jg5njg7zjgrnntbHoqIgiCiAKLSM6IGdpdC1ndWkuc2g6MjMzNyBsaWIvZGF0YWJhc2UudGNsOjM0CisjOiBnaXQtZ3VpLnNoOjI1MTMgbGliL2RhdGFiYXNlLnRjbDozNAogbXNnaWQgIkNvbXByZXNzIERhdGFiYXNlIgogbXNnc3RyICLjg4fjg7zjgr/jg5njg7zjgrnlnKfnuK4iCiAKLSM6IGdpdC1ndWkuc2g6MjM0MAorIzogZ2l0LWd1aS5zaDoyNTE2CiBtc2dpZCAiVmVyaWZ5IERhdGFiYXNlIgogbXNnc3RyICLjg4fjg7zjgr/jg5njg7zjgrnmpJzoqLwiCiAKLSM6IGdpdC1ndWkuc2g6MjM0NyBnaXQtZ3VpLnNoOjIzNTEgZ2l0LWd1aS5zaDoyMzU1IGxpYi9zaG9ydGN1dC50Y2w6NwotIzogbGliL3Nob3J0Y3V0LnRjbDozOSBsaWIvc2hvcnRjdXQudGNsOjcxCisjOiBnaXQtZ3VpLnNoOjI1MjMgZ2l0LWd1aS5zaDoyNTI3IGdpdC1ndWkuc2g6MjUzMSBsaWIvc2hvcnRjdXQudGNsOjgKKyM6IGxpYi9zaG9ydGN1dC50Y2w6NDAgbGliL3Nob3J0Y3V0LnRjbDo3MgogbXNnaWQgIkNyZWF0ZSBEZXNrdG9wIEljb24iCiBtc2dzdHIgIuODh+OCueOCr+ODiOODg+ODl+ODu+OCouOCpOOCs+ODs+OCkuS9nOOCiyIKIAotIzogZ2l0LWd1aS5zaDoyMzYzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTgzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTkxCisjOiBnaXQtZ3VpLnNoOjI1MzkgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxODMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxOTEKIG1zZ2lkICJRdWl0IgogbXNnc3RyICLntYLkuoYiCiAKLSM6IGdpdC1ndWkuc2g6MjM3MQorIzogZ2l0LWd1aS5zaDoyNTQ3CiBtc2dpZCAiVW5kbyIKIG1zZ3N0ciAi5YWD44Gr5oi744GZIgogCi0jOiBnaXQtZ3VpLnNoOjIzNzQKKyM6IGdpdC1ndWkuc2g6MjU1MAogbXNnaWQgIlJlZG8iCiBtc2dzdHIgIuOChOOCiuebtOOBlyIKIAotIzogZ2l0LWd1aS5zaDoyMzc4IGdpdC1ndWkuc2g6MjkyMworIzogZ2l0LWd1aS5zaDoyNTU0IGdpdC1ndWkuc2g6MzEwOQogbXNnaWQgIkN1dCIKIG1zZ3N0ciAi5YiH44KK5Y+W44KKIgogCi0jOiBnaXQtZ3VpLnNoOjIzODEgZ2l0LWd1aS5zaDoyOTI2IGdpdC1ndWkuc2g6MzAwMCBnaXQtZ3VpLnNoOjMwODIKKyM6IGdpdC1ndWkuc2g6MjU1NyBnaXQtZ3VpLnNoOjMxMTIgZ2l0LWd1aS5zaDozMTg2IGdpdC1ndWkuc2g6MzI1OQogIzogbGliL2NvbnNvbGUudGNsOjY5CiBtc2dpZCAiQ29weSIKIG1zZ3N0ciAi44Kz44OU44O8IgogCi0jOiBnaXQtZ3VpLnNoOjIzODQgZ2l0LWd1aS5zaDoyOTI5CisjOiBnaXQtZ3VpLnNoOjI1NjAgZ2l0LWd1aS5zaDozMTE1CiBtc2dpZCAiUGFzdGUiCiBtc2dzdHIgIuiyvOOCiuS7mOOBkSIKIAotIzogZ2l0LWd1aS5zaDoyMzg3IGdpdC1ndWkuc2g6MjkzMiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjYKKyM6IGdpdC1ndWkuc2g6MjU2MyBnaXQtZ3VpLnNoOjMxMTggbGliL2JyYW5jaF9kZWxldGUudGNsOjI2CiAjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjM4CiBtc2dpZCAiRGVsZXRlIgogbXNnc3RyICLliYrpmaQiCiAKLSM6IGdpdC1ndWkuc2g6MjM5MSBnaXQtZ3VpLnNoOjI5MzYgZ2l0LWd1aS5zaDozMDg2IGxpYi9jb25zb2xlLnRjbDo3MQorIzogZ2l0LWd1aS5zaDoyNTY3IGdpdC1ndWkuc2g6MzEyMiBnaXQtZ3VpLnNoOjMyNjMgbGliL2NvbnNvbGUudGNsOjcxCiBtc2dpZCAiU2VsZWN0IEFsbCIKIG1zZ3N0ciAi5YWo44Gm6YG45oqeIgogCi0jOiBnaXQtZ3VpLnNoOjI0MDAKKyM6IGdpdC1ndWkuc2g6MjU3NgogbXNnaWQgIkNyZWF0ZS4uLiIKIG1zZ3N0ciAi5L2c5oiQ4oCmIgogCi0jOiBnaXQtZ3VpLnNoOjI0MDYKKyM6IGdpdC1ndWkuc2g6MjU4MgogbXNnaWQgIkNoZWNrb3V0Li4uIgogbXNnc3RyICLjg4Hjgqfjg4Pjgq/jgqLjgqbjg4giCiAKLSM6IGdpdC1ndWkuc2g6MjQxMgorIzogZ2l0LWd1aS5zaDoyNTg4CiBtc2dpZCAiUmVuYW1lLi4uIgogbXNnc3RyICLlkI3liY3lpInmm7TigKYiCiAKLSM6IGdpdC1ndWkuc2g6MjQxNworIzogZ2l0LWd1aS5zaDoyNTkzCiBtc2dpZCAiRGVsZXRlLi4uIgogbXNnc3RyICLliYrpmaTigKYiCiAKLSM6IGdpdC1ndWkuc2g6MjQyMgorIzogZ2l0LWd1aS5zaDoyNTk4CiBtc2dpZCAiUmVzZXQuLi4iCiBtc2dzdHIgIuODquOCu+ODg+ODiOKApiIKIAotIzogZ2l0LWd1aS5zaDoyNDMyCisjOiBnaXQtZ3VpLnNoOjI2MDgKIG1zZ2lkICJEb25lIgogbXNnc3RyICLlrozkuoYiCiAKLSM6IGdpdC1ndWkuc2g6MjQzNAorIzogZ2l0LWd1aS5zaDoyNjEwCiBtc2dpZCAiQ29tbWl0QEB2ZXJiIgogbXNnc3RyICLjgrPjg5/jg4Pjg4giCiAKLSM6IGdpdC1ndWkuc2g6MjQ0MyBnaXQtZ3VpLnNoOjI4NjQKKyM6IGdpdC1ndWkuc2g6MjYxOSBnaXQtZ3VpLnNoOjMwNTAKIG1zZ2lkICJOZXcgQ29tbWl0IgogbXNnc3RyICLmlrDopo/jgrPjg5/jg4Pjg4giCiAKLSM6IGdpdC1ndWkuc2g6MjQ1MSBnaXQtZ3VpLnNoOjI4NzEKKyM6IGdpdC1ndWkuc2g6MjYyNyBnaXQtZ3VpLnNoOjMwNTcKIG1zZ2lkICJBbWVuZCBMYXN0IENvbW1pdCIKIG1zZ3N0ciAi5pyA5paw44Kz44Of44OD44OI44KS6KiC5q2jIgogCi0jOiBnaXQtZ3VpLnNoOjI0NjEgZ2l0LWd1aS5zaDoyODI1IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6OTkKKyM6IGdpdC1ndWkuc2g6MjYzNyBnaXQtZ3VpLnNoOjMwMTEgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo5OQogbXNnaWQgIlJlc2NhbiIKIG1zZ3N0ciAi5YaN44K544Kt44Oj44OzIgogCi0jOiBnaXQtZ3VpLnNoOjI0NjcKKyM6IGdpdC1ndWkuc2g6MjY0MwogbXNnaWQgIlN0YWdlIFRvIENvbW1pdCIKIG1zZ3N0ciAi44Kz44Of44OD44OI5LqI5a6a44GZ44KLIgogCi0jOiBnaXQtZ3VpLnNoOjI0NzMKKyM6IGdpdC1ndWkuc2g6MjY0OQogbXNnaWQgIlN0YWdlIENoYW5nZWQgRmlsZXMgVG8gQ29tbWl0IgogbXNnc3RyICLlpInmm7TjgZXjgozjgZ/jg5XjgqHjgqTjg6vjgpLjgrPjg5/jg4Pjg4jkuojlrpoiCiAKLSM6IGdpdC1ndWkuc2g6MjQ3OQorIzogZ2l0LWd1aS5zaDoyNjU1CiBtc2dpZCAiVW5zdGFnZSBGcm9tIENvbW1pdCIKIG1zZ3N0ciAi44Kz44Of44OD44OI44GL44KJ6ZmN44KN44GZIgogCi0jOiBnaXQtZ3VpLnNoOjI0ODQgbGliL2luZGV4LnRjbDo0MTAKKyM6IGdpdC1ndWkuc2g6MjY2MSBsaWIvaW5kZXgudGNsOjQxMgogbXNnaWQgIlJldmVydCBDaGFuZ2VzIgogbXNnc3RyICLlpInmm7TjgpLlhYPjgavmiLvjgZkiCiAKLSM6IGdpdC1ndWkuc2g6MjQ5MSBnaXQtZ3VpLnNoOjMwNjkKKyM6IGdpdC1ndWkuc2g6MjY2OSBnaXQtZ3VpLnNoOjMzMTAgZ2l0LWd1aS5zaDozMzQxCiBtc2dpZCAiU2hvdyBMZXNzIENvbnRleHQiCiBtc2dzdHIgIuaWh+iEiOOCkuWwkeOBquOBjyIKIAotIzogZ2l0LWd1aS5zaDoyNDk1IGdpdC1ndWkuc2g6MzA3MworIzogZ2l0LWd1aS5zaDoyNjczIGdpdC1ndWkuc2g6MzMxNCBnaXQtZ3VpLnNoOjMzNDUKIG1zZ2lkICJTaG93IE1vcmUgQ29udGV4dCIKIG1zZ3N0ciAi5paH6ISI44KS5aSa44GPIgogCi0jOiBnaXQtZ3VpLnNoOjI1MDIgZ2l0LWd1aS5zaDoyODM4IGdpdC1ndWkuc2g6Mjk0NworIzogZ2l0LWd1aS5zaDoyNjgwIGdpdC1ndWkuc2g6MzAyNCBnaXQtZ3VpLnNoOjMxMzMKIG1zZ2lkICJTaWduIE9mZiIKIG1zZ3N0ciAi572y5ZCNIgogCi0jOiBnaXQtZ3VpLnNoOjI1MTgKKyM6IGdpdC1ndWkuc2g6MjY5NgogbXNnaWQgIkxvY2FsIE1lcmdlLi4uIgogbXNnc3RyICLjg63jg7zjgqvjg6vjg7vjg57jg7zjgrjigKYiCiAKLSM6IGdpdC1ndWkuc2g6MjUyMworIzogZ2l0LWd1aS5zaDoyNzAxCiBtc2dpZCAiQWJvcnQgTWVyZ2UuLi4iCiBtc2dzdHIgIuODnuODvOOCuOS4reatouKApiIKIAotIzogZ2l0LWd1aS5zaDoyNTM1IGdpdC1ndWkuc2g6MjU3NQorIzogZ2l0LWd1aS5zaDoyNzEzIGdpdC1ndWkuc2g6Mjc0MQogbXNnaWQgIkFkZC4uLiIKIG1zZ3N0ciAi6L+95YqgIgogCi0jOiBnaXQtZ3VpLnNoOjI1MzkKKyM6IGdpdC1ndWkuc2g6MjcxNwogbXNnaWQgIlB1c2guLi4iCiBtc2dzdHIgIuODl+ODg+OCt+ODpeKApiIKIAotIzogZ2l0LWd1aS5zaDoyNTQzCisjOiBnaXQtZ3VpLnNoOjI3MjEKIG1zZ2lkICJEZWxldGUgQnJhbmNoLi4uIgogbXNnc3RyICLjg5bjg6njg7Pjg4HliYrpmaQuLi4iCiAKLSM6IGdpdC1ndWkuc2g6MjU1MyBnaXQtZ3VpLnNoOjI1ODkgbGliL2Fib3V0LnRjbDoxNAorIzogZ2l0LWd1aS5zaDoyNzMxIGdpdC1ndWkuc2g6MzI5MgorbXNnaWQgIk9wdGlvbnMuLi4iCittc2dzdHIgIuOCquODl+OCt+ODp+ODs+KApiIKKworIzogZ2l0LWd1aS5zaDoyNzQyCittc2dpZCAiUmVtb3ZlLi4uIgorbXNnc3RyICLliYrpmaQuLi4iCisKKyM6IGdpdC1ndWkuc2g6Mjc1MSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwCittc2dpZCAiSGVscCIKK21zZ3N0ciAi44OY44Or44OXIgorCisjOiBnaXQtZ3VpLnNoOjI3NTUgZ2l0LWd1aS5zaDoyNzU5IGxpYi9hYm91dC50Y2w6MTQKICM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MwogIywgdGNsLWZvcm1hdAogbXNnaWQgIkFib3V0ICVzIgogbXNnc3RyICIlcyDjgavjgaTjgYTjgaYiCiAKLSM6IGdpdC1ndWkuc2g6MjU1NwotbXNnaWQgIlByZWZlcmVuY2VzLi4uIgotbXNnc3RyICLoqK3lrprigKYiCi0KLSM6IGdpdC1ndWkuc2g6MjU2NSBnaXQtZ3VpLnNoOjMxMTUKLW1zZ2lkICJPcHRpb25zLi4uIgotbXNnc3RyICLjgqrjg5fjgrfjg6fjg7PigKYiCi0KLSM6IGdpdC1ndWkuc2g6MjU3NgotbXNnaWQgIlJlbW92ZS4uLiIKLW1zZ3N0ciAi5YmK6ZmkLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI1ODUgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MAotbXNnaWQgIkhlbHAiCi1tc2dzdHIgIuODmOODq+ODlyIKLQotIzogZ2l0LWd1aS5zaDoyNjExCisjOiBnaXQtZ3VpLnNoOjI3ODMKIG1zZ2lkICJPbmxpbmUgRG9jdW1lbnRhdGlvbiIKIG1zZ3N0ciAi44Kq44Oz44Op44Kk44Oz44O744OJ44Kt44Ol44Oh44Oz44OIIgogCi0jOiBnaXQtZ3VpLnNoOjI2MTQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU2CisjOiBnaXQtZ3VpLnNoOjI3ODYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU2CiBtc2dpZCAiU2hvdyBTU0ggS2V5IgogbXNnc3RyICJTU0gg44Kt44O844KS6KGo56S6IgogCi0jOiBnaXQtZ3VpLnNoOjI3MDcKKyM6IGdpdC1ndWkuc2g6Mjg5MwogIywgdGNsLWZvcm1hdAogbXNnaWQgImZhdGFsOiBjYW5ub3Qgc3RhdCBwYXRoICVzOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IgogbXNnc3RyICIiCiAi6Ie05ZG955qEOiDjg5HjgrkgJXMg44GMIHN0YXQg44Gn44GN44G+44Gb44KT44CC44Gd44Gu44KI44GG44Gq44OV44Kh44Kk44Or44KE44OH44Kj44Os44Kv44OI44Oq44Gv44GC44KK44G+IgogIuOBm+OCkyIKIAotIzogZ2l0LWd1aS5zaDoyNzQwCisjOiBnaXQtZ3VpLnNoOjI5MjYKIG1zZ2lkICJDdXJyZW50IEJyYW5jaDoiCiBtc2dzdHIgIuePvuWcqOOBruODluODqeODs+ODgSIKIAotIzogZ2l0LWd1aS5zaDoyNzYxCisjOiBnaXQtZ3VpLnNoOjI5NDcKIG1zZ2lkICJTdGFnZWQgQ2hhbmdlcyAoV2lsbCBDb21taXQpIgogbXNnc3RyICLjgrnjg4bjg7zjgrjjg7PjgrDjgZXjgozjgZ/vvIjjgrPjg5/jg4Pjg4jkuojlrprmuIjjga7vvInlpInmm7QiCiAKLSM6IGdpdC1ndWkuc2g6Mjc4MQorIzogZ2l0LWd1aS5zaDoyOTY3CiBtc2dpZCAiVW5zdGFnZWQgQ2hhbmdlcyIKIG1zZ3N0ciAi44Kz44Of44OD44OI5LqI5a6a44Gr5YWl44Gj44Gm44GE44Gq44GE5aSJ5pu0IgogCi0jOiBnaXQtZ3VpLnNoOjI4MzEKKyM6IGdpdC1ndWkuc2g6MzAxNwogbXNnaWQgIlN0YWdlIENoYW5nZWQiCiBtc2dzdHIgIuWkieabtOOCkuOCs+ODn+ODg+ODiOS6iOWumuOBq+WFpeOCjOOCiyIKIAotIzogZ2l0LWd1aS5zaDoyODUwIGxpYi90cmFuc3BvcnQudGNsOjkzIGxpYi90cmFuc3BvcnQudGNsOjE4MgorIzogZ2l0LWd1aS5zaDozMDM2IGxpYi90cmFuc3BvcnQudGNsOjEwNCBsaWIvdHJhbnNwb3J0LnRjbDoxOTMKIG1zZ2lkICJQdXNoIgogbXNnc3RyICLjg5fjg4Pjgrfjg6UiCiAKLSM6IGdpdC1ndWkuc2g6Mjg4NQorIzogZ2l0LWd1aS5zaDozMDcxCiBtc2dpZCAiSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCiBtc2dzdHIgIuacgOWIneOBruOCs+ODn+ODg+ODiOODoeODg+OCu+ODvOOCuDoiCiAKLSM6IGdpdC1ndWkuc2g6Mjg4NgorIzogZ2l0LWd1aS5zaDozMDcyCiBtc2dpZCAiQW1lbmRlZCBDb21taXQgTWVzc2FnZToiCiBtc2dzdHIgIuioguato+OBl+OBn+OCs+ODn+ODg+ODiOODoeODg+OCu+ODvOOCuDoiCiAKLSM6IGdpdC1ndWkuc2g6Mjg4NworIzogZ2l0LWd1aS5zaDozMDczCiBtc2dpZCAiQW1lbmRlZCBJbml0aWFsIENvbW1pdCBNZXNzYWdlOiIKIG1zZ3N0ciAi6KiC5q2j44GX44Gf5pyA5Yid44Gu44Kz44Of44OD44OI44Oh44OD44K744O844K4OiIKIAotIzogZ2l0LWd1aS5zaDoyODg4CisjOiBnaXQtZ3VpLnNoOjMwNzQKIG1zZ2lkICJBbWVuZGVkIE1lcmdlIENvbW1pdCBNZXNzYWdlOiIKIG1zZ3N0ciAi6KiC5q2j44GX44Gf44Oe44O844K444Kz44Of44OD44OI44Oh44OD44K744O844K4OiIKIAotIzogZ2l0LWd1aS5zaDoyODg5CisjOiBnaXQtZ3VpLnNoOjMwNzUKIG1zZ2lkICJNZXJnZSBDb21taXQgTWVzc2FnZToiCiBtc2dzdHIgIuODnuODvOOCuOOCs+ODn+ODg+ODiOODoeODg+OCu+ODvOOCuDoiCiAKLSM6IGdpdC1ndWkuc2g6Mjg5MAorIzogZ2l0LWd1aS5zaDozMDc2CiBtc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgogbXNnc3RyICLjgrPjg5/jg4Pjg4jjg6Hjg4Pjgrvjg7zjgrg6IgogCi0jOiBnaXQtZ3VpLnNoOjI5MzkgZ2l0LWd1aS5zaDozMDkwIGxpYi9jb25zb2xlLnRjbDo3MworIzogZ2l0LWd1aS5zaDozMTI1IGdpdC1ndWkuc2g6MzI2NyBsaWIvY29uc29sZS50Y2w6NzMKIG1zZ2lkICJDb3B5IEFsbCIKIG1zZ3N0ciAi5YWo44Gm44Kz44OU44O8IgogCi0jOiBnaXQtZ3VpLnNoOjI5NjMgbGliL2JsYW1lLnRjbDoxMDQKKyM6IGdpdC1ndWkuc2g6MzE0OSBsaWIvYmxhbWUudGNsOjEwNAogbXNnaWQgIkZpbGU6IgogbXNnc3RyICLjg5XjgqHjgqTjg6s6IgogCi0jOiBnaXQtZ3VpLnNoOjMwNzgKKyM6IGdpdC1ndWkuc2g6MzI1NQogbXNnaWQgIlJlZnJlc2giCiBtc2dzdHIgIuWGjeiqreOBv+i+vOOBvyIKIAotIzogZ2l0LWd1aS5zaDozMDk5CisjOiBnaXQtZ3VpLnNoOjMyNzYKIG1zZ2lkICJEZWNyZWFzZSBGb250IFNpemUiCiBtc2dzdHIgIuODleOCqeODs+ODiOOCkuWwj+OBleOBjyIKIAotIzogZ2l0LWd1aS5zaDozMTAzCisjOiBnaXQtZ3VpLnNoOjMyODAKIG1zZ2lkICJJbmNyZWFzZSBGb250IFNpemUiCiBtc2dzdHIgIuODleOCqeODs+ODiOOCkuWkp+OBjeOBjyIKIAotIzogZ2l0LWd1aS5zaDozMTExIGxpYi9ibGFtZS50Y2w6MjgxCisjOiBnaXQtZ3VpLnNoOjMyODggbGliL2JsYW1lLnRjbDoyODEKIG1zZ2lkICJFbmNvZGluZyIKIG1zZ3N0ciAi44Ko44Oz44Kz44O844OH44Kj44Oz44KwIgogCi0jOiBnaXQtZ3VpLnNoOjMxMjIKKyM6IGdpdC1ndWkuc2g6MzI5OQogbXNnaWQgIkFwcGx5L1JldmVyc2UgSHVuayIKIG1zZ3N0ciAi44OR44OD44OB44KS6YGp55SoL+WPluOCiua2iOOBmSIKIAotIzogZ2l0LWd1aS5zaDozMTI3CisjOiBnaXQtZ3VpLnNoOjMzMDQKIG1zZ2lkICJBcHBseS9SZXZlcnNlIExpbmUiCiBtc2dzdHIgIuODkeODg+ODgeihjOOCkumBqeeUqC/lj5bjgormtojjgZkiCiAKLSM6IGdpdC1ndWkuc2g6MzEzNworIzogZ2l0LWd1aS5zaDozMzIzCiBtc2dpZCAiUnVuIE1lcmdlIFRvb2wiCiBtc2dzdHIgIuODnuODvOOCuOODhOODvOODq+OCkui1t+WLlSIKIAotIzogZ2l0LWd1aS5zaDozMTQyCisjOiBnaXQtZ3VpLnNoOjMzMjgKIG1zZ2lkICJVc2UgUmVtb3RlIFZlcnNpb24iCiBtc2dzdHIgIuODquODouODvOODiOOBruaWueOCkuaOoeeUqCIKIAotIzogZ2l0LWd1aS5zaDozMTQ2CisjOiBnaXQtZ3VpLnNoOjMzMzIKIG1zZ2lkICJVc2UgTG9jYWwgVmVyc2lvbiIKIG1zZ3N0ciAi44Ot44O844Kr44Or44Gu5pa544KS5o6h55SoIgogCi0jOiBnaXQtZ3VpLnNoOjMxNTAKKyM6IGdpdC1ndWkuc2g6MzMzNgogbXNnaWQgIlJldmVydCBUbyBCYXNlIgogbXNnc3RyICLjg5njg7zjgrnniYjjgpLmjqHnlKgiCiAKLSM6IGdpdC1ndWkuc2g6MzE2OQorIzogZ2l0LWd1aS5zaDozMzU0Cittc2dpZCAiVmlzdWFsaXplIFRoZXNlIENoYW5nZXMgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAi44K144OW44Oi44K444Ol44O844Or5YaF44Gu44GT44KM44KJ44Gu5aSJ5pu044KS6KaL44KLIgorCisjOiBnaXQtZ3VpLnNoOjMzNTgKK21zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICLjgrXjg5bjg6Ljgrjjg6Xjg7zjg6vlhoXjgafnj77lnKjjga7jg5bjg6njg7Pjg4Hjga7lsaXmrbTjgpLopovjgosiCisKKyM6IGdpdC1ndWkuc2g6MzM2MgorbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAi44K144OW44Oi44K444Ol44O844Or5YaF44Gn5YWo44Gm44Gu44OW44Op44Oz44OB44Gu5bGl5q2044KS6KaL44KLIgorCisjOiBnaXQtZ3VpLnNoOjMzNjcKK21zZ2lkICJTdGFydCBnaXQgZ3VpIEluIFRoZSBTdWJtb2R1bGUiCittc2dzdHIgIuOCteODluODouOCuOODpeODvOODq+WGheOBp2dpdCBndWnjgpLotbfli5XjgZnjgosiCisKKyM6IGdpdC1ndWkuc2g6MzM4OQogbXNnaWQgIlVuc3RhZ2UgSHVuayBGcm9tIENvbW1pdCIKIG1zZ3N0ciAi44OR44OD44OB44KS44Kz44Of44OD44OI5LqI5a6a44GL44KJ5aSW44GZIgogCi0jOiBnaXQtZ3VpLnNoOjMxNzAKKyM6IGdpdC1ndWkuc2g6MzM5MQorbXNnaWQgIlVuc3RhZ2UgTGluZXMgRnJvbSBDb21taXQiCittc2dzdHIgIuOCs+ODn+ODg+ODiOS6iOWumuOBi+OCieihjOOCkuWkluOBmSIKKworIzogZ2l0LWd1aS5zaDozMzkzCiBtc2dpZCAiVW5zdGFnZSBMaW5lIEZyb20gQ29tbWl0IgogbXNnc3RyICLjgrPjg5/jg4Pjg4jkuojlrprjgYvjgonooYzjgpLlpJbjgZkiCiAKLSM6IGdpdC1ndWkuc2g6MzE3MgorIzogZ2l0LWd1aS5zaDozMzk2CiBtc2dpZCAiU3RhZ2UgSHVuayBGb3IgQ29tbWl0IgogbXNnc3RyICLjg5Hjg4Pjg4HjgpLjgrPjg5/jg4Pjg4jkuojlrprjgavliqDjgYjjgosiCiAKLSM6IGdpdC1ndWkuc2g6MzE3MworIzogZ2l0LWd1aS5zaDozMzk4Cittc2dpZCAiU3RhZ2UgTGluZXMgRm9yIENvbW1pdCIKK21zZ3N0ciAi44OR44OD44OB6KGM44KS44Kz44Of44OD44OI5LqI5a6a44Gr5Yqg44GI44KLIgorCisjOiBnaXQtZ3VpLnNoOjM0MDAKIG1zZ2lkICJTdGFnZSBMaW5lIEZvciBDb21taXQiCiBtc2dzdHIgIuODkeODg+ODgeihjOOCkuOCs+ODn+ODg+ODiOS6iOWumuOBq+WKoOOBiOOCiyIKIAotIzogZ2l0LWd1aS5zaDozMTk2CisjOiBnaXQtZ3VpLnNoOjM0MjQKIG1zZ2lkICJJbml0aWFsaXppbmcuLi4iCiBtc2dzdHIgIuWIneacn+WMluOBl+OBpuOBhOOBvuOBmeKApiIKIAotIzogZ2l0LWd1aS5zaDozMzAxCisjOiBnaXQtZ3VpLnNoOjM1NDEKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiUG9zc2libGUgZW52aXJvbm1lbnQgaXNzdWVzIGV4aXN0LlxuIgpAQCAtNTE1LDcgKzU0Myw3IEBACiAi5Lul5LiL44Gu55Kw5aKD5aSJ5pWw44GvICVzIOOBjOi1t+WLleOBmeOCiyBHaXQg44K144OW44OX44Ot44K744K544Gr44KI44Gj44Gm54Sh6KaW44GV44KM44KL44Gn44GX44KH44GGOlxuIgogIlxuIgogCi0jOiBnaXQtZ3VpLnNoOjMzMzEKKyM6IGdpdC1ndWkuc2g6MzU3MAogbXNnaWQgIiIKICJcbiIKICJUaGlzIGlzIGR1ZSB0byBhIGtub3duIGlzc3VlIHdpdGggdGhlXG4iCkBAIC01MjUsNyArNTUzLDcgQEAKICLjgZPjgozjga8gQ3lnd2luIOOBp+mFjeW4g+OBleOCjOOBpuOBhOOCiyBUY2wg44OQ44Kk44OK44Oq44GrXG4iCiAi6Zai44GX44Gm44Gu5pei55+l44Gu5ZWP6aGM44Gr44KI44KK44G+44GZIgogCi0jOiBnaXQtZ3VpLnNoOjMzMzYKKyM6IGdpdC1ndWkuc2g6MzU3NQogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICJcbiIKQEAgLTYwOSw0MyArNjM3LDQzIEBACiBtc2dpZCAiTG9hZGluZyBhbm5vdGF0aW9uLi4uIgogbXNnc3RyICLms6jph4jjgpLoqq3jgb/ovrzjgpPjgafjgYTjgb7jgZnigKYiCiAKLSM6IGxpYi9ibGFtZS50Y2w6OTY0CisjOiBsaWIvYmxhbWUudGNsOjk2MwogbXNnaWQgIkF1dGhvcjoiCiBtc2dzdHIgIuS9nOiAhToiCiAKLSM6IGxpYi9ibGFtZS50Y2w6OTY4CisjOiBsaWIvYmxhbWUudGNsOjk2NwogbXNnaWQgIkNvbW1pdHRlcjoiCiBtc2dzdHIgIuOCs+ODn+ODg+ODiOiAhToiCiAKLSM6IGxpYi9ibGFtZS50Y2w6OTczCisjOiBsaWIvYmxhbWUudGNsOjk3MgogbXNnaWQgIk9yaWdpbmFsIEZpbGU6IgogbXNnc3RyICLlhYPjg5XjgqHjgqTjg6siCiAKLSM6IGxpYi9ibGFtZS50Y2w6MTAyMQorIzogbGliL2JsYW1lLnRjbDoxMDIwCiBtc2dpZCAiQ2Fubm90IGZpbmQgSEVBRCBjb21taXQ6IgogbXNnc3RyICJIRUFEIOOCs+ODn+ODg+ODiOOBjOimi+OBpOOBi+OCiuOBvuOBm+OCkyIKIAotIzogbGliL2JsYW1lLnRjbDoxMDc2CisjOiBsaWIvYmxhbWUudGNsOjEwNzUKIG1zZ2lkICJDYW5ub3QgZmluZCBwYXJlbnQgY29tbWl0OiIKIG1zZ3N0ciAi6Kaq44Kz44Of44OD44OI44GM6KaL44Gk44GL44KK44G+44Gb44KTOiIKIAotIzogbGliL2JsYW1lLnRjbDoxMDkxCisjOiBsaWIvYmxhbWUudGNsOjEwOTAKIG1zZ2lkICJVbmFibGUgdG8gZGlzcGxheSBwYXJlbnQiCiBtc2dzdHIgIuimquOCkuihqOekuuOBp+OBjeOBvuOBm+OCkyIKIAotIzogbGliL2JsYW1lLnRjbDoxMDkyIGxpYi9kaWZmLnRjbDoyOTcKKyM6IGxpYi9ibGFtZS50Y2w6MTA5MSBsaWIvZGlmZi50Y2w6MzIwCiBtc2dpZCAiRXJyb3IgbG9hZGluZyBkaWZmOiIKIG1zZ3N0ciAiZGlmZiDjgpLoqq3jgoDpmpvjga7jgqjjg6njg7zjgafjgZk6IgogCi0jOiBsaWIvYmxhbWUudGNsOjEyMzIKKyM6IGxpYi9ibGFtZS50Y2w6MTIzMQogbXNnaWQgIk9yaWdpbmFsbHkgQnk6IgogbXNnc3RyICLljp/kvZzogIU6IgogCi0jOiBsaWIvYmxhbWUudGNsOjEyMzgKKyM6IGxpYi9ibGFtZS50Y2w6MTIzNwogbXNnaWQgIkluIEZpbGU6IgogbXNnc3RyICLjg5XjgqHjgqTjg6s6IgogCi0jOiBsaWIvYmxhbWUudGNsOjEyNDMKKyM6IGxpYi9ibGFtZS50Y2w6MTI0MgogbXNnaWQgIkNvcGllZCBPciBNb3ZlZCBIZXJlIEJ5OiIKIG1zZ3N0ciAi6KSH5YaZ44O756e75YuV6ICFOiIKIApAQCAtNjU5LDEwICs2ODcsMTAgQEAKIAogIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjcgbGliL2JyYW5jaF9jcmVhdGUudGNsOjM1CiAjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzIgbGliL2JyYW5jaF9yZW5hbWUudGNsOjMwIGxpYi9icm93c2VyLnRjbDoyODIKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTQ0IGxpYi9jaG9vc2VfZm9udC50Y2w6NDMgbGliL21lcmdlLnRjbDoxNzIKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTc5IGxpYi9jaG9vc2VfZm9udC50Y2w6NDMgbGliL21lcmdlLnRjbDoxNzIKICM6IGxpYi9vcHRpb24udGNsOjEyNSBsaWIvcmVtb3RlX2FkZC50Y2w6MzIgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0MgogIzogbGliL3Rvb2xzX2RsZy50Y2w6NDAgbGliL3Rvb2xzX2RsZy50Y2w6MjA0IGxpYi90b29sc19kbGcudGNsOjM1MgotIzogbGliL3RyYW5zcG9ydC50Y2w6OTcKKyM6IGxpYi90cmFuc3BvcnQudGNsOjEwOAogbXNnaWQgIkNhbmNlbCIKIG1zZ3N0ciAi5Lit5q2iIgogCkBAIC02OTAsNyArNzE4LDcgQEAKIG1zZ2lkICJDcmVhdGUgTmV3IEJyYW5jaCIKIG1zZ3N0ciAi44OW44Op44Oz44OB44KS5paw6KaP5L2c5oiQIgogCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozNzcKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDozMSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4MQogbXNnaWQgIkNyZWF0ZSIKIG1zZ3N0ciAi5L2c5oiQIgogCkBAIC03MjIsNyArNzUwLDcgQEAKIG1zZ2lkICJGYXN0IEZvcndhcmQgT25seSIKIG1zZ3N0ciAi5pep6YCB44KK44Gu44G/IgogCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODUgbGliL2NoZWNrb3V0X29wLnRjbDo1MzYKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4NSBsaWIvY2hlY2tvdXRfb3AudGNsOjU3MQogbXNnaWQgIlJlc2V0IgogbXNnc3RyICLjg6rjgrvjg4Pjg4giCiAKQEAgLTc2NCwxNSArNzkyLDI1IEBACiBtc2dpZCAiRGVsZXRlIE9ubHkgSWYgTWVyZ2VkIEludG8iCiBtc2dzdHIgIuODnuODvOOCuOa4iOOBv+OBruaZguOBruOBv+WJiumZpCIKIAotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjU0Ci1tc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSB0ZXN0LikiCi1tc2dzdHIgIueEoeadoeS7tijjg57jg7zjgrjjg4bjgrnjg4jjgZfjgarjgYQpIgorIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjU0IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTE5Cittc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSBjaGVja3MpIgorbXNnc3RyICLnhKHmnaHku7bvvIjjg57jg7zjgrjmpJzmn7vjgpLjgZfjgarjgYTvvIkiCiAKICM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMDMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczoiCiBtc2dzdHIgIuS7peS4i+OBruODluODqeODs+ODgeOBryAlcyDjgavlrozlhajjgavjg57jg7zjgrjjgZXjgozjgabjgYTjgb7jgZvjgpM6IgogCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTE1IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjE3Cittc2dpZCAiIgorIlJlY292ZXJpbmcgZGVsZXRlZCBicmFuY2hlcyBpcyBkaWZmaWN1bHQuXG4iCisiXG4iCisiRGVsZXRlIHRoZSBzZWxlY3RlZCBicmFuY2hlcz8iCittc2dzdHIgIiIKKyLliYrpmaTjgZfjgZ/jg5bjg6njg7Pjg4HjgpLlm57lvqnjgZnjgovjga7jga/lm7Dpm6PjgafjgZnjgIJcbiIKKyJcbiIKKyLpgbjmip7jgZfjgZ/jg5bjg6njg7Pjg4HjgpLliYrpmaTjgZfjgaboia/jgYTjgafjgZnjgYvvvJ8iCisKICM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNDEKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCkBAIC04MDIsNyArODQwLDcgQEAKIG1zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgYnJhbmNoIHRvIHJlbmFtZS4iCiBtc2dzdHIgIuWQjeWJjeOCkuWkieabtOOBmeOCi+ODluODqeODs+ODgeOCkumBuOOCk+OBp+S4i+OBleOBhOOAgiIKIAotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjk2IGxpYi9jaGVja291dF9vcC50Y2w6MjAxCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6OTYgbGliL2NoZWNrb3V0X29wLnRjbDoyMDIKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4iCiBtc2dzdHIgIiclcyfjgajjgYTjgYbjg5bjg6njg7Pjg4Hjga/ml6LjgavlrZjlnKjjgZfjgb7jgZnjgIIiCkBAIC04MzMsMzggKzg3MSwzOCBAQAogbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMiCiBtc2dzdHIgIuePvuWcqOOBruODluODqeODs+ODgeOBruODleOCoeOCpOODq+OCkuimi+OCiyIKIAotIzogbGliL2Jyb3dzZXIudGNsOjI3OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM5NAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0ODAgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTEKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTk1CisjOiBsaWIvYnJvd3Nlci50Y2w6Mjc4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzk4CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5NworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDI4CiBtc2dpZCAiQnJvd3NlIgogbXNnc3RyICLjg5bjg6njgqbjgroiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6ODQKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6ODUKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJGZXRjaGluZyAlcyBmcm9tICVzIgogbXNnc3RyICIlcyDjgYvjgokgJXMg44KS44OV44Kn44OD44OB44GX44Gm44GE44G+44GZIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjEzMgorIzogbGliL2NoZWNrb3V0X29wLnRjbDoxMzMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJmYXRhbDogQ2Fubm90IHJlc29sdmUgJXMiCiBtc2dzdHIgIuiHtOWRveeahOOCqOODqeODvDogJXMg44KS6Kej5rG644Gn44GN44G+44Gb44KTIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE0NSBsaWIvY29uc29sZS50Y2w6ODEgbGliL2RhdGFiYXNlLnRjbDozMQorIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNDYgbGliL2NvbnNvbGUudGNsOjgxIGxpYi9kYXRhYmFzZS50Y2w6MzEKICM6IGxpYi9zc2hrZXkudGNsOjUzCiBtc2dpZCAiQ2xvc2UiCiBtc2dzdHIgIumWieOBmOOCiyIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNzQKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTc1CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QuIgogbXNnc3RyICLjg5bjg6njg7Pjg4EnJXMn44Gv5a2Y5Zyo44GX44G+44Gb44KT44CCIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE5MworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxOTQKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIHNpbXBsaWZpZWQgZ2l0LXB1bGwgZm9yICclcycuIgogbXNnc3RyICInJXMnIOOBq+ewoeaYkyBnaXQtcHVsbCDjgpLoqK3lrprjgafjgY3jgb7jgZvjgpPjgafjgZfjgZ8iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjI4CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjIyOQogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy5cbiIKQEAgLTg3NywyMSArOTE1LDIxIEBACiAiJXMg44Gr5pep6YCB44KK44Gn44GN44G+44Gb44KT44CCXG4iCiAi44Oe44O844K444GM5b+F6KaB44Gn44GZ44CCIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI0MgorIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNDMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJNZXJnZSBzdHJhdGVneSAnJXMnIG5vdCBzdXBwb3J0ZWQuIgogbXNnc3RyICInJXMnIOODnuODvOOCuOaIpueVpeOBr+OCteODneODvOODiOOBleOCjOOBpuOBhOOBvuOBm+OCk+OAgiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNjEKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjYyCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiRmFpbGVkIHRvIHVwZGF0ZSAnJXMnLiIKIG1zZ3N0ciAiJyVzJyDjga7mm7TmlrDjgavlpLHmlZfjgZfjgb7jgZfjgZ/jgIIiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjczCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI3NAogbXNnaWQgIlN0YWdpbmcgYXJlYSAoaW5kZXgpIGlzIGFscmVhZHkgbG9ja2VkLiIKIG1zZ3N0ciAi44Kk44Oz44OH44OD44Kv44K544Gv5pei44Gr44Ot44OD44Kv44GV44KM44Gm44GE44G+44GZ44CCIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI4OAorIzogbGliL2NoZWNrb3V0X29wLnRjbDoyODkKIG1zZ2lkICIiCiAiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCiAiXG4iCkBAIC05MDcsMzAgKzk0NSwzMCBAQAogIlxuIgogIuiHquWLleeahOOBq+WGjeOCueOCreODo+ODs+OCkumWi+Wni+OBl+OBvuOBmeOAglxuIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NAorIzogbGliL2NoZWNrb3V0X29wLnRjbDozNDUKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJVcGRhdGluZyB3b3JraW5nIGRpcmVjdG9yeSB0byAnJXMnLi4uIgogbXNnc3RyICLkvZzmpa3jg4fjgqPjg6zjgq/jg4jjg6rjgpIgJyVzJyDjgavmm7TmlrDjgZfjgabjgYTjgb7jgZnigKYiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ1CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NgogbXNnaWQgImZpbGVzIGNoZWNrZWQgb3V0IgogbXNnc3RyICLjg4Hjgqfjg4Pjgq/jgqLjgqbjg4jjgZXjgozjgZ/jg5XjgqHjgqTjg6siCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc1CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM3NgogIywgdGNsLWZvcm1hdAogbXNnaWQgIkFib3J0ZWQgY2hlY2tvdXQgb2YgJyVzJyAoZmlsZSBsZXZlbCBtZXJnaW5nIGlzIHJlcXVpcmVkKS4iCiBtc2dzdHIgIiclcycg44Gu44OB44Kn44OD44Kv44Ki44Km44OI44KS5Lit5q2i44GX44G+44GX44Gf77yI44OV44Kh44Kk44Or5q+O44Gu44Oe44O844K444GM5b+F6KaB44Gn44GZ77yJ44CCIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM3NgorIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzcKIG1zZ2lkICJGaWxlIGxldmVsIG1lcmdlIHJlcXVpcmVkLiIKIG1zZ3N0ciAi44OV44Kh44Kk44Or5q+O44Gu44Oe44O844K444GM5b+F6KaB44Gn44GZ44CCIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM4MAorIzogbGliL2NoZWNrb3V0X29wLnRjbDozODEKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJTdGF5aW5nIG9uIGJyYW5jaCAnJXMnLiIKIG1zZ3N0ciAi44OW44Op44Oz44OBICclcycg44Gr5rue44G+44KK44G+44GZ44CCIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjQ1MQorIzogbGliL2NoZWNrb3V0X29wLnRjbDo0NTIKIG1zZ2lkICIiCiAiWW91IGFyZSBubyBsb25nZXIgb24gYSBsb2NhbCBicmFuY2guXG4iCiAiXG4iCkBAIC05NDIsMzAgKzk4MCwzMCBAQAogIuODluODqeODs+ODgeS4iuOBq+a7nuOBvuOCiuOBn+OBhOOBqOOBjeOBr+OAgeOBk+OBruOAjOWIhumbouOBleOCjOOBn+ODgeOCp+ODg+OCr+OCouOCpuODiOOAjeOBi+OCieaWsOimj+ODluODqeODsyIKICLjg4HjgpLplovlp4vjgZfjgabjgY/jgaDjgZXjgYTjgIIiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NDY4IGxpYi9jaGVja291dF9vcC50Y2w6NDcyCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUwMyBsaWIvY2hlY2tvdXRfb3AudGNsOjUwNwogIywgdGNsLWZvcm1hdAogbXNnaWQgIkNoZWNrZWQgb3V0ICclcycuIgogbXNnc3RyICInJXMnIOOCkuODgeOCp+ODg+OCr+OCouOCpuODiOOBl+OBvuOBl+OBnyIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MDAKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTM1CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiUmVzZXR0aW5nICclcycgdG8gJyVzJyB3aWxsIGxvc2UgdGhlIGZvbGxvd2luZyBjb21taXRzOiIKIG1zZ3N0ciAiJyVzJyDjgpIgJyVzJyDjgavjg6rjgrvjg4Pjg4jjgZnjgovjgajjgIHku6XkuIvjga7jgrPjg5/jg4Pjg4jjgYzlpLHjgarjgo/jgozjgb7jgZk6IgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUyMgorIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NTcKIG1zZ2lkICJSZWNvdmVyaW5nIGxvc3QgY29tbWl0cyBtYXkgbm90IGJlIGVhc3kuIgogbXNnc3RyICLlpLHjgarjgo/jgozjgZ/jgrPjg5/jg4Pjg4jjgpLlm57lvqnjgZnjgovjga7jga/nsKHljZjjgafjga/jgYLjgorjgb7jgZvjgpPjgIIiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTI3CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2MgogIywgdGNsLWZvcm1hdAogbXNnaWQgIlJlc2V0ICclcyc/IgogbXNnc3RyICInJXMnIOOCkuODquOCu+ODg+ODiOOBl+OBvuOBmeOBi++8nyIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MzIgbGliL21lcmdlLnRjbDoxNjQgbGliL3Rvb2xzX2RsZy50Y2w6MzQzCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2NyBsaWIvbWVyZ2UudGNsOjE2NCBsaWIvdG9vbHNfZGxnLnRjbDozNDMKIG1zZ2lkICJWaXN1YWxpemUiCiBtc2dzdHIgIuWPr+imluWMliIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo2MDAKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NjM1CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiIgogIkZhaWxlZCB0byBzZXQgY3VycmVudCBicmFuY2guXG4iCkBAIC0xMDA5LDcgKzEwNDcsNyBAQAogbXNnaWQgIkdpdCBHdWkiCiBtc2dzdHIgIkdpdCBHVUkiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozODIKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozODYKIG1zZ2lkICJDcmVhdGUgTmV3IFJlcG9zaXRvcnkiCiBtc2dzdHIgIuaWsOOBl+OBhOODquODneOCuOODiOODquOCkuS9nOOCiyIKIApAQCAtMTAxNyw3ICsxMDU1LDcgQEAKIG1zZ2lkICJOZXcuLi4iCiBtc2dzdHIgIuaWsOimj+KApiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDAgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NjUKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDcxCiBtc2dpZCAiQ2xvbmUgRXhpc3RpbmcgUmVwb3NpdG9yeSIKIG1zZ3N0ciAi5pei5a2Y44Oq44Od44K444OI44Oq44KS6KSH6KO944GZ44KLIgogCkBAIC0xMDI1LDcgKzEwNjMsNyBAQAogbXNnaWQgIkNsb25lLi4uIgogbXNnc3RyICLopIfoo73igKYiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTEzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTgzCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTYKIG1zZ2lkICJPcGVuIEV4aXN0aW5nIFJlcG9zaXRvcnkiCiBtc2dzdHIgIuaXouWtmOODquODneOCuOODiOODquOCkumWi+OBjyIKIApAQCAtMTA0MSwxOTMgKzEwNzksMTkzIEBACiBtc2dpZCAiT3BlbiBSZWNlbnQgUmVwb3NpdG9yeToiCiBtc2dzdHIgIuacgOi/keS9v+OBo+OBn+ODquODneOCuOODiOODquOCkumWi+OBjyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMDIgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMDkKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzE2CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMwNiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMxMworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMjAKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlcG9zaXRvcnkgJXM6IgogbXNnc3RyICLjg6rjg53jgrjjg4jjg6ogJXMg44KS5L2c6KO944Gn44GN44G+44Gb44KTOiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozODcKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzkxCiBtc2dpZCAiRGlyZWN0b3J5OiIKIG1zZ3N0ciAi44OH44Kj44Os44Kv44OI44OqOiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MTcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NDQKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxNworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MjMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NTAKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA1MgogbXNnaWQgIkdpdCBSZXBvc2l0b3J5IgogbXNnc3RyICJHSVQg44Oq44Od44K444OI44OqIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0MgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NDgKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJEaXJlY3RvcnkgJXMgYWxyZWFkeSBleGlzdHMuIgogbXNnc3RyICLjg4fjgqPjg6zjgq/jg4jjg6ogJyVzJyDjga/ml6LjgavlrZjlnKjjgZfjgb7jgZnjgIIiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQ2CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ1MgogIywgdGNsLWZvcm1hdAogbXNnaWQgIkZpbGUgJXMgYWxyZWFkeSBleGlzdHMuIgogbXNnc3RyICLjg5XjgqHjgqTjg6sgJyVzJyDjga/ml6LjgavlrZjlnKjjgZfjgb7jgZnjgIIiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDYwCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ2NgogbXNnaWQgIkNsb25lIgogbXNnc3RyICLopIfoo70iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDczCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3OQogbXNnaWQgIlNvdXJjZSBMb2NhdGlvbjoiCiBtc2dzdHIgIuOCveODvOOCueOBruS9jee9riIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0ODQKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDkwCiBtc2dpZCAiVGFyZ2V0IERpcmVjdG9yeToiCiBtc2dzdHIgIuWFiOODh+OCo+ODrOOCr+ODiOODqjoiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDk2CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwMgogbXNnaWQgIkNsb25lIFR5cGU6IgogbXNnc3RyICLopIfoo73mlrnlvI86IgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwMgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDgKIG1zZ2lkICJTdGFuZGFyZCAoRmFzdCwgU2VtaS1SZWR1bmRhbnQsIEhhcmRsaW5rcykiCiBtc2dzdHIgIuaomea6lijpq5jpgJ/jg7vkuK3lhpfplbfluqbjg7vjg4/jg7zjg4njg6rjg7Pjgq8pIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwOAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MTQKIG1zZ2lkICJGdWxsIENvcHkgKFNsb3dlciwgUmVkdW5kYW50IEJhY2t1cCkiCiBtc2dzdHIgIuWFqOikh+WGmSjkvY7pgJ/jg7vlhpfplbfjg5Djg4Pjgq/jgqLjg4Pjg5cpIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUxNAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MjAKIG1zZ2lkICJTaGFyZWQgKEZhc3Rlc3QsIE5vdCBSZWNvbW1lbmRlZCwgTm8gQmFja3VwKSIKIG1zZ3N0ciAi5YWx5pyJKOacgOmrmOmAn+ODu+mdnuaOqOWlqOODu+ODkOODg+OCr+OCouODg+ODl+eEoeOBlykiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTUwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTk3Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc0MyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgxMwotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDIzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAzMQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NTYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MDMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzQ5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODE5CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNTggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDY2CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiTm90IGEgR2l0IHJlcG9zaXRvcnk6ICVzIgogbXNnc3RyICJHaXQg44Oq44Od44K444OI44Oq44Gn44Gv44GC44KK44G+44Gb44KTOiAlcyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1ODYKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTkyCiBtc2dpZCAiU3RhbmRhcmQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgogbXNnc3RyICLmqJnmupbmlrnlvI/jga/lkIzkuIDoqIjnrpfmqZ/kuIrjga7jg6rjg53jgrjjg4jjg6rjgavjga7jgb/kvb/jgYjjgb7jgZnjgIIiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTkwCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU5NgogbXNnaWQgIlNoYXJlZCBvbmx5IGF2YWlsYWJsZSBmb3IgbG9jYWwgcmVwb3NpdG9yeS4iCiBtc2dzdHIgIuWFseacieaWueW8j+OBr+WQjOS4gOioiOeul+apn+S4iuOBruODquODneOCuOODiOODquOBq+OBruOBv+S9v+OBiOOBvuOBmeOAgiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MTEKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjE3CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiTG9jYXRpb24gJXMgYWxyZWFkeSBleGlzdHMuIgogbXNnc3RyICInJXMnIOOBr+aXouOBq+WtmOWcqOOBl+OBvuOBmeOAgiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MjIKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjI4CiBtc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBvcmlnaW4iCiBtc2dzdHIgIm9yaWdpbiDjgpLoqK3lrprjgafjgY3jgb7jgZvjgpPjgafjgZfjgZ8iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjM0CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0MAogbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCiBtc2dzdHIgIuOCquODluOCuOOCp+OCr+ODiOOCkuaVsOOBiOOBpuOBhOOBvuOBmSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MzUKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjQxCiBtc2dpZCAiYnVja2V0cyIKIG1zZ3N0ciAi44OQ44Kx44OEIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY1OQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NjUKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3RzL2luZm8vYWx0ZXJuYXRlczogJXMiCiBtc2dzdHIgIm9iamVjdHMvaW5mby9hbHRlcm5hdGVzIOOCkuikh+WGmeOBp+OBjeOBvuOBm+OCkzogJXMiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Njk1CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcwMQogIywgdGNsLWZvcm1hdAogbXNnaWQgIk5vdGhpbmcgdG8gY2xvbmUgZnJvbSAlcy4iCiBtc2dzdHIgIiVzIOOBi+OCieikh+ijveOBmeOCi+WGheWuueOBr+OBguOCiuOBvuOBm+OCkyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2OTcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTEKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTIzCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcwMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjkKIG1zZ2lkICJUaGUgJ21hc3RlcicgYnJhbmNoIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4iCiBtc2dzdHIgIidtYXN0ZXInIOODluODqeODs+ODgeOBjOWIneacn+WMluOBleOCjOOBpuOBhOOBvuOBm+OCkyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MTAKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzE2CiBtc2dpZCAiSGFyZGxpbmtzIGFyZSB1bmF2YWlsYWJsZS4gIEZhbGxpbmcgYmFjayB0byBjb3B5aW5nLiIKIG1zZ3N0ciAi44OP44O844OJ44Oq44Oz44Kv44GM5L2c44KM44Gq44GE44Gu44Gn44CB44Kz44OU44O844GX44G+44GZIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcyMgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MjgKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJDbG9uaW5nIGZyb20gJXMiCiBtc2dzdHIgIiVzIOOBi+OCieikh+ijveOBl+OBpuOBhOOBvuOBmSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NTMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzU5CiBtc2dpZCAiQ29weWluZyBvYmplY3RzIgogbXNnc3RyICLjgqrjg5bjgrjjgqfjgq/jg4jjgpLopIflhpnjgZfjgabjgYTjgb7jgZkiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzU0CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc2MAogbXNnaWQgIktpQiIKIG1zZ3N0ciAiS2lCIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc3OAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODQKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3Q6ICVzIgogbXNnc3RyICLjgqrjg5bjgrjjgqfjgq/jg4jjgpLopIflhpnjgafjgY3jgb7jgZvjgpM6ICVzIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc4OAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTQKIG1zZ2lkICJMaW5raW5nIG9iamVjdHMiCiBtc2dzdHIgIuOCquODluOCuOOCp+OCr+ODiOOCkumAo+e1kOOBl+OBpuOBhOOBvuOBmSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODkKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzk1CiBtc2dpZCAib2JqZWN0cyIKIG1zZ3N0ciAi44Kq44OW44K444Kn44Kv44OIIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc5NworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MDMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJVbmFibGUgdG8gaGFyZGxpbmsgb2JqZWN0OiAlcyIKIG1zZ3N0ciAi44Kq44OW44K444Kn44Kv44OI44KS44OP44O844OJ44Oq44Oz44Kv44Gn44GN44G+44Gb44KTOiAlcyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NTIKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODU4CiBtc2dpZCAiQ2Fubm90IGZldGNoIGJyYW5jaGVzIGFuZCBvYmplY3RzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKIG1zZ3N0ciAi44OW44Op44Oz44OB44KE44Kq44OW44K444Kn44Kv44OI44KS5Y+W5b6X44Gn44GN44G+44Gb44KT44CC44Kz44Oz44K944O844Or5Ye65Yqb44KS6KaL44Gm5LiL44GV44GEIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg2MworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NjkKIG1zZ2lkICJDYW5ub3QgZmV0Y2ggdGFncy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCiBtc2dzdHIgIuOCv+OCsOOCkuWPluW+l+OBp+OBjeOBvuOBm+OCk+OAguOCs+ODs+OCveODvOODq+WHuuWKm+OCkuimi+OBpuS4i+OBleOBhCIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4ODcKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODkzCiBtc2dpZCAiQ2Fubm90IGRldGVybWluZSBIRUFELiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKIG1zZ3N0ciAiSEVBRCDjgpLnorrlrprjgafjgY3jgb7jgZvjgpPjgILjgrPjg7Pjgr3jg7zjg6vlh7rlipvjgpLopovjgabkuIvjgZXjgYQiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODk2CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwMgogIywgdGNsLWZvcm1hdAogbXNnaWQgIlVuYWJsZSB0byBjbGVhbnVwICVzIgogbXNnc3RyICIlcyDjgpLmjoPpmaTjgafjgY3jgb7jgZvjgpMiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTAyCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwOAogbXNnaWQgIkNsb25lIGZhaWxlZC4iCiBtc2dzdHIgIuikh+WGmeOBq+WkseaVl+OBl+OBvuOBl+OBn+OAgiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MDkKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTE1CiBtc2dpZCAiTm8gZGVmYXVsdCBicmFuY2ggb2J0YWluZWQuIgogbXNnc3RyICLjg4fjg5Xjgqnjg7zjg6vjg4jjg7vjg5bjg6njg7Pjg4HjgYzlj5blvpfjgZXjgozjgb7jgZvjgpPjgafjgZfjgZ8iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTIwCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyNgogIywgdGNsLWZvcm1hdAogbXNnaWQgIkNhbm5vdCByZXNvbHZlICVzIGFzIGEgY29tbWl0LiIKIG1zZ3N0ciAiJXMg44KS44Kz44Of44OD44OI44Go44GX44Gm6Kej6YeI44Gn44GN44G+44Gb44KTIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzMgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MzgKIG1zZ2lkICJDcmVhdGluZyB3b3JraW5nIGRpcmVjdG9yeSIKIG1zZ3N0ciAi5L2c5qWt44OH44Kj44Os44Kv44OI44Oq44KS5L2c5oiQ44GX44Gm44GE44G+44GZIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzMyBsaWIvaW5kZXgudGNsOjY1IGxpYi9pbmRleC50Y2w6MTI4Ci0jOiBsaWIvaW5kZXgudGNsOjE5NgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MzkgbGliL2luZGV4LnRjbDo2NyBsaWIvaW5kZXgudGNsOjEzMAorIzogbGliL2luZGV4LnRjbDoxOTgKIG1zZ2lkICJmaWxlcyIKIG1zZ3N0ciAi44OV44Kh44Kk44OrIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk2MgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NjgKIG1zZ2lkICJJbml0aWFsIGZpbGUgY2hlY2tvdXQgZmFpbGVkLiIKIG1zZ3N0ciAi5Yid5pyf44OB44Kn44OD44Kv44Ki44Km44OI44Gr5aSx5pWX44GX44G+44GX44GfIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk3OAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDExCiBtc2dpZCAiT3BlbiIKIG1zZ3N0ciAi6ZaL44GPIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk4OAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDIxCiBtc2dpZCAiUmVwb3NpdG9yeToiCiBtc2dzdHIgIuODquODneOCuOODiOODqjoiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAzNworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDcyCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiRmFpbGVkIHRvIG9wZW4gcmVwb3NpdG9yeSAlczoiCiBtc2dzdHIgIuODquODneOCuOODiOODqiAlcyDjgpLplovjgZHjgb7jgZvjgpM6IgpAQCAtMTI5OCwxOSArMTMzNiwyNCBAQAogIuePvuWcqOOBr+OBvuOBoOODnuODvOOCuOOBrumAlOS4reOBp+OBmeOAguWFiOOBq+OBk+OBruODnuODvOOCuOOCkuS4reatouOBl+OBquOBhOOBqOOAgeWJjeOBruOCs+ODn+ODg+ODiOOBruioguatoyIKICLjga/jgafjgY3jgb7jgZvjgpNcbiIKIAotIzogbGliL2NvbW1pdC50Y2w6NDkKKyM6IGxpYi9jb21taXQudGNsOjQ4CiBtc2dpZCAiRXJyb3IgbG9hZGluZyBjb21taXQgZGF0YSBmb3IgYW1lbmQ6IgogbXNnc3RyICLoqILmraPjgZnjgovjgrPjg5/jg4Pjg4jjga7jg4fjg7zjgr/jgpLoqq3jgoHjgb7jgZvjgpM6IgogCi0jOiBsaWIvY29tbWl0LnRjbDo3NgorIzogbGliL2NvbW1pdC50Y2w6NzUKIG1zZ2lkICJVbmFibGUgdG8gb2J0YWluIHlvdXIgaWRlbnRpdHk6IgogbXNnc3RyICLjg6bjg7zjgrbjga7mraPkvZPjgpLnorroqo3jgafjgY3jgb7jgZvjgpM6IgogCi0jOiBsaWIvY29tbWl0LnRjbDo4MQorIzogbGliL2NvbW1pdC50Y2w6ODAKIG1zZ2lkICJJbnZhbGlkIEdJVF9DT01NSVRURVJfSURFTlQ6IgogbXNnc3RyICJHSVRfQ09NTUlUVEVSX0lERU5UIOOBjOeEoeWKueOBp+OBmToiCiAKLSM6IGxpYi9jb21taXQudGNsOjEzMworIzogbGliL2NvbW1pdC50Y2w6MTI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAid2FybmluZzogVGNsIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RpbmcgJyVzJy4iCittc2dzdHIgIuitpuWRijogVGNsIOOBr+OCqOODs+OCs+ODvOODh+OCo+ODs+OCsCAnJXMnIOOCkuOCteODneODvOODiOOBl+OBpuOBhOOBvuOBm+OCkyIKKworIzogbGliL2NvbW1pdC50Y2w6MTQ5CiBtc2dpZCAiIgogIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgogIlxuIgpAQCAtMTMyNiw3ICsxMzY5LDcgQEAKICJcbiIKICLoh6rli5XnmoTjgavlho3jgrnjgq3jg6Pjg7PjgpLplovlp4vjgZfjgb7jgZnjgIJcbiIKIAotIzogbGliL2NvbW1pdC50Y2w6MTU2CisjOiBsaWIvY29tbWl0LnRjbDoxNzIKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiVW5tZXJnZWQgZmlsZXMgY2Fubm90IGJlIGNvbW1pdHRlZC5cbiIKQEAgLTEzMzksNyArMTM4Miw3IEBACiAi44OV44Kh44Kk44OrICVzIOOBq+OBr+ODnuODvOOCuOihneeqgeOBjOaui+OBo+OBpuOBhOOBvuOBmeOAguOBvuOBmuino+axuuOBl+OBpuOCs+ODn+ODg+ODiOS6iOWumuOBq+WKoOOBiOOCi+W/hSIKICLopoHjgYzjgYLjgorjgb7jgZnjgIJcbiIKIAotIzogbGliL2NvbW1pdC50Y2w6MTY0CisjOiBsaWIvY29tbWl0LnRjbDoxODAKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiVW5rbm93biBmaWxlIHN0YXRlICVzIGRldGVjdGVkLlxuIgpAQCAtMTM1MCw3ICsxMzkzLDcgQEAKICJcbiIKICLjg5XjgqHjgqTjg6sgJXMg44Gv5pys44OX44Ot44Kw44Op44Og44Gn44Gv44Kz44Of44OD44OI44Gn44GN44G+44Gb44KT44CCXG4iCiAKLSM6IGxpYi9jb21taXQudGNsOjE3MgorIzogbGliL2NvbW1pdC50Y2w6MTg4CiBtc2dpZCAiIgogIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgogIlxuIgpAQCAtMTM2MCw3ICsxNDAzLDcgQEAKICJcbiIKICLmnIDkvY7kuIDjgaTjga7lpInmm7TjgpLjgrPjg5/jg4Pjg4jkuojlrprjgavliqDjgYjjgabjgYvjgonjgrPjg5/jg4Pjg4jjgZfjgabkuIvjgZXjgYTjgIJcbiIKIAotIzogbGliL2NvbW1pdC50Y2w6MTg3CisjOiBsaWIvY29tbWl0LnRjbDoyMDMKIG1zZ2lkICIiCiAiUGxlYXNlIHN1cHBseSBhIGNvbW1pdCBtZXNzYWdlLlxuIgogIlxuIgpAQCAtMTM3OCw0NSArMTQyMSw0MCBAQAogIi0g56ys77yS6KGMOiDnqbrnmb1cbiIKICItIOaui+OCiuOBruihjDog44Gq44Gc44CB44GT44Gu5aSJ5pu044GM6Imv44GE5aSJ5pu044GL44CB44Gu6Kqs5piO44CCXG4iCiAKLSM6IGxpYi9jb21taXQudGNsOjIxMQotIywgdGNsLWZvcm1hdAotbXNnaWQgIndhcm5pbmc6IFRjbCBkb2VzIG5vdCBzdXBwb3J0IGVuY29kaW5nICclcycuIgotbXNnc3RyICLorablkYo6IFRjbCDjga/jgqjjg7PjgrPjg7zjg4fjgqPjg7PjgrAgJyVzJyDjgpLjgrXjg53jg7zjg4jjgZfjgabjgYTjgb7jgZvjgpMiCi0KLSM6IGxpYi9jb21taXQudGNsOjIyNworIzogbGliL2NvbW1pdC50Y2w6MjM0CiBtc2dpZCAiQ2FsbGluZyBwcmUtY29tbWl0IGhvb2suLi4iCiBtc2dzdHIgIuOCs+ODn+ODg+ODiOWJjeODleODg+OCr+OCkuWun+ihjOS4reODu+ODu+ODuyIKIAotIzogbGliL2NvbW1pdC50Y2w6MjQyCisjOiBsaWIvY29tbWl0LnRjbDoyNDkKIG1zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgcHJlLWNvbW1pdCBob29rLiIKIG1zZ3N0ciAi44Kz44Of44OD44OI5YmN44OV44OD44Kv44GM44Kz44Of44OD44OI44KS5ouS5ZCm44GX44G+44GX44GfIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyNjUKKyM6IGxpYi9jb21taXQudGNsOjI3MgogbXNnaWQgIkNhbGxpbmcgY29tbWl0LW1zZyBob29rLi4uIgogbXNnc3RyICLjgrPjg5/jg4Pjg4jjg7vjg6Hjg4Pjgrvjg7zjgrjjg7vjg5Xjg4Pjgq/jgpLlrp/ooYzkuK3jg7vjg7vjg7siCiAKLSM6IGxpYi9jb21taXQudGNsOjI4MAorIzogbGliL2NvbW1pdC50Y2w6Mjg3CiBtc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IGNvbW1pdC1tc2cgaG9vay4iCiBtc2dzdHIgIuOCs+ODn+ODg+ODiOODu+ODoeODg+OCu+ODvOOCuOODu+ODleODg+OCr+OBjOOCs+ODn+ODg+ODiOOCkuaLkuWQpuOBl+OBvuOBl+OBnyIKIAotIzogbGliL2NvbW1pdC50Y2w6MjkzCisjOiBsaWIvY29tbWl0LnRjbDozMDAKIG1zZ2lkICJDb21taXR0aW5nIGNoYW5nZXMuLi4iCiBtc2dzdHIgIuWkieabtOeCueOCkuOCs+ODn+ODg+ODiOS4reODu+ODu+ODuyIKIAotIzogbGliL2NvbW1pdC50Y2w6MzA5CisjOiBsaWIvY29tbWl0LnRjbDozMTYKIG1zZ2lkICJ3cml0ZS10cmVlIGZhaWxlZDoiCiBtc2dzdHIgIndyaXRlLXRyZWUg44GM5aSx5pWX44GX44G+44GX44GfOiIKIAotIzogbGliL2NvbW1pdC50Y2w6MzEwIGxpYi9jb21taXQudGNsOjM1NCBsaWIvY29tbWl0LnRjbDozNzQKKyM6IGxpYi9jb21taXQudGNsOjMxNyBsaWIvY29tbWl0LnRjbDozNjEgbGliL2NvbW1pdC50Y2w6MzgyCiBtc2dpZCAiQ29tbWl0IGZhaWxlZC4iCiBtc2dzdHIgIuOCs+ODn+ODg+ODiOOBq+WkseaVl+OBl+OBvuOBl+OBn+OAgiIKIAotIzogbGliL2NvbW1pdC50Y2w6MzI3CisjOiBsaWIvY29tbWl0LnRjbDozMzQKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJDb21taXQgJXMgYXBwZWFycyB0byBiZSBjb3JydXB0IgogbXNnc3RyICLjgrPjg5/jg4Pjg4ggJXMg44Gv5aOK44KM44Gm44GE44G+44GZIgogCi0jOiBsaWIvY29tbWl0LnRjbDozMzIKKyM6IGxpYi9jb21taXQudGNsOjMzOQogbXNnaWQgIiIKICJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKICJcbiIKQEAgLTE0MzAsMTkgKzE0NjgsMTkgQEAKICJcbiIKICLoh6rli5XnmoTjgavlho3jgrnjgq3jg6Pjg7PjgpLplovlp4vjgZfjgb7jgZnjgIJcbiIKIAotIzogbGliL2NvbW1pdC50Y2w6MzM5CisjOiBsaWIvY29tbWl0LnRjbDozNDYKIG1zZ2lkICJObyBjaGFuZ2VzIHRvIGNvbW1pdC4iCiBtc2dzdHIgIuOCs+ODn+ODg+ODiOOBmeOCi+WkieabtOOBjOOBguOCiuOBvuOBm+OCk+OAgiIKIAotIzogbGliL2NvbW1pdC50Y2w6MzUzCisjOiBsaWIvY29tbWl0LnRjbDozNjAKIG1zZ2lkICJjb21taXQtdHJlZSBmYWlsZWQ6IgogbXNnc3RyICJjb21taXQtdHJlZSDjgYzlpLHmlZfjgZfjgb7jgZfjgZ86IgogCi0jOiBsaWIvY29tbWl0LnRjbDozNzMKKyM6IGxpYi9jb21taXQudGNsOjM4MQogbXNnaWQgInVwZGF0ZS1yZWYgZmFpbGVkOiIKIG1zZ3N0ciAidXBkYXRlLXJlZiDjgYzlpLHmlZfjgZfjgb7jgZfjgZ86IgogCi0jOiBsaWIvY29tbWl0LnRjbDo0NjEKKyM6IGxpYi9jb21taXQudGNsOjQ2OQogIywgdGNsLWZvcm1hdAogbXNnaWQgIkNyZWF0ZWQgY29tbWl0ICVzOiAlcyIKIG1zZ3N0ciAi44Kz44Of44OD44OIICVzIOOCkuS9nOaIkOOBl+OBvuOBl+OBnzogJXMiCkBAIC0xNDk1LDIwICsxNTMzLDE5IEBACiBtc2dpZCAiVmVyaWZ5aW5nIHRoZSBvYmplY3QgZGF0YWJhc2Ugd2l0aCBmc2NrLW9iamVjdHMiCiBtc2dzdHIgImZzY2stb2JqZWN0cyDjgafjgqrjg5bjgrjjgqfjgq/jg4jjg7vjg4fjg7zjgr/jg5njg7zjgrnjgpLmpJzoqLzjgZfjgabjgYTjgb7jgZkiCiAKLSM6IGxpYi9kYXRhYmFzZS50Y2w6MTA4CisjOiBsaWIvZGF0YWJhc2UudGNsOjEwNwogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICJUaGlzIHJlcG9zaXRvcnkgY3VycmVudGx5IGhhcyBhcHByb3hpbWF0ZWx5ICVpIGxvb3NlIG9iamVjdHMuXG4iCiAiXG4iCiAiVG8gbWFpbnRhaW4gb3B0aW1hbCBwZXJmb3JtYW5jZSBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBjb21wcmVzcyAiCi0idGhlIGRhdGFiYXNlIHdoZW4gbW9yZSB0aGFuICVpIGxvb3NlIG9iamVjdHMgZXhpc3QuXG4iCisidGhlIGRhdGFiYXNlLlxuIgogIlxuIgogIkNvbXByZXNzIHRoZSBkYXRhYmFzZSBub3c/IgogbXNnc3RyICIiCiAi44GT44Gu44Oq44Od44K444OI44Oq44Gr44Gv44GK44GK44KI44GdICVpIOWAi+OBruWAi+WIpeOCquODluOCuOOCp+OCr+ODiOOBjOOBguOCiuOBvuOBmVxuIgogIlxuIgotIuacgOmBqeOBquaAp+iDveOCkuS/neOBpOOBn+OCgeOBq+OAgSVpIOWAi+S7peS4iuOBruWAi+WIpeOCquODluOCuOOCp+OCr+ODiOOCkuS9nOOCi+avjuOBq+ODh+ODvOOCv+ODmeODvOOCueOCkuWcpyIKLSLnuK7jgZnjgovjgZPjgajjgpLmjqjlpajjgZfjgb7jgZlcbiIKKyLmnIDpganjgarmgKfog73jgpLkv53jgaTjgZ/jgoHjgavjgIHjg4fjg7zjgr/jg5njg7zjgrnjgpLlnKfnuK7jgZnjgovjgZPjgajjgpLmjqjlpajjgZfjgb7jgZlcbiIKICJcbiIKICLjg4fjg7zjgr/jg5njg7zjgrnjgpLlnKfnuK7jgZfjgb7jgZnjgYvvvJ8iCiAKQEAgLTE1MTcsNyArMTU1NCw3IEBACiBtc2dpZCAiSW52YWxpZCBkYXRlIGZyb20gR2l0OiAlcyIKIG1zZ3N0ciAiR2l0IOOBi+OCieWHuuOBn+eEoeWKueOBquaXpeS7mDogJXMiCiAKLSM6IGxpYi9kaWZmLnRjbDo1OQorIzogbGliL2RpZmYudGNsOjY0CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiIgogIk5vIGRpZmZlcmVuY2VzIGRldGVjdGVkLlxuIgpAQCAtMTUzOSwxMiArMTU3NiwxMiBAQAogIlxuIgogIuWQjOanmOOBqueKtuaFi+OBruODleOCoeOCpOODq+OCkuaOouOBmeOBn+OCgeOBq+OAgeiHquWLleeahOOBq+WGjeOCueOCreODo+ODs+OCkumWi+Wni+OBl+OBvuOBmeOAgiIKIAotIzogbGliL2RpZmYudGNsOjk5CisjOiBsaWIvZGlmZi50Y2w6MTA0CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiTG9hZGluZyBkaWZmIG9mICVzLi4uIgogbXNnc3RyICIlcyDjga7lpInmm7TngrnjgpLjg63jg7zjg4nkuK3igKYiCiAKLSM6IGxpYi9kaWZmLnRjbDoxMjAKKyM6IGxpYi9kaWZmLnRjbDoxMjUKIG1zZ2lkICIiCiAiTE9DQUw6IGRlbGV0ZWRcbiIKICJSRU1PVEU6XG4iCkBAIC0xNTUyLDcgKzE1ODksNyBAQAogIkxPQ0FMOiDliYrpmaRcbiIKICJSZW1vdGU6XG4iCiAKLSM6IGxpYi9kaWZmLnRjbDoxMjUKKyM6IGxpYi9kaWZmLnRjbDoxMzAKIG1zZ2lkICIiCiAiUkVNT1RFOiBkZWxldGVkXG4iCiAiTE9DQUw6XG4iCkBAIC0xNTYwLDMyICsxNTk3LDMyIEBACiAiUkVNT1RFOiDliYrpmaRcbiIKICJMT0NBTDpcbiIKIAotIzogbGliL2RpZmYudGNsOjEzMgorIzogbGliL2RpZmYudGNsOjEzNwogbXNnaWQgIkxPQ0FMOlxuIgogbXNnc3RyICJMT0NBTDpcbiIKIAotIzogbGliL2RpZmYudGNsOjEzNQorIzogbGliL2RpZmYudGNsOjE0MAogbXNnaWQgIlJFTU9URTpcbiIKIG1zZ3N0ciAiUkVNT1RFXG4iCiAKLSM6IGxpYi9kaWZmLnRjbDoxOTcgbGliL2RpZmYudGNsOjI5NgorIzogbGliL2RpZmYudGNsOjIwMiBsaWIvZGlmZi50Y2w6MzE5CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgJXMiCiBtc2dzdHIgIiVzIOOCkuihqOekuuOBp+OBjeOBvuOBm+OCkyIKIAotIzogbGliL2RpZmYudGNsOjE5OAorIzogbGliL2RpZmYudGNsOjIwMwogbXNnaWQgIkVycm9yIGxvYWRpbmcgZmlsZToiCiBtc2dzdHIgIuODleOCoeOCpOODq+OCkuiqreOCgOmam+OBruOCqOODqeODvOOBp+OBmToiCiAKLSM6IGxpYi9kaWZmLnRjbDoyMDUKKyM6IGxpYi9kaWZmLnRjbDoyMTAKIG1zZ2lkICJHaXQgUmVwb3NpdG9yeSAoc3VicHJvamVjdCkiCiBtc2dzdHIgIkdpdCDjg6rjg53jgrjjg4jjg6oo44K144OW44OX44Ot44K444Kn44Kv44OIKSIKIAotIzogbGliL2RpZmYudGNsOjIxNworIzogbGliL2RpZmYudGNsOjIyMgogbXNnaWQgIiogQmluYXJ5IGZpbGUgKG5vdCBzaG93aW5nIGNvbnRlbnQpLiIKIG1zZ3N0ciAiKiDjg5DjgqTjg4rjg6rjg5XjgqHjgqTjg6so5YaF5a6544Gv6KGo56S644GX44G+44Gb44KTKSIKIAotIzogbGliL2RpZmYudGNsOjIyMgorIzogbGliL2RpZmYudGNsOjIyNwogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICIqIFVudHJhY2tlZCBmaWxlIGlzICVkIGJ5dGVzLlxuIgpAQCAtMTU5NCw3ICsxNjMxLDcgQEAKICIqIOeuoeeQhuWkluOBruODleOCoeOCpOODq+OBruWkp+OBjeOBleOBryAlZCDjg5DjgqTjg4jjgafjgZnjgIJcbiIKICIqIOacgOWIneOBriAlZCDjg5DjgqTjg4jjgaDjgZHooajnpLrjgZfjgabjgYTjgb7jgZnjgIJcbiIKIAotIzogbGliL2RpZmYudGNsOjIyOAorIzogbGliL2RpZmYudGNsOjIzMwogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICJcbiIKQEAgLTE2MDYsMTkgKzE2NDMsMTkgQEAKICIqICVzIOOBr+euoeeQhuWkluOBruODleOCoeOCpOODq+OCkuOBk+OBk+OBp+WIh+OCiuOBiuOBqOOBl+OBvuOBl+OBn+OAglxuIgogIiog5YWo5L2T44KS6KaL44KL44Gr44Gv5aSW6YOo44Ko44OH44Kj44K/44KS5L2/44Gj44Gm44GP44Gg44GV44GE44CCXG4iCiAKLSM6IGxpYi9kaWZmLnRjbDo0MzYKKyM6IGxpYi9kaWZmLnRjbDo0ODIKIG1zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBodW5rLiIKIG1zZ3N0ciAi6YG45oqe44GV44KM44Gf44OR44OD44OB44KS44Kz44Of44OD44OI5LqI5a6a44GL44KJ5aSW44Gb44G+44Gb44KT44CCIgogCi0jOiBsaWIvZGlmZi50Y2w6NDQzCisjOiBsaWIvZGlmZi50Y2w6NDg5CiBtc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGh1bmsuIgogbXNnc3RyICLpgbjmip7jgZXjgozjgZ/jg5Hjg4Pjg4HjgpLjgrPjg5/jg4Pjg4jkuojlrprjgavliqDjgYjjgonjgozjgb7jgZvjgpPjgIIiCiAKLSM6IGxpYi9kaWZmLnRjbDo1MDkKKyM6IGxpYi9kaWZmLnRjbDo1NjgKIG1zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBsaW5lLiIKIG1zZ3N0ciAi6YG45oqe44GV44KM44Gf44OR44OD44OB6KGM44KS44Kz44Of44OD44OI5LqI5a6a44GL44KJ5aSW44Gb44G+44Gb44KT44CCIgogCi0jOiBsaWIvZGlmZi50Y2w6NTE3CisjOiBsaWIvZGlmZi50Y2w6NTc2CiBtc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGxpbmUuIgogbXNnc3RyICLpgbjmip7jgZXjgozjgZ/jg5Hjg4Pjg4HooYzjgpLjgrPjg5/jg4Pjg4jkuojlrprjgavliqDjgYjjgonjgozjgb7jgZvjgpPjgIIiCiAKQEAgLTE2NTUsNyArMTY5Miw3IEBACiBtc2dpZCAiSW5kZXggRXJyb3IiCiBtc2dzdHIgIue0ouW8leOCqOODqeODvCIKIAotIzogbGliL2luZGV4LnRjbDoyMQorIzogbGliL2luZGV4LnRjbDoxNwogbXNnaWQgIiIKICJVcGRhdGluZyB0aGUgR2l0IGluZGV4IGZhaWxlZC4gIEEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvICIKICJyZXN5bmNocm9uaXplIGdpdC1ndWkuIgpAQCAtMTY2Myw3ICsxNzAwLDcgQEAKICJHSVQg44Kk44Oz44OH44OD44Kv44K544Gu5pu05paw44GM5aSx5pWX44GX44G+44GX44Gf44CCZ2l0LWd1aSDjgajlkIzmnJ/jgpLjgajjgovjgZ/jgoHjgavlho3jgrnjgq3jg6Pjg7PjgZciCiAi44G+44GZ44CCIgogCi0jOiBsaWIvaW5kZXgudGNsOjI3CisjOiBsaWIvaW5kZXgudGNsOjI4CiBtc2dpZCAiQ29udGludWUiCiBtc2dzdHIgIue2muihjCIKIApAQCAtMTY3MSw0MyArMTcwOCw0MyBAQAogbXNnaWQgIlVubG9jayBJbmRleCIKIG1zZ3N0ciAi44Kk44Oz44OH44OD44Kv44K544Gu44Ot44OD44Kv6Kej6ZmkIgogCi0jOiBsaWIvaW5kZXgudGNsOjI4NworIzogbGliL2luZGV4LnRjbDoyODkKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJVbnN0YWdpbmcgJXMgZnJvbSBjb21taXQiCiBtc2dzdHIgIuOCs+ODn+ODg+ODiOOBi+OCiSAnJXMnIOOCkumZjeOCjeOBmSIKIAotIzogbGliL2luZGV4LnRjbDozMjYKKyM6IGxpYi9pbmRleC50Y2w6MzI4CiBtc2dpZCAiUmVhZHkgdG8gY29tbWl0LiIKIG1zZ3N0ciAi44Kz44Of44OD44OI5rqW5YKZ5a6M5LqGIgogCi0jOiBsaWIvaW5kZXgudGNsOjMzOQorIzogbGliL2luZGV4LnRjbDozNDEKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJBZGRpbmcgJXMiCiBtc2dzdHIgIuOCs+ODn+ODg+ODiOOBqyAlcyDjgpLliqDjgYjjgabjgYTjgb7jgZkiCiAKLSM6IGxpYi9pbmRleC50Y2w6Mzk2CisjOiBsaWIvaW5kZXgudGNsOjM5OAogIywgdGNsLWZvcm1hdAogbXNnaWQgIlJldmVydCBjaGFuZ2VzIGluIGZpbGUgJXM/IgogbXNnc3RyICLjg5XjgqHjgqTjg6sgJXMg44Gr44GX44Gf5aSJ5pu044KS5YWD44Gr5oi744GX44G+44GZ44GL77yfIgogCi0jOiBsaWIvaW5kZXgudGNsOjM5OAorIzogbGliL2luZGV4LnRjbDo0MDAKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiB0aGVzZSAlaSBmaWxlcz8iCiBtc2dzdHIgIuOBk+OCjOOCiSAlaSDlgIvjga7jg5XjgqHjgqTjg6vjgavjgZfjgZ/lpInmm7TjgpLlhYPjgavmiLvjgZfjgb7jgZnjgYvvvJ8iCiAKLSM6IGxpYi9pbmRleC50Y2w6NDA2CisjOiBsaWIvaW5kZXgudGNsOjQwOAogbXNnaWQgIkFueSB1bnN0YWdlZCBjaGFuZ2VzIHdpbGwgYmUgcGVybWFuZW50bHkgbG9zdCBieSB0aGUgcmV2ZXJ0LiIKIG1zZ3N0ciAi5aSJ5pu044KS5YWD44Gr5oi744GZ44Go44Kz44Of44OD44OI5LqI5a6a44GX44Gm44GE44Gq44GE5aSJ5pu044Gv5YWo44Gm5aSx44KP44KM44G+44GZ44CCIgogCi0jOiBsaWIvaW5kZXgudGNsOjQwOQorIzogbGliL2luZGV4LnRjbDo0MTEKIG1zZ2lkICJEbyBOb3RoaW5nIgogbXNnc3RyICLkvZXjgoLjgZfjgarjgYQiCiAKLSM6IGxpYi9pbmRleC50Y2w6NDI3CisjOiBsaWIvaW5kZXgudGNsOjQyOQogbXNnaWQgIlJldmVydGluZyBzZWxlY3RlZCBmaWxlcyIKIG1zZ3N0ciAi6YG45oqe44GV44KM44Gf44OV44Kh44Kk44Or44Gr44GX44Gf5aSJ5pu044KS5YWD44Gr5oi744GX44G+44GZIgogCi0jOiBsaWIvaW5kZXgudGNsOjQzMQorIzogbGliL2luZGV4LnRjbDo0MzMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJSZXZlcnRpbmcgJXMiCiBtc2dzdHIgIiVzIOOBq+OBl+OBn+WkieabtOOCkuWFg+OBq+aIu+OBl+OBvuOBmSIKQEAgLTE4ODMsNyArMTkyMCw4IEBACiAjOiBsaWIvbWVyZ2V0b29sLnRjbDo0NQogIywgdGNsLWZvcm1hdAogbXNnaWQgIkZpbGUgJXMgc2VlbXMgdG8gaGF2ZSB1bnJlc29sdmVkIGNvbmZsaWN0cywgc3RpbGwgc3RhZ2U/IgotbXNnc3RyICLjg5XjgqHjgqTjg6sgJXMg44Gr44Gv6Kej5rG644GX44Gm44GE44Gq44GE56u25ZCI6YOo5YiG44GM44G+44Gg44GC44KL44KI44GG44Gn44GZ44GM44CB44GE44GE44Gn44GZ44GLPyIKK21zZ3N0ciAiIgorIuODleOCoeOCpOODqyAlcyDjgavjga/op6PmsbrjgZfjgabjgYTjgarjgYTnq7blkIjpg6jliIbjgYzjgb7jgaDjgYLjgovjgojjgYbjgafjgZnjgYzjgIHjgYTjgYTjgafjgZnjgYs/IgogCiAjOiBsaWIvbWVyZ2V0b29sLnRjbDo2MAogIywgdGNsLWZvcm1hdApAQCAtMjE0MSw3ICsyMTc5LDggQEAKIG1zZ2lkICJEbyBub3Qga25vdyBob3cgdG8gaW5pdGlhbGl6ZSByZXBvc2l0b3J5IGF0IGxvY2F0aW9uICclcycuIgogbXNnc3RyICLjg6rjg53jgrjjg4jjg6ogJyVzJyDjgpLliJ3mnJ/ljJbjgafjgY3jgb7jgZvjgpPjgIIiCiAKLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNjMgbGliL3RyYW5zcG9ydC50Y2w6MjUgbGliL3RyYW5zcG9ydC50Y2w6NzEKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNjMgbGliL3RyYW5zcG9ydC50Y2w6MjUgbGliL3RyYW5zcG9ydC50Y2w6NjMKKyM6IGxpYi90cmFuc3BvcnQudGNsOjgxCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAicHVzaCAlcyIKIG1zZ3N0ciAiJXMg44KS44OX44OD44K344OlIgpAQCAtMjE1OSwxMSArMjE5OCwxMSBAQAogbXNnaWQgIkZyb20gUmVwb3NpdG9yeSIKIG1zZ3N0ciAi5YWD44Gu44Oq44Od44K444OI44OqIgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjUwIGxpYi90cmFuc3BvcnQudGNsOjEyMworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo1MCBsaWIvdHJhbnNwb3J0LnRjbDoxMzQKIG1zZ2lkICJSZW1vdGU6IgogbXNnc3RyICLjg6rjg6Ljg7zjg4g6IgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjY2IGxpYi90cmFuc3BvcnQudGNsOjEzOAorIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo2NiBsaWIvdHJhbnNwb3J0LnRjbDoxNDkKIG1zZ2lkICJBcmJpdHJhcnkgTG9jYXRpb246IgogbXNnc3RyICLku7vmhI/jga7kvY3nva46IgogCkBAIC0yMTc5LDEwICsyMjE4LDYgQEAKIG1zZ2lkICJNZXJnZWQgSW50bzoiCiBtc2dzdHIgIuODnuODvOOCuOWFiDoiCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTE5Ci1tc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSBjaGVja3MpIgotbXNnc3RyICLnhKHmnaHku7bvvIjjg57jg7zjgrjmpJzmn7vjgpLjgZfjgarjgYTvvIkiCi0KICM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTUyCiBtc2dpZCAiQSBicmFuY2ggaXMgcmVxdWlyZWQgZm9yICdNZXJnZWQgSW50bycuIgogbXNnc3RyICIn44Oe44O844K45YWIJyDjgavjga/jg5bjg6njg7Pjg4HjgYzlv4XopoHjgafjgZnjgIIiCkBAIC0yMjExLDI2ICsyMjQ2LDE2IEBACiBtc2dpZCAiUGxlYXNlIHNlbGVjdCBvbmUgb3IgbW9yZSBicmFuY2hlcyB0byBkZWxldGUuIgogbXNnc3RyICLliYrpmaTjgZnjgovjg5bjg6njg7Pjg4HjgpLpgbjmip7jgZfjgabkuIvjgZXjgYTjgIIiCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjE2Ci1tc2dpZCAiIgotIlJlY292ZXJpbmcgZGVsZXRlZCBicmFuY2hlcyBpcyBkaWZmaWN1bHQuXG4iCi0iXG4iCi0iRGVsZXRlIHRoZSBzZWxlY3RlZCBicmFuY2hlcz8iCi1tc2dzdHIgIiIKLSLliYrpmaTjgZfjgZ/jg5bjg6njg7Pjg4HjgpLlm57lvqnjgZnjgovjga7jga/lm7Dpm6PjgafjgZnjgIJcbiIKLSJcbiIKLSLpgbjmip7jgZfjgZ/jg5bjg6njg7Pjg4HjgpLliYrpmaTjgZfjgaboia/jgYTjgafjgZnjgYvvvJ8iCi0KICM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjI2CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiRGVsZXRpbmcgYnJhbmNoZXMgZnJvbSAlcyIKIG1zZ3N0ciAiJXMg44GL44KJ44OW44Op44Oz44OB44KS5YmK6Zmk44GX44Gm44GE44G+44GZ44CCIgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI4NgorIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOTIKIG1zZ2lkICJObyByZXBvc2l0b3J5IHNlbGVjdGVkLiIKIG1zZ3N0ciAi44Oq44Od44K444OI44Oq44GM6YG45oqe44GV44KM44Gm44GE44G+44Gb44KT44CCIgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5MQorIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOTcKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJTY2FubmluZyAlcy4uLiIKIG1zZ3N0ciAiJXMg44KS44K544Kt44Oj44Oz44GX44Gm44GE44G+44GZ4oCmIgpAQCAtMjI1MSwxMSArMjI3NiwxMSBAQAogbXNnaWQgIkNhc2UtU2Vuc2l0aXZlIgogbXNnc3RyICLlpKfmloflrZflsI/mloflrZfjgpLljLrliKUiCiAKLSM6IGxpYi9zaG9ydGN1dC50Y2w6MjAgbGliL3Nob3J0Y3V0LnRjbDo2MQorIzogbGliL3Nob3J0Y3V0LnRjbDoyMSBsaWIvc2hvcnRjdXQudGNsOjYyCiBtc2dpZCAiQ2Fubm90IHdyaXRlIHNob3J0Y3V0OiIKIG1zZ3N0ciAi44K344On44O844OI44Kr44OD44OI44GM5pu444GR44G+44Gb44KTOiIKIAotIzogbGliL3Nob3J0Y3V0LnRjbDoxMzYKKyM6IGxpYi9zaG9ydGN1dC50Y2w6MTM3CiBtc2dpZCAiQ2Fubm90IHdyaXRlIGljb246IgogbXNnc3RyICLjgqLjgqTjgrPjg7PjgYzmm7jjgZHjgb7jgZvjgpM6IgogCkBAIC0yNTAxLDMwICsyNTI2LDMwIEBACiBtc2dpZCAiUHVzaGluZyAlcyAlcyB0byAlcyIKIG1zZ3N0ciAiJTMkcyDjgbggJTEkcyAlMiRzIOOCkuODl+ODg+OCt+ODpeOBl+OBpuOBhOOBvuOBmSIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6ODkKKyM6IGxpYi90cmFuc3BvcnQudGNsOjEwMAogbXNnaWQgIlB1c2ggQnJhbmNoZXMiCiBtc2dzdHIgIuODluODqeODs+ODgeOCkuODl+ODg+OCt+ODpSIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTAzCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMTQKIG1zZ2lkICJTb3VyY2UgQnJhbmNoZXMiCiBtc2dzdHIgIuWFg+OBruODluODqeODs+ODgSIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTIwCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMzEKIG1zZ2lkICJEZXN0aW5hdGlvbiBSZXBvc2l0b3J5IgogbXNnc3RyICLpgIHjgorlhYjjg6rjg53jgrjjg4jjg6oiCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjE1OAorIzogbGliL3RyYW5zcG9ydC50Y2w6MTY5CiBtc2dpZCAiVHJhbnNmZXIgT3B0aW9ucyIKIG1zZ3N0ciAi6YCa5L+h44Kq44OX44K344On44OzIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNjAKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE3MQogbXNnaWQgIkZvcmNlIG92ZXJ3cml0ZSBleGlzdGluZyBicmFuY2ggKG1heSBkaXNjYXJkIGNoYW5nZXMpIgogbXNnc3RyICLml6LlrZjjg5bjg6njg7Pjg4HjgpLkuIrmm7jjgY0o5aSJ5pu044KS56C05qOE44GZ44KL5Y+v6IO95oCn44GM44GC44KK44G+44GZKSIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTY0CisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNzUKIG1zZ2lkICJVc2UgdGhpbiBwYWNrIChmb3Igc2xvdyBuZXR3b3JrIGNvbm5lY3Rpb25zKSIKIG1zZ3N0ciAiVGhpbiBQYWNrIOOCkuS9v+OBhu+8iOmBheOBhOODjeODg+ODiOODr+ODvOOCr+aOpee2mu+8iSIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTY4CisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNzkKIG1zZ2lkICJJbmNsdWRlIHRhZ3MiCiBtc2dzdHIgIuOCv+OCsOOCkuWQq+OCgeOCiyIKZGlmZiAtLWdpdCBhL2dpdC1ndWkvcG8vcnUucG8gYi9naXQtZ3VpL3BvL3J1LnBvCmluZGV4IDBmZmM0YTQuLjM2NGMwNzQgMTAwNjQ0Ci0tLSBhL2dpdC1ndWkvcG8vcnUucG8KKysrIGIvZ2l0LWd1aS9wby9ydS5wbwpAQCAtOTAsMTIgKzkwLDE4IEBACiAKICM6IGdpdC1ndWkuc2g6MTM4NAogbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4iCi1tc2dzdHIgItCh0L7RhdGA0LDQvdC10L3QuNC1INC/0YDQtdGA0LLQsNC90L4g0L/RgNC+0LPRgNCw0LzQvNC+0Lkg0L/QvtC00LTQtdGA0LbQutC4INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8gcHJlcGFyZS1jb21taXQtbXNnIgorbXNnc3RyICIiCisi0KHQvtGF0YDQsNC90LXQvdC40LUg0L/RgNC10YDQstCw0L3QviDQv9GA0L7Qs9GA0LDQvNC80L7QuSDQv9C+0LTQtNC10YDQttC60Lgg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyBwcmVwYXJlLWNvbW1pdC1tc2ciCiAKICM6IGdpdC1ndWkuc2g6MTU0MiBsaWIvYnJvd3Nlci50Y2w6MjQ2CiBtc2dpZCAiUmVhZHkuIgogbXNnc3RyICLQk9C+0YLQvtCy0L4uIgogCisjOiBnaXQtZ3VpLnNoOjE3MjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEaXNwbGF5aW5nIG9ubHkgJXMgb2YgJXMgZmlsZXMuIgorbXNnc3RyICLQn9C+0LrQsNC30LDQvdC+ICVzINC40LcgJXMg0YTQsNC50LvQvtCyLiIKKwogIzogZ2l0LWd1aS5zaDoxODE5CiBtc2dpZCAiVW5tb2RpZmllZCIKIG1zZ3N0ciAi0J3QtSDQuNC30LzQtdC90LXQvdC+IgpAQCAtMTI5Nyw4ICsxMzAzLDggQEAKIG1zZ3N0ciAiIgogItCd0LXQstC+0LfQvNC+0LbQvdC+INC40YHQv9GA0LDQstC40YLRjCDRgdC+0YHRgtC+0Y/QvdC40LUg0LLQviDQstGA0LXQvNGPINC+0L/QtdGA0LDRhtC40Lgg0YHQu9C40Y/QvdC40Y8uXG4iCiAiXG4iCi0i0KLQtdC60YPRidC10LUg0YHQu9C40Y/QvdC40LUg0L3QtSDQt9Cw0LLQtdGA0YjQtdC90L4uINCd0LXQstC+0LfQvNC+0LbQvdC+INC40YHQv9GA0LDQstC40YLRjCDQv9GA0LXQtNGL0LTRg9GJ0LXQtSAiCi0i0YHQvtGF0YDQsNC90LXQvdC90L7QtSDRgdC+0YHRgtC+0Y/QvdC40LUsINC90LUg0L/RgNC10YDRi9Cy0LDRjyDRjdGC0YMg0L7Qv9C10YDQsNGG0LjRji5cbiIKKyLQotC10LrRg9GJ0LXQtSDRgdC70LjRj9C90LjQtSDQvdC1INC30LDQstC10YDRiNC10L3Qvi4g0J3QtdCy0L7Qt9C80L7QttC90L4g0LjRgdC/0YDQsNCy0LjRgtGMINC/0YDQtdC00YvQtNGD0YnQtdC1INGB0L7RhdGA0LDQvdC10L3QvdC+0LUgIgorItGB0L7RgdGC0L7Rj9C90LjQtSwg0L3QtSDQv9GA0LXRgNGL0LLQsNGPINGN0YLRgyDQvtC/0LXRgNCw0YbQuNGOLlxuIgogCiAjOiBsaWIvY29tbWl0LnRjbDo0OAogbXNnaWQgIkVycm9yIGxvYWRpbmcgY29tbWl0IGRhdGEgZm9yIGFtZW5kOiIKQEAgLTE3MjMsOCArMTcyOSw3IEBACiBtc2dzdHIgIiIKICLQndC10LLQvtC30LzQvtC20L3QviDQstGL0L/QvtC70L3QuNGC0Ywg0YHQu9C40Y/QvdC40LUg0LLQviDQstGA0LXQvNGPINC40YHQv9GA0LDQstC70LXQvdC40Y8uXG4iCiAiXG4iCi0i0JfQsNCy0LXRgNGI0LjRgtC1INC40YHQv9GA0LDQstC70LXQvdC40LUg0LTQsNC90L3QvtCz0L4g0YHQvtGB0YLQvtGP0L3QuNGPINC/0LXRgNC10LQg0LLRi9C/0L7Qu9C90LXQvdC40LXQvCDQvtC/0LXRgNCw0YbQuNC4ICIKLSLRgdC70LjRj9C90LjRjy5cbiIKKyLQl9Cw0LLQtdGA0YjQuNGC0LUg0LjRgdC/0YDQsNCy0LvQtdC90LjQtSDQtNCw0L3QvdC+0LPQviDRgdC+0YHRgtC+0Y/QvdC40Y8g0L/QtdGA0LXQtCDQstGL0L/QvtC70L3QtdC90LjQtdC8INC+0L/QtdGA0LDRhtC40Lgg0YHQu9C40Y/QvdC40Y8uXG4iCiAKICM6IGxpYi9tZXJnZS50Y2w6MjcKIG1zZ2lkICIiCkBAIC0xODg4LDggKzE4OTMsOCBAQAogIywgdGNsLWZvcm1hdAogbXNnaWQgIkZpbGUgJXMgc2VlbXMgdG8gaGF2ZSB1bnJlc29sdmVkIGNvbmZsaWN0cywgc3RpbGwgc3RhZ2U/IgogbXNnc3RyICIiCi0i0KTQsNC50LsgJXMg0LrQsNC20LXRgtGB0Y8g0YHQvtC00LXRgNC20LjRgiDQvdC10L7QsdGA0LDQsdC+0YLQsNC90YvQtSDQutC+0L3RhNC70LjQutGC0YsuICIKLSLQn9GA0L7QtNC+0LvQttC40YLRjCDQv9C+0LTQs9C+0YLQvtCy0LrRgyDQuiDRgdC+0YXRgNCw0L3QtdC90LjRjj8iCisi0KTQsNC50LsgJXMg0LrQsNC20LXRgtGB0Y8g0YHQvtC00LXRgNC20LjRgiDQvdC10L7QsdGA0LDQsdC+0YLQsNC90YvQtSDQutC+0L3RhNC70LjQutGC0YsuINCf0YDQvtC00L7Qu9C20LjRgtGMINC/0L7QtNCz0L7RgtC+0LLQutGDINC6ICIKKyLRgdC+0YXRgNCw0L3QtdC90LjRjj8iCiAKICM6IGxpYi9tZXJnZXRvb2wudGNsOjYwCiAjLCB0Y2wtZm9ybWF0CkBAIC0yMjEzLDggKzIyMTgsOCBAQAogIk9uZSBvciBtb3JlIG9mIHRoZSBtZXJnZSB0ZXN0cyBmYWlsZWQgYmVjYXVzZSB5b3UgaGF2ZSBub3QgZmV0Y2hlZCB0aGUgIgogIm5lY2Vzc2FyeSBjb21taXRzLiAgVHJ5IGZldGNoaW5nIGZyb20gJXMgZmlyc3QuIgogbXNnc3RyICIiCi0i0J3QtdC60L7RgtC+0YDRi9C1INGC0LXRgdGC0Ysg0L3QsCDRgdC70LjRj9C90LjQtSDQvdC1INC/0YDQvtGI0LvQuCwg0L/QvtGC0L7QvNGDINGH0YLQviDQktGLINC90LUgIgotItC/0L7Qu9GD0YfQuNC70Lgg0L3QtdC+0LHRhdC+0LTQuNC80YvQtSDRgdC+0YHRgtC+0Y/QvdC40Y8uINCf0L7Qv9GL0YLQsNC50YLQtdGB0Ywg0L/QvtC70YPRh9C40YLRjCDQuNGFINC40LcgJXMuIgorItCd0LXQutC+0YLQvtGA0YvQtSDRgtC10YHRgtGLINC90LAg0YHQu9C40Y/QvdC40LUg0L3QtSDQv9GA0L7RiNC70LgsINC/0L7RgtC+0LzRgyDRh9GC0L4g0JLRiyDQvdC1INC/0L7Qu9GD0YfQuNC70Lgg0L3QtdC+0LHRhdC+0LTQuNC80YvQtSAiCisi0YHQvtGB0YLQvtGP0L3QuNGPLiDQn9C+0L/Ri9GC0LDQudGC0LXRgdGMINC/0L7Qu9GD0YfQuNGC0Ywg0LjRhSDQuNC3ICVzLiIKIAogIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMDcKIG1zZ2lkICJQbGVhc2Ugc2VsZWN0IG9uZSBvciBtb3JlIGJyYW5jaGVzIHRvIGRlbGV0ZS4iCkBAIC0yMzgxLDggKzIzODYsOCBAQAogCiAjOiBsaWIvdG9vbHMudGNsOjE0OQogIywgdGNsLWZvcm1hdAotbXNnaWQgIlRvb2wgY29tcGxldGVkIHN1Y2Nlc2Z1bGx5OiAlcyIKLW1zZ3N0ciAi0J/RgNC+0LPRgNCw0LzQvNCwICVzINGD0YHQv9C10YjQvdC+INC30LDQstC10YDRiNC40LvQsNGB0YwuIgorbXNnaWQgIlRvb2wgY29tcGxldGVkIHN1Y2Nlc3NmdWxseTogJXMiCittc2dzdHIgItCf0YDQvtCz0YDQsNC80LzQsCAlcyDQt9Cw0LLQtdGA0YjQuNC70LDRgdGMINGD0YHQv9C10YjQvdC+LiIKIAogIzogbGliL3Rvb2xzLnRjbDoxNTEKICMsIHRjbC1mb3JtYXQKQEAgLTI1MzgsNCArMjU0MywzIEBACiAjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNzkKIG1zZ2lkICJJbmNsdWRlIHRhZ3MiCiBtc2dzdHIgItCf0LXRgNC10LTQsNGC0Ywg0LzQtdGC0LrQuCIKLQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9wby9zdi5wbyBiL2dpdC1ndWkvcG8vc3YucG8KaW5kZXggYzE1MzVmOS4uZDhkNzNhYyAxMDA2NDQKLS0tIGEvZ2l0LWd1aS9wby9zdi5wbworKysgYi9naXQtZ3VpL3BvL3N2LnBvCkBAIC04LDQxICs4LDQxIEBACiBtc2dzdHIgIiIKICJQcm9qZWN0LUlkLVZlcnNpb246IHN2XG4iCiAiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA4LTEyLTA4IDA4OjMxLTA4MDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDA4LTEyLTEwIDA5OjQ5KzAxMDBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMC0wMS0yNiAxNTo0Ny0wODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0wMS0yOCAxMzo1NyswMTAwXG4iCiAiTGFzdC1UcmFuc2xhdG9yOiBQZXRlciBLcmVmdGluZyA8cGV0ZXJAc29mdHdvbHZlcy5wcC5zZT5cbiIKICJMYW5ndWFnZS1UZWFtOiBTd2VkaXNoIDx0cC1zdkBsaXN0b3IudHAtc3Yuc2U+XG4iCiAiTUlNRS1WZXJzaW9uOiAxLjBcbiIKICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKLSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdCIKIAotIzogZ2l0LWd1aS5zaDo0MSBnaXQtZ3VpLnNoOjczNyBnaXQtZ3VpLnNoOjc1MSBnaXQtZ3VpLnNoOjc2NCBnaXQtZ3VpLnNoOjg0NwotIzogZ2l0LWd1aS5zaDo4NjYKKyM6IGdpdC1ndWkuc2g6NDEgZ2l0LWd1aS5zaDo3OTMgZ2l0LWd1aS5zaDo4MDcgZ2l0LWd1aS5zaDo4MjAgZ2l0LWd1aS5zaDo5MDMKKyM6IGdpdC1ndWkuc2g6OTIyCiBtc2dpZCAiZ2l0LWd1aTogZmF0YWwgZXJyb3IiCiBtc2dzdHIgImdpdC1ndWk6IMO2ZGVzZGlnZXJ0IGZlbCIKIAotIzogZ2l0LWd1aS5zaDo2ODkKKyM6IGdpdC1ndWkuc2g6NzQzCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiSW52YWxpZCBmb250IHNwZWNpZmllZCBpbiAlczoiCiBtc2dzdHIgIk9naWx0aWd0IHRlY2tlbnNuaXR0IGFuZ2l2ZXQgaSAlczoiCiAKLSM6IGdpdC1ndWkuc2g6NzIzCisjOiBnaXQtZ3VpLnNoOjc3OQogbXNnaWQgIk1haW4gRm9udCIKIG1zZ3N0ciAiSHV2dWR0ZWNrZW5zbml0dCIKIAotIzogZ2l0LWd1aS5zaDo3MjQKKyM6IGdpdC1ndWkuc2g6NzgwCiBtc2dpZCAiRGlmZi9Db25zb2xlIEZvbnQiCiBtc2dzdHIgIkRpZmYva29uc29sdGVja2Vuc25pdHQiCiAKLSM6IGdpdC1ndWkuc2g6NzM4CisjOiBnaXQtZ3VpLnNoOjc5NAogbXNnaWQgIkNhbm5vdCBmaW5kIGdpdCBpbiBQQVRILiIKIG1zZ3N0ciAiSGl0dGFyIGludGUgZ2l0IGkgUEFUSC4iCiAKLSM6IGdpdC1ndWkuc2g6NzY1CisjOiBnaXQtZ3VpLnNoOjgyMQogbXNnaWQgIkNhbm5vdCBwYXJzZSBHaXQgdmVyc2lvbiBzdHJpbmc6IgogbXNnc3RyICJLYW4gaW50ZSB0b2xrYSB2ZXJzaW9uc3N0csOkbmcgZnLDpW4gR2l0OiIKIAotIzogZ2l0LWd1aS5zaDo3ODMKKyM6IGdpdC1ndWkuc2g6ODM5CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiIgogIkdpdCB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuIgpAQCAtNjEsNDQ5ICs2MSw0NzggQEAKICJcbiIKICJBbnRhIGF0dCBcIiVzXCIgw6RyIHZlcnNpb24gMS41LjA/XG4iCiAKLSM6IGdpdC1ndWkuc2g6MTA2MgorIzogZ2l0LWd1aS5zaDoxMTI4CiBtc2dpZCAiR2l0IGRpcmVjdG9yeSBub3QgZm91bmQ6IgogbXNnc3RyICJHaXQta2F0YWxvZ2VuIGhpdHRhZGVzIGludGU6IgogCi0jOiBnaXQtZ3VpLnNoOjEwNjkKKyM6IGdpdC1ndWkuc2g6MTE0NgogbXNnaWQgIkNhbm5vdCBtb3ZlIHRvIHRvcCBvZiB3b3JraW5nIGRpcmVjdG9yeToiCiBtc2dzdHIgIkthbiBpbnRlIGfDpSB0aWxsIGLDtnJqYW4gcMOlIGFyYmV0c2thdGFsb2dlbjoiCiAKLSM6IGdpdC1ndWkuc2g6MTA3NgotbXNnaWQgIkNhbm5vdCB1c2UgZnVubnkgLmdpdCBkaXJlY3Rvcnk6IgotbXNnc3RyICJLYW4gaW50ZSBhbnbDpG5kYSB1bmRlcmxpZyAuZ2l0LWthdGFsb2c6IgorIzogZ2l0LWd1aS5zaDoxMTU0Cittc2dpZCAiQ2Fubm90IHVzZSBiYXJlIHJlcG9zaXRvcnk6IgorbXNnc3RyICJLYW4gaW50ZSBhbnbDpG5kYSBuYWtldCBhcmtpdjoiCiAKLSM6IGdpdC1ndWkuc2g6MTA4MQorIzogZ2l0LWd1aS5zaDoxMTYyCiBtc2dpZCAiTm8gd29ya2luZyBkaXJlY3RvcnkiCiBtc2dzdHIgIkluZ2VuIGFyYmV0c2thdGFsb2ciCiAKLSM6IGdpdC1ndWkuc2g6MTI0NyBsaWIvY2hlY2tvdXRfb3AudGNsOjMwNQorIzogZ2l0LWd1aS5zaDoxMzM0IGxpYi9jaGVja291dF9vcC50Y2w6MzA2CiBtc2dpZCAiUmVmcmVzaGluZyBmaWxlIHN0YXR1cy4uLiIKIG1zZ3N0ciAiVXBwZGF0ZXJhciBmaWxzdGF0dXMuLi4iCiAKLSM6IGdpdC1ndWkuc2g6MTMwMworIzogZ2l0LWd1aS5zaDoxMzkwCiBtc2dpZCAiU2Nhbm5pbmcgZm9yIG1vZGlmaWVkIGZpbGVzIC4uLiIKIG1zZ3N0ciAiU8O2a2VyIGVmdGVyIMOkbmRyYWRlIGZpbGVyLi4uIgogCi0jOiBnaXQtZ3VpLnNoOjEzNjcKKyM6IGdpdC1ndWkuc2g6MTQ1NAogbXNnaWQgIkNhbGxpbmcgcHJlcGFyZS1jb21taXQtbXNnIGhvb2suLi4iCiBtc2dzdHIgIiIKICJBbnJvcGFyIGtyb2tlbiBmw7ZyIGbDtnJiZXJlZGVsc2UgYXYgaW5jaGVja25pbmdzbWVkZGVsYW5kZSAocHJlcGFyZS1jb21taXQtIgogIm1zZykuLi4iCiAKLSM6IGdpdC1ndWkuc2g6MTM4NAorIzogZ2l0LWd1aS5zaDoxNDcxCiBtc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZXBhcmUtY29tbWl0LW1zZyBob29rLiIKIG1zZ3N0ciAiIgogIkluY2hlY2tuaW5nZW4gYXZ2aXNhZGVzIGF2IGtyb2tlbiBmw7ZyIGbDtnJiZXJlZGVsc2UgYXYgaW5jaGVja25pbmdzbWVkZGVsYW5kZSAiCiAiKHByZXBhcmUtY29tbWl0LW1zZykuIgogCi0jOiBnaXQtZ3VpLnNoOjE1NDIgbGliL2Jyb3dzZXIudGNsOjI0NgorIzogZ2l0LWd1aS5zaDoxNjI5IGxpYi9icm93c2VyLnRjbDoyNDYKIG1zZ2lkICJSZWFkeS4iCiBtc2dzdHIgIktsYXIuIgogCi0jOiBnaXQtZ3VpLnNoOjE4MTkKKyM6IGdpdC1ndWkuc2g6MTc4NworIywgdGNsLWZvcm1hdAorbXNnaWQgIkRpc3BsYXlpbmcgb25seSAlcyBvZiAlcyBmaWxlcy4iCittc2dzdHIgIlZpc2FyIGVuZGFzdCAlcyBhdiAlcyBmaWxlci4iCisKKyM6IGdpdC1ndWkuc2g6MTkxMwogbXNnaWQgIlVubW9kaWZpZWQiCiBtc2dzdHIgIk9mw7Zyw6RuZHJhZGUiCiAKLSM6IGdpdC1ndWkuc2g6MTgyMQorIzogZ2l0LWd1aS5zaDoxOTE1CiBtc2dpZCAiTW9kaWZpZWQsIG5vdCBzdGFnZWQiCiBtc2dzdHIgIkbDtnLDpG5kcmFkZSwgZWoga8O2YWRlIgogCi0jOiBnaXQtZ3VpLnNoOjE4MjIgZ2l0LWd1aS5zaDoxODMwCisjOiBnaXQtZ3VpLnNoOjE5MTYgZ2l0LWd1aS5zaDoxOTI0CiBtc2dpZCAiU3RhZ2VkIGZvciBjb21taXQiCiBtc2dzdHIgIkvDtmFkZSBmw7ZyIGluY2hlY2tuaW5nIgogCi0jOiBnaXQtZ3VpLnNoOjE4MjMgZ2l0LWd1aS5zaDoxODMxCisjOiBnaXQtZ3VpLnNoOjE5MTcgZ2l0LWd1aS5zaDoxOTI1CiBtc2dpZCAiUG9ydGlvbnMgc3RhZ2VkIGZvciBjb21taXQiCiBtc2dzdHIgIkRlbGFyIGvDtmFkZSBmw7ZyIGluY2hlY2tuaW5nIgogCi0jOiBnaXQtZ3VpLnNoOjE4MjQgZ2l0LWd1aS5zaDoxODMyCisjOiBnaXQtZ3VpLnNoOjE5MTggZ2l0LWd1aS5zaDoxOTI2CiBtc2dpZCAiU3RhZ2VkIGZvciBjb21taXQsIG1pc3NpbmciCiBtc2dzdHIgIkvDtmFkZSBmw7ZyIGluY2hlY2tuaW5nLCBzYWtuYWRlIgogCi0jOiBnaXQtZ3VpLnNoOjE4MjYKKyM6IGdpdC1ndWkuc2g6MTkyMAogbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBub3Qgc3RhZ2VkIgogbXNnc3RyICJGaWx0eXAgw6RuZHJhZCwgZWoga8O2YWRlIgogCi0jOiBnaXQtZ3VpLnNoOjE4MjcKKyM6IGdpdC1ndWkuc2g6MTkyMQogbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBzdGFnZWQiCiBtc2dzdHIgIkZpbHR5cCDDpG5kcmFkLCBrw7ZhZGUiCiAKLSM6IGdpdC1ndWkuc2g6MTgyOQorIzogZ2l0LWd1aS5zaDoxOTIzCiBtc2dpZCAiVW50cmFja2VkLCBub3Qgc3RhZ2VkIgogbXNnc3RyICJFaiBzcMOlcmFkZSwgZWoga8O2YWRlIgogCi0jOiBnaXQtZ3VpLnNoOjE4MzQKKyM6IGdpdC1ndWkuc2g6MTkyOAogbXNnaWQgIk1pc3NpbmciCiBtc2dzdHIgIlNha25hZGUiCiAKLSM6IGdpdC1ndWkuc2g6MTgzNQorIzogZ2l0LWd1aS5zaDoxOTI5CiBtc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsIgogbXNnc3RyICJLw7ZhZGUgZsO2ciBib3J0dGFnbmluZyIKIAotIzogZ2l0LWd1aS5zaDoxODM2CisjOiBnaXQtZ3VpLnNoOjE5MzAKIG1zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwsIHN0aWxsIHByZXNlbnQiCiBtc2dzdHIgIkvDtmFkZSBmw7ZyIGJvcnR0YWduaW5nLCBmb3J0ZmFyYW5kZSBuw6RydmFyYW5kZSIKIAotIzogZ2l0LWd1aS5zaDoxODM4IGdpdC1ndWkuc2g6MTgzOSBnaXQtZ3VpLnNoOjE4NDAgZ2l0LWd1aS5zaDoxODQxCi0jOiBnaXQtZ3VpLnNoOjE4NDIgZ2l0LWd1aS5zaDoxODQzCisjOiBnaXQtZ3VpLnNoOjE5MzIgZ2l0LWd1aS5zaDoxOTMzIGdpdC1ndWkuc2g6MTkzNCBnaXQtZ3VpLnNoOjE5MzUKKyM6IGdpdC1ndWkuc2g6MTkzNiBnaXQtZ3VpLnNoOjE5MzcKIG1zZ2lkICJSZXF1aXJlcyBtZXJnZSByZXNvbHV0aW9uIgogbXNnc3RyICJLcsOkdmVyIGtvbmZsaWt0aGFudGVyaW5nIGVmdGVyIHNhbW1hbnNsYWduaW5nIgogCi0jOiBnaXQtZ3VpLnNoOjE4NzgKKyM6IGdpdC1ndWkuc2g6MTk3MgogbXNnaWQgIlN0YXJ0aW5nIGdpdGsuLi4gcGxlYXNlIHdhaXQuLi4iCiBtc2dzdHIgIlN0YXJ0YXIgZ2l0ay4uLiB2w6RudGEuLi4iCiAKLSM6IGdpdC1ndWkuc2g6MTg4NworIzogZ2l0LWd1aS5zaDoxOTg0CiBtc2dpZCAiQ291bGRuJ3QgZmluZCBnaXRrIGluIFBBVEgiCi1tc2dzdHIgIkhpdHRhciBpbnRlIGdpdGsgaSBQQVRILiIKK21zZ3N0ciAiSGl0dGFkZSBpbnRlIGdpdGsgaSBQQVRILiIKIAotIzogZ2l0LWd1aS5zaDoyMjgwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzYKKyM6IGdpdC1ndWkuc2g6MjA0MworbXNnaWQgIkNvdWxkbid0IGZpbmQgZ2l0IGd1aSBpbiBQQVRIIgorbXNnc3RyICJIaXR0YWRlIGludGUgZ2l0IGd1aSBpIFBBVEguIgorCisjOiBnaXQtZ3VpLnNoOjI0NTUgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozNgogbXNnaWQgIlJlcG9zaXRvcnkiCiBtc2dzdHIgIkFya2l2IgogCi0jOiBnaXQtZ3VpLnNoOjIyODEKKyM6IGdpdC1ndWkuc2g6MjQ1NgogbXNnaWQgIkVkaXQiCiBtc2dzdHIgIlJlZGlnZXJhIgogCi0jOiBnaXQtZ3VpLnNoOjIyODMgbGliL2Nob29zZV9yZXYudGNsOjU2MQorIzogZ2l0LWd1aS5zaDoyNDU4IGxpYi9jaG9vc2VfcmV2LnRjbDo1NjEKIG1zZ2lkICJCcmFuY2giCiBtc2dzdHIgIkdyZW4iCiAKLSM6IGdpdC1ndWkuc2g6MjI4NiBsaWIvY2hvb3NlX3Jldi50Y2w6NTQ4CisjOiBnaXQtZ3VpLnNoOjI0NjEgbGliL2Nob29zZV9yZXYudGNsOjU0OAogbXNnaWQgIkNvbW1pdEBAbm91biIKIG1zZ3N0ciAiSW5jaGVja25pbmciCiAKLSM6IGdpdC1ndWkuc2g6MjI4OSBsaWIvbWVyZ2UudGNsOjEyMSBsaWIvbWVyZ2UudGNsOjE1MCBsaWIvbWVyZ2UudGNsOjE2OAorIzogZ2l0LWd1aS5zaDoyNDY0IGxpYi9tZXJnZS50Y2w6MTIxIGxpYi9tZXJnZS50Y2w6MTUwIGxpYi9tZXJnZS50Y2w6MTY4CiBtc2dpZCAiTWVyZ2UiCiBtc2dzdHIgIlNsw6UgaWhvcCIKIAotIzogZ2l0LWd1aS5zaDoyMjkwIGxpYi9jaG9vc2VfcmV2LnRjbDo1NTcKKyM6IGdpdC1ndWkuc2g6MjQ2NSBsaWIvY2hvb3NlX3Jldi50Y2w6NTU3CiBtc2dpZCAiUmVtb3RlIgogbXNnc3RyICJGasOkcnJhcmtpdiIKIAotIzogZ2l0LWd1aS5zaDoyMjkzCisjOiBnaXQtZ3VpLnNoOjI0NjgKIG1zZ2lkICJUb29scyIKIG1zZ3N0ciAiVmVya3R5ZyIKIAotIzogZ2l0LWd1aS5zaDoyMzAyCisjOiBnaXQtZ3VpLnNoOjI0NzcKIG1zZ2lkICJFeHBsb3JlIFdvcmtpbmcgQ29weSIKIG1zZ3N0ciAiVXRmb3Jza2EgYXJiZXRza29waWEiCiAKLSM6IGdpdC1ndWkuc2g6MjMwNworIzogZ2l0LWd1aS5zaDoyNDgzCiBtc2dpZCAiQnJvd3NlIEN1cnJlbnQgQnJhbmNoJ3MgRmlsZXMiCiBtc2dzdHIgIkJsw6RkZHJhIGkgZ3JlbmVucyBmaWxlciIKIAotIzogZ2l0LWd1aS5zaDoyMzExCisjOiBnaXQtZ3VpLnNoOjI0ODcKIG1zZ2lkICJCcm93c2UgQnJhbmNoIEZpbGVzLi4uIgogbXNnc3RyICJCbMOkZGRyYSBmaWxlciBww6UgZ3Jlbi4uLiIKIAotIzogZ2l0LWd1aS5zaDoyMzE2CisjOiBnaXQtZ3VpLnNoOjI0OTIKIG1zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2gncyBIaXN0b3J5IgogbXNnc3RyICJWaXN1YWxpc2VyYSBncmVuZW5zIGhpc3RvcmlrIgogCi0jOiBnaXQtZ3VpLnNoOjIzMjAKKyM6IGdpdC1ndWkuc2g6MjQ5NgogbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkiCiBtc2dzdHIgIlZpc3VhbGlzZXJhIGFsbGEgZ3JlbmFycyBoaXN0b3JpayIKIAotIzogZ2l0LWd1aS5zaDoyMzI3CisjOiBnaXQtZ3VpLnNoOjI1MDMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJCcm93c2UgJXMncyBGaWxlcyIKIG1zZ3N0ciAiQmzDpGRkcmEgaSBmaWxlciBmw7ZyICVzIgogCi0jOiBnaXQtZ3VpLnNoOjIzMjkKKyM6IGdpdC1ndWkuc2g6MjUwNQogIywgdGNsLWZvcm1hdAogbXNnaWQgIlZpc3VhbGl6ZSAlcydzIEhpc3RvcnkiCiBtc2dzdHIgIlZpc3VhbGlzZXJhIGhpc3RvcmlrIGbDtnIgJXMiCiAKLSM6IGdpdC1ndWkuc2g6MjMzNCBsaWIvZGF0YWJhc2UudGNsOjI3IGxpYi9kYXRhYmFzZS50Y2w6NjcKKyM6IGdpdC1ndWkuc2g6MjUxMCBsaWIvZGF0YWJhc2UudGNsOjI3IGxpYi9kYXRhYmFzZS50Y2w6NjcKIG1zZ2lkICJEYXRhYmFzZSBTdGF0aXN0aWNzIgogbXNnc3RyICJEYXRhYmFzc3RhdGlzdGlrIgogCi0jOiBnaXQtZ3VpLnNoOjIzMzcgbGliL2RhdGFiYXNlLnRjbDozNAorIzogZ2l0LWd1aS5zaDoyNTEzIGxpYi9kYXRhYmFzZS50Y2w6MzQKIG1zZ2lkICJDb21wcmVzcyBEYXRhYmFzZSIKIG1zZ3N0ciAiS29tcHJpbWVyYSBkYXRhYmFzIgogCi0jOiBnaXQtZ3VpLnNoOjIzNDAKKyM6IGdpdC1ndWkuc2g6MjUxNgogbXNnaWQgIlZlcmlmeSBEYXRhYmFzZSIKIG1zZ3N0ciAiVmVyaWZpZXJhIGRhdGFiYXMiCiAKLSM6IGdpdC1ndWkuc2g6MjM0NyBnaXQtZ3VpLnNoOjIzNTEgZ2l0LWd1aS5zaDoyMzU1IGxpYi9zaG9ydGN1dC50Y2w6NwotIzogbGliL3Nob3J0Y3V0LnRjbDozOSBsaWIvc2hvcnRjdXQudGNsOjcxCisjOiBnaXQtZ3VpLnNoOjI1MjMgZ2l0LWd1aS5zaDoyNTI3IGdpdC1ndWkuc2g6MjUzMSBsaWIvc2hvcnRjdXQudGNsOjgKKyM6IGxpYi9zaG9ydGN1dC50Y2w6NDAgbGliL3Nob3J0Y3V0LnRjbDo3MgogbXNnaWQgIkNyZWF0ZSBEZXNrdG9wIEljb24iCiBtc2dzdHIgIlNrYXBhIHNrcml2Ym9yZHNpa29uIgogCi0jOiBnaXQtZ3VpLnNoOjIzNjMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxODMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxOTEKKyM6IGdpdC1ndWkuc2g6MjUzOSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE4MyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE5MQogbXNnaWQgIlF1aXQiCiBtc2dzdHIgIkF2c2x1dGEiCiAKLSM6IGdpdC1ndWkuc2g6MjM3MQorIzogZ2l0LWd1aS5zaDoyNTQ3CiBtc2dpZCAiVW5kbyIKIG1zZ3N0ciAiw4VuZ3JhIgogCi0jOiBnaXQtZ3VpLnNoOjIzNzQKKyM6IGdpdC1ndWkuc2g6MjU1MAogbXNnaWQgIlJlZG8iCiBtc2dzdHIgIkfDtnIgb20iCiAKLSM6IGdpdC1ndWkuc2g6MjM3OCBnaXQtZ3VpLnNoOjI5MzcKKyM6IGdpdC1ndWkuc2g6MjU1NCBnaXQtZ3VpLnNoOjMxMDkKIG1zZ2lkICJDdXQiCiBtc2dzdHIgIktsaXBwIHV0IgogCi0jOiBnaXQtZ3VpLnNoOjIzODEgZ2l0LWd1aS5zaDoyOTQwIGdpdC1ndWkuc2g6MzAxNCBnaXQtZ3VpLnNoOjMwOTYKKyM6IGdpdC1ndWkuc2g6MjU1NyBnaXQtZ3VpLnNoOjMxMTIgZ2l0LWd1aS5zaDozMTg2IGdpdC1ndWkuc2g6MzI1OQogIzogbGliL2NvbnNvbGUudGNsOjY5CiBtc2dpZCAiQ29weSIKIG1zZ3N0ciAiS29waWVyYSIKIAotIzogZ2l0LWd1aS5zaDoyMzg0IGdpdC1ndWkuc2g6Mjk0MworIzogZ2l0LWd1aS5zaDoyNTYwIGdpdC1ndWkuc2g6MzExNQogbXNnaWQgIlBhc3RlIgogbXNnc3RyICJLbGlzdHJhIGluIgogCi0jOiBnaXQtZ3VpLnNoOjIzODcgZ2l0LWd1aS5zaDoyOTQ2IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyNgorIzogZ2l0LWd1aS5zaDoyNTYzIGdpdC1ndWkuc2g6MzExOCBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjYKICM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzgKIG1zZ2lkICJEZWxldGUiCiBtc2dzdHIgIlRhIGJvcnQiCiAKLSM6IGdpdC1ndWkuc2g6MjM5MSBnaXQtZ3VpLnNoOjI5NTAgZ2l0LWd1aS5zaDozMTAwIGxpYi9jb25zb2xlLnRjbDo3MQorIzogZ2l0LWd1aS5zaDoyNTY3IGdpdC1ndWkuc2g6MzEyMiBnaXQtZ3VpLnNoOjMyNjMgbGliL2NvbnNvbGUudGNsOjcxCiBtc2dpZCAiU2VsZWN0IEFsbCIKIG1zZ3N0ciAiTWFya2VyYSBhbGxhIgogCi0jOiBnaXQtZ3VpLnNoOjI0MDAKKyM6IGdpdC1ndWkuc2g6MjU3NgogbXNnaWQgIkNyZWF0ZS4uLiIKIG1zZ3N0ciAiU2thcGEuLi4iCiAKLSM6IGdpdC1ndWkuc2g6MjQwNgorIzogZ2l0LWd1aS5zaDoyNTgyCiBtc2dpZCAiQ2hlY2tvdXQuLi4iCiBtc2dzdHIgIkNoZWNrYSB1dC4uLiIKIAotIzogZ2l0LWd1aS5zaDoyNDEyCisjOiBnaXQtZ3VpLnNoOjI1ODgKIG1zZ2lkICJSZW5hbWUuLi4iCiBtc2dzdHIgIkJ5dCBuYW1uLi4uIgogCi0jOiBnaXQtZ3VpLnNoOjI0MTcKKyM6IGdpdC1ndWkuc2g6MjU5MwogbXNnaWQgIkRlbGV0ZS4uLiIKIG1zZ3N0ciAiVGEgYm9ydC4uLiIKIAotIzogZ2l0LWd1aS5zaDoyNDIyCisjOiBnaXQtZ3VpLnNoOjI1OTgKIG1zZ2lkICJSZXNldC4uLiIKIG1zZ3N0ciAiw4V0ZXJzdMOkbGwuLi4iCiAKLSM6IGdpdC1ndWkuc2g6MjQzMgorIzogZ2l0LWd1aS5zaDoyNjA4CiBtc2dpZCAiRG9uZSIKIG1zZ3N0ciAiRsOkcmRpZyIKIAotIzogZ2l0LWd1aS5zaDoyNDM0CisjOiBnaXQtZ3VpLnNoOjI2MTAKIG1zZ2lkICJDb21taXRAQHZlcmIiCiBtc2dzdHIgIkNoZWNrYSBpbiIKIAotIzogZ2l0LWd1aS5zaDoyNDQzIGdpdC1ndWkuc2g6Mjg3OAorIzogZ2l0LWd1aS5zaDoyNjE5IGdpdC1ndWkuc2g6MzA1MAogbXNnaWQgIk5ldyBDb21taXQiCiBtc2dzdHIgIk55IGluY2hlY2tuaW5nIgogCi0jOiBnaXQtZ3VpLnNoOjI0NTEgZ2l0LWd1aS5zaDoyODg1CisjOiBnaXQtZ3VpLnNoOjI2MjcgZ2l0LWd1aS5zaDozMDU3CiBtc2dpZCAiQW1lbmQgTGFzdCBDb21taXQiCiBtc2dzdHIgIkzDpGdnIHRpbGwgZsO2cmVnw6VlbmRlIGluY2hlY2tuaW5nIgogCi0jOiBnaXQtZ3VpLnNoOjI0NjEgZ2l0LWd1aS5zaDoyODM5IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6OTkKKyM6IGdpdC1ndWkuc2g6MjYzNyBnaXQtZ3VpLnNoOjMwMTEgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo5OQogbXNnaWQgIlJlc2NhbiIKIG1zZ3N0ciAiU8O2ayBww6Ugbnl0dCIKIAotIzogZ2l0LWd1aS5zaDoyNDY3CisjOiBnaXQtZ3VpLnNoOjI2NDMKIG1zZ2lkICJTdGFnZSBUbyBDb21taXQiCiBtc2dzdHIgIkvDtmEgZsO2ciBpbmNoZWNrbmluZyIKIAotIzogZ2l0LWd1aS5zaDoyNDczCisjOiBnaXQtZ3VpLnNoOjI2NDkKIG1zZ2lkICJTdGFnZSBDaGFuZ2VkIEZpbGVzIFRvIENvbW1pdCIKIG1zZ3N0ciAiS8O2YSDDpG5kcmFkZSBmaWxlciBmw7ZyIGluY2hlY2tuaW5nIgogCi0jOiBnaXQtZ3VpLnNoOjI0NzkKKyM6IGdpdC1ndWkuc2g6MjY1NQogbXNnaWQgIlVuc3RhZ2UgRnJvbSBDb21taXQiCiBtc2dzdHIgIlRhIGJvcnQgZnLDpW4gaW5jaGVja25pbmdza8O2IgogCi0jOiBnaXQtZ3VpLnNoOjI0ODQgbGliL2luZGV4LnRjbDo0MTAKKyM6IGdpdC1ndWkuc2g6MjY2MSBsaWIvaW5kZXgudGNsOjQxMgogbXNnaWQgIlJldmVydCBDaGFuZ2VzIgogbXNnc3RyICLDhXRlcnN0w6RsbCDDpG5kcmluZ2FyIgogCi0jOiBnaXQtZ3VpLnNoOjI0OTEgZ2l0LWd1aS5zaDozMDgzCisjOiBnaXQtZ3VpLnNoOjI2NjkgZ2l0LWd1aS5zaDozMzEwIGdpdC1ndWkuc2g6MzM0MQogbXNnaWQgIlNob3cgTGVzcyBDb250ZXh0IgogbXNnc3RyICJWaXNhIG1pbmRyZSBzYW1tYW5oYW5nIgogCi0jOiBnaXQtZ3VpLnNoOjI0OTUgZ2l0LWd1aS5zaDozMDg3CisjOiBnaXQtZ3VpLnNoOjI2NzMgZ2l0LWd1aS5zaDozMzE0IGdpdC1ndWkuc2g6MzM0NQogbXNnaWQgIlNob3cgTW9yZSBDb250ZXh0IgogbXNnc3RyICJWaXNhIG1lciBzYW1tYW5oYW5nIgogCi0jOiBnaXQtZ3VpLnNoOjI1MDIgZ2l0LWd1aS5zaDoyODUyIGdpdC1ndWkuc2g6Mjk2MQorIzogZ2l0LWd1aS5zaDoyNjgwIGdpdC1ndWkuc2g6MzAyNCBnaXQtZ3VpLnNoOjMxMzMKIG1zZ2lkICJTaWduIE9mZiIKIG1zZ3N0ciAiU2tyaXYgdW5kZXIiCiAKLSM6IGdpdC1ndWkuc2g6MjUxOAorIzogZ2l0LWd1aS5zaDoyNjk2CiBtc2dpZCAiTG9jYWwgTWVyZ2UuLi4iCiBtc2dzdHIgIkxva2FsIHNhbW1hbnNsYWduaW5nLi4uIgogCi0jOiBnaXQtZ3VpLnNoOjI1MjMKKyM6IGdpdC1ndWkuc2g6MjcwMQogbXNnaWQgIkFib3J0IE1lcmdlLi4uIgogbXNnc3RyICJBdmJyeXQgc2FtbWFuc2xhZ25pbmcuLi4iCiAKLSM6IGdpdC1ndWkuc2g6MjUzNSBnaXQtZ3VpLnNoOjI1NzUKKyM6IGdpdC1ndWkuc2g6MjcxMyBnaXQtZ3VpLnNoOjI3NDEKIG1zZ2lkICJBZGQuLi4iCiBtc2dzdHIgIkzDpGdnIHRpbGwuLi4iCiAKLSM6IGdpdC1ndWkuc2g6MjUzOQorIzogZ2l0LWd1aS5zaDoyNzE3CiBtc2dpZCAiUHVzaC4uLiIKIG1zZ3N0ciAiU8OkbmQuLi4iCiAKLSM6IGdpdC1ndWkuc2g6MjU0MworIzogZ2l0LWd1aS5zaDoyNzIxCiBtc2dpZCAiRGVsZXRlIEJyYW5jaC4uLiIKIG1zZ3N0ciAiVGEgYm9ydCBncmVuLi4uIgogCi0jOiBnaXQtZ3VpLnNoOjI1NTMgZ2l0LWd1aS5zaDoyNTg5IGxpYi9hYm91dC50Y2w6MTQKKyM6IGdpdC1ndWkuc2g6MjczMSBnaXQtZ3VpLnNoOjMyOTIKK21zZ2lkICJPcHRpb25zLi4uIgorbXNnc3RyICJBbHRlcm5hdGl2Li4uIgorCisjOiBnaXQtZ3VpLnNoOjI3NDIKK21zZ2lkICJSZW1vdmUuLi4iCittc2dzdHIgIlRhIGJvcnQuLi4iCisKKyM6IGdpdC1ndWkuc2g6Mjc1MSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwCittc2dpZCAiSGVscCIKK21zZ3N0ciAiSGrDpGxwIgorCisjOiBnaXQtZ3VpLnNoOjI3NTUgZ2l0LWd1aS5zaDoyNzU5IGxpYi9hYm91dC50Y2w6MTQKICM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MwogIywgdGNsLWZvcm1hdAogbXNnaWQgIkFib3V0ICVzIgogbXNnc3RyICJPbSAlcyIKIAotIzogZ2l0LWd1aS5zaDoyNTU3Ci1tc2dpZCAiUHJlZmVyZW5jZXMuLi4iCi1tc2dzdHIgIkluc3TDpGxsbmluZ2FyLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI1NjUgZ2l0LWd1aS5zaDozMTI5Ci1tc2dpZCAiT3B0aW9ucy4uLiIKLW1zZ3N0ciAiQWx0ZXJuYXRpdi4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNTc2Ci1tc2dpZCAiUmVtb3ZlLi4uIgotbXNnc3RyICJUYSBib3J0Li4uIgotCi0jOiBnaXQtZ3VpLnNoOjI1ODUgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MAotbXNnaWQgIkhlbHAiCi1tc2dzdHIgIkhqw6RscCIKLQotIzogZ2l0LWd1aS5zaDoyNjExCisjOiBnaXQtZ3VpLnNoOjI3ODMKIG1zZ2lkICJPbmxpbmUgRG9jdW1lbnRhdGlvbiIKIG1zZ3N0ciAiV2ViYmRva3VtZW50YXRpb24iCiAKLSM6IGdpdC1ndWkuc2g6MjYxNCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTYKKyM6IGdpdC1ndWkuc2g6Mjc4NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTYKIG1zZ2lkICJTaG93IFNTSCBLZXkiCiBtc2dzdHIgIlZpc2EgU1NILW55Y2tlbCIKIAotIzogZ2l0LWd1aS5zaDoyNzIxCisjOiBnaXQtZ3VpLnNoOjI4OTMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJmYXRhbDogY2Fubm90IHN0YXQgcGF0aCAlczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKIG1zZ3N0ciAiIgogIsO2ZGVzZGlnZXJ0OiBrdW5kZSBpbnRlIHRhIHN0YXR1cyBww6Ugc8O2a3bDpGdlbiAlczogRmlsIGVsbGVyIGthdGFsb2cgc2FrbmFzIgogCi0jOiBnaXQtZ3VpLnNoOjI3NTQKKyM6IGdpdC1ndWkuc2g6MjkyNgogbXNnaWQgIkN1cnJlbnQgQnJhbmNoOiIKIG1zZ3N0ciAiQWt0dWVsbCBncmVuOiIKIAotIzogZ2l0LWd1aS5zaDoyNzc1CisjOiBnaXQtZ3VpLnNoOjI5NDcKIG1zZ2lkICJTdGFnZWQgQ2hhbmdlcyAoV2lsbCBDb21taXQpIgogbXNnc3RyICJLw7ZhZGUgw6RuZHJpbmdhciAoa29tbWVyIGF0dCBjaGVja2FzIGluKSIKIAotIzogZ2l0LWd1aS5zaDoyNzk1CisjOiBnaXQtZ3VpLnNoOjI5NjcKIG1zZ2lkICJVbnN0YWdlZCBDaGFuZ2VzIgogbXNnc3RyICJPa8O2YWRlIMOkbmRyaW5nYXIiCiAKLSM6IGdpdC1ndWkuc2g6Mjg0NQorIzogZ2l0LWd1aS5zaDozMDE3CiBtc2dpZCAiU3RhZ2UgQ2hhbmdlZCIKIG1zZ3N0ciAiS8O2YSDDpG5kcmFkZSIKIAotIzogZ2l0LWd1aS5zaDoyODY0IGxpYi90cmFuc3BvcnQudGNsOjEwNCBsaWIvdHJhbnNwb3J0LnRjbDoxOTMKKyM6IGdpdC1ndWkuc2g6MzAzNiBsaWIvdHJhbnNwb3J0LnRjbDoxMDQgbGliL3RyYW5zcG9ydC50Y2w6MTkzCiBtc2dpZCAiUHVzaCIKIG1zZ3N0ciAiU8OkbmQiCiAKLSM6IGdpdC1ndWkuc2g6Mjg5OQorIzogZ2l0LWd1aS5zaDozMDcxCiBtc2dpZCAiSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCiBtc2dzdHIgIklubGVkYW5kZSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlOiIKIAotIzogZ2l0LWd1aS5zaDoyOTAwCisjOiBnaXQtZ3VpLnNoOjMwNzIKIG1zZ2lkICJBbWVuZGVkIENvbW1pdCBNZXNzYWdlOiIKIG1zZ3N0ciAiVXTDtmthdCBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlOiIKIAotIzogZ2l0LWd1aS5zaDoyOTAxCisjOiBnaXQtZ3VpLnNoOjMwNzMKIG1zZ2lkICJBbWVuZGVkIEluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgogbXNnc3RyICJVdMO2a2F0IGlubGVkYW5kZSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlOiIKIAotIzogZ2l0LWd1aS5zaDoyOTAyCisjOiBnaXQtZ3VpLnNoOjMwNzQKIG1zZ2lkICJBbWVuZGVkIE1lcmdlIENvbW1pdCBNZXNzYWdlOiIKIG1zZ3N0ciAiVXTDtmthdCBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlIGbDtnIgc2FtbWFuc2xhZ25pbmc6IgogCi0jOiBnaXQtZ3VpLnNoOjI5MDMKKyM6IGdpdC1ndWkuc2g6MzA3NQogbXNnaWQgIk1lcmdlIENvbW1pdCBNZXNzYWdlOiIKIG1zZ3N0ciAiSW5jaGVja25pbmdzbWVkZGVsYW5kZSBmw7ZyIHNhbW1hbnNsYWduaW5nOiIKIAotIzogZ2l0LWd1aS5zaDoyOTA0CisjOiBnaXQtZ3VpLnNoOjMwNzYKIG1zZ2lkICJDb21taXQgTWVzc2FnZToiCiBtc2dzdHIgIkluY2hlY2tuaW5nc21lZGRlbGFuZGU6IgogCi0jOiBnaXQtZ3VpLnNoOjI5NTMgZ2l0LWd1aS5zaDozMTA0IGxpYi9jb25zb2xlLnRjbDo3MworIzogZ2l0LWd1aS5zaDozMTI1IGdpdC1ndWkuc2g6MzI2NyBsaWIvY29uc29sZS50Y2w6NzMKIG1zZ2lkICJDb3B5IEFsbCIKIG1zZ3N0ciAiS29waWVyYSBhbGxhIgogCi0jOiBnaXQtZ3VpLnNoOjI5NzcgbGliL2JsYW1lLnRjbDoxMDQKKyM6IGdpdC1ndWkuc2g6MzE0OSBsaWIvYmxhbWUudGNsOjEwNAogbXNnaWQgIkZpbGU6IgogbXNnc3RyICJGaWw6IgogCi0jOiBnaXQtZ3VpLnNoOjMwOTIKKyM6IGdpdC1ndWkuc2g6MzI1NQogbXNnaWQgIlJlZnJlc2giCiBtc2dzdHIgIlVwcGRhdGVyYSIKIAotIzogZ2l0LWd1aS5zaDozMTEzCisjOiBnaXQtZ3VpLnNoOjMyNzYKIG1zZ2lkICJEZWNyZWFzZSBGb250IFNpemUiCiBtc2dzdHIgIk1pbnNrYSB0ZWNrZW5zbml0dHNzdG9ybGVrIgogCi0jOiBnaXQtZ3VpLnNoOjMxMTcKKyM6IGdpdC1ndWkuc2g6MzI4MAogbXNnaWQgIkluY3JlYXNlIEZvbnQgU2l6ZSIKIG1zZ3N0ciAiw5ZrYSB0ZWNrZW5zbml0dHNzdG9ybGVrIgogCi0jOiBnaXQtZ3VpLnNoOjMxMjUgbGliL2JsYW1lLnRjbDoyODEKKyM6IGdpdC1ndWkuc2g6MzI4OCBsaWIvYmxhbWUudGNsOjI4MQogbXNnaWQgIkVuY29kaW5nIgogbXNnc3RyICJUZWNrZW5rb2RuaW5nIgogCi0jOiBnaXQtZ3VpLnNoOjMxMzYKKyM6IGdpdC1ndWkuc2g6MzI5OQogbXNnaWQgIkFwcGx5L1JldmVyc2UgSHVuayIKIG1zZ3N0ciAiQW52w6RuZC/DpXRlcnN0w6RsbCBkZWwiCiAKLSM6IGdpdC1ndWkuc2g6MzE0MQorIzogZ2l0LWd1aS5zaDozMzA0CiBtc2dpZCAiQXBwbHkvUmV2ZXJzZSBMaW5lIgogbXNnc3RyICJBbnbDpG5kL8OldGVyc3TDpGxsIHJhZCIKIAotIzogZ2l0LWd1aS5zaDozMTUxCisjOiBnaXQtZ3VpLnNoOjMzMjMKIG1zZ2lkICJSdW4gTWVyZ2UgVG9vbCIKIG1zZ3N0ciAiU3RhcnRhIHZlcmt0eWcgZsO2ciBzYW1tYW5zbGFnbmluZyIKIAotIzogZ2l0LWd1aS5zaDozMTU2CisjOiBnaXQtZ3VpLnNoOjMzMjgKIG1zZ2lkICJVc2UgUmVtb3RlIFZlcnNpb24iCiBtc2dzdHIgIkFudsOkbmQgdmVyc2lvbmVuIGZyw6VuIGZqw6RycmFya2l2ZXQiCiAKLSM6IGdpdC1ndWkuc2g6MzE2MAorIzogZ2l0LWd1aS5zaDozMzMyCiBtc2dpZCAiVXNlIExvY2FsIFZlcnNpb24iCiBtc2dzdHIgIkFudsOkbmQgbG9rYWxhIHZlcnNpb25lbiIKIAotIzogZ2l0LWd1aS5zaDozMTY0CisjOiBnaXQtZ3VpLnNoOjMzMzYKIG1zZ2lkICJSZXZlcnQgVG8gQmFzZSIKIG1zZ3N0ciAiw4V0ZXJzdMOkbGwgdGlsbCBiYXN2ZXJzaW9uZW4iCiAKLSM6IGdpdC1ndWkuc2g6MzE4MworIzogZ2l0LWd1aS5zaDozMzU0Cittc2dpZCAiVmlzdWFsaXplIFRoZXNlIENoYW5nZXMgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAiVmlzdWFsaXNlcmEgw6RuZHJpbmdhcm5hIGkgdW5kZXJtb2R1bGVuIgorCisjOiBnaXQtZ3VpLnNoOjMzNTgKK21zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICJWaXN1YWxpc2VyYSBncmVuZW5zIGhpc3RvcmlrIGkgdW5kZXJtb2R1bGVuIgorCisjOiBnaXQtZ3VpLnNoOjMzNjIKK21zZ2lkICJWaXN1YWxpemUgQWxsIEJyYW5jaCBIaXN0b3J5IEluIFRoZSBTdWJtb2R1bGUiCittc2dzdHIgIlZpc3VhbGlzZXJhIGFsbGEgZ3JlbmFycyBoaXN0b3JpayBpIHVuZGVybW9kdWxlbiIKKworIzogZ2l0LWd1aS5zaDozMzY3Cittc2dpZCAiU3RhcnQgZ2l0IGd1aSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICJTdGFydGEgZ2l0IGd1aSBpIHVuZGVybW9kdWxlbiIKKworIzogZ2l0LWd1aS5zaDozMzg5CiBtc2dpZCAiVW5zdGFnZSBIdW5rIEZyb20gQ29tbWl0IgogbXNnc3RyICJUYSBib3J0IGRlbCB1ciBpbmNoZWNrbmluZ3Nrw7YiCiAKLSM6IGdpdC1ndWkuc2g6MzE4NAorIzogZ2l0LWd1aS5zaDozMzkxCittc2dpZCAiVW5zdGFnZSBMaW5lcyBGcm9tIENvbW1pdCIKK21zZ3N0ciAiVGEgYm9ydCByYWRlciB1ciBpbmNoZWNrbmluZ3Nrw7YiCisKKyM6IGdpdC1ndWkuc2g6MzM5MwogbXNnaWQgIlVuc3RhZ2UgTGluZSBGcm9tIENvbW1pdCIKIG1zZ3N0ciAiVGEgYm9ydCByYWQgdXIgaW5jaGVja25pbmdza8O2IgogCi0jOiBnaXQtZ3VpLnNoOjMxODYKKyM6IGdpdC1ndWkuc2g6MzM5NgogbXNnaWQgIlN0YWdlIEh1bmsgRm9yIENvbW1pdCIKIG1zZ3N0ciAiU3TDpGxsIGRlbCBpIGluY2hlY2tuaW5nc2vDtiIKIAotIzogZ2l0LWd1aS5zaDozMTg3CisjOiBnaXQtZ3VpLnNoOjMzOTgKK21zZ2lkICJTdGFnZSBMaW5lcyBGb3IgQ29tbWl0IgorbXNnc3RyICJTdMOkbGwgcmFkZXIgaSBpbmNoZWNrbmluZ3Nrw7YiCisKKyM6IGdpdC1ndWkuc2g6MzQwMAogbXNnaWQgIlN0YWdlIExpbmUgRm9yIENvbW1pdCIKIG1zZ3N0ciAiU3TDpGxsIHJhZCBpIGluY2hlY2tuaW5nc2vDtiIKIAotIzogZ2l0LWd1aS5zaDozMjEwCisjOiBnaXQtZ3VpLnNoOjM0MjQKIG1zZ2lkICJJbml0aWFsaXppbmcuLi4iCiBtc2dzdHIgIkluaXRpZXJhci4uLiIKIAotIzogZ2l0LWd1aS5zaDozMzE1CisjOiBnaXQtZ3VpLnNoOjM1NDEKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiUG9zc2libGUgZW52aXJvbm1lbnQgaXNzdWVzIGV4aXN0LlxuIgpAQCAtNTIwLDcgKzU0OSw3IEBACiAiYXYgJXM6XG4iCiAiXG4iCiAKLSM6IGdpdC1ndWkuc2g6MzM0NQorIzogZ2l0LWd1aS5zaDozNTcwCiBtc2dpZCAiIgogIlxuIgogIlRoaXMgaXMgZHVlIHRvIGEga25vd24gaXNzdWUgd2l0aCB0aGVcbiIKQEAgLTUzMCw3ICs1NTksNyBAQAogIkRldHRhIGJlcm9yIHDDpSBldHQga8OkbnQgcHJvYmxlbSBtZWRcbiIKICJUY2wtYmluw6RyZW4gc29tIGbDtmxqZXIgbWVkIEN5Z3dpbi4iCiAKLSM6IGdpdC1ndWkuc2g6MzM1MAorIzogZ2l0LWd1aS5zaDozNTc1CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiIgogIlxuIgpAQCAtNjQwLDcgKzY2OSw3IEBACiBtc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgcGFyZW50IgogbXNnc3RyICJLYW4gaW50ZSB2aXNhIGbDtnLDpGxkZXIiCiAKLSM6IGxpYi9ibGFtZS50Y2w6MTA5MSBsaWIvZGlmZi50Y2w6Mjk3CisjOiBsaWIvYmxhbWUudGNsOjEwOTEgbGliL2RpZmYudGNsOjMyMAogbXNnaWQgIkVycm9yIGxvYWRpbmcgZGlmZjoiCiBtc2dzdHIgIkZlbCB2aWQgaW5sw6RzbmluZyBhdiBkaWZmZXJlbnM6IgogCkBAIC02NjYsNyArNjk1LDcgQEAKIAogIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjcgbGliL2JyYW5jaF9jcmVhdGUudGNsOjM1CiAjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzIgbGliL2JyYW5jaF9yZW5hbWUudGNsOjMwIGxpYi9icm93c2VyLnRjbDoyODIKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTQ0IGxpYi9jaG9vc2VfZm9udC50Y2w6NDMgbGliL21lcmdlLnRjbDoxNzIKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTc5IGxpYi9jaG9vc2VfZm9udC50Y2w6NDMgbGliL21lcmdlLnRjbDoxNzIKICM6IGxpYi9vcHRpb24udGNsOjEyNSBsaWIvcmVtb3RlX2FkZC50Y2w6MzIgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0MgogIzogbGliL3Rvb2xzX2RsZy50Y2w6NDAgbGliL3Rvb2xzX2RsZy50Y2w6MjA0IGxpYi90b29sc19kbGcudGNsOjM1MgogIzogbGliL3RyYW5zcG9ydC50Y2w6MTA4CkBAIC02OTcsNyArNzI2LDcgQEAKIG1zZ2lkICJDcmVhdGUgTmV3IEJyYW5jaCIKIG1zZ3N0ciAiU2thcGEgbnkgZ3JlbiIKIAotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjMxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzc3CisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozODEKIG1zZ2lkICJDcmVhdGUiCiBtc2dzdHIgIlNrYXBhIgogCkBAIC03MjksNyArNzU4LDcgQEAKIG1zZ2lkICJGYXN0IEZvcndhcmQgT25seSIKIG1zZ3N0ciAiRW5kYXN0IHNuYWJic3BvbG5pbmciCiAKLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4NSBsaWIvY2hlY2tvdXRfb3AudGNsOjUzNgorIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjg1IGxpYi9jaGVja291dF9vcC50Y2w6NTcxCiBtc2dpZCAiUmVzZXQiCiBtc2dzdHIgIsOFdGVyc3TDpGxsIgogCkBAIC03NzEsMTUgKzgwMCwyNSBAQAogbXNnaWQgIkRlbGV0ZSBPbmx5IElmIE1lcmdlZCBJbnRvIgogbXNnc3RyICJUYSBiYXJhIGJvcnQgb20gc2FtbWFuc2xhZ2VuIG1lZCIKIAotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjU0Ci1tc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSB0ZXN0LikiCi1tc2dzdHIgIkFsbHRpZCAodXRmw7ZyIGludGUgc2FtbWFuc2xhZ25pbmdzdGVzdCkuIgorIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjU0IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTE5Cittc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSBjaGVja3MpIgorbXNnc3RyICJBbGx0aWQgKHV0ZsO2ciBpbnRlIHNhbW1hbnNsYWduaW5nc3Rlc3QpIgogCiAjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTAzCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6IgogbXNnc3RyICJGw7ZsamFuZGUgZ3JlbmFyIMOkciBpbnRlIHRpbGwgZnVsbG8gc2FtbWFuc2xhZ25hIG1lZCAlczoiCiAKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMTUgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMTcKK21zZ2lkICIiCisiUmVjb3ZlcmluZyBkZWxldGVkIGJyYW5jaGVzIGlzIGRpZmZpY3VsdC5cbiIKKyJcbiIKKyJEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyIKK21zZ3N0ciAiIgorIkRldCBrYW4gdmFyYSBzdsOlcnQgYXR0IMOldGVyc3TDpGxsYSBib3J0dGFnbmEgZ3JlbmFyLlxuIgorIlxuIgorIlRhIGJvcnQgZGUgdmFsZGEgZ3JlbmFybmE/IgorCiAjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTQxCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiIgpAQCAtODA5LDcgKzg0OCw3IEBACiBtc2dpZCAiUGxlYXNlIHNlbGVjdCBhIGJyYW5jaCB0byByZW5hbWUuIgogbXNnc3RyICJWw6RsaiBlbiBncmVuIGF0dCBieXRhIG5hbW4gcMOlLiIKIAotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjk2IGxpYi9jaGVja291dF9vcC50Y2w6MjAxCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6OTYgbGliL2NoZWNrb3V0X29wLnRjbDoyMDIKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4iCiBtc2dzdHIgIkdyZW5lbiBcIiVzXCIgZmlubnMgcmVkYW4uIgpAQCAtODQwLDM4ICs4NzksMzggQEAKIG1zZ2lkICJCcm93c2UgQnJhbmNoIEZpbGVzIgogbXNnc3RyICJCbMOkZGRyYSBmaWxlciBww6UgZ3JlbmVuIgogCi0jOiBsaWIvYnJvd3Nlci50Y2w6Mjc4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzk0Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4MCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5MQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5OTUKKyM6IGxpYi9icm93c2VyLnRjbDoyNzggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozOTgKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDg2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDk3CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjgKIG1zZ2lkICJCcm93c2UiCiBtc2dzdHIgIkJsw6RkZHJhIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjg0CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjg1CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiRmV0Y2hpbmcgJXMgZnJvbSAlcyIKIG1zZ3N0ciAiSMOkbXRhciAlcyBmcsOlbiAlcyIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxMzIKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTMzCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiZmF0YWw6IENhbm5vdCByZXNvbHZlICVzIgogbXNnc3RyICLDtmRlc2RpZ2VydDogS3VuZGUgaW50ZSBzbMOlIHVwcCAlcyIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNDUgbGliL2NvbnNvbGUudGNsOjgxIGxpYi9kYXRhYmFzZS50Y2w6MzEKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTQ2IGxpYi9jb25zb2xlLnRjbDo4MSBsaWIvZGF0YWJhc2UudGNsOjMxCiAjOiBsaWIvc3Noa2V5LnRjbDo1MwogbXNnaWQgIkNsb3NlIgogbXNnc3RyICJTdMOkbmciCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MTc0CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE3NQogIywgdGNsLWZvcm1hdAogbXNnaWQgIkJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0LiIKIG1zZ3N0ciAiR3JlbmVuIFwiJXNcIiBmaW5ucyBpbnRlLiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxOTMKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTk0CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBzaW1wbGlmaWVkIGdpdC1wdWxsIGZvciAnJXMnLiIKIG1zZ3N0ciAiS3VuZGUgaW50ZSBrb25maWd1cmVyYSBmw7ZyZW5rbGFkIGdpdC1wdWxsIGbDtnIgJyVzJy4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjI4CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjIyOQogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy5cbiIKQEAgLTg4NCwyMSArOTIzLDIxIEBACiAiRGVuIGthbiBpbnRlIHNuYWJic3BvbGFzIHRpbGwgJXMuXG4iCiAiRW4gc2FtbWFuc2xhZ25pbmcga3LDpHZzLiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNDIKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjQzCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiTWVyZ2Ugc3RyYXRlZ3kgJyVzJyBub3Qgc3VwcG9ydGVkLiIKIG1zZ3N0ciAiU2FtbWFuc2xhZ25pbmdzc3RyYXRlZ2luIFwiJXNcIiBzdMO2ZHMgaW50ZS4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjYxCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI2MgogIywgdGNsLWZvcm1hdAogbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgJyVzJy4iCiBtc2dzdHIgIk1pc3NseWNrYWRlcyBtZWQgYXR0IHVwcGRhdGVyYSBcIiVzXCIuIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI3MworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNzQKIG1zZ2lkICJTdGFnaW5nIGFyZWEgKGluZGV4KSBpcyBhbHJlYWR5IGxvY2tlZC4iCiBtc2dzdHIgIkvDtm9tcsOlZGV0IChpbmRleCkgw6RyIHJlZGFuIGzDpXN0LiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyODgKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjg5CiBtc2dpZCAiIgogIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgogIlxuIgpAQCAtOTE0LDMwICs5NTMsMzAgQEAKICJcbiIKICJTw7ZrbmluZ2VuIGtvbW1lciBhdHQgc3RhcnRhcyBhdXRvbWF0aXNrdCBudS5cbiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNDQKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ1CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVXBkYXRpbmcgd29ya2luZyBkaXJlY3RvcnkgdG8gJyVzJy4uLiIKIG1zZ3N0ciAiVXBwZGF0ZXJhciBhcmJldHNrYXRhbG9nZW4gdGlsbCBcIiVzXCIuLi4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ1CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NgogbXNnaWQgImZpbGVzIGNoZWNrZWQgb3V0IgogbXNnc3RyICJmaWxlciB1dGNoZWNrYWRlIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM3NQorIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzYKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJBYm9ydGVkIGNoZWNrb3V0IG9mICclcycgKGZpbGUgbGV2ZWwgbWVyZ2luZyBpcyByZXF1aXJlZCkuIgogbXNnc3RyICJBdmJyeXRlciB1dGNoZWNrbmluZyBhdiBcIiVzXCIgKHNhbW1hbnNsYWduaW5nIHDDpSBmaWxuaXbDpSBrcsOkdnMpLiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzYKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc3CiBtc2dpZCAiRmlsZSBsZXZlbCBtZXJnZSByZXF1aXJlZC4iCiBtc2dzdHIgIlNhbW1hbnNsYWduaW5nIHDDpSBmaWxuaXbDpSBrcsOkdnMuIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM4MAorIzogbGliL2NoZWNrb3V0X29wLnRjbDozODEKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJTdGF5aW5nIG9uIGJyYW5jaCAnJXMnLiIKIG1zZ3N0ciAiU3Rhbm5hciBww6UgZ3JlbmVuIFwiJXNcIi4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NDUxCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjQ1MgogbXNnaWQgIiIKICJZb3UgYXJlIG5vIGxvbmdlciBvbiBhIGxvY2FsIGJyYW5jaC5cbiIKICJcbiIKQEAgLTk0OSwzMSArOTg4LDMxIEBACiAiT20gZHUgdmlsbGUgdmFyYSBww6UgZW4gZ3JlbiBza2FwYXIgZHUgZW4gbnUsIGJhc2VyYWQgcMOlIFwiRGVubmEgZnLDpW5rb3BwbGFkZSAiCiAidXRjaGVja25pbmdcIi4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NDY4IGxpYi9jaGVja291dF9vcC50Y2w6NDcyCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUwMyBsaWIvY2hlY2tvdXRfb3AudGNsOjUwNwogIywgdGNsLWZvcm1hdAogbXNnaWQgIkNoZWNrZWQgb3V0ICclcycuIgogbXNnc3RyICJDaGVja2FkZSB1dCBcIiVzXCIuIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUwMAorIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MzUKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJSZXNldHRpbmcgJyVzJyB0byAnJXMnIHdpbGwgbG9zZSB0aGUgZm9sbG93aW5nIGNvbW1pdHM6IgogbXNnc3RyICIiCiAiT20gZHUgw6V0ZXJzdMOkbGxlciBcIiVzXCIgdGlsbCBcIiVzXCIgZ8OlciBmw7ZsamFuZGUgaW5jaGVja25pbmdhciBmw7ZybG9yYWRlOiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MjIKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTU3CiBtc2dpZCAiUmVjb3ZlcmluZyBsb3N0IGNvbW1pdHMgbWF5IG5vdCBiZSBlYXN5LiIKIG1zZ3N0ciAiRGV0IGthbnNrZSBpbnRlIMOkciBzw6UgZW5rZWx0IGF0dCDDpXRlcnNrYXBhIGbDtnJsb3JhZGUgaW5jaGVja25pbmdhci4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTI3CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2MgogIywgdGNsLWZvcm1hdAogbXNnaWQgIlJlc2V0ICclcyc/IgogbXNnc3RyICLDhXRlcnN0w6RsbGEgXCIlc1wiPyIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MzIgbGliL21lcmdlLnRjbDoxNjQgbGliL3Rvb2xzX2RsZy50Y2w6MzQzCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2NyBsaWIvbWVyZ2UudGNsOjE2NCBsaWIvdG9vbHNfZGxnLnRjbDozNDMKIG1zZ2lkICJWaXN1YWxpemUiCiBtc2dzdHIgIlZpc3VhbGlzZXJhIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjYwMAorIzogbGliL2NoZWNrb3V0X29wLnRjbDo2MzUKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiRmFpbGVkIHRvIHNldCBjdXJyZW50IGJyYW5jaC5cbiIKQEAgLTEwMTgsNyArMTA1Nyw3IEBACiBtc2dpZCAiR2l0IEd1aSIKIG1zZ3N0ciAiR2l0IEd1aSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4MgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4NgogbXNnaWQgIkNyZWF0ZSBOZXcgUmVwb3NpdG9yeSIKIG1zZ3N0ciAiU2thcGEgbnl0dCBhcmtpdiIKIApAQCAtMTAyNiw3ICsxMDY1LDcgQEAKIG1zZ2lkICJOZXcuLi4iCiBtc2dzdHIgIk55dHQuLi4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDY1CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3MQogbXNnaWQgIkNsb25lIEV4aXN0aW5nIFJlcG9zaXRvcnkiCiBtc2dzdHIgIktsb25hIGJlZmludGxpZ3QgYXJraXYiCiAKQEAgLTEwMzQsNyArMTA3Myw3IEBACiBtc2dpZCAiQ2xvbmUuLi4iCiBtc2dzdHIgIktsb25hLi4uIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk4MworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDE2CiBtc2dpZCAiT3BlbiBFeGlzdGluZyBSZXBvc2l0b3J5IgogbXNnc3RyICLDlnBwbmEgYmVmaW50bGlndCBhcmtpdiIKIApAQCAtMTA1MCwxOTMgKzEwODksMTkzIEBACiBtc2dpZCAiT3BlbiBSZWNlbnQgUmVwb3NpdG9yeToiCiBtc2dzdHIgIsOWcHBuYSB0aWRpZ2FyZSBhcmtpdjoiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzAyIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzA5Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMxNgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMDYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMTMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzIwCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXBvc2l0b3J5ICVzOiIKIG1zZ3N0ciAiS3VuZGUgaW50ZSBza2FwYSBhcmtpdmV0ICVzOiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozODcKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzkxCiBtc2dpZCAiRGlyZWN0b3J5OiIKIG1zZ3N0ciAiS2F0YWxvZzoiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDE3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTQ0Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTcKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDIzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTUwCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNTIKIG1zZ2lkICJHaXQgUmVwb3NpdG9yeSIKIG1zZ3N0ciAiR2l0YXJraXYiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQyCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0OAogIywgdGNsLWZvcm1hdAogbXNnaWQgIkRpcmVjdG9yeSAlcyBhbHJlYWR5IGV4aXN0cy4iCiBtc2dzdHIgIkthdGFsb2dlbiAlcyBmaW5ucyByZWRhbi4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQ2CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ1MgogIywgdGNsLWZvcm1hdAogbXNnaWQgIkZpbGUgJXMgYWxyZWFkeSBleGlzdHMuIgogbXNnc3RyICJGaWxlbiAlcyBmaW5ucyByZWRhbi4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDYwCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ2NgogbXNnaWQgIkNsb25lIgogbXNnc3RyICJLbG9uYSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NzMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDc5CiBtc2dpZCAiU291cmNlIExvY2F0aW9uOiIKIG1zZ3N0ciAiUGxhdHMgZsO2ciBrw6RsbGtvZDoiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDg0CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5MAogbXNnaWQgIlRhcmdldCBEaXJlY3Rvcnk6IgogbXNnc3RyICJNw6Vsa2F0YWxvZzoiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDk2CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwMgogbXNnaWQgIkNsb25lIFR5cGU6IgogbXNnc3RyICJUeXAgYXYga2xvbjoiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAyCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwOAogbXNnaWQgIlN0YW5kYXJkIChGYXN0LCBTZW1pLVJlZHVuZGFudCwgSGFyZGxpbmtzKSIKIG1zZ3N0ciAiU3RhbmRhcmQgKHNuYWJiLCBzZW1pcmVkdW5kYW50LCBow6VyZGEgbMOkbmthcikiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTA4CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUxNAogbXNnaWQgIkZ1bGwgQ29weSAoU2xvd2VyLCBSZWR1bmRhbnQgQmFja3VwKSIKIG1zZ3N0ciAiRnVsbCBrb3BpYSAobMOlbmdzYW1tYXJlLCByZWR1bmRhbnQgc8Oka2VyaGV0c2tvcGlhKSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MTQKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTIwCiBtc2dpZCAiU2hhcmVkIChGYXN0ZXN0LCBOb3QgUmVjb21tZW5kZWQsIE5vIEJhY2t1cCkiCiBtc2dzdHIgIkRlbGFkIChzbmFiYmFzdCwgcmVrb21tZW5kZXJhcyBlaiwgaW5nZW4gc8Oka2VyaGV0c2tvcGlhKSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NTAgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTcKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzQzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODEzCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDMxCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU1NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYwMworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NDkgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MTkKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA1OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNjYKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJOb3QgYSBHaXQgcmVwb3NpdG9yeTogJXMiCiBtc2dzdHIgIkludGUgZXR0IEdpdGFya2l2OiAlcyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1ODYKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTkyCiBtc2dpZCAiU3RhbmRhcmQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgogbXNnc3RyICJTdGFuZGFyZCDDpHIgZW5kYXN0IHRpbGxnw6RuZ2xpZ3QgZsO2ciBsb2thbGEgYXJraXYuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU5MAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTYKIG1zZ2lkICJTaGFyZWQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgogbXNnc3RyICJEZWxhdCDDpHIgZW5kYXN0IHRpbGxnw6RuZ2xpZ3QgZsO2ciBsb2thbGEgYXJraXYuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxMQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MTcKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJMb2NhdGlvbiAlcyBhbHJlYWR5IGV4aXN0cy4iCiBtc2dzdHIgIlBsYXRzZW4gJXMgZmlubnMgcmVkYW4uIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYyMgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MjgKIG1zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIG9yaWdpbiIKIG1zZ3N0ciAiS3VuZGUgaW50ZSBrb25maWd1cmVyYSB1cnNwcnVuZyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MzQKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjQwCiBtc2dpZCAiQ291bnRpbmcgb2JqZWN0cyIKIG1zZ3N0ciAiUsOka25hciBvYmpla3QiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjM1CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0MQogbXNnaWQgImJ1Y2tldHMiCiBtc2dzdHIgImhpbmthciIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NTkKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjY1CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXM6ICVzIgogbXNnc3RyICJLdW5kZSBpbnRlIGtvcGllcmEgb2JqZWt0L2luZm8vYWx0ZXJuYXRpdjogJXMiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Njk1CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcwMQogIywgdGNsLWZvcm1hdAogbXNnaWQgIk5vdGhpbmcgdG8gY2xvbmUgZnJvbSAlcy4iCiBtc2dzdHIgIkluZ2VudGluZyBhdHQga2xvbmEgZnLDpW4gJXMuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY5NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxMQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzAzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTE3CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyOQogbXNnaWQgIlRoZSAnbWFzdGVyJyBicmFuY2ggaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLiIKIG1zZ3N0ciAiR3JlbmVuIFwibWFzdGVyXCIgaGFyIGludGUgaW5pdGllcmF0cy4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzEwCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcxNgogbXNnaWQgIkhhcmRsaW5rcyBhcmUgdW5hdmFpbGFibGUuICBGYWxsaW5nIGJhY2sgdG8gY29weWluZy4iCiBtc2dzdHIgIkjDpXJkYSBsw6Rua2FyIMOkciBpbnRlIHRpbGxnw6RuZ2xpZ2EuIEZhbGxlciB0aWxsYmFrYSBww6Uga29waWVyaW5nLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MjIKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzI4CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQ2xvbmluZyBmcm9tICVzIgogbXNnc3RyICJLbG9uYXIgZnLDpW4gJXMiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzUzCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc1OQogbXNnaWQgIkNvcHlpbmcgb2JqZWN0cyIKIG1zZ3N0ciAiS29waWVyYXIgb2JqZWt0IgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc1NAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NjAKIG1zZ2lkICJLaUIiCiBtc2dzdHIgIktpQiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NzgKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzg0CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0OiAlcyIKIG1zZ3N0ciAiS3VuZGUgaW50ZSBrb3BpZXJhIG9iamVrdDogJXMiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzg4CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc5NAogbXNnaWQgIkxpbmtpbmcgb2JqZWN0cyIKIG1zZ3N0ciAiTMOkbmthciBvYmpla3QiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzg5CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc5NQogbXNnaWQgIm9iamVjdHMiCiBtc2dzdHIgIm9iamVrdCIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTcKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODAzCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVW5hYmxlIHRvIGhhcmRsaW5rIG9iamVjdDogJXMiCiBtc2dzdHIgIkt1bmRlIGludGUgaMOlcmRsw6Rua2Egb2JqZWt0OiAlcyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NTIKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODU4CiBtc2dpZCAiQ2Fubm90IGZldGNoIGJyYW5jaGVzIGFuZCBvYmplY3RzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKIG1zZ3N0ciAiS3VuZGUgaW50ZSBow6RtdGEgZ3JlbmFyIG9jaCBvYmpla3QuIFNlIGtvbnNvbHV0ZGF0YSBmw7ZyIGRldGFsamVyLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NjMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODY5CiBtc2dpZCAiQ2Fubm90IGZldGNoIHRhZ3MuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgogbXNnc3RyICJLdW5kZSBpbnRlIGjDpG10YSB0YWdnYXIuIFNlIGtvbnNvbHV0ZGF0YSBmw7ZyIGRldGFsamVyLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4ODcKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODkzCiBtc2dpZCAiQ2Fubm90IGRldGVybWluZSBIRUFELiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKIG1zZ3N0ciAiS3VuZGUgaW50ZSBhdmfDtnJhIEhFQUQuIFNlIGtvbnNvbHV0ZGF0YSBmw7ZyIGRldGFsamVyLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4OTYKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTAyCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVW5hYmxlIHRvIGNsZWFudXAgJXMiCiBtc2dzdHIgIkt1bmRlIGludGUgc3TDpGRhIHVwcCAlcyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MDIKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTA4CiBtc2dpZCAiQ2xvbmUgZmFpbGVkLiIKIG1zZ3N0ciAiS2xvbmluZyBtaXNzbHlja2FkZXMuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwOQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTUKIG1zZ2lkICJObyBkZWZhdWx0IGJyYW5jaCBvYnRhaW5lZC4iCiBtc2dzdHIgIkjDpG10YWRlIGluZ2VuIHN0YW5kYXJkZ3Jlbi4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTIwCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyNgogIywgdGNsLWZvcm1hdAogbXNnaWQgIkNhbm5vdCByZXNvbHZlICVzIGFzIGEgY29tbWl0LiIKIG1zZ3N0ciAiS3VuZGUgaW50ZSBzbMOlIHVwcCAlcyB0aWxsIG7DpWdvbiBpbmNoZWNrbmluZy4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTMyCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzOAogbXNnaWQgIkNyZWF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IgogbXNnc3RyICJTa2FwYXIgYXJiZXRza2F0YWxvZyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MzMgbGliL2luZGV4LnRjbDo2NSBsaWIvaW5kZXgudGNsOjEyOAotIzogbGliL2luZGV4LnRjbDoxOTYKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTM5IGxpYi9pbmRleC50Y2w6NjcgbGliL2luZGV4LnRjbDoxMzAKKyM6IGxpYi9pbmRleC50Y2w6MTk4CiBtc2dpZCAiZmlsZXMiCiBtc2dzdHIgImZpbGVyIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk2MgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NjgKIG1zZ2lkICJJbml0aWFsIGZpbGUgY2hlY2tvdXQgZmFpbGVkLiIKIG1zZ3N0ciAiSW5sZWRhbmRlIGZpbHV0Y2hlY2tuaW5nIG1pc3NseWNrYWRlcy4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTc4CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTEKIG1zZ2lkICJPcGVuIgogbXNnc3RyICLDlnBwbmEiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTg4CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjEKIG1zZ2lkICJSZXBvc2l0b3J5OiIKIG1zZ3N0ciAiQXJraXY6IgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMzcKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA3MgogIywgdGNsLWZvcm1hdAogbXNnaWQgIkZhaWxlZCB0byBvcGVuIHJlcG9zaXRvcnkgJXM6IgogbXNnc3RyICJLdW5kZSBpbnRlIMO2cHBuYSBhcmtpdmV0ICVzOiIKQEAgLTEzMjAsNyArMTM1OSwxMiBAQAogbXNnaWQgIkludmFsaWQgR0lUX0NPTU1JVFRFUl9JREVOVDoiCiBtc2dzdHIgIkZlbGFrdGlnIEdJVF9DT01NSVRURVJfSURFTlQ6IgogCi0jOiBsaWIvY29tbWl0LnRjbDoxMzIKKyM6IGxpYi9jb21taXQudGNsOjEyOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IFRjbCBkb2VzIG5vdCBzdXBwb3J0IGVuY29kaW5nICclcycuIgorbXNnc3RyICJ2YXJuaW5nOiBUY2wgc3TDtmRlciBpbnRlIHRlY2tlbmtvZG5pbmdlbiBcIiVzXCIuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxNDkKIG1zZ2lkICIiCiAiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCiAiXG4iCkBAIC0xMzM2LDcgKzEzODAsNyBAQAogIlxuIgogIlPDtmtuaW5nZW4ga29tbWVyIGF0dCBzdGFydGFzIGF1dG9tYXRpc2t0IG51LlxuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxNTUKKyM6IGxpYi9jb21taXQudGNsOjE3MgogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICJVbm1lcmdlZCBmaWxlcyBjYW5ub3QgYmUgY29tbWl0dGVkLlxuIgpAQCAtMTM0OSw3ICsxMzkzLDcgQEAKICJGaWxlbiAlcyBoYXIgc2FtbWFuc2xhZ25pbmdza29uZmxpa3Rlci4gRHUgbcOlc3RlIGzDtnNhIGRlbSBvY2gga8O2YSBmaWxlbiAiCiAiaW5uYW4gZHUgY2hlY2thciBpbiBkZW4uXG4iCiAKLSM6IGxpYi9jb21taXQudGNsOjE2MworIzogbGliL2NvbW1pdC50Y2w6MTgwCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiIgogIlVua25vd24gZmlsZSBzdGF0ZSAlcyBkZXRlY3RlZC5cbiIKQEAgLTEzNjAsNyArMTQwNCw3IEBACiAiXG4iCiAiRmlsZW4gJXMga2FuIGludGUgY2hlY2thcyBpbiBhdiBwcm9ncmFtbWV0LlxuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxNzEKKyM6IGxpYi9jb21taXQudGNsOjE4OAogbXNnaWQgIiIKICJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKICJcbiIKQEAgLTEzNzAsNyArMTQxNCw3IEBACiAiXG4iCiAiRHUgbcOlc3RlIGvDtmEgw6V0bWluc3RvbmUgZW4gZmlsIGlubmFuIGR1IGthbiBjaGVja2EgaW4uXG4iCiAKLSM6IGxpYi9jb21taXQudGNsOjE4NgorIzogbGliL2NvbW1pdC50Y2w6MjAzCiBtc2dpZCAiIgogIlBsZWFzZSBzdXBwbHkgYSBjb21taXQgbWVzc2FnZS5cbiIKICJcbiIKQEAgLTEzODgsNDUgKzE0MzIsNDAgQEAKICItIEFuZHJhIHJhZGVuOiBUb21cbiIKICItIEbDtmxqYW5kZSByYWRlcjogQmVza3JpdiB2YXJmw7ZyIGRldCBow6RyIMOkciBlbiBicmEgw6RuZHJpbmcuXG4iCiAKLSM6IGxpYi9jb21taXQudGNsOjIxMAotIywgdGNsLWZvcm1hdAotbXNnaWQgIndhcm5pbmc6IFRjbCBkb2VzIG5vdCBzdXBwb3J0IGVuY29kaW5nICclcycuIgotbXNnc3RyICJ2YXJuaW5nOiBUY2wgc3TDtmRlciBpbnRlIHRlY2tlbmtvZG5pbmdlbiBcIiVzXCIuIgotCi0jOiBsaWIvY29tbWl0LnRjbDoyMjYKKyM6IGxpYi9jb21taXQudGNsOjIzNAogbXNnaWQgIkNhbGxpbmcgcHJlLWNvbW1pdCBob29rLi4uIgogbXNnc3RyICJBbnJvcGFyIGtyb2tlbiBmw7ZyZSBpbmNoZWNrbmluZyAocHJlLWNvbW1pdCkuLi4iCiAKLSM6IGxpYi9jb21taXQudGNsOjI0MQorIzogbGliL2NvbW1pdC50Y2w6MjQ5CiBtc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZS1jb21taXQgaG9vay4iCiBtc2dzdHIgIkluY2hlY2tuaW5nZW4gYXZ2aXNhZGVzIGF2IGtyb2tlbiBmw7ZyZSBpbmNoZWNrbmluZyAocHJlLWNvbW1pdCkuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyNjQKKyM6IGxpYi9jb21taXQudGNsOjI3MgogbXNnaWQgIkNhbGxpbmcgY29tbWl0LW1zZyBob29rLi4uIgogbXNnc3RyICJBbnJvcGFyIGtyb2tlbiBmw7ZyIGluY2hlY2tuaW5nc21lZGRlbGFuZGUgKGNvbW1pdC1tc2cpLi4uIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyNzkKKyM6IGxpYi9jb21taXQudGNsOjI4NwogbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBjb21taXQtbXNnIGhvb2suIgogbXNnc3RyICJJbmNoZWNrbmluZyBhdnZpc2FkIGF2IGtyb2tlbiBmw7ZyIGluY2hlY2tuaW5nc21lZGRlbGFuZGUgKGNvbW1pdC1tc2cpLiIKIAotIzogbGliL2NvbW1pdC50Y2w6MjkyCisjOiBsaWIvY29tbWl0LnRjbDozMDAKIG1zZ2lkICJDb21taXR0aW5nIGNoYW5nZXMuLi4iCiBtc2dzdHIgIkNoZWNrYXIgaW4gw6RuZHJpbmdhci4uLiIKIAotIzogbGliL2NvbW1pdC50Y2w6MzA4CisjOiBsaWIvY29tbWl0LnRjbDozMTYKIG1zZ2lkICJ3cml0ZS10cmVlIGZhaWxlZDoiCiBtc2dzdHIgIndyaXRlLXRyZWUgbWlzc2x5Y2thZGVzOiIKIAotIzogbGliL2NvbW1pdC50Y2w6MzA5IGxpYi9jb21taXQudGNsOjM1MyBsaWIvY29tbWl0LnRjbDozNzMKKyM6IGxpYi9jb21taXQudGNsOjMxNyBsaWIvY29tbWl0LnRjbDozNjEgbGliL2NvbW1pdC50Y2w6MzgyCiBtc2dpZCAiQ29tbWl0IGZhaWxlZC4iCiBtc2dzdHIgIkluY2hlY2tuaW5nZW4gbWlzc2x5Y2thZGVzLiIKIAotIzogbGliL2NvbW1pdC50Y2w6MzI2CisjOiBsaWIvY29tbWl0LnRjbDozMzQKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJDb21taXQgJXMgYXBwZWFycyB0byBiZSBjb3JydXB0IgogbXNnc3RyICJJbmNoZWNrbmluZ2VuICVzIHZlcmthciB2YXJhIHRyYXNpZyIKIAotIzogbGliL2NvbW1pdC50Y2w6MzMxCisjOiBsaWIvY29tbWl0LnRjbDozMzkKIG1zZ2lkICIiCiAiTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCiAiXG4iCkBAIC0xNDQwLDE5ICsxNDc5LDE5IEBACiAiXG4iCiAiRW4gc8O2a25pbmcga29tbWVyIGF0dCBzdGFydGFzIGF1dG9tYXRpc2t0IG51LlxuIgogCi0jOiBsaWIvY29tbWl0LnRjbDozMzgKKyM6IGxpYi9jb21taXQudGNsOjM0NgogbXNnaWQgIk5vIGNoYW5nZXMgdG8gY29tbWl0LiIKIG1zZ3N0ciAiSW5nYSDDpG5kcmluZ2FyIGF0dCBjaGVja2EgaW4uIgogCi0jOiBsaWIvY29tbWl0LnRjbDozNTIKKyM6IGxpYi9jb21taXQudGNsOjM2MAogbXNnaWQgImNvbW1pdC10cmVlIGZhaWxlZDoiCiBtc2dzdHIgImNvbW1pdC10cmVlIG1pc3NseWNrYWRlczoiCiAKLSM6IGxpYi9jb21taXQudGNsOjM3MgorIzogbGliL2NvbW1pdC50Y2w6MzgxCiBtc2dpZCAidXBkYXRlLXJlZiBmYWlsZWQ6IgogbXNnc3RyICJ1cGRhdGUtcmVmIG1pc3NseWNrYWRlczoiCiAKLSM6IGxpYi9jb21taXQudGNsOjQ2MAorIzogbGliL2NvbW1pdC50Y2w6NDY5CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQ3JlYXRlZCBjb21taXQgJXM6ICVzIgogbXNnc3RyICJTa2FwYWRlIGluY2hlY2tuaW5nZW4gJXM6ICVzIgpAQCAtMTUwNSwyMCArMTU0NCwyMCBAQAogbXNnaWQgIlZlcmlmeWluZyB0aGUgb2JqZWN0IGRhdGFiYXNlIHdpdGggZnNjay1vYmplY3RzIgogbXNnc3RyICJWZXJpZmllcmFyIG9iamVrdGRhdGFiYXNlbiBtZWQgZnNjay1vYmplY3RzIgogCi0jOiBsaWIvZGF0YWJhc2UudGNsOjEwOAorIzogbGliL2RhdGFiYXNlLnRjbDoxMDcKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiVGhpcyByZXBvc2l0b3J5IGN1cnJlbnRseSBoYXMgYXBwcm94aW1hdGVseSAlaSBsb29zZSBvYmplY3RzLlxuIgogIlxuIgogIlRvIG1haW50YWluIG9wdGltYWwgcGVyZm9ybWFuY2UgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgY29tcHJlc3MgIgotInRoZSBkYXRhYmFzZSB3aGVuIG1vcmUgdGhhbiAlaSBsb29zZSBvYmplY3RzIGV4aXN0LlxuIgorInRoZSBkYXRhYmFzZS5cbiIKICJcbiIKICJDb21wcmVzcyB0aGUgZGF0YWJhc2Ugbm93PyIKIG1zZ3N0ciAiIgogIkFya2l2ZXQgaGFyIGbDtnIgbsOkcnZhcmFuZGUgb21rcmluZyAlaSBsw7ZzYSBvYmpla3QuXG4iCiAiXG4iCiAiRsO2ciBhdHQgYmliZWjDpWxsYSBvcHRpbWFsIHByZXN0YW5kYSByZWtvbW1lbmRlcmFzIGRldCDDpSBkZXQgYmVzdMOkbWRhc3RlIGF0dCAiCi0iZHUga29tcHJpbWVyYXIgZGF0YWJhc2VuIG7DpHIgZGVuIGlubmVow6VsbGVyIG1lciDDpG4gJWkgbMO2c2Egb2JqZWt0LlxuIgorImR1IGtvbXByaW1lcmFyIGRhdGFiYXNlbi5cbiIKICJcbiIKICJLb21wcmltZXJhIGRhdGFiYXNlbiBudT8iCiAKQEAgLTE1MjcsNyArMTU2Niw3IEBACiBtc2dpZCAiSW52YWxpZCBkYXRlIGZyb20gR2l0OiAlcyIKIG1zZ3N0ciAiT2dpbHRpZ3QgZGF0dW0gZnLDpW4gR2l0OiAlcyIKIAotIzogbGliL2RpZmYudGNsOjU5CisjOiBsaWIvZGlmZi50Y2w6NjQKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiTm8gZGlmZmVyZW5jZXMgZGV0ZWN0ZWQuXG4iCkBAIC0xNTUwLDEyICsxNTg5LDEyIEBACiAiRW4gc8O2a25pbmcga29tbWVyIGF1dG9tYXRpc2t0IGF0dCBzdGFydGFzIGbDtnIgYXR0IGhpdHRhIGFuZHJhIGZpbGVyIHNvbSBrYW4gIgogInZhcmEgaSBzYW1tYSB0aWxsc3TDpW5kLiIKIAotIzogbGliL2RpZmYudGNsOjk5CisjOiBsaWIvZGlmZi50Y2w6MTA0CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiTG9hZGluZyBkaWZmIG9mICVzLi4uIgogbXNnc3RyICJMw6RzZXIgZGlmZmVyZW5zIGbDtnIgJXMuLi4iCiAKLSM6IGxpYi9kaWZmLnRjbDoxMjAKKyM6IGxpYi9kaWZmLnRjbDoxMjUKIG1zZ2lkICIiCiAiTE9DQUw6IGRlbGV0ZWRcbiIKICJSRU1PVEU6XG4iCkBAIC0xNTYzLDcgKzE2MDIsNyBAQAogIkxPS0FMOiBib3J0dGFnZW5cbiIKICJGSsOEUlI6XG4iCiAKLSM6IGxpYi9kaWZmLnRjbDoxMjUKKyM6IGxpYi9kaWZmLnRjbDoxMzAKIG1zZ2lkICIiCiAiUkVNT1RFOiBkZWxldGVkXG4iCiAiTE9DQUw6XG4iCkBAIC0xNTcxLDMyICsxNjEwLDMyIEBACiAiRkrDhFJSOiBib3J0dGFnZW5cbiIKICJMT0tBTDpcbiIKIAotIzogbGliL2RpZmYudGNsOjEzMgorIzogbGliL2RpZmYudGNsOjEzNwogbXNnaWQgIkxPQ0FMOlxuIgogbXNnc3RyICJMT0tBTDpcbiIKIAotIzogbGliL2RpZmYudGNsOjEzNQorIzogbGliL2RpZmYudGNsOjE0MAogbXNnaWQgIlJFTU9URTpcbiIKIG1zZ3N0ciAiRkrDhFJSOlxuIgogCi0jOiBsaWIvZGlmZi50Y2w6MTk3IGxpYi9kaWZmLnRjbDoyOTYKKyM6IGxpYi9kaWZmLnRjbDoyMDIgbGliL2RpZmYudGNsOjMxOQogIywgdGNsLWZvcm1hdAogbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5ICVzIgogbXNnc3RyICJLYW4gaW50ZSB2aXNhICVzIgogCi0jOiBsaWIvZGlmZi50Y2w6MTk4CisjOiBsaWIvZGlmZi50Y2w6MjAzCiBtc2dpZCAiRXJyb3IgbG9hZGluZyBmaWxlOiIKIG1zZ3N0ciAiRmVsIHZpZCBsw6RzbmluZyBhdiBmaWw6IgogCi0jOiBsaWIvZGlmZi50Y2w6MjA1CisjOiBsaWIvZGlmZi50Y2w6MjEwCiBtc2dpZCAiR2l0IFJlcG9zaXRvcnkgKHN1YnByb2plY3QpIgogbXNnc3RyICJHaXRhcmtpdiAodW5kZXJwcm9qZWt0KSIKIAotIzogbGliL2RpZmYudGNsOjIxNworIzogbGliL2RpZmYudGNsOjIyMgogbXNnaWQgIiogQmluYXJ5IGZpbGUgKG5vdCBzaG93aW5nIGNvbnRlbnQpLiIKIG1zZ3N0ciAiKiBCaW7DpHJmaWwgKHZpc2FyIGludGUgaW5uZWjDpWxsZXQpLiIKIAotIzogbGliL2RpZmYudGNsOjIyMgorIzogbGliL2RpZmYudGNsOjIyNwogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICIqIFVudHJhY2tlZCBmaWxlIGlzICVkIGJ5dGVzLlxuIgpAQCAtMTYwNSw3ICsxNjQ0LDcgQEAKICIqIERlbiBvc3DDpXJhZGUgZmlsZW4gw6RyICVkIGJ5dGUuXG4iCiAiKiBWaXNhciBlbmRhc3QgaW5sZWRhbmRlICVkIGJ5dGUuXG4iCiAKLSM6IGxpYi9kaWZmLnRjbDoyMjgKKyM6IGxpYi9kaWZmLnRjbDoyMzMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiXG4iCkBAIC0xNjE2LDE5ICsxNjU1LDE5IEBACiAiKiBEZW4gb3Nww6VyYWRlIGZpbGVuIGtsaXBwdGVzIGjDpHIgYXYgJXMuXG4iCiAiKiBGw7ZyIGF0dCBzZSBoZWxhIGZpbGVuLCBhbnbDpG5kIGV0dCBleHRlcm50IHJlZGlnZXJpbmdzcHJvZ3JhbS5cbiIKIAotIzogbGliL2RpZmYudGNsOjQzNgorIzogbGliL2RpZmYudGNsOjQ4MgogbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGh1bmsuIgogbXNnc3RyICJLdW5kZSBpbnRlIHRhIGJvcnQgZGVuIHZhbGRhIGRlbGVuIGZyw6VuIGvDtm4uIgogCi0jOiBsaWIvZGlmZi50Y2w6NDQzCisjOiBsaWIvZGlmZi50Y2w6NDg5CiBtc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGh1bmsuIgogbXNnc3RyICJLdW5kZSBpbnRlIGzDpGdnYSB0aWxsIGRlbiB2YWxkYSBkZWxlbiB0aWxsIGvDtm4uIgogCi0jOiBsaWIvZGlmZi50Y2w6NTA5CisjOiBsaWIvZGlmZi50Y2w6NTY4CiBtc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCiBtc2dzdHIgIkt1bmRlIGludGUgdGEgYm9ydCBkZW4gdmFsZGEgcmFkZW4gZnLDpW4ga8O2bi4iCiAKLSM6IGxpYi9kaWZmLnRjbDo1MTcKKyM6IGxpYi9kaWZmLnRjbDo1NzYKIG1zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCiBtc2dzdHIgIkt1bmRlIGludGUgbMOkZ2dhIHRpbGwgZGVuIHZhbGRhIHJhZGVuIHRpbGwga8O2bi4iCiAKQEAgLTE2NjUsNyArMTcwNCw3IEBACiBtc2dpZCAiSW5kZXggRXJyb3IiCiBtc2dzdHIgIkluZGV4ZmVsIgogCi0jOiBsaWIvaW5kZXgudGNsOjIxCisjOiBsaWIvaW5kZXgudGNsOjE3CiBtc2dpZCAiIgogIlVwZGF0aW5nIHRoZSBHaXQgaW5kZXggZmFpbGVkLiAgQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gIgogInJlc3luY2hyb25pemUgZ2l0LWd1aS4iCkBAIC0xNjczLDcgKzE3MTIsNyBAQAogIk1pc3NseWNrYWRlcyBtZWQgYXR0IHVwcGRhdGVyYSBHaXRpbmRleGV0LiBFbiBvbXPDtmtuaW5nIGtvbW1lciBhdHQgc3RhcnRhcyAiCiAiYXV0b21hdGlza3QgZsO2ciBhdHQgc3lua3JvbmlzZXJhIG9tIGdpdC1ndWkuIgogCi0jOiBsaWIvaW5kZXgudGNsOjI3CisjOiBsaWIvaW5kZXgudGNsOjI4CiBtc2dpZCAiQ29udGludWUiCiBtc2dzdHIgIkZvcnN0w6R0dCIKIApAQCAtMTY4MSw0NCArMTcyMCw0NCBAQAogbXNnaWQgIlVubG9jayBJbmRleCIKIG1zZ3N0ciAiTMOlcyB1cHAgaW5kZXgiCiAKLSM6IGxpYi9pbmRleC50Y2w6Mjg3CisjOiBsaWIvaW5kZXgudGNsOjI4OQogIywgdGNsLWZvcm1hdAogbXNnaWQgIlVuc3RhZ2luZyAlcyBmcm9tIGNvbW1pdCIKIG1zZ3N0ciAiVGFyIGJvcnQgJXMgZsO2ciBpbmNoZWNrbmluZ3Nrw7ZuIgogCi0jOiBsaWIvaW5kZXgudGNsOjMyNgorIzogbGliL2luZGV4LnRjbDozMjgKIG1zZ2lkICJSZWFkeSB0byBjb21taXQuIgogbXNnc3RyICJSZWRvIGF0dCBjaGVja2EgaW4uIgogCi0jOiBsaWIvaW5kZXgudGNsOjMzOQorIzogbGliL2luZGV4LnRjbDozNDEKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJBZGRpbmcgJXMiCiBtc2dzdHIgIkzDpGdnZXIgdGlsbCAlcyIKIAotIzogbGliL2luZGV4LnRjbDozOTYKKyM6IGxpYi9pbmRleC50Y2w6Mzk4CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gZmlsZSAlcz8iCiBtc2dzdHIgIsOFdGVyc3TDpGxsIMOkbmRyaW5nYXJuYSBpIGZpbGVuICVzPyIKIAotIzogbGliL2luZGV4LnRjbDozOTgKKyM6IGxpYi9pbmRleC50Y2w6NDAwCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gdGhlc2UgJWkgZmlsZXM/IgogbXNnc3RyICLDhXRlcnN0w6RsbCDDpG5kcmluZ2FybmEgaSBkZXNzYSAlaSBmaWxlcj8iCiAKLSM6IGxpYi9pbmRleC50Y2w6NDA2CisjOiBsaWIvaW5kZXgudGNsOjQwOAogbXNnaWQgIkFueSB1bnN0YWdlZCBjaGFuZ2VzIHdpbGwgYmUgcGVybWFuZW50bHkgbG9zdCBieSB0aGUgcmV2ZXJ0LiIKIG1zZ3N0ciAiIgogIkFsbGEgb2vDtmFkZSDDpG5kcmluZ2FyIGtvbW1lciBwZXJtYW5lbnQgZ8OlIGbDtnJsb3JhZGUgdmlkIMOldGVyc3TDpGxsbmluZ2VuLiIKIAotIzogbGliL2luZGV4LnRjbDo0MDkKKyM6IGxpYi9pbmRleC50Y2w6NDExCiBtc2dpZCAiRG8gTm90aGluZyIKIG1zZ3N0ciAiR8O2ciBpbmdlbnRpbmciCiAKLSM6IGxpYi9pbmRleC50Y2w6NDI3CisjOiBsaWIvaW5kZXgudGNsOjQyOQogbXNnaWQgIlJldmVydGluZyBzZWxlY3RlZCBmaWxlcyIKIG1zZ3N0ciAiw4V0ZXJzdMOkbGxlciB2YWxkYSBmaWxlciIKIAotIzogbGliL2luZGV4LnRjbDo0MzEKKyM6IGxpYi9pbmRleC50Y2w6NDMzCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiUmV2ZXJ0aW5nICVzIgogbXNnc3RyICLDhXRlcnN0w6RsbGVyICVzIgpAQCAtMjE5NSwxMCArMjIzNCw2IEBACiBtc2dpZCAiTWVyZ2VkIEludG86IgogbXNnc3RyICJTYW1tYW5zbGFnZW4gaToiCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTE5Ci1tc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSBjaGVja3MpIgotbXNnc3RyICJBbGx0aWQgKHV0ZsO2ciBpbnRlIHNhbW1hbnNsYWduaW5nc3Rlc3QpIgotCiAjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE1MgogbXNnaWQgIkEgYnJhbmNoIGlzIHJlcXVpcmVkIGZvciAnTWVyZ2VkIEludG8nLiIKIG1zZ3N0ciAiRW4gZ3JlbiBrcsOkdnMgZsO2ciBcIlNhbW1hbnNsYWdlbiBpXCIuIgpAQCAtMjIyNywyNiArMjI2MiwxNiBAQAogbXNnaWQgIlBsZWFzZSBzZWxlY3Qgb25lIG9yIG1vcmUgYnJhbmNoZXMgdG8gZGVsZXRlLiIKIG1zZ3N0ciAiVsOkbGogZW4gZWxsZXIgZmxlcmEgZ3JlbmFyIGF0dCB0YSBib3J0LiIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMTYKLW1zZ2lkICIiCi0iUmVjb3ZlcmluZyBkZWxldGVkIGJyYW5jaGVzIGlzIGRpZmZpY3VsdC5cbiIKLSJcbiIKLSJEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyIKLW1zZ3N0ciAiIgotIkRldCBrYW4gdmFyYSBzdsOlcnQgYXR0IMOldGVyc3TDpGxsYSBib3J0dGFnbmEgZ3JlbmFyLlxuIgotIlxuIgotIlRhIGJvcnQgZGUgdmFsZGEgZ3JlbmFybmE/IgotCiAjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIyNgogIywgdGNsLWZvcm1hdAogbXNnaWQgIkRlbGV0aW5nIGJyYW5jaGVzIGZyb20gJXMiCiBtc2dzdHIgIlRhciBib3J0IGdyZW5hciBmcsOlbiAlcyIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyODYKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjkyCiBtc2dpZCAiTm8gcmVwb3NpdG9yeSBzZWxlY3RlZC4iCiBtc2dzdHIgIkluZ2V0IGFya2l2IG1hcmtlcmF0LiIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOTEKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6Mjk3CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiU2Nhbm5pbmcgJXMuLi4iCiBtc2dzdHIgIlPDtmtlciAlcy4uLiIKQEAgLTIyNjcsMTEgKzIyOTIsMTEgQEAKIG1zZ2lkICJDYXNlLVNlbnNpdGl2ZSIKIG1zZ3N0ciAiU2tpbGogcMOlIFZFUlNBTEVSL2dlbWVuZXIiCiAKLSM6IGxpYi9zaG9ydGN1dC50Y2w6MjAgbGliL3Nob3J0Y3V0LnRjbDo2MQorIzogbGliL3Nob3J0Y3V0LnRjbDoyMSBsaWIvc2hvcnRjdXQudGNsOjYyCiBtc2dpZCAiQ2Fubm90IHdyaXRlIHNob3J0Y3V0OiIKIG1zZ3N0ciAiS2FuIGludGUgc2tyaXZhIGdlbnbDpGc6IgogCi0jOiBsaWIvc2hvcnRjdXQudGNsOjEzNgorIzogbGliL3Nob3J0Y3V0LnRjbDoxMzcKIG1zZ2lkICJDYW5ub3Qgd3JpdGUgaWNvbjoiCiBtc2dzdHIgIkthbiBpbnRlIHNrcml2YSBpa29uOiIKIApAQCAtMjU0NSw2ICsyNTcwLDE1IEBACiBtc2dpZCAiSW5jbHVkZSB0YWdzIgogbXNnc3RyICJUYSBtZWQgdGFnZ2FyIgogCisjfiBtc2dpZCAiQ2Fubm90IHVzZSBmdW5ueSAuZ2l0IGRpcmVjdG9yeToiCisjfiBtc2dzdHIgIkthbiBpbnRlIGFudsOkbmRhIHVuZGVybGlnIC5naXQta2F0YWxvZzoiCisKKyN+IG1zZ2lkICJQcmVmZXJlbmNlcy4uLiIKKyN+IG1zZ3N0ciAiSW5zdMOkbGxuaW5nYXIuLi4iCisKKyN+IG1zZ2lkICJBbHdheXMgKERvIG5vdCBwZXJmb3JtIG1lcmdlIHRlc3QuKSIKKyN+IG1zZ3N0ciAiQWxsdGlkICh1dGbDtnIgaW50ZSBzYW1tYW5zbGFnbmluZ3N0ZXN0KS4iCisKICN+IG1zZ2lkICJVUkw6IgogI34gbXNnc3RyICJXZWJiYWRyZXNzOiIKIApkaWZmIC0tZ2l0IGEvZ2l0LWluc3Rhd2ViLnNoIGIvZ2l0LWluc3Rhd2ViLnNoCmluZGV4IDVmNDQxOWIuLjZhNjVmMjUgMTAwNzU1Ci0tLSBhL2dpdC1pbnN0YXdlYi5zaAorKysgYi9naXQtaW5zdGF3ZWIuc2gKQEAgLTQxLDcgKzQxLDcgQEAKIAljYXNlICIkaHR0cGQiIGluCiAJKmFwYWNoZTIqfCpsaWdodHRwZCopCiAJCSMgZW5zdXJlIHRoYXQgdGhlIGFwYWNoZTIvbGlnaHR0cGQgY29tbWFuZCBlbmRzIHdpdGggIi1mIgotCQlpZiAhIGVjaG8gIiRodHRwZCIgfCBncmVwIC0tICctZiAqJCcgPi9kZXYvbnVsbCAyPiYxCisJCWlmICEgZWNobyAiJGh0dHBkIiB8IHNhbmVfZ3JlcCAtLSAnLWYgKiQnID4vZGV2L251bGwgMj4mMQogCQl0aGVuCiAJCQlodHRwZD0iJGh0dHBkIC1mIgogCQlmaQpAQCAtNzMsMTUgKzczLDM5IEBACiB9CiAKIHN0YXJ0X2h0dHBkICgpIHsKKwlpZiB0ZXN0IC1mICIkZnFnaXRkaXIvcGlkIjsgdGhlbgorCQlzYXkgIkluc3RhbmNlIGFscmVhZHkgcnVubmluZy4gUmVzdGFydGluZy4uLiIKKwkJc3RvcF9odHRwZAorCWZpCisKIAkjIGhlcmUgJGh0dHBkIHNob3VsZCBoYXZlIGEgbWVhbmluZ2Z1bCB2YWx1ZQogCXJlc29sdmVfZnVsbF9odHRwZAogCiAJIyBkb24ndCBxdW90ZSAkZnVsbF9odHRwZCwgdGhlcmUgY2FuIGJlIGFyZ3VtZW50cyB0byBpdCAoLWYpCi0JJGZ1bGxfaHR0cGQgIiRmcWdpdGRpci9naXR3ZWIvaHR0cGQuY29uZiIKLQlpZiB0ZXN0ICQ/ICE9IDA7IHRoZW4KLQkJZWNobyAiQ291bGQgbm90IGV4ZWN1dGUgaHR0cCBkYWVtb24gJGh0dHBkLiIKLQkJZXhpdCAxCi0JZmkKKwljYXNlICIkaHR0cGQiIGluCisJKm1vbmdvb3NlKikKKwkJI1RoZSBtb25nb29zZSBzZXJ2ZXIgZG9lc24ndCBoYXZlIGEgZGFlbW9uIG1vZGUgc28gd2UnbGwgaGF2ZSB0byBmb3JrIGl0CisJCSRmdWxsX2h0dHBkICIkZnFnaXRkaXIvZ2l0d2ViL2h0dHBkLmNvbmYiICYKKwkJI1NhdmUgdGhlIHBpZCBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZSAod2UnbGwgcHJpbnQgaXQgbGF0ZXIpCisJCXBpZD0kIQorCisJCWlmIHRlc3QgJD8gIT0gMDsgdGhlbgorCQkJZWNobyAiQ291bGQgbm90IGV4ZWN1dGUgaHR0cCBkYWVtb24gJGh0dHBkLiIKKwkJCWV4aXQgMQorCQlmaQorCisJCWNhdCA+ICIkZnFnaXRkaXIvcGlkIiA8PEVPRgorJHBpZAorRU9GCisJCTs7CisJKikKKwkJJGZ1bGxfaHR0cGQgIiRmcWdpdGRpci9naXR3ZWIvaHR0cGQuY29uZiIKKwkJaWYgdGVzdCAkPyAhPSAwOyB0aGVuCisJCQllY2hvICJDb3VsZCBub3QgZXhlY3V0ZSBodHRwIGRhZW1vbiAkaHR0cGQuIgorCQkJZXhpdCAxCisJCWZpCisJCTs7CisJZXNhYwogfQogCiBzdG9wX2h0dHBkICgpIHsKQEAgLTI1Niw3ICsyODAsNyBAQAogCW1rZGlyIC1wICIkR0lUX0RJUi9naXR3ZWIvbG9ncyIKIAliaW5kPQogCXRlc3QgeCIkbG9jYWwiID0geHRydWUgJiYgYmluZD0nMTI3LjAuMC4xOicKLQllY2hvICd0ZXh0L2NzcyBjc3MnID4gJGZxZ2l0ZGlyL21pbWUudHlwZXMKKwllY2hvICd0ZXh0L2NzcyBjc3MnID4gIiRmcWdpdGRpci9taW1lLnR5cGVzIgogCWNhdCA+ICIkY29uZiIgPDxFT0YKIFNlcnZlck5hbWUgImdpdC1pbnN0YXdlYiIKIFNlcnZlclJvb3QgIiRmcWdpdGRpci9naXR3ZWIiCkBAIC0yNzIsMTQgKzI5NiwxNCBAQAogCQlmaQogCWRvbmUKIAljYXQgPj4gIiRjb25mIiA8PEVPRgotVHlwZXNDb25maWcgJGZxZ2l0ZGlyL21pbWUudHlwZXMKK1R5cGVzQ29uZmlnICIkZnFnaXRkaXIvbWltZS50eXBlcyIKIERpcmVjdG9yeUluZGV4IGdpdHdlYi5jZ2kKIEVPRgogCiAJIyBjaGVjayB0byBzZWUgaWYgRGVubmlzIFN0b3NiZXJnJ3MgbW9kX3BlcmwgY29tcGF0aWJpbGl0eSBwYXRjaAogCSMgKDwyMDA2MDYyMTEzMDcwOC5HY2JjNmU1Y0BsZW9ub3Yuc3Rvc2JlcmcubmV0PikgaGFzIGJlZW4gYXBwbGllZAotCWlmIHRlc3QgLWYgIiRtb2R1bGVfcGF0aC9tb2RfcGVybC5zbyIgJiYgZ3JlcCAnXm91ciAkZ2l0YmluJyBcCi0JCQkJIiRHSVRfRElSL2dpdHdlYi9naXR3ZWIuY2dpIiA+L2Rldi9udWxsCisJaWYgdGVzdCAtZiAiJG1vZHVsZV9wYXRoL21vZF9wZXJsLnNvIiAmJgorCSAgIHNhbmVfZ3JlcCAnTU9EX1BFUkwnICIkR0lUX0RJUi9naXR3ZWIvZ2l0d2ViLmNnaSIgPi9kZXYvbnVsbAogCXRoZW4KIAkJIyBmYXZvciBtb2RfcGVybCBpZiBhdmFpbGFibGUKIAkJY2F0ID4+ICIkY29uZiIgPDxFT0YKQEAgLTI5Niw5ICszMjAsMjMgQEAKIAllbHNlCiAJCSMgcGxhaW4tb2xkIENHSQogCQlyZXNvbHZlX2Z1bGxfaHR0cGQKLQkJbGlzdF9tb2RzPSQoZWNobyAiJGZ1bGxfaHR0cGQiIHwgc2VkICJzLy1mJC8tbC8iKQotCQkkbGlzdF9tb2RzIHwgZ3JlcCAnbW9kX2NnaVwuYycgPi9kZXYvbnVsbCAyPiYxIHx8IFwKLQkJZWNobyAiTG9hZE1vZHVsZSBjZ2lfbW9kdWxlICRtb2R1bGVfcGF0aC9tb2RfY2dpLnNvIiA+PiAiJGNvbmYiCisJCWxpc3RfbW9kcz0kKGVjaG8gIiRmdWxsX2h0dHBkIiB8IHNlZCAncy8tZiQvLWwvJykKKwkJJGxpc3RfbW9kcyB8IHNhbmVfZ3JlcCAnbW9kX2NnaVwuYycgPi9kZXYvbnVsbCAyPiYxIHx8IFwKKwkJaWYgdGVzdCAtZiAiJG1vZHVsZV9wYXRoL21vZF9jZ2kuc28iCisJCXRoZW4KKwkJCWVjaG8gIkxvYWRNb2R1bGUgY2dpX21vZHVsZSAkbW9kdWxlX3BhdGgvbW9kX2NnaS5zbyIgPj4gIiRjb25mIgorCQllbHNlCisJCQkkbGlzdF9tb2RzIHwgZ3JlcCAnbW9kX2NnaWRcLmMnID4vZGV2L251bGwgMj4mMSB8fCBcCisJCQlpZiB0ZXN0IC1mICIkbW9kdWxlX3BhdGgvbW9kX2NnaWQuc28iCisJCQl0aGVuCisJCQkJZWNobyAiTG9hZE1vZHVsZSBjZ2lkX21vZHVsZSAkbW9kdWxlX3BhdGgvbW9kX2NnaWQuc28iIFwKKwkJCQkJPj4gIiRjb25mIgorCQkJZWxzZQorCQkJCWVjaG8gIllvdSBoYXZlIG5vIENHSSBzdXBwb3J0ISIKKwkJCQlleGl0IDIKKwkJCWZpCisJCQllY2hvICJTY3JpcHRTb2NrIGxvZ3MvZ2l0d2ViLnNvY2siID4+ICIkY29uZiIKKwkJZmkKIAkJY2F0ID4+ICIkY29uZiIgPDxFT0YKIEFkZEhhbmRsZXIgY2dpLXNjcmlwdCAuY2dpCiA8TG9jYXRpb24gL2dpdHdlYi5jZ2k+CkBAIC0zMDgsNiArMzQ2LDMxIEBACiAJZmkKIH0KIAorbW9uZ29vc2VfY29uZigpIHsKKwljYXQgPiAiJGNvbmYiIDw8RU9GCisjIE1vbmdvb3NlIHdlYiBzZXJ2ZXIgY29uZmlndXJhdGlvbiBmaWxlLgorIyBMaW5lcyBzdGFydGluZyB3aXRoICcjJyBhbmQgZW1wdHkgbGluZXMgYXJlIGlnbm9yZWQuCisjIEZvciBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBldmVyeSBvcHRpb24sIHZpc2l0CisjIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9tb25nb29zZS93aWtpL01vbmdvb3NlTWFudWFsCisKK3Jvb3QJCSRmcWdpdGRpci9naXR3ZWIKK3BvcnRzCQkkcG9ydAoraW5kZXhfZmlsZXMJZ2l0d2ViLmNnaQorI3NzbF9jZXJ0CSRmcWdpdGRpci9naXR3ZWIvc3NsX2NlcnQucGVtCitlcnJvcl9sb2cJJGZxZ2l0ZGlyL2dpdHdlYi9lcnJvci5sb2cKK2FjY2Vzc19sb2cJJGZxZ2l0ZGlyL2dpdHdlYi9hY2Nlc3MubG9nCisKKyNjZ2kgc2V0dXAKK2NnaV9lbnYJCVBBVEg9L3Vzci9sb2NhbC9iaW46L3Vzci9iaW46L2JpbixHSVRfRElSPSRHSVRfRElSLEdJVF9FWEVDX1BBVEg9JEdJVF9FWEVDX1BBVEgKK2NnaV9pbnRlcnAJJFBFUkwKK2NnaV9leHQJCWNnaSxwbAorCisjIG1pbWV0eXBlIG1hcHBpbmcKK21pbWVfdHlwZXMJLmd6PWFwcGxpY2F0aW9uL3gtZ3ppcCwudGFyLmd6PWFwcGxpY2F0aW9uL3gtdGd6LC50Z3o9YXBwbGljYXRpb24veC10Z3osLnRhcj1hcHBsaWNhdGlvbi94LXRhciwuemlwPWFwcGxpY2F0aW9uL3ppcCwuZ2lmPWltYWdlL2dpZiwuanBnPWltYWdlL2pwZWcsLmpwZWc9aW1hZ2UvanBlZywucG5nPWltYWdlL3BuZywuY3NzPXRleHQvY3NzLC5odG1sPXRleHQvaHRtbCwuaHRtPXRleHQvaHRtbCwuanM9dGV4dC9qYXZhc2NyaXB0LC5jPXRleHQvcGxhaW4sLmNwcD10ZXh0L3BsYWluLC5sb2c9dGV4dC9wbGFpbiwuY29uZj10ZXh0L3BsYWluLC50ZXh0PXRleHQvcGxhaW4sLnR4dD10ZXh0L3BsYWluLC5kdGQ9dGV4dC94bWwsLmJ6Mj1hcHBsaWNhdGlvbi94LWJ6aXAsLnRiej1hcHBsaWNhdGlvbi94LWJ6aXAtY29tcHJlc3NlZC10YXIsLnRhci5iejI9YXBwbGljYXRpb24veC1iemlwLWNvbXByZXNzZWQtdGFyCitFT0YKK30KKworCiBzY3JpcHQ9JwogcyNeKG15fG91cikgXCRwcm9qZWN0cm9vdCA9LiojJDEgXCRwcm9qZWN0cm9vdCA9ICInJChkaXJuYW1lICIkZnFnaXRkaXIiKSciOyM7CiBzIyhteXxvdXIpIFwkZ2l0YmluID0uKiMkMSBcJGdpdGJpbiA9ICInJEdJVF9FWEVDX1BBVEgnIjsjOwpAQCAtMzMxLDggKzM5NCwxNSBAQAogRU9GR0lUV0VCCiB9CiAKK2dpdHdlYl9qcyAoKSB7CisJY2F0ID4gIiQxIiA8PFxFT0ZHSVRXRUIKK0BAR0lUV0VCX0pTQEAKK0VPRkdJVFdFQgorfQorCiBnaXR3ZWJfY2dpICIkR0lUX0RJUi9naXR3ZWIvZ2l0d2ViLmNnaSIKIGdpdHdlYl9jc3MgIiRHSVRfRElSL2dpdHdlYi9naXR3ZWIuY3NzIgorZ2l0d2ViX2pzICAiJEdJVF9ESVIvZ2l0d2ViL2dpdHdlYi5qcyIKIAogY2FzZSAiJGh0dHBkIiBpbgogKmxpZ2h0dHBkKikKQEAgLTM0NCw2ICs0MTQsOSBAQAogd2VicmljaykKIAl3ZWJyaWNrX2NvbmYKIAk7OworKm1vbmdvb3NlKikKKwltb25nb29zZV9jb25mCisJOzsKICopCiAJZWNobyAiVW5rbm93biBodHRwZCBzcGVjaWZpZWQ6ICRodHRwZCIKIAlleGl0IDEKZGlmZiAtLWdpdCBhL2dpdC1tZXJnZS1vY3RvcHVzLnNoIGIvZ2l0LW1lcmdlLW9jdG9wdXMuc2gKaW5kZXggMWRhZGJiNC4uNjE1NzUzYyAxMDA3NTUKLS0tIGEvZ2l0LW1lcmdlLW9jdG9wdXMuc2gKKysrIGIvZ2l0LW1lcmdlLW9jdG9wdXMuc2gKQEAgLTQ0LDkgKzQ0LDggQEAKICMgTVJDIGlzIHRoZSBjdXJyZW50ICJtZXJnZSByZWZlcmVuY2UgY29tbWl0IgogIyBNUlQgaXMgdGhlIGN1cnJlbnQgIm1lcmdlIHJlc3VsdCB0cmVlIgogCi1NUkM9JGhlYWQgTVNHPSBQQVJFTlQ9Ii1wICRoZWFkIgorTVJDPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAkaGVhZCkKIE1SVD0kKGdpdCB3cml0ZS10cmVlKQotQ05UPTEgOyMgY291bnRpbmcgb3VyIGhlYWQKIE5PTl9GRl9NRVJHRT0wCiBPQ1RPUFVTX0ZBSUxVUkU9MAogZm9yIFNIQTEgaW4gJHJlbW90ZXMKQEAgLTYxLDE5ICs2MCwxNyBAQAogCQlleGl0IDIKIAllc2FjCiAKKwlldmFsIHByZXR0eV9uYW1lPVwke0dJVEhFQURfJFNIQTE6LSRTSEExfQogCWNvbW1vbj0kKGdpdCBtZXJnZS1iYXNlIC0tYWxsICRTSEExICRNUkMpIHx8Ci0JCWRpZSAiVW5hYmxlIHRvIGZpbmQgY29tbW9uIGNvbW1pdCB3aXRoICRTSEExIgorCQlkaWUgIlVuYWJsZSB0byBmaW5kIGNvbW1vbiBjb21taXQgd2l0aCAkcHJldHR5X25hbWUiCiAKIAljYXNlICIkTEYkY29tbW9uJExGIiBpbgogCSoiJExGJFNIQTEkTEYiKikKLQkJZWNobyAiQWxyZWFkeSB1cC10by1kYXRlIHdpdGggJFNIQTEiCisJCWVjaG8gIkFscmVhZHkgdXAtdG8tZGF0ZSB3aXRoICRwcmV0dHlfbmFtZSIKIAkJY29udGludWUKIAkJOzsKIAllc2FjCiAKLQlDTlQ9YGV4cHIgJENOVCArIDFgCi0JUEFSRU5UPSIkUEFSRU5UIC1wICRTSEExIgotCiAJaWYgdGVzdCAiJGNvbW1vbiwkTk9OX0ZGX01FUkdFIiA9ICIkTVJDLDAiCiAJdGhlbgogCQkjIFRoZSBmaXJzdCBoZWFkIGJlaW5nIG1lcmdlZCB3YXMgYSBmYXN0LWZvcndhcmQuCkBAIC04MSw3ICs3OCw3IEBACiAJCSMgdHJlZSBhcyB0aGUgaW50ZXJtZWRpYXRlIHJlc3VsdCBvZiB0aGUgbWVyZ2UuCiAJCSMgV2Ugc3RpbGwgbmVlZCB0byBjb3VudCB0aGlzIGFzIHBhcnQgb2YgdGhlIHBhcmVudCBzZXQuCiAKLQkJZWNobyAiRmFzdCBmb3J3YXJkaW5nIHRvOiAkU0hBMSIKKwkJZWNobyAiRmFzdC1mb3J3YXJkaW5nIHRvOiAkcHJldHR5X25hbWUiCiAJCWdpdCByZWFkLXRyZWUgLXUgLW0gJGhlYWQgJFNIQTEgfHwgZXhpdAogCQlNUkM9JFNIQTEgTVJUPSQoZ2l0IHdyaXRlLXRyZWUpCiAJCWNvbnRpbnVlCkBAIC04OSw3ICs4Niw3IEBACiAKIAlOT05fRkZfTUVSR0U9MQogCi0JZWNobyAiVHJ5aW5nIHNpbXBsZSBtZXJnZSB3aXRoICRTSEExIgorCWVjaG8gIlRyeWluZyBzaW1wbGUgbWVyZ2Ugd2l0aCAkcHJldHR5X25hbWUiCiAJZ2l0IHJlYWQtdHJlZSAtdSAtbSAtLWFnZ3Jlc3NpdmUgICRjb21tb24gJE1SVCAkU0hBMSB8fCBleGl0IDIKIAluZXh0PSQoZ2l0IHdyaXRlLXRyZWUgMj4vZGV2L251bGwpCiAJaWYgdGVzdCAkPyAtbmUgMApkaWZmIC0tZ2l0IGEvZ2l0LW1lcmdlLW9uZS1maWxlLnNoIGIvZ2l0LW1lcmdlLW9uZS1maWxlLnNoCmluZGV4IDljMmMxYjcuLmQwNjc4OTQgMTAwNzU1Ci0tLSBhL2dpdC1tZXJnZS1vbmUtZmlsZS5zaAorKysgYi9naXQtbWVyZ2Utb25lLWZpbGUuc2gKQEAgLTE2LDYgKzE2LDE4IEBACiAjIGJlZW4gaGFuZGxlZCBhbHJlYWR5IGJ5IGdpdCByZWFkLXRyZWUsIGJ1dCB0aGF0IG9uZSBkb2Vzbid0CiAjIGRvIGFueSBtZXJnZXMgdGhhdCBtaWdodCBjaGFuZ2UgdGhlIHRyZWUgbGF5b3V0LgogCitVU0FHRT0nPG9yaWcgYmxvYj4gPG91ciBibG9iPiA8dGhlaXIgYmxvYj4gPHBhdGg+JworVVNBR0U9IiRVU0FHRSA8b3JpZyBtb2RlPiA8b3VyIG1vZGU+IDx0aGVpciBtb2RlPiIKK0xPTkdfVVNBR0U9IlVzYWdlOiBnaXQgbWVyZ2Utb25lLWZpbGUgJFVTQUdFCisKK0Jsb2IgaWRzIGFuZCBtb2RlcyBzaG91bGQgYmUgZW1wdHkgZm9yIG1pc3NpbmcgZmlsZXMuIgorCitpZiAhIHRlc3QgIiQjIiAtZXEgNwordGhlbgorCWVjaG8gIiRMT05HX1VTQUdFIgorCWV4aXQgMQorZmkKKwogY2FzZSAiJHsxOi0ufSR7MjotLn0kezM6LS59IiBpbgogIwogIyBEZWxldGVkIGluIGJvdGggb3IgZGVsZXRlZCBpbiBvbmUgYW5kIHVuY2hhbmdlZCBpbiB0aGUgb3RoZXIKZGlmZiAtLWdpdCBhL2dpdC1tZXJnZXRvb2wtLWxpYi5zaCBiL2dpdC1tZXJnZXRvb2wtLWxpYi5zaAppbmRleCBhMTZhMjc5Li41MWRkMGQ2IDEwMDY0NAotLS0gYS9naXQtbWVyZ2V0b29sLS1saWIuc2gKKysrIGIvZ2l0LW1lcmdldG9vbC0tbGliLnNoCkBAIC0xLDMgKzEsNCBAQAorIyEvYmluL3NoCiAjIGdpdC1tZXJnZXRvb2wtLWxpYiBpcyBhIGxpYnJhcnkgZm9yIGNvbW1vbiBtZXJnZSB0b29sIGZ1bmN0aW9ucwogZGlmZl9tb2RlKCkgewogCXRlc3QgIiRUT09MX01PREUiID0gZGlmZgpAQCAtMTgsNiArMTksOSBAQAogCWVtZXJnZSkKIAkJZWNobyBlbWFjcwogCQk7OworCWFyYXhpcykKKwkJZWNobyBjb21wYXJlCisJCTs7CiAJKikKIAkJZWNobyAiJDEiCiAJCTs7CkBAIC00Myw3ICs0Nyw3IEBACiB2YWxpZF90b29sICgpIHsKIAljYXNlICIkMSIgaW4KIAlrZGlmZjMgfCB0a2RpZmYgfCB4eGRpZmYgfCBtZWxkIHwgb3BlbmRpZmYgfCBcCi0JZW1lcmdlIHwgdmltZGlmZiB8IGd2aW1kaWZmIHwgZWNtZXJnZSB8IGRpZmZ1c2UpCisJZW1lcmdlIHwgdmltZGlmZiB8IGd2aW1kaWZmIHwgZWNtZXJnZSB8IGRpZmZ1c2UgfCBhcmF4aXMgfCBwNG1lcmdlKQogCQk7OyAjIGhhcHB5CiAJdG9ydG9pc2VtZXJnZSkKIAkJaWYgISBtZXJnZV9tb2RlOyB0aGVuCkBAIC0xMjcsNiArMTMxLDE5IEBACiAJCQkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiCiAJCWZpCiAJCTs7CisJcDRtZXJnZSkKKwkJaWYgbWVyZ2VfbW9kZTsgdGhlbgorCQkgICAgdG91Y2ggIiRCQUNLVVAiCisJCQlpZiAkYmFzZV9wcmVzZW50OyB0aGVuCisJCQkJIiRtZXJnZV90b29sX3BhdGgiICIkQkFTRSIgIiRMT0NBTCIgIiRSRU1PVEUiICIkTUVSR0VEIgorCQkJZWxzZQorCQkJCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJExPQ0FMIiAiJFJFTU9URSIgIiRNRVJHRUQiCisJCQlmaQorCQkJY2hlY2tfdW5jaGFuZ2VkCisJCWVsc2UKKwkJCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIKKwkJZmkKKwkJOzsKIAltZWxkKQogCQlpZiBtZXJnZV9tb2RlOyB0aGVuCiAJCQl0b3VjaCAiJEJBQ0tVUCIKQEAgLTIyOCw4ICsyNDUsOCBAQAogCQkJZmkKIAkJCWNoZWNrX3VuY2hhbmdlZAogCQllbHNlCi0JCQkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiIFwKLQkJCQktLWRlZmF1bHQgLS1tb2RlPW1lcmdlMiAtLXRvPSIkTUVSR0VEIgorCQkJIiRtZXJnZV90b29sX3BhdGgiIC0tZGVmYXVsdCAtLW1vZGU9ZGlmZjIgXAorCQkJCSIkTE9DQUwiICIkUkVNT1RFIgogCQlmaQogCQk7OwogCWVtZXJnZSkKQEAgLTI0OCw3ICsyNjUsNyBAQAogCQkJc3RhdHVzPSQ/CiAJCWVsc2UKIAkJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtZiBlbWVyZ2UtZmlsZXMtY29tbWFuZCBcCi0JCQkJIiRMT0NBTCIgIiRSRU1PVEUiICIkKGJhc2VuYW1lICIkTUVSR0VEIikiCisJCQkJIiRMT0NBTCIgIiRSRU1PVEUiCiAJCWZpCiAJCTs7CiAJdG9ydG9pc2VtZXJnZSkKQEAgLTI2Myw2ICsyODAsMjQgQEAKIAkJCXN0YXR1cz0xCiAJCWZpCiAJCTs7CisJYXJheGlzKQorCQlpZiBtZXJnZV9tb2RlOyB0aGVuCisJCQl0b3VjaCAiJEJBQ0tVUCIKKwkJCWlmICRiYXNlX3ByZXNlbnQ7IHRoZW4KKwkJCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLXdhaXQgLW1lcmdlIC0zIC1hMSBcCisJCQkJCSIkQkFTRSIgIiRMT0NBTCIgIiRSRU1PVEUiICIkTUVSR0VEIiBcCisJCQkJCT4vZGV2L251bGwgMj4mMQorCQkJZWxzZQorCQkJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtd2FpdCAtMiBcCisJCQkJCSIkTE9DQUwiICIkUkVNT1RFIiAiJE1FUkdFRCIgXAorCQkJCQk+L2Rldi9udWxsIDI+JjEKKwkJCWZpCisJCQljaGVja191bmNoYW5nZWQKKwkJZWxzZQorCQkJIiRtZXJnZV90b29sX3BhdGgiIC13YWl0IC0yICIkTE9DQUwiICIkUkVNT1RFIiBcCisJCQkJPi9kZXYvbnVsbCAyPiYxCisJCWZpCisJCTs7CiAJKikKIAkJbWVyZ2VfdG9vbF9jbWQ9IiQoZ2V0X21lcmdlX3Rvb2xfY21kICIkMSIpIgogCQlpZiB0ZXN0IC16ICIkbWVyZ2VfdG9vbF9jbWQiOyB0aGVuCkBAIC0zMDIsMTcgKzMzNywxNiBAQAogCQllbHNlCiAJCQl0b29scz0ib3BlbmRpZmYga2RpZmYzIHRrZGlmZiB4eGRpZmYgbWVsZCAkdG9vbHMiCiAJCWZpCi0JCXRvb2xzPSIkdG9vbHMgZ3ZpbWRpZmYgZGlmZnVzZSBlY21lcmdlIgorCQl0b29scz0iJHRvb2xzIGd2aW1kaWZmIGRpZmZ1c2UgZWNtZXJnZSBwNG1lcmdlIGFyYXhpcyIKIAlmaQotCWlmIGVjaG8gIiR7VklTVUFMOi0kRURJVE9SfSIgfCBncmVwIGVtYWNzID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KLQkJIyAkRURJVE9SIGlzIGVtYWNzIHNvIGFkZCBlbWVyZ2UgYXMgYSBjYW5kaWRhdGUKLQkJdG9vbHM9IiR0b29scyBlbWVyZ2UgdmltZGlmZiIKLQllbGlmIGVjaG8gIiR7VklTVUFMOi0kRURJVE9SfSIgfCBncmVwIHZpbSA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCi0JCSMgJEVESVRPUiBpcyB2aW0gc28gYWRkIHZpbWRpZmYgYXMgYSBjYW5kaWRhdGUKKwljYXNlICIke1ZJU1VBTDotJEVESVRPUn0iIGluCisJKnZpbSopCiAJCXRvb2xzPSIkdG9vbHMgdmltZGlmZiBlbWVyZ2UiCi0JZWxzZQorCQk7OworCSopCiAJCXRvb2xzPSIkdG9vbHMgZW1lcmdlIHZpbWRpZmYiCi0JZmkKKwkJOzsKKwllc2FjCiAJZWNobyA+JjIgIm1lcmdlIHRvb2wgY2FuZGlkYXRlczogJHRvb2xzIgogCiAJIyBMb29wIG92ZXIgZWFjaCBjYW5kaWRhdGUgYW5kIHN0b3Agd2hlbiBhIHZhbGlkIG1lcmdlIHRvb2wgaXMgZm91bmQuCmRpZmYgLS1naXQgYS9naXQtbm90ZXMuc2ggYi9naXQtbm90ZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTY0MmU0NwotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ub3Rlcy5zaApAQCAtMCwwICsxLDEyMSBAQAorIyEvYmluL3NoCisKK1VTQUdFPSIoZWRpdCBbLUYgPGZpbGU+IHwgLW0gPG1zZz5dIHwgc2hvdykgW2NvbW1pdF0iCisuIGdpdC1zaC1zZXR1cAorCit0ZXN0IC16ICIkMSIgJiYgdXNhZ2UKK0FDVElPTj0iJDEiOyBzaGlmdAorCit0ZXN0IC16ICIkR0lUX05PVEVTX1JFRiIgJiYgR0lUX05PVEVTX1JFRj0iJChnaXQgY29uZmlnIGNvcmUubm90ZXNyZWYpIgordGVzdCAteiAiJEdJVF9OT1RFU19SRUYiICYmIEdJVF9OT1RFU19SRUY9InJlZnMvbm90ZXMvY29tbWl0cyIKKworTUVTU0FHRT0KK3doaWxlIHRlc3QgJCMgIT0gMAorZG8KKwljYXNlICIkMSIgaW4KKwktbSkKKwkJdGVzdCAiJEFDVElPTiIgPSAiZWRpdCIgfHwgdXNhZ2UKKwkJc2hpZnQKKwkJaWYgdGVzdCAiJCMiID0gIjAiOyB0aGVuCisJCQlkaWUgImVycm9yOiBvcHRpb24gLW0gbmVlZHMgYW4gYXJndW1lbnQiCisJCWVsc2UKKwkJCWlmIFsgLXogIiRNRVNTQUdFIiBdOyB0aGVuCisJCQkJTUVTU0FHRT0iJDEiCisJCQllbHNlCisJCQkJTUVTU0FHRT0iJE1FU1NBR0UKKworJDEiCisJCQlmaQorCQkJc2hpZnQKKwkJZmkKKwkJOzsKKwktRikKKwkJdGVzdCAiJEFDVElPTiIgPSAiZWRpdCIgfHwgdXNhZ2UKKwkJc2hpZnQKKwkJaWYgdGVzdCAiJCMiID0gIjAiOyB0aGVuCisJCQlkaWUgImVycm9yOiBvcHRpb24gLUYgbmVlZHMgYW4gYXJndW1lbnQiCisJCWVsc2UKKwkJCWlmIFsgLXogIiRNRVNTQUdFIiBdOyB0aGVuCisJCQkJTUVTU0FHRT0iJChjYXQgIiQxIikiCisJCQllbHNlCisJCQkJTUVTU0FHRT0iJE1FU1NBR0UKKworJChjYXQgIiQxIikiCisJCQlmaQorCQkJc2hpZnQKKwkJZmkKKwkJOzsKKwktKikKKwkJdXNhZ2UKKwkJOzsKKwkqKQorCQlicmVhaworCQk7OworCWVzYWMKK2RvbmUKKworQ09NTUlUPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLWRlZmF1bHQgSEVBRCAiJEAiKSB8fAorZGllICJJbnZhbGlkIGNvbW1pdDogJEAiCisKK2Nhc2UgIiRBQ1RJT04iIGluCitlZGl0KQorCWlmIFsgIiR7R0lUX05PVEVTX1JFRiNyZWZzL25vdGVzL30iID0gIiRHSVRfTk9URVNfUkVGIiBdOyB0aGVuCisJCWRpZSAiUmVmdXNpbmcgdG8gZWRpdCBub3RlcyBpbiAkR0lUX05PVEVTX1JFRiAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiCisJZmkKKworCU1TR19GSUxFPSIkR0lUX0RJUi9uZXctbm90ZXMtJENPTU1JVCIKKwlHSVRfSU5ERVhfRklMRT0iJE1TR19GSUxFLmlkeCIKKwlleHBvcnQgR0lUX0lOREVYX0ZJTEUKKworCXRyYXAgJworCQl0ZXN0IC1mICIkTVNHX0ZJTEUiICYmIHJtICIkTVNHX0ZJTEUiCisJCXRlc3QgLWYgIiRHSVRfSU5ERVhfRklMRSIgJiYgcm0gIiRHSVRfSU5ERVhfRklMRSIKKwknIDAKKworCUNVUlJFTlRfSEVBRD0kKGdpdCBzaG93LXJlZiAiJEdJVF9OT1RFU19SRUYiIHwgY3V0IC1mIDEgLWQgJyAnKQorCWlmIFsgLXogIiRDVVJSRU5UX0hFQUQiIF07IHRoZW4KKwkJUEFSRU5UPQorCWVsc2UKKwkJUEFSRU5UPSItcCAkQ1VSUkVOVF9IRUFEIgorCQlnaXQgcmVhZC10cmVlICIkR0lUX05PVEVTX1JFRiIgfHwgZGllICJDb3VsZCBub3QgcmVhZCBpbmRleCIKKwlmaQorCisJaWYgWyAteiAiJE1FU1NBR0UiIF07IHRoZW4KKwkJR0lUX05PVEVTX1JFRj0gZ2l0IGxvZyAtMSAkQ09NTUlUIHwgc2VkICJzL14vIy8iID4gIiRNU0dfRklMRSIKKwkJaWYgWyAhIC16ICIkQ1VSUkVOVF9IRUFEIiBdOyB0aGVuCisJCQlnaXQgY2F0LWZpbGUgYmxvYiA6JENPTU1JVCA+PiAiJE1TR19GSUxFIiAyPiAvZGV2L251bGwKKwkJZmkKKwkJY29yZV9lZGl0b3I9IiQoZ2l0IGNvbmZpZyBjb3JlLmVkaXRvcikiCisJCSR7R0lUX0VESVRPUjotJHtjb3JlX2VkaXRvcjotJHtWSVNVQUw6LSR7RURJVE9SOi12aX19fX0gIiRNU0dfRklMRSIKKwllbHNlCisJCWVjaG8gIiRNRVNTQUdFIiA+ICIkTVNHX0ZJTEUiCisJZmkKKworCWdyZXAgLXYgXiMgPCAiJE1TR19GSUxFIiB8IGdpdCBzdHJpcHNwYWNlID4gIiRNU0dfRklMRSIucHJvY2Vzc2VkCisJbXYgIiRNU0dfRklMRSIucHJvY2Vzc2VkICIkTVNHX0ZJTEUiCisJaWYgWyAtcyAiJE1TR19GSUxFIiBdOyB0aGVuCisJCUJMT0I9JChnaXQgaGFzaC1vYmplY3QgLXcgIiRNU0dfRklMRSIpIHx8CisJCQlkaWUgIkNvdWxkIG5vdCB3cml0ZSBpbnRvIG9iamVjdCBkYXRhYmFzZSIKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAwNjQ0ICRCTE9CICRDT01NSVQgfHwKKwkJCWRpZSAiQ291bGQgbm90IHdyaXRlIGluZGV4IgorCWVsc2UKKwkJdGVzdCAteiAiJENVUlJFTlRfSEVBRCIgJiYKKwkJCWRpZSAiV2lsbCBub3QgaW5pdGlhbGlzZSB3aXRoIGVtcHR5IHRyZWUiCisJCWdpdCB1cGRhdGUtaW5kZXggLS1mb3JjZS1yZW1vdmUgJENPTU1JVCB8fAorCQkJZGllICJDb3VsZCBub3QgdXBkYXRlIGluZGV4IgorCWZpCisKKwlUUkVFPSQoZ2l0IHdyaXRlLXRyZWUpIHx8IGRpZSAiQ291bGQgbm90IHdyaXRlIHRyZWUiCisJTkVXX0hFQUQ9JChlY2hvIEFubm90YXRlICRDT01NSVQgfCBnaXQgY29tbWl0LXRyZWUgJFRSRUUgJFBBUkVOVCkgfHwKKwkJZGllICJDb3VsZCBub3QgYW5ub3RhdGUiCisJZ2l0IHVwZGF0ZS1yZWYgLW0gIkFubm90YXRlICRDT01NSVQiIFwKKwkJIiRHSVRfTk9URVNfUkVGIiAkTkVXX0hFQUQgJENVUlJFTlRfSEVBRAorOzsKK3Nob3cpCisJZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSAiJEdJVF9OT1RFU19SRUYiOiRDT01NSVQgPiAvZGV2L251bGwgfHwKKwkJZGllICJObyBub3RlIGZvciBjb21taXQgJENPTU1JVC4iCisJZ2l0IHNob3cgIiRHSVRfTk9URVNfUkVGIjokQ09NTUlUCis7OworKikKKwl1c2FnZQorZXNhYwpkaWZmIC0tZ2l0IGEvZ2l0LXBhcnNlLXJlbW90ZS5zaCBiL2dpdC1wYXJzZS1yZW1vdGUuc2gKaW5kZXggYTI5NjcxOS4uNWY0N2IxOCAxMDA3NTUKLS0tIGEvZ2l0LXBhcnNlLXJlbW90ZS5zaAorKysgYi9naXQtcGFyc2UtcmVtb3RlLnNoCkBAIC02MCwyMDUgKzYwLDM2IEBACiAJZWNobyAke29yaWdpbjotb3JpZ2lufQogfQogCi1nZXRfcmVtb3RlX2RlZmF1bHRfcmVmc19mb3JfcHVzaCAoKSB7Ci0JZGF0YV9zb3VyY2U9JChnZXRfZGF0YV9zb3VyY2UgIiQxIikKLQljYXNlICIkZGF0YV9zb3VyY2UiIGluCi0JJycgfCBicmFuY2hlcyB8IHNlbGYpCi0JCTs7ICMgbm8gZGVmYXVsdCBwdXNoIG1hcHBpbmcsIGp1c3Qgc2VuZCBtYXRjaGluZyByZWZzLgotCWNvbmZpZykKLQkJZ2l0IGNvbmZpZyAtLWdldC1hbGwgInJlbW90ZS4kMS5wdXNoIiA7OwotCXJlbW90ZXMpCi0JCXNlZCAtbmUgJy9eUHVzaDogKi97Ci0JCQlzLy8vcAotCQl9JyAiJEdJVF9ESVIvcmVtb3Rlcy8kMSIgOzsKLQkqKQotCQlkaWUgImludGVybmFsIGVycm9yOiBnZXQtcmVtb3RlLWRlZmF1bHQtcmVmLWZvci1wdXNoICQxIiA7OwotCWVzYWMKLX0KLQotIyBDYWxsZWQgZnJvbSBjYW5vbl9yZWZzX2xpc3RfZm9yX2ZldGNoIC1kICIkcmVtb3RlIiwgd2hpY2gKLSMgaXMgY2FsbGVkIGZyb20gZ2V0X3JlbW90ZV9kZWZhdWx0X3JlZnNfZm9yX2ZldGNoIHRvIGdyb2sKLSMgcmVmc3BlY3MgdGhhdCBhcmUgcmV0cmlldmVkIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24sIGJ1dCBub3QKLSMgZnJvbSBnZXRfcmVtb3RlX3JlZnNfZm9yX2ZldGNoIHdoZW4gaXQgZGVhbHMgd2l0aCByZWZzcGVjcwotIyBzdXBwbGllZCBvbiB0aGUgY29tbWFuZCBsaW5lLiAgJGxzX3JlbW90ZV9yZXN1bHQgaGFzIHRoZSBsaXN0Ci0jIG9mIHJlZnMgYXZhaWxhYmxlIGF0IHJlbW90ZS4KLSMKLSMgVGhlIGZpcnN0IHRva2VuIHJldHVybmVkIGlzIGVpdGhlciAiZXhwbGljaXQiIG9yICJnbG9iIjsgdGhpcwotIyBpcyB0byBoZWxwIHByZXZlbnQgcmFuZG9tbHkgImdsb2JiZWQiIHJlZiBmcm9tIGJlaW5nIGNob3NlbiBhcwotIyBhIG1lcmdlIGNhbmRpZGF0ZQotZXhwYW5kX3JlZnNfd2lsZGNhcmQgKCkgewotCWVjaG8gIiRsc19yZW1vdGVfcmVzdWx0IiB8Ci0JZ2l0IGZldGNoLS10b29sIGV4cGFuZC1yZWZzLXdpbGRjYXJkICItIiAiJEAiCi19Ci0KLSMgU3Vicm91dGluZSB0byBjYW5vbmljYWxpemUgcmVtb3RlOmxvY2FsIG5vdGF0aW9uLgotY2Fub25fcmVmc19saXN0X2Zvcl9mZXRjaCAoKSB7Ci0JIyBJZiBjYWxsZWQgZnJvbSBnZXRfcmVtb3RlX2RlZmF1bHRfcmVmc19mb3JfZmV0Y2gKLQkjIGxlYXZlIHRoZSBicmFuY2hlcyBpbiBicmFuY2guJHtjdXJyX2JyYW5jaH0ubWVyZ2UgYWxvbmUsCi0JIyBvciB0aGUgZmlyc3Qgb25lIG90aGVyd2lzZTsgYWRkIHByZWZpeCAuIHRvIHRoZSByZXN0Ci0JIyB0byBwcmV2ZW50IHRoZSBzZWNvbmRhcnkgYnJhbmNoZXMgdG8gYmUgbWVyZ2VkIGJ5IGRlZmF1bHQuCi0JbWVyZ2VfYnJhbmNoZXM9Ci0JY3Vycl9icmFuY2g9Ci0JaWYgdGVzdCAiJDEiID0gIi1kIgotCXRoZW4KLQkJc2hpZnQgOyByZW1vdGU9IiQxIiA7IHNoaWZ0Ci0JCXNldCAkKGV4cGFuZF9yZWZzX3dpbGRjYXJkICIkcmVtb3RlIiAiJEAiKQotCQlpc19leHBsaWNpdD0iJDEiCi0JCXNoaWZ0Ci0JCWlmIHRlc3QgIiRyZW1vdGUiID0gIiQoZ2V0X2RlZmF1bHRfcmVtb3RlKSIKLQkJdGhlbgotCQkJY3Vycl9icmFuY2g9JChnaXQgc3ltYm9saWMtcmVmIC1xIEhFQUQgfCBcCi0JCQkgICAgc2VkIC1lICdzfF5yZWZzL2hlYWRzL3x8JykKLQkJCW1lcmdlX2JyYW5jaGVzPSQoZ2l0IGNvbmZpZyBcCi0JCQkgICAgLS1nZXQtYWxsICJicmFuY2guJHtjdXJyX2JyYW5jaH0ubWVyZ2UiKQotCQlmaQotCQlpZiB0ZXN0IC16ICIkbWVyZ2VfYnJhbmNoZXMiICYmIHRlc3QgJGlzX2V4cGxpY2l0ICE9IGV4cGxpY2l0Ci0JCXRoZW4KLQkJCW1lcmdlX2JyYW5jaGVzPS4udGhpcy53aWxsLm5ldmVyLm1hdGNoLmFueS5yZWYuLgotCQlmaQotCWZpCi0JZm9yIHJlZgotCWRvCi0JCWZvcmNlPQotCQljYXNlICIkcmVmIiBpbgotCQkrKikKLQkJCXJlZj0kKGV4cHIgInokcmVmIiA6ICd6K1woLipcKScpCi0JCQlmb3JjZT0rCi0JCQk7OwotCQllc2FjCi0JCWV4cHIgInokcmVmIiA6ICd6Lio6JyA+L2Rldi9udWxsIHx8IHJlZj0iJHtyZWZ9OiIKLQkJcmVtb3RlPSQoZXhwciAieiRyZWYiIDogJ3pcKFteOl0qXCk6JykKLQkJbG9jYWw9JChleHByICJ6JHJlZiIgOiAnelteOl0qOlwoLipcKScpCi0JCWRvdF9wcmVmaXg9LgotCQlpZiB0ZXN0IC16ICIkbWVyZ2VfYnJhbmNoZXMiCi0JCXRoZW4KLQkJCW1lcmdlX2JyYW5jaGVzPSRyZW1vdGUKLQkJCWRvdF9wcmVmaXg9Ci0JCWVsc2UKLQkJCWZvciBtZXJnZV9icmFuY2ggaW4gJG1lcmdlX2JyYW5jaGVzCi0JCQlkbwotCQkJICAgIFsgIiRyZW1vdGUiID0gIiRtZXJnZV9icmFuY2giIF0gJiYKLQkJCSAgICBkb3RfcHJlZml4PSAmJiBicmVhawotCQkJZG9uZQotCQlmaQotCQljYXNlICIkcmVtb3RlIiBpbgotCQknJyB8IEhFQUQgKSByZW1vdGU9SEVBRCA7OwotCQlyZWZzLyopIDs7Ci0JCWhlYWRzLyogfCB0YWdzLyogfCByZW1vdGVzLyogKSByZW1vdGU9InJlZnMvJHJlbW90ZSIgOzsKLQkJKikgcmVtb3RlPSJyZWZzL2hlYWRzLyRyZW1vdGUiIDs7Ci0JCWVzYWMKLQkJY2FzZSAiJGxvY2FsIiBpbgotCQknJykgbG9jYWw9IDs7Ci0JCXJlZnMvKikgOzsKLQkJaGVhZHMvKiB8IHRhZ3MvKiB8IHJlbW90ZXMvKiApIGxvY2FsPSJyZWZzLyRsb2NhbCIgOzsKLQkJKikgbG9jYWw9InJlZnMvaGVhZHMvJGxvY2FsIiA7OwotCQllc2FjCi0KLQkJaWYgbG9jYWxfcmVmX25hbWU9JChleHByICJ6JGxvY2FsIiA6ICd6cmVmcy9cKC4qXCknKQotCQl0aGVuCi0JCSAgIGdpdCBjaGVjay1yZWYtZm9ybWF0ICIkbG9jYWxfcmVmX25hbWUiIHx8Ci0JCSAgIGRpZSAiKiByZWZ1c2luZyB0byBjcmVhdGUgZnVubnkgcmVmICckbG9jYWxfcmVmX25hbWUnIGxvY2FsbHkiCi0JCWZpCi0JCWVjaG8gIiR7ZG90X3ByZWZpeH0ke2ZvcmNlfSR7cmVtb3RlfToke2xvY2FsfSIKLQlkb25lCi19Ci0KLSMgUmV0dXJucyBsaXN0IG9mIHNyYzogKG5vIHN0b3JlKSwgb3Igc3JjOmRzdCAoc3RvcmUpCi1nZXRfcmVtb3RlX2RlZmF1bHRfcmVmc19mb3JfZmV0Y2ggKCkgewotCWRhdGFfc291cmNlPSQoZ2V0X2RhdGFfc291cmNlICIkMSIpCi0JY2FzZSAiJGRhdGFfc291cmNlIiBpbgotCScnKQotCQllY2hvICJIRUFEOiIgOzsKLQlzZWxmKQotCSAgICAgICAgY2Fub25fcmVmc19saXN0X2Zvcl9mZXRjaCAtZCAiJDEiIFwKLQkJCSQoZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0nJShyZWZuYW1lKTonKQotCQk7OwotCWNvbmZpZykKLQkJY2Fub25fcmVmc19saXN0X2Zvcl9mZXRjaCAtZCAiJDEiIFwKLQkJCSQoZ2l0IGNvbmZpZyAtLWdldC1hbGwgInJlbW90ZS4kMS5mZXRjaCIpIDs7Ci0JYnJhbmNoZXMpCi0JCXJlbW90ZV9icmFuY2g9JChzZWQgLW5lICcvIy9zLy4qIy8vcCcgIiRHSVRfRElSL2JyYW5jaGVzLyQxIikKLQkJY2FzZSAiJHJlbW90ZV9icmFuY2giIGluICcnKSByZW1vdGVfYnJhbmNoPW1hc3RlciA7OyBlc2FjCi0JCWVjaG8gInJlZnMvaGVhZHMvJHtyZW1vdGVfYnJhbmNofTpyZWZzL2hlYWRzLyQxIgotCQk7OwotCXJlbW90ZXMpCi0JCWNhbm9uX3JlZnNfbGlzdF9mb3JfZmV0Y2ggLWQgIiQxIiAkKHNlZCAtbmUgJy9eUHVsbDogKi97Ci0JCQkJCQlzLy8vcAotCQkJCQl9JyAiJEdJVF9ESVIvcmVtb3Rlcy8kMSIpCi0JCTs7Ci0JKikKLQkJZGllICJpbnRlcm5hbCBlcnJvcjogZ2V0LXJlbW90ZS1kZWZhdWx0LXJlZi1mb3ItZmV0Y2ggJDEiIDs7Ci0JZXNhYwotfQotCi1nZXRfcmVtb3RlX3JlZnNfZm9yX3B1c2ggKCkgeworZ2V0X3JlbW90ZV9tZXJnZV9icmFuY2ggKCkgewogCWNhc2UgIiQjIiBpbgotCTApIGRpZSAiaW50ZXJuYWwgZXJyb3I6IGdldC1yZW1vdGUtcmVmcy1mb3ItcHVzaC4iIDs7Ci0JMSkgZ2V0X3JlbW90ZV9kZWZhdWx0X3JlZnNfZm9yX3B1c2ggIiRAIiA7OwotCSopIHNoaWZ0OyBlY2hvICIkQCIgOzsKLQllc2FjCi19Ci0KLWdldF9yZW1vdGVfcmVmc19mb3JfZmV0Y2ggKCkgewotCWNhc2UgIiQjIiBpbgotCTApCi0JICAgIGRpZSAiaW50ZXJuYWwgZXJyb3I6IGdldC1yZW1vdGUtcmVmcy1mb3ItZmV0Y2guIiA7OwotCTEpCi0JICAgIGdldF9yZW1vdGVfZGVmYXVsdF9yZWZzX2Zvcl9mZXRjaCAiJEAiIDs7Ci0JKikKLQkgICAgc2hpZnQKLQkgICAgdGFnX2p1c3Rfc2Vlbj0KLQkgICAgZm9yIHJlZgotCSAgICBkbwotCQlpZiB0ZXN0ICIkdGFnX2p1c3Rfc2VlbiIKLQkJdGhlbgotCQkgICAgZWNobyAicmVmcy90YWdzLyR7cmVmfTpyZWZzL3RhZ3MvJHtyZWZ9IgotCQkgICAgdGFnX2p1c3Rfc2Vlbj0KLQkJICAgIGNvbnRpbnVlCi0JCWVsc2UKLQkJICAgIGNhc2UgIiRyZWYiIGluCi0JCSAgICB0YWcpCi0JCQl0YWdfanVzdF9zZWVuPXllcwotCQkJY29udGludWUKLQkJCTs7Ci0JCSAgICBlc2FjCi0JCWZpCi0JCWNhbm9uX3JlZnNfbGlzdF9mb3JfZmV0Y2ggIiRyZWYiCi0JICAgIGRvbmUKKwkwfDEpCisJICAgIG9yaWdpbj0iJDEiCisJICAgIGRlZmF1bHQ9JChnZXRfZGVmYXVsdF9yZW1vdGUpCisJICAgIHRlc3QgLXogIiRvcmlnaW4iICYmIG9yaWdpbj0kZGVmYXVsdAorCSAgICBjdXJyX2JyYW5jaD0kKGdpdCBzeW1ib2xpYy1yZWYgLXEgSEVBRCkKKwkgICAgWyAiJG9yaWdpbiIgPSAiJGRlZmF1bHQiIF0gJiYKKwkgICAgZWNobyAkKGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9JyUodXBzdHJlYW0pJyAkY3Vycl9icmFuY2gpCiAJICAgIDs7Ci0JZXNhYwotfQotCi1yZXNvbHZlX2FsdGVybmF0ZXMgKCkgewotCSMgb3JpZ2luYWwgVVJMICh4eHguZ2l0KQotCXRvcF89YGV4cHIgInokMSIgOiAnelwoW146XSo6LypbXi9dKlwpLydgCi0Jd2hpbGUgcmVhZCBwYXRoCi0JZG8KLQkJY2FzZSAiJHBhdGgiIGluCi0JCVwjKiB8ICcnKQotCQkJY29udGludWUgOzsKLQkJLyopCi0JCQllY2hvICIkdG9wXyRwYXRoLyIgOzsKLQkJLi4vKikKLQkJCSMgcmVsYXRpdmUgLS0gdWdseSBidXQgc2VlbXMgdG8gd29yay4KLQkJCWVjaG8gIiQxL29iamVjdHMvJHBhdGgvIiA7OwotCQkqKQotCQkJIyBleGl0IGNvZGUgbWF5IG5vdCBiZSBjYXVnaHQgYnkgdGhlIHJlYWRlci4KLQkJCWVjaG8gImJhZCBhbHRlcm5hdGU6ICRwYXRoIgotCQkJZXhpdCAxIDs7Ci0JCWVzYWMKLQlkb25lCi19Ci0KLWdldF91cGxvYWRwYWNrICgpIHsKLQlkYXRhX3NvdXJjZT0kKGdldF9kYXRhX3NvdXJjZSAiJDEiKQotCWNhc2UgIiRkYXRhX3NvdXJjZSIgaW4KLQljb25maWcpCi0JCXVwbHA9JChnaXQgY29uZmlnIC0tZ2V0ICJyZW1vdGUuJDEudXBsb2FkcGFjayIpCi0JCWVjaG8gJHt1cGxwOi1naXQtdXBsb2FkLXBhY2t9Ci0JCTs7CiAJKikKLQkJZWNobyAiZ2l0LXVwbG9hZC1wYWNrIgorCSAgICByZXBvPSQxCisJICAgIHNoaWZ0CisJICAgIHJlZj0kMQorCSAgICAjIEZJWE1FOiBJdCBzaG91bGQgcmV0dXJuIHRoZSB0cmFja2luZyBicmFuY2gKKwkgICAgIyAgICAgICAgQ3VycmVudGx5IG9ubHkgd29ya3Mgd2l0aCB0aGUgZGVmYXVsdCBtYXBwaW5nCisJICAgIGNhc2UgIiRyZWYiIGluCisJICAgICsqKQorCQlyZWY9JChleHByICJ6JHJlZiIgOiAneitcKC4qXCknKQogCQk7OworCSAgICBlc2FjCisJICAgIGV4cHIgInokcmVmIiA6ICd6Lio6JyA+L2Rldi9udWxsIHx8IHJlZj0iJHtyZWZ9OiIKKwkgICAgcmVtb3RlPSQoZXhwciAieiRyZWYiIDogJ3pcKFteOl0qXCk6JykKKwkgICAgY2FzZSAiJHJlbW90ZSIgaW4KKwkgICAgJycgfCBIRUFEICkgcmVtb3RlPUhFQUQgOzsKKwkgICAgaGVhZHMvKikgcmVtb3RlPSR7cmVtb3RlI2hlYWRzL30gOzsKKwkgICAgcmVmcy9oZWFkcy8qKSByZW1vdGU9JHtyZW1vdGUjcmVmcy9oZWFkcy99IDs7CisJICAgIHJlZnMvKiB8IHRhZ3MvKiB8IHJlbW90ZXMvKiApIHJlbW90ZT0KKwkgICAgZXNhYworCisJICAgIFsgLW4gIiRyZW1vdGUiIF0gJiYgZWNobyAicmVmcy9yZW1vdGVzLyRyZXBvLyRyZW1vdGUiCiAJZXNhYwogfQpkaWZmIC0tZ2l0IGEvZ2l0LXB1bGwuc2ggYi9naXQtcHVsbC5zaAppbmRleCBjYWIzNjdhLi4yNDZhM2E0IDEwMDc1NQotLS0gYS9naXQtcHVsbC5zaAorKysgYi9naXQtcHVsbC5zaApAQCAtMTMsMTIgKzEzLDM1IEBACiByZXF1aXJlX3dvcmtfdHJlZQogY2RfdG9fdG9wbGV2ZWwKIAotdGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLXUpIiB8fAotCWRpZSAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY29uZmxpY3RlZCBtZXJnZS4iCiAKLXN0cmF0ZWd5X2FyZ3M9IGRpZmZzdGF0PSBub19jb21taXQ9IHNxdWFzaD0gbm9fZmY9IGxvZ19hcmc9IHZlcmJvc2l0eT0KK2RpZV9jb25mbGljdCAoKSB7CisgICAgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1uYW1lLXN0YXR1cyAtciAtLWlnbm9yZS1zdWJtb2R1bGVzIEhFQUQgLS0KKyAgICBpZiBbICQoZ2l0IGNvbmZpZyAtLWJvb2wgLS1nZXQgYWR2aWNlLnJlc29sdmVDb25mbGljdCB8fCBlY2hvIHRydWUpID0gInRydWUiIF07IHRoZW4KKwlkaWUgIlB1bGwgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuCitQbGVhc2UsIGZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsIGFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nCithcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24sIG9yIHVzZSAnZ2l0IGNvbW1pdCAtYScuIgorICAgIGVsc2UKKwlkaWUgIlB1bGwgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorICAgIGZpCit9CisKK2RpZV9tZXJnZSAoKSB7CisgICAgaWYgWyAkKGdpdCBjb25maWcgLS1ib29sIC0tZ2V0IGFkdmljZS5yZXNvbHZlQ29uZmxpY3QgfHwgZWNobyB0cnVlKSA9ICJ0cnVlIiBdOyB0aGVuCisJZGllICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS4KK1BsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IGNhbiBtZXJnZS4iCisgICAgZWxzZQorCWRpZSAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuIgorICAgIGZpCit9CisKK3Rlc3QgLXogIiQoZ2l0IGxzLWZpbGVzIC11KSIgfHwgZGllX2NvbmZsaWN0Cit0ZXN0IC1mICIkR0lUX0RJUi9NRVJHRV9IRUFEIiAmJiBkaWVfbWVyZ2UKKworc3RyYXRlZ3lfYXJncz0gZGlmZnN0YXQ9IG5vX2NvbW1pdD0gc3F1YXNoPSBub19mZj0gZmZfb25seT0KK2xvZ19hcmc9IHZlcmJvc2l0eT0KK21lcmdlX2FyZ3M9CiBjdXJyX2JyYW5jaD0kKGdpdCBzeW1ib2xpYy1yZWYgLXEgSEVBRCkKLWN1cnJfYnJhbmNoX3Nob3J0PSQoZWNobyAiJGN1cnJfYnJhbmNoIiB8IHNlZCAic3xyZWZzL2hlYWRzL3x8IikKK2N1cnJfYnJhbmNoX3Nob3J0PSIke2N1cnJfYnJhbmNoI3JlZnMvaGVhZHMvfSIKIHJlYmFzZT0kKGdpdCBjb25maWcgLS1ib29sIGJyYW5jaC4kY3Vycl9icmFuY2hfc2hvcnQucmViYXNlKQogd2hpbGUgOgogZG8KQEAgLTQ1LDYgKzY4LDggQEAKIAkJbm9fZmY9LS1mZiA7OwogCS0tbm8tZmYpCiAJCW5vX2ZmPS0tbm8tZmYgOzsKKwktLWZmLW9ubHkpCisJCWZmX29ubHk9LS1mZi1vbmx5IDs7CiAJLXM9KnwtLXM9KnwtLXN0PSp8LS1zdHI9KnwtLXN0cmE9KnwtLXN0cmF0PSp8LS1zdHJhdGU9KnxcCiAJCS0tc3RyYXRlZz0qfC0tc3RyYXRlZ3k9KnxcCiAJLXN8LS1zfC0tc3R8LS1zdHJ8LS1zdHJhfC0tc3RyYXR8LS1zdHJhdGV8LS1zdHJhdGVnfC0tc3RyYXRlZ3kpCkBAIC01OSw2ICs4NCwxOCBAQAogCQllc2FjCiAJCXN0cmF0ZWd5X2FyZ3M9IiR7c3RyYXRlZ3lfYXJnc30tcyAkc3RyYXRlZ3kgIgogCQk7OworCS1YKikKKwkJY2FzZSAiJCMsJDEiIGluCisJCTEsLVgpCisJCQl1c2FnZSA7OworCQkqLC1YKQorCQkJeHg9Ii1YICQoZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlICIkMiIpIgorCQkJc2hpZnQgOzsKKwkJKiwqKQorCQkJeHg9JChnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgIiQxIikgOzsKKwkJZXNhYworCQltZXJnZV9hcmdzPSIkbWVyZ2VfYXJncyR4eCAiCisJCTs7CiAJLXJ8LS1yfC0tcmV8LS1yZWJ8LS1yZWJhfC0tcmViYXN8LS1yZWJhc2UpCiAJCXJlYmFzZT10cnVlCiAJCTs7CkBAIC04OCw0OSArMTI1LDkzIEBACiAJCWVzYWMKIAlkb25lCiAKLQljdXJyX2JyYW5jaD0ke2N1cnJfYnJhbmNoI3JlZnMvaGVhZHMvfQorCWlmIHRlc3QgdHJ1ZSA9ICIkcmViYXNlIgorCXRoZW4KKwkJb3BfdHlwZT1yZWJhc2UKKwkJb3BfcHJlcD1hZ2FpbnN0CisJZWxzZQorCQlvcF90eXBlPW1lcmdlCisJCW9wX3ByZXA9d2l0aAorCWZpCiAKLQlpZiBbIC16ICIkY3Vycl9icmFuY2giIF07IHRoZW4KKwljdXJyX2JyYW5jaD0ke2N1cnJfYnJhbmNoI3JlZnMvaGVhZHMvfQorCXVwc3RyZWFtPSQoZ2l0IGNvbmZpZyAiYnJhbmNoLiRjdXJyX2JyYW5jaC5tZXJnZSIpCisJcmVtb3RlPSQoZ2l0IGNvbmZpZyAiYnJhbmNoLiRjdXJyX2JyYW5jaC5yZW1vdGUiKQorCisJaWYgWyAkIyAtZ3QgMSBdOyB0aGVuCisJCWlmIFsgIiRyZWJhc2UiID0gdHJ1ZSBdOyB0aGVuCisJCQlwcmludGYgIlRoZXJlIGlzIG5vIGNhbmRpZGF0ZSBmb3IgcmViYXNpbmcgYWdhaW5zdCAiCisJCWVsc2UKKwkJCXByaW50ZiAiVGhlcmUgYXJlIG5vIGNhbmRpZGF0ZXMgZm9yIG1lcmdpbmcgIgorCQlmaQorCQllY2hvICJhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0IGZldGNoZWQuIgorCQllY2hvICJHZW5lcmFsbHkgdGhpcyBtZWFucyB0aGF0IHlvdSBwcm92aWRlZCBhIHdpbGRjYXJkIHJlZnNwZWMgd2hpY2ggaGFkIG5vIgorCQllY2hvICJtYXRjaGVzIG9uIHRoZSByZW1vdGUgZW5kLiIKKwllbGlmIFsgJCMgLWd0IDAgXSAmJiBbICIkMSIgIT0gIiRyZW1vdGUiIF07IHRoZW4KKwkJZWNobyAiWW91IGFza2VkIHRvIHB1bGwgZnJvbSB0aGUgcmVtb3RlICckMScsIGJ1dCBkaWQgbm90IHNwZWNpZnkiCisJCWVjaG8gImEgYnJhbmNoLiBCZWNhdXNlIHRoaXMgaXMgbm90IHRoZSBkZWZhdWx0IGNvbmZpZ3VyZWQgcmVtb3RlIgorCQllY2hvICJmb3IgeW91ciBjdXJyZW50IGJyYW5jaCwgeW91IG11c3Qgc3BlY2lmeSBhIGJyYW5jaCBvbiB0aGUgY29tbWFuZCBsaW5lLiIKKwllbGlmIFsgLXogIiRjdXJyX2JyYW5jaCIgXTsgdGhlbgogCQllY2hvICJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2gsIHNvIEkgY2Fubm90IHVzZSBhbnkiCiAJCWVjaG8gIidicmFuY2guPGJyYW5jaG5hbWU+Lm1lcmdlJyBpbiB5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZS4iCi0JCWVjaG8gIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byBtZXJnZSBvbiB0aGUgY29tbWFuZCIKKwkJZWNobyAiUGxlYXNlIHNwZWNpZnkgd2hpY2ggcmVtb3RlIGJyYW5jaCB5b3Ugd2FudCB0byB1c2Ugb24gdGhlIGNvbW1hbmQiCiAJCWVjaG8gImxpbmUgYW5kIHRyeSBhZ2FpbiAoZS5nLiAnZ2l0IHB1bGwgPHJlcG9zaXRvcnk+IDxyZWZzcGVjPicpLiIKIAkJZWNobyAiU2VlIGdpdC1wdWxsKDEpIGZvciBkZXRhaWxzLiIKLQllbHNlCisJZWxpZiBbIC16ICIkdXBzdHJlYW0iIF07IHRoZW4KIAkJZWNobyAiWW91IGFza2VkIG1lIHRvIHB1bGwgd2l0aG91dCB0ZWxsaW5nIG1lIHdoaWNoIGJyYW5jaCB5b3UiCi0JCWVjaG8gIndhbnQgdG8gbWVyZ2Ugd2l0aCwgYW5kICdicmFuY2guJHtjdXJyX2JyYW5jaH0ubWVyZ2UnIGluIgotCQllY2hvICJ5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZSBkb2VzIG5vdCB0ZWxsIG1lIGVpdGhlci4JUGxlYXNlIgotCQllY2hvICJzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byBtZXJnZSBvbiB0aGUgY29tbWFuZCBsaW5lIGFuZCIKKwkJZWNobyAid2FudCB0byAkb3BfdHlwZSAkb3BfcHJlcCwgYW5kICdicmFuY2guJHtjdXJyX2JyYW5jaH0ubWVyZ2UnIGluIgorCQllY2hvICJ5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZSBkb2VzIG5vdCB0ZWxsIG1lLCBlaXRoZXIuIFBsZWFzZSIKKwkJZWNobyAic3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gdXNlIG9uIHRoZSBjb21tYW5kIGxpbmUgYW5kIgogCQllY2hvICJ0cnkgYWdhaW4gKGUuZy4gJ2dpdCBwdWxsIDxyZXBvc2l0b3J5PiA8cmVmc3BlYz4nKS4iCiAJCWVjaG8gIlNlZSBnaXQtcHVsbCgxKSBmb3IgZGV0YWlscy4iCiAJCWVjaG8KLQkJZWNobyAiSWYgeW91IG9mdGVuIG1lcmdlIHdpdGggdGhlIHNhbWUgYnJhbmNoLCB5b3UgbWF5IHdhbnQgdG8iCi0JCWVjaG8gImNvbmZpZ3VyZSB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcyBpbiB5b3VyIGNvbmZpZ3VyYXRpb24iCi0JCWVjaG8gImZpbGU6IgorCQllY2hvICJJZiB5b3Ugb2Z0ZW4gJG9wX3R5cGUgJG9wX3ByZXAgdGhlIHNhbWUgYnJhbmNoLCB5b3UgbWF5IHdhbnQgdG8iCisJCWVjaG8gInVzZSBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nIGluIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlOiIKIAkJZWNobwotCQllY2hvICIgICAgYnJhbmNoLiR7Y3Vycl9icmFuY2h9LnJlbW90ZSA9IDxuaWNrbmFtZT4iCi0JCWVjaG8gIiAgICBicmFuY2guJHtjdXJyX2JyYW5jaH0ubWVyZ2UgPSA8cmVtb3RlLXJlZj4iCi0JCWVjaG8gIiAgICByZW1vdGUuPG5pY2tuYW1lPi51cmwgPSA8dXJsPiIKLQkJZWNobyAiICAgIHJlbW90ZS48bmlja25hbWU+LmZldGNoID0gPHJlZnNwZWM+IgorCQllY2hvICIgICAgW2JyYW5jaCBcIiR7Y3Vycl9icmFuY2h9XCJdIgorCQllY2hvICIgICAgcmVtb3RlID0gPG5pY2tuYW1lPiIKKwkJZWNobyAiICAgIG1lcmdlID0gPHJlbW90ZS1yZWY+IgorCQl0ZXN0IHJlYmFzZSA9ICIkb3BfdHlwZSIgJiYKKwkJCWVjaG8gIiAgICByZWJhc2UgPSB0cnVlIgorCQllY2hvCisJCWVjaG8gIiAgICBbcmVtb3RlIFwiPG5pY2tuYW1lPlwiXSIKKwkJZWNobyAiICAgIHVybCA9IDx1cmw+IgorCQllY2hvICIgICAgZmV0Y2ggPSA8cmVmc3BlYz4iCiAJCWVjaG8KIAkJZWNobyAiU2VlIGdpdC1jb25maWcoMSkgZm9yIGRldGFpbHMuIgorCWVsc2UKKwkJZWNobyAiWW91ciBjb25maWd1cmF0aW9uIHNwZWNpZmllcyB0byAkb3BfdHlwZSAkb3BfcHJlcCB0aGUgcmVmICcke3Vwc3RyZWFtI3JlZnMvaGVhZHMvfSciCisJCWVjaG8gImZyb20gdGhlIHJlbW90ZSwgYnV0IG5vIHN1Y2ggcmVmIHdhcyBmZXRjaGVkLiIKIAlmaQogCWV4aXQgMQogfQogCiB0ZXN0IHRydWUgPSAiJHJlYmFzZSIgJiYgewotCWdpdCB1cGRhdGUtaW5kZXggLS1pZ25vcmUtc3VibW9kdWxlcyAtLXJlZnJlc2ggJiYKLQlnaXQgZGlmZi1maWxlcyAtLWlnbm9yZS1zdWJtb2R1bGVzIC0tcXVpZXQgJiYKLQlnaXQgZGlmZi1pbmRleCAtLWlnbm9yZS1zdWJtb2R1bGVzIC0tY2FjaGVkIC0tcXVpZXQgSEVBRCAtLSB8fAotCWRpZSAicmVmdXNpbmcgdG8gcHVsbCB3aXRoIHJlYmFzZTogeW91ciB3b3JraW5nIHRyZWUgaXMgbm90IHVwLXRvLWRhdGUiCi0KKwlpZiAhIGdpdCByZXYtcGFyc2UgLXEgLS12ZXJpZnkgSEVBRCA+L2Rldi9udWxsCisJdGhlbgorCQkjIE9uIGFuIHVuYm9ybiBicmFuY2gKKwkJaWYgdGVzdCAtZiAiJEdJVF9ESVIvaW5kZXgiCisJCXRoZW4KKwkJCWRpZSAidXBkYXRpbmcgYW4gdW5ib3JuIGJyYW5jaCB3aXRoIGNoYW5nZXMgYWRkZWQgdG8gdGhlIGluZGV4IgorCQlmaQorCWVsc2UKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLWlnbm9yZS1zdWJtb2R1bGVzIC0tcmVmcmVzaCAmJgorCQlnaXQgZGlmZi1maWxlcyAtLWlnbm9yZS1zdWJtb2R1bGVzIC0tcXVpZXQgJiYKKwkJZ2l0IGRpZmYtaW5kZXggLS1pZ25vcmUtc3VibW9kdWxlcyAtLWNhY2hlZCAtLXF1aWV0IEhFQUQgLS0gfHwKKwkJZGllICJyZWZ1c2luZyB0byBwdWxsIHdpdGggcmViYXNlOiB5b3VyIHdvcmtpbmcgdHJlZSBpcyBub3QgdXAtdG8tZGF0ZSIKKwlmaQorCW9sZHJlbW90ZXJlZj0gJiYKIAkuIGdpdC1wYXJzZS1yZW1vdGUgJiYKLQlvcmlnaW49IiQxIgotCXRlc3QgLXogIiRvcmlnaW4iICYmIG9yaWdpbj0kKGdldF9kZWZhdWx0X3JlbW90ZSkKLQlyZWZsaXN0PSIkKGdldF9yZW1vdGVfcmVmc19mb3JfZmV0Y2ggIiRAIiAyPi9kZXYvbnVsbCB8Ci0JCXNlZCAic3xyZWZzL2hlYWRzL1woLipcKTp8XDF8IikiICYmCi0Jb2xkcmVtb3RlcmVmPSIkKGdpdCByZXYtcGFyc2UgLXEgLS12ZXJpZnkgXAotCQkicmVmcy9yZW1vdGVzLyRvcmlnaW4vJHJlZmxpc3QiKSIKKwlyZW1vdGVyZWY9IiQoZ2V0X3JlbW90ZV9tZXJnZV9icmFuY2ggIiRAIiAyPi9kZXYvbnVsbCkiICYmCisJb2xkcmVtb3RlcmVmPSIkKGdpdCByZXYtcGFyc2UgLXEgLS12ZXJpZnkgIiRyZW1vdGVyZWYiKSIgJiYKKwlmb3IgcmVmbG9nIGluICQoZ2l0IHJldi1saXN0IC1nICRyZW1vdGVyZWYgMj4vZGV2L251bGwpCisJZG8KKwkJaWYgdGVzdCAiJHJlZmxvZyIgPSAiJChnaXQgbWVyZ2UtYmFzZSAkcmVmbG9nICRjdXJyX2JyYW5jaCkiCisJCXRoZW4KKwkJCW9sZHJlbW90ZXJlZj0iJHJlZmxvZyIKKwkJCWJyZWFrCisJCWZpCisJZG9uZQogfQogb3JpZ19oZWFkPSQoZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSBIRUFEKQogZ2l0IGZldGNoICR2ZXJib3NpdHkgLS11cGRhdGUtaGVhZC1vayAiJEAiIHx8IGV4aXQgMQpAQCAtMTQ1LDcgKzIyNiw3IEBACiAJIyBGaXJzdCB1cGRhdGUgdGhlIHdvcmtpbmcgdHJlZSB0byBtYXRjaCAkY3Vycl9oZWFkLgogCiAJZWNobyA+JjIgIldhcm5pbmc6IGZldGNoIHVwZGF0ZWQgdGhlIGN1cnJlbnQgYnJhbmNoIGhlYWQuIgotCWVjaG8gPiYyICJXYXJuaW5nOiBmYXN0IGZvcndhcmRpbmcgeW91ciB3b3JraW5nIHRyZWUgZnJvbSIKKwllY2hvID4mMiAiV2FybmluZzogZmFzdC1mb3J3YXJkaW5nIHlvdXIgd29ya2luZyB0cmVlIGZyb20iCiAJZWNobyA+JjIgIldhcm5pbmc6IGNvbW1pdCAkb3JpZ19oZWFkLiIKIAlnaXQgdXBkYXRlLWluZGV4IC1xIC0tcmVmcmVzaAogCWdpdCByZWFkLXRyZWUgLXUgLW0gIiRvcmlnX2hlYWQiICIkY3Vycl9oZWFkIiB8fApAQCAtMTY0LDE0ICsyNDUsNyBAQAogCiBjYXNlICIkbWVyZ2VfaGVhZCIgaW4KICcnKQotCWNhc2UgJD8gaW4KLQkwKSBlcnJvcl9vbl9ub19tZXJnZV9jYW5kaWRhdGVzICIkQCI7OwotCTEpIGVjaG8gPiYyICJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2g7IHlvdSBtdXN0IGV4cGxpY2l0bHkiCi0JICAgZWNobyA+JjIgInNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3aXNoIHRvIG1lcmdlOiIKLQkgICBlY2hvID4mMiAiICBnaXQgcHVsbCA8cmVtb3RlPiA8YnJhbmNoPiIKLQkgICBleGl0IDE7OwotCSopIGV4aXQgJD87OwotCWVzYWMKKwllcnJvcl9vbl9ub19tZXJnZV9jYW5kaWRhdGVzICIkQCIKIAk7OwogPyonICc/KikKIAlpZiB0ZXN0IC16ICIkb3JpZ19oZWFkIgpAQCAtMTkzLDggKzI2NywxNSBAQAogZmkKIAogbWVyZ2VfbmFtZT0kKGdpdCBmbXQtbWVyZ2UtbXNnICRsb2dfYXJnIDwiJEdJVF9ESVIvRkVUQ0hfSEVBRCIpIHx8IGV4aXQKLXRlc3QgdHJ1ZSA9ICIkcmViYXNlIiAmJgotCWV4ZWMgZ2l0LXJlYmFzZSAkZGlmZnN0YXQgJHN0cmF0ZWd5X2FyZ3MgLS1vbnRvICRtZXJnZV9oZWFkIFwKLQkke29sZHJlbW90ZXJlZjotJG1lcmdlX2hlYWR9Ci1leGVjIGdpdC1tZXJnZSAkZGlmZnN0YXQgJG5vX2NvbW1pdCAkc3F1YXNoICRub19mZiAkbG9nX2FyZyAkc3RyYXRlZ3lfYXJncyBcCi0JIiRtZXJnZV9uYW1lIiBIRUFEICRtZXJnZV9oZWFkICR2ZXJib3NpdHkKK2Nhc2UgIiRyZWJhc2UiIGluCit0cnVlKQorCWV2YWw9ImdpdC1yZWJhc2UgJGRpZmZzdGF0ICRzdHJhdGVneV9hcmdzICRtZXJnZV9hcmdzIgorCWV2YWw9IiRldmFsIC0tb250byAkbWVyZ2VfaGVhZCAke29sZHJlbW90ZXJlZjotJG1lcmdlX2hlYWR9IgorCTs7CisqKQorCWV2YWw9ImdpdC1tZXJnZSAkZGlmZnN0YXQgJG5vX2NvbW1pdCAkc3F1YXNoICRub19mZiAkZmZfb25seSIKKwlldmFsPSIkZXZhbCAgJGxvZ19hcmcgJHN0cmF0ZWd5X2FyZ3MgJG1lcmdlX2FyZ3MiCisJZXZhbD0iJGV2YWwgXCJcJG1lcmdlX25hbWVcIiBIRUFEICRtZXJnZV9oZWFkICR2ZXJib3NpdHkiCisJOzsKK2VzYWMKK2V2YWwgImV4ZWMgJGV2YWwiCmRpZmYgLS1naXQgYS9naXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaCBiL2dpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoCmluZGV4IGY5NmQ4ODcuLjNlNGZkMTQgMTAwNzU1Ci0tLSBhL2dpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoCisrKyBiL2dpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoCkBAIC0yOCwyNCArMjgsODEgQEAKIHNraXAgICAgICAgICAgICAgICBza2lwIGN1cnJlbnQgcGF0Y2ggYW5kIGNvbnRpbnVlIHJlYmFzaW5nIHByb2Nlc3MKIG5vLXZlcmlmeSAgICAgICAgICBvdmVycmlkZSBwcmUtcmViYXNlIGhvb2sgZnJvbSBzdG9wcGluZyB0aGUgb3BlcmF0aW9uCiByb290ICAgICAgICAgICAgICAgcmViYXNlIGFsbCByZWFjaGFibGUgY29tbW1pdHMgdXAgdG8gdGhlIHJvb3QocykKK2F1dG9zcXVhc2ggICAgICAgICBtb3ZlIGNvbW1pdHMgdGhhdCBiZWdpbiB3aXRoIHNxdWFzaCEvZml4dXAhIHVuZGVyIC1pCiAiCiAKIC4gZ2l0LXNoLXNldHVwCiByZXF1aXJlX3dvcmtfdHJlZQogCiBET1RFU1Q9IiRHSVRfRElSL3JlYmFzZS1tZXJnZSIKKworIyBUaGUgZmlsZSBjb250YWluaW5nIHJlYmFzZSBjb21tYW5kcywgY29tbWVudHMsIGFuZCBlbXB0eSBsaW5lcy4KKyMgVGhpcyBmaWxlIGlzIGNyZWF0ZWQgYnkgImdpdCByZWJhc2UgLWkiIHRoZW4gZWRpdGVkIGJ5IHRoZSB1c2VyLiAgQXMKKyMgdGhlIGxpbmVzIGFyZSBwcm9jZXNzZWQsIHRoZXkgYXJlIHJlbW92ZWQgZnJvbSB0aGUgZnJvbnQgb2YgdGhpcworIyBmaWxlIGFuZCB3cml0dGVuIHRvIHRoZSB0YWlsIG9mICRET05FLgogVE9ETz0iJERPVEVTVCIvZ2l0LXJlYmFzZS10b2RvCisKKyMgVGhlIHJlYmFzZSBjb21tYW5kIGxpbmVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkLiAgQSBsaW5lCisjIGlzIG1vdmVkIGhlcmUgd2hlbiBpdCBpcyBmaXJzdCBoYW5kbGVkLCBiZWZvcmUgYW55IGFzc29jaWF0ZWQgdXNlcgorIyBhY3Rpb25zLgogRE9ORT0iJERPVEVTVCIvZG9uZQorCisjIFRoZSBjb21taXQgbWVzc2FnZSB0aGF0IGlzIHBsYW5uZWQgdG8gYmUgdXNlZCBmb3IgYW55IGNoYW5nZXMgdGhhdAorIyBuZWVkIHRvIGJlIGNvbW1pdHRlZCBmb2xsb3dpbmcgYSB1c2VyIGludGVyYWN0aW9uLgogTVNHPSIkRE9URVNUIi9tZXNzYWdlCisKKyMgVGhlIGZpbGUgaW50byB3aGljaCBpcyBhY2N1bXVsYXRlZCB0aGUgc3VnZ2VzdGVkIGNvbW1pdCBtZXNzYWdlIGZvcgorIyBzcXVhc2gvZml4dXAgY29tbWFuZHMuICBXaGVuIHRoZSBmaXJzdCBvZiBhIHNlcmllcyBvZiBzcXVhc2gvZml4dXBzCisjIGlzIHNlZW4sIHRoZSBmaWxlIGlzIGNyZWF0ZWQgYW5kIHRoZSBjb21taXQgbWVzc2FnZSBmcm9tIHRoZQorIyBwcmV2aW91cyBjb21taXQgYW5kIGZyb20gdGhlIGZpcnN0IHNxdWFzaC9maXh1cCBjb21taXQgYXJlIHdyaXR0ZW4KKyMgdG8gaXQuICBUaGUgY29tbWl0IG1lc3NhZ2UgZm9yIGVhY2ggc3Vic2VxdWVudCBzcXVhc2gvZml4dXAgY29tbWl0CisjIGlzIGFwcGVuZGVkIHRvIHRoZSBmaWxlIGFzIGl0IGlzIHByb2Nlc3NlZC4KKyMKKyMgVGhlIGZpcnN0IGxpbmUgb2YgdGhlIGZpbGUgaXMgb2YgdGhlIGZvcm0KKyMgICAgICMgVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICRDT1VOVCBjb21taXRzLgorIyB3aGVyZSAkQ09VTlQgaXMgdGhlIG51bWJlciBvZiBjb21taXRzIHdob3NlIG1lc3NhZ2VzIGhhdmUgYmVlbgorIyB3cml0dGVuIHRvIHRoZSBmaWxlIHNvIGZhciAoaW5jbHVkaW5nIHRoZSBpbml0aWFsICJwaWNrIiBjb21taXQpLgorIyBFYWNoIHRpbWUgdGhhdCBhIGNvbW1pdCBtZXNzYWdlIGlzIHByb2Nlc3NlZCwgdGhpcyBsaW5lIGlzIHJlYWQgYW5kCisjIHVwZGF0ZWQuICBJdCBpcyBkZWxldGVkIGp1c3QgYmVmb3JlIHRoZSBjb21iaW5lZCBjb21taXQgaXMgbWFkZS4KIFNRVUFTSF9NU0c9IiRET1RFU1QiL21lc3NhZ2Utc3F1YXNoCisKKyMgSWYgdGhlIGN1cnJlbnQgc2VyaWVzIG9mIHNxdWFzaC9maXh1cHMgaGFzIG5vdCB5ZXQgaW5jbHVkZWQgYSBzcXVhc2gKKyMgY29tbWFuZCwgdGhlbiB0aGlzIGZpbGUgZXhpc3RzIGFuZCBob2xkcyB0aGUgY29tbWl0IG1lc3NhZ2Ugb2YgdGhlCisjIG9yaWdpbmFsICJwaWNrIiBjb21taXQuICAoSWYgdGhlIHNlcmllcyBlbmRzIHdpdGhvdXQgYSAic3F1YXNoIgorIyBjb21tYW5kLCB0aGVuIHRoaXMgY2FuIGJlIHVzZWQgYXMgdGhlIGNvbW1pdCBtZXNzYWdlIG9mIHRoZSBjb21iaW5lZAorIyBjb21taXQgd2l0aG91dCBvcGVuaW5nIHRoZSBlZGl0b3IuKQorRklYVVBfTVNHPSIkRE9URVNUIi9tZXNzYWdlLWZpeHVwCisKKyMgJFJFV1JJVFRFTiBpcyB0aGUgbmFtZSBvZiBhIGRpcmVjdG9yeSBjb250YWluaW5nIGZpbGVzIGZvciBlYWNoCisjIGNvbW1pdCB0aGF0IGlzIHJlYWNoYWJsZSBieSBhdCBsZWFzdCBvbmUgbWVyZ2UgYmFzZSBvZiAkSEVBRCBhbmQKKyMgJFVQU1RSRUFNLiBUaGV5IGFyZSBub3QgbmVjZXNzYXJpbHkgcmV3cml0dGVuLCBidXQgdGhlaXIgY2hpbGRyZW4KKyMgbWlnaHQgYmUuICBUaGlzIGVuc3VyZXMgdGhhdCBjb21taXRzIG9uIG1lcmdlZCwgYnV0IG90aGVyd2lzZQorIyB1bnJlbGF0ZWQgc2lkZSBicmFuY2hlcyBhcmUgbGVmdCBhbG9uZS4gKFRoaW5rICJYIiBpbiB0aGUgbWFuIHBhZ2UncworIyBleGFtcGxlLikKIFJFV1JJVFRFTj0iJERPVEVTVCIvcmV3cml0dGVuCisKIERST1BQRUQ9IiRET1RFU1QiL2Ryb3BwZWQKKworIyBBIHNjcmlwdCB0byBzZXQgdGhlIEdJVF9BVVRIT1JfTkFNRSwgR0lUX0FVVEhPUl9FTUFJTCwgYW5kCisjIEdJVF9BVVRIT1JfREFURSB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdGhlIGNvbW1pdCB0aGF0IGlzIGN1cnJlbnRseQorIyBiZWluZyByZWJhc2VkLgorQVVUSE9SX1NDUklQVD0iJERPVEVTVCIvYXV0aG9yLXNjcmlwdAorCisjIFdoZW4gYW4gImVkaXQiIHJlYmFzZSBjb21tYW5kIGlzIGJlaW5nIHByb2Nlc3NlZCwgdGhlIFNIQTEgb2YgdGhlCisjIGNvbW1pdCB0byBiZSBlZGl0ZWQgaXMgcmVjb3JkZWQgaW4gdGhpcyBmaWxlLiAgV2hlbiAiZ2l0IHJlYmFzZQorIyAtLWNvbnRpbnVlIiBpcyBleGVjdXRlZCwgaWYgdGhlcmUgYXJlIGFueSBzdGFnZWQgY2hhbmdlcyB0aGVuIHRoZXkKKyMgd2lsbCBiZSBhbWVuZGVkIHRvIHRoZSBIRUFEIGNvbW1pdCwgYnV0IG9ubHkgcHJvdmlkZWQgdGhlIEhFQUQKKyMgY29tbWl0IGlzIHN0aWxsIHRoZSBjb21taXQgdG8gYmUgZWRpdGVkLiAgV2hlbiBhbnkgb3RoZXIgcmViYXNlCisjIGNvbW1hbmQgaXMgcHJvY2Vzc2VkLCB0aGlzIGZpbGUgaXMgZGVsZXRlZC4KK0FNRU5EPSIkRE9URVNUIi9hbWVuZAorCiBQUkVTRVJWRV9NRVJHRVM9CiBTVFJBVEVHWT0KIE9OVE89CiBWRVJCT1NFPQogT0tfVE9fU0tJUF9QUkVfUkVCQVNFPQogUkVCQVNFX1JPT1Q9CitBVVRPU1FVQVNIPQogCiBHSVRfQ0hFUlJZX1BJQ0tfSEVMUD0iICBBZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywKIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRocyB3aXRoICdnaXQgYWRkIDxwYXRocz4nLCBhbmQKQEAgLTcwLDYgKzEyNywxMSBAQAogCWVzYWMKIH0KIAorIyBPdXRwdXQgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB0aGUgc3BlY2lmaWVkIGNvbW1pdC4KK2NvbW1pdF9tZXNzYWdlICgpIHsKKwlnaXQgY2F0LWZpbGUgY29tbWl0ICIkMSIgfCBzZWQgIjEsL14kL2QiCit9CisKIHJ1bl9wcmVfcmViYXNlX2hvb2sgKCkgewogCWlmIHRlc3QgLXogIiRPS19UT19TS0lQX1BSRV9SRUJBU0UiICYmCiAJICAgdGVzdCAteCAiJEdJVF9ESVIvaG9va3MvcHJlLXJlYmFzZSIKQEAgLTEwNiw4ICsxNjgsOCBAQAogCXNlZCAtZSAxcSA8ICIkVE9ETyIgPj4gIiRET05FIgogCXNlZCAtZSAxZCA8ICIkVE9ETyIgPj4gIiRUT0RPIi5uZXcKIAltdiAtZiAiJFRPRE8iLm5ldyAiJFRPRE8iCi0JY291bnQ9JChncmVwIC1jICdeW14jXScgPCAiJERPTkUiKQotCXRvdGFsPSQoKCRjb3VudCskKGdyZXAgLWMgJ15bXiNdJyA8ICIkVE9ETyIpKSkKKwljb3VudD0kKHNhbmVfZ3JlcCAtYyAnXlteI10nIDwgIiRET05FIikKKwl0b3RhbD0kKCgkY291bnQrJChzYW5lX2dyZXAgLWMgJ15bXiNdJyA8ICIkVE9ETyIpKSkKIAlpZiB0ZXN0ICIkbGFzdF9jb3VudCIgIT0gIiRjb3VudCIKIAl0aGVuCiAJCWxhc3RfY291bnQ9JGNvdW50CkBAIC0xMjksMTAgKzE5MSwxMCBAQAogCQllY2hvICJSb290IGNvbW1pdCIKIAkJOzsKIAllc2FjID4gIiRET1RFU1QiL3BhdGNoCi0JdGVzdCAtZiAiJERPVEVTVCIvbWVzc2FnZSB8fAotCQlnaXQgY2F0LWZpbGUgY29tbWl0ICIkMSIgfCBzZWQgIjEsL14kL2QiID4gIiRET1RFU1QiL21lc3NhZ2UKLQl0ZXN0IC1mICIkRE9URVNUIi9hdXRob3Itc2NyaXB0IHx8Ci0JCWdldF9hdXRob3JfaWRlbnRfZnJvbV9jb21taXQgIiQxIiA+ICIkRE9URVNUIi9hdXRob3Itc2NyaXB0CisJdGVzdCAtZiAiJE1TRyIgfHwKKwkJY29tbWl0X21lc3NhZ2UgIiQxIiA+ICIkTVNHIgorCXRlc3QgLWYgIiRBVVRIT1JfU0NSSVBUIiB8fAorCQlnZXRfYXV0aG9yX2lkZW50X2Zyb21fY29tbWl0ICIkMSIgPiAiJEFVVEhPUl9TQ1JJUFQiCiB9CiAKIGRpZV93aXRoX3BhdGNoICgpIHsKQEAgLTE0Nyw3ICsyMDksMTYgQEAKIH0KIAogaGFzX2FjdGlvbiAoKSB7Ci0JZ3JlcCAnXlteI10nICIkMSIgPi9kZXYvbnVsbAorCXNhbmVfZ3JlcCAnXlteI10nICIkMSIgPi9kZXYvbnVsbAorfQorCisjIFJ1biBjb21tYW5kIHdpdGggR0lUX0FVVEhPUl9OQU1FLCBHSVRfQVVUSE9SX0VNQUlMLCBhbmQKKyMgR0lUX0FVVEhPUl9EQVRFIGV4cG9ydGVkIGZyb20gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCitkb193aXRoX2F1dGhvciAoKSB7CisJKAorCQlleHBvcnQgR0lUX0FVVEhPUl9OQU1FIEdJVF9BVVRIT1JfRU1BSUwgR0lUX0FVVEhPUl9EQVRFCisJCSIkQCIKKwkpCiB9CiAKIHBpY2tfb25lICgpIHsKQEAgLTE1Niw3ICsyMjcsNyBAQAogCW91dHB1dCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICRzaGExIHx8IGRpZSAiSW52YWxpZCBjb21taXQgbmFtZTogJHNoYTEiCiAJdGVzdCAtZCAiJFJFV1JJVFRFTiIgJiYKIAkJcGlja19vbmVfcHJlc2VydmluZ19tZXJnZXMgIiRAIiAmJiByZXR1cm4KLQlpZiB0ZXN0ICEgLXogIiRSRUJBU0VfUk9PVCIKKwlpZiB0ZXN0IC1uICIkUkVCQVNFX1JPT1QiCiAJdGhlbgogCQlvdXRwdXQgZ2l0IGNoZXJyeS1waWNrICIkQCIKIAkJcmV0dXJuCkBAIC0xNjQsMTEgKzIzNSwxMCBAQAogCXBhcmVudF9zaGExPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAkc2hhMV4pIHx8CiAJCWRpZSAiQ291bGQgbm90IGdldCB0aGUgcGFyZW50IG9mICRzaGExIgogCWN1cnJlbnRfc2hhMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKLQlpZiB0ZXN0ICIkbm9fZmYkY3VycmVudF9zaGExIiA9ICIkcGFyZW50X3NoYTEiOyB0aGVuCisJaWYgdGVzdCAteiAiJG5vX2ZmIiAmJiB0ZXN0ICIkY3VycmVudF9zaGExIiA9ICIkcGFyZW50X3NoYTEiCisJdGhlbgogCQlvdXRwdXQgZ2l0IHJlc2V0IC0taGFyZCAkc2hhMQotCQl0ZXN0ICJhJDEiID0gYS1uICYmIG91dHB1dCBnaXQgcmVzZXQgLS1zb2Z0ICRjdXJyZW50X3NoYTEKLQkJc2hhMT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkc2hhMSkKLQkJb3V0cHV0IHdhcm4gRmFzdCBmb3J3YXJkIHRvICRzaGExCisJCW91dHB1dCB3YXJuIEZhc3QtZm9yd2FyZCB0byAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkc2hhMSkKIAllbHNlCiAJCW91dHB1dCBnaXQgY2hlcnJ5LXBpY2sgIiRAIgogCWZpCkBAIC0yNDgsOSArMzE4LDkgQEAKIAlkb25lCiAJY2FzZSAkZmFzdF9mb3J3YXJkIGluCiAJdCkKLQkJb3V0cHV0IHdhcm4gIkZhc3QgZm9yd2FyZCB0byAkc2hhMSIKKwkJb3V0cHV0IHdhcm4gIkZhc3QtZm9yd2FyZCB0byAkc2hhMSIKIAkJb3V0cHV0IGdpdCByZXNldCAtLWhhcmQgJHNoYTEgfHwKLQkJCWRpZSAiQ2Fubm90IGZhc3QgZm9yd2FyZCB0byAkc2hhMSIKKwkJCWRpZSAiQ2Fubm90IGZhc3QtZm9yd2FyZCB0byAkc2hhMSIKIAkJOzsKIAlmKQogCQlmaXJzdF9wYXJlbnQ9JChleHByICIkbmV3X3BhcmVudHMiIDogJyBcKFteIF0qXCknKQpAQCAtMjY5LDE0ICszMzksMTEgQEAKIAkJCSMgcmVkbyBtZXJnZQogCQkJYXV0aG9yX3NjcmlwdD0kKGdldF9hdXRob3JfaWRlbnRfZnJvbV9jb21taXQgJHNoYTEpCiAJCQlldmFsICIkYXV0aG9yX3NjcmlwdCIKLQkJCW1zZz0iJChnaXQgY2F0LWZpbGUgY29tbWl0ICRzaGExIHwgc2VkIC1lICcxLC9eJC9kJykiCisJCQltc2c9IiQoY29tbWl0X21lc3NhZ2UgJHNoYTEpIgogCQkJIyBObyBwb2ludCBpbiBtZXJnaW5nIHRoZSBmaXJzdCBwYXJlbnQsIHRoYXQncyBIRUFECiAJCQluZXdfcGFyZW50cz0ke25ld19wYXJlbnRzIyAkZmlyc3RfcGFyZW50fQotCQkJaWYgISBHSVRfQVVUSE9SX05BTUU9IiRHSVRfQVVUSE9SX05BTUUiIFwKLQkJCQlHSVRfQVVUSE9SX0VNQUlMPSIkR0lUX0FVVEhPUl9FTUFJTCIgXAotCQkJCUdJVF9BVVRIT1JfREFURT0iJEdJVF9BVVRIT1JfREFURSIgXAotCQkJCW91dHB1dCBnaXQgbWVyZ2UgJFNUUkFURUdZIC1tICIkbXNnIiBcCi0JCQkJCSRuZXdfcGFyZW50cworCQkJaWYgISBkb193aXRoX2F1dGhvciBvdXRwdXQgXAorCQkJCWdpdCBtZXJnZSAkU1RSQVRFR1kgLW0gIiRtc2ciICRuZXdfcGFyZW50cwogCQkJdGhlbgogCQkJCXByaW50ZiAiJXNcbiIgIiRtc2ciID4gIiRHSVRfRElSIi9NRVJHRV9NU0cKIAkJCQlkaWVfd2l0aF9wYXRjaCAkc2hhMSAiRXJyb3IgcmVkb2luZyBtZXJnZSAkc2hhMSIKQEAgLTMwMCwzNCArMzY3LDY2IEBACiAJZXNhYwogfQogCi1tYWtlX3NxdWFzaF9tZXNzYWdlICgpIHsKK3VwZGF0ZV9zcXVhc2hfbWVzc2FnZXMgKCkgewogCWlmIHRlc3QgLWYgIiRTUVVBU0hfTVNHIjsgdGhlbgotCQlDT1VOVD0kKCgkKHNlZCAtbiAicy9eIyBUaGlzIGlzIFteMC05XSpcKFsxLTldWzAtOV0qXCkuKi9cMS9wIiBcCi0JCQk8ICIkU1FVQVNIX01TRyIgfCBzZWQgLW5lICckcCcpKzEpKQotCQllY2hvICIjIFRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAkQ09VTlQgY29tbWl0cy4iCi0JCXNlZCAtZSAxZCAtZSAnMiwvXi4vewotCQkJL14kL2QKLQkJfScgPCIkU1FVQVNIX01TRyIKKwkJbXYgIiRTUVVBU0hfTVNHIiAiJFNRVUFTSF9NU0ciLmJhayB8fCBleGl0CisJCUNPVU5UPSQoKCQoc2VkIC1uIFwKKwkJCS1lICIxcy9eIyBUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgXCguKlwpIGNvbW1pdHNcLi9cMS9wIiBcCisJCQktZSAicSIgPCAiJFNRVUFTSF9NU0ciLmJhaykrMSkpCisJCXsKKwkJCWVjaG8gIiMgVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICRDT1VOVCBjb21taXRzLiIKKwkJCXNlZCAtZSAxZCAtZSAnMiwvXi4veworCQkJCS9eJC9kCisJCQl9JyA8IiRTUVVBU0hfTVNHIi5iYWsKKwkJfSA+IiRTUVVBU0hfTVNHIgogCWVsc2UKKwkJY29tbWl0X21lc3NhZ2UgSEVBRCA+ICIkRklYVVBfTVNHIiB8fCBkaWUgIkNhbm5vdCB3cml0ZSAkRklYVVBfTVNHIgogCQlDT1VOVD0yCi0JCWVjaG8gIiMgVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIHR3byBjb21taXRzLiIKLQkJZWNobyAiIyBUaGUgZmlyc3QgY29tbWl0J3MgbWVzc2FnZSBpczoiCi0JCWVjaG8KLQkJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICcxLC9eJC9kJworCQl7CisJCQllY2hvICIjIFRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAyIGNvbW1pdHMuIgorCQkJZWNobyAiIyBUaGUgZmlyc3QgY29tbWl0J3MgbWVzc2FnZSBpczoiCisJCQllY2hvCisJCQljYXQgIiRGSVhVUF9NU0ciCisJCX0gPiIkU1FVQVNIX01TRyIKIAlmaQotCWVjaG8KLQllY2hvICIjIFRoaXMgaXMgdGhlICQobnRoX3N0cmluZyAkQ09VTlQpIGNvbW1pdCBtZXNzYWdlOiIKLQllY2hvCi0JZ2l0IGNhdC1maWxlIGNvbW1pdCAkMSB8IHNlZCAtZSAnMSwvXiQvZCcKKwljYXNlICQxIGluCisJc3F1YXNoKQorCQlybSAtZiAiJEZJWFVQX01TRyIKKwkJZWNobworCQllY2hvICIjIFRoaXMgaXMgdGhlICQobnRoX3N0cmluZyAkQ09VTlQpIGNvbW1pdCBtZXNzYWdlOiIKKwkJZWNobworCQljb21taXRfbWVzc2FnZSAkMgorCQk7OworCWZpeHVwKQorCQllY2hvCisJCWVjaG8gIiMgVGhlICQobnRoX3N0cmluZyAkQ09VTlQpIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiCisJCWVjaG8KKwkJY29tbWl0X21lc3NhZ2UgJDIgfCBzZWQgLWUgJ3MvXi8jCS8nCisJCTs7CisJZXNhYyA+PiIkU1FVQVNIX01TRyIKIH0KIAogcGVla19uZXh0X2NvbW1hbmQgKCkgewotCXNlZCAtbiAiMXMvIC4qJC8vcCIgPCAiJFRPRE8iCisJc2VkIC1uIC1lICIvXiMvZCIgLWUgJy9eJC9kJyAtZSAicy8gLiovL3AiIC1lICJxIiA8ICIkVE9ETyIKK30KKworIyBBIHNxdWFzaC9maXh1cCBoYXMgZmFpbGVkLiAgUHJlcGFyZSB0aGUgbG9uZyB2ZXJzaW9uIG9mIHRoZSBzcXVhc2gKKyMgY29tbWl0IG1lc3NhZ2UsIHRoZW4gZGllX3dpdGhfcGF0Y2guICBUaGlzIGNvZGUgcGF0aCByZXF1aXJlcyB0aGUKKyMgdXNlciB0byBlZGl0IHRoZSBjb21iaW5lZCBjb21taXQgbWVzc2FnZSBmb3IgYWxsIGNvbW1pdHMgdGhhdCBoYXZlCisjIGJlZW4gc3F1YXNoZWQvZml4ZWR1cCBzbyBmYXIuICBTbyBhbHNvIGVyYXNlIHRoZSBvbGQgc3F1YXNoCisjIG1lc3NhZ2VzLCBlZmZlY3RpdmVseSBjYXVzaW5nIHRoZSBjb21iaW5lZCBjb21taXQgdG8gYmUgdXNlZCBhcyB0aGUKKyMgbmV3IGJhc2lzIGZvciBhbnkgZnVydGhlciBzcXVhc2gvZml4dXBzLiAgQXJnczogc2hhMSByZXN0CitkaWVfZmFpbGVkX3NxdWFzaCgpIHsKKwltdiAiJFNRVUFTSF9NU0ciICIkTVNHIiB8fCBleGl0CisJcm0gLWYgIiRGSVhVUF9NU0ciCisJY3AgIiRNU0ciICIkR0lUX0RJUiIvTUVSR0VfTVNHIHx8IGV4aXQKKwl3YXJuCisJd2FybiAiQ291bGQgbm90IGFwcGx5ICQxLi4uICQyIgorCWRpZV93aXRoX3BhdGNoICQxICIiCiB9CiAKIGRvX25leHQgKCkgewotCXJtIC1mICIkRE9URVNUIi9tZXNzYWdlICIkRE9URVNUIi9hdXRob3Itc2NyaXB0IFwKLQkJIiRET1RFU1QiL2FtZW5kIHx8IGV4aXQKKwlybSAtZiAiJE1TRyIgIiRBVVRIT1JfU0NSSVBUIiAiJEFNRU5EIiB8fCBleGl0CiAJcmVhZCBjb21tYW5kIHNoYTEgcmVzdCA8ICIkVE9ETyIKIAljYXNlICIkY29tbWFuZCIgaW4KIAknIycqfCcnfG5vb3ApCkBAIC0zNDAsNiArNDM5LDE0IEBACiAJCXBpY2tfb25lICRzaGExIHx8CiAJCQlkaWVfd2l0aF9wYXRjaCAkc2hhMSAiQ291bGQgbm90IGFwcGx5ICRzaGExLi4uICRyZXN0IgogCQk7OworCXJld29yZHxyKQorCQljb21tZW50X2Zvcl9yZWZsb2cgcmV3b3JkCisKKwkJbWFya19hY3Rpb25fZG9uZQorCQlwaWNrX29uZSAkc2hhMSB8fAorCQkJZGllX3dpdGhfcGF0Y2ggJHNoYTEgIkNvdWxkIG5vdCBhcHBseSAkc2hhMS4uLiAkcmVzdCIKKwkJZ2l0IGNvbW1pdCAtLWFtZW5kCisJCTs7CiAJZWRpdHxlKQogCQljb21tZW50X2Zvcl9yZWZsb2cgZWRpdAogCkBAIC0zNDcsNyArNDU0LDcgQEAKIAkJcGlja19vbmUgJHNoYTEgfHwKIAkJCWRpZV93aXRoX3BhdGNoICRzaGExICJDb3VsZCBub3QgYXBwbHkgJHNoYTEuLi4gJHJlc3QiCiAJCW1ha2VfcGF0Y2ggJHNoYTEKLQkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4gIiRET1RFU1QiL2FtZW5kCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+ICIkQU1FTkQiCiAJCXdhcm4gIlN0b3BwZWQgYXQgJHNoYTEuLi4gJHJlc3QiCiAJCXdhcm4gIllvdSBjYW4gYW1lbmQgdGhlIGNvbW1pdCBub3csIHdpdGgiCiAJCXdhcm4KQEAgLTM1OSw1NiArNDY2LDU4IEBACiAJCXdhcm4KIAkJZXhpdCAwCiAJCTs7Ci0Jc3F1YXNofHMpCi0JCWNvbW1lbnRfZm9yX3JlZmxvZyBzcXVhc2gKLQotCQl0ZXN0IC1mICIkRE9ORSIgJiYgaGFzX2FjdGlvbiAiJERPTkUiIHx8Ci0JCQlkaWUgIkNhbm5vdCAnc3F1YXNoJyB3aXRob3V0IGEgcHJldmlvdXMgY29tbWl0IgotCi0JCW1hcmtfYWN0aW9uX2RvbmUKLQkJbWFrZV9zcXVhc2hfbWVzc2FnZSAkc2hhMSA+ICIkTVNHIgotCQlmYWlsZWQ9ZgotCQlhdXRob3Jfc2NyaXB0PSQoZ2V0X2F1dGhvcl9pZGVudF9mcm9tX2NvbW1pdCBIRUFEKQotCQlvdXRwdXQgZ2l0IHJlc2V0IC0tc29mdCBIRUFEXgotCQlwaWNrX29uZSAtbiAkc2hhMSB8fCBmYWlsZWQ9dAotCQljYXNlICIkKHBlZWtfbmV4dF9jb21tYW5kKSIgaW4KKwlzcXVhc2h8c3xmaXh1cHxmKQorCQljYXNlICIkY29tbWFuZCIgaW4KIAkJc3F1YXNofHMpCi0JCQlVU0VfT1VUUFVUPW91dHB1dAotCQkJTVNHX09QVD0tRgotCQkJRURJVF9PUl9GSUxFPSIkTVNHIgotCQkJY3AgIiRNU0ciICIkU1FVQVNIX01TRyIKKwkJCXNxdWFzaF9zdHlsZT1zcXVhc2gKIAkJCTs7Ci0JCSopCi0JCQlVU0VfT1VUUFVUPQotCQkJTVNHX09QVD0KLQkJCUVESVRfT1JfRklMRT0tZQotCQkJcm0gLWYgIiRTUVVBU0hfTVNHIiB8fCBleGl0Ci0JCQljcCAiJE1TRyIgIiRHSVRfRElSIi9TUVVBU0hfTVNHCi0JCQlybSAtZiAiJEdJVF9ESVIiL01FUkdFX01TRyB8fCBleGl0CisJCWZpeHVwfGYpCisJCQlzcXVhc2hfc3R5bGU9Zml4dXAKIAkJCTs7CiAJCWVzYWMKLQkJZWNobyAiJGF1dGhvcl9zY3JpcHQiID4gIiRET1RFU1QiL2F1dGhvci1zY3JpcHQKLQkJaWYgdGVzdCAkZmFpbGVkID0gZgotCQl0aGVuCi0JCQkjIFRoaXMgaXMgbGlrZSAtLWFtZW5kLCBidXQgd2l0aCBhIGRpZmZlcmVudCBtZXNzYWdlCi0JCQlldmFsICIkYXV0aG9yX3NjcmlwdCIKLQkJCUdJVF9BVVRIT1JfTkFNRT0iJEdJVF9BVVRIT1JfTkFNRSIgXAotCQkJR0lUX0FVVEhPUl9FTUFJTD0iJEdJVF9BVVRIT1JfRU1BSUwiIFwKLQkJCUdJVF9BVVRIT1JfREFURT0iJEdJVF9BVVRIT1JfREFURSIgXAotCQkJJFVTRV9PVVRQVVQgZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeSBcCi0JCQkJJE1TR19PUFQgIiRFRElUX09SX0ZJTEUiIHx8IGZhaWxlZD10Ci0JCWZpCi0JCWlmIHRlc3QgJGZhaWxlZCA9IHQKLQkJdGhlbgotCQkJY3AgIiRNU0ciICIkR0lUX0RJUiIvTUVSR0VfTVNHCi0JCQl3YXJuCi0JCQl3YXJuICJDb3VsZCBub3QgYXBwbHkgJHNoYTEuLi4gJHJlc3QiCi0JCQlkaWVfd2l0aF9wYXRjaCAkc2hhMSAiIgotCQlmaQorCQljb21tZW50X2Zvcl9yZWZsb2cgJHNxdWFzaF9zdHlsZQorCisJCXRlc3QgLWYgIiRET05FIiAmJiBoYXNfYWN0aW9uICIkRE9ORSIgfHwKKwkJCWRpZSAiQ2Fubm90ICckc3F1YXNoX3N0eWxlJyB3aXRob3V0IGEgcHJldmlvdXMgY29tbWl0IgorCisJCW1hcmtfYWN0aW9uX2RvbmUKKwkJdXBkYXRlX3NxdWFzaF9tZXNzYWdlcyAkc3F1YXNoX3N0eWxlICRzaGExCisJCWF1dGhvcl9zY3JpcHQ9JChnZXRfYXV0aG9yX2lkZW50X2Zyb21fY29tbWl0IEhFQUQpCisJCWVjaG8gIiRhdXRob3Jfc2NyaXB0IiA+ICIkQVVUSE9SX1NDUklQVCIKKwkJZXZhbCAiJGF1dGhvcl9zY3JpcHQiCisJCW91dHB1dCBnaXQgcmVzZXQgLS1zb2Z0IEhFQUReCisJCXBpY2tfb25lIC1uICRzaGExIHx8IGRpZV9mYWlsZWRfc3F1YXNoICRzaGExICIkcmVzdCIKKwkJY2FzZSAiJChwZWVrX25leHRfY29tbWFuZCkiIGluCisJCXNxdWFzaHxzfGZpeHVwfGYpCisJCQkjIFRoaXMgaXMgYW4gaW50ZXJtZWRpYXRlIGNvbW1pdDsgaXRzIG1lc3NhZ2Ugd2lsbCBvbmx5IGJlCisJCQkjIHVzZWQgaW4gY2FzZSBvZiB0cm91YmxlLiAgU28gdXNlIHRoZSBsb25nIHZlcnNpb246CisJCQlkb193aXRoX2F1dGhvciBvdXRwdXQgZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeSAtRiAiJFNRVUFTSF9NU0ciIHx8CisJCQkJZGllX2ZhaWxlZF9zcXVhc2ggJHNoYTEgIiRyZXN0IgorCQkJOzsKKwkJKikKKwkJCSMgVGhpcyBpcyB0aGUgZmluYWwgY29tbWFuZCBvZiB0aGlzIHNxdWFzaC9maXh1cCBncm91cAorCQkJaWYgdGVzdCAtZiAiJEZJWFVQX01TRyIKKwkJCXRoZW4KKwkJCQlkb193aXRoX2F1dGhvciBnaXQgY29tbWl0IC0tbm8tdmVyaWZ5IC1GICIkRklYVVBfTVNHIiB8fAorCQkJCQlkaWVfZmFpbGVkX3NxdWFzaCAkc2hhMSAiJHJlc3QiCisJCQllbHNlCisJCQkJY3AgIiRTUVVBU0hfTVNHIiAiJEdJVF9ESVIiL1NRVUFTSF9NU0cgfHwgZXhpdAorCQkJCXJtIC1mICIkR0lUX0RJUiIvTUVSR0VfTVNHCisJCQkJZG9fd2l0aF9hdXRob3IgZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeSAtZSB8fAorCQkJCQlkaWVfZmFpbGVkX3NxdWFzaCAkc2hhMSAiJHJlc3QiCisJCQlmaQorCQkJcm0gLWYgIiRTUVVBU0hfTVNHIiAiJEZJWFVQX01TRyIKKwkJCTs7CisJCWVzYWMKIAkJOzsKIAkqKQogCQl3YXJuICJVbmtub3duIGNvbW1hbmQ6ICRjb21tYW5kICRzaGExICRyZXN0IgotCQlkaWVfd2l0aF9wYXRjaCAkc2hhMSAiUGxlYXNlIGZpeCB0aGlzIGluIHRoZSBmaWxlICRUT0RPLiIKKwkJaWYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAiJHNoYTEiID4vZGV2L251bGwKKwkJdGhlbgorCQkJZGllX3dpdGhfcGF0Y2ggJHNoYTEgIlBsZWFzZSBmaXggdGhpcyBpbiB0aGUgZmlsZSAkVE9ETy4iCisJCWVsc2UKKwkJCWRpZSAiUGxlYXNlIGZpeCB0aGlzIGluIHRoZSBmaWxlICRUT0RPLiIKKwkJZmkKIAkJOzsKIAllc2FjCiAJdGVzdCAtcyAiJFRPRE8iICYmIHJldHVybgpAQCAtNDgyLDYgKzU5MSw1NiBAQAogCXRlc3QgLWYgIiRET1RFU1QiL3JlYmFzZS1yb290ICYmIFJFQkFTRV9ST09UPXQKIH0KIAorIyBSZWFycmFuZ2UgdGhlIHRvZG8gbGlzdCB0aGF0IGhhcyBib3RoICJwaWNrIHNoYTEgbXNnIiBhbmQKKyMgInBpY2sgc2hhMSBmaXh1cCEvc3F1YXNoISBtc2ciIGFwcGVhcnMgaW4gaXQgc28gdGhhdCB0aGUgbGF0dGVyCisjIGNvbWVzIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBmb3JtZXIsIGFuZCBjaGFuZ2UgInBpY2siIHRvCisjICJmaXh1cCIvInNxdWFzaCIuCityZWFycmFuZ2Vfc3F1YXNoICgpIHsKKwlzZWQgLW4gLWUgJ3MvXnBpY2sgXChbMC05YS1mXSpcKSBcKHNxdWFzaFwpISAvXDEgXDIgL3AnIFwKKwkJLWUgJ3MvXnBpY2sgXChbMC05YS1mXSpcKSBcKGZpeHVwXCkhIC9cMSBcMiAvcCcgXAorCQkiJDEiID4iJDEuc3EiCisJdGVzdCAtcyAiJDEuc3EiIHx8IHJldHVybgorCisJdXNlZD0KKwl3aGlsZSByZWFkIHBpY2sgc2hhMSBtZXNzYWdlCisJZG8KKwkJY2FzZSAiICR1c2VkIiBpbgorCQkqIiAkc2hhMSAiKikgY29udGludWUgOzsKKwkJZXNhYworCQllY2hvICIkcGljayAkc2hhMSAkbWVzc2FnZSIKKwkJd2hpbGUgcmVhZCBzcXVhc2ggYWN0aW9uIG1zZworCQlkbworCQkJY2FzZSAiJG1lc3NhZ2UiIGluCisJCQkiJG1zZyIqKQorCQkJCWVjaG8gIiRhY3Rpb24gJHNxdWFzaCAkYWN0aW9uISAkbXNnIgorCQkJCXVzZWQ9IiR1c2VkJHNxdWFzaCAiCisJCQkJOzsKKwkJCWVzYWMKKwkJZG9uZSA8IiQxLnNxIgorCWRvbmUgPiIkMS5yZWFycmFuZ2VkIiA8IiQxIgorCWNhdCAiJDEucmVhcnJhbmdlZCIgPiIkMSIKKwlybSAtZiAiJDEuc3EiICIkMS5yZWFycmFuZ2VkIgorfQorCitMRj0nCisnCitwYXJzZV9vbnRvICgpIHsKKwljYXNlICIkMSIgaW4KKwkqLi4uKikKKwkJaWYJbGVmdD0kezElLi4uKn0gcmlnaHQ9JHsxIyouLi59ICYmCisJCQlvbnRvPSQoZ2l0IG1lcmdlLWJhc2UgLS1hbGwgJHtsZWZ0Oi1IRUFEfSAke3JpZ2h0Oi1IRUFEfSkKKwkJdGhlbgorCQkJY2FzZSAiJG9udG8iIGluCisJCQk/KiIkTEYiPyogfCAnJykKKwkJCQlleGl0IDEgOzsKKwkJCWVzYWMKKwkJCWVjaG8gIiRvbnRvIgorCQkJZXhpdCAwCisJCWZpCisJZXNhYworCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiQxXjAiCit9CisKIHdoaWxlIHRlc3QgJCMgIT0gMAogZG8KIAljYXNlICIkMSIgaW4KQEAgLTUwOSwyMSArNjY4LDIwIEBACiAJCXRoZW4KIAkJCTogTm90aGluZyB0byBjb21taXQgLS0gc2tpcCB0aGlzCiAJCWVsc2UKLQkJCS4gIiRET1RFU1QiL2F1dGhvci1zY3JpcHQgfHwKKwkJCS4gIiRBVVRIT1JfU0NSSVBUIiB8fAogCQkJCWRpZSAiQ2Fubm90IGZpbmQgdGhlIGF1dGhvciBpZGVudGl0eSIKIAkJCWFtZW5kPQotCQkJaWYgdGVzdCAtZiAiJERPVEVTVCIvYW1lbmQKKwkJCWlmIHRlc3QgLWYgIiRBTUVORCIKIAkJCXRoZW4KIAkJCQlhbWVuZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKLQkJCQl0ZXN0ICIkYW1lbmQiID0gJChjYXQgIiRET1RFU1QiL2FtZW5kKSB8fAorCQkJCXRlc3QgIiRhbWVuZCIgPSAkKGNhdCAiJEFNRU5EIikgfHwKIAkJCQlkaWUgIlwKIFlvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIFBsZWFzZSwgY29tbWl0IHRoZW0KIGZpcnN0IGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBhZ2Fpbi4iCiAJCQkJZ2l0IHJlc2V0IC0tc29mdCBIRUFEXiB8fAogCQkJCWRpZSAiQ2Fubm90IHJld2luZCB0aGUgSEVBRCIKIAkJCWZpCi0JCQlleHBvcnQgR0lUX0FVVEhPUl9OQU1FIEdJVF9BVVRIT1JfRU1BSUwgR0lUX0FVVEhPUl9EQVRFICYmCi0JCQlnaXQgY29tbWl0IC0tbm8tdmVyaWZ5IC1GICIkRE9URVNUIi9tZXNzYWdlIC1lIHx8IHsKKwkJCWRvX3dpdGhfYXV0aG9yIGdpdCBjb21taXQgLS1uby12ZXJpZnkgLUYgIiRNU0ciIC1lIHx8IHsKIAkJCQl0ZXN0IC1uICIkYW1lbmQiICYmIGdpdCByZXNldCAtLXNvZnQgJGFtZW5kCiAJCQkJZGllICJDb3VsZCBub3QgY29tbWl0IHN0YWdlZCBjaGFuZ2VzLiIKIAkJCX0KQEAgLTU4Nyw5ICs3NDUsMTIgQEAKIAktLXJvb3QpCiAJCVJFQkFTRV9ST09UPXQKIAkJOzsKKwktLWF1dG9zcXVhc2gpCisJCUFVVE9TUVVBU0g9dAorCQk7OwogCS0tb250bykKIAkJc2hpZnQKLQkJT05UTz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiQxIikgfHwKKwkJT05UTz0kKHBhcnNlX29udG8gIiQxIikgfHwKIAkJCWRpZSAiRG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBjb21taXQ6ICQxIgogCQk7OwogCS0tKQpAQCAtNjQ3LDEzICs4MDgsNiBAQAogCQl0ZXN0IHQgPSAiJFZFUkJPU0UiICYmIDogPiAiJERPVEVTVCIvdmVyYm9zZQogCQlpZiB0ZXN0IHQgPSAiJFBSRVNFUlZFX01FUkdFUyIKIAkJdGhlbgotCQkJIyAkUkVXUklUVEVOIGNvbnRhaW5zIGZpbGVzIGZvciBlYWNoIGNvbW1pdCB0aGF0IGlzCi0JCQkjIHJlYWNoYWJsZSBieSBhdCBsZWFzdCBvbmUgbWVyZ2UgYmFzZSBvZiAkSEVBRCBhbmQKLQkJCSMgJFVQU1RSRUFNLiBUaGV5IGFyZSBub3QgbmVjZXNzYXJpbHkgcmV3cml0dGVuLCBidXQKLQkJCSMgdGhlaXIgY2hpbGRyZW4gbWlnaHQgYmUuCi0JCQkjIFRoaXMgZW5zdXJlcyB0aGF0IGNvbW1pdHMgb24gbWVyZ2VkLCBidXQgb3RoZXJ3aXNlCi0JCQkjIHVucmVsYXRlZCBzaWRlIGJyYW5jaGVzIGFyZSBsZWZ0IGFsb25lLiAoVGhpbmsgIlgiCi0JCQkjIGluIHRoZSBtYW4gcGFnZSdzIGV4YW1wbGUuKQogCQkJaWYgdGVzdCAteiAiJFJFQkFTRV9ST09UIgogCQkJdGhlbgogCQkJCW1rZGlyICIkUkVXUklUVEVOIiAmJgpAQCAtNzAzLDcgKzg1Nyw3IEBACiAJCQkJCXByZXNlcnZlPXQKIAkJCQkJZm9yIHAgaW4gJChnaXQgcmV2LWxpc3QgLS1wYXJlbnRzIC0xICRzaGExIHwgY3V0IC1kJyAnIC1zIC1mMi0pCiAJCQkJCWRvCi0JCQkJCQlpZiB0ZXN0IC1mICIkUkVXUklUVEVOIi8kcCAtYSBcKCAkcCAhPSAkVVBTVFJFQU0gLW8gJHNoYTEgPSAkZmlyc3RfYWZ0ZXJfdXBzdHJlYW0gXCkKKwkJCQkJCWlmIHRlc3QgLWYgIiRSRVdSSVRURU4iLyRwIC1hIFwoICRwICE9ICRPTlRPIC1vICRzaGExID0gJGZpcnN0X2FmdGVyX3Vwc3RyZWFtIFwpCiAJCQkJCQl0aGVuCiAJCQkJCQkJcHJlc2VydmU9ZgogCQkJCQkJZmkKQEAgLTczMSw3ICs4ODUsNyBAQAogCQkJZ2l0IHJldi1saXN0ICRSRVZJU0lPTlMgfAogCQkJd2hpbGUgcmVhZCByZXYKIAkJCWRvCi0JCQkJaWYgdGVzdCAtZiAiJFJFV1JJVFRFTiIvJHJldiAtYSAiJChncmVwICIkcmV2IiAiJERPVEVTVCIvbm90LWNoZXJyeS1waWNrcykiID0gIiIKKwkJCQlpZiB0ZXN0IC1mICIkUkVXUklUVEVOIi8kcmV2IC1hICIkKHNhbmVfZ3JlcCAiJHJldiIgIiRET1RFU1QiL25vdC1jaGVycnktcGlja3MpIiA9ICIiCiAJCQkJdGhlbgogCQkJCQkjIFVzZSAtZjIgYmVjYXVzZSBpZiByZXYtbGlzdCBpcyB0ZWxsaW5nIHVzIHRoaXMgY29tbWl0IGlzCiAJCQkJCSMgbm90IHdvcnRod2hpbGUsIHdlIGRvbid0IHdhbnQgdG8gdHJhY2sgaXRzIG11bHRpcGxlIGhlYWRzLApAQCAtNzM5LDIxICs4OTMsMjQgQEAKIAkJCQkJIyBiZSByZWJhc2luZyBvbiB0b3Agb2YgaXQKIAkJCQkJZ2l0IHJldi1saXN0IC0tcGFyZW50cyAtMSAkcmV2IHwgY3V0IC1kJyAnIC1zIC1mMiA+ICIkRFJPUFBFRCIvJHJldgogCQkJCQlzaG9ydD0kKGdpdCByZXYtbGlzdCAtMSAtLWFiYnJldi1jb21taXQgLS1hYmJyZXY9NyAkcmV2KQotCQkJCQlncmVwIC12ICJeW2Etel1bYS16XSogJHNob3J0IiA8IiRUT0RPIiA+ICIke1RPRE99MiIgOyBtdiAiJHtUT0RPfTIiICIkVE9ETyIKKwkJCQkJc2FuZV9ncmVwIC12ICJeW2Etel1bYS16XSogJHNob3J0IiA8IiRUT0RPIiA+ICIke1RPRE99MiIgOyBtdiAiJHtUT0RPfTIiICIkVE9ETyIKIAkJCQkJcm0gIiRSRVdSSVRURU4iLyRyZXYKIAkJCQlmaQogCQkJZG9uZQogCQlmaQogCiAJCXRlc3QgLXMgIiRUT0RPIiB8fCBlY2hvIG5vb3AgPj4gIiRUT0RPIgorCQl0ZXN0IC1uICIkQVVUT1NRVUFTSCIgJiYgcmVhcnJhbmdlX3NxdWFzaCAiJFRPRE8iCiAJCWNhdCA+PiAiJFRPRE8iIDw8IEVPRgogCiAjIFJlYmFzZSAkU0hPUlRSRVZJU0lPTlMgb250byAkU0hPUlRPTlRPCiAjCiAjIENvbW1hbmRzOgogIyAgcCwgcGljayA9IHVzZSBjb21taXQKKyMgIHIsIHJld29yZCA9IHVzZSBjb21taXQsIGJ1dCBlZGl0IHRoZSBjb21taXQgbWVzc2FnZQogIyAgZSwgZWRpdCA9IHVzZSBjb21taXQsIGJ1dCBzdG9wIGZvciBhbWVuZGluZwogIyAgcywgc3F1YXNoID0gdXNlIGNvbW1pdCwgYnV0IG1lbGQgaW50byBwcmV2aW91cyBjb21taXQKKyMgIGYsIGZpeHVwID0gbGlrZSAic3F1YXNoIiwgYnV0IGRpc2NhcmQgdGhpcyBjb21taXQncyBsb2cgbWVzc2FnZQogIwogIyBJZiB5b3UgcmVtb3ZlIGEgbGluZSBoZXJlIFRIQVQgQ09NTUlUIFdJTEwgQkUgTE9TVC4KICMgSG93ZXZlciwgaWYgeW91IHJlbW92ZSBldmVyeXRoaW5nLCB0aGUgcmViYXNlIHdpbGwgYmUgYWJvcnRlZC4KQEAgLTc2NSw3ICs5MjIsNyBAQAogCiAJCWNwICIkVE9ETyIgIiRUT0RPIi5iYWNrdXAKIAkJZ2l0X2VkaXRvciAiJFRPRE8iIHx8Ci0JCQlkaWUgIkNvdWxkIG5vdCBleGVjdXRlIGVkaXRvciIKKwkJCWRpZV9hYm9ydCAiQ291bGQgbm90IGV4ZWN1dGUgZWRpdG9yIgogCiAJCWhhc19hY3Rpb24gIiRUT0RPIiB8fAogCQkJZGllX2Fib3J0ICJOb3RoaW5nIHRvIGRvIgpkaWZmIC0tZ2l0IGEvZ2l0LXJlYmFzZS5zaCBiL2dpdC1yZWJhc2Uuc2gKaW5kZXggMzM0NjI5Zi4uZmI0ZmVmNyAxMDA3NTUKLS0tIGEvZ2l0LXJlYmFzZS5zaAorKysgYi9naXQtcmViYXNlLnNoCkBAIC0zLDcgKzMsNyBAQAogIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8uCiAjCiAKLVVTQUdFPSdbLS1pbnRlcmFjdGl2ZSB8IC1pXSBbLXZdIFstLWZvcmNlLXJlYmFzZSB8IC1mXSBbLS1vbnRvIDxuZXdiYXNlPl0gWzx1cHN0cmVhbT58LS1yb290XSBbPGJyYW5jaD5dJworVVNBR0U9J1stLWludGVyYWN0aXZlIHwgLWldIFstdl0gWy0tZm9yY2UtcmViYXNlIHwgLWZdIFstLW9udG8gPG5ld2Jhc2U+XSBbPHVwc3RyZWFtPnwtLXJvb3RdIFs8YnJhbmNoPl0gWy0tcXVpZXQgfCAtcV0nCiBMT05HX1VTQUdFPSdnaXQtcmViYXNlIHJlcGxhY2VzIDxicmFuY2g+IHdpdGggYSBuZXcgYnJhbmNoIG9mIHRoZQogc2FtZSBuYW1lLiAgV2hlbiB0aGUgLS1vbnRvIG9wdGlvbiBpcyBwcm92aWRlZCB0aGUgbmV3IGJyYW5jaCBzdGFydHMKIG91dCB3aXRoIGEgSEVBRCBlcXVhbCB0byA8bmV3YmFzZT4sIG90aGVyd2lzZSBpdCBpcyBlcXVhbCB0byA8dXBzdHJlYW0+CkBAIC0zNCw2ICszNCw4IEBACiByZXF1aXJlX3dvcmtfdHJlZQogY2RfdG9fdG9wbGV2ZWwKIAorTEY9JworJwogT0tfVE9fU0tJUF9QUkVfUkVCQVNFPQogUkVTT0xWRU1TRz0iCiBXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIi4KQEAgLTUwLDYgKzUyLDcgQEAKIGdpdF9hbV9vcHQ9CiByZWJhc2Vfcm9vdD0KIGZvcmNlX3JlYmFzZT0KK2FsbG93X3JlcmVyZV9hdXRvdXBkYXRlPQogCiBjb250aW51ZV9tZXJnZSAoKSB7CiAJdGVzdCAtbiAiJHByZXZfaGVhZCIgfHwgZGllICJwcmV2X2hlYWQgbXVzdCBiZSBkZWZpbmVkIgpAQCAtNzIsMTEgKzc1LDE4IEBACiAJCQllY2hvICJkaXJlY3RseSwgYnV0IGluc3RlYWQgZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6ICIKIAkJCWRpZSAiJFJFU09MVkVNU0ciCiAJCWZpCi0JCXByaW50ZiAiQ29tbWl0dGVkOiAlMCR7cHJlY31kICIgJG1zZ251bQorCQlpZiB0ZXN0IC16ICIkR0lUX1FVSUVUIgorCQl0aGVuCisJCQlwcmludGYgIkNvbW1pdHRlZDogJTAke3ByZWN9ZCAiICRtc2dudW0KKwkJZmkKIAllbHNlCi0JCXByaW50ZiAiQWxyZWFkeSBhcHBsaWVkOiAlMCR7cHJlY31kICIgJG1zZ251bQorCQlpZiB0ZXN0IC16ICIkR0lUX1FVSUVUIgorCQl0aGVuCisJCQlwcmludGYgIkFscmVhZHkgYXBwbGllZDogJTAke3ByZWN9ZCAiICRtc2dudW0KKwkJZmkKIAlmaQotCWdpdCByZXYtbGlzdCAtLXByZXR0eT1vbmVsaW5lIC0xICIkY210IiB8IHNlZCAtZSAncy9eW14gXSogLy8nCisJdGVzdCAteiAiJEdJVF9RVUlFVCIgJiYKKwlHSVRfUEFHRVI9JycgZ2l0IGxvZyAtLWZvcm1hdD0lcyAtMSAiJGNtdCIKIAogCXByZXZfaGVhZD1gZ2l0IHJldi1wYXJzZSBIRUFEXjBgCiAJIyBzYXZlIHRoZSByZXN1bHRpbmcgY29tbWl0IHNvIHdlIGNhbiByZWFkLXRyZWUgb24gaXQgbGF0ZXIKQEAgLTk3LDYgKzEwNywxMCBAQAogCWV2YWwgR0lUSEVBRF8kY210PSciJHtjbXRfbmFtZSMjcmVmcy9oZWFkcy99fiQoKCRlbmQgLSAkbXNnbnVtKSkiJwogCWV2YWwgR0lUSEVBRF8kaGQ9JyQoY2F0ICIkZG90ZXN0L29udG9fbmFtZSIpJwogCWV4cG9ydCBHSVRIRUFEXyRjbXQgR0lUSEVBRF8kaGQKKwlpZiB0ZXN0IC1uICIkR0lUX1FVSUVUIgorCXRoZW4KKwkJZXhwb3J0IEdJVF9NRVJHRV9WRVJCT1NJVFk9MQorCWZpCiAJZ2l0LW1lcmdlLSRzdHJhdGVneSAiJGNtdF4iIC0tICIkaGQiICIkY210IgogCXJ2PSQ/CiAJY2FzZSAiJHJ2IiBpbgpAQCAtMTA1LDcgKzExOSw3IEBACiAJCXJldHVybgogCQk7OwogCTEpCi0JCWdpdCByZXJlcmUKKwkJZ2l0IHJlcmVyZSAkYWxsb3dfcmVyZXJlX2F1dG91cGRhdGUKIAkJZGllICIkUkVTT0xWRU1TRyIKIAkJOzsKIAkyKQpAQCAtMTM4LDcgKzE1Miw3IEBACiBmaW5pc2hfcmJfbWVyZ2UgKCkgewogCW1vdmVfdG9fb3JpZ2luYWxfYnJhbmNoCiAJcm0gLXIgIiRkb3Rlc3QiCi0JZWNobyAiQWxsIGRvbmUuIgorCXNheSBBbGwgZG9uZS4KIH0KIAogaXNfaW50ZXJhY3RpdmUgKCkgewpAQCAtMjA3LDYgKzIyMSw3IEBACiAJCQllbmQ9JChjYXQgIiRkb3Rlc3QvZW5kIikKIAkJCW1zZ251bT0kKGNhdCAiJGRvdGVzdC9tc2dudW0iKQogCQkJb250bz0kKGNhdCAiJGRvdGVzdC9vbnRvIikKKwkJCUdJVF9RVUlFVD0kKGNhdCAiJGRvdGVzdC9xdWlldCIpCiAJCQljb250aW51ZV9tZXJnZQogCQkJd2hpbGUgdGVzdCAiJG1zZ251bSIgLWxlICIkZW5kIgogCQkJZG8KQEAgLTIxOSw2ICsyMzQsNyBAQAogCQloZWFkX25hbWU9JChjYXQgIiRHSVRfRElSIi9yZWJhc2UtYXBwbHkvaGVhZC1uYW1lKSAmJgogCQlvbnRvPSQoY2F0ICIkR0lUX0RJUiIvcmViYXNlLWFwcGx5L29udG8pICYmCiAJCW9yaWdfaGVhZD0kKGNhdCAiJEdJVF9ESVIiL3JlYmFzZS1hcHBseS9vcmlnLWhlYWQpICYmCisJCUdJVF9RVUlFVD0kKGNhdCAiJEdJVF9ESVIiL3JlYmFzZS1hcHBseS9xdWlldCkKIAkJZ2l0IGFtIC0tcmVzb2x2ZWQgLS0zd2F5IC0tcmVzb2x2ZW1zZz0iJFJFU09MVkVNU0ciICYmCiAJCW1vdmVfdG9fb3JpZ2luYWxfYnJhbmNoCiAJCWV4aXQKQEAgLTIzNiw2ICsyNTIsNyBAQAogCQkJbXNnbnVtPSQoY2F0ICIkZG90ZXN0L21zZ251bSIpCiAJCQltc2dudW09JCgoJG1zZ251bSArIDEpKQogCQkJb250bz0kKGNhdCAiJGRvdGVzdC9vbnRvIikKKwkJCUdJVF9RVUlFVD0kKGNhdCAiJGRvdGVzdC9xdWlldCIpCiAJCQl3aGlsZSB0ZXN0ICIkbXNnbnVtIiAtbGUgIiRlbmQiCiAJCQlkbwogCQkJCWNhbGxfbWVyZ2UgIiRtc2dudW0iCkBAIC0yNDcsNiArMjY0LDcgQEAKIAkJaGVhZF9uYW1lPSQoY2F0ICIkR0lUX0RJUiIvcmViYXNlLWFwcGx5L2hlYWQtbmFtZSkgJiYKIAkJb250bz0kKGNhdCAiJEdJVF9ESVIiL3JlYmFzZS1hcHBseS9vbnRvKSAmJgogCQlvcmlnX2hlYWQ9JChjYXQgIiRHSVRfRElSIi9yZWJhc2UtYXBwbHkvb3JpZy1oZWFkKSAmJgorCQlHSVRfUVVJRVQ9JChjYXQgIiRHSVRfRElSIi9yZWJhc2UtYXBwbHkvcXVpZXQpCiAJCWdpdCBhbSAtMyAtLXNraXAgLS1yZXNvbHZlbXNnPSIkUkVTT0xWRU1TRyIgJiYKIAkJbW92ZV90b19vcmlnaW5hbF9icmFuY2gKIAkJZXhpdApAQCAtMjU4LDkgKzI3NiwxMSBAQAogCQlnaXQgcmVyZXJlIGNsZWFyCiAJCWlmIHRlc3QgLWQgIiRkb3Rlc3QiCiAJCXRoZW4KKwkJCUdJVF9RVUlFVD0kKGNhdCAiJGRvdGVzdC9xdWlldCIpCiAJCQltb3ZlX3RvX29yaWdpbmFsX2JyYW5jaAogCQllbHNlCiAJCQlkb3Rlc3Q9IiRHSVRfRElSIi9yZWJhc2UtYXBwbHkKKwkJCUdJVF9RVUlFVD0kKGNhdCAiJGRvdGVzdC9xdWlldCIpCiAJCQltb3ZlX3RvX29yaWdpbmFsX2JyYW5jaAogCQlmaQogCQlnaXQgcmVzZXQgLS1oYXJkICQoY2F0ICIkZG90ZXN0L29yaWctaGVhZCIpCkBAIC0yOTgsNiArMzE4LDEzIEBACiAJLXZ8LS12ZXJib3NlKQogCQl2ZXJib3NlPXQKIAkJZGlmZnN0YXQ9dAorCQlHSVRfUVVJRVQ9CisJCTs7CisJLXF8LS1xdWlldCkKKwkJR0lUX1FVSUVUPXQKKwkJZ2l0X2FtX29wdD0iJGdpdF9hbV9vcHQgLXEiCisJCXZlcmJvc2U9CisJCWRpZmZzdGF0PQogCQk7OwogCS0td2hpdGVzcGFjZT0qKQogCQlnaXRfYW1fb3B0PSIkZ2l0X2FtX29wdCAkMSIKQEAgLTMwNyw2ICszMzQsOSBAQAogCQkJOzsKIAkJZXNhYwogCQk7OworCS0taWdub3JlLXdoaXRlc3BhY2UpCisJCWdpdF9hbV9vcHQ9IiRnaXRfYW1fb3B0ICQxIgorCQk7OwogCS0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGV8LS1pZ25vcmUtZGF0ZSkKIAkJZ2l0X2FtX29wdD0iJGdpdF9hbV9vcHQgJDEiCiAJCWZvcmNlX3JlYmFzZT10CkBAIC0zMjAsNiArMzUwLDkgQEAKIAktZnwtLWZ8LS1mb3wtLWZvcnwtLWZvcmN8Zm9yY2V8LS1mb3JjZS1yfC0tZm9yY2UtcmV8LS1mb3JjZS1yZWJ8LS1mb3JjZS1yZWJhfC0tZm9yY2UtcmViYXN8LS1mb3JjZS1yZWJhc2UpCiAJCWZvcmNlX3JlYmFzZT10CiAJCTs7CisJLS1yZXJlcmUtYXV0b3VwZGF0ZXwtLW5vLXJlcmVyZS1hdXRvdXBkYXRlKQorCQlhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZT0iJDEiCisJCTs7CiAJLSopCiAJCXVzYWdlCiAJCTs7CkBAIC0zNTYsOCArMzg5LDEwIEBACiBmaQogCiAjIFRoZSB0cmVlIG11c3QgYmUgcmVhbGx5IHJlYWxseSBjbGVhbi4KLWlmICEgZ2l0IHVwZGF0ZS1pbmRleCAtLWlnbm9yZS1zdWJtb2R1bGVzIC0tcmVmcmVzaDsgdGhlbgotCWRpZSAiY2Fubm90IHJlYmFzZTogeW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcyIKK2lmICEgZ2l0IHVwZGF0ZS1pbmRleCAtLWlnbm9yZS1zdWJtb2R1bGVzIC0tcmVmcmVzaCA+IC9kZXYvbnVsbDsgdGhlbgorCWVjaG8gPiYyICJjYW5ub3QgcmViYXNlOiB5b3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzIgorCWdpdCBkaWZmLWZpbGVzIC0tbmFtZS1zdGF0dXMgLXIgLS1pZ25vcmUtc3VibW9kdWxlcyAtLSA+JjIKKwlleGl0IDEKIGZpCiBkaWZmPSQoZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1uYW1lLXN0YXR1cyAtciAtLWlnbm9yZS1zdWJtb2R1bGVzIEhFQUQgLS0pCiBjYXNlICIkZGlmZiIgaW4KQEAgLTM4Niw3ICs0MjEsMjcgQEAKIAogIyBNYWtlIHN1cmUgdGhlIGJyYW5jaCB0byByZWJhc2Ugb250byBpcyB2YWxpZC4KIG9udG9fbmFtZT0ke25ld2Jhc2UtIiR1cHN0cmVhbV9uYW1lIn0KLW9udG89JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIke29udG9fbmFtZX1eMCIpIHx8IGV4aXQKK2Nhc2UgIiRvbnRvX25hbWUiIGluCisqLi4uKikKKwlpZglsZWZ0PSR7b250b19uYW1lJS4uLip9IHJpZ2h0PSR7b250b19uYW1lIyouLi59ICYmCisJCW9udG89JChnaXQgbWVyZ2UtYmFzZSAtLWFsbCAke2xlZnQ6LUhFQUR9ICR7cmlnaHQ6LUhFQUR9KQorCXRoZW4KKwkJY2FzZSAiJG9udG8iIGluCisJCT8qIiRMRiI/KikKKwkJCWRpZSAiJG9udG9fbmFtZTogdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgbWVyZ2UgYmFzZXMiCisJCQk7OworCQknJykKKwkJCWRpZSAiJG9udG9fbmFtZTogdGhlcmUgaXMgbm8gbWVyZ2UgYmFzZSIKKwkJCTs7CisJCWVzYWMKKwllbHNlCisJCWRpZSAiJG9udG9fbmFtZTogdGhlcmUgaXMgbm8gbWVyZ2UgYmFzZSIKKwlmaQorCTs7CisqKQorCW9udG89JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIke29udG9fbmFtZX1eMCIpIHx8IGV4aXQKKwk7OworZXNhYwogCiAjIElmIGEgaG9vayBleGlzdHMsIGdpdmUgaXQgYSBjaGFuY2UgdG8gaW50ZXJydXB0CiBydW5fcHJlX3JlYmFzZV9ob29rICIkdXBzdHJlYW1fYXJnIiAiJEAiCkBAIC00MzYsMjEgKzQ5MSwyMSBAQAogbWI9JChnaXQgbWVyZ2UtYmFzZSAiJG9udG8iICIkYnJhbmNoIikKIGlmIHRlc3QgIiR1cHN0cmVhbSIgPSAiJG9udG8iICYmIHRlc3QgIiRtYiIgPSAiJG9udG8iICYmCiAJIyBsaW5lYXIgaGlzdG9yeT8KLQkhIChnaXQgcmV2LWxpc3QgLS1wYXJlbnRzICIkb250byIuLiIkYnJhbmNoIiB8IGdyZXAgIiAuKiAiKSA+IC9kZXYvbnVsbAorCSEgKGdpdCByZXYtbGlzdCAtLXBhcmVudHMgIiRvbnRvIi4uIiRicmFuY2giIHwgc2FuZV9ncmVwICIgLiogIikgPiAvZGV2L251bGwKIHRoZW4KIAlpZiB0ZXN0IC16ICIkZm9yY2VfcmViYXNlIgogCXRoZW4KIAkJIyBMYXppbHkgc3dpdGNoIHRvIHRoZSB0YXJnZXQgYnJhbmNoIGlmIG5lZWRlZC4uLgogCQl0ZXN0IC16ICIkc3dpdGNoX3RvIiB8fCBnaXQgY2hlY2tvdXQgIiRzd2l0Y2hfdG8iCi0JCWVjaG8gPiYyICJDdXJyZW50IGJyYW5jaCAkYnJhbmNoX25hbWUgaXMgdXAgdG8gZGF0ZS4iCisJCXNheSAiQ3VycmVudCBicmFuY2ggJGJyYW5jaF9uYW1lIGlzIHVwIHRvIGRhdGUuIgogCQlleGl0IDAKIAllbHNlCi0JCWVjaG8gIkN1cnJlbnQgYnJhbmNoICRicmFuY2hfbmFtZSBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkLiIKKwkJc2F5ICJDdXJyZW50IGJyYW5jaCAkYnJhbmNoX25hbWUgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZC4iCiAJZmkKIGZpCiAKICMgRGV0YWNoIEhFQUQgYW5kIHJlc2V0IHRoZSB0cmVlCi1lY2hvICJGaXJzdCwgcmV3aW5kaW5nIGhlYWQgdG8gcmVwbGF5IHlvdXIgd29yayBvbiB0b3Agb2YgaXQuLi4iCitzYXkgIkZpcnN0LCByZXdpbmRpbmcgaGVhZCB0byByZXBsYXkgeW91ciB3b3JrIG9uIHRvcCBvZiBpdC4uLiIKIGdpdCBjaGVja291dCAtcSAiJG9udG9eMCIgfHwgZGllICJjb3VsZCBub3QgZGV0YWNoIEhFQUQiCiBnaXQgdXBkYXRlLXJlZiBPUklHX0hFQUQgJGJyYW5jaAogCkBAIC00NjUsMTAgKzUyMCwxMCBAQAogZmkKIAogIyBJZiB0aGUgJG9udG8gaXMgYSBwcm9wZXIgZGVzY2VuZGFudCBvZiB0aGUgdGlwIG9mIHRoZSBicmFuY2gsIHRoZW4KLSMgd2UganVzdCBmYXN0IGZvcndhcmRlZC4KKyMgd2UganVzdCBmYXN0LWZvcndhcmRlZC4KIGlmIHRlc3QgIiRtYiIgPSAiJGJyYW5jaCIKIHRoZW4KLQllY2hvID4mMiAiRmFzdC1mb3J3YXJkZWQgJGJyYW5jaF9uYW1lIHRvICRvbnRvX25hbWUuIgorCXNheSAiRmFzdC1mb3J3YXJkZWQgJGJyYW5jaF9uYW1lIHRvICRvbnRvX25hbWUuIgogCW1vdmVfdG9fb3JpZ2luYWxfYnJhbmNoCiAJZXhpdCAwCiBmaQpAQCAtNDkwLDcgKzU0NSw4IEBACiAJdGVzdCAwICE9ICRyZXQgLWEgLWQgIiRHSVRfRElSIi9yZWJhc2UtYXBwbHkgJiYKIAkJZWNobyAkaGVhZF9uYW1lID4gIiRHSVRfRElSIi9yZWJhc2UtYXBwbHkvaGVhZC1uYW1lICYmCiAJCWVjaG8gJG9udG8gPiAiJEdJVF9ESVIiL3JlYmFzZS1hcHBseS9vbnRvICYmCi0JCWVjaG8gJG9yaWdfaGVhZCA+ICIkR0lUX0RJUiIvcmViYXNlLWFwcGx5L29yaWctaGVhZAorCQllY2hvICRvcmlnX2hlYWQgPiAiJEdJVF9ESVIiL3JlYmFzZS1hcHBseS9vcmlnLWhlYWQgJiYKKwkJZWNobyAiJEdJVF9RVUlFVCIgPiAiJEdJVF9ESVIiL3JlYmFzZS1hcHBseS9xdWlldAogCWV4aXQgJHJldAogZmkKIApAQCAtNTA0LDYgKzU2MCw3IEBACiBlY2hvICIkcHJldl9oZWFkIiA+ICIkZG90ZXN0L3ByZXZfaGVhZCIKIGVjaG8gIiRvcmlnX2hlYWQiID4gIiRkb3Rlc3Qvb3JpZy1oZWFkIgogZWNobyAiJGhlYWRfbmFtZSIgPiAiJGRvdGVzdC9oZWFkLW5hbWUiCitlY2hvICIkR0lUX1FVSUVUIiA+ICIkZG90ZXN0L3F1aWV0IgogCiBtc2dudW09MAogZm9yIGNtdCBpbiBgZ2l0IHJldi1saXN0IC0tcmV2ZXJzZSAtLW5vLW1lcmdlcyAiJHJldmlzaW9ucyJgCmRpZmYgLS1naXQgYS9naXQtcmVwYWNrLnNoIGIvZ2l0LXJlcGFjay5zaAppbmRleCAwODY4NzM0Li4xZWIzYmNhIDEwMDc1NQotLS0gYS9naXQtcmVwYWNrLnNoCisrKyBiL2dpdC1yZXBhY2suc2gKQEAgLTI0LDcgKzI0LDcgQEAKIC4gZ2l0LXNoLXNldHVwCiAKIG5vX3VwZGF0ZV9pbmZvPSBhbGxfaW50b19vbmU9IHJlbW92ZV9yZWR1bmRhbnQ9IHVucGFja191bnJlYWNoYWJsZT0KLWxvY2FsPSBxdWlldD0gbm9fcmV1c2U9IGV4dHJhPQorbG9jYWw9IG5vX3JldXNlPSBleHRyYT0KIHdoaWxlIHRlc3QgJCMgIT0gMAogZG8KIAljYXNlICIkMSIgaW4KQEAgLTMzLDcgKzMzLDcgQEAKIAktQSkJYWxsX2ludG9fb25lPXQKIAkJdW5wYWNrX3VucmVhY2hhYmxlPS0tdW5wYWNrLXVucmVhY2hhYmxlIDs7CiAJLWQpCXJlbW92ZV9yZWR1bmRhbnQ9dCA7OwotCS1xKQlxdWlldD0tcSA7OworCS1xKQlHSVRfUVVJRVQ9dCA7OwogCS1mKQlub19yZXVzZT0tLW5vLXJldXNlLW9iamVjdCA7OwogCS1sKQlsb2NhbD0tLWxvY2FsIDs7CiAJLS1tYXgtcGFjay1zaXplfC0td2luZG93fC0td2luZG93LW1lbW9yeXwtLWRlcHRoKQpAQCAtODAsMTMgKzgwLDExIEBACiAJOzsKIGVzYWMKIAotYXJncz0iJGFyZ3MgJGxvY2FsICRxdWlldCAkbm9fcmV1c2UkZXh0cmEiCi1uYW1lcz0kKGdpdCBwYWNrLW9iamVjdHMgLS1ob25vci1wYWNrLWtlZXAgLS1ub24tZW1wdHkgLS1hbGwgLS1yZWZsb2cgJGFyZ3MgPC9kZXYvbnVsbCAiJFBBQ0tUTVAiKSB8fAorYXJncz0iJGFyZ3MgJGxvY2FsICR7R0lUX1FVSUVUOistcX0gJG5vX3JldXNlJGV4dHJhIgorbmFtZXM9JChnaXQgcGFjay1vYmplY3RzIC0ta2VlcC10cnVlLXBhcmVudHMgLS1ob25vci1wYWNrLWtlZXAgLS1ub24tZW1wdHkgLS1hbGwgLS1yZWZsb2cgJGFyZ3MgPC9kZXYvbnVsbCAiJFBBQ0tUTVAiKSB8fAogCWV4aXQgMQogaWYgWyAteiAiJG5hbWVzIiBdOyB0aGVuCi0JaWYgdGVzdCAteiAiJHF1aWV0IjsgdGhlbgotCQllY2hvIE5vdGhpbmcgbmV3IHRvIHBhY2suCi0JZmkKKwlzYXkgTm90aGluZyBuZXcgdG8gcGFjay4KIGZpCiAKICMgT2sgd2UgaGF2ZSBwcmVwYXJlZCBhbGwgbmV3IHBhY2tmaWxlcy4KQEAgLTE3Niw3ICsxNzQsNyBAQAogCQkgIGRvbmUKIAkJKQogCWZpCi0JZ2l0IHBydW5lLXBhY2tlZCAkcXVpZXQKKwlnaXQgcHJ1bmUtcGFja2VkICR7R0lUX1FVSUVUOistcX0KIGZpCiAKIGNhc2UgIiRub191cGRhdGVfaW5mbyIgaW4KZGlmZiAtLWdpdCBhL2dpdC1yZXF1ZXN0LXB1bGwuc2ggYi9naXQtcmVxdWVzdC1wdWxsLnNoCmluZGV4IGZkOTViZWEuLjYzMGNlZGQgMTAwNzU1Ci0tLSBhL2dpdC1yZXF1ZXN0LXB1bGwuc2gKKysrIGIvZ2l0LXJlcXVlc3QtcHVsbC5zaApAQCAtOCwxMyArOCwzMyBAQAogTE9OR19VU0FHRT0nU3VtbWFyaXplcyB0aGUgY2hhbmdlcyBiZXR3ZWVuIHR3byBjb21taXRzIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQsCiBhbmQgaW5jbHVkZXMgdGhlIGdpdmVuIFVSTCBpbiB0aGUgZ2VuZXJhdGVkIHN1bW1hcnkuJwogU1VCRElSRUNUT1JZX09LPSdZZXMnCi1PUFRJT05TX1NQRUM9CitPUFRJT05TX1NQRUM9J2dpdCByZXF1ZXN0LXB1bGwgW29wdGlvbnNdIHN0YXJ0IHVybCBbZW5kXQorLS0KK3AgICAgc2hvdyBwYXRjaCB0ZXh0IGFzIHdlbGwKKycKKwogLiBnaXQtc2gtc2V0dXAKIC4gZ2l0LXBhcnNlLXJlbW90ZQogCiBHSVRfUEFHRVI9CiBleHBvcnQgR0lUX1BBR0VSCiAKK3BhdGNoPQord2hpbGUJY2FzZSAiJCMiIGluIDApIGJyZWFrIDs7IGVzYWMKK2RvCisJY2FzZSAiJDEiIGluCisJLXApCisJCXBhdGNoPS1wIDs7CisJLS0pCisJCXNoaWZ0OyBicmVhayA7OworCS0qKQorCQl1c2FnZSA7OworCSopCisJCWJyZWFrIDs7CisJZXNhYworCXNoaWZ0Citkb25lCisKIGJhc2U9JDEKIHVybD0kMgogaGVhZD0kezMtSEVBRH0KQEAgLTU0LDUgKzc0LDUgQEAKIGVjaG8KIAogZ2l0IHNob3J0bG9nIF4kYmFzZXJldiAkaGVhZHJldgotZ2l0IGRpZmYgLU0gLS1zdGF0IC0tc3VtbWFyeSAkbWVyZ2VfYmFzZSAkaGVhZHJldgorZ2l0IGRpZmYgLU0gLS1zdGF0IC0tc3VtbWFyeSAkcGF0Y2ggJG1lcmdlX2Jhc2UuLiRoZWFkcmV2CiBleGl0ICRzdGF0dXMKZGlmZiAtLWdpdCBhL2dpdC1zZW5kLWVtYWlsLnBlcmwgYi9naXQtc2VuZC1lbWFpbC5wZXJsCmluZGV4IDE3ZjkzMGYuLmUwNTQ1NWYgMTAwNzU1Ci0tLSBhL2dpdC1zZW5kLWVtYWlsLnBlcmwKKysrIGIvZ2l0LXNlbmQtZW1haWwucGVybApAQCAtNzEsNyArNzEsNyBAQAogICAgIC0tc3VwcHJlc3MtY2MgICAgICAgICAgIDxzdHI+ICAqIGF1dGhvciwgc2VsZiwgc29iLCBjYywgY2NjbWQsIGJvZHksIGJvZHljYywgYWxsLgogICAgIC0tW25vLV1zaWduZWQtb2ZmLWJ5LWNjICAgICAgICAqIFNlbmQgdG8gU2lnbmVkLW9mZi1ieTogYWRkcmVzc2VzLiBEZWZhdWx0IG9uLgogICAgIC0tW25vLV1zdXBwcmVzcy1mcm9tICAgICAgICAgICAqIFNlbmQgdG8gc2VsZi4gRGVmYXVsdCBvZmYuCi0gICAgLS1bbm8tXWNoYWluLXJlcGx5LXRvICAgICAgICAgICogQ2hhaW4gSW4tUmVwbHktVG86IGZpZWxkcy4gRGVmYXVsdCBvbi4KKyAgICAtLVtuby1dY2hhaW4tcmVwbHktdG8gICAgICAgICAgKiBDaGFpbiBJbi1SZXBseS1UbzogZmllbGRzLiBEZWZhdWx0IG9mZi4KICAgICAtLVtuby1ddGhyZWFkICAgICAgICAgICAgICAgICAgKiBVc2UgSW4tUmVwbHktVG86IGZpZWxkLiBEZWZhdWx0IG9uLgogCiAgIEFkbWluaXN0ZXJpbmc6CkBAIC0xNjIsNyArMTYyLDggQEAKIAogIyBIYW5kbGUgaW50ZXJhY3RpdmUgZWRpdGlvbiBvZiBmaWxlcy4KIG15ICRtdWx0aWVkaXQ7Ci1teSAkZWRpdG9yID0gJEVOVntHSVRfRURJVE9SfSB8fCBHaXQ6OmNvbmZpZyhAcmVwbywgImNvcmUuZWRpdG9yIikgfHwgJEVOVntWSVNVQUx9IHx8ICRFTlZ7RURJVE9SfSB8fCAidmkiOworbXkgJGVkaXRvciA9IEdpdDo6Y29tbWFuZF9vbmVsaW5lKCd2YXInLCAnR0lUX0VESVRPUicpOworCiBzdWIgZG9fZWRpdCB7CiAJaWYgKGRlZmluZWQoJG11bHRpZWRpdCkgJiYgISRtdWx0aWVkaXQpIHsKIAkJbWFwIHsKQEAgLTE4Niw5ICsxODcsMTEgQEAKIG15ICgkdmFsaWRhdGUsICRjb25maXJtKTsKIG15IChAc3VwcHJlc3NfY2MpOwogCitteSAkbm90X3NldF9ieV91c2VyID0gInRydWUgYnV0IG5vdCBzZXQgYnkgdGhlIHVzZXIiOworCiBteSAlY29uZmlnX2Jvb2xfc2V0dGluZ3MgPSAoCiAgICAgInRocmVhZCIgPT4gW1wkdGhyZWFkLCAxXSwKLSAgICAiY2hhaW5yZXBseXRvIiA9PiBbXCRjaGFpbl9yZXBseV90bywgMV0sCisgICAgImNoYWlucmVwbHl0byIgPT4gW1wkY2hhaW5fcmVwbHlfdG8sICRub3Rfc2V0X2J5X3VzZXJdLAogICAgICJzdXBwcmVzc2Zyb20iID0+IFtcJHN1cHByZXNzX2Zyb20sIHVuZGVmXSwKICAgICAic2lnbmVkb2ZmYnljYyIgPT4gW1wkc2lnbmVkX29mZl9ieV9jYywgdW5kZWZdLAogICAgICJzaWduZWRvZmZjYyIgPT4gW1wkc2lnbmVkX29mZl9ieV9jYywgdW5kZWZdLCAgICAgICMgRGVwcmVjYXRlZApAQCAtMjEwLDggKzIxMywyMiBAQAogICAgICJlbnZlbG9wZXNlbmRlciIgPT4gXCRlbnZlbG9wZV9zZW5kZXIsCiAgICAgIm11bHRpZWRpdCIgPT4gXCRtdWx0aWVkaXQsCiAgICAgImNvbmZpcm0iICAgPT4gXCRjb25maXJtLAorICAgICJmcm9tIiA9PiBcJHNlbmRlciwKICk7CiAKKyMgSGVscCB1c2VycyBwcmVwYXJlIGZvciAxLjcuMAorc3ViIGNoYWluX3JlcGx5X3RvIHsKKwlpZiAoZGVmaW5lZCAkY2hhaW5fcmVwbHlfdG8gJiYKKwkgICAgJGNoYWluX3JlcGx5X3RvIGVxICRub3Rfc2V0X2J5X3VzZXIpIHsKKwkJcHJpbnQgU1RERVJSCisJCSAgICAiSW4gZ2l0IDEuNy4wLCB0aGUgZGVmYXVsdCBoYXMgY2hhbmdlZCB0byAtLW5vLWNoYWluLXJlcGx5LXRvXG4iIC4KKwkJICAgICJTZXQgc2VuZGVtYWlsLmNoYWlucmVwbHl0byBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIHRydWUgaWZcbiIgLgorCQkgICAgInlvdSB3YW50IHRvIGtlZXAgLS1jaGFpbi1yZXBseS10byBhcyB5b3VyIGRlZmF1bHQuXG4iOworCQkkY2hhaW5fcmVwbHlfdG8gPSAwOworCX0KKwlyZXR1cm4gJGNoYWluX3JlcGx5X3RvOworfQorCiAjIEhhbmRsZSBVbmNvdXRoIFRlcm1pbmF0aW9uCiBzdWIgc2lnbmFsX2hhbmRsZXIgewogCkBAIC0zMzMsNyArMzUwLDcgQEAKIH0KIAogaWYgKCRzdXBwcmVzc19jY3snYWxsJ30pIHsKLQlmb3JlYWNoIG15ICRlbnRyeSAocXcgKGNjbWQgY2MgYXV0aG9yIHNlbGYgc29iIGJvZHkgYm9keWNjKSkgeworCWZvcmVhY2ggbXkgJGVudHJ5IChxdyAoY2NjbWQgY2MgYXV0aG9yIHNlbGYgc29iIGJvZHkgYm9keWNjKSkgewogCQkkc3VwcHJlc3NfY2N7JGVudHJ5fSA9IDE7CiAJfQogCWRlbGV0ZSAkc3VwcHJlc3NfY2N7J2FsbCd9OwpAQCAtNDAwLDcgKzQxNyw3IEBACiBteSAlcGFyc2VfYWxpYXMgPSAoCiAJIyBtdWx0aWxpbmUgZm9ybWF0cyBjYW4gYmUgc3VwcG9ydGVkIGluIHRoZSBmdXR1cmUKIAltdXR0ID0+IHN1YiB7IG15ICRmaCA9IHNoaWZ0OyB3aGlsZSAoPCRmaD4pIHsKLQkJaWYgKC9eXHMqYWxpYXNccysoXFMrKVxzKyguKikkLykgeworCQlpZiAoL15ccyphbGlhc1xzKyg/Oi1ncm91cFxzK1xTK1xzKykqKFxTKylccysoLiopJC8pIHsKIAkJCW15ICgkYWxpYXMsICRhZGRyKSA9ICgkMSwgJDIpOwogCQkJJGFkZHIgPX4gcy8jLiokLy87ICMgbXV0dCBhbGxvd3MgIyBjb21tZW50cwogCQkJICMgY29tbWFzIGRlbGltaXQgbXVsdGlwbGUgYWRkcmVzc2VzCkBAIC00MDksNyArNDI2LDcgQEAKIAltYWlscmMgPT4gc3ViIHsgbXkgJGZoID0gc2hpZnQ7IHdoaWxlICg8JGZoPikgewogCQlpZiAoL15hbGlhc1xzKyhcUyspXHMrKC4qKSQvKSB7CiAJCQkjIHNwYWNlcyBkZWxpbWl0IG11bHRpcGxlIGFkZHJlc3NlcwotCQkJJGFsaWFzZXN7JDF9ID0gWyBzcGxpdCgvXHMrLywgJDIpIF07CisJCQkkYWxpYXNlc3skMX0gPSBbIHF1b3Rld29yZHMoJ1xzKycsIDAsICQyKSBdOwogCQl9fX0sCiAJcGluZSA9PiBzdWIgeyBteSAkZmggPSBzaGlmdDsgbXkgJGY9J1x0W15cdF0qJzsKIAkgICAgICAgIGZvciAobXkgJHggPSAnJzsgZGVmaW5lZCgkeCk7ICR4ID0gJF8pIHsKQEAgLTUzNiw3ICs1NTMsNyBAQAogCiAJcHJpbnQgQyA8PEVPVDsKIEZyb20gJHRwbF9zZW5kZXIgIyBUaGlzIGxpbmUgaXMgaWdub3JlZC4KLUdJVDogTGluZXMgYmVnaW5uaW5nIGluICJHSVQ6ICIgd2lsbCBiZSByZW1vdmVkLgorR0lUOiBMaW5lcyBiZWdpbm5pbmcgaW4gIkdJVDoiIHdpbGwgYmUgcmVtb3ZlZC4KIEdJVDogQ29uc2lkZXIgaW5jbHVkaW5nIGFuIG92ZXJhbGwgZGlmZnN0YXQgb3IgdGFibGUgb2YgY29udGVudHMKIEdJVDogZm9yIHRoZSBwYXRjaCB5b3UgYXJlIHdyaXRpbmcuCiBHSVQ6CkBAIC01NTEsOCArNTY4LDYgQEAKIAl9CiAJY2xvc2UoQyk7CiAKLQlteSAkZWRpdG9yID0gJEVOVntHSVRfRURJVE9SfSB8fCBHaXQ6OmNvbmZpZyhAcmVwbywgImNvcmUuZWRpdG9yIikgfHwgJEVOVntWSVNVQUx9IHx8ICRFTlZ7RURJVE9SfSB8fCAidmkiOwotCiAJaWYgKCRhbm5vdGF0ZSkgewogCQlkb19lZGl0KCRjb21wb3NlX2ZpbGVuYW1lLCBAZmlsZXMpOwogCX0gZWxzZSB7CkBAIC01NjksNyArNTg0LDcgQEAKIAlteSAkaW5fYm9keSA9IDA7CiAJbXkgJHN1bW1hcnlfZW1wdHkgPSAxOwogCXdoaWxlKDxDPikgewotCQluZXh0IGlmIG0vXkdJVDogLzsKKwkJbmV4dCBpZiBtL15HSVQ6LzsKIAkJaWYgKCRpbl9ib2R5KSB7CiAJCQkkc3VtbWFyeV9lbXB0eSA9IDAgdW5sZXNzICgvXlxuJC8pOwogCQl9IGVsc2lmICgvXlxuJC8pIHsKQEAgLTU3Nyw3ICs1OTIsNyBAQAogCQkJaWYgKCRuZWVkXzhiaXRfY3RlKSB7CiAJCQkJcHJpbnQgQzIgIk1JTUUtVmVyc2lvbjogMS4wXG4iLAogCQkJCQkgIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgIiwKLQkJCQkJICAgImNoYXJzZXQ9dXRmLThcbiIsCisJCQkJCSAgICJjaGFyc2V0PVVURi04XG4iLAogCQkJCQkgIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiI7CiAJCQl9CiAJCX0gZWxzaWYgKC9eTUlNRS1WZXJzaW9uOi9pKSB7CkBAIC02NTQsMTMgKzY2OSwxNyBAQAogfQogCiBzdWIgZXhwYW5kX2FsaWFzZXMgewotCW15IEBjdXIgPSBAXzsKLQlteSBAbGFzdDsKLQlkbyB7Ci0JCUBsYXN0ID0gQGN1cjsKLQkJQGN1ciA9IG1hcCB7ICRhbGlhc2VzeyRffSA/IEB7JGFsaWFzZXN7JF99fSA6ICRfIH0gQGxhc3Q7Ci0JfSB3aGlsZSAoam9pbignLCcsQGN1cikgbmUgam9pbignLCcsQGxhc3QpKTsKLQlyZXR1cm4gQGN1cjsKKwlyZXR1cm4gbWFwIHsgZXhwYW5kX29uZV9hbGlhcygkXykgfSBAXzsKK30KKworbXkgJUVYUEFOREVEX0FMSUFTRVM7CitzdWIgZXhwYW5kX29uZV9hbGlhcyB7CisJbXkgJGFsaWFzID0gc2hpZnQ7CisJaWYgKCRFWFBBTkRFRF9BTElBU0VTeyRhbGlhc30pIHsKKwkJZGllICJmYXRhbDogYWxpYXMgJyRhbGlhcycgZXhwYW5kcyB0byBpdHNlbGZcbiI7CisJfQorCWxvY2FsICRFWFBBTkRFRF9BTElBU0VTeyRhbGlhc30gPSAxOworCXJldHVybiAkYWxpYXNlc3skYWxpYXN9ID8gZXhwYW5kX2FsaWFzZXMoQHskYWxpYXNlc3skYWxpYXN9fSkgOiAkYWxpYXM7CiB9CiAKIEB0byA9IGV4cGFuZF9hbGlhc2VzKEB0byk7CkBAIC03NjYsMTIgKzc4NSwyMCBAQAogCiBzdWIgcXVvdGVfcmZjMjA0NyB7CiAJbG9jYWwgJF8gPSBzaGlmdDsKLQlteSAkZW5jb2RpbmcgPSBzaGlmdCB8fCAndXRmLTgnOworCW15ICRlbmNvZGluZyA9IHNoaWZ0IHx8ICdVVEYtOCc7CiAJcy8oW14tYS16QS1aMC05ISorXC9dKS9zcHJpbnRmKCI9JTAyWCIsIG9yZCgkMSkpL2VnOwogCXMvKC4qKS89XD8kZW5jb2RpbmdcP3FcPyQxXD89LzsKIAlyZXR1cm4gJF87CiB9CiAKK3N1YiBpc19yZmMyMDQ3X3F1b3RlZCB7CisJbXkgJHMgPSBzaGlmdDsKKwlteSAkdG9rZW4gPSAnW15dWygpPD5ALDs6IlwvPy49IFwwMDAtXDAzN1wxNzctXDM3N10rJzsKKwlteSAkZW5jb2RlZF90ZXh0ID0gJ1shLT5ALX5dKyc7CisJbGVuZ3RoKCRzKSA8PSA3NSAmJgorCSRzID1+IG0vXig/OiJbWzphc2NpaTpdXSoifD1cPyR0b2tlblw/JHRva2VuXD8kZW5jb2RlZF90ZXh0XD89KSQvbzsKK30KKwogIyB1c2UgdGhlIHNpbXBsZXN0IHF1b3RpbmcgYmVpbmcgYWJsZSB0byBoYW5kbGUgdGhlIHJlY2lwaWVudAogc3ViIHNhbml0aXplX2FkZHJlc3MKIHsKQEAgLTc4Myw3ICs4MTAsNyBAQAogCX0KIAogCSMgaWYgcmVjaXBpZW50X25hbWUgaXMgYWxyZWFkeSBxdW90ZWQsIGRvIG5vdGhpbmcKLQlpZiAoJHJlY2lwaWVudF9uYW1lID1+IC9eKCJbWzphc2NpaTpdXSoifD1cP3V0Zi04XD9xXD8uKlw/PSkkLykgeworCWlmIChpc19yZmMyMDQ3X3F1b3RlZCgkcmVjaXBpZW50X25hbWUpKSB7CiAJCXJldHVybiAkcmVjaXBpZW50OwogCX0KIApAQCAtODAzLDYgKzgzMCwxMCBAQAogCiB9CiAKKyMgUmV0dXJucyAxIGlmIHRoZSBtZXNzYWdlIHdhcyBzZW50LCBhbmQgMCBvdGhlcndpc2UuCisjIEluIGFjdHVhbGl0eSwgdGhlIHdob2xlIHByb2dyYW0gZGllcyB3aGVuIHRoZXJlCisjIGlzIGFuIGVycm9yIHNlbmRpbmcgYSBtZXNzYWdlLgorCiBzdWIgc2VuZF9tZXNzYWdlCiB7CiAJbXkgQHJlY2lwaWVudHMgPSB1bmlxdWVfZW1haWxfbGlzdChAdG8pOwpAQCAtODIwLDcgKzg1MSw3IEBACiAJICAgICRnaXR2ZXJzaW9uID0gR2l0Ojp2ZXJzaW9uKCk7CiAJfQogCi0JbXkgJGNjID0gam9pbigiLCAiLCB1bmlxdWVfZW1haWxfbGlzdChAY2MpKTsKKwlteSAkY2MgPSBqb2luKCIsXG5cdCIsIHVuaXF1ZV9lbWFpbF9saXN0KEBjYykpOwogCW15ICRjY2xpbmUgPSAiIjsKIAlpZiAoJGNjIG5lICcnKSB7CiAJCSRjY2xpbmUgPSAiXG5DYzogJGNjIjsKQEAgLTg0Niw3ICs4NzcsOSBAQAogCiAJbXkgQHNlbmRtYWlsX3BhcmFtZXRlcnMgPSAoJy1pJywgQHJlY2lwaWVudHMpOwogCW15ICRyYXdfZnJvbSA9ICRzYW5pdGl6ZWRfc2VuZGVyOwotCSRyYXdfZnJvbSA9ICRlbnZlbG9wZV9zZW5kZXIgaWYgKGRlZmluZWQgJGVudmVsb3BlX3NlbmRlcik7CisJaWYgKGRlZmluZWQgJGVudmVsb3BlX3NlbmRlciAmJiAkZW52ZWxvcGVfc2VuZGVyIG5lICJhdXRvIikgeworCQkkcmF3X2Zyb20gPSAkZW52ZWxvcGVfc2VuZGVyOworCX0KIAkkcmF3X2Zyb20gPSBleHRyYWN0X3ZhbGlkX2FkZHJlc3MoJHJhd19mcm9tKTsKIAl1bnNoaWZ0IChAc2VuZG1haWxfcGFyYW1ldGVycywKIAkJCSctZicsICRyYXdfZnJvbSkgaWYoZGVmaW5lZCAkZW52ZWxvcGVfc2VuZGVyKTsKQEAgLTg3MSw3ICs5MDQsNyBAQAogCQkgICAgICAgICBkZWZhdWx0ID0+ICRhc2tfZGVmYXVsdCk7CiAJCWRpZSAiU2VuZCB0aGlzIGVtYWlsIHJlcGx5IHJlcXVpcmVkIiB1bmxlc3MgZGVmaW5lZCAkXzsKIAkJaWYgKC9ebi9pKSB7Ci0JCQlyZXR1cm47CisJCQlyZXR1cm4gMDsKIAkJfSBlbHNpZiAoL15xL2kpIHsKIAkJCWNsZWFudXBfY29tcG9zZV9maWxlcygpOwogCQkJZXhpdCgwKTsKQEAgLTkwNiw3ICs5MzksNyBAQAogCQkJJHNtdHAgfHw9IE5ldDo6U01UUC0+bmV3KChkZWZpbmVkICRzbXRwX3NlcnZlcl9wb3J0KQogCQkJCQkJID8gIiRzbXRwX3NlcnZlcjokc210cF9zZXJ2ZXJfcG9ydCIKIAkJCQkJCSA6ICRzbXRwX3NlcnZlcik7Ci0JCQlpZiAoJHNtdHBfZW5jcnlwdGlvbiBlcSAndGxzJykgeworCQkJaWYgKCRzbXRwX2VuY3J5cHRpb24gZXEgJ3RscycgJiYgJHNtdHApIHsKIAkJCQlyZXF1aXJlIE5ldDo6U01UUDo6U1NMOwogCQkJCSRzbXRwLT5jb21tYW5kKCdTVEFSVFRMUycpOwogCQkJCSRzbXRwLT5yZXNwb25zZSgpOwpAQCAtOTUyLDcgKzk4NSw3IEBACiAJCSRzbXRwLT5kYXRhIG9yIGRpZSAkc210cC0+bWVzc2FnZTsKIAkJJHNtdHAtPmRhdGFzZW5kKCIkaGVhZGVyXG4kbWVzc2FnZSIpIG9yIGRpZSAkc210cC0+bWVzc2FnZTsKIAkJJHNtdHAtPmRhdGFlbmQoKSBvciBkaWUgJHNtdHAtPm1lc3NhZ2U7Ci0JCSRzbXRwLT5vayBvciBkaWUgIkZhaWxlZCB0byBzZW5kICRzdWJqZWN0XG4iLiRzbXRwLT5tZXNzYWdlOworCQkkc210cC0+Y29kZSA9fiAvMjUwfDIwMC8gb3IgZGllICJGYWlsZWQgdG8gc2VuZCAkc3ViamVjdFxuIi4kc210cC0+bWVzc2FnZTsKIAl9CiAJaWYgKCRxdWlldCkgewogCQlwcmludGYgKCgkZHJ5X3J1biA/ICJEcnktIiA6ICIiKS4iU2VudCAlc1xuIiwgJHN1YmplY3QpOwpAQCAtOTYxLDcgKzk5NCw5IEBACiAJCWlmICgkc210cF9zZXJ2ZXIgIX4gbSNeLyMpIHsKIAkJCXByaW50ICJTZXJ2ZXI6ICRzbXRwX3NlcnZlclxuIjsKIAkJCXByaW50ICJNQUlMIEZST006PCRyYXdfZnJvbT5cbiI7Ci0JCQlwcmludCAiUkNQVCBUTzoiLmpvaW4oJywnLChtYXAgeyAiPCRfPiIgfSBAcmVjaXBpZW50cykpLiJcbiI7CisJCQlmb3JlYWNoIG15ICRlbnRyeSAoQHJlY2lwaWVudHMpIHsKKwkJCSAgICBwcmludCAiUkNQVCBUTzo8JGVudHJ5PlxuIjsKKwkJCX0KIAkJfSBlbHNlIHsKIAkJCXByaW50ICJTZW5kbWFpbDogJHNtdHBfc2VydmVyICIuam9pbignICcsQHNlbmRtYWlsX3BhcmFtZXRlcnMpLiJcbiI7CiAJCX0KQEAgLTk3Myw2ICsxMDA4LDggQEAKIAkJCXByaW50ICJSZXN1bHQ6IE9LXG4iOwogCQl9CiAJfQorCisJcmV0dXJuIDE7CiB9CiAKICRyZXBseV90byA9ICRpbml0aWFsX3JlcGx5X3RvOwpAQCAtMTA5MCw3ICsxMTI3LDcgQEAKIAljbG9zZSBGOwogCiAJaWYgKGRlZmluZWQgJGNjX2NtZCAmJiAhJHN1cHByZXNzX2NjeydjY2NtZCd9KSB7Ci0JCW9wZW4oRiwgIiRjY19jbWQgJHQgfCIpCisJCW9wZW4oRiwgIiRjY19jbWQgXFEkdFxFIHwiKQogCQkJb3IgZGllICIoY2MtY21kKSBDb3VsZCBub3QgZXhlY3V0ZSAnJGNjX2NtZCciOwogCQl3aGlsZSg8Rj4pIHsKIAkJCW15ICRjID0gJF87CkBAIC0xMTMzLDEwICsxMTcwLDExIEBACiAKIAlAY2MgPSAoQGluaXRpYWxfY2MsIEBjYyk7CiAKLQlzZW5kX21lc3NhZ2UoKTsKKwlteSAkbWVzc2FnZV93YXNfc2VudCA9IHNlbmRfbWVzc2FnZSgpOwogCiAJIyBzZXQgdXAgZm9yIHRoZSBuZXh0IG1lc3NhZ2UKLQlpZiAoJGNoYWluX3JlcGx5X3RvIHx8ICFkZWZpbmVkICRyZXBseV90byB8fCBsZW5ndGgoJHJlcGx5X3RvKSA9PSAwKSB7CisJaWYgKCR0aHJlYWQgJiYgJG1lc3NhZ2Vfd2FzX3NlbnQgJiYKKwkJKGNoYWluX3JlcGx5X3RvKCkgfHwgIWRlZmluZWQgJHJlcGx5X3RvIHx8IGxlbmd0aCgkcmVwbHlfdG8pID09IDApKSB7CiAJCSRyZXBseV90byA9ICRtZXNzYWdlX2lkOwogCQlpZiAobGVuZ3RoICRyZWZlcmVuY2VzID4gMCkgewogCQkJJHJlZmVyZW5jZXMgLj0gIlxuICRtZXNzYWdlX2lkIjsKZGlmZiAtLWdpdCBhL2dpdC1zaC1zZXR1cC5zaCBiL2dpdC1zaC1zZXR1cC5zaAppbmRleCA4MzgyMzM5Li42MTMxNjcwIDEwMDc1NQotLS0gYS9naXQtc2gtc2V0dXAuc2gKKysrIGIvZ2l0LXNoLXNldHVwLnNoCkBAIC0xMSwxMSArMTEsNDggQEAKICMgZXhwb3J0aW5nIGl0LgogdW5zZXQgQ0RQQVRICiAKK2dpdF9icm9rZW5fcGF0aF9maXggKCkgeworCWNhc2UgIjokUEFUSDoiIGluCisJKjokMToqKSA6IG9rIDs7CisJKikKKwkJUEFUSD0kKAorCQkJU0FORV9UT09MX1BBVEg9IiQxIgorCQkJSUZTPTogcGF0aD0gc2VwPQorCQkJc2V0IHggJFBBVEgKKwkJCXNoaWZ0CisJCQlmb3IgZWxlbQorCQkJZG8KKwkJCQljYXNlICIkU0FORV9UT09MX1BBVEg6JGVsZW0iIGluCisJCQkJKD8qOi9iaW4gfCA/KjovdXNyL2JpbikKKwkJCQkJcGF0aD0iJHBhdGgkc2VwJFNBTkVfVE9PTF9QQVRIIgorCQkJCQlzZXA9OgorCQkJCQlTQU5FX1RPT0xfUEFUSD0KKwkJCQllc2FjCisJCQkJcGF0aD0iJHBhdGgkc2VwJGVsZW0iCisJCQkJc2VwPToKKwkJCWRvbmUKKwkJCWVjaG8gIiRwYXRoIgorCQkpCisJCTs7CisJZXNhYworfQorCisjIEBAQlJPS0VOX1BBVEhfRklYQEAKKwogZGllKCkgewogCWVjaG8gPiYyICIkQCIKIAlleGl0IDEKIH0KIAorR0lUX1FVSUVUPQorCitzYXkgKCkgeworCWlmIHRlc3QgLXogIiRHSVRfUVVJRVQiCisJdGhlbgorCQlwcmludGYgJyVzXG4nICIkKiIKKwlmaQorfQorCiBpZiB0ZXN0IC1uICIkT1BUSU9OU19TUEVDIjsgdGhlbgogCXVzYWdlKCkgewogCQkiJDAiIC1oCkBAIC02MiwxOSArOTksMzMgQEAKIH0KIAogZ2l0X2VkaXRvcigpIHsKLQk6ICIke0dJVF9FRElUT1I6PSQoZ2l0IGNvbmZpZyBjb3JlLmVkaXRvcil9IgotCTogIiR7R0lUX0VESVRPUjo9JHtWSVNVQUw6LSR7RURJVE9SfX19IgotCWNhc2UgIiRHSVRfRURJVE9SLCRURVJNIiBpbgotCSxkdW1iKQotCQllY2hvID4mMiAiTm8gZWRpdG9yIHNwZWNpZmllZCBpbiBHSVRfRURJVE9SLCBjb3JlLmVkaXRvciwgVklTVUFMLCIKLQkJZWNobyA+JjIgIm9yIEVESVRPUi4gVHJpZWQgdG8gZmFsbCBiYWNrIHRvIHZpIGJ1dCB0ZXJtaW5hbCBpcyBkdW1iLiIKLQkJZWNobyA+JjIgIlBsZWFzZSBzZXQgb25lIG9mIHRoZXNlIHZhcmlhYmxlcyB0byBhbiBhcHByb3ByaWF0ZSIKLQkJZWNobyA+JjIgImVkaXRvciBvciBydW4gJDAgd2l0aCBvcHRpb25zIHRoYXQgd2lsbCBub3QgY2F1c2UgYW4iCi0JCWVjaG8gPiYyICJlZGl0b3IgdG8gYmUgaW52b2tlZCAoZS5nLiwgLW0gb3IgLUYgZm9yIGdpdC1jb21taXQpLiIKLQkJZXhpdCAxCi0JCTs7Ci0JZXNhYwotCWV2YWwgIiR7R0lUX0VESVRPUjo9dml9IiAnIiRAIicKKwlpZiB0ZXN0IC16ICIke0dJVF9FRElUT1I6K3NldH0iCisJdGhlbgorCQlHSVRfRURJVE9SPSIkKGdpdCB2YXIgR0lUX0VESVRPUikiIHx8IHJldHVybiAkPworCWZpCisKKwlldmFsICIkR0lUX0VESVRPUiIgJyIkQCInCit9CisKK2dpdF9wYWdlcigpIHsKKwlpZiB0ZXN0IC10IDEKKwl0aGVuCisJCUdJVF9QQUdFUj0kKGdpdCB2YXIgR0lUX1BBR0VSKQorCWVsc2UKKwkJR0lUX1BBR0VSPWNhdAorCWZpCisJOiAke0xFU1M9LUZSU1h9CisJZXhwb3J0IExFU1MKKworCWV2YWwgIiRHSVRfUEFHRVIiICciJEAiJworfQorCitzYW5lX2dyZXAgKCkgeworCUdSRVBfT1BUSU9OUz0gTENfQUxMPUMgZ3JlcCAiJEAiCit9CisKK3NhbmVfZWdyZXAgKCkgeworCUdSRVBfT1BUSU9OUz0gTENfQUxMPUMgZWdyZXAgIiRAIgogfQogCiBpc19iYXJlX3JlcG9zaXRvcnkgKCkgewpAQCAtODIsMjQgKzEzMywxNSBAQAogfQogCiBjZF90b190b3BsZXZlbCAoKSB7Ci0JY2R1cD0kKGdpdCByZXYtcGFyc2UgLS1zaG93LWNkdXApCi0JaWYgdGVzdCAhIC16ICIkY2R1cCIKLQl0aGVuCi0JCSMgVGhlICItUCIgb3B0aW9uIHNheXMgdG8gZm9sbG93ICJwaHlzaWNhbCIgZGlyZWN0b3J5Ci0JCSMgc3RydWN0dXJlIGluc3RlYWQgb2YgZm9sbG93aW5nIHN5bWJvbGljIGxpbmtzLiAgV2hlbiBjZHVwIGlzCi0JCSMgIi4uLyIsIHRoaXMgbWVhbnMgZm9sbG93aW5nIHRoZSAiLi4iIGVudHJ5IGluIHRoZSBjdXJyZW50Ci0JCSMgZGlyZWN0b3J5IGluc3RlYWQgdGV4dHVhbGx5IHJlbW92aW5nIGEgc3ltbGluayBwYXRoIGVsZW1lbnQKLQkJIyBmcm9tIHRoZSBQV0Qgc2hlbGwgdmFyaWFibGUuICBUaGUgIi1QIiBiZWhhdmlvciBpcyBtb3JlCi0JCSMgY29uc2lzdGVudCB3aXRoIHRoZSBDLXN0eWxlIGNoZGlyIHVzZWQgYnkgbW9zdCBvZiBHaXQuCi0JCWNkIC1QICIkY2R1cCIgfHwgewotCQkJZWNobyA+JjIgIkNhbm5vdCBjaGRpciB0byAkY2R1cCwgdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUiCi0JCQlleGl0IDEKLQkJfQotCWZpCisJY2R1cD0kKGdpdCByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsKSAmJgorCWNkICIkY2R1cCIgfHwgeworCQllY2hvID4mMiAiQ2Fubm90IGNoZGlyIHRvICRjZHVwLCB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKKwkJZXhpdCAxCisJfQogfQogCiByZXF1aXJlX3dvcmtfdHJlZSAoKSB7Ci0JdGVzdCAkKGdpdCByZXYtcGFyc2UgLS1pcy1pbnNpZGUtd29yay10cmVlKSA9IHRydWUgfHwKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgLS1pcy1pbnNpZGUtd29yay10cmVlIDI+L2Rldi9udWxsKSIgPSB0cnVlIHx8CiAJZGllICJmYXRhbDogJDAgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBhIHdvcmtpbmcgdHJlZS4iCiB9CiAKQEAgLTEzMCw2ICsxNzIsMTMgQEAKIAlMQU5HPUMgTENfQUxMPUMgc2VkIC1uZSAiJHBpY2tfYXV0aG9yX3NjcmlwdCIKIH0KIAorIyBDbGVhciByZXBvLWxvY2FsIEdJVF8qIGVudmlyb25tZW50IHZhcmlhYmxlcy4gVXNlZnVsIHdoZW4gc3dpdGNoaW5nIHRvCisjIGFub3RoZXIgcmVwb3NpdG9yeSAoZS5nLiB3aGVuIGVudGVyaW5nIGEgc3VibW9kdWxlKS4gU2VlIGFsc28gdGhlIGVudgorIyBsaXN0IGluIGdpdF9jb25uZWN0KCkKK2NsZWFyX2xvY2FsX2dpdF9lbnYoKSB7CisJdW5zZXQgJChnaXQgcmV2LXBhcnNlIC0tbG9jYWwtZW52LXZhcnMpCit9CisKICMgTWFrZSBzdXJlIHdlIGFyZSBpbiBhIHZhbGlkIHJlcG9zaXRvcnkgb2YgYSB2aW50YWdlIHdlIHVuZGVyc3RhbmQsCiAjIGlmIHdlIHJlcXVpcmUgdG8gYmUgaW4gYSBnaXQgcmVwb3NpdG9yeS4KIGlmIHRlc3QgLXogIiROT05HSVRfT0siCmRpZmYgLS1naXQgYS9naXQtc3Rhc2guc2ggYi9naXQtc3Rhc2guc2gKaW5kZXggYjlhY2U5OS4uYWE0N2U1NCAxMDA3NTUKLS0tIGEvZ2l0LXN0YXNoLnNoCisrKyBiL2dpdC1zdGFzaC5zaApAQCAtMywxMCArMywxMSBAQAogCiBkYXNobGVzcz0kKGJhc2VuYW1lICIkMCIgfCBzZWQgLWUgJ3MvLS8gLycpCiBVU0FHRT0ibGlzdCBbPG9wdGlvbnM+XQotICAgb3I6ICRkYXNobGVzcyAoc2hvdyB8IGRyb3AgfCBwb3AgKSBbPHN0YXNoPl0KLSAgIG9yOiAkZGFzaGxlc3MgYXBwbHkgWy0taW5kZXhdIFs8c3Rhc2g+XQorICAgb3I6ICRkYXNobGVzcyBzaG93IFs8c3Rhc2g+XQorICAgb3I6ICRkYXNobGVzcyBkcm9wIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0KKyAgIG9yOiAkZGFzaGxlc3MgKCBwb3AgfCBhcHBseSApIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dCiAgICBvcjogJGRhc2hsZXNzIGJyYW5jaCA8YnJhbmNobmFtZT4gWzxzdGFzaD5dCi0gICBvcjogJGRhc2hsZXNzIFtzYXZlIFstLWtlZXAtaW5kZXhdIFs8bWVzc2FnZT5dXQorICAgb3I6ICRkYXNobGVzcyBbc2F2ZSBbLS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF0gWzxtZXNzYWdlPl1dCiAgICBvcjogJGRhc2hsZXNzIGNsZWFyIgogCiBTVUJESVJFQ1RPUllfT0s9WWVzCkBAIC0yMCw2ICsyMSwxNCBAQAogCiByZWZfc3Rhc2g9cmVmcy9zdGFzaAogCitpZiBnaXQgY29uZmlnIC0tZ2V0LWNvbG9yYm9vbCBjb2xvci5pbnRlcmFjdGl2ZTsgdGhlbgorICAgICAgIGhlbHBfY29sb3I9IiQoZ2l0IGNvbmZpZyAtLWdldC1jb2xvciBjb2xvci5pbnRlcmFjdGl2ZS5oZWxwICdyZWQgYm9sZCcpIgorICAgICAgIHJlc2V0X2NvbG9yPSIkKGdpdCBjb25maWcgLS1nZXQtY29sb3IgJycgcmVzZXQpIgorZWxzZQorICAgICAgIGhlbHBfY29sb3I9CisgICAgICAgcmVzZXRfY29sb3I9CitmaQorCiBub19jaGFuZ2VzICgpIHsKIAlnaXQgZGlmZi1pbmRleCAtLXF1aWV0IC0tY2FjaGVkIEhFQUQgLS1pZ25vcmUtc3VibW9kdWxlcyAtLSAmJgogCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgLS1pZ25vcmUtc3VibW9kdWxlcwpAQCAtNjcsMTkgKzc2LDQ0IEBACiAJCWdpdCBjb21taXQtdHJlZSAkaV90cmVlIC1wICRiX2NvbW1pdCkgfHwKIAkJZGllICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBpbmRleCBzdGF0ZSIKIAotCSMgc3RhdGUgb2YgdGhlIHdvcmtpbmcgdHJlZQotCXdfdHJlZT0kKCAoCisJaWYgdGVzdCAteiAiJHBhdGNoX21vZGUiCisJdGhlbgorCisJCSMgc3RhdGUgb2YgdGhlIHdvcmtpbmcgdHJlZQorCQl3X3RyZWU9JCggKAorCQkJcm0gLWYgIiRUTVAtaW5kZXgiICYmCisJCQljcCAtcCAke0dJVF9JTkRFWF9GSUxFLSIkR0lUX0RJUi9pbmRleCJ9ICIkVE1QLWluZGV4IiAmJgorCQkJR0lUX0lOREVYX0ZJTEU9IiRUTVAtaW5kZXgiICYmCisJCQlleHBvcnQgR0lUX0lOREVYX0ZJTEUgJiYKKwkJCWdpdCByZWFkLXRyZWUgLW0gJGlfdHJlZSAmJgorCQkJZ2l0IGFkZCAtdSAmJgorCQkJZ2l0IHdyaXRlLXRyZWUgJiYKKwkJCXJtIC1mICIkVE1QLWluZGV4IgorCQkpICkgfHwKKwkJCWRpZSAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgd29ya3RyZWUgc3RhdGUiCisKKwllbHNlCisKIAkJcm0gLWYgIiRUTVAtaW5kZXgiICYmCi0JCWNwIC1wICR7R0lUX0lOREVYX0ZJTEUtIiRHSVRfRElSL2luZGV4In0gIiRUTVAtaW5kZXgiICYmCi0JCUdJVF9JTkRFWF9GSUxFPSIkVE1QLWluZGV4IiAmJgotCQlleHBvcnQgR0lUX0lOREVYX0ZJTEUgJiYKLQkJZ2l0IHJlYWQtdHJlZSAtbSAkaV90cmVlICYmCi0JCWdpdCBhZGQgLXUgJiYKLQkJZ2l0IHdyaXRlLXRyZWUgJiYKLQkJcm0gLWYgIiRUTVAtaW5kZXgiCi0JKSApIHx8CisJCUdJVF9JTkRFWF9GSUxFPSIkVE1QLWluZGV4IiBnaXQgcmVhZC10cmVlIEhFQUQgJiYKKworCQkjIGZpbmQgb3V0IHdoYXQgdGhlIHVzZXIgd2FudHMKKwkJR0lUX0lOREVYX0ZJTEU9IiRUTVAtaW5kZXgiIFwKKwkJCWdpdCBhZGQtLWludGVyYWN0aXZlIC0tcGF0Y2g9c3Rhc2ggLS0gJiYKKworCQkjIHN0YXRlIG9mIHRoZSB3b3JraW5nIHRyZWUKKwkJd190cmVlPSQoR0lUX0lOREVYX0ZJTEU9IiRUTVAtaW5kZXgiIGdpdCB3cml0ZS10cmVlKSB8fAogCQlkaWUgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHdvcmt0cmVlIHN0YXRlIgogCisJCWdpdCBkaWZmLXRyZWUgLXAgSEVBRCAkd190cmVlID4gIiRUTVAtcGF0Y2giICYmCisJCXRlc3QgLXMgIiRUTVAtcGF0Y2giIHx8CisJCWRpZSAiTm8gY2hhbmdlcyBzZWxlY3RlZCIKKworCQlybSAtZiAiJFRNUC1pbmRleCIgfHwKKwkJZGllICJDYW5ub3QgcmVtb3ZlIHRlbXBvcmFyeSBpbmRleCAoY2FuJ3QgaGFwcGVuKSIKKworCWZpCisKIAkjIGNyZWF0ZSB0aGUgc3Rhc2gKIAlpZiB0ZXN0IC16ICIkc3Rhc2hfbXNnIgogCXRoZW4KQEAgLTk0LDE4ICsxMjgsNDUgQEAKIAogc2F2ZV9zdGFzaCAoKSB7CiAJa2VlcF9pbmRleD0KLQljYXNlICIkMSIgaW4KLQktLWtlZXAtaW5kZXgpCi0JCWtlZXBfaW5kZXg9dAorCXBhdGNoX21vZGU9CisJd2hpbGUgdGVzdCAkIyAhPSAwCisJZG8KKwkJY2FzZSAiJDEiIGluCisJCS1rfC0ta2VlcC1pbmRleCkKKwkJCWtlZXBfaW5kZXg9dAorCQkJOzsKKwkJLS1uby1rZWVwLWluZGV4KQorCQkJa2VlcF9pbmRleD0KKwkJCTs7CisJCS1wfC0tcGF0Y2gpCisJCQlwYXRjaF9tb2RlPXQKKwkJCWtlZXBfaW5kZXg9dAorCQkJOzsKKwkJLXF8LS1xdWlldCkKKwkJCUdJVF9RVUlFVD10CisJCQk7OworCQktLSkKKwkJCXNoaWZ0CisJCQlicmVhaworCQkJOzsKKwkJLSopCisJCQllY2hvICJlcnJvcjogdW5rbm93biBvcHRpb24gZm9yICdzdGFzaCBzYXZlJzogJDEiCisJCQllY2hvICIgICAgICAgVG8gcHJvdmlkZSBhIG1lc3NhZ2UsIHVzZSBnaXQgc3Rhc2ggc2F2ZSAtLSAnJDEnIgorCQkJdXNhZ2UKKwkJCTs7CisJCSopCisJCQlicmVhaworCQkJOzsKKwkJZXNhYwogCQlzaGlmdAotCWVzYWMKKwlkb25lCiAKIAlzdGFzaF9tc2c9IiQqIgogCiAJZ2l0IHVwZGF0ZS1pbmRleCAtcSAtLXJlZnJlc2gKIAlpZiBub19jaGFuZ2VzCiAJdGhlbgotCQllY2hvICdObyBsb2NhbCBjaGFuZ2VzIHRvIHNhdmUnCisJCXNheSAnTm8gbG9jYWwgY2hhbmdlcyB0byBzYXZlJwogCQlleGl0IDAKIAlmaQogCXRlc3QgLWYgIiRHSVRfRElSL2xvZ3MvJHJlZl9zdGFzaCIgfHwKQEAgLTExOCwxMyArMTc5LDI0IEBACiAKIAlnaXQgdXBkYXRlLXJlZiAtbSAiJHN0YXNoX21zZyIgJHJlZl9zdGFzaCAkd19jb21taXQgfHwKIAkJZGllICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBzdGF0dXMiCi0JcHJpbnRmICdTYXZlZCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXggc3RhdGUgIiVzIlxuJyAiJHN0YXNoX21zZyIKKwlzYXkgU2F2ZWQgd29ya2luZyBkaXJlY3RvcnkgYW5kIGluZGV4IHN0YXRlICIkc3Rhc2hfbXNnIgogCi0JZ2l0IHJlc2V0IC0taGFyZAotCi0JaWYgdGVzdCAtbiAiJGtlZXBfaW5kZXgiICYmIHRlc3QgLW4gJGlfdHJlZQorCWlmIHRlc3QgLXogIiRwYXRjaF9tb2RlIgogCXRoZW4KLQkJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11ICRpX3RyZWUKKwkJZ2l0IHJlc2V0IC0taGFyZCAke0dJVF9RVUlFVDorLXF9CisKKwkJaWYgdGVzdCAtbiAiJGtlZXBfaW5kZXgiICYmIHRlc3QgLW4gJGlfdHJlZQorCQl0aGVuCisJCQlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgJGlfdHJlZQorCQlmaQorCWVsc2UKKwkJZ2l0IGFwcGx5IC1SIDwgIiRUTVAtcGF0Y2giIHx8CisJCWRpZSAiQ2Fubm90IHJlbW92ZSB3b3JrdHJlZSBjaGFuZ2VzIgorCisJCWlmIHRlc3QgLXogIiRrZWVwX2luZGV4IgorCQl0aGVuCisJCQlnaXQgcmVzZXQKKwkJZmkKIAlmaQogfQogCkBAIC0xMzQsOCArMjA2LDcgQEAKIAogbGlzdF9zdGFzaCAoKSB7CiAJaGF2ZV9zdGFzaCB8fCByZXR1cm4gMAotCWdpdCBsb2cgLS1uby1jb2xvciAtLXByZXR0eT1vbmVsaW5lIC1nICIkQCIgJHJlZl9zdGFzaCAtLSB8Ci0Jc2VkIC1uIC1lICdzL15bLjAtOWEtZl0qIHJlZnNcLy8vcCcKKwlnaXQgbG9nIC0tZm9ybWF0PSIlZ2Q6ICVncyIgLWcgIiRAIiAkcmVmX3N0YXNoIC0tCiB9CiAKIHNob3dfc3Rhc2ggKCkgewpAQCAtMTUxLDI5ICsyMjIsNDkgQEAKIH0KIAogYXBwbHlfc3Rhc2ggKCkgeworCWFwcGxpZWRfc3Rhc2g9CisJdW5zdGFzaF9pbmRleD0KKworCXdoaWxlIHRlc3QgJCMgIT0gMAorCWRvCisJCWNhc2UgIiQxIiBpbgorCQktLWluZGV4KQorCQkJdW5zdGFzaF9pbmRleD10CisJCQk7OworCQktcXwtLXF1aWV0KQorCQkJR0lUX1FVSUVUPXQKKwkJCTs7CisJCSopCisJCQlicmVhaworCQkJOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKKworCWlmIHRlc3QgJCMgPSAwCisJdGhlbgorCQloYXZlX3N0YXNoIHx8IGRpZSAnTm90aGluZyB0byBhcHBseScKKwkJYXBwbGllZF9zdGFzaD0iJHJlZl9zdGFzaEB7MH0iCisJZWxzZQorCQlhcHBsaWVkX3N0YXNoPSIkKiIKKwlmaQorCisJIyBzdGFzaCByZWNvcmRzIHRoZSB3b3JrIHRyZWUsIGFuZCBpcyBhIG1lcmdlIGJldHdlZW4gdGhlCisJIyBiYXNlIGNvbW1pdCAoZmlyc3QgcGFyZW50KSBhbmQgdGhlIGluZGV4IHRyZWUgKHNlY29uZCBwYXJlbnQpLgorCXM9JChnaXQgcmV2LXBhcnNlIC0tcXVpZXQgLS12ZXJpZnkgLS1kZWZhdWx0ICRyZWZfc3Rhc2ggIiRAIikgJiYKKwl3X3RyZWU9JChnaXQgcmV2LXBhcnNlIC0tcXVpZXQgLS12ZXJpZnkgIiRzOiIpICYmCisJYl90cmVlPSQoZ2l0IHJldi1wYXJzZSAtLXF1aWV0IC0tdmVyaWZ5ICIkc14xOiIpICYmCisJaV90cmVlPSQoZ2l0IHJldi1wYXJzZSAtLXF1aWV0IC0tdmVyaWZ5ICIkc14yOiIpIHx8CisJCWRpZSAiJCo6IG5vIHZhbGlkIHN0YXNoZWQgc3RhdGUgZm91bmQiCisKIAlnaXQgdXBkYXRlLWluZGV4IC1xIC0tcmVmcmVzaCAmJgogCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgLS1pZ25vcmUtc3VibW9kdWxlcyB8fAogCQlkaWUgJ0Nhbm5vdCBhcHBseSB0byBhIGRpcnR5IHdvcmtpbmcgdHJlZSwgcGxlYXNlIHN0YWdlIHlvdXIgY2hhbmdlcycKIAotCXVuc3Rhc2hfaW5kZXg9Ci0JY2FzZSAiJDEiIGluCi0JLS1pbmRleCkKLQkJdW5zdGFzaF9pbmRleD10Ci0JCXNoaWZ0Ci0JZXNhYwotCiAJIyBjdXJyZW50IGluZGV4IHN0YXRlCiAJY190cmVlPSQoZ2l0IHdyaXRlLXRyZWUpIHx8CiAJCWRpZSAnQ2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlJwogCi0JIyBzdGFzaCByZWNvcmRzIHRoZSB3b3JrIHRyZWUsIGFuZCBpcyBhIG1lcmdlIGJldHdlZW4gdGhlCi0JIyBiYXNlIGNvbW1pdCAoZmlyc3QgcGFyZW50KSBhbmQgdGhlIGluZGV4IHRyZWUgKHNlY29uZCBwYXJlbnQpLgotCXM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tZGVmYXVsdCAkcmVmX3N0YXNoICIkQCIpICYmCi0Jd190cmVlPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJHM6IikgJiYKLQliX3RyZWU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkc14xOiIpICYmCi0JaV90cmVlPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJHNeMjoiKSB8fAotCQlkaWUgIiQqOiBubyB2YWxpZCBzdGFzaGVkIHN0YXRlIGZvdW5kIgotCiAJdW5zdGFzaGVkX2luZGV4X3RyZWU9CiAJaWYgdGVzdCAtbiAiJHVuc3Rhc2hfaW5kZXgiICYmIHRlc3QgIiRiX3RyZWUiICE9ICIkaV90cmVlIiAmJgogCQkJdGVzdCAiJGNfdHJlZSIgIT0gIiRpX3RyZWUiCkBAIC0xODEsNyArMjcyLDcgQEAKIAkJZ2l0IGRpZmYtdHJlZSAtLWJpbmFyeSAkc14yXi4uJHNeMiB8IGdpdCBhcHBseSAtLWNhY2hlZAogCQl0ZXN0ICQ/IC1uZSAwICYmCiAJCQlkaWUgJ0NvbmZsaWN0cyBpbiBpbmRleC4gVHJ5IHdpdGhvdXQgLS1pbmRleC4nCi0JCXVuc3Rhc2hlZF9pbmRleF90cmVlPSQoZ2l0LXdyaXRlLXRyZWUpIHx8CisJCXVuc3Rhc2hlZF9pbmRleF90cmVlPSQoZ2l0IHdyaXRlLXRyZWUpIHx8CiAJCQlkaWUgJ0NvdWxkIG5vdCBzYXZlIGluZGV4IHRyZWUnCiAJCWdpdCByZXNldAogCWZpCkBAIC0xOTMsNyArMjg0LDExIEBACiAJCWV4cG9ydCBHSVRIRUFEXyR3X3RyZWUgR0lUSEVBRF8kY190cmVlIEdJVEhFQURfJGJfdHJlZQogCSIKIAotCWlmIGdpdC1tZXJnZS1yZWN1cnNpdmUgJGJfdHJlZSAtLSAkY190cmVlICR3X3RyZWUKKwlpZiB0ZXN0IC1uICIkR0lUX1FVSUVUIgorCXRoZW4KKwkJZXhwb3J0IEdJVF9NRVJHRV9WRVJCT1NJVFk9MAorCWZpCisJaWYgZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAkYl90cmVlIC0tICRjX3RyZWUgJHdfdHJlZQogCXRoZW4KIAkJIyBObyBjb25mbGljdAogCQlpZiB0ZXN0IC1uICIkdW5zdGFzaGVkX2luZGV4X3RyZWUiCkBAIC0yMDcsNyArMzAyLDEyIEBACiAJCQkJZGllICJDYW5ub3QgdW5zdGFnZSBtb2RpZmllZCBmaWxlcyIKIAkJCXJtIC1mICIkYSIKIAkJZmkKLQkJZ2l0IHN0YXR1cyB8fCA6CisJCXNxdWVsY2g9CisJCWlmIHRlc3QgLW4gIiRHSVRfUVVJRVQiCisJCXRoZW4KKwkJCXNxdWVsY2g9Jz4vZGV2L251bGwgMj4mMScKKwkJZmkKKwkJZXZhbCAiZ2l0IHN0YXR1cyAkc3F1ZWxjaCIgfHwgOgogCWVsc2UKIAkJIyBNZXJnZSBjb25mbGljdDsga2VlcCB0aGUgZXhpdCBzdGF0dXMgZnJvbSBtZXJnZS1yZWN1cnNpdmUKIAkJc3RhdHVzPSQ/CkBAIC0yMjIsNiArMzIyLDE5IEBACiBkcm9wX3N0YXNoICgpIHsKIAloYXZlX3N0YXNoIHx8IGRpZSAnTm8gc3Rhc2ggZW50cmllcyB0byBkcm9wJwogCisJd2hpbGUgdGVzdCAkIyAhPSAwCisJZG8KKwkJY2FzZSAiJDEiIGluCisJCS1xfC0tcXVpZXQpCisJCQlHSVRfUVVJRVQ9dAorCQkJOzsKKwkJKikKKwkJCWJyZWFrCisJCQk7OworCQllc2FjCisJCXNoaWZ0CisJZG9uZQorCiAJaWYgdGVzdCAkIyA9IDAKIAl0aGVuCiAJCXNldCB4ICIkcmVmX3N0YXNoQHswfSIKQEAgLTIzNSw3ICszNDgsNyBAQAogCQlkaWUgIiQqOiBub3QgYSB2YWxpZCBzdGFzaGVkIHN0YXRlIgogCiAJZ2l0IHJlZmxvZyBkZWxldGUgLS11cGRhdGVyZWYgLS1yZXdyaXRlICIkQCIgJiYKLQkJZWNobyAiRHJvcHBlZCAkKiAoJHMpIiB8fCBkaWUgIiQqOiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKKwkJc2F5ICJEcm9wcGVkICQqICgkcykiIHx8IGRpZSAiJCo6IENvdWxkIG5vdCBkcm9wIHN0YXNoIGVudHJ5IgogCiAJIyBjbGVhcl9zdGFzaCBpZiB3ZSBqdXN0IGRyb3BwZWQgdGhlIGxhc3Qgc3Rhc2ggZW50cnkKIAlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkcmVmX3N0YXNoQHswfSIgPiAvZGV2L251bGwgMj4mMSB8fCBjbGVhcl9zdGFzaApAQCAtMjUzLDIwICszNjYsMjcgQEAKIAlmaQogCXN0YXNoPSQyCiAKLQlnaXQtY2hlY2tvdXQgLWIgJGJyYW5jaCAkc3Rhc2heICYmCisJZ2l0IGNoZWNrb3V0IC1iICRicmFuY2ggJHN0YXNoXiAmJgogCWFwcGx5X3N0YXNoIC0taW5kZXggJHN0YXNoICYmCiAJZHJvcF9zdGFzaCAkc3Rhc2gKIH0KIAorIyBUaGUgZGVmYXVsdCBjb21tYW5kIGlzICJzYXZlIiBpZiBub3RoaW5nIGJ1dCBvcHRpb25zIGFyZSBnaXZlbgorc2Vlbl9ub25fb3B0aW9uPQorZm9yIG9wdAorZG8KKwljYXNlICIkb3B0IiBpbgorCS0qKSA7OworCSopIHNlZW5fbm9uX29wdGlvbj10OyBicmVhayA7OworCWVzYWMKK2RvbmUKKwordGVzdCAtbiAiJHNlZW5fbm9uX29wdGlvbiIgfHwgc2V0ICJzYXZlIiAiJEAiCisKICMgTWFpbiBjb21tYW5kIHNldAogY2FzZSAiJDEiIGluCiBsaXN0KQogCXNoaWZ0Ci0JaWYgdGVzdCAkIyA9IDAKLQl0aGVuCi0JCXNldCB4IC1uIDEwCi0JCXNoaWZ0Ci0JZmkKIAlsaXN0X3N0YXNoICIkQCIKIAk7Owogc2hvdykKQEAgLTMwMCw4ICs0MjAsNyBAQAogCXNoaWZ0CiAJaWYgYXBwbHlfc3Rhc2ggIiRAIgogCXRoZW4KLQkJdGVzdCAteiAiJHVuc3Rhc2hfaW5kZXgiIHx8IHNoaWZ0Ci0JCWRyb3Bfc3Rhc2ggIiRAIgorCQlkcm9wX3N0YXNoICIkYXBwbGllZF9zdGFzaCIKIAlmaQogCTs7CiBicmFuY2gpCkBAIC0zMDksMTIgKzQyOCwxMyBAQAogCWFwcGx5X3RvX2JyYW5jaCAiJEAiCiAJOzsKICopCi0JaWYgdGVzdCAkIyAtZXEgMAotCXRoZW4KKwljYXNlICQjIGluCisJMCkKIAkJc2F2ZV9zdGFzaCAmJgotCQllY2hvICcoVG8gcmVzdG9yZSB0aGVtIHR5cGUgImdpdCBzdGFzaCBhcHBseSIpJwotCWVsc2UKKwkJc2F5ICcoVG8gcmVzdG9yZSB0aGVtIHR5cGUgImdpdCBzdGFzaCBhcHBseSIpJworCQk7OworCSopCiAJCXVzYWdlCi0JZmkKKwllc2FjCiAJOzsKIGVzYWMKZGlmZiAtLWdpdCBhL2dpdC1zdWJtb2R1bGUuc2ggYi9naXQtc3VibW9kdWxlLnNoCmluZGV4IDhlMjM0YTQuLmUyMDgyZmQgMTAwNzU1Ci0tLSBhL2dpdC1zdWJtb2R1bGUuc2gKKysrIGIvZ2l0LXN1Ym1vZHVsZS5zaApAQCAtNCw5ICs0LDE0IEBACiAjCiAjIENvcHlyaWdodCAoYykgMjAwNyBMYXJzIEhqZW1saQogCi1VU0FHRT0iWy0tcXVpZXRdIFstLWNhY2hlZF0gXAotW2FkZCBbLWIgYnJhbmNoXSA8cmVwbz4gPHBhdGg+XXxbc3RhdHVzfGluaXR8dXBkYXRlIFstaXwtLWluaXRdIFstTnwtLW5vLWZldGNoXXxzdW1tYXJ5IFstbnwtLXN1bW1hcnktbGltaXQgPG4+XSBbPGNvbW1pdD5dXSBcCi1bLS1dIFs8cGF0aD4uLi5dfFtmb3JlYWNoIDxjb21tYW5kPl18W3N5bmMgWy0tXSBbPHBhdGg+Li4uXV0iCitkYXNobGVzcz0kKGJhc2VuYW1lICIkMCIgfCBzZWQgLWUgJ3MvLS8gLycpCitVU0FHRT0iWy0tcXVpZXRdIGFkZCBbLWIgYnJhbmNoXSBbLS1yZWZlcmVuY2UgPHJlcG9zaXRvcnk+XSBbLS1dIDxyZXBvc2l0b3J5PiBbPHBhdGg+XQorICAgb3I6ICRkYXNobGVzcyBbLS1xdWlldF0gc3RhdHVzIFstLWNhY2hlZF0gWy0tcmVjdXJzaXZlXSBbLS1dIFs8cGF0aD4uLi5dCisgICBvcjogJGRhc2hsZXNzIFstLXF1aWV0XSBpbml0IFstLV0gWzxwYXRoPi4uLl0KKyAgIG9yOiAkZGFzaGxlc3MgWy0tcXVpZXRdIHVwZGF0ZSBbLS1pbml0XSBbLU58LS1uby1mZXRjaF0gWy0tcmViYXNlXSBbLS1yZWZlcmVuY2UgPHJlcG9zaXRvcnk+XSBbLS1tZXJnZV0gWy0tcmVjdXJzaXZlXSBbLS1dIFs8cGF0aD4uLi5dCisgICBvcjogJGRhc2hsZXNzIFstLXF1aWV0XSBzdW1tYXJ5IFstLWNhY2hlZHwtLWZpbGVzXSBbLS1zdW1tYXJ5LWxpbWl0IDxuPl0gW2NvbW1pdF0gWy0tXSBbPHBhdGg+Li4uXQorICAgb3I6ICRkYXNobGVzcyBbLS1xdWlldF0gZm9yZWFjaCBbLS1yZWN1cnNpdmVdIDxjb21tYW5kPgorICAgb3I6ICRkYXNobGVzcyBbLS1xdWlldF0gc3luYyBbLS1dIFs8cGF0aD4uLi5dIgogT1BUSU9OU19TUEVDPQogLiBnaXQtc2gtc2V0dXAKIC4gZ2l0LXBhcnNlLXJlbW90ZQpAQCAtMTQsMjAgKzE5LDEyIEBACiAKIGNvbW1hbmQ9CiBicmFuY2g9Ci1xdWlldD0KK3JlZmVyZW5jZT0KIGNhY2hlZD0KK2ZpbGVzPQogbm9mZXRjaD0KLQotIwotIyBwcmludCBzdHVmZiBvbiBzdGRvdXQgdW5sZXNzIC1xIHdhcyBzcGVjaWZpZWQKLSMKLXNheSgpCi17Ci0JaWYgdGVzdCAteiAiJHF1aWV0IgotCXRoZW4KLQkJZWNobyAiJEAiCi0JZmkKLX0KK3VwZGF0ZT0KK3ByZWZpeD0KIAogIyBSZXNvbHZlIHJlbGF0aXZlIHVybCBieSBhcHBlbmRpbmcgdG8gcGFyZW50J3MgdXJsCiByZXNvbHZlX3JlbGF0aXZlX3VybCAoKQpAQCAtNjAsNyArNTcsNyBAQAogIwogbW9kdWxlX2xpc3QoKQogewotCWdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggLS1zdGFnZSAtLSAiJEAiIHwgZ3JlcCAnXjE2MDAwMCAnCisJZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCAtLXN0YWdlIC0tICIkQCIgfCBzYW5lX2dyZXAgJ14xNjAwMDAgJwogfQogCiAjCkBAIC05MSw2ICs4OCw3IEBACiB7CiAJcGF0aD0kMQogCXVybD0kMgorCXJlZmVyZW5jZT0iJDMiCiAKIAkjIElmIHRoZXJlIGFscmVhZHkgaXMgYSBkaXJlY3RvcnkgYXQgdGhlIHN1Ym1vZHVsZSBwYXRoLAogCSMgZXhwZWN0IGl0IHRvIGJlIGVtcHR5IChzaW5jZSB0aGF0IGlzIHRoZSBkZWZhdWx0IGNoZWNrb3V0CkBAIC0xMDAsMTMgKzk4LDE4IEBACiAJaWYgdGVzdCAtZCAiJHBhdGgiCiAJdGhlbgogCQlybWRpciAiJHBhdGgiIDI+L2Rldi9udWxsIHx8Ci0JCWRpZSAiRGlyZWN0b3J5ICckcGF0aCcgZXhpc3QsIGJ1dCBpcyBuZWl0aGVyIGVtcHR5IG5vciBhIGdpdCByZXBvc2l0b3J5IgorCQlkaWUgIkRpcmVjdG9yeSAnJHBhdGgnIGV4aXN0cywgYnV0IGlzIG5laXRoZXIgZW1wdHkgbm9yIGEgZ2l0IHJlcG9zaXRvcnkiCiAJZmkKIAogCXRlc3QgLWUgIiRwYXRoIiAmJgogCWRpZSAiQSBmaWxlIGFscmVhZHkgZXhpc3QgYXQgcGF0aCAnJHBhdGgnIgogCi0JZ2l0LWNsb25lIC1uICIkdXJsIiAiJHBhdGgiIHx8CisJaWYgdGVzdCAtbiAiJHJlZmVyZW5jZSIKKwl0aGVuCisJCWdpdC1jbG9uZSAiJHJlZmVyZW5jZSIgLW4gIiR1cmwiICIkcGF0aCIKKwllbHNlCisJCWdpdC1jbG9uZSAtbiAiJHVybCIgIiRwYXRoIgorCWZpIHx8CiAJZGllICJDbG9uZSBvZiAnJHVybCcgaW50byBzdWJtb2R1bGUgcGF0aCAnJHBhdGgnIGZhaWxlZCIKIH0KIApAQCAtMTI5LDcgKzEzMiwxNiBAQAogCQkJc2hpZnQKIAkJCTs7CiAJCS1xfC0tcXVpZXQpCi0JCQlxdWlldD0xCisJCQlHSVRfUVVJRVQ9MQorCQkJOzsKKwkJLS1yZWZlcmVuY2UpCisJCQljYXNlICIkMiIgaW4gJycpIHVzYWdlIDs7IGVzYWMKKwkJCXJlZmVyZW5jZT0iLS1yZWZlcmVuY2U9JDIiCisJCQlzaGlmdAorCQkJOzsKKwkJLS1yZWZlcmVuY2U9KikKKwkJCXJlZmVyZW5jZT0iJDEiCisJCQlzaGlmdAogCQkJOzsKIAkJLS0pCiAJCQlzaGlmdApAQCAtMTQ4LDYgKzE2MCwxMSBAQAogCXJlcG89JDEKIAlwYXRoPSQyCiAKKwlpZiB0ZXN0IC16ICIkcGF0aCI7IHRoZW4KKwkJcGF0aD0kKGVjaG8gIiRyZXBvIiB8CisJCQlzZWQgLWUgJ3N8LyR8fCcgLWUgJ3N8OiovKlwuZ2l0JHx8JyAtZSAnc3wuKlsvOl18fGcnKQorCWZpCisKIAlpZiB0ZXN0IC16ICIkcmVwbyIgLW8gLXogIiRwYXRoIjsgdGhlbgogCQl1c2FnZQogCWZpCkBAIC0yMDMsOSArMjIwLDkgQEAKIAkJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuIiRwYXRoIi51cmwgIiR1cmwiCiAJZWxzZQogCi0JCW1vZHVsZV9jbG9uZSAiJHBhdGgiICIkcmVhbHJlcG8iIHx8IGV4aXQKKwkJbW9kdWxlX2Nsb25lICIkcGF0aCIgIiRyZWFscmVwbyIgIiRyZWZlcmVuY2UiIHx8IGV4aXQKIAkJKAotCQkJdW5zZXQgR0lUX0RJUgorCQkJY2xlYXJfbG9jYWxfZ2l0X2VudgogCQkJY2QgIiRwYXRoIiAmJgogCQkJIyBhc2ggZmFpbHMgdG8gd29yZHNwbGl0ICR7YnJhbmNoOistYiAiJGJyYW5jaCIuLi59CiAJCQljYXNlICIkYnJhbmNoIiBpbgpAQCAtMjMyLDEzICsyNDksNDMgQEAKICMKIGNtZF9mb3JlYWNoKCkKIHsKKwkjIHBhcnNlICRhcmdzIGFmdGVyICJzdWJtb2R1bGUgLi4uIGZvcmVhY2giLgorCXdoaWxlIHRlc3QgJCMgLW5lIDAKKwlkbworCQljYXNlICIkMSIgaW4KKwkJLXF8LS1xdWlldCkKKwkJCUdJVF9RVUlFVD0xCisJCQk7OworCQktLXJlY3Vyc2l2ZSkKKwkJCXJlY3Vyc2l2ZT0xCisJCQk7OworCQktKikKKwkJCXVzYWdlCisJCQk7OworCQkqKQorCQkJYnJlYWsKKwkJCTs7CisJCWVzYWMKKwkJc2hpZnQKKwlkb25lCisKIAltb2R1bGVfbGlzdCB8CiAJd2hpbGUgcmVhZCBtb2RlIHNoYTEgc3RhZ2UgcGF0aAogCWRvCiAJCWlmIHRlc3QgLWUgIiRwYXRoIi8uZ2l0CiAJCXRoZW4KLQkJCXNheSAiRW50ZXJpbmcgJyRwYXRoJyIKLQkJCShjZCAiJHBhdGgiICYmIGV2YWwgIiRAIikgfHwKKwkJCXNheSAiRW50ZXJpbmcgJyRwcmVmaXgkcGF0aCciCisJCQluYW1lPSQobW9kdWxlX25hbWUgIiRwYXRoIikKKwkJCSgKKwkJCQlwcmVmaXg9IiRwcmVmaXgkcGF0aC8iCisJCQkJY2xlYXJfbG9jYWxfZ2l0X2VudgorCQkJCWNkICIkcGF0aCIgJiYKKwkJCQlldmFsICIkQCIgJiYKKwkJCQlpZiB0ZXN0IC1uICIkcmVjdXJzaXZlIgorCQkJCXRoZW4KKwkJCQkJY21kX2ZvcmVhY2ggIi0tcmVjdXJzaXZlIiAiJEAiCisJCQkJZmkKKwkJCSkgfHwKIAkJCWRpZSAiU3RvcHBpbmcgYXQgJyRwYXRoJzsgc2NyaXB0IHJldHVybmVkIG5vbi16ZXJvIHN0YXR1cy4iCiAJCWZpCiAJZG9uZQpAQCAtMjU2LDcgKzMwMyw3IEBACiAJZG8KIAkJY2FzZSAiJDEiIGluCiAJCS1xfC0tcXVpZXQpCi0JCQlxdWlldD0xCisJCQlHSVRfUVVJRVQ9MQogCQkJOzsKIAkJLS0pCiAJCQlzaGlmdApAQCAtMjk0LDYgKzM0MSwxMSBAQAogCQlnaXQgY29uZmlnIHN1Ym1vZHVsZS4iJG5hbWUiLnVybCAiJHVybCIgfHwKIAkJZGllICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXJsIGZvciBzdWJtb2R1bGUgcGF0aCAnJHBhdGgnIgogCisJCXVwZD0iJChnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS4iJG5hbWUiLnVwZGF0ZSkiCisJCXRlc3QgLXogIiR1cGQiIHx8CisJCWdpdCBjb25maWcgc3VibW9kdWxlLiIkbmFtZSIudXBkYXRlICIkdXBkIiB8fAorCQlkaWUgIkZhaWxlZCB0byByZWdpc3RlciB1cGRhdGUgbW9kZSBmb3Igc3VibW9kdWxlIHBhdGggJyRwYXRoJyIKKwogCQlzYXkgIlN1Ym1vZHVsZSAnJG5hbWUnICgkdXJsKSByZWdpc3RlcmVkIGZvciBwYXRoICckcGF0aCciCiAJZG9uZQogfQpAQCAtMzA2LDIxICszNTgsNDMgQEAKIGNtZF91cGRhdGUoKQogewogCSMgcGFyc2UgJGFyZ3MgYWZ0ZXIgInN1Ym1vZHVsZSAuLi4gdXBkYXRlIi4KKwlvcmlnX2FyZ3M9IiRAIgogCXdoaWxlIHRlc3QgJCMgLW5lIDAKIAlkbwogCQljYXNlICIkMSIgaW4KIAkJLXF8LS1xdWlldCkKIAkJCXNoaWZ0Ci0JCQlxdWlldD0xCisJCQlHSVRfUVVJRVQ9MQogCQkJOzsKIAkJLWl8LS1pbml0KQorCQkJaW5pdD0xCiAJCQlzaGlmdAotCQkJY21kX2luaXQgIiRAIiB8fCByZXR1cm4KIAkJCTs7CiAJCS1OfC0tbm8tZmV0Y2gpCiAJCQlzaGlmdAogCQkJbm9mZXRjaD0xCiAJCQk7OworCQktcnwtLXJlYmFzZSkKKwkJCXNoaWZ0CisJCQl1cGRhdGU9InJlYmFzZSIKKwkJCTs7CisJCS0tcmVmZXJlbmNlKQorCQkJY2FzZSAiJDIiIGluICcnKSB1c2FnZSA7OyBlc2FjCisJCQlyZWZlcmVuY2U9Ii0tcmVmZXJlbmNlPSQyIgorCQkJc2hpZnQgMgorCQkJOzsKKwkJLS1yZWZlcmVuY2U9KikKKwkJCXJlZmVyZW5jZT0iJDEiCisJCQlzaGlmdAorCQkJOzsKKwkJLW18LS1tZXJnZSkKKwkJCXNoaWZ0CisJCQl1cGRhdGU9Im1lcmdlIgorCQkJOzsKKwkJLS1yZWN1cnNpdmUpCisJCQlzaGlmdAorCQkJcmVjdXJzaXZlPTEKKwkJCTs7CiAJCS0tKQogCQkJc2hpZnQKIAkJCWJyZWFrCkBAIC0zMzQsMTEgKzQwOCwxNyBAQAogCQllc2FjCiAJZG9uZQogCisJaWYgdGVzdCAtbiAiJGluaXQiCisJdGhlbgorCQljbWRfaW5pdCAiLS0iICIkQCIgfHwgcmV0dXJuCisJZmkKKwogCW1vZHVsZV9saXN0ICIkQCIgfAogCXdoaWxlIHJlYWQgbW9kZSBzaGExIHN0YWdlIHBhdGgKIAlkbwogCQluYW1lPSQobW9kdWxlX25hbWUgIiRwYXRoIikgfHwgZXhpdAogCQl1cmw9JChnaXQgY29uZmlnIHN1Ym1vZHVsZS4iJG5hbWUiLnVybCkKKwkJdXBkYXRlX21vZHVsZT0kKGdpdCBjb25maWcgc3VibW9kdWxlLiIkbmFtZSIudXBkYXRlKQogCQlpZiB0ZXN0IC16ICIkdXJsIgogCQl0aGVuCiAJCQkjIE9ubHkgbWVudGlvbiB1bmluaXRpYWxpemVkIHN1Ym1vZHVsZXMgd2hlbiBpdHMKQEAgLTM1MSwxNCArNDMxLDE5IEBACiAKIAkJaWYgISB0ZXN0IC1kICIkcGF0aCIvLmdpdCAtbyAtZiAiJHBhdGgiLy5naXQKIAkJdGhlbgotCQkJbW9kdWxlX2Nsb25lICIkcGF0aCIgIiR1cmwiIHx8IGV4aXQKKwkJCW1vZHVsZV9jbG9uZSAiJHBhdGgiICIkdXJsIiAiJHJlZmVyZW5jZSJ8fCBleGl0CiAJCQlzdWJzaGExPQogCQllbHNlCi0JCQlzdWJzaGExPSQodW5zZXQgR0lUX0RJUjsgY2QgIiRwYXRoIiAmJgorCQkJc3Vic2hhMT0kKGNsZWFyX2xvY2FsX2dpdF9lbnY7IGNkICIkcGF0aCIgJiYKIAkJCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIHx8CiAJCQlkaWUgIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggJyRwYXRoJyIKIAkJZmkKIAorCQlpZiAhIHRlc3QgLXogIiR1cGRhdGUiCisJCXRoZW4KKwkJCXVwZGF0ZV9tb2R1bGU9JHVwZGF0ZQorCQlmaQorCiAJCWlmIHRlc3QgIiRzdWJzaGExIiAhPSAiJHNoYTEiCiAJCXRoZW4KIAkJCWZvcmNlPQpAQCAtMzY5LDIzICs0NTQsNDUgQEAKIAogCQkJaWYgdGVzdCAteiAiJG5vZmV0Y2giCiAJCQl0aGVuCi0JCQkJKHVuc2V0IEdJVF9ESVI7IGNkICIkcGF0aCIgJiYKKwkJCQkoY2xlYXJfbG9jYWxfZ2l0X2VudjsgY2QgIiRwYXRoIiAmJgogCQkJCQlnaXQtZmV0Y2gpIHx8CiAJCQkJZGllICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRwYXRoJyIKIAkJCWZpCiAKLQkJCSh1bnNldCBHSVRfRElSOyBjZCAiJHBhdGgiICYmCi0JCQkJICBnaXQtY2hlY2tvdXQgJGZvcmNlIC1xICIkc2hhMSIpIHx8Ci0JCQlkaWUgIlVuYWJsZSB0byBjaGVja291dCAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckcGF0aCciCisJCQljYXNlICIkdXBkYXRlX21vZHVsZSIgaW4KKwkJCXJlYmFzZSkKKwkJCQljb21tYW5kPSJnaXQgcmViYXNlIgorCQkJCWFjdGlvbj0icmViYXNlIgorCQkJCW1zZz0icmViYXNlZCBvbnRvIgorCQkJCTs7CisJCQltZXJnZSkKKwkJCQljb21tYW5kPSJnaXQgbWVyZ2UiCisJCQkJYWN0aW9uPSJtZXJnZSIKKwkJCQltc2c9Im1lcmdlZCBpbiIKKwkJCQk7OworCQkJKikKKwkJCQljb21tYW5kPSJnaXQgY2hlY2tvdXQgJGZvcmNlIC1xIgorCQkJCWFjdGlvbj0iY2hlY2tvdXQiCisJCQkJbXNnPSJjaGVja2VkIG91dCIKKwkJCQk7OworCQkJZXNhYwogCi0JCQlzYXkgIlN1Ym1vZHVsZSBwYXRoICckcGF0aCc6IGNoZWNrZWQgb3V0ICckc2hhMSciCisJCQkoY2xlYXJfbG9jYWxfZ2l0X2VudjsgY2QgIiRwYXRoIiAmJiAkY29tbWFuZCAiJHNoYTEiKSB8fAorCQkJZGllICJVbmFibGUgdG8gJGFjdGlvbiAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckcGF0aCciCisJCQlzYXkgIlN1Ym1vZHVsZSBwYXRoICckcGF0aCc6ICRtc2cgJyRzaGExJyIKKwkJZmkKKworCQlpZiB0ZXN0IC1uICIkcmVjdXJzaXZlIgorCQl0aGVuCisJCQkoY2xlYXJfbG9jYWxfZ2l0X2VudjsgY2QgIiRwYXRoIiAmJiBjbWRfdXBkYXRlICRvcmlnX2FyZ3MpIHx8CisJCQlkaWUgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRwYXRoJyIKIAkJZmkKIAlkb25lCiB9CiAKIHNldF9uYW1lX3JldiAoKSB7CiAJcmV2bmFtZT0kKCAoCi0JCXVuc2V0IEdJVF9ESVIKKwkJY2xlYXJfbG9jYWxfZ2l0X2VudgogCQljZCAiJDEiICYmIHsKIAkJCWdpdCBkZXNjcmliZSAiJDIiIDI+L2Rldi9udWxsIHx8CiAJCQlnaXQgZGVzY3JpYmUgLS10YWdzICIkMiIgMj4vZGV2L251bGwgfHwKQEAgLTQwNiw2ICs1MTMsNyBAQAogY21kX3N1bW1hcnkoKSB7CiAJc3VtbWFyeV9saW1pdD0tMQogCWZvcl9zdGF0dXM9CisJZGlmZl9jbWQ9ZGlmZi1pbmRleAogCiAJIyBwYXJzZSAkYXJncyBhZnRlciAic3VibW9kdWxlIC4uLiBzdW1tYXJ5Ii4KIAl3aGlsZSB0ZXN0ICQjIC1uZSAwCkBAIC00MTQsNiArNTIyLDkgQEAKIAkJLS1jYWNoZWQpCiAJCQljYWNoZWQ9IiQxIgogCQkJOzsKKwkJLS1maWxlcykKKwkJCWZpbGVzPSIkMSIKKwkJCTs7CiAJCS0tZm9yLXN0YXR1cykKIAkJCWZvcl9zdGF0dXM9IiQxIgogCQkJOzsKQEAgLTQ1MCwxMCArNTYxLDE4IEBACiAJCWhlYWQ9SEVBRAogCWZpCiAKKwlpZiBbIC1uICIkZmlsZXMiIF0KKwl0aGVuCisJCXRlc3QgLW4gIiRjYWNoZWQiICYmCisJCWRpZSAiLS1jYWNoZWQgY2Fubm90IGJlIHVzZWQgd2l0aCAtLWZpbGVzIgorCQlkaWZmX2NtZD1kaWZmLWZpbGVzCisJCWhlYWQ9CisJZmkKKwogCWNkX3RvX3RvcGxldmVsCiAJIyBHZXQgbW9kaWZpZWQgbW9kdWxlcyBjYXJlZCBieSB1c2VyCi0JbW9kdWxlcz0kKGdpdCBkaWZmLWluZGV4ICRjYWNoZWQgLS1yYXcgJGhlYWQgLS0gIiRAIiB8Ci0JCWVncmVwICdeOihbMC03XSogKT8xNjAwMDAnIHwKKwltb2R1bGVzPSQoZ2l0ICRkaWZmX2NtZCAkY2FjaGVkIC0tcmF3ICRoZWFkIC0tICIkQCIgfAorCQlzYW5lX2VncmVwICdeOihbMC03XSogKT8xNjAwMDAnIHwKIAkJd2hpbGUgcmVhZCBtb2Rfc3JjIG1vZF9kc3Qgc2hhMV9zcmMgc2hhMV9kc3Qgc3RhdHVzIG5hbWUKIAkJZG8KIAkJCSMgQWx3YXlzIHNob3cgbW9kdWxlcyBkZWxldGVkIG9yIHR5cGUtY2hhbmdlZCAoYmxvYjwtPm1vZHVsZSkKQEAgLTQ2Niw4ICs1ODUsOCBAQAogCiAJdGVzdCAteiAiJG1vZHVsZXMiICYmIHJldHVybgogCi0JZ2l0IGRpZmYtaW5kZXggJGNhY2hlZCAtLXJhdyAkaGVhZCAtLSAkbW9kdWxlcyB8Ci0JZWdyZXAgJ146KFswLTddKiApPzE2MDAwMCcgfAorCWdpdCAkZGlmZl9jbWQgJGNhY2hlZCAtLXJhdyAkaGVhZCAtLSAkbW9kdWxlcyB8CisJc2FuZV9lZ3JlcCAnXjooWzAtN10qICk/MTYwMDAwJyB8CiAJY3V0IC1jMi0gfAogCXdoaWxlIHJlYWQgbW9kX3NyYyBtb2RfZHN0IHNoYTFfc3JjIHNoYTFfZHN0IHN0YXR1cyBuYW1lCiAJZG8KQEAgLTU2OSw3ICs2ODgsMTEgQEAKIAkJZWNobwogCWRvbmUgfAogCWlmIHRlc3QgLW4gIiRmb3Jfc3RhdHVzIjsgdGhlbgotCQllY2hvICIjIE1vZGlmaWVkIHN1Ym1vZHVsZXM6IgorCQlpZiBbIC1uICIkZmlsZXMiIF07IHRoZW4KKwkJCWVjaG8gIiMgU3VibW9kdWxlcyBjaGFuZ2VkIGJ1dCBub3QgdXBkYXRlZDoiCisJCWVsc2UKKwkJCWVjaG8gIiMgU3VibW9kdWxlIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKKwkJZmkKIAkJZWNobyAiIyIKIAkJc2VkIC1lICdzfF58IyB8JyAtZSAnc3xeIyAkfCN8JwogCWVsc2UKQEAgLTU4OSwxNSArNzEyLDE5IEBACiBjbWRfc3RhdHVzKCkKIHsKIAkjIHBhcnNlICRhcmdzIGFmdGVyICJzdWJtb2R1bGUgLi4uIHN0YXR1cyIuCisJb3JpZ19hcmdzPSIkQCIKIAl3aGlsZSB0ZXN0ICQjIC1uZSAwCiAJZG8KIAkJY2FzZSAiJDEiIGluCiAJCS1xfC0tcXVpZXQpCi0JCQlxdWlldD0xCisJCQlHSVRfUVVJRVQ9MQogCQkJOzsKIAkJLS1jYWNoZWQpCiAJCQljYWNoZWQ9MQogCQkJOzsKKwkJLS1yZWN1cnNpdmUpCisJCQlyZWN1cnNpdmU9MQorCQkJOzsKIAkJLS0pCiAJCQlzaGlmdAogCQkJYnJlYWsKQEAgLTYxNywyMiArNzQ0LDM0IEBACiAJZG8KIAkJbmFtZT0kKG1vZHVsZV9uYW1lICIkcGF0aCIpIHx8IGV4aXQKIAkJdXJsPSQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuIiRuYW1lIi51cmwpCisJCWRpc3BsYXlwYXRoPSIkcHJlZml4JHBhdGgiCiAJCWlmIHRlc3QgLXogIiR1cmwiIHx8ICEgdGVzdCAtZCAiJHBhdGgiLy5naXQgLW8gLWYgIiRwYXRoIi8uZ2l0CiAJCXRoZW4KLQkJCXNheSAiLSRzaGExICRwYXRoIgorCQkJc2F5ICItJHNoYTEgJGRpc3BsYXlwYXRoIgogCQkJY29udGludWU7CiAJCWZpCiAJCXNldF9uYW1lX3JldiAiJHBhdGgiICIkc2hhMSIKIAkJaWYgZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAtLSAiJHBhdGgiCiAJCXRoZW4KLQkJCXNheSAiICRzaGExICRwYXRoJHJldm5hbWUiCisJCQlzYXkgIiAkc2hhMSAkZGlzcGxheXBhdGgkcmV2bmFtZSIKIAkJZWxzZQogCQkJaWYgdGVzdCAteiAiJGNhY2hlZCIKIAkJCXRoZW4KLQkJCQlzaGExPSQodW5zZXQgR0lUX0RJUjsgY2QgIiRwYXRoIiAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpCisJCQkJc2hhMT0kKGNsZWFyX2xvY2FsX2dpdF9lbnY7IGNkICIkcGF0aCIgJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKQogCQkJCXNldF9uYW1lX3JldiAiJHBhdGgiICIkc2hhMSIKIAkJCWZpCi0JCQlzYXkgIiskc2hhMSAkcGF0aCRyZXZuYW1lIgorCQkJc2F5ICIrJHNoYTEgJGRpc3BsYXlwYXRoJHJldm5hbWUiCisJCWZpCisKKwkJaWYgdGVzdCAtbiAiJHJlY3Vyc2l2ZSIKKwkJdGhlbgorCQkJKAorCQkJCXByZWZpeD0iJGRpc3BsYXlwYXRoLyIKKwkJCQljbGVhcl9sb2NhbF9naXRfZW52CisJCQkJY2QgIiRwYXRoIiAmJgorCQkJCWNtZF9zdGF0dXMgJG9yaWdfYXJncworCQkJKSB8fAorCQkJZGllICJGYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSBwYXRoICckcGF0aCciCiAJCWZpCiAJZG9uZQogfQpAQCAtNjQ3LDcgKzc4Niw3IEBACiAJZG8KIAkJY2FzZSAiJDEiIGluCiAJCS1xfC0tcXVpZXQpCi0JCQlxdWlldD0xCisJCQlHSVRfUVVJRVQ9MQogCQkJc2hpZnQKIAkJCTs7CiAJCS0tKQpAQCAtNjc5LDcgKzgxOCw3IEBACiAJCWlmIHRlc3QgLWUgIiRwYXRoIi8uZ2l0CiAJCXRoZW4KIAkJKAotCQkJdW5zZXQgR0lUX0RJUgorCQkJY2xlYXJfbG9jYWxfZ2l0X2VudgogCQkJY2QgIiRwYXRoIgogCQkJcmVtb3RlPSQoZ2V0X2RlZmF1bHRfcmVtb3RlKQogCQkJc2F5ICJTeW5jaHJvbml6aW5nIHN1Ym1vZHVsZSB1cmwgZm9yICckbmFtZSciCkBAIC03MDIsNyArODQxLDcgQEAKIAkJY29tbWFuZD0kMQogCQk7OwogCS1xfC0tcXVpZXQpCi0JCXF1aWV0PTEKKwkJR0lUX1FVSUVUPTEKIAkJOzsKIAktYnwtLWJyYW5jaCkKIAkJY2FzZSAiJDIiIGluCmRpZmYgLS1naXQgYS9naXQtc3ZuLnBlcmwgYi9naXQtc3ZuLnBlcmwKaW5kZXggZWYxZDMwZC4uNDczYTBiOSAxMDA3NTUKLS0tIGEvZ2l0LXN2bi5wZXJsCisrKyBiL2dpdC1zdm4ucGVybApAQCAtNSw3ICs1LDcgQEAKIHVzZSBzdHJpY3Q7CiB1c2UgdmFycyBxdy8JJEFVVEhPUiAkVkVSU0lPTgogCQkkc2hhMSAkc2hhMV9zaG9ydCAkX3JldmlzaW9uICRfcmVwb3NpdG9yeQotCQkkX3EgJF9hdXRob3JzICV1c2Vycy87CisJCSRfcSAkX2F1dGhvcnMgJF9hdXRob3JzX3Byb2cgJXVzZXJzLzsKICRBVVRIT1IgPSAnRXJpYyBXb25nIDxub3JtYWxwZXJzb25AeWhidC5uZXQ+JzsKICRWRVJTSU9OID0gJ0BAR0lUX1ZFUlNJT05AQCc7CiAKQEAgLTE5LDYgKzE5LDE3IEBACiAkR2l0OjpTVk46OmRlZmF1bHRfcmVwb19pZCA9ICdzdm4nOwogJEdpdDo6U1ZOOjpkZWZhdWx0X3JlZl9pZCA9ICRFTlZ7R0lUX1NWTl9JRH0gfHwgJ2dpdC1zdm4nOwogJEdpdDo6U1ZOOjpSYTo6X2xvZ193aW5kb3dfc2l6ZSA9IDEwMDsKKyRHaXQ6OlNWTjo6X21pbmltaXplX3VybCA9ICd1bnNldCc7CisKK2lmICghIGV4aXN0cyAkRU5We1NWTl9TU0h9KSB7CisJaWYgKGV4aXN0cyAkRU5We0dJVF9TU0h9KSB7CisJCSRFTlZ7U1ZOX1NTSH0gPSAkRU5We0dJVF9TU0h9OworCQlpZiAoJF5PIGVxICdtc3lzJykgeworCQkJJEVOVntTVk5fU1NIfSA9fiBzL1xcL1xcXFwvZzsKKwkJCSRFTlZ7U1ZOX1NTSH0gPX4gcy8oLiopLyIkMSIvOworCQl9CisJfQorfQogCiAkR2l0OjpTVk46OkxvZzo6VFogPSAkRU5We1RafTsKICRFTlZ7VFp9ID0gJ1VUQyc7CkBAIC0zMSw2ICs0Miw3IEBACiBpZiAoJFNWTjo6Q29yZTo6VkVSU0lPTiBsdCAnMS4xLjAnKSB7CiAJZmF0YWwgIk5lZWQgU1ZOOjpDb3JlIDEuMS4wIG9yIGJldHRlciAoZ290ICRTVk46OkNvcmU6OlZFUlNJT04pIjsKIH0KK215ICRjYW5fY29tcHJlc3MgPSBldmFsIHsgcmVxdWlyZSBDb21wcmVzczo6WmxpYjsgMX07CiBwdXNoIEBHaXQ6OlNWTjo6UmE6OklTQSwgJ1NWTjo6UmEnOwogcHVzaCBAU1ZOOjpHaXQ6OkVkaXRvcjo6SVNBLCAnU1ZOOjpEZWx0YTo6RWRpdG9yJzsKIHB1c2ggQFNWTjo6R2l0OjpGZXRjaGVyOjpJU0EsICdTVk46OkRlbHRhOjpFZGl0b3InOwpAQCAtMzksNiArNTEsOCBAQAogdXNlIElPOjpGaWxlIHF3Ly87CiB1c2UgRmlsZTo6QmFzZW5hbWUgcXcvZGlybmFtZSBiYXNlbmFtZS87CiB1c2UgRmlsZTo6UGF0aCBxdy9ta3BhdGgvOwordXNlIEZpbGU6OlNwZWM7Cit1c2UgRmlsZTo6RmluZDsKIHVzZSBHZXRvcHQ6OkxvbmcgcXcvOmNvbmZpZyBnbnVfZ2V0b3B0IG5vX2lnbm9yZV9jYXNlIGF1dG9fYWJicmV2LzsKIHVzZSBJUEM6Ok9wZW4zOwogdXNlIEdpdDsKQEAgLTYyLDcgKzc2LDcgQEAKICRzaGExID0gcXIvW2EtZlxkXXs0MH0vOwogJHNoYTFfc2hvcnQgPSBxci9bYS1mXGRdezQsNDB9LzsKIG15ICgkX3N0ZGluLCAkX2hlbHAsICRfZWRpdCwKLQkkX21lc3NhZ2UsICRfZmlsZSwKKwkkX21lc3NhZ2UsICRfZmlsZSwgJF9icmFuY2hfZGVzdCwKIAkkX3RlbXBsYXRlLCAkX3NoYXJlZCwKIAkkX3ZlcnNpb24sICRfZmV0Y2hfYWxsLCAkX25vX3JlYmFzZSwgJF9mZXRjaF9wYXJlbnQsCiAJJF9tZXJnZSwgJF9zdHJhdGVneSwgJF9kcnlfcnVuLCAkX2xvY2FsLApAQCAtNzYsNiArOTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAnaWdub3JlLXBhdGhzPXMnID0+IFwkU1ZOOjpHaXQ6OkZldGNoZXI6Ol9pZ25vcmVfcmVnZXggKTsKIG15ICVmY19vcHRzID0gKCAnZm9sbG93LXBhcmVudHxmb2xsb3chJyA9PiBcJEdpdDo6U1ZOOjpfZm9sbG93X3BhcmVudCwKIAkJJ2F1dGhvcnMtZmlsZXxBPXMnID0+IFwkX2F1dGhvcnMsCisJCSdhdXRob3JzLXByb2c9cycgPT4gXCRfYXV0aG9yc19wcm9nLAogCQkncmVwYWNrOmknID0+IFwkR2l0OjpTVk46Ol9yZXBhY2ssCiAJCSdub01ldGFkYXRhJyA9PiBcJEdpdDo6U1ZOOjpfbm9fbWV0YWRhdGEsCiAJCSd1c2VTdm1Qcm9wcycgPT4gXCRHaXQ6OlNWTjo6X3VzZV9zdm1fcHJvcHMsCkBAIC05MCwxNyArMTA1LDE4IEBACiAJCSdsb2NhbHRpbWUnID0+IFwkR2l0OjpTVk46Ol9sb2NhbHRpbWUsCiAJCSVyZW1vdGVfb3B0cyApOwogCi1teSAoJF90cnVuaywgJF90YWdzLCAkX2JyYW5jaGVzLCAkX3N0ZGxheW91dCk7CitteSAoJF90cnVuaywgQF90YWdzLCBAX2JyYW5jaGVzLCAkX3N0ZGxheW91dCk7CiBteSAlaWN2OwogbXkgJWluaXRfb3B0cyA9ICggJ3RlbXBsYXRlPXMnID0+IFwkX3RlbXBsYXRlLCAnc2hhcmVkOnMnID0+IFwkX3NoYXJlZCwKLSAgICAgICAgICAgICAgICAgICd0cnVua3xUPXMnID0+IFwkX3RydW5rLCAndGFnc3x0PXMnID0+IFwkX3RhZ3MsCi0gICAgICAgICAgICAgICAgICAnYnJhbmNoZXN8Yj1zJyA9PiBcJF9icmFuY2hlcywgJ3ByZWZpeD1zJyA9PiBcJF9wcmVmaXgsCisgICAgICAgICAgICAgICAgICAndHJ1bmt8VD1zJyA9PiBcJF90cnVuaywgJ3RhZ3N8dD1zQCcgPT4gXEBfdGFncywKKyAgICAgICAgICAgICAgICAgICdicmFuY2hlc3xiPXNAJyA9PiBcQF9icmFuY2hlcywgJ3ByZWZpeD1zJyA9PiBcJF9wcmVmaXgsCiAgICAgICAgICAgICAgICAgICAnc3RkbGF5b3V0fHMnID0+IFwkX3N0ZGxheW91dCwKLSAgICAgICAgICAgICAgICAgICdtaW5pbWl6ZS11cmx8bScgPT4gXCRHaXQ6OlNWTjo6X21pbmltaXplX3VybCwKKyAgICAgICAgICAgICAgICAgICdtaW5pbWl6ZS11cmx8bSEnID0+IFwkR2l0OjpTVk46Ol9taW5pbWl6ZV91cmwsCiAJCSAgJ25vLW1ldGFkYXRhJyA9PiBzdWIgeyAkaWN2e25vTWV0YWRhdGF9ID0gMSB9LAogCQkgICd1c2Utc3ZtLXByb3BzJyA9PiBzdWIgeyAkaWN2e3VzZVN2bVByb3BzfSA9IDEgfSwKIAkJICAndXNlLXN2bnN5bmMtcHJvcHMnID0+IHN1YiB7ICRpY3Z7dXNlU3Zuc3luY1Byb3BzfSA9IDEgfSwKIAkJICAncmV3cml0ZS1yb290PXMnID0+IHN1YiB7ICRpY3Z7cmV3cml0ZVJvb3R9ID0gJF9bMV0gfSwKKwkJICAncmV3cml0ZS11dWlkPXMnID0+IHN1YiB7ICRpY3Z7cmV3cml0ZVVVSUR9ID0gJF9bMV0gfSwKICAgICAgICAgICAgICAgICAgICVyZW1vdGVfb3B0cyApOwogbXkgJWNtdF9vcHRzID0gKCAnZWRpdHxlJyA9PiBcJF9lZGl0LAogCQkncm1kaXInID0+IFwkU1ZOOjpHaXQ6OkVkaXRvcjo6X3JtZGlyLApAQCAtMTM5LDEyICsxNTUsMTggQEAKIAlicmFuY2ggPT4gWyBcJmNtZF9icmFuY2gsCiAJICAgICAgICAgICAgJ0NyZWF0ZSBhIGJyYW5jaCBpbiB0aGUgU1ZOIHJlcG9zaXRvcnknLAogCSAgICAgICAgICAgIHsgJ21lc3NhZ2V8bT1zJyA9PiBcJF9tZXNzYWdlLAorCSAgICAgICAgICAgICAgJ2Rlc3RpbmF0aW9ufGQ9cycgPT4gXCRfYnJhbmNoX2Rlc3QsCiAJICAgICAgICAgICAgICAnZHJ5LXJ1bnxuJyA9PiBcJF9kcnlfcnVuLAotCQkgICAgICAndGFnfHQnID0+IFwkX3RhZyB9IF0sCisJICAgICAgICAgICAgICAndGFnfHQnID0+IFwkX3RhZywKKwkgICAgICAgICAgICAgICd1c2VybmFtZT1zJyA9PiBcJEdpdDo6U1ZOOjpQcm9tcHQ6Ol91c2VybmFtZSwKKwkgICAgICAgICAgICAgICdjb21taXQtdXJsPXMnID0+IFwkX2NvbW1pdF91cmwgfSBdLAogCXRhZyA9PiBbIHN1YiB7ICRfdGFnID0gMTsgY21kX2JyYW5jaChAXykgfSwKIAkgICAgICAgICAnQ3JlYXRlIGEgdGFnIGluIHRoZSBTVk4gcmVwb3NpdG9yeScsCiAJICAgICAgICAgeyAnbWVzc2FnZXxtPXMnID0+IFwkX21lc3NhZ2UsCi0JICAgICAgICAgICAnZHJ5LXJ1bnxuJyA9PiBcJF9kcnlfcnVuIH0gXSwKKwkgICAgICAgICAgICdkZXN0aW5hdGlvbnxkPXMnID0+IFwkX2JyYW5jaF9kZXN0LAorCSAgICAgICAgICAgJ2RyeS1ydW58bicgPT4gXCRfZHJ5X3J1biwKKwkgICAgICAgICAgICd1c2VybmFtZT1zJyA9PiBcJEdpdDo6U1ZOOjpQcm9tcHQ6Ol91c2VybmFtZSwKKwkgICAgICAgICAgICdjb21taXQtdXJsPXMnID0+IFwkX2NvbW1pdF91cmwgfSBdLAogCSdzZXQtdHJlZScgPT4gWyBcJmNtZF9zZXRfdHJlZSwKIAkgICAgICAgICAgICAgICAgIlNldCBhbiBTVk4gcmVwb3NpdG9yeSB0byBhIGdpdCB0cmVlLWlzaCIsCiAJCQl7ICdzdGRpbicgPT4gXCRfc3RkaW4sICVjbXRfb3B0cywgJWZjX29wdHMsIH0gXSwKQEAgLTE1Miw2ICsxNzQsOSBAQAogCQkJICAgICAnQ3JlYXRlIGEgLmdpdGlnbm9yZSBwZXIgc3ZuOmlnbm9yZScsCiAJCQkgICAgIHsgJ3JldmlzaW9ufHI9aScgPT4gXCRfcmV2aXNpb24KIAkJCSAgICAgfSBdLAorCSdta2RpcnMnID0+IFsgXCZjbWRfbWtkaXJzICwKKwkgICAgICAgICAgICAgICJyZWNyZWF0ZSBlbXB0eSBkaXJlY3RvcmllcyBhZnRlciBhIGNoZWNrb3V0IiwKKwkgICAgICAgICAgICAgIHsgJ3JldmlzaW9ufHI9aScgPT4gXCRfcmV2aXNpb24gfSBdLAogICAgICAgICAncHJvcGdldCcgPT4gWyBcJmNtZF9wcm9wZ2V0LAogCQkgICAgICAgJ1ByaW50IHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IG9uIGEgZmlsZSBvciBkaXJlY3RvcnknLAogCQkgICAgICAgeyAncmV2aXNpb258cj1pJyA9PiBcJF9yZXZpc2lvbiB9IF0sCkBAIC0yMDksNiArMjM0LDE0IEBACiAJJ2JsYW1lJyA9PiBbIFwmR2l0OjpTVk46OkxvZzo6Y21kX2JsYW1lLAogCSAgICAgICAgICAgICJTaG93IHdoYXQgcmV2aXNpb24gYW5kIGF1dGhvciBsYXN0IG1vZGlmaWVkIGVhY2ggbGluZSBvZiBhIGZpbGUiLAogCQkgICAgeyAnZ2l0LWZvcm1hdCcgPT4gXCRfZ2l0X2Zvcm1hdCB9IF0sCisJJ3Jlc2V0JyA9PiBbIFwmY21kX3Jlc2V0LAorCQkgICAgICJVbmRvIGZldGNoZXMgYmFjayB0byB0aGUgc3BlY2lmaWVkIFNWTiByZXZpc2lvbiIsCisJCSAgICAgeyAncmV2aXNpb258cj1zJyA9PiBcJF9yZXZpc2lvbiwKKwkJICAgICAgICdwYXJlbnR8cCcgPT4gXCRfZmV0Y2hfcGFyZW50IH0gXSwKKwknZ2MnID0+IFsgXCZjbWRfZ2MsCisJCSAgIkNvbXByZXNzIHVuaGFuZGxlZC5sb2cgZmlsZXMgaW4gLmdpdC9zdm4gYW5kIHJlbW92ZSAiIC4KKwkJICAiaW5kZXggZmlsZXMgaW4gLmdpdC9zdm4iLAorCQl7fSBdLAogKTsKIAogbXkgJGNtZDsKQEAgLTIxNyw2ICsyNTAsOSBAQAogCQkkY21kID0gJEFSR1ZbJGldOwogCQlzcGxpY2UgQEFSR1YsICRpLCAxOwogCQlsYXN0OworCX0gZWxzaWYgKCRBUkdWWyRpXSBlcSAnaGVscCcpIHsKKwkJJGNtZCA9ICRBUkdWWyRpKzFdOworCQl1c2FnZSgwKTsKIAl9CiB9OwogCkBAIC0yNDcsNyArMjgzLDcgQEAKIAogbXkgJW9wdHMgPSAleyRjbWR7JGNtZH0tPlsyXX0gaWYgKGRlZmluZWQgJGNtZCk7CiAKLXJlYWRfcmVwb19jb25maWcoXCVvcHRzKTsKK3JlYWRfZ2l0X2NvbmZpZyhcJW9wdHMpOwogaWYgKCRjbWQgJiYgKCRjbWQgZXEgJ2xvZycgfHwgJGNtZCBlcSAnYmxhbWUnKSkgewogCUdldG9wdDo6TG9uZzo6Q29uZmlndXJlKCdwYXNzX3Rocm91Z2gnKTsKIH0KQEAgLTI2Myw2ICsyOTksOSBAQAogdmVyc2lvbigpIGlmICRfdmVyc2lvbjsKIHVzYWdlKDEpIHVubGVzcyBkZWZpbmVkICRjbWQ7CiBsb2FkX2F1dGhvcnMoKSBpZiAkX2F1dGhvcnM7CitpZiAoZGVmaW5lZCAkX2F1dGhvcnNfcHJvZykgeworCSRfYXV0aG9yc19wcm9nID0gIiciIC4gRmlsZTo6U3BlYy0+cmVsMmFicygkX2F1dGhvcnNfcHJvZykgLiAiJyI7Cit9CiAKIHVubGVzcyAoJGNtZCA9fiAvXig/OmNsb25lfGluaXR8bXVsdGktaW5pdHxjb21taXQtZGlmZikkLykgewogCUdpdDo6U1ZOOjpNaWdyYXRpb246Om1pZ3JhdGlvbl9jaGVjaygpOwpAQCAtMzUzLDMwICszOTIsMzggQEAKIHN1YiBjbWRfY2xvbmUgewogCW15ICgkdXJsLCAkcGF0aCkgPSBAXzsKIAlpZiAoIWRlZmluZWQgJHBhdGggJiYKLQkgICAgKGRlZmluZWQgJF90cnVuayB8fCBkZWZpbmVkICRfYnJhbmNoZXMgfHwgZGVmaW5lZCAkX3RhZ3MgfHwKKwkgICAgKGRlZmluZWQgJF90cnVuayB8fCBAX2JyYW5jaGVzIHx8IEBfdGFncyB8fAogCSAgICAgZGVmaW5lZCAkX3N0ZGxheW91dCkgJiYKIAkgICAgJHVybCAhfiBtI15bYS16XCtdKzovLyMpIHsKIAkJJHBhdGggPSAkdXJsOwogCX0KIAkkcGF0aCA9IGJhc2VuYW1lKCR1cmwpIGlmICFkZWZpbmVkICRwYXRoIHx8ICFsZW5ndGggJHBhdGg7CisJbXkgJGF1dGhvcnNfYWJzb2x1dGUgPSAkX2F1dGhvcnMgPyBGaWxlOjpTcGVjLT5yZWwyYWJzKCRfYXV0aG9ycykgOiAiIjsKIAljbWRfaW5pdCgkdXJsLCAkcGF0aCk7CisJY29tbWFuZF9vbmVsaW5lKCdjb25maWcnLCAnc3ZuLmF1dGhvcnNmaWxlJywgJGF1dGhvcnNfYWJzb2x1dGUpCisJICAgIGlmICRfYXV0aG9yczsKIAlHaXQ6OlNWTjo6ZmV0Y2hfYWxsKCRHaXQ6OlNWTjo6ZGVmYXVsdF9yZXBvX2lkKTsKIH0KIAogc3ViIGNtZF9pbml0IHsKIAlpZiAoZGVmaW5lZCAkX3N0ZGxheW91dCkgewogCQkkX3RydW5rID0gJ3RydW5rJyBpZiAoIWRlZmluZWQgJF90cnVuayk7Ci0JCSRfdGFncyA9ICd0YWdzJyBpZiAoIWRlZmluZWQgJF90YWdzKTsKLQkJJF9icmFuY2hlcyA9ICdicmFuY2hlcycgaWYgKCFkZWZpbmVkICRfYnJhbmNoZXMpOworCQlAX3RhZ3MgPSAndGFncycgaWYgKCEgQF90YWdzKTsKKwkJQF9icmFuY2hlcyA9ICdicmFuY2hlcycgaWYgKCEgQF9icmFuY2hlcyk7CiAJfQotCWlmIChkZWZpbmVkICRfdHJ1bmsgfHwgZGVmaW5lZCAkX2JyYW5jaGVzIHx8IGRlZmluZWQgJF90YWdzKSB7CisJaWYgKGRlZmluZWQgJF90cnVuayB8fCBAX2JyYW5jaGVzIHx8IEBfdGFncykgewogCQlyZXR1cm4gY21kX211bHRpX2luaXQoQF8pOwogCX0KIAlteSAkdXJsID0gc2hpZnQgb3IgZGllICJTVk4gcmVwb3NpdG9yeSBsb2NhdGlvbiByZXF1aXJlZCAiLAogCSAgICAgICAgICAgICAgICAgICAgICAgImFzIGEgY29tbWFuZC1saW5lIGFyZ3VtZW50XG4iOworCSR1cmwgPSBjYW5vbmljYWxpemVfdXJsKCR1cmwpOwogCWluaXRfc3ViZGlyKEBfKTsKIAlkb19naXRfaW5pdF9kYigpOwogCisJaWYgKCRHaXQ6OlNWTjo6X21pbmltaXplX3VybCBlcSAndW5zZXQnKSB7CisJCSRHaXQ6OlNWTjo6X21pbmltaXplX3VybCA9IDA7CisJfQorCiAJR2l0OjpTVk4tPmluaXQoJHVybCk7CiB9CiAKQEAgLTM4OSw2ICs0MzYsNyBAQAogCWlmIChAXyA+IDEpIHsKIAkJZGllICJVc2FnZTogJDAgZmV0Y2ggWy0tYWxsXSBbLS1wYXJlbnRdIFtzdm4tcmVtb3RlXVxuIjsKIAl9CisJJEdpdDo6U1ZOOjpub19yZXVzZV9leGlzdGluZyA9IHVuZGVmOwogCWlmICgkX2ZldGNoX3BhcmVudCkgewogCQlteSAoJHVybCwgJHJldiwgJHV1aWQsICRncykgPSB3b3JraW5nX2hlYWRfaW5mbygnSEVBRCcpOwogCQl1bmxlc3MgKCRncykgewpAQCAtNDQ4LDggKzQ5NiwyMiBAQAogCQknQ2Fubm90IGRjb21taXQgd2l0aCBhIGRpcnR5IGluZGV4LiAgQ29tbWl0IHlvdXIgY2hhbmdlcyBmaXJzdCwgJwogCQkuICJvciBzdGFzaCB0aGVtIHdpdGggYGdpdCBzdGFzaCcuXG4iOwogCSRoZWFkIHx8PSAnSEVBRCc7CisKKwlteSAkb2xkX2hlYWQ7CisJaWYgKCRoZWFkIG5lICdIRUFEJykgeworCQkkb2xkX2hlYWQgPSBldmFsIHsKKwkJCWNvbW1hbmRfb25lbGluZShbcXcvc3ltYm9saWMtcmVmIC1xIEhFQUQvXSkKKwkJfTsKKwkJaWYgKCRvbGRfaGVhZCkgeworCQkJJG9sZF9oZWFkID1+IHN7XnJlZnMvaGVhZHMvfXt9OworCQl9IGVsc2UgeworCQkJJG9sZF9oZWFkID0gZXZhbCB7IGNvbW1hbmRfb25lbGluZShxdy9yZXYtcGFyc2UgSEVBRC8pIH07CisJCX0KKwkJY29tbWFuZChbJ2NoZWNrb3V0JywgJGhlYWRdLCBTVERFUlIgPT4gMCk7CisJfQorCiAJbXkgQHJlZnM7Ci0JbXkgKCR1cmwsICRyZXYsICR1dWlkLCAkZ3MpID0gd29ya2luZ19oZWFkX2luZm8oJGhlYWQsIFxAcmVmcyk7CisJbXkgKCR1cmwsICRyZXYsICR1dWlkLCAkZ3MpID0gd29ya2luZ19oZWFkX2luZm8oJ0hFQUQnLCBcQHJlZnMpOwogCXVubGVzcyAoJGdzKSB7CiAJCWRpZSAiVW5hYmxlIHRvIGRldGVybWluZSB1cHN0cmVhbSBTVk4gaW5mb3JtYXRpb24gZnJvbSAiLAogCQkgICAgIiRoZWFkIGhpc3RvcnkuXG5QZXJoYXBzIHRoZSByZXBvc2l0b3J5IGlzIGVtcHR5LiI7CkBAIC01MzUsNyArNTk3LDcgQEAKIAkJCWlmIChAZGlmZikgewogCQkJCUByZWZzID0gKCk7CiAJCQkJbXkgKCR1cmxfLCAkcmV2XywgJHV1aWRfLCAkZ3NfKSA9Ci0JCQkJICAgICAgICAgICAgICB3b3JraW5nX2hlYWRfaW5mbygkaGVhZCwgXEByZWZzKTsKKwkJCQkgICAgICAgICAgICAgIHdvcmtpbmdfaGVhZF9pbmZvKCdIRUFEJywgXEByZWZzKTsKIAkJCQlteSAoJGxpbmVhcl9yZWZzXywgJHBhcmVudHNfKSA9CiAJCQkJICAgICAgICAgICAgICBsaW5lYXJpemVfaGlzdG9yeSgkZ3NfLCBcQHJlZnMpOwogCQkJCWlmIChzY2FsYXIoQCRsaW5lYXJfcmVmcykgIT0KQEAgLTU1Myw4ICs2MTUsMTUgQEAKIAkJCQkJICAiXG5CZWZvcmUgZGNvbW1pdHRpbmciOwogCQkJCX0KIAkJCQlpZiAoJHVybF8gbmUgJGV4cGVjdF91cmwpIHsKLQkJCQkJZmF0YWwgIlVSTCBtaXNtYXRjaCBhZnRlciByZWJhc2U6ICIsCi0JCQkJCSAgICAgICIkdXJsXyAhPSAkZXhwZWN0X3VybCI7CisJCQkJCWlmICgkdXJsXyBlcSAkZ3MtPm1ldGFkYXRhX3VybCkgeworCQkJCQkJcHJpbnQKKwkJCQkJCSAgIkFjY2VwdGluZyByZXdyaXR0ZW4gVVJMOiIsCisJCQkJCQkgICIgJHVybF9cbiI7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlmYXRhbAorCQkJCQkJICAiVVJMIG1pc21hdGNoIGFmdGVyIHJlYmFzZToiLAorCQkJCQkJICAiICR1cmxfICE9ICRleHBlY3RfdXJsIjsKKwkJCQkJfQogCQkJCX0KIAkJCQlpZiAoJHV1aWRfIG5lICR1dWlkKSB7CiAJCQkJCWZhdGFsICJ1dWlkIG1pc21hdGNoIGFmdGVyIHJlYmFzZTogIiwKQEAgLTU3Myw2ICs2NDIsMjIgQEAKIAkJCX0KIAkJfQogCX0KKworCWlmICgkb2xkX2hlYWQpIHsKKwkJbXkgJG5ld19oZWFkID0gY29tbWFuZF9vbmVsaW5lKHF3L3Jldi1wYXJzZSBIRUFELyk7CisJCW15ICRuZXdfaXNfc3ltYm9saWMgPSBldmFsIHsKKwkJCWNvbW1hbmRfb25lbGluZShxdy9zeW1ib2xpYy1yZWYgLXEgSEVBRC8pOworCQl9OworCQlpZiAoJG5ld19pc19zeW1ib2xpYykgeworCQkJcHJpbnQgImRjb21taXR0ZWQgdGhlIGJyYW5jaCAiLCAkaGVhZCwgIlxuIjsKKwkJfSBlbHNlIHsKKwkJCXByaW50ICJkY29tbWl0dGVkIG9uIGEgZGV0YWNoZWQgSEVBRCBiZWNhdXNlIHlvdSBnYXZlICIsCisJCQkgICAgICAiYSByZXZpc2lvbiBhcmd1bWVudC5cbiIsCisJCQkgICAgICAiVGhlIHJld3JpdHRlbiBjb21taXQgaXM6ICIsICRuZXdfaGVhZCwgIlxuIjsKKwkJfQorCQljb21tYW5kKFsnY2hlY2tvdXQnLCAkb2xkX2hlYWRdLCBTVERFUlIgPT4gMCk7CisJfQorCiAJdW5saW5rICRncy0+e2luZGV4fTsKIH0KIApAQCAtNTg0LDEyICs2NjksNjYgQEAKIAl9CiAJJGhlYWQgfHw9ICdIRUFEJzsKIAotCW15ICgkc3JjLCAkcmV2LCB1bmRlZiwgJGdzKSA9IHdvcmtpbmdfaGVhZF9pbmZvKCRoZWFkKTsKKwlteSAodW5kZWYsICRyZXYsIHVuZGVmLCAkZ3MpID0gd29ya2luZ19oZWFkX2luZm8oJGhlYWQpOworCW15ICRzcmMgPSAkZ3MtPmZ1bGxfdXJsOwogCiAJbXkgJHJlbW90ZSA9IEdpdDo6U1ZOOjpyZWFkX2FsbF9yZW1vdGVzKCktPnskZ3MtPntyZXBvX2lkfX07Ci0JbXkgJGdsb2IgPSAkcmVtb3RlLT57ICRfdGFnID8gJ3RhZ3MnIDogJ2JyYW5jaGVzJyB9OworCW15ICRhbGxnbG9icyA9ICRyZW1vdGUtPnsgJF90YWcgPyAndGFncycgOiAnYnJhbmNoZXMnIH07CisJbXkgJGdsb2I7CisJaWYgKCQjeyRhbGxnbG9ic30gPT0gMCkgeworCQkkZ2xvYiA9ICRhbGxnbG9icy0+WzBdOworCX0gZWxzZSB7CisJCXVubGVzcyhkZWZpbmVkICRfYnJhbmNoX2Rlc3QpIHsKKwkJCWRpZSAiTXVsdGlwbGUgIiwKKwkJCSAgICAkX3RhZyA/ICJ0YWciIDogImJyYW5jaCIsCisJCQkgICAgIiBwYXRocyBkZWZpbmVkIGZvciBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkuXG4iLAorCQkgICAgICAgICAgICAiWW91IG11c3Qgc3BlY2lmeSB3aGVyZSB5b3Ugd2FudCB0byBjcmVhdGUgdGhlICIsCisJCSAgICAgICAgICAgICRfdGFnID8gInRhZyIgOiAiYnJhbmNoIiwKKwkJICAgICAgICAgICAgIiB3aXRoIHRoZSAtLWRlc3RpbmF0aW9uIGFyZ3VtZW50LlxuIjsKKwkJfQorCQlmb3JlYWNoIG15ICRnIChAeyRhbGxnbG9ic30pIHsKKwkJCSMgU1ZOOjpHaXQ6OkVkaXRvciBjb3VsZCBwcm9iYWJseSBiZSBtb3ZlZCB0byBHaXQucG0uLgorCQkJbXkgJHJlID0gU1ZOOjpHaXQ6OkVkaXRvcjo6Z2xvYjJwYXQoJGctPntwYXRofS0+e2xlZnR9KTsKKwkJCWlmICgkX2JyYW5jaF9kZXN0ID1+IC8kcmUvKSB7CisJCQkJJGdsb2IgPSAkZzsKKwkJCQlsYXN0OworCQkJfQorCQl9CisJCXVubGVzcyAoZGVmaW5lZCAkZ2xvYikgeworCQkJbXkgJGRlc3RfcmUgPSBxci9cYlxRJF9icmFuY2hfZGVzdFxFXGIvOworCQkJZm9yZWFjaCBteSAkZyAoQHskYWxsZ2xvYnN9KSB7CisJCQkJJGctPntwYXRofS0+e2xlZnR9ID1+IC8kZGVzdF9yZS8gb3IgbmV4dDsKKwkJCQlpZiAoZGVmaW5lZCAkZ2xvYikgeworCQkJCQlkaWUgIkFtYmlndW91cyBkZXN0aW5hdGlvbjogIiwKKwkJCQkJICAgICRfYnJhbmNoX2Rlc3QsICJcbm1hdGNoZXMgYm90aCAnIiwKKwkJCQkJICAgICRnbG9iLT57cGF0aH0tPntsZWZ0fSwgIicgYW5kICciLAorCQkJCQkgICAgJGctPntwYXRofS0+e2xlZnR9LCAiJ1xuIjsKKwkJCQl9CisJCQkJJGdsb2IgPSAkZzsKKwkJCX0KKwkJCXVubGVzcyAoZGVmaW5lZCAkZ2xvYikgeworCQkJCWRpZSAiVW5rbm93biAiLAorCQkJCSAgICAkX3RhZyA/ICJ0YWciIDogImJyYW5jaCIsCisJCQkJICAgICIgZGVzdGluYXRpb24gJF9icmFuY2hfZGVzdFxuIjsKKwkJCX0KKwkJfQorCX0KIAlteSAoJGxmdCwgJHJndCkgPSBAeyAkZ2xvYi0+e3BhdGh9IH17cXcvbGVmdCByaWdodC99OwotCW15ICRkc3QgPSBqb2luICcvJywgJHJlbW90ZS0+e3VybH0sICRsZnQsICRicmFuY2hfbmFtZSwgKCRyZ3QgfHwgKCkpOworCW15ICR1cmw7CisJaWYgKGRlZmluZWQgJF9jb21taXRfdXJsKSB7CisJCSR1cmwgPSAkX2NvbW1pdF91cmw7CisJfSBlbHNlIHsKKwkJJHVybCA9IGV2YWwgeyBjb21tYW5kX29uZWxpbmUoJ2NvbmZpZycsICctLWdldCcsCisJCQkic3ZuLXJlbW90ZS4kZ3MtPntyZXBvX2lkfS5jb21taXR1cmwiKSB9OworCQlpZiAoISR1cmwpIHsKKwkJCSR1cmwgPSAkcmVtb3RlLT57dXJsfTsKKwkJfQorCX0KKwlteSAkZHN0ID0gam9pbiAnLycsICR1cmwsICRsZnQsICRicmFuY2hfbmFtZSwgKCRyZ3QgfHwgKCkpOworCisJaWYgKCRkc3QgPX4gL15odHRwczovICYmICRzcmMgPX4gL15odHRwOi8pIHsKKwkJJHNyYz1+cy9eaHR0cDovaHR0cHM6LzsKKwl9CiAKIAlteSAkY3R4ID0gU1ZOOjpDbGllbnQtPm5ldygKIAkJYXV0aCAgICA9PiBHaXQ6OlNWTjo6UmE6Ol9hdXRoX3Byb3ZpZGVycygpLApAQCAtNjU3LDYgKzc5Niw3IEBACiAJCSRfZmV0Y2hfYWxsID8gJGdzLT5mZXRjaF9hbGwgOiAkZ3MtPmZldGNoOwogCX0KIAljb21tYW5kX25vaXN5KHJlYmFzZV9jbWQoKSwgJGdzLT5yZWZuYW1lKTsKKwkkZ3MtPm1rZW1wdHlkaXJzOwogfQogCiBzdWIgY21kX3Nob3dfaWdub3JlIHsKQEAgLTY2OCw2ICs4MDgsNyBAQAogCQlwcmludCBTVERPVVQgIlxuIyAkcGF0aFxuIjsKIAkJbXkgJHMgPSAkcHJvcHMtPnsnc3ZuOmlnbm9yZSd9IG9yIHJldHVybjsKIAkJJHMgPX4gcy9bXHJcbl0rL1xuL2c7CisJCSRzID1+IHMvXlxuKy8vOwogCQljaG9tcCAkczsKIAkJJHMgPX4gcyNeIyRwYXRoI2dtOwogCQlwcmludCBTVERPVVQgIiRzXG4iOwpAQCAtNzA1LDYgKzg0Niw3IEBACiAJCW9wZW4oR0lUSUdOT1JFLCAnPicsICRpZ25vcmUpCiAJCSAgb3IgZmF0YWwoIkZhaWxlZCB0byBvcGVuIGAkaWdub3JlJyBmb3Igd3JpdGluZzogJCEiKTsKIAkJJHMgPX4gcy9bXHJcbl0rL1xuL2c7CisJCSRzID1+IHMvXlxuKy8vOwogCQljaG9tcCAkczsKIAkJIyBQcmVmaXggYWxsIHBhdHRlcm5zIHNvIHRoYXQgdGhlIGlnbm9yZSBkb2Vzbid0IGFwcGx5CiAJCSMgdG8gc3ViLWRpcmVjdG9yaWVzLgpAQCAtNzE2LDYgKzg1OCwxMiBAQAogCX0pOwogfQogCitzdWIgY21kX21rZGlycyB7CisJbXkgKCR1cmwsICRyZXYsICR1dWlkLCAkZ3MpID0gd29ya2luZ19oZWFkX2luZm8oJ0hFQUQnKTsKKwkkZ3MgfHw9IEdpdDo6U1ZOLT5uZXc7CisJJGdzLT5ta2VtcHR5ZGlycygkX3JldmlzaW9uKTsKK30KKwogc3ViIGNhbm9uaWNhbGl6ZV9wYXRoIHsKIAlteSAoJHBhdGgpID0gQF87CiAJbXkgJGRvdF9zbGFzaF9hZGRlZCA9IDA7CkBAIC03MzUsNiArODgzLDEyIEBACiAJcmV0dXJuICRwYXRoOwogfQogCitzdWIgY2Fub25pY2FsaXplX3VybCB7CisJbXkgKCR1cmwpID0gQF87CisJJHVybCA9fiBzI14oW146XSs6Ly9bXi9dKi8pKC4qKSQjJDEgLiBjYW5vbmljYWxpemVfcGF0aCgkMikjZTsKKwlyZXR1cm4gJHVybDsKK30KKwogIyBnZXRfc3ZucHJvcHMoUEFUSCkKICMgLS0tLS0tLS0tLS0tLS0tLS0tCiAjIEhlbHBlciBmb3IgY21kX3Byb3BnZXQgYW5kIGNtZF9wcm9wbGlzdCBiZWxvdy4KQEAgLTc5NCwyMiArOTQ4LDE4IEBACiAKIHN1YiBjbWRfbXVsdGlfaW5pdCB7CiAJbXkgJHVybCA9IHNoaWZ0OwotCXVubGVzcyAoZGVmaW5lZCAkX3RydW5rIHx8IGRlZmluZWQgJF9icmFuY2hlcyB8fCBkZWZpbmVkICRfdGFncykgeworCXVubGVzcyAoZGVmaW5lZCAkX3RydW5rIHx8IEBfYnJhbmNoZXMgfHwgQF90YWdzKSB7CiAJCXVzYWdlKDEpOwogCX0KIAotCSMgdGhlcmUgYXJlIGN1cnJlbnRseSBzb21lIGJ1Z3MgdGhhdCBwcmV2ZW50IG11bHRpLWluaXQvbXVsdGktZmV0Y2gKLQkjIHNldHVwcyBmcm9tIHdvcmtpbmcgd2VsbCB3aXRob3V0IHRoaXMuCi0JJEdpdDo6U1ZOOjpfbWluaW1pemVfdXJsID0gMTsKLQogCSRfcHJlZml4ID0gJycgdW5sZXNzIGRlZmluZWQgJF9wcmVmaXg7CiAJaWYgKGRlZmluZWQgJHVybCkgewotCQkkdXJsID1+IHMjLyskIyM7CisJCSR1cmwgPSBjYW5vbmljYWxpemVfdXJsKCR1cmwpOwogCQlpbml0X3N1YmRpcihAXyk7CiAJfQogCWRvX2dpdF9pbml0X2RiKCk7CiAJaWYgKGRlZmluZWQgJF90cnVuaykgewotCQlteSAkdHJ1bmtfcmVmID0gJF9wcmVmaXggLiAndHJ1bmsnOworCQlteSAkdHJ1bmtfcmVmID0gJ3JlZnMvcmVtb3Rlcy8nIC4gJF9wcmVmaXggLiAndHJ1bmsnOwogCQkjIHRyeSBib3RoIG9sZC1zdHlsZSBhbmQgbmV3LXN0eWxlIGxvb2t1cHM6CiAJCW15ICRnc190cnVuayA9IGV2YWwgeyBHaXQ6OlNWTi0+bmV3KCR0cnVua19yZWYpIH07CiAJCXVubGVzcyAoJGdzX3RydW5rKSB7CkBAIC04MTksMTMgKzk2OSwxOCBAQAogCQkJCQkJICAgdW5kZWYsICR0cnVua19yZWYpOwogCQl9CiAJfQotCXJldHVybiB1bmxlc3MgZGVmaW5lZCAkX2JyYW5jaGVzIHx8IGRlZmluZWQgJF90YWdzOworCXJldHVybiB1bmxlc3MgQF9icmFuY2hlcyB8fCBAX3RhZ3M7CiAJbXkgJHJhID0gJHVybCA/IEdpdDo6U1ZOOjpSYS0+bmV3KCR1cmwpIDogdW5kZWY7Ci0JY29tcGxldGVfdXJsX2xzX2luaXQoJHJhLCAkX2JyYW5jaGVzLCAnLS1icmFuY2hlcy8tYicsICRfcHJlZml4KTsKLQljb21wbGV0ZV91cmxfbHNfaW5pdCgkcmEsICRfdGFncywgJy0tdGFncy8tdCcsICRfcHJlZml4IC4gJ3RhZ3MvJyk7CisJZm9yZWFjaCBteSAkcGF0aCAoQF9icmFuY2hlcykgeworCQljb21wbGV0ZV91cmxfbHNfaW5pdCgkcmEsICRwYXRoLCAnLS1icmFuY2hlcy8tYicsICRfcHJlZml4KTsKKwl9CisJZm9yZWFjaCBteSAkcGF0aCAoQF90YWdzKSB7CisJCWNvbXBsZXRlX3VybF9sc19pbml0KCRyYSwgJHBhdGgsICctLXRhZ3MvLXQnLCAkX3ByZWZpeC4ndGFncy8nKTsKKwl9CiB9CiAKIHN1YiBjbWRfbXVsdGlfZmV0Y2ggeworCSRHaXQ6OlNWTjo6bm9fcmV1c2VfZXhpc3RpbmcgPSB1bmRlZjsKIAlteSAkcmVtb3RlcyA9IEdpdDo6U1ZOOjpyZWFkX2FsbF9yZW1vdGVzKCk7CiAJZm9yZWFjaCBteSAkcmVwb19pZCAoc29ydCBrZXlzICUkcmVtb3RlcykgewogCQlpZiAoJHJlbW90ZXMtPnskcmVwb19pZH0tPnt1cmx9KSB7CkBAIC0xMDE1LDYgKzExNzAsMjggQEAKIAlwcmludCAkcmVzdWx0LCAiXG4iOwogfQogCitzdWIgY21kX3Jlc2V0IHsKKwlteSAkdGFyZ2V0ID0gc2hpZnQgfHwgJF9yZXZpc2lvbiBvciBkaWUgIlNWTiByZXZpc2lvbiByZXF1aXJlZFxuIjsKKwkkdGFyZ2V0ID0gJDEgaWYgJHRhcmdldCA9fiAvXnIoXGQrKSQvOworCSR0YXJnZXQgPX4gL15cZCskLyBvciBkaWUgIk51bWVyaWMgU1ZOIHJldmlzaW9uIGV4cGVjdGVkXG4iOworCW15ICgkdXJsLCAkcmV2LCAkdXVpZCwgJGdzKSA9IHdvcmtpbmdfaGVhZF9pbmZvKCdIRUFEJyk7CisJdW5sZXNzICgkZ3MpIHsKKwkJZGllICJVbmFibGUgdG8gZGV0ZXJtaW5lIHVwc3RyZWFtIFNWTiBpbmZvcm1hdGlvbiBmcm9tICIuCisJCSAgICAiaGlzdG9yeVxuIjsKKwl9CisJbXkgKCRyLCAkYykgPSAkZ3MtPmZpbmRfcmV2X2JlZm9yZSgkdGFyZ2V0LCBub3QgJF9mZXRjaF9wYXJlbnQpOworCSRncy0+cmV2X21hcF9zZXQoJHIsICRjLCAncmVzZXQnLCAkdXVpZCk7CisJcHJpbnQgInIkciA9ICRjICgkZ3MtPntyZWZfaWR9KVxuIjsKK30KKworc3ViIGNtZF9nYyB7CisJaWYgKCEkY2FuX2NvbXByZXNzKSB7CisJCXdhcm4gIkNvbXByZXNzOjpabGliIGNvdWxkIG5vdCBiZSBmb3VuZDsgdW5oYW5kbGVkLmxvZyAiIC4KKwkJICAgICAiZmlsZXMgd2lsbCBub3QgYmUgY29tcHJlc3NlZC5cbiI7CisJfQorCWZpbmQoeyB3YW50ZWQgPT4gXCZnY19kaXJlY3RvcnksIG5vX2NoZGlyID0+IDF9LCAiJEVOVntHSVRfRElSfS9zdm4iKTsKK30KKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIHV0aWxpdHkgZnVuY3Rpb25zICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogc3ViIHJlYmFzZV9jbWQgewpAQCAtMTAzMCw2ICsxMjA3LDE3IEBACiAJbXkgJGdzID0gJEdpdDo6U1ZOOjpfaGVhZCBvciByZXR1cm47CiAJcmV0dXJuIGlmIHZlcmlmeV9yZWYoJ3JlZnMvaGVhZHMvbWFzdGVyXjAnKTsKIAorCSMgbG9vayBmb3IgInRydW5rIiByZWYgaWYgaXQgZXhpc3RzCisJbXkgJHJlbW90ZSA9IEdpdDo6U1ZOOjpyZWFkX2FsbF9yZW1vdGVzKCktPnskZ3MtPntyZXBvX2lkfX07CisJbXkgJGZldGNoID0gJHJlbW90ZS0+e2ZldGNofTsKKwlpZiAoJGZldGNoKSB7CisJCWZvcmVhY2ggbXkgJHAgKGtleXMgJSRmZXRjaCkgeworCQkJYmFzZW5hbWUoJGZldGNoLT57JHB9KSBlcSAndHJ1bmsnIG9yIG5leHQ7CisJCQkkZ3MgPSBHaXQ6OlNWTi0+bmV3KCRmZXRjaC0+eyRwfSwgJGdzLT57cmVwb19pZH0sICRwKTsKKwkJCWxhc3Q7CisJCX0KKwl9CisKIAlteSAkdmFsaWRfaGVhZCA9IHZlcmlmeV9yZWYoJ0hFQUReMCcpOwogCWNvbW1hbmRfbm9pc3kocXcodXBkYXRlLXJlZiByZWZzL2hlYWRzL21hc3RlciksICRncy0+cmVmbmFtZSk7CiAJcmV0dXJuIGlmICgkdmFsaWRfaGVhZCB8fCAhdmVyaWZ5X3JlZignSEVBRF4wJykpOwpAQCAtMTA0Myw2ICsxMjMxLDcgQEAKIAljb21tYW5kX25vaXN5KHF3L3JlYWQtdHJlZSAtbSAtdSAtdiBIRUFEIEhFQUQvKTsKIAlwcmludCBTVERFUlIgIkNoZWNrZWQgb3V0IEhFQUQ6XG4gICIsCiAJICAgICAgICAgICAgICRncy0+ZnVsbF91cmwsICIgciIsICRncy0+bGFzdF9yZXYsICJcbiI7CisJJGdzLT5ta2VtcHR5ZGlycygkZ3MtPmxhc3RfcmV2KTsKIH0KIAogc3ViIGNvbXBsZXRlX3N2bl91cmwgewpAQCAtMTA4NCw3ICsxMjczLDggQEAKIAkJICAgICJ3YW50ZWQgdG8gc2V0IHRvOiAkZ3MtPnt1cmx9XG4iOwogCX0KIAljb21tYW5kX29uZWxpbmUoJ2NvbmZpZycsICRrLCAkZ3MtPnt1cmx9KSB1bmxlc3MgJG9yaWdfdXJsOwotCW15ICRyZW1vdGVfcGF0aCA9ICIkcmEtPntzdm5fcGF0aH0vJHJlcG9fcGF0aCI7CisJbXkgJHJlbW90ZV9wYXRoID0gIiRncy0+e3BhdGh9LyRyZXBvX3BhdGgiOworCSRyZW1vdGVfcGF0aCA9fiBzeyUoWzAtOUEtRl17Mn0pfXtjaHIgaGV4KCQxKX1pZWc7CiAJJHJlbW90ZV9wYXRoID1+IHMjLysjLyNnOwogCSRyZW1vdGVfcGF0aCA9fiBzI14vIyNnOwogCSRyZW1vdGVfcGF0aCAuPSAiLyoiIGlmICRyZW1vdGVfcGF0aCAhfiAvXCovOwpAQCAtMTA5Myw2ICsxMjgzLDcgQEAKIAkJZGllICItLXByZWZpeD0nJHBmeCcgbXVzdCBoYXZlIGEgdHJhaWxpbmcgc2xhc2ggJy8nXG4iOwogCX0KIAljb21tYW5kX25vaXN5KCdjb25maWcnLAorCQkgICAgICAnLS1hZGQnLAogCSAgICAgICAgICAgICAgInN2bi1yZW1vdGUuJGdzLT57cmVwb19pZH0uJG4iLAogCSAgICAgICAgICAgICAgIiRyZW1vdGVfcGF0aDpyZWZzL3JlbW90ZXMvJHBmeCoiIC4KIAkgICAgICAgICAgICAgICAgKCcvKicgeCAoKCRyZW1vdGVfcGF0aCA9fiB0ci8qLyovKSAtIDEpKSApOwpAQCAtMTE2NiwyMiArMTM1NywzMiBAQAogCWNsb3NlICRsb2dfZmggb3IgY3JvYWsgJCE7CiAKIAlpZiAoJF9lZGl0IHx8ICgkdHlwZSBlcSAndHJlZScpKSB7Ci0JCW15ICRlZGl0b3IgPSAkRU5We1ZJU1VBTH0gfHwgJEVOVntFRElUT1J9IHx8ICd2aSc7Ci0JCSMgVE9ETzogc3RyaXAgb3V0IHNwYWNlcywgY29tbWVudHMsIGxpa2UgZ2l0LWNvbW1pdC5zaAotCQlzeXN0ZW0oJGVkaXRvciwgJGNvbW1pdF9lZGl0bXNnKTsKKwkJY2hvbXAobXkgJGVkaXRvciA9IGNvbW1hbmRfb25lbGluZShxdyh2YXIgR0lUX0VESVRPUikpKTsKKwkJc3lzdGVtKCdzaCcsICctYycsICRlZGl0b3IuJyAiJEAiJywgJGVkaXRvciwgJGNvbW1pdF9lZGl0bXNnKTsKIAl9CiAJcmVuYW1lICRjb21taXRfZWRpdG1zZywgJGNvbW1pdF9tc2cgb3IgY3JvYWsgJCE7CiAJeworCQlyZXF1aXJlIEVuY29kZTsKIAkJIyBTVk4gcmVxdWlyZXMgbWVzc2FnZXMgdG8gYmUgVVRGLTggd2hlbiBlbnRlcmluZyB0aGUgcmVwbwogCQlsb2NhbCAkLzsKIAkJb3BlbiAkbG9nX2ZoLCAnPCcsICRjb21taXRfbXNnIG9yIGNyb2FrICQhOwogCQliaW5tb2RlICRsb2dfZmg7CiAJCWNob21wKCRsb2dfZW50cnl7bG9nfSA9IDwkbG9nX2ZoPik7CiAKLQkJaWYgKG15ICRlbmMgPSBHaXQ6OmNvbmZpZygnaTE4bi5jb21taXRlbmNvZGluZycpKSB7Ci0JCQlyZXF1aXJlIEVuY29kZTsKLQkJCUVuY29kZTo6ZnJvbV90bygkbG9nX2VudHJ5e2xvZ30sICRlbmMsICdVVEYtOCcpOworCQlteSAkZW5jID0gR2l0Ojpjb25maWcoJ2kxOG4uY29tbWl0ZW5jb2RpbmcnKSB8fCAnVVRGLTgnOworCQlteSAkbXNnID0gJGxvZ19lbnRyeXtsb2d9OworCisJCWV2YWwgeyAkbXNnID0gRW5jb2RlOjpkZWNvZGUoJGVuYywgJG1zZywgMSkgfTsKKwkJaWYgKCRAKSB7CisJCQlkaWUgIkNvdWxkIG5vdCBkZWNvZGUgYXMgJGVuYzpcbiIsICRtc2csCisJCQkgICAgIlxuUGVyaGFwcyB5b3UgbmVlZCB0byBzZXQgaTE4bi5jb21taXRlbmNvZGluZ1xuIjsKIAkJfQorCisJCWV2YWwgeyAkbXNnID0gRW5jb2RlOjplbmNvZGUoJ1VURi04JywgJG1zZywgMSkgfTsKKwkJZGllICJDb3VsZCBub3QgZW5jb2RlIGFzIFVURi04OlxuJG1zZ1xuIiBpZiAkQDsKKworCQkkbG9nX2VudHJ5e2xvZ30gPSAkbXNnOworCiAJCWNsb3NlICRsb2dfZmggb3IgY3JvYWsgJCE7CiAJfQogCXVubGluayAkY29tbWl0X21zZzsKQEAgLTEyMjQsOCArMTQyNSw3IEBACiB9CiAKICMgY29udmVydCBHZXRPcHQ6Okxvbmcgc3BlY3MgZm9yIHVzZSBieSBnaXQtY29uZmlnCi1zdWIgcmVhZF9yZXBvX2NvbmZpZyB7Ci0JcmV0dXJuIHVubGVzcyAtZCAkRU5We0dJVF9ESVJ9Oworc3ViIHJlYWRfZ2l0X2NvbmZpZyB7CiAJbXkgJG9wdHMgPSBzaGlmdDsKIAlteSBAY29uZmlnX29ubHk7CiAJZm9yZWFjaCBteSAkbyAoa2V5cyAlJG9wdHMpIHsKQEAgLTEyNTUsMTEgKzE0NTUsMTEgQEAKIHN1YiBleHRyYWN0X21ldGFkYXRhIHsKIAlteSAkaWQgPSBzaGlmdCBvciByZXR1cm4gKHVuZGVmLCB1bmRlZiwgdW5kZWYpOwogCW15ICgkdXJsLCAkcmV2LCAkdXVpZCkgPSAoJGlkID1+IC9eXHMqZ2l0LXN2bi1pZDpccysoLiopXEAoXGQrKQotCQkJCQkJCVxzKFthLWZcZFwtXSspJC94KTsKKwkJCQkJCQlccyhbYS1mXGRcLV0rKSQvaXgpOwogCWlmICghZGVmaW5lZCAkcmV2IHx8ICEkdXVpZCB8fCAhJHVybCkgewogCQkjIHNvbWUgb2YgdGhlIG9yaWdpbmFsIHJlcG9zaXRvcmllcyBJIG1hZGUgaGFkCiAJCSMgaWRlbnRpZmllcnMgbGlrZSB0aGlzOgotCQkoJHJldiwgJHV1aWQpID0gKCRpZCA9fi9eXHMqZ2l0LXN2bi1pZDpccyhcZCspXEAoW2EtZlxkXC1dKykvKTsKKwkJKCRyZXYsICR1dWlkKSA9ICgkaWQgPX4vXlxzKmdpdC1zdm4taWQ6XHMoXGQrKVxAKFthLWZcZFwtXSspL2kpOwogCX0KIAlyZXR1cm4gKCR1cmwsICRyZXYsICR1dWlkKTsKIH0KQEAgLTE0MjMsNiArMTYyMywyNSBAQAogCXJldHVybiAkbWQ1LT5oZXhkaWdlc3QoKTsKIH0KIAorc3ViIGdjX2RpcmVjdG9yeSB7CisJaWYgKCRjYW5fY29tcHJlc3MgJiYgLWYgJF8gJiYgYmFzZW5hbWUoJF8pIGVxICJ1bmhhbmRsZWQubG9nIikgeworCQlteSAkb3V0X2ZpbGVuYW1lID0gJF8gLiAiLmd6IjsKKwkJb3BlbiBteSAkaW5fZmgsICI8IiwgJF8gb3IgZGllICJVbmFibGUgdG8gb3BlbiAkXzogJCFcbiI7CisJCWJpbm1vZGUgJGluX2ZoOworCQlteSAkZ3ogPSBDb21wcmVzczo6WmxpYjo6Z3pvcGVuKCRvdXRfZmlsZW5hbWUsICJhYiIpIG9yCisJCQkJZGllICJVbmFibGUgdG8gb3BlbiAkb3V0X2ZpbGVuYW1lOiAkIVxuIjsKKworCQlteSAkcmVzOworCQl3aGlsZSAoJHJlcyA9IHN5c3JlYWQoJGluX2ZoLCBteSAkc3RyLCAxMDI0KSkgeworCQkJJGd6LT5nendyaXRlKCRzdHIpIG9yCisJCQkJZGllICJVbmFibGUgdG8gd3JpdGU6ICIuJGd6LT5nemVycm9yKCkuIiFcbiI7CisJCX0KKwkJdW5saW5rICRfIG9yIGRpZSAidW5saW5rICRGaWxlOjpGaW5kOjpuYW1lOiAkIVxuIjsKKwl9IGVsc2lmICgtZiAkXyAmJiBiYXNlbmFtZSgkXykgZXEgImluZGV4IikgeworCQl1bmxpbmsgJF8gb3IgZGllICJ1bmxpbmsgJF86ICQhXG4iOworCX0KK30KKwogcGFja2FnZSBHaXQ6OlNWTjsKIHVzZSBzdHJpY3Q7CiB1c2Ugd2FybmluZ3M7CkBAIC0xNDM2LDYgKzE2NTUsOCBAQAogdXNlIEZpbGU6OlBhdGggcXcvbWtwYXRoLzsKIHVzZSBGaWxlOjpDb3B5IHF3L2NvcHkvOwogdXNlIElQQzo6T3BlbjM7Cit1c2UgTWVtb2l6ZTsgICMgY29yZSBzaW5jZSA1LjguMCwgSnVsIDIwMDIKK3VzZSBNZW1vaXplOjpTdG9yYWJsZTsKIAogbXkgKCRfZ2NfbnIsICRfZ2NfcGVyaW9kKTsKIApAQCAtMTQ4NiwyMyArMTcwNywyMyBAQAogCXJldHVybiB1bmxlc3MgZGVmaW5lZCAkZ2xvYl9zcGVjOwogCW15ICRyZWYgPSAkZ2xvYl9zcGVjLT57cmVmfTsKIAlteSAkcGF0aCA9ICRnbG9iX3NwZWMtPntwYXRofTsKLQlmb3JlYWNoIChjb21tYW5kKHF3I2Zvci1lYWNoLXJlZiAtLWZvcm1hdD0lKHJlZm5hbWUpIHJlZnMvcmVtb3RlcyMpKSB7Ci0JCW5leHQgdW5sZXNzIG0jXnJlZnMvcmVtb3Rlcy8kcmVmLT57cmVnZXh9JCM7CisJZm9yZWFjaCAoY29tbWFuZChxdyNmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9JShyZWZuYW1lKSByZWZzLyMpKSB7CisJCW5leHQgdW5sZXNzIG0jXiRyZWYtPntyZWdleH0kIzsKIAkJbXkgJHAgPSAkMTsKIAkJbXkgJHBhdGhuYW1lID0gZGVzYW5pdGl6ZV9yZWZuYW1lKCRwYXRoLT5mdWxsX3BhdGgoJHApKTsKIAkJbXkgJHJlZm5hbWUgPSBkZXNhbml0aXplX3JlZm5hbWUoJHJlZi0+ZnVsbF9wYXRoKCRwKSk7CiAJCWlmIChteSAkZXhpc3RpbmcgPSAkZmV0Y2gtPnskcGF0aG5hbWV9KSB7CiAJCQlpZiAoJGV4aXN0aW5nIG5lICRyZWZuYW1lKSB7CiAJCQkJZGllICJSZWZzcGVjIGNvbmZsaWN0OlxuIiwKLQkJCQkgICAgImV4aXN0aW5nOiByZWZzL3JlbW90ZXMvJGV4aXN0aW5nXG4iLAotCQkJCSAgICAiIGdsb2JiZWQ6IHJlZnMvcmVtb3Rlcy8kcmVmbmFtZVxuIjsKKwkJCQkgICAgImV4aXN0aW5nOiAkZXhpc3RpbmdcbiIsCisJCQkJICAgICIgZ2xvYmJlZDogJHJlZm5hbWVcbiI7CiAJCQl9Ci0JCQlteSAkdSA9ICg6OmNtdF9tZXRhZGF0YSgicmVmcy9yZW1vdGVzLyRyZWZuYW1lIikpWzBdOworCQkJbXkgJHUgPSAoOjpjbXRfbWV0YWRhdGEoIiRyZWZuYW1lIikpWzBdOwogCQkJJHUgPX4gcyFeXFEkdXJsXEUoL3wkKSEhIG9yIGRpZQotCQkJICAicmVmcy9yZW1vdGVzLyRyZWZuYW1lOiAnJHVybCcgbm90IGZvdW5kIGluICckdSdcbiI7CisJCQkgICIkcmVmbmFtZTogJyR1cmwnIG5vdCBmb3VuZCBpbiAnJHUnXG4iOwogCQkJaWYgKCRwYXRobmFtZSBuZSAkdSkgewogCQkJCXdhcm4gIlc6IFJlZnNwZWMgZ2xvYiBjb25mbGljdCAiLAotCQkJCSAgICAgIihyZWY6IHJlZnMvcmVtb3Rlcy8kcmVmbmFtZSk6XG4iLAorCQkJCSAgICAgIihyZWY6ICRyZWZuYW1lKTpcbiIsCiAJCQkJICAgICAiZXhwZWN0ZWQgcGF0aDogJHBhdGhuYW1lXG4iLAogCQkJCSAgICAgIiAgICByZWFsIHBhdGg6ICR1XG4iLAogCQkJCSAgICAgIkNvbnRpbnVpbmcgYWhlYWQgd2l0aCAkdVxuIjsKQEAgLTE1NDMsMTIgKzE3NjQsMTggQEAKIAlteSAkcmEgPSBHaXQ6OlNWTjo6UmEtPm5ldygkdXJsKTsKIAlteSAkdXVpZCA9ICRyYS0+Z2V0X3V1aWQ7CiAJbXkgJGhlYWQgPSAkcmEtPmdldF9sYXRlc3RfcmV2bnVtOworCisJIyBpZ25vcmUgZXJyb3JzLCAkaGVhZCByZXZpc2lvbiBtYXkgbm90IGV2ZW4gZXhpc3QgYW55bW9yZQorCWV2YWwgeyAkcmEtPmdldF9sb2coIiIsICRoZWFkLCAwLCAxLCAwLCAxLCBzdWIgeyAkaGVhZCA9ICRfWzFdIH0pIH07CisJd2FybiAiVzogJEBcbiIgaWYgJEA7CisKIAlteSAkYmFzZSA9IGRlZmluZWQgJGZldGNoID8gJGhlYWQgOiAwOwogCiAJIyByZWFkIHRoZSBtYXggcmV2cyBmb3Igd2lsZGNhcmQgZXhwYW5zaW9uIChicmFuY2hlcy8qLCB0YWdzLyopCiAJZm9yZWFjaCBteSAkdCAocXcvYnJhbmNoZXMgdGFncy8pIHsKIAkJZGVmaW5lZCAkcmVtb3RlLT57JHR9IG9yIG5leHQ7Ci0JCXB1c2ggQGdsb2JzLCAkcmVtb3RlLT57JHR9OworCQlwdXNoIEBnbG9icywgQHskcmVtb3RlLT57JHR9fTsKKwogCQlteSAkbWF4X3JldiA9IGV2YWwgeyB0bXBfY29uZmlnKHF3Ly0taW50IC0tZ2V0LywKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICJzdm4tcmVtb3RlLiRyZXBvX2lkLiR7dH0tbWF4UmV2IikgfTsKIAkJaWYgKGRlZmluZWQgJG1heF9yZXYgJiYgKCRtYXhfcmV2IDwgJGJhc2UpKSB7CkBAIC0xNTc4LDMyICsxODA1LDM1IEBACiAJbXkgJHVzZV9zdm1fcHJvcHMgPSBldmFsIHsgY29tbWFuZF9vbmVsaW5lKHF3L2NvbmZpZyAtLWJvb2wKIAkgICAgc3ZuLnVzZVN2bVByb3BzLykgfTsKIAkkdXNlX3N2bV9wcm9wcyA9ICR1c2Vfc3ZtX3Byb3BzIGVxICd0cnVlJyBpZiAkdXNlX3N2bV9wcm9wczsKKwlteSAkc3ZuX3JlZnNwZWMgPSBxcntccyooLio/KVxzKjpccyooLis/KVxzKn07CiAJZm9yZWFjaCAoZ3JlcCB7IHMvXnN2bi1yZW1vdGVcLi8vIH0gY29tbWFuZChxdy9jb25maWcgLWwvKSkgewotCQlpZiAobSFeKC4rKVwuZmV0Y2g9XHMqKC4qKVxzKjpccyooLispXHMqJCEpIHsKLQkJCW15ICgkcmVtb3RlLCAkbG9jYWxfcmVmLCAkX3JlbW90ZV9yZWYpID0gKCQxLCAkMiwgJDMpOwotCQkJZGllKCJzdm4tcmVtb3RlLiRyZW1vdGU6IHJlbW90ZSByZWYgJyRfcmVtb3RlX3JlZicgIgotCQkJICAgIC4gIm11c3Qgc3RhcnQgd2l0aCAncmVmcy9yZW1vdGVzLydcbiIpCi0JCQkJdW5sZXNzICRfcmVtb3RlX3JlZiA9fiBte15yZWZzL3JlbW90ZXMvKC4rKX07Ci0JCQlteSAkcmVtb3RlX3JlZiA9ICQxOwotCQkJJGxvY2FsX3JlZiA9fiBze14vfXt9OworCQlpZiAobSFeKC4rKVwuZmV0Y2g9JHN2bl9yZWZzcGVjJCEpIHsKKwkJCW15ICgkcmVtb3RlLCAkbG9jYWxfcmVmLCAkcmVtb3RlX3JlZikgPSAoJDEsICQyLCAkMyk7CisJCQlkaWUoInN2bi1yZW1vdGUuJHJlbW90ZTogcmVtb3RlIHJlZiAnJHJlbW90ZV9yZWYnICIKKwkJCSAgICAuICJtdXN0IHN0YXJ0IHdpdGggJ3JlZnMvJ1xuIikKKwkJCQl1bmxlc3MgJHJlbW90ZV9yZWYgPX4gbXtecmVmcy99OwogCQkJJHItPnskcmVtb3RlfS0+e2ZldGNofS0+eyRsb2NhbF9yZWZ9ID0gJHJlbW90ZV9yZWY7CiAJCQkkci0+eyRyZW1vdGV9LT57c3ZtfSA9IHt9IGlmICR1c2Vfc3ZtX3Byb3BzOwogCQl9IGVsc2lmIChtIV4oLispXC51c2Vzdm1wcm9wcz1ccyooLiopXHMqJCEpIHsKIAkJCSRyLT57JDF9LT57c3ZtfSA9IHt9OwogCQl9IGVsc2lmIChtIV4oLispXC51cmw9XHMqKC4qKVxzKiQhKSB7CiAJCQkkci0+eyQxfS0+e3VybH0gPSAkMjsKLQkJfSBlbHNpZiAobSFeKC4rKVwuKGJyYW5jaGVzfHRhZ3MpPQotCQkgICAgICAgICAgICguKik6cmVmcy9yZW1vdGVzLyguKylccyokLyF4KSB7Ci0JCQlteSAoJHAsICRnKSA9ICgkMywgJDQpOwotCQkJbXkgJHJzID0gJHItPnskMX0tPnskMn0gPSB7Ci0JCQkgICAgICAgICAgICAgICAgICB0ID0+ICQyLAotCQkJCQkgIHJlbW90ZSA9PiAkMSwKLQkJCSAgICAgICAgICAgICAgICAgIHBhdGggPT4gR2l0OjpTVk46Okdsb2JTcGVjLT5uZXcoJHApLAotCQkJICAgICAgICAgICAgICAgICAgcmVmID0+IEdpdDo6U1ZOOjpHbG9iU3BlYy0+bmV3KCRnKSB9OworCQl9IGVsc2lmIChtIV4oLispXC4oYnJhbmNoZXN8dGFncyk9JHN2bl9yZWZzcGVjJCEpIHsKKwkJCW15ICgkcmVtb3RlLCAkdCwgJGxvY2FsX3JlZiwgJHJlbW90ZV9yZWYpID0KKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJDEsICQyLCAkMywgJDQpOworCQkJZGllKCJzdm4tcmVtb3RlLiRyZW1vdGU6IHJlbW90ZSByZWYgJyRyZW1vdGVfcmVmJyAoJHQpICIKKwkJCSAgICAuICJtdXN0IHN0YXJ0IHdpdGggJ3JlZnMvJ1xuIikKKwkJCQl1bmxlc3MgJHJlbW90ZV9yZWYgPX4gbXtecmVmcy99OworCQkJbXkgJHJzID0geworCQkJICAgIHQgPT4gJHQsCisJCQkgICAgcmVtb3RlID0+ICRyZW1vdGUsCisJCQkgICAgcGF0aCA9PiBHaXQ6OlNWTjo6R2xvYlNwZWMtPm5ldygkbG9jYWxfcmVmLCAxKSwKKwkJCSAgICByZWYgPT4gR2l0OjpTVk46Okdsb2JTcGVjLT5uZXcoJHJlbW90ZV9yZWYsIDApIH07CiAJCQlpZiAobGVuZ3RoKCRycy0+e3JlZn0tPntyaWdodH0pICE9IDApIHsKIAkJCQlkaWUgIlRoZSAnKicgZ2xvYiBjaGFyYWN0ZXIgbXVzdCBiZSB0aGUgbGFzdCAiLAotCQkJCSAgICAiY2hhcmFjdGVyIG9mICckZydcbiI7CisJCQkJICAgICJjaGFyYWN0ZXIgb2YgJyRyZW1vdGVfcmVmJ1xuIjsKIAkJCX0KKwkJCXB1c2ggQHsgJHItPnskcmVtb3RlfS0+eyR0fSB9LCAkcnM7CiAJCX0KIAl9CiAKQEAgLTE3MTEsMTQgKzE5NDEsMTUgQEAKIAkJfQogCX0KIAlteSAoJHhyZXBvX2lkLCAkeHBhdGgpID0gZmluZF9yZWYoJHNlbGYtPnJlZm5hbWUpOwotCWlmIChkZWZpbmVkICR4cGF0aCkgeworCWlmICghJG5vX3dyaXRlICYmIGRlZmluZWQgJHhwYXRoKSB7CiAJCWRpZSAic3ZuLXJlbW90ZS4keHJlcG9faWQuZmV0Y2ggYWxyZWFkeSBzZXQgdG8gdHJhY2sgIiwKLQkJICAgICIkeHBhdGg6cmVmcy9yZW1vdGVzLyIsICRzZWxmLT5yZWZuYW1lLCAiXG4iOworCQkgICAgIiR4cGF0aDoiLCAkc2VsZi0+cmVmbmFtZSwgIlxuIjsKIAl9CiAJdW5sZXNzICgkbm9fd3JpdGUpIHsKIAkJY29tbWFuZF9ub2lzeSgnY29uZmlnJywKIAkJCSAgICAgICJzdm4tcmVtb3RlLiRzZWxmLT57cmVwb19pZH0udXJsIiwgJHVybCk7CiAJCSRzZWxmLT57cGF0aH0gPX4gc3teL317fTsKKwkJJHNlbGYtPntwYXRofSA9fiBzeyUoWzAtOUEtRl17Mn0pfXtjaHIgaGV4KCQxKX1pZWc7CiAJCWNvbW1hbmRfbm9pc3koJ2NvbmZpZycsICctLWFkZCcsCiAJCQkgICAgICAic3ZuLXJlbW90ZS4kc2VsZi0+e3JlcG9faWR9LmZldGNoIiwKIAkJCSAgICAgICIkc2VsZi0+e3BhdGh9OiIuJHNlbGYtPnJlZm5hbWUpOwpAQCAtMTc0Myw5ICsxOTc0LDEwIEBACiAJCW5leHQgaWYgZGVmaW5lZCAkcmVwb3Nfcm9vdCAmJiAkcmVwb3Nfcm9vdCBuZSAkdTsKIAogCQlteSAkZmV0Y2ggPSAkcmVtb3Rlcy0+eyRyZXBvX2lkfS0+e2ZldGNofSB8fCB7fTsKLQkJZm9yZWFjaCAocXcvYnJhbmNoZXMgdGFncy8pIHsKLQkJCXJlc29sdmVfbG9jYWxfZ2xvYnMoJHUsICRmZXRjaCwKLQkJCSAgICAgICAgICAgICAgICAgICAgJHJlbW90ZXMtPnskcmVwb19pZH0tPnskX30pOworCQlmb3JlYWNoIG15ICR0IChxdy9icmFuY2hlcyB0YWdzLykgeworCQkJZm9yZWFjaCBteSAkZ2xvYnNwZWMgKEB7JHJlbW90ZXMtPnskcmVwb19pZH0tPnskdH19KSB7CisJCQkJcmVzb2x2ZV9sb2NhbF9nbG9icygkdSwgJGZldGNoLCAkZ2xvYnNwZWMpOworCQkJfQogCQl9CiAJCW15ICRwID0gJHBhdGg7CiAJCW15ICRyd3IgPSByZXdyaXRlX3Jvb3Qoe3JlcG9faWQgPT4gJHJlcG9faWR9KTsKQEAgLTE3ODcsNyArMjAxOSw3IEBACiAJbXkgKCRyZWZfaWQpID0gQF87CiAJZm9yZWFjaCAoY29tbWFuZChxdy9jb25maWcgLWwvKSkgewogCQluZXh0IHVubGVzcyBtIV5zdm4tcmVtb3RlXC4oLispXC5mZXRjaD0KLQkJICAgICAgICAgICAgICBccyooLiopXHMqOlxzKnJlZnMvcmVtb3Rlcy8oLispXHMqJCF4OworCQkgICAgICAgICAgICAgIFxzKiguKj8pXHMqOlxzKiguKz8pXHMqJCF4OwogCQlteSAoJHJlcG9faWQsICRwYXRoLCAkcmVmKSA9ICgkMSwgJDIsICQzKTsKIAkJaWYgKCRyZWYgZXEgJHJlZl9pZCkgewogCQkJJHBhdGggPSAnJyBpZiAoJHBhdGggPX4gbSNeXC4vPyMpOwpAQCAtMTgwNCwxNiArMjAzNiwxNiBAQAogCQlpZiAoIWRlZmluZWQgJHJlcG9faWQpIHsKIAkJCWRpZSAiQ291bGQgbm90IGZpbmQgYSBcInN2bi1yZW1vdGUuKi5mZXRjaFwiIGtleSAiLAogCQkJICAgICJpbiB0aGUgcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIG1hdGNoaW5nOiAiLAotCQkJICAgICJyZWZzL3JlbW90ZXMvJHJlZl9pZFxuIjsKKwkJCSAgICAiJHJlZl9pZFxuIjsKIAkJfQogCX0KIAlteSAkc2VsZiA9IF9uZXcoJGNsYXNzLCAkcmVwb19pZCwgJHJlZl9pZCwgJHBhdGgpOwogCWlmICghZGVmaW5lZCAkc2VsZi0+e3BhdGh9IHx8ICFsZW5ndGggJHNlbGYtPntwYXRofSkgewogCQlteSAkZmV0Y2ggPSBjb21tYW5kX29uZWxpbmUoJ2NvbmZpZycsICctLWdldCcsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3ZuLXJlbW90ZS4kcmVwb19pZC5mZXRjaCIsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOnJlZnMvcmVtb3Rlcy8kcmVmX2lkXCQiKSBvcgorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjokcmVmX2lkXCQiKSBvcgogCQkgICAgIGRpZSAiRmFpbGVkIHRvIHJlYWQgXCJzdm4tcmVtb3RlLiRyZXBvX2lkLmZldGNoXCIgIiwKLQkJICAgICAgICAgIlwiOnJlZnMvcmVtb3Rlcy8kcmVmX2lkXCRcIiBpbiBjb25maWdcbiI7CisJCSAgICAgICAgICJcIjokcmVmX2lkXCRcIiBpbiBjb25maWdcbiI7CiAJCSgkc2VsZi0+e3BhdGh9LCB1bmRlZikgPSBzcGxpdCgvXHMqOlxzKi8sICRmZXRjaCk7CiAJfQogCSRzZWxmLT57dXJsfSA9IGNvbW1hbmRfb25lbGluZSgnY29uZmlnJywgJy0tZ2V0JywKQEAgLTE4MjQsNyArMjA1Niw3IEBACiB9CiAKIHN1YiByZWZuYW1lIHsKLQlteSAoJHJlZm5hbWUpID0gInJlZnMvcmVtb3Rlcy8kX1swXS0+e3JlZl9pZH0iIDsKKwlteSAoJHJlZm5hbWUpID0gJF9bMF0tPntyZWZfaWR9IDsKIAogCSMgSXQgY2Fubm90IGVuZCB3aXRoIGEgc2xhc2ggLywgd2UnbGwgdGhyb3cgdXAgb24gdGhpcyBiZWNhdXNlCiAJIyBTVk4gY2FuJ3QgaGF2ZSBkaXJlY3RvcmllcyB3aXRoIGEgc2xhc2ggaW4gdGhlaXIgbmFtZSwgZWl0aGVyOgpAQCAtMTkwMyw3ICsyMTM1LDcgQEAKIAogCQljaG9tcCgkc3JjLCAkdXVpZCk7CiAKLQkJJHV1aWQgPX4gbXteWzAtOWEtZlwtXXszMCx9JH0KKwkJJHV1aWQgPX4gbXteWzAtOWEtZlwtXXszMCx9JH1pCiAJCSAgICBvciBkaWUgImRvZXNuJ3QgbG9vayByaWdodCAtIHN2bTp1dWlkIGlzICckdXVpZCdcbiI7CiAKIAkJIyB0aGUgJyEnIGlzIHVzZWQgdG8gbWFyayB0aGUgcmVwb3Nfcm9vdCEvcmVsYXRpdmUvcGF0aApAQCAtMTk3OCw2ICsyMjEwLDEwIEBACiAJCWRpZSAiQ2FuJ3QgaGF2ZSBib3RoICd1c2VTdm5zeW5jUHJvcHMnIGFuZCAncmV3cml0ZVJvb3QnICIsCiAJCSAgICAib3B0aW9ucyBzZXQhXG4iOwogCX0KKwlpZiAoJHNlbGYtPnJld3JpdGVfdXVpZCkgeworCQlkaWUgIkNhbid0IGhhdmUgYm90aCAndXNlU3Zuc3luY1Byb3BzJyBhbmQgJ3Jld3JpdGVVVUlEJyAiLAorCQkgICAgIm9wdGlvbnMgc2V0IVxuIjsKKwl9CiAKIAlteSAkc3Zuc3luYzsKIAkjIHNlZSBpZiB3ZSBoYXZlIGl0IGluIG91ciBjb25maWcsIGZpcnN0OgpAQCAtMTk4OSw3ICsyMjI1LDcgQEAKIAkJICAgZGllICJkb2Vzbid0IGxvb2sgcmlnaHQgLSBzdm46c3luYy1mcm9tLXVybCBpcyAnJHVybCdcbiI7CiAKIAkJbXkgJHV1aWQgPSB0bXBfY29uZmlnKCctLWdldCcsICIkc2VjdGlvbi5zdm5zeW5jLXV1aWQiKTsKLQkJKCR1dWlkKSA9ICgkdXVpZCA9fiBte14oWzAtOWEtZlwtXXszMCx9KSR9KSBvcgorCQkoJHV1aWQpID0gKCR1dWlkID1+IG17XihbMC05YS1mXC1dezMwLH0pJH1pKSBvcgogCQkgICBkaWUgImRvZXNuJ3QgbG9vayByaWdodCAtIHN2bjpzeW5jLWZyb20tdXVpZCBpcyAnJHV1aWQnXG4iOwogCiAJCSRzdm5zeW5jID0geyB1cmwgPT4gJHVybCwgdXVpZCA9PiAkdXVpZCB9CkBAIC0yMDA3LDcgKzIyNDMsNyBAQAogCSAgICAgICAgICAgZGllICJkb2Vzbid0IGxvb2sgcmlnaHQgLSBzdm46c3luYy1mcm9tLXVybCBpcyAnJHVybCdcbiI7CiAKIAlteSAkdXVpZCA9ICRycC0+eydzdm46c3luYy1mcm9tLXV1aWQnfSBvciBkaWUgJGVyciAuICJ1dWlkXG4iOwotCSgkdXVpZCkgPSAoJHV1aWQgPX4gbXteKFswLTlhLWZcLV17MzAsfSkkfSkgb3IKKwkoJHV1aWQpID0gKCR1dWlkID1+IG17XihbMC05YS1mXC1dezMwLH0pJH1pKSBvcgogCSAgICAgICAgICAgZGllICJkb2Vzbid0IGxvb2sgcmlnaHQgLSBzdm46c3luYy1mcm9tLXV1aWQgaXMgJyR1dWlkJ1xuIjsKIAogCW15ICRzZWN0aW9uID0gInN2bi1yZW1vdGUuJHNlbGYtPntyZXBvX2lkfSI7CkBAIC0yMDIzLDcgKzIyNTksNyBAQAogCXVubGVzcyAoJHNlbGYtPntyYV91dWlkfSkgewogCQlteSAka2V5ID0gInN2bi1yZW1vdGUuJHNlbGYtPntyZXBvX2lkfS51dWlkIjsKIAkJbXkgJHV1aWQgPSBldmFsIHsgdG1wX2NvbmZpZygnLS1nZXQnLCAka2V5KSB9OwotCQlpZiAoISRAICYmICR1dWlkICYmICR1dWlkID1+IC9eKFthLWZcZFwtXXszMCx9KSQvKSB7CisJCWlmICghJEAgJiYgJHV1aWQgJiYgJHV1aWQgPX4gL14oW2EtZlxkXC1dezMwLH0pJC9pKSB7CiAJCQkkc2VsZi0+e3JhX3V1aWR9ID0gJHV1aWQ7CiAJCX0gZWxzZSB7CiAJCQlkaWUgInJhX3V1aWQgY2FsbGVkIHdpdGhvdXQgVVJMXG4iIHVubGVzcyAkc2VsZi0+e3VybH07CkBAIC0yMDY2LDE2ICsyMzAyLDYgQEAKIAkkcmE7CiB9CiAKLXN1YiByZWxfcGF0aCB7Ci0JbXkgKCRzZWxmKSA9IEBfOwotCW15ICRyZXBvc19yb290ID0gJHNlbGYtPnJhLT57cmVwb3Nfcm9vdH07Ci0JcmV0dXJuICRzZWxmLT57cGF0aH0gaWYgKCRzZWxmLT57dXJsfSBlcSAkcmVwb3Nfcm9vdCk7Ci0JbXkgJHVybCA9ICRzZWxmLT57dXJsfSAuCi0JICAgICAgICAgIChsZW5ndGggJHNlbGYtPntwYXRofSA/ICIvJHNlbGYtPntwYXRofSIgOiAkc2VsZi0+e3BhdGh9KTsKLQkkdXJsID1+IHMhXlxRJHJlcG9zX3Jvb3RcRSg/Oi8rfCQpISFnOwotCSR1cmw7Ci19Ci0KICMgcHJvcF93YWxrKFBBVEgsIFJFViwgU1VCKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFJlY3Vyc2l2ZWx5IHRyYXZlcnNlIFBBVEggYXQgcmV2aXNpb24gUkVWIGFuZCBpbnZva2UgU1VCIGZvciBlYWNoCkBAIC0yMjUxLDEyICsyNDc3LDYgQEAKIAkJbmV4dCBpZiAkc2VlbnskcH07CiAJCSRzZWVueyRwfSA9IDE7CiAJCXB1c2ggQHJldCwgJHA7Ci0JCSMgTUFYUEFSRU5UIGlzIGRlZmluZWQgdG8gMTYgaW4gY29tbWl0LXRyZWUuYzoKLQkJbGFzdCBpZiBAcmV0ID49IDE2OwotCX0KLQlpZiAoQHRtcCkgewotCQlkaWUgInIkbG9nX2VudHJ5LT57cmV2aXNpb259OiBObyByb29tIGZvciBwYXJlbnRzOlxuXHQiLAotCQkgICAgam9pbigiXG5cdCIsIEB0bXApLCAiXG4iOwogCX0KIAlAcmV0OwogfQpAQCAtMjI3NSw2ICsyNDk1LDIwIEBACiAJJHNlbGYtPnstcmV3cml0ZV9yb290fSA9ICRyd3I7CiB9CiAKK3N1YiByZXdyaXRlX3V1aWQgeworCW15ICgkc2VsZikgPSBAXzsKKwlyZXR1cm4gJHNlbGYtPnstcmV3cml0ZV91dWlkfSBpZiBleGlzdHMgJHNlbGYtPnstcmV3cml0ZV91dWlkfTsKKwlteSAkayA9ICJzdm4tcmVtb3RlLiRzZWxmLT57cmVwb19pZH0ucmV3cml0ZVVVSUQiOworCW15ICRyd2lkID0gZXZhbCB7IGNvbW1hbmRfb25lbGluZShxdy9jb25maWcgLS1nZXQvLCAkaykgfTsKKwlpZiAoJHJ3aWQpIHsKKwkJJHJ3aWQgPX4gcyMvKyQjIzsKKwkJaWYgKCRyd2lkICF+IG0jXlthLWYwLTldezh9LSg/OlthLWYwLTldezR9LSl7M31bYS1mMC05XXsxMn0kIykgeworCQkJZGllICIkcndpZCBpcyBub3QgYSB2YWxpZCBVVUlEIChrZXk6ICRrKVxuIjsKKwkJfQorCX0KKwkkc2VsZi0+ey1yZXdyaXRlX3V1aWR9ID0gJHJ3aWQ7Cit9CisKIHN1YiBtZXRhZGF0YV91cmwgewogCW15ICgkc2VsZikgPSBAXzsKIAkoJHNlbGYtPnJld3JpdGVfcm9vdCB8fCAkc2VsZi0+e3VybH0pIC4KQEAgLTI0MDEsMTAgKzI2MzUsNyBAQAogCWlmIChteSAkcGF0aCA9ICRwYXRocy0+eyIvJHNlbGYtPntwYXRofSJ9KSB7CiAJCXJldHVybiAoJHBhdGgtPnthY3Rpb259IGVxICdEJykgPyAwIDogMTsKIAl9Ci0JbXkgJHJlcG9zX3Jvb3QgPSAkc2VsZi0+cmEtPntyZXBvc19yb290fTsKLQlteSAkZXh0ZW5kZWRfcGF0aCA9ICRzZWxmLT57dXJsfSAuICcvJyAuICRzZWxmLT57cGF0aH07Ci0JJGV4dGVuZGVkX3BhdGggPX4gcyNeXFEkcmVwb3Nfcm9vdFxFKC98JCkjIzsKLQkkc2VsZi0+e3BhdGhfcmVnZXh9IHx8PSBxci9eXC9cUSRleHRlbmRlZF9wYXRoXEVcLy87CisJJHNlbGYtPntwYXRoX3JlZ2V4fSB8fD0gcXIvXlwvXFEkc2VsZi0+e3BhdGh9XEVcLy87CiAJaWYgKGdyZXAgLyRzZWxmLT57cGF0aF9yZWdleH0vLCBrZXlzICUkcGF0aHMpIHsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtMjQyNywxNSArMjY1OCwxNCBAQAogCXVubGVzcyAoZGVmaW5lZCAkcGF0aHMpIHsKIAkJbXkgJGVycl9oYW5kbGVyID0gJFNWTjo6RXJyb3I6OmhhbmRsZXI7CiAJCSRTVk46OkVycm9yOjpoYW5kbGVyID0gXCZHaXQ6OlNWTjo6UmE6OnNraXBfdW5rbm93bl9yZXZzOwotCQkkc2VsZi0+cmEtPmdldF9sb2coWyRzZWxmLT57cGF0aH1dLCAkcmV2LCAkcmV2LCAwLCAxLCAxLCBzdWIgewotCQkgICAgICAgICAgICAgICAgICAgJHBhdGhzID0KLQkJCQkgICAgICBHaXQ6OlNWTjo6UmE6OmR1cF9jaGFuZ2VkX3BhdGhzKCRfWzBdKSB9KTsKKwkJJHNlbGYtPnJhLT5nZXRfbG9nKFskc2VsZi0+e3BhdGh9XSwgJHJldiwgJHJldiwgMCwgMSwgMSwKKwkJCQkgICBzdWIgeyAkcGF0aHMgPSAkX1swXSB9KTsKIAkJJFNWTjo6RXJyb3I6OmhhbmRsZXIgPSAkZXJyX2hhbmRsZXI7CiAJfQogCXJldHVybiB1bmRlZiB1bmxlc3MgZGVmaW5lZCAkcGF0aHM7CiAKIAkjIGxvb2sgZm9yIGEgcGFyZW50IGZyb20gYW5vdGhlciBicmFuY2g6Ci0JbXkgQGJfcGF0aF9jb21wb25lbnRzID0gc3BsaXQgbSMvIywgJHNlbGYtPnJlbF9wYXRoOworCW15IEBiX3BhdGhfY29tcG9uZW50cyA9IHNwbGl0IG0jLyMsICRzZWxmLT57cGF0aH07CiAJbXkgQGFfcGF0aF9jb21wb25lbnRzOwogCW15ICRpOwogCXdoaWxlIChAYl9wYXRoX2NvbXBvbmVudHMpIHsKQEAgLTI0NTMsMTEgKzI2ODMsMTIgQEAKIAlteSAkciA9ICRpLT57Y29weWZyb21fcmV2fTsKIAlteSAkcmVwb3Nfcm9vdCA9ICRzZWxmLT5yYS0+e3JlcG9zX3Jvb3R9OwogCW15ICR1cmwgPSAkc2VsZi0+cmEtPnt1cmx9OwotCW15ICRuZXdfdXJsID0gJHJlcG9zX3Jvb3QgLiAkYnJhbmNoX2Zyb207CisJbXkgJG5ld191cmwgPSAkdXJsIC4gJGJyYW5jaF9mcm9tOwogCXByaW50IFNUREVSUiAgIkZvdW5kIHBvc3NpYmxlIGJyYW5jaCBwb2ludDogIiwKLQkgICAgICAgICAgICAgICIkbmV3X3VybCA9PiAiLCAkc2VsZi0+ZnVsbF91cmwsICIsICRyXG4iOworCSAgICAgICAgICAgICAgIiRuZXdfdXJsID0+ICIsICRzZWxmLT5mdWxsX3VybCwgIiwgJHJcbiIKKwkgICAgICAgICAgICAgIHVubGVzcyAkOjpfcSA+IDE7CiAJJGJyYW5jaF9mcm9tID1+IHMjXi8jIzsKLQlteSAkZ3MgPSAkc2VsZi0+b3RoZXJfZ3MoJG5ld191cmwsICR1cmwsICRyZXBvc19yb290LAorCW15ICRncyA9ICRzZWxmLT5vdGhlcl9ncygkbmV3X3VybCwgJHVybCwKIAkJICAgICAgICAgICAgICAgICAkYnJhbmNoX2Zyb20sICRyLCAkc2VsZi0+e3JlZl9pZH0pOwogCW15ICgkcjAsICRwYXJlbnQpID0gJGdzLT5maW5kX3Jldl9iZWZvcmUoJHIsIDEpOwogCXsKQEAgLTI0NzYsMTEgKzI3MDcsMTMgQEAKIAkJKCRyMCwgJHBhcmVudCkgPSAkZ3MtPmZpbmRfcmV2X2JlZm9yZSgkciwgMSk7CiAJfQogCWlmIChkZWZpbmVkICRyMCAmJiBkZWZpbmVkICRwYXJlbnQpIHsKLQkJcHJpbnQgU1RERVJSICJGb3VuZCBicmFuY2ggcGFyZW50OiAoJHNlbGYtPntyZWZfaWR9KSAkcGFyZW50XG4iOworCQlwcmludCBTVERFUlIgIkZvdW5kIGJyYW5jaCBwYXJlbnQ6ICgkc2VsZi0+e3JlZl9pZH0pICRwYXJlbnRcbiIKKwkJICAgICAgICAgICAgIHVubGVzcyAkOjpfcSA+IDE7CiAJCW15ICRlZDsKIAkJaWYgKCRzZWxmLT5yYS0+Y2FuX2RvX3N3aXRjaCkgewogCQkJJHNlbGYtPmFzc2VydF9pbmRleF9jbGVhbigkcGFyZW50KTsKLQkJCXByaW50IFNUREVSUiAiRm9sbG93aW5nIHBhcmVudCB3aXRoIGRvX3N3aXRjaFxuIjsKKwkJCXByaW50IFNUREVSUiAiRm9sbG93aW5nIHBhcmVudCB3aXRoIGRvX3N3aXRjaFxuIgorCQkJICAgICAgICAgICAgIHVubGVzcyAkOjpfcSA+IDE7CiAJCQkjIGRvX3N3aXRjaCB3b3JrcyB3aXRoIHN2bi90cnVuayA+PSByMjIzMTIsIGJ1dCB0aGF0CiAJCQkjIGlzIG5vdCBpbmNsdWRlZCB3aXRoIFNWTiAxLjQuMyAodGhlIGxhdGVzdCB2ZXJzaW9uCiAJCQkjIGF0IHRoZSBtb21lbnQpLCBzbyB3ZSBjYW4ndCByZWx5IG9uIGl0CkBAIC0yNDk1LDE4ICsyNzI4LDIwIEBACiAJCQlwcmludCBTVERFUlIgIlRyZWVzIG1hdGNoOlxuIiwKIAkJCSAgICAgICAgICAgICAiICAkbmV3X3VybFxAJHIwXG4iLAogCQkJICAgICAgICAgICAgICIgICR7XCRzZWxmLT5mdWxsX3VybH1cQCRyZXZcbiIsCi0JCQkJICAgICAiRm9sbG93aW5nIHBhcmVudCB3aXRoIG5vIGNoYW5nZXNcbiI7CisJCQkgICAgICAgICAgICAgIkZvbGxvd2luZyBwYXJlbnQgd2l0aCBubyBjaGFuZ2VzXG4iCisJCQkgICAgICAgICAgICAgdW5sZXNzICQ6Ol9xID4gMTsKIAkJCSRzZWxmLT50bXBfaW5kZXhfZG8oc3ViIHsKIAkJCSAgICBjb21tYW5kX25vaXN5KCdyZWFkLXRyZWUnLCAkcGFyZW50KTsKIAkJCX0pOwogCQkJJHNlbGYtPntsYXN0X2NvbW1pdH0gPSAkcGFyZW50OwogCQl9IGVsc2UgewotCQkJcHJpbnQgU1RERVJSICJGb2xsb3dpbmcgcGFyZW50IHdpdGggZG9fdXBkYXRlXG4iOworCQkJcHJpbnQgU1RERVJSICJGb2xsb3dpbmcgcGFyZW50IHdpdGggZG9fdXBkYXRlXG4iCisJCQkgICAgICAgICAgICAgdW5sZXNzICQ6Ol9xID4gMTsKIAkJCSRlZCA9IFNWTjo6R2l0OjpGZXRjaGVyLT5uZXcoJHNlbGYpOwogCQkJJHNlbGYtPnJhLT5nc19kb191cGRhdGUoJHJldiwgJHJldiwgJHNlbGYsICRlZCkKIAkJCSAgb3IgZGllICJTVk4gY29ubmVjdGlvbiBmYWlsZWQgc29tZXdoZXJlLi4uXG4iOwogCQl9Ci0JCXByaW50IFNUREVSUiAiU3VjY2Vzc2Z1bGx5IGZvbGxvd2VkIHBhcmVudFxuIjsKKwkJcHJpbnQgU1RERVJSICJTdWNjZXNzZnVsbHkgZm9sbG93ZWQgcGFyZW50XG4iIHVubGVzcyAkOjpfcSA+IDE7CiAJCXJldHVybiAkc2VsZi0+bWFrZV9sb2dfZW50cnkoJHJldiwgWyRwYXJlbnRdLCAkZWQpOwogCX0KIAlyZXR1cm4gdW5kZWY7CkBAIC0yNTQyLDYgKzI3NzcsNjEgQEAKIAkkc2VsZi0+bWFrZV9sb2dfZW50cnkoJHJldiwgXEBwYXJlbnRzLCAkZWQpOwogfQogCitzdWIgbWtlbXB0eWRpcnMgeworCW15ICgkc2VsZiwgJHIpID0gQF87CisKKwlzdWIgc2NhbiB7CisJCW15ICgkciwgJGVtcHR5X2RpcnMsICRsaW5lKSA9IEBfOworCQlpZiAoZGVmaW5lZCAkciAmJiAkbGluZSA9fiAvXnIoXGQrKSQvKSB7CisJCQlyZXR1cm4gMCBpZiAkMSA+ICRyOworCQl9IGVsc2lmICgkbGluZSA9fiAvXiAgXCtlbXB0eV9kaXI6ICguKykkLykgeworCQkJJGVtcHR5X2RpcnMtPnskMX0gPSAxOworCQl9IGVsc2lmICgkbGluZSA9fiAvXiAgXC1lbXB0eV9kaXI6ICguKykkLykgeworCQkJbXkgQGQgPSBncmVwIHttW15cUSQxXEUoL3wkKV19IChrZXlzICUkZW1wdHlfZGlycyk7CisJCQlkZWxldGUgQCRlbXB0eV9kaXJze0BkfTsKKwkJfQorCQkxOyAjIGNvbnRpbnVlCisJfTsKKworCW15ICVlbXB0eV9kaXJzID0gKCk7CisJbXkgJGd6X2ZpbGUgPSAiJHNlbGYtPntkaXJ9L3VuaGFuZGxlZC5sb2cuZ3oiOworCWlmICgtZiAkZ3pfZmlsZSkgeworCQlpZiAoISRjYW5fY29tcHJlc3MpIHsKKwkJCXdhcm4gIkNvbXByZXNzOjpabGliIGNvdWxkIG5vdCBiZSBmb3VuZDsgIiwKKwkJCSAgICAgImVtcHR5IGRpcmVjdG9yaWVzIGluICRnel9maWxlIHdpbGwgbm90IGJlIHJlYWRcbiI7CisJCX0gZWxzZSB7CisJCQlteSAkZ3ogPSBDb21wcmVzczo6WmxpYjo6Z3pvcGVuKCRnel9maWxlLCAicmIiKSBvcgorCQkJCWRpZSAiVW5hYmxlIHRvIG9wZW4gJGd6X2ZpbGU6ICQhXG4iOworCQkJbXkgJGxpbmU7CisJCQl3aGlsZSAoJGd6LT5nenJlYWRsaW5lKCRsaW5lKSA+IDApIHsKKwkJCQlzY2FuKCRyLCBcJWVtcHR5X2RpcnMsICRsaW5lKSBvciBsYXN0OworCQkJfQorCQkJJGd6LT5nemNsb3NlOworCQl9CisJfQorCisJaWYgKG9wZW4gbXkgJGZoLCAnPCcsICIkc2VsZi0+e2Rpcn0vdW5oYW5kbGVkLmxvZyIpIHsKKwkJYmlubW9kZSAkZmggb3IgY3JvYWsgImJpbm1vZGU6ICQhIjsKKwkJd2hpbGUgKDwkZmg+KSB7CisJCQlzY2FuKCRyLCBcJWVtcHR5X2RpcnMsICRfKSBvciBsYXN0OworCQl9CisJCWNsb3NlICRmaDsKKwl9CisKKwlteSAkc3RyaXAgPSBxci9cQVxRJHNlbGYtPntwYXRofVxFKD86XC98JCkvOworCWZvcmVhY2ggbXkgJGQgKHNvcnQga2V5cyAlZW1wdHlfZGlycykgeworCQkkZCA9IHVyaV9kZWNvZGUoJGQpOworCQkkZCA9fiBzLyRzdHJpcC8vOworCQluZXh0IGlmIC1kICRkOworCQlpZiAoLWUgXykgeworCQkJd2FybiAiJGQgZXhpc3RzIGJ1dCBpcyBub3QgYSBkaXJlY3RvcnlcbiI7CisJCX0gZWxzZSB7CisJCQlwcmludCAiY3JlYXRpbmcgZW1wdHkgZGlyZWN0b3J5OiAkZFxuIjsKKwkJCW1rcGF0aChbJGRdKTsKKwkJfQorCX0KK30KKwogc3ViIGdldF91bnRyYWNrZWQgewogCW15ICgkc2VsZiwgJGVkKSA9IEBfOwogCW15IEBvdXQ7CkBAIC0yNjQyLDE2ICsyOTMyLDE2IEBACiB9CiAKIHN1YiBvdGhlcl9ncyB7Ci0JbXkgKCRzZWxmLCAkbmV3X3VybCwgJHVybCwgJHJlcG9zX3Jvb3QsCisJbXkgKCRzZWxmLCAkbmV3X3VybCwgJHVybCwKIAkgICAgJGJyYW5jaF9mcm9tLCAkciwgJG9sZF9yZWZfaWQpID0gQF87Ci0JbXkgJGdzID0gR2l0OjpTVk4tPmZpbmRfYnlfdXJsKCRuZXdfdXJsLCAkcmVwb3Nfcm9vdCwgJGJyYW5jaF9mcm9tKTsKKwlteSAkZ3MgPSBHaXQ6OlNWTi0+ZmluZF9ieV91cmwoJG5ld191cmwsICR1cmwsICRicmFuY2hfZnJvbSk7CiAJdW5sZXNzICgkZ3MpIHsKIAkJbXkgJHJlZl9pZCA9ICRvbGRfcmVmX2lkOwogCQkkcmVmX2lkID1+IHMvXEBcZCskLy87CiAJCSRyZWZfaWQgLj0gIlxAJHIiOwogCQkjIGp1c3QgZ3JvdyBhIHRhaWwgaWYgd2UncmUgbm90IHVuaXF1ZSBlbm91Z2ggOngKIAkJJHJlZl9pZCAuPSAnLScgd2hpbGUgZmluZF9yZWYoJHJlZl9pZCk7Ci0JCXByaW50IFNUREVSUiAiSW5pdGlhbGl6aW5nIHBhcmVudDogJHJlZl9pZFxuIjsKKwkJcHJpbnQgU1RERVJSICJJbml0aWFsaXppbmcgcGFyZW50OiAkcmVmX2lkXG4iIHVubGVzcyAkOjpfcSA+IDE7CiAJCW15ICgkdSwgJHAsICRyZXBvX2lkKSA9ICgkbmV3X3VybCwgJycsICRyZWZfaWQpOwogCQlpZiAoJHUgPX4gcyNeXFEkdXJsXEUoL3wkKSMjKSB7CiAJCQkkcCA9ICR1OwpAQCAtMjY2MywyNCArMjk1MywzNTggQEAKIAkkZ3MKIH0KIAorc3ViIGNhbGxfYXV0aG9yc19wcm9nIHsKKwlteSAoJG9yaWdfYXV0aG9yKSA9IEBfOworCSRvcmlnX2F1dGhvciA9IGNvbW1hbmRfb25lbGluZSgncmV2LXBhcnNlJywgJy0tc3EtcXVvdGUnLCAkb3JpZ19hdXRob3IpOworCW15ICRhdXRob3IgPSBgJDo6X2F1dGhvcnNfcHJvZyAkb3JpZ19hdXRob3JgOworCWlmICgkPyAhPSAwKSB7CisJCWRpZSAiJDo6X2F1dGhvcnNfcHJvZyBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJD9cbiIKKwl9CisJaWYgKCRhdXRob3IgPX4gL15ccyooLis/KVxzKjwoLiopPlxzKiQvKSB7CisJCW15ICgkbmFtZSwgJGVtYWlsKSA9ICgkMSwgJDIpOworCQkkZW1haWwgPSB1bmRlZiBpZiBsZW5ndGggJDIgPT0gMDsKKwkJcmV0dXJuIFskbmFtZSwgJGVtYWlsXTsKKwl9IGVsc2UgeworCQlkaWUgIkF1dGhvcjogJG9yaWdfYXV0aG9yOiAkOjpfYXV0aG9yc19wcm9nIHJldHVybmVkICIKKwkJCS4gImludmFsaWQgYXV0aG9yIGZvcm1hdDogJGF1dGhvclxuIjsKKwl9Cit9CisKIHN1YiBjaGVja19hdXRob3IgewogCW15ICgkYXV0aG9yKSA9IEBfOwogCWlmICghZGVmaW5lZCAkYXV0aG9yIHx8IGxlbmd0aCAkYXV0aG9yID09IDApIHsKIAkJJGF1dGhvciA9ICcobm8gYXV0aG9yKSc7Ci0JfSBlbHNpZiAoZGVmaW5lZCAkOjpfYXV0aG9ycyAmJiAhIGRlZmluZWQgJDo6dXNlcnN7JGF1dGhvcn0pIHsKLQkJZGllICJBdXRob3I6ICRhdXRob3Igbm90IGRlZmluZWQgaW4gJDo6X2F1dGhvcnMgZmlsZVxuIjsKKwl9CisJaWYgKCFkZWZpbmVkICQ6OnVzZXJzeyRhdXRob3J9KSB7CisJCWlmIChkZWZpbmVkICQ6Ol9hdXRob3JzX3Byb2cpIHsKKwkJCSQ6OnVzZXJzeyRhdXRob3J9ID0gY2FsbF9hdXRob3JzX3Byb2coJGF1dGhvcik7CisJCX0gZWxzaWYgKGRlZmluZWQgJDo6X2F1dGhvcnMpIHsKKwkJCWRpZSAiQXV0aG9yOiAkYXV0aG9yIG5vdCBkZWZpbmVkIGluICQ6Ol9hdXRob3JzIGZpbGVcbiI7CisJCX0KIAl9CiAJJGF1dGhvcjsKIH0KIAorc3ViIGZpbmRfZXh0cmFfc3ZrX3BhcmVudHMgeworCW15ICgkc2VsZiwgJGVkLCAkdGlja2V0cywgJHBhcmVudHMpID0gQF87CisJIyBhaGEhICBzdms6bWVyZ2UgcHJvcGVydHkgY2hhbmdlZC4uLgorCW15IEB0aWNrZXRzID0gc3BsaXQgIlxuIiwgJHRpY2tldHM7CisJbXkgQGtub3duX3BhcmVudHM7CisJZm9yIG15ICR0aWNrZXQgKCBAdGlja2V0cyApIHsKKwkJbXkgKCR1dWlkLCAkcGF0aCwgJHJldikgPSBzcGxpdCAvOi8sICR0aWNrZXQ7CisJCWlmICggJHV1aWQgZXEgJHNlbGYtPnJhX3V1aWQgKSB7CisJCQlteSAkdXJsID0gJHNlbGYtPnJld3JpdGVfcm9vdCB8fCAkc2VsZi0+e3VybH07CisJCQlteSAkcmVwb3Nfcm9vdCA9ICR1cmw7CisJCQlteSAkYnJhbmNoX2Zyb20gPSAkcGF0aDsKKwkJCSRicmFuY2hfZnJvbSA9fiBze14vfXt9OworCQkJbXkgJGdzID0gJHNlbGYtPm90aGVyX2dzKCRyZXBvc19yb290LiIvIi4kYnJhbmNoX2Zyb20sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgJHVybCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAkYnJhbmNoX2Zyb20sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgJHJldiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+e3JlZl9pZH0pOworCQkJaWYgKCBteSAkY29tbWl0ID0gJGdzLT5yZXZfbWFwX2dldCgkcmV2LCAkdXVpZCkgKSB7CisJCQkJIyB3YWhleSEgIHdlIGZvdW5kIGl0LCBidXQgaXQgbWlnaHQgYmUKKwkJCQkjIGFuIG9sZCBvbmUgKCEpCisJCQkJcHVzaCBAa25vd25fcGFyZW50cywgWyAkcmV2LCAkY29tbWl0IF07CisJCQl9CisJCX0KKwl9CisJIyBPcmRlcmluZyBtYXR0ZXJzOyBoaWdoZXN0LW51bWJlcmVkIGNvbW1pdCBtZXJnZSB0aWNrZXRzCisJIyBmaXJzdCwgYXMgdGhleSBtYXkgYWNjb3VudCBmb3IgbGF0ZXIgbWVyZ2UgdGlja2V0IGFkZGl0aW9ucworCSMgb3IgY2hhbmdlcy4KKwlAa25vd25fcGFyZW50cyA9IG1hcCB7JF8tPlsxXX0gc29ydCB7JGItPlswXSA8PT4gJGEtPlswXX0gQGtub3duX3BhcmVudHM7CisJZm9yIG15ICRwYXJlbnQgKCBAa25vd25fcGFyZW50cyApIHsKKwkJbXkgQGNtZCA9ICgncmV2LWxpc3QnLCAkcGFyZW50LCBtYXAgeyAiXiRfIiB9IEAkcGFyZW50cyApOworCQlteSAoJG1zZ19maCwgJGN0eCkgPSBjb21tYW5kX291dHB1dF9waXBlKEBjbWQpOworCQlteSAkbmV3OworCQl3aGlsZSAoIDwkbXNnX2ZoPiApIHsKKwkJCSRuZXc9MTtsYXN0OworCQl9CisJCWNvbW1hbmRfY2xvc2VfcGlwZSgkbXNnX2ZoLCAkY3R4KTsKKwkJaWYgKCAkbmV3ICkgeworCQkJcHJpbnQgU1RERVJSCisJCQkgICAgIkZvdW5kIG1lcmdlIHBhcmVudCAoc3ZrOm1lcmdlIHRpY2tldCk6ICRwYXJlbnRcbiI7CisJCQlwdXNoIEAkcGFyZW50cywgJHBhcmVudDsKKwkJfQorCX0KK30KKworc3ViIGxvb2t1cF9zdm5fbWVyZ2UgeworCW15ICR1dWlkID0gc2hpZnQ7CisJbXkgJHVybCA9IHNoaWZ0OworCW15ICRtZXJnZSA9IHNoaWZ0OworCisJbXkgKCRzb3VyY2UsICRyZXZzKSA9IHNwbGl0ICI6IiwgJG1lcmdlOworCW15ICRwYXRoID0gJHNvdXJjZTsKKwkkcGF0aCA9fiBze14vfXt9OworCW15ICRncyA9IEdpdDo6U1ZOLT5maW5kX2J5X3VybCgkdXJsLiRzb3VyY2UsICR1cmwsICRwYXRoKTsKKwlpZiAoICEkZ3MgKSB7CisJCXdhcm4gIkNvdWxkbid0IGZpbmQgcmV2bWFwIGZvciAkdXJsJHNvdXJjZVxuIjsKKwkJcmV0dXJuOworCX0KKwlteSBAcmFuZ2VzID0gc3BsaXQgIiwiLCAkcmV2czsKKwlteSAoJHRpcCwgJHRpcF9jb21taXQpOworCW15IEBtZXJnZWRfY29tbWl0X3JhbmdlczsKKwkjIGZpbmQgdGhlIHRpcAorCWZvciBteSAkcmFuZ2UgKCBAcmFuZ2VzICkgeworCQlteSAoJGJvdHRvbSwgJHRvcCkgPSBzcGxpdCAiLSIsICRyYW5nZTsKKwkJJHRvcCB8fD0gJGJvdHRvbTsKKwkJbXkgJGJvdHRvbV9jb21taXQgPSAkZ3MtPmZpbmRfcmV2X2FmdGVyKCAkYm90dG9tLCAxLCAkdG9wICk7CisJCW15ICR0b3BfY29tbWl0ID0gJGdzLT5maW5kX3Jldl9iZWZvcmUoICR0b3AsIDEsICRib3R0b20gKTsKKworCQl1bmxlc3MgKCR0b3BfY29tbWl0IGFuZCAkYm90dG9tX2NvbW1pdCkgeworCQkJd2FybiAiVzp1bmtub3duIHBhdGgvcmV2IGluIHN2bjptZXJnZWluZm8gIgorCQkJCS4iZGlycHJvcDogJHNvdXJjZTokcmFuZ2VcbiI7CisJCQluZXh0OworCQl9CisKKwkJcHVzaCBAbWVyZ2VkX2NvbW1pdF9yYW5nZXMsCisJCQkiJGJvdHRvbV9jb21taXReLi4kdG9wX2NvbW1pdCI7CisKKwkJaWYgKCAhZGVmaW5lZCAkdGlwIG9yICR0b3AgPiAkdGlwICkgeworCQkJJHRpcCA9ICR0b3A7CisJCQkkdGlwX2NvbW1pdCA9ICR0b3BfY29tbWl0OworCQl9CisJfQorCXJldHVybiAoJHRpcF9jb21taXQsIEBtZXJnZWRfY29tbWl0X3Jhbmdlcyk7Cit9CisKK3N1YiBfcmV2X2xpc3QgeworCW15ICgkbXNnX2ZoLCAkY3R4KSA9IGNvbW1hbmRfb3V0cHV0X3BpcGUoCisJCSJyZXYtbGlzdCIsIEBfLAorCSAgICAgICApOworCW15IEBydjsKKwl3aGlsZSAoIDwkbXNnX2ZoPiApIHsKKwkJY2hvbXA7CisJCXB1c2ggQHJ2LCAkXzsKKwl9CisJY29tbWFuZF9jbG9zZV9waXBlKCRtc2dfZmgsICRjdHgpOworCUBydjsKK30KKworc3ViIGNoZWNrX2NoZXJyeV9waWNrIHsKKwlteSAkYmFzZSA9IHNoaWZ0OworCW15ICR0aXAgPSBzaGlmdDsKKwlteSBAcmFuZ2VzID0gQF87CisJbXkgJWNvbW1pdHMgPSBtYXAgeyAkXyA9PiAxIH0KKwkJX3Jldl9saXN0KCItLW5vLW1lcmdlcyIsICR0aXAsICItLW5vdCIsICRiYXNlKTsKKwlmb3IgbXkgJHJhbmdlICggQHJhbmdlcyApIHsKKwkJZGVsZXRlIEBjb21taXRze19yZXZfbGlzdCgkcmFuZ2UpfTsKKwl9CisJZm9yIG15ICRjb21taXQgKGtleXMgJWNvbW1pdHMpIHsKKwkJaWYgKGhhc19ub19jaGFuZ2VzKCRjb21taXQpKSB7CisJCQlkZWxldGUgJGNvbW1pdHN7JGNvbW1pdH07CisJCX0KKwl9CisJcmV0dXJuIChrZXlzICVjb21taXRzKTsKK30KKworc3ViIGhhc19ub19jaGFuZ2VzIHsKKwlteSAkY29tbWl0ID0gc2hpZnQ7CisKKwlteSBAcmV2cyA9IHNwbGl0IC8gLywgY29tbWFuZF9vbmVsaW5lKAorCQlxdyhyZXYtbGlzdCAtLXBhcmVudHMgLTEgLW0pLCAkY29tbWl0KTsKKworCSMgQ29tbWl0cyB3aXRoIG5vIHBhcmVudHMsIGUuZy4gdGhlIHN0YXJ0IG9mIGEgcGFydGlhbCBicmFuY2gsCisJIyBoYXZlIGNoYW5nZXMgYnkgZGVmaW5pdGlvbi4KKwlyZXR1cm4gMSBpZiAoQHJldnMgPCAyKTsKKworCSMgQ29tbWl0cyB3aXRoIG11bHRpcGxlIHBhcmVudHMsIGUuZyBhIG1lcmdlLCBoYXZlIG5vIGNoYW5nZXMKKwkjIGJ5IGRlZmluaXRpb24uCisJcmV0dXJuIDAgaWYgKEByZXZzID4gMik7CisKKwlyZXR1cm4gKGNvbW1hbmRfb25lbGluZSgicmV2LXBhcnNlIiwgIiRjb21taXRee3RyZWV9IikgZXEKKwkJY29tbWFuZF9vbmVsaW5lKCJyZXYtcGFyc2UiLCAiJGNvbW1pdH4xXnt0cmVlfSIpKTsKK30KKworIyBUaGUgR0lUX0RJUiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3QgYWx3YXlzIHNldCB1bnRpbCBhZnRlciB0aGUgY29tbWFuZAorIyBsaW5lIGFyZ3VtZW50cyBhcmUgcHJvY2Vzc2VkLCBzbyB3ZSBjYW4ndCBtZW1vaXplIGluIGEgQkVHSU4gYmxvY2suCit7CisJbXkgJG1lbW9pemVkID0gMDsKKworCXN1YiBtZW1vaXplX3N2bl9tZXJnZWluZm9fZnVuY3Rpb25zIHsKKwkJcmV0dXJuIGlmICRtZW1vaXplZDsKKwkJJG1lbW9pemVkID0gMTsKKworCQlteSAkY2FjaGVfcGF0aCA9ICIkRU5We0dJVF9ESVJ9L3N2bi8uY2FjaGVzLyI7CisJCW1rcGF0aChbJGNhY2hlX3BhdGhdKSB1bmxlc3MgLWQgJGNhY2hlX3BhdGg7CisKKwkJdGllIG15ICVsb29rdXBfc3ZuX21lcmdlX2NhY2hlID0+ICdNZW1vaXplOjpTdG9yYWJsZScsCisJCSAgICAiJGNhY2hlX3BhdGgvbG9va3VwX3N2bl9tZXJnZS5kYiIsICduc3RvcmUnOworCQltZW1vaXplICdsb29rdXBfc3ZuX21lcmdlJywKKwkJCVNDQUxBUl9DQUNIRSA9PiAnRkFVTFQnLAorCQkJTElTVF9DQUNIRSA9PiBbJ0hBU0gnID0+IFwlbG9va3VwX3N2bl9tZXJnZV9jYWNoZV0sCisJCTsKKworCQl0aWUgbXkgJWNoZWNrX2NoZXJyeV9waWNrX2NhY2hlID0+ICdNZW1vaXplOjpTdG9yYWJsZScsCisJCSAgICAiJGNhY2hlX3BhdGgvY2hlY2tfY2hlcnJ5X3BpY2suZGIiLCAnbnN0b3JlJzsKKwkJbWVtb2l6ZSAnY2hlY2tfY2hlcnJ5X3BpY2snLAorCQkJU0NBTEFSX0NBQ0hFID0+ICdGQVVMVCcsCisJCQlMSVNUX0NBQ0hFID0+IFsnSEFTSCcgPT4gXCVjaGVja19jaGVycnlfcGlja19jYWNoZV0sCisJCTsKKworCQl0aWUgbXkgJWhhc19ub19jaGFuZ2VzX2NhY2hlID0+ICdNZW1vaXplOjpTdG9yYWJsZScsCisJCSAgICAiJGNhY2hlX3BhdGgvaGFzX25vX2NoYW5nZXMuZGIiLCAnbnN0b3JlJzsKKwkJbWVtb2l6ZSAnaGFzX25vX2NoYW5nZXMnLAorCQkJU0NBTEFSX0NBQ0hFID0+IFsnSEFTSCcgPT4gXCVoYXNfbm9fY2hhbmdlc19jYWNoZV0sCisJCQlMSVNUX0NBQ0hFID0+ICdGQVVMVCcsCisJCTsKKwl9Cit9CisKK3N1YiBwYXJlbnRzX2V4Y2x1ZGUgeworCW15ICRwYXJlbnRzID0gc2hpZnQ7CisJbXkgQGNvbW1pdHMgPSBAXzsKKwlyZXR1cm4gdW5sZXNzIEBjb21taXRzOworCisJbXkgQGV4Y2x1ZGVkOworCW15ICRleGNsdWRlZDsKKwlkbyB7CisJCW15IEBjbWQgPSAoJ3Jldi1saXN0JywgIi0xIiwgQGNvbW1pdHMsICItLW5vdCIsIEAkcGFyZW50cyApOworCQkkZXhjbHVkZWQgPSBjb21tYW5kX29uZWxpbmUoQGNtZCk7CisJCWlmICggJGV4Y2x1ZGVkICkgeworCQkJbXkgQG5ldzsKKwkJCW15ICRmb3VuZDsKKwkJCWZvciBteSAkY29tbWl0ICggQGNvbW1pdHMgKSB7CisJCQkJaWYgKCAkY29tbWl0IGVxICRleGNsdWRlZCApIHsKKwkJCQkJcHVzaCBAZXhjbHVkZWQsICRjb21taXQ7CisJCQkJCSRmb3VuZCsrOworCQkJCQlsYXN0OworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJcHVzaCBAbmV3LCAkY29tbWl0OworCQkJCX0KKwkJCX0KKwkJCWRpZSAic2F3IGNvbW1pdCAnJGV4Y2x1ZGVkJyBpbiByZXYtbGlzdCBvdXRwdXQsICIKKwkJCQkuImJ1dCB3ZSBkaWRuJ3QgYXNrIGZvciB0aGF0IGNvbW1pdCAod2FudGVkOiBAY29tbWl0cyAtLW5vdCBAJHBhcmVudHMpIgorCQkJCQl1bmxlc3MgJGZvdW5kOworCQkJQGNvbW1pdHMgPSBAbmV3OworCQl9CisJfQorCQl3aGlsZSAoJGV4Y2x1ZGVkIGFuZCBAY29tbWl0cyk7CisKKwlyZXR1cm4gQGV4Y2x1ZGVkOworfQorCisKKyMgbm90ZTogdGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgaWYgdGhlIHZhcmlvdXMgZGlycHJvcHMKKyMgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkCitzdWIgZmluZF9leHRyYV9zdm5fcGFyZW50cyB7CisJbXkgKCRzZWxmLCAkZWQsICRtZXJnZWluZm8sICRwYXJlbnRzKSA9IEBfOworCSMgYWhhISAgc3ZrOm1lcmdlIHByb3BlcnR5IGNoYW5nZWQuLi4KKworCW1lbW9pemVfc3ZuX21lcmdlaW5mb19mdW5jdGlvbnMoKTsKKworCSMgV2UgZmlyc3Qgc2VhcmNoIGZvciBtZXJnZWQgdGlwcyB3aGljaCBhcmUgbm90IGluIG91cgorCSMgaGlzdG9yeS4gIFRoZW4sIHdlIGZpZ3VyZSBvdXQgd2hpY2ggZ2l0IHJldmlzaW9ucyBhcmUgaW4KKwkjIHRoYXQgdGlwLCBidXQgbm90IHRoaXMgcmV2aXNpb24uICBJZiBhbGwgb2YgdGhvc2UgcmV2aXNpb25zCisJIyBhcmUgbm93IG1hcmtlZCBhcyBtZXJnZSwgd2UgY2FuIGFkZCB0aGUgdGlwIGFzIGEgcGFyZW50LgorCW15IEBtZXJnZXMgPSBzcGxpdCAiXG4iLCAkbWVyZ2VpbmZvOworCW15IEBtZXJnZV90aXBzOworCW15ICR1cmwgPSAkc2VsZi0+cmV3cml0ZV9yb290IHx8ICRzZWxmLT57dXJsfTsKKwlteSAkdXVpZCA9ICRzZWxmLT5yYV91dWlkOworCW15ICVyYW5nZXM7CisJZm9yIG15ICRtZXJnZSAoIEBtZXJnZXMgKSB7CisJCW15ICgkdGlwX2NvbW1pdCwgQHJhbmdlcykgPQorCQkJbG9va3VwX3N2bl9tZXJnZSggJHV1aWQsICR1cmwsICRtZXJnZSApOworCQl1bmxlc3MgKCEkdGlwX2NvbW1pdCBvcgorCQkJCWdyZXAgeyAkXyBlcSAkdGlwX2NvbW1pdCB9IEAkcGFyZW50cyApIHsKKwkJCXB1c2ggQG1lcmdlX3RpcHMsICR0aXBfY29tbWl0OworCQkJJHJhbmdlc3skdGlwX2NvbW1pdH0gPSBcQHJhbmdlczsKKwkJfSBlbHNlIHsKKwkJCXB1c2ggQG1lcmdlX3RpcHMsIHVuZGVmOworCQl9CisJfQorCisJbXkgJWV4Y2x1ZGVkID0gbWFwIHsgJF8gPT4gMSB9CisJCXBhcmVudHNfZXhjbHVkZSgkcGFyZW50cywgZ3JlcCB7IGRlZmluZWQgfSBAbWVyZ2VfdGlwcyk7CisKKwkjIGNoZWNrIG1lcmdlIHRpcHMgZm9yIG5ldyBwYXJlbnRzCisJbXkgQG5ld19wYXJlbnRzOworCWZvciBteSAkbWVyZ2VfdGlwICggQG1lcmdlX3RpcHMgKSB7CisJCW15ICRzcGVjID0gc2hpZnQgQG1lcmdlczsKKwkJbmV4dCB1bmxlc3MgJG1lcmdlX3RpcCBhbmQgJGV4Y2x1ZGVkeyRtZXJnZV90aXB9OworCisJCW15ICRyYW5nZXMgPSAkcmFuZ2VzeyRtZXJnZV90aXB9OworCisJCSMgY2hlY2sgb3V0ICduZXcnIHRpcHMKKwkJbXkgJG1lcmdlX2Jhc2U7CisJCWV2YWwgeworCQkJJG1lcmdlX2Jhc2UgPSBjb21tYW5kX29uZWxpbmUoCisJCQkJIm1lcmdlLWJhc2UiLAorCQkJCUAkcGFyZW50cywgJG1lcmdlX3RpcCwKKwkJCSk7CisJCX07CisJCWlmICgkQCkgeworCQkJZGllICJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgbWVyZ2UtYmFzZSIKKwkJCQl1bmxlc3MgJEAtPmlzYSgiR2l0OjpFcnJvcjo6Q29tbWFuZCIpOworCisJCQl3YXJuICJXOiBDYW5ub3QgZmluZCBjb21tb24gYW5jZXN0b3IgYmV0d2VlbiAiLgorCQkJICAgICAiQCRwYXJlbnRzIGFuZCAkbWVyZ2VfdGlwLiBJZ25vcmluZyBtZXJnZSBpbmZvLlxuIjsKKwkJCW5leHQ7CisJCX0KKworCQkjIGRvdWJsZSBjaGVjayB0aGF0IHRoZXJlIGFyZSBubyBtaXNzaW5nIG5vbi1tZXJnZSBjb21taXRzCisJCW15IChAaW5jb21wbGV0ZSkgPSBjaGVja19jaGVycnlfcGljaygKKwkJCSRtZXJnZV9iYXNlLCAkbWVyZ2VfdGlwLAorCQkJQCRyYW5nZXMsCisJCSAgICAgICApOworCisJCWlmICggQGluY29tcGxldGUgKSB7CisJCQl3YXJuICJXOnN2biBjaGVycnktcGljayBpZ25vcmVkICgkc3BlYykgLSBtaXNzaW5nICIKKwkJCQkuQGluY29tcGxldGUuIiBjb21taXQocykgKGVnICRpbmNvbXBsZXRlWzBdKVxuIjsKKwkJfSBlbHNlIHsKKwkJCXdhcm4KKwkJCQkiRm91bmQgbWVyZ2UgcGFyZW50IChzdm46bWVyZ2VpbmZvIHByb3ApOiAiLAorCQkJCQkkbWVyZ2VfdGlwLCAiXG4iOworCQkJcHVzaCBAbmV3X3BhcmVudHMsICRtZXJnZV90aXA7CisJCX0KKwl9CisKKwkjIGNhdGVyIGZvciBtZXJnZXMgd2hpY2ggbWVyZ2UgY29tbWl0cyBmcm9tIG11bHRpcGxlIGJyYW5jaGVzCisJaWYgKCBAbmV3X3BhcmVudHMgPiAxICkgeworCQlmb3IgKCBteSAkaSA9IDA7ICRpIDw9ICQjbmV3X3BhcmVudHM7ICRpKysgKSB7CisJCQlmb3IgKCBteSAkaiA9IDA7ICRqIDw9ICQjbmV3X3BhcmVudHM7ICRqKysgKSB7CisJCQkJbmV4dCBpZiAkaSA9PSAkajsKKwkJCQluZXh0IHVubGVzcyAkbmV3X3BhcmVudHNbJGldOworCQkJCW5leHQgdW5sZXNzICRuZXdfcGFyZW50c1skal07CisJCQkJbXkgJHJldnMgPSBjb21tYW5kX29uZWxpbmUoCisJCQkJCSJyZXYtbGlzdCIsICItMSIsCisJCQkJCSIkbmV3X3BhcmVudHNbJGldLi4kbmV3X3BhcmVudHNbJGpdIiwKKwkJCQkgICAgICAgKTsKKwkJCQlpZiAoICEkcmV2cyApIHsKKwkJCQkJdW5kZWYoJG5ld19wYXJlbnRzWyRpXSk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCXB1c2ggQCRwYXJlbnRzLCBncmVwIHsgZGVmaW5lZCB9IEBuZXdfcGFyZW50czsKK30KKwogc3ViIG1ha2VfbG9nX2VudHJ5IHsKIAlteSAoJHNlbGYsICRyZXYsICRwYXJlbnRzLCAkZWQpID0gQF87CiAJbXkgJHVudHJhY2tlZCA9ICRzZWxmLT5nZXRfdW50cmFja2VkKCRlZCk7CiAKKwlteSBAcGFyZW50cyA9IEAkcGFyZW50czsKKwlteSAkcHMgPSAkZWQtPntwYXRoX3N0cmlwfSB8fCAiIjsKKwlmb3IgbXkgJHBhdGggKCBncmVwIHsgbS8kcHMvIH0gJXskZWQtPntkaXJfcHJvcH19ICkgeworCQlteSAkcHJvcHMgPSAkZWQtPntkaXJfcHJvcH17JHBhdGh9OworCQlpZiAoICRwcm9wcy0+eyJzdms6bWVyZ2UifSApIHsKKwkJCSRzZWxmLT5maW5kX2V4dHJhX3N2a19wYXJlbnRzCisJCQkJKCRlZCwgJHByb3BzLT57InN2azptZXJnZSJ9LCBcQHBhcmVudHMpOworCQl9CisJCWlmICggJHByb3BzLT57InN2bjptZXJnZWluZm8ifSApIHsKKwkJCSRzZWxmLT5maW5kX2V4dHJhX3N2bl9wYXJlbnRzCisJCQkJKCRlZCwKKwkJCQkgJHByb3BzLT57InN2bjptZXJnZWluZm8ifSwKKwkJCQkgXEBwYXJlbnRzKTsKKwkJfQorCX0KKwogCW9wZW4gbXkgJHVuLCAnPj4nLCAiJHNlbGYtPntkaXJ9L3VuaGFuZGxlZC5sb2ciIG9yIGNyb2FrICQhOwogCXByaW50ICR1biAiciRyZXZcbiIgb3IgY3JvYWsgJCE7CiAJcHJpbnQgJHVuICRfLCAiXG4iIGZvcmVhY2ggQCR1bnRyYWNrZWQ7Ci0JbXkgJWxvZ19lbnRyeSA9ICggcGFyZW50cyA9PiAkcGFyZW50cyB8fCBbXSwgcmV2aXNpb24gPT4gJHJldiwKKwlteSAlbG9nX2VudHJ5ID0gKCBwYXJlbnRzID0+IFxAcGFyZW50cywgcmV2aXNpb24gPT4gJHJldiwKIAkgICAgICAgICAgICAgICAgICBsb2cgPT4gJycpOwogCiAJbXkgJGhlYWRyZXY7CkBAIC0yNzM0LDcgKzMzNTgsMTEgQEAKIAkJCWRpZSAiQ2FuJ3QgaGF2ZSBib3RoICd1c2VTdm1Qcm9wcycgYW5kICdyZXdyaXRlUm9vdCcgIiwKIAkJCSAgICAib3B0aW9ucyBzZXQhXG4iOwogCQl9Ci0JCW15ICgkdXVpZCwgJHIpID0gJGhlYWRyZXYgPX4gbXteKFthLWZcZFwtXXszMCx9KTooXGQrKSR9OworCQlpZiAoJHNlbGYtPnJld3JpdGVfdXVpZCkgeworCQkJZGllICJDYW4ndCBoYXZlIGJvdGggJ3VzZVN2bVByb3BzJyBhbmQgJ3Jld3JpdGVVVUlEJyAiLAorCQkJICAgICJvcHRpb25zIHNldCFcbiI7CisJCX0KKwkJbXkgKCR1dWlkLCAkcikgPSAkaGVhZHJldiA9fiBte14oW2EtZlxkXC1dezMwLH0pOihcZCspJH1pOwogCQkjIHdlIGRvbid0IHdhbnQgIlNWTTogaW5pdGlhbGl6aW5nIG1pcnJvciBmb3IganVuayIgLi4uCiAJCXJldHVybiB1bmRlZiBpZiAkciA9PSAwOwogCQlteSAkc3ZtID0gJHNlbGYtPnN2bTsKQEAgLTI3NjQsMTAgKzMzOTIsMTAgQEAKIAl9IGVsc2UgewogCQlteSAkdXJsID0gJHNlbGYtPm1ldGFkYXRhX3VybDsKIAkJcmVtb3ZlX3VzZXJuYW1lKCR1cmwpOwotCQkkbG9nX2VudHJ5e21ldGFkYXRhfSA9ICIkdXJsXEAkcmV2ICIgLgotCQkgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5yYS0+Z2V0X3V1aWQ7Ci0JCSRlbWFpbCB8fD0gIiRhdXRob3JcQCIgLiAkc2VsZi0+cmEtPmdldF91dWlkOwotCQkkY29tbWl0X2VtYWlsIHx8PSAiJGF1dGhvclxAIiAuICRzZWxmLT5yYS0+Z2V0X3V1aWQ7CisJCW15ICR1dWlkID0gJHNlbGYtPnJld3JpdGVfdXVpZCB8fCAkc2VsZi0+cmEtPmdldF91dWlkOworCQkkbG9nX2VudHJ5e21ldGFkYXRhfSA9ICIkdXJsXEAkcmV2ICIgLiAkdXVpZDsKKwkJJGVtYWlsIHx8PSAiJGF1dGhvclxAIiAuICR1dWlkOworCQkkY29tbWl0X2VtYWlsIHx8PSAiJGF1dGhvclxAIiAuICR1dWlkOwogCX0KIAkkbG9nX2VudHJ5e25hbWV9ID0gJG5hbWU7CiAJJGxvZ19lbnRyeXtlbWFpbH0gPSAkZW1haWw7CkBAIC0yODQ5LDcgKzM0NzcsNyBAQAogCQkJCSctLScpOwogCW15ICRtZXRhZGF0YV91cmwgPSAkc2VsZi0+bWV0YWRhdGFfdXJsOwogCXJlbW92ZV91c2VybmFtZSgkbWV0YWRhdGFfdXJsKTsKLQlteSAkc3ZuX3V1aWQgPSAkc2VsZi0+cmFfdXVpZDsKKwlteSAkc3ZuX3V1aWQgPSAkc2VsZi0+cmV3cml0ZV91dWlkIHx8ICRzZWxmLT5yYV91dWlkOwogCW15ICRjOwogCXdoaWxlICg8JGxvZz4pIHsKIAkJaWYgKCBte15jb21taXQgKCQ6OnNoYTEpJH0gKSB7CkBAIC0yOTUyLDYgKzM1ODAsMTQgQEAKIAkgIGNyb2FrICJ3cml0ZTogJCEiOwogfQogCitzdWIgX3Jldl9tYXBfcmVzZXQgeworCW15ICgkZmgsICRyZXYsICRjb21taXQpID0gQF87CisJbXkgJGMgPSBfcmV2X21hcF9nZXQoJGZoLCAkcmV2KTsKKwkkYyBlcSAkY29tbWl0IG9yIGRpZSAiX3Jldl9tYXBfcmVzZXQoQF8pIGNvbW1pdCAkYyBkb2VzIG5vdCBtYXRjaCFcbiI7CisJbXkgJG9mZnNldCA9IHN5c3NlZWsoJGZoLCAwLCBTRUVLX0NVUikgb3IgY3JvYWsgInNlZWs6ICQhIjsKKwl0cnVuY2F0ZSAkZmgsICRvZmZzZXQgb3IgY3JvYWsgInRydW5jYXRlOiAkISI7Cit9CisKIHN1YiBta2ZpbGUgewogCW15ICgkcGF0aCkgPSBAXzsKIAl1bmxlc3MgKC1lICRwYXRoKSB7CkBAIC0yOTY4LDYgKzM2MDQsNyBAQAogCW15ICRkYiA9ICRzZWxmLT5tYXBfcGF0aCgkdXVpZCk7CiAJbXkgJGRiX2xvY2sgPSAiJGRiLmxvY2siOwogCW15ICRzaWc7CisJJHVwZGF0ZV9yZWYgfHw9IDA7CiAJaWYgKCR1cGRhdGVfcmVmKSB7CiAJCSRTSUd7SU5UfSA9ICRTSUd7SFVQfSA9ICRTSUd7VEVSTX0gPSAkU0lHe0FMUk19ID0gJFNJR3tQSVBFfSA9CiAJCSAgICAgICAgICAgICRTSUd7VVNSMX0gPSAkU0lHe1VTUjJ9ID0gc3ViIHsgJHNpZyA9ICRfWzBdIH07CkBAIC0yOTkxLDcgKzM2MjgsOCBAQAogCiAJc3lzb3BlbihteSAkZmgsICRkYl9sb2NrLCBPX1JEV1IgfCBPX0NSRUFUKQogCSAgICAgb3IgY3JvYWsgIkNvdWxkbid0IG9wZW4gJGRiX2xvY2s6ICQhXG4iOwotCV9yZXZfbWFwX3NldCgkZmgsICRyZXYsICRjb21taXQpOworCSR1cGRhdGVfcmVmIGVxICdyZXNldCcgPyBfcmV2X21hcF9yZXNldCgkZmgsICRyZXYsICRjb21taXQpIDoKKwkJCQkgX3Jldl9tYXBfc2V0KCRmaCwgJHJldiwgJGNvbW1pdCk7CiAJaWYgKCRzeW5jKSB7CiAJCSRmaC0+Zmx1c2ggb3IgZGllICJDb3VsZG4ndCBmbHVzaCAkZGJfbG9jazogJCFcbiI7CiAJCSRmaC0+c3luYyBvciBkaWUgIkNvdWxkbid0IHN5bmMgJGRiX2xvY2s6ICQhXG4iOwpAQCAtMjk5OSw3ICszNjM3LDkgQEAKIAljbG9zZSAkZmggb3IgY3JvYWsgJCE7CiAJaWYgKCR1cGRhdGVfcmVmKSB7CiAJCSRfaGVhZCA9ICRzZWxmOwotCQljb21tYW5kX25vaXN5KCd1cGRhdGUtcmVmJywgJy1tJywgInIkcmV2IiwKKwkJbXkgJG5vdGUgPSAiIjsKKwkJJG5vdGUgPSAiICgkdXBkYXRlX3JlZikiIGlmICgkdXBkYXRlX3JlZiAhfiAvXlxkKiQvKTsKKwkJY29tbWFuZF9ub2lzeSgndXBkYXRlLXJlZicsICctbScsICJyJHJldiRub3RlIiwKIAkJICAgICAgICAgICAgICAkc2VsZi0+cmVmbmFtZSwgJGNvbW1pdCk7CiAJfQogCXJlbmFtZSAkZGJfbG9jaywgJGRiIG9yIGRpZSAicmV2X21hcF9zZXQoQF8pOiAiLCAiRmFpbGVkIHRvIHJlbmFtZTogIiwKQEAgLTMwNjEsMTIgKzM3MDEsMTkgQEAKIAlyZXR1cm4gdW5kZWYgdW5sZXNzIC1lICRtYXBfcGF0aDsKIAogCXN5c29wZW4obXkgJGZoLCAkbWFwX3BhdGgsIE9fUkRPTkxZKSBvciBjcm9hayAib3BlbjogJCEiOworCW15ICRjID0gX3Jldl9tYXBfZ2V0KCRmaCwgJHJldik7CisJY2xvc2UoJGZoKSBvciBjcm9hayAiY2xvc2U6ICQhIjsKKwkkYworfQorCitzdWIgX3Jldl9tYXBfZ2V0IHsKKwlteSAoJGZoLCAkcmV2KSA9IEBfOworCiAJYmlubW9kZSAkZmggb3IgY3JvYWsgImJpbm1vZGU6ICQhIjsKIAlteSAkc2l6ZSA9IChzdGF0KCRmaCkpWzddOwogCSgkc2l6ZSAlIDI0KSA9PSAwIG9yIGNyb2FrICJpbmNvbnNpc3RlbnQgc2l6ZTogJHNpemUiOwogCiAJaWYgKCRzaXplID09IDApIHsKLQkJY2xvc2UgJGZoIG9yIGNyb2FrICJjbG9zZTogJGZoIjsKIAkJcmV0dXJuIHVuZGVmOwogCX0KIApAQCAtMzA3NywxOCArMzcyNCwxNiBAQAogCQlteSAkaSA9IGludCgoJGwvMjQgKyAkdS8yNCkgLyAyKSAqIDI0OwogCQlzeXNzZWVrKCRmaCwgJGksIFNFRUtfU0VUKSBvciBjcm9hayAic2VlazogJCEiOwogCQlzeXNyZWFkKCRmaCwgbXkgJGJ1ZiwgMjQpID09IDI0IG9yIGNyb2FrICJyZWFkOiAkISI7Ci0JCW15ICgkciwgJGMpID0gdW5wYWNrKCdOSDQwJywgJGJ1Zik7CisJCW15ICgkciwgJGMpID0gdW5wYWNrKHJldl9tYXBfZm10LCAkYnVmKTsKIAogCQlpZiAoJHIgPCAkcmV2KSB7CiAJCQkkbCA9ICRpICsgMjQ7CiAJCX0gZWxzaWYgKCRyID4gJHJldikgewogCQkJJHUgPSAkaSAtIDI0OwogCQl9IGVsc2UgeyAjICRyID09ICRyZXYKLQkJCWNsb3NlKCRmaCkgb3IgY3JvYWsgImNsb3NlOiAkISI7CiAJCQlyZXR1cm4gJGMgZXEgKCcwJyB4IDQwKSA/IHVuZGVmIDogJGM7CiAJCX0KIAl9Ci0JY2xvc2UoJGZoKSBvciBjcm9hayAiY2xvc2U6ICQhIjsKIAl1bmRlZjsKIH0KIApAQCAtMzEwMCw2ICszNzQ1LDggQEAKIAlteSAoJHNlbGYsICRyZXYsICRlcV9vaywgJG1pbl9yZXYpID0gQF87CiAJLS0kcmV2IHVubGVzcyAkZXFfb2s7CiAJJG1pbl9yZXYgfHw9IDE7CisJbXkgJG1heF9yZXYgPSAkc2VsZi0+cmV2X21hcF9tYXg7CisJJHJldiA9ICRtYXhfcmV2IGlmICgkcmV2ID4gJG1heF9yZXYpOwogCXdoaWxlICgkcmV2ID49ICRtaW5fcmV2KSB7CiAJCWlmIChteSAkYyA9ICRzZWxmLT5yZXZfbWFwX2dldCgkcmV2KSkgewogCQkJcmV0dXJuICgkcmV2LCAkYyk7CkBAIC0zMTMyLDEyICszNzc5LDI0IEBACiAJCSRyZXBvX2lkID0gJEdpdDo6U1ZOOjpkZWZhdWx0X3JlcG9faWQ7CiAJfQogCXVubGVzcyAoZGVmaW5lZCAkcmVmX2lkICYmIGxlbmd0aCAkcmVmX2lkKSB7Ci0JCSRfWzJdID0gJHJlZl9pZCA9ICRHaXQ6OlNWTjo6ZGVmYXVsdF9yZWZfaWQ7CisJCSRfcHJlZml4ID0gJycgdW5sZXNzIGRlZmluZWQoJF9wcmVmaXgpOworCQkkX1syXSA9ICRyZWZfaWQgPQorCQkgICAgICAgICAgICAgInJlZnMvcmVtb3Rlcy8kX3ByZWZpeCRHaXQ6OlNWTjo6ZGVmYXVsdF9yZWZfaWQiOwogCX0KIAkkX1sxXSA9ICRyZXBvX2lkOwogCW15ICRkaXIgPSAiJEVOVntHSVRfRElSfS9zdm4vJHJlZl9pZCI7CisKKwkjIE9sZGVyIHJlcG9zIGltcG9ydGVkIGJ5IHVzIHVzZWQgJEdJVF9ESVIvc3ZuL2ZvbyBpbnN0ZWFkIG9mCisJIyAkR0lUX0RJUi9zdm4vcmVmcy9yZW1vdGVzL2ZvbyB3aGVuIHRyYWNraW5nIHJlZnMvcmVtb3Rlcy9mb28KKwlpZiAoJHJlZl9pZCA9fiBte15yZWZzL3JlbW90ZXMvKC4qKX0pIHsKKwkJbXkgJG9sZF9kaXIgPSAiJEVOVntHSVRfRElSfS9zdm4vJDEiOworCQlpZiAoLWQgJG9sZF9kaXIgJiYgISAtZCAkZGlyKSB7CisJCQkkZGlyID0gJG9sZF9kaXI7CisJCX0KKwl9CisKIAkkX1szXSA9ICRwYXRoID0gJycgdW5sZXNzIChkZWZpbmVkICRwYXRoKTsKLQlta3BhdGgoWyIkRU5We0dJVF9ESVJ9L3N2biJdKTsKKwlta3BhdGgoWyRkaXJdKTsKIAlibGVzcyB7CiAJCXJlZl9pZCA9PiAkcmVmX2lkLCBkaXIgPT4gJGRpciwgaW5kZXggPT4gIiRkaXIvaW5kZXgiLAogCSAgICAgICAgcGF0aCA9PiAkcGF0aCwgY29uZmlnID0+ICIkRU5We0dJVF9ESVJ9L3N2bi9jb25maWciLApAQCAtMzE3NSw2ICszODM0LDEyIEBACiAJJGYKIH0KIAorc3ViIHVyaV9kZWNvZGUgeworCW15ICgkZikgPSBAXzsKKwkkZiA9fiBzIyUoWzAtOWEtZkEtRl17Mn0pI2NocihoZXgoJDEpKSNlZzsKKwkkZgorfQorCiBzdWIgcmVtb3ZlX3VzZXJuYW1lIHsKIAkkX1swXSA9fiBze14oW146XSo6Ly8pW15AXStAfXskMX07CiB9CkBAIC0zNDU2LDExICs0MTIxLDExIEBACiAJCX0KIAkJcHJpbnQgIlx0RFx0JGdwYXRoL1xuIiB1bmxlc3MgJDo6X3E7CiAJCWNvbW1hbmRfY2xvc2VfcGlwZSgkbHMsICRjdHgpOwotCQkkc2VsZi0+e2VtcHR5fS0+eyRwYXRofSA9IDAKIAl9IGVsc2UgewogCQkkc2VsZi0+e2dpaX0tPnJlbW92ZSgkZ3BhdGgpOwogCQlwcmludCAiXHREXHQkZ3BhdGhcbiIgdW5sZXNzICQ6Ol9xOwogCX0KKwkkc2VsZi0+e2VtcHR5fS0+eyRwYXRofSA9IDA7CiAJdW5kZWY7CiB9CiAKQEAgLTM4MjAsNyArNDQ4NSw3IEBACiBzdWIgdXJsX3BhdGggewogCW15ICgkc2VsZiwgJHBhdGgpID0gQF87CiAJaWYgKCRzZWxmLT57dXJsfSA9fiBtI15odHRwcz86Ly8jKSB7Ci0JCSRwYXRoID1+IHMvKFtefmEtekEtWjAtOV8uLV0pL3VjIHNwcmludGYoIiUlJTAyeCIsb3JkKCQxKSkvZWc7CisJCSRwYXRoID1+IHMhKFtefmEtekEtWjAtOV8uLy1dKSF1YyBzcHJpbnRmKCIlJSUwMngiLG9yZCgkMSkpIWVnOwogCX0KIAkkc2VsZi0+e3VybH0gLiAnLycgLiAkc2VsZi0+cmVwb19wYXRoKCRwYXRoKTsKIH0KQEAgLTQyODAsNiArNDk0NSwzNCBAQAogCW15ICgkc2VsZiwgQGFyZ3MpID0gQF87CiAJbXkgJHBvb2wgPSBTVk46OlBvb2wtPm5ldzsKIAorCSMgc3ZuX2xvZ19jaGFuZ2VkX3BhdGhfdCBvYmplY3RzIHBhc3NlZCB0byBnZXRfbG9nIGFyZSBsaWtlbHkgdG8gYmUKKwkjIG92ZXJ3cml0dGVuIGV2ZW4gaWYgb25seSB0aGUgcmVmcyBhcmUgY29waWVkIHRvIGFuIGV4dGVybmFsIHZhcmlhYmxlLAorCSMgc28gd2Ugc2hvdWxkIGR1cCB0aGUgc3RydWN0dXJlcyBpbiB0aGVpciBlbnRpcmV0eS4gIFVzaW5nIGFuCisJIyBleHRlcm5hbGx5IHBhc3NlZCBwb29sIChpbnN0ZWFkIG9mIG91ciB0ZW1wb3JhcnkgYW5kIHF1aWNrbHkgY2xlYXJlZAorCSMgcG9vbCBpbiBHaXQ6OlNWTjo6UmEpIGRvZXMgbm90IGhlbHAgbWF0dGVycyBhdCBhbGwuLi4KKwlteSAkcmVjZWl2ZXIgPSBwb3AgQGFyZ3M7CisJbXkgJHByZWZpeCA9ICIvIi4kc2VsZi0+e3N2bl9wYXRofTsKKwkkcHJlZml4ID1+IHMjLysoJCkjIzsKKwlteSAkcHJlZml4X3JlZ2V4ID0gcXIjXlxRJHByZWZpeFxFIzsKKwlwdXNoKEBhcmdzLCBzdWIgeworCQlteSAoJHBhdGhzKSA9ICRfWzBdOworCQlyZXR1cm4gJiRyZWNlaXZlcihAXykgdW5sZXNzICRwYXRoczsKKwkJJF9bMF0gPSAoKTsKKwkJZm9yZWFjaCBteSAkcCAoa2V5cyAlJHBhdGhzKSB7CisJCQlteSAkaSA9ICRwYXRocy0+eyRwfTsKKwkJCSMgTWFrZSBwYXRoIHJlbGF0aXZlIHRvIG91ciB1cmwsIG5vdCByZXBvc19yb290CisJCQkkcCA9fiBzLyRwcmVmaXhfcmVnZXgvLzsKKwkJCW15ICVzID0gbWFwIHsgJF8gPT4gJGktPiRfOyB9CisJCQkJcXcvY29weWZyb21fcGF0aCBjb3B5ZnJvbV9yZXYgYWN0aW9uLzsKKwkJCWlmICgkc3snY29weWZyb21fcGF0aCd9KSB7CisJCQkJJHN7J2NvcHlmcm9tX3BhdGgnfSA9fiBzLyRwcmVmaXhfcmVnZXgvLzsKKwkJCX0KKwkJCSRfWzBdeyRwfSA9IFwlczsKKwkJfQorCQkmJHJlY2VpdmVyKEBfKTsKKwl9KTsKKworCiAJIyB0aGUgbGltaXQgcGFyYW1ldGVyIHdhcyBub3Qgc3VwcG9ydGVkIGluIFNWTiAxLjEueCwgc28gd2UKIAkjIGRyb3AgaXQuICBUaGVyZWZvcmUsIHRoZSByZWNlaXZlciBjYWxsYmFjayBwYXNzZWQgdG8gaXQKIAkjIGlzIG1hZGUgYXdhcmUgb2YgdGhpcyBsaW1pdGF0aW9uIGJ5IGJlaW5nIHdyYXBwZWQgaWYKQEAgLTQzNjQsMTAgKzUwNTcsMTIgQEAKIAogCW15ICRmdWxsX3VybCA9ICRzZWxmLT57dXJsfTsKIAlteSAkb2xkX3VybCA9ICRmdWxsX3VybDsKLQkkZnVsbF91cmwgLj0gJy8nIC4gZXNjYXBlX3VyaV9vbmx5KCRwYXRoKSBpZiBsZW5ndGggJHBhdGg7CisJJGZ1bGxfdXJsIC49ICcvJyAuICRwYXRoIGlmIGxlbmd0aCAkcGF0aDsKIAlteSAoJHJhLCAkcmVwYXJlbnRlZCk7CiAKLQlpZiAoJG9sZF91cmwgPX4gbSNec3ZuKFwrc3NoKT86Ly8jKSB7CisJaWYgKCRvbGRfdXJsID1+IG0jXnN2bihcK3NzaCk/Oi8vIyB8fAorCSAgICAoJGZ1bGxfdXJsID1+IG0jXmh0dHBzPzovLyMgJiYKKwkgICAgIGVzY2FwZV91cmwoJGZ1bGxfdXJsKSBuZSAkZnVsbF91cmwpKSB7CiAJCSRfWzBdID0gdW5kZWY7CiAJCSRzZWxmID0gdW5kZWY7CiAJCSRSQSA9IHVuZGVmOwpAQCAtNDQzOCw2ICs1MTMzLDcgQEAKIAlteSAoJG1pbiwgJG1heCkgPSAoJGJhc2UsICRoZWFkIDwgJGJhc2UgKyAkaW5jID8gJGhlYWQgOiAkYmFzZSArICRpbmMpOwogCW15ICRsb25nZXN0X3BhdGggPSBsb25nZXN0X2NvbW1vbl9wYXRoKCRnc3YsICRnbG9icyk7CiAJbXkgJHJhX3VybCA9ICRzZWxmLT57dXJsfTsKKwlteSAkZmluZF90cmFpbGluZ19lZGdlOwogCXdoaWxlICgxKSB7CiAJCW15ICVyZXZzOwogCQlteSAkZXJyOwpAQCAtNDQ0OCwxNSArNTE0NCwxNyBAQAogCQl9OwogCQlzdWIgX2NiIHsKIAkJCW15ICgkcGF0aHMsICRyLCAkYXV0aG9yLCAkZGF0ZSwgJGxvZykgPSBAXzsKLQkJCVsgZHVwX2NoYW5nZWRfcGF0aHMoJHBhdGhzKSwKKwkJCVsgJHBhdGhzLAogCQkJICB7IGF1dGhvciA9PiAkYXV0aG9yLCBkYXRlID0+ICRkYXRlLCBsb2cgPT4gJGxvZyB9IF07CiAJCX0KIAkJJHNlbGYtPmdldF9sb2coWyRsb25nZXN0X3BhdGhdLCAkbWluLCAkbWF4LCAwLCAxLCAxLAogCQkgICAgICAgICAgICAgICBzdWIgeyAkcmV2c3skX1sxXX0gPSBfY2IoQF8pIH0pOwogCQlpZiAoJGVycikgewogCQkJcHJpbnQgIkNoZWNrZWQgdGhyb3VnaCByJG1heFxyIjsKKwkJfSBlbHNlIHsKKwkJCSRmaW5kX3RyYWlsaW5nX2VkZ2UgPSAxOwogCQl9Ci0JCWlmICgkZXJyICYmICRtYXggPj0gJGhlYWQpIHsKKwkJaWYgKCRlcnIgYW5kICRmaW5kX3RyYWlsaW5nX2VkZ2UpIHsKIAkJCXByaW50IFNUREVSUiAiUGF0aCAnJGxvbmdlc3RfcGF0aCcgIiwKIAkJCQkgICAgICJ3YXMgcHJvYmFibHkgZGVsZXRlZDpcbiIsCiAJCQkJICAgICAkZXJyLT5leHBhbmRlZF9tZXNzYWdlLApAQCAtNDQ2OCwxMyArNTE2NiwxNCBAQAogCQkJCW15ICRvazsKIAkJCQkkc2VsZi0+Z2V0X2xvZyhbJGxvbmdlc3RfcGF0aF0sICRtaW4sICRoaSwKIAkJCQkgICAgICAgICAgICAgICAwLCAxLCAxLCBzdWIgewotCQkJCSAgICAgICAgICAgICAgICRvayB8fD0gJF9bMV07CisJCQkJICAgICAgICAgICAgICAgJG9rID0gJF9bMV07CiAJCQkJICAgICAgICAgICAgICAgJHJldnN7JF9bMV19ID0gX2NiKEBfKSB9KTsKIAkJCQlpZiAoJG9rKSB7CiAJCQkJCXByaW50IFNUREVSUiAiciRtaW4gLi4gciRvayBPS1xuIjsKIAkJCQkJbGFzdDsKIAkJCQl9CiAJCQl9CisJCQkkZmluZF90cmFpbGluZ19lZGdlID0gMDsKIAkJfQogCQkkU1ZOOjpFcnJvcjo6aGFuZGxlciA9ICRlcnJfaGFuZGxlcjsKIApAQCAtNDU2Nyw2ICs1MjY2LDcgQEAKIAkJCW5leHQgaWYgKGxlbmd0aCAkZy0+e3BhdGh9LT57cmlnaHR9ICYmCiAJCQkJICgkc2VsZi0+Y2hlY2tfcGF0aCgkcCwgJHIpICE9CiAJCQkJICAkU1ZOOjpOb2RlOjpkaXIpKTsKKwkJCW5leHQgdW5sZXNzICRwID1+IC8kZy0+e3BhdGh9LT57cmVnZXh9LzsKIAkJCSRleGlzdHMtPnskcH0gPSBHaXQ6OlNWTi0+aW5pdCgkc2VsZi0+e3VybH0sICRwLCB1bmRlZiwKIAkJCQkJICRnLT57cmVmfS0+ZnVsbF9wYXRoKCRkZSksIDEpOwogCQl9CkBAIC00NjEyLDcgKzUzMTIsMTEgQEAKIAlteSAkYyA9ICcnOwogCWRvIHsKIAkJJHVybCAuPSAiLyRjIiBpZiBsZW5ndGggJGM7Ci0JCWV2YWwgeyAocmVmICRzZWxmKS0+bmV3KCR1cmwpLT5nZXRfbGF0ZXN0X3Jldm51bSB9OworCQlldmFsIHsKKwkJCW15ICRyYSA9IChyZWYgJHNlbGYpLT5uZXcoJHVybCk7CisJCQlteSAkbGF0ZXN0ID0gJHJhLT5nZXRfbGF0ZXN0X3Jldm51bTsKKwkJCSRyYS0+Z2V0X2xvZygiIiwgJGxhdGVzdCwgMCwgMSwgMCwgMSwgc3ViIHt9KTsKKwkJfTsKIAl9IHdoaWxlICgkQCAmJiAoJGMgPSBzaGlmdCBAY29tcG9uZW50cykpOwogCSR1cmw7CiB9CkBAIC00NjY4LDI0ICs1MzcyLDYgQEAKIAlkaWUgIkVycm9yIGZyb20gU1ZOLCAoJGVycm5vKTogIiwgJGVyci0+ZXhwYW5kZWRfbWVzc2FnZSwiXG4iOwogfQogCi0jIHN2bl9sb2dfY2hhbmdlZF9wYXRoX3Qgb2JqZWN0cyBwYXNzZWQgdG8gZ2V0X2xvZyBhcmUgbGlrZWx5IHRvIGJlCi0jIG92ZXJ3cml0dGVuIGV2ZW4gaWYgb25seSB0aGUgcmVmcyBhcmUgY29waWVkIHRvIGFuIGV4dGVybmFsIHZhcmlhYmxlLAotIyBzbyB3ZSBzaG91bGQgZHVwIHRoZSBzdHJ1Y3R1cmVzIGluIHRoZWlyIGVudGlyZXR5LiAgVXNpbmcgYW4gZXh0ZXJuYWxseQotIyBwYXNzZWQgcG9vbCAoaW5zdGVhZCBvZiBvdXIgdGVtcG9yYXJ5IGFuZCBxdWlja2x5IGNsZWFyZWQgcG9vbCBpbgotIyBHaXQ6OlNWTjo6UmEpIGRvZXMgbm90IGhlbHAgbWF0dGVycyBhdCBhbGwuLi4KLXN1YiBkdXBfY2hhbmdlZF9wYXRocyB7Ci0JbXkgKCRwYXRocykgPSBAXzsKLQlyZXR1cm4gdW5kZWYgdW5sZXNzICRwYXRoczsKLQlteSAlcmV0OwotCWZvcmVhY2ggbXkgJHAgKGtleXMgJSRwYXRocykgewotCQlteSAkaSA9ICRwYXRocy0+eyRwfTsKLQkJbXkgJXMgPSBtYXAgeyAkXyA9PiAkaS0+JF8gfQotCQkgICAgICAgICAgICAgIHF3L2NvcHlmcm9tX3BhdGggY29weWZyb21fcmV2IGFjdGlvbi87Ci0JCSRyZXR7JHB9ID0gXCVzOwotCX0KLQlcJXJldDsKLX0KLQogcGFja2FnZSBHaXQ6OlNWTjo6TG9nOwogdXNlIHN0cmljdDsKIHVzZSB3YXJuaW5nczsKQEAgLTQ3NzMsMTcgKzU0NTksMjAgQEAKIAogIyBhZGFwdGVkIGZyb20gcGFnZXIuYwogc3ViIGNvbmZpZ19wYWdlciB7Ci0JJHBhZ2VyIHx8PSAkRU5We0dJVF9QQUdFUn0gfHwgJEVOVntQQUdFUn07Ci0JaWYgKCFkZWZpbmVkICRwYWdlcikgewotCQkkcGFnZXIgPSAnbGVzcyc7Ci0JfSBlbHNpZiAobGVuZ3RoICRwYWdlciA9PSAwIHx8ICRwYWdlciBlcSAnY2F0JykgeworCWlmICghIC10ICpTVERPVVQpIHsKKwkJJEVOVntHSVRfUEFHRVJfSU5fVVNFfSA9ICdmYWxzZSc7CisJCSRwYWdlciA9IHVuZGVmOworCQlyZXR1cm47CisJfQorCWNob21wKCRwYWdlciA9IGNvbW1hbmRfb25lbGluZShxdyh2YXIgR0lUX1BBR0VSKSkpOworCWlmICgkcGFnZXIgZXEgJ2NhdCcpIHsKIAkJJHBhZ2VyID0gdW5kZWY7CiAJfQogCSRFTlZ7R0lUX1BBR0VSX0lOX1VTRX0gPSBkZWZpbmVkKCRwYWdlcik7CiB9CiAKIHN1YiBydW5fcGFnZXIgewotCXJldHVybiB1bmxlc3MgLXQgKlNURE9VVCAmJiBkZWZpbmVkICRwYWdlcjsKKwlyZXR1cm4gdW5sZXNzIGRlZmluZWQgJHBhZ2VyOwogCXBpcGUgbXkgKCRyZmQsICR3ZmQpIG9yIHJldHVybjsKIAlkZWZpbmVkKG15ICRwaWQgPSBmb3JrKSBvciA6OmZhdGFsICJDYW4ndCBmb3JrOiAkISI7CiAJaWYgKCEkcGlkKSB7CkBAIC01MjkwLDcgKzU5NzksNyBAQAogCQkJbXkgJHBmeCA9ICJzdm4tcmVtb3RlLiR4LT57b2xkX3JlcG9faWR9IjsKIAogCQkJbXkgJG9sZF9mZXRjaCA9IHF1b3RlbWV0YSgiJHgtPntvbGRfcGF0aH06Ii4KLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZnMvcmVtb3Rlcy8keC0+e3JlZl9pZH0iKTsKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIiR4LT57cmVmX2lkfSIpOwogCQkJY29tbWFuZF9ub2lzeShxdy9jb25maWcgLS11bnNldC8sCiAJCQkgICAgICAgICAgICAgICIkcGZ4LmZldGNoIiwgJ14nLiAkb2xkX2ZldGNoIC4gJyQnKTsKIAkJCWRlbGV0ZSAkci0+eyR4LT57b2xkX3JlcG9faWR9fS0+CkBAIC01MzU2LDI5ICs2MDQ1LDQ4IEBACiB1c2Ugd2FybmluZ3M7CiAKIHN1YiBuZXcgewotCW15ICgkY2xhc3MsICRnbG9iKSA9IEBfOworCW15ICgkY2xhc3MsICRnbG9iLCAkcGF0dGVybl9vaykgPSBAXzsKIAlteSAkcmUgPSAkZ2xvYjsKIAkkcmUgPX4gcyEvKyQhIWc7ICMgbm8gbmVlZCBmb3IgdHJhaWxpbmcgc2xhc2hlcwotCSRyZSA9fiBtIV4oW14qXSopKFwqKD86L1wqKSopKFteKl0qKSQhOwotCW15ICR0ZW1wID0gJHJlOwotCW15ICgkbGVmdCwgJHJpZ2h0KSA9ICgkMSwgJDMpOwotCSRyZSA9ICQyOwotCW15ICRkZXB0aCA9ICRyZSA9fiB0ci8qLyovOwotCWlmICgkZGVwdGggIT0gJHRlbXAgPX4gdHIvKi8qLykgewotCQlkaWUgIk9ubHkgb25lIHNldCBvZiB3aWxkY2FyZCBkaXJlY3RvcmllcyAiIC4KLQkJCSIoZS5nLiAnKicgb3IgJyovKi8qJykgaXMgc3VwcG9ydGVkOiAnJGdsb2InXG4iOworCW15IChAbGVmdCwgQHJpZ2h0LCBAcGF0dGVybnMpOworCW15ICRzdGF0ZSA9ICJsZWZ0IjsKKwlteSAkZGllX21zZyA9ICJPbmx5IG9uZSBzZXQgb2Ygd2lsZGNhcmQgZGlyZWN0b3JpZXMgIiAuCisJCQkJIihlLmcuICcqJyBvciAnKi8qLyonKSBpcyBzdXBwb3J0ZWQ6ICckZ2xvYidcbiI7CisJZm9yIG15ICRwYXJ0IChzcGxpdChtfC98LCAkZ2xvYikpIHsKKwkJaWYgKCRwYXJ0ID1+IC9cKi8gJiYgJHBhcnQgbmUgIioiKSB7CisJCQlkaWUgIkludmFsaWQgcGF0dGVybiBpbiAnJGdsb2InOiAkcGFydFxuIjsKKwkJfSBlbHNpZiAoJHBhdHRlcm5fb2sgJiYgJHBhcnQgPX4gL1t7fV0vICYmCisJCQkgJHBhcnQgIX4gL15ce1tee31dK1x9LykgeworCQkJZGllICJJbnZhbGlkIHBhdHRlcm4gaW4gJyRnbG9iJzogJHBhcnRcbiI7CisJCX0KKwkJaWYgKCRwYXJ0IGVxICIqIikgeworCQkJZGllICRkaWVfbXNnIGlmICRzdGF0ZSBlcSAicmlnaHQiOworCQkJJHN0YXRlID0gInBhdHRlcm4iOworCQkJcHVzaChAcGF0dGVybnMsICJbXi9dKiIpOworCQl9IGVsc2lmICgkcGF0dGVybl9vayAmJiAkcGFydCA9fiAvXlx7KC4qKVx9JC8pIHsKKwkJCWRpZSAkZGllX21zZyBpZiAkc3RhdGUgZXEgInJpZ2h0IjsKKwkJCSRzdGF0ZSA9ICJwYXR0ZXJuIjsKKwkJCW15ICRwID0gcXVvdGVtZXRhKCQxKTsKKwkJCSRwID1+IHMvXFwsL3wvZzsKKwkJCXB1c2goQHBhdHRlcm5zLCAiKD86JHApIik7CisJCX0gZWxzZSB7CisJCQlpZiAoJHN0YXRlIGVxICJsZWZ0IikgeworCQkJCXB1c2goQGxlZnQsICRwYXJ0KTsKKwkJCX0gZWxzZSB7CisJCQkJcHVzaChAcmlnaHQsICRwYXJ0KTsKKwkJCQkkc3RhdGUgPSAicmlnaHQiOworCQkJfQorCQl9CiAJfQorCW15ICRkZXB0aCA9IEBwYXR0ZXJuczsKIAlpZiAoJGRlcHRoID09IDApIHsKLQkJZGllICJPbmUgJyonIGlzIG5lZWRlZCBmb3IgZ2xvYjogJyRnbG9iJ1xuIjsKKwkJZGllICJPbmUgJyonIGlzIG5lZWRlZCBpbiBnbG9iOiAnJGdsb2InXG4iOwogCX0KLQkkcmUgPX4gcyFcKiFcW14vXF0qIWc7Ci0JJHJlID0gcXVvdGVtZXRhKCRsZWZ0KSAuICIoJHJlKSIgLiBxdW90ZW1ldGEoJHJpZ2h0KTsKLQlpZiAobGVuZ3RoICRsZWZ0ICYmICEoJGxlZnQgPX4gcyEvKyQhIWcpKSB7Ci0JCWRpZSAiTWlzc2luZyB0cmFpbGluZyAnLycgb24gbGVmdCBzaWRlIG9mOiAnJGdsb2InICgkbGVmdClcbiI7Ci0JfQotCWlmIChsZW5ndGggJHJpZ2h0ICYmICEoJHJpZ2h0ID1+IHMhXi8rISFnKSkgewotCQlkaWUgIk1pc3NpbmcgbGVhZGluZyAnLycgb24gcmlnaHQgc2lkZSBvZjogJyRnbG9iJyAoJHJpZ2h0KVxuIjsKLQl9CisJbXkgJGxlZnQgPSBqb2luKCcvJywgQGxlZnQpOworCW15ICRyaWdodCA9IGpvaW4oJy8nLCBAcmlnaHQpOworCSRyZSA9IGpvaW4oJy8nLCBAcGF0dGVybnMpOworCSRyZSA9IGpvaW4oJ1wvJywKKwkJICAgZ3JlcChsZW5ndGgsIHF1b3RlbWV0YSgkbGVmdCksICIoJHJlKSIsIHF1b3RlbWV0YSgkcmlnaHQpKSk7CiAJbXkgJGxlZnRfcmUgPSBxci9eXC9cUSRsZWZ0XEUoXC98JCkvOwogCWJsZXNzIHsgbGVmdCA9PiAkbGVmdCwgcmlnaHQgPT4gJHJpZ2h0LCBsZWZ0X3JlZ2V4ID0+ICRsZWZ0X3JlLAogCSAgICAgICAgcmVnZXggPT4gcXIvJHJlLywgZ2xvYiA9PiAkZ2xvYiwgZGVwdGggPT4gJGRlcHRoIH0sICRjbGFzczsKZGlmZiAtLWdpdCBhL2dpdC13ZWItLWJyb3dzZS5zaCBiL2dpdC13ZWItLWJyb3dzZS5zaAppbmRleCA3ZWQwZmFkLi5hNTc4YzNhIDEwMDc1NQotLS0gYS9naXQtd2ViLS1icm93c2Uuc2gKKysrIGIvZ2l0LXdlYi0tYnJvd3NlLnNoCkBAIC0xMTEsNyArMTExLDggQEAKIAlicm93c2VyX2NhbmRpZGF0ZXM9InczbSBsaW5rcyBseW54IgogICAgIGZpCiAgICAgIyBTRUNVUklUWVNFU1NJT05JRCBpbmRpY2F0ZXMgYW4gT1MgWCBHVUkgbG9naW4gc2Vzc2lvbgotICAgIGlmIHRlc3QgLW4gIiRTRUNVUklUWVNFU1NJT05JRCI7IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIkU0VDVVJJVFlTRVNTSU9OSUQiIFwKKwkgICAgLW8gIiRURVJNX1BST0dSQU0iID0gIkFwcGxlX1Rlcm1pbmFsIiA7IHRoZW4KIAlicm93c2VyX2NhbmRpZGF0ZXM9Im9wZW4gJGJyb3dzZXJfY2FuZGlkYXRlcyIKICAgICBmaQogICAgICMgL2Jpbi9zdGFydCBpbmRpY2F0ZXMgTWluR1cKQEAgLTE2MSw5ICsxNjIsMTIgQEAKIAkJOzsKIAllc2FjCiAJOzsKLSAgICB3M218bGlua3N8bHlueHxvcGVufHN0YXJ0KQorICAgIHczbXxsaW5rc3xseW54fG9wZW4pCiAJZXZhbCAiJGJyb3dzZXJfcGF0aCIgIiRAIgogCTs7CisgICAgc3RhcnQpCisgICAgICAgIGV4ZWMgIiRicm93c2VyX3BhdGgiICcid2ViLWJyb3dzZSInICIkQCIKKyAgICAgICAgOzsKICAgICBkaWxsbykKIAkiJGJyb3dzZXJfcGF0aCIgIiRAIiAmCiAJOzsKZGlmZiAtLWdpdCBhL2dpdC5jIGIvZ2l0LmMKaW5kZXggNWEwMDcyNi4uYzQ0NWQ3YiAxMDA2NDQKLS0tIGEvZ2l0LmMKKysrIGIvZ2l0LmMKQEAgLTUsNyArNSwxMCBAQAogI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCiAKIGNvbnN0IGNoYXIgZ2l0X3VzYWdlX3N0cmluZ1tdID0KLQkiZ2l0IFstLXZlcnNpb25dIFstLWV4ZWMtcGF0aFs9R0lUX0VYRUNfUEFUSF1dIFstLWh0bWwtcGF0aF0gWy1wfC0tcGFnaW5hdGV8LS1uby1wYWdlcl0gWy0tYmFyZV0gWy0tZ2l0LWRpcj1HSVRfRElSXSBbLS13b3JrLXRyZWU9R0lUX1dPUktfVFJFRV0gWy0taGVscF0gQ09NTUFORCBbQVJHU10iOworCSJnaXQgWy0tdmVyc2lvbl0gWy0tZXhlYy1wYXRoWz1HSVRfRVhFQ19QQVRIXV0gWy0taHRtbC1wYXRoXVxuIgorCSIgICAgICAgICAgIFstcHwtLXBhZ2luYXRlfC0tbm8tcGFnZXJdIFstLW5vLXJlcGxhY2Utb2JqZWN0c11cbiIKKwkiICAgICAgICAgICBbLS1iYXJlXSBbLS1naXQtZGlyPUdJVF9ESVJdIFstLXdvcmstdHJlZT1HSVRfV09SS19UUkVFXVxuIgorCSIgICAgICAgICAgIFstLWhlbHBdIENPTU1BTkQgW0FSR1NdIjsKIAogY29uc3QgY2hhciBnaXRfbW9yZV9pbmZvX3N0cmluZ1tdID0KIAkiU2VlICdnaXQgaGVscCBDT01NQU5EJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBhIHNwZWNpZmljIGNvbW1hbmQuIjsKQEAgLTg0LDYgKzg3LDExIEBACiAJCQl1c2VfcGFnZXIgPSAwOwogCQkJaWYgKGVudmNoYW5nZWQpCiAJCQkJKmVudmNoYW5nZWQgPSAxOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiLS1uby1yZXBsYWNlLW9iamVjdHMiKSkgeworCQkJcmVhZF9yZXBsYWNlX3JlZnMgPSAwOworCQkJc2V0ZW52KE5PX1JFUExBQ0VfT0JKRUNUU19FTlZJUk9OTUVOVCwgIjEiLCAxKTsKKwkJCWlmIChlbnZjaGFuZ2VkKQorCQkJCSplbnZjaGFuZ2VkID0gMTsKIAkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi0tZ2l0LWRpciIpKSB7CiAJCQlpZiAoKmFyZ2MgPCAyKSB7CiAJCQkJZnByaW50ZihzdGRlcnIsICJObyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0tZ2l0LWRpci5cbiIgKTsKQEAgLTE4OCwxMCArMTk2LDkgQEAKIAkJCQkgIGFsaWFzX2NvbW1hbmQpOwogCiAJCW5ld19hcmd2ID0geHJlYWxsb2MobmV3X2FyZ3YsIHNpemVvZihjaGFyICopICoKLQkJCQkgICAgKGNvdW50ICsgKmFyZ2NwICsgMSkpOworCQkJCSAgICAoY291bnQgKyAqYXJnY3ApKTsKIAkJLyogaW5zZXJ0IGFmdGVyIGNvbW1hbmQgbmFtZSAqLwogCQltZW1jcHkobmV3X2FyZ3YgKyBjb3VudCwgKmFyZ3YgKyAxLCBzaXplb2YoY2hhciAqKSAqICphcmdjcCk7Ci0JCW5ld19hcmd2W2NvdW50KyphcmdjcF0gPSBOVUxMOwogCiAJCSphcmd2ID0gbmV3X2FyZ3Y7CiAJCSphcmdjcCArPSBjb3VudCAtIDE7CkBAIC0yMDAsNyArMjA3LDcgQEAKIAl9CiAKIAlpZiAoc3ViZGlyICYmIGNoZGlyKHN1YmRpcikpCi0JCWRpZSgiQ2Fubm90IGNoYW5nZSB0byAlczogJXMiLCBzdWJkaXIsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiQ2Fubm90IGNoYW5nZSB0byAnJXMnIiwgc3ViZGlyKTsKIAogCWVycm5vID0gc2F2ZWRfZXJybm87CiAKQEAgLTIyNSwyOCArMjMyLDMxIEBACiAKIHN0YXRpYyBpbnQgcnVuX2J1aWx0aW4oc3RydWN0IGNtZF9zdHJ1Y3QgKnAsIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKLQlpbnQgc3RhdHVzOworCWludCBzdGF0dXMsIGhlbHA7CiAJc3RydWN0IHN0YXQgc3Q7CiAJY29uc3QgY2hhciAqcHJlZml4OwogCiAJcHJlZml4ID0gTlVMTDsKLQlpZiAocC0+b3B0aW9uICYgUlVOX1NFVFVQKQotCQlwcmVmaXggPSBzZXR1cF9naXRfZGlyZWN0b3J5KCk7CisJaGVscCA9IGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItaCIpOworCWlmICghaGVscCkgeworCQlpZiAocC0+b3B0aW9uICYgUlVOX1NFVFVQKQorCQkJcHJlZml4ID0gc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOwogCi0JaWYgKHVzZV9wYWdlciA9PSAtMSAmJiBwLT5vcHRpb24gJiBSVU5fU0VUVVApCi0JCXVzZV9wYWdlciA9IGNoZWNrX3BhZ2VyX2NvbmZpZyhwLT5jbWQpOwotCWlmICh1c2VfcGFnZXIgPT0gLTEgJiYgcC0+b3B0aW9uICYgVVNFX1BBR0VSKQotCQl1c2VfcGFnZXIgPSAxOworCQlpZiAodXNlX3BhZ2VyID09IC0xICYmIHAtPm9wdGlvbiAmIFJVTl9TRVRVUCkKKwkJCXVzZV9wYWdlciA9IGNoZWNrX3BhZ2VyX2NvbmZpZyhwLT5jbWQpOworCQlpZiAodXNlX3BhZ2VyID09IC0xICYmIHAtPm9wdGlvbiAmIFVTRV9QQUdFUikKKwkJCXVzZV9wYWdlciA9IDE7CisJfQogCWNvbW1pdF9wYWdlcl9jaG9pY2UoKTsKIAotCWlmIChwLT5vcHRpb24gJiBORUVEX1dPUktfVFJFRSkKKwlpZiAoIWhlbHAgJiYgcC0+b3B0aW9uICYgTkVFRF9XT1JLX1RSRUUpCiAJCXNldHVwX3dvcmtfdHJlZSgpOwogCiAJdHJhY2VfYXJndl9wcmludGYoYXJndiwgInRyYWNlOiBidWlsdC1pbjogZ2l0Iik7CiAKIAlzdGF0dXMgPSBwLT5mbihhcmdjLCBhcmd2LCBwcmVmaXgpOwogCWlmIChzdGF0dXMpCi0JCXJldHVybiBzdGF0dXMgJiAweGZmOworCQlyZXR1cm4gc3RhdHVzOwogCiAJLyogU29tZWJvZHkgY2xvc2VkIHN0ZG91dD8gKi8KIAlpZiAoZnN0YXQoZmlsZW5vKHN0ZG91dCksICZzdCkpCkBAIC0yNTcsMTEgKzI2NywxMSBAQAogCiAJLyogQ2hlY2sgZm9yIEVOT1NQQyBhbmQgRUlPIGVycm9ycy4uICovCiAJaWYgKGZmbHVzaChzdGRvdXQpKQotCQlkaWUoIndyaXRlIGZhaWx1cmUgb24gc3RhbmRhcmQgb3V0cHV0OiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygid3JpdGUgZmFpbHVyZSBvbiBzdGFuZGFyZCBvdXRwdXQiKTsKIAlpZiAoZmVycm9yKHN0ZG91dCkpCiAJCWRpZSgidW5rbm93biB3cml0ZSBmYWlsdXJlIG9uIHN0YW5kYXJkIG91dHB1dCIpOwogCWlmIChmY2xvc2Uoc3Rkb3V0KSkKLQkJZGllKCJjbG9zZSBmYWlsZWQgb24gc3RhbmRhcmQgb3V0cHV0OiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiY2xvc2UgZmFpbGVkIG9uIHN0YW5kYXJkIG91dHB1dCIpOwogCXJldHVybiAwOwogfQogCkBAIC0zMDAsNyArMzEwLDYgQEAKIAkJeyAiZmFzdC1leHBvcnQiLCBjbWRfZmFzdF9leHBvcnQsIFJVTl9TRVRVUCB9LAogCQl7ICJmZXRjaCIsIGNtZF9mZXRjaCwgUlVOX1NFVFVQIH0sCiAJCXsgImZldGNoLXBhY2siLCBjbWRfZmV0Y2hfcGFjaywgUlVOX1NFVFVQIH0sCi0JCXsgImZldGNoLS10b29sIiwgY21kX2ZldGNoX190b29sLCBSVU5fU0VUVVAgfSwKIAkJeyAiZm10LW1lcmdlLW1zZyIsIGNtZF9mbXRfbWVyZ2VfbXNnLCBSVU5fU0VUVVAgfSwKIAkJeyAiZm9yLWVhY2gtcmVmIiwgY21kX2Zvcl9lYWNoX3JlZiwgUlVOX1NFVFVQIH0sCiAJCXsgImZvcm1hdC1wYXRjaCIsIGNtZF9mb3JtYXRfcGF0Y2gsIFJVTl9TRVRVUCB9LApAQCAtMzA5LDEwICszMTgsOSBAQAogCQl7ICJnYyIsIGNtZF9nYywgUlVOX1NFVFVQIH0sCiAJCXsgImdldC10YXItY29tbWl0LWlkIiwgY21kX2dldF90YXJfY29tbWl0X2lkIH0sCiAJCXsgImdyZXAiLCBjbWRfZ3JlcCwgUlVOX1NFVFVQIHwgVVNFX1BBR0VSIH0sCisJCXsgImhhc2gtb2JqZWN0IiwgY21kX2hhc2hfb2JqZWN0IH0sCiAJCXsgImhlbHAiLCBjbWRfaGVscCB9LAotI2lmbmRlZiBOT19DVVJMCi0JCXsgImh0dHAtZmV0Y2giLCBjbWRfaHR0cF9mZXRjaCwgUlVOX1NFVFVQIH0sCi0jZW5kaWYKKwkJeyAiaW5kZXgtcGFjayIsIGNtZF9pbmRleF9wYWNrIH0sCiAJCXsgImluaXQiLCBjbWRfaW5pdF9kYiB9LAogCQl7ICJpbml0LWRiIiwgY21kX2luaXRfZGIgfSwKIAkJeyAibG9nIiwgY21kX2xvZywgUlVOX1NFVFVQIHwgVVNFX1BBR0VSIH0sCkBAIC0zMjQsMTIgKzMzMiwyMCBAQAogCQl7ICJtZXJnZSIsIGNtZF9tZXJnZSwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKIAkJeyAibWVyZ2UtYmFzZSIsIGNtZF9tZXJnZV9iYXNlLCBSVU5fU0VUVVAgfSwKIAkJeyAibWVyZ2UtZmlsZSIsIGNtZF9tZXJnZV9maWxlIH0sCisJCXsgIm1lcmdlLWluZGV4IiwgY21kX21lcmdlX2luZGV4LCBSVU5fU0VUVVAgfSwKIAkJeyAibWVyZ2Utb3VycyIsIGNtZF9tZXJnZV9vdXJzLCBSVU5fU0VUVVAgfSwKIAkJeyAibWVyZ2UtcmVjdXJzaXZlIiwgY21kX21lcmdlX3JlY3Vyc2l2ZSwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKKwkJeyAibWVyZ2UtcmVjdXJzaXZlLW91cnMiLCBjbWRfbWVyZ2VfcmVjdXJzaXZlLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LAorCQl7ICJtZXJnZS1yZWN1cnNpdmUtdGhlaXJzIiwgY21kX21lcmdlX3JlY3Vyc2l2ZSwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKIAkJeyAibWVyZ2Utc3VidHJlZSIsIGNtZF9tZXJnZV9yZWN1cnNpdmUsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJCXsgIm1lcmdlLXRyZWUiLCBjbWRfbWVyZ2VfdHJlZSwgUlVOX1NFVFVQIH0sCisJCXsgIm1rdGFnIiwgY21kX21rdGFnLCBSVU5fU0VUVVAgfSwKKwkJeyAibWt0cmVlIiwgY21kX21rdHJlZSwgUlVOX1NFVFVQIH0sCiAJCXsgIm12IiwgY21kX212LCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LAogCQl7ICJuYW1lLXJldiIsIGNtZF9uYW1lX3JldiwgUlVOX1NFVFVQIH0sCiAJCXsgInBhY2stb2JqZWN0cyIsIGNtZF9wYWNrX29iamVjdHMsIFJVTl9TRVRVUCB9LAorCQl7ICJwYWNrLXJlZHVuZGFudCIsIGNtZF9wYWNrX3JlZHVuZGFudCwgUlVOX1NFVFVQIH0sCisJCXsgInBhdGNoLWlkIiwgY21kX3BhdGNoX2lkIH0sCiAJCXsgInBlZWstcmVtb3RlIiwgY21kX2xzX3JlbW90ZSB9LAogCQl7ICJwaWNrYXhlIiwgY21kX2JsYW1lLCBSVU5fU0VUVVAgfSwKIAkJeyAicHJ1bmUiLCBjbWRfcHJ1bmUsIFJVTl9TRVRVUCB9LApAQCAtMzM5LDYgKzM1NSw3IEBACiAJCXsgInJlY2VpdmUtcGFjayIsIGNtZF9yZWNlaXZlX3BhY2sgfSwKIAkJeyAicmVmbG9nIiwgY21kX3JlZmxvZywgUlVOX1NFVFVQIH0sCiAJCXsgInJlbW90ZSIsIGNtZF9yZW1vdGUsIFJVTl9TRVRVUCB9LAorCQl7ICJyZXBsYWNlIiwgY21kX3JlcGxhY2UsIFJVTl9TRVRVUCB9LAogCQl7ICJyZXBvLWNvbmZpZyIsIGNtZF9jb25maWcgfSwKIAkJeyAicmVyZXJlIiwgY21kX3JlcmVyZSwgUlVOX1NFVFVQIH0sCiAJCXsgInJlc2V0IiwgY21kX3Jlc2V0LCBSVU5fU0VUVVAgfSwKQEAgLTM1NSwxMCArMzcyLDEzIEBACiAJCXsgInN5bWJvbGljLXJlZiIsIGNtZF9zeW1ib2xpY19yZWYsIFJVTl9TRVRVUCB9LAogCQl7ICJ0YWciLCBjbWRfdGFnLCBSVU5fU0VUVVAgfSwKIAkJeyAidGFyLXRyZWUiLCBjbWRfdGFyX3RyZWUgfSwKKwkJeyAidW5wYWNrLWZpbGUiLCBjbWRfdW5wYWNrX2ZpbGUsIFJVTl9TRVRVUCB9LAogCQl7ICJ1bnBhY2stb2JqZWN0cyIsIGNtZF91bnBhY2tfb2JqZWN0cywgUlVOX1NFVFVQIH0sCiAJCXsgInVwZGF0ZS1pbmRleCIsIGNtZF91cGRhdGVfaW5kZXgsIFJVTl9TRVRVUCB9LAogCQl7ICJ1cGRhdGUtcmVmIiwgY21kX3VwZGF0ZV9yZWYsIFJVTl9TRVRVUCB9LAorCQl7ICJ1cGRhdGUtc2VydmVyLWluZm8iLCBjbWRfdXBkYXRlX3NlcnZlcl9pbmZvLCBSVU5fU0VUVVAgfSwKIAkJeyAidXBsb2FkLWFyY2hpdmUiLCBjbWRfdXBsb2FkX2FyY2hpdmUgfSwKKwkJeyAidmFyIiwgY21kX3ZhciB9LAogCQl7ICJ2ZXJpZnktdGFnIiwgY21kX3ZlcmlmeV90YWcsIFJVTl9TRVRVUCB9LAogCQl7ICJ2ZXJzaW9uIiwgY21kX3ZlcnNpb24gfSwKIAkJeyAid2hhdGNoYW5nZWQiLCBjbWRfd2hhdGNoYW5nZWQsIFJVTl9TRVRVUCB8IFVTRV9QQUdFUiB9LApAQCAtNDE2LDEzICs0MzYsOSBAQAogCSAqIGlmIHdlIGZhaWwgYmVjYXVzZSB0aGUgY29tbWFuZCBpcyBub3QgZm91bmQsIGl0IGlzCiAJICogT0sgdG8gcmV0dXJuLiBPdGhlcndpc2UsIHdlIGp1c3QgcGFzcyBhbG9uZyB0aGUgc3RhdHVzIGNvZGUuCiAJICovCi0Jc3RhdHVzID0gcnVuX2NvbW1hbmRfdl9vcHQoYXJndiwgMCk7Ci0JaWYgKHN0YXR1cyAhPSAtRVJSX1JVTl9DT01NQU5EX0VYRUMpIHsKLQkJaWYgKElTX1JVTl9DT01NQU5EX0VSUihzdGF0dXMpKQotCQkJZGllKCJ1bmFibGUgdG8gcnVuICclcyciLCBhcmd2WzBdKTsKLQkJZXhpdCgtc3RhdHVzKTsKLQl9Ci0JZXJybm8gPSBFTk9FTlQ7IC8qIGFzIGlmIHdlIGNhbGxlZCBleGVjdnAgKi8KKwlzdGF0dXMgPSBydW5fY29tbWFuZF92X29wdChhcmd2LCBSVU5fU0lMRU5UX0VYRUNfRkFJTFVSRSk7CisJaWYgKHN0YXR1cyA+PSAwIHx8IGVycm5vICE9IEVOT0VOVCkKKwkJZXhpdChzdGF0dXMpOwogCiAJYXJndlswXSA9IHRtcDsKIApAQCAtNTExLDcgKzUyNyw3IEBACiAJCQlicmVhazsKIAkJaWYgKHdhc19hbGlhcykgewogCQkJZnByaW50ZihzdGRlcnIsICJFeHBhbnNpb24gb2YgYWxpYXMgJyVzJyBmYWlsZWQ7ICIKLQkJCQkiJyVzJyBpcyBub3QgYSBnaXQtY29tbWFuZFxuIiwKKwkJCQkiJyVzJyBpcyBub3QgYSBnaXQgY29tbWFuZFxuIiwKIAkJCQljbWQsIGFyZ3ZbMF0pOwogCQkJZXhpdCgxKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZ2l0LnNwZWMuaW4gYi9naXQuc3BlYy5pbgppbmRleCA0YmUwODM0Li5lZTc0YTVlIDEwMDY0NAotLS0gYS9naXQuc3BlYy5pbgorKysgYi9naXQuc3BlYy5pbgpAQCAtOTgsNiArOTgsNyBAQAogUGVybCBpbnRlcmZhY2UgdG8gR2l0CiAKICVkZWZpbmUgcGF0aF9zZXR0aW5ncyBFVENfR0lUQ09ORklHPS9ldGMvZ2l0Y29uZmlnIHByZWZpeD0le19wcmVmaXh9IG1hbmRpcj0le19tYW5kaXJ9IGh0bWxkaXI9JXtfZG9jZGlyfS8le25hbWV9LSV7dmVyc2lvbn0KKyV7IT9weXRob25fc2l0ZWxpYjogJWdsb2JhbCBweXRob25fc2l0ZWxpYiAlKCV7X19weXRob259IC1jICJmcm9tIGRpc3R1dGlscy5zeXNjb25maWcgaW1wb3J0IGdldF9weXRob25fbGliOyBwcmludCBnZXRfcHl0aG9uX2xpYigpIil9CiAKICVwcmVwCiAlc2V0dXAgLXEKQEAgLTExMiw2ICsxMTMsNyBAQAogbWFrZSAle19zbXBfbWZsYWdzfSBDRkxBR1M9IiRSUE1fT1BUX0ZMQUdTIiBERVNURElSPSRSUE1fQlVJTERfUk9PVCBcCiAgICAgICV7cGF0aF9zZXR0aW5nc30gXAogICAgICBJTlNUQUxMRElSUz12ZW5kb3IgaW5zdGFsbCAleyE/X3dpdGhvdXRfZG9jczogaW5zdGFsbC1kb2N9Cit0ZXN0ICEgLWQgJFJQTV9CVUlMRF9ST09UJXtweXRob25fc2l0ZWxpYn0gfHwgcm0gLWZyICRSUE1fQlVJTERfUk9PVCV7cHl0aG9uX3NpdGVsaWJ9CiBmaW5kICRSUE1fQlVJTERfUk9PVCAtdHlwZSBmIC1uYW1lIC5wYWNrbGlzdCAtZXhlYyBybSAtZiB7fSAnOycKIGZpbmQgJFJQTV9CVUlMRF9ST09UIC10eXBlIGYgLW5hbWUgJyouYnMnIC1lbXB0eSAtZXhlYyBybSAtZiB7fSAnOycKIGZpbmQgJFJQTV9CVUlMRF9ST09UIC10eXBlIGYgLW5hbWUgcGVybGxvY2FsLnBvZCAtZXhlYyBybSAtZiB7fSAnOycKQEAgLTE5MCw2ICsxOTIsMTIgQEAKICMgTm8gZmlsZXMgZm9yIHlvdSEKIAogJWNoYW5nZWxvZworKiBTdW4gSmFuIDMxIDIwMTAgSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgorLSBEbyBub3QgdXNlICVkZWZpbmUgaW5zaWRlICV7IT8uLi59IGNvbnN0cnVjdC4KKworKiBTYXQgSmFuIDMwIDIwMTAgSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgorLSBXZSBkb24ndCBzaGlwIFB5dGhvbiBiaXRzIHVudGlsIGEgcmVhbCBmb3JlaWduIHNjbSBpbnRlcmZhY2UgY29tZXMuCisKICogTW9uIEZlYiAwNCAyMDA5IERhdmlkIEouIE1lbGxvciA8ZG1lbGxvckB3aGlzdGxpbmdjYXQuY29tPgogLSBmaXhlZCBicm9rZW4gZ2l0IGhlbHAgLXcgYWZ0ZXIgcmVuYW1pbmcgdGhlIGdpdC1jb3JlIHBhY2thZ2UgdG8gZ2l0LgogCkBAIC0yMzMsNyArMjQxLDcgQEAKICogVHVlIE1hciAyNyAyMDA3IEV5Z2VuZSBSeWFiaW5raW4gPHJlYS1naXRAY29kZWxhYnMucnU+CiAtIEFkZGVkIHRoZSBnaXQtcDQgcGFja2FnZTogUGVyZm9yY2UgaW1wb3J0IHN0dWZmLgogCi0qIE1vbiBGZWIgMTMgMjAwNyBOaWNvbGFzIFBpdHJlIDxuaWNvQGNhbS5vcmc+CisqIE1vbiBGZWIgMTMgMjAwNyBOaWNvbGFzIFBpdHJlIDxuaWNvQGZsdXhuaWMubmV0PgogLSBVcGRhdGUgY29yZSBwYWNrYWdlIGRlc2NyaXB0aW9uIChHaXQgaXNuJ3QgYXMgc3R1cGlkIGFzIGl0IHVzZWQgdG8gYmUpCiAKICogTW9uIEZlYiAxMiAyMDA3IEp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4KZGlmZiAtLWdpdCBhL2dpdF9yZW1vdGVfaGVscGVycy8uZ2l0aWdub3JlIGIvZ2l0X3JlbW90ZV9oZWxwZXJzLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI0N2Q1ZgotLS0gL2Rldi9udWxsCisrKyBiL2dpdF9yZW1vdGVfaGVscGVycy8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMiBAQAorL2J1aWxkCisvZGlzdApkaWZmIC0tZ2l0IGEvZ2l0X3JlbW90ZV9oZWxwZXJzL01ha2VmaWxlIGIvZ2l0X3JlbW90ZV9oZWxwZXJzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MmRmZDAKLS0tIC9kZXYvbnVsbAorKysgYi9naXRfcmVtb3RlX2hlbHBlcnMvTWFrZWZpbGUKQEAgLTAsMCArMSwzNSBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIGdpdF9yZW1vdGVfaGVscGVycyBweXRob24gc3VwcG9ydCBtb2R1bGVzCisjCitweXNldHVwZmlsZTo9c2V0dXAucHkKKworIyBTaGVsbCBxdW90ZSAoZG8gbm90IHVzZSAkKGNhbGwpIHRvIGFjY29tbW9kYXRlIGFuY2llbnQgc2V0dXBzKTsKK0RFU1RESVJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKERFU1RESVIpKQorCitpZm5kZWYgUFlUSE9OX1BBVEgKKwlQWVRIT05fUEFUSCA9IC91c3IvYmluL3B5dGhvbgorZW5kaWYKK2lmbmRlZiBwcmVmaXgKKwlwcmVmaXggPSAkKEhPTUUpCitlbmRpZgoraWZuZGVmIFYKKwlRVUlFVCA9IEAKKwlRVUlFVFNFVFVQID0gLS1xdWlldAorZW5kaWYKKworUFlMSUJESVI9JChzaGVsbCAkKFBZVEhPTl9QQVRIKSAtYyBcCisJICJpbXBvcnQgc3lzOyBcCisJIHByaW50ICdsaWIvcHl0aG9uJWkuJWkvc2l0ZS1wYWNrYWdlcycgJSBzeXMudmVyc2lvbl9pbmZvWzoyXSIpCisKK2FsbDogJChweXNldHVwZmlsZSkKKwkkKFFVSUVUKSQoUFlUSE9OX1BBVEgpICQocHlzZXR1cGZpbGUpICQoUVVJRVRTRVRVUCkgYnVpbGQKKworaW5zdGFsbDogJChweXNldHVwZmlsZSkKKwkkKFBZVEhPTl9QQVRIKSAkKHB5c2V0dXBmaWxlKSBpbnN0YWxsIC0tcHJlZml4ICQoREVTVERJUl9TUSkkKHByZWZpeCkKKworaW5zdGxpYmRpcjogJChweXNldHVwZmlsZSkKKwlAZWNobyAiJChERVNURElSX1NRKSQocHJlZml4KS8kKFBZTElCRElSKSIKKworY2xlYW46CisJJChRVUlFVCkkKFBZVEhPTl9QQVRIKSAkKHB5c2V0dXBmaWxlKSAkKFFVSUVUU0VUVVApIGNsZWFuIC1hCisJJChSTSkgKi5weW8gKi5weWMKZGlmZiAtLWdpdCBhL2dpdF9yZW1vdGVfaGVscGVycy9fX2luaXRfXy5weSBiL2dpdF9yZW1vdGVfaGVscGVycy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGY2OWNiCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0X3JlbW90ZV9oZWxwZXJzL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisiIiJTdXBwb3J0IGxpYnJhcnkgcGFja2FnZSBmb3IgZ2l0IHJlbW90ZSBoZWxwZXJzLgorCitHaXQgcmVtb3RlIGhlbHBlcnMgYXJlIGhlbHBlciBjb21tYW5kcyB0aGF0IGludGVyZmFjZXMgd2l0aCBhIG5vbi1naXQKK3JlcG9zaXRvcnkgdG8gcHJvdmlkZSBhdXRvbWF0aWMgaW1wb3J0IG9mIG5vbi1naXQgaGlzdG9yeSBpbnRvIGEgR2l0CityZXBvc2l0b3J5LgorCitUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHN1cHBvcnQgbGlicmFyeSBuZWVkZWQgYnkgdGhlc2UgaGVscGVycy4uCitUaGUgZm9sbG93aW5nIG1vZHVsZXMgYXJlIGluY2x1ZGVkOgorCistIGdpdC5naXQgLSBJbnRlcmFjdGlvbiB3aXRoIEdpdCByZXBvc2l0b3JpZXMKKworLSB1dGlsIC0gR2VuZXJhbCB1dGlsaXR5IGZ1bmN0aW9uYWxpdHkgdXNlIGJ5IHRoZSBvdGhlciBtb2R1bGVzIGluCisgICAgICAgICB0aGlzIHBhY2thZ2UsIGFuZCBhbHNvIHVzZWQgZGlyZWN0bHkgYnkgdGhlIGhlbHBlcnMuCisiIiIKZGlmZiAtLWdpdCBhL2dpdF9yZW1vdGVfaGVscGVycy9naXQvX19pbml0X18ucHkgYi9naXRfcmVtb3RlX2hlbHBlcnMvZ2l0L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9naXRfcmVtb3RlX2hlbHBlcnMvZ2l0L19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS9naXRfcmVtb3RlX2hlbHBlcnMvZ2l0L2dpdC5weSBiL2dpdF9yZW1vdGVfaGVscGVycy9naXQvZ2l0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzODNlNmMKLS0tIC9kZXYvbnVsbAorKysgYi9naXRfcmVtb3RlX2hlbHBlcnMvZ2l0L2dpdC5weQpAQCAtMCwwICsxLDY3OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyIiIkZ1bmN0aW9uYWxpdHkgZm9yIGludGVyYWN0aW5nIHdpdGggR2l0IHJlcG9zaXRvcmllcy4KKworVGhpcyBtb2R1bGUgcHJvdmlkZXMgY2xhc3NlcyBmb3IgaW50ZXJmYWNpbmcgd2l0aCBhIEdpdCByZXBvc2l0b3J5LgorIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgdGltZQorZnJvbSBiaW5hc2NpaSBpbXBvcnQgaGV4bGlmeQorZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBnaXRfcmVtb3RlX2hlbHBlcnMudXRpbCBpbXBvcnQgZGVidWcsIGVycm9yLCBkaWUsIHN0YXJ0X2NvbW1hbmQsIHJ1bl9jb21tYW5kCisKKworZGVmIGdldF9naXRfZGlyICgpOgorICAgICIiIlJldHVybiB0aGUgcGF0aCB0byB0aGUgR0lUX0RJUiBmb3IgdGhpcyByZXBvLiIiIgorICAgIGFyZ3MgPSAoImdpdCIsICJyZXYtcGFyc2UiLCAiLS1naXQtZGlyIikKKyAgICBleGl0X2NvZGUsIG91dHB1dCwgZXJyb3JzID0gcnVuX2NvbW1hbmQoYXJncykKKyAgICBpZiBleGl0X2NvZGU6CisgICAgICAgIGRpZSgiRmFpbGVkIHRvIHJldHJpZXZlIGdpdCBkaXIiKQorICAgIGFzc2VydCBub3QgZXJyb3JzCisgICAgcmV0dXJuIG91dHB1dC5zdHJpcCgpCisKKworZGVmIHBhcnNlX2dpdF9jb25maWcgKCk6CisgICAgIiIiUmV0dXJuIGEgZGljdCBjb250YWluaW5nIHRoZSBwYXJzZWQgdmVyc2lvbiBvZiAnZ2l0IGNvbmZpZyAtbCcuIiIiCisgICAgZXhpdF9jb2RlLCBvdXRwdXQsIGVycm9ycyA9IHJ1bl9jb21tYW5kKCgiZ2l0IiwgImNvbmZpZyIsICIteiIsICItbCIpKQorICAgIGlmIGV4aXRfY29kZToKKyAgICAgICAgZGllKCJGYWlsZWQgdG8gcmV0cmlldmUgZ2l0IGNvbmZpZ3VyYXRpb24iKQorICAgIGFzc2VydCBub3QgZXJyb3JzCisgICAgcmV0dXJuIGRpY3QoW2Uuc3BsaXQoJ1xuJywgMSkgZm9yIGUgaW4gb3V0cHV0LnNwbGl0KCJcMCIpIGlmIGVdKQorCisKK2RlZiBnaXRfY29uZmlnX2Jvb2wgKHZhbHVlKToKKyAgICAiIiJDb252ZXJ0IHRoZSBnaXZlbiBnaXQgY29uZmlnIHN0cmluZyB2YWx1ZSB0byBUcnVlIG9yIEZhbHNlLgorCisgICAgUmFpc2UgVmFsdWVFcnJvciBpZiB0aGUgZ2l2ZW4gc3RyaW5nIHdhcyBub3QgcmVjb2duaXplZCBhcyBhCisgICAgYm9vbGVhbiB2YWx1ZS4KKworICAgICIiIgorICAgIG5vcm1fdmFsdWUgPSBzdHIodmFsdWUpLnN0cmlwKCkubG93ZXIoKQorICAgIGlmIG5vcm1fdmFsdWUgaW4gKCJ0cnVlIiwgIjEiLCAieWVzIiwgIm9uIiwgIiIpOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGlmIG5vcm1fdmFsdWUgaW4gKCJmYWxzZSIsICIwIiwgIm5vIiwgIm9mZiIsICJub25lIik6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIHJhaXNlIFZhbHVlRXJyb3IoIkZhaWxlZCB0byBwYXJzZSAnJXMnIGludG8gYSBib29sZWFuIHZhbHVlIiAlICh2YWx1ZSkpCisKKworZGVmIHZhbGlkX2dpdF9yZWYgKHJlZl9uYW1lKToKKyAgICAiIiJSZXR1cm4gVHJ1ZSBpZmYgdGhlIGdpdmVuIHJlZiBuYW1lIGlzIGEgdmFsaWQgZ2l0IHJlZiBuYW1lLiIiIgorICAgICMgVGhlIGZvbGxvd2luZyBpcyBhIHJlaW1wbGVtZW50YXRpb24gb2YgdGhlIGdpdCBjaGVjay1yZWYtZm9ybWF0CisgICAgIyBjb21tYW5kLiAgVGhlIHJ1bGVzIHdlcmUgZGVyaXZlZCBmcm9tIHRoZSBnaXQgY2hlY2stcmVmLWZvcm1hdCgxKQorICAgICMgbWFudWFsIHBhZ2UuICBUaGlzIGNvZGUgc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGEgY2FsbCB0bworICAgICMgY2hlY2tfcmVmX2Zvcm1hdCgpIGluIHRoZSBnaXQgbGlicmFyeSwgd2hlbiBzdWNoIGlzIGF2YWlsYWJsZS4KKyAgICBpZiByZWZfbmFtZS5lbmRzd2l0aCgnLycpIG9yIFwKKyAgICAgICByZWZfbmFtZS5zdGFydHN3aXRoKCcuJykgb3IgXAorICAgICAgIHJlZl9uYW1lLmNvdW50KCcvLicpIG9yIFwKKyAgICAgICByZWZfbmFtZS5jb3VudCgnLi4nKSBvciBcCisgICAgICAgcmVmX25hbWUuZW5kc3dpdGgoJy5sb2NrJyk6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGZvciBjIGluIHJlZl9uYW1lOgorICAgICAgICBpZiBvcmQoYykgPCAweDIwIG9yIG9yZChjKSA9PSAweDdmIG9yIGMgaW4gIiB+Xjo/KlsiOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIFRydWUKKworCitjbGFzcyBHaXRPYmplY3RGZXRjaGVyKG9iamVjdCk6CisKKyAgICAiIiJQcm92aWRlIHBhcnNlZCBhY2Nlc3MgdG8gJ2dpdCBjYXQtZmlsZSAtLWJhdGNoJy4KKworICAgIFRoaXMgcHJvdmlkZXMgYSByZWFkLW9ubHkgaW50ZXJmYWNlIHRvIHRoZSBHaXQgb2JqZWN0IGRhdGFiYXNlLgorCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18gKHNlbGYpOgorICAgICAgICAiIiJJbml0aWF0ZSBhICdnaXQgY2F0LWZpbGUgLS1iYXRjaCcgc2Vzc2lvbi4iIiIKKyAgICAgICAgc2VsZi5xdWV1ZSA9IFtdICAjIExpc3Qgb2Ygb2JqZWN0IG5hbWVzIHRvIGJlIHN1Ym1pdHRlZAorICAgICAgICBzZWxmLmluX3RyYW5zaXQgPSBOb25lICAjIE9iamVjdCBuYW1lIGN1cnJlbnRseSBpbiB0cmFuc2l0CisKKyAgICAgICAgIyAnZ2l0IGNhdC1maWxlIC0tYmF0Y2gnIHByb2R1Y2VzIGJpbmFyeSBvdXRwdXQgd2hpY2ggaXMgbGlrZWx5CisgICAgICAgICMgdG8gYmUgY29ycnVwdGVkIGJ5IHRoZSBkZWZhdWx0ICJyVSItbW9kZSBwaXBlIG9wZW5lZCBieQorICAgICAgICAjIHN0YXJ0X2NvbW1hbmQuICAoTW9kZSA9PSAiclUiIGRvZXMgdW5pdmVyc2FsIG5ldy1saW5lCisgICAgICAgICMgY29udmVyc2lvbiwgd2hpY2ggbWFuZ2xlcyBjYXJyaWFnZSByZXR1cm5zLikgVGhlcmVmb3JlLCB3ZQorICAgICAgICAjIG9wZW4gYW4gZXhwbGljaXRseSBiaW5hcnktc2FmZSBwaXBlIGZvciB0cmFuc2ZlcnJpbmcgdGhlCisgICAgICAgICMgb3V0cHV0IGZyb20gJ2dpdCBjYXQtZmlsZSAtLWJhdGNoJy4KKyAgICAgICAgcGlwZV9yX2ZkLCBwaXBlX3dfZmQgPSBvcy5waXBlKCkKKyAgICAgICAgcGlwZV9yID0gb3MuZmRvcGVuKHBpcGVfcl9mZCwgInJiIikKKyAgICAgICAgcGlwZV93ID0gb3MuZmRvcGVuKHBpcGVfd19mZCwgIndiIikKKyAgICAgICAgc2VsZi5wcm9jID0gc3RhcnRfY29tbWFuZCgoImdpdCIsICJjYXQtZmlsZSIsICItLWJhdGNoIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0ID0gcGlwZV93KQorICAgICAgICBzZWxmLmYgPSBwaXBlX3IKKworICAgIGRlZiBfX2RlbF9fIChzZWxmKToKKyAgICAgICAgIiIiVmVyaWZ5IGNvbXBsZXRlZCBjb21tdW5pY2F0aW9uIHdpdGggJ2dpdCBjYXQtZmlsZSAtLWJhdGNoJy4iIiIKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLnF1ZXVlCisgICAgICAgIGFzc2VydCBzZWxmLmluX3RyYW5zaXQgaXMgTm9uZQorICAgICAgICBzZWxmLnByb2Muc3RkaW4uY2xvc2UoKQorICAgICAgICBhc3NlcnQgc2VsZi5wcm9jLndhaXQoKSA9PSAwICAjIFplcm8gZXhpdCBjb2RlCisgICAgICAgIGFzc2VydCBzZWxmLmYucmVhZCgpID09ICIiICAjIE5vIHJlbWFpbmluZyBvdXRwdXQKKworICAgIGRlZiBfc3VibWl0X25leHRfb2JqZWN0IChzZWxmKToKKyAgICAgICAgIiIiU3VibWl0IHF1ZXVlIGl0ZW1zIHRvIHRoZSAnZ2l0IGNhdC1maWxlIC0tYmF0Y2gnIHByb2Nlc3MuCisKKyAgICAgICAgSWYgdGhlcmUgYXJlIGl0ZW1zIGluIHRoZSBxdWV1ZSwgYW5kIHRoZXJlIGlzIGN1cnJlbnRseSBubyBpdGVtCisgICAgICAgIGN1cnJlbnRseSBpbiAndHJhbnNpdCcsIHRoZW4gcG9wIHRoZSBmaXJzdCBpdGVtIG9mZiB0aGUgcXVldWUsCisgICAgICAgIGFuZCBzdWJtaXQgaXQuCisKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYucXVldWUgYW5kIHNlbGYuaW5fdHJhbnNpdCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5pbl90cmFuc2l0ID0gc2VsZi5xdWV1ZS5wb3AoMCkKKyAgICAgICAgICAgIHByaW50ID4+IHNlbGYucHJvYy5zdGRpbiwgc2VsZi5pbl90cmFuc2l0WzBdCisKKyAgICBkZWYgcHVzaCAoc2VsZiwgb2JqLCBjYWxsYmFjayk6CisgICAgICAgICIiIlB1c2ggdGhlIGdpdmVuIG9iamVjdCBuYW1lIG9udG8gdGhlIHF1ZXVlLgorCisgICAgICAgIFRoZSBnaXZlbiBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZQorICAgICAgICBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIHdpdGggdGhlIGZvbGxvd2luZyBhcmd1bWVudHM6CisgICAgICAgIC0gc2VsZiAtIHRoaXMgR2l0T2JqZWN0RmV0Y2hlciBpbnN0YW5jZQorICAgICAgICAtIG9iaiAgLSB0aGUgb2JqZWN0IG5hbWUgcHJvdmlkZWQgdG8gcHVzaCgpCisgICAgICAgIC0gc2hhMSAtIHRoZSBTSEExIG9mIHRoZSBvYmplY3QsIGlmICdOb25lJyBvYmogaXMgbWlzc2luZworICAgICAgICAtIHQgICAgLSB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0ICh0YWcvY29tbWl0L3RyZWUvYmxvYikKKyAgICAgICAgLSBzaXplIC0gdGhlIHNpemUgb2YgdGhlIG9iamVjdCBpbiBieXRlcworICAgICAgICAtIGRhdGEgLSB0aGUgb2JqZWN0IGNvbnRlbnRzCisKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYucXVldWUuYXBwZW5kKChvYmosIGNhbGxiYWNrKSkKKyAgICAgICAgc2VsZi5fc3VibWl0X25leHRfb2JqZWN0KCkgICMgKFJlKXN0YXJ0IHF1ZXVlIHByb2Nlc3NpbmcKKworICAgIGRlZiBwcm9jZXNzX25leHRfZW50cnkgKHNlbGYpOgorICAgICAgICAiIiJSZWFkIHRoZSBuZXh0IGVudHJ5IG9mZiB0aGUgcXVldWUgYW5kIGludm9rZSBjYWxsYmFjay4iIiIKKyAgICAgICAgb2JqLCBjYiA9IHNlbGYuaW5fdHJhbnNpdAorICAgICAgICBzZWxmLmluX3RyYW5zaXQgPSBOb25lCisgICAgICAgIGhlYWRlciA9IHNlbGYuZi5yZWFkbGluZSgpCisgICAgICAgIGlmIGhlYWRlciA9PSAiJXMgbWlzc2luZ1xuIiAlIChvYmopOgorICAgICAgICAgICAgY2Ioc2VsZiwgb2JqLCBOb25lLCBOb25lLCBOb25lLCBOb25lKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNoYTEsIHQsIHNpemUgPSBoZWFkZXIuc3BsaXQoIiAiKQorICAgICAgICBhc3NlcnQgbGVuKHNoYTEpID09IDQwCisgICAgICAgIGFzc2VydCB0IGluICgidGFnIiwgImNvbW1pdCIsICJ0cmVlIiwgImJsb2IiKQorICAgICAgICBhc3NlcnQgc2l6ZS5lbmRzd2l0aCgiXG4iKQorICAgICAgICBzaXplID0gaW50KHNpemUuc3RyaXAoKSkKKyAgICAgICAgZGF0YSA9IHNlbGYuZi5yZWFkKHNpemUpCisgICAgICAgIGFzc2VydCBzZWxmLmYucmVhZCgxKSA9PSAiXG4iCisgICAgICAgIGNiKHNlbGYsIG9iaiwgc2hhMSwgdCwgc2l6ZSwgZGF0YSkKKyAgICAgICAgc2VsZi5fc3VibWl0X25leHRfb2JqZWN0KCkKKworICAgIGRlZiBwcm9jZXNzIChzZWxmKToKKyAgICAgICAgIiIiUHJvY2VzcyB0aGUgY3VycmVudCBxdWV1ZSB1bnRpbCBlbXB0eS4iIiIKKyAgICAgICAgd2hpbGUgc2VsZi5pbl90cmFuc2l0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5wcm9jZXNzX25leHRfZW50cnkoKQorCisgICAgIyBIaWdoLWxldmVsIGNvbnZlbmllbmNlIG1ldGhvZHM6CisKKyAgICBkZWYgZ2V0X3NoYTEgKHNlbGYsIG9ianNwZWMpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIFNIQTEgb2YgdGhlIG9iamVjdCBzcGVjaWZpZWQgYnkgJ29ianNwZWMnLgorCisgICAgICAgIFJldHVybiBOb25lIGlmICdvYmpzcGVjJyBkb2VzIG5vdCBzcGVjaWZ5IGFuIGV4aXN0aW5nIG9iamVjdC4KKworICAgICAgICAiIiIKKyAgICAgICAgY2xhc3MgX09iakhhbmRsZXIob2JqZWN0KToKKyAgICAgICAgICAgICIiIkhlbHBlciBjbGFzcyBmb3IgZ2V0dGluZyB0aGUgcmV0dXJuZWQgU0hBMS4iIiIKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgcGFyc2VyKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlciA9IHBhcnNlcgorICAgICAgICAgICAgICAgIHNlbGYuc2hhMSA9IE5vbmUKKworICAgICAgICAgICAgZGVmIF9fY2FsbF9fIChzZWxmLCBwYXJzZXIsIG9iaiwgc2hhMSwgdCwgc2l6ZSwgZGF0YSk6CisgICAgICAgICAgICAgICAgIyBGSVhNRTogTWFueSB1bnVzZWQgYXJndW1lbnRzLiBDb3VsZCB0aGlzIGJlIGNoZWFwZXI/CisgICAgICAgICAgICAgICAgYXNzZXJ0IHBhcnNlciA9PSBzZWxmLnBhcnNlcgorICAgICAgICAgICAgICAgIHNlbGYuc2hhMSA9IHNoYTEKKworICAgICAgICBoYW5kbGVyID0gX09iakhhbmRsZXIoc2VsZikKKyAgICAgICAgc2VsZi5wdXNoKG9ianNwZWMsIGhhbmRsZXIpCisgICAgICAgIHNlbGYucHJvY2VzcygpCisgICAgICAgIHJldHVybiBoYW5kbGVyLnNoYTEKKworICAgIGRlZiBvcGVuX29iaiAoc2VsZiwgb2Jqc3BlYyk6CisgICAgICAgICIiIlJldHVybiBhIGZpbGUgb2JqZWN0IHdyYXBwaW5nIHRoZSBjb250ZW50cyBvZiBhIG5hbWVkIG9iamVjdC4KKworICAgICAgICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIC5jbG9zZSgpIG9uIHRoZSByZXR1cm5lZAorICAgICAgICBmaWxlIG9iamVjdC4KKworICAgICAgICBSYWlzZSBLZXlFcnJvciBpZiAnb2Jqc3BlYycgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHJlcG8uCisKKyAgICAgICAgIiIiCisgICAgICAgIGNsYXNzIF9PYmpIYW5kbGVyKG9iamVjdCk6CisgICAgICAgICAgICAiIiJIZWxwZXIgY2xhc3MgZm9yIHBhcnNpbmcgdGhlIHJldHVybmVkIGdpdCBvYmplY3QuIiIiCisgICAgICAgICAgICBkZWYgX19pbml0X18gKHNlbGYsIHBhcnNlcik6CisgICAgICAgICAgICAgICAgIiIiU2V0IHVwIGhlbHBlci4iIiIKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlciA9IHBhcnNlcgorICAgICAgICAgICAgICAgIHNlbGYuY29udGVudHMgPSBTdHJpbmdJTygpCisgICAgICAgICAgICAgICAgc2VsZi5lcnIgPSBOb25lCisKKyAgICAgICAgICAgIGRlZiBfX2NhbGxfXyAoc2VsZiwgcGFyc2VyLCBvYmosIHNoYTEsIHQsIHNpemUsIGRhdGEpOgorICAgICAgICAgICAgICAgICIiIkdpdCBvYmplY3QgY2FsbGJhY2sgKHNlZSBHaXRPYmplY3RGZXRjaGVyIGRvY3VtZW50YXRpb24pLiIiIgorICAgICAgICAgICAgICAgIGFzc2VydCBwYXJzZXIgPT0gc2VsZi5wYXJzZXIKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2hhMTogICMgTWlzc2luZyBvYmplY3QKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnIgPSAiTWlzc2luZyBvYmplY3QgJyVzJyIgJSBvYmoKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgc2l6ZSA9PSBsZW4oZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb250ZW50cy53cml0ZShkYXRhKQorCisgICAgICAgIGhhbmRsZXIgPSBfT2JqSGFuZGxlcihzZWxmKQorICAgICAgICBzZWxmLnB1c2gob2Jqc3BlYywgaGFuZGxlcikKKyAgICAgICAgc2VsZi5wcm9jZXNzKCkKKyAgICAgICAgaWYgaGFuZGxlci5lcnI6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcihoYW5kbGVyLmVycikKKyAgICAgICAgaGFuZGxlci5jb250ZW50cy5zZWVrKDApCisgICAgICAgIHJldHVybiBoYW5kbGVyLmNvbnRlbnRzCisKKyAgICBkZWYgd2Fsa190cmVlIChzZWxmLCB0cmVlX29ianNwZWMsIGNhbGxiYWNrLCBwcmVmaXggPSAiIik6CisgICAgICAgICIiIlJlY3Vyc2l2ZWx5IHdhbGsgdGhlIGdpdmVuIEdpdCB0cmVlIG9iamVjdC4KKworICAgICAgICBSZWN1cnNpdmVseSB3YWxrIGFsbCBzdWJ0cmVlcyBvZiB0aGUgZ2l2ZW4gdHJlZSBvYmplY3QsIGFuZAorICAgICAgICBpbnZva2UgdGhlIGdpdmVuIGNhbGxiYWNrIHBhc3NpbmcgdGhyZWUgYXJndW1lbnRzOgorICAgICAgICAocGF0aCwgbW9kZSwgZGF0YSkgd2l0aCB0aGUgcGF0aCwgcGVybWlzc2lvbiBiaXRzLCBhbmQgY29udGVudHMKKyAgICAgICAgb2YgYWxsIHRoZSBibG9icyBmb3VuZCBpbiB0aGUgZW50aXJlIHRyZWUgc3RydWN0dXJlLgorCisgICAgICAgICIiIgorICAgICAgICBjbGFzcyBfT2JqSGFuZGxlcihvYmplY3QpOgorICAgICAgICAgICAgIiIiSGVscGVyIGNsYXNzIGZvciB3YWxraW5nIGEgZ2l0IHRyZWUgc3RydWN0dXJlLiIiIgorICAgICAgICAgICAgZGVmIF9faW5pdF9fIChzZWxmLCBwYXJzZXIsIGNiLCBwYXRoLCBtb2RlID0gTm9uZSk6CisgICAgICAgICAgICAgICAgIiIiU2V0IHVwIGhlbHBlci4iIiIKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlciA9IHBhcnNlcgorICAgICAgICAgICAgICAgIHNlbGYuY2IgPSBjYgorICAgICAgICAgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKKyAgICAgICAgICAgICAgICBzZWxmLm1vZGUgPSBtb2RlCisgICAgICAgICAgICAgICAgc2VsZi5lcnIgPSBOb25lCisKKyAgICAgICAgICAgIGRlZiBwYXJzZV90cmVlIChzZWxmLCB0cmVlZGF0YSk6CisgICAgICAgICAgICAgICAgIiIiUGFyc2UgdHJlZSBvYmplY3QgZGF0YSwgeWllbGQgdHJlZSBlbnRyaWVzLgorCisgICAgICAgICAgICAgICAgRWFjaCB0cmVlIGVudHJ5IGlzIGEgMy10dXBsZSAobW9kZSwgc2hhMSwgcGF0aCkKKworICAgICAgICAgICAgICAgIHNlbGYucGF0aCBpcyBwcmVwZW5kZWQgdG8gYWxsIHBhdGhzIHlpZWxkZWQKKyAgICAgICAgICAgICAgICBmcm9tIHRoaXMgbWV0aG9kLgorCisgICAgICAgICAgICAgICAgIiIiCisgICAgICAgICAgICAgICAgd2hpbGUgdHJlZWRhdGE6CisgICAgICAgICAgICAgICAgICAgIG1vZGUgPSBpbnQodHJlZWRhdGFbOjZdLCAxMCkKKyAgICAgICAgICAgICAgICAgICAgIyBUdXJuIDEwMHh4eCBpbnRvIHh4eAorICAgICAgICAgICAgICAgICAgICBpZiBtb2RlID4gMTAwMDAwOgorICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSAtPSAxMDAwMDAKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHRyZWVkYXRhWzZdID09ICIgIgorICAgICAgICAgICAgICAgICAgICBpID0gdHJlZWRhdGEuZmluZCgiXDAiLCA3KQorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgaSA+IDAKKyAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHRyZWVkYXRhWzc6aV0KKyAgICAgICAgICAgICAgICAgICAgc2hhMSA9IGhleGxpZnkodHJlZWRhdGFbaSArIDE6IGkgKyAyMV0pCisgICAgICAgICAgICAgICAgICAgIHlpZWxkIChtb2RlLCBzaGExLCBzZWxmLnBhdGggKyBwYXRoKQorICAgICAgICAgICAgICAgICAgICB0cmVlZGF0YSA9IHRyZWVkYXRhW2kgKyAyMTpdCisKKyAgICAgICAgICAgIGRlZiBfX2NhbGxfXyAoc2VsZiwgcGFyc2VyLCBvYmosIHNoYTEsIHQsIHNpemUsIGRhdGEpOgorICAgICAgICAgICAgICAgICIiIkdpdCBvYmplY3QgY2FsbGJhY2sgKHNlZSBHaXRPYmplY3RGZXRjaGVyIGRvY3VtZW50YXRpb24pLiIiIgorICAgICAgICAgICAgICAgIGFzc2VydCBwYXJzZXIgPT0gc2VsZi5wYXJzZXIKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2hhMTogICMgTWlzc2luZyBvYmplY3QKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnIgPSAiTWlzc2luZyBvYmplY3QgJyVzJyIgJSAob2JqKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBhc3NlcnQgc2l6ZSA9PSBsZW4oZGF0YSkKKyAgICAgICAgICAgICAgICBpZiB0ID09ICJ0cmVlIjoKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5wYXRoOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXRoICs9ICIvIgorICAgICAgICAgICAgICAgICAgICAjIFJlY3Vyc2UgaW50byBhbGwgYmxvYnMgYW5kIHN1YnRyZWVzCisgICAgICAgICAgICAgICAgICAgIGZvciBtLCBzLCBwIGluIHNlbGYucGFyc2VfdHJlZShkYXRhKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wdXNoKHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXyhzZWxmLnBhcnNlciwgc2VsZi5jYiwgcCwgbSkpCisgICAgICAgICAgICAgICAgZWxpZiB0ID09ICJibG9iIjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jYihzZWxmLnBhdGgsIHNlbGYubW9kZSwgZGF0YSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbmtub3duIG9iamVjdCB0eXBlICclcyciICUgKHQpKQorCisgICAgICAgIHNlbGYucHVzaCh0cmVlX29ianNwZWMsIF9PYmpIYW5kbGVyKHNlbGYsIGNhbGxiYWNrLCBwcmVmaXgpKQorICAgICAgICBzZWxmLnByb2Nlc3MoKQorCisKK2NsYXNzIEdpdFJlZk1hcChvYmplY3QpOgorCisgICAgIiIiTWFwIEdpdCByZWYgbmFtZXMgdG8gdGhlIEdpdCBvYmplY3QgbmFtZXMgdGhleSBjdXJyZW50bHkgcG9pbnQgdG8uCisKKyAgICBCZWhhdmVzIGxpa2UgYSBkaWN0aW9uYXJ5IG9mIEdpdCByZWYgbmFtZXMgLT4gR2l0IG9iamVjdCBuYW1lcy4KKworICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fIChzZWxmLCBvYmpfZmV0Y2hlcik6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBHaXQgcmVmIC0+IG9iamVjdCBtYXAuIiIiCisgICAgICAgIHNlbGYub2JqX2ZldGNoZXIgPSBvYmpfZmV0Y2hlcgorICAgICAgICBzZWxmLl9jYWNoZSA9IHt9ICAjIGRpY3Q6IHJlZm5hbWUgLT4gb2JqbmFtZQorCisgICAgZGVmIF9sb2FkIChzZWxmLCByZWYpOgorICAgICAgICAiIiJSZXRyaWV2ZSB0aGUgb2JqZWN0IGN1cnJlbnRseSBib3VuZCB0byB0aGUgZ2l2ZW4gcmVmLgorCisgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBvYmplY3QgcG9pbnRlZCB0byBieSB0aGUgZ2l2ZW4gcmVmIGlzIHN0b3JlZAorICAgICAgICBpbnRvIHRoaXMgbWFwcGluZywgYW5kIGFsc28gcmV0dXJuZWQuCisKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHJlZiBub3QgaW4gc2VsZi5fY2FjaGU6CisgICAgICAgICAgICBzZWxmLl9jYWNoZVtyZWZdID0gc2VsZi5vYmpfZmV0Y2hlci5nZXRfc2hhMShyZWYpCisgICAgICAgIHJldHVybiBzZWxmLl9jYWNoZVtyZWZdCisKKyAgICBkZWYgX19jb250YWluc19fIChzZWxmLCByZWZuYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIGdpdmVuIHJlZm5hbWUgaXMgcHJlc2VudCBpbiB0aGlzIGNhY2hlLiIiIgorICAgICAgICByZXR1cm4gYm9vbChzZWxmLl9sb2FkKHJlZm5hbWUpKQorCisgICAgZGVmIF9fZ2V0aXRlbV9fIChzZWxmLCByZWZuYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBnaXQgb2JqZWN0IG5hbWUgcG9pbnRlZCB0byBieSB0aGUgZ2l2ZW4gcmVmbmFtZS4iIiIKKyAgICAgICAgY29tbWl0ID0gc2VsZi5fbG9hZChyZWZuYW1lKQorICAgICAgICBpZiBjb21taXQgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCJVbmtub3duIHJlZiAnJXMnIiAlIChyZWZuYW1lKSkKKyAgICAgICAgcmV0dXJuIGNvbW1pdAorCisgICAgZGVmIGdldCAoc2VsZiwgcmVmbmFtZSwgZGVmYXVsdCA9IE5vbmUpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGdpdCBvYmplY3QgbmFtZSBwb2ludGVkIHRvIGJ5IHRoZSBnaXZlbiByZWZuYW1lLiIiIgorICAgICAgICBjb21taXQgPSBzZWxmLl9sb2FkKHJlZm5hbWUpCisgICAgICAgIGlmIGNvbW1pdCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKyAgICAgICAgcmV0dXJuIGNvbW1pdAorCisKK2NsYXNzIEdpdEZJQ29tbWl0KG9iamVjdCk6CisKKyAgICAiIiJFbmNhcHN1bGF0ZSB0aGUgZGF0YSBpbiBhIEdpdCBmYXN0LWltcG9ydCBjb21taXQgY29tbWFuZC4iIiIKKworICAgIFNIQTFSRSA9IHJlLmNvbXBpbGUocideWzAtOWEtZl17NDB9JCcpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgcGFyc2VfbW9kZSAoY2xzLCBtb2RlKToKKyAgICAgICAgIiIiVmVyaWZ5IHRoZSBnaXZlbiBnaXQgZmlsZSBtb2RlLCBhbmQgcmV0dXJuIGl0IGFzIGEgc3RyaW5nLiIiIgorICAgICAgICBhc3NlcnQgbW9kZSBpbiAoNjQ0LCA3NTUsIDEwMDY0NCwgMTAwNzU1LCAxMjAwMDApCisgICAgICAgIHJldHVybiAiJWkiICUgKG1vZGUpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgcGFyc2Vfb2JqbmFtZSAoY2xzLCBvYmpuYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBnaXZlbiBvYmplY3QgbmFtZSAob3IgbWFyayBudW1iZXIpIGFzIGEgc3RyaW5nLiIiIgorICAgICAgICBpZiBpc2luc3RhbmNlKG9iam5hbWUsIGludCk6ICAjIE9iamVjdCBuYW1lIGlzIGEgbWFyayBudW1iZXIKKyAgICAgICAgICAgIGFzc2VydCBvYmpuYW1lID4gMAorICAgICAgICAgICAgcmV0dXJuICI6JWkiICUgKG9iam5hbWUpCisKKyAgICAgICAgIyBObyBleGlzdGVuY2UgY2hlY2sgaXMgZG9uZSwgb25seSBjaGVja3MgZm9yIHZhbGlkIGZvcm1hdAorICAgICAgICBhc3NlcnQgY2xzLlNIQTFSRS5tYXRjaChvYmpuYW1lKSAgIyBPYmplY3QgbmFtZSBpcyB2YWxpZCBTSEExCisgICAgICAgIHJldHVybiBvYmpuYW1lCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgcXVvdGVfcGF0aCAoY2xzLCBwYXRoKToKKyAgICAgICAgIiIiUmV0dXJuIGEgcXVvdGVkIHZlcnNpb24gb2YgdGhlIGdpdmVuIHBhdGguIiIiCisgICAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoIlxcIiwgIlxcXFwiKQorICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKCJcbiIsICJcXG4iKQorICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKCciJywgJ1xcIicpCisgICAgICAgIHJldHVybiAnIiVzIicgJSAocGF0aCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBwYXJzZV9wYXRoIChjbHMsIHBhdGgpOgorICAgICAgICAiIiJWZXJpZnkgdGhhdCB0aGUgZ2l2ZW4gcGF0aCBpcyB2YWxpZCwgYW5kIHF1b3RlIGl0LCBpZiBuZWVkZWQuIiIiCisgICAgICAgIGFzc2VydCBub3QgaXNpbnN0YW5jZShwYXRoLCBpbnQpICAjIENhbm5vdCBiZSBhIG1hcmsgbnVtYmVyCisKKyAgICAgICAgIyBUaGVzZSBjaGVja3MgdmVyaWZ5IHRoZSBydWxlcyBvbiB0aGUgZmFzdC1pbXBvcnQgbWFuIHBhZ2UKKyAgICAgICAgYXNzZXJ0IG5vdCBwYXRoLmNvdW50KCIvLyIpCisgICAgICAgIGFzc2VydCBub3QgcGF0aC5lbmRzd2l0aCgiLyIpCisgICAgICAgIGFzc2VydCBub3QgcGF0aC5zdGFydHN3aXRoKCIvIikKKyAgICAgICAgYXNzZXJ0IG5vdCBwYXRoLmNvdW50KCIvLi8iKQorICAgICAgICBhc3NlcnQgbm90IHBhdGguY291bnQoIi8uLi8iKQorICAgICAgICBhc3NlcnQgbm90IHBhdGguZW5kc3dpdGgoIi8uIikKKyAgICAgICAgYXNzZXJ0IG5vdCBwYXRoLmVuZHN3aXRoKCIvLi4iKQorICAgICAgICBhc3NlcnQgbm90IHBhdGguc3RhcnRzd2l0aCgiLi8iKQorICAgICAgICBhc3NlcnQgbm90IHBhdGguc3RhcnRzd2l0aCgiLi4vIikKKworICAgICAgICBpZiBwYXRoLmNvdW50KCciJykgKyBwYXRoLmNvdW50KCdcbicpICsgcGF0aC5jb3VudCgnXFwnKToKKyAgICAgICAgICAgIHJldHVybiBjbHMucXVvdGVfcGF0aChwYXRoKQorICAgICAgICByZXR1cm4gcGF0aAorCisgICAgZGVmIF9faW5pdF9fIChzZWxmLCBuYW1lLCBlbWFpbCwgdGltZXN0YW1wLCB0aW1lem9uZSwgbWVzc2FnZSk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBHaXQgZmFzdC1pbXBvcnQgY29tbWl0LCB3aXRoIHRoZSBnaXZlbiBtZXRhZGF0YS4iIiIKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmVtYWlsID0gZW1haWwKKyAgICAgICAgc2VsZi50aW1lc3RhbXAgPSB0aW1lc3RhbXAKKyAgICAgICAgc2VsZi50aW1lem9uZSA9IHRpbWV6b25lCisgICAgICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2UKKyAgICAgICAgc2VsZi5wYXRob3BzID0gW10gICMgTGlzdCBvZiBwYXRoIG9wZXJhdGlvbnMgaW4gdGhpcyBjb21taXQKKworICAgIGRlZiBtb2RpZnkgKHNlbGYsIG1vZGUsIGJsb2JuYW1lLCBwYXRoKToKKyAgICAgICAgIiIiQWRkIGEgZmlsZSBtb2RpZmljYXRpb24gdG8gdGhpcyBHaXQgZmFzdC1pbXBvcnQgY29tbWl0LiIiIgorICAgICAgICBzZWxmLnBhdGhvcHMuYXBwZW5kKCgiTSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2VfbW9kZShtb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9vYmpuYW1lKGJsb2JuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9wYXRoKHBhdGgpKSkKKworICAgIGRlZiBkZWxldGUgKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiJBZGQgYSBmaWxlIGRlbGV0aW9uIHRvIHRoaXMgR2l0IGZhc3QtaW1wb3J0IGNvbW1pdC4iIiIKKyAgICAgICAgc2VsZi5wYXRob3BzLmFwcGVuZCgoIkQiLCBzZWxmLnBhcnNlX3BhdGgocGF0aCkpKQorCisgICAgZGVmIGNvcHkgKHNlbGYsIHBhdGgsIG5ld3BhdGgpOgorICAgICAgICAiIiJBZGQgYSBmaWxlIGNvcHkgdG8gdGhpcyBHaXQgZmFzdC1pbXBvcnQgY29tbWl0LiIiIgorICAgICAgICBzZWxmLnBhdGhvcHMuYXBwZW5kKCgiQyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2VfcGF0aChwYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9wYXRoKG5ld3BhdGgpKSkKKworICAgIGRlZiByZW5hbWUgKHNlbGYsIHBhdGgsIG5ld3BhdGgpOgorICAgICAgICAiIiJBZGQgYSBmaWxlIHJlbmFtZSB0byB0aGlzIEdpdCBmYXN0LWltcG9ydCBjb21taXQuIiIiCisgICAgICAgIHNlbGYucGF0aG9wcy5hcHBlbmQoKCJSIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9wYXRoKHBhdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlX3BhdGgobmV3cGF0aCkpKQorCisgICAgZGVmIG5vdGUgKHNlbGYsIGJsb2JuYW1lLCBjb21taXQpOgorICAgICAgICAiIiJBZGQgYSBub3RlIG9iamVjdCB0byB0aGlzIEdpdCBmYXN0LWltcG9ydCBjb21taXQuIiIiCisgICAgICAgIHNlbGYucGF0aG9wcy5hcHBlbmQoKCJOIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9vYmpuYW1lKGJsb2JuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9vYmpuYW1lKGNvbW1pdCkpKQorCisgICAgZGVmIGRlbGV0ZWFsbCAoc2VsZik6CisgICAgICAgICIiIkRlbGV0ZSBhbGwgZmlsZXMgaW4gdGhpcyBHaXQgZmFzdC1pbXBvcnQgY29tbWl0LiIiIgorICAgICAgICBzZWxmLnBhdGhvcHMuYXBwZW5kKCJkZWxldGVhbGwiKQorCisKK2NsYXNzIFRlc3RHaXRGSUNvbW1pdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAiIiJHaXRGSUNvbW1pdCBzZWxmdGVzdHMuIiIiCisKKyAgICBkZWYgdGVzdF9iYXNpYyAoc2VsZik6CisgICAgICAgICIiIkdpdEZJQ29tbWl0IGJhc2ljIHNlbGZ0ZXN0cy4iIiIKKworICAgICAgICBkZWYgZXhwZWN0X2ZhaWwgKG1ldGhvZCwgZGF0YSk6CisgICAgICAgICAgICAiIiJWZXJpZnkgdGhhdCB0aGUgbWV0aG9kKGRhdGEpIHJhaXNlcyBhbiBBc3NlcnRpb25FcnJvci4iIiIKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtZXRob2QoZGF0YSkKKyAgICAgICAgICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvcjoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJGYWlsZWQgdGVzdCBmb3IgaW52YWxpZCBkYXRhICclcyglcyknIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWV0aG9kLl9fbmFtZV9fLCByZXByKGRhdGEpKSkKKworICAgIGRlZiB0ZXN0X3BhcnNlX21vZGUgKHNlbGYpOgorICAgICAgICAiIiJHaXRGSUNvbW1pdC5wYXJzZV9tb2RlKCkgc2VsZnRlc3RzLiIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEdpdEZJQ29tbWl0LnBhcnNlX21vZGUoNjQ0KSwgIjY0NCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoR2l0RklDb21taXQucGFyc2VfbW9kZSg3NTUpLCAiNzU1IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChHaXRGSUNvbW1pdC5wYXJzZV9tb2RlKDEwMDY0NCksICIxMDA2NDQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEdpdEZJQ29tbWl0LnBhcnNlX21vZGUoMTAwNzU1KSwgIjEwMDc1NSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoR2l0RklDb21taXQucGFyc2VfbW9kZSgxMjAwMDApLCAiMTIwMDAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIEdpdEZJQ29tbWl0LnBhcnNlX21vZGUsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBHaXRGSUNvbW1pdC5wYXJzZV9tb2RlLCAxMjMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBHaXRGSUNvbW1pdC5wYXJzZV9tb2RlLCA2MDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBHaXRGSUNvbW1pdC5wYXJzZV9tb2RlLCAiNjQ0IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIEdpdEZJQ29tbWl0LnBhcnNlX21vZGUsICJhYmMiKQorCisgICAgZGVmIHRlc3RfcGFyc2Vfb2JqbmFtZSAoc2VsZik6CisgICAgICAgICIiIkdpdEZJQ29tbWl0LnBhcnNlX29iam5hbWUoKSBzZWxmdGVzdHMuIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoR2l0RklDb21taXQucGFyc2Vfb2JqbmFtZSgxKSwgIjoxIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIEdpdEZJQ29tbWl0LnBhcnNlX29iam5hbWUsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBHaXRGSUNvbW1pdC5wYXJzZV9vYmpuYW1lLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChHaXRGSUNvbW1pdC5wYXJzZV9vYmpuYW1lKCIwMTIzNDU2Nzg5IiAqIDQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICIwMTIzNDU2Nzg5IiAqIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoR2l0RklDb21taXQucGFyc2Vfb2JqbmFtZSgiMjQ2OGFiY2RlZiIgKiA0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiMjQ2OGFiY2RlZiIgKiA0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgR2l0RklDb21taXQucGFyc2Vfb2JqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImFiY2RlZmdoaWoiICogNCkKKworICAgIGRlZiB0ZXN0X3BhcnNlX3BhdGggKHNlbGYpOgorICAgICAgICAiIiJHaXRGSUNvbW1pdC5wYXJzZV9wYXRoKCkgc2VsZnRlc3RzLiIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEdpdEZJQ29tbWl0LnBhcnNlX3BhdGgoImZvby9iYXIiKSwgImZvby9iYXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEdpdEZJQ29tbWl0LnBhcnNlX3BhdGgoInBhdGgvd2l0aFxuIGFuZCBcIiBpbiBpdCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICcicGF0aC93aXRoXFxuIGFuZCBcXCIgaW4gaXQiJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIEdpdEZJQ29tbWl0LnBhcnNlX3BhdGgsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBHaXRGSUNvbW1pdC5wYXJzZV9wYXRoLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgR2l0RklDb21taXQucGFyc2VfcGF0aCwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBHaXRGSUNvbW1pdC5wYXJzZV9wYXRoLCAiZm9vLy9iYXIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgR2l0RklDb21taXQucGFyc2VfcGF0aCwgImZvby9iYXIvIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIEdpdEZJQ29tbWl0LnBhcnNlX3BhdGgsICIvZm9vL2JhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBHaXRGSUNvbW1pdC5wYXJzZV9wYXRoLCAiZm9vLy4vYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIEdpdEZJQ29tbWl0LnBhcnNlX3BhdGgsICJmb28vLi4vYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIEdpdEZJQ29tbWl0LnBhcnNlX3BhdGgsICJmb28vYmFyLy4iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgR2l0RklDb21taXQucGFyc2VfcGF0aCwgImZvby9iYXIvLi4iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgR2l0RklDb21taXQucGFyc2VfcGF0aCwgIi4vZm9vL2JhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBHaXRGSUNvbW1pdC5wYXJzZV9wYXRoLCAiLi4vZm9vL2JhciIpCisKKworY2xhc3MgR2l0RmFzdEltcG9ydChvYmplY3QpOgorCisgICAgIiIiRW5jYXBzdWxhdGUgY29tbXVuaWNhdGlvbiB3aXRoIGdpdCBmYXN0LWltcG9ydC4iIiIKKworICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgZiwgb2JqX2ZldGNoZXIsIGxhc3RfbWFyayA9IDApOgorICAgICAgICAiIiJTZXQgdXAgc2VsZiB0byBjb21tdW5pY2F0ZSB3aXRoIGEgZmFzdC1pbXBvcnQgcHJvY2VzcyB0aHJvdWdoIGYuIiIiCisgICAgICAgIHNlbGYuZiA9IGYgICMgRmlsZSBvYmplY3Qgd2hlcmUgZmFzdC1pbXBvcnQgc3RyZWFtIGlzIHdyaXR0ZW4KKyAgICAgICAgc2VsZi5vYmpfZmV0Y2hlciA9IG9ial9mZXRjaGVyICAjIEdpdE9iamVjdEZldGNoZXIgaW5zdGFuY2UKKyAgICAgICAgc2VsZi5uZXh0X21hcmsgPSBsYXN0X21hcmsgKyAxICAjIE5leHQgbWFyayBudW1iZXIKKyAgICAgICAgc2VsZi5yZWZzID0gc2V0KCkgICMgS2VlcCB0cmFjayBvZiB0aGUgcmVmbmFtZXMgd2UndmUgc2VlbgorCisgICAgZGVmIGNvbW1lbnQgKHNlbGYsIHMpOgorICAgICAgICAiIiJXcml0ZSB0aGUgZ2l2ZW4gY29tbWVudCBpbiB0aGUgZmFzdC1pbXBvcnQgc3RyZWFtLiIiIgorICAgICAgICBhc3NlcnQgIlxuIiBub3QgaW4gcywgIk1hbGZvcm1lZCBjb21tZW50OiAnJXMnIiAlIChzKQorICAgICAgICBzZWxmLmYud3JpdGUoIiMgJXNcbiIgJSAocykpCisKKyAgICBkZWYgY29tbWl0IChzZWxmLCByZWYsIGNvbW1pdGRhdGEpOgorICAgICAgICAiIiJNYWtlIGEgY29tbWl0IG9uIHRoZSBnaXZlbiByZWYsIHdpdGggdGhlIGdpdmVuIEdpdEZJQ29tbWl0LgorCisgICAgICAgIFJldHVybiB0aGUgbWFyayBudW1iZXIgaWRlbnRpZnlpbmcgdGhpcyBjb21taXQuCisKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuZi53cml0ZSgiIiJcCitjb21taXQgJShyZWYpcworbWFyayA6JShtYXJrKWkKK2NvbW1pdHRlciAlKG5hbWUpcyA8JShlbWFpbClzPiAlKHRpbWVzdGFtcClpICUodGltZXpvbmUpcworZGF0YSAlKG1zZ0xlbmd0aClpCislKG1zZylzCisiIiIgJSB7CisgICAgJ3JlZic6IHJlZiwKKyAgICAnbWFyayc6IHNlbGYubmV4dF9tYXJrLAorICAgICduYW1lJzogY29tbWl0ZGF0YS5uYW1lLAorICAgICdlbWFpbCc6IGNvbW1pdGRhdGEuZW1haWwsCisgICAgJ3RpbWVzdGFtcCc6IGNvbW1pdGRhdGEudGltZXN0YW1wLAorICAgICd0aW1lem9uZSc6IGNvbW1pdGRhdGEudGltZXpvbmUsCisgICAgJ21zZ0xlbmd0aCc6IGxlbihjb21taXRkYXRhLm1lc3NhZ2UpLAorICAgICdtc2cnOiBjb21taXRkYXRhLm1lc3NhZ2UsCit9KQorCisgICAgICAgIGlmIHJlZiBub3QgaW4gc2VsZi5yZWZzOgorICAgICAgICAgICAgc2VsZi5yZWZzLmFkZChyZWYpCisgICAgICAgICAgICBwYXJlbnQgPSByZWYgKyAiXjAiCisgICAgICAgICAgICBpZiBzZWxmLm9ial9mZXRjaGVyLmdldF9zaGExKHBhcmVudCk6CisgICAgICAgICAgICAgICAgc2VsZi5mLndyaXRlKCJmcm9tICVzXG4iICUgKHBhcmVudCkpCisKKyAgICAgICAgZm9yIG9wIGluIGNvbW1pdGRhdGEucGF0aG9wczoKKyAgICAgICAgICAgIHNlbGYuZi53cml0ZSgiICIuam9pbihvcCkpCisgICAgICAgICAgICBzZWxmLmYud3JpdGUoIlxuIikKKyAgICAgICAgc2VsZi5mLndyaXRlKCJcbiIpCisgICAgICAgIHJldHZhbCA9IHNlbGYubmV4dF9tYXJrCisgICAgICAgIHNlbGYubmV4dF9tYXJrICs9IDEKKyAgICAgICAgcmV0dXJuIHJldHZhbAorCisgICAgZGVmIGJsb2IgKHNlbGYsIGRhdGEpOgorICAgICAgICAiIiJJbXBvcnQgdGhlIGdpdmVuIGJsb2IuCisKKyAgICAgICAgUmV0dXJuIHRoZSBtYXJrIG51bWJlciBpZGVudGlmeWluZyB0aGlzIGJsb2IuCisKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuZi53cml0ZSgiYmxvYlxubWFyayA6JWlcbmRhdGEgJWlcbiVzXG4iICUKKyAgICAgICAgICAgICAgICAgICAgIChzZWxmLm5leHRfbWFyaywgbGVuKGRhdGEpLCBkYXRhKSkKKyAgICAgICAgcmV0dmFsID0gc2VsZi5uZXh0X21hcmsKKyAgICAgICAgc2VsZi5uZXh0X21hcmsgKz0gMQorICAgICAgICByZXR1cm4gcmV0dmFsCisKKyAgICBkZWYgcmVzZXQgKHNlbGYsIHJlZiwgb2JqbmFtZSk6CisgICAgICAgICIiIlJlc2V0IHRoZSBnaXZlbiByZWYgdG8gcG9pbnQgYXQgdGhlIGdpdmVuIEdpdCBvYmplY3QuIiIiCisgICAgICAgIHNlbGYuZi53cml0ZSgicmVzZXQgJXNcbmZyb20gJXNcblxuIiAlCisgICAgICAgICAgICAgICAgICAgICAocmVmLCBHaXRGSUNvbW1pdC5wYXJzZV9vYmpuYW1lKG9iam5hbWUpKSkKKyAgICAgICAgaWYgcmVmIG5vdCBpbiBzZWxmLnJlZnM6CisgICAgICAgICAgICBzZWxmLnJlZnMuYWRkKHJlZikKKworCitjbGFzcyBHaXROb3RlcyhvYmplY3QpOgorCisgICAgIiIiRW5jYXBzdWxhdGUgYWNjZXNzIHRvIEdpdCBub3Rlcy4KKworICAgIFNpbXVsYXRlcyBhIGRpY3Rpb25hcnkgb2Ygb2JqZWN0IG5hbWUgKFNIQTEpIC0+IEdpdCBub3RlIG1hcHBpbmdzLgorCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18gKHNlbGYsIG5vdGVzX3JlZiwgb2JqX2ZldGNoZXIpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgR2l0IG5vdGVzIGludGVyZmFjZSwgYm91bmQgdG8gdGhlIGdpdmVuIG5vdGVzIHJlZi4iIiIKKyAgICAgICAgc2VsZi5ub3Rlc19yZWYgPSBub3Rlc19yZWYKKyAgICAgICAgc2VsZi5vYmpfZmV0Y2hlciA9IG9ial9mZXRjaGVyICAjIFVzZWQgdG8gZ2V0IG9iamVjdHMgZnJvbSByZXBvCisgICAgICAgIHNlbGYuaW1wb3J0cyA9IFtdICAjIGxpc3Q6IChvYmpuYW1lLCBub3RlIGRhdGEgYmxvYiBuYW1lKSB0dXBsZXMKKworICAgIGRlZiBfX2RlbF9fIChzZWxmKToKKyAgICAgICAgIiIiVmVyaWZ5IHRoYXQgc2VsZi5jb21taXRfbm90ZXMoKSB3YXMgY2FsbGVkIGJlZm9yZSBkZXN0cnVjdGlvbi4iIiIKKyAgICAgICAgaWYgc2VsZi5pbXBvcnRzOgorICAgICAgICAgICAgZXJyb3IoIk1pc3NpbmcgY2FsbCB0byBzZWxmLmNvbW1pdF9ub3RlcygpLiIpCisgICAgICAgICAgICBlcnJvcigiJWkgbm90ZXMgYXJlIG5vdCBjb21taXR0ZWQhIiwgbGVuKHNlbGYuaW1wb3J0cykpCisKKyAgICBkZWYgX2xvYWQgKHNlbGYsIG9iam5hbWUpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIG5vdGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGdpdCBvYmplY3QuCisKKyAgICAgICAgVGhlIG5vdGUgZGF0YSBpcyByZXR1cm5lZCBpbiBzdHJpbmcgZm9ybS4gSWYgbm8gbm90ZSBpcyBmb3VuZAorICAgICAgICBmb3IgdGhlIGdpdmVuIG9iamVjdCwgTm9uZSBpcyByZXR1cm5lZC4KKworICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZiA9IHNlbGYub2JqX2ZldGNoZXIub3Blbl9vYmooIiVzOiVzIiAlIChzZWxmLm5vdGVzX3JlZiwgb2JqbmFtZSkpCisgICAgICAgICAgICByZXQgPSBmLnJlYWQoKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldCA9IE5vbmUKKyAgICAgICAgcmV0dXJuIHJldAorCisgICAgZGVmIF9fZ2V0aXRlbV9fIChzZWxmLCBvYmpuYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBub3RlIGNvbnRlbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gb2JqZWN0LgorCisgICAgICAgIFJhaXNlIEtleUVycm9yIGlmIGdpdmVuIG9iamVjdCBoYXMgbm8gYXNzb2NpYXRlZCBub3RlLgorCisgICAgICAgICIiIgorICAgICAgICBibG9iZGF0YSA9IHNlbGYuX2xvYWQob2JqbmFtZSkKKyAgICAgICAgaWYgYmxvYmRhdGEgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCJPYmplY3QgJyVzJyBoYXMgbm8gbm90ZSIgJSAob2JqbmFtZSkpCisgICAgICAgIHJldHVybiBibG9iZGF0YQorCisgICAgZGVmIGdldCAoc2VsZiwgb2JqbmFtZSwgZGVmYXVsdCA9IE5vbmUpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIG5vdGUgY29udGVudHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBvYmplY3QuCisKKyAgICAgICAgUmV0dXJuIGdpdmVuIGRlZmF1bHQgaWYgZ2l2ZW4gb2JqZWN0IGhhcyBubyBhc3NvY2lhdGVkIG5vdGUuCisKKyAgICAgICAgIiIiCisgICAgICAgIGJsb2JkYXRhID0gc2VsZi5fbG9hZChvYmpuYW1lKQorICAgICAgICBpZiBibG9iZGF0YSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKyAgICAgICAgcmV0dXJuIGJsb2JkYXRhCisKKyAgICBkZWYgaW1wb3J0X25vdGUgKHNlbGYsIG9iam5hbWUsIGRhdGEsIGdmaSk6CisgICAgICAgICIiIlRlbGwgZ2l0IGZhc3QtaW1wb3J0IHRvIHN0b3JlIGRhdGEgYXMgYSBub3RlIGZvciBvYmpuYW1lLgorCisgICAgICAgIFRoaXMgbWV0aG9kIHVzZXMgdGhlIGdpdmVuIEdpdEZhc3RJbXBvcnQgb2JqZWN0IHRvIGNyZWF0ZSBhCisgICAgICAgIGJsb2IgY29udGFpbmluZyB0aGUgZ2l2ZW4gbm90ZSBkYXRhLiAgQWxzbyBhbiBlbnRyeSBtYXBwaW5nIHRoZQorICAgICAgICBnaXZlbiBvYmplY3QgbmFtZSB0byB0aGUgY3JlYXRlZCBibG9iIGlzIHN0b3JlZCB1bnRpbAorICAgICAgICBjb21taXRfbm90ZXMoKSBpcyBjYWxsZWQuCisKKyAgICAgICAgTm90ZSB0aGF0IHRoaXMgbWV0aG9kIG9ubHkgd29ya3MgaWYgaXQgaXMgbGF0ZXIgZm9sbG93ZWQgYnkgYQorICAgICAgICBjYWxsIHRvIHNlbGYuY29tbWl0X25vdGVzKCkgKHdoaWNoIHByb2R1Y2VzIHRoZSBub3RlIGNvbW1pdAorICAgICAgICB0aGF0IHJlZmVycyB0byB0aGUgYmxvYiBwcm9kdWNlZCBoZXJlKS4KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGRhdGEuZW5kc3dpdGgoIlxuIik6CisgICAgICAgICAgICBkYXRhICs9ICJcbiIKKyAgICAgICAgZ2ZpLmNvbW1lbnQoIkltcG9ydGluZyBub3RlIGZvciBvYmplY3QgJXMiICUgKG9iam5hbWUpKQorICAgICAgICBtYXJrID0gZ2ZpLmJsb2IoZGF0YSkKKyAgICAgICAgc2VsZi5pbXBvcnRzLmFwcGVuZCgob2JqbmFtZSwgbWFyaykpCisKKyAgICBkZWYgY29tbWl0X25vdGVzIChzZWxmLCBnZmksIGF1dGhvciwgbWVzc2FnZSk6CisgICAgICAgICIiIlByb2R1Y2UgYSBnaXQgZmFzdC1pbXBvcnQgbm90ZSBjb21taXQgZm9yIHRoZSBpbXBvcnRlZCBub3Rlcy4KKworICAgICAgICBUaGlzIG1ldGhvZCB1c2VzIHRoZSBnaXZlbiBHaXRGYXN0SW1wb3J0IG9iamVjdCB0byBjcmVhdGUgYQorICAgICAgICBjb21taXQgb24gdGhlIG5vdGVzIHJlZiwgaW50cm9kdWNpbmcgdGhlIG5vdGVzIHByZXZpb3VzbHkKKyAgICAgICAgc3VibWl0dGVkIHRvIGltcG9ydF9ub3RlKCkuCisKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLmltcG9ydHM6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgY29tbWl0ZGF0YSA9IEdpdEZJQ29tbWl0KGF1dGhvclswXSwgYXV0aG9yWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZS50aW1lKCksICIwMDAwIiwgbWVzc2FnZSkKKyAgICAgICAgZm9yIG9iam5hbWUsIGJsb2JuYW1lIGluIHNlbGYuaW1wb3J0czoKKyAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG9iam5hbWUsIGludCkgYW5kIG9iam5hbWUgPiAwCisgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShibG9ibmFtZSwgaW50KSBhbmQgYmxvYm5hbWUgPiAwCisgICAgICAgICAgICBjb21taXRkYXRhLm5vdGUoYmxvYm5hbWUsIG9iam5hbWUpCisgICAgICAgIGdmaS5jb21taXQoc2VsZi5ub3Rlc19yZWYsIGNvbW1pdGRhdGEpCisgICAgICAgIHNlbGYuaW1wb3J0cyA9IFtdCisKKworY2xhc3MgR2l0Q2FjaGVkTm90ZXMoR2l0Tm90ZXMpOgorCisgICAgIiIiRW5jYXBzdWxhdGUgYWNjZXNzIHRvIEdpdCBub3RlcyAoY2FjaGVkIHZlcnNpb24pLgorCisgICAgT25seSB1c2UgdGhpcyBjbGFzcyBpZiBubyBjYWNoaW5nIGlzIGRvbmUgYXQgYSBoaWdoZXIgbGV2ZWwuCisKKyAgICBTaW11bGF0ZXMgYSBkaWN0aW9uYXJ5IG9mIG9iamVjdCBuYW1lIChTSEExKSAtPiBHaXQgbm90ZSBtYXBwaW5ncy4KKworICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fIChzZWxmLCBub3Rlc19yZWYsIG9ial9mZXRjaGVyKToKKyAgICAgICAgIiIiU2V0IHVwIGEgY2FjaGluZyB3cmFwcGVyIGFyb3VuZCBHaXROb3Rlcy4iIiIKKyAgICAgICAgR2l0Tm90ZXMuX19pbml0X18oc2VsZiwgbm90ZXNfcmVmLCBvYmpfZmV0Y2hlcikKKyAgICAgICAgc2VsZi5fY2FjaGUgPSB7fSAgIyBDYWNoZTogb2JqZWN0IG5hbWUgLT4gbm90ZSBkYXRhCisKKyAgICBkZWYgX19kZWxfXyAoc2VsZik6CisgICAgICAgICIiIlZlcmlmeSB0aGF0IEdpdE5vdGVzJyBkZXN0cnVjdG9yIGlzIGNhbGxlZC4iIiIKKyAgICAgICAgR2l0Tm90ZXMuX19kZWxfXyhzZWxmKQorCisgICAgZGVmIF9sb2FkIChzZWxmLCBvYmpuYW1lKToKKyAgICAgICAgIiIiRXh0ZW5kIEdpdE5vdGVzLl9sb2FkKCkgd2l0aCBhIGxvY2FsIG9iam5hbWUgLT4gbm90ZSBjYWNoZS4iIiIKKyAgICAgICAgaWYgb2JqbmFtZSBub3QgaW4gc2VsZi5fY2FjaGU6CisgICAgICAgICAgICBzZWxmLl9jYWNoZVtvYmpuYW1lXSA9IEdpdE5vdGVzLl9sb2FkKHNlbGYsIG9iam5hbWUpCisgICAgICAgIHJldHVybiBzZWxmLl9jYWNoZVtvYmpuYW1lXQorCisgICAgZGVmIGltcG9ydF9ub3RlIChzZWxmLCBvYmpuYW1lLCBkYXRhLCBnZmkpOgorICAgICAgICAiIiJFeHRlbmQgR2l0Tm90ZXMuaW1wb3J0X25vdGUoKSB3aXRoIGEgbG9jYWwgb2JqbmFtZSAtPiBub3RlIGNhY2hlLiIiIgorICAgICAgICBpZiBub3QgZGF0YS5lbmRzd2l0aCgiXG4iKToKKyAgICAgICAgICAgIGRhdGEgKz0gIlxuIgorICAgICAgICBhc3NlcnQgb2JqbmFtZSBub3QgaW4gc2VsZi5fY2FjaGUKKyAgICAgICAgc2VsZi5fY2FjaGVbb2JqbmFtZV0gPSBkYXRhCisgICAgICAgIEdpdE5vdGVzLmltcG9ydF9ub3RlKHNlbGYsIG9iam5hbWUsIGRhdGEsIGdmaSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvZ2l0X3JlbW90ZV9oZWxwZXJzL3NldHVwLnB5IGIvZ2l0X3JlbW90ZV9oZWxwZXJzL3NldHVwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNDM0YjYKLS0tIC9kZXYvbnVsbAorKysgYi9naXRfcmVtb3RlX2hlbHBlcnMvc2V0dXAucHkKQEAgLTAsMCArMSwxNyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyIiIkRpc3R1dGlscyBidWlsZC9pbnN0YWxsIHNjcmlwdCBmb3IgdGhlIGdpdF9yZW1vdGVfaGVscGVycyBwYWNrYWdlLiIiIgorCitmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBzZXR1cAorCitzZXR1cCgKKyAgICBuYW1lID0gJ2dpdF9yZW1vdGVfaGVscGVycycsCisgICAgdmVyc2lvbiA9ICcwLjEuMCcsCisgICAgZGVzY3JpcHRpb24gPSAnR2l0IHJlbW90ZSBoZWxwZXIgcHJvZ3JhbSBmb3Igbm9uLWdpdCByZXBvc2l0b3JpZXMnLAorICAgIGxpY2Vuc2UgPSAnR1BMdjInLAorICAgIGF1dGhvciA9ICdUaGUgR2l0IENvbW11bml0eScsCisgICAgYXV0aG9yX2VtYWlsID0gJ2dpdEB2Z2VyLmtlcm5lbC5vcmcnLAorICAgIHVybCA9ICdodHRwOi8vd3d3LmdpdC1zY20uY29tLycsCisgICAgcGFja2FnZV9kaXIgPSB7J2dpdF9yZW1vdGVfaGVscGVycyc6ICcnfSwKKyAgICBwYWNrYWdlcyA9IFsnZ2l0X3JlbW90ZV9oZWxwZXJzJywgJ2dpdF9yZW1vdGVfaGVscGVycy5naXQnXSwKKykKZGlmZiAtLWdpdCBhL2dpdF9yZW1vdGVfaGVscGVycy91dGlsLnB5IGIvZ2l0X3JlbW90ZV9oZWxwZXJzL3V0aWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNlODNlNgotLS0gL2Rldi9udWxsCisrKyBiL2dpdF9yZW1vdGVfaGVscGVycy91dGlsLnB5CkBAIC0wLDAgKzEsMTk0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIiIiTWlzYy4gdXNlZnVsIGZ1bmN0aW9uYWxpdHkgdXNlZCBieSB0aGUgcmVzdCBvZiB0aGlzIHBhY2thZ2UuCisKK1RoaXMgbW9kdWxlIHByb3ZpZGVzIGNvbW1vbiBmdW5jdGlvbmFsaXR5IHVzZWQgYnkgdGhlIG90aGVyIG1vZHVsZXMgaW4KK3RoaXMgcGFja2FnZS4KKworIiIiCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKKworCisjIFdoZXRoZXIgb3Igbm90IHRvIHNob3cgZGVidWcgbWVzc2FnZXMKK0RFQlVHID0gRmFsc2UKKworZGVmIG5vdGlmeShtc2csICphcmdzKToKKyAgICAiIiJQcmludCBhIG1lc3NhZ2UgdG8gc3RkZXJyLiIiIgorICAgIHByaW50ID4+IHN5cy5zdGRlcnIsIG1zZyAlIGFyZ3MKKworZGVmIGRlYnVnIChtc2csICphcmdzKToKKyAgICAiIiJQcmludCBhIGRlYnVnIG1lc3NhZ2UgdG8gc3RkZXJyIHdoZW4gREVCVUcgaXMgZW5hYmxlZC4iIiIKKyAgICBpZiBERUJVRzoKKyAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgbXNnICUgYXJncworCitkZWYgZXJyb3IgKG1zZywgKmFyZ3MpOgorICAgICIiIlByaW50IGFuIGVycm9yIG1lc3NhZ2UgdG8gc3RkZXJyLiIiIgorICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICJFUlJPUjoiLCBtc2cgJSBhcmdzCisKK2RlZiB3YXJuKG1zZywgKmFyZ3MpOgorICAgICIiIlByaW50IGEgd2FybmluZyBtZXNzYWdlIHRvIHN0ZGVyci4iIiIKKyAgICBwcmludCA+PiBzeXMuc3RkZXJyLCAid2FybmluZzoiLCBtc2cgJSBhcmdzCisKK2RlZiBkaWUgKG1zZywgKmFyZ3MpOgorICAgICIiIlByaW50IGFzIGVycm9yIG1lc3NhZ2UgdG8gc3RkZXJyIGFuZCBleGl0IHRoZSBwcm9ncmFtLiIiIgorICAgIGVycm9yKG1zZywgKmFyZ3MpCisgICAgc3lzLmV4aXQoMSkKKworCitjbGFzcyBQcm9ncmVzc0luZGljYXRvcihvYmplY3QpOgorCisgICAgIiIiU2ltcGxlIHByb2dyZXNzIGluZGljYXRvci4KKworICAgIERpc3BsYXllZCBhcyBhIHNwaW5uaW5nIGNoYXJhY3RlciBieSBkZWZhdWx0LCBidXQgY2FuIGJlIGN1c3RvbWl6ZWQKKyAgICBieSBwYXNzaW5nIGN1c3RvbSBtZXNzYWdlcyB0aGF0IG92ZXJyaWRlcyB0aGUgc3Bpbm5pbmcgY2hhcmFjdGVyLgorCisgICAgIiIiCisKKyAgICBTdGF0ZXMgPSAoInwiLCAiLyIsICItIiwgIlxcIikKKworICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgcHJlZml4ID0gIiIsIGYgPSBzeXMuc3Rkb3V0KToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IFByb2dyZXNzSW5kaWNhdG9yLCBib3VuZCB0byB0aGUgZ2l2ZW4gZmlsZSBvYmplY3QuIiIiCisgICAgICAgIHNlbGYubiA9IDAgICMgU2ltcGxlIHByb2dyZXNzIGNvdW50ZXIKKyAgICAgICAgc2VsZi5mID0gZiAgIyBQcm9ncmVzcyBpcyB3cml0dGVuIHRvIHRoaXMgZmlsZSBvYmplY3QKKyAgICAgICAgc2VsZi5wcmV2X2xlbiA9IDAgICMgTGVuZ3RoIG9mIHByZXZpb3VzIG1zZyAodG8gYmUgb3ZlcndyaXR0ZW4pCisgICAgICAgIHNlbGYucHJlZml4ID0gcHJlZml4ICAjIFByZWZpeCBwcmVwZW5kZWQgdG8gZWFjaCBwcm9ncmVzcyBtZXNzYWdlCisgICAgICAgIHNlbGYucHJlZml4X2xlbnMgPSBbXSAjIFN0YWNrIG9mIHByZWZpeCBzdHJpbmcgbGVuZ3RocworCisgICAgZGVmIHB1c2hwcmVmaXggKHNlbGYsIHByZWZpeCk6CisgICAgICAgICIiIkFwcGVuZCB0aGUgZ2l2ZW4gcHJlZml4IG9udG8gdGhlIHByZWZpeCBzdGFjay4iIiIKKyAgICAgICAgc2VsZi5wcmVmaXhfbGVucy5hcHBlbmQobGVuKHNlbGYucHJlZml4KSkKKyAgICAgICAgc2VsZi5wcmVmaXggKz0gcHJlZml4CisKKyAgICBkZWYgcG9wcHJlZml4IChzZWxmKToKKyAgICAgICAgIiIiUmVtb3ZlIHRoZSBsYXN0IHByZWZpeCBmcm9tIHRoZSBwcmVmaXggc3RhY2suIiIiCisgICAgICAgIHByZXZfbGVuID0gc2VsZi5wcmVmaXhfbGVucy5wb3AoKQorICAgICAgICBzZWxmLnByZWZpeCA9IHNlbGYucHJlZml4WzpwcmV2X2xlbl0KKworICAgIGRlZiBfX2NhbGxfXyAoc2VsZiwgbXNnID0gTm9uZSwgbGYgPSBGYWxzZSk6CisgICAgICAgICIiIkluZGljYXRlIHByb2dyZXNzLCBwb3NzaWJseSB3aXRoIGEgY3VzdG9tIG1lc3NhZ2UuIiIiCisgICAgICAgIGlmIG1zZyBpcyBOb25lOgorICAgICAgICAgICAgbXNnID0gc2VsZi5TdGF0ZXNbc2VsZi5uICUgbGVuKHNlbGYuU3RhdGVzKV0KKyAgICAgICAgbXNnID0gc2VsZi5wcmVmaXggKyBtc2cKKyAgICAgICAgcHJpbnQgPj4gc2VsZi5mLCAiXHIlLSpzIiAlIChzZWxmLnByZXZfbGVuLCBtc2cpLAorICAgICAgICBzZWxmLnByZXZfbGVuID0gbGVuKG1zZy5leHBhbmR0YWJzKCkpCisgICAgICAgIGlmIGxmOgorICAgICAgICAgICAgcHJpbnQgPj4gc2VsZi5mCisgICAgICAgICAgICBzZWxmLnByZXZfbGVuID0gMAorICAgICAgICBzZWxmLm4gKz0gMQorCisgICAgZGVmIGZpbmlzaCAoc2VsZiwgbXNnID0gImRvbmUiLCBub3ByZWZpeCA9IEZhbHNlKToKKyAgICAgICAgIiIiRmluYWxpemUgcHJvZ3Jlc3MgaW5kaWNhdGlvbiB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlLiIiIgorICAgICAgICBpZiBub3ByZWZpeDoKKyAgICAgICAgICAgIHNlbGYucHJlZml4ID0gIiIKKyAgICAgICAgc2VsZihtc2csIFRydWUpCisKKworZGVmIHN0YXJ0X2NvbW1hbmQgKGFyZ3MsIGN3ZCA9IE5vbmUsIHNoZWxsID0gRmFsc2UsIGFkZF9lbnYgPSBOb25lLAorICAgICAgICAgICAgICAgICAgIHN0ZGluID0gc3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQgPSBzdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgc3RkZXJyID0gc3VicHJvY2Vzcy5QSVBFKToKKyAgICAiIiJTdGFydCB0aGUgZ2l2ZW4gY29tbWFuZCwgYW5kIHJldHVybiBhIHN1YnByb2Nlc3Mgb2JqZWN0LgorCisgICAgVGhpcyBwcm92aWRlcyBhIHNpbXBsZXIgaW50ZXJmYWNlIHRvIHRoZSBzdWJwcm9jZXNzIG1vZHVsZS4KKworICAgICIiIgorICAgIGVudiA9IE5vbmUKKyAgICBpZiBhZGRfZW52IGlzIG5vdCBOb25lOgorICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBlbnYudXBkYXRlKGFkZF9lbnYpCisgICAgcmV0dXJuIHN1YnByb2Nlc3MuUG9wZW4oYXJncywgYnVmc2l6ZSA9IDEsIHN0ZGluID0gc3RkaW4sIHN0ZG91dCA9IHN0ZG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnIgPSBzdGRlcnIsIGN3ZCA9IGN3ZCwgc2hlbGwgPSBzaGVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnYgPSBlbnYsIHVuaXZlcnNhbF9uZXdsaW5lcyA9IFRydWUpCisKKworZGVmIHJ1bl9jb21tYW5kIChhcmdzLCBjd2QgPSBOb25lLCBzaGVsbCA9IEZhbHNlLCBhZGRfZW52ID0gTm9uZSwKKyAgICAgICAgICAgICAgICAgZmxhZ19lcnJvciA9IFRydWUpOgorICAgICIiIlJ1biB0aGUgZ2l2ZW4gY29tbWFuZCB0byBjb21wbGV0aW9uLCBhbmQgcmV0dXJuIGl0cyByZXN1bHRzLgorCisgICAgVGhpcyBwcm92aWRlcyBhIHNpbXBsZXIgaW50ZXJmYWNlIHRvIHRoZSBzdWJwcm9jZXNzIG1vZHVsZS4KKworICAgIFRoZSByZXN1bHRzIGFyZSBmb3JtYXR0ZWQgYXMgYSAzLXR1cGxlOiAoZXhpdF9jb2RlLCBvdXRwdXQsIGVycm9ycykKKworICAgIElmIGZsYWdfZXJyb3IgaXMgZW5hYmxlZCwgRXJyb3IgbWVzc2FnZXMgd2lsbCBiZSBwcm9kdWNlZCBpZiB0aGUKKyAgICBzdWJwcm9jZXNzIHRlcm1pbmF0ZWQgd2l0aCBhIG5vbi16ZXJvIGV4aXQgY29kZSBhbmQvb3Igc3RkZXJyCisgICAgb3V0cHV0LgorCisgICAgVGhlIG90aGVyIGFyZ3VtZW50cyBhcmUgcGFzc2VkIG9uIHRvIHN0YXJ0X2NvbW1hbmQoKS4KKworICAgICIiIgorICAgIHByb2Nlc3MgPSBzdGFydF9jb21tYW5kKGFyZ3MsIGN3ZCwgc2hlbGwsIGFkZF9lbnYpCisgICAgKG91dHB1dCwgZXJyb3JzKSA9IHByb2Nlc3MuY29tbXVuaWNhdGUoKQorICAgIGV4aXRfY29kZSA9IHByb2Nlc3MucmV0dXJuY29kZQorICAgIGlmIGZsYWdfZXJyb3IgYW5kIGVycm9yczoKKyAgICAgICAgZXJyb3IoIiclcycgcmV0dXJuZWQgZXJyb3JzOlxuLS0tXG4lcy0tLSIsICIgIi5qb2luKGFyZ3MpLCBlcnJvcnMpCisgICAgaWYgZmxhZ19lcnJvciBhbmQgZXhpdF9jb2RlOgorICAgICAgICBlcnJvcigiJyVzJyByZXR1cm5lZCBleGl0IGNvZGUgJWkiLCAiICIuam9pbihhcmdzKSwgZXhpdF9jb2RlKQorICAgIHJldHVybiAoZXhpdF9jb2RlLCBvdXRwdXQsIGVycm9ycykKKworCitkZWYgZmlsZV9yZWFkZXJfbWV0aG9kIChtaXNzaW5nX29rID0gRmFsc2UpOgorICAgICIiIkRlY29yYXRvciBmb3Igc2ltcGxpZnlpbmcgcmVhZGluZyBvZiBmaWxlcy4KKworICAgIElmIG1pc3Npbmdfb2sgaXMgVHJ1ZSwgYSBmYWlsdXJlIHRvIG9wZW4gYSBmaWxlIGZvciByZWFkaW5nIHdpbGwKKyAgICBub3QgcmFpc2UgdGhlIHVzdWFsIElPRXJyb3IsIGJ1dCBpbnN0ZWFkIHRoZSB3cmFwcGVkIG1ldGhvZCB3aWxsIGJlCisgICAgY2FsbGVkIHdpdGggZiA9PSBOb25lLiAgVGhlIG1ldGhvZCBtdXN0IGluIHRoaXMgY2FzZSBwcm9wZXJseQorICAgIGhhbmRsZSBmID09IE5vbmUuCisKKyAgICAiIiIKKyAgICBkZWYgX3dyYXAgKG1ldGhvZCk6CisgICAgICAgICIiIlRlYWNoIGdpdmVuIG1ldGhvZCB0byBoYW5kbGUgYm90aCBmaWxlbmFtZXMgYW5kIGZpbGUgb2JqZWN0cy4KKworICAgICAgICBUaGUgZ2l2ZW4gbWV0aG9kIG11c3QgdGFrZSBhIGZpbGUgb2JqZWN0IGFzIGl0cyBzZWNvbmQgYXJndW1lbnQKKyAgICAgICAgKHRoZSBmaXJzdCBhcmd1bWVudCBiZWluZyAnc2VsZicsIG9mIGNvdXJzZSkuICBUaGlzIGRlY29yYXRvcgorICAgICAgICB3aWxsIHRha2UgYSBmaWxlbmFtZSBnaXZlbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IGFuZCBwcm9tb3RlCisgICAgICAgIGl0IHRvIGEgZmlsZSBvYmplY3QuCisKKyAgICAgICAgIiIiCisgICAgICAgIGRlZiBfd3JhcHBlZF9tZXRob2QgKHNlbGYsIGZpbGVuYW1lLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShmaWxlbmFtZSwgZmlsZSk6CisgICAgICAgICAgICAgICAgZiA9IGZpbGVuYW1lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICdyJykKKyAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgaWYgbWlzc2luZ19vazoKKyAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBtZXRob2Qoc2VsZiwgZiwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShmaWxlbmFtZSwgZmlsZSkgYW5kIGY6CisgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICByZXR1cm4gX3dyYXBwZWRfbWV0aG9kCisgICAgcmV0dXJuIF93cmFwCisKKworZGVmIGZpbGVfd3JpdGVyX21ldGhvZCAobWV0aG9kKToKKyAgICAiIiJEZWNvcmF0b3IgZm9yIHNpbXBsaWZ5aW5nIHdyaXRpbmcgb2YgZmlsZXMuCisKKyAgICBFbmFibGVzIHRoZSBnaXZlbiBtZXRob2QgdG8gaGFuZGxlIGJvdGggZmlsZW5hbWVzIGFuZCBmaWxlIG9iamVjdHMuCisKKyAgICBUaGUgZ2l2ZW4gbWV0aG9kIG11c3QgdGFrZSBhIGZpbGUgb2JqZWN0IGFzIGl0cyBzZWNvbmQgYXJndW1lbnQKKyAgICAodGhlIGZpcnN0IGFyZ3VtZW50IGJlaW5nICdzZWxmJywgb2YgY291cnNlKS4gIFRoaXMgZGVjb3JhdG9yIHdpbGwKKyAgICB0YWtlIGEgZmlsZW5hbWUgZ2l2ZW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCBhbmQgcHJvbW90ZSBpdCB0byBhCisgICAgZmlsZSBvYmplY3QuCisKKyAgICAiIiIKKyAgICBkZWYgX25ld19tZXRob2QgKHNlbGYsIGZpbGVuYW1lLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGZpbGVuYW1lLCBmaWxlKToKKyAgICAgICAgICAgIGYgPSBmaWxlbmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5IGV4aXN0cworICAgICAgICAgICAgcGFyZW50X2RpciA9IG9zLnBhdGguZGlybmFtZShmaWxlbmFtZSkKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHBhcmVudF9kaXIpOgorICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKHBhcmVudF9kaXIpCisgICAgICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgJ3cnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gbWV0aG9kKHNlbGYsIGYsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGZpbGVuYW1lLCBmaWxlKToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICByZXR1cm4gX25ld19tZXRob2QKZGlmZiAtLWdpdCBhL2dpdGstZ2l0L2dpdGsgYi9naXRrLWdpdC9naXRrCmluZGV4IDFhNzg4N2IuLjFmMzZhM2UgMTAwNjQ0Ci0tLSBhL2dpdGstZ2l0L2dpdGsKKysrIGIvZ2l0ay1naXQvZ2l0awpAQCAtMiwxMSArMiwxMyBAQAogIyBUY2wgaWdub3JlcyB0aGUgbmV4dCBsaW5lIC0qLSB0Y2wgLSotIFwKIGV4ZWMgd2lzaCAiJDAiIC0tICIkQCIKIAotIyBDb3B5cmlnaHQgwqkgMjAwNS0yMDA4IFBhdWwgTWFja2VycmFzLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IMKpIDIwMDUtMjAwOSBQYXVsIE1hY2tlcnJhcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyBpdCBtYXkgYmUgdXNlZCwgY29waWVkLCBtb2RpZmllZAogIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZSwKICMgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAorcGFja2FnZSByZXF1aXJlIFRrCisKIHByb2MgZ2l0ZGlyIHt9IHsKICAgICBnbG9iYWwgZW52CiAgICAgaWYge1tpbmZvIGV4aXN0cyBlbnYoR0lUX0RJUildfSB7CkBAIC0xMjgsNyArMTMwLDcgQEAKIH0KIAogcHJvYyBwYXJzZXZpZXdhcmdzIHtuIGFyZ2xpc3R9IHsKLSAgICBnbG9iYWwgdmRhdGVtb2RlIHZtZXJnZW9ubHkgdmZsYWdzIHZkZmxhZ3MgdnJldnMgdmZpbHRlcmVkIHZvcmlnYXJncworICAgIGdsb2JhbCB2ZGF0ZW1vZGUgdm1lcmdlb25seSB2ZmxhZ3MgdmRmbGFncyB2cmV2cyB2ZmlsdGVyZWQgdm9yaWdhcmdzIGVudgogCiAgICAgc2V0IHZkYXRlbW9kZSgkbikgMAogICAgIHNldCB2bWVyZ2Vvbmx5KCRuKSAwCkBAIC0xODcsNyArMTg5LDggQEAKIAkgICAgIi0tdW50aWw9KiIgLSAiLS1iZWZvcmU9KiIgLSAiLS1tYXgtYWdlPSoiIC0gIi0tbWluLWFnZT0qIiAtCiAJICAgICItLWF1dGhvcj0qIiAtICItLWNvbW1pdHRlcj0qIiAtICItLWdyZXA9KiIgLSAiLVtpRV0iIC0KIAkgICAgIi0tcmVtb3ZlLWVtcHR5IiAtICItLWZpcnN0LXBhcmVudCIgLSAiLS1jaGVycnktcGljayIgLQotCSAgICAiLVMqIiAtICItLXBpY2theGUtYWxsIiAtICItLXBpY2theGUtcmVnZXgiIHsKKwkgICAgIi1TKiIgLSAiLS1waWNrYXhlLWFsbCIgLSAiLS1waWNrYXhlLXJlZ2V4IiAtCisJICAgICItLXNpbXBsaWZ5LWJ5LWRlY29yYXRpb24iIHsKIAkJIyBUaGVzZSBtZWFuIHRoYXQgd2UgZ2V0IGEgc3Vic2V0IG9mIHRoZSBjb21taXRzCiAJCXNldCBmaWx0ZXJlZCAxCiAJCWxhcHBlbmQgZ2xmbGFncyAkYXJnCkBAIC0yMDcsNiArMjEwLDkgQEAKIAkJIyBnaXQgcmV2LXBhcnNlIGRvZXNuJ3QgdW5kZXJzdGFuZCAtLW1lcmdlCiAJCWxhcHBlbmQgcmV2YXJncyAtLWdpdGstc3ltbWV0cmljLWRpZmYtbWFya2VyIE1FUkdFX0hFQUQuLi5IRUFECiAJICAgIH0KKwkgICAgIi0tbm8tcmVwbGFjZS1vYmplY3RzIiB7CisJCXNldCBlbnYoR0lUX05PX1JFUExBQ0VfT0JKRUNUUykgIjEiCisJICAgIH0KIAkgICAgIi0qIiB7CiAJCSMgT3RoZXIgZmxhZyBhcmd1bWVudHMgaW5jbHVkaW5nIC08bj4KIAkJaWYge1tzdHJpbmcgaXMgZGlnaXQgLXN0cmljdCBbc3RyaW5nIHJhbmdlICRhcmcgMSBlbmRdXX0gewpAQCAtMjY0LDcgKzI3MCw3IEBACiAJCX0KIAkJbGFwcGVuZCBiYWRyZXYgJGxpbmUKIAkgICAgfQotCX0JCSAgICAKKwl9CiAJZXJyb3JfcG9wdXAgIlttYyAiRXJyb3IgcGFyc2luZyByZXZpc2lvbnM6Il0gJGVyciIKIAlyZXR1cm4ge30KICAgICB9CkBAIC0yODcsNyArMjkzLDcgQEAKIAkgICAgaWYgeyRzZG0gIT0gMn0gewogCQlsYXBwZW5kIHJldCAkaWQKIAkgICAgfSBlbHNlIHsKLQkJbHNldCByZXQgZW5kIFtsaW5kZXggJHJldCBlbmRdLi4uJGlkCisJCWxzZXQgcmV0IGVuZCAkaWQuLi5bbGluZGV4ICRyZXQgZW5kXQogCSAgICB9CiAJICAgIGxhcHBlbmQgcG9zICRpZAogCX0KQEAgLTk4Niw2ICs5OTIsMTggQEAKICAgICBkcmF3dmlzaWJsZQogfQogCitwcm9jIHJlYWxfY2hpbGRyZW4ge3ZwfSB7CisgICAgZ2xvYmFsIGNoaWxkcmVuIG51bGxpZCBudWxsaWQyCisKKyAgICBzZXQga2lkcyB7fQorICAgIGZvcmVhY2ggaWQgJGNoaWxkcmVuKCR2cCkgeworCWlmIHskaWQgbmUgJG51bGxpZCAmJiAkaWQgbmUgJG51bGxpZDJ9IHsKKwkgICAgbGFwcGVuZCBraWRzICRpZAorCX0KKyAgICB9CisgICAgcmV0dXJuICRraWRzCit9CisKIHByb2MgZmlyc3RfcmVhbF9jaGlsZCB7dnB9IHsKICAgICBnbG9iYWwgY2hpbGRyZW4gbnVsbGlkIG51bGxpZDIKIApAQCAtMTY3Niw2ICsxNjk0LDcgQEAKICAgICBnbG9iYWwgdGFnaWRzIGlkdGFncyBoZWFkaWRzIGlkaGVhZHMgdGFnb2JqaWQKICAgICBnbG9iYWwgb3RoZXJyZWZpZHMgaWRvdGhlcnJlZnMgbWFpbmhlYWQgbWFpbmhlYWRpZAogICAgIGdsb2JhbCBzZWxlY3RoZWFkIHNlbGVjdGhlYWRpZAorICAgIGdsb2JhbCBoaWRlcmVtb3RlcwogCiAgICAgZm9yZWFjaCB2IHt0YWdpZHMgaWR0YWdzIGhlYWRpZHMgaWRoZWFkcyBvdGhlcnJlZmlkcyBpZG90aGVycmVmc30gewogCWNhdGNoIHt1bnNldCAkdn0KQEAgLTE2ODgsNyArMTcwNyw3IEBACiAJaWYgeyFbc3RyaW5nIG1hdGNoICJyZWZzLyoiICRyZWZdfSBjb250aW51ZQogCXNldCBuYW1lIFtzdHJpbmcgcmFuZ2UgJHJlZiA1IGVuZF0KIAlpZiB7W3N0cmluZyBtYXRjaCAicmVtb3Rlcy8qIiAkbmFtZV19IHsKLQkgICAgaWYgeyFbc3RyaW5nIG1hdGNoICIqL0hFQUQiICRuYW1lXX0geworCSAgICBpZiB7IVtzdHJpbmcgbWF0Y2ggIiovSEVBRCIgJG5hbWVdICYmICEkaGlkZXJlbW90ZXN9IHsKIAkJc2V0IGhlYWRpZHMoJG5hbWUpICRpZAogCQlsYXBwZW5kIGlkaGVhZHMoJGlkKSAkbmFtZQogCSAgICB9CkBAIC0xNzY3LDYgKzE3ODYsMTUgQEAKICAgICB1bnNldCBoZWFkaWRzKCRuYW1lKQogfQogCitwcm9jIHR0a190b3BsZXZlbCB7dyBhcmdzfSB7CisgICAgZ2xvYmFsIHVzZV90dGsKKyAgICBldmFsIFtsaW5zZXJ0ICRhcmdzIDAgOjp0b3BsZXZlbCAkd10KKyAgICBpZiB7JHVzZV90dGt9IHsKKyAgICAgICAgcGxhY2UgW3R0azo6ZnJhbWUgJHcuX3RvcGxldmVsX2JhY2tncm91bmRdIC14IDAgLXkgMCAtcmVsd2lkdGggMSAtcmVsaGVpZ2h0IDEKKyAgICB9CisgICAgcmV0dXJuICR3Cit9CisKIHByb2MgbWFrZV90cmFuc2llbnQge3dpbmRvdyBvcmlnaW59IHsKICAgICBnbG9iYWwgaGF2ZV90azg1CiAKQEAgLTE3ODUsMTAgKzE4MTMsMTMgQEAKICAgICB9CiB9CiAKLXByb2Mgc2hvd19lcnJvciB7dyB0b3AgbXNnfSB7Citwcm9jIHNob3dfZXJyb3Ige3cgdG9wIG1zZyB7bWMgbWN9fSB7CisgICAgZ2xvYmFsIE5TCisgICAgaWYgeyFbaW5mbyBleGlzdHMgTlNdfSB7c2V0IE5TICIifQorICAgIGlmIHtbd20gc3RhdGUgJHRvcF0gZXEgIndpdGhkcmF3biJ9IHsgd20gZGVpY29uaWZ5ICR0b3AgfQogICAgIG1lc3NhZ2UgJHcubSAtdGV4dCAkbXNnIC1qdXN0aWZ5IGNlbnRlciAtYXNwZWN0IDQwMAogICAgIHBhY2sgJHcubSAtc2lkZSB0b3AgLWZpbGwgeCAtcGFkeCAyMCAtcGFkeSAyMAotICAgIGJ1dHRvbiAkdy5vayAtdGV4dCBbbWMgT0tdIC1jb21tYW5kICJkZXN0cm95ICR0b3AiCisgICAgJHtOU306OmJ1dHRvbiAkdy5vayAtZGVmYXVsdCBhY3RpdmUgLXRleHQgWyRtYyBPS10gLWNvbW1hbmQgImRlc3Ryb3kgJHRvcCIKICAgICBwYWNrICR3Lm9rIC1zaWRlIGJvdHRvbSAtZmlsbCB4CiAgICAgYmluZCAkdG9wIDxWaXNpYmlsaXR5PiAiZ3JhYiAkdG9wOyBmb2N1cyAkdG9wIgogICAgIGJpbmQgJHRvcCA8S2V5LVJldHVybj4gImRlc3Ryb3kgJHRvcCIKQEAgLTE3OTgsNDUgKzE4MjksNTYgQEAKIH0KIAogcHJvYyBlcnJvcl9wb3B1cCB7bXNnIHtvd25lciAufX0gewotICAgIHNldCB3IC5lcnJvcgotICAgIHRvcGxldmVsICR3Ci0gICAgbWFrZV90cmFuc2llbnQgJHcgJG93bmVyCi0gICAgc2hvd19lcnJvciAkdyAkdyAkbXNnCisgICAgaWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dIGVxICJ3aW4zMiJ9IHsKKyAgICAgICAgdGtfbWVzc2FnZUJveCAtaWNvbiBlcnJvciAtdHlwZSBvayAtdGl0bGUgW3dtIHRpdGxlIC5dIFwKKyAgICAgICAgICAgIC1wYXJlbnQgJG93bmVyIC1tZXNzYWdlICRtc2cKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgdyAuZXJyb3IKKyAgICAgICAgdHRrX3RvcGxldmVsICR3CisgICAgICAgIG1ha2VfdHJhbnNpZW50ICR3ICRvd25lcgorICAgICAgICBzaG93X2Vycm9yICR3ICR3ICRtc2cKKyAgICB9CiB9CiAKIHByb2MgY29uZmlybV9wb3B1cCB7bXNnIHtvd25lciAufX0gewotICAgIGdsb2JhbCBjb25maXJtX29rCisgICAgZ2xvYmFsIGNvbmZpcm1fb2sgTlMKICAgICBzZXQgY29uZmlybV9vayAwCiAgICAgc2V0IHcgLmNvbmZpcm0KLSAgICB0b3BsZXZlbCAkdworICAgIHR0a190b3BsZXZlbCAkdwogICAgIG1ha2VfdHJhbnNpZW50ICR3ICRvd25lcgogICAgIG1lc3NhZ2UgJHcubSAtdGV4dCAkbXNnIC1qdXN0aWZ5IGNlbnRlciAtYXNwZWN0IDQwMAogICAgIHBhY2sgJHcubSAtc2lkZSB0b3AgLWZpbGwgeCAtcGFkeCAyMCAtcGFkeSAyMAotICAgIGJ1dHRvbiAkdy5vayAtdGV4dCBbbWMgT0tdIC1jb21tYW5kICJzZXQgY29uZmlybV9vayAxOyBkZXN0cm95ICR3IgorICAgICR7TlN9OjpidXR0b24gJHcub2sgLXRleHQgW21jIE9LXSAtY29tbWFuZCAic2V0IGNvbmZpcm1fb2sgMTsgZGVzdHJveSAkdyIKICAgICBwYWNrICR3Lm9rIC1zaWRlIGxlZnQgLWZpbGwgeAotICAgIGJ1dHRvbiAkdy5jYW5jZWwgLXRleHQgW21jIENhbmNlbF0gLWNvbW1hbmQgImRlc3Ryb3kgJHciCisgICAgJHtOU306OmJ1dHRvbiAkdy5jYW5jZWwgLXRleHQgW21jIENhbmNlbF0gLWNvbW1hbmQgImRlc3Ryb3kgJHciCiAgICAgcGFjayAkdy5jYW5jZWwgLXNpZGUgcmlnaHQgLWZpbGwgeAogICAgIGJpbmQgJHcgPFZpc2liaWxpdHk+ICJncmFiICR3OyBmb2N1cyAkdyIKICAgICBiaW5kICR3IDxLZXktUmV0dXJuPiAic2V0IGNvbmZpcm1fb2sgMTsgZGVzdHJveSAkdyIKICAgICBiaW5kICR3IDxLZXktc3BhY2U+ICAic2V0IGNvbmZpcm1fb2sgMTsgZGVzdHJveSAkdyIKICAgICBiaW5kICR3IDxLZXktRXNjYXBlPiAiZGVzdHJveSAkdyIKKyAgICB0azo6UGxhY2VXaW5kb3cgJHcgd2lkZ2V0ICRvd25lcgogICAgIHRrd2FpdCB3aW5kb3cgJHcKICAgICByZXR1cm4gJGNvbmZpcm1fb2sKIH0KIAogcHJvYyBzZXRvcHRpb25zIHt9IHsKLSAgICBvcHRpb24gYWRkICpQYW5lZHdpbmRvdy5zaG93SGFuZGxlIDEgc3RhcnR1cEZpbGUKLSAgICBvcHRpb24gYWRkICpQYW5lZHdpbmRvdy5zYXNoUmVsaWVmIHJhaXNlZCBzdGFydHVwRmlsZQorICAgIGlmIHtbdGsgd2luZG93aW5nc3lzdGVtXSBuZSAid2luMzIifSB7CisgICAgICAgIG9wdGlvbiBhZGQgKlBhbmVkd2luZG93LnNob3dIYW5kbGUgMSBzdGFydHVwRmlsZQorICAgICAgICBvcHRpb24gYWRkICpQYW5lZHdpbmRvdy5zYXNoUmVsaWVmIHJhaXNlZCBzdGFydHVwRmlsZQorICAgICAgICBpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gbmUgImFxdWEifSB7CisgICAgICAgICAgICBvcHRpb24gYWRkICpNZW51LmZvbnQgdWlmb250IHN0YXJ0dXBGaWxlCisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBvcHRpb24gYWRkICpNZW51LlRlYXJPZmYgMCBzdGFydHVwRmlsZQorICAgIH0KICAgICBvcHRpb24gYWRkICpCdXR0b24uZm9udCB1aWZvbnQgc3RhcnR1cEZpbGUKICAgICBvcHRpb24gYWRkICpDaGVja2J1dHRvbi5mb250IHVpZm9udCBzdGFydHVwRmlsZQogICAgIG9wdGlvbiBhZGQgKlJhZGlvYnV0dG9uLmZvbnQgdWlmb250IHN0YXJ0dXBGaWxlCi0gICAgaWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dIG5lICJhcXVhIn0gewotCW9wdGlvbiBhZGQgKk1lbnUuZm9udCB1aWZvbnQgc3RhcnR1cEZpbGUKLSAgICB9CiAgICAgb3B0aW9uIGFkZCAqTWVudWJ1dHRvbi5mb250IHVpZm9udCBzdGFydHVwRmlsZQogICAgIG9wdGlvbiBhZGQgKkxhYmVsLmZvbnQgdWlmb250IHN0YXJ0dXBGaWxlCiAgICAgb3B0aW9uIGFkZCAqTWVzc2FnZS5mb250IHVpZm9udCBzdGFydHVwRmlsZQogICAgIG9wdGlvbiBhZGQgKkVudHJ5LmZvbnQgdWlmb250IHN0YXJ0dXBGaWxlCisgICAgb3B0aW9uIGFkZCAqTGFiZWxmcmFtZS5mb250IHVpZm9udCBzdGFydHVwRmlsZQogfQogCiAjIE1ha2UgYSBtZW51IGFuZCBzdWJtZW51cy4KQEAgLTE4OTMsNiArMTkzNSwyMiBAQAogICAgIHJldHVybiBbc3RyaW5nIG1hcCB7JiYgJiAmIHt9fSBbbWMgJHN0cl1dCiB9CiAKK3Byb2MgbWFrZWRyb3BsaXN0IHt3IHZhcm5hbWUgYXJnc30geworICAgIGdsb2JhbCB1c2VfdHRrCisgICAgaWYgeyR1c2VfdHRrfSB7CisgICAgICAgIHNldCB3aWR0aCAwCisgICAgICAgIGZvcmVhY2ggbGFiZWwgJGFyZ3MgeworICAgICAgICAgICAgc2V0IGN4IFtzdHJpbmcgbGVuZ3RoICRsYWJlbF0KKyAgICAgICAgICAgIGlmIHskY3ggPiAkd2lkdGh9IHtzZXQgd2lkdGggJGN4fQorICAgICAgICB9CisJc2V0IGdtIFt0dGs6OmNvbWJvYm94ICR3IC13aWR0aCAkd2lkdGggLXN0YXRlIHJlYWRvbmx5XAorCQkgICAgLXRleHR2YXJpYWJsZSAkdmFybmFtZSAtdmFsdWVzICRhcmdzXQorICAgIH0gZWxzZSB7CisJc2V0IGdtIFtldmFsIFtsaW5zZXJ0ICRhcmdzIDAgdGtfb3B0aW9uTWVudSAkdyAkdmFybmFtZV1dCisgICAgfQorICAgIHJldHVybiAkZ20KK30KKwogcHJvYyBtYWtld2luZG93IHt9IHsKICAgICBnbG9iYWwgY2FudiBjYW52MiBjYW52MyBsaW5lc3BjIGNoYXJzcGMgY3RleHQgY2ZsaXN0IGNzY3JvbGwKICAgICBnbG9iYWwgdGFic3RvcApAQCAtMTkwOCw3ICsxOTY2LDcgQEAKICAgICBnbG9iYWwgaGVhZGN0eG1lbnUgcHJvZ3Jlc3NjYW52IHByb2dyZXNzaXRlbSBwcm9ncmVzc2Nvb3JkcyBzdGF0dXN3CiAgICAgZ2xvYmFsIGZwcm9naXRlbSBmcHJvZ2Nvb3JkIGxhc3Rwcm9ndXBkYXRlIHByb2d1cGRhdGVwZW5kaW5nCiAgICAgZ2xvYmFsIHJwcm9naXRlbSBycHJvZ2Nvb3JkIHJvd251bXNlbCBudW1jb21taXRzCi0gICAgZ2xvYmFsIGhhdmVfdGs4NQorICAgIGdsb2JhbCBoYXZlX3RrODUgdXNlX3R0ayBOUwogCiAgICAgIyBUaGUgIm1jIiBhcmd1bWVudHMgaGVyZSBhcmUgcHVyZWx5IHNvIHRoYXQgeGdldHRleHQKICAgICAjIHNlZXMgdGhlIGZvbGxvd2luZyBzdHJpbmcgYXMgbmVlZGluZyB0byBiZSB0cmFuc2xhdGVkCkBAIC0xOTYwLDggKzIwMTgsMTMgQEAKICAgICBtYWtlbWVudSAuYmFyICRiYXIKICAgICAuIGNvbmZpZ3VyZSAtbWVudSAuYmFyCiAKKyAgICBpZiB7JHVzZV90dGt9IHsKKyAgICAgICAgIyBjb3ZlciB0aGUgbm9uLXRoZW1lZCB0b3BsZXZlbCB3aXRoIGEgdGhlbWVkIGZyYW1lLgorICAgICAgICBwbGFjZSBbdHRrOjpmcmFtZSAuX21haW5fYmFja2dyb3VuZF0gLXggMCAteSAwIC1yZWx3aWR0aCAxIC1yZWxoZWlnaHQgMQorICAgIH0KKwogICAgICMgdGhlIGd1aSBoYXMgdXBwZXIgYW5kIGxvd2VyIGhhbGYsIHBhcnRzIG9mIGEgcGFuZWQgd2luZG93LgotICAgIHBhbmVkd2luZG93IC5jdG9wIC1vcmllbnQgdmVydGljYWwKKyAgICAke05TfTo6cGFuZWR3aW5kb3cgLmN0b3AgLW9yaWVudCB2ZXJ0aWNhbAogCiAgICAgIyBwb3NzaWJseSB1c2UgYXNzdW1lZCBnZW9tZXRyeQogICAgIGlmIHshW2luZm8gZXhpc3RzIGdlb21ldHJ5KHB3c2FzaDApXX0gewpAQCAtMTk2OSwxNCArMjAzMiwxNyBAQAogICAgICAgICBzZXQgZ2VvbWV0cnkodG9wd2lkdGgpIFtleHByIHs4MCAqICRjaGFyc3BjfV0KICAgICAgICAgc2V0IGdlb21ldHJ5KGJvdGhlaWdodCkgW2V4cHIgezE1ICogJGxpbmVzcGN9XQogICAgICAgICBzZXQgZ2VvbWV0cnkoYm90d2lkdGgpIFtleHByIHs1MCAqICRjaGFyc3BjfV0KLSAgICAgICAgc2V0IGdlb21ldHJ5KHB3c2FzaDApICJbZXhwciB7NDAgKiAkY2hhcnNwY31dIDIiCi0gICAgICAgIHNldCBnZW9tZXRyeShwd3Nhc2gxKSAiW2V4cHIgezYwICogJGNoYXJzcGN9XSAyIgorICAgICAgICBzZXQgZ2VvbWV0cnkocHdzYXNoMCkgW2xpc3QgW2V4cHIgezQwICogJGNoYXJzcGN9XSAyXQorICAgICAgICBzZXQgZ2VvbWV0cnkocHdzYXNoMSkgW2xpc3QgW2V4cHIgezYwICogJGNoYXJzcGN9XSAyXQogICAgIH0KIAogICAgICMgdGhlIHVwcGVyIGhhbGYgd2lsbCBoYXZlIGEgcGFuZWQgd2luZG93LCBhIHNjcm9sbCBiYXIgdG8gdGhlIHJpZ2h0LCBhbmQgc29tZSBzdHVmZiBiZWxvdwotICAgIGZyYW1lIC50ZiAtaGVpZ2h0ICRnZW9tZXRyeSh0b3BoZWlnaHQpIC13aWR0aCAkZ2VvbWV0cnkodG9wd2lkdGgpCi0gICAgZnJhbWUgLnRmLmhpc3RmcmFtZQotICAgIHBhbmVkd2luZG93IC50Zi5oaXN0ZnJhbWUucHdjbGlzdCAtb3JpZW50IGhvcml6b250YWwgLXNhc2hwYWQgMCAtaGFuZGxlc2l6ZSA0CisgICAgJHtOU306OmZyYW1lIC50ZiAtaGVpZ2h0ICRnZW9tZXRyeSh0b3BoZWlnaHQpIC13aWR0aCAkZ2VvbWV0cnkodG9wd2lkdGgpCisgICAgJHtOU306OmZyYW1lIC50Zi5oaXN0ZnJhbWUKKyAgICAke05TfTo6cGFuZWR3aW5kb3cgLnRmLmhpc3RmcmFtZS5wd2NsaXN0IC1vcmllbnQgaG9yaXpvbnRhbAorICAgIGlmIHshJHVzZV90dGt9IHsKKwkudGYuaGlzdGZyYW1lLnB3Y2xpc3QgY29uZmlndXJlIC1zYXNocGFkIDAgLWhhbmRsZXNpemUgNAorICAgIH0KIAogICAgICMgY3JlYXRlIHRocmVlIGNhbnZhc2VzCiAgICAgc2V0IGNzY3JvbGwgLnRmLmhpc3RmcmFtZS5jc2IKQEAgLTE5OTYsMjggKzIwNjIsMzcgQEAKIAktc2VsZWN0YmFja2dyb3VuZCAkc2VsZWN0Ymdjb2xvciBcCiAJLWJhY2tncm91bmQgJGJnY29sb3IgLWJkIDAgLXlzY3JvbGxpbmNyICRsaW5lc3BjCiAgICAgLnRmLmhpc3RmcmFtZS5wd2NsaXN0IGFkZCAkY2FudjMKLSAgICBldmFsIC50Zi5oaXN0ZnJhbWUucHdjbGlzdCBzYXNoIHBsYWNlIDAgJGdlb21ldHJ5KHB3c2FzaDApCi0gICAgZXZhbCAudGYuaGlzdGZyYW1lLnB3Y2xpc3Qgc2FzaCBwbGFjZSAxICRnZW9tZXRyeShwd3Nhc2gxKQorICAgIGlmIHskdXNlX3R0a30geworCWJpbmQgLnRmLmhpc3RmcmFtZS5wd2NsaXN0IDxNYXA+IHsKKwkgICAgYmluZCAlVyA8TWFwPiB7fQorCSAgICAudGYuaGlzdGZyYW1lLnB3Y2xpc3Qgc2FzaHBvcyAxIFtsaW5kZXggJDo6Z2VvbWV0cnkocHdzYXNoMSkgMF0KKwkgICAgLnRmLmhpc3RmcmFtZS5wd2NsaXN0IHNhc2hwb3MgMCBbbGluZGV4ICQ6Omdlb21ldHJ5KHB3c2FzaDApIDBdCisJfQorICAgIH0gZWxzZSB7CisJZXZhbCAudGYuaGlzdGZyYW1lLnB3Y2xpc3Qgc2FzaCBwbGFjZSAwICRnZW9tZXRyeShwd3Nhc2gwKQorCWV2YWwgLnRmLmhpc3RmcmFtZS5wd2NsaXN0IHNhc2ggcGxhY2UgMSAkZ2VvbWV0cnkocHdzYXNoMSkKKyAgICB9CiAKICAgICAjIGEgc2Nyb2xsIGJhciB0byBydWxlIHRoZW0KLSAgICBzY3JvbGxiYXIgJGNzY3JvbGwgLWNvbW1hbmQge2FsbGNhbnZzIHl2aWV3fSAtaGlnaGxpZ2h0dGhpY2tuZXNzIDAKKyAgICAke05TfTo6c2Nyb2xsYmFyICRjc2Nyb2xsIC1jb21tYW5kIHthbGxjYW52cyB5dmlld30KKyAgICBpZiB7ISR1c2VfdHRrfSB7JGNzY3JvbGwgY29uZmlndXJlIC1oaWdobGlnaHR0aGlja25lc3MgMH0KICAgICBwYWNrICRjc2Nyb2xsIC1zaWRlIHJpZ2h0IC1maWxsIHkKICAgICBiaW5kIC50Zi5oaXN0ZnJhbWUucHdjbGlzdCA8Q29uZmlndXJlPiB7cmVzaXplY2xpc3RwYW5lcyAlVyAld30KICAgICBsYXBwZW5kIGJnbGlzdCAkY2FudiAkY2FudjIgJGNhbnYzCiAgICAgcGFjayAudGYuaGlzdGZyYW1lLnB3Y2xpc3QgLWZpbGwgYm90aCAtZXhwYW5kIDEgLXNpZGUgbGVmdAogCiAgICAgIyB3ZSBoYXZlIHR3byBidXR0b24gYmFycyBhdCBib3R0b20gb2YgdG9wIGZyYW1lLiBCYXIgMQotICAgIGZyYW1lIC50Zi5iYXIKLSAgICBmcmFtZSAudGYubGJhciAtaGVpZ2h0IDE1CisgICAgJHtOU306OmZyYW1lIC50Zi5iYXIKKyAgICAke05TfTo6ZnJhbWUgLnRmLmxiYXIgLWhlaWdodCAxNQogCiAgICAgc2V0IHNoYTFlbnRyeSAudGYuYmFyLnNoYTEKICAgICBzZXQgZW50cmllcyAkc2hhMWVudHJ5CiAgICAgc2V0IHNoYTFidXQgLnRmLmJhci5zaGExbGFiZWwKLSAgICBidXR0b24gJHNoYTFidXQgLXRleHQgW21jICJTSEExIElEOiAiXSAtc3RhdGUgZGlzYWJsZWQgLXJlbGllZiBmbGF0IFwKKyAgICBidXR0b24gJHNoYTFidXQgLXRleHQgIlttYyAiU0hBMSBJRDoiXSAiIC1zdGF0ZSBkaXNhYmxlZCAtcmVsaWVmIGZsYXQgXAogCS1jb21tYW5kIGdvdG9jb21taXQgLXdpZHRoIDgKICAgICAkc2hhMWJ1dCBjb25mIC1kaXNhYmxlZGZvcmVncm91bmQgWyRzaGExYnV0IGNnZXQgLWZvcmVncm91bmRdCiAgICAgcGFjayAudGYuYmFyLnNoYTFsYWJlbCAtc2lkZSBsZWZ0Ci0gICAgZW50cnkgJHNoYTFlbnRyeSAtd2lkdGggNDAgLWZvbnQgdGV4dGZvbnQgLXRleHR2YXJpYWJsZSBzaGExc3RyaW5nCisgICAgJHtOU306OmVudHJ5ICRzaGExZW50cnkgLXdpZHRoIDQwIC1mb250IHRleHRmb250IC10ZXh0dmFyaWFibGUgc2hhMXN0cmluZwogICAgIHRyYWNlIGFkZCB2YXJpYWJsZSBzaGExc3RyaW5nIHdyaXRlIHNoYTFjaGFuZ2UKICAgICBwYWNrICRzaGExZW50cnkgLXNpZGUgbGVmdCAtcGFkeSAyCiAKQEAgLTIwMzcsMzYgKzIxMTIsNDMgQEAKIAkweDAwLCAweDM4LCAweGZmLCAweDdmLCAweGZmLCAweDdmLCAweGZmLCAweDdmLCAweDAwLCAweDM4LCAweDAwLCAweDFjLAogCTB4MDAsIDB4MGUsIDB4MDAsIDB4MDcsIDB4ODAsIDB4MDMsIDB4YzAsIDB4MDF9OwogICAgIH0KLSAgICBidXR0b24gLnRmLmJhci5sZWZ0YnV0IC1pbWFnZSBibS1sZWZ0IC1jb21tYW5kIGdvYmFjayBcCisgICAgJHtOU306OmJ1dHRvbiAudGYuYmFyLmxlZnRidXQgLWltYWdlIGJtLWxlZnQgLWNvbW1hbmQgZ29iYWNrIFwKIAktc3RhdGUgZGlzYWJsZWQgLXdpZHRoIDI2CiAgICAgcGFjayAudGYuYmFyLmxlZnRidXQgLXNpZGUgbGVmdCAtZmlsbCB5Ci0gICAgYnV0dG9uIC50Zi5iYXIucmlnaHRidXQgLWltYWdlIGJtLXJpZ2h0IC1jb21tYW5kIGdvZm9ydyBcCisgICAgJHtOU306OmJ1dHRvbiAudGYuYmFyLnJpZ2h0YnV0IC1pbWFnZSBibS1yaWdodCAtY29tbWFuZCBnb2ZvcncgXAogCS1zdGF0ZSBkaXNhYmxlZCAtd2lkdGggMjYKICAgICBwYWNrIC50Zi5iYXIucmlnaHRidXQgLXNpZGUgbGVmdCAtZmlsbCB5CiAKLSAgICBsYWJlbCAudGYuYmFyLnJvd2xhYmVsIC10ZXh0IFttYyAiUm93Il0KKyAgICAke05TfTo6bGFiZWwgLnRmLmJhci5yb3dsYWJlbCAtdGV4dCBbbWMgIlJvdyJdCiAgICAgc2V0IHJvd251bXNlbCB7fQotICAgIGxhYmVsIC50Zi5iYXIucm93bnVtIC13aWR0aCA3IC1mb250IHRleHRmb250IC10ZXh0dmFyaWFibGUgcm93bnVtc2VsIFwKKyAgICAke05TfTo6bGFiZWwgLnRmLmJhci5yb3dudW0gLXdpZHRoIDcgLXRleHR2YXJpYWJsZSByb3dudW1zZWwgXAogCS1yZWxpZWYgc3Vua2VuIC1hbmNob3IgZQotICAgIGxhYmVsIC50Zi5iYXIucm93bGFiZWwyIC10ZXh0ICIvIgotICAgIGxhYmVsIC50Zi5iYXIubnVtY29tbWl0cyAtd2lkdGggNyAtZm9udCB0ZXh0Zm9udCAtdGV4dHZhcmlhYmxlIG51bWNvbW1pdHMgXAorICAgICR7TlN9OjpsYWJlbCAudGYuYmFyLnJvd2xhYmVsMiAtdGV4dCAiLyIKKyAgICAke05TfTo6bGFiZWwgLnRmLmJhci5udW1jb21taXRzIC13aWR0aCA3IC10ZXh0dmFyaWFibGUgbnVtY29tbWl0cyBcCiAJLXJlbGllZiBzdW5rZW4gLWFuY2hvciBlCiAgICAgcGFjayAudGYuYmFyLnJvd2xhYmVsIC50Zi5iYXIucm93bnVtIC50Zi5iYXIucm93bGFiZWwyIC50Zi5iYXIubnVtY29tbWl0cyBcCiAJLXNpZGUgbGVmdAorICAgIGlmIHshJHVzZV90dGt9IHsKKyAgICAgICAgZm9yZWFjaCB3IHtyb3dudW0gbnVtY29tbWl0c30gey50Zi5iYXIuJHcgY29uZmlndXJlIC1mb250IHRleHRmb250fQorICAgIH0KICAgICBnbG9iYWwgc2VsZWN0ZWRsaW5lCiAgICAgdHJhY2UgYWRkIHZhcmlhYmxlIHNlbGVjdGVkbGluZSB3cml0ZSBzZWxlY3RlZGxpbmVfY2hhbmdlCiAKICAgICAjIFN0YXR1cyBsYWJlbCBhbmQgcHJvZ3Jlc3MgYmFyCiAgICAgc2V0IHN0YXR1c3cgLnRmLmJhci5zdGF0dXMKLSAgICBsYWJlbCAkc3RhdHVzdyAtd2lkdGggMTUgLXJlbGllZiBzdW5rZW4KKyAgICAke05TfTo6bGFiZWwgJHN0YXR1c3cgLXdpZHRoIDE1IC1yZWxpZWYgc3Vua2VuCiAgICAgcGFjayAkc3RhdHVzdyAtc2lkZSBsZWZ0IC1wYWR4IDUKLSAgICBzZXQgaCBbZXhwciB7W2ZvbnQgbWV0cmljcyB1aWZvbnQgLWxpbmVzcGFjZV0gKyAyfV0KLSAgICBzZXQgcHJvZ3Jlc3NjYW52IC50Zi5iYXIucHJvZ3Jlc3MKLSAgICBjYW52YXMgJHByb2dyZXNzY2FudiAtcmVsaWVmIHN1bmtlbiAtaGVpZ2h0ICRoIC1ib3JkZXJ3aWR0aCAyCi0gICAgc2V0IHByb2dyZXNzaXRlbSBbJHByb2dyZXNzY2FudiBjcmVhdGUgcmVjdCAtMSAwIDAgJGggLWZpbGwgZ3JlZW5dCi0gICAgc2V0IGZwcm9naXRlbSBbJHByb2dyZXNzY2FudiBjcmVhdGUgcmVjdCAtMSAwIDAgJGggLWZpbGwgeWVsbG93XQotICAgIHNldCBycHJvZ2l0ZW0gWyRwcm9ncmVzc2NhbnYgY3JlYXRlIHJlY3QgLTEgMCAwICRoIC1maWxsIHJlZF0KLSAgICBwYWNrICRwcm9ncmVzc2NhbnYgLXNpZGUgcmlnaHQgLWV4cGFuZCAxIC1maWxsIHgKKyAgICBpZiB7JHVzZV90dGt9IHsKKwlzZXQgcHJvZ3Jlc3NjYW52IFt0dGs6OnByb2dyZXNzYmFyIC50Zi5iYXIucHJvZ3Jlc3NdCisgICAgfSBlbHNlIHsKKwlzZXQgaCBbZXhwciB7W2ZvbnQgbWV0cmljcyB1aWZvbnQgLWxpbmVzcGFjZV0gKyAyfV0KKwlzZXQgcHJvZ3Jlc3NjYW52IC50Zi5iYXIucHJvZ3Jlc3MKKwljYW52YXMgJHByb2dyZXNzY2FudiAtcmVsaWVmIHN1bmtlbiAtaGVpZ2h0ICRoIC1ib3JkZXJ3aWR0aCAyCisJc2V0IHByb2dyZXNzaXRlbSBbJHByb2dyZXNzY2FudiBjcmVhdGUgcmVjdCAtMSAwIDAgJGggLWZpbGwgZ3JlZW5dCisJc2V0IGZwcm9naXRlbSBbJHByb2dyZXNzY2FudiBjcmVhdGUgcmVjdCAtMSAwIDAgJGggLWZpbGwgeWVsbG93XQorCXNldCBycHJvZ2l0ZW0gWyRwcm9ncmVzc2NhbnYgY3JlYXRlIHJlY3QgLTEgMCAwICRoIC1maWxsIHJlZF0KKyAgICB9CisgICAgcGFjayAkcHJvZ3Jlc3NjYW52IC1zaWRlIHJpZ2h0IC1leHBhbmQgMSAtZmlsbCB4IC1wYWR4IHswIDJ9CiAgICAgc2V0IHByb2dyZXNzY29vcmRzIHswIDB9CiAgICAgc2V0IGZwcm9nY29vcmQgMAogICAgIHNldCBycHJvZ2Nvb3JkIDAKQEAgLTIwNzUsMTQgKzIxNTcsMTQgQEAKICAgICBzZXQgcHJvZ3VwZGF0ZXBlbmRpbmcgMAogCiAgICAgIyBidWlsZCB1cCB0aGUgYm90dG9tIGJhciBvZiB1cHBlciB3aW5kb3cKLSAgICBsYWJlbCAudGYubGJhci5mbGFiZWwgLXRleHQgIlttYyAiRmluZCJdICIKLSAgICBidXR0b24gLnRmLmxiYXIuZm5leHQgLXRleHQgW21jICJuZXh0Il0gLWNvbW1hbmQge2RvZmluZCAxIDF9Ci0gICAgYnV0dG9uIC50Zi5sYmFyLmZwcmV2IC10ZXh0IFttYyAicHJldiJdIC1jb21tYW5kIHtkb2ZpbmQgLTEgMX0KLSAgICBsYWJlbCAudGYubGJhci5mbGFiMiAtdGV4dCAiIFttYyAiY29tbWl0Il0gIgorICAgICR7TlN9OjpsYWJlbCAudGYubGJhci5mbGFiZWwgLXRleHQgIlttYyAiRmluZCJdICIKKyAgICAke05TfTo6YnV0dG9uIC50Zi5sYmFyLmZuZXh0IC10ZXh0IFttYyAibmV4dCJdIC1jb21tYW5kIHtkb2ZpbmQgMSAxfQorICAgICR7TlN9OjpidXR0b24gLnRmLmxiYXIuZnByZXYgLXRleHQgW21jICJwcmV2Il0gLWNvbW1hbmQge2RvZmluZCAtMSAxfQorICAgICR7TlN9OjpsYWJlbCAudGYubGJhci5mbGFiMiAtdGV4dCAiIFttYyAiY29tbWl0Il0gIgogICAgIHBhY2sgLnRmLmxiYXIuZmxhYmVsIC50Zi5sYmFyLmZuZXh0IC50Zi5sYmFyLmZwcmV2IC50Zi5sYmFyLmZsYWIyIFwKIAktc2lkZSBsZWZ0IC1maWxsIHkKICAgICBzZXQgZ2R0dHlwZSBbbWMgImNvbnRhaW5pbmc6Il0KLSAgICBzZXQgZ20gW3RrX29wdGlvbk1lbnUgLnRmLmxiYXIuZ2R0dHlwZSBnZHR0eXBlIFwKKyAgICBzZXQgZ20gW21ha2Vkcm9wbGlzdCAudGYubGJhci5nZHR0eXBlIGdkdHR5cGUgXAogCQlbbWMgImNvbnRhaW5pbmc6Il0gXAogCQlbbWMgInRvdWNoaW5nIHBhdGhzOiJdIFwKIAkJW21jICJhZGRpbmcvcmVtb3Zpbmcgc3RyaW5nOiJdXQpAQCAtMjA5MiwxNCArMjE3NCwxNCBAQAogICAgIHNldCBmaW5kc3RyaW5nIHt9CiAgICAgc2V0IGZzdHJpbmcgLnRmLmxiYXIuZmluZHN0cmluZwogICAgIGxhcHBlbmQgZW50cmllcyAkZnN0cmluZwotICAgIGVudHJ5ICRmc3RyaW5nIC13aWR0aCAzMCAtZm9udCB0ZXh0Zm9udCAtdGV4dHZhcmlhYmxlIGZpbmRzdHJpbmcKKyAgICAke05TfTo6ZW50cnkgJGZzdHJpbmcgLXdpZHRoIDMwIC1mb250IHRleHRmb250IC10ZXh0dmFyaWFibGUgZmluZHN0cmluZwogICAgIHRyYWNlIGFkZCB2YXJpYWJsZSBmaW5kc3RyaW5nIHdyaXRlIGZpbmRfY2hhbmdlCiAgICAgc2V0IGZpbmR0eXBlIFttYyAiRXhhY3QiXQotICAgIHNldCBmaW5kdHlwZW1lbnUgW3RrX29wdGlvbk1lbnUgLnRmLmxiYXIuZmluZHR5cGUgXAotCQkgICAgICBmaW5kdHlwZSBbbWMgIkV4YWN0Il0gW21jICJJZ25DYXNlIl0gW21jICJSZWdleHAiXV0KKyAgICBzZXQgZmluZHR5cGVtZW51IFttYWtlZHJvcGxpc3QgLnRmLmxiYXIuZmluZHR5cGUgXAorCQkJICBmaW5kdHlwZSBbbWMgIkV4YWN0Il0gW21jICJJZ25DYXNlIl0gW21jICJSZWdleHAiXV0KICAgICB0cmFjZSBhZGQgdmFyaWFibGUgZmluZHR5cGUgd3JpdGUgZmluZGNvbV9jaGFuZ2UKICAgICBzZXQgZmluZGxvYyBbbWMgIkFsbCBmaWVsZHMiXQotICAgIHRrX29wdGlvbk1lbnUgLnRmLmxiYXIuZmluZGxvYyBmaW5kbG9jIFttYyAiQWxsIGZpZWxkcyJdIFttYyAiSGVhZGxpbmUiXSBcCisgICAgbWFrZWRyb3BsaXN0IC50Zi5sYmFyLmZpbmRsb2MgZmluZGxvYyBbbWMgIkFsbCBmaWVsZHMiXSBbbWMgIkhlYWRsaW5lIl0gXAogCVttYyAiQ29tbWVudHMiXSBbbWMgIkF1dGhvciJdIFttYyAiQ29tbWl0dGVyIl0KICAgICB0cmFjZSBhZGQgdmFyaWFibGUgZmluZGxvYyB3cml0ZSBmaW5kX2NoYW5nZQogICAgIHBhY2sgLnRmLmxiYXIuZmluZGxvYyAtc2lkZSByaWdodApAQCAtMjExMSw0OCArMjE5Myw1MSBAQAogICAgIHBhY2sgLnRmLmJhciAtaW4gLnRmIC1zaWRlIGJvdHRvbSAtZmlsbCB4CiAgICAgcGFjayAudGYuaGlzdGZyYW1lIC1maWxsIGJvdGggLXNpZGUgdG9wIC1leHBhbmQgMQogICAgIC5jdG9wIGFkZCAudGYKLSAgICAuY3RvcCBwYW5lY29uZmlndXJlIC50ZiAtaGVpZ2h0ICRnZW9tZXRyeSh0b3BoZWlnaHQpCi0gICAgLmN0b3AgcGFuZWNvbmZpZ3VyZSAudGYgLXdpZHRoICRnZW9tZXRyeSh0b3B3aWR0aCkKKyAgICBpZiB7ISR1c2VfdHRrfSB7CisJLmN0b3AgcGFuZWNvbmZpZ3VyZSAudGYgLWhlaWdodCAkZ2VvbWV0cnkodG9waGVpZ2h0KQorCS5jdG9wIHBhbmVjb25maWd1cmUgLnRmIC13aWR0aCAkZ2VvbWV0cnkodG9wd2lkdGgpCisgICAgfQogCiAgICAgIyBub3cgYnVpbGQgdXAgdGhlIGJvdHRvbQotICAgIHBhbmVkd2luZG93IC5wd2JvdHRvbSAtb3JpZW50IGhvcml6b250YWwKKyAgICAke05TfTo6cGFuZWR3aW5kb3cgLnB3Ym90dG9tIC1vcmllbnQgaG9yaXpvbnRhbAogCiAgICAgIyBsb3dlciBsZWZ0LCBhIHRleHQgYm94IG92ZXIgc2VhcmNoIGJhciwgc2Nyb2xsIGJhciB0byB0aGUgcmlnaHQKICAgICAjIGlmIHdlIGtub3cgd2luZG93IGhlaWdodCwgdGhlbiB0aGF0IHdpbGwgc2V0IHRoZSBsb3dlciB0ZXh0IGhlaWdodCwgb3RoZXJ3aXNlCiAgICAgIyB3ZSBzZXQgbG93ZXIgdGV4dCBoZWlnaHQgd2hpY2ggd2lsbCBkcml2ZSB3aW5kb3cgaGVpZ2h0CiAgICAgaWYge1tpbmZvIGV4aXN0cyBnZW9tZXRyeShtYWluKV19IHsKLSAgICAgICAgZnJhbWUgLmJsZWZ0IC13aWR0aCAkZ2VvbWV0cnkoYm90d2lkdGgpCisJJHtOU306OmZyYW1lIC5ibGVmdCAtd2lkdGggJGdlb21ldHJ5KGJvdHdpZHRoKQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGZyYW1lIC5ibGVmdCAtd2lkdGggJGdlb21ldHJ5KGJvdHdpZHRoKSAtaGVpZ2h0ICRnZW9tZXRyeShib3RoZWlnaHQpCisJJHtOU306OmZyYW1lIC5ibGVmdCAtd2lkdGggJGdlb21ldHJ5KGJvdHdpZHRoKSAtaGVpZ2h0ICRnZW9tZXRyeShib3RoZWlnaHQpCiAgICAgfQotICAgIGZyYW1lIC5ibGVmdC50b3AKLSAgICBmcmFtZSAuYmxlZnQubWlkCi0gICAgZnJhbWUgLmJsZWZ0LmJvdHRvbQorICAgICR7TlN9OjpmcmFtZSAuYmxlZnQudG9wCisgICAgJHtOU306OmZyYW1lIC5ibGVmdC5taWQKKyAgICAke05TfTo6ZnJhbWUgLmJsZWZ0LmJvdHRvbQogCi0gICAgYnV0dG9uIC5ibGVmdC50b3Auc2VhcmNoIC10ZXh0IFttYyAiU2VhcmNoIl0gLWNvbW1hbmQgZG9zZWFyY2gKKyAgICAke05TfTo6YnV0dG9uIC5ibGVmdC50b3Auc2VhcmNoIC10ZXh0IFttYyAiU2VhcmNoIl0gLWNvbW1hbmQgZG9zZWFyY2gKICAgICBwYWNrIC5ibGVmdC50b3Auc2VhcmNoIC1zaWRlIGxlZnQgLXBhZHggNQogICAgIHNldCBzc3RyaW5nIC5ibGVmdC50b3Auc3N0cmluZwotICAgIGVudHJ5ICRzc3RyaW5nIC13aWR0aCAyMCAtZm9udCB0ZXh0Zm9udCAtdGV4dHZhcmlhYmxlIHNlYXJjaHN0cmluZworICAgIHNldCBzZWFyY2hzdHJpbmcgIiIKKyAgICAke05TfTo6ZW50cnkgJHNzdHJpbmcgLXdpZHRoIDIwIC1mb250IHRleHRmb250IC10ZXh0dmFyaWFibGUgc2VhcmNoc3RyaW5nCiAgICAgbGFwcGVuZCBlbnRyaWVzICRzc3RyaW5nCiAgICAgdHJhY2UgYWRkIHZhcmlhYmxlIHNlYXJjaHN0cmluZyB3cml0ZSBpbmNyc2VhcmNoCiAgICAgcGFjayAkc3N0cmluZyAtc2lkZSBsZWZ0IC1leHBhbmQgMSAtZmlsbCB4Ci0gICAgcmFkaW9idXR0b24gLmJsZWZ0Lm1pZC5kaWZmIC10ZXh0IFttYyAiRGlmZiJdIFwKKyAgICAke05TfTo6cmFkaW9idXR0b24gLmJsZWZ0Lm1pZC5kaWZmIC10ZXh0IFttYyAiRGlmZiJdIFwKIAktY29tbWFuZCBjaGFuZ2VkaWZmZGlzcCAtdmFyaWFibGUgZGlmZmVsaWRlIC12YWx1ZSB7MCAwfQotICAgIHJhZGlvYnV0dG9uIC5ibGVmdC5taWQub2xkIC10ZXh0IFttYyAiT2xkIHZlcnNpb24iXSBcCisgICAgJHtOU306OnJhZGlvYnV0dG9uIC5ibGVmdC5taWQub2xkIC10ZXh0IFttYyAiT2xkIHZlcnNpb24iXSBcCiAJLWNvbW1hbmQgY2hhbmdlZGlmZmRpc3AgLXZhcmlhYmxlIGRpZmZlbGlkZSAtdmFsdWUgezAgMX0KLSAgICByYWRpb2J1dHRvbiAuYmxlZnQubWlkLm5ldyAtdGV4dCBbbWMgIk5ldyB2ZXJzaW9uIl0gXAorICAgICR7TlN9OjpyYWRpb2J1dHRvbiAuYmxlZnQubWlkLm5ldyAtdGV4dCBbbWMgIk5ldyB2ZXJzaW9uIl0gXAogCS1jb21tYW5kIGNoYW5nZWRpZmZkaXNwIC12YXJpYWJsZSBkaWZmZWxpZGUgLXZhbHVlIHsxIDB9Ci0gICAgbGFiZWwgLmJsZWZ0Lm1pZC5sYWJlbGRpZmZjb250ZXh0IC10ZXh0ICIgICAgICBbbWMgIkxpbmVzIG9mIGNvbnRleHQiXTogIgorICAgICR7TlN9OjpsYWJlbCAuYmxlZnQubWlkLmxhYmVsZGlmZmNvbnRleHQgLXRleHQgIiAgICAgIFttYyAiTGluZXMgb2YgY29udGV4dCJdOiAiCiAgICAgcGFjayAuYmxlZnQubWlkLmRpZmYgLmJsZWZ0Lm1pZC5vbGQgLmJsZWZ0Lm1pZC5uZXcgLXNpZGUgbGVmdAogICAgIHNwaW5ib3ggLmJsZWZ0Lm1pZC5kaWZmY29udGV4dCAtd2lkdGggNSAtZm9udCB0ZXh0Zm9udCBcCi0JLWZyb20gMSAtaW5jcmVtZW50IDEgLXRvIDEwMDAwMDAwIFwKKwktZnJvbSAwIC1pbmNyZW1lbnQgMSAtdG8gMTAwMDAwMDAgXAogCS12YWxpZGF0ZSBhbGwgLXZhbGlkYXRlY29tbWFuZCAiZGlmZmNvbnRleHR2YWxpZGF0ZSAlUCIgXAogCS10ZXh0dmFyaWFibGUgZGlmZmNvbnRleHRzdHJpbmcKICAgICAuYmxlZnQubWlkLmRpZmZjb250ZXh0IHNldCAkZGlmZmNvbnRleHQKICAgICB0cmFjZSBhZGQgdmFyaWFibGUgZGlmZmNvbnRleHRzdHJpbmcgd3JpdGUgZGlmZmNvbnRleHRjaGFuZ2UKICAgICBsYXBwZW5kIGVudHJpZXMgLmJsZWZ0Lm1pZC5kaWZmY29udGV4dAogICAgIHBhY2sgLmJsZWZ0Lm1pZC5sYWJlbGRpZmZjb250ZXh0IC5ibGVmdC5taWQuZGlmZmNvbnRleHQgLXNpZGUgbGVmdAotICAgIGNoZWNrYnV0dG9uIC5ibGVmdC5taWQuaWduc3BhY2UgLXRleHQgW21jICJJZ25vcmUgc3BhY2UgY2hhbmdlIl0gXAorICAgICR7TlN9OjpjaGVja2J1dHRvbiAuYmxlZnQubWlkLmlnbnNwYWNlIC10ZXh0IFttYyAiSWdub3JlIHNwYWNlIGNoYW5nZSJdIFwKIAktY29tbWFuZCBjaGFuZ2VpZ25vcmVzcGFjZSAtdmFyaWFibGUgaWdub3Jlc3BhY2UKICAgICBwYWNrIC5ibGVmdC5taWQuaWduc3BhY2UgLXNpZGUgbGVmdCAtcGFkeCA1CiAgICAgc2V0IGN0ZXh0IC5ibGVmdC5ib3R0b20uY3RleHQKQEAgLTIxNjMsOSArMjI0OCw4IEBACiAgICAgaWYgeyRoYXZlX3RrODV9IHsKIAkkY3RleHQgY29uZiAtdGFic3R5bGUgd29yZHByb2Nlc3NvcgogICAgIH0KLSAgICBzY3JvbGxiYXIgLmJsZWZ0LmJvdHRvbS5zYiAtY29tbWFuZCAiJGN0ZXh0IHl2aWV3IgotICAgIHNjcm9sbGJhciAuYmxlZnQuYm90dG9tLnNiaG9yaXpvbnRhbCAtY29tbWFuZCAiJGN0ZXh0IHh2aWV3IiAtb3JpZW50IGggXAotCS13aWR0aCAxMAorICAgICR7TlN9OjpzY3JvbGxiYXIgLmJsZWZ0LmJvdHRvbS5zYiAtY29tbWFuZCAiJGN0ZXh0IHl2aWV3IgorICAgICR7TlN9OjpzY3JvbGxiYXIgLmJsZWZ0LmJvdHRvbS5zYmhvcml6b250YWwgLWNvbW1hbmQgIiRjdGV4dCB4dmlldyIgLW9yaWVudCBoCiAgICAgcGFjayAuYmxlZnQudG9wIC1zaWRlIHRvcCAtZmlsbCB4CiAgICAgcGFjayAuYmxlZnQubWlkIC1zaWRlIHRvcCAtZmlsbCB4CiAgICAgZ3JpZCAkY3RleHQgLmJsZWZ0LmJvdHRvbS5zYiAtc3RpY2t5IG5zZXcKQEAgLTIyMDUsMTQgKzIyODksMTYgQEAKICAgICAkY3RleHQgdGFnIGNvbmYgZm91bmQgLWJhY2sgeWVsbG93CiAKICAgICAucHdib3R0b20gYWRkIC5ibGVmdAotICAgIC5wd2JvdHRvbSBwYW5lY29uZmlndXJlIC5ibGVmdCAtd2lkdGggJGdlb21ldHJ5KGJvdHdpZHRoKQorICAgIGlmIHshJHVzZV90dGt9IHsKKwkucHdib3R0b20gcGFuZWNvbmZpZ3VyZSAuYmxlZnQgLXdpZHRoICRnZW9tZXRyeShib3R3aWR0aCkKKyAgICB9CiAKICAgICAjIGxvd2VyIHJpZ2h0Ci0gICAgZnJhbWUgLmJyaWdodAotICAgIGZyYW1lIC5icmlnaHQubW9kZQotICAgIHJhZGlvYnV0dG9uIC5icmlnaHQubW9kZS5wYXRjaCAtdGV4dCBbbWMgIlBhdGNoIl0gXAorICAgICR7TlN9OjpmcmFtZSAuYnJpZ2h0CisgICAgJHtOU306OmZyYW1lIC5icmlnaHQubW9kZQorICAgICR7TlN9OjpyYWRpb2J1dHRvbiAuYnJpZ2h0Lm1vZGUucGF0Y2ggLXRleHQgW21jICJQYXRjaCJdIFwKIAktY29tbWFuZCByZXNlbGVjdGxpbmUgLXZhcmlhYmxlIGNtaXRtb2RlIC12YWx1ZSAicGF0Y2giCi0gICAgcmFkaW9idXR0b24gLmJyaWdodC5tb2RlLnRyZWUgLXRleHQgW21jICJUcmVlIl0gXAorICAgICR7TlN9OjpyYWRpb2J1dHRvbiAuYnJpZ2h0Lm1vZGUudHJlZSAtdGV4dCBbbWMgIlRyZWUiXSBcCiAJLWNvbW1hbmQgcmVzZWxlY3RsaW5lIC12YXJpYWJsZSBjbWl0bW9kZSAtdmFsdWUgInRyZWUiCiAgICAgZ3JpZCAuYnJpZ2h0Lm1vZGUucGF0Y2ggLmJyaWdodC5tb2RlLnRyZWUgLXN0aWNreSBldwogICAgIHBhY2sgLmJyaWdodC5tb2RlIC1zaWRlIHRvcCAtZmlsbCB4CkBAIC0yMjI4LDcgKzIzMTQsNyBAQAogCS1zcGFjaW5nMSAxIC1zcGFjaW5nMyAxCiAgICAgbGFwcGVuZCBiZ2xpc3QgJGNmbGlzdAogICAgIGxhcHBlbmQgZmdsaXN0ICRjZmxpc3QKLSAgICBzY3JvbGxiYXIgLmJyaWdodC5zYiAtY29tbWFuZCAiJGNmbGlzdCB5dmlldyIKKyAgICAke05TfTo6c2Nyb2xsYmFyIC5icmlnaHQuc2IgLWNvbW1hbmQgIiRjZmxpc3QgeXZpZXciCiAgICAgcGFjayAuYnJpZ2h0LnNiIC1zaWRlIHJpZ2h0IC1maWxsIHkKICAgICBwYWNrICRjZmxpc3QgLXNpZGUgbGVmdCAtZmlsbCBib3RoIC1leHBhbmQgMQogICAgICRjZmxpc3QgdGFnIGNvbmZpZ3VyZSBoaWdobGlnaHQgXApAQCAtMjI2Myw2ICsyMzQ5LDE3IEBACiAgICAgICAgIHNldCA6OkJNICIyIgogICAgIH0KIAorICAgIGlmIHskdXNlX3R0a30geworICAgICAgICBiaW5kIC5jdG9wIDxNYXA+IHsKKyAgICAgICAgICAgIGJpbmQgJVcgPE1hcD4ge30KKyAgICAgICAgICAgICVXIHNhc2hwb3MgMCAkOjpnZW9tZXRyeSh0b3BoZWlnaHQpCisgICAgICAgIH0KKyAgICAgICAgYmluZCAucHdib3R0b20gPE1hcD4geworICAgICAgICAgICAgYmluZCAlVyA8TWFwPiB7fQorICAgICAgICAgICAgJVcgc2FzaHBvcyAwICQ6Omdlb21ldHJ5KGJvdHdpZHRoKQorICAgICAgICB9CisgICAgfQorCiAgICAgYmluZCAucHdib3R0b20gPENvbmZpZ3VyZT4ge3Jlc2l6ZWNkZXRwYW5lcyAlVyAld30KICAgICBwYWNrIC5jdG9wIC1maWxsIGJvdGggLWV4cGFuZCAxCiAgICAgYmluZGFsbCA8MT4ge3NlbGNhbnZsaW5lICVXICV4ICV5fQpAQCAtMjQ4Miw3ICsyNTc5LDEyIEBACiBwcm9jIGFkanVzdHByb2dyZXNzIHt9IHsKICAgICBnbG9iYWwgcHJvZ3Jlc3NjYW52IHByb2dyZXNzaXRlbSBwcm9ncmVzc2Nvb3JkcwogICAgIGdsb2JhbCBmcHJvZ2l0ZW0gZnByb2djb29yZCBsYXN0cHJvZ3VwZGF0ZSBwcm9ndXBkYXRlcGVuZGluZwotICAgIGdsb2JhbCBycHJvZ2l0ZW0gcnByb2djb29yZAorICAgIGdsb2JhbCBycHJvZ2l0ZW0gcnByb2djb29yZCB1c2VfdHRrCisKKyAgICBpZiB7JHVzZV90dGt9IHsKKwkkcHJvZ3Jlc3NjYW52IGNvbmZpZ3VyZSAtdmFsdWUgW2V4cHIge2ludCgkZnByb2djb29yZCAqIDEwMCl9XQorCXJldHVybgorICAgIH0KIAogICAgIHNldCB3IFtleHByIHtbd2luZm8gd2lkdGggJHByb2dyZXNzY2Fudl0gLSA0fV0KICAgICBzZXQgeDAgW2V4cHIgeyR3ICogW2xpbmRleCAkcHJvZ3Jlc3Njb29yZHMgMF19XQpAQCAtMjUxNywxMiArMjYxOSwxNCBAQAogICAgIGdsb2JhbCBtYXh3aWR0aCBzaG93bmVhcnRhZ3Mgc2hvd2xvY2FsY2hhbmdlcwogICAgIGdsb2JhbCB2aWV3bmFtZSB2aWV3ZmlsZXMgdmlld2FyZ3Mgdmlld2FyZ3NjbWQgdmlld3Blcm0gbmV4dHZpZXdudW0KICAgICBnbG9iYWwgY21pdG1vZGUgd3JhcGNvbW1lbnQgZGF0ZXRpbWVmb3JtYXQgbGltaXRkaWZmcwotICAgIGdsb2JhbCBjb2xvcnMgYmdjb2xvciBmZ2NvbG9yIGRpZmZjb2xvcnMgZGlmZmNvbnRleHQgc2VsZWN0Ymdjb2xvcgotICAgIGdsb2JhbCBhdXRvc2VsZWN0IGV4dGRpZmZ0b29sIHBlcmZpbGVfYXR0cnMgbWFya2JnY29sb3IKKyAgICBnbG9iYWwgY29sb3JzIHVpY29sb3IgYmdjb2xvciBmZ2NvbG9yIGRpZmZjb2xvcnMgZGlmZmNvbnRleHQgc2VsZWN0Ymdjb2xvcgorICAgIGdsb2JhbCBhdXRvc2VsZWN0IGV4dGRpZmZ0b29sIHBlcmZpbGVfYXR0cnMgbWFya2JnY29sb3IgdXNlX3R0aworICAgIGdsb2JhbCBoaWRlcmVtb3RlcyB3YW50X3R0awogCiAgICAgaWYgeyRzdHVmZnNhdmVkfSByZXR1cm4KICAgICBpZiB7IVt3aW5mbyB2aWV3YWJsZSAuXX0gcmV0dXJuCiAgICAgY2F0Y2ggeworCWlmIHtbZmlsZSBleGlzdHMgfi8uZ2l0ay1uZXddfSB7ZmlsZSBkZWxldGUgLWZvcmNlIH4vLmdpdGstbmV3fQogCXNldCBmIFtvcGVuICJ+Ly5naXRrLW5ldyIgd10KIAlpZiB7JDo6dGNsX3BsYXRmb3JtKHBsYXRmb3JtKSBlcSB7d2luZG93c319IHsKIAkgICAgZmlsZSBhdHRyaWJ1dGVzICJ+Ly5naXRrLW5ldyIgLWhpZGRlbiB0cnVlCkBAIC0yNTM4LDkgKzI2NDIsMTIgQEAKIAlwdXRzICRmIFtsaXN0IHNldCB3cmFwY29tbWVudCAkd3JhcGNvbW1lbnRdCiAJcHV0cyAkZiBbbGlzdCBzZXQgYXV0b3NlbGVjdCAkYXV0b3NlbGVjdF0KIAlwdXRzICRmIFtsaXN0IHNldCBzaG93bmVhcnRhZ3MgJHNob3duZWFydGFnc10KKwlwdXRzICRmIFtsaXN0IHNldCBoaWRlcmVtb3RlcyAkaGlkZXJlbW90ZXNdCiAJcHV0cyAkZiBbbGlzdCBzZXQgc2hvd2xvY2FsY2hhbmdlcyAkc2hvd2xvY2FsY2hhbmdlc10KIAlwdXRzICRmIFtsaXN0IHNldCBkYXRldGltZWZvcm1hdCAkZGF0ZXRpbWVmb3JtYXRdCiAJcHV0cyAkZiBbbGlzdCBzZXQgbGltaXRkaWZmcyAkbGltaXRkaWZmc10KKwlwdXRzICRmIFtsaXN0IHNldCB1aWNvbG9yICR1aWNvbG9yXQorCXB1dHMgJGYgW2xpc3Qgc2V0IHdhbnRfdHRrICR3YW50X3R0a10KIAlwdXRzICRmIFtsaXN0IHNldCBiZ2NvbG9yICRiZ2NvbG9yXQogCXB1dHMgJGYgW2xpc3Qgc2V0IGZnY29sb3IgJGZnY29sb3JdCiAJcHV0cyAkZiBbbGlzdCBzZXQgY29sb3JzICRjb2xvcnNdCkBAIC0yNTU1LDggKzI2NjIsMTMgQEAKIAlwdXRzICRmICJzZXQgZ2VvbWV0cnkoc3RhdGUpIFt3bSBzdGF0ZSAuXSIKIAlwdXRzICRmICJzZXQgZ2VvbWV0cnkodG9wd2lkdGgpIFt3aW5mbyB3aWR0aCAudGZdIgogCXB1dHMgJGYgInNldCBnZW9tZXRyeSh0b3BoZWlnaHQpIFt3aW5mbyBoZWlnaHQgLnRmXSIKLSAgICAgICAgcHV0cyAkZiAic2V0IGdlb21ldHJ5KHB3c2FzaDApIFwiWy50Zi5oaXN0ZnJhbWUucHdjbGlzdCBzYXNoIGNvb3JkIDBdXCIiCi0gICAgICAgIHB1dHMgJGYgInNldCBnZW9tZXRyeShwd3Nhc2gxKSBcIlsudGYuaGlzdGZyYW1lLnB3Y2xpc3Qgc2FzaCBjb29yZCAxXVwiIgorCWlmIHskdXNlX3R0a30geworCSAgICBwdXRzICRmICJzZXQgZ2VvbWV0cnkocHdzYXNoMCkgXCJbLnRmLmhpc3RmcmFtZS5wd2NsaXN0IHNhc2hwb3MgMF0gMVwiIgorCSAgICBwdXRzICRmICJzZXQgZ2VvbWV0cnkocHdzYXNoMSkgXCJbLnRmLmhpc3RmcmFtZS5wd2NsaXN0IHNhc2hwb3MgMV0gMVwiIgorCX0gZWxzZSB7CisJICAgIHB1dHMgJGYgInNldCBnZW9tZXRyeShwd3Nhc2gwKSBcIlsudGYuaGlzdGZyYW1lLnB3Y2xpc3Qgc2FzaCBjb29yZCAwXVwiIgorCSAgICBwdXRzICRmICJzZXQgZ2VvbWV0cnkocHdzYXNoMSkgXCJbLnRmLmhpc3RmcmFtZS5wd2NsaXN0IHNhc2ggY29vcmQgMV1cIiIKKwl9CiAJcHV0cyAkZiAic2V0IGdlb21ldHJ5KGJvdHdpZHRoKSBbd2luZm8gd2lkdGggLmJsZWZ0XSIKIAlwdXRzICRmICJzZXQgZ2VvbWV0cnkoYm90aGVpZ2h0KSBbd2luZm8gaGVpZ2h0IC5ibGVmdF0iCiAKQEAgLTI1NzQsMTAgKzI2ODYsMTUgQEAKIH0KIAogcHJvYyByZXNpemVjbGlzdHBhbmVzIHt3aW4gd30gewotICAgIGdsb2JhbCBvbGR3aWR0aAorICAgIGdsb2JhbCBvbGR3aWR0aCB1c2VfdHRrCiAgICAgaWYge1tpbmZvIGV4aXN0cyBvbGR3aWR0aCgkd2luKV19IHsKLQlzZXQgczAgWyR3aW4gc2FzaCBjb29yZCAwXQotCXNldCBzMSBbJHdpbiBzYXNoIGNvb3JkIDFdCisJaWYgeyR1c2VfdHRrfSB7CisJICAgIHNldCBzMCBbJHdpbiBzYXNocG9zIDBdCisJICAgIHNldCBzMSBbJHdpbiBzYXNocG9zIDFdCisJfSBlbHNlIHsKKwkgICAgc2V0IHMwIFskd2luIHNhc2ggY29vcmQgMF0KKwkgICAgc2V0IHMxIFskd2luIHNhc2ggY29vcmQgMV0KKwl9CiAJaWYgeyR3IDwgNjB9IHsKIAkgICAgc2V0IHNhc2gwIFtleHByIHtpbnQoJHcvMiAtIDIpfV0KIAkgICAgc2V0IHNhc2gxIFtleHByIHtpbnQoJHcqNS82IC0gMil9XQpAQCAtMjU5OCwxNiArMjcxNSwyNSBAQAogCQl9CiAJICAgIH0KIAl9Ci0JJHdpbiBzYXNoIHBsYWNlIDAgJHNhc2gwIFtsaW5kZXggJHMwIDFdCi0JJHdpbiBzYXNoIHBsYWNlIDEgJHNhc2gxIFtsaW5kZXggJHMxIDFdCisJaWYgeyR1c2VfdHRrfSB7CisJICAgICR3aW4gc2FzaHBvcyAwICRzYXNoMAorCSAgICAkd2luIHNhc2hwb3MgMSAkc2FzaDEKKwl9IGVsc2UgeworCSAgICAkd2luIHNhc2ggcGxhY2UgMCAkc2FzaDAgW2xpbmRleCAkczAgMV0KKwkgICAgJHdpbiBzYXNoIHBsYWNlIDEgJHNhc2gxIFtsaW5kZXggJHMxIDFdCisJfQogICAgIH0KICAgICBzZXQgb2xkd2lkdGgoJHdpbikgJHcKIH0KIAogcHJvYyByZXNpemVjZGV0cGFuZXMge3dpbiB3fSB7Ci0gICAgZ2xvYmFsIG9sZHdpZHRoCisgICAgZ2xvYmFsIG9sZHdpZHRoIHVzZV90dGsKICAgICBpZiB7W2luZm8gZXhpc3RzIG9sZHdpZHRoKCR3aW4pXX0gewotCXNldCBzMCBbJHdpbiBzYXNoIGNvb3JkIDBdCisJaWYgeyR1c2VfdHRrfSB7CisJICAgIHNldCBzMCBbJHdpbiBzYXNocG9zIDBdCisJfSBlbHNlIHsKKwkgICAgc2V0IHMwIFskd2luIHNhc2ggY29vcmQgMF0KKwl9CiAJaWYgeyR3IDwgNjB9IHsKIAkgICAgc2V0IHNhc2gwIFtleHByIHtpbnQoJHcqMy80IC0gMil9XQogCX0gZWxzZSB7CkBAIC0yNjIwLDcgKzI3NDYsMTEgQEAKIAkJc2V0IHNhc2gwIFtleHByIHskdyAtIDE1fV0KIAkgICAgfQogCX0KLQkkd2luIHNhc2ggcGxhY2UgMCAkc2FzaDAgW2xpbmRleCAkczAgMV0KKwlpZiB7JHVzZV90dGt9IHsKKwkgICAgJHdpbiBzYXNocG9zIDAgJHNhc2gwCisJfSBlbHNlIHsKKwkgICAgJHdpbiBzYXNoIHBsYWNlIDAgJHNhc2gwIFtsaW5kZXggJHMwIDFdCisJfQogICAgIH0KICAgICBzZXQgb2xkd2lkdGgoJHdpbikgJHcKIH0KQEAgLTI2NDAsMzEgKzI3NzAsMzMgQEAKIH0KIAogcHJvYyBhYm91dCB7fSB7Ci0gICAgZ2xvYmFsIHVpZm9udAorICAgIGdsb2JhbCB1aWZvbnQgTlMKICAgICBzZXQgdyAuYWJvdXQKICAgICBpZiB7W3dpbmZvIGV4aXN0cyAkd119IHsKIAlyYWlzZSAkdwogCXJldHVybgogICAgIH0KLSAgICB0b3BsZXZlbCAkdworICAgIHR0a190b3BsZXZlbCAkdwogICAgIHdtIHRpdGxlICR3IFttYyAiQWJvdXQgZ2l0ayJdCiAgICAgbWFrZV90cmFuc2llbnQgJHcgLgogICAgIG1lc3NhZ2UgJHcubSAtdGV4dCBbbWMgIgogR2l0ayAtIGEgY29tbWl0IHZpZXdlciBmb3IgZ2l0CiAKLUNvcHlyaWdodCDCqSAyMDA1LTIwMDggUGF1bCBNYWNrZXJyYXMKK0NvcHlyaWdodCDCqSAyMDA1LTIwMDkgUGF1bCBNYWNrZXJyYXMKIAogVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSJdIFwKIAkgICAgLWp1c3RpZnkgY2VudGVyIC1hc3BlY3QgNDAwIC1ib3JkZXIgMiAtYmcgd2hpdGUgLXJlbGllZiBncm9vdmUKICAgICBwYWNrICR3Lm0gLXNpZGUgdG9wIC1maWxsIHggLXBhZHggMiAtcGFkeSAyCi0gICAgYnV0dG9uICR3Lm9rIC10ZXh0IFttYyAiQ2xvc2UiXSAtY29tbWFuZCAiZGVzdHJveSAkdyIgLWRlZmF1bHQgYWN0aXZlCisgICAgJHtOU306OmJ1dHRvbiAkdy5vayAtdGV4dCBbbWMgIkNsb3NlIl0gLWNvbW1hbmQgImRlc3Ryb3kgJHciIC1kZWZhdWx0IGFjdGl2ZQogICAgIHBhY2sgJHcub2sgLXNpZGUgYm90dG9tCiAgICAgYmluZCAkdyA8VmlzaWJpbGl0eT4gImZvY3VzICR3Lm9rIgogICAgIGJpbmQgJHcgPEtleS1Fc2NhcGU+ICJkZXN0cm95ICR3IgogICAgIGJpbmQgJHcgPEtleS1SZXR1cm4+ICJkZXN0cm95ICR3IgorICAgIHRrOjpQbGFjZVdpbmRvdyAkdyB3aWRnZXQgLgogfQogCiBwcm9jIGtleXMge30geworICAgIGdsb2JhbCBOUwogICAgIHNldCB3IC5rZXlzCiAgICAgaWYge1t3aW5mbyBleGlzdHMgJHddfSB7CiAJcmFpc2UgJHcKQEAgLTI2NzUsNyArMjgwNyw3IEBACiAgICAgfSBlbHNlIHsKIAlzZXQgTTFUIEN0cmwKICAgICB9Ci0gICAgdG9wbGV2ZWwgJHcKKyAgICB0dGtfdG9wbGV2ZWwgJHcKICAgICB3bSB0aXRsZSAkdyBbbWMgIkdpdGsga2V5IGJpbmRpbmdzIl0KICAgICBtYWtlX3RyYW5zaWVudCAkdyAuCiAgICAgbWVzc2FnZSAkdy5tIC10ZXh0ICIKQEAgLTI3MTksNyArMjg1MSw3IEBACiAiIFwKIAkgICAgLWp1c3RpZnkgbGVmdCAtYmcgd2hpdGUgLWJvcmRlciAyIC1yZWxpZWYgZ3Jvb3ZlCiAgICAgcGFjayAkdy5tIC1zaWRlIHRvcCAtZmlsbCBib3RoIC1wYWR4IDIgLXBhZHkgMgotICAgIGJ1dHRvbiAkdy5vayAtdGV4dCBbbWMgIkNsb3NlIl0gLWNvbW1hbmQgImRlc3Ryb3kgJHciIC1kZWZhdWx0IGFjdGl2ZQorICAgICR7TlN9OjpidXR0b24gJHcub2sgLXRleHQgW21jICJDbG9zZSJdIC1jb21tYW5kICJkZXN0cm95ICR3IiAtZGVmYXVsdCBhY3RpdmUKICAgICBiaW5kICR3IDxLZXktRXNjYXBlPiBbbGlzdCBkZXN0cm95ICR3XQogICAgIHBhY2sgJHcub2sgLXNpZGUgYm90dG9tCiAgICAgYmluZCAkdyA8VmlzaWJpbGl0eT4gImZvY3VzICR3Lm9rIgpAQCAtMzE2Myw2ICszMjk1LDI4IEBACiAgICAgc2V0IGdkdHR5cGUgW21jICJ0b3VjaGluZyBwYXRoczoiXQogfQogCitwcm9jIGdpdGtuZXd0bXBkaXIge30geworICAgIGdsb2JhbCBkaWZmbnVtIGdpdGt0bXBkaXIgZ2l0ZGlyCisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBnaXRrdG1wZGlyXX0geworCXNldCBnaXRrdG1wZGlyIFtmaWxlIGpvaW4gW2ZpbGUgZGlybmFtZSAkZ2l0ZGlyXSBcCisJCQkgICAgW2Zvcm1hdCAiLmdpdGstdG1wLiVzIiBbcGlkXV1dCisJaWYge1tjYXRjaCB7ZmlsZSBta2RpciAkZ2l0a3RtcGRpcn0gZXJyXX0geworCSAgICBlcnJvcl9wb3B1cCAiW21jICJFcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiIgJGdpdGt0bXBkaXJdICRlcnIiCisJICAgIHVuc2V0IGdpdGt0bXBkaXIKKwkgICAgcmV0dXJuIHt9CisJfQorCXNldCBkaWZmbnVtIDAKKyAgICB9CisgICAgaW5jciBkaWZmbnVtCisgICAgc2V0IGRpZmZkaXIgW2ZpbGUgam9pbiAkZ2l0a3RtcGRpciAkZGlmZm51bV0KKyAgICBpZiB7W2NhdGNoIHtmaWxlIG1rZGlyICRkaWZmZGlyfSBlcnJdfSB7CisJZXJyb3JfcG9wdXAgIlttYyAiRXJyb3IgY3JlYXRpbmcgdGVtcG9yYXJ5IGRpcmVjdG9yeSAlczoiICRkaWZmZGlyXSAkZXJyIgorCXJldHVybiB7fQorICAgIH0KKyAgICByZXR1cm4gJGRpZmZkaXIKK30KKwogcHJvYyBzYXZlX2ZpbGVfZnJvbV9jb21taXQge2ZpbGVuYW1lIG91dHB1dCB3aGF0fSB7CiAgICAgZ2xvYmFsIG51bGxmaWxlCiAKQEAgLTMxOTcsMTEgKzMzNTEsMTAgQEAKIH0KIAogcHJvYyBleHRlcm5hbF9kaWZmIHt9IHsKLSAgICBnbG9iYWwgZ2l0a3RtcGRpciBudWxsaWQgbnVsbGlkMgorICAgIGdsb2JhbCBudWxsaWQgbnVsbGlkMgogICAgIGdsb2JhbCBmbGlzdF9tZW51X2ZpbGUKICAgICBnbG9iYWwgZGlmZmlkcwotICAgIGdsb2JhbCBkaWZmbnVtCi0gICAgZ2xvYmFsIGdpdGRpciBleHRkaWZmdG9vbAorICAgIGdsb2JhbCBleHRkaWZmdG9vbAogCiAgICAgaWYge1tsbGVuZ3RoICRkaWZmaWRzXSA9PSAxfSB7CiAgICAgICAgICMgbm8gcmVmZXJlbmNlIGNvbW1pdCBnaXZlbgpAQCAtMzIyMywyMiArMzM3Niw4IEBACiAgICAgfQogCiAgICAgIyBtYWtlIHN1cmUgdGhhdCBzZXZlcmFsIGRpZmZzIHdvbnQgY29sbGlkZQotICAgIGlmIHshW2luZm8gZXhpc3RzIGdpdGt0bXBkaXJdfSB7Ci0Jc2V0IGdpdGt0bXBkaXIgW2ZpbGUgam9pbiBbZmlsZSBkaXJuYW1lICRnaXRkaXJdIFwKLQkJCSAgICBbZm9ybWF0ICIuZ2l0ay10bXAuJXMiIFtwaWRdXV0KLQlpZiB7W2NhdGNoIHtmaWxlIG1rZGlyICRnaXRrdG1wZGlyfSBlcnJdfSB7Ci0JICAgIGVycm9yX3BvcHVwICJbbWMgIkVycm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXM6IiAkZ2l0a3RtcGRpcl0gJGVyciIKLQkgICAgdW5zZXQgZ2l0a3RtcGRpcgotCSAgICByZXR1cm4KLQl9Ci0Jc2V0IGRpZmZudW0gMAotICAgIH0KLSAgICBpbmNyIGRpZmZudW0KLSAgICBzZXQgZGlmZmRpciBbZmlsZSBqb2luICRnaXRrdG1wZGlyICRkaWZmbnVtXQotICAgIGlmIHtbY2F0Y2gge2ZpbGUgbWtkaXIgJGRpZmZkaXJ9IGVycl19IHsKLQllcnJvcl9wb3B1cCAiW21jICJFcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiIgJGRpZmZkaXJdICRlcnIiCi0JcmV0dXJuCi0gICAgfQorICAgIHNldCBkaWZmZGlyIFtnaXRrbmV3dG1wZGlyXQorICAgIGlmIHskZGlmZmRpciBlcSB7fX0gcmV0dXJuCiAKICAgICAjIGdhdGhlciBmaWxlcyB0byBkaWZmCiAgICAgc2V0IGRpZmZmcm9tZmlsZSBbZXh0ZXJuYWxfZGlmZl9nZXRfb25lX2ZpbGUgJGRpZmZpZGZyb20gJGZsaXN0X21lbnVfZmlsZSAkZGlmZmRpcl0KQEAgLTMzNjUsNiArMzUwNCw5IEBACiAKICMgVHVybiBhbiBhYnNvbHV0ZSBwYXRoIGludG8gb25lIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeQogcHJvYyBtYWtlX3JlbGF0aXZlIHtmfSB7CisgICAgaWYge1tmaWxlIHBhdGh0eXBlICRmXSBlcSAicmVsYXRpdmUifSB7CisJcmV0dXJuICRmCisgICAgfQogICAgIHNldCBlbHRzIFtmaWxlIHNwbGl0ICRmXQogICAgIHNldCBoZXJlIFtmaWxlIHNwbGl0IFtwd2RdXQogICAgIHNldCBlaSAwCkBAIC0zNjcxLDE3ICszODEzLDM2IEBACiB9CiAKIHNldCBrbm93bl92aWV3X29wdGlvbnMgewotICAgIHtwZXJtICAgIGIgICAgLiB7fSAgICAgICAgICAgICAgIHttYyAiUmVtZW1iZXIgdGhpcyB2aWV3In19Ci0gICAge2FyZ3MgICAgdDUwPSArIHt9ICAgICAgICAgICAgICAge21jICJDb21taXRzIHRvIGluY2x1ZGUgKGFyZ3VtZW50cyB0byBnaXQgbG9nKToifX0KLSAgICB7YWxsICAgICBiICAgICogIi0tYWxsIiAgICAgICAgICB7bWMgIlVzZSBhbGwgcmVmcyJ9fQotICAgIHtkb3JkZXIgIGIgICAgLiB7Ii0tZGF0ZS1vcmRlciIgIi1kIn0gICAgICB7bWMgIlN0cmljdGx5IHNvcnQgYnkgZGF0ZSJ9fQotICAgIHtscmlnaHQgIGIgICAgLiAiLS1sZWZ0LXJpZ2h0IiAgIHttYyAiTWFyayBicmFuY2ggc2lkZXMifX0KLSAgICB7c2luY2UgICB0MTUgICsgeyItLXNpbmNlPSoiICItLWFmdGVyPSoifSAge21jICJTaW5jZSBkYXRlOiJ9fQotICAgIHt1bnRpbCAgIHQxNSAgLiB7Ii0tdW50aWw9KiIgIi0tYmVmb3JlPSoifSB7bWMgIlVudGlsIGRhdGU6In19Ci0gICAge2xpbWl0ICAgdDEwICArICItLW1heC1jb3VudD0qIiAge21jICJNYXggY291bnQ6In19Ci0gICAge3NraXAgICAgdDEwICAuICItLXNraXA9KiIgICAgICAge21jICJTa2lwOiJ9fQotICAgIHtmaXJzdCAgIGIgICAgLiAiLS1maXJzdC1wYXJlbnQiIHttYyAiTGltaXQgdG8gZmlyc3QgcGFyZW50In19Ci0gICAge2NtZCAgICAgdDUwPSArIHt9ICAgICAgICAgICAgICAge21jICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiJ9fQorICAgIHtwZXJtICAgICAgYiAgICAuICB7fSAgICAgICAgICAgICAgIHttYyAiUmVtZW1iZXIgdGhpcyB2aWV3In19CisgICAge3JlZmxhYmVsICBsICAgICsgIHt9ICAgICAgICAgICAgICAge21jICJSZWZlcmVuY2VzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCk6In19CisgICAge3JlZnMgICAgICB0MTUgIC4uIHt9ICAgICAgICAgICAgICAge21jICJCcmFuY2hlcyAmIHRhZ3M6In19CisgICAge2FsbHJlZnMgICBiICAgICouICItLWFsbCIgICAgICAgICAge21jICJBbGwgcmVmcyJ9fQorICAgIHticmFuY2hlcyAgYiAgICAuICAiLS1icmFuY2hlcyIgICAgIHttYyAiQWxsIChsb2NhbCkgYnJhbmNoZXMifX0KKyAgICB7dGFncyAgICAgIGIgICAgLiAgIi0tdGFncyIgICAgICAgICB7bWMgIkFsbCB0YWdzIn19CisgICAge3JlbW90ZXMgICBiICAgIC4gICItLXJlbW90ZXMiICAgICAge21jICJBbGwgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIn19CisgICAge2NvbW1pdGxibCBsICAgICsgIHt9ICAgICAgICAgICAgICAge21jICJDb21taXQgSW5mbyAocmVndWxhciBleHByZXNzaW9ucyk6In19CisgICAge2F1dGhvciAgICB0MTUgIC4uICItLWF1dGhvcj0qIiAgICAge21jICJBdXRob3I6In19CisgICAge2NvbW1pdHRlciB0MTUgIC4gICItLWNvbW1pdHRlcj0qIiAge21jICJDb21taXR0ZXI6In19CisgICAge2xvZ2luZm8gICB0MTUgIC4uICItLWdyZXA9KiIgICAgICAge21jICJDb21taXQgTWVzc2FnZToifX0KKyAgICB7YWxsbWF0Y2ggIGIgICAgLi4gIi0tYWxsLW1hdGNoIiAgICB7bWMgIk1hdGNoZXMgYWxsIENvbW1pdCBJbmZvIGNyaXRlcmlhIn19CisgICAge2NoYW5nZXNfbCBsICAgICsgIHt9ICAgICAgICAgICAgICAge21jICJDaGFuZ2VzIHRvIEZpbGVzOiJ9fQorICAgIHtwaWNrYXhlX3MgcjAgICAuICB7fSAgICAgICAgICAgICAgIHttYyAiRml4ZWQgU3RyaW5nIn19CisgICAge3BpY2theGVfdCByMSAgIC4gICItLXBpY2theGUtcmVnZXgiICB7bWMgIlJlZ3VsYXIgRXhwcmVzc2lvbiJ9fQorICAgIHtwaWNrYXhlICAgdDE1ICAuLiAiLVMqIiAgICAgICAgICAgIHttYyAiU2VhcmNoIHN0cmluZzoifX0KKyAgICB7ZGF0ZWxhYmVsIGwgICAgKyAge30gICAgICAgICAgICAgICB7bWMgIkNvbW1pdCBEYXRlcyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAxNToyNzozOFwiKToifX0KKyAgICB7c2luY2UgICAgIHQxNSAgLi4gIHsiLS1zaW5jZT0qIiAiLS1hZnRlcj0qIn0gIHttYyAiU2luY2U6In19CisgICAge3VudGlsICAgICB0MTUgIC4gICB7Ii0tdW50aWw9KiIgIi0tYmVmb3JlPSoifSB7bWMgIlVudGlsOiJ9fQorICAgIHtsaW1pdF9sYmwgbCAgICArICB7fSAgICAgICAgICAgICAgIHttYyAiTGltaXQgYW5kL29yIHNraXAgYSBudW1iZXIgb2YgcmV2aXNpb25zIChwb3NpdGl2ZSBpbnRlZ2VyKToifX0KKyAgICB7bGltaXQgICAgIHQxMCAgKi4gIi0tbWF4LWNvdW50PSoiICB7bWMgIk51bWJlciB0byBzaG93OiJ9fQorICAgIHtza2lwICAgICAgdDEwICAuICAiLS1za2lwPSoiICAgICAgIHttYyAiTnVtYmVyIHRvIHNraXA6In19CisgICAge21pc2NfbGJsICBsICAgICsgIHt9ICAgICAgICAgICAgICAge21jICJNaXNjZWxsYW5lb3VzIG9wdGlvbnM6In19CisgICAge2RvcmRlciAgICBiICAgICouIHsiLS1kYXRlLW9yZGVyIiAiLWQifSAgICAgIHttYyAiU3RyaWN0bHkgc29ydCBieSBkYXRlIn19CisgICAge2xyaWdodCAgICBiICAgIC4gICItLWxlZnQtcmlnaHQiICAge21jICJNYXJrIGJyYW5jaCBzaWRlcyJ9fQorICAgIHtmaXJzdCAgICAgYiAgICAuICAiLS1maXJzdC1wYXJlbnQiIHttYyAiTGltaXQgdG8gZmlyc3QgcGFyZW50In19CisgICAge3NtcGxoc3QgICBiICAgIC4gICItLXNpbXBsaWZ5LWJ5LWRlY29yYXRpb24iICAge21jICJTaW1wbGUgaGlzdG9yeSJ9fQorICAgIHthcmdzICAgICAgdDUwICAqLiB7fSAgICAgICAgICAgICAgIHttYyAiQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gZ2l0IGxvZzoifX0KKyAgICB7YWxscGF0aHMgIHBhdGggKyAge30gICAgICAgICAgICAgICB7bWMgIkVudGVyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBpbmNsdWRlLCBvbmUgcGVyIGxpbmU6In19CisgICAge2NtZCAgICAgICB0NTA9ICsgIHt9ICAgICAgICAgICAgICAge21jICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiJ9fQogICAgIH0KIAogcHJvYyBlbmNvZGVfdmlld19vcHRzIHtufSB7CkBAIC0zNjkzLDEzICszODU0LDE5IEBACiAJaWYgeyRwYXR0ZXJucyBlcSB7fX0gY29udGludWUKIAlzZXQgcGF0dGVybiBbbGluZGV4ICRwYXR0ZXJucyAwXQogCi0Jc2V0IHZhbCAkbmV3dmlld29wdHMoJG4sW2xpbmRleCAkb3B0IDBdKQotCQogCWlmIHtbbGluZGV4ICRvcHQgMV0gZXEgImIifSB7CisJICAgIHNldCB2YWwgJG5ld3ZpZXdvcHRzKCRuLFtsaW5kZXggJG9wdCAwXSkKIAkgICAgaWYgeyR2YWx9IHsKIAkJbGFwcGVuZCByYXJncyAkcGF0dGVybgogCSAgICB9CisJfSBlbHNlaWYge1tyZWdleHAge15yKFxkKykkfSBbbGluZGV4ICRvcHQgMV0gdHlwZSB2YWx1ZV19IHsKKwkgICAgcmVnZXhwIHteKC4qXyl9IFtsaW5kZXggJG9wdCAwXSB1c2VsZXNzdmFyIGJ1dHRvbl9pZAorCSAgICBzZXQgdmFsICRuZXd2aWV3b3B0cygkbiwkYnV0dG9uX2lkKQorCSAgICBpZiB7JHZhbCBlcSAkdmFsdWV9IHsKKwkJbGFwcGVuZCByYXJncyAkcGF0dGVybgorCSAgICB9CiAJfSBlbHNlIHsKKwkgICAgc2V0IHZhbCAkbmV3dmlld29wdHMoJG4sW2xpbmRleCAkb3B0IDBdKQogCSAgICBzZXQgdmFsIFtzdHJpbmcgdHJpbSAkdmFsXQogCSAgICBpZiB7JHZhbCBuZSB7fX0gewogCQlzZXQgcGZpeCBbc3RyaW5nIHJhbmdlICRwYXR0ZXJuIDAgZW5kLTFdCkBAIC0zNzA3LDYgKzM4NzQsNyBAQAogCSAgICB9CiAJfQogICAgIH0KKyAgICBzZXQgcmFyZ3MgW2NvbmNhdCAkcmFyZ3MgW3NoZWxsc3BsaXQgJG5ld3ZpZXdvcHRzKCRuLHJlZnMpXV0KICAgICByZXR1cm4gW2NvbmNhdCAkcmFyZ3MgW3NoZWxsc3BsaXQgJG5ld3ZpZXdvcHRzKCRuLGFyZ3MpXV0KIH0KIApAQCAtMzcxNCwxNCArMzg4MiwyMiBAQAogICAgIGdsb2JhbCBrbm93bl92aWV3X29wdGlvbnMgbmV3dmlld29wdHMKIAogICAgIGZvcmVhY2ggb3B0ICRrbm93bl92aWV3X29wdGlvbnMgeworCXNldCBpZCBbbGluZGV4ICRvcHQgMF0KIAlpZiB7W2xpbmRleCAkb3B0IDFdIGVxICJiIn0geworCSAgICAjIENoZWNrYm94ZXMKKwkgICAgc2V0IHZhbCAwCisgICAgICAgIH0gZWxzZWlmIHtbcmVnZXhwIHtecihcZCspJH0gW2xpbmRleCAkb3B0IDFdXX0geworCSAgICAjIFJhZGlvYnV0dG9ucworCSAgICByZWdleHAge14oLipfKX0gJGlkIHVzZWxlc3N2YXIgaWQKIAkgICAgc2V0IHZhbCAwCiAJfSBlbHNlIHsKKwkgICAgIyBUZXh0IGZpZWxkcwogCSAgICBzZXQgdmFsIHt9CiAJfQotCXNldCBuZXd2aWV3b3B0cygkbixbbGluZGV4ICRvcHQgMF0pICR2YWwKKwlzZXQgbmV3dmlld29wdHMoJG4sJGlkKSAkdmFsCiAgICAgfQogICAgIHNldCBvYXJncyBbbGlzdF0KKyAgICBzZXQgcmVmYXJncyBbbGlzdF0KICAgICBmb3JlYWNoIGFyZyAkdmlld19hcmdzIHsKIAlpZiB7W3JlZ2V4cCAtLSB7Xi0oWzAtOV0rKSR9ICRhcmcgYXJnIGNudF0KIAkgICAgJiYgIVtpbmZvIGV4aXN0cyBmb3VuZChsaW1pdCldfSB7CkBAIC0zNzM1LDExICszOTExLDE3IEBACiAJICAgIGlmIHtbaW5mbyBleGlzdHMgZm91bmQoJGlkKV19IGNvbnRpbnVlCiAJICAgIGZvcmVhY2ggcGF0dGVybiBbbGluZGV4ICRvcHQgM10gewogCQlpZiB7IVtzdHJpbmcgbWF0Y2ggJHBhdHRlcm4gJGFyZ119IGNvbnRpbnVlCi0JCWlmIHtbbGluZGV4ICRvcHQgMV0gbmUgImIifSB7CisJCWlmIHtbbGluZGV4ICRvcHQgMV0gZXEgImIifSB7CisJCSAgICAjIENoZWNrIGJ1dHRvbnMKKwkJICAgIHNldCB2YWwgMQorCQl9IGVsc2VpZiB7W3JlZ2V4cCB7XnIoXGQrKSR9IFtsaW5kZXggJG9wdCAxXSBtYXRjaCBudW1dfSB7CisJCSAgICAjIFJhZGlvIGJ1dHRvbnMKKwkJICAgIHJlZ2V4cCB7XiguKl8pfSAkaWQgdXNlbGVzc3ZhciBpZAorCQkgICAgc2V0IHZhbCAkbnVtCisJCX0gZWxzZSB7CisJCSAgICAjIFRleHQgaW5wdXQgZmllbGRzCiAJCSAgICBzZXQgc2l6ZSBbc3RyaW5nIGxlbmd0aCAkcGF0dGVybl0KIAkJICAgIHNldCB2YWwgW3N0cmluZyByYW5nZSAkYXJnIFtleHByIHskc2l6ZS0xfV0gZW5kXQotCQl9IGVsc2UgewotCQkgICAgc2V0IHZhbCAxCiAJCX0KIAkJc2V0IG5ld3ZpZXdvcHRzKCRuLCRpZCkgJHZhbAogCQlzZXQgZm91bmQoJGlkKSAxCkBAIC0zNzQ4LDggKzM5MzAsMTMgQEAKIAkgICAgaWYge1tpbmZvIGV4aXN0cyB2YWxdfSBicmVhawogCX0KIAlpZiB7W2luZm8gZXhpc3RzIHZhbF19IGNvbnRpbnVlCi0JbGFwcGVuZCBvYXJncyAkYXJnCisJaWYge1tyZWdleHAge14tfSAkYXJnXX0geworCSAgICBsYXBwZW5kIG9hcmdzICRhcmcKKwl9IGVsc2UgeworCSAgICBsYXBwZW5kIHJlZmFyZ3MgJGFyZworCX0KICAgICB9CisgICAgc2V0IG5ld3ZpZXdvcHRzKCRuLHJlZnMpIFtzaGVsbGFyZ2xpc3QgJHJlZmFyZ3NdCiAgICAgc2V0IG5ld3ZpZXdvcHRzKCRuLGFyZ3MpIFtzaGVsbGFyZ2xpc3QgJG9hcmdzXQogfQogCkBAIC0zNzgyLDE5ICszOTY5LDE5IEBACiAKIHByb2Mgdmlld2VkaXRvciB7dG9wIG4gdGl0bGV9IHsKICAgICBnbG9iYWwgbmV3dmlld25hbWUgbmV3dmlld29wdHMgdmlld2ZpbGVzIGJnY29sb3IKLSAgICBnbG9iYWwga25vd25fdmlld19vcHRpb25zCisgICAgZ2xvYmFsIGtub3duX3ZpZXdfb3B0aW9ucyBOUwogCi0gICAgdG9wbGV2ZWwgJHRvcAotICAgIHdtIHRpdGxlICR0b3AgJHRpdGxlCisgICAgdHRrX3RvcGxldmVsICR0b3AKKyAgICB3bSB0aXRsZSAkdG9wIFtjb25jYXQgJHRpdGxlIFttYyAiLS0gY3JpdGVyaWEgZm9yIHNlbGVjdGluZyByZXZpc2lvbnMiXV0KICAgICBtYWtlX3RyYW5zaWVudCAkdG9wIC4KIAogICAgICMgVmlldyBuYW1lCi0gICAgZnJhbWUgJHRvcC5uZnIKLSAgICBsYWJlbCAkdG9wLm5sIC10ZXh0IFttYyAiTmFtZSJdCi0gICAgZW50cnkgJHRvcC5uYW1lIC13aWR0aCAyMCAtdGV4dHZhcmlhYmxlIG5ld3ZpZXduYW1lKCRuKQorICAgICR7TlN9OjpmcmFtZSAkdG9wLm5mcgorICAgICR7TlN9OjpsYWJlbCAkdG9wLm5sIC10ZXh0IFttYyAiVmlldyBOYW1lIl0KKyAgICAke05TfTo6ZW50cnkgJHRvcC5uYW1lIC13aWR0aCAyMCAtdGV4dHZhcmlhYmxlIG5ld3ZpZXduYW1lKCRuKQogICAgIHBhY2sgJHRvcC5uZnIgLWluICR0b3AgLWZpbGwgeCAtcGFkeSA1IC1wYWR4IDMKLSAgICBwYWNrICR0b3AubmwgLWluICR0b3AubmZyIC1zaWRlIGxlZnQgLXBhZHggezAgMzB9Ci0gICAgcGFjayAkdG9wLm5hbWUgLWluICR0b3AubmZyIC1zaWRlIGxlZnQKKyAgICBwYWNrICR0b3AubmwgLWluICR0b3AubmZyIC1zaWRlIGxlZnQgLXBhZHggezAgNX0KKyAgICBwYWNrICR0b3AubmFtZSAtaW4gJHRvcC5uZnIgLXNpZGUgbGVmdCAtcGFkeCB7MCAyNX0KIAogICAgICMgVmlldyBvcHRpb25zCiAgICAgc2V0IGNmcmFtZSAkdG9wLm5mcgpAQCAtMzgxMCw1MCArMzk5Nyw2MyBAQAogCWlmIHskZmxhZ3MgZXEgIisiIHx8ICRmbGFncyBlcSAiKiJ9IHsKIAkgICAgc2V0IGNmcmFtZSAkdG9wLmZyJGNudAogCSAgICBpbmNyIGNudAotCSAgICBmcmFtZSAkY2ZyYW1lCisJICAgICR7TlN9OjpmcmFtZSAkY2ZyYW1lCiAJICAgIHBhY2sgJGNmcmFtZSAtaW4gJHRvcCAtZmlsbCB4IC1wYWR5IDMgLXBhZHggMwogCSAgICBzZXQgY2V4cGFuZCBbZXhwciB7JGZsYWdzIGVxICIqIn1dCisgICAgICAgIH0gZWxzZWlmIHskZmxhZ3MgZXEgIi4uIiB8fCAkZmxhZ3MgZXEgIiouIn0geworCSAgICBzZXQgY2ZyYW1lICR0b3AuZnIkY250CisJICAgIGluY3IgY250CisJICAgICR7TlN9OjpmcmFtZSAkY2ZyYW1lCisJICAgIHBhY2sgJGNmcmFtZSAtaW4gJHRvcCAtZmlsbCB4IC1wYWR5IDMgLXBhZHggW2xpc3QgMTUgM10KKwkgICAgc2V0IGNleHBhbmQgW2V4cHIgeyRmbGFncyBlcSAiKi4ifV0KIAl9IGVsc2UgewogCSAgICBzZXQgbHhwYWQgNQogCX0KIAotCWlmIHskdHlwZSBlcSAiYiJ9IHsKLQkgICAgY2hlY2tidXR0b24gJGNmcmFtZS5jXyRpZCAtdGV4dCAkdGl0bGUgLXZhcmlhYmxlIG5ld3ZpZXdvcHRzKCRuLCRpZCkKKwlpZiB7JHR5cGUgZXEgImwifSB7CisgICAgICAgICAgICAke05TfTo6bGFiZWwgJGNmcmFtZS5sXyRpZCAtdGV4dCAkdGl0bGUKKyAgICAgICAgICAgIHBhY2sgJGNmcmFtZS5sXyRpZCAtaW4gJGNmcmFtZSAtc2lkZSBsZWZ0IC1wYWR5IFtsaXN0IDMgMF0gLWFuY2hvciB3CisJfSBlbHNlaWYgeyR0eXBlIGVxICJiIn0geworCSAgICAke05TfTo6Y2hlY2tidXR0b24gJGNmcmFtZS5jXyRpZCAtdGV4dCAkdGl0bGUgLXZhcmlhYmxlIG5ld3ZpZXdvcHRzKCRuLCRpZCkKKwkgICAgcGFjayAkY2ZyYW1lLmNfJGlkIC1pbiAkY2ZyYW1lIC1zaWRlIGxlZnQgXAorCQktcGFkeCBbbGlzdCAkbHhwYWQgMF0gLWV4cGFuZCAkY2V4cGFuZCAtYW5jaG9yIHcKKwl9IGVsc2VpZiB7W3JlZ2V4cCB7XnIoXGQrKSR9ICR0eXBlIHR5cGUgc3pdfSB7CisJICAgIHJlZ2V4cCB7XiguKl8pfSAkaWQgdXNlbGVzc3ZhciBidXR0b25faWQKKwkgICAgJHtOU306OnJhZGlvYnV0dG9uICRjZnJhbWUuY18kaWQgLXRleHQgJHRpdGxlIC12YXJpYWJsZSBuZXd2aWV3b3B0cygkbiwkYnV0dG9uX2lkKSAtdmFsdWUgJHN6CiAJICAgIHBhY2sgJGNmcmFtZS5jXyRpZCAtaW4gJGNmcmFtZSAtc2lkZSBsZWZ0IFwKIAkJLXBhZHggW2xpc3QgJGx4cGFkIDBdIC1leHBhbmQgJGNleHBhbmQgLWFuY2hvciB3CiAJfSBlbHNlaWYge1tyZWdleHAge150KFxkKykkfSAkdHlwZSB0eXBlIHN6XX0gewotCSAgICBtZXNzYWdlICRjZnJhbWUubF8kaWQgLWFzcGVjdCAxNTAwIC10ZXh0ICR0aXRsZQotCSAgICBlbnRyeSAkY2ZyYW1lLmVfJGlkIC13aWR0aCAkc3ogLWJhY2tncm91bmQgJGJnY29sb3IgXAorCSAgICAke05TfTo6bGFiZWwgJGNmcmFtZS5sXyRpZCAtdGV4dCAkdGl0bGUKKwkgICAgJHtOU306OmVudHJ5ICRjZnJhbWUuZV8kaWQgLXdpZHRoICRzeiAtYmFja2dyb3VuZCAkYmdjb2xvciBcCiAJCS10ZXh0dmFyaWFibGUgbmV3dmlld29wdHMoJG4sJGlkKQogCSAgICBwYWNrICRjZnJhbWUubF8kaWQgLWluICRjZnJhbWUgLXNpZGUgbGVmdCAtcGFkeCBbbGlzdCAkbHhwYWQgMF0KIAkgICAgcGFjayAkY2ZyYW1lLmVfJGlkIC1pbiAkY2ZyYW1lIC1zaWRlIGxlZnQgLWV4cGFuZCAxIC1maWxsIHgKIAl9IGVsc2VpZiB7W3JlZ2V4cCB7XnQoXGQrKT0kfSAkdHlwZSB0eXBlIHN6XX0gewotCSAgICBtZXNzYWdlICRjZnJhbWUubF8kaWQgLWFzcGVjdCAxNTAwIC10ZXh0ICR0aXRsZQotCSAgICBlbnRyeSAkY2ZyYW1lLmVfJGlkIC13aWR0aCAkc3ogLWJhY2tncm91bmQgJGJnY29sb3IgXAorCSAgICAke05TfTo6bGFiZWwgJGNmcmFtZS5sXyRpZCAtdGV4dCAkdGl0bGUKKwkgICAgJHtOU306OmVudHJ5ICRjZnJhbWUuZV8kaWQgLXdpZHRoICRzeiAtYmFja2dyb3VuZCAkYmdjb2xvciBcCiAJCS10ZXh0dmFyaWFibGUgbmV3dmlld29wdHMoJG4sJGlkKQogCSAgICBwYWNrICRjZnJhbWUubF8kaWQgLWluICRjZnJhbWUgLXNpZGUgdG9wIC1wYWR5IFtsaXN0IDMgMF0gLWFuY2hvciB3CiAJICAgIHBhY2sgJGNmcmFtZS5lXyRpZCAtaW4gJGNmcmFtZSAtc2lkZSB0b3AgLWZpbGwgeAorCX0gZWxzZWlmIHskdHlwZSBlcSAicGF0aCJ9IHsKKwkgICAgJHtOU306OmxhYmVsICR0b3AubCAtdGV4dCAkdGl0bGUKKwkgICAgcGFjayAkdG9wLmwgLWluICR0b3AgLXNpZGUgdG9wIC1wYWR5IFtsaXN0IDMgMF0gLWFuY2hvciB3IC1wYWR4IDMKKwkgICAgdGV4dCAkdG9wLnQgLXdpZHRoIDQwIC1oZWlnaHQgNSAtYmFja2dyb3VuZCAkYmdjb2xvciAtZm9udCB1aWZvbnQKKwkgICAgaWYge1tpbmZvIGV4aXN0cyB2aWV3ZmlsZXMoJG4pXX0geworCQlmb3JlYWNoIGYgJHZpZXdmaWxlcygkbikgeworCQkgICAgJHRvcC50IGluc2VydCBlbmQgJGYKKwkJICAgICR0b3AudCBpbnNlcnQgZW5kICJcbiIKKwkJfQorCQkkdG9wLnQgZGVsZXRlIHtlbmQgLSAxY30gZW5kCisJCSR0b3AudCBtYXJrIHNldCBpbnNlcnQgMC4wCisJICAgIH0KKwkgICAgcGFjayAkdG9wLnQgLWluICR0b3AgLXNpZGUgdG9wIC1wYWR5IFtsaXN0IDAgNV0gLWZpbGwgYm90aCAtZXhwYW5kIDEgLXBhZHggMwogCX0KICAgICB9CiAKLSAgICAjIFBhdGggbGlzdAotICAgIG1lc3NhZ2UgJHRvcC5sIC1hc3BlY3QgMTUwMCBcCi0JLXRleHQgW21jICJFbnRlciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gaW5jbHVkZSwgb25lIHBlciBsaW5lOiJdCi0gICAgcGFjayAkdG9wLmwgLWluICR0b3AgLXNpZGUgdG9wIC1wYWR5IFtsaXN0IDcgMF0gLWFuY2hvciB3IC1wYWR4IDMKLSAgICB0ZXh0ICR0b3AudCAtd2lkdGggNDAgLWhlaWdodCA1IC1iYWNrZ3JvdW5kICRiZ2NvbG9yIC1mb250IHVpZm9udAotICAgIGlmIHtbaW5mbyBleGlzdHMgdmlld2ZpbGVzKCRuKV19IHsKLQlmb3JlYWNoIGYgJHZpZXdmaWxlcygkbikgewotCSAgICAkdG9wLnQgaW5zZXJ0IGVuZCAkZgotCSAgICAkdG9wLnQgaW5zZXJ0IGVuZCAiXG4iCi0JfQotCSR0b3AudCBkZWxldGUge2VuZCAtIDFjfSBlbmQKLQkkdG9wLnQgbWFyayBzZXQgaW5zZXJ0IDAuMAotICAgIH0KLSAgICBwYWNrICR0b3AudCAtaW4gJHRvcCAtc2lkZSB0b3AgLXBhZHkgW2xpc3QgMCA1XSAtZmlsbCBib3RoIC1leHBhbmQgMSAtcGFkeCAzCi0gICAgZnJhbWUgJHRvcC5idXRzCi0gICAgYnV0dG9uICR0b3AuYnV0cy5vayAtdGV4dCBbbWMgIk9LIl0gLWNvbW1hbmQgW2xpc3QgbmV3dmlld29rICR0b3AgJG5dCi0gICAgYnV0dG9uICR0b3AuYnV0cy5hcHBseSAtdGV4dCBbbWMgIkFwcGx5IChGNSkiXSAtY29tbWFuZCBbbGlzdCBuZXd2aWV3b2sgJHRvcCAkbiAxXQotICAgIGJ1dHRvbiAkdG9wLmJ1dHMuY2FuIC10ZXh0IFttYyAiQ2FuY2VsIl0gLWNvbW1hbmQgW2xpc3QgZGVzdHJveSAkdG9wXQorICAgICR7TlN9OjpmcmFtZSAkdG9wLmJ1dHMKKyAgICAke05TfTo6YnV0dG9uICR0b3AuYnV0cy5vayAtdGV4dCBbbWMgIk9LIl0gLWNvbW1hbmQgW2xpc3QgbmV3dmlld29rICR0b3AgJG5dCisgICAgJHtOU306OmJ1dHRvbiAkdG9wLmJ1dHMuYXBwbHkgLXRleHQgW21jICJBcHBseSAoRjUpIl0gLWNvbW1hbmQgW2xpc3QgbmV3dmlld29rICR0b3AgJG4gMV0KKyAgICAke05TfTo6YnV0dG9uICR0b3AuYnV0cy5jYW4gLXRleHQgW21jICJDYW5jZWwiXSAtY29tbWFuZCBbbGlzdCBkZXN0cm95ICR0b3BdCiAgICAgYmluZCAkdG9wIDxDb250cm9sLVJldHVybj4gW2xpc3QgbmV3dmlld29rICR0b3AgJG5dCiAgICAgYmluZCAkdG9wIDxGNT4gW2xpc3QgbmV3dmlld29rICR0b3AgJG4gMV0KICAgICBiaW5kICR0b3AgPEVzY2FwZT4gW2xpc3QgZGVzdHJveSAkdG9wXQpAQCAtNjcxNywxNCArNjkxNywxMyBAQAogICAgIG1ha2Vfc2Vjc2VsICRpZAogCiAgICAgaWYgeyRpc25ld30gewotCWFkZHRvaGlzdG9yeSBbbGlzdCBzZWxieWlkICRpZF0KKwlhZGR0b2hpc3RvcnkgW2xpc3Qgc2VsYnlpZCAkaWQgMF0gc2F2ZWNtaXRwb3MKICAgICB9CiAKICAgICAkc2hhMWVudHJ5IGRlbGV0ZSAwIGVuZAogICAgICRzaGExZW50cnkgaW5zZXJ0IDAgJGlkCiAgICAgaWYgeyRhdXRvc2VsZWN0fSB7Ci0JJHNoYTFlbnRyeSBzZWxlY3Rpb24gZnJvbSAwCi0JJHNoYTFlbnRyeSBzZWxlY3Rpb24gdG8gZW5kCisJJHNoYTFlbnRyeSBzZWxlY3Rpb24gcmFuZ2UgMCBlbmQKICAgICB9CiAgICAgcmhpZ2hsaWdodF9zZWwgJGlkCiAKQEAgLTY4NjksMTAgKzcwNjgsMTIgQEAKICAgICB9CiB9CiAKLXByb2MgYWRkdG9oaXN0b3J5IHtjbWR9IHsKK3Byb2MgYWRkdG9oaXN0b3J5IHtjbWQge3NhdmVwcm9jIHt9fX0gewogICAgIGdsb2JhbCBoaXN0b3J5IGhpc3RvcnlpbmRleCBjdXJ2aWV3CiAKLSAgICBzZXQgZWx0IFtsaXN0ICRjdXJ2aWV3ICRjbWRdCisgICAgdW5zZXRfcG9zdmFycworICAgIHNhdmVfcG9zaXRpb24KKyAgICBzZXQgZWx0IFtsaXN0ICRjdXJ2aWV3ICRjbWQgJHNhdmVwcm9jIHt9XQogICAgIGlmIHskaGlzdG9yeWluZGV4ID4gMAogCSYmIFtsaW5kZXggJGhpc3RvcnkgW2V4cHIgeyRoaXN0b3J5aW5kZXggLSAxfV1dID09ICRlbHR9IHsKIAlyZXR1cm4KQEAgLTY4OTIsMTQgKzcwOTMsNDUgQEAKICAgICAudGYuYmFyLnJpZ2h0YnV0IGNvbmYgLXN0YXRlIGRpc2FibGVkCiB9CiAKKyMgc2F2ZSB0aGUgc2Nyb2xsaW5nIHBvc2l0aW9uIG9mIHRoZSBkaWZmIGRpc3BsYXkgcGFuZQorcHJvYyBzYXZlX3Bvc2l0aW9uIHt9IHsKKyAgICBnbG9iYWwgaGlzdG9yeWluZGV4IGhpc3RvcnkKKworICAgIGlmIHskaGlzdG9yeWluZGV4IDwgMX0gcmV0dXJuCisgICAgc2V0IGhpIFtleHByIHskaGlzdG9yeWluZGV4IC0gMX1dCisgICAgc2V0IGZuIFtsaW5kZXggJGhpc3RvcnkgJGhpIDJdCisgICAgaWYgeyRmbiBuZSB7fX0geworCWxzZXQgaGlzdG9yeSAkaGkgMyBbZXZhbCAkZm5dCisgICAgfQorfQorCitwcm9jIHVuc2V0X3Bvc3ZhcnMge30geworICAgIGdsb2JhbCBsYXN0X3Bvc3ZhcnMKKworICAgIGlmIHtbaW5mbyBleGlzdHMgbGFzdF9wb3N2YXJzXX0geworCWZvcmVhY2gge3ZhciB2YWx9ICRsYXN0X3Bvc3ZhcnMgeworCSAgICBnbG9iYWwgJHZhcgorCSAgICBjYXRjaCB7dW5zZXQgJHZhcn0KKwl9CisJdW5zZXQgbGFzdF9wb3N2YXJzCisgICAgfQorfQorCiBwcm9jIGdvZG8ge2VsdH0gewotICAgIGdsb2JhbCBjdXJ2aWV3CisgICAgZ2xvYmFsIGN1cnZpZXcgbGFzdF9wb3N2YXJzCiAKICAgICBzZXQgdmlldyBbbGluZGV4ICRlbHQgMF0KICAgICBzZXQgY21kIFtsaW5kZXggJGVsdCAxXQorICAgIHNldCBwdiBbbGluZGV4ICRlbHQgM10KICAgICBpZiB7JGN1cnZpZXcgIT0gJHZpZXd9IHsKIAlzaG93dmlldyAkdmlldwogICAgIH0KKyAgICB1bnNldF9wb3N2YXJzCisgICAgZm9yZWFjaCB7dmFyIHZhbH0gJHB2IHsKKwlnbG9iYWwgJHZhcgorCXNldCAkdmFyICR2YWwKKyAgICB9CisgICAgc2V0IGxhc3RfcG9zdmFycyAkcHYKICAgICBldmFsICRjbWQKIH0KIApAQCAtNjkwOCw2ICs3MTQwLDcgQEAKICAgICBmb2N1cyAuCiAKICAgICBpZiB7JGhpc3RvcnlpbmRleCA+IDF9IHsKKwlzYXZlX3Bvc2l0aW9uCiAJaW5jciBoaXN0b3J5aW5kZXggLTEKIAlnb2RvIFtsaW5kZXggJGhpc3RvcnkgW2V4cHIgeyRoaXN0b3J5aW5kZXggLSAxfV1dCiAJLnRmLmJhci5yaWdodGJ1dCBjb25mIC1zdGF0ZSBub3JtYWwKQEAgLTY5MjIsNiArNzE1NSw3IEBACiAgICAgZm9jdXMgLgogCiAgICAgaWYgeyRoaXN0b3J5aW5kZXggPCBbbGxlbmd0aCAkaGlzdG9yeV19IHsKKwlzYXZlX3Bvc2l0aW9uCiAJc2V0IGNtZCBbbGluZGV4ICRoaXN0b3J5ICRoaXN0b3J5aW5kZXhdCiAJaW5jciBoaXN0b3J5aW5kZXgKIAlnb2RvICRjbWQKQEAgLTcxNTQsNyArNzM4OCw3IEBACiAJc2V0IGNtZCBbY29uY2F0IHwgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgJGZsYWdzXQogCWlmIHtbbGxlbmd0aCAkaWRzXSA+IDF9IHsKIAkgICAgIyBjb21wYXJpbmcgaW5kZXggd2l0aCBzcGVjaWZpYyByZXZpc2lvbgotCSAgICBpZiB7JGkgPT0gMH0geworCSAgICBpZiB7JGogPT0gMH0gewogCQlsYXBwZW5kIGNtZCAtUiBbbGluZGV4ICRpZHMgMV0KIAkgICAgfSBlbHNlIHsKIAkJbGFwcGVuZCBjbWQgW2xpbmRleCAkaWRzIDBdCkBAIC03MjQ5LDcgKzc0ODMsNyBAQAogICAgIGdsb2JhbCBkaWZmY29udGV4dHN0cmluZyBkaWZmY29udGV4dAogCiAgICAgaWYge1tzdHJpbmcgaXMgaW50ZWdlciAtc3RyaWN0ICRkaWZmY29udGV4dHN0cmluZ119IHsKLQlpZiB7JGRpZmZjb250ZXh0c3RyaW5nID4gMH0geworCWlmIHskZGlmZmNvbnRleHRzdHJpbmcgPj0gMH0gewogCSAgICBzZXQgZGlmZmNvbnRleHQgJGRpZmZjb250ZXh0c3RyaW5nCiAJICAgIHJlc2VsZWN0bGluZQogCX0KQEAgLTcyNjcsOCArNzUwMSwxNyBAQAogICAgIGdsb2JhbCBpZ25vcmVzcGFjZQogICAgIGdsb2JhbCBsaW1pdGRpZmZzIHZmaWxlbGltaXQgY3VydmlldwogICAgIGdsb2JhbCBkaWZmZW5jb2RpbmcgdGFyZ2V0bGluZSBkaWZmbnBhcmVudHMKKyAgICBnbG9iYWwgZ2l0X3ZlcnNpb24KIAotICAgIHNldCBjbWQgW2RpZmZjbWQgJGlkcyAiLXAgLUMgLS1jYyAtLW5vLWNvbW1pdC1pZCAtVSRkaWZmY29udGV4dCJdCisgICAgc2V0IHRleHRjb252IHt9CisgICAgaWYge1twYWNrYWdlIHZjb21wYXJlICRnaXRfdmVyc2lvbiAiMS42LjEiXSA+PSAwfSB7CisJc2V0IHRleHRjb252ICItLXRleHRjb252IgorICAgIH0KKyAgICBzZXQgc3VibW9kdWxlIHt9CisgICAgaWYge1twYWNrYWdlIHZjb21wYXJlICRnaXRfdmVyc2lvbiAiMS42LjYiXSA+PSAwfSB7CisJc2V0IHN1Ym1vZHVsZSAiLS1zdWJtb2R1bGUiCisgICAgfQorICAgIHNldCBjbWQgW2RpZmZjbWQgJGlkcyAiLXAgJHRleHRjb252ICRzdWJtb2R1bGUgIC1DIC0tY2MgLS1uby1jb21taXQtaWQgLVUkZGlmZmNvbnRleHQiXQogICAgIGlmIHskaWdub3Jlc3BhY2V9IHsKIAlhcHBlbmQgY21kICIgLXciCiAgICAgfQpAQCAtNzI4OCw2ICs3NTMxLDM0IEBACiAgICAgZmlsZXJ1biAkYmRmIFtsaXN0IGdldGJsb2JkaWZmbGluZSAkYmRmICRkaWZmaWRzXQogfQogCitwcm9jIHNhdmVjbWl0cG9zIHt9IHsKKyAgICBnbG9iYWwgY3RleHQgY21pdG1vZGUKKworICAgIGlmIHskY21pdG1vZGUgZXEgInRyZWUifSB7CisJcmV0dXJuIHt9CisgICAgfQorICAgIHJldHVybiBbbGlzdCB0YXJnZXRfc2Nyb2xscG9zIFskY3RleHQgaW5kZXggQDAsMF1dCit9CisKK3Byb2Mgc2F2ZWN0ZXh0cG9zIHt9IHsKKyAgICBnbG9iYWwgY3RleHQKKworICAgIHJldHVybiBbbGlzdCB0YXJnZXRfc2Nyb2xscG9zIFskY3RleHQgaW5kZXggQDAsMF1dCit9CisKK3Byb2MgbWF5YmVfc2Nyb2xsX2N0ZXh0IHthdGVvZn0geworICAgIGdsb2JhbCBjdGV4dCB0YXJnZXRfc2Nyb2xscG9zCisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyB0YXJnZXRfc2Nyb2xscG9zXX0gcmV0dXJuCisgICAgaWYgeyEkYXRlb2Z9IHsKKwlzZXQgbmxpbmVzIFtleHByIHtbd2luZm8gaGVpZ2h0ICRjdGV4dF0KKwkJCSAgLyBbZm9udCBtZXRyaWNzIHRleHRmb250IC1saW5lc3BhY2VdfV0KKwlpZiB7WyRjdGV4dCBjb21wYXJlICIkdGFyZ2V0X3Njcm9sbHBvcyArICRubGluZXMgbGluZXMiIDw9IGVuZF19IHJldHVybgorICAgIH0KKyAgICAkY3RleHQgeXZpZXcgJHRhcmdldF9zY3JvbGxwb3MKKyAgICB1bnNldCB0YXJnZXRfc2Nyb2xscG9zCit9CisKIHByb2Mgc2V0aW5saXN0IHt2YXIgaSB2YWx9IHsKICAgICBnbG9iYWwgJHZhcgogCkBAIC03MzMzLDcgKzc2MDQsNyBAQAogICAgICRjdGV4dCBjb25mIC1zdGF0ZSBub3JtYWwKICAgICB3aGlsZSB7W2luY3IgbnJdIDw9IDEwMDAgJiYgW2dldHMgJGJkZiBsaW5lXSA+PSAwfSB7CiAJaWYgeyRpZHMgIT0gJGRpZmZpZHMgfHwgJGJkZiAhPSAkYmxvYmRpZmZmZCgkaWRzKX0gewotCSAgICBjbG9zZSAkYmRmCisJICAgIGNhdGNoIHtjbG9zZSAkYmRmfQogCSAgICByZXR1cm4gMAogCX0KIAlpZiB7IVtzdHJpbmcgY29tcGFyZSAtbGVuZ3RoIDUgImRpZmYgIiAkbGluZV19IHsKQEAgLTc0MDYsNiArNzY3NywyMyBAQAogCSAgICBzZXQgZGlmZm5wYXJlbnRzIFtleHByIHtbc3RyaW5nIGxlbmd0aCAkYXRzXSAtIDF9XQogCSAgICBzZXQgZGlmZmluaGRyIDAKIAorCX0gZWxzZWlmIHshW3N0cmluZyBjb21wYXJlIC1sZW5ndGggMTAgIlN1Ym1vZHVsZSAiICRsaW5lXX0geworCSAgICAjIHN0YXJ0IG9mIGEgbmV3IHN1Ym1vZHVsZQorCSAgICBpZiB7W3N0cmluZyBjb21wYXJlIFskY3RleHQgZ2V0ICJlbmQgLSA0YyIgZW5kXSAiXG4gXG5cbiJdfSB7CisJCSRjdGV4dCBpbnNlcnQgZW5kICJcbiI7ICAgICAjIEFkZCBuZXdsaW5lIGFmdGVyIGNvbW1pdCBtZXNzYWdlCisJICAgIH0KKwkgICAgc2V0IGN1cmRpZmZzdGFydCBbJGN0ZXh0IGluZGV4ICJlbmQgLSAxYyJdCisJICAgIGxhcHBlbmQgY3RleHRfZmlsZV9uYW1lcyAiIgorCSAgICBzZXQgZm5hbWUgW3N0cmluZyByYW5nZSAkbGluZSAxMCBbZXhwciBbc3RyaW5nIGxhc3QgIiAiICRsaW5lXSAtIDFdXQorCSAgICBsYXBwZW5kIGN0ZXh0X2ZpbGVfbGluZXMgJGZuYW1lCisJICAgIG1ha2VkaWZmaGRyICRmbmFtZSAkaWRzCisJICAgICRjdGV4dCBpbnNlcnQgZW5kICJcbiRsaW5lXG4iIGZpbGVzZXAKKwl9IGVsc2VpZiB7IVtzdHJpbmcgY29tcGFyZSAtbGVuZ3RoIDMgIiAgPiIgJGxpbmVdfSB7CisJICAgIHNldCBsaW5lIFtlbmNvZGluZyBjb252ZXJ0ZnJvbSAkZGlmZmVuY29kaW5nICRsaW5lXQorCSAgICAkY3RleHQgaW5zZXJ0IGVuZCAiJGxpbmVcbiIgZHJlc3VsdAorCX0gZWxzZWlmIHshW3N0cmluZyBjb21wYXJlIC1sZW5ndGggMyAiICA8IiAkbGluZV19IHsKKwkgICAgc2V0IGxpbmUgW2VuY29kaW5nIGNvbnZlcnRmcm9tICRkaWZmZW5jb2RpbmcgJGxpbmVdCisJICAgICRjdGV4dCBpbnNlcnQgZW5kICIkbGluZVxuIiBkMAogCX0gZWxzZWlmIHskZGlmZmluaGRyfSB7CiAJICAgIGlmIHshW3N0cmluZyBjb21wYXJlIC1sZW5ndGggMTIgInJlbmFtZSBmcm9tICIgJGxpbmVdfSB7CiAJCXNldCBmbmFtZSBbc3RyaW5nIHJhbmdlICRsaW5lIFtleHByIDYgKyBbc3RyaW5nIGZpcnN0ICIgZnJvbSAiICRsaW5lXSBdIGVuZF0KQEAgLTc0ODMsOSArNzc3MSwxMCBAQAogICAgIGlmIHtbaW5mbyBleGlzdHMgc2VlaGVyZV19IHsKIAltYXJrX2N0ZXh0X2xpbmUgW2xpbmRleCBbc3BsaXQgJHNlZWhlcmUgLl0gMF0KICAgICB9CisgICAgbWF5YmVfc2Nyb2xsX2N0ZXh0IFtlb2YgJGJkZl0KICAgICAkY3RleHQgY29uZiAtc3RhdGUgZGlzYWJsZWQKICAgICBpZiB7W2VvZiAkYmRmXX0gewotCWNsb3NlICRiZGYKKwljYXRjaCB7Y2xvc2UgJGJkZn0KIAlyZXR1cm4gMAogICAgIH0KICAgICByZXR1cm4gW2V4cHIgeyRuciA+PSAxMDAwPyAyOiAxfV0KQEAgLTc4NDIsNiArODEzMSwxMSBAQAogCQl9CiAJCXNldCBpZCBbbGluZGV4ICRtYXRjaGVzIDBdCiAJICAgIH0KKwl9IGVsc2UgeworCSAgICBpZiB7W2NhdGNoIHtzZXQgaWQgW2V4ZWMgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAkc2hhMXN0cmluZ119XX0geworCQllcnJvcl9wb3B1cCBbbWMgIlJldmlzaW9uICVzIGlzIG5vdCBrbm93biIgJHNoYTFzdHJpbmddCisJCXJldHVybgorCSAgICB9CiAJfQogICAgIH0KICAgICBpZiB7W2NvbW1pdGludmlldyAkaWQgJGN1cnZpZXddfSB7CkBAIC03ODUxLDcgKzgxNDUsNyBAQAogICAgIGlmIHtbcmVnZXhwIHteWzAtOWEtZkEtRl17NCx9JH0gJHNoYTFzdHJpbmddfSB7CiAJc2V0IG1zZyBbbWMgIlNIQTEgaWQgJXMgaXMgbm90IGtub3duIiAkc2hhMXN0cmluZ10KICAgICB9IGVsc2UgewotCXNldCBtc2cgW21jICJUYWcvSGVhZCAlcyBpcyBub3Qga25vd24iICRzaGExc3RyaW5nXQorCXNldCBtc2cgW21jICJSZXZpc2lvbiAlcyBpcyBub3QgaW4gdGhlIGN1cnJlbnQgdmlldyIgJHNoYTFzdHJpbmddCiAgICAgfQogICAgIGVycm9yX3BvcHVwICRtc2cKIH0KQEAgLTc5NzcsNyArODI3MSw3IEBACiAgICAgfQogCiAgICAgaWYgeyRpc25ld30gewotCWFkZHRvaGlzdG9yeSBbbGlzdCBsaW5lY2xpY2sgJHggJHkgJGlkIDBdCisJYWRkdG9oaXN0b3J5IFtsaXN0IGxpbmVjbGljayAkeCAkeSAkaWQgMF0gc2F2ZWN0ZXh0cG9zCiAgICAgfQogICAgICMgZmlsbCB0aGUgZGV0YWlscyBwYW5lIHdpdGggaW5mbyBhYm91dCB0aGlzIGxpbmUKICAgICAkY3RleHQgY29uZiAtc3RhdGUgbm9ybWFsCkBAIC04MDA4LDYgKzgzMDIsNyBAQAogCSAgICAkY3RleHQgaW5zZXJ0IGVuZCAiXG5cdFttYyAiRGF0ZSJdOlx0JGRhdGVcbiIKIAl9CiAgICAgfQorICAgIG1heWJlX3Njcm9sbF9jdGV4dCAxCiAgICAgJGN0ZXh0IGNvbmYgLXN0YXRlIGRpc2FibGVkCiAgICAgaW5pdF9mbGlzdCB7fQogfQpAQCAtODAyMSwxMCArODMxNiwxMCBAQAogICAgIH0KIH0KIAotcHJvYyBzZWxieWlkIHtpZH0geworcHJvYyBzZWxieWlkIHtpZCB7aXNuZXcgMX19IHsKICAgICBnbG9iYWwgY3VydmlldwogICAgIGlmIHtbY29tbWl0aW52aWV3ICRpZCAkY3Vydmlld119IHsKLQlzZWxlY3RsaW5lIFtyb3dvZmNvbW1pdCAkaWRdIDEKKwlzZWxlY3RsaW5lIFtyb3dvZmNvbW1pdCAkaWRdICRpc25ldwogICAgIH0KIH0KIApAQCAtODIwMSwzMyArODQ5Niw2MSBAQAogCQlhcHBlbmRzaG9ydGxpbmsgJGEgW21jICJDb21taXQgIl0gIiAgJGhlYWRhXG4iCiAJCWFwcGVuZHNob3J0bGluayAkYiBbbWMgIiBkaWZmZXJzIGZyb21cbiAgICAgICAiXSBcCiAJCSAgICAiICAkaGVhZGJcbiIKLQkJJGN0ZXh0IGluc2VydCBlbmQgW21jICItIHN0b3BwaW5nXG4iXQotCQlicmVhaworCQkkY3RleHQgaW5zZXJ0IGVuZCBbbWMgIkRpZmYgb2YgY29tbWl0czpcblxuIl0KKwkJJGN0ZXh0IGNvbmYgLXN0YXRlIGRpc2FibGVkCisJCXVwZGF0ZQorCQlkaWZmY29tbWl0cyAkYSAkYgorCQlyZXR1cm4KIAkgICAgfQogCX0KIAlpZiB7JHNraXBhfSB7Ci0JICAgIGlmIHtbbGxlbmd0aCAkY2hpbGRyZW4oJGN1cnZpZXcsJGEpXSAhPSAxfSB7CisJICAgIHNldCBraWRzIFtyZWFsX2NoaWxkcmVuICRjdXJ2aWV3LCRhXQorCSAgICBpZiB7W2xsZW5ndGggJGtpZHNdICE9IDF9IHsKIAkJJGN0ZXh0IGluc2VydCBlbmQgIlxuIgogCQlhcHBlbmRzaG9ydGxpbmsgJGEgW21jICJDb21taXQgIl0gXAotCQkgICAgW21jICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIgXAotCQkJIFtsbGVuZ3RoICRjaGlsZHJlbigkY3VydmlldywkYSldXQorCQkgICAgW21jICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIgW2xsZW5ndGggJGtpZHNdXQogCQlicmVhawogCSAgICB9Ci0JICAgIHNldCBhIFtsaW5kZXggJGNoaWxkcmVuKCRjdXJ2aWV3LCRhKSAwXQorCSAgICBzZXQgYSBbbGluZGV4ICRraWRzIDBdCiAJfQogCWlmIHskc2tpcGJ9IHsKLQkgICAgaWYge1tsbGVuZ3RoICRjaGlsZHJlbigkY3VydmlldywkYildICE9IDF9IHsKKwkgICAgc2V0IGtpZHMgW3JlYWxfY2hpbGRyZW4gJGN1cnZpZXcsJGJdCisJICAgIGlmIHtbbGxlbmd0aCAka2lkc10gIT0gMX0gewogCQlhcHBlbmRzaG9ydGxpbmsgJGIgW21jICJDb21taXQgIl0gXAotCQkgICAgW21jICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIgXAotCQkJIFtsbGVuZ3RoICRjaGlsZHJlbigkY3VydmlldywkYildXQorCQkgICAgW21jICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIgW2xsZW5ndGggJGtpZHNdXQogCQlicmVhawogCSAgICB9Ci0JICAgIHNldCBiIFtsaW5kZXggJGNoaWxkcmVuKCRjdXJ2aWV3LCRiKSAwXQorCSAgICBzZXQgYiBbbGluZGV4ICRraWRzIDBdCiAJfQogICAgIH0KICAgICAkY3RleHQgY29uZiAtc3RhdGUgZGlzYWJsZWQKIH0KIAorcHJvYyBkaWZmY29tbWl0cyB7YSBifSB7CisgICAgZ2xvYmFsIGRpZmZjb250ZXh0IGRpZmZpZHMgYmxvYmRpZmZmZCBkaWZmaW5oZHIKKworICAgIHNldCB0bXBkaXIgW2dpdGtuZXd0bXBkaXJdCisgICAgc2V0IGZuYSBbZmlsZSBqb2luICR0bXBkaXIgImNvbW1pdC1bc3RyaW5nIHJhbmdlICRhIDAgN10iXQorICAgIHNldCBmbmIgW2ZpbGUgam9pbiAkdG1wZGlyICJjb21taXQtW3N0cmluZyByYW5nZSAkYiAwIDddIl0KKyAgICBpZiB7W2NhdGNoIHsKKwlleGVjIGdpdCBkaWZmLXRyZWUgLXAgLS1wcmV0dHkgJGEgPiRmbmEKKwlleGVjIGdpdCBkaWZmLXRyZWUgLXAgLS1wcmV0dHkgJGIgPiRmbmIKKyAgICB9IGVycl19IHsKKwllcnJvcl9wb3B1cCBbbWMgIkVycm9yIHdyaXRpbmcgY29tbWl0IHRvIGZpbGU6ICVzIiAkZXJyXQorCXJldHVybgorICAgIH0KKyAgICBpZiB7W2NhdGNoIHsKKwlzZXQgZmQgW29wZW4gInwgZGlmZiAtVSRkaWZmY29udGV4dCAkZm5hICRmbmIiIHJdCisgICAgfSBlcnJdfSB7CisJZXJyb3JfcG9wdXAgW21jICJFcnJvciBkaWZmaW5nIGNvbW1pdHM6ICVzIiAkZXJyXQorCXJldHVybgorICAgIH0KKyAgICBzZXQgZGlmZmlkcyBbbGlzdCBjb21taXRzICRhICRiXQorICAgIHNldCBibG9iZGlmZmZkKCRkaWZmaWRzKSAkZmQKKyAgICBzZXQgZGlmZmluaGRyIDAKKyAgICBmaWxlcnVuICRmZCBbbGlzdCBnZXRibG9iZGlmZmxpbmUgJGZkICRkaWZmaWRzXQorfQorCiBwcm9jIGRpZmZ2c3NlbCB7ZGlybn0gewogICAgIGdsb2JhbCByb3dtZW51aWQgc2VsZWN0ZWRsaW5lCiAKQEAgLTgyMzksNyArODU2Miw3IEBACiAJc2V0IG9sZGlkICRyb3dtZW51aWQKIAlzZXQgbmV3aWQgW2NvbW1pdG9ucm93ICRzZWxlY3RlZGxpbmVdCiAgICAgfQotICAgIGFkZHRvaGlzdG9yeSBbbGlzdCBkb3NlbGRpZmYgJG9sZGlkICRuZXdpZF0KKyAgICBhZGR0b2hpc3RvcnkgW2xpc3QgZG9zZWxkaWZmICRvbGRpZCAkbmV3aWRdIHNhdmVjdGV4dHBvcwogICAgIGRvc2VsZGlmZiAkb2xkaWQgJG5ld2lkCiB9CiAKQEAgLTgyNjcsNyArODU5MCw3IEBACiB9CiAKIHByb2MgbWtwYXRjaCB7fSB7Ci0gICAgZ2xvYmFsIHJvd21lbnVpZCBjdXJyZW50aWQgY29tbWl0aW5mbyBwYXRjaHRvcCBwYXRjaG51bQorICAgIGdsb2JhbCByb3dtZW51aWQgY3VycmVudGlkIGNvbW1pdGluZm8gcGF0Y2h0b3AgcGF0Y2hudW0gTlMKIAogICAgIGlmIHshW2luZm8gZXhpc3RzIGN1cnJlbnRpZF19IHJldHVybgogICAgIHNldCBvbGRpZCAkY3VycmVudGlkCkBAIC04Mjc3LDM4ICs4NjAwLDM4IEBACiAgICAgc2V0IHRvcCAucGF0Y2gKICAgICBzZXQgcGF0Y2h0b3AgJHRvcAogICAgIGNhdGNoIHtkZXN0cm95ICR0b3B9Ci0gICAgdG9wbGV2ZWwgJHRvcAorICAgIHR0a190b3BsZXZlbCAkdG9wCiAgICAgbWFrZV90cmFuc2llbnQgJHRvcCAuCi0gICAgbGFiZWwgJHRvcC50aXRsZSAtdGV4dCBbbWMgIkdlbmVyYXRlIHBhdGNoIl0KKyAgICAke05TfTo6bGFiZWwgJHRvcC50aXRsZSAtdGV4dCBbbWMgIkdlbmVyYXRlIHBhdGNoIl0KICAgICBncmlkICR0b3AudGl0bGUgLSAtcGFkeSAxMAotICAgIGxhYmVsICR0b3AuZnJvbSAtdGV4dCBbbWMgIkZyb206Il0KLSAgICBlbnRyeSAkdG9wLmZyb21zaGExIC13aWR0aCA0MCAtcmVsaWVmIGZsYXQKKyAgICAke05TfTo6bGFiZWwgJHRvcC5mcm9tIC10ZXh0IFttYyAiRnJvbToiXQorICAgICR7TlN9OjplbnRyeSAkdG9wLmZyb21zaGExIC13aWR0aCA0MAogICAgICR0b3AuZnJvbXNoYTEgaW5zZXJ0IDAgJG9sZGlkCiAgICAgJHRvcC5mcm9tc2hhMSBjb25mIC1zdGF0ZSByZWFkb25seQogICAgIGdyaWQgJHRvcC5mcm9tICR0b3AuZnJvbXNoYTEgLXN0aWNreSB3Ci0gICAgZW50cnkgJHRvcC5mcm9taGVhZCAtd2lkdGggNjAgLXJlbGllZiBmbGF0CisgICAgJHtOU306OmVudHJ5ICR0b3AuZnJvbWhlYWQgLXdpZHRoIDYwCiAgICAgJHRvcC5mcm9taGVhZCBpbnNlcnQgMCAkb2xkaGVhZAogICAgICR0b3AuZnJvbWhlYWQgY29uZiAtc3RhdGUgcmVhZG9ubHkKICAgICBncmlkIHggJHRvcC5mcm9taGVhZCAtc3RpY2t5IHcKLSAgICBsYWJlbCAkdG9wLnRvIC10ZXh0IFttYyAiVG86Il0KLSAgICBlbnRyeSAkdG9wLnRvc2hhMSAtd2lkdGggNDAgLXJlbGllZiBmbGF0CisgICAgJHtOU306OmxhYmVsICR0b3AudG8gLXRleHQgW21jICJUbzoiXQorICAgICR7TlN9OjplbnRyeSAkdG9wLnRvc2hhMSAtd2lkdGggNDAKICAgICAkdG9wLnRvc2hhMSBpbnNlcnQgMCAkbmV3aWQKICAgICAkdG9wLnRvc2hhMSBjb25mIC1zdGF0ZSByZWFkb25seQogICAgIGdyaWQgJHRvcC50byAkdG9wLnRvc2hhMSAtc3RpY2t5IHcKLSAgICBlbnRyeSAkdG9wLnRvaGVhZCAtd2lkdGggNjAgLXJlbGllZiBmbGF0CisgICAgJHtOU306OmVudHJ5ICR0b3AudG9oZWFkIC13aWR0aCA2MAogICAgICR0b3AudG9oZWFkIGluc2VydCAwICRuZXdoZWFkCiAgICAgJHRvcC50b2hlYWQgY29uZiAtc3RhdGUgcmVhZG9ubHkKICAgICBncmlkIHggJHRvcC50b2hlYWQgLXN0aWNreSB3Ci0gICAgYnV0dG9uICR0b3AucmV2IC10ZXh0IFttYyAiUmV2ZXJzZSJdIC1jb21tYW5kIG1rcGF0Y2hyZXYgLXBhZHggNQotICAgIGdyaWQgJHRvcC5yZXYgeCAtcGFkeSAxMAotICAgIGxhYmVsICR0b3AuZmxhYiAtdGV4dCBbbWMgIk91dHB1dCBmaWxlOiJdCi0gICAgZW50cnkgJHRvcC5mbmFtZSAtd2lkdGggNjAKKyAgICAke05TfTo6YnV0dG9uICR0b3AucmV2IC10ZXh0IFttYyAiUmV2ZXJzZSJdIC1jb21tYW5kIG1rcGF0Y2hyZXYKKyAgICBncmlkICR0b3AucmV2IHggLXBhZHkgMTAgLXBhZHggNQorICAgICR7TlN9OjpsYWJlbCAkdG9wLmZsYWIgLXRleHQgW21jICJPdXRwdXQgZmlsZToiXQorICAgICR7TlN9OjplbnRyeSAkdG9wLmZuYW1lIC13aWR0aCA2MAogICAgICR0b3AuZm5hbWUgaW5zZXJ0IDAgW2ZpbGUgbm9ybWFsaXplICJwYXRjaCRwYXRjaG51bS5wYXRjaCJdCiAgICAgaW5jciBwYXRjaG51bQogICAgIGdyaWQgJHRvcC5mbGFiICR0b3AuZm5hbWUgLXN0aWNreSB3Ci0gICAgZnJhbWUgJHRvcC5idXRzCi0gICAgYnV0dG9uICR0b3AuYnV0cy5nZW4gLXRleHQgW21jICJHZW5lcmF0ZSJdIC1jb21tYW5kIG1rcGF0Y2hnbwotICAgIGJ1dHRvbiAkdG9wLmJ1dHMuY2FuIC10ZXh0IFttYyAiQ2FuY2VsIl0gLWNvbW1hbmQgbWtwYXRjaGNhbgorICAgICR7TlN9OjpmcmFtZSAkdG9wLmJ1dHMKKyAgICAke05TfTo6YnV0dG9uICR0b3AuYnV0cy5nZW4gLXRleHQgW21jICJHZW5lcmF0ZSJdIC1jb21tYW5kIG1rcGF0Y2hnbworICAgICR7TlN9OjpidXR0b24gJHRvcC5idXRzLmNhbiAtdGV4dCBbbWMgIkNhbmNlbCJdIC1jb21tYW5kIG1rcGF0Y2hjYW4KICAgICBiaW5kICR0b3AgPEtleS1SZXR1cm4+IG1rcGF0Y2hnbwogICAgIGJpbmQgJHRvcCA8S2V5LUVzY2FwZT4gbWtwYXRjaGNhbgogICAgIGdyaWQgJHRvcC5idXRzLmdlbiAkdG9wLmJ1dHMuY2FuCkBAIC04MzU5LDMwICs4NjgyLDM1IEBACiB9CiAKIHByb2MgbWt0YWcge30gewotICAgIGdsb2JhbCByb3dtZW51aWQgbWt0YWd0b3AgY29tbWl0aW5mbworICAgIGdsb2JhbCByb3dtZW51aWQgbWt0YWd0b3AgY29tbWl0aW5mbyBOUwogCiAgICAgc2V0IHRvcCAubWFrZXRhZwogICAgIHNldCBta3RhZ3RvcCAkdG9wCiAgICAgY2F0Y2gge2Rlc3Ryb3kgJHRvcH0KLSAgICB0b3BsZXZlbCAkdG9wCisgICAgdHRrX3RvcGxldmVsICR0b3AKICAgICBtYWtlX3RyYW5zaWVudCAkdG9wIC4KLSAgICBsYWJlbCAkdG9wLnRpdGxlIC10ZXh0IFttYyAiQ3JlYXRlIHRhZyJdCisgICAgJHtOU306OmxhYmVsICR0b3AudGl0bGUgLXRleHQgW21jICJDcmVhdGUgdGFnIl0KICAgICBncmlkICR0b3AudGl0bGUgLSAtcGFkeSAxMAotICAgIGxhYmVsICR0b3AuaWQgLXRleHQgW21jICJJRDoiXQotICAgIGVudHJ5ICR0b3Auc2hhMSAtd2lkdGggNDAgLXJlbGllZiBmbGF0CisgICAgJHtOU306OmxhYmVsICR0b3AuaWQgLXRleHQgW21jICJJRDoiXQorICAgICR7TlN9OjplbnRyeSAkdG9wLnNoYTEgLXdpZHRoIDQwCiAgICAgJHRvcC5zaGExIGluc2VydCAwICRyb3dtZW51aWQKICAgICAkdG9wLnNoYTEgY29uZiAtc3RhdGUgcmVhZG9ubHkKICAgICBncmlkICR0b3AuaWQgJHRvcC5zaGExIC1zdGlja3kgdwotICAgIGVudHJ5ICR0b3AuaGVhZCAtd2lkdGggNjAgLXJlbGllZiBmbGF0CisgICAgJHtOU306OmVudHJ5ICR0b3AuaGVhZCAtd2lkdGggNjAKICAgICAkdG9wLmhlYWQgaW5zZXJ0IDAgW2xpbmRleCAkY29tbWl0aW5mbygkcm93bWVudWlkKSAwXQogICAgICR0b3AuaGVhZCBjb25mIC1zdGF0ZSByZWFkb25seQogICAgIGdyaWQgeCAkdG9wLmhlYWQgLXN0aWNreSB3Ci0gICAgbGFiZWwgJHRvcC50bGFiIC10ZXh0IFttYyAiVGFnIG5hbWU6Il0KLSAgICBlbnRyeSAkdG9wLnRhZyAtd2lkdGggNjAKKyAgICAke05TfTo6bGFiZWwgJHRvcC50bGFiIC10ZXh0IFttYyAiVGFnIG5hbWU6Il0KKyAgICAke05TfTo6ZW50cnkgJHRvcC50YWcgLXdpZHRoIDYwCiAgICAgZ3JpZCAkdG9wLnRsYWIgJHRvcC50YWcgLXN0aWNreSB3Ci0gICAgZnJhbWUgJHRvcC5idXRzCi0gICAgYnV0dG9uICR0b3AuYnV0cy5nZW4gLXRleHQgW21jICJDcmVhdGUiXSAtY29tbWFuZCBta3RhZ2dvCi0gICAgYnV0dG9uICR0b3AuYnV0cy5jYW4gLXRleHQgW21jICJDYW5jZWwiXSAtY29tbWFuZCBta3RhZ2NhbgorICAgICR7TlN9OjpsYWJlbCAkdG9wLm9wIC10ZXh0IFttYyAiVGFnIG1lc3NhZ2UgaXMgb3B0aW9uYWwiXQorICAgIGdyaWQgJHRvcC5vcCAtY29sdW1uc3BhbiAyIC1zdGlja3kgd2UKKyAgICAke05TfTo6bGFiZWwgJHRvcC5tbGFiIC10ZXh0IFttYyAiVGFnIG1lc3NhZ2U6Il0KKyAgICAke05TfTo6ZW50cnkgJHRvcC5tc2cgLXdpZHRoIDYwCisgICAgZ3JpZCAkdG9wLm1sYWIgJHRvcC5tc2cgLXN0aWNreSB3CisgICAgJHtOU306OmZyYW1lICR0b3AuYnV0cworICAgICR7TlN9OjpidXR0b24gJHRvcC5idXRzLmdlbiAtdGV4dCBbbWMgIkNyZWF0ZSJdIC1jb21tYW5kIG1rdGFnZ28KKyAgICAke05TfTo6YnV0dG9uICR0b3AuYnV0cy5jYW4gLXRleHQgW21jICJDYW5jZWwiXSAtY29tbWFuZCBta3RhZ2NhbgogICAgIGJpbmQgJHRvcCA8S2V5LVJldHVybj4gbWt0YWdnbwogICAgIGJpbmQgJHRvcCA8S2V5LUVzY2FwZT4gbWt0YWdjYW4KICAgICBncmlkICR0b3AuYnV0cy5nZW4gJHRvcC5idXRzLmNhbgpAQCAtODM5Nyw2ICs4NzI1LDcgQEAKIAogICAgIHNldCBpZCBbJG1rdGFndG9wLnNoYTEgZ2V0XQogICAgIHNldCB0YWcgWyRta3RhZ3RvcC50YWcgZ2V0XQorICAgIHNldCBtc2cgWyRta3RhZ3RvcC5tc2cgZ2V0XQogICAgIGlmIHskdGFnID09IHt9fSB7CiAJZXJyb3JfcG9wdXAgW21jICJObyB0YWcgbmFtZSBzcGVjaWZpZWQiXSAkbWt0YWd0b3AKIAlyZXR1cm4gMApAQCAtODQwNiw3ICs4NzM1LDExIEBACiAJcmV0dXJuIDAKICAgICB9CiAgICAgaWYge1tjYXRjaCB7Ci0JZXhlYyBnaXQgdGFnICR0YWcgJGlkCisJaWYgeyRtc2cgIT0ge319IHsKKwkgICAgZXhlYyBnaXQgdGFnIC1hIC1tICRtc2cgJHRhZyAkaWQKKwl9IGVsc2UgeworCSAgICBleGVjIGdpdCB0YWcgJHRhZyAkaWQKKwl9CiAgICAgfSBlcnJdfSB7CiAJZXJyb3JfcG9wdXAgIlttYyAiRXJyb3IgY3JlYXRpbmcgdGFnOiJdICRlcnIiICRta3RhZ3RvcAogCXJldHVybiAwCkBAIC04NDY1LDM0ICs4Nzk4LDM0IEBACiB9CiAKIHByb2Mgd3JpdGVjb21taXQge30gewotICAgIGdsb2JhbCByb3dtZW51aWQgd3Jjb210b3AgY29tbWl0aW5mbyB3cmNvbWNtZAorICAgIGdsb2JhbCByb3dtZW51aWQgd3Jjb210b3AgY29tbWl0aW5mbyB3cmNvbWNtZCBOUwogCiAgICAgc2V0IHRvcCAud3JpdGVjb21taXQKICAgICBzZXQgd3Jjb210b3AgJHRvcAogICAgIGNhdGNoIHtkZXN0cm95ICR0b3B9Ci0gICAgdG9wbGV2ZWwgJHRvcAorICAgIHR0a190b3BsZXZlbCAkdG9wCiAgICAgbWFrZV90cmFuc2llbnQgJHRvcCAuCi0gICAgbGFiZWwgJHRvcC50aXRsZSAtdGV4dCBbbWMgIldyaXRlIGNvbW1pdCB0byBmaWxlIl0KKyAgICAke05TfTo6bGFiZWwgJHRvcC50aXRsZSAtdGV4dCBbbWMgIldyaXRlIGNvbW1pdCB0byBmaWxlIl0KICAgICBncmlkICR0b3AudGl0bGUgLSAtcGFkeSAxMAotICAgIGxhYmVsICR0b3AuaWQgLXRleHQgW21jICJJRDoiXQotICAgIGVudHJ5ICR0b3Auc2hhMSAtd2lkdGggNDAgLXJlbGllZiBmbGF0CisgICAgJHtOU306OmxhYmVsICR0b3AuaWQgLXRleHQgW21jICJJRDoiXQorICAgICR7TlN9OjplbnRyeSAkdG9wLnNoYTEgLXdpZHRoIDQwCiAgICAgJHRvcC5zaGExIGluc2VydCAwICRyb3dtZW51aWQKICAgICAkdG9wLnNoYTEgY29uZiAtc3RhdGUgcmVhZG9ubHkKICAgICBncmlkICR0b3AuaWQgJHRvcC5zaGExIC1zdGlja3kgdwotICAgIGVudHJ5ICR0b3AuaGVhZCAtd2lkdGggNjAgLXJlbGllZiBmbGF0CisgICAgJHtOU306OmVudHJ5ICR0b3AuaGVhZCAtd2lkdGggNjAKICAgICAkdG9wLmhlYWQgaW5zZXJ0IDAgW2xpbmRleCAkY29tbWl0aW5mbygkcm93bWVudWlkKSAwXQogICAgICR0b3AuaGVhZCBjb25mIC1zdGF0ZSByZWFkb25seQogICAgIGdyaWQgeCAkdG9wLmhlYWQgLXN0aWNreSB3Ci0gICAgbGFiZWwgJHRvcC5jbGFiIC10ZXh0IFttYyAiQ29tbWFuZDoiXQotICAgIGVudHJ5ICR0b3AuY21kIC13aWR0aCA2MCAtdGV4dHZhcmlhYmxlIHdyY29tY21kCisgICAgJHtOU306OmxhYmVsICR0b3AuY2xhYiAtdGV4dCBbbWMgIkNvbW1hbmQ6Il0KKyAgICAke05TfTo6ZW50cnkgJHRvcC5jbWQgLXdpZHRoIDYwIC10ZXh0dmFyaWFibGUgd3Jjb21jbWQKICAgICBncmlkICR0b3AuY2xhYiAkdG9wLmNtZCAtc3RpY2t5IHcgLXBhZHkgMTAKLSAgICBsYWJlbCAkdG9wLmZsYWIgLXRleHQgW21jICJPdXRwdXQgZmlsZToiXQotICAgIGVudHJ5ICR0b3AuZm5hbWUgLXdpZHRoIDYwCisgICAgJHtOU306OmxhYmVsICR0b3AuZmxhYiAtdGV4dCBbbWMgIk91dHB1dCBmaWxlOiJdCisgICAgJHtOU306OmVudHJ5ICR0b3AuZm5hbWUgLXdpZHRoIDYwCiAgICAgJHRvcC5mbmFtZSBpbnNlcnQgMCBbZmlsZSBub3JtYWxpemUgImNvbW1pdC1bc3RyaW5nIHJhbmdlICRyb3dtZW51aWQgMCA2XSJdCiAgICAgZ3JpZCAkdG9wLmZsYWIgJHRvcC5mbmFtZSAtc3RpY2t5IHcKLSAgICBmcmFtZSAkdG9wLmJ1dHMKLSAgICBidXR0b24gJHRvcC5idXRzLmdlbiAtdGV4dCBbbWMgIldyaXRlIl0gLWNvbW1hbmQgd3Jjb21nbwotICAgIGJ1dHRvbiAkdG9wLmJ1dHMuY2FuIC10ZXh0IFttYyAiQ2FuY2VsIl0gLWNvbW1hbmQgd3Jjb21jYW4KKyAgICAke05TfTo6ZnJhbWUgJHRvcC5idXRzCisgICAgJHtOU306OmJ1dHRvbiAkdG9wLmJ1dHMuZ2VuIC10ZXh0IFttYyAiV3JpdGUiXSAtY29tbWFuZCB3cmNvbWdvCisgICAgJHtOU306OmJ1dHRvbiAkdG9wLmJ1dHMuY2FuIC10ZXh0IFttYyAiQ2FuY2VsIl0gLWNvbW1hbmQgd3Jjb21jYW4KICAgICBiaW5kICR0b3AgPEtleS1SZXR1cm4+IHdyY29tZ28KICAgICBiaW5kICR0b3AgPEtleS1Fc2NhcGU+IHdyY29tY2FuCiAgICAgZ3JpZCAkdG9wLmJ1dHMuZ2VuICR0b3AuYnV0cy5jYW4KQEAgLTg1MjMsMjUgKzg4NTYsMjUgQEAKIH0KIAogcHJvYyBta2JyYW5jaCB7fSB7Ci0gICAgZ2xvYmFsIHJvd21lbnVpZCBta2JydG9wCisgICAgZ2xvYmFsIHJvd21lbnVpZCBta2JydG9wIE5TCiAKICAgICBzZXQgdG9wIC5tYWtlYnJhbmNoCiAgICAgY2F0Y2gge2Rlc3Ryb3kgJHRvcH0KLSAgICB0b3BsZXZlbCAkdG9wCisgICAgdHRrX3RvcGxldmVsICR0b3AKICAgICBtYWtlX3RyYW5zaWVudCAkdG9wIC4KLSAgICBsYWJlbCAkdG9wLnRpdGxlIC10ZXh0IFttYyAiQ3JlYXRlIG5ldyBicmFuY2giXQorICAgICR7TlN9OjpsYWJlbCAkdG9wLnRpdGxlIC10ZXh0IFttYyAiQ3JlYXRlIG5ldyBicmFuY2giXQogICAgIGdyaWQgJHRvcC50aXRsZSAtIC1wYWR5IDEwCi0gICAgbGFiZWwgJHRvcC5pZCAtdGV4dCBbbWMgIklEOiJdCi0gICAgZW50cnkgJHRvcC5zaGExIC13aWR0aCA0MCAtcmVsaWVmIGZsYXQKKyAgICAke05TfTo6bGFiZWwgJHRvcC5pZCAtdGV4dCBbbWMgIklEOiJdCisgICAgJHtOU306OmVudHJ5ICR0b3Auc2hhMSAtd2lkdGggNDAKICAgICAkdG9wLnNoYTEgaW5zZXJ0IDAgJHJvd21lbnVpZAogICAgICR0b3Auc2hhMSBjb25mIC1zdGF0ZSByZWFkb25seQogICAgIGdyaWQgJHRvcC5pZCAkdG9wLnNoYTEgLXN0aWNreSB3Ci0gICAgbGFiZWwgJHRvcC5ubGFiIC10ZXh0IFttYyAiTmFtZToiXQotICAgIGVudHJ5ICR0b3AubmFtZSAtd2lkdGggNDAKKyAgICAke05TfTo6bGFiZWwgJHRvcC5ubGFiIC10ZXh0IFttYyAiTmFtZToiXQorICAgICR7TlN9OjplbnRyeSAkdG9wLm5hbWUgLXdpZHRoIDQwCiAgICAgZ3JpZCAkdG9wLm5sYWIgJHRvcC5uYW1lIC1zdGlja3kgdwotICAgIGZyYW1lICR0b3AuYnV0cwotICAgIGJ1dHRvbiAkdG9wLmJ1dHMuZ28gLXRleHQgW21jICJDcmVhdGUiXSAtY29tbWFuZCBbbGlzdCBta2JyZ28gJHRvcF0KLSAgICBidXR0b24gJHRvcC5idXRzLmNhbiAtdGV4dCBbbWMgIkNhbmNlbCJdIC1jb21tYW5kICJjYXRjaCB7ZGVzdHJveSAkdG9wfSIKKyAgICAke05TfTo6ZnJhbWUgJHRvcC5idXRzCisgICAgJHtOU306OmJ1dHRvbiAkdG9wLmJ1dHMuZ28gLXRleHQgW21jICJDcmVhdGUiXSAtY29tbWFuZCBbbGlzdCBta2JyZ28gJHRvcF0KKyAgICAke05TfTo6YnV0dG9uICR0b3AuYnV0cy5jYW4gLXRleHQgW21jICJDYW5jZWwiXSAtY29tbWFuZCAiY2F0Y2gge2Rlc3Ryb3kgJHRvcH0iCiAgICAgYmluZCAkdG9wIDxLZXktUmV0dXJuPiBbbGlzdCBta2JyZ28gJHRvcF0KICAgICBiaW5kICR0b3AgPEtleS1Fc2NhcGU+ICJjYXRjaCB7ZGVzdHJveSAkdG9wfSIKICAgICBncmlkICR0b3AuYnV0cy5nbyAkdG9wLmJ1dHMuY2FuCkBAIC04Njg2LDM0ICs5MDE5LDMxIEBACiB9CiAKIHByb2MgcmVzZXRoZWFkIHt9IHsKLSAgICBnbG9iYWwgbWFpbmhlYWQgcm93bWVudWlkIGNvbmZpcm1fb2sgcmVzZXR0eXBlCisgICAgZ2xvYmFsIG1haW5oZWFkIHJvd21lbnVpZCBjb25maXJtX29rIHJlc2V0dHlwZSBOUwogCiAgICAgc2V0IGNvbmZpcm1fb2sgMAogICAgIHNldCB3ICIuY29uZmlybXJlc2V0IgotICAgIHRvcGxldmVsICR3CisgICAgdHRrX3RvcGxldmVsICR3CiAgICAgbWFrZV90cmFuc2llbnQgJHcgLgogICAgIHdtIHRpdGxlICR3IFttYyAiQ29uZmlybSByZXNldCJdCi0gICAgbWVzc2FnZSAkdy5tIC10ZXh0IFwKLQlbbWMgIlJlc2V0IGJyYW5jaCAlcyB0byAlcz8iICRtYWluaGVhZCBbc3RyaW5nIHJhbmdlICRyb3dtZW51aWQgMCA3XV0gXAotCS1qdXN0aWZ5IGNlbnRlciAtYXNwZWN0IDEwMDAKKyAgICAke05TfTo6bGFiZWwgJHcubSAtdGV4dCBcCisJW21jICJSZXNldCBicmFuY2ggJXMgdG8gJXM/IiAkbWFpbmhlYWQgW3N0cmluZyByYW5nZSAkcm93bWVudWlkIDAgN11dCiAgICAgcGFjayAkdy5tIC1zaWRlIHRvcCAtZmlsbCB4IC1wYWR4IDIwIC1wYWR5IDIwCi0gICAgZnJhbWUgJHcuZiAtcmVsaWVmIHN1bmtlbiAtYm9yZGVyIDIKLSAgICBtZXNzYWdlICR3LmYucnQgLXRleHQgW21jICJSZXNldCB0eXBlOiJdIC1hc3BlY3QgMTAwMAotICAgIGdyaWQgJHcuZi5ydCAtc3RpY2t5IHcKKyAgICAke05TfTo6bGFiZWxmcmFtZSAkdy5mIC10ZXh0IFttYyAiUmVzZXQgdHlwZToiXQogICAgIHNldCByZXNldHR5cGUgbWl4ZWQKLSAgICByYWRpb2J1dHRvbiAkdy5mLnNvZnQgLXZhbHVlIHNvZnQgLXZhcmlhYmxlIHJlc2V0dHlwZSAtanVzdGlmeSBsZWZ0IFwKKyAgICAke05TfTo6cmFkaW9idXR0b24gJHcuZi5zb2Z0IC12YWx1ZSBzb2Z0IC12YXJpYWJsZSByZXNldHR5cGUgXAogCS10ZXh0IFttYyAiU29mdDogTGVhdmUgd29ya2luZyB0cmVlIGFuZCBpbmRleCB1bnRvdWNoZWQiXQogICAgIGdyaWQgJHcuZi5zb2Z0IC1zdGlja3kgdwotICAgIHJhZGlvYnV0dG9uICR3LmYubWl4ZWQgLXZhbHVlIG1peGVkIC12YXJpYWJsZSByZXNldHR5cGUgLWp1c3RpZnkgbGVmdCBcCisgICAgJHtOU306OnJhZGlvYnV0dG9uICR3LmYubWl4ZWQgLXZhbHVlIG1peGVkIC12YXJpYWJsZSByZXNldHR5cGUgXAogCS10ZXh0IFttYyAiTWl4ZWQ6IExlYXZlIHdvcmtpbmcgdHJlZSB1bnRvdWNoZWQsIHJlc2V0IGluZGV4Il0KICAgICBncmlkICR3LmYubWl4ZWQgLXN0aWNreSB3Ci0gICAgcmFkaW9idXR0b24gJHcuZi5oYXJkIC12YWx1ZSBoYXJkIC12YXJpYWJsZSByZXNldHR5cGUgLWp1c3RpZnkgbGVmdCBcCisgICAgJHtOU306OnJhZGlvYnV0dG9uICR3LmYuaGFyZCAtdmFsdWUgaGFyZCAtdmFyaWFibGUgcmVzZXR0eXBlIFwKIAktdGV4dCBbbWMgIkhhcmQ6IFJlc2V0IHdvcmtpbmcgdHJlZSBhbmQgaW5kZXhcbihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSJdCiAgICAgZ3JpZCAkdy5mLmhhcmQgLXN0aWNreSB3Ci0gICAgcGFjayAkdy5mIC1zaWRlIHRvcCAtZmlsbCB4Ci0gICAgYnV0dG9uICR3Lm9rIC10ZXh0IFttYyBPS10gLWNvbW1hbmQgInNldCBjb25maXJtX29rIDE7IGRlc3Ryb3kgJHciCisgICAgcGFjayAkdy5mIC1zaWRlIHRvcCAtZmlsbCB4IC1wYWR4IDQKKyAgICAke05TfTo6YnV0dG9uICR3Lm9rIC10ZXh0IFttYyBPS10gLWNvbW1hbmQgInNldCBjb25maXJtX29rIDE7IGRlc3Ryb3kgJHciCiAgICAgcGFjayAkdy5vayAtc2lkZSBsZWZ0IC1maWxsIHggLXBhZHggMjAgLXBhZHkgMjAKLSAgICBidXR0b24gJHcuY2FuY2VsIC10ZXh0IFttYyBDYW5jZWxdIC1jb21tYW5kICJkZXN0cm95ICR3IgorICAgICR7TlN9OjpidXR0b24gJHcuY2FuY2VsIC10ZXh0IFttYyBDYW5jZWxdIC1jb21tYW5kICJkZXN0cm95ICR3IgogICAgIGJpbmQgJHcgPEtleS1Fc2NhcGU+IFtsaXN0IGRlc3Ryb3kgJHddCiAgICAgcGFjayAkdy5jYW5jZWwgLXNpZGUgcmlnaHQgLWZpbGwgeCAtcGFkeCAyMCAtcGFkeSAyMAogICAgIGJpbmQgJHcgPFZpc2liaWxpdHk+ICJncmFiICR3OyBmb2N1cyAkdyIKQEAgLTg3NjksNiArOTA5OSw5IEBACiAgICAgc2V0IGhlYWRtZW51aWQgJGlkCiAgICAgc2V0IGhlYWRtZW51aGVhZCAkaGVhZAogICAgIHNldCBzdGF0ZSBub3JtYWwKKyAgICBpZiB7W3N0cmluZyBtYXRjaCAicmVtb3Rlcy8qIiAkaGVhZF19IHsKKwlzZXQgc3RhdGUgZGlzYWJsZWQKKyAgICB9CiAgICAgaWYgeyRoZWFkIGVxICRtYWluaGVhZH0gewogCXNldCBzdGF0ZSBkaXNhYmxlZAogICAgIH0KQEAgLTg4NjEsNyArOTE5NCw3IEBACiAKICMgRGlzcGxheSBhIGxpc3Qgb2YgdGFncyBhbmQgaGVhZHMKIHByb2Mgc2hvd3JlZnMge30gewotICAgIGdsb2JhbCBzaG93cmVmc3RvcCBiZ2NvbG9yIGZnY29sb3Igc2VsZWN0Ymdjb2xvcgorICAgIGdsb2JhbCBzaG93cmVmc3RvcCBiZ2NvbG9yIGZnY29sb3Igc2VsZWN0Ymdjb2xvciBOUwogICAgIGdsb2JhbCBiZ2xpc3QgZmdsaXN0IHJlZmxpc3RmaWx0ZXIgcmVmbGlzdCBtYWluY3Vyc29yCiAKICAgICBzZXQgdG9wIC5zaG93cmVmcwpAQCAtODg3MSw3ICs5MjA0LDcgQEAKIAlyZWZpbGxfcmVmbGlzdAogCXJldHVybgogICAgIH0KLSAgICB0b3BsZXZlbCAkdG9wCisgICAgdHRrX3RvcGxldmVsICR0b3AKICAgICB3bSB0aXRsZSAkdG9wIFttYyAiVGFncyBhbmQgaGVhZHM6ICVzIiBbZmlsZSB0YWlsIFtwd2RdXV0KICAgICBtYWtlX3RyYW5zaWVudCAkdG9wIC4KICAgICB0ZXh0ICR0b3AubGlzdCAtYmFja2dyb3VuZCAkYmdjb2xvciAtZm9yZWdyb3VuZCAkZmdjb2xvciBcCkBAIC04ODgyLDE5ICs5MjE1LDE5IEBACiAgICAgJHRvcC5saXN0IHRhZyBjb25maWd1cmUgaGlnaGxpZ2h0IC1iYWNrZ3JvdW5kICRzZWxlY3RiZ2NvbG9yCiAgICAgbGFwcGVuZCBiZ2xpc3QgJHRvcC5saXN0CiAgICAgbGFwcGVuZCBmZ2xpc3QgJHRvcC5saXN0Ci0gICAgc2Nyb2xsYmFyICR0b3AueXNiIC1jb21tYW5kICIkdG9wLmxpc3QgeXZpZXciIC1vcmllbnQgdmVydGljYWwKLSAgICBzY3JvbGxiYXIgJHRvcC54c2IgLWNvbW1hbmQgIiR0b3AubGlzdCB4dmlldyIgLW9yaWVudCBob3Jpem9udGFsCisgICAgJHtOU306OnNjcm9sbGJhciAkdG9wLnlzYiAtY29tbWFuZCAiJHRvcC5saXN0IHl2aWV3IiAtb3JpZW50IHZlcnRpY2FsCisgICAgJHtOU306OnNjcm9sbGJhciAkdG9wLnhzYiAtY29tbWFuZCAiJHRvcC5saXN0IHh2aWV3IiAtb3JpZW50IGhvcml6b250YWwKICAgICBncmlkICR0b3AubGlzdCAkdG9wLnlzYiAtc3RpY2t5IG5zZXcKICAgICBncmlkICR0b3AueHNiIHggLXN0aWNreSBldwotICAgIGZyYW1lICR0b3AuZgotICAgIGxhYmVsICR0b3AuZi5sIC10ZXh0ICJbbWMgIkZpbHRlciJdOiAiCi0gICAgZW50cnkgJHRvcC5mLmUgLXdpZHRoIDIwIC10ZXh0dmFyaWFibGUgcmVmbGlzdGZpbHRlcgorICAgICR7TlN9OjpmcmFtZSAkdG9wLmYKKyAgICAke05TfTo6bGFiZWwgJHRvcC5mLmwgLXRleHQgIlttYyAiRmlsdGVyIl06ICIKKyAgICAke05TfTo6ZW50cnkgJHRvcC5mLmUgLXdpZHRoIDIwIC10ZXh0dmFyaWFibGUgcmVmbGlzdGZpbHRlcgogICAgIHNldCByZWZsaXN0ZmlsdGVyICIqIgogICAgIHRyYWNlIGFkZCB2YXJpYWJsZSByZWZsaXN0ZmlsdGVyIHdyaXRlIHJlZmxpc3RmaWx0ZXJfY2hhbmdlCiAgICAgcGFjayAkdG9wLmYuZSAtc2lkZSByaWdodCAtZmlsbCB4IC1leHBhbmQgMQogICAgIHBhY2sgJHRvcC5mLmwgLXNpZGUgbGVmdAogICAgIGdyaWQgJHRvcC5mIC0gLXN0aWNreSBldyAtcGFkeSAyCi0gICAgYnV0dG9uICR0b3AuY2xvc2UgLWNvbW1hbmQgW2xpc3QgZGVzdHJveSAkdG9wXSAtdGV4dCBbbWMgIkNsb3NlIl0KKyAgICAke05TfTo6YnV0dG9uICR0b3AuY2xvc2UgLWNvbW1hbmQgW2xpc3QgZGVzdHJveSAkdG9wXSAtdGV4dCBbbWMgIkNsb3NlIl0KICAgICBiaW5kICR0b3AgPEtleS1Fc2NhcGU+IFtsaXN0IGRlc3Ryb3kgJHRvcF0KICAgICBncmlkICR0b3AuY2xvc2UgLQogICAgIGdyaWQgY29sdW1uY29uZmlndXJlICR0b3AgMCAtd2VpZ2h0IDEKQEAgLTkwOTIsNyArOTQyNSw3IEBACiAgICAgZ2xvYmFsIGFsbHBhcmVudHMgYWxsY2hpbGRyZW4gaWR0YWdzIGlkaGVhZHMgbmV4dGFyYwogICAgIGdsb2JhbCBhcmNub3MgYXJjaWRzIGFyY3RhZ3MgYXJjb3V0IGFyY2VuZCBhcmNzdGFydCBhcmNoZWFkcyBncm93aW5nCiAgICAgZ2xvYmFsIHNlZWRzIGFsbGNvbW1pdHMgY2FjaGVkYXJjcyBhbGxjdXBkYXRlCi0gICAgCisKICAgICBzZXQgbmlkIDAKICAgICB3aGlsZSB7W2luY3IgbmlkXSA8PSAxMDAwICYmIFtnZXRzICRmZCBsaW5lXSA+PSAwfSB7CiAJc2V0IGlkIFtsaW5kZXggJGxpbmUgMF0KQEAgLTEwMTU0LDcgKzEwNDg3LDcgQEAKICAgICBnbG9iYWwgY3RleHQgdGFnY29udGVudHMgdGFnaWRzIGxpbmtudW0gdGFnb2JqaWQKIAogICAgIGlmIHskaXNuZXd9IHsKLQlhZGR0b2hpc3RvcnkgW2xpc3Qgc2hvd3RhZyAkdGFnIDBdCisJYWRkdG9oaXN0b3J5IFtsaXN0IHNob3d0YWcgJHRhZyAwXSBzYXZlY3RleHRwb3MKICAgICB9CiAgICAgJGN0ZXh0IGNvbmYgLXN0YXRlIG5vcm1hbAogICAgIGNsZWFyX2N0ZXh0CkBAIC0xMDE2Miw3ICsxMDQ5NSw3IEBACiAgICAgc2V0IGxpbmtudW0gMAogICAgIGlmIHshW2luZm8gZXhpc3RzIHRhZ2NvbnRlbnRzKCR0YWcpXX0gewogCWNhdGNoIHsKLQkgICAgc2V0IHRhZ2NvbnRlbnRzKCR0YWcpIFtleGVjIGdpdCBjYXQtZmlsZSB0YWcgJHRhZ29iamlkKCR0YWcpXQorICAgICAgICAgICBzZXQgdGFnY29udGVudHMoJHRhZykgW2V4ZWMgZ2l0IGNhdC1maWxlIHRhZyAkdGFnXQogCX0KICAgICB9CiAgICAgaWYge1tpbmZvIGV4aXN0cyB0YWdjb250ZW50cygkdGFnKV19IHsKQEAgLTEwMTcxLDYgKzEwNTA0LDcgQEAKIAlzZXQgdGV4dCAiW21jICJUYWciXTogJHRhZ1xuW21jICJJZCJdOiAgJHRhZ2lkcygkdGFnKSIKICAgICB9CiAgICAgYXBwZW5kd2l0aGxpbmtzICR0ZXh0IHt9CisgICAgbWF5YmVfc2Nyb2xsX2N0ZXh0IDEKICAgICAkY3RleHQgY29uZiAtc3RhdGUgZGlzYWJsZWQKICAgICBpbml0X2ZsaXN0IHt9CiB9CkBAIC0xMDE4OSwxOSArMTA1MjMsMjAgQEAKIH0KIAogcHJvYyBta2ZvbnRkaXNwIHtmb250IHRvcCB3aGljaH0gewotICAgIGdsb2JhbCBmb250YXR0ciBmb250cHJlZiAkZm9udAorICAgIGdsb2JhbCBmb250YXR0ciBmb250cHJlZiAkZm9udCBOUyB1c2VfdHRrCiAKICAgICBzZXQgZm9udHByZWYoJGZvbnQpIFtzZXQgJGZvbnRdCi0gICAgYnV0dG9uICR0b3AuJHtmb250fWJ1dCAtdGV4dCAkd2hpY2ggLWZvbnQgb3B0aW9uZm9udCBcCisgICAgJHtOU306OmJ1dHRvbiAkdG9wLiR7Zm9udH1idXQgLXRleHQgJHdoaWNoIFwKIAktY29tbWFuZCBbbGlzdCBjaG9vc2Vmb250ICRmb250ICR3aGljaF0KLSAgICBsYWJlbCAkdG9wLiRmb250IC1yZWxpZWYgZmxhdCAtZm9udCAkZm9udCBcCisgICAgaWYgeyEkdXNlX3R0a30geyR0b3AuJHtmb250fWJ1dCBjb25maWd1cmUgIC1mb250IG9wdGlvbmZvbnR9CisgICAgJHtOU306OmxhYmVsICR0b3AuJGZvbnQgLXJlbGllZiBmbGF0IC1mb250ICRmb250IFwKIAktdGV4dCAkZm9udGF0dHIoJGZvbnQsZmFtaWx5KSAtanVzdGlmeSBsZWZ0CiAgICAgZ3JpZCB4ICR0b3AuJHtmb250fWJ1dCAkdG9wLiRmb250IC1zdGlja3kgdwogfQogCiBwcm9jIGNob29zZWZvbnQge2ZvbnQgd2hpY2h9IHsKICAgICBnbG9iYWwgZm9udHBhcmFtIGZvbnRsaXN0IGZvbnR0b3AgZm9udGF0dHIKLSAgICBnbG9iYWwgcHJlZnN0b3AKKyAgICBnbG9iYWwgcHJlZnN0b3AgTlMKIAogICAgIHNldCBmb250cGFyYW0od2hpY2gpICR3aGljaAogICAgIHNldCBmb250cGFyYW0oZm9udCkgJGZvbnQKQEAgLTEwMjE0LDIxICsxMDU0OSwyMSBAQAogICAgIGlmIHshW3dpbmZvIGV4aXN0cyAkdG9wXX0gewogCWZvbnQgY3JlYXRlIHNhbXBsZQogCWV2YWwgZm9udCBjb25maWcgc2FtcGxlIFtmb250IGFjdHVhbCAkZm9udF0KLQl0b3BsZXZlbCAkdG9wCisJdHRrX3RvcGxldmVsICR0b3AKIAltYWtlX3RyYW5zaWVudCAkdG9wICRwcmVmc3RvcAogCXdtIHRpdGxlICR0b3AgW21jICJHaXRrIGZvbnQgY2hvb3NlciJdCi0JbGFiZWwgJHRvcC5sIC10ZXh0dmFyaWFibGUgZm9udHBhcmFtKHdoaWNoKQorCSR7TlN9OjpsYWJlbCAkdG9wLmwgLXRleHR2YXJpYWJsZSBmb250cGFyYW0od2hpY2gpCiAJcGFjayAkdG9wLmwgLXNpZGUgdG9wCiAJc2V0IGZvbnRsaXN0IFtsc29ydCBbZm9udCBmYW1pbGllc11dCi0JZnJhbWUgJHRvcC5mCisJJHtOU306OmZyYW1lICR0b3AuZgogCWxpc3Rib3ggJHRvcC5mLmZhbSAtbGlzdHZhcmlhYmxlIGZvbnRsaXN0IFwKIAkgICAgLXlzY3JvbGxjb21tYW5kIFtsaXN0ICR0b3AuZi5zYiBzZXRdCiAJYmluZCAkdG9wLmYuZmFtIDw8TGlzdGJveFNlbGVjdD4+IHNlbGZvbnRmYW0KLQlzY3JvbGxiYXIgJHRvcC5mLnNiIC1jb21tYW5kIFtsaXN0ICR0b3AuZi5mYW0geXZpZXddCisJJHtOU306OnNjcm9sbGJhciAkdG9wLmYuc2IgLWNvbW1hbmQgW2xpc3QgJHRvcC5mLmZhbSB5dmlld10KIAlwYWNrICR0b3AuZi5zYiAtc2lkZSByaWdodCAtZmlsbCB5CiAJcGFjayAkdG9wLmYuZmFtIC1zaWRlIGxlZnQgLWZpbGwgYm90aCAtZXhwYW5kIDEKIAlwYWNrICR0b3AuZiAtc2lkZSB0b3AgLWZpbGwgYm90aCAtZXhwYW5kIDEKLQlmcmFtZSAkdG9wLmcKKwkke05TfTo6ZnJhbWUgJHRvcC5nCiAJc3BpbmJveCAkdG9wLmcuc2l6ZSAtZnJvbSA0IC10byA0MCAtd2lkdGggNCBcCiAJICAgIC10ZXh0dmFyaWFibGUgZm9udHBhcmFtKHNpemUpIFwKIAkgICAgLXZhbGlkYXRlY29tbWFuZCB7c3RyaW5nIGlzIGludGVnZXIgLXN0cmljdCAlc30KQEAgLTEwMjQ2LDkgKzEwNTgxLDkgQEAKIAkgICAgLWZpbGwgYmxhY2sgLXRhZ3MgdGV4dAogCWJpbmQgJHRvcC5jIDxDb25maWd1cmU+IFtsaXN0IGNlbnRlcnRleHQgJHRvcC5jXQogCXBhY2sgJHRvcC5jIC1zaWRlIHRvcCAtZmlsbCB4Ci0JZnJhbWUgJHRvcC5idXRzCi0JYnV0dG9uICR0b3AuYnV0cy5vayAtdGV4dCBbbWMgIk9LIl0gLWNvbW1hbmQgZm9udG9rIC1kZWZhdWx0IGFjdGl2ZQotCWJ1dHRvbiAkdG9wLmJ1dHMuY2FuIC10ZXh0IFttYyAiQ2FuY2VsIl0gLWNvbW1hbmQgZm9udGNhbiAtZGVmYXVsdCBub3JtYWwKKwkke05TfTo6ZnJhbWUgJHRvcC5idXRzCisJJHtOU306OmJ1dHRvbiAkdG9wLmJ1dHMub2sgLXRleHQgW21jICJPSyJdIC1jb21tYW5kIGZvbnRvayAtZGVmYXVsdCBhY3RpdmUKKwkke05TfTo6YnV0dG9uICR0b3AuYnV0cy5jYW4gLXRleHQgW21jICJDYW5jZWwiXSAtY29tbWFuZCBmb250Y2FuIC1kZWZhdWx0IG5vcm1hbAogCWJpbmQgJHRvcCA8S2V5LVJldHVybj4gZm9udG9rCiAJYmluZCAkdG9wIDxLZXktRXNjYXBlPiBmb250Y2FuCiAJZ3JpZCAkdG9wLmJ1dHMub2sgJHRvcC5idXRzLmNhbgpAQCAtMTAyODQsNyArMTA2MTksNyBAQAogICAgIH0KICAgICBzZXQgdyAkcHJlZnN0b3AuJGYKICAgICAkdyBjb25mIC10ZXh0ICRmb250cGFyYW0oZmFtaWx5KSAtZm9udCAkZm9udHByZWYoJGYpCi0JCisKICAgICBmb250Y2FuCiB9CiAKQEAgLTEwMjk5LDYgKzEwNjM0LDI4IEBACiAgICAgfQogfQogCitpZiB7W3BhY2thZ2UgdnNhdGlzZmllcyBbcGFja2FnZSBwcm92aWRlIFRrXSA4LjZdfSB7CisgICAgIyBJbiBUayA4LjYgd2UgaGF2ZSBhIG5hdGl2ZSBmb250IGNob29zZXIgZGlhbG9nLiBPdmVyd3JpdGUgdGhlIGFib3ZlCisgICAgIyBmdW5jdGlvbiB0byBtYWtlIHVzZSBvZiBpdC4KKyAgICBwcm9jIGNob29zZWZvbnQge2ZvbnQgd2hpY2h9IHsKKwl0ayBmb250Y2hvb3NlciBjb25maWd1cmUgLXRpdGxlICR3aGljaCAtZm9udCAkZm9udCBcCisJICAgIC1jb21tYW5kIFtsaXN0IG9uX2Nob29zZWZvbnQgJGZvbnQgJHdoaWNoXQorCXRrIGZvbnRjaG9vc2VyIHNob3cKKyAgICB9CisgICAgcHJvYyBvbl9jaG9vc2Vmb250IHtmb250IHdoaWNoIG5ld2ZvbnR9IHsKKwlnbG9iYWwgZm9udHBhcmFtCisJcHV0cyBzdGRlcnIgIiRmb250ICRuZXdmb250IgorCWFycmF5IHNldCBmIFtmb250IGFjdHVhbCAkbmV3Zm9udF0KKwlzZXQgZm9udHBhcmFtKHdoaWNoKSAkd2hpY2gKKwlzZXQgZm9udHBhcmFtKGZvbnQpICRmb250CisJc2V0IGZvbnRwYXJhbShmYW1pbHkpICRmKC1mYW1pbHkpCisJc2V0IGZvbnRwYXJhbShzaXplKSAkZigtc2l6ZSkKKwlzZXQgZm9udHBhcmFtKHdlaWdodCkgJGYoLXdlaWdodCkKKwlzZXQgZm9udHBhcmFtKHNsYW50KSAkZigtc2xhbnQpCisJZm9udG9rCisgICAgfQorfQorCiBwcm9jIHNlbGZvbnRmYW0ge30gewogICAgIGdsb2JhbCBmb250dG9wIGZvbnRwYXJhbQogCkBAIC0xMDMxNSwxMCArMTA2NzIsMTEgQEAKIH0KIAogcHJvYyBkb3ByZWZzIHt9IHsKLSAgICBnbG9iYWwgbWF4d2lkdGggbWF4Z3JhcGhwY3QKKyAgICBnbG9iYWwgbWF4d2lkdGggbWF4Z3JhcGhwY3QgdXNlX3R0ayBOUwogICAgIGdsb2JhbCBvbGRwcmVmcyBwcmVmc3RvcCBzaG93bmVhcnRhZ3Mgc2hvd2xvY2FsY2hhbmdlcwotICAgIGdsb2JhbCBiZ2NvbG9yIGZnY29sb3IgY3RleHQgZGlmZmNvbG9ycyBzZWxlY3RiZ2NvbG9yIG1hcmtiZ2NvbG9yCisgICAgZ2xvYmFsIHVpY29sb3IgYmdjb2xvciBmZ2NvbG9yIGN0ZXh0IGRpZmZjb2xvcnMgc2VsZWN0Ymdjb2xvciBtYXJrYmdjb2xvcgogICAgIGdsb2JhbCB0YWJzdG9wIGxpbWl0ZGlmZnMgYXV0b3NlbGVjdCBleHRkaWZmdG9vbCBwZXJmaWxlX2F0dHJzCisgICAgZ2xvYmFsIGhpZGVyZW1vdGVzIHdhbnRfdHRrIGhhdmVfdHRrCiAKICAgICBzZXQgdG9wIC5naXRrcHJlZnMKICAgICBzZXQgcHJlZnN0b3AgJHRvcApAQCAtMTAzMjcsMTA2ICsxMDY4NSwxMzEgQEAKIAlyZXR1cm4KICAgICB9CiAgICAgZm9yZWFjaCB2IHttYXh3aWR0aCBtYXhncmFwaHBjdCBzaG93bmVhcnRhZ3Mgc2hvd2xvY2FsY2hhbmdlcyBcCi0JCSAgIGxpbWl0ZGlmZnMgdGFic3RvcCBwZXJmaWxlX2F0dHJzfSB7CisJCSAgIGxpbWl0ZGlmZnMgdGFic3RvcCBwZXJmaWxlX2F0dHJzIGhpZGVyZW1vdGVzIHdhbnRfdHRrfSB7CiAJc2V0IG9sZHByZWZzKCR2KSBbc2V0ICR2XQogICAgIH0KLSAgICB0b3BsZXZlbCAkdG9wCisgICAgdHRrX3RvcGxldmVsICR0b3AKICAgICB3bSB0aXRsZSAkdG9wIFttYyAiR2l0ayBwcmVmZXJlbmNlcyJdCiAgICAgbWFrZV90cmFuc2llbnQgJHRvcCAuCi0gICAgbGFiZWwgJHRvcC5sZGlzcCAtdGV4dCBbbWMgIkNvbW1pdCBsaXN0IGRpc3BsYXkgb3B0aW9ucyJdCisgICAgJHtOU306OmxhYmVsICR0b3AubGRpc3AgLXRleHQgW21jICJDb21taXQgbGlzdCBkaXNwbGF5IG9wdGlvbnMiXQogICAgIGdyaWQgJHRvcC5sZGlzcCAtIC1zdGlja3kgdyAtcGFkeSAxMAotICAgIGxhYmVsICR0b3Auc3BhY2VyIC10ZXh0ICIgIgotICAgIGxhYmVsICR0b3AubWF4d2lkdGhsIC10ZXh0IFttYyAiTWF4aW11bSBncmFwaCB3aWR0aCAobGluZXMpIl0gXAotCS1mb250IG9wdGlvbmZvbnQKKyAgICAke05TfTo6bGFiZWwgJHRvcC5zcGFjZXIgLXRleHQgIiAiCisgICAgJHtOU306OmxhYmVsICR0b3AubWF4d2lkdGhsIC10ZXh0IFttYyAiTWF4aW11bSBncmFwaCB3aWR0aCAobGluZXMpIl0KICAgICBzcGluYm94ICR0b3AubWF4d2lkdGggLWZyb20gMCAtdG8gMTAwIC13aWR0aCA0IC10ZXh0dmFyaWFibGUgbWF4d2lkdGgKICAgICBncmlkICR0b3Auc3BhY2VyICR0b3AubWF4d2lkdGhsICR0b3AubWF4d2lkdGggLXN0aWNreSB3Ci0gICAgbGFiZWwgJHRvcC5tYXhwY3RsIC10ZXh0IFttYyAiTWF4aW11bSBncmFwaCB3aWR0aCAoJSBvZiBwYW5lKSJdIFwKLQktZm9udCBvcHRpb25mb250CisgICAgJHtOU306OmxhYmVsICR0b3AubWF4cGN0bCAtdGV4dCBbbWMgIk1heGltdW0gZ3JhcGggd2lkdGggKCUgb2YgcGFuZSkiXQogICAgIHNwaW5ib3ggJHRvcC5tYXhwY3QgLWZyb20gMSAtdG8gMTAwIC13aWR0aCA0IC10ZXh0dmFyaWFibGUgbWF4Z3JhcGhwY3QKICAgICBncmlkIHggJHRvcC5tYXhwY3RsICR0b3AubWF4cGN0IC1zdGlja3kgdwotICAgIGNoZWNrYnV0dG9uICR0b3Auc2hvd2xvY2FsIC10ZXh0IFttYyAiU2hvdyBsb2NhbCBjaGFuZ2VzIl0gXAotCS1mb250IG9wdGlvbmZvbnQgLXZhcmlhYmxlIHNob3dsb2NhbGNoYW5nZXMKKyAgICAke05TfTo6Y2hlY2tidXR0b24gJHRvcC5zaG93bG9jYWwgLXRleHQgW21jICJTaG93IGxvY2FsIGNoYW5nZXMiXSBcCisJLXZhcmlhYmxlIHNob3dsb2NhbGNoYW5nZXMKICAgICBncmlkIHggJHRvcC5zaG93bG9jYWwgLXN0aWNreSB3Ci0gICAgY2hlY2tidXR0b24gJHRvcC5hdXRvc2VsZWN0IC10ZXh0IFttYyAiQXV0by1zZWxlY3QgU0hBMSJdIFwKLQktZm9udCBvcHRpb25mb250IC12YXJpYWJsZSBhdXRvc2VsZWN0CisgICAgJHtOU306OmNoZWNrYnV0dG9uICR0b3AuYXV0b3NlbGVjdCAtdGV4dCBbbWMgIkF1dG8tc2VsZWN0IFNIQTEiXSBcCisJLXZhcmlhYmxlIGF1dG9zZWxlY3QKICAgICBncmlkIHggJHRvcC5hdXRvc2VsZWN0IC1zdGlja3kgdworICAgICR7TlN9OjpjaGVja2J1dHRvbiAkdG9wLmhpZGVyZW1vdGVzIC10ZXh0IFttYyAiSGlkZSByZW1vdGUgcmVmcyJdIFwKKwktdmFyaWFibGUgaGlkZXJlbW90ZXMKKyAgICBncmlkIHggJHRvcC5oaWRlcmVtb3RlcyAtc3RpY2t5IHcKIAotICAgIGxhYmVsICR0b3AuZGRpc3AgLXRleHQgW21jICJEaWZmIGRpc3BsYXkgb3B0aW9ucyJdCisgICAgJHtOU306OmxhYmVsICR0b3AuZGRpc3AgLXRleHQgW21jICJEaWZmIGRpc3BsYXkgb3B0aW9ucyJdCiAgICAgZ3JpZCAkdG9wLmRkaXNwIC0gLXN0aWNreSB3IC1wYWR5IDEwCi0gICAgbGFiZWwgJHRvcC50YWJzdG9wbCAtdGV4dCBbbWMgIlRhYiBzcGFjaW5nIl0gLWZvbnQgb3B0aW9uZm9udAorICAgICR7TlN9OjpsYWJlbCAkdG9wLnRhYnN0b3BsIC10ZXh0IFttYyAiVGFiIHNwYWNpbmciXQogICAgIHNwaW5ib3ggJHRvcC50YWJzdG9wIC1mcm9tIDEgLXRvIDIwIC13aWR0aCA0IC10ZXh0dmFyaWFibGUgdGFic3RvcAogICAgIGdyaWQgeCAkdG9wLnRhYnN0b3BsICR0b3AudGFic3RvcCAtc3RpY2t5IHcKLSAgICBjaGVja2J1dHRvbiAkdG9wLm50YWcgLXRleHQgW21jICJEaXNwbGF5IG5lYXJieSB0YWdzIl0gXAotCS1mb250IG9wdGlvbmZvbnQgLXZhcmlhYmxlIHNob3duZWFydGFncworICAgICR7TlN9OjpjaGVja2J1dHRvbiAkdG9wLm50YWcgLXRleHQgW21jICJEaXNwbGF5IG5lYXJieSB0YWdzIl0gXAorCS12YXJpYWJsZSBzaG93bmVhcnRhZ3MKICAgICBncmlkIHggJHRvcC5udGFnIC1zdGlja3kgdwotICAgIGNoZWNrYnV0dG9uICR0b3AubGRpZmYgLXRleHQgW21jICJMaW1pdCBkaWZmcyB0byBsaXN0ZWQgcGF0aHMiXSBcCi0JLWZvbnQgb3B0aW9uZm9udCAtdmFyaWFibGUgbGltaXRkaWZmcworICAgICR7TlN9OjpjaGVja2J1dHRvbiAkdG9wLmxkaWZmIC10ZXh0IFttYyAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIl0gXAorCS12YXJpYWJsZSBsaW1pdGRpZmZzCiAgICAgZ3JpZCB4ICR0b3AubGRpZmYgLXN0aWNreSB3Ci0gICAgY2hlY2tidXR0b24gJHRvcC5sYXR0ciAtdGV4dCBbbWMgIlN1cHBvcnQgcGVyLWZpbGUgZW5jb2RpbmdzIl0gXAotCS1mb250IG9wdGlvbmZvbnQgLXZhcmlhYmxlIHBlcmZpbGVfYXR0cnMKKyAgICAke05TfTo6Y2hlY2tidXR0b24gJHRvcC5sYXR0ciAtdGV4dCBbbWMgIlN1cHBvcnQgcGVyLWZpbGUgZW5jb2RpbmdzIl0gXAorCS12YXJpYWJsZSBwZXJmaWxlX2F0dHJzCiAgICAgZ3JpZCB4ICR0b3AubGF0dHIgLXN0aWNreSB3CiAKLSAgICBlbnRyeSAkdG9wLmV4dGRpZmZ0IC10ZXh0dmFyaWFibGUgZXh0ZGlmZnRvb2wKLSAgICBmcmFtZSAkdG9wLmV4dGRpZmZmCi0gICAgbGFiZWwgJHRvcC5leHRkaWZmZi5sIC10ZXh0IFttYyAiRXh0ZXJuYWwgZGlmZiB0b29sIiBdIC1mb250IG9wdGlvbmZvbnQgXAotCS1wYWR4IDEwCi0gICAgYnV0dG9uICR0b3AuZXh0ZGlmZmYuYiAtdGV4dCBbbWMgIkNob29zZS4uLiJdIC1mb250IG9wdGlvbmZvbnQgXAotCS1jb21tYW5kIGNob29zZV9leHRkaWZmCisgICAgJHtOU306OmVudHJ5ICR0b3AuZXh0ZGlmZnQgLXRleHR2YXJpYWJsZSBleHRkaWZmdG9vbAorICAgICR7TlN9OjpmcmFtZSAkdG9wLmV4dGRpZmZmCisgICAgJHtOU306OmxhYmVsICR0b3AuZXh0ZGlmZmYubCAtdGV4dCBbbWMgIkV4dGVybmFsIGRpZmYgdG9vbCIgXQorICAgICR7TlN9OjpidXR0b24gJHRvcC5leHRkaWZmZi5iIC10ZXh0IFttYyAiQ2hvb3NlLi4uIl0gLWNvbW1hbmQgY2hvb3NlX2V4dGRpZmYKICAgICBwYWNrICR0b3AuZXh0ZGlmZmYubCAkdG9wLmV4dGRpZmZmLmIgLXNpZGUgbGVmdAotICAgIGdyaWQgeCAkdG9wLmV4dGRpZmZmICR0b3AuZXh0ZGlmZnQgLXN0aWNreSB3CisgICAgcGFjayBjb25maWd1cmUgJHRvcC5leHRkaWZmZi5sIC1wYWR4IDEwCisgICAgZ3JpZCB4ICR0b3AuZXh0ZGlmZmYgJHRvcC5leHRkaWZmdCAtc3RpY2t5IGV3CiAKLSAgICBsYWJlbCAkdG9wLmNkaXNwIC10ZXh0IFttYyAiQ29sb3JzOiBwcmVzcyB0byBjaG9vc2UiXQorICAgICR7TlN9OjpsYWJlbCAkdG9wLmxnZW4gLXRleHQgW21jICJHZW5lcmFsIG9wdGlvbnMiXQorICAgIGdyaWQgJHRvcC5sZ2VuIC0gLXN0aWNreSB3IC1wYWR5IDEwCisgICAgJHtOU306OmNoZWNrYnV0dG9uICR0b3Aud2FudF90dGsgLXZhcmlhYmxlIHdhbnRfdHRrIFwKKwktdGV4dCBbbWMgIlVzZSB0aGVtZWQgd2lkZ2V0cyJdCisgICAgaWYgeyRoYXZlX3R0a30geworCSR7TlN9OjpsYWJlbCAkdG9wLnR0a19ub3RlIC10ZXh0IFttYyAiKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KSJdCisgICAgfSBlbHNlIHsKKwkke05TfTo6bGFiZWwgJHRvcC50dGtfbm90ZSAtdGV4dCBbbWMgIihjdXJyZW50bHkgdW5hdmFpbGFibGUpIl0KKyAgICB9CisgICAgZ3JpZCB4ICR0b3Aud2FudF90dGsgJHRvcC50dGtfbm90ZSAtc3RpY2t5IHcKKworICAgICR7TlN9OjpsYWJlbCAkdG9wLmNkaXNwIC10ZXh0IFttYyAiQ29sb3JzOiBwcmVzcyB0byBjaG9vc2UiXQogICAgIGdyaWQgJHRvcC5jZGlzcCAtIC1zdGlja3kgdyAtcGFkeSAxMAorICAgIGxhYmVsICR0b3AudWkgLXBhZHggNDAgLXJlbGllZiBzdW5rIC1iYWNrZ3JvdW5kICR1aWNvbG9yCisgICAgJHtOU306OmJ1dHRvbiAkdG9wLnVpYnV0IC10ZXh0IFttYyAiSW50ZXJmYWNlIl0gXAorICAgICAgIC1jb21tYW5kIFtsaXN0IGNob29zZWNvbG9yIHVpY29sb3Ige30gJHRvcC51aSBbbWMgImludGVyZmFjZSJdIHNldHVpXQorICAgIGdyaWQgeCAkdG9wLnVpYnV0ICR0b3AudWkgLXN0aWNreSB3CiAgICAgbGFiZWwgJHRvcC5iZyAtcGFkeCA0MCAtcmVsaWVmIHN1bmsgLWJhY2tncm91bmQgJGJnY29sb3IKLSAgICBidXR0b24gJHRvcC5iZ2J1dCAtdGV4dCBbbWMgIkJhY2tncm91bmQiXSAtZm9udCBvcHRpb25mb250IFwKKyAgICAke05TfTo6YnV0dG9uICR0b3AuYmdidXQgLXRleHQgW21jICJCYWNrZ3JvdW5kIl0gXAogCS1jb21tYW5kIFtsaXN0IGNob29zZWNvbG9yIGJnY29sb3Ige30gJHRvcC5iZyBbbWMgImJhY2tncm91bmQiXSBzZXRiZ10KICAgICBncmlkIHggJHRvcC5iZ2J1dCAkdG9wLmJnIC1zdGlja3kgdwogICAgIGxhYmVsICR0b3AuZmcgLXBhZHggNDAgLXJlbGllZiBzdW5rIC1iYWNrZ3JvdW5kICRmZ2NvbG9yCi0gICAgYnV0dG9uICR0b3AuZmdidXQgLXRleHQgW21jICJGb3JlZ3JvdW5kIl0gLWZvbnQgb3B0aW9uZm9udCBcCisgICAgJHtOU306OmJ1dHRvbiAkdG9wLmZnYnV0IC10ZXh0IFttYyAiRm9yZWdyb3VuZCJdIFwKIAktY29tbWFuZCBbbGlzdCBjaG9vc2Vjb2xvciBmZ2NvbG9yIHt9ICR0b3AuZmcgW21jICJmb3JlZ3JvdW5kIl0gc2V0ZmddCiAgICAgZ3JpZCB4ICR0b3AuZmdidXQgJHRvcC5mZyAtc3RpY2t5IHcKICAgICBsYWJlbCAkdG9wLmRpZmZvbGQgLXBhZHggNDAgLXJlbGllZiBzdW5rIC1iYWNrZ3JvdW5kIFtsaW5kZXggJGRpZmZjb2xvcnMgMF0KLSAgICBidXR0b24gJHRvcC5kaWZmb2xkYnV0IC10ZXh0IFttYyAiRGlmZjogb2xkIGxpbmVzIl0gLWZvbnQgb3B0aW9uZm9udCBcCisgICAgJHtOU306OmJ1dHRvbiAkdG9wLmRpZmZvbGRidXQgLXRleHQgW21jICJEaWZmOiBvbGQgbGluZXMiXSBcCiAJLWNvbW1hbmQgW2xpc3QgY2hvb3NlY29sb3IgZGlmZmNvbG9ycyAwICR0b3AuZGlmZm9sZCBbbWMgImRpZmYgb2xkIGxpbmVzIl0gXAogCQkgICAgICBbbGlzdCAkY3RleHQgdGFnIGNvbmYgZDAgLWZvcmVncm91bmRdXQogICAgIGdyaWQgeCAkdG9wLmRpZmZvbGRidXQgJHRvcC5kaWZmb2xkIC1zdGlja3kgdwogICAgIGxhYmVsICR0b3AuZGlmZm5ldyAtcGFkeCA0MCAtcmVsaWVmIHN1bmsgLWJhY2tncm91bmQgW2xpbmRleCAkZGlmZmNvbG9ycyAxXQotICAgIGJ1dHRvbiAkdG9wLmRpZmZuZXdidXQgLXRleHQgW21jICJEaWZmOiBuZXcgbGluZXMiXSAtZm9udCBvcHRpb25mb250IFwKKyAgICAke05TfTo6YnV0dG9uICR0b3AuZGlmZm5ld2J1dCAtdGV4dCBbbWMgIkRpZmY6IG5ldyBsaW5lcyJdIFwKIAktY29tbWFuZCBbbGlzdCBjaG9vc2Vjb2xvciBkaWZmY29sb3JzIDEgJHRvcC5kaWZmbmV3IFttYyAiZGlmZiBuZXcgbGluZXMiXSBcCiAJCSAgICAgIFtsaXN0ICRjdGV4dCB0YWcgY29uZiBkcmVzdWx0IC1mb3JlZ3JvdW5kXV0KICAgICBncmlkIHggJHRvcC5kaWZmbmV3YnV0ICR0b3AuZGlmZm5ldyAtc3RpY2t5IHcKICAgICBsYWJlbCAkdG9wLmh1bmtzZXAgLXBhZHggNDAgLXJlbGllZiBzdW5rIC1iYWNrZ3JvdW5kIFtsaW5kZXggJGRpZmZjb2xvcnMgMl0KLSAgICBidXR0b24gJHRvcC5odW5rc2VwYnV0IC10ZXh0IFttYyAiRGlmZjogaHVuayBoZWFkZXIiXSAtZm9udCBvcHRpb25mb250IFwKKyAgICAke05TfTo6YnV0dG9uICR0b3AuaHVua3NlcGJ1dCAtdGV4dCBbbWMgIkRpZmY6IGh1bmsgaGVhZGVyIl0gXAogCS1jb21tYW5kIFtsaXN0IGNob29zZWNvbG9yIGRpZmZjb2xvcnMgMiAkdG9wLmh1bmtzZXAgXAogCQkgICAgICBbbWMgImRpZmYgaHVuayBoZWFkZXIiXSBcCiAJCSAgICAgIFtsaXN0ICRjdGV4dCB0YWcgY29uZiBodW5rc2VwIC1mb3JlZ3JvdW5kXV0KICAgICBncmlkIHggJHRvcC5odW5rc2VwYnV0ICR0b3AuaHVua3NlcCAtc3RpY2t5IHcKICAgICBsYWJlbCAkdG9wLm1hcmtiZ3NlcCAtcGFkeCA0MCAtcmVsaWVmIHN1bmsgLWJhY2tncm91bmQgJG1hcmtiZ2NvbG9yCi0gICAgYnV0dG9uICR0b3AubWFya2JnYnV0IC10ZXh0IFttYyAiTWFya2VkIGxpbmUgYmciXSAtZm9udCBvcHRpb25mb250IFwKKyAgICAke05TfTo6YnV0dG9uICR0b3AubWFya2JnYnV0IC10ZXh0IFttYyAiTWFya2VkIGxpbmUgYmciXSBcCiAJLWNvbW1hbmQgW2xpc3QgY2hvb3NlY29sb3IgbWFya2JnY29sb3Ige30gJHRvcC5tYXJrYmdzZXAgXAogCQkgICAgICBbbWMgIm1hcmtlZCBsaW5lIGJhY2tncm91bmQiXSBcCiAJCSAgICAgIFtsaXN0ICRjdGV4dCB0YWcgY29uZiBvbWFyayAtYmFja2dyb3VuZF1dCiAgICAgZ3JpZCB4ICR0b3AubWFya2JnYnV0ICR0b3AubWFya2Jnc2VwIC1zdGlja3kgdwogICAgIGxhYmVsICR0b3Auc2VsYmdzZXAgLXBhZHggNDAgLXJlbGllZiBzdW5rIC1iYWNrZ3JvdW5kICRzZWxlY3RiZ2NvbG9yCi0gICAgYnV0dG9uICR0b3Auc2VsYmdidXQgLXRleHQgW21jICJTZWxlY3QgYmciXSAtZm9udCBvcHRpb25mb250IFwKKyAgICAke05TfTo6YnV0dG9uICR0b3Auc2VsYmdidXQgLXRleHQgW21jICJTZWxlY3QgYmciXSBcCiAJLWNvbW1hbmQgW2xpc3QgY2hvb3NlY29sb3Igc2VsZWN0Ymdjb2xvciB7fSAkdG9wLnNlbGJnc2VwIFttYyAiYmFja2dyb3VuZCJdIHNldHNlbGJnXQogICAgIGdyaWQgeCAkdG9wLnNlbGJnYnV0ICR0b3Auc2VsYmdzZXAgLXN0aWNreSB3CiAKLSAgICBsYWJlbCAkdG9wLmNmb250IC10ZXh0IFttYyAiRm9udHM6IHByZXNzIHRvIGNob29zZSJdCisgICAgJHtOU306OmxhYmVsICR0b3AuY2ZvbnQgLXRleHQgW21jICJGb250czogcHJlc3MgdG8gY2hvb3NlIl0KICAgICBncmlkICR0b3AuY2ZvbnQgLSAtc3RpY2t5IHcgLXBhZHkgMTAKICAgICBta2ZvbnRkaXNwIG1haW5mb250ICR0b3AgW21jICJNYWluIGZvbnQiXQogICAgIG1rZm9udGRpc3AgdGV4dGZvbnQgJHRvcCBbbWMgIkRpZmYgZGlzcGxheSBmb250Il0KICAgICBta2ZvbnRkaXNwIHVpZm9udCAkdG9wIFttYyAiVXNlciBpbnRlcmZhY2UgZm9udCJdCiAKLSAgICBmcmFtZSAkdG9wLmJ1dHMKLSAgICBidXR0b24gJHRvcC5idXRzLm9rIC10ZXh0IFttYyAiT0siXSAtY29tbWFuZCBwcmVmc29rIC1kZWZhdWx0IGFjdGl2ZQotICAgIGJ1dHRvbiAkdG9wLmJ1dHMuY2FuIC10ZXh0IFttYyAiQ2FuY2VsIl0gLWNvbW1hbmQgcHJlZnNjYW4gLWRlZmF1bHQgbm9ybWFsCisgICAgaWYgeyEkdXNlX3R0a30geworCWZvcmVhY2ggdyB7bWF4cGN0bCBtYXh3aWR0aGwgc2hvd2xvY2FsIGF1dG9zZWxlY3QgdGFic3RvcGwgbnRhZworCSAgICBsZGlmZiBsYXR0ciBleHRkaWZmZi5sIGV4dGRpZmZmLmIgYmdidXQgZmdidXQKKwkgICAgZGlmZm9sZGJ1dCBkaWZmbmV3YnV0IGh1bmtzZXBidXQgbWFya2JnYnV0IHNlbGJnYnV0CisJICAgIHdhbnRfdHRrIHR0a19ub3RlfSB7CisJICAgICR0b3AuJHcgY29uZmlndXJlIC1mb250IG9wdGlvbmZvbnQKKwl9CisgICAgfQorCisgICAgJHtOU306OmZyYW1lICR0b3AuYnV0cworICAgICR7TlN9OjpidXR0b24gJHRvcC5idXRzLm9rIC10ZXh0IFttYyAiT0siXSAtY29tbWFuZCBwcmVmc29rIC1kZWZhdWx0IGFjdGl2ZQorICAgICR7TlN9OjpidXR0b24gJHRvcC5idXRzLmNhbiAtdGV4dCBbbWMgIkNhbmNlbCJdIC1jb21tYW5kIHByZWZzY2FuIC1kZWZhdWx0IG5vcm1hbAogICAgIGJpbmQgJHRvcCA8S2V5LVJldHVybj4gcHJlZnNvawogICAgIGJpbmQgJHRvcCA8S2V5LUVzY2FwZT4gcHJlZnNjYW4KICAgICBncmlkICR0b3AuYnV0cy5vayAkdG9wLmJ1dHMuY2FuCiAgICAgZ3JpZCBjb2x1bW5jb25maWd1cmUgJHRvcC5idXRzIDAgLXdlaWdodCAxIC11bmlmb3JtIGEKICAgICBncmlkIGNvbHVtbmNvbmZpZ3VyZSAkdG9wLmJ1dHMgMSAtd2VpZ2h0IDEgLXVuaWZvcm0gYQogICAgIGdyaWQgJHRvcC5idXRzIC0gLSAtcGFkeSAxMCAtc3RpY2t5IGV3CisgICAgZ3JpZCBjb2x1bW5jb25maWd1cmUgJHRvcCAyIC13ZWlnaHQgMQogICAgIGJpbmQgJHRvcCA8VmlzaWJpbGl0eT4gImZvY3VzICR0b3AuYnV0cy5vayIKIH0KIApAQCAtMTA0NjAsNiArMTA4NDMsMjAgQEAKICAgICBhbGxjYW52cyBpdGVtY29uZiBzZWNzZWwgLWZpbGwgJGMKIH0KIAorIyBUaGlzIHNldHMgdGhlIGJhY2tncm91bmQgY29sb3IgYW5kIHRoZSBjb2xvciBzY2hlbWUgZm9yIHRoZSB3aG9sZSBVSS4KKyMgRm9yIHNvbWUgcmVhc29uLCB0a19zZXRQYWxldHRlIGNob29zZXMgYSBuYXN0eSBkYXJrIHJlZCBmb3Igc2VsZWN0Q29sb3IKKyMgaWYgd2UgZG9uJ3Qgc3BlY2lmeSBvbmUgb3Vyc2VsdmVzLCB3aGljaCBtYWtlcyB0aGUgY2hlY2tidXR0b25zIGFuZAorIyByYWRpb2J1dHRvbnMgbG9vayBiYWQuICBUaGlzIGNob29zZXMgd2hpdGUgZm9yIHNlbGVjdENvbG9yIGlmIHRoZQorIyBiYWNrZ3JvdW5kIGNvbG9yIGlzIGxpZ2h0LCBvciBibGFjayBpZiBpdCBpcyBkYXJrLgorcHJvYyBzZXR1aSB7Y30geworICAgIHNldCBiZyBbd2luZm8gcmdiIC4gJGNdCisgICAgc2V0IHNlbGMgYmxhY2sKKyAgICBpZiB7W2xpbmRleCAkYmcgMF0gKyAxLjUgKiBbbGluZGV4ICRiZyAxXSArIDAuNSAqIFtsaW5kZXggJGJnIDJdID4gMTAwMDAwfSB7CisJc2V0IHNlbGMgd2hpdGUKKyAgICB9CisgICAgdGtfc2V0UGFsZXR0ZSBiYWNrZ3JvdW5kICRjIHNlbGVjdENvbG9yICRzZWxjCit9CisKIHByb2Mgc2V0Ymcge2N9IHsKICAgICBnbG9iYWwgYmdsaXN0CiAKQEAgLTEwNDgzLDcgKzEwODgwLDcgQEAKICAgICBnbG9iYWwgb2xkcHJlZnMgcHJlZnN0b3AKIAogICAgIGZvcmVhY2ggdiB7bWF4d2lkdGggbWF4Z3JhcGhwY3Qgc2hvd25lYXJ0YWdzIHNob3dsb2NhbGNoYW5nZXMgXAotCQkgICBsaW1pdGRpZmZzIHRhYnN0b3AgcGVyZmlsZV9hdHRyc30geworCQkgICBsaW1pdGRpZmZzIHRhYnN0b3AgcGVyZmlsZV9hdHRycyBoaWRlcmVtb3RlcyB3YW50X3R0a30gewogCWdsb2JhbCAkdgogCXNldCAkdiAkb2xkcHJlZnMoJHYpCiAgICAgfQpAQCAtMTA0OTcsNiArMTA4OTQsNyBAQAogICAgIGdsb2JhbCBvbGRwcmVmcyBwcmVmc3RvcCBzaG93bmVhcnRhZ3Mgc2hvd2xvY2FsY2hhbmdlcwogICAgIGdsb2JhbCBmb250cHJlZiBtYWluZm9udCB0ZXh0Zm9udCB1aWZvbnQKICAgICBnbG9iYWwgbGltaXRkaWZmcyB0cmVlZGlmZnMgcGVyZmlsZV9hdHRycworICAgIGdsb2JhbCBoaWRlcmVtb3RlcwogCiAgICAgY2F0Y2gge2Rlc3Ryb3kgJHByZWZzdG9wfQogICAgIHVuc2V0IHByZWZzdG9wCkBAIC0xMDU0Miw2ICsxMDk0MCw5IEBACiAJICAkbGltaXRkaWZmcyAhPSAkb2xkcHJlZnMobGltaXRkaWZmcyl9IHsKIAlyZXNlbGVjdGxpbmUKICAgICB9CisgICAgaWYgeyRoaWRlcmVtb3RlcyAhPSAkb2xkcHJlZnMoaGlkZXJlbW90ZXMpfSB7CisJcmVyZWFkcmVmcworICAgIH0KIH0KIAogcHJvYyBmb3JtYXRkYXRlIHtkfSB7CkBAIC0xMDgzNyw3ICsxMTIzOCw3IEBACiAgICAgfSBlbHNlIHsKIAlzZXQgciAidW5zcGVjaWZpZWQiCiAJaWYgeyFbY2F0Y2gge3NldCBsaW5lIFtleGVjIGdpdCBjaGVjay1hdHRyICRhdHRyIC0tICRwYXRoXX1dfSB7Ci0JICAgIHJlZ2V4cCAiKC4qKTogZW5jb2Rpbmc6ICguKikiICRsaW5lIG0gZiByCisJICAgIHJlZ2V4cCAiKC4qKTogJGF0dHI6ICguKikiICRsaW5lIG0gZiByCiAJfQogCXNldCBwYXRoX2F0dHJfY2FjaGUoJGF0dHIsJHBhdGgpICRyCiAgICAgfQpAQCAtMTA4NjUsNyArMTEyNjYsNyBAQAogCXNldCBuZXdsaXN0IFtscmFuZ2UgJG5ld2xpc3QgJGxpbSBlbmRdCiAJaWYgeyFbY2F0Y2gge3NldCBybGlzdCBbZXZhbCBleGVjIGdpdCBjaGVjay1hdHRyICRhdHRyIC0tICRoZWFkXX1dfSB7CiAJICAgIGZvcmVhY2ggcm93IFtzcGxpdCAkcmxpc3QgIlxuIl0gewotCQlpZiB7W3JlZ2V4cCAiKC4qKTogZW5jb2Rpbmc6ICguKikiICRyb3cgbSBwYXRoIHZhbHVlXX0geworCQlpZiB7W3JlZ2V4cCAiKC4qKTogJGF0dHI6ICguKikiICRyb3cgbSBwYXRoIHZhbHVlXX0gewogCQkgICAgaWYge1tzdHJpbmcgaW5kZXggJHBhdGggMF0gZXEgIlwiIn0gewogCQkJc2V0IHBhdGggW2VuY29kaW5nIGNvbnZlcnRmcm9tIFtsaW5kZXggJHBhdGggMF1dCiAJCSAgICB9CkBAIC0xMDg5MCw4ICsxMTI5MSw4IEBACiAKICMgRmlyc3QgY2hlY2sgdGhhdCBUY2wvVGsgaXMgcmVjZW50IGVub3VnaAogaWYge1tjYXRjaCB7cGFja2FnZSByZXF1aXJlIFRrIDguNH0gZXJyXX0gewotICAgIHNob3dfZXJyb3Ige30gLiBbbWMgIlNvcnJ5LCBnaXRrIGNhbm5vdCBydW4gd2l0aCB0aGlzIHZlcnNpb24gb2YgVGNsL1RrLlxuXAotCQkgICAgIEdpdGsgcmVxdWlyZXMgYXQgbGVhc3QgVGNsL1RrIDguNC4iXQorICAgIHNob3dfZXJyb3Ige30gLiAiU29ycnksIGdpdGsgY2Fubm90IHJ1biB3aXRoIHRoaXMgdmVyc2lvbiBvZiBUY2wvVGsuXG5cCisJCSAgICAgR2l0ayByZXF1aXJlcyBhdCBsZWFzdCBUY2wvVGsgOC40LiIgbGlzdAogICAgIGV4aXQgMQogfQogCkBAIC0xMDk0Nyw2ICsxMTM0OCw3IEBACiBzZXQgY21pdG1vZGUgInBhdGNoIgogc2V0IHdyYXBjb21tZW50ICJub25lIgogc2V0IHNob3duZWFydGFncyAxCitzZXQgaGlkZXJlbW90ZXMgMAogc2V0IG1heHJlZnMgMjAKIHNldCBtYXhsaW5lbGVuIDIwMAogc2V0IHNob3dsb2NhbGNoYW5nZXMgMQpAQCAtMTA5NTQsNiArMTEzNTYsNyBAQAogc2V0IGRhdGV0aW1lZm9ybWF0ICIlWS0lbS0lZCAlSDolTTolUyIKIHNldCBhdXRvc2VsZWN0IDEKIHNldCBwZXJmaWxlX2F0dHJzIDAKK3NldCB3YW50X3R0ayAxCiAKIGlmIHtbdGsgd2luZG93aW5nc3lzdGVtXSBlcSAiYXF1YSJ9IHsKICAgICBzZXQgZXh0ZGlmZnRvb2wgIm9wZW5kaWZmIgpAQCAtMTA5NjIsMTIgKzExMzY1LDIwIEBACiB9CiAKIHNldCBjb2xvcnMge2dyZWVuIHJlZCBibHVlIG1hZ2VudGEgZGFya2dyZXkgYnJvd24gb3JhbmdlfQotc2V0IGJnY29sb3Igd2hpdGUKLXNldCBmZ2NvbG9yIGJsYWNrCitpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gZXEgIndpbjMyIn0geworICAgIHNldCB1aWNvbG9yIFN5c3RlbUJ1dHRvbkZhY2UKKyAgICBzZXQgYmdjb2xvciBTeXN0ZW1XaW5kb3cKKyAgICBzZXQgZmdjb2xvciBTeXN0ZW1CdXR0b25UZXh0CisgICAgc2V0IHNlbGVjdGJnY29sb3IgU3lzdGVtSGlnaGxpZ2h0Cit9IGVsc2UgeworICAgIHNldCB1aWNvbG9yIGdyZXk4NQorICAgIHNldCBiZ2NvbG9yIHdoaXRlCisgICAgc2V0IGZnY29sb3IgYmxhY2sKKyAgICBzZXQgc2VsZWN0Ymdjb2xvciBncmF5ODUKK30KIHNldCBkaWZmY29sb3JzIHtyZWQgIiMwMGEwMDAiIGJsdWV9CiBzZXQgZGlmZmNvbnRleHQgMwogc2V0IGlnbm9yZXNwYWNlIDAKLXNldCBzZWxlY3RiZ2NvbG9yIGdyYXk4NQogc2V0IG1hcmtiZ2NvbG9yICIjZTBlMGZmIgogCiBzZXQgY2lyY2xlY29sb3JzIHt3aGl0ZSBibHVlIGdyYXkgYmx1ZSBibHVlfQpAQCAtMTEwMTMsNiArMTE0MjQsOCBAQAogcGFyc2Vmb250IHVpZm9udCAkdWlmb250CiBldmFsIGZvbnQgY3JlYXRlIHVpZm9udCBbZm9udGZsYWdzIHVpZm9udF0KIAorc2V0dWkgJHVpY29sb3IKKwogc2V0b3B0aW9ucwogCiAjIGNoZWNrIHRoYXQgd2UgY2FuIGZpbmQgYSAuZ2l0IGRpcmVjdG9yeSBzb21ld2hlcmUuLi4KQEAgLTExMDkwLDYgKzExNTAzLDEzIEBACiBzZXQgbnVsbGZpbGUgIi9kZXYvbnVsbCIKIAogc2V0IGhhdmVfdGs4NSBbZXhwciB7W3BhY2thZ2UgdmNvbXBhcmUgJHRrX3ZlcnNpb24gIjguNSJdID49IDB9XQoraWYgeyFbaW5mbyBleGlzdHMgaGF2ZV90dGtdfSB7CisgICAgc2V0IGhhdmVfdHRrIFtsbGVuZ3RoIFtpbmZvIGNvbW1hbmRzIDo6dHRrOjpzdHlsZV1dCit9CitzZXQgdXNlX3R0ayBbZXhwciB7JGhhdmVfdHRrICYmICR3YW50X3R0a31dCitzZXQgTlMgW2V4cHIgeyR1c2VfdHRrID8gInR0ayIgOiAiIn1dCisKK3NldCBnaXRfdmVyc2lvbiBbam9pbiBbbHJhbmdlIFtzcGxpdCBbbGluZGV4IFtleGVjIGdpdCB2ZXJzaW9uXSBlbmRdIC5dIDAgMl0gLl0KIAogc2V0IHJ1bnEge30KIHNldCBoaXN0b3J5IHt9CmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9kZS5wbyBiL2dpdGstZ2l0L3BvL2RlLnBvCmluZGV4IDgyNWRjOTguLmM3OWFhOWMgMTAwNjQ0Ci0tLSBhL2dpdGstZ2l0L3BvL2RlLnBvCisrKyBiL2dpdGstZ2l0L3BvL2RlLnBvCkBAIC0xLDgyMCArMSw5ODkgQEAKICMgVHJhbnNsYXRpb24gb2YgZ2l0ayB0byBHZXJtYW4uCiAjIENvcHlyaWdodCAoQykgMjAwNyBQYXVsIE1hY2tlcnJhcy4KICMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdGsgcGFja2FnZS4KLSMgQ2hyaXN0aWFuIFN0aW1taW5nIDxzdGltbWluZ0B0dWhoLmRlPiwgMjAwNwogIworIyBDaHJpc3RpYW4gU3RpbW1pbmcgPHN0aW1taW5nQHR1aGguZGU+LCAyMDA3LgorIyBGcmVkZXJpayBTY2h3YXJ6ZXIgPHNjaHdhcnplcmZAZ21haWwuY29tPiwgMjAwOC4KIG1zZ2lkICIiCiBtc2dzdHIgIiIKICJQcm9qZWN0LUlkLVZlcnNpb246IGdpdC1ndWlcbiIKICJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMDgtMTItMDYgMjA6NDArMDEwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMDgtMTItMDYgMjA6NDUrMDEwMFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEwLTAxLTI3IDIwOjIxKzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTAxLTI3IDIwOjI3KzAxMDBcbiIKICJMYXN0LVRyYW5zbGF0b3I6IENocmlzdGlhbiBTdGltbWluZyA8c3RpbW1pbmdAdHVoaC5kZT5cbiIKICJMYW5ndWFnZS1UZWFtOiBHZXJtYW5cbiIKICJNSU1FLVZlcnNpb246IDEuMFxuIgogIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgogIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKIAotIzogZ2l0azoxMTMKKyM6IGdpdGs6MTE1CiBtc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgotbXNnc3RyICJMaXN0ZSBkZXIgbmljaHQtenVzYW1tZW5nZWbDvGhydGVuIERhdGVpZW4gbmljaHQgZ2VmdW5kZW46IgorbXNnc3RyICJMaXN0ZSBkZXIgbmljaHQgenVzYW1tZW5nZWbDvGhydGVuIERhdGVpZW4gbmljaHQgZ2VmdW5kZW46IgogCi0jOiBnaXRrOjI3MgorIzogZ2l0azoyNzQKIG1zZ2lkICJFcnJvciBwYXJzaW5nIHJldmlzaW9uczoiCiBtc2dzdHIgIkZlaGxlciBiZWltIExhZGVuIGRlciBWZXJzaW9uZW46IgogCi0jOiBnaXRrOjMyNworIzogZ2l0azozMjkKIG1zZ2lkICJFcnJvciBleGVjdXRpbmcgLS1hcmdzY21kIGNvbW1hbmQ6IgotbXNnc3RyICJGZWhsZXIgYmVpbSAtLWFyZ3NjbWQgS29tbWFuZG86IgorbXNnc3RyICJGZWhsZXIgYmVpbSBBdXNmw7xocmVuIGRlcyAtLWFyZ3NjbWQtS29tbWFuZG9zOiIKIAotIzogZ2l0azozNDAKKyM6IGdpdGs6MzQyCiBtc2dpZCAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyBmaWxlcyBhcmUgdW5tZXJnZWQuIgogbXNnc3RyICIiCi0iS2VpbmUgRGF0ZWllbiBhdXNnZXfDpGhsdDogLS1tZXJnZSBhbmdlZ2ViZW4sIGVzIGV4aXN0aWVyZW4gYWJlciBrZWluZSBuaWNodC0iCi0ienVzYW1tZW5nZWbDvGhydGVuIERhdGVpZW4uIgorIktlaW5lIERhdGVpZW4gYXVzZ2V3w6RobHQ6IEVzIHd1cmRlIC0tbWVyZ2UgYW5nZWdlYmVuLCBhYmVyIGVzIGV4aXN0aWVyZW4gIgorImtlaW5lIG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlbiBEYXRlaWVuLiIKIAotIzogZ2l0azozNDMKKyM6IGdpdGs6MzQ1CiBtc2dpZCAiIgogIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gdW5tZXJnZWQgZmlsZXMgYXJlIHdpdGhpbiBmaWxlICIKICJsaW1pdC4iCiBtc2dzdHIgIiIKLSJLZWluZSBEYXRlaWVuIGF1c2dld8OkaGxlOiAtLW1lcmdlIGFuZ2VnZWJlbiwgYWJlciBrZWluZSBuaWNodC0iCi0ienVzYW1tZW5nZWbDvGhydGVuIERhdGVpZW4gc2luZCBpbiBkZXIgRGF0ZWlhdXN3YWhsLiIKKyJLZWluZSBEYXRlaWVuIGF1c2dld8OkaGx0OiBFcyB3dXJkZSAtLW1lcmdlIGFuZ2VnZWJlbiwgYWJlciBlcyBzaW5kIGtlaW5lICIKKyJuaWNodCB6dXNhbW1lbmdlZsO8aHJ0ZW4gRGF0ZWllbiBpbiBkZXIgRGF0ZWlhdXN3YWhsLiIKIAotIzogZ2l0azozNjUgZ2l0azo1MDMKKyM6IGdpdGs6MzY3IGdpdGs6NTE0CiBtc2dpZCAiRXJyb3IgZXhlY3V0aW5nIGdpdCBsb2c6IgotbXNnc3RyICJGZWhsZXIgYmVpbSBBdXNmw7xocmVuIHZvbiBnaXQtbG9nOiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gQXVzZsO8aHJlbiB2b24gwrtnaXQgbG9nwqs6IgogCi0jOiBnaXRrOjM3OAorIzogZ2l0azozODUgZ2l0azo1MzAKIG1zZ2lkICJSZWFkaW5nIgogbXNnc3RyICJMZXNlbiIKIAotIzogZ2l0azo0MzggZ2l0azozNDYyCisjOiBnaXRrOjQ0NSBnaXRrOjQyNjEKIG1zZ2lkICJSZWFkaW5nIGNvbW1pdHMuLi4iCi1tc2dzdHIgIlZlcnNpb25lbiBsZXNlbi4uLiIKK21zZ3N0ciAiVmVyc2lvbmVuIHdlcmRlbiBnZWxlc2VuIC4uLiIKIAotIzogZ2l0azo0NDEgZ2l0azoxNTI4IGdpdGs6MzQ2NQorIzogZ2l0azo0NDggZ2l0azoxNTc4IGdpdGs6NDI2NAogbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCi1tc2dzdHIgIktlaW5lIFZlcnNpb25lbiBhdXNnZXfDpGhsdC4iCittc2dzdHIgIktlaW5lIFZlcnNpb25lbiBhdXNnZXfDpGhsdCIKIAotIzogZ2l0azoxMzk5CisjOiBnaXRrOjE0NTQKIG1zZ2lkICJDYW4ndCBwYXJzZSBnaXQgbG9nIG91dHB1dDoiCi1tc2dzdHIgIkF1c2dhYmUgdm9uIGdpdC1sb2cga2FubiBuaWNodCBlcmthbm50IHdlcmRlbjoiCittc2dzdHIgIkF1c2dhYmUgdm9uIMK7Z2l0IGxvZ8KrIGthbm4gbmljaHQgZXJrYW5udCB3ZXJkZW46IgogCi0jOiBnaXRrOjE2MDUKKyM6IGdpdGs6MTY3NAogbXNnaWQgIk5vIGNvbW1pdCBpbmZvcm1hdGlvbiBhdmFpbGFibGUiCiBtc2dzdHIgIktlaW5lIFZlcnNpb25zaW5mb3JtYXRpb24gdmVyZsO8Z2JhciIKIAotIzogZ2l0azoxNzA5IGdpdGs6MTczMSBnaXRrOjMyNTkgZ2l0azo3NzY0IGdpdGs6OTI5MyBnaXRrOjk0NjYKKyM6IGdpdGs6MTgxNgorbXNnaWQgIm1jIgorbXNnc3RyICJtYyIKKworIzogZ2l0azoxODUxIGdpdGs6NDA1NCBnaXRrOjkwNDQgZ2l0azoxMDU4NSBnaXRrOjEwODA0CiBtc2dpZCAiT0siCiBtc2dzdHIgIk9rIgogCi0jOiBnaXRrOjE3MzMgZ2l0azozMjYwIGdpdGs6NzQzOSBnaXRrOjc1MTAgZ2l0azo3NjEzIGdpdGs6NzY2MCBnaXRrOjc3NjYKLSM6IGdpdGs6OTI5NCBnaXRrOjk0NjcKKyM6IGdpdGs6MTg1MyBnaXRrOjQwNTYgZ2l0azo4NjM0IGdpdGs6ODcxMyBnaXRrOjg4MjggZ2l0azo4ODc3IGdpdGs6OTA0NgorIzogZ2l0azoxMDU4NiBnaXRrOjEwODA1CiBtc2dpZCAiQ2FuY2VsIgogbXNnc3RyICJBYmJyZWNoZW4iCiAKLSM6IGdpdGs6MTgxMQorIzogZ2l0azoxOTc1CiBtc2dpZCAiVXBkYXRlIgogbXNnc3RyICJBa3R1YWxpc2llcmVuIgogCi0jOiBnaXRrOjE4MTIKKyM6IGdpdGs6MTk3NgogbXNnaWQgIlJlbG9hZCIKIG1zZ3N0ciAiTmV1IGxhZGVuIgogCi0jOiBnaXRrOjE4MTMKKyM6IGdpdGs6MTk3NwogbXNnaWQgIlJlcmVhZCByZWZlcmVuY2VzIgogbXNnc3RyICJad2VpZ2UgbmV1IGxhZGVuIgogCi0jOiBnaXRrOjE4MTQKKyM6IGdpdGs6MTk3OAogbXNnaWQgIkxpc3QgcmVmZXJlbmNlcyIKIG1zZ3N0ciAiWndlaWdlL01hcmtpZXJ1bmdlbiBhdWZsaXN0ZW4iCiAKLSM6IGdpdGs6MTkxNQorIzogZ2l0azoxOTgwCiBtc2dpZCAiU3RhcnQgZ2l0IGd1aSIKIG1zZ3N0ciAiwrtnaXQgZ3Vpwqsgc3RhcnRlbiIKIAotIzogZ2l0azoxOTE3CisjOiBnaXRrOjE5ODIKIG1zZ2lkICJRdWl0IgogbXNnc3RyICJCZWVuZGVuIgogCi0jOiBnaXRrOjE4MTAKKyM6IGdpdGs6MTk3NAogbXNnaWQgIkZpbGUiCiBtc2dzdHIgIkRhdGVpIgogCi0jOiBnaXRrOjE4MTgKKyM6IGdpdGs6MTk4NgogbXNnaWQgIlByZWZlcmVuY2VzIgogbXNnc3RyICJFaW5zdGVsbHVuZ2VuIgogCi0jOiBnaXRrOjE4MTcKKyM6IGdpdGs6MTk4NQogbXNnaWQgIkVkaXQiCiBtc2dzdHIgIkJlYXJiZWl0ZW4iCiAKLSM6IGdpdGs6MTgyMQorIzogZ2l0azoxOTkwCiBtc2dpZCAiTmV3IHZpZXcuLi4iCi1tc2dzdHIgIk5ldWUgQW5zaWNodC4uLiIKK21zZ3N0ciAiTmV1ZSBBbnNpY2h0IC4uLiIKIAotIzogZ2l0azoxODIyCisjOiBnaXRrOjE5OTEKIG1zZ2lkICJFZGl0IHZpZXcuLi4iCi1tc2dzdHIgIkFuc2ljaHQgYmVhcmJlaXRlbi4uLiIKK21zZ3N0ciAiQW5zaWNodCBiZWFyYmVpdGVuIC4uLiIKIAotIzogZ2l0azoxODIzCisjOiBnaXRrOjE5OTIKIG1zZ2lkICJEZWxldGUgdmlldyIKLW1zZ3N0ciAiQW5zaWNodCBsw7ZzY2hlbiIKK21zZ3N0ciAiQW5zaWNodCBlbnRmZXJuZW4iCiAKLSM6IGdpdGs6MTgyNQorIzogZ2l0azoxOTk0CiBtc2dpZCAiQWxsIGZpbGVzIgogbXNnc3RyICJBbGxlIERhdGVpZW4iCiAKLSM6IGdpdGs6MTgyMCBnaXRrOjMxOTYKKyM6IGdpdGs6MTk4OSBnaXRrOjM4MDgKIG1zZ2lkICJWaWV3IgogbXNnc3RyICJBbnNpY2h0IgogCi0jOiBnaXRrOjE4MjggZ2l0azoyNDg3CisjOiBnaXRrOjE5OTkgZ2l0azoyMDA5IGdpdGs6Mjc4MAogbXNnaWQgIkFib3V0IGdpdGsiCiBtc2dzdHIgIsOcYmVyIGdpdGsiCiAKLSM6IGdpdGs6MTgyOQorIzogZ2l0azoyMDAwIGdpdGs6MjAxNAogbXNnaWQgIktleSBiaW5kaW5ncyIKIG1zZ3N0ciAiVGFzdGVua8O8cnplbCIKIAotIzogZ2l0azoxODI3CisjOiBnaXRrOjE5OTggZ2l0azoyMDEzCiBtc2dpZCAiSGVscCIKIG1zZ3N0ciAiSGlsZmUiCiAKLSM6IGdpdGs6MTg4NwotbXNnaWQgIlNIQTEgSUQ6ICIKLW1zZ3N0ciAiU0hBMToiCisjOiBnaXRrOjIwOTEgZ2l0azo4MTEwCittc2dpZCAiU0hBMSBJRDoiCittc2dzdHIgIlNIQTEgSUQ6IgogCi0jOiBnaXRrOjE5MTgKKyM6IGdpdGs6MjEyMgogbXNnaWQgIlJvdyIKIG1zZ3N0ciAiWmVpbGUiCiAKLSM6IGdpdGs6MTk0OQorIzogZ2l0azoyMTYwCiBtc2dpZCAiRmluZCIKIG1zZ3N0ciAiU3VjaGUiCiAKLSM6IGdpdGs6MTk1MAorIzogZ2l0azoyMTYxCiBtc2dpZCAibmV4dCIKIG1zZ3N0ciAibsOkY2hzdGUiCiAKLSM6IGdpdGs6MTk1MQorIzogZ2l0azoyMTYyCiBtc2dpZCAicHJldiIKIG1zZ3N0ciAidm9yaWdlIgogCi0jOiBnaXRrOjE5NTIKKyM6IGdpdGs6MjE2MwogbXNnaWQgImNvbW1pdCIKIG1zZ3N0ciAiVmVyc2lvbiBuYWNoIgogCi0jOiBnaXRrOjE5NTUgZ2l0azoxOTU3IGdpdGs6MzYxNyBnaXRrOjM2NDAgZ2l0azozNjY0IGdpdGs6NTU1MCBnaXRrOjU2MjEKKyM6IGdpdGs6MjE2NiBnaXRrOjIxNjggZ2l0azo0NDIyIGdpdGs6NDQ0NSBnaXRrOjQ0NjkgZ2l0azo2NDEwIGdpdGs6NjQ4MgorIzogZ2l0azo2NTY2CiBtc2dpZCAiY29udGFpbmluZzoiCiBtc2dzdHIgIkJlc2NocmVpYnVuZzoiCiAKLSM6IGdpdGs6MTk1OCBnaXRrOjI5NTQgZ2l0azoyOTU5IGdpdGs6MzY5MgorIzogZ2l0azoyMTY5IGdpdGs6MzI5MCBnaXRrOjMyOTUgZ2l0azo0NDk3CiBtc2dpZCAidG91Y2hpbmcgcGF0aHM6IgogbXNnc3RyICJEYXRlaWVuOiIKIAotIzogZ2l0azoxOTU5IGdpdGs6MzY5NworIzogZ2l0azoyMTcwIGdpdGs6NDUwMgogbXNnaWQgImFkZGluZy9yZW1vdmluZyBzdHJpbmc6IgogbXNnc3RyICLDhG5kZXJ1bmdlbjoiCiAKLSM6IGdpdGs6MTk2OCBnaXRrOjE5NzAKKyM6IGdpdGs6MjE3OSBnaXRrOjIxODEKIG1zZ2lkICJFeGFjdCIKIG1zZ3N0ciAiRXhha3QiCiAKLSM6IGdpdGs6MTk3MCBnaXRrOjM3NzMgZ2l0azo1NTE4CisjOiBnaXRrOjIxODEgZ2l0azo0NTc3IGdpdGs6NjM3OAogbXNnaWQgIklnbkNhc2UiCiBtc2dzdHIgIktlaW4gR3Jvw58vS2xlaW4iCiAKLSM6IGdpdGs6MTk3MCBnaXRrOjM2NjYgZ2l0azozNzcxIGdpdGs6NTUxNAorIzogZ2l0azoyMTgxIGdpdGs6NDQ3MSBnaXRrOjQ1NzUgZ2l0azo2Mzc0CiBtc2dpZCAiUmVnZXhwIgogbXNnc3RyICJSZWdleHAiCiAKLSM6IGdpdGs6MTk3MiBnaXRrOjE5NzMgZ2l0azozNzkyIGdpdGs6MzgyMiBnaXRrOjM4MjkgZ2l0azo1NjQxIGdpdGs6NTcwOAorIzogZ2l0azoyMTgzIGdpdGs6MjE4NCBnaXRrOjQ1OTYgZ2l0azo0NjI2IGdpdGs6NDYzMyBnaXRrOjY1MDIgZ2l0azo2NTcwCiBtc2dpZCAiQWxsIGZpZWxkcyIKIG1zZ3N0ciAiQWxsZSBGZWxkZXIiCiAKLSM6IGdpdGs6MTk3MyBnaXRrOjM3OTAgZ2l0azozODIyIGdpdGs6NTU4MAorIzogZ2l0azoyMTg0IGdpdGs6NDU5NCBnaXRrOjQ2MjYgZ2l0azo2NDQxCiBtc2dpZCAiSGVhZGxpbmUiCiBtc2dzdHIgIsOcYmVyc2NocmlmdCIKIAotIzogZ2l0azoxOTc0IGdpdGs6Mzc5MCBnaXRrOjU1ODAgZ2l0azo1NzA4IGdpdGs6NjEwOQorIzogZ2l0azoyMTg1IGdpdGs6NDU5NCBnaXRrOjY0NDEgZ2l0azo2NTcwIGdpdGs6NzAwMwogbXNnaWQgIkNvbW1lbnRzIgogbXNnc3RyICJCZXNjaHJlaWJ1bmciCiAKLSM6IGdpdGs6MTk3NCBnaXRrOjM3OTAgZ2l0azozNzk0IGdpdGs6MzgyOSBnaXRrOjU1ODAgZ2l0azo2MDQ1IGdpdGs6NzI4NQotIzogZ2l0azo3MzAwCisjOiBnaXRrOjIxODUgZ2l0azo0NTk0IGdpdGs6NDU5OCBnaXRrOjQ2MzMgZ2l0azo2NDQxIGdpdGs6NjkzOCBnaXRrOjgyODUKKyM6IGdpdGs6ODMwMAogbXNnaWQgIkF1dGhvciIKIG1zZ3N0ciAiQXV0b3IiCiAKLSM6IGdpdGs6MTk3NCBnaXRrOjM3OTAgZ2l0azo1NTgwIGdpdGs6NjA0NworIzogZ2l0azoyMTg1IGdpdGs6NDU5NCBnaXRrOjY0NDEgZ2l0azo2OTQwCiBtc2dpZCAiQ29tbWl0dGVyIgogbXNnc3RyICJFaW50cmFnZW5kZXIiCiAKLSM6IGdpdGs6MjAwMworIzogZ2l0azoyMjE2CiBtc2dpZCAiU2VhcmNoIgotbXNnc3RyICJTdWNoZSIKK21zZ3N0ciAiU3VjaGVuIgogCi0jOiBnaXRrOjIwMTAKKyM6IGdpdGs6MjIyNAogbXNnaWQgIkRpZmYiCiBtc2dzdHIgIlZlcmdsZWljaCIKIAotIzogZ2l0azoyMDEyCisjOiBnaXRrOjIyMjYKIG1zZ2lkICJPbGQgdmVyc2lvbiIKIG1zZ3N0ciAiQWx0ZSBWZXJzaW9uIgogCi0jOiBnaXRrOjIwMTQKKyM6IGdpdGs6MjIyOAogbXNnaWQgIk5ldyB2ZXJzaW9uIgogbXNnc3RyICJOZXVlIFZlcnNpb24iCiAKLSM6IGdpdGs6MjAxNgorIzogZ2l0azoyMjMwCiBtc2dpZCAiTGluZXMgb2YgY29udGV4dCIKIG1zZ3N0ciAiS29udGV4dHplaWxlbiIKIAotIzogZ2l0azoyMDI2CisjOiBnaXRrOjIyNDAKIG1zZ2lkICJJZ25vcmUgc3BhY2UgY2hhbmdlIgogbXNnc3RyICJMZWVyemVpY2hlbsOkbmRlcnVuZ2VuIGlnbm9yaWVyZW4iCiAKLSM6IGdpdGs6MjA4NAorIzogZ2l0azoyMjk5CiBtc2dpZCAiUGF0Y2giCiBtc2dzdHIgIlBhdGNoIgogCi0jOiBnaXRrOjIwODYKKyM6IGdpdGs6MjMwMQogbXNnaWQgIlRyZWUiCiBtc2dzdHIgIkJhdW0iCiAKLSM6IGdpdGs6MjIxMyBnaXRrOjIyMjYKKyM6IGdpdGs6MjQ1NiBnaXRrOjI0NzMKIG1zZ2lkICJEaWZmIHRoaXMgLT4gc2VsZWN0ZWQiCi1tc2dzdHIgIlZlcmdsZWljaCBkaWVzZSAtPiBnZXfDpGhsdGUiCittc2dzdHIgIlZlcmdsZWljaDogZGllc2UgLT4gZ2V3w6RobHRlIgogCi0jOiBnaXRrOjIyMTQgZ2l0azoyMjI3CisjOiBnaXRrOjI0NTcgZ2l0azoyNDc0CiBtc2dpZCAiRGlmZiBzZWxlY3RlZCAtPiB0aGlzIgotbXNnc3RyICJWZXJnbGVpY2ggZ2V3w6RobHRlIC0+IGRpZXNlIgorbXNnc3RyICJWZXJnbGVpY2g6IGdld8OkaGx0ZSAtPiBkaWVzZSIKIAotIzogZ2l0azoyMjE1IGdpdGs6MjIyOAorIzogZ2l0azoyNDU4IGdpdGs6MjQ3NQogbXNnaWQgIk1ha2UgcGF0Y2giCiBtc2dzdHIgIlBhdGNoIGVyc3RlbGxlbiIKIAotIzogZ2l0azoyMjE2IGdpdGs6NzQ5NAorIzogZ2l0azoyNDU5IGdpdGs6ODY5MgogbXNnaWQgIkNyZWF0ZSB0YWciCiBtc2dzdHIgIk1hcmtpZXJ1bmcgZXJzdGVsbGVuIgogCi0jOiBnaXRrOjIyMTcgZ2l0azo3NTkzCisjOiBnaXRrOjI0NjAgZ2l0azo4ODA4CiBtc2dpZCAiV3JpdGUgY29tbWl0IHRvIGZpbGUiCiBtc2dzdHIgIlZlcnNpb24gaW4gRGF0ZWkgc2NocmVpYmVuIgogCi0jOiBnaXRrOjIyMTggZ2l0azo3NjQ3CisjOiBnaXRrOjI0NjEgZ2l0azo4ODY1CiBtc2dpZCAiQ3JlYXRlIG5ldyBicmFuY2giCiBtc2dzdHIgIk5ldWVuIFp3ZWlnIGVyc3RlbGxlbiIKIAotIzogZ2l0azoyMjE5CisjOiBnaXRrOjI0NjIKIG1zZ2lkICJDaGVycnktcGljayB0aGlzIGNvbW1pdCIKIG1zZ3N0ciAiRGllc2UgVmVyc2lvbiBwZmzDvGNrZW4iCiAKLSM6IGdpdGs6MjIyMAorIzogZ2l0azoyNDYzCiBtc2dpZCAiUmVzZXQgSEVBRCBicmFuY2ggdG8gaGVyZSIKIG1zZ3N0ciAiSEVBRC1ad2VpZyBhdWYgZGllc2UgVmVyc2lvbiB6dXLDvGNrc2V0emVuIgogCi0jOiBnaXRrOjIyMzQKKyM6IGdpdGs6MjQ2NAorbXNnaWQgIk1hcmsgdGhpcyBjb21taXQiCittc2dzdHIgIkxlc2V6ZWljaGVuIHNldHplbiIKKworIzogZ2l0azoyNDY1Cittc2dpZCAiUmV0dXJuIHRvIG1hcmsiCittc2dzdHIgIlp1bSBMZXNlemVpY2hlbiIKKworIzogZ2l0azoyNDY2Cittc2dpZCAiRmluZCBkZXNjZW5kYW50IG9mIHRoaXMgYW5kIG1hcmsiCittc2dzdHIgIkFia8O2bW1saW5nIHZvbiBMZXNlemVpY2hlbiB1bmQgZGllc2VyIFZlcnNpb24gZmluZGVuIgorCisjOiBnaXRrOjI0NjcKK21zZ2lkICJDb21wYXJlIHdpdGggbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAiTWl0IExlc2V6ZWljaGVuIHZlcmdsZWljaGVuIgorCisjOiBnaXRrOjI0ODEKIG1zZ2lkICJDaGVjayBvdXQgdGhpcyBicmFuY2giCiBtc2dzdHIgIkF1ZiBkaWVzZW4gWndlaWcgdW1zdGVsbGVuIgogCi0jOiBnaXRrOjIyMzUKKyM6IGdpdGs6MjQ4MgogbXNnaWQgIlJlbW92ZSB0aGlzIGJyYW5jaCIKIG1zZ3N0ciAiWndlaWcgbMO2c2NoZW4iCiAKLSM6IGdpdGs6MjI0MgorIzogZ2l0azoyNDg5CiBtc2dpZCAiSGlnaGxpZ2h0IHRoaXMgdG9vIgogbXNnc3RyICJEaWVzZW4gYXVjaCBoZXJ2b3JoZWJlbiIKIAotIzogZ2l0azoyMjQzCisjOiBnaXRrOjI0OTAKIG1zZ2lkICJIaWdobGlnaHQgdGhpcyBvbmx5IgogbXNnc3RyICJOdXIgZGllc2VuIGhlcnZvcmhlYmVuIgogCi0jOiBnaXRrOjIyNDQKKyM6IGdpdGs6MjQ5MQogbXNnaWQgIkV4dGVybmFsIGRpZmYiCi1tc2dzdHIgIkV4dGVybmVyIFZlcmdsZWljaCIKK21zZ3N0ciAiRXh0ZXJuZXMgRGlmZi1Qcm9ncmFtbSIKIAotIzogZ2l0azoyMjU1CisjOiBnaXRrOjI0OTIKIG1zZ2lkICJCbGFtZSBwYXJlbnQgY29tbWl0IgogbXNnc3RyICJBbm5vdGllcmVuIGRlciBFbHRlcm52ZXJzaW9uIgogCi0jOiBnaXRrOjIzNjAKKyM6IGdpdGs6MjQ5OQogbXNnaWQgIlNob3cgb3JpZ2luIG9mIHRoaXMgbGluZSIKIG1zZ3N0ciAiSGVya3VuZnQgZGllc2VyIFplaWxlIGFuemVpZ2VuIgogCi0jOiBnaXRrOjIzNjEKKyM6IGdpdGs6MjUwMAogbXNnaWQgIlJ1biBnaXQgZ3VpIGJsYW1lIG9uIHRoaXMgbGluZSIKLW1zZ3N0ciAiQW5ub3RpZXJlbiAowrtnaXQgZ3VpIGJsYW1lwqspIHZvbiBkaWVzZXIgWmVpbGUiCittc2dzdHIgIkRpZXNlIFplaWxlIGFubm90aWVyZW4gKMK7Z2l0IGd1aSBibGFtZcKrKSIKIAotIzogZ2l0azoyNjA2CisjOiBnaXRrOjI3ODIKIG1zZ2lkICIiCiAiXG4iCiAiR2l0ayAtIGEgY29tbWl0IHZpZXdlciBmb3IgZ2l0XG4iCiAiXG4iCi0iQ29weXJpZ2h0IMKpIDIwMDUtMjAwOCBQYXVsIE1hY2tlcnJhc1xuIgorIkNvcHlyaWdodCDCqTkgMjAwNS0yMDA5IFBhdWwgTWFja2VycmFzXG4iCiAiXG4iCiAiVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKIG1zZ3N0ciAiIgogIlxuIgotIkdpdGsgLSBlaW5lIFZpc3VhbGlzaWVydW5nIGRlciBHaXQgSGlzdG9yaWVcbiIKKyJHaXRrIC0gZWluZSBWaXN1YWxpc2llcnVuZyBkZXIgR2l0LUhpc3RvcmllXG4iCiAiXG4iCi0iQ29weXJpZ2h0IMKpIDIwMDUtMjAwOCBQYXVsIE1hY2tlcnJhc1xuIgorIkNvcHlyaWdodCDCqSAyMDA1LTIwMDkgUGF1bCBNYWNrZXJyYXNcbiIKICJcbiIKLSJCZW51dHp1bmcgdW5kIFdlaXRlcnZlcmJyZWl0dW5nIGdlbcOkw58gZGVuIEJlZGluZ3VuZ2VuIGRlciBHTlUgR2VuZXJhbCBQdWJsaWMgIgotIkxpY2Vuc2UiCisiQmVudXR6dW5nIHVuZCBXZWl0ZXJ2ZXJicmVpdHVuZyBnZW3DpMOfIGRlbiBCZWRpbmd1bmdlbiBkZXIgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCiAKLSM6IGdpdGs6MjQ5NiBnaXRrOjI1NTcgZ2l0azo3OTQzCisjOiBnaXRrOjI3OTAgZ2l0azoyODU0IGdpdGs6OTIzMAogbXNnaWQgIkNsb3NlIgogbXNnc3RyICJTY2hsaWXDn2VuIgogCi0jOiBnaXRrOjI1MTUKKyM6IGdpdGs6MjgxMQogbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzIgotbXNnc3RyICJHaXRrIFRhc3RhdHVyYmVsZWd1bmciCittc2dzdHIgIkdpdGstVGFzdGF0dXJiZWxlZ3VuZyIKIAotIzogZ2l0azoyNTE3CisjOiBnaXRrOjI4MTQKIG1zZ2lkICJHaXRrIGtleSBiaW5kaW5nczoiCi1tc2dzdHIgIkdpdGsgVGFzdGF0dXJiZWxlZ3VuZzoiCittc2dzdHIgIkdpdGstVGFzdGF0dXJiZWxlZ3VuZzoiCiAKLSM6IGdpdGs6MjUxOQorIzogZ2l0azoyODE2CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLVE+XHRcdFF1aXQiCiBtc2dzdHIgIjwlcy1RPlx0XHRCZWVuZGVuIgogCi0jOiBnaXRrOjI1MjAKKyM6IGdpdGs6MjgxNwogbXNnaWQgIjxIb21lPlx0XHRNb3ZlIHRvIGZpcnN0IGNvbW1pdCIKIG1zZ3N0ciAiPFBvczE+XHRcdFp1ciBuZXVlc3RlbiBWZXJzaW9uIHNwcmluZ2VuIgogCi0jOiBnaXRrOjI1MjEKKyM6IGdpdGs6MjgxOAogbXNnaWQgIjxFbmQ+XHRcdE1vdmUgdG8gbGFzdCBjb21taXQiCiBtc2dzdHIgIjxFbmRlPlx0XHRadXIgw6RsdGVzdGVuIFZlcnNpb24gc3ByaW5nZW4iCiAKLSM6IGdpdGs6MjUyMgorIzogZ2l0azoyODE5CiBtc2dpZCAiPFVwPiwgcCwgaVx0TW92ZSB1cCBvbmUgY29tbWl0IgogbXNnc3RyICI8SG9jaD4sIHAsIGlcdE7DpGNoc3RlIG5ldWVyZSBWZXJzaW9uIgogCi0jOiBnaXRrOjI1MjMKKyM6IGdpdGs6MjgyMAogbXNnaWQgIjxEb3duPiwgbiwga1x0TW92ZSBkb3duIG9uZSBjb21taXQiCiBtc2dzdHIgIjxSdW50ZXI+LCBuLCBrXHROw6RjaHN0ZSDDpGx0ZXJlIFZlcnNpb24iCiAKLSM6IGdpdGs6MjUyNAorIzogZ2l0azoyODIxCiBtc2dpZCAiPExlZnQ+LCB6LCBqXHRHbyBiYWNrIGluIGhpc3RvcnkgbGlzdCIKIG1zZ3N0ciAiPExpbmtzPiwgeiwgalx0RWluZSBWZXJzaW9uIHp1csO8Y2tnZWhlbiIKIAotIzogZ2l0azoyNTI1CisjOiBnaXRrOjI4MjIKIG1zZ2lkICI8UmlnaHQ+LCB4LCBsXHRHbyBmb3J3YXJkIGluIGhpc3RvcnkgbGlzdCIKIG1zZ3N0ciAiPFJlY2h0cz4sIHgsIGxcdEVpbmUgVmVyc2lvbiB3ZWl0ZXJnZWhlbiIKIAotIzogZ2l0azoyNTI2CisjOiBnaXRrOjI4MjMKIG1zZ2lkICI8UGFnZVVwPlx0TW92ZSB1cCBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKIG1zZ3N0ciAiPEJpbGRIb2NoPlx0RWluZSBTZWl0ZSBuYWNoIG9iZW4gYmzDpHR0ZXJuIgogCi0jOiBnaXRrOjI1MjcKKyM6IGdpdGs6MjgyNAogbXNnaWQgIjxQYWdlRG93bj5cdE1vdmUgZG93biBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKIG1zZ3N0ciAiPEJpbGRSdW50ZXI+XHRFaW5lIFNlaXRlIG5hY2ggdW50ZW4gYmzDpHR0ZXJuIgogCi0jOiBnaXRrOjI1MjgKKyM6IGdpdGs6MjgyNQogIywgdGNsLWZvcm1hdAogbXNnaWQgIjwlcy1Ib21lPlx0U2Nyb2xsIHRvIHRvcCBvZiBjb21taXQgbGlzdCIKIG1zZ3N0ciAiPCVzLVBvczE+XHRadW0gb2JlcmVuIEVuZGUgZGVyIFZlcnNpb25zbGlzdGUgYmzDpHR0ZXJuIgogCi0jOiBnaXRrOjI1MjkKKyM6IGdpdGs6MjgyNgogIywgdGNsLWZvcm1hdAogbXNnaWQgIjwlcy1FbmQ+XHRTY3JvbGwgdG8gYm90dG9tIG9mIGNvbW1pdCBsaXN0IgogbXNnc3RyICI8JXMtRW5kZT5cdFp1bSB1bnRlcmVuIEVuZGUgZGVyIFZlcnNpb25zbGlzdGUgYmzDpHR0ZXJuIgogCi0jOiBnaXRrOjI1MzAKKyM6IGdpdGs6MjgyNwogIywgdGNsLWZvcm1hdAogbXNnaWQgIjwlcy1VcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgbGluZSIKIG1zZ3N0ciAiPCVzLUhvY2g+XHRWZXJzaW9uc2xpc3RlIGVpbmUgWmVpbGUgbmFjaCBvYmVuIGJsw6R0dGVybiIKIAotIzogZ2l0azoyNTMxCisjOiBnaXRrOjI4MjgKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICI8JXMtRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBsaW5lIgogbXNnc3RyICI8JXMtUnVudGVyPlx0VmVyc2lvbnNsaXN0ZSBlaW5lIFplaWxlIG5hY2ggdW50ZW4gYmzDpHR0ZXJuIgogCi0jOiBnaXRrOjI1MzIKKyM6IGdpdGs6MjgyOQogIywgdGNsLWZvcm1hdAogbXNnaWQgIjwlcy1QYWdlVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIHBhZ2UiCi1tc2dzdHIgIjwlcy1CaWxkSG9jaD5cdFZlcnNpb25zbGlzdGUgZWluZSBTZWl0ZSBob2NoIGJsw6R0dGVybiIKK21zZ3N0ciAiPCVzLUJpbGRIb2NoPlx0VmVyc2lvbnNsaXN0ZSBlaW5lIFNlaXRlIG5hY2ggb2JlbiBibMOkdHRlcm4iCiAKLSM6IGdpdGs6MjUzMworIzogZ2l0azoyODMwCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLVBhZ2VEb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIHBhZ2UiCiBtc2dzdHIgIjwlcy1CaWxkUnVudGVyPlx0VmVyc2lvbnNsaXN0ZSBlaW5lIFNlaXRlIG5hY2ggdW50ZW4gYmzDpHR0ZXJuIgogCi0jOiBnaXRrOjI1MzQKKyM6IGdpdGs6MjgzMQogbXNnaWQgIjxTaGlmdC1VcD5cdEZpbmQgYmFja3dhcmRzICh1cHdhcmRzLCBsYXRlciBjb21taXRzKSIKIG1zZ3N0ciAiPFVtc2NoYWx0LUhvY2g+XHRSw7xja3fDpHJ0cyBzdWNoZW4gKG5hY2ggb2JlbjsgbmV1ZXJlIFZlcnNpb25lbikiCiAKLSM6IGdpdGs6MjUzNQorIzogZ2l0azoyODMyCiBtc2dpZCAiPFNoaWZ0LURvd24+XHRGaW5kIGZvcndhcmRzIChkb3dud2FyZHMsIGVhcmxpZXIgY29tbWl0cykiCiBtc2dzdHIgIjxVbXNjaGFsdC1SdW50ZXI+IFN1Y2hlbiAobmFjaCB1bnRlbjsgw6RsdGVyZSBWZXJzaW9uZW4pIgogCi0jOiBnaXRrOjI1MzYKKyM6IGdpdGs6MjgzMwogbXNnaWQgIjxEZWxldGU+LCBiXHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgogbXNnc3RyICI8RW50Zj4sIGJcdFx0VmVyZ2xlaWNoIGVpbmUgU2VpdGUgbmFjaCBvYmVuIGJsw6R0dGVybiIKIAotIzogZ2l0azoyNTM3CisjOiBnaXRrOjI4MzQKIG1zZ2lkICI8QmFja3NwYWNlPlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKIG1zZ3N0ciAiPEzDtnNjaHRhc3RlPlx0VmVyZ2xlaWNoIGVpbmUgU2VpdGUgbmFjaCBvYmVuIGJsw6R0dGVybiIKIAotIzogZ2l0azoyNTM4CisjOiBnaXRrOjI4MzUKIG1zZ2lkICI8U3BhY2U+XHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biBvbmUgcGFnZSIKIG1zZ3N0ciAiPExlZXJ0YXN0ZT5cdFZlcmdsZWljaCBlaW5lIFNlaXRlIG5hY2ggdW50ZW4gYmzDpHR0ZXJuIgogCi0jOiBnaXRrOjI1MzkKKyM6IGdpdGs6MjgzNgogbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKLW1zZ3N0ciAidVx0XHRWZXJnbGVpY2ggdW0gMTggWmVpbGVuIG5hY2ggb2JlbiAowrt1cMKrKSBibMOkdHRlcm4iCittc2dzdHIgInVcdFx0VmVyZ2xlaWNoIHVtIDE4IFplaWxlbiBuYWNoIG9iZW4gYmzDpHR0ZXJuIgogCi0jOiBnaXRrOjI1NDAKKyM6IGdpdGs6MjgzNwogbXNnaWQgImRcdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIDE4IGxpbmVzIgotbXNnc3RyICJkXHRcdFZlcmdsZWljaCB1bSAxOCBaZWlsZW4gbmFjaCB1bnRlbiAowrtkb3duwqspIGJsw6R0dGVybiIKK21zZ3N0ciAiZFx0XHRWZXJnbGVpY2ggdW0gMTggWmVpbGVuIG5hY2ggdW50ZW4gYmzDpHR0ZXJuIgogCi0jOiBnaXRrOjI1NDEKKyM6IGdpdGs6MjgzOAogIywgdGNsLWZvcm1hdAogbXNnaWQgIjwlcy1GPlx0XHRGaW5kIgogbXNnc3RyICI8JXMtRj5cdFx0U3VjaGVuIgogCi0jOiBnaXRrOjI1NDIKKyM6IGdpdGs6MjgzOQogIywgdGNsLWZvcm1hdAogbXNnaWQgIjwlcy1HPlx0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCiBtc2dzdHIgIjwlcy1HPlx0XHRXZWl0ZXJzdWNoZW4iCiAKLSM6IGdpdGs6MjU0MworIzogZ2l0azoyODQwCiBtc2dpZCAiPFJldHVybj5cdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKIG1zZ3N0ciAiPEVpbmdhYmV0YXN0ZT5cdFdlaXRlcnN1Y2hlbiIKIAotIzogZ2l0azoyNTQ0Ci1tc2dpZCAiL1x0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQsIG9yIHJlZG8gZmluZCIKLW1zZ3N0ciAiL1x0XHRXZWl0ZXJzdWNoZW4gb2RlciBuZXVlIFN1Y2hlIGJlZ2lubmVuIgorIzogZ2l0azoyODQxCittc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKK21zZ3N0ciAiL1x0XHRUYXN0YXR1cmZva3VzIGlucyBTdWNoZmVsZCIKIAotIzogZ2l0azoyNTQ1CisjOiBnaXRrOjI4NDIKIG1zZ2lkICI/XHRcdE1vdmUgdG8gcHJldmlvdXMgZmluZCBoaXQiCiBtc2dzdHIgIj9cdFx0UsO8Y2t3w6RydHMgd2VpdGVyc3VjaGVuIgogCi0jOiBnaXRrOjI1NDYKKyM6IGdpdGs6Mjg0MwogbXNnaWQgImZcdFx0U2Nyb2xsIGRpZmYgdmlldyB0byBuZXh0IGZpbGUiCi1tc2dzdHIgImZcdFx0VmVyZ2xlaWNoIHp1ciBuw6RjaHN0ZW4gRGF0ZWkgKMK7ZmlsZcKrKSBibMOkdHRlcm4iCittc2dzdHIgImZcdFx0VmVyZ2xlaWNoIHp1ciBuw6RjaHN0ZW4gRGF0ZWkgYmzDpHR0ZXJuIgogCi0jOiBnaXRrOjI1NDcKKyM6IGdpdGs6Mjg0NAogIywgdGNsLWZvcm1hdAogbXNnaWQgIjwlcy1TPlx0XHRTZWFyY2ggZm9yIG5leHQgaGl0IGluIGRpZmYgdmlldyIKIG1zZ3N0ciAiPCVzLVM+XHRcdFdlaXRlcnN1Y2hlbiBpbSBWZXJnbGVpY2giCiAKLSM6IGdpdGs6MjU0OAorIzogZ2l0azoyODQ1CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLVI+XHRcdFNlYXJjaCBmb3IgcHJldmlvdXMgaGl0IGluIGRpZmYgdmlldyIKIG1zZ3N0ciAiPCVzLVI+XHRcdFLDvGNrd8OkcnRzIHdlaXRlcnN1Y2hlbiBpbSBWZXJnbGVpY2giCiAKLSM6IGdpdGs6MjU0OQorIzogZ2l0azoyODQ2CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLUtQKz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKLW1zZ3N0ciAiPCVzLU51bW1lcmJsb2NrLVBsdXM+XHRTY2hyaWZ0Z3LDtsOfZSB2ZXJncsO2w59lcm4iCittc2dzdHIgIjwlcy1OdW1tZXJibG9jay1QbHVzPlx0U2NocmlmdCB2ZXJncsO2w59lcm4iCiAKLSM6IGdpdGs6MjU1MAorIzogZ2l0azoyODQ3CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLXBsdXM+XHRJbmNyZWFzZSBmb250IHNpemUiCi1tc2dzdHIgIjwlcy1QbHVzPlx0U2NocmlmdGdyw7bDn2UgdmVyZ3LDtsOfZXJuIgorbXNnc3RyICI8JXMtUGx1cz5cdFNjaHJpZnQgdmVyZ3LDtsOfZXJuIgogCi0jOiBnaXRrOjI1NTEKKyM6IGdpdGs6Mjg0OAogIywgdGNsLWZvcm1hdAogbXNnaWQgIjwlcy1LUC0+XHREZWNyZWFzZSBmb250IHNpemUiCi1tc2dzdHIgIjwlcy1OdW1tZXJuYmxvY2stPiBTY2hyaWZ0Z3LDtsOfZSB2ZXJrbGVpbmVybiIKK21zZ3N0ciAiPCVzLU51bW1lcm5ibG9jay1NaW51cz4gU2NocmlmdCB2ZXJrbGVpbmVybiIKIAotIzogZ2l0azoyNTUyCisjOiBnaXRrOjI4NDkKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICI8JXMtbWludXM+XHREZWNyZWFzZSBmb250IHNpemUiCi1tc2dzdHIgIjwlcy1NaW51cz5cdFNjaHJpZnRncsO2w59lIHZlcmtsZWluZXJuIgorbXNnc3RyICI8JXMtTWludXM+XHRTY2hyaWZ0IHZlcmtsZWluZXJuIgogCi0jOiBnaXRrOjI1NTMKKyM6IGdpdGs6Mjg1MAogbXNnaWQgIjxGNT5cdFx0VXBkYXRlIgogbXNnc3RyICI8RjU+XHRcdEFrdHVhbGlzaWVyZW4iCiAKLSM6IGdpdGs6Mjk3OQorIzogZ2l0azozMzA1IGdpdGs6MzMxNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXM6IgorbXNnc3RyICJGZWhsZXIgYmVpbSBFcnpldWdlbiBkZXMgdGVtcG9yw6RyZW4gVmVyemVpY2huaXNzZXMgwrslc8KrOiIKKworIzogZ2l0azozMzI3CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiRXJyb3IgZ2V0dGluZyBcIiVzXCIgZnJvbSAlczoiCiBtc2dzdHIgIkZlaGxlciBiZWltIEhvbGVuIHZvbiDCuyVzwqsgdm9uIMK7JXPCqzoiCiAKLSM6IGdpdGs6MzAzNiBnaXRrOjMwNDUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJFcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiIKLW1zZ3N0ciAiRmVobGVyIGJlaW0gRXJ6ZXVnZW4gZWluZXMgdGVtcG9yw6RyZW4gVmVyemVpY2huaXNzZXMgwrslc8KrOiIKLQotIzogZ2l0azozMDU4CisjOiBnaXRrOjMzOTAKIG1zZ2lkICJjb21tYW5kIGZhaWxlZDoiCiBtc2dzdHIgIktvbW1hbmRvIGZlaGxnZXNjaGxhZ2VuOiIKIAotIzogZ2l0azozMDc4CisjOiBnaXRrOjM1MzkKIG1zZ2lkICJObyBzdWNoIGNvbW1pdCIKIG1zZ3N0ciAiVmVyc2lvbiBuaWNodCBnZWZ1bmRlbiIKIAotIzogZ2l0azozMDgzCisjOiBnaXRrOjM1NTMKIG1zZ2lkICJnaXQgZ3VpIGJsYW1lOiBjb21tYW5kIGZhaWxlZDoiCiBtc2dzdHIgImdpdCBndWkgYmxhbWU6IEtvbW1hbmRvIGZlaGxnZXNjaGxhZ2VuOiIKIAotIzogZ2l0azozMzk4CisjOiBnaXRrOjM1ODQKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJDb3VsZG4ndCByZWFkIG1lcmdlIGhlYWQ6ICVzIgogbXNnc3RyICJadXNhbW1lbmbDvGhydW5ncy1TcGl0emUga29ubnRlIG5pY2h0IGdlbGVzZW4gd2VyZGVuOiAlcyIKIAotIzogZ2l0azozNDA2CisjOiBnaXRrOjM1OTIKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJFcnJvciByZWFkaW5nIGluZGV4OiAlcyIKIG1zZ3N0ciAiRmVobGVyIGJlaW0gTGVzZW4gZGVyIEJlcmVpdHN0ZWxsdW5nICjCu2luZGV4wqspOiAlcyIKIAotIzogZ2l0azozNDMxCisjOiBnaXRrOjM2MTcKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJDb3VsZG4ndCBzdGFydCBnaXQgYmxhbWU6ICVzIgogbXNnc3RyICLCu2dpdCBibGFtZcKrIGtvbm50ZSBuaWNodCBnZXN0YXJ0ZXQgd2VyZGVuOiAlcyIKIAotIzogZ2l0azozNDM0IGdpdGs6NjE2MAorIzogZ2l0azozNjIwIGdpdGs6NjQwOQogbXNnaWQgIlNlYXJjaGluZyIKIG1zZ3N0ciAiU3VjaGVuIgogCi0jOiBnaXRrOjM0NjYKKyM6IGdpdGs6MzY1MgogIywgdGNsLWZvcm1hdAogbXNnaWQgIkVycm9yIHJ1bm5pbmcgZ2l0IGJsYW1lOiAlcyIKIG1zZ3N0ciAiRmVobGVyIGJlaW0gQXVzZsO8aHJlbiB2b24gwrtnaXQgYmxhbWXCqzogJXMiCiAKLSM6IGdpdGs6MzQ5NAorIzogZ2l0azozNjgwCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVGhhdCBsaW5lIGNvbWVzIGZyb20gY29tbWl0ICVzLCAgd2hpY2ggaXMgbm90IGluIHRoaXMgdmlldyIKIG1zZ3N0ciAiIgotIkRpZXNlIFplaWxlIHN0YW1tdCBhdXMgVmVyc2lvbiAlcywgd2VsY2hlIG5pY2h0IGluIGRpZXNlciBBbnNpY2h0IGdlemVpZ3QgIgotIndpcmQuIgorIkRpZXNlIFplaWxlIHN0YW1tdCBhdXMgVmVyc2lvbiAlcywgZGllIG5pY2h0IGluIGRpZXNlciBBbnNpY2h0IGdlemVpZ3Qgd2lyZCIKIAotIzogZ2l0azozNTA4CisjOiBnaXRrOjM2OTQKIG1zZ2lkICJFeHRlcm5hbCBkaWZmIHZpZXdlciBmYWlsZWQ6IgotbXNnc3RyICJFeHRlcm5lcyBWZXJnbGVpY2gtKERpZmYtKVByb2dyYW1tIGZlaGxnZXNjaGxhZ2VuOiIKK21zZ3N0ciAiRXh0ZXJuZXMgRGlmZi1Qcm9ncmFtbSBmZWhsZ2VzY2hsYWdlbjoiCiAKLSM6IGdpdGs6MzIxMAorIzogZ2l0azozODEyCiBtc2dpZCAiR2l0ayB2aWV3IGRlZmluaXRpb24iCi1tc2dzdHIgIkdpdGsgQW5zaWNodGVuIgorbXNnc3RyICJHaXRrLUFuc2ljaHRlbiIKIAotIzogZ2l0azozNjMwCisjOiBnaXRrOjM4MTYKIG1zZ2lkICJSZW1lbWJlciB0aGlzIHZpZXciCiBtc2dzdHIgIkRpZXNlIEFuc2ljaHQgc3BlaWNoZXJuIgogCi0jOiBnaXRrOjMyMzIKLW1zZ2lkICJDb21taXRzIHRvIGluY2x1ZGUgKGFyZ3VtZW50cyB0byBnaXQgbG9nKToiCi1tc2dzdHIgIlZlcnNpb25lbiBhbnplaWdlbiAoQXJndW1lbnRlIHZvbiBnaXQtbG9nKToiCisjOiBnaXRrOjM4MTcKK21zZ2lkICJSZWZlcmVuY2VzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCk6IgorbXNnc3RyICJad2VpZ2UvTWFya2llcnVuZ2VuIChkdXJjaCBMZWVyemVpY2hlbiBnZXRyZW5udGUgTGlzdGUpOiIKIAotIzogZ2l0azozNjMyCi1tc2dpZCAiVXNlIGFsbCByZWZzIgotbXNnc3RyICJBbGxlIFp3ZWlnZSB2ZXJ3ZW5kZW4iCisjOiBnaXRrOjM4MTgKK21zZ2lkICJCcmFuY2hlcyAmIHRhZ3M6IgorbXNnc3RyICJad2VpZ2UvTWFya2llcnVuZ2VuOiIKIAotIzogZ2l0azozNjMzCisjOiBnaXRrOjM4MTkKK21zZ2lkICJBbGwgcmVmcyIKK21zZ3N0ciAiQWxsZSBNYXJraWVydW5nZW4gdW5kIFp3ZWlnZSIKKworIzogZ2l0azozODIwCittc2dpZCAiQWxsIChsb2NhbCkgYnJhbmNoZXMiCittc2dzdHIgIkFsbGUgKGxva2FsZW4pIFp3ZWlnZSIKKworIzogZ2l0azozODIxCittc2dpZCAiQWxsIHRhZ3MiCittc2dzdHIgIkFsbGUgTWFya2llcnVuZ2VuIgorCisjOiBnaXRrOjM4MjIKK21zZ2lkICJBbGwgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICJBbGxlIMOcYmVybmFobWV6d2VpZ2UiCisKKyM6IGdpdGs6MzgyMworbXNnaWQgIkNvbW1pdCBJbmZvIChyZWd1bGFyIGV4cHJlc3Npb25zKToiCittc2dzdHIgIlZlcnNpb25zaW5mb3JtYXRpb25lbiAocmVndWzDpHJlIEF1c2Ryw7xja2UpOiIKKworIzogZ2l0azozODI0Cittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAiQXV0b3I6IgorCisjOiBnaXRrOjM4MjUKK21zZ2lkICJDb21taXR0ZXI6IgorbXNnc3RyICJFaW50cmFnZW5kZXI6IgorCisjOiBnaXRrOjM4MjYKK21zZ2lkICJDb21taXQgTWVzc2FnZToiCittc2dzdHIgIlZlcnNpb25zYmVzY2hyZWlidW5nOiIKKworIzogZ2l0azozODI3Cittc2dpZCAiTWF0Y2hlcyBhbGwgQ29tbWl0IEluZm8gY3JpdGVyaWEiCittc2dzdHIgIkFsbGUgVmVyc2lvbnNpbmZvcm1hdGlvbmVuLUtyaXRlcmllbiBlcmbDvGxsZW4iCisKKyM6IGdpdGs6MzgyOAorbXNnaWQgIkNoYW5nZXMgdG8gRmlsZXM6IgorbXNnc3RyICJEYXRlaWVuOiIKKworIzogZ2l0azozODI5Cittc2dpZCAiRml4ZWQgU3RyaW5nIgorbXNnc3RyICJaZWljaGVua2V0dGUiCisKKyM6IGdpdGs6MzgzMAorbXNnaWQgIlJlZ3VsYXIgRXhwcmVzc2lvbiIKK21zZ3N0ciAiUmVndWzDpHJlciBBdXNkcnVjayIKKworIzogZ2l0azozODMxCittc2dpZCAiU2VhcmNoIHN0cmluZzoiCittc2dzdHIgIlN1Y2hhdXNkcnVjazoiCisKKyM6IGdpdGs6MzgzMgorbXNnaWQgIiIKKyJDb21taXQgRGF0ZXMgKFwiMiB3ZWVrcyBhZ29cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiTWFyY2ggMTcsIDIwMDkgIgorIjE1OjI3OjM4XCIpOiIKK21zZ3N0ciAiRGF0dW0gKMK7MiB3ZWVrcyBhZ2/CqywgwrsyMDA5LTAzLTE3IDE1OjI3OjM4wqssIMK7TWFyY2ggMTcsIDIwMDkgMTU6Mjc6MzjCqykiCisKKyM6IGdpdGs6MzgzMworbXNnaWQgIlNpbmNlOiIKK21zZ3N0ciAiVm9uOiIKKworIzogZ2l0azozODM0Cittc2dpZCAiVW50aWw6IgorbXNnc3RyICJCaXM6IgorCisjOiBnaXRrOjM4MzUKK21zZ2lkICJMaW1pdCBhbmQvb3Igc2tpcCBhIG51bWJlciBvZiByZXZpc2lvbnMgKHBvc2l0aXZlIGludGVnZXIpOiIKK21zZ3N0ciAiVmVyc2lvbnNhbnphaGwgYmVncmVuemVuIG9kZXIgZWluaWdlIMO8YmVyc3ByaW5nZW4gKGdhbnp6YWhsaWdlciBXZXJ0KToiCisKKyM6IGdpdGs6MzgzNgorbXNnaWQgIk51bWJlciB0byBzaG93OiIKK21zZ3N0ciAiQW56ZWlnZW46IgorCisjOiBnaXRrOjM4MzcKK21zZ2lkICJOdW1iZXIgdG8gc2tpcDoiCittc2dzdHIgIsOcYmVyc3ByaW5nZW46IgorCisjOiBnaXRrOjM4MzgKK21zZ2lkICJNaXNjZWxsYW5lb3VzIG9wdGlvbnM6IgorbXNnc3RyICJTb25zdGlnZXM6IgorCisjOiBnaXRrOjM4MzkKIG1zZ2lkICJTdHJpY3RseSBzb3J0IGJ5IGRhdGUiCiBtc2dzdHIgIlN0cmVuZyBuYWNoIERhdHVtIHNvcnRpZXJlbiIKIAotIzogZ2l0azozNjM0CisjOiBnaXRrOjM4NDAKIG1zZ2lkICJNYXJrIGJyYW5jaCBzaWRlcyIKIG1zZ3N0ciAiWndlaWctU2VpdGVuIG1hcmtpZXJlbiIKIAotIzogZ2l0azozNjM1Ci1tc2dpZCAiU2luY2UgZGF0ZToiCi1tc2dzdHIgIlZvbiBEYXR1bToiCi0KLSM6IGdpdGs6MzYzNgotbXNnaWQgIlVudGlsIGRhdGU6IgotbXNnc3RyICJCaXMgRGF0dW06IgotCi0jOiBnaXRrOjM2MzcKLW1zZ2lkICJNYXggY291bnQ6IgotbXNnc3RyICJNYXguIEFuemFobDoiCi0KLSM6IGdpdGs6MzYzOAotbXNnaWQgIlNraXA6IgotbXNnc3RyICLDnGJlcnNwcmluZ2VuOiIKLQotIzogZ2l0azozNjM5CisjOiBnaXRrOjM4NDEKIG1zZ2lkICJMaW1pdCB0byBmaXJzdCBwYXJlbnQiCiBtc2dzdHIgIkF1ZiBlcnN0ZSBFbHRlcm52ZXJzaW9uIGJlc2NocsOkbmtlbiIKIAotIzogZ2l0azozNjQwCi1tc2dpZCAiQ29tbWFuZCB0byBnZW5lcmF0ZSBtb3JlIGNvbW1pdHMgdG8gaW5jbHVkZToiCi1tc2dzdHIgIlZlcnNpb25zbGlzdGUgZHVyY2ggZm9sZ2VuZGVzIEtvbW1hbmRvIGVyemV1Z2VuIGxhc3NlbjoiCisjOiBnaXRrOjM4NDIKK21zZ2lkICJTaW1wbGUgaGlzdG9yeSIKK21zZ3N0ciAiRWluZmFjaGUgSGlzdG9yaWUiCiAKLSM6IGdpdGs6Mzc0OQotbXNnaWQgIk5hbWUiCi1tc2dzdHIgIk5hbWUiCisjOiBnaXRrOjM4NDMKK21zZ2lkICJBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBnaXQgbG9nOiIKK21zZ3N0ciAiWnVzw6R0emxpY2hlIEFyZ3VtZW50ZSBmw7xyIMK7Z2l0IGxvZ8KrOiIKIAotIzogZ2l0azozNzk3CisjOiBnaXRrOjM4NDQKIG1zZ2lkICJFbnRlciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gaW5jbHVkZSwgb25lIHBlciBsaW5lOiIKIG1zZ3N0ciAiRm9sZ2VuZGUgRGF0ZWllbiB1bmQgVmVyemVpY2huaXNzZSBhbnplaWdlbiAoZWluZSBwcm8gWmVpbGUpOiIKIAotIzogZ2l0azozODExCisjOiBnaXRrOjM4NDUKK21zZ2lkICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiIKK21zZ3N0ciAiVmVyc2lvbnNsaXN0ZSBkdXJjaCBmb2xnZW5kZXMgS29tbWFuZG8gZXJ6ZXVnZW4gbGFzc2VuOiIKKworIzogZ2l0azozOTY3Cittc2dpZCAiR2l0azogZWRpdCB2aWV3IgorbXNnc3RyICJHaXRrOiBBbnNpY2h0IGJlYXJiZWl0ZW4iCisKKyM6IGdpdGs6Mzk3NQorbXNnaWQgIi0tIGNyaXRlcmlhIGZvciBzZWxlY3RpbmcgcmV2aXNpb25zIgorbXNnc3RyICItLSBBdXN3YWhsIGRlciBhbmdlemVpZ3RlbiBWZXJzaW9uZW4iCisKKyM6IGdpdGs6Mzk4MAorbXNnaWQgIlZpZXcgTmFtZSIKK21zZ3N0ciAiQW5zaWNodHNuYW1lIgorCisjOiBnaXRrOjQwNTUKIG1zZ2lkICJBcHBseSAoRjUpIgogbXNnc3RyICJBbndlbmRlbiAoRjUpIgogCi0jOiBnaXRrOjM4NDkKKyM6IGdpdGs6NDA5MwogbXNnaWQgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiIKIG1zZ3N0ciAiRmVobGVyIGluIGRlbiBhdXNnZXfDpGhsdGVuIFZlcnNpb25lbjoiCiAKLSM6IGdpdGs6MzM0NyBnaXRrOjMzOTkgZ2l0azozODQyIGdpdGs6Mzg1NiBnaXRrOjUwNjAgZ2l0azoxMDE0MSBnaXRrOjEwMTQyCisjOiBnaXRrOjQxNDYgZ2l0azo0MTk4IGdpdGs6NDY0NiBnaXRrOjQ2NjAgZ2l0azo1OTIxIGdpdGs6MTE1MzQgZ2l0azoxMTUzNQogbXNnaWQgIk5vbmUiCiBtc2dzdHIgIktlaW5lIgogCi0jOiBnaXRrOjM3OTAgZ2l0azo1NTgwIGdpdGs6NzI4NyBnaXRrOjczMDIKKyM6IGdpdGs6NDU5NCBnaXRrOjY0NDEgZ2l0azo4Mjg3IGdpdGs6ODMwMgogbXNnaWQgIkRhdGUiCiBtc2dzdHIgIkRhdHVtIgogCi0jOiBnaXRrOjM3OTAgZ2l0azo1NTgwCisjOiBnaXRrOjQ1OTQgZ2l0azo2NDQxCiBtc2dpZCAiQ0RhdGUiCiBtc2dzdHIgIkVpbnRyYWdlZGF0dW0iCiAKLSM6IGdpdGs6MzkzOSBnaXRrOjM5NDQKKyM6IGdpdGs6NDc0MyBnaXRrOjQ3NDgKIG1zZ2lkICJEZXNjZW5kYW50IgogbXNnc3RyICJBYmvDtm1tbGluZyIKIAotIzogZ2l0azozOTQwCisjOiBnaXRrOjQ3NDQKIG1zZ2lkICJOb3QgZGVzY2VuZGFudCIKLW1zZ3N0ciAiTmljaHQgQWJrw7ZtbWxpbmciCittc2dzdHIgIktlaW4gQWJrw7ZtbWxpbmciCiAKLSM6IGdpdGs6Mzk0NyBnaXRrOjM5NTIKKyM6IGdpdGs6NDc1MSBnaXRrOjQ3NTYKIG1zZ2lkICJBbmNlc3RvciIKIG1zZ3N0ciAiVm9yZ8OkbmdlciIKIAotIzogZ2l0azozOTQ4CisjOiBnaXRrOjQ3NTIKIG1zZ2lkICJOb3QgYW5jZXN0b3IiCi1tc2dzdHIgIk5pY2h0IFZvcmfDpG5nZXIiCittc2dzdHIgIktlaW4gVm9yZ8OkbmdlciIKIAotIzogZ2l0azo0MTg3CisjOiBnaXRrOjUwNDIKIG1zZ2lkICJMb2NhbCBjaGFuZ2VzIGNoZWNrZWQgaW4gdG8gaW5kZXggYnV0IG5vdCBjb21taXR0ZWQiCiBtc2dzdHIgIkxva2FsZSDDhG5kZXJ1bmdlbiBiZXJlaXRnZXN0ZWxsdCwgYWJlciBuaWNodCBlaW5nZXRyYWdlbiIKIAotIzogZ2l0azo0MjIwCisjOiBnaXRrOjUwNzgKIG1zZ2lkICJMb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBub3QgY2hlY2tlZCBpbiB0byBpbmRleCIKIG1zZ3N0ciAiTG9rYWxlIMOEbmRlcnVuZ2VuLCBuaWNodCBiZXJlaXRnZXN0ZWxsdCIKIAotIzogZ2l0azo2NjczCisjOiBnaXRrOjY3NTkKK21zZ2lkICJtYW55IgorbXNnc3RyICJ2aWVsZSIKKworIzogZ2l0azo2OTQyCiBtc2dpZCAiVGFnczoiCiBtc2dzdHIgIk1hcmtpZXJ1bmdlbjoiCiAKLSM6IGdpdGs6NjA2NiBnaXRrOjYwNzIgZ2l0azo3MjgwCisjOiBnaXRrOjY5NTkgZ2l0azo2OTY1IGdpdGs6ODI4MAogbXNnaWQgIlBhcmVudCIKIG1zZ3N0ciAiRWx0ZXJuIgogCi0jOiBnaXRrOjYwNzcKKyM6IGdpdGs6Njk3MAogbXNnaWQgIkNoaWxkIgogbXNnc3RyICJLaW5kIgogCi0jOiBnaXRrOjYwODYKKyM6IGdpdGs6Njk3OQogbXNnaWQgIkJyYW5jaCIKIG1zZ3N0ciAiWndlaWciCiAKLSM6IGdpdGs6NjA4OQorIzogZ2l0azo2OTgyCiBtc2dpZCAiRm9sbG93cyIKIG1zZ3N0ciAiRm9sZ3QgYXVmIgogCi0jOiBnaXRrOjYwOTIKKyM6IGdpdGs6Njk4NQogbXNnaWQgIlByZWNlZGVzIgogbXNnc3RyICJWb3Jnw6RuZ2VyIHZvbiIKIAotIzogZ2l0azo3MjA5CisjOiBnaXRrOjc1MjIKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJFcnJvciBnZXR0aW5nIGRpZmZzOiAlcyIKIG1zZ3N0ciAiRmVobGVyIGJlaW0gTGFkZW4gZGVzIFZlcmdsZWljaHM6ICVzIgogCi0jOiBnaXRrOjc3NDgKKyM6IGdpdGs6ODEwOAogbXNnaWQgIkdvdG86IgogbXNnc3RyICJHZWhlIHp1OiIKIAotIzogZ2l0azo3MTE1Ci1tc2dpZCAiU0hBMSBJRDoiCi1tc2dzdHIgIlNIQTEtSGFzaHdlcnQ6IgotCi0jOiBnaXRrOjcxMzQKKyM6IGdpdGs6ODEyOQogIywgdGNsLWZvcm1hdAogbXNnaWQgIlNob3J0IFNIQTEgaWQgJXMgaXMgYW1iaWd1b3VzIgogbXNnc3RyICJLdXJ6ZXIgU0hBMS1IYXNod2VydCDCuyVzwqsgaXN0IG1laHJkZXV0aWciCiAKLSM6IGdpdGs6NzE0NgorIzogZ2l0azo4MTM2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJWZXJzaW9uIMK7JXPCqyBpc3QgdW5iZWthbm50IgorCisjOiBnaXRrOjgxNDYKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJTSEExIGlkICVzIGlzIG5vdCBrbm93biIKLW1zZ3N0ciAiU0hBMS1IYXNod2VydCDCuyVzwqsgdW5iZWthbm50IgorbXNnc3RyICJTSEExLUhhc2h3ZXJ0IMK7JXPCqyBpc3QgdW5iZWthbm50IgogCi0jOiBnaXRrOjcxNDgKKyM6IGdpdGs6ODE0OAogIywgdGNsLWZvcm1hdAotbXNnaWQgIlRhZy9IZWFkICVzIGlzIG5vdCBrbm93biIKLW1zZ3N0ciAiTWFya2llcnVuZy9ad2VpZyDCuyVzwqsgaXN0IHVuYmVrYW5udCIKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3QgaW4gdGhlIGN1cnJlbnQgdmlldyIKK21zZ3N0ciAiVmVyc2lvbiDCuyVzwqsgd2lyZCBpbiBkZXIgYWt0dWVsbGVuIEFuc2ljaHQgbmljaHQgYW5nZXplaWd0IgogCi0jOiBnaXRrOjcyOTAKKyM6IGdpdGs6ODI5MAogbXNnaWQgIkNoaWxkcmVuIgogbXNnc3RyICJLaW5kZXIiCiAKLSM6IGdpdGs6NzM0NworIzogZ2l0azo4MzQ4CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiCiBtc2dzdHIgIlp3ZWlnIMK7JXPCqyBoaWVyaGVyIHp1csO8Y2tzZXR6ZW4iCiAKLSM6IGdpdGs6NzM0OQorIzogZ2l0azo4MzUwCiBtc2dpZCAiRGV0YWNoZWQgaGVhZDogY2FuJ3QgcmVzZXQiCiBtc2dzdHIgIlp3ZWlnc3BpdHplIGlzdCBhYmdldHJlbm50OiBadXLDvGNrc2V0emVuIG5pY2h0IG3DtmdsaWNoIgogCi0jOiBnaXRrOjczODEKKyM6IGdpdGs6ODQ1OSBnaXRrOjg0NjUKK21zZ2lkICJTa2lwcGluZyBtZXJnZSBjb21taXQgIgorbXNnc3RyICLDnGJlcnNwcmluZ2UgWnVzYW1tZW5mw7xocnVuZ3MtVmVyc2lvbiAiCisKKyM6IGdpdGs6ODQ3NCBnaXRrOjg0NzkKK21zZ2lkICJFcnJvciBnZXR0aW5nIHBhdGNoIElEIGZvciAiCittc2dzdHIgIkZlaGxlciBiZWltIEhvbGVuIGRlciBQYXRjaC1JRCBmw7xyICIKKworIzogZ2l0azo4NDc1IGdpdGs6ODQ4MAorbXNnaWQgIiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiAtIEFiYnJ1Y2guXG4iCisKKyM6IGdpdGs6ODQ4NSBnaXRrOjg0ODggZ2l0azo4NDk2IGdpdGs6ODUxMCBnaXRrOjg1MTkKK21zZ2lkICJDb21taXQgIgorbXNnc3RyICJWZXJzaW9uICIKKworIzogZ2l0azo4NDg5Cittc2dpZCAiIgorIiBpcyB0aGUgc2FtZSBwYXRjaCBhc1xuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIgaXN0IGRhcyBnbGVpY2hlIFBhdGNoIHdpZVxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6ODQ5NworbXNnaWQgIiIKKyIgZGlmZmVycyBmcm9tXG4iCisiICAgICAgICIKK21zZ3N0ciAiIgorIiBpc3QgdW50ZXJzY2hpZWRsaWNoIHZvblxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6ODQ5OQorbXNnaWQgIiIKKyJEaWZmIG9mIGNvbW1pdHM6XG4iCisiXG4iCittc2dzdHIgIiIKKyJWZXJnbGVpY2ggZGVyIFZlcnNpb25lbjpcbiIKKyJcbiIKKworIzogZ2l0azo4NTExIGdpdGs6ODUyMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiBoYXMgJXMgY2hpbGRyZW4gLSBzdG9wcGluZ1xuIgorbXNnc3RyICIgaGF0ICVzIEtpbmRlci4gQWJicnVjaFxuIgorCisjOiBnaXRrOjg1MzkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdCB0byBmaWxlOiAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gU2NocmVpYmVuIGRlciBWZXJzaW9uIGluIERhdGVpOiAlcyIKKworIzogZ2l0azo4NTQ1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGlmZmluZyBjb21taXRzOiAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gVmVyZ2xlaWNoZW4gZGVyIFZlcnNpb25lbjogJXMiCisKKyM6IGdpdGs6ODU3NQogbXNnaWQgIlRvcCIKIG1zZ3N0ciAiT2JlbiIKIAotIzogZ2l0azo3MzgyCisjOiBnaXRrOjg1NzYKIG1zZ2lkICJGcm9tIgogbXNnc3RyICJWb24iCiAKLSM6IGdpdGs6NzM4NworIzogZ2l0azo4NTgxCiBtc2dpZCAiVG8iCiBtc2dzdHIgImJpcyIKIAotIzogZ2l0azo3NDEwCisjOiBnaXRrOjg2MDUKIG1zZ2lkICJHZW5lcmF0ZSBwYXRjaCIKIG1zZ3N0ciAiUGF0Y2ggZXJzdGVsbGVuIgogCi0jOiBnaXRrOjc0MTIKKyM6IGdpdGs6ODYwNwogbXNnaWQgIkZyb206IgogbXNnc3RyICJWb246IgogCi0jOiBnaXRrOjc0MjEKKyM6IGdpdGs6ODYxNgogbXNnaWQgIlRvOiIKIG1zZ3N0ciAiYmlzOiIKIAotIzogZ2l0azo3NDMwCisjOiBnaXRrOjg2MjUKIG1zZ2lkICJSZXZlcnNlIgogbXNnc3RyICJVbWdla2VocnQiCiAKLSM6IGdpdGs6NzQzMiBnaXRrOjc2MDcKKyM6IGdpdGs6ODYyNyBnaXRrOjg4MjIKIG1zZ2lkICJPdXRwdXQgZmlsZToiCiBtc2dzdHIgIkF1c2dhYmVkYXRlaToiCiAKLSM6IGdpdGs6NzQzOAorIzogZ2l0azo4NjMzCiBtc2dpZCAiR2VuZXJhdGUiCiBtc2dzdHIgIkVyemV1Z2VuIgogCi0jOiBnaXRrOjc0NzQKKyM6IGdpdGs6ODY3MQogbXNnaWQgIkVycm9yIGNyZWF0aW5nIHBhdGNoOiIKLW1zZ3N0ciAiRmVobGVyIGJlaW0gUGF0Y2ggZXJ6ZXVnZW46IgorbXNnc3RyICJGZWhsZXIgYmVpbSBFcnpldWdlbiBkZXMgUGF0Y2hlczoiCiAKLSM6IGdpdGs6NzQ5NiBnaXRrOjc1OTUgZ2l0azo3NjQ5CisjOiBnaXRrOjg2OTQgZ2l0azo4ODEwIGdpdGs6ODg2NwogbXNnaWQgIklEOiIKIG1zZ3N0ciAiSUQ6IgogCi0jOiBnaXRrOjc1MDUKKyM6IGdpdGs6ODcwMwogbXNnaWQgIlRhZyBuYW1lOiIKIG1zZ3N0ciAiTWFya2llcnVuZ3NuYW1lOiIKIAotIzogZ2l0azo3NTA5IGdpdGs6NzY1OQorIzogZ2l0azo4NzA2Cittc2dpZCAiVGFnIG1lc3NhZ2UgaXMgb3B0aW9uYWwiCittc2dzdHIgIkVpbmUgTWFya2llcnVuZ3NiZXNjaHJlaWJ1bmcgaXN0IG9wdGlvbmFsIgorCisjOiBnaXRrOjg3MDgKK21zZ2lkICJUYWcgbWVzc2FnZToiCittc2dzdHIgIk1hcmtpZXJ1bmdzYmVzY2hyZWlidW5nOiIKKworIzogZ2l0azo4NzEyIGdpdGs6ODg3NgogbXNnaWQgIkNyZWF0ZSIKIG1zZ3N0ciAiRXJzdGVsbGVuIgogCi0jOiBnaXRrOjc1MjQKKyM6IGdpdGs6ODczMAogbXNnaWQgIk5vIHRhZyBuYW1lIHNwZWNpZmllZCIKIG1zZ3N0ciAiS2VpbiBNYXJraWVydW5nc25hbWUgYW5nZWdlYmVuIgogCi0jOiBnaXRrOjc1MjgKKyM6IGdpdGs6ODczNAogIywgdGNsLWZvcm1hdAogbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCiBtc2dzdHIgIk1hcmtpZXJ1bmcgwrslc8KrIGV4aXN0aWVydCBiZXJlaXRzLiIKIAotIzogZ2l0azo3NTM0CisjOiBnaXRrOjg3NDQKIG1zZ2lkICJFcnJvciBjcmVhdGluZyB0YWc6IgotbXNnc3RyICJGZWhsZXIgYmVpIE1hcmtpZXJ1bmcgZXJzdGVsbGVuOiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRXJzdGVsbGVuIGRlciBNYXJraWVydW5nOiIKIAotIzogZ2l0azo3NjA0CisjOiBnaXRrOjg4MTkKIG1zZ2lkICJDb21tYW5kOiIKIG1zZ3N0ciAiS29tbWFuZG86IgogCi0jOiBnaXRrOjc2MTIKKyM6IGdpdGs6ODgyNwogbXNnaWQgIldyaXRlIgogbXNnc3RyICJTY2hyZWliZW4iCiAKLSM6IGdpdGs6NzYyOAorIzogZ2l0azo4ODQ1CiBtc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgogbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hyZWliZW4gZGVyIFZlcnNpb246IgogCi0jOiBnaXRrOjc2NTQKKyM6IGdpdGs6ODg3MgogbXNnaWQgIk5hbWU6IgogbXNnc3RyICJOYW1lOiIKIAotIzogZ2l0azo3Njc0CisjOiBnaXRrOjg4OTUKIG1zZ2lkICJQbGVhc2Ugc3BlY2lmeSBhIG5hbWUgZm9yIHRoZSBuZXcgYnJhbmNoIgogbXNnc3RyICJCaXR0ZSBnZWJlbiBTaWUgZWluZW4gTmFtZW4gZsO8ciBkZW4gbmV1ZW4gWndlaWcgYW4uIgogCi0jOiBnaXRrOjgzMjgKKyM6IGdpdGs6ODkwMAogIywgdGNsLWZvcm1hdAogbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiBPdmVyd3JpdGU/IgogbXNnc3RyICJad2VpZyDCuyVzwqsgZXhpc3RpZXJ0IGJlcmVpdHMuIFNvbGwgZXIgw7xiZXJzY2hyaWViZW4gd2VyZGVuPyIKIAotIzogZ2l0azo4Mzk0CisjOiBnaXRrOjg5NjYKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJDb21taXQgJXMgaXMgYWxyZWFkeSBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJlLWFwcGx5IGl0PyIKIG1zZ3N0ciAiIgotIlZlcnNpb24gwrslc8KrIGlzdCBiZXJlaXRzIGltIFp3ZWlnIMK7JXPCqyBlbnRoYWx0ZW4gLS0gdHJvdHpkZW0gZXJuZXV0ICIKLSJlaW50cmFnZW4/IgorIlZlcnNpb24gwrslc8KrIGlzdCBiZXJlaXRzIGltIFp3ZWlnIMK7JXPCqyBlbnRoYWx0ZW4gLS0gdHJvdHpkZW0gZXJuZXV0IGVpbnRyYWdlbj8iCiAKLSM6IGdpdGs6NzcxOAorIzogZ2l0azo4OTcxCiBtc2dpZCAiQ2hlcnJ5LXBpY2tpbmciCiBtc2dzdHIgIlZlcnNpb24gcGZsw7xja2VuIgogCi0jOiBnaXRrOjg0MDgKKyM6IGdpdGs6ODk4MAogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIGZpbGUgJyVzJy5cbiIKQEAgLTgyMiw0NSArOTkxLDQ1IEBACiBtc2dzdHIgIiIKICJQZmzDvGNrZW4gZmVobGdlc2NobGFnZW4sIGRhIG5vY2ggbG9rYWxlIMOEbmRlcnVuZ2VuIGluIERhdGVpIMK7JXPCq1xuIgogInZvcmxpZWdlbi4gQml0dGUgZGllc2Ugw4RuZGVydW5nZW4gZWludHJhZ2VuLCB6dXLDvGNrc2V0emVuIG9kZXJcbiIKLSJ6d2lzY2hlbnNwZWljaGVybiAowrtnaXQgc3Rhc2jCuykgdW5kIGRhbm4gZXJuZXV0IHZlcnN1Y2hlbi4iCisiendpc2NoZW5zcGVpY2hlcm4gKMK7Z2l0IHN0YXNowqspIHVuZCBkYW5uIGVybmV1dCB2ZXJzdWNoZW4uIgogCi0jOiBnaXRrOjg0MTQKKyM6IGdpdGs6ODk4NgogbXNnaWQgIiIKICJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKICJEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKIG1zZ3N0ciAiIgogIlBmbMO8Y2tlbiBmZWhsZ2VzY2hsYWdlbiwgZGEgZWluIFp1c2FtbWVuZsO8aHJ1bmdzLUtvbmZsaWt0IGF1ZmdldHJldGVuXG4iCi0iaXN0LiBTb2xsIGRhcyDCu2dpdCBjaXRvb2zCqyAoWnVzYW1tZW5mw7xocnVuZ3MtV2Vya3pldWcpIGF1ZmdlcnVmZW5cbiIKKyJpc3QuIFNvbGwgZGFzIFp1c2FtbWVuZsO8aHJ1bmdzLVdlcmt6ZXVnICjCu2dpdCBjaXRvb2zCqykgYXVmZ2VydWZlblxuIgogIndlcmRlbiwgdW0gZGllc2VuIEtvbmZsaWt0IGF1Znp1bMO2c2VuPyIKIAotIzogZ2l0azo4NDMwCisjOiBnaXRrOjkwMDIKIG1zZ2lkICJObyBjaGFuZ2VzIGNvbW1pdHRlZCIKIG1zZ3N0ciAiS2VpbmUgw4RuZGVydW5nZW4gZWluZ2V0cmFnZW4iCiAKLSM6IGdpdGs6Nzc0NQorIzogZ2l0azo5MDI4CiBtc2dpZCAiQ29uZmlybSByZXNldCIKIG1zZ3N0ciAiWnVyw7xja3NldHplbiBiZXN0w6R0aWdlbiIKIAotIzogZ2l0azo3NzQ3CisjOiBnaXRrOjkwMzAKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJSZXNldCBicmFuY2ggJXMgdG8gJXM/IgogbXNnc3RyICJad2VpZyDCuyVzwqsgYXVmIMK7JXPCqyB6dXLDvGNrc2V0emVuPyIKIAotIzogZ2l0azo3NzUxCisjOiBnaXRrOjkwMzIKIG1zZ2lkICJSZXNldCB0eXBlOiIKIG1zZ3N0ciAiQXJ0IGRlcyBadXLDvGNrc2V0emVuczoiCiAKLSM6IGdpdGs6Nzc1NQorIzogZ2l0azo5MDM1CiBtc2dpZCAiU29mdDogTGVhdmUgd29ya2luZyB0cmVlIGFuZCBpbmRleCB1bnRvdWNoZWQiCiBtc2dzdHIgIkhhcm1sb3M6IEFyYmVpdHNrb3BpZSB1bmQgQmVyZWl0c3RlbGx1bmcgdW52ZXLDpG5kZXJ0IgogCi0jOiBnaXRrOjc3NTgKKyM6IGdpdGs6OTAzOAogbXNnaWQgIk1peGVkOiBMZWF2ZSB3b3JraW5nIHRyZWUgdW50b3VjaGVkLCByZXNldCBpbmRleCIKIG1zZ3N0ciAiIgogIkdlbWlzY2h0OiBBcmJlaXRza29waWUgdW52ZXLDpG5kZXJ0LFxuIgogIkJlcmVpdHN0ZWxsdW5nIHp1csO8Y2tnZXNldHp0IgogCi0jOiBnaXRrOjc3NjEKKyM6IGdpdGs6OTA0MQogbXNnaWQgIiIKICJIYXJkOiBSZXNldCB3b3JraW5nIHRyZWUgYW5kIGluZGV4XG4iCiAiKGRpc2NhcmQgQUxMIGxvY2FsIGNoYW5nZXMpIgpAQCAtODY4LDIxICsxMDM3LDIxIEBACiAiSGFydDogQXJiZWl0c2tvcGllIHVuZCBCZXJlaXRzdGVsbHVuZ1xuIgogIihBbGxlIGxva2FsZW4gw4RuZGVydW5nZW4gd2VyZGVuIGdlbMO2c2NodCkiCiAKLSM6IGdpdGs6Nzc3NworIzogZ2l0azo5MDU4CiBtc2dpZCAiUmVzZXR0aW5nIgogbXNnc3RyICJadXLDvGNrc2V0emVuIgogCi0jOiBnaXRrOjc4MzQKKyM6IGdpdGs6OTExOAogbXNnaWQgIkNoZWNraW5nIG91dCIKIG1zZ3N0ciAiVW1zdGVsbGVuIgogCi0jOiBnaXRrOjc4ODUKKyM6IGdpdGs6OTE3MQogbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2giCiBtc2dzdHIgIiIKICJEZXIgWndlaWcsIGF1ZiBkZW4gZGllIEFyYmVpdHNrb3BpZSBtb21lbnRhbiB1bWdlc3RlbGx0IGlzdCwga2FubiBuaWNodCAiCiAiZ2Vsw7ZzY2h0IHdlcmRlbi4iCiAKLSM6IGdpdGs6Nzg5MQorIzogZ2l0azo5MTc3CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiIgogIlRoZSBjb21taXRzIG9uIGJyYW5jaCAlcyBhcmVuJ3Qgb24gYW55IG90aGVyIGJyYW5jaC5cbiIKQEAgLTg5MSwxOTkgKzEwNjAsMjE5IEBACiAiRGllIFZlcnNpb25lbiBhdWYgWndlaWcgwrslc8KrIGV4aXN0aWVyZW4gYXVmIGtlaW5lbSBhbmRlcmVuIFp3ZWlnLlxuIgogIlp3ZWlnIMK7JXPCqyB0cm90emRlbSBsw7ZzY2hlbj8iCiAKLSM6IGdpdGs6NzkyMgorIzogZ2l0azo5MjA4CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVGFncyBhbmQgaGVhZHM6ICVzIgogbXNnc3RyICJNYXJraWVydW5nZW4gdW5kIFp3ZWlnZTogJXMiCiAKLSM6IGdpdGs6NzkzNgorIzogZ2l0azo5MjIzCiBtc2dpZCAiRmlsdGVyIgogbXNnc3RyICJGaWx0ZXJuIgogCi0jOiBnaXRrOjgyMzAKKyM6IGdpdGs6OTUxOAogbXNnaWQgIiIKICJFcnJvciByZWFkaW5nIGNvbW1pdCB0b3BvbG9neSBpbmZvcm1hdGlvbjsgYnJhbmNoIGFuZCBwcmVjZWRpbmcvZm9sbG93aW5nICIKICJ0YWcgaW5mb3JtYXRpb24gd2lsbCBiZSBpbmNvbXBsZXRlLiIKIG1zZ3N0ciAiIgotIkZlaGxlciBiZWltIExlc2VuIGRlciBTdHJ1a3R1cmluZm9ybWF0aW9uZW47IFp3ZWlnZSB1bmQgVm9yZ8Okbmdlci9OYWNoZm9sZ2VyICIKLSJJbmZvcm1hdGlvbmVuIHdlcmRlbiB1bnZvbGxzdMOkbmRpZyBzZWluLiIKKyJGZWhsZXIgYmVpbSBMZXNlbiBkZXIgU3RydWt0dXJpbmZvcm1hdGlvbmVuOyBad2VpZ2UgdW5kIEluZm9ybWF0aW9uZW4genUgIgorIlZvcmfDpG5nZXIvTmFjaGZvbGdlciB3ZXJkZW4gdW52b2xsc3TDpG5kaWcgc2Vpbi4iCiAKLSM6IGdpdGs6OTIxNgorIzogZ2l0azoxMDUwNAogbXNnaWQgIlRhZyIKIG1zZ3N0ciAiTWFya2llcnVuZyIKIAotIzogZ2l0azo5MjE2CisjOiBnaXRrOjEwNTA0CiBtc2dpZCAiSWQiCiBtc2dzdHIgIklkIgogCi0jOiBnaXRrOjkyNjIKKyM6IGdpdGs6MTA1NTQKIG1zZ2lkICJHaXRrIGZvbnQgY2hvb3NlciIKLW1zZ3N0ciAiR2l0ayBTY2hyaWZ0ZW4gd8OkaGxlbiIKK21zZ3N0ciAiR2l0ay1TY2hyaWZ0ZW4gd8OkaGxlbiIKIAotIzogZ2l0azo5Mjc5CisjOiBnaXRrOjEwNTcxCiBtc2dpZCAiQiIKIG1zZ3N0ciAiRiIKIAotIzogZ2l0azo5MjgyCisjOiBnaXRrOjEwNTc0CiBtc2dpZCAiSSIKIG1zZ3N0ciAiSyIKIAotIzogZ2l0azo5Mzc1CisjOiBnaXRrOjEwNjkyCiBtc2dpZCAiR2l0ayBwcmVmZXJlbmNlcyIKLW1zZ3N0ciAiR2l0ayBFaW5zdGVsbHVuZ2VuIgorbXNnc3RyICJHaXRrLUVpbnN0ZWxsdW5nZW4iCiAKLSM6IGdpdGs6OTM3NgorIzogZ2l0azoxMDY5NAogbXNnaWQgIkNvbW1pdCBsaXN0IGRpc3BsYXkgb3B0aW9ucyIKLW1zZ3N0ciAiQW56ZWlnZSBWZXJzaW9uc2xpc3RlIgorbXNnc3RyICJBbnplaWdlIGRlciBWZXJzaW9uc2xpc3RlIgogCi0jOiBnaXRrOjkzNzkKKyM6IGdpdGs6MTA2OTcKIG1zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoIChsaW5lcykiCiBtc2dzdHIgIk1heGltYWxlIEdyYXBoZW5icmVpdGUgKFplaWxlbikiCiAKLSM6IGdpdGs6OTM4MworIzogZ2l0azoxMDcwMAogIywgdGNsLWZvcm1hdAogbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKCUgb2YgcGFuZSkiCiBtc2dzdHIgIk1heGltYWxlIEdyYXBoZW5icmVpdGUgKCUgZGVzIEZlbnN0ZXJzKSIKIAotIzogZ2l0azo5Mzg4CisjOiBnaXRrOjEwNzAzCiBtc2dpZCAiU2hvdyBsb2NhbCBjaGFuZ2VzIgogbXNnc3RyICJMb2thbGUgw4RuZGVydW5nZW4gYW56ZWlnZW4iCiAKLSM6IGdpdGs6OTM5MworIzogZ2l0azoxMDcwNgogbXNnaWQgIkF1dG8tc2VsZWN0IFNIQTEiCi1tc2dzdHIgIlNIQTEtSGFzaHdlcnQgYXV0b21hdGlzY2ggbWFya2llcmVuIgorbXNnc3RyICJTSEExLUhhc2h3ZXJ0IGF1dG9tYXRpc2NoIGF1c3fDpGhsZW4iCiAKLSM6IGdpdGs6OTM5OAorIzogZ2l0azoxMDcwOQorbXNnaWQgIkhpZGUgcmVtb3RlIHJlZnMiCittc2dzdHIgIkVudGZlcm50ZSBad2VpZ2UvTWFya2llcnVuZ2VuIGF1c2JsZW5kZW4iCisKKyM6IGdpdGs6MTA3MTMKIG1zZ2lkICJEaWZmIGRpc3BsYXkgb3B0aW9ucyIKLW1zZ3N0ciAiQW56ZWlnZSBWZXJnbGVpY2giCittc2dzdHIgIkFuemVpZ2UgZGVzIFZlcmdsZWljaHMiCiAKLSM6IGdpdGs6OTQwMAorIzogZ2l0azoxMDcxNQogbXNnaWQgIlRhYiBzcGFjaW5nIgogbXNnc3RyICJUYWJ1bGF0b3JicmVpdGUiCiAKLSM6IGdpdGs6OTQwNAorIzogZ2l0azoxMDcxOAogbXNnaWQgIkRpc3BsYXkgbmVhcmJ5IHRhZ3MiCi1tc2dzdHIgIk5haGVsaWVnZW5kZSDDnGJlcnNjaHJpZnRlbiBhbnplaWdlbiIKK21zZ3N0ciAiTmFoZWxpZWdlbmRlIE1hcmtpZXJ1bmdlbiBhbnplaWdlbiIKIAotIzogZ2l0azo5NDA5CisjOiBnaXRrOjEwNzIxCiBtc2dpZCAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIgogbXNnc3RyICJWZXJnbGVpY2ggbnVyIGbDvHIgYW5nZXplaWd0ZSBQZmFkZSIKIAotIzogZ2l0azo5NDE0CisjOiBnaXRrOjEwNzI0CiBtc2dpZCAiU3VwcG9ydCBwZXItZmlsZSBlbmNvZGluZ3MiCiBtc2dzdHIgIlplaWNoZW5rb2RpZXJ1bmcgcHJvIERhdGVpIGVybWl0dGVsbiIKIAotIzogZ2l0azo5NDIxCisjOiBnaXRrOjEwNzMwIGdpdGs6MTA4MTkKIG1zZ2lkICJFeHRlcm5hbCBkaWZmIHRvb2wiCi1tc2dzdHIgIkV4dGVybmVzIFZlcmdsZWljaC0oRGlmZi0pUHJvZ3JhbW0iCittc2dzdHIgIkV4dGVybmVzIERpZmYtUHJvZ3JhbW0iCiAKLSM6IGdpdGs6OTQyMworIzogZ2l0azoxMDczMQogbXNnaWQgIkNob29zZS4uLiIKLW1zZ3N0ciAiV8OkaGxlbi4uLiIKK21zZ3N0ciAiV8OkaGxlbiAuLi4iCiAKLSM6IGdpdGs6OTQyOAorIzogZ2l0azoxMDczNgorbXNnaWQgIkdlbmVyYWwgb3B0aW9ucyIKK21zZ3N0ciAiQWxsZ2VtZWluZSBPcHRpb25lbiIKKworIzogZ2l0azoxMDczOQorbXNnaWQgIlVzZSB0aGVtZWQgd2lkZ2V0cyIKK21zZ3N0ciAiQXVzc2VoZW4gZGVyIEJlbnV0emVyb2JlcmZsw6RjaGUgZHVyY2ggVGhlbWEgYmVzdGltbWVuIgorCisjOiBnaXRrOjEwNzQxCittc2dpZCAiKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KSIKK21zZ3N0ciAiKMOEbmRlcnVuZ2VuIHdlcmRlbiBlcnN0IG5hY2ggTmV1c3RhcnQgd2lya3NhbSkiCisKKyM6IGdpdGs6MTA3NDMKK21zZ2lkICIoY3VycmVudGx5IHVuYXZhaWxhYmxlKSIKK21zZ3N0ciAiKE1vbWVudGFuIG5pY2h0IHZlcmbDvGdiYXIpIgorCisjOiBnaXRrOjEwNzQ3CiBtc2dpZCAiQ29sb3JzOiBwcmVzcyB0byBjaG9vc2UiCiBtc2dzdHIgIkZhcmJlbjogS2xpY2tlbiB6dW0gV8OkaGxlbiIKIAotIzogZ2l0azo5NDMxCisjOiBnaXRrOjEwNzUwCittc2dpZCAiSW50ZXJmYWNlIgorbXNnc3RyICJCZW51dHplcm9iZXJmbMOkY2hlIgorCisjOiBnaXRrOjEwNzUxCittc2dpZCAiaW50ZXJmYWNlIgorbXNnc3RyICJCZW51dHplcm9iZXJmbMOkY2hlIgorCisjOiBnaXRrOjEwNzU0CiBtc2dpZCAiQmFja2dyb3VuZCIKIG1zZ3N0ciAiSGludGVyZ3J1bmQiCiAKLSM6IGdpdGs6MTAxNTMgZ2l0azoxMDE4MworIzogZ2l0azoxMDc1NSBnaXRrOjEwNzg1CiBtc2dpZCAiYmFja2dyb3VuZCIKIG1zZ3N0ciAiSGludGVyZ3J1bmQiCiAKLSM6IGdpdGs6MTAxNTYKKyM6IGdpdGs6MTA3NTgKIG1zZ2lkICJGb3JlZ3JvdW5kIgogbXNnc3RyICJWb3JkZXJncnVuZCIKIAotIzogZ2l0azoxMDE1NworIzogZ2l0azoxMDc1OQogbXNnaWQgImZvcmVncm91bmQiCiBtc2dzdHIgIlZvcmRlcmdydW5kIgogCi0jOiBnaXRrOjEwMTYwCisjOiBnaXRrOjEwNzYyCiBtc2dpZCAiRGlmZjogb2xkIGxpbmVzIgogbXNnc3RyICJWZXJnbGVpY2g6IEFsdGUgWmVpbGVuIgogCi0jOiBnaXRrOjEwMTYxCisjOiBnaXRrOjEwNzYzCiBtc2dpZCAiZGlmZiBvbGQgbGluZXMiCiBtc2dzdHIgIlZlcmdsZWljaCAtIEFsdGUgWmVpbGVuIgogCi0jOiBnaXRrOjEwMTY1CisjOiBnaXRrOjEwNzY3CiBtc2dpZCAiRGlmZjogbmV3IGxpbmVzIgogbXNnc3RyICJWZXJnbGVpY2g6IE5ldWUgWmVpbGVuIgogCi0jOiBnaXRrOjEwMTY2CisjOiBnaXRrOjEwNzY4CiBtc2dpZCAiZGlmZiBuZXcgbGluZXMiCiBtc2dzdHIgIlZlcmdsZWljaCAtIE5ldWUgWmVpbGVuIgogCi0jOiBnaXRrOjEwMTcwCisjOiBnaXRrOjEwNzcyCiBtc2dpZCAiRGlmZjogaHVuayBoZWFkZXIiCiBtc2dzdHIgIlZlcmdsZWljaDogw4RuZGVydW5nc3RpdGVsIgogCi0jOiBnaXRrOjEwMTcyCisjOiBnaXRrOjEwNzc0CiBtc2dpZCAiZGlmZiBodW5rIGhlYWRlciIKIG1zZ3N0ciAiVmVyZ2xlaWNoIC0gw4RuZGVydW5nc3RpdGVsIgogCi0jOiBnaXRrOjEwMTc2CisjOiBnaXRrOjEwNzc4CiBtc2dpZCAiTWFya2VkIGxpbmUgYmciCi1tc2dzdHIgIk1hcmtpZXJ0ZSBaZWlsZSBIaW50ZXJncnVuZCIKK21zZ3N0ciAiSGludGVyZ3J1bmQgZsO8ciBtYXJraWVydGUgWmVpbGUiCiAKLSM6IGdpdGs6MTAxNzgKKyM6IGdpdGs6MTA3ODAKIG1zZ2lkICJtYXJrZWQgbGluZSBiYWNrZ3JvdW5kIgotbXNnc3RyICJtYXJraWVydGUgWmVpbGUgSGludGVyZ3J1bmQiCittc2dzdHIgIkhpbnRlcmdydW5kIGbDvHIgbWFya2llcnRlIFplaWxlIgogCi0jOiBnaXRrOjEwMTgyCisjOiBnaXRrOjEwNzg0CiBtc2dpZCAiU2VsZWN0IGJnIgotbXNnc3RyICJIaW50ZXJncnVuZGZhcmJlIEF1c3fDpGhsZW4iCittc2dzdHIgIkhpbnRlcmdydW5kZmFyYmUgYXVzd8OkaGxlbiIKIAotIzogZ2l0azo5NDU5CisjOiBnaXRrOjEwNzg4CiBtc2dpZCAiRm9udHM6IHByZXNzIHRvIGNob29zZSIKIG1zZ3N0ciAiU2NocmlmdGFydDogS2xpY2tlbiB6dW0gV8OkaGxlbiIKIAotIzogZ2l0azo5NDYxCisjOiBnaXRrOjEwNzkwCiBtc2dpZCAiTWFpbiBmb250IgogbXNnc3RyICJQcm9ncmFtbXNjaHJpZnRhcnQiCiAKLSM6IGdpdGs6OTQ2MgorIzogZ2l0azoxMDc5MQogbXNnaWQgIkRpZmYgZGlzcGxheSBmb250IgotbXNnc3RyICJWZXJnbGVpY2giCittc2dzdHIgIlNjaHJpZnRhcnQgZsO8ciBWZXJnbGVpY2giCiAKLSM6IGdpdGs6OTQ2MworIzogZ2l0azoxMDc5MgogbXNnaWQgIlVzZXIgaW50ZXJmYWNlIGZvbnQiCiBtc2dzdHIgIkJlc2NocmlmdHVuZ2VuIgogCi0jOiBnaXRrOjk0ODgKKyM6IGdpdGs6MTA4MjkKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJHaXRrOiBjaG9vc2UgY29sb3IgZm9yICVzIgogbXNnc3RyICJHaXRrOiBGYXJiZSB3w6RobGVuIGbDvHIgJXMiCiAKLSM6IGdpdGs6OTkzNAotbXNnaWQgIiIKLSJTb3JyeSwgZ2l0ayBjYW5ub3QgcnVuIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFRjbC9Uay5cbiIKLSIgR2l0ayByZXF1aXJlcyBhdCBsZWFzdCBUY2wvVGsgOC40LiIKLW1zZ3N0ciAiIgotIkdpdGsgbMOkdWZ0IG5pY2h0IG1pdCBkaWVzZXIgVmVyc2lvbiB2b24gVGNsL1RrLlxuIgotIkdpdGsgYmVuw7Z0aWd0IG1pbmRlc3RlbnMgVGNsL1RrIDguNC4iCi0KLSM6IGdpdGs6MTAwNDcKKyM6IGdpdGs6MTE0MzMKIG1zZ2lkICJDYW5ub3QgZmluZCBhIGdpdCByZXBvc2l0b3J5IGhlcmUuIgogbXNnc3RyICJLZWluIEdpdC1Qcm9qZWt0YXJjaGl2IGdlZnVuZGVuLiIKIAotIzogZ2l0azoxMDA1MQorIzogZ2l0azoxMTQzNwogIywgdGNsLWZvcm1hdAogbXNnaWQgIkNhbm5vdCBmaW5kIHRoZSBnaXQgZGlyZWN0b3J5IFwiJXNcIi4iCiBtc2dzdHIgIkdpdC1WZXJ6ZWljaG5pcyDCuyVzwqsgd3VyZGUgbmljaHQgZ2VmdW5kZW4uIgogCi0jOiBnaXRrOjEwMDk4CisjOiBnaXRrOjExNDg0CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lIgogbXNnc3RyICJNZWhyZGV1dGlnZSBBbmdhYmUgwrslc8KrOiBTb3dvaGwgVmVyc2lvbiBhbHMgYXVjaCBEYXRlaW5hbWUgZXhpc3RpZXJ0LiIKIAotIzogZ2l0azoxMDExMAorIzogZ2l0azoxMTQ5NgogbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCiBtc2dzdHIgIkZhbHNjaGUgS29tbWFuZG96ZWlsZW4tUGFyYW1ldGVyIGbDvHIgZ2l0azoiCiAKLSM6IGdpdGs6MTAxNzAKKyM6IGdpdGs6MTE1ODcKIG1zZ2lkICJDb21tYW5kIGxpbmUiCiBtc2dzdHIgIktvbW1hbmRvemVpbGUiCmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9mci5wbyBiL2dpdGstZ2l0L3BvL2ZyLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMGUxZWQKLS0tIC9kZXYvbnVsbAorKysgYi9naXRrLWdpdC9wby9mci5wbwpAQCAtMCwwICsxLDEyNTQgQEAKKyMgRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBnaXRrIHBhY2thZ2UKKyMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggUGF1bCBNYWNrZXJyYXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0ayBwYWNrYWdlLgorIyBUcmFuc2xhdG9yczoKKyMgRW1tYW51ZWwgVHJpbGxhdWQgPGV0cmlsbGF1ZEBnbWFpbC5jb20+CisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXRrXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA5LTEwLTA1IDE1OjE2KzAyMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA5LTExLTE5IDIyOjEzKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEVtbWFudWVsIFRyaWxsYXVkIDxldHJpbGxhdWRAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IGdpdEB2Z2VyLmtlcm5lbC5vcmdcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJYLVBvZWRpdC1MYW5ndWFnZTogRnJlbmNoXG4iCisiWC1Qb2VkaXQtQ291bnRyeTogRlJBTkNFXG4iCisKKyM6IGdpdGs6MTEzCittc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHLDqWN1cMOpcmVyIGxhIGxpc3RlIGRlcyBmaWNoaWVycyBub24gZnVzaW9ubsOpcyA6IgorCisjOiBnaXRrOjI2OQorbXNnaWQgIkVycm9yIHBhcnNpbmcgcmV2aXNpb25zOiIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZHUgcGFyY291cnMgZGVzIHLDqXZpc2lvbnMgOiIKKworIzogZ2l0azozMjQKK21zZ2lkICJFcnJvciBleGVjdXRpbmcgLS1hcmdzY21kIGNvbW1hbmQ6IgorbXNnc3RyICJFcnJldXIgw6AgbCdleMOpY3V0aW9uIGRlIGxhIGNvbW1hbmRlIC0tYXJnc2NtZCA6IgorCisjOiBnaXRrOjMzNworbXNnaWQgIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gZmlsZXMgYXJlIHVubWVyZ2VkLiIKK21zZ3N0ciAiIgorIkF1Y3VuIGZpY2hpZXIgc8OpbGVjdGlvbm7DqSA6IC0tbWVyZ2UgcHLDqWNpc8OpLCBtYWlzIHRvdXMgbGVzIGZpY2hpZXJzIHNvbnQgIgorImZ1c2lvbm7DqXMuIgorCisjIEZJWE1FIDogYW3DqWxpb3JlciBsYSB0cmFkdWN0aW9uIGRlICdmaWxlIGxpbWl0ZScKKyM6IGdpdGs6MzQwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIHVubWVyZ2VkIGZpbGVzIGFyZSB3aXRoaW4gZmlsZSAiCisibGltaXQuIgorbXNnc3RyICIiCisiQXVjdW4gZmljaGllciBzw6lsZWN0aW9ubsOpIDogLS1tZXJnZSBwcsOpY2lzw6kgbWFpcyBhdWN1biBmaWNoaWVyIG5vbiBmdXNpb25uw6kgIgorIm4nZXN0IGRhbnMgbGEgbGltaXRlIGRlcyBmaWNoaWVycy4iCisKKyM6IGdpdGs6MzYyIGdpdGs6NTA5Cittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIGdpdCBsb2c6IgorbXNnc3RyICJFcnJldXIgw6AgbCdleMOpY3V0aW9uIGRlIGdpdCBsb2cgOiIKKworIzogZ2l0azozODAgZ2l0azo1MjUKK21zZ2lkICJSZWFkaW5nIgorbXNnc3RyICJMZWN0dXJlIGVuIGNvdXJzIgorCisjOiBnaXRrOjQ0MCBnaXRrOjQxMjMKK21zZ2lkICJSZWFkaW5nIGNvbW1pdHMuLi4iCittc2dzdHIgIkxlY3R1cmUgZGVzIGNvbW1pdHMuLi4iCisKKyM6IGdpdGs6NDQzIGdpdGs6MTU2MSBnaXRrOjQxMjYKK21zZ2lkICJObyBjb21taXRzIHNlbGVjdGVkIgorbXNnc3RyICJBdWN1biBjb21taXQgc8OpbGVjdGlvbm7DqSIKKworIzogZ2l0azoxNDM3Cittc2dpZCAiQ2FuJ3QgcGFyc2UgZ2l0IGxvZyBvdXRwdXQ6IgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGxpcmUgbGEgc29ydGllIGRlIGdpdCBsb2cgOiIKKworIzogZ2l0azoxNjU3Cittc2dpZCAiTm8gY29tbWl0IGluZm9ybWF0aW9uIGF2YWlsYWJsZSIKK21zZ3N0ciAiQXVjdW5lIGluZm9ybWF0aW9uIGRpc3BvbmlibGUgc3VyIGxlIGNvbW1pdCIKKworIzogZ2l0azoxNzkzIGdpdGs6MTgxNyBnaXRrOjM5MTYgZ2l0azo4Nzg2IGdpdGs6MTAzMjIgZ2l0azoxMDQ5OAorbXNnaWQgIk9LIgorbXNnc3RyICJPSyIKKworIzogZ2l0azoxODE5IGdpdGs6MzkxOCBnaXRrOjgzODMgZ2l0azo4NDU3IGdpdGs6ODU2NyBnaXRrOjg2MTYgZ2l0azo4Nzg4CisjOiBnaXRrOjEwMzIzIGdpdGs6MTA0OTkKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIkFubnVsZXIiCisKKyM6IGdpdGs6MTkxOQorbXNnaWQgIlVwZGF0ZSIKK21zZ3N0ciAiTWlzZSDDoCBqb3VyIgorCisjOiBnaXRrOjE5MjAKK21zZ2lkICJSZWxvYWQiCittc2dzdHIgIlJlY2hhcmdlciIKKworIzogZ2l0azoxOTIxCittc2dpZCAiUmVyZWFkIHJlZmVyZW5jZXMiCittc2dzdHIgIlJlbGlyZSBsZXMgcsOpZsOpcmVuY2VzIgorCisjOiBnaXRrOjE5MjIKK21zZ2lkICJMaXN0IHJlZmVyZW5jZXMiCittc2dzdHIgIkxpc3RlciBsZXMgcsOpZsOpcmVuY2VzIgorCisjOiBnaXRrOjE5MjQKK21zZ2lkICJTdGFydCBnaXQgZ3VpIgorbXNnc3RyICJEw6ltYXJyZXIgZ2l0IGd1aSIKKworIzogZ2l0azoxOTI2Cittc2dpZCAiUXVpdCIKK21zZ3N0ciAiUXVpdHRlciIKKworIzogZ2l0azoxOTE4Cittc2dpZCAiRmlsZSIKK21zZ3N0ciAiRmljaGllciIKKworIzogZ2l0azoxOTMwCittc2dpZCAiUHJlZmVyZW5jZXMiCittc2dzdHIgIlByw6lmw6lyZW5jZXMiCisKKyM6IGdpdGs6MTkyOQorbXNnaWQgIkVkaXQiCittc2dzdHIgIsOJZGl0ZXIiCisKKyM6IGdpdGs6MTkzNAorbXNnaWQgIk5ldyB2aWV3Li4uIgorbXNnc3RyICJOb3V2ZWxsZSB2dWUuLi4iCisKKyM6IGdpdGs6MTkzNQorbXNnaWQgIkVkaXQgdmlldy4uLiIKK21zZ3N0ciAiw4lkaXRlciBsYSB2dWUuLi4iCisKKyM6IGdpdGs6MTkzNgorbXNnaWQgIkRlbGV0ZSB2aWV3IgorbXNnc3RyICJTdXBwcmltZXIgbGEgdnVlIgorCisjOiBnaXRrOjE5MzgKK21zZ2lkICJBbGwgZmlsZXMiCittc2dzdHIgIlRvdXMgbGVzIGZpY2hpZXJzIgorCisjOiBnaXRrOjE5MzMgZ2l0azozNjcwCittc2dpZCAiVmlldyIKK21zZ3N0ciAiVnVlIgorCisjOiBnaXRrOjE5NDMgZ2l0azoxOTUzIGdpdGs6MjY1NAorbXNnaWQgIkFib3V0IGdpdGsiCittc2dzdHIgIsOAIHByb3BvcyBkZSBnaXRrIgorCisjOiBnaXRrOjE5NDQgZ2l0azoxOTU4Cittc2dpZCAiS2V5IGJpbmRpbmdzIgorbXNnc3RyICJSYWNjb3VyY2lzIGNsYXZpZXIiCisKKyM6IGdpdGs6MTk0MiBnaXRrOjE5NTcKK21zZ2lkICJIZWxwIgorbXNnc3RyICJBaWRlIgorCisjOiBnaXRrOjIwMTgKK21zZ2lkICJTSEExIElEOiAiCittc2dzdHIgIklEIFNIQTEgOiIKKworIzogZ2l0azoyMDQ5Cittc2dpZCAiUm93IgorbXNnc3RyICJDb2xvbm5lIgorCisjOiBnaXRrOjIwODAKK21zZ2lkICJGaW5kIgorbXNnc3RyICJSZWNoZXJjaGUiCisKKyM6IGdpdGs6MjA4MQorbXNnaWQgIm5leHQiCittc2dzdHIgInN1aXZhbnQiCisKKyM6IGdpdGs6MjA4MgorbXNnaWQgInByZXYiCittc2dzdHIgInByw6ljw6lkZW50IgorCisjOiBnaXRrOjIwODMKK21zZ2lkICJjb21taXQiCittc2dzdHIgImNvbW1pdCIKKworIzogZ2l0azoyMDg2IGdpdGs6MjA4OCBnaXRrOjQyODQgZ2l0azo0MzA3IGdpdGs6NDMzMSBnaXRrOjYyNzIgZ2l0azo2MzQ0CisjOiBnaXRrOjY0MjgKK21zZ2lkICJjb250YWluaW5nOiIKK21zZ3N0ciAiY29udGllbnQgOiIKKworIzogZ2l0azoyMDg5IGdpdGs6MzE2MiBnaXRrOjMxNjcgZ2l0azo0MzU5Cittc2dpZCAidG91Y2hpbmcgcGF0aHM6IgorbXNnc3RyICJjaGVtaW5zIG1vZGlmacOpcyA6IgorCisjOiBnaXRrOjIwOTAgZ2l0azo0MzY0Cittc2dpZCAiYWRkaW5nL3JlbW92aW5nIHN0cmluZzoiCittc2dzdHIgImFqb3V0ZS9zdXBwcmltZSBsYSBjaGHDrm5lIDoiCisKKyM6IGdpdGs6MjA5OSBnaXRrOjIxMDEKK21zZ2lkICJFeGFjdCIKK21zZ3N0ciAiRXhhY3QiCisKKyM6IGdpdGs6MjEwMSBnaXRrOjQ0MzkgZ2l0azo2MjQwCittc2dpZCAiSWduQ2FzZSIKK21zZ3N0ciAiSWdub3JlciBsYSBjYXNzZSIKKworIzogZ2l0azoyMTAxIGdpdGs6NDMzMyBnaXRrOjQ0MzcgZ2l0azo2MjM2Cittc2dpZCAiUmVnZXhwIgorbXNnc3RyICJFeHByZXNzaW9uIHLDqWd1bGnDqHJlIgorCisjOiBnaXRrOjIxMDMgZ2l0azoyMTA0IGdpdGs6NDQ1OCBnaXRrOjQ0ODggZ2l0azo0NDk1IGdpdGs6NjM2NCBnaXRrOjY0MzIKK21zZ2lkICJBbGwgZmllbGRzIgorbXNnc3RyICJUb3VzIGxlcyBjaGFtcHMiCisKKyM6IGdpdGs6MjEwNCBnaXRrOjQ0NTYgZ2l0azo0NDg4IGdpdGs6NjMwMworbXNnaWQgIkhlYWRsaW5lIgorbXNnc3RyICJTdXJsaWduZXIiCisKKyM6IGdpdGs6MjEwNSBnaXRrOjQ0NTYgZ2l0azo2MzAzIGdpdGs6NjQzMiBnaXRrOjY4NjYKK21zZ2lkICJDb21tZW50cyIKK21zZ3N0ciAiQ29tbWVudGFpcmVzIgorCisjOiBnaXRrOjIxMDUgZ2l0azo0NDU2IGdpdGs6NDQ2MCBnaXRrOjQ0OTUgZ2l0azo2MzAzIGdpdGs6NjgwMSBnaXRrOjgwNjMKKyM6IGdpdGs6ODA3OAorbXNnaWQgIkF1dGhvciIKK21zZ3N0ciAiQXV0ZXVyIgorCisjOiBnaXRrOjIxMDUgZ2l0azo0NDU2IGdpdGs6NjMwMyBnaXRrOjY4MDMKK21zZ2lkICJDb21taXR0ZXIiCittc2dzdHIgIkF1dGV1ciBkdSBjb21taXQiCisKKyM6IGdpdGs6MjEzNAorbXNnaWQgIlNlYXJjaCIKK21zZ3N0ciAiUmVjaGVyY2hlciIKKworIzogZ2l0azoyMTQxCittc2dpZCAiRGlmZiIKK21zZ3N0ciAiRGlmZiIKKworIzogZ2l0azoyMTQzCittc2dpZCAiT2xkIHZlcnNpb24iCittc2dzdHIgIkFuY2llbm5lIHZlcnNpb24iCisKKyM6IGdpdGs6MjE0NQorbXNnaWQgIk5ldyB2ZXJzaW9uIgorbXNnc3RyICJOb3V2ZWxsZSB2ZXJzaW9uIgorCisjOiBnaXRrOjIxNDcKK21zZ2lkICJMaW5lcyBvZiBjb250ZXh0IgorbXNnc3RyICJMaWduZXMgZGUgY29udGV4dGUiCisKKyM6IGdpdGs6MjE1NworbXNnaWQgIklnbm9yZSBzcGFjZSBjaGFuZ2UiCittc2dzdHIgIklnbm9yZXIgbGVzIG1vZGlmaWNhdGlvbnMgZCdlc3BhY2UiCisKKyM6IGdpdGs6MjIxNQorbXNnaWQgIlBhdGNoIgorbXNnc3RyICJQYXRjaCIKKworIzogZ2l0azoyMjE3Cittc2dpZCAiVHJlZSIKK21zZ3N0ciAiQXJicmUiCisKKyM6IGdpdGs6MjM2MSBnaXRrOjIzNzgKK21zZ2lkICJEaWZmIHRoaXMgLT4gc2VsZWN0ZWQiCittc2dzdHIgIkRpZmYgZW50cmUgY2VjaSBldCBsYSBzw6lsZWN0aW9uIgorCisjOiBnaXRrOjIzNjIgZ2l0azoyMzc5Cittc2dpZCAiRGlmZiBzZWxlY3RlZCAtPiB0aGlzIgorbXNnc3RyICJEaWZmIGVudHJlIHPDqWxlY3Rpb24gZXQgY2VjaSIKKworIzogZ2l0azoyMzYzIGdpdGs6MjM4MAorbXNnaWQgIk1ha2UgcGF0Y2giCittc2dzdHIgIkNyw6llciBwYXRjaCIKKworIzogZ2l0azoyMzY0IGdpdGs6ODQ0MQorbXNnaWQgIkNyZWF0ZSB0YWciCittc2dzdHIgIkNyw6llciB0YWciCisKKyM6IGdpdGs6MjM2NSBnaXRrOjg1NDcKK21zZ2lkICJXcml0ZSBjb21taXQgdG8gZmlsZSIKK21zZ3N0ciAiw4ljcmlyZSBsZSBjb21taXQgZGFucyB1biBmaWNoaWVyIgorCisjOiBnaXRrOjIzNjYgZ2l0azo4NjA0Cittc2dpZCAiQ3JlYXRlIG5ldyBicmFuY2giCittc2dzdHIgIkNyw6llciB1bmUgbm91dmVsbGUgYnJhbmNoZSIKKworIzogZ2l0azoyMzY3Cittc2dpZCAiQ2hlcnJ5LXBpY2sgdGhpcyBjb21taXQiCittc2dzdHIgIkN1ZWlsbGlyIChjaGVycnktcGljaykgY2UgY29tbWl0IgorCisjOiBnaXRrOjIzNjgKK21zZ2lkICJSZXNldCBIRUFEIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICJSw6lpbml0aWFsaXNlciBsYSBicmFuY2hlIEhFQUQgdmVycyBjZXQgw6l0YXQiCisKKyM6IGdpdGs6MjM2OQorbXNnaWQgIk1hcmsgdGhpcyBjb21taXQiCittc2dzdHIgIk1hcnF1ZXIgY2UgY29tbWl0IgorCisjOiBnaXRrOjIzNzAKK21zZ2lkICJSZXR1cm4gdG8gbWFyayIKK21zZ3N0ciAiUmV0b3VybmVyIMOgIGxhIG1hcnF1ZSIKKworIzogZ2l0azoyMzcxCittc2dpZCAiRmluZCBkZXNjZW5kYW50IG9mIHRoaXMgYW5kIG1hcmsiCittc2dzdHIgIkNoZXJjaGVyIGxlIGRlc2NlbmRhbnQgZGUgY2VjaSBldCBsZSBtYXJxdWVyIgorCisjOiBnaXRrOjIzNzIKK21zZ2lkICJDb21wYXJlIHdpdGggbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAiQ29tcGFyZXIgYXZlYyBsZSBjb21taXQgbWFycXXDqSIKKworIzogZ2l0azoyMzg2Cittc2dpZCAiQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIgorbXNnc3RyICJSw6ljdXDDqXJlciBjZXR0ZSBicmFuY2hlIgorCisjOiBnaXRrOjIzODcKK21zZ2lkICJSZW1vdmUgdGhpcyBicmFuY2giCittc2dzdHIgIlN1cHByaW1lciBjZXR0ZSBicmFuY2hlIgorCisjOiBnaXRrOjIzOTQKK21zZ2lkICJIaWdobGlnaHQgdGhpcyB0b28iCittc2dzdHIgIlN1cmxpZ25lciDDqWdhbGVtZW50IGNlY2kiCisKKyM6IGdpdGs6MjM5NQorbXNnaWQgIkhpZ2hsaWdodCB0aGlzIG9ubHkiCittc2dzdHIgIlN1cmxpZ25lciBzZXVsZW1lbnQgY2VjaSIKKworIzogZ2l0azoyMzk2Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiIKK21zZ3N0ciAiRGlmZiBleHRlcm5lIgorCisjOiBnaXRrOjIzOTcKK21zZ2lkICJCbGFtZSBwYXJlbnQgY29tbWl0IgorbXNnc3RyICJCbMOibWVyIGxlIGNvbW1pdCBwYXJlbnQiCisKKyM6IGdpdGs6MjQwNAorbXNnaWQgIlNob3cgb3JpZ2luIG9mIHRoaXMgbGluZSIKK21zZ3N0ciAiTW9udHJlciBsJ29yaWdpbmUgZGUgY2V0dGUgbGlnbmUiCisKKyM6IGdpdGs6MjQwNQorbXNnaWQgIlJ1biBnaXQgZ3VpIGJsYW1lIG9uIHRoaXMgbGluZSIKK21zZ3N0ciAiRXjDqWN1dGVyIGdpdCBndWkgYmxhbWUgc3VyIGNldHRlIGxpZ25lIgorCisjOiBnaXRrOjI2NTYKK21zZ2lkICIiCisiXG4iCisiR2l0ayAtIGEgY29tbWl0IHZpZXdlciBmb3IgZ2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IMKpIDIwMDUtMjAwOCBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIlVzZSBhbmQgcmVkaXN0cmlidXRlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCittc2dzdHIgIiIKKyJcbiIKKyJHaXRrIC0gdmlzdWFsaXNhdGV1ciBkZSBjb21taXQgcG91ciBnaXRcbiIKKyJcbiIKKyJDb3B5cmlnaHQgwqkgMjAwNS0yMDA4IFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiVXRpbGlzYXRpb24gZXQgcmVkaXN0cmlidXRpb24gc291bWlzZXMgYXV4IHRlcm1lcyBkZSBsYSBHTlUgR2VuZXJhbCBQdWJsaWMgIgorIkxpY2Vuc2UiCisKKyM6IGdpdGs6MjY2NCBnaXRrOjI3MjYgZ2l0azo4OTY5Cittc2dpZCAiQ2xvc2UiCittc2dzdHIgIkZlcm1lciIKKworIzogZ2l0azoyNjgzCittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3MiCittc2dzdHIgIlJhY2NvdXJjaXMgY2xhdmllciBkZSBHaXRrIgorCisjOiBnaXRrOjI2ODYKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5nczoiCittc2dzdHIgIlJhY2NvdXJjaXMgY2xhdmllciBkZSBHaXRrIDoiCisKKyM6IGdpdGs6MjY4OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1RPlx0XHRRdWl0IgorbXNnc3RyICI8JXMtUT5cdFx0UXVpdHRlciIKKworIzogZ2l0azoyNjg5Cittc2dpZCAiPEhvbWU+XHRcdE1vdmUgdG8gZmlyc3QgY29tbWl0IgorbXNnc3RyICI8RMOpYnV0Plx0XHRBbGxlciBhdSBwcmVtaWVyIGNvbW1pdCIKKworIzogZ2l0azoyNjkwCittc2dpZCAiPEVuZD5cdFx0TW92ZSB0byBsYXN0IGNvbW1pdCIKK21zZ3N0ciAiPEZpbj5cdFx0QWxsZXIgYXUgZGVybmllciBjb21taXQiCisKKyM6IGdpdGs6MjY5MQorbXNnaWQgIjxVcD4sIHAsIGlcdE1vdmUgdXAgb25lIGNvbW1pdCIKK21zZ3N0ciAiPEhhdXQ+LCBwLCBpXHQgQWxsZXIgYXUgY29tbWl0IHN1aXZhbnQiCisKKyM6IGdpdGs6MjY5MgorbXNnaWQgIjxEb3duPiwgbiwga1x0TW92ZSBkb3duIG9uZSBjb21taXQiCittc2dzdHIgIjxCYXM+LCBuLCBrXHQgQWxsZXIgYXUgY29tbWl0IHByw6ljw6lkZW50IgorCisjOiBnaXRrOjI2OTMKK21zZ2lkICI8TGVmdD4sIHosIGpcdEdvIGJhY2sgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8R2F1Y2hlPiwgeiwgalx0UmVjdWxlciBkYW5zIGwnaGlzdG9yaXF1ZSIKKworIzogZ2l0azoyNjk0Cittc2dpZCAiPFJpZ2h0PiwgeCwgbFx0R28gZm9yd2FyZCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxEcm9pdGU+LCB4LCBsXHRBdmFuY2VyIGRhbnMgbCdoaXN0b3JpcXVlIgorCisjOiBnaXRrOjI2OTUKK21zZ2lkICI8UGFnZVVwPlx0TW92ZSB1cCBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPFBhZ2VVcD5cdE1vbnRlciBkJ3VuZSBwYWdlIGRhbnMgbGEgbGlzdGUgZGVzIGNvbW1pdHMiCisKKyM6IGdpdGs6MjY5NgorbXNnaWQgIjxQYWdlRG93bj5cdE1vdmUgZG93biBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPFBhZ2VEb3duPlx0RGVzY2VuZHJlIGQndW5lIHBhZ2UgZGFucyBsYSBsaXN0ZSBkZXMgY29tbWl0cyIKKworIzogZ2l0azoyNjk3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUhvbWU+XHRTY3JvbGwgdG8gdG9wIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtRMOpYnV0Plx0QWxsZXIgZW4gaGF1dCBkZSBsYSBsaXN0ZSBkZXMgY29tbWl0cyIKKworIzogZ2l0azoyNjk4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUVuZD5cdFNjcm9sbCB0byBib3R0b20gb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1FbmQ+XHRBbGxlciBlbiBiYXMgZGUgbGEgbGlzdGUgZGVzIGNvbW1pdHMiCisKKyM6IGdpdGs6MjY5OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1VcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLVVwPlx0TW9udGVyIGQndW5lIGxpZ25lIGRhbnMgbGEgbGlzdGUgZGVzIGNvbW1pdHMiCisKKyM6IGdpdGs6MjcwMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Eb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIGxpbmUiCittc2dzdHIgIjwlcy1Eb3duPlx0RGVzY2VuZHJlIGQndW5lIGxpZ25lIGRhbnMgbGEgbGlzdGUgZGVzIGNvbW1pdHMiCisKKyM6IGdpdGs6MjcwMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIHBhZ2UiCittc2dzdHIgIjwlcy1QYWdlVXA+XHRNb250ZXIgZCd1bmUgcGFnZSBkYW5zIGxhIGxpc3RlIGRlcyBjb21taXRzIgorCisjOiBnaXRrOjI3MDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VEb3duPlx0RGVzY2VuZHJlIGQndW5lIHBhZ2UgZGFucyBsYSBsaXN0ZSBkZXMgY29tbWl0cyIKKworIzogZ2l0azoyNzAzCittc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgorbXNnc3RyICIiCisiPFNoaWZ0LVVwPlx0UmVjaGVyY2hlIGVuIGFycmnDqHJlICh2ZXJzIGwnYXZhbnQsIGNvbW1pdHMgbGVzIHBsdXMgYW5jaWVucykiCisKKyM6IGdpdGs6MjcwNAorbXNnaWQgIjxTaGlmdC1Eb3duPlx0RmluZCBmb3J3YXJkcyAoZG93bndhcmRzLCBlYXJsaWVyIGNvbW1pdHMpIgorbXNnc3RyICIiCisiPFNoaWZ0LURvd24+XHRSZWNoZXJjaGUgZW4gYXZhbnQgKHZlcnMgbCdhcnJpw6hyZSwgY29tbWl0IGxlcyBwbHVzIHLDqWNlbnRzKSIKKworIzogZ2l0azoyNzA1Cittc2dpZCAiPERlbGV0ZT4sIGJcdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxTdXBwcmltZXI+LCBiXHRNb250ZXIgZCd1bmUgcGFnZSBkYW5zIGxhIHZ1ZSBkZXMgZGlmZiIKKworIzogZ2l0azoyNzA2Cittc2dpZCAiPEJhY2tzcGFjZT5cdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxCYWNrc3BhY2U+XHRNb250ZXIgZCd1bmUgcGFnZSBkYW5zIGxhIHZ1ZSBkZXMgZGlmZiIKKworIzogZ2l0azoyNzA3Cittc2dpZCAiPFNwYWNlPlx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjxFc3BhY2U+XHRcdERlc2NlbmRyZSBkJ3VuZSBwYWdlIGRhbnMgbGEgdnVlIGRlcyBkaWZmIgorCisjOiBnaXRrOjI3MDgKK21zZ2lkICJ1XHRcdFNjcm9sbCBkaWZmIHZpZXcgdXAgMTggbGluZXMiCittc2dzdHIgInVcdFx0TW9udGVyIGRlIDE4IGxpZ25lcyBkYW5zIGxhIHZ1ZSBkZXMgZGlmZiIKKworIzogZ2l0azoyNzA5Cittc2dpZCAiZFx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiCittc2dzdHIgImRcdFx0RGVzY2VuZHJlIGRlIDE4IGxpZ25lcyBkYW5zIGxhIHZ1ZSBkZXMgZGlmZiIKKworIzogZ2l0azoyNzEwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUY+XHRcdEZpbmQiCittc2dzdHIgIjwlcy1GPlx0XHRSZWNoZXJjaGVyIgorCisjOiBnaXRrOjI3MTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRz5cdFx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8JXMtRz5cdFx0QWxsZXIgYXUgcsOpc3VsdGF0IGRlIHJlY2hlcmNoZSBzdWl2YW50IgorCisjOiBnaXRrOjI3MTIKK21zZ2lkICI8UmV0dXJuPlx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8UmV0dXJuPlx0XHRBbGxlciBhdSByw6lzdWx0YXQgZGUgcmVjaGVyY2hlIHN1aXZhbnQiCisKKyM6IGdpdGs6MjcxMworbXNnaWQgIi9cdFx0Rm9jdXMgdGhlIHNlYXJjaCBib3giCittc2dzdHIgIi9cdFx0Rm9jdXMgc3VyIGxhIHpvbmUgZGUgcmVjaGVyY2hlIgorCisjOiBnaXRrOjI3MTQKK21zZ2lkICI/XHRcdE1vdmUgdG8gcHJldmlvdXMgZmluZCBoaXQiCittc2dzdHIgIj9cdFx0QWxsZXIgYXUgcsOpc3VsdGF0IGRlIHJlY2hlcmNoZSBwcsOpY8OpZGVudCIKKworIzogZ2l0azoyNzE1Cittc2dpZCAiZlx0XHRTY3JvbGwgZGlmZiB2aWV3IHRvIG5leHQgZmlsZSIKK21zZ3N0ciAiZlx0XHRBbGxlciBhdSBwcm9jaGFpbiBmaWNoaWVyIGRhbnMgbGEgdnVlIGRlcyBkaWZmIgorCisjOiBnaXRrOjI3MTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUz5cdFx0U2VhcmNoIGZvciBuZXh0IGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1TPlx0XHRBbGxlciBhdSByw6lzdWx0YXQgc3VpdmFudCBkYW5zIGxhIHZ1ZSBkZXMgZGlmZiIKKworIzogZ2l0azoyNzE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVI+XHRcdFNlYXJjaCBmb3IgcHJldmlvdXMgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVI+XHRcdEFsbGVyIGF1IHLDqXN1bHRhdCBwcsOpY8OpZGVudCBkYW5zIGxhIHZ1ZSBkZXMgZGlmZiIKKworIzogZ2l0azoyNzE4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQKz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQKz5cdEF1Z21lbnRlciBsYSB0YWlsbGUgZGUgbGEgcG9saWNlIgorCisjOiBnaXRrOjI3MTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtcGx1cz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLXBsdXM+XHRBdWdtZW50ZXIgbGEgdGFpbGxlIGRlIGxhIHBvbGljZSIKKworIzogZ2l0azoyNzIwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQLT5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQLT5cdERpbWludWVyIGxhIHRhaWxsZSBkZSBsYSBwb2xpY2UiCisKKyM6IGdpdGs6MjcyMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1taW51cz5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLW1pbnVzPlx0RGltaW51ZXIgbGEgdGFpbGxlIGRlIGxhIHBvbGljZSIKKworIzogZ2l0azoyNzIyCittc2dpZCAiPEY1Plx0XHRVcGRhdGUiCittc2dzdHIgIjxGNT5cdFx0TWlzZSDDoCBqb3VyIgorCisjOiBnaXRrOjMxNzcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIFwiJXNcIiBmcm9tICVzOiIKK21zZ3N0ciAiRXJyZXVyIGVuIG9idGVuYW50IFwiJXNcIiBkZSAlczoiCisKKyM6IGdpdGs6MzIzNCBnaXRrOjMyNDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZGUgbGEgY3LDqWF0aW9uIGR1IHLDqXBlcnRvaXJlIHRlbXBvcmFpcmUgJXMgOiIKKworIzogZ2l0azozMjU1Cittc2dpZCAiY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICLDqWNoZWMgZGUgbGEgY29tbWFuZGUgOiIKKworIzogZ2l0azozNDAxCittc2dpZCAiTm8gc3VjaCBjb21taXQiCittc2dzdHIgIkNvbW1pdCBpbmV4aXN0YW50IgorCisjOiBnaXRrOjM0MTUKK21zZ2lkICJnaXQgZ3VpIGJsYW1lOiBjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgImdpdCBndWkgYmxhbWUgOiDDqWNoZWMgZGUgbGEgY29tbWFuZGUgOiIKKworIzogZ2l0azozNDQ2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcmVhZCBtZXJnZSBoZWFkOiAlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBsaXJlIGxlIGhlYWQgZGUgbGEgZnVzaW9uIDogJXMiCisKKyM6IGdpdGs6MzQ1NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgaW5kZXg6ICVzIgorbXNnc3RyICJFcnJldXIgw6AgbGEgbGVjdHVyZSBkZSBsJ2luZGV4IDogJXMiCisKKyM6IGdpdGs6MzQ3OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHN0YXJ0IGdpdCBibGFtZTogJXMiCittc2dzdHIgIkltcG9zc2libGUgZGUgZMOpbWFycmVyIGdpdCBibGFtZSA6ICVzIgorCisjOiBnaXRrOjM0ODIgZ2l0azo2MjcxCittc2dpZCAiU2VhcmNoaW5nIgorbXNnc3RyICJSZWNoZXJjaGUgZW4gY291cnMiCisKKyM6IGdpdGs6MzUxNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJ1bm5pbmcgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAiRXJyZXVyIMOgIGwnZXjDqWN1dGlvbiBkZSBnaXQgYmxhbWUgOiAlcyIKKworIzogZ2l0azozNTQyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGhhdCBsaW5lIGNvbWVzIGZyb20gY29tbWl0ICVzLCAgd2hpY2ggaXMgbm90IGluIHRoaXMgdmlldyIKK21zZ3N0ciAiQ2V0dGUgbGlnbmUgZXN0IGlzc3VlIGR1IGNvbW1pdCAlcywgcXVpIG4nZXN0IHBhcyBkYW5zIGNldHRlIHZ1ZSIKKworIzogZ2l0azozNTU2Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiB2aWV3ZXIgZmFpbGVkOiIKK21zZ3N0ciAiw4ljaGVjIGRlIGwnb3V0aWwgZXh0ZXJuZSBkZSB2aXN1YWxpc2F0aW9uIGRlcyBkaWZmIgorCisjOiBnaXRrOjM2NzQKK21zZ2lkICJHaXRrIHZpZXcgZGVmaW5pdGlvbiIKK21zZ3N0ciAiRMOpZmluaXRpb24gZGVzIHZ1ZXMgZGUgR2l0ayIKKworIzogZ2l0azozNjc4Cittc2dpZCAiUmVtZW1iZXIgdGhpcyB2aWV3IgorbXNnc3RyICJTZSBzb3V2ZW5pciBkZSBjZXR0ZSB2dWUiCisKKyM6IGdpdGs6MzY3OQorbXNnaWQgIlJlZmVyZW5jZXMgKHNwYWNlIHNlcGFyYXRlZCBsaXN0KToiCittc2dzdHIgIlLDqWbDqXJlbmNlcyAobGlzdGUgZCfDqWzDqW1lbnRzIHPDqXBhcsOpcyBwYXIgZGVzIGVzcGFjZXMpIDoiCisKKyM6IGdpdGs6MzY4MAorbXNnaWQgIkJyYW5jaGVzICYgdGFnczoiCittc2dzdHIgIkJyYW5jaGVzICYgdGFncyA6IgorCisjOiBnaXRrOjM2ODEKK21zZ2lkICJBbGwgcmVmcyIKK21zZ3N0ciAiVG91dGVzIGxlcyByw6lmw6lyZW5jZXMiCisKKyM6IGdpdGs6MzY4MgorbXNnaWQgIkFsbCAobG9jYWwpIGJyYW5jaGVzIgorbXNnc3RyICJUb3V0ZXMgbGVzIGJyYW5jaGVzIChsb2NhbGVzKSIKKworIzogZ2l0azozNjgzCittc2dpZCAiQWxsIHRhZ3MiCittc2dzdHIgIlRvdXMgbGVzIHRhZ3MiCisKKyM6IGdpdGs6MzY4NAorbXNnaWQgIkFsbCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgIlRvdXRlcyBsZXMgYnJhbmNoZXMgZGUgc3Vpdmkgw6AgZGlzdGFuY2UiCisKKyM6IGdpdGs6MzY4NQorbXNnaWQgIkNvbW1pdCBJbmZvIChyZWd1bGFyIGV4cHJlc3Npb25zKToiCittc2dzdHIgIkluZm8gc3VyIGxlcyBjb21taXRzIChleHByZXNzaW9ucyByw6lndWxpw6hyZXMpIDoiCisKKyM6IGdpdGs6MzY4NgorbXNnaWQgIkF1dGhvcjoiCittc2dzdHIgIkF1dGV1ciA6IgorCisjOiBnaXRrOjM2ODcKK21zZ2lkICJDb21taXR0ZXI6IgorbXNnc3RyICJDb21taXRldXIgOiIKKworIzogZ2l0azozNjg4Cittc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJNZXNzYWdlIGRlIGNvbW1pdCA6IgorCisjOiBnaXRrOjM2ODkKK21zZ2lkICJNYXRjaGVzIGFsbCBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAiQ29ycmVzcG9uZCDDoCB0b3VzIGxlcyBjcml0w6hyZXMgZCdJbmZvIHN1ciBsZXMgY29tbWl0cyIKKworIzogZ2l0azozNjkwCittc2dpZCAiQ2hhbmdlcyB0byBGaWxlczoiCittc2dzdHIgIkNoYW5nZW1lbnRzIGRlcyBmaWNoaWVycyA6IgorCisjOiBnaXRrOjM2OTEKK21zZ2lkICJGaXhlZCBTdHJpbmciCittc2dzdHIgIkNoYcOubmUgRmlnw6llIgorCisjOiBnaXRrOjM2OTIKK21zZ2lkICJSZWd1bGFyIEV4cHJlc3Npb24iCittc2dzdHIgIkV4cHJlc3Npb24gUsOpZ3VsacOocmUiCisKKyM6IGdpdGs6MzY5MworbXNnaWQgIlNlYXJjaCBzdHJpbmc6IgorbXNnc3RyICJSZWNoZXJjaGUgZGUgbGEgY2hhw65uZSA6IgorCisjOiBnaXRrOjM2OTQKK21zZ2lkICIiCisiQ29tbWl0IERhdGVzIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5ICIKKyIxNToyNzozOFwiKToiCittc2dzdHIgIiIKKyJEYXRlcyBkZXMgY29tbWl0cyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgIgorIjIwMDkgMTU6Mjc6MzhcIikgOiIKKworIzogZ2l0azozNjk1Cittc2dpZCAiU2luY2U6IgorbXNnc3RyICJEZSA6IgorCisjOiBnaXRrOjM2OTYKK21zZ2lkICJVbnRpbDoiCittc2dzdHIgIkp1c3F1J2F1IDoiCisKKyM6IGdpdGs6MzY5NworbXNnaWQgIkxpbWl0IGFuZC9vciBza2lwIGEgbnVtYmVyIG9mIHJldmlzaW9ucyAocG9zaXRpdmUgaW50ZWdlcik6IgorbXNnc3RyICJMaW1pdGVyIGV0L291IHNhdXRlciB1biBjZXJ0YWluIG5vbWJyZSAoZW50aWVyIHBvc2l0aWYpIGRlIHLDqXZpc2lvbnMgOiIKKworIzogZ2l0azozNjk4Cittc2dpZCAiTnVtYmVyIHRvIHNob3c6IgorbXNnc3RyICJOb21icmUgw6AgYWZmaWNoZXIgOiIKKworIzogZ2l0azozNjk5Cittc2dpZCAiTnVtYmVyIHRvIHNraXA6IgorbXNnc3RyICJOb21icmUgw6Agc2F1dGVyIDoiCisKKyM6IGdpdGs6MzcwMAorbXNnaWQgIk1pc2NlbGxhbmVvdXMgb3B0aW9uczoiCittc2dzdHIgIk9wdGlvbnMgZGl2ZXJzZXMgOiIKKworIzogZ2l0azozNzAxCittc2dpZCAiU3RyaWN0bHkgc29ydCBieSBkYXRlIgorbXNnc3RyICJUcmllciBwYXIgZGF0ZSIKKworIyBGSVhNRSA6IHRyYWR1Y3Rpb24gZGUgImJyYW5jaCBzaWRlcyIKKyM6IGdpdGs6MzcwMgorIywgZnV6enkKK21zZ2lkICJNYXJrIGJyYW5jaCBzaWRlcyIKK21zZ3N0ciAiTWFycXVlciBsZXMgZXh0csOpbWl0w6lzIGRlcyBicmFuY2hlcyIKKworIzogZ2l0azozNzAzCittc2dpZCAiTGltaXQgdG8gZmlyc3QgcGFyZW50IgorbXNnc3RyICJMaW1pdGVyIGF1IHByZW1pZXIgYW5jw6p0cmUiCisKKyM6IGdpdGs6MzcwNAorbXNnaWQgIlNpbXBsZSBoaXN0b3J5IgorbXNnc3RyICJIaXN0b3JpcXVlIHNpbXBsZSIKKworIzogZ2l0azozNzA1Cittc2dpZCAiQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gZ2l0IGxvZzoiCittc2dzdHIgIkFyZ3VtZW50cyBzdXBwbMOpbWVudGFpcmVzIGRlIGdpdCBsb2cgOiIKKworIzogZ2l0azozNzA2Cittc2dpZCAiRW50ZXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUsIG9uZSBwZXIgbGluZToiCittc2dzdHIgIlNhaXNpciBsZXMgZmljaGllcnMgZXQgcsOpcGVydG9pcmVzIMOgIGluY2x1cmUsIHVuIHBhciBsaWduZSA6IgorCisjOiBnaXRrOjM3MDcKK21zZ2lkICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiIKK21zZ3N0ciAiQ29tbWFuZGUgcG91ciBnw6luw6lyZXIgcGx1cyBkZSBjb21taXRzIMOgIGluY2x1cmUgOiIKKworIzogZ2l0azozODI5Cittc2dpZCAiR2l0azogZWRpdCB2aWV3IgorbXNnc3RyICJHaXRrIDogw6lkaXRlciBsYSB2dWUiCisKKyM6IGdpdGs6MzgzNworbXNnaWQgIi0tIGNyaXRlcmlhIGZvciBzZWxlY3RpbmcgcmV2aXNpb25zIgorbXNnc3RyICItLSBjcml0w6hyZSBwb3VyIGxhIHPDqWxlY3Rpb24gZGVzIHLDqXZpc2lvbnMiCisKKyM6IGdpdGs6Mzg0MgorbXNnaWQgIlZpZXcgTmFtZToiCittc2dzdHIgIk5vbSBkZSBsYSB2dWUgOiIKKworIzogZ2l0azozOTE3Cittc2dpZCAiQXBwbHkgKEY1KSIKK21zZ3N0ciAiQXBwbGlxdWVyIChGNSkiCisKKyM6IGdpdGs6Mzk1NQorbXNnaWQgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiIKK21zZ3N0ciAiRXJyZXVyIGRhbnMgbGVzIGFyZ3VtZW50cyBkZSBzw6lsZWN0aW9uIGRlcyBjb21taXRzIDoiCisKKyM6IGdpdGs6NDAwOCBnaXRrOjQwNjAgZ2l0azo0NTA4IGdpdGs6NDUyMiBnaXRrOjU3ODMgZ2l0azoxMTE5NiBnaXRrOjExMTk3Cittc2dpZCAiTm9uZSIKK21zZ3N0ciAiQXVjdW4iCisKKyM6IGdpdGs6NDQ1NiBnaXRrOjYzMDMgZ2l0azo4MDY1IGdpdGs6ODA4MAorbXNnaWQgIkRhdGUiCittc2dzdHIgIkRhdGUiCisKKyM6IGdpdGs6NDQ1NiBnaXRrOjYzMDMKK21zZ2lkICJDRGF0ZSIKK21zZ3N0ciAiQ0RhdGUiCisKKyM6IGdpdGs6NDYwNSBnaXRrOjQ2MTAKK21zZ2lkICJEZXNjZW5kYW50IgorbXNnc3RyICJEZXNjZW5kYW50IgorCisjOiBnaXRrOjQ2MDYKK21zZ2lkICJOb3QgZGVzY2VuZGFudCIKK21zZ3N0ciAiUGFzIHVuIGRlc2NlbmRhbnQiCisKKyM6IGdpdGs6NDYxMyBnaXRrOjQ2MTgKK21zZ2lkICJBbmNlc3RvciIKK21zZ3N0ciAiQW5jw6p0cmUiCisKKyM6IGdpdGs6NDYxNAorbXNnaWQgIk5vdCBhbmNlc3RvciIKK21zZ3N0ciAiUGFzIHVuIGFuY8OqdHJlIgorCisjOiBnaXRrOjQ5MDQKK21zZ2lkICJMb2NhbCBjaGFuZ2VzIGNoZWNrZWQgaW4gdG8gaW5kZXggYnV0IG5vdCBjb21taXR0ZWQiCittc2dzdHIgIk1vZGlmaWNhdGlvbnMgbG9jYWxlcyBlbnJlZ2lzdHLDqWVzIGRhbnMgbCdpbmRleCBtYWlzIG5vbiBjb21taXTDqWVzIgorCisjOiBnaXRrOjQ5NDAKK21zZ2lkICJMb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBub3QgY2hlY2tlZCBpbiB0byBpbmRleCIKK21zZ3N0ciAiTW9kaWZpY2F0aW9ucyBsb2NhbGVzIG5vbiBlbnJlZ2lzdHLDqWVzIGRhbnMgbCdpbmRleCBldCBub24gY29tbWl0w6llcyIKKworIzogZ2l0azo2NjIxCittc2dpZCAibWFueSIKK21zZ3N0ciAibm9tYnJldXgiCisKKyM6IGdpdGs6NjgwNQorbXNnaWQgIlRhZ3M6IgorbXNnc3RyICJUYWdzIDoiCisKKyM6IGdpdGs6NjgyMiBnaXRrOjY4MjggZ2l0azo4MDU4Cittc2dpZCAiUGFyZW50IgorbXNnc3RyICJQYXJlbnQiCisKKyM6IGdpdGs6NjgzMworbXNnaWQgIkNoaWxkIgorbXNnc3RyICJFbmZhbnQiCisKKyM6IGdpdGs6Njg0MgorbXNnaWQgIkJyYW5jaCIKK21zZ3N0ciAiQnJhbmNoZSIKKworIzogZ2l0azo2ODQ1Cittc2dpZCAiRm9sbG93cyIKK21zZ3N0ciAiU3VpdCIKKworIzogZ2l0azo2ODQ4Cittc2dpZCAiUHJlY2VkZXMiCittc2dzdHIgIlByw6ljw6hkZSIKKworIzogZ2l0azo3MzQ2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBkaWZmczogJXMiCittc2dzdHIgIkVycmV1ciBsb3JzIGRlIGxhIHLDqWN1cMOpcmF0aW9uIGRlcyBkaWZmIDogJXMiCisKKyM6IGdpdGs6Nzg4NgorbXNnaWQgIkdvdG86IgorbXNnc3RyICJBbGxlciDDoCA6IgorCisjOiBnaXRrOjc4ODgKK21zZ2lkICJTSEExIElEOiIKK21zZ3N0ciAiSWQgU0hBMSA6IgorCisjOiBnaXRrOjc5MDcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTaG9ydCBTSEExIGlkICVzIGlzIGFtYmlndW91cyIKK21zZ3N0ciAiSWQgU0hBMSBjb3VydCAlcyBlc3QgYW1iaWd1IgorCisjOiBnaXRrOjc5MTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIklkIFNIQTEgJXMgZXN0IGluY29ubnUiCisKKyM6IGdpdGs6NzkyNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNIQTEgaWQgJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJJZCBTSEExICVzIGVzdCBpbmNvbm51IgorCisjOiBnaXRrOjc5MjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3QgaW4gdGhlIGN1cnJlbnQgdmlldyIKK21zZ3N0ciAiTGEgcsOpdmlzaW9uICVzIG4nZXN0IHBhcyBkYW5zIGxhIHZ1ZSBjb3VyYW50ZSIKKworIzogZ2l0azo4MDY4Cittc2dpZCAiQ2hpbGRyZW4iCittc2dzdHIgIkVuZmFudHMiCisKKyM6IGdpdGs6ODEyNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0ICVzIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICJSw6lpbml0aWFsaXNlciBsYSBicmFuY2hlICVzIHZlcnMgY2V0IMOpdGF0IgorCisjOiBnaXRrOjgxMjcKK21zZ2lkICJEZXRhY2hlZCBoZWFkOiBjYW4ndCByZXNldCIKK21zZ3N0ciAiSGVhZCBkw6l0YWNow6kgOiBpbXBvc3NpYmxlIGRlIHLDqWluaXRpYWxpc2VyIgorCisjOiBnaXRrOjgyMzYgZ2l0azo4MjQyCittc2dpZCAiU2tpcHBpbmcgbWVyZ2UgY29tbWl0ICIKK21zZ3N0ciAiw4l2aXRlciBsZSBjb21taXQgZGUgbGEgZnVzaW9uICIKKworIzogZ2l0azo4MjUxIGdpdGs6ODI1NgorbXNnaWQgIkVycm9yIGdldHRpbmcgcGF0Y2ggSUQgZm9yICIKK21zZ3N0ciAiRXJyZXVyIMOgIGwnb2J0ZW50aW9uIGRlIGwnSUQgZHUgcGF0Y2ggcG91ciAiCisKKyM6IGdpdGs6ODI1MiBnaXRrOjgyNTcKK21zZ2lkICIgLSBzdG9wcGluZ1xuIgorbXNnc3RyICIgLSBhcnLDqnQgZW4gY291cnNcbiIKKworIzogZ2l0azo4MjYyIGdpdGs6ODI2NSBnaXRrOjgyNzMgZ2l0azo4MjgzIGdpdGs6ODI5MgorbXNnaWQgIkNvbW1pdCAiCittc2dzdHIgIkNvbW1pdCAiCisKKyM6IGdpdGs6ODI2NgorbXNnaWQgIiIKKyIgaXMgdGhlIHNhbWUgcGF0Y2ggYXNcbiIKKyIgICAgICAgIgorbXNnc3RyICIiCisiZXN0IGxlIG3Dqm1lIHBhdGNoIHF1ZSBcbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjgyNzQKK21zZ2lkICIiCisiIGRpZmZlcnMgZnJvbVxuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIgZGlmZsOocmUgZGVcbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjgyNzYKK21zZ2lkICItIHN0b3BwaW5nXG4iCittc2dzdHIgIi0gYXJyw6p0IGVuIGNvdXJzXG4iCisKKyM6IGdpdGs6ODI4NCBnaXRrOjgyOTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiYSAlcyBlbmZhbnRzIC0gYXJyw6p0IGVuIGNvdXJzXG4iCisKKyM6IGdpdGs6ODMyNAorbXNnaWQgIlRvcCIKK21zZ3N0ciAiSGF1dCIKKworIzogZ2l0azo4MzI1Cittc2dpZCAiRnJvbSIKK21zZ3N0ciAiRGUiCisKKyM6IGdpdGs6ODMzMAorbXNnaWQgIlRvIgorbXNnc3RyICLDgCIKKworIzogZ2l0azo4MzU0Cittc2dpZCAiR2VuZXJhdGUgcGF0Y2giCittc2dzdHIgIkfDqW7DqXJlciBsZSBwYXRjaCIKKworIzogZ2l0azo4MzU2Cittc2dpZCAiRnJvbToiCittc2dzdHIgIkRlIDoiCisKKyM6IGdpdGs6ODM2NQorbXNnaWQgIlRvOiIKK21zZ3N0ciAiw4AgOiIKKworIzogZ2l0azo4Mzc0Cittc2dpZCAiUmV2ZXJzZSIKK21zZ3N0ciAiSW52ZXJzZXIiCisKKyM6IGdpdGs6ODM3NiBnaXRrOjg1NjEKK21zZ2lkICJPdXRwdXQgZmlsZToiCittc2dzdHIgIkZpY2hpZXIgZGUgc29ydGllIDoiCisKKyM6IGdpdGs6ODM4MgorbXNnaWQgIkdlbmVyYXRlIgorbXNnc3RyICJHw6luw6lyZXIiCisKKyM6IGdpdGs6ODQyMAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHBhdGNoOiIKK21zZ3N0ciAiRXJyZXVyIMOgIGxhIGNyw6lhdGlvbiBkdSBwYXRjaCA6IgorCisjOiBnaXRrOjg0NDMgZ2l0azo4NTQ5IGdpdGs6ODYwNgorbXNnaWQgIklEOiIKK21zZ3N0ciAiSUQgOiIKKworIzogZ2l0azo4NDUyCittc2dpZCAiVGFnIG5hbWU6IgorbXNnc3RyICJOb20gZHUgVGFnIDoiCisKKyM6IGdpdGs6ODQ1NiBnaXRrOjg2MTUKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIkNyw6llciIKKworIzogZ2l0azo4NDczCittc2dpZCAiTm8gdGFnIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICJBdWN1biBub20gZGUgdGFnIHNww6ljaWZpw6kiCisKKyM6IGdpdGs6ODQ3NworIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkxlIHRhZyBcIiVzXCIgZXhpc3RlIGTDqWrDoCIKKworIzogZ2l0azo4NDgzCittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGFnOiIKK21zZ3N0ciAiRXJyZXVyIMOgIGxhIGNyw6lhdGlvbiBkdSB0YWcgOiIKKworIzogZ2l0azo4NTU4Cittc2dpZCAiQ29tbWFuZDoiCittc2dzdHIgIkNvbW1hbmRlIDoiCisKKyM6IGdpdGs6ODU2NgorbXNnaWQgIldyaXRlIgorbXNnc3RyICLDiWNyaXJlIgorCisjOiBnaXRrOjg1ODQKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdDoiCittc2dzdHIgIkVycmV1ciDDoCBsJ2Vjcml0dXJlIGR1IGNvbW1pdCA6IgorCisjOiBnaXRrOjg2MTEKK21zZ2lkICJOYW1lOiIKK21zZ3N0ciAiTm9tIDoiCisKKyM6IGdpdGs6ODYzNAorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IGEgbmFtZSBmb3IgdGhlIG5ldyBicmFuY2giCittc2dzdHIgIlZldWlsbGV6IHNww6ljaWZpZXIgdW4gbm9tIHBvdXIgbGEgbm91dmVsbGUgYnJhbmNoZSIKKworIzogZ2l0azo4NjM5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIE92ZXJ3cml0ZT8iCittc2dzdHIgIkxhIGJyYW5jaGUgJyVzJyBleGlzdGUgZMOpasOgLiDDiWNyYXNlcj8iCisKKyM6IGdpdGs6ODcwNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBhbHJlYWR5IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmUtYXBwbHkgaXQ/IgorbXNnc3RyICIiCisiTGUgQ29tbWl0ICVzIGVzdCBkw6lqw6AgaW5jbHVzIGRhbnMgbGEgYnJhbmNoZSAlcyAtLSBsZSByw6ktYXBwbGlxdWVyIG1hbGdyw6kgIgorInRvdXQ/IgorCisjOiBnaXRrOjg3MTAKK21zZ2lkICJDaGVycnktcGlja2luZyIKK21zZ3N0ciAiQ3VlaWxsaXIgKENoZXJyeS1waWNraW5nKSIKKworIzogZ2l0azo4NzE5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gZmlsZSAnJXMnLlxuIgorIlBsZWFzZSBjb21taXQsIHJlc2V0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKK21zZ3N0ciAiIgorIkxhIGN1ZWlsbGV0dGUgKGNoZXJyeS1waWNrKSBhIMOpY2hvdcOpZSDDoCBjYXVzZSBkZSBtb2RpZmljYXRpb25zIGxvY2FsZXMgZHUgIgorImZpY2hpZXIgJyVzJy5cbiIKKyJWZXVpbGxleiBjb21taXRlciwgcsOpaW5pdGlhbGlzZXIgb3Ugc3Rhc2hlciB2b3MgY2hhbmdlbWVudHMgZXQgZXNzYXllciBkZSAiCisibm91dmVhdS4iCisKKyM6IGdpdGs6ODcyNQorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKKyJEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAiIgorIkxhIGN1ZWlsbGV0dGUgKGNoZXJyeS1waWNrKSBhIMOpY2hvdcOpZSDDoCBjYXVzZSBkJ3VuIGNvbmZsaXQgbG9ycyBkJ3VuZSAiCisiZnVzaW9uLlxuIgorIlNvdWhhaXRlei12b3VzIGV4w6ljdXRlciBnaXQgY2l0b29sIHBvdXIgbGUgcsOpc291ZHJlID8iCisKKyM6IGdpdGs6ODc0MQorbXNnaWQgIk5vIGNoYW5nZXMgY29tbWl0dGVkIgorbXNnc3RyICJBdWN1biBjaGFuZ2VtZW50IGNvbW1pdMOpIgorCisjOiBnaXRrOjg3NjcKK21zZ2lkICJDb25maXJtIHJlc2V0IgorbXNnc3RyICJDb25maXJtZXIgbGEgcsOpaW5pdGlhbGlzYXRpb24iCisKKyM6IGdpdGs6ODc2OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAlcyB0byAlcz8iCittc2dzdHIgIlLDqWluaXRpYWxpc2VyIGxhIGJyYW5jaGUgJXMgw6AgJXM/IgorCisjOiBnaXRrOjg3NzMKK21zZ2lkICJSZXNldCB0eXBlOiIKK21zZ3N0ciAiVHlwZSBkZSByw6lpbml0aWFsaXNhdGlvbiA6IgorCisjOiBnaXRrOjg3NzcKK21zZ2lkICJTb2Z0OiBMZWF2ZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHVudG91Y2hlZCIKK21zZ3N0ciAiRG91Y2UgOiBMYWlzc2UgbGUgcsOpcGVydG9pcmUgZGUgdHJhdmFpbCBldCBsJ2luZGV4IGludGFjdHMiCisKKyM6IGdpdGs6ODc4MAorbXNnaWQgIk1peGVkOiBMZWF2ZSB3b3JraW5nIHRyZWUgdW50b3VjaGVkLCByZXNldCBpbmRleCIKK21zZ3N0ciAiIgorIkh5YnJpZGUgOiBMYWlzc2UgbGUgcsOpcGVydG9pcmUgZGUgdHJhdmFpbCBkYW5zIHNvbiDDqXRhdCBjb3VyYW50LCAiCisicsOpaW5pdGlhbGlzZSBsJ2luZGV4IgorCisjOiBnaXRrOjg3ODMKK21zZ2lkICIiCisiSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuIgorIihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorIkR1cmUgOiBSw6lpbml0aWFsaXNlIGxlIHLDqXBlcnRvaXJlIGRlIHRyYXZhaWwgZXQgbCdpbmRleFxuIgorIihhYmFuZG9ubmUgVE9VUyBsZXMgY2hhbmdlbWVudHMgbG9jYXV4KSIKKworIzogZ2l0azo4ODAwCittc2dpZCAiUmVzZXR0aW5nIgorbXNnc3RyICJSw6lpbml0aWFsaXNhdGlvbiIKKworIyBGaXhtZTogUsOpY3Vww6lyYXRpb24gZXN0LWlsIHZyYWltZW50IHVuZSBtYXV2YWlzZSB0cmFkdWN0aW9uPworIzogZ2l0azo4ODU3CisjLCBmdXp6eQorbXNnaWQgIkNoZWNraW5nIG91dCIKK21zZ3N0ciAiUsOpY3Vww6lyYXRpb24iCisKKyM6IGdpdGs6ODkxMAorbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2giCittc2dzdHIgIkltcG9zc2libGUgZGUgc3VwcHJpbWVyIGxhIGJyYW5jaGUgZW4gY291cnMiCisKKyM6IGdpdGs6ODkxNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29tbWl0cyBvbiBicmFuY2ggJXMgYXJlbid0IG9uIGFueSBvdGhlciBicmFuY2guXG4iCisiUmVhbGx5IGRlbGV0ZSBicmFuY2ggJXM/IgorbXNnc3RyICIiCisiTGVzIGNvbW1pdHMgZGUgbGEgYnJhbmNoZSAlcyBuZSBzb250IGRhbnMgYXVjdW5lIGF1dHJlIGJyYW5jaGUuXG4iCisiVm91bGV6LXZvdXMgdnJhaW1lbnQgc3VwcHJpbWVyIGNldHRlIGJyYW5jaGUgJXMgPyIKKworIzogZ2l0azo4OTQ3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFncyBhbmQgaGVhZHM6ICVzIgorbXNnc3RyICJUYWdzIGV0IGhlYWRzIDogJXMiCisKKyM6IGdpdGs6ODk2MgorbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAiRmlsdHJlciIKKworIzogZ2l0azo5MjU3Cittc2dpZCAiIgorIkVycm9yIHJlYWRpbmcgY29tbWl0IHRvcG9sb2d5IGluZm9ybWF0aW9uOyBicmFuY2ggYW5kIHByZWNlZGluZy9mb2xsb3dpbmcgIgorInRhZyBpbmZvcm1hdGlvbiB3aWxsIGJlIGluY29tcGxldGUuIgorbXNnc3RyICIiCisiRXJyZXVyIMOgIGxhIGxlY3R1cmUgZGVzIGluZm9ybWF0aW9ucyBzdXIgbGEgdG9wb2xvZ2llIGRlcyBjb21taXRzLCBsZXMgIgorImluZm9ybWF0aW9ucyBzdXIgbGVzIGJyYW5jaGVzIGV0IGxlcyB0YWdzIHByw6ljw6lkZW50cy9zdWl2YW50cyBzZXJvbnQgIgorImluY29tcGzDqHRlcy4iCisKKyM6IGdpdGs6MTAyNDMKK21zZ2lkICJUYWciCittc2dzdHIgIlRhZyIKKworIzogZ2l0azoxMDI0MworbXNnaWQgIklkIgorbXNnc3RyICJJZCIKKworIzogZ2l0azoxMDI5MQorbXNnaWQgIkdpdGsgZm9udCBjaG9vc2VyIgorbXNnc3RyICJTw6lsZWN0ZXVyIGRlIHBvbGljZSBkZSBHaXRrIgorCisjOiBnaXRrOjEwMzA4Cittc2dpZCAiQiIKK21zZ3N0ciAiQiIKKworIzogZ2l0azoxMDMxMQorbXNnaWQgIkkiCittc2dzdHIgIkkiCisKKyM6IGdpdGs6MTA0MDcKK21zZ2lkICJHaXRrIHByZWZlcmVuY2VzIgorbXNnc3RyICJQcsOpZsOpcmVuY2VzIGRlIEdpdGsiCisKKyM6IGdpdGs6MTA0MDkKK21zZ2lkICJDb21taXQgbGlzdCBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIk9wdGlvbnMgZCdhZmZpY2hhZ2UgZGUgbGEgbGlzdGUgZGVzIGNvbW1pdHMiCisKKyM6IGdpdGs6MTA0MTIKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoIChsaW5lcykiCittc2dzdHIgIkxvbmd1ZXVyIG1heGltdW0gZHUgZ3JhcGhlIChsaWduZXMpIgorCisjIEZJWE1FIDogVHJhZHVjdGlvbiBzdGFuZGFyZCBkZSAicGFuZSI/CisjOiBnaXRrOjEwNDE2CisjLCBmdXp6eSwgdGNsLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKCUgb2YgcGFuZSkiCittc2dzdHIgIkxvbmd1ZXVyIG1heGltdW0gZHUgZ3JhcGhlICglIGR1IHBhbm5lYXUpIgorCisjOiBnaXRrOjEwNDIwCittc2dpZCAiU2hvdyBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICJNb250cmVyIGxlcyBjaGFuZ2VtZW50cyBsb2NhdXgiCisKKyM6IGdpdGs6MTA0MjMKK21zZ2lkICJBdXRvLXNlbGVjdCBTSEExIgorbXNnc3RyICJTw6lsZWN0aW9uIGF1dG8uIGR1IFNIQTEiCisKKyM6IGdpdGs6MTA0MjcKK21zZ2lkICJEaWZmIGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAiT3B0aW9ucyBkJ2FmZmljaGFnZSBkZXMgZGlmZiIKKworIzogZ2l0azoxMDQyOQorbXNnaWQgIlRhYiBzcGFjaW5nIgorbXNnc3RyICJUYWlsbGUgZGVzIHRhYnVsYXRpb25zIgorCisjOiBnaXRrOjEwNDMyCittc2dpZCAiRGlzcGxheSBuZWFyYnkgdGFncyIKK21zZ3N0ciAiQWZmaWNoZXIgbGVzIHRhZ3MgbGVzIHBsdXMgcHJvY2hlcyIKKworIzogZ2l0azoxMDQzNQorbXNnaWQgIkhpZGUgcmVtb3RlIHJlZnMiCittc2dzdHIgIkNhY2hlciBsZXMgcmVmcyBkaXN0YW50ZXMiCisKKyM6IGdpdGs6MTA0MzgKK21zZ2lkICJMaW1pdCBkaWZmcyB0byBsaXN0ZWQgcGF0aHMiCittc2dzdHIgIkxpbWl0ZXIgbGVzIGRpZmbDqXJlbmNlcyBhdXggY2hlbWlucyBsaXN0w6lzIgorCisjOiBnaXRrOjEwNDQxCittc2dpZCAiU3VwcG9ydCBwZXItZmlsZSBlbmNvZGluZ3MiCittc2dzdHIgIlN1cHBvcnQgcG91ciB1biBlbmNvZGFnZSBkZXMgY2FyYWN0w6hyZXMgcGFyIGZpY2hpZXIiCisKKyM6IGdpdGs6MTA0NDcgZ2l0azoxMDUxMgorbXNnaWQgIkV4dGVybmFsIGRpZmYgdG9vbCIKK21zZ3N0ciAiT3V0aWwgZGlmZiBleHRlcm5lIgorCisjOiBnaXRrOjEwNDQ5Cittc2dpZCAiQ2hvb3NlLi4uIgorbXNnc3RyICJDaG9pc2lyLi4uIgorCisjOiBnaXRrOjEwNDU0Cittc2dpZCAiQ29sb3JzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgIkNvdWxldXJzIDogY2xpcXVlciBwb3VyIGNob2lzaXIiCisKKyM6IGdpdGs6MTA0NTcKK21zZ2lkICJCYWNrZ3JvdW5kIgorbXNnc3RyICJBcnJpw6hyZS1wbGFuIgorCisjOiBnaXRrOjEwNDU4IGdpdGs6MTA0ODgKK21zZ2lkICJiYWNrZ3JvdW5kIgorbXNnc3RyICJhcnJpw6hyZS1wbGFuIgorCisjOiBnaXRrOjEwNDYxCittc2dpZCAiRm9yZWdyb3VuZCIKK21zZ3N0ciAiUHJlbWllciBwbGFuIgorCisjOiBnaXRrOjEwNDYyCittc2dpZCAiZm9yZWdyb3VuZCIKK21zZ3N0ciAicHJlbWllciBwbGFuIgorCisjOiBnaXRrOjEwNDY1Cittc2dpZCAiRGlmZjogb2xkIGxpbmVzIgorbXNnc3RyICJEaWZmIDogYW5jaWVubmVzIGxpZ25lcyIKKworIzogZ2l0azoxMDQ2NgorbXNnaWQgImRpZmYgb2xkIGxpbmVzIgorbXNnc3RyICJkaWZmIGFuY2llbm5lcyBsaWduZXMiCisKKyM6IGdpdGs6MTA0NzAKK21zZ2lkICJEaWZmOiBuZXcgbGluZXMiCittc2dzdHIgIkRpZmYgOiBub3V2ZWxsZXMgbGlnbmVzIgorCisjOiBnaXRrOjEwNDcxCittc2dpZCAiZGlmZiBuZXcgbGluZXMiCittc2dzdHIgImRpZmYgbm91dmVsbGVzIGxpZ25lcyIKKworIzogZ2l0azoxMDQ3NQorbXNnaWQgIkRpZmY6IGh1bmsgaGVhZGVyIgorbXNnc3RyICJEaWZmIDogZW50w6p0ZSBkdSBodW5rIgorCisjOiBnaXRrOjEwNDc3Cittc2dpZCAiZGlmZiBodW5rIGhlYWRlciIKK21zZ3N0ciAiZGlmZiA6IGVudMOqdGUgZHUgaHVuayIKKworIzogZ2l0azoxMDQ4MQorbXNnaWQgIk1hcmtlZCBsaW5lIGJnIgorbXNnc3RyICJBcnJpw6hyZS1wbGFuIGRlIGxhIGxpZ25lIG1hcnF1w6llIgorCisjOiBnaXRrOjEwNDgzCittc2dpZCAibWFya2VkIGxpbmUgYmFja2dyb3VuZCIKK21zZ3N0ciAiQXJyacOocmUtcGxhbiBkZSBsYSBsaWduZSBtYXJxdcOpZSIKKworIzogZ2l0azoxMDQ4NworbXNnaWQgIlNlbGVjdCBiZyIKK21zZ3N0ciAiU8OpbGVjdGlvbm5lciBsJ2FycmnDqHJlLXBsYW4iCisKKyM6IGdpdGs6MTA0OTEKK21zZ2lkICJGb250czogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICJQb2xpY2VzIDogY2xpcXVlciBwb3VyIGNob2lzaXIiCisKKyM6IGdpdGs6MTA0OTMKK21zZ2lkICJNYWluIGZvbnQiCittc2dzdHIgIlBvbGljZSBwcmluY2lwYWxlIgorCisjOiBnaXRrOjEwNDk0Cittc2dpZCAiRGlmZiBkaXNwbGF5IGZvbnQiCittc2dzdHIgIlBvbGljZSBkJ2FmZmljaGFnZSBkZXMgZGlmZiIKKworIzogZ2l0azoxMDQ5NQorbXNnaWQgIlVzZXIgaW50ZXJmYWNlIGZvbnQiCittc2dzdHIgIlBvbGljZSBkZSBsJ2ludGVyZmFjZSB1dGlsaXNhdGV1ciIKKworIzogZ2l0azoxMDUyMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkdpdGs6IGNob29zZSBjb2xvciBmb3IgJXMiCittc2dzdHIgIkdpdGsgOiBjaG9pc2lyIGxhIGNvdWxldXIgZGUgJXMiCisKKyM6IGdpdGs6MTA5NzMKK21zZ2lkICIiCisiU29ycnksIGdpdGsgY2Fubm90IHJ1biB3aXRoIHRoaXMgdmVyc2lvbiBvZiBUY2wvVGsuXG4iCisiIEdpdGsgcmVxdWlyZXMgYXQgbGVhc3QgVGNsL1RrIDguNC4iCittc2dzdHIgIiIKKyJEw6lzb2zDqSwgZ2l0ayBuZSBwZXV0IMOqdHJlIGV4w6ljdXTDqSBhdmVjIGNldHRlIHZlcnNpb24gZGUgVGNsL1RrLlxuIgorIiBHaXRrIHJlcXVpZXJ0IFRjbC9UayB2ZXJzaW9uIDguNCBvdSBzdXDDqXJpZXVyLiIKKworIzogZ2l0azoxMTEwMQorbXNnaWQgIkNhbm5vdCBmaW5kIGEgZ2l0IHJlcG9zaXRvcnkgaGVyZS4iCittc2dzdHIgIkltcG9zc2libGUgZGUgdHJvdXZlciB1biBkw6lww7R0IGdpdCBpY2kuIgorCisjOiBnaXRrOjExMTA1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZpbmQgdGhlIGdpdCBkaXJlY3RvcnkgXCIlc1wiLiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSB0cm91dmVyIGxlIHLDqXBlcnRvaXJlIGdpdCBcIiVzXCIuIgorCisjOiBnaXRrOjExMTUyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lIgorbXNnc3RyICJBcmd1bWVudCAnJXMnIGFtYmlndSA6IMOgIGxhIGZvaXMgdW5lIHLDqXZpc2lvbiBldCB1biBub20gZGUgZmljaGllciIKKworIzogZ2l0azoxMTE2NAorbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCittc2dzdHIgIkFyZ3VtZW50cyBpbnZhbGlkZXMgcG91ciBnaXRrIDoiCisKKyM6IGdpdGs6MTEyNDkKK21zZ2lkICJDb21tYW5kIGxpbmUiCittc2dzdHIgIkxpZ25lIGRlIGNvbW1hbmRlIgpkaWZmIC0tZ2l0IGEvZ2l0ay1naXQvcG8vaHUucG8gYi9naXRrLWdpdC9wby9odS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGYyMTJlCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0ay1naXQvcG8vaHUucG8KQEAgLTAsMCArMSwxMjk1IEBACisjIFRyYW5zbGF0aW9uIG9mIGdpdGsgdG8gSHVuZ2FyaWFuLgorIyBDb3B5cmlnaHQgKEMpIDIwMDcgUGF1bCBNYWNrZXJyYXMuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXRrIHBhY2thZ2UuCisjCisjIExhc3psbyBQYXBwIDxsYXN6bG8ucGFwcEBhcmh1bmdhcnkuaHU+LCAyMDA5LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0LWd1aVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwOS0xMi0xNCAxMzozMyswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOS0xMi0xNCAxNDowNCswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBMYXN6bG8gUGFwcCA8ZGpzemFwaUBhcmNobGludXgudXM+XG4iCisiTGFuZ3VhZ2UtVGVhbTogSHVuZ2FyaWFuXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IGdpdGs6MTE1Cittc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgorbXNnc3RyICJOZW0gc2lrZXLDvGx0IGxldMO2bHRlbmkgYXogdW5tZXJnZWQgZsOhamwgbGlzdMOhdDoiCisKKyM6IGdpdGs6MjcxCittc2dpZCAiRXJyb3IgcGFyc2luZyByZXZpc2lvbnM6IgorbXNnc3RyICJIaWJhIHTDtnJ0w6ludCDDqXJ0ZWxtZXrDqXMga8O2emJlbjoiCisKKyM6IGdpdGs6MzI2Cittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiIKK21zZ3N0ciAiSGliYSB0w7ZydMOpbnQgYSB2w6lncmVoYWp0w6Fza29yIC0tYXJnc2NtZCBwYXJhbmNzOiIKKworIzogZ2l0azozMzkKK21zZ2lkICJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIGZpbGVzIGFyZSB1bm1lcmdlZC4iCittc2dzdHIgIiIKKyJOaW5jc2VuIGbDoWpsIGtpdsOhbGFzenR2YTogLS1tZXJnZSBtZWdhZHZlLCBkZSBlZ3lldGxlbiBmw6FqbCBzZW0gdW5tZXJnZWQuIgorCisjOiBnaXRrOjM0MgorbXNnaWQgIiIKKyJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIHVubWVyZ2VkIGZpbGVzIGFyZSB3aXRoaW4gZmlsZSAiCisibGltaXQuIgorbXNnc3RyICIiCisiTmluY3NlbiBmw6FqbCBraXbDoWxhc3p0dmE6IC0tbWVyZ2UgbWVnYWR2YSwgZGUgbmluY3NlbmVrIHVubWVyZ2VkIGbDoWpsb2sgYSAiCisiZsOhamxvbiBiZWzDvGwgbGltaXQuIgorCisjOiBnaXRrOjM2NCBnaXRrOjUxMQorbXNnaWQgIkVycm9yIGV4ZWN1dGluZyBnaXQgbG9nOiIKK21zZ3N0ciAiSGliYSB0w7ZydMOpbnQgYSBnaXQgbG9nIHbDqWdyZWhhanTDoXNhIGvDtnpiZW46IgorCisjOiBnaXRrOjM4MiBnaXRrOjUyNworbXNnaWQgIlJlYWRpbmciCittc2dzdHIgIk9sdmFzw6FzIgorCisjOiBnaXRrOjQ0MiBnaXRrOjQyNTgKK21zZ2lkICJSZWFkaW5nIGNvbW1pdHMuLi4iCittc2dzdHIgIkNvbW1pdG9rIG9sdmFzw6FzYSAuLi4iCisKKyM6IGdpdGs6NDQ1IGdpdGs6MTU3NSBnaXRrOjQyNjEKK21zZ2lkICJObyBjb21taXRzIHNlbGVjdGVkIgorbXNnc3RyICJOaW5jc2VuIGNvbW1pdCBraXbDoWxhc3p0dmEiCisKKyM6IGdpdGs6MTQ1MQorbXNnaWQgIkNhbid0IHBhcnNlIGdpdCBsb2cgb3V0cHV0OiIKK21zZ3N0ciAiTmVtIGxlaGV0IMOpcnRlbG1lem5pIGEgZ2l0IGxvZyBraW1lbmV0w6l0OiIKKworIzogZ2l0azoxNjcxCittc2dpZCAiTm8gY29tbWl0IGluZm9ybWF0aW9uIGF2YWlsYWJsZSIKK21zZ3N0ciAiTmluY3NlbiBlbMOpcmhldMWRIGNvbW1pdCBpbmZvcm3DoWNpw7MiCisKKyM6IGdpdGs6MTgxMworbXNnaWQgIm1jIgorbXNnc3RyICJtYyIKKworIzogZ2l0azoxODQ4IGdpdGs6NDA1MSBnaXRrOjkwMjkgZ2l0azoxMDU3MCBnaXRrOjEwNzg5Cittc2dpZCAiT0siCittc2dzdHIgIk9LIgorCisjOiBnaXRrOjE4NTAgZ2l0azo0MDUzIGdpdGs6ODYyOSBnaXRrOjg3MDMgZ2l0azo4ODEzIGdpdGs6ODg2MiBnaXRrOjkwMzEKKyM6IGdpdGs6MTA1NzEgZ2l0azoxMDc5MAorbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiVmlzc3phdm9uw6FzIgorCisjOiBnaXRrOjE5NzIKK21zZ2lkICJVcGRhdGUiCittc2dzdHIgIkZyaXNzaXTDqXMiCisKKyM6IGdpdGs6MTk3MworbXNnaWQgIlJlbG9hZCIKK21zZ3N0ciAiw5pqcmF0w7ZsdMOpcyIKKworIzogZ2l0azoxOTc0Cittc2dpZCAiUmVyZWFkIHJlZmVyZW5jZXMiCittc2dzdHIgIlJlZmVyZW5jacOhayDDumpyYW9sdmFzw6FzYSIKKworIzogZ2l0azoxOTc1Cittc2dpZCAiTGlzdCByZWZlcmVuY2VzIgorbXNnc3RyICJSZWZlcmVuY2nDoWsgbGlzdMOhesOhc2EiCisKKyM6IGdpdGs6MTk3NworbXNnaWQgIlN0YXJ0IGdpdCBndWkiCittc2dzdHIgIkdpdCBndWkgaW5kw610w6FzYSIKKworIzogZ2l0azoxOTc5Cittc2dpZCAiUXVpdCIKK21zZ3N0ciAiS2lsw6lww6lzIgorCisjOiBnaXRrOjE5NzEKK21zZ2lkICJGaWxlIgorbXNnc3RyICJGw6FqbCIKKworIzogZ2l0azoxOTgzCittc2dpZCAiUHJlZmVyZW5jZXMiCittc2dzdHIgIkJlw6FsbMOtdMOhc29rIgorCisjOiBnaXRrOjE5ODIKK21zZ2lkICJFZGl0IgorbXNnc3RyICJTemVya2VzenTDqXMiCisKKyM6IGdpdGs6MTk4NworbXNnaWQgIk5ldyB2aWV3Li4uIgorbXNnc3RyICLDmmogbsOpemV0IC4uLiIKKworIzogZ2l0azoxOTg4Cittc2dpZCAiRWRpdCB2aWV3Li4uIgorbXNnc3RyICJOw6l6ZXQgc3plcmtlc3p0w6lzZSAuLi4iCisKKyM6IGdpdGs6MTk4OQorbXNnaWQgIkRlbGV0ZSB2aWV3IgorbXNnc3RyICJOw6l6ZXQgdMO2cmzDqXNlIgorCisjOiBnaXRrOjE5OTEKK21zZ2lkICJBbGwgZmlsZXMiCittc2dzdHIgIk1pbmRlbiBmw6FqbCIKKworIzogZ2l0azoxOTg2IGdpdGs6MzgwNQorbXNnaWQgIlZpZXciCittc2dzdHIgIk7DqXpldCIKKworIzogZ2l0azoxOTk2IGdpdGs6MjAwNiBnaXRrOjI3NzcKK21zZ2lkICJBYm91dCBnaXRrIgorbXNnc3RyICJHaXRrIG7DqXZqZWd5IgorCisjOiBnaXRrOjE5OTcgZ2l0azoyMDExCittc2dpZCAiS2V5IGJpbmRpbmdzIgorbXNnc3RyICJCaWxsZW50ecWxa29tYmluw6FjacOzIgorCisjOiBnaXRrOjE5OTUgZ2l0azoyMDEwCittc2dpZCAiSGVscCIKK21zZ3N0ciAiU2Vnw610c8OpZyIKKworIzogZ2l0azoyMDg4Cittc2dpZCAiU0hBMSBJRDogIgorbXNnc3RyICJTSEExIElEOiAiCisKKyM6IGdpdGs6MjExOQorbXNnaWQgIlJvdyIKK21zZ3N0ciAiU29yIgorCisjOiBnaXRrOjIxNTcKK21zZ2lkICJGaW5kIgorbXNnc3RyICJLZXJlc8OpcyIKKworIzogZ2l0azoyMTU4Cittc2dpZCAibmV4dCIKK21zZ3N0ciAia8O2dmV0a2V6xZEiCisKKyM6IGdpdGs6MjE1OQorbXNnaWQgInByZXYiCittc2dzdHIgImVsxZF6xZEiCisKKyM6IGdpdGs6MjE2MAorbXNnaWQgImNvbW1pdCIKK21zZ3N0ciAiY29tbWl0IgorCisjOiBnaXRrOjIxNjMgZ2l0azoyMTY1IGdpdGs6NDQxOSBnaXRrOjQ0NDIgZ2l0azo0NDY2IGdpdGs6NjQwNyBnaXRrOjY0NzkKKyM6IGdpdGs6NjU2MworbXNnaWQgImNvbnRhaW5pbmc6IgorbXNnc3RyICJ0YXJ0YWxtYXrDoXM6IgorCisjOiBnaXRrOjIxNjYgZ2l0azozMjg3IGdpdGs6MzI5MiBnaXRrOjQ0OTQKK21zZ2lkICJ0b3VjaGluZyBwYXRoczoiCittc2dzdHIgIsOpcmludGVuZMWRIMO6dHZvbmFsYWs6IgorCisjOiBnaXRrOjIxNjcgZ2l0azo0NDk5Cittc2dpZCAiYWRkaW5nL3JlbW92aW5nIHN0cmluZzoiCittc2dzdHIgInN0cmluZyBob3p6w6FhZMOhc2EvdMO2cmzDqXNlOiIKKworIzogZ2l0azoyMTc2IGdpdGs6MjE3OAorbXNnaWQgIkV4YWN0IgorbXNnc3RyICJQb250b3MiCisKKyM6IGdpdGs6MjE3OCBnaXRrOjQ1NzQgZ2l0azo2Mzc1Cittc2dpZCAiSWduQ2FzZSIKK21zZ3N0ciAiS2lzL25hZ3kgYmV0xbEgbmVtIHN6w6Ftw610IgorCisjOiBnaXRrOjIxNzggZ2l0azo0NDY4IGdpdGs6NDU3MiBnaXRrOjYzNzEKK21zZ2lkICJSZWdleHAiCittc2dzdHIgIlJlZ2V4cCIKKworIzogZ2l0azoyMTgwIGdpdGs6MjE4MSBnaXRrOjQ1OTMgZ2l0azo0NjIzIGdpdGs6NDYzMCBnaXRrOjY0OTkgZ2l0azo2NTY3Cittc2dpZCAiQWxsIGZpZWxkcyIKK21zZ3N0ciAiTWluZGVuIG1lesWRIgorCisjOiBnaXRrOjIxODEgZ2l0azo0NTkxIGdpdGs6NDYyMyBnaXRrOjY0MzgKK21zZ2lkICJIZWFkbGluZSIKK21zZ3N0ciAiRsWRY8OtbSIKKworIzogZ2l0azoyMTgyIGdpdGs6NDU5MSBnaXRrOjY0MzggZ2l0azo2NTY3IGdpdGs6NzAwMAorbXNnaWQgIkNvbW1lbnRzIgorbXNnc3RyICJNZWdqZWd5esOpc2VrIgorCisjOiBnaXRrOjIxODIgZ2l0azo0NTkxIGdpdGs6NDU5NSBnaXRrOjQ2MzAgZ2l0azo2NDM4IGdpdGs6NjkzNSBnaXRrOjgyODAKKyM6IGdpdGs6ODI5NQorbXNnaWQgIkF1dGhvciIKK21zZ3N0ciAiU3plcnrFkSIKKworIzogZ2l0azoyMTgyIGdpdGs6NDU5MSBnaXRrOjY0MzggZ2l0azo2OTM3Cittc2dpZCAiQ29tbWl0dGVyIgorbXNnc3RyICJDb21taXRvbMOzIgorCisjOiBnaXRrOjIyMTMKK21zZ2lkICJTZWFyY2giCittc2dzdHIgIktlcmVzw6lzIgorCisjOiBnaXRrOjIyMjEKK21zZ2lkICJEaWZmIgorbXNnc3RyICJEaWZmIgorCisjOiBnaXRrOjIyMjMKK21zZ2lkICJPbGQgdmVyc2lvbiIKK21zZ3N0ciAiUsOpZ2kgdmVyemnDsyIKKworIzogZ2l0azoyMjI1Cittc2dpZCAiTmV3IHZlcnNpb24iCittc2dzdHIgIsOaaiB2ZXJ6acOzIgorCisjOiBnaXRrOjIyMjcKK21zZ2lkICJMaW5lcyBvZiBjb250ZXh0IgorbXNnc3RyICJUYXJ0YWxtaSBzb3JvayIKKworIzogZ2l0azoyMjM3Cittc2dpZCAiSWdub3JlIHNwYWNlIGNoYW5nZSIKK21zZ3N0ciAiU3BhY2UgdsOhbHTDoXMgbWVsbMWResOpc2UiCisKKyM6IGdpdGs6MjI5NgorbXNnaWQgIlBhdGNoIgorbXNnc3RyICJQYXRjaCIKKworIzogZ2l0azoyMjk4Cittc2dpZCAiVHJlZSIKK21zZ3N0ciAiVHJlZSIKKworIzogZ2l0azoyNDUzIGdpdGs6MjQ3MAorbXNnaWQgIkRpZmYgdGhpcyAtPiBzZWxlY3RlZCIKK21zZ3N0ciAiRGlmZiBlemVrZXQgLT4ga2l2w6FsYXN6dG90dCIKKworIzogZ2l0azoyNDU0IGdpdGs6MjQ3MQorbXNnaWQgIkRpZmYgc2VsZWN0ZWQgLT4gdGhpcyIKK21zZ3N0ciAiRGlmZiBraXbDoWxhc3p0b3R0YWthdCAtPiBlenQiCisKKyM6IGdpdGs6MjQ1NSBnaXRrOjI0NzIKK21zZ2lkICJNYWtlIHBhdGNoIgorbXNnc3RyICJQYXRjaCBrw6lzesOtdMOpc2UiCisKKyM6IGdpdGs6MjQ1NiBnaXRrOjg2ODcKK21zZ2lkICJDcmVhdGUgdGFnIgorbXNnc3RyICJUYWcga8Opc3rDrXTDqXNlIgorCisjOiBnaXRrOjI0NTcgZ2l0azo4NzkzCittc2dpZCAiV3JpdGUgY29tbWl0IHRvIGZpbGUiCittc2dzdHIgIkNvbW1pdCBmw6FsamJhIMOtcsOhc2EiCisKKyM6IGdpdGs6MjQ1OCBnaXRrOjg4NTAKK21zZ2lkICJDcmVhdGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiw5pqIGJyYW5jaCBrw6lzesOtdMOpc2UiCisKKyM6IGdpdGs6MjQ1OQorbXNnaWQgIkNoZXJyeS1waWNrIHRoaXMgY29tbWl0IgorbXNnc3RyICJDaGVycnktcGljayBlcnJlIGEgY29tbWl0cmEiCisKKyM6IGdpdGs6MjQ2MAorbXNnaWQgIlJlc2V0IEhFQUQgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIkhFQUQgYnJhbmNoIMO6anJhaW5kw610w6FzYSBpZGUiCisKKyM6IGdpdGs6MjQ2MQorbXNnaWQgIk1hcmsgdGhpcyBjb21taXQiCittc2dzdHIgIkV6ZW4gY29tbWl0IG1lZ2plbMO2bMOpc2UiCisKKyM6IGdpdGs6MjQ2MgorbXNnaWQgIlJldHVybiB0byBtYXJrIgorbXNnc3RyICJWaXNzemF0w6lyw6lzIGEgbWVnamVsw7Zsw6lzaGV6IgorCisjOiBnaXRrOjI0NjMKK21zZ2lkICJGaW5kIGRlc2NlbmRhbnQgb2YgdGhpcyBhbmQgbWFyayIKK21zZ3N0ciAiVGFsw6FsZCBtZWcgZXplbiB1dMOzZG9rYXQgw6lzIGplbMO2bGQgbWVnIgorCisjOiBnaXRrOjI0NjQKK21zZ2lkICJDb21wYXJlIHdpdGggbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAiw5Zzc3plaGFzb25sw610w6FzIGEgbWVnamVsw7ZsdCBjb21taXQtdGFsIgorCisjOiBnaXRrOjI0NzgKK21zZ2lkICJDaGVjayBvdXQgdGhpcyBicmFuY2giCittc2dzdHIgIkNoZWNrIG91dCBlenQgYSBicmFuY2hvdCIKKworIzogZ2l0azoyNDc5Cittc2dpZCAiUmVtb3ZlIHRoaXMgYnJhbmNoIgorbXNnc3RyICJUw7Zyw7ZsZCBlenQgYSBicmFuY2gtb3QiCisKKyM6IGdpdGs6MjQ4NgorbXNnaWQgIkhpZ2hsaWdodCB0aGlzIHRvbyIKK21zZ3N0ciAiRW1lbGQga2kgZXp0IGlzIgorCisjOiBnaXRrOjI0ODcKK21zZ2lkICJIaWdobGlnaHQgdGhpcyBvbmx5IgorbXNnc3RyICJDc2FrIGV6dCBlbWVsZCBraSIKKworIzogZ2l0azoyNDg4Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiIKK21zZ3N0ciAiS8O8bHPFkSBkaWZmIgorCisjOiBnaXRrOjI0ODkKK21zZ2lkICJCbGFtZSBwYXJlbnQgY29tbWl0IgorbXNnc3RyICJCbGFtZSBzesO8bMWRIGtvbW1pdHJhIgorCisjOiBnaXRrOjI0OTYKK21zZ2lkICJTaG93IG9yaWdpbiBvZiB0aGlzIGxpbmUiCittc2dzdHIgIk11dGFzZCBtZWcgZW5uZWsgYSBzb3JuYWsgYXogZXJlZGV0w6l0IgorCisjOiBnaXRrOjI0OTcKK21zZ2lkICJSdW4gZ2l0IGd1aSBibGFtZSBvbiB0aGlzIGxpbmUiCittc2dzdHIgIkZ1dHRhc2QgYSBnaXQgZ3VpIGJsYW1lLXQgZXplbiBhIHNvcm9uIgorCisjOiBnaXRrOjI3NzkKK21zZ2lkICIiCisiXG4iCisiR2l0ayAtIGEgY29tbWl0IHZpZXdlciBmb3IgZ2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IMKpOSAyMDA1LTIwMDkgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyJVc2UgYW5kIHJlZGlzdHJpYnV0ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIgorbXNnc3RyICIiCisiXG4iCisiR2l0ayAtIGNvbW1pdCBuw6l6ZWdldMWRIGEgZ2l0aGV6XG4iCisiXG4iCisiU3plcnrFkWkgam9nIMKpOSAyMDA1LTIwMDkgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyJIYXN6bsOhbGQgw6lzIHRlcmplc3pkIGEgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZmVsdMOpdGVsZWkgbWVsbGV0dCIKKworIzogZ2l0azoyNzg3IGdpdGs6Mjg1MSBnaXRrOjkyMTUKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAiQmV6w6Fyw6FzIgorCisjOiBnaXRrOjI4MDgKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5ncyIKK21zZ3N0ciAiR2l0ay1iaWxsZW50ecWxIGhvenrDoXJlbmRlbMOpcyIKKworIzogZ2l0azoyODExCittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3M6IgorbXNnc3RyICJHaXRrLWJpbGxlbnR5xbEgaG96emHDoXJlbmRlbMOpczoiCisKKyM6IGdpdGs6MjgxMworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1RPlx0XHRRdWl0IgorbXNnc3RyICI8JXMtUT5cdFx0S2lsw6lww6lzIgorCisjOiBnaXRrOjI4MTQKK21zZ2lkICI8SG9tZT5cdFx0TW92ZSB0byBmaXJzdCBjb21taXQiCittc2dzdHIgIjxQb3MxPlx0XHRFbHPFkSBjb21taXRob3oiCisKKyM6IGdpdGs6MjgxNQorbXNnaWQgIjxFbmQ+XHRcdE1vdmUgdG8gbGFzdCBjb21taXQiCittc2dzdHIgIjxFbmRlPlx0XHRVdG9sc8OzIGNvbW1pdGhveiIKKworIzogZ2l0azoyODE2Cittc2dpZCAiPFVwPiwgcCwgaVx0TW92ZSB1cCBvbmUgY29tbWl0IgorbXNnc3RyICI8SG9jaD4sIHAsIGlcdEVneSBjb21taXR0YWwgZmVsamViYiIKKworIzogZ2l0azoyODE3Cittc2dpZCAiPERvd24+LCBuLCBrXHRNb3ZlIGRvd24gb25lIGNvbW1pdCIKK21zZ3N0ciAiPFJ1bnRlcj4sIG4sIGtcdEVneSBjb21taXR0YWwgbGVqamViYiIKKworIzogZ2l0azoyODE4Cittc2dpZCAiPExlZnQ+LCB6LCBqXHRHbyBiYWNrIGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPExpbmtzPiwgeiwgalx0Vmlzc3phIGEgaGlzdG9yeSBsaXN0w6FiYSIKKworIzogZ2l0azoyODE5Cittc2dpZCAiPFJpZ2h0PiwgeCwgbFx0R28gZm9yd2FyZCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxSZWNodHM+LCB4LCBsXHRFbMWRcmUgYSBoaXN0b3J5IGxpc3TDoWJhIgorCisjOiBnaXRrOjI4MjAKK21zZ2lkICI8UGFnZVVwPlx0TW92ZSB1cCBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPEJpbGRIb2NoPlx0RWd5IGxhcHBhbCBmZWxqZWJiIGEgY29tbWl0IGxpc3TDoWJhIgorCisjOiBnaXRrOjI4MjEKK21zZ2lkICI8UGFnZURvd24+XHRNb3ZlIGRvd24gb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxCaWxkUnVudGVyPlx0RWd5IGxhcHBhbCBsZWpqZWJiIGEgY29tbWl0IGxpc3TDoWJhIgorCisjOiBnaXRrOjI4MjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtSG9tZT5cdFNjcm9sbCB0byB0b3Agb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1Qb3MxPlx0R8O2cmdldMOpcyBhIGNvbW1pdCBsaXN0YSB0ZXRlasOpaGV6IgorCisjOiBnaXRrOjI4MjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRW5kPlx0U2Nyb2xsIHRvIGJvdHRvbSBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUVuZGU+XHRHw7ZyZ2V0w6lzIGEgY29tbWl0IGxpc3RhIGFsasOhaG96IgorCisjOiBnaXRrOjI4MjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIGxpbmUiCittc2dzdHIgIjwlcy1Ib2NoPlx0RWd5IHNvcnJhbCBmZWxqZWJiIGfDtnJnZXTDqXMgYSBjb21taXQgbGlzdMOhYmFuIgorCisjOiBnaXRrOjI4MjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtUnVudGVyPlx0RWd5IHNvcnJhbCBsZWpqZWJiIGfDtnJnZXTDqXMgYSBjb21taXQgbGlzdMOhYmFuIgorCisjOiBnaXRrOjI4MjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtQmlsZEhvY2g+XHRFZ3kgbGFwcGFsIGZlbGplYmIgZ8O2cmdldMOpcyBhIGNvbW1pdCBsaXN0w6FiYW4iCisKKyM6IGdpdGs6MjgyNworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtQmlsZFJ1bnRlcj5cdEVneSBzb3JyYWwgbGVqamViYiBnw7ZyZ2V0w6lzIGEgY29tbWl0IGxpc3TDoWJhbiIKKworIzogZ2l0azoyODI4Cittc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgorbXNnc3RyICI8VW1zY2hhbHQtSG9jaD5cdEtlcmVzw6lzIHZpc3N6YWZlbGUgKGZlbGZlbGUsIHV0b2xzw7MgY29tbWl0b2spIgorCisjOiBnaXRrOjI4MjkKK21zZ2lkICI8U2hpZnQtRG93bj5cdEZpbmQgZm9yd2FyZHMgKGRvd253YXJkcywgZWFybGllciBjb21taXRzKSIKK21zZ3N0ciAiPFVtc2NoYWx0LVJ1bnRlcj5cdEtlcmVzw6lzIGVsxZFyZSAobGVmZWzDqTsga29yw6FiYmkgY29tbWl0b2spIgorCisjOiBnaXRrOjI4MzAKK21zZ2lkICI8RGVsZXRlPiwgYlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPEVudGY+LCBiXHRcdEVneSBsYXBwYWwgZmVsamViYiBnw7ZyZ2V0w6lzIGEgZGlmZiBuw6l6ZXRiZW4iCisKKyM6IGdpdGs6MjgzMQorbXNnaWQgIjxCYWNrc3BhY2U+XHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8TMO2c2NodGFzdGU+XHRFZ3kgbGFwcGFsIGZlbGplYmIgZ8O2cmdldMOpcyBhIGRpZmYgbsOpemV0YmVuIgorCisjOiBnaXRrOjI4MzIKK21zZ2lkICI8U3BhY2U+XHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPExlZXJ0YXN0ZT5cdEVneSBsYXBwYWwgbGVqamViYiBnw7ZyZ2V0w6lzIGEgZGlmZiBuw6l6ZXRiZW4iCisKKyM6IGdpdGs6MjgzMworbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKK21zZ3N0ciAidVx0XHQxOCBzb3JyYWwgZmVsZmVsw6kgZ8O2cmdldMOpcyBkaWZmIG7DqXpldGJlbiIKKworIzogZ2l0azoyODM0Cittc2dpZCAiZFx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiCittc2dzdHIgImRcdFx0MTggc29ycmFsIGxlamplYmIgZ8O2cmdldMOpcyBhIGRpZmYgbsOpemV0YmVuIgorCisjOiBnaXRrOjI4MzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRj5cdFx0RmluZCIKK21zZ3N0ciAiPCVzLUY+XHRcdEtlcmVzw6lzIgorCisjOiBnaXRrOjI4MzYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRz5cdFx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8JXMtRz5cdFx0S8O2dmV0a2V6xZEgdGFsw6FsYXRob3oiCisKKyM6IGdpdGs6MjgzNworbXNnaWQgIjxSZXR1cm4+XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjxFaW5nYWJldGFzdGU+XHRLw7Z2ZXRrZXrFkSB0YWzDoWxhdGhveiIKKworIzogZ2l0azoyODM4Cittc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKK21zZ3N0ciAiL1x0XHRMw6lwaiBhIGtlcmVzw6lzaSBtZXrFkXJlIgorCisjOiBnaXRrOjI4MzkKK21zZ2lkICI/XHRcdE1vdmUgdG8gcHJldmlvdXMgZmluZCBoaXQiCittc2dzdHIgIj9cdFx0RWzFkXrFkSB0YWzDoWxhdGhveiIKKworIzogZ2l0azoyODQwCittc2dpZCAiZlx0XHRTY3JvbGwgZGlmZiB2aWV3IHRvIG5leHQgZmlsZSIKK21zZ3N0ciAiZlx0XHRLw7Z2ZXRrZXrFkSBmw6FqbHJhIGfDtnJnZXTDqXMgZGlmZiBuw6l6ZXRiZW4iCisKKyM6IGdpdGs6Mjg0MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1TPlx0XHRTZWFyY2ggZm9yIG5leHQgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVM+XHRcdEvDtnZldGtlesWRIHRhbMOhbGF0cmEga2VyZXPDqXMgZGlmZiBuw6l6ZXRiZW4iCisKKyM6IGdpdGs6Mjg0MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1SPlx0XHRTZWFyY2ggZm9yIHByZXZpb3VzIGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1SPlx0XHRFbMWResWRIHRhbMOhbGF0cmEga2VyZXPDqXMgZGlmZiBuw6l6ZXRiZW4iCisKKyM6IGdpdGs6Mjg0MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUCs+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1OdW1tZXJibG9jay1QbHVzPlx0QmV0xbFtw6lyZXQgbsO2dmVsw6lzZSIKKworIzogZ2l0azoyODQ0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLXBsdXM+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1QbHVzPlx0QmV0xbFtw6lyZXQgbsO2dmVsw6lzZSIKKworIzogZ2l0azoyODQ1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQLT5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLU51bW1lcm5ibG9jay1NaW51cz4gQmV0xbFtw6lyZXQgY3PDtmtrZW50w6lzZSIKKworIzogZ2l0azoyODQ2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW1pbnVzPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtTWludXM+XHRCZXTFsW3DqXJldCBjc8O2a2tlbnTDqXNlIgorCisjOiBnaXRrOjI4NDcKK21zZ2lkICI8RjU+XHRcdFVwZGF0ZSIKK21zZ3N0ciAiPEY1Plx0XHRGcmlzc8OtdMOpcyIKKworIzogZ2l0azozMzAyIGdpdGs6MzMxMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXM6IgorbXNnc3RyICJIaWJhIHTDtnJ0w6ludCBheiBpZGVpZ2xlbmVzIGvDtm55dnTDoXIgbMOpdHJlaG96w6FzYSBrw7Z6YmVuICVzOiIKKworIzogZ2l0azozMzI0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBcIiVzXCIgZnJvbSAlczoiCittc2dzdHIgIkhpYmEgdMO2cnTDqW50IFwiJXNcIiBsZXTDtmx0w6lzZSBrw7Z6YmVuICVzLXLFkWw6IgorCisjOiBnaXRrOjMzODcKK21zZ2lkICJjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgInBhcmFuY3MgaGliYToiCisKKyM6IGdpdGs6MzUzNgorbXNnaWQgIk5vIHN1Y2ggY29tbWl0IgorbXNnc3RyICJOaW5jcyBpbHllbiBjb21taXQiCisKKyM6IGdpdGs6MzU1MAorbXNnaWQgImdpdCBndWkgYmxhbWU6IGNvbW1hbmQgZmFpbGVkOiIKK21zZ3N0ciAiZ2l0IGd1aSBibGFtZTogcGFyYW5jcyBoaWJhOiIKKworIzogZ2l0azozNTgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcmVhZCBtZXJnZSBoZWFkOiAlcyIKK21zZ3N0ciAiTmVtIHNpa2Vyw7xsdCBhIE1lcmdlIGhlYWQgb2x2YXPDoXNhOiAlcyIKKworIzogZ2l0azozNTg5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBpbmRleDogJXMiCittc2dzdHIgIkhpYmEgdMO2cnTDqW50IGF6IGluZGV4IG9sdmFzw6FzYSBrw7Z6YmVuOiAlcyIKKworIzogZ2l0azozNjE0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3Qgc3RhcnQgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAiTmVtIHNpa2Vyw7xsdCBhIGdpdCBibGFtZSBpbmTDrXTDoXNhOiAlcyIKKworIzogZ2l0azozNjE3IGdpdGs6NjQwNgorbXNnaWQgIlNlYXJjaGluZyIKK21zZ3N0ciAiS2VyZXPDqXMiCisKKyM6IGdpdGs6MzY0OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJ1bm5pbmcgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAiSGliYSB0w7ZydMOpbnQgYSBnaXQgYmxhbWUgZnV0dGF0w6FzYSBrw7Z6YmVuOiAlcyIKKworIzogZ2l0azozNjc3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGhhdCBsaW5lIGNvbWVzIGZyb20gY29tbWl0ICVzLCAgd2hpY2ggaXMgbm90IGluIHRoaXMgdmlldyIKK21zZ3N0ciAiIgorIkEgJXMgY29tbWl0YsOzbCBzesOhcm1hemlrIGF6IGEgc29yLCBhbWVseWlrIG5lbSB0YWzDoWxoYXTDsyBlYmJlbiBhIG7DqXpldGJlbiIKKworIzogZ2l0azozNjkxCittc2dpZCAiRXh0ZXJuYWwgZGlmZiB2aWV3ZXIgZmFpbGVkOiIKK21zZ3N0ciAiS8O8bHPFkSBkaWZmIG7DqXplZ2V0xZEgaGliYToiCisKKyM6IGdpdGs6MzgwOQorbXNnaWQgIkdpdGsgdmlldyBkZWZpbml0aW9uIgorbXNnc3RyICJHaXRrIG7DqXpldCBtZWdoYXTDoXJvesOhc2EiCisKKyM6IGdpdGs6MzgxMworbXNnaWQgIlJlbWVtYmVyIHRoaXMgdmlldyIKK21zZ3N0ciAiTWFyYWRqIGVubsOpbCBhIG7DqXpldG7DqWwiCisKKyM6IGdpdGs6MzgxNAorbXNnaWQgIlJlZmVyZW5jZXMgKHNwYWNlIHNlcGFyYXRlZCBsaXN0KToiCittc2dzdHIgIlJlZmVyZW5jacOhayAoc3rDs2vDtnp6ZWwgdGFnb2x0IGxpc3RhIgorCisjOiBnaXRrOjM4MTUKK21zZ2lkICJCcmFuY2hlcyAmIHRhZ3M6IgorbXNnc3RyICJCcmFuY2gtZWsgJiB0YWdlazoiCisKKyM6IGdpdGs6MzgxNgorbXNnaWQgIkFsbCByZWZzIgorbXNnc3RyICJNaW5kZW4gcmVmIgorCisjOiBnaXRrOjM4MTcKK21zZ2lkICJBbGwgKGxvY2FsKSBicmFuY2hlcyIKK21zZ3N0ciAiTWluZGVuIChoZWx5aSkgYnJhbmNoIgorCisjOiBnaXRrOjM4MTgKK21zZ2lkICJBbGwgdGFncyIKK21zZ3N0ciAiTWluZGVuIHRhZyIKKworIzogZ2l0azozODE5Cittc2dpZCAiQWxsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiTWluZGVuIHTDoXZvbGkga8O2dmV0xZEgYnJhbmNoIgorCisjOiBnaXRrOjM4MjAKK21zZ2lkICJDb21taXQgSW5mbyAocmVndWxhciBleHByZXNzaW9ucyk6IgorbXNnc3RyICJDb21taXQgSW5mw7MgKHJlZ3Vsw6FyaXMga2lmZWplesOpcyk6IgorCisjOiBnaXRrOjM4MjEKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICJTemVyesWROiIKKworIzogZ2l0azozODIyCittc2dpZCAiQ29tbWl0dGVyOiIKK21zZ3N0ciAiQ29tbWl0b2zDszoiCisKKyM6IGdpdGs6MzgyMworbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiQ29tbWl0IMO8emVuZXQ6IgorCisjOiBnaXRrOjM4MjQKK21zZ2lkICJNYXRjaGVzIGFsbCBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAiRWd5ZXppayBtaW5lbiBDb21taXQgSW5mw7MgZmVsdMOpdGVsbGVsIgorCisjOiBnaXRrOjM4MjUKK21zZ2lkICJDaGFuZ2VzIHRvIEZpbGVzOiIKK21zZ3N0ciAiRsOhamwgdsOhbHRvesOhc29rOiIKKworIzogZ2l0azozODI2Cittc2dpZCAiRml4ZWQgU3RyaW5nIgorbXNnc3RyICJGaXggU3RyaW5nIgorCisjOiBnaXRrOjM4MjcKK21zZ2lkICJSZWd1bGFyIEV4cHJlc3Npb24iCittc2dzdHIgIlJlZ3Vsw6FyaXMga2lmZWplesOpcyIKKworIzogZ2l0azozODI4Cittc2dpZCAiU2VhcmNoIHN0cmluZzoiCittc2dzdHIgIktlcmVzw6lzIHN6w7Z2ZWc6IgorCisjOiBnaXRrOjM4MjkKK21zZ2lkICIiCisiQ29tbWl0IERhdGVzIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5ICIKKyIxNToyNzozOFwiKToiCittc2dzdHIgIiIKKyJDb21taXQgRMOhdHVtb2sgKFwiMiB3ZWVrcyBhZ29cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiTWFyY2ggMTcsIDIwMDkgIgorIjE1OjI3OjM4XCIpOiIKKworIzogZ2l0azozODMwCittc2dpZCAiU2luY2U6IgorbXNnc3RyICJFdHTFkWw6IgorCisjOiBnaXRrOjM4MzEKK21zZ2lkICJVbnRpbDoiCittc2dzdHIgIkVkZGlnOiIKKworIzogZ2l0azozODMyCittc2dpZCAiTGltaXQgYW5kL29yIHNraXAgYSBudW1iZXIgb2YgcmV2aXNpb25zIChwb3NpdGl2ZSBpbnRlZ2VyKToiCittc2dzdHIgIkxpbWl0w6FsdmEgw6lzL3ZhZ3kga2loYWd5dmEgZWd5IGFkb3R0IHN6w6Ftw7ogcmV2w616acOzdCAocG96aXTDrXYgZWfDqXN6KToiCisKKyM6IGdpdGs6MzgzMworbXNnaWQgIk51bWJlciB0byBzaG93OiIKK21zZ3N0ciAiTXV0YXRhbmTDsyBzesOhbToiCisKKyM6IGdpdGs6MzgzNAorbXNnaWQgIk51bWJlciB0byBza2lwOiIKK21zZ3N0ciAiS2loYWd5YW5kw7Mgc3rDoW06IgorCisjOiBnaXRrOjM4MzUKK21zZ2lkICJNaXNjZWxsYW5lb3VzIG9wdGlvbnM6IgorbXNnc3RyICJLw7xsw7ZuZsOpbGUgb3BjacOzazoiCisKKyM6IGdpdGs6MzgzNgorbXNnaWQgIlN0cmljdGx5IHNvcnQgYnkgZGF0ZSIKK21zZ3N0ciAiU3ppZ29yw7ogcmVuZGV6w6FzIGTDoXR1bSBhbGFwasOhbiIKKworIzogZ2l0azozODM3Cittc2dpZCAiTWFyayBicmFuY2ggc2lkZXMiCittc2dzdHIgIkplbMO2bGplIG1lZyBheiDDoWdha2F0IgorCisjOiBnaXRrOjM4MzgKK21zZ2lkICJMaW1pdCB0byBmaXJzdCBwYXJlbnQiCittc2dzdHIgIktvcmzDoXRvesOhcyBheiBlbHPFkSBzesO8bMWRcmUiCisKKyM6IGdpdGs6MzgzOQorbXNnaWQgIlNpbXBsZSBoaXN0b3J5IgorbXNnc3RyICJFZ3lzemVyxbEgaGlzdG9yeSIKKworIzogZ2l0azozODQwCittc2dpZCAiQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gZ2l0IGxvZzoiCittc2dzdHIgIlRvdsOhYmJpIGFyZ3VtZW50b2sgYSBnaXQgbG9nLWhvejoiCisKKyM6IGdpdGs6Mzg0MQorbXNnaWQgIkVudGVyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBpbmNsdWRlLCBvbmUgcGVyIGxpbmU6IgorbXNnc3RyICJGw6FqbG9rIMOpcyBrw7ZueXZ0w6FyYWsgYmVqZWd5esOpc2UgYW1pa2V0IHRhcnRhbG1heiwgc29yb25rw6ludDoiCisKKyM6IGdpdGs6Mzg0MgorbXNnaWQgIkNvbW1hbmQgdG8gZ2VuZXJhdGUgbW9yZSBjb21taXRzIHRvIGluY2x1ZGU6IgorbXNnc3RyICJQYXJhbmNzIHTDtmJiIHRhcnRhbG1hesOzIGNvbW1pdCBnZW5lcsOhbMOhc8OhcmE6IgorCisjOiBnaXRrOjM5NjQKK21zZ2lkICJHaXRrOiBlZGl0IHZpZXciCittc2dzdHIgIkdpdGs6IHN6ZXJrZXN6dMOpcyBuw6l6ZXQiCisKKyM6IGdpdGs6Mzk3MgorbXNnaWQgIi0tIGNyaXRlcmlhIGZvciBzZWxlY3RpbmcgcmV2aXNpb25zIgorbXNnc3RyICItLSBrcml0w6lyaXVtb2sgYSByZXbDrXppw7NrIGtpdsOhbGFzenTDoXPDoWhveiIKKworIzogZ2l0azozOTc3Cittc2dpZCAiVmlldyBOYW1lIgorbXNnc3RyICJOw6l6ZXQgbmV2ZSIKKworIzogZ2l0azo0MDUyCittc2dpZCAiQXBwbHkgKEY1KSIKK21zZ3N0ciAiQWxrYWxtYXogKEY1KSIKKworIzogZ2l0azo0MDkwCittc2dpZCAiRXJyb3IgaW4gY29tbWl0IHNlbGVjdGlvbiBhcmd1bWVudHM6IgorbXNnc3RyICJIaWJhIHTDtnJ0w6ludCBhIGNvbW1pdCBhcmd1bWVudHVtb2sga2l2w6FsYXN6dMOhc2Ega8O2emJlbjoiCisKKyM6IGdpdGs6NDE0MyBnaXRrOjQxOTUgZ2l0azo0NjQzIGdpdGs6NDY1NyBnaXRrOjU5MTggZ2l0azoxMTUxOSBnaXRrOjExNTIwCittc2dpZCAiTm9uZSIKK21zZ3N0ciAiS2VpbmUiCisKKyM6IGdpdGs6NDU5MSBnaXRrOjY0MzggZ2l0azo4MjgyIGdpdGs6ODI5NworbXNnaWQgIkRhdGUiCittc2dzdHIgIkTDoXR1bSIKKworIzogZ2l0azo0NTkxIGdpdGs6NjQzOAorbXNnaWQgIkNEYXRlIgorbXNnc3RyICJEw6F0dW0iCisKKyM6IGdpdGs6NDc0MCBnaXRrOjQ3NDUKK21zZ2lkICJEZXNjZW5kYW50IgorbXNnc3RyICJMZXN6w6FybWF6b3R0IgorCisjOiBnaXRrOjQ3NDEKK21zZ2lkICJOb3QgZGVzY2VuZGFudCIKK21zZ3N0ciAiTmVtIGxlc3rDoXJtYXpvdHQiCisKKyM6IGdpdGs6NDc0OCBnaXRrOjQ3NTMKK21zZ2lkICJBbmNlc3RvciIKK21zZ3N0ciAiRWzFkWQiCisKKyM6IGdpdGs6NDc0OQorbXNnaWQgIk5vdCBhbmNlc3RvciIKK21zZ3N0ciAiTmVtIGVsxZFkIgorCisjOiBnaXRrOjUwMzkKK21zZ2lkICJMb2NhbCBjaGFuZ2VzIGNoZWNrZWQgaW4gdG8gaW5kZXggYnV0IG5vdCBjb21taXR0ZWQiCittc2dzdHIgIiIKKyJMb2vDoWxpcyB2w6FsdG96dGF0w6Fzb2ssIG1lbHllayBiZSB2YW5uYWsgdMOpdmUgYXogaW5kZXhiZSwgZGUgbcOpZyBuaW5jc2VuZWsgIgorImNvbW1pdG9sdmEiCisKKyM6IGdpdGs6NTA3NQorbXNnaWQgIkxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIG5vdCBjaGVja2VkIGluIHRvIGluZGV4IgorbXNnc3RyICJMb2vDoWxpcyBuZW0gY29tbWl0b2x0IHbDoWx0b3rDoXNvaywgbmluY3NlbmVrIGJldMOpdmUgYXogaW5kZXhiZSIKKworIzogZ2l0azo2NzU2Cittc2dpZCAibWFueSIKK21zZ3N0ciAic29rIgorCisjOiBnaXRrOjY5MzkKK21zZ2lkICJUYWdzOiIKK21zZ3N0ciAiVGFnZWs6IgorCisjOiBnaXRrOjY5NTYgZ2l0azo2OTYyIGdpdGs6ODI3NQorbXNnaWQgIlBhcmVudCIKK21zZ3N0ciAiRWx0ZXJuIgorCisjOiBnaXRrOjY5NjcKK21zZ2lkICJDaGlsZCIKK21zZ3N0ciAiR3llcmVrIgorCisjOiBnaXRrOjY5NzYKK21zZ2lkICJCcmFuY2giCittc2dzdHIgIsOBZyIKKworIzogZ2l0azo2OTc5Cittc2dpZCAiRm9sbG93cyIKK21zZ3N0ciAiS8O2dmV0a2V6xZFrIgorCisjOiBnaXRrOjY5ODIKK21zZ2lkICJQcmVjZWRlcyIKK21zZ3N0ciAiTWVnZWzFkXrFkWsiCisKKyM6IGdpdGs6NzUxOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGdldHRpbmcgZGlmZnM6ICVzIgorbXNnc3RyICJIaWJhIHTDtnJ0w6ludCBhIGRpZmYtZWsgbGV0w7ZsdMOpc2Uga8O2emJlbjogJXMiCisKKyM6IGdpdGs6ODEwMworbXNnaWQgIkdvdG86IgorbXNnc3RyICJNZW5qOiIKKworIzogZ2l0azo4MTA1Cittc2dpZCAiU0hBMSBJRDoiCittc2dzdHIgIlNIQTEgSUQ6IgorCisjOiBnaXRrOjgxMjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTaG9ydCBTSEExIGlkICVzIGlzIGFtYmlndW91cyIKK21zZ3N0ciAiUsO2dmlkIFNIQTEgaWQgJXMgZsOpbHJlw6lydGhldMWRIgorCisjOiBnaXRrOjgxMzEKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIkEoeikgJXMgcmV2w616acOzIG5lbSBpc21lcnQiCisKKyM6IGdpdGs6ODE0MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNIQTEgaWQgJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJTSEExIGlkICVzIG5lbSBpc21lcnQiCisKKyM6IGdpdGs6ODE0MworIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBpbiB0aGUgY3VycmVudCB2aWV3IgorbXNnc3RyICJBKHopICVzIHJldsOtemnDsyBuaW5jcyBhIGplbGVubGVnaSBuw6l6ZXRiZW4iCisKKyM6IGdpdGs6ODI4NQorbXNnaWQgIkNoaWxkcmVuIgorbXNnc3RyICJHeWVyZWtlayIKKworIzogZ2l0azo4MzQzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIsOBbGzDrXRzZCB2aXNzemEgYSAlcyBicmFuY2gtb3QgaWRlIgorCisjOiBnaXRrOjgzNDUKK21zZ2lkICJEZXRhY2hlZCBoZWFkOiBjYW4ndCByZXNldCIKK21zZ3N0ciAiRWxrw7xsw7Zuw610ZXR0IGhlYWQ6IG5lbSBsZWhldCB2aXNzemHDoWxsw610YW5pIgorCisjOiBnaXRrOjg0NTQgZ2l0azo4NDYwCittc2dpZCAiU2tpcHBpbmcgbWVyZ2UgY29tbWl0ICIKK21zZ3N0ciAiTWVyZ2UgY29tbWl0IGtpaGFnecOhc2EgIgorCisjOiBnaXRrOjg0NjkgZ2l0azo4NDc0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBwYXRjaCBJRCBmb3IgIgorbXNnc3RyICJIaWJhIHTDtnJ0w6ludCBhIHBhdGNoIElEIG1lZ3N6ZXJ6w6lzZSBrw7Z6YmVuIGEga8O2dmV0a2V6xZFuw6lsICIKKworIzogZ2l0azo4NDcwIGdpdGs6ODQ3NQorbXNnaWQgIiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiAtIGFiYmFoYWd5w6FzXG4iCisKKyM6IGdpdGs6ODQ4MCBnaXRrOjg0ODMgZ2l0azo4NDkxIGdpdGs6ODUwNSBnaXRrOjg1MTQKK21zZ2lkICJDb21taXQgIgorbXNnc3RyICJDb21taXQgIgorCisjOiBnaXRrOjg0ODQKK21zZ2lkICIiCisiIGlzIHRoZSBzYW1lIHBhdGNoIGFzXG4iCisiICAgICAgICIKK21zZ3N0ciAiIgorIiBVZ3lhbmF6IGEgcGF0Y2ggbWludFxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6ODQ5MgorbXNnaWQgIiIKKyIgZGlmZmVycyBmcm9tXG4iCisiICAgICAgICIKK21zZ3N0ciAiIgorIiBrw7xsw7ZuYsO2emlrIGlubmVudMWRbFxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6ODQ5NAorbXNnaWQgIiIKKyJEaWZmIG9mIGNvbW1pdHM6XG4iCisiXG4iCittc2dzdHIgIiIKKyJBIGNvbW1pdG9rIGRpZmZqZTpcbiIKKyJcbiIKKworIzogZ2l0azo4NTA2IGdpdGs6ODUxNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiBoYXMgJXMgY2hpbGRyZW4gLSBzdG9wcGluZ1xuIgorbXNnc3RyICIgJXMgZ3llcmVrZSB2YW4uIGFiYmFoYWd5w6FzXG4iCisKKyM6IGdpdGs6ODUzNAorbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0IHRvIGZpbGU6ICVzIgorbXNnc3RyICJIaWJhIHTDtnJ0w6ludCBhIGNvbW1pdCBmw6FqbGJhIMOtcsOhc2Ega8O2emJlbjogJXMiCisKKyM6IGdpdGs6ODU0MAorbXNnaWQgIkVycm9yIGRpZmZpbmcgY29tbWl0czogJXMiCittc2dzdHIgIkhpYmEgdMO2cnTDqW50IGEgY29tbWl0b2sgZGlmZmVsw6lzZSBrw7Z6YmVuOiAlcyIKKworIzogZ2l0azo4NTcwCittc2dpZCAiVG9wIgorbXNnc3RyICJUZXRlamUiCisKKyM6IGdpdGs6ODU3MQorbXNnaWQgIkZyb20iCittc2dzdHIgIklubmVuIgorCisjOiBnaXRrOjg1NzYKK21zZ2lkICJUbyIKK21zZ3N0ciAiSWRlIgorCisjOiBnaXRrOjg2MDAKK21zZ2lkICJHZW5lcmF0ZSBwYXRjaCIKK21zZ3N0ciAiUGF0Y2ggZ2VuZXLDoWzDoXNhIgorCisjOiBnaXRrOjg2MDIKK21zZ2lkICJGcm9tOiIKK21zZ3N0ciAiSW5uZW46IgorCisjOiBnaXRrOjg2MTEKK21zZ2lkICJUbzoiCittc2dzdHIgIklkZToiCisKKyM6IGdpdGs6ODYyMAorbXNnaWQgIlJldmVyc2UiCittc2dzdHIgIlZpc3N6YWZlbGUiCisKKyM6IGdpdGs6ODYyMiBnaXRrOjg4MDcKK21zZ2lkICJPdXRwdXQgZmlsZToiCittc2dzdHIgIktpbWVuZXRpIGbDoWpsOiIKKworIzogZ2l0azo4NjI4Cittc2dpZCAiR2VuZXJhdGUiCittc2dzdHIgIkdlbmVyw6Fsw6FzIgorCisjOiBnaXRrOjg2NjYKK21zZ2lkICJFcnJvciBjcmVhdGluZyBwYXRjaDoiCittc2dzdHIgIkhpYmEgdMO2cnTDqXQgYSBwYXRjaCBrw6lzesOtdMOpc2Uga8O2emJlbjoiCisKKyM6IGdpdGs6ODY4OSBnaXRrOjg3OTUgZ2l0azo4ODUyCittc2dpZCAiSUQ6IgorbXNnc3RyICJJRDoiCisKKyM6IGdpdGs6ODY5OAorbXNnaWQgIlRhZyBuYW1lOiIKK21zZ3N0ciAiVGFnIG7DqXY6IgorCisjOiBnaXRrOjg3MDIgZ2l0azo4ODYxCittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICJMw6l0cmVob3rDoXMiCisKKyM6IGdpdGs6ODcxOQorbXNnaWQgIk5vIHRhZyBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAiQSB0YWcgbmV2ZSBuaW5jc2VuIG1lZ2FkdmEiCisKKyM6IGdpdGs6ODcyMworIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiVzIFRhZyBtw6FyIGzDqXRlemlrIgorCisjOiBnaXRrOjg3MjkKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0YWc6IgorbXNnc3RyICJIaWJhIHTDtnJ0w6ludCBhIHRhZyBsw6l0cmVob3rDoXNhIGvDtnpiZW46IgorCisjOiBnaXRrOjg4MDQKK21zZ2lkICJDb21tYW5kOiIKK21zZ3N0ciAiUGFyYW5jczoiCisKKyM6IGdpdGs6ODgxMgorbXNnaWQgIldyaXRlIgorbXNnc3RyICLDjXLDoXMiCisKKyM6IGdpdGs6ODgzMAorbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0OiIKK21zZ3N0ciAiSGliYSB0w7ZydMOpbnQgYSBjb21taXQgw61yw6FzYSBrw7Z6YmVuOiIKKworIzogZ2l0azo4ODU3Cittc2dpZCAiTmFtZToiCittc2dzdHIgIk7DqXY6IgorCisjOiBnaXRrOjg4ODAKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSBhIG5hbWUgZm9yIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICJLw6lyZW0gYWRqYSBtZWcgYSBuZXbDqXQgYXogw7pqIGJyYW5jaGhveiIKKworIzogZ2l0azo4ODg1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIE92ZXJ3cml0ZT8iCittc2dzdHIgIiVzIGJyYW5jaCBtw6FyIGzDqXRlemlrLiBGZWzDvGzDrXJqYT8iCisKKyM6IGdpdGs6ODk1MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBhbHJlYWR5IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmUtYXBwbHkgaXQ/IgorbXNnc3RyICIiCisiJXMgY29tbWl0IG3DoXIgYmVubmUgdmFuIGEgJXMgYnJhbmNoYmFuIC0tIGJpenRvcyBob2d5IMO6anJhIGNzaW7DoWxqYSA/IgorImVpbnRyYWdlbj8iCisKKyM6IGdpdGs6ODk1NgorbXNnaWQgIkNoZXJyeS1waWNraW5nIgorbXNnc3RyICJDaGVycnktcGlja2luZyIKKworIzogZ2l0azo4OTY1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gZmlsZSAnJXMnLlxuIgorIlBsZWFzZSBjb21taXQsIHJlc2V0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKK21zZ3N0ciAiIgorIkNoZXJyeS1waWNrIGhpYmEgdMO2cnTDqW50IGxva8OhbGlzIHbDoWx0b3TDoXNvayBtaWF0dCBhICclcycgZsOhamxiYW4uXG4iCisiS8OpcmVtIGNvbW1pdG9samEsIGluZMOtdHNhIMO6anJhIHZhZ3kgcmVqdHNlIGVsIGEgdsOhbHRvenRhdMOhc2FpdCDDqXMgcHLDs2LDoWxqYSAiCisiw7pqcmEuIgorCisjOiBnaXRrOjg5NzEKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCisiRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCittc2dzdHIgIiIKKyJDaGVycnktcGljayBoaWJhIHTDtnJ0w6ludCBtZXJnZSBrb25mbGlrdHVzIG1pYXR0LlxuIgorIkvDrXbDoW5qYSBmdXR0YXRuaSBhIGdpdCBjaXRvb2wtdCBhIHByb2Jsw6ltYSBtZWdvbGTDoXPDoWhvej8iCisKKyM6IGdpdGs6ODk4NworbXNnaWQgIk5vIGNoYW5nZXMgY29tbWl0dGVkIgorbXNnc3RyICJOaW5jc2VuIHbDoWx0b3rDoXMgY29tbWl0b2x2YSIKKworIzogZ2l0azo5MDEzCittc2dpZCAiQ29uZmlybSByZXNldCIKK21zZ3N0ciAiw5pqcmFpbmTDrXTDoXMgbWVnZXLFkXPDrXTDqXNlIgorCisjOiBnaXRrOjkwMTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCBicmFuY2ggJXMgdG8gJXM/IgorbXNnc3RyICLDmmpyYWluZMOtdGphIGEgJXMgYnJhbmNob3QgJXMtaWc/IgorCisjOiBnaXRrOjkwMTcKK21zZ2lkICJSZXNldCB0eXBlOiIKK21zZ3N0ciAiw5pqcmFpbmTDrXTDoXMgdMOtcHVzYToiCisKKyM6IGdpdGs6OTAyMAorbXNnaWQgIlNvZnQ6IExlYXZlIHdvcmtpbmcgdHJlZSBhbmQgaW5kZXggdW50b3VjaGVkIgorbXNnc3RyICJTb2Z0OiBIYWd5ZCBhIHdvcmtpbmcgdHJlZS10IMOpcyBheiBpbmRleGV0IMOpcmludGV0bGVuw7xsIgorCisjOiBnaXRrOjkwMjMKK21zZ2lkICJNaXhlZDogTGVhdmUgd29ya2luZyB0cmVlIHVudG91Y2hlZCwgcmVzZXQgaW5kZXgiCittc2dzdHIgIktldmVydDogSGFneWQgYSB3b3JraW5nIHRyZWUtdCDDqXJpbnRldGxlbsO8bCwgdMO2csO2bGQgYXogaW5kZXhldCIKKworIzogZ2l0azo5MDI2Cittc2dpZCAiIgorIkhhcmQ6IFJlc2V0IHdvcmtpbmcgdHJlZSBhbmQgaW5kZXhcbiIKKyIoZGlzY2FyZCBBTEwgbG9jYWwgY2hhbmdlcykiCittc2dzdHIgIiIKKyJIYXJkOiBJbmTDrXRzZCDDumpyYSBhIHdvcmtpbmcgdHJlZS10IMOpcyBheiBpbmRleGV0XG4iCisiKE1JTkRFTiBsb2vDoWxpcyB2w6FsdG96w6FzIGVsZG9iw6FzYSkiCisKKyM6IGdpdGs6OTA0MworbXNnaWQgIlJlc2V0dGluZyIKK21zZ3N0ciAiw5pqcmFpbmTDrXTDoXMiCisKKyM6IGdpdGs6OTEwMworbXNnaWQgIkNoZWNraW5nIG91dCIKK21zZ3N0ciAiS2l2ZXN6IgorCisjOiBnaXRrOjkxNTYKK21zZ2lkICJDYW5ub3QgZGVsZXRlIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgYnJhbmNoIgorbXNnc3RyICJOZW0gbGVoZXQgYSBqZWxlbmxlZyBraXZldHQgYnJhbmNoLW90IHTDtnLDtmxuaSIKKworIzogZ2l0azo5MTYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb21taXRzIG9uIGJyYW5jaCAlcyBhcmVuJ3Qgb24gYW55IG90aGVyIGJyYW5jaC5cbiIKKyJSZWFsbHkgZGVsZXRlIGJyYW5jaCAlcz8iCittc2dzdHIgIiIKKyJBICVzIGJyYW5jaG9uIHRhbMOhbGhhdMOzIGNvbW1pdCBuZW0gdGFsw6FsaGF0w7MgbWVnIHNlbWVseWlrIG3DoXNpayBicmFuY2hvbi5cbiIKKyJUw6lueWxlZyB0w7ZybGkgYSAlcyBicmFuY2hvdD8iCisKKyM6IGdpdGs6OTE5MworIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZ3MgYW5kIGhlYWRzOiAlcyIKK21zZ3N0ciAiVGFnZWsgw6lzIGhlYWRlazogJXMiCisKKyM6IGdpdGs6OTIwOAorbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAiU3rFsXLFkSIKKworIzogZ2l0azo5NTAzCittc2dpZCAiIgorIkVycm9yIHJlYWRpbmcgY29tbWl0IHRvcG9sb2d5IGluZm9ybWF0aW9uOyBicmFuY2ggYW5kIHByZWNlZGluZy9mb2xsb3dpbmcgIgorInRhZyBpbmZvcm1hdGlvbiB3aWxsIGJlIGluY29tcGxldGUuIgorbXNnc3RyICIiCisiSGliYSB0w7ZydMOpbnQgYSBjb21taXQgdG9wb2zDs2dpYWkgaW5mb3Jtw6FjacOzIG9sdmFzw6FzYSBrw7Z6YmVuOyBicmFuY2ggw6lzYSAiCisibWVnZWzFkXrFkS9rw7Z2ZXRrZXrFkSBpbmZvcm3DoWNpw7MgbmVtIGxlc3ogdGVsamVzLiIKKworIzogZ2l0azoxMDQ4OQorbXNnaWQgIlRhZyIKK21zZ3N0ciAiVGFnIgorCisjOiBnaXRrOjEwNDg5Cittc2dpZCAiSWQiCittc2dzdHIgIklkIgorCisjOiBnaXRrOjEwNTM5Cittc2dpZCAiR2l0ayBmb250IGNob29zZXIiCittc2dzdHIgIkdpdGstYmV0xbEga2l2w6FsYXN6dMOzIgorCisjOiBnaXRrOjEwNTU2Cittc2dpZCAiQiIKK21zZ3N0ciAiRiIKKworIzogZ2l0azoxMDU1OQorbXNnaWQgIkkiCittc2dzdHIgIksiCisKKyM6IGdpdGs6MTA2NzcKK21zZ2lkICJHaXRrIHByZWZlcmVuY2VzIgorbXNnc3RyICJHaXRrIGJlw6FsbMOtdMOhc29rIgorCisjOiBnaXRrOjEwNjc5Cittc2dpZCAiQ29tbWl0IGxpc3QgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICJDb21taXQgbGlzdGEga2lqZWx6w6lzaSBvcGNpw7NrIgorCisjOiBnaXRrOjEwNjgyCittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAobGluZXMpIgorbXNnc3RyICJNYXhpbcOhbGlzIGdyYWZpa29uIHN6w6lsZXNzw6lnIChzb3JvaykiCisKKyM6IGdpdGs6MTA2ODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoICglIG9mIHBhbmUpIgorbXNnc3RyICJNYXhpbcOhbGlzIGdyYWZpa29uIHN6w6lsZXNzw6lnICh0w6FibGUgJS1qZSkiCisKKyM6IGdpdGs6MTA2ODgKK21zZ2lkICJTaG93IGxvY2FsIGNoYW5nZXMiCittc2dzdHIgIk11dGFzZCBhIGxva8OhbGlzIHbDoWx0b3p0YXTDoXNva2F0IgorCisjOiBnaXRrOjEwNjkxCittc2dpZCAiQXV0by1zZWxlY3QgU0hBMSIKK21zZ3N0ciAiU0hBMSBBdXRvbWF0aWt1cyBraXbDoWxhc3p0w6FzYSIKKworIzogZ2l0azoxMDY5NAorbXNnaWQgIkhpZGUgcmVtb3RlIHJlZnMiCittc2dzdHIgIkEgdMOhdm9saSByZWZlayBlbHJlanTDqXNlIgorCisjOiBnaXRrOjEwNjk4Cittc2dpZCAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIkRpZmYga2lqZWx6xZEgb3BjacOzayIKKworIzogZ2l0azoxMDcwMAorbXNnaWQgIlRhYiBzcGFjaW5nIgorbXNnc3RyICJUYWIgc29ya8O2eiIKKworIzogZ2l0azoxMDcwMworbXNnaWQgIkRpc3BsYXkgbmVhcmJ5IHRhZ3MiCittc2dzdHIgIlN6b21zesOpZG9zIHRhZ2VrIGtpamVsesOpc2UiCisKKyM6IGdpdGs6MTA3MDYKK21zZ2lkICJMaW1pdCBkaWZmcyB0byBsaXN0ZWQgcGF0aHMiCittc2dzdHIgIktvcmzDoXRvem90dCBkaWZmZWsgYSBraWxpc3TDoXpvdHQgw7p0dm9uYWxha2hveiIKKworIzogZ2l0azoxMDcwOQorbXNnaWQgIlN1cHBvcnQgcGVyLWZpbGUgZW5jb2RpbmdzIgorbXNnc3RyICJGw6FqbG9ua8OpbnRpIGvDs2RvbMOhcyB0w6FtZ2F0w6FzYSIKKworIzogZ2l0azoxMDcxNSBnaXRrOjEwODA0Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiB0b29sIgorbXNnc3RyICJLw7xsc8WRIGRpZmYgYWxrYWxtYXrDoXMiCisKKyM6IGdpdGs6MTA3MTYKK21zZ2lkICJDaG9vc2UuLi4iCittc2dzdHIgIlbDoWxhc3pkIC4uLiIKKworIzogZ2l0azoxMDcyMQorbXNnaWQgIkdlbmVyYWwgb3B0aW9ucyIKK21zZ3N0ciAiw4FsdGFsw6Fub3Mgb3BjacOzayIKKworIzogZ2l0azoxMDcyNAorbXNnaWQgIlVzZSB0aGVtZWQgd2lkZ2V0cyIKK21zZ3N0ciAiVMOpbcOhem90dCB2ZXrDqXJsxZFrIGhhc3puw6FsYXRhIgorCisjOiBnaXRrOjEwNzI2Cittc2dpZCAiKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KSIKK21zZ3N0ciAiKGEgdsOhbHRvesOhcyDDumpyYWluZMOtdMOhc3QgaWfDqW55ZWwpIgorCisjOiBnaXRrOjEwNzI4Cittc2dpZCAiKGN1cnJlbnRseSB1bmF2YWlsYWJsZSkiCittc2dzdHIgIihqZWxlbmxlZyBuZW0gZWzDqXJoZXTFkSkiCisKKyM6IGdpdGs6MTA3MzIKK21zZ2lkICJDb2xvcnM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAiU3rDrW5lazogbnlvbWphIG1lZyBhIGtpdsOhbGFzenTDoXNob3oiCisKKyM6IGdpdGs6MTA3MzUKK21zZ2lkICJJbnRlcmZhY2UiCittc2dzdHIgIkludGVyZsOpc3oiCisKKyM6IGdpdGs6MTA3MzYKK21zZ2lkICJpbnRlcmZhY2UiCittc2dzdHIgImludGVyZsOpc3oiCisKKyM6IGdpdGs6MTA3MzkKK21zZ2lkICJCYWNrZ3JvdW5kIgorbXNnc3RyICJIw6F0dMOpciIKKworIzogZ2l0azoxMDc0MCBnaXRrOjEwNzcwCittc2dpZCAiYmFja2dyb3VuZCIKK21zZ3N0ciAiaMOhdHTDqXIiCisKKyM6IGdpdGs6MTA3NDMKK21zZ2lkICJGb3JlZ3JvdW5kIgorbXNnc3RyICJFbMWRdMOpciIKKworIzogZ2l0azoxMDc0NAorbXNnaWQgImZvcmVncm91bmQiCittc2dzdHIgImVsxZF0w6lyIgorCisjOiBnaXRrOjEwNzQ3Cittc2dpZCAiRGlmZjogb2xkIGxpbmVzIgorbXNnc3RyICJEaWZmOiByw6lnaSBzb3JvayIKKworIzogZ2l0azoxMDc0OAorbXNnaWQgImRpZmYgb2xkIGxpbmVzIgorbXNnc3RyICJkaWZmIHLDqWdpIHNvcm9rIgorCisjOiBnaXRrOjEwNzUyCittc2dpZCAiRGlmZjogbmV3IGxpbmVzIgorbXNnc3RyICJEaWZmOiDDumogc29yb2siCisKKyM6IGdpdGs6MTA3NTMKK21zZ2lkICJkaWZmIG5ldyBsaW5lcyIKK21zZ3N0ciAiZGlmZiAtIMO6aiBzb3JvayIKKworIzogZ2l0azoxMDc1NworbXNnaWQgIkRpZmY6IGh1bmsgaGVhZGVyIgorbXNnc3RyICJEaWZmOiBuYWd5IGhlYWRlcsO2ayIKKworIzogZ2l0azoxMDc1OQorbXNnaWQgImRpZmYgaHVuayBoZWFkZXIiCittc2dzdHIgImRpZmYgLSBuYWd5IGhlYWRlcsO2ayIKKworIzogZ2l0azoxMDc2MworbXNnaWQgIk1hcmtlZCBsaW5lIGJnIgorbXNnc3RyICJNZWdqZWzDtmx0IHNvciBow6F0dMOpciIKKworIzogZ2l0azoxMDc2NQorbXNnaWQgIm1hcmtlZCBsaW5lIGJhY2tncm91bmQiCittc2dzdHIgIm1lZ2plbMO2bHQgc29yIGjDoXR0w6lyIgorCisjOiBnaXRrOjEwNzY5Cittc2dpZCAiU2VsZWN0IGJnIgorbXNnc3RyICJWw6FsYXNzem9uIGjDoXR0ZXJldCIKKworIzogZ2l0azoxMDc3MworbXNnaWQgIkZvbnRzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgIkJldMWxOiBueW9tamEgbWVnIGEga2l2w6FsYXN6dMOhc2hveiIKKworIzogZ2l0azoxMDc3NQorbXNnaWQgIk1haW4gZm9udCIKK21zZ3N0ciAiRsWRIGJldMWxIgorCisjOiBnaXRrOjEwNzc2Cittc2dpZCAiRGlmZiBkaXNwbGF5IGZvbnQiCittc2dzdHIgIkRpZmYga2lqZWx6xZEgYmV0xbEiCisKKyM6IGdpdGs6MTA3NzcKK21zZ2lkICJVc2VyIGludGVyZmFjZSBmb250IgorbXNnc3RyICJGZWxoYXN6bsOhbMOzaSBpbnRlcmbDqXN6IGJldMWxIgorCisjOiBnaXRrOjEwODE0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiR2l0azogY2hvb3NlIGNvbG9yIGZvciAlcyIKK21zZ3N0ciAiR2l0azogdsOhbGFzc3pvbiBzesOtbnQgYSAlcy1yYSIKKworIzogZ2l0azoxMTQxOAorbXNnaWQgIkNhbm5vdCBmaW5kIGEgZ2l0IHJlcG9zaXRvcnkgaGVyZS4iCittc2dzdHIgIk5lbSB0YWzDoWxoYXTDvCBnaXQgcmVwb3NpdG9yeSBpdHQuIgorCisjOiBnaXRrOjExNDIyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZpbmQgdGhlIGdpdCBkaXJlY3RvcnkgXCIlc1wiLiIKK21zZ3N0ciAiTmVtIHRhbMOhbGhhdMOzIGEgXCIlc1wiIGvDtm55dnTDoXIuIgorCisjOiBnaXRrOjExNDY5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lIgorbXNnc3RyICJGw6lscmXDqXJ0aGV0xZEgYXJndW1lbnR1bSAnJXMnOiByZXbDrXppw7Mgw6lzIGbDoWpsbsOpdiBpcyIKKworIzogZ2l0azoxMTQ4MQorbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCittc2dzdHIgIlJvc3N6IGdpdGsgYXJndW1lbnR1bW9rOiIKKworIzogZ2l0azoxMTU3MgorbXNnaWQgIkNvbW1hbmQgbGluZSIKK21zZ3N0ciAiUGFyYW5jcyBzb3IiCisKKyN+IG1zZ2lkICJVc2UgYWxsIHJlZnMiCisjfiBtc2dzdHIgIkhhc3puw6FsZCBheiDDtnNzemVzIHJlZmVyZW5jacOhdCIKKworI34gbXNnaWQgIk1heCBjb3VudDoiCisjfiBtc2dzdHIgIk1heC4gc3rDoW06IgorCisjfiBtc2dpZCAiU2tpcDoiCisjfiBtc2dzdHIgIktpaGFneToiCisKKyN+IG1zZ2lkICJOYW1lIgorI34gbXNnc3RyICJOw6l2IgorCisjfiBtc2dpZCAiVGFnL0hlYWQgJXMgaXMgbm90IGtub3duIgorI34gbXNnc3RyICJUYWcvSGVhZCAlcyBuZW0gaXNtZXJ0IgorCisjfiBtc2dpZCAiLSBzdG9wcGluZ1xuIgorI34gbXNnc3RyICItIGFiYmFoYWd5w6FzLlxuIgorCisjfiBtc2dpZCAiIgorI34gIlNvcnJ5LCBnaXRrIGNhbm5vdCBydW4gd2l0aCB0aGlzIHZlcnNpb24gb2YgVGNsL1RrLlxuIgorI34gIiBHaXRrIHJlcXVpcmVzIGF0IGxlYXN0IFRjbC9UayA4LjQuIgorI34gbXNnc3RyICIiCisjfiAiU2FqbsOhbGp1aywgZGUgYSBnaXRrIG5lbSBmdXR0YXRoYXTDsyBlenplbCBhIFRjbC9UayB2ZXJ6acOzdmFsLlxuIgorI34gIkdpdGsgZnV0dGF0w6Fzw6Fob3ogbGVnYWzDoWJiIFRjbC9UayA4LjQgc3rDvGtzw6lnZXMuIgpkaWZmIC0tZ2l0IGEvZ2l0ay1naXQvcG8vaXQucG8gYi9naXRrLWdpdC9wby9pdC5wbwppbmRleCBlODljOTU3Li40ODE4NjUyIDEwMDY0NAotLS0gYS9naXRrLWdpdC9wby9pdC5wbworKysgYi9naXRrLWdpdC9wby9pdC5wbwpAQCAtOCwyNSArOCwzMyBAQAogbXNnc3RyICIiCiAiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXRrXG4iCiAiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA4LTEwLTE4IDIyOjAzKzExMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDA4LTAzLTEzIDE3OjM0KzAxMDBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMC0wMS0yOCAxODo0MCswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0wMS0yOCAxODo0MSswMTAwXG4iCiAiTGFzdC1UcmFuc2xhdG9yOiBNaWNoZWxlIEJhbGxhYmlvIDxiYXJyYV9jdWRhQGthdGFtYWlsLmNvbT5cbiIKICJMYW5ndWFnZS1UZWFtOiBJdGFsaWFuXG4iCiAiTUlNRS1WZXJzaW9uOiAxLjBcbiIKICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCiAKLSM6IGdpdGs6MTEzCisjOiBnaXRrOjExNQogbXNnaWQgIkNvdWxkbid0IGdldCBsaXN0IG9mIHVubWVyZ2VkIGZpbGVzOiIKIG1zZ3N0ciAiSW1wb3NzaWJpbGUgb3R0ZW5lcmUgbCdlbGVuY28gZGVpIGZpbGUgaW4gYXR0ZXNhIGRpIGZ1c2lvbmU6IgogCi0jOiBnaXRrOjM0MAorIzogZ2l0azoyNzQKK21zZ2lkICJFcnJvciBwYXJzaW5nIHJldmlzaW9uczoiCittc2dzdHIgIkVycm9yZSBuZWxsYSBsZXR0dXJhIGRlbGxlIHJldmlzaW9uaToiCisKKyM6IGdpdGs6MzI5Cittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiIKK21zZ3N0ciAiRXJyb3JlIG5lbGwnZXNlY3V6aW9uZSBkZWwgY29tYW5kbyBzcGVjaWZpY2F0byBjb24gLS1hcmdzY21kOiIKKworIzogZ2l0azozNDIKIG1zZ2lkICJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIGZpbGVzIGFyZSB1bm1lcmdlZC4iCiBtc2dzdHIgIiIKICJOZXNzdW4gZmlsZSBzZWxlemlvbmF0bzogw6ggc3RhdGEgc3BlY2lmaWNhdGEgbCdvcHppb25lIC0tbWVyZ2UgbWEgbm9uIGNpICIKICJzb25vIGZpbGUgaW4gYXR0ZXNhIGRpIGZ1c2lvbmUuIgogCi0jOiBnaXRrOjM0MworIzogZ2l0azozNDUKIG1zZ2lkICIiCiAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyB1bm1lcmdlZCBmaWxlcyBhcmUgd2l0aGluIGZpbGUgIgogImxpbWl0LiIKQEAgLTM0LDY4OCArNDIsOTk0IEBACiAiTmVzc3VuIGZpbGUgc2VsZXppb25hdG86IMOoIHN0YXRhIHNwZWNpZmljYXRhIGwnb3B6aW9uZSAtLW1lcmdlIG1hIGkgZmlsZSAiCiAic3BlY2lmaWNhdGkgbm9uIHNvbm8gaW4gYXR0ZXNhIGRpIGZ1c2lvbmUuIgogCi0jOiBnaXRrOjM2NSBnaXRrOjUwMworIzogZ2l0azozNjcgZ2l0azo1MTQKIG1zZ2lkICJFcnJvciBleGVjdXRpbmcgZ2l0IGxvZzoiCiBtc2dzdHIgIkVycm9yZSBuZWxsJ2VzZWN1emlvbmUgZGkgZ2l0IGxvZzoiCiAKLSM6IGdpdGs6Mzc4CisjOiBnaXRrOjM4NSBnaXRrOjUzMAogbXNnaWQgIlJlYWRpbmciCiBtc2dzdHIgIkxldHR1cmEgaW4gY29yc28iCiAKLSM6IGdpdGs6NDM4IGdpdGs6MzQ2MgorIzogZ2l0azo0NDUgZ2l0azo0MjYxCiBtc2dpZCAiUmVhZGluZyBjb21taXRzLi4uIgogbXNnc3RyICJMZXR0dXJhIGRlbGxlIHJldmlzaW9uaSBpbiBjb3Jzby4uLiIKIAotIzogZ2l0azo0NDEgZ2l0azoxNTI4IGdpdGs6MzQ2NQorIzogZ2l0azo0NDggZ2l0azoxNTc4IGdpdGs6NDI2NAogbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCiBtc2dzdHIgIk5lc3N1bmEgcmV2aXNpb25lIHNlbGV6aW9uYXRhIgogCi0jOiBnaXRrOjEzOTkKKyM6IGdpdGs6MTQ1NAogbXNnaWQgIkNhbid0IHBhcnNlIGdpdCBsb2cgb3V0cHV0OiIKIG1zZ3N0ciAiSW1wb3NzaWJpbGUgZWxhYm9yYXJlIGkgZGF0aSBkaSBnaXQgbG9nOiIKIAotIzogZ2l0azoxNjA1CisjOiBnaXRrOjE2NzQKIG1zZ2lkICJObyBjb21taXQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIgogbXNnc3RyICJOZXNzdW5hIGluZm9ybWF6aW9uZSBkaXNwb25pYmlsZSBzdWxsZSByZXZpc2lvbmkiCiAKLSM6IGdpdGs6MTcwOSBnaXRrOjE3MzEgZ2l0azozMjU5IGdpdGs6Nzc2NCBnaXRrOjkyOTMgZ2l0azo5NDY2CisjOiBnaXRrOjE4MTYKK21zZ2lkICJtYyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjE4NTEgZ2l0azo0MDU0IGdpdGs6OTA0NCBnaXRrOjEwNTg1IGdpdGs6MTA4MDQKIG1zZ2lkICJPSyIKIG1zZ3N0ciAiT0siCiAKLSM6IGdpdGs6MTczMyBnaXRrOjMyNjAgZ2l0azo3NDM5IGdpdGs6NzUxMCBnaXRrOjc2MTMgZ2l0azo3NjYwIGdpdGs6Nzc2NgotIzogZ2l0azo5Mjk0IGdpdGs6OTQ2NworIzogZ2l0azoxODUzIGdpdGs6NDA1NiBnaXRrOjg2MzQgZ2l0azo4NzEzIGdpdGs6ODgyOCBnaXRrOjg4NzcgZ2l0azo5MDQ2CisjOiBnaXRrOjEwNTg2IGdpdGs6MTA4MDUKIG1zZ2lkICJDYW5jZWwiCiBtc2dzdHIgIkFubnVsbGEiCiAKLSM6IGdpdGs6MTgxMQorIzogZ2l0azoxOTc1CiBtc2dpZCAiVXBkYXRlIgogbXNnc3RyICJBZ2dpb3JuYSIKIAotIzogZ2l0azoxODEzCisjOiBnaXRrOjE5NzYKK21zZ2lkICJSZWxvYWQiCittc2dzdHIgIlJpY2FyaWNhIgorCisjOiBnaXRrOjE5NzcKIG1zZ2lkICJSZXJlYWQgcmVmZXJlbmNlcyIKIG1zZ3N0ciAiUmlsZWdnaSByaWZlcmltZW50aSIKIAotIzogZ2l0azoxODE0CisjOiBnaXRrOjE5NzgKIG1zZ2lkICJMaXN0IHJlZmVyZW5jZXMiCiBtc2dzdHIgIkVsZW5jYSByaWZlcmltZW50aSIKIAotIzogZ2l0azoxODE1CisjOiBnaXRrOjE5ODAKK21zZ2lkICJTdGFydCBnaXQgZ3VpIgorbXNnc3RyICJBdnZpYSBnaXQgZ3VpIgorCisjOiBnaXRrOjE5ODIKIG1zZ2lkICJRdWl0IgogbXNnc3RyICJFc2NpIgogCi0jOiBnaXRrOjE4MTAKKyM6IGdpdGs6MTk3NAogbXNnaWQgIkZpbGUiCiBtc2dzdHIgIkZpbGUiCiAKLSM6IGdpdGs6MTgxOAorIzogZ2l0azoxOTg2CiBtc2dpZCAiUHJlZmVyZW5jZXMiCiBtc2dzdHIgIlByZWZlcmVuemUiCiAKLSM6IGdpdGs6MTgxNworIzogZ2l0azoxOTg1CiBtc2dpZCAiRWRpdCIKIG1zZ3N0ciAiTW9kaWZpY2EiCiAKLSM6IGdpdGs6MTgyMQorIzogZ2l0azoxOTkwCiBtc2dpZCAiTmV3IHZpZXcuLi4iCiBtc2dzdHIgIk51b3ZhIHZpc3RhLi4uIgogCi0jOiBnaXRrOjE4MjIKKyM6IGdpdGs6MTk5MQogbXNnaWQgIkVkaXQgdmlldy4uLiIKIG1zZ3N0ciAiTW9kaWZpY2EgdmlzdGEuLi4iCiAKLSM6IGdpdGs6MTgyMworIzogZ2l0azoxOTkyCiBtc2dpZCAiRGVsZXRlIHZpZXciCiBtc2dzdHIgIkVsaW1pbmEgdmlzdGEiCiAKLSM6IGdpdGs6MTgyNQorIzogZ2l0azoxOTk0CiBtc2dpZCAiQWxsIGZpbGVzIgogbXNnc3RyICJUdXR0aSBpIGZpbGUiCiAKLSM6IGdpdGs6MTgyMCBnaXRrOjMxOTYKKyM6IGdpdGs6MTk4OSBnaXRrOjM4MDgKIG1zZ2lkICJWaWV3IgogbXNnc3RyICJWaXN0YSIKIAotIzogZ2l0azoxODI4IGdpdGs6MjQ4NworIzogZ2l0azoxOTk5IGdpdGs6MjAwOSBnaXRrOjI3ODAKIG1zZ2lkICJBYm91dCBnaXRrIgogbXNnc3RyICJJbmZvcm1hemlvbmkgc3UgZ2l0ayIKIAotIzogZ2l0azoxODI5CisjOiBnaXRrOjIwMDAgZ2l0azoyMDE0CiBtc2dpZCAiS2V5IGJpbmRpbmdzIgogbXNnc3RyICJTY29yY2lhdG9pZSBkYSB0YXN0aWVyYSIKIAotIzogZ2l0azoxODI3CisjOiBnaXRrOjE5OTggZ2l0azoyMDEzCiBtc2dpZCAiSGVscCIKIG1zZ3N0ciAiQWl1dG8iCiAKLSM6IGdpdGs6MTg4NwotbXNnaWQgIlNIQTEgSUQ6ICIKLW1zZ3N0ciAiU0hBMSBJRDogIgorIzogZ2l0azoyMDkxIGdpdGs6ODExMAorbXNnaWQgIlNIQTEgSUQ6IgorbXNnc3RyICJTSEExIElEOiIKIAotIzogZ2l0azoxOTE4CisjOiBnaXRrOjIxMjIKIG1zZ2lkICJSb3ciCi1tc2dzdHIgIiIKK21zZ3N0ciAiUmlnYSIKIAotIzogZ2l0azoxOTQ5CisjOiBnaXRrOjIxNjAKIG1zZ2lkICJGaW5kIgogbXNnc3RyICJUcm92YSIKIAotIzogZ2l0azoxOTUwCisjOiBnaXRrOjIxNjEKIG1zZ2lkICJuZXh0IgogbXNnc3RyICJzdWNjIgogCi0jOiBnaXRrOjE5NTEKKyM6IGdpdGs6MjE2MgogbXNnaWQgInByZXYiCiBtc2dzdHIgInByZWMiCiAKLSM6IGdpdGs6MTk1MgorIzogZ2l0azoyMTYzCiBtc2dpZCAiY29tbWl0IgogbXNnc3RyICJyZXZpc2lvbmUiCiAKLSM6IGdpdGs6MTk1NSBnaXRrOjE5NTcgZ2l0azozNjE3IGdpdGs6MzY0MCBnaXRrOjM2NjQgZ2l0azo1NTUwIGdpdGs6NTYyMQorIzogZ2l0azoyMTY2IGdpdGs6MjE2OCBnaXRrOjQ0MjIgZ2l0azo0NDQ1IGdpdGs6NDQ2OSBnaXRrOjY0MTAgZ2l0azo2NDgyCisjOiBnaXRrOjY1NjYKIG1zZ2lkICJjb250YWluaW5nOiIKIG1zZ3N0ciAiY29udGVuZW50ZToiCiAKLSM6IGdpdGs6MTk1OCBnaXRrOjI5NTQgZ2l0azoyOTU5IGdpdGs6MzY5MgorIzogZ2l0azoyMTY5IGdpdGs6MzI5MCBnaXRrOjMyOTUgZ2l0azo0NDk3CiBtc2dpZCAidG91Y2hpbmcgcGF0aHM6IgogbXNnc3RyICJjaGUgcmlndWFyZGEgaSBwZXJjb3JzaToiCiAKLSM6IGdpdGs6MTk1OSBnaXRrOjM2OTcKKyM6IGdpdGs6MjE3MCBnaXRrOjQ1MDIKIG1zZ2lkICJhZGRpbmcvcmVtb3Zpbmcgc3RyaW5nOiIKIG1zZ3N0ciAiY2hlIGFnZ2l1bmdlL3JpbXVvdmUgbGEgc3RyaW5nYToiCiAKLSM6IGdpdGs6MTk2OCBnaXRrOjE5NzAKKyM6IGdpdGs6MjE3OSBnaXRrOjIxODEKIG1zZ2lkICJFeGFjdCIKIG1zZ3N0ciAiRXNhdHRvIgogCi0jOiBnaXRrOjE5NzAgZ2l0azozNzczIGdpdGs6NTUxOAorIzogZ2l0azoyMTgxIGdpdGs6NDU3NyBnaXRrOjYzNzgKIG1zZ2lkICJJZ25DYXNlIgogbXNnc3RyICIiCiAKLSM6IGdpdGs6MTk3MCBnaXRrOjM2NjYgZ2l0azozNzcxIGdpdGs6NTUxNAorIzogZ2l0azoyMTgxIGdpdGs6NDQ3MSBnaXRrOjQ1NzUgZ2l0azo2Mzc0CiBtc2dpZCAiUmVnZXhwIgogbXNnc3RyICIiCiAKLSM6IGdpdGs6MTk3MiBnaXRrOjE5NzMgZ2l0azozNzkyIGdpdGs6MzgyMiBnaXRrOjM4MjkgZ2l0azo1NjQxIGdpdGs6NTcwOAorIzogZ2l0azoyMTgzIGdpdGs6MjE4NCBnaXRrOjQ1OTYgZ2l0azo0NjI2IGdpdGs6NDYzMyBnaXRrOjY1MDIgZ2l0azo2NTcwCiBtc2dpZCAiQWxsIGZpZWxkcyIKIG1zZ3N0ciAiVHV0dGkgaSBjYW1waSIKIAotIzogZ2l0azoxOTczIGdpdGs6Mzc5MCBnaXRrOjM4MjIgZ2l0azo1NTgwCisjOiBnaXRrOjIxODQgZ2l0azo0NTk0IGdpdGs6NDYyNiBnaXRrOjY0NDEKIG1zZ2lkICJIZWFkbGluZSIKIG1zZ3N0ciAiVGl0b2xvIgogCi0jOiBnaXRrOjE5NzQgZ2l0azozNzkwIGdpdGs6NTU4MCBnaXRrOjU3MDggZ2l0azo2MTA5CisjOiBnaXRrOjIxODUgZ2l0azo0NTk0IGdpdGs6NjQ0MSBnaXRrOjY1NzAgZ2l0azo3MDAzCiBtc2dpZCAiQ29tbWVudHMiCiBtc2dzdHIgIkNvbW1lbnRpIgogCi0jOiBnaXRrOjE5NzQgZ2l0azozNzkwIGdpdGs6Mzc5NCBnaXRrOjM4MjkgZ2l0azo1NTgwIGdpdGs6NjA0NSBnaXRrOjcyODUKLSM6IGdpdGs6NzMwMAorIzogZ2l0azoyMTg1IGdpdGs6NDU5NCBnaXRrOjQ1OTggZ2l0azo0NjMzIGdpdGs6NjQ0MSBnaXRrOjY5MzggZ2l0azo4Mjg1CisjOiBnaXRrOjgzMDAKIG1zZ2lkICJBdXRob3IiCiBtc2dzdHIgIkF1dG9yZSIKIAotIzogZ2l0azoxOTc0IGdpdGs6Mzc5MCBnaXRrOjU1ODAgZ2l0azo2MDQ3CisjOiBnaXRrOjIxODUgZ2l0azo0NTk0IGdpdGs6NjQ0MSBnaXRrOjY5NDAKIG1zZ2lkICJDb21taXR0ZXIiCiBtc2dzdHIgIlJldmlzaW9uZSBjcmVhdGEgZGEiCiAKLSM6IGdpdGs6MjAwMworIzogZ2l0azoyMjE2CiBtc2dpZCAiU2VhcmNoIgogbXNnc3RyICJDZXJjYSIKIAotIzogZ2l0azoyMDEwCisjOiBnaXRrOjIyMjQKIG1zZ2lkICJEaWZmIgogbXNnc3RyICIiCiAKLSM6IGdpdGs6MjAxMgorIzogZ2l0azoyMjI2CiBtc2dpZCAiT2xkIHZlcnNpb24iCiBtc2dzdHIgIlZlY2NoaWEgdmVyc2lvbmUiCiAKLSM6IGdpdGs6MjAxNAorIzogZ2l0azoyMjI4CiBtc2dpZCAiTmV3IHZlcnNpb24iCiBtc2dzdHIgIk51b3ZhIHZlcnNpb25lIgogCi0jOiBnaXRrOjIwMTYKKyM6IGdpdGs6MjIzMAogbXNnaWQgIkxpbmVzIG9mIGNvbnRleHQiCiBtc2dzdHIgIkxpbmVlIGRpIGNvbnRlc3RvIgogCi0jOiBnaXRrOjIwMjYKKyM6IGdpdGs6MjI0MAogbXNnaWQgIklnbm9yZSBzcGFjZSBjaGFuZ2UiCiBtc2dzdHIgIklnbm9yYSBtb2RpZmljaGUgYWdsaSBzcGF6aSIKIAotIzogZ2l0azoyMDg0CisjOiBnaXRrOjIyOTkKIG1zZ2lkICJQYXRjaCIKIG1zZ3N0ciAiTW9kaWZpY2hlIgogCi0jOiBnaXRrOjIwODYKKyM6IGdpdGs6MjMwMQogbXNnaWQgIlRyZWUiCiBtc2dzdHIgIkRpcmVjdG9yeSIKIAotIzogZ2l0azoyMjEzIGdpdGs6MjIyNgorIzogZ2l0azoyNDU2IGdpdGs6MjQ3MwogbXNnaWQgIkRpZmYgdGhpcyAtPiBzZWxlY3RlZCIKIG1zZ3N0ciAiRGlmZiBxdWVzdG8gLT4gc2VsZXppb25hdG8iCiAKLSM6IGdpdGs6MjIxNCBnaXRrOjIyMjcKKyM6IGdpdGs6MjQ1NyBnaXRrOjI0NzQKIG1zZ2lkICJEaWZmIHNlbGVjdGVkIC0+IHRoaXMiCiBtc2dzdHIgIkRpZmYgc2VsZXppb25hdG8gLT4gcXVlc3RvIgogCi0jOiBnaXRrOjIyMTUgZ2l0azoyMjI4CisjOiBnaXRrOjI0NTggZ2l0azoyNDc1CiBtc2dpZCAiTWFrZSBwYXRjaCIKIG1zZ3N0ciAiQ3JlYSBwYXRjaCIKIAotIzogZ2l0azoyMjE2IGdpdGs6NzQ5NAorIzogZ2l0azoyNDU5IGdpdGs6ODY5MgogbXNnaWQgIkNyZWF0ZSB0YWciCiBtc2dzdHIgIkNyZWEgZXRpY2hldHRhIgogCi0jOiBnaXRrOjIyMTcgZ2l0azo3NTkzCisjOiBnaXRrOjI0NjAgZ2l0azo4ODA4CiBtc2dpZCAiV3JpdGUgY29tbWl0IHRvIGZpbGUiCiBtc2dzdHIgIlNjcml2aSByZXZpc2lvbmUgaW4gdW4gZmlsZSIKIAotIzogZ2l0azoyMjE4IGdpdGs6NzY0NworIzogZ2l0azoyNDYxIGdpdGs6ODg2NQogbXNnaWQgIkNyZWF0ZSBuZXcgYnJhbmNoIgogbXNnc3RyICJDcmVhIHVuIG51b3ZvIHJhbW8iCiAKLSM6IGdpdGs6MjIxOQorIzogZ2l0azoyNDYyCiBtc2dpZCAiQ2hlcnJ5LXBpY2sgdGhpcyBjb21taXQiCiBtc2dzdHIgIlBvcnRhIHF1ZXN0YSByZXZpc2lvbmUgaW4gY2ltYSBhbCByYW1vIGF0dHVhbGUiCiAKLSM6IGdpdGs6MjIyMAorIzogZ2l0azoyNDYzCiBtc2dpZCAiUmVzZXQgSEVBRCBicmFuY2ggdG8gaGVyZSIKIG1zZ3N0ciAiQWdnaW9ybmEgaWwgcmFtbyBIRUFEIGEgcXVlc3RhIHJldmlzaW9uZSIKIAotIzogZ2l0azoyMjM0CisjOiBnaXRrOjI0NjQKK21zZ2lkICJNYXJrIHRoaXMgY29tbWl0IgorbXNnc3RyICJTZWduYSBxdWVzdGEgcmV2aXNpb25lIgorCisjOiBnaXRrOjI0NjUKK21zZ2lkICJSZXR1cm4gdG8gbWFyayIKK21zZ3N0ciAiVG9ybmEgYWxsYSByZXZpc2lvbmUgc2VnbmF0YSIKKworIzogZ2l0azoyNDY2Cittc2dpZCAiRmluZCBkZXNjZW5kYW50IG9mIHRoaXMgYW5kIG1hcmsiCittc2dzdHIgIlRyb3ZhIGlsIGRpc2NlbmRlbnRlIGRpIHF1ZXN0YSByZXZpc2lvbmUgZSBkaSBxdWVsbGEgc2VnbmF0YSIKKworIzogZ2l0azoyNDY3Cittc2dpZCAiQ29tcGFyZSB3aXRoIG1hcmtlZCBjb21taXQiCittc2dzdHIgIkNvbmZyb250YSBjb24gbGEgcmV2aXNpb25lIHNlZ25hdGEiCisKKyM6IGdpdGs6MjQ4MQogbXNnaWQgIkNoZWNrIG91dCB0aGlzIGJyYW5jaCIKIG1zZ3N0ciAiQXR0aXZhIHF1ZXN0byByYW1vIgogCi0jOiBnaXRrOjIyMzUKKyM6IGdpdGs6MjQ4MgogbXNnaWQgIlJlbW92ZSB0aGlzIGJyYW5jaCIKIG1zZ3N0ciAiRWxpbWluYSBxdWVzdG8gcmFtbyIKIAotIzogZ2l0azoyMjQyCisjOiBnaXRrOjI0ODkKIG1zZ2lkICJIaWdobGlnaHQgdGhpcyB0b28iCiBtc2dzdHIgIkV2aWRlbnppYSBhbmNoZSBxdWVzdG8iCiAKLSM6IGdpdGs6MjI0MworIzogZ2l0azoyNDkwCiBtc2dpZCAiSGlnaGxpZ2h0IHRoaXMgb25seSIKIG1zZ3N0ciAiRXZpZGVuemlhIHNvbG8gcXVlc3RvIgogCi0jOiBnaXRrOjIyNDUKLW1zZ2lkICJCbGFtZSBwYXJlbnQgY29tbWl0IgotbXNnc3RyICIiCisjOiBnaXRrOjI0OTEKK21zZ2lkICJFeHRlcm5hbCBkaWZmIgorbXNnc3RyICJWaXN1YWxpenphIGRpZmZlcmVuemUgaW4gdW4gYWx0cm8gcHJvZ3JhbW1hIgogCi0jOiBnaXRrOjI0ODgKKyM6IGdpdGs6MjQ5MgorbXNnaWQgIkJsYW1lIHBhcmVudCBjb21taXQiCittc2dzdHIgIkFubm90YSBsYSByZXZpc2lvbmUgcHJlY2VkZW50ZSIKKworIzogZ2l0azoyNDk5Cittc2dpZCAiU2hvdyBvcmlnaW4gb2YgdGhpcyBsaW5lIgorbXNnc3RyICJNb3N0cmEgbGEgcHJvdmVuaWVuemEgZGkgcXVlc3RhIHJpZ2EiCisKKyM6IGdpdGs6MjUwMAorbXNnaWQgIlJ1biBnaXQgZ3VpIGJsYW1lIG9uIHRoaXMgbGluZSIKK21zZ3N0ciAiRXNlZ3VpIGdpdCBndWkgYmxhbWUgc3UgcXVlc3RhIHJpZ2EiCisKKyM6IGdpdGs6Mjc4MgogbXNnaWQgIiIKICJcbiIKICJHaXRrIC0gYSBjb21taXQgdmlld2VyIGZvciBnaXRcbiIKICJcbiIKLSJDb3B5cmlnaHQgwqkgMjAwNS0yMDA4IFBhdWwgTWFja2VycmFzXG4iCisiQ29weXJpZ2h0IMKpIDIwMDUtMjAwOSBQYXVsIE1hY2tlcnJhc1xuIgogIlxuIgogIlVzZSBhbmQgcmVkaXN0cmlidXRlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCiBtc2dzdHIgIiIKICJcbiIKICJHaXRrIC0gdW4gdmlzdWFsaXp6YXRvcmUgZGkgcmV2aXNpb25pIHBlciBnaXRcbiIKICJcbiIKLSJDb3B5cmlnaHQgwqkgMjAwNS0yMDA4IFBhdWwgTWFja2VycmFzXG4iCisiQ29weXJpZ2h0IMKpIDIwMDUtMjAwOSBQYXVsIE1hY2tlcnJhc1xuIgogIlxuIgogIlV0aWxpenpvIGUgcmVkaXN0cmlidXppb25lIHBlcm1lc3NpIHNvdHRvIGkgdGVybWluaSBkZWxsYSBHTlUgR2VuZXJhbCBQdWJsaWMgIgogIkxpY2Vuc2UiCiAKLSM6IGdpdGs6MjQ5NiBnaXRrOjI1NTcgZ2l0azo3OTQzCisjOiBnaXRrOjI3OTAgZ2l0azoyODU0IGdpdGs6OTIzMAogbXNnaWQgIkNsb3NlIgogbXNnc3RyICJDaGl1ZGkiCiAKLSM6IGdpdGs6MjUxNQorIzogZ2l0azoyODExCiBtc2dpZCAiR2l0ayBrZXkgYmluZGluZ3MiCiBtc2dzdHIgIlNjb3JjaWF0b2llIGRhIHRhc3RpZXJhIGRpIEdpdGsiCiAKLSM6IGdpdGs6MjUxNworIzogZ2l0azoyODE0CiBtc2dpZCAiR2l0ayBrZXkgYmluZGluZ3M6IgogbXNnc3RyICJTY29yY2lhdG9pZSBkYSB0YXN0aWVyYSBkaSBHaXRrOiIKIAotIzogZ2l0azoyNTE5CisjOiBnaXRrOjI4MTYKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICI8JXMtUT5cdFx0UXVpdCIKIG1zZ3N0ciAiPCVzLVE+XHRcdEVzY2kiCiAKLSM6IGdpdGs6MjUyMAorIzogZ2l0azoyODE3CiBtc2dpZCAiPEhvbWU+XHRcdE1vdmUgdG8gZmlyc3QgY29tbWl0IgogbXNnc3RyICI8SG9tZT5cdFx0VmFpIGFsbGEgcHJpbWEgcmV2aXNpb25lIgogCi0jOiBnaXRrOjI1MjEKKyM6IGdpdGs6MjgxOAogbXNnaWQgIjxFbmQ+XHRcdE1vdmUgdG8gbGFzdCBjb21taXQiCiBtc2dzdHIgIjxFbmQ+XHRcdFZhaSBhbGwndWx0aW1hIHJldmlzaW9uZSIKIAotIzogZ2l0azoyNTIyCisjOiBnaXRrOjI4MTkKIG1zZ2lkICI8VXA+LCBwLCBpXHRNb3ZlIHVwIG9uZSBjb21taXQiCi1tc2dzdHIgIjxVcD4sIHAsIGlcdFZhaSBwacO5IGluIGFsdG8gZGkgdW5hIHJldmlzaW9uZSIKK21zZ3N0ciAiPFN1PiwgcCwgaVx0VmFpIHBpw7kgaW4gYWx0byBkaSB1bmEgcmV2aXNpb25lIgogCi0jOiBnaXRrOjI1MjMKKyM6IGdpdGs6MjgyMAogbXNnaWQgIjxEb3duPiwgbiwga1x0TW92ZSBkb3duIG9uZSBjb21taXQiCi1tc2dzdHIgIjxEb3duPiwgbiwga1x0VmFpIHBpw7kgaW4gYmFzc28gZGkgdW5hIHJldmlzaW9uZSIKK21zZ3N0ciAiPEdpw7k+LCBuLCBrXHRWYWkgcGnDuSBpbiBiYXNzbyBkaSB1bmEgcmV2aXNpb25lIgogCi0jOiBnaXRrOjI1MjQKKyM6IGdpdGs6MjgyMQogbXNnaWQgIjxMZWZ0Piwgeiwgalx0R28gYmFjayBpbiBoaXN0b3J5IGxpc3QiCi1tc2dzdHIgIjxMZWZ0Piwgeiwgalx0VG9ybmEgaW5kaWV0cm8gbmVsbGEgY3Jvbm9sb2dpYSIKK21zZ3N0ciAiPFNpbmlzdHJhPiwgeiwgalx0VG9ybmEgaW5kaWV0cm8gbmVsbGEgY3Jvbm9sb2dpYSIKIAotIzogZ2l0azoyNTI1CisjOiBnaXRrOjI4MjIKIG1zZ2lkICI8UmlnaHQ+LCB4LCBsXHRHbyBmb3J3YXJkIGluIGhpc3RvcnkgbGlzdCIKLW1zZ3N0ciAiPFJpZ2h0PiwgeCwgbFx0VmFpIGF2YW50aSBuZWxsYSBjcm9ub2xvZ2lhIgorbXNnc3RyICI8RGVzdHJhPiwgeCwgbFx0VmFpIGF2YW50aSBuZWxsYSBjcm9ub2xvZ2lhIgogCi0jOiBnaXRrOjI1MjYKKyM6IGdpdGs6MjgyMwogbXNnaWQgIjxQYWdlVXA+XHRNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgotbXNnc3RyICI8UGFnZVVwPlx0VmFpIHBpw7kgaW4gYWx0byBkaSB1bmEgcGFnaW5hIG5lbGxhIGxpc3RhIGRlbGxlIHJldmlzaW9uaSIKK21zZ3N0ciAiPFBhZ2luYVN1Plx0VmFpIHBpw7kgaW4gYWx0byBkaSB1bmEgcGFnaW5hIG5lbGxhIGxpc3RhIGRlbGxlIHJldmlzaW9uaSIKIAotIzogZ2l0azoyNTI3CisjOiBnaXRrOjI4MjQKIG1zZ2lkICI8UGFnZURvd24+XHRNb3ZlIGRvd24gb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCi1tc2dzdHIgIjxQYWdlRG93bj5cdFZhaSBwacO5IGluIGJhc3NvIGRpIHVuYSBwYWdpbmEgbmVsbGEgbGlzdGEgZGVsbGUgcmV2aXNpb25pIgorbXNnc3RyICIiCisiPFBhZ2luYUdpw7k+XHRWYWkgcGnDuSBpbiBiYXNzbyBkaSB1bmEgcGFnaW5hIG5lbGxhIGxpc3RhIGRlbGxlIHJldmlzaW9uaSIKIAotIzogZ2l0azoyNTI4CisjOiBnaXRrOjI4MjUKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICI8JXMtSG9tZT5cdFNjcm9sbCB0byB0b3Agb2YgY29tbWl0IGxpc3QiCiBtc2dzdHIgIjwlcy1Ib21lPlx0U2NvcnJpIGFsbGEgY2ltYSBkZWxsYSBsaXN0YSBkZWxsZSByZXZpc2lvbmkiCiAKLSM6IGdpdGs6MjUyOQorIzogZ2l0azoyODI2CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLUVuZD5cdFNjcm9sbCB0byBib3R0b20gb2YgY29tbWl0IGxpc3QiCiBtc2dzdHIgIjwlcy1FbmQ+XHRTY29ycmkgYWxsYSBmaW5lIGRlbGxhIGxpc3RhIGRlbGxlIHJldmlzaW9uaSIKIAotIzogZ2l0azoyNTMwCisjOiBnaXRrOjI4MjcKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICI8JXMtVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIGxpbmUiCi1tc2dzdHIgIjwlcy1VcD5cdFNjb3JyaSBsYSBsaXN0YSBkZWxsZSByZXZpc2lvbmkgaW4gYWx0byBkaSB1bmEgcmlnYSIKK21zZ3N0ciAiPCVzLVN1Plx0U2NvcnJpIGxhIGxpc3RhIGRlbGxlIHJldmlzaW9uaSBpbiBhbHRvIGRpIHVuYSByaWdhIgogCi0jOiBnaXRrOjI1MzEKKyM6IGdpdGs6MjgyOAogIywgdGNsLWZvcm1hdAogbXNnaWQgIjwlcy1Eb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIGxpbmUiCi1tc2dzdHIgIjwlcy1Eb3duPlx0U2NvcnJpIGxhIGxpc3RhIGRlbGxlIHJldmlzaW9uaSBpbiBiYXNzbyBkaSB1bmEgcmlnYSIKK21zZ3N0ciAiPCVzLUdpw7k+XHRTY29ycmkgbGEgbGlzdGEgZGVsbGUgcmV2aXNpb25pIGluIGJhc3NvIGRpIHVuYSByaWdhIgogCi0jOiBnaXRrOjI1MzIKKyM6IGdpdGs6MjgyOQogIywgdGNsLWZvcm1hdAogbXNnaWQgIjwlcy1QYWdlVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIHBhZ2UiCi1tc2dzdHIgIjwlcy1QYWdlVXA+XHRTY29ycmkgbGEgbGlzdGEgZGVsbGUgcmV2aXNpb25pIGluIGFsdG8gZGkgdW5hIHBhZ2luYSIKK21zZ3N0ciAiPCVzLVBhZ2luYVN1Plx0U2NvcnJpIGxhIGxpc3RhIGRlbGxlIHJldmlzaW9uaSBpbiBhbHRvIGRpIHVuYSBwYWdpbmEiCiAKLSM6IGdpdGs6MjUzMworIzogZ2l0azoyODMwCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLVBhZ2VEb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIHBhZ2UiCi1tc2dzdHIgIjwlcy1QYWdlRG93bj5cdFNjb3JyaSBsYSBsaXN0YSBkZWxsZSByZXZpc2lvbmkgaW4gYmFzc28gZGkgdW5hIHBhZ2luYSIKK21zZ3N0ciAiPCVzLVBhZ2luYUdpw7k+XHRTY29ycmkgbGEgbGlzdGEgZGVsbGUgcmV2aXNpb25pIGluIGJhc3NvIGRpIHVuYSBwYWdpbmEiCiAKLSM6IGdpdGs6MjUzNAorIzogZ2l0azoyODMxCiBtc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgotbXNnc3RyICI8U2hpZnQtVXA+XHRUcm92YSBhbGwnaW5kaWV0cm8gKHZlcnNvIGwnYWx0bywgcmV2aXNpb25pIHN1Y2Nlc3NpdmUpIgorbXNnc3RyICI8U2hpZnQtU3U+XHRUcm92YSBhbGwnaW5kaWV0cm8gKHZlcnNvIGwnYWx0bywgcmV2aXNpb25pIHN1Y2Nlc3NpdmUpIgogCi0jOiBnaXRrOjI1MzUKKyM6IGdpdGs6MjgzMgogbXNnaWQgIjxTaGlmdC1Eb3duPlx0RmluZCBmb3J3YXJkcyAoZG93bndhcmRzLCBlYXJsaWVyIGNvbW1pdHMpIgotbXNnc3RyICI8U2hpZnQtRG93bj5cdFRyb3ZhIGluIGF2YW50aSAodmVyc28gaWwgYmFzc28sIHJldmlzaW9uaSBwcmVjZWRlbnRpKSIKK21zZ3N0ciAiPFNoaWZ0LUdpw7k+XHRUcm92YSBpbiBhdmFudGkgKHZlcnNvIGlsIGJhc3NvLCByZXZpc2lvbmkgcHJlY2VkZW50aSkiCiAKLSM6IGdpdGs6MjUzNgorIzogZ2l0azoyODMzCiBtc2dpZCAiPERlbGV0ZT4sIGJcdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCiBtc2dzdHIgIjxEZWxldGU+LCBiXHRTY29ycmkgbGEgdmlzdGEgZGVsbGUgZGlmZmVyZW56ZSBpbiBhbHRvIGRpIHVuYSBwYWdpbmEiCiAKLSM6IGdpdGs6MjUzNworIzogZ2l0azoyODM0CiBtc2dpZCAiPEJhY2tzcGFjZT5cdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCiBtc2dzdHIgIjxCYWNrc3BhY2U+XHRTY29ycmkgbGEgdmlzdGEgZGVsbGUgZGlmZmVyZW56ZSBpbiBhbHRvIGRpIHVuYSBwYWdpbmEiCiAKLSM6IGdpdGs6MjUzOAorIzogZ2l0azoyODM1CiBtc2dpZCAiPFNwYWNlPlx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gb25lIHBhZ2UiCi1tc2dzdHIgIjxTcGFjZT5cdFx0U2NvcnJpIGxhIHZpc3RhIGRlbGxlIGRpZmZlcmVuemUgaW4gYmFzc28gZGkgdW5hIHBhZ2luYSIKK21zZ3N0ciAiPFNwYXppbz5cdFx0U2NvcnJpIGxhIHZpc3RhIGRlbGxlIGRpZmZlcmVuemUgaW4gYmFzc28gZGkgdW5hIHBhZ2luYSIKIAotIzogZ2l0azoyNTM5CisjOiBnaXRrOjI4MzYKIG1zZ2lkICJ1XHRcdFNjcm9sbCBkaWZmIHZpZXcgdXAgMTggbGluZXMiCiBtc2dzdHIgInVcdFx0U2NvcnJpIGxhIHZpc3RhIGRlbGxlIGRpZmZlcmVuemUgaW4gYWx0byBkaSAxOCBsaW5lZSIKIAotIzogZ2l0azoyNTQwCisjOiBnaXRrOjI4MzcKIG1zZ2lkICJkXHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biAxOCBsaW5lcyIKIG1zZ3N0ciAiZFx0XHRTY29ycmkgbGEgdmlzdGEgZGVsbGUgZGlmZmVyZW56ZSBpbiBiYXNzbyBkaSAxOCBsaW5lZSIKIAotIzogZ2l0azoyNTQxCisjOiBnaXRrOjI4MzgKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICI8JXMtRj5cdFx0RmluZCIKIG1zZ3N0ciAiPCVzLUY+XHRcdFRyb3ZhIgogCi0jOiBnaXRrOjI1NDIKKyM6IGdpdGs6MjgzOQogIywgdGNsLWZvcm1hdAogbXNnaWQgIjwlcy1HPlx0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCiBtc2dzdHIgIjwlcy1HPlx0XHRUcm92YSBpbiBhdmFudGkiCiAKLSM6IGdpdGs6MjU0MworIzogZ2l0azoyODQwCiBtc2dpZCAiPFJldHVybj5cdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKLW1zZ3N0ciAiPFJldHVybj5cdFRyb3ZhIGluIGF2YW50aSIKK21zZ3N0ciAiPEludmlvPlx0VHJvdmEgaW4gYXZhbnRpIgogCi0jOiBnaXRrOjI1NDQKLW1zZ2lkICIvXHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCwgb3IgcmVkbyBmaW5kIgotbXNnc3RyICIvXHRcdFRyb3ZhIGluIGF2YW50aSwgbyBjZXJjYSBkaSBudW92byIKKyM6IGdpdGs6Mjg0MQorbXNnaWQgIi9cdFx0Rm9jdXMgdGhlIHNlYXJjaCBib3giCittc2dzdHIgIi9cdFx0Q3Vyc29yZSBuZWwgYm94IGRpIHJpY2VyY2EiCiAKLSM6IGdpdGs6MjU0NQorIzogZ2l0azoyODQyCiBtc2dpZCAiP1x0XHRNb3ZlIHRvIHByZXZpb3VzIGZpbmQgaGl0IgogbXNnc3RyICI/XHRcdFRyb3ZhIGFsbCdpbmRpZXRybyIKIAotIzogZ2l0azoyNTQ2CisjOiBnaXRrOjI4NDMKIG1zZ2lkICJmXHRcdFNjcm9sbCBkaWZmIHZpZXcgdG8gbmV4dCBmaWxlIgogbXNnc3RyICJmXHRcdFNjb3JyaSBsYSB2aXN0YSBkZWxsZSBkaWZmZXJlbnplIGFsIGZpbGUgc3VjY2Vzc2l2byIKIAotIzogZ2l0azoyNTQ3CisjOiBnaXRrOjI4NDQKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICI8JXMtUz5cdFx0U2VhcmNoIGZvciBuZXh0IGhpdCBpbiBkaWZmIHZpZXciCiBtc2dzdHIgIjwlcy1TPlx0XHRDZXJjYSBpbiBhdmFudGkgbmVsbGEgdmlzdGEgZGVsbGUgZGlmZmVyZW56ZSIKIAotIzogZ2l0azoyNTQ4CisjOiBnaXRrOjI4NDUKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICI8JXMtUj5cdFx0U2VhcmNoIGZvciBwcmV2aW91cyBoaXQgaW4gZGlmZiB2aWV3IgogbXNnc3RyICI8JXMtUj5cdFx0Q2VyY2EgYWxsJ2luZGlldHJvIG5lbGxhIHZpc3RhIGRlbGxlIGRpZmZlcmVuemUiCiAKLSM6IGdpdGs6MjU0OQorIzogZ2l0azoyODQ2CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLUtQKz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKLW1zZ3N0ciAiPCVzLUtQKz5cdEF1bWVudGEgZ3JhbmRlenphIGNhcmF0dGVyZSIKK21zZ3N0ciAiPCVzLUtQKz5cdEF1bWVudGEgZGltZW5zaW9uZSBjYXJhdHRlcmUiCiAKLSM6IGdpdGs6MjU1MAorIzogZ2l0azoyODQ3CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLXBsdXM+XHRJbmNyZWFzZSBmb250IHNpemUiCi1tc2dzdHIgIjwlcy1wbHVzPlx0QXVtZW50YSBncmFuZGV6emEgY2FyYXR0ZXJlIgorbXNnc3RyICI8JXMtcGnDuT5cdEF1bWVudGEgZGltZW5zaW9uZSBjYXJhdHRlcmUiCiAKLSM6IGdpdGs6MjU1MQorIzogZ2l0azoyODQ4CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLUtQLT5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKLW1zZ3N0ciAiPCVzLUtQLT5cdERpbWludWlzY2kgZ3JhbmRlenphIGNhcmF0dGVyZSIKK21zZ3N0ciAiPCVzLUtQLT5cdERpbWludWlzY2kgZGltZW5zaW9uZSBjYXJhdHRlcmUiCiAKLSM6IGdpdGs6MjU1MgorIzogZ2l0azoyODQ5CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLW1pbnVzPlx0RGVjcmVhc2UgZm9udCBzaXplIgotbXNnc3RyICI8JXMtbWludXM+XHREaW1pbnVpc2NpIGdyYW5kZXp6YSBjYXJhdHRlcmUiCittc2dzdHIgIjwlcy1tZW5vPlx0RGltaW51aXNjaSBkaW1lbnNpb25lIGNhcmF0dGVyZSIKIAotIzogZ2l0azoyNTUzCisjOiBnaXRrOjI4NTAKIG1zZ2lkICI8RjU+XHRcdFVwZGF0ZSIKIG1zZ3N0ciAiPEY1Plx0XHRBZ2dpb3JuYSIKIAotIzogZ2l0azozMjAwCi1tc2dpZCAiR2l0ayB2aWV3IGRlZmluaXRpb24iCi1tc2dzdHIgIlNjZWx0YSB2aXN0YSBHaXRrIgorIzogZ2l0azozMzA1IGdpdGs6MzMxNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXM6IgorbXNnc3RyICJFcnJvcmUgZHVyYW50ZSBsYSBjcmVhemlvbmUgZGVsbGEgZGlyZWN0b3J5IHRlbXBvcmFuZWEgJXM6IgogCi0jOiBnaXRrOjMyMjUKLW1zZ2lkICJOYW1lIgotbXNnc3RyICJOb21lIgorIzogZ2l0azozMzI3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBcIiVzXCIgZnJvbSAlczoiCittc2dzdHIgIkVycm9yZSBuZWxsYSBsZXR0dXJhIGRpIFwiJXNcIiBkYSAlczoiCiAKLSM6IGdpdGs6MzIyOAotbXNnaWQgIlJlbWVtYmVyIHRoaXMgdmlldyIKLW1zZ3N0ciAiUmljb3JkYSBxdWVzdGEgdmlzdGEiCisjOiBnaXRrOjMzOTAKK21zZ2lkICJjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIGlsIGNvbWFuZG86IgogCi0jOiBnaXRrOjMyMzIKLW1zZ2lkICJDb21taXRzIHRvIGluY2x1ZGUgKGFyZ3VtZW50cyB0byBnaXQgbG9nKToiCi1tc2dzdHIgIlJldmlzaW9uaSBkYSBpbmNsdWRlcmUgKGFyZ29tZW50aSBkaSBnaXQgbG9nKToiCisjOiBnaXRrOjM1MzkKK21zZ2lkICJObyBzdWNoIGNvbW1pdCIKK21zZ3N0ciAiUmV2aXNpb25lIGluZXNpc3RlbnRlIgogCi0jOiBnaXRrOjMyMzkKLW1zZ2lkICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiIKLW1zZ3N0ciAiQ29tYW5kbyBjaGUgZ2VuZXJhIGFsdHJlIHJldmlzaW9uaSBkYSB2aXN1YWxpenphcmU6IgorIzogZ2l0azozNTUzCittc2dpZCAiZ2l0IGd1aSBibGFtZTogY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICJnaXQgZ3VpIGJsYW1lOiBpbXBvc3NpYmlsZSBlc2VndWlyZSBpbCBjb21hbmRvOiIKIAotIzogZ2l0azozMjQ2Ci1tc2dpZCAiRW50ZXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUsIG9uZSBwZXIgbGluZToiCi1tc2dzdHIgIkluc2VyaXJlIGZpbGUgZSBkaXJlY3RvcnkgZGEgaW5jbHVkZXJlLCB1bm8gcGVyIHJpZ2E6IgorIzogZ2l0azozNTg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcmVhZCBtZXJnZSBoZWFkOiAlcyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgbGVnZ2VyZSBtZXJnZSBoZWFkOiAlcyIKIAotIzogZ2l0azozMjkzCi1tc2dpZCAiRXJyb3IgaW4gY29tbWl0IHNlbGVjdGlvbiBhcmd1bWVudHM6IgotbXNnc3RyICJFcnJvcmUgbmVnbGkgYXJnb21lbnRpIGRpIHNlbGV6aW9uZSBkZWxsZSByZXZpc2lvbmk6IgorIzogZ2l0azozNTkyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBpbmRleDogJXMiCittc2dzdHIgIkVycm9yZSBuZWxsYSBsZXR0dXJhIGRlbGwnaW5kaWNlOiAlcyIKIAotIzogZ2l0azozMzQ3IGdpdGs6MzM5OSBnaXRrOjM4NDIgZ2l0azozODU2IGdpdGs6NTA2MCBnaXRrOjEwMTQxIGdpdGs6MTAxNDIKLW1zZ2lkICJOb25lIgotbXNnc3RyICJOZXNzdW5vIgorIzogZ2l0azozNjE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3Qgc3RhcnQgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgZ2l0IGJsYW1lOiAlcyIKIAotIzogZ2l0azozNzkwIGdpdGs6NTU4MCBnaXRrOjcyODcgZ2l0azo3MzAyCi1tc2dpZCAiRGF0ZSIKLW1zZ3N0ciAiRGF0YSIKLQotIzogZ2l0azozNzkwIGdpdGs6NTU4MAotbXNnaWQgIkNEYXRlIgotbXNnc3RyICIiCi0KLSM6IGdpdGs6MzkzOSBnaXRrOjM5NDQKLW1zZ2lkICJEZXNjZW5kYW50IgotbXNnc3RyICJEaXNjZW5kZW50ZSIKLQotIzogZ2l0azozOTQwCi1tc2dpZCAiTm90IGRlc2NlbmRhbnQiCi1tc2dzdHIgIk5vbiBkaXNjZW5kZW50ZSIKLQotIzogZ2l0azozOTQ3IGdpdGs6Mzk1MgotbXNnaWQgIkFuY2VzdG9yIgotbXNnc3RyICJBc2NlbmRlbnRlIgotCi0jOiBnaXRrOjM5NDgKLW1zZ2lkICJOb3QgYW5jZXN0b3IiCi1tc2dzdHIgIk5vbiBhc2NlbmRlbnRlIgotCi0jOiBnaXRrOjQxODcKLW1zZ2lkICJMb2NhbCBjaGFuZ2VzIGNoZWNrZWQgaW4gdG8gaW5kZXggYnV0IG5vdCBjb21taXR0ZWQiCi1tc2dzdHIgIk1vZGlmaWNoZSBsb2NhbGkgcHJlc2VudGkgbmVsbCdpbmRpY2UgbWEgbm9uIG5lbGwnYXJjaGl2aW8iCi0KLSM6IGdpdGs6NDIyMAotbXNnaWQgIkxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIG5vdCBjaGVja2VkIGluIHRvIGluZGV4IgotbXNnc3RyICJNb2RpZmljaGUgbG9jYWxpIG5vbiBwcmVzZW50aSBuw6kgbmVsbCdhcmNoaXZpbyBuw6kgbmVsbCdpbmRpY2UiCi0KLSM6IGdpdGs6NTU0OQorIzogZ2l0azozNjIwIGdpdGs6NjQwOQogbXNnaWQgIlNlYXJjaGluZyIKIG1zZ3N0ciAiUmljZXJjYSBpbiBjb3JzbyIKIAotIzogZ2l0azo2MDQ5CisjOiBnaXRrOjM2NTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBydW5uaW5nIGdpdCBibGFtZTogJXMiCittc2dzdHIgIkVycm9yZSBuZWxsJ2VzZWN1emlvbmUgZGkgZ2l0IGJsYW1lOiAlcyIKKworIzogZ2l0azozNjgwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGhhdCBsaW5lIGNvbWVzIGZyb20gY29tbWl0ICVzLCAgd2hpY2ggaXMgbm90IGluIHRoaXMgdmlldyIKK21zZ3N0ciAiUXVlbGxhIHJpZ2EgcHJvdmllbmUgZGFsbGEgcmV2aXNpb25lICVzLCBub24gcHJlc2VudGUgaW4gcXVlc3RhIHZpc3RhIgorCisjOiBnaXRrOjM2OTQKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHZpZXdlciBmYWlsZWQ6IgorbXNnc3RyICJJbXBvc3NpYmlsZSBlc2VndWlyZSBpbCB2aXN1YWxpenphdG9yZSBkaSBkaWZmZXJlbnplOiIKKworIzogZ2l0azozODEyCittc2dpZCAiR2l0ayB2aWV3IGRlZmluaXRpb24iCittc2dzdHIgIlNjZWx0YSB2aXN0YSBHaXRrIgorCisjOiBnaXRrOjM4MTYKK21zZ2lkICJSZW1lbWJlciB0aGlzIHZpZXciCittc2dzdHIgIlJpY29yZGEgcXVlc3RhIHZpc3RhIgorCisjOiBnaXRrOjM4MTcKK21zZ2lkICJSZWZlcmVuY2VzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCk6IgorbXNnc3RyICJSaWZlcmltZW50aSAobGlzdGEgZGkgZWxlbWVudGkgc2VwYXJhdGkgZGEgc3BhemkpIgorCisjOiBnaXRrOjM4MTgKK21zZ2lkICJCcmFuY2hlcyAmIHRhZ3M6IgorbXNnc3RyICJSYW1pIGVkIGV0aWNoZXR0ZSIKKworIzogZ2l0azozODE5Cittc2dpZCAiQWxsIHJlZnMiCittc2dzdHIgIlR1dHRpIGkgcmlmZXJpbWVudGkiCisKKyM6IGdpdGs6MzgyMAorbXNnaWQgIkFsbCAobG9jYWwpIGJyYW5jaGVzIgorbXNnc3RyICJUdXR0aSBpIHJhbWkgKGxvY2FsaSkiCisKKyM6IGdpdGs6MzgyMQorbXNnaWQgIkFsbCB0YWdzIgorbXNnc3RyICJUdXR0ZSBsZSBldGljaGV0dGUiCisKKyM6IGdpdGs6MzgyMgorbXNnaWQgIkFsbCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgIlR1dHRpIGkgcmFtaSByZW1vdGkiCisKKyM6IGdpdGs6MzgyMworbXNnaWQgIkNvbW1pdCBJbmZvIChyZWd1bGFyIGV4cHJlc3Npb25zKToiCittc2dzdHIgIkluZm9ybWF6aW9uaSBzdWxsYSByZXZpc2lvbmUgKGVzcHJlc3Npb25pIHJlZ29sYXJpKToiCisKKyM6IGdpdGs6MzgyNAorbXNnaWQgIkF1dGhvcjoiCittc2dzdHIgIkF1dG9yZToiCisKKyM6IGdpdGs6MzgyNQorbXNnaWQgIkNvbW1pdHRlcjoiCittc2dzdHIgIlJldmlzaW9uZSBjcmVhdGEgZGE6IgorCisjOiBnaXRrOjM4MjYKK21zZ2lkICJDb21taXQgTWVzc2FnZToiCittc2dzdHIgIk1lc3NhZ2dpbyBkaSByZXZpc2lvbmU6IgorCisjOiBnaXRrOjM4MjcKK21zZ2lkICJNYXRjaGVzIGFsbCBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAiUmlzcG9uZGUgYSB0dXR0aSBpIGNyaXRlcmkgZGkgcmljZXJjYSBzdWxsZSByZXZpc2lvbmkiCisKKyM6IGdpdGs6MzgyOAorbXNnaWQgIkNoYW5nZXMgdG8gRmlsZXM6IgorbXNnc3RyICJNb2RpZmljaGUgYWkgZmlsZToiCisKKyM6IGdpdGs6MzgyOQorbXNnaWQgIkZpeGVkIFN0cmluZyIKK21zZ3N0ciAiU3RyaW5nYSBmaXNzYSIKKworIzogZ2l0azozODMwCittc2dpZCAiUmVndWxhciBFeHByZXNzaW9uIgorbXNnc3RyICJFc3ByZXNzaW9uZSByZWdvbGFyZSIKKworIzogZ2l0azozODMxCittc2dpZCAiU2VhcmNoIHN0cmluZzoiCittc2dzdHIgIkNlcmNhIHN0cmluZ2E6IgorCisjOiBnaXRrOjM4MzIKK21zZ2lkICIiCisiQ29tbWl0IERhdGVzIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5ICIKKyIxNToyNzozOFwiKToiCittc2dzdHIgIiIKKyJEYXRlIGRpIHJldmlzaW9uZSAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgIgorIjIwMDkgMTU6Mjc6MzhcIik6IgorCisjOiBnaXRrOjM4MzMKK21zZ2lkICJTaW5jZToiCittc2dzdHIgIkRhOiIKKworIzogZ2l0azozODM0Cittc2dpZCAiVW50aWw6IgorbXNnc3RyICJBOiIKKworIzogZ2l0azozODM1Cittc2dpZCAiTGltaXQgYW5kL29yIHNraXAgYSBudW1iZXIgb2YgcmV2aXNpb25zIChwb3NpdGl2ZSBpbnRlZ2VyKToiCittc2dzdHIgIkxpbWl0YSBlL28gc2FsdGEgTiByZXZpc2lvbmkgKGludGVybyBwb3NpdGl2byk6IgorCisjOiBnaXRrOjM4MzYKK21zZ2lkICJOdW1iZXIgdG8gc2hvdzoiCittc2dzdHIgIk51bWVybyBkaSByZXZpc2lvbmkgZGEgbW9zdHJhcmU6IgorCisjOiBnaXRrOjM4MzcKK21zZ2lkICJOdW1iZXIgdG8gc2tpcDoiCittc2dzdHIgIk51bWVybyBkaSByZXZpc2lvbmkgZGEgc2FsdGFyZToiCisKKyM6IGdpdGs6MzgzOAorbXNnaWQgIk1pc2NlbGxhbmVvdXMgb3B0aW9uczoiCittc2dzdHIgIkFsdHJlIG9wemlvbmk6IgorCisjOiBnaXRrOjM4MzkKK21zZ2lkICJTdHJpY3RseSBzb3J0IGJ5IGRhdGUiCittc2dzdHIgIk9yZGluYSBzb2xvIHBlciBkYXRhIgorCisjOiBnaXRrOjM4NDAKK21zZ2lkICJNYXJrIGJyYW5jaCBzaWRlcyIKK21zZ3N0ciAiU2VnbmEgaSBsYXRpIGRlbCByYW1vIgorCisjOiBnaXRrOjM4NDEKK21zZ2lkICJMaW1pdCB0byBmaXJzdCBwYXJlbnQiCittc2dzdHIgIkxpbWl0YSBhbCBwcmltbyBnZW5pdG9yZSIKKworIzogZ2l0azozODQyCittc2dpZCAiU2ltcGxlIGhpc3RvcnkiCittc2dzdHIgIkNyb25vbG9naWEgc2VtcGxpZmljYXRhIgorCisjOiBnaXRrOjM4NDMKK21zZ2lkICJBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBnaXQgbG9nOiIKK21zZ3N0ciAiVWx0ZXJpb3JpIGFyZ29tZW50aSBkYSBwYXNzYXJlIGEgZ2l0IGxvZzoiCisKKyM6IGdpdGs6Mzg0NAorbXNnaWQgIkVudGVyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBpbmNsdWRlLCBvbmUgcGVyIGxpbmU6IgorbXNnc3RyICJJbnNlcmlyZSBmaWxlIGUgZGlyZWN0b3J5IGRhIGluY2x1ZGVyZSwgdW5vIHBlciByaWdhOiIKKworIzogZ2l0azozODQ1Cittc2dpZCAiQ29tbWFuZCB0byBnZW5lcmF0ZSBtb3JlIGNvbW1pdHMgdG8gaW5jbHVkZToiCittc2dzdHIgIkNvbWFuZG8gY2hlIGdlbmVyYSBhbHRyZSByZXZpc2lvbmkgZGEgdmlzdWFsaXp6YXJlOiIKKworIzogZ2l0azozOTY3Cittc2dpZCAiR2l0azogZWRpdCB2aWV3IgorbXNnc3RyICJHaXRrOiBtb2RpZmljYSB2aXN0YSIKKworIzogZ2l0azozOTc1Cittc2dpZCAiLS0gY3JpdGVyaWEgZm9yIHNlbGVjdGluZyByZXZpc2lvbnMiCittc2dzdHIgIi0tIGNyaXRlcmkgcGVyIGxhIHNjZWx0YSBkZWxsZSByZXZpc2lvbmkiCisKKyM6IGdpdGs6Mzk4MAorbXNnaWQgIlZpZXcgTmFtZSIKK21zZ3N0ciAiTm9tZSB2aXN0YSIKKworIzogZ2l0azo0MDU1Cittc2dpZCAiQXBwbHkgKEY1KSIKK21zZ3N0ciAiQXBwbGljYSAoRjUpIgorCisjOiBnaXRrOjQwOTMKK21zZ2lkICJFcnJvciBpbiBjb21taXQgc2VsZWN0aW9uIGFyZ3VtZW50czoiCittc2dzdHIgIkVycm9yZSBuZWdsaSBhcmdvbWVudGkgZGkgc2VsZXppb25lIGRlbGxlIHJldmlzaW9uaToiCisKKyM6IGdpdGs6NDE0NiBnaXRrOjQxOTggZ2l0azo0NjQ2IGdpdGs6NDY2MCBnaXRrOjU5MjEgZ2l0azoxMTUzNCBnaXRrOjExNTM1Cittc2dpZCAiTm9uZSIKK21zZ3N0ciAiTmVzc3VubyIKKworIzogZ2l0azo0NTk0IGdpdGs6NjQ0MSBnaXRrOjgyODcgZ2l0azo4MzAyCittc2dpZCAiRGF0ZSIKK21zZ3N0ciAiRGF0YSIKKworIzogZ2l0azo0NTk0IGdpdGs6NjQ0MQorbXNnaWQgIkNEYXRlIgorbXNnc3RyICIiCisKKyM6IGdpdGs6NDc0MyBnaXRrOjQ3NDgKK21zZ2lkICJEZXNjZW5kYW50IgorbXNnc3RyICJEaXNjZW5kZW50ZSIKKworIzogZ2l0azo0NzQ0Cittc2dpZCAiTm90IGRlc2NlbmRhbnQiCittc2dzdHIgIk5vbiBkaXNjZW5kZW50ZSIKKworIzogZ2l0azo0NzUxIGdpdGs6NDc1NgorbXNnaWQgIkFuY2VzdG9yIgorbXNnc3RyICJBc2NlbmRlbnRlIgorCisjOiBnaXRrOjQ3NTIKK21zZ2lkICJOb3QgYW5jZXN0b3IiCittc2dzdHIgIk5vbiBhc2NlbmRlbnRlIgorCisjOiBnaXRrOjUwNDIKK21zZ2lkICJMb2NhbCBjaGFuZ2VzIGNoZWNrZWQgaW4gdG8gaW5kZXggYnV0IG5vdCBjb21taXR0ZWQiCittc2dzdHIgIk1vZGlmaWNoZSBsb2NhbGkgcHJlc2VudGkgbmVsbCdpbmRpY2UgbWEgbm9uIG5lbGwnYXJjaGl2aW8iCisKKyM6IGdpdGs6NTA3OAorbXNnaWQgIkxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIG5vdCBjaGVja2VkIGluIHRvIGluZGV4IgorbXNnc3RyICJNb2RpZmljaGUgbG9jYWxpIG5vbiBwcmVzZW50aSBuw6kgbmVsbCdhcmNoaXZpbyBuw6kgbmVsbCdpbmRpY2UiCisKKyM6IGdpdGs6Njc1OQorbXNnaWQgIm1hbnkiCittc2dzdHIgIm1vbHRpIgorCisjOiBnaXRrOjY5NDIKIG1zZ2lkICJUYWdzOiIKIG1zZ3N0ciAiRXRpY2hldHRlOiIKIAotIzogZ2l0azo2MDY2IGdpdGs6NjA3MiBnaXRrOjcyODAKKyM6IGdpdGs6Njk1OSBnaXRrOjY5NjUgZ2l0azo4MjgwCiBtc2dpZCAiUGFyZW50IgogbXNnc3RyICJHZW5pdG9yZSIKIAotIzogZ2l0azo2MDc3CisjOiBnaXRrOjY5NzAKIG1zZ2lkICJDaGlsZCIKIG1zZ3N0ciAiRmlnbGlvIgogCi0jOiBnaXRrOjYwODYKKyM6IGdpdGs6Njk3OQogbXNnaWQgIkJyYW5jaCIKIG1zZ3N0ciAiUmFtbyIKIAotIzogZ2l0azo2MDg5CisjOiBnaXRrOjY5ODIKIG1zZ2lkICJGb2xsb3dzIgogbXNnc3RyICJTZWd1ZSIKIAotIzogZ2l0azo2MDkyCisjOiBnaXRrOjY5ODUKIG1zZ2lkICJQcmVjZWRlcyIKIG1zZ3N0ciAiUHJlY2VkZSIKIAotIzogZ2l0azo2Mzc4Ci1tc2dpZCAiRXJyb3IgZ2V0dGluZyBtZXJnZSBkaWZmczoiCi1tc2dzdHIgIkVycm9yZSBuZWxsYSBsZXR0dXJhIGRlbGxlIGRpZmZlcmVuemUgZGkgZnVzaW9uZToiCisjOiBnaXRrOjc1MjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIGRpZmZzOiAlcyIKK21zZ3N0ciAiRXJyb3JlIG5lbGxhIGxldHR1cmEgZGVsbGUgZGlmZmVyZW56ZToiCiAKLSM6IGdpdGs6NzExMworIzogZ2l0azo4MTA4CiBtc2dpZCAiR290bzoiCiBtc2dzdHIgIlZhaSBhOiIKIAotIzogZ2l0azo3MTE1Ci1tc2dpZCAiU0hBMSBJRDoiCi1tc2dzdHIgIlNIQTEgSUQ6IgotCi0jOiBnaXRrOjcxMzQKKyM6IGdpdGs6ODEyOQogIywgdGNsLWZvcm1hdAogbXNnaWQgIlNob3J0IFNIQTEgaWQgJXMgaXMgYW1iaWd1b3VzIgogbXNnc3RyICJMYSBTSEExIGlkIGFiYnJldmlhdGEgJXMgw6ggYW1iaWd1YSIKIAotIzogZ2l0azo3MTQ2CisjOiBnaXRrOjgxMzYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIkxhIHJldmlzaW9uZSAlcyDDqCBzY29ub3NjaXV0YSIKKworIzogZ2l0azo4MTQ2CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiU0hBMSBpZCAlcyBpcyBub3Qga25vd24iCiBtc2dzdHIgIkxhIFNIQTEgaWQgJXMgw6ggc2Nvbm9zY2l1dGEiCiAKLSM6IGdpdGs6NzE0OAorIzogZ2l0azo4MTQ4CiAjLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVGFnL0hlYWQgJXMgaXMgbm90IGtub3duIgotbXNnc3RyICJMJ2V0aWNoZXR0YS9yYW1vICVzIMOoIHNjb25vc2NpdXRvIgorbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBpbiB0aGUgY3VycmVudCB2aWV3IgorbXNnc3RyICJMYSByZXZpc2lvbmUgJXMgbm9uIMOoIHByZXNlbnRlIG5lbGxhIHZpc3RhIGF0dHVhbGUiCiAKLSM6IGdpdGs6NzI5MAorIzogZ2l0azo4MjkwCiBtc2dpZCAiQ2hpbGRyZW4iCiBtc2dzdHIgIkZpZ2xpIgogCi0jOiBnaXRrOjczNDcKKyM6IGdpdGs6ODM0OAogIywgdGNsLWZvcm1hdAogbXNnaWQgIlJlc2V0ICVzIGJyYW5jaCB0byBoZXJlIgogbXNnc3RyICJBZ2dpb3JuYSBpbCByYW1vICVzIGEgcXVlc3RhIHJldmlzaW9uZSIKIAotIzogZ2l0azo3MzQ5CisjOiBnaXRrOjgzNTAKIG1zZ2lkICJEZXRhY2hlZCBoZWFkOiBjYW4ndCByZXNldCIKLW1zZ3N0ciAiIgorbXNnc3RyICJOZXNzdW4gcmFtbyBhdHRpdm86IHJlc2V0IGltcG9zc2liaWxlIgogCi0jOiBnaXRrOjczODEKKyM6IGdpdGs6ODQ1OSBnaXRrOjg0NjUKK21zZ2lkICJTa2lwcGluZyBtZXJnZSBjb21taXQgIgorbXNnc3RyICJTYWx0byBsYSByZXZpc2lvbmUgZGkgZnVzaW9uZSAiCisKKyM6IGdpdGs6ODQ3NCBnaXRrOjg0NzkKK21zZ2lkICJFcnJvciBnZXR0aW5nIHBhdGNoIElEIGZvciAiCittc2dzdHIgIkVycm9yZSBuZWxsYSBpZGVudGlmaWNhemlvbmUgZGVsbGEgcGF0Y2ggcGVyICIKKworIzogZ2l0azo4NDc1IGdpdGs6ODQ4MAorbXNnaWQgIiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiAtIGZpbmVcbiIKKworIzogZ2l0azo4NDg1IGdpdGs6ODQ4OCBnaXRrOjg0OTYgZ2l0azo4NTEwIGdpdGs6ODUxOQorbXNnaWQgIkNvbW1pdCAiCittc2dzdHIgIkxhIHJldmlzaW9uZSAiCisKKyM6IGdpdGs6ODQ4OQorbXNnaWQgIiIKKyIgaXMgdGhlIHNhbWUgcGF0Y2ggYXNcbiIKKyIgICAgICAgIgorbXNnc3RyICIiCisiIGhhIGxlIHN0ZXNzZSBkaWZmZXJlbnplIGRpXG4iCisiICAgICAgICIKKworIzogZ2l0azo4NDk3Cittc2dpZCAiIgorIiBkaWZmZXJzIGZyb21cbiIKKyIgICAgICAgIgorbXNnc3RyICIiCisiIMOoIGRpdmVyc2EgZGFcbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjg0OTkKK21zZ2lkICIiCisiRGlmZiBvZiBjb21taXRzOlxuIgorIlxuIgorbXNnc3RyICIiCisiRGlmZmVyZW56ZSB0cmEgbGUgcmV2aXNpb25pOlxuIgorIlxuIgorCisjOiBnaXRrOjg1MTEgZ2l0azo4NTIwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIGhhcyAlcyBjaGlsZHJlbiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiBoYSAlcyBmaWdsaSAtIGZpbmVcbiIKKworIzogZ2l0azo4NTM5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQgdG8gZmlsZTogJXMiCittc2dzdHIgIkVycm9yZSBuZWxsYSBzY3JpdHR1cmEgZGVsbGEgcmV2aXNpb25lIG5lbCBmaWxlOiAlcyIKKworIzogZ2l0azo4NTQ1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGlmZmluZyBjb21taXRzOiAlcyIKK21zZ3N0ciAiRXJyb3JlIG5lbGxlIGRpZmZlcmVuemUgdHJhIGxlIHJldmlzaW9uaTogJXMiCisKKyM6IGdpdGs6ODU3NQogbXNnaWQgIlRvcCIKIG1zZ3N0ciAiSW5pemlvIgogCi0jOiBnaXRrOjczODIKKyM6IGdpdGs6ODU3NgogbXNnaWQgIkZyb20iCiBtc2dzdHIgIkRhIgogCi0jOiBnaXRrOjczODcKKyM6IGdpdGs6ODU4MQogbXNnaWQgIlRvIgogbXNnc3RyICJBIgogCi0jOiBnaXRrOjc0MTAKKyM6IGdpdGs6ODYwNQogbXNnaWQgIkdlbmVyYXRlIHBhdGNoIgogbXNnc3RyICJHZW5lcmEgcGF0Y2giCiAKLSM6IGdpdGs6NzQxMgorIzogZ2l0azo4NjA3CiBtc2dpZCAiRnJvbToiCiBtc2dzdHIgIkRhOiIKIAotIzogZ2l0azo3NDIxCisjOiBnaXRrOjg2MTYKIG1zZ2lkICJUbzoiCiBtc2dzdHIgIkE6IgogCi0jOiBnaXRrOjc0MzAKKyM6IGdpdGs6ODYyNQogbXNnaWQgIlJldmVyc2UiCiBtc2dzdHIgIkludmVydGkiCiAKLSM6IGdpdGs6NzQzMiBnaXRrOjc2MDcKKyM6IGdpdGs6ODYyNyBnaXRrOjg4MjIKIG1zZ2lkICJPdXRwdXQgZmlsZToiCiBtc2dzdHIgIlNjcml2aSBzdWwgZmlsZToiCiAKLSM6IGdpdGs6NzQzOAorIzogZ2l0azo4NjMzCiBtc2dpZCAiR2VuZXJhdGUiCiBtc2dzdHIgIkdlbmVyYSIKIAotIzogZ2l0azo3NDc0CisjOiBnaXRrOjg2NzEKIG1zZ2lkICJFcnJvciBjcmVhdGluZyBwYXRjaDoiCiBtc2dzdHIgIkVycm9yZSBuZWxsYSBjcmVhemlvbmUgZGVsbGEgcGF0Y2g6IgogCi0jOiBnaXRrOjc0OTYgZ2l0azo3NTk1IGdpdGs6NzY0OQorIzogZ2l0azo4Njk0IGdpdGs6ODgxMCBnaXRrOjg4NjcKIG1zZ2lkICJJRDoiCiBtc2dzdHIgIklEOiIKIAotIzogZ2l0azo3NTA1CisjOiBnaXRrOjg3MDMKIG1zZ2lkICJUYWcgbmFtZToiCiBtc2dzdHIgIk5vbWUgZXRpY2hldHRhOiIKIAotIzogZ2l0azo3NTA5IGdpdGs6NzY1OQorIzogZ2l0azo4NzA2Cittc2dpZCAiVGFnIG1lc3NhZ2UgaXMgb3B0aW9uYWwiCittc2dzdHIgIklsIG1lc3NhZ2dpbyBkZWxsJ2V0aWNoZXR0YSDDqCBvcHppb25hbGUiCisKKyM6IGdpdGs6ODcwOAorbXNnaWQgIlRhZyBtZXNzYWdlOiIKK21zZ3N0ciAiTWVzc2FnZ2lvIGRlbGwnZXRpY2hldHRhOiIKKworIzogZ2l0azo4NzEyIGdpdGs6ODg3NgogbXNnaWQgIkNyZWF0ZSIKIG1zZ3N0ciAiQ3JlYSIKIAotIzogZ2l0azo3NTI0CisjOiBnaXRrOjg3MzAKIG1zZ2lkICJObyB0YWcgbmFtZSBzcGVjaWZpZWQiCiBtc2dzdHIgIk5lc3N1bmEgZXRpY2hldHRhIHNwZWNpZmljYXRhIgogCi0jOiBnaXRrOjc1MjgKKyM6IGdpdGs6ODczNAogIywgdGNsLWZvcm1hdAogbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCiBtc2dzdHIgIkwnZXRpY2hldHRhIFwiJXNcIiBlc2lzdGUgZ2nDoCIKIAotIzogZ2l0azo3NTM0CisjOiBnaXRrOjg3NDQKIG1zZ2lkICJFcnJvciBjcmVhdGluZyB0YWc6IgogbXNnc3RyICJFcnJvcmUgbmVsbGEgY3JlYXppb25lIGRlbGwnZXRpY2hldHRhOiIKIAotIzogZ2l0azo3NjA0CisjOiBnaXRrOjg4MTkKIG1zZ2lkICJDb21tYW5kOiIKIG1zZ3N0ciAiQ29tYW5kbzoiCiAKLSM6IGdpdGs6NzYxMgorIzogZ2l0azo4ODI3CiBtc2dpZCAiV3JpdGUiCiBtc2dzdHIgIlNjcml2aSIKIAotIzogZ2l0azo3NjI4CisjOiBnaXRrOjg4NDUKIG1zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdDoiCiBtc2dzdHIgIkVycm9yZSBuZWxsYSBzY3JpdHR1cmEgZGVsbGEgcmV2aXNpb25lOiIKIAotIzogZ2l0azo3NjU0CisjOiBnaXRrOjg4NzIKIG1zZ2lkICJOYW1lOiIKIG1zZ3N0ciAiTm9tZToiCiAKLSM6IGdpdGs6NzY3NAorIzogZ2l0azo4ODk1CiBtc2dpZCAiUGxlYXNlIHNwZWNpZnkgYSBuYW1lIGZvciB0aGUgbmV3IGJyYW5jaCIKIG1zZ3N0ciAiU3BlY2lmaWNhcmUgdW4gbm9tZSBwZXIgaWwgbnVvdm8gcmFtbyIKIAotIzogZ2l0azo3NzAzCisjOiBnaXRrOjg5MDAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRlPyIKK21zZ3N0ciAiSWwgcmFtbyAnJXMnIGVzaXN0ZSBnacOgLiBTb3ZyYXNjcml2ZXJlPyIKKworIzogZ2l0azo4OTY2CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQ29tbWl0ICVzIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZS1hcHBseSBpdD8iCiBtc2dzdHIgIkxhIHJldmlzaW9uZSAlcyDDqCBnacOgIGluY2x1c2EgbmVsIHJhbW8gJXMgLS0gYXBwbGljYXJsYSBkaSBudW92bz8iCiAKLSM6IGdpdGs6NzcwOAorIzogZ2l0azo4OTcxCiBtc2dpZCAiQ2hlcnJ5LXBpY2tpbmciCiBtc2dzdHIgIiIKIAotIzogZ2l0azo3NzIwCisjOiBnaXRrOjg5ODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byBmaWxlICclcycuXG4iCisiUGxlYXNlIGNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgY2hlcnJ5LXBpY2sgcGVyY2jDqSBpbCBmaWxlICclcycgw6ggc3RhdG8gbW9kaWZpY2F0byAiCisibmVsbGEgZGlyZWN0b3J5IGRpIGxhdm9yby5cbiIKKyJQcmltYSBkaSByaXByb3ZhcmUsIGJpc29nbmEgY3JlYXJlIHVuYSBudW92YSByZXZpc2lvbmUsIGFubnVsbGFyZSBsZSAiCisibW9kaWZpY2hlIG8gdXNhcmUgJ2dpdCBzdGFzaCcuIgorCisjOiBnaXRrOjg5ODYKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCisiRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBlc2VndWlyZSBjaGVycnktcGljayBhIGNhdXNhIGRpIHVuIGNvbmZsaXR0byBuZWxsYSBmdXNpb25lLlxuIgorIlZ1b2kgYXZ2aWFyZSBnaXQgY2l0b29sIHBlciByaXNvbHZlcmxvPyIKKworIzogZ2l0azo5MDAyCiBtc2dpZCAiTm8gY2hhbmdlcyBjb21taXR0ZWQiCiBtc2dzdHIgIk5lc3N1bmEgbW9kaWZpY2EgYXJjaGl2aWF0YSIKIAotIzogZ2l0azo3NzQ1CisjOiBnaXRrOjkwMjgKIG1zZ2lkICJDb25maXJtIHJlc2V0IgogbXNnc3RyICJDb25mZXJtYSBnaXQgcmVzZXQiCiAKLSM6IGdpdGs6Nzc0NworIzogZ2l0azo5MDMwCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiUmVzZXQgYnJhbmNoICVzIHRvICVzPyIKIG1zZ3N0ciAiQWdnaW9ybmFyZSBpbCByYW1vICVzIGEgJXM/IgogCi0jOiBnaXRrOjc3NTEKKyM6IGdpdGs6OTAzMgogbXNnaWQgIlJlc2V0IHR5cGU6IgogbXNnc3RyICJUaXBvIGRpIGFnZ2lvcm5hbWVudG86IgogCi0jOiBnaXRrOjc3NTUKKyM6IGdpdGs6OTAzNQogbXNnaWQgIlNvZnQ6IExlYXZlIHdvcmtpbmcgdHJlZSBhbmQgaW5kZXggdW50b3VjaGVkIgogbXNnc3RyICJTb2Z0OiBMYXNjaWEgbGEgZGlyZWNvcnkgZGkgbGF2b3JvIGUgbCdpbmRpY2UgY29tZSBzb25vIgogCi0jOiBnaXRrOjc3NTgKKyM6IGdpdGs6OTAzOAogbXNnaWQgIk1peGVkOiBMZWF2ZSB3b3JraW5nIHRyZWUgdW50b3VjaGVkLCByZXNldCBpbmRleCIKIG1zZ3N0ciAiTWl4ZWQ6IExhc2NpYSBsYSBkaXJlY3RvcnkgZGkgbGF2b3JvIGNvbWUgw6gsIGFnZ2lvcm5hIGwnaW5kaWNlIgogCi0jOiBnaXRrOjc3NjEKKyM6IGdpdGs6OTA0MQogbXNnaWQgIiIKICJIYXJkOiBSZXNldCB3b3JraW5nIHRyZWUgYW5kIGluZGV4XG4iCiAiKGRpc2NhcmQgQUxMIGxvY2FsIGNoYW5nZXMpIgpAQCAtNzIzLDE5ICsxMDM3LDE5IEBACiAiSGFyZDogQWdnaW9ybmEgbGEgZGlyZWN0b3J5IGRpIGxhdm9ybyBlIGwnaW5kaWNlXG4iCiAiKGFiYmFuZG9uYSBUVVRURSBsZSBtb2RpZmljaGUgbG9jYWxpKSIKIAotIzogZ2l0azo3Nzc3CisjOiBnaXRrOjkwNTgKIG1zZ2lkICJSZXNldHRpbmciCiBtc2dzdHIgImdpdCByZXNldCBpbiBjb3JzbyIKIAotIzogZ2l0azo3ODM0CisjOiBnaXRrOjkxMTgKIG1zZ2lkICJDaGVja2luZyBvdXQiCiBtc2dzdHIgIkF0dGl2YXppb25lIGluIGNvcnNvIgogCi0jOiBnaXRrOjc4ODUKKyM6IGdpdGs6OTE3MQogbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2giCiBtc2dzdHIgIkltcG9zc2liaWxlIGNhbmNlbGxhcmUgaWwgcmFtbyBhdHR1YWxtZW50ZSBhdHRpdm8iCiAKLSM6IGdpdGs6Nzg5MQorIzogZ2l0azo5MTc3CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiIgogIlRoZSBjb21taXRzIG9uIGJyYW5jaCAlcyBhcmVuJ3Qgb24gYW55IG90aGVyIGJyYW5jaC5cbiIKQEAgLTc0NCwxNiArMTA1OCwxNiBAQAogIkxlIHJldmlzaW9uaSBuZWwgcmFtbyAlcyBub24gc29ubyBwcmVzZW50aSBzdSBhbHRyaSByYW1pLlxuIgogIkNhbmNlbGxhcmUgaWwgcmFtbyAlcz8iCiAKLSM6IGdpdGs6NzkyMgorIzogZ2l0azo5MjA4CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVGFncyBhbmQgaGVhZHM6ICVzIgogbXNnc3RyICJFdGljaGV0dGUgZSByYW1pOiAlcyIKIAotIzogZ2l0azo3OTM2CisjOiBnaXRrOjkyMjMKIG1zZ2lkICJGaWx0ZXIiCiBtc2dzdHIgIkZpbHRybyIKIAotIzogZ2l0azo4MjMwCisjOiBnaXRrOjk1MTgKIG1zZ2lkICIiCiAiRXJyb3IgcmVhZGluZyBjb21taXQgdG9wb2xvZ3kgaW5mb3JtYXRpb247IGJyYW5jaCBhbmQgcHJlY2VkaW5nL2ZvbGxvd2luZyAiCiAidGFnIGluZm9ybWF0aW9uIHdpbGwgYmUgaW5jb21wbGV0ZS4iCkBAIC03NjEsMTU0ICsxMDc1LDIwMiBAQAogIkVycm9yZSBuZWxsYSBsZXR0dXJhIGRlbGxhIHRvcG9sb2dpYSBkZWxsZSByZXZpc2lvbmk6IGxlIGluZm9ybWF6aW9uaSBzdWwgIgogInJhbW8gZSBsZSBldGljaGV0dGUgcHJlY2VkZW50aSBlIHNlZ3VlbnRpIHNhcmFubm8gaW5jb21wbGV0ZS4iCiAKLSM6IGdpdGs6OTIxNgorIzogZ2l0azoxMDUwNAogbXNnaWQgIlRhZyIKIG1zZ3N0ciAiRXRpY2hldHRhIgogCi0jOiBnaXRrOjkyMTYKKyM6IGdpdGs6MTA1MDQKIG1zZ2lkICJJZCIKIG1zZ3N0ciAiSWQiCiAKLSM6IGdpdGs6OTI2MgorIzogZ2l0azoxMDU1NAogbXNnaWQgIkdpdGsgZm9udCBjaG9vc2VyIgogbXNnc3RyICJTY2VsdGEgY2FyYXR0ZXJpIGdpdGsiCiAKLSM6IGdpdGs6OTI3OQorIzogZ2l0azoxMDU3MQogbXNnaWQgIkIiCiBtc2dzdHIgIkIiCiAKLSM6IGdpdGs6OTI4MgorIzogZ2l0azoxMDU3NAogbXNnaWQgIkkiCiBtc2dzdHIgIkkiCiAKLSM6IGdpdGs6OTM3NQorIzogZ2l0azoxMDY5MgogbXNnaWQgIkdpdGsgcHJlZmVyZW5jZXMiCiBtc2dzdHIgIlByZWZlcmVuemUgZ2l0ayIKIAotIzogZ2l0azo5Mzc2CisjOiBnaXRrOjEwNjk0CiBtc2dpZCAiQ29tbWl0IGxpc3QgZGlzcGxheSBvcHRpb25zIgogbXNnc3RyICJPcHppb25pIHZpc3VhbGl6emF6aW9uZSBkZWxsJ2VsZW5jbyByZXZpc2lvbmkiCiAKLSM6IGdpdGs6OTM3OQorIzogZ2l0azoxMDY5NwogbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKGxpbmVzKSIKIG1zZ3N0ciAiTGFyZ2hlenphIG1hc3NpbWEgZGVsIGdyYWZpY28gKGluIGxpbmVlKSIKIAotIzogZ2l0azo5MzgzCisjOiBnaXRrOjEwNzAwCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAoJSBvZiBwYW5lKSIKIG1zZ3N0ciAiTGFyZ2hlenphIG1hc3NpbWEgZGVsIGdyYWZpY28gKCUgZGVsIHBhbm5lbGxvKSIKIAotIzogZ2l0azo5Mzg4CisjOiBnaXRrOjEwNzAzCiBtc2dpZCAiU2hvdyBsb2NhbCBjaGFuZ2VzIgogbXNnc3RyICJNb3N0cmEgbW9kaWZpY2hlIGxvY2FsaSIKIAotIzogZ2l0azo5MzkzCisjOiBnaXRrOjEwNzA2CiBtc2dpZCAiQXV0by1zZWxlY3QgU0hBMSIKIG1zZ3N0ciAiU2VsZXppb25hIGF1dG9tYXRpY2FtZW50ZSBTSEExIGhhc2giCiAKLSM6IGdpdGs6OTM5OAorIzogZ2l0azoxMDcwOQorbXNnaWQgIkhpZGUgcmVtb3RlIHJlZnMiCittc2dzdHIgIk5hc2NvbmRpIGkgcmlmZXJpbWVudGkgcmVtb3RpIgorCisjOiBnaXRrOjEwNzEzCiBtc2dpZCAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiCiBtc2dzdHIgIk9wemlvbmkgZGkgdmlzdWFsaXp6YXppb25lIGRlbGxlIGRpZmZlcmVuemUiCiAKLSM6IGdpdGs6OTQwMAorIzogZ2l0azoxMDcxNQogbXNnaWQgIlRhYiBzcGFjaW5nIgogbXNnc3RyICJTcGF6aWF0dXJhIHRhYnVsYXppb25pIgogCi0jOiBnaXRrOjk0MDQKKyM6IGdpdGs6MTA3MTgKIG1zZ2lkICJEaXNwbGF5IG5lYXJieSB0YWdzIgogbXNnc3RyICJNb3N0cmEgZXRpY2hldHRlIHZpY2luZSIKIAotIzogZ2l0azo5NDA5CisjOiBnaXRrOjEwNzIxCiBtc2dpZCAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIgogbXNnc3RyICJMaW1pdGEgbGUgZGlmZmVyZW56ZSBhaSBwZXJjb3JzaSBlbGVuY2F0aSIKIAotIzogZ2l0azo5NDE0CisjOiBnaXRrOjEwNzI0CiBtc2dpZCAiU3VwcG9ydCBwZXItZmlsZSBlbmNvZGluZ3MiCi1tc2dzdHIgIiIKK21zZ3N0ciAiQXR0aXZhIGNvZGlmaWNhIGZpbGUgcGVyIGZpbGUiCiAKLSM6IGdpdGs6OTQyMQorIzogZ2l0azoxMDczMCBnaXRrOjEwODE5CiBtc2dpZCAiRXh0ZXJuYWwgZGlmZiB0b29sIgotbXNnc3RyICIiCittc2dzdHIgIlZpc3VhbGl6emF0b3JlIGRpIGRpZmZlcmVuemUiCiAKLSM6IGdpdGs6OTQyMworIzogZ2l0azoxMDczMQogbXNnaWQgIkNob29zZS4uLiIKLW1zZ3N0ciAiIgorbXNnc3RyICJTY2VnbGkuLi4iCiAKLSM6IGdpdGs6OTQyOAorIzogZ2l0azoxMDczNgorbXNnaWQgIkdlbmVyYWwgb3B0aW9ucyIKK21zZ3N0ciAiT3B6aW9uaSBnZW5lcmFsaSIKKworIzogZ2l0azoxMDczOQorbXNnaWQgIlVzZSB0aGVtZWQgd2lkZ2V0cyIKK21zZ3N0ciAiVXRpbGl6emEgaW50ZXJmYWNjaWEgYSB0ZW1hIgorCisjOiBnaXRrOjEwNzQxCittc2dpZCAiKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KSIKK21zZ3N0ciAiKHVuYSBtb2RpZmljYSByaWNoaWVkZSBpbCByaWF2dmlvKSIKKworIzogZ2l0azoxMDc0MworbXNnaWQgIihjdXJyZW50bHkgdW5hdmFpbGFibGUpIgorbXNnc3RyICIobW9tZW50YW5lYW1lbnRlIG5vbiBkaXNwb25pYmlsZSkiCisKKyM6IGdpdGs6MTA3NDcKIG1zZ2lkICJDb2xvcnM6IHByZXNzIHRvIGNob29zZSIKIG1zZ3N0ciAiQ29sb3JpOiBwcmVtZXJlIHBlciBzY2VnbGllcmUiCiAKLSM6IGdpdGs6OTQzMQorIzogZ2l0azoxMDc1MAorbXNnaWQgIkludGVyZmFjZSIKK21zZ3N0ciAiSW50ZXJmYWNjaWEiCisKKyM6IGdpdGs6MTA3NTEKK21zZ2lkICJpbnRlcmZhY2UiCittc2dzdHIgImludGVyZmFjY2lhIgorCisjOiBnaXRrOjEwNzU0CiBtc2dpZCAiQmFja2dyb3VuZCIKIG1zZ3N0ciAiU2ZvbmRvIgogCi0jOiBnaXRrOjk0MzUKKyM6IGdpdGs6MTA3NTUgZ2l0azoxMDc4NQorbXNnaWQgImJhY2tncm91bmQiCittc2dzdHIgInNmb25kbyIKKworIzogZ2l0azoxMDc1OAogbXNnaWQgIkZvcmVncm91bmQiCiBtc2dzdHIgIlByaW1vIHBpYW5vIgogCi0jOiBnaXRrOjk0MzkKKyM6IGdpdGs6MTA3NTkKK21zZ2lkICJmb3JlZ3JvdW5kIgorbXNnc3RyICJwcmltbyBwaWFubyIKKworIzogZ2l0azoxMDc2MgogbXNnaWQgIkRpZmY6IG9sZCBsaW5lcyIKIG1zZ3N0ciAiRGlmZjogdmVjY2hpZSBsaW5lZSIKIAotIzogZ2l0azo5NDQ0CisjOiBnaXRrOjEwNzYzCittc2dpZCAiZGlmZiBvbGQgbGluZXMiCittc2dzdHIgInZlY2NoaWUgbGluZWUiCisKKyM6IGdpdGs6MTA3NjcKIG1zZ2lkICJEaWZmOiBuZXcgbGluZXMiCiBtc2dzdHIgIkRpZmY6IG51b3ZlIGxpbmVlIgogCi0jOiBnaXRrOjk0NDkKKyM6IGdpdGs6MTA3NjgKK21zZ2lkICJkaWZmIG5ldyBsaW5lcyIKK21zZ3N0ciAibnVvdmUgbGluZWUiCisKKyM6IGdpdGs6MTA3NzIKIG1zZ2lkICJEaWZmOiBodW5rIGhlYWRlciIKIG1zZ3N0ciAiRGlmZjogaW50ZXN0YXppb25lIGRlbGxhIHNlemlvbmUiCiAKLSM6IGdpdGs6OTQ1NQotbXNnaWQgIlNlbGVjdCBiZyIKLW1zZ3N0ciAiU2ZvbmRvIHNlbGV6aW9uZSIKKyM6IGdpdGs6MTA3NzQKK21zZ2lkICJkaWZmIGh1bmsgaGVhZGVyIgorbXNnc3RyICJpbnRlc3RhemlvbmUgZGVsbGEgc2V6aW9uZSIKIAotIzogZ2l0azo5NDU5CisjOiBnaXRrOjEwNzc4Cittc2dpZCAiTWFya2VkIGxpbmUgYmciCittc2dzdHIgIlNmb25kbyByaWdhIHNlbGV6aW9uYXRhIgorCisjOiBnaXRrOjEwNzgwCittc2dpZCAibWFya2VkIGxpbmUgYmFja2dyb3VuZCIKK21zZ3N0ciAic2ZvbmRvIHJpZ2Egc2VsZXppb25hdGEiCisKKyM6IGdpdGs6MTA3ODQKK21zZ2lkICJTZWxlY3QgYmciCittc2dzdHIgIlNmb25kbyIKKworIzogZ2l0azoxMDc4OAogbXNnaWQgIkZvbnRzOiBwcmVzcyB0byBjaG9vc2UiCiBtc2dzdHIgIkNhcmF0dGVyZTogcHJlbWVyZSBwZXIgc2NlZ2xpZXJlIgogCi0jOiBnaXRrOjk0NjEKKyM6IGdpdGs6MTA3OTAKIG1zZ2lkICJNYWluIGZvbnQiCiBtc2dzdHIgIkNhcmF0dGVyZSBwcmluY2lwYWxlIgogCi0jOiBnaXRrOjk0NjIKKyM6IGdpdGs6MTA3OTEKIG1zZ2lkICJEaWZmIGRpc3BsYXkgZm9udCIKIG1zZ3N0ciAiQ2FyYXR0ZXJlIHBlciBkaWZmZXJlbnplIgogCi0jOiBnaXRrOjk0NjMKKyM6IGdpdGs6MTA3OTIKIG1zZ2lkICJVc2VyIGludGVyZmFjZSBmb250IgogbXNnc3RyICJDYXJhdHRlcmUgcGVyIGludGVyZmFjY2lhIHV0ZW50ZSIKIAotIzogZ2l0azo5NDg4CisjOiBnaXRrOjEwODI5CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiR2l0azogY2hvb3NlIGNvbG9yIGZvciAlcyIKIG1zZ3N0ciAiR2l0azogc2NlZ2xpZXJlIHVuIGNvbG9yZSBwZXIgJXMiCiAKLSM6IGdpdGs6OTkzNAotbXNnaWQgIiIKLSJTb3JyeSwgZ2l0ayBjYW5ub3QgcnVuIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFRjbC9Uay5cbiIKLSIgR2l0ayByZXF1aXJlcyBhdCBsZWFzdCBUY2wvVGsgOC40LiIKLW1zZ3N0ciAiIgotIlF1ZXN0YSB2ZXJzaW9uZSBkaSBUY2wvVGsgbm9uIHB1w7IgYXZ2aWFyZSBnaXRrLlxuIgotIiBHaXRrIHJpY2hpZWRlIFRjbC9UayB2ZXJzaW9uZSA4LjQgbyBzdXBlcmlvcmUuIgotCi0jOiBnaXRrOjEwMDQ3CisjOiBnaXRrOjExNDMzCiBtc2dpZCAiQ2Fubm90IGZpbmQgYSBnaXQgcmVwb3NpdG9yeSBoZXJlLiIKIG1zZ3N0ciAiQXJjaGl2aW8gZ2l0IG5vbiB0cm92YXRvLiIKIAotIzogZ2l0azoxMDA1MQorIzogZ2l0azoxMTQzNwogIywgdGNsLWZvcm1hdAogbXNnaWQgIkNhbm5vdCBmaW5kIHRoZSBnaXQgZGlyZWN0b3J5IFwiJXNcIi4iCiBtc2dzdHIgIkRpcmVjdG9yeSBnaXQgXCIlc1wiIG5vbiB0cm92YXRhLiIKIAotIzogZ2l0azoxMDA5OAorIzogZ2l0azoxMTQ4NAogIywgdGNsLWZvcm1hdAogbXNnaWQgIkFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZSIKIG1zZ3N0ciAiQXJnb21lbnRvIGFtYmlndW86ICclcycgw6ggc2lhIHJldmlzaW9uZSBjaGUgbm9tZSBkaSBmaWxlIgogCi0jOiBnaXRrOjEwMTEwCisjOiBnaXRrOjExNDk2CiBtc2dpZCAiQmFkIGFyZ3VtZW50cyB0byBnaXRrOiIKIG1zZ3N0ciAiR2l0azogYXJnb21lbnRpIGVycmF0aToiCiAKLSM6IGdpdGs6MTAxNzAKKyM6IGdpdGs6MTE1ODcKIG1zZ2lkICJDb21tYW5kIGxpbmUiCiBtc2dzdHIgIkxpbmVhIGRpIGNvbWFuZG8iCmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9qYS5wbyBiL2dpdGstZ2l0L3BvL2phLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYzkyYWQKLS0tIC9kZXYvbnVsbAorKysgYi9naXRrLWdpdC9wby9qYS5wbwpAQCAtMCwwICsxLDEyNTUgQEAKKyMgSmFwYW5lc2UgdHJhbnNsYXRpb25zIGZvciBnaXRrIHBhY2thZ2UuCisjIENvcHlyaWdodCAoQykgMjAwNS0yMDA5IFBhdWwgTWFja2VycmFzCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXRrIHBhY2thZ2UuCisjCisjIE1pemFyIDxtaXphci5qcEBnbWFpbC5jb20+LCAyMDA5LgorIyBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+LCAyMDA5LgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0a1xuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwOS0xMS0wNCAwMDowOCswOTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOS0xMS0wNiAwMTo0NSswOTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBNaXphciA8bWl6YXIuanBAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IEphcGFuZXNlXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0xOyBwbHVyYWw9MDtcbiIKKworIzogZ2l0azoxMTMKK21zZ2lkICJDb3VsZG4ndCBnZXQgbGlzdCBvZiB1bm1lcmdlZCBmaWxlczoiCittc2dzdHIgIuODnuODvOOCuOOBleOCjOOBpuOBhOOBquOBhOODleOCoeOCpOODq+OBruODquOCueODiOOCkuWPluW+l+OBp+OBjeOBvuOBm+OCkzoiCisKKyM6IGdpdGs6MjY5Cittc2dpZCAiRXJyb3IgcGFyc2luZyByZXZpc2lvbnM6IgorbXNnc3RyICLjg6rjg5Pjgrjjg6fjg7Pop6PmnpDjgqjjg6njg7w6IgorCisjOiBnaXRrOjMyNAorbXNnaWQgIkVycm9yIGV4ZWN1dGluZyAtLWFyZ3NjbWQgY29tbWFuZDoiCittc2dzdHIgIi0tYXJnc2NtZCDjgrPjg57jg7Pjg4nlrp/ooYzjgqjjg6njg7w6IgorCisjOiBnaXRrOjMzNworbXNnaWQgIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gZmlsZXMgYXJlIHVubWVyZ2VkLiIKK21zZ3N0ciAiIgorIuODleOCoeOCpOODq+acqumBuOaKnjogLS1tZXJnZSDjgYzmjIflrprjgZXjgozjgb7jgZfjgZ/jgYzjgIHjg57jg7zjgrjjgZXjgozjgabjgYTjgarjgYTjg5XjgqHjgqTjg6vjga/jgYLjgooiCisi44G+44Gb44KT44CCIgorCisjOiBnaXRrOjM0MAorbXNnaWQgIiIKKyJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIHVubWVyZ2VkIGZpbGVzIGFyZSB3aXRoaW4gZmlsZSAiCisibGltaXQuIgorbXNnc3RyICIiCisi44OV44Kh44Kk44Or5pyq6YG45oqeOiAtLW1lcmdlIOOBjOaMh+WumuOBleOCjOOBvuOBl+OBn+OBjOOAgeODleOCoeOCpOODq+WItumZkOWGheOBq+ODnuODvOOCuOOBleOCjOOBpuOBhOOBqiIKKyLjgYTjg5XjgqHjgqTjg6vjga/jgYLjgorjgb7jgZvjgpPjgIIiCisKKyM6IGdpdGs6MzYyIGdpdGs6NTA5Cittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIGdpdCBsb2c6IgorbXNnc3RyICJnaXQgbG9nIOWun+ihjOOCqOODqeODvDoiCisKKyM6IGdpdGs6MzgwIGdpdGs6NTI1Cittc2dpZCAiUmVhZGluZyIKK21zZ3N0ciAi6Kqt44G/6L6844G/5LitIgorCisjOiBnaXRrOjQ0MCBnaXRrOjQxMzIKK21zZ2lkICJSZWFkaW5nIGNvbW1pdHMuLi4iCittc2dzdHIgIuOCs+ODn+ODg+ODiOiqreOBv+i+vOOBv+S4rS4uLiIKKworIzogZ2l0azo0NDMgZ2l0azoxNTYxIGdpdGs6NDEzNQorbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCittc2dzdHIgIuOCs+ODn+ODg+ODiOOBjOmBuOaKnuOBleOCjOOBpuOBhOOBvuOBm+OCkyIKKworIzogZ2l0azoxNDM3Cittc2dpZCAiQ2FuJ3QgcGFyc2UgZ2l0IGxvZyBvdXRwdXQ6IgorbXNnc3RyICJnaXQgbG9nIOOBruWHuuWKm+OCkuino+aekOOBp+OBjeOBvuOBm+OCkzoiCisKKyM6IGdpdGs6MTY1NworbXNnaWQgIk5vIGNvbW1pdCBpbmZvcm1hdGlvbiBhdmFpbGFibGUiCittc2dzdHIgIuacieWKueOBquOCs+ODn+ODg+ODiOOBruaDheWgseOBjOOBguOCiuOBvuOBm+OCkyIKKworIzogZ2l0azoxNzkwCittc2dpZCAibWMiCittc2dzdHIgIm1jIgorCisjOiBnaXRrOjE4MTcgZ2l0azozOTI1IGdpdGs6ODg0MiBnaXRrOjEwMzc4IGdpdGs6MTA1NTgKK21zZ2lkICJPSyIKK21zZ3N0ciAiT0siCisKKyM6IGdpdGs6MTgxOSBnaXRrOjM5MjcgZ2l0azo4NDM5IGdpdGs6ODUxMyBnaXRrOjg2MjMgZ2l0azo4NjcyIGdpdGs6ODg0NAorIzogZ2l0azoxMDM3OSBnaXRrOjEwNTU5Cittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICLjgq3jg6Pjg7Pjgrvjg6siCisKKyM6IGdpdGs6MTkxOQorbXNnaWQgIlVwZGF0ZSIKK21zZ3N0ciAi5pu05pawIgorCisjOiBnaXRrOjE5MjAKK21zZ2lkICJSZWxvYWQiCittc2dzdHIgIuODquODreODvOODiSIKKworIzogZ2l0azoxOTIxCittc2dpZCAiUmVyZWFkIHJlZmVyZW5jZXMiCittc2dzdHIgIuODquODleOCoeODrOODs+OCueOCkuWGjeiqreOBv+i+vOOBvyIKKworIzogZ2l0azoxOTIyCittc2dpZCAiTGlzdCByZWZlcmVuY2VzIgorbXNnc3RyICLjg6rjg5XjgqHjg6zjg7Pjgrnjg6rjgrnjg4jjgpLooajnpLoiCisKKyM6IGdpdGs6MTkyNAorbXNnaWQgIlN0YXJ0IGdpdCBndWkiCittc2dzdHIgImdpdCBndWkg44Gu6ZaL5aeLIgorCisjOiBnaXRrOjE5MjYKK21zZ2lkICJRdWl0IgorbXNnc3RyICLntYLkuoYiCisKKyM6IGdpdGs6MTkxOAorbXNnaWQgIkZpbGUiCittc2dzdHIgIuODleOCoeOCpOODqyIKKworIzogZ2l0azoxOTMwCittc2dpZCAiUHJlZmVyZW5jZXMiCittc2dzdHIgIuioreWumiIKKworIzogZ2l0azoxOTI5Cittc2dpZCAiRWRpdCIKK21zZ3N0ciAi57eo6ZuGIgorCisjOiBnaXRrOjE5MzQKK21zZ2lkICJOZXcgdmlldy4uLiIKK21zZ3N0ciAi5paw6KaP44OT44Ol44O8Li4uIgorCisjOiBnaXRrOjE5MzUKK21zZ2lkICJFZGl0IHZpZXcuLi4iCittc2dzdHIgIuODk+ODpeODvOe3qOmbhi4uLiIKKworIzogZ2l0azoxOTM2Cittc2dpZCAiRGVsZXRlIHZpZXciCittc2dzdHIgIuODk+ODpeODvOWJiumZpCIKKworIzogZ2l0azoxOTM4Cittc2dpZCAiQWxsIGZpbGVzIgorbXNnc3RyICLlhajjgabjga7jg5XjgqHjgqTjg6siCisKKyM6IGdpdGs6MTkzMyBnaXRrOjM2NzkKK21zZ2lkICJWaWV3IgorbXNnc3RyICLjg5Pjg6Xjg7wiCisKKyM6IGdpdGs6MTk0MyBnaXRrOjE5NTMgZ2l0azoyNjU2Cittc2dpZCAiQWJvdXQgZ2l0ayIKK21zZ3N0ciAiZ2l0ayDjgavjgaTjgYTjgaYiCisKKyM6IGdpdGs6MTk0NCBnaXRrOjE5NTgKK21zZ2lkICJLZXkgYmluZGluZ3MiCittc2dzdHIgIuOCreODvOODkOOCpOODs+ODh+OCo+ODs+OCsCIKKworIzogZ2l0azoxOTQyIGdpdGs6MTk1NworbXNnaWQgIkhlbHAiCittc2dzdHIgIuODmOODq+ODlyIKKworIzogZ2l0azoyMDE4Cittc2dpZCAiU0hBMSBJRDogIgorbXNnc3RyICJTSEExIElEOiAiCisKKyM6IGdpdGs6MjA0OQorbXNnaWQgIlJvdyIKK21zZ3N0ciAi6KGMIgorCisjOiBnaXRrOjIwODAKK21zZ2lkICJGaW5kIgorbXNnc3RyICLmpJzntKIiCisKKyM6IGdpdGs6MjA4MQorbXNnaWQgIm5leHQiCittc2dzdHIgIuasoSIKKworIzogZ2l0azoyMDgyCittc2dpZCAicHJldiIKK21zZ3N0ciAi5YmNIgorCisjOiBnaXRrOjIwODMKK21zZ2lkICJjb21taXQiCittc2dzdHIgIuOCs+ODn+ODg+ODiCIKKworIzogZ2l0azoyMDg2IGdpdGs6MjA4OCBnaXRrOjQyOTMgZ2l0azo0MzE2IGdpdGs6NDM0MCBnaXRrOjYyODEgZ2l0azo2MzUzCisjOiBnaXRrOjY0MzcKK21zZ2lkICJjb250YWluaW5nOiIKK21zZ3N0ciAi5ZCr44KAOiIKKworIzogZ2l0azoyMDg5IGdpdGs6MzE2NCBnaXRrOjMxNjkgZ2l0azo0MzY4Cittc2dpZCAidG91Y2hpbmcgcGF0aHM6IgorbXNnc3RyICLjg5Hjgrnjga7kuIDpg6g6IgorCisjOiBnaXRrOjIwOTAgZ2l0azo0MzczCittc2dpZCAiYWRkaW5nL3JlbW92aW5nIHN0cmluZzoiCittc2dzdHIgIui/veWKoC/pmaTljrvjgZnjgovmloflrZfliJc6IgorCisjOiBnaXRrOjIwOTkgZ2l0azoyMTAxCittc2dpZCAiRXhhY3QiCittc2dzdHIgIuiLseWtl+OBruWkp+Wwj+OCkuWMuuWIpeOBmeOCiyIKKworIzogZ2l0azoyMTAxIGdpdGs6NDQ0OCBnaXRrOjYyNDkKK21zZ2lkICJJZ25DYXNlIgorbXNnc3RyICLoi7HlrZfjga7lpKflsI/jgpLljLrliKXjgZfjgarjgYQiCisKKyM6IGdpdGs6MjEwMSBnaXRrOjQzNDIgZ2l0azo0NDQ2IGdpdGs6NjI0NQorbXNnaWQgIlJlZ2V4cCIKK21zZ3N0ciAi5q2j6KaP6KGo54++IgorCisjOiBnaXRrOjIxMDMgZ2l0azoyMTA0IGdpdGs6NDQ2NyBnaXRrOjQ0OTcgZ2l0azo0NTA0IGdpdGs6NjM3MyBnaXRrOjY0NDEKK21zZ2lkICJBbGwgZmllbGRzIgorbXNnc3RyICLlhajjgabjga7poIXnm64iCisKKyM6IGdpdGs6MjEwNCBnaXRrOjQ0NjUgZ2l0azo0NDk3IGdpdGs6NjMxMgorbXNnaWQgIkhlYWRsaW5lIgorbXNnc3RyICLjg5jjg4Pjg4njg6njgqTjg7MiCisKKyM6IGdpdGs6MjEwNSBnaXRrOjQ0NjUgZ2l0azo2MzEyIGdpdGs6NjQ0MSBnaXRrOjY4NzUKK21zZ2lkICJDb21tZW50cyIKK21zZ3N0ciAi44Kz44Oh44Oz44OIIgorCisjOiBnaXRrOjIxMDUgZ2l0azo0NDY1IGdpdGs6NDQ2OSBnaXRrOjQ1MDQgZ2l0azo2MzEyIGdpdGs6NjgxMCBnaXRrOjgwOTEKKyM6IGdpdGs6ODEwNgorbXNnaWQgIkF1dGhvciIKK21zZ3N0ciAi5L2c6ICFIgorCisjOiBnaXRrOjIxMDUgZ2l0azo0NDY1IGdpdGs6NjMxMiBnaXRrOjY4MTIKK21zZ2lkICJDb21taXR0ZXIiCittc2dzdHIgIuOCs+ODn+ODg+ODiOiAhSIKKworIzogZ2l0azoyMTM0Cittc2dpZCAiU2VhcmNoIgorbXNnc3RyICLmpJzntKIiCisKKyM6IGdpdGs6MjE0MQorbXNnaWQgIkRpZmYiCittc2dzdHIgIkRpZmYiCisKKyM6IGdpdGs6MjE0MworbXNnaWQgIk9sZCB2ZXJzaW9uIgorbXNnc3RyICLml6fjg5Djg7zjgrjjg6fjg7MiCisKKyM6IGdpdGs6MjE0NQorbXNnaWQgIk5ldyB2ZXJzaW9uIgorbXNnc3RyICLmlrDjg5Djg7zjgrjjg6fjg7MiCisKKyM6IGdpdGs6MjE0NworbXNnaWQgIkxpbmVzIG9mIGNvbnRleHQiCittc2dzdHIgIuaWh+iEiOihjOaVsCIKKworIzogZ2l0azoyMTU3Cittc2dpZCAiSWdub3JlIHNwYWNlIGNoYW5nZSIKK21zZ3N0ciAi56m655m944Gu6YGV44GE44KS54Sh6KaWIgorCisjOiBnaXRrOjIyMTUKK21zZ2lkICJQYXRjaCIKK21zZ3N0ciAi44OR44OD44OBIgorCisjOiBnaXRrOjIyMTcKK21zZ2lkICJUcmVlIgorbXNnc3RyICLjg4Tjg6rjg7wiCisKKyM6IGdpdGs6MjM2MSBnaXRrOjIzNzgKK21zZ2lkICJEaWZmIHRoaXMgLT4gc2VsZWN0ZWQiCittc2dzdHIgIuOBk+OCjOOBqOmBuOaKnuOBl+OBn+OCs+ODn+ODg+ODiOOBrmRpZmbjgpLopovjgosiCisKKyM6IGdpdGs6MjM2MiBnaXRrOjIzNzkKK21zZ2lkICJEaWZmIHNlbGVjdGVkIC0+IHRoaXMiCittc2dzdHIgIumBuOaKnuOBl+OBn+OCs+ODn+ODg+ODiOOBqOOBk+OCjOOBrmRpZmbjgpLopovjgosiCisKKyM6IGdpdGs6MjM2MyBnaXRrOjIzODAKK21zZ2lkICJNYWtlIHBhdGNoIgorbXNnc3RyICLjg5Hjg4Pjg4HkvZzmiJAiCisKKyM6IGdpdGs6MjM2NCBnaXRrOjg0OTcKK21zZ2lkICJDcmVhdGUgdGFnIgorbXNnc3RyICLjgr/jgrDnlJ/miJAiCisKKyM6IGdpdGs6MjM2NSBnaXRrOjg2MDMKK21zZ2lkICJXcml0ZSBjb21taXQgdG8gZmlsZSIKK21zZ3N0ciAi44Kz44Of44OD44OI44KS44OV44Kh44Kk44Or44Gr5pu444GN5Ye644GZIgorCisjOiBnaXRrOjIzNjYgZ2l0azo4NjYwCittc2dpZCAiQ3JlYXRlIG5ldyBicmFuY2giCittc2dzdHIgIuaWsOimj+ODluODqeODs+ODgeeUn+aIkCIKKworIzogZ2l0azoyMzY3Cittc2dpZCAiQ2hlcnJ5LXBpY2sgdGhpcyBjb21taXQiCittc2dzdHIgIuOBk+OBruOCs+ODn+ODg+ODiOOCkuODgeOCp+ODquODvOODlOODg+OCr+OBmeOCiyIKKworIzogZ2l0azoyMzY4Cittc2dpZCAiUmVzZXQgSEVBRCBicmFuY2ggdG8gaGVyZSIKK21zZ3N0ciAi44OW44Op44Oz44OB44GuSEVBROOCkuOBk+OBk+OBq+ODquOCu+ODg+ODiOOBmeOCiyIKKworIzogZ2l0azoyMzY5Cittc2dpZCAiTWFyayB0aGlzIGNvbW1pdCIKK21zZ3N0ciAi44GT44Gu44Kz44Of44OD44OI44Gr44Oe44O844Kv44KS44Gk44GR44KLIgorCisjOiBnaXRrOjIzNzAKK21zZ2lkICJSZXR1cm4gdG8gbWFyayIKK21zZ3N0ciAi44Oe44O844Kv44KS5LuY44GR44Gf5omA44Gr5oi744KLIgorCisjOiBnaXRrOjIzNzEKK21zZ2lkICJGaW5kIGRlc2NlbmRhbnQgb2YgdGhpcyBhbmQgbWFyayIKK21zZ3N0ciAi44GT44KM44Go44Oe44O844Kv44KS44Gk44GR44Gf5omA44Go44Gu5a2Q5a2r44KS6KaL44Gk44GR44KLIgorCisjOiBnaXRrOjIzNzIKK21zZ2lkICJDb21wYXJlIHdpdGggbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAi44Oe44O844Kv44KS5LuY44GR44Gf44Kz44Of44OD44OI44Go5q+U6LyD44GZ44KLIgorCisjOiBnaXRrOjIzODYKK21zZ2lkICJDaGVjayBvdXQgdGhpcyBicmFuY2giCittc2dzdHIgIuOBk+OBruODluODqeODs+ODgeOCkuODgeOCp+ODg+OCr+OCouOCpuODiOOBmeOCiyIKKworIzogZ2l0azoyMzg3Cittc2dpZCAiUmVtb3ZlIHRoaXMgYnJhbmNoIgorbXNnc3RyICLjgZPjga7jg5bjg6njg7Pjg4HjgpLpmaTljrvjgZnjgosiCisKKyM6IGdpdGs6MjM5NAorbXNnaWQgIkhpZ2hsaWdodCB0aGlzIHRvbyIKK21zZ3N0ciAi44GT44KM44KC44OP44Kk44Op44Kk44OI44GV44Gb44KLIgorCisjOiBnaXRrOjIzOTUKK21zZ2lkICJIaWdobGlnaHQgdGhpcyBvbmx5IgorbXNnc3RyICLjgZPjgozjgaDjgZHjgpLjg4/jgqTjg6njgqTjg4jjgZXjgZvjgosiCisKKyM6IGdpdGs6MjM5NgorbXNnaWQgIkV4dGVybmFsIGRpZmYiCittc2dzdHIgIuWklumDqGRpZmbjg4Tjg7zjg6siCisKKyM6IGdpdGs6MjM5NworbXNnaWQgIkJsYW1lIHBhcmVudCBjb21taXQiCittc2dzdHIgIuimquOCs+ODn+ODg+ODiOOBi+OCiSBibGFtZSDjgpLjgYvjgZHjgosiCisKKyM6IGdpdGs6MjQwNAorbXNnaWQgIlNob3cgb3JpZ2luIG9mIHRoaXMgbGluZSIKK21zZ3N0ciAi44GT44Gu6KGM44Gu5Ye66Ieq44KS6KGo56S644GZ44KLIgorCisjOiBnaXRrOjI0MDUKK21zZ2lkICJSdW4gZ2l0IGd1aSBibGFtZSBvbiB0aGlzIGxpbmUiCittc2dzdHIgIuOBk+OBruihjOOBqyBnaXQgZ3VpIOOBpyBibGFtZSDjgpLjgYvjgZHjgosiCisKKyM6IGdpdGs6MjY1OAorbXNnaWQgIiIKKyJcbiIKKyJHaXRrIC0gYSBjb21taXQgdmlld2VyIGZvciBnaXRcbiIKKyJcbiIKKyJDb3B5cmlnaHQgwqkgMjAwNS0yMDA4IFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKK21zZ3N0ciAiIgorIlxuIgorIkdpdGsgLSBnaXTjgrPjg5/jg4Pjg4jjg5Pjg6Xjg7zjgqJcbiIKKyJcbiIKKyJDb3B5cmlnaHQgwqkgMjAwNS0yMDA4IFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisi5L2/55So44GK44KI44Gz5YaN6YWN5biD44GvIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIOOBq+W+k+OBo+OBpuOBj+OBoOOBleOBhCIKKworIzogZ2l0azoyNjY2IGdpdGs6MjcyOCBnaXRrOjkwMjUKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAi6ZaJ44GY44KLIgorCisjOiBnaXRrOjI2ODUKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5ncyIKK21zZ3N0ciAiR2l0ayDjgq3jg7zjg5DjgqTjg7Pjg4fjgqPjg7PjgrAiCisKKyM6IGdpdGs6MjY4OAorbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzOiIKK21zZ3N0ciAiR2l0ayDjgq3jg7zjg5DjgqTjg7Pjg4fjgqPjg7PjgrA6IgorCisjOiBnaXRrOjI2OTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUT5cdFx0UXVpdCIKK21zZ3N0ciAiPCVzLVE+XHRcdOe1guS6hiIKKworIzogZ2l0azoyNjkxCittc2dpZCAiPEhvbWU+XHRcdE1vdmUgdG8gZmlyc3QgY29tbWl0IgorbXNnc3RyICI8SG9tZT5cdFx05pyA5Yid44Gu44Kz44Of44OD44OI44Gr56e75YuVIgorCisjOiBnaXRrOjI2OTIKK21zZ2lkICI8RW5kPlx0XHRNb3ZlIHRvIGxhc3QgY29tbWl0IgorbXNnc3RyICI8RW5kPlx0XHTmnIDlvozjga7jgrPjg5/jg4Pjg4jjgavnp7vli5UiCisKKyM6IGdpdGs6MjY5MworbXNnaWQgIjxVcD4sIHAsIGlcdE1vdmUgdXAgb25lIGNvbW1pdCIKK21zZ3N0ciAiPFVwPiwgcCwgaVx05LiA44Gk5LiK44Gu44Kz44Of44OD44OI44Gr56e75YuVIgorCisjOiBnaXRrOjI2OTQKK21zZ2lkICI8RG93bj4sIG4sIGtcdE1vdmUgZG93biBvbmUgY29tbWl0IgorbXNnc3RyICI8RG93bj4sIG4sIGtcdOS4gOOBpOS4i+OBruOCs+ODn+ODg+ODiOOBq+enu+WLlSIKKworIzogZ2l0azoyNjk1Cittc2dpZCAiPExlZnQ+LCB6LCBqXHRHbyBiYWNrIGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPExlZnQ+LCB6LCBqXHTlsaXmrbTjga7liY3jgavmiLvjgosiCisKKyM6IGdpdGs6MjY5NgorbXNnaWQgIjxSaWdodD4sIHgsIGxcdEdvIGZvcndhcmQgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8UmlnaHQ+LCB4LCBsXHTlsaXmrbTjga7mrKHjgbjpgLLjgoAiCisKKyM6IGdpdGs6MjY5NworbXNnaWQgIjxQYWdlVXA+XHRNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8UGFnZVVwPlx044Kz44Of44OD44OI44Oq44K544OI44Gu5LiA44Gk5LiK44Gu44Oa44O844K444Gr56e75YuVIgorCisjOiBnaXRrOjI2OTgKK21zZ2lkICI8UGFnZURvd24+XHRNb3ZlIGRvd24gb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxQYWdlRG93bj5cdOOCs+ODn+ODg+ODiOODquOCueODiOOBruS4gOOBpOS4i+OBruODmuODvOOCuOOBq+enu+WLlSIKKworIzogZ2l0azoyNjk5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUhvbWU+XHRTY3JvbGwgdG8gdG9wIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtSG9tZT5cdOOCs+ODn+ODg+ODiOODquOCueODiOOBruS4gOeVquS4iuOBq+OCueOCr+ODreODvOODq+OBmeOCiyIKKworIzogZ2l0azoyNzAwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUVuZD5cdFNjcm9sbCB0byBib3R0b20gb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1FbmQ+XHTjgrPjg5/jg4Pjg4jjg6rjgrnjg4jjga7kuIDnlarkuIvjgavjgrnjgq/jg63jg7zjg6vjgZnjgosiCisKKyM6IGdpdGs6MjcwMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1VcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLVVwPlx044Kz44Of44OD44OI44Oq44K544OI44Gu5LiA44Gk5LiL44Gu6KGM44Gr44K544Kv44Ot44O844Or44GZ44KLIgorCisjOiBnaXRrOjI3MDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtRG93bj5cdOOCs+ODn+ODg+ODiOODquOCueODiOOBruS4gOOBpOS4i+OBruihjOOBq+OCueOCr+ODreODvOODq+OBmeOCiyIKKworIzogZ2l0azoyNzAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VVcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VVcD5cdOOCs+ODn+ODg+ODiOODquOCueODiOOBruS4iuOBruODmuODvOOCuOOBq+OCueOCr+ODreODvOODq+OBmeOCiyIKKworIzogZ2l0azoyNzA0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VEb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjwlcy1QYWdlRG93bj5cdOOCs+ODn+ODg+ODiOODquOCueODiOOBruS4i+OBruODmuODvOOCuOOBq+OCueOCr+ODreODvOODq+OBmeOCiyIKKworIzogZ2l0azoyNzA1Cittc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgorbXNnc3RyICI8U2hpZnQtVXA+XHTlvozmlrnjgpLmpJzntKIgKOS4iuaWueOBruODu+aWsOOBl+OBhOOCs+ODn+ODg+ODiCkiCisKKyM6IGdpdGs6MjcwNgorbXNnaWQgIjxTaGlmdC1Eb3duPlx0RmluZCBmb3J3YXJkcyAoZG93bndhcmRzLCBlYXJsaWVyIGNvbW1pdHMpIgorbXNnc3RyICI8U2hpZnQtRG93bj5cdOWJjeaWueOCkuaknOe0ou+8iOS4i+aWueOBruODu+WPpOOBhOOCs+ODn+ODg+ODiO+8iSIKKworIzogZ2l0azoyNzA3Cittc2dpZCAiPERlbGV0ZT4sIGJcdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxEZWxldGU+LCBiXHRkaWZm55S76Z2i44KS5LiK44Gu44Oa44O844K444Gr44K544Kv44Ot44O844Or44GZ44KLIgorCisjOiBnaXRrOjI3MDgKK21zZ2lkICI8QmFja3NwYWNlPlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPEJhY2tzcGFjZT5cdGRpZmbnlLvpnaLjgpLkuIrjga7jg5rjg7zjgrjjgavjgrnjgq/jg63jg7zjg6vjgZnjgosiCisKKyM6IGdpdGs6MjcwOQorbXNnaWQgIjxTcGFjZT5cdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8U3BhY2U+XHRcdGRpZmbnlLvpnaLjgpLkuIvjga7jg5rjg7zjgrjjgavjgrnjgq/jg63jg7zjg6vjgZnjgosiCisKKyM6IGdpdGs6MjcxMAorbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKK21zZ3N0ciAidVx0XHRkaWZm55S76Z2i44KS5LiK44GrMTjooYzjgrnjgq/jg63jg7zjg6vjgZnjgosiCisKKyM6IGdpdGs6MjcxMQorbXNnaWQgImRcdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIDE4IGxpbmVzIgorbXNnc3RyICJkXHRcdGRpZmbnlLvpnaLjgpLkuIvjgasxOOihjOOCueOCr+ODreODvOODq+OBmeOCiyIKKworIzogZ2l0azoyNzEyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUY+XHRcdEZpbmQiCittc2dzdHIgIjwlcy1GPlx0XHTmpJzntKIiCisKKyM6IGdpdGs6MjcxMworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1HPlx0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjwlcy1HPlx0XHTmrKHjgpLmpJzntKLjgZfjgabnp7vli5UiCisKKyM6IGdpdGs6MjcxNAorbXNnaWQgIjxSZXR1cm4+XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjxSZXR1cm4+XHTmrKHjgpLmpJzntKLjgZfjgabnp7vli5UiCisKKyM6IGdpdGs6MjcxNQorbXNnaWQgIi9cdFx0Rm9jdXMgdGhlIHNlYXJjaCBib3giCittc2dzdHIgIi9cdFx05qSc57Si44Oc44OD44Kv44K544Gr44OV44Kp44O844Kr44K5IgorCisjOiBnaXRrOjI3MTYKK21zZ2lkICI/XHRcdE1vdmUgdG8gcHJldmlvdXMgZmluZCBoaXQiCittc2dzdHIgIj9cdFx05YmN44KS5qSc57Si44GX44Gm56e75YuVIgorCisjOiBnaXRrOjI3MTcKK21zZ2lkICJmXHRcdFNjcm9sbCBkaWZmIHZpZXcgdG8gbmV4dCBmaWxlIgorbXNnc3RyICJmXHRcdOasoeOBruODleOCoeOCpOODq+OBq2RpZmbnlLvpnaLjgpLjgrnjgq/jg63jg7zjg6vjgZnjgosiCisKKyM6IGdpdGs6MjcxOAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1TPlx0XHRTZWFyY2ggZm9yIG5leHQgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVM+XHRcdGRpZmbnlLvpnaLjga7mrKHjgpLmpJzntKIiCisKKyM6IGdpdGs6MjcxOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1SPlx0XHRTZWFyY2ggZm9yIHByZXZpb3VzIGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1SPlx0XHRkaWZm55S76Z2i44Gu5YmN44KS5qSc57SiIgorCisjOiBnaXRrOjI3MjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1ArPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtS1ArPlx05paH5a2X44K144Kk44K644KS5ouh5aSnIgorCisjOiBnaXRrOjI3MjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtcGx1cz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLXBsdXM+XHTmloflrZfjgrXjgqTjgrrjgpLmi6HlpKciCisKKyM6IGdpdGs6MjcyMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUC0+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1LUC0+XHTmloflrZfjgrXjgqTjgrrjgpLnuK7lsI8iCisKKyM6IGdpdGs6MjcyMworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1taW51cz5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLW1pbnVzPlx05paH5a2X44K144Kk44K644KS57iu5bCPIgorCisjOiBnaXRrOjI3MjQKK21zZ2lkICI8RjU+XHRcdFVwZGF0ZSIKK21zZ3N0ciAiPEY1Plx0XHTmm7TmlrAiCisKKyM6IGdpdGs6MzE3OSBnaXRrOjMxODgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiIKK21zZ3N0ciAi5LiA5pmC44OH44Kj44Os44Kv44OI44OqICVzIOeUn+aIkOaZguOCqOODqeODvDoiCisKKyM6IGdpdGs6MzIwMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGdldHRpbmcgXCIlc1wiIGZyb20gJXM6IgorbXNnc3RyICJcIiVzXCIg44Gu44Ko44Op44O844GMICVzIOOBq+eZuueUnzoiCisKKyM6IGdpdGs6MzI2NAorbXNnaWQgImNvbW1hbmQgZmFpbGVkOiIKK21zZ3N0ciAi44Kz44Oe44Oz44OJ5aSx5pWXOiIKKworIzogZ2l0azozNDEwCittc2dpZCAiTm8gc3VjaCBjb21taXQiCittc2dzdHIgIuOBneOBruOCiOOBhuOBquOCs+ODn+ODg+ODiOOBr+OBguOCiuOBvuOBm+OCkyIKKworIzogZ2l0azozNDI0Cittc2dpZCAiZ2l0IGd1aSBibGFtZTogY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICJnaXQgZ3VpIGJsYW1lOiDjgrPjg57jg7Pjg4nlpLHmlZc6IgorCisjOiBnaXRrOjM0NTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCByZWFkIG1lcmdlIGhlYWQ6ICVzIgorbXNnc3RyICLjg57jg7zjgrjjgZnjgosgSEVBRCDjgpLoqq3jgb/ovrzjgoHjgb7jgZvjgpM6ICVzIgorCisjOiBnaXRrOjM0NjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGluZGV4OiAlcyIKK21zZ3N0ciAi44Kk44Oz44OH44OD44Kv44K56Kqt44G/6L6844G/44Ko44Op44O8OiAlcyIKKworIzogZ2l0azozNDg4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3Qgc3RhcnQgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAiZ2l0IGJsYW1lIOOCkuWni+OCgeOCieOCjOOBvuOBm+OCkzogJXMiCisKKyM6IGdpdGs6MzQ5MSBnaXRrOjYyODAKK21zZ2lkICJTZWFyY2hpbmciCittc2dzdHIgIuaknOe0ouS4rSIKKworIzogZ2l0azozNTIzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcnVubmluZyBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICJnaXQgYmxhbWUg5a6f6KGM44Ko44Op44O8OiAlcyIKKworIzogZ2l0azozNTUxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGhhdCBsaW5lIGNvbWVzIGZyb20gY29tbWl0ICVzLCAgd2hpY2ggaXMgbm90IGluIHRoaXMgdmlldyIKK21zZ3N0ciAi44Kz44Of44OD44OIICVzIOOBq+eUseadpeOBmeOCi+OBneOBruihjOOBr+OAgeOBk+OBruODk+ODpeODvOOBq+ihqOekuuOBleOCjOOBpuOBhOOBvuOBm+OCkyIKKworIzogZ2l0azozNTY1Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiB2aWV3ZXIgZmFpbGVkOiIKK21zZ3N0ciAi5aSW6YOoZGlmZuODk+ODpeODvOOCouOBjOWkseaVlzoiCisKKyM6IGdpdGs6MzY4MworbXNnaWQgIkdpdGsgdmlldyBkZWZpbml0aW9uIgorbXNnc3RyICJHaXRrIOODk+ODpeODvOWumue+qSIKKworIzogZ2l0azozNjg3Cittc2dpZCAiUmVtZW1iZXIgdGhpcyB2aWV3IgorbXNnc3RyICLjgZPjga7jg5Pjg6Xjg7zjgpLoqJjmhrbjgZnjgosiCisKKyM6IGdpdGs6MzY4OAorbXNnaWQgIlJlZmVyZW5jZXMgKHNwYWNlIHNlcGFyYXRlZCBsaXN0KToiCittc2dzdHIgIuODquODleOCoeODrOODs+OCue+8iOOCueODmuODvOOCueWMuuWIh+OCiuOBruODquOCueODiO+8iToiCisKKyM6IGdpdGs6MzY4OQorbXNnaWQgIkJyYW5jaGVzICYgdGFnczoiCittc2dzdHIgIuODluODqeODs+ODge+8huOCv+OCsDoiCisKKyM6IGdpdGs6MzY5MAorbXNnaWQgIkFsbCByZWZzIgorbXNnc3RyICLlhajjgabjga7jg6rjg5XjgqHjg6zjg7PjgrkiCisKKyM6IGdpdGs6MzY5MQorbXNnaWQgIkFsbCAobG9jYWwpIGJyYW5jaGVzIgorbXNnc3RyICLlhajjgabjga7vvIjjg63jg7zjgqvjg6vjgarvvInjg5bjg6njg7Pjg4EiCisKKyM6IGdpdGs6MzY5MgorbXNnaWQgIkFsbCB0YWdzIgorbXNnc3RyICLlhajjgabjga7jgr/jgrAiCisKKyM6IGdpdGs6MzY5MworbXNnaWQgIkFsbCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgIuWFqOOBpuOBruODquODouODvOODiOi/vei3oeODluODqeODs+ODgSIKKworIzogZ2l0azozNjk0Cittc2dpZCAiQ29tbWl0IEluZm8gKHJlZ3VsYXIgZXhwcmVzc2lvbnMpOiIKK21zZ3N0ciAi44Kz44Of44OD44OI5oOF5aCx77yI5q2j6KaP6KGo54++77yJOiIKKworIzogZ2l0azozNjk1Cittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAi5L2c6ICFOiIKKworIzogZ2l0azozNjk2Cittc2dpZCAiQ29tbWl0dGVyOiIKK21zZ3N0ciAi44Kz44Of44OD44OI6ICFOiIKKworIzogZ2l0azozNjk3Cittc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICLjgrPjg5/jg4Pjg4jjg6Hjg4Pjgrvjg7zjgrg6IgorCisjOiBnaXRrOjM2OTgKK21zZ2lkICJNYXRjaGVzIGFsbCBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAi44Kz44Of44OD44OI5oOF5aCx44Gu5YWo44Gm44Gu5p2h5Lu244Gr5LiA6Ie0IgorCisjOiBnaXRrOjM2OTkKK21zZ2lkICJDaGFuZ2VzIHRvIEZpbGVzOiIKK21zZ3N0ciAi5aSJ5pu044GX44Gf44OV44Kh44Kk44OrOiIKKworIzogZ2l0azozNzAwCittc2dpZCAiRml4ZWQgU3RyaW5nIgorbXNnc3RyICLlm7rlrprmloflrZfliJciCisKKyM6IGdpdGs6MzcwMQorbXNnaWQgIlJlZ3VsYXIgRXhwcmVzc2lvbiIKK21zZ3N0ciAi5q2j6KaP6KGo54++IgorCisjOiBnaXRrOjM3MDIKK21zZ2lkICJTZWFyY2ggc3RyaW5nOiIKK21zZ3N0ciAi5qSc57Si5paH5a2X5YiXOiIKKworIzogZ2l0azozNzAzCittc2dpZCAiIgorIkNvbW1pdCBEYXRlcyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAiCisiMTU6Mjc6MzhcIik6IgorbXNnc3RyICIiCisi44Kz44Of44OD44OI5pel5pmCIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5ICIKKyIxNToyNzozOFwiKToiCisKKyM6IGdpdGs6MzcwNAorbXNnaWQgIlNpbmNlOiIKK21zZ3N0ciAi5pyf6ZaT44Gu5aeL44KBOiIKKworIzogZ2l0azozNzA1Cittc2dpZCAiVW50aWw6IgorbXNnc3RyICLmnJ/plpPjga7ntYLjgo/jgoo6IgorCisjOiBnaXRrOjM3MDYKK21zZ2lkICJMaW1pdCBhbmQvb3Igc2tpcCBhIG51bWJlciBvZiByZXZpc2lvbnMgKHBvc2l0aXZlIGludGVnZXIpOiIKK21zZ3N0ciAi5Yi26ZmQ44O755yB55Wl44GZ44KL44Oq44OT44K444On44Oz44Gu5pWw77yI5q2j44Gu5pW05pWw77yJOiIKKworIzogZ2l0azozNzA3Cittc2dpZCAiTnVtYmVyIHRvIHNob3c6IgorbXNnc3RyICLooajnpLrjgZnjgovmlbA6IgorCisjOiBnaXRrOjM3MDgKK21zZ2lkICJOdW1iZXIgdG8gc2tpcDoiCittc2dzdHIgIuecgeeVpeOBmeOCi+aVsDoiCisKKyM6IGdpdGs6MzcwOQorbXNnaWQgIk1pc2NlbGxhbmVvdXMgb3B0aW9uczoiCittc2dzdHIgIuOBneOBruS7luOBruOCquODl+OCt+ODp+ODszoiCisKKyM6IGdpdGs6MzcxMAorbXNnaWQgIlN0cmljdGx5IHNvcnQgYnkgZGF0ZSIKK21zZ3N0ciAi5Y6z5a+G44Gr5pel5LuY6aCG44Gn5Lim44Gz5pu/44GIIgorCisjOiBnaXRrOjM3MTEKK21zZ2lkICJNYXJrIGJyYW5jaCBzaWRlcyIKK21zZ3N0ciAi5YG05p6d44Oe44O844KvIgorCisjOiBnaXRrOjM3MTIKK21zZ2lkICJMaW1pdCB0byBmaXJzdCBwYXJlbnQiCittc2dzdHIgIuacgOWIneOBruimquOBq+WItumZkCIKKworIzogZ2l0azozNzEzCittc2dpZCAiU2ltcGxlIGhpc3RvcnkiCittc2dzdHIgIuewoeaYk+OBquWxpeattCIKKworIzogZ2l0azozNzE0Cittc2dpZCAiQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gZ2l0IGxvZzoiCittc2dzdHIgImdpdCBsb2cg44G444Gu6L+95Yqg44Gu5byV5pWwOiIKKworIzogZ2l0azozNzE1Cittc2dpZCAiRW50ZXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUsIG9uZSBwZXIgbGluZToiCittc2dzdHIgIuWQq+OBvuOCjOOCi+ODleOCoeOCpOODq+ODu+ODh+OCo+ODrOOCr+ODiOODquOCkuS4gOihjOOBlOOBqOOBq+WFpeWKmzoiCisKKyM6IGdpdGs6MzcxNgorbXNnaWQgIkNvbW1hbmQgdG8gZ2VuZXJhdGUgbW9yZSBjb21taXRzIHRvIGluY2x1ZGU6IgorbXNnc3RyICLjgrPjg5/jg4Pjg4jov73liqDjgrPjg57jg7Pjg4k6IgorCisjOiBnaXRrOjM4MzgKK21zZ2lkICJHaXRrOiBlZGl0IHZpZXciCittc2dzdHIgIkdpdGs6IOODk+ODpeODvOe3qOmbhiIKKworIzogZ2l0azozODQ2Cittc2dpZCAiLS0gY3JpdGVyaWEgZm9yIHNlbGVjdGluZyByZXZpc2lvbnMiCittc2dzdHIgIuKAlSDjg6rjg5Pjgrjjg6fjg7Pjga7pgbjmip7mnaHku7YiCisKKyM6IGdpdGs6Mzg1MQorbXNnaWQgIlZpZXcgTmFtZToiCittc2dzdHIgIuODk+ODpeODvOWQjToiCisKKyM6IGdpdGs6MzkyNgorbXNnaWQgIkFwcGx5IChGNSkiCittc2dzdHIgIumBqeeUqCAoRjUpIgorCisjOiBnaXRrOjM5NjQKK21zZ2lkICJFcnJvciBpbiBjb21taXQgc2VsZWN0aW9uIGFyZ3VtZW50czoiCittc2dzdHIgIuOCs+ODn+ODg+ODiOmBuOaKnuW8leaVsOOBruOCqOODqeODvDoiCisKKyM6IGdpdGs6NDAxNyBnaXRrOjQwNjkgZ2l0azo0NTE3IGdpdGs6NDUzMSBnaXRrOjU3OTIgZ2l0azoxMTI2MyBnaXRrOjExMjY0Cittc2dpZCAiTm9uZSIKK21zZ3N0ciAi54Sh44GXIgorCisjOiBnaXRrOjQ0NjUgZ2l0azo2MzEyIGdpdGs6ODA5MyBnaXRrOjgxMDgKK21zZ2lkICJEYXRlIgorbXNnc3RyICLml6Xku5giCisKKyM6IGdpdGs6NDQ2NSBnaXRrOjYzMTIKK21zZ2lkICJDRGF0ZSIKK21zZ3N0ciAi5L2c5oiQ5pelIgorCisjOiBnaXRrOjQ2MTQgZ2l0azo0NjE5Cittc2dpZCAiRGVzY2VuZGFudCIKK21zZ3N0ciAi5a2Q5a2rIgorCisjOiBnaXRrOjQ2MTUKK21zZ2lkICJOb3QgZGVzY2VuZGFudCIKK21zZ3N0ciAi6Z2e5a2Q5a2rIgorCisjOiBnaXRrOjQ2MjIgZ2l0azo0NjI3Cittc2dpZCAiQW5jZXN0b3IiCittc2dzdHIgIuelluWFiCIKKworIzogZ2l0azo0NjIzCittc2dpZCAiTm90IGFuY2VzdG9yIgorbXNnc3RyICLpnZ7npZblhYgiCisKKyM6IGdpdGs6NDkxMworbXNnaWQgIkxvY2FsIGNoYW5nZXMgY2hlY2tlZCBpbiB0byBpbmRleCBidXQgbm90IGNvbW1pdHRlZCIKK21zZ3N0ciAi44K544OG44O844K444GV44KM44Gf44CB44Kz44Of44OD44OI5YmN44Gu44Ot44O844Kr44Or44Gq5aSJ5pu0IgorCisjOiBnaXRrOjQ5NDkKK21zZ2lkICJMb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBub3QgY2hlY2tlZCBpbiB0byBpbmRleCIKK21zZ3N0ciAi44K544OG44O844K444GV44KM44Gm44GE44Gq44GE44CB44Kz44Of44OD44OI5YmN44Gu44Ot44O844Kr44Or44Gq5aSJ5pu0IgorCisjOiBnaXRrOjY2MzAKK21zZ2lkICJtYW55IgorbXNnc3RyICLlpJrmlbAiCisKKyM6IGdpdGs6NjgxNAorbXNnaWQgIlRhZ3M6IgorbXNnc3RyICLjgr/jgrA6IgorCisjOiBnaXRrOjY4MzEgZ2l0azo2ODM3IGdpdGs6ODA4NgorbXNnaWQgIlBhcmVudCIKK21zZ3N0ciAi6KaqIgorCisjOiBnaXRrOjY4NDIKK21zZ2lkICJDaGlsZCIKK21zZ3N0ciAi5a2QIgorCisjOiBnaXRrOjY4NTEKK21zZ2lkICJCcmFuY2giCittc2dzdHIgIuODluODqeODs+ODgSIKKworIzogZ2l0azo2ODU0Cittc2dpZCAiRm9sbG93cyIKK21zZ3N0ciAi5LiL5L2NIgorCisjOiBnaXRrOjY4NTcKK21zZ2lkICJQcmVjZWRlcyIKK21zZ3N0ciAi5LiK5L2NIgorCisjOiBnaXRrOjczNTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIGRpZmZzOiAlcyIKK21zZ3N0ciAiZGlmZuWPluW+l+OCqOODqeODvDogJXMiCisKKyM6IGdpdGs6NzkxNAorbXNnaWQgIkdvdG86IgorbXNnc3RyICJHb3RvOiIKKworIzogZ2l0azo3OTE2Cittc2dpZCAiU0hBMSBJRDoiCittc2dzdHIgIlNIQTEgSUQ6IgorCisjOiBnaXRrOjc5MzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTaG9ydCBTSEExIGlkICVzIGlzIGFtYmlndW91cyIKK21zZ3N0ciAiJXMg44KS5ZCr44KAIFNIQTEgSUQg44Gv6KSH5pWw5a2Y5Zyo44GX44G+44GZIgorCisjOiBnaXRrOjc5NDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIuODquODk+OCuOODp+ODsyAlcyDjga/kuI3mmI7jgafjgZkiCisKKyM6IGdpdGs6Nzk1MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNIQTEgaWQgJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJTSEExIGlkICVzIOOBr+S4jeaYjuOBp+OBmSIKKworIzogZ2l0azo3OTU0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGluIHRoZSBjdXJyZW50IHZpZXciCittc2dzdHIgIuODquODk+OCuOODp+ODsyAlcyDjga/nj77lnKjjga7jg5Pjg6Xjg7zjgavjga/jgYLjgorjgb7jgZvjgpMiCisKKyM6IGdpdGs6ODA5NgorbXNnaWQgIkNoaWxkcmVuIgorbXNnc3RyICLlrZAiCisKKyM6IGdpdGs6ODE1MworIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0ICVzIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICIlcyDjg5bjg6njg7Pjg4HjgpLjgZPjgZPjgavjg6rjgrvjg4Pjg4jjgZnjgosiCisKKyM6IGdpdGs6ODE1NQorbXNnaWQgIkRldGFjaGVkIGhlYWQ6IGNhbid0IHJlc2V0IgorbXNnc3RyICLliIfjgorpm6LjgZXjgozjgZ9IRUFEOiDjg6rjgrvjg4Pjg4jjgafjgY3jgb7jgZvjgpMiCisKKyM6IGdpdGs6ODI2NCBnaXRrOjgyNzAKK21zZ2lkICJTa2lwcGluZyBtZXJnZSBjb21taXQgIgorbXNnc3RyICLjgrPjg5/jg4Pjg4jjg57jg7zjgrjjgpLjgrnjgq3jg4Pjg5c6ICIKKworIzogZ2l0azo4Mjc5IGdpdGs6ODI4NAorbXNnaWQgIkVycm9yIGdldHRpbmcgcGF0Y2ggSUQgZm9yICIKK21zZ3N0ciAi44OR44OD44OB5Y+W5b6X44Ko44Op44O8OiBJRCAiCisKKyM6IGdpdGs6ODI4MCBnaXRrOjgyODUKK21zZ2lkICIgLSBzdG9wcGluZ1xuIgorbXNnc3RyICIgLSDlgZzmraJcbiIKKworIzogZ2l0azo4MjkwIGdpdGs6ODI5MyBnaXRrOjgzMDEgZ2l0azo4MzE0IGdpdGs6ODMyMworbXNnaWQgIkNvbW1pdCAiCittc2dzdHIgIuOCs+ODn+ODg+ODiCAiCisKKyM6IGdpdGs6ODI5NAorbXNnaWQgIiIKKyIgaXMgdGhlIHNhbWUgcGF0Y2ggYXNcbiIKKyIgICAgICAgIgorbXNnc3RyICIiCisiIOOBr+S4i+iomOOBruODkeODg+ODgeOBqOWQjOetiVxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6ODMwMgorbXNnaWQgIiIKKyIgZGlmZmVycyBmcm9tXG4iCisiICAgICAgICIKK21zZ3N0ciAiIgorIiDkuIvoqJjjgYvjgonjga5kaWZmXG4iCisiICAgICAgICIKKworIzogZ2l0azo4MzA0Cittc2dpZCAiIgorIkRpZmYgb2YgY29tbWl0czpcbiIKKyJcbiIKK21zZ3N0ciAiIgorIuOCs+ODn+ODg+ODiOOBrmRpZmY6XG4iCisiXG4iCisKKyM6IGdpdGs6ODMxNSBnaXRrOjgzMjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiIOOBq+OBryAlcyDjga7lrZDjgYzjgYLjgorjgb7jgZkgLSDlgZzmraJcbiIKKworIzogZ2l0azo4MzQ0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQgdG8gZmlsZTogJXMiCittc2dzdHIgIuODleOCoeOCpOODq+OBuOOBruOCs+ODn+ODg+ODiOabuOOBjeWHuuOBl+OCqOODqeODvDogJXMiCisKKyM6IGdpdGs6ODM1MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGRpZmZpbmcgY29tbWl0czogJXMiCittc2dzdHIgIuOCs+ODn+ODg+ODiOOBrmRpZmblrp/ooYzjgqjjg6njg7w6ICVzIgorCisjOiBnaXRrOjgzODAKK21zZ2lkICJUb3AiCittc2dzdHIgIlRvcCIKKworIzogZ2l0azo4MzgxCittc2dpZCAiRnJvbSIKK21zZ3N0ciAiRnJvbSIKKworIzogZ2l0azo4Mzg2Cittc2dpZCAiVG8iCittc2dzdHIgIlRvIgorCisjOiBnaXRrOjg0MTAKK21zZ2lkICJHZW5lcmF0ZSBwYXRjaCIKK21zZ3N0ciAi44OR44OD44OB55Sf5oiQIgorCisjOiBnaXRrOjg0MTIKK21zZ2lkICJGcm9tOiIKK21zZ3N0ciAiRnJvbToiCisKKyM6IGdpdGs6ODQyMQorbXNnaWQgIlRvOiIKK21zZ3N0ciAiVG86IgorCisjOiBnaXRrOjg0MzAKK21zZ2lkICJSZXZlcnNlIgorbXNnc3RyICLpgIYiCisKKyM6IGdpdGs6ODQzMiBnaXRrOjg2MTcKK21zZ2lkICJPdXRwdXQgZmlsZToiCittc2dzdHIgIuWHuuWKm+ODleOCoeOCpOODqzoiCisKKyM6IGdpdGs6ODQzOAorbXNnaWQgIkdlbmVyYXRlIgorbXNnc3RyICLnlJ/miJAiCisKKyM6IGdpdGs6ODQ3NgorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHBhdGNoOiIKK21zZ3N0ciAi44OR44OD44OB55Sf5oiQ44Ko44Op44O8OiIKKworIzogZ2l0azo4NDk5IGdpdGs6ODYwNSBnaXRrOjg2NjIKK21zZ2lkICJJRDoiCittc2dzdHIgIklEOiIKKworIzogZ2l0azo4NTA4Cittc2dpZCAiVGFnIG5hbWU6IgorbXNnc3RyICLjgr/jgrDlkI06IgorCisjOiBnaXRrOjg1MTIgZ2l0azo4NjcxCittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICLnlJ/miJAiCisKKyM6IGdpdGs6ODUyOQorbXNnaWQgIk5vIHRhZyBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAi44K/44Kw44Gu5ZCN56ew44GM5oyH5a6a44GV44KM44Gm44GE44G+44Gb44KTIgorCisjOiBnaXRrOjg1MzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUYWcgXCIlc1wiIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICLjgr/jgrAgXCIlc1wiIOOBr+aXouOBq+WtmOWcqOOBl+OBvuOBmSIKKworIzogZ2l0azo4NTM5Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGFnOiIKK21zZ3N0ciAi44K/44Kw55Sf5oiQ44Ko44Op44O8OiIKKworIzogZ2l0azo4NjE0Cittc2dpZCAiQ29tbWFuZDoiCittc2dzdHIgIuOCs+ODnuODs+ODiToiCisKKyM6IGdpdGs6ODYyMgorbXNnaWQgIldyaXRlIgorbXNnc3RyICLmm7jjgY3lh7rjgZciCisKKyM6IGdpdGs6ODY0MAorbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0OiIKK21zZ3N0ciAi44Kz44Of44OD44OI5pu444GN5Ye644GX44Ko44Op44O8OiIKKworIzogZ2l0azo4NjY3Cittc2dpZCAiTmFtZToiCittc2dzdHIgIuWQjeWJjToiCisKKyM6IGdpdGs6ODY5MAorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IGEgbmFtZSBmb3IgdGhlIG5ldyBicmFuY2giCittc2dzdHIgIuaWsOOBl+OBhOODluODqeODs+ODgeOBruWQjeWJjeOCkuaMh+WumuOBl+OBpuOBj+OBoOOBleOBhCIKKworIzogZ2l0azo4Njk1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIE92ZXJ3cml0ZT8iCittc2dzdHIgIuODluODqeODs+ODgSAnJXMnIOOBr+aXouOBq+WtmOWcqOOBl+OBvuOBmeOAguS4iuabuOOBjeOBl+OBvuOBmeOBi++8nyIKKworIzogZ2l0azo4NzYxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZS1hcHBseSBpdD8iCittc2dzdHIgIiIKKyLjgrPjg5/jg4Pjg4ggJXMg44Gv5pei44Gr44OW44Op44Oz44OBICVzIOOBq+WQq+OBvuOCjOOBpuOBhOOBvuOBmSDigJUg5pys5b2T44Gr44GT44KM44KS5YaN6YGp55So44GX44G+44GZ44GL77yfIgorCisjOiBnaXRrOjg3NjYKK21zZ2lkICJDaGVycnktcGlja2luZyIKK21zZ3N0ciAi44OB44Kn44Oq44O844OU44OD44Kv5LitIgorCisjOiBnaXRrOjg3NzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byBmaWxlICclcycuXG4iCisiUGxlYXNlIGNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICIiCisi44OV44Kh44Kk44OrICclcycg44Gu44Ot44O844Kr44Or44Gq5aSJ5pu044Gu44Gf44KB44Gr44OB44Kn44Oq44O844OU44OD44Kv44Gv5aSx5pWX44GX44G+44GX44Gf44CCXG4iCisi44GC44Gq44Gf44Gu5aSJ5pu044GrIGNvbW1pdCwgcmVzZXQsIHN0YXNoIOOBruOBhOOBmuOCjOOBi+OCkuihjOOBo+OBpuOBi+OCieOChOOCiuebtOOBl+OBpuOBj+OBoOOBlSIKKyLjgYTjgIIiCisKKyM6IGdpdGs6ODc4MQorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKKyJEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAiIgorIuODnuODvOOCuOOBruihneeqgeOBq+OCiOOBo+OBpuODgeOCp+ODquODvOODlOODg+OCr+OBr+WkseaVl+OBl+OBvuOBl+OBn+OAglxuIgorIuOBk+OBruino+axuuOBruOBn+OCgeOBqyBnaXQgY2l0b29sIOOCkuWun+ihjOOBl+OBn+OBhOOBp+OBmeOBi++8nyIKKworIzogZ2l0azo4Nzk3Cittc2dpZCAiTm8gY2hhbmdlcyBjb21taXR0ZWQiCittc2dzdHIgIuS9leOBruWkieabtOOCguOCs+ODn+ODg+ODiOOBleOCjOOBpuOBhOOBvuOBm+OCkyIKKworIzogZ2l0azo4ODIzCittc2dpZCAiQ29uZmlybSByZXNldCIKK21zZ3N0ciAi56K66KqN44KS5Y+W44KK5raI44GZIgorCisjOiBnaXRrOjg4MjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCBicmFuY2ggJXMgdG8gJXM/IgorbXNnc3RyICLjg5bjg6njg7Pjg4EgJXMg44KSICVzIOOBq+ODquOCu+ODg+ODiOOBl+OBvuOBmeOBi++8nyIKKworIzogZ2l0azo4ODI5Cittc2dpZCAiUmVzZXQgdHlwZToiCittc2dzdHIgIlJlc2V0IOOCv+OCpOODlzoiCisKKyM6IGdpdGs6ODgzMworbXNnaWQgIlNvZnQ6IExlYXZlIHdvcmtpbmcgdHJlZSBhbmQgaW5kZXggdW50b3VjaGVkIgorbXNnc3RyICJTb2Z0OiDkvZzmpa3jg4Tjg6rjg7zjgoLjgqTjg7Pjg4fjg4Pjgq/jgrnjgoLjgZ3jga7jgb7jgb7jgavjgZnjgosiCisKKyM6IGdpdGs6ODgzNgorbXNnaWQgIk1peGVkOiBMZWF2ZSB3b3JraW5nIHRyZWUgdW50b3VjaGVkLCByZXNldCBpbmRleCIKK21zZ3N0ciAiTWl4ZWQ6IOS9nOalreODhOODquODvOOCkuOBneOBruOBvuOBvuOBq+OBl+OBpuOAgeOCpOODs+ODh+ODg+OCr+OCueOCkuODquOCu+ODg+ODiCIKKworIzogZ2l0azo4ODM5Cittc2dpZCAiIgorIkhhcmQ6IFJlc2V0IHdvcmtpbmcgdHJlZSBhbmQgaW5kZXhcbiIKKyIoZGlzY2FyZCBBTEwgbG9jYWwgY2hhbmdlcykiCittc2dzdHIgIiIKKyJIYXJkOiDkvZzmpa3jg4Tjg6rjg7zjgoTjgqTjg7Pjg4fjg4Pjgq/jgrnjgpLjg6rjgrvjg4Pjg4hcbiIKKyLvvIjjgIzlhajjgabjga7jgI3jg63jg7zjgqvjg6vjgarlpInmm7TjgpLnoLTmo4TvvIkiCisKKyM6IGdpdGs6ODg1NgorbXNnaWQgIlJlc2V0dGluZyIKK21zZ3N0ciAi44Oq44K744OD44OI5LitIgorCisjOiBnaXRrOjg5MTMKK21zZ2lkICJDaGVja2luZyBvdXQiCittc2dzdHIgIuODgeOCp+ODg+OCr+OCouOCpuODiCIKKworIzogZ2l0azo4OTY2Cittc2dpZCAiQ2Fubm90IGRlbGV0ZSB0aGUgY3VycmVudGx5IGNoZWNrZWQtb3V0IGJyYW5jaCIKK21zZ3N0ciAi54++5Zyo44OB44Kn44OD44Kv44Ki44Km44OI44GV44KM44Gm44GE44KL44OW44Op44Oz44OB44KS5YmK6Zmk44GZ44KL44GT44Go44Gv44Gn44GN44G+44Gb44KTIgorCisjOiBnaXRrOjg5NzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGNvbW1pdHMgb24gYnJhbmNoICVzIGFyZW4ndCBvbiBhbnkgb3RoZXIgYnJhbmNoLlxuIgorIlJlYWxseSBkZWxldGUgYnJhbmNoICVzPyIKK21zZ3N0ciAiIgorIuODluODqeODs+ODgSAlcyDjgavjga/ku5bjga7jg5bjg6njg7Pjg4HjgavlrZjlnKjjgZfjgarjgYTjgrPjg5/jg4Pjg4jjgYzjgYLjgorjgb7jgZnjgIJcbiIKKyLmnKzlvZPjgavjg5bjg6njg7Pjg4EgJXMg44KS5YmK6Zmk44GX44G+44GZ44GL77yfIgorCisjOiBnaXRrOjkwMDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUYWdzIGFuZCBoZWFkczogJXMiCittc2dzdHIgIuOCv+OCsOOBqEhFQUQ6ICVzIgorCisjOiBnaXRrOjkwMTgKK21zZ2lkICJGaWx0ZXIiCittc2dzdHIgIuODleOCo+ODq+OCv+ODvCIKKworIzogZ2l0azo5MzEzCittc2dpZCAiIgorIkVycm9yIHJlYWRpbmcgY29tbWl0IHRvcG9sb2d5IGluZm9ybWF0aW9uOyBicmFuY2ggYW5kIHByZWNlZGluZy9mb2xsb3dpbmcgIgorInRhZyBpbmZvcm1hdGlvbiB3aWxsIGJlIGluY29tcGxldGUuIgorbXNnc3RyICIiCisi44Kz44Of44OD44OI5qeL6YCg5oOF5aCx6Kqt44G/6L6844G/44Ko44Op44O8OyDjg5bjg6njg7Pjg4Hlj4rjgbPkuIrkvY0v5LiL5L2N44Gu44K/44Kw5oOF5aCx44GM5LiN5a6M5YWo44Gn44GC44KLIgorIuOCiOOBhuOBp+OBmeOAgiIKKworIzogZ2l0azoxMDI5OQorbXNnaWQgIlRhZyIKK21zZ3N0ciAi44K/44KwIgorCisjOiBnaXRrOjEwMjk5Cittc2dpZCAiSWQiCittc2dzdHIgIklEIgorCisjOiBnaXRrOjEwMzQ3Cittc2dpZCAiR2l0ayBmb250IGNob29zZXIiCittc2dzdHIgIkdpdGsg44OV44Kp44Oz44OI6YG45oqeIgorCisjOiBnaXRrOjEwMzY0Cittc2dpZCAiQiIKK21zZ3N0ciAiQiIKKworIzogZ2l0azoxMDM2NworbXNnaWQgIkkiCittc2dzdHIgIkkiCisKKyM6IGdpdGs6MTA0NjMKK21zZ2lkICJHaXRrIHByZWZlcmVuY2VzIgorbXNnc3RyICJHaXRrIOioreWumiIKKworIzogZ2l0azoxMDQ2NQorbXNnaWQgIkNvbW1pdCBsaXN0IGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAi44Kz44Of44OD44OI44Oq44K544OI6KGo56S644Kq44OX44K344On44OzIgorCisjOiBnaXRrOjEwNDY4Cittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAobGluZXMpIgorbXNnc3RyICLmnIDlpKfjgrDjg6njg5XluYXvvIjnt5rjga7mnKzmlbDvvIkiCisKKyM6IGdpdGs6MTA0NzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoICglIG9mIHBhbmUpIgorbXNnc3RyICLmnIDlpKfjgrDjg6njg5XluYXvvIjjg5rjgqTjg7Pjgavlr77jgZnjgovvvIXvvIkiCisKKyM6IGdpdGs6MTA0NzYKK21zZ2lkICJTaG93IGxvY2FsIGNoYW5nZXMiCittc2dzdHIgIuODreODvOOCq+ODq+OBquWkieabtOOCkuihqOekuiIKKworIzogZ2l0azoxMDQ3OQorbXNnaWQgIkF1dG8tc2VsZWN0IFNIQTEiCittc2dzdHIgIlNIQTEg44Gu6Ieq5YuV6YG45oqeIgorCisjOiBnaXRrOjEwNDgzCittc2dpZCAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgImRpZmbooajnpLrjgqrjg5fjgrfjg6fjg7MiCisKKyM6IGdpdGs6MTA0ODUKK21zZ2lkICJUYWIgc3BhY2luZyIKK21zZ3N0ciAi44K/44OW56m655m95bmFIgorCisjOiBnaXRrOjEwNDg4Cittc2dpZCAiRGlzcGxheSBuZWFyYnkgdGFncyIKK21zZ3N0ciAi6L+R44GP44Gu44K/44Kw44KS6KGo56S644GZ44KLIgorCisjOiBnaXRrOjEwNDkxCittc2dpZCAiSGlkZSByZW1vdGUgcmVmcyIKK21zZ3N0ciAi44Oq44Oi44O844OI44Oq44OV44Kh44Os44Oz44K544KS6Zqg44GZIgorCisjOiBnaXRrOjEwNDk0Cittc2dpZCAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIgorbXNnc3RyICJkaWZmIOOCkuODquOCueODiOOBruODkeOCueOBq+WItumZkCIKKworIzogZ2l0azoxMDQ5NworbXNnaWQgIlN1cHBvcnQgcGVyLWZpbGUgZW5jb2RpbmdzIgorbXNnc3RyICLjg5XjgqHjgqTjg6vjgZTjgajjga7jgqjjg7PjgrPjg7zjg4fjgqPjg7PjgrDjga7jgrXjg53jg7zjg4giCisKKyM6IGdpdGs6MTA1MDMgZ2l0azoxMDU3MgorbXNnaWQgIkV4dGVybmFsIGRpZmYgdG9vbCIKK21zZ3N0ciAi5aSW6YOoZGlmZuODhOODvOODqyIKKworIzogZ2l0azoxMDUwNQorbXNnaWQgIkNob29zZS4uLiIKK21zZ3N0ciAi6YG45oqeLi4uIgorCisjOiBnaXRrOjEwNTEwCittc2dpZCAiQ29sb3JzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgIuiJsjog44Oc44K/44Oz44KS5oq844GX44Gm6YG45oqeIgorCisjOiBnaXRrOjEwNTEzCittc2dpZCAiSW50ZXJmYWNlIgorbXNnc3RyICLjgqTjg7Pjgr/jg7zjg5XjgqfjgqTjgrkiCisKKyM6IGdpdGs6MTA1MTQKK21zZ2lkICJpbnRlcmZhY2UiCittc2dzdHIgIuOCpOODs+OCv+ODvOODleOCp+OCpOOCuSIKKworIzogZ2l0azoxMDUxNworbXNnaWQgIkJhY2tncm91bmQiCittc2dzdHIgIuiDjOaZryIKKworIzogZ2l0azoxMDUxOCBnaXRrOjEwNTQ4Cittc2dpZCAiYmFja2dyb3VuZCIKK21zZ3N0ciAi6IOM5pmvIgorCisjOiBnaXRrOjEwNTIxCittc2dpZCAiRm9yZWdyb3VuZCIKK21zZ3N0ciAi5YmN5pmvIgorCisjOiBnaXRrOjEwNTIyCittc2dpZCAiZm9yZWdyb3VuZCIKK21zZ3N0ciAi5YmN5pmvIgorCisjOiBnaXRrOjEwNTI1Cittc2dpZCAiRGlmZjogb2xkIGxpbmVzIgorbXNnc3RyICJEaWZmOiDml6fjg5Djg7zjgrjjg6fjg7MiCisKKyM6IGdpdGs6MTA1MjYKK21zZ2lkICJkaWZmIG9sZCBsaW5lcyIKK21zZ3N0ciAiZGlmZiDml6fjg5Djg7zjgrjjg6fjg7MiCisKKyM6IGdpdGs6MTA1MzAKK21zZ2lkICJEaWZmOiBuZXcgbGluZXMiCittc2dzdHIgIkRpZmY6IOaWsOODkOODvOOCuOODp+ODsyIKKworIzogZ2l0azoxMDUzMQorbXNnaWQgImRpZmYgbmV3IGxpbmVzIgorbXNnc3RyICJkaWZmIOaWsOODkOODvOOCuOODp+ODsyIKKworIzogZ2l0azoxMDUzNQorbXNnaWQgIkRpZmY6IGh1bmsgaGVhZGVyIgorbXNnc3RyICJEaWZmOiBodW5r44OY44OD44OAIgorCisjOiBnaXRrOjEwNTM3Cittc2dpZCAiZGlmZiBodW5rIGhlYWRlciIKK21zZ3N0ciAiZGlmZiBodW5r44OY44OD44OAIgorCisjOiBnaXRrOjEwNTQxCittc2dpZCAiTWFya2VkIGxpbmUgYmciCittc2dzdHIgIuODnuODvOOCr+ihjOOBruiDjOaZryIKKworIzogZ2l0azoxMDU0MworbXNnaWQgIm1hcmtlZCBsaW5lIGJhY2tncm91bmQiCittc2dzdHIgIuODnuODvOOCr+ihjOOBruiDjOaZryIKKworIzogZ2l0azoxMDU0NworbXNnaWQgIlNlbGVjdCBiZyIKK21zZ3N0ciAi6YG45oqe44Gu6IOM5pmvIgorCisjOiBnaXRrOjEwNTUxCittc2dpZCAiRm9udHM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAi44OV44Kp44Oz44OIOiDjg5zjgr/jg7PjgpLmirzjgZfjgabpgbjmip4iCisKKyM6IGdpdGs6MTA1NTMKK21zZ2lkICJNYWluIGZvbnQiCittc2dzdHIgIuS4u+ODleOCqeODs+ODiCIKKworIzogZ2l0azoxMDU1NAorbXNnaWQgIkRpZmYgZGlzcGxheSBmb250IgorbXNnc3RyICJEaWZm6KGo56S655So44OV44Kp44Oz44OIIgorCisjOiBnaXRrOjEwNTU1Cittc2dpZCAiVXNlciBpbnRlcmZhY2UgZm9udCIKK21zZ3N0ciAiVUnnlKjjg5Xjgqnjg7Pjg4giCisKKyM6IGdpdGs6MTA1ODIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJHaXRrOiBjaG9vc2UgY29sb3IgZm9yICVzIgorbXNnc3RyICJHaXRrOiDjgIwlc+OAjSDjga7oibLjgpLpgbjmip4iCisKKyM6IGdpdGs6MTExNjgKK21zZ2lkICJDYW5ub3QgZmluZCBhIGdpdCByZXBvc2l0b3J5IGhlcmUuIgorbXNnc3RyICLjgZPjgZPjgavjga9naXTjg6rjg53jgrjjg4jjg6rjgYzjgYLjgorjgb7jgZvjgpPjgIIiCisKKyM6IGdpdGs6MTExNzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZmluZCB0aGUgZ2l0IGRpcmVjdG9yeSBcIiVzXCIuIgorbXNnc3RyICJnaXTjg4fjgqPjg6zjgq/jg4jjg6ogXCIlc1wiIOOCkuimi+OBpOOBkeOCieOCjOOBvuOBm+OCk+OAgiIKKworIzogZ2l0azoxMTIxOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZSIKK21zZ3N0ciAi44GC44GE44G+44GE44Gq5byV5pWwICclcyc6IOODquODk+OCuOODp+ODs+OBqOODleOCoeOCpOODq+WQjeOBruS4oeaWueOBq+ino+mHiOOBp+OBjeOBvuOBmSIKKworIzogZ2l0azoxMTIzMQorbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCittc2dzdHIgImdpdGvjgbjjga7kuI3mraPjgarlvJXmlbA6IgorCisjOiBnaXRrOjExMzE2Cittc2dpZCAiQ29tbWFuZCBsaW5lIgorbXNnc3RyICLjgrPjg57jg7Pjg4nooYwiCmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9zdi5wbyBiL2dpdGstZ2l0L3BvL3N2LnBvCmluZGV4IDk0N2I1M2YuLjBmNWUyZmQgMTAwNjQ0Ci0tLSBhL2dpdGstZ2l0L3BvL3N2LnBvCisrKyBiL2dpdGstZ2l0L3BvL3N2LnBvCkBAIC0xLDMyICsxLDQwIEBACiAjIFN3ZWRpc2ggdHJhbnNsYXRpb24gZm9yIGdpdGsKLSMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggUGF1bCBNYWNrZXJyYXMKKyMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgUGF1bCBNYWNrZXJyYXMKICMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdGsgcGFja2FnZS4KICMKLSMgUGV0ZXIgS2FybHNzb24gPHBldGVyQHNvZnR3b2x2ZXMucHAuc2U+LCAyMDA4LgorIyBQZXRlciBLcmVmdGluZyA8cGV0ZXJAc29mdHdvbHZlcy5wcC5zZT4sIDIwMDgtMjAxMC4KICMgTWlrYWVsIE1hZ251c3NvbiA8bWlrYWNodUBnbWFpbC5jb20+LCAyMDA4LgogbXNnaWQgIiIKIG1zZ3N0ciAiIgogIlByb2plY3QtSWQtVmVyc2lvbjogc3ZcbiIKICJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMDgtMTAtMTggMjI6MDMrMTEwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMDgtMDgtMDMgMTk6MDMrMDIwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogTWlrYWVsIE1hZ251c3NvbiA8bWlrYWNodUBnbWFpbC5jb20+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogU3dlZGlzaCA8c3ZAbGkub3JnPlxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEwLTAxLTI4IDEzOjE2KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTAxLTI4IDEzOjQ4KzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFBldGVyIEtyZWZ0aW5nIDxwZXRlckBzb2Z0d29sdmVzLnBwLnNlPlxuIgorIkxhbmd1YWdlLVRlYW06IFN3ZWRpc2ggPHRwLXN2QGxpc3Rvci50cC1zdi5zZT5cbiIKICJNSU1FLVZlcnNpb246IDEuMFxuIgogIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0IgogCi0jOiBnaXRrOjExMworIzogZ2l0azoxMTUKIG1zZ2lkICJDb3VsZG4ndCBnZXQgbGlzdCBvZiB1bm1lcmdlZCBmaWxlczoiCi1tc2dzdHIgIkt1bmRlIGludGEgaMOkbXRhIGxpc3RhIMO2dmVyIGVqIHNhbW1hbnNsYWduYSBmaWxlcjoiCittc2dzdHIgIkt1bmRlIGludGUgaMOkbXRhIGxpc3RhIMO2dmVyIGVqIHNhbW1hbnNsYWduYSBmaWxlcjoiCiAKLSM6IGdpdGs6MzQwCisjOiBnaXRrOjI3NAorbXNnaWQgIkVycm9yIHBhcnNpbmcgcmV2aXNpb25zOiIKK21zZ3N0ciAiRmVsIHZpZCB0b2xrbmluZyBhdiByZXZpc2lvbmVyOiIKKworIzogZ2l0azozMjkKK21zZ2lkICJFcnJvciBleGVjdXRpbmcgLS1hcmdzY21kIGNvbW1hbmQ6IgorbXNnc3RyICJGZWwgdmlkIGvDtnJuaW5nIGF2IC0tYXJnc2NtZC1rb21tYW5kbzoiCisKKyM6IGdpdGs6MzQyCiBtc2dpZCAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyBmaWxlcyBhcmUgdW5tZXJnZWQuIgogbXNnc3RyICIiCiAiSW5nYSBmaWxlciB2YWxkZXM6IC0tbWVyZ2UgYW5nYXZzIG1lbiBkZXQgZmlubnMgaW5nYSBmaWxlciBzb20gaW50ZSBoYXIgIgogInNsYWdpdHMgc2FtbWFuLiIKIAotIzogZ2l0azozNDMKKyM6IGdpdGs6MzQ1CiBtc2dpZCAiIgogIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gdW5tZXJnZWQgZmlsZXMgYXJlIHdpdGhpbiBmaWxlICIKICJsaW1pdC4iCkBAIC0zNCw2OTcgKzQyLDk5MyBAQAogIkluZ2EgZmlsZXIgdmFsZGVzOiAtLW1lcmdlIGFuZ2F2cyBtZW4gZGV0IGZpbm5zIGluZ2EgZmlsZXIgaW5vbSAiCiAiZmlsYmVncsOkbnNuaW5nZW4uIgogCi0jOiBnaXRrOjM2NSBnaXRrOjUwMworIzogZ2l0azozNjcgZ2l0azo1MTQKIG1zZ2lkICJFcnJvciBleGVjdXRpbmcgZ2l0IGxvZzoiCiBtc2dzdHIgIkZlbCB2aWQga8O2cm5pbmcgYXYgZ2l0IGxvZzoiCiAKLSM6IGdpdGs6Mzc4CisjOiBnaXRrOjM4NSBnaXRrOjUzMAogbXNnaWQgIlJlYWRpbmciCiBtc2dzdHIgIkzDpHNlciIKIAotIzogZ2l0azo0MzggZ2l0azozNDYyCisjOiBnaXRrOjQ0NSBnaXRrOjQyNjEKIG1zZ2lkICJSZWFkaW5nIGNvbW1pdHMuLi4iCiBtc2dzdHIgIkzDpHNlciBpbmNoZWNrbmluZ2FyLi4uIgogCi0jOiBnaXRrOjQ0MSBnaXRrOjE1MjggZ2l0azozNDY1CisjOiBnaXRrOjQ0OCBnaXRrOjE1NzggZ2l0azo0MjY0CiBtc2dpZCAiTm8gY29tbWl0cyBzZWxlY3RlZCIKIG1zZ3N0ciAiSW5nYSBpbmNoZWNrbmluZ2FyIG1hcmtlcmFkZSIKIAotIzogZ2l0azoxMzk5CisjOiBnaXRrOjE0NTQKIG1zZ2lkICJDYW4ndCBwYXJzZSBnaXQgbG9nIG91dHB1dDoiCiBtc2dzdHIgIkthbiBpbnRlIHRvbGthIHV0ZGF0YSBmcsOlbiBnaXQgbG9nOiIKIAotIzogZ2l0azoxNjA1CisjOiBnaXRrOjE2NzQKIG1zZ2lkICJObyBjb21taXQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIgogbXNnc3RyICJJbmdlbiBpbmNoZWNrbmluZ3NpbmZvcm1hdGlvbiDDpHIgdGlsbGfDpG5nbGlnIgogCi0jOiBnaXRrOjE3MDkgZ2l0azoxNzMxIGdpdGs6MzI1OSBnaXRrOjc3NjQgZ2l0azo5MjkzIGdpdGs6OTQ2NgorIzogZ2l0azoxODE2Cittc2dpZCAibWMiCittc2dzdHIgIm1jIgorCisjOiBnaXRrOjE4NTEgZ2l0azo0MDU0IGdpdGs6OTA0NCBnaXRrOjEwNTg1IGdpdGs6MTA4MDQKIG1zZ2lkICJPSyIKIG1zZ3N0ciAiT0siCiAKLSM6IGdpdGs6MTczMyBnaXRrOjMyNjAgZ2l0azo3NDM5IGdpdGs6NzUxMCBnaXRrOjc2MTMgZ2l0azo3NjYwIGdpdGs6Nzc2NgotIzogZ2l0azo5Mjk0IGdpdGs6OTQ2NworIzogZ2l0azoxODUzIGdpdGs6NDA1NiBnaXRrOjg2MzQgZ2l0azo4NzEzIGdpdGs6ODgyOCBnaXRrOjg4NzcgZ2l0azo5MDQ2CisjOiBnaXRrOjEwNTg2IGdpdGs6MTA4MDUKIG1zZ2lkICJDYW5jZWwiCiBtc2dzdHIgIkF2YnJ5dCIKIAotIzogZ2l0azoxODExCisjOiBnaXRrOjE5NzUKIG1zZ2lkICJVcGRhdGUiCiBtc2dzdHIgIlVwcGRhdGVyYSIKIAotIzogZ2l0azoxODEyCisjOiBnaXRrOjE5NzYKIG1zZ2lkICJSZWxvYWQiCiBtc2dzdHIgIkxhZGRhIG9tIgogCi0jOiBnaXRrOjE4MTMKKyM6IGdpdGs6MTk3NwogbXNnaWQgIlJlcmVhZCByZWZlcmVuY2VzIgogbXNnc3RyICJMw6RzIG9tIHJlZmVyZW5zZXIiCiAKLSM6IGdpdGs6MTgxNAorIzogZ2l0azoxOTc4CiBtc2dpZCAiTGlzdCByZWZlcmVuY2VzIgogbXNnc3RyICJWaXNhIHJlZmVyZW5zZXIiCiAKLSM6IGdpdGs6MTgxNQorIzogZ2l0azoxOTgwCittc2dpZCAiU3RhcnQgZ2l0IGd1aSIKK21zZ3N0ciAiU3RhcnRhIGdpdCBndWkiCisKKyM6IGdpdGs6MTk4MgogbXNnaWQgIlF1aXQiCiBtc2dzdHIgIkF2c2x1dGEiCiAKLSM6IGdpdGs6MTgxMAorIzogZ2l0azoxOTc0CiBtc2dpZCAiRmlsZSIKIG1zZ3N0ciAiQXJraXYiCiAKLSM6IGdpdGs6MTgxOAorIzogZ2l0azoxOTg2CiBtc2dpZCAiUHJlZmVyZW5jZXMiCiBtc2dzdHIgIkluc3TDpGxsbmluZ2FyIgogCi0jOiBnaXRrOjE4MTcKKyM6IGdpdGs6MTk4NQogbXNnaWQgIkVkaXQiCiBtc2dzdHIgIlJlZGlnZXJhIgogCi0jOiBnaXRrOjE4MjEKKyM6IGdpdGs6MTk5MAogbXNnaWQgIk5ldyB2aWV3Li4uIgogbXNnc3RyICJOeSB2eS4uLiIKIAotIzogZ2l0azoxODIyCisjOiBnaXRrOjE5OTEKIG1zZ2lkICJFZGl0IHZpZXcuLi4iCiBtc2dzdHIgIsOEbmRyYSB2eS4uLiIKIAotIzogZ2l0azoxODIzCisjOiBnaXRrOjE5OTIKIG1zZ2lkICJEZWxldGUgdmlldyIKIG1zZ3N0ciAiVGEgYm9ydCB2eSIKIAotIzogZ2l0azoxODI1CisjOiBnaXRrOjE5OTQKIG1zZ2lkICJBbGwgZmlsZXMiCiBtc2dzdHIgIkFsbGEgZmlsZXIiCiAKLSM6IGdpdGs6MTgyMCBnaXRrOjMxOTYKKyM6IGdpdGs6MTk4OSBnaXRrOjM4MDgKIG1zZ2lkICJWaWV3IgogbXNnc3RyICJWaXNhIgogCi0jOiBnaXRrOjE4MjggZ2l0azoyNDg3CisjOiBnaXRrOjE5OTkgZ2l0azoyMDA5IGdpdGs6Mjc4MAogbXNnaWQgIkFib3V0IGdpdGsiCiBtc2dzdHIgIk9tIGdpdGsiCiAKLSM6IGdpdGs6MTgyOQorIzogZ2l0azoyMDAwIGdpdGs6MjAxNAogbXNnaWQgIktleSBiaW5kaW5ncyIKIG1zZ3N0ciAiVGFuZ2VudGJvcmRzYmluZG5pbmdhciIKIAotIzogZ2l0azoxODI3CisjOiBnaXRrOjE5OTggZ2l0azoyMDEzCiBtc2dpZCAiSGVscCIKIG1zZ3N0ciAiSGrDpGxwIgogCi0jOiBnaXRrOjE4ODcKLW1zZ2lkICJTSEExIElEOiAiCi1tc2dzdHIgIlNIQTEtaWQ6ICIKKyM6IGdpdGs6MjA5MSBnaXRrOjgxMTAKK21zZ2lkICJTSEExIElEOiIKK21zZ3N0ciAiU0hBMS1pZDoiCiAKLSM6IGdpdGs6MTkxOAorIzogZ2l0azoyMTIyCiBtc2dpZCAiUm93IgogbXNnc3RyICJSYWQiCiAKLSM6IGdpdGs6MTk0OQorIzogZ2l0azoyMTYwCiBtc2dpZCAiRmluZCIKIG1zZ3N0ciAiU8O2ayIKIAotIzogZ2l0azoxOTUwCisjOiBnaXRrOjIxNjEKIG1zZ2lkICJuZXh0IgogbXNnc3RyICJuw6RzdGEiCiAKLSM6IGdpdGs6MTk1MQorIzogZ2l0azoyMTYyCiBtc2dpZCAicHJldiIKIG1zZ3N0ciAiZsO2cmVnIgogCi0jOiBnaXRrOjE5NTIKKyM6IGdpdGs6MjE2MwogbXNnaWQgImNvbW1pdCIKIG1zZ3N0ciAiaW5jaGVja25pbmciCiAKLSM6IGdpdGs6MTk1NSBnaXRrOjE5NTcgZ2l0azozNjE3IGdpdGs6MzY0MCBnaXRrOjM2NjQgZ2l0azo1NTUwIGdpdGs6NTYyMQorIzogZ2l0azoyMTY2IGdpdGs6MjE2OCBnaXRrOjQ0MjIgZ2l0azo0NDQ1IGdpdGs6NDQ2OSBnaXRrOjY0MTAgZ2l0azo2NDgyCisjOiBnaXRrOjY1NjYKIG1zZ2lkICJjb250YWluaW5nOiIKIG1zZ3N0ciAic29tIGlubmVow6VsbGVyOiIKIAotIzogZ2l0azoxOTU4IGdpdGs6Mjk1NCBnaXRrOjI5NTkgZ2l0azozNjkyCisjOiBnaXRrOjIxNjkgZ2l0azozMjkwIGdpdGs6MzI5NSBnaXRrOjQ0OTcKIG1zZ2lkICJ0b3VjaGluZyBwYXRoczoiCiBtc2dzdHIgInNvbSByw7ZyIHPDtmt2w6RnOiIKIAotIzogZ2l0azoxOTU5IGdpdGs6MzY5NworIzogZ2l0azoyMTcwIGdpdGs6NDUwMgogbXNnaWQgImFkZGluZy9yZW1vdmluZyBzdHJpbmc6IgogbXNnc3RyICJzb20gbMOkZ2dlci90aWxsIHRhciBib3J0IHN0csOkbmc6IgogCi0jOiBnaXRrOjE5NjggZ2l0azoxOTcwCisjOiBnaXRrOjIxNzkgZ2l0azoyMTgxCiBtc2dpZCAiRXhhY3QiCiBtc2dzdHIgIkV4YWt0IgogCi0jOiBnaXRrOjE5NzAgZ2l0azozNzczIGdpdGs6NTUxOAorIzogZ2l0azoyMTgxIGdpdGs6NDU3NyBnaXRrOjYzNzgKIG1zZ2lkICJJZ25DYXNlIgogbXNnc3RyICJJZ25WZXJzYWxlciIKIAotIzogZ2l0azoxOTcwIGdpdGs6MzY2NiBnaXRrOjM3NzEgZ2l0azo1NTE0CisjOiBnaXRrOjIxODEgZ2l0azo0NDcxIGdpdGs6NDU3NSBnaXRrOjYzNzQKIG1zZ2lkICJSZWdleHAiCiBtc2dzdHIgIlJlZy51dHRyLiIKIAotIzogZ2l0azoxOTcyIGdpdGs6MTk3MyBnaXRrOjM3OTIgZ2l0azozODIyIGdpdGs6MzgyOSBnaXRrOjU2NDEgZ2l0azo1NzA4CisjOiBnaXRrOjIxODMgZ2l0azoyMTg0IGdpdGs6NDU5NiBnaXRrOjQ2MjYgZ2l0azo0NjMzIGdpdGs6NjUwMiBnaXRrOjY1NzAKIG1zZ2lkICJBbGwgZmllbGRzIgogbXNnc3RyICJBbGxhIGbDpGx0IgogCi0jOiBnaXRrOjE5NzMgZ2l0azozNzkwIGdpdGs6MzgyMiBnaXRrOjU1ODAKKyM6IGdpdGs6MjE4NCBnaXRrOjQ1OTQgZ2l0azo0NjI2IGdpdGs6NjQ0MQogbXNnaWQgIkhlYWRsaW5lIgogbXNnc3RyICJSdWJyaWsiCiAKLSM6IGdpdGs6MTk3NCBnaXRrOjM3OTAgZ2l0azo1NTgwIGdpdGs6NTcwOCBnaXRrOjYxMDkKKyM6IGdpdGs6MjE4NSBnaXRrOjQ1OTQgZ2l0azo2NDQxIGdpdGs6NjU3MCBnaXRrOjcwMDMKIG1zZ2lkICJDb21tZW50cyIKIG1zZ3N0ciAiS29tbWVudGFyZXIiCiAKLSM6IGdpdGs6MTk3NCBnaXRrOjM3OTAgZ2l0azozNzk0IGdpdGs6MzgyOSBnaXRrOjU1ODAgZ2l0azo2MDQ1IGdpdGs6NzI4NQotIzogZ2l0azo3MzAwCisjOiBnaXRrOjIxODUgZ2l0azo0NTk0IGdpdGs6NDU5OCBnaXRrOjQ2MzMgZ2l0azo2NDQxIGdpdGs6NjkzOCBnaXRrOjgyODUKKyM6IGdpdGs6ODMwMAogbXNnaWQgIkF1dGhvciIKIG1zZ3N0ciAiRsO2cmZhdHRhcmUiCiAKLSM6IGdpdGs6MTk3NCBnaXRrOjM3OTAgZ2l0azo1NTgwIGdpdGs6NjA0NworIzogZ2l0azoyMTg1IGdpdGs6NDU5NCBnaXRrOjY0NDEgZ2l0azo2OTQwCiBtc2dpZCAiQ29tbWl0dGVyIgogbXNnc3RyICJJbmNoZWNrYXJlIgogCi0jOiBnaXRrOjIwMDMKKyM6IGdpdGs6MjIxNgogbXNnaWQgIlNlYXJjaCIKIG1zZ3N0ciAiU8O2ayIKIAotIzogZ2l0azoyMDEwCisjOiBnaXRrOjIyMjQKIG1zZ2lkICJEaWZmIgogbXNnc3RyICJEaWZmIgogCi0jOiBnaXRrOjIwMTIKKyM6IGdpdGs6MjIyNgogbXNnaWQgIk9sZCB2ZXJzaW9uIgogbXNnc3RyICJHYW1tYWwgdmVyc2lvbiIKIAotIzogZ2l0azoyMDE0CisjOiBnaXRrOjIyMjgKIG1zZ2lkICJOZXcgdmVyc2lvbiIKIG1zZ3N0ciAiTnkgdmVyc2lvbiIKIAotIzogZ2l0azoyMDE2CisjOiBnaXRrOjIyMzAKIG1zZ2lkICJMaW5lcyBvZiBjb250ZXh0IgogbXNnc3RyICJSYWRlciBzYW1tYW5oYW5nIgogCi0jOiBnaXRrOjIwMjYKKyM6IGdpdGs6MjI0MAogbXNnaWQgIklnbm9yZSBzcGFjZSBjaGFuZ2UiCiBtc2dzdHIgIklnbm9yZXJhIMOkbmRyaW5nYXIgaSBibGFua3N0ZWciCiAKLSM6IGdpdGs6MjA4NAorIzogZ2l0azoyMjk5CiBtc2dpZCAiUGF0Y2giCiBtc2dzdHIgIlBhdGNoIgogCi0jOiBnaXRrOjIwODYKKyM6IGdpdGs6MjMwMQogbXNnaWQgIlRyZWUiCiBtc2dzdHIgIlRyw6RkIgogCi0jOiBnaXRrOjIyMTMgZ2l0azoyMjI2CisjOiBnaXRrOjI0NTYgZ2l0azoyNDczCiBtc2dpZCAiRGlmZiB0aGlzIC0+IHNlbGVjdGVkIgogbXNnc3RyICJEaWZmIGRlbm5hIC0+IG1hcmtlcmFkIgogCi0jOiBnaXRrOjIyMTQgZ2l0azoyMjI3CisjOiBnaXRrOjI0NTcgZ2l0azoyNDc0CiBtc2dpZCAiRGlmZiBzZWxlY3RlZCAtPiB0aGlzIgogbXNnc3RyICJEaWZmIG1hcmtlcmFkIC0+IGRlbm5hIgogCi0jOiBnaXRrOjIyMTUgZ2l0azoyMjI4CisjOiBnaXRrOjI0NTggZ2l0azoyNDc1CiBtc2dpZCAiTWFrZSBwYXRjaCIKIG1zZ3N0ciAiU2thcGEgcGF0Y2giCiAKLSM6IGdpdGs6MjIxNiBnaXRrOjc0OTQKKyM6IGdpdGs6MjQ1OSBnaXRrOjg2OTIKIG1zZ2lkICJDcmVhdGUgdGFnIgogbXNnc3RyICJTa2FwYSB0YWdnIgogCi0jOiBnaXRrOjIyMTcgZ2l0azo3NTkzCisjOiBnaXRrOjI0NjAgZ2l0azo4ODA4CiBtc2dpZCAiV3JpdGUgY29tbWl0IHRvIGZpbGUiCiBtc2dzdHIgIlNrcml2IGluY2hlY2tuaW5nIHRpbGwgZmlsIgogCi0jOiBnaXRrOjIyMTggZ2l0azo3NjQ3CisjOiBnaXRrOjI0NjEgZ2l0azo4ODY1CiBtc2dpZCAiQ3JlYXRlIG5ldyBicmFuY2giCiBtc2dzdHIgIlNrYXBhIG55IGdyZW4iCiAKLSM6IGdpdGs6MjIxOQorIzogZ2l0azoyNDYyCiBtc2dpZCAiQ2hlcnJ5LXBpY2sgdGhpcyBjb21taXQiCiBtc2dzdHIgIlBsb2NrYSBkZW5uYSBpbmNoZWNrbmluZyIKIAotIzogZ2l0azoyMjIwCisjOiBnaXRrOjI0NjMKIG1zZ2lkICJSZXNldCBIRUFEIGJyYW5jaCB0byBoZXJlIgogbXNnc3RyICLDhXRlcnN0w6RsbCBIRUFELWdyZW5lbiBoaXQiCiAKLSM6IGdpdGs6MjIzNAorIzogZ2l0azoyNDY0Cittc2dpZCAiTWFyayB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiTWFya2VyYSBkZW5uYSBpbmNoZWNrbmluZyIKKworIzogZ2l0azoyNDY1Cittc2dpZCAiUmV0dXJuIHRvIG1hcmsiCittc2dzdHIgIsOFdGVyZ8OlIHRpbGwgbWFya2VyaW5nIgorCisjOiBnaXRrOjI0NjYKK21zZ2lkICJGaW5kIGRlc2NlbmRhbnQgb2YgdGhpcyBhbmQgbWFyayIKK21zZ3N0ciAiSGl0dGEgZWZ0ZXJmw7ZsamFyZSB0aWxsIGRlbm5hIG9jaCBtYXJrZXJhIgorCisjOiBnaXRrOjI0NjcKK21zZ2lkICJDb21wYXJlIHdpdGggbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAiSsOkbWbDtnIgbWVkIG1hcmtlcmFkIGluY2hlY2tuaW5nIgorCisjOiBnaXRrOjI0ODEKIG1zZ2lkICJDaGVjayBvdXQgdGhpcyBicmFuY2giCiBtc2dzdHIgIkNoZWNrYSB1dCBkZW5uYSBncmVuIgogCi0jOiBnaXRrOjIyMzUKKyM6IGdpdGs6MjQ4MgogbXNnaWQgIlJlbW92ZSB0aGlzIGJyYW5jaCIKIG1zZ3N0ciAiVGEgYm9ydCBkZW5uYSBncmVuIgogCi0jOiBnaXRrOjIyNDIKKyM6IGdpdGs6MjQ4OQogbXNnaWQgIkhpZ2hsaWdodCB0aGlzIHRvbyIKIG1zZ3N0ciAiTWFya2VyYSDDpHZlbiBkZXR0YSIKIAotIzogZ2l0azoyMjQzCisjOiBnaXRrOjI0OTAKIG1zZ2lkICJIaWdobGlnaHQgdGhpcyBvbmx5IgogbXNnc3RyICJNYXJrZXJhIGJhcmEgZGV0dGEiCiAKLSM6IGdpdGs6MjI0NAorIzogZ2l0azoyNDkxCiBtc2dpZCAiRXh0ZXJuYWwgZGlmZiIKIG1zZ3N0ciAiRXh0ZXJuIGRpZmYiCiAKLSM6IGdpdGs6MjI0NQorIzogZ2l0azoyNDkyCiBtc2dpZCAiQmxhbWUgcGFyZW50IGNvbW1pdCIKLW1zZ3N0ciAiIgorbXNnc3RyICJLbGFuZHJhIGbDtnLDpGxkcmFpbmNoZWNrbmluZyIKIAotIzogZ2l0azoyNDg4CisjOiBnaXRrOjI0OTkKK21zZ2lkICJTaG93IG9yaWdpbiBvZiB0aGlzIGxpbmUiCittc2dzdHIgIlZpc2EgdXJzcHJ1bmdldCBmw7ZyIGRlbiBow6RyIHJhZGVuIgorCisjOiBnaXRrOjI1MDAKK21zZ2lkICJSdW4gZ2l0IGd1aSBibGFtZSBvbiB0aGlzIGxpbmUiCittc2dzdHIgIkvDtnIgZ2l0IGd1aSBibGFtZSBww6UgZGVuIGjDpHIgcmFkZW4iCisKKyM6IGdpdGs6Mjc4MgogbXNnaWQgIiIKICJcbiIKICJHaXRrIC0gYSBjb21taXQgdmlld2VyIGZvciBnaXRcbiIKICJcbiIKLSJDb3B5cmlnaHQgwqkgMjAwNS0yMDA4IFBhdWwgTWFja2VycmFzXG4iCisiQ29weXJpZ2h0IMKpOSAyMDA1LTIwMDkgUGF1bCBNYWNrZXJyYXNcbiIKICJcbiIKICJVc2UgYW5kIHJlZGlzdHJpYnV0ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIgogbXNnc3RyICIiCiAiXG4iCiAiR2l0ayAtIGVuIGluY2hlY2tuaW5nc3Zpc2FyZSBmw7ZyIGdpdFxuIgogIlxuIgotIkNvcHlyaWdodCDCqSAyMDA1LTIwMDggUGF1bCBNYWNrZXJyYXNcbiIKKyJDb3B5cmlnaHQgwqkgMjAwNS0yMDA5IFBhdWwgTWFja2VycmFzXG4iCiAiXG4iCiAiQW52w6RuZCBvY2ggdmlkYXJlZsO2cm1lZGxhIGVubGlndCB2aWxsa29yZW4gaSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKIAotIzogZ2l0azoyNDk2IGdpdGs6MjU1NyBnaXRrOjc5NDMKKyM6IGdpdGs6Mjc5MCBnaXRrOjI4NTQgZ2l0azo5MjMwCiBtc2dpZCAiQ2xvc2UiCiBtc2dzdHIgIlN0w6RuZyIKIAotIzogZ2l0azoyNTE1CisjOiBnaXRrOjI4MTEKIG1zZ2lkICJHaXRrIGtleSBiaW5kaW5ncyIKIG1zZ3N0ciAiVGFuZ2VudGJvcmRzYmluZG5pbmdhciBmw7ZyIEdpdGsiCiAKLSM6IGdpdGs6MjUxNworIzogZ2l0azoyODE0CiBtc2dpZCAiR2l0ayBrZXkgYmluZGluZ3M6IgogbXNnc3RyICJUYW5nZW50Ym9yZHNiaW5kbmluZ2FyIGbDtnIgR2l0azoiCiAKLSM6IGdpdGs6MjUxOQorIzogZ2l0azoyODE2CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLVE+XHRcdFF1aXQiCiBtc2dzdHIgIjwlcy1RPlx0XHRBdnNsdXRhIgogCi0jOiBnaXRrOjI1MjAKKyM6IGdpdGs6MjgxNwogbXNnaWQgIjxIb21lPlx0XHRNb3ZlIHRvIGZpcnN0IGNvbW1pdCIKIG1zZ3N0ciAiPEhvbWU+XHRcdEfDpSB0aWxsIGbDtnJzdGEgaW5jaGVja25pbmciCiAKLSM6IGdpdGs6MjUyMQorIzogZ2l0azoyODE4CiBtc2dpZCAiPEVuZD5cdFx0TW92ZSB0byBsYXN0IGNvbW1pdCIKIG1zZ3N0ciAiPEVuZD5cdFx0R8OlIHRpbGwgc2lzdGEgaW5jaGVja25pbmciCiAKLSM6IGdpdGs6MjUyMgorIzogZ2l0azoyODE5CiBtc2dpZCAiPFVwPiwgcCwgaVx0TW92ZSB1cCBvbmUgY29tbWl0IgogbXNnc3RyICI8VXBwPiwgcCwgaVx0R8OlIGVuIGluY2hlY2tuaW5nIHVwcCIKIAotIzogZ2l0azoyNTIzCisjOiBnaXRrOjI4MjAKIG1zZ2lkICI8RG93bj4sIG4sIGtcdE1vdmUgZG93biBvbmUgY29tbWl0IgogbXNnc3RyICI8TmVkPiwgbiwga1x0R8OlIGVuIGluY2hlY2tuaW5nIG5lZCIKIAotIzogZ2l0azoyNTI0CisjOiBnaXRrOjI4MjEKIG1zZ2lkICI8TGVmdD4sIHosIGpcdEdvIGJhY2sgaW4gaGlzdG9yeSBsaXN0IgogbXNnc3RyICI8VsOkbnN0ZXI+LCB6LCBqXHRHw6UgYmFrw6V0IGkgaGlzdG9yaWtlbiIKIAotIzogZ2l0azoyNTI1CisjOiBnaXRrOjI4MjIKIG1zZ2lkICI8UmlnaHQ+LCB4LCBsXHRHbyBmb3J3YXJkIGluIGhpc3RvcnkgbGlzdCIKIG1zZ3N0ciAiPEjDtmdlcj4sIHgsIGxcdEfDpSBmcmFtw6V0IGkgaGlzdG9yaWtlbiIKIAotIzogZ2l0azoyNTI2CisjOiBnaXRrOjI4MjMKIG1zZ2lkICI8UGFnZVVwPlx0TW92ZSB1cCBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKIG1zZ3N0ciAiPFBhZ2VVcD5cdEfDpSB1cHAgZW4gc2lkYSBpIGluY2hlY2tuaW5nc2xpc3RhbiIKIAotIzogZ2l0azoyNTI3CisjOiBnaXRrOjI4MjQKIG1zZ2lkICI8UGFnZURvd24+XHRNb3ZlIGRvd24gb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCiBtc2dzdHIgIjxQYWdlRG93bj5cdEfDpSBuZWQgZW4gc2lkYSBpIGluY2hlY2tuaW5nc2xpc3RhbiIKIAotIzogZ2l0azoyNTI4CisjOiBnaXRrOjI4MjUKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICI8JXMtSG9tZT5cdFNjcm9sbCB0byB0b3Agb2YgY29tbWl0IGxpc3QiCiBtc2dzdHIgIjwlcy1Ib21lPlx0UnVsbGEgdGlsbCBiw7ZyamFuIGF2IGluY2hlY2tuaW5nc2xpc3RhbiIKIAotIzogZ2l0azoyNTI5CisjOiBnaXRrOjI4MjYKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICI8JXMtRW5kPlx0U2Nyb2xsIHRvIGJvdHRvbSBvZiBjb21taXQgbGlzdCIKIG1zZ3N0ciAiPCVzLUVuZD5cdFJ1bGxhIHRpbGwgc2x1dGV0IGF2IGluY2hlY2tuaW5nc2xpc3RhbiIKIAotIzogZ2l0azoyNTMwCisjOiBnaXRrOjI4MjcKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICI8JXMtVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIGxpbmUiCiBtc2dzdHIgIjwlcy1VcHA+XHRSdWxsYSBpbmNoZWNrbmluZ3NsaXN0YW4gdXBwIGV0dCBzdGVnIgogCi0jOiBnaXRrOjI1MzEKKyM6IGdpdGs6MjgyOAogIywgdGNsLWZvcm1hdAogbXNnaWQgIjwlcy1Eb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIGxpbmUiCiBtc2dzdHIgIjwlcy1OZWQ+XHRSdWxsYSBpbmNoZWNrbmluZ3NsaXN0YW4gbmVkIGV0dCBzdGVnIgogCi0jOiBnaXRrOjI1MzIKKyM6IGdpdGs6MjgyOQogIywgdGNsLWZvcm1hdAogbXNnaWQgIjwlcy1QYWdlVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIHBhZ2UiCiBtc2dzdHIgIjwlcy1QYWdlVXA+XHRSdWxsYSBpbmNoZWNrbmluZ3NsaXN0YW4gdXBwIGVuIHNpZGEiCiAKLSM6IGdpdGs6MjUzMworIzogZ2l0azoyODMwCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLVBhZ2VEb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIHBhZ2UiCiBtc2dzdHIgIjwlcy1QYWdlRG93bj5cdFJ1bGxhIGluY2hlY2tuaW5nc2xpc3RhbiBuZWQgZW4gc2lkYSIKIAotIzogZ2l0azoyNTM0CisjOiBnaXRrOjI4MzEKIG1zZ2lkICI8U2hpZnQtVXA+XHRGaW5kIGJhY2t3YXJkcyAodXB3YXJkcywgbGF0ZXIgY29tbWl0cykiCiBtc2dzdHIgIjxTa2lmdC1VcHA+XHRTw7ZrIGJha8OldCAodXBww6V0LCBzZW5hcmUgaW5jaGVja25pbmdhcikiCiAKLSM6IGdpdGs6MjUzNQorIzogZ2l0azoyODMyCiBtc2dpZCAiPFNoaWZ0LURvd24+XHRGaW5kIGZvcndhcmRzIChkb3dud2FyZHMsIGVhcmxpZXIgY29tbWl0cykiCiBtc2dzdHIgIjxTa2lmdC1OZWQ+XHRTw7ZrIGZyYW3DpXQgKG5lZMOldCwgdGlkaWdhcmUgaW5jaGVja25pbmdhcikiCiAKLSM6IGdpdGs6MjUzNgorIzogZ2l0azoyODMzCiBtc2dpZCAiPERlbGV0ZT4sIGJcdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCiBtc2dzdHIgIjxEZWxldGU+LCBiXHRSdWxsYSBkaWZmdmlzbmluZ2VuIHVwcCBlbiBzaWRhIgogCi0jOiBnaXRrOjI1MzcKKyM6IGdpdGs6MjgzNAogbXNnaWQgIjxCYWNrc3BhY2U+XHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgogbXNnc3RyICI8QmFrc3RlZz5cdFJ1bGxhIGRpZmZ2aXNuaW5nZW4gdXBwIGVuIHNpZGEiCiAKLSM6IGdpdGs6MjUzOAorIzogZ2l0azoyODM1CiBtc2dpZCAiPFNwYWNlPlx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gb25lIHBhZ2UiCiBtc2dzdHIgIjxCbGFua3N0ZWc+XHRSdWxsYSBkaWZmdmlzbmluZ2VuIG5lZCBlbiBzaWRhIgogCi0jOiBnaXRrOjI1MzkKKyM6IGdpdGs6MjgzNgogbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKIG1zZ3N0ciAidVx0XHRSdWxsYSBkaWZmdmlzbmluZ2VuIHVwcCAxOCByYWRlciIKIAotIzogZ2l0azoyNTQwCisjOiBnaXRrOjI4MzcKIG1zZ2lkICJkXHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biAxOCBsaW5lcyIKIG1zZ3N0ciAiZFx0XHRSdWxsYSBkaWZmdmlzbmluZ2VuIG5lZCAxOCByYWRlciIKIAotIzogZ2l0azoyNTQxCisjOiBnaXRrOjI4MzgKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICI8JXMtRj5cdFx0RmluZCIKIG1zZ3N0ciAiPCVzLUY+XHRcdFPDtmsiCiAKLSM6IGdpdGs6MjU0MgorIzogZ2l0azoyODM5CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLUc+XHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKIG1zZ3N0ciAiPCVzLUc+XHRcdEfDpSB0aWxsIG7DpHN0YSBzw7ZrdHLDpGZmIgogCi0jOiBnaXRrOjI1NDMKKyM6IGdpdGs6Mjg0MAogbXNnaWQgIjxSZXR1cm4+XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCiBtc2dzdHIgIjxSZXR1cm4+XHRcdEfDpSB0aWxsIG7DpHN0YSBzw7ZrdHLDpGZmIgogCi0jOiBnaXRrOjI1NDQKLW1zZ2lkICIvXHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCwgb3IgcmVkbyBmaW5kIgotbXNnc3RyICIvXHRcdEfDpSB0aWxsIG7DpHN0YSBzw7ZrdHLDpGZmLCBlbGxlciBzw7ZrIHDDpSBueXR0IgorIzogZ2l0azoyODQxCittc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKK21zZ3N0ciAiL1x0XHRGb2t1c2VyYSBzw7ZrcnV0YW4iCiAKLSM6IGdpdGs6MjU0NQorIzogZ2l0azoyODQyCiBtc2dpZCAiP1x0XHRNb3ZlIHRvIHByZXZpb3VzIGZpbmQgaGl0IgogbXNnc3RyICI/XHRcdEfDpSB0aWxsIGbDtnJlZ8OlZW5kZSBzw7ZrdHLDpGZmIgogCi0jOiBnaXRrOjI1NDYKKyM6IGdpdGs6Mjg0MwogbXNnaWQgImZcdFx0U2Nyb2xsIGRpZmYgdmlldyB0byBuZXh0IGZpbGUiCiBtc2dzdHIgImZcdFx0UnVsbGEgZGlmZnZpc25pbmdlbiB0aWxsIG7DpHN0YSBmaWwiCiAKLSM6IGdpdGs6MjU0NworIzogZ2l0azoyODQ0CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLVM+XHRcdFNlYXJjaCBmb3IgbmV4dCBoaXQgaW4gZGlmZiB2aWV3IgogbXNnc3RyICI8JXMtUz5cdFx0R8OlIHRpbGwgbsOkc3RhIHPDtmt0csOkZmYgaSBkaWZmdmlzbmluZ2VuIgogCi0jOiBnaXRrOjI1NDgKKyM6IGdpdGs6Mjg0NQogIywgdGNsLWZvcm1hdAogbXNnaWQgIjwlcy1SPlx0XHRTZWFyY2ggZm9yIHByZXZpb3VzIGhpdCBpbiBkaWZmIHZpZXciCiBtc2dzdHIgIjwlcy1SPlx0XHRHw6UgdGlsbCBmw7ZyZWfDpWVuZGUgc8O2a3Ryw6RmZiBpIGRpZmZ2aXNuaW5nZW4iCiAKLSM6IGdpdGs6MjU0OQorIzogZ2l0azoyODQ2CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLUtQKz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKIG1zZ3N0ciAiPCVzLU51bSs+XHTDlmthIHRlY2tlbnN0b3JsZWsiCiAKLSM6IGdpdGs6MjU1MAorIzogZ2l0azoyODQ3CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLXBsdXM+XHRJbmNyZWFzZSBmb250IHNpemUiCiBtc2dzdHIgIjwlcy1wbHVzPlx0w5ZrYSB0ZWNrZW5zdG9ybGVrIgogCi0jOiBnaXRrOjI1NTEKKyM6IGdpdGs6Mjg0OAogIywgdGNsLWZvcm1hdAogbXNnaWQgIjwlcy1LUC0+XHREZWNyZWFzZSBmb250IHNpemUiCiBtc2dzdHIgIjwlcy1OdW0tPlx0TWluc2thIHRlY2tlbnN0b3JsZWsiCiAKLSM6IGdpdGs6MjU1MgorIzogZ2l0azoyODQ5CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLW1pbnVzPlx0RGVjcmVhc2UgZm9udCBzaXplIgogbXNnc3RyICI8JXMtbWludXM+XHRNaW5za2EgdGVja2Vuc3RvcmxlayIKIAotIzogZ2l0azoyNTUzCisjOiBnaXRrOjI4NTAKIG1zZ2lkICI8RjU+XHRcdFVwZGF0ZSIKIG1zZ3N0ciAiPEY1Plx0XHRVcHBkYXRlcmEiCiAKLSM6IGdpdGs6MzIwMAotbXNnaWQgIkdpdGsgdmlldyBkZWZpbml0aW9uIgotbXNnc3RyICJEZWZpbml0aW9uIGF2IEdpdGstdnkiCisjOiBnaXRrOjMzMDUgZ2l0azozMzE0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGVtcG9yYXJ5IGRpcmVjdG9yeSAlczoiCittc2dzdHIgIkZlbCB2aWQgc2thcGFuZGUgYXYgdGVtcG9yw6RyIGthdGFsb2cgJXM6IgogCi0jOiBnaXRrOjMyMjUKLW1zZ2lkICJOYW1lIgotbXNnc3RyICJOYW1uIgorIzogZ2l0azozMzI3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBcIiVzXCIgZnJvbSAlczoiCittc2dzdHIgIkZlbCB2aWQgaMOkbXRuaW5nIGF2ICBcIiVzXCIgZnLDpW4gJXM6IgogCi0jOiBnaXRrOjMyMjgKLW1zZ2lkICJSZW1lbWJlciB0aGlzIHZpZXciCi1tc2dzdHIgIlNwYXJhIGRlbm5hIHZ5IgorIzogZ2l0azozMzkwCittc2dpZCAiY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICJrb21tYW5kbyBtaXNzbHlja2FkZXM6IgogCi0jOiBnaXRrOjMyMzIKLW1zZ2lkICJDb21taXRzIHRvIGluY2x1ZGUgKGFyZ3VtZW50cyB0byBnaXQgbG9nKToiCi1tc2dzdHIgIkluY2hlY2tuaW5nYXIgYXR0IHRhIG1lZCAoYXJndW1lbnQgdGlsbCBnaXQgbG9nKToiCisjOiBnaXRrOjM1MzkKK21zZ2lkICJObyBzdWNoIGNvbW1pdCIKK21zZ3N0ciAiSW5jaGVja25pbmcgc2FrbmFzIgogCi0jOiBnaXRrOjMyMzkKLW1zZ2lkICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiIKLW1zZ3N0ciAiS29tbWFuZG8gZsO2ciBhdHQgZ2VuZXJlcmEgZmxlciBpbmNoZWNrbmluZ2FyIGF0dCB0YSBtZWQ6IgorIzogZ2l0azozNTUzCittc2dpZCAiZ2l0IGd1aSBibGFtZTogY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICJnaXQgZ3VpIGJsYW1lOiBrb21tYW5kbyBtaXNzbHlja2FkZXM6IgogCi0jOiBnaXRrOjMyNDYKLW1zZ2lkICJFbnRlciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gaW5jbHVkZSwgb25lIHBlciBsaW5lOiIKLW1zZ3N0ciAiQW5nZSBmaWxlciBvY2gga2F0YWxvZ2VyIGF0dCB0YSBtZWQsIGVuIHBlciByYWQ6IgorIzogZ2l0azozNTg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcmVhZCBtZXJnZSBoZWFkOiAlcyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBsw6RzYSBzYW1tYW5zbGFnbmluZ3NodXZ1ZDogJXMiCiAKLSM6IGdpdGs6MzI5MwotbXNnaWQgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiIKLW1zZ3N0ciAiRmVsIGkgYXJndW1lbnQgZsO2ciB2YWwgYXYgaW5jaGVja25pbmdhcjoiCisjOiBnaXRrOjM1OTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGluZGV4OiAlcyIKK21zZ3N0ciAiRmVsIHZpZCBsw6RzbmluZyBhdiBpbmRleDogJXMiCiAKLSM6IGdpdGs6MzM0NyBnaXRrOjMzOTkgZ2l0azozODQyIGdpdGs6Mzg1NiBnaXRrOjUwNjAgZ2l0azoxMDE0MSBnaXRrOjEwMTQyCi1tc2dpZCAiTm9uZSIKLW1zZ3N0ciAiSW5nZXQiCisjOiBnaXRrOjM2MTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBzdGFydCBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICJLdW5kZSBpbnRlIHN0YXJ0YSBnaXQgYmxhbWU6ICVzIgogCi0jOiBnaXRrOjM3OTAgZ2l0azo1NTgwIGdpdGs6NzI4NyBnaXRrOjczMDIKLW1zZ2lkICJEYXRlIgotbXNnc3RyICJEYXR1bSIKLQotIzogZ2l0azozNzkwIGdpdGs6NTU4MAotbXNnaWQgIkNEYXRlIgotbXNnc3RyICJTa2FwYXQgZGF0dW0iCi0KLSM6IGdpdGs6MzkzOSBnaXRrOjM5NDQKLW1zZ2lkICJEZXNjZW5kYW50IgotbXNnc3RyICJBdmtvbWxpbmciCi0KLSM6IGdpdGs6Mzk0MAotbXNnaWQgIk5vdCBkZXNjZW5kYW50IgotbXNnc3RyICJJbnRlIGF2a29tbGluZyIKLQotIzogZ2l0azozOTQ3IGdpdGs6Mzk1MgotbXNnaWQgIkFuY2VzdG9yIgotbXNnc3RyICJGw7ZyZmFkZXIiCi0KLSM6IGdpdGs6Mzk0OAotbXNnaWQgIk5vdCBhbmNlc3RvciIKLW1zZ3N0ciAiSW50ZSBmw7ZyZmFkZXIiCi0KLSM6IGdpdGs6NDE4NwotbXNnaWQgIkxvY2FsIGNoYW5nZXMgY2hlY2tlZCBpbiB0byBpbmRleCBidXQgbm90IGNvbW1pdHRlZCIKLW1zZ3N0ciAiTG9rYWxhIMOkbmRyaW5nYXIgc3BhcmFkZSBpIGluZGV4ZXQgbWVuIGludGUgaW5jaGVja2FkZSIKLQotIzogZ2l0azo0MjIwCi1tc2dpZCAiTG9jYWwgdW5jb21taXR0ZWQgY2hhbmdlcywgbm90IGNoZWNrZWQgaW4gdG8gaW5kZXgiCi1tc2dzdHIgIkxva2FsYSDDpG5kcmluZ2FyLCBlaiBzcGFyYWRlIGkgaW5kZXhldCIKLQotIzogZ2l0azo1NTQ5CisjOiBnaXRrOjM2MjAgZ2l0azo2NDA5CiBtc2dpZCAiU2VhcmNoaW5nIgogbXNnc3RyICJTw7ZrZXIiCiAKLSM6IGdpdGs6NjA0OQorIzogZ2l0azozNjUyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcnVubmluZyBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICJGZWwgdmlkIGvDtnJuaW5nIGF2IGdpdCBibGFtZTogJXMiCisKKyM6IGdpdGs6MzY4MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRoYXQgbGluZSBjb21lcyBmcm9tIGNvbW1pdCAlcywgIHdoaWNoIGlzIG5vdCBpbiB0aGlzIHZpZXciCittc2dzdHIgIlJhZGVuIGtvbW1lciBmcsOlbiBpbmNoZWNrbmluZ2VuICVzLCBzb20gaW50ZSBmaW5ucyBpIGRlbm5hIHZ5IgorCisjOiBnaXRrOjM2OTQKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHZpZXdlciBmYWlsZWQ6IgorbXNnc3RyICJFeHRlcm50IGRpZmYtdmVya3R5ZyBtaXNzbHlja2FkZXM6IgorCisjOiBnaXRrOjM4MTIKK21zZ2lkICJHaXRrIHZpZXcgZGVmaW5pdGlvbiIKK21zZ3N0ciAiRGVmaW5pdGlvbiBhdiBHaXRrLXZ5IgorCisjOiBnaXRrOjM4MTYKK21zZ2lkICJSZW1lbWJlciB0aGlzIHZpZXciCittc2dzdHIgIlNwYXJhIGRlbm5hIHZ5IgorCisjOiBnaXRrOjM4MTcKK21zZ2lkICJSZWZlcmVuY2VzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCk6IgorbXNnc3RyICJSZWZlcmVuc2VyIChibGFua3N0ZWdzYXZkZWxhZCBsaXN0YSk6IgorCisjOiBnaXRrOjM4MTgKK21zZ2lkICJCcmFuY2hlcyAmIHRhZ3M6IgorbXNnc3RyICJHcmVuYXIgJiB0YWdnYXI6IgorCisjOiBnaXRrOjM4MTkKK21zZ2lkICJBbGwgcmVmcyIKK21zZ3N0ciAiQWxsYSByZWZlcmVuc2VyIgorCisjOiBnaXRrOjM4MjAKK21zZ2lkICJBbGwgKGxvY2FsKSBicmFuY2hlcyIKK21zZ3N0ciAiQWxsYSAobG9rYWxhKSBncmVuYXIiCisKKyM6IGdpdGs6MzgyMQorbXNnaWQgIkFsbCB0YWdzIgorbXNnc3RyICJBbGxhIHRhZ2dhciIKKworIzogZ2l0azozODIyCittc2dpZCAiQWxsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiQWxsYSBmasOkcnJzcMOlcmFuZGUgZ3JlbmFyIgorCisjOiBnaXRrOjM4MjMKK21zZ2lkICJDb21taXQgSW5mbyAocmVndWxhciBleHByZXNzaW9ucyk6IgorbXNnc3RyICJJbmNoZWNrbmluZ3NpbmZvIChyZWd1bGrDpHJhIHV0dHJ5Y2spOiIKKworIzogZ2l0azozODI0Cittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAiRsO2cmZhdHRhcmU6IgorCisjOiBnaXRrOjM4MjUKK21zZ2lkICJDb21taXR0ZXI6IgorbXNnc3RyICJJbmNoZWNrYXJlOiIKKworIzogZ2l0azozODI2Cittc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJJbmNoZWNrbmluZ3NtZWRkZWxhbmRlOiIKKworIzogZ2l0azozODI3Cittc2dpZCAiTWF0Y2hlcyBhbGwgQ29tbWl0IEluZm8gY3JpdGVyaWEiCittc2dzdHIgIk1vdHN2YXJhciBhbGxhIGtyaXRlcmllciBmw7ZyIGluY2hlY2tuaW5nc2luZm8iCisKKyM6IGdpdGs6MzgyOAorbXNnaWQgIkNoYW5nZXMgdG8gRmlsZXM6IgorbXNnc3RyICLDhG5kcmluZ2FyIGF2IGZpbGVyOiIKKworIzogZ2l0azozODI5Cittc2dpZCAiRml4ZWQgU3RyaW5nIgorbXNnc3RyICJGYXN0IHN0csOkbmciCisKKyM6IGdpdGs6MzgzMAorbXNnaWQgIlJlZ3VsYXIgRXhwcmVzc2lvbiIKK21zZ3N0ciAiUmVndWxqw6RydCB1dHRyeWNrIgorCisjOiBnaXRrOjM4MzEKK21zZ2lkICJTZWFyY2ggc3RyaW5nOiIKK21zZ3N0ciAiU8O2a3N0csOkbmc6IgorCisjOiBnaXRrOjM4MzIKK21zZ2lkICIiCisiQ29tbWl0IERhdGVzIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5ICIKKyIxNToyNzozOFwiKToiCittc2dzdHIgIiIKKyJJbmNoZWNraW5nc2RhdHVtIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5ICIKKyIxNToyNzozOFwiKToiCisKKyM6IGdpdGs6MzgzMworbXNnaWQgIlNpbmNlOiIKK21zZ3N0ciAiRnLDpW46IgorCisjOiBnaXRrOjM4MzQKK21zZ2lkICJVbnRpbDoiCittc2dzdHIgIlRpbGw6IgorCisjOiBnaXRrOjM4MzUKK21zZ2lkICJMaW1pdCBhbmQvb3Igc2tpcCBhIG51bWJlciBvZiByZXZpc2lvbnMgKHBvc2l0aXZlIGludGVnZXIpOiIKK21zZ3N0ciAiQmVncsOkbnNhIG9jaC9lbGxlciBob3BwYSDDtnZlciBldHQgYW50YWwgcmV2aXNpb25lciAocG9zaXRpdnQgaGVsdGFsKToiCisKKyM6IGdpdGs6MzgzNgorbXNnaWQgIk51bWJlciB0byBzaG93OiIKK21zZ3N0ciAiQW50YWwgYXR0IHZpc2E6IgorCisjOiBnaXRrOjM4MzcKK21zZ2lkICJOdW1iZXIgdG8gc2tpcDoiCittc2dzdHIgIkFudGFsIGF0dCBob3BwYSDDtnZlcjoiCisKKyM6IGdpdGs6MzgzOAorbXNnaWQgIk1pc2NlbGxhbmVvdXMgb3B0aW9uczoiCittc2dzdHIgIkRpdmVyc2UgYWx0ZXJuYXRpdjoiCisKKyM6IGdpdGs6MzgzOQorbXNnaWQgIlN0cmljdGx5IHNvcnQgYnkgZGF0ZSIKK21zZ3N0ciAiU3RyaWt0IGRhdHVtc29ydGVyaW5nIgorCisjOiBnaXRrOjM4NDAKK21zZ2lkICJNYXJrIGJyYW5jaCBzaWRlcyIKK21zZ3N0ciAiTWFya2VyYSBzaWRvZ3JlbmFyIgorCisjOiBnaXRrOjM4NDEKK21zZ2lkICJMaW1pdCB0byBmaXJzdCBwYXJlbnQiCittc2dzdHIgIkJlZ3LDpG5zYSB0aWxsIGbDtnJzdGEgZsO2csOkbGRlciIKKworIzogZ2l0azozODQyCittc2dpZCAiU2ltcGxlIGhpc3RvcnkiCittc2dzdHIgIkVua2VsIGhpc3RvcmlrIgorCisjOiBnaXRrOjM4NDMKK21zZ2lkICJBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBnaXQgbG9nOiIKK21zZ3N0ciAiWXR0ZXJsaWdhcmUgYXJndW1lbnQgdGlsbCBnaXQgbG9nOiIKKworIzogZ2l0azozODQ0Cittc2dpZCAiRW50ZXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUsIG9uZSBwZXIgbGluZToiCittc2dzdHIgIkFuZ2UgZmlsZXIgb2NoIGthdGFsb2dlciBhdHQgdGEgbWVkLCBlbiBwZXIgcmFkOiIKKworIzogZ2l0azozODQ1Cittc2dpZCAiQ29tbWFuZCB0byBnZW5lcmF0ZSBtb3JlIGNvbW1pdHMgdG8gaW5jbHVkZToiCittc2dzdHIgIktvbW1hbmRvIGbDtnIgYXR0IGdlbmVyZXJhIGZsZXIgaW5jaGVja25pbmdhciBhdHQgdGEgbWVkOiIKKworIzogZ2l0azozOTY3Cittc2dpZCAiR2l0azogZWRpdCB2aWV3IgorbXNnc3RyICJHaXRrOiByZWRpZ2VyYSB2eSIKKworIzogZ2l0azozOTc1Cittc2dpZCAiLS0gY3JpdGVyaWEgZm9yIHNlbGVjdGluZyByZXZpc2lvbnMiCittc2dzdHIgIiAtIGtyaXRlcmllciBmw7ZyIHZhbCBhdiByZXZpc2lvbmVyIgorCisjOiBnaXRrOjM5ODAKK21zZ2lkICJWaWV3IE5hbWUiCittc2dzdHIgIk5hbW4gcMOlIHZ5IgorCisjOiBnaXRrOjQwNTUKK21zZ2lkICJBcHBseSAoRjUpIgorbXNnc3RyICJBbnbDpG5kIChGNSkiCisKKyM6IGdpdGs6NDA5MworbXNnaWQgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiIKK21zZ3N0ciAiRmVsIGkgYXJndW1lbnQgZsO2ciB2YWwgYXYgaW5jaGVja25pbmdhcjoiCisKKyM6IGdpdGs6NDE0NiBnaXRrOjQxOTggZ2l0azo0NjQ2IGdpdGs6NDY2MCBnaXRrOjU5MjEgZ2l0azoxMTUzNCBnaXRrOjExNTM1Cittc2dpZCAiTm9uZSIKK21zZ3N0ciAiSW5nZXQiCisKKyM6IGdpdGs6NDU5NCBnaXRrOjY0NDEgZ2l0azo4Mjg3IGdpdGs6ODMwMgorbXNnaWQgIkRhdGUiCittc2dzdHIgIkRhdHVtIgorCisjOiBnaXRrOjQ1OTQgZ2l0azo2NDQxCittc2dpZCAiQ0RhdGUiCittc2dzdHIgIlNrYXBhdCBkYXR1bSIKKworIzogZ2l0azo0NzQzIGdpdGs6NDc0OAorbXNnaWQgIkRlc2NlbmRhbnQiCittc2dzdHIgIkF2a29tbGluZyIKKworIzogZ2l0azo0NzQ0Cittc2dpZCAiTm90IGRlc2NlbmRhbnQiCittc2dzdHIgIkludGUgYXZrb21saW5nIgorCisjOiBnaXRrOjQ3NTEgZ2l0azo0NzU2Cittc2dpZCAiQW5jZXN0b3IiCittc2dzdHIgIkbDtnJmYWRlciIKKworIzogZ2l0azo0NzUyCittc2dpZCAiTm90IGFuY2VzdG9yIgorbXNnc3RyICJJbnRlIGbDtnJmYWRlciIKKworIzogZ2l0azo1MDQyCittc2dpZCAiTG9jYWwgY2hhbmdlcyBjaGVja2VkIGluIHRvIGluZGV4IGJ1dCBub3QgY29tbWl0dGVkIgorbXNnc3RyICJMb2thbGEgw6RuZHJpbmdhciBzcGFyYWRlIGkgaW5kZXhldCBtZW4gaW50ZSBpbmNoZWNrYWRlIgorCisjOiBnaXRrOjUwNzgKK21zZ2lkICJMb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBub3QgY2hlY2tlZCBpbiB0byBpbmRleCIKK21zZ3N0ciAiTG9rYWxhIMOkbmRyaW5nYXIsIGVqIHNwYXJhZGUgaSBpbmRleGV0IgorCisjOiBnaXRrOjY3NTkKK21zZ2lkICJtYW55IgorbXNnc3RyICJtw6VuZ2EiCisKKyM6IGdpdGs6Njk0MgogbXNnaWQgIlRhZ3M6IgogbXNnc3RyICJUYWdnYXI6IgogCi0jOiBnaXRrOjYwNjYgZ2l0azo2MDcyIGdpdGs6NzI4MAorIzogZ2l0azo2OTU5IGdpdGs6Njk2NSBnaXRrOjgyODAKIG1zZ2lkICJQYXJlbnQiCiBtc2dzdHIgIkbDtnLDpGxkZXIiCiAKLSM6IGdpdGs6NjA3NworIzogZ2l0azo2OTcwCiBtc2dpZCAiQ2hpbGQiCiBtc2dzdHIgIkJhcm4iCiAKLSM6IGdpdGs6NjA4NgorIzogZ2l0azo2OTc5CiBtc2dpZCAiQnJhbmNoIgogbXNnc3RyICJHcmVuIgogCi0jOiBnaXRrOjYwODkKKyM6IGdpdGs6Njk4MgogbXNnaWQgIkZvbGxvd3MiCiBtc2dzdHIgIkbDtmxqZXIiCiAKLSM6IGdpdGs6NjA5MgorIzogZ2l0azo2OTg1CiBtc2dpZCAiUHJlY2VkZXMiCiBtc2dzdHIgIkbDtnJlZ8OlciIKIAotIzogZ2l0azo2Mzc4Ci1tc2dpZCAiRXJyb3IgZ2V0dGluZyBtZXJnZSBkaWZmczoiCi1tc2dzdHIgIkZlbCB2aWQgaMOkbXRuaW5nIGF2IHNhbW1hbnNsYWduaW5nc2RpZmY6IgorIzogZ2l0azo3NTIyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBkaWZmczogJXMiCittc2dzdHIgIkZlbCB2aWQgaMOkbXRuaW5nIGF2IGRpZmY6ICVzIgogCi0jOiBnaXRrOjcxMTMKKyM6IGdpdGs6ODEwOAogbXNnaWQgIkdvdG86IgogbXNnc3RyICJHw6UgdGlsbDoiCiAKLSM6IGdpdGs6NzExNQotbXNnaWQgIlNIQTEgSUQ6IgotbXNnc3RyICJTSEExLWlkOiIKLQotIzogZ2l0azo3MTM0CisjOiBnaXRrOjgxMjkKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJTaG9ydCBTSEExIGlkICVzIGlzIGFtYmlndW91cyIKIG1zZ3N0ciAiRsO2cmtvcnRhdCBTSEExLWlkICVzIMOkciB0dmV0eWRpZ3QiCiAKLSM6IGdpdGs6NzE0NgorIzogZ2l0azo4MTM2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJSZXZpc2lvbmVuICVzIMOkciBpbnRlIGvDpG5kIgorCisjOiBnaXRrOjgxNDYKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJTSEExIGlkICVzIGlzIG5vdCBrbm93biIKIG1zZ3N0ciAiU0hBLWlkOnQgJXMgw6RyIGludGUga8OkbnQiCiAKLSM6IGdpdGs6NzE0OAorIzogZ2l0azo4MTQ4CiAjLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVGFnL0hlYWQgJXMgaXMgbm90IGtub3duIgotbXNnc3RyICJUYWdnL2h1dnVkICVzIMOkciBva8OkbnQiCittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGluIHRoZSBjdXJyZW50IHZpZXciCittc2dzdHIgIlJldmlzaW9uZW4gJXMgZmlubnMgaW50ZSBpIGRlbiBudXZhcmFuZGUgdnluIgogCi0jOiBnaXRrOjcyOTAKKyM6IGdpdGs6ODI5MAogbXNnaWQgIkNoaWxkcmVuIgogbXNnc3RyICJCYXJuIgogCi0jOiBnaXRrOjczNDcKKyM6IGdpdGs6ODM0OAogIywgdGNsLWZvcm1hdAogbXNnaWQgIlJlc2V0ICVzIGJyYW5jaCB0byBoZXJlIgogbXNnc3RyICLDhXRlcnN0w6RsbCBncmVuZW4gJXMgaGl0IgogCi0jOiBnaXRrOjczNDkKKyM6IGdpdGs6ODM1MAogbXNnaWQgIkRldGFjaGVkIGhlYWQ6IGNhbid0IHJlc2V0IgogbXNnc3RyICJGcsOlbmtvcHBsYWQgaGVhZDoga2FuIGludGUgw6V0ZXJzdMOkbGxhIgogCi0jOiBnaXRrOjczODEKKyM6IGdpdGs6ODQ1OSBnaXRrOjg0NjUKK21zZ2lkICJTa2lwcGluZyBtZXJnZSBjb21taXQgIgorbXNnc3RyICJIb3BwYXIgw7Z2ZXIgc2FtbWFuc2xhZ25pbmdzaW5jaGVja25pbmcgIgorCisjOiBnaXRrOjg0NzQgZ2l0azo4NDc5Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBwYXRjaCBJRCBmb3IgIgorbXNnc3RyICJGZWwgdmlkIGjDpG10bmluZyBhdiBwYXRjaC1pZCBmw7ZyICIKKworIzogZ2l0azo4NDc1IGdpdGs6ODQ4MAorbXNnaWQgIiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiAtIHN0YW5uYXJcbiIKKworIzogZ2l0azo4NDg1IGdpdGs6ODQ4OCBnaXRrOjg0OTYgZ2l0azo4NTEwIGdpdGs6ODUxOQorbXNnaWQgIkNvbW1pdCAiCittc2dzdHIgIkluY2hlY2tuaW5nICIKKworIzogZ2l0azo4NDg5Cittc2dpZCAiIgorIiBpcyB0aGUgc2FtZSBwYXRjaCBhc1xuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIgw6RyIHNhbW1hIHBhdGNoIHNvbVxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6ODQ5NworbXNnaWQgIiIKKyIgZGlmZmVycyBmcm9tXG4iCisiICAgICAgICIKK21zZ3N0ciAiIgorIiBza2lsamVyIHNpZyBmcsOlblxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6ODQ5OQorbXNnaWQgIiIKKyJEaWZmIG9mIGNvbW1pdHM6XG4iCisiXG4iCittc2dzdHIgIlNraWxsbmFkIG1lbGxhbiBpbmNoZWNrbmluZ2FyOlxuIgorIlxuIgorIiIKKworIzogZ2l0azo4NTExIGdpdGs6ODUyMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiBoYXMgJXMgY2hpbGRyZW4gLSBzdG9wcGluZ1xuIgorbXNnc3RyICIgaGFyICVzIGJhcm4gLSBzdGFubmFyXG4iCisKKyM6IGdpdGs6ODUzOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0IHRvIGZpbGU6ICVzIgorbXNnc3RyICJGZWwgdmlkIHNrcml2bmluZyBhdiBpbmNoZWNrbmluZyB0aWxsIGZpbDogJXMiCisKKyM6IGdpdGs6ODU0NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGRpZmZpbmcgY29tbWl0czogJXMiCittc2dzdHIgIkZlbCB2aWQgasOkbWbDtnJlbHNlIGF2IGluY2hlY2tuaW5nYXI6ICVzIgorCisjOiBnaXRrOjg1NzUKIG1zZ2lkICJUb3AiCiBtc2dzdHIgIlRvcHAiCiAKLSM6IGdpdGs6NzM4MgorIzogZ2l0azo4NTc2CiBtc2dpZCAiRnJvbSIKIG1zZ3N0ciAiRnLDpW4iCiAKLSM6IGdpdGs6NzM4NworIzogZ2l0azo4NTgxCiBtc2dpZCAiVG8iCiBtc2dzdHIgIlRpbGwiCiAKLSM6IGdpdGs6NzQxMAorIzogZ2l0azo4NjA1CiBtc2dpZCAiR2VuZXJhdGUgcGF0Y2giCiBtc2dzdHIgIkdlbmVyZXJhIHBhdGNoIgogCi0jOiBnaXRrOjc0MTIKKyM6IGdpdGs6ODYwNwogbXNnaWQgIkZyb206IgogbXNnc3RyICJGcsOlbjoiCiAKLSM6IGdpdGs6NzQyMQorIzogZ2l0azo4NjE2CiBtc2dpZCAiVG86IgogbXNnc3RyICJUaWxsOiIKIAotIzogZ2l0azo3NDMwCisjOiBnaXRrOjg2MjUKIG1zZ2lkICJSZXZlcnNlIgogbXNnc3RyICJWw6RuZCIKIAotIzogZ2l0azo3NDMyIGdpdGs6NzYwNworIzogZ2l0azo4NjI3IGdpdGs6ODgyMgogbXNnaWQgIk91dHB1dCBmaWxlOiIKIG1zZ3N0ciAiVXRkYXRhZmlsOiIKIAotIzogZ2l0azo3NDM4CisjOiBnaXRrOjg2MzMKIG1zZ2lkICJHZW5lcmF0ZSIKIG1zZ3N0ciAiR2VuZXJlcmEiCiAKLSM6IGdpdGs6NzQ3NAorIzogZ2l0azo4NjcxCiBtc2dpZCAiRXJyb3IgY3JlYXRpbmcgcGF0Y2g6IgogbXNnc3RyICJGZWwgdmlkIGdlbmVyZXJpbmcgYXYgcGF0Y2g6IgogCi0jOiBnaXRrOjc0OTYgZ2l0azo3NTk1IGdpdGs6NzY0OQorIzogZ2l0azo4Njk0IGdpdGs6ODgxMCBnaXRrOjg4NjcKIG1zZ2lkICJJRDoiCiBtc2dzdHIgIklkOiIKIAotIzogZ2l0azo3NTA1CisjOiBnaXRrOjg3MDMKIG1zZ2lkICJUYWcgbmFtZToiCiBtc2dzdHIgIlRhZ2duYW1uOiIKIAotIzogZ2l0azo3NTA5IGdpdGs6NzY1OQorIzogZ2l0azo4NzA2Cittc2dpZCAiVGFnIG1lc3NhZ2UgaXMgb3B0aW9uYWwiCittc2dzdHIgIlRhZ2dtZWRkZWxhbmRldCDDpHIgdmFsZnJpdHQiCisKKyM6IGdpdGs6ODcwOAorbXNnaWQgIlRhZyBtZXNzYWdlOiIKK21zZ3N0ciAiVGFnZ21lZGRlbGFuZGU6IgorCisjOiBnaXRrOjg3MTIgZ2l0azo4ODc2CiBtc2dpZCAiQ3JlYXRlIgogbXNnc3RyICJTa2FwYSIKIAotIzogZ2l0azo3NTI0CisjOiBnaXRrOjg3MzAKIG1zZ2lkICJObyB0YWcgbmFtZSBzcGVjaWZpZWQiCiBtc2dzdHIgIkluZ2V0IHRhZ2duYW1uIGFuZ2F2cyIKIAotIzogZ2l0azo3NTI4CisjOiBnaXRrOjg3MzQKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJUYWcgXCIlc1wiIGFscmVhZHkgZXhpc3RzIgogbXNnc3RyICJUYWdnZW4gXCIlc1wiIGZpbm5zIHJlZGFuIgogCi0jOiBnaXRrOjc1MzQKKyM6IGdpdGs6ODc0NAogbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRhZzoiCiBtc2dzdHIgIkZlbCB2aWQgc2thcGFuZGUgYXYgdGFnZzoiCiAKLSM6IGdpdGs6NzYwNAorIzogZ2l0azo4ODE5CiBtc2dpZCAiQ29tbWFuZDoiCiBtc2dzdHIgIktvbW1hbmRvOiIKIAotIzogZ2l0azo3NjEyCisjOiBnaXRrOjg4MjcKIG1zZ2lkICJXcml0ZSIKIG1zZ3N0ciAiU2tyaXYiCiAKLSM6IGdpdGs6NzYyOAorIzogZ2l0azo4ODQ1CiBtc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgogbXNnc3RyICJGZWwgdmlkIHNrcml2bmluZyBhdiBpbmNoZWNrbmluZzoiCiAKLSM6IGdpdGs6NzY1NAorIzogZ2l0azo4ODcyCiBtc2dpZCAiTmFtZToiCiBtc2dzdHIgIk5hbW46IgogCi0jOiBnaXRrOjc2NzQKKyM6IGdpdGs6ODg5NQogbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IGEgbmFtZSBmb3IgdGhlIG5ldyBicmFuY2giCiBtc2dzdHIgIkFuZ2UgZXR0IG5hbW4gZsO2ciBkZW4gbnlhIGdyZW5lbiIKIAotIzogZ2l0azo3NzAzCisjOiBnaXRrOjg5MDAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRlPyIKK21zZ3N0ciAiR3JlbmVuIFwiJXNcIiBmaW5ucyByZWRhbi4gU2tyaXZhIMO2dmVyPyIKKworIzogZ2l0azo4OTY2CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQ29tbWl0ICVzIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZS1hcHBseSBpdD8iCiBtc2dzdHIgIiIKICJJbmNoZWNrbmluZ2VuICVzIGZpbm5zIHJlZGFuIHDDpSBncmVuZW4gJXMgLS0gc2thbGwgZGVuIHZlcmtsaWdlbiBhcHBsaWNlcmFzICIKICJww6Ugbnl0dD8iCiAKLSM6IGdpdGs6NzcwOAorIzogZ2l0azo4OTcxCiBtc2dpZCAiQ2hlcnJ5LXBpY2tpbmciCiBtc2dzdHIgIlBsb2NrYXIiCiAKLSM6IGdpdGs6NzcyMAorIzogZ2l0azo4OTgwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gZmlsZSAnJXMnLlxuIgorIlBsZWFzZSBjb21taXQsIHJlc2V0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKK21zZ3N0ciAiIgorIkNoZXJyeS1waWNrIG1pc3NseWNrYWRlcyBww6UgZ3J1bmQgYXYgbG9rYWxhIMOkbmRyaW5nYXIgaSBmaWxlbiBcIiVzXCIuXG4iCisiQ2hlY2thIGluLCDDpXRlcnN0w6RsbCBlbGxlciBzcGFyYSB1bmRhbiAoc3Rhc2gpIGRpbmEgw6RuZHJpbmdhciBvY2ggZsO2cnPDtmsgIgorImlnZW4uIgorCisjOiBnaXRrOjg5ODYKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCisiRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCittc2dzdHIgIiIKKyJDaGVycnktcGljayBtaXNzbHlja2FkZXMgcMOlIGdydW5kIGF2IGVuIHNhbW1hbnNsYWduaW5nc2tvbmZsaWt0LlxuIgorIlZpbGwgZHUga8O2cmEgZ2l0IGNpdG9vbCBmw7ZyIGF0dCBsw7ZzYSBkZW4/IgorCisjOiBnaXRrOjkwMDIKIG1zZ2lkICJObyBjaGFuZ2VzIGNvbW1pdHRlZCIKIG1zZ3N0ciAiSW5nYSDDpG5kcmluZ2FyIGluY2hlY2thZGUiCiAKLSM6IGdpdGs6Nzc0NQorIzogZ2l0azo5MDI4CiBtc2dpZCAiQ29uZmlybSByZXNldCIKIG1zZ3N0ciAiQmVrcsOkZnRhIMOldGVyc3TDpGxsbmluZyIKIAotIzogZ2l0azo3NzQ3CisjOiBnaXRrOjkwMzAKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJSZXNldCBicmFuY2ggJXMgdG8gJXM/IgogbXNnc3RyICLDhXRlcnN0w6RsbGEgZ3JlbmVuICVzIHRpbGwgJXM/IgogCi0jOiBnaXRrOjc3NTEKKyM6IGdpdGs6OTAzMgogbXNnaWQgIlJlc2V0IHR5cGU6IgogbXNnc3RyICJUeXAgYXYgw6V0ZXJzdMOkbGxuaW5nOiIKIAotIzogZ2l0azo3NzU1CisjOiBnaXRrOjkwMzUKIG1zZ2lkICJTb2Z0OiBMZWF2ZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHVudG91Y2hlZCIKIG1zZ3N0ciAiTWp1azogUsO2ciBpbnRlIHV0Y2hlY2tuaW5nIG9jaCBpbmRleCIKIAotIzogZ2l0azo3NzU4CisjOiBnaXRrOjkwMzgKIG1zZ2lkICJNaXhlZDogTGVhdmUgd29ya2luZyB0cmVlIHVudG91Y2hlZCwgcmVzZXQgaW5kZXgiCiBtc2dzdHIgIkJsYW5kYWQ6IFLDtnIgaW50ZSB1dGNoZWNrbmluZywgw6V0ZXJzdMOkbGwgaW5kZXgiCiAKLSM6IGdpdGs6Nzc2MQorIzogZ2l0azo5MDQxCiBtc2dpZCAiIgogIkhhcmQ6IFJlc2V0IHdvcmtpbmcgdHJlZSBhbmQgaW5kZXhcbiIKICIoZGlzY2FyZCBBTEwgbG9jYWwgY2hhbmdlcykiCkBAIC03MzIsMTkgKzEwMzYsMTkgQEAKICJIw6VyZDogw4V0ZXJzdMOkbGwgdXRjaGVja25pbmcgb2NoIGluZGV4XG4iCiAiKGbDtnJrYXN0YXIgQUxMQSBsb2thbGEgw6RuZHJpbmdhcikiCiAKLSM6IGdpdGs6Nzc3NworIzogZ2l0azo5MDU4CiBtc2dpZCAiUmVzZXR0aW5nIgogbXNnc3RyICLDhXRlcnN0w6RsbGVyIgogCi0jOiBnaXRrOjc4MzQKKyM6IGdpdGs6OTExOAogbXNnaWQgIkNoZWNraW5nIG91dCIKIG1zZ3N0ciAiQ2hlY2thciB1dCIKIAotIzogZ2l0azo3ODg1CisjOiBnaXRrOjkxNzEKIG1zZ2lkICJDYW5ub3QgZGVsZXRlIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgYnJhbmNoIgogbXNnc3RyICJLYW4gaW50ZSB0YSBib3J0IGRlbiBqdXN0IG51IHV0Y2hlY2thZGUgZ3JlbmVuIgogCi0jOiBnaXRrOjc4OTEKKyM6IGdpdGs6OTE3NwogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICJUaGUgY29tbWl0cyBvbiBicmFuY2ggJXMgYXJlbid0IG9uIGFueSBvdGhlciBicmFuY2guXG4iCkBAIC03NTMsMTYgKzEwNTcsMTYgQEAKICJJbmNoZWNrbmluZ2FybmEgcMOlIGdyZW5lbiAlcyBleGlzdGVyYXIgaW50ZSBww6UgbsOlZ29uIGFubmFuIGdyZW4uXG4iCiAiVmlsbCBkdSB2ZXJrbGlnZW4gdGEgYm9ydCBncmVuZW4gJXM/IgogCi0jOiBnaXRrOjc5MjIKKyM6IGdpdGs6OTIwOAogIywgdGNsLWZvcm1hdAogbXNnaWQgIlRhZ3MgYW5kIGhlYWRzOiAlcyIKIG1zZ3N0ciAiVGFnZ2FyIG9jaCBodXZ1ZGVuOiAlcyIKIAotIzogZ2l0azo3OTM2CisjOiBnaXRrOjkyMjMKIG1zZ2lkICJGaWx0ZXIiCiBtc2dzdHIgIkZpbHRlciIKIAotIzogZ2l0azo4MjMwCisjOiBnaXRrOjk1MTgKIG1zZ2lkICIiCiAiRXJyb3IgcmVhZGluZyBjb21taXQgdG9wb2xvZ3kgaW5mb3JtYXRpb247IGJyYW5jaCBhbmQgcHJlY2VkaW5nL2ZvbGxvd2luZyAiCiAidGFnIGluZm9ybWF0aW9uIHdpbGwgYmUgaW5jb21wbGV0ZS4iCkBAIC03NzAsMTU0ICsxMDc0LDIyNCBAQAogIkZlbCB2aWQgbMOkc25pbmcgYXYgaW5mb3JtYXRpb24gb20gaW5jaGVja25pbmdzdG9wb2xvZ2k7IGluZm9ybWF0aW9uIG9tICIKICJncmVuYXIgb2NoIGbDtnJlZ8OlZW5kZS9zZW5hcmUgdGFnZ2FyIGtvbW1lciBpbnRlIHZhcmEga29tcGxldHQuIgogCi0jOiBnaXRrOjkyMTYKKyM6IGdpdGs6MTA1MDQKIG1zZ2lkICJUYWciCiBtc2dzdHIgIlRhZ2ciCiAKLSM6IGdpdGs6OTIxNgorIzogZ2l0azoxMDUwNAogbXNnaWQgIklkIgogbXNnc3RyICJJZCIKIAotIzogZ2l0azo5MjYyCisjOiBnaXRrOjEwNTU0CiBtc2dpZCAiR2l0ayBmb250IGNob29zZXIiCiBtc2dzdHIgIlRlY2tlbnNuaXR0c3bDpGxqYXJlIGbDtnIgR2l0ayIKIAotIzogZ2l0azo5Mjc5CisjOiBnaXRrOjEwNTcxCiBtc2dpZCAiQiIKIG1zZ3N0ciAiRiIKIAotIzogZ2l0azo5MjgyCisjOiBnaXRrOjEwNTc0CiBtc2dpZCAiSSIKIG1zZ3N0ciAiSyIKIAotIzogZ2l0azo5Mzc1CisjOiBnaXRrOjEwNjkyCiBtc2dpZCAiR2l0ayBwcmVmZXJlbmNlcyIKIG1zZ3N0ciAiSW5zdMOkbGxuaW5nYXIgZsO2ciBHaXRrIgogCi0jOiBnaXRrOjkzNzYKKyM6IGdpdGs6MTA2OTQKIG1zZ2lkICJDb21taXQgbGlzdCBkaXNwbGF5IG9wdGlvbnMiCiBtc2dzdHIgIkFsdGVybmF0aXYgZsO2ciBpbmNoZWNrbmluZ3NsaXN0dnkiCiAKLSM6IGdpdGs6OTM3OQorIzogZ2l0azoxMDY5NwogbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKGxpbmVzKSIKIG1zZ3N0ciAiTWF4aW1hbCBncmFmYnJlZGQgKHJhZGVyKSIKIAotIzogZ2l0azo5MzgzCisjOiBnaXRrOjEwNzAwCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAoJSBvZiBwYW5lKSIKIG1zZ3N0ciAiTWF4aW1hbCBncmFmYnJlZGQgKCUgYXYgcnV0YSkiCiAKLSM6IGdpdGs6OTM4OAorIzogZ2l0azoxMDcwMwogbXNnaWQgIlNob3cgbG9jYWwgY2hhbmdlcyIKIG1zZ3N0ciAiVmlzYSBsb2thbGEgw6RuZHJpbmdhciIKIAotIzogZ2l0azo5MzkzCisjOiBnaXRrOjEwNzA2CiBtc2dpZCAiQXV0by1zZWxlY3QgU0hBMSIKIG1zZ3N0ciAiVsOkbGogU0hBMSBhdXRvbWF0aXNrdCIKIAotIzogZ2l0azo5Mzk4CisjOiBnaXRrOjEwNzA5Cittc2dpZCAiSGlkZSByZW1vdGUgcmVmcyIKK21zZ3N0ciAiRMO2bGogZmrDpHJyLXJlZmVyZW5zZXIiCisKKyM6IGdpdGs6MTA3MTMKIG1zZ2lkICJEaWZmIGRpc3BsYXkgb3B0aW9ucyIKIG1zZ3N0ciAiQWx0ZXJuYXRpdiBmw7ZyIGRpZmZ2eSIKIAotIzogZ2l0azo5NDAwCisjOiBnaXRrOjEwNzE1CiBtc2dpZCAiVGFiIHNwYWNpbmciCiBtc2dzdHIgIkJsYW5rc3RlZyBmw7ZyIHRhYnVsYXRvcnRlY2tlbiIKIAotIzogZ2l0azo5NDA0CisjOiBnaXRrOjEwNzE4CiBtc2dpZCAiRGlzcGxheSBuZWFyYnkgdGFncyIKIG1zZ3N0ciAiVmlzYSBuw6RybGlnZ2FuZGUgdGFnZ2FyIgogCi0jOiBnaXRrOjk0MDkKKyM6IGdpdGs6MTA3MjEKIG1zZ2lkICJMaW1pdCBkaWZmcyB0byBsaXN0ZWQgcGF0aHMiCiBtc2dzdHIgIkJlZ3LDpG5zYSBkaWZmIHRpbGwgbGlzdGFkZSBzw7ZrdsOkZ2FyIgogCi0jOiBnaXRrOjk0MTQKKyM6IGdpdGs6MTA3MjQKIG1zZ2lkICJTdXBwb3J0IHBlci1maWxlIGVuY29kaW5ncyIKLW1zZ3N0ciAiIgorbXNnc3RyICJTdMO2ZCBmw7ZyIGZpbHNwZWNpZmlrYSB0ZWNrZW5rb2RuaW5nYXIiCiAKLSM6IGdpdGs6OTQyMQorIzogZ2l0azoxMDczMCBnaXRrOjEwODE5CiBtc2dpZCAiRXh0ZXJuYWwgZGlmZiB0b29sIgogbXNnc3RyICJFeHRlcm50IGRpZmYtdmVya3R5ZyIKIAotIzogZ2l0azo5NDIzCisjOiBnaXRrOjEwNzMxCiBtc2dpZCAiQ2hvb3NlLi4uIgogbXNnc3RyICJWw6Rsai4uLiIKIAotIzogZ2l0azo5NDI4CisjOiBnaXRrOjEwNzM2Cittc2dpZCAiR2VuZXJhbCBvcHRpb25zIgorbXNnc3RyICJBbGxtw6RubmEgaW5zdMOkbGxuaW5nYXIiCisKKyM6IGdpdGs6MTA3MzkKK21zZ2lkICJVc2UgdGhlbWVkIHdpZGdldHMiCittc2dzdHIgIkFudsOkbmQgdGVtYSBww6UgZsO2bnN0ZXJlbGVtZW50IgorCisjOiBnaXRrOjEwNzQxCittc2dpZCAiKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KSIKK21zZ3N0ciAiKMOkbmRyaW5nZW4ga3LDpHZlciBvbXN0YXJ0KSIKKworIzogZ2l0azoxMDc0MworbXNnaWQgIihjdXJyZW50bHkgdW5hdmFpbGFibGUpIgorbXNnc3RyICIoZsO2ciBuw6RydmFyYW5kZSBpbnRlIHRpbGxnw6RuZ2xpZ3QpIgorCisjOiBnaXRrOjEwNzQ3CiBtc2dpZCAiQ29sb3JzOiBwcmVzcyB0byBjaG9vc2UiCiBtc2dzdHIgIkbDpHJnZXI6IHRyeWNrIGbDtnIgYXR0IHbDpGxqYSIKIAotIzogZ2l0azo5NDMxCisjOiBnaXRrOjEwNzUwCittc2dpZCAiSW50ZXJmYWNlIgorbXNnc3RyICJHcsOkbnNzbml0dCIKKworIzogZ2l0azoxMDc1MQorbXNnaWQgImludGVyZmFjZSIKK21zZ3N0ciAiZ3LDpG5zc25pdHQiCisKKyM6IGdpdGs6MTA3NTQKIG1zZ2lkICJCYWNrZ3JvdW5kIgogbXNnc3RyICJCYWtncnVuZCIKIAotIzogZ2l0azo5NDM1CisjOiBnaXRrOjEwNzU1IGdpdGs6MTA3ODUKK21zZ2lkICJiYWNrZ3JvdW5kIgorbXNnc3RyICJiYWtncnVuZCIKKworIzogZ2l0azoxMDc1OAogbXNnaWQgIkZvcmVncm91bmQiCiBtc2dzdHIgIkbDtnJncnVuZCIKIAotIzogZ2l0azo5NDM5CisjOiBnaXRrOjEwNzU5Cittc2dpZCAiZm9yZWdyb3VuZCIKK21zZ3N0ciAiZsO2cmdydW5kIgorCisjOiBnaXRrOjEwNzYyCiBtc2dpZCAiRGlmZjogb2xkIGxpbmVzIgogbXNnc3RyICJEaWZmOiBnYW1sYSByYWRlciIKIAotIzogZ2l0azo5NDQ0CisjOiBnaXRrOjEwNzYzCittc2dpZCAiZGlmZiBvbGQgbGluZXMiCittc2dzdHIgImRpZmYgZ2FtbGEgcmFkZXIiCisKKyM6IGdpdGs6MTA3NjcKIG1zZ2lkICJEaWZmOiBuZXcgbGluZXMiCiBtc2dzdHIgIkRpZmY6IG55YSByYWRlciIKIAotIzogZ2l0azo5NDQ5CisjOiBnaXRrOjEwNzY4Cittc2dpZCAiZGlmZiBuZXcgbGluZXMiCittc2dzdHIgImRpZmYgbnlhIHJhZGVyIgorCisjOiBnaXRrOjEwNzcyCiBtc2dpZCAiRGlmZjogaHVuayBoZWFkZXIiCiBtc2dzdHIgIkRpZmY6IGRlbGh1dnVkIgogCi0jOiBnaXRrOjk0NTUKKyM6IGdpdGs6MTA3NzQKK21zZ2lkICJkaWZmIGh1bmsgaGVhZGVyIgorbXNnc3RyICJkaWZmIGRlbGh1dnVkIgorCisjOiBnaXRrOjEwNzc4Cittc2dpZCAiTWFya2VkIGxpbmUgYmciCittc2dzdHIgIk1hcmtlcmFkIHJhZCBiYWtncnVuZCIKKworIzogZ2l0azoxMDc4MAorbXNnaWQgIm1hcmtlZCBsaW5lIGJhY2tncm91bmQiCittc2dzdHIgIm1hcmtlcmFkIHJhZCBiYWtncnVuZCIKKworIzogZ2l0azoxMDc4NAogbXNnaWQgIlNlbGVjdCBiZyIKIG1zZ3N0ciAiTWFya2VyYWQgYmFrZ3J1bmQiCiAKLSM6IGdpdGs6OTQ1OQorIzogZ2l0azoxMDc4OAogbXNnaWQgIkZvbnRzOiBwcmVzcyB0byBjaG9vc2UiCiBtc2dzdHIgIlRlY2tlbnNuaXR0OiB0cnljayBmw7ZyIGF0dCB2w6RsamEiCiAKLSM6IGdpdGs6OTQ2MQorIzogZ2l0azoxMDc5MAogbXNnaWQgIk1haW4gZm9udCIKIG1zZ3N0ciAiSHV2dWR0ZWNrZW5zbml0dCIKIAotIzogZ2l0azo5NDYyCisjOiBnaXRrOjEwNzkxCiBtc2dpZCAiRGlmZiBkaXNwbGF5IGZvbnQiCiBtc2dzdHIgIlRlY2tlbnNuaXR0IGbDtnIgZGlmZnZpc25pbmciCiAKLSM6IGdpdGs6OTQ2MworIzogZ2l0azoxMDc5MgogbXNnaWQgIlVzZXIgaW50ZXJmYWNlIGZvbnQiCiBtc2dzdHIgIlRlY2tlbnNuaXR0IGbDtnIgYW52w6RuZGFyZ3LDpG5zc25pdHQiCiAKLSM6IGdpdGs6OTQ4OAorIzogZ2l0azoxMDgyOQogIywgdGNsLWZvcm1hdAogbXNnaWQgIkdpdGs6IGNob29zZSBjb2xvciBmb3IgJXMiCiBtc2dzdHIgIkdpdGs6IHbDpGxqIGbDpHJnIGbDtnIgJXMiCiAKLSM6IGdpdGs6OTkzNAotbXNnaWQgIiIKLSJTb3JyeSwgZ2l0ayBjYW5ub3QgcnVuIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFRjbC9Uay5cbiIKLSIgR2l0ayByZXF1aXJlcyBhdCBsZWFzdCBUY2wvVGsgOC40LiIKLW1zZ3N0ciAiIgotIkdpdGsga2FuIHR5dsOkcnIgaW50ZSBrw7ZyYSBtZWQgZGVubmEgdmVyc2lvbiBhdiBUY2wvVGsuXG4iCi0iIEdpdGsga3LDpHZlciDDpXRtaW5zdG9uZSBUY2wvVGsgOC40LiIKLQotIzogZ2l0azoxMDA0NworIzogZ2l0azoxMTQzMwogbXNnaWQgIkNhbm5vdCBmaW5kIGEgZ2l0IHJlcG9zaXRvcnkgaGVyZS4iCiBtc2dzdHIgIkhpdHRhciBpbmdldCBnaXRrLWFya2l2IGjDpHIuIgogCi0jOiBnaXRrOjEwMDUxCisjOiBnaXRrOjExNDM3CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQ2Fubm90IGZpbmQgdGhlIGdpdCBkaXJlY3RvcnkgXCIlc1wiLiIKIG1zZ3N0ciAiSGl0dGFyIGludGUgZ2l0LWthdGFsb2dlbiBcIiVzXCIuIgogCi0jOiBnaXRrOjEwMDk4CisjOiBnaXRrOjExNDg0CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lIgogbXNnc3RyICJUdmV0eWRpZ3QgYXJndW1lbnQgXCIlc1wiOiBiw6VkZSByZXZpc2lvbiBvY2ggZmlsbmFtbiIKIAotIzogZ2l0azoxMDExMAorIzogZ2l0azoxMTQ5NgogbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCiBtc2dzdHIgIkZlbGFrdGlnYSBhcmd1bWVudCB0aWxsIGdpdGs6IgogCi0jOiBnaXRrOjEwMTcwCisjOiBnaXRrOjExNTg3CiBtc2dpZCAiQ29tbWFuZCBsaW5lIgogbXNnc3RyICJLb21tYW5kb3JhZCIKKworI34gbXNnaWQgIlNIQTEgSUQ6ICIKKyN+IG1zZ3N0ciAiU0hBMS1pZDogIgorCisjfiBtc2dpZCAiLSBzdG9wcGluZ1xuIgorI34gbXNnc3RyICItIHN0YW5uYXJcbiIKKworI34gbXNnaWQgIiIKKyN+ICJTb3JyeSwgZ2l0ayBjYW5ub3QgcnVuIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFRjbC9Uay5cbiIKKyN+ICIgR2l0ayByZXF1aXJlcyBhdCBsZWFzdCBUY2wvVGsgOC40LiIKKyN+IG1zZ3N0ciAiIgorI34gIkdpdGsga2FuIHR5dsOkcnIgaW50ZSBrw7ZyYSBtZWQgZGVubmEgdmVyc2lvbiBhdiBUY2wvVGsuXG4iCisjfiAiIEdpdGsga3LDpHZlciDDpXRtaW5zdG9uZSBUY2wvVGsgOC40LiIKKworI34gbXNnaWQgIlRhZy9IZWFkICVzIGlzIG5vdCBrbm93biIKKyN+IG1zZ3N0ciAiVGFnZy9odXZ1ZCAlcyDDpHIgb2vDpG50IgorCisjfiBtc2dpZCAiL1x0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQsIG9yIHJlZG8gZmluZCIKKyN+IG1zZ3N0ciAiL1x0XHRHw6UgdGlsbCBuw6RzdGEgc8O2a3Ryw6RmZiwgZWxsZXIgc8O2ayBww6Ugbnl0dCIKKworI34gbXNnaWQgIk5hbWUiCisjfiBtc2dzdHIgIk5hbW4iCmRpZmYgLS1naXQgYS9naXR3ZWIvSU5TVEFMTCBiL2dpdHdlYi9JTlNUQUxMCmluZGV4IDE4YzljZTMuLmI3NmEwY2YgMTAwNjQ0Ci0tLSBhL2dpdHdlYi9JTlNUQUxMCisrKyBiL2dpdHdlYi9JTlNUQUxMCkBAIC0xMjMsNiArMTIzLDE1IEBACiAJJGZlYXR1cmV7J3NuYXBzaG90J317J2RlZmF1bHQnfSA9IFsnemlwJywgJ3RneiddOwogCSRmZWF0dXJleydzbmFwc2hvdCd9eydvdmVycmlkZSd9ID0gMTsKIAorSWYgeW91IGFsbG93IG92ZXJyaWRpbmcgZm9yIHRoZSBzbmFwc2hvdCBmZWF0dXJlLCB5b3UgY2FuIHNwZWNpZnkgd2hpY2gKK3NuYXBzaG90IGZvcm1hdHMgYXJlIGdsb2JhbGx5IGRpc2FibGVkLiBZb3UgY2FuIGFsc28gYWRkIGFueSBjb21tYW5kIGxpbmUKK29wdGlvbnMgeW91IHdhbnQgKHN1Y2ggYXMgc2V0dGluZyB0aGUgY29tcHJlc3Npb24gbGV2ZWwpLiBGb3IgaW5zdGFuY2UsCit5b3UgY2FuIGRpc2FibGUgWmlwIGNvbXByZXNzZWQgc25hcHNob3RzIGFuZCBzZXQgR1ppcCB0byBydW4gYXQgbGV2ZWwgNiBieQorYWRkaW5nIHRoZSBmb2xsb3dpbmcgbGluZXMgdG8geW91ciAkR0lUV0VCX0NPTkZJRzoKKworCSRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyd6aXAnfXsnZGlzYWJsZWQnfSA9IDE7CisJJGtub3duX3NuYXBzaG90X2Zvcm1hdHN7J3Rneid9eydjb21wcmVzc29yJ30gPSBbJ2d6aXAnLCctNiddOworCiAKIEdpdHdlYiByZXBvc2l0b3JpZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2dpdHdlYi9NYWtlZmlsZSBiL2dpdHdlYi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWViMWVlCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0d2ViL01ha2VmaWxlCkBAIC0wLDAgKzEsMTI5IEBACisjIFRoZSBkZWZhdWx0IHRhcmdldCBvZiB0aGlzIE1ha2VmaWxlIGlzLi4uCithbGw6OgorCisjIERlZmluZSBWPTEgdG8gaGF2ZSBhIG1vcmUgdmVyYm9zZSBjb21waWxlLgorIworIyBEZWZpbmUgSlNNSU4gdG8gcG9pbnQgdG8gSmF2YVNjcmlwdCBtaW5pZmllciB0aGF0IGZ1bmN0aW9ucyBhcworIyBhIGZpbHRlciB0byBoYXZlIGdpdHdlYi5qcyBtaW5pZmllZC4KKyMKKworcHJlZml4ID89ICQoSE9NRSkKK2JpbmRpciA/PSAkKHByZWZpeCkvYmluCitSTSA/PSBybSAtZgorCisjIEphdmFTY3JpcHQgbWluaWZpZXIgaW52b2NhdGlvbiB0aGF0IGNhbiBmdW5jdGlvbiBhcyBmaWx0ZXIKK0pTTUlOID89CisKKyMgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBnaXR3ZWIKK0dJVFdFQl9DT05GSUcgPSBnaXR3ZWJfY29uZmlnLnBlcmwKK0dJVFdFQl9DT05GSUdfU1lTVEVNID0gL2V0Yy9naXR3ZWIuY29uZgorR0lUV0VCX0hPTUVfTElOS19TVFIgPSBwcm9qZWN0cworR0lUV0VCX1NJVEVOQU1FID0KK0dJVFdFQl9QUk9KRUNUUk9PVCA9IC9wdWIvZ2l0CitHSVRXRUJfUFJPSkVDVF9NQVhERVBUSCA9IDIwMDcKK0dJVFdFQl9FWFBPUlRfT0sgPQorR0lUV0VCX1NUUklDVF9FWFBPUlQgPQorR0lUV0VCX0JBU0VfVVJMID0KK0dJVFdFQl9MSVNUID0KK0dJVFdFQl9IT01FVEVYVCA9IGluZGV4dGV4dC5odG1sCitHSVRXRUJfQ1NTID0gZ2l0d2ViLmNzcworR0lUV0VCX0xPR08gPSBnaXQtbG9nby5wbmcKK0dJVFdFQl9GQVZJQ09OID0gZ2l0LWZhdmljb24ucG5nCitpZmRlZiBKU01JTgorR0lUV0VCX0pTID0gZ2l0d2ViLm1pbi5qcworZWxzZQorR0lUV0VCX0pTID0gZ2l0d2ViLmpzCitlbmRpZgorR0lUV0VCX1NJVEVfSEVBREVSID0KK0dJVFdFQl9TSVRFX0ZPT1RFUiA9CisKKyMgaW5jbHVkZSB1c2VyIGNvbmZpZworLWluY2x1ZGUgLi4vY29uZmlnLm1hay5hdXRvZ2VuCistaW5jbHVkZSAuLi9jb25maWcubWFrCisKKyMgZGV0ZXJtaW5lIHZlcnNpb24KKy4uL0dJVC1WRVJTSU9OLUZJTEU6IC5GT1JDRS1HSVQtVkVSU0lPTi1GSUxFCisJJChRVUlFVF9TVUJESVIwKS4uLyAkKFFVSUVUX1NVQkRJUjEpIEdJVC1WRVJTSU9OLUZJTEUKKworLWluY2x1ZGUgLi4vR0lULVZFUlNJT04tRklMRQorCisjIyMgQnVpbGQgcnVsZXMKKworU0hFTExfUEFUSCA/PSAkKFNIRUxMKQorUEVSTF9QQVRIICA/PSAvdXNyL2Jpbi9wZXJsCisKKyMgU2hlbGwgcXVvdGU7CitiaW5kaXJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKGJpbmRpcikpICAgICAgICAgIycKK1NIRUxMX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFNIRUxMX1BBVEgpKSAjJworUEVSTF9QQVRIX1NRICA9ICQoc3Vic3QgJywnXCcnLCQoUEVSTF9QQVRIKSkgICMnCisKKyMgUXVpZXQgZ2VuZXJhdGlvbiAodW5sZXNzIFY9MSkKK1FVSUVUX1NVQkRJUjAgID0gKyQoTUFLRSkgLUMgIyBzcGFjZSB0byBzZXBhcmF0ZSAtQyBhbmQgc3ViZGlyCitRVUlFVF9TVUJESVIxICA9CisKK2lmbmVxICgkKGZpbmRzdHJpbmcgJChNQUtFRkxBR1MpLHcpLHcpCitQUklOVF9ESVIgPSAtLW5vLXByaW50LWRpcmVjdG9yeQorZWxzZSAjICJtYWtlIC13IgorTk9fU1VCRElSID0gOgorZW5kaWYKKworaWZuZXEgKCQoZmluZHN0cmluZyAkKE1BS0VGTEFHUykscykscykKK2lmbmRlZiBWCisJUVVJRVQgICAgICAgICAgPSBACisJUVVJRVRfR0VOICAgICAgPSAkKFFVSUVUKWVjaG8gJyAgICcgR0VOICRAOworCVFVSUVUX1NVQkRJUjAgID0gK0BzdWJkaXI9CisJUVVJRVRfU1VCRElSMSAgPSA7JChOT19TVUJESVIpIGVjaG8gJyAgICcgU1VCRElSICQkc3ViZGlyOyBcCisJICAgICAgICAgICAgICAgICAkKE1BS0UpICQoUFJJTlRfRElSKSAtQyAkJHN1YmRpcgorCWV4cG9ydCBWCisJZXhwb3J0IFFVSUVUCisJZXhwb3J0IFFVSUVUX0dFTgorCWV4cG9ydCBRVUlFVF9TVUJESVIwCisJZXhwb3J0IFFVSUVUX1NVQkRJUjEKK2VuZGlmCitlbmRpZgorCithbGw6OiBnaXR3ZWIuY2dpCisKK2lmZGVmIEpTTUlOCitGSUxFUz1naXR3ZWIuY2dpIGdpdHdlYi5taW4uanMKK2dpdHdlYi5jZ2k6IGdpdHdlYi5wZXJsIGdpdHdlYi5taW4uanMKK2Vsc2UgIyAhSlNNSU4KK0ZJTEVTPWdpdHdlYi5jZ2kKK2dpdHdlYi5jZ2k6IGdpdHdlYi5wZXJsCitlbmRpZiAjIEpTTUlOCisKK2dpdHdlYi5jZ2k6CisJJChRVUlFVF9HRU4pJChSTSkgJEAgJEArICYmIFwKKwlzZWQgLWUgJzFzfCMhLipwZXJsfCMhJChQRVJMX1BBVEhfU1EpfCcgXAorCSAgICAtZSAnc3wrK0dJVF9WRVJTSU9OKyt8JChHSVRfVkVSU0lPTil8ZycgXAorCSAgICAtZSAnc3wrK0dJVF9CSU5ESVIrK3wkKGJpbmRpcil8ZycgXAorCSAgICAtZSAnc3wrK0dJVFdFQl9DT05GSUcrK3wkKEdJVFdFQl9DT05GSUcpfGcnIFwKKwkgICAgLWUgJ3N8KytHSVRXRUJfQ09ORklHX1NZU1RFTSsrfCQoR0lUV0VCX0NPTkZJR19TWVNURU0pfGcnIFwKKwkgICAgLWUgJ3N8KytHSVRXRUJfSE9NRV9MSU5LX1NUUisrfCQoR0lUV0VCX0hPTUVfTElOS19TVFIpfGcnIFwKKwkgICAgLWUgJ3N8KytHSVRXRUJfU0lURU5BTUUrK3wkKEdJVFdFQl9TSVRFTkFNRSl8ZycgXAorCSAgICAtZSAnc3wrK0dJVFdFQl9QUk9KRUNUUk9PVCsrfCQoR0lUV0VCX1BST0pFQ1RST09UKXxnJyBcCisJICAgIC1lICdzfCIrK0dJVFdFQl9QUk9KRUNUX01BWERFUFRIKysifCQoR0lUV0VCX1BST0pFQ1RfTUFYREVQVEgpfGcnIFwKKwkgICAgLWUgJ3N8KytHSVRXRUJfRVhQT1JUX09LKyt8JChHSVRXRUJfRVhQT1JUX09LKXxnJyBcCisJICAgIC1lICdzfCsrR0lUV0VCX1NUUklDVF9FWFBPUlQrK3wkKEdJVFdFQl9TVFJJQ1RfRVhQT1JUKXxnJyBcCisJICAgIC1lICdzfCsrR0lUV0VCX0JBU0VfVVJMKyt8JChHSVRXRUJfQkFTRV9VUkwpfGcnIFwKKwkgICAgLWUgJ3N8KytHSVRXRUJfTElTVCsrfCQoR0lUV0VCX0xJU1QpfGcnIFwKKwkgICAgLWUgJ3N8KytHSVRXRUJfSE9NRVRFWFQrK3wkKEdJVFdFQl9IT01FVEVYVCl8ZycgXAorCSAgICAtZSAnc3wrK0dJVFdFQl9DU1MrK3wkKEdJVFdFQl9DU1MpfGcnIFwKKwkgICAgLWUgJ3N8KytHSVRXRUJfTE9HTysrfCQoR0lUV0VCX0xPR08pfGcnIFwKKwkgICAgLWUgJ3N8KytHSVRXRUJfRkFWSUNPTisrfCQoR0lUV0VCX0ZBVklDT04pfGcnIFwKKwkgICAgLWUgJ3N8KytHSVRXRUJfSlMrK3wkKEdJVFdFQl9KUyl8ZycgXAorCSAgICAtZSAnc3wrK0dJVFdFQl9TSVRFX0hFQURFUisrfCQoR0lUV0VCX1NJVEVfSEVBREVSKXxnJyBcCisJICAgIC1lICdzfCsrR0lUV0VCX1NJVEVfRk9PVEVSKyt8JChHSVRXRUJfU0lURV9GT09URVIpfGcnIFwKKwkgICAgJDwgPiRAKyAmJiBcCisJY2htb2QgK3ggJEArICYmIFwKKwltdiAkQCsgJEAKKworaWZkZWYgSlNNSU4KK2dpdHdlYi5taW4uanM6IGdpdHdlYi5qcworCSQoUVVJRVRfR0VOKSQoSlNNSU4pIDwkPCA+JEAKK2VuZGlmICMgSlNNSU4KKworY2xlYW46CisJJChSTSkgJChGSUxFUykKKworLlBIT05ZOiBhbGwgY2xlYW4gLkZPUkNFLUdJVC1WRVJTSU9OLUZJTEUKZGlmZiAtLWdpdCBhL2dpdHdlYi9SRUFETUUgYi9naXR3ZWIvUkVBRE1FCmluZGV4IDkwNTZkMWUuLmFkNmEwNGMgMTAwNjQ0Ci0tLSBhL2dpdHdlYi9SRUFETUUKKysrIGIvZ2l0d2ViL1JFQURNRQpAQCAtOTIsNiArOTIsMTEgQEAKICAgIHdlYiBicm93c2VycyB0aGF0IHN1cHBvcnQgZmF2aWNvbnMgKHdlYnNpdGUgaWNvbnMpIG1heSBkaXNwbGF5IHRoZW0KICAgIGluIHRoZSBicm93c2VyJ3MgVVJMIGJhciBhbmQgbmV4dCB0byBzaXRlIG5hbWUgaW4gYm9va21hcmtzKS4gIFJlbGF0aXZlCiAgICB0byBiYXNlIFVSSSBvZiBnaXR3ZWIuICBbRGVmYXVsdDogZ2l0LWZhdmljb24ucG5nXQorICogR0lUV0VCX0pTCisgICBQb2ludHMgdG8gdGhlIGxvY2FsdGlvbiB3aGVyZSB5b3UgcHV0IGdpdHdlYi5qcyBvbiB5b3VyIHdlYiBzZXJ2ZXIKKyAgIChvciB0byBiZSBtb3JlIGdlbmVyaWMgVVJJIG9mIEphdmFTY3JpcHQgY29kZSB1c2VkIGJ5IGdpdHdlYikuCisgICBSZWxhdGl2ZSB0byBiYXNlIFVSSSBvZiBnaXR3ZWIuICBbRGVmYXVsdDogZ2l0d2ViLmpzIChvciBnaXR3ZWIubWluLmpzCisgICBpZiBKU01JTiBidWlsZCB2YXJpYWJsZSBpcyBkZWZpbmVkIC8gSmF2YVNjcmlwdCBtaW5pZmllciBpcyB1c2VkKV0KICAqIEdJVFdFQl9DT05GSUcKICAgIFRoaXMgUGVybCBmaWxlIHdpbGwgYmUgbG9hZGVkIHVzaW5nICdkbycgYW5kIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIGFueQogICAgb2YgdGhlIG9wdGlvbnMgYWJvdmUgYXMgd2VsbCBhcyBzb21lIG90aGVyIG9wdGlvbnMgLS0gc2VlIHRoZSAiUnVudGltZQpAQCAtMTY1LDYgKzE3MCwxMiBAQAogICAgRnVsbCBVUkwgYW5kIGFic29sdXRlIFVSTCBvZiBnaXR3ZWIgc2NyaXB0OwogICAgaW4gZWFybGllciB2ZXJzaW9ucyBvZiBnaXR3ZWIgeW91IG1pZ2h0IGhhdmUgbmVlZCB0byBzZXQgdGhvc2UKICAgIHZhcmlhYmxlcywgbm93IHRoZXJlIHNob3VsZCBiZSBubyBuZWVkIHRvIGRvIGl0LgorICogJGJhc2VfdXJsCisgICBCYXNlIFVSTCBmb3IgcmVsYXRpdmUgVVJMcyBpbiBwYWdlcyBnZW5lcmF0ZWQgYnkgZ2l0d2ViLAorICAgKGUuZy4gJGxvZ28sICRmYXZpY29uLCBAc3R5bGVzaGVldHMgaWYgdGhleSBhcmUgcmVsYXRpdmUgVVJMcyksCisgICBuZWVkZWQgYW5kIHVzZWQgb25seSBmb3IgVVJMcyB3aXRoIG5vbmVtcHR5IFBBVEhfSU5GTyB2aWEKKyAgIDxiYXNlIGhyZWY9IiRiYXNlX3VybCI+LiAgVXN1YWxseSBnaXR3ZWIgc2V0cyBpdHMgdmFsdWUgY29ycmVjdGx5LAorICAgYW5kIHRoZXJlIGlzIG5vIG5lZWQgdG8gc2V0IHRoaXMgdmFyaWFibGUsIGUuZy4gdG8gJG15X3VyaSBvciAiLyIuCiAgKiAkaG9tZV9saW5rCiAgICBUYXJnZXQgb2YgdGhlIGhvbWUgbGluayBvbiB0b3Agb2YgYWxsIHBhZ2VzICh0aGUgZmlyc3QgcGFydCBvZiB2aWV3CiAgICAiYnJlYWRjcnVtYnMiKS4gIEJ5IGRlZmF1bHQgc2V0IHRvIGFic29sdXRlIFVSSSBvZiBhIHBhZ2UgKCRteV91cmkpLgpAQCAtMjE3LDYgKzIyOCwxMSBAQAogICAgcmVwb3NpdG9yaWVzIGZyb20gbGF1bmNoaW5nIGNyb3NzLXNpdGUgc2NyaXB0aW5nIChYU1MpIGF0dGFja3MuICBTZXQgdGhpcwogICAgdG8gdHJ1ZSBpZiB5b3UgZG9uJ3QgdHJ1c3QgdGhlIGNvbnRlbnQgb2YgeW91ciByZXBvc2l0b3JpZXMuIFRoZSBkZWZhdWx0CiAgICBpcyBmYWxzZS4KKyAqICRtYXhsb2FkCisgICBVc2VkIHRvIHNldCB0aGUgbWF4aW11bSBsb2FkIHRoYXQgd2Ugd2lsbCBzdGlsbCByZXNwb25kIHRvIGdpdHdlYiBxdWVyaWVzLgorICAgSWYgc2VydmVyIGxvYWQgZXhjZWVkIHRoaXMgdmFsdWUgdGhlbiByZXR1cm4gIjUwMyBTZXJ2aWNlIFVuYXZhbGlhYmxlIiBlcnJvci4KKyAgIFNlcnZlciBsb2FkIGlzIHRha2VuIHRvIGJlIDAgaWYgZ2l0d2ViIGNhbm5vdCBkZXRlcm1pbmUgaXRzIHZhbHVlLiAgU2V0IGl0IHRvCisgICB1bmRlZmluZWQgdmFsdWUgdG8gdHVybiBpdCBvZmYuICBUaGUgZGVmYXVsdCBpcyAzMDAuCiAKIAogUHJvamVjdHMgbGlzdCBmaWxlIGZvcm1hdApAQCAtMjk2LDEyICszMTIsMTYgQEAKIHJlcG9zaXRvcmllcywgeW91IGNhbiBjb25maWd1cmUgYXBhY2hlIGxpa2UgdGhpczoKIAogPFZpcnR1YWxIb3N0ICo6ODA+Ci0gICAgU2VydmVyTmFtZSBnaXQuZXhhbXBsZS5vcmcKLSAgICBEb2N1bWVudFJvb3QgL3B1Yi9naXQKLSAgICBTZXRFbnYJR0lUV0VCX0NPTkZJRwkvZXRjL2dpdHdlYi5jb25mCisgICAgU2VydmVyTmFtZQkJZ2l0LmV4YW1wbGUub3JnCisgICAgRG9jdW1lbnRSb290CS9wdWIvZ2l0CisgICAgU2V0RW52CQkJR0lUV0VCX0NPTkZJRwkvZXRjL2dpdHdlYi5jb25mCisKKyAgICAjIHR1cm5pbmcgb24gbW9kIHJld3JpdGUKICAgICBSZXdyaXRlRW5naW5lIG9uCisKICAgICAjIG1ha2UgdGhlIGZyb250IHBhZ2UgYW4gaW50ZXJuYWwgcmV3cml0ZSB0byB0aGUgZ2l0d2ViIHNjcmlwdAogICAgIFJld3JpdGVSdWxlIF4vJCAgL2NnaS1iaW4vZ2l0d2ViLmNnaQorCiAgICAgIyBtYWtlIGFjY2VzcyBmb3IgImR1bWIgY2xpZW50cyIgd29yawogICAgIFJld3JpdGVSdWxlIF4vKC4qXC5naXQvKD8hLz8oSEVBRHxpbmZvfG9iamVjdHN8cmVmcykpLiopPyQgL2NnaS1iaW4vZ2l0d2ViLmNnaSV7UkVRVUVTVF9VUkl9ICBbTCxQVF0KIDwvVmlydHVhbEhvc3Q+CkBAIC0zMjcsNiArMzQ3LDYzIEBACiAgICRob21lX2xpbmsgPSAiLyI7CiAKIAorV2Vic2VydmVyIGNvbmZpZ3VyYXRpb24gd2l0aCBtdWx0aXBsZSBwcm9qZWN0cycgcm9vdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3Ugd2FudCB0byB1c2UgZ2l0d2ViIHdpdGggc2V2ZXJhbCBwcm9qZWN0IHJvb3RzIHlvdSBjYW4gZWRpdCB5b3VyIGFwYWNoZQordmlydHVhbCBob3N0IGFuZCBnaXR3ZWIuY29uZiBjb25maWd1cmF0aW9uIGZpbGVzIGxpa2UgdGhpcyA6CisKK3ZpcnR1YWwgaG9zdCBjb25maWd1cmF0aW9uIDoKKworPFZpcnR1YWxIb3N0ICo6ODA+CisgICAgU2VydmVyTmFtZQkJCWdpdC5leGFtcGxlLm9yZworICAgIERvY3VtZW50Um9vdAkJL3B1Yi9naXQKKyAgICBTZXRFbnYJCQkJR0lUV0VCX0NPTkZJRwkvZXRjL2dpdHdlYi5jb25mCisKKyAgICAjIHR1cm5pbmcgb24gbW9kIHJld3JpdGUKKyAgICBSZXdyaXRlRW5naW5lIG9uCisKKyAgICAjIG1ha2UgdGhlIGZyb250IHBhZ2UgYW4gaW50ZXJuYWwgcmV3cml0ZSB0byB0aGUgZ2l0d2ViIHNjcmlwdAorICAgIFJld3JpdGVSdWxlIF4vJCAJCS9jZ2ktYmluL2dpdHdlYi5jZ2kgW1FTQSxMLFBUXQorCisgICAgIyBsb29rIGZvciBhIHB1YmxpY19naXQgZm9sZGVyIGluIHVuaXggdXNlcnMnIGhvbWUKKyAgICAjIGh0dHA6Ly9naXQuZXhhbXBsZS5vcmcvfjx1c2VyPi8KKyAgICBSZXdyaXRlUnVsZSBeL1x+KFteXC9dKykoL3wvZ2l0d2ViLmNnaSk/JAkvY2dpLWJpbi9naXR3ZWIuY2dpIFtRU0EsRT1HSVRXRUJfUFJPSkVDVFJPT1Q6L2hvbWUvJDEvcHVibGljX2dpdC8sTCxQVF0KKworICAgICMgaHR0cDovL2dpdC5leGFtcGxlLm9yZy8rPHVzZXI+LworICAgICNSZXdyaXRlUnVsZSBeL1wrKFteXC9dKykoL3wvZ2l0d2ViLmNnaSk/JAkvY2dpLWJpbi9naXR3ZWIuY2dpIFtRU0EsRT1HSVRXRUJfUFJPSkVDVFJPT1Q6L2hvbWUvJDEvcHVibGljX2dpdC8sTCxQVF0KKworICAgICMgaHR0cDovL2dpdC5leGFtcGxlLm9yZy91c2VyLzx1c2VyPi8KKyAgICAjUmV3cml0ZVJ1bGUgXi91c2VyLyhbXlwvXSspLyhnaXR3ZWIuY2dpKT8kCS9jZ2ktYmluL2dpdHdlYi5jZ2kgW1FTQSxFPUdJVFdFQl9QUk9KRUNUUk9PVDovaG9tZS8kMS9wdWJsaWNfZ2l0LyxMLFBUXQorCisgICAgIyBkZWZpbmVkIGxpc3Qgb2YgcHJvamVjdCByb290cworICAgIFJld3JpdGVSdWxlIF4vc2NtKC98L2dpdHdlYi5jZ2kpPyQJCS9jZ2ktYmluL2dpdHdlYi5jZ2kgW1FTQSxFPUdJVFdFQl9QUk9KRUNUUk9PVDovcHViL3NjbS8sTCxQVF0KKyAgICBSZXdyaXRlUnVsZSBeL3ZhcigvfC9naXR3ZWIuY2dpKT8kCQkvY2dpLWJpbi9naXR3ZWIuY2dpIFtRU0EsRT1HSVRXRUJfUFJPSkVDVFJPT1Q6L3Zhci9naXQvLEwsUFRdCisKKyAgICAjIG1ha2UgYWNjZXNzIGZvciAiZHVtYiBjbGllbnRzIiB3b3JrCisgICAgUmV3cml0ZVJ1bGUgXi8oLipcLmdpdC8oPyEvPyhIRUFEfGluZm98b2JqZWN0c3xyZWZzKSkuKik/JCAvY2dpLWJpbi9naXR3ZWIuY2dpJXtSRVFVRVNUX1VSSX0gIFtMLFBUXQorPC9WaXJ0dWFsSG9zdD4KKworZ2l0d2ViLmNvbmYgY29uZmlndXJhdGlvbiA6CisKKyRwcm9qZWN0cm9vdCA9ICRFTlZ7J0dJVFdFQl9QUk9KRUNUUk9PVCd9IHx8ICIvcHViL2dpdCI7CisKK1RoZXNlIGNvbmZpZ3VyYXRpb25zIGVuYWJsZSB0d28gdGhpbmdzLiBGaXJzdCwgZWFjaCB1bml4IHVzZXIgKDx1c2VyPikgb2YgdGhlCitzZXJ2ZXIgd2lsbCBiZSBhYmxlIHRvIGJyb3dzZSB0aHJvdWdoIGdpdHdlYiBnaXQgcmVwb3NpdG9yaWVzIGZvdW5kIGluCit+L3B1YmxpY19naXQvIHdpdGggdGhlIGZvbGxvd2luZyB1cmwgOiBodHRwOi8vZ2l0LmV4YW1wbGUub3JnL348dXNlcj4vCisKK0lmIHlvdSBkbyBub3Qgd2FudCB0aGlzIGZlYXR1cmUgb24geW91ciBzZXJ2ZXIganVzdCByZW1vdmUgdGhlIHNlY29uZCByZXdyaXRlIHJ1bGUuCisKK0lmIHlvdSBhbHJlYWR5IHVzZSBtb2RfdXNlcmRpciBpbiB5b3VyIHZpcnR1YWwgaG9zdCBvciB5b3UgZG9uJ3Qgd2FudCB0byB1c2UKK3RoZSAnficgYXMgZmlyc3QgY2hhcmFjdGVyIGp1c3QgY29tbWVudCBvciByZW1vdmUgdGhlIHNlY29uZCByZXdyaXRlIHJ1bGUgYW5kCit1bmNvbW1lbnQgb25lIG9mIHRoZSBmb2xsb3dpbmcgYWNjb3JkaW5nIHRvIHdoYXQgeW91IHdhbnQuCisKK1NlY29uZCwgcmVwb3NpdG9yaWVzIGZvdW5kIGluIC9wdWIvc2NtLyBhbmQgL3Zhci9naXQvIHdpbGwgYmUgYWNjZXNpYmxlCit0aHJvdWdoIGh0dHA6Ly9naXQuZXhhbXBsZS5vcmcvc2NtLyBhbmQgaHR0cDovL2dpdC5leGFtcGxlLm9yZy92YXIvLgorWW91IGNhbiBhZGQgYXMgbWFueSBwcm9qZWN0IHJvb3RzIGFzIHlvdSB3YW50IGJ5IGFkZGluZyByZXdyaXRlIHJ1bGVzIGxpa2UgdGhlCit0aGlyZCBhbmQgdGhlIGZvdXJ0aC4KKworCiBQQVRIX0lORk8gdXNhZ2UKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBJZiB5b3UgZW5hYmxlIFBBVEhfSU5GTyB1c2FnZSBpbiBnaXR3ZWIgYnkgcHV0dGluZwpkaWZmIC0tZ2l0IGEvZ2l0d2ViL2dpdC1mYXZpY29uLnBuZyBiL2dpdHdlYi9naXQtZmF2aWNvbi5wbmcKaW5kZXggZGU2MzdjMC4uYWFlMzVhNyAxMDA2NDQKLS0tIGEvZ2l0d2ViL2dpdC1mYXZpY29uLnBuZworKysgYi9naXR3ZWIvZ2l0LWZhdmljb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dpdHdlYi9naXQtbG9nby5wbmcgYi9naXR3ZWIvZ2l0LWxvZ28ucG5nCmluZGV4IDE2YWU4ZDUuLmY0ZWRlMmUgMTAwNjQ0Ci0tLSBhL2dpdHdlYi9naXQtbG9nby5wbmcKKysrIGIvZ2l0d2ViL2dpdC1sb2dvLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9naXR3ZWIvZ2l0d2ViLmNzcyBiL2dpdHdlYi9naXR3ZWIuY3NzCmluZGV4IGEwMWVhYzguLjUwMDY3ZjIgMTAwNjQ0Ci0tLSBhL2dpdHdlYi9naXR3ZWIuY3NzCisrKyBiL2dpdHdlYi9naXR3ZWIuY3NzCkBAIC0yOCw2ICsyOCwxNCBAQAogCWJvcmRlci13aWR0aDogMHB4OwogfQogCitpbWcuYXZhdGFyIHsKKwl2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworfQorCithLmxpc3QgaW1nLmF2YXRhciB7CisJYm9yZGVyLXN0eWxlOiBub25lOworfQorCiBkaXYucGFnZV9oZWFkZXIgewogCWhlaWdodDogMjVweDsKIAlwYWRkaW5nOiA4cHg7CkBAIC03MSw2ICs3OSwxMyBAQAogCWZvbnQtc3R5bGU6IGl0YWxpYzsKIH0KIAorZGl2I2dlbmVyYXRpbmdfaW5mbyB7CisJbWFyZ2luOiA0cHg7CisJZm9udC1zaXplOiBzbWFsbGVyOworCXRleHQtYWxpZ246IGNlbnRlcjsKKwljb2xvcjogIzUwNTA1MDsKK30KKwogZGl2LnBhZ2VfYm9keSB7CiAJcGFkZGluZzogOHB4OwogCWZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CkBAIC0xMzIsMTEgKzE0NywxNCBAQAogCWZvbnQtc3R5bGU6IGl0YWxpYzsKIH0KIAorLmF1dGhvcl9kYXRlLCAuYXV0aG9yIHsKKwlmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKIGRpdi5hdXRob3JfZGF0ZSB7CiAJcGFkZGluZzogOHB4OwogCWJvcmRlcjogc29saWQgI2Q5ZDhkMTsKIAlib3JkZXItd2lkdGg6IDBweCAwcHggMXB4IDBweDsKLQlmb250LXN0eWxlOiBpdGFsaWM7CiB9CiAKIGEubGlzdCB7CkBAIC0yMTksMjIgKzIzNywzNSBAQAogCXRleHQtYWxpZ246IGxlZnQ7CiB9CiAKLXRyLmxpZ2h0OmhvdmVyIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiAjZWRlY2U2OworLyogZG8gbm90IGNoYW5nZSByb3cgc3R5bGUgb24gaG92ZXIgZm9yICdibGFtZScgdmlldyAqLwordHIubGlnaHQsCit0YWJsZS5ibGFtZSAubGlnaHQ6aG92ZXIgeworCWJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7CiB9CiAKLXRyLmRhcmsgewordHIuZGFyaywKK3RhYmxlLmJsYW1lIC5kYXJrOmhvdmVyIHsKIAliYWNrZ3JvdW5kLWNvbG9yOiAjZjZmNmYwOwogfQogCi10ci5kYXJrMiB7Ci0JYmFja2dyb3VuZC1jb2xvcjogI2Y2ZjZmMDsKLX0KLQorLyogY3VycmVudGx5IGJvdGggdXNlIHRoZSBzYW1lLCBidXQgaXQgY2FuIGNoYW5nZSAqLwordHIubGlnaHQ6aG92ZXIsCiB0ci5kYXJrOmhvdmVyIHsKIAliYWNrZ3JvdW5kLWNvbG9yOiAjZWRlY2U2OwogfQogCisvKiBib3VuZGFyeSBjb21taXRzIGluICdibGFtZScgdmlldyAqLworLyogYW5kIGNvbW1pdHMgd2l0aG91dCAicHJldmlvdXMiICovCit0ci5ib3VuZGFyeSB0ZC5zaGExLAordHIubm8tcHJldmlvdXMgdGQubGluZW5yIHsKKwlmb250LXdlaWdodDogYm9sZDsKK30KKworLyogZm9yICdibGFtZV9pbmNyZW1lbnRhbCcsIGR1cmluZyBwcm9jZXNzaW5nICovCit0ci5jb2xvcjEgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjZmZmY2OyB9Cit0ci5jb2xvcjIgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjZmNmZmOyB9Cit0ci5jb2xvcjMgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmNmY2OyB9CisKIHRkIHsKIAlwYWRkaW5nOiAycHggNXB4OwogCWZvbnQtc2l6ZTogMTAwJTsKQEAgLTI1NSw3ICsyODYsNyBAQAogCWZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiB9CiAKLXRkLmVycm9yIHsKKy5lcnJvciB7CiAJY29sb3I6IHJlZDsKIAliYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7CiB9CkBAIC0zMjYsNiArMzU3LDIzIEBACiAJZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKIH0KIAorLyogcHJvZ3Jlc3Mgb2YgYmxhbWVfaW50ZXJhY3RpdmUgKi8KK2RpdiNwcm9ncmVzc19iYXIgeworCWhlaWdodDogMnB4OworCW1hcmdpbi1ib3R0b206IC0ycHg7CisJYmFja2dyb3VuZC1jb2xvcjogI2Q4ZDlkMDsKK30KK2RpdiNwcm9ncmVzc19pbmZvIHsKKwlmbG9hdDogcmlnaHQ7CisJdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKKy8qIGZvcm1hdCBvZiAob3B0aW9uYWwpIG9iamVjdHMgc2l6ZSBpbiAndHJlZScgdmlldyAqLwordGQuc2l6ZSB7CisJZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKwl0ZXh0LWFsaWduOiByaWdodDsKK30KKwogLyogc3R5bGluZyBvZiBkaWZmcyAocGF0Y2hzZXRzKTogY29tbWl0ZGlmZiBhbmQgYmxvYmRpZmYgdmlld3MgKi8KIGRpdi5kaWZmLmhlYWRlciwKIGRpdi5kaWZmLmV4dGVuZGVkX2hlYWRlciB7CmRpZmYgLS1naXQgYS9naXR3ZWIvZ2l0d2ViLmpzIGIvZ2l0d2ViL2dpdHdlYi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzY2OTI4Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0d2ViL2dpdHdlYi5qcwpAQCAtMCwwICsxLDg3NSBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDA3LCBGcmVkcmlrIEt1aXZpbmVuIDxmcmVrdWlAZ21haWwuY29tPgorLy8gICAgICAgICAgICAgICAyMDA3LCBQZXRyIEJhdWRpcyA8cGFza3lAc3VzZS5jej4KKy8vICAgICAgICAgIDIwMDgtMjAwOSwgSmFrdWIgTmFyZWJza2kgPGpuYXJlYkBnbWFpbC5jb20+CisKKy8qKgorICogQGZpbGVPdmVydmlldyBKYXZhU2NyaXB0IGNvZGUgZm9yIGdpdHdlYiAoZ2l0IHdlYiBpbnRlcmZhY2UpLgorICogQGxpY2Vuc2UgR1BMdjIgb3IgbGF0ZXIKKyAqLworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qIGZ1bmN0aW9ucyBmb3IgZ2VuZXJpYyBnaXR3ZWIgYWN0aW9ucyBhbmQgdmlld3MgKi8KKworLyoqCisgKiB1c2VkIHRvIGNoZWNrIGlmIGxpbmsgaGFzICdqcycgcXVlcnkgcGFyYW1ldGVyIGFscmVhZHkgKGF0IGVuZCksCisgKiBhbmQgb3RoZXIgcmVhc29ucyB0byBub3QgYWRkICdqcz0xJyBwYXJhbSBhdCB0aGUgZW5kIG9mIGxpbmsKKyAqIEBjb25zdGFudAorICovCit2YXIganNFeGNlcHRpb25zUmUgPSAvWzs/XWpzPVswMV0kLzsKKworLyoqCisgKiBBZGQgJz9qcz0xJyBvciAnO2pzPTEnIHRvIHRoZSBlbmQgb2YgZXZlcnkgbGluayBpbiB0aGUgZG9jdW1lbnQKKyAqIHRoYXQgZG9lc24ndCBoYXZlICdqcycgcXVlcnkgcGFyYW1ldGVyIHNldCBhbHJlYWR5LgorICoKKyAqIExpbmtzIHdpdGggJ2pzPTEnIGxlYWQgdG8gSmF2YVNjcmlwdCB2ZXJzaW9uIG9mIGdpdmVuIGFjdGlvbiwgaWYgaXQKKyAqIGV4aXN0cyAoY3VycmVudGx5IHRoZXJlIGlzIG9ubHkgJ2JsYW1lX2luY3JlbWVudGFsJyBmb3IgJ2JsYW1lJykKKyAqCisgKiBAZ2xvYmFscyBqc0V4Y2VwdGlvbnNSZQorICovCitmdW5jdGlvbiBmaXhMaW5rcygpIHsKKwl2YXIgYWxsTGlua3MgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpIHx8IGRvY3VtZW50LmxpbmtzOworCWZvciAodmFyIGkgPSAwLCBsZW4gPSBhbGxMaW5rcy5sZW5ndGg7IGkgPCBsZW47IGkrKykgeworCQl2YXIgbGluayA9IGFsbExpbmtzW2ldOworCQlpZiAoIWpzRXhjZXB0aW9uc1JlLnRlc3QobGluaykpIHsgLy8gPX4gL1s7P11qcz1bMDFdJC87CisJCQlsaW5rLmhyZWYgKz0KKwkJCQkobGluay5ocmVmLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnOycpICsgJ2pzPTEnOworCQl9CisJfQorfQorCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKgorICogVGhpcyBjb2RlIHVzZXMgRE9NIG1ldGhvZHMgaW5zdGVhZCBvZiAobm9uc3RhbmRhcmQpIGlubmVySFRNTAorICogdG8gbW9kaWZ5IHBhZ2UuCisgKgorICogaW5uZXJIVE1MIGlzIG5vbi1zdGFuZGFyZCBJRSBleHRlbnNpb24sIHRob3VnaCBzdXBwb3J0ZWQgYnkgbW9zdAorICogYnJvd3NlcnM7IGhvd2V2ZXIgRmlyZWZveCB1cCB0byB2ZXJzaW9uIDEuNSBkaWRuJ3QgaW1wbGVtZW50IGl0IGluCisgKiBhIHN0cmljdCBtb2RlIChhcHBsaWNhdGlvbi94bWwreGh0bWwgbWltZXR5cGUpLgorICoKKyAqIEFsc28gbXkgc2ltcGxlIGJlbmNobWFya3Mgc2hvdyB0aGF0IHVzaW5nIGVsZW0uZmlyc3RDaGlsZC5kYXRhID0KKyAqICdjb250ZW50JyBpcyBzbGlnaHRseSBmYXN0ZXIgdGhhbiBlbGVtLmlubmVySFRNTCA9ICdjb250ZW50Jy4gIEl0CisgKiBpcyBob3dldmVyIG1vcmUgZnJhZ2lsZSAodGV4dCBlbGVtZW50IGZyYWdtZW50IG11c3QgZXhpc3RzKSwgYW5kCisgKiBsZXNzIGZlYXR1cmUtcmljaCAod2UgY2Fubm90IGFkZCBIVE1MKS4KKyAqCisgKiBOb3RlIHRoYXQgRE9NIDIgSFRNTCBpcyBwcmVmZXJyZWQgb3ZlciBnZW5lcmljIERPTSAyIENvcmU7IHRoZQorICogZXF1aXZhbGVudCB1c2luZyBET00gMiBDb3JlIGlzIHVzdWFsbHkgc2hvd24gaW4gY29tbWVudHMuCisgKi8KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qIGdlbmVyaWMgdXRpbGl0eSBmdW5jdGlvbnMgKi8KKworCisvKioKKyAqIHBhZCBudW1iZXIgTiB3aXRoIG5vbmJyZWFrYWJsZSBzcGFjZXMgb24gdGhlIGxlZnQsIHRvIFdJRFRIIGNoYXJhY3RlcnMKKyAqIGV4YW1wbGU6IHBhZExlZnRTdHIoMTIsIDMsICdcdTAwQTAnKSA9PSAnXHUwMEEwMTInCisgKiAgICAgICAgICAoJ1x1MDBBMCcgaXMgbm9uYnJlYWthYmxlIHNwYWNlKQorICoKKyAqIEBwYXJhbSB7TnVtYmVyfFN0cmluZ30gaW5wdXQ6IG51bWJlciB0byBwYWQKKyAqIEBwYXJhbSB7TnVtYmVyfSB3aWR0aDogdmlzaWJsZSB3aWR0aCBvZiBvdXRwdXQKKyAqIEBwYXJhbSB7U3RyaW5nfSBzdHI6IHN0cmluZyB0byBwcmVmaXggdG8gc3RyaW5nLCBlLmcuICdcdTAwQTAnCisgKiBAcmV0dXJucyB7U3RyaW5nfSBJTlBVVCBwcmVmaXhlZCB3aXRoIChXSURUSCAtIElOUFVULmxlbmd0aCkgeCBTVFIKKyAqLworZnVuY3Rpb24gcGFkTGVmdFN0cihpbnB1dCwgd2lkdGgsIHN0cikgeworCXZhciBwcmVmaXggPSAnJzsKKworCXdpZHRoIC09IGlucHV0LnRvU3RyaW5nKCkubGVuZ3RoOworCXdoaWxlICh3aWR0aCA+IDApIHsKKwkJcHJlZml4ICs9IHN0cjsKKwkJd2lkdGgtLTsKKwl9CisJcmV0dXJuIHByZWZpeCArIGlucHV0OworfQorCisvKioKKyAqIFBhZCBJTlBVVCBvbiB0aGUgbGVmdCB0byBTSVpFIHdpZHRoLCB1c2luZyBnaXZlbiBwYWRkaW5nIGNoYXJhY3RlciBDSCwKKyAqIGZvciBleGFtcGxlIHBhZExlZnQoJ2EnLCAzLCAnXycpIGlzICdfX2EnLgorICoKKyAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dDogaW5wdXQgdmFsdWUgY29udmVydGVkIHRvIHN0cmluZy4KKyAqIEBwYXJhbSB7TnVtYmVyfSB3aWR0aDogZGVzaXJlZCBsZW5ndGggb2Ygb3V0cHV0LgorICogQHBhcmFtIHtTdHJpbmd9IGNoOiBzaW5nbGUgY2hhcmFjdGVyIHRvIHByZWZpeCB0byBzdHJpbmcuCisgKgorICogQHJldHVybnMge1N0cmluZ30gTW9kaWZpZWQgc3RyaW5nLCBhdCBsZWFzdCBTSVpFIGxlbmd0aC4KKyAqLworZnVuY3Rpb24gcGFkTGVmdChpbnB1dCwgd2lkdGgsIGNoKSB7CisJdmFyIHMgPSBpbnB1dCArICIiOworCXdoaWxlIChzLmxlbmd0aCA8IHdpZHRoKSB7CisJCXMgPSBjaCArIHM7CisJfQorCXJldHVybiBzOworfQorCisvKioKKyAqIENyZWF0ZSBYTUxIdHRwUmVxdWVzdCBvYmplY3QgaW4gY3Jvc3MtYnJvd3NlciB3YXkKKyAqIEByZXR1cm5zIFhNTEh0dHBSZXF1ZXN0IG9iamVjdCwgb3IgbnVsbAorICovCitmdW5jdGlvbiBjcmVhdGVSZXF1ZXN0T2JqZWN0KCkgeworCXRyeSB7CisJCXJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKwl9IGNhdGNoIChlKSB7fQorCXRyeSB7CisJCXJldHVybiB3aW5kb3cuY3JlYXRlUmVxdWVzdCgpOworCX0gY2F0Y2ggKGUpIHt9CisJdHJ5IHsKKwkJcmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCJNc3htbDIuWE1MSFRUUCIpOworCX0gY2F0Y2ggKGUpIHt9CisJdHJ5IHsKKwkJcmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpOworCX0gY2F0Y2ggKGUpIHt9CisKKwlyZXR1cm4gbnVsbDsKK30KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qIHV0aWxpdHkvaGVscGVyIGZ1bmN0aW9ucyAoYW5kIHZhcmlhYmxlcykgKi8KKwordmFyIHhocjsgICAgICAgIC8vIFhNTEh0dHBSZXF1ZXN0IG9iamVjdAordmFyIHByb2plY3RVcmw7IC8vIHBhcnRpYWwgcXVlcnkgKyBzZXBhcmF0b3IgKCc/JyBvciAnOycpCisKKy8vICdjb21taXRzJyBpcyBhbiBhc3NvY2lhdGl2ZSBtYXAuIEl0IG1hcHMgU0hBMXMgdG8gQ29tbWl0IG9iamVjdHMuCit2YXIgY29tbWl0cyA9IHt9OworCisvKioKKyAqIGNvbnN0cnVjdG9yIGZvciBDb21taXQgb2JqZWN0cywgdXNlZCBpbiAnYmxhbWUnCisgKiBAY2xhc3MgUmVwcmVzZW50cyBhIGJsYW1lZCBjb21taXQKKyAqIEBwYXJhbSB7U3RyaW5nfSBzaGExOiBTSEEtMSBpZGVudGlmaWVyIG9mIGEgY29tbWl0CisgKi8KK2Z1bmN0aW9uIENvbW1pdChzaGExKSB7CisJaWYgKHRoaXMgaW5zdGFuY2VvZiBDb21taXQpIHsKKwkJdGhpcy5zaGExID0gc2hhMTsKKwkJdGhpcy5ucHJldmlvdXMgPSAwOyAvKiBudW1iZXIgb2YgJ3ByZXZpb3VzJywgZWZmZWN0aXZlIHBhcmVudHMgKi8KKwl9IGVsc2UgeworCQlyZXR1cm4gbmV3IENvbW1pdChzaGExKTsKKwl9Cit9CisKKy8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAqLworLyogcHJvZ3Jlc3MgaW5mbywgdGltaW5nLCBlcnJvciByZXBvcnRpbmcgKi8KKwordmFyIGJsYW1lZExpbmVzID0gMDsKK3ZhciB0b3RhbExpbmVzICA9ICc/Pz8nOwordmFyIGRpdl9wcm9ncmVzc19iYXI7Cit2YXIgZGl2X3Byb2dyZXNzX2luZm87CisKKy8qKgorICogRGV0ZWN0cyBob3cgbWFueSBsaW5lcyBkb2VzIGEgYmxhbWVkIGZpbGUgaGF2ZSwKKyAqIFRoaXMgaW5mb3JtYXRpb24gaXMgdXNlZCBpbiBwcm9ncmVzcyBpbmZvCisgKgorICogQHJldHVybnMge051bWJlcnxTdHJpbmd9IE51bWJlciBvZiBsaW5lcyBpbiBmaWxlLCBvciBzdHJpbmcgJy4uLicKKyAqLworZnVuY3Rpb24gY291bnRMaW5lcygpIHsKKwl2YXIgdGFibGUgPQorCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmxhbWVfdGFibGUnKSB8fAorCQlkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGFibGUnKVswXTsKKworCWlmICh0YWJsZSkgeworCQlyZXR1cm4gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RyJykubGVuZ3RoIC0gMTsgLy8gZm9yIGhlYWRlcgorCX0gZWxzZSB7CisJCXJldHVybiAnLi4uJzsKKwl9Cit9CisKKy8qKgorICogdXBkYXRlIHByb2dyZXNzIGluZm8gYW5kIGxlbmd0aCAod2lkdGgpIG9mIHByb2dyZXNzIGJhcgorICoKKyAqIEBnbG9iYWxzIGRpdl9wcm9ncmVzc19pbmZvLCBkaXZfcHJvZ3Jlc3NfYmFyLCBibGFtZWRMaW5lcywgdG90YWxMaW5lcworICovCitmdW5jdGlvbiB1cGRhdGVQcm9ncmVzc0luZm8oKSB7CisJaWYgKCFkaXZfcHJvZ3Jlc3NfaW5mbykgeworCQlkaXZfcHJvZ3Jlc3NfaW5mbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcm9ncmVzc19pbmZvJyk7CisJfQorCWlmICghZGl2X3Byb2dyZXNzX2JhcikgeworCQlkaXZfcHJvZ3Jlc3NfYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb2dyZXNzX2JhcicpOworCX0KKwlpZiAoIWRpdl9wcm9ncmVzc19pbmZvICYmICFkaXZfcHJvZ3Jlc3NfYmFyKSB7CisJCXJldHVybjsKKwl9CisKKwl2YXIgcGVyY2VudGFnZSA9IE1hdGguZmxvb3IoMTAwLjAqYmxhbWVkTGluZXMvdG90YWxMaW5lcyk7CisKKwlpZiAoZGl2X3Byb2dyZXNzX2luZm8pIHsKKwkJZGl2X3Byb2dyZXNzX2luZm8uZmlyc3RDaGlsZC5kYXRhICA9IGJsYW1lZExpbmVzICsgJyAvICcgKyB0b3RhbExpbmVzICsKKwkJCScgKCcgKyBwYWRMZWZ0U3RyKHBlcmNlbnRhZ2UsIDMsICdcdTAwQTAnKSArICclKSc7CisJfQorCisJaWYgKGRpdl9wcm9ncmVzc19iYXIpIHsKKwkJLy9kaXZfcHJvZ3Jlc3NfYmFyLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnd2lkdGg6ICcrcGVyY2VudGFnZSsnJTsnKTsKKwkJZGl2X3Byb2dyZXNzX2Jhci5zdHlsZS53aWR0aCA9IHBlcmNlbnRhZ2UgKyAnJSc7CisJfQorfQorCisKK3ZhciB0X2ludGVydmFsX3NlcnZlciA9ICcnOwordmFyIGNtZHNfc2VydmVyID0gJyc7Cit2YXIgdDAgPSBuZXcgRGF0ZSgpOworCisvKioKKyAqIHdyaXRlIGhvdyBtdWNoIGl0IHRvb2sgdG8gZ2VuZXJhdGUgZGF0YSwgYW5kIHRvIHJ1biBzY3JpcHQKKyAqCisgKiBAZ2xvYmFscyB0MCwgdF9pbnRlcnZhbF9zZXJ2ZXIsIGNtZHNfc2VydmVyCisgKi8KK2Z1bmN0aW9uIHdyaXRlVGltZUludGVydmFsKCkgeworCXZhciBpbmZvX3RpbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2VuZXJhdGluZ190aW1lJyk7CisJaWYgKCFpbmZvX3RpbWUgfHwgIXRfaW50ZXJ2YWxfc2VydmVyKSB7CisJCXJldHVybjsKKwl9CisJdmFyIHQxID0gbmV3IERhdGUoKTsKKwlpbmZvX3RpbWUuZmlyc3RDaGlsZC5kYXRhICs9ICcgKyAoJyArCisJCXRfaW50ZXJ2YWxfc2VydmVyICsgJyBzZWMgc2VydmVyIGJsYW1lX2RhdGEgLyAnICsKKwkJKHQxLmdldFRpbWUoKSAtIHQwLmdldFRpbWUoKSkvMTAwMCArICcgc2VjIGNsaWVudCBKYXZhU2NyaXB0KSc7CisKKwl2YXIgaW5mb19jbWRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dlbmVyYXRpbmdfY21kJyk7CisJaWYgKCFpbmZvX3RpbWUgfHwgIWNtZHNfc2VydmVyKSB7CisJCXJldHVybjsKKwl9CisJaW5mb19jbWRzLmZpcnN0Q2hpbGQuZGF0YSArPSAnICsgJyArIGNtZHNfc2VydmVyOworfQorCisvKioKKyAqIHNob3cgYW4gZXJyb3IgbWVzc2FnZSBhbGVydCB0byB1c2VyIHdpdGhpbiBwYWdlIChpbiBwcm9ocmVzcyBpbmZvIGFyZWEpCisgKiBAcGFyYW0ge1N0cmluZ30gc3RyOiBwbGFpbiB0ZXh0IGVycm9yIG1lc3NhZ2UgKG5vIEhUTUwpCisgKgorICogQGdsb2JhbHMgZGl2X3Byb2dyZXNzX2luZm8KKyAqLworZnVuY3Rpb24gZXJyb3JJbmZvKHN0cikgeworCWlmICghZGl2X3Byb2dyZXNzX2luZm8pIHsKKwkJZGl2X3Byb2dyZXNzX2luZm8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJvZ3Jlc3NfaW5mbycpOworCX0KKwlpZiAoZGl2X3Byb2dyZXNzX2luZm8pIHsKKwkJZGl2X3Byb2dyZXNzX2luZm8uY2xhc3NOYW1lID0gJ2Vycm9yJzsKKwkJZGl2X3Byb2dyZXNzX2luZm8uZmlyc3RDaGlsZC5kYXRhID0gc3RyOworCX0KK30KKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisvKiBjb2xvcmluZyByb3dzIGR1cmluZyBibGFtZV9kYXRhIChnaXQgYmxhbWUgLS1pbmNyZW1lbnRhbCkgcnVuICovCisKKy8qKgorICogdXNlZCB0byBleHRyYWN0IE4gZnJvbSAnY29sb3JOJywgd2hlcmUgTiBpcyBhIG51bWJlciwKKyAqIEBjb25zdGFudAorICovCit2YXIgY29sb3JSZSA9IC9cYmNvbG9yKFswLTldKilcYi87CisKKy8qKgorICogcmV0dXJuIE4gaWYgPHRyIGNsYXNzPSJjb2xvck4iPiwgb3RoZXJ3aXNlIHJldHVybiBudWxsCisgKiAoc29tZSBicm93c2VycyByZXF1aXJlIENTUyBjbGFzcyBuYW1lcyB0byBiZWdpbiB3aXRoIGxldHRlcikKKyAqCisgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSB0cjogdGFibGUgcm93IGVsZW1lbnQgdG8gY2hlY2sKKyAqIEBwYXJhbSB7U3RyaW5nfSB0ci5jbGFzc05hbWU6ICdjbGFzcycgYXR0cmlidXRlIG9mIHRyIGVsZW1lbnQKKyAqIEByZXR1cm5zIHtOdW1iZXJ8bnVsbH0gTiBpZiB0ci5jbGFzc05hbWUgPT0gJ2NvbG9yTicsIG90aGVyd2lzZSBudWxsCisgKgorICogQGdsb2JhbHMgY29sb3JSZQorICovCitmdW5jdGlvbiBnZXRDb2xvck5vKHRyKSB7CisJaWYgKCF0cikgeworCQlyZXR1cm4gbnVsbDsKKwl9CisJdmFyIGNsYXNzTmFtZSA9IHRyLmNsYXNzTmFtZTsKKwlpZiAoY2xhc3NOYW1lKSB7CisJCXZhciBtYXRjaCA9IGNvbG9yUmUuZXhlYyhjbGFzc05hbWUpOworCQlpZiAobWF0Y2gpIHsKKwkJCXJldHVybiBwYXJzZUludChtYXRjaFsxXSwgMTApOworCQl9CisJfQorCXJldHVybiBudWxsOworfQorCit2YXIgY29sb3JzRnJlcSA9IFswLCAwLCAwXTsKKy8qKgorICogcmV0dXJuIG9uZSBvZiBnaXZlbiBwb3NzaWJsZSBjb2xvcnMgKGN1cmVudGx5IGxlYXN0IHVzZWQgb25lKQorICogZXhhbXBsZTogY2hvb3NlQ29sb3JOb0Zyb20oMiwgMykgcmV0dXJucyAyIG9yIDMKKyAqCisgKiBAcGFyYW0ge051bWJlcltdfSBhcmd1bWVudHM6IG9uZSBvciBtb3JlIG51bWJlcnMKKyAqICAgICAgICBhc3N1bWVzIHRoYXQgIDEgPD0gYXJndW1lbnRzW2ldIDw9IGNvbG9yc0ZyZXEubGVuZ3RoCisgKiBAcmV0dXJucyB7TnVtYmVyfSBMZWFzdCB1c2VkIGNvbG9yIG51bWJlciBmcm9tIGFyZ3VtZW50cworICogQGdsb2JhbHMgY29sb3JzRnJlcQorICovCitmdW5jdGlvbiBjaG9vc2VDb2xvck5vRnJvbSgpIHsKKwkvLyBjaG9vc2UgdGhlIGNvbG9yIHdoaWNoIGlzIGxlYXN0IHVzZWQKKwl2YXIgY29sb3JObyA9IGFyZ3VtZW50c1swXTsKKwlmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeworCQlpZiAoY29sb3JzRnJlcVthcmd1bWVudHNbaV0tMV0gPCBjb2xvcnNGcmVxW2NvbG9yTm8tMV0pIHsKKwkJCWNvbG9yTm8gPSBhcmd1bWVudHNbaV07CisJCX0KKwl9CisJY29sb3JzRnJlcVtjb2xvck5vLTFdKys7CisJcmV0dXJuIGNvbG9yTm87Cit9CisKKy8qKgorICogZ2l2ZW4gdHdvIG5laWdib3VyIDx0cj4gZWxlbWVudHMsIGZpbmQgY29sb3Igd2hpY2ggd291bGQgYmUgZGlmZmVyZW50CisgKiBmcm9tIGNvbG9yIG9mIGJvdGggb2YgbmVpZ2hib3VyczsgdXNlZCB0byAzLWNvbG9yIGJsYW1lIHRhYmxlCisgKgorICogQHBhcmFtIHtIVE1MRWxlbWVudH0gdHJfcHJldgorICogQHBhcmFtIHtIVE1MRWxlbWVudH0gdHJfbmV4dAorICogQHJldHVybnMge051bWJlcn0gY29sb3IgbnVtYmVyIE4gc3VjaCB0aGF0CisgKiBjb2xvck4gIT0gdHJfcHJldi5jbGFzc05hbWUgJiYgY29sb3JOICE9IHRyX25leHQuY2xhc3NOYW1lCisgKi8KK2Z1bmN0aW9uIGZpbmRDb2xvck5vKHRyX3ByZXYsIHRyX25leHQpIHsKKwl2YXIgY29sb3JfcHJldiA9IGdldENvbG9yTm8odHJfcHJldik7CisJdmFyIGNvbG9yX25leHQgPSBnZXRDb2xvck5vKHRyX25leHQpOworCisKKwkvLyBuZWl0aGVyIG9mIG5laWdoYm91cnMgaGFzIGNvbG9yIHNldAorCS8vIFRIRU4gd2UgY2FuIHVzZSBhbnkgb2YgMyBwb3NzaWJsZSBjb2xvcnMKKwlpZiAoIWNvbG9yX3ByZXYgJiYgIWNvbG9yX25leHQpIHsKKwkJcmV0dXJuIGNob29zZUNvbG9yTm9Gcm9tKDEsMiwzKTsKKwl9CisKKwkvLyBlaXRoZXIgYm90aCBuZWlnaGJvdXJzIGhhdmUgdGhlIHNhbWUgY29sb3IsCisJLy8gb3Igb25seSBvbmUgb2YgbmVpZ2hib3VycyBoYXZlIGNvbG9yIHNldAorCS8vIFRIRU4gd2UgY2FuIHVzZSBhbnkgY29sb3IgZXhjZXB0IGdpdmVuCisJdmFyIGNvbG9yOworCWlmIChjb2xvcl9wcmV2ID09PSBjb2xvcl9uZXh0KSB7CisJCWNvbG9yID0gY29sb3JfcHJldjsgLy8gPSBjb2xvcl9uZXh0OworCX0gZWxzZSBpZiAoIWNvbG9yX3ByZXYpIHsKKwkJY29sb3IgPSBjb2xvcl9uZXh0OworCX0gZWxzZSBpZiAoIWNvbG9yX25leHQpIHsKKwkJY29sb3IgPSBjb2xvcl9wcmV2OworCX0KKwlpZiAoY29sb3IpIHsKKwkJcmV0dXJuIGNob29zZUNvbG9yTm9Gcm9tKChjb2xvciAlIDMpICsgMSwgKChjb2xvcisxKSAlIDMpICsgMSk7CisJfQorCisJLy8gbmVpZ2hib3VycyBoYXZlIGRpZmZlcmVudCBjb2xvcnMKKwkvLyBUSEVOIHRoZXJlIGlzIG9ubHkgb25lIGNvbG9yIGxlZnQKKwlyZXR1cm4gKDMgLSAoKGNvbG9yX3ByZXYgKyBjb2xvcl9uZXh0KSAlIDMpKTsKK30KKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisvKiBjb2xvcmluZyByb3dzIGxpa2UgJ2JsYW1lJyBhZnRlciAnYmxhbWVfZGF0YScgZmluaXNoZXMgKi8KKworLyoqCisgKiByZXR1cm5zIHRydWUgaWYgZ2l2ZW4gcm93IGVsZW1lbnQgKHRyKSBpcyBmaXJzdCBpbiBjb21taXQgZ3JvdXAKKyAqIHRvIGJlIHVzZWQgb25seSBhZnRlciAnYmxhbWVfZGF0YScgZmluaXNoZXMgKGFmdGVyIHByb2Nlc3NpbmcpCisgKgorICogQHBhcmFtIHtIVE1MRWxlbWVudH0gdHI6IHRhYmxlIHJvdworICogQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgVFIgaXMgZmlyc3QgaW4gY29tbWl0IGdyb3VwCisgKi8KK2Z1bmN0aW9uIGlzU3RhcnRPZkdyb3VwKHRyKSB7CisJcmV0dXJuIHRyLmZpcnN0Q2hpbGQuY2xhc3NOYW1lID09PSAnc2hhMSc7Cit9CisKKy8qKgorICogY2hhbmdlIGNvbG9ycyB0byB1c2UgemVicmEgY29sb3JpbmcgKDIgY29sb3JzKSBpbnN0ZWFkIG9mIDMgY29sb3JzCisgKiBjb25jYXRlbmF0ZSBuZWlnaGJvdXIgY29tbWl0IGdyb3VwcyBiZWxvbmdpbmcgdG8gdGhlIHNhbWUgY29tbWl0CisgKgorICogQGdsb2JhbHMgY29sb3JSZQorICovCitmdW5jdGlvbiBmaXhDb2xvcnNBbmRHcm91cHMoKSB7CisJdmFyIGNvbG9yQ2xhc3NlcyA9IFsnbGlnaHQnLCAnZGFyayddOworCXZhciBsaW5lbnVtID0gMTsKKwl2YXIgdHIsIHByZXZfZ3JvdXA7CisJdmFyIGNvbG9yQ2xhc3MgPSAwOworCXZhciB0YWJsZSA9CisJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdibGFtZV90YWJsZScpIHx8CisJCWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0YWJsZScpWzBdOworCisJd2hpbGUgKCh0ciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsJytsaW5lbnVtKSkpIHsKKwkvLyBpbmRleCBvcmlnaW4gaXMgMCwgd2hpY2ggaXMgdGFibGUgaGVhZGVyOyBzdGFydCBmcm9tIDEKKwkvL3doaWxlICgodHIgPSB0YWJsZS5yb3dzW2xpbmVudW1dKSkgeyAvLyA8LSBpdCBpcyBzbG93ZXIKKwkJaWYgKGlzU3RhcnRPZkdyb3VwKHRyLCBsaW5lbnVtLCBkb2N1bWVudCkpIHsKKwkJCWlmIChwcmV2X2dyb3VwICYmCisJCQkgICAgcHJldl9ncm91cC5maXJzdENoaWxkLmZpcnN0Q2hpbGQuaHJlZiA9PT0KKwkJCSAgICAgICAgICAgIHRyLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5ocmVmKSB7CisJCQkJLy8gd2UgaGF2ZSB0byBjb25jYXRlbmF0ZSBncm91cHMKKwkJCQl2YXIgcHJldl9yb3dzID0gcHJldl9ncm91cC5maXJzdENoaWxkLnJvd1NwYW4gfHwgMTsKKwkJCQl2YXIgY3Vycl9yb3dzID0gICAgICAgICB0ci5maXJzdENoaWxkLnJvd1NwYW4gfHwgMTsKKwkJCQlwcmV2X2dyb3VwLmZpcnN0Q2hpbGQucm93U3BhbiA9IHByZXZfcm93cyArIGN1cnJfcm93czsKKwkJCQkvL3RyLnJlbW92ZUNoaWxkKHRyLmZpcnN0Q2hpbGQpOworCQkJCXRyLmRlbGV0ZUNlbGwoMCk7IC8vIERPTTIgSFRNTCB3YXkKKwkJCX0gZWxzZSB7CisJCQkJY29sb3JDbGFzcyA9IChjb2xvckNsYXNzICsgMSkgJSAyOworCQkJCXByZXZfZ3JvdXAgPSB0cjsKKwkJCX0KKwkJfQorCQl2YXIgdHJfY2xhc3MgPSB0ci5jbGFzc05hbWU7CisJCXRyLmNsYXNzTmFtZSA9IHRyX2NsYXNzLnJlcGxhY2UoY29sb3JSZSwgY29sb3JDbGFzc2VzW2NvbG9yQ2xhc3NdKTsKKwkJbGluZW51bSsrOworCX0KK30KKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisvKiB0aW1lIGFuZCBkYXRhICovCisKKy8qKgorICogdXNlZCB0byBleHRyYWN0IGhvdXJzIGFuZCBtaW51dGVzIGZyb20gdGltZXpvbmUgaW5mbywgZS5nICctMDkwMCcKKyAqIEBjb25zdGFudAorICovCit2YXIgdHpSZSA9IC9eKFsrLV1bMC05XVswLTldKShbMC05XVswLTldKSQvOworCisvKioKKyAqIHJldHVybiBkYXRlIGluIGxvY2FsIHRpbWUgZm9ybWF0dGVkIGluIGlzby04NjAxIGxpa2UgZm9ybWF0CisgKiAneXl5eS1tbS1kZCBISDpNTTpTUyArLy1aWlpaJyBlLmcuICcyMDA1LTA4LTA3IDIxOjQ5OjQ2ICswMjAwJworICoKKyAqIEBwYXJhbSB7TnVtYmVyfSBlcG9jaDogc2Vjb25kcyBzaW5jZSAnMDA6MDA6MDAgMTk3MC0wMS0wMSBVVEMnCisgKiBAcGFyYW0ge1N0cmluZ30gdGltZXpvbmVJbmZvOiBudW1lcmljIHRpbWV6b25lICcoK3wtKUhITU0nCisgKiBAcmV0dXJucyB7U3RyaW5nfSBkYXRlIGluIGxvY2FsIHRpbWUgaW4gaXNvLTg2MDEgbGlrZSBmb3JtYXQKKyAqCisgKiBAZ2xvYmFscyB0elJlCisgKi8KK2Z1bmN0aW9uIGZvcm1hdERhdGVJU09Mb2NhbChlcG9jaCwgdGltZXpvbmVJbmZvKSB7CisJdmFyIG1hdGNoID0gdHpSZS5leGVjKHRpbWV6b25lSW5mbyk7CisJLy8gZGF0ZSBjb3JyZWN0ZWQgYnkgdGltZXpvbmUKKwl2YXIgbG9jYWxEYXRlID0gbmV3IERhdGUoMTAwMCAqIChlcG9jaCArCisJCShwYXJzZUludChtYXRjaFsxXSwxMCkqMzYwMCArIHBhcnNlSW50KG1hdGNoWzJdLDEwKSo2MCkpKTsKKwl2YXIgbG9jYWxEYXRlU3RyID0gLy8gZS5nLiAnMjAwNS0wOC0wNycKKwkJbG9jYWxEYXRlLmdldFVUQ0Z1bGxZZWFyKCkgICAgICAgICAgICAgICAgICsgJy0nICsKKwkJcGFkTGVmdChsb2NhbERhdGUuZ2V0VVRDTW9udGgoKSsxLCAyLCAnMCcpICsgJy0nICsKKwkJcGFkTGVmdChsb2NhbERhdGUuZ2V0VVRDRGF0ZSgpLCAgICAyLCAnMCcpOworCXZhciBsb2NhbFRpbWVTdHIgPSAvLyBlLmcuICcyMTo0OTo0NicKKwkJcGFkTGVmdChsb2NhbERhdGUuZ2V0VVRDSG91cnMoKSwgICAyLCAnMCcpICsgJzonICsKKwkJcGFkTGVmdChsb2NhbERhdGUuZ2V0VVRDTWludXRlcygpLCAyLCAnMCcpICsgJzonICsKKwkJcGFkTGVmdChsb2NhbERhdGUuZ2V0VVRDU2Vjb25kcygpLCAyLCAnMCcpOworCisJcmV0dXJuIGxvY2FsRGF0ZVN0ciArICcgJyArIGxvY2FsVGltZVN0ciArICcgJyArIHRpbWV6b25lSW5mbzsKK30KKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisvKiB1bnF1b3RpbmcvdW5lc2NhcGluZyBmaWxlbmFtZXMgKi8KKworLyoqI0ArCisgKiBAY29uc3RhbnQKKyAqLwordmFyIGVzY0NvZGVSZSA9IC9cXChbXjAtN118WzAtN117MSwzfSkvZzsKK3ZhciBvY3RFc2NSZSA9IC9eWzAtN117MSwzfSQvOwordmFyIG1heWJlUXVvdGVkUmUgPSAvXlwiKC4qKVwiJC87CisvKiojQC0qLworCisvKioKKyAqIHVucXVvdGUgbWF5YmUgZ2l0LXF1b3RlZCBmaWxlbmFtZQorICogZS5nLiAnYWEnIC0+ICdhYScsICciYVx0YSInIC0+ICdhCWEnCisgKgorICogQHBhcmFtIHtTdHJpbmd9IHN0cjogZ2l0LXF1b3RlZCBzdHJpbmcKKyAqIEByZXR1cm5zIHtTdHJpbmd9IFVucXVvdGVkIGFuZCB1bmVzY2FwZWQgc3RyaW5nCisgKgorICogQGdsb2JhbHMgZXNjQ29kZVJlLCBvY3RFc2NSZSwgbWF5YmVRdW90ZWRSZQorICovCitmdW5jdGlvbiB1bnF1b3RlKHN0cikgeworCWZ1bmN0aW9uIHVucShzZXEpIHsKKwkJdmFyIGVzID0geworCQkJLy8gY2hhcmFjdGVyIGVzY2FwZSBjb2RlcywgYWthIGVzY2FwZSBzZXF1ZW5jZXMgKGZyb20gQykKKwkJCS8vIHJlcGxhY2VtZW50cyBhcmUgdG8gc29tZSBleHRlbnQgSmF2YVNjcmlwdCBzcGVjaWZpYworCQkJdDogIlx0IiwgICAvLyB0YWIgICAgICAgICAgICAoSFQsIFRBQikKKwkJCW46ICJcbiIsICAgLy8gbmV3bGluZSAgICAgICAgKE5MKQorCQkJcjogIlxyIiwgICAvLyByZXR1cm4gICAgICAgICAoQ1IpCisJCQlmOiAiXGYiLCAgIC8vIGZvcm0gZmVlZCAgICAgIChGRikKKwkJCWI6ICJcYiIsICAgLy8gYmFja3NwYWNlICAgICAgKEJTKQorCQkJYTogIlx4MDciLCAvLyBhbGFybSAoYmVsbCkgICAoQkVMKQorCQkJZTogIlx4MUIiLCAvLyBlc2NhcGUgICAgICAgICAoRVNDKQorCQkJdjogIlx2IiAgICAvLyB2ZXJ0aWNhbCB0YWIgICAoVlQpCisJCX07CisKKwkJaWYgKHNlcS5zZWFyY2gob2N0RXNjUmUpICE9PSAtMSkgeworCQkJLy8gb2N0YWwgY2hhciBzZXF1ZW5jZQorCQkJcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoc2VxLCA4KSk7CisJCX0gZWxzZSBpZiAoc2VxIGluIGVzKSB7CisJCQkvLyBDIGVzY2FwZSBzZXF1ZW5jZSwgYWthIGNoYXJhY3RlciBlc2NhcGUgY29kZQorCQkJcmV0dXJuIGVzW3NlcV07CisJCX0KKwkJLy8gcXVvdGVkIG9yZGluYXJ5IGNoYXJhY3RlcgorCQlyZXR1cm4gc2VxOworCX0KKworCXZhciBtYXRjaCA9IHN0ci5tYXRjaChtYXliZVF1b3RlZFJlKTsKKwlpZiAobWF0Y2gpIHsKKwkJc3RyID0gbWF0Y2hbMV07CisJCS8vIHBlcmhhcHMgc3RyID0gZXZhbCgnIicrc3RyKyciJyk7IHdvdWxkIGJlIGVub3VnaD8KKwkJc3RyID0gc3RyLnJlcGxhY2UoZXNjQ29kZVJlLAorCQkJZnVuY3Rpb24gKHN1YnN0ciwgcDEsIG9mZnNldCwgcykgeyByZXR1cm4gdW5xKHAxKTsgfSk7CisJfQorCXJldHVybiBzdHI7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogbWFpbiBwYXJ0OiBwYXJzaW5nIHJlc3BvbnNlICovCisKKy8qKgorICogRnVuY3Rpb24gY2FsbGVkIGZvciBlYWNoIGJsYW1lIGVudHJ5LCBhcyBzb29uIGFzIGl0IGZpbmlzaGVzLgorICogSXQgdXBkYXRlcyBwYWdlIHZpYSBET00gbWFuaXB1bGF0aW9uLCBhZGRpbmcgc2hhMSBpbmZvLCBldGMuCisgKgorICogQHBhcmFtIHtDb21taXR9IGNvbW1pdDogYmxhbWVkIGNvbW1pdAorICogQHBhcmFtIHtPYmplY3R9IGdyb3VwOiBvYmplY3QgcmVwcmVzZW50aW5nIGdyb3VwIG9mIGxpbmVzLAorICogICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBibGFtZSB0aGUgc2FtZSBjb21taXQgKGJsYW1lIGVudHJ5KQorICoKKyAqIEBnbG9iYWxzIGJsYW1lZExpbmVzCisgKi8KK2Z1bmN0aW9uIGhhbmRsZUxpbmUoY29tbWl0LCBncm91cCkgeworCS8qCisJICAgVGhpcyBpcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBIVE1MIGZyYWdtZW50IHdlIGFyZSB3b3JraW5nCisJICAgd2l0aDoKKworCSAgIDx0ciBpZD0ibDEyMyIgY2xhc3M9IiI+CisJICAgICA8dGQgY2xhc3M9InNoYTEiIHRpdGxlPSIiPjxhIGhyZWY9IiI+IDwvYT48L3RkPgorCSAgICAgPHRkIGNsYXNzPSJsaW5lbnIiPjxhIGNsYXNzPSJsaW5lbnIiIGhyZWY9IiI+MTIzPC9hPjwvdGQ+CisJICAgICA8dGQgY2xhc3M9InByZSI+IyB0aW1lcyAobXkgZXh0MyBkb2VzbiYjMzk7dCkuPC90ZD4KKwkgICA8L3RyPgorCSovCisKKwl2YXIgcmVzbGluZSA9IGdyb3VwLnJlc2xpbmU7CisKKwkvLyBmb3JtYXQgZGF0ZSBhbmQgdGltZSBzdHJpbmcgb25seSBvbmNlIHBlciBjb21taXQKKwlpZiAoIWNvbW1pdC5pbmZvKSB7CisJCS8qIGUuZy4gJ0theSBTaWV2ZXJzLCAyMDA1LTA4LTA3IDIxOjQ5OjQ2ICswMjAwJyAqLworCQljb21taXQuaW5mbyA9IGNvbW1pdC5hdXRob3IgKyAnLCAnICsKKwkJCWZvcm1hdERhdGVJU09Mb2NhbChjb21taXQuYXV0aG9yVGltZSwgY29tbWl0LmF1dGhvclRpbWV6b25lKTsKKwl9CisKKwkvLyBjb2xvciBkZXBlbmRzIG9uIGdyb3VwIG9mIGxpbmVzLCBub3Qgb25seSBvbiBibGFtZWQgY29tbWl0CisJdmFyIGNvbG9yTm8gPSBmaW5kQ29sb3JObygKKwkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2wnKyhyZXNsaW5lLTEpKSwKKwkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2wnKyhyZXNsaW5lK2dyb3VwLm51bWxpbmVzKSkKKwkpOworCisJLy8gbG9vcCBvdmVyIGxpbmVzIGluIGNvbW1pdCBncm91cAorCWZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXAubnVtbGluZXM7IGkrKywgcmVzbGluZSsrKSB7CisJCXZhciB0ciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsJytyZXNsaW5lKTsKKwkJaWYgKCF0cikgeworCQkJYnJlYWs7CisJCX0KKwkJLyoKKwkJCTx0ciBpZD0ibDEyMyIgY2xhc3M9IiI+CisJCQkgIDx0ZCBjbGFzcz0ic2hhMSIgdGl0bGU9IiI+PGEgaHJlZj0iIj4gPC9hPjwvdGQ+CisJCQkgIDx0ZCBjbGFzcz0ibGluZW5yIj48YSBjbGFzcz0ibGluZW5yIiBocmVmPSIiPjEyMzwvYT48L3RkPgorCQkJICA8dGQgY2xhc3M9InByZSI+IyB0aW1lcyAobXkgZXh0MyBkb2VzbiYjMzk7dCkuPC90ZD4KKwkJCTwvdHI+CisJCSovCisJCXZhciB0ZF9zaGExICA9IHRyLmZpcnN0Q2hpbGQ7CisJCXZhciBhX3NoYTEgICA9IHRkX3NoYTEuZmlyc3RDaGlsZDsKKwkJdmFyIGFfbGluZW5yID0gdGRfc2hhMS5uZXh0U2libGluZy5maXJzdENoaWxkOworCisJCS8qIDx0ciBpZD0ibDEyMyIgY2xhc3M9IiI+ICovCisJCXZhciB0cl9jbGFzcyA9ICcnOworCQlpZiAoY29sb3JObyAhPT0gbnVsbCkgeworCQkJdHJfY2xhc3MgPSAnY29sb3InK2NvbG9yTm87CisJCX0KKwkJaWYgKGNvbW1pdC5ib3VuZGFyeSkgeworCQkJdHJfY2xhc3MgKz0gJyBib3VuZGFyeSc7CisJCX0KKwkJaWYgKGNvbW1pdC5ucHJldmlvdXMgPT09IDApIHsKKwkJCXRyX2NsYXNzICs9ICcgbm8tcHJldmlvdXMnOworCQl9IGVsc2UgaWYgKGNvbW1pdC5ucHJldmlvdXMgPiAxKSB7CisJCQl0cl9jbGFzcyArPSAnIG11bHRpcGxlLXByZXZpb3VzJzsKKwkJfQorCQl0ci5jbGFzc05hbWUgPSB0cl9jbGFzczsKKworCQkvKiA8dGQgY2xhc3M9InNoYTEiIHRpdGxlPSI/IiByb3dzcGFuPSI/Ij48YSBocmVmPSI/Ij4/PC9hPjwvdGQ+ICovCisJCWlmIChpID09PSAwKSB7CisJCQl0ZF9zaGExLnRpdGxlID0gY29tbWl0LmluZm87CisJCQl0ZF9zaGExLnJvd1NwYW4gPSBncm91cC5udW1saW5lczsKKworCQkJYV9zaGExLmhyZWYgPSBwcm9qZWN0VXJsICsgJ2E9Y29tbWl0O2g9JyArIGNvbW1pdC5zaGExOworCQkJaWYgKGFfc2hhMS5maXJzdENoaWxkKSB7CisJCQkJYV9zaGExLmZpcnN0Q2hpbGQuZGF0YSA9IGNvbW1pdC5zaGExLnN1YnN0cigwLCA4KTsKKwkJCX0gZWxzZSB7CisJCQkJYV9zaGExLmFwcGVuZENoaWxkKAorCQkJCQlkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb21taXQuc2hhMS5zdWJzdHIoMCwgOCkpKTsKKwkJCX0KKwkJCWlmIChncm91cC5udW1saW5lcyA+PSAyKSB7CisJCQkJdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworCQkJCXZhciBiciAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKTsKKwkJCQl2YXIgbWF0Y2ggPSBjb21taXQuYXV0aG9yLm1hdGNoKC9cYihbQS1aXSlcQi9nKTsKKwkJCQlpZiAobWF0Y2gpIHsKKwkJCQkJdmFyIHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgKKwkJCQkJCQltYXRjaC5qb2luKCcnKSk7CisJCQkJfQorCQkJCWlmIChiciAmJiB0ZXh0KSB7CisJCQkJCXZhciBlbGVtID0gZnJhZ21lbnQgfHwgdGRfc2hhMTsKKwkJCQkJZWxlbS5hcHBlbmRDaGlsZChicik7CisJCQkJCWVsZW0uYXBwZW5kQ2hpbGQodGV4dCk7CisJCQkJCWlmIChmcmFnbWVudCkgeworCQkJCQkJdGRfc2hhMS5hcHBlbmRDaGlsZChmcmFnbWVudCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQkvL3RyLnJlbW92ZUNoaWxkKHRkX3NoYTEpOyAvLyBET00yIENvcmUgd2F5CisJCQl0ci5kZWxldGVDZWxsKDApOyAvLyBET00yIEhUTUwgd2F5CisJCX0KKworCQkvKiA8dGQgY2xhc3M9ImxpbmVuciI+PGEgY2xhc3M9ImxpbmVuciIgaHJlZj0iPyI+MTIzPC9hPjwvdGQ+ICovCisJCXZhciBsaW5lbnJfY29tbWl0ID0KKwkJCSgncHJldmlvdXMnIGluIGNvbW1pdCA/IGNvbW1pdC5wcmV2aW91cyA6IGNvbW1pdC5zaGExKTsKKwkJdmFyIGxpbmVucl9maWxlbmFtZSA9CisJCQkoJ2ZpbGVfcGFyZW50JyBpbiBjb21taXQgPyBjb21taXQuZmlsZV9wYXJlbnQgOiBjb21taXQuZmlsZW5hbWUpOworCQlhX2xpbmVuci5ocmVmID0gcHJvamVjdFVybCArICdhPWJsYW1lX2luY3JlbWVudGFsJyArCisJCQknO2hiPScgKyBsaW5lbnJfY29tbWl0ICsKKwkJCSc7Zj0nICArIGVuY29kZVVSSUNvbXBvbmVudChsaW5lbnJfZmlsZW5hbWUpICsKKwkJCScjbCcgKyAoZ3JvdXAuc3JjbGluZSArIGkpOworCisJCWJsYW1lZExpbmVzKys7CisKKwkJLy91cGRhdGVQcm9ncmVzc0luZm8oKTsKKwl9Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordmFyIGluUHJvZ3Jlc3MgPSBmYWxzZTsgICAvLyBhcmUgd2UgcHJvY2Vzc2luZyByZXNwb25zZQorCisvKiojQCsKKyAqIEBjb25zdGFudAorICovCit2YXIgc2hhMVJlID0gL14oWzAtOWEtZl17NDB9KSAoWzAtOV0rKSAoWzAtOV0rKSAoWzAtOV0rKS87Cit2YXIgaW5mb1JlID0gL14oW2Etei1dKykgPyguKikvOwordmFyIGVuZFJlICA9IC9eRU5EID8oW14gXSopID8oLiopLzsKKy8qKkAtKi8KKwordmFyIGN1ckNvbW1pdCA9IG5ldyBDb21taXQoKTsKK3ZhciBjdXJHcm91cCAgPSB7fTsKKwordmFyIHBvbGxUaW1lciA9IG51bGw7CisKKy8qKgorICogUGFyc2Ugb3V0cHV0IGZyb20gJ2dpdCBibGFtZSAtLWluY3JlbWVudGFsIFsuLi5dJywgcmVjZWl2ZWQgdmlhCisgKiBYTUxIdHRwUmVxdWVzdCBmcm9tIHNlcnZlciAoYmxhbWVkYXRhVXJsKSwgYW5kIGNhbGwgaGFuZGxlTGluZQorICogKHdoaWNoIHVwZGF0ZXMgcGFnZSkgYXMgc29vbiBhcyBibGFtZSBlbnRyeSBpcyBjb21wbGV0ZWQuCisgKgorICogQHBhcmFtIHtTdHJpbmdbXX0gbGluZXM6IG5ldyBjb21wbGV0ZSBsaW5lcyBmcm9tIGJsYW1lZGF0YSBzZXJ2ZXIKKyAqCisgKiBAZ2xvYmFscyBjb21taXRzLCBjdXJDb21taXQsIGN1ckdyb3VwLCB0X2ludGVydmFsX3NlcnZlciwgY21kc19zZXJ2ZXIKKyAqIEBnbG9iYWxzIHNoYTFSZSwgaW5mb1JlLCBlbmRSZQorICovCitmdW5jdGlvbiBwcm9jZXNzQmxhbWVMaW5lcyhsaW5lcykgeworCXZhciBtYXRjaDsKKworCWZvciAodmFyIGkgPSAwLCBsZW4gPSBsaW5lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykgeworCisJCWlmICgobWF0Y2ggPSBzaGExUmUuZXhlYyhsaW5lc1tpXSkpKSB7CisJCQl2YXIgc2hhMSA9IG1hdGNoWzFdOworCQkJdmFyIHNyY2xpbmUgID0gcGFyc2VJbnQobWF0Y2hbMl0sIDEwKTsKKwkJCXZhciByZXNsaW5lICA9IHBhcnNlSW50KG1hdGNoWzNdLCAxMCk7CisJCQl2YXIgbnVtbGluZXMgPSBwYXJzZUludChtYXRjaFs0XSwgMTApOworCisJCQl2YXIgYyA9IGNvbW1pdHNbc2hhMV07CisJCQlpZiAoIWMpIHsKKwkJCQljID0gbmV3IENvbW1pdChzaGExKTsKKwkJCQljb21taXRzW3NoYTFdID0gYzsKKwkJCX0KKwkJCWN1ckNvbW1pdCA9IGM7CisKKwkJCWN1ckdyb3VwLnNyY2xpbmUgPSBzcmNsaW5lOworCQkJY3VyR3JvdXAucmVzbGluZSA9IHJlc2xpbmU7CisJCQljdXJHcm91cC5udW1saW5lcyA9IG51bWxpbmVzOworCisJCX0gZWxzZSBpZiAoKG1hdGNoID0gaW5mb1JlLmV4ZWMobGluZXNbaV0pKSkgeworCQkJdmFyIGluZm8gPSBtYXRjaFsxXTsKKwkJCXZhciBkYXRhID0gbWF0Y2hbMl07CisJCQlzd2l0Y2ggKGluZm8pIHsKKwkJCWNhc2UgJ2ZpbGVuYW1lJzoKKwkJCQljdXJDb21taXQuZmlsZW5hbWUgPSB1bnF1b3RlKGRhdGEpOworCQkJCS8vICdmaWxlbmFtZScgaW5mb3JtYXRpb24gdGVybWluYXRlcyB0aGUgZW50cnkKKwkJCQloYW5kbGVMaW5lKGN1ckNvbW1pdCwgY3VyR3JvdXApOworCQkJCXVwZGF0ZVByb2dyZXNzSW5mbygpOworCQkJCWJyZWFrOworCQkJY2FzZSAnYXV0aG9yJzoKKwkJCQljdXJDb21taXQuYXV0aG9yID0gZGF0YTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2F1dGhvci10aW1lJzoKKwkJCQljdXJDb21taXQuYXV0aG9yVGltZSA9IHBhcnNlSW50KGRhdGEsIDEwKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2F1dGhvci10eic6CisJCQkJY3VyQ29tbWl0LmF1dGhvclRpbWV6b25lID0gZGF0YTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3ByZXZpb3VzJzoKKwkJCQljdXJDb21taXQubnByZXZpb3VzKys7CisJCQkJLy8gc3RvcmUgb25seSBmaXJzdCAncHJldmlvdXMnIGhlYWRlcgorCQkJCWlmICghJ3ByZXZpb3VzJyBpbiBjdXJDb21taXQpIHsKKwkJCQkJdmFyIHBhcnRzID0gZGF0YS5zcGxpdCgnICcsIDIpOworCQkJCQljdXJDb21taXQucHJldmlvdXMgICAgPSBwYXJ0c1swXTsKKwkJCQkJY3VyQ29tbWl0LmZpbGVfcGFyZW50ID0gdW5xdW90ZShwYXJ0c1sxXSk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSAnYm91bmRhcnknOgorCQkJCWN1ckNvbW1pdC5ib3VuZGFyeSA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9IC8vIGVuZCBzd2l0Y2gKKworCQl9IGVsc2UgaWYgKChtYXRjaCA9IGVuZFJlLmV4ZWMobGluZXNbaV0pKSkgeworCQkJdF9pbnRlcnZhbF9zZXJ2ZXIgPSBtYXRjaFsxXTsKKwkJCWNtZHNfc2VydmVyID0gbWF0Y2hbMl07CisKKwkJfSBlbHNlIGlmIChsaW5lc1tpXSAhPT0gJycpIHsKKwkJCS8vIG1hbGZvcm1lZCBsaW5lCisKKwkJfSAvLyBlbmQgaWYgKG1hdGNoKQorCisJfSAvLyBlbmQgZm9yIChsaW5lcykKK30KKworLyoqCisgKiBQcm9jZXNzIG5ldyBkYXRhIGFuZCByZXR1cm4gcG9pbnRlciB0byBlbmQgb2YgcHJvY2Vzc2VkIHBhcnQKKyAqCisgKiBAcGFyYW0ge1N0cmluZ30gdW5wcm9jZXNzZWQ6IG5ldyBkYXRhIChmcm9tIG5leHRSZWFkUG9zKQorICogQHBhcmFtIHtOdW1iZXJ9IG5leHRSZWFkUG9zOiBlbmQgb2YgbGFzdCBwcm9jZXNzZWQgZGF0YQorICogQHJldHVybiB7TnVtYmVyfSBlbmQgb2YgcHJvY2Vzc2VkIGRhdGEgKG5ldyB2YWx1ZSBmb3IgbmV4dFJlYWRQb3MpCisgKi8KK2Z1bmN0aW9uIHByb2Nlc3NEYXRhKHVucHJvY2Vzc2VkLCBuZXh0UmVhZFBvcykgeworCXZhciBsYXN0TGluZUVuZCA9IHVucHJvY2Vzc2VkLmxhc3RJbmRleE9mKCdcbicpOworCWlmIChsYXN0TGluZUVuZCAhPT0gLTEpIHsKKwkJdmFyIGxpbmVzID0gdW5wcm9jZXNzZWQuc3Vic3RyaW5nKDAsIGxhc3RMaW5lRW5kKS5zcGxpdCgnXG4nKTsKKwkJbmV4dFJlYWRQb3MgKz0gbGFzdExpbmVFbmQgKyAxIC8qIDEgPT0gJ1xuJy5sZW5ndGggKi87CisKKwkJcHJvY2Vzc0JsYW1lTGluZXMobGluZXMpOworCX0gLy8gZW5kIGlmCisKKwlyZXR1cm4gbmV4dFJlYWRQb3M7Cit9CisKKy8qKgorICogSGFuZGxlIFhNTEh0dHBSZXF1ZXN0IGVycm9ycworICoKKyAqIEBwYXJhbSB7WE1MSHR0cFJlcXVlc3R9IHhocjogWE1MSHR0cFJlcXVlc3Qgb2JqZWN0CisgKgorICogQGdsb2JhbHMgcG9sbFRpbWVyLCBjb21taXRzLCBpblByb2dyZXNzCisgKi8KK2Z1bmN0aW9uIGhhbmRsZUVycm9yKHhocikgeworCWVycm9ySW5mbygnU2VydmVyIGVycm9yOiAnICsKKwkJeGhyLnN0YXR1cyArICcgLSAnICsgKHhoci5zdGF0dXNUZXh0IHx8ICdFcnJvciBjb250YWN0aW5nIHNlcnZlcicpKTsKKworCWNsZWFySW50ZXJ2YWwocG9sbFRpbWVyKTsKKwljb21taXRzID0ge307IC8vIGZyZWUgbWVtb3J5CisKKwlpblByb2dyZXNzID0gZmFsc2U7Cit9CisKKy8qKgorICogQ2FsbGVkIGFmdGVyIFhNTEh0dHBSZXF1ZXN0IGZpbmlzaGVzIChsb2FkcykKKyAqCisgKiBAcGFyYW0ge1hNTEh0dHBSZXF1ZXN0fSB4aHI6IFhNTEh0dHBSZXF1ZXN0IG9iamVjdCAodW51c2VkKQorICoKKyAqIEBnbG9iYWxzIHBvbGxUaW1lciwgY29tbWl0cywgaW5Qcm9ncmVzcworICovCitmdW5jdGlvbiByZXNwb25zZUxvYWRlZCh4aHIpIHsKKwljbGVhckludGVydmFsKHBvbGxUaW1lcik7CisKKwlmaXhDb2xvcnNBbmRHcm91cHMoKTsKKwl3cml0ZVRpbWVJbnRlcnZhbCgpOworCWNvbW1pdHMgPSB7fTsgLy8gZnJlZSBtZW1vcnkKKworCWluUHJvZ3Jlc3MgPSBmYWxzZTsKK30KKworLyoqCisgKiBoYW5kbGVyIGZvciBYTUxIdHRwUmVxdWVzdCBvbnJlYWR5c3RhdGVjaGFuZ2UgZXZlbnQKKyAqIEBzZWUgc3RhcnRCbGFtZQorICoKKyAqIEBnbG9iYWxzIHhociwgaW5Qcm9ncmVzcworICovCitmdW5jdGlvbiBoYW5kbGVSZXNwb25zZSgpIHsKKworCS8qCisJICogeGhyLnJlYWR5U3RhdGUKKwkgKgorCSAqICBWYWx1ZSAgQ29uc3RhbnQgKFczQykgICAgRGVzY3JpcHRpb24KKwkgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAwICAgICAgVU5TRU5UICAgICAgICAgICAgb3BlbigpIGhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LgorCSAqICAxICAgICAgT1BFTkVEICAgICAgICAgICAgc2VuZCgpIGhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LgorCSAqICAyICAgICAgSEVBREVSU19SRUNFSVZFRCAgc2VuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIGhlYWRlcnMKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzdGF0dXMgYXJlIGF2YWlsYWJsZS4KKwkgKiAgMyAgICAgIExPQURJTkcgICAgICAgICAgIERvd25sb2FkaW5nOyByZXNwb25zZVRleHQgaG9sZHMgcGFydGlhbCBkYXRhLgorCSAqICA0ICAgICAgRE9ORSAgICAgICAgICAgICAgVGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS4KKwkgKi8KKworCWlmICh4aHIucmVhZHlTdGF0ZSAhPT0gNCAmJiB4aHIucmVhZHlTdGF0ZSAhPT0gMykgeworCQlyZXR1cm47CisJfQorCisJLy8gdGhlIHNlcnZlciByZXR1cm5lZCBlcnJvcgorCS8vIHRyeSAuLi4gY2F0Y2ggYmxvY2sgaXMgdG8gd29yayBhcm91bmQgYnVnIGluIElFOAorCXRyeSB7CisJCWlmICh4aHIucmVhZHlTdGF0ZSA9PT0gMyAmJiB4aHIuc3RhdHVzICE9PSAyMDApIHsKKwkJCXJldHVybjsKKwkJfQorCX0gY2F0Y2ggKGUpIHsKKwkJcmV0dXJuOworCX0KKwlpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQgJiYgeGhyLnN0YXR1cyAhPT0gMjAwKSB7CisJCWhhbmRsZUVycm9yKHhocik7CisJCXJldHVybjsKKwl9CisKKwkvLyBJbiBrb25xdWVyb3IgeGhyLnJlc3BvbnNlVGV4dCBpcyBzb21ldGltZXMgbnVsbCBoZXJlLi4uCisJaWYgKHhoci5yZXNwb25zZVRleHQgPT09IG51bGwpIHsKKwkJcmV0dXJuOworCX0KKworCS8vIGluIGNhc2Ugd2Ugd2VyZSBjYWxsZWQgYmVmb3JlIGZpbmlzaGVkIHByb2Nlc3NpbmcKKwlpZiAoaW5Qcm9ncmVzcykgeworCQlyZXR1cm47CisJfSBlbHNlIHsKKwkJaW5Qcm9ncmVzcyA9IHRydWU7CisJfQorCisJLy8gZXh0cmFjdCBuZXcgd2hvbGUgKGNvbXBsZXRlKSBsaW5lcywgYW5kIHByb2Nlc3MgdGhlbQorCXdoaWxlICh4aHIucHJldkRhdGFMZW5ndGggIT09IHhoci5yZXNwb25zZVRleHQubGVuZ3RoKSB7CisJCWlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCAmJgorCQkgICAgeGhyLnByZXZEYXRhTGVuZ3RoID09PSB4aHIucmVzcG9uc2VUZXh0Lmxlbmd0aCkgeworCQkJYnJlYWs7CisJCX0KKworCQl4aHIucHJldkRhdGFMZW5ndGggPSB4aHIucmVzcG9uc2VUZXh0Lmxlbmd0aDsKKwkJdmFyIHVucHJvY2Vzc2VkID0geGhyLnJlc3BvbnNlVGV4dC5zdWJzdHJpbmcoeGhyLm5leHRSZWFkUG9zKTsKKwkJeGhyLm5leHRSZWFkUG9zID0gcHJvY2Vzc0RhdGEodW5wcm9jZXNzZWQsIHhoci5uZXh0UmVhZFBvcyk7CisJfSAvLyBlbmQgd2hpbGUKKworCS8vIGRpZCB3ZSBmaW5pc2ggd29yaz8KKwlpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQgJiYKKwkgICAgeGhyLnByZXZEYXRhTGVuZ3RoID09PSB4aHIucmVzcG9uc2VUZXh0Lmxlbmd0aCkgeworCQlyZXNwb25zZUxvYWRlZCh4aHIpOworCX0KKworCWluUHJvZ3Jlc3MgPSBmYWxzZTsKK30KKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyoqCisgKiBJbmNyZW1lbnRhbGx5IHVwZGF0ZSBsaW5lIGRhdGEgaW4gYmxhbWVfaW5jcmVtZW50YWwgdmlldyBpbiBnaXR3ZWIuCisgKgorICogQHBhcmFtIHtTdHJpbmd9IGJsYW1lZGF0YVVybDogVVJMIHRvIHNlcnZlciBzY3JpcHQgZ2VuZXJhdGluZyBibGFtZSBkYXRhLgorICogQHBhcmFtIHtTdHJpbmd9IGJVcmw6IHBhcnRpYWwgVVJMIHRvIHByb2plY3QsIHVzZWQgdG8gZ2VuZXJhdGUgbGlua3MuCisgKgorICogQ2FsbGVkIGZyb20gJ2JsYW1lX2luY3JlbWVudGFsJyB2aWV3IGFmdGVyIGxvYWRpbmcgdGFibGUgd2l0aAorICogZmlsZSBjb250ZW50cywgYSBiYXNlIGZvciBibGFtZSB2aWV3LgorICoKKyAqIEBnbG9iYWxzIHhociwgdDAsIHByb2plY3RVcmwsIGRpdl9wcm9ncmVzc19iYXIsIHRvdGFsTGluZXMsIHBvbGxUaW1lcgorKi8KK2Z1bmN0aW9uIHN0YXJ0QmxhbWUoYmxhbWVkYXRhVXJsLCBiVXJsKSB7CisKKwl4aHIgPSBjcmVhdGVSZXF1ZXN0T2JqZWN0KCk7CisJaWYgKCF4aHIpIHsKKwkJZXJyb3JJbmZvKCdFUlJPUjogWE1MSHR0cFJlcXVlc3Qgbm90IHN1cHBvcnRlZCcpOworCQlyZXR1cm47CisJfQorCisJdDAgPSBuZXcgRGF0ZSgpOworCXByb2plY3RVcmwgPSBiVXJsICsgKGJVcmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICc7Jyk7CisJaWYgKChkaXZfcHJvZ3Jlc3NfYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb2dyZXNzX2JhcicpKSkgeworCQkvL2Rpdl9wcm9ncmVzc19iYXIuc2V0QXR0cmlidXRlKCdzdHlsZScsICd3aWR0aDogMTAwJTsnKTsKKwkJZGl2X3Byb2dyZXNzX2Jhci5zdHlsZS5jc3NUZXh0ID0gJ3dpZHRoOiAxMDAlOyc7CisJfQorCXRvdGFsTGluZXMgPSBjb3VudExpbmVzKCk7CisJdXBkYXRlUHJvZ3Jlc3NJbmZvKCk7CisKKwkvKiBhZGQgZXh0cmEgcHJvcGVydGllcyB0byB4aHIgb2JqZWN0IHRvIGhlbHAgcHJvY2Vzc2luZyByZXNwb25zZSAqLworCXhoci5wcmV2RGF0YUxlbmd0aCA9IC0xOyAgLy8gdXNlZCB0byBkZXRlY3QgaWYgd2UgaGF2ZSBuZXcgZGF0YQorCXhoci5uZXh0UmVhZFBvcyA9IDA7ICAgICAgLy8gd2hlcmUgdW5yZWFkIHBhcnQgb2YgcmVzcG9uc2Ugc3RhcnRzCisKKwl4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gaGFuZGxlUmVzcG9uc2U7CisJLy94aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkgeyBoYW5kbGVSZXNwb25zZSh4aHIpOyB9OworCisJeGhyLm9wZW4oJ0dFVCcsIGJsYW1lZGF0YVVybCk7CisJeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0FjY2VwdCcsICd0ZXh0L3BsYWluJyk7CisJeGhyLnNlbmQobnVsbCk7CisKKwkvLyBub3QgYWxsIGJyb3dzZXJzIGNhbGwgb25yZWFkeXN0YXRlY2hhbmdlIGV2ZW50IG9uIGVhY2ggc2VydmVyIGZsdXNoCisJLy8gcG9sbCByZXNwb25zZSB1c2luZyB0aW1lciBldmVyeSBzZWNvbmQgdG8gaGFuZGxlIHRoaXMgaXNzdWUKKwlwb2xsVGltZXIgPSBzZXRJbnRlcnZhbCh4aHIub25yZWFkeXN0YXRlY2hhbmdlLCAxMDAwKTsKK30KKworLy8gZW5kIG9mIGdpdHdlYi5qcwpkaWZmIC0tZ2l0IGEvZ2l0d2ViL2dpdHdlYi5wZXJsIGIvZ2l0d2ViL2dpdHdlYi5wZXJsCmluZGV4IDZmMzU1ZDguLjlkNGM1ODIgMTAwNzU1Ci0tLSBhL2dpdHdlYi9naXR3ZWIucGVybAorKysgYi9naXR3ZWIvZ2l0d2ViLnBlcmwKQEAgLTE4LDYgKzE4LDEyIEBACiB1c2UgRmlsZTo6QmFzZW5hbWUgcXcoYmFzZW5hbWUpOwogYmlubW9kZSBTVERPVVQsICc6dXRmOCc7CiAKK291ciAkdDA7CitpZiAoZXZhbCB7IHJlcXVpcmUgVGltZTo6SGlSZXM7IDE7IH0pIHsKKwkkdDAgPSBbVGltZTo6SGlSZXM6OmdldHRpbWVvZmRheSgpXTsKK30KK291ciAkbnVtYmVyX29mX2dpdF9jbWRzID0gMDsKKwogQkVHSU4gewogCUNHSS0+Y29tcGlsZSgpIGlmICRFTlZ7J01PRF9QRVJMJ307CiB9CkBAIC05MCwxMSArOTYsMTMgQEAKIG91ciAkbG9nbyA9ICIrK0dJVFdFQl9MT0dPKysiOwogIyBVUkkgb2YgR0lUIGZhdmljb24sIGFzc3VtZWQgdG8gYmUgaW1hZ2UvcG5nIHR5cGUKIG91ciAkZmF2aWNvbiA9ICIrK0dJVFdFQl9GQVZJQ09OKysiOworIyBVUkkgb2YgZ2l0d2ViLmpzIChKYXZhU2NyaXB0IGNvZGUgZm9yIGdpdHdlYikKK291ciAkamF2YXNjcmlwdCA9ICIrK0dJVFdFQl9KUysrIjsKIAogIyBVUkkgYW5kIGxhYmVsICh0aXRsZSkgb2YgR0lUIGxvZ28gbGluawogI291ciAkbG9nb191cmwgPSAiaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zb2Z0d2FyZS9zY20vZ2l0L2RvY3MvIjsKICNvdXIgJGxvZ29fbGFiZWwgPSAiZ2l0IGRvY3VtZW50YXRpb24iOwotb3VyICRsb2dvX3VybCA9ICJodHRwOi8vZ2l0Lm9yLmN6LyI7CitvdXIgJGxvZ29fdXJsID0gImh0dHA6Ly9naXQtc2NtLmNvbS8iOwogb3VyICRsb2dvX2xhYmVsID0gImdpdCBob21lcGFnZSI7CiAKICMgc291cmNlIG9mIHByb2plY3RzIGxpc3QKQEAgLTE2MCw3ICsxNjgsOCBAQAogCSMgCSdzdWZmaXgnID0+IGZpbGVuYW1lIHN1ZmZpeCwKIAkjIAknZm9ybWF0JyA9PiAtLWZvcm1hdCBmb3IgZ2l0LWFyY2hpdmUsCiAJIyAJJ2NvbXByZXNzb3InID0+IFtjb21wcmVzc29yIGNvbW1hbmQgYW5kIGFyZ3VtZW50c10KLQkjIAkgICAgICAgICAgICAgICAgKGFycmF5IHJlZmVyZW5jZSwgb3B0aW9uYWwpfQorCSMgCSAgICAgICAgICAgICAgICAoYXJyYXkgcmVmZXJlbmNlLCBvcHRpb25hbCkKKwkjIAknZGlzYWJsZWQnID0+IGJvb2xlYW4gKG9wdGlvbmFsKX0KIAkjCiAJJ3RneicgPT4gewogCQknZGlzcGxheScgPT4gJ3Rhci5neicsCkBAIC0xNzYsNiArMTg1LDE0IEBACiAJCSdmb3JtYXQnID0+ICd0YXInLAogCQknY29tcHJlc3NvcicgPT4gWydiemlwMiddfSwKIAorCSd0eHonID0+IHsKKwkJJ2Rpc3BsYXknID0+ICd0YXIueHonLAorCQkndHlwZScgPT4gJ2FwcGxpY2F0aW9uL3gteHonLAorCQknc3VmZml4JyA9PiAnLnRhci54eicsCisJCSdmb3JtYXQnID0+ICd0YXInLAorCQknY29tcHJlc3NvcicgPT4gWyd4eiddLAorCQknZGlzYWJsZWQnID0+IDF9LAorCiAJJ3ppcCcgPT4gewogCQknZGlzcGxheScgPT4gJ3ppcCcsCiAJCSd0eXBlJyA9PiAnYXBwbGljYXRpb24veC16aXAnLApAQCAtMTg4LDYgKzIwNSw3IEBACiBvdXIgJWtub3duX3NuYXBzaG90X2Zvcm1hdF9hbGlhc2VzID0gKAogCSdnemlwJyAgPT4gJ3RneicsCiAJJ2J6aXAyJyA9PiAndGJ6MicsCisJJ3h6JyAgICA9PiAndHh6JywKIAogCSMgYmFja3dhcmQgY29tcGF0aWJpbGl0eTogbGVnYWN5IGdpdHdlYiBjb25maWcgc3VwcG9ydAogCSd4LWd6aXAnID0+IHVuZGVmLCAnZ3onID0+IHVuZGVmLApAQCAtMTk1LDYgKzIxMywyMCBAQAogCSd4LXppcCcgPT4gdW5kZWYsICcnID0+IHVuZGVmLAogKTsKIAorIyBQaXhlbCBzaXplcyBmb3IgaWNvbnMgYW5kIGF2YXRhcnMuIElmIHRoZSBkZWZhdWx0IGZvbnQgc2l6ZXMgb3IgbGluZWhlaWdodHMKKyMgYXJlIGNoYW5nZWQsIGl0IG1heSBiZSBhcHByb3ByaWF0ZSB0byBjaGFuZ2UgdGhlc2UgdmFsdWVzIHRvbyB2aWEKKyMgJEdJVFdFQl9DT05GSUcuCitvdXIgJWF2YXRhcl9zaXplID0gKAorCSdkZWZhdWx0JyA9PiAxNiwKKwknZG91YmxlJyAgPT4gMzIKKyk7CisKKyMgVXNlZCB0byBzZXQgdGhlIG1heGltdW0gbG9hZCB0aGF0IHdlIHdpbGwgc3RpbGwgcmVzcG9uZCB0byBnaXR3ZWIgcXVlcmllcy4KKyMgSWYgc2VydmVyIGxvYWQgZXhjZWVkIHRoaXMgdmFsdWUgdGhlbiByZXR1cm4gIjUwMyBzZXJ2ZXIgYnVzeSIgZXJyb3IuCisjIElmIGdpdHdlYiBjYW5ub3QgZGV0ZXJtaW5lZCBzZXJ2ZXIgbG9hZCwgaXQgaXMgdGFrZW4gdG8gYmUgMC4KKyMgTGVhdmUgaXQgdW5kZWZpbmVkIChvciBzZXQgdG8gJ3VuZGVmJykgdG8gdHVybiBvZmYgbG9hZCBjaGVja2luZy4KK291ciAkbWF4bG9hZCA9IDMwMDsKKwogIyBZb3UgZGVmaW5lIHNpdGUtd2lkZSBmZWF0dXJlIGRlZmF1bHRzIGhlcmU7IG92ZXJyaWRlIHRoZW0gd2l0aAogIyAkR0lUV0VCX0NPTkZJRyBhcyBuZWNlc3NhcnkuCiBvdXIgJWZlYXR1cmUgPSAoCkBAIC0yNzksNiArMzExLDE5IEBACiAJCSdvdmVycmlkZScgPT4gMCwKIAkJJ2RlZmF1bHQnID0+IFsxXX0sCiAKKwkjIEVuYWJsZSBzaG93aW5nIHNpemUgb2YgYmxvYnMgaW4gYSAndHJlZScgdmlldywgaW4gYSBzZXBhcmF0ZQorCSMgY29sdW1uLCBzaW1pbGFyIHRvIHdoYXQgJ2xzIC1sJyBkb2VzLiAgVGhpcyBjb3N0IGEgYml0IG9mIElPLgorCisJIyBUbyBkaXNhYmxlIHN5c3RlbSB3aWRlIGhhdmUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydzaG93LXNpemVzJ317J2RlZmF1bHQnfSA9IFswXTsKKwkjIFRvIGhhdmUgcHJvamVjdCBzcGVjaWZpYyBjb25maWcgZW5hYmxlIG92ZXJyaWRlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsnc2hvdy1zaXplcyd9eydvdmVycmlkZSd9ID0gMTsKKwkjIGFuZCBpbiBwcm9qZWN0IGNvbmZpZyBnaXR3ZWIuc2hvd3NpemVzID0gMHwxOworCSdzaG93LXNpemVzJyA9PiB7CisJCSdzdWInID0+IHN1YiB7IGZlYXR1cmVfYm9vbCgnc2hvd3NpemVzJywgQF8pIH0sCisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFsxXX0sCisKIAkjIE1ha2UgZ2l0d2ViIHVzZSBhbiBhbHRlcm5hdGl2ZSBmb3JtYXQgb2YgdGhlIFVSTHMgd2hpY2ggY2FuIGJlCiAJIyBtb3JlIHJlYWRhYmxlIGFuZCBuYXR1cmFsLWxvb2tpbmc6IHByb2plY3QgbmFtZSBpcyBlbWJlZGRlZAogCSMgZGlyZWN0bHkgaW4gdGhlIHBhdGggYW5kIHRoZSBxdWVyeSBzdHJpbmcgY29udGFpbnMgb3RoZXIKQEAgLTM2NSw2ICs0MTAsNDEgQEAKIAkJJ3N1YicgPT4gXCZmZWF0dXJlX3BhdGNoZXMsCiAJCSdvdmVycmlkZScgPT4gMCwKIAkJJ2RlZmF1bHQnID0+IFsxNl19LAorCisJIyBBdmF0YXIgc3VwcG9ydC4gV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgdmlld3Mgc3VjaCBhcworCSMgc2hvcnRsb2cgb3IgY29tbWl0IHdpbGwgZGlzcGxheSBhbiBhdmF0YXIgYXNzb2NpYXRlZCB3aXRoCisJIyB0aGUgZW1haWwgb2YgdGhlIGNvbW1pdHRlcihzKSBhbmQvb3IgYXV0aG9yKHMpLgorCisJIyBDdXJyZW50bHkgYXZhaWxhYmxlIHByb3ZpZGVycyBhcmUgZ3JhdmF0YXIgYW5kIHBpY29uLgorCSMgSWYgYW4gdW5rbm93biBwcm92aWRlciBpcyBzcGVjaWZpZWQsIHRoZSBmZWF0dXJlIGlzIGRpc2FibGVkLgorCisJIyBHcmF2YXRhciBkZXBlbmRzIG9uIERpZ2VzdDo6TUQ1LgorCSMgUGljb24gY3VycmVudGx5IHJlbGllcyBvbiB0aGUgaW5kaWFuYS5lZHUgZGF0YWJhc2UuCisKKwkjIFRvIGVuYWJsZSBzeXN0ZW0gd2lkZSBoYXZlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsnYXZhdGFyJ317J2RlZmF1bHQnfSA9IFsnPHByb3ZpZGVyPiddOworCSMgd2hlcmUgPHByb3ZpZGVyPiBpcyBlaXRoZXIgZ3JhdmF0YXIgb3IgcGljb24uCisJIyBUbyBoYXZlIHByb2plY3Qgc3BlY2lmaWMgY29uZmlnIGVuYWJsZSBvdmVycmlkZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J2F2YXRhcid9eydvdmVycmlkZSd9ID0gMTsKKwkjIGFuZCBpbiBwcm9qZWN0IGNvbmZpZyBnaXR3ZWIuYXZhdGFyID0gPHByb3ZpZGVyPjsKKwknYXZhdGFyJyA9PiB7CisJCSdzdWInID0+IFwmZmVhdHVyZV9hdmF0YXIsCisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFsnJ119LAorCisJIyBFbmFibGUgZGlzcGxheWluZyBob3cgbXVjaCB0aW1lIGFuZCBob3cgbWFueSBnaXQgY29tbWFuZHMKKwkjIGl0IHRvb2sgdG8gZ2VuZXJhdGUgYW5kIGRpc3BsYXkgcGFnZS4gIERpc2FibGVkIGJ5IGRlZmF1bHQuCisJIyBQcm9qZWN0IHNwZWNpZmljIG92ZXJyaWRlIGlzIG5vdCBzdXBwb3J0ZWQuCisJJ3RpbWVkJyA9PiB7CisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFswXX0sCisKKwkjIEVuYWJsZSB0dXJuaW5nIHNvbWUgbGlua3MgaW50byBsaW5rcyB0byBhY3Rpb25zIHdoaWNoIHJlcXVpcmUKKwkjIEphdmFTY3JpcHQgdG8gcnVuIChsaWtlICdibGFtZV9pbmNyZW1lbnRhbCcpLiAgTm90IGVuYWJsZWQgYnkKKwkjIGRlZmF1bHQuICBQcm9qZWN0IHNwZWNpZmljIG92ZXJyaWRlIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLgorCSdqYXZhc2NyaXB0LWFjdGlvbnMnID0+IHsKKwkJJ292ZXJyaWRlJyA9PiAwLAorCQknZGVmYXVsdCcgPT4gWzBdfSwKICk7CiAKIHN1YiBnaXR3ZWJfZ2V0X2ZlYXR1cmUgewpAQCAtMzc0LDcgKzQ1NCwxMSBAQAogCQkkZmVhdHVyZXskbmFtZX17J3N1Yid9LAogCQkkZmVhdHVyZXskbmFtZX17J292ZXJyaWRlJ30sCiAJCUB7JGZlYXR1cmV7JG5hbWV9eydkZWZhdWx0J319KTsKLQlpZiAoISRvdmVycmlkZSkgeyByZXR1cm4gQGRlZmF1bHRzOyB9CisJIyBwcm9qZWN0IHNwZWNpZmljIG92ZXJyaWRlIGlzIHBvc3NpYmxlIG9ubHkgaWYgd2UgaGF2ZSBwcm9qZWN0CisJb3VyICRnaXRfZGlyOyAjIGdsb2JhbCB2YXJpYWJsZSwgZGVjbGFyZWQgbGF0ZXIKKwlpZiAoISRvdmVycmlkZSB8fCAhZGVmaW5lZCAkZ2l0X2RpcikgeworCQlyZXR1cm4gQGRlZmF1bHRzOworCX0KIAlpZiAoIWRlZmluZWQgJHN1YikgewogCQl3YXJuICJmZWF0dXJlICRuYW1lIGlzIG5vdCBvdmVycmlkYWJsZSI7CiAJCXJldHVybiBAZGVmYXVsdHM7CkBAIC00MzMsNiArNTE3LDEyIEBACiAJcmV0dXJuICgkX1swXSk7CiB9CiAKK3N1YiBmZWF0dXJlX2F2YXRhciB7CisJbXkgQHZhbCA9IChnaXRfZ2V0X3Byb2plY3RfY29uZmlnKCdhdmF0YXInKSk7CisKKwlyZXR1cm4gQHZhbCA/IEB2YWwgOiBAXzsKK30KKwogIyBjaGVja2luZyBIRUFEIGZpbGUgd2l0aCAtZSBpcyBmcmFnaWxlIGlmIHRoZSByZXBvc2l0b3J5IHdhcwogIyBpbml0aWFsaXplZCBsb25nIHRpbWUgYWdvIChpLmUuIHN5bWxpbmsgSEVBRCkgYW5kIHdhcyBwYWNrLXJlZidlZAogIyBhbmQgdGhlbiBwcnVuZWQuCkBAIC00NTgsMjMgKzU0OCw1NCBAQAogCUBmbXRzID0gbWFwIHsKIAkJZXhpc3RzICRrbm93bl9zbmFwc2hvdF9mb3JtYXRfYWxpYXNlc3skX30gPwogCQkgICAgICAgJGtub3duX3NuYXBzaG90X2Zvcm1hdF9hbGlhc2VzeyRffSA6ICRffSBAZm10czsKLQlAZm10cyA9IGdyZXAoZXhpc3RzICRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyRffSwgQGZtdHMpOwotCisJQGZtdHMgPSBncmVwIHsKKwkJZXhpc3RzICRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyRffSAmJgorCQkhJGtub3duX3NuYXBzaG90X2Zvcm1hdHN7JF99eydkaXNhYmxlZCd9fSBAZm10czsKIH0KIAogb3VyICRHSVRXRUJfQ09ORklHID0gJEVOVnsnR0lUV0VCX0NPTkZJRyd9IHx8ICIrK0dJVFdFQl9DT05GSUcrKyI7CitvdXIgJEdJVFdFQl9DT05GSUdfU1lTVEVNID0gJEVOVnsnR0lUV0VCX0NPTkZJR19TWVNURU0nfSB8fCAiKytHSVRXRUJfQ09ORklHX1NZU1RFTSsrIjsKKyMgZGllIGlmIHRoZXJlIGFyZSBlcnJvcnMgcGFyc2luZyBjb25maWcgZmlsZQogaWYgKC1lICRHSVRXRUJfQ09ORklHKSB7CiAJZG8gJEdJVFdFQl9DT05GSUc7Ci19IGVsc2UgewotCW91ciAkR0lUV0VCX0NPTkZJR19TWVNURU0gPSAkRU5WeydHSVRXRUJfQ09ORklHX1NZU1RFTSd9IHx8ICIrK0dJVFdFQl9DT05GSUdfU1lTVEVNKysiOwotCWRvICRHSVRXRUJfQ09ORklHX1NZU1RFTSBpZiAtZSAkR0lUV0VCX0NPTkZJR19TWVNURU07CisJZGllICRAIGlmICRAOworfSBlbHNpZiAoLWUgJEdJVFdFQl9DT05GSUdfU1lTVEVNKSB7CisJZG8gJEdJVFdFQl9DT05GSUdfU1lTVEVNOworCWRpZSAkQCBpZiAkQDsKK30KKworIyBHZXQgbG9hZGF2ZyBvZiBzeXN0ZW0sIHRvIGNvbXBhcmUgYWdhaW5zdCAkbWF4bG9hZC4KKyMgQ3VycmVudGx5IGl0IHJlcXVpcmVzICcvcHJvYy9sb2FkYXZnJyBwcmVzZW50IHRvIGdldCBsb2FkYXZnOworIyBpZiBpdCBpcyBub3QgcHJlc2VudCBpdCByZXR1cm5zIDAsIHdoaWNoIG1lYW5zIG5vIGxvYWQgY2hlY2tpbmcuCitzdWIgZ2V0X2xvYWRhdmcgeworCWlmKCAtZSAnL3Byb2MvbG9hZGF2ZycgKXsKKwkJb3BlbiBteSAkZmQsICc8JywgJy9wcm9jL2xvYWRhdmcnCisJCQlvciByZXR1cm4gMDsKKwkJbXkgQGxvYWQgPSBzcGxpdCgvXHMrLywgc2NhbGFyIDwkZmQ+KTsKKwkJY2xvc2UgJGZkOworCisJCSMgVGhlIGZpcnN0IHRocmVlIGNvbHVtbnMgbWVhc3VyZSBDUFUgYW5kIElPIHV0aWxpemF0aW9uIG9mIHRoZSBsYXN0IG9uZSwKKwkJIyBmaXZlLCBhbmQgMTAgbWludXRlIHBlcmlvZHMuICBUaGUgZm91cnRoIGNvbHVtbiBzaG93cyB0aGUgbnVtYmVyIG9mCisJCSMgY3VycmVudGx5IHJ1bm5pbmcgcHJvY2Vzc2VzIGFuZCB0aGUgdG90YWwgbnVtYmVyIG9mIHByb2Nlc3NlcyBpbiB0aGUgbS9uCisJCSMgZm9ybWF0LiAgVGhlIGxhc3QgY29sdW1uIGRpc3BsYXlzIHRoZSBsYXN0IHByb2Nlc3MgSUQgdXNlZC4KKwkJcmV0dXJuICRsb2FkWzBdIHx8IDA7CisJfQorCSMgYWRkaXRpb25hbCBjaGVja3MgZm9yIGxvYWQgYXZlcmFnZSBzaG91bGQgZ28gaGVyZSBmb3IgdGhpbmdzIHRoYXQgZG9uJ3QgZXhwb3J0CisJIyAvcHJvYy9sb2FkYXZnCisKKwlyZXR1cm4gMDsKIH0KIAogIyB2ZXJzaW9uIG9mIHRoZSBjb3JlIGdpdCBiaW5hcnkKIG91ciAkZ2l0X3ZlcnNpb24gPSBxeCgiJEdJVCIgLS12ZXJzaW9uKSA9fiBtL2dpdCB2ZXJzaW9uICguKikkLyA/ICQxIDogInVua25vd24iOworJG51bWJlcl9vZl9naXRfY21kcysrOwogCiAkcHJvamVjdHNfbGlzdCB8fD0gJHByb2plY3Ryb290OwogCitpZiAoZGVmaW5lZCAkbWF4bG9hZCAmJiBnZXRfbG9hZGF2ZygpID4gJG1heGxvYWQpIHsKKwlkaWVfZXJyb3IoNTAzLCAiVGhlIGxvYWQgYXZlcmFnZSBvbiB0aGUgc2VydmVyIGlzIHRvbyBoaWdoIik7Cit9CisKICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIyBpbnB1dCB2YWxpZGF0aW9uIGFuZCBkaXNwYXRjaAogCkBAIC01MDksMTIgKzYzMCwxNiBAQAogCXNuYXBzaG90X2Zvcm1hdCA9PiAic2YiLAogCWV4dHJhX29wdGlvbnMgPT4gIm9wdCIsCiAJc2VhcmNoX3VzZV9yZWdleHAgPT4gInNyIiwKKwkjIHRoaXMgbXVzdCBiZSBsYXN0IGVudHJ5IChmb3IgbWFuaXB1bGF0aW9uIGZyb20gSmF2YVNjcmlwdCkKKwlqYXZhc2NyaXB0ID0+ICJqcyIKICk7CiBvdXIgJWNnaV9wYXJhbV9tYXBwaW5nID0gQGNnaV9wYXJhbV9tYXBwaW5nOwogCiAjIHdlIHdpbGwgYWxzbyBuZWVkIHRvIGtub3cgdGhlIHBvc3NpYmxlIGFjdGlvbnMsIGZvciB2YWxpZGF0aW9uCiBvdXIgJWFjdGlvbnMgPSAoCiAJImJsYW1lIiA9PiBcJmdpdF9ibGFtZSwKKwkiYmxhbWVfaW5jcmVtZW50YWwiID0+IFwmZ2l0X2JsYW1lX2luY3JlbWVudGFsLAorCSJibGFtZV9kYXRhIiA9PiBcJmdpdF9ibGFtZV9kYXRhLAogCSJibG9iZGlmZiIgPT4gXCZnaXRfYmxvYmRpZmYsCiAJImJsb2JkaWZmX3BsYWluIiA9PiBcJmdpdF9ibG9iZGlmZl9wbGFpbiwKIAkiYmxvYiIgPT4gXCZnaXRfYmxvYiwKQEAgLTY5MCw5ICs4MTUsMTAgQEAKIAkJIyBmb3JtYXQga2V5IGl0c2VsZiwgd2l0aCBhIHByZXBlbmRlZCBkb3QKIAkJd2hpbGUgKG15ICgkZm10LCAkb3B0KSA9IGVhY2ggJWtub3duX3NuYXBzaG90X2Zvcm1hdHMpIHsKIAkJCW15ICRoYXNoID0gJHJlZm5hbWU7Ci0JCQlteSAkc2Z4OwotCQkJJGhhc2ggPX4gcy8oXFEkb3B0LT57J3N1ZmZpeCd9XEV8XFEuJGZtdFxFKSQvLzsKLQkJCW5leHQgdW5sZXNzICRzZnggPSAkMTsKKwkJCXVubGVzcyAoJGhhc2ggPX4gcy8oXFEkb3B0LT57J3N1ZmZpeCd9XEV8XFEuJGZtdFxFKSQvLykgeworCQkJCW5leHQ7CisJCQl9CisJCQlteSAkc2Z4ID0gJDE7CiAJCQkjIGEgdmFsaWQgc3VmZml4IHdhcyBmb3VuZCwgc28gc2V0IHRoZSBzbmFwc2hvdCBmb3JtYXQKIAkJCSMgYW5kIHJlc2V0IHRoZSBoYXNoIHBhcmFtZXRlcgogCQkJJGlucHV0X3BhcmFtc3snc25hcHNob3RfZm9ybWF0J30gPSAkZm10OwpAQCAtODEzLDYgKzkzOSwxOSBAQAogb3VyIEBzbmFwc2hvdF9mbXRzID0gZ2l0d2ViX2dldF9mZWF0dXJlKCdzbmFwc2hvdCcpOwogQHNuYXBzaG90X2ZtdHMgPSBmaWx0ZXJfc25hcHNob3RfZm10cyhAc25hcHNob3RfZm10cyk7CiAKKyMgY2hlY2sgdGhhdCB0aGUgYXZhdGFyIGZlYXR1cmUgaXMgc2V0IHRvIGEga25vd24gcHJvdmlkZXIgbmFtZSwKKyMgYW5kIGZvciBlYWNoIHByb3ZpZGVyIGNoZWNrIGlmIHRoZSBkZXBlbmRlbmNpZXMgYXJlIHNhdGlzZmllZC4KKyMgaWYgdGhlIHByb3ZpZGVyIG5hbWUgaXMgaW52YWxpZCBvciB0aGUgZGVwZW5kZW5jaWVzIGFyZSBub3QgbWV0LAorIyByZXNldCAkZ2l0X2F2YXRhciB0byB0aGUgZW1wdHkgc3RyaW5nLgorb3VyICgkZ2l0X2F2YXRhcikgPSBnaXR3ZWJfZ2V0X2ZlYXR1cmUoJ2F2YXRhcicpOworaWYgKCRnaXRfYXZhdGFyIGVxICdncmF2YXRhcicpIHsKKwkkZ2l0X2F2YXRhciA9ICcnIHVubGVzcyAoZXZhbCB7IHJlcXVpcmUgRGlnZXN0OjpNRDU7IDE7IH0pOworfSBlbHNpZiAoJGdpdF9hdmF0YXIgZXEgJ3BpY29uJykgeworCSMgbm8gZGVwZW5kZW5jaWVzCit9IGVsc2UgeworCSRnaXRfYXZhdGFyID0gJyc7Cit9CisKICMgZGlzcGF0Y2gKIGlmICghZGVmaW5lZCAkYWN0aW9uKSB7CiAJaWYgKGRlZmluZWQgJGhhc2gpIHsKQEAgLTgyOCw3ICs5NjcsNyBAQAogaWYgKCFkZWZpbmVkKCRhY3Rpb25zeyRhY3Rpb259KSkgewogCWRpZV9lcnJvcig0MDAsICJVbmtub3duIGFjdGlvbiIpOwogfQotaWYgKCRhY3Rpb24gIX4gbS9eKG9wbWx8cHJvamVjdF9saXN0fHByb2plY3RfaW5kZXgpJC8gJiYKK2lmICgkYWN0aW9uICF+IG0vXig/Om9wbWx8cHJvamVjdF9saXN0fHByb2plY3RfaW5kZXgpJC8gJiYKICAgICAhJHByb2plY3QpIHsKIAlkaWVfZXJyb3IoNDAwLCAiUHJvamVjdCBuZWVkZWQiKTsKIH0KQEAgLTgzOCw3ICs5NzcsNyBAQAogIyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIyMgYWN0aW9uIGxpbmtzCiAKLXN1YiBocmVmICglKSB7CitzdWIgaHJlZiB7CiAJbXkgJXBhcmFtcyA9IEBfOwogCSMgZGVmYXVsdCBpcyB0byB1c2UgLWFic29sdXRlIHVybCgpIGkuZS4gJG15X3VyaQogCW15ICRocmVmID0gJHBhcmFtc3stZnVsbH0gPyAkbXlfdXJsIDogJG15X3VyaTsKQEAgLTg5MSwxMCArMTAzMCwxMyBAQAogCQkJaWYgKGRlZmluZWQgJHBhcmFtc3snaGFzaF9wYXJlbnRfYmFzZSd9KSB7CiAJCQkJJGhyZWYgLj0gZXNjX3VybCgkcGFyYW1zeydoYXNoX3BhcmVudF9iYXNlJ30pOwogCQkJCSMgc2tpcCB0aGUgZmlsZV9wYXJlbnQgaWYgaXQncyB0aGUgc2FtZSBhcyB0aGUgZmlsZV9uYW1lCi0JCQkJZGVsZXRlICRwYXJhbXN7J2ZpbGVfcGFyZW50J30gaWYgJHBhcmFtc3snZmlsZV9wYXJlbnQnfSBlcSAkcGFyYW1zeydmaWxlX25hbWUnfTsKLQkJCQlpZiAoZGVmaW5lZCAkcGFyYW1zeydmaWxlX3BhcmVudCd9ICYmICRwYXJhbXN7J2ZpbGVfcGFyZW50J30gIX4gL1wuXC4vKSB7Ci0JCQkJCSRocmVmIC49ICI6LyIuZXNjX3VybCgkcGFyYW1zeydmaWxlX3BhcmVudCd9KTsKLQkJCQkJZGVsZXRlICRwYXJhbXN7J2ZpbGVfcGFyZW50J307CisJCQkJaWYgKGRlZmluZWQgJHBhcmFtc3snZmlsZV9wYXJlbnQnfSkgeworCQkJCQlpZiAoZGVmaW5lZCAkcGFyYW1zeydmaWxlX25hbWUnfSAmJiAkcGFyYW1zeydmaWxlX3BhcmVudCd9IGVxICRwYXJhbXN7J2ZpbGVfbmFtZSd9KSB7CisJCQkJCQlkZWxldGUgJHBhcmFtc3snZmlsZV9wYXJlbnQnfTsKKwkJCQkJfSBlbHNpZiAoJHBhcmFtc3snZmlsZV9wYXJlbnQnfSAhfiAvXC5cLi8pIHsKKwkJCQkJCSRocmVmIC49ICI6LyIuZXNjX3VybCgkcGFyYW1zeydmaWxlX3BhcmVudCd9KTsKKwkJCQkJCWRlbGV0ZSAkcGFyYW1zeydmaWxlX3BhcmVudCd9OworCQkJCQl9CiAJCQkJfQogCQkJCSRocmVmIC49ICIuLiI7CiAJCQkJZGVsZXRlICRwYXJhbXN7J2hhc2hfcGFyZW50J307CkBAIC0xMDIwLDggKzExNjIsNyBAQAogIyBjb3JyZWN0LCBidXQgcXVvdGVkIHNsYXNoZXMgbG9vayB0b28gaG9ycmlibGUgaW4gYm9va21hcmtzCiBzdWIgZXNjX3BhcmFtIHsKIAlteSAkc3RyID0gc2hpZnQ7Ci0JJHN0ciA9fiBzLyhbXkEtWmEtejAtOVwtXy5+KClcLzpAXSkvc3ByaW50ZigiJSUlMDJYIiwgb3JkKCQxKSkvZWc7Ci0JJHN0ciA9fiBzL1wrLyUyQi9nOworCSRzdHIgPX4gcy8oW15BLVphLXowLTlcLV8ufigpXC86QCBdKykvQ0dJOjplc2NhcGUoJDEpL2VnOwogCSRzdHIgPX4gcy8gL1wrL2c7CiAJcmV0dXJuICRzdHI7CiB9CkBAIC0xMDM2LDcgKzExNzcsNyBAQAogfQogCiAjIHJlcGxhY2UgaW52YWxpZCB1dGY4IGNoYXJhY3RlciB3aXRoIFNVQlNUSVRVVElPTiBzZXF1ZW5jZQotc3ViIGVzY19odG1sICgkOyUpIHsKK3N1YiBlc2NfaHRtbCB7CiAJbXkgJHN0ciA9IHNoaWZ0OwogCW15ICVvcHRzID0gQF87CiAKQEAgLTExOTYsNyArMTMzNyw2IEBACiAJCSRzdHIgPX4gbS9eKC4qPykoJGJlZ3JlKSQvOwogCQlteSAoJGxlYWQsICRib2R5KSA9ICgkMSwgJDIpOwogCQlpZiAobGVuZ3RoKCRsZWFkKSA+IDQpIHsKLQkJCSRib2R5ID1+IHMvXlteO10qOy8vIGlmICgkbGVhZCA9fiBtLyZbXjtdKiQvKTsKIAkJCSRsZWFkID0gIiAuLi4iOwogCQl9CiAJCXJldHVybiAiJGxlYWQkYm9keSI7CkBAIC0xMjA3LDggKzEzNDcsNiBAQAogCQkkc3RyID1+IG0vXiguKj8pKCRiZWdyZSkkLzsKIAkJbXkgKCRtaWQsICRyaWdodCkgPSAoJDEsICQyKTsKIAkJaWYgKGxlbmd0aCgkbWlkKSA+IDUpIHsKLQkJCSRsZWZ0ICA9fiBzLyZbXjtdKiQvLzsKLQkJCSRyaWdodCA9fiBzL15bXjtdKjsvLyBpZiAoJG1pZCA9fiBtLyZbXjtdKiQvKTsKIAkJCSRtaWQgPSAiIC4uLiAiOwogCQl9CiAJCXJldHVybiAiJGxlZnQkbWlkJHJpZ2h0IjsKQEAgLTEyMTgsNyArMTM1Niw2IEBACiAJCW15ICRib2R5ID0gJDE7CiAJCW15ICR0YWlsID0gJDI7CiAJCWlmIChsZW5ndGgoJHRhaWwpID4gNCkgewotCQkJJGJvZHkgPX4gcy8mW147XSokLy87CiAJCQkkdGFpbCA9ICIuLi4gIjsKIAkJfQogCQlyZXR1cm4gIiRib2R5JHRhaWwiOwpAQCAtMTIzNSw3ICsxMzcyLDcgQEAKIAlpZiAoJGNob3BwZWQgZXEgJHN0cikgewogCQlyZXR1cm4gZXNjX2h0bWwoJGNob3BwZWQpOwogCX0gZWxzZSB7Ci0JCSRzdHIgPX4gcy8oW1s6Y250cmw6XV0pLz8vZzsKKwkJJHN0ciA9fiBzL1tbOmNudHJsOl1dLz8vZzsKIAkJcmV0dXJuICRjZ2ktPnNwYW4oey10aXRsZT0+JHN0cn0sIGVzY19odG1sKCRjaG9wcGVkKSk7CiAJfQogfQpAQCAtMTI5Niw3ICsxNDMzLDcgQEAKIH07CiAKICMgc3VibW9kdWxlL3N1YnByb2plY3QsIGEgY29tbWl0IG9iamVjdCByZWZlcmVuY2UKLXN1YiBTX0lTR0lUTElOSygkKSB7CitzdWIgU19JU0dJVExJTksgewogCW15ICRtb2RlID0gc2hpZnQ7CiAKIAlyZXR1cm4gKCgkbW9kZSAmIFNfSUZNVCkgPT0gU19JRkdJVExJTkspCkBAIC0xNDU4LDE1ICsxNTk1LDExNyBAQAogCSRleHRyYSA9ICcnIHVubGVzcyBkZWZpbmVkKCRleHRyYSk7CiAKIAlpZiAobGVuZ3RoKCRzaG9ydCkgPCBsZW5ndGgoJGxvbmcpKSB7CisJCSRsb25nID1+IHMvW1s6Y250cmw6XV0vPy9nOwogCQlyZXR1cm4gJGNnaS0+YSh7LWhyZWYgPT4gJGhyZWYsIC1jbGFzcyA9PiAibGlzdCBzdWJqZWN0IiwKIAkJICAgICAgICAgICAgICAgIC10aXRsZSA9PiB0b191dGY4KCRsb25nKX0sCi0JCSAgICAgICBlc2NfaHRtbCgkc2hvcnQpIC4gJGV4dHJhKTsKKwkJICAgICAgIGVzY19odG1sKCRzaG9ydCkpIC4gJGV4dHJhOwogCX0gZWxzZSB7CiAJCXJldHVybiAkY2dpLT5hKHstaHJlZiA9PiAkaHJlZiwgLWNsYXNzID0+ICJsaXN0IHN1YmplY3QifSwKLQkJICAgICAgIGVzY19odG1sKCRsb25nKSAgLiAkZXh0cmEpOworCQkgICAgICAgZXNjX2h0bWwoJGxvbmcpKSAuICRleHRyYTsKIAl9CiB9CiAKKyMgUmF0aGVyIHRoYW4gcmVjb21wdXRpbmcgdGhlIHVybCBmb3IgYW4gZW1haWwgbXVsdGlwbGUgdGltZXMsIHdlIGNhY2hlIGl0CisjIGFmdGVyIHRoZSBmaXJzdCBoaXQuIFRoaXMgZ2l2ZXMgYSB2aXNpYmxlIGJlbmVmaXQgaW4gdmlld3Mgd2hlcmUgdGhlIGF2YXRhcgorIyBmb3IgdGhlIHNhbWUgZW1haWwgaXMgdXNlZCByZXBlYXRlZGx5IChlLmcuIHNob3J0bG9nKS4KKyMgVGhlIGNhY2hlIGlzIHNoYXJlZCBieSBhbGwgYXZhdGFyIGVuZ2luZXMgKGN1cnJlbnRseSBncmF2YXRhciBvbmx5KSwgd2hpY2gKKyMgYXJlIGZyZWUgdG8gdXNlIGl0IGFzIHByZWZlcnJlZC4gU2luY2Ugb25seSBvbmUgYXZhdGFyIGVuZ2luZSBpcyB1c2VkIGZvciBhbnkKKyMgZ2l2ZW4gcGFnZSwgdGhlcmUncyBubyByaXNrIGZvciBjYWNoZSBjb25mbGljdHMuCitvdXIgJWF2YXRhcl9jYWNoZSA9ICgpOworCisjIENvbXB1dGUgdGhlIHBpY29uIHVybCBmb3IgYSBnaXZlbiBlbWFpbCwgYnkgdXNpbmcgdGhlIHBpY29uIHNlYXJjaCBzZXJ2aWNlIG92ZXIgYXQKKyMgaHR0cDovL3d3dy5jcy5pbmRpYW5hLmVkdS9waWNvbnMvc2VhcmNoLmh0bWwKK3N1YiBwaWNvbl91cmwgeworCW15ICRlbWFpbCA9IGxjIHNoaWZ0OworCWlmICghJGF2YXRhcl9jYWNoZXskZW1haWx9KSB7CisJCW15ICgkdXNlciwgJGRvbWFpbikgPSBzcGxpdCgnQCcsICRlbWFpbCk7CisJCSRhdmF0YXJfY2FjaGV7JGVtYWlsfSA9CisJCQkiaHR0cDovL3d3dy5jcy5pbmRpYW5hLmVkdS9jZ2ktcHViL2tpbnpsZXIvcGljb25zZWFyY2guY2dpLyIgLgorCQkJIiRkb21haW4vJHVzZXIvIiAuCisJCQkidXNlcnMrZG9tYWlucyt1bmtub3duL3VwL3NpbmdsZSI7CisJfQorCXJldHVybiAkYXZhdGFyX2NhY2hleyRlbWFpbH07Cit9CisKKyMgQ29tcHV0ZSB0aGUgZ3JhdmF0YXIgdXJsIGZvciBhIGdpdmVuIGVtYWlsLCBpZiBpdCdzIG5vdCBpbiB0aGUgY2FjaGUgYWxyZWFkeS4KKyMgR3JhdmF0YXIgc3RvcmVzIG9ubHkgdGhlIHBhcnQgb2YgdGhlIFVSTCBiZWZvcmUgdGhlIHNpemUsIHNpbmNlIHRoYXQncyB0aGUKKyMgb25lIGNvbXB1dGF0aW9uYWxseSBtb3JlIGV4cGVuc2l2ZS4gVGhpcyBhbHNvIGFsbG93cyByZXVzZSBvZiB0aGUgY2FjaGUgZm9yCisjIGRpZmZlcmVudCBzaXplcyAoZm9yIHRoaXMgcGFydGljdWxhciBlbmdpbmUpLgorc3ViIGdyYXZhdGFyX3VybCB7CisJbXkgJGVtYWlsID0gbGMgc2hpZnQ7CisJbXkgJHNpemUgPSBzaGlmdDsKKwkkYXZhdGFyX2NhY2hleyRlbWFpbH0gfHw9CisJCSJodHRwOi8vd3d3LmdyYXZhdGFyLmNvbS9hdmF0YXIvIiAuCisJCQlEaWdlc3Q6Ok1ENTo6bWQ1X2hleCgkZW1haWwpIC4gIj9zPSI7CisJcmV0dXJuICRhdmF0YXJfY2FjaGV7JGVtYWlsfSAuICRzaXplOworfQorCisjIEluc2VydCBhbiBhdmF0YXIgZm9yIHRoZSBnaXZlbiAkZW1haWwgYXQgdGhlIGdpdmVuICRzaXplIGlmIHRoZSBmZWF0dXJlCisjIGlzIGVuYWJsZWQuCitzdWIgZ2l0X2dldF9hdmF0YXIgeworCW15ICgkZW1haWwsICVvcHRzKSA9IEBfOworCW15ICRwcmVfd2hpdGUgID0gKCRvcHRzey1wYWRfYmVmb3JlfSA/ICImbmJzcDsiIDogIiIpOworCW15ICRwb3N0X3doaXRlID0gKCRvcHRzey1wYWRfYWZ0ZXJ9ICA/ICImbmJzcDsiIDogIiIpOworCSRvcHRzey1zaXplfSB8fD0gJ2RlZmF1bHQnOworCW15ICRzaXplID0gJGF2YXRhcl9zaXpleyRvcHRzey1zaXplfX0gfHwgJGF2YXRhcl9zaXpleydkZWZhdWx0J307CisJbXkgJHVybCA9ICIiOworCWlmICgkZ2l0X2F2YXRhciBlcSAnZ3JhdmF0YXInKSB7CisJCSR1cmwgPSBncmF2YXRhcl91cmwoJGVtYWlsLCAkc2l6ZSk7CisJfSBlbHNpZiAoJGdpdF9hdmF0YXIgZXEgJ3BpY29uJykgeworCQkkdXJsID0gcGljb25fdXJsKCRlbWFpbCk7CisJfQorCSMgT3RoZXIgcHJvdmlkZXJzIGNhbiBiZSBhZGRlZCBieSBleHRlbmRpbmcgdGhlIGlmIGNoYWluLCBkZWZpbmluZyAkdXJsCisJIyBhcyBuZWVkZWQuIElmIG5vIHZhcmlhbnQgcHV0cyBzb21ldGhpbmcgaW4gJHVybCwgd2UgYXNzdW1lIGF2YXRhcnMKKwkjIGFyZSBjb21wbGV0ZWx5IGRpc2FibGVkL3VuYXZhaWxhYmxlLgorCWlmICgkdXJsKSB7CisJCXJldHVybiAkcHJlX3doaXRlIC4KKwkJICAgICAgICI8aW1nIHdpZHRoPVwiJHNpemVcIiAiIC4KKwkJICAgICAgICAgICAgImNsYXNzPVwiYXZhdGFyXCIgIiAuCisJCSAgICAgICAgICAgICJzcmM9XCIkdXJsXCIgIiAuCisJCQkgICAgImFsdD1cIlwiICIgLgorCQkgICAgICAgIi8+IiAuICRwb3N0X3doaXRlOworCX0gZWxzZSB7CisJCXJldHVybiAiIjsKKwl9Cit9CisKK3N1YiBmb3JtYXRfc2VhcmNoX2F1dGhvciB7CisJbXkgKCRhdXRob3IsICRzZWFyY2h0eXBlLCAkZGlzcGxheXRleHQpID0gQF87CisJbXkgJGhhdmVfc2VhcmNoID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ3NlYXJjaCcpOworCisJaWYgKCRoYXZlX3NlYXJjaCkgeworCQlteSAkcGVyZm9ybWVkID0gIiI7CisJCWlmICgkc2VhcmNodHlwZSBlcSAnYXV0aG9yJykgeworCQkJJHBlcmZvcm1lZCA9ICJhdXRob3JlZCI7CisJCX0gZWxzaWYgKCRzZWFyY2h0eXBlIGVxICdjb21taXR0ZXInKSB7CisJCQkkcGVyZm9ybWVkID0gImNvbW1pdHRlZCI7CisJCX0KKworCQlyZXR1cm4gJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJzZWFyY2giLCBoYXNoPT4kaGFzaCwKKwkJCQlzZWFyY2h0ZXh0PT4kYXV0aG9yLAorCQkJCXNlYXJjaHR5cGU9PiRzZWFyY2h0eXBlKSwgY2xhc3M9PiJsaXN0IiwKKwkJCQl0aXRsZT0+IlNlYXJjaCBmb3IgY29tbWl0cyAkcGVyZm9ybWVkIGJ5ICRhdXRob3IifSwKKwkJCQkkZGlzcGxheXRleHQpOworCisJfSBlbHNlIHsKKwkJcmV0dXJuICRkaXNwbGF5dGV4dDsKKwl9Cit9CisKKyMgZm9ybWF0IHRoZSBhdXRob3IgbmFtZSBvZiB0aGUgZ2l2ZW4gY29tbWl0IHdpdGggdGhlIGdpdmVuIHRhZworIyB0aGUgYXV0aG9yIG5hbWUgaXMgY2hvcHBlZCBhbmQgZXNjYXBlZCBhY2NvcmRpbmcgdG8gdGhlIG90aGVyCisjIG9wdGlvbmFsIHBhcmFtZXRlcnMgKHNlZSBjaG9wX3N0cikuCitzdWIgZm9ybWF0X2F1dGhvcl9odG1sIHsKKwlteSAkdGFnID0gc2hpZnQ7CisJbXkgJGNvID0gc2hpZnQ7CisJbXkgJGF1dGhvciA9IGNob3BfYW5kX2VzY2FwZV9zdHIoJGNvLT57J2F1dGhvcl9uYW1lJ30sIEBfKTsKKwlyZXR1cm4gIjwkdGFnIGNsYXNzPVwiYXV0aG9yXCI+IiAuCisJICAgICAgIGZvcm1hdF9zZWFyY2hfYXV0aG9yKCRjby0+eydhdXRob3JfbmFtZSd9LCAiYXV0aG9yIiwKKwkJICAgICAgIGdpdF9nZXRfYXZhdGFyKCRjby0+eydhdXRob3JfZW1haWwnfSwgLXBhZF9hZnRlciA9PiAxKSAuCisJCSAgICAgICAkYXV0aG9yKSAuCisJICAgICAgICI8LyR0YWc+IjsKK30KKwogIyBmb3JtYXQgZ2l0IGRpZmYgaGVhZGVyIGxpbmUsIGkuZS4gImRpZmYgLS0oZ2l0fGNvbWJpbmVkfGNjKSAuLi4iCiBzdWIgZm9ybWF0X2dpdF9kaWZmX2hlYWRlcl9saW5lIHsKIAlteSAkbGluZSA9IHNoaWZ0OwpAQCAtMTgyOSw2ICsyMDY4LDcgQEAKIAogIyByZXR1cm5zIHBhdGggdG8gdGhlIGNvcmUgZ2l0IGV4ZWN1dGFibGUgYW5kIHRoZSAtLWdpdC1kaXIgcGFyYW1ldGVyIGFzIGxpc3QKIHN1YiBnaXRfY21kIHsKKwkkbnVtYmVyX29mX2dpdF9jbWRzKys7CiAJcmV0dXJuICRHSVQsICctLWdpdC1kaXI9Jy4kZ2l0X2RpcjsKIH0KIApAQCAtMTgzOCwyMSArMjA3OCwzMiBAQAogIyBUcnkgdG8gYXZvaWQgdXNpbmcgdGhpcyBmdW5jdGlvbiB3aGVyZXZlciBwb3NzaWJsZS4KIHN1YiBxdW90ZV9jb21tYW5kIHsKIAlyZXR1cm4gam9pbignICcsCi0JCSAgICBtYXAoIHsgbXkgJGEgPSAkXzsgJGEgPX4gcy8oWychXSkvJ1xcJDEnL2c7ICInJGEnIiB9IEBfICkpOworCQltYXAgeyBteSAkYSA9ICRfOyAkYSA9fiBzLyhbJyFdKS8nXFwkMScvZzsgIickYSciIH0gQF8gKTsKIH0KIAogIyBnZXQgSEVBRCByZWYgb2YgZ2l2ZW4gcHJvamVjdCBhcyBoYXNoCiBzdWIgZ2l0X2dldF9oZWFkX2hhc2ggewotCW15ICRwcm9qZWN0ID0gc2hpZnQ7CisJcmV0dXJuIGdpdF9nZXRfZnVsbF9oYXNoKHNoaWZ0LCAnSEVBRCcpOworfQorCitzdWIgZ2l0X2dldF9mdWxsX2hhc2ggeworCXJldHVybiBnaXRfZ2V0X2hhc2goQF8pOworfQorCitzdWIgZ2l0X2dldF9zaG9ydF9oYXNoIHsKKwlyZXR1cm4gZ2l0X2dldF9oYXNoKEBfLCAnLS1zaG9ydD03Jyk7Cit9CisKK3N1YiBnaXRfZ2V0X2hhc2ggeworCW15ICgkcHJvamVjdCwgJGhhc2gsIEBvcHRpb25zKSA9IEBfOwogCW15ICRvX2dpdF9kaXIgPSAkZ2l0X2RpcjsKIAlteSAkcmV0dmFsID0gdW5kZWY7CiAJJGdpdF9kaXIgPSAiJHByb2plY3Ryb290LyRwcm9qZWN0IjsKLQlpZiAob3BlbiBteSAkZmQsICItfCIsIGdpdF9jbWQoKSwgInJldi1wYXJzZSIsICItLXZlcmlmeSIsICJIRUFEIikgewotCQlteSAkaGVhZCA9IDwkZmQ+OworCWlmIChvcGVuIG15ICRmZCwgJy18JywgZ2l0X2NtZCgpLCAncmV2LXBhcnNlJywKKwkgICAgJy0tdmVyaWZ5JywgJy1xJywgQG9wdGlvbnMsICRoYXNoKSB7CisJCSRyZXR2YWwgPSA8JGZkPjsKKwkJY2hvbXAgJHJldHZhbCBpZiBkZWZpbmVkICRyZXR2YWw7CiAJCWNsb3NlICRmZDsKLQkJaWYgKGRlZmluZWQgJGhlYWQgJiYgJGhlYWQgPX4gL14oWzAtOWEtZkEtRl17NDB9KSQvKSB7Ci0JCQkkcmV0dmFsID0gJDE7Ci0JCX0KIAl9CiAJaWYgKGRlZmluZWQgJG9fZ2l0X2RpcikgewogCQkkZ2l0X2RpciA9ICRvX2dpdF9kaXI7CkBAIC0xOTU4LDYgKzIyMDksOCBAQAogc3ViIGdpdF9nZXRfcHJvamVjdF9jb25maWcgewogCW15ICgka2V5LCAkdHlwZSkgPSBAXzsKIAorCXJldHVybiB1bmxlc3MgZGVmaW5lZCAkZ2l0X2RpcjsKKwogCSMga2V5IHNhbml0eSBjaGVjawogCXJldHVybiB1bmxlc3MgKCRrZXkpOwogCSRrZXkgPX4gcy9eZ2l0d2ViXC4vLzsKQEAgLTIwNTAsNyArMjMwMyw3IEBACiAJbXkgJHBhdGggPSBzaGlmdDsKIAogCSRnaXRfZGlyID0gIiRwcm9qZWN0cm9vdC8kcGF0aCI7Ci0Jb3BlbiBteSAkZmQsICIkZ2l0X2Rpci9kZXNjcmlwdGlvbiIKKwlvcGVuIG15ICRmZCwgJzwnLCAiJGdpdF9kaXIvZGVzY3JpcHRpb24iCiAJCW9yIHJldHVybiBnaXRfZ2V0X3Byb2plY3RfY29uZmlnKCdkZXNjcmlwdGlvbicpOwogCW15ICRkZXNjciA9IDwkZmQ+OwogCWNsb3NlICRmZDsKQEAgLTIwNjUsMTggKzIzMTgsMTcgQEAKIAlteSAkY3RhZ3MgPSB7fTsKIAogCSRnaXRfZGlyID0gIiRwcm9qZWN0cm9vdC8kcGF0aCI7Ci0JdW5sZXNzIChvcGVuZGlyIEQsICIkZ2l0X2Rpci9jdGFncyIpIHsKLQkJcmV0dXJuICRjdGFnczsKLQl9Ci0JZm9yZWFjaCAoZ3JlcCB7IC1mICRfIH0gbWFwIHsgIiRnaXRfZGlyL2N0YWdzLyRfIiB9IHJlYWRkaXIoRCkpIHsKLQkJb3BlbiBDVCwgJF8gb3IgbmV4dDsKLQkJbXkgJHZhbCA9IDxDVD47CisJb3BlbmRpciBteSAkZGgsICIkZ2l0X2Rpci9jdGFncyIKKwkJb3IgcmV0dXJuICRjdGFnczsKKwlmb3JlYWNoIChncmVwIHsgLWYgJF8gfSBtYXAgeyAiJGdpdF9kaXIvY3RhZ3MvJF8iIH0gcmVhZGRpcigkZGgpKSB7CisJCW9wZW4gbXkgJGN0LCAnPCcsICRfIG9yIG5leHQ7CisJCW15ICR2YWwgPSA8JGN0PjsKIAkJY2hvbXAgJHZhbDsKLQkJY2xvc2UgQ1Q7CisJCWNsb3NlICRjdDsKIAkJbXkgJGN0YWcgPSAkXzsgJGN0YWcgPX4gcyMuKi8jIzsKIAkJJGN0YWdzLT57JGN0YWd9ID0gJHZhbDsKIAl9Ci0JY2xvc2VkaXIgRDsKKwljbG9zZWRpciAkZGg7CiAJJGN0YWdzOwogfQogCkBAIC0yMTI5LDcgKzIzODEsNyBAQAogCW15ICRwYXRoID0gc2hpZnQ7CiAKIAkkZ2l0X2RpciA9ICIkcHJvamVjdHJvb3QvJHBhdGgiOwotCW9wZW4gbXkgJGZkLCAiJGdpdF9kaXIvY2xvbmV1cmwiCisJb3BlbiBteSAkZmQsICc8JywgIiRnaXRfZGlyL2Nsb25ldXJsIgogCQlvciByZXR1cm4gd2FudGFycmF5ID8KIAkJQHsgY29uZmlnX3RvX211bHRpKGdpdF9nZXRfcHJvamVjdF9jb25maWcoJ3VybCcpKSB9IDoKIAkJICAgY29uZmlnX3RvX211bHRpKGdpdF9nZXRfcHJvamVjdF9jb25maWcoJ3VybCcpKTsKQEAgLTIxODcsNyArMjQzOSw3IEBACiAJCSMgJ2xpYnMlMkZrbGliYyUyRmtsaWJjLmdpdCBILitQZXRlcitBbnZpbicKIAkJIyAnbGludXglMkZob3RwbHVnJTJGdWRldi5naXQgR3JlZytLcm9haC1IYXJ0bWFuJwogCQlteSAlcGF0aHM7Ci0JCW9wZW4gbXkgKCRmZCksICRwcm9qZWN0c19saXN0IG9yIHJldHVybjsKKwkJb3BlbiBteSAkZmQsICc8JywgJHByb2plY3RzX2xpc3Qgb3IgcmV0dXJuOwogCVBST0pFQ1Q6CiAJCXdoaWxlIChteSAkbGluZSA9IDwkZmQ+KSB7CiAJCQljaG9tcCAkbGluZTsKQEAgLTIyNTAsNyArMjUwMiw3IEBACiAJIyAnbGlicyUyRmtsaWJjJTJGa2xpYmMuZ2l0IEguK1BldGVyK0FudmluJwogCSMgJ2xpbnV4JTJGaG90cGx1ZyUyRnVkZXYuZ2l0IEdyZWcrS3JvYWgtSGFydG1hbicKIAlpZiAoLWYgJHByb2plY3RzX2xpc3QpIHsKLQkJb3BlbiAobXkgJGZkICwgJHByb2plY3RzX2xpc3QpOworCQlvcGVuKG15ICRmZCwgJzwnLCAkcHJvamVjdHNfbGlzdCk7CiAJCXdoaWxlIChteSAkbGluZSA9IDwkZmQ+KSB7CiAJCQljaG9tcCAkbGluZTsKIAkJCW15ICgkcHIsICRvdykgPSBzcGxpdCAnICcsICRsaW5lOwpAQCAtMjM5OCw4ICsyNjUwLDE0IEBACiAJCQkkdGFneyduYW1lJ30gPSAkMTsKIAkJfSBlbHNpZiAoJGxpbmUgPX4gbS9edGFnZ2VyICguKikgKFswLTldKykgKC4qKSQvKSB7CiAJCQkkdGFneydhdXRob3InfSA9ICQxOwotCQkJJHRhZ3snZXBvY2gnfSA9ICQyOwotCQkJJHRhZ3sndHonfSA9ICQzOworCQkJJHRhZ3snYXV0aG9yX2Vwb2NoJ30gPSAkMjsKKwkJCSR0YWd7J2F1dGhvcl90eid9ID0gJDM7CisJCQlpZiAoJHRhZ3snYXV0aG9yJ30gPX4gbS9eKFtePF0rKSA8KFtePl0qKT4vKSB7CisJCQkJJHRhZ3snYXV0aG9yX25hbWUnfSAgPSAkMTsKKwkJCQkkdGFneydhdXRob3JfZW1haWwnfSA9ICQyOworCQkJfSBlbHNlIHsKKwkJCQkkdGFneydhdXRob3JfbmFtZSd9ID0gJHRhZ3snYXV0aG9yJ307CisJCQl9CiAJCX0gZWxzaWYgKCRsaW5lID1+IG0vLS1CRUdJTi8pIHsKIAkJCXB1c2ggQGNvbW1lbnQsICRsaW5lOwogCQkJbGFzdDsKQEAgLTI0MzksNyArMjY5Nyw3IEBACiAJCX0gZWxzaWYgKCghZGVmaW5lZCAkd2l0aHBhcmVudHMpICYmICgkbGluZSA9fiBtL15wYXJlbnQgKFswLTlhLWZBLUZdezQwfSkkLykpIHsKIAkJCXB1c2ggQHBhcmVudHMsICQxOwogCQl9IGVsc2lmICgkbGluZSA9fiBtL15hdXRob3IgKC4qKSAoWzAtOV0rKSAoLiopJC8pIHsKLQkJCSRjb3snYXV0aG9yJ30gPSAkMTsKKwkJCSRjb3snYXV0aG9yJ30gPSB0b191dGY4KCQxKTsKIAkJCSRjb3snYXV0aG9yX2Vwb2NoJ30gPSAkMjsKIAkJCSRjb3snYXV0aG9yX3R6J30gPSAkMzsKIAkJCWlmICgkY297J2F1dGhvcid9ID1+IG0vXihbXjxdKykgPChbXj5dKik+LykgewpAQCAtMjQ0OSwxMCArMjcwNyw5IEBACiAJCQkJJGNveydhdXRob3JfbmFtZSd9ID0gJGNveydhdXRob3InfTsKIAkJCX0KIAkJfSBlbHNpZiAoJGxpbmUgPX4gbS9eY29tbWl0dGVyICguKikgKFswLTldKykgKC4qKSQvKSB7Ci0JCQkkY297J2NvbW1pdHRlcid9ID0gJDE7CisJCQkkY297J2NvbW1pdHRlcid9ID0gdG9fdXRmOCgkMSk7CiAJCQkkY297J2NvbW1pdHRlcl9lcG9jaCd9ID0gJDI7CiAJCQkkY297J2NvbW1pdHRlcl90eid9ID0gJDM7Ci0JCQkkY297J2NvbW1pdHRlcl9uYW1lJ30gPSAkY297J2NvbW1pdHRlcid9OwogCQkJaWYgKCRjb3snY29tbWl0dGVyJ30gPX4gbS9eKFtePF0rKSA8KFtePl0qKT4vKSB7CiAJCQkJJGNveydjb21taXR0ZXJfbmFtZSd9ICA9ICQxOwogCQkJCSRjb3snY29tbWl0dGVyX2VtYWlsJ30gPSAkMjsKQEAgLTI2MTUsMjEgKzI4NzIsMzYgQEAKIH0KIAogIyBwYXJzZSBsaW5lIG9mIGdpdC1scy10cmVlIG91dHB1dAotc3ViIHBhcnNlX2xzX3RyZWVfbGluZSAoJDslKSB7CitzdWIgcGFyc2VfbHNfdHJlZV9saW5lIHsKIAlteSAkbGluZSA9IHNoaWZ0OwogCW15ICVvcHRzID0gQF87CiAJbXkgJXJlczsKIAotCSMnMTAwNjQ0IGJsb2IgMGZhM2YzYTY2ZmI2YTEzN2Y2ZWMyYzE5MzUxZWQ0ZDgwNzA3MGZmYQlwYW5pYy5jJwotCSRsaW5lID1+IG0vXihbMC05XSspICguKykgKFswLTlhLWZBLUZdezQwfSlcdCguKykkL3M7CisJaWYgKCRvcHRzeyctbCd9KSB7CisJCSMnMTAwNjQ0IGJsb2IgMGZhM2YzYTY2ZmI2YTEzN2Y2ZWMyYzE5MzUxZWQ0ZDgwNzA3MGZmYSAgIDE2NzE3CXBhbmljLmMnCisJCSRsaW5lID1+IG0vXihbMC05XSspICguKykgKFswLTlhLWZBLUZdezQwfSkgKygtfFswLTldKylcdCguKykkL3M7CiAKLQkkcmVzeydtb2RlJ30gPSAkMTsKLQkkcmVzeyd0eXBlJ30gPSAkMjsKLQkkcmVzeydoYXNoJ30gPSAkMzsKLQlpZiAoJG9wdHN7Jy16J30pIHsKLQkJJHJlc3snbmFtZSd9ID0gJDQ7CisJCSRyZXN7J21vZGUnfSA9ICQxOworCQkkcmVzeyd0eXBlJ30gPSAkMjsKKwkJJHJlc3snaGFzaCd9ID0gJDM7CisJCSRyZXN7J3NpemUnfSA9ICQ0OworCQlpZiAoJG9wdHN7Jy16J30pIHsKKwkJCSRyZXN7J25hbWUnfSA9ICQ1OworCQl9IGVsc2UgeworCQkJJHJlc3snbmFtZSd9ID0gdW5xdW90ZSgkNSk7CisJCX0KIAl9IGVsc2UgewotCQkkcmVzeyduYW1lJ30gPSB1bnF1b3RlKCQ0KTsKKwkJIycxMDA2NDQgYmxvYiAwZmEzZjNhNjZmYjZhMTM3ZjZlYzJjMTkzNTFlZDRkODA3MDcwZmZhCXBhbmljLmMnCisJCSRsaW5lID1+IG0vXihbMC05XSspICguKykgKFswLTlhLWZBLUZdezQwfSlcdCguKykkL3M7CisKKwkJJHJlc3snbW9kZSd9ID0gJDE7CisJCSRyZXN7J3R5cGUnfSA9ICQyOworCQkkcmVzeydoYXNoJ30gPSAkMzsKKwkJaWYgKCRvcHRzeycteid9KSB7CisJCQkkcmVzeyduYW1lJ30gPSAkNDsKKwkJfSBlbHNlIHsKKwkJCSRyZXN7J25hbWUnfSA9IHVucXVvdGUoJDQpOworCQl9CiAJfQogCiAJcmV0dXJuIHdhbnRhcnJheSA/ICVyZXMgOiBcJXJlczsKQEAgLTI4MDQsMTggKzMwNzYsMTggQEAKIAktciAkbWltZW1hcCBvciByZXR1cm4gdW5kZWY7CiAKIAlteSAlbWltZW1hcDsKLQlvcGVuKE1JTUUsICRtaW1lbWFwKSBvciByZXR1cm4gdW5kZWY7Ci0Jd2hpbGUgKDxNSU1FPikgeworCW9wZW4obXkgJG1oLCAnPCcsICRtaW1lbWFwKSBvciByZXR1cm4gdW5kZWY7CisJd2hpbGUgKDwkbWg+KSB7CiAJCW5leHQgaWYgbS9eIy87ICMgc2tpcCBjb21tZW50cwotCQlteSAoJG1pbWUsICRleHRzKSA9IHNwbGl0KC9cdCsvKTsKKwkJbXkgKCRtaW1ldHlwZSwgJGV4dHMpID0gc3BsaXQoL1x0Ky8pOwogCQlpZiAoZGVmaW5lZCAkZXh0cykgewogCQkJbXkgQGV4dHMgPSBzcGxpdCgvXHMrLywgJGV4dHMpOwogCQkJZm9yZWFjaCBteSAkZXh0IChAZXh0cykgewotCQkJCSRtaW1lbWFweyRleHR9ID0gJG1pbWU7CisJCQkJJG1pbWVtYXB7JGV4dH0gPSAkbWltZXR5cGU7CiAJCQl9CiAJCX0KIAl9Ci0JY2xvc2UoTUlNRSk7CisJY2xvc2UoJG1oKTsKIAogCSRmaWxlbmFtZSA9fiAvXC4oW14uXSopJC87CiAJcmV0dXJuICRtaW1lbWFweyQxfTsKQEAgLTI5ODcsNyArMzI1OSw3IEBACiAJcHJpbnQgIjwvaGVhZD5cbiIgLgogCSAgICAgICI8Ym9keT5cbiI7CiAKLQlpZiAoLWYgJHNpdGVfaGVhZGVyKSB7CisJaWYgKGRlZmluZWQgJHNpdGVfaGVhZGVyICYmIC1mICRzaXRlX2hlYWRlcikgewogCQlpbnNlcnRfZmlsZSgkc2l0ZV9oZWFkZXIpOwogCX0KIApAQCAtMzA3NCwxMCArMzM0NiwzNyBAQAogCX0KIAlwcmludCAiPC9kaXY+XG4iOyAjIGNsYXNzPSJwYWdlX2Zvb3RlciIKIAotCWlmICgtZiAkc2l0ZV9mb290ZXIpIHsKKwlpZiAoZGVmaW5lZCAkdDAgJiYgZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ3RpbWVkJykpIHsKKwkJcHJpbnQgIjxkaXYgaWQ9XCJnZW5lcmF0aW5nX2luZm9cIj5cbiI7CisJCXByaW50ICdUaGlzIHBhZ2UgdG9vayAnLgorCQkgICAgICAnPHNwYW4gaWQ9ImdlbmVyYXRpbmdfdGltZSIgY2xhc3M9InRpbWVfc3BhbiI+Jy4KKwkJICAgICAgVGltZTo6SGlSZXM6OnR2X2ludGVydmFsKCR0MCwgW1RpbWU6OkhpUmVzOjpnZXR0aW1lb2ZkYXkoKV0pLgorCQkgICAgICAnIHNlY29uZHMgPC9zcGFuPicuCisJCSAgICAgICcgYW5kICcuCisJCSAgICAgICc8c3BhbiBpZD0iZ2VuZXJhdGluZ19jbWQiPicuCisJCSAgICAgICRudW1iZXJfb2ZfZ2l0X2NtZHMuCisJCSAgICAgICc8L3NwYW4+IGdpdCBjb21tYW5kcyAnLgorCQkgICAgICAiIHRvIGdlbmVyYXRlLlxuIjsKKwkJcHJpbnQgIjwvZGl2PlxuIjsgIyBjbGFzcz0icGFnZV9mb290ZXIiCisJfQorCisJaWYgKGRlZmluZWQgJHNpdGVfZm9vdGVyICYmIC1mICRzaXRlX2Zvb3RlcikgewogCQlpbnNlcnRfZmlsZSgkc2l0ZV9mb290ZXIpOwogCX0KIAorCXByaW50IHFxITxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IiRqYXZhc2NyaXB0Ij48L3NjcmlwdD5cbiE7CisJaWYgKGRlZmluZWQgJGFjdGlvbiAmJgorCSAgICAkYWN0aW9uIGVxICdibGFtZV9pbmNyZW1lbnRhbCcpIHsKKwkJcHJpbnQgcXEhPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPlxuIS4KKwkJICAgICAgcXEhc3RhcnRCbGFtZSgiIS4gaHJlZihhY3Rpb249PiJibGFtZV9kYXRhIiwgLXJlcGxheT0+MSkgLnFxISIsXG4hLgorCQkgICAgICBxcSEgICAgICAgICAgICIhLiBocmVmKCkgLnFxISIpO1xuIS4KKwkJICAgICAgcXEhPC9zY3JpcHQ+XG4hOworCX0gZWxzaWYgKGdpdHdlYl9jaGVja19mZWF0dXJlKCdqYXZhc2NyaXB0LWFjdGlvbnMnKSkgeworCQlwcmludCBxcSE8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+XG4hLgorCQkgICAgICBxcSF3aW5kb3cub25sb2FkID0gZml4TGlua3M7XG4hLgorCQkgICAgICBxcSE8L3NjcmlwdD5cbiE7CisJfQorCiAJcHJpbnQgIjwvYm9keT5cbiIgLgogCSAgICAgICI8L2h0bWw+IjsKIH0KQEAgLTMwOTMsMjIgKzMzOTIsMzMgQEAKICMgNTAwOiBUaGUgc2VydmVyIGlzbid0IGNvbmZpZ3VyZWQgcHJvcGVybHksIG9yCiAjICAgICAgYW4gaW50ZXJuYWwgZXJyb3Igb2NjdXJyZWQgKGUuZy4gZmFpbGVkIGFzc2VydGlvbnMgY2F1c2VkIGJ5IGJ1Z3MpLCBvcgogIyAgICAgIGFuIHVua25vd24gZXJyb3Igb2NjdXJyZWQgKGUuZy4gdGhlIGdpdCBiaW5hcnkgZGllZCB1bmV4cGVjdGVkbHkpLgorIyA1MDM6IFRoZSBzZXJ2ZXIgaXMgY3VycmVudGx5IHVuYXZhaWxhYmxlIChiZWNhdXNlIGl0IGlzIG92ZXJsb2FkZWQsCisjICAgICAgb3IgZG93biBmb3IgbWFpbnRlbmFuY2UpLiAgR2VuZXJhbGx5LCB0aGlzIGlzIGEgdGVtcG9yYXJ5IHN0YXRlLgogc3ViIGRpZV9lcnJvciB7CiAJbXkgJHN0YXR1cyA9IHNoaWZ0IHx8IDUwMDsKIAlteSAkZXJyb3IgPSBzaGlmdCB8fCAiSW50ZXJuYWwgc2VydmVyIGVycm9yIjsKKwlteSAkZXh0cmEgPSBzaGlmdDsKIAotCW15ICVodHRwX3Jlc3BvbnNlcyA9ICg0MDAgPT4gJzQwMCBCYWQgUmVxdWVzdCcsCi0JCQkgICAgICA0MDMgPT4gJzQwMyBGb3JiaWRkZW4nLAotCQkJICAgICAgNDA0ID0+ICc0MDQgTm90IEZvdW5kJywKLQkJCSAgICAgIDUwMCA9PiAnNTAwIEludGVybmFsIFNlcnZlciBFcnJvcicpOworCW15ICVodHRwX3Jlc3BvbnNlcyA9ICgKKwkJNDAwID0+ICc0MDAgQmFkIFJlcXVlc3QnLAorCQk0MDMgPT4gJzQwMyBGb3JiaWRkZW4nLAorCQk0MDQgPT4gJzQwNCBOb3QgRm91bmQnLAorCQk1MDAgPT4gJzUwMCBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InLAorCQk1MDMgPT4gJzUwMyBTZXJ2aWNlIFVuYXZhaWxhYmxlJywKKwkpOwogCWdpdF9oZWFkZXJfaHRtbCgkaHR0cF9yZXNwb25zZXN7JHN0YXR1c30pOwogCXByaW50IDw8RU9GOwogPGRpdiBjbGFzcz0icGFnZV9ib2R5Ij4KIDxiciAvPjxiciAvPgogJHN0YXR1cyAtICRlcnJvcgogPGJyIC8+Ci08L2Rpdj4KIEVPRgorCWlmIChkZWZpbmVkICRleHRyYSkgeworCQlwcmludCAiPGhyIC8+XG4iIC4KKwkJICAgICAgIiRleHRyYVxuIjsKKwl9CisJcHJpbnQgIjwvZGl2PlxuIjsKKwogCWdpdF9mb290ZXJfaHRtbCgpOwogCWV4aXQ7CiB9CkBAIC0zMTY3LDIyICszNDc3LDE4IEBACiB9CiAKIHN1YiBmb3JtYXRfcGFnaW5nX25hdiB7Ci0JbXkgKCRhY3Rpb24sICRoYXNoLCAkaGVhZCwgJHBhZ2UsICRoYXNfbmV4dF9saW5rKSA9IEBfOworCW15ICgkYWN0aW9uLCAkcGFnZSwgJGhhc19uZXh0X2xpbmspID0gQF87CiAJbXkgJHBhZ2luZ19uYXY7CiAKIAotCWlmICgkaGFzaCBuZSAkaGVhZCB8fCAkcGFnZSkgewotCQkkcGFnaW5nX25hdiAuPSAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+JGFjdGlvbil9LCAiSEVBRCIpOwotCX0gZWxzZSB7Ci0JCSRwYWdpbmdfbmF2IC49ICJIRUFEIjsKLQl9Ci0KIAlpZiAoJHBhZ2UgPiAwKSB7Ci0JCSRwYWdpbmdfbmF2IC49ICIgJnNkb3Q7ICIgLgorCQkkcGFnaW5nX25hdiAuPQorCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZigtcmVwbGF5PT4xLCBwYWdlPT51bmRlZil9LCAiZmlyc3QiKSAuCisJCQkiICZzZG90OyAiIC4KIAkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoLXJlcGxheT0+MSwgcGFnZT0+JHBhZ2UtMSksCiAJCQkgICAgICAgICAtYWNjZXNza2V5ID0+ICJwIiwgLXRpdGxlID0+ICJBbHQtcCJ9LCAicHJldiIpOwogCX0gZWxzZSB7Ci0JCSRwYWdpbmdfbmF2IC49ICIgJnNkb3Q7IHByZXYiOworCQkkcGFnaW5nX25hdiAuPSAiZmlyc3QgJnNkb3Q7IHByZXYiOwogCX0KIAogCWlmICgkaGFzX25leHRfbGluaykgewpAQCAtMzIxMywyMiArMzUxOSw2NiBAQAogCSAgICAgICJcbjwvZGl2PlxuIjsKIH0KIAotI3N1YiBnaXRfcHJpbnRfYXV0aG9yc2hpcCAoXCUpIHsKK3N1YiBwcmludF9sb2NhbF90aW1lIHsKKwlwcmludCBmb3JtYXRfbG9jYWxfdGltZShAXyk7Cit9CisKK3N1YiBmb3JtYXRfbG9jYWxfdGltZSB7CisJbXkgJGxvY2FsdGltZSA9ICcnOworCW15ICVkYXRlID0gQF87CisJaWYgKCRkYXRleydob3VyX2xvY2FsJ30gPCA2KSB7CisJCSRsb2NhbHRpbWUgLj0gc3ByaW50ZigiICg8c3BhbiBjbGFzcz1cImF0bmlnaHRcIj4lMDJkOiUwMmQ8L3NwYW4+ICVzKSIsCisJCQkkZGF0ZXsnaG91cl9sb2NhbCd9LCAkZGF0ZXsnbWludXRlX2xvY2FsJ30sICRkYXRleyd0el9sb2NhbCd9KTsKKwl9IGVsc2UgeworCQkkbG9jYWx0aW1lIC49IHNwcmludGYoIiAoJTAyZDolMDJkICVzKSIsCisJCQkkZGF0ZXsnaG91cl9sb2NhbCd9LCAkZGF0ZXsnbWludXRlX2xvY2FsJ30sICRkYXRleyd0el9sb2NhbCd9KTsKKwl9CisKKwlyZXR1cm4gJGxvY2FsdGltZTsKK30KKworIyBPdXRwdXRzIHRoZSBhdXRob3IgbmFtZSBhbmQgZGF0ZSBpbiBsb25nIGZvcm0KIHN1YiBnaXRfcHJpbnRfYXV0aG9yc2hpcCB7CiAJbXkgJGNvID0gc2hpZnQ7CisJbXkgJW9wdHMgPSBAXzsKKwlteSAkdGFnID0gJG9wdHN7LXRhZ30gfHwgJ2Rpdic7CisJbXkgJGF1dGhvciA9ICRjby0+eydhdXRob3JfbmFtZSd9OwogCiAJbXkgJWFkID0gcGFyc2VfZGF0ZSgkY28tPnsnYXV0aG9yX2Vwb2NoJ30sICRjby0+eydhdXRob3JfdHonfSk7Ci0JcHJpbnQgIjxkaXYgY2xhc3M9XCJhdXRob3JfZGF0ZVwiPiIgLgotCSAgICAgIGVzY19odG1sKCRjby0+eydhdXRob3JfbmFtZSd9KSAuCisJcHJpbnQgIjwkdGFnIGNsYXNzPVwiYXV0aG9yX2RhdGVcIj4iIC4KKwkgICAgICBmb3JtYXRfc2VhcmNoX2F1dGhvcigkYXV0aG9yLCAiYXV0aG9yIiwgZXNjX2h0bWwoJGF1dGhvcikpIC4KIAkgICAgICAiIFskYWR7J3JmYzI4MjInfSI7Ci0JaWYgKCRhZHsnaG91cl9sb2NhbCd9IDwgNikgewotCQlwcmludGYoIiAoPHNwYW4gY2xhc3M9XCJhdG5pZ2h0XCI+JTAyZDolMDJkPC9zcGFuPiAlcykiLAotCQkgICAgICAgJGFkeydob3VyX2xvY2FsJ30sICRhZHsnbWludXRlX2xvY2FsJ30sICRhZHsndHpfbG9jYWwnfSk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRmKCIgKCUwMmQ6JTAyZCAlcykiLAotCQkgICAgICAgJGFkeydob3VyX2xvY2FsJ30sICRhZHsnbWludXRlX2xvY2FsJ30sICRhZHsndHpfbG9jYWwnfSk7CisJcHJpbnRfbG9jYWxfdGltZSglYWQpIGlmICgkb3B0c3stbG9jYWx0aW1lfSk7CisJcHJpbnQgIl0iIC4gZ2l0X2dldF9hdmF0YXIoJGNvLT57J2F1dGhvcl9lbWFpbCd9LCAtcGFkX2JlZm9yZSA9PiAxKQorCQkgIC4gIjwvJHRhZz5cbiI7Cit9CisKKyMgT3V0cHV0cyB0YWJsZSByb3dzIGNvbnRhaW5pbmcgdGhlIGZ1bGwgYXV0aG9yIG9yIGNvbW1pdHRlciBpbmZvcm1hdGlvbiwKKyMgaW4gdGhlIGZvcm1hdCBleHBlY3RlZCBmb3IgJ2NvbW1pdCcgdmlldyAoJiBzaW1pbGlhKS4KKyMgUGFyYW1ldGVycyBhcmUgYSBjb21taXQgaGFzaCByZWZlcmVuY2UsIGZvbGxvd2VkIGJ5IHRoZSBsaXN0IG9mIHBlb3BsZQorIyB0byBvdXRwdXQgaW5mb3JtYXRpb24gZm9yLiBJZiB0aGUgbGlzdCBpcyBlbXB0eSBpdCBkZWZhbHRzIHRvIGJvdGgKKyMgYXV0aG9yIGFuZCBjb21taXR0ZXIuCitzdWIgZ2l0X3ByaW50X2F1dGhvcnNoaXBfcm93cyB7CisJbXkgJGNvID0gc2hpZnQ7CisJIyB0b28gYmFkIHdlIGNhbid0IHVzZSBAcGVvcGxlID0gQF8gfHwgKCdhdXRob3InLCAnY29tbWl0dGVyJykKKwlteSBAcGVvcGxlID0gQF87CisJQHBlb3BsZSA9ICgnYXV0aG9yJywgJ2NvbW1pdHRlcicpIHVubGVzcyBAcGVvcGxlOworCWZvcmVhY2ggbXkgJHdobyAoQHBlb3BsZSkgeworCQlteSAld2QgPSBwYXJzZV9kYXRlKCRjby0+eyIke3dob31fZXBvY2gifSwgJGNvLT57IiR7d2hvfV90eiJ9KTsKKwkJcHJpbnQgIjx0cj48dGQ+JHdobzwvdGQ+PHRkPiIgLgorCQkgICAgICBmb3JtYXRfc2VhcmNoX2F1dGhvcigkY28tPnsiJHt3aG99X25hbWUifSwgJHdobywKKwkJCSAgICAgICBlc2NfaHRtbCgkY28tPnsiJHt3aG99X25hbWUifSkpIC4gIiAiIC4KKwkJICAgICAgZm9ybWF0X3NlYXJjaF9hdXRob3IoJGNvLT57IiR7d2hvfV9lbWFpbCJ9LCAkd2hvLAorCQkJICAgICAgIGVzY19odG1sKCI8IiAuICRjby0+eyIke3dob31fZW1haWwifSAuICI+IikpIC4KKwkJICAgICAgIjwvdGQ+PHRkIHJvd3NwYW49XCIyXCI+IiAuCisJCSAgICAgIGdpdF9nZXRfYXZhdGFyKCRjby0+eyIke3dob31fZW1haWwifSwgLXNpemUgPT4gJ2RvdWJsZScpIC4KKwkJICAgICAgIjwvdGQ+PC90cj5cbiIgLgorCQkgICAgICAiPHRyPiIgLgorCQkgICAgICAiPHRkPjwvdGQ+PHRkPiAkd2R7J3JmYzI4MjInfSI7CisJCXByaW50X2xvY2FsX3RpbWUoJXdkKTsKKwkJcHJpbnQgIjwvdGQ+IiAuCisJCSAgICAgICI8L3RyPlxuIjsKIAl9Ci0JcHJpbnQgIl08L2Rpdj5cbiI7CiB9CiAKIHN1YiBnaXRfcHJpbnRfcGFnZV9wYXRoIHsKQEAgLTMyNjksOCArMzYxOSw3IEBACiAJcHJpbnQgIjxici8+PC9kaXY+XG4iOwogfQogCi0jIHN1YiBnaXRfcHJpbnRfbG9nIChcQDslKSB7Ci1zdWIgZ2l0X3ByaW50X2xvZyAoJDslKSB7CitzdWIgZ2l0X3ByaW50X2xvZyB7CiAJbXkgJGxvZyA9IHNoaWZ0OwogCW15ICVvcHRzID0gQF87CiAKQEAgLTMzMjgsNyArMzY3Nyw3IEBACiAJb3BlbiBteSAkZmQsICItfCIsIGdpdF9jbWQoKSwgImNhdC1maWxlIiwgImJsb2IiLCAkaGFzaAogCQlvciByZXR1cm47CiAJewotCQlsb2NhbCAkLzsKKwkJbG9jYWwgJC8gPSB1bmRlZjsKIAkJJGxpbmtfdGFyZ2V0ID0gPCRmZD47CiAJfQogCWNsb3NlICRmZApAQCAtMzM0MSwxMCArMzY5MCw3IEBACiAjIHJldHVybiB0YXJnZXQgb2YgbGluayByZWxhdGl2ZSB0byB0b3AgZGlyZWN0b3J5ICh0b3AgdHJlZSk7CiAjIHJldHVybiB1bmRlZiBpZiBpdCBpcyBub3QgcG9zc2libGUgKGluY2x1ZGluZyBhYnNvbHV0ZSBsaW5rcykuCiBzdWIgbm9ybWFsaXplX2xpbmtfdGFyZ2V0IHsKLQlteSAoJGxpbmtfdGFyZ2V0LCAkYmFzZWRpciwgJGhhc2hfYmFzZSkgPSBAXzsKLQotCSMgd2UgY2FuIG5vcm1hbGl6ZSBzeW1saW5rIHRhcmdldCBvbmx5IGlmICRoYXNoX2Jhc2UgaXMgcHJvdmlkZWQKLQlyZXR1cm4gdW5sZXNzICRoYXNoX2Jhc2U7CisJbXkgKCRsaW5rX3RhcmdldCwgJGJhc2VkaXIpID0gQF87CiAKIAkjIGFic29sdXRlIHN5bWxpbmtzIChiZWdpbm5pbmcgd2l0aCAnLycpIGNhbm5vdCBiZSBub3JtYWxpemVkCiAJcmV0dXJuIGlmIChzdWJzdHIoJGxpbmtfdGFyZ2V0LCAwLCAxKSBlcSAnLycpOwpAQCAtMzM5Miw2ICszNzM4LDkgQEAKIAkjIGFuZCBsaW5rIGlzIHRoZSBhY3Rpb24gbGlua3Mgb2YgdGhlIGVudHJ5LgogCiAJcHJpbnQgIjx0ZCBjbGFzcz1cIm1vZGVcIj4iIC4gbW9kZV9zdHIoJHQtPnsnbW9kZSd9KSAuICI8L3RkPlxuIjsKKwlpZiAoZXhpc3RzICR0LT57J3NpemUnfSkgeworCQlwcmludCAiPHRkIGNsYXNzPVwic2l6ZVwiPiR0LT57J3NpemUnfTwvdGQ+XG4iOworCX0KIAlpZiAoJHQtPnsndHlwZSd9IGVxICJibG9iIikgewogCQlwcmludCAiPHRkIGNsYXNzPVwibGlzdFwiPiIgLgogCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iIiwgaGFzaD0+JHQtPnsnaGFzaCd9LApAQCAtMzQwMCw3ICszNzQ5LDcgQEAKIAkJaWYgKFNfSVNMTksob2N0ICR0LT57J21vZGUnfSkpIHsKIAkJCW15ICRsaW5rX3RhcmdldCA9IGdpdF9nZXRfbGlua190YXJnZXQoJHQtPnsnaGFzaCd9KTsKIAkJCWlmICgkbGlua190YXJnZXQpIHsKLQkJCQlteSAkbm9ybV90YXJnZXQgPSBub3JtYWxpemVfbGlua190YXJnZXQoJGxpbmtfdGFyZ2V0LCAkYmFzZWRpciwgJGhhc2hfYmFzZSk7CisJCQkJbXkgJG5vcm1fdGFyZ2V0ID0gbm9ybWFsaXplX2xpbmtfdGFyZ2V0KCRsaW5rX3RhcmdldCwgJGJhc2VkaXIpOwogCQkJCWlmIChkZWZpbmVkICRub3JtX3RhcmdldCkgewogCQkJCQlwcmludCAiIC0+ICIgLgogCQkJCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+Im9iamVjdCIsIGhhc2hfYmFzZT0+JGhhc2hfYmFzZSwKQEAgLTM0MzcsMTIgKzM3ODYsMTQgQEAKIAl9IGVsc2lmICgkdC0+eyd0eXBlJ30gZXEgInRyZWUiKSB7CiAJCXByaW50ICI8dGQgY2xhc3M9XCJsaXN0XCI+IjsKIAkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJ0cmVlIiwgaGFzaD0+JHQtPnsnaGFzaCd9LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+IiRiYXNlZGlyJHQtPnsnbmFtZSd9IiwgJWJhc2Vfa2V5KX0sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4iJGJhc2VkaXIkdC0+eyduYW1lJ30iLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICViYXNlX2tleSl9LAogCQkgICAgICAgICAgICAgIGVzY19wYXRoKCR0LT57J25hbWUnfSkpOwogCQlwcmludCAiPC90ZD5cbiI7CiAJCXByaW50ICI8dGQgY2xhc3M9XCJsaW5rXCI+IjsKIAkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJ0cmVlIiwgaGFzaD0+JHQtPnsnaGFzaCd9LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+IiRiYXNlZGlyJHQtPnsnbmFtZSd9IiwgJWJhc2Vfa2V5KX0sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4iJGJhc2VkaXIkdC0+eyduYW1lJ30iLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICViYXNlX2tleSl9LAogCQkgICAgICAgICAgICAgICJ0cmVlIik7CiAJCWlmIChkZWZpbmVkICRoYXNoX2Jhc2UpIHsKIAkJCXByaW50ICIgfCAiIC4KQEAgLTM5OTMsNyArNDM0NCw3IEBACiAJCQkgICAgKCRwbmFtZSAhfiAvXC8kLykgJiYKIAkJCSAgICAoLWQgIiRwcm9qZWN0cm9vdC8kcG5hbWUiKSkgewogCQkJCSRwci0+eydmb3Jrcyd9ID0gIi1kICRwcm9qZWN0cm9vdC8kcG5hbWUiOwotCQkJfQllbHNlIHsKKwkJCX0gZWxzZSB7CiAJCQkJJHByLT57J2ZvcmtzJ30gPSAwOwogCQkJfQogCQl9CkBAIC00MDA3LDE3ICs0MzU4LDI0IEBACiAjIHByaW50ICdzb3J0IGJ5JyA8dGg+IGVsZW1lbnQsIGdlbmVyYXRpbmcgJ3NvcnQgYnkgJG5hbWUnIHJlcGxheSBsaW5rCiAjIGlmIHRoYXQgb3JkZXIgaXMgbm90IHNlbGVjdGVkCiBzdWIgcHJpbnRfc29ydF90aCB7CisJcHJpbnQgZm9ybWF0X3NvcnRfdGgoQF8pOworfQorCitzdWIgZm9ybWF0X3NvcnRfdGggewogCW15ICgkbmFtZSwgJG9yZGVyLCAkaGVhZGVyKSA9IEBfOworCW15ICRzb3J0X3RoID0gIiI7CiAJJGhlYWRlciB8fD0gdWNmaXJzdCgkbmFtZSk7CiAKIAlpZiAoJG9yZGVyIGVxICRuYW1lKSB7Ci0JCXByaW50ICI8dGg+JGhlYWRlcjwvdGg+XG4iOworCQkkc29ydF90aCAuPSAiPHRoPiRoZWFkZXI8L3RoPlxuIjsKIAl9IGVsc2UgewotCQlwcmludCAiPHRoPiIgLgotCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1yZXBsYXk9PjEsIG9yZGVyPT4kbmFtZSksCi0JCSAgICAgICAgICAgICAgIC1jbGFzcyA9PiAiaGVhZGVyIn0sICRoZWFkZXIpIC4KLQkJICAgICAgIjwvdGg+XG4iOworCQkkc29ydF90aCAuPSAiPHRoPiIgLgorCQkgICAgICAgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1yZXBsYXk9PjEsIG9yZGVyPT4kbmFtZSksCisJCSAgICAgICAgICAgICAgICAgICAgIC1jbGFzcyA9PiAiaGVhZGVyIn0sICRoZWFkZXIpIC4KKwkJICAgICAgICAgICAgIjwvdGg+XG4iOwogCX0KKworCXJldHVybiAkc29ydF90aDsKIH0KIAogc3ViIGdpdF9wcm9qZWN0X2xpc3RfYm9keSB7CkBAIC00MTI3LDYgKzQ0ODUsNDYgQEAKIAlwcmludCAiPC90YWJsZT5cbiI7CiB9CiAKK3N1YiBnaXRfbG9nX2JvZHkgeworCSMgdXNlcyBnbG9iYWwgdmFyaWFibGUgJHByb2plY3QKKwlteSAoJGNvbW1pdGxpc3QsICRmcm9tLCAkdG8sICRyZWZzLCAkZXh0cmEpID0gQF87CisKKwkkZnJvbSA9IDAgdW5sZXNzIGRlZmluZWQgJGZyb207CisJJHRvID0gJCN7JGNvbW1pdGxpc3R9IGlmICghZGVmaW5lZCAkdG8gfHwgJCN7JGNvbW1pdGxpc3R9IDwgJHRvKTsKKworCWZvciAobXkgJGkgPSAwOyAkaSA8PSAkdG87ICRpKyspIHsKKwkJbXkgJWNvID0gJXskY29tbWl0bGlzdC0+WyRpXX07CisJCW5leHQgaWYgISVjbzsKKwkJbXkgJGNvbW1pdCA9ICRjb3snaWQnfTsKKwkJbXkgJHJlZiA9IGZvcm1hdF9yZWZfbWFya2VyKCRyZWZzLCAkY29tbWl0KTsKKwkJbXkgJWFkID0gcGFyc2VfZGF0ZSgkY297J2F1dGhvcl9lcG9jaCd9KTsKKwkJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ2NvbW1pdCcsCisJCSAgICAgICAgICAgICAgICI8c3BhbiBjbGFzcz1cImFnZVwiPiRjb3snYWdlX3N0cmluZyd9PC9zcGFuPiIgLgorCQkgICAgICAgICAgICAgICBlc2NfaHRtbCgkY297J3RpdGxlJ30pIC4gJHJlZiwKKwkJICAgICAgICAgICAgICAgJGNvbW1pdCk7CisJCXByaW50ICI8ZGl2IGNsYXNzPVwidGl0bGVfdGV4dFwiPlxuIiAuCisJCSAgICAgICI8ZGl2IGNsYXNzPVwibG9nX2xpbmtcIj5cbiIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdCIsIGhhc2g9PiRjb21taXQpfSwgImNvbW1pdCIpIC4KKwkJICAgICAgIiB8ICIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdGRpZmYiLCBoYXNoPT4kY29tbWl0KX0sICJjb21taXRkaWZmIikgLgorCQkgICAgICAiIHwgIiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4idHJlZSIsIGhhc2g9PiRjb21taXQsIGhhc2hfYmFzZT0+JGNvbW1pdCl9LCAidHJlZSIpIC4KKwkJICAgICAgIjxici8+XG4iIC4KKwkJICAgICAgIjwvZGl2PlxuIjsKKwkJICAgICAgZ2l0X3ByaW50X2F1dGhvcnNoaXAoXCVjbywgLXRhZyA9PiAnc3BhbicpOworCQkgICAgICBwcmludCAiPGJyLz5cbjwvZGl2PlxuIjsKKworCQlwcmludCAiPGRpdiBjbGFzcz1cImxvZ19ib2R5XCI+XG4iOworCQlnaXRfcHJpbnRfbG9nKCRjb3snY29tbWVudCd9LCAtZmluYWxfZW1wdHlfbGluZT0+IDEpOworCQlwcmludCAiPC9kaXY+XG4iOworCX0KKwlpZiAoJGV4dHJhKSB7CisJCXByaW50ICI8ZGl2IGNsYXNzPVwicGFnZV9uYXZcIj5cbiI7CisJCXByaW50ICIkZXh0cmFcbiI7CisJCXByaW50ICI8L2Rpdj5cbiI7CisJfQorfQorCiBzdWIgZ2l0X3Nob3J0bG9nX2JvZHkgewogCSMgdXNlcyBnbG9iYWwgdmFyaWFibGUgJHByb2plY3QKIAlteSAoJGNvbW1pdGxpc3QsICRmcm9tLCAkdG8sICRyZWZzLCAkZXh0cmEpID0gQF87CkBAIC00MTQ2LDExICs0NTQ0LDkgQEAKIAkJCXByaW50ICI8dHIgY2xhc3M9XCJsaWdodFwiPlxuIjsKIAkJfQogCQkkYWx0ZXJuYXRlIF49IDE7Ci0JCW15ICRhdXRob3IgPSBjaG9wX2FuZF9lc2NhcGVfc3RyKCRjb3snYXV0aG9yX25hbWUnfSwgMTApOwogCQkjIGdpdF9zdW1tYXJ5KCkgdXNlZCBwcmludCAiPHRkPjxpPiRjb3snYWdlX3N0cmluZyd9PC9pPjwvdGQ+XG4iIC4KIAkJcHJpbnQgIjx0ZCB0aXRsZT1cIiRjb3snYWdlX3N0cmluZ19hZ2UnfVwiPjxpPiRjb3snYWdlX3N0cmluZ19kYXRlJ308L2k+PC90ZD5cbiIgLgotCQkgICAgICAiPHRkPjxpPiIgLiAkYXV0aG9yIC4gIjwvaT48L3RkPlxuIiAuCi0JCSAgICAgICI8dGQ+IjsKKwkJICAgICAgZm9ybWF0X2F1dGhvcl9odG1sKCd0ZCcsIFwlY28sIDEwKSAuICI8dGQ+IjsKIAkJcHJpbnQgZm9ybWF0X3N1YmplY3RfaHRtbCgkY297J3RpdGxlJ30sICRjb3sndGl0bGVfc2hvcnQnfSwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmKGFjdGlvbj0+ImNvbW1pdCIsIGhhc2g9PiRjb21taXQpLCAkcmVmKTsKIAkJcHJpbnQgIjwvdGQ+XG4iIC4KQEAgLTQxNzUsNyArNDU3MSw4IEBACiAKIHN1YiBnaXRfaGlzdG9yeV9ib2R5IHsKIAkjIFdhcm5pbmc6IGFzc3VtZXMgY29uc3RhbnQgdHlwZSAoYmxvYiBvciB0cmVlKSBkdXJpbmcgaGlzdG9yeQotCW15ICgkY29tbWl0bGlzdCwgJGZyb20sICR0bywgJHJlZnMsICRoYXNoX2Jhc2UsICRmdHlwZSwgJGV4dHJhKSA9IEBfOworCW15ICgkY29tbWl0bGlzdCwgJGZyb20sICR0bywgJHJlZnMsICRleHRyYSwKKwkgICAgJGZpbGVfbmFtZSwgJGZpbGVfaGFzaCwgJGZ0eXBlKSA9IEBfOwogCiAJJGZyb20gPSAwIHVubGVzcyBkZWZpbmVkICRmcm9tOwogCSR0byA9ICQjeyRjb21taXRsaXN0fSB1bmxlc3MgKGRlZmluZWQgJHRvICYmICR0byA8PSAkI3skY29tbWl0bGlzdH0pOwpAQCAtNDE5NywxMSArNDU5NCw5IEBACiAJCQlwcmludCAiPHRyIGNsYXNzPVwibGlnaHRcIj5cbiI7CiAJCX0KIAkJJGFsdGVybmF0ZSBePSAxOwotCSMgc2hvcnRsb2cgdXNlcyAgICAgIGNob3Bfc3RyKCRjb3snYXV0aG9yX25hbWUnfSwgMTApCi0JCW15ICRhdXRob3IgPSBjaG9wX2FuZF9lc2NhcGVfc3RyKCRjb3snYXV0aG9yX25hbWUnfSwgMTUsIDMpOwogCQlwcmludCAiPHRkIHRpdGxlPVwiJGNveydhZ2Vfc3RyaW5nX2FnZSd9XCI+PGk+JGNveydhZ2Vfc3RyaW5nX2RhdGUnfTwvaT48L3RkPlxuIiAuCi0JCSAgICAgICI8dGQ+PGk+IiAuICRhdXRob3IgLiAiPC9pPjwvdGQ+XG4iIC4KLQkJICAgICAgIjx0ZD4iOworCSMgc2hvcnRsb2c6ICAgZm9ybWF0X2F1dGhvcl9odG1sKCd0ZCcsIFwlY28sIDEwKQorCQkgICAgICBmb3JtYXRfYXV0aG9yX2h0bWwoJ3RkJywgXCVjbywgMTUsIDMpIC4gIjx0ZD4iOwogCQkjIG9yaWdpbmFsbHkgZ2l0X2hpc3RvcnkgdXNlZCBjaG9wX3N0cigkY297J3RpdGxlJ30sIDUwKQogCQlwcmludCBmb3JtYXRfc3ViamVjdF9odG1sKCRjb3sndGl0bGUnfSwgJGNveyd0aXRsZV9zaG9ydCd9LAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWYoYWN0aW9uPT4iY29tbWl0IiwgaGFzaD0+JGNvbW1pdCksICRyZWYpOwpAQCAtNDIxMSw3ICs0NjA2LDcgQEAKIAkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJjb21taXRkaWZmIiwgaGFzaD0+JGNvbW1pdCl9LCAiY29tbWl0ZGlmZiIpOwogCiAJCWlmICgkZnR5cGUgZXEgJ2Jsb2InKSB7Ci0JCQlteSAkYmxvYl9jdXJyZW50ID0gZ2l0X2dldF9oYXNoX2J5X3BhdGgoJGhhc2hfYmFzZSwgJGZpbGVfbmFtZSk7CisJCQlteSAkYmxvYl9jdXJyZW50ID0gJGZpbGVfaGFzaDsKIAkJCW15ICRibG9iX3BhcmVudCAgPSBnaXRfZ2V0X2hhc2hfYnlfcGF0aCgkY29tbWl0LCAkZmlsZV9uYW1lKTsKIAkJCWlmIChkZWZpbmVkICRibG9iX2N1cnJlbnQgJiYgZGVmaW5lZCAkYmxvYl9wYXJlbnQgJiYKIAkJCQkJJGJsb2JfY3VycmVudCBuZSAkYmxvYl9wYXJlbnQpIHsKQEAgLTQzNTQsOSArNDc0OSw4IEBACiAJCQlwcmludCAiPHRyIGNsYXNzPVwibGlnaHRcIj5cbiI7CiAJCX0KIAkJJGFsdGVybmF0ZSBePSAxOwotCQlteSAkYXV0aG9yID0gY2hvcF9hbmRfZXNjYXBlX3N0cigkY297J2F1dGhvcl9uYW1lJ30sIDE1LCA1KTsKIAkJcHJpbnQgIjx0ZCB0aXRsZT1cIiRjb3snYWdlX3N0cmluZ19hZ2UnfVwiPjxpPiRjb3snYWdlX3N0cmluZ19kYXRlJ308L2k+PC90ZD5cbiIgLgotCQkgICAgICAiPHRkPjxpPiIgLiAkYXV0aG9yIC4gIjwvaT48L3RkPlxuIiAuCisJCSAgICAgIGZvcm1hdF9hdXRob3JfaHRtbCgndGQnLCBcJWNvLCAxNSwgNSkgLgogCQkgICAgICAiPHRkPiIgLgogCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdCIsIGhhc2g9PiRjb3snaWQnfSksCiAJCSAgICAgICAgICAgICAgIC1jbGFzcyA9PiAibGlzdCBzdWJqZWN0In0sCkBAIC00NDEyLDcgKzQ4MDYsNyBAQAogCX0KIAogCWdpdF9oZWFkZXJfaHRtbCgpOwotCWlmICgtZiAkaG9tZV90ZXh0KSB7CisJaWYgKGRlZmluZWQgJGhvbWVfdGV4dCAmJiAtZiAkaG9tZV90ZXh0KSB7CiAJCXByaW50ICI8ZGl2IGNsYXNzPVwiaW5kZXhfaW5jbHVkZVwiPlxuIjsKIAkJaW5zZXJ0X2ZpbGUoJGhvbWVfdGV4dCk7CiAJCXByaW50ICI8L2Rpdj5cbiI7CkBAIC00NTkwLDExICs0OTg0LDcgQEAKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YWd7J3R5cGUnfSkgLiAiPC90ZD5cbiIgLgogCSAgICAgICI8L3RyPlxuIjsKIAlpZiAoZGVmaW5lZCgkdGFneydhdXRob3InfSkpIHsKLQkJbXkgJWFkID0gcGFyc2VfZGF0ZSgkdGFneydlcG9jaCd9LCAkdGFneyd0eid9KTsKLQkJcHJpbnQgIjx0cj48dGQ+YXV0aG9yPC90ZD48dGQ+IiAuIGVzY19odG1sKCR0YWd7J2F1dGhvcid9KSAuICI8L3RkPjwvdHI+XG4iOwotCQlwcmludCAiPHRyPjx0ZD48L3RkPjx0ZD4iIC4gJGFkeydyZmMyODIyJ30gLgotCQkJc3ByaW50ZigiICglMDJkOiUwMmQgJXMpIiwgJGFkeydob3VyX2xvY2FsJ30sICRhZHsnbWludXRlX2xvY2FsJ30sICRhZHsndHpfbG9jYWwnfSkgLgotCQkJIjwvdGQ+PC90cj5cbiI7CisJCWdpdF9wcmludF9hdXRob3JzaGlwX3Jvd3MoXCV0YWcsICdhdXRob3InKTsKIAl9CiAJcHJpbnQgIjwvdGFibGU+XG5cbiIgLgogCSAgICAgICI8L2Rpdj5cbiI7CkBAIC00NjA4LDcgKzQ5OTgsMTMgQEAKIAlnaXRfZm9vdGVyX2h0bWwoKTsKIH0KIAotc3ViIGdpdF9ibGFtZSB7CitzdWIgZ2l0X2JsYW1lX2NvbW1vbiB7CisJbXkgJGZvcm1hdCA9IHNoaWZ0IHx8ICdwb3JjZWxhaW4nOworCWlmICgkZm9ybWF0IGVxICdwb3JjZWxhaW4nICYmICRjZ2ktPnBhcmFtKCdqcycpKSB7CisJCSRmb3JtYXQgPSAnaW5jcmVtZW50YWwnOworCQkkYWN0aW9uID0gJ2JsYW1lX2luY3JlbWVudGFsJzsgIyBmb3IgcGFnZSB0aXRsZSBldGMKKwl9CisKIAkjIHBlcm1pc3Npb25zCiAJZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ2JsYW1lJykKIAkJb3IgZGllX2Vycm9yKDQwMywgIkJsYW1lIHZpZXcgbm90IGFsbG93ZWQiKTsKQEAgLTQ2MzAsMTA3ICs1MDI2LDIyMCBAQAogCQl9CiAJfQogCi0JIyBydW4gZ2l0LWJsYW1lIC0tcG9yY2VsYWluCi0Jb3BlbiBteSAkZmQsICItfCIsIGdpdF9jbWQoKSwgImJsYW1lIiwgJy1wJywKLQkJJGhhc2hfYmFzZSwgJy0tJywgJGZpbGVfbmFtZQotCQlvciBkaWVfZXJyb3IoNTAwLCAiT3BlbiBnaXQtYmxhbWUgZmFpbGVkIik7CisJbXkgJGZkOworCWlmICgkZm9ybWF0IGVxICdpbmNyZW1lbnRhbCcpIHsKKwkJIyBnZXQgZmlsZSBjb250ZW50cyAoYXMgYmFzZSkKKwkJb3BlbiAkZmQsICItfCIsIGdpdF9jbWQoKSwgJ2NhdC1maWxlJywgJ2Jsb2InLCAkaGFzaAorCQkJb3IgZGllX2Vycm9yKDUwMCwgIk9wZW4gZ2l0LWNhdC1maWxlIGZhaWxlZCIpOworCX0gZWxzaWYgKCRmb3JtYXQgZXEgJ2RhdGEnKSB7CisJCSMgcnVuIGdpdC1ibGFtZSAtLWluY3JlbWVudGFsCisJCW9wZW4gJGZkLCAiLXwiLCBnaXRfY21kKCksICJibGFtZSIsICItLWluY3JlbWVudGFsIiwKKwkJCSRoYXNoX2Jhc2UsICItLSIsICRmaWxlX25hbWUKKwkJCW9yIGRpZV9lcnJvcig1MDAsICJPcGVuIGdpdC1ibGFtZSAtLWluY3JlbWVudGFsIGZhaWxlZCIpOworCX0gZWxzZSB7CisJCSMgcnVuIGdpdC1ibGFtZSAtLXBvcmNlbGFpbgorCQlvcGVuICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAiYmxhbWUiLCAnLXAnLAorCQkJJGhhc2hfYmFzZSwgJy0tJywgJGZpbGVfbmFtZQorCQkJb3IgZGllX2Vycm9yKDUwMCwgIk9wZW4gZ2l0LWJsYW1lIC0tcG9yY2VsYWluIGZhaWxlZCIpOworCX0KKworCSMgaW5jcmVtZW50YWwgYmxhbWUgZGF0YSByZXR1cm5zIGVhcmx5CisJaWYgKCRmb3JtYXQgZXEgJ2RhdGEnKSB7CisJCXByaW50ICRjZ2ktPmhlYWRlcigKKwkJCS10eXBlPT4idGV4dC9wbGFpbiIsIC1jaGFyc2V0ID0+ICJ1dGYtOCIsCisJCQktc3RhdHVzPT4gIjIwMCBPSyIpOworCQlsb2NhbCAkfCA9IDE7ICMgb3V0cHV0IGF1dG9mbHVzaAorCQlwcmludCB3aGlsZSA8JGZkPjsKKwkJY2xvc2UgJGZkCisJCQlvciBwcmludCAiRVJST1IgJCFcbiI7CisKKwkJcHJpbnQgJ0VORCc7CisJCWlmIChkZWZpbmVkICR0MCAmJiBnaXR3ZWJfY2hlY2tfZmVhdHVyZSgndGltZWQnKSkgeworCQkJcHJpbnQgJyAnLgorCQkJICAgICAgVGltZTo6SGlSZXM6OnR2X2ludGVydmFsKCR0MCwgW1RpbWU6OkhpUmVzOjpnZXR0aW1lb2ZkYXkoKV0pLgorCQkJICAgICAgJyAnLiRudW1iZXJfb2ZfZ2l0X2NtZHM7CisJCX0KKwkJcHJpbnQgIlxuIjsKKworCQlyZXR1cm47CisJfQogCiAJIyBwYWdlIGhlYWRlcgogCWdpdF9oZWFkZXJfaHRtbCgpOwogCW15ICRmb3JtYXRzX25hdiA9CiAJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsIC1yZXBsYXk9PjEpfSwKIAkJICAgICAgICAiYmxvYiIpIC4KKwkJIiB8ICI7CisJaWYgKCRmb3JtYXQgZXEgJ2luY3JlbWVudGFsJykgeworCQkkZm9ybWF0c19uYXYgLj0KKwkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxhbWUiLCBqYXZhc2NyaXB0PT4wLCAtcmVwbGF5PT4xKX0sCisJCQkgICAgICAgICJibGFtZSIpIC4gIiAobm9uLWluY3JlbWVudGFsKSI7CisJfSBlbHNlIHsKKwkJJGZvcm1hdHNfbmF2IC49CisJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsYW1lX2luY3JlbWVudGFsIiwgLXJlcGxheT0+MSl9LAorCQkJICAgICAgICAiYmxhbWUiKSAuICIgKGluY3JlbWVudGFsKSI7CisJfQorCSRmb3JtYXRzX25hdiAuPQogCQkiIHwgIiAuCiAJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iaGlzdG9yeSIsIC1yZXBsYXk9PjEpfSwKIAkJICAgICAgICAiaGlzdG9yeSIpIC4KIAkJIiB8ICIgLgotCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsYW1lIiwgZmlsZV9uYW1lPT4kZmlsZV9uYW1lKX0sCisJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4kYWN0aW9uLCBmaWxlX25hbWU9PiRmaWxlX25hbWUpfSwKIAkJICAgICAgICAiSEVBRCIpOwogCWdpdF9wcmludF9wYWdlX25hdignJywnJywgJGhhc2hfYmFzZSwkY297J3RyZWUnfSwkaGFzaF9iYXNlLCAkZm9ybWF0c19uYXYpOwogCWdpdF9wcmludF9oZWFkZXJfZGl2KCdjb21taXQnLCBlc2NfaHRtbCgkY297J3RpdGxlJ30pLCAkaGFzaF9iYXNlKTsKIAlnaXRfcHJpbnRfcGFnZV9wYXRoKCRmaWxlX25hbWUsICRmdHlwZSwgJGhhc2hfYmFzZSk7CiAKIAkjIHBhZ2UgYm9keQotCW15IEByZXZfY29sb3IgPSBxdyhsaWdodDIgZGFyazIpOworCWlmICgkZm9ybWF0IGVxICdpbmNyZW1lbnRhbCcpIHsKKwkJcHJpbnQgIjxub3NjcmlwdD5cbjxkaXYgY2xhc3M9XCJlcnJvclwiPjxjZW50ZXI+PGI+XG4iLgorCQkgICAgICAiVGhpcyBwYWdlIHJlcXVpcmVzIEphdmFTY3JpcHQgdG8gcnVuLlxuIFVzZSAiLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+J2JsYW1lJyxqYXZhc2NyaXB0PT4wLC1yZXBsYXk9PjEpfSwKKwkJICAgICAgICAgICAgICAndGhpcyBwYWdlJykuCisJCSAgICAgICIgaW5zdGVhZC5cbiIuCisJCSAgICAgICI8L2I+PC9jZW50ZXI+PC9kaXY+XG48L25vc2NyaXB0PlxuIjsKKworCQlwcmludCBxcSE8ZGl2IGlkPSJwcm9ncmVzc19iYXIiIHN0eWxlPSJ3aWR0aDogMTAwJTsgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93Ij48L2Rpdj5cbiE7CisJfQorCisJcHJpbnQgcXEhPGRpdiBjbGFzcz0icGFnZV9ib2R5Ij5cbiE7CisJcHJpbnQgcXEhPGRpdiBpZD0icHJvZ3Jlc3NfaW5mbyI+Li4uIC8gLi4uPC9kaXY+XG4hCisJCWlmICgkZm9ybWF0IGVxICdpbmNyZW1lbnRhbCcpOworCXByaW50IHFxITx0YWJsZSBpZD0iYmxhbWVfdGFibGUiIGNsYXNzPSJibGFtZSIgd2lkdGg9IjEwMCUiPlxuIS4KKwkgICAgICAjcXEhPGNvbCB3aWR0aD0iNS41ZW0iIC8+PGNvbCB3aWR0aD0iMi41ZW0iIC8+PGNvbCB3aWR0aD0iKiIgLz5cbiEuCisJICAgICAgcXEhPHRoZWFkPlxuIS4KKwkgICAgICBxcSE8dHI+PHRoPkNvbW1pdDwvdGg+PHRoPkxpbmU8L3RoPjx0aD5EYXRhPC90aD48L3RyPlxuIS4KKwkgICAgICBxcSE8L3RoZWFkPlxuIS4KKwkgICAgICBxcSE8dGJvZHk+XG4hOworCisJbXkgQHJldl9jb2xvciA9IHF3KGxpZ2h0IGRhcmspOwogCW15ICRudW1fY29sb3JzID0gc2NhbGFyKEByZXZfY29sb3IpOwogCW15ICRjdXJyZW50X2NvbG9yID0gMDsKLQlteSAlbWV0YWluZm8gPSAoKTsKIAotCXByaW50IDw8SFRNTDsKLTxkaXYgY2xhc3M9InBhZ2VfYm9keSI+Ci08dGFibGUgY2xhc3M9ImJsYW1lIj4KLTx0cj48dGg+Q29tbWl0PC90aD48dGg+TGluZTwvdGg+PHRoPkRhdGE8L3RoPjwvdHI+Ci1IVE1MCi0gTElORToKLQl3aGlsZSAobXkgJGxpbmUgPSA8JGZkPikgewotCQljaG9tcCAkbGluZTsKLQkJIyB0aGUgaGVhZGVyOiA8U0hBLTE+IDxzcmMgbGluZW5vPiA8ZHN0IGxpbmVubz4gWzxsaW5lcyBpbiBncm91cD5dCi0JCSMgbm8gPGxpbmVzIGluIGdyb3VwPiBmb3Igc3Vic2VxdWVudCBsaW5lcyBpbiBncm91cCBvZiBsaW5lcwotCQlteSAoJGZ1bGxfcmV2LCAkb3JpZ19saW5lbm8sICRsaW5lbm8sICRncm91cF9zaXplKSA9Ci0JCSAgICgkbGluZSA9fiAvXihbMC05YS1mXXs0MH0pIChcZCspIChcZCspKD86IChcZCspKT8kLyk7Ci0JCWlmICghZXhpc3RzICRtZXRhaW5mb3skZnVsbF9yZXZ9KSB7Ci0JCQkkbWV0YWluZm97JGZ1bGxfcmV2fSA9IHt9OworCWlmICgkZm9ybWF0IGVxICdpbmNyZW1lbnRhbCcpIHsKKwkJbXkgJGNvbG9yX2NsYXNzID0gJHJldl9jb2xvclskY3VycmVudF9jb2xvcl07CisKKwkJI2NvbnRlbnRzIG9mIGEgZmlsZQorCQlteSAkbGluZW5yID0gMDsKKwlMSU5FOgorCQl3aGlsZSAobXkgJGxpbmUgPSA8JGZkPikgeworCQkJY2hvbXAgJGxpbmU7CisJCQkkbGluZW5yKys7CisKKwkJCXByaW50IHFxITx0ciBpZD0ibCRsaW5lbnIiIGNsYXNzPSIkY29sb3JfY2xhc3MiPiEuCisJCQkgICAgICBxcSE8dGQgY2xhc3M9InNoYTEiPjxhIGhyZWY9IiI+IDwvYT48L3RkPiEuCisJCQkgICAgICBxcSE8dGQgY2xhc3M9ImxpbmVuciI+IS4KKwkJCSAgICAgIHFxITxhIGNsYXNzPSJsaW5lbnIiIGhyZWY9IiI+JGxpbmVucjwvYT48L3RkPiE7CisJCQlwcmludCBxcSE8dGQgY2xhc3M9InByZSI+ISAuIGVzY19odG1sKCRsaW5lKSAuICI8L3RkPlxuIjsKKwkJCXByaW50IHFxITwvdHI+XG4hOwogCQl9Ci0JCW15ICRtZXRhID0gJG1ldGFpbmZveyRmdWxsX3Jldn07Ci0JCW15ICRkYXRhOwotCQl3aGlsZSAoJGRhdGEgPSA8JGZkPikgewotCQkJY2hvbXAgJGRhdGE7Ci0JCQlsYXN0IGlmICgkZGF0YSA9fiBzL15cdC8vKTsgIyBjb250ZW50cyBvZiBsaW5lCi0JCQlpZiAoJGRhdGEgPX4gL14oXFMrKSAoLiopJC8pIHsKLQkJCQkkbWV0YS0+eyQxfSA9ICQyOworCisJfSBlbHNlIHsgIyBwb3JjZWxhaW4sIGkuZS4gb3JkaW5hcnkgYmxhbWUKKwkJbXkgJW1ldGFpbmZvID0gKCk7ICMgc2F2ZXMgaW5mb3JtYXRpb24gYWJvdXQgY29tbWl0cworCisJCSMgYmxhbWUgZGF0YQorCUxJTkU6CisJCXdoaWxlIChteSAkbGluZSA9IDwkZmQ+KSB7CisJCQljaG9tcCAkbGluZTsKKwkJCSMgdGhlIGhlYWRlcjogPFNIQS0xPiA8c3JjIGxpbmVubz4gPGRzdCBsaW5lbm8+IFs8bGluZXMgaW4gZ3JvdXA+XQorCQkJIyBubyA8bGluZXMgaW4gZ3JvdXA+IGZvciBzdWJzZXF1ZW50IGxpbmVzIGluIGdyb3VwIG9mIGxpbmVzCisJCQlteSAoJGZ1bGxfcmV2LCAkb3JpZ19saW5lbm8sICRsaW5lbm8sICRncm91cF9zaXplKSA9CisJCQkgICAoJGxpbmUgPX4gL14oWzAtOWEtZl17NDB9KSAoXGQrKSAoXGQrKSg/OiAoXGQrKSk/JC8pOworCQkJaWYgKCFleGlzdHMgJG1ldGFpbmZveyRmdWxsX3Jldn0pIHsKKwkJCQkkbWV0YWluZm97JGZ1bGxfcmV2fSA9IHsgJ25wcmV2aW91cycgPT4gMCB9OwogCQkJfQotCQl9Ci0JCW15ICRzaG9ydF9yZXYgPSBzdWJzdHIoJGZ1bGxfcmV2LCAwLCA4KTsKLQkJbXkgJGF1dGhvciA9ICRtZXRhLT57J2F1dGhvcid9OwotCQlteSAlZGF0ZSA9Ci0JCQlwYXJzZV9kYXRlKCRtZXRhLT57J2F1dGhvci10aW1lJ30sICRtZXRhLT57J2F1dGhvci10eid9KTsKLQkJbXkgJGRhdGUgPSAkZGF0ZXsnaXNvLXR6J307Ci0JCWlmICgkZ3JvdXBfc2l6ZSkgewotCQkJJGN1cnJlbnRfY29sb3IgPSAoJGN1cnJlbnRfY29sb3IgKyAxKSAlICRudW1fY29sb3JzOwotCQl9Ci0JCXByaW50ICI8dHIgaWQ9XCJsJGxpbmVub1wiIGNsYXNzPVwiJHJldl9jb2xvclskY3VycmVudF9jb2xvcl1cIj5cbiI7Ci0JCWlmICgkZ3JvdXBfc2l6ZSkgewotCQkJcHJpbnQgIjx0ZCBjbGFzcz1cInNoYTFcIiI7Ci0JCQlwcmludCAiIHRpdGxlPVwiIi4gZXNjX2h0bWwoJGF1dGhvcikgLiAiLCAkZGF0ZVwiIjsKLQkJCXByaW50ICIgcm93c3Bhbj1cIiRncm91cF9zaXplXCIiIGlmICgkZ3JvdXBfc2l6ZSA+IDEpOwotCQkJcHJpbnQgIj4iOwotCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJjb21taXQiLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kZnVsbF9yZXYsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGZpbGVfbmFtZSl9LAotCQkJICAgICAgICAgICAgICBlc2NfaHRtbCgkc2hvcnRfcmV2KSk7Ci0JCQlwcmludCAiPC90ZD5cbiI7Ci0JCX0KLQkJbXkgJHBhcmVudF9jb21taXQ7Ci0JCWlmICghZXhpc3RzICRtZXRhLT57J3BhcmVudCd9KSB7Ci0JCQlvcGVuIChteSAkZGQsICItfCIsIGdpdF9jbWQoKSwgInJldi1wYXJzZSIsICIkZnVsbF9yZXZeIikKLQkJCQlvciBkaWVfZXJyb3IoNTAwLCAiT3BlbiBnaXQtcmV2LXBhcnNlIGZhaWxlZCIpOwotCQkJJHBhcmVudF9jb21taXQgPSA8JGRkPjsKLQkJCWNsb3NlICRkZDsKLQkJCWNob21wKCRwYXJlbnRfY29tbWl0KTsKLQkJCSRtZXRhLT57J3BhcmVudCd9ID0gJHBhcmVudF9jb21taXQ7Ci0JCX0gZWxzZSB7Ci0JCQkkcGFyZW50X2NvbW1pdCA9ICRtZXRhLT57J3BhcmVudCd9OwotCQl9Ci0JCW15ICRibGFtZWQgPSBocmVmKGFjdGlvbiA9PiAnYmxhbWUnLAotCQkgICAgICAgICAgICAgICAgICBmaWxlX25hbWUgPT4gJG1ldGEtPnsnZmlsZW5hbWUnfSwKLQkJICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlID0+ICRwYXJlbnRfY29tbWl0KTsKLQkJcHJpbnQgIjx0ZCBjbGFzcz1cImxpbmVuclwiPiI7Ci0JCXByaW50ICRjZ2ktPmEoeyAtaHJlZiA9PiAiJGJsYW1lZCNsJG9yaWdfbGluZW5vIiwKLQkJICAgICAgICAgICAgICAgIC1jbGFzcyA9PiAibGluZW5yIiB9LAotCQkgICAgICAgICAgICAgIGVzY19odG1sKCRsaW5lbm8pKTsKLQkJcHJpbnQgIjwvdGQ+IjsKLQkJcHJpbnQgIjx0ZCBjbGFzcz1cInByZVwiPiIgLiBlc2NfaHRtbCgkZGF0YSkgLiAiPC90ZD5cbiI7Ci0JCXByaW50ICI8L3RyPlxuIjsKKwkJCW15ICRtZXRhID0gJG1ldGFpbmZveyRmdWxsX3Jldn07CisJCQlteSAkZGF0YTsKKwkJCXdoaWxlICgkZGF0YSA9IDwkZmQ+KSB7CisJCQkJY2hvbXAgJGRhdGE7CisJCQkJbGFzdCBpZiAoJGRhdGEgPX4gcy9eXHQvLyk7ICMgY29udGVudHMgb2YgbGluZQorCQkJCWlmICgkZGF0YSA9fiAvXihcUyspKD86ICguKikpPyQvKSB7CisJCQkJCSRtZXRhLT57JDF9ID0gJDIgdW5sZXNzIGV4aXN0cyAkbWV0YS0+eyQxfTsKKwkJCQl9CisJCQkJaWYgKCRkYXRhID1+IC9ecHJldmlvdXMgLykgeworCQkJCQkkbWV0YS0+eyducHJldmlvdXMnfSsrOworCQkJCX0KKwkJCX0KKwkJCW15ICRzaG9ydF9yZXYgPSBzdWJzdHIoJGZ1bGxfcmV2LCAwLCA4KTsKKwkJCW15ICRhdXRob3IgPSAkbWV0YS0+eydhdXRob3InfTsKKwkJCW15ICVkYXRlID0KKwkJCQlwYXJzZV9kYXRlKCRtZXRhLT57J2F1dGhvci10aW1lJ30sICRtZXRhLT57J2F1dGhvci10eid9KTsKKwkJCW15ICRkYXRlID0gJGRhdGV7J2lzby10eid9OworCQkJaWYgKCRncm91cF9zaXplKSB7CisJCQkJJGN1cnJlbnRfY29sb3IgPSAoJGN1cnJlbnRfY29sb3IgKyAxKSAlICRudW1fY29sb3JzOworCQkJfQorCQkJbXkgJHRyX2NsYXNzID0gJHJldl9jb2xvclskY3VycmVudF9jb2xvcl07CisJCQkkdHJfY2xhc3MgLj0gJyBib3VuZGFyeScgaWYgKGV4aXN0cyAkbWV0YS0+eydib3VuZGFyeSd9KTsKKwkJCSR0cl9jbGFzcyAuPSAnIG5vLXByZXZpb3VzJyBpZiAoJG1ldGEtPnsnbnByZXZpb3VzJ30gPT0gMCk7CisJCQkkdHJfY2xhc3MgLj0gJyBtdWx0aXBsZS1wcmV2aW91cycgaWYgKCRtZXRhLT57J25wcmV2aW91cyd9ID4gMSk7CisJCQlwcmludCAiPHRyIGlkPVwibCRsaW5lbm9cIiBjbGFzcz1cIiR0cl9jbGFzc1wiPlxuIjsKKwkJCWlmICgkZ3JvdXBfc2l6ZSkgeworCQkJCXByaW50ICI8dGQgY2xhc3M9XCJzaGExXCIiOworCQkJCXByaW50ICIgdGl0bGU9XCIiLiBlc2NfaHRtbCgkYXV0aG9yKSAuICIsICRkYXRlXCIiOworCQkJCXByaW50ICIgcm93c3Bhbj1cIiRncm91cF9zaXplXCIiIGlmICgkZ3JvdXBfc2l6ZSA+IDEpOworCQkJCXByaW50ICI+IjsKKwkJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdCIsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kZnVsbF9yZXYsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiRmaWxlX25hbWUpfSwKKwkJCQkgICAgICAgICAgICAgIGVzY19odG1sKCRzaG9ydF9yZXYpKTsKKwkJCQlpZiAoJGdyb3VwX3NpemUgPj0gMikgeworCQkJCQlteSBAYXV0aG9yX2luaXRpYWxzID0gKCRhdXRob3IgPX4gL1xiKFtbOnVwcGVyOl1dKVxCL2cpOworCQkJCQlpZiAoQGF1dGhvcl9pbml0aWFscykgeworCQkJCQkJcHJpbnQgIjxiciAvPiIgLgorCQkJCQkJICAgICAgZXNjX2h0bWwoam9pbignJywgQGF1dGhvcl9pbml0aWFscykpOworCQkJCQkJIyAgICAgICAgICAgb3Igam9pbignLicsIC4uLikKKwkJCQkJfQorCQkJCX0KKwkJCQlwcmludCAiPC90ZD5cbiI7CisJCQl9CisJCQkjICdwcmV2aW91cycgPHNoYTEgb2YgcGFyZW50IGNvbW1pdD4gPGZpbGVuYW1lIGF0IGNvbW1pdD4KKwkJCWlmIChleGlzdHMgJG1ldGEtPnsncHJldmlvdXMnfSAmJgorCQkJICAgICRtZXRhLT57J3ByZXZpb3VzJ30gPX4gL14oW2EtZkEtRjAtOV17NDB9KSAoLiopJC8pIHsKKwkJCQkkbWV0YS0+eydwYXJlbnQnfSA9ICQxOworCQkJCSRtZXRhLT57J2ZpbGVfcGFyZW50J30gPSB1bnF1b3RlKCQyKTsKKwkJCX0KKwkJCW15ICRsaW5lbnJfY29tbWl0ID0KKwkJCQlleGlzdHMoJG1ldGEtPnsncGFyZW50J30pID8KKwkJCQkkbWV0YS0+eydwYXJlbnQnfSA6ICRmdWxsX3JldjsKKwkJCW15ICRsaW5lbnJfZmlsZW5hbWUgPQorCQkJCWV4aXN0cygkbWV0YS0+eydmaWxlX3BhcmVudCd9KSA/CisJCQkJJG1ldGEtPnsnZmlsZV9wYXJlbnQnfSA6IHVucXVvdGUoJG1ldGEtPnsnZmlsZW5hbWUnfSk7CisJCQlteSAkYmxhbWVkID0gaHJlZihhY3Rpb24gPT4gJ2JsYW1lJywKKwkJCSAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZSA9PiAkbGluZW5yX2ZpbGVuYW1lLAorCQkJICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlID0+ICRsaW5lbnJfY29tbWl0KTsKKwkJCXByaW50ICI8dGQgY2xhc3M9XCJsaW5lbnJcIj4iOworCQkJcHJpbnQgJGNnaS0+YSh7IC1ocmVmID0+ICIkYmxhbWVkI2wkb3JpZ19saW5lbm8iLAorCQkJICAgICAgICAgICAgICAgIC1jbGFzcyA9PiAibGluZW5yIiB9LAorCQkJICAgICAgICAgICAgICBlc2NfaHRtbCgkbGluZW5vKSk7CisJCQlwcmludCAiPC90ZD4iOworCQkJcHJpbnQgIjx0ZCBjbGFzcz1cInByZVwiPiIgLiBlc2NfaHRtbCgkZGF0YSkgLiAiPC90ZD5cbiI7CisJCQlwcmludCAiPC90cj5cbiI7CisJCX0gIyBlbmQgd2hpbGUKKwogCX0KLQlwcmludCAiPC90YWJsZT5cbiI7Ci0JcHJpbnQgIjwvZGl2PiI7CisKKwkjIGZvb3RlcgorCXByaW50ICI8L3Rib2R5PlxuIi4KKwkgICAgICAiPC90YWJsZT5cbiI7ICMgY2xhc3M9ImJsYW1lIgorCXByaW50ICI8L2Rpdj5cbiI7ICAgIyBjbGFzcz0iYmxhbWVfYm9keSIKIAljbG9zZSAkZmQKIAkJb3IgcHJpbnQgIlJlYWRpbmcgYmxvYiBmYWlsZWRcbiI7CiAKLQkjIHBhZ2UgZm9vdGVyCiAJZ2l0X2Zvb3Rlcl9odG1sKCk7CiB9CiAKK3N1YiBnaXRfYmxhbWUgeworCWdpdF9ibGFtZV9jb21tb24oKTsKK30KKworc3ViIGdpdF9ibGFtZV9pbmNyZW1lbnRhbCB7CisJZ2l0X2JsYW1lX2NvbW1vbignaW5jcmVtZW50YWwnKTsKK30KKworc3ViIGdpdF9ibGFtZV9kYXRhIHsKKwlnaXRfYmxhbWVfY29tbW9uKCdkYXRhJyk7Cit9CisKIHN1YiBnaXRfdGFncyB7CiAJbXkgJGhlYWQgPSBnaXRfZ2V0X2hlYWRfaGFzaCgkcHJvamVjdCk7CiAJZ2l0X2hlYWRlcl9odG1sKCk7CkBAIC00ODAzLDExICs1MzEyLDEwIEBACiAJCS1jb250ZW50X2Rpc3Bvc2l0aW9uID0+CiAJCQkoJHNhbmRib3ggPyAnYXR0YWNobWVudCcgOiAnaW5saW5lJykKIAkJCS4gJzsgZmlsZW5hbWU9IicgLiAkc2F2ZV9hcyAuICciJyk7Ci0JdW5kZWYgJC87CisJbG9jYWwgJC8gPSB1bmRlZjsKIAliaW5tb2RlIFNURE9VVCwgJzpyYXcnOwogCXByaW50IDwkZmQ+OwogCWJpbm1vZGUgU1RET1VULCAnOnV0ZjgnOyAjIGFzIHNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIGdpdHdlYi5jZ2kKLQkkLyA9ICJcbiI7CiAJY2xvc2UgJGZkOwogfQogCkBAIC00ODg3LDcgKzUzOTUsOCBAQAogCQkJY2hvbXAgJGxpbmU7CiAJCQkkbnIrKzsKIAkJCSRsaW5lID0gdW50YWJpZnkoJGxpbmUpOwotCQkJcHJpbnRmICI8ZGl2IGNsYXNzPVwicHJlXCI+PGEgaWQ9XCJsJWlcIiBocmVmPVwiI2wlaVwiIGNsYXNzPVwibGluZW5yXCI+JTRpPC9hPiAlczwvZGl2PlxuIiwKKwkJCXByaW50ZiAiPGRpdiBjbGFzcz1cInByZVwiPjxhIGlkPVwibCVpXCIgaHJlZj1cIiIgLiBocmVmKC1yZXBsYXkgPT4gMSkKKwkJCQkuICIjbCVpXCIgY2xhc3M9XCJsaW5lbnJcIj4lNGk8L2E+ICVzPC9kaXY+XG4iLAogCQkJICAgICAgICRuciwgJG5yLCAkbnIsIGVzY19odG1sKCRsaW5lLCAtbmJzcD0+MSk7CiAJCX0KIAl9CkBAIC00OTA5LDE4ICs1NDE4LDI1IEBACiAJCX0KIAl9CiAJZGllX2Vycm9yKDQwNCwgIk5vIHN1Y2ggdHJlZSIpIHVubGVzcyBkZWZpbmVkKCRoYXNoKTsKLQkkLyA9ICJcMCI7Ci0Jb3BlbiBteSAkZmQsICItfCIsIGdpdF9jbWQoKSwgImxzLXRyZWUiLCAnLXonLCAkaGFzaAotCQlvciBkaWVfZXJyb3IoNTAwLCAiT3BlbiBnaXQtbHMtdHJlZSBmYWlsZWQiKTsKLQlteSBAZW50cmllcyA9IG1hcCB7IGNob21wOyAkXyB9IDwkZmQ+OwotCWNsb3NlICRmZCBvciBkaWVfZXJyb3IoNDA0LCAiUmVhZGluZyB0cmVlIGZhaWxlZCIpOwotCSQvID0gIlxuIjsKKworCW15ICRzaG93X3NpemVzID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ3Nob3ctc2l6ZXMnKTsKKwlteSAkaGF2ZV9ibGFtZSA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdibGFtZScpOworCisJbXkgQGVudHJpZXMgPSAoKTsKKwl7CisJCWxvY2FsICQvID0gIlwwIjsKKwkJb3BlbiBteSAkZmQsICItfCIsIGdpdF9jbWQoKSwgImxzLXRyZWUiLCAnLXonLAorCQkJKCRzaG93X3NpemVzID8gJy1sJyA6ICgpKSwgQGV4dHJhX29wdGlvbnMsICRoYXNoCisJCQlvciBkaWVfZXJyb3IoNTAwLCAiT3BlbiBnaXQtbHMtdHJlZSBmYWlsZWQiKTsKKwkJQGVudHJpZXMgPSBtYXAgeyBjaG9tcDsgJF8gfSA8JGZkPjsKKwkJY2xvc2UgJGZkCisJCQlvciBkaWVfZXJyb3IoNDA0LCAiUmVhZGluZyB0cmVlIGZhaWxlZCIpOworCX0KIAogCW15ICRyZWZzID0gZ2l0X2dldF9yZWZlcmVuY2VzKCk7CiAJbXkgJHJlZiA9IGZvcm1hdF9yZWZfbWFya2VyKCRyZWZzLCAkaGFzaF9iYXNlKTsKIAlnaXRfaGVhZGVyX2h0bWwoKTsKIAlteSAkYmFzZWRpciA9ICcnOwotCW15ICRoYXZlX2JsYW1lID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ2JsYW1lJyk7CiAJaWYgKGRlZmluZWQgJGhhc2hfYmFzZSAmJiAobXkgJWNvID0gcGFyc2VfY29tbWl0KCRoYXNoX2Jhc2UpKSkgewogCQlteSBAdmlld3NfbmF2ID0gKCk7CiAJCWlmIChkZWZpbmVkICRmaWxlX25hbWUpIHsKQEAgLTQ5MzYsNyArNTQ1Miw4IEBACiAJCQkjIEZJWE1FOiBTaG91bGQgYmUgYXZhaWxhYmxlIHdoZW4gd2UgaGF2ZSBubyBoYXNoIGJhc2UgYXMgd2VsbC4KIAkJCXB1c2ggQHZpZXdzX25hdiwgJHNuYXBzaG90X2xpbmtzOwogCQl9Ci0JCWdpdF9wcmludF9wYWdlX25hdigndHJlZScsJycsICRoYXNoX2Jhc2UsIHVuZGVmLCB1bmRlZiwgam9pbignIHwgJywgQHZpZXdzX25hdikpOworCQlnaXRfcHJpbnRfcGFnZV9uYXYoJ3RyZWUnLCcnLCAkaGFzaF9iYXNlLCB1bmRlZiwgdW5kZWYsCisJCSAgICAgICAgICAgICAgICAgICBqb2luKCcgfCAnLCBAdmlld3NfbmF2KSk7CiAJCWdpdF9wcmludF9oZWFkZXJfZGl2KCdjb21taXQnLCBlc2NfaHRtbCgkY297J3RpdGxlJ30pIC4gJHJlZiwgJGhhc2hfYmFzZSk7CiAJfSBlbHNlIHsKIAkJdW5kZWYgJGhhc2hfYmFzZTsKQEAgLTQ5NjksOCArNTQ4NiwxMCBAQAogCQl1bmRlZiAkdXAgdW5sZXNzICR1cDsKIAkJIyBiYXNlZCBvbiBnaXRfcHJpbnRfdHJlZV9lbnRyeQogCQlwcmludCAnPHRkIGNsYXNzPSJtb2RlIj4nIC4gbW9kZV9zdHIoJzA0MDAwMCcpIC4gIjwvdGQ+XG4iOworCQlwcmludCAnPHRkIGNsYXNzPSJzaXplIj4mbmJzcDs8L3RkPicuIlxuIiBpZiAkc2hvd19zaXplczsKIAkJcHJpbnQgJzx0ZCBjbGFzcz0ibGlzdCI+JzsKLQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJ0cmVlIiwgaGFzaF9iYXNlPT4kaGFzaF9iYXNlLAorCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InRyZWUiLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JGhhc2hfYmFzZSwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiR1cCl9LAogCQkgICAgICAgICAgICAgICIuLiIpOwogCQlwcmludCAiPC90ZD5cbiI7CkBAIC00OTc5LDcgKzU0OTgsNyBAQAogCQlwcmludCAiPC90cj5cbiI7CiAJfQogCWZvcmVhY2ggbXkgJGxpbmUgKEBlbnRyaWVzKSB7Ci0JCW15ICV0ID0gcGFyc2VfbHNfdHJlZV9saW5lKCRsaW5lLCAteiA9PiAxKTsKKwkJbXkgJXQgPSBwYXJzZV9sc190cmVlX2xpbmUoJGxpbmUsIC16ID0+IDEsIC1sID0+ICRzaG93X3NpemVzKTsKIAogCQlpZiAoJGFsdGVybmF0ZSkgewogCQkJcHJpbnQgIjx0ciBjbGFzcz1cImRhcmtcIj5cbiI7CkBAIC00OTk3LDYgKzU1MTYsNDMgQEAKIAlnaXRfZm9vdGVyX2h0bWwoKTsKIH0KIAorc3ViIHNuYXBzaG90X25hbWUgeworCW15ICgkcHJvamVjdCwgJGhhc2gpID0gQF87CisKKwkjIHBhdGgvdG8vcHJvamVjdC5naXQgIC0+IHByb2plY3QKKwkjIHBhdGgvdG8vcHJvamVjdC8uZ2l0IC0+IHByb2plY3QKKwlteSAkbmFtZSA9IHRvX3V0ZjgoJHByb2plY3QpOworCSRuYW1lID1+IHMsKFteL10pLypcLmdpdCQsJDEsOworCSRuYW1lID0gYmFzZW5hbWUoJG5hbWUpOworCSMgc2FuaXRpemUgbmFtZQorCSRuYW1lID1+IHMvW1s6Y250cmw6XV0vPy9nOworCisJbXkgJHZlciA9ICRoYXNoOworCWlmICgkaGFzaCA9fiAvXlswLTlhLWZBLUZdKyQvKSB7CisJCSMgc2hvcnRlbiBTSEEtMSBoYXNoCisJCW15ICRmdWxsX2hhc2ggPSBnaXRfZ2V0X2Z1bGxfaGFzaCgkcHJvamVjdCwgJGhhc2gpOworCQlpZiAoJGZ1bGxfaGFzaCA9fiAvXiRoYXNoLyAmJiBsZW5ndGgoJGhhc2gpID4gNykgeworCQkJJHZlciA9IGdpdF9nZXRfc2hvcnRfaGFzaCgkcHJvamVjdCwgJGhhc2gpOworCQl9CisJfSBlbHNpZiAoJGhhc2ggPX4gbSFecmVmcy90YWdzLyguKikkISkgeworCQkjIHRhZ3MgZG9uJ3QgbmVlZCBzaG9ydGVuZWQgU0hBLTEgaGFzaAorCQkkdmVyID0gJDE7CisJfSBlbHNlIHsKKwkJIyBicmFuY2hlcyBhbmQgb3RoZXIgbmVlZCBzaG9ydGVuZWQgU0hBLTEgaGFzaAorCQlpZiAoJGhhc2ggPX4gbSFecmVmcy8oPzpoZWFkc3xyZW1vdGVzKS8oLiopJCEpIHsKKwkJCSR2ZXIgPSAkMTsKKwkJfQorCQkkdmVyIC49ICctJyAuIGdpdF9nZXRfc2hvcnRfaGFzaCgkcHJvamVjdCwgJGhhc2gpOworCX0KKwkjIGluIGNhc2Ugb2YgaGllcmFyY2hpY2FsIGJyYW5jaCBuYW1lcworCSR2ZXIgPX4gcyEvIS4hZzsKKworCSMgbmFtZSA9IHByb2plY3QtdmVyc2lvbl9zdHJpbmcKKwkkbmFtZSA9ICIkbmFtZS0kdmVyIjsKKworCXJldHVybiB3YW50YXJyYXkgPyAoJG5hbWUsICRuYW1lKSA6ICRuYW1lOworfQorCiBzdWIgZ2l0X3NuYXBzaG90IHsKIAlteSAkZm9ybWF0ID0gJGlucHV0X3BhcmFtc3snc25hcHNob3RfZm9ybWF0J307CiAJaWYgKCFAc25hcHNob3RfZm10cykgewpAQCAtNTAwOCwzMiArNTU2NCwzMyBAQAogCQlkaWVfZXJyb3IoNDAwLCAiSW52YWxpZCBzbmFwc2hvdCBmb3JtYXQgcGFyYW1ldGVyIik7CiAJfSBlbHNpZiAoIWV4aXN0cygka25vd25fc25hcHNob3RfZm9ybWF0c3skZm9ybWF0fSkpIHsKIAkJZGllX2Vycm9yKDQwMCwgIlVua25vd24gc25hcHNob3QgZm9ybWF0Iik7CisJfSBlbHNpZiAoJGtub3duX3NuYXBzaG90X2Zvcm1hdHN7JGZvcm1hdH17J2Rpc2FibGVkJ30pIHsKKwkJZGllX2Vycm9yKDQwMywgIlNuYXBzaG90IGZvcm1hdCBub3QgYWxsb3dlZCIpOwogCX0gZWxzaWYgKCFncmVwKCRfIGVxICRmb3JtYXQsIEBzbmFwc2hvdF9mbXRzKSkgewogCQlkaWVfZXJyb3IoNDAzLCAiVW5zdXBwb3J0ZWQgc25hcHNob3QgZm9ybWF0Iik7CiAJfQogCi0JaWYgKCFkZWZpbmVkICRoYXNoKSB7Ci0JCSRoYXNoID0gZ2l0X2dldF9oZWFkX2hhc2goJHByb2plY3QpOworCW15ICR0eXBlID0gZ2l0X2dldF90eXBlKCIkaGFzaF57fSIpOworCWlmICghJHR5cGUpIHsKKwkJZGllX2Vycm9yKDQwNCwgJ09iamVjdCBkb2VzIG5vdCBleGlzdCcpOworCX0gIGVsc2lmICgkdHlwZSBlcSAnYmxvYicpIHsKKwkJZGllX2Vycm9yKDQwMCwgJ09iamVjdCBpcyBub3QgYSB0cmVlLWlzaCcpOwogCX0KIAotCW15ICRuYW1lID0gJHByb2plY3Q7Ci0JJG5hbWUgPX4gcywoW14vXSkvKlwuZ2l0JCwkMSw7Ci0JJG5hbWUgPSBiYXNlbmFtZSgkbmFtZSk7Ci0JbXkgJGZpbGVuYW1lID0gdG9fdXRmOCgkbmFtZSk7Ci0JJG5hbWUgPX4gcy9cMDQ3L1wwNDdcXFwwNDdcMDQ3L2c7Ci0JbXkgJGNtZDsKLQkkZmlsZW5hbWUgLj0gIi0kaGFzaCRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyRmb3JtYXR9eydzdWZmaXgnfSI7Ci0JJGNtZCA9IHF1b3RlX2NvbW1hbmQoCisJbXkgKCRuYW1lLCAkcHJlZml4KSA9IHNuYXBzaG90X25hbWUoJHByb2plY3QsICRoYXNoKTsKKwlteSAkZmlsZW5hbWUgPSAiJG5hbWUka25vd25fc25hcHNob3RfZm9ybWF0c3skZm9ybWF0fXsnc3VmZml4J30iOworCW15ICRjbWQgPSBxdW90ZV9jb21tYW5kKAogCQlnaXRfY21kKCksICdhcmNoaXZlJywKIAkJIi0tZm9ybWF0PSRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyRmb3JtYXR9eydmb3JtYXQnfSIsCi0JCSItLXByZWZpeD0kbmFtZS8iLCAkaGFzaCk7CisJCSItLXByZWZpeD0kcHJlZml4LyIsICRoYXNoKTsKIAlpZiAoZXhpc3RzICRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyRmb3JtYXR9eydjb21wcmVzc29yJ30pIHsKIAkJJGNtZCAuPSAnIHwgJyAuIHF1b3RlX2NvbW1hbmQoQHska25vd25fc25hcHNob3RfZm9ybWF0c3skZm9ybWF0fXsnY29tcHJlc3Nvcid9fSk7CiAJfQogCisJJGZpbGVuYW1lID1+IHMvKFsiXFxdKS9cXCQxL2c7CiAJcHJpbnQgJGNnaS0+aGVhZGVyKAogCQktdHlwZSA9PiAka25vd25fc25hcHNob3RfZm9ybWF0c3skZm9ybWF0fXsndHlwZSd9LAotCQktY29udGVudF9kaXNwb3NpdGlvbiA9PiAnaW5saW5lOyBmaWxlbmFtZT0iJyAuICIkZmlsZW5hbWUiIC4gJyInLAorCQktY29udGVudF9kaXNwb3NpdGlvbiA9PiAnaW5saW5lOyBmaWxlbmFtZT0iJyAuICRmaWxlbmFtZSAuICciJywKIAkJLXN0YXR1cyA9PiAnMjAwIE9LJyk7CiAKIAlvcGVuIG15ICRmZCwgIi18IiwgJGNtZApAQCAtNTA0NCwyMiArNTYwMSw1NyBAQAogCWNsb3NlICRmZDsKIH0KIAotc3ViIGdpdF9sb2cgeworc3ViIGdpdF9sb2dfZ2VuZXJpYyB7CisJbXkgKCRmbXRfbmFtZSwgJGJvZHlfc3ViciwgJGJhc2UsICRwYXJlbnQsICRmaWxlX25hbWUsICRmaWxlX2hhc2gpID0gQF87CisKIAlteSAkaGVhZCA9IGdpdF9nZXRfaGVhZF9oYXNoKCRwcm9qZWN0KTsKLQlpZiAoIWRlZmluZWQgJGhhc2gpIHsKLQkJJGhhc2ggPSAkaGVhZDsKKwlpZiAoIWRlZmluZWQgJGJhc2UpIHsKKwkJJGJhc2UgPSAkaGVhZDsKIAl9CiAJaWYgKCFkZWZpbmVkICRwYWdlKSB7CiAJCSRwYWdlID0gMDsKIAl9CiAJbXkgJHJlZnMgPSBnaXRfZ2V0X3JlZmVyZW5jZXMoKTsKIAotCW15IEBjb21taXRsaXN0ID0gcGFyc2VfY29tbWl0cygkaGFzaCwgMTAxLCAoMTAwICogJHBhZ2UpKTsKKwlteSAkY29tbWl0X2hhc2ggPSAkYmFzZTsKKwlpZiAoZGVmaW5lZCAkcGFyZW50KSB7CisJCSRjb21taXRfaGFzaCA9ICIkcGFyZW50Li4kYmFzZSI7CisJfQorCW15IEBjb21taXRsaXN0ID0KKwkJcGFyc2VfY29tbWl0cygkY29tbWl0X2hhc2gsIDEwMSwgKDEwMCAqICRwYWdlKSwKKwkJICAgICAgICAgICAgICBkZWZpbmVkICRmaWxlX25hbWUgPyAoJGZpbGVfbmFtZSwgIi0tZnVsbC1oaXN0b3J5IikgOiAoKSk7CiAKLQlteSAkcGFnaW5nX25hdiA9IGZvcm1hdF9wYWdpbmdfbmF2KCdsb2cnLCAkaGFzaCwgJGhlYWQsICRwYWdlLCAkI2NvbW1pdGxpc3QgPj0gMTAwKTsKKwlteSAkZnR5cGU7CisJaWYgKCFkZWZpbmVkICRmaWxlX2hhc2ggJiYgZGVmaW5lZCAkZmlsZV9uYW1lKSB7CisJCSMgc29tZSBjb21taXRzIGNvdWxkIGhhdmUgZGVsZXRlZCBmaWxlIGluIHF1ZXN0aW9uLAorCQkjIGFuZCBub3QgaGF2ZSBpdCBpbiB0cmVlLCBidXQgb25lIG9mIHRoZW0gaGFzIHRvIGhhdmUgaXQKKwkJZm9yIChteSAkaSA9IDA7ICRpIDwgQGNvbW1pdGxpc3Q7ICRpKyspIHsKKwkJCSRmaWxlX2hhc2ggPSBnaXRfZ2V0X2hhc2hfYnlfcGF0aCgkY29tbWl0bGlzdFskaV17J2lkJ30sICRmaWxlX25hbWUpOworCQkJbGFzdCBpZiBkZWZpbmVkICRmaWxlX2hhc2g7CisJCX0KKwl9CisJaWYgKGRlZmluZWQgJGZpbGVfaGFzaCkgeworCQkkZnR5cGUgPSBnaXRfZ2V0X3R5cGUoJGZpbGVfaGFzaCk7CisJfQorCWlmIChkZWZpbmVkICRmaWxlX25hbWUgJiYgIWRlZmluZWQgJGZ0eXBlKSB7CisJCWRpZV9lcnJvcig1MDAsICJVbmtub3duIHR5cGUgb2Ygb2JqZWN0Iik7CisJfQorCW15ICVjbzsKKwlpZiAoZGVmaW5lZCAkZmlsZV9uYW1lKSB7CisJCSVjbyA9IHBhcnNlX2NvbW1pdCgkYmFzZSkKKwkJCW9yIGRpZV9lcnJvcig0MDQsICJVbmtub3duIGNvbW1pdCBvYmplY3QiKTsKKwl9CiAKLQlteSAoJHBhdGNoX21heCkgPSBnaXR3ZWJfZ2V0X2ZlYXR1cmUoJ3BhdGNoZXMnKTsKLQlpZiAoJHBhdGNoX21heCkgeworCisJbXkgJHBhZ2luZ19uYXYgPSBmb3JtYXRfcGFnaW5nX25hdigkZm10X25hbWUsICRwYWdlLCAkI2NvbW1pdGxpc3QgPj0gMTAwKTsKKwlteSAkbmV4dF9saW5rID0gJyc7CisJaWYgKCQjY29tbWl0bGlzdCA+PSAxMDApIHsKKwkJJG5leHRfbGluayA9CisJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1yZXBsYXk9PjEsIHBhZ2U9PiRwYWdlKzEpLAorCQkJICAgICAgICAgLWFjY2Vzc2tleSA9PiAibiIsIC10aXRsZSA9PiAiQWx0LW4ifSwgIm5leHQiKTsKKwl9CisJbXkgJHBhdGNoX21heCA9IGdpdHdlYl9nZXRfZmVhdHVyZSgncGF0Y2hlcycpOworCWlmICgkcGF0Y2hfbWF4ICYmICFkZWZpbmVkICRmaWxlX25hbWUpIHsKIAkJaWYgKCRwYXRjaF9tYXggPCAwIHx8IEBjb21taXRsaXN0IDw9ICRwYXRjaF9tYXgpIHsKIAkJCSRwYWdpbmdfbmF2IC49ICIgJnNkb3Q7ICIgLgogCQkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4icGF0Y2hlcyIsIC1yZXBsYXk9PjEpfSwKQEAgLTUwNjgsNTYgKzU2NjAsMzAgQEAKIAl9CiAKIAlnaXRfaGVhZGVyX2h0bWwoKTsKLQlnaXRfcHJpbnRfcGFnZV9uYXYoJ2xvZycsJycsICRoYXNoLHVuZGVmLHVuZGVmLCAkcGFnaW5nX25hdik7Ci0KLQlpZiAoIUBjb21taXRsaXN0KSB7Ci0JCW15ICVjbyA9IHBhcnNlX2NvbW1pdCgkaGFzaCk7Ci0KLQkJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ3N1bW1hcnknLCAkcHJvamVjdCk7Ci0JCXByaW50ICI8ZGl2IGNsYXNzPVwicGFnZV9ib2R5XCI+IExhc3QgY2hhbmdlICRjb3snYWdlX3N0cmluZyd9Ljxici8+PGJyLz48L2Rpdj5cbiI7CisJZ2l0X3ByaW50X3BhZ2VfbmF2KCRmbXRfbmFtZSwnJywgJGhhc2gsJGhhc2gsJGhhc2gsICRwYWdpbmdfbmF2KTsKKwlpZiAoZGVmaW5lZCAkZmlsZV9uYW1lKSB7CisJCWdpdF9wcmludF9oZWFkZXJfZGl2KCdjb21taXQnLCBlc2NfaHRtbCgkY297J3RpdGxlJ30pLCAkYmFzZSk7CisJfSBlbHNlIHsKKwkJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ3N1bW1hcnknLCAkcHJvamVjdCkKIAl9Ci0JbXkgJHRvID0gKCQjY29tbWl0bGlzdCA+PSA5OSkgPyAoOTkpIDogKCQjY29tbWl0bGlzdCk7Ci0JZm9yIChteSAkaSA9IDA7ICRpIDw9ICR0bzsgJGkrKykgewotCQlteSAlY28gPSAleyRjb21taXRsaXN0WyRpXX07Ci0JCW5leHQgaWYgISVjbzsKLQkJbXkgJGNvbW1pdCA9ICRjb3snaWQnfTsKLQkJbXkgJHJlZiA9IGZvcm1hdF9yZWZfbWFya2VyKCRyZWZzLCAkY29tbWl0KTsKLQkJbXkgJWFkID0gcGFyc2VfZGF0ZSgkY297J2F1dGhvcl9lcG9jaCd9KTsKLQkJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ2NvbW1pdCcsCi0JCSAgICAgICAgICAgICAgICI8c3BhbiBjbGFzcz1cImFnZVwiPiRjb3snYWdlX3N0cmluZyd9PC9zcGFuPiIgLgotCQkgICAgICAgICAgICAgICBlc2NfaHRtbCgkY297J3RpdGxlJ30pIC4gJHJlZiwKLQkJICAgICAgICAgICAgICAgJGNvbW1pdCk7Ci0JCXByaW50ICI8ZGl2IGNsYXNzPVwidGl0bGVfdGV4dFwiPlxuIiAuCi0JCSAgICAgICI8ZGl2IGNsYXNzPVwibG9nX2xpbmtcIj5cbiIgLgotCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdCIsIGhhc2g9PiRjb21taXQpfSwgImNvbW1pdCIpIC4KLQkJICAgICAgIiB8ICIgLgotCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdGRpZmYiLCBoYXNoPT4kY29tbWl0KX0sICJjb21taXRkaWZmIikgLgotCQkgICAgICAiIHwgIiAuCi0JCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4idHJlZSIsIGhhc2g9PiRjb21taXQsIGhhc2hfYmFzZT0+JGNvbW1pdCl9LCAidHJlZSIpIC4KLQkJICAgICAgIjxici8+XG4iIC4KLQkJICAgICAgIjwvZGl2PlxuIiAuCi0JCSAgICAgICI8aT4iIC4gZXNjX2h0bWwoJGNveydhdXRob3JfbmFtZSd9KSAuICAiIFskYWR7J3JmYzI4MjInfV08L2k+PGJyLz5cbiIgLgotCQkgICAgICAiPC9kaXY+XG4iOworCWdpdF9wcmludF9wYWdlX3BhdGgoJGZpbGVfbmFtZSwgJGZ0eXBlLCAkaGFzaF9iYXNlKQorCQlpZiAoZGVmaW5lZCAkZmlsZV9uYW1lKTsKIAotCQlwcmludCAiPGRpdiBjbGFzcz1cImxvZ19ib2R5XCI+XG4iOwotCQlnaXRfcHJpbnRfbG9nKCRjb3snY29tbWVudCd9LCAtZmluYWxfZW1wdHlfbGluZT0+IDEpOwotCQlwcmludCAiPC9kaXY+XG4iOwotCX0KLQlpZiAoJCNjb21taXRsaXN0ID49IDEwMCkgewotCQlwcmludCAiPGRpdiBjbGFzcz1cInBhZ2VfbmF2XCI+XG4iOwotCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1yZXBsYXk9PjEsIHBhZ2U9PiRwYWdlKzEpLAotCQkJICAgICAgIC1hY2Nlc3NrZXkgPT4gIm4iLCAtdGl0bGUgPT4gIkFsdC1uIn0sICJuZXh0Iik7Ci0JCXByaW50ICI8L2Rpdj5cbiI7Ci0JfQorCSRib2R5X3N1YnItPihcQGNvbW1pdGxpc3QsIDAsIDk5LCAkcmVmcywgJG5leHRfbGluaywKKwkgICAgICAgICAgICAgJGZpbGVfbmFtZSwgJGZpbGVfaGFzaCwgJGZ0eXBlKTsKKwogCWdpdF9mb290ZXJfaHRtbCgpOwogfQogCitzdWIgZ2l0X2xvZyB7CisJZ2l0X2xvZ19nZW5lcmljKCdsb2cnLCBcJmdpdF9sb2dfYm9keSwKKwkgICAgICAgICAgICAgICAgJGhhc2gsICRoYXNoX3BhcmVudCk7Cit9CisKIHN1YiBnaXRfY29tbWl0IHsKIAkkaGFzaCB8fD0gJGhhc2hfYmFzZSB8fCAiSEVBRCI7CiAJbXkgJWNvID0gcGFyc2VfY29tbWl0KCRoYXNoKQogCSAgICBvciBkaWVfZXJyb3IoNDA0LCAiVW5rbm93biBjb21taXQgb2JqZWN0Iik7Ci0JbXkgJWFkID0gcGFyc2VfZGF0ZSgkY297J2F1dGhvcl9lcG9jaCd9LCAkY297J2F1dGhvcl90eid9KTsKLQlteSAlY2QgPSBwYXJzZV9kYXRlKCRjb3snY29tbWl0dGVyX2Vwb2NoJ30sICRjb3snY29tbWl0dGVyX3R6J30pOwogCiAJbXkgJHBhcmVudCAgPSAkY297J3BhcmVudCd9OwogCW15ICRwYXJlbnRzID0gJGNveydwYXJlbnRzJ307ICMgbGlzdHJlZgpAQCAtNTE0Niw3ICs1NzEyLDcgQEAKIAkJCX0gQCRwYXJlbnRzICkgLgogCQkJJyknOwogCX0KLQlpZiAoZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ3BhdGNoZXMnKSkgeworCWlmIChnaXR3ZWJfY2hlY2tfZmVhdHVyZSgncGF0Y2hlcycpICYmIEAkcGFyZW50cyA8PSAxKSB7CiAJCSRmb3JtYXRzX25hdiAuPSAiIHwgIiAuCiAJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InBhdGNoIiwgLXJlcGxheT0+MSl9LAogCQkJCSJwYXRjaCIpOwpAQCAtNTE4NCwyMiArNTc1MCw3IEBACiAJfQogCXByaW50ICI8ZGl2IGNsYXNzPVwidGl0bGVfdGV4dFwiPlxuIiAuCiAJICAgICAgIjx0YWJsZSBjbGFzcz1cIm9iamVjdF9oZWFkZXJcIj5cbiI7Ci0JcHJpbnQgIjx0cj48dGQ+YXV0aG9yPC90ZD48dGQ+IiAuIGVzY19odG1sKCRjb3snYXV0aG9yJ30pIC4gIjwvdGQ+PC90cj5cbiIuCi0JICAgICAgIjx0cj4iIC4KLQkgICAgICAiPHRkPjwvdGQ+PHRkPiAkYWR7J3JmYzI4MjInfSI7Ci0JaWYgKCRhZHsnaG91cl9sb2NhbCd9IDwgNikgewotCQlwcmludGYoIiAoPHNwYW4gY2xhc3M9XCJhdG5pZ2h0XCI+JTAyZDolMDJkPC9zcGFuPiAlcykiLAotCQkgICAgICAgJGFkeydob3VyX2xvY2FsJ30sICRhZHsnbWludXRlX2xvY2FsJ30sICRhZHsndHpfbG9jYWwnfSk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRmKCIgKCUwMmQ6JTAyZCAlcykiLAotCQkgICAgICAgJGFkeydob3VyX2xvY2FsJ30sICRhZHsnbWludXRlX2xvY2FsJ30sICRhZHsndHpfbG9jYWwnfSk7Ci0JfQotCXByaW50ICI8L3RkPiIgLgotCSAgICAgICI8L3RyPlxuIjsKLQlwcmludCAiPHRyPjx0ZD5jb21taXR0ZXI8L3RkPjx0ZD4iIC4gZXNjX2h0bWwoJGNveydjb21taXR0ZXInfSkgLiAiPC90ZD48L3RyPlxuIjsKLQlwcmludCAiPHRyPjx0ZD48L3RkPjx0ZD4gJGNkeydyZmMyODIyJ30iIC4KLQkgICAgICBzcHJpbnRmKCIgKCUwMmQ6JTAyZCAlcykiLCAkY2R7J2hvdXJfbG9jYWwnfSwgJGNkeydtaW51dGVfbG9jYWwnfSwgJGNkeyd0el9sb2NhbCd9KSAuCi0JICAgICAgIjwvdGQ+PC90cj5cbiI7CisJZ2l0X3ByaW50X2F1dGhvcnNoaXBfcm93cyhcJWNvKTsKIAlwcmludCAiPHRyPjx0ZD5jb21taXQ8L3RkPjx0ZCBjbGFzcz1cInNoYTFcIj4kY297J2lkJ308L3RkPjwvdHI+XG4iOwogCXByaW50ICI8dHI+IiAuCiAJICAgICAgIjx0ZD50cmVlPC90ZD4iIC4KQEAgLTU0NDksNyArNjAwMCw3IEBACiAJCSRmb3JtYXRzX25hdiA9CiAJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdGRpZmZfcGxhaW4iLCAtcmVwbGF5PT4xKX0sCiAJCQkgICAgICAgICJyYXciKTsKLQkJaWYgKCRwYXRjaF9tYXgpIHsKKwkJaWYgKCRwYXRjaF9tYXggJiYgQHskY297J3BhcmVudHMnfX0gPD0gMSkgewogCQkJJGZvcm1hdHNfbmF2IC49ICIgfCAiIC4KIAkJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InBhdGNoIiwgLXJlcGxheT0+MSl9LAogCQkJCQkicGF0Y2giKTsKQEAgLTU1ODAsNyArNjEzMSwxMSBAQAogCQlnaXRfaGVhZGVyX2h0bWwodW5kZWYsICRleHBpcmVzKTsKIAkJZ2l0X3ByaW50X3BhZ2VfbmF2KCdjb21taXRkaWZmJywnJywgJGhhc2gsJGNveyd0cmVlJ30sJGhhc2gsICRmb3JtYXRzX25hdik7CiAJCWdpdF9wcmludF9oZWFkZXJfZGl2KCdjb21taXQnLCBlc2NfaHRtbCgkY297J3RpdGxlJ30pIC4gJHJlZiwgJGhhc2gpOwotCQlnaXRfcHJpbnRfYXV0aG9yc2hpcChcJWNvKTsKKwkJcHJpbnQgIjxkaXYgY2xhc3M9XCJ0aXRsZV90ZXh0XCI+XG4iIC4KKwkJICAgICAgIjx0YWJsZSBjbGFzcz1cIm9iamVjdF9oZWFkZXJcIj5cbiI7CisJCWdpdF9wcmludF9hdXRob3JzaGlwX3Jvd3MoXCVjbyk7CisJCXByaW50ICI8L3RhYmxlPiIuCisJCSAgICAgICI8L2Rpdj5cbiI7CiAJCXByaW50ICI8ZGl2IGNsYXNzPVwicGFnZV9ib2R5XCI+XG4iOwogCQlpZiAoQHskY297J2NvbW1lbnQnfX0gPiAxKSB7CiAJCQlwcmludCAiPGRpdiBjbGFzcz1cImxvZ1wiPlxuIjsKQEAgLTU2NTMsNyArNjIwOCw3IEBACiAKICMgZm9ybWF0LXBhdGNoLXN0eWxlIHBhdGNoZXMKIHN1YiBnaXRfcGF0Y2ggewotCWdpdF9jb21taXRkaWZmKC1mb3JtYXQgPT4gJ3BhdGNoJywgLXNpbmdsZT0+IDEpOworCWdpdF9jb21taXRkaWZmKC1mb3JtYXQgPT4gJ3BhdGNoJywgLXNpbmdsZSA9PiAxKTsKIH0KIAogc3ViIGdpdF9wYXRjaGVzIHsKQEAgLTU2NjEsNzAgKzYyMTYsOSBAQAogfQogCiBzdWIgZ2l0X2hpc3RvcnkgewotCWlmICghZGVmaW5lZCAkaGFzaF9iYXNlKSB7Ci0JCSRoYXNoX2Jhc2UgPSBnaXRfZ2V0X2hlYWRfaGFzaCgkcHJvamVjdCk7Ci0JfQotCWlmICghZGVmaW5lZCAkcGFnZSkgewotCQkkcGFnZSA9IDA7Ci0JfQotCW15ICRmdHlwZTsKLQlteSAlY28gPSBwYXJzZV9jb21taXQoJGhhc2hfYmFzZSkKLQkgICAgb3IgZGllX2Vycm9yKDQwNCwgIlVua25vd24gY29tbWl0IG9iamVjdCIpOwotCi0JbXkgJHJlZnMgPSBnaXRfZ2V0X3JlZmVyZW5jZXMoKTsKLQlteSAkbGltaXQgPSBzcHJpbnRmKCItLW1heC1jb3VudD0laSIsICgxMDAgKiAoJHBhZ2UrMSkpKTsKLQotCW15IEBjb21taXRsaXN0ID0gcGFyc2VfY29tbWl0cygkaGFzaF9iYXNlLCAxMDEsICgxMDAgKiAkcGFnZSksCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaWxlX25hbWUsICItLWZ1bGwtaGlzdG9yeSIpCi0JICAgIG9yIGRpZV9lcnJvcig0MDQsICJObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IG9uIGdpdmVuIGJyYW5jaCIpOwotCi0JaWYgKCFkZWZpbmVkICRoYXNoICYmIGRlZmluZWQgJGZpbGVfbmFtZSkgewotCQkjIHNvbWUgY29tbWl0cyBjb3VsZCBoYXZlIGRlbGV0ZWQgZmlsZSBpbiBxdWVzdGlvbiwKLQkJIyBhbmQgbm90IGhhdmUgaXQgaW4gdHJlZSwgYnV0IG9uZSBvZiB0aGVtIGhhcyB0byBoYXZlIGl0Ci0JCWZvciAobXkgJGkgPSAwOyAkaSA8PSBAY29tbWl0bGlzdDsgJGkrKykgewotCQkJJGhhc2ggPSBnaXRfZ2V0X2hhc2hfYnlfcGF0aCgkY29tbWl0bGlzdFskaV17J2lkJ30sICRmaWxlX25hbWUpOwotCQkJbGFzdCBpZiBkZWZpbmVkICRoYXNoOwotCQl9Ci0JfQotCWlmIChkZWZpbmVkICRoYXNoKSB7Ci0JCSRmdHlwZSA9IGdpdF9nZXRfdHlwZSgkaGFzaCk7Ci0JfQotCWlmICghZGVmaW5lZCAkZnR5cGUpIHsKLQkJZGllX2Vycm9yKDUwMCwgIlVua25vd24gdHlwZSBvZiBvYmplY3QiKTsKLQl9Ci0KLQlteSAkcGFnaW5nX25hdiA9ICcnOwotCWlmICgkcGFnZSA+IDApIHsKLQkJJHBhZ2luZ19uYXYgLj0KLQkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iaGlzdG9yeSIsIGhhc2g9PiRoYXNoLCBoYXNoX2Jhc2U9PiRoYXNoX2Jhc2UsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGZpbGVfbmFtZSl9LAotCQkJICAgICAgICAiZmlyc3QiKTsKLQkJJHBhZ2luZ19uYXYgLj0gIiAmc2RvdDsgIiAuCi0JCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1yZXBsYXk9PjEsIHBhZ2U9PiRwYWdlLTEpLAotCQkJICAgICAgICAgLWFjY2Vzc2tleSA9PiAicCIsIC10aXRsZSA9PiAiQWx0LXAifSwgInByZXYiKTsKLQl9IGVsc2UgewotCQkkcGFnaW5nX25hdiAuPSAiZmlyc3QiOwotCQkkcGFnaW5nX25hdiAuPSAiICZzZG90OyBwcmV2IjsKLQl9Ci0JbXkgJG5leHRfbGluayA9ICcnOwotCWlmICgkI2NvbW1pdGxpc3QgPj0gMTAwKSB7Ci0JCSRuZXh0X2xpbmsgPQotCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZigtcmVwbGF5PT4xLCBwYWdlPT4kcGFnZSsxKSwKLQkJCSAgICAgICAgIC1hY2Nlc3NrZXkgPT4gIm4iLCAtdGl0bGUgPT4gIkFsdC1uIn0sICJuZXh0Iik7Ci0JCSRwYWdpbmdfbmF2IC49ICIgJnNkb3Q7ICRuZXh0X2xpbmsiOwotCX0gZWxzZSB7Ci0JCSRwYWdpbmdfbmF2IC49ICIgJnNkb3Q7IG5leHQiOwotCX0KLQotCWdpdF9oZWFkZXJfaHRtbCgpOwotCWdpdF9wcmludF9wYWdlX25hdignaGlzdG9yeScsJycsICRoYXNoX2Jhc2UsJGNveyd0cmVlJ30sJGhhc2hfYmFzZSwgJHBhZ2luZ19uYXYpOwotCWdpdF9wcmludF9oZWFkZXJfZGl2KCdjb21taXQnLCBlc2NfaHRtbCgkY297J3RpdGxlJ30pLCAkaGFzaF9iYXNlKTsKLQlnaXRfcHJpbnRfcGFnZV9wYXRoKCRmaWxlX25hbWUsICRmdHlwZSwgJGhhc2hfYmFzZSk7Ci0KLQlnaXRfaGlzdG9yeV9ib2R5KFxAY29tbWl0bGlzdCwgMCwgOTksCi0JICAgICAgICAgICAgICAgICAkcmVmcywgJGhhc2hfYmFzZSwgJGZ0eXBlLCAkbmV4dF9saW5rKTsKLQotCWdpdF9mb290ZXJfaHRtbCgpOworCWdpdF9sb2dfZ2VuZXJpYygnaGlzdG9yeScsIFwmZ2l0X2hpc3RvcnlfYm9keSwKKwkgICAgICAgICAgICAgICAgJGhhc2hfYmFzZSwgJGhhc2hfcGFyZW50X2Jhc2UsCisJICAgICAgICAgICAgICAgICRmaWxlX25hbWUsICRoYXNoKTsKIH0KIAogc3ViIGdpdF9zZWFyY2ggewpAQCAtNTgwOSw3ICs2MzAzLDcgQEAKIAogCQlwcmludCAiPHRhYmxlIGNsYXNzPVwicGlja2F4ZSBzZWFyY2hcIj5cbiI7CiAJCW15ICRhbHRlcm5hdGUgPSAxOwotCQkkLyA9ICJcbiI7CisJCWxvY2FsICQvID0gIlxuIjsKIAkJb3BlbiBteSAkZmQsICctfCcsIGdpdF9jbWQoKSwgJy0tbm8tcGFnZXInLCAnbG9nJywgQGRpZmZfb3B0cywKIAkJCSctLXByZXR0eT1mb3JtYXQ6JUgnLCAnLS1uby1hYmJyZXYnLCAnLS1yYXcnLCAiLVMkc2VhcmNodGV4dCIsCiAJCQkoJHNlYXJjaF91c2VfcmVnZXhwID8gJy0tcGlja2F4ZS1yZWdleCcgOiAoKSk7CkBAIC01ODc5LDcgKzYzNzMsNyBAQAogCQlwcmludCAiPHRhYmxlIGNsYXNzPVwiZ3JlcF9zZWFyY2hcIj5cbiI7CiAJCW15ICRhbHRlcm5hdGUgPSAxOwogCQlteSAkbWF0Y2hlcyA9IDA7Ci0JCSQvID0gIlxuIjsKKwkJbG9jYWwgJC8gPSAiXG4iOwogCQlvcGVuIG15ICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAnZ3JlcCcsICctbicsCiAJCQkkc2VhcmNoX3VzZV9yZWdleHAgPyAoJy1FJywgJy1pJykgOiAnLUYnLAogCQkJJHNlYXJjaHRleHQsICRjb3sndHJlZSd9OwpAQCAtNTk4OCw0NCArNjQ4Miw4IEBACiB9CiAKIHN1YiBnaXRfc2hvcnRsb2cgewotCW15ICRoZWFkID0gZ2l0X2dldF9oZWFkX2hhc2goJHByb2plY3QpOwotCWlmICghZGVmaW5lZCAkaGFzaCkgewotCQkkaGFzaCA9ICRoZWFkOwotCX0KLQlpZiAoIWRlZmluZWQgJHBhZ2UpIHsKLQkJJHBhZ2UgPSAwOwotCX0KLQlteSAkcmVmcyA9IGdpdF9nZXRfcmVmZXJlbmNlcygpOwotCi0JbXkgJGNvbW1pdF9oYXNoID0gJGhhc2g7Ci0JaWYgKGRlZmluZWQgJGhhc2hfcGFyZW50KSB7Ci0JCSRjb21taXRfaGFzaCA9ICIkaGFzaF9wYXJlbnQuLiRoYXNoIjsKLQl9Ci0JbXkgQGNvbW1pdGxpc3QgPSBwYXJzZV9jb21taXRzKCRjb21taXRfaGFzaCwgMTAxLCAoMTAwICogJHBhZ2UpKTsKLQotCW15ICRwYWdpbmdfbmF2ID0gZm9ybWF0X3BhZ2luZ19uYXYoJ3Nob3J0bG9nJywgJGhhc2gsICRoZWFkLCAkcGFnZSwgJCNjb21taXRsaXN0ID49IDEwMCk7Ci0JbXkgJG5leHRfbGluayA9ICcnOwotCWlmICgkI2NvbW1pdGxpc3QgPj0gMTAwKSB7Ci0JCSRuZXh0X2xpbmsgPQotCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZigtcmVwbGF5PT4xLCBwYWdlPT4kcGFnZSsxKSwKLQkJCSAgICAgICAgIC1hY2Nlc3NrZXkgPT4gIm4iLCAtdGl0bGUgPT4gIkFsdC1uIn0sICJuZXh0Iik7Ci0JfQotCW15ICRwYXRjaF9tYXggPSBnaXR3ZWJfY2hlY2tfZmVhdHVyZSgncGF0Y2hlcycpOwotCWlmICgkcGF0Y2hfbWF4KSB7Ci0JCWlmICgkcGF0Y2hfbWF4IDwgMCB8fCBAY29tbWl0bGlzdCA8PSAkcGF0Y2hfbWF4KSB7Ci0JCQkkcGFnaW5nX25hdiAuPSAiICZzZG90OyAiIC4KLQkJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InBhdGNoZXMiLCAtcmVwbGF5PT4xKX0sCi0JCQkJCSJwYXRjaGVzIik7Ci0JCX0KLQl9Ci0KLQlnaXRfaGVhZGVyX2h0bWwoKTsKLQlnaXRfcHJpbnRfcGFnZV9uYXYoJ3Nob3J0bG9nJywnJywgJGhhc2gsJGhhc2gsJGhhc2gsICRwYWdpbmdfbmF2KTsKLQlnaXRfcHJpbnRfaGVhZGVyX2Rpdignc3VtbWFyeScsICRwcm9qZWN0KTsKLQotCWdpdF9zaG9ydGxvZ19ib2R5KFxAY29tbWl0bGlzdCwgMCwgOTksICRyZWZzLCAkbmV4dF9saW5rKTsKLQotCWdpdF9mb290ZXJfaHRtbCgpOworCWdpdF9sb2dfZ2VuZXJpYygnc2hvcnRsb2cnLCBcJmdpdF9zaG9ydGxvZ19ib2R5LAorCSAgICAgICAgICAgICAgICAkaGFzaCwgJGhhc2hfcGFyZW50KTsKIH0KIAogIyMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgpAQCAtNjI4Miw3ICs2NzQwLDcgQEAKIAkjIGVuZCBvZiBmZWVkCiAJaWYgKCRmb3JtYXQgZXEgJ3JzcycpIHsKIAkJcHJpbnQgIjwvY2hhbm5lbD5cbjwvcnNzPlxuIjsKLQl9CWVsc2lmICgkZm9ybWF0IGVxICdhdG9tJykgeworCX0gZWxzaWYgKCRmb3JtYXQgZXEgJ2F0b20nKSB7CiAJCXByaW50ICI8L2ZlZWQ+XG4iOwogCX0KIH0KZGlmZiAtLWdpdCBhL2dyYXBoLmMgYi9ncmFwaC5jCmluZGV4IDA2ZmJlYjYuLjY3NDZkNDIgMTAwNjQ0Ci0tLSBhL2dyYXBoLmMKKysrIGIvZ3JhcGguYwpAQCAtNDcsMjAgKzQ3LDYgQEAKICAqIC0gTGltaXQgdGhlIG51bWJlciBvZiBjb2x1bW5zLCBzaW1pbGFyIHRvIHRoZSB3YXkgZ2l0ayBkb2VzLgogICogICBJZiB3ZSByZWFjaCBtb3JlIHRoYW4gYSBzcGVjaWZpZWQgbnVtYmVyIG9mIGNvbHVtbnMsIG9taXQKICAqICAgc2VjdGlvbnMgb2Ygc29tZSBjb2x1bW5zLgotICoKLSAqIC0gVGhlIG91dHB1dCBkdXJpbmcgdGhlIEdSQVBIX1BSRV9DT01NSVQgYW5kIEdSQVBIX0NPTExBUFNJTkcgc3RhdGVzCi0gKiAgIGNvdWxkIGJlIG1hZGUgbW9yZSBjb21wYWN0IGJ5IHByaW50aW5nIGhvcml6b250YWwgbGluZXMsIGluc3RlYWQgb2YKLSAqICAgbG9uZyBkaWFnb25hbCBsaW5lcy4gIEZvciBleGFtcGxlLCBkdXJpbmcgY29sbGFwc2luZywgc29tZXRoaW5nIGxpa2UKLSAqICAgdGhpczogICAgICAgICAgaW5zdGVhZCBvZiB0aGlzOgotICogICB8IHwgfCB8IHwgICAgICB8IHwgfCB8IHwKLSAqICAgfCB8X3xffC8gICAgICAgfCB8IHwgfC8KLSAqICAgfC98IHwgfCAgICAgICAgfCB8IHwvfAotICogICB8IHwgfCB8ICAgICAgICB8IHwvfCB8Ci0gKiAgICAgICAgICAgICAgICAgIHwvfCB8IHwKLSAqICAgICAgICAgICAgICAgICAgfCB8IHwgfAotICoKLSAqICAgSWYgdGhlcmUgYXJlIHNldmVyYWwgcGFyYWxsZWwgZGlhZ29uYWwgbGluZXMsIHRoZXkgd2lsbCBuZWVkIHRvIGJlCi0gKiAgIHJlcGxhY2VkIHdpdGggaG9yaXpvbnRhbCBsaW5lcyBvbiBzdWJzZXF1ZW50IHJvd3MuCiAgKi8KIAogc3RydWN0IGNvbHVtbiB7CkBAIC0yMzksNyArMjI1LDEyIEBACiAJZ3JhcGgtPm51bV9jb2x1bW5zID0gMDsKIAlncmFwaC0+bnVtX25ld19jb2x1bW5zID0gMDsKIAlncmFwaC0+bWFwcGluZ19zaXplID0gMDsKLQlncmFwaC0+ZGVmYXVsdF9jb2x1bW5fY29sb3IgPSAwOworCS8qCisJICogU3RhcnQgdGhlIGNvbHVtbiBjb2xvciBhdCB0aGUgbWF4aW11bSB2YWx1ZSwgc2luY2Ugd2UnbGwKKwkgKiBhbHdheXMgaW5jcmVtZW50IGl0IGZvciB0aGUgZmlyc3QgY29tbWl0IHdlIG91dHB1dC4KKwkgKiBUaGlzIHdheSB3ZSBzdGFydCBhdCAwIGZvciB0aGUgZmlyc3QgY29tbWl0LgorCSAqLworCWdyYXBoLT5kZWZhdWx0X2NvbHVtbl9jb2xvciA9IENPTFVNTl9DT0xPUlNfTUFYIC0gMTsKIAogCS8qCiAJICogQWxsb2NhdGUgYSByZWFzb25hYmx5IGxhcmdlIGRlZmF1bHQgbnVtYmVyIG9mIGNvbHVtbnMKQEAgLTMwMCw5ICsyOTEsMTAgQEAKIAl9CiAKIAkvKgotCSAqIFVuaW50ZXJlc3RpbmcgYW5kIHBydW5lZCBjb21taXRzIHdvbid0IGJlIHByaW50ZWQKKwkgKiBPdGhlcndpc2UsIHVzZSBnZXRfY29tbWl0X2FjdGlvbigpIHRvIHNlZSBpZiB0aGlzIGNvbW1pdCBpcworCSAqIGludGVyZXN0aW5nCiAJICovCi0JcmV0dXJuIChjb21taXQtPm9iamVjdC5mbGFncyAmIChVTklOVEVSRVNUSU5HIHwgVFJFRVNBTUUpKSA/IDAgOiAxOworCXJldHVybiBnZXRfY29tbWl0X2FjdGlvbihncmFwaC0+cmV2cywgY29tbWl0KSA9PSBjb21taXRfc2hvdzsKIH0KIAogc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqbmV4dF9pbnRlcmVzdGluZ19wYXJlbnQoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsCkBAIC01MTMsMTEgKzUwNSwxNCBAQAogCQkJICAgICBwYXJlbnQ7CiAJCQkgICAgIHBhcmVudCA9IG5leHRfaW50ZXJlc3RpbmdfcGFyZW50KGdyYXBoLCBwYXJlbnQpKSB7CiAJCQkJLyoKLQkJCQkgKiBJZiB0aGlzIGlzIGEgbWVyZ2UgaW5jcmVtZW50IHRoZSBjdXJyZW50CisJCQkJICogSWYgdGhpcyBpcyBhIG1lcmdlLCBvciB0aGUgc3RhcnQgb2YgYSBuZXcKKwkJCQkgKiBjaGlsZGxlc3MgY29sdW1uLCBpbmNyZW1lbnQgdGhlIGN1cnJlbnQKIAkJCQkgKiBjb2xvci4KIAkJCQkgKi8KLQkJCQlpZiAoZ3JhcGgtPm51bV9wYXJlbnRzID4gMSkKKwkJCQlpZiAoZ3JhcGgtPm51bV9wYXJlbnRzID4gMSB8fAorCQkJCSAgICAhaXNfY29tbWl0X2luX2NvbHVtbnMpIHsKIAkJCQkJZ3JhcGhfaW5jcmVtZW50X2NvbHVtbl9jb2xvcihncmFwaCk7CisJCQkJfQogCQkJCWdyYXBoX2luc2VydF9pbnRvX25ld19jb2x1bW5zKGdyYXBoLAogCQkJCQkJCSAgICAgIHBhcmVudC0+aXRlbSwKIAkJCQkJCQkgICAgICAmbWFwcGluZ19pZHgpOwpAQCAtOTA3LDcgKzkwMiw3IEBACiAJCWlmIChncmFwaC0+bmV3X2NvbHVtbnNbaV0uY29tbWl0ID09IGNvbW1pdCkKIAkJCXJldHVybiAmZ3JhcGgtPm5ld19jb2x1bW5zW2ldOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X3Bvc3RfbWVyZ2VfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiAqc2IpCkBAIC05ODIsNiArOTc3LDkgQEAKIHsKIAlpbnQgaTsKIAlpbnQgKnRtcF9tYXBwaW5nOworCXNob3J0IHVzZWRfaG9yaXpvbnRhbCA9IDA7CisJaW50IGhvcml6b250YWxfZWRnZSA9IC0xOworCWludCBob3Jpem9udGFsX2VkZ2VfdGFyZ2V0ID0gLTE7CiAKIAkvKgogCSAqIENsZWFyIG91dCB0aGUgbmV3X21hcHBpbmcgYXJyYXkKQEAgLTEwMTksNiArMTAxNywyMyBAQAogCQkJICogTW92ZSB0byB0aGUgbGVmdCBieSBvbmUKIAkJCSAqLwogCQkJZ3JhcGgtPm5ld19tYXBwaW5nW2kgLSAxXSA9IHRhcmdldDsKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSBpc24ndCBhbHJlYWR5IGFuIGVkZ2UgbW92aW5nIGhvcml6b250YWxseQorCQkJICogc2VsZWN0IHRoaXMgb25lLgorCQkJICovCisJCQlpZiAoaG9yaXpvbnRhbF9lZGdlID09IC0xKSB7CisJCQkJaW50IGo7CisJCQkJaG9yaXpvbnRhbF9lZGdlID0gaTsKKwkJCQlob3Jpem9udGFsX2VkZ2VfdGFyZ2V0ID0gdGFyZ2V0OworCQkJCS8qCisJCQkJICogVGhlIHZhcmlhYmxlIHRhcmdldCBpcyB0aGUgaW5kZXggb2YgdGhlIGdyYXBoCisJCQkJICogY29sdW1uLCBhbmQgdGhlcmVmb3JlIHRhcmdldCoyKzMgaXMgdGhlCisJCQkJICogYWN0dWFsIHNjcmVlbiBjb2x1bW4gb2YgdGhlIGZpcnN0IGhvcml6b250YWwKKwkJCQkgKiBsaW5lLgorCQkJCSAqLworCQkJCWZvciAoaiA9ICh0YXJnZXQgKiAyKSszOyBqIDwgKGkgLSAyKTsgaiArPSAyKQorCQkJCQlncmFwaC0+bmV3X21hcHBpbmdbal0gPSB0YXJnZXQ7CisJCQl9CiAJCX0gZWxzZSBpZiAoZ3JhcGgtPm5ld19tYXBwaW5nW2kgLSAxXSA9PSB0YXJnZXQpIHsKIAkJCS8qCiAJCQkgKiBUaGVyZSBpcyBhIGJyYW5jaCBsaW5lIHRvIG91ciBsZWZ0CkBAIC0xMDM5LDEwICsxMDU0LDIxIEBACiAJCQkgKgogCQkJICogVGhlIHNwYWNlIGp1c3QgdG8gdGhlIGxlZnQgb2YgdGhpcwogCQkJICogYnJhbmNoIHNob3VsZCBhbHdheXMgYmUgZW1wdHkuCisJCQkgKgorCQkJICogVGhlIGJyYW5jaCB0byB0aGUgbGVmdCBvZiB0aGF0IHNwYWNlCisJCQkgKiBzaG91bGQgYmUgb3VyIGV2ZW50dWFsIHRhcmdldC4KIAkJCSAqLwogCQkJYXNzZXJ0KGdyYXBoLT5uZXdfbWFwcGluZ1tpIC0gMV0gPiB0YXJnZXQpOwogCQkJYXNzZXJ0KGdyYXBoLT5uZXdfbWFwcGluZ1tpIC0gMl0gPCAwKTsKKwkJCWFzc2VydChncmFwaC0+bmV3X21hcHBpbmdbaSAtIDNdID09IHRhcmdldCk7CiAJCQlncmFwaC0+bmV3X21hcHBpbmdbaSAtIDJdID0gdGFyZ2V0OworCQkJLyoKKwkJCSAqIE1hcmsgdGhpcyBicmFuY2ggYXMgdGhlIGhvcml6b250YWwgZWRnZSB0bworCQkJICogcHJldmVudCBhbnkgb3RoZXIgZWRnZXMgZnJvbSBtb3ZpbmcKKwkJCSAqIGhvcml6b250YWxseS4KKwkJCSAqLworCQkJaWYgKGhvcml6b250YWxfZWRnZSA9PSAtMSkKKwkJCQlob3Jpem9udGFsX2VkZ2UgPSBpOwogCQl9CiAJfQogCkBAIC0xMDYxLDggKzEwODcsMjMgQEAKIAkJCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKIAkJZWxzZSBpZiAodGFyZ2V0ICogMiA9PSBpKQogCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgJmdyYXBoLT5uZXdfY29sdW1uc1t0YXJnZXRdLCAnfCcpOwotCQllbHNlCisJCWVsc2UgaWYgKHRhcmdldCA9PSBob3Jpem9udGFsX2VkZ2VfdGFyZ2V0ICYmCisJCQkgaSAhPSBob3Jpem9udGFsX2VkZ2UgLSAxKSB7CisJCQkJLyoKKwkJCQkgKiBTZXQgdGhlIG1hcHBpbmdzIGZvciBhbGwgYnV0IHRoZQorCQkJCSAqIGZpcnN0IHNlZ21lbnQgdG8gLTEgc28gdGhhdCB0aGV5CisJCQkJICogd29uJ3QgY29udGludWUgaW50byB0aGUgbmV4dCBsaW5lLgorCQkJCSAqLworCQkJCWlmIChpICE9ICh0YXJnZXQgKiAyKSszKQorCQkJCQlncmFwaC0+bmV3X21hcHBpbmdbaV0gPSAtMTsKKwkJCQl1c2VkX2hvcml6b250YWwgPSAxOworCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgJmdyYXBoLT5uZXdfY29sdW1uc1t0YXJnZXRdLCAnXycpOworCQl9IGVsc2UgeworCQkJaWYgKHVzZWRfaG9yaXpvbnRhbCAmJiBpIDwgaG9yaXpvbnRhbF9lZGdlKQorCQkJCWdyYXBoLT5uZXdfbWFwcGluZ1tpXSA9IC0xOwogCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgJmdyYXBoLT5uZXdfY29sdW1uc1t0YXJnZXRdLCAnLycpOworCisJCX0KIAl9CiAKIAlncmFwaF9wYWRfaG9yaXpvbnRhbGx5KGdyYXBoLCBzYiwgZ3JhcGgtPm1hcHBpbmdfc2l6ZSk7CmRpZmYgLS1naXQgYS9ncmFwaC5oIGIvZ3JhcGguaAppbmRleCBiYzMwZDY4Li5iODJhZTg3IDEwMDY0NAotLS0gYS9ncmFwaC5oCisrKyBiL2dyYXBoLmgKQEAgLTYsNyArNiw2IEBACiAKIC8qCiAgKiBDcmVhdGUgYSBuZXcgc3RydWN0IGdpdF9ncmFwaC4KLSAqIFRoZSBncmFwaCBzaG91bGQgYmUgZnJlZWQgd2l0aCBncmFwaF9yZWxlYXNlKCkgd2hlbiBubyBsb25nZXIgbmVlZGVkLgogICovCiBzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaF9pbml0KHN0cnVjdCByZXZfaW5mbyAqb3B0KTsKIApkaWZmIC0tZ2l0IGEvZ3JlcC5jIGIvZ3JlcC5jCmluZGV4IDkyYTQ3YzcuLjkwYTA2M2EgMTAwNjQ0Ci0tLSBhL2dyZXAuYworKysgYi9ncmVwLmMKQEAgLTEsNSArMSw2IEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlICJncmVwLmgiCisjaW5jbHVkZSAidXNlcmRpZmYuaCIKICNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKIAogdm9pZCBhcHBlbmRfaGVhZGVyX2dyZXBfcGF0dGVybihzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgZW51bSBncmVwX2hlYWRlcl9maWVsZCBmaWVsZCwgY29uc3QgY2hhciAqcGF0KQpAQCAtMTAsOCArMTEsOCBAQAogCXAtPm5vID0gMDsKIAlwLT50b2tlbiA9IEdSRVBfUEFUVEVSTl9IRUFEOwogCXAtPmZpZWxkID0gZmllbGQ7Ci0JKm9wdC0+cGF0dGVybl90YWlsID0gcDsKLQlvcHQtPnBhdHRlcm5fdGFpbCA9ICZwLT5uZXh0OworCSpvcHQtPmhlYWRlcl90YWlsID0gcDsKKwlvcHQtPmhlYWRlcl90YWlsID0gJnAtPm5leHQ7CiAJcC0+bmV4dCA9IE5VTEw7CiB9CiAKQEAgLTI4LDExICsyOSwyNiBAQAogCXAtPm5leHQgPSBOVUxMOwogfQogCi1zdGF0aWMgaW50IGlzX2ZpeGVkKGNvbnN0IGNoYXIgKnMpCitzdHJ1Y3QgZ3JlcF9vcHQgKmdyZXBfb3B0X2R1cChjb25zdCBzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCkKIHsKLQl3aGlsZSAoKnMgJiYgIWlzX3JlZ2V4X3NwZWNpYWwoKnMpKQotCQlzKys7Ci0JcmV0dXJuICEqczsKKwlzdHJ1Y3QgZ3JlcF9wYXQgKnBhdDsKKwlzdHJ1Y3QgZ3JlcF9vcHQgKnJldCA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBncmVwX29wdCkpOworCSpyZXQgPSAqb3B0OworCisJcmV0LT5wYXR0ZXJuX2xpc3QgPSBOVUxMOworCXJldC0+cGF0dGVybl90YWlsID0gJnJldC0+cGF0dGVybl9saXN0OworCisJZm9yKHBhdCA9IG9wdC0+cGF0dGVybl9saXN0OyBwYXQgIT0gTlVMTDsgcGF0ID0gcGF0LT5uZXh0KQorCXsKKwkJaWYocGF0LT50b2tlbiA9PSBHUkVQX1BBVFRFUk5fSEVBRCkKKwkJCWFwcGVuZF9oZWFkZXJfZ3JlcF9wYXR0ZXJuKHJldCwgcGF0LT5maWVsZCwKKwkJCQkJCSAgIHBhdC0+cGF0dGVybik7CisJCWVsc2UKKwkJCWFwcGVuZF9ncmVwX3BhdHRlcm4ocmV0LCBwYXQtPnBhdHRlcm4sIHBhdC0+b3JpZ2luLAorCQkJCQkgICAgcGF0LT5ubywgcGF0LT50b2tlbik7CisJfQorCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgY29tcGlsZV9yZWdleHAoc3RydWN0IGdyZXBfcGF0ICpwLCBzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCkKQEAgLTQwLDExICs1Niw5IEBACiAJaW50IGVycjsKIAogCXAtPndvcmRfcmVnZXhwID0gb3B0LT53b3JkX3JlZ2V4cDsKKwlwLT5pZ25vcmVfY2FzZSA9IG9wdC0+aWdub3JlX2Nhc2U7CisJcC0+Zml4ZWQgPSBvcHQtPmZpeGVkOwogCi0JaWYgKG9wdC0+Zml4ZWQgfHwgaXNfZml4ZWQocC0+cGF0dGVybikpCi0JCXAtPmZpeGVkID0gMTsKLQlpZiAob3B0LT5yZWdmbGFncyAmIFJFR19JQ0FTRSkKLQkJcC0+Zml4ZWQgPSAwOwogCWlmIChwLT5maXhlZCkKIAkJcmV0dXJuOwogCkBAIC0xNzAsOSArMTg0LDI2IEBACiB2b2lkIGNvbXBpbGVfZ3JlcF9wYXR0ZXJucyhzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCkKIHsKIAlzdHJ1Y3QgZ3JlcF9wYXQgKnA7CisJc3RydWN0IGdyZXBfZXhwciAqaGVhZGVyX2V4cHIgPSBOVUxMOwogCi0JaWYgKG9wdC0+YWxsX21hdGNoKQotCQlvcHQtPmV4dGVuZGVkID0gMTsKKwlpZiAob3B0LT5oZWFkZXJfbGlzdCkgeworCQlwID0gb3B0LT5oZWFkZXJfbGlzdDsKKwkJaGVhZGVyX2V4cHIgPSBjb21waWxlX3BhdHRlcm5fZXhwcigmcCk7CisJCWlmIChwKQorCQkJZGllKCJpbmNvbXBsZXRlIHBhdHRlcm4gZXhwcmVzc2lvbjogJXMiLCBwLT5wYXR0ZXJuKTsKKwkJZm9yIChwID0gb3B0LT5oZWFkZXJfbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJCXN3aXRjaCAocC0+dG9rZW4pIHsKKwkJCWNhc2UgR1JFUF9QQVRURVJOOiAvKiBhdG9tICovCisJCQljYXNlIEdSRVBfUEFUVEVSTl9IRUFEOgorCQkJY2FzZSBHUkVQX1BBVFRFUk5fQk9EWToKKwkJCQljb21waWxlX3JlZ2V4cChwLCBvcHQpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlvcHQtPmV4dGVuZGVkID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KIAogCWZvciAocCA9IG9wdC0+cGF0dGVybl9saXN0OyBwOyBwID0gcC0+bmV4dCkgewogCQlzd2l0Y2ggKHAtPnRva2VuKSB7CkBAIC0xODcsNyArMjE4LDkgQEAKIAkJfQogCX0KIAotCWlmICghb3B0LT5leHRlbmRlZCkKKwlpZiAob3B0LT5hbGxfbWF0Y2ggfHwgaGVhZGVyX2V4cHIpCisJCW9wdC0+ZXh0ZW5kZWQgPSAxOworCWVsc2UgaWYgKCFvcHQtPmV4dGVuZGVkKQogCQlyZXR1cm47CiAKIAkvKiBUaGVuIGJ1bmRsZSB0aGVtIHVwIGluIGFuIGV4cHJlc3Npb24uCkBAIC0xOTgsNiArMjMxLDIxIEBACiAJCW9wdC0+cGF0dGVybl9leHByZXNzaW9uID0gY29tcGlsZV9wYXR0ZXJuX2V4cHIoJnApOwogCWlmIChwKQogCQlkaWUoImluY29tcGxldGUgcGF0dGVybiBleHByZXNzaW9uOiAlcyIsIHAtPnBhdHRlcm4pOworCisJaWYgKCFoZWFkZXJfZXhwcikKKwkJcmV0dXJuOworCisJaWYgKG9wdC0+cGF0dGVybl9leHByZXNzaW9uKSB7CisJCXN0cnVjdCBncmVwX2V4cHIgKno7CisJCXogPSB4Y2FsbG9jKDEsIHNpemVvZigqeikpOworCQl6LT5ub2RlID0gR1JFUF9OT0RFX09SOworCQl6LT51LmJpbmFyeS5sZWZ0ID0gb3B0LT5wYXR0ZXJuX2V4cHJlc3Npb247CisJCXotPnUuYmluYXJ5LnJpZ2h0ID0gaGVhZGVyX2V4cHI7CisJCW9wdC0+cGF0dGVybl9leHByZXNzaW9uID0gejsKKwl9IGVsc2UgeworCQlvcHQtPnBhdHRlcm5fZXhwcmVzc2lvbiA9IGhlYWRlcl9leHByOworCX0KKwlvcHQtPmFsbF9tYXRjaCA9IDE7CiB9CiAKIHN0YXRpYyB2b2lkIGZyZWVfcGF0dGVybl9leHByKHN0cnVjdCBncmVwX2V4cHIgKngpCkBAIC0yNTgsMTIgKzMwNiwxOSBAQAogCiBzdGF0aWMgdm9pZCBzaG93X25hbWUoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0JcHJpbnRmKCIlcyVjIiwgbmFtZSwgb3B0LT5udWxsX2ZvbGxvd2luZ19uYW1lID8gJ1wwJyA6ICdcbicpOworCW9wdC0+b3V0cHV0KG9wdCwgbmFtZSwgc3RybGVuKG5hbWUpKTsKKwlvcHQtPm91dHB1dChvcHQsIG9wdC0+bnVsbF9mb2xsb3dpbmdfbmFtZSA/ICJcMCIgOiAiXG4iLCAxKTsKIH0KIAotc3RhdGljIGludCBmaXhtYXRjaChjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpsaW5lLCByZWdtYXRjaF90ICptYXRjaCkKKworc3RhdGljIGludCBmaXhtYXRjaChjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpsaW5lLCBpbnQgaWdub3JlX2Nhc2UsIHJlZ21hdGNoX3QgKm1hdGNoKQogewotCWNoYXIgKmhpdCA9IHN0cnN0cihsaW5lLCBwYXR0ZXJuKTsKKwljaGFyICpoaXQ7CisJaWYgKGlnbm9yZV9jYXNlKQorCQloaXQgPSBzdHJjYXNlc3RyKGxpbmUsIHBhdHRlcm4pOworCWVsc2UKKwkJaGl0ID0gc3Ryc3RyKGxpbmUsIHBhdHRlcm4pOworCiAJaWYgKCFoaXQpIHsKIAkJbWF0Y2gtPnJtX3NvID0gbWF0Y2gtPnJtX2VvID0gLTE7CiAJCXJldHVybiBSRUdfTk9NQVRDSDsKQEAgLTMyNSw3ICszODAsNyBAQAogCiAgYWdhaW46CiAJaWYgKHAtPmZpeGVkKQotCQloaXQgPSAhZml4bWF0Y2gocC0+cGF0dGVybiwgYm9sLCBwbWF0Y2gpOworCQloaXQgPSAhZml4bWF0Y2gocC0+cGF0dGVybiwgYm9sLCBwLT5pZ25vcmVfY2FzZSwgcG1hdGNoKTsKIAllbHNlCiAJCWhpdCA9ICFyZWdleGVjKCZwLT5yZWdleHAsIGJvbCwgMSwgcG1hdGNoLCBlZmxhZ3MpOwogCkBAIC00ODksMTMgKzU0NCwzMiBAQAogCQkgICAgICBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsbm8sIGNoYXIgc2lnbikKIHsKIAlpbnQgcmVzdCA9IGVvbCAtIGJvbDsKKwljaGFyIHNpZ25fc3RyWzFdOworCisJc2lnbl9zdHJbMF0gPSBzaWduOworCWlmIChvcHQtPnByZV9jb250ZXh0IHx8IG9wdC0+cG9zdF9jb250ZXh0KSB7CisJCWlmIChvcHQtPmxhc3Rfc2hvd24gPT0gMCkgeworCQkJaWYgKG9wdC0+c2hvd19odW5rX21hcmspCisJCQkJb3B0LT5vdXRwdXQob3B0LCAiLS1cbiIsIDMpOworCQkJZWxzZQorCQkJCW9wdC0+c2hvd19odW5rX21hcmsgPSAxOworCQl9IGVsc2UgaWYgKGxubyA+IG9wdC0+bGFzdF9zaG93biArIDEpCisJCQlvcHQtPm91dHB1dChvcHQsICItLVxuIiwgMyk7CisJfQorCW9wdC0+bGFzdF9zaG93biA9IGxubzsKIAogCWlmIChvcHQtPm51bGxfZm9sbG93aW5nX25hbWUpCi0JCXNpZ24gPSAnXDAnOwotCWlmIChvcHQtPnBhdGhuYW1lKQotCQlwcmludGYoIiVzJWMiLCBuYW1lLCBzaWduKTsKLQlpZiAob3B0LT5saW5lbnVtKQotCQlwcmludGYoIiVkJWMiLCBsbm8sIHNpZ24pOworCQlzaWduX3N0clswXSA9ICdcMCc7CisJaWYgKG9wdC0+cGF0aG5hbWUpIHsKKwkJb3B0LT5vdXRwdXQob3B0LCBuYW1lLCBzdHJsZW4obmFtZSkpOworCQlvcHQtPm91dHB1dChvcHQsIHNpZ25fc3RyLCAxKTsKKwl9CisJaWYgKG9wdC0+bGluZW51bSkgeworCQljaGFyIGJ1ZlszMl07CisJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIGxubyk7CisJCW9wdC0+b3V0cHV0KG9wdCwgYnVmLCBzdHJsZW4oYnVmKSk7CisJCW9wdC0+b3V0cHV0KG9wdCwgc2lnbl9zdHIsIDEpOworCX0KIAlpZiAob3B0LT5jb2xvcikgewogCQlyZWdtYXRjaF90IG1hdGNoOwogCQllbnVtIGdyZXBfY29udGV4dCBjdHggPSBHUkVQX0NPTlRFWFRfQk9EWTsKQEAgLTUwNiwxOCArNTgwLDE5MCBAQAogCQl3aGlsZSAobmV4dF9tYXRjaChvcHQsIGJvbCwgZW9sLCBjdHgsICZtYXRjaCwgZWZsYWdzKSkgewogCQkJaWYgKG1hdGNoLnJtX3NvID09IG1hdGNoLnJtX2VvKQogCQkJCWJyZWFrOwotCQkJcHJpbnRmKCIlLipzJXMlLipzJXMiLAotCQkJICAgICAgIChpbnQpbWF0Y2gucm1fc28sIGJvbCwKLQkJCSAgICAgICBvcHQtPmNvbG9yX21hdGNoLAotCQkJICAgICAgIChpbnQpKG1hdGNoLnJtX2VvIC0gbWF0Y2gucm1fc28pLCBib2wgKyBtYXRjaC5ybV9zbywKLQkJCSAgICAgICBHSVRfQ09MT1JfUkVTRVQpOworCisJCQlvcHQtPm91dHB1dChvcHQsIGJvbCwgbWF0Y2gucm1fc28pOworCQkJb3B0LT5vdXRwdXQob3B0LCBvcHQtPmNvbG9yX21hdGNoLAorCQkJCSAgICBzdHJsZW4ob3B0LT5jb2xvcl9tYXRjaCkpOworCQkJb3B0LT5vdXRwdXQob3B0LCBib2wgKyBtYXRjaC5ybV9zbywKKwkJCQkgICAgKGludCkobWF0Y2gucm1fZW8gLSBtYXRjaC5ybV9zbykpOworCQkJb3B0LT5vdXRwdXQob3B0LCBHSVRfQ09MT1JfUkVTRVQsCisJCQkJICAgIHN0cmxlbihHSVRfQ09MT1JfUkVTRVQpKTsKIAkJCWJvbCArPSBtYXRjaC5ybV9lbzsKIAkJCXJlc3QgLT0gbWF0Y2gucm1fZW87CiAJCQllZmxhZ3MgPSBSRUdfTk9UQk9MOwogCQl9CiAJCSplb2wgPSBjaDsKIAl9Ci0JcHJpbnRmKCIlLipzXG4iLCByZXN0LCBib2wpOworCW9wdC0+b3V0cHV0KG9wdCwgYm9sLCByZXN0KTsKKwlvcHQtPm91dHB1dChvcHQsICJcbiIsIDEpOworfQorCitzdGF0aWMgaW50IG1hdGNoX2Z1bmNuYW1lKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjaGFyICpib2wsIGNoYXIgKmVvbCkKK3sKKwl4ZGVtaXRjb25mX3QgKnhlY2ZnID0gb3B0LT5wcml2OworCWlmICh4ZWNmZyAmJiB4ZWNmZy0+ZmluZF9mdW5jKSB7CisJCWNoYXIgYnVmWzFdOworCQlyZXR1cm4geGVjZmctPmZpbmRfZnVuYyhib2wsIGVvbCAtIGJvbCwgYnVmLCAxLAorCQkJCQl4ZWNmZy0+ZmluZF9mdW5jX3ByaXYpID49IDA7CisJfQorCisJaWYgKGJvbCA9PSBlb2wpCisJCXJldHVybiAwOworCWlmIChpc2FscGhhKCpib2wpIHx8ICpib2wgPT0gJ18nIHx8ICpib2wgPT0gJyQnKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2hvd19mdW5jbmFtZV9saW5lKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICAgIGNoYXIgKmJ1ZiwgY2hhciAqYm9sLCB1bnNpZ25lZCBsbm8pCit7CisJd2hpbGUgKGJvbCA+IGJ1ZikgeworCQljaGFyICplb2wgPSAtLWJvbDsKKworCQl3aGlsZSAoYm9sID4gYnVmICYmIGJvbFstMV0gIT0gJ1xuJykKKwkJCWJvbC0tOworCQlsbm8tLTsKKworCQlpZiAobG5vIDw9IG9wdC0+bGFzdF9zaG93bikKKwkJCWJyZWFrOworCisJCWlmIChtYXRjaF9mdW5jbmFtZShvcHQsIGJvbCwgZW9sKSkgeworCQkJc2hvd19saW5lKG9wdCwgYm9sLCBlb2wsIG5hbWUsIGxubywgJz0nKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBzaG93X3ByZV9jb250ZXh0KHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBjaGFyICpuYW1lLCBjaGFyICpidWYsCisJCQkgICAgIGNoYXIgKmJvbCwgdW5zaWduZWQgbG5vKQoreworCXVuc2lnbmVkIGN1ciA9IGxubywgZnJvbSA9IDEsIGZ1bmNuYW1lX2xubyA9IDA7CisJaW50IGZ1bmNuYW1lX25lZWRlZCA9IG9wdC0+ZnVuY25hbWU7CisKKwlpZiAob3B0LT5wcmVfY29udGV4dCA8IGxubykKKwkJZnJvbSA9IGxubyAtIG9wdC0+cHJlX2NvbnRleHQ7CisJaWYgKGZyb20gPD0gb3B0LT5sYXN0X3Nob3duKQorCQlmcm9tID0gb3B0LT5sYXN0X3Nob3duICsgMTsKKworCS8qIFJld2luZC4gKi8KKwl3aGlsZSAoYm9sID4gYnVmICYmIGN1ciA+IGZyb20pIHsKKwkJY2hhciAqZW9sID0gLS1ib2w7CisKKwkJd2hpbGUgKGJvbCA+IGJ1ZiAmJiBib2xbLTFdICE9ICdcbicpCisJCQlib2wtLTsKKwkJY3VyLS07CisJCWlmIChmdW5jbmFtZV9uZWVkZWQgJiYgbWF0Y2hfZnVuY25hbWUob3B0LCBib2wsIGVvbCkpIHsKKwkJCWZ1bmNuYW1lX2xubyA9IGN1cjsKKwkJCWZ1bmNuYW1lX25lZWRlZCA9IDA7CisJCX0KKwl9CisKKwkvKiBXZSBuZWVkIHRvIGxvb2sgZXZlbiBmdXJ0aGVyIGJhY2sgdG8gZmluZCBhIGZ1bmN0aW9uIHNpZ25hdHVyZS4gKi8KKwlpZiAob3B0LT5mdW5jbmFtZSAmJiBmdW5jbmFtZV9uZWVkZWQpCisJCXNob3dfZnVuY25hbWVfbGluZShvcHQsIG5hbWUsIGJ1ZiwgYm9sLCBjdXIpOworCisJLyogQmFjayBmb3J3YXJkLiAqLworCXdoaWxlIChjdXIgPCBsbm8pIHsKKwkJY2hhciAqZW9sID0gYm9sLCBzaWduID0gKGN1ciA9PSBmdW5jbmFtZV9sbm8pID8gJz0nIDogJy0nOworCisJCXdoaWxlICgqZW9sICE9ICdcbicpCisJCQllb2wrKzsKKwkJc2hvd19saW5lKG9wdCwgYm9sLCBlb2wsIG5hbWUsIGN1ciwgc2lnbik7CisJCWJvbCA9IGVvbCArIDE7CisJCWN1cisrOworCX0KK30KKworc3RhdGljIGludCBzaG91bGRfbG9va2FoZWFkKHN0cnVjdCBncmVwX29wdCAqb3B0KQoreworCXN0cnVjdCBncmVwX3BhdCAqcDsKKworCWlmIChvcHQtPmV4dGVuZGVkKQorCQlyZXR1cm4gMDsgLyogcHVudCBmb3IgdG9vIGNvbXBsZXggc3R1ZmYgKi8KKwlpZiAob3B0LT5pbnZlcnQpCisJCXJldHVybiAwOworCWZvciAocCA9IG9wdC0+cGF0dGVybl9saXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAocC0+dG9rZW4gIT0gR1JFUF9QQVRURVJOKQorCQkJcmV0dXJuIDA7IC8qIHB1bnQgZm9yICJoZWFkZXIgb25seSIgYW5kIHN0dWZmICovCisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGxvb2tfYWhlYWQoc3RydWN0IGdyZXBfb3B0ICpvcHQsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgKmxlZnRfcCwKKwkJICAgICAgdW5zaWduZWQgKmxub19wLAorCQkgICAgICBjaGFyICoqYm9sX3ApCit7CisJdW5zaWduZWQgbG5vID0gKmxub19wOworCWNoYXIgKmJvbCA9ICpib2xfcDsKKwlzdHJ1Y3QgZ3JlcF9wYXQgKnA7CisJY2hhciAqc3AsICpsYXN0X2JvbDsKKwlyZWdvZmZfdCBlYXJsaWVzdCA9IC0xOworCisJZm9yIChwID0gb3B0LT5wYXR0ZXJuX2xpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWludCBoaXQ7CisJCXJlZ21hdGNoX3QgbTsKKworCQlpZiAocC0+Zml4ZWQpCisJCQloaXQgPSAhZml4bWF0Y2gocC0+cGF0dGVybiwgYm9sLCBwLT5pZ25vcmVfY2FzZSwgJm0pOworCQllbHNlIHsKKyNpZmRlZiBSRUdfU1RBUlRFTkQKKwkJCW0ucm1fc28gPSAwOworCQkJbS5ybV9lbyA9ICpsZWZ0X3A7CisJCQloaXQgPSAhcmVnZXhlYygmcC0+cmVnZXhwLCBib2wsIDEsICZtLCBSRUdfU1RBUlRFTkQpOworI2Vsc2UKKwkJCWhpdCA9ICFyZWdleGVjKCZwLT5yZWdleHAsIGJvbCwgMSwgJm0sIDApOworI2VuZGlmCisJCX0KKwkJaWYgKCFoaXQgfHwgbS5ybV9zbyA8IDAgfHwgbS5ybV9lbyA8IDApCisJCQljb250aW51ZTsKKwkJaWYgKGVhcmxpZXN0IDwgMCB8fCBtLnJtX3NvIDwgZWFybGllc3QpCisJCQllYXJsaWVzdCA9IG0ucm1fc287CisJfQorCisJaWYgKGVhcmxpZXN0IDwgMCkgeworCQkqYm9sX3AgPSBib2wgKyAqbGVmdF9wOworCQkqbGVmdF9wID0gMDsKKwkJcmV0dXJuIDE7CisJfQorCWZvciAoc3AgPSBib2wgKyBlYXJsaWVzdDsgYm9sIDwgc3AgJiYgc3BbLTFdICE9ICdcbic7IHNwLS0pCisJCTsgLyogZmluZCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lICovCisJbGFzdF9ib2wgPSBzcDsKKworCWZvciAoc3AgPSBib2w7IHNwIDwgbGFzdF9ib2w7IHNwKyspIHsKKwkJaWYgKCpzcCA9PSAnXG4nKQorCQkJbG5vKys7CisJfQorCSpsZWZ0X3AgLT0gbGFzdF9ib2wgLSBib2w7CisJKmJvbF9wID0gbGFzdF9ib2w7CisJKmxub19wID0gbG5vOworCXJldHVybiAwOworfQorCitpbnQgZ3JlcF90aHJlYWRzX29rKGNvbnN0IHN0cnVjdCBncmVwX29wdCAqb3B0KQoreworCS8qIElmIHRoaXMgY29uZGl0aW9uIGlzIHRydWUsIHRoZW4gd2UgbWF5IHVzZSB0aGUgYXR0cmlidXRlCisJICogbWFjaGluZXJ5IGluIGdyZXBfYnVmZmVyXzEuIFRoZSBhdHRyaWJ1dGUgY29kZSBpcyBub3QKKwkgKiB0aHJlYWQgc2FmZSwgc28gd2UgZGlzYWJsZSB0aGUgdXNlIG9mIHRocmVhZHMuCisJICovCisJaWYgKG9wdC0+ZnVuY25hbWUgJiYgIW9wdC0+dW5tYXRjaF9uYW1lX29ubHkgJiYgIW9wdC0+c3RhdHVzX29ubHkgJiYKKwkgICAgIW9wdC0+bmFtZV9vbmx5KQorCQlyZXR1cm4gMDsKKworCS8qIElmIHdlIGFyZSBzaG93aW5nIGh1bmsgbWFya3MsIHdlIHNob3VsZCBub3QgZG8gaXQgZm9yIHRoZQorCSAqIGZpcnN0IG1hdGNoLiBUaGUgc3luY2hyb25pemF0aW9uIHByb2JsZW0gd2UgZ2V0IGZvciB0aGlzCisJICogY29uc3RyYWludCBpcyBub3QgeWV0IHNvbHZlZCwgc28gd2UgZGlzYWJsZSB0aHJlYWRpbmcgaW4KKwkgKiB0aGlzIGNhc2UuCisJICovCisJaWYgKG9wdC0+cHJlX2NvbnRleHQgfHwgb3B0LT5wb3N0X2NvbnRleHQpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHN0ZF9vdXRwdXQoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJZndyaXRlKGJ1Ziwgc2l6ZSwgMSwgc3Rkb3V0KTsKIH0KIAogc3RhdGljIGludCBncmVwX2J1ZmZlcl8xKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBjaGFyICpuYW1lLApAQCAtNTI2LDE2ICs3NzIsMTcgQEAKIAljaGFyICpib2wgPSBidWY7CiAJdW5zaWduZWQgbG9uZyBsZWZ0ID0gc2l6ZTsKIAl1bnNpZ25lZCBsbm8gPSAxOwotCXN0cnVjdCBwcmVfY29udGV4dF9saW5lIHsKLQkJY2hhciAqYm9sOwotCQljaGFyICplb2w7Ci0JfSAqcHJldiA9IE5VTEwsICpwY2w7CiAJdW5zaWduZWQgbGFzdF9oaXQgPSAwOwotCXVuc2lnbmVkIGxhc3Rfc2hvd24gPSAwOwogCWludCBiaW5hcnlfbWF0Y2hfb25seSA9IDA7Ci0JY29uc3QgY2hhciAqaHVua19tYXJrID0gIiI7CiAJdW5zaWduZWQgY291bnQgPSAwOworCWludCB0cnlfbG9va2FoZWFkID0gMDsKIAllbnVtIGdyZXBfY29udGV4dCBjdHggPSBHUkVQX0NPTlRFWFRfSEVBRDsKKwl4ZGVtaXRjb25mX3QgeGVjZmc7CisKKwlvcHQtPmxhc3Rfc2hvd24gPSAwOworCisJaWYgKCFvcHQtPm91dHB1dCkKKwkJb3B0LT5vdXRwdXQgPSBzdGRfb3V0cHV0OwogCiAJaWYgKGJ1ZmZlcl9pc19iaW5hcnkoYnVmLCBzaXplKSkgewogCQlzd2l0Y2ggKG9wdC0+YmluYXJ5KSB7CkBAIC01NTAsMTUgKzc5NywzNiBAQAogCQl9CiAJfQogCi0JaWYgKG9wdC0+cHJlX2NvbnRleHQpCi0JCXByZXYgPSB4Y2FsbG9jKG9wdC0+cHJlX2NvbnRleHQsIHNpemVvZigqcHJldikpOwotCWlmIChvcHQtPnByZV9jb250ZXh0IHx8IG9wdC0+cG9zdF9jb250ZXh0KQotCQlodW5rX21hcmsgPSAiLS1cbiI7CisJbWVtc2V0KCZ4ZWNmZywgMCwgc2l6ZW9mKHhlY2ZnKSk7CisJaWYgKG9wdC0+ZnVuY25hbWUgJiYgIW9wdC0+dW5tYXRjaF9uYW1lX29ubHkgJiYgIW9wdC0+c3RhdHVzX29ubHkgJiYKKwkgICAgIW9wdC0+bmFtZV9vbmx5ICYmICFiaW5hcnlfbWF0Y2hfb25seSAmJiAhY29sbGVjdF9oaXRzKSB7CisJCXN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKmRydiA9IHVzZXJkaWZmX2ZpbmRfYnlfcGF0aChuYW1lKTsKKwkJaWYgKGRydiAmJiBkcnYtPmZ1bmNuYW1lLnBhdHRlcm4pIHsKKwkJCWNvbnN0IHN0cnVjdCB1c2VyZGlmZl9mdW5jbmFtZSAqcGUgPSAmZHJ2LT5mdW5jbmFtZTsKKwkJCXhkaWZmX3NldF9maW5kX2Z1bmMoJnhlY2ZnLCBwZS0+cGF0dGVybiwgcGUtPmNmbGFncyk7CisJCQlvcHQtPnByaXYgPSAmeGVjZmc7CisJCX0KKwl9CisJdHJ5X2xvb2thaGVhZCA9IHNob3VsZF9sb29rYWhlYWQob3B0KTsKIAogCXdoaWxlIChsZWZ0KSB7CiAJCWNoYXIgKmVvbCwgY2g7CiAJCWludCBoaXQ7CiAKKwkJLyoKKwkJICogbG9va19haGVhZCgpIHNraXBzIHF1aWNseSB0byB0aGUgbGluZSB0aGF0IHBvc3NpYmx5CisJCSAqIGhhcyB0aGUgbmV4dCBoaXQ7IGRvbid0IGNhbGwgaXQgaWYgd2UgbmVlZCB0byBkbworCQkgKiBzb21ldGhpbmcgbW9yZSB0aGFuIGp1c3Qgc2tpcHBpbmcgdGhlIGN1cnJlbnQgbGluZQorCQkgKiBpbiByZXNwb25zZSB0byBhbiB1bm1hdGNoIGZvciB0aGUgY3VycmVudCBsaW5lLiAgRS5nLgorCQkgKiBpbnNpZGUgYSBwb3N0LWNvbnRleHQgd2luZG93LCB3ZSB3aWxsIHNob3cgdGhlIGN1cnJlbnQKKwkJICogbGluZSBhcyBhIGNvbnRleHQgYXJvdW5kIHRoZSBwcmV2aW91cyBoaXQgd2hlbiBpdAorCQkgKiBkb2Vzbid0IGhpdC4KKwkJICovCisJCWlmICh0cnlfbG9va2FoZWFkCisJCSAgICAmJiAhKGxhc3RfaGl0CisJCQkgJiYgbG5vIDw9IGxhc3RfaGl0ICsgb3B0LT5wb3N0X2NvbnRleHQpCisJCSAgICAmJiBsb29rX2FoZWFkKG9wdCwgJmxlZnQsICZsbm8sICZib2wpKQorCQkJYnJlYWs7CiAJCWVvbCA9IGVuZF9vZl9saW5lKGJvbCwgJmxlZnQpOwogCQljaCA9ICplb2w7CiAJCSplb2wgPSAwOwpAQCAtNTg4LDcgKzg1Niw5IEBACiAJCQlpZiAob3B0LT5zdGF0dXNfb25seSkKIAkJCQlyZXR1cm4gMTsKIAkJCWlmIChiaW5hcnlfbWF0Y2hfb25seSkgewotCQkJCXByaW50ZigiQmluYXJ5IGZpbGUgJXMgbWF0Y2hlc1xuIiwgbmFtZSk7CisJCQkJb3B0LT5vdXRwdXQob3B0LCAiQmluYXJ5IGZpbGUgIiwgMTIpOworCQkJCW9wdC0+b3V0cHV0KG9wdCwgbmFtZSwgc3RybGVuKG5hbWUpKTsKKwkJCQlvcHQtPm91dHB1dChvcHQsICIgbWF0Y2hlc1xuIiwgOSk7CiAJCQkJcmV0dXJuIDE7CiAJCQl9CiAJCQlpZiAob3B0LT5uYW1lX29ubHkpIHsKQEAgLTYwMSw0NSArODcxLDIwIEBACiAJCQkgKiB0aGUgY29udGV4dCB3aGljaCBpcyBub25zZW5zZSwgYnV0IHRoZSB1c2VyCiAJCQkgKiBkZXNlcnZlcyB0byBnZXQgdGhhdCA7LSkuCiAJCQkgKi8KLQkJCWlmIChvcHQtPnByZV9jb250ZXh0KSB7Ci0JCQkJdW5zaWduZWQgZnJvbTsKLQkJCQlpZiAob3B0LT5wcmVfY29udGV4dCA8IGxubykKLQkJCQkJZnJvbSA9IGxubyAtIG9wdC0+cHJlX2NvbnRleHQ7Ci0JCQkJZWxzZQotCQkJCQlmcm9tID0gMTsKLQkJCQlpZiAoZnJvbSA8PSBsYXN0X3Nob3duKQotCQkJCQlmcm9tID0gbGFzdF9zaG93biArIDE7Ci0JCQkJaWYgKGxhc3Rfc2hvd24gJiYgZnJvbSAhPSBsYXN0X3Nob3duICsgMSkKLQkJCQkJZnB1dHMoaHVua19tYXJrLCBzdGRvdXQpOwotCQkJCXdoaWxlIChmcm9tIDwgbG5vKSB7Ci0JCQkJCXBjbCA9ICZwcmV2W2xuby1mcm9tLTFdOwotCQkJCQlzaG93X2xpbmUob3B0LCBwY2wtPmJvbCwgcGNsLT5lb2wsCi0JCQkJCQkgIG5hbWUsIGZyb20sICctJyk7Ci0JCQkJCWZyb20rKzsKLQkJCQl9Ci0JCQkJbGFzdF9zaG93biA9IGxuby0xOwotCQkJfQotCQkJaWYgKGxhc3Rfc2hvd24gJiYgbG5vICE9IGxhc3Rfc2hvd24gKyAxKQotCQkJCWZwdXRzKGh1bmtfbWFyaywgc3Rkb3V0KTsKKwkJCWlmIChvcHQtPnByZV9jb250ZXh0KQorCQkJCXNob3dfcHJlX2NvbnRleHQob3B0LCBuYW1lLCBidWYsIGJvbCwgbG5vKTsKKwkJCWVsc2UgaWYgKG9wdC0+ZnVuY25hbWUpCisJCQkJc2hvd19mdW5jbmFtZV9saW5lKG9wdCwgbmFtZSwgYnVmLCBib2wsIGxubyk7CiAJCQlpZiAoIW9wdC0+Y291bnQpCiAJCQkJc2hvd19saW5lKG9wdCwgYm9sLCBlb2wsIG5hbWUsIGxubywgJzonKTsKLQkJCWxhc3Rfc2hvd24gPSBsYXN0X2hpdCA9IGxubzsKKwkJCWxhc3RfaGl0ID0gbG5vOwogCQl9CiAJCWVsc2UgaWYgKGxhc3RfaGl0ICYmCiAJCQkgbG5vIDw9IGxhc3RfaGl0ICsgb3B0LT5wb3N0X2NvbnRleHQpIHsKIAkJCS8qIElmIHRoZSBsYXN0IGhpdCBpcyB3aXRoaW4gdGhlIHBvc3QgY29udGV4dCwKIAkJCSAqIHdlIG5lZWQgdG8gc2hvdyB0aGlzIGxpbmUuCiAJCQkgKi8KLQkJCWlmIChsYXN0X3Nob3duICYmIGxubyAhPSBsYXN0X3Nob3duICsgMSkKLQkJCQlmcHV0cyhodW5rX21hcmssIHN0ZG91dCk7CiAJCQlzaG93X2xpbmUob3B0LCBib2wsIGVvbCwgbmFtZSwgbG5vLCAnLScpOwotCQkJbGFzdF9zaG93biA9IGxubzsKLQkJfQotCQlpZiAob3B0LT5wcmVfY29udGV4dCkgewotCQkJbWVtbW92ZShwcmV2KzEsIHByZXYsCi0JCQkJKG9wdC0+cHJlX2NvbnRleHQtMSkgKiBzaXplb2YoKnByZXYpKTsKLQkJCXByZXYtPmJvbCA9IGJvbDsKLQkJCXByZXYtPmVvbCA9IGVvbDsKIAkJfQogCiAJbmV4dF9saW5lOgpAQCAtNjUwLDcgKzg5NSw2IEBACiAJCWxubysrOwogCX0KIAotCWZyZWUocHJldik7CiAJaWYgKGNvbGxlY3RfaGl0cykKIAkJcmV0dXJuIDA7CiAKQEAgLTY2MiwxNCArOTA2LDIxIEBACiAJCXJldHVybiAxOwogCX0KIAorCXhkaWZmX2NsZWFyX2ZpbmRfZnVuYygmeGVjZmcpOworCW9wdC0+cHJpdiA9IE5VTEw7CisKIAkvKiBORUVEU1dPUks6CiAJICogVGhlIHJlYWwgImdyZXAgLWMgZm9vICouYyIgZ2l2ZXMgbWFueSAiYmFyLmM6MCIgbGluZXMsCiAJICogd2hpY2ggZmVlbHMgbW9zdGx5IHVzZWxlc3MgYnV0IHNvbWV0aW1lcyB1c2VmdWwuICBNYXliZQogCSAqIG1ha2UgaXQgYW5vdGhlciBvcHRpb24/ICBGb3Igbm93IHN1cHByZXNzIHRoZW0uCiAJICovCi0JaWYgKG9wdC0+Y291bnQgJiYgY291bnQpCi0JCXByaW50ZigiJXMlYyV1XG4iLCBuYW1lLAotCQkgICAgICAgb3B0LT5udWxsX2ZvbGxvd2luZ19uYW1lID8gJ1wwJyA6ICc6JywgY291bnQpOworCWlmIChvcHQtPmNvdW50ICYmIGNvdW50KSB7CisJCWNoYXIgYnVmWzMyXTsKKwkJb3B0LT5vdXRwdXQob3B0LCBuYW1lLCBzdHJsZW4obmFtZSkpOworCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWMldVxuIiwKKwkJCSBvcHQtPm51bGxfZm9sbG93aW5nX25hbWUgPyAnXDAnIDogJzonLCBjb3VudCk7CisJCW9wdC0+b3V0cHV0KG9wdCwgYnVmLCBzdHJsZW4oYnVmKSk7CisJfQogCXJldHVybiAhIWxhc3RfaGl0OwogfQogCmRpZmYgLS1naXQgYS9ncmVwLmggYi9ncmVwLmgKaW5kZXggYTY3MDA1ZC4uZDM1YmMyOSAxMDA2NDQKLS0tIGEvZ3JlcC5oCisrKyBiL2dyZXAuaApAQCAtMzIsNiArMzIsNyBAQAogCWVudW0gZ3JlcF9oZWFkZXJfZmllbGQgZmllbGQ7CiAJcmVnZXhfdCByZWdleHA7CiAJdW5zaWduZWQgZml4ZWQ6MTsKKwl1bnNpZ25lZCBpZ25vcmVfY2FzZToxOwogCXVuc2lnbmVkIHdvcmRfcmVnZXhwOjE7CiB9OwogCkBAIC01OCwzMiArNTksNDMgQEAKIHN0cnVjdCBncmVwX29wdCB7CiAJc3RydWN0IGdyZXBfcGF0ICpwYXR0ZXJuX2xpc3Q7CiAJc3RydWN0IGdyZXBfcGF0ICoqcGF0dGVybl90YWlsOworCXN0cnVjdCBncmVwX3BhdCAqaGVhZGVyX2xpc3Q7CisJc3RydWN0IGdyZXBfcGF0ICoqaGVhZGVyX3RhaWw7CiAJc3RydWN0IGdyZXBfZXhwciAqcGF0dGVybl9leHByZXNzaW9uOworCWNvbnN0IGNoYXIgKnByZWZpeDsKIAlpbnQgcHJlZml4X2xlbmd0aDsKIAlyZWdleF90IHJlZ2V4cDsKLQl1bnNpZ25lZCBsaW5lbnVtOjE7Ci0JdW5zaWduZWQgaW52ZXJ0OjE7Ci0JdW5zaWduZWQgc3RhdHVzX29ubHk6MTsKLQl1bnNpZ25lZCBuYW1lX29ubHk6MTsKLQl1bnNpZ25lZCB1bm1hdGNoX25hbWVfb25seToxOwotCXVuc2lnbmVkIGNvdW50OjE7Ci0JdW5zaWduZWQgd29yZF9yZWdleHA6MTsKLQl1bnNpZ25lZCBmaXhlZDoxOwotCXVuc2lnbmVkIGFsbF9tYXRjaDoxOworCWludCBsaW5lbnVtOworCWludCBpbnZlcnQ7CisJaW50IGlnbm9yZV9jYXNlOworCWludCBzdGF0dXNfb25seTsKKwlpbnQgbmFtZV9vbmx5OworCWludCB1bm1hdGNoX25hbWVfb25seTsKKwlpbnQgY291bnQ7CisJaW50IHdvcmRfcmVnZXhwOworCWludCBmaXhlZDsKKwlpbnQgYWxsX21hdGNoOwogI2RlZmluZSBHUkVQX0JJTkFSWV9ERUZBVUxUCTAKICNkZWZpbmUgR1JFUF9CSU5BUllfTk9NQVRDSAkxCiAjZGVmaW5lIEdSRVBfQklOQVJZX1RFWFQJMgotCXVuc2lnbmVkIGJpbmFyeToyOwotCXVuc2lnbmVkIGV4dGVuZGVkOjE7Ci0JdW5zaWduZWQgcmVsYXRpdmU6MTsKLQl1bnNpZ25lZCBwYXRobmFtZToxOwotCXVuc2lnbmVkIG51bGxfZm9sbG93aW5nX25hbWU6MTsKKwlpbnQgYmluYXJ5OworCWludCBleHRlbmRlZDsKKwlpbnQgcmVsYXRpdmU7CisJaW50IHBhdGhuYW1lOworCWludCBudWxsX2ZvbGxvd2luZ19uYW1lOwogCWludCBjb2xvcjsKKwlpbnQgbWF4X2RlcHRoOworCWludCBmdW5jbmFtZTsKIAljaGFyIGNvbG9yX21hdGNoW0NPTE9SX01BWExFTl07Ci0JY29uc3QgY2hhciAqY29sb3JfZXh0ZXJuYWw7CiAJaW50IHJlZ2ZsYWdzOwogCXVuc2lnbmVkIHByZV9jb250ZXh0OwogCXVuc2lnbmVkIHBvc3RfY29udGV4dDsKKwl1bnNpZ25lZCBsYXN0X3Nob3duOworCWludCBzaG93X2h1bmtfbWFyazsKKwl2b2lkICpwcml2OworCisJdm9pZCAoKm91dHB1dCkoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKTsKKwl2b2lkICpvdXRwdXRfcHJpdjsKIH07CiAKIGV4dGVybiB2b2lkIGFwcGVuZF9ncmVwX3BhdHRlcm4oc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNvbnN0IGNoYXIgKnBhdCwgY29uc3QgY2hhciAqb3JpZ2luLCBpbnQgbm8sIGVudW0gZ3JlcF9wYXRfdG9rZW4gdCk7CkBAIC05Miw0ICsxMDQsNyBAQAogZXh0ZXJuIHZvaWQgZnJlZV9ncmVwX3BhdHRlcm5zKHN0cnVjdCBncmVwX29wdCAqb3B0KTsKIGV4dGVybiBpbnQgZ3JlcF9idWZmZXIoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplKTsKIAorZXh0ZXJuIHN0cnVjdCBncmVwX29wdCAqZ3JlcF9vcHRfZHVwKGNvbnN0IHN0cnVjdCBncmVwX29wdCAqb3B0KTsKK2V4dGVybiBpbnQgZ3JlcF90aHJlYWRzX29rKGNvbnN0IHN0cnVjdCBncmVwX29wdCAqb3B0KTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9oZWxwLmMgYi9oZWxwLmMKaW5kZXggZGEwY2NhMC4uN2Y0OTI4ZSAxMDA2NDQKLS0tIGEvaGVscC5jCisrKyBiL2hlbHAuYwpAQCAtMTAwLDcgKzEwMCw3IEBACiAKIAlpZiAoc3BhY2UgPCBtYXhfY29scykKIAkJY29scyA9IG1heF9jb2xzIC8gc3BhY2U7Ci0Jcm93cyA9IChjbWRzLT5jbnQgKyBjb2xzIC0gMSkgLyBjb2xzOworCXJvd3MgPSBESVZfUk9VTkRfVVAoY21kcy0+Y250LCBjb2xzKTsKIAogCWZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHsKIAkJcHJpbnRmKCIgICIpOwpAQCAtMTI2LDggKzEyNiw4IEBACiAJICAgICFTX0lTUkVHKHN0LnN0X21vZGUpKQogCQlyZXR1cm4gMDsKIAotI2lmZGVmIF9fTUlOR1czMl9fCi0JLyogY2Fubm90IHRydXN0IHRoZSBleGVjdXRhYmxlIGJpdCwgcGVlayBpbnRvIHRoZSBmaWxlIGluc3RlYWQgKi8KKyNpZmRlZiBXSU4zMgorewkvKiBjYW5ub3QgdHJ1c3QgdGhlIGV4ZWN1dGFibGUgYml0LCBwZWVrIGludG8gdGhlIGZpbGUgaW5zdGVhZCAqLwogCWNoYXIgYnVmWzNdID0geyAwIH07CiAJaW50IG47CiAJaW50IGZkID0gb3BlbihuYW1lLCBPX1JET05MWSk7CkBAIC0xNDAsNiArMTQwLDcgQEAKIAkJCQlzdC5zdF9tb2RlIHw9IFNfSVhVU1I7CiAJCWNsb3NlKGZkKTsKIAl9Cit9CiAjZW5kaWYKIAlyZXR1cm4gc3Quc3RfbW9kZSAmIFNfSVhVU1I7CiB9CkBAIC0yOTYsNiArMjk3LDkgQEAKIAlvbGQtPm5hbWVzID0gTlVMTDsKIH0KIAorLyogQW4gZW1waXJpY2FsbHkgZGVyaXZlZCBtYWdpYyBudW1iZXIgKi8KKyNkZWZpbmUgU0lNSUxBUl9FTk9VR0goeCkgKCh4KSA8IDYpCisKIGNvbnN0IGNoYXIgKmhlbHBfdW5rbm93bl9jbWQoY29uc3QgY2hhciAqY21kKQogewogCWludCBpLCBuLCBiZXN0X3NpbWlsYXJpdHkgPSAwOwpAQCAtMzMwLDcgKzMzNCw3IEBACiAJbiA9IDE7CiAJd2hpbGUgKG4gPCBtYWluX2NtZHMuY250ICYmIGJlc3Rfc2ltaWxhcml0eSA9PSBtYWluX2NtZHMubmFtZXNbbl0tPmxlbikKIAkJKytuOwotCWlmIChhdXRvY29ycmVjdCAmJiBuID09IDEpIHsKKwlpZiAoYXV0b2NvcnJlY3QgJiYgbiA9PSAxICYmIFNJTUlMQVJfRU5PVUdIKGJlc3Rfc2ltaWxhcml0eSkpIHsKIAkJY29uc3QgY2hhciAqYXNzdW1lZCA9IG1haW5fY21kcy5uYW1lc1swXS0+bmFtZTsKIAkJbWFpbl9jbWRzLm5hbWVzWzBdID0gTlVMTDsKIAkJY2xlYW5fY21kbmFtZXMoJm1haW5fY21kcyk7CkBAIC0zNDYsOSArMzUwLDkgQEAKIAkJcmV0dXJuIGFzc3VtZWQ7CiAJfQogCi0JZnByaW50ZihzdGRlcnIsICJnaXQ6ICclcycgaXMgbm90IGEgZ2l0LWNvbW1hbmQuIFNlZSAnZ2l0IC0taGVscCcuXG4iLCBjbWQpOworCWZwcmludGYoc3RkZXJyLCAiZ2l0OiAnJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kLiBTZWUgJ2dpdCAtLWhlbHAnLlxuIiwgY21kKTsKIAotCWlmIChiZXN0X3NpbWlsYXJpdHkgPCA2KSB7CisJaWYgKFNJTUlMQVJfRU5PVUdIKGJlc3Rfc2ltaWxhcml0eSkpIHsKIAkJZnByaW50ZihzdGRlcnIsICJcbkRpZCB5b3UgbWVhbiAlcz9cbiIsCiAJCQluIDwgMiA/ICJ0aGlzIjogIm9uZSBvZiB0aGVzZSIpOwogCmRpZmYgLS1naXQgYS9oZXguYyBiL2hleC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNDAyZmIKLS0tIC9kZXYvbnVsbAorKysgYi9oZXguYwpAQCAtMCwwICsxLDY3IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKworY29uc3Qgc2lnbmVkIGNoYXIgaGV4dmFsX3RhYmxlWzI1Nl0gPSB7CisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDAwLTA3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDA4LTBmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDEwLTE3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDE4LTFmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDIwLTI3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDI4LTJmICovCisJICAwLCAgMSwgIDIsICAzLCAgNCwgIDUsICA2LCAgNywJCS8qIDMwLTM3ICovCisJICA4LCAgOSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDM4LTNmICovCisJIC0xLCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAtMSwJCS8qIDQwLTQ3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDQ4LTRmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDUwLTU3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDU4LTVmICovCisJIC0xLCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAtMSwJCS8qIDYwLTY3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDY4LTY3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDcwLTc3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDc4LTdmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDgwLTg3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDg4LThmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDkwLTk3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDk4LTlmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGEwLWE3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGE4LWFmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGIwLWI3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGI4LWJmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGMwLWM3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGM4LWNmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGQwLWQ3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGQ4LWRmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGUwLWU3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGU4LWVmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGYwLWY3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGY4LWZmICovCit9OworCitpbnQgZ2V0X3NoYTFfaGV4KGNvbnN0IGNoYXIgKmhleCwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykgeworCQl1bnNpZ25lZCBpbnQgdmFsID0gKGhleHZhbChoZXhbMF0pIDw8IDQpIHwgaGV4dmFsKGhleFsxXSk7CisJCWlmICh2YWwgJiB+MHhmZikKKwkJCXJldHVybiAtMTsKKwkJKnNoYTErKyA9IHZhbDsKKwkJaGV4ICs9IDI7CisJfQorCXJldHVybiAwOworfQorCitjaGFyICpzaGExX3RvX2hleChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0YXRpYyBpbnQgYnVmbm87CisJc3RhdGljIGNoYXIgaGV4YnVmZmVyWzRdWzUwXTsKKwlzdGF0aWMgY29uc3QgY2hhciBoZXhbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKKwljaGFyICpidWZmZXIgPSBoZXhidWZmZXJbMyAmICsrYnVmbm9dLCAqYnVmID0gYnVmZmVyOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDIwOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IHZhbCA9ICpzaGExKys7CisJCSpidWYrKyA9IGhleFt2YWwgPj4gNF07CisJCSpidWYrKyA9IGhleFt2YWwgJiAweGZdOworCX0KKwkqYnVmID0gJ1wwJzsKKworCXJldHVybiBidWZmZXI7Cit9CmRpZmYgLS1naXQgYS9odHRwLWJhY2tlbmQuYyBiL2h0dHAtYmFja2VuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NWMxMmIKLS0tIC9kZXYvbnVsbAorKysgYi9odHRwLWJhY2tlbmQuYwpAQCAtMCwwICsxLDY1OCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInBrdC1saW5lLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiZXhlY19jbWQuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIGNvbnRlbnRfdHlwZVtdID0gIkNvbnRlbnQtVHlwZSI7CitzdGF0aWMgY29uc3QgY2hhciBjb250ZW50X2xlbmd0aFtdID0gIkNvbnRlbnQtTGVuZ3RoIjsKK3N0YXRpYyBjb25zdCBjaGFyIGxhc3RfbW9kaWZpZWRbXSA9ICJMYXN0LU1vZGlmaWVkIjsKK3N0YXRpYyBpbnQgZ2V0YW55ZmlsZSA9IDE7CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnF1ZXJ5X3BhcmFtczsKKworc3RydWN0IHJwY19zZXJ2aWNlIHsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKmNvbmZpZ19uYW1lOworCXNpZ25lZCBlbmFibGVkIDogMjsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcnBjX3NlcnZpY2UgcnBjX3NlcnZpY2VbXSA9IHsKKwl7ICJ1cGxvYWQtcGFjayIsICJ1cGxvYWRwYWNrIiwgMSB9LAorCXsgInJlY2VpdmUtcGFjayIsICJyZWNlaXZlcGFjayIsIC0xIH0sCit9OworCitzdGF0aWMgaW50IGRlY29kZV9jaGFyKGNvbnN0IGNoYXIgKnEpCit7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciB2YWwgPSAwOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJdW5zaWduZWQgY2hhciBjID0gKnErKzsKKwkJdmFsIDw8PSA0OworCQlpZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpCisJCQl2YWwgKz0gYyAtICcwJzsKKwkJZWxzZSBpZiAoYyA+PSAnYScgJiYgYyA8PSAnZicpCisJCQl2YWwgKz0gYyAtICdhJyArIDEwOworCQllbHNlIGlmIChjID49ICdBJyAmJiBjIDw9ICdGJykKKwkJCXZhbCArPSBjIC0gJ0EnICsgMTA7CisJCWVsc2UKKwkJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGNoYXIgKmRlY29kZV9wYXJhbWV0ZXIoY29uc3QgY2hhciAqKnF1ZXJ5LCBpbnQgaXNfbmFtZSkKK3sKKwljb25zdCBjaGFyICpxID0gKnF1ZXJ5OworCXN0cnVjdCBzdHJidWYgb3V0OworCisJc3RyYnVmX2luaXQoJm91dCwgMTYpOworCWRvIHsKKwkJdW5zaWduZWQgY2hhciBjID0gKnE7CisKKwkJaWYgKCFjKQorCQkJYnJlYWs7CisJCWlmIChjID09ICcmJyB8fCAoaXNfbmFtZSAmJiBjID09ICc9JykpIHsKKwkJCXErKzsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGMgPT0gJyUnKSB7CisJCQlpbnQgdmFsID0gZGVjb2RlX2NoYXIocSArIDEpOworCQkJaWYgKDAgPD0gdmFsKSB7CisJCQkJc3RyYnVmX2FkZGNoKCZvdXQsIHZhbCk7CisJCQkJcSArPSAzOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJaWYgKGMgPT0gJysnKQorCQkJc3RyYnVmX2FkZGNoKCZvdXQsICcgJyk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRjaCgmb3V0LCBjKTsKKwkJcSsrOworCX0gd2hpbGUgKDEpOworCSpxdWVyeSA9IHE7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJm91dCwgTlVMTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmdldF9wYXJhbWV0ZXJzKHZvaWQpCit7CisJaWYgKCFxdWVyeV9wYXJhbXMpIHsKKwkJY29uc3QgY2hhciAqcXVlcnkgPSBnZXRlbnYoIlFVRVJZX1NUUklORyIpOworCisJCXF1ZXJ5X3BhcmFtcyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpxdWVyeV9wYXJhbXMpKTsKKwkJd2hpbGUgKHF1ZXJ5ICYmICpxdWVyeSkgeworCQkJY2hhciAqbmFtZSA9IGRlY29kZV9wYXJhbWV0ZXIoJnF1ZXJ5LCAxKTsKKwkJCWNoYXIgKnZhbHVlID0gZGVjb2RlX3BhcmFtZXRlcigmcXVlcnksIDApOworCQkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmk7CisKKwkJCWkgPSBzdHJpbmdfbGlzdF9sb29rdXAobmFtZSwgcXVlcnlfcGFyYW1zKTsKKwkJCWlmICghaSkKKwkJCQlpID0gc3RyaW5nX2xpc3RfaW5zZXJ0KG5hbWUsIHF1ZXJ5X3BhcmFtcyk7CisJCQllbHNlCisJCQkJZnJlZShpLT51dGlsKTsKKwkJCWktPnV0aWwgPSB2YWx1ZTsKKwkJfQorCX0KKwlyZXR1cm4gcXVlcnlfcGFyYW1zOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X3BhcmFtZXRlcihjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppOworCWkgPSBzdHJpbmdfbGlzdF9sb29rdXAobmFtZSwgZ2V0X3BhcmFtZXRlcnMoKSk7CisJcmV0dXJuIGkgPyBpLT51dGlsIDogTlVMTDsKK30KKworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSkKK3N0YXRpYyB2b2lkIGZvcm1hdF93cml0ZShpbnQgZmQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXN0YXRpYyBjaGFyIGJ1ZmZlclsxMDI0XTsKKworCXZhX2xpc3QgYXJnczsKKwl1bnNpZ25lZCBuOworCisJdmFfc3RhcnQoYXJncywgZm10KTsKKwluID0gdnNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCWlmIChuID49IHNpemVvZihidWZmZXIpKQorCQlkaWUoInByb3RvY29sIGVycm9yOiBpbXBvc3NpYmx5IGxvbmcgbGluZSIpOworCisJc2FmZV93cml0ZShmZCwgYnVmZmVyLCBuKTsKK30KKworc3RhdGljIHZvaWQgaHR0cF9zdGF0dXModW5zaWduZWQgY29kZSwgY29uc3QgY2hhciAqbXNnKQoreworCWZvcm1hdF93cml0ZSgxLCAiU3RhdHVzOiAldSAlc1xyXG4iLCBjb2RlLCBtc2cpOworfQorCitzdGF0aWMgdm9pZCBoZHJfc3RyKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWZvcm1hdF93cml0ZSgxLCAiJXM6ICVzXHJcbiIsIG5hbWUsIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgaGRyX2ludChjb25zdCBjaGFyICpuYW1lLCB1aW50bWF4X3QgdmFsdWUpCit7CisJZm9ybWF0X3dyaXRlKDEsICIlczogJSIgUFJJdU1BWCAiXHJcbiIsIG5hbWUsIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgaGRyX2RhdGUoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyB3aGVuKQoreworCWNvbnN0IGNoYXIgKnZhbHVlID0gc2hvd19kYXRlKHdoZW4sIDAsIERBVEVfUkZDMjgyMik7CisJaGRyX3N0cihuYW1lLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGhkcl9ub2NhY2hlKHZvaWQpCit7CisJaGRyX3N0cigiRXhwaXJlcyIsICJGcmksIDAxIEphbiAxOTgwIDAwOjAwOjAwIEdNVCIpOworCWhkcl9zdHIoIlByYWdtYSIsICJuby1jYWNoZSIpOworCWhkcl9zdHIoIkNhY2hlLUNvbnRyb2wiLCAibm8tY2FjaGUsIG1heC1hZ2U9MCwgbXVzdC1yZXZhbGlkYXRlIik7Cit9CisKK3N0YXRpYyB2b2lkIGhkcl9jYWNoZV9mb3JldmVyKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBub3cgPSB0aW1lKE5VTEwpOworCWhkcl9kYXRlKCJEYXRlIiwgbm93KTsKKwloZHJfZGF0ZSgiRXhwaXJlcyIsIG5vdyArIDMxNTM2MDAwKTsKKwloZHJfc3RyKCJDYWNoZS1Db250cm9sIiwgInB1YmxpYywgbWF4LWFnZT0zMTUzNjAwMCIpOworfQorCitzdGF0aWMgdm9pZCBlbmRfaGVhZGVycyh2b2lkKQoreworCXNhZmVfd3JpdGUoMSwgIlxyXG4iLCAyKTsKK30KKworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKK3N0YXRpYyBOT1JFVFVSTiB2b2lkIG5vdF9mb3VuZChjb25zdCBjaGFyICplcnIsIC4uLikKK3sKKwl2YV9saXN0IHBhcmFtczsKKworCWh0dHBfc3RhdHVzKDQwNCwgIk5vdCBGb3VuZCIpOworCWhkcl9ub2NhY2hlKCk7CisJZW5kX2hlYWRlcnMoKTsKKworCXZhX3N0YXJ0KHBhcmFtcywgZXJyKTsKKwlpZiAoZXJyICYmICplcnIpCisJCXZmcHJpbnRmKHN0ZGVyciwgZXJyLCBwYXJhbXMpOworCXZhX2VuZChwYXJhbXMpOworCWV4aXQoMCk7Cit9CisKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCitzdGF0aWMgTk9SRVRVUk4gdm9pZCBmb3JiaWRkZW4oY29uc3QgY2hhciAqZXJyLCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisKKwlodHRwX3N0YXR1cyg0MDMsICJGb3JiaWRkZW4iKTsKKwloZHJfbm9jYWNoZSgpOworCWVuZF9oZWFkZXJzKCk7CisKKwl2YV9zdGFydChwYXJhbXMsIGVycik7CisJaWYgKGVyciAmJiAqZXJyKQorCQl2ZnByaW50ZihzdGRlcnIsIGVyciwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKKwlleGl0KDApOworfQorCitzdGF0aWMgdm9pZCBzZWxlY3RfZ2V0YW55ZmlsZSh2b2lkKQoreworCWlmICghZ2V0YW55ZmlsZSkKKwkJZm9yYmlkZGVuKCJVbnN1cHBvcnRlZCBzZXJ2aWNlOiBnZXRhbnlmaWxlIik7Cit9CisKK3N0YXRpYyB2b2lkIHNlbmRfc3RyYnVmKGNvbnN0IGNoYXIgKnR5cGUsIHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwloZHJfaW50KGNvbnRlbnRfbGVuZ3RoLCBidWYtPmxlbik7CisJaGRyX3N0cihjb250ZW50X3R5cGUsIHR5cGUpOworCWVuZF9oZWFkZXJzKCk7CisJc2FmZV93cml0ZSgxLCBidWYtPmJ1ZiwgYnVmLT5sZW4pOworfQorCitzdGF0aWMgdm9pZCBzZW5kX2xvY2FsX2ZpbGUoY29uc3QgY2hhciAqdGhlX3R5cGUsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY29uc3QgY2hhciAqcCA9IGdpdF9wYXRoKCIlcyIsIG5hbWUpOworCXNpemVfdCBidWZfYWxsb2MgPSA4MTkyOworCWNoYXIgKmJ1ZiA9IHhtYWxsb2MoYnVmX2FsbG9jKTsKKwlpbnQgZmQ7CisJc3RydWN0IHN0YXQgc2I7CisKKwlmZCA9IG9wZW4ocCwgT19SRE9OTFkpOworCWlmIChmZCA8IDApCisJCW5vdF9mb3VuZCgiQ2Fubm90IG9wZW4gJyVzJzogJXMiLCBwLCBzdHJlcnJvcihlcnJubykpOworCWlmIChmc3RhdChmZCwgJnNiKSA8IDApCisJCWRpZV9lcnJubygiQ2Fubm90IHN0YXQgJyVzJyIsIHApOworCisJaGRyX2ludChjb250ZW50X2xlbmd0aCwgc2Iuc3Rfc2l6ZSk7CisJaGRyX3N0cihjb250ZW50X3R5cGUsIHRoZV90eXBlKTsKKwloZHJfZGF0ZShsYXN0X21vZGlmaWVkLCBzYi5zdF9tdGltZSk7CisJZW5kX2hlYWRlcnMoKTsKKworCWZvciAoOzspIHsKKwkJc3NpemVfdCBuID0geHJlYWQoZmQsIGJ1ZiwgYnVmX2FsbG9jKTsKKwkJaWYgKG4gPCAwKQorCQkJZGllX2Vycm5vKCJDYW5ub3QgcmVhZCAnJXMnIiwgcCk7CisJCWlmICghbikKKwkJCWJyZWFrOworCQlzYWZlX3dyaXRlKDEsIGJ1Ziwgbik7CisJfQorCWNsb3NlKGZkKTsKKwlmcmVlKGJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIGdldF90ZXh0X2ZpbGUoY2hhciAqbmFtZSkKK3sKKwlzZWxlY3RfZ2V0YW55ZmlsZSgpOworCWhkcl9ub2NhY2hlKCk7CisJc2VuZF9sb2NhbF9maWxlKCJ0ZXh0L3BsYWluIiwgbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9sb29zZV9vYmplY3QoY2hhciAqbmFtZSkKK3sKKwlzZWxlY3RfZ2V0YW55ZmlsZSgpOworCWhkcl9jYWNoZV9mb3JldmVyKCk7CisJc2VuZF9sb2NhbF9maWxlKCJhcHBsaWNhdGlvbi94LWdpdC1sb29zZS1vYmplY3QiLCBuYW1lKTsKK30KKworc3RhdGljIHZvaWQgZ2V0X3BhY2tfZmlsZShjaGFyICpuYW1lKQoreworCXNlbGVjdF9nZXRhbnlmaWxlKCk7CisJaGRyX2NhY2hlX2ZvcmV2ZXIoKTsKKwlzZW5kX2xvY2FsX2ZpbGUoImFwcGxpY2F0aW9uL3gtZ2l0LXBhY2tlZC1vYmplY3RzIiwgbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9pZHhfZmlsZShjaGFyICpuYW1lKQoreworCXNlbGVjdF9nZXRhbnlmaWxlKCk7CisJaGRyX2NhY2hlX2ZvcmV2ZXIoKTsKKwlzZW5kX2xvY2FsX2ZpbGUoImFwcGxpY2F0aW9uL3gtZ2l0LXBhY2tlZC1vYmplY3RzLXRvYyIsIG5hbWUpOworfQorCitzdGF0aWMgaW50IGh0dHBfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKHZhciwgImh0dHAuZ2V0YW55ZmlsZSIpKSB7CisJCWdldGFueWZpbGUgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghcHJlZml4Y21wKHZhciwgImh0dHAuIikpIHsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocnBjX3NlcnZpY2UpOyBpKyspIHsKKwkJCXN0cnVjdCBycGNfc2VydmljZSAqc3ZjID0gJnJwY19zZXJ2aWNlW2ldOworCQkJaWYgKCFzdHJjbXAodmFyICsgNSwgc3ZjLT5jb25maWdfbmFtZSkpIHsKKwkJCQlzdmMtPmVuYWJsZWQgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwl9CisKKwkvKiB3ZSBhcmUgbm90IGludGVyZXN0ZWQgaW4gcGFyc2luZyBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBoZXJlICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcnBjX3NlcnZpY2UgKnNlbGVjdF9zZXJ2aWNlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHJwY19zZXJ2aWNlICpzdmMgPSBOVUxMOworCWludCBpOworCisJaWYgKHByZWZpeGNtcChuYW1lLCAiZ2l0LSIpKQorCQlmb3JiaWRkZW4oIlVuc3VwcG9ydGVkIHNlcnZpY2U6ICclcyciLCBuYW1lKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJwY19zZXJ2aWNlKTsgaSsrKSB7CisJCXN0cnVjdCBycGNfc2VydmljZSAqcyA9ICZycGNfc2VydmljZVtpXTsKKwkJaWYgKCFzdHJjbXAocy0+bmFtZSwgbmFtZSArIDQpKSB7CisJCQlzdmMgPSBzOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXN2YykKKwkJZm9yYmlkZGVuKCJVbnN1cHBvcnRlZCBzZXJ2aWNlOiAnJXMnIiwgbmFtZSk7CisKKwlpZiAoc3ZjLT5lbmFibGVkIDwgMCkgeworCQljb25zdCBjaGFyICp1c2VyID0gZ2V0ZW52KCJSRU1PVEVfVVNFUiIpOworCQlzdmMtPmVuYWJsZWQgPSAodXNlciAmJiAqdXNlcikgPyAxIDogMDsKKwl9CisJaWYgKCFzdmMtPmVuYWJsZWQpCisJCWZvcmJpZGRlbigiU2VydmljZSBub3QgZW5hYmxlZDogJyVzJyIsIHN2Yy0+bmFtZSk7CisJcmV0dXJuIHN2YzsKK30KKworc3RhdGljIHZvaWQgaW5mbGF0ZV9yZXF1ZXN0KGNvbnN0IGNoYXIgKnByb2dfbmFtZSwgaW50IG91dCkKK3sKKwl6X3N0cmVhbSBzdHJlYW07CisJdW5zaWduZWQgY2hhciBpbl9idWZbODE5Ml07CisJdW5zaWduZWQgY2hhciBvdXRfYnVmWzgxOTJdOworCXVuc2lnbmVkIGxvbmcgY250ID0gMDsKKwlpbnQgcmV0OworCisJbWVtc2V0KCZzdHJlYW0sIDAsIHNpemVvZihzdHJlYW0pKTsKKwlyZXQgPSBpbmZsYXRlSW5pdDIoJnN0cmVhbSwgKDE1ICsgMTYpKTsKKwlpZiAocmV0ICE9IFpfT0spCisJCWRpZSgiY2Fubm90IHN0YXJ0IHpsaWIgaW5mbGF0ZXIsIHpsaWIgZXJyICVkIiwgcmV0KTsKKworCXdoaWxlICgxKSB7CisJCXNzaXplX3QgbiA9IHhyZWFkKDAsIGluX2J1Ziwgc2l6ZW9mKGluX2J1ZikpOworCQlpZiAobiA8PSAwKQorCQkJZGllKCJyZXF1ZXN0IGVuZGVkIGluIHRoZSBtaWRkbGUgb2YgdGhlIGd6aXAgc3RyZWFtIik7CisKKwkJc3RyZWFtLm5leHRfaW4gPSBpbl9idWY7CisJCXN0cmVhbS5hdmFpbF9pbiA9IG47CisKKwkJd2hpbGUgKDAgPCBzdHJlYW0uYXZhaWxfaW4pIHsKKwkJCWludCByZXQ7CisKKwkJCXN0cmVhbS5uZXh0X291dCA9IG91dF9idWY7CisJCQlzdHJlYW0uYXZhaWxfb3V0ID0gc2l6ZW9mKG91dF9idWYpOworCisJCQlyZXQgPSBpbmZsYXRlKCZzdHJlYW0sIFpfTk9fRkxVU0gpOworCQkJaWYgKHJldCAhPSBaX09LICYmIHJldCAhPSBaX1NUUkVBTV9FTkQpCisJCQkJZGllKCJ6bGliIGVycm9yIGluZmxhdGluZyByZXF1ZXN0LCByZXN1bHQgJWQiLCByZXQpOworCisJCQluID0gc3RyZWFtLnRvdGFsX291dCAtIGNudDsKKwkJCWlmICh3cml0ZV9pbl9mdWxsKG91dCwgb3V0X2J1ZiwgbikgIT0gbikKKwkJCQlkaWUoIiVzIGFib3J0ZWQgcmVhZGluZyByZXF1ZXN0IiwgcHJvZ19uYW1lKTsKKwkJCWNudCArPSBuOworCisJCQlpZiAocmV0ID09IFpfU1RSRUFNX0VORCkKKwkJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisKK2RvbmU6CisJaW5mbGF0ZUVuZCgmc3RyZWFtKTsKKwljbG9zZShvdXQpOworfQorCitzdGF0aWMgdm9pZCBydW5fc2VydmljZShjb25zdCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICplbmNvZGluZyA9IGdldGVudigiSFRUUF9DT05URU5UX0VOQ09ESU5HIik7CisJY29uc3QgY2hhciAqdXNlciA9IGdldGVudigiUkVNT1RFX1VTRVIiKTsKKwljb25zdCBjaGFyICpob3N0ID0gZ2V0ZW52KCJSRU1PVEVfQUREUiIpOworCWNoYXIgKmVudlszXTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCBnemlwcGVkX3JlcXVlc3QgPSAwOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNsZDsKKworCWlmIChlbmNvZGluZyAmJiAhc3RyY21wKGVuY29kaW5nLCAiZ3ppcCIpKQorCQlnemlwcGVkX3JlcXVlc3QgPSAxOworCWVsc2UgaWYgKGVuY29kaW5nICYmICFzdHJjbXAoZW5jb2RpbmcsICJ4LWd6aXAiKSkKKwkJZ3ppcHBlZF9yZXF1ZXN0ID0gMTsKKworCWlmICghdXNlciB8fCAhKnVzZXIpCisJCXVzZXIgPSAiYW5vbnltb3VzIjsKKwlpZiAoIWhvc3QgfHwgISpob3N0KQorCQlob3N0ID0gIihub25lKSI7CisKKwltZW1zZXQoJmVudiwgMCwgc2l6ZW9mKGVudikpOworCXN0cmJ1Zl9hZGRmKCZidWYsICJHSVRfQ09NTUlUVEVSX05BTUU9JXMiLCB1c2VyKTsKKwllbnZbMF0gPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgIkdJVF9DT01NSVRURVJfRU1BSUw9JXNAaHR0cC4lcyIsIHVzZXIsIGhvc3QpOworCWVudlsxXSA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisJZW52WzJdID0gTlVMTDsKKworCW1lbXNldCgmY2xkLCAwLCBzaXplb2YoY2xkKSk7CisJY2xkLmFyZ3YgPSBhcmd2OworCWNsZC5lbnYgPSAoY29uc3QgY2hhciAqY29uc3QgKillbnY7CisJaWYgKGd6aXBwZWRfcmVxdWVzdCkKKwkJY2xkLmluID0gLTE7CisJY2xkLmdpdF9jbWQgPSAxOworCWlmIChzdGFydF9jb21tYW5kKCZjbGQpKQorCQlleGl0KDEpOworCisJY2xvc2UoMSk7CisJaWYgKGd6aXBwZWRfcmVxdWVzdCkKKwkJaW5mbGF0ZV9yZXF1ZXN0KGFyZ3ZbMF0sIGNsZC5pbik7CisJZWxzZQorCQljbG9zZSgwKTsKKworCWlmIChmaW5pc2hfY29tbWFuZCgmY2xkKSkKKwkJZXhpdCgxKTsKKwlmcmVlKGVudlswXSk7CisJZnJlZShlbnZbMV0pOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgaW50IHNob3dfdGV4dF9yZWYoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwlpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpidWYgPSBjYl9kYXRhOworCXN0cnVjdCBvYmplY3QgKm8gPSBwYXJzZV9vYmplY3Qoc2hhMSk7CisJaWYgKCFvKQorCQlyZXR1cm4gMDsKKworCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiVzXHQlc1xuIiwgc2hhMV90b19oZXgoc2hhMSksIG5hbWUpOworCWlmIChvLT50eXBlID09IE9CSl9UQUcpIHsKKwkJbyA9IGRlcmVmX3RhZyhvLCBuYW1lLCAwKTsKKwkJaWYgKCFvKQorCQkJcmV0dXJuIDA7CisJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiVzXHQlc157fVxuIiwgc2hhMV90b19oZXgoby0+c2hhMSksIG5hbWUpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ2V0X2luZm9fcmVmcyhjaGFyICphcmcpCit7CisJY29uc3QgY2hhciAqc2VydmljZV9uYW1lID0gZ2V0X3BhcmFtZXRlcigic2VydmljZSIpOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwloZHJfbm9jYWNoZSgpOworCisJaWYgKHNlcnZpY2VfbmFtZSkgeworCQljb25zdCBjaGFyICphcmd2W10gPSB7TlVMTCAvKiBzZXJ2aWNlIG5hbWUgKi8sCisJCQkiLS1zdGF0ZWxlc3MtcnBjIiwgIi0tYWR2ZXJ0aXNlLXJlZnMiLAorCQkJIi4iLCBOVUxMfTsKKwkJc3RydWN0IHJwY19zZXJ2aWNlICpzdmMgPSBzZWxlY3Rfc2VydmljZShzZXJ2aWNlX25hbWUpOworCisJCXN0cmJ1Zl9hZGRmKCZidWYsICJhcHBsaWNhdGlvbi94LWdpdC0lcy1hZHZlcnRpc2VtZW50IiwKKwkJCXN2Yy0+bmFtZSk7CisJCWhkcl9zdHIoY29udGVudF90eXBlLCBidWYuYnVmKTsKKwkJZW5kX2hlYWRlcnMoKTsKKworCQlwYWNrZXRfd3JpdGUoMSwgIiMgc2VydmljZT1naXQtJXNcbiIsIHN2Yy0+bmFtZSk7CisJCXBhY2tldF9mbHVzaCgxKTsKKworCQlhcmd2WzBdID0gc3ZjLT5uYW1lOworCQlydW5fc2VydmljZShhcmd2KTsKKworCX0gZWxzZSB7CisJCXNlbGVjdF9nZXRhbnlmaWxlKCk7CisJCWZvcl9lYWNoX3JlZihzaG93X3RleHRfcmVmLCAmYnVmKTsKKwkJc2VuZF9zdHJidWYoInRleHQvcGxhaW4iLCAmYnVmKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9pbmZvX3BhY2tzKGNoYXIgKmFyZykKK3sKKwlzaXplX3Qgb2JqZGlybGVuID0gc3RybGVuKGdldF9vYmplY3RfZGlyZWN0b3J5KCkpOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHBhY2tlZF9naXQgKnA7CisJc2l6ZV90IGNudCA9IDA7CisKKwlzZWxlY3RfZ2V0YW55ZmlsZSgpOworCXByZXBhcmVfcGFja2VkX2dpdCgpOworCWZvciAocCA9IHBhY2tlZF9naXQ7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWlmIChwLT5wYWNrX2xvY2FsKQorCQkJY250Kys7CisJfQorCisJc3RyYnVmX2dyb3coJmJ1ZiwgY250ICogNTMgKyAyKTsKKwlmb3IgKHAgPSBwYWNrZWRfZ2l0OyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAocC0+cGFja19sb2NhbCkKKwkJCXN0cmJ1Zl9hZGRmKCZidWYsICJQICVzXG4iLCBwLT5wYWNrX25hbWUgKyBvYmpkaXJsZW4gKyA2KTsKKwl9CisJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOworCisJaGRyX25vY2FjaGUoKTsKKwlzZW5kX3N0cmJ1ZigidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsICZidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgdm9pZCBjaGVja19jb250ZW50X3R5cGUoY29uc3QgY2hhciAqYWNjZXB0ZWRfdHlwZSkKK3sKKwljb25zdCBjaGFyICphY3R1YWxfdHlwZSA9IGdldGVudigiQ09OVEVOVF9UWVBFIik7CisKKwlpZiAoIWFjdHVhbF90eXBlKQorCQlhY3R1YWxfdHlwZSA9ICIiOworCisJaWYgKHN0cmNtcChhY3R1YWxfdHlwZSwgYWNjZXB0ZWRfdHlwZSkpIHsKKwkJaHR0cF9zdGF0dXMoNDE1LCAiVW5zdXBwb3J0ZWQgTWVkaWEgVHlwZSIpOworCQloZHJfbm9jYWNoZSgpOworCQllbmRfaGVhZGVycygpOworCQlmb3JtYXRfd3JpdGUoMSwKKwkJCSJFeHBlY3RlZCBQT1NUIHdpdGggQ29udGVudC1UeXBlICclcycsIgorCQkJIiBidXQgcmVjZWl2ZWQgJyVzJyBpbnN0ZWFkLlxuIiwKKwkJCWFjY2VwdGVkX3R5cGUsIGFjdHVhbF90eXBlKTsKKwkJZXhpdCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNlcnZpY2VfcnBjKGNoYXIgKnNlcnZpY2VfbmFtZSkKK3sKKwljb25zdCBjaGFyICphcmd2W10gPSB7TlVMTCwgIi0tc3RhdGVsZXNzLXJwYyIsICIuIiwgTlVMTH07CisJc3RydWN0IHJwY19zZXJ2aWNlICpzdmMgPSBzZWxlY3Rfc2VydmljZShzZXJ2aWNlX25hbWUpOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfcmVzZXQoJmJ1Zik7CisJc3RyYnVmX2FkZGYoJmJ1ZiwgImFwcGxpY2F0aW9uL3gtZ2l0LSVzLXJlcXVlc3QiLCBzdmMtPm5hbWUpOworCWNoZWNrX2NvbnRlbnRfdHlwZShidWYuYnVmKTsKKworCWhkcl9ub2NhY2hlKCk7CisKKwlzdHJidWZfcmVzZXQoJmJ1Zik7CisJc3RyYnVmX2FkZGYoJmJ1ZiwgImFwcGxpY2F0aW9uL3gtZ2l0LSVzLXJlc3VsdCIsIHN2Yy0+bmFtZSk7CisJaGRyX3N0cihjb250ZW50X3R5cGUsIGJ1Zi5idWYpOworCisJZW5kX2hlYWRlcnMoKTsKKworCWFyZ3ZbMF0gPSBzdmMtPm5hbWU7CisJcnVuX3NlcnZpY2UoYXJndik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKK3N0YXRpYyBOT1JFVFVSTiB2b2lkIGRpZV93ZWJjZ2koY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykKK3sKKwljaGFyIGJ1ZmZlclsxMDAwXTsKKworCWh0dHBfc3RhdHVzKDUwMCwgIkludGVybmFsIFNlcnZlciBFcnJvciIpOworCWhkcl9ub2NhY2hlKCk7CisJZW5kX2hlYWRlcnMoKTsKKworCXZzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCBlcnIsIHBhcmFtcyk7CisJZnByaW50ZihzdGRlcnIsICJmYXRhbDogJXNcbiIsIGJ1ZmZlcik7CisJZXhpdCgwKTsKK30KKworc3RhdGljIGNoYXIqIGdldGRpcih2b2lkKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqcGF0aGluZm8gPSBnZXRlbnYoIlBBVEhfSU5GTyIpOworCWNoYXIgKnJvb3QgPSBnZXRlbnYoIkdJVF9QUk9KRUNUX1JPT1QiKTsKKwljaGFyICpwYXRoID0gZ2V0ZW52KCJQQVRIX1RSQU5TTEFURUQiKTsKKworCWlmIChyb290ICYmICpyb290KSB7CisJCWlmICghcGF0aGluZm8gfHwgISpwYXRoaW5mbykKKwkJCWRpZSgiR0lUX1BST0pFQ1RfUk9PVCBpcyBzZXQgYnV0IFBBVEhfSU5GTyBpcyBub3QiKTsKKwkJaWYgKGRhZW1vbl9hdm9pZF9hbGlhcyhwYXRoaW5mbykpCisJCQlkaWUoIiclcyc6IGFsaWFzZWQiLCBwYXRoaW5mbyk7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1Ziwgcm9vdCk7CisJCWlmIChidWYuYnVmW2J1Zi5sZW4gLSAxXSAhPSAnLycpCisJCQlzdHJidWZfYWRkY2goJmJ1ZiwgJy8nKTsKKwkJaWYgKHBhdGhpbmZvWzBdID09ICcvJykKKwkJCXBhdGhpbmZvKys7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgcGF0aGluZm8pOworCQlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKwl9IGVsc2UgaWYgKHBhdGggJiYgKnBhdGgpIHsKKwkJcmV0dXJuIHhzdHJkdXAocGF0aCk7CisJfSBlbHNlCisJCWRpZSgiTm8gR0lUX1BST0pFQ1RfUk9PVCBvciBQQVRIX1RSQU5TTEFURUQgZnJvbSBzZXJ2ZXIiKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBzZXJ2aWNlX2NtZCB7CisJY29uc3QgY2hhciAqbWV0aG9kOworCWNvbnN0IGNoYXIgKnBhdHRlcm47CisJdm9pZCAoKmltcCkoY2hhciAqKTsKK30gc2VydmljZXNbXSA9IHsKKwl7IkdFVCIsICIvSEVBRCQiLCBnZXRfdGV4dF9maWxlfSwKKwl7IkdFVCIsICIvaW5mby9yZWZzJCIsIGdldF9pbmZvX3JlZnN9LAorCXsiR0VUIiwgIi9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyQiLCBnZXRfdGV4dF9maWxlfSwKKwl7IkdFVCIsICIvb2JqZWN0cy9pbmZvL2h0dHAtYWx0ZXJuYXRlcyQiLCBnZXRfdGV4dF9maWxlfSwKKwl7IkdFVCIsICIvb2JqZWN0cy9pbmZvL3BhY2tzJCIsIGdldF9pbmZvX3BhY2tzfSwKKwl7IkdFVCIsICIvb2JqZWN0cy9bMC05YS1mXXsyfS9bMC05YS1mXXszOH0kIiwgZ2V0X2xvb3NlX29iamVjdH0sCisJeyJHRVQiLCAiL29iamVjdHMvcGFjay9wYWNrLVswLTlhLWZdezQwfVxcLnBhY2skIiwgZ2V0X3BhY2tfZmlsZX0sCisJeyJHRVQiLCAiL29iamVjdHMvcGFjay9wYWNrLVswLTlhLWZdezQwfVxcLmlkeCQiLCBnZXRfaWR4X2ZpbGV9LAorCisJeyJQT1NUIiwgIi9naXQtdXBsb2FkLXBhY2skIiwgc2VydmljZV9ycGN9LAorCXsiUE9TVCIsICIvZ2l0LXJlY2VpdmUtcGFjayQiLCBzZXJ2aWNlX3JwY30KK307CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljaGFyICptZXRob2QgPSBnZXRlbnYoIlJFUVVFU1RfTUVUSE9EIik7CisJY2hhciAqZGlyOworCXN0cnVjdCBzZXJ2aWNlX2NtZCAqY21kID0gTlVMTDsKKwljaGFyICpjbWRfYXJnID0gTlVMTDsKKwlpbnQgaTsKKworCWdpdF9leHRyYWN0X2FyZ3YwX3BhdGgoYXJndlswXSk7CisJc2V0X2RpZV9yb3V0aW5lKGRpZV93ZWJjZ2kpOworCisJaWYgKCFtZXRob2QpCisJCWRpZSgiTm8gUkVRVUVTVF9NRVRIT0QgZnJvbSBzZXJ2ZXIiKTsKKwlpZiAoIXN0cmNtcChtZXRob2QsICJIRUFEIikpCisJCW1ldGhvZCA9ICJHRVQiOworCWRpciA9IGdldGRpcigpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2VydmljZXMpOyBpKyspIHsKKwkJc3RydWN0IHNlcnZpY2VfY21kICpjID0gJnNlcnZpY2VzW2ldOworCQlyZWdleF90IHJlOworCQlyZWdtYXRjaF90IG91dFsxXTsKKworCQlpZiAocmVnY29tcCgmcmUsIGMtPnBhdHRlcm4sIFJFR19FWFRFTkRFRCkpCisJCQlkaWUoIkJvZ3VzIHJlZ2V4IGluIHNlcnZpY2UgdGFibGU6ICVzIiwgYy0+cGF0dGVybik7CisJCWlmICghcmVnZXhlYygmcmUsIGRpciwgMSwgb3V0LCAwKSkgeworCQkJc2l6ZV90IG47CisKKwkJCWlmIChzdHJjbXAobWV0aG9kLCBjLT5tZXRob2QpKSB7CisJCQkJY29uc3QgY2hhciAqcHJvdG8gPSBnZXRlbnYoIlNFUlZFUl9QUk9UT0NPTCIpOworCQkJCWlmIChwcm90byAmJiAhc3RyY21wKHByb3RvLCAiSFRUUC8xLjEiKSkKKwkJCQkJaHR0cF9zdGF0dXMoNDA1LCAiTWV0aG9kIE5vdCBBbGxvd2VkIik7CisJCQkJZWxzZQorCQkJCQlodHRwX3N0YXR1cyg0MDAsICJCYWQgUmVxdWVzdCIpOworCQkJCWhkcl9ub2NhY2hlKCk7CisJCQkJZW5kX2hlYWRlcnMoKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKworCQkJY21kID0gYzsKKwkJCW4gPSBvdXRbMF0ucm1fZW8gLSBvdXRbMF0ucm1fc287CisJCQljbWRfYXJnID0geG1hbGxvYyhuKTsKKwkJCW1lbWNweShjbWRfYXJnLCBkaXIgKyBvdXRbMF0ucm1fc28gKyAxLCBuLTEpOworCQkJY21kX2FyZ1tuLTFdID0gJ1wwJzsKKwkJCWRpcltvdXRbMF0ucm1fc29dID0gMDsKKwkJCWJyZWFrOworCQl9CisJCXJlZ2ZyZWUoJnJlKTsKKwl9CisKKwlpZiAoIWNtZCkKKwkJbm90X2ZvdW5kKCJSZXF1ZXN0IG5vdCBzdXBwb3J0ZWQ6ICclcyciLCBkaXIpOworCisJc2V0dXBfcGF0aCgpOworCWlmICghZW50ZXJfcmVwbyhkaXIsIDApKQorCQlub3RfZm91bmQoIk5vdCBhIGdpdCByZXBvc2l0b3J5OiAnJXMnIiwgZGlyKTsKKwlpZiAoIWdldGVudigiR0lUX0hUVFBfRVhQT1JUX0FMTCIpICYmCisJICAgIGFjY2VzcygiZ2l0LWRhZW1vbi1leHBvcnQtb2siLCBGX09LKSApCisJCW5vdF9mb3VuZCgiUmVwb3NpdG9yeSBub3QgZXhwb3J0ZWQ6ICclcyciLCBkaXIpOworCisJZ2l0X2NvbmZpZyhodHRwX2NvbmZpZywgTlVMTCk7CisJY21kLT5pbXAoY21kX2FyZyk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluLWh0dHAtZmV0Y2guYyBiL2h0dHAtZmV0Y2guYwpzaW1pbGFyaXR5IGluZGV4IDgyJQpyZW5hbWUgZnJvbSBidWlsdGluLWh0dHAtZmV0Y2guYwpyZW5hbWUgdG8gaHR0cC1mZXRjaC5jCmluZGV4IGYzZTYzZDcuLmZmZDBhZDcgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4taHR0cC1mZXRjaC5jCisrKyBiL2h0dHAtZmV0Y2guYwpAQCAtMSw4ICsxLDEzIEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJleGVjX2NtZC5oIgogI2luY2x1ZGUgIndhbGtlci5oIgogCi1pbnQgY21kX2h0dHBfZmV0Y2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCitzdGF0aWMgY29uc3QgY2hhciBodHRwX2ZldGNoX3VzYWdlW10gPSAiZ2l0IGh0dHAtZmV0Y2ggIgorIlstY10gWy10XSBbLWFdIFstdl0gWy0tcmVjb3Zlcl0gWy13IHJlZl0gWy0tc3RkaW5dIGNvbW1pdC1pZCB1cmwiOworCitpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CisJY29uc3QgY2hhciAqcHJlZml4OwogCXN0cnVjdCB3YWxrZXIgKndhbGtlcjsKIAlpbnQgY29tbWl0c19vbl9zdGRpbiA9IDA7CiAJaW50IGNvbW1pdHM7CkBAIC0xOCw3ICsyMyw3IEBACiAJaW50IGdldF92ZXJib3NlbHkgPSAwOwogCWludCBnZXRfcmVjb3ZlciA9IDA7CiAKLQlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJZ2l0X2V4dHJhY3RfYXJndjBfcGF0aChhcmd2WzBdKTsKIAogCXdoaWxlIChhcmcgPCBhcmdjICYmIGFyZ3ZbYXJnXVswXSA9PSAnLScpIHsKIAkJaWYgKGFyZ3ZbYXJnXVsxXSA9PSAndCcpIHsKQEAgLTM0LDYgKzM5LDggQEAKIAkJfSBlbHNlIGlmIChhcmd2W2FyZ11bMV0gPT0gJ3cnKSB7CiAJCQl3cml0ZV9yZWYgPSAmYXJndlthcmcgKyAxXTsKIAkJCWFyZysrOworCQl9IGVsc2UgaWYgKGFyZ3ZbYXJnXVsxXSA9PSAnaCcpIHsKKwkJCXVzYWdlKGh0dHBfZmV0Y2hfdXNhZ2UpOwogCQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlthcmddLCAiLS1yZWNvdmVyIikpIHsKIAkJCWdldF9yZWNvdmVyID0gMTsKIAkJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbYXJnXSwgIi0tc3RkaW4iKSkgewpAQCAtNDEsMTAgKzQ4LDggQEAKIAkJfQogCQlhcmcrKzsKIAl9Ci0JaWYgKGFyZ2MgPCBhcmcgKyAyIC0gY29tbWl0c19vbl9zdGRpbikgewotCQl1c2FnZSgiZ2l0IGh0dHAtZmV0Y2ggWy1jXSBbLXRdIFstYV0gWy12XSBbLS1yZWNvdmVyXSBbLXcgcmVmXSBbLS1zdGRpbl0gY29tbWl0LWlkIHVybCIpOwotCQlyZXR1cm4gMTsKLQl9CisJaWYgKGFyZ2MgIT0gYXJnICsgMiAtIGNvbW1pdHNfb25fc3RkaW4pCisJCXVzYWdlKGh0dHBfZmV0Y2hfdXNhZ2UpOwogCWlmIChjb21taXRzX29uX3N0ZGluKSB7CiAJCWNvbW1pdHMgPSB3YWxrZXJfdGFyZ2V0c19zdGRpbigmY29tbWl0X2lkLCAmd3JpdGVfcmVmKTsKIAl9IGVsc2UgewpAQCAtNTIsNiArNTcsMTEgQEAKIAkJY29tbWl0cyA9IDE7CiAJfQogCXVybCA9IGFyZ3ZbYXJnXTsKKworCXByZWZpeCA9IHNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKwogCWlmICh1cmwgJiYgdXJsW3N0cmxlbih1cmwpLTFdICE9ICcvJykgewogCQlyZXdyaXR0ZW5fdXJsID0geG1hbGxvYyhzdHJsZW4odXJsKSsyKTsKIAkJc3RyY3B5KHJld3JpdHRlbl91cmwsIHVybCk7CmRpZmYgLS1naXQgYS9odHRwLXB1c2guYyBiL2h0dHAtcHVzaC5jCmluZGV4IDBiMTJmZmUuLjQzMmIyMGYgMTAwNjQ0Ci0tLSBhL2h0dHAtcHVzaC5jCisrKyBiL2h0dHAtcHVzaC5jCkBAIC0xLDYgKzEsNSBAQAogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSAiY29tbWl0LmgiCi0jaW5jbHVkZSAicGFjay5oIgogI2luY2x1ZGUgInRhZy5oIgogI2luY2x1ZGUgImJsb2IuaCIKICNpbmNsdWRlICJodHRwLmgiCkBAIC0yNyw3ICsyNiw2IEBACiAjZW5kaWYKIAogI2RlZmluZSBQUkVWX0JVRl9TSVpFIDQwOTYKLSNkZWZpbmUgUkFOR0VfSEVBREVSX1NJWkUgMzAKIAogLyogREFWIG1ldGhvZHMgKi8KICNkZWZpbmUgREFWX0xPQ0sgIkxPQ0siCkBAIC03NiwxMiArNzQsMTEgQEAKIHN0YXRpYyBpbnQgYWJvcnRlZDsKIHN0YXRpYyBzaWduZWQgY2hhciByZW1vdGVfZGlyX2V4aXN0c1syNTZdOwogCi1zdGF0aWMgc3RydWN0IGN1cmxfc2xpc3QgKm5vX3ByYWdtYV9oZWFkZXI7Ci0KIHN0YXRpYyBpbnQgcHVzaF92ZXJib3NlbHk7CiBzdGF0aWMgaW50IHB1c2hfYWxsID0gTUFUQ0hfUkVGU19OT05FOwogc3RhdGljIGludCBmb3JjZV9hbGw7CiBzdGF0aWMgaW50IGRyeV9ydW47CitzdGF0aWMgaW50IGhlbHBlcl9zdGF0dXM7CiAKIHN0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2xpc3QgKm9iamVjdHM7CiAKQEAgLTExOSwxOSArMTE2LDEwIEBACiAJc3RydWN0IHJlbW90ZV9sb2NrICpsb2NrOwogCXN0cnVjdCBjdXJsX3NsaXN0ICpoZWFkZXJzOwogCXN0cnVjdCBidWZmZXIgYnVmZmVyOwotCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOwotCWNoYXIgdG1wZmlsZVtQQVRIX01BWF07Ci0JaW50IGxvY2FsX2ZpbGVubzsKLQlGSUxFICpsb2NhbF9zdHJlYW07CiAJZW51bSB0cmFuc2Zlcl9zdGF0ZSBzdGF0ZTsKIAlDVVJMY29kZSBjdXJsX3Jlc3VsdDsKIAljaGFyIGVycm9yc3RyW0NVUkxfRVJST1JfU0laRV07CiAJbG9uZyBodHRwX2NvZGU7Ci0JdW5zaWduZWQgY2hhciByZWFsX3NoYTFbMjBdOwotCWdpdF9TSEFfQ1RYIGM7Ci0Jel9zdHJlYW0gc3RyZWFtOwotCWludCB6cmV0OwotCWludCByZW5hbWU7CiAJdm9pZCAqdXNlckRhdGE7CiAJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CiAJc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKm5leHQ7CkBAIC0yMDYsNiArMTk0LDggQEAKIAkJY2FzZSAnJic6CiAJCQlzdHJidWZfYWRkc3RyKCZidWYsICImYW1wOyIpOwogCQkJYnJlYWs7CisJCWNhc2UgMDoKKwkJCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOwogCQl9CiAJCXMrKzsKIAl9CkBAIC0yMzcsMTUgKzIyNyw2IEBACiAJcmV0dXJuIGRhdl9oZWFkZXJzOwogfQogCi1zdGF0aWMgdm9pZCBhcHBlbmRfcmVtb3RlX29iamVjdF91cmwoc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICp1cmwsCi0JCQkJICAgICBjb25zdCBjaGFyICpoZXgsCi0JCQkJICAgICBpbnQgb25seV90d29fZGlnaXRfcHJlZml4KQotewotCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiVzb2JqZWN0cy8lLipzLyIsIHVybCwgMiwgaGV4KTsKLQlpZiAoIW9ubHlfdHdvX2RpZ2l0X3ByZWZpeCkKLQkJc3RyYnVmX2FkZGYoYnVmLCAiJXMiLCBoZXgrMik7Ci19Ci0KIHN0YXRpYyB2b2lkIGZpbmlzaF9yZXF1ZXN0KHN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0KTsKIHN0YXRpYyB2b2lkIHJlbGVhc2VfcmVxdWVzdChzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCk7CiAKQEAgLTI1OSwxNjMgKzI0MCwyOSBAQAogCiAjaWZkZWYgVVNFX0NVUkxfTVVMVEkKIAotc3RhdGljIGNoYXIgKmdldF9yZW1vdGVfb2JqZWN0X3VybChjb25zdCBjaGFyICp1cmwsIGNvbnN0IGNoYXIgKmhleCwKLQkJCQkgICBpbnQgb25seV90d29fZGlnaXRfcHJlZml4KQotewotCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7Ci0JYXBwZW5kX3JlbW90ZV9vYmplY3RfdXJsKCZidWYsIHVybCwgaGV4LCBvbmx5X3R3b19kaWdpdF9wcmVmaXgpOwotCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOwotfQotCi1zdGF0aWMgc2l6ZV90IGZ3cml0ZV9zaGExX2ZpbGUodm9pZCAqcHRyLCBzaXplX3QgZWx0c2l6ZSwgc2l6ZV90IG5tZW1iLAotCQkJICAgICAgIHZvaWQgKmRhdGEpCi17Ci0JdW5zaWduZWQgY2hhciBleHBuWzQwOTZdOwotCXNpemVfdCBzaXplID0gZWx0c2l6ZSAqIG5tZW1iOwotCWludCBwb3NuID0gMDsKLQlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCA9IChzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqKWRhdGE7Ci0JZG8gewotCQlzc2l6ZV90IHJldHZhbCA9IHh3cml0ZShyZXF1ZXN0LT5sb2NhbF9maWxlbm8sCi0JCQkJICAgICAgIChjaGFyICopIHB0ciArIHBvc24sIHNpemUgLSBwb3NuKTsKLQkJaWYgKHJldHZhbCA8IDApCi0JCQlyZXR1cm4gcG9zbjsKLQkJcG9zbiArPSByZXR2YWw7Ci0JfSB3aGlsZSAocG9zbiA8IHNpemUpOwotCi0JcmVxdWVzdC0+c3RyZWFtLmF2YWlsX2luID0gc2l6ZTsKLQlyZXF1ZXN0LT5zdHJlYW0ubmV4dF9pbiA9IHB0cjsKLQlkbyB7Ci0JCXJlcXVlc3QtPnN0cmVhbS5uZXh0X291dCA9IGV4cG47Ci0JCXJlcXVlc3QtPnN0cmVhbS5hdmFpbF9vdXQgPSBzaXplb2YoZXhwbik7Ci0JCXJlcXVlc3QtPnpyZXQgPSBnaXRfaW5mbGF0ZSgmcmVxdWVzdC0+c3RyZWFtLCBaX1NZTkNfRkxVU0gpOwotCQlnaXRfU0hBMV9VcGRhdGUoJnJlcXVlc3QtPmMsIGV4cG4sCi0JCQkgICAgc2l6ZW9mKGV4cG4pIC0gcmVxdWVzdC0+c3RyZWFtLmF2YWlsX291dCk7Ci0JfSB3aGlsZSAocmVxdWVzdC0+c3RyZWFtLmF2YWlsX2luICYmIHJlcXVlc3QtPnpyZXQgPT0gWl9PSyk7Ci0JZGF0YV9yZWNlaXZlZCsrOwotCXJldHVybiBzaXplOwotfQotCiBzdGF0aWMgdm9pZCBzdGFydF9mZXRjaF9sb29zZShzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCkKIHsKLQljaGFyICpoZXggPSBzaGExX3RvX2hleChyZXF1ZXN0LT5vYmotPnNoYTEpOwotCWNoYXIgKmZpbGVuYW1lOwotCWNoYXIgcHJldmZpbGVbUEFUSF9NQVhdOwotCWNoYXIgKnVybDsKLQlpbnQgcHJldmxvY2FsOwotCXVuc2lnbmVkIGNoYXIgcHJldl9idWZbUFJFVl9CVUZfU0laRV07Ci0Jc3NpemVfdCBwcmV2X3JlYWQgPSAwOwotCWxvbmcgcHJldl9wb3NuID0gMDsKLQljaGFyIHJhbmdlW1JBTkdFX0hFQURFUl9TSVpFXTsKLQlzdHJ1Y3QgY3VybF9zbGlzdCAqcmFuZ2VfaGVhZGVyID0gTlVMTDsKIAlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqb2JqX3JlcTsKIAotCWZpbGVuYW1lID0gc2hhMV9maWxlX25hbWUocmVxdWVzdC0+b2JqLT5zaGExKTsKLQlzbnByaW50ZihyZXF1ZXN0LT5maWxlbmFtZSwgc2l6ZW9mKHJlcXVlc3QtPmZpbGVuYW1lKSwgIiVzIiwgZmlsZW5hbWUpOwotCXNucHJpbnRmKHJlcXVlc3QtPnRtcGZpbGUsIHNpemVvZihyZXF1ZXN0LT50bXBmaWxlKSwKLQkJICIlcy50ZW1wIiwgZmlsZW5hbWUpOwotCi0Jc25wcmludGYocHJldmZpbGUsIHNpemVvZihwcmV2ZmlsZSksICIlcy5wcmV2IiwgcmVxdWVzdC0+ZmlsZW5hbWUpOwotCXVubGlua19vcl93YXJuKHByZXZmaWxlKTsKLQlyZW5hbWUocmVxdWVzdC0+dG1wZmlsZSwgcHJldmZpbGUpOwotCXVubGlua19vcl93YXJuKHJlcXVlc3QtPnRtcGZpbGUpOwotCi0JaWYgKHJlcXVlc3QtPmxvY2FsX2ZpbGVubyAhPSAtMSkKLQkJZXJyb3IoImZkIGxlYWthZ2UgaW4gc3RhcnQ6ICVkIiwgcmVxdWVzdC0+bG9jYWxfZmlsZW5vKTsKLQlyZXF1ZXN0LT5sb2NhbF9maWxlbm8gPSBvcGVuKHJlcXVlc3QtPnRtcGZpbGUsCi0JCQkJICAgICBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA2NjYpOwotCS8qIFRoaXMgY291bGQgaGF2ZSBmYWlsZWQgZHVlIHRvIHRoZSAibGF6eSBkaXJlY3RvcnkgY3JlYXRpb24iOwotCSAqIHRyeSB0byBta2RpciB0aGUgbGFzdCBwYXRoIGNvbXBvbmVudC4KLQkgKi8KLQlpZiAocmVxdWVzdC0+bG9jYWxfZmlsZW5vIDwgMCAmJiBlcnJubyA9PSBFTk9FTlQpIHsKLQkJY2hhciAqZGlyID0gc3RycmNocihyZXF1ZXN0LT50bXBmaWxlLCAnLycpOwotCQlpZiAoZGlyKSB7Ci0JCQkqZGlyID0gMDsKLQkJCW1rZGlyKHJlcXVlc3QtPnRtcGZpbGUsIDA3NzcpOwotCQkJKmRpciA9ICcvJzsKLQkJfQotCQlyZXF1ZXN0LT5sb2NhbF9maWxlbm8gPSBvcGVuKHJlcXVlc3QtPnRtcGZpbGUsCi0JCQkJCSAgICAgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMLCAwNjY2KTsKLQl9Ci0KLQlpZiAocmVxdWVzdC0+bG9jYWxfZmlsZW5vIDwgMCkgeworCW9ial9yZXEgPSBuZXdfaHR0cF9vYmplY3RfcmVxdWVzdChyZXBvLT51cmwsIHJlcXVlc3QtPm9iai0+c2hhMSk7CisJaWYgKG9ial9yZXEgPT0gTlVMTCkgewogCQlyZXF1ZXN0LT5zdGF0ZSA9IEFCT1JURUQ7Ci0JCWVycm9yKCJDb3VsZG4ndCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUgJXMgZm9yICVzOiAlcyIsCi0JCSAgICAgIHJlcXVlc3QtPnRtcGZpbGUsIHJlcXVlc3QtPmZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOwogCQlyZXR1cm47CiAJfQogCi0JbWVtc2V0KCZyZXF1ZXN0LT5zdHJlYW0sIDAsIHNpemVvZihyZXF1ZXN0LT5zdHJlYW0pKTsKLQotCWdpdF9pbmZsYXRlX2luaXQoJnJlcXVlc3QtPnN0cmVhbSk7Ci0KLQlnaXRfU0hBMV9Jbml0KCZyZXF1ZXN0LT5jKTsKLQotCXVybCA9IGdldF9yZW1vdGVfb2JqZWN0X3VybChyZXBvLT51cmwsIGhleCwgMCk7Ci0JcmVxdWVzdC0+dXJsID0geHN0cmR1cCh1cmwpOwotCi0JLyogSWYgYSBwcmV2aW91cyB0ZW1wIGZpbGUgaXMgcHJlc2VudCwgcHJvY2VzcyB3aGF0IHdhcyBhbHJlYWR5Ci0JICAgZmV0Y2hlZC4gKi8KLQlwcmV2bG9jYWwgPSBvcGVuKHByZXZmaWxlLCBPX1JET05MWSk7Ci0JaWYgKHByZXZsb2NhbCAhPSAtMSkgewotCQlkbyB7Ci0JCQlwcmV2X3JlYWQgPSB4cmVhZChwcmV2bG9jYWwsIHByZXZfYnVmLCBQUkVWX0JVRl9TSVpFKTsKLQkJCWlmIChwcmV2X3JlYWQ+MCkgewotCQkJCWlmIChmd3JpdGVfc2hhMV9maWxlKHByZXZfYnVmLAotCQkJCQkJICAgICAxLAotCQkJCQkJICAgICBwcmV2X3JlYWQsCi0JCQkJCQkgICAgIHJlcXVlc3QpID09IHByZXZfcmVhZCkgewotCQkJCQlwcmV2X3Bvc24gKz0gcHJldl9yZWFkOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXByZXZfcmVhZCA9IC0xOwotCQkJCX0KLQkJCX0KLQkJfSB3aGlsZSAocHJldl9yZWFkID4gMCk7Ci0JCWNsb3NlKHByZXZsb2NhbCk7Ci0JfQotCXVubGlua19vcl93YXJuKHByZXZmaWxlKTsKLQotCS8qIFJlc2V0IGluZmxhdGUvU0hBMSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgcmVhZGluZyB0aGUgcHJldmlvdXMgdGVtcAotCSAgIGZpbGU7IGFsc28gcmV3aW5kIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvY2FsIGZpbGUuICovCi0JaWYgKHByZXZfcmVhZCA9PSAtMSkgewotCQltZW1zZXQoJnJlcXVlc3QtPnN0cmVhbSwgMCwgc2l6ZW9mKHJlcXVlc3QtPnN0cmVhbSkpOwotCQlnaXRfaW5mbGF0ZV9pbml0KCZyZXF1ZXN0LT5zdHJlYW0pOwotCQlnaXRfU0hBMV9Jbml0KCZyZXF1ZXN0LT5jKTsKLQkJaWYgKHByZXZfcG9zbj4wKSB7Ci0JCQlwcmV2X3Bvc24gPSAwOwotCQkJbHNlZWsocmVxdWVzdC0+bG9jYWxfZmlsZW5vLCAwLCBTRUVLX1NFVCk7Ci0JCQlmdHJ1bmNhdGUocmVxdWVzdC0+bG9jYWxfZmlsZW5vLCAwKTsKLQkJfQotCX0KLQotCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwlzbG90ID0gb2JqX3JlcS0+c2xvdDsKIAlzbG90LT5jYWxsYmFja19mdW5jID0gcHJvY2Vzc19yZXNwb25zZTsKIAlzbG90LT5jYWxsYmFja19kYXRhID0gcmVxdWVzdDsKIAlyZXF1ZXN0LT5zbG90ID0gc2xvdDsKLQotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCByZXF1ZXN0KTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlX3NoYTFfZmlsZSk7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0VSUk9SQlVGRkVSLCByZXF1ZXN0LT5lcnJvcnN0cik7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwgdXJsKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgbm9fcHJhZ21hX2hlYWRlcik7Ci0KLQkvKiBJZiB3ZSBoYXZlIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgZGF0YSBmcm9tIGEgcHJldmlvdXMgZmV0Y2gKLQkgICBhdHRlbXB0LCBvbmx5IGZldGNoIHRoZSBkYXRhIHdlIGRvbid0IGFscmVhZHkgaGF2ZS4gKi8KLQlpZiAocHJldl9wb3NuPjApIHsKLQkJaWYgKHB1c2hfdmVyYm9zZWx5KQotCQkJZnByaW50ZihzdGRlcnIsCi0JCQkJIlJlc3VtaW5nIGZldGNoIG9mIG9iamVjdCAlcyBhdCBieXRlICVsZFxuIiwKLQkJCQloZXgsIHByZXZfcG9zbik7Ci0JCXNwcmludGYocmFuZ2UsICJSYW5nZTogYnl0ZXM9JWxkLSIsIHByZXZfcG9zbik7Ci0JCXJhbmdlX2hlYWRlciA9IGN1cmxfc2xpc3RfYXBwZW5kKHJhbmdlX2hlYWRlciwgcmFuZ2UpOwotCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsCi0JCQkJIENVUkxPUFRfSFRUUEhFQURFUiwgcmFuZ2VfaGVhZGVyKTsKLQl9CisJcmVxdWVzdC0+dXNlckRhdGEgPSBvYmpfcmVxOwogCiAJLyogVHJ5IHRvIGdldCB0aGUgcmVxdWVzdCBzdGFydGVkLCBhYm9ydCB0aGUgcmVxdWVzdCBvbiBlcnJvciAqLwogCXJlcXVlc3QtPnN0YXRlID0gUlVOX0ZFVENIX0xPT1NFOwogCWlmICghc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKIAkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gc3RhcnQgR0VUIHJlcXVlc3RcbiIpOwogCQlyZXBvLT5jYW5fdXBkYXRlX2luZm9fcmVmcyA9IDA7CisJCXJlbGVhc2VfaHR0cF9vYmplY3RfcmVxdWVzdChvYmpfcmVxKTsKIAkJcmVsZWFzZV9yZXF1ZXN0KHJlcXVlc3QpOwogCX0KIH0KQEAgLTQ0OSwxNiArMjk2LDEwIEBACiAKIHN0YXRpYyB2b2lkIHN0YXJ0X2ZldGNoX3BhY2tlZChzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCkKIHsKLQljaGFyICp1cmw7CiAJc3RydWN0IHBhY2tlZF9naXQgKnRhcmdldDsKLQlGSUxFICpwYWNrZmlsZTsKLQljaGFyICpmaWxlbmFtZTsKLQlsb25nIHByZXZfcG9zbiA9IDA7Ci0JY2hhciByYW5nZVtSQU5HRV9IRUFERVJfU0laRV07Ci0Jc3RydWN0IGN1cmxfc2xpc3QgKnJhbmdlX2hlYWRlciA9IE5VTEw7CiAKIAlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqY2hlY2tfcmVxdWVzdCA9IHJlcXVlc3RfcXVldWVfaGVhZDsKLQlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKnByZXE7CiAKIAl0YXJnZXQgPSBmaW5kX3NoYTFfcGFjayhyZXF1ZXN0LT5vYmotPnNoYTEsIHJlcG8tPnBhY2tzKTsKIAlpZiAoIXRhcmdldCkgewpAQCAtNDcxLDY2ICszMTIsMzUgQEAKIAlmcHJpbnRmKHN0ZGVyciwJIkZldGNoaW5nIHBhY2sgJXNcbiIsIHNoYTFfdG9faGV4KHRhcmdldC0+c2hhMSkpOwogCWZwcmludGYoc3RkZXJyLCAiIHdoaWNoIGNvbnRhaW5zICVzXG4iLCBzaGExX3RvX2hleChyZXF1ZXN0LT5vYmotPnNoYTEpKTsKIAotCWZpbGVuYW1lID0gc2hhMV9wYWNrX25hbWUodGFyZ2V0LT5zaGExKTsKLQlzbnByaW50ZihyZXF1ZXN0LT5maWxlbmFtZSwgc2l6ZW9mKHJlcXVlc3QtPmZpbGVuYW1lKSwgIiVzIiwgZmlsZW5hbWUpOwotCXNucHJpbnRmKHJlcXVlc3QtPnRtcGZpbGUsIHNpemVvZihyZXF1ZXN0LT50bXBmaWxlKSwKLQkJICIlcy50ZW1wIiwgZmlsZW5hbWUpOwotCi0JdXJsID0geG1hbGxvYyhzdHJsZW4ocmVwby0+dXJsKSArIDY0KTsKLQlzcHJpbnRmKHVybCwgIiVzb2JqZWN0cy9wYWNrL3BhY2stJXMucGFjayIsCi0JCXJlcG8tPnVybCwgc2hhMV90b19oZXgodGFyZ2V0LT5zaGExKSk7CisJcHJlcSA9IG5ld19odHRwX3BhY2tfcmVxdWVzdCh0YXJnZXQsIHJlcG8tPnVybCk7CisJaWYgKHByZXEgPT0gTlVMTCkgeworCQlyZWxlYXNlX2h0dHBfcGFja19yZXF1ZXN0KHByZXEpOworCQlyZXBvLT5jYW5fdXBkYXRlX2luZm9fcmVmcyA9IDA7CisJCXJldHVybjsKKwl9CisJcHJlcS0+bHN0ID0gJnJlcG8tPnBhY2tzOwogCiAJLyogTWFrZSBzdXJlIHRoZXJlIGlzbid0IGFub3RoZXIgb3BlbiByZXF1ZXN0IGZvciB0aGlzIHBhY2sgKi8KIAl3aGlsZSAoY2hlY2tfcmVxdWVzdCkgewogCQlpZiAoY2hlY2tfcmVxdWVzdC0+c3RhdGUgPT0gUlVOX0ZFVENIX1BBQ0tFRCAmJgotCQkgICAgIXN0cmNtcChjaGVja19yZXF1ZXN0LT51cmwsIHVybCkpIHsKLQkJCWZyZWUodXJsKTsKKwkJICAgICFzdHJjbXAoY2hlY2tfcmVxdWVzdC0+dXJsLCBwcmVxLT51cmwpKSB7CisJCQlyZWxlYXNlX2h0dHBfcGFja19yZXF1ZXN0KHByZXEpOwogCQkJcmVsZWFzZV9yZXF1ZXN0KHJlcXVlc3QpOwogCQkJcmV0dXJuOwogCQl9CiAJCWNoZWNrX3JlcXVlc3QgPSBjaGVja19yZXF1ZXN0LT5uZXh0OwogCX0KIAotCXBhY2tmaWxlID0gZm9wZW4ocmVxdWVzdC0+dG1wZmlsZSwgImEiKTsKLQlpZiAoIXBhY2tmaWxlKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIG9wZW4gbG9jYWwgZmlsZSAlcyBmb3IgcGFjayIsCi0JCQlyZXF1ZXN0LT50bXBmaWxlKTsKLQkJcmVwby0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMgPSAwOwotCQlmcmVlKHVybCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7Ci0Jc2xvdC0+Y2FsbGJhY2tfZnVuYyA9IHByb2Nlc3NfcmVzcG9uc2U7Ci0Jc2xvdC0+Y2FsbGJhY2tfZGF0YSA9IHJlcXVlc3Q7Ci0JcmVxdWVzdC0+c2xvdCA9IHNsb3Q7Ci0JcmVxdWVzdC0+bG9jYWxfc3RyZWFtID0gcGFja2ZpbGU7Ci0JcmVxdWVzdC0+dXNlckRhdGEgPSB0YXJnZXQ7Ci0KLQlyZXF1ZXN0LT51cmwgPSB1cmw7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0ZJTEUsIHBhY2tmaWxlKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBub19wcmFnbWFfaGVhZGVyKTsKLQlzbG90LT5sb2NhbCA9IHBhY2tmaWxlOwotCi0JLyogSWYgdGhlcmUgaXMgZGF0YSBwcmVzZW50IGZyb20gYSBwcmV2aW91cyB0cmFuc2ZlciBhdHRlbXB0LAotCSAgIHJlc3VtZSB3aGVyZSBpdCBsZWZ0IG9mZiAqLwotCXByZXZfcG9zbiA9IGZ0ZWxsKHBhY2tmaWxlKTsKLQlpZiAocHJldl9wb3NuPjApIHsKLQkJaWYgKHB1c2hfdmVyYm9zZWx5KQotCQkJZnByaW50ZihzdGRlcnIsCi0JCQkJIlJlc3VtaW5nIGZldGNoIG9mIHBhY2sgJXMgYXQgYnl0ZSAlbGRcbiIsCi0JCQkJc2hhMV90b19oZXgodGFyZ2V0LT5zaGExKSwgcHJldl9wb3NuKTsKLQkJc3ByaW50ZihyYW5nZSwgIlJhbmdlOiBieXRlcz0lbGQtIiwgcHJldl9wb3NuKTsKLQkJcmFuZ2VfaGVhZGVyID0gY3VybF9zbGlzdF9hcHBlbmQocmFuZ2VfaGVhZGVyLCByYW5nZSk7Ci0JCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCByYW5nZV9oZWFkZXIpOwotCX0KKwlwcmVxLT5zbG90LT5jYWxsYmFja19mdW5jID0gcHJvY2Vzc19yZXNwb25zZTsKKwlwcmVxLT5zbG90LT5jYWxsYmFja19kYXRhID0gcmVxdWVzdDsKKwlyZXF1ZXN0LT5zbG90ID0gcHJlcS0+c2xvdDsKKwlyZXF1ZXN0LT51c2VyRGF0YSA9IHByZXE7CiAKIAkvKiBUcnkgdG8gZ2V0IHRoZSByZXF1ZXN0IHN0YXJ0ZWQsIGFib3J0IHRoZSByZXF1ZXN0IG9uIGVycm9yICovCiAJcmVxdWVzdC0+c3RhdGUgPSBSVU5fRkVUQ0hfUEFDS0VEOwotCWlmICghc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwlpZiAoIXN0YXJ0X2FjdGl2ZV9zbG90KHByZXEtPnNsb3QpKSB7CiAJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIHN0YXJ0IEdFVCByZXF1ZXN0XG4iKTsKKwkJcmVsZWFzZV9odHRwX3BhY2tfcmVxdWVzdChwcmVxKTsKIAkJcmVwby0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMgPSAwOwogCQlyZWxlYXNlX3JlcXVlc3QocmVxdWVzdCk7CiAJfQpAQCAtNTk4LDEwICs0MDgsMTAgQEAKIAljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSU9DVExEQVRBLCAmcmVxdWVzdC0+YnVmZmVyKTsKICNlbmRpZgogCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBmd3JpdGVfbnVsbCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX05PQk9EWSwgMCk7CiAJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0NVU1RPTVJFUVVFU1QsIERBVl9QVVQpOwogCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUExPQUQsIDEpOwogCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9QVVQsIDEpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9OT0JPRFksIDApOwogCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHJlcXVlc3QtPnVybCk7CiAKIAlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKQEAgLTcxMSwyNCArNTIxLDE3IEBACiAJCQllbnRyeS0+bmV4dCA9IGVudHJ5LT5uZXh0LT5uZXh0OwogCX0KIAotCWlmIChyZXF1ZXN0LT5sb2NhbF9maWxlbm8gIT0gLTEpCi0JCWNsb3NlKHJlcXVlc3QtPmxvY2FsX2ZpbGVubyk7Ci0JaWYgKHJlcXVlc3QtPmxvY2FsX3N0cmVhbSkKLQkJZmNsb3NlKHJlcXVlc3QtPmxvY2FsX3N0cmVhbSk7CiAJZnJlZShyZXF1ZXN0LT51cmwpOwogCWZyZWUocmVxdWVzdCk7CiB9CiAKIHN0YXRpYyB2b2lkIGZpbmlzaF9yZXF1ZXN0KHN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0KQogewotCXN0cnVjdCBzdGF0IHN0OwotCXN0cnVjdCBwYWNrZWRfZ2l0ICp0YXJnZXQ7Ci0Jc3RydWN0IHBhY2tlZF9naXQgKipsc3Q7Ci0Jc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJc3RydWN0IGh0dHBfcGFja19yZXF1ZXN0ICpwcmVxOworCXN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpvYmpfcmVxOwogCiAJcmVxdWVzdC0+Y3VybF9yZXN1bHQgPSByZXF1ZXN0LT5zbG90LT5jdXJsX3Jlc3VsdDsKIAlyZXF1ZXN0LT5odHRwX2NvZGUgPSByZXF1ZXN0LT5zbG90LT5odHRwX2NvZGU7Ci0Jc2xvdCA9IHJlcXVlc3QtPnNsb3Q7CiAJcmVxdWVzdC0+c2xvdCA9IE5VTEw7CiAKIAkvKiBLZWVwIGxvY2tzIGFjdGl2ZSAqLwpAQCAtNzgwLDc3ICs1ODMsNDYgQEAKIAkJCWFib3J0ZWQgPSAxOwogCQl9CiAJfSBlbHNlIGlmIChyZXF1ZXN0LT5zdGF0ZSA9PSBSVU5fRkVUQ0hfTE9PU0UpIHsKLQkJY2xvc2UocmVxdWVzdC0+bG9jYWxfZmlsZW5vKTsgcmVxdWVzdC0+bG9jYWxfZmlsZW5vID0gLTE7CisJCW9ial9yZXEgPSAoc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKilyZXF1ZXN0LT51c2VyRGF0YTsKIAotCQlpZiAocmVxdWVzdC0+Y3VybF9yZXN1bHQgIT0gQ1VSTEVfT0sgJiYKLQkJICAgIHJlcXVlc3QtPmh0dHBfY29kZSAhPSA0MTYpIHsKLQkJCWlmIChzdGF0KHJlcXVlc3QtPnRtcGZpbGUsICZzdCkgPT0gMCkgewotCQkJCWlmIChzdC5zdF9zaXplID09IDApCi0JCQkJCXVubGlua19vcl93YXJuKHJlcXVlc3QtPnRtcGZpbGUpOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKHJlcXVlc3QtPmh0dHBfY29kZSA9PSA0MTYpCi0JCQkJd2FybmluZygicmVxdWVzdGVkIHJhbmdlIGludmFsaWQ7IHdlIG1heSBhbHJlYWR5IGhhdmUgYWxsIHRoZSBkYXRhLiIpOwotCi0JCQlnaXRfaW5mbGF0ZV9lbmQoJnJlcXVlc3QtPnN0cmVhbSk7Ci0JCQlnaXRfU0hBMV9GaW5hbChyZXF1ZXN0LT5yZWFsX3NoYTEsICZyZXF1ZXN0LT5jKTsKLQkJCWlmIChyZXF1ZXN0LT56cmV0ICE9IFpfU1RSRUFNX0VORCkgewotCQkJCXVubGlua19vcl93YXJuKHJlcXVlc3QtPnRtcGZpbGUpOwotCQkJfSBlbHNlIGlmIChoYXNoY21wKHJlcXVlc3QtPm9iai0+c2hhMSwgcmVxdWVzdC0+cmVhbF9zaGExKSkgewotCQkJCXVubGlua19vcl93YXJuKHJlcXVlc3QtPnRtcGZpbGUpOwotCQkJfSBlbHNlIHsKLQkJCQlyZXF1ZXN0LT5yZW5hbWUgPQotCQkJCQltb3ZlX3RlbXBfdG9fZmlsZSgKLQkJCQkJCXJlcXVlc3QtPnRtcGZpbGUsCi0JCQkJCQlyZXF1ZXN0LT5maWxlbmFtZSk7Ci0JCQkJaWYgKHJlcXVlc3QtPnJlbmFtZSA9PSAwKSB7Ci0JCQkJCXJlcXVlc3QtPm9iai0+ZmxhZ3MgfD0gKExPQ0FMIHwgUkVNT1RFKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KKwkJaWYgKGZpbmlzaF9odHRwX29iamVjdF9yZXF1ZXN0KG9ial9yZXEpID09IDApCisJCQlpZiAob2JqX3JlcS0+cmVuYW1lID09IDApCisJCQkJcmVxdWVzdC0+b2JqLT5mbGFncyB8PSAoTE9DQUwgfCBSRU1PVEUpOwogCiAJCS8qIFRyeSBmZXRjaGluZyBwYWNrZWQgaWYgbmVjZXNzYXJ5ICovCi0JCWlmIChyZXF1ZXN0LT5vYmotPmZsYWdzICYgTE9DQUwpCisJCWlmIChyZXF1ZXN0LT5vYmotPmZsYWdzICYgTE9DQUwpIHsKKwkJCXJlbGVhc2VfaHR0cF9vYmplY3RfcmVxdWVzdChvYmpfcmVxKTsKIAkJCXJlbGVhc2VfcmVxdWVzdChyZXF1ZXN0KTsKLQkJZWxzZQorCQl9IGVsc2UKIAkJCXN0YXJ0X2ZldGNoX3BhY2tlZChyZXF1ZXN0KTsKIAogCX0gZWxzZSBpZiAocmVxdWVzdC0+c3RhdGUgPT0gUlVOX0ZFVENIX1BBQ0tFRCkgeworCQlpbnQgZmFpbCA9IDE7CiAJCWlmIChyZXF1ZXN0LT5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSykgewogCQkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gZ2V0IHBhY2sgZmlsZSAlc1xuJXMiLAogCQkJCXJlcXVlc3QtPnVybCwgY3VybF9lcnJvcnN0cik7Ci0JCQlyZXBvLT5jYW5fdXBkYXRlX2luZm9fcmVmcyA9IDA7CiAJCX0gZWxzZSB7Ci0JCQlvZmZfdCBwYWNrX3NpemUgPSBmdGVsbChyZXF1ZXN0LT5sb2NhbF9zdHJlYW0pOworCQkJcHJlcSA9IChzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKilyZXF1ZXN0LT51c2VyRGF0YTsKIAotCQkJZmNsb3NlKHJlcXVlc3QtPmxvY2FsX3N0cmVhbSk7Ci0JCQlyZXF1ZXN0LT5sb2NhbF9zdHJlYW0gPSBOVUxMOwotCQkJc2xvdC0+bG9jYWwgPSBOVUxMOwotCQkJaWYgKCFtb3ZlX3RlbXBfdG9fZmlsZShyZXF1ZXN0LT50bXBmaWxlLAotCQkJCQkgICAgICAgcmVxdWVzdC0+ZmlsZW5hbWUpKSB7Ci0JCQkJdGFyZ2V0ID0gKHN0cnVjdCBwYWNrZWRfZ2l0ICopcmVxdWVzdC0+dXNlckRhdGE7Ci0JCQkJdGFyZ2V0LT5wYWNrX3NpemUgPSBwYWNrX3NpemU7Ci0JCQkJbHN0ID0gJnJlcG8tPnBhY2tzOwotCQkJCXdoaWxlICgqbHN0ICE9IHRhcmdldCkKLQkJCQkJbHN0ID0gJigoKmxzdCktPm5leHQpOwotCQkJCSpsc3QgPSAoKmxzdCktPm5leHQ7Ci0KLQkJCQlpZiAoIXZlcmlmeV9wYWNrKHRhcmdldCkpCi0JCQkJCWluc3RhbGxfcGFja2VkX2dpdCh0YXJnZXQpOwotCQkJCWVsc2UKLQkJCQkJcmVwby0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMgPSAwOworCQkJaWYgKHByZXEpIHsKKwkJCQlpZiAoZmluaXNoX2h0dHBfcGFja19yZXF1ZXN0KHByZXEpID09IDApCisJCQkJCWZhaWwgPSAwOworCQkJCXJlbGVhc2VfaHR0cF9wYWNrX3JlcXVlc3QocHJlcSk7CiAJCQl9CiAJCX0KKwkJaWYgKGZhaWwpCisJCQlyZXBvLT5jYW5fdXBkYXRlX2luZm9fcmVmcyA9IDA7CiAJCXJlbGVhc2VfcmVxdWVzdChyZXF1ZXN0KTsKIAl9CiB9CiAKICNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorc3RhdGljIGludCBpc19ydW5uaW5nX3F1ZXVlOwogc3RhdGljIGludCBmaWxsX2FjdGl2ZV9zbG90KHZvaWQgKnVudXNlZCkKIHsKIAlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdDsKIAotCWlmIChhYm9ydGVkKQorCWlmIChhYm9ydGVkIHx8ICFpc19ydW5uaW5nX3F1ZXVlKQogCQlyZXR1cm4gMDsKIAogCWZvciAocmVxdWVzdCA9IHJlcXVlc3RfcXVldWVfaGVhZDsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKQEAgLTg5Myw4ICs2NjUsNiBAQAogCXJlcXVlc3QtPnVybCA9IE5VTEw7CiAJcmVxdWVzdC0+bG9jayA9IE5VTEw7CiAJcmVxdWVzdC0+aGVhZGVycyA9IE5VTEw7Ci0JcmVxdWVzdC0+bG9jYWxfZmlsZW5vID0gLTE7Ci0JcmVxdWVzdC0+bG9jYWxfc3RyZWFtID0gTlVMTDsKIAlyZXF1ZXN0LT5zdGF0ZSA9IE5FRURfRkVUQ0g7CiAJcmVxdWVzdC0+bmV4dCA9IHJlcXVlc3RfcXVldWVfaGVhZDsKIAlyZXF1ZXN0X3F1ZXVlX2hlYWQgPSByZXF1ZXN0OwpAQCAtOTMzLDggKzcwMyw2IEBACiAJcmVxdWVzdC0+dXJsID0gTlVMTDsKIAlyZXF1ZXN0LT5sb2NrID0gbG9jazsKIAlyZXF1ZXN0LT5oZWFkZXJzID0gTlVMTDsKLQlyZXF1ZXN0LT5sb2NhbF9maWxlbm8gPSAtMTsKLQlyZXF1ZXN0LT5sb2NhbF9zdHJlYW0gPSBOVUxMOwogCXJlcXVlc3QtPnN0YXRlID0gTkVFRF9QVVNIOwogCXJlcXVlc3QtPm5leHQgPSByZXF1ZXN0X3F1ZXVlX2hlYWQ7CiAJcmVxdWVzdF9xdWV1ZV9oZWFkID0gcmVxdWVzdDsKQEAgLTk0NywxNzkgKzcxNSwyMyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IGZldGNoX2luZGV4KHVuc2lnbmVkIGNoYXIgKnNoYTEpCi17Ci0JY2hhciAqaGV4ID0gc2hhMV90b19oZXgoc2hhMSk7Ci0JY2hhciAqZmlsZW5hbWU7Ci0JY2hhciAqdXJsOwotCWNoYXIgdG1wZmlsZVtQQVRIX01BWF07Ci0JbG9uZyBwcmV2X3Bvc24gPSAwOwotCWNoYXIgcmFuZ2VbUkFOR0VfSEVBREVSX1NJWkVdOwotCXN0cnVjdCBjdXJsX3NsaXN0ICpyYW5nZV9oZWFkZXIgPSBOVUxMOwotCi0JRklMRSAqaW5kZXhmaWxlOwotCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OwotCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKLQotCS8qIERvbid0IHVzZSB0aGUgaW5kZXggaWYgdGhlIHBhY2sgaXNuJ3QgdGhlcmUgKi8KLQl1cmwgPSB4bWFsbG9jKHN0cmxlbihyZXBvLT51cmwpICsgNjQpOwotCXNwcmludGYodXJsLCAiJXNvYmplY3RzL3BhY2svcGFjay0lcy5wYWNrIiwgcmVwby0+dXJsLCBoZXgpOwotCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKLQlzbG90LT5yZXN1bHRzID0gJnJlc3VsdHM7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwgdXJsKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfTk9CT0RZLCAxKTsKLQlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKLQkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOwotCQlpZiAocmVzdWx0cy5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSykgewotCQkJZnJlZSh1cmwpOwotCQkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gdmVyaWZ5IHBhY2sgJXMgaXMgYXZhaWxhYmxlIiwKLQkJCQkgICAgIGhleCk7Ci0JCX0KLQl9IGVsc2UgewotCQlmcmVlKHVybCk7Ci0JCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIHN0YXJ0IHJlcXVlc3QiKTsKLQl9Ci0KLQlpZiAoaGFzX3BhY2tfaW5kZXgoc2hhMSkpIHsKLQkJZnJlZSh1cmwpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAocHVzaF92ZXJib3NlbHkpCi0JCWZwcmludGYoc3RkZXJyLCAiR2V0dGluZyBpbmRleCBmb3IgcGFjayAlc1xuIiwgaGV4KTsKLQotCXNwcmludGYodXJsLCAiJXNvYmplY3RzL3BhY2svcGFjay0lcy5pZHgiLCByZXBvLT51cmwsIGhleCk7Ci0KLQlmaWxlbmFtZSA9IHNoYTFfcGFja19pbmRleF9uYW1lKHNoYTEpOwotCXNucHJpbnRmKHRtcGZpbGUsIHNpemVvZih0bXBmaWxlKSwgIiVzLnRlbXAiLCBmaWxlbmFtZSk7Ci0JaW5kZXhmaWxlID0gZm9wZW4odG1wZmlsZSwgImEiKTsKLQlpZiAoIWluZGV4ZmlsZSkgewotCQlmcmVlKHVybCk7Ci0JCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIG9wZW4gbG9jYWwgZmlsZSAlcyBmb3IgcGFjayBpbmRleCIsCi0JCQkgICAgIHRtcGZpbGUpOwotCX0KLQotCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKLQlzbG90LT5yZXN1bHRzID0gJnJlc3VsdHM7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX05PQk9EWSwgMCk7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBHRVQsIDEpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCBpbmRleGZpbGUpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBmd3JpdGUpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHVybCk7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIG5vX3ByYWdtYV9oZWFkZXIpOwotCXNsb3QtPmxvY2FsID0gaW5kZXhmaWxlOwotCi0JLyogSWYgdGhlcmUgaXMgZGF0YSBwcmVzZW50IGZyb20gYSBwcmV2aW91cyB0cmFuc2ZlciBhdHRlbXB0LAotCSAgIHJlc3VtZSB3aGVyZSBpdCBsZWZ0IG9mZiAqLwotCXByZXZfcG9zbiA9IGZ0ZWxsKGluZGV4ZmlsZSk7Ci0JaWYgKHByZXZfcG9zbj4wKSB7Ci0JCWlmIChwdXNoX3ZlcmJvc2VseSkKLQkJCWZwcmludGYoc3RkZXJyLAotCQkJCSJSZXN1bWluZyBmZXRjaCBvZiBpbmRleCBmb3IgcGFjayAlcyBhdCBieXRlICVsZFxuIiwKLQkJCQloZXgsIHByZXZfcG9zbik7Ci0JCXNwcmludGYocmFuZ2UsICJSYW5nZTogYnl0ZXM9JWxkLSIsIHByZXZfcG9zbik7Ci0JCXJhbmdlX2hlYWRlciA9IGN1cmxfc2xpc3RfYXBwZW5kKHJhbmdlX2hlYWRlciwgcmFuZ2UpOwotCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgcmFuZ2VfaGVhZGVyKTsKLQl9Ci0KLQlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKLQkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOwotCQlpZiAocmVzdWx0cy5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSykgewotCQkJZnJlZSh1cmwpOwotCQkJZmNsb3NlKGluZGV4ZmlsZSk7Ci0JCQlzbG90LT5sb2NhbCA9IE5VTEw7Ci0JCQlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byBnZXQgcGFjayBpbmRleCAlc1xuJXMiLCB1cmwsCi0JCQkJICAgICBjdXJsX2Vycm9yc3RyKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWZyZWUodXJsKTsKLQkJZmNsb3NlKGluZGV4ZmlsZSk7Ci0JCXNsb3QtPmxvY2FsID0gTlVMTDsKLQkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gc3RhcnQgcmVxdWVzdCIpOwotCX0KLQotCWZyZWUodXJsKTsKLQlmY2xvc2UoaW5kZXhmaWxlKTsKLQlzbG90LT5sb2NhbCA9IE5VTEw7Ci0KLQlyZXR1cm4gbW92ZV90ZW1wX3RvX2ZpbGUodG1wZmlsZSwgZmlsZW5hbWUpOwotfQotCi1zdGF0aWMgaW50IHNldHVwX2luZGV4KHVuc2lnbmVkIGNoYXIgKnNoYTEpCi17Ci0Jc3RydWN0IHBhY2tlZF9naXQgKm5ld19wYWNrOwotCi0JaWYgKGZldGNoX2luZGV4KHNoYTEpKQotCQlyZXR1cm4gLTE7Ci0KLQluZXdfcGFjayA9IHBhcnNlX3BhY2tfaW5kZXgoc2hhMSk7Ci0JbmV3X3BhY2stPm5leHQgPSByZXBvLT5wYWNrczsKLQlyZXBvLT5wYWNrcyA9IG5ld19wYWNrOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGZldGNoX2luZGljZXModm9pZCkKIHsKLQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwotCWNoYXIgKnVybDsKLQlzdHJ1Y3Qgc3RyYnVmIGJ1ZmZlciA9IFNUUkJVRl9JTklUOwotCWNoYXIgKmRhdGE7Ci0JaW50IGkgPSAwOwotCi0Jc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7Ci0Jc3RydWN0IHNsb3RfcmVzdWx0cyByZXN1bHRzOworCWludCByZXQ7CiAKIAlpZiAocHVzaF92ZXJib3NlbHkpCiAJCWZwcmludGYoc3RkZXJyLCAiR2V0dGluZyBwYWNrIGxpc3RcbiIpOwogCi0JdXJsID0geG1hbGxvYyhzdHJsZW4ocmVwby0+dXJsKSArIDIwKTsKLQlzcHJpbnRmKHVybCwgIiVzb2JqZWN0cy9pbmZvL3BhY2tzIiwgcmVwby0+dXJsKTsKLQotCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKLQlzbG90LT5yZXN1bHRzID0gJnJlc3VsdHM7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0ZJTEUsICZidWZmZXIpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBmd3JpdGVfYnVmZmVyKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBOVUxMKTsKLQlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKLQkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOwotCQlpZiAocmVzdWx0cy5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSykgewotCQkJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7Ci0JCQlmcmVlKHVybCk7Ci0JCQlpZiAocmVzdWx0cy5odHRwX2NvZGUgPT0gNDA0KQotCQkJCXJldHVybiAwOwotCQkJZWxzZQotCQkJCXJldHVybiBlcnJvcigiJXMiLCBjdXJsX2Vycm9yc3RyKTsKLQkJfQotCX0gZWxzZSB7Ci0JCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOwotCQlmcmVlKHVybCk7Ci0JCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIHN0YXJ0IHJlcXVlc3QiKTsKLQl9Ci0JZnJlZSh1cmwpOwotCi0JZGF0YSA9IGJ1ZmZlci5idWY7Ci0Jd2hpbGUgKGkgPCBidWZmZXIubGVuKSB7Ci0JCXN3aXRjaCAoZGF0YVtpXSkgewotCQljYXNlICdQJzoKLQkJCWkrKzsKLQkJCWlmIChpICsgNTIgPCBidWZmZXIubGVuICYmCi0JCQkgICAgIXByZWZpeGNtcChkYXRhICsgaSwgIiBwYWNrLSIpICYmCi0JCQkgICAgIXByZWZpeGNtcChkYXRhICsgaSArIDQ2LCAiLnBhY2tcbiIpKSB7Ci0JCQkJZ2V0X3NoYTFfaGV4KGRhdGEgKyBpICsgNiwgc2hhMSk7Ci0JCQkJc2V0dXBfaW5kZXgoc2hhMSk7Ci0JCQkJaSArPSA1MTsKLQkJCQlicmVhazsKLQkJCX0KLQkJZGVmYXVsdDoKLQkJCXdoaWxlIChkYXRhW2ldICE9ICdcbicpCi0JCQkJaSsrOwotCQl9Ci0JCWkrKzsKKwlzd2l0Y2ggKGh0dHBfZ2V0X2luZm9fcGFja3MocmVwby0+dXJsLCAmcmVwby0+cGFja3MpKSB7CisJY2FzZSBIVFRQX09LOgorCWNhc2UgSFRUUF9NSVNTSU5HX1RBUkdFVDoKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLTE7CiAJfQogCi0Jc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgb25lX3JlbW90ZV9vYmplY3QoY29uc3QgY2hhciAqaGV4KQpAQCAtMTg1MCw3ICsxNDYyLDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLCAqKnJlbW90ZV90YWlsOworc3RhdGljIHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzOwogCiBzdGF0aWMgdm9pZCBvbmVfcmVtb3RlX3JlZihjaGFyICpyZWZuYW1lKQogewpAQCAtMTg4MCwyNyArMTQ5MiwxNSBAQAogCQl9CiAJfQogCi0JKnJlbW90ZV90YWlsID0gcmVmOwotCXJlbW90ZV90YWlsID0gJnJlZi0+bmV4dDsKKwlyZWYtPm5leHQgPSByZW1vdGVfcmVmczsKKwlyZW1vdGVfcmVmcyA9IHJlZjsKIH0KIAogc3RhdGljIHZvaWQgZ2V0X2Rhdl9yZW1vdGVfaGVhZHModm9pZCkKIHsKLQlyZW1vdGVfdGFpbCA9ICZyZW1vdGVfcmVmczsKIAlyZW1vdGVfbHMoInJlZnMvIiwgKFBST0NFU1NfRklMRVMgfCBQUk9DRVNTX0RJUlMgfCBSRUNVUlNJVkUpLCBwcm9jZXNzX2xzX3JlZiwgTlVMTCk7CiB9CiAKLXN0YXRpYyBpbnQgaXNfemVyb19zaGExKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykgewotCQlpZiAoKnNoYTErKykKLQkJCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKLX0KLQogc3RhdGljIHZvaWQgYWRkX3JlbW90ZV9pbmZvX3JlZihzdHJ1Y3QgcmVtb3RlX2xzX2N0eCAqbHMpCiB7CiAJc3RydWN0IHN0cmJ1ZiAqYnVmID0gKHN0cnVjdCBzdHJidWYgKilscy0+dXNlckRhdGE7CkBAIC0xOTk0LDI5ICsxNTk0LDIyIEBACiBzdGF0aWMgaW50IHJlbW90ZV9leGlzdHMoY29uc3QgY2hhciAqcGF0aCkKIHsKIAljaGFyICp1cmwgPSB4bWFsbG9jKHN0cmxlbihyZXBvLT51cmwpICsgc3RybGVuKHBhdGgpICsgMSk7Ci0Jc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7Ci0Jc3RydWN0IHNsb3RfcmVzdWx0cyByZXN1bHRzOwotCWludCByZXQgPSAtMTsKKwlpbnQgcmV0OwogCiAJc3ByaW50Zih1cmwsICIlcyVzIiwgcmVwby0+dXJsLCBwYXRoKTsKIAotCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKLQlzbG90LT5yZXN1bHRzID0gJnJlc3VsdHM7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwgdXJsKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfTk9CT0RZLCAxKTsKLQotCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgewotCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7Ci0JCWlmIChyZXN1bHRzLmh0dHBfY29kZSA9PSA0MDQpCi0JCQlyZXQgPSAwOwotCQllbHNlIGlmIChyZXN1bHRzLmN1cmxfcmVzdWx0ID09IENVUkxFX09LKQotCQkJcmV0ID0gMTsKLQkJZWxzZQotCQkJZnByaW50ZihzdGRlcnIsICJIRUFEIEhUVFAgZXJyb3IgJWxkXG4iLCByZXN1bHRzLmh0dHBfY29kZSk7Ci0JfSBlbHNlIHsKLQkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gc3RhcnQgSEVBRCByZXF1ZXN0XG4iKTsKKwlzd2l0Y2ggKGh0dHBfZ2V0X3N0cmJ1Zih1cmwsIE5VTEwsIDApKSB7CisJY2FzZSBIVFRQX09LOgorCQlyZXQgPSAxOworCQlicmVhazsKKwljYXNlIEhUVFBfTUlTU0lOR19UQVJHRVQ6CisJCXJldCA9IDA7CisJCWJyZWFrOworCWNhc2UgSFRUUF9FUlJPUjoKKwkJaHR0cF9lcnJvcih1cmwsIEhUVFBfRVJST1IpOworCWRlZmF1bHQ6CisJCXJldCA9IC0xOwogCX0KLQogCWZyZWUodXJsKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjAyNSwyNyArMTYxOCwxMyBAQAogewogCWNoYXIgKnVybDsKIAlzdHJ1Y3Qgc3RyYnVmIGJ1ZmZlciA9IFNUUkJVRl9JTklUOwotCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OwotCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKIAogCXVybCA9IHhtYWxsb2Moc3RybGVuKHJlcG8tPnVybCkgKyBzdHJsZW4ocGF0aCkgKyAxKTsKIAlzcHJpbnRmKHVybCwgIiVzJXMiLCByZXBvLT51cmwsIHBhdGgpOwogCi0Jc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOwotCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgJmJ1ZmZlcik7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZV9idWZmZXIpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBOVUxMKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOwotCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgewotCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7Ci0JCWlmIChyZXN1bHRzLmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7Ci0JCQlkaWUoIkNvdWxkbid0IGdldCAlcyBmb3IgcmVtb3RlIHN5bXJlZlxuJXMiLAotCQkJICAgIHVybCwgY3VybF9lcnJvcnN0cik7Ci0JCX0KLQl9IGVsc2UgewotCQlkaWUoIlVuYWJsZSB0byBzdGFydCByZW1vdGUgc3ltcmVmIHJlcXVlc3QiKTsKLQl9CisJaWYgKGh0dHBfZ2V0X3N0cmJ1Zih1cmwsICZidWZmZXIsIDApICE9IEhUVFBfT0spCisJCWRpZSgiQ291bGRuJ3QgZ2V0ICVzIGZvciByZW1vdGUgc3ltcmVmXG4lcyIsIHVybCwKKwkJICAgIGN1cmxfZXJyb3JzdHIpOwogCWZyZWUodXJsKTsKIAogCWZyZWUoKnN5bXJlZik7CkBAIC0yMTI2LDEzICsxNzA1LDEzIEBACiAJCS8qIFJlbW90ZSBIRUFEIG11c3QgcmVzb2x2ZSB0byBhIGtub3duIG9iamVjdCAqLwogCQlpZiAoc3ltcmVmKQogCQkJcmV0dXJuIGVycm9yKCJSZW1vdGUgSEVBRCBzeW1yZWZzIHRvbyBkZWVwIik7Ci0JCWlmIChpc196ZXJvX3NoYTEoaGVhZF9zaGExKSkKKwkJaWYgKGlzX251bGxfc2hhMShoZWFkX3NoYTEpKQogCQkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gcmVzb2x2ZSByZW1vdGUgSEVBRCIpOwogCQlpZiAoIWhhc19zaGExX2ZpbGUoaGVhZF9zaGExKSkKIAkJCXJldHVybiBlcnJvcigiUmVtb3RlIEhFQUQgcmVzb2x2ZXMgdG8gb2JqZWN0ICVzXG53aGljaCBkb2VzIG5vdCBleGlzdCBsb2NhbGx5LCBwZXJoYXBzIHlvdSBuZWVkIHRvIGZldGNoPyIsIHNoYTFfdG9faGV4KGhlYWRfc2hhMSkpOwogCiAJCS8qIFJlbW90ZSBicmFuY2ggbXVzdCByZXNvbHZlIHRvIGEga25vd24gb2JqZWN0ICovCi0JCWlmIChpc196ZXJvX3NoYTEocmVtb3RlX3JlZi0+b2xkX3NoYTEpKQorCQlpZiAoaXNfbnVsbF9zaGExKHJlbW90ZV9yZWYtPm9sZF9zaGExKSkKIAkJCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIHJlc29sdmUgcmVtb3RlIGJyYW5jaCAlcyIsCiAJCQkJICAgICByZW1vdGVfcmVmLT5uYW1lKTsKIAkJaWYgKCFoYXNfc2hhMV9maWxlKHJlbW90ZV9yZWYtPm9sZF9zaGExKSkKQEAgLTIxNzQsNiArMTc1MywyNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBydW5fcmVxdWVzdF9xdWV1ZSh2b2lkKQoreworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJaXNfcnVubmluZ19xdWV1ZSA9IDE7CisJZmlsbF9hY3RpdmVfc2xvdHMoKTsKKwlhZGRfZmlsbF9mdW5jdGlvbihOVUxMLCBmaWxsX2FjdGl2ZV9zbG90KTsKKyNlbmRpZgorCWRvIHsKKwkJZmluaXNoX2FsbF9hY3RpdmVfc2xvdHMoKTsKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCQlmaWxsX2FjdGl2ZV9zbG90cygpOworI2VuZGlmCisJfSB3aGlsZSAocmVxdWVzdF9xdWV1ZV9oZWFkICYmICFhYm9ydGVkKTsKKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJaXNfcnVubmluZ19xdWV1ZSA9IDA7CisjZW5kaWYKK30KKwogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCXN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0OwpAQCAtMjE5NSw4ICsxNzkzLDYgQEAKIAogCWdpdF9leHRyYWN0X2FyZ3YwX3BhdGgoYXJndlswXSk7CiAKLQlzZXR1cF9naXRfZGlyZWN0b3J5KCk7Ci0KIAlyZXBvID0geGNhbGxvYyhzaXplb2YoKnJlcG8pLCAxKTsKIAogCWFyZ3YrKzsKQEAgLTIyMTYsOCArMTgxMiwxMyBAQAogCQkJCWRyeV9ydW4gPSAxOwogCQkJCWNvbnRpbnVlOwogCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1oZWxwZXItc3RhdHVzIikpIHsKKwkJCQloZWxwZXJfc3RhdHVzID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KIAkJCWlmICghc3RyY21wKGFyZywgIi0tdmVyYm9zZSIpKSB7CiAJCQkJcHVzaF92ZXJib3NlbHkgPSAxOworCQkJCWh0dHBfaXNfdmVyYm9zZSA9IDE7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlpZiAoIXN0cmNtcChhcmcsICItZCIpKSB7CkBAIC0yMjI5LDYgKzE4MzAsOCBAQAogCQkJCWZvcmNlX2RlbGV0ZSA9IDE7CiAJCQkJY29udGludWU7CiAJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItaCIpKQorCQkJCXVzYWdlKGh0dHBfcHVzaF91c2FnZSk7CiAJCX0KIAkJaWYgKCFyZXBvLT51cmwpIHsKIAkJCWNoYXIgKnBhdGggPSBzdHJzdHIoYXJnLCAiLy8iKTsKQEAgLTIyNTYsNiArMTg1OSw4IEBACiAJaWYgKGRlbGV0ZV9icmFuY2ggJiYgbnJfcmVmc3BlYyAhPSAxKQogCQlkaWUoIllvdSBtdXN0IHNwZWNpZnkgb25seSBvbmUgYnJhbmNoIG5hbWUgd2hlbiBkZWxldGluZyBhIHJlbW90ZSBicmFuY2giKTsKIAorCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKwogCW1lbXNldChyZW1vdGVfZGlyX2V4aXN0cywgLTEsIDI1Nik7CiAKIAkvKgpAQCAtMjI2Nyw4ICsxODcyLDYgQEAKIAlyZW1vdGUtPnVybFtyZW1vdGUtPnVybF9ucisrXSA9IHJlcG8tPnVybDsKIAlodHRwX2luaXQocmVtb3RlKTsKIAotCW5vX3ByYWdtYV9oZWFkZXIgPSBjdXJsX3NsaXN0X2FwcGVuZChub19wcmFnbWFfaGVhZGVyLCAiUHJhZ21hOiIpOwotCiAJaWYgKHJlcG8tPnVybCAmJiByZXBvLT51cmxbc3RybGVuKHJlcG8tPnVybCktMV0gIT0gJy8nKSB7CiAJCXJld3JpdHRlbl91cmwgPSB4bWFsbG9jKHN0cmxlbihyZXBvLT51cmwpKzIpOwogCQlzdHJjcHkocmV3cml0dGVuX3VybCwgcmVwby0+dXJsKTsKQEAgLTIyNzgsNiArMTg4MSwxMCBAQAogCQlyZXBvLT51cmwgPSByZXdyaXR0ZW5fdXJsOwogCX0KIAorI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJaXNfcnVubmluZ19xdWV1ZSA9IDA7CisjZW5kaWYKKwogCS8qIFZlcmlmeSBEQVYgY29tcGxpYW5jZS9sb2NrIHN1cHBvcnQgKi8KIAlpZiAoIWxvY2tpbmdfYXZhaWxhYmxlKCkpIHsKIAkJcmMgPSAxOwpAQCAtMjMwNywyNSArMTkxNCwyOSBAQAogCWxvY2FsX3JlZnMgPSBnZXRfbG9jYWxfaGVhZHMoKTsKIAlmcHJpbnRmKHN0ZGVyciwgIkZldGNoaW5nIHJlbW90ZSBoZWFkcy4uLlxuIik7CiAJZ2V0X2Rhdl9yZW1vdGVfaGVhZHMoKTsKKwlydW5fcmVxdWVzdF9xdWV1ZSgpOwogCiAJLyogUmVtb3ZlIGEgcmVtb3RlIGJyYW5jaCBpZiAtZCBvciAtRCB3YXMgc3BlY2lmaWVkICovCiAJaWYgKGRlbGV0ZV9icmFuY2gpIHsKLQkJaWYgKGRlbGV0ZV9yZW1vdGVfYnJhbmNoKHJlZnNwZWNbMF0sIGZvcmNlX2RlbGV0ZSkgPT0gLTEpCisJCWlmIChkZWxldGVfcmVtb3RlX2JyYW5jaChyZWZzcGVjWzBdLCBmb3JjZV9kZWxldGUpID09IC0xKSB7CiAJCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBkZWxldGUgcmVtb3RlIGJyYW5jaCAlc1xuIiwKIAkJCQlyZWZzcGVjWzBdKTsKKwkJCWlmIChoZWxwZXJfc3RhdHVzKQorCQkJCXByaW50ZigiZXJyb3IgJXMgY2Fubm90IHJlbW92ZVxuIiwgcmVmc3BlY1swXSk7CisJCX0KIAkJZ290byBjbGVhbnVwOwogCX0KIAogCS8qIG1hdGNoIHRoZW0gdXAgKi8KLQlpZiAoIXJlbW90ZV90YWlsKQotCQlyZW1vdGVfdGFpbCA9ICZyZW1vdGVfcmVmczsKLQlpZiAobWF0Y2hfcmVmcyhsb2NhbF9yZWZzLCByZW1vdGVfcmVmcywgJnJlbW90ZV90YWlsLAorCWlmIChtYXRjaF9yZWZzKGxvY2FsX3JlZnMsICZyZW1vdGVfcmVmcywKIAkJICAgICAgIG5yX3JlZnNwZWMsIChjb25zdCBjaGFyICoqKSByZWZzcGVjLCBwdXNoX2FsbCkpIHsKIAkJcmMgPSAtMTsKIAkJZ290byBjbGVhbnVwOwogCX0KIAlpZiAoIXJlbW90ZV9yZWZzKSB7CiAJCWZwcmludGYoc3RkZXJyLCAiTm8gcmVmcyBpbiBjb21tb24gYW5kIG5vbmUgc3BlY2lmaWVkOyBkb2luZyBub3RoaW5nLlxuIik7CisJCWlmIChoZWxwZXJfc3RhdHVzKQorCQkJcHJpbnRmKCJlcnJvciBudWxsIG5vIG1hdGNoXG4iKTsKIAkJcmMgPSAwOwogCQlnb3RvIGNsZWFudXA7CiAJfQpAQCAtMjMzMywxOCArMTk0NCwyMiBAQAogCW5ld19yZWZzID0gMDsKIAlmb3IgKHJlZiA9IHJlbW90ZV9yZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgewogCQljaGFyIG9sZF9oZXhbNjBdLCAqbmV3X2hleDsKLQkJY29uc3QgY2hhciAqY29tbWl0X2FyZ3ZbNF07CisJCWNvbnN0IGNoYXIgKmNvbW1pdF9hcmd2WzVdOwogCQlpbnQgY29tbWl0X2FyZ2M7CiAJCWNoYXIgKm5ld19zaGExX2hleCwgKm9sZF9zaGExX2hleDsKIAogCQlpZiAoIXJlZi0+cGVlcl9yZWYpCiAJCQljb250aW51ZTsKIAotCQlpZiAoaXNfemVyb19zaGExKHJlZi0+cGVlcl9yZWYtPm5ld19zaGExKSkgeworCQlpZiAoaXNfbnVsbF9zaGExKHJlZi0+cGVlcl9yZWYtPm5ld19zaGExKSkgewogCQkJaWYgKGRlbGV0ZV9yZW1vdGVfYnJhbmNoKHJlZi0+bmFtZSwgMSkgPT0gLTEpIHsKIAkJCQllcnJvcigiQ291bGQgbm90IHJlbW92ZSAlcyIsIHJlZi0+bmFtZSk7CisJCQkJaWYgKGhlbHBlcl9zdGF0dXMpCisJCQkJCXByaW50ZigiZXJyb3IgJXMgY2Fubm90IHJlbW92ZVxuIiwgcmVmLT5uYW1lKTsKIAkJCQlyYyA9IC00OwogCQkJfQorCQkJZWxzZSBpZiAoaGVscGVyX3N0YXR1cykKKwkJCQlwcmludGYoIm9rICVzXG4iLCByZWYtPm5hbWUpOwogCQkJbmV3X3JlZnMrKzsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0yMzUyLDExICsxOTY3LDEzIEBACiAJCWlmICghaGFzaGNtcChyZWYtPm9sZF9zaGExLCByZWYtPnBlZXJfcmVmLT5uZXdfc2hhMSkpIHsKIAkJCWlmIChwdXNoX3ZlcmJvc2VseSB8fCAxKQogCQkJCWZwcmludGYoc3RkZXJyLCAiJyVzJzogdXAtdG8tZGF0ZVxuIiwgcmVmLT5uYW1lKTsKKwkJCWlmIChoZWxwZXJfc3RhdHVzKQorCQkJCXByaW50Zigib2sgJXMgdXAgdG8gZGF0ZVxuIiwgcmVmLT5uYW1lKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJaWYgKCFmb3JjZV9hbGwgJiYKLQkJICAgICFpc196ZXJvX3NoYTEocmVmLT5vbGRfc2hhMSkgJiYKKwkJICAgICFpc19udWxsX3NoYTEocmVmLT5vbGRfc2hhMSkgJiYKIAkJICAgICFyZWYtPmZvcmNlKSB7CiAJCQlpZiAoIWhhc19zaGExX2ZpbGUocmVmLT5vbGRfc2hhMSkgfHwKIAkJCSAgICAhcmVmX25ld2VyKHJlZi0+cGVlcl9yZWYtPm5ld19zaGExLApAQCAtMjM3NSw2ICsxOTkyLDggQEAKIAkJCQkgICAgICAibmVlZCB0byBwdWxsIGZpcnN0PyIsCiAJCQkJICAgICAgcmVmLT5uYW1lLAogCQkJCSAgICAgIHJlZi0+cGVlcl9yZWYtPm5hbWUpOworCQkJCWlmIChoZWxwZXJfc3RhdHVzKQorCQkJCQlwcmludGYoImVycm9yICVzIG5vbi1mYXN0IGZvcndhcmRcbiIsIHJlZi0+bmFtZSk7CiAJCQkJcmMgPSAtMjsKIAkJCQljb250aW51ZTsKIAkJCX0KQEAgLTIzODgsMTQgKzIwMDcsMTkgQEAKIAkJaWYgKHN0cmNtcChyZWYtPm5hbWUsIHJlZi0+cGVlcl9yZWYtPm5hbWUpKQogCQkJZnByaW50ZihzdGRlcnIsICIgdXNpbmcgJyVzJyIsIHJlZi0+cGVlcl9yZWYtPm5hbWUpOwogCQlmcHJpbnRmKHN0ZGVyciwgIlxuICBmcm9tICVzXG4gIHRvICAgJXNcbiIsIG9sZF9oZXgsIG5ld19oZXgpOwotCQlpZiAoZHJ5X3J1bikKKwkJaWYgKGRyeV9ydW4pIHsKKwkJCWlmIChoZWxwZXJfc3RhdHVzKQorCQkJCXByaW50Zigib2sgJXNcbiIsIHJlZi0+bmFtZSk7CiAJCQljb250aW51ZTsKKwkJfQogCiAJCS8qIExvY2sgcmVtb3RlIGJyYW5jaCByZWYgKi8KIAkJcmVmX2xvY2sgPSBsb2NrX3JlbW90ZShyZWYtPm5hbWUsIExPQ0tfVElNRSk7CiAJCWlmIChyZWZfbG9jayA9PSBOVUxMKSB7CiAJCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBsb2NrIHJlbW90ZSBicmFuY2ggJXNcbiIsCiAJCQkJcmVmLT5uYW1lKTsKKwkJCWlmIChoZWxwZXJfc3RhdHVzKQorCQkJCXByaW50ZigiZXJyb3IgJXMgbG9jayBlcnJvclxuIiwgcmVmLT5uYW1lKTsKIAkJCXJjID0gMTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0yNDA2LDEzICsyMDMwLDE0IEBACiAJCW9sZF9zaGExX2hleCA9IE5VTEw7CiAJCWNvbW1pdF9hcmd2WzFdID0gIi0tb2JqZWN0cyI7CiAJCWNvbW1pdF9hcmd2WzJdID0gbmV3X3NoYTFfaGV4OwotCQlpZiAoIXB1c2hfYWxsICYmICFpc196ZXJvX3NoYTEocmVmLT5vbGRfc2hhMSkpIHsKKwkJaWYgKCFwdXNoX2FsbCAmJiAhaXNfbnVsbF9zaGExKHJlZi0+b2xkX3NoYTEpKSB7CiAJCQlvbGRfc2hhMV9oZXggPSB4bWFsbG9jKDQyKTsKIAkJCXNwcmludGYob2xkX3NoYTFfaGV4LCAiXiVzIiwKIAkJCQlzaGExX3RvX2hleChyZWYtPm9sZF9zaGExKSk7CiAJCQljb21taXRfYXJndlszXSA9IG9sZF9zaGExX2hleDsKIAkJCWNvbW1pdF9hcmdjKys7CiAJCX0KKwkJY29tbWl0X2FyZ3ZbY29tbWl0X2FyZ2NdID0gTlVMTDsKIAkJaW5pdF9yZXZpc2lvbnMoJnJldnMsIHNldHVwX2dpdF9kaXJlY3RvcnkoKSk7CiAJCXNldHVwX3JldmlzaW9ucyhjb21taXRfYXJnYywgY29tbWl0X2FyZ3YsICZyZXZzLCBOVUxMKTsKIAkJcmV2cy5lZGdlX2hpbnQgPSAwOyAvKiBqdXN0IGluIGNhc2UgKi8KQEAgLTI0MzYsMTYgKzIwNjEsOCBAQAogCQlpZiAob2JqZWN0c190b19zZW5kKQogCQkJZnByaW50ZihzdGRlcnIsICIgICAgc2VuZGluZyAlZCBvYmplY3RzXG4iLAogCQkJCW9iamVjdHNfdG9fc2VuZCk7Ci0jaWZkZWYgVVNFX0NVUkxfTVVMVEkKLQkJZmlsbF9hY3RpdmVfc2xvdHMoKTsKLQkJYWRkX2ZpbGxfZnVuY3Rpb24oTlVMTCwgZmlsbF9hY3RpdmVfc2xvdCk7Ci0jZW5kaWYKLQkJZG8gewotCQkJZmluaXNoX2FsbF9hY3RpdmVfc2xvdHMoKTsKLSNpZmRlZiBVU0VfQ1VSTF9NVUxUSQotCQkJZmlsbF9hY3RpdmVfc2xvdHMoKTsKLSNlbmRpZgotCQl9IHdoaWxlIChyZXF1ZXN0X3F1ZXVlX2hlYWQgJiYgIWFib3J0ZWQpOworCisJCXJ1bl9yZXF1ZXN0X3F1ZXVlKCk7CiAKIAkJLyogVXBkYXRlIHRoZSByZW1vdGUgYnJhbmNoIGlmIGFsbCB3ZW50IHdlbGwgKi8KIAkJaWYgKGFib3J0ZWQgfHwgIXVwZGF0ZV9yZW1vdGUocmVmLT5uZXdfc2hhMSwgcmVmX2xvY2spKQpAQCAtMjQ1Myw2ICsyMDcwLDggQEAKIAogCQlpZiAoIXJjKQogCQkJZnByaW50ZihzdGRlcnIsICIgICAgZG9uZVxuIik7CisJCWlmIChoZWxwZXJfc3RhdHVzKQorCQkJcHJpbnRmKCIlcyAlc1xuIiwgIXJjID8gIm9rIiA6ICJlcnJvciIsIHJlZi0+bmFtZSk7CiAJCXVubG9ja19yZW1vdGUocmVmX2xvY2spOwogCQljaGVja19sb2NrcygpOwogCX0KQEAgLTI0NzQsOCArMjA5Myw2IEBACiAJCXVubG9ja19yZW1vdGUoaW5mb19yZWZfbG9jayk7CiAJZnJlZShyZXBvKTsKIAotCWN1cmxfc2xpc3RfZnJlZV9hbGwobm9fcHJhZ21hX2hlYWRlcik7Ci0KIAlodHRwX2NsZWFudXAoKTsKIAogCXJlcXVlc3QgPSByZXF1ZXN0X3F1ZXVlX2hlYWQ7CmRpZmYgLS1naXQgYS9odHRwLXdhbGtlci5jIGIvaHR0cC13YWxrZXIuYwppbmRleCA5Mzc3ODUxLi43MDBiYzEzIDEwMDY0NAotLS0gYS9odHRwLXdhbGtlci5jCisrKyBiL2h0dHAtd2Fsa2VyLmMKQEAgLTEsMTIgKzEsOCBAQAogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSAiY29tbWl0LmgiCi0jaW5jbHVkZSAicGFjay5oIgogI2luY2x1ZGUgIndhbGtlci5oIgogI2luY2x1ZGUgImh0dHAuaCIKIAotI2RlZmluZSBQUkVWX0JVRl9TSVpFIDQwOTYKLSNkZWZpbmUgUkFOR0VfSEVBREVSX1NJWkUgMzAKLQogc3RydWN0IGFsdF9iYXNlCiB7CiAJY2hhciAqYmFzZTsKQEAgLTI3LDIwICsyMyw4IEBACiAJc3RydWN0IHdhbGtlciAqd2Fsa2VyOwogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CiAJc3RydWN0IGFsdF9iYXNlICpyZXBvOwotCWNoYXIgKnVybDsKLQljaGFyIGZpbGVuYW1lW1BBVEhfTUFYXTsKLQljaGFyIHRtcGZpbGVbUEFUSF9NQVhdOwotCWludCBsb2NhbDsKIAllbnVtIG9iamVjdF9yZXF1ZXN0X3N0YXRlIHN0YXRlOwotCUNVUkxjb2RlIGN1cmxfcmVzdWx0OwotCWNoYXIgZXJyb3JzdHJbQ1VSTF9FUlJPUl9TSVpFXTsKLQlsb25nIGh0dHBfY29kZTsKLQl1bnNpZ25lZCBjaGFyIHJlYWxfc2hhMVsyMF07Ci0JZ2l0X1NIQV9DVFggYzsKLQl6X3N0cmVhbSBzdHJlYW07Ci0JaW50IHpyZXQ7Ci0JaW50IHJlbmFtZTsKLQlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqcmVxOwogCXN0cnVjdCBvYmplY3RfcmVxdWVzdCAqbmV4dDsKIH07CiAKQEAgLTU3LDM5ICs0MSwxMCBAQAogCWNvbnN0IGNoYXIgKnVybDsKIAlpbnQgZ290X2FsdGVybmF0ZXM7CiAJc3RydWN0IGFsdF9iYXNlICphbHQ7Ci0Jc3RydWN0IGN1cmxfc2xpc3QgKm5vX3ByYWdtYV9oZWFkZXI7CiB9OwogCiBzdGF0aWMgc3RydWN0IG9iamVjdF9yZXF1ZXN0ICpvYmplY3RfcXVldWVfaGVhZDsKIAotc3RhdGljIHNpemVfdCBmd3JpdGVfc2hhMV9maWxlKHZvaWQgKnB0ciwgc2l6ZV90IGVsdHNpemUsIHNpemVfdCBubWVtYiwKLQkJCSAgICAgICB2b2lkICpkYXRhKQotewotCXVuc2lnbmVkIGNoYXIgZXhwbls0MDk2XTsKLQlzaXplX3Qgc2l6ZSA9IGVsdHNpemUgKiBubWVtYjsKLQlpbnQgcG9zbiA9IDA7Ci0Jc3RydWN0IG9iamVjdF9yZXF1ZXN0ICpvYmpfcmVxID0gKHN0cnVjdCBvYmplY3RfcmVxdWVzdCAqKWRhdGE7Ci0JZG8gewotCQlzc2l6ZV90IHJldHZhbCA9IHh3cml0ZShvYmpfcmVxLT5sb2NhbCwKLQkJCQkgICAgICAgKGNoYXIgKikgcHRyICsgcG9zbiwgc2l6ZSAtIHBvc24pOwotCQlpZiAocmV0dmFsIDwgMCkKLQkJCXJldHVybiBwb3NuOwotCQlwb3NuICs9IHJldHZhbDsKLQl9IHdoaWxlIChwb3NuIDwgc2l6ZSk7Ci0KLQlvYmpfcmVxLT5zdHJlYW0uYXZhaWxfaW4gPSBzaXplOwotCW9ial9yZXEtPnN0cmVhbS5uZXh0X2luID0gcHRyOwotCWRvIHsKLQkJb2JqX3JlcS0+c3RyZWFtLm5leHRfb3V0ID0gZXhwbjsKLQkJb2JqX3JlcS0+c3RyZWFtLmF2YWlsX291dCA9IHNpemVvZihleHBuKTsKLQkJb2JqX3JlcS0+enJldCA9IGdpdF9pbmZsYXRlKCZvYmpfcmVxLT5zdHJlYW0sIFpfU1lOQ19GTFVTSCk7Ci0JCWdpdF9TSEExX1VwZGF0ZSgmb2JqX3JlcS0+YywgZXhwbiwKLQkJCSAgICBzaXplb2YoZXhwbikgLSBvYmpfcmVxLT5zdHJlYW0uYXZhaWxfb3V0KTsKLQl9IHdoaWxlIChvYmpfcmVxLT5zdHJlYW0uYXZhaWxfaW4gJiYgb2JqX3JlcS0+enJldCA9PSBaX09LKTsKLQlkYXRhX3JlY2VpdmVkKys7Ci0JcmV0dXJuIHNpemU7Ci19Ci0KIHN0YXRpYyB2b2lkIGZldGNoX2FsdGVybmF0ZXMoc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBjb25zdCBjaGFyICpiYXNlKTsKIAogc3RhdGljIHZvaWQgcHJvY2Vzc19vYmplY3RfcmVzcG9uc2Uodm9pZCAqY2FsbGJhY2tfZGF0YSk7CkBAIC05NywxNjUgKzUyLDM1IEBACiBzdGF0aWMgdm9pZCBzdGFydF9vYmplY3RfcmVxdWVzdChzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsCiAJCQkJIHN0cnVjdCBvYmplY3RfcmVxdWVzdCAqb2JqX3JlcSkKIHsKLQljaGFyICpoZXggPSBzaGExX3RvX2hleChvYmpfcmVxLT5zaGExKTsKLQljaGFyIHByZXZmaWxlW1BBVEhfTUFYXTsKLQljaGFyICp1cmw7Ci0JY2hhciAqcG9zbjsKLQlpbnQgcHJldmxvY2FsOwotCXVuc2lnbmVkIGNoYXIgcHJldl9idWZbUFJFVl9CVUZfU0laRV07Ci0Jc3NpemVfdCBwcmV2X3JlYWQgPSAwOwotCWxvbmcgcHJldl9wb3NuID0gMDsKLQljaGFyIHJhbmdlW1JBTkdFX0hFQURFUl9TSVpFXTsKLQlzdHJ1Y3QgY3VybF9zbGlzdCAqcmFuZ2VfaGVhZGVyID0gTlVMTDsKIAlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKLQlzdHJ1Y3Qgd2Fsa2VyX2RhdGEgKmRhdGEgPSB3YWxrZXItPmRhdGE7CisJc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKnJlcTsKIAotCXNucHJpbnRmKHByZXZmaWxlLCBzaXplb2YocHJldmZpbGUpLCAiJXMucHJldiIsIG9ial9yZXEtPmZpbGVuYW1lKTsKLQl1bmxpbmtfb3Jfd2FybihwcmV2ZmlsZSk7Ci0JcmVuYW1lKG9ial9yZXEtPnRtcGZpbGUsIHByZXZmaWxlKTsKLQl1bmxpbmtfb3Jfd2FybihvYmpfcmVxLT50bXBmaWxlKTsKLQotCWlmIChvYmpfcmVxLT5sb2NhbCAhPSAtMSkKLQkJZXJyb3IoImZkIGxlYWthZ2UgaW4gc3RhcnQ6ICVkIiwgb2JqX3JlcS0+bG9jYWwpOwotCW9ial9yZXEtPmxvY2FsID0gb3BlbihvYmpfcmVxLT50bXBmaWxlLAotCQkJICAgICAgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMLCAwNjY2KTsKLQkvKiBUaGlzIGNvdWxkIGhhdmUgZmFpbGVkIGR1ZSB0byB0aGUgImxhenkgZGlyZWN0b3J5IGNyZWF0aW9uIjsKLQkgKiB0cnkgdG8gbWtkaXIgdGhlIGxhc3QgcGF0aCBjb21wb25lbnQuCi0JICovCi0JaWYgKG9ial9yZXEtPmxvY2FsIDwgMCAmJiBlcnJubyA9PSBFTk9FTlQpIHsKLQkJY2hhciAqZGlyID0gc3RycmNocihvYmpfcmVxLT50bXBmaWxlLCAnLycpOwotCQlpZiAoZGlyKSB7Ci0JCQkqZGlyID0gMDsKLQkJCW1rZGlyKG9ial9yZXEtPnRtcGZpbGUsIDA3NzcpOwotCQkJKmRpciA9ICcvJzsKLQkJfQotCQlvYmpfcmVxLT5sb2NhbCA9IG9wZW4ob2JqX3JlcS0+dG1wZmlsZSwKLQkJCQkgICAgICBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA2NjYpOwotCX0KLQotCWlmIChvYmpfcmVxLT5sb2NhbCA8IDApIHsKKwlyZXEgPSBuZXdfaHR0cF9vYmplY3RfcmVxdWVzdChvYmpfcmVxLT5yZXBvLT5iYXNlLCBvYmpfcmVxLT5zaGExKTsKKwlpZiAocmVxID09IE5VTEwpIHsKIAkJb2JqX3JlcS0+c3RhdGUgPSBBQk9SVEVEOwotCQllcnJvcigiQ291bGRuJ3QgY3JlYXRlIHRlbXBvcmFyeSBmaWxlICVzIGZvciAlczogJXMiLAotCQkgICAgICBvYmpfcmVxLT50bXBmaWxlLCBvYmpfcmVxLT5maWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKIAkJcmV0dXJuOwogCX0KKwlvYmpfcmVxLT5yZXEgPSByZXE7CiAKLQltZW1zZXQoJm9ial9yZXEtPnN0cmVhbSwgMCwgc2l6ZW9mKG9ial9yZXEtPnN0cmVhbSkpOwotCi0JZ2l0X2luZmxhdGVfaW5pdCgmb2JqX3JlcS0+c3RyZWFtKTsKLQotCWdpdF9TSEExX0luaXQoJm9ial9yZXEtPmMpOwotCi0JdXJsID0geG1hbGxvYyhzdHJsZW4ob2JqX3JlcS0+cmVwby0+YmFzZSkgKyA1MSk7Ci0Jb2JqX3JlcS0+dXJsID0geG1hbGxvYyhzdHJsZW4ob2JqX3JlcS0+cmVwby0+YmFzZSkgKyA1MSk7Ci0Jc3RyY3B5KHVybCwgb2JqX3JlcS0+cmVwby0+YmFzZSk7Ci0JcG9zbiA9IHVybCArIHN0cmxlbihvYmpfcmVxLT5yZXBvLT5iYXNlKTsKLQlzdHJjcHkocG9zbiwgIi9vYmplY3RzLyIpOwotCXBvc24gKz0gOTsKLQltZW1jcHkocG9zbiwgaGV4LCAyKTsKLQlwb3NuICs9IDI7Ci0JKihwb3NuKyspID0gJy8nOwotCXN0cmNweShwb3NuLCBoZXggKyAyKTsKLQlzdHJjcHkob2JqX3JlcS0+dXJsLCB1cmwpOwotCi0JLyogSWYgYSBwcmV2aW91cyB0ZW1wIGZpbGUgaXMgcHJlc2VudCwgcHJvY2VzcyB3aGF0IHdhcyBhbHJlYWR5Ci0JICAgZmV0Y2hlZC4gKi8KLQlwcmV2bG9jYWwgPSBvcGVuKHByZXZmaWxlLCBPX1JET05MWSk7Ci0JaWYgKHByZXZsb2NhbCAhPSAtMSkgewotCQlkbyB7Ci0JCQlwcmV2X3JlYWQgPSB4cmVhZChwcmV2bG9jYWwsIHByZXZfYnVmLCBQUkVWX0JVRl9TSVpFKTsKLQkJCWlmIChwcmV2X3JlYWQ+MCkgewotCQkJCWlmIChmd3JpdGVfc2hhMV9maWxlKHByZXZfYnVmLAotCQkJCQkJICAgICAxLAotCQkJCQkJICAgICBwcmV2X3JlYWQsCi0JCQkJCQkgICAgIG9ial9yZXEpID09IHByZXZfcmVhZCkgewotCQkJCQlwcmV2X3Bvc24gKz0gcHJldl9yZWFkOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXByZXZfcmVhZCA9IC0xOwotCQkJCX0KLQkJCX0KLQkJfSB3aGlsZSAocHJldl9yZWFkID4gMCk7Ci0JCWNsb3NlKHByZXZsb2NhbCk7Ci0JfQotCXVubGlua19vcl93YXJuKHByZXZmaWxlKTsKLQotCS8qIFJlc2V0IGluZmxhdGUvU0hBMSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgcmVhZGluZyB0aGUgcHJldmlvdXMgdGVtcAotCSAgIGZpbGU7IGFsc28gcmV3aW5kIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvY2FsIGZpbGUuICovCi0JaWYgKHByZXZfcmVhZCA9PSAtMSkgewotCQltZW1zZXQoJm9ial9yZXEtPnN0cmVhbSwgMCwgc2l6ZW9mKG9ial9yZXEtPnN0cmVhbSkpOwotCQlnaXRfaW5mbGF0ZV9pbml0KCZvYmpfcmVxLT5zdHJlYW0pOwotCQlnaXRfU0hBMV9Jbml0KCZvYmpfcmVxLT5jKTsKLQkJaWYgKHByZXZfcG9zbj4wKSB7Ci0JCQlwcmV2X3Bvc24gPSAwOwotCQkJbHNlZWsob2JqX3JlcS0+bG9jYWwsIDAsIFNFRUtfU0VUKTsKLQkJCWZ0cnVuY2F0ZShvYmpfcmVxLT5sb2NhbCwgMCk7Ci0JCX0KLQl9Ci0KLQlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJc2xvdCA9IHJlcS0+c2xvdDsKIAlzbG90LT5jYWxsYmFja19mdW5jID0gcHJvY2Vzc19vYmplY3RfcmVzcG9uc2U7CiAJc2xvdC0+Y2FsbGJhY2tfZGF0YSA9IG9ial9yZXE7Ci0Jb2JqX3JlcS0+c2xvdCA9IHNsb3Q7Ci0KLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgb2JqX3JlcSk7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZV9zaGExX2ZpbGUpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9FUlJPUkJVRkZFUiwgb2JqX3JlcS0+ZXJyb3JzdHIpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHVybCk7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGRhdGEtPm5vX3ByYWdtYV9oZWFkZXIpOwotCi0JLyogSWYgd2UgaGF2ZSBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIGRhdGEgZnJvbSBhIHByZXZpb3VzIGZldGNoCi0JICAgYXR0ZW1wdCwgb25seSBmZXRjaCB0aGUgZGF0YSB3ZSBkb24ndCBhbHJlYWR5IGhhdmUuICovCi0JaWYgKHByZXZfcG9zbj4wKSB7Ci0JCWlmICh3YWxrZXItPmdldF92ZXJib3NlbHkpCi0JCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkiUmVzdW1pbmcgZmV0Y2ggb2Ygb2JqZWN0ICVzIGF0IGJ5dGUgJWxkXG4iLAotCQkJCWhleCwgcHJldl9wb3NuKTsKLQkJc3ByaW50ZihyYW5nZSwgIlJhbmdlOiBieXRlcz0lbGQtIiwgcHJldl9wb3NuKTsKLQkJcmFuZ2VfaGVhZGVyID0gY3VybF9zbGlzdF9hcHBlbmQocmFuZ2VfaGVhZGVyLCByYW5nZSk7Ci0JCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwKLQkJCQkgQ1VSTE9QVF9IVFRQSEVBREVSLCByYW5nZV9oZWFkZXIpOwotCX0KIAogCS8qIFRyeSB0byBnZXQgdGhlIHJlcXVlc3Qgc3RhcnRlZCwgYWJvcnQgdGhlIHJlcXVlc3Qgb24gZXJyb3IgKi8KIAlvYmpfcmVxLT5zdGF0ZSA9IEFDVElWRTsKIAlpZiAoIXN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CiAJCW9ial9yZXEtPnN0YXRlID0gQUJPUlRFRDsKLQkJb2JqX3JlcS0+c2xvdCA9IE5VTEw7Ci0JCWNsb3NlKG9ial9yZXEtPmxvY2FsKTsgb2JqX3JlcS0+bG9jYWwgPSAtMTsKLQkJZnJlZShvYmpfcmVxLT51cmwpOworCQlyZWxlYXNlX2h0dHBfb2JqZWN0X3JlcXVlc3QocmVxKTsKIAkJcmV0dXJuOwogCX0KIH0KIAogc3RhdGljIHZvaWQgZmluaXNoX29iamVjdF9yZXF1ZXN0KHN0cnVjdCBvYmplY3RfcmVxdWVzdCAqb2JqX3JlcSkKIHsKLQlzdHJ1Y3Qgc3RhdCBzdDsKLQotCWNsb3NlKG9ial9yZXEtPmxvY2FsKTsgb2JqX3JlcS0+bG9jYWwgPSAtMTsKLQotCWlmIChvYmpfcmVxLT5odHRwX2NvZGUgPT0gNDE2KSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiV2FybmluZzogcmVxdWVzdGVkIHJhbmdlIGludmFsaWQ7IHdlIG1heSBhbHJlYWR5IGhhdmUgYWxsIHRoZSBkYXRhLlxuIik7Ci0JfSBlbHNlIGlmIChvYmpfcmVxLT5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSykgewotCQlpZiAoc3RhdChvYmpfcmVxLT50bXBmaWxlLCAmc3QpID09IDApCi0JCQlpZiAoc3Quc3Rfc2l6ZSA9PSAwKQotCQkJCXVubGlua19vcl93YXJuKG9ial9yZXEtPnRtcGZpbGUpOworCWlmIChmaW5pc2hfaHR0cF9vYmplY3RfcmVxdWVzdChvYmpfcmVxLT5yZXEpKQogCQlyZXR1cm47Ci0JfQogCi0JZ2l0X2luZmxhdGVfZW5kKCZvYmpfcmVxLT5zdHJlYW0pOwotCWdpdF9TSEExX0ZpbmFsKG9ial9yZXEtPnJlYWxfc2hhMSwgJm9ial9yZXEtPmMpOwotCWlmIChvYmpfcmVxLT56cmV0ICE9IFpfU1RSRUFNX0VORCkgewotCQl1bmxpbmtfb3Jfd2FybihvYmpfcmVxLT50bXBmaWxlKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoaGFzaGNtcChvYmpfcmVxLT5zaGExLCBvYmpfcmVxLT5yZWFsX3NoYTEpKSB7Ci0JCXVubGlua19vcl93YXJuKG9ial9yZXEtPnRtcGZpbGUpOwotCQlyZXR1cm47Ci0JfQotCW9ial9yZXEtPnJlbmFtZSA9Ci0JCW1vdmVfdGVtcF90b19maWxlKG9ial9yZXEtPnRtcGZpbGUsIG9ial9yZXEtPmZpbGVuYW1lKTsKLQotCWlmIChvYmpfcmVxLT5yZW5hbWUgPT0gMCkKKwlpZiAob2JqX3JlcS0+cmVxLT5yZW5hbWUgPT0gMCkKIAkJd2Fsa2VyX3NheShvYmpfcmVxLT53YWxrZXIsICJnb3QgJXNcbiIsIHNoYTFfdG9faGV4KG9ial9yZXEtPnNoYTEpKTsKIH0KIApAQCAtMjY3LDE5ICs5MiwxNiBAQAogCXN0cnVjdCB3YWxrZXJfZGF0YSAqZGF0YSA9IHdhbGtlci0+ZGF0YTsKIAlzdHJ1Y3QgYWx0X2Jhc2UgKmFsdCA9IGRhdGEtPmFsdDsKIAotCW9ial9yZXEtPmN1cmxfcmVzdWx0ID0gb2JqX3JlcS0+c2xvdC0+Y3VybF9yZXN1bHQ7Ci0Jb2JqX3JlcS0+aHR0cF9jb2RlID0gb2JqX3JlcS0+c2xvdC0+aHR0cF9jb2RlOwotCW9ial9yZXEtPnNsb3QgPSBOVUxMOworCXByb2Nlc3NfaHR0cF9vYmplY3RfcmVxdWVzdChvYmpfcmVxLT5yZXEpOwogCW9ial9yZXEtPnN0YXRlID0gQ09NUExFVEU7CiAKIAkvKiBVc2UgYWx0ZXJuYXRlcyBpZiBuZWNlc3NhcnkgKi8KLQlpZiAobWlzc2luZ190YXJnZXQob2JqX3JlcSkpIHsKKwlpZiAobWlzc2luZ190YXJnZXQob2JqX3JlcS0+cmVxKSkgewogCQlmZXRjaF9hbHRlcm5hdGVzKHdhbGtlciwgYWx0LT5iYXNlKTsKIAkJaWYgKG9ial9yZXEtPnJlcG8tPm5leHQgIT0gTlVMTCkgewogCQkJb2JqX3JlcS0+cmVwbyA9CiAJCQkJb2JqX3JlcS0+cmVwby0+bmV4dDsKLQkJCWNsb3NlKG9ial9yZXEtPmxvY2FsKTsKLQkJCW9ial9yZXEtPmxvY2FsID0gLTE7CisJCQlyZWxlYXNlX2h0dHBfb2JqZWN0X3JlcXVlc3Qob2JqX3JlcS0+cmVxKTsKIAkJCXN0YXJ0X29iamVjdF9yZXF1ZXN0KHdhbGtlciwgb2JqX3JlcSk7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTI5Miw4ICsxMTQsOCBAQAogewogCXN0cnVjdCBvYmplY3RfcmVxdWVzdCAqZW50cnkgPSBvYmplY3RfcXVldWVfaGVhZDsKIAotCWlmIChvYmpfcmVxLT5sb2NhbCAhPSAtMSkKLQkJZXJyb3IoImZkIGxlYWthZ2UgaW4gcmVsZWFzZTogJWQiLCBvYmpfcmVxLT5sb2NhbCk7CisJaWYgKG9ial9yZXEtPnJlcSAhPU5VTEwgJiYgb2JqX3JlcS0+cmVxLT5sb2NhbGZpbGUgIT0gLTEpCisJCWVycm9yKCJmZCBsZWFrYWdlIGluIHJlbGVhc2U6ICVkIiwgb2JqX3JlcS0+cmVxLT5sb2NhbGZpbGUpOwogCWlmIChvYmpfcmVxID09IG9iamVjdF9xdWV1ZV9oZWFkKSB7CiAJCW9iamVjdF9xdWV1ZV9oZWFkID0gb2JqX3JlcS0+bmV4dDsKIAl9IGVsc2UgewpAQCAtMzAzLDcgKzEyNSw2IEBACiAJCQllbnRyeS0+bmV4dCA9IGVudHJ5LT5uZXh0LT5uZXh0OwogCX0KIAotCWZyZWUob2JqX3JlcS0+dXJsKTsKIAlmcmVlKG9ial9yZXEpOwogfQogCkBAIC0zMzEsMjggKzE1MiwyMyBAQAogCXN0cnVjdCBvYmplY3RfcmVxdWVzdCAqbmV3cmVxOwogCXN0cnVjdCBvYmplY3RfcmVxdWVzdCAqdGFpbDsKIAlzdHJ1Y3Qgd2Fsa2VyX2RhdGEgKmRhdGEgPSB3YWxrZXItPmRhdGE7Ci0JY2hhciAqZmlsZW5hbWUgPSBzaGExX2ZpbGVfbmFtZShzaGExKTsKIAogCW5ld3JlcSA9IHhtYWxsb2Moc2l6ZW9mKCpuZXdyZXEpKTsKIAluZXdyZXEtPndhbGtlciA9IHdhbGtlcjsKIAloYXNoY3B5KG5ld3JlcS0+c2hhMSwgc2hhMSk7CiAJbmV3cmVxLT5yZXBvID0gZGF0YS0+YWx0OwotCW5ld3JlcS0+dXJsID0gTlVMTDsKLQluZXdyZXEtPmxvY2FsID0gLTE7CiAJbmV3cmVxLT5zdGF0ZSA9IFdBSVRJTkc7Ci0Jc25wcmludGYobmV3cmVxLT5maWxlbmFtZSwgc2l6ZW9mKG5ld3JlcS0+ZmlsZW5hbWUpLCAiJXMiLCBmaWxlbmFtZSk7Ci0Jc25wcmludGYobmV3cmVxLT50bXBmaWxlLCBzaXplb2YobmV3cmVxLT50bXBmaWxlKSwKLQkJICIlcy50ZW1wIiwgZmlsZW5hbWUpOwotCW5ld3JlcS0+c2xvdCA9IE5VTEw7CisJbmV3cmVxLT5yZXEgPSBOVUxMOwogCW5ld3JlcS0+bmV4dCA9IE5VTEw7CiAKKwlodHRwX2lzX3ZlcmJvc2UgPSB3YWxrZXItPmdldF92ZXJib3NlbHk7CisKIAlpZiAob2JqZWN0X3F1ZXVlX2hlYWQgPT0gTlVMTCkgewogCQlvYmplY3RfcXVldWVfaGVhZCA9IG5ld3JlcTsKIAl9IGVsc2UgewogCQl0YWlsID0gb2JqZWN0X3F1ZXVlX2hlYWQ7Ci0JCXdoaWxlICh0YWlsLT5uZXh0ICE9IE5VTEwpIHsKKwkJd2hpbGUgKHRhaWwtPm5leHQgIT0gTlVMTCkKIAkJCXRhaWwgPSB0YWlsLT5uZXh0OwotCQl9CiAJCXRhaWwtPm5leHQgPSBuZXdyZXE7CiAJfQogCkBAIC0zNjIsOTUgKzE3OCw2IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIGludCBmZXRjaF9pbmRleChzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIHN0cnVjdCBhbHRfYmFzZSAqcmVwbywgdW5zaWduZWQgY2hhciAqc2hhMSkKLXsKLQljaGFyICpoZXggPSBzaGExX3RvX2hleChzaGExKTsKLQljaGFyICpmaWxlbmFtZTsKLQljaGFyICp1cmw7Ci0JY2hhciB0bXBmaWxlW1BBVEhfTUFYXTsKLQlsb25nIHByZXZfcG9zbiA9IDA7Ci0JY2hhciByYW5nZVtSQU5HRV9IRUFERVJfU0laRV07Ci0Jc3RydWN0IGN1cmxfc2xpc3QgKnJhbmdlX2hlYWRlciA9IE5VTEw7Ci0Jc3RydWN0IHdhbGtlcl9kYXRhICpkYXRhID0gd2Fsa2VyLT5kYXRhOwotCi0JRklMRSAqaW5kZXhmaWxlOwotCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OwotCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKLQotCWlmIChoYXNfcGFja19pbmRleChzaGExKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAod2Fsa2VyLT5nZXRfdmVyYm9zZWx5KQotCQlmcHJpbnRmKHN0ZGVyciwgIkdldHRpbmcgaW5kZXggZm9yIHBhY2sgJXNcbiIsIGhleCk7Ci0KLQl1cmwgPSB4bWFsbG9jKHN0cmxlbihyZXBvLT5iYXNlKSArIDY0KTsKLQlzcHJpbnRmKHVybCwgIiVzL29iamVjdHMvcGFjay9wYWNrLSVzLmlkeCIsIHJlcG8tPmJhc2UsIGhleCk7Ci0KLQlmaWxlbmFtZSA9IHNoYTFfcGFja19pbmRleF9uYW1lKHNoYTEpOwotCXNucHJpbnRmKHRtcGZpbGUsIHNpemVvZih0bXBmaWxlKSwgIiVzLnRlbXAiLCBmaWxlbmFtZSk7Ci0JaW5kZXhmaWxlID0gZm9wZW4odG1wZmlsZSwgImEiKTsKLQlpZiAoIWluZGV4ZmlsZSkKLQkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gb3BlbiBsb2NhbCBmaWxlICVzIGZvciBwYWNrIGluZGV4IiwKLQkJCSAgICAgdG1wZmlsZSk7Ci0KLQlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7Ci0Jc2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCBpbmRleGZpbGUpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBmd3JpdGUpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHVybCk7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGRhdGEtPm5vX3ByYWdtYV9oZWFkZXIpOwotCXNsb3QtPmxvY2FsID0gaW5kZXhmaWxlOwotCi0JLyogSWYgdGhlcmUgaXMgZGF0YSBwcmVzZW50IGZyb20gYSBwcmV2aW91cyB0cmFuc2ZlciBhdHRlbXB0LAotCSAgIHJlc3VtZSB3aGVyZSBpdCBsZWZ0IG9mZiAqLwotCXByZXZfcG9zbiA9IGZ0ZWxsKGluZGV4ZmlsZSk7Ci0JaWYgKHByZXZfcG9zbj4wKSB7Ci0JCWlmICh3YWxrZXItPmdldF92ZXJib3NlbHkpCi0JCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkiUmVzdW1pbmcgZmV0Y2ggb2YgaW5kZXggZm9yIHBhY2sgJXMgYXQgYnl0ZSAlbGRcbiIsCi0JCQkJaGV4LCBwcmV2X3Bvc24pOwotCQlzcHJpbnRmKHJhbmdlLCAiUmFuZ2U6IGJ5dGVzPSVsZC0iLCBwcmV2X3Bvc24pOwotCQlyYW5nZV9oZWFkZXIgPSBjdXJsX3NsaXN0X2FwcGVuZChyYW5nZV9oZWFkZXIsIHJhbmdlKTsKLQkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIHJhbmdlX2hlYWRlcik7Ci0JfQotCi0JaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7Ci0JCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKLQkJaWYgKHJlc3VsdHMuY3VybF9yZXN1bHQgIT0gQ1VSTEVfT0spIHsKLQkJCWZjbG9zZShpbmRleGZpbGUpOwotCQkJc2xvdC0+bG9jYWwgPSBOVUxMOwotCQkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gZ2V0IHBhY2sgaW5kZXggJXNcbiVzIiwgdXJsLAotCQkJCSAgICAgY3VybF9lcnJvcnN0cik7Ci0JCX0KLQl9IGVsc2UgewotCQlmY2xvc2UoaW5kZXhmaWxlKTsKLQkJc2xvdC0+bG9jYWwgPSBOVUxMOwotCQlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byBzdGFydCByZXF1ZXN0Iik7Ci0JfQotCi0JZmNsb3NlKGluZGV4ZmlsZSk7Ci0Jc2xvdC0+bG9jYWwgPSBOVUxMOwotCi0JcmV0dXJuIG1vdmVfdGVtcF90b19maWxlKHRtcGZpbGUsIGZpbGVuYW1lKTsKLX0KLQotc3RhdGljIGludCBzZXR1cF9pbmRleChzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIHN0cnVjdCBhbHRfYmFzZSAqcmVwbywgdW5zaWduZWQgY2hhciAqc2hhMSkKLXsKLQlzdHJ1Y3QgcGFja2VkX2dpdCAqbmV3X3BhY2s7Ci0JaWYgKGhhc19wYWNrX2ZpbGUoc2hhMSkpCi0JCXJldHVybiAwOyAvKiBkb24ndCBsaXN0IHRoaXMgYXMgc29tZXRoaW5nIHdlIGNhbiBnZXQgKi8KLQotCWlmIChmZXRjaF9pbmRleCh3YWxrZXIsIHJlcG8sIHNoYTEpKQotCQlyZXR1cm4gLTE7Ci0KLQluZXdfcGFjayA9IHBhcnNlX3BhY2tfaW5kZXgoc2hhMSk7Ci0JaWYgKCFuZXdfcGFjaykKLQkJcmV0dXJuIC0xOyAvKiBwYXJzZV9wYWNrX2luZGV4KCkgYWxyZWFkeSBpc3N1ZWQgZXJyb3IgbWVzc2FnZSAqLwotCW5ld19wYWNrLT5uZXh0ID0gcmVwby0+cGFja3M7Ci0JcmVwby0+cGFja3MgPSBuZXdfcGFjazsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgcHJvY2Vzc19hbHRlcm5hdGVzX3Jlc3BvbnNlKHZvaWQgKmNhbGxiYWNrX2RhdGEpCiB7CiAJc3RydWN0IGFsdGVybmF0ZXNfcmVxdWVzdCAqYWx0X3JlcSA9CkBAIC01MDcsNyArMjM0LDggQEAKIAkJCXN0cnVjdCBhbHRfYmFzZSAqbmV3YWx0OwogCQkJY2hhciAqdGFyZ2V0ID0gTlVMTDsKIAkJCWlmIChkYXRhW2ldID09ICcvJykgewotCQkJCS8qIFRoaXMgY291bnRzCisJCQkJLyoKKwkJCQkgKiBUaGlzIGNvdW50cwogCQkJCSAqIGh0dHA6Ly9naXQuaG9zdC9wdWIvc2NtL2xpbnV4LmdpdC8KIAkJCQkgKiAtLS0tLS0tLS0tLWhlcmVeCiAJCQkJICogc28gbWVtY3B5KGRzdCwgYmFzZSwgc2VydmVybGVuKSB3aWxsCkBAIC01MjAsNyArMjQ4LDggQEAKIAkJCQkJb2theSA9IDE7CiAJCQkJfQogCQkJfSBlbHNlIGlmICghbWVtY21wKGRhdGEgKyBpLCAiLi4vIiwgMykpIHsKLQkJCQkvKiBSZWxhdGl2ZSBVUkw7IGNob3AgdGhlIGNvcnJlc3BvbmRpbmcKKwkJCQkvKgorCQkJCSAqIFJlbGF0aXZlIFVSTDsgY2hvcCB0aGUgY29ycmVzcG9uZGluZwogCQkJCSAqIG51bWJlciBvZiBzdWJwYXRoIGZyb20gYmFzZSAoYW5kIC4uLwogCQkJCSAqIGZyb20gZGF0YSksIGFuZCBjb25jYXRlbmF0ZSB0aGUgcmVzdWx0LgogCQkJCSAqCkBAIC01NDksNyArMjc4LDcgQEAKIAkJCQl9CiAJCQkJLyogSWYgdGhlIHNlcnZlciBnb3QgcmVtb3ZlZCwgZ2l2ZSB1cC4gKi8KIAkJCQlva2F5ID0gc3RyY2hyKGJhc2UsICc6JykgLSBiYXNlICsgMyA8Ci0JCQkJCXNlcnZlcmxlbjsKKwkJCQkgICAgICAgc2VydmVybGVuOwogCQkJfSBlbHNlIGlmIChhbHRfcmVxLT5odHRwX3NwZWNpZmljKSB7CiAJCQkJY2hhciAqY29sb24gPSBzdHJjaHIoZGF0YSArIGksICc6Jyk7CiAJCQkJY2hhciAqc2xhc2ggPSBzdHJjaHIoZGF0YSArIGksICcvJyk7CkBAIC01OTMsOSArMzIyLDExIEBACiAJc3RydWN0IGFsdGVybmF0ZXNfcmVxdWVzdCBhbHRfcmVxOwogCXN0cnVjdCB3YWxrZXJfZGF0YSAqY2RhdGEgPSB3YWxrZXItPmRhdGE7CiAKLQkvKiBJZiBhbm90aGVyIHJlcXVlc3QgaGFzIGFscmVhZHkgc3RhcnRlZCBmZXRjaGluZyBhbHRlcm5hdGVzLAotCSAgIHdhaXQgZm9yIHRoZW0gdG8gYXJyaXZlIGFuZCByZXR1cm4gdG8gcHJvY2Vzc2luZyB0aGlzIHJlcXVlc3QncwotCSAgIGN1cmwgbWVzc2FnZSAqLworCS8qCisJICogSWYgYW5vdGhlciByZXF1ZXN0IGhhcyBhbHJlYWR5IHN0YXJ0ZWQgZmV0Y2hpbmcgYWx0ZXJuYXRlcywKKwkgKiB3YWl0IGZvciB0aGVtIHRvIGFycml2ZSBhbmQgcmV0dXJuIHRvIHByb2Nlc3NpbmcgdGhpcyByZXF1ZXN0J3MKKwkgKiBjdXJsIG1lc3NhZ2UKKwkgKi8KICNpZmRlZiBVU0VfQ1VSTF9NVUxUSQogCXdoaWxlIChjZGF0YS0+Z290X2FsdGVybmF0ZXMgPT0gMCkgewogCQlzdGVwX2FjdGl2ZV9zbG90cygpOwpAQCAtNjE1LDggKzM0NiwxMCBAQAogCXVybCA9IHhtYWxsb2Moc3RybGVuKGJhc2UpICsgMzEpOwogCXNwcmludGYodXJsLCAiJXMvb2JqZWN0cy9pbmZvL2h0dHAtYWx0ZXJuYXRlcyIsIGJhc2UpOwogCi0JLyogVXNlIGEgY2FsbGJhY2sgdG8gcHJvY2VzcyB0aGUgcmVzdWx0LCBzaW5jZSBhbm90aGVyIHJlcXVlc3QKLQkgICBtYXkgZmFpbCBhbmQgbmVlZCB0byBoYXZlIGFsdGVybmF0ZXMgbG9hZGVkIGJlZm9yZSBjb250aW51aW5nICovCisJLyoKKwkgKiBVc2UgYSBjYWxsYmFjayB0byBwcm9jZXNzIHRoZSByZXN1bHQsIHNpbmNlIGFub3RoZXIgcmVxdWVzdAorCSAqIG1heSBmYWlsIGFuZCBuZWVkIHRvIGhhdmUgYWx0ZXJuYXRlcyBsb2FkZWQgYmVmb3JlIGNvbnRpbnVpbmcKKwkgKi8KIAlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CiAJc2xvdC0+Y2FsbGJhY2tfZnVuYyA9IHByb2Nlc3NfYWx0ZXJuYXRlc19yZXNwb25zZTsKIAlhbHRfcmVxLndhbGtlciA9IHdhbGtlcjsKQEAgLTY0MywxNSArMzc2LDcgQEAKIAogc3RhdGljIGludCBmZXRjaF9pbmRpY2VzKHN0cnVjdCB3YWxrZXIgKndhbGtlciwgc3RydWN0IGFsdF9iYXNlICpyZXBvKQogewotCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07Ci0JY2hhciAqdXJsOwotCXN0cnVjdCBzdHJidWYgYnVmZmVyID0gU1RSQlVGX0lOSVQ7Ci0JY2hhciAqZGF0YTsKLQlpbnQgaSA9IDA7Ci0JaW50IHJldCA9IDA7Ci0KLQlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKLQlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHM7CisJaW50IHJldDsKIAogCWlmIChyZXBvLT5nb3RfaW5kaWNlcykKIAkJcmV0dXJuIDA7CkBAIC02NTksNzYgKzM4NCwyNiBAQAogCWlmICh3YWxrZXItPmdldF92ZXJib3NlbHkpCiAJCWZwcmludGYoc3RkZXJyLCAiR2V0dGluZyBwYWNrIGxpc3QgZm9yICVzXG4iLCByZXBvLT5iYXNlKTsKIAotCXVybCA9IHhtYWxsb2Moc3RybGVuKHJlcG8tPmJhc2UpICsgMjEpOwotCXNwcmludGYodXJsLCAiJXMvb2JqZWN0cy9pbmZvL3BhY2tzIiwgcmVwby0+YmFzZSk7Ci0KLQlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7Ci0Jc2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCAmYnVmZmVyKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlX2J1ZmZlcik7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwgdXJsKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgTlVMTCk7Ci0JaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7Ci0JCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKLQkJaWYgKHJlc3VsdHMuY3VybF9yZXN1bHQgIT0gQ1VSTEVfT0spIHsKLQkJCWlmIChtaXNzaW5nX3RhcmdldCgmcmVzdWx0cykpIHsKLQkJCQlyZXBvLT5nb3RfaW5kaWNlcyA9IDE7Ci0JCQkJZ290byBjbGVhbnVwOwotCQkJfSBlbHNlIHsKLQkJCQlyZXBvLT5nb3RfaW5kaWNlcyA9IDA7Ci0JCQkJcmV0ID0gZXJyb3IoIiVzIiwgY3VybF9lcnJvcnN0cik7Ci0JCQkJZ290byBjbGVhbnVwOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKKwlzd2l0Y2ggKGh0dHBfZ2V0X2luZm9fcGFja3MocmVwby0+YmFzZSwgJnJlcG8tPnBhY2tzKSkgeworCWNhc2UgSFRUUF9PSzoKKwljYXNlIEhUVFBfTUlTU0lOR19UQVJHRVQ6CisJCXJlcG8tPmdvdF9pbmRpY2VzID0gMTsKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKIAkJcmVwby0+Z290X2luZGljZXMgPSAwOwotCQlyZXQgPSBlcnJvcigiVW5hYmxlIHRvIHN0YXJ0IHJlcXVlc3QiKTsKLQkJZ290byBjbGVhbnVwOworCQlyZXQgPSAtMTsKIAl9CiAKLQlkYXRhID0gYnVmZmVyLmJ1ZjsKLQl3aGlsZSAoaSA8IGJ1ZmZlci5sZW4pIHsKLQkJc3dpdGNoIChkYXRhW2ldKSB7Ci0JCWNhc2UgJ1AnOgotCQkJaSsrOwotCQkJaWYgKGkgKyA1MiA8PSBidWZmZXIubGVuICYmCi0JCQkgICAgIXByZWZpeGNtcChkYXRhICsgaSwgIiBwYWNrLSIpICYmCi0JCQkgICAgIXByZWZpeGNtcChkYXRhICsgaSArIDQ2LCAiLnBhY2tcbiIpKSB7Ci0JCQkJZ2V0X3NoYTFfaGV4KGRhdGEgKyBpICsgNiwgc2hhMSk7Ci0JCQkJc2V0dXBfaW5kZXgod2Fsa2VyLCByZXBvLCBzaGExKTsKLQkJCQlpICs9IDUxOwotCQkJCWJyZWFrOwotCQkJfQotCQlkZWZhdWx0OgotCQkJd2hpbGUgKGkgPCBidWZmZXIubGVuICYmIGRhdGFbaV0gIT0gJ1xuJykKLQkJCQlpKys7Ci0JCX0KLQkJaSsrOwotCX0KLQotCXJlcG8tPmdvdF9pbmRpY2VzID0gMTsKLWNsZWFudXA6Ci0Jc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7Ci0JZnJlZSh1cmwpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZmV0Y2hfcGFjayhzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIHN0cnVjdCBhbHRfYmFzZSAqcmVwbywgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKLQljaGFyICp1cmw7CiAJc3RydWN0IHBhY2tlZF9naXQgKnRhcmdldDsKLQlzdHJ1Y3QgcGFja2VkX2dpdCAqKmxzdDsKLQlGSUxFICpwYWNrZmlsZTsKLQljaGFyICpmaWxlbmFtZTsKLQljaGFyIHRtcGZpbGVbUEFUSF9NQVhdOwogCWludCByZXQ7Ci0JbG9uZyBwcmV2X3Bvc24gPSAwOwotCWNoYXIgcmFuZ2VbUkFOR0VfSEVBREVSX1NJWkVdOwotCXN0cnVjdCBjdXJsX3NsaXN0ICpyYW5nZV9oZWFkZXIgPSBOVUxMOwotCXN0cnVjdCB3YWxrZXJfZGF0YSAqZGF0YSA9IHdhbGtlci0+ZGF0YTsKLQotCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OwogCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKKwlzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKnByZXE7CiAKIAlpZiAoZmV0Y2hfaW5kaWNlcyh3YWxrZXIsIHJlcG8pKQogCQlyZXR1cm4gLTE7CkBAIC03NDMsODMgKzQxOCwzNyBAQAogCQkJc2hhMV90b19oZXgoc2hhMSkpOwogCX0KIAotCXVybCA9IHhtYWxsb2Moc3RybGVuKHJlcG8tPmJhc2UpICsgNjUpOwotCXNwcmludGYodXJsLCAiJXMvb2JqZWN0cy9wYWNrL3BhY2stJXMucGFjayIsCi0JCXJlcG8tPmJhc2UsIHNoYTFfdG9faGV4KHRhcmdldC0+c2hhMSkpOworCXByZXEgPSBuZXdfaHR0cF9wYWNrX3JlcXVlc3QodGFyZ2V0LCByZXBvLT5iYXNlKTsKKwlpZiAocHJlcSA9PSBOVUxMKQorCQlnb3RvIGFib3J0OworCXByZXEtPmxzdCA9ICZyZXBvLT5wYWNrczsKKwlwcmVxLT5zbG90LT5yZXN1bHRzID0gJnJlc3VsdHM7CiAKLQlmaWxlbmFtZSA9IHNoYTFfcGFja19uYW1lKHRhcmdldC0+c2hhMSk7Ci0Jc25wcmludGYodG1wZmlsZSwgc2l6ZW9mKHRtcGZpbGUpLCAiJXMudGVtcCIsIGZpbGVuYW1lKTsKLQlwYWNrZmlsZSA9IGZvcGVuKHRtcGZpbGUsICJhIik7Ci0JaWYgKCFwYWNrZmlsZSkKLQkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gb3BlbiBsb2NhbCBmaWxlICVzIGZvciBwYWNrIiwKLQkJCSAgICAgdG1wZmlsZSk7Ci0KLQlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7Ci0Jc2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCBwYWNrZmlsZSk7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZSk7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwgdXJsKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgZGF0YS0+bm9fcHJhZ21hX2hlYWRlcik7Ci0Jc2xvdC0+bG9jYWwgPSBwYWNrZmlsZTsKLQotCS8qIElmIHRoZXJlIGlzIGRhdGEgcHJlc2VudCBmcm9tIGEgcHJldmlvdXMgdHJhbnNmZXIgYXR0ZW1wdCwKLQkgICByZXN1bWUgd2hlcmUgaXQgbGVmdCBvZmYgKi8KLQlwcmV2X3Bvc24gPSBmdGVsbChwYWNrZmlsZSk7Ci0JaWYgKHByZXZfcG9zbj4wKSB7Ci0JCWlmICh3YWxrZXItPmdldF92ZXJib3NlbHkpCi0JCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkiUmVzdW1pbmcgZmV0Y2ggb2YgcGFjayAlcyBhdCBieXRlICVsZFxuIiwKLQkJCQlzaGExX3RvX2hleCh0YXJnZXQtPnNoYTEpLCBwcmV2X3Bvc24pOwotCQlzcHJpbnRmKHJhbmdlLCAiUmFuZ2U6IGJ5dGVzPSVsZC0iLCBwcmV2X3Bvc24pOwotCQlyYW5nZV9oZWFkZXIgPSBjdXJsX3NsaXN0X2FwcGVuZChyYW5nZV9oZWFkZXIsIHJhbmdlKTsKLQkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIHJhbmdlX2hlYWRlcik7Ci0JfQotCi0JaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7Ci0JCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwlpZiAoc3RhcnRfYWN0aXZlX3Nsb3QocHJlcS0+c2xvdCkpIHsKKwkJcnVuX2FjdGl2ZV9zbG90KHByZXEtPnNsb3QpOwogCQlpZiAocmVzdWx0cy5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSykgewotCQkJZmNsb3NlKHBhY2tmaWxlKTsKLQkJCXNsb3QtPmxvY2FsID0gTlVMTDsKLQkJCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIGdldCBwYWNrIGZpbGUgJXNcbiVzIiwgdXJsLAotCQkJCSAgICAgY3VybF9lcnJvcnN0cik7CisJCQllcnJvcigiVW5hYmxlIHRvIGdldCBwYWNrIGZpbGUgJXNcbiVzIiwgcHJlcS0+dXJsLAorCQkJICAgICAgY3VybF9lcnJvcnN0cik7CisJCQlnb3RvIGFib3J0OwogCQl9CiAJfSBlbHNlIHsKLQkJZmNsb3NlKHBhY2tmaWxlKTsKLQkJc2xvdC0+bG9jYWwgPSBOVUxMOwotCQlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byBzdGFydCByZXF1ZXN0Iik7CisJCWVycm9yKCJVbmFibGUgdG8gc3RhcnQgcmVxdWVzdCIpOworCQlnb3RvIGFib3J0OwogCX0KIAotCXRhcmdldC0+cGFja19zaXplID0gZnRlbGwocGFja2ZpbGUpOwotCWZjbG9zZShwYWNrZmlsZSk7Ci0Jc2xvdC0+bG9jYWwgPSBOVUxMOwotCi0JcmV0ID0gbW92ZV90ZW1wX3RvX2ZpbGUodG1wZmlsZSwgZmlsZW5hbWUpOworCXJldCA9IGZpbmlzaF9odHRwX3BhY2tfcmVxdWVzdChwcmVxKTsKKwlyZWxlYXNlX2h0dHBfcGFja19yZXF1ZXN0KHByZXEpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlsc3QgPSAmcmVwby0+cGFja3M7Ci0Jd2hpbGUgKCpsc3QgIT0gdGFyZ2V0KQotCQlsc3QgPSAmKCgqbHN0KS0+bmV4dCk7Ci0JKmxzdCA9ICgqbHN0KS0+bmV4dDsKLQotCWlmICh2ZXJpZnlfcGFjayh0YXJnZXQpKQotCQlyZXR1cm4gLTE7Ci0JaW5zdGFsbF9wYWNrZWRfZ2l0KHRhcmdldCk7Ci0KIAlyZXR1cm4gMDsKKworYWJvcnQ6CisJcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgdm9pZCBhYm9ydF9vYmplY3RfcmVxdWVzdChzdHJ1Y3Qgb2JqZWN0X3JlcXVlc3QgKm9ial9yZXEpCiB7Ci0JaWYgKG9ial9yZXEtPmxvY2FsID49IDApIHsKLQkJY2xvc2Uob2JqX3JlcS0+bG9jYWwpOwotCQlvYmpfcmVxLT5sb2NhbCA9IC0xOwotCX0KLQl1bmxpbmtfb3Jfd2FybihvYmpfcmVxLT50bXBmaWxlKTsKLQlpZiAob2JqX3JlcS0+c2xvdCkgewotCQlyZWxlYXNlX2FjdGl2ZV9zbG90KG9ial9yZXEtPnNsb3QpOwotCQlvYmpfcmVxLT5zbG90ID0gTlVMTDsKLQl9CiAJcmVsZWFzZV9vYmplY3RfcmVxdWVzdChvYmpfcmVxKTsKIH0KIApAQCAtODI4LDYgKzQ1Nyw3IEBACiAJY2hhciAqaGV4ID0gc2hhMV90b19oZXgoc2hhMSk7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IG9iamVjdF9yZXF1ZXN0ICpvYmpfcmVxID0gb2JqZWN0X3F1ZXVlX2hlYWQ7CisJc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKnJlcTsKIAogCXdoaWxlIChvYmpfcmVxICE9IE5VTEwgJiYgaGFzaGNtcChvYmpfcmVxLT5zaGExLCBzaGExKSkKIAkJb2JqX3JlcSA9IG9ial9yZXEtPm5leHQ7CkBAIC04MzUsNDUgKzQ2NSw1NSBAQAogCQlyZXR1cm4gZXJyb3IoIkNvdWxkbid0IGZpbmQgcmVxdWVzdCBmb3IgJXMgaW4gdGhlIHF1ZXVlIiwgaGV4KTsKIAogCWlmIChoYXNfc2hhMV9maWxlKG9ial9yZXEtPnNoYTEpKSB7CisJCWlmIChvYmpfcmVxLT5yZXEgIT0gTlVMTCkKKwkJCWFib3J0X2h0dHBfb2JqZWN0X3JlcXVlc3Qob2JqX3JlcS0+cmVxKTsKIAkJYWJvcnRfb2JqZWN0X3JlcXVlc3Qob2JqX3JlcSk7CiAJCXJldHVybiAwOwogCX0KIAogI2lmZGVmIFVTRV9DVVJMX01VTFRJCi0Jd2hpbGUgKG9ial9yZXEtPnN0YXRlID09IFdBSVRJTkcpIHsKKwl3aGlsZSAob2JqX3JlcS0+c3RhdGUgPT0gV0FJVElORykKIAkJc3RlcF9hY3RpdmVfc2xvdHMoKTsKLQl9CiAjZWxzZQogCXN0YXJ0X29iamVjdF9yZXF1ZXN0KHdhbGtlciwgb2JqX3JlcSk7CiAjZW5kaWYKIAotCXdoaWxlIChvYmpfcmVxLT5zdGF0ZSA9PSBBQ1RJVkUpIHsKLQkJcnVuX2FjdGl2ZV9zbG90KG9ial9yZXEtPnNsb3QpOwotCX0KLQlpZiAob2JqX3JlcS0+bG9jYWwgIT0gLTEpIHsKLQkJY2xvc2Uob2JqX3JlcS0+bG9jYWwpOyBvYmpfcmVxLT5sb2NhbCA9IC0xOworCS8qCisJICogb2JqX3JlcS0+cmVxIG1pZ2h0IGNoYW5nZSB3aGVuIGZldGNoaW5nIGFsdGVybmF0ZXMgaW4gdGhlIGNhbGxiYWNrCisJICogcHJvY2Vzc19vYmplY3RfcmVzcG9uc2U7IHRoZXJlZm9yZSwgdGhlICJzaG9ydGN1dCIgdmFyaWFibGUsIHJlcSwKKwkgKiBpcyB1c2VkIG9ubHkgYWZ0ZXIgd2UncmUgZG9uZSB3aXRoIHNsb3RzLgorCSAqLworCXdoaWxlIChvYmpfcmVxLT5zdGF0ZSA9PSBBQ1RJVkUpCisJCXJ1bl9hY3RpdmVfc2xvdChvYmpfcmVxLT5yZXEtPnNsb3QpOworCisJcmVxID0gb2JqX3JlcS0+cmVxOworCisJaWYgKHJlcS0+bG9jYWxmaWxlICE9IC0xKSB7CisJCWNsb3NlKHJlcS0+bG9jYWxmaWxlKTsKKwkJcmVxLT5sb2NhbGZpbGUgPSAtMTsKIAl9CiAKIAlpZiAob2JqX3JlcS0+c3RhdGUgPT0gQUJPUlRFRCkgewogCQlyZXQgPSBlcnJvcigiUmVxdWVzdCBmb3IgJXMgYWJvcnRlZCIsIGhleCk7Ci0JfSBlbHNlIGlmIChvYmpfcmVxLT5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSyAmJgotCQkgICBvYmpfcmVxLT5odHRwX2NvZGUgIT0gNDE2KSB7Ci0JCWlmIChtaXNzaW5nX3RhcmdldChvYmpfcmVxKSkKKwl9IGVsc2UgaWYgKHJlcS0+Y3VybF9yZXN1bHQgIT0gQ1VSTEVfT0sgJiYKKwkJICAgcmVxLT5odHRwX2NvZGUgIT0gNDE2KSB7CisJCWlmIChtaXNzaW5nX3RhcmdldChyZXEpKQogCQkJcmV0ID0gLTE7IC8qIEJlIHNpbGVudCwgaXQgaXMgcHJvYmFibHkgaW4gYSBwYWNrLiAqLwogCQllbHNlCiAJCQlyZXQgPSBlcnJvcigiJXMgKGN1cmxfcmVzdWx0ID0gJWQsIGh0dHBfY29kZSA9ICVsZCwgc2hhMSA9ICVzKSIsCi0JCQkJICAgIG9ial9yZXEtPmVycm9yc3RyLCBvYmpfcmVxLT5jdXJsX3Jlc3VsdCwKLQkJCQkgICAgb2JqX3JlcS0+aHR0cF9jb2RlLCBoZXgpOwotCX0gZWxzZSBpZiAob2JqX3JlcS0+enJldCAhPSBaX1NUUkVBTV9FTkQpIHsKKwkJCQkgICAgcmVxLT5lcnJvcnN0ciwgcmVxLT5jdXJsX3Jlc3VsdCwKKwkJCQkgICAgcmVxLT5odHRwX2NvZGUsIGhleCk7CisJfSBlbHNlIGlmIChyZXEtPnpyZXQgIT0gWl9TVFJFQU1fRU5EKSB7CiAJCXdhbGtlci0+Y29ycnVwdF9vYmplY3RfZm91bmQrKzsKLQkJcmV0ID0gZXJyb3IoIkZpbGUgJXMgKCVzKSBjb3JydXB0IiwgaGV4LCBvYmpfcmVxLT51cmwpOwotCX0gZWxzZSBpZiAoaGFzaGNtcChvYmpfcmVxLT5zaGExLCBvYmpfcmVxLT5yZWFsX3NoYTEpKSB7CisJCXJldCA9IGVycm9yKCJGaWxlICVzICglcykgY29ycnVwdCIsIGhleCwgcmVxLT51cmwpOworCX0gZWxzZSBpZiAoaGFzaGNtcChvYmpfcmVxLT5zaGExLCByZXEtPnJlYWxfc2hhMSkpIHsKIAkJcmV0ID0gZXJyb3IoIkZpbGUgJXMgaGFzIGJhZCBoYXNoIiwgaGV4KTsKLQl9IGVsc2UgaWYgKG9ial9yZXEtPnJlbmFtZSA8IDApIHsKKwl9IGVsc2UgaWYgKHJlcS0+cmVuYW1lIDwgMCkgewogCQlyZXQgPSBlcnJvcigidW5hYmxlIHRvIHdyaXRlIHNoYTEgZmlsZW5hbWUgJXMiLAotCQkJICAgIG9ial9yZXEtPmZpbGVuYW1lKTsKKwkJCSAgICByZXEtPmZpbGVuYW1lKTsKIAl9CiAKKwlyZWxlYXNlX2h0dHBfb2JqZWN0X3JlcXVlc3QocmVxKTsKIAlyZWxlYXNlX29iamVjdF9yZXF1ZXN0KG9ial9yZXEpOwogCXJldHVybiByZXQ7CiB9CkBAIC05MDMsMTAgKzU0Myw3IEBACiAKIHN0YXRpYyB2b2lkIGNsZWFudXAoc3RydWN0IHdhbGtlciAqd2Fsa2VyKQogewotCXN0cnVjdCB3YWxrZXJfZGF0YSAqZGF0YSA9IHdhbGtlci0+ZGF0YTsKIAlodHRwX2NsZWFudXAoKTsKLQotCWN1cmxfc2xpc3RfZnJlZV9hbGwoZGF0YS0+bm9fcHJhZ21hX2hlYWRlcik7CiB9CiAKIHN0cnVjdCB3YWxrZXIgKmdldF9odHRwX3dhbGtlcihjb25zdCBjaGFyICp1cmwsIHN0cnVjdCByZW1vdGUgKnJlbW90ZSkKQEAgLTkxNyw4ICs1NTQsNiBAQAogCiAJaHR0cF9pbml0KHJlbW90ZSk7CiAKLQlkYXRhLT5ub19wcmFnbWFfaGVhZGVyID0gY3VybF9zbGlzdF9hcHBlbmQoTlVMTCwgIlByYWdtYToiKTsKLQogCWRhdGEtPmFsdCA9IHhtYWxsb2Moc2l6ZW9mKCpkYXRhLT5hbHQpKTsKIAlkYXRhLT5hbHQtPmJhc2UgPSB4bWFsbG9jKHN0cmxlbih1cmwpICsgMSk7CiAJc3RyY3B5KGRhdGEtPmFsdC0+YmFzZSwgdXJsKTsKZGlmZiAtLWdpdCBhL2h0dHAuYyBiL2h0dHAuYwppbmRleCBiNTMyM2E2Li5kZWFiNTk1IDEwMDY0NAotLS0gYS9odHRwLmMKKysrIGIvaHR0cC5jCkBAIC0xLDggKzEsMTggQEAKICNpbmNsdWRlICJodHRwLmgiCisjaW5jbHVkZSAicGFjay5oIgorI2luY2x1ZGUgInNpZGViYW5kLmgiCiAKIGludCBkYXRhX3JlY2VpdmVkOwogaW50IGFjdGl2ZV9yZXF1ZXN0czsKK2ludCBodHRwX2lzX3ZlcmJvc2U7CitzaXplX3QgaHR0cF9wb3N0X2J1ZmZlciA9IDE2ICogTEFSR0VfUEFDS0VUX01BWDsKIAorI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzBhMDYKKyNkZWZpbmUgTElCQ1VSTF9DQU5fSEFORExFX0FVVEhfQU5ZCisjZW5kaWYKKworc3RhdGljIGludCBtaW5fY3VybF9zZXNzaW9ucyA9IDE7CitzdGF0aWMgaW50IGN1cmxfc2Vzc2lvbl9jb3VudDsKICNpZmRlZiBVU0VfQ1VSTF9NVUxUSQogc3RhdGljIGludCBtYXhfcmVxdWVzdHMgPSAtMTsKIHN0YXRpYyBDVVJMTSAqY3VybG07CkBAIC0xMCw2ICsyMCwxMCBAQAogI2lmbmRlZiBOT19DVVJMX0VBU1lfRFVQSEFORExFCiBzdGF0aWMgQ1VSTCAqY3VybF9kZWZhdWx0OwogI2VuZGlmCisKKyNkZWZpbmUgUFJFVl9CVUZfU0laRSA0MDk2CisjZGVmaW5lIFJBTkdFX0hFQURFUl9TSVpFIDMwCisKIGNoYXIgY3VybF9lcnJvcnN0cltDVVJMX0VSUk9SX1NJWkVdOwogCiBzdGF0aWMgaW50IGN1cmxfc3NsX3ZlcmlmeSA9IC0xOwpAQCAtMjcsNyArNDEsMTkgQEAKIHN0YXRpYyBjb25zdCBjaGFyICpjdXJsX2h0dHBfcHJveHk7CiBzdGF0aWMgY2hhciAqdXNlcl9uYW1lLCAqdXNlcl9wYXNzOwogCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MTcwMAorLyogVXNlIENVUkxPUFRfS0VZUEFTU1dEIGFzIGlzICovCisjZWxpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTAzCisjZGVmaW5lIENVUkxPUFRfS0VZUEFTU1dEIENVUkxPUFRfU1NMS0VZUEFTU1dECisjZWxzZQorI2RlZmluZSBDVVJMT1BUX0tFWVBBU1NXRCBDVVJMT1BUX1NTTENFUlRQQVNTV0QKKyNlbmRpZgorCitzdGF0aWMgY2hhciAqc3NsX2NlcnRfcGFzc3dvcmQ7CitzdGF0aWMgaW50IHNzbF9jZXJ0X3Bhc3N3b3JkX3JlcXVpcmVkOworCiBzdGF0aWMgc3RydWN0IGN1cmxfc2xpc3QgKnByYWdtYV9oZWFkZXI7CitzdGF0aWMgc3RydWN0IGN1cmxfc2xpc3QgKm5vX3ByYWdtYV9oZWFkZXI7CiAKIHN0YXRpYyBzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqYWN0aXZlX3F1ZXVlX2hlYWQ7CiAKQEAgLTc5LDggKzEwNSw2IEBACiAJcmV0dXJuIGVsdHNpemUgKiBubWVtYjsKIH0KIAotc3RhdGljIHZvaWQgZmluaXNoX2FjdGl2ZV9zbG90KHN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90KTsKLQogI2lmZGVmIFVTRV9DVVJMX01VTFRJCiBzdGF0aWMgdm9pZCBwcm9jZXNzX2N1cmxfbWVzc2FnZXModm9pZCkKIHsKQEAgLTEyOSw2ICsxNTMsMTkgQEAKICNlbmRpZgogCWlmICghc3RyY21wKCJodHRwLnNzbGNhaW5mbyIsIHZhcikpCiAJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmc3NsX2NhaW5mbywgdmFyLCB2YWx1ZSk7CisJaWYgKCFzdHJjbXAoImh0dHAuc3NsY2VydHBhc3N3b3JkcHJvdGVjdGVkIiwgdmFyKSkgeworCQlpZiAoZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpKQorCQkJc3NsX2NlcnRfcGFzc3dvcmRfcmVxdWlyZWQgPSAxOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoImh0dHAubWluc2Vzc2lvbnMiLCB2YXIpKSB7CisJCW1pbl9jdXJsX3Nlc3Npb25zID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisjaWZuZGVmIFVTRV9DVVJMX01VTFRJCisJCWlmIChtaW5fY3VybF9zZXNzaW9ucyA+IDEpCisJCQltaW5fY3VybF9zZXNzaW9ucyA9IDE7CisjZW5kaWYKKwkJcmV0dXJuIDA7CisJfQogI2lmZGVmIFVTRV9DVVJMX01VTFRJCiAJaWYgKCFzdHJjbXAoImh0dHAubWF4cmVxdWVzdHMiLCB2YXIpKSB7CiAJCW1heF9yZXF1ZXN0cyA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOwpAQCAtMTUxLDYgKzE4OCwxMyBAQAogCWlmICghc3RyY21wKCJodHRwLnByb3h5IiwgdmFyKSkKIAkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZjdXJsX2h0dHBfcHJveHksIHZhciwgdmFsdWUpOwogCisJaWYgKCFzdHJjbXAoImh0dHAucG9zdGJ1ZmZlciIsIHZhcikpIHsKKwkJaHR0cF9wb3N0X2J1ZmZlciA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlpZiAoaHR0cF9wb3N0X2J1ZmZlciA8IExBUkdFX1BBQ0tFVF9NQVgpCisJCQlodHRwX3Bvc3RfYnVmZmVyID0gTEFSR0VfUEFDS0VUX01BWDsKKwkJcmV0dXJuIDA7CisJfQorCiAJLyogRmFsbCBiYWNrIG9uIHRoZSBkZWZhdWx0IG9uZXMgKi8KIAlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKIH0KQEAgLTE2Nyw2ICsyMTEsMjIgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgaGFzX2NlcnRfcGFzc3dvcmQodm9pZCkKK3sKKwlpZiAoc3NsX2NlcnRfcGFzc3dvcmQgIT0gTlVMTCkKKwkJcmV0dXJuIDE7CisJaWYgKHNzbF9jZXJ0ID09IE5VTEwgfHwgc3NsX2NlcnRfcGFzc3dvcmRfcmVxdWlyZWQgIT0gMSkKKwkJcmV0dXJuIDA7CisJLyogT25seSBwcm9tcHQgdGhlIHVzZXIgb25jZS4gKi8KKwlzc2xfY2VydF9wYXNzd29yZF9yZXF1aXJlZCA9IC0xOworCXNzbF9jZXJ0X3Bhc3N3b3JkID0gZ2V0cGFzcygiQ2VydGlmaWNhdGUgUGFzc3dvcmQ6ICIpOworCWlmIChzc2xfY2VydF9wYXNzd29yZCAhPSBOVUxMKSB7CisJCXNzbF9jZXJ0X3Bhc3N3b3JkID0geHN0cmR1cChzc2xfY2VydF9wYXNzd29yZCk7CisJCXJldHVybiAxOworCX0gZWxzZQorCQlyZXR1cm4gMDsKK30KKwogc3RhdGljIENVUkwgKmdldF9jdXJsX2hhbmRsZSh2b2lkKQogewogCUNVUkwgKnJlc3VsdCA9IGN1cmxfZWFzeV9pbml0KCk7CkBAIC0xODQsMTEgKzI0NCwxNiBAQAogI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDcKIAljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9ORVRSQywgQ1VSTF9ORVRSQ19PUFRJT05BTCk7CiAjZW5kaWYKKyNpZmRlZiBMSUJDVVJMX0NBTl9IQU5ETEVfQVVUSF9BTlkKKwljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9IVFRQQVVUSCwgQ1VSTEFVVEhfQU5ZKTsKKyNlbmRpZgogCiAJaW5pdF9jdXJsX2h0dHBfYXV0aChyZXN1bHQpOwogCiAJaWYgKHNzbF9jZXJ0ICE9IE5VTEwpCiAJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1NTTENFUlQsIHNzbF9jZXJ0KTsKKwlpZiAoaGFzX2NlcnRfcGFzc3dvcmQoKSkKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfS0VZUEFTU1dELCBzc2xfY2VydF9wYXNzd29yZCk7CiAjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwMwogCWlmIChzc2xfa2V5ICE9IE5VTEwpCiAJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1NTTEtFWSwgc3NsX2tleSk7CkBAIC0yNzYsNiArMzQxLDggQEAKIAljaGFyICpsb3dfc3BlZWRfbGltaXQ7CiAJY2hhciAqbG93X3NwZWVkX3RpbWU7CiAKKwlodHRwX2lzX3ZlcmJvc2UgPSAwOworCiAJZ2l0X2NvbmZpZyhodHRwX29wdGlvbnMsIE5VTEwpOwogCiAJY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOwpAQCAtMjg0LDYgKzM1MSw3IEBACiAJCWN1cmxfaHR0cF9wcm94eSA9IHhzdHJkdXAocmVtb3RlLT5odHRwX3Byb3h5KTsKIAogCXByYWdtYV9oZWFkZXIgPSBjdXJsX3NsaXN0X2FwcGVuZChwcmFnbWFfaGVhZGVyLCAiUHJhZ21hOiBuby1jYWNoZSIpOworCW5vX3ByYWdtYV9oZWFkZXIgPSBjdXJsX3NsaXN0X2FwcGVuZChub19wcmFnbWFfaGVhZGVyLCAiUHJhZ21hOiIpOwogCiAjaWZkZWYgVVNFX0NVUkxfTVVMVEkKIAl7CkBAIC0zMjEsNiArMzg5LDcgQEAKIAlpZiAoY3VybF9zc2xfdmVyaWZ5ID09IC0xKQogCQljdXJsX3NzbF92ZXJpZnkgPSAxOwogCisJY3VybF9zZXNzaW9uX2NvdW50ID0gMDsKICNpZmRlZiBVU0VfQ1VSTF9NVUxUSQogCWlmIChtYXhfcmVxdWVzdHMgPCAxKQogCQltYXhfcmVxdWVzdHMgPSBERUZBVUxUX01BWF9SRVFVRVNUUzsKQEAgLTMyOSw4ICszOTgsMTMgQEAKIAlpZiAoZ2V0ZW52KCJHSVRfQ1VSTF9GVFBfTk9fRVBTViIpKQogCQljdXJsX2Z0cF9ub19lcHN2ID0gMTsKIAotCWlmIChyZW1vdGUgJiYgcmVtb3RlLT51cmwgJiYgcmVtb3RlLT51cmxbMF0pCisJaWYgKHJlbW90ZSAmJiByZW1vdGUtPnVybCAmJiByZW1vdGUtPnVybFswXSkgewogCQlodHRwX2F1dGhfaW5pdChyZW1vdGUtPnVybFswXSk7CisJCWlmICghc3NsX2NlcnRfcGFzc3dvcmRfcmVxdWlyZWQgJiYKKwkJICAgIGdldGVudigiR0lUX1NTTF9DRVJUX1BBU1NXT1JEX1BST1RFQ1RFRCIpICYmCisJCSAgICAhcHJlZml4Y21wKHJlbW90ZS0+dXJsWzBdLCAiaHR0cHM6Ly8iKSkKKwkJCXNzbF9jZXJ0X3Bhc3N3b3JkX3JlcXVpcmVkID0gMTsKKwl9CiAKICNpZm5kZWYgTk9fQ1VSTF9FQVNZX0RVUEhBTkRMRQogCWN1cmxfZGVmYXVsdCA9IGdldF9jdXJsX2hhbmRsZSgpOwpAQCAtMzY2LDEwICs0NDAsMjAgQEAKIAljdXJsX3NsaXN0X2ZyZWVfYWxsKHByYWdtYV9oZWFkZXIpOwogCXByYWdtYV9oZWFkZXIgPSBOVUxMOwogCisJY3VybF9zbGlzdF9mcmVlX2FsbChub19wcmFnbWFfaGVhZGVyKTsKKwlub19wcmFnbWFfaGVhZGVyID0gTlVMTDsKKwogCWlmIChjdXJsX2h0dHBfcHJveHkpIHsKIAkJZnJlZSgodm9pZCAqKWN1cmxfaHR0cF9wcm94eSk7CiAJCWN1cmxfaHR0cF9wcm94eSA9IE5VTEw7CiAJfQorCisJaWYgKHNzbF9jZXJ0X3Bhc3N3b3JkICE9IE5VTEwpIHsKKwkJbWVtc2V0KHNzbF9jZXJ0X3Bhc3N3b3JkLCAwLCBzdHJsZW4oc3NsX2NlcnRfcGFzc3dvcmQpKTsKKwkJZnJlZShzc2xfY2VydF9wYXNzd29yZCk7CisJCXNzbF9jZXJ0X3Bhc3N3b3JkID0gTlVMTDsKKwl9CisJc3NsX2NlcnRfcGFzc3dvcmRfcmVxdWlyZWQgPSAwOwogfQogCiBzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqZ2V0X2FjdGl2ZV9zbG90KHZvaWQpCkBAIC00MTQsNiArNDk4LDcgQEAKICNlbHNlCiAJCXNsb3QtPmN1cmwgPSBjdXJsX2Vhc3lfZHVwaGFuZGxlKGN1cmxfZGVmYXVsdCk7CiAjZW5kaWYKKwkJY3VybF9zZXNzaW9uX2NvdW50Kys7CiAJfQogCiAJYWN0aXZlX3JlcXVlc3RzKys7CkBAIC00OTIsOSArNTc3LDExIEBACiAJfQogCiAJd2hpbGUgKHNsb3QgIT0gTlVMTCkgewotCQlpZiAoIXNsb3QtPmluX3VzZSAmJiBzbG90LT5jdXJsICE9IE5VTEwpIHsKKwkJaWYgKCFzbG90LT5pbl91c2UgJiYgc2xvdC0+Y3VybCAhPSBOVUxMCisJCQkmJiBjdXJsX3Nlc3Npb25fY291bnQgPiBtaW5fY3VybF9zZXNzaW9ucykgewogCQkJY3VybF9lYXN5X2NsZWFudXAoc2xvdC0+Y3VybCk7CiAJCQlzbG90LT5jdXJsID0gTlVMTDsKKwkJCWN1cmxfc2Vzc2lvbl9jb3VudC0tOwogCQl9CiAJCXNsb3QgPSBzbG90LT5uZXh0OwogCX0KQEAgLTU2NCwyMiArNjUxLDIzIEBACiAJc2xvdC0+aW5fdXNlID0gMDsKIH0KIAotdm9pZCByZWxlYXNlX2FjdGl2ZV9zbG90KHN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90KQorc3RhdGljIHZvaWQgcmVsZWFzZV9hY3RpdmVfc2xvdChzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCkKIHsKIAljbG9zZWRvd25fYWN0aXZlX3Nsb3Qoc2xvdCk7Ci0JaWYgKHNsb3QtPmN1cmwpIHsKKwlpZiAoc2xvdC0+Y3VybCAmJiBjdXJsX3Nlc3Npb25fY291bnQgPiBtaW5fY3VybF9zZXNzaW9ucykgewogI2lmZGVmIFVTRV9DVVJMX01VTFRJCiAJCWN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZShjdXJsbSwgc2xvdC0+Y3VybCk7CiAjZW5kaWYKIAkJY3VybF9lYXN5X2NsZWFudXAoc2xvdC0+Y3VybCk7CiAJCXNsb3QtPmN1cmwgPSBOVUxMOworCQljdXJsX3Nlc3Npb25fY291bnQtLTsKIAl9CiAjaWZkZWYgVVNFX0NVUkxfTVVMVEkKIAlmaWxsX2FjdGl2ZV9zbG90cygpOwogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIGZpbmlzaF9hY3RpdmVfc2xvdChzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCkKK3ZvaWQgZmluaXNoX2FjdGl2ZV9zbG90KHN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90KQogewogCWNsb3NlZG93bl9hY3RpdmVfc2xvdChzbG90KTsKIAljdXJsX2Vhc3lfZ2V0aW5mbyhzbG90LT5jdXJsLCBDVVJMSU5GT19IVFRQX0NPREUsICZzbG90LT5odHRwX2NvZGUpOwpAQCAtNjExLDYgKzY5OSw3IEBACiAJCX0KIH0KIAorLyogSGVscGVycyBmb3IgbW9kaWZ5aW5nIGFuZCBjcmVhdGluZyBVUkxzICovCiBzdGF0aWMgaW5saW5lIGludCBuZWVkc19xdW90ZShpbnQgY2gpCiB7CiAJaWYgKCgoY2ggPj0gJ0EnKSAmJiAoY2ggPD0gJ1onKSkKQEAgLTYzMSwxNSArNzIwLDIwIEBACiAJCXJldHVybiAnQScgKyB2IC0gMTA7CiB9CiAKK3N0YXRpYyB2b2lkIGVuZF91cmxfd2l0aF9zbGFzaChzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKnVybCkKK3sKKwlzdHJidWZfYWRkc3RyKGJ1ZiwgdXJsKTsKKwlpZiAoYnVmLT5sZW4gJiYgYnVmLT5idWZbYnVmLT5sZW4gLSAxXSAhPSAnLycpCisJCXN0cmJ1Zl9hZGRzdHIoYnVmLCAiLyIpOworfQorCiBzdGF0aWMgY2hhciAqcXVvdGVfcmVmX3VybChjb25zdCBjaGFyICpiYXNlLCBjb25zdCBjaGFyICpyZWYpCiB7CiAJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKIAljb25zdCBjaGFyICpjcDsKIAlpbnQgY2g7CiAKLQlzdHJidWZfYWRkc3RyKCZidWYsIGJhc2UpOwotCWlmIChidWYubGVuICYmIGJ1Zi5idWZbYnVmLmxlbiAtIDFdICE9ICcvJyAmJiAqcmVmICE9ICcvJykKLQkJc3RyYnVmX2FkZHN0cigmYnVmLCAiLyIpOworCWVuZF91cmxfd2l0aF9zbGFzaCgmYnVmLCBiYXNlKTsKIAogCWZvciAoY3AgPSByZWY7IChjaCA9ICpjcCkgIT0gMDsgY3ArKykKIAkJaWYgKG5lZWRzX3F1b3RlKGNoKSkKQEAgLTY1MCw0MSArNzQ0LDU3OSBAQAogCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOwogfQogCit2b2lkIGFwcGVuZF9yZW1vdGVfb2JqZWN0X3VybChzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKnVybCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmhleCwKKwkJCSAgICAgIGludCBvbmx5X3R3b19kaWdpdF9wcmVmaXgpCit7CisJZW5kX3VybF93aXRoX3NsYXNoKGJ1ZiwgdXJsKTsKKworCXN0cmJ1Zl9hZGRmKGJ1ZiwgIm9iamVjdHMvJS4qcy8iLCAyLCBoZXgpOworCWlmICghb25seV90d29fZGlnaXRfcHJlZml4KQorCQlzdHJidWZfYWRkZihidWYsICIlcyIsIGhleCsyKTsKK30KKworY2hhciAqZ2V0X3JlbW90ZV9vYmplY3RfdXJsKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqaGV4LAorCQkJICAgIGludCBvbmx5X3R3b19kaWdpdF9wcmVmaXgpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlhcHBlbmRfcmVtb3RlX29iamVjdF91cmwoJmJ1ZiwgdXJsLCBoZXgsIG9ubHlfdHdvX2RpZ2l0X3ByZWZpeCk7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7Cit9CisKKy8qIGh0dHBfcmVxdWVzdCgpIHRhcmdldHMgKi8KKyNkZWZpbmUgSFRUUF9SRVFVRVNUX1NUUkJVRgkwCisjZGVmaW5lIEhUVFBfUkVRVUVTVF9GSUxFCTEKKworc3RhdGljIGludCBodHRwX3JlcXVlc3QoY29uc3QgY2hhciAqdXJsLCB2b2lkICpyZXN1bHQsIGludCB0YXJnZXQsIGludCBvcHRpb25zKQoreworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKKwlzdHJ1Y3QgY3VybF9zbGlzdCAqaGVhZGVycyA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0OworCisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEdFVCwgMSk7CisKKwlpZiAocmVzdWx0ID09IE5VTEwpIHsKKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX05PQk9EWSwgMSk7CisJfSBlbHNlIHsKKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX05PQk9EWSwgMCk7CisJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCByZXN1bHQpOworCisJCWlmICh0YXJnZXQgPT0gSFRUUF9SRVFVRVNUX0ZJTEUpIHsKKwkJCWxvbmcgcG9zbiA9IGZ0ZWxsKHJlc3VsdCk7CisJCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwKKwkJCQkJIGZ3cml0ZSk7CisJCQlpZiAocG9zbiA+IDApIHsKKwkJCQlzdHJidWZfYWRkZigmYnVmLCAiUmFuZ2U6IGJ5dGVzPSVsZC0iLCBwb3NuKTsKKwkJCQloZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoaGVhZGVycywgYnVmLmJ1Zik7CisJCQkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQkJfQorCQkJc2xvdC0+bG9jYWwgPSByZXN1bHQ7CisJCX0gZWxzZQorCQkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sCisJCQkJCSBmd3JpdGVfYnVmZmVyKTsKKwl9CisKKwlzdHJidWZfYWRkc3RyKCZidWYsICJQcmFnbWE6Iik7CisJaWYgKG9wdGlvbnMgJiBIVFRQX05PX0NBQ0hFKQorCQlzdHJidWZfYWRkc3RyKCZidWYsICIgbm8tY2FjaGUiKTsKKworCWhlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJzLCBidWYuYnVmKTsKKworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHVybCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGhlYWRlcnMpOworCisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJaWYgKHJlc3VsdHMuY3VybF9yZXN1bHQgPT0gQ1VSTEVfT0spCisJCQlyZXQgPSBIVFRQX09LOworCQllbHNlIGlmIChtaXNzaW5nX3RhcmdldCgmcmVzdWx0cykpCisJCQlyZXQgPSBIVFRQX01JU1NJTkdfVEFSR0VUOworCQllbHNlCisJCQlyZXQgPSBIVFRQX0VSUk9SOworCX0gZWxzZSB7CisJCWVycm9yKCJVbmFibGUgdG8gc3RhcnQgSFRUUCByZXF1ZXN0IGZvciAlcyIsIHVybCk7CisJCXJldCA9IEhUVFBfU1RBUlRfRkFJTEVEOworCX0KKworCXNsb3QtPmxvY2FsID0gTlVMTDsKKwljdXJsX3NsaXN0X2ZyZWVfYWxsKGhlYWRlcnMpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGh0dHBfZ2V0X3N0cmJ1Zihjb25zdCBjaGFyICp1cmwsIHN0cnVjdCBzdHJidWYgKnJlc3VsdCwgaW50IG9wdGlvbnMpCit7CisJcmV0dXJuIGh0dHBfcmVxdWVzdCh1cmwsIHJlc3VsdCwgSFRUUF9SRVFVRVNUX1NUUkJVRiwgb3B0aW9ucyk7Cit9CisKKy8qCisgKiBEb3dubG9hZHMgYW4gdXJsIGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiB0aGUgZ2l2ZW4gZmlsZS4KKyAqCisgKiBJZiBhIHByZXZpb3VzIGludGVycnVwdGVkIGRvd25sb2FkIGlzIGRldGVjdGVkIChpLmUuIGEgcHJldmlvdXMgdGVtcG9yYXJ5CisgKiBmaWxlIGlzIHN0aWxsIGFyb3VuZCkgdGhlIGRvd25sb2FkIGlzIHJlc3VtZWQuCisgKi8KK3N0YXRpYyBpbnQgaHR0cF9nZXRfZmlsZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgb3B0aW9ucykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzdHJidWYgdG1wZmlsZSA9IFNUUkJVRl9JTklUOworCUZJTEUgKnJlc3VsdDsKKworCXN0cmJ1Zl9hZGRmKCZ0bXBmaWxlLCAiJXMudGVtcCIsIGZpbGVuYW1lKTsKKwlyZXN1bHQgPSBmb3Blbih0bXBmaWxlLmJ1ZiwgImEiKTsKKwlpZiAoISByZXN1bHQpIHsKKwkJZXJyb3IoIlVuYWJsZSB0byBvcGVuIGxvY2FsIGZpbGUgJXMiLCB0bXBmaWxlLmJ1Zik7CisJCXJldCA9IEhUVFBfRVJST1I7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlyZXQgPSBodHRwX3JlcXVlc3QodXJsLCByZXN1bHQsIEhUVFBfUkVRVUVTVF9GSUxFLCBvcHRpb25zKTsKKwlmY2xvc2UocmVzdWx0KTsKKworCWlmICgocmV0ID09IEhUVFBfT0spICYmIG1vdmVfdGVtcF90b19maWxlKHRtcGZpbGUuYnVmLCBmaWxlbmFtZSkpCisJCXJldCA9IEhUVFBfRVJST1I7CitjbGVhbnVwOgorCXN0cmJ1Zl9yZWxlYXNlKCZ0bXBmaWxlKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaHR0cF9lcnJvcihjb25zdCBjaGFyICp1cmwsIGludCByZXQpCit7CisJLyogaHR0cF9yZXF1ZXN0IGhhcyBhbHJlYWR5IGhhbmRsZWQgSFRUUF9TVEFSVF9GQUlMRUQuICovCisJaWYgKHJldCAhPSBIVFRQX1NUQVJUX0ZBSUxFRCkKKwkJZXJyb3IoIiVzIHdoaWxlIGFjY2Vzc2luZyAlc1xuIiwgY3VybF9lcnJvcnN0ciwgdXJsKTsKKworCXJldHVybiByZXQ7Cit9CisKIGludCBodHRwX2ZldGNoX3JlZihjb25zdCBjaGFyICpiYXNlLCBzdHJ1Y3QgcmVmICpyZWYpCiB7CiAJY2hhciAqdXJsOwogCXN0cnVjdCBzdHJidWYgYnVmZmVyID0gU1RSQlVGX0lOSVQ7Ci0Jc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7Ci0Jc3RydWN0IHNsb3RfcmVzdWx0cyByZXN1bHRzOwotCWludCByZXQ7CisJaW50IHJldCA9IC0xOwogCiAJdXJsID0gcXVvdGVfcmVmX3VybChiYXNlLCByZWYtPm5hbWUpOwotCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKLQlzbG90LT5yZXN1bHRzID0gJnJlc3VsdHM7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0ZJTEUsICZidWZmZXIpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBmd3JpdGVfYnVmZmVyKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgTlVMTCk7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwgdXJsKTsKLQlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKLQkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOwotCQlpZiAocmVzdWx0cy5jdXJsX3Jlc3VsdCA9PSBDVVJMRV9PSykgewotCQkJc3RyYnVmX3J0cmltKCZidWZmZXIpOwotCQkJaWYgKGJ1ZmZlci5sZW4gPT0gNDApCi0JCQkJcmV0ID0gZ2V0X3NoYTFfaGV4KGJ1ZmZlci5idWYsIHJlZi0+b2xkX3NoYTEpOwotCQkJZWxzZSBpZiAoIXByZWZpeGNtcChidWZmZXIuYnVmLCAicmVmOiAiKSkgewotCQkJCXJlZi0+c3ltcmVmID0geHN0cmR1cChidWZmZXIuYnVmICsgNSk7Ci0JCQkJcmV0ID0gMDsKLQkJCX0gZWxzZQotCQkJCXJldCA9IDE7Ci0JCX0gZWxzZSB7Ci0JCQlyZXQgPSBlcnJvcigiQ291bGRuJ3QgZ2V0ICVzIGZvciAlc1xuJXMiLAotCQkJCSAgICB1cmwsIHJlZi0+bmFtZSwgY3VybF9lcnJvcnN0cik7CisJaWYgKGh0dHBfZ2V0X3N0cmJ1Zih1cmwsICZidWZmZXIsIEhUVFBfTk9fQ0FDSEUpID09IEhUVFBfT0spIHsKKwkJc3RyYnVmX3J0cmltKCZidWZmZXIpOworCQlpZiAoYnVmZmVyLmxlbiA9PSA0MCkKKwkJCXJldCA9IGdldF9zaGExX2hleChidWZmZXIuYnVmLCByZWYtPm9sZF9zaGExKTsKKwkJZWxzZSBpZiAoIXByZWZpeGNtcChidWZmZXIuYnVmLCAicmVmOiAiKSkgeworCQkJcmVmLT5zeW1yZWYgPSB4c3RyZHVwKGJ1ZmZlci5idWYgKyA1KTsKKwkJCXJldCA9IDA7CiAJCX0KLQl9IGVsc2UgewotCQlyZXQgPSBlcnJvcigiVW5hYmxlIHRvIHN0YXJ0IHJlcXVlc3QiKTsKIAl9CiAKIAlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKIAlmcmVlKHVybCk7CiAJcmV0dXJuIHJldDsKIH0KKworLyogSGVscGVycyBmb3IgZmV0Y2hpbmcgcGFja3MgKi8KK3N0YXRpYyBpbnQgZmV0Y2hfcGFja19pbmRleCh1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpiYXNlX3VybCkKK3sKKwlpbnQgcmV0ID0gMDsKKwljaGFyICpoZXggPSB4c3RyZHVwKHNoYTFfdG9faGV4KHNoYTEpKTsKKwljaGFyICpmaWxlbmFtZTsKKwljaGFyICp1cmwgPSBOVUxMOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoaGFzX3BhY2tfaW5kZXgoc2hhMSkpIHsKKwkJcmV0ID0gMDsKKwkJZ290byBjbGVhbnVwOworCX0KKworCWlmIChodHRwX2lzX3ZlcmJvc2UpCisJCWZwcmludGYoc3RkZXJyLCAiR2V0dGluZyBpbmRleCBmb3IgcGFjayAlc1xuIiwgaGV4KTsKKworCWVuZF91cmxfd2l0aF9zbGFzaCgmYnVmLCBiYXNlX3VybCk7CisJc3RyYnVmX2FkZGYoJmJ1ZiwgIm9iamVjdHMvcGFjay9wYWNrLSVzLmlkeCIsIGhleCk7CisJdXJsID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKworCWZpbGVuYW1lID0gc2hhMV9wYWNrX2luZGV4X25hbWUoc2hhMSk7CisJaWYgKGh0dHBfZ2V0X2ZpbGUodXJsLCBmaWxlbmFtZSwgMCkgIT0gSFRUUF9PSykKKwkJcmV0ID0gZXJyb3IoIlVuYWJsZSB0byBnZXQgcGFjayBpbmRleCAlc1xuIiwgdXJsKTsKKworY2xlYW51cDoKKwlmcmVlKGhleCk7CisJZnJlZSh1cmwpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfYW5kX3NldHVwX3BhY2tfaW5kZXgoc3RydWN0IHBhY2tlZF9naXQgKipwYWNrc19oZWFkLAorCXVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKmJhc2VfdXJsKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpuZXdfcGFjazsKKworCWlmIChmZXRjaF9wYWNrX2luZGV4KHNoYTEsIGJhc2VfdXJsKSkKKwkJcmV0dXJuIC0xOworCisJbmV3X3BhY2sgPSBwYXJzZV9wYWNrX2luZGV4KHNoYTEpOworCWlmICghbmV3X3BhY2spCisJCXJldHVybiAtMTsgLyogcGFyc2VfcGFja19pbmRleCgpIGFscmVhZHkgaXNzdWVkIGVycm9yIG1lc3NhZ2UgKi8KKwluZXdfcGFjay0+bmV4dCA9ICpwYWNrc19oZWFkOworCSpwYWNrc19oZWFkID0gbmV3X3BhY2s7CisJcmV0dXJuIDA7Cit9CisKK2ludCBodHRwX2dldF9pbmZvX3BhY2tzKGNvbnN0IGNoYXIgKmJhc2VfdXJsLCBzdHJ1Y3QgcGFja2VkX2dpdCAqKnBhY2tzX2hlYWQpCit7CisJaW50IHJldCA9IDAsIGkgPSAwOworCWNoYXIgKnVybCwgKmRhdGE7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJZW5kX3VybF93aXRoX3NsYXNoKCZidWYsIGJhc2VfdXJsKTsKKwlzdHJidWZfYWRkc3RyKCZidWYsICJvYmplY3RzL2luZm8vcGFja3MiKTsKKwl1cmwgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCisJcmV0ID0gaHR0cF9nZXRfc3RyYnVmKHVybCwgJmJ1ZiwgSFRUUF9OT19DQUNIRSk7CisJaWYgKHJldCAhPSBIVFRQX09LKQorCQlnb3RvIGNsZWFudXA7CisKKwlkYXRhID0gYnVmLmJ1ZjsKKwl3aGlsZSAoaSA8IGJ1Zi5sZW4pIHsKKwkJc3dpdGNoIChkYXRhW2ldKSB7CisJCWNhc2UgJ1AnOgorCQkJaSsrOworCQkJaWYgKGkgKyA1MiA8PSBidWYubGVuICYmCisJCQkgICAgIXByZWZpeGNtcChkYXRhICsgaSwgIiBwYWNrLSIpICYmCisJCQkgICAgIXByZWZpeGNtcChkYXRhICsgaSArIDQ2LCAiLnBhY2tcbiIpKSB7CisJCQkJZ2V0X3NoYTFfaGV4KGRhdGEgKyBpICsgNiwgc2hhMSk7CisJCQkJZmV0Y2hfYW5kX3NldHVwX3BhY2tfaW5kZXgocGFja3NfaGVhZCwgc2hhMSwKKwkJCQkJCSAgICAgIGJhc2VfdXJsKTsKKwkJCQlpICs9IDUxOworCQkJCWJyZWFrOworCQkJfQorCQlkZWZhdWx0OgorCQkJd2hpbGUgKGkgPCBidWYubGVuICYmIGRhdGFbaV0gIT0gJ1xuJykKKwkJCQlpKys7CisJCX0KKwkJaSsrOworCX0KKworY2xlYW51cDoKKwlmcmVlKHVybCk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZWxlYXNlX2h0dHBfcGFja19yZXF1ZXN0KHN0cnVjdCBodHRwX3BhY2tfcmVxdWVzdCAqcHJlcSkKK3sKKwlpZiAocHJlcS0+cGFja2ZpbGUgIT0gTlVMTCkgeworCQlmY2xvc2UocHJlcS0+cGFja2ZpbGUpOworCQlwcmVxLT5wYWNrZmlsZSA9IE5VTEw7CisJCXByZXEtPnNsb3QtPmxvY2FsID0gTlVMTDsKKwl9CisJaWYgKHByZXEtPnJhbmdlX2hlYWRlciAhPSBOVUxMKSB7CisJCWN1cmxfc2xpc3RfZnJlZV9hbGwocHJlcS0+cmFuZ2VfaGVhZGVyKTsKKwkJcHJlcS0+cmFuZ2VfaGVhZGVyID0gTlVMTDsKKwl9CisJcHJlcS0+c2xvdCA9IE5VTEw7CisJZnJlZShwcmVxLT51cmwpOworfQorCitpbnQgZmluaXNoX2h0dHBfcGFja19yZXF1ZXN0KHN0cnVjdCBodHRwX3BhY2tfcmVxdWVzdCAqcHJlcSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBwYWNrZWRfZ2l0ICoqbHN0OworCisJcHJlcS0+dGFyZ2V0LT5wYWNrX3NpemUgPSBmdGVsbChwcmVxLT5wYWNrZmlsZSk7CisKKwlpZiAocHJlcS0+cGFja2ZpbGUgIT0gTlVMTCkgeworCQlmY2xvc2UocHJlcS0+cGFja2ZpbGUpOworCQlwcmVxLT5wYWNrZmlsZSA9IE5VTEw7CisJCXByZXEtPnNsb3QtPmxvY2FsID0gTlVMTDsKKwl9CisKKwlyZXQgPSBtb3ZlX3RlbXBfdG9fZmlsZShwcmVxLT50bXBmaWxlLCBwcmVxLT5maWxlbmFtZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWxzdCA9IHByZXEtPmxzdDsKKwl3aGlsZSAoKmxzdCAhPSBwcmVxLT50YXJnZXQpCisJCWxzdCA9ICYoKCpsc3QpLT5uZXh0KTsKKwkqbHN0ID0gKCpsc3QpLT5uZXh0OworCisJaWYgKHZlcmlmeV9wYWNrKHByZXEtPnRhcmdldCkpCisJCXJldHVybiAtMTsKKwlpbnN0YWxsX3BhY2tlZF9naXQocHJlcS0+dGFyZ2V0KTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKm5ld19odHRwX3BhY2tfcmVxdWVzdCgKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqdGFyZ2V0LCBjb25zdCBjaGFyICpiYXNlX3VybCkKK3sKKwljaGFyICpmaWxlbmFtZTsKKwlsb25nIHByZXZfcG9zbiA9IDA7CisJY2hhciByYW5nZVtSQU5HRV9IRUFERVJfU0laRV07CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKnByZXE7CisKKwlwcmVxID0geG1hbGxvYyhzaXplb2YoKnByZXEpKTsKKwlwcmVxLT50YXJnZXQgPSB0YXJnZXQ7CisJcHJlcS0+cmFuZ2VfaGVhZGVyID0gTlVMTDsKKworCWVuZF91cmxfd2l0aF9zbGFzaCgmYnVmLCBiYXNlX3VybCk7CisJc3RyYnVmX2FkZGYoJmJ1ZiwgIm9iamVjdHMvcGFjay9wYWNrLSVzLnBhY2siLAorCQlzaGExX3RvX2hleCh0YXJnZXQtPnNoYTEpKTsKKwlwcmVxLT51cmwgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCisJZmlsZW5hbWUgPSBzaGExX3BhY2tfbmFtZSh0YXJnZXQtPnNoYTEpOworCXNucHJpbnRmKHByZXEtPmZpbGVuYW1lLCBzaXplb2YocHJlcS0+ZmlsZW5hbWUpLCAiJXMiLCBmaWxlbmFtZSk7CisJc25wcmludGYocHJlcS0+dG1wZmlsZSwgc2l6ZW9mKHByZXEtPnRtcGZpbGUpLCAiJXMudGVtcCIsIGZpbGVuYW1lKTsKKwlwcmVxLT5wYWNrZmlsZSA9IGZvcGVuKHByZXEtPnRtcGZpbGUsICJhIik7CisJaWYgKCFwcmVxLT5wYWNrZmlsZSkgeworCQllcnJvcigiVW5hYmxlIHRvIG9wZW4gbG9jYWwgZmlsZSAlcyBmb3IgcGFjayIsCisJCSAgICAgIHByZXEtPnRtcGZpbGUpOworCQlnb3RvIGFib3J0OworCX0KKworCXByZXEtPnNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwlwcmVxLT5zbG90LT5sb2NhbCA9IHByZXEtPnBhY2tmaWxlOworCWN1cmxfZWFzeV9zZXRvcHQocHJlcS0+c2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCBwcmVxLT5wYWNrZmlsZSk7CisJY3VybF9lYXN5X3NldG9wdChwcmVxLT5zbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZSk7CisJY3VybF9lYXN5X3NldG9wdChwcmVxLT5zbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwgcHJlcS0+dXJsKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHByZXEtPnNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwKKwkJbm9fcHJhZ21hX2hlYWRlcik7CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIGRhdGEgcHJlc2VudCBmcm9tIGEgcHJldmlvdXMgdHJhbnNmZXIgYXR0ZW1wdCwKKwkgKiByZXN1bWUgd2hlcmUgaXQgbGVmdCBvZmYKKwkgKi8KKwlwcmV2X3Bvc24gPSBmdGVsbChwcmVxLT5wYWNrZmlsZSk7CisJaWYgKHByZXZfcG9zbj4wKSB7CisJCWlmIChodHRwX2lzX3ZlcmJvc2UpCisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiUmVzdW1pbmcgZmV0Y2ggb2YgcGFjayAlcyBhdCBieXRlICVsZFxuIiwKKwkJCQlzaGExX3RvX2hleCh0YXJnZXQtPnNoYTEpLCBwcmV2X3Bvc24pOworCQlzcHJpbnRmKHJhbmdlLCAiUmFuZ2U6IGJ5dGVzPSVsZC0iLCBwcmV2X3Bvc24pOworCQlwcmVxLT5yYW5nZV9oZWFkZXIgPSBjdXJsX3NsaXN0X2FwcGVuZChOVUxMLCByYW5nZSk7CisJCWN1cmxfZWFzeV9zZXRvcHQocHJlcS0+c2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLAorCQkJcHJlcS0+cmFuZ2VfaGVhZGVyKTsKKwl9CisKKwlyZXR1cm4gcHJlcTsKKworYWJvcnQ6CisJZnJlZShmaWxlbmFtZSk7CisJZnJlZShwcmVxLT51cmwpOworCWZyZWUocHJlcSk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIEhlbHBlcnMgZm9yIGZldGNoaW5nIG9iamVjdHMgKGxvb3NlKSAqLworc3RhdGljIHNpemVfdCBmd3JpdGVfc2hhMV9maWxlKHZvaWQgKnB0ciwgc2l6ZV90IGVsdHNpemUsIHNpemVfdCBubWVtYiwKKwkJCSAgICAgICB2b2lkICpkYXRhKQoreworCXVuc2lnbmVkIGNoYXIgZXhwbls0MDk2XTsKKwlzaXplX3Qgc2l6ZSA9IGVsdHNpemUgKiBubWVtYjsKKwlpbnQgcG9zbiA9IDA7CisJc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKmZyZXEgPQorCQkoc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKilkYXRhOworCWRvIHsKKwkJc3NpemVfdCByZXR2YWwgPSB4d3JpdGUoZnJlcS0+bG9jYWxmaWxlLAorCQkJCQkoY2hhciAqKSBwdHIgKyBwb3NuLCBzaXplIC0gcG9zbik7CisJCWlmIChyZXR2YWwgPCAwKQorCQkJcmV0dXJuIHBvc247CisJCXBvc24gKz0gcmV0dmFsOworCX0gd2hpbGUgKHBvc24gPCBzaXplKTsKKworCWZyZXEtPnN0cmVhbS5hdmFpbF9pbiA9IHNpemU7CisJZnJlcS0+c3RyZWFtLm5leHRfaW4gPSBwdHI7CisJZG8geworCQlmcmVxLT5zdHJlYW0ubmV4dF9vdXQgPSBleHBuOworCQlmcmVxLT5zdHJlYW0uYXZhaWxfb3V0ID0gc2l6ZW9mKGV4cG4pOworCQlmcmVxLT56cmV0ID0gZ2l0X2luZmxhdGUoJmZyZXEtPnN0cmVhbSwgWl9TWU5DX0ZMVVNIKTsKKwkJZ2l0X1NIQTFfVXBkYXRlKCZmcmVxLT5jLCBleHBuLAorCQkJCXNpemVvZihleHBuKSAtIGZyZXEtPnN0cmVhbS5hdmFpbF9vdXQpOworCX0gd2hpbGUgKGZyZXEtPnN0cmVhbS5hdmFpbF9pbiAmJiBmcmVxLT56cmV0ID09IFpfT0spOworCWRhdGFfcmVjZWl2ZWQrKzsKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKm5ld19odHRwX29iamVjdF9yZXF1ZXN0KGNvbnN0IGNoYXIgKmJhc2VfdXJsLAorCXVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJY2hhciAqaGV4ID0gc2hhMV90b19oZXgoc2hhMSk7CisJY2hhciAqZmlsZW5hbWU7CisJY2hhciBwcmV2ZmlsZVtQQVRIX01BWF07CisJaW50IHByZXZsb2NhbDsKKwl1bnNpZ25lZCBjaGFyIHByZXZfYnVmW1BSRVZfQlVGX1NJWkVdOworCXNzaXplX3QgcHJldl9yZWFkID0gMDsKKwlsb25nIHByZXZfcG9zbiA9IDA7CisJY2hhciByYW5nZVtSQU5HRV9IRUFERVJfU0laRV07CisJc3RydWN0IGN1cmxfc2xpc3QgKnJhbmdlX2hlYWRlciA9IE5VTEw7CisJc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKmZyZXE7CisKKwlmcmVxID0geG1hbGxvYyhzaXplb2YoKmZyZXEpKTsKKwloYXNoY3B5KGZyZXEtPnNoYTEsIHNoYTEpOworCWZyZXEtPmxvY2FsZmlsZSA9IC0xOworCisJZmlsZW5hbWUgPSBzaGExX2ZpbGVfbmFtZShzaGExKTsKKwlzbnByaW50ZihmcmVxLT5maWxlbmFtZSwgc2l6ZW9mKGZyZXEtPmZpbGVuYW1lKSwgIiVzIiwgZmlsZW5hbWUpOworCXNucHJpbnRmKGZyZXEtPnRtcGZpbGUsIHNpemVvZihmcmVxLT50bXBmaWxlKSwKKwkJICIlcy50ZW1wIiwgZmlsZW5hbWUpOworCisJc25wcmludGYocHJldmZpbGUsIHNpemVvZihwcmV2ZmlsZSksICIlcy5wcmV2IiwgZmlsZW5hbWUpOworCXVubGlua19vcl93YXJuKHByZXZmaWxlKTsKKwlyZW5hbWUoZnJlcS0+dG1wZmlsZSwgcHJldmZpbGUpOworCXVubGlua19vcl93YXJuKGZyZXEtPnRtcGZpbGUpOworCisJaWYgKGZyZXEtPmxvY2FsZmlsZSAhPSAtMSkKKwkJZXJyb3IoImZkIGxlYWthZ2UgaW4gc3RhcnQ6ICVkIiwgZnJlcS0+bG9jYWxmaWxlKTsKKwlmcmVxLT5sb2NhbGZpbGUgPSBvcGVuKGZyZXEtPnRtcGZpbGUsCisJCQkgICAgICAgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMLCAwNjY2KTsKKwkvKgorCSAqIFRoaXMgY291bGQgaGF2ZSBmYWlsZWQgZHVlIHRvIHRoZSAibGF6eSBkaXJlY3RvcnkgY3JlYXRpb24iOworCSAqIHRyeSB0byBta2RpciB0aGUgbGFzdCBwYXRoIGNvbXBvbmVudC4KKwkgKi8KKwlpZiAoZnJlcS0+bG9jYWxmaWxlIDwgMCAmJiBlcnJubyA9PSBFTk9FTlQpIHsKKwkJY2hhciAqZGlyID0gc3RycmNocihmcmVxLT50bXBmaWxlLCAnLycpOworCQlpZiAoZGlyKSB7CisJCQkqZGlyID0gMDsKKwkJCW1rZGlyKGZyZXEtPnRtcGZpbGUsIDA3NzcpOworCQkJKmRpciA9ICcvJzsKKwkJfQorCQlmcmVxLT5sb2NhbGZpbGUgPSBvcGVuKGZyZXEtPnRtcGZpbGUsCisJCQkJICAgICAgIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgMDY2Nik7CisJfQorCisJaWYgKGZyZXEtPmxvY2FsZmlsZSA8IDApIHsKKwkJZXJyb3IoIkNvdWxkbid0IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSAlcyBmb3IgJXM6ICVzIiwKKwkJICAgICAgZnJlcS0+dG1wZmlsZSwgZnJlcS0+ZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCWdvdG8gYWJvcnQ7CisJfQorCisJbWVtc2V0KCZmcmVxLT5zdHJlYW0sIDAsIHNpemVvZihmcmVxLT5zdHJlYW0pKTsKKworCWdpdF9pbmZsYXRlX2luaXQoJmZyZXEtPnN0cmVhbSk7CisKKwlnaXRfU0hBMV9Jbml0KCZmcmVxLT5jKTsKKworCWZyZXEtPnVybCA9IGdldF9yZW1vdGVfb2JqZWN0X3VybChiYXNlX3VybCwgaGV4LCAwKTsKKworCS8qCisJICogSWYgYSBwcmV2aW91cyB0ZW1wIGZpbGUgaXMgcHJlc2VudCwgcHJvY2VzcyB3aGF0IHdhcyBhbHJlYWR5CisJICogZmV0Y2hlZC4KKwkgKi8KKwlwcmV2bG9jYWwgPSBvcGVuKHByZXZmaWxlLCBPX1JET05MWSk7CisJaWYgKHByZXZsb2NhbCAhPSAtMSkgeworCQlkbyB7CisJCQlwcmV2X3JlYWQgPSB4cmVhZChwcmV2bG9jYWwsIHByZXZfYnVmLCBQUkVWX0JVRl9TSVpFKTsKKwkJCWlmIChwcmV2X3JlYWQ+MCkgeworCQkJCWlmIChmd3JpdGVfc2hhMV9maWxlKHByZXZfYnVmLAorCQkJCQkJICAgICAxLAorCQkJCQkJICAgICBwcmV2X3JlYWQsCisJCQkJCQkgICAgIGZyZXEpID09IHByZXZfcmVhZCkgeworCQkJCQlwcmV2X3Bvc24gKz0gcHJldl9yZWFkOworCQkJCX0gZWxzZSB7CisJCQkJCXByZXZfcmVhZCA9IC0xOworCQkJCX0KKwkJCX0KKwkJfSB3aGlsZSAocHJldl9yZWFkID4gMCk7CisJCWNsb3NlKHByZXZsb2NhbCk7CisJfQorCXVubGlua19vcl93YXJuKHByZXZmaWxlKTsKKworCS8qCisJICogUmVzZXQgaW5mbGF0ZS9TSEExIGlmIHRoZXJlIHdhcyBhbiBlcnJvciByZWFkaW5nIHRoZSBwcmV2aW91cyB0ZW1wCisJICogZmlsZTsgYWxzbyByZXdpbmQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9jYWwgZmlsZS4KKwkgKi8KKwlpZiAocHJldl9yZWFkID09IC0xKSB7CisJCW1lbXNldCgmZnJlcS0+c3RyZWFtLCAwLCBzaXplb2YoZnJlcS0+c3RyZWFtKSk7CisJCWdpdF9pbmZsYXRlX2luaXQoJmZyZXEtPnN0cmVhbSk7CisJCWdpdF9TSEExX0luaXQoJmZyZXEtPmMpOworCQlpZiAocHJldl9wb3NuPjApIHsKKwkJCXByZXZfcG9zbiA9IDA7CisJCQlsc2VlayhmcmVxLT5sb2NhbGZpbGUsIDAsIFNFRUtfU0VUKTsKKwkJCWlmIChmdHJ1bmNhdGUoZnJlcS0+bG9jYWxmaWxlLCAwKSA8IDApIHsKKwkJCQllcnJvcigiQ291bGRuJ3QgdHJ1bmNhdGUgdGVtcG9yYXJ5IGZpbGUgJXMgZm9yICVzOiAlcyIsCisJCQkJCSAgZnJlcS0+dG1wZmlsZSwgZnJlcS0+ZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCQkJZ290byBhYm9ydDsKKwkJCX0KKwkJfQorCX0KKworCWZyZXEtPnNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKworCWN1cmxfZWFzeV9zZXRvcHQoZnJlcS0+c2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCBmcmVxKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGZyZXEtPnNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlX3NoYTFfZmlsZSk7CisJY3VybF9lYXN5X3NldG9wdChmcmVxLT5zbG90LT5jdXJsLCBDVVJMT1BUX0VSUk9SQlVGRkVSLCBmcmVxLT5lcnJvcnN0cik7CisJY3VybF9lYXN5X3NldG9wdChmcmVxLT5zbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwgZnJlcS0+dXJsKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGZyZXEtPnNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgbm9fcHJhZ21hX2hlYWRlcik7CisKKwkvKgorCSAqIElmIHdlIGhhdmUgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBkYXRhIGZyb20gYSBwcmV2aW91cyBmZXRjaAorCSAqIGF0dGVtcHQsIG9ubHkgZmV0Y2ggdGhlIGRhdGEgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlLgorCSAqLworCWlmIChwcmV2X3Bvc24+MCkgeworCQlpZiAoaHR0cF9pc192ZXJib3NlKQorCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIlJlc3VtaW5nIGZldGNoIG9mIG9iamVjdCAlcyBhdCBieXRlICVsZFxuIiwKKwkJCQloZXgsIHByZXZfcG9zbik7CisJCXNwcmludGYocmFuZ2UsICJSYW5nZTogYnl0ZXM9JWxkLSIsIHByZXZfcG9zbik7CisJCXJhbmdlX2hlYWRlciA9IGN1cmxfc2xpc3RfYXBwZW5kKHJhbmdlX2hlYWRlciwgcmFuZ2UpOworCQljdXJsX2Vhc3lfc2V0b3B0KGZyZXEtPnNsb3QtPmN1cmwsCisJCQkJIENVUkxPUFRfSFRUUEhFQURFUiwgcmFuZ2VfaGVhZGVyKTsKKwl9CisKKwlyZXR1cm4gZnJlcTsKKworYWJvcnQ6CisJZnJlZShmaWxlbmFtZSk7CisJZnJlZShmcmVxLT51cmwpOworCWZyZWUoZnJlcSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgcHJvY2Vzc19odHRwX29iamVjdF9yZXF1ZXN0KHN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpmcmVxKQoreworCWlmIChmcmVxLT5zbG90ID09IE5VTEwpCisJCXJldHVybjsKKwlmcmVxLT5jdXJsX3Jlc3VsdCA9IGZyZXEtPnNsb3QtPmN1cmxfcmVzdWx0OworCWZyZXEtPmh0dHBfY29kZSA9IGZyZXEtPnNsb3QtPmh0dHBfY29kZTsKKwlmcmVxLT5zbG90ID0gTlVMTDsKK30KKworaW50IGZpbmlzaF9odHRwX29iamVjdF9yZXF1ZXN0KHN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpmcmVxKQoreworCXN0cnVjdCBzdGF0IHN0OworCisJY2xvc2UoZnJlcS0+bG9jYWxmaWxlKTsKKwlmcmVxLT5sb2NhbGZpbGUgPSAtMTsKKworCXByb2Nlc3NfaHR0cF9vYmplY3RfcmVxdWVzdChmcmVxKTsKKworCWlmIChmcmVxLT5odHRwX2NvZGUgPT0gNDE2KSB7CisJCXdhcm5pbmcoInJlcXVlc3RlZCByYW5nZSBpbnZhbGlkOyB3ZSBtYXkgYWxyZWFkeSBoYXZlIGFsbCB0aGUgZGF0YS4iKTsKKwl9IGVsc2UgaWYgKGZyZXEtPmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7CisJCWlmIChzdGF0KGZyZXEtPnRtcGZpbGUsICZzdCkgPT0gMCkKKwkJCWlmIChzdC5zdF9zaXplID09IDApCisJCQkJdW5saW5rX29yX3dhcm4oZnJlcS0+dG1wZmlsZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlnaXRfaW5mbGF0ZV9lbmQoJmZyZXEtPnN0cmVhbSk7CisJZ2l0X1NIQTFfRmluYWwoZnJlcS0+cmVhbF9zaGExLCAmZnJlcS0+Yyk7CisJaWYgKGZyZXEtPnpyZXQgIT0gWl9TVFJFQU1fRU5EKSB7CisJCXVubGlua19vcl93YXJuKGZyZXEtPnRtcGZpbGUpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChoYXNoY21wKGZyZXEtPnNoYTEsIGZyZXEtPnJlYWxfc2hhMSkpIHsKKwkJdW5saW5rX29yX3dhcm4oZnJlcS0+dG1wZmlsZSk7CisJCXJldHVybiAtMTsKKwl9CisJZnJlcS0+cmVuYW1lID0KKwkJbW92ZV90ZW1wX3RvX2ZpbGUoZnJlcS0+dG1wZmlsZSwgZnJlcS0+ZmlsZW5hbWUpOworCisJcmV0dXJuIGZyZXEtPnJlbmFtZTsKK30KKwordm9pZCBhYm9ydF9odHRwX29iamVjdF9yZXF1ZXN0KHN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpmcmVxKQoreworCXVubGlua19vcl93YXJuKGZyZXEtPnRtcGZpbGUpOworCisJcmVsZWFzZV9odHRwX29iamVjdF9yZXF1ZXN0KGZyZXEpOworfQorCit2b2lkIHJlbGVhc2VfaHR0cF9vYmplY3RfcmVxdWVzdChzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqZnJlcSkKK3sKKwlpZiAoZnJlcS0+bG9jYWxmaWxlICE9IC0xKSB7CisJCWNsb3NlKGZyZXEtPmxvY2FsZmlsZSk7CisJCWZyZXEtPmxvY2FsZmlsZSA9IC0xOworCX0KKwlpZiAoZnJlcS0+dXJsICE9IE5VTEwpIHsKKwkJZnJlZShmcmVxLT51cmwpOworCQlmcmVxLT51cmwgPSBOVUxMOworCX0KKwlpZiAoZnJlcS0+c2xvdCAhPSBOVUxMKSB7CisJCWZyZXEtPnNsb3QtPmNhbGxiYWNrX2Z1bmMgPSBOVUxMOworCQlmcmVxLT5zbG90LT5jYWxsYmFja19kYXRhID0gTlVMTDsKKwkJcmVsZWFzZV9hY3RpdmVfc2xvdChmcmVxLT5zbG90KTsKKwkJZnJlcS0+c2xvdCA9IE5VTEw7CisJfQorfQpkaWZmIC0tZ2l0IGEvaHR0cC5oIGIvaHR0cC5oCmluZGV4IDI2YWJlYmUuLjVjOTQ0MWMgMTAwNjQ0Ci0tLSBhL2h0dHAuaAorKysgYi9odHRwLmgKQEAgLTc5LDggKzc5LDggQEAKIGV4dGVybiBzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqZ2V0X2FjdGl2ZV9zbG90KHZvaWQpOwogZXh0ZXJuIGludCBzdGFydF9hY3RpdmVfc2xvdChzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCk7CiBleHRlcm4gdm9pZCBydW5fYWN0aXZlX3Nsb3Qoc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3QpOworZXh0ZXJuIHZvaWQgZmluaXNoX2FjdGl2ZV9zbG90KHN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90KTsKIGV4dGVybiB2b2lkIGZpbmlzaF9hbGxfYWN0aXZlX3Nsb3RzKHZvaWQpOwotZXh0ZXJuIHZvaWQgcmVsZWFzZV9hY3RpdmVfc2xvdChzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCk7CiAKICNpZmRlZiBVU0VfQ1VSTF9NVUxUSQogZXh0ZXJuIHZvaWQgZmlsbF9hY3RpdmVfc2xvdHModm9pZCk7CkBAIC05Myw2ICs5Myw4IEBACiAKIGV4dGVybiBpbnQgZGF0YV9yZWNlaXZlZDsKIGV4dGVybiBpbnQgYWN0aXZlX3JlcXVlc3RzOworZXh0ZXJuIGludCBodHRwX2lzX3ZlcmJvc2U7CitleHRlcm4gc2l6ZV90IGh0dHBfcG9zdF9idWZmZXI7CiAKIGV4dGVybiBjaGFyIGN1cmxfZXJyb3JzdHJbQ1VSTF9FUlJPUl9TSVpFXTsKIApAQCAtMTA5LDYgKzExMSw4MiBAQAogCiAjZGVmaW5lIG1pc3NpbmdfdGFyZ2V0KGEpIG1pc3NpbmdfX3RhcmdldCgoYSktPmh0dHBfY29kZSwgKGEpLT5jdXJsX3Jlc3VsdCkKIAorLyogSGVscGVycyBmb3IgbW9kaWZ5aW5nIGFuZCBjcmVhdGluZyBVUkxzICovCitleHRlcm4gdm9pZCBhcHBlbmRfcmVtb3RlX29iamVjdF91cmwoc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICp1cmwsCisJCQkJICAgICBjb25zdCBjaGFyICpoZXgsCisJCQkJICAgICBpbnQgb25seV90d29fZGlnaXRfcHJlZml4KTsKK2V4dGVybiBjaGFyICpnZXRfcmVtb3RlX29iamVjdF91cmwoY29uc3QgY2hhciAqdXJsLCBjb25zdCBjaGFyICpoZXgsCisJCQkJICAgaW50IG9ubHlfdHdvX2RpZ2l0X3ByZWZpeCk7CisKKy8qIE9wdGlvbnMgZm9yIGh0dHBfcmVxdWVzdF8qKCkgKi8KKyNkZWZpbmUgSFRUUF9OT19DQUNIRQkJMQorCisvKiBSZXR1cm4gdmFsdWVzIGZvciBodHRwX3JlcXVlc3RfKigpICovCisjZGVmaW5lIEhUVFBfT0sJCQkwCisjZGVmaW5lIEhUVFBfTUlTU0lOR19UQVJHRVQJMQorI2RlZmluZSBIVFRQX0VSUk9SCQkyCisjZGVmaW5lIEhUVFBfU1RBUlRfRkFJTEVECTMKKworLyoKKyAqIFJlcXVlc3RzIGFuIHVybCBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4gYSBzdHJidWYuCisgKgorICogSWYgdGhlIHJlc3VsdCBwb2ludGVyIGlzIE5VTEwsIGEgSFRUUCBIRUFEIHJlcXVlc3QgaXMgbWFkZSBpbnN0ZWFkIG9mIEdFVC4KKyAqLworaW50IGh0dHBfZ2V0X3N0cmJ1Zihjb25zdCBjaGFyICp1cmwsIHN0cnVjdCBzdHJidWYgKnJlc3VsdCwgaW50IG9wdGlvbnMpOworCisvKgorICogUHJpbnRzIGFuIGVycm9yIG1lc3NhZ2UgdXNpbmcgZXJyb3IoKSBjb250YWluaW5nIHVybCBhbmQgY3VybF9lcnJvcnN0ciwKKyAqIGFuZCByZXR1cm5zIHJldC4KKyAqLworaW50IGh0dHBfZXJyb3IoY29uc3QgY2hhciAqdXJsLCBpbnQgcmV0KTsKKwogZXh0ZXJuIGludCBodHRwX2ZldGNoX3JlZihjb25zdCBjaGFyICpiYXNlLCBzdHJ1Y3QgcmVmICpyZWYpOwogCisvKiBIZWxwZXJzIGZvciBmZXRjaGluZyBwYWNrcyAqLworZXh0ZXJuIGludCBodHRwX2dldF9pbmZvX3BhY2tzKGNvbnN0IGNoYXIgKmJhc2VfdXJsLAorCXN0cnVjdCBwYWNrZWRfZ2l0ICoqcGFja3NfaGVhZCk7CisKK3N0cnVjdCBodHRwX3BhY2tfcmVxdWVzdAoreworCWNoYXIgKnVybDsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqdGFyZ2V0OworCXN0cnVjdCBwYWNrZWRfZ2l0ICoqbHN0OworCUZJTEUgKnBhY2tmaWxlOworCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOworCWNoYXIgdG1wZmlsZVtQQVRIX01BWF07CisJc3RydWN0IGN1cmxfc2xpc3QgKnJhbmdlX2hlYWRlcjsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKK307CisKK2V4dGVybiBzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKm5ld19odHRwX3BhY2tfcmVxdWVzdCgKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqdGFyZ2V0LCBjb25zdCBjaGFyICpiYXNlX3VybCk7CitleHRlcm4gaW50IGZpbmlzaF9odHRwX3BhY2tfcmVxdWVzdChzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKnByZXEpOworZXh0ZXJuIHZvaWQgcmVsZWFzZV9odHRwX3BhY2tfcmVxdWVzdChzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKnByZXEpOworCisvKiBIZWxwZXJzIGZvciBmZXRjaGluZyBvYmplY3QgKi8KK3N0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0Cit7CisJY2hhciAqdXJsOworCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOworCWNoYXIgdG1wZmlsZVtQQVRIX01BWF07CisJaW50IGxvY2FsZmlsZTsKKwlDVVJMY29kZSBjdXJsX3Jlc3VsdDsKKwljaGFyIGVycm9yc3RyW0NVUkxfRVJST1JfU0laRV07CisJbG9uZyBodHRwX2NvZGU7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwl1bnNpZ25lZCBjaGFyIHJlYWxfc2hhMVsyMF07CisJZ2l0X1NIQV9DVFggYzsKKwl6X3N0cmVhbSBzdHJlYW07CisJaW50IHpyZXQ7CisJaW50IHJlbmFtZTsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKK307CisKK2V4dGVybiBzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqbmV3X2h0dHBfb2JqZWN0X3JlcXVlc3QoCisJY29uc3QgY2hhciAqYmFzZV91cmwsIHVuc2lnbmVkIGNoYXIgKnNoYTEpOworZXh0ZXJuIHZvaWQgcHJvY2Vzc19odHRwX29iamVjdF9yZXF1ZXN0KHN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpmcmVxKTsKK2V4dGVybiBpbnQgZmluaXNoX2h0dHBfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKmZyZXEpOworZXh0ZXJuIHZvaWQgYWJvcnRfaHR0cF9vYmplY3RfcmVxdWVzdChzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqZnJlcSk7CitleHRlcm4gdm9pZCByZWxlYXNlX2h0dHBfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKmZyZXEpOworCiAjZW5kaWYgLyogSFRUUF9IICovCmRpZmYgLS1naXQgYS9pZGVudC5jIGIvaWRlbnQuYwppbmRleCA5OWYxYzg1Li45ZTI0Mzg4IDEwMDY0NAotLS0gYS9pZGVudC5jCisrKyBiL2lkZW50LmMKQEAgLTg1LDEwICs4NSwxMSBAQAogCWlmICghZ2l0X2RlZmF1bHRfZW1haWxbMF0pIHsKIAkJY29uc3QgY2hhciAqZW1haWwgPSBnZXRlbnYoIkVNQUlMIik7CiAKLQkJaWYgKGVtYWlsICYmIGVtYWlsWzBdKQorCQlpZiAoZW1haWwgJiYgZW1haWxbMF0pIHsKIAkJCXN0cmxjcHkoZ2l0X2RlZmF1bHRfZW1haWwsIGVtYWlsLAogCQkJCXNpemVvZihnaXRfZGVmYXVsdF9lbWFpbCkpOwotCQllbHNlIHsKKwkJCXVzZXJfaWRlbnRfZXhwbGljaXRseV9naXZlbiB8PSBJREVOVF9NQUlMX0dJVkVOOworCQl9IGVsc2UgewogCQkJaWYgKCFwdykKIAkJCQlwdyA9IGdldHB3dWlkKGdldHVpZCgpKTsKIAkJCWlmICghcHcpCkBAIC0xNjgsOCArMTY5LDYgQEAKIAlyZXR1cm4gb2Zmc2V0OwogfQogCi1zdGF0aWMgY29uc3QgY2hhciBhdV9lbnZbXSA9ICJHSVRfQVVUSE9SX05BTUUiOwotc3RhdGljIGNvbnN0IGNoYXIgY29fZW52W10gPSAiR0lUX0NPTU1JVFRFUl9OQU1FIjsKIHN0YXRpYyBjb25zdCBjaGFyICplbnZfaGludCA9CiAiXG4iCiAiKioqIFBsZWFzZSB0ZWxsIG1lIHdobyB5b3UgYXJlLlxuIgpAQCAtMjA0LDggKzIwMyw4IEBACiAKIAkJaWYgKCh3YXJuX29uX25vX25hbWUgfHwgZXJyb3Jfb25fbm9fbmFtZSkgJiYKIAkJICAgIG5hbWUgPT0gZ2l0X2RlZmF1bHRfbmFtZSAmJiBlbnZfaGludCkgewotCQkJZnByaW50ZihzdGRlcnIsIGVudl9oaW50LCBhdV9lbnYsIGNvX2Vudik7Ci0JCQllbnZfaGludCA9IE5VTEw7IC8qIHdhcm4gb25seSBvbmNlLCBmb3IgImdpdCB2YXIgLWwiICovCisJCQlmcHV0cyhlbnZfaGludCwgc3RkZXJyKTsKKwkJCWVudl9oaW50ID0gTlVMTDsgLyogd2FybiBvbmx5IG9uY2UgKi8KIAkJfQogCQlpZiAoZXJyb3Jfb25fbm9fbmFtZSkKIAkJCWRpZSgiZW1wdHkgaWRlbnQgJXMgPCVzPiBub3QgYWxsb3dlZCIsIG5hbWUsIGVtYWlsKTsKQEAgLTI1MSwxMSArMjUwLDIxIEBACiAKIGNvbnN0IGNoYXIgKmdpdF9jb21taXR0ZXJfaW5mbyhpbnQgZmxhZykKIHsKLQlpZiAoZ2V0ZW52KCJHSVRfQ09NTUlUVEVSX05BTUUiKSAmJgotCSAgICBnZXRlbnYoIkdJVF9DT01NSVRURVJfRU1BSUwiKSkKLQkJdXNlcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuID0gMTsKKwlpZiAoZ2V0ZW52KCJHSVRfQ09NTUlUVEVSX05BTUUiKSkKKwkJdXNlcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuIHw9IElERU5UX05BTUVfR0lWRU47CisJaWYgKGdldGVudigiR0lUX0NPTU1JVFRFUl9FTUFJTCIpKQorCQl1c2VyX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW4gfD0gSURFTlRfTUFJTF9HSVZFTjsKIAlyZXR1cm4gZm10X2lkZW50KGdldGVudigiR0lUX0NPTU1JVFRFUl9OQU1FIiksCiAJCQkgZ2V0ZW52KCJHSVRfQ09NTUlUVEVSX0VNQUlMIiksCiAJCQkgZ2V0ZW52KCJHSVRfQ09NTUlUVEVSX0RBVEUiKSwKIAkJCSBmbGFnKTsKIH0KKworaW50IHVzZXJfaWRlbnRfc3VmZmljaWVudGx5X2dpdmVuKHZvaWQpCit7CisjaWZuZGVmIFdJTkRPV1MKKwlyZXR1cm4gKHVzZXJfaWRlbnRfZXhwbGljaXRseV9naXZlbiAmIElERU5UX01BSUxfR0lWRU4pOworI2Vsc2UKKwlyZXR1cm4gKHVzZXJfaWRlbnRfZXhwbGljaXRseV9naXZlbiA9PSBJREVOVF9BTExfR0lWRU4pOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9pbWFwLXNlbmQuYyBiL2ltYXAtc2VuZC5jCmluZGV4IDgxNTRjYjIuLjU2MzE5MzAgMTAwNjQ0Ci0tLSBhL2ltYXAtc2VuZC5jCisrKyBiL2ltYXAtc2VuZC5jCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgImV4ZWNfY21kLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKICNpZmRlZiBOT19PUEVOU1NMCiB0eXBlZGVmIHZvaWQgKlNTTDsKICNlbmRpZgpAQCAtOTAsOSArOTEsMTEgQEAKIAljaGFyICpkYXRhOwogCWludCBsZW47CiAJdW5zaWduZWQgY2hhciBmbGFnczsKLQl1bnNpZ25lZCBpbnQgY3JsZjoxOwogfTsKIAorc3RhdGljIGNvbnN0IGNoYXIgaW1hcF9zZW5kX3VzYWdlW10gPSAiZ2l0IGltYXAtc2VuZCA8IDxtYm94PiI7CisKKyN1bmRlZiBEUlZfT0sKICNkZWZpbmUgRFJWX09LICAgICAgICAgIDAKICNkZWZpbmUgRFJWX01TR19CQUQgICAgIC0xCiAjZGVmaW5lIERSVl9CT1hfQkFEICAgICAtMgpAQCAtMTAwLDEzICsxMDMsMTYgQEAKIAogc3RhdGljIGludCBWZXJib3NlLCBRdWlldDsKIAorX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKIHN0YXRpYyB2b2lkIGltYXBfaW5mbyhjb25zdCBjaGFyICosIC4uLik7CitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQogc3RhdGljIHZvaWQgaW1hcF93YXJuKGNvbnN0IGNoYXIgKiwgLi4uKTsKIAogc3RhdGljIGNoYXIgKm5leHRfYXJnKGNoYXIgKiopOwogCiBzdGF0aWMgdm9pZCBmcmVlX2dlbmVyaWNfbWVzc2FnZXMoc3RydWN0IG1lc3NhZ2UgKik7CiAKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpCiBzdGF0aWMgaW50IG5mc25wcmludGYoY2hhciAqYnVmLCBpbnQgYmxlbiwgY29uc3QgY2hhciAqZm10LCAuLi4pOwogCiBzdGF0aWMgaW50IG5mdmFzcHJpbnRmKGNoYXIgKipzdHJwLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCkBAIC0xMjMsOSArMTI5LDYgQEAKIAlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgdm9pZCBhcmM0X2luaXQodm9pZCk7Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBhcmM0X2dldGJ5dGUodm9pZCk7Ci0KIHN0cnVjdCBpbWFwX3NlcnZlcl9jb25mIHsKIAljaGFyICpuYW1lOwogCWNoYXIgKnR1bm5lbDsKQEAgLTE1NCw3ICsxNTcsNyBAQAogfTsKIAogc3RydWN0IGltYXBfc29ja2V0IHsKLQlpbnQgZmQ7CisJaW50IGZkWzJdOwogCVNTTCAqc3NsOwogfTsKIApAQCAtMjM4LDcgKzI0MSw3IEBACiAjaWZuZGVmIE5PX09QRU5TU0wKIHN0YXRpYyB2b2lkIHNzbF9zb2NrZXRfcGVycm9yKGNvbnN0IGNoYXIgKmZ1bmMpCiB7Ci0JZnByaW50ZihzdGRlcnIsICIlczogJXNcbiIsIGZ1bmMsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLCAwKSk7CisJZnByaW50ZihzdGRlcnIsICIlczogJXNcbiIsIGZ1bmMsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLCBOVUxMKSk7CiB9CiAjZW5kaWYKIApAQCAtMjczLDcgKzI3NiwxMSBAQAogCWZwcmludGYoc3RkZXJyLCAiU1NMIHJlcXVlc3RlZCBidXQgU1NMIHN1cHBvcnQgbm90IGNvbXBpbGVkIGluXG4iKTsKIAlyZXR1cm4gLTE7CiAjZWxzZQorI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAwMDAwMDBMKQorCWNvbnN0IFNTTF9NRVRIT0QgKm1ldGg7CisjZWxzZQogCVNTTF9NRVRIT0QgKm1ldGg7CisjZW5kaWYKIAlTU0xfQ1RYICpjdHg7CiAJaW50IHJldDsKIApAQCAtMzA0LDggKzMxMSwxMiBAQAogCQlzc2xfc29ja2V0X3BlcnJvcigiU1NMX25ldyIpOwogCQlyZXR1cm4gLTE7CiAJfQotCWlmICghU1NMX3NldF9mZChzb2NrLT5zc2wsIHNvY2stPmZkKSkgewotCQlzc2xfc29ja2V0X3BlcnJvcigiU1NMX3NldF9mZCIpOworCWlmICghU1NMX3NldF9yZmQoc29jay0+c3NsLCBzb2NrLT5mZFswXSkpIHsKKwkJc3NsX3NvY2tldF9wZXJyb3IoIlNTTF9zZXRfcmZkIik7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKCFTU0xfc2V0X3dmZChzb2NrLT5zc2wsIHNvY2stPmZkWzFdKSkgeworCQlzc2xfc29ja2V0X3BlcnJvcigiU1NMX3NldF93ZmQiKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMzI3LDExICszMzgsMTIgQEAKIAkJbiA9IFNTTF9yZWFkKHNvY2stPnNzbCwgYnVmLCBsZW4pOwogCWVsc2UKICNlbmRpZgotCQluID0geHJlYWQoc29jay0+ZmQsIGJ1ZiwgbGVuKTsKKwkJbiA9IHhyZWFkKHNvY2stPmZkWzBdLCBidWYsIGxlbik7CiAJaWYgKG4gPD0gMCkgewogCQlzb2NrZXRfcGVycm9yKCJyZWFkIiwgc29jaywgbik7Ci0JCWNsb3NlKHNvY2stPmZkKTsKLQkJc29jay0+ZmQgPSAtMTsKKwkJY2xvc2Uoc29jay0+ZmRbMF0pOworCQljbG9zZShzb2NrLT5mZFsxXSk7CisJCXNvY2stPmZkWzBdID0gc29jay0+ZmRbMV0gPSAtMTsKIAl9CiAJcmV0dXJuIG47CiB9CkBAIC0zNDQsMTEgKzM1NiwxMiBAQAogCQluID0gU1NMX3dyaXRlKHNvY2stPnNzbCwgYnVmLCBsZW4pOwogCWVsc2UKICNlbmRpZgotCQluID0gd3JpdGVfaW5fZnVsbChzb2NrLT5mZCwgYnVmLCBsZW4pOworCQluID0gd3JpdGVfaW5fZnVsbChzb2NrLT5mZFsxXSwgYnVmLCBsZW4pOwogCWlmIChuICE9IGxlbikgewogCQlzb2NrZXRfcGVycm9yKCJ3cml0ZSIsIHNvY2ssIG4pOwotCQljbG9zZShzb2NrLT5mZCk7Ci0JCXNvY2stPmZkID0gLTE7CisJCWNsb3NlKHNvY2stPmZkWzBdKTsKKwkJY2xvc2Uoc29jay0+ZmRbMV0pOworCQlzb2NrLT5mZFswXSA9IHNvY2stPmZkWzFdID0gLTE7CiAJfQogCXJldHVybiBuOwogfQpAQCAtMzYxLDcgKzM3NCw4IEBACiAJCVNTTF9mcmVlKHNvY2stPnNzbCk7CiAJfQogI2VuZGlmCi0JY2xvc2Uoc29jay0+ZmQpOworCWNsb3NlKHNvY2stPmZkWzBdKTsKKwljbG9zZShzb2NrLT5mZFsxXSk7CiB9CiAKIC8qIHNpbXBsZSBsaW5lIGJ1ZmZlcmluZyAqLwpAQCAtNDg5LDUyICs1MDMsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgewotCXVuc2lnbmVkIGNoYXIgaSwgaiwgc1syNTZdOwotfSByczsKLQotc3RhdGljIHZvaWQgYXJjNF9pbml0KHZvaWQpCi17Ci0JaW50IGksIGZkOwotCXVuc2lnbmVkIGNoYXIgaiwgc2ksIGRhdFsxMjhdOwotCi0JaWYgKChmZCA9IG9wZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKSkgPCAwICYmIChmZCA9IG9wZW4oIi9kZXYvcmFuZG9tIiwgT19SRE9OTFkpKSA8IDApIHsKLQkJZnByaW50ZihzdGRlcnIsICJGYXRhbDogbm8gcmFuZG9tIG51bWJlciBzb3VyY2UgYXZhaWxhYmxlLlxuIik7Ci0JCWV4aXQoMyk7Ci0JfQotCWlmIChyZWFkX2luX2Z1bGwoZmQsIGRhdCwgMTI4KSAhPSAxMjgpIHsKLQkJZnByaW50ZihzdGRlcnIsICJGYXRhbDogY2Fubm90IHJlYWQgcmFuZG9tIG51bWJlciBzb3VyY2UuXG4iKTsKLQkJZXhpdCgzKTsKLQl9Ci0JY2xvc2UoZmQpOwotCi0JZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQotCQlycy5zW2ldID0gaTsKLQlmb3IgKGkgPSBqID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0JCXNpID0gcnMuc1tpXTsKLQkJaiArPSBzaSArIGRhdFtpICYgMTI3XTsKLQkJcnMuc1tpXSA9IHJzLnNbal07Ci0JCXJzLnNbal0gPSBzaTsKLQl9Ci0JcnMuaSA9IHJzLmogPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQotCQlhcmM0X2dldGJ5dGUoKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgYXJjNF9nZXRieXRlKHZvaWQpCi17Ci0JdW5zaWduZWQgY2hhciBzaSwgc2o7Ci0KLQlycy5pKys7Ci0Jc2kgPSBycy5zW3JzLmldOwotCXJzLmogKz0gc2k7Ci0Jc2ogPSBycy5zW3JzLmpdOwotCXJzLnNbcnMuaV0gPSBzajsKLQlycy5zW3JzLmpdID0gc2k7Ci0JcmV0dXJuIHJzLnNbKHNpICsgc2opICYgMHhmZl07Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgaW1hcF9jbWQgKnZfaXNzdWVfaW1hcF9jbWQoc3RydWN0IGltYXBfc3RvcmUgKmN0eCwKIAkJCQkJIHN0cnVjdCBpbWFwX2NtZF9jYiAqY2IsCiAJCQkJCSBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCkBAIC01OTYsNiArNTY0LDcgQEAKIAlyZXR1cm4gY21kOwogfQogCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKQogc3RhdGljIHN0cnVjdCBpbWFwX2NtZCAqaXNzdWVfaW1hcF9jbWQoc3RydWN0IGltYXBfc3RvcmUgKmN0eCwKIAkJCQkgICAgICAgc3RydWN0IGltYXBfY21kX2NiICpjYiwKIAkJCQkgICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCkBAIC02MDksNiArNTc4LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKQogc3RhdGljIGludCBpbWFwX2V4ZWMoc3RydWN0IGltYXBfc3RvcmUgKmN0eCwgc3RydWN0IGltYXBfY21kX2NiICpjYiwKIAkJICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKQEAgLTYyNCw2ICs1OTQsNyBAQAogCXJldHVybiBnZXRfY21kX3Jlc3VsdChjdHgsIGNtZHApOwogfQogCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKQogc3RhdGljIGludCBpbWFwX2V4ZWNfbShzdHJ1Y3QgaW1hcF9zdG9yZSAqY3R4LCBzdHJ1Y3QgaW1hcF9jbWRfY2IgKmNiLAogCQkgICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CkBAIC05MTQsNyArODg1LDcgQEAKIAkJCQlpZiAoIXN0cmNtcCgiTk8iLCBhcmcpKSB7CiAJCQkJCWlmIChjbWRwLT5jYi5jcmVhdGUgJiYgY21kICYmIChjbWRwLT5jYi50cnljcmVhdGUgfHwgIW1lbWNtcChjbWQsICJbVFJZQ1JFQVRFXSIsIDExKSkpIHsgLyogU0VMRUNULCBBUFBFTkQgb3IgVUlEIENPUFkgKi8KIAkJCQkJCXAgPSBzdHJjaHIoY21kcC0+Y21kLCAnIicpOwotCQkJCQkJaWYgKCFpc3N1ZV9pbWFwX2NtZChjdHgsIE5VTEwsICJDUkVBVEUgXCIlLipzXCIiLCBzdHJjaHIocCArIDEsICciJykgLSBwICsgMSwgcCkpIHsKKwkJCQkJCWlmICghaXNzdWVfaW1hcF9jbWQoY3R4LCBOVUxMLCAiQ1JFQVRFIFwiJS4qc1wiIiwgKGludCkoc3RyY2hyKHAgKyAxLCAnIicpIC0gcCArIDEpLCBwKSkgewogCQkJCQkJCXJlc3AgPSBSRVNQX0JBRDsKIAkJCQkJCQlnb3RvIG5vcm1hbDsKIAkJCQkJCX0KQEAgLTk2MCw3ICs5MzEsNyBAQAogewogCXN0cnVjdCBpbWFwICppbWFwID0gaWN0eC0+aW1hcDsKIAotCWlmIChpbWFwLT5idWYuc29jay5mZCAhPSAtMSkgeworCWlmIChpbWFwLT5idWYuc29jay5mZFswXSAhPSAtMSkgewogCQlpbWFwX2V4ZWMoaWN0eCwgTlVMTCwgIkxPR09VVCIpOwogCQlzb2NrZXRfc2h1dGRvd24oJmltYXAtPmJ1Zi5zb2NrKTsKIAl9CkBAIC05ODIsNDUgKzk1Myw3OSBAQAogCXN0cnVjdCBpbWFwX3N0b3JlICpjdHg7CiAJc3RydWN0IGltYXAgKmltYXA7CiAJY2hhciAqYXJnLCAqcnNwOwotCXN0cnVjdCBob3N0ZW50ICpoZTsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKLQlpbnQgcywgYVsyXSwgcHJlYXV0aDsKLQlwaWRfdCBwaWQ7CisJaW50IHMgPSAtMSwgcHJlYXV0aDsKIAogCWN0eCA9IHhjYWxsb2Moc2l6ZW9mKCpjdHgpLCAxKTsKIAogCWN0eC0+aW1hcCA9IGltYXAgPSB4Y2FsbG9jKHNpemVvZigqaW1hcCksIDEpOwotCWltYXAtPmJ1Zi5zb2NrLmZkID0gLTE7CisJaW1hcC0+YnVmLnNvY2suZmRbMF0gPSBpbWFwLT5idWYuc29jay5mZFsxXSA9IC0xOwogCWltYXAtPmluX3Byb2dyZXNzX2FwcGVuZCA9ICZpbWFwLT5pbl9wcm9ncmVzczsKIAogCS8qIG9wZW4gY29ubmVjdGlvbiB0byBJTUFQIHNlcnZlciAqLwogCiAJaWYgKHNydmMtPnR1bm5lbCkgeworCQljb25zdCBjaGFyICphcmd2W10gPSB7IHNydmMtPnR1bm5lbCwgTlVMTCB9OworCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyB0dW5uZWwgPSB7MH07CisKIAkJaW1hcF9pbmZvKCJTdGFydGluZyB0dW5uZWwgJyVzJy4uLiAiLCBzcnZjLT50dW5uZWwpOwogCi0JCWlmIChzb2NrZXRwYWlyKFBGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwLCBhKSkgewotCQkJcGVycm9yKCJzb2NrZXRwYWlyIik7Ci0JCQlleGl0KDEpOwotCQl9CisJCXR1bm5lbC5hcmd2ID0gYXJndjsKKwkJdHVubmVsLnVzZV9zaGVsbCA9IDE7CisJCXR1bm5lbC5pbiA9IC0xOworCQl0dW5uZWwub3V0ID0gLTE7CisJCWlmIChzdGFydF9jb21tYW5kKCZ0dW5uZWwpKQorCQkJZGllKCJjYW5ub3Qgc3RhcnQgcHJveHkgJXMiLCBhcmd2WzBdKTsKIAotCQlwaWQgPSBmb3JrKCk7Ci0JCWlmIChwaWQgPCAwKQotCQkJX2V4aXQoMTI3KTsKLQkJaWYgKCFwaWQpIHsKLQkJCWlmIChkdXAyKGFbMF0sIDApID09IC0xIHx8IGR1cDIoYVswXSwgMSkgPT0gLTEpCi0JCQkJX2V4aXQoMTI3KTsKLQkJCWNsb3NlKGFbMF0pOwotCQkJY2xvc2UoYVsxXSk7Ci0JCQlleGVjbCgiL2Jpbi9zaCIsICJzaCIsICItYyIsIHNydmMtPnR1bm5lbCwgTlVMTCk7Ci0JCQlfZXhpdCgxMjcpOwotCQl9Ci0KLQkJY2xvc2UoYVswXSk7Ci0KLQkJaW1hcC0+YnVmLnNvY2suZmQgPSBhWzFdOworCQlpbWFwLT5idWYuc29jay5mZFswXSA9IHR1bm5lbC5vdXQ7CisJCWltYXAtPmJ1Zi5zb2NrLmZkWzFdID0gdHVubmVsLmluOwogCiAJCWltYXBfaW5mbygib2tcbiIpOwogCX0gZWxzZSB7CisjaWZuZGVmIE5PX0lQVjYKKwkJc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqYWkwLCAqYWk7CisJCWludCBnYWk7CisJCWNoYXIgcG9ydHN0cls2XTsKKworCQlzbnByaW50Zihwb3J0c3RyLCBzaXplb2YocG9ydHN0ciksICIlaHUiLCBzcnZjLT5wb3J0KTsKKworCQltZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKwkJaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKwkJaGludHMuYWlfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKKworCQlpbWFwX2luZm8oIlJlc29sdmluZyAlcy4uLiAiLCBzcnZjLT5ob3N0KTsKKwkJZ2FpID0gZ2V0YWRkcmluZm8oc3J2Yy0+aG9zdCwgcG9ydHN0ciwgJmhpbnRzLCAmYWkpOworCQlpZiAoZ2FpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgImdldGFkZHJpbmZvOiAlc1xuIiwgZ2FpX3N0cmVycm9yKGdhaSkpOworCQkJZ290byBiYWlsOworCQl9CisJCWltYXBfaW5mbygib2tcbiIpOworCisJCWZvciAoYWkwID0gYWk7IGFpOyBhaSA9IGFpLT5haV9uZXh0KSB7CisJCQljaGFyIGFkZHJbTklfTUFYSE9TVF07CisKKwkJCXMgPSBzb2NrZXQoYWktPmFpX2ZhbWlseSwgYWktPmFpX3NvY2t0eXBlLAorCQkJCSAgIGFpLT5haV9wcm90b2NvbCk7CisJCQlpZiAocyA8IDApCisJCQkJY29udGludWU7CisKKwkJCWdldG5hbWVpbmZvKGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbiwgYWRkciwKKwkJCQkgICAgc2l6ZW9mKGFkZHIpLCBOVUxMLCAwLCBOSV9OVU1FUklDSE9TVCk7CisJCQlpbWFwX2luZm8oIkNvbm5lY3RpbmcgdG8gWyVzXTolcy4uLiAiLCBhZGRyLCBwb3J0c3RyKTsKKworCQkJaWYgKGNvbm5lY3QocywgYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKSA8IDApIHsKKwkJCQljbG9zZShzKTsKKwkJCQlzID0gLTE7CisJCQkJcGVycm9yKCJjb25uZWN0Iik7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWJyZWFrOworCQl9CisJCWZyZWVhZGRyaW5mbyhhaTApOworI2Vsc2UgLyogTk9fSVBWNiAqLworCQlzdHJ1Y3QgaG9zdGVudCAqaGU7CisJCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOworCiAJCW1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKIAkJYWRkci5zaW5fcG9ydCA9IGh0b25zKHNydmMtPnBvcnQpOwogCQlhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwpAQCAtMTA0MCwxMSArMTA0NSwxNyBAQAogCQlpbWFwX2luZm8oIkNvbm5lY3RpbmcgdG8gJXM6JWh1Li4uICIsIGluZXRfbnRvYShhZGRyLnNpbl9hZGRyKSwgbnRvaHMoYWRkci5zaW5fcG9ydCkpOwogCQlpZiAoY29ubmVjdChzLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsIHNpemVvZihhZGRyKSkpIHsKIAkJCWNsb3NlKHMpOworCQkJcyA9IC0xOwogCQkJcGVycm9yKCJjb25uZWN0Iik7CisJCX0KKyNlbmRpZgorCQlpZiAocyA8IDApIHsKKwkJCWZwdXRzKCJFcnJvcjogdW5hYmxlIHRvIGNvbm5lY3QgdG8gc2VydmVyLlxuIiwgc3RkZXJyKTsKIAkJCWdvdG8gYmFpbDsKIAkJfQogCi0JCWltYXAtPmJ1Zi5zb2NrLmZkID0gczsKKwkJaW1hcC0+YnVmLnNvY2suZmRbMF0gPSBzOworCQlpbWFwLT5idWYuc29jay5mZFsxXSA9IGR1cChzKTsKIAogCQlpZiAoc3J2Yy0+dXNlX3NzbCAmJgogCQkgICAgc3NsX3NvY2tldF9jb25uZWN0KCZpbWFwLT5idWYuc29jaywgMCwgc3J2Yy0+c3NsX3ZlcmlmeSkpIHsKQEAgLTExNTAsODggKzExNjEsNTkgQEAKIAlyZXR1cm4gZDsKIH0KIAotI2RlZmluZSBUVUlETCA4CitzdGF0aWMgdm9pZCBsZl90b19jcmxmKHN0cnVjdCBtc2dfZGF0YSAqbXNnKQoreworCWNoYXIgKm5ldzsKKwlpbnQgaSwgaiwgbGZudW0gPSAwOwogCi1zdGF0aWMgaW50IGltYXBfc3RvcmVfbXNnKHN0cnVjdCBzdG9yZSAqZ2N0eCwgc3RydWN0IG1zZ19kYXRhICpkYXRhLCBpbnQgKnVpZCkKKwlpZiAobXNnLT5kYXRhWzBdID09ICdcbicpCisJCWxmbnVtKys7CisJZm9yIChpID0gMTsgaSA8IG1zZy0+bGVuOyBpKyspIHsKKwkJaWYgKG1zZy0+ZGF0YVtpIC0gMV0gIT0gJ1xyJyAmJiBtc2ctPmRhdGFbaV0gPT0gJ1xuJykKKwkJCWxmbnVtKys7CisJfQorCisJbmV3ID0geG1hbGxvYyhtc2ctPmxlbiArIGxmbnVtKTsKKwlpZiAobXNnLT5kYXRhWzBdID09ICdcbicpIHsKKwkJbmV3WzBdID0gJ1xyJzsKKwkJbmV3WzFdID0gJ1xuJzsKKwkJaSA9IDE7CisJCWogPSAyOworCX0gZWxzZSB7CisJCW5ld1swXSA9IG1zZy0+ZGF0YVswXTsKKwkJaSA9IDE7CisJCWogPSAxOworCX0KKwlmb3IgKCA7IGkgPCBtc2ctPmxlbjsgaSsrKSB7CisJCWlmIChtc2ctPmRhdGFbaV0gIT0gJ1xuJykgeworCQkJbmV3W2orK10gPSBtc2ctPmRhdGFbaV07CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAobXNnLT5kYXRhW2kgLSAxXSAhPSAnXHInKQorCQkJbmV3W2orK10gPSAnXHInOworCQkvKiBvdGhlcndpc2UgaXQgYWxyZWFkeSBoYWQgQ1IgYmVmb3JlICovCisJCW5ld1tqKytdID0gJ1xuJzsKKwl9CisJbXNnLT5sZW4gKz0gbGZudW07CisJZnJlZShtc2ctPmRhdGEpOworCW1zZy0+ZGF0YSA9IG5ldzsKK30KKworc3RhdGljIGludCBpbWFwX3N0b3JlX21zZyhzdHJ1Y3Qgc3RvcmUgKmdjdHgsIHN0cnVjdCBtc2dfZGF0YSAqZGF0YSkKIHsKIAlzdHJ1Y3QgaW1hcF9zdG9yZSAqY3R4ID0gKHN0cnVjdCBpbWFwX3N0b3JlICopZ2N0eDsKIAlzdHJ1Y3QgaW1hcCAqaW1hcCA9IGN0eC0+aW1hcDsKIAlzdHJ1Y3QgaW1hcF9jbWRfY2IgY2I7Ci0JY2hhciAqZm1hcCwgKmJ1ZjsKIAljb25zdCBjaGFyICpwcmVmaXgsICpib3g7Ci0JaW50IHJldCwgaSwgaiwgZCwgbGVuLCBleHRyYSwgbm9jcjsKLQlpbnQgc3RhcnQsIHNicmVhayA9IDAsIGVicmVhayA9IDA7Ci0JY2hhciBmbGFnc3RyWzEyOF0sIHR1aWRbVFVJREwgKiAyICsgMV07CisJaW50IHJldCwgZDsKKwljaGFyIGZsYWdzdHJbMTI4XTsKIAorCWxmX3RvX2NybGYoZGF0YSk7CiAJbWVtc2V0KCZjYiwgMCwgc2l6ZW9mKGNiKSk7CiAKLQlmbWFwID0gZGF0YS0+ZGF0YTsKLQlsZW4gPSBkYXRhLT5sZW47Ci0Jbm9jciA9ICFkYXRhLT5jcmxmOwotCWV4dHJhID0gMCwgaSA9IDA7Ci0JaWYgKCFDQVAoVUlEUExVUykgJiYgdWlkKSB7Ci0Jbmxvb3A6Ci0JCXN0YXJ0ID0gaTsKLQkJd2hpbGUgKGkgPCBsZW4pCi0JCQlpZiAoZm1hcFtpKytdID09ICdcbicpIHsKLQkJCQlleHRyYSArPSBub2NyOwotCQkJCWlmIChpIC0gMiArIG5vY3IgPT0gc3RhcnQpIHsKLQkJCQkJc2JyZWFrID0gZWJyZWFrID0gaSAtIDIgKyBub2NyOwotCQkJCQlnb3RvIG1rdGlkOwotCQkJCX0KLQkJCQlpZiAoIW1lbWNtcChmbWFwICsgc3RhcnQsICJYLVRVSUQ6ICIsIDgpKSB7Ci0JCQkJCWV4dHJhIC09IChlYnJlYWsgPSBpKSAtIChzYnJlYWsgPSBzdGFydCkgKyBub2NyOwotCQkJCQlnb3RvIG1rdGlkOwotCQkJCX0KLQkJCQlnb3RvIG5sb29wOwotCQkJfQotCQkvKiBpbnZhbGlkIG1lc3NhZ2UgKi8KLQkJZnJlZShmbWFwKTsKLQkJcmV0dXJuIERSVl9NU0dfQkFEOwotCW1rdGlkOgotCQlmb3IgKGogPSAwOyBqIDwgVFVJREw7IGorKykKLQkJCXNwcmludGYodHVpZCArIGogKiAyLCAiJTAyeCIsIGFyYzRfZ2V0Ynl0ZSgpKTsKLQkJZXh0cmEgKz0gOCArIFRVSURMICogMiArIDI7Ci0JfQotCWlmIChub2NyKQotCQlmb3IgKDsgaSA8IGxlbjsgaSsrKQotCQkJaWYgKGZtYXBbaV0gPT0gJ1xuJykKLQkJCQlleHRyYSsrOwotCi0JY2IuZGxlbiA9IGxlbiArIGV4dHJhOwotCWJ1ZiA9IGNiLmRhdGEgPSB4bWFsbG9jKGNiLmRsZW4pOwotCWkgPSAwOwotCWlmICghQ0FQKFVJRFBMVVMpICYmIHVpZCkgewotCQlpZiAobm9jcikgewotCQkJZm9yICg7IGkgPCBzYnJlYWs7IGkrKykKLQkJCQlpZiAoZm1hcFtpXSA9PSAnXG4nKSB7Ci0JCQkJCSpidWYrKyA9ICdccic7Ci0JCQkJCSpidWYrKyA9ICdcbic7Ci0JCQkJfSBlbHNlCi0JCQkJCSpidWYrKyA9IGZtYXBbaV07Ci0JCX0gZWxzZSB7Ci0JCQltZW1jcHkoYnVmLCBmbWFwLCBzYnJlYWspOwotCQkJYnVmICs9IHNicmVhazsKLQkJfQotCQltZW1jcHkoYnVmLCAiWC1UVUlEOiAiLCA4KTsKLQkJYnVmICs9IDg7Ci0JCW1lbWNweShidWYsIHR1aWQsIFRVSURMICogMik7Ci0JCWJ1ZiArPSBUVUlETCAqIDI7Ci0JCSpidWYrKyA9ICdccic7Ci0JCSpidWYrKyA9ICdcbic7Ci0JCWkgPSBlYnJlYWs7Ci0JfQotCWlmIChub2NyKSB7Ci0JCWZvciAoOyBpIDwgbGVuOyBpKyspCi0JCQlpZiAoZm1hcFtpXSA9PSAnXG4nKSB7Ci0JCQkJKmJ1ZisrID0gJ1xyJzsKLQkJCQkqYnVmKysgPSAnXG4nOwotCQkJfSBlbHNlCi0JCQkJKmJ1ZisrID0gZm1hcFtpXTsKLQl9IGVsc2UKLQkJbWVtY3B5KGJ1ZiwgZm1hcCArIGksIGxlbiAtIGkpOwotCi0JZnJlZShmbWFwKTsKKwljYi5kbGVuID0gZGF0YS0+bGVuOworCWNiLmRhdGEgPSB4bWFsbG9jKGNiLmRsZW4pOworCW1lbWNweShjYi5kYXRhLCBkYXRhLT5kYXRhLCBkYXRhLT5sZW4pOwogCiAJZCA9IDA7CiAJaWYgKGRhdGEtPmZsYWdzKSB7CkBAIC0xMjQwLDI2ICsxMjIyLDE0IEBACiAJfQogCWZsYWdzdHJbZF0gPSAwOwogCi0JaWYgKCF1aWQpIHsKLQkJYm94ID0gZ2N0eC0+Y29uZi0+dHJhc2g7Ci0JCXByZWZpeCA9IGN0eC0+cHJlZml4OwotCQljYi5jcmVhdGUgPSAxOwotCQlpZiAoY3R4LT50cmFzaG5jKQotCQkJaW1hcC0+Y2FwcyA9IGltYXAtPnJjYXBzICYgfigxIDw8IExJVEVSQUxQTFVTKTsKLQl9IGVsc2UgewotCQlib3ggPSBnY3R4LT5uYW1lOwotCQlwcmVmaXggPSAhc3RyY21wKGJveCwgIklOQk9YIikgPyAiIiA6IGN0eC0+cHJlZml4OwotCQljYi5jcmVhdGUgPSAwOwotCX0KLQljYi5jdHggPSB1aWQ7CisJYm94ID0gZ2N0eC0+bmFtZTsKKwlwcmVmaXggPSAhc3RyY21wKGJveCwgIklOQk9YIikgPyAiIiA6IGN0eC0+cHJlZml4OworCWNiLmNyZWF0ZSA9IDA7CiAJcmV0ID0gaW1hcF9leGVjX20oY3R4LCAmY2IsICJBUFBFTkQgXCIlcyVzXCIgJXMiLCBwcmVmaXgsIGJveCwgZmxhZ3N0cik7CiAJaW1hcC0+Y2FwcyA9IGltYXAtPnJjYXBzOwogCWlmIChyZXQgIT0gRFJWX09LKQogCQlyZXR1cm4gcmV0OwotCWlmICghdWlkKQotCQljdHgtPnRyYXNobmMgPSAwOwotCWVsc2UKLQkJZ2N0eC0+Y291bnQrKzsKKwlnY3R4LT5jb3VudCsrOwogCiAJcmV0dXJuIERSVl9PSzsKIH0KQEAgLTEzOTksMTEgKzEzNjksMTYgQEAKIAlpZiAoc3RybmNtcChrZXksIGltYXBfa2V5LCBzaXplb2YgaW1hcF9rZXkgLSAxKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoIXZhbCkKLQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKGtleSk7Ci0KIAlrZXkgKz0gc2l6ZW9mIGltYXBfa2V5IC0gMTsKIAorCS8qIGNoZWNrIGJvb2xlYW5zIGZpcnN0LCBhbmQgYmFyZiBvbiBvdGhlcnMgKi8KKwlpZiAoIXN0cmNtcCgic3NsdmVyaWZ5Iiwga2V5KSkKKwkJc2VydmVyLnNzbF92ZXJpZnkgPSBnaXRfY29uZmlnX2Jvb2woa2V5LCB2YWwpOworCWVsc2UgaWYgKCFzdHJjbXAoInByZWZvcm1hdHRlZGh0bWwiLCBrZXkpKQorCQlzZXJ2ZXIudXNlX2h0bWwgPSBnaXRfY29uZmlnX2Jvb2woa2V5LCB2YWwpOworCWVsc2UgaWYgKCF2YWwpCisJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbChrZXkpOworCiAJaWYgKCFzdHJjbXAoImZvbGRlciIsIGtleSkpIHsKIAkJaW1hcF9mb2xkZXIgPSB4c3RyZHVwKHZhbCk7CiAJfSBlbHNlIGlmICghc3RyY21wKCJob3N0Iiwga2V5KSkgewpAQCAtMTQyNCwxMCArMTM5OSw2IEBACiAJCXNlcnZlci5wb3J0ID0gZ2l0X2NvbmZpZ19pbnQoa2V5LCB2YWwpOwogCWVsc2UgaWYgKCFzdHJjbXAoInR1bm5lbCIsIGtleSkpCiAJCXNlcnZlci50dW5uZWwgPSB4c3RyZHVwKHZhbCk7Ci0JZWxzZSBpZiAoIXN0cmNtcCgic3NsdmVyaWZ5Iiwga2V5KSkKLQkJc2VydmVyLnNzbF92ZXJpZnkgPSBnaXRfY29uZmlnX2Jvb2woa2V5LCB2YWwpOwotCWVsc2UgaWYgKCFzdHJjbXAoInByZWZvcm1hdHRlZEhUTUwiLCBrZXkpKQotCQlzZXJ2ZXIudXNlX2h0bWwgPSBnaXRfY29uZmlnX2Jvb2woa2V5LCB2YWwpOwogCXJldHVybiAwOwogfQogCkBAIC0xNDM1LDcgKzE0MDYsNiBAQAogewogCXN0cnVjdCBtc2dfZGF0YSBhbGxfbXNncywgbXNnOwogCXN0cnVjdCBzdG9yZSAqY3R4ID0gTlVMTDsKLQlpbnQgdWlkID0gMDsKIAlpbnQgb2ZzID0gMDsKIAlpbnQgcjsKIAlpbnQgdG90YWwsIG4gPSAwOwpAQCAtMTQ0Myw4ICsxNDEzLDggQEAKIAogCWdpdF9leHRyYWN0X2FyZ3YwX3BhdGgoYXJndlswXSk7CiAKLQkvKiBpbml0IHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciAqLwotCWFyYzRfaW5pdCgpOworCWlmIChhcmdjICE9IDEpCisJCXVzYWdlKGltYXBfc2VuZF91c2FnZSk7CiAKIAlzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgmbm9uZ2l0X29rKTsKIAlnaXRfY29uZmlnKGdpdF9pbWFwX2NvbmZpZywgTlVMTCk7CkBAIC0xNDkyLDcgKzE0NjIsNyBAQAogCQkJYnJlYWs7CiAJCWlmIChzZXJ2ZXIudXNlX2h0bWwpCiAJCQl3cmFwX2luX2h0bWwoJm1zZyk7Ci0JCXIgPSBpbWFwX3N0b3JlX21zZyhjdHgsICZtc2csICZ1aWQpOworCQlyID0gaW1hcF9zdG9yZV9tc2coY3R4LCAmbXNnKTsKIAkJaWYgKHIgIT0gRFJWX09LKQogCQkJYnJlYWs7CiAJCW4rKzsKZGlmZiAtLWdpdCBhL2xldmVuc2h0ZWluLmggYi9sZXZlbnNodGVpbi5oCmluZGV4IDAxNzNhYmUuLjQxMDViZjMgMTAwNjQ0Ci0tLSBhL2xldmVuc2h0ZWluLmgKKysrIGIvbGV2ZW5zaHRlaW4uaApAQCAtMiw3ICsyLDcgQEAKICNkZWZpbmUgTEVWRU5TSFRFSU5fSAogCiBpbnQgbGV2ZW5zaHRlaW4oY29uc3QgY2hhciAqc3RyaW5nMSwgY29uc3QgY2hhciAqc3RyaW5nMiwKLQlpbnQgc3dhcF9wZW5hbHR5LCBpbnQgc3Vic3RpdGlvbl9wZW5hbHR5LAorCWludCBzd2FwX3BlbmFsdHksIGludCBzdWJzdGl0dXRpb25fcGVuYWx0eSwKIAlpbnQgaW5zZXJ0aW9uX3BlbmFsdHksIGludCBkZWxldGlvbl9wZW5hbHR5KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9sbC1tZXJnZS5jIGIvbGwtbWVyZ2UuYwppbmRleCBmN2MyYmM5Li40YzdmMTFiIDEwMDY0NAotLS0gYS9sbC1tZXJnZS5jCisrKyBiL2xsLW1lcmdlLmMKQEAgLTE4LDcgKzE4LDggQEAKIAkJCSAgIG1tZmlsZV90ICpvcmlnLAogCQkJICAgbW1maWxlX3QgKnNyYzEsIGNvbnN0IGNoYXIgKm5hbWUxLAogCQkJICAgbW1maWxlX3QgKnNyYzIsIGNvbnN0IGNoYXIgKm5hbWUyLAotCQkJICAgaW50IHZpcnR1YWxfYW5jZXN0b3IpOworCQkJICAgaW50IGZsYWcsCisJCQkgICBpbnQgbWFya2VyX3NpemUpOwogCiBzdHJ1Y3QgbGxfbWVyZ2VfZHJpdmVyIHsKIAljb25zdCBjaGFyICpuYW1lOwpAQCAtMzgsMTQgKzM5LDE0IEBACiAJCQkgICBtbWZpbGVfdCAqb3JpZywKIAkJCSAgIG1tZmlsZV90ICpzcmMxLCBjb25zdCBjaGFyICpuYW1lMSwKIAkJCSAgIG1tZmlsZV90ICpzcmMyLCBjb25zdCBjaGFyICpuYW1lMiwKLQkJCSAgIGludCB2aXJ0dWFsX2FuY2VzdG9yKQorCQkJICAgaW50IGZsYWcsIGludCBtYXJrZXJfc2l6ZSkKIHsKIAkvKgogCSAqIFRoZSB0ZW50YXRpdmUgbWVyZ2UgcmVzdWx0IGlzICJvdXJzIiBmb3IgdGhlIGZpbmFsIHJvdW5kLAogCSAqIG9yIGNvbW1vbiBhbmNlc3RvciBmb3IgYW4gaW50ZXJuYWwgbWVyZ2UuICBTdGlsbCByZXR1cm4KIAkgKiAiY29uZmxpY3RlZCBtZXJnZSIgc3RhdHVzLgogCSAqLwotCW1tZmlsZV90ICpzdG9sZW4gPSB2aXJ0dWFsX2FuY2VzdG9yID8gb3JpZyA6IHNyYzE7CisJbW1maWxlX3QgKnN0b2xlbiA9IChmbGFnICYgMDEpID8gb3JpZyA6IHNyYzE7CiAKIAlyZXN1bHQtPnB0ciA9IHN0b2xlbi0+cHRyOwogCXJlc3VsdC0+c2l6ZSA9IHN0b2xlbi0+c2l6ZTsKQEAgLTU1LDM0ICs1NiwzNyBAQAogCiBzdGF0aWMgaW50IGxsX3hkbF9tZXJnZShjb25zdCBzdHJ1Y3QgbGxfbWVyZ2VfZHJpdmVyICpkcnZfdW51c2VkLAogCQkJbW1idWZmZXJfdCAqcmVzdWx0LAotCQkJY29uc3QgY2hhciAqcGF0aF91bnVzZWQsCisJCQljb25zdCBjaGFyICpwYXRoLAogCQkJbW1maWxlX3QgKm9yaWcsCiAJCQltbWZpbGVfdCAqc3JjMSwgY29uc3QgY2hhciAqbmFtZTEsCiAJCQltbWZpbGVfdCAqc3JjMiwgY29uc3QgY2hhciAqbmFtZTIsCi0JCQlpbnQgdmlydHVhbF9hbmNlc3RvcikKKwkJCWludCBmbGFnLCBpbnQgbWFya2VyX3NpemUpCiB7Ci0JeHBwYXJhbV90IHhwcDsKKwl4bXBhcmFtX3QgeG1wOwogCWludCBzdHlsZSA9IDA7CisJaW50IGZhdm9yID0gKGZsYWcgPj4gMSkgJiAwMzsKIAogCWlmIChidWZmZXJfaXNfYmluYXJ5KG9yaWctPnB0ciwgb3JpZy0+c2l6ZSkgfHwKIAkgICAgYnVmZmVyX2lzX2JpbmFyeShzcmMxLT5wdHIsIHNyYzEtPnNpemUpIHx8CiAJICAgIGJ1ZmZlcl9pc19iaW5hcnkoc3JjMi0+cHRyLCBzcmMyLT5zaXplKSkgewotCQl3YXJuaW5nKCJDYW5ub3QgbWVyZ2UgYmluYXJ5IGZpbGVzOiAlcyB2cy4gJXNcbiIsCi0JCQluYW1lMSwgbmFtZTIpOworCQl3YXJuaW5nKCJDYW5ub3QgbWVyZ2UgYmluYXJ5IGZpbGVzOiAlcyAoJXMgdnMuICVzKVxuIiwKKwkJCXBhdGgsIG5hbWUxLCBuYW1lMik7CiAJCXJldHVybiBsbF9iaW5hcnlfbWVyZ2UoZHJ2X3VudXNlZCwgcmVzdWx0LAotCQkJCSAgICAgICBwYXRoX3VudXNlZCwKKwkJCQkgICAgICAgcGF0aCwKIAkJCQkgICAgICAgb3JpZywgc3JjMSwgbmFtZTEsCiAJCQkJICAgICAgIHNyYzIsIG5hbWUyLAotCQkJCSAgICAgICB2aXJ0dWFsX2FuY2VzdG9yKTsKKwkJCQkgICAgICAgZmxhZywgbWFya2VyX3NpemUpOwogCX0KIAotCW1lbXNldCgmeHBwLCAwLCBzaXplb2YoeHBwKSk7CisJbWVtc2V0KCZ4bXAsIDAsIHNpemVvZih4bXApKTsKIAlpZiAoZ2l0X3htZXJnZV9zdHlsZSA+PSAwKQogCQlzdHlsZSA9IGdpdF94bWVyZ2Vfc3R5bGU7CisJaWYgKG1hcmtlcl9zaXplID4gMCkKKwkJeG1wLm1hcmtlcl9zaXplID0gbWFya2VyX3NpemU7CiAJcmV0dXJuIHhkbF9tZXJnZShvcmlnLAogCQkJIHNyYzEsIG5hbWUxLAogCQkJIHNyYzIsIG5hbWUyLAotCQkJICZ4cHAsIFhETF9NRVJHRV9aRUFMT1VTIHwgc3R5bGUsCisJCQkgJnhtcCwgWERMX01FUkdFX0ZMQUdTKFhETF9NRVJHRV9aRUFMT1VTLCBzdHlsZSwgZmF2b3IpLAogCQkJIHJlc3VsdCk7CiB9CiAKQEAgLTkyLDExICs5NiwxMCBAQAogCQkJICBtbWZpbGVfdCAqb3JpZywKIAkJCSAgbW1maWxlX3QgKnNyYzEsIGNvbnN0IGNoYXIgKm5hbWUxLAogCQkJICBtbWZpbGVfdCAqc3JjMiwgY29uc3QgY2hhciAqbmFtZTIsCi0JCQkgIGludCB2aXJ0dWFsX2FuY2VzdG9yKQorCQkJICBpbnQgZmxhZywgaW50IG1hcmtlcl9zaXplKQogewogCWNoYXIgKnNyYywgKmRzdDsKIAlsb25nIHNpemU7Ci0JY29uc3QgaW50IG1hcmtlcl9zaXplID0gNzsKIAlpbnQgc3RhdHVzLCBzYXZlZF9zdHlsZTsKIAogCS8qIFdlIGhhdmUgdG8gZm9yY2UgdGhlIFJDUyAibWVyZ2UiIHN0eWxlICovCkBAIC0xMDQsNyArMTA3LDcgQEAKIAlnaXRfeG1lcmdlX3N0eWxlID0gMDsKIAlzdGF0dXMgPSBsbF94ZGxfbWVyZ2UoZHJ2X3VudXNlZCwgcmVzdWx0LCBwYXRoX3VudXNlZCwKIAkJCSAgICAgIG9yaWcsIHNyYzEsIE5VTEwsIHNyYzIsIE5VTEwsCi0JCQkgICAgICB2aXJ0dWFsX2FuY2VzdG9yKTsKKwkJCSAgICAgIGZsYWcsIG1hcmtlcl9zaXplKTsKIAlnaXRfeG1lcmdlX3N0eWxlID0gc2F2ZWRfc3R5bGU7CiAJaWYgKHN0YXR1cyA8PSAwKQogCQlyZXR1cm4gc3RhdHVzOwpAQCAtMTUyLDcgKzE1NSw3IEBACiAJc3RyY3B5KHBhdGgsICIubWVyZ2VfZmlsZV9YWFhYWFgiKTsKIAlmZCA9IHhta3N0ZW1wKHBhdGgpOwogCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBzcmMtPnB0ciwgc3JjLT5zaXplKSAhPSBzcmMtPnNpemUpCi0JCWRpZSgidW5hYmxlIHRvIHdyaXRlIHRlbXAtZmlsZSIpOworCQlkaWVfZXJybm8oInVuYWJsZSB0byB3cml0ZSB0ZW1wLWZpbGUiKTsKIAljbG9zZShmZCk7CiB9CiAKQEAgLTE2NSwxOCArMTY4LDE4IEBACiAJCQltbWZpbGVfdCAqb3JpZywKIAkJCW1tZmlsZV90ICpzcmMxLCBjb25zdCBjaGFyICpuYW1lMSwKIAkJCW1tZmlsZV90ICpzcmMyLCBjb25zdCBjaGFyICpuYW1lMiwKLQkJCWludCB2aXJ0dWFsX2FuY2VzdG9yKQorCQkJaW50IGZsYWcsIGludCBtYXJrZXJfc2l6ZSkKIHsKLQljaGFyIHRlbXBbM11bNTBdOworCWNoYXIgdGVtcFs0XVs1MF07CiAJc3RydWN0IHN0cmJ1ZiBjbWQgPSBTVFJCVUZfSU5JVDsKIAlzdHJ1Y3Qgc3RyYnVmX2V4cGFuZF9kaWN0X2VudHJ5IGRpY3RbXSA9IHsKIAkJeyAiTyIsIHRlbXBbMF0gfSwKIAkJeyAiQSIsIHRlbXBbMV0gfSwKIAkJeyAiQiIsIHRlbXBbMl0gfSwKKwkJeyAiTCIsIHRlbXBbM10gfSwKIAkJeyBOVUxMIH0KIAl9OwotCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNoaWxkOwotCWNvbnN0IGNoYXIgKmFyZ3NbMjBdOworCWNvbnN0IGNoYXIgKmFyZ3NbXSA9IHsgTlVMTCwgTlVMTCB9OwogCWludCBzdGF0dXMsIGZkLCBpOwogCXN0cnVjdCBzdGF0IHN0OwogCkBAIC0xODgsMjEgKzE5MSwxMiBAQAogCWNyZWF0ZV90ZW1wKG9yaWcsIHRlbXBbMF0pOwogCWNyZWF0ZV90ZW1wKHNyYzEsIHRlbXBbMV0pOwogCWNyZWF0ZV90ZW1wKHNyYzIsIHRlbXBbMl0pOworCXNwcmludGYodGVtcFszXSwgIiVkIiwgbWFya2VyX3NpemUpOwogCiAJc3RyYnVmX2V4cGFuZCgmY21kLCBmbi0+Y21kbGluZSwgc3RyYnVmX2V4cGFuZF9kaWN0X2NiLCAmZGljdCk7CiAKLQltZW1zZXQoJmNoaWxkLCAwLCBzaXplb2YoY2hpbGQpKTsKLQljaGlsZC5hcmd2ID0gYXJnczsKLQlhcmdzWzBdID0gInNoIjsKLQlhcmdzWzFdID0gIi1jIjsKLQlhcmdzWzJdID0gY21kLmJ1ZjsKLQlhcmdzWzNdID0gTlVMTDsKLQotCXN0YXR1cyA9IHJ1bl9jb21tYW5kKCZjaGlsZCk7Ci0JaWYgKHN0YXR1cyA8IC1FUlJfUlVOX0NPTU1BTkRfRk9SSykKLQkJOyAvKiBmYWlsdXJlIGluIHJ1bi1jb21tYW5kICovCi0JZWxzZQotCQlzdGF0dXMgPSAtc3RhdHVzOworCWFyZ3NbMF0gPSBjbWQuYnVmOworCXN0YXR1cyA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3MsIFJVTl9VU0lOR19TSEVMTCk7CiAJZmQgPSBvcGVuKHRlbXBbMV0sIE9fUkRPTkxZKTsKIAlpZiAoZmQgPCAwKQogCQlnb3RvIGJhZDsKQEAgLTI5MCw2ICsyODQsNyBAQAogCQkgKiAgICAlTyAtIHRlbXBvcmFyeSBmaWxlIG5hbWUgZm9yIHRoZSBtZXJnZSBiYXNlLgogCQkgKiAgICAlQSAtIHRlbXBvcmFyeSBmaWxlIG5hbWUgZm9yIG91ciB2ZXJzaW9uLgogCQkgKiAgICAlQiAtIHRlbXBvcmFyeSBmaWxlIG5hbWUgZm9yIHRoZSBvdGhlciBicmFuY2hlcycgdmVyc2lvbi4KKwkJICogICAgJUwgLSBjb25mbGljdCBtYXJrZXIgbGVuZ3RoCiAJCSAqCiAJCSAqIFRoZSBleHRlcm5hbCBtZXJnZSBkcml2ZXIgc2hvdWxkIHdyaXRlIHRoZSByZXN1bHRzIGluIHRoZQogCQkgKiBmaWxlIG5hbWVkIGJ5ICVBLCBhbmQgc2lnbmFsIHRoYXQgaXQgaGFzIGRvbmUgd2l0aCB6ZXJvIGV4aXQKQEAgLTM1MCwxNiArMzQ1LDEzIEBACiAJcmV0dXJuICZsbF9tZXJnZV9kcnZbTExfVEVYVF9NRVJHRV07CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyICpnaXRfcGF0aF9jaGVja19tZXJnZShjb25zdCBjaGFyICpwYXRoKQorc3RhdGljIGludCBnaXRfcGF0aF9jaGVja19tZXJnZShjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2sgY2hlY2tbMl0pCiB7Ci0Jc3RhdGljIHN0cnVjdCBnaXRfYXR0cl9jaGVjayBhdHRyX21lcmdlX2NoZWNrOwotCi0JaWYgKCFhdHRyX21lcmdlX2NoZWNrLmF0dHIpCi0JCWF0dHJfbWVyZ2VfY2hlY2suYXR0ciA9IGdpdF9hdHRyKCJtZXJnZSIsIDUpOwotCi0JaWYgKGdpdF9jaGVja2F0dHIocGF0aCwgMSwgJmF0dHJfbWVyZ2VfY2hlY2spKQotCQlyZXR1cm4gTlVMTDsKLQlyZXR1cm4gYXR0cl9tZXJnZV9jaGVjay52YWx1ZTsKKwlpZiAoIWNoZWNrWzBdLmF0dHIpIHsKKwkJY2hlY2tbMF0uYXR0ciA9IGdpdF9hdHRyKCJtZXJnZSIpOworCQljaGVja1sxXS5hdHRyID0gZ2l0X2F0dHIoImNvbmZsaWN0LW1hcmtlci1zaXplIik7CisJfQorCXJldHVybiBnaXRfY2hlY2thdHRyKHBhdGgsIDIsIGNoZWNrKTsKIH0KIAogaW50IGxsX21lcmdlKG1tYnVmZmVyX3QgKnJlc3VsdF9idWYsCkBAIC0zNjcsMTggKzM1OSw0MSBAQAogCSAgICAgbW1maWxlX3QgKmFuY2VzdG9yLAogCSAgICAgbW1maWxlX3QgKm91cnMsIGNvbnN0IGNoYXIgKm91cl9sYWJlbCwKIAkgICAgIG1tZmlsZV90ICp0aGVpcnMsIGNvbnN0IGNoYXIgKnRoZWlyX2xhYmVsLAotCSAgICAgaW50IHZpcnR1YWxfYW5jZXN0b3IpCisJICAgICBpbnQgZmxhZykKIHsKLQljb25zdCBjaGFyICpsbF9kcml2ZXJfbmFtZTsKKwlzdGF0aWMgc3RydWN0IGdpdF9hdHRyX2NoZWNrIGNoZWNrWzJdOworCWNvbnN0IGNoYXIgKmxsX2RyaXZlcl9uYW1lID0gTlVMTDsKKwlpbnQgbWFya2VyX3NpemUgPSBERUZBVUxUX0NPTkZMSUNUX01BUktFUl9TSVpFOwogCWNvbnN0IHN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgKmRyaXZlcjsKKwlpbnQgdmlydHVhbF9hbmNlc3RvciA9IGZsYWcgJiAwMTsKIAotCWxsX2RyaXZlcl9uYW1lID0gZ2l0X3BhdGhfY2hlY2tfbWVyZ2UocGF0aCk7CisJaWYgKCFnaXRfcGF0aF9jaGVja19tZXJnZShwYXRoLCBjaGVjaykpIHsKKwkJbGxfZHJpdmVyX25hbWUgPSBjaGVja1swXS52YWx1ZTsKKwkJaWYgKGNoZWNrWzFdLnZhbHVlKSB7CisJCQltYXJrZXJfc2l6ZSA9IGF0b2koY2hlY2tbMV0udmFsdWUpOworCQkJaWYgKG1hcmtlcl9zaXplIDw9IDApCisJCQkJbWFya2VyX3NpemUgPSBERUZBVUxUX0NPTkZMSUNUX01BUktFUl9TSVpFOworCQl9CisJfQogCWRyaXZlciA9IGZpbmRfbGxfbWVyZ2VfZHJpdmVyKGxsX2RyaXZlcl9uYW1lKTsKLQogCWlmICh2aXJ0dWFsX2FuY2VzdG9yICYmIGRyaXZlci0+cmVjdXJzaXZlKQogCQlkcml2ZXIgPSBmaW5kX2xsX21lcmdlX2RyaXZlcihkcml2ZXItPnJlY3Vyc2l2ZSk7Ci0JcmV0dXJuIGRyaXZlci0+Zm4oZHJpdmVyLCByZXN1bHRfYnVmLCBwYXRoLAotCQkJICBhbmNlc3RvciwKLQkJCSAgb3Vycywgb3VyX2xhYmVsLAotCQkJICB0aGVpcnMsIHRoZWlyX2xhYmVsLCB2aXJ0dWFsX2FuY2VzdG9yKTsKKwlyZXR1cm4gZHJpdmVyLT5mbihkcml2ZXIsIHJlc3VsdF9idWYsIHBhdGgsIGFuY2VzdG9yLAorCQkJICBvdXJzLCBvdXJfbGFiZWwsIHRoZWlycywgdGhlaXJfbGFiZWwsCisJCQkgIGZsYWcsIG1hcmtlcl9zaXplKTsKK30KKworaW50IGxsX21lcmdlX21hcmtlcl9zaXplKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RhdGljIHN0cnVjdCBnaXRfYXR0cl9jaGVjayBjaGVjazsKKwlpbnQgbWFya2VyX3NpemUgPSBERUZBVUxUX0NPTkZMSUNUX01BUktFUl9TSVpFOworCisJaWYgKCFjaGVjay5hdHRyKQorCQljaGVjay5hdHRyID0gZ2l0X2F0dHIoImNvbmZsaWN0LW1hcmtlci1zaXplIik7CisJaWYgKCFnaXRfY2hlY2thdHRyKHBhdGgsIDEsICZjaGVjaykgJiYgY2hlY2sudmFsdWUpIHsKKwkJbWFya2VyX3NpemUgPSBhdG9pKGNoZWNrLnZhbHVlKTsKKwkJaWYgKG1hcmtlcl9zaXplIDw9IDApCisJCQltYXJrZXJfc2l6ZSA9IERFRkFVTFRfQ09ORkxJQ1RfTUFSS0VSX1NJWkU7CisJfQorCXJldHVybiBtYXJrZXJfc2l6ZTsKIH0KZGlmZiAtLWdpdCBhL2xsLW1lcmdlLmggYi9sbC1tZXJnZS5oCmluZGV4IDUzODg0MjIuLjU3ODg5MjIgMTAwNjQ0Ci0tLSBhL2xsLW1lcmdlLmgKKysrIGIvbGwtbWVyZ2UuaApAQCAtMTAsNiArMTAsOCBAQAogCSAgICAgbW1maWxlX3QgKmFuY2VzdG9yLAogCSAgICAgbW1maWxlX3QgKm91cnMsIGNvbnN0IGNoYXIgKm91cl9sYWJlbCwKIAkgICAgIG1tZmlsZV90ICp0aGVpcnMsIGNvbnN0IGNoYXIgKnRoZWlyX2xhYmVsLAotCSAgICAgaW50IHZpcnR1YWxfYW5jZXN0b3IpOworCSAgICAgaW50IGZsYWcpOworCitpbnQgbGxfbWVyZ2VfbWFya2VyX3NpemUoY29uc3QgY2hhciAqcGF0aCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbG9ja2ZpbGUuYyBiL2xvY2tmaWxlLmMKaW5kZXggZWI5MzFlZC4uYjBkNzRjZCAxMDA2NDQKLS0tIGEvbG9ja2ZpbGUuYworKysgYi9sb2NrZmlsZS5jCkBAIC0xNTUsMTggKzE1NSwzMyBAQAogCXJldHVybiBsay0+ZmQ7CiB9CiAKLQotTk9SRVRVUk4gdm9pZCB1bmFibGVfdG9fbG9ja19pbmRleF9kaWUoY29uc3QgY2hhciAqcGF0aCwgaW50IGVycikKK3N0YXRpYyBjaGFyICp1bmFibGVfdG9fbG9ja19tZXNzYWdlKGNvbnN0IGNoYXIgKnBhdGgsIGludCBlcnIpCiB7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwogCWlmIChlcnIgPT0gRUVYSVNUKSB7Ci0JCWRpZSgiVW5hYmxlIHRvIGNyZWF0ZSAnJXMubG9jayc6ICVzLlxuXG4iCisJCXN0cmJ1Zl9hZGRmKCZidWYsICJVbmFibGUgdG8gY3JlYXRlICclcy5sb2NrJzogJXMuXG5cbiIKIAkJICAgICJJZiBubyBvdGhlciBnaXQgcHJvY2VzcyBpcyBjdXJyZW50bHkgcnVubmluZywgdGhpcyBwcm9iYWJseSBtZWFucyBhXG4iCiAJCSAgICAiZ2l0IHByb2Nlc3MgY3Jhc2hlZCBpbiB0aGlzIHJlcG9zaXRvcnkgZWFybGllci4gTWFrZSBzdXJlIG5vIG90aGVyIGdpdFxuIgogCQkgICAgInByb2Nlc3MgaXMgcnVubmluZyBhbmQgcmVtb3ZlIHRoZSBmaWxlIG1hbnVhbGx5IHRvIGNvbnRpbnVlLiIsCi0JCSAgICBwYXRoLCBzdHJlcnJvcihlcnIpKTsKLQl9IGVsc2UgewotCQlkaWUoIlVuYWJsZSB0byBjcmVhdGUgJyVzLmxvY2snOiAlcyIsIHBhdGgsIHN0cmVycm9yKGVycikpOwotCX0KKwkJCSAgICBtYWtlX25vbnJlbGF0aXZlX3BhdGgocGF0aCksIHN0cmVycm9yKGVycikpOworCX0gZWxzZQorCQlzdHJidWZfYWRkZigmYnVmLCAiVW5hYmxlIHRvIGNyZWF0ZSAnJXMubG9jayc6ICVzIiwKKwkJCSAgICBtYWtlX25vbnJlbGF0aXZlX3BhdGgocGF0aCksIHN0cmVycm9yKGVycikpOworCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworfQorCitpbnQgdW5hYmxlX3RvX2xvY2tfZXJyb3IoY29uc3QgY2hhciAqcGF0aCwgaW50IGVycikKK3sKKwljaGFyICptc2cgPSB1bmFibGVfdG9fbG9ja19tZXNzYWdlKHBhdGgsIGVycik7CisJZXJyb3IoIiVzIiwgbXNnKTsKKwlmcmVlKG1zZyk7CisJcmV0dXJuIC0xOworfQorCitOT1JFVFVSTiB2b2lkIHVuYWJsZV90b19sb2NrX2luZGV4X2RpZShjb25zdCBjaGFyICpwYXRoLCBpbnQgZXJyKQoreworCWRpZSgiJXMiLCB1bmFibGVfdG9fbG9ja19tZXNzYWdlKHBhdGgsIGVycikpOwogfQogCiBpbnQgaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZShzdHJ1Y3QgbG9ja19maWxlICpsaywgY29uc3QgY2hhciAqcGF0aCwgaW50IGZsYWdzKQpkaWZmIC0tZ2l0IGEvbG9nLXRyZWUuYyBiL2xvZy10cmVlLmMKaW5kZXggNWJkMjllNi4uMjdhZmNmNiAxMDA2NDQKLS0tIGEvbG9nLXRyZWUuYworKysgYi9sb2ctdHJlZS5jCkBAIC0yNSw2ICsyNSw4IEBACiAJc3RydWN0IG9iamVjdCAqb2JqID0gcGFyc2Vfb2JqZWN0KHNoYTEpOwogCWlmICghb2JqKQogCQlyZXR1cm4gMDsKKwlpZiAoIWNiX2RhdGEgfHwgKihpbnQgKiljYl9kYXRhID09IERFQ09SQVRFX1NIT1JUX1JFRlMpCisJCXJlZm5hbWUgPSBwcmV0dGlmeV9yZWZuYW1lKHJlZm5hbWUpOwogCWFkZF9uYW1lX2RlY29yYXRpb24oIiIsIHJlZm5hbWUsIG9iaik7CiAJd2hpbGUgKG9iai0+dHlwZSA9PSBPQkpfVEFHKSB7CiAJCW9iaiA9ICgoc3RydWN0IHRhZyAqKW9iaiktPnRhZ2dlZDsKQEAgLTM1LDEyICszNywxMyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGxvYWRfcmVmX2RlY29yYXRpb25zKHZvaWQpCit2b2lkIGxvYWRfcmVmX2RlY29yYXRpb25zKGludCBmbGFncykKIHsKIAlzdGF0aWMgaW50IGxvYWRlZDsKIAlpZiAoIWxvYWRlZCkgewogCQlsb2FkZWQgPSAxOwotCQlmb3JfZWFjaF9yZWYoYWRkX3JlZl9kZWNvcmF0aW9uLCBOVUxMKTsKKwkJZm9yX2VhY2hfcmVmKGFkZF9yZWZfZGVjb3JhdGlvbiwgJmZsYWdzKTsKKwkJaGVhZF9yZWYoYWRkX3JlZl9kZWNvcmF0aW9uLCAmZmxhZ3MpOwogCX0KIH0KIApAQCAtMTY3LDE4ICsxNzAsNiBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbnQgaGFzX25vbl9hc2NpaShjb25zdCBjaGFyICpzKQotewotCWludCBjaDsKLQlpZiAoIXMpCi0JCXJldHVybiAwOwotCXdoaWxlICgoY2ggPSAqcysrKSAhPSAnXDAnKSB7Ci0JCWlmIChub25fYXNjaWkoY2gpKQotCQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotCiB2b2lkIGdldF9wYXRjaF9maWxlbmFtZShzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGludCBuciwgY29uc3QgY2hhciAqc3VmZml4LAogCQkJc3RydWN0IHN0cmJ1ZiAqYnVmKQogewpAQCAtMTg4LDggKzE3OSwxMCBAQAogCXN0cmJ1Zl9hZGRmKGJ1ZiwgY29tbWl0ID8gIiUwNGQtIiA6ICIlZCIsIG5yKTsKIAlpZiAoY29tbWl0KSB7CiAJCWludCBtYXhfbGVuID0gc3RhcnRfbGVuICsgRk9STUFUX1BBVENIX05BTUVfTUFYIC0gc3VmZml4X2xlbjsKKwkJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IGN0eCA9IHswfTsKKwkJY3R4LmRhdGVfbW9kZSA9IERBVEVfTk9STUFMOwogCi0JCWZvcm1hdF9jb21taXRfbWVzc2FnZShjb21taXQsICIlZiIsIGJ1ZiwgREFURV9OT1JNQUwpOworCQlmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29tbWl0LCAiJWYiLCBidWYsICZjdHgpOwogCQlpZiAobWF4X2xlbiA8IGJ1Zi0+bGVuKQogCQkJc3RyYnVmX3NldGxlbihidWYsIG1heF9sZW4pOwogCQlzdHJidWZfYWRkc3RyKGJ1Ziwgc3VmZml4KTsKQEAgLTI4NiwxMiArMjc5LDEyIEBACiAJc3RydWN0IHN0cmJ1ZiBtc2didWYgPSBTVFJCVUZfSU5JVDsKIAlzdHJ1Y3QgbG9nX2luZm8gKmxvZyA9IG9wdC0+bG9naW5mbzsKIAlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsb2ctPmNvbW1pdCwgKnBhcmVudCA9IGxvZy0+cGFyZW50OwotCWludCBhYmJyZXYgPSBvcHQtPmRpZmZvcHQuYWJicmV2OwogCWludCBhYmJyZXZfY29tbWl0ID0gb3B0LT5hYmJyZXZfY29tbWl0ID8gb3B0LT5hYmJyZXYgOiA0MDsKLQljb25zdCBjaGFyICpzdWJqZWN0ID0gTlVMTCwgKmV4dHJhX2hlYWRlcnMgPSBvcHQtPmV4dHJhX2hlYWRlcnM7Ci0JaW50IG5lZWRfOGJpdF9jdGUgPSAwOworCWNvbnN0IGNoYXIgKmV4dHJhX2hlYWRlcnMgPSBvcHQtPmV4dHJhX2hlYWRlcnM7CisJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IGN0eCA9IHswfTsKIAogCW9wdC0+bG9naW5mbyA9IE5VTEw7CisJY3R4LnNob3dfbm90ZXMgPSBvcHQtPnNob3dfbm90ZXM7CiAJaWYgKCFvcHQtPnZlcmJvc2VfaGVhZGVyKSB7CiAJCWdyYXBoX3Nob3dfY29tbWl0KG9wdC0+Z3JhcGgpOwogCkBAIC0zMjAsNyArMzEzLDggQEAKIAl9CiAKIAkvKgotCSAqIElmIHVzZV90ZXJtaW5hdG9yIGlzIHNldCwgYWRkIGEgbmV3bGluZSBhdCB0aGUgZW5kIG9mIHRoZSBlbnRyeS4KKwkgKiBJZiB1c2VfdGVybWluYXRvciBpcyBzZXQsIHdlIGFscmVhZHkgaGFuZGxlZCBhbnkgcmVjb3JkIHRlcm1pbmF0aW9uCisJICogYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCByZWNvcmQuCiAJICogT3RoZXJ3aXNlLCBhZGQgYSBkaWZmb3B0LmxpbmVfdGVybWluYXRpb24gY2hhcmFjdGVyIGJlZm9yZSBhbGwKIAkgKiBlbnRyaWVzIGJ1dCB0aGUgZmlyc3QuICAoSU9XLCBhcyBhIHNlcGFyYXRvciBiZXR3ZWVuIGVudHJpZXMpCiAJICovCkBAIC0zNTUsOCArMzQ5LDggQEAKIAkgKi8KIAogCWlmIChvcHQtPmNvbW1pdF9mb3JtYXQgPT0gQ01JVF9GTVRfRU1BSUwpIHsKLQkJbG9nX3dyaXRlX2VtYWlsX2hlYWRlcnMob3B0LCBjb21taXQsICZzdWJqZWN0LCAmZXh0cmFfaGVhZGVycywKLQkJCQkJJm5lZWRfOGJpdF9jdGUpOworCQlsb2dfd3JpdGVfZW1haWxfaGVhZGVycyhvcHQsIGNvbW1pdCwgJmN0eC5zdWJqZWN0LCAmZXh0cmFfaGVhZGVycywKKwkJCQkJJmN0eC5uZWVkXzhiaXRfY3RlKTsKIAl9IGVsc2UgaWYgKG9wdC0+Y29tbWl0X2Zvcm1hdCAhPSBDTUlUX0ZNVF9VU0VSRk9STUFUKSB7CiAJCWZwdXRzKGRpZmZfZ2V0X2NvbG9yX29wdCgmb3B0LT5kaWZmb3B0LCBESUZGX0NPTU1JVCksIHN0ZG91dCk7CiAJCWlmIChvcHQtPmNvbW1pdF9mb3JtYXQgIT0gQ01JVF9GTVRfT05FTElORSkKQEAgLTM5OSw3ICszOTMsOSBAQAogCQkJICovCiAJCQlzaG93X3JlZmxvZ19tZXNzYWdlKG9wdC0+cmVmbG9nX2luZm8sCiAJCQkJICAgIG9wdC0+Y29tbWl0X2Zvcm1hdCA9PSBDTUlUX0ZNVF9PTkVMSU5FLAotCQkJCSAgICBvcHQtPmRhdGVfbW9kZSk7CisJCQkJICAgIG9wdC0+ZGF0ZV9tb2RlX2V4cGxpY2l0ID8KKwkJCQkJb3B0LT5kYXRlX21vZGUgOgorCQkJCQlEQVRFX05PUk1BTCk7CiAJCQlpZiAob3B0LT5jb21taXRfZm9ybWF0ID09IENNSVRfRk1UX09ORUxJTkUpCiAJCQkJcmV0dXJuOwogCQl9CkBAIC00MTEsMTEgKzQwNywxMyBAQAogCS8qCiAJICogQW5kIHRoZW4gdGhlIHByZXR0eS1wcmludGVkIG1lc3NhZ2UgaXRzZWxmCiAJICovCi0JaWYgKG5lZWRfOGJpdF9jdGUgPj0gMCkKLQkJbmVlZF84Yml0X2N0ZSA9IGhhc19ub25fYXNjaWkob3B0LT5hZGRfc2lnbm9mZik7Ci0JcHJldHR5X3ByaW50X2NvbW1pdChvcHQtPmNvbW1pdF9mb3JtYXQsIGNvbW1pdCwgJm1zZ2J1ZiwKLQkJCSAgICBhYmJyZXYsIHN1YmplY3QsIGV4dHJhX2hlYWRlcnMsIG9wdC0+ZGF0ZV9tb2RlLAotCQkJICAgIG5lZWRfOGJpdF9jdGUpOworCWlmIChjdHgubmVlZF84Yml0X2N0ZSA+PSAwKQorCQljdHgubmVlZF84Yml0X2N0ZSA9IGhhc19ub25fYXNjaWkob3B0LT5hZGRfc2lnbm9mZik7CisJY3R4LmRhdGVfbW9kZSA9IG9wdC0+ZGF0ZV9tb2RlOworCWN0eC5hYmJyZXYgPSBvcHQtPmRpZmZvcHQuYWJicmV2OworCWN0eC5hZnRlcl9zdWJqZWN0ID0gZXh0cmFfaGVhZGVyczsKKwljdHgucmVmbG9nX2luZm8gPSBvcHQtPnJlZmxvZ19pbmZvOworCXByZXR0eV9wcmludF9jb21taXQob3B0LT5jb21taXRfZm9ybWF0LCBjb21taXQsICZtc2didWYsICZjdHgpOwogCiAJaWYgKG9wdC0+YWRkX3NpZ25vZmYpCiAJCWFwcGVuZF9zaWdub2ZmKCZtc2didWYsIG9wdC0+YWRkX3NpZ25vZmYpOwpkaWZmIC0tZ2l0IGEvbG9nLXRyZWUuaCBiL2xvZy10cmVlLmgKaW5kZXggMjBiNWNhZi4uM2Y3YjQwMCAxMDA2NDQKLS0tIGEvbG9nLXRyZWUuaAorKysgYi9sb2ctdHJlZS5oCkBAIC0xNyw3ICsxNyw3IEBACiAJCQkgICAgIGNvbnN0IGNoYXIgKipzdWJqZWN0X3AsCiAJCQkgICAgIGNvbnN0IGNoYXIgKipleHRyYV9oZWFkZXJzX3AsCiAJCQkgICAgIGludCAqbmVlZF84Yml0X2N0ZV9wKTsKLXZvaWQgbG9hZF9yZWZfZGVjb3JhdGlvbnModm9pZCk7Cit2b2lkIGxvYWRfcmVmX2RlY29yYXRpb25zKGludCBmbGFncyk7CiAKICNkZWZpbmUgRk9STUFUX1BBVENIX05BTUVfTUFYIDY0CiB2b2lkIGdldF9wYXRjaF9maWxlbmFtZShzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGludCBuciwgY29uc3QgY2hhciAqc3VmZml4LApkaWZmIC0tZ2l0IGEvbWFpbG1hcC5jIGIvbWFpbG1hcC5jCmluZGV4IGJiMWYyZmIuLmI2OGMxZmUgMTAwNjQ0Ci0tLSBhL21haWxtYXAuYworKysgYi9tYWlsbWFwLmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogCQljaGFyICoqZW1haWwsIGludCBhbGxvd19lbXB0eV9lbWFpbCkKIHsKIAljaGFyICpsZWZ0LCAqcmlnaHQsICpuc3RhcnQsICpuZW5kOwotCSpuYW1lID0gKmVtYWlsID0gMDsKKwkqbmFtZSA9ICplbWFpbCA9IE5VTEw7CiAKIAlpZiAoKGxlZnQgPSBzdHJjaHIoYnVmZmVyLCAnPCcpKSA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKQEAgLTEzNiw3ICsxMzYsNyBAQAogCWlmIChmID09IE5VTEwpCiAJCXJldHVybiAxOwogCXdoaWxlIChmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBmKSAhPSBOVUxMKSB7Ci0JCWNoYXIgKm5hbWUxID0gMCwgKmVtYWlsMSA9IDAsICpuYW1lMiA9IDAsICplbWFpbDIgPSAwOworCQljaGFyICpuYW1lMSA9IE5VTEwsICplbWFpbDEgPSBOVUxMLCAqbmFtZTIgPSBOVUxMLCAqZW1haWwyID0gTlVMTDsKIAkJaWYgKGJ1ZmZlclswXSA9PSAnIycpIHsKIAkJCXN0YXRpYyBjb25zdCBjaGFyIGFiYnJldltdID0gIiMgcmVwby1hYmJyZXY6IjsKIAkJCWludCBhYmJsZW4gPSBzaXplb2YoYWJicmV2KSAtIDE7CkBAIC0yMDAsNyArMjAwLDcgQEAKIAlpZiAoIXApIHsKIAkJLyogZW1haWwgcGFzc2VkIGluIG1pZ2h0IG5vdCBiZSB3cmFwcGVkIGluIDw+LCBidXQgZW5kIHdpdGggYSBcMCAqLwogCQlwID0gbWVtY2hyKGVtYWlsLCAnXDAnLCBtYXhsZW5fZW1haWwpOwotCQlpZiAocCA9PSAwKQorCQlpZiAoIXApCiAJCQlyZXR1cm4gMDsKIAl9CiAJaWYgKHAgLSBlbWFpbCArIDEgPCBzaXplb2YoYnVmKSkKQEAgLTI0Myw4ICsyNDMsMyBAQAogCWRlYnVnX21tKCJtYXBfdXNlcjogIC0tXG4iKTsKIAlyZXR1cm4gMDsKIH0KLQotaW50IG1hcF9lbWFpbChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1hcCwgY29uc3QgY2hhciAqZW1haWwsIGNoYXIgKm5hbWUsIGludCBtYXhsZW4pCi17Ci0JcmV0dXJuIG1hcF91c2VyKG1hcCwgKGNoYXIgKillbWFpbCwgMCwgbmFtZSwgbWF4bGVuKTsKLX0KZGlmZiAtLWdpdCBhL21haWxtYXAuaCBiL21haWxtYXAuaAppbmRleCA0YjJjYTNhLi5kNWMzNjY0IDEwMDY0NAotLS0gYS9tYWlsbWFwLmgKKysrIGIvbWFpbG1hcC5oCkBAIC00LDcgKzQsNiBAQAogaW50IHJlYWRfbWFpbG1hcChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1hcCwgY2hhciAqKnJlcG9fYWJicmV2KTsKIHZvaWQgY2xlYXJfbWFpbG1hcChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1hcCk7CiAKLWludCBtYXBfZW1haWwoc3RydWN0IHN0cmluZ19saXN0ICptYWlsbWFwLCBjb25zdCBjaGFyICplbWFpbCwgY2hhciAqbmFtZSwgaW50IG1heGxlbik7CiBpbnQgbWFwX3VzZXIoc3RydWN0IHN0cmluZ19saXN0ICptYWlsbWFwLAogCSAgICAgY2hhciAqZW1haWwsIGludCBtYXhsZW5fZW1haWwsIGNoYXIgKm5hbWUsIGludCBtYXhsZW5fbmFtZSk7CiAKZGlmZiAtLWdpdCBhL21hdGNoLXRyZWVzLmMgYi9tYXRjaC10cmVlcy5jCmluZGV4IDBmZDZkZjcuLjI2ZjdlZDEgMTAwNjQ0Ci0tLSBhL21hdGNoLXRyZWVzLmMKKysrIGIvbWF0Y2gtdHJlZXMuYwpAQCAtMTg1LDcgKzE4NSw3IEBACiAgKiB0cmVlIG9iamVjdCBieSByZXBsYWNpbmcgaXQgd2l0aCBhbm90aGVyIHRyZWUgImhhc2gyIi4KICAqLwogc3RhdGljIGludCBzcGxpY2VfdHJlZShjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoMSwKLQkJICAgICAgIGNoYXIgKnByZWZpeCwKKwkJICAgICAgIGNvbnN0IGNoYXIgKnByZWZpeCwKIAkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gyLAogCQkgICAgICAgdW5zaWduZWQgY2hhciAqcmVzdWx0KQogewpAQCAtMjY0LDYgKzI2NCwxMyBAQAogCWNoYXIgKmRlbF9wcmVmaXg7CiAJaW50IGFkZF9zY29yZSwgZGVsX3Njb3JlOwogCisJLyoKKwkgKiBORUVEU1dPUks6IHRoaXMgbGltaXRzIHRoZSByZWN1cnNpb24gZGVwdGggdG8gaGFyZGNvZGVkCisJICogdmFsdWUgJzInIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBvdmVyaGVhZC4KKwkgKi8KKwlpZiAoIWRlcHRoX2xpbWl0KQorCQlkZXB0aF9saW1pdCA9IDI7CisKIAlhZGRfc2NvcmUgPSBkZWxfc2NvcmUgPSBzY29yZV90cmVlcyhoYXNoMSwgaGFzaDIpOwogCWFkZF9wcmVmaXggPSB4Y2FsbG9jKDEsIDEpOwogCWRlbF9wcmVmaXggPSB4Y2FsbG9jKDEsIDEpOwpAQCAtMzAxLDMgKzMwOCw2MyBAQAogCiAJc3BsaWNlX3RyZWUoaGFzaDEsIGFkZF9wcmVmaXgsIGhhc2gyLCBzaGlmdGVkKTsKIH0KKworLyoKKyAqIFRoZSB1c2VyIHNheXMgdGhlIHRyZWVzIHdpbGwgYmUgc2hpZnRlZCBieSB0aGlzIG11Y2guCisgKiBVbmZvcnR1bmF0ZWx5IHdlIGNhbm5vdCBmdW5kYW1lbnRhbGx5IHRlbGwgd2hpY2ggb25lIHRvCisgKiBiZSBwcmVmaXhlZCwgYXMgcmVjdXJzaXZlIG1lcmdlIGNhbiB3b3JrIGluIGVpdGhlciBkaXJlY3Rpb24uCisgKi8KK3ZvaWQgc2hpZnRfdHJlZV9ieShjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoMSwKKwkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaDIsCisJCSAgIHVuc2lnbmVkIGNoYXIgKnNoaWZ0ZWQsCisJCSAgIGNvbnN0IGNoYXIgKnNoaWZ0X3ByZWZpeCkKK3sKKwl1bnNpZ25lZCBjaGFyIHN1YjFbMjBdLCBzdWIyWzIwXTsKKwl1bnNpZ25lZCBtb2RlMSwgbW9kZTI7CisJdW5zaWduZWQgY2FuZGlkYXRlID0gMDsKKworCS8qIENhbiBoYXNoMiBiZSBhIHRyZWUgYXQgc2hpZnRfcHJlZml4IGluIHRyZWUgaGFzaDE/ICovCisJaWYgKCFnZXRfdHJlZV9lbnRyeShoYXNoMSwgc2hpZnRfcHJlZml4LCBzdWIxLCAmbW9kZTEpICYmCisJICAgIFNfSVNESVIobW9kZTEpKQorCQljYW5kaWRhdGUgfD0gMTsKKworCS8qIENhbiBoYXNoMSBiZSBhIHRyZWUgYXQgc2hpZnRfcHJlZml4IGluIHRyZWUgaGFzaDI/ICovCisJaWYgKCFnZXRfdHJlZV9lbnRyeShoYXNoMiwgc2hpZnRfcHJlZml4LCBzdWIyLCAmbW9kZTIpICYmCisJICAgIFNfSVNESVIobW9kZTIpKQorCQljYW5kaWRhdGUgfD0gMjsKKworCWlmIChjYW5kaWRhdGUgPT0gMykgeworCQkvKiBCb3RoIGFyZSBwbGF1c2libGUgLS0gd2UgbmVlZCB0byBldmFsdWF0ZSB0aGUgc2NvcmUgKi8KKwkJaW50IGJlc3Rfc2NvcmUgPSBzY29yZV90cmVlcyhoYXNoMSwgaGFzaDIpOworCQlpbnQgc2NvcmU7CisKKwkJY2FuZGlkYXRlID0gMDsKKwkJc2NvcmUgPSBzY29yZV90cmVlcyhzdWIxLCBoYXNoMik7CisJCWlmIChzY29yZSA+IGJlc3Rfc2NvcmUpIHsKKwkJCWNhbmRpZGF0ZSA9IDE7CisJCQliZXN0X3Njb3JlID0gc2NvcmU7CisJCX0KKwkJc2NvcmUgPSBzY29yZV90cmVlcyhzdWIyLCBoYXNoMSk7CisJCWlmIChzY29yZSA+IGJlc3Rfc2NvcmUpCisJCQljYW5kaWRhdGUgPSAyOworCX0KKworCWlmICghY2FuZGlkYXRlKSB7CisJCS8qIE5laXRoZXIgaXMgcGxhdXNpYmxlIC0tIGRvIG5vdCBzaGlmdCAqLworCQloYXNoY3B5KHNoaWZ0ZWQsIGhhc2gyKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChjYW5kaWRhdGUgPT0gMSkKKwkJLyoKKwkJICogc2hpZnQgdHJlZTIgZG93biBieSBhZGRpbmcgc2hpZnRfcHJlZml4IGFib3ZlIGl0CisJCSAqIHRvIG1hdGNoIHRyZWUxLgorCQkgKi8KKwkJc3BsaWNlX3RyZWUoaGFzaDEsIHNoaWZ0X3ByZWZpeCwgaGFzaDIsIHNoaWZ0ZWQpOworCWVsc2UKKwkJLyoKKwkJICogc2hpZnQgdHJlZTIgdXAgYnkgcmVtb3Zpbmcgc2hpZnRfcHJlZml4IGZyb20gaXQKKwkJICogdG8gbWF0Y2ggdHJlZTEuCisJCSAqLworCQloYXNoY3B5KHNoaWZ0ZWQsIHN1YjIpOworfQpkaWZmIC0tZ2l0IGEvbWVyZ2UtZmlsZS5jIGIvbWVyZ2UtZmlsZS5jCmluZGV4IDMxMjBhOTUuLmZkMzRkNzYgMTAwNjQ0Ci0tLSBhL21lcmdlLWZpbGUuYworKysgYi9tZXJnZS1maWxlLmMKQEAgLTEsNiArMSw3IEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlICJydW4tY29tbWFuZC5oIgogI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgorI2luY2x1ZGUgImxsLW1lcmdlLmgiCiAjaW5jbHVkZSAiYmxvYi5oIgogCiBzdGF0aWMgaW50IGZpbGxfbW1maWxlX2Jsb2IobW1maWxlX3QgKmYsIHN0cnVjdCBibG9iICpvYmopCkBAIC0yNCwxNiArMjUsMTMgQEAKIAlmcmVlKGYtPnB0cik7CiB9CiAKLXN0YXRpYyB2b2lkICp0aHJlZV93YXlfZmlsZW1lcmdlKG1tZmlsZV90ICpiYXNlLCBtbWZpbGVfdCAqb3VyLCBtbWZpbGVfdCAqdGhlaXIsIHVuc2lnbmVkIGxvbmcgKnNpemUpCitzdGF0aWMgdm9pZCAqdGhyZWVfd2F5X2ZpbGVtZXJnZShjb25zdCBjaGFyICpwYXRoLCBtbWZpbGVfdCAqYmFzZSwgbW1maWxlX3QgKm91ciwgbW1maWxlX3QgKnRoZWlyLCB1bnNpZ25lZCBsb25nICpzaXplKQogewotCW1tYnVmZmVyX3QgcmVzOwotCXhwcGFyYW1fdCB4cHA7CiAJaW50IG1lcmdlX3N0YXR1czsKKwltbWJ1ZmZlcl90IHJlczsKIAotCW1lbXNldCgmeHBwLCAwLCBzaXplb2YoeHBwKSk7Ci0JbWVyZ2Vfc3RhdHVzID0geGRsX21lcmdlKGJhc2UsIG91ciwgIi5vdXIiLCB0aGVpciwgIi50aGVpciIsCi0JCSZ4cHAsIFhETF9NRVJHRV9aRUFMT1VTLCAmcmVzKTsKLQorCW1lcmdlX3N0YXR1cyA9IGxsX21lcmdlKCZyZXMsIHBhdGgsIGJhc2UsCisJCQkJb3VyLCAiLm91ciIsIHRoZWlyLCAiLnRoZWlyIiwgMCk7CiAJaWYgKG1lcmdlX3N0YXR1cyA8IDApCiAJCXJldHVybiBOVUxMOwogCkBAIC03NSw3ICs3Myw3IEBACiAJcmV0dXJuIHhkaV9kaWZmKGYxLCBmMiwgJnhwcCwgJnhlY2ZnLCAmZWNiKTsKIH0KIAotdm9pZCAqbWVyZ2VfZmlsZShzdHJ1Y3QgYmxvYiAqYmFzZSwgc3RydWN0IGJsb2IgKm91ciwgc3RydWN0IGJsb2IgKnRoZWlyLCB1bnNpZ25lZCBsb25nICpzaXplKQordm9pZCAqbWVyZ2VfZmlsZShjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgYmxvYiAqYmFzZSwgc3RydWN0IGJsb2IgKm91ciwgc3RydWN0IGJsb2IgKnRoZWlyLCB1bnNpZ25lZCBsb25nICpzaXplKQogewogCXZvaWQgKnJlcyA9IE5VTEw7CiAJbW1maWxlX3QgZjEsIGYyLCBjb21tb247CkBAIC0xMDgsNyArMTA2LDcgQEAKIAkJaWYgKGdlbmVyYXRlX2NvbW1vbl9maWxlKCZjb21tb24sICZmMSwgJmYyKSA8IDApCiAJCQlnb3RvIG91dF9mcmVlX2YyX2YxOwogCX0KLQlyZXMgPSB0aHJlZV93YXlfZmlsZW1lcmdlKCZjb21tb24sICZmMSwgJmYyLCBzaXplKTsKKwlyZXMgPSB0aHJlZV93YXlfZmlsZW1lcmdlKHBhdGgsICZjb21tb24sICZmMSwgJmYyLCBzaXplKTsKIAlmcmVlX21tZmlsZSgmY29tbW9uKTsKIG91dF9mcmVlX2YyX2YxOgogCWZyZWVfbW1maWxlKCZmMik7CmRpZmYgLS1naXQgYS9tZXJnZS1yZWN1cnNpdmUuYyBiL21lcmdlLXJlY3Vyc2l2ZS5jCmluZGV4IGY1ZGY5YjkuLmNiNTNiMDEgMTAwNjQ0Ci0tLSBhL21lcmdlLXJlY3Vyc2l2ZS5jCisrKyBiL21lcmdlLXJlY3Vyc2l2ZS5jCkBAIC0zLDYgKzMsNyBAQAogICogRnJlZHJpayBLdWl2aW5lbi4KICAqIFRoZSB0aGlldmVzIHdlcmUgQWxleCBSaWVzZW4gYW5kIEpvaGFubmVzIFNjaGluZGVsaW4sIGluIEp1bmUvSnVseSAyMDA2CiAgKi8KKyNpbmNsdWRlICJhZHZpY2UuaCIKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKICNpbmNsdWRlICJjb21taXQuaCIKQEAgLTIwLDE1ICsyMSwxNyBAQAogI2luY2x1ZGUgIm1lcmdlLXJlY3Vyc2l2ZS5oIgogI2luY2x1ZGUgImRpci5oIgogCi1zdGF0aWMgc3RydWN0IHRyZWUgKnNoaWZ0X3RyZWVfb2JqZWN0KHN0cnVjdCB0cmVlICpvbmUsIHN0cnVjdCB0cmVlICp0d28pCitzdGF0aWMgc3RydWN0IHRyZWUgKnNoaWZ0X3RyZWVfb2JqZWN0KHN0cnVjdCB0cmVlICpvbmUsIHN0cnVjdCB0cmVlICp0d28sCisJCQkJICAgICAgY29uc3QgY2hhciAqc3VidHJlZV9zaGlmdCkKIHsKIAl1bnNpZ25lZCBjaGFyIHNoaWZ0ZWRbMjBdOwogCi0JLyoKLQkgKiBORUVEU1dPUks6IHRoaXMgbGltaXRzIHRoZSByZWN1cnNpb24gZGVwdGggdG8gaGFyZGNvZGVkCi0JICogdmFsdWUgJzInIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBvdmVyaGVhZC4KLQkgKi8KLQlzaGlmdF90cmVlKG9uZS0+b2JqZWN0LnNoYTEsIHR3by0+b2JqZWN0LnNoYTEsIHNoaWZ0ZWQsIDIpOworCWlmICghKnN1YnRyZWVfc2hpZnQpIHsKKwkJc2hpZnRfdHJlZShvbmUtPm9iamVjdC5zaGExLCB0d28tPm9iamVjdC5zaGExLCBzaGlmdGVkLCAwKTsKKwl9IGVsc2UgeworCQlzaGlmdF90cmVlX2J5KG9uZS0+b2JqZWN0LnNoYTEsIHR3by0+b2JqZWN0LnNoYTEsIHNoaWZ0ZWQsCisJCQkgICAgICBzdWJ0cmVlX3NoaWZ0KTsKKwl9CiAJaWYgKCFoYXNoY21wKHR3by0+b2JqZWN0LnNoYTEsIHNoaWZ0ZWQpKQogCQlyZXR1cm4gdHdvOwogCXJldHVybiBsb29rdXBfdHJlZShzaGlmdGVkKTsKQEAgLTM4LDcgKzQxLDcgQEAKICAqIEEgdmlydHVhbCBjb21taXQgaGFzIChjb25zdCBjaGFyICopY29tbWl0LT51dGlsIHNldCB0byB0aGUgbmFtZS4KICAqLwogCi1zdHJ1Y3QgY29tbWl0ICptYWtlX3ZpcnR1YWxfY29tbWl0KHN0cnVjdCB0cmVlICp0cmVlLCBjb25zdCBjaGFyICpjb21tZW50KQorc3RhdGljIHN0cnVjdCBjb21taXQgKm1ha2VfdmlydHVhbF9jb21taXQoc3RydWN0IHRyZWUgKnRyZWUsIGNvbnN0IGNoYXIgKmNvbW1lbnQpCiB7CiAJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGNvbW1pdCkpOwogCWNvbW1pdC0+dHJlZSA9IHRyZWU7CkBAIC04Niw2ICs4OSw3IEBACiAJfQogfQogCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKQogc3RhdGljIHZvaWQgb3V0cHV0KHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLCBpbnQgdiwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJaW50IGxlbjsKQEAgLTE4MSw2ICsxODUsNyBAQAogCW9wdHMuZm4gPSB0aHJlZXdheV9tZXJnZTsKIAlvcHRzLnNyY19pbmRleCA9ICZ0aGVfaW5kZXg7CiAJb3B0cy5kc3RfaW5kZXggPSAmdGhlX2luZGV4OworCW9wdHMubXNncyA9IGdldF9wb3JjZWxhaW5fZXJyb3JfbXNncygpOwogCiAJaW5pdF90cmVlX2Rlc2NfZnJvbV90cmVlKHQrMCwgY29tbW9uKTsKIAlpbml0X3RyZWVfZGVzY19mcm9tX3RyZWUodCsxLCBoZWFkKTsKQEAgLTE5NywxMyArMjAyLDE0IEBACiAKIAlpZiAodW5tZXJnZWRfY2FjaGUoKSkgewogCQlpbnQgaTsKLQkJb3V0cHV0KG8sIDAsICJUaGVyZSBhcmUgdW5tZXJnZWQgaW5kZXggZW50cmllczoiKTsKKwkJZnByaW50ZihzdGRlcnIsICJCVUc6IFRoZXJlIGFyZSB1bm1lcmdlZCBpbmRleCBlbnRyaWVzOlxuIik7CiAJCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7IGkrKykgewogCQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKIAkJCWlmIChjZV9zdGFnZShjZSkpCi0JCQkJb3V0cHV0KG8sIDAsICIlZCAlLipzIiwgY2Vfc3RhZ2UoY2UpLCBjZV9uYW1lbGVuKGNlKSwgY2UtPm5hbWUpOworCQkJCWZwcmludGYoc3RkZXJyLCAiQlVHOiAlZCAlLipzIiwgY2Vfc3RhZ2UoY2UpLAorCQkJCQkoaW50KWNlX25hbWVsZW4oY2UpLCBjZS0+bmFtZSk7CiAJCX0KLQkJcmV0dXJuIE5VTEw7CisJCWRpZSgiQnVnIGluIG1lcmdlLXJlY3Vyc2l2ZS5jIik7CiAJfQogCiAJaWYgKCFhY3RpdmVfY2FjaGVfdHJlZSkKQEAgLTQzOCw3ICs0NDQsNyBAQAogCQkJLyogSWdub3JlIGVwaXBlICovCiAJCQlpZiAoZXJybm8gPT0gRVBJUEUpCiAJCQkJYnJlYWs7Ci0JCQlkaWUoIm1lcmdlLXJlY3Vyc2l2ZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJtZXJnZS1yZWN1cnNpdmUiKTsKIAkJfSBlbHNlIGlmICghcmV0KSB7CiAJCQlkaWUoIm1lcmdlLXJlY3Vyc2l2ZTogZGlzayBmdWxsPyIpOwogCQl9CkBAIC01NTQsNyArNTYwLDcgQEAKIAkJCQltb2RlID0gMDY2NjsKIAkJCWZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fVFJVTkMgfCBPX0NSRUFULCBtb2RlKTsKIAkJCWlmIChmZCA8IDApCi0JCQkJZGllKCJmYWlsZWQgdG8gb3BlbiAlczogJXMiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOworCQkJCWRpZV9lcnJubygiZmFpbGVkIHRvIG9wZW4gJyVzJyIsIHBhdGgpOwogCQkJZmx1c2hfYnVmZmVyKGZkLCBidWYsIHNpemUpOwogCQkJY2xvc2UoZmQpOwogCQl9IGVsc2UgaWYgKFNfSVNMTksobW9kZSkpIHsKQEAgLTU2Miw3ICs1NjgsNyBAQAogCQkJc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChwYXRoKTsKIAkJCXVubGluayhwYXRoKTsKIAkJCWlmIChzeW1saW5rKGxuaywgcGF0aCkpCi0JCQkJZGllKCJmYWlsZWQgdG8gc3ltbGluayAlczogJXMiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOworCQkJCWRpZV9lcnJubygiZmFpbGVkIHRvIHN5bWxpbmsgJyVzJyIsIHBhdGgpOwogCQkJZnJlZShsbmspOwogCQl9IGVsc2UKIAkJCWRpZSgiZG8gbm90IGtub3cgd2hhdCB0byBkbyB3aXRoICUwNm8gJXMgJyVzJyIsCkBAIC02MjEsOSArNjI3LDMxIEBACiAJbW1maWxlX3Qgb3JpZywgc3JjMSwgc3JjMjsKIAljaGFyICpuYW1lMSwgKm5hbWUyOwogCWludCBtZXJnZV9zdGF0dXM7CisJaW50IGZhdm9yOwogCi0JbmFtZTEgPSB4c3RyZHVwKG1rcGF0aCgiJXM6JXMiLCBicmFuY2gxLCBhLT5wYXRoKSk7Ci0JbmFtZTIgPSB4c3RyZHVwKG1rcGF0aCgiJXM6JXMiLCBicmFuY2gyLCBiLT5wYXRoKSk7CisJaWYgKG8tPmNhbGxfZGVwdGgpCisJCWZhdm9yID0gMDsKKwllbHNlIHsKKwkJc3dpdGNoIChvLT5yZWN1cnNpdmVfdmFyaWFudCkgeworCQljYXNlIE1FUkdFX1JFQ1VSU0lWRV9PVVJTOgorCQkJZmF2b3IgPSBYRExfTUVSR0VfRkFWT1JfT1VSUzsKKwkJCWJyZWFrOworCQljYXNlIE1FUkdFX1JFQ1VSU0lWRV9USEVJUlM6CisJCQlmYXZvciA9IFhETF9NRVJHRV9GQVZPUl9USEVJUlM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWZhdm9yID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHN0cmNtcChhLT5wYXRoLCBiLT5wYXRoKSkgeworCQluYW1lMSA9IHhzdHJkdXAobWtwYXRoKCIlczolcyIsIGJyYW5jaDEsIGEtPnBhdGgpKTsKKwkJbmFtZTIgPSB4c3RyZHVwKG1rcGF0aCgiJXM6JXMiLCBicmFuY2gyLCBiLT5wYXRoKSk7CisJfSBlbHNlIHsKKwkJbmFtZTEgPSB4c3RyZHVwKG1rcGF0aCgiJXMiLCBicmFuY2gxKSk7CisJCW5hbWUyID0geHN0cmR1cChta3BhdGgoIiVzIiwgYnJhbmNoMikpOworCX0KIAogCWZpbGxfbW0ob25lLT5zaGExLCAmb3JpZyk7CiAJZmlsbF9tbShhLT5zaGExLCAmc3JjMSk7CkBAIC02MzEsNyArNjU5LDcgQEAKIAogCW1lcmdlX3N0YXR1cyA9IGxsX21lcmdlKHJlc3VsdF9idWYsIGEtPnBhdGgsICZvcmlnLAogCQkJCSZzcmMxLCBuYW1lMSwgJnNyYzIsIG5hbWUyLAotCQkJCW8tPmNhbGxfZGVwdGgpOworCQkJCSghIW8tPmNhbGxfZGVwdGgpIHwgKGZhdm9yIDw8IDEpKTsKIAogCWZyZWUobmFtZTEpOwogCWZyZWUobmFtZTIpOwpAQCAtOTQ3LDkgKzk3NSwzMSBAQAogCQkJCSAgICAgICAiJXMgYWRkZWQgaW4gJXMiLAogCQkJCSAgICAgICByZW4xX3NyYywgcmVuMV9kc3QsIGJyYW5jaDEsCiAJCQkJICAgICAgIHJlbjFfZHN0LCBicmFuY2gyKTsKLQkJCQluZXdfcGF0aCA9IHVuaXF1ZV9wYXRoKG8sIHJlbjFfZHN0LCBicmFuY2gyKTsKLQkJCQlvdXRwdXQobywgMSwgIkFkZGluZyBhcyAlcyBpbnN0ZWFkIiwgbmV3X3BhdGgpOwotCQkJCXVwZGF0ZV9maWxlKG8sIDAsIGRzdF9vdGhlci5zaGExLCBkc3Rfb3RoZXIubW9kZSwgbmV3X3BhdGgpOworCQkJCWlmIChvLT5jYWxsX2RlcHRoKSB7CisJCQkJCXN0cnVjdCBtZXJnZV9maWxlX2luZm8gbWZpOworCQkJCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyBvbmUsIGEsIGI7CisKKwkJCQkJb25lLnBhdGggPSBhLnBhdGggPSBiLnBhdGggPQorCQkJCQkJKGNoYXIgKilyZW4xX2RzdDsKKwkJCQkJaGFzaGNweShvbmUuc2hhMSwgbnVsbF9zaGExKTsKKwkJCQkJb25lLm1vZGUgPSAwOworCQkJCQloYXNoY3B5KGEuc2hhMSwgcmVuMS0+cGFpci0+dHdvLT5zaGExKTsKKwkJCQkJYS5tb2RlID0gcmVuMS0+cGFpci0+dHdvLT5tb2RlOworCQkJCQloYXNoY3B5KGIuc2hhMSwgZHN0X290aGVyLnNoYTEpOworCQkJCQliLm1vZGUgPSBkc3Rfb3RoZXIubW9kZTsKKwkJCQkJbWZpID0gbWVyZ2VfZmlsZShvLCAmb25lLCAmYSwgJmIsCisJCQkJCQkJIGJyYW5jaDEsCisJCQkJCQkJIGJyYW5jaDIpOworCQkJCQlvdXRwdXQobywgMSwgIkFkZGluZyBtZXJnZWQgJXMiLCByZW4xX2RzdCk7CisJCQkJCXVwZGF0ZV9maWxlKG8sIDAsCisJCQkJCQkgICAgbWZpLnNoYSwKKwkJCQkJCSAgICBtZmkubW9kZSwKKwkJCQkJCSAgICByZW4xX2RzdCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJbmV3X3BhdGggPSB1bmlxdWVfcGF0aChvLCByZW4xX2RzdCwgYnJhbmNoMik7CisJCQkJCW91dHB1dChvLCAxLCAiQWRkaW5nIGFzICVzIGluc3RlYWQiLCBuZXdfcGF0aCk7CisJCQkJCXVwZGF0ZV9maWxlKG8sIDAsIGRzdF9vdGhlci5zaGExLCBkc3Rfb3RoZXIubW9kZSwgbmV3X3BhdGgpOworCQkJCX0KIAkJCX0gZWxzZSBpZiAoKGl0ZW0gPSBzdHJpbmdfbGlzdF9sb29rdXAocmVuMV9kc3QsIHJlbmFtZXMyRHN0KSkpIHsKIAkJCQlyZW4yID0gaXRlbS0+dXRpbDsKIAkJCQljbGVhbl9tZXJnZSA9IDA7CkBAIC0xMTQwLDYgKzExOTAsMjggQEAKIAlyZXR1cm4gY2xlYW5fbWVyZ2U7CiB9CiAKK3N0cnVjdCB1bnBhY2tfdHJlZXNfZXJyb3JfbXNncyBnZXRfcG9yY2VsYWluX2Vycm9yX21zZ3Modm9pZCkKK3sKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX2Vycm9yX21zZ3MgbXNncyA9IHsKKwkJLyogd291bGRfb3ZlcndyaXRlICovCisJCSJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gJyVzJyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZS4gIEFib3J0aW5nLiIsCisJCS8qIG5vdF91cHRvZGF0ZV9maWxlICovCisJCSJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gJyVzJyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZS4gIEFib3J0aW5nLiIsCisJCS8qIG5vdF91cHRvZGF0ZV9kaXIgKi8KKwkJIlVwZGF0aW5nICclcycgd291bGQgbG9zZSB1bnRyYWNrZWQgZmlsZXMgaW4gaXQuICBBYm9ydGluZy4iLAorCQkvKiB3b3VsZF9sb3NlX3VudHJhY2tlZCAqLworCQkiVW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlICclcycgd291bGQgYmUgJXMgYnkgbWVyZ2UuICBBYm9ydGluZyIsCisJCS8qIGJpbmRfb3ZlcmxhcCAtLSB3aWxsIG5vdCBoYXBwZW4gaGVyZSAqLworCQlOVUxMLAorCX07CisJaWYgKGFkdmljZV9jb21taXRfYmVmb3JlX21lcmdlKSB7CisJCW1zZ3Mud291bGRfb3ZlcndyaXRlID0gbXNncy5ub3RfdXB0b2RhdGVfZmlsZSA9CisJCQkiWW91ciBsb2NhbCBjaGFuZ2VzIHRvICclcycgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2UuICBBYm9ydGluZy5cbiIKKwkJCSJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IGNhbiBtZXJnZS4iOworCX0KKwlyZXR1cm4gbXNnczsKK30KKwogaW50IG1lcmdlX3RyZWVzKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAogCQlzdHJ1Y3QgdHJlZSAqaGVhZCwKIAkJc3RydWN0IHRyZWUgKm1lcmdlLApAQCAtMTE0OCw5ICsxMjIwLDkgQEAKIHsKIAlpbnQgY29kZSwgY2xlYW47CiAKLQlpZiAoby0+c3VidHJlZV9tZXJnZSkgewotCQltZXJnZSA9IHNoaWZ0X3RyZWVfb2JqZWN0KGhlYWQsIG1lcmdlKTsKLQkJY29tbW9uID0gc2hpZnRfdHJlZV9vYmplY3QoaGVhZCwgY29tbW9uKTsKKwlpZiAoby0+c3VidHJlZV9zaGlmdCkgeworCQltZXJnZSA9IHNoaWZ0X3RyZWVfb2JqZWN0KGhlYWQsIG1lcmdlLCBvLT5zdWJ0cmVlX3NoaWZ0KTsKKwkJY29tbW9uID0gc2hpZnRfdHJlZV9vYmplY3QoaGVhZCwgY29tbW9uLCBvLT5zdWJ0cmVlX3NoaWZ0KTsKIAl9CiAKIAlpZiAoc2hhX2VxKGNvbW1vbi0+b2JqZWN0LnNoYTEsIG1lcmdlLT5vYmplY3Quc2hhMSkpIHsKQEAgLTExNjEsMTAgKzEyMzMsMTQgQEAKIAogCWNvZGUgPSBnaXRfbWVyZ2VfdHJlZXMoby0+Y2FsbF9kZXB0aCwgY29tbW9uLCBoZWFkLCBtZXJnZSk7CiAKLQlpZiAoY29kZSAhPSAwKQotCQlkaWUoIm1lcmdpbmcgb2YgdHJlZXMgJXMgYW5kICVzIGZhaWxlZCIsCi0JCSAgICBzaGExX3RvX2hleChoZWFkLT5vYmplY3Quc2hhMSksCi0JCSAgICBzaGExX3RvX2hleChtZXJnZS0+b2JqZWN0LnNoYTEpKTsKKwlpZiAoY29kZSAhPSAwKSB7CisJCWlmIChzaG93KG8sIDQpIHx8IG8tPmNhbGxfZGVwdGgpCisJCQlkaWUoIm1lcmdpbmcgb2YgdHJlZXMgJXMgYW5kICVzIGZhaWxlZCIsCisJCQkgICAgc2hhMV90b19oZXgoaGVhZC0+b2JqZWN0LnNoYTEpLAorCQkJICAgIHNoYTFfdG9faGV4KG1lcmdlLT5vYmplY3Quc2hhMSkpOworCQllbHNlCisJCQlleGl0KDEyOCk7CisJfQogCiAJaWYgKHVubWVyZ2VkX2NhY2hlKCkpIHsKIAkJc3RydWN0IHN0cmluZ19saXN0ICplbnRyaWVzLCAqcmVfaGVhZCwgKnJlX21lcmdlOwpkaWZmIC0tZ2l0IGEvbWVyZ2UtcmVjdXJzaXZlLmggYi9tZXJnZS1yZWN1cnNpdmUuaAppbmRleCBmZDEzOGNhLi5iZTg0MTBhIDEwMDY0NAotLS0gYS9tZXJnZS1yZWN1cnNpdmUuaAorKysgYi9tZXJnZS1yZWN1cnNpdmUuaApAQCAtNiw3ICs2LDEyIEBACiBzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyB7CiAJY29uc3QgY2hhciAqYnJhbmNoMTsKIAljb25zdCBjaGFyICpicmFuY2gyOwotCXVuc2lnbmVkIHN1YnRyZWVfbWVyZ2UgOiAxOworCWVudW0geworCQlNRVJHRV9SRUNVUlNJVkVfTk9STUFMID0gMCwKKwkJTUVSR0VfUkVDVVJTSVZFX09VUlMsCisJCU1FUkdFX1JFQ1VSU0lWRV9USEVJUlMsCisJfSByZWN1cnNpdmVfdmFyaWFudDsKKwljb25zdCBjaGFyICpzdWJ0cmVlX3NoaWZ0OwogCXVuc2lnbmVkIGJ1ZmZlcl9vdXRwdXQgOiAxOwogCWludCB2ZXJib3NpdHk7CiAJaW50IGRpZmZfcmVuYW1lX2xpbWl0OwpAQCAtMTcsNiArMjIsOSBAQAogCXN0cnVjdCBzdHJpbmdfbGlzdCBjdXJyZW50X2RpcmVjdG9yeV9zZXQ7CiB9OwogCisvKiBSZXR1cm4gYSBsaXN0IG9mIHVzZXItZnJpZW5kbHkgZXJyb3IgbWVzc2FnZXMgdG8gYmUgdXNlZCBieSBtZXJnZSAqLworc3RydWN0IHVucGFja190cmVlc19lcnJvcl9tc2dzIGdldF9wb3JjZWxhaW5fZXJyb3JfbXNncyh2b2lkKTsKKwogLyogbWVyZ2VfdHJlZXMoKSBidXQgd2l0aCByZWN1cnNpdmUgYW5jZXN0b3IgY29uc29saWRhdGlvbiAqLwogaW50IG1lcmdlX3JlY3Vyc2l2ZShzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywKIAkJICAgIHN0cnVjdCBjb21taXQgKmgxLApkaWZmIC0tZ2l0IGEvbWt0cmVlLmMgYi9ta3RyZWUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM3YTA5NS4uMDAwMDAwMAotLS0gYS9ta3RyZWUuYworKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi0vKgotICogR0lUIC0gdGhlIHN0dXBpZCBjb250ZW50IHRyYWNrZXIKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIEp1bmlvIEMgSGFtYW5vLCAyMDA2Ci0gKi8KLSNpbmNsdWRlICJjYWNoZS5oIgotI2luY2x1ZGUgInF1b3RlLmgiCi0jaW5jbHVkZSAidHJlZS5oIgotI2luY2x1ZGUgImV4ZWNfY21kLmgiCi0KLXN0YXRpYyBzdHJ1Y3QgdHJlZWVudCB7Ci0JdW5zaWduZWQgbW9kZTsKLQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwotCWludCBsZW47Ci0JY2hhciBuYW1lW0ZMRVhfQVJSQVldOwotfSAqKmVudHJpZXM7Ci1zdGF0aWMgaW50IGFsbG9jLCB1c2VkOwotCi1zdGF0aWMgdm9pZCBhcHBlbmRfdG9fdHJlZSh1bnNpZ25lZCBtb2RlLCB1bnNpZ25lZCBjaGFyICpzaGExLCBjaGFyICpwYXRoKQotewotCXN0cnVjdCB0cmVlZW50ICplbnQ7Ci0JaW50IGxlbiA9IHN0cmxlbihwYXRoKTsKLQlpZiAoc3RyY2hyKHBhdGgsICcvJykpCi0JCWRpZSgicGF0aCAlcyBjb250YWlucyBzbGFzaCIsIHBhdGgpOwotCi0JaWYgKGFsbG9jIDw9IHVzZWQpIHsKLQkJYWxsb2MgPSBhbGxvY19ucih1c2VkKTsKLQkJZW50cmllcyA9IHhyZWFsbG9jKGVudHJpZXMsIHNpemVvZigqZW50cmllcykgKiBhbGxvYyk7Ci0JfQotCWVudCA9IGVudHJpZXNbdXNlZCsrXSA9IHhtYWxsb2Moc2l6ZW9mKCoqZW50cmllcykgKyBsZW4gKyAxKTsKLQllbnQtPm1vZGUgPSBtb2RlOwotCWVudC0+bGVuID0gbGVuOwotCWhhc2hjcHkoZW50LT5zaGExLCBzaGExKTsKLQltZW1jcHkoZW50LT5uYW1lLCBwYXRoLCBsZW4rMSk7Ci19Ci0KLXN0YXRpYyBpbnQgZW50X2NvbXBhcmUoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQotewotCXN0cnVjdCB0cmVlZW50ICphID0gKihzdHJ1Y3QgdHJlZWVudCAqKilhXzsKLQlzdHJ1Y3QgdHJlZWVudCAqYiA9ICooc3RydWN0IHRyZWVlbnQgKiopYl87Ci0JcmV0dXJuIGJhc2VfbmFtZV9jb21wYXJlKGEtPm5hbWUsIGEtPmxlbiwgYS0+bW9kZSwKLQkJCQkgYi0+bmFtZSwgYi0+bGVuLCBiLT5tb2RlKTsKLX0KLQotc3RhdGljIHZvaWQgd3JpdGVfdHJlZSh1bnNpZ25lZCBjaGFyICpzaGExKQotewotCXN0cnVjdCBzdHJidWYgYnVmOwotCXNpemVfdCBzaXplOwotCWludCBpOwotCi0JcXNvcnQoZW50cmllcywgdXNlZCwgc2l6ZW9mKCplbnRyaWVzKSwgZW50X2NvbXBhcmUpOwotCWZvciAoc2l6ZSA9IGkgPSAwOyBpIDwgdXNlZDsgaSsrKQotCQlzaXplICs9IDMyICsgZW50cmllc1tpXS0+bGVuOwotCi0Jc3RyYnVmX2luaXQoJmJ1Ziwgc2l6ZSk7Ci0JZm9yIChpID0gMDsgaSA8IHVzZWQ7IGkrKykgewotCQlzdHJ1Y3QgdHJlZWVudCAqZW50ID0gZW50cmllc1tpXTsKLQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVvICVzJWMiLCBlbnQtPm1vZGUsIGVudC0+bmFtZSwgJ1wwJyk7Ci0JCXN0cmJ1Zl9hZGQoJmJ1ZiwgZW50LT5zaGExLCAyMCk7Ci0JfQotCi0Jd3JpdGVfc2hhMV9maWxlKGJ1Zi5idWYsIGJ1Zi5sZW4sIHRyZWVfdHlwZSwgc2hhMSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyIG1rdHJlZV91c2FnZVtdID0gImdpdCBta3RyZWUgWy16XSI7Ci0KLWludCBtYWluKGludCBhYywgY2hhciAqKmF2KQotewotCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKLQlzdHJ1Y3Qgc3RyYnVmIHBfdXEgPSBTVFJCVUZfSU5JVDsKLQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwotCWludCBsaW5lX3Rlcm1pbmF0aW9uID0gJ1xuJzsKLQotCWdpdF9leHRyYWN0X2FyZ3YwX3BhdGgoYXZbMF0pOwotCi0Jc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOwotCi0Jd2hpbGUgKCgxIDwgYWMpICYmIGF2WzFdWzBdID09ICctJykgewotCQljaGFyICphcmcgPSBhdlsxXTsKLQkJaWYgKCFzdHJjbXAoIi16IiwgYXJnKSkKLQkJCWxpbmVfdGVybWluYXRpb24gPSAwOwotCQllbHNlCi0JCQl1c2FnZShta3RyZWVfdXNhZ2UpOwotCQlhYy0tOwotCQlhdisrOwotCX0KLQotCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmc2IsIHN0ZGluLCBsaW5lX3Rlcm1pbmF0aW9uKSAhPSBFT0YpIHsKLQkJY2hhciAqcHRyLCAqbnRyOwotCQl1bnNpZ25lZCBtb2RlOwotCQllbnVtIG9iamVjdF90eXBlIHR5cGU7Ci0JCWNoYXIgKnBhdGg7Ci0KLQkJcHRyID0gc2IuYnVmOwotCQkvKiBJbnB1dCBpcyBub24tcmVjdXJzaXZlIGxzLXRyZWUgb3V0cHV0IGZvcm1hdAotCQkgKiBtb2RlIFNQIHR5cGUgU1Agc2hhMSBUQUIgbmFtZQotCQkgKi8KLQkJbW9kZSA9IHN0cnRvdWwocHRyLCAmbnRyLCA4KTsKLQkJaWYgKHB0ciA9PSBudHIgfHwgIW50ciB8fCAqbnRyICE9ICcgJykKLQkJCWRpZSgiaW5wdXQgZm9ybWF0IGVycm9yOiAlcyIsIHNiLmJ1Zik7Ci0JCXB0ciA9IG50ciArIDE7IC8qIHR5cGUgKi8KLQkJbnRyID0gc3RyY2hyKHB0ciwgJyAnKTsKLQkJaWYgKCFudHIgfHwgc2IuYnVmICsgc2IubGVuIDw9IG50ciArIDQwIHx8Ci0JCSAgICBudHJbNDFdICE9ICdcdCcgfHwKLQkJICAgIGdldF9zaGExX2hleChudHIgKyAxLCBzaGExKSkKLQkJCWRpZSgiaW5wdXQgZm9ybWF0IGVycm9yOiAlcyIsIHNiLmJ1Zik7Ci0JCXR5cGUgPSBzaGExX29iamVjdF9pbmZvKHNoYTEsIE5VTEwpOwotCQlpZiAodHlwZSA8IDApCi0JCQlkaWUoIm9iamVjdCAlcyB1bmF2YWlsYWJsZSIsIHNoYTFfdG9faGV4KHNoYTEpKTsKLQkJKm50cisrID0gMDsgLyogbm93IGF0IHRoZSBiZWdpbm5pbmcgb2YgU0hBMSAqLwotCQlpZiAodHlwZSAhPSB0eXBlX2Zyb21fc3RyaW5nKHB0cikpCi0JCQlkaWUoIm9iamVjdCB0eXBlICVzIG1pc21hdGNoICglcykiLCBwdHIsIHR5cGVuYW1lKHR5cGUpKTsKLQotCQlwYXRoID0gbnRyICsgNDE7ICAvKiBhdCB0aGUgYmVnaW5uaW5nIG9mIG5hbWUgKi8KLQkJaWYgKGxpbmVfdGVybWluYXRpb24gJiYgcGF0aFswXSA9PSAnIicpIHsKLQkJCXN0cmJ1Zl9yZXNldCgmcF91cSk7Ci0JCQlpZiAodW5xdW90ZV9jX3N0eWxlKCZwX3VxLCBwYXRoLCBOVUxMKSkgewotCQkJCWRpZSgiaW52YWxpZCBxdW90aW5nIik7Ci0JCQl9Ci0JCQlwYXRoID0gcF91cS5idWY7Ci0JCX0KLQotCQlhcHBlbmRfdG9fdHJlZShtb2RlLCBzaGExLCBwYXRoKTsKLQl9Ci0Jc3RyYnVmX3JlbGVhc2UoJnBfdXEpOwotCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Ci0KLQl3cml0ZV90cmVlKHNoYTEpOwotCXB1dHMoc2hhMV90b19oZXgoc2hhMSkpOwotCWV4aXQoMCk7Ci19CmRpZmYgLS1naXQgYS9tb3ppbGxhLXNoYTEvc2hhMS5jIGIvbW96aWxsYS1zaGExL3NoYTEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVhNGViZi4uMDAwMDAwMAotLS0gYS9tb3ppbGxhLXNoYTEvc2hhMS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTUxICswLDAgQEAKLS8qCi0gKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYwotICogTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKLSAqIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgotICogdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCi0gKgotICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCi0gKiBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCi0gKiBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKLSAqIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKgotICogVGhlIE9yaWdpbmFsIENvZGUgaXMgU0hBIDE4MC0xIFJlZmVyZW5jZSBJbXBsZW1lbnRhdGlvbiAoQ29tcGFjdCB2ZXJzaW9uKQotICoKLSAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBQYXVsIEtvY2hlciBvZgotICogQ3J5cHRvZ3JhcGh5IFJlc2VhcmNoLiAgUG9ydGlvbnMgY3JlYXRlZCBieSBQYXVsIEtvY2hlciBhcmUKLSAqIENvcHlyaWdodCAoQykgMTk5NS05IGJ5IENyeXB0b2dyYXBoeSBSZXNlYXJjaCwgSW5jLiAgQWxsCi0gKiBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogQ29udHJpYnV0b3Iocyk6Ci0gKgotICogICAgIFBhdWwgS29jaGVyCi0gKgotICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZQotICogIkdQTCIpLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUKLSAqIGluc3RlYWQgb2YgdGhvc2UgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91cgotICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvCi0gKiBhbGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwKLSAqIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kCi0gKiByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5Ci0gKiB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50Ci0gKiBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlCi0gKiBHUEwuCi0gKi8KLQotI2luY2x1ZGUgInNoYTEuaCIKLQotc3RhdGljIHZvaWQgc2hhSGFzaEJsb2NrKG1vel9TSEFfQ1RYICpjdHgpOwotCi12b2lkIG1vel9TSEExX0luaXQobW96X1NIQV9DVFggKmN0eCkgewotICBpbnQgaTsKLQotICBjdHgtPmxlblcgPSAwOwotICBjdHgtPnNpemVIaSA9IGN0eC0+c2l6ZUxvID0gMDsKLQotICAvKiBJbml0aWFsaXplIEggd2l0aCB0aGUgbWFnaWMgY29uc3RhbnRzIChzZWUgRklQUzE4MCBmb3IgY29uc3RhbnRzKQotICAgKi8KLSAgY3R4LT5IWzBdID0gMHg2NzQ1MjMwMTsKLSAgY3R4LT5IWzFdID0gMHhlZmNkYWI4OTsKLSAgY3R4LT5IWzJdID0gMHg5OGJhZGNmZTsKLSAgY3R4LT5IWzNdID0gMHgxMDMyNTQ3NjsKLSAgY3R4LT5IWzRdID0gMHhjM2QyZTFmMDsKLQotICBmb3IgKGkgPSAwOyBpIDwgODA7IGkrKykKLSAgICBjdHgtPldbaV0gPSAwOwotfQotCi0KLXZvaWQgbW96X1NIQTFfVXBkYXRlKG1vel9TSEFfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKl9kYXRhSW4sIGludCBsZW4pIHsKLSAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YUluID0gX2RhdGFJbjsKLSAgaW50IGk7Ci0KLSAgLyogUmVhZCB0aGUgZGF0YSBpbnRvIFcgYW5kIHByb2Nlc3MgYmxvY2tzIGFzIHRoZXkgZ2V0IGZ1bGwKLSAgICovCi0gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgIGN0eC0+V1tjdHgtPmxlblcgLyA0XSA8PD0gODsKLSAgICBjdHgtPldbY3R4LT5sZW5XIC8gNF0gfD0gKHVuc2lnbmVkIGludClkYXRhSW5baV07Ci0gICAgaWYgKCgrK2N0eC0+bGVuVykgJSA2NCA9PSAwKSB7Ci0gICAgICBzaGFIYXNoQmxvY2soY3R4KTsKLSAgICAgIGN0eC0+bGVuVyA9IDA7Ci0gICAgfQotICAgIGN0eC0+c2l6ZUxvICs9IDg7Ci0gICAgY3R4LT5zaXplSGkgKz0gKGN0eC0+c2l6ZUxvIDwgOCk7Ci0gIH0KLX0KLQotCi12b2lkIG1vel9TSEExX0ZpbmFsKHVuc2lnbmVkIGNoYXIgaGFzaG91dFsyMF0sIG1vel9TSEFfQ1RYICpjdHgpIHsKLSAgdW5zaWduZWQgY2hhciBwYWQweDgwID0gMHg4MDsKLSAgdW5zaWduZWQgY2hhciBwYWQweDAwID0gMHgwMDsKLSAgdW5zaWduZWQgY2hhciBwYWRsZW5bOF07Ci0gIGludCBpOwotCi0gIC8qIFBhZCB3aXRoIGEgYmluYXJ5IDEgKGUuZy4gMHg4MCksIHRoZW4gemVyb2VzLCB0aGVuIGxlbmd0aAotICAgKi8KLSAgcGFkbGVuWzBdID0gKHVuc2lnbmVkIGNoYXIpKChjdHgtPnNpemVIaSA+PiAyNCkgJiAyNTUpOwotICBwYWRsZW5bMV0gPSAodW5zaWduZWQgY2hhcikoKGN0eC0+c2l6ZUhpID4+IDE2KSAmIDI1NSk7Ci0gIHBhZGxlblsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoY3R4LT5zaXplSGkgPj4gOCkgJiAyNTUpOwotICBwYWRsZW5bM10gPSAodW5zaWduZWQgY2hhcikoKGN0eC0+c2l6ZUhpID4+IDApICYgMjU1KTsKLSAgcGFkbGVuWzRdID0gKHVuc2lnbmVkIGNoYXIpKChjdHgtPnNpemVMbyA+PiAyNCkgJiAyNTUpOwotICBwYWRsZW5bNV0gPSAodW5zaWduZWQgY2hhcikoKGN0eC0+c2l6ZUxvID4+IDE2KSAmIDI1NSk7Ci0gIHBhZGxlbls2XSA9ICh1bnNpZ25lZCBjaGFyKSgoY3R4LT5zaXplTG8gPj4gOCkgJiAyNTUpOwotICBwYWRsZW5bN10gPSAodW5zaWduZWQgY2hhcikoKGN0eC0+c2l6ZUxvID4+IDApICYgMjU1KTsKLSAgbW96X1NIQTFfVXBkYXRlKGN0eCwgJnBhZDB4ODAsIDEpOwotICB3aGlsZSAoY3R4LT5sZW5XICE9IDU2KQotICAgIG1vel9TSEExX1VwZGF0ZShjdHgsICZwYWQweDAwLCAxKTsKLSAgbW96X1NIQTFfVXBkYXRlKGN0eCwgcGFkbGVuLCA4KTsKLQotICAvKiBPdXRwdXQgaGFzaAotICAgKi8KLSAgZm9yIChpID0gMDsgaSA8IDIwOyBpKyspIHsKLSAgICBoYXNob3V0W2ldID0gKHVuc2lnbmVkIGNoYXIpKGN0eC0+SFtpIC8gNF0gPj4gMjQpOwotICAgIGN0eC0+SFtpIC8gNF0gPDw9IDg7Ci0gIH0KLQotICAvKgotICAgKiAgUmUtaW5pdGlhbGl6ZSB0aGUgY29udGV4dCAoYWxzbyB6ZXJvaXplcyBjb250ZW50cykKLSAgICovCi0gIG1vel9TSEExX0luaXQoY3R4KTsKLX0KLQotCi0jZGVmaW5lIFNIQV9ST1QoWCxuKSAoKChYKSA8PCAobikpIHwgKChYKSA+PiAoMzItKG4pKSkpCi0KLXN0YXRpYyB2b2lkIHNoYUhhc2hCbG9jayhtb3pfU0hBX0NUWCAqY3R4KSB7Ci0gIGludCB0OwotICB1bnNpZ25lZCBpbnQgQSxCLEMsRCxFLFRFTVA7Ci0KLSAgZm9yICh0ID0gMTY7IHQgPD0gNzk7IHQrKykKLSAgICBjdHgtPldbdF0gPQotICAgICAgU0hBX1JPVChjdHgtPldbdC0zXSBeIGN0eC0+V1t0LThdIF4gY3R4LT5XW3QtMTRdIF4gY3R4LT5XW3QtMTZdLCAxKTsKLQotICBBID0gY3R4LT5IWzBdOwotICBCID0gY3R4LT5IWzFdOwotICBDID0gY3R4LT5IWzJdOwotICBEID0gY3R4LT5IWzNdOwotICBFID0gY3R4LT5IWzRdOwotCi0gIGZvciAodCA9IDA7IHQgPD0gMTk7IHQrKykgewotICAgIFRFTVAgPSBTSEFfUk9UKEEsNSkgKyAoKChDXkQpJkIpXkQpICAgICArIEUgKyBjdHgtPldbdF0gKyAweDVhODI3OTk5OwotICAgIEUgPSBEOyBEID0gQzsgQyA9IFNIQV9ST1QoQiwgMzApOyBCID0gQTsgQSA9IFRFTVA7Ci0gIH0KLSAgZm9yICh0ID0gMjA7IHQgPD0gMzk7IHQrKykgewotICAgIFRFTVAgPSBTSEFfUk9UKEEsNSkgKyAoQl5DXkQpICAgICAgICAgICArIEUgKyBjdHgtPldbdF0gKyAweDZlZDllYmExOwotICAgIEUgPSBEOyBEID0gQzsgQyA9IFNIQV9ST1QoQiwgMzApOyBCID0gQTsgQSA9IFRFTVA7Ci0gIH0KLSAgZm9yICh0ID0gNDA7IHQgPD0gNTk7IHQrKykgewotICAgIFRFTVAgPSBTSEFfUk9UKEEsNSkgKyAoKEImQyl8KEQmKEJ8QykpKSArIEUgKyBjdHgtPldbdF0gKyAweDhmMWJiY2RjOwotICAgIEUgPSBEOyBEID0gQzsgQyA9IFNIQV9ST1QoQiwgMzApOyBCID0gQTsgQSA9IFRFTVA7Ci0gIH0KLSAgZm9yICh0ID0gNjA7IHQgPD0gNzk7IHQrKykgewotICAgIFRFTVAgPSBTSEFfUk9UKEEsNSkgKyAoQl5DXkQpICAgICAgICAgICArIEUgKyBjdHgtPldbdF0gKyAweGNhNjJjMWQ2OwotICAgIEUgPSBEOyBEID0gQzsgQyA9IFNIQV9ST1QoQiwgMzApOyBCID0gQTsgQSA9IFRFTVA7Ci0gIH0KLQotICBjdHgtPkhbMF0gKz0gQTsKLSAgY3R4LT5IWzFdICs9IEI7Ci0gIGN0eC0+SFsyXSArPSBDOwotICBjdHgtPkhbM10gKz0gRDsKLSAgY3R4LT5IWzRdICs9IEU7Ci19CmRpZmYgLS1naXQgYS9tb3ppbGxhLXNoYTEvc2hhMS5oIGIvbW96aWxsYS1zaGExL3NoYTEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWE0OGE0Ni4uMDAwMDAwMAotLS0gYS9tb3ppbGxhLXNoYTEvc2hhMS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCi0gKiBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQotICogZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCi0gKiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KLSAqCi0gKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKLSAqIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKLSAqIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZwotICogcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqCi0gKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBTSEEgMTgwLTEgSGVhZGVyIEZpbGUKLSAqCi0gKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgUGF1bCBLb2NoZXIgb2YKLSAqIENyeXB0b2dyYXBoeSBSZXNlYXJjaC4gIFBvcnRpb25zIGNyZWF0ZWQgYnkgUGF1bCBLb2NoZXIgYXJlCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtOSBieSBDcnlwdG9ncmFwaHkgUmVzZWFyY2gsIEluYy4gIEFsbAotICogUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIENvbnRyaWJ1dG9yKHMpOgotICoKLSAqICAgICBQYXVsIEtvY2hlcgotICoKLSAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUKLSAqICJHUEwiKSwgaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlCi0gKiBpbnN0ZWFkIG9mIHRob3NlIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIKLSAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0bwotICogYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsCi0gKiBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZAotICogcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZSBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieQotICogdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudAotICogbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZQotICogR1BMLgotICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgdW5zaWduZWQgaW50IEhbNV07Ci0gIHVuc2lnbmVkIGludCBXWzgwXTsKLSAgaW50IGxlblc7Ci0gIHVuc2lnbmVkIGludCBzaXplSGksc2l6ZUxvOwotfSBtb3pfU0hBX0NUWDsKLQotdm9pZCBtb3pfU0hBMV9Jbml0KG1vel9TSEFfQ1RYICpjdHgpOwotdm9pZCBtb3pfU0hBMV9VcGRhdGUobW96X1NIQV9DVFggKmN0eCwgY29uc3Qgdm9pZCAqZGF0YUluLCBpbnQgbGVuKTsKLXZvaWQgbW96X1NIQTFfRmluYWwodW5zaWduZWQgY2hhciBoYXNob3V0WzIwXSwgbW96X1NIQV9DVFggKmN0eCk7Ci0KLSNkZWZpbmUgZ2l0X1NIQV9DVFgJbW96X1NIQV9DVFgKLSNkZWZpbmUgZ2l0X1NIQTFfSW5pdAltb3pfU0hBMV9Jbml0Ci0jZGVmaW5lIGdpdF9TSEExX1VwZGF0ZQltb3pfU0hBMV9VcGRhdGUKLSNkZWZpbmUgZ2l0X1NIQTFfRmluYWwJbW96X1NIQTFfRmluYWwKZGlmZiAtLWdpdCBhL25vdGVzLmMgYi9ub3Rlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyM2FkY2UKLS0tIC9kZXYvbnVsbAorKysgYi9ub3Rlcy5jCkBAIC0wLDAgKzEsNDMxIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJub3Rlcy5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisKKy8qCisgKiBVc2UgYSBub24tYmFsYW5jaW5nIHNpbXBsZSAxNi10cmVlIHN0cnVjdHVyZSB3aXRoIHN0cnVjdCBpbnRfbm9kZSBhcworICogaW50ZXJuYWwgbm9kZXMsIGFuZCBzdHJ1Y3QgbGVhZl9ub2RlIGFzIGxlYWYgbm9kZXMuIEVhY2ggaW50X25vZGUgaGFzIGEKKyAqIDE2LWFycmF5IG9mIHBvaW50ZXJzIHRvIGl0cyBjaGlsZHJlbi4KKyAqIFRoZSBib3R0b20gMiBiaXRzIG9mIGVhY2ggcG9pbnRlciBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBwb2ludGVyIHR5cGUKKyAqIC0gcHRyICYgMyA9PSAwIC0gTlVMTCBwb2ludGVyLCBhc3NlcnQocHRyID09IE5VTEwpCisgKiAtIHB0ciAmIDMgPT0gMSAtIHBvaW50ZXIgdG8gbmV4dCBpbnRlcm5hbCBub2RlIC0gY2FzdCB0byBzdHJ1Y3QgaW50X25vZGUgKgorICogLSBwdHIgJiAzID09IDIgLSBwb2ludGVyIHRvIG5vdGUgZW50cnkgLSBjYXN0IHRvIHN0cnVjdCBsZWFmX25vZGUgKgorICogLSBwdHIgJiAzID09IDMgLSBwb2ludGVyIHRvIHN1YnRyZWUgZW50cnkgLSBjYXN0IHRvIHN0cnVjdCBsZWFmX25vZGUgKgorICoKKyAqIFRoZSByb290IG5vZGUgaXMgYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBzdHJ1Y3QgaW50X25vZGUuCisgKi8KK3N0cnVjdCBpbnRfbm9kZSB7CisJdm9pZCAqYVsxNl07Cit9OworCisvKgorICogTGVhZiBub2RlcyBjb21lIGluIHR3byB2YXJpYW50cywgbm90ZSBlbnRyaWVzIGFuZCBzdWJ0cmVlIGVudHJpZXMsCisgKiBkaXN0aW5ndWlzaGVkIGJ5IHRoZSBMU2Igb2YgdGhlIGxlYWYgbm9kZSBwb2ludGVyIChzZWUgYWJvdmUpLgorICogQXMgYSBub3RlIGVudHJ5LCB0aGUga2V5IGlzIHRoZSBTSEExIG9mIHRoZSByZWZlcmVuY2VkIGNvbW1pdCwgYW5kIHRoZQorICogdmFsdWUgaXMgdGhlIFNIQTEgb2YgdGhlIG5vdGUgb2JqZWN0LgorICogQXMgYSBzdWJ0cmVlIGVudHJ5LCB0aGUga2V5IGlzIHRoZSBwcmVmaXggU0hBMSAody90cmFpbGluZyBOVUxzKSBvZiB0aGUKKyAqIHJlZmVyZW5jZWQgY29tbWl0LCB1c2luZyB0aGUgbGFzdCBieXRlIG9mIHRoZSBrZXkgdG8gc3RvcmUgdGhlIGxlbmd0aCBvZgorICogdGhlIHByZWZpeC4gVGhlIHZhbHVlIGlzIHRoZSBTSEExIG9mIHRoZSB0cmVlIG9iamVjdCBjb250YWluaW5nIHRoZSBub3RlcworICogc3VidHJlZS4KKyAqLworc3RydWN0IGxlYWZfbm9kZSB7CisJdW5zaWduZWQgY2hhciBrZXlfc2hhMVsyMF07CisJdW5zaWduZWQgY2hhciB2YWxfc2hhMVsyMF07Cit9OworCisjZGVmaW5lIFBUUl9UWVBFX05VTEwgICAgIDAKKyNkZWZpbmUgUFRSX1RZUEVfSU5URVJOQUwgMQorI2RlZmluZSBQVFJfVFlQRV9OT1RFICAgICAyCisjZGVmaW5lIFBUUl9UWVBFX1NVQlRSRUUgIDMKKworI2RlZmluZSBHRVRfUFRSX1RZUEUocHRyKSAgICAgICAoKHVpbnRwdHJfdCkgKHB0cikgJiAzKQorI2RlZmluZSBDTFJfUFRSX1RZUEUocHRyKSAgICAgICAoKHZvaWQgKikgKCh1aW50cHRyX3QpIChwdHIpICYgfjMpKQorI2RlZmluZSBTRVRfUFRSX1RZUEUocHRyLCB0eXBlKSAoKHZvaWQgKikgKCh1aW50cHRyX3QpIChwdHIpIHwgKHR5cGUpKSkKKworI2RlZmluZSBHRVRfTklCQkxFKG4sIHNoYTEpICgoKHNoYTFbbiA+PiAxXSkgPj4gKCh+biAmIDB4MDEpIDw8IDIpKSAmIDB4MGYpCisKKyNkZWZpbmUgU1VCVFJFRV9TSEExX1BSRUZJWENNUChrZXlfc2hhMSwgc3VidHJlZV9zaGExKSBcCisJKG1lbWNtcChrZXlfc2hhMSwgc3VidHJlZV9zaGExLCBzdWJ0cmVlX3NoYTFbMTldKSkKKworc3RhdGljIHN0cnVjdCBpbnRfbm9kZSByb290X25vZGU7CisKK3N0YXRpYyBpbnQgaW5pdGlhbGl6ZWQ7CisKK3N0YXRpYyB2b2lkIGxvYWRfc3VidHJlZShzdHJ1Y3QgbGVhZl9ub2RlICpzdWJ0cmVlLCBzdHJ1Y3QgaW50X25vZGUgKm5vZGUsCisJCXVuc2lnbmVkIGludCBuKTsKKworLyoKKyAqIFNlYXJjaCB0aGUgdHJlZSB1bnRpbCB0aGUgYXBwcm9wcmlhdGUgbG9jYXRpb24gZm9yIHRoZSBnaXZlbiBrZXkgaXMgZm91bmQ6CisgKiAxLiBTdGFydCBhdCB0aGUgcm9vdCBub2RlLCB3aXRoIG4gPSAwCisgKiAyLiBJZiBhWzBdIGF0IHRoZSBjdXJyZW50IGxldmVsIGlzIGEgbWF0Y2hpbmcgc3VidHJlZSBlbnRyeSwgdW5wYWNrIHRoYXQKKyAqICAgIHN1YnRyZWUgZW50cnkgYW5kIHJlbW92ZSBpdDsgcmVzdGFydCBzZWFyY2ggYXQgdGhlIGN1cnJlbnQgbGV2ZWwuCisgKiAzLiBVc2UgdGhlIG50aCBuaWJibGUgb2YgdGhlIGtleSBhcyBhbiBpbmRleCBpbnRvIGE6CisgKiAgICAtIElmIGFbbl0gaXMgYW4gaW50X25vZGUsIHJlY3Vyc2UgZnJvbSAjMiBpbnRvIHRoYXQgbm9kZSBhbmQgaW5jcmVtZW50IG4KKyAqICAgIC0gSWYgYSBtYXRjaGluZyBzdWJ0cmVlIGVudHJ5LCB1bnBhY2sgdGhhdCBzdWJ0cmVlIGVudHJ5IChhbmQgcmVtb3ZlIGl0KTsKKyAqICAgICAgcmVzdGFydCBzZWFyY2ggYXQgdGhlIGN1cnJlbnQgbGV2ZWwuCisgKiAgICAtIE90aGVyd2lzZSwgd2UgaGF2ZSBmb3VuZCBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAqICAgICAgLSBhIHN1YnRyZWUgZW50cnkgd2hpY2ggZG9lcyBub3QgbWF0Y2ggdGhlIGtleQorICogICAgICAtIGEgbm90ZSBlbnRyeSB3aGljaCBtYXkgb3IgbWF5IG5vdCBtYXRjaCB0aGUga2V5CisgKiAgICAgIC0gYW4gdW51c2VkIGxlYWYgbm9kZSAoTlVMTCkKKyAqICAgICAgSW4gYW55IGNhc2UsIHNldCAqdHJlZSBhbmQgKm4sIGFuZCByZXR1cm4gcG9pbnRlciB0byB0aGUgdHJlZSBsb2NhdGlvbi4KKyAqLworc3RhdGljIHZvaWQgKipub3RlX3RyZWVfc2VhcmNoKHN0cnVjdCBpbnRfbm9kZSAqKnRyZWUsCisJCXVuc2lnbmVkIGNoYXIgKm4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleV9zaGExKQoreworCXN0cnVjdCBsZWFmX25vZGUgKmw7CisJdW5zaWduZWQgY2hhciBpOworCXZvaWQgKnAgPSAoKnRyZWUpLT5hWzBdOworCisJaWYgKEdFVF9QVFJfVFlQRShwKSA9PSBQVFJfVFlQRV9TVUJUUkVFKSB7CisJCWwgPSAoc3RydWN0IGxlYWZfbm9kZSAqKSBDTFJfUFRSX1RZUEUocCk7CisJCWlmICghU1VCVFJFRV9TSEExX1BSRUZJWENNUChrZXlfc2hhMSwgbC0+a2V5X3NoYTEpKSB7CisJCQkvKiB1bnBhY2sgdHJlZSBhbmQgcmVzdW1lIHNlYXJjaCAqLworCQkJKCp0cmVlKS0+YVswXSA9IE5VTEw7CisJCQlsb2FkX3N1YnRyZWUobCwgKnRyZWUsICpuKTsKKwkJCWZyZWUobCk7CisJCQlyZXR1cm4gbm90ZV90cmVlX3NlYXJjaCh0cmVlLCBuLCBrZXlfc2hhMSk7CisJCX0KKwl9CisKKwlpID0gR0VUX05JQkJMRSgqbiwga2V5X3NoYTEpOworCXAgPSAoKnRyZWUpLT5hW2ldOworCXN3aXRjaChHRVRfUFRSX1RZUEUocCkpIHsKKwljYXNlIFBUUl9UWVBFX0lOVEVSTkFMOgorCQkqdHJlZSA9IENMUl9QVFJfVFlQRShwKTsKKwkJKCpuKSsrOworCQlyZXR1cm4gbm90ZV90cmVlX3NlYXJjaCh0cmVlLCBuLCBrZXlfc2hhMSk7CisJY2FzZSBQVFJfVFlQRV9TVUJUUkVFOgorCQlsID0gKHN0cnVjdCBsZWFmX25vZGUgKikgQ0xSX1BUUl9UWVBFKHApOworCQlpZiAoIVNVQlRSRUVfU0hBMV9QUkVGSVhDTVAoa2V5X3NoYTEsIGwtPmtleV9zaGExKSkgeworCQkJLyogdW5wYWNrIHRyZWUgYW5kIHJlc3VtZSBzZWFyY2ggKi8KKwkJCSgqdHJlZSktPmFbaV0gPSBOVUxMOworCQkJbG9hZF9zdWJ0cmVlKGwsICp0cmVlLCAqbik7CisJCQlmcmVlKGwpOworCQkJcmV0dXJuIG5vdGVfdHJlZV9zZWFyY2godHJlZSwgbiwga2V5X3NoYTEpOworCQl9CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWRlZmF1bHQ6CisJCXJldHVybiAmKCgqdHJlZSktPmFbaV0pOworCX0KK30KKworLyoKKyAqIFRvIGZpbmQgYSBsZWFmX25vZGU6CisgKiBTZWFyY2ggdG8gdGhlIHRyZWUgbG9jYXRpb24gYXBwcm9wcmlhdGUgZm9yIHRoZSBnaXZlbiBrZXk6CisgKiBJZiBhIG5vdGUgZW50cnkgd2l0aCBtYXRjaGluZyBrZXksIHJldHVybiB0aGUgbm90ZSBlbnRyeSwgZWxzZSByZXR1cm4gTlVMTC4KKyAqLworc3RhdGljIHN0cnVjdCBsZWFmX25vZGUgKm5vdGVfdHJlZV9maW5kKHN0cnVjdCBpbnRfbm9kZSAqdHJlZSwgdW5zaWduZWQgY2hhciBuLAorCQljb25zdCB1bnNpZ25lZCBjaGFyICprZXlfc2hhMSkKK3sKKwl2b2lkICoqcCA9IG5vdGVfdHJlZV9zZWFyY2goJnRyZWUsICZuLCBrZXlfc2hhMSk7CisJaWYgKEdFVF9QVFJfVFlQRSgqcCkgPT0gUFRSX1RZUEVfTk9URSkgeworCQlzdHJ1Y3QgbGVhZl9ub2RlICpsID0gKHN0cnVjdCBsZWFmX25vZGUgKikgQ0xSX1BUUl9UWVBFKCpwKTsKKwkJaWYgKCFoYXNoY21wKGtleV9zaGExLCBsLT5rZXlfc2hhMSkpCisJCQlyZXR1cm4gbDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIENyZWF0ZSBhIG5ldyBibG9iIG9iamVjdCBieSBjb25jYXRlbmF0aW5nIHRoZSB0d28gZ2l2ZW4gYmxvYiBvYmplY3RzICovCitzdGF0aWMgaW50IGNvbmNhdGVuYXRlX25vdGVzKHVuc2lnbmVkIGNoYXIgKmN1cl9zaGExLAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpuZXdfc2hhMSkKK3sKKwljaGFyICpjdXJfbXNnLCAqbmV3X21zZywgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIGN1cl9sZW4sIG5ld19sZW4sIGJ1Zl9sZW47CisJZW51bSBvYmplY3RfdHlwZSBjdXJfdHlwZSwgbmV3X3R5cGU7CisJaW50IHJldDsKKworCS8qIHJlYWQgaW4gYm90aCBub3RlIGJsb2Igb2JqZWN0cyAqLworCW5ld19tc2cgPSByZWFkX3NoYTFfZmlsZShuZXdfc2hhMSwgJm5ld190eXBlLCAmbmV3X2xlbik7CisJaWYgKCFuZXdfbXNnIHx8ICFuZXdfbGVuIHx8IG5ld190eXBlICE9IE9CSl9CTE9CKSB7CisJCWZyZWUobmV3X21zZyk7CisJCXJldHVybiAwOworCX0KKwljdXJfbXNnID0gcmVhZF9zaGExX2ZpbGUoY3VyX3NoYTEsICZjdXJfdHlwZSwgJmN1cl9sZW4pOworCWlmICghY3VyX21zZyB8fCAhY3VyX2xlbiB8fCBjdXJfdHlwZSAhPSBPQkpfQkxPQikgeworCQlmcmVlKGN1cl9tc2cpOworCQlmcmVlKG5ld19tc2cpOworCQloYXNoY3B5KGN1cl9zaGExLCBuZXdfc2hhMSk7CisJCXJldHVybiAwOworCX0KKworCS8qIHdlIHdpbGwgc2VwYXJhdGUgdGhlIG5vdGVzIGJ5IGEgbmV3bGluZSBhbnl3YXkgKi8KKwlpZiAoY3VyX21zZ1tjdXJfbGVuIC0gMV0gPT0gJ1xuJykKKwkJY3VyX2xlbi0tOworCisJLyogY29uY2F0ZW5hdGUgY3VyX21zZyBhbmQgbmV3X21zZyBpbnRvIGJ1ZiAqLworCWJ1Zl9sZW4gPSBjdXJfbGVuICsgMSArIG5ld19sZW47CisJYnVmID0gKGNoYXIgKikgeG1hbGxvYyhidWZfbGVuKTsKKwltZW1jcHkoYnVmLCBjdXJfbXNnLCBjdXJfbGVuKTsKKwlidWZbY3VyX2xlbl0gPSAnXG4nOworCW1lbWNweShidWYgKyBjdXJfbGVuICsgMSwgbmV3X21zZywgbmV3X2xlbik7CisKKwlmcmVlKGN1cl9tc2cpOworCWZyZWUobmV3X21zZyk7CisKKwkvKiBjcmVhdGUgYSBuZXcgYmxvYiBvYmplY3QgZnJvbSBidWYgKi8KKwlyZXQgPSB3cml0ZV9zaGExX2ZpbGUoYnVmLCBidWZfbGVuLCAiYmxvYiIsIGN1cl9zaGExKTsKKwlmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRvIGluc2VydCBhIGxlYWZfbm9kZToKKyAqIFNlYXJjaCB0byB0aGUgdHJlZSBsb2NhdGlvbiBhcHByb3ByaWF0ZSBmb3IgdGhlIGdpdmVuIGxlYWZfbm9kZSdzIGtleToKKyAqIC0gSWYgbG9jYXRpb24gaXMgdW51c2VkIChOVUxMKSwgc3RvcmUgdGhlIHR3ZWFrZWQgcG9pbnRlciBkaXJlY3RseSB0aGVyZQorICogLSBJZiBsb2NhdGlvbiBob2xkcyBhIG5vdGUgZW50cnkgdGhhdCBtYXRjaGVzIHRoZSBub3RlLXRvLWJlLWluc2VydGVkLCB0aGVuCisgKiAgIGNvbmNhdGVuYXRlIHRoZSB0d28gbm90ZXMuCisgKiAtIElmIGxvY2F0aW9uIGhvbGRzIGEgbm90ZSBlbnRyeSB0aGF0IG1hdGNoZXMgdGhlIHN1YnRyZWUtdG8tYmUtaW5zZXJ0ZWQsCisgKiAgIHRoZW4gdW5wYWNrIHRoZSBzdWJ0cmVlLXRvLWJlLWluc2VydGVkIGludG8gdGhlIGxvY2F0aW9uLgorICogLSBJZiBsb2NhdGlvbiBob2xkcyBhIG1hdGNoaW5nIHN1YnRyZWUgZW50cnksIHVucGFjayB0aGUgc3VidHJlZSBhdCB0aGF0CisgKiAgIGxvY2F0aW9uLCBhbmQgcmVzdGFydCB0aGUgaW5zZXJ0IG9wZXJhdGlvbiBmcm9tIHRoYXQgbGV2ZWwuCisgKiAtIEVsc2UsIGNyZWF0ZSBhIG5ldyBpbnRfbm9kZSwgaG9sZGluZyBib3RoIHRoZSBub2RlLWF0LWxvY2F0aW9uIGFuZCB0aGUKKyAqICAgbm9kZS10by1iZS1pbnNlcnRlZCwgYW5kIHN0b3JlIHRoZSBuZXcgaW50X25vZGUgaW50byB0aGUgbG9jYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIG5vdGVfdHJlZV9pbnNlcnQoc3RydWN0IGludF9ub2RlICp0cmVlLCB1bnNpZ25lZCBjaGFyIG4sCisJCXN0cnVjdCBsZWFmX25vZGUgKmVudHJ5LCB1bnNpZ25lZCBjaGFyIHR5cGUpCit7CisJc3RydWN0IGludF9ub2RlICpuZXdfbm9kZTsKKwlzdHJ1Y3QgbGVhZl9ub2RlICpsOworCXZvaWQgKipwID0gbm90ZV90cmVlX3NlYXJjaCgmdHJlZSwgJm4sIGVudHJ5LT5rZXlfc2hhMSk7CisKKwlhc3NlcnQoR0VUX1BUUl9UWVBFKGVudHJ5KSA9PSAwKTsgLyogbm8gdHlwZSBiaXRzIHNldCAqLworCWwgPSAoc3RydWN0IGxlYWZfbm9kZSAqKSBDTFJfUFRSX1RZUEUoKnApOworCXN3aXRjaChHRVRfUFRSX1RZUEUoKnApKSB7CisJY2FzZSBQVFJfVFlQRV9OVUxMOgorCQlhc3NlcnQoISpwKTsKKwkJKnAgPSBTRVRfUFRSX1RZUEUoZW50cnksIHR5cGUpOworCQlyZXR1cm47CisJY2FzZSBQVFJfVFlQRV9OT1RFOgorCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBQVFJfVFlQRV9OT1RFOgorCQkJaWYgKCFoYXNoY21wKGwtPmtleV9zaGExLCBlbnRyeS0+a2V5X3NoYTEpKSB7CisJCQkJLyogc2tpcCBjb25jYXRlbmF0aW9uIGlmIGwgPT0gZW50cnkgKi8KKwkJCQlpZiAoIWhhc2hjbXAobC0+dmFsX3NoYTEsIGVudHJ5LT52YWxfc2hhMSkpCisJCQkJCXJldHVybjsKKworCQkJCWlmIChjb25jYXRlbmF0ZV9ub3RlcyhsLT52YWxfc2hhMSwKKwkJCQkJCWVudHJ5LT52YWxfc2hhMSkpCisJCQkJCWRpZSgiZmFpbGVkIHRvIGNvbmNhdGVuYXRlIG5vdGUgJXMgIgorCQkJCQkgICAgImludG8gbm90ZSAlcyBmb3IgY29tbWl0ICVzIiwKKwkJCQkJICAgIHNoYTFfdG9faGV4KGVudHJ5LT52YWxfc2hhMSksCisJCQkJCSAgICBzaGExX3RvX2hleChsLT52YWxfc2hhMSksCisJCQkJCSAgICBzaGExX3RvX2hleChsLT5rZXlfc2hhMSkpOworCQkJCWZyZWUoZW50cnkpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFBUUl9UWVBFX1NVQlRSRUU6CisJCQlpZiAoIVNVQlRSRUVfU0hBMV9QUkVGSVhDTVAobC0+a2V5X3NoYTEsCisJCQkJCQkgICAgZW50cnktPmtleV9zaGExKSkgeworCQkJCS8qIHVucGFjayAnZW50cnknICovCisJCQkJbG9hZF9zdWJ0cmVlKGVudHJ5LCB0cmVlLCBuKTsKKwkJCQlmcmVlKGVudHJ5KTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIFBUUl9UWVBFX1NVQlRSRUU6CisJCWlmICghU1VCVFJFRV9TSEExX1BSRUZJWENNUChlbnRyeS0+a2V5X3NoYTEsIGwtPmtleV9zaGExKSkgeworCQkJLyogdW5wYWNrICdsJyBhbmQgcmVzdGFydCBpbnNlcnQgKi8KKwkJCSpwID0gTlVMTDsKKwkJCWxvYWRfc3VidHJlZShsLCB0cmVlLCBuKTsKKwkJCWZyZWUobCk7CisJCQlub3RlX3RyZWVfaW5zZXJ0KHRyZWUsIG4sIGVudHJ5LCB0eXBlKTsKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKwl9CisKKwkvKiBub24tbWF0Y2hpbmcgbGVhZl9ub2RlICovCisJYXNzZXJ0KEdFVF9QVFJfVFlQRSgqcCkgPT0gUFRSX1RZUEVfTk9URSB8fAorCSAgICAgICBHRVRfUFRSX1RZUEUoKnApID09IFBUUl9UWVBFX1NVQlRSRUUpOworCW5ld19ub2RlID0gKHN0cnVjdCBpbnRfbm9kZSAqKSB4Y2FsbG9jKHNpemVvZihzdHJ1Y3QgaW50X25vZGUpLCAxKTsKKwlub3RlX3RyZWVfaW5zZXJ0KG5ld19ub2RlLCBuICsgMSwgbCwgR0VUX1BUUl9UWVBFKCpwKSk7CisJKnAgPSBTRVRfUFRSX1RZUEUobmV3X25vZGUsIFBUUl9UWVBFX0lOVEVSTkFMKTsKKwlub3RlX3RyZWVfaW5zZXJ0KG5ld19ub2RlLCBuICsgMSwgZW50cnksIHR5cGUpOworfQorCisvKiBGcmVlIHRoZSBlbnRpcmUgbm90ZXMgZGF0YSBjb250YWluZWQgaW4gdGhlIGdpdmVuIHRyZWUgKi8KK3N0YXRpYyB2b2lkIG5vdGVfdHJlZV9mcmVlKHN0cnVjdCBpbnRfbm9kZSAqdHJlZSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQl2b2lkICpwID0gdHJlZS0+YVtpXTsKKwkJc3dpdGNoKEdFVF9QVFJfVFlQRShwKSkgeworCQljYXNlIFBUUl9UWVBFX0lOVEVSTkFMOgorCQkJbm90ZV90cmVlX2ZyZWUoQ0xSX1BUUl9UWVBFKHApKTsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIFBUUl9UWVBFX05PVEU6CisJCWNhc2UgUFRSX1RZUEVfU1VCVFJFRToKKwkJCWZyZWUoQ0xSX1BUUl9UWVBFKHApKTsKKwkJfQorCX0KK30KKworLyoKKyAqIENvbnZlcnQgYSBwYXJ0aWFsIFNIQTEgaGV4IHN0cmluZyB0byB0aGUgY29ycmVzcG9uZGluZyBwYXJ0aWFsIFNIQTEgdmFsdWUuCisgKiAtIGhleCAgICAgIC0gUGFydGlhbCBTSEExIHNlZ21lbnQgaW4gQVNDSUkgaGV4IGZvcm1hdAorICogLSBoZXhfbGVuICAtIExlbmd0aCBvZiBhYm92ZSBzZWdtZW50LiBNdXN0IGJlIG11bHRpcGxlIG9mIDIgYmV0d2VlbiAwIGFuZCA0MAorICogLSBzaGExICAgICAtIFBhcnRpYWwgU0hBMSB2YWx1ZSBpcyB3cml0dGVuIGhlcmUKKyAqIC0gc2hhMV9sZW4gLSBNYXggI2J5dGVzIHRvIHN0b3JlIGluIHNoYTEsIE11c3QgYmUgPj0gaGV4X2xlbiAvIDIsIGFuZCA8IDIwCisgKiBSZXR1cm5zIC0xIG9uIGVycm9yIChpbnZhbGlkIGFyZ3VtZW50cyBvciBpbnZhbGlkIFNIQTEgKG5vdCBpbiBoZXggZm9ybWF0KS4KKyAqIE90aGVyd2lzZSwgcmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byBzaGExIChpLmUuIGhleF9sZW4gLyAyKS4KKyAqIFBhZHMgc2hhMSB3aXRoIE5VTHMgdXAgdG8gc2hhMV9sZW4gKG5vdCBpbmNsdWRlZCBpbiByZXR1cm5lZCBsZW5ndGgpLgorICovCitzdGF0aWMgaW50IGdldF9zaGExX2hleF9zZWdtZW50KGNvbnN0IGNoYXIgKmhleCwgdW5zaWduZWQgaW50IGhleF9sZW4sCisJCXVuc2lnbmVkIGNoYXIgKnNoYTEsIHVuc2lnbmVkIGludCBzaGExX2xlbikKK3sKKwl1bnNpZ25lZCBpbnQgaSwgbGVuID0gaGV4X2xlbiA+PiAxOworCWlmIChoZXhfbGVuICUgMiAhPSAwIHx8IGxlbiA+IHNoYTFfbGVuKQorCQlyZXR1cm4gLTE7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCXVuc2lnbmVkIGludCB2YWwgPSAoaGV4dmFsKGhleFswXSkgPDwgNCkgfCBoZXh2YWwoaGV4WzFdKTsKKwkJaWYgKHZhbCAmIH4weGZmKQorCQkJcmV0dXJuIC0xOworCQkqc2hhMSsrID0gdmFsOworCQloZXggKz0gMjsKKwl9CisJZm9yICg7IGkgPCBzaGExX2xlbjsgaSsrKQorCQkqc2hhMSsrID0gMDsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgdm9pZCBsb2FkX3N1YnRyZWUoc3RydWN0IGxlYWZfbm9kZSAqc3VidHJlZSwgc3RydWN0IGludF9ub2RlICpub2RlLAorCQl1bnNpZ25lZCBpbnQgbikKK3sKKwl1bnNpZ25lZCBjaGFyIGNvbW1pdF9zaGExWzIwXTsKKwl1bnNpZ25lZCBpbnQgcHJlZml4X2xlbjsKKwl2b2lkICpidWY7CisJc3RydWN0IHRyZWVfZGVzYyBkZXNjOworCXN0cnVjdCBuYW1lX2VudHJ5IGVudHJ5OworCisJYnVmID0gZmlsbF90cmVlX2Rlc2NyaXB0b3IoJmRlc2MsIHN1YnRyZWUtPnZhbF9zaGExKTsKKwlpZiAoIWJ1ZikKKwkJZGllKCJDb3VsZCBub3QgcmVhZCAlcyBmb3Igbm90ZXMtaW5kZXgiLAorCQkgICAgIHNoYTFfdG9faGV4KHN1YnRyZWUtPnZhbF9zaGExKSk7CisKKwlwcmVmaXhfbGVuID0gc3VidHJlZS0+a2V5X3NoYTFbMTldOworCWFzc2VydChwcmVmaXhfbGVuICogMiA+PSBuKTsKKwltZW1jcHkoY29tbWl0X3NoYTEsIHN1YnRyZWUtPmtleV9zaGExLCBwcmVmaXhfbGVuKTsKKwl3aGlsZSAodHJlZV9lbnRyeSgmZGVzYywgJmVudHJ5KSkgeworCQlpbnQgbGVuID0gZ2V0X3NoYTFfaGV4X3NlZ21lbnQoZW50cnkucGF0aCwgc3RybGVuKGVudHJ5LnBhdGgpLAorCQkJCWNvbW1pdF9zaGExICsgcHJlZml4X2xlbiwgMjAgLSBwcmVmaXhfbGVuKTsKKwkJaWYgKGxlbiA8IDApCisJCQljb250aW51ZTsgLyogZW50cnkucGF0aCBpcyBub3QgYSBTSEExIHN1bS4gU2tpcCAqLworCQlsZW4gKz0gcHJlZml4X2xlbjsKKworCQkvKgorCQkgKiBJZiBjb21taXQgU0hBMSBpcyBjb21wbGV0ZSAobGVuID09IDIwKSwgYXNzdW1lIG5vdGUgb2JqZWN0CisJCSAqIElmIGNvbW1pdCBTSEExIGlzIGluY29tcGxldGUgKGxlbiA8IDIwKSwgYXNzdW1lIG5vdGUgc3VidHJlZQorCQkgKi8KKwkJaWYgKGxlbiA8PSAyMCkgeworCQkJdW5zaWduZWQgY2hhciB0eXBlID0gUFRSX1RZUEVfTk9URTsKKwkJCXN0cnVjdCBsZWFmX25vZGUgKmwgPSAoc3RydWN0IGxlYWZfbm9kZSAqKQorCQkJCXhjYWxsb2Moc2l6ZW9mKHN0cnVjdCBsZWFmX25vZGUpLCAxKTsKKwkJCWhhc2hjcHkobC0+a2V5X3NoYTEsIGNvbW1pdF9zaGExKTsKKwkJCWhhc2hjcHkobC0+dmFsX3NoYTEsIGVudHJ5LnNoYTEpOworCQkJaWYgKGxlbiA8IDIwKSB7CisJCQkJaWYgKCFTX0lTRElSKGVudHJ5Lm1vZGUpKQorCQkJCQljb250aW51ZTsgLyogZW50cnkgY2Fubm90IGJlIHN1YnRyZWUgKi8KKwkJCQlsLT5rZXlfc2hhMVsxOV0gPSAodW5zaWduZWQgY2hhcikgbGVuOworCQkJCXR5cGUgPSBQVFJfVFlQRV9TVUJUUkVFOworCQkJfQorCQkJbm90ZV90cmVlX2luc2VydChub2RlLCBuLCBsLCB0eXBlKTsKKwkJfQorCX0KKwlmcmVlKGJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVfbm90ZXMoY29uc3QgY2hhciAqbm90ZXNfcmVmX25hbWUpCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXSwgY29tbWl0X3NoYTFbMjBdOworCXVuc2lnbmVkIG1vZGU7CisJc3RydWN0IGxlYWZfbm9kZSByb290X3RyZWU7CisKKwlpZiAoIW5vdGVzX3JlZl9uYW1lIHx8IHJlYWRfcmVmKG5vdGVzX3JlZl9uYW1lLCBjb21taXRfc2hhMSkgfHwKKwkgICAgZ2V0X3RyZWVfZW50cnkoY29tbWl0X3NoYTEsICIiLCBzaGExLCAmbW9kZSkpCisJCXJldHVybjsKKworCWhhc2hjbHIocm9vdF90cmVlLmtleV9zaGExKTsKKwloYXNoY3B5KHJvb3RfdHJlZS52YWxfc2hhMSwgc2hhMSk7CisJbG9hZF9zdWJ0cmVlKCZyb290X3RyZWUsICZyb290X25vZGUsIDApOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciAqbG9va3VwX25vdGVzKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbW1pdF9zaGExKQoreworCXN0cnVjdCBsZWFmX25vZGUgKmZvdW5kID0gbm90ZV90cmVlX2ZpbmQoJnJvb3Rfbm9kZSwgMCwgY29tbWl0X3NoYTEpOworCWlmIChmb3VuZCkKKwkJcmV0dXJuIGZvdW5kLT52YWxfc2hhMTsKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBmcmVlX25vdGVzKHZvaWQpCit7CisJbm90ZV90cmVlX2ZyZWUoJnJvb3Rfbm9kZSk7CisJbWVtc2V0KCZyb290X25vZGUsIDAsIHNpemVvZihzdHJ1Y3QgaW50X25vZGUpKTsKKwlpbml0aWFsaXplZCA9IDA7Cit9CisKK3ZvaWQgZ2V0X2NvbW1pdF9ub3Rlcyhjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBzdHJidWYgKnNiLAorCQljb25zdCBjaGFyICpvdXRwdXRfZW5jb2RpbmcsIGludCBmbGFncykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciB1dGY4W10gPSAidXRmLTgiOworCXVuc2lnbmVkIGNoYXIgKnNoYTE7CisJY2hhciAqbXNnLCAqbXNnX3A7CisJdW5zaWduZWQgbG9uZyBsaW5lbGVuLCBtc2dsZW47CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCisJaWYgKCFpbml0aWFsaXplZCkgeworCQljb25zdCBjaGFyICplbnYgPSBnZXRlbnYoR0lUX05PVEVTX1JFRl9FTlZJUk9OTUVOVCk7CisJCWlmIChlbnYpCisJCQlub3Rlc19yZWZfbmFtZSA9IGdldGVudihHSVRfTk9URVNfUkVGX0VOVklST05NRU5UKTsKKwkJZWxzZSBpZiAoIW5vdGVzX3JlZl9uYW1lKQorCQkJbm90ZXNfcmVmX25hbWUgPSBHSVRfTk9URVNfREVGQVVMVF9SRUY7CisJCWluaXRpYWxpemVfbm90ZXMobm90ZXNfcmVmX25hbWUpOworCQlpbml0aWFsaXplZCA9IDE7CisJfQorCisJc2hhMSA9IGxvb2t1cF9ub3Rlcyhjb21taXQtPm9iamVjdC5zaGExKTsKKwlpZiAoIXNoYTEpCisJCXJldHVybjsKKworCWlmICghKG1zZyA9IHJlYWRfc2hhMV9maWxlKHNoYTEsICZ0eXBlLCAmbXNnbGVuKSkgfHwgIW1zZ2xlbiB8fAorCQkJdHlwZSAhPSBPQkpfQkxPQikgeworCQlmcmVlKG1zZyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAob3V0cHV0X2VuY29kaW5nICYmICpvdXRwdXRfZW5jb2RpbmcgJiYKKwkJCXN0cmNtcCh1dGY4LCBvdXRwdXRfZW5jb2RpbmcpKSB7CisJCWNoYXIgKnJlZW5jb2RlZCA9IHJlZW5jb2RlX3N0cmluZyhtc2csIG91dHB1dF9lbmNvZGluZywgdXRmOCk7CisJCWlmIChyZWVuY29kZWQpIHsKKwkJCWZyZWUobXNnKTsKKwkJCW1zZyA9IHJlZW5jb2RlZDsKKwkJCW1zZ2xlbiA9IHN0cmxlbihtc2cpOworCQl9CisJfQorCisJLyogd2Ugd2lsbCBlbmQgdGhlIGFubm90YXRpb24gYnkgYSBuZXdsaW5lIGFueXdheSAqLworCWlmIChtc2dsZW4gJiYgbXNnW21zZ2xlbiAtIDFdID09ICdcbicpCisJCW1zZ2xlbi0tOworCisJaWYgKGZsYWdzICYgTk9URVNfU0hPV19IRUFERVIpCisJCXN0cmJ1Zl9hZGRzdHIoc2IsICJcbk5vdGVzOlxuIik7CisKKwlmb3IgKG1zZ19wID0gbXNnOyBtc2dfcCA8IG1zZyArIG1zZ2xlbjsgbXNnX3AgKz0gbGluZWxlbiArIDEpIHsKKwkJbGluZWxlbiA9IHN0cmNocm51bChtc2dfcCwgJ1xuJykgLSBtc2dfcDsKKworCQlpZiAoZmxhZ3MgJiBOT1RFU19JTkRFTlQpCisJCQlzdHJidWZfYWRkc3RyKHNiLCAiICAgICIpOworCQlzdHJidWZfYWRkKHNiLCBtc2dfcCwgbGluZWxlbik7CisJCXN0cmJ1Zl9hZGRjaChzYiwgJ1xuJyk7CisJfQorCisJZnJlZShtc2cpOworfQpkaWZmIC0tZ2l0IGEvbm90ZXMuaCBiL25vdGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE0MjFlMwotLS0gL2Rldi9udWxsCisrKyBiL25vdGVzLmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBOT1RFU19ICisjZGVmaW5lIE5PVEVTX0gKKworLyogRnJlZSAoYW5kIGRlLWluaXRpYWxpemUpIHRoZSBpbnRlcm5hbCBub3RlcyB0cmVlIHN0cnVjdHVyZSAqLwordm9pZCBmcmVlX25vdGVzKHZvaWQpOworCisjZGVmaW5lIE5PVEVTX1NIT1dfSEVBREVSIDEKKyNkZWZpbmUgTk9URVNfSU5ERU5UIDIKKwordm9pZCBnZXRfY29tbWl0X25vdGVzKGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IHN0cmJ1ZiAqc2IsCisJCWNvbnN0IGNoYXIgKm91dHB1dF9lbmNvZGluZywgaW50IGZsYWdzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9vYmplY3QuYyBiL29iamVjdC5jCmluZGV4IGUxZmVlZjkuLjNjYTkyYzQgMTAwNjQ0Ci0tLSBhL29iamVjdC5jCisrKyBiL29iamVjdC5jCkBAIC01Miw3ICs1Miw3IEBACiAKIHN0YXRpYyB2b2lkIGluc2VydF9vYmpfaGFzaChzdHJ1Y3Qgb2JqZWN0ICpvYmosIHN0cnVjdCBvYmplY3QgKipoYXNoLCB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKLQlpbnQgaiA9IGhhc2hfb2JqKG9iaiwgc2l6ZSk7CisJdW5zaWduZWQgaW50IGogPSBoYXNoX29iaihvYmosIHNpemUpOwogCiAJd2hpbGUgKGhhc2hbal0pIHsKIAkJaisrOwpAQCAtNjIsMTYgKzYyLDE2IEBACiAJaGFzaFtqXSA9IG9iajsKIH0KIAotc3RhdGljIGludCBoYXNodGFibGVfaW5kZXgoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGFzaHRhYmxlX2luZGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCiB7CiAJdW5zaWduZWQgaW50IGk7CiAJbWVtY3B5KCZpLCBzaGExLCBzaXplb2YodW5zaWduZWQgaW50KSk7Ci0JcmV0dXJuIChpbnQpKGkgJSBvYmpfaGFzaF9zaXplKTsKKwlyZXR1cm4gaSAlIG9ial9oYXNoX3NpemU7CiB9CiAKIHN0cnVjdCBvYmplY3QgKmxvb2t1cF9vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKLQlpbnQgaTsKKwl1bnNpZ25lZCBpbnQgaTsKIAlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CiAKIAlpZiAoIW9ial9oYXNoKQpAQCAtMTg4LDE3ICsxODgsMTggQEAKIAl1bnNpZ25lZCBsb25nIHNpemU7CiAJZW51bSBvYmplY3RfdHlwZSB0eXBlOwogCWludCBlYXRlbjsKLQl2b2lkICpidWZmZXIgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmdHlwZSwgJnNpemUpOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlcGw7CisJdm9pZCAqYnVmZmVyID0gcmVhZF9zaGExX2ZpbGVfcmVwbChzaGExLCAmdHlwZSwgJnNpemUsICZyZXBsKTsKIAogCWlmIChidWZmZXIpIHsKIAkJc3RydWN0IG9iamVjdCAqb2JqOwotCQlpZiAoY2hlY2tfc2hhMV9zaWduYXR1cmUoc2hhMSwgYnVmZmVyLCBzaXplLCB0eXBlbmFtZSh0eXBlKSkgPCAwKSB7CisJCWlmIChjaGVja19zaGExX3NpZ25hdHVyZShyZXBsLCBidWZmZXIsIHNpemUsIHR5cGVuYW1lKHR5cGUpKSA8IDApIHsKIAkJCWZyZWUoYnVmZmVyKTsKLQkJCWVycm9yKCJzaGExIG1pc21hdGNoICVzXG4iLCBzaGExX3RvX2hleChzaGExKSk7CisJCQllcnJvcigic2hhMSBtaXNtYXRjaCAlc1xuIiwgc2hhMV90b19oZXgocmVwbCkpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAotCQlvYmogPSBwYXJzZV9vYmplY3RfYnVmZmVyKHNoYTEsIHR5cGUsIHNpemUsIGJ1ZmZlciwgJmVhdGVuKTsKKwkJb2JqID0gcGFyc2Vfb2JqZWN0X2J1ZmZlcihyZXBsLCB0eXBlLCBzaXplLCBidWZmZXIsICZlYXRlbik7CiAJCWlmICghZWF0ZW4pCiAJCQlmcmVlKGJ1ZmZlcik7CiAJCXJldHVybiBvYmo7CkBAIC0yMTYsMjcgKzIxNyw2IEBACiAgICAgICAgIHJldHVybiBuZXdfbGlzdDsKIH0KIAotdm9pZCBvYmplY3RfbGlzdF9hcHBlbmQoc3RydWN0IG9iamVjdCAqaXRlbSwKLQkJCXN0cnVjdCBvYmplY3RfbGlzdCAqKmxpc3RfcCkKLXsKLQl3aGlsZSAoKmxpc3RfcCkgewotCQlsaXN0X3AgPSAmKCgqbGlzdF9wKS0+bmV4dCk7Ci0JfQotCSpsaXN0X3AgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3Qgb2JqZWN0X2xpc3QpKTsKLQkoKmxpc3RfcCktPm5leHQgPSBOVUxMOwotCSgqbGlzdF9wKS0+aXRlbSA9IGl0ZW07Ci19Ci0KLXVuc2lnbmVkIG9iamVjdF9saXN0X2xlbmd0aChzdHJ1Y3Qgb2JqZWN0X2xpc3QgKmxpc3QpCi17Ci0JdW5zaWduZWQgcmV0ID0gMDsKLQl3aGlsZSAobGlzdCkgewotCQlsaXN0ID0gbGlzdC0+bmV4dDsKLQkJcmV0Kys7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KIGludCBvYmplY3RfbGlzdF9jb250YWlucyhzdHJ1Y3Qgb2JqZWN0X2xpc3QgKmxpc3QsIHN0cnVjdCBvYmplY3QgKm9iaikKIHsKIAl3aGlsZSAobGlzdCkgewpkaWZmIC0tZ2l0IGEvb2JqZWN0LmggYi9vYmplY3QuaAppbmRleCA4OWRkMGM0Li44Mjg3N2M4IDEwMDY0NAotLS0gYS9vYmplY3QuaAorKysgYi9vYmplY3QuaApAQCAtNzIsMTEgKzcyLDYgQEAKIHN0cnVjdCBvYmplY3RfbGlzdCAqb2JqZWN0X2xpc3RfaW5zZXJ0KHN0cnVjdCBvYmplY3QgKml0ZW0sCiAJCQkJICAgICAgIHN0cnVjdCBvYmplY3RfbGlzdCAqKmxpc3RfcCk7CiAKLXZvaWQgb2JqZWN0X2xpc3RfYXBwZW5kKHN0cnVjdCBvYmplY3QgKml0ZW0sCi0JCQlzdHJ1Y3Qgb2JqZWN0X2xpc3QgKipsaXN0X3ApOwotCi11bnNpZ25lZCBvYmplY3RfbGlzdF9sZW5ndGgoc3RydWN0IG9iamVjdF9saXN0ICpsaXN0KTsKLQogaW50IG9iamVjdF9saXN0X2NvbnRhaW5zKHN0cnVjdCBvYmplY3RfbGlzdCAqbGlzdCwgc3RydWN0IG9iamVjdCAqb2JqKTsKIAogLyogT2JqZWN0IGFycmF5IGhhbmRsaW5nIC4uICovCmRpZmYgLS1naXQgYS9wYWNrLWNoZWNrLmMgYi9wYWNrLWNoZWNrLmMKaW5kZXggOTBjMzNiMS4uMTY2Y2E3MCAxMDA2NDQKLS0tIGEvcGFjay1jaGVjay5jCisrKyBiL3BhY2stY2hlY2suYwpAQCAtNDksNyArNDksNyBAQAogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluZGV4X2Jhc2UgPSBwLT5pbmRleF9kYXRhOwogCWdpdF9TSEFfQ1RYIGN0eDsKIAl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdLCAqcGFja19zaWc7Ci0Jb2ZmX3Qgb2Zmc2V0ID0gMCwgcGFja19zaWdfb2ZzID0gcC0+cGFja19zaXplIC0gMjA7CisJb2ZmX3Qgb2Zmc2V0ID0gMCwgcGFja19zaWdfb2ZzID0gMDsKIAl1aW50MzJfdCBucl9vYmplY3RzLCBpOwogCWludCBlcnIgPSAwOwogCXN0cnVjdCBpZHhfZW50cnkgKmVudHJpZXM7CkBAIC02MSwxNCArNjEsMTYgQEAKIAkgKi8KIAogCWdpdF9TSEExX0luaXQoJmN0eCk7Ci0Jd2hpbGUgKG9mZnNldCA8IHBhY2tfc2lnX29mcykgeworCWRvIHsKIAkJdW5zaWduZWQgaW50IHJlbWFpbmluZzsKIAkJdW5zaWduZWQgY2hhciAqaW4gPSB1c2VfcGFjayhwLCB3X2N1cnMsIG9mZnNldCwgJnJlbWFpbmluZyk7CiAJCW9mZnNldCArPSByZW1haW5pbmc7CisJCWlmICghcGFja19zaWdfb2ZzKQorCQkJcGFja19zaWdfb2ZzID0gcC0+cGFja19zaXplIC0gMjA7CiAJCWlmIChvZmZzZXQgPiBwYWNrX3NpZ19vZnMpCiAJCQlyZW1haW5pbmcgLT0gKHVuc2lnbmVkIGludCkob2Zmc2V0IC0gcGFja19zaWdfb2ZzKTsKIAkJZ2l0X1NIQTFfVXBkYXRlKCZjdHgsIGluLCByZW1haW5pbmcpOwotCX0KKwl9IHdoaWxlIChvZmZzZXQgPCBwYWNrX3NpZ19vZnMpOwogCWdpdF9TSEExX0ZpbmFsKHNoYTEsICZjdHgpOwogCXBhY2tfc2lnID0gdXNlX3BhY2socCwgd19jdXJzLCBwYWNrX3NpZ19vZnMsIE5VTEwpOwogCWlmIChoYXNoY21wKHNoYTEsIHBhY2tfc2lnKSkKZGlmZiAtLWdpdCBhL3BhY2stcmVmcy5jIGIvcGFjay1yZWZzLmMKaW5kZXggMzAxZmM2MC4uN2Y0M2Y4YSAxMDA2NDQKLS0tIGEvcGFjay1yZWZzLmMKKysrIGIvcGFjay1yZWZzLmMKQEAgLTkzLDggKzkzLDcgQEAKIAkJCQkgICAgICAgTE9DS19ESUVfT05fRVJST1IpOwogCWNiZGF0YS5yZWZzX2ZpbGUgPSBmZG9wZW4oZmQsICJ3Iik7CiAJaWYgKCFjYmRhdGEucmVmc19maWxlKQotCQlkaWUoInVuYWJsZSB0byBjcmVhdGUgcmVmLXBhY2sgZmlsZSBzdHJ1Y3R1cmUgKCVzKSIsCi0JCSAgICBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oInVuYWJsZSB0byBjcmVhdGUgcmVmLXBhY2sgZmlsZSBzdHJ1Y3R1cmUiKTsKIAogCS8qIHBlcmhhcHMgb3RoZXIgdHJhaXRzIGxhdGVyIGFzIHdlbGwgKi8KIAlmcHJpbnRmKGNiZGF0YS5yZWZzX2ZpbGUsICIjIHBhY2stcmVmcyB3aXRoOiBwZWVsZWQgXG4iKTsKQEAgLTEwMyw3ICsxMDIsNyBAQAogCWlmIChmZXJyb3IoY2JkYXRhLnJlZnNfZmlsZSkpCiAJCWRpZSgiZmFpbGVkIHRvIHdyaXRlIHJlZi1wYWNrIGZpbGUiKTsKIAlpZiAoZmZsdXNoKGNiZGF0YS5yZWZzX2ZpbGUpIHx8IGZzeW5jKGZkKSB8fCBmY2xvc2UoY2JkYXRhLnJlZnNfZmlsZSkpCi0JCWRpZSgiZmFpbGVkIHRvIHdyaXRlIHJlZi1wYWNrIGZpbGUgKCVzKSIsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiZmFpbGVkIHRvIHdyaXRlIHJlZi1wYWNrIGZpbGUiKTsKIAkvKgogCSAqIFNpbmNlIHRoZSBsb2NrIGZpbGUgd2FzIGZkb3BlbigpJ2VkIGFuZCB0aGVuIGZjbG9zZSgpJ2VkIGFib3ZlLAogCSAqIGFzc2lnbiAtMSB0byB0aGUgbG9jayBmaWxlIGRlc2NyaXB0b3Igc28gdGhhdCBjb21taXRfbG9ja19maWxlKCkKQEAgLTExMSw3ICsxMTAsNyBAQAogCSAqLwogCXBhY2tlZC5mZCA9IC0xOwogCWlmIChjb21taXRfbG9ja19maWxlKCZwYWNrZWQpIDwgMCkKLQkJZGllKCJ1bmFibGUgdG8gb3ZlcndyaXRlIG9sZCByZWYtcGFjayBmaWxlICglcykiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oInVuYWJsZSB0byBvdmVyd3JpdGUgb2xkIHJlZi1wYWNrIGZpbGUiKTsKIAlpZiAoY2JkYXRhLmZsYWdzICYgUEFDS19SRUZTX1BSVU5FKQogCQlwcnVuZV9yZWZzKGNiZGF0YS5yZWZfdG9fcHJ1bmUpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvcGFjay1yZXZpbmRleC5jIGIvcGFjay1yZXZpbmRleC5jCmluZGV4IDFkZTUzYzguLjc3YTA0NjUgMTAwNjQ0Ci0tLSBhL3BhY2stcmV2aW5kZXguYworKysgYi9wYWNrLXJldmluZGV4LmMKQEAgLTE0OSw4ICsxNDksNyBAQAogCWlmIChwYWNrX3JldmluZGV4X2hhc2hzeikgewogCQlpbnQgaTsKIAkJZm9yIChpID0gMDsgaSA8IHBhY2tfcmV2aW5kZXhfaGFzaHN6OyBpKyspCi0JCQlpZiAocGFja19yZXZpbmRleFtpXS5yZXZpbmRleCkKLQkJCQlmcmVlKHBhY2tfcmV2aW5kZXhbaV0ucmV2aW5kZXgpOworCQkJZnJlZShwYWNrX3JldmluZGV4W2ldLnJldmluZGV4KTsKIAkJZnJlZShwYWNrX3JldmluZGV4KTsKIAkJcGFja19yZXZpbmRleF9oYXNoc3ogPSAwOwogCX0KZGlmZiAtLWdpdCBhL3BhY2std3JpdGUuYyBiL3BhY2std3JpdGUuYwppbmRleCA3MDUzNTM4Li45ZjQ3Y2Y5IDEwMDY0NAotLS0gYS9wYWNrLXdyaXRlLmMKKysrIGIvcGFjay13cml0ZS5jCkBAIC0xNyw4ICsxNyw4IEBACiAgKiB0aGUgU0hBMSBoYXNoIG9mIHNvcnRlZCBvYmplY3QgbmFtZXMuIFRoZSBvYmplY3RzIGFycmF5IHBhc3NlZCBpbgogICogd2lsbCBiZSBzb3J0ZWQgYnkgU0hBMSBvbiBleGl0LgogICovCi1jaGFyICp3cml0ZV9pZHhfZmlsZShjaGFyICppbmRleF9uYW1lLCBzdHJ1Y3QgcGFja19pZHhfZW50cnkgKipvYmplY3RzLAotCQkgICAgIGludCBucl9vYmplY3RzLCB1bnNpZ25lZCBjaGFyICpzaGExKQorY29uc3QgY2hhciAqd3JpdGVfaWR4X2ZpbGUoY29uc3QgY2hhciAqaW5kZXhfbmFtZSwgc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqb2JqZWN0cywKKwkJCSAgIGludCBucl9vYmplY3RzLCB1bnNpZ25lZCBjaGFyICpzaGExKQogewogCXN0cnVjdCBzaGExZmlsZSAqZjsKIAlzdHJ1Y3QgcGFja19pZHhfZW50cnkgKipzb3J0ZWRfYnlfc2hhLCAqKmxpc3QsICoqbGFzdDsKQEAgLTUxLDcgKzUxLDcgQEAKIAkJZmQgPSBvcGVuKGluZGV4X25hbWUsIE9fQ1JFQVR8T19FWENMfE9fV1JPTkxZLCAwNjAwKTsKIAl9CiAJaWYgKGZkIDwgMCkKLQkJZGllKCJ1bmFibGUgdG8gY3JlYXRlICVzOiAlcyIsIGluZGV4X25hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygidW5hYmxlIHRvIGNyZWF0ZSAnJXMnIiwgaW5kZXhfbmFtZSk7CiAJZiA9IHNoYTFmZChmZCwgaW5kZXhfbmFtZSk7CiAKIAkvKiBpZiBsYXN0IG9iamVjdCdzIG9mZnNldCBpcyA+PSAyXjMxIHdlIHNob3VsZCB1c2UgaW5kZXggVjIgKi8KQEAgLTE3NCwxMSArMTc0LDExIEBACiAJZ2l0X1NIQTFfSW5pdCgmbmV3X3NoYTFfY3R4KTsKIAogCWlmIChsc2VlayhwYWNrX2ZkLCAwLCBTRUVLX1NFVCkgIT0gMCkKLQkJZGllKCJGYWlsZWQgc2Vla2luZyB0byBzdGFydCBvZiAlczogJXMiLCBwYWNrX25hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiRmFpbGVkIHNlZWtpbmcgdG8gc3RhcnQgb2YgJyVzJyIsIHBhY2tfbmFtZSk7CiAJaWYgKHJlYWRfaW5fZnVsbChwYWNrX2ZkLCAmaGRyLCBzaXplb2YoaGRyKSkgIT0gc2l6ZW9mKGhkcikpCi0JCWRpZSgiVW5hYmxlIHRvIHJlcmVhZCBoZWFkZXIgb2YgJXM6ICVzIiwgcGFja19uYW1lLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oIlVuYWJsZSB0byByZXJlYWQgaGVhZGVyIG9mICclcyciLCBwYWNrX25hbWUpOwogCWlmIChsc2VlayhwYWNrX2ZkLCAwLCBTRUVLX1NFVCkgIT0gMCkKLQkJZGllKCJGYWlsZWQgc2Vla2luZyB0byBzdGFydCBvZiAlczogJXMiLCBwYWNrX25hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiRmFpbGVkIHNlZWtpbmcgdG8gc3RhcnQgb2YgJyVzJyIsIHBhY2tfbmFtZSk7CiAJZ2l0X1NIQTFfVXBkYXRlKCZvbGRfc2hhMV9jdHgsICZoZHIsIHNpemVvZihoZHIpKTsKIAloZHIuaGRyX2VudHJpZXMgPSBodG9ubChvYmplY3RfY291bnQpOwogCWdpdF9TSEExX1VwZGF0ZSgmbmV3X3NoYTFfY3R4LCAmaGRyLCBzaXplb2YoaGRyKSk7CkBAIC0xOTUsNyArMTk1LDcgQEAKIAkJaWYgKCFuKQogCQkJYnJlYWs7CiAJCWlmIChuIDwgMCkKLQkJCWRpZSgiRmFpbGVkIHRvIGNoZWNrc3VtICVzOiAlcyIsIHBhY2tfbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygiRmFpbGVkIHRvIGNoZWNrc3VtICclcyciLCBwYWNrX25hbWUpOwogCQlnaXRfU0hBMV9VcGRhdGUoJm5ld19zaGExX2N0eCwgYnVmLCBuKTsKIAogCQlhbGlnbmVkX3N6IC09IG47CmRpZmYgLS1naXQgYS9wYWNrLmggYi9wYWNrLmgKaW5kZXggYTg4MzMzNC4uYjc1OWEyMyAxMDA2NDQKLS0tIGEvcGFjay5oCisrKyBiL3BhY2suaApAQCAtNTUsNyArNTUsNyBAQAogCW9mZl90IG9mZnNldDsKIH07CiAKLWV4dGVybiBjaGFyICp3cml0ZV9pZHhfZmlsZShjaGFyICppbmRleF9uYW1lLCBzdHJ1Y3QgcGFja19pZHhfZW50cnkgKipvYmplY3RzLCBpbnQgbnJfb2JqZWN0cywgdW5zaWduZWQgY2hhciAqc2hhMSk7CitleHRlcm4gY29uc3QgY2hhciAqd3JpdGVfaWR4X2ZpbGUoY29uc3QgY2hhciAqaW5kZXhfbmFtZSwgc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqb2JqZWN0cywgaW50IG5yX29iamVjdHMsIHVuc2lnbmVkIGNoYXIgKnNoYTEpOwogZXh0ZXJuIGludCBjaGVja19wYWNrX2NyYyhzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgc3RydWN0IHBhY2tfd2luZG93ICoqd19jdXJzLCBvZmZfdCBvZmZzZXQsIG9mZl90IGxlbiwgdW5zaWduZWQgaW50IG5yKTsKIGV4dGVybiBpbnQgdmVyaWZ5X3BhY2soc3RydWN0IHBhY2tlZF9naXQgKik7CiBleHRlcm4gdm9pZCBmaXh1cF9wYWNrX2hlYWRlcl9mb290ZXIoaW50LCB1bnNpZ25lZCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdWludDMyX3QsIHVuc2lnbmVkIGNoYXIgKiwgb2ZmX3QpOwpkaWZmIC0tZ2l0IGEvcGFnZXIuYyBiL3BhZ2VyLmMKaW5kZXggNDkyMTg0My4uZGFjMzU4ZiAxMDA2NDQKLS0tIGEvcGFnZXIuYworKysgYi9wYWdlci5jCkBAIC0yLDYgKzIsMTAgQEAKICNpbmNsdWRlICJydW4tY29tbWFuZC5oIgogI2luY2x1ZGUgInNpZ2NoYWluLmgiCiAKKyNpZm5kZWYgREVGQVVMVF9QQUdFUgorI2RlZmluZSBERUZBVUxUX1BBR0VSICJsZXNzIgorI2VuZGlmCisKIC8qCiAgKiBUaGlzIGlzIHNwbGl0IHVwIGZyb20gdGhlIHJlc3Qgb2YgZ2l0IHNvIHRoYXQgd2UgY2FuIGRvCiAgKiBzb21ldGhpbmcgZGlmZmVyZW50IG9uIFdpbmRvd3MuCkBAIC05LDcgKzEzLDcgQEAKIAogc3RhdGljIGludCBzcGF3bmVkX3BhZ2VyOwogCi0jaWZuZGVmIF9fTUlOR1czMl9fCisjaWZuZGVmIFdJTjMyCiBzdGF0aWMgdm9pZCBwYWdlcl9wcmVleGVjKHZvaWQpCiB7CiAJLyoKQEAgLTIxLDEyICsyNSwxMCBAQAogCUZEX1pFUk8oJmluKTsKIAlGRF9TRVQoMCwgJmluKTsKIAlzZWxlY3QoMSwgJmluLCBOVUxMLCAmaW4sIE5VTEwpOwotCi0Jc2V0ZW52KCJMRVNTIiwgIkZSU1giLCAwKTsKIH0KICNlbmRpZgogCi1zdGF0aWMgY29uc3QgY2hhciAqcGFnZXJfYXJndltdID0geyAic2giLCAiLWMiLCBOVUxMLCBOVUxMIH07CitzdGF0aWMgY29uc3QgY2hhciAqcGFnZXJfYXJndltdID0geyBOVUxMLCBOVUxMIH07CiBzdGF0aWMgc3RydWN0IGNoaWxkX3Byb2Nlc3MgcGFnZXJfcHJvY2VzczsKIAogc3RhdGljIHZvaWQgd2FpdF9mb3JfcGFnZXIodm9pZCkKQEAgLTQ2LDEyICs0OCwxNCBAQAogCXJhaXNlKHNpZ25vKTsKIH0KIAotdm9pZCBzZXR1cF9wYWdlcih2b2lkKQorY29uc3QgY2hhciAqZ2l0X3BhZ2VyKGludCBzdGRvdXRfaXNfdHR5KQogewotCWNvbnN0IGNoYXIgKnBhZ2VyID0gZ2V0ZW52KCJHSVRfUEFHRVIiKTsKKwljb25zdCBjaGFyICpwYWdlcjsKIAotCWlmICghaXNhdHR5KDEpKQotCQlyZXR1cm47CisJaWYgKCFzdGRvdXRfaXNfdHR5KQorCQlyZXR1cm4gTlVMTDsKKworCXBhZ2VyID0gZ2V0ZW52KCJHSVRfUEFHRVIiKTsKIAlpZiAoIXBhZ2VyKSB7CiAJCWlmICghcGFnZXJfcHJvZ3JhbSkKIAkJCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKQEAgLTYwLDE3ICs2NCwzMiBAQAogCWlmICghcGFnZXIpCiAJCXBhZ2VyID0gZ2V0ZW52KCJQQUdFUiIpOwogCWlmICghcGFnZXIpCi0JCXBhZ2VyID0gImxlc3MiOworCQlwYWdlciA9IERFRkFVTFRfUEFHRVI7CiAJZWxzZSBpZiAoISpwYWdlciB8fCAhc3RyY21wKHBhZ2VyLCAiY2F0IikpCisJCXBhZ2VyID0gTlVMTDsKKworCXJldHVybiBwYWdlcjsKK30KKwordm9pZCBzZXR1cF9wYWdlcih2b2lkKQoreworCWNvbnN0IGNoYXIgKnBhZ2VyID0gZ2l0X3BhZ2VyKGlzYXR0eSgxKSk7CisKKwlpZiAoIXBhZ2VyKQogCQlyZXR1cm47CiAKIAlzcGF3bmVkX3BhZ2VyID0gMTsgLyogbWVhbnMgd2UgYXJlIGVtaXR0aW5nIHRvIHRlcm1pbmFsICovCiAKIAkvKiBzcGF3biB0aGUgcGFnZXIgKi8KLQlwYWdlcl9hcmd2WzJdID0gcGFnZXI7CisJcGFnZXJfYXJndlswXSA9IHBhZ2VyOworCXBhZ2VyX3Byb2Nlc3MudXNlX3NoZWxsID0gMTsKIAlwYWdlcl9wcm9jZXNzLmFyZ3YgPSBwYWdlcl9hcmd2OwogCXBhZ2VyX3Byb2Nlc3MuaW4gPSAtMTsKLSNpZm5kZWYgX19NSU5HVzMyX18KKwlpZiAoIWdldGVudigiTEVTUyIpKSB7CisJCXN0YXRpYyBjb25zdCBjaGFyICplbnZbXSA9IHsgIkxFU1M9RlJTWCIsIE5VTEwgfTsKKwkJcGFnZXJfcHJvY2Vzcy5lbnYgPSBlbnY7CisJfQorI2lmbmRlZiBXSU4zMgogCXBhZ2VyX3Byb2Nlc3MucHJlZXhlY19jYiA9IHBhZ2VyX3ByZWV4ZWM7CiAjZW5kaWYKIAlpZiAoc3RhcnRfY29tbWFuZCgmcGFnZXJfcHJvY2VzcykpCmRpZmYgLS1naXQgYS9wYXJzZS1vcHRpb25zLmMgYi9wYXJzZS1vcHRpb25zLmMKaW5kZXggY2Y3MWJjZi4uZDIxODEyMiAxMDA2NDQKLS0tIGEvcGFyc2Utb3B0aW9ucy5jCisrKyBiL3BhcnNlLW9wdGlvbnMuYwpAQCAtMyw2ICszLDkgQEAKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgImNvbW1pdC5oIgogCitzdGF0aWMgaW50IHBhcnNlX29wdGlvbnNfdXNhZ2UoY29uc3QgY2hhciAqIGNvbnN0ICp1c2FnZXN0ciwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRzKTsKKwogI2RlZmluZSBPUFRfU0hPUlQgMQogI2RlZmluZSBPUFRfVU5TRVQgMgogCkBAIC0zMSwxMSArMzQsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZml4X2ZpbGVuYW1lKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqKmZpbGUpCit7CisJaWYgKCFmaWxlIHx8ICEqZmlsZSB8fCAhcHJlZml4IHx8IGlzX2Fic29sdXRlX3BhdGgoKmZpbGUpCisJICAgIHx8ICFzdHJjbXAoIi0iLCAqZmlsZSkpCisJCXJldHVybjsKKwkqZmlsZSA9IHhzdHJkdXAocHJlZml4X2ZpbGVuYW1lKHByZWZpeCwgc3RybGVuKHByZWZpeCksICpmaWxlKSk7Cit9CisKIHN0YXRpYyBpbnQgZ2V0X3ZhbHVlKHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKnAsCiAJCSAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBpbnQgZmxhZ3MpCiB7CiAJY29uc3QgY2hhciAqcywgKmFyZzsKIAljb25zdCBpbnQgdW5zZXQgPSBmbGFncyAmIE9QVF9VTlNFVDsKKwlpbnQgZXJyOwogCiAJaWYgKHVuc2V0ICYmIHAtPm9wdCkKIAkJcmV0dXJuIG9wdGVycm9yKG9wdCwgInRha2VzIG5vIHZhbHVlIiwgZmxhZ3MpOwpAQCAtNTAsNiArNjIsNyBAQAogCQkJLyogRkFMTFRIUk9VR0ggKi8KIAkJY2FzZSBPUFRJT05fQk9PTEVBTjoKIAkJY2FzZSBPUFRJT05fQklUOgorCQljYXNlIE9QVElPTl9ORUdCSVQ6CiAJCWNhc2UgT1BUSU9OX1NFVF9JTlQ6CiAJCWNhc2UgT1BUSU9OX1NFVF9QVFI6CiAJCQlyZXR1cm4gb3B0ZXJyb3Iob3B0LCAidGFrZXMgbm8gdmFsdWUiLCBmbGFncyk7CkBAIC02Niw2ICs3OSwxMyBAQAogCQkJKihpbnQgKilvcHQtPnZhbHVlIHw9IG9wdC0+ZGVmdmFsOwogCQlyZXR1cm4gMDsKIAorCWNhc2UgT1BUSU9OX05FR0JJVDoKKwkJaWYgKHVuc2V0KQorCQkJKihpbnQgKilvcHQtPnZhbHVlIHw9IG9wdC0+ZGVmdmFsOworCQllbHNlCisJCQkqKGludCAqKW9wdC0+dmFsdWUgJj0gfm9wdC0+ZGVmdmFsOworCQlyZXR1cm4gMDsKKwogCWNhc2UgT1BUSU9OX0JPT0xFQU46CiAJCSooaW50ICopb3B0LT52YWx1ZSA9IHVuc2V0ID8gMCA6ICooaW50ICopb3B0LT52YWx1ZSArIDE7CiAJCXJldHVybiAwOwpAQCAtODcsNiArMTA3LDE5IEBACiAJCQlyZXR1cm4gZ2V0X2FyZyhwLCBvcHQsIGZsYWdzLCAoY29uc3QgY2hhciAqKilvcHQtPnZhbHVlKTsKIAkJcmV0dXJuIDA7CiAKKwljYXNlIE9QVElPTl9GSUxFTkFNRToKKwkJZXJyID0gMDsKKwkJaWYgKHVuc2V0KQorCQkJKihjb25zdCBjaGFyICoqKW9wdC0+dmFsdWUgPSBOVUxMOworCQllbHNlIGlmIChvcHQtPmZsYWdzICYgUEFSU0VfT1BUX09QVEFSRyAmJiAhcC0+b3B0KQorCQkJKihjb25zdCBjaGFyICoqKW9wdC0+dmFsdWUgPSAoY29uc3QgY2hhciAqKW9wdC0+ZGVmdmFsOworCQllbHNlCisJCQllcnIgPSBnZXRfYXJnKHAsIG9wdCwgZmxhZ3MsIChjb25zdCBjaGFyICoqKW9wdC0+dmFsdWUpOworCisJCWlmICghZXJyKQorCQkJZml4X2ZpbGVuYW1lKHAtPnByZWZpeCwgKGNvbnN0IGNoYXIgKiopb3B0LT52YWx1ZSk7CisJCXJldHVybiBlcnI7CisKIAljYXNlIE9QVElPTl9DQUxMQkFDSzoKIAkJaWYgKHVuc2V0KQogCQkJcmV0dXJuICgqb3B0LT5jYWxsYmFjaykob3B0LCBOVUxMLCAxKSA/ICgtMSkgOiAwOwpAQCAtMTIxLDExICsxNTQsMzMgQEAKIAogc3RhdGljIGludCBwYXJzZV9zaG9ydF9vcHQoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqcCwgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucykKIHsKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uICpudW1vcHQgPSBOVUxMOworCiAJZm9yICg7IG9wdGlvbnMtPnR5cGUgIT0gT1BUSU9OX0VORDsgb3B0aW9ucysrKSB7CiAJCWlmIChvcHRpb25zLT5zaG9ydF9uYW1lID09ICpwLT5vcHQpIHsKIAkJCXAtPm9wdCA9IHAtPm9wdFsxXSA/IHAtPm9wdCArIDEgOiBOVUxMOwogCQkJcmV0dXJuIGdldF92YWx1ZShwLCBvcHRpb25zLCBPUFRfU0hPUlQpOwogCQl9CisKKwkJLyoKKwkJICogSGFuZGxlIHRoZSBudW1lcmljYWwgb3B0aW9uIGxhdGVyLCBleHBsaWNpdCBvbmUtZGlnaXQKKwkJICogb3B0aW9ucyB0YWtlIHByZWNlZGVuY2Ugb3ZlciBpdC4KKwkJICovCisJCWlmIChvcHRpb25zLT50eXBlID09IE9QVElPTl9OVU1CRVIpCisJCQludW1vcHQgPSBvcHRpb25zOworCX0KKwlpZiAobnVtb3B0ICYmIGlzZGlnaXQoKnAtPm9wdCkpIHsKKwkJc2l6ZV90IGxlbiA9IDE7CisJCWNoYXIgKmFyZzsKKwkJaW50IHJjOworCisJCXdoaWxlIChpc2RpZ2l0KHAtPm9wdFtsZW5dKSkKKwkJCWxlbisrOworCQlhcmcgPSB4bWVtZHVweihwLT5vcHQsIGxlbik7CisJCXAtPm9wdCA9IHAtPm9wdFtsZW5dID8gcC0+b3B0ICsgbGVuIDogTlVMTDsKKwkJcmMgPSAoKm51bW9wdC0+Y2FsbGJhY2spKG51bW9wdCwgYXJnLCAwKSA/ICgtMSkgOiAwOworCQlmcmVlKGFyZyk7CisJCXJldHVybiByYzsKIAl9CiAJcmV0dXJuIC0yOwogfQpAQCAtMTc4LDYgKzIzMyw5IEBACiAJCQkJYWJicmV2X2ZsYWdzID0gZmxhZ3M7CiAJCQkJY29udGludWU7CiAJCQl9CisJCQkvKiBuZWdhdGlvbiBhbGxvd2VkPyAqLworCQkJaWYgKG9wdGlvbnMtPmZsYWdzICYgUEFSU0VfT1BUX05PTkVHKQorCQkJCWNvbnRpbnVlOwogCQkJLyogbmVnYXRlZCBhbmQgYWJicmV2aWF0ZWQgdmVyeSBtdWNoPyAqLwogCQkJaWYgKCFwcmVmaXhjbXAoIm5vLSIsIGFyZykpIHsKIAkJCQlmbGFncyB8PSBPUFRfVU5TRVQ7CkBAIC0yMTUsNiArMjczLDI1IEBACiAJcmV0dXJuIC0yOwogfQogCitzdGF0aWMgaW50IHBhcnNlX25vZGFzaF9vcHQoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqcCwgY29uc3QgY2hhciAqYXJnLAorCQkJICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMpCit7CisJZm9yICg7IG9wdGlvbnMtPnR5cGUgIT0gT1BUSU9OX0VORDsgb3B0aW9ucysrKSB7CisJCWlmICghKG9wdGlvbnMtPmZsYWdzICYgUEFSU0VfT1BUX05PREFTSCkpCisJCQljb250aW51ZTsKKwkJaWYgKChvcHRpb25zLT5mbGFncyAmIFBBUlNFX09QVF9PUFRBUkcpIHx8CisJCSAgICAhKG9wdGlvbnMtPmZsYWdzICYgUEFSU0VfT1BUX05PQVJHKSkKKwkJCWRpZSgiQlVHOiBkYXNobGVzcyBvcHRpb25zIGRvbid0IHN1cHBvcnQgYXJndW1lbnRzIik7CisJCWlmICghKG9wdGlvbnMtPmZsYWdzICYgUEFSU0VfT1BUX05PTkVHKSkKKwkJCWRpZSgiQlVHOiBkYXNobGVzcyBvcHRpb25zIGRvbid0IHN1cHBvcnQgbmVnYXRpb24iKTsKKwkJaWYgKG9wdGlvbnMtPmxvbmdfbmFtZSkKKwkJCWRpZSgiQlVHOiBkYXNobGVzcyBvcHRpb25zIGNhbid0IGJlIGxvbmciKTsKKwkJaWYgKG9wdGlvbnMtPnNob3J0X25hbWUgPT0gYXJnWzBdICYmIGFyZ1sxXSA9PSAnXDAnKQorCQkJcmV0dXJuIGdldF92YWx1ZShwLCBvcHRpb25zLCBPUFRfU0hPUlQpOworCX0KKwlyZXR1cm4gLTI7Cit9CisKIHN0YXRpYyB2b2lkIGNoZWNrX3R5cG9zKGNvbnN0IGNoYXIgKmFyZywgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucykKIHsKIAlpZiAoc3RybGVuKGFyZykgPCAzKQpAQCAtMjM1LDEzICszMTIsMzcgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHBhcnNlX29wdGlvbnNfY2hlY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0cykKK3sKKwlpbnQgZXJyID0gMDsKKworCWZvciAoOyBvcHRzLT50eXBlICE9IE9QVElPTl9FTkQ7IG9wdHMrKykgeworCQlpZiAoKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX0xBU1RBUkdfREVGQVVMVCkgJiYKKwkJICAgIChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9PUFRBUkcpKSB7CisJCQlpZiAob3B0cy0+bG9uZ19uYW1lKSB7CisJCQkJZXJyb3IoImAtLSVzYCB1c2VzIGluY29tcGF0aWJsZSBmbGFncyAiCisJCQkJICAgICAgIkxBU1RBUkdfREVGQVVMVCBhbmQgT1BUQVJHIiwgb3B0cy0+bG9uZ19uYW1lKTsKKwkJCX0gZWxzZSB7CisJCQkJZXJyb3IoImAtJWNgIHVzZXMgaW5jb21wYXRpYmxlIGZsYWdzICIKKwkJCQkgICAgICAiTEFTVEFSR19ERUZBVUxUIGFuZCBPUFRBUkciLCBvcHRzLT5zaG9ydF9uYW1lKTsKKwkJCX0KKwkJCWVyciB8PSAxOworCQl9CisJfQorCisJaWYgKGVycikKKwkJZXhpdCgxMjkpOworfQorCiB2b2lkIHBhcnNlX29wdGlvbnNfc3RhcnQoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LAotCQkJIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgaW50IGZsYWdzKQorCQkJIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJIGludCBmbGFncykKIHsKIAltZW1zZXQoY3R4LCAwLCBzaXplb2YoKmN0eCkpOwogCWN0eC0+YXJnYyA9IGFyZ2MgLSAxOwogCWN0eC0+YXJndiA9IGFyZ3YgKyAxOwogCWN0eC0+b3V0ICA9IGFyZ3Y7CisJY3R4LT5wcmVmaXggPSBwcmVmaXg7CiAJY3R4LT5jcGlkeCA9ICgoZmxhZ3MgJiBQQVJTRV9PUFRfS0VFUF9BUkdWMCkgIT0gMCk7CiAJY3R4LT5mbGFncyA9IGZsYWdzOwogCWlmICgoZmxhZ3MgJiBQQVJTRV9PUFRfS0VFUF9VTktOT1dOKSAmJgpAQCAtMjU4LDYgKzM1OSw4IEBACiB7CiAJaW50IGludGVybmFsX2hlbHAgPSAhKGN0eC0+ZmxhZ3MgJiBQQVJTRV9PUFRfTk9fSU5URVJOQUxfSEVMUCk7CiAKKwlwYXJzZV9vcHRpb25zX2NoZWNrKG9wdGlvbnMpOworCiAJLyogd2UgbXVzdCByZXNldCAtPm9wdCwgdW5rbm93biBzaG9ydCBvcHRpb24gbGVhdmUgaXQgZGFuZ2xpbmcgKi8KIAljdHgtPm9wdCA9IE5VTEw7CiAKQEAgLTI2NSw2ICszNjgsOCBAQAogCQljb25zdCBjaGFyICphcmcgPSBjdHgtPmFyZ3ZbMF07CiAKIAkJaWYgKCphcmcgIT0gJy0nIHx8ICFhcmdbMV0pIHsKKwkJCWlmIChwYXJzZV9ub2Rhc2hfb3B0KGN0eCwgYXJnLCBvcHRpb25zKSA9PSAwKQorCQkJCWNvbnRpbnVlOwogCQkJaWYgKGN0eC0+ZmxhZ3MgJiBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKQogCQkJCWJyZWFrOwogCQkJY3R4LT5vdXRbY3R4LT5jcGlkeCsrXSA9IGN0eC0+YXJndlswXTsKQEAgLTMzOCwxMiArNDQzLDEzIEBACiAJcmV0dXJuIGN0eC0+Y3BpZHggKyBjdHgtPmFyZ2M7CiB9CiAKLWludCBwYXJzZV9vcHRpb25zKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucywKLQkJICBjb25zdCBjaGFyICogY29uc3QgdXNhZ2VzdHJbXSwgaW50IGZsYWdzKQoraW50IHBhcnNlX29wdGlvbnMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgsCisJCSAgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucywgY29uc3QgY2hhciAqIGNvbnN0IHVzYWdlc3RyW10sCisJCSAgaW50IGZsYWdzKQogewogCXN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgY3R4OwogCi0JcGFyc2Vfb3B0aW9uc19zdGFydCgmY3R4LCBhcmdjLCBhcmd2LCBmbGFncyk7CisJcGFyc2Vfb3B0aW9uc19zdGFydCgmY3R4LCBhcmdjLCBhcmd2LCBwcmVmaXgsIGZsYWdzKTsKIAlzd2l0Y2ggKHBhcnNlX29wdGlvbnNfc3RlcCgmY3R4LCBvcHRpb25zLCB1c2FnZXN0cikpIHsKIAljYXNlIFBBUlNFX09QVF9IRUxQOgogCQlleGl0KDEyOSk7CkBAIC0zNjEsMTAgKzQ2NywyNCBAQAogCXJldHVybiBwYXJzZV9vcHRpb25zX2VuZCgmY3R4KTsKIH0KIAorc3RhdGljIGludCB1c2FnZV9hcmdoKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdHMpCit7CisJY29uc3QgY2hhciAqczsKKwlpbnQgbGl0ZXJhbCA9IChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9MSVRFUkFMX0FSR0hFTFApIHx8ICFvcHRzLT5hcmdoOworCWlmIChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9PUFRBUkcpCisJCWlmIChvcHRzLT5sb25nX25hbWUpCisJCQlzID0gbGl0ZXJhbCA/ICJbPSVzXSIgOiAiWz08JXM+XSI7CisJCWVsc2UKKwkJCXMgPSBsaXRlcmFsID8gIlslc10iIDogIls8JXM+XSI7CisJZWxzZQorCQlzID0gbGl0ZXJhbCA/ICIgJXMiIDogIiA8JXM+IjsKKwlyZXR1cm4gZnByaW50ZihzdGRlcnIsIHMsIG9wdHMtPmFyZ2ggPyBvcHRzLT5hcmdoIDogIi4uLiIpOworfQorCiAjZGVmaW5lIFVTQUdFX09QVFNfV0lEVEggMjQKICNkZWZpbmUgVVNBR0VfR0FQICAgICAgICAgMgogCi1pbnQgdXNhZ2Vfd2l0aF9vcHRpb25zX2ludGVybmFsKGNvbnN0IGNoYXIgKiBjb25zdCAqdXNhZ2VzdHIsCitzdGF0aWMgaW50IHVzYWdlX3dpdGhfb3B0aW9uc19pbnRlcm5hbChjb25zdCBjaGFyICogY29uc3QgKnVzYWdlc3RyLAogCQkJCWNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdHMsIGludCBmdWxsKQogewogCWlmICghdXNhZ2VzdHIpCkBAIC0zOTcsNTEgKzUxNywyMyBAQAogCQkJY29udGludWU7CiAKIAkJcG9zID0gZnByaW50ZihzdGRlcnIsICIgICAgIik7Ci0JCWlmIChvcHRzLT5zaG9ydF9uYW1lKQotCQkJcG9zICs9IGZwcmludGYoc3RkZXJyLCAiLSVjIiwgb3B0cy0+c2hvcnRfbmFtZSk7CisJCWlmIChvcHRzLT5zaG9ydF9uYW1lICYmICEob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfTkVHSEVMUCkpIHsKKwkJCWlmIChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9OT0RBU0gpCisJCQkJcG9zICs9IGZwcmludGYoc3RkZXJyLCAiJWMiLCBvcHRzLT5zaG9ydF9uYW1lKTsKKwkJCWVsc2UKKwkJCQlwb3MgKz0gZnByaW50ZihzdGRlcnIsICItJWMiLCBvcHRzLT5zaG9ydF9uYW1lKTsKKwkJfQogCQlpZiAob3B0cy0+bG9uZ19uYW1lICYmIG9wdHMtPnNob3J0X25hbWUpCiAJCQlwb3MgKz0gZnByaW50ZihzdGRlcnIsICIsICIpOwogCQlpZiAob3B0cy0+bG9uZ19uYW1lKQotCQkJcG9zICs9IGZwcmludGYoc3RkZXJyLCAiLS0lcyIsIG9wdHMtPmxvbmdfbmFtZSk7CisJCQlwb3MgKz0gZnByaW50ZihzdGRlcnIsICItLSVzJXMiLAorCQkJCShvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9ORUdIRUxQKSA/ICAibm8tIiA6ICIiLAorCQkJCW9wdHMtPmxvbmdfbmFtZSk7CisJCWlmIChvcHRzLT50eXBlID09IE9QVElPTl9OVU1CRVIpCisJCQlwb3MgKz0gZnByaW50ZihzdGRlcnIsICItTlVNIik7CiAKLQkJc3dpdGNoIChvcHRzLT50eXBlKSB7Ci0JCWNhc2UgT1BUSU9OX0FSR1VNRU5UOgotCQkJYnJlYWs7Ci0JCWNhc2UgT1BUSU9OX0lOVEVHRVI6Ci0JCQlpZiAob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfT1BUQVJHKQotCQkJCWlmIChvcHRzLT5sb25nX25hbWUpCi0JCQkJCXBvcyArPSBmcHJpbnRmKHN0ZGVyciwgIls9PG4+XSIpOwotCQkJCWVsc2UKLQkJCQkJcG9zICs9IGZwcmludGYoc3RkZXJyLCAiWzxuPl0iKTsKLQkJCWVsc2UKLQkJCQlwb3MgKz0gZnByaW50ZihzdGRlcnIsICIgPG4+Iik7Ci0JCQlicmVhazsKLQkJY2FzZSBPUFRJT05fQ0FMTEJBQ0s6Ci0JCQlpZiAob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfTk9BUkcpCi0JCQkJYnJlYWs7Ci0JCQkvKiBGQUxMVEhST1VHSCAqLwotCQljYXNlIE9QVElPTl9TVFJJTkc6Ci0JCQlpZiAob3B0cy0+YXJnaCkgewotCQkJCWlmIChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9PUFRBUkcpCi0JCQkJCWlmIChvcHRzLT5sb25nX25hbWUpCi0JCQkJCQlwb3MgKz0gZnByaW50ZihzdGRlcnIsICJbPTwlcz5dIiwgb3B0cy0+YXJnaCk7Ci0JCQkJCWVsc2UKLQkJCQkJCXBvcyArPSBmcHJpbnRmKHN0ZGVyciwgIls8JXM+XSIsIG9wdHMtPmFyZ2gpOwotCQkJCWVsc2UKLQkJCQkJcG9zICs9IGZwcmludGYoc3RkZXJyLCAiIDwlcz4iLCBvcHRzLT5hcmdoKTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX09QVEFSRykKLQkJCQkJaWYgKG9wdHMtPmxvbmdfbmFtZSkKLQkJCQkJCXBvcyArPSBmcHJpbnRmKHN0ZGVyciwgIls9Li4uXSIpOwotCQkJCQllbHNlCi0JCQkJCQlwb3MgKz0gZnByaW50ZihzdGRlcnIsICJbLi4uXSIpOwotCQkJCWVsc2UKLQkJCQkJcG9zICs9IGZwcmludGYoc3RkZXJyLCAiIC4uLiIpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6IC8qIE9QVElPTl97QklULEJPT0xFQU4sU0VUX0lOVCxTRVRfUFRSfSAqLwotCQkJYnJlYWs7Ci0JCX0KKwkJaWYgKCEob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfTk9BUkcpKQorCQkJcG9zICs9IHVzYWdlX2FyZ2gob3B0cyk7CiAKIAkJaWYgKHBvcyA8PSBVU0FHRV9PUFRTX1dJRFRIKQogCQkJcGFkID0gVVNBR0VfT1BUU19XSURUSCAtIHBvczsKQEAgLTQ2Myw4ICs1NTUsMTYgQEAKIAlleGl0KDEyOSk7CiB9CiAKLWludCBwYXJzZV9vcHRpb25zX3VzYWdlKGNvbnN0IGNoYXIgKiBjb25zdCAqdXNhZ2VzdHIsCi0JCQljb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRzKQordm9pZCB1c2FnZV9tc2dfb3B0KGNvbnN0IGNoYXIgKm1zZywKKwkJICAgY29uc3QgY2hhciAqIGNvbnN0ICp1c2FnZXN0ciwKKwkJICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucykKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIiVzXG5cbiIsIG1zZyk7CisJdXNhZ2Vfd2l0aF9vcHRpb25zKHVzYWdlc3RyLCBvcHRpb25zKTsKK30KKworc3RhdGljIGludCBwYXJzZV9vcHRpb25zX3VzYWdlKGNvbnN0IGNoYXIgKiBjb25zdCAqdXNhZ2VzdHIsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0cykKIHsKIAlyZXR1cm4gdXNhZ2Vfd2l0aF9vcHRpb25zX2ludGVybmFsKHVzYWdlc3RyLCBvcHRzLCAwKTsKIH0KQEAgLTUzNywxNCArNjM3LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFRoaXMgc2hvdWxkIHJlYWxseSBiZSBPUFRJT05fRklMRU5BTUUgdHlwZSBhcyBhIHBhcnQgb2YKLSAqIHBhcnNlX29wdGlvbnMgdGhhdCB0YWtlIHByZWZpeCB0byBkbyB0aGlzIHdoaWxlIHBhcnNpbmcuCi0gKi8KLWV4dGVybiBjb25zdCBjaGFyICpwYXJzZV9vcHRpb25zX2ZpeF9maWxlbmFtZShjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKmZpbGUpCitpbnQgcGFyc2Vfb3B0X3RlcnRpYXJ5KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCiB7Ci0JaWYgKCFmaWxlIHx8ICFwcmVmaXggfHwgaXNfYWJzb2x1dGVfcGF0aChmaWxlKSB8fCAhc3RyY21wKCItIiwgZmlsZSkpCi0JCXJldHVybiBmaWxlOwotCXJldHVybiBwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBzdHJsZW4ocHJlZml4KSwgZmlsZSk7CisJaW50ICp0YXJnZXQgPSBvcHQtPnZhbHVlOworCSp0YXJnZXQgPSB1bnNldCA/IDIgOiAxOworCXJldHVybiAwOwogfQotCmRpZmYgLS1naXQgYS9wYXJzZS1vcHRpb25zLmggYi9wYXJzZS1vcHRpb25zLmgKaW5kZXggYjU0ZWVjMS4uMGM5OTY5MSAxMDA2NDQKLS0tIGEvcGFyc2Utb3B0aW9ucy5oCisrKyBiL3BhcnNlLW9wdGlvbnMuaApAQCAtNiw4ICs2LDEwIEBACiAJT1BUSU9OX0VORCwKIAlPUFRJT05fQVJHVU1FTlQsCiAJT1BUSU9OX0dST1VQLAorCU9QVElPTl9OVU1CRVIsCiAJLyogb3B0aW9ucyB3aXRoIG5vIGFyZ3VtZW50cyAqLwogCU9QVElPTl9CSVQsCisJT1BUSU9OX05FR0JJVCwKIAlPUFRJT05fQk9PTEVBTiwgLyogX0lOQ1Igd291bGQgaGF2ZSBiZWVuIGEgYmV0dGVyIG5hbWUgKi8KIAlPUFRJT05fU0VUX0lOVCwKIAlPUFRJT05fU0VUX1BUUiwKQEAgLTE1LDYgKzE3LDcgQEAKIAlPUFRJT05fU1RSSU5HLAogCU9QVElPTl9JTlRFR0VSLAogCU9QVElPTl9DQUxMQkFDSywKKwlPUFRJT05fRklMRU5BTUUKIH07CiAKIGVudW0gcGFyc2Vfb3B0X2ZsYWdzIHsKQEAgLTMxLDYgKzM0LDkgQEAKIAlQQVJTRV9PUFRfTk9ORUcgICA9IDQsCiAJUEFSU0VfT1BUX0hJRERFTiAgPSA4LAogCVBBUlNFX09QVF9MQVNUQVJHX0RFRkFVTFQgPSAxNiwKKwlQQVJTRV9PUFRfTk9EQVNIID0gMzIsCisJUEFSU0VfT1BUX0xJVEVSQUxfQVJHSEVMUCA9IDY0LAorCVBBUlNFX09QVF9ORUdIRUxQID0gMTI4LAogfTsKIAogc3RydWN0IG9wdGlvbjsKQEAgLTYyLDEwICs2OCwyMiBAQAogICogYGZsYWdzYDo6CiAgKiAgIG1hc2sgb2YgcGFyc2Vfb3B0X29wdGlvbl9mbGFncy4KICAqICAgUEFSU0VfT1BUX09QVEFSRzogc2F5cyB0aGF0IHRoZSBhcmd1bWVudCBpcyBvcHRpb25hbCAobm90IGZvciBCT09MRUFOcykKLSAqICAgUEFSU0VfT1BUX05PQVJHOiBzYXlzIHRoYXQgdGhpcyBvcHRpb24gdGFrZXMgbm8gYXJndW1lbnQsIGZvciBDQUxMQkFDS3MKKyAqICAgUEFSU0VfT1BUX05PQVJHOiBzYXlzIHRoYXQgdGhpcyBvcHRpb24gdGFrZXMgbm8gYXJndW1lbnQKICAqICAgUEFSU0VfT1BUX05PTkVHOiBzYXlzIHRoYXQgdGhpcyBvcHRpb24gY2Fubm90IGJlIG5lZ2F0ZWQKLSAqICAgUEFSU0VfT1BUX0hJRERFTiB0aGlzIG9wdGlvbiBpcyBza2lwcGVkIGluIHRoZSBkZWZhdWx0IHVzYWdlLCBzaG93ZWQgaW4KLSAqICAgICAgICAgICAgICAgICAgICB0aGUgbG9uZyBvbmUuCisgKiAgIFBBUlNFX09QVF9ISURERU46IHRoaXMgb3B0aW9uIGlzIHNraXBwZWQgaW4gdGhlIGRlZmF1bHQgdXNhZ2UsIGFuZAorICogICAgICAgICAgICAgICAgICAgICBzaG93biBvbmx5IGluIHRoZSBmdWxsIHVzYWdlLgorICogICBQQVJTRV9PUFRfTEFTVEFSR19ERUZBVUxUOiBzYXlzIHRoYXQgdGhpcyBvcHRpb24gd2lsbCB0YWtlIHRoZSBkZWZhdWx0CisgKgkJCQl2YWx1ZSBpZiBubyBhcmd1bWVudCBpcyBnaXZlbiB3aGVuIHRoZSBvcHRpb24KKyAqCQkJCWlzIGxhc3Qgb24gdGhlIGNvbW1hbmQgbGluZS4gSWYgdGhlIG9wdGlvbiBpcworICoJCQkJbm90IGxhc3QgaXQgd2lsbCByZXF1aXJlIGFuIGFyZ3VtZW50LgorICoJCQkJU2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggUEFSU0VfT1BUX09QVEFSRy4KKyAqICAgUEFSU0VfT1BUX05PREFTSDogdGhpcyBvcHRpb24gZG9lc24ndCBzdGFydCB3aXRoIGEgZGFzaC4KKyAqICAgUEFSU0VfT1BUX0xJVEVSQUxfQVJHSEVMUDogc2F5cyB0aGF0IGFyZ2ggc2hvdWxkbid0IGJlIGVuY2xvc2VkIGluIGJyYWNrZXRzCisgKgkJCQkoaS5lLiAnPGFyZ2g+JykgaW4gdGhlIGhlbHAgbWVzc2FnZS4KKyAqCQkJCVVzZWZ1bCBmb3Igb3B0aW9ucyB3aXRoIG11bHRpcGxlIHBhcmFtZXRlcnMuCisgKiAgIFBBUlNFX09QVF9ORUdIRUxQOiBzYXlzIHRoYXQgdGhlIGxvbmcgb3B0aW9uIHNob3VsZCBhbHdheXMgYmUgc2hvd24gd2l0aAorICoJCQkJdGhlIC0tbm8gcHJlZml4IGluIHRoZSB1c2FnZSBtZXNzYWdlLiBTb21ldGltZXMKKyAqCQkJCXVzZWZ1bCBmb3IgdXNlcnMgb2YgT1BUSU9OX05FR0JJVC4KICAqCiAgKiBgY2FsbGJhY2tgOjoKICAqICAgcG9pbnRlciB0byB0aGUgY2FsbGJhY2sgdG8gdXNlIGZvciBPUFRJT05fQ0FMTEJBQ0suCkBAIC05MCwzMSArMTA4LDQ5IEBACiB9OwogCiAjZGVmaW5lIE9QVF9FTkQoKSAgICAgICAgICAgICAgICAgICB7IE9QVElPTl9FTkQgfQotI2RlZmluZSBPUFRfQVJHVU1FTlQobCwgaCkgICAgICAgICAgeyBPUFRJT05fQVJHVU1FTlQsIDAsIChsKSwgTlVMTCwgTlVMTCwgKGgpIH0KKyNkZWZpbmUgT1BUX0FSR1VNRU5UKGwsIGgpICAgICAgICAgIHsgT1BUSU9OX0FSR1VNRU5ULCAwLCAobCksIE5VTEwsIE5VTEwsIFwKKwkJCQkgICAgICAoaCksIFBBUlNFX09QVF9OT0FSR30KICNkZWZpbmUgT1BUX0dST1VQKGgpICAgICAgICAgICAgICAgIHsgT1BUSU9OX0dST1VQLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCAoaCkgfQotI2RlZmluZSBPUFRfQklUKHMsIGwsIHYsIGgsIGIpICAgICAgeyBPUFRJT05fQklULCAocyksIChsKSwgKHYpLCBOVUxMLCAoaCksIDAsIE5VTEwsIChiKSB9Ci0jZGVmaW5lIE9QVF9CT09MRUFOKHMsIGwsIHYsIGgpICAgICB7IE9QVElPTl9CT09MRUFOLCAocyksIChsKSwgKHYpLCBOVUxMLCAoaCkgfQotI2RlZmluZSBPUFRfU0VUX0lOVChzLCBsLCB2LCBoLCBpKSAgeyBPUFRJT05fU0VUX0lOVCwgKHMpLCAobCksICh2KSwgTlVMTCwgKGgpLCAwLCBOVUxMLCAoaSkgfQotI2RlZmluZSBPUFRfU0VUX1BUUihzLCBsLCB2LCBoLCBwKSAgeyBPUFRJT05fU0VUX1BUUiwgKHMpLCAobCksICh2KSwgTlVMTCwgKGgpLCAwLCBOVUxMLCAocCkgfQotI2RlZmluZSBPUFRfSU5URUdFUihzLCBsLCB2LCBoKSAgICAgeyBPUFRJT05fSU5URUdFUiwgKHMpLCAobCksICh2KSwgTlVMTCwgKGgpIH0KKyNkZWZpbmUgT1BUX0JJVChzLCBsLCB2LCBoLCBiKSAgICAgIHsgT1BUSU9OX0JJVCwgKHMpLCAobCksICh2KSwgTlVMTCwgKGgpLCBcCisJCQkJICAgICAgUEFSU0VfT1BUX05PQVJHLCBOVUxMLCAoYikgfQorI2RlZmluZSBPUFRfTkVHQklUKHMsIGwsIHYsIGgsIGIpICAgeyBPUFRJT05fTkVHQklULCAocyksIChsKSwgKHYpLCBOVUxMLCBcCisJCQkJICAgICAgKGgpLCBQQVJTRV9PUFRfTk9BUkcsIE5VTEwsIChiKSB9CisjZGVmaW5lIE9QVF9CT09MRUFOKHMsIGwsIHYsIGgpICAgICB7IE9QVElPTl9CT09MRUFOLCAocyksIChsKSwgKHYpLCBOVUxMLCBcCisJCQkJICAgICAgKGgpLCBQQVJTRV9PUFRfTk9BUkcgfQorI2RlZmluZSBPUFRfU0VUX0lOVChzLCBsLCB2LCBoLCBpKSAgeyBPUFRJT05fU0VUX0lOVCwgKHMpLCAobCksICh2KSwgTlVMTCwgXAorCQkJCSAgICAgIChoKSwgUEFSU0VfT1BUX05PQVJHLCBOVUxMLCAoaSkgfQorI2RlZmluZSBPUFRfU0VUX1BUUihzLCBsLCB2LCBoLCBwKSAgeyBPUFRJT05fU0VUX1BUUiwgKHMpLCAobCksICh2KSwgTlVMTCwgXAorCQkJCSAgICAgIChoKSwgUEFSU0VfT1BUX05PQVJHLCBOVUxMLCAocCkgfQorI2RlZmluZSBPUFRfSU5URUdFUihzLCBsLCB2LCBoKSAgICAgeyBPUFRJT05fSU5URUdFUiwgKHMpLCAobCksICh2KSwgIm4iLCAoaCkgfQogI2RlZmluZSBPUFRfU1RSSU5HKHMsIGwsIHYsIGEsIGgpICAgeyBPUFRJT05fU1RSSU5HLCAgKHMpLCAobCksICh2KSwgKGEpLCAoaCkgfQorI2RlZmluZSBPUFRfVVlOKHMsIGwsIHYsIGgpICAgICAgICAgeyBPUFRJT05fQ0FMTEJBQ0ssIChzKSwgKGwpLCAodiksIE5VTEwsIFwKKwkJCQkgICAgICAoaCksIFBBUlNFX09QVF9OT0FSRywgJnBhcnNlX29wdF90ZXJ0aWFyeSB9CiAjZGVmaW5lIE9QVF9EQVRFKHMsIGwsIHYsIGgpIFwKIAl7IE9QVElPTl9DQUxMQkFDSywgKHMpLCAobCksICh2KSwgInRpbWUiLChoKSwgMCwgXAogCSAgcGFyc2Vfb3B0X2FwcHJveGlkYXRlX2NiIH0KICNkZWZpbmUgT1BUX0NBTExCQUNLKHMsIGwsIHYsIGEsIGgsIGYpIFwKIAl7IE9QVElPTl9DQUxMQkFDSywgKHMpLCAobCksICh2KSwgKGEpLCAoaCksIDAsIChmKSB9CisjZGVmaW5lIE9QVF9OVU1CRVJfQ0FMTEJBQ0sodiwgaCwgZikgXAorCXsgT1BUSU9OX05VTUJFUiwgMCwgTlVMTCwgKHYpLCBOVUxMLCAoaCksIFwKKwkgIFBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywgKGYpIH0KKyNkZWZpbmUgT1BUX0ZJTEVOQU1FKHMsIGwsIHYsIGgpICAgIHsgT1BUSU9OX0ZJTEVOQU1FLCAocyksIChsKSwgKHYpLCBcCisJCQkJICAgICAgICJGSUxFIiwgKGgpIH0KIAogLyogcGFyc2Vfb3B0aW9ucygpIHdpbGwgZmlsdGVyIG91dCB0aGUgcHJvY2Vzc2VkIG9wdGlvbnMgYW5kIGxlYXZlIHRoZQogICogbm9uLW9wdGlvbiBhcmd1bWVudHMgaW4gYXJndltdLgogICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBsZWZ0IGluIGFyZ3ZbXS4KICAqLwotZXh0ZXJuIGludCBwYXJzZV9vcHRpb25zKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKK2V4dGVybiBpbnQgcGFyc2Vfb3B0aW9ucyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCB1c2FnZXN0cltdLCBpbnQgZmxhZ3MpOwogCiBleHRlcm4gTk9SRVRVUk4gdm9pZCB1c2FnZV93aXRoX29wdGlvbnMoY29uc3QgY2hhciAqIGNvbnN0ICp1c2FnZXN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zKTsKIAorZXh0ZXJuIE5PUkVUVVJOIHZvaWQgdXNhZ2VfbXNnX29wdChjb25zdCBjaGFyICptc2csCisJCQkJICAgY29uc3QgY2hhciAqIGNvbnN0ICp1c2FnZXN0ciwKKwkJCQkgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zKTsKKwogLyotLS0tLSBpbmNyZW1lbnRhbCBhZHZhbmNlZCBBUElzIC0tLS0tKi8KIAogZW51bSB7CkBAIC0xMzQsMTMgKzE3MCwxMiBAQAogCWludCBhcmdjLCBjcGlkeDsKIAljb25zdCBjaGFyICpvcHQ7CiAJaW50IGZsYWdzOworCWNvbnN0IGNoYXIgKnByZWZpeDsKIH07CiAKLWV4dGVybiBpbnQgcGFyc2Vfb3B0aW9uc191c2FnZShjb25zdCBjaGFyICogY29uc3QgKnVzYWdlc3RyLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdHMpOwotCiBleHRlcm4gdm9pZCBwYXJzZV9vcHRpb25zX3N0YXJ0KHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCwKLQkJCQlpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGludCBmbGFncyk7CisJCQkJaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJaW50IGZsYWdzKTsKIAogZXh0ZXJuIGludCBwYXJzZV9vcHRpb25zX3N0ZXAoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LAogCQkJICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucywKQEAgLTE1NCw2ICsxODksNyBAQAogZXh0ZXJuIGludCBwYXJzZV9vcHRfYXBwcm94aWRhdGVfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBjb25zdCBjaGFyICosIGludCk7CiBleHRlcm4gaW50IHBhcnNlX29wdF92ZXJib3NpdHlfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBjb25zdCBjaGFyICosIGludCk7CiBleHRlcm4gaW50IHBhcnNlX29wdF93aXRoX2NvbW1pdChjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiBpbnQgcGFyc2Vfb3B0X3RlcnRpYXJ5KGNvbnN0IHN0cnVjdCBvcHRpb24gKiwgY29uc3QgY2hhciAqLCBpbnQpOwogCiAjZGVmaW5lIE9QVF9fVkVSQk9TRSh2YXIpICBPUFRfQk9PTEVBTigndicsICJ2ZXJib3NlIiwgKHZhciksICJiZSB2ZXJib3NlIikKICNkZWZpbmUgT1BUX19RVUlFVCh2YXIpICAgIE9QVF9CT09MRUFOKCdxJywgInF1aWV0IiwgICAodmFyKSwgImJlIHF1aWV0IikKQEAgLTE2OCw2ICsyMDQsNCBAQAogCSAgInVzZSA8bj4gZGlnaXRzIHRvIGRpc3BsYXkgU0hBLTFzIiwgXAogCSAgUEFSU0VfT1BUX09QVEFSRywgJnBhcnNlX29wdF9hYmJyZXZfY2IsIDAgfQogCi1leHRlcm4gY29uc3QgY2hhciAqcGFyc2Vfb3B0aW9uc19maXhfZmlsZW5hbWUoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpmaWxlKTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9wYXRjaC1kZWx0YS5jIGIvcGF0Y2gtZGVsdGEuYwppbmRleCBlZjc0OGNlLi5kMjE4ZmFhIDEwMDY0NAotLS0gYS9wYXRjaC1kZWx0YS5jCisrKyBiL3BhdGNoLWRlbHRhLmMKQEAgLTIsNyArMiw3IEBACiAgKiBwYXRjaC1kZWx0YS5jOgogICogcmVjcmVhdGUgYSBidWZmZXIgZnJvbSBhIHNvdXJjZSBhbmQgdGhlIGRlbHRhIHByb2R1Y2VkIGJ5IGRpZmYtZGVsdGEuYwogICoKLSAqIChDKSAyMDA1IE5pY29sYXMgUGl0cmUgPG5pY29AY2FtLm9yZz4KKyAqIChDKSAyMDA1IE5pY29sYXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+CiAgKgogICogVGhpcyBjb2RlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0zMyw4ICszMyw3IEBACiAKIAkvKiBub3cgdGhlIHJlc3VsdCBzaXplICovCiAJc2l6ZSA9IGdldF9kZWx0YV9oZHJfc2l6ZSgmZGF0YSwgdG9wKTsKLQlkc3RfYnVmID0geG1hbGxvYyhzaXplICsgMSk7Ci0JZHN0X2J1ZltzaXplXSA9IDA7CisJZHN0X2J1ZiA9IHhtYWxsb2N6KHNpemUpOwogCiAJb3V0ID0gZHN0X2J1ZjsKIAl3aGlsZSAoZGF0YSA8IHRvcCkgewpkaWZmIC0tZ2l0IGEvcGF0aC5jIGIvcGF0aC5jCmluZGV4IDhhMGE2NzQuLmFhYTkzNDUgMTAwNjQ0Ci0tLSBhL3BhdGguYworKysgYi9wYXRoLmMKQEAgLTExLDYgKzExLDcgQEAKICAqIHdoaWNoIGlzIHdoYXQgaXQncyBkZXNpZ25lZCBmb3IuCiAgKi8KICNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgogCiBzdGF0aWMgY2hhciBiYWRfcGF0aFtdID0gIi9iYWQtcGF0aC8iOwogCkBAIC0xMzksNiArMTQwLDEwMSBAQAogCXJldHVybiBta3N0ZW1wKHBhdGgpOwogfQogCisvKiBnaXRfbWtzdGVtcHMoKSAtIGNyZWF0ZSB0bXAgZmlsZSB3aXRoIHN1ZmZpeCBob25vcmluZyBUTVBESVIgdmFyaWFibGUuICovCitpbnQgZ2l0X21rc3RlbXBzKGNoYXIgKnBhdGgsIHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKnRlbXBsYXRlLCBpbnQgc3VmZml4X2xlbikKK3sKKwljb25zdCBjaGFyICp0bXA7CisJc2l6ZV90IG47CisKKwl0bXAgPSBnZXRlbnYoIlRNUERJUiIpOworCWlmICghdG1wKQorCQl0bXAgPSAiL3RtcCI7CisJbiA9IHNucHJpbnRmKHBhdGgsIGxlbiwgIiVzLyVzIiwgdG1wLCB0ZW1wbGF0ZSk7CisJaWYgKGxlbiA8PSBuKSB7CisJCWVycm5vID0gRU5BTUVUT09MT05HOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiBta3N0ZW1wcyhwYXRoLCBzdWZmaXhfbGVuKTsKK30KKworLyogQWRhcHRlZCBmcm9tIGxpYmliZXJ0eSdzIG1rc3RlbXAuYy4gKi8KKworI3VuZGVmIFRNUF9NQVgKKyNkZWZpbmUgVE1QX01BWCAxNjM4NAorCitpbnQgZ2l0X21rc3RlbXBzX21vZGUoY2hhciAqcGF0dGVybiwgaW50IHN1ZmZpeF9sZW4sIGludCBtb2RlKQoreworCXN0YXRpYyBjb25zdCBjaGFyIGxldHRlcnNbXSA9CisJCSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIKKwkJIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgorCQkiMDEyMzQ1Njc4OSI7CisJc3RhdGljIGNvbnN0IGludCBudW1fbGV0dGVycyA9IDYyOworCXVpbnQ2NF90IHZhbHVlOworCXN0cnVjdCB0aW1ldmFsIHR2OworCWNoYXIgKnRlbXBsYXRlOworCXNpemVfdCBsZW47CisJaW50IGZkLCBjb3VudDsKKworCWxlbiA9IHN0cmxlbihwYXR0ZXJuKTsKKworCWlmIChsZW4gPCA2ICsgc3VmZml4X2xlbikgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChzdHJuY21wKCZwYXR0ZXJuW2xlbiAtIDYgLSBzdWZmaXhfbGVuXSwgIlhYWFhYWCIsIDYpKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gLTE7CisJfQorCisJLyoKKwkgKiBSZXBsYWNlIHBhdHRlcm4ncyBYWFhYWFggY2hhcmFjdGVycyB3aXRoIHJhbmRvbW5lc3MuCisJICogVHJ5IFRNUF9NQVggZGlmZmVyZW50IGZpbGVuYW1lcy4KKwkgKi8KKwlnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsKKwl2YWx1ZSA9ICgoc2l6ZV90KSh0di50dl91c2VjIDw8IDE2KSkgXiB0di50dl9zZWMgXiBnZXRwaWQoKTsKKwl0ZW1wbGF0ZSA9ICZwYXR0ZXJuW2xlbiAtIDYgLSBzdWZmaXhfbGVuXTsKKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBUTVBfTUFYOyArK2NvdW50KSB7CisJCXVpbnQ2NF90IHYgPSB2YWx1ZTsKKwkJLyogRmlsbCBpbiB0aGUgcmFuZG9tIGJpdHMuICovCisJCXRlbXBsYXRlWzBdID0gbGV0dGVyc1t2ICUgbnVtX2xldHRlcnNdOyB2IC89IG51bV9sZXR0ZXJzOworCQl0ZW1wbGF0ZVsxXSA9IGxldHRlcnNbdiAlIG51bV9sZXR0ZXJzXTsgdiAvPSBudW1fbGV0dGVyczsKKwkJdGVtcGxhdGVbMl0gPSBsZXR0ZXJzW3YgJSBudW1fbGV0dGVyc107IHYgLz0gbnVtX2xldHRlcnM7CisJCXRlbXBsYXRlWzNdID0gbGV0dGVyc1t2ICUgbnVtX2xldHRlcnNdOyB2IC89IG51bV9sZXR0ZXJzOworCQl0ZW1wbGF0ZVs0XSA9IGxldHRlcnNbdiAlIG51bV9sZXR0ZXJzXTsgdiAvPSBudW1fbGV0dGVyczsKKwkJdGVtcGxhdGVbNV0gPSBsZXR0ZXJzW3YgJSBudW1fbGV0dGVyc107IHYgLz0gbnVtX2xldHRlcnM7CisKKwkJZmQgPSBvcGVuKHBhdHRlcm4sIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1JEV1IsIG1vZGUpOworCQlpZiAoZmQgPiAwKQorCQkJcmV0dXJuIGZkOworCQkvKgorCQkgKiBGYXRhbCBlcnJvciAoRVBFUk0sIEVOT1NQQyBldGMpLgorCQkgKiBJdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gbG9vcC4KKwkJICovCisJCWlmIChlcnJubyAhPSBFRVhJU1QpCisJCQlicmVhazsKKwkJLyoKKwkJICogVGhpcyBpcyBhIHJhbmRvbSB2YWx1ZS4gIEl0IGlzIG9ubHkgbmVjZXNzYXJ5IHRoYXQKKwkJICogdGhlIG5leHQgVE1QX01BWCB2YWx1ZXMgZ2VuZXJhdGVkIGJ5IGFkZGluZyA3Nzc3IHRvCisJCSAqIFZBTFVFIGFyZSBkaWZmZXJlbnQgd2l0aCAobW9kdWxlIDJeMzIpLgorCQkgKi8KKwkJdmFsdWUgKz0gNzc3NzsKKwl9CisJLyogV2UgcmV0dXJuIHRoZSBudWxsIHN0cmluZyBpZiB3ZSBjYW4ndCBmaW5kIGEgdW5pcXVlIGZpbGUgbmFtZS4gICovCisJcGF0dGVyblswXSA9ICdcMCc7CisJcmV0dXJuIC0xOworfQorCitpbnQgZ2l0X21rc3RlbXBfbW9kZShjaGFyICpwYXR0ZXJuLCBpbnQgbW9kZSkKK3sKKwkvKiBta3N0ZW1wIGlzIGp1c3QgbWtzdGVtcHMgd2l0aCBubyBzdWZmaXggKi8KKwlyZXR1cm4gZ2l0X21rc3RlbXBzX21vZGUocGF0dGVybiwgMCwgbW9kZSk7Cit9CisKK2ludCBnaXRta3N0ZW1wcyhjaGFyICpwYXR0ZXJuLCBpbnQgc3VmZml4X2xlbikKK3sKKwlyZXR1cm4gZ2l0X21rc3RlbXBzX21vZGUocGF0dGVybiwgc3VmZml4X2xlbiwgMDYwMCk7Cit9CiAKIGludCB2YWxpZGF0ZV9oZWFkcmVmKGNvbnN0IGNoYXIgKnBhdGgpCiB7CkBAIC0xOTEsNDMgKzI4Nyw0OSBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGNoYXIgKnVzZXJfcGF0aChjaGFyICpidWYsIGNoYXIgKnBhdGgsIGludCBzeikKK3N0YXRpYyBzdHJ1Y3QgcGFzc3dkICpnZXRwd19zdHIoY29uc3QgY2hhciAqdXNlcm5hbWUsIHNpemVfdCBsZW4pCiB7CiAJc3RydWN0IHBhc3N3ZCAqcHc7Ci0JY2hhciAqc2xhc2g7Ci0JaW50IGxlbiwgYmFzZWxlbjsKKwljaGFyICp1c2VybmFtZV96ID0geG1hbGxvYyhsZW4gKyAxKTsKKwltZW1jcHkodXNlcm5hbWVfeiwgdXNlcm5hbWUsIGxlbik7CisJdXNlcm5hbWVfeltsZW5dID0gJ1wwJzsKKwlwdyA9IGdldHB3bmFtKHVzZXJuYW1lX3opOworCWZyZWUodXNlcm5hbWVfeik7CisJcmV0dXJuIHB3OworfQogCi0JaWYgKCFwYXRoIHx8IHBhdGhbMF0gIT0gJ34nKQotCQlyZXR1cm4gTlVMTDsKLQlwYXRoKys7Ci0Jc2xhc2ggPSBzdHJjaHIocGF0aCwgJy8nKTsKLQlpZiAocGF0aFswXSA9PSAnLycgfHwgIXBhdGhbMF0pIHsKLQkJcHcgPSBnZXRwd3VpZChnZXR1aWQoKSk7Ci0JfQotCWVsc2UgewotCQlpZiAoc2xhc2gpIHsKLQkJCSpzbGFzaCA9IDA7Ci0JCQlwdyA9IGdldHB3bmFtKHBhdGgpOwotCQkJKnNsYXNoID0gJy8nOworLyoKKyAqIFJldHVybiBhIHN0cmluZyB3aXRoIH4gYW5kIH51c2VyIGV4cGFuZGVkIHZpYSBnZXRwdyouICBJZiBidWYgIT0gTlVMTCwKKyAqIHRoZW4gaXQgaXMgYSBuZXdseSBhbGxvY2F0ZWQgc3RyaW5nLiBSZXR1cm5zIE5VTEwgb24gZ2V0cHcgZmFpbHVyZSBvcgorICogaWYgcGF0aCBpcyBOVUxMLgorICovCitjaGFyICpleHBhbmRfdXNlcl9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IHN0cmJ1ZiB1c2VyX3BhdGggPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpmaXJzdF9zbGFzaCA9IHN0cmNocm51bChwYXRoLCAnLycpOworCWNvbnN0IGNoYXIgKnRvX2NvcHkgPSBwYXRoOworCisJaWYgKHBhdGggPT0gTlVMTCkKKwkJZ290byByZXR1cm5fbnVsbDsKKwlpZiAocGF0aFswXSA9PSAnficpIHsKKwkJY29uc3QgY2hhciAqdXNlcm5hbWUgPSBwYXRoICsgMTsKKwkJc2l6ZV90IHVzZXJuYW1lX2xlbiA9IGZpcnN0X3NsYXNoIC0gdXNlcm5hbWU7CisJCWlmICh1c2VybmFtZV9sZW4gPT0gMCkgeworCQkJY29uc3QgY2hhciAqaG9tZSA9IGdldGVudigiSE9NRSIpOworCQkJc3RyYnVmX2FkZCgmdXNlcl9wYXRoLCBob21lLCBzdHJsZW4oaG9tZSkpOworCQl9IGVsc2UgeworCQkJc3RydWN0IHBhc3N3ZCAqcHcgPSBnZXRwd19zdHIodXNlcm5hbWUsIHVzZXJuYW1lX2xlbik7CisJCQlpZiAoIXB3KQorCQkJCWdvdG8gcmV0dXJuX251bGw7CisJCQlzdHJidWZfYWRkKCZ1c2VyX3BhdGgsIHB3LT5wd19kaXIsIHN0cmxlbihwdy0+cHdfZGlyKSk7CiAJCX0KLQkJZWxzZQotCQkJcHcgPSBnZXRwd25hbShwYXRoKTsKKwkJdG9fY29weSA9IGZpcnN0X3NsYXNoOwogCX0KLQlpZiAoIXB3IHx8ICFwdy0+cHdfZGlyIHx8IHN6IDw9IHN0cmxlbihwdy0+cHdfZGlyKSkKLQkJcmV0dXJuIE5VTEw7Ci0JYmFzZWxlbiA9IHN0cmxlbihwdy0+cHdfZGlyKTsKLQltZW1jcHkoYnVmLCBwdy0+cHdfZGlyLCBiYXNlbGVuKTsKLQl3aGlsZSAoKDEgPCBiYXNlbGVuKSAmJiAoYnVmW2Jhc2VsZW4tMV0gPT0gJy8nKSkgewotCQlidWZbYmFzZWxlbi0xXSA9IDA7Ci0JCWJhc2VsZW4tLTsKLQl9Ci0JaWYgKHNsYXNoICYmIHNsYXNoWzFdKSB7Ci0JCWxlbiA9IHN0cmxlbihzbGFzaCk7Ci0JCWlmIChzeiA8PSBiYXNlbGVuICsgbGVuKQotCQkJcmV0dXJuIE5VTEw7Ci0JCW1lbWNweShidWYgKyBiYXNlbGVuLCBzbGFzaCwgbGVuICsgMSk7Ci0JfQotCXJldHVybiBidWY7CisJc3RyYnVmX2FkZCgmdXNlcl9wYXRoLCB0b19jb3B5LCBzdHJsZW4odG9fY29weSkpOworCXJldHVybiBzdHJidWZfZGV0YWNoKCZ1c2VyX3BhdGgsIE5VTEwpOworcmV0dXJuX251bGw6CisJc3RyYnVmX3JlbGVhc2UoJnVzZXJfcGF0aCk7CisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qCkBAIC0yNzUsOCArMzc3LDE4IEBACiAJCWlmIChQQVRIX01BWCA8PSBsZW4pCiAJCQlyZXR1cm4gTlVMTDsKIAkJaWYgKHBhdGhbMF0gPT0gJ34nKSB7Ci0JCQlpZiAoIXVzZXJfcGF0aCh1c2VkX3BhdGgsIHBhdGgsIFBBVEhfTUFYKSkKKwkJCWNoYXIgKm5ld3BhdGggPSBleHBhbmRfdXNlcl9wYXRoKHBhdGgpOworCQkJaWYgKCFuZXdwYXRoIHx8IChQQVRIX01BWCAtIDEwIDwgc3RybGVuKG5ld3BhdGgpKSkgeworCQkJCWZyZWUobmV3cGF0aCk7CiAJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQkvKgorCQkJICogQ29weSBiYWNrIGludG8gdGhlIHN0YXRpYyBidWZmZXIuIEEgcGl0eQorCQkJICogc2luY2UgbmV3cGF0aCB3YXMgbm90IGJvdW5kZWQsIGJ1dCBvdGhlcgorCQkJICogYnJhbmNoZXMgb2YgdGhlIGlmIGFyZSBsaW1pdGVkIGJ5IFBBVEhfTUFYCisJCQkgKiBhbnl3YXkuCisJCQkgKi8KKwkJCXN0cmNweSh1c2VkX3BhdGgsIG5ld3BhdGgpOyBmcmVlKG5ld3BhdGgpOwogCQkJc3RyY3B5KHZhbGlkYXRlZF9wYXRoLCBwYXRoKTsKIAkJCXBhdGggPSB1c2VkX3BhdGg7CiAJCX0KQEAgLTM2MSwxNyArNDczLDM4IEBACiBjb25zdCBjaGFyICptYWtlX3JlbGF0aXZlX3BhdGgoY29uc3QgY2hhciAqYWJzLCBjb25zdCBjaGFyICpiYXNlKQogewogCXN0YXRpYyBjaGFyIGJ1ZltQQVRIX01BWCArIDFdOwotCWludCBiYXNlbGVuOwotCWlmICghYmFzZSkKKwlpbnQgaSA9IDAsIGogPSAwOworCisJaWYgKCFiYXNlIHx8ICFiYXNlWzBdKQogCQlyZXR1cm4gYWJzOwotCWJhc2VsZW4gPSBzdHJsZW4oYmFzZSk7Ci0JaWYgKHByZWZpeGNtcChhYnMsIGJhc2UpKQorCXdoaWxlIChiYXNlW2ldKSB7CisJCWlmIChpc19kaXJfc2VwKGJhc2VbaV0pKSB7CisJCQlpZiAoIWlzX2Rpcl9zZXAoYWJzW2pdKSkKKwkJCQlyZXR1cm4gYWJzOworCQkJd2hpbGUgKGlzX2Rpcl9zZXAoYmFzZVtpXSkpCisJCQkJaSsrOworCQkJd2hpbGUgKGlzX2Rpcl9zZXAoYWJzW2pdKSkKKwkJCQlqKys7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmIChhYnNbal0gIT0gYmFzZVtpXSkgeworCQkJcmV0dXJuIGFiczsKKwkJfQorCQlpKys7CisJCWorKzsKKwl9CisJaWYgKAorCSAgICAvKiAiL2ZvbyIgaXMgYSBwcmVmaXggb2YgIi9mb28iICovCisJICAgIGFic1tqXSAmJgorCSAgICAvKiAiL2ZvbyIgaXMgbm90IGEgcHJlZml4IG9mICIvZm9vYmFyIiAqLworCSAgICAhaXNfZGlyX3NlcChiYXNlW2ktMV0pICYmICFpc19kaXJfc2VwKGFic1tqXSkKKwkgICApCiAJCXJldHVybiBhYnM7Ci0JaWYgKGFic1tiYXNlbGVuXSA9PSAnLycpCi0JCWJhc2VsZW4rKzsKLQllbHNlIGlmIChiYXNlW2Jhc2VsZW4gLSAxXSAhPSAnLycpCi0JCXJldHVybiBhYnM7Ci0Jc3RyY3B5KGJ1ZiwgYWJzICsgYmFzZWxlbik7CisJd2hpbGUgKGlzX2Rpcl9zZXAoYWJzW2pdKSkKKwkJaisrOworCWlmICghYWJzW2pdKQorCQlzdHJjcHkoYnVmLCAiLiIpOworCWVsc2UKKwkJc3RyY3B5KGJ1ZiwgYWJzICsgaik7CiAJcmV0dXJuIGJ1ZjsKIH0KIApAQCAtNTQ4LDMgKzY4MSw1MCBAQAogCQlyZXR1cm4gTlVMTDsKIAlyZXR1cm4geHN0cm5kdXAocGF0aCwgY2hvbXBfdHJhaWxpbmdfZGlyX3NlcChwYXRoLCBwYXRoX2xlbikpOwogfQorCitpbnQgZGFlbW9uX2F2b2lkX2FsaWFzKGNvbnN0IGNoYXIgKnApCit7CisJaW50IHNsLCBuZG90OworCisJLyoKKwkgKiBUaGlzIHJlc3VycmVjdHMgdGhlIGJlbHRzIGFuZCBzdXNwZW5kZXJzIHBhcmFub2lhIGNoZWNrIGJ5IEhQQQorCSAqIGRvbmUgaW4gPDQzNTU2MEY3LjQwODAwMDZAenl0b3IuY29tPiB0aHJlYWQsIG5vdyBlbnRlcl9yZXBvKCkKKwkgKiBkb2VzIG5vdCBkbyBnZXRjd2QoKSBiYXNlZCBwYXRoIGNhbm9uaWNhbGl6YXRpb24uCisJICoKKwkgKiBzbCBiZWNvbWVzIHRydWUgaW1tZWRpYXRlbHkgYWZ0ZXIgc2VlaW5nICcvJyBhbmQgY29udGludWVzIHRvCisJICogYmUgdHJ1ZSBhcyBsb25nIGFzIGRvdHMgY29udGludWUgYWZ0ZXIgdGhhdCB3aXRob3V0IGludGVydmVuaW5nCisJICogbm9uLWRvdCBjaGFyYWN0ZXIuCisJICovCisJaWYgKCFwIHx8ICgqcCAhPSAnLycgJiYgKnAgIT0gJ34nKSkKKwkJcmV0dXJuIC0xOworCXNsID0gMTsgbmRvdCA9IDA7CisJcCsrOworCisJd2hpbGUgKDEpIHsKKwkJY2hhciBjaCA9ICpwKys7CisJCWlmIChzbCkgeworCQkJaWYgKGNoID09ICcuJykKKwkJCQluZG90Kys7CisJCQllbHNlIGlmIChjaCA9PSAnLycpIHsKKwkJCQlpZiAobmRvdCA8IDMpCisJCQkJCS8qIHJlamVjdCAvLywgLy4vIGFuZCAvLi4vICovCisJCQkJCXJldHVybiAtMTsKKwkJCQluZG90ID0gMDsKKwkJCX0KKwkJCWVsc2UgaWYgKGNoID09IDApIHsKKwkJCQlpZiAoMCA8IG5kb3QgJiYgbmRvdCA8IDMpCisJCQkJCS8qIHJlamVjdCAvLiQgYW5kIC8uLiQgKi8KKwkJCQkJcmV0dXJuIC0xOworCQkJCXJldHVybiAwOworCQkJfQorCQkJZWxzZQorCQkJCXNsID0gbmRvdCA9IDA7CisJCX0KKwkJZWxzZSBpZiAoY2ggPT0gMCkKKwkJCXJldHVybiAwOworCQllbHNlIGlmIChjaCA9PSAnLycpIHsKKwkJCXNsID0gMTsKKwkJCW5kb3QgPSAwOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvcGVybC9HaXQucG0gYi9wZXJsL0dpdC5wbQppbmRleCAyOTFmZjViLi45NzBmZTQzIDEwMDY0NAotLS0gYS9wZXJsL0dpdC5wbQorKysgYi9wZXJsL0dpdC5wbQpAQCAtMTg1LDcgKzE4NSw3IEBACiAKIAkJaWYgKCRkaXIpIHsKIAkJCSRkaXIgPX4gbSNeLyMgb3IgJGRpciA9ICRvcHRze0RpcmVjdG9yeX0gLiAnLycgLiAkZGlyOwotCQkJJG9wdHN7UmVwb3NpdG9yeX0gPSAkZGlyOworCQkJJG9wdHN7UmVwb3NpdG9yeX0gPSBhYnNfcGF0aCgkZGlyKTsKIAogCQkJIyBJZiAtLWdpdC1kaXIgd2VudCBvaywgdGhpcyBzaG91bGRuJ3QgZGllIGVpdGhlci4KIAkJCW15ICRwcmVmaXggPSAkc2VhcmNoLT5jb21tYW5kX29uZWxpbmUoJ3Jldi1wYXJzZScsICctLXNob3ctcHJlZml4Jyk7CkBAIC0yMDQsMTQgKzIwNCwxNCBAQAogCQkJJGRpciA9ICRvcHRze0RpcmVjdG9yeX07CiAKIAkJCXVubGVzcyAoLWQgIiRkaXIvcmVmcyIgYW5kIC1kICIkZGlyL29iamVjdHMiIGFuZCAtZSAiJGRpci9IRUFEIikgewotCQkJCSMgTWltaWNrIGdpdC1yZXYtcGFyc2UgLS1naXQtZGlyIGVycm9yIG1lc3NhZ2U6CisJCQkJIyBNaW1pYyBnaXQtcmV2LXBhcnNlIC0tZ2l0LWRpciBlcnJvciBtZXNzYWdlOgogCQkJCXRocm93IEVycm9yOjpTaW1wbGUoImZhdGFsOiBOb3QgYSBnaXQgcmVwb3NpdG9yeTogJGRpciIpOwogCQkJfQogCQkJbXkgJHNlYXJjaCA9IEdpdC0+cmVwb3NpdG9yeShSZXBvc2l0b3J5ID0+ICRkaXIpOwogCQkJdHJ5IHsKIAkJCQkkc2VhcmNoLT5jb21tYW5kKCdzeW1ib2xpYy1yZWYnLCAnSEVBRCcpOwogCQkJfSBjYXRjaCBHaXQ6OkVycm9yOjpDb21tYW5kIHdpdGggewotCQkJCSMgTWltaWNrIGdpdC1yZXYtcGFyc2UgLS1naXQtZGlyIGVycm9yIG1lc3NhZ2U6CisJCQkJIyBNaW1pYyBnaXQtcmV2LXBhcnNlIC0tZ2l0LWRpciBlcnJvciBtZXNzYWdlOgogCQkJCXRocm93IEVycm9yOjpTaW1wbGUoImZhdGFsOiBOb3QgYSBnaXQgcmVwb3NpdG9yeTogJGRpciIpOwogCQkJfQogCkBAIC0xMjgwLDYgKzEyODAsOCBAQAogCW15ICgkc2VsZiwgQGFyZ3MpID0gQF87CiAJaWYgKCRzZWxmKSB7CiAJCSRzZWxmLT5yZXBvX3BhdGgoKSBhbmQgJEVOVnsnR0lUX0RJUid9ID0gJHNlbGYtPnJlcG9fcGF0aCgpOworCQkkc2VsZi0+cmVwb19wYXRoKCkgYW5kICRzZWxmLT53Y19wYXRoKCkKKwkJCWFuZCAkRU5WeydHSVRfV09SS19UUkVFJ30gPSAkc2VsZi0+d2NfcGF0aCgpOwogCQkkc2VsZi0+d2NfcGF0aCgpIGFuZCBjaGRpcigkc2VsZi0+d2NfcGF0aCgpKTsKIAkJJHNlbGYtPndjX3N1YmRpcigpIGFuZCBjaGRpcigkc2VsZi0+d2Nfc3ViZGlyKCkpOwogCX0KZGlmZiAtLWdpdCBhL3BlcmwvTWFrZWZpbGUgYi9wZXJsL01ha2VmaWxlCmluZGV4IGUzZGQxYTUuLjRhYjIxZDYgMTAwNjQ0Ci0tLSBhL3BlcmwvTWFrZWZpbGUKKysrIGIvcGVybC9NYWtlZmlsZQpAQCAtMjksMTEgKzI5LDExIEBACiAJJyQoUEVSTF9QQVRIX1NRKScgLU1FcnJvciAtZSAnZXhpdCgkJEVycm9yOjpWRVJTSU9OIDwgMC4xNTAwOSknIHx8IFwKIAllY2hvICcJY3AgcHJpdmF0ZS1FcnJvci5wbSBibGliL2xpYi9FcnJvci5wbScgPj4gJEAKIAllY2hvIGluc3RhbGw6ID4+ICRACi0JZWNobyAnCW1rZGlyIC1wICIkKGluc3RkaXJfU1EpIicgPj4gJEAKLQllY2hvICcJJChSTSkgIiQoaW5zdGRpcl9TUSkvR2l0LnBtIjsgY3AgR2l0LnBtICIkKGluc3RkaXJfU1EpIicgPj4gJEAKLQllY2hvICcJJChSTSkgIiQoaW5zdGRpcl9TUSkvRXJyb3IucG0iJyA+PiAkQAorCWVjaG8gJwlta2RpciAtcCAiJCQoREVTVERJUikkKGluc3RkaXJfU1EpIicgPj4gJEAKKwllY2hvICcJJChSTSkgIiQkKERFU1RESVIpJChpbnN0ZGlyX1NRKS9HaXQucG0iOyBjcCBHaXQucG0gIiQkKERFU1RESVIpJChpbnN0ZGlyX1NRKSInID4+ICRACisJZWNobyAnCSQoUk0pICIkJChERVNURElSKSQoaW5zdGRpcl9TUSkvRXJyb3IucG0iJyA+PiAkQAogCSckKFBFUkxfUEFUSF9TUSknIC1NRXJyb3IgLWUgJ2V4aXQoJCRFcnJvcjo6VkVSU0lPTiA8IDAuMTUwMDkpJyB8fCBcCi0JZWNobyAnCWNwIHByaXZhdGUtRXJyb3IucG0gIiQoaW5zdGRpcl9TUSkvRXJyb3IucG0iJyA+PiAkQAorCWVjaG8gJwljcCBwcml2YXRlLUVycm9yLnBtICIkJChERVNURElSKSQoaW5zdGRpcl9TUSkvRXJyb3IucG0iJyA+PiAkQAogCWVjaG8gaW5zdGxpYmRpcjogPj4gJEAKIAllY2hvICcJZWNobyAkKGluc3RkaXJfU1EpJyA+PiAkQAogZWxzZQpkaWZmIC0tZ2l0IGEvcGVybC9NYWtlZmlsZS5QTCBiL3BlcmwvTWFrZWZpbGUuUEwKaW5kZXggMzIwMjUzZS4uMGI5ZGVjYSAxMDA2NDQKLS0tIGEvcGVybC9NYWtlZmlsZS5QTAorKysgYi9wZXJsL01ha2VmaWxlLlBMCkBAIC01LDYgKzUsMTQgQEAKIGluc3RsaWJkaXI6CiAJQGVjaG8gJyQoSU5TVEFMTFNJVEVMSUIpJwogCitpZm5lcSAoLCQoREVTVERJUikpCitpZmVxICgwLCQoc2hlbGwgZXhwciAnJChNTV9WRVJTSU9OKScgJz4nIDYuMTApKQorJChlcnJvciBFeHRVdGlsczo6TWFrZU1ha2VyIHZlcnNpb24gIiQoTU1fVkVSU0lPTikiIGlzIG9sZGVyIHRoYW4gNi4xMSBhbmQgc28gXAorCWlzIGxpa2VseSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgREVTVERJUiBtZWNoYW5pc20uICBUcnkgc2V0dGluZyBcCisJTk9fUEVSTF9NQUtFTUFLRVI9MSBpbnN0ZWFkKQorZW5kaWYKK2VuZGlmCisKIE1BS0VfRlJBRwogfQogCmRpZmYgLS1naXQgYS9wa3QtbGluZS5jIGIvcGt0LWxpbmUuYwppbmRleCBmNWQwMDg2Li4yOTViYTJiIDEwMDY0NAotLS0gYS9wa3QtbGluZS5jCisrKyBiL3BrdC1saW5lLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAkJfQogCQlpZiAoIXJldCkKIAkJCWRpZSgid3JpdGUgZXJyb3IgKGRpc2sgZnVsbD8pIik7Ci0JCWRpZSgid3JpdGUgZXJyb3IgKCVzKSIsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygid3JpdGUgZXJyb3IiKTsKIAl9CiAJcmV0dXJuIG5uOwogfQpAQCAtNDIsMTcgKzQyLDE5IEBACiAJc2FmZV93cml0ZShmZCwgIjAwMDAiLCA0KTsKIH0KIAotI2RlZmluZSBoZXgoYSkgKGhleGNoYXJbKGEpICYgMTVdKQotdm9pZCBwYWNrZXRfd3JpdGUoaW50IGZkLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3ZvaWQgcGFja2V0X2J1Zl9mbHVzaChzdHJ1Y3Qgc3RyYnVmICpidWYpCiB7Ci0Jc3RhdGljIGNoYXIgYnVmZmVyWzEwMDBdOworCXN0cmJ1Zl9hZGQoYnVmLCAiMDAwMCIsIDQpOworfQorCisjZGVmaW5lIGhleChhKSAoaGV4Y2hhclsoYSkgJiAxNV0pCitzdGF0aWMgY2hhciBidWZmZXJbMTAwMF07CitzdGF0aWMgdW5zaWduZWQgZm9ybWF0X3BhY2tldChjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKK3sKIAlzdGF0aWMgY2hhciBoZXhjaGFyW10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7Ci0JdmFfbGlzdCBhcmdzOwogCXVuc2lnbmVkIG47CiAKLQl2YV9zdGFydChhcmdzLCBmbXQpOwogCW4gPSB2c25wcmludGYoYnVmZmVyICsgNCwgc2l6ZW9mKGJ1ZmZlcikgLSA0LCBmbXQsIGFyZ3MpOwotCXZhX2VuZChhcmdzKTsKIAlpZiAobiA+PSBzaXplb2YoYnVmZmVyKS00KQogCQlkaWUoInByb3RvY29sIGVycm9yOiBpbXBvc3NpYmx5IGxvbmcgbGluZSIpOwogCW4gKz0gNDsKQEAgLTYwLDI3ICs2Miw0NSBAQAogCWJ1ZmZlclsxXSA9IGhleChuID4+IDgpOwogCWJ1ZmZlclsyXSA9IGhleChuID4+IDQpOwogCWJ1ZmZlclszXSA9IGhleChuKTsKKwlyZXR1cm4gbjsKK30KKwordm9pZCBwYWNrZXRfd3JpdGUoaW50IGZkLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisJdW5zaWduZWQgbjsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJbiA9IGZvcm1hdF9wYWNrZXQoZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CiAJc2FmZV93cml0ZShmZCwgYnVmZmVyLCBuKTsKIH0KIAordm9pZCBwYWNrZXRfYnVmX3dyaXRlKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCXVuc2lnbmVkIG47CisKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCW4gPSBmb3JtYXRfcGFja2V0KGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCXN0cmJ1Zl9hZGQoYnVmLCBidWZmZXIsIG4pOworfQorCiBzdGF0aWMgdm9pZCBzYWZlX3JlYWQoaW50IGZkLCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIHNpemUpCiB7CiAJc3NpemVfdCByZXQgPSByZWFkX2luX2Z1bGwoZmQsIGJ1ZmZlciwgc2l6ZSk7CiAJaWYgKHJldCA8IDApCi0JCWRpZSgicmVhZCBlcnJvciAoJXMpIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJyZWFkIGVycm9yIik7CiAJZWxzZSBpZiAocmV0IDwgc2l6ZSkKIAkJZGllKCJUaGUgcmVtb3RlIGVuZCBodW5nIHVwIHVuZXhwZWN0ZWRseSIpOwogfQogCi1pbnQgcGFja2V0X3JlYWRfbGluZShpbnQgZmQsIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgc2l6ZSkKK3N0YXRpYyBpbnQgcGFja2V0X2xlbmd0aChjb25zdCBjaGFyICpsaW5lbGVuKQogewogCWludCBuOwotCXVuc2lnbmVkIGxlbjsKLQljaGFyIGxpbmVsZW5bNF07CisJaW50IGxlbiA9IDA7CiAKLQlzYWZlX3JlYWQoZmQsIGxpbmVsZW4sIDQpOwotCi0JbGVuID0gMDsKIAlmb3IgKG4gPSAwOyBuIDwgNDsgbisrKSB7CiAJCXVuc2lnbmVkIGNoYXIgYyA9IGxpbmVsZW5bbl07CiAJCWxlbiA8PD0gNDsKQEAgLTk2LDggKzExNiwyMCBAQAogCQkJbGVuICs9IGMgLSAnQScgKyAxMDsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWRpZSgicHJvdG9jb2wgZXJyb3I6IGJhZCBsaW5lIGxlbmd0aCBjaGFyYWN0ZXIiKTsKKwkJcmV0dXJuIC0xOwogCX0KKwlyZXR1cm4gbGVuOworfQorCitpbnQgcGFja2V0X3JlYWRfbGluZShpbnQgZmQsIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgc2l6ZSkKK3sKKwlpbnQgbGVuOworCWNoYXIgbGluZWxlbls0XTsKKworCXNhZmVfcmVhZChmZCwgbGluZWxlbiwgNCk7CisJbGVuID0gcGFja2V0X2xlbmd0aChsaW5lbGVuKTsKKwlpZiAobGVuIDwgMCkKKwkJZGllKCJwcm90b2NvbCBlcnJvcjogYmFkIGxpbmUgbGVuZ3RoIGNoYXJhY3RlcjogJS40cyIsIGxpbmVsZW4pOwogCWlmICghbGVuKQogCQlyZXR1cm4gMDsKIAlsZW4gLT0gNDsKQEAgLTEwNywzICsxMzksMzEgQEAKIAlidWZmZXJbbGVuXSA9IDA7CiAJcmV0dXJuIGxlbjsKIH0KKworaW50IHBhY2tldF9nZXRfbGluZShzdHJ1Y3Qgc3RyYnVmICpvdXQsCisJY2hhciAqKnNyY19idWYsIHNpemVfdCAqc3JjX2xlbikKK3sKKwlpbnQgbGVuOworCisJaWYgKCpzcmNfbGVuIDwgNCkKKwkJcmV0dXJuIC0xOworCWxlbiA9IHBhY2tldF9sZW5ndGgoKnNyY19idWYpOworCWlmIChsZW4gPCAwKQorCQlyZXR1cm4gLTE7CisJaWYgKCFsZW4pIHsKKwkJKnNyY19idWYgKz0gNDsKKwkJKnNyY19sZW4gLT0gNDsKKwkJcmV0dXJuIDA7CisJfQorCWlmICgqc3JjX2xlbiA8IGxlbikKKwkJcmV0dXJuIC0yOworCisJKnNyY19idWYgKz0gNDsKKwkqc3JjX2xlbiAtPSA0OworCWxlbiAtPSA0OworCisJc3RyYnVmX2FkZChvdXQsICpzcmNfYnVmLCBsZW4pOworCSpzcmNfYnVmICs9IGxlbjsKKwkqc3JjX2xlbiAtPSBsZW47CisJcmV0dXJuIGxlbjsKK30KZGlmZiAtLWdpdCBhL3BrdC1saW5lLmggYi9wa3QtbGluZS5oCmluZGV4IDlkZjY1M2YuLjFlNWRjZmUgMTAwNjQ0Ci0tLSBhL3BrdC1saW5lLmgKKysrIGIvcGt0LWxpbmUuaApAQCAtMiwxNCArMiwxOCBAQAogI2RlZmluZSBQS1RMSU5FX0gKIAogI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgogCiAvKgogICogU2lsbHkgcGFja2V0aXplZCBsaW5lIHdyaXRpbmcgaW50ZXJmYWNlCiAgKi8KIHZvaWQgcGFja2V0X2ZsdXNoKGludCBmZCk7CiB2b2lkIHBhY2tldF93cml0ZShpbnQgZmQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKK3ZvaWQgcGFja2V0X2J1Zl9mbHVzaChzdHJ1Y3Qgc3RyYnVmICpidWYpOwordm9pZCBwYWNrZXRfYnVmX3dyaXRlKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqZm10LCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOwogCiBpbnQgcGFja2V0X3JlYWRfbGluZShpbnQgZmQsIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgc2l6ZSk7CitpbnQgcGFja2V0X2dldF9saW5lKHN0cnVjdCBzdHJidWYgKm91dCwgY2hhciAqKnNyY19idWYsIHNpemVfdCAqc3JjX2xlbik7CiBzc2l6ZV90IHNhZmVfd3JpdGUoaW50LCBjb25zdCB2b2lkICosIHNzaXplX3QpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3ByZWxvYWQtaW5kZXguYyBiL3ByZWxvYWQtaW5kZXguYwppbmRleCA4OGVkYzVmLi5lM2QwYmRhIDEwMDY0NAotLS0gYS9wcmVsb2FkLWluZGV4LmMKKysrIGIvcHJlbG9hZC1pbmRleC5jCkBAIC0zNCw3ICszNCw5IEBACiAJc3RydWN0IHRocmVhZF9kYXRhICpwID0gX2RhdGE7CiAJc3RydWN0IGluZGV4X3N0YXRlICppbmRleCA9IHAtPmluZGV4OwogCXN0cnVjdCBjYWNoZV9lbnRyeSAqKmNlcCA9IGluZGV4LT5jYWNoZSArIHAtPm9mZnNldDsKKwlzdHJ1Y3QgY2FjaGVfZGVmIGNhY2hlOwogCisJbWVtc2V0KCZjYWNoZSwgMCwgc2l6ZW9mKGNhY2hlKSk7CiAJbnIgPSBwLT5ucjsKIAlpZiAobnIgKyBwLT5vZmZzZXQgPiBpbmRleC0+Y2FjaGVfbnIpCiAJCW5yID0gaW5kZXgtPmNhY2hlX25yIC0gcC0+b2Zmc2V0OwpAQCAtNDUsMTAgKzQ3LDE0IEBACiAKIAkJaWYgKGNlX3N0YWdlKGNlKSkKIAkJCWNvbnRpbnVlOworCQlpZiAoU19JU0dJVExJTksoY2UtPmNlX21vZGUpKQorCQkJY29udGludWU7CiAJCWlmIChjZV91cHRvZGF0ZShjZSkpCiAJCQljb250aW51ZTsKIAkJaWYgKCFjZV9wYXRoX21hdGNoKGNlLCBwLT5wYXRoc3BlYykpCiAJCQljb250aW51ZTsKKwkJaWYgKHRocmVhZGVkX2hhc19zeW1saW5rX2xlYWRpbmdfcGF0aCgmY2FjaGUsIGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSkpCisJCQljb250aW51ZTsKIAkJaWYgKGxzdGF0KGNlLT5uYW1lLCAmc3QpKQogCQkJY29udGludWU7CiAJCWlmIChpZV9tYXRjaF9zdGF0KGluZGV4LCBjZSwgJnN0LCBDRV9NQVRDSF9SQUNZX0lTX0RJUlRZKSkKQEAgLTcyLDcgKzc4LDcgQEAKIAlpZiAodGhyZWFkcyA+IE1BWF9QQVJBTExFTCkKIAkJdGhyZWFkcyA9IE1BWF9QQVJBTExFTDsKIAlvZmZzZXQgPSAwOwotCXdvcmsgPSAoaW5kZXgtPmNhY2hlX25yICsgdGhyZWFkcyAtIDEpIC8gdGhyZWFkczsKKwl3b3JrID0gRElWX1JPVU5EX1VQKGluZGV4LT5jYWNoZV9uciwgdGhyZWFkcyk7CiAJZm9yIChpID0gMDsgaSA8IHRocmVhZHM7IGkrKykgewogCQlzdHJ1Y3QgdGhyZWFkX2RhdGEgKnAgPSBkYXRhK2k7CiAJCXAtPmluZGV4ID0gaW5kZXg7CmRpZmYgLS1naXQgYS9wcmV0dHkuYyBiL3ByZXR0eS5jCmluZGV4IGEwZWYzNTYuLmQ0OTNjYWQgMTAwNjQ0Ci0tLSBhL3ByZXR0eS5jCisrKyBiL3ByZXR0eS5jCkBAIC02LDcgKzYsOSBAQAogI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCiAjaW5jbHVkZSAibWFpbG1hcC5oIgogI2luY2x1ZGUgImxvZy10cmVlLmgiCisjaW5jbHVkZSAibm90ZXMuaCIKICNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgInJlZmxvZy13YWxrLmgiCiAKIHN0YXRpYyBjaGFyICp1c2VyX2Zvcm1hdDsKIApAQCAtODEsMTEgKzgzLDIzIEBACiB9CiAKIC8qIEhpZ2ggYml0IHNldCwgb3IgSVNPLTIwMjItSU5UICovCi1pbnQgbm9uX2FzY2lpKGludCBjaCkKK3N0YXRpYyBpbnQgbm9uX2FzY2lpKGludCBjaCkKIHsKIAlyZXR1cm4gIWlzYXNjaWkoY2gpIHx8IGNoID09ICdcMDMzJzsKIH0KIAoraW50IGhhc19ub25fYXNjaWkoY29uc3QgY2hhciAqcykKK3sKKwlpbnQgY2g7CisJaWYgKCFzKQorCQlyZXR1cm4gMDsKKwl3aGlsZSAoKGNoID0gKnMrKykgIT0gJ1wwJykgeworCQlpZiAobm9uX2FzY2lpKGNoKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBpc19yZmMyMDQ3X3NwZWNpYWwoY2hhciBjaCkKIHsKIAlyZXR1cm4gKG5vbl9hc2NpaShjaCkgfHwgKGNoID09ICc9JykgfHwgKGNoID09ICc/JykgfHwgKGNoID09ICdfJykpOwpAQCAtMjg0LDcgKzI5OCw3IEBACiBzdGF0aWMgY2hhciAqbG9nbXNnX3JlZW5jb2RlKGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwKIAkJCSAgICAgY29uc3QgY2hhciAqb3V0cHV0X2VuY29kaW5nKQogewotCXN0YXRpYyBjb25zdCBjaGFyICp1dGY4ID0gInV0Zi04IjsKKwlzdGF0aWMgY29uc3QgY2hhciAqdXRmOCA9ICJVVEYtOCI7CiAJY29uc3QgY2hhciAqdXNlX2VuY29kaW5nOwogCWNoYXIgKmVuY29kaW5nOwogCWNoYXIgKm91dDsKQEAgLTQzMCw5ICs0NDQsMTAgQEAKIAogc3RydWN0IGZvcm1hdF9jb21taXRfY29udGV4dCB7CiAJY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0OwotCWVudW0gZGF0ZV9tb2RlIGRtb2RlOworCWNvbnN0IHN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCAqcHJldHR5X2N0eDsKIAl1bnNpZ25lZCBjb21taXRfaGVhZGVyX3BhcnNlZDoxOwogCXVuc2lnbmVkIGNvbW1pdF9tZXNzYWdlX3BhcnNlZDoxOworCXNpemVfdCB3aWR0aCwgaW5kZW50MSwgaW5kZW50MjsKIAogCS8qIFRoZXNlIG9mZnNldHMgYXJlIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgY29tbWl0IG1lc3NhZ2UuICovCiAJc3RydWN0IGNodW5rIGF1dGhvcjsKQEAgLTQ0Niw2ICs0NjEsNyBAQAogCXN0cnVjdCBjaHVuayBhYmJyZXZfY29tbWl0X2hhc2g7CiAJc3RydWN0IGNodW5rIGFiYnJldl90cmVlX2hhc2g7CiAJc3RydWN0IGNodW5rIGFiYnJldl9wYXJlbnRfaGFzaGVzOworCXNpemVfdCB3cmFwX3N0YXJ0OwogfTsKIAogc3RhdGljIGludCBhZGRfYWdhaW4oc3RydWN0IHN0cmJ1ZiAqc2IsIHN0cnVjdCBjaHVuayAqY2h1bmspCkBAIC01NzEsNyArNTg3LDcgQEAKIAlzdHJ1Y3QgbmFtZV9kZWNvcmF0aW9uICpkOwogCWNvbnN0IGNoYXIgKnByZWZpeCA9ICIgKCI7CiAKLQlsb2FkX3JlZl9kZWNvcmF0aW9ucygpOworCWxvYWRfcmVmX2RlY29yYXRpb25zKERFQ09SQVRFX1NIT1JUX1JFRlMpOwogCWQgPSBsb29rdXBfZGVjb3JhdGlvbigmbmFtZV9kZWNvcmF0aW9uLCAmY29tbWl0LT5vYmplY3QpOwogCXdoaWxlIChkKSB7CiAJCXN0cmJ1Zl9hZGRzdHIoc2IsIHByZWZpeCk7CkBAIC01ODMsOCArNTk5LDM3IEBACiAJCXN0cmJ1Zl9hZGRjaChzYiwgJyknKTsKIH0KIAotc3RhdGljIHNpemVfdCBmb3JtYXRfY29tbWl0X2l0ZW0oc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnBsYWNlaG9sZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNvbnRleHQpCitzdGF0aWMgdm9pZCBzdHJidWZfd3JhcChzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IHBvcywKKwkJCXNpemVfdCB3aWR0aCwgc2l6ZV90IGluZGVudDEsIHNpemVfdCBpbmRlbnQyKQoreworCXN0cnVjdCBzdHJidWYgdG1wID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAocG9zKQorCQlzdHJidWZfYWRkKCZ0bXAsIHNiLT5idWYsIHBvcyk7CisJc3RyYnVmX2FkZF93cmFwcGVkX3RleHQoJnRtcCwgc2ItPmJ1ZiArIHBvcywKKwkJCQkoaW50KSBpbmRlbnQxLCAoaW50KSBpbmRlbnQyLCAoaW50KSB3aWR0aCk7CisJc3RyYnVmX3N3YXAoJnRtcCwgc2IpOworCXN0cmJ1Zl9yZWxlYXNlKCZ0bXApOworfQorCitzdGF0aWMgdm9pZCByZXdyYXBfbWVzc2FnZV90YWlsKHN0cnVjdCBzdHJidWYgKnNiLAorCQkJCXN0cnVjdCBmb3JtYXRfY29tbWl0X2NvbnRleHQgKmMsCisJCQkJc2l6ZV90IG5ld193aWR0aCwgc2l6ZV90IG5ld19pbmRlbnQxLAorCQkJCXNpemVfdCBuZXdfaW5kZW50MikKK3sKKwlpZiAoYy0+d2lkdGggPT0gbmV3X3dpZHRoICYmIGMtPmluZGVudDEgPT0gbmV3X2luZGVudDEgJiYKKwkgICAgYy0+aW5kZW50MiA9PSBuZXdfaW5kZW50MikKKwkJcmV0dXJuOworCWlmIChjLT53cmFwX3N0YXJ0IDwgc2ItPmxlbikKKwkJc3RyYnVmX3dyYXAoc2IsIGMtPndyYXBfc3RhcnQsIGMtPndpZHRoLCBjLT5pbmRlbnQxLCBjLT5pbmRlbnQyKTsKKwljLT53cmFwX3N0YXJ0ID0gc2ItPmxlbjsKKwljLT53aWR0aCA9IG5ld193aWR0aDsKKwljLT5pbmRlbnQxID0gbmV3X2luZGVudDE7CisJYy0+aW5kZW50MiA9IG5ld19pbmRlbnQyOworfQorCitzdGF0aWMgc2l6ZV90IGZvcm1hdF9jb21taXRfb25lKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpwbGFjZWhvbGRlciwKKwkJCQl2b2lkICpjb250ZXh0KQogewogCXN0cnVjdCBmb3JtYXRfY29tbWl0X2NvbnRleHQgKmMgPSBjb250ZXh0OwogCWNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGMtPmNvbW1pdDsKQEAgLTYzMyw2ICs2NzgsMzAgQEAKIAkJCXJldHVybiAzOwogCQl9IGVsc2UKIAkJCXJldHVybiAwOworCWNhc2UgJ3cnOgorCQlpZiAocGxhY2Vob2xkZXJbMV0gPT0gJygnKSB7CisJCQl1bnNpZ25lZCBsb25nIHdpZHRoID0gMCwgaW5kZW50MSA9IDAsIGluZGVudDIgPSAwOworCQkJY2hhciAqbmV4dDsKKwkJCWNvbnN0IGNoYXIgKnN0YXJ0ID0gcGxhY2Vob2xkZXIgKyAyOworCQkJY29uc3QgY2hhciAqZW5kID0gc3RyY2hyKHN0YXJ0LCAnKScpOworCQkJaWYgKCFlbmQpCisJCQkJcmV0dXJuIDA7CisJCQlpZiAoZW5kID4gc3RhcnQpIHsKKwkJCQl3aWR0aCA9IHN0cnRvdWwoc3RhcnQsICZuZXh0LCAxMCk7CisJCQkJaWYgKCpuZXh0ID09ICcsJykgeworCQkJCQlpbmRlbnQxID0gc3RydG91bChuZXh0ICsgMSwgJm5leHQsIDEwKTsKKwkJCQkJaWYgKCpuZXh0ID09ICcsJykgeworCQkJCQkJaW5kZW50MiA9IHN0cnRvdWwobmV4dCArIDEsCisJCQkJCQkJCSAmbmV4dCwgMTApOworCQkJCQl9CisJCQkJfQorCQkJCWlmICgqbmV4dCAhPSAnKScpCisJCQkJCXJldHVybiAwOworCQkJfQorCQkJcmV3cmFwX21lc3NhZ2VfdGFpbChzYiwgYywgd2lkdGgsIGluZGVudDEsIGluZGVudDIpOworCQkJcmV0dXJuIGVuZCAtIHBsYWNlaG9sZGVyICsgMTsKKwkJfSBlbHNlCisJCQlyZXR1cm4gMDsKIAl9CiAKIAkvKiB0aGVzZSBkZXBlbmQgb24gdGhlIGNvbW1pdCAqLwpAQCAtNjg5LDYgKzc1OCwyNiBAQAogCWNhc2UgJ2QnOgogCQlmb3JtYXRfZGVjb3JhdGlvbihzYiwgY29tbWl0KTsKIAkJcmV0dXJuIDE7CisJY2FzZSAnZyc6CQkvKiByZWZsb2cgaW5mbyAqLworCQlzd2l0Y2gocGxhY2Vob2xkZXJbMV0pIHsKKwkJY2FzZSAnZCc6CS8qIHJlZmxvZyBzZWxlY3RvciAqLworCQljYXNlICdEJzoKKwkJCWlmIChjLT5wcmV0dHlfY3R4LT5yZWZsb2dfaW5mbykKKwkJCQlnZXRfcmVmbG9nX3NlbGVjdG9yKHNiLAorCQkJCQkJICAgIGMtPnByZXR0eV9jdHgtPnJlZmxvZ19pbmZvLAorCQkJCQkJICAgIGMtPnByZXR0eV9jdHgtPmRhdGVfbW9kZSwKKwkJCQkJCSAgICAocGxhY2Vob2xkZXJbMV0gPT0gJ2QnKSk7CisJCQlyZXR1cm4gMjsKKwkJY2FzZSAncyc6CS8qIHJlZmxvZyBtZXNzYWdlICovCisJCQlpZiAoYy0+cHJldHR5X2N0eC0+cmVmbG9nX2luZm8pCisJCQkJZ2V0X3JlZmxvZ19tZXNzYWdlKHNiLCBjLT5wcmV0dHlfY3R4LT5yZWZsb2dfaW5mbyk7CisJCQlyZXR1cm4gMjsKKwkJfQorCQlyZXR1cm4gMDsJLyogdW5rbm93biAlZyBwbGFjZWhvbGRlciAqLworCWNhc2UgJ04nOgorCQlnZXRfY29tbWl0X25vdGVzKGNvbW1pdCwgc2IsIGdpdF9sb2dfb3V0cHV0X2VuY29kaW5nID8KKwkJCSAgICAgZ2l0X2xvZ19vdXRwdXRfZW5jb2RpbmcgOiBnaXRfY29tbWl0X2VuY29kaW5nLCAwKTsKKwkJcmV0dXJuIDE7CiAJfQogCiAJLyogRm9yIHRoZSByZXN0IHdlIGhhdmUgdG8gcGFyc2UgdGhlIGNvbW1pdCBoZWFkZXIuICovCkBAIC02OTksMTEgKzc4OCwxMSBAQAogCWNhc2UgJ2EnOgkvKiBhdXRob3IgLi4uICovCiAJCXJldHVybiBmb3JtYXRfcGVyc29uX3BhcnQoc2IsIHBsYWNlaG9sZGVyWzFdLAogCQkJCSAgIG1zZyArIGMtPmF1dGhvci5vZmYsIGMtPmF1dGhvci5sZW4sCi0JCQkJICAgYy0+ZG1vZGUpOworCQkJCSAgIGMtPnByZXR0eV9jdHgtPmRhdGVfbW9kZSk7CiAJY2FzZSAnYyc6CS8qIGNvbW1pdHRlciAuLi4gKi8KIAkJcmV0dXJuIGZvcm1hdF9wZXJzb25fcGFydChzYiwgcGxhY2Vob2xkZXJbMV0sCiAJCQkJICAgbXNnICsgYy0+Y29tbWl0dGVyLm9mZiwgYy0+Y29tbWl0dGVyLmxlbiwKLQkJCQkgICBjLT5kbW9kZSk7CisJCQkJICAgYy0+cHJldHR5X2N0eC0+ZGF0ZV9tb2RlKTsKIAljYXNlICdlJzoJLyogZW5jb2RpbmcgKi8KIAkJc3RyYnVmX2FkZChzYiwgbXNnICsgYy0+ZW5jb2Rpbmcub2ZmLCBjLT5lbmNvZGluZy5sZW4pOwogCQlyZXR1cm4gMTsKQEAgLTcyNywxNiArODE2LDU2IEBACiAJcmV0dXJuIDA7CS8qIHVua25vd24gcGxhY2Vob2xkZXIgKi8KIH0KIAorc3RhdGljIHNpemVfdCBmb3JtYXRfY29tbWl0X2l0ZW0oc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnBsYWNlaG9sZGVyLAorCQkJCSB2b2lkICpjb250ZXh0KQoreworCWludCBjb25zdW1lZDsKKwlzaXplX3Qgb3JpZ19sZW47CisJZW51bSB7CisJCU5PX01BR0lDLAorCQlBRERfTEZfQkVGT1JFX05PTl9FTVBUWSwKKwkJREVMX0xGX0JFRk9SRV9FTVBUWSwKKwl9IG1hZ2ljID0gTk9fTUFHSUM7CisKKwlzd2l0Y2ggKHBsYWNlaG9sZGVyWzBdKSB7CisJY2FzZSAnLSc6CisJCW1hZ2ljID0gREVMX0xGX0JFRk9SRV9FTVBUWTsKKwkJYnJlYWs7CisJY2FzZSAnKyc6CisJCW1hZ2ljID0gQUREX0xGX0JFRk9SRV9OT05fRU1QVFk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlpZiAobWFnaWMgIT0gTk9fTUFHSUMpCisJCXBsYWNlaG9sZGVyKys7CisKKwlvcmlnX2xlbiA9IHNiLT5sZW47CisJY29uc3VtZWQgPSBmb3JtYXRfY29tbWl0X29uZShzYiwgcGxhY2Vob2xkZXIsIGNvbnRleHQpOworCWlmIChtYWdpYyA9PSBOT19NQUdJQykKKwkJcmV0dXJuIGNvbnN1bWVkOworCisJaWYgKChvcmlnX2xlbiA9PSBzYi0+bGVuKSAmJiBtYWdpYyA9PSBERUxfTEZfQkVGT1JFX0VNUFRZKSB7CisJCXdoaWxlIChzYi0+bGVuICYmIHNiLT5idWZbc2ItPmxlbiAtIDFdID09ICdcbicpCisJCQlzdHJidWZfc2V0bGVuKHNiLCBzYi0+bGVuIC0gMSk7CisJfSBlbHNlIGlmICgob3JpZ19sZW4gIT0gc2ItPmxlbikgJiYgbWFnaWMgPT0gQUREX0xGX0JFRk9SRV9OT05fRU1QVFkpIHsKKwkJc3RyYnVmX2luc2VydChzYiwgb3JpZ19sZW4sICJcbiIsIDEpOworCX0KKwlyZXR1cm4gY29uc3VtZWQgKyAxOworfQorCiB2b2lkIGZvcm1hdF9jb21taXRfbWVzc2FnZShjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCi0JCQkgICBjb25zdCB2b2lkICpmb3JtYXQsIHN0cnVjdCBzdHJidWYgKnNiLAotCQkJICAgZW51bSBkYXRlX21vZGUgZG1vZGUpCisJCQkgICBjb25zdCBjaGFyICpmb3JtYXQsIHN0cnVjdCBzdHJidWYgKnNiLAorCQkJICAgY29uc3Qgc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpwcmV0dHlfY3R4KQogewogCXN0cnVjdCBmb3JtYXRfY29tbWl0X2NvbnRleHQgY29udGV4dDsKIAogCW1lbXNldCgmY29udGV4dCwgMCwgc2l6ZW9mKGNvbnRleHQpKTsKIAljb250ZXh0LmNvbW1pdCA9IGNvbW1pdDsKLQljb250ZXh0LmRtb2RlID0gZG1vZGU7CisJY29udGV4dC5wcmV0dHlfY3R4ID0gcHJldHR5X2N0eDsKKwljb250ZXh0LndyYXBfc3RhcnQgPSBzYi0+bGVuOwogCXN0cmJ1Zl9leHBhbmQoc2IsIGZvcm1hdCwgZm9ybWF0X2NvbW1pdF9pdGVtLCAmY29udGV4dCk7CisJcmV3cmFwX21lc3NhZ2VfdGFpbChzYiwgJmNvbnRleHQsIDAsIDAsIDApOwogfQogCiBzdGF0aWMgdm9pZCBwcF9oZWFkZXIoZW51bSBjbWl0X2ZtdCBmbXQsCkBAIC04ODEsMjUgKzEwMTAsMjUgQEAKIAkJICAgID8gZ2l0X2xvZ19vdXRwdXRfZW5jb2RpbmcKIAkJICAgIDogZ2l0X2NvbW1pdF9lbmNvZGluZyk7CiAJaWYgKCFlbmNvZGluZykKLQkJZW5jb2RpbmcgPSAidXRmLTgiOworCQllbmNvZGluZyA9ICJVVEYtOCI7CiAJaWYgKGVuY29kaW5nX3ApCiAJCSplbmNvZGluZ19wID0gZW5jb2Rpbmc7CiAJcmV0dXJuIGxvZ21zZ19yZWVuY29kZShjb21taXQsIGVuY29kaW5nKTsKIH0KIAogdm9pZCBwcmV0dHlfcHJpbnRfY29tbWl0KGVudW0gY21pdF9mbXQgZm10LCBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCi0JCQkgc3RydWN0IHN0cmJ1ZiAqc2IsIGludCBhYmJyZXYsCi0JCQkgY29uc3QgY2hhciAqc3ViamVjdCwgY29uc3QgY2hhciAqYWZ0ZXJfc3ViamVjdCwKLQkJCSBlbnVtIGRhdGVfbW9kZSBkbW9kZSwgaW50IG5lZWRfOGJpdF9jdGUpCisJCQkgc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkgY29uc3Qgc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpjb250ZXh0KQogewogCXVuc2lnbmVkIGxvbmcgYmVnaW5uaW5nX29mX2JvZHk7CiAJaW50IGluZGVudCA9IDQ7CiAJY29uc3QgY2hhciAqbXNnID0gY29tbWl0LT5idWZmZXI7CiAJY2hhciAqcmVlbmNvZGVkOwogCWNvbnN0IGNoYXIgKmVuY29kaW5nOworCWludCBuZWVkXzhiaXRfY3RlID0gY29udGV4dC0+bmVlZF84Yml0X2N0ZTsKIAogCWlmIChmbXQgPT0gQ01JVF9GTVRfVVNFUkZPUk1BVCkgewotCQlmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29tbWl0LCB1c2VyX2Zvcm1hdCwgc2IsIGRtb2RlKTsKKwkJZm9ybWF0X2NvbW1pdF9tZXNzYWdlKGNvbW1pdCwgdXNlcl9mb3JtYXQsIHNiLCBjb250ZXh0KTsKIAkJcmV0dXJuOwogCX0KIApAQCAtOTM0LDggKzEwNjMsOSBAQAogCQl9CiAJfQogCi0JcHBfaGVhZGVyKGZtdCwgYWJicmV2LCBkbW9kZSwgZW5jb2RpbmcsIGNvbW1pdCwgJm1zZywgc2IpOwotCWlmIChmbXQgIT0gQ01JVF9GTVRfT05FTElORSAmJiAhc3ViamVjdCkgeworCXBwX2hlYWRlcihmbXQsIGNvbnRleHQtPmFiYnJldiwgY29udGV4dC0+ZGF0ZV9tb2RlLCBlbmNvZGluZywKKwkJICBjb21taXQsICZtc2csIHNiKTsKKwlpZiAoZm10ICE9IENNSVRfRk1UX09ORUxJTkUgJiYgIWNvbnRleHQtPnN1YmplY3QpIHsKIAkJc3RyYnVmX2FkZGNoKHNiLCAnXG4nKTsKIAl9CiAKQEAgLTk0NCw4ICsxMDc0LDggQEAKIAogCS8qIFRoZXNlIGZvcm1hdHMgdHJlYXQgdGhlIHRpdGxlIGxpbmUgc3BlY2lhbGx5LiAqLwogCWlmIChmbXQgPT0gQ01JVF9GTVRfT05FTElORSB8fCBmbXQgPT0gQ01JVF9GTVRfRU1BSUwpCi0JCXBwX3RpdGxlX2xpbmUoZm10LCAmbXNnLCBzYiwgc3ViamVjdCwKLQkJCSAgICAgIGFmdGVyX3N1YmplY3QsIGVuY29kaW5nLCBuZWVkXzhiaXRfY3RlKTsKKwkJcHBfdGl0bGVfbGluZShmbXQsICZtc2csIHNiLCBjb250ZXh0LT5zdWJqZWN0LAorCQkJICAgICAgY29udGV4dC0+YWZ0ZXJfc3ViamVjdCwgZW5jb2RpbmcsIG5lZWRfOGJpdF9jdGUpOwogCiAJYmVnaW5uaW5nX29mX2JvZHkgPSBzYi0+bGVuOwogCWlmIChmbXQgIT0gQ01JVF9GTVRfT05FTElORSkKQEAgLTk2Myw1ICsxMDkzLDEwIEBACiAJICovCiAJaWYgKGZtdCA9PSBDTUlUX0ZNVF9FTUFJTCAmJiBzYi0+bGVuIDw9IGJlZ2lubmluZ19vZl9ib2R5KQogCQlzdHJidWZfYWRkY2goc2IsICdcbicpOworCisJaWYgKGNvbnRleHQtPnNob3dfbm90ZXMpCisJCWdldF9jb21taXRfbm90ZXMoY29tbWl0LCBzYiwgZW5jb2RpbmcsCisJCQkJIE5PVEVTX1NIT1dfSEVBREVSIHwgTk9URVNfSU5ERU5UKTsKKwogCWZyZWUocmVlbmNvZGVkKTsKIH0KZGlmZiAtLWdpdCBhL3Byb2dyZXNzLmMgYi9wcm9ncmVzcy5jCmluZGV4IDYyMWMzNGUuLjM5NzFmNDkgMTAwNjQ0Ci0tLSBhL3Byb2dyZXNzLmMKKysrIGIvcHJvZ3Jlc3MuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBTaW1wbGUgdGV4dC1iYXNlZCBwcm9ncmVzcyBkaXNwbGF5IG1vZHVsZSBmb3IgR0lUCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA3IGJ5IE5pY29sYXMgUGl0cmUgPG5pY29AY2FtLm9yZz4KKyAqIENvcHlyaWdodCAoYykgMjAwNyBieSBOaWNvbGFzIFBpdHJlIDxuaWNvQGZsdXhuaWMubmV0PgogICoKICAqIFRoaXMgY29kZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMTMxLDcgKzEzMSwxMyBAQAogCX0gZWxzZSB7CiAJCWwgLT0gc25wcmludGYodHAtPmRpc3BsYXksIGwsICIsICV1IGJ5dGVzIiwgKGludCl0b3RhbCk7CiAJfQotCWlmIChyYXRlKQorCisJaWYgKHJhdGUgPiAxIDw8IDEwKSB7CisJCWludCB4ID0gcmF0ZSArIDU7ICAvKiBmb3Igcm91bmRpbmcgKi8KKwkJc25wcmludGYodHAtPmRpc3BsYXkgKyBzaXplb2YodHAtPmRpc3BsYXkpIC0gbCwgbCwKKwkJCSAiIHwgJXUuJTIuMnUgTWlCL3MiLAorCQkJIHggPj4gMTAsICgoeCAmICgoMSA8PCAxMCkgLSAxKSkgKiAxMDApID4+IDEwKTsKKwl9IGVsc2UgaWYgKHJhdGUpCiAJCXNucHJpbnRmKHRwLT5kaXNwbGF5ICsgc2l6ZW9mKHRwLT5kaXNwbGF5KSAtIGwsIGwsCiAJCQkgIiB8ICV1IEtpQi9zIiwgcmF0ZSk7CiB9CmRpZmYgLS1naXQgYS9xdW90ZS5jIGIvcXVvdGUuYwppbmRleCA3YTQ5ZmNmLi5mYzkzNDM1IDEwMDY0NAotLS0gYS9xdW90ZS5jCisrKyBiL3F1b3RlLmMKQEAgLTcyLDcgKzcyLDcgQEAKIAl9CiB9CiAKLWNoYXIgKnNxX2RlcXVvdGVfc3RlcChjaGFyICphcmcsIGNoYXIgKipuZXh0KQorc3RhdGljIGNoYXIgKnNxX2RlcXVvdGVfc3RlcChjaGFyICphcmcsIGNoYXIgKipuZXh0KQogewogCWNoYXIgKmRzdCA9IGFyZzsKIAljaGFyICpzcmMgPSBhcmc7CkBAIC0yMTMsNyArMjEzLDcgQEAKIAkJaW50IGNoOwogCiAJCWxlbiA9IG5leHRfcXVvdGVfcG9zKHAsIG1heGxlbik7Ci0JCWlmIChsZW4gPT0gbWF4bGVuIHx8ICFwW2xlbl0pCisJCWlmIChsZW4gPT0gbWF4bGVuIHx8IChtYXhsZW4gPCAwICYmICFwW2xlbl0pKQogCQkJYnJlYWs7CiAKIAkJaWYgKCFub19kcSAmJiBwID09IG5hbWUpCkBAIC0yMjMsNiArMjIzLDggQEAKIAkJRU1JVCgnXFwnKTsKIAkJcCArPSBsZW47CiAJCWNoID0gKHVuc2lnbmVkIGNoYXIpKnArKzsKKwkJaWYgKG1heGxlbiA+PSAwKQorCQkJbWF4bGVuIC09IGxlbiArIDE7CiAJCWlmIChzcV9sb29rdXBbY2hdID49ICcgJykgewogCQkJRU1JVChzcV9sb29rdXBbY2hdKTsKIAkJfSBlbHNlIHsKQEAgLTI3Miw4ICsyNzQsOCBAQAogCWZwdXRjKHRlcm1pbmF0b3IsIGZwKTsKIH0KIAotZXh0ZXJuIHZvaWQgd3JpdGVfbmFtZV9xdW90ZWRwZngoY29uc3QgY2hhciAqcGZ4LCBzaXplX3QgcGZ4bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwgRklMRSAqZnAsIGludCB0ZXJtaW5hdG9yKQordm9pZCB3cml0ZV9uYW1lX3F1b3RlZHBmeChjb25zdCBjaGFyICpwZngsIHNpemVfdCBwZnhsZW4sCisJCQkgIGNvbnN0IGNoYXIgKm5hbWUsIEZJTEUgKmZwLCBpbnQgdGVybWluYXRvcikKIHsKIAlpbnQgbmVlZHF1b3RlID0gMDsKIApkaWZmIC0tZ2l0IGEvcXVvdGUuaCBiL3F1b3RlLmgKaW5kZXggNjY3MzBmMi4uZjgzZWIyMyAxMDA2NDQKLS0tIGEvcXVvdGUuaAorKysgYi9xdW90ZS5oCkBAIC00NSw3ICs0NSw2IEBACiAgKiBuZXh0IGFyZ3VtZW50IHRoYXQgc2hvdWxkIGJlIHBhc3NlZCBhcyBmaXJzdCBwYXJhbWV0ZXIuIFdoZW4gdGhlcmUKICAqIGlzIG5vIG1vcmUgYXJndW1lbnQgdG8gYmUgZGVxdW90ZWQsICJuZXh0IiBpcyB1cGRhdGVkIHRvIHBvaW50IHRvIE5VTEwuCiAgKi8KLWV4dGVybiBjaGFyICpzcV9kZXF1b3RlX3N0ZXAoY2hhciAqYXJnLCBjaGFyICoqbmV4dCk7CiBleHRlcm4gaW50IHNxX2RlcXVvdGVfdG9fYXJndihjaGFyICphcmcsIGNvbnN0IGNoYXIgKioqYXJndiwgaW50ICpuciwgaW50ICphbGxvYyk7CiAKIGV4dGVybiBpbnQgdW5xdW90ZV9jX3N0eWxlKHN0cnVjdCBzdHJidWYgKiwgY29uc3QgY2hhciAqcXVvdGVkLCBjb25zdCBjaGFyICoqZW5kcCk7CmRpZmYgLS1naXQgYS9yZWFkLWNhY2hlLmMgYi9yZWFkLWNhY2hlLmMKaW5kZXggM2Y1ODcxMS4uZjFmNzg5YiAxMDA2NDQKLS0tIGEvcmVhZC1jYWNoZS5jCisrKyBiL3JlYWQtY2FjaGUuYwpAQCAtMTAsMTAgKzEwLDEwIEBACiAjaW5jbHVkZSAiZGlyLmgiCiAjaW5jbHVkZSAidHJlZS5oIgogI2luY2x1ZGUgImNvbW1pdC5oIgotI2luY2x1ZGUgImRpZmYuaCIKLSNpbmNsdWRlICJkaWZmY29yZS5oIgotI2luY2x1ZGUgInJldmlzaW9uLmgiCiAjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgInJlc29sdmUtdW5kby5oIgorCitzdGF0aWMgc3RydWN0IGNhY2hlX2VudHJ5ICpyZWZyZXNoX2NhY2hlX2VudHJ5KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGludCByZWFsbHkpOwogCiAvKiBJbmRleCBleHRlbnNpb25zLgogICoKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2RlZmluZSBDQUNIRV9FWFQocykgKCAoc1swXTw8MjQpfChzWzFdPDwxNil8KHNbMl08PDgpfChzWzNdKSApCiAjZGVmaW5lIENBQ0hFX0VYVF9UUkVFIDB4NTQ1MjQ1NDUJLyogIlRSRUUiICovCisjZGVmaW5lIENBQ0hFX0VYVF9SRVNPTFZFX1VORE8gMHg1MjQ1NTU0MyAvKiAiUkVVQyIgKi8KIAogc3RydWN0IGluZGV4X3N0YXRlIHRoZV9pbmRleDsKIApAQCAtMTU2LDcgKzE1Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBpc19lbXB0eV9ibG9iX3NoYTEoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3N0YXRpYyBpbnQgaXNfZW1wdHlfYmxvYl9zaGExKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCiB7CiAJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZW1wdHlfYmxvYl9zaGExWzIwXSA9IHsKIAkJMHhlNiwweDlkLDB4ZTIsMHg5YiwweGIyLDB4ZDEsMHhkNiwweDQzLDB4NGIsMHg4YiwKQEAgLTI1OSwxMiArMjYwLDE3IEBACiB7CiAJdW5zaWduZWQgaW50IGNoYW5nZWQ7CiAJaW50IGlnbm9yZV92YWxpZCA9IG9wdGlvbnMgJiBDRV9NQVRDSF9JR05PUkVfVkFMSUQ7CisJaW50IGlnbm9yZV9za2lwX3dvcmt0cmVlID0gb3B0aW9ucyAmIENFX01BVENIX0lHTk9SRV9TS0lQX1dPUktUUkVFOwogCWludCBhc3N1bWVfcmFjeV9pc19tb2RpZmllZCA9IG9wdGlvbnMgJiBDRV9NQVRDSF9SQUNZX0lTX0RJUlRZOwogCiAJLyoKIAkgKiBJZiBpdCdzIG1hcmtlZCBhcyBhbHdheXMgdmFsaWQgaW4gdGhlIGluZGV4LCBpdCdzCiAJICogdmFsaWQgd2hhdGV2ZXIgdGhlIGNoZWNrZWQtb3V0IGNvcHkgc2F5cy4KKwkgKgorCSAqIHNraXAtd29ya3RyZWUgaGFzIHRoZSBzYW1lIGVmZmVjdCB3aXRoIGhpZ2hlciBwcmVjZWRlbmNlCiAJICovCisJaWYgKCFpZ25vcmVfc2tpcF93b3JrdHJlZSAmJiBjZV9za2lwX3dvcmt0cmVlKGNlKSkKKwkJcmV0dXJuIDA7CiAJaWYgKCFpZ25vcmVfdmFsaWQgJiYgKGNlLT5jZV9mbGFncyAmIENFX1ZBTElEKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTQ0OSw2ICs0NTUsNyBAQAogewogCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpc3RhdGUtPmNhY2hlW3Bvc107CiAKKwlyZWNvcmRfcmVzb2x2ZV91bmRvKGlzdGF0ZSwgY2UpOwogCXJlbW92ZV9uYW1lX2hhc2goY2UpOwogCWlzdGF0ZS0+Y2FjaGVfY2hhbmdlZCA9IDE7CiAJaXN0YXRlLT5jYWNoZV9uci0tOwpAQCAtNTY0LDcgKzU3MSw3IEBACiAJaW50IHNpemUsIG5hbWVsZW4sIHdhc19zYW1lOwogCW1vZGVfdCBzdF9tb2RlID0gc3QtPnN0X21vZGU7CiAJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgKmFsaWFzOwotCXVuc2lnbmVkIGNlX29wdGlvbiA9IENFX01BVENIX0lHTk9SRV9WQUxJRHxDRV9NQVRDSF9SQUNZX0lTX0RJUlRZOworCXVuc2lnbmVkIGNlX29wdGlvbiA9IENFX01BVENIX0lHTk9SRV9WQUxJRHxDRV9NQVRDSF9JR05PUkVfU0tJUF9XT1JLVFJFRXxDRV9NQVRDSF9SQUNZX0lTX0RJUlRZOwogCWludCB2ZXJib3NlID0gZmxhZ3MgJiAoQUREX0NBQ0hFX1ZFUkJPU0UgfCBBRERfQ0FDSEVfUFJFVEVORCk7CiAJaW50IHByZXRlbmQgPSBmbGFncyAmIEFERF9DQUNIRV9QUkVURU5EOwogCWludCBpbnRlbnRfb25seSA9IGZsYWdzICYgQUREX0NBQ0hFX0lOVEVOVDsKQEAgLTYwNSw3ICs2MTIsOCBAQAogCWlmIChhbGlhcyAmJiAhY2Vfc3RhZ2UoYWxpYXMpICYmICFpZV9tYXRjaF9zdGF0KGlzdGF0ZSwgYWxpYXMsIHN0LCBjZV9vcHRpb24pKSB7CiAJCS8qIE5vdGhpbmcgY2hhbmdlZCwgcmVhbGx5ICovCiAJCWZyZWUoY2UpOwotCQljZV9tYXJrX3VwdG9kYXRlKGFsaWFzKTsKKwkJaWYgKCFTX0lTR0lUTElOSyhhbGlhcy0+Y2VfbW9kZSkpCisJCQljZV9tYXJrX3VwdG9kYXRlKGFsaWFzKTsKIAkJYWxpYXMtPmNlX2ZsYWdzIHw9IENFX0FEREVEOwogCQlyZXR1cm4gMDsKIAl9CkBAIC02MzgsNyArNjQ2LDcgQEAKIHsKIAlzdHJ1Y3Qgc3RhdCBzdDsKIAlpZiAobHN0YXQocGF0aCwgJnN0KSkKLQkJZGllKCIlczogdW5hYmxlIHRvIHN0YXQgKCVzKSIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygidW5hYmxlIHRvIHN0YXQgJyVzJyIsIHBhdGgpOwogCXJldHVybiBhZGRfdG9faW5kZXgoaXN0YXRlLCBwYXRoLCAmc3QsIGZsYWdzKTsKIH0KIApAQCAtMTAwMCwxNCArMTAwOCwyMCBAQAogCXN0cnVjdCBjYWNoZV9lbnRyeSAqdXBkYXRlZDsKIAlpbnQgY2hhbmdlZCwgc2l6ZTsKIAlpbnQgaWdub3JlX3ZhbGlkID0gb3B0aW9ucyAmIENFX01BVENIX0lHTk9SRV9WQUxJRDsKKwlpbnQgaWdub3JlX3NraXBfd29ya3RyZWUgPSBvcHRpb25zICYgQ0VfTUFUQ0hfSUdOT1JFX1NLSVBfV09SS1RSRUU7CiAKIAlpZiAoY2VfdXB0b2RhdGUoY2UpKQogCQlyZXR1cm4gY2U7CiAKIAkvKgotCSAqIENFX1ZBTElEIG1lYW5zIHRoZSB1c2VyIHByb21pc2VkIHVzIHRoYXQgdGhlIGNoYW5nZSB0bwotCSAqIHRoZSB3b3JrIHRyZWUgZG9lcyBub3QgbWF0dGVyIGFuZCB0b2xkIHVzIG5vdCB0byB3b3JyeS4KKwkgKiBDRV9WQUxJRCBvciBDRV9TS0lQX1dPUktUUkVFIG1lYW5zIHRoZSB1c2VyIHByb21pc2VkIHVzCisJICogdGhhdCB0aGUgY2hhbmdlIHRvIHRoZSB3b3JrIHRyZWUgZG9lcyBub3QgbWF0dGVyIGFuZCB0b2xkCisJICogdXMgbm90IHRvIHdvcnJ5LgogCSAqLworCWlmICghaWdub3JlX3NraXBfd29ya3RyZWUgJiYgY2Vfc2tpcF93b3JrdHJlZShjZSkpIHsKKwkJY2VfbWFya191cHRvZGF0ZShjZSk7CisJCXJldHVybiBjZTsKKwl9CiAJaWYgKCFpZ25vcmVfdmFsaWQgJiYgKGNlLT5jZV9mbGFncyAmIENFX1ZBTElEKSkgewogCQljZV9tYXJrX3VwdG9kYXRlKGNlKTsKIAkJcmV0dXJuIGNlOwpAQCAtMTAzNyw3ICsxMDUxLDggQEAKIAkJCSAqIGJlY2F1c2UgQ0VfVVBUT0RBVEUgZmxhZyBpcyBpbi1jb3JlIG9ubHk7CiAJCQkgKiB3ZSBhcmUgbm90IGdvaW5nIHRvIHdyaXRlIHRoaXMgY2hhbmdlIG91dC4KIAkJCSAqLwotCQkJY2VfbWFya191cHRvZGF0ZShjZSk7CisJCQlpZiAoIVNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSkKKwkJCQljZV9tYXJrX3VwdG9kYXRlKGNlKTsKIAkJCXJldHVybiBjZTsKIAkJfQogCX0KQEAgLTEwNjUsNyArMTA4MCwxOCBAQAogCXJldHVybiB1cGRhdGVkOwogfQogCi1pbnQgcmVmcmVzaF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgdW5zaWduZWQgaW50IGZsYWdzLCBjb25zdCBjaGFyICoqcGF0aHNwZWMsIGNoYXIgKnNlZW4pCitzdGF0aWMgdm9pZCBzaG93X2ZpbGUoY29uc3QgY2hhciAqIGZtdCwgY29uc3QgY2hhciAqIG5hbWUsIGludCBpbl9wb3JjZWxhaW4sCisJCSAgICAgIGludCAqIGZpcnN0LCBjaGFyICpoZWFkZXJfbXNnKQoreworCWlmIChpbl9wb3JjZWxhaW4gJiYgKmZpcnN0ICYmIGhlYWRlcl9tc2cpIHsKKwkJcHJpbnRmKCIlc1xuIiwgaGVhZGVyX21zZyk7CisJCSpmaXJzdD0wOworCX0KKwlwcmludGYoZm10LCBuYW1lKTsKK30KKworaW50IHJlZnJlc2hfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIHVuc2lnbmVkIGludCBmbGFncywgY29uc3QgY2hhciAqKnBhdGhzcGVjLAorCQkgIGNoYXIgKnNlZW4sIGNoYXIgKmhlYWRlcl9tc2cpCiB7CiAJaW50IGk7CiAJaW50IGhhc19lcnJvcnMgPSAwOwpAQCAtMTA3NCwxMSArMTEwMCwxNCBAQAogCWludCBxdWlldCA9IChmbGFncyAmIFJFRlJFU0hfUVVJRVQpICE9IDA7CiAJaW50IG5vdF9uZXcgPSAoZmxhZ3MgJiBSRUZSRVNIX0lHTk9SRV9NSVNTSU5HKSAhPSAwOwogCWludCBpZ25vcmVfc3VibW9kdWxlcyA9IChmbGFncyAmIFJFRlJFU0hfSUdOT1JFX1NVQk1PRFVMRVMpICE9IDA7CisJaW50IGZpcnN0ID0gMTsKKwlpbnQgaW5fcG9yY2VsYWluID0gKGZsYWdzICYgUkVGUkVTSF9JTl9QT1JDRUxBSU4pOwogCXVuc2lnbmVkIGludCBvcHRpb25zID0gcmVhbGx5ID8gQ0VfTUFUQ0hfSUdOT1JFX1ZBTElEIDogMDsKLQljb25zdCBjaGFyICpuZWVkc191cGRhdGVfbWVzc2FnZTsKKwljb25zdCBjaGFyICpuZWVkc191cGRhdGVfZm10OworCWNvbnN0IGNoYXIgKm5lZWRzX21lcmdlX2ZtdDsKIAotCW5lZWRzX3VwZGF0ZV9tZXNzYWdlID0gKChmbGFncyAmIFJFRlJFU0hfU0FZX0NIQU5HRUQpCi0JCQkJPyAibG9jYWxseSBtb2RpZmllZCIgOiAibmVlZHMgdXBkYXRlIik7CisJbmVlZHNfdXBkYXRlX2ZtdCA9IChpbl9wb3JjZWxhaW4gPyAiTVx0JXNcbiIgOiAiJXM6IG5lZWRzIHVwZGF0ZVxuIik7CisJbmVlZHNfbWVyZ2VfZm10ID0gKGluX3BvcmNlbGFpbiA/ICJVXHQlc1xuIiA6ICIlczogbmVlZHMgbWVyZ2VcbiIpOwogCWZvciAoaSA9IDA7IGkgPCBpc3RhdGUtPmNhY2hlX25yOyBpKyspIHsKIAkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgKm5ldzsKIAkJaW50IGNhY2hlX2Vycm5vID0gMDsKQEAgLTEwOTQsNyArMTEyMyw3IEBACiAJCQlpLS07CiAJCQlpZiAoYWxsb3dfdW5tZXJnZWQpCiAJCQkJY29udGludWU7Ci0JCQlwcmludGYoIiVzOiBuZWVkcyBtZXJnZVxuIiwgY2UtPm5hbWUpOworCQkJc2hvd19maWxlKG5lZWRzX21lcmdlX2ZtdCwgY2UtPm5hbWUsIGluX3BvcmNlbGFpbiwgJmZpcnN0LCBoZWFkZXJfbXNnKTsKIAkJCWhhc19lcnJvcnMgPSAxOwogCQkJY29udGludWU7CiAJCX0KQEAgLTExMTcsNyArMTE0Niw3IEBACiAJCQl9CiAJCQlpZiAocXVpZXQpCiAJCQkJY29udGludWU7Ci0JCQlwcmludGYoIiVzOiAlc1xuIiwgY2UtPm5hbWUsIG5lZWRzX3VwZGF0ZV9tZXNzYWdlKTsKKwkJCXNob3dfZmlsZShuZWVkc191cGRhdGVfZm10LCBjZS0+bmFtZSwgaW5fcG9yY2VsYWluLCAmZmlyc3QsIGhlYWRlcl9tc2cpOwogCQkJaGFzX2Vycm9ycyA9IDE7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMTEyNyw3ICsxMTU2LDcgQEAKIAlyZXR1cm4gaGFzX2Vycm9yczsKIH0KIAotc3RydWN0IGNhY2hlX2VudHJ5ICpyZWZyZXNoX2NhY2hlX2VudHJ5KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGludCByZWFsbHkpCitzdGF0aWMgc3RydWN0IGNhY2hlX2VudHJ5ICpyZWZyZXNoX2NhY2hlX2VudHJ5KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGludCByZWFsbHkpCiB7CiAJcmV0dXJuIHJlZnJlc2hfY2FjaGVfZW50KCZ0aGVfaW5kZXgsIGNlLCByZWFsbHksIE5VTEwpOwogfQpAQCAtMTE1Niw2ICsxMTg1LDkgQEAKIAljYXNlIENBQ0hFX0VYVF9UUkVFOgogCQlpc3RhdGUtPmNhY2hlX3RyZWUgPSBjYWNoZV90cmVlX3JlYWQoZGF0YSwgc3opOwogCQlicmVhazsKKwljYXNlIENBQ0hFX0VYVF9SRVNPTFZFX1VORE86CisJCWlzdGF0ZS0+cmVzb2x2ZV91bmRvID0gcmVzb2x2ZV91bmRvX3JlYWQoZGF0YSwgc3opOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlpZiAoKmV4dCA8ICdBJyB8fCAnWicgPCAqZXh0KQogCQkJcmV0dXJuIGVycm9yKCJpbmRleCB1c2VzICUuNHMgZXh0ZW5zaW9uLCB3aGljaCB3ZSBkbyBub3QgdW5kZXJzdGFuZCIsCkBAIC0xMjUxLDExICsxMjgzLDExIEBACiAJaWYgKGZkIDwgMCkgewogCQlpZiAoZXJybm8gPT0gRU5PRU5UKQogCQkJcmV0dXJuIDA7Ci0JCWRpZSgiaW5kZXggZmlsZSBvcGVuIGZhaWxlZCAoJXMpIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJpbmRleCBmaWxlIG9wZW4gZmFpbGVkIik7CiAJfQogCiAJaWYgKGZzdGF0KGZkLCAmc3QpKQotCQlkaWUoImNhbm5vdCBzdGF0IHRoZSBvcGVuIGluZGV4ICglcykiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImNhbm5vdCBzdGF0IHRoZSBvcGVuIGluZGV4Iik7CiAKIAllcnJubyA9IEVJTlZBTDsKIAltbWFwX3NpemUgPSB4c2l6ZV90KHN0LnN0X3NpemUpOwpAQCAtMTI2NSw3ICsxMjk3LDcgQEAKIAltbWFwID0geG1tYXAoTlVMTCwgbW1hcF9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSwgZmQsIDApOwogCWNsb3NlKGZkKTsKIAlpZiAobW1hcCA9PSBNQVBfRkFJTEVEKQotCQlkaWUoInVuYWJsZSB0byBtYXAgaW5kZXggZmlsZSIpOworCQlkaWVfZXJybm8oInVuYWJsZSB0byBtYXAgaW5kZXggZmlsZSIpOwogCiAJaGRyID0gbW1hcDsKIAlpZiAodmVyaWZ5X2hkcihoZHIsIG1tYXBfc2l6ZSkgPCAwKQpAQCAtMTMwOCw3ICsxMzQwLDcgQEAKIAkJICogZXh0ZW5zaW9uIG5hbWUgKDQtYnl0ZSkgYW5kIHNlY3Rpb24gbGVuZ3RoCiAJCSAqIGluIDQtYnl0ZSBuZXR3b3JrIGJ5dGUgb3JkZXIuCiAJCSAqLwotCQl1bnNpZ25lZCBsb25nIGV4dHNpemU7CisJCXVpbnQzMl90IGV4dHNpemU7CiAJCW1lbWNweSgmZXh0c2l6ZSwgKGNoYXIgKiltbWFwICsgc3JjX29mZnNldCArIDQsIDQpOwogCQlleHRzaXplID0gbnRvaGwoZXh0c2l6ZSk7CiAJCWlmIChyZWFkX2luZGV4X2V4dGVuc2lvbihpc3RhdGUsCkBAIC0xMzM1LDYgKzEzNjcsNyBAQAogCiBpbnQgZGlzY2FyZF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKIHsKKwlyZXNvbHZlX3VuZG9fY2xlYXJfaW5kZXgoaXN0YXRlKTsKIAlpc3RhdGUtPmNhY2hlX25yID0gMDsKIAlpc3RhdGUtPmNhY2hlX2NoYW5nZWQgPSAwOwogCWlzdGF0ZS0+dGltZXN0YW1wLnNlYyA9IDA7CkBAIC0xNTYwLDYgKzE1OTMsMTcgQEAKIAkJaWYgKGVycikKIAkJCXJldHVybiAtMTsKIAl9CisJaWYgKGlzdGF0ZS0+cmVzb2x2ZV91bmRvKSB7CisJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCQlyZXNvbHZlX3VuZG9fd3JpdGUoJnNiLCBpc3RhdGUtPnJlc29sdmVfdW5kbyk7CisJCWVyciA9IHdyaXRlX2luZGV4X2V4dF9oZWFkZXIoJmMsIG5ld2ZkLCBDQUNIRV9FWFRfUkVTT0xWRV9VTkRPLAorCQkJCQkgICAgIHNiLmxlbikgPCAwCisJCQl8fCBjZV93cml0ZSgmYywgbmV3ZmQsIHNiLmJ1Ziwgc2IubGVuKSA8IDA7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gLTE7CisJfQogCiAJaWYgKGNlX2ZsdXNoKCZjLCBuZXdmZCkgfHwgZnN0YXQobmV3ZmQsICZzdCkpCiAJCXJldHVybiAtMTsKQEAgLTE1OTIsOSArMTYzNiw4IEBACiAJCWxlbiA9IHN0cmxlbihjZS0+bmFtZSk7CiAJCXNpemUgPSBjYWNoZV9lbnRyeV9zaXplKGxlbik7CiAJCW5ld19jZSA9IHhjYWxsb2MoMSwgc2l6ZSk7Ci0JCWhhc2hjcHkobmV3X2NlLT5zaGExLCBjZS0+c2hhMSk7CiAJCW1lbWNweShuZXdfY2UtPm5hbWUsIGNlLT5uYW1lLCBsZW4pOwotCQluZXdfY2UtPmNlX2ZsYWdzID0gY3JlYXRlX2NlX2ZsYWdzKGxlbiwgMCk7CisJCW5ld19jZS0+Y2VfZmxhZ3MgPSBjcmVhdGVfY2VfZmxhZ3MobGVuLCAwKSB8IENFX0NPTkZMSUNURUQ7CiAJCW5ld19jZS0+Y2VfbW9kZSA9IGNlLT5jZV9tb2RlOwogCQlpZiAoYWRkX2luZGV4X2VudHJ5KGlzdGF0ZSwgbmV3X2NlLCAwKSkKIAkJCXJldHVybiBlcnJvcigiJXM6IGNhbm5vdCBkcm9wIHRvIHN0YWdlICMwIiwKQEAgLTE2MDQsODEgKzE2NDcsNiBAQAogCXJldHVybiB1bm1lcmdlZDsKIH0KIAotc3RydWN0IHVwZGF0ZV9jYWxsYmFja19kYXRhCi17Ci0JaW50IGZsYWdzOwotCWludCBhZGRfZXJyb3JzOwotfTsKLQotc3RhdGljIHZvaWQgdXBkYXRlX2NhbGxiYWNrKHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSwKLQkJCSAgICBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQsIHZvaWQgKmNiZGF0YSkKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgdXBkYXRlX2NhbGxiYWNrX2RhdGEgKmRhdGEgPSBjYmRhdGE7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgewotCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IHEtPnF1ZXVlW2ldOwotCQljb25zdCBjaGFyICpwYXRoID0gcC0+b25lLT5wYXRoOwotCQlzd2l0Y2ggKHAtPnN0YXR1cykgewotCQlkZWZhdWx0OgotCQkJZGllKCJ1bmV4cGVjdGVkIGRpZmYgc3RhdHVzICVjIiwgcC0+c3RhdHVzKTsKLQkJY2FzZSBESUZGX1NUQVRVU19VTk1FUkdFRDoKLQkJCS8qCi0JCQkgKiBBRERfQ0FDSEVfSUdOT1JFX1JFTU9WQUwgaXMgdW5zZXQgaWYgImdpdAotCQkJICogYWRkIC11IiBpcyBjYWxsaW5nIHVzLCBJbiBzdWNoIGEgY2FzZSwgYQotCQkJICogbWlzc2luZyB3b3JrIHRyZWUgZmlsZSBuZWVkcyB0byBiZSByZW1vdmVkCi0JCQkgKiBpZiB0aGVyZSBpcyBhbiB1bm1lcmdlZCBlbnRyeSBhdCBzdGFnZSAjMiwKLQkJCSAqIGJ1dCBzdWNoIGEgZGlmZiByZWNvcmQgaXMgZm9sbG93ZWQgYnkKLQkJCSAqIGFub3RoZXIgd2l0aCBESUZGX1NUQVRVU19ERUxFVEVEIChhbmQgaWYKLQkJCSAqIHRoZXJlIGlzIG5vIHN0YWdlICMyLCB3ZSB3b24ndCBzZWUgREVMRVRFRAotCQkJICogbm9yIE1PRElGSUVEKS4gIFdlIGNhbiBzaW1wbHkgY29udGludWUKLQkJCSAqIGVpdGhlciB3YXkuCi0JCQkgKi8KLQkJCWlmICghKGRhdGEtPmZsYWdzICYgQUREX0NBQ0hFX0lHTk9SRV9SRU1PVkFMKSkKLQkJCQljb250aW51ZTsKLQkJCS8qCi0JCQkgKiBPdGhlcndpc2UsIGl0IGlzICJnaXQgYWRkIHBhdGgiIGlzIGFza2luZwotCQkJICogdG8gZXhwbGljaXRseSBhZGQgaXQ7IHdlIGZhbGwgdGhyb3VnaC4gIEEKLQkJCSAqIG1pc3Npbmcgd29yayB0cmVlIGZpbGUgaXMgYW4gZXJyb3IgYW5kIGlzCi0JCQkgKiBjYXVnaHQgYnkgYWRkX2ZpbGVfdG9faW5kZXgoKSBpbiBzdWNoIGEKLQkJCSAqIGNhc2UuCi0JCQkgKi8KLQkJY2FzZSBESUZGX1NUQVRVU19NT0RJRklFRDoKLQkJY2FzZSBESUZGX1NUQVRVU19UWVBFX0NIQU5HRUQ6Ci0JCQlpZiAoYWRkX2ZpbGVfdG9faW5kZXgoJnRoZV9pbmRleCwgcGF0aCwgZGF0YS0+ZmxhZ3MpKSB7Ci0JCQkJaWYgKCEoZGF0YS0+ZmxhZ3MgJiBBRERfQ0FDSEVfSUdOT1JFX0VSUk9SUykpCi0JCQkJCWRpZSgidXBkYXRpbmcgZmlsZXMgZmFpbGVkIik7Ci0JCQkJZGF0YS0+YWRkX2Vycm9ycysrOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgRElGRl9TVEFUVVNfREVMRVRFRDoKLQkJCWlmIChkYXRhLT5mbGFncyAmIEFERF9DQUNIRV9JR05PUkVfUkVNT1ZBTCkKLQkJCQlicmVhazsKLQkJCWlmICghKGRhdGEtPmZsYWdzICYgQUREX0NBQ0hFX1BSRVRFTkQpKQotCQkJCXJlbW92ZV9maWxlX2Zyb21faW5kZXgoJnRoZV9pbmRleCwgcGF0aCk7Ci0JCQlpZiAoZGF0YS0+ZmxhZ3MgJiAoQUREX0NBQ0hFX1BSRVRFTkR8QUREX0NBQ0hFX1ZFUkJPU0UpKQotCQkJCXByaW50ZigicmVtb3ZlICclcydcbiIsIHBhdGgpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci19Ci0KLWludCBhZGRfZmlsZXNfdG9fY2FjaGUoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICoqcGF0aHNwZWMsIGludCBmbGFncykKLXsKLQlzdHJ1Y3QgdXBkYXRlX2NhbGxiYWNrX2RhdGEgZGF0YTsKLQlzdHJ1Y3QgcmV2X2luZm8gcmV2OwotCWluaXRfcmV2aXNpb25zKCZyZXYsIHByZWZpeCk7Ci0Jc2V0dXBfcmV2aXNpb25zKDAsIE5VTEwsICZyZXYsIE5VTEwpOwotCXJldi5wcnVuZV9kYXRhID0gcGF0aHNwZWM7Ci0JcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX0NBTExCQUNLOwotCXJldi5kaWZmb3B0LmZvcm1hdF9jYWxsYmFjayA9IHVwZGF0ZV9jYWxsYmFjazsKLQlkYXRhLmZsYWdzID0gZmxhZ3M7Ci0JZGF0YS5hZGRfZXJyb3JzID0gMDsKLQlyZXYuZGlmZm9wdC5mb3JtYXRfY2FsbGJhY2tfZGF0YSA9ICZkYXRhOwotCXJ1bl9kaWZmX2ZpbGVzKCZyZXYsIERJRkZfUkFDWV9JU19NT0RJRklFRCk7Ci0JcmV0dXJuICEhZGF0YS5hZGRfZXJyb3JzOwotfQotCiAvKgogICogUmV0dXJucyAxIGlmIHRoZSBwYXRoIGlzIGFuICJvdGhlciIgcGF0aCB3aXRoIHJlc3BlY3QgdG8KICAqIHRoZSBpbmRleDsgdGhhdCBpcywgdGhlIHBhdGggaXMgbm90IG1lbnRpb25lZCBpbiB0aGUgaW5kZXggYXQgYWxsLApkaWZmIC0tZ2l0IGEvcmVmbG9nLXdhbGsuYyBiL3JlZmxvZy13YWxrLmMKaW5kZXggNTYyM2VhNi4uY2FiYTRmNyAxMDA2NDQKLS0tIGEvcmVmbG9nLXdhbGsuYworKysgYi9yZWZsb2ctd2Fsay5jCkBAIC04LDYgKzgsNyBAQAogCiBzdHJ1Y3QgY29tcGxldGVfcmVmbG9ncyB7CiAJY2hhciAqcmVmOworCWNvbnN0IGNoYXIgKnNob3J0X3JlZjsKIAlzdHJ1Y3QgcmVmbG9nX2luZm8gewogCQl1bnNpZ25lZCBjaGFyIG9zaGExWzIwXSwgbnNoYTFbMjBdOwogCQljaGFyICplbWFpbDsKQEAgLTI0MSwzNiArMjQyLDc0IEBACiAJY29tbWl0LT5vYmplY3QuZmxhZ3MgJj0gfihBRERFRCB8IFNFRU4gfCBTSE9XTik7CiB9CiAKLXZvaWQgc2hvd19yZWZsb2dfbWVzc2FnZShzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqaW5mbywgaW50IG9uZWxpbmUsCit2b2lkIGdldF9yZWZsb2dfc2VsZWN0b3Ioc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkgc3RydWN0IHJlZmxvZ193YWxrX2luZm8gKnJlZmxvZ19pbmZvLAorCQkJIGVudW0gZGF0ZV9tb2RlIGRtb2RlLAorCQkJIGludCBzaG9ydGVuKQoreworCXN0cnVjdCBjb21taXRfcmVmbG9nICpjb21taXRfcmVmbG9nID0gcmVmbG9nX2luZm8tPmxhc3RfY29tbWl0X3JlZmxvZzsKKwlzdHJ1Y3QgcmVmbG9nX2luZm8gKmluZm87CisJY29uc3QgY2hhciAqcHJpbnRlZF9yZWY7CisKKwlpZiAoIWNvbW1pdF9yZWZsb2cpCisJCXJldHVybjsKKworCWlmIChzaG9ydGVuKSB7CisJCWlmICghY29tbWl0X3JlZmxvZy0+cmVmbG9ncy0+c2hvcnRfcmVmKQorCQkJY29tbWl0X3JlZmxvZy0+cmVmbG9ncy0+c2hvcnRfcmVmCisJCQkJPSBzaG9ydGVuX3VuYW1iaWd1b3VzX3JlZihjb21taXRfcmVmbG9nLT5yZWZsb2dzLT5yZWYsIDApOworCQlwcmludGVkX3JlZiA9IGNvbW1pdF9yZWZsb2ctPnJlZmxvZ3MtPnNob3J0X3JlZjsKKwl9IGVsc2UgeworCQlwcmludGVkX3JlZiA9IGNvbW1pdF9yZWZsb2ctPnJlZmxvZ3MtPnJlZjsKKwl9CisKKwlzdHJidWZfYWRkZihzYiwgIiVzQHsiLCBwcmludGVkX3JlZik7CisJaWYgKGNvbW1pdF9yZWZsb2ctPmZsYWcgfHwgZG1vZGUpIHsKKwkJaW5mbyA9ICZjb21taXRfcmVmbG9nLT5yZWZsb2dzLT5pdGVtc1tjb21taXRfcmVmbG9nLT5yZWNubysxXTsKKwkJc3RyYnVmX2FkZHN0cihzYiwgc2hvd19kYXRlKGluZm8tPnRpbWVzdGFtcCwgaW5mby0+dHosIGRtb2RlKSk7CisJfSBlbHNlIHsKKwkJc3RyYnVmX2FkZGYoc2IsICIlZCIsIGNvbW1pdF9yZWZsb2ctPnJlZmxvZ3MtPm5yCisJCQkgICAgLSAyIC0gY29tbWl0X3JlZmxvZy0+cmVjbm8pOworCX0KKworCXN0cmJ1Zl9hZGRjaChzYiwgJ30nKTsKK30KKwordm9pZCBnZXRfcmVmbG9nX21lc3NhZ2Uoc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQlzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqcmVmbG9nX2luZm8pCit7CisJc3RydWN0IGNvbW1pdF9yZWZsb2cgKmNvbW1pdF9yZWZsb2cgPSByZWZsb2dfaW5mby0+bGFzdF9jb21taXRfcmVmbG9nOworCXN0cnVjdCByZWZsb2dfaW5mbyAqaW5mbzsKKwlzaXplX3QgbGVuOworCisJaWYgKCFjb21taXRfcmVmbG9nKQorCQlyZXR1cm47CisKKwlpbmZvID0gJmNvbW1pdF9yZWZsb2ctPnJlZmxvZ3MtPml0ZW1zW2NvbW1pdF9yZWZsb2ctPnJlY25vKzFdOworCWxlbiA9IHN0cmxlbihpbmZvLT5tZXNzYWdlKTsKKwlpZiAobGVuID4gMCkKKwkJbGVuLS07IC8qIHN0cmlwIGF3YXkgdHJhaWxpbmcgbmV3bGluZSAqLworCXN0cmJ1Zl9hZGQoc2IsIGluZm8tPm1lc3NhZ2UsIGxlbik7Cit9CisKK3ZvaWQgc2hvd19yZWZsb2dfbWVzc2FnZShzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqcmVmbG9nX2luZm8sIGludCBvbmVsaW5lLAogCWVudW0gZGF0ZV9tb2RlIGRtb2RlKQogewotCWlmIChpbmZvICYmIGluZm8tPmxhc3RfY29tbWl0X3JlZmxvZykgewotCQlzdHJ1Y3QgY29tbWl0X3JlZmxvZyAqY29tbWl0X3JlZmxvZyA9IGluZm8tPmxhc3RfY29tbWl0X3JlZmxvZzsKKwlpZiAocmVmbG9nX2luZm8gJiYgcmVmbG9nX2luZm8tPmxhc3RfY29tbWl0X3JlZmxvZykgeworCQlzdHJ1Y3QgY29tbWl0X3JlZmxvZyAqY29tbWl0X3JlZmxvZyA9IHJlZmxvZ19pbmZvLT5sYXN0X2NvbW1pdF9yZWZsb2c7CiAJCXN0cnVjdCByZWZsb2dfaW5mbyAqaW5mbzsKKwkJc3RydWN0IHN0cmJ1ZiBzZWxlY3RvciA9IFNUUkJVRl9JTklUOwogCiAJCWluZm8gPSAmY29tbWl0X3JlZmxvZy0+cmVmbG9ncy0+aXRlbXNbY29tbWl0X3JlZmxvZy0+cmVjbm8rMV07CisJCWdldF9yZWZsb2dfc2VsZWN0b3IoJnNlbGVjdG9yLCByZWZsb2dfaW5mbywgZG1vZGUsIDApOwogCQlpZiAob25lbGluZSkgewotCQkJcHJpbnRmKCIlc0B7IiwgY29tbWl0X3JlZmxvZy0+cmVmbG9ncy0+cmVmKTsKLQkJCWlmIChjb21taXRfcmVmbG9nLT5mbGFnIHx8IGRtb2RlKQotCQkJCXByaW50ZigiJXMiLCBzaG93X2RhdGUoaW5mby0+dGltZXN0YW1wLAotCQkJCQkJICAgICAgIGluZm8tPnR6LAotCQkJCQkJICAgICAgIGRtb2RlKSk7Ci0JCQllbHNlCi0JCQkJcHJpbnRmKCIlZCIsIGNvbW1pdF9yZWZsb2ctPnJlZmxvZ3MtPm5yCi0JCQkJICAgICAgIC0gMiAtIGNvbW1pdF9yZWZsb2ctPnJlY25vKTsKLQkJCXByaW50ZigifTogJXMiLCBpbmZvLT5tZXNzYWdlKTsKKwkJCXByaW50ZigiJXM6ICVzIiwgc2VsZWN0b3IuYnVmLCBpbmZvLT5tZXNzYWdlKTsKIAkJfQogCQllbHNlIHsKLQkJCXByaW50ZigiUmVmbG9nOiAlc0B7IiwgY29tbWl0X3JlZmxvZy0+cmVmbG9ncy0+cmVmKTsKLQkJCWlmIChjb21taXRfcmVmbG9nLT5mbGFnIHx8IGRtb2RlKQotCQkJCXByaW50ZigiJXMiLCBzaG93X2RhdGUoaW5mby0+dGltZXN0YW1wLAotCQkJCQkJCWluZm8tPnR6LAotCQkJCQkJCWRtb2RlKSk7Ci0JCQllbHNlCi0JCQkJcHJpbnRmKCIlZCIsIGNvbW1pdF9yZWZsb2ctPnJlZmxvZ3MtPm5yCi0JCQkJICAgICAgIC0gMiAtIGNvbW1pdF9yZWZsb2ctPnJlY25vKTsKLQkJCXByaW50ZigifSAoJXMpXG5SZWZsb2cgbWVzc2FnZTogJXMiLAotCQkJICAgICAgIGluZm8tPmVtYWlsLCBpbmZvLT5tZXNzYWdlKTsKKwkJCXByaW50ZigiUmVmbG9nOiAlcyAoJXMpXG5SZWZsb2cgbWVzc2FnZTogJXMiLAorCQkJICAgICAgIHNlbGVjdG9yLmJ1ZiwgaW5mby0+ZW1haWwsIGluZm8tPm1lc3NhZ2UpOwogCQl9CisKKwkJc3RyYnVmX3JlbGVhc2UoJnNlbGVjdG9yKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9yZWZsb2ctd2Fsay5oIGIvcmVmbG9nLXdhbGsuaAppbmRleCA3NGM5MDk2Li43YmQyY2Q0IDEwMDY0NAotLS0gYS9yZWZsb2ctd2Fsay5oCisrKyBiL3JlZmxvZy13YWxrLmgKQEAgLTMsNiArMyw4IEBACiAKICNpbmNsdWRlICJjYWNoZS5oIgogCitzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbzsKKwogZXh0ZXJuIHZvaWQgaW5pdF9yZWZsb2dfd2FsayhzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyoqIGluZm8pOwogZXh0ZXJuIGludCBhZGRfcmVmbG9nX2Zvcl93YWxrKHN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICppbmZvLAogCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGNvbnN0IGNoYXIgKm5hbWUpOwpAQCAtMTAsNSArMTIsMTEgQEAKIAkJc3RydWN0IGNvbW1pdCAqY29tbWl0KTsKIGV4dGVybiB2b2lkIHNob3dfcmVmbG9nX21lc3NhZ2Uoc3RydWN0IHJlZmxvZ193YWxrX2luZm8gKmluZm8sIGludCwKIAkJZW51bSBkYXRlX21vZGUpOworZXh0ZXJuIHZvaWQgZ2V0X3JlZmxvZ19tZXNzYWdlKHN0cnVjdCBzdHJidWYgKnNiLAorCQlzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqcmVmbG9nX2luZm8pOworZXh0ZXJuIHZvaWQgZ2V0X3JlZmxvZ19zZWxlY3RvcihzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJc3RydWN0IHJlZmxvZ193YWxrX2luZm8gKnJlZmxvZ19pbmZvLAorCQllbnVtIGRhdGVfbW9kZSBkbW9kZSwKKwkJaW50IHNob3J0ZW4pOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3JlZnMuYyBiL3JlZnMuYwppbmRleCA5YzEyZjVlLi5hNzUxOGI2IDEwMDY0NAotLS0gYS9yZWZzLmMKKysrIGIvcmVmcy5jCkBAIC0yODksNiArMjg5LDcgQEAKIH0KIAogc3RydWN0IHdhcm5faWZfZGFuZ2xpbmdfZGF0YSB7CisJRklMRSAqZnA7CiAJY29uc3QgY2hhciAqcmVmbmFtZTsKIAljb25zdCBjaGFyICptc2dfZm10OwogfTsKQEAgLTMwNywxMyArMzA4LDEzIEBACiAJaWYgKCFyZXNvbHZlc190byB8fCBzdHJjbXAocmVzb2x2ZXNfdG8sIGQtPnJlZm5hbWUpKQogCQlyZXR1cm4gMDsKIAotCXByaW50ZihkLT5tc2dfZm10LCByZWZuYW1lKTsKKwlmcHJpbnRmKGQtPmZwLCBkLT5tc2dfZm10LCByZWZuYW1lKTsKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCB3YXJuX2RhbmdsaW5nX3N5bXJlZihjb25zdCBjaGFyICptc2dfZm10LCBjb25zdCBjaGFyICpyZWZuYW1lKQordm9pZCB3YXJuX2RhbmdsaW5nX3N5bXJlZihGSUxFICpmcCwgY29uc3QgY2hhciAqbXNnX2ZtdCwgY29uc3QgY2hhciAqcmVmbmFtZSkKIHsKLQlzdHJ1Y3Qgd2Fybl9pZl9kYW5nbGluZ19kYXRhIGRhdGEgPSB7IHJlZm5hbWUsIG1zZ19mbXQgfTsKKwlzdHJ1Y3Qgd2Fybl9pZl9kYW5nbGluZ19kYXRhIGRhdGEgPSB7IGZwLCByZWZuYW1lLCBtc2dfZm10IH07CiAJZm9yX2VhY2hfcmF3cmVmKHdhcm5faWZfZGFuZ2xpbmdfc3ltcmVmLCAmZGF0YSk7CiB9CiAKQEAgLTUyMSw2ICs1MjIsMTMgQEAKIAlyZXR1cm4gcmVmOwogfQogCisvKiBUaGUgYXJndW1lbnQgdG8gZmlsdGVyX3JlZnMgKi8KK3N0cnVjdCByZWZfZmlsdGVyIHsKKwljb25zdCBjaGFyICpwYXR0ZXJuOworCWVhY2hfcmVmX2ZuICpmbjsKKwl2b2lkICpjYl9kYXRhOworfTsKKwogaW50IHJlYWRfcmVmKGNvbnN0IGNoYXIgKnJlZiwgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKIAlpZiAocmVzb2x2ZV9yZWYocmVmLCBzaGExLCAxLCBOVUxMKSkKQEAgLTU0Nyw2ICs1NTUsMTUgQEAKIAlyZXR1cm4gZm4oZW50cnktPm5hbWUgKyB0cmltLCBlbnRyeS0+c2hhMSwgZW50cnktPmZsYWcsIGNiX2RhdGEpOwogfQogCitzdGF0aWMgaW50IGZpbHRlcl9yZWZzKGNvbnN0IGNoYXIgKnJlZiwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhLCBpbnQgZmxhZ3MsCisJdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcmVmX2ZpbHRlciAqZmlsdGVyID0gKHN0cnVjdCByZWZfZmlsdGVyICopZGF0YTsKKwlpZiAoZm5tYXRjaChmaWx0ZXItPnBhdHRlcm4sIHJlZiwgMCkpCisJCXJldHVybiAwOworCXJldHVybiBmaWx0ZXItPmZuKHJlZiwgc2hhLCBmbGFncywgZmlsdGVyLT5jYl9kYXRhKTsKK30KKwogaW50IHBlZWxfcmVmKGNvbnN0IGNoYXIgKnJlZiwgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKIAlpbnQgZmxhZzsKQEAgLTY3MSw2ICs2ODgsNDggQEAKIAlyZXR1cm4gZm9yX2VhY2hfcmVmX2luKCJyZWZzL3JlbW90ZXMvIiwgZm4sIGNiX2RhdGEpOwogfQogCitpbnQgZm9yX2VhY2hfcmVwbGFjZV9yZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJcmV0dXJuIGRvX2Zvcl9lYWNoX3JlZigicmVmcy9yZXBsYWNlLyIsIGZuLCAxMywgMCwgY2JfZGF0YSk7Cit9CisKK2ludCBmb3JfZWFjaF9nbG9iX3JlZl9pbihlYWNoX3JlZl9mbiBmbiwgY29uc3QgY2hhciAqcGF0dGVybiwKKwljb25zdCBjaGFyICpwcmVmaXgsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHN0cmJ1ZiByZWFsX3BhdHRlcm4gPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcmVmX2ZpbHRlciBmaWx0ZXI7CisJY29uc3QgY2hhciAqaGFzX2dsb2Jfc3BlY2lhbHM7CisJaW50IHJldDsKKworCWlmICghcHJlZml4ICYmIHByZWZpeGNtcChwYXR0ZXJuLCAicmVmcy8iKSkKKwkJc3RyYnVmX2FkZHN0cigmcmVhbF9wYXR0ZXJuLCAicmVmcy8iKTsKKwllbHNlIGlmIChwcmVmaXgpCisJCXN0cmJ1Zl9hZGRzdHIoJnJlYWxfcGF0dGVybiwgcHJlZml4KTsKKwlzdHJidWZfYWRkc3RyKCZyZWFsX3BhdHRlcm4sIHBhdHRlcm4pOworCisJaGFzX2dsb2Jfc3BlY2lhbHMgPSBzdHJwYnJrKHBhdHRlcm4sICI/KlsiKTsKKwlpZiAoIWhhc19nbG9iX3NwZWNpYWxzKSB7CisJCS8qIEFwcGVuZCBpbXBsaWVkICcvJyAnKicgaWYgbm90IHByZXNlbnQuICovCisJCWlmIChyZWFsX3BhdHRlcm4uYnVmW3JlYWxfcGF0dGVybi5sZW4gLSAxXSAhPSAnLycpCisJCQlzdHJidWZfYWRkY2goJnJlYWxfcGF0dGVybiwgJy8nKTsKKwkJLyogTm8gbmVlZCB0byBjaGVjayBmb3IgJyonLCB0aGVyZSBpcyBub25lLiAqLworCQlzdHJidWZfYWRkY2goJnJlYWxfcGF0dGVybiwgJyonKTsKKwl9CisKKwlmaWx0ZXIucGF0dGVybiA9IHJlYWxfcGF0dGVybi5idWY7CisJZmlsdGVyLmZuID0gZm47CisJZmlsdGVyLmNiX2RhdGEgPSBjYl9kYXRhOworCXJldCA9IGZvcl9lYWNoX3JlZihmaWx0ZXJfcmVmcywgJmZpbHRlcik7CisKKwlzdHJidWZfcmVsZWFzZSgmcmVhbF9wYXR0ZXJuKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZm9yX2VhY2hfZ2xvYl9yZWYoZWFjaF9yZWZfZm4gZm4sIGNvbnN0IGNoYXIgKnBhdHRlcm4sIHZvaWQgKmNiX2RhdGEpCit7CisJcmV0dXJuIGZvcl9lYWNoX2dsb2JfcmVmX2luKGZuLCBwYXR0ZXJuLCBOVUxMLCBjYl9kYXRhKTsKK30KKwogaW50IGZvcl9lYWNoX3Jhd3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKIHsKIAlyZXR1cm4gZG9fZm9yX2VhY2hfcmVmKCJyZWZzLyIsIGZuLCAwLApAQCAtNjg2LDEyICs3NDUsMTMgQEAKICAqIC0gaXQgaGFzIEFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVyLCAifiIsICJeIiwgIjoiIG9yIFNQLCBhbnl3aGVyZSwgb3IKICAqIC0gaXQgZW5kcyB3aXRoIGEgIi8iLgogICogLSBpdCBlbmRzIHdpdGggIi5sb2NrIgorICogLSBpdCBjb250YWlucyBhICJcIiAoYmFja3NsYXNoKQogICovCiAKIHN0YXRpYyBpbmxpbmUgaW50IGJhZF9yZWZfY2hhcihpbnQgY2gpCiB7CiAJaWYgKCgodW5zaWduZWQpIGNoKSA8PSAnICcgfHwKLQkgICAgY2ggPT0gJ34nIHx8IGNoID09ICdeJyB8fCBjaCA9PSAnOicpCisJICAgIGNoID09ICd+JyB8fCBjaCA9PSAnXicgfHwgY2ggPT0gJzonIHx8IGNoID09ICdcXCcpCiAJCXJldHVybiAxOwogCS8qIDIuMTMgUGF0dGVybiBNYXRjaGluZyBOb3RhdGlvbiAqLwogCWlmIChjaCA9PSAnPycgfHwgY2ggPT0gJ1snKSAvKiBVbnN1cHBvcnRlZCAqLwpAQCAtNzU0LDkgKzgxNCw4IEBACiAJfQogfQogCi1jb25zdCBjaGFyICpwcmV0dGlmeV9yZWYoY29uc3Qgc3RydWN0IHJlZiAqcmVmKQorY29uc3QgY2hhciAqcHJldHRpZnlfcmVmbmFtZShjb25zdCBjaGFyICpuYW1lKQogewotCWNvbnN0IGNoYXIgKm5hbWUgPSByZWYtPm5hbWU7CiAJcmV0dXJuIG5hbWUgKyAoCiAJCSFwcmVmaXhjbXAobmFtZSwgInJlZnMvaGVhZHMvIikgPyAxMSA6CiAJCSFwcmVmaXhjbXAobmFtZSwgInJlZnMvdGFncy8iKSA/IDEwIDoKQEAgLTgyNCw3ICs4ODMsNyBAQAogCXN0cmJ1Zl9pbml0KCZwYXRoLCAyMCk7CiAJc3RyYnVmX2FkZHN0cigmcGF0aCwgZmlsZSk7CiAKLQlyZXN1bHQgPSByZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5KCZwYXRoLCAxKTsKKwlyZXN1bHQgPSByZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5KCZwYXRoLCBSRU1PVkVfRElSX0VNUFRZX09OTFkpOwogCiAJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOwogCkBAIC05NzAsOCArMTAyOSwxMCBAQAogCWlmICghZm91bmQpCiAJCXJldHVybiAwOwogCWZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmcGFja2xvY2ssIGdpdF9wYXRoKCJwYWNrZWQtcmVmcyIpLCAwKTsKLQlpZiAoZmQgPCAwKQorCWlmIChmZCA8IDApIHsKKwkJdW5hYmxlX3RvX2xvY2tfZXJyb3IoZ2l0X3BhdGgoInBhY2tlZC1yZWZzIiksIGVycm5vKTsKIAkJcmV0dXJuIGVycm9yKCJjYW5ub3QgZGVsZXRlICclcycgZnJvbSBwYWNrZWQgcmVmcyIsIHJlZm5hbWUpOworCX0KIAogCWZvciAobGlzdCA9IHBhY2tlZF9yZWZfbGlzdDsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpIHsKIAkJY2hhciBsaW5lW1BBVEhfTUFYICsgMTAwXTsKQEAgLTE0MjIsNyArMTQ4Myw3IEBACiAJbG9nZmlsZSA9IGdpdF9wYXRoKCJsb2dzLyVzIiwgcmVmKTsKIAlsb2dmZCA9IG9wZW4obG9nZmlsZSwgT19SRE9OTFksIDApOwogCWlmIChsb2dmZCA8IDApCi0JCWRpZSgiVW5hYmxlIHRvIHJlYWQgbG9nICVzOiAlcyIsIGxvZ2ZpbGUsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiVW5hYmxlIHRvIHJlYWQgbG9nICclcyciLCBsb2dmaWxlKTsKIAlmc3RhdChsb2dmZCwgJnN0KTsKIAlpZiAoIXN0LnN0X3NpemUpCiAJCWRpZSgiTG9nICVzIGlzIGVtcHR5LiIsIGxvZ2ZpbGUpOwpAQCAtMTUxNiw3ICsxNTc3LDcgQEAKIHsKIAljb25zdCBjaGFyICpsb2dmaWxlOwogCUZJTEUgKmxvZ2ZwOwotCWNoYXIgYnVmWzEwMjRdOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKIAlpbnQgcmV0ID0gMDsKIAogCWxvZ2ZpbGUgPSBnaXRfcGF0aCgibG9ncy8lcyIsIHJlZik7CkBAIC0xNTI5LDI0ICsxNTkwLDI0IEBACiAJCWlmIChmc3RhdChmaWxlbm8obG9nZnApLCAmc3RhdGJ1ZikgfHwKIAkJICAgIHN0YXRidWYuc3Rfc2l6ZSA8IG9mcyB8fAogCQkgICAgZnNlZWsobG9nZnAsIC1vZnMsIFNFRUtfRU5EKSB8fAotCQkgICAgZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgbG9nZnApKSB7CisJCSAgICBzdHJidWZfZ2V0d2hvbGVsaW5lKCZzYiwgbG9nZnAsICdcbicpKSB7CiAJCQlmY2xvc2UobG9nZnApOworCQkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCX0KIAotCXdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBsb2dmcCkpIHsKKwl3aGlsZSAoIXN0cmJ1Zl9nZXR3aG9sZWxpbmUoJnNiLCBsb2dmcCwgJ1xuJykpIHsKIAkJdW5zaWduZWQgY2hhciBvc2hhMVsyMF0sIG5zaGExWzIwXTsKIAkJY2hhciAqZW1haWxfZW5kLCAqbWVzc2FnZTsKIAkJdW5zaWduZWQgbG9uZyB0aW1lc3RhbXA7Ci0JCWludCBsZW4sIHR6OworCQlpbnQgdHo7CiAKIAkJLyogb2xkIFNQIG5ldyBTUCBuYW1lIDxlbWFpbD4gU1AgdGltZSBUQUIgbXNnIExGICovCi0JCWxlbiA9IHN0cmxlbihidWYpOwotCQlpZiAobGVuIDwgODMgfHwgYnVmW2xlbi0xXSAhPSAnXG4nIHx8Ci0JCSAgICBnZXRfc2hhMV9oZXgoYnVmLCBvc2hhMSkgfHwgYnVmWzQwXSAhPSAnICcgfHwKLQkJICAgIGdldF9zaGExX2hleChidWYgKyA0MSwgbnNoYTEpIHx8IGJ1Zls4MV0gIT0gJyAnIHx8Ci0JCSAgICAhKGVtYWlsX2VuZCA9IHN0cmNocihidWYgKyA4MiwgJz4nKSkgfHwKKwkJaWYgKHNiLmxlbiA8IDgzIHx8IHNiLmJ1ZltzYi5sZW4gLSAxXSAhPSAnXG4nIHx8CisJCSAgICBnZXRfc2hhMV9oZXgoc2IuYnVmLCBvc2hhMSkgfHwgc2IuYnVmWzQwXSAhPSAnICcgfHwKKwkJICAgIGdldF9zaGExX2hleChzYi5idWYgKyA0MSwgbnNoYTEpIHx8IHNiLmJ1Zls4MV0gIT0gJyAnIHx8CisJCSAgICAhKGVtYWlsX2VuZCA9IHN0cmNocihzYi5idWYgKyA4MiwgJz4nKSkgfHwKIAkJICAgIGVtYWlsX2VuZFsxXSAhPSAnICcgfHwKIAkJICAgICEodGltZXN0YW1wID0gc3RydG91bChlbWFpbF9lbmQgKyAyLCAmbWVzc2FnZSwgMTApKSB8fAogCQkgICAgIW1lc3NhZ2UgfHwgbWVzc2FnZVswXSAhPSAnICcgfHwKQEAgLTE1NjAsMTEgKzE2MjEsMTMgQEAKIAkJCW1lc3NhZ2UgKz0gNjsKIAkJZWxzZQogCQkJbWVzc2FnZSArPSA3OwotCQlyZXQgPSBmbihvc2hhMSwgbnNoYTEsIGJ1Zis4MiwgdGltZXN0YW1wLCB0eiwgbWVzc2FnZSwgY2JfZGF0YSk7CisJCXJldCA9IGZuKG9zaGExLCBuc2hhMSwgc2IuYnVmICsgODIsIHRpbWVzdGFtcCwgdHosIG1lc3NhZ2UsCisJCQkgY2JfZGF0YSk7CiAJCWlmIChyZXQpCiAJCQlicmVhazsKIAl9CiAJZmNsb3NlKGxvZ2ZwKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL3JlZnMuaCBiL3JlZnMuaAppbmRleCAyOWQxN2E0Li5mNzY0OGI5IDEwMDY0NAotLS0gYS9yZWZzLmgKKysrIGIvcmVmcy5oCkBAIC0yNCwxMSArMjQsMTQgQEAKIGV4dGVybiBpbnQgZm9yX2VhY2hfdGFnX3JlZihlYWNoX3JlZl9mbiwgdm9pZCAqKTsKIGV4dGVybiBpbnQgZm9yX2VhY2hfYnJhbmNoX3JlZihlYWNoX3JlZl9mbiwgdm9pZCAqKTsKIGV4dGVybiBpbnQgZm9yX2VhY2hfcmVtb3RlX3JlZihlYWNoX3JlZl9mbiwgdm9pZCAqKTsKK2V4dGVybiBpbnQgZm9yX2VhY2hfcmVwbGFjZV9yZWYoZWFjaF9yZWZfZm4sIHZvaWQgKik7CitleHRlcm4gaW50IGZvcl9lYWNoX2dsb2JfcmVmKGVhY2hfcmVmX2ZuLCBjb25zdCBjaGFyICpwYXR0ZXJuLCB2b2lkICopOworZXh0ZXJuIGludCBmb3JfZWFjaF9nbG9iX3JlZl9pbihlYWNoX3JlZl9mbiwgY29uc3QgY2hhciAqcGF0dGVybiwgY29uc3QgY2hhciogcHJlZml4LCB2b2lkICopOwogCiAvKiBjYW4gYmUgdXNlZCB0byBsZWFybiBhYm91dCBicm9rZW4gcmVmIGFuZCBzeW1yZWYgKi8KIGV4dGVybiBpbnQgZm9yX2VhY2hfcmF3cmVmKGVhY2hfcmVmX2ZuLCB2b2lkICopOwogCi1leHRlcm4gdm9pZCB3YXJuX2RhbmdsaW5nX3N5bXJlZihjb25zdCBjaGFyICptc2dfZm10LCBjb25zdCBjaGFyICpyZWZuYW1lKTsKK2V4dGVybiB2b2lkIHdhcm5fZGFuZ2xpbmdfc3ltcmVmKEZJTEUgKmZwLCBjb25zdCBjaGFyICptc2dfZm10LCBjb25zdCBjaGFyICpyZWZuYW1lKTsKIAogLyoKICAqIEV4dHJhIHJlZnMgd2lsbCBiZSBsaXN0ZWQgYnkgZm9yX2VhY2hfcmVmKCkgYmVmb3JlIGFueSBhY3R1YWwgcmVmcwpAQCAtODAsNyArODMsNyBAQAogI2RlZmluZSBDSEVDS19SRUZfRk9STUFUX1dJTERDQVJEICgtMykKIGV4dGVybiBpbnQgY2hlY2tfcmVmX2Zvcm1hdChjb25zdCBjaGFyICp0YXJnZXQpOwogCi1leHRlcm4gY29uc3QgY2hhciAqcHJldHRpZnlfcmVmKGNvbnN0IHN0cnVjdCByZWYgKnJlZik7CitleHRlcm4gY29uc3QgY2hhciAqcHJldHRpZnlfcmVmbmFtZShjb25zdCBjaGFyICpyZWZuYW1lKTsKIGV4dGVybiBjaGFyICpzaG9ydGVuX3VuYW1iaWd1b3VzX3JlZihjb25zdCBjaGFyICpyZWYsIGludCBzdHJpY3QpOwogCiAvKiogcmVuYW1lIHJlZiwgcmV0dXJuIDAgb24gc3VjY2VzcyAqKi8KZGlmZiAtLWdpdCBhL3JlbW90ZS1jdXJsLmMgYi9yZW1vdGUtY3VybC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzODgxMjAKLS0tIC9kZXYvbnVsbAorKysgYi9yZW1vdGUtY3VybC5jCkBAIC0wLDAgKzEsODYwIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJ3YWxrZXIuaCIKKyNpbmNsdWRlICJodHRwLmgiCisjaW5jbHVkZSAiZXhlY19jbWQuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInBrdC1saW5lLmgiCisjaW5jbHVkZSAic2lkZWJhbmQuaCIKKworc3RhdGljIHN0cnVjdCByZW1vdGUgKnJlbW90ZTsKK3N0YXRpYyBjb25zdCBjaGFyICp1cmw7CitzdGF0aWMgc3RydWN0IHdhbGtlciAqd2Fsa2VyOworCitzdHJ1Y3Qgb3B0aW9ucyB7CisJaW50IHZlcmJvc2l0eTsKKwl1bnNpZ25lZCBsb25nIGRlcHRoOworCXVuc2lnbmVkIHByb2dyZXNzIDogMSwKKwkJZm9sbG93dGFncyA6IDEsCisJCWRyeV9ydW4gOiAxLAorCQl0aGluIDogMTsKK307CitzdGF0aWMgc3RydWN0IG9wdGlvbnMgb3B0aW9uczsKKworc3RhdGljIHZvaWQgaW5pdF93YWxrZXIodm9pZCkKK3sKKwlpZiAoIXdhbGtlcikKKwkJd2Fsa2VyID0gZ2V0X2h0dHBfd2Fsa2VyKHVybCwgcmVtb3RlKTsKK30KKworc3RhdGljIGludCBzZXRfb3B0aW9uKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghc3RyY21wKG5hbWUsICJ2ZXJib3NpdHkiKSkgeworCQljaGFyICplbmQ7CisJCWludCB2ID0gc3RydG9sKHZhbHVlLCAmZW5kLCAxMCk7CisJCWlmICh2YWx1ZSA9PSBlbmQgfHwgKmVuZCkKKwkJCXJldHVybiAtMTsKKwkJb3B0aW9ucy52ZXJib3NpdHkgPSB2OworCQlyZXR1cm4gMDsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAicHJvZ3Jlc3MiKSkgeworCQlpZiAoIXN0cmNtcCh2YWx1ZSwgInRydWUiKSkKKwkJCW9wdGlvbnMucHJvZ3Jlc3MgPSAxOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiZmFsc2UiKSkKKwkJCW9wdGlvbnMucHJvZ3Jlc3MgPSAwOworCQllbHNlCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOworCX0KKwllbHNlIGlmICghc3RyY21wKG5hbWUsICJkZXB0aCIpKSB7CisJCWNoYXIgKmVuZDsKKwkJdW5zaWduZWQgbG9uZyB2ID0gc3RydG91bCh2YWx1ZSwgJmVuZCwgMTApOworCQlpZiAodmFsdWUgPT0gZW5kIHx8ICplbmQpCisJCQlyZXR1cm4gLTE7CisJCW9wdGlvbnMuZGVwdGggPSB2OworCQlyZXR1cm4gMDsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiZm9sbG93dGFncyIpKSB7CisJCWlmICghc3RyY21wKHZhbHVlLCAidHJ1ZSIpKQorCQkJb3B0aW9ucy5mb2xsb3d0YWdzID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgImZhbHNlIikpCisJCQlvcHRpb25zLmZvbGxvd3RhZ3MgPSAwOworCQllbHNlCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOworCX0KKwllbHNlIGlmICghc3RyY21wKG5hbWUsICJkcnktcnVuIikpIHsKKwkJaWYgKCFzdHJjbXAodmFsdWUsICJ0cnVlIikpCisJCQlvcHRpb25zLmRyeV9ydW4gPSAxOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiZmFsc2UiKSkKKwkJCW9wdGlvbnMuZHJ5X3J1biA9IDA7CisJCWVsc2UKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CisJfQorCWVsc2UgeworCQlyZXR1cm4gMSAvKiB1bnN1cHBvcnRlZCAqLzsKKwl9Cit9CisKK3N0cnVjdCBkaXNjb3ZlcnkgeworCWNvbnN0IGNoYXIgKnNlcnZpY2U7CisJY2hhciAqYnVmX2FsbG9jOworCWNoYXIgKmJ1ZjsKKwlzaXplX3QgbGVuOworCXVuc2lnbmVkIHByb3RvX2dpdCA6IDE7Cit9Oworc3RhdGljIHN0cnVjdCBkaXNjb3ZlcnkgKmxhc3RfZGlzY292ZXJ5OworCitzdGF0aWMgdm9pZCBmcmVlX2Rpc2NvdmVyeShzdHJ1Y3QgZGlzY292ZXJ5ICpkKQoreworCWlmIChkKSB7CisJCWlmIChkID09IGxhc3RfZGlzY292ZXJ5KQorCQkJbGFzdF9kaXNjb3ZlcnkgPSBOVUxMOworCQlmcmVlKGQtPmJ1Zl9hbGxvYyk7CisJCWZyZWUoZCk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGRpc2NvdmVyeSogZGlzY292ZXJfcmVmcyhjb25zdCBjaGFyICpzZXJ2aWNlKQoreworCXN0cnVjdCBzdHJidWYgYnVmZmVyID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGRpc2NvdmVyeSAqbGFzdCA9IGxhc3RfZGlzY292ZXJ5OworCWNoYXIgKnJlZnNfdXJsOworCWludCBodHRwX3JldCwgaXNfaHR0cCA9IDAsIHByb3RvX2dpdF9jYW5kaWRhdGUgPSAxOworCisJaWYgKGxhc3QgJiYgIXN0cmNtcChzZXJ2aWNlLCBsYXN0LT5zZXJ2aWNlKSkKKwkJcmV0dXJuIGxhc3Q7CisJZnJlZV9kaXNjb3ZlcnkobGFzdCk7CisKKwlzdHJidWZfYWRkZigmYnVmZmVyLCAiJXMvaW5mby9yZWZzIiwgdXJsKTsKKwlpZiAoIXByZWZpeGNtcCh1cmwsICJodHRwOi8vIikgfHwgIXByZWZpeGNtcCh1cmwsICJodHRwczovLyIpKSB7CisJCWlzX2h0dHAgPSAxOworCQlpZiAoIXN0cmNocih1cmwsICc/JykpCisJCQlzdHJidWZfYWRkY2goJmJ1ZmZlciwgJz8nKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZGNoKCZidWZmZXIsICcmJyk7CisJCXN0cmJ1Zl9hZGRmKCZidWZmZXIsICJzZXJ2aWNlPSVzIiwgc2VydmljZSk7CisJfQorCXJlZnNfdXJsID0gc3RyYnVmX2RldGFjaCgmYnVmZmVyLCBOVUxMKTsKKworCWluaXRfd2Fsa2VyKCk7CisJaHR0cF9yZXQgPSBodHRwX2dldF9zdHJidWYocmVmc191cmwsICZidWZmZXIsIEhUVFBfTk9fQ0FDSEUpOworCisJLyogdHJ5IGFnYWluIHdpdGggInBsYWluIiB1cmwgKG5vID8gb3IgJiBhcHBlbmRlZCkgKi8KKwlpZiAoaHR0cF9yZXQgIT0gSFRUUF9PSykgeworCQlmcmVlKHJlZnNfdXJsKTsKKwkJc3RyYnVmX3Jlc2V0KCZidWZmZXIpOworCisJCXByb3RvX2dpdF9jYW5kaWRhdGUgPSAwOworCQlzdHJidWZfYWRkZigmYnVmZmVyLCAiJXMvaW5mby9yZWZzIiwgdXJsKTsKKwkJcmVmc191cmwgPSBzdHJidWZfZGV0YWNoKCZidWZmZXIsIE5VTEwpOworCisJCWh0dHBfcmV0ID0gaHR0cF9nZXRfc3RyYnVmKHJlZnNfdXJsLCAmYnVmZmVyLCBIVFRQX05PX0NBQ0hFKTsKKwl9CisKKwlzd2l0Y2ggKGh0dHBfcmV0KSB7CisJY2FzZSBIVFRQX09LOgorCQlicmVhazsKKwljYXNlIEhUVFBfTUlTU0lOR19UQVJHRVQ6CisJCWRpZSgiJXMgbm90IGZvdW5kOiBkaWQgeW91IHJ1biBnaXQgdXBkYXRlLXNlcnZlci1pbmZvIG9uIHRoZSIKKwkJICAgICIgc2VydmVyPyIsIHJlZnNfdXJsKTsKKwlkZWZhdWx0OgorCQlodHRwX2Vycm9yKHJlZnNfdXJsLCBodHRwX3JldCk7CisJCWRpZSgiSFRUUCByZXF1ZXN0IGZhaWxlZCIpOworCX0KKworCWxhc3Q9IHhjYWxsb2MoMSwgc2l6ZW9mKCpsYXN0X2Rpc2NvdmVyeSkpOworCWxhc3QtPnNlcnZpY2UgPSBzZXJ2aWNlOworCWxhc3QtPmJ1Zl9hbGxvYyA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZmZlciwgJmxhc3QtPmxlbik7CisJbGFzdC0+YnVmID0gbGFzdC0+YnVmX2FsbG9jOworCisJaWYgKGlzX2h0dHAgJiYgcHJvdG9fZ2l0X2NhbmRpZGF0ZQorCQkmJiA1IDw9IGxhc3QtPmxlbiAmJiBsYXN0LT5idWZbNF0gPT0gJyMnKSB7CisJCS8qIHNtYXJ0IEhUVFAgcmVzcG9uc2U7IHZhbGlkYXRlIHRoYXQgdGhlIHNlcnZpY2UKKwkJICogcGt0LWxpbmUgbWF0Y2hlcyBvdXIgcmVxdWVzdC4KKwkJICovCisJCXN0cnVjdCBzdHJidWYgZXhwID0gU1RSQlVGX0lOSVQ7CisKKwkJaWYgKHBhY2tldF9nZXRfbGluZSgmYnVmZmVyLCAmbGFzdC0+YnVmLCAmbGFzdC0+bGVuKSA8PSAwKQorCQkJZGllKCIlcyBoYXMgaW52YWxpZCBwYWNrZXQgaGVhZGVyIiwgcmVmc191cmwpOworCQlpZiAoYnVmZmVyLmxlbiAmJiBidWZmZXIuYnVmW2J1ZmZlci5sZW4gLSAxXSA9PSAnXG4nKQorCQkJc3RyYnVmX3NldGxlbigmYnVmZmVyLCBidWZmZXIubGVuIC0gMSk7CisKKwkJc3RyYnVmX2FkZGYoJmV4cCwgIiMgc2VydmljZT0lcyIsIHNlcnZpY2UpOworCQlpZiAoc3RyYnVmX2NtcCgmZXhwLCAmYnVmZmVyKSkKKwkJCWRpZSgiaW52YWxpZCBzZXJ2ZXIgcmVzcG9uc2U7IGdvdCAnJXMnIiwgYnVmZmVyLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZleHApOworCisJCS8qIFRoZSBoZWFkZXIgY2FuIGluY2x1ZGUgYWRkaXRpb25hbCBtZXRhZGF0YSBsaW5lcywgdXAKKwkJICogdW50aWwgYSBwYWNrZXQgZmx1c2ggbWFya2VyLiAgSWdub3JlIHRoZXNlIG5vdywgYnV0CisJCSAqIGluIHRoZSBmdXR1cmUgd2UgbWlnaHQgc3RhcnQgdG8gc2NhbiB0aGVtLgorCQkgKi8KKwkJc3RyYnVmX3Jlc2V0KCZidWZmZXIpOworCQl3aGlsZSAocGFja2V0X2dldF9saW5lKCZidWZmZXIsICZsYXN0LT5idWYsICZsYXN0LT5sZW4pID4gMCkKKwkJCXN0cmJ1Zl9yZXNldCgmYnVmZmVyKTsKKworCQlsYXN0LT5wcm90b19naXQgPSAxOworCX0KKworCWZyZWUocmVmc191cmwpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOworCWxhc3RfZGlzY292ZXJ5ID0gbGFzdDsKKwlyZXR1cm4gbGFzdDsKK30KKworc3RhdGljIGludCB3cml0ZV9kaXNjb3ZlcnkoaW50IGluLCBpbnQgb3V0LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkaXNjb3ZlcnkgKmhlYWRzID0gZGF0YTsKKwlpbnQgZXJyID0gMDsKKwlpZiAod3JpdGVfaW5fZnVsbChvdXQsIGhlYWRzLT5idWYsIGhlYWRzLT5sZW4pICE9IGhlYWRzLT5sZW4pCisJCWVyciA9IDE7CisJY2xvc2Uob3V0KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IHJlZiAqcGFyc2VfZ2l0X3JlZnMoc3RydWN0IGRpc2NvdmVyeSAqaGVhZHMpCit7CisJc3RydWN0IHJlZiAqbGlzdCA9IE5VTEw7CisJc3RydWN0IGFzeW5jIGFzeW5jOworCisJbWVtc2V0KCZhc3luYywgMCwgc2l6ZW9mKGFzeW5jKSk7CisJYXN5bmMucHJvYyA9IHdyaXRlX2Rpc2NvdmVyeTsKKwlhc3luYy5kYXRhID0gaGVhZHM7CisJYXN5bmMub3V0ID0gLTE7CisKKwlpZiAoc3RhcnRfYXN5bmMoJmFzeW5jKSkKKwkJZGllKCJjYW5ub3Qgc3RhcnQgdGhyZWFkIHRvIHBhcnNlIGFkdmVydGlzZWQgcmVmcyIpOworCWdldF9yZW1vdGVfaGVhZHMoYXN5bmMub3V0LCAmbGlzdCwgMCwgTlVMTCwgMCwgTlVMTCk7CisJY2xvc2UoYXN5bmMub3V0KTsKKwlpZiAoZmluaXNoX2FzeW5jKCZhc3luYykpCisJCWRpZSgicmVmIHBhcnNpbmcgdGhyZWFkIGZhaWxlZCIpOworCXJldHVybiBsaXN0OworfQorCitzdGF0aWMgc3RydWN0IHJlZiAqcGFyc2VfaW5mb19yZWZzKHN0cnVjdCBkaXNjb3ZlcnkgKmhlYWRzKQoreworCWNoYXIgKmRhdGEsICpzdGFydCwgKm1pZDsKKwljaGFyICpyZWZfbmFtZTsKKwlpbnQgaSA9IDA7CisKKwlzdHJ1Y3QgcmVmICpyZWZzID0gTlVMTDsKKwlzdHJ1Y3QgcmVmICpyZWYgPSBOVUxMOworCXN0cnVjdCByZWYgKmxhc3RfcmVmID0gTlVMTDsKKworCWRhdGEgPSBoZWFkcy0+YnVmOworCXN0YXJ0ID0gTlVMTDsKKwltaWQgPSBkYXRhOworCXdoaWxlIChpIDwgaGVhZHMtPmxlbikgeworCQlpZiAoIXN0YXJ0KSB7CisJCQlzdGFydCA9ICZkYXRhW2ldOworCQl9CisJCWlmIChkYXRhW2ldID09ICdcdCcpCisJCQltaWQgPSAmZGF0YVtpXTsKKwkJaWYgKGRhdGFbaV0gPT0gJ1xuJykgeworCQkJZGF0YVtpXSA9IDA7CisJCQlyZWZfbmFtZSA9IG1pZCArIDE7CisJCQlyZWYgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVmKSArCisJCQkJICAgICAgc3RybGVuKHJlZl9uYW1lKSArIDEpOworCQkJbWVtc2V0KHJlZiwgMCwgc2l6ZW9mKHN0cnVjdCByZWYpKTsKKwkJCXN0cmNweShyZWYtPm5hbWUsIHJlZl9uYW1lKTsKKwkJCWdldF9zaGExX2hleChzdGFydCwgcmVmLT5vbGRfc2hhMSk7CisJCQlpZiAoIXJlZnMpCisJCQkJcmVmcyA9IHJlZjsKKwkJCWlmIChsYXN0X3JlZikKKwkJCQlsYXN0X3JlZi0+bmV4dCA9IHJlZjsKKwkJCWxhc3RfcmVmID0gcmVmOworCQkJc3RhcnQgPSBOVUxMOworCQl9CisJCWkrKzsKKwl9CisKKwlpbml0X3dhbGtlcigpOworCXJlZiA9IGFsbG9jX3JlZigiSEVBRCIpOworCWlmICghd2Fsa2VyLT5mZXRjaF9yZWYod2Fsa2VyLCByZWYpICYmCisJICAgICFyZXNvbHZlX3JlbW90ZV9zeW1yZWYocmVmLCByZWZzKSkgeworCQlyZWYtPm5leHQgPSByZWZzOworCQlyZWZzID0gcmVmOworCX0gZWxzZSB7CisJCWZyZWUocmVmKTsKKwl9CisKKwlyZXR1cm4gcmVmczsKK30KKworc3RhdGljIHN0cnVjdCByZWYgKmdldF9yZWZzKGludCBmb3JfcHVzaCkKK3sKKwlzdHJ1Y3QgZGlzY292ZXJ5ICpoZWFkczsKKworCWlmIChmb3JfcHVzaCkKKwkJaGVhZHMgPSBkaXNjb3Zlcl9yZWZzKCJnaXQtcmVjZWl2ZS1wYWNrIik7CisJZWxzZQorCQloZWFkcyA9IGRpc2NvdmVyX3JlZnMoImdpdC11cGxvYWQtcGFjayIpOworCisJaWYgKGhlYWRzLT5wcm90b19naXQpCisJCXJldHVybiBwYXJzZV9naXRfcmVmcyhoZWFkcyk7CisJcmV0dXJuIHBhcnNlX2luZm9fcmVmcyhoZWFkcyk7Cit9CisKK3N0YXRpYyB2b2lkIG91dHB1dF9yZWZzKHN0cnVjdCByZWYgKnJlZnMpCit7CisJc3RydWN0IHJlZiAqcG9zbjsKKwlmb3IgKHBvc24gPSByZWZzOyBwb3NuOyBwb3NuID0gcG9zbi0+bmV4dCkgeworCQlpZiAocG9zbi0+c3ltcmVmKQorCQkJcHJpbnRmKCJAJXMgJXNcbiIsIHBvc24tPnN5bXJlZiwgcG9zbi0+bmFtZSk7CisJCWVsc2UKKwkJCXByaW50ZigiJXMgJXNcbiIsIHNoYTFfdG9faGV4KHBvc24tPm9sZF9zaGExKSwgcG9zbi0+bmFtZSk7CisJfQorCXByaW50ZigiXG4iKTsKKwlmZmx1c2goc3Rkb3V0KTsKKwlmcmVlX3JlZnMocmVmcyk7Cit9CisKK3N0cnVjdCBycGNfc3RhdGUgeworCWNvbnN0IGNoYXIgKnNlcnZpY2VfbmFtZTsKKwljb25zdCBjaGFyICoqYXJndjsKKwljaGFyICpzZXJ2aWNlX3VybDsKKwljaGFyICpoZHJfY29udGVudF90eXBlOworCWNoYXIgKmhkcl9hY2NlcHQ7CisJY2hhciAqYnVmOworCXNpemVfdCBhbGxvYzsKKwlzaXplX3QgbGVuOworCXNpemVfdCBwb3M7CisJaW50IGluOworCWludCBvdXQ7CisJc3RydWN0IHN0cmJ1ZiByZXN1bHQ7CisJdW5zaWduZWQgZ3ppcF9yZXF1ZXN0IDogMTsKKwl1bnNpZ25lZCBpbml0aWFsX2J1ZmZlciA6IDE7Cit9OworCitzdGF0aWMgc2l6ZV90IHJwY19vdXQodm9pZCAqcHRyLCBzaXplX3QgZWx0c2l6ZSwKKwkJc2l6ZV90IG5tZW1iLCB2b2lkICpidWZmZXJfKQoreworCXNpemVfdCBtYXggPSBlbHRzaXplICogbm1lbWI7CisJc3RydWN0IHJwY19zdGF0ZSAqcnBjID0gYnVmZmVyXzsKKwlzaXplX3QgYXZhaWwgPSBycGMtPmxlbiAtIHJwYy0+cG9zOworCisJaWYgKCFhdmFpbCkgeworCQlycGMtPmluaXRpYWxfYnVmZmVyID0gMDsKKwkJYXZhaWwgPSBwYWNrZXRfcmVhZF9saW5lKHJwYy0+b3V0LCBycGMtPmJ1ZiwgcnBjLT5hbGxvYyk7CisJCWlmICghYXZhaWwpCisJCQlyZXR1cm4gMDsKKwkJcnBjLT5wb3MgPSAwOworCQlycGMtPmxlbiA9IGF2YWlsOworCX0KKworCWlmIChtYXggPCBhdmFpbCkKKwkJYXZhaWwgPSBtYXg7CisJbWVtY3B5KHB0ciwgcnBjLT5idWYgKyBycGMtPnBvcywgYXZhaWwpOworCXJwYy0+cG9zICs9IGF2YWlsOworCXJldHVybiBhdmFpbDsKK30KKworI2lmbmRlZiBOT19DVVJMX0lPQ1RMCitzdGF0aWMgY3VybGlvZXJyIHJwY19pb2N0bChDVVJMICpoYW5kbGUsIGludCBjbWQsIHZvaWQgKmNsaWVudHApCit7CisJc3RydWN0IHJwY19zdGF0ZSAqcnBjID0gY2xpZW50cDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBDVVJMSU9DTURfTk9QOgorCQlyZXR1cm4gQ1VSTElPRV9PSzsKKworCWNhc2UgQ1VSTElPQ01EX1JFU1RBUlRSRUFEOgorCQlpZiAocnBjLT5pbml0aWFsX2J1ZmZlcikgeworCQkJcnBjLT5wb3MgPSAwOworCQkJcmV0dXJuIENVUkxJT0VfT0s7CisJCX0KKwkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gcmV3aW5kIHJwYyBwb3N0IGRhdGEgLSB0cnkgaW5jcmVhc2luZyBodHRwLnBvc3RCdWZmZXJcbiIpOworCQlyZXR1cm4gQ1VSTElPRV9GQUlMUkVTVEFSVDsKKworCWRlZmF1bHQ6CisJCXJldHVybiBDVVJMSU9FX1VOS05PV05DTUQ7CisJfQorfQorI2VuZGlmCisKK3N0YXRpYyBzaXplX3QgcnBjX2luKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IGVsdHNpemUsCisJCXNpemVfdCBubWVtYiwgdm9pZCAqYnVmZmVyXykKK3sKKwlzaXplX3Qgc2l6ZSA9IGVsdHNpemUgKiBubWVtYjsKKwlzdHJ1Y3QgcnBjX3N0YXRlICpycGMgPSBidWZmZXJfOworCXdyaXRlX29yX2RpZShycGMtPmluLCBwdHIsIHNpemUpOworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgaW50IHBvc3RfcnBjKHN0cnVjdCBycGNfc3RhdGUgKnJwYykKK3sKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHM7CisJc3RydWN0IGN1cmxfc2xpc3QgKmhlYWRlcnMgPSBOVUxMOworCWludCB1c2VfZ3ppcCA9IHJwYy0+Z3ppcF9yZXF1ZXN0OworCWNoYXIgKmd6aXBfYm9keSA9IE5VTEw7CisJaW50IGVyciA9IDAsIGxhcmdlX3JlcXVlc3QgPSAwOworCisJLyogVHJ5IHRvIGxvYWQgdGhlIGVudGlyZSByZXF1ZXN0LCBpZiB3ZSBjYW4gZml0IGl0IGludG8gdGhlCisJICogYWxsb2NhdGVkIGJ1ZmZlciBzcGFjZSB3ZSBjYW4gdXNlIEhUVFAvMS4wIGFuZCBhdm9pZCB0aGUKKwkgKiBjaHVua2VkIGVuY29kaW5nIG1lc3MuCisJICovCisJd2hpbGUgKDEpIHsKKwkJc2l6ZV90IGxlZnQgPSBycGMtPmFsbG9jIC0gcnBjLT5sZW47CisJCWNoYXIgKmJ1ZiA9IHJwYy0+YnVmICsgcnBjLT5sZW47CisJCWludCBuOworCisJCWlmIChsZWZ0IDwgTEFSR0VfUEFDS0VUX01BWCkgeworCQkJbGFyZ2VfcmVxdWVzdCA9IDE7CisJCQl1c2VfZ3ppcCA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCW4gPSBwYWNrZXRfcmVhZF9saW5lKHJwYy0+b3V0LCBidWYsIGxlZnQpOworCQlpZiAoIW4pCisJCQlicmVhazsKKwkJcnBjLT5sZW4gKz0gbjsKKwl9CisKKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJc2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOworCisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX05PQk9EWSwgMCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1BPU1QsIDEpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHJwYy0+c2VydmljZV91cmwpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9FTkNPRElORywgIiIpOworCisJaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGhlYWRlcnMsIHJwYy0+aGRyX2NvbnRlbnRfdHlwZSk7CisJaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGhlYWRlcnMsIHJwYy0+aGRyX2FjY2VwdCk7CisKKwlpZiAobGFyZ2VfcmVxdWVzdCkgeworCQkvKiBUaGUgcmVxdWVzdCBib2R5IGlzIGxhcmdlIGFuZCB0aGUgc2l6ZSBjYW5ub3QgYmUgcHJlZGljdGVkLgorCQkgKiBXZSBtdXN0IHVzZSBjaHVua2VkIGVuY29kaW5nIHRvIHNlbmQgaXQuCisJCSAqLworCQloZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoaGVhZGVycywgIkV4cGVjdDogMTAwLWNvbnRpbnVlIik7CisJCWhlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJzLCAiVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQiKTsKKwkJcnBjLT5pbml0aWFsX2J1ZmZlciA9IDE7CisJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9SRUFERlVOQ1RJT04sIHJwY19vdXQpOworCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSU5GSUxFLCBycGMpOworI2lmbmRlZiBOT19DVVJMX0lPQ1RMCisJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9JT0NUTEZVTkNUSU9OLCBycGNfaW9jdGwpOworCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSU9DVExEQVRBLCBycGMpOworI2VuZGlmCisJCWlmIChvcHRpb25zLnZlcmJvc2l0eSA+IDEpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiUE9TVCAlcyAoY2h1bmtlZClcbiIsIHJwYy0+c2VydmljZV9uYW1lKTsKKwkJCWZmbHVzaChzdGRlcnIpOworCQl9CisKKwl9IGVsc2UgaWYgKHVzZV9nemlwICYmIDEwMjQgPCBycGMtPmxlbikgeworCQkvKiBUaGUgY2xpZW50IGJhY2tlbmQgaXNuJ3QgZ2l2aW5nIHVzIGNvbXByZXNzZWQgZGF0YSBzbworCQkgKiB3ZSBjYW4gdHJ5IHRvIGRlZmxhdGUgaXQgb3Vyc2VsdmVzLCB0aGlzIG1heSBzYXZlIG9uLgorCQkgKiB0aGUgdHJhbnNmZXIgdGltZS4KKwkJICovCisJCXNpemVfdCBzaXplOworCQl6X3N0cmVhbSBzdHJlYW07CisJCWludCByZXQ7CisKKwkJbWVtc2V0KCZzdHJlYW0sIDAsIHNpemVvZihzdHJlYW0pKTsKKwkJcmV0ID0gZGVmbGF0ZUluaXQyKCZzdHJlYW0sIFpfQkVTVF9DT01QUkVTU0lPTiwKKwkJCQlaX0RFRkxBVEVELCAoMTUgKyAxNiksCisJCQkJOCwgWl9ERUZBVUxUX1NUUkFURUdZKTsKKwkJaWYgKHJldCAhPSBaX09LKQorCQkJZGllKCJjYW5ub3QgZGVmbGF0ZSByZXF1ZXN0OyB6bGliIGluaXQgZXJyb3IgJWQiLCByZXQpOworCQlzaXplID0gZGVmbGF0ZUJvdW5kKCZzdHJlYW0sIHJwYy0+bGVuKTsKKwkJZ3ppcF9ib2R5ID0geG1hbGxvYyhzaXplKTsKKworCQlzdHJlYW0ubmV4dF9pbiA9ICh1bnNpZ25lZCBjaGFyICopcnBjLT5idWY7CisJCXN0cmVhbS5hdmFpbF9pbiA9IHJwYy0+bGVuOworCQlzdHJlYW0ubmV4dF9vdXQgPSAodW5zaWduZWQgY2hhciAqKWd6aXBfYm9keTsKKwkJc3RyZWFtLmF2YWlsX291dCA9IHNpemU7CisKKwkJcmV0ID0gZGVmbGF0ZSgmc3RyZWFtLCBaX0ZJTklTSCk7CisJCWlmIChyZXQgIT0gWl9TVFJFQU1fRU5EKQorCQkJZGllKCJjYW5ub3QgZGVmbGF0ZSByZXF1ZXN0OyB6bGliIGRlZmxhdGUgZXJyb3IgJWQiLCByZXQpOworCisJCXJldCA9IGRlZmxhdGVFbmQoJnN0cmVhbSk7CisJCWlmIChyZXQgIT0gWl9PSykKKwkJCWRpZSgiY2Fubm90IGRlZmxhdGUgcmVxdWVzdDsgemxpYiBlbmQgZXJyb3IgJWQiLCByZXQpOworCisJCXNpemUgPSBzdHJlYW0udG90YWxfb3V0OworCisJCWhlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJzLCAiQ29udGVudC1FbmNvZGluZzogZ3ppcCIpOworCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfUE9TVEZJRUxEUywgZ3ppcF9ib2R5KTsKKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1BPU1RGSUVMRFNJWkUsIHNpemUpOworCisJCWlmIChvcHRpb25zLnZlcmJvc2l0eSA+IDEpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiUE9TVCAlcyAoZ3ppcCAlbHUgdG8gJWx1IGJ5dGVzKVxuIiwKKwkJCQlycGMtPnNlcnZpY2VfbmFtZSwKKwkJCQkodW5zaWduZWQgbG9uZylycGMtPmxlbiwgKHVuc2lnbmVkIGxvbmcpc2l6ZSk7CisJCQlmZmx1c2goc3RkZXJyKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFdlIGtub3cgdGhlIGNvbXBsZXRlIHJlcXVlc3Qgc2l6ZSBpbiBhZHZhbmNlLCB1c2UgdGhlCisJCSAqIG1vcmUgbm9ybWFsIENvbnRlbnQtTGVuZ3RoIGFwcHJvYWNoLgorCQkgKi8KKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1BPU1RGSUVMRFMsIHJwYy0+YnVmKTsKKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1BPU1RGSUVMRFNJWkUsIHJwYy0+bGVuKTsKKwkJaWYgKG9wdGlvbnMudmVyYm9zaXR5ID4gMSkgeworCQkJZnByaW50ZihzdGRlcnIsICJQT1NUICVzICglbHUgYnl0ZXMpXG4iLAorCQkJCXJwYy0+c2VydmljZV9uYW1lLCAodW5zaWduZWQgbG9uZylycGMtPmxlbik7CisJCQlmZmx1c2goc3RkZXJyKTsKKwkJfQorCX0KKworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBoZWFkZXJzKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgcnBjX2luKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgcnBjKTsKKworCXNsb3QtPmN1cmxfcmVzdWx0ID0gY3VybF9lYXN5X3BlcmZvcm0oc2xvdC0+Y3VybCk7CisJZmluaXNoX2FjdGl2ZV9zbG90KHNsb3QpOworCisJaWYgKHJlc3VsdHMuY3VybF9yZXN1bHQgIT0gQ1VSTEVfT0spIHsKKwkJZXJyIHw9IGVycm9yKCJSUEMgZmFpbGVkOyByZXN1bHQ9JWQsIEhUVFAgY29kZSA9ICVsZCIsCisJCQlyZXN1bHRzLmN1cmxfcmVzdWx0LCByZXN1bHRzLmh0dHBfY29kZSk7CisJfQorCisJY3VybF9zbGlzdF9mcmVlX2FsbChoZWFkZXJzKTsKKwlmcmVlKGd6aXBfYm9keSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBycGNfc2VydmljZShzdHJ1Y3QgcnBjX3N0YXRlICpycGMsIHN0cnVjdCBkaXNjb3ZlcnkgKmhlYWRzKQoreworCWNvbnN0IGNoYXIgKnN2YyA9IHJwYy0+c2VydmljZV9uYW1lOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY2xpZW50OworCWludCBlcnIgPSAwOworCisJaW5pdF93YWxrZXIoKTsKKwltZW1zZXQoJmNsaWVudCwgMCwgc2l6ZW9mKGNsaWVudCkpOworCWNsaWVudC5pbiA9IC0xOworCWNsaWVudC5vdXQgPSAtMTsKKwljbGllbnQuZ2l0X2NtZCA9IDE7CisJY2xpZW50LmFyZ3YgPSBycGMtPmFyZ3Y7CisJaWYgKHN0YXJ0X2NvbW1hbmQoJmNsaWVudCkpCisJCWV4aXQoMSk7CisJaWYgKGhlYWRzKQorCQl3cml0ZV9vcl9kaWUoY2xpZW50LmluLCBoZWFkcy0+YnVmLCBoZWFkcy0+bGVuKTsKKworCXJwYy0+YWxsb2MgPSBodHRwX3Bvc3RfYnVmZmVyOworCXJwYy0+YnVmID0geG1hbGxvYyhycGMtPmFsbG9jKTsKKwlycGMtPmluID0gY2xpZW50LmluOworCXJwYy0+b3V0ID0gY2xpZW50Lm91dDsKKwlzdHJidWZfaW5pdCgmcnBjLT5yZXN1bHQsIDApOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzLyVzIiwgdXJsLCBzdmMpOworCXJwYy0+c2VydmljZV91cmwgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC0lcy1yZXF1ZXN0Iiwgc3ZjKTsKKwlycGMtPmhkcl9jb250ZW50X3R5cGUgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgIkFjY2VwdDogYXBwbGljYXRpb24veC0lcy1yZXN1bHQiLCBzdmMpOworCXJwYy0+aGRyX2FjY2VwdCA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisKKwl3aGlsZSAoIWVycikgeworCQlpbnQgbiA9IHBhY2tldF9yZWFkX2xpbmUocnBjLT5vdXQsIHJwYy0+YnVmLCBycGMtPmFsbG9jKTsKKwkJaWYgKCFuKQorCQkJYnJlYWs7CisJCXJwYy0+cG9zID0gMDsKKwkJcnBjLT5sZW4gPSBuOworCQllcnIgfD0gcG9zdF9ycGMocnBjKTsKKwl9CisJc3RyYnVmX3JlYWQoJnJwYy0+cmVzdWx0LCBjbGllbnQub3V0LCAwKTsKKworCWNsb3NlKGNsaWVudC5pbik7CisJY2xvc2UoY2xpZW50Lm91dCk7CisJY2xpZW50LmluID0gLTE7CisJY2xpZW50Lm91dCA9IC0xOworCisJZXJyIHw9IGZpbmlzaF9jb21tYW5kKCZjbGllbnQpOworCWZyZWUocnBjLT5zZXJ2aWNlX3VybCk7CisJZnJlZShycGMtPmhkcl9jb250ZW50X3R5cGUpOworCWZyZWUocnBjLT5oZHJfYWNjZXB0KTsKKwlmcmVlKHJwYy0+YnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGZldGNoX2R1bWIoaW50IG5yX2hlYWRzLCBzdHJ1Y3QgcmVmICoqdG9fZmV0Y2gpCit7CisJY2hhciAqKnRhcmdldHMgPSB4bWFsbG9jKG5yX2hlYWRzICogc2l6ZW9mKGNoYXIqKSk7CisJaW50IHJldCwgaTsKKworCWlmIChvcHRpb25zLmRlcHRoKQorCQlkaWUoImR1bWIgaHR0cCB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCAtLWRlcHRoIik7CisJZm9yIChpID0gMDsgaSA8IG5yX2hlYWRzOyBpKyspCisJCXRhcmdldHNbaV0gPSB4c3RyZHVwKHNoYTFfdG9faGV4KHRvX2ZldGNoW2ldLT5vbGRfc2hhMSkpOworCisJaW5pdF93YWxrZXIoKTsKKwl3YWxrZXItPmdldF9hbGwgPSAxOworCXdhbGtlci0+Z2V0X3RyZWUgPSAxOworCXdhbGtlci0+Z2V0X2hpc3RvcnkgPSAxOworCXdhbGtlci0+Z2V0X3ZlcmJvc2VseSA9IG9wdGlvbnMudmVyYm9zaXR5ID49IDM7CisJd2Fsa2VyLT5nZXRfcmVjb3ZlciA9IDA7CisJcmV0ID0gd2Fsa2VyX2ZldGNoKHdhbGtlciwgbnJfaGVhZHMsIHRhcmdldHMsIE5VTEwsIE5VTEwpOworCisJZm9yIChpID0gMDsgaSA8IG5yX2hlYWRzOyBpKyspCisJCWZyZWUodGFyZ2V0c1tpXSk7CisJZnJlZSh0YXJnZXRzKTsKKworCXJldHVybiByZXQgPyBlcnJvcigiRmV0Y2ggZmFpbGVkLiIpIDogMDsKK30KKworc3RhdGljIGludCBmZXRjaF9naXQoc3RydWN0IGRpc2NvdmVyeSAqaGVhZHMsCisJaW50IG5yX2hlYWRzLCBzdHJ1Y3QgcmVmICoqdG9fZmV0Y2gpCit7CisJc3RydWN0IHJwY19zdGF0ZSBycGM7CisJY2hhciAqZGVwdGhfYXJnID0gTlVMTDsKKwljb25zdCBjaGFyICoqYXJndjsKKwlpbnQgYXJnYyA9IDAsIGksIGVycjsKKworCWFyZ3YgPSB4bWFsbG9jKCgxNSArIG5yX2hlYWRzKSAqIHNpemVvZihjaGFyKikpOworCWFyZ3ZbYXJnYysrXSA9ICJmZXRjaC1wYWNrIjsKKwlhcmd2W2FyZ2MrK10gPSAiLS1zdGF0ZWxlc3MtcnBjIjsKKwlhcmd2W2FyZ2MrK10gPSAiLS1sb2NrLXBhY2siOworCWlmIChvcHRpb25zLmZvbGxvd3RhZ3MpCisJCWFyZ3ZbYXJnYysrXSA9ICItLWluY2x1ZGUtdGFnIjsKKwlpZiAob3B0aW9ucy50aGluKQorCQlhcmd2W2FyZ2MrK10gPSAiLS10aGluIjsKKwlpZiAob3B0aW9ucy52ZXJib3NpdHkgPj0gMykgeworCQlhcmd2W2FyZ2MrK10gPSAiLXYiOworCQlhcmd2W2FyZ2MrK10gPSAiLXYiOworCX0KKwlpZiAoIW9wdGlvbnMucHJvZ3Jlc3MpCisJCWFyZ3ZbYXJnYysrXSA9ICItLW5vLXByb2dyZXNzIjsKKwlpZiAob3B0aW9ucy5kZXB0aCkgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQlzdHJidWZfYWRkZigmYnVmLCAiLS1kZXB0aD0lbHUiLCBvcHRpb25zLmRlcHRoKTsKKwkJZGVwdGhfYXJnID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKwkJYXJndlthcmdjKytdID0gZGVwdGhfYXJnOworCX0KKwlhcmd2W2FyZ2MrK10gPSB1cmw7CisJZm9yIChpID0gMDsgaSA8IG5yX2hlYWRzOyBpKyspIHsKKwkJc3RydWN0IHJlZiAqcmVmID0gdG9fZmV0Y2hbaV07CisJCWlmICghcmVmLT5uYW1lIHx8ICEqcmVmLT5uYW1lKQorCQkJZGllKCJjYW5ub3QgZmV0Y2ggYnkgc2hhMSBvdmVyIHNtYXJ0IGh0dHAiKTsKKwkJYXJndlthcmdjKytdID0gcmVmLT5uYW1lOworCX0KKwlhcmd2W2FyZ2MrK10gPSBOVUxMOworCisJbWVtc2V0KCZycGMsIDAsIHNpemVvZihycGMpKTsKKwlycGMuc2VydmljZV9uYW1lID0gImdpdC11cGxvYWQtcGFjayIsCisJcnBjLmFyZ3YgPSBhcmd2OworCXJwYy5nemlwX3JlcXVlc3QgPSAxOworCisJZXJyID0gcnBjX3NlcnZpY2UoJnJwYywgaGVhZHMpOworCWlmIChycGMucmVzdWx0LmxlbikKKwkJc2FmZV93cml0ZSgxLCBycGMucmVzdWx0LmJ1ZiwgcnBjLnJlc3VsdC5sZW4pOworCXN0cmJ1Zl9yZWxlYXNlKCZycGMucmVzdWx0KTsKKwlmcmVlKGFyZ3YpOworCWZyZWUoZGVwdGhfYXJnKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGZldGNoKGludCBucl9oZWFkcywgc3RydWN0IHJlZiAqKnRvX2ZldGNoKQoreworCXN0cnVjdCBkaXNjb3ZlcnkgKmQgPSBkaXNjb3Zlcl9yZWZzKCJnaXQtdXBsb2FkLXBhY2siKTsKKwlpZiAoZC0+cHJvdG9fZ2l0KQorCQlyZXR1cm4gZmV0Y2hfZ2l0KGQsIG5yX2hlYWRzLCB0b19mZXRjaCk7CisJZWxzZQorCQlyZXR1cm4gZmV0Y2hfZHVtYihucl9oZWFkcywgdG9fZmV0Y2gpOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9mZXRjaChzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJc3RydWN0IHJlZiAqKnRvX2ZldGNoID0gTlVMTDsKKwlzdHJ1Y3QgcmVmICpsaXN0X2hlYWQgPSBOVUxMOworCXN0cnVjdCByZWYgKipsaXN0ID0gJmxpc3RfaGVhZDsKKwlpbnQgYWxsb2NfaGVhZHMgPSAwLCBucl9oZWFkcyA9IDA7CisKKwlkbyB7CisJCWlmICghcHJlZml4Y21wKGJ1Zi0+YnVmLCAiZmV0Y2ggIikpIHsKKwkJCWNoYXIgKnAgPSBidWYtPmJ1ZiArIHN0cmxlbigiZmV0Y2ggIik7CisJCQljaGFyICpuYW1lOworCQkJc3RydWN0IHJlZiAqcmVmOworCQkJdW5zaWduZWQgY2hhciBvbGRfc2hhMVsyMF07CisKKwkJCWlmIChzdHJsZW4ocCkgPCA0MCB8fCBnZXRfc2hhMV9oZXgocCwgb2xkX3NoYTEpKQorCQkJCWRpZSgicHJvdG9jb2wgZXJyb3I6IGV4cGVjdGVkIHNoYS9yZWYsIGdvdCAlcyciLCBwKTsKKwkJCWlmIChwWzQwXSA9PSAnICcpCisJCQkJbmFtZSA9IHAgKyA0MTsKKwkJCWVsc2UgaWYgKCFwWzQwXSkKKwkJCQluYW1lID0gIiI7CisJCQllbHNlCisJCQkJZGllKCJwcm90b2NvbCBlcnJvcjogZXhwZWN0ZWQgc2hhL3JlZiwgZ290ICVzJyIsIHApOworCisJCQlyZWYgPSBhbGxvY19yZWYobmFtZSk7CisJCQloYXNoY3B5KHJlZi0+b2xkX3NoYTEsIG9sZF9zaGExKTsKKworCQkJKmxpc3QgPSByZWY7CisJCQlsaXN0ID0gJnJlZi0+bmV4dDsKKworCQkJQUxMT0NfR1JPVyh0b19mZXRjaCwgbnJfaGVhZHMgKyAxLCBhbGxvY19oZWFkcyk7CisJCQl0b19mZXRjaFtucl9oZWFkcysrXSA9IHJlZjsKKwkJfQorCQllbHNlCisJCQlkaWUoImh0dHAgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgJXMiLCBidWYtPmJ1Zik7CisKKwkJc3RyYnVmX3Jlc2V0KGJ1Zik7CisJCWlmIChzdHJidWZfZ2V0bGluZShidWYsIHN0ZGluLCAnXG4nKSA9PSBFT0YpCisJCQlyZXR1cm47CisJCWlmICghKmJ1Zi0+YnVmKQorCQkJYnJlYWs7CisJfSB3aGlsZSAoMSk7CisKKwlpZiAoZmV0Y2gobnJfaGVhZHMsIHRvX2ZldGNoKSkKKwkJZXhpdCgxMjgpOyAvKiBlcnJvciBhbHJlYWR5IHJlcG9ydGVkICovCisJZnJlZV9yZWZzKGxpc3RfaGVhZCk7CisJZnJlZSh0b19mZXRjaCk7CisKKwlwcmludGYoIlxuIik7CisJZmZsdXNoKHN0ZG91dCk7CisJc3RyYnVmX3Jlc2V0KGJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgcHVzaF9kYXYoaW50IG5yX3NwZWMsIGNoYXIgKipzcGVjcykKK3sKKwljb25zdCBjaGFyICoqYXJndiA9IHhtYWxsb2MoKDEwICsgbnJfc3BlYykgKiBzaXplb2YoY2hhciopKTsKKwlpbnQgYXJnYyA9IDAsIGk7CisKKwlhcmd2W2FyZ2MrK10gPSAiaHR0cC1wdXNoIjsKKwlhcmd2W2FyZ2MrK10gPSAiLS1oZWxwZXItc3RhdHVzIjsKKwlpZiAob3B0aW9ucy5kcnlfcnVuKQorCQlhcmd2W2FyZ2MrK10gPSAiLS1kcnktcnVuIjsKKwlpZiAob3B0aW9ucy52ZXJib3NpdHkgPiAxKQorCQlhcmd2W2FyZ2MrK10gPSAiLS12ZXJib3NlIjsKKwlhcmd2W2FyZ2MrK10gPSB1cmw7CisJZm9yIChpID0gMDsgaSA8IG5yX3NwZWM7IGkrKykKKwkJYXJndlthcmdjKytdID0gc3BlY3NbaV07CisJYXJndlthcmdjKytdID0gTlVMTDsKKworCWlmIChydW5fY29tbWFuZF92X29wdChhcmd2LCBSVU5fR0lUX0NNRCkpCisJCWRpZSgiZ2l0LSVzIGZhaWxlZCIsIGFyZ3ZbMF0pOworCWZyZWUoYXJndik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHVzaF9naXQoc3RydWN0IGRpc2NvdmVyeSAqaGVhZHMsIGludCBucl9zcGVjLCBjaGFyICoqc3BlY3MpCit7CisJc3RydWN0IHJwY19zdGF0ZSBycGM7CisJY29uc3QgY2hhciAqKmFyZ3Y7CisJaW50IGFyZ2MgPSAwLCBpLCBlcnI7CisKKwlhcmd2ID0geG1hbGxvYygoMTAgKyBucl9zcGVjKSAqIHNpemVvZihjaGFyKikpOworCWFyZ3ZbYXJnYysrXSA9ICJzZW5kLXBhY2siOworCWFyZ3ZbYXJnYysrXSA9ICItLXN0YXRlbGVzcy1ycGMiOworCWFyZ3ZbYXJnYysrXSA9ICItLWhlbHBlci1zdGF0dXMiOworCWlmIChvcHRpb25zLnRoaW4pCisJCWFyZ3ZbYXJnYysrXSA9ICItLXRoaW4iOworCWlmIChvcHRpb25zLmRyeV9ydW4pCisJCWFyZ3ZbYXJnYysrXSA9ICItLWRyeS1ydW4iOworCWlmIChvcHRpb25zLnZlcmJvc2l0eSA+IDEpCisJCWFyZ3ZbYXJnYysrXSA9ICItLXZlcmJvc2UiOworCWFyZ3ZbYXJnYysrXSA9IHVybDsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfc3BlYzsgaSsrKQorCQlhcmd2W2FyZ2MrK10gPSBzcGVjc1tpXTsKKwlhcmd2W2FyZ2MrK10gPSBOVUxMOworCisJbWVtc2V0KCZycGMsIDAsIHNpemVvZihycGMpKTsKKwlycGMuc2VydmljZV9uYW1lID0gImdpdC1yZWNlaXZlLXBhY2siLAorCXJwYy5hcmd2ID0gYXJndjsKKworCWVyciA9IHJwY19zZXJ2aWNlKCZycGMsIGhlYWRzKTsKKwlpZiAocnBjLnJlc3VsdC5sZW4pCisJCXNhZmVfd3JpdGUoMSwgcnBjLnJlc3VsdC5idWYsIHJwYy5yZXN1bHQubGVuKTsKKwlzdHJidWZfcmVsZWFzZSgmcnBjLnJlc3VsdCk7CisJZnJlZShhcmd2KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHB1c2goaW50IG5yX3NwZWMsIGNoYXIgKipzcGVjcykKK3sKKwlzdHJ1Y3QgZGlzY292ZXJ5ICpoZWFkcyA9IGRpc2NvdmVyX3JlZnMoImdpdC1yZWNlaXZlLXBhY2siKTsKKwlpbnQgcmV0OworCisJaWYgKGhlYWRzLT5wcm90b19naXQpCisJCXJldCA9IHB1c2hfZ2l0KGhlYWRzLCBucl9zcGVjLCBzcGVjcyk7CisJZWxzZQorCQlyZXQgPSBwdXNoX2Rhdihucl9zcGVjLCBzcGVjcyk7CisJZnJlZV9kaXNjb3ZlcnkoaGVhZHMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX3B1c2goc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCWNoYXIgKipzcGVjcyA9IE5VTEw7CisJaW50IGFsbG9jX3NwZWMgPSAwLCBucl9zcGVjID0gMCwgaTsKKworCWRvIHsKKwkJaWYgKCFwcmVmaXhjbXAoYnVmLT5idWYsICJwdXNoICIpKSB7CisJCQlBTExPQ19HUk9XKHNwZWNzLCBucl9zcGVjICsgMSwgYWxsb2Nfc3BlYyk7CisJCQlzcGVjc1tucl9zcGVjKytdID0geHN0cmR1cChidWYtPmJ1ZiArIDUpOworCQl9CisJCWVsc2UKKwkJCWRpZSgiaHR0cCB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCAlcyIsIGJ1Zi0+YnVmKTsKKworCQlzdHJidWZfcmVzZXQoYnVmKTsKKwkJaWYgKHN0cmJ1Zl9nZXRsaW5lKGJ1Ziwgc3RkaW4sICdcbicpID09IEVPRikKKwkJCXJldHVybjsKKwkJaWYgKCEqYnVmLT5idWYpCisJCQlicmVhazsKKwl9IHdoaWxlICgxKTsKKworCWlmIChwdXNoKG5yX3NwZWMsIHNwZWNzKSkKKwkJZXhpdCgxMjgpOyAvKiBlcnJvciBhbHJlYWR5IHJlcG9ydGVkICovCisJZm9yIChpID0gMDsgaSA8IG5yX3NwZWM7IGkrKykKKwkJZnJlZShzcGVjc1tpXSk7CisJZnJlZShzcGVjcyk7CisKKwlwcmludGYoIlxuIik7CisJZmZsdXNoKHN0ZG91dCk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCBub25naXQ7CisKKwlnaXRfZXh0cmFjdF9hcmd2MF9wYXRoKGFyZ3ZbMF0pOworCXNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KCZub25naXQpOworCWlmIChhcmdjIDwgMikgeworCQlmcHJpbnRmKHN0ZGVyciwgIlJlbW90ZSBuZWVkZWRcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlvcHRpb25zLnZlcmJvc2l0eSA9IDE7CisJb3B0aW9ucy5wcm9ncmVzcyA9ICEhaXNhdHR5KDIpOworCW9wdGlvbnMudGhpbiA9IDE7CisKKwlyZW1vdGUgPSByZW1vdGVfZ2V0KGFyZ3ZbMV0pOworCisJaWYgKGFyZ2MgPiAyKSB7CisJCXVybCA9IGFyZ3ZbMl07CisJfSBlbHNlIHsKKwkJdXJsID0gcmVtb3RlLT51cmxbMF07CisJfQorCisJZG8geworCQlpZiAoc3RyYnVmX2dldGxpbmUoJmJ1Ziwgc3RkaW4sICdcbicpID09IEVPRikKKwkJCWJyZWFrOworCQlpZiAoIXByZWZpeGNtcChidWYuYnVmLCAiZmV0Y2ggIikpIHsKKwkJCWlmIChub25naXQpCisJCQkJZGllKCJGZXRjaCBhdHRlbXB0ZWQgd2l0aG91dCBhIGxvY2FsIHJlcG8iKTsKKwkJCXBhcnNlX2ZldGNoKCZidWYpOworCisJCX0gZWxzZSBpZiAoIXN0cmNtcChidWYuYnVmLCAibGlzdCIpIHx8ICFwcmVmaXhjbXAoYnVmLmJ1ZiwgImxpc3QgIikpIHsKKwkJCWludCBmb3JfcHVzaCA9ICEhc3Ryc3RyKGJ1Zi5idWYgKyA0LCAiZm9yLXB1c2giKTsKKwkJCW91dHB1dF9yZWZzKGdldF9yZWZzKGZvcl9wdXNoKSk7CisKKwkJfSBlbHNlIGlmICghcHJlZml4Y21wKGJ1Zi5idWYsICJwdXNoICIpKSB7CisJCQlwYXJzZV9wdXNoKCZidWYpOworCisJCX0gZWxzZSBpZiAoIXByZWZpeGNtcChidWYuYnVmLCAib3B0aW9uICIpKSB7CisJCQljaGFyICpuYW1lID0gYnVmLmJ1ZiArIHN0cmxlbigib3B0aW9uICIpOworCQkJY2hhciAqdmFsdWUgPSBzdHJjaHIobmFtZSwgJyAnKTsKKwkJCWludCByZXN1bHQ7CisKKwkJCWlmICh2YWx1ZSkKKwkJCQkqdmFsdWUrKyA9ICdcMCc7CisJCQllbHNlCisJCQkJdmFsdWUgPSAidHJ1ZSI7CisKKwkJCXJlc3VsdCA9IHNldF9vcHRpb24obmFtZSwgdmFsdWUpOworCQkJaWYgKCFyZXN1bHQpCisJCQkJcHJpbnRmKCJva1xuIik7CisJCQllbHNlIGlmIChyZXN1bHQgPCAwKQorCQkJCXByaW50ZigiZXJyb3IgaW52YWxpZCB2YWx1ZVxuIik7CisJCQllbHNlCisJCQkJcHJpbnRmKCJ1bnN1cHBvcnRlZFxuIik7CisJCQlmZmx1c2goc3Rkb3V0KTsKKworCQl9IGVsc2UgaWYgKCFzdHJjbXAoYnVmLmJ1ZiwgImNhcGFiaWxpdGllcyIpKSB7CisJCQlwcmludGYoImZldGNoXG4iKTsKKwkJCXByaW50Zigib3B0aW9uXG4iKTsKKwkJCXByaW50ZigicHVzaFxuIik7CisJCQlwcmludGYoIlxuIik7CisJCQlmZmx1c2goc3Rkb3V0KTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAxOworCQl9CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwl9IHdoaWxlICgxKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3JlbW90ZS5jIGIvcmVtb3RlLmMKaW5kZXggMzk1ODNkNS4uYzcwMTgxYyAxMDA2NDQKLS0tIGEvcmVtb3RlLmMKKysrIGIvcmVtb3RlLmMKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSAicmV2aXNpb24uaCIKICNpbmNsdWRlICJkaXIuaCIKICNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgogCiBzdGF0aWMgc3RydWN0IHJlZnNwZWMgc190YWdfcmVmc3BlYyA9IHsKIAkwLApAQCAtMjgsNiArMjksMTEgQEAKIAlpbnQgaW5zdGVhZF9vZl9ucjsKIAlpbnQgaW5zdGVhZF9vZl9hbGxvYzsKIH07CitzdHJ1Y3QgcmV3cml0ZXMgeworCXN0cnVjdCByZXdyaXRlICoqcmV3cml0ZTsKKwlpbnQgcmV3cml0ZV9hbGxvYzsKKwlpbnQgcmV3cml0ZV9ucjsKK307CiAKIHN0YXRpYyBzdHJ1Y3QgcmVtb3RlICoqcmVtb3RlczsKIHN0YXRpYyBpbnQgcmVtb3Rlc19hbGxvYzsKQEAgLTQxLDE0ICs0NywxOCBAQAogc3RhdGljIGNvbnN0IGNoYXIgKmRlZmF1bHRfcmVtb3RlX25hbWU7CiBzdGF0aWMgaW50IGV4cGxpY2l0X2RlZmF1bHRfcmVtb3RlX25hbWU7CiAKLXN0YXRpYyBzdHJ1Y3QgcmV3cml0ZSAqKnJld3JpdGU7Ci1zdGF0aWMgaW50IHJld3JpdGVfYWxsb2M7Ci1zdGF0aWMgaW50IHJld3JpdGVfbnI7CitzdGF0aWMgc3RydWN0IHJld3JpdGVzIHJld3JpdGVzOworc3RhdGljIHN0cnVjdCByZXdyaXRlcyByZXdyaXRlc19wdXNoOwogCiAjZGVmaW5lIEJVRl9TSVpFICgyMDQ4KQogc3RhdGljIGNoYXIgYnVmZmVyW0JVRl9TSVpFXTsKIAotc3RhdGljIGNvbnN0IGNoYXIgKmFsaWFzX3VybChjb25zdCBjaGFyICp1cmwpCitzdGF0aWMgaW50IHZhbGlkX3JlbW90ZShjb25zdCBzdHJ1Y3QgcmVtb3RlICpyZW1vdGUpCit7CisJcmV0dXJuICghIXJlbW90ZS0+dXJsKSB8fCAoISFyZW1vdGUtPmZvcmVpZ25fdmNzKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmFsaWFzX3VybChjb25zdCBjaGFyICp1cmwsIHN0cnVjdCByZXdyaXRlcyAqcikKIHsKIAlpbnQgaSwgajsKIAljaGFyICpyZXQ7CkBAIC01NywxNCArNjcsMTQgQEAKIAogCWxvbmdlc3QgPSBOVUxMOwogCWxvbmdlc3RfaSA9IC0xOwotCWZvciAoaSA9IDA7IGkgPCByZXdyaXRlX25yOyBpKyspIHsKLQkJaWYgKCFyZXdyaXRlW2ldKQorCWZvciAoaSA9IDA7IGkgPCByLT5yZXdyaXRlX25yOyBpKyspIHsKKwkJaWYgKCFyLT5yZXdyaXRlW2ldKQogCQkJY29udGludWU7Ci0JCWZvciAoaiA9IDA7IGogPCByZXdyaXRlW2ldLT5pbnN0ZWFkX29mX25yOyBqKyspIHsKLQkJCWlmICghcHJlZml4Y21wKHVybCwgcmV3cml0ZVtpXS0+aW5zdGVhZF9vZltqXS5zKSAmJgorCQlmb3IgKGogPSAwOyBqIDwgci0+cmV3cml0ZVtpXS0+aW5zdGVhZF9vZl9ucjsgaisrKSB7CisJCQlpZiAoIXByZWZpeGNtcCh1cmwsIHItPnJld3JpdGVbaV0tPmluc3RlYWRfb2Zbal0ucykgJiYKIAkJCSAgICAoIWxvbmdlc3QgfHwKLQkJCSAgICAgbG9uZ2VzdC0+bGVuIDwgcmV3cml0ZVtpXS0+aW5zdGVhZF9vZltqXS5sZW4pKSB7Ci0JCQkJbG9uZ2VzdCA9ICYocmV3cml0ZVtpXS0+aW5zdGVhZF9vZltqXSk7CisJCQkgICAgIGxvbmdlc3QtPmxlbiA8IHItPnJld3JpdGVbaV0tPmluc3RlYWRfb2Zbal0ubGVuKSkgeworCQkJCWxvbmdlc3QgPSAmKHItPnJld3JpdGVbaV0tPmluc3RlYWRfb2Zbal0pOwogCQkJCWxvbmdlc3RfaSA9IGk7CiAJCQl9CiAJCX0KQEAgLTcyLDEwICs4MiwxMCBAQAogCWlmICghbG9uZ2VzdCkKIAkJcmV0dXJuIHVybDsKIAotCXJldCA9IHhtYWxsb2MocmV3cml0ZVtsb25nZXN0X2ldLT5iYXNlbGVuICsKKwlyZXQgPSB4bWFsbG9jKHItPnJld3JpdGVbbG9uZ2VzdF9pXS0+YmFzZWxlbiArCiAJCSAgICAgKHN0cmxlbih1cmwpIC0gbG9uZ2VzdC0+bGVuKSArIDEpOwotCXN0cmNweShyZXQsIHJld3JpdGVbbG9uZ2VzdF9pXS0+YmFzZSk7Ci0Jc3RyY3B5KHJldCArIHJld3JpdGVbbG9uZ2VzdF9pXS0+YmFzZWxlbiwgdXJsICsgbG9uZ2VzdC0+bGVuKTsKKwlzdHJjcHkocmV0LCByLT5yZXdyaXRlW2xvbmdlc3RfaV0tPmJhc2UpOworCXN0cmNweShyZXQgKyByLT5yZXdyaXRlW2xvbmdlc3RfaV0tPmJhc2VsZW4sIHVybCArIGxvbmdlc3QtPmxlbik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTAxLDkgKzExMSwyMyBAQAogCXJlbW90ZS0+dXJsW3JlbW90ZS0+dXJsX25yKytdID0gdXJsOwogfQogCitzdGF0aWMgdm9pZCBhZGRfcHVzaHVybChzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIGNvbnN0IGNoYXIgKnB1c2h1cmwpCit7CisJQUxMT0NfR1JPVyhyZW1vdGUtPnB1c2h1cmwsIHJlbW90ZS0+cHVzaHVybF9uciArIDEsIHJlbW90ZS0+cHVzaHVybF9hbGxvYyk7CisJcmVtb3RlLT5wdXNodXJsW3JlbW90ZS0+cHVzaHVybF9ucisrXSA9IHB1c2h1cmw7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9wdXNodXJsX2FsaWFzKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgY29uc3QgY2hhciAqdXJsKQoreworCWNvbnN0IGNoYXIgKnB1c2h1cmwgPSBhbGlhc191cmwodXJsLCAmcmV3cml0ZXNfcHVzaCk7CisJaWYgKHB1c2h1cmwgIT0gdXJsKQorCQlhZGRfcHVzaHVybChyZW1vdGUsIHB1c2h1cmwpOworfQorCiBzdGF0aWMgdm9pZCBhZGRfdXJsX2FsaWFzKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgY29uc3QgY2hhciAqdXJsKQogewotCWFkZF91cmwocmVtb3RlLCBhbGlhc191cmwodXJsKSk7CisJYWRkX3VybChyZW1vdGUsIGFsaWFzX3VybCh1cmwsICZyZXdyaXRlcykpOworCWFkZF9wdXNodXJsX2FsaWFzKHJlbW90ZSwgdXJsKTsKIH0KIAogc3RhdGljIHN0cnVjdCByZW1vdGUgKm1ha2VfcmVtb3RlKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCkBAIC0xNjMsMjIgKzE4NywyMiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcmV3cml0ZSAqbWFrZV9yZXdyaXRlKGNvbnN0IGNoYXIgKmJhc2UsIGludCBsZW4pCitzdGF0aWMgc3RydWN0IHJld3JpdGUgKm1ha2VfcmV3cml0ZShzdHJ1Y3QgcmV3cml0ZXMgKnIsIGNvbnN0IGNoYXIgKmJhc2UsIGludCBsZW4pCiB7CiAJc3RydWN0IHJld3JpdGUgKnJldDsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCByZXdyaXRlX25yOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgci0+cmV3cml0ZV9ucjsgaSsrKSB7CiAJCWlmIChsZW4KLQkJICAgID8gKGxlbiA9PSByZXdyaXRlW2ldLT5iYXNlbGVuICYmCi0JCSAgICAgICAhc3RybmNtcChiYXNlLCByZXdyaXRlW2ldLT5iYXNlLCBsZW4pKQotCQkgICAgOiAhc3RyY21wKGJhc2UsIHJld3JpdGVbaV0tPmJhc2UpKQotCQkJcmV0dXJuIHJld3JpdGVbaV07CisJCSAgICA/IChsZW4gPT0gci0+cmV3cml0ZVtpXS0+YmFzZWxlbiAmJgorCQkgICAgICAgIXN0cm5jbXAoYmFzZSwgci0+cmV3cml0ZVtpXS0+YmFzZSwgbGVuKSkKKwkJICAgIDogIXN0cmNtcChiYXNlLCByLT5yZXdyaXRlW2ldLT5iYXNlKSkKKwkJCXJldHVybiByLT5yZXdyaXRlW2ldOwogCX0KIAotCUFMTE9DX0dST1cocmV3cml0ZSwgcmV3cml0ZV9uciArIDEsIHJld3JpdGVfYWxsb2MpOworCUFMTE9DX0dST1coci0+cmV3cml0ZSwgci0+cmV3cml0ZV9uciArIDEsIHItPnJld3JpdGVfYWxsb2MpOwogCXJldCA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCByZXdyaXRlKSk7Ci0JcmV3cml0ZVtyZXdyaXRlX25yKytdID0gcmV0OworCXItPnJld3JpdGVbci0+cmV3cml0ZV9ucisrXSA9IHJldDsKIAlpZiAobGVuKSB7CiAJCXJldC0+YmFzZSA9IHhzdHJuZHVwKGJhc2UsIGxlbik7CiAJCXJldC0+YmFzZWxlbiA9IGxlbjsKQEAgLTMwMSw3ICszMjUsNyBAQAogCQlzdHJidWZfYWRkc3RyKCZicmFuY2gsICJIRUFEOiIpOwogCX0KIAlhZGRfdXJsX2FsaWFzKHJlbW90ZSwgcCk7Ci0JYWRkX2ZldGNoX3JlZnNwZWMocmVtb3RlLCBzdHJidWZfZGV0YWNoKCZicmFuY2gsIDApKTsKKwlhZGRfZmV0Y2hfcmVmc3BlYyhyZW1vdGUsIHN0cmJ1Zl9kZXRhY2goJmJyYW5jaCwgTlVMTCkpOwogCS8qCiAJICogQ29naXRvIGNvbXBhdGlibGUgcHVzaDogcHVzaCBjdXJyZW50IEhFQUQgdG8gcmVtb3RlICNicmFuY2gKIAkgKiAobWFzdGVyIGlmIG1pc3NpbmcpCkBAIC0zMTIsNyArMzM2LDcgQEAKIAkJc3RyYnVmX2FkZGYoJmJyYW5jaCwgIjpyZWZzL2hlYWRzLyVzIiwgZnJhZyk7CiAJZWxzZQogCQlzdHJidWZfYWRkc3RyKCZicmFuY2gsICI6cmVmcy9oZWFkcy9tYXN0ZXIiKTsKLQlhZGRfcHVzaF9yZWZzcGVjKHJlbW90ZSwgc3RyYnVmX2RldGFjaCgmYnJhbmNoLCAwKSk7CisJYWRkX3B1c2hfcmVmc3BlYyhyZW1vdGUsIHN0cmJ1Zl9kZXRhY2goJmJyYW5jaCwgTlVMTCkpOwogCXJlbW90ZS0+ZmV0Y2hfdGFncyA9IDE7IC8qIGFsd2F5cyBhdXRvLWZvbGxvdyAqLwogfQogCkBAIC0zNDksOCArMzczLDEzIEBACiAJCXN1YmtleSA9IHN0cnJjaHIobmFtZSwgJy4nKTsKIAkJaWYgKCFzdWJrZXkpCiAJCQlyZXR1cm4gMDsKLQkJcmV3cml0ZSA9IG1ha2VfcmV3cml0ZShuYW1lLCBzdWJrZXkgLSBuYW1lKTsKIAkJaWYgKCFzdHJjbXAoc3Via2V5LCAiLmluc3RlYWRvZiIpKSB7CisJCQlyZXdyaXRlID0gbWFrZV9yZXdyaXRlKCZyZXdyaXRlcywgbmFtZSwgc3Via2V5IC0gbmFtZSk7CisJCQlpZiAoIXZhbHVlKQorCQkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbChrZXkpOworCQkJYWRkX2luc3RlYWRfb2YocmV3cml0ZSwgeHN0cmR1cCh2YWx1ZSkpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAiLnB1c2hpbnN0ZWFkb2YiKSkgeworCQkJcmV3cml0ZSA9IG1ha2VfcmV3cml0ZSgmcmV3cml0ZXNfcHVzaCwgbmFtZSwgc3Via2V5IC0gbmFtZSk7CiAJCQlpZiAoIXZhbHVlKQogCQkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbChrZXkpOwogCQkJYWRkX2luc3RlYWRfb2YocmV3cml0ZSwgeHN0cmR1cCh2YWx1ZSkpOwpAQCAtMzczLDEyICs0MDIsMTggQEAKIAkJcmVtb3RlLT5taXJyb3IgPSBnaXRfY29uZmlnX2Jvb2woa2V5LCB2YWx1ZSk7CiAJZWxzZSBpZiAoIXN0cmNtcChzdWJrZXksICIuc2tpcGRlZmF1bHR1cGRhdGUiKSkKIAkJcmVtb3RlLT5za2lwX2RlZmF1bHRfdXBkYXRlID0gZ2l0X2NvbmZpZ19ib29sKGtleSwgdmFsdWUpOwotCisJZWxzZSBpZiAoIXN0cmNtcChzdWJrZXksICIuc2tpcGZldGNoYWxsIikpCisJCXJlbW90ZS0+c2tpcF9kZWZhdWx0X3VwZGF0ZSA9IGdpdF9jb25maWdfYm9vbChrZXksIHZhbHVlKTsKIAllbHNlIGlmICghc3RyY21wKHN1YmtleSwgIi51cmwiKSkgewogCQljb25zdCBjaGFyICp2OwogCQlpZiAoZ2l0X2NvbmZpZ19zdHJpbmcoJnYsIGtleSwgdmFsdWUpKQogCQkJcmV0dXJuIC0xOwogCQlhZGRfdXJsKHJlbW90ZSwgdik7CisJfSBlbHNlIGlmICghc3RyY21wKHN1YmtleSwgIi5wdXNodXJsIikpIHsKKwkJY29uc3QgY2hhciAqdjsKKwkJaWYgKGdpdF9jb25maWdfc3RyaW5nKCZ2LCBrZXksIHZhbHVlKSkKKwkJCXJldHVybiAtMTsKKwkJYWRkX3B1c2h1cmwocmVtb3RlLCB2KTsKIAl9IGVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAiLnB1c2giKSkgewogCQljb25zdCBjaGFyICp2OwogCQlpZiAoZ2l0X2NvbmZpZ19zdHJpbmcoJnYsIGtleSwgdmFsdWUpKQpAQCAtNDExLDYgKzQ0Niw4IEBACiAJfSBlbHNlIGlmICghc3RyY21wKHN1YmtleSwgIi5wcm94eSIpKSB7CiAJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygoY29uc3QgY2hhciAqKikmcmVtb3RlLT5odHRwX3Byb3h5LAogCQkJCQkga2V5LCB2YWx1ZSk7CisJfSBlbHNlIGlmICghc3RyY21wKHN1YmtleSwgIi52Y3MiKSkgeworCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJnJlbW90ZS0+Zm9yZWlnbl92Y3MsIGtleSwgdmFsdWUpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTQxOSwxMCArNDU2LDE3IEBACiB7CiAJaW50IGksIGo7CiAJZm9yIChpID0gMDsgaSA8IHJlbW90ZXNfbnI7IGkrKykgeworCQlpbnQgYWRkX3B1c2h1cmxfYWxpYXNlczsKIAkJaWYgKCFyZW1vdGVzW2ldKQogCQkJY29udGludWU7CisJCWZvciAoaiA9IDA7IGogPCByZW1vdGVzW2ldLT5wdXNodXJsX25yOyBqKyspIHsKKwkJCXJlbW90ZXNbaV0tPnB1c2h1cmxbal0gPSBhbGlhc191cmwocmVtb3Rlc1tpXS0+cHVzaHVybFtqXSwgJnJld3JpdGVzKTsKKwkJfQorCQlhZGRfcHVzaHVybF9hbGlhc2VzID0gcmVtb3Rlc1tpXS0+cHVzaHVybF9uciA9PSAwOwogCQlmb3IgKGogPSAwOyBqIDwgcmVtb3Rlc1tpXS0+dXJsX25yOyBqKyspIHsKLQkJCXJlbW90ZXNbaV0tPnVybFtqXSA9IGFsaWFzX3VybChyZW1vdGVzW2ldLT51cmxbal0pOworCQkJaWYgKGFkZF9wdXNodXJsX2FsaWFzZXMpCisJCQkJYWRkX3B1c2h1cmxfYWxpYXMocmVtb3Rlc1tpXSwgcmVtb3Rlc1tpXS0+dXJsW2pdKTsKKwkJCXJlbW90ZXNbaV0tPnVybFtqXSA9IGFsaWFzX3VybChyZW1vdGVzW2ldLT51cmxbal0sICZyZXdyaXRlcyk7CiAJCX0KIAl9CiB9CkBAIC02MzEsNiArNjc1LDE2IEBACiAJcmV0dXJuIHBhcnNlX3JlZnNwZWNfaW50ZXJuYWwobnJfcmVmc3BlYywgcmVmc3BlYywgMCwgMCk7CiB9CiAKK3ZvaWQgZnJlZV9yZWZzcGVjKGludCBucl9yZWZzcGVjLCBzdHJ1Y3QgcmVmc3BlYyAqcmVmc3BlYykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcmVmc3BlYzsgaSsrKSB7CisJCWZyZWUocmVmc3BlY1tpXS5zcmMpOworCQlmcmVlKHJlZnNwZWNbaV0uZHN0KTsKKwl9CisJZnJlZShyZWZzcGVjKTsKK30KKwogc3RhdGljIGludCB2YWxpZF9yZW1vdGVfbmljayhjb25zdCBjaGFyICpuYW1lKQogewogCWlmICghbmFtZVswXSB8fCBpc19kb3Rfb3JfZG90ZG90KG5hbWUpKQpAQCAtNjUzLDE0ICs3MDcsMTQgQEAKIAogCXJldCA9IG1ha2VfcmVtb3RlKG5hbWUsIDApOwogCWlmICh2YWxpZF9yZW1vdGVfbmljayhuYW1lKSkgewotCQlpZiAoIXJldC0+dXJsKQorCQlpZiAoIXZhbGlkX3JlbW90ZShyZXQpKQogCQkJcmVhZF9yZW1vdGVzX2ZpbGUocmV0KTsKLQkJaWYgKCFyZXQtPnVybCkKKwkJaWYgKCF2YWxpZF9yZW1vdGUocmV0KSkKIAkJCXJlYWRfYnJhbmNoZXNfZmlsZShyZXQpOwogCX0KLQlpZiAobmFtZV9naXZlbiAmJiAhcmV0LT51cmwpCisJaWYgKG5hbWVfZ2l2ZW4gJiYgIXZhbGlkX3JlbW90ZShyZXQpKQogCQlhZGRfdXJsX2FsaWFzKHJldCwgbmFtZSk7Ci0JaWYgKCFyZXQtPnVybCkKKwlpZiAoIXZhbGlkX3JlbW90ZShyZXQpKQogCQlyZXR1cm4gTlVMTDsKIAlyZXQtPmZldGNoID0gcGFyc2VfZmV0Y2hfcmVmc3BlYyhyZXQtPmZldGNoX3JlZnNwZWNfbnIsIHJldC0+ZmV0Y2hfcmVmc3BlYyk7CiAJcmV0LT5wdXNoID0gcGFyc2VfcHVzaF9yZWZzcGVjKHJldC0+cHVzaF9yZWZzcGVjX25yLCByZXQtPnB1c2hfcmVmc3BlYyk7CkBAIC02OTksMjkgKzc1MywzMyBAQAogCiB2b2lkIHJlZl9yZW1vdmVfZHVwbGljYXRlcyhzdHJ1Y3QgcmVmICpyZWZfbWFwKQogewotCXN0cnVjdCByZWYgKipwb3NuOwotCXN0cnVjdCByZWYgKm5leHQ7Ci0JZm9yICg7IHJlZl9tYXA7IHJlZl9tYXAgPSByZWZfbWFwLT5uZXh0KSB7CisJc3RydWN0IHN0cmluZ19saXN0IHJlZnMgPSB7IE5VTEwsIDAsIDAsIDAgfTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSA9IE5VTEw7CisJc3RydWN0IHJlZiAqcHJldiA9IE5VTEwsICpuZXh0ID0gTlVMTDsKKwlmb3IgKDsgcmVmX21hcDsgcHJldiA9IHJlZl9tYXAsIHJlZl9tYXAgPSBuZXh0KSB7CisJCW5leHQgPSByZWZfbWFwLT5uZXh0OwogCQlpZiAoIXJlZl9tYXAtPnBlZXJfcmVmKQogCQkJY29udGludWU7Ci0JCXBvc24gPSAmcmVmX21hcC0+bmV4dDsKLQkJd2hpbGUgKCpwb3NuKSB7Ci0JCQlpZiAoKCpwb3NuKS0+cGVlcl9yZWYgJiYKLQkJCSAgICAhc3RyY21wKCgqcG9zbiktPnBlZXJfcmVmLT5uYW1lLAotCQkJCSAgICByZWZfbWFwLT5wZWVyX3JlZi0+bmFtZSkpIHsKLQkJCQlpZiAoc3RyY21wKCgqcG9zbiktPm5hbWUsIHJlZl9tYXAtPm5hbWUpKQotCQkJCQlkaWUoIiVzIHRyYWNrcyBib3RoICVzIGFuZCAlcyIsCi0JCQkJCSAgICByZWZfbWFwLT5wZWVyX3JlZi0+bmFtZSwKLQkJCQkJICAgICgqcG9zbiktPm5hbWUsIHJlZl9tYXAtPm5hbWUpOwotCQkJCW5leHQgPSAoKnBvc24pLT5uZXh0OwotCQkJCWZyZWUoKCpwb3NuKS0+cGVlcl9yZWYpOwotCQkJCWZyZWUoKnBvc24pOwotCQkJCSpwb3NuID0gbmV4dDsKLQkJCX0gZWxzZSB7Ci0JCQkJcG9zbiA9ICYoKnBvc24pLT5uZXh0OwotCQkJfQorCisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9sb29rdXAocmVmX21hcC0+cGVlcl9yZWYtPm5hbWUsICZyZWZzKTsKKwkJaWYgKGl0ZW0pIHsKKwkJCWlmIChzdHJjbXAoKChzdHJ1Y3QgcmVmICopaXRlbS0+dXRpbCktPm5hbWUsCisJCQkJICAgcmVmX21hcC0+bmFtZSkpCisJCQkJZGllKCIlcyB0cmFja3MgYm90aCAlcyBhbmQgJXMiLAorCQkJCSAgICByZWZfbWFwLT5wZWVyX3JlZi0+bmFtZSwKKwkJCQkgICAgKChzdHJ1Y3QgcmVmICopaXRlbS0+dXRpbCktPm5hbWUsCisJCQkJICAgIHJlZl9tYXAtPm5hbWUpOworCQkJcHJldi0+bmV4dCA9IHJlZl9tYXAtPm5leHQ7CisJCQlmcmVlKHJlZl9tYXAtPnBlZXJfcmVmKTsKKwkJCWZyZWUocmVmX21hcCk7CisJCQlyZWZfbWFwID0gcHJldjsgLyogc2tpcCB0aGlzOyB3ZSBmcmVlZCBpdCAqLworCQkJY29udGludWU7CiAJCX0KKworCQlpdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KHJlZl9tYXAtPnBlZXJfcmVmLT5uYW1lLCAmcmVmcyk7CisJCWl0ZW0tPnV0aWwgPSByZWZfbWFwOwogCX0KKwlzdHJpbmdfbGlzdF9jbGVhcigmcmVmcywgMCk7CiB9CiAKIGludCByZW1vdGVfaGFzX3VybChzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIGNvbnN0IGNoYXIgKnVybCkKQEAgLTc2OSw2ICs4MjcsMjMgQEAKIAlyZXR1cm4gcmV0OwogfQogCitjaGFyICphcHBseV9yZWZzcGVjcyhzdHJ1Y3QgcmVmc3BlYyAqcmVmc3BlY3MsIGludCBucl9yZWZzcGVjLAorCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaW50IGk7CisJY2hhciAqcmV0ID0gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcmVmc3BlYzsgaSsrKSB7CisJCXN0cnVjdCByZWZzcGVjICpyZWZzcGVjID0gcmVmc3BlY3MgKyBpOworCQlpZiAocmVmc3BlYy0+cGF0dGVybikgeworCQkJaWYgKG1hdGNoX25hbWVfd2l0aF9wYXR0ZXJuKHJlZnNwZWMtPnNyYywgbmFtZSwKKwkJCQkJCSAgICByZWZzcGVjLT5kc3QsICZyZXQpKQorCQkJCXJldHVybiByZXQ7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChyZWZzcGVjLT5zcmMsIG5hbWUpKQorCQkJcmV0dXJuIHN0cmR1cChyZWZzcGVjLT5kc3QpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKwogaW50IHJlbW90ZV9maW5kX3RyYWNraW5nKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgc3RydWN0IHJlZnNwZWMgKnJlZnNwZWMpCiB7CiAJaW50IGZpbmRfc3JjID0gcmVmc3BlYy0+c3JjID09IE5VTEw7CkBAIC0xMDI0LDcgKzEwOTksNyBAQAogCWNhc2UgMDoKIAkJaWYgKCFtZW1jbXAoZHN0X3ZhbHVlLCAicmVmcy8iLCA1KSkKIAkJCW1hdGNoZWRfZHN0ID0gbWFrZV9saW5rZWRfcmVmKGRzdF92YWx1ZSwgZHN0X3RhaWwpOwotCQllbHNlIGlmKChkc3RfZ3Vlc3MgPSBndWVzc19yZWYoZHN0X3ZhbHVlLCBtYXRjaGVkX3NyYykpKQorCQllbHNlIGlmICgoZHN0X2d1ZXNzID0gZ3Vlc3NfcmVmKGRzdF92YWx1ZSwgbWF0Y2hlZF9zcmMpKSkKIAkJCW1hdGNoZWRfZHN0ID0gbWFrZV9saW5rZWRfcmVmKGRzdF9ndWVzcywgZHN0X3RhaWwpOwogCQllbHNlCiAJCQllcnJvcigidW5hYmxlIHRvIHB1c2ggdG8gdW5xdWFsaWZpZWQgZGVzdGluYXRpb246ICVzXG4iCkBAIC0xMDg1LDI2ICsxMTYwLDM1IEBACiAJCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgc3RydWN0IHJlZiAqKnRhaWxfcmVmKHN0cnVjdCByZWYgKipoZWFkKQoreworCXN0cnVjdCByZWYgKip0YWlsID0gaGVhZDsKKwl3aGlsZSAoKnRhaWwpCisJCXRhaWwgPSAmKCgqdGFpbCktPm5leHQpOworCXJldHVybiB0YWlsOworfQorCiAvKgogICogTm90ZS4gVGhpcyBpcyB1c2VkIG9ubHkgYnkgInB1c2giOyByZWZzcGVjIG1hdGNoaW5nIHJ1bGVzIGZvcgogICogcHVzaCBhbmQgZmV0Y2ggYXJlIHN1YnRseSBkaWZmZXJlbnQsIHNvIGRvIG5vdCB0cnkgdG8gcmV1c2UgaXQKICAqIHdpdGhvdXQgdGhpbmtpbmcuCiAgKi8KLWludCBtYXRjaF9yZWZzKHN0cnVjdCByZWYgKnNyYywgc3RydWN0IHJlZiAqZHN0LCBzdHJ1Y3QgcmVmICoqKmRzdF90YWlsLAoraW50IG1hdGNoX3JlZnMoc3RydWN0IHJlZiAqc3JjLCBzdHJ1Y3QgcmVmICoqZHN0LAogCSAgICAgICBpbnQgbnJfcmVmc3BlYywgY29uc3QgY2hhciAqKnJlZnNwZWMsIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgcmVmc3BlYyAqcnM7CiAJaW50IHNlbmRfYWxsID0gZmxhZ3MgJiBNQVRDSF9SRUZTX0FMTDsKIAlpbnQgc2VuZF9taXJyb3IgPSBmbGFncyAmIE1BVENIX1JFRlNfTUlSUk9SOwogCWludCBlcnJzOwotCXN0YXRpYyBjb25zdCBjaGFyICpkZWZhdWx0X3JlZnNwZWNbXSA9IHsgIjoiLCAwIH07CisJc3RhdGljIGNvbnN0IGNoYXIgKmRlZmF1bHRfcmVmc3BlY1tdID0geyAiOiIsIE5VTEwgfTsKKwlzdHJ1Y3QgcmVmICoqZHN0X3RhaWwgPSB0YWlsX3JlZihkc3QpOwogCiAJaWYgKCFucl9yZWZzcGVjKSB7CiAJCW5yX3JlZnNwZWMgPSAxOwogCQlyZWZzcGVjID0gZGVmYXVsdF9yZWZzcGVjOwogCX0KIAlycyA9IHBhcnNlX3B1c2hfcmVmc3BlYyhucl9yZWZzcGVjLCAoY29uc3QgY2hhciAqKikgcmVmc3BlYyk7Ci0JZXJycyA9IG1hdGNoX2V4cGxpY2l0X3JlZnMoc3JjLCBkc3QsIGRzdF90YWlsLCBycywgbnJfcmVmc3BlYyk7CisJZXJycyA9IG1hdGNoX2V4cGxpY2l0X3JlZnMoc3JjLCAqZHN0LCAmZHN0X3RhaWwsIHJzLCBucl9yZWZzcGVjKTsKIAogCS8qIHBpY2sgdGhlIHJlbWFpbmRlciAqLwogCWZvciAoIDsgc3JjOyBzcmMgPSBzcmMtPm5leHQpIHsKQEAgLTExMzQsNyArMTIxOCw3IEBACiAJCQkJCQkgICAgIGRzdF9zaWRlLCAmZHN0X25hbWUpKQogCQkJCWRpZSgiRGlkbid0IHRoaW5rIGl0IG1hdGNoZXMgYW55IG1vcmUiKTsKIAkJfQotCQlkc3RfcGVlciA9IGZpbmRfcmVmX2J5X25hbWUoZHN0LCBkc3RfbmFtZSk7CisJCWRzdF9wZWVyID0gZmluZF9yZWZfYnlfbmFtZSgqZHN0LCBkc3RfbmFtZSk7CiAJCWlmIChkc3RfcGVlcikgewogCQkJaWYgKGRzdF9wZWVyLT5wZWVyX3JlZikKIAkJCQkvKiBXZSdyZSBhbHJlYWR5IHNlbmRpbmcgc29tZXRoaW5nIHRvIHRoaXMgcmVmLiAqLwpAQCAtMTE1MCw3ICsxMjM0LDcgQEAKIAkJCQlnb3RvIGZyZWVfbmFtZTsKIAogCQkJLyogQ3JlYXRlIGEgbmV3IG9uZSBhbmQgbGluayBpdCAqLwotCQkJZHN0X3BlZXIgPSBtYWtlX2xpbmtlZF9yZWYoZHN0X25hbWUsIGRzdF90YWlsKTsKKwkJCWRzdF9wZWVyID0gbWFrZV9saW5rZWRfcmVmKGRzdF9uYW1lLCAmZHN0X3RhaWwpOwogCQkJaGFzaGNweShkc3RfcGVlci0+bmV3X3NoYTEsIHNyYy0+bmV3X3NoYTEpOwogCQl9CiAJCWRzdF9wZWVyLT5wZWVyX3JlZiA9IGNvcHlfcmVmKHNyYyk7CkBAIC0xMTYzLDYgKzEyNDcsNTYgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBzZXRfcmVmX3N0YXR1c19mb3JfcHVzaChzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywgaW50IHNlbmRfbWlycm9yLAorCWludCBmb3JjZV91cGRhdGUpCit7CisJc3RydWN0IHJlZiAqcmVmOworCisJZm9yIChyZWYgPSByZW1vdGVfcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJaWYgKHJlZi0+cGVlcl9yZWYpCisJCQloYXNoY3B5KHJlZi0+bmV3X3NoYTEsIHJlZi0+cGVlcl9yZWYtPm5ld19zaGExKTsKKwkJZWxzZSBpZiAoIXNlbmRfbWlycm9yKQorCQkJY29udGludWU7CisKKwkJcmVmLT5kZWxldGlvbiA9IGlzX251bGxfc2hhMShyZWYtPm5ld19zaGExKTsKKwkJaWYgKCFyZWYtPmRlbGV0aW9uICYmCisJCQkhaGFzaGNtcChyZWYtPm9sZF9zaGExLCByZWYtPm5ld19zaGExKSkgeworCQkJcmVmLT5zdGF0dXMgPSBSRUZfU1RBVFVTX1VQVE9EQVRFOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBUaGlzIHBhcnQgZGV0ZXJtaW5lcyB3aGF0IGNhbiBvdmVyd3JpdGUgd2hhdC4KKwkJICogVGhlIHJ1bGVzIGFyZToKKwkJICoKKwkJICogKDApIHlvdSBjYW4gYWx3YXlzIHVzZSAtLWZvcmNlIG9yICtBOkIgbm90YXRpb24gdG8KKwkJICogICAgIHNlbGVjdGl2ZWx5IGZvcmNlIGluZGl2aWR1YWwgcmVmIHBhaXJzLgorCQkgKgorCQkgKiAoMSkgaWYgdGhlIG9sZCB0aGluZyBkb2VzIG5vdCBleGlzdCwgaXQgaXMgT0suCisJCSAqCisJCSAqICgyKSBpZiB5b3UgZG8gbm90IGhhdmUgdGhlIG9sZCB0aGluZywgeW91IGFyZSBub3QgYWxsb3dlZAorCQkgKiAgICAgdG8gb3ZlcndyaXRlIGl0OyB5b3Ugd291bGQgbm90IGtub3cgd2hhdCB5b3UgYXJlIGxvc2luZworCQkgKiAgICAgb3RoZXJ3aXNlLgorCQkgKgorCQkgKiAoMykgaWYgYm90aCBuZXcgYW5kIG9sZCBhcmUgY29tbWl0LWlzaCwgYW5kIG5ldyBpcyBhCisJCSAqICAgICBkZXNjZW5kYW50IG9mIG9sZCwgaXQgaXMgT0suCisJCSAqCisJCSAqICg0KSByZWdhcmRsZXNzIG9mIGFsbCBvZiB0aGUgYWJvdmUsIHJlbW92aW5nIDpCIGlzCisJCSAqICAgICBhbHdheXMgYWxsb3dlZC4KKwkJICovCisKKwkJcmVmLT5ub25mYXN0Zm9yd2FyZCA9CisJCQkhcmVmLT5kZWxldGlvbiAmJgorCQkJIWlzX251bGxfc2hhMShyZWYtPm9sZF9zaGExKSAmJgorCQkJKCFoYXNfc2hhMV9maWxlKHJlZi0+b2xkX3NoYTEpCisJCQkgIHx8ICFyZWZfbmV3ZXIocmVmLT5uZXdfc2hhMSwgcmVmLT5vbGRfc2hhMSkpOworCisJCWlmIChyZWYtPm5vbmZhc3Rmb3J3YXJkICYmICFyZWYtPmZvcmNlICYmICFmb3JjZV91cGRhdGUpIHsKKwkJCXJlZi0+c3RhdHVzID0gUkVGX1NUQVRVU19SRUpFQ1RfTk9ORkFTVEZPUldBUkQ7CisJCQljb250aW51ZTsKKwkJfQorCX0KK30KKwogc3RydWN0IGJyYW5jaCAqYnJhbmNoX2dldChjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBicmFuY2ggKnJldDsKQEAgLTEzOTksMTMgKzE1MzMsMTMgQEAKIAliYXNlID0gYnJhbmNoLT5tZXJnZVswXS0+ZHN0OwogCWlmICghcmVzb2x2ZV9yZWYoYmFzZSwgc2hhMSwgMSwgTlVMTCkpCiAJCXJldHVybiAwOwotCXRoZWlycyA9IGxvb2t1cF9jb21taXQoc2hhMSk7CisJdGhlaXJzID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoc2hhMSk7CiAJaWYgKCF0aGVpcnMpCiAJCXJldHVybiAwOwogCiAJaWYgKCFyZXNvbHZlX3JlZihicmFuY2gtPnJlZm5hbWUsIHNoYTEsIDEsIE5VTEwpKQogCQlyZXR1cm4gMDsKLQlvdXJzID0gbG9va3VwX2NvbW1pdChzaGExKTsKKwlvdXJzID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoc2hhMSk7CiAJaWYgKCFvdXJzKQogCQlyZXR1cm4gMDsKIApAQCAtMTU0MiwzICsxNjc2LDQyIEBACiAKIAlyZXR1cm4gbGlzdDsKIH0KKworc3RydWN0IHN0YWxlX2hlYWRzX2luZm8geworCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZl9uYW1lczsKKwlzdHJ1Y3QgcmVmICoqc3RhbGVfcmVmc190YWlsOworfTsKKworc3RhdGljIGludCBnZXRfc3RhbGVfaGVhZHNfY2IoY29uc3QgY2hhciAqcmVmbmFtZSwKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHN0YWxlX2hlYWRzX2luZm8gKmluZm8gPSBjYl9kYXRhOworCXN0cnVjdCByZWZzcGVjIHJlZnNwZWM7CisJbWVtc2V0KCZyZWZzcGVjLCAwLCBzaXplb2YocmVmc3BlYykpOworCXJlZnNwZWMuZHN0ID0gKGNoYXIgKilyZWZuYW1lOworCWlmICghcmVtb3RlX2ZpbmRfdHJhY2tpbmcoaW5mby0+cmVtb3RlLCAmcmVmc3BlYykpIHsKKwkJaWYgKCEoKGZsYWdzICYgUkVGX0lTU1lNUkVGKSB8fAorCQkgICAgc3RyaW5nX2xpc3RfaGFzX3N0cmluZyhpbmZvLT5yZWZfbmFtZXMsIHJlZnNwZWMuc3JjKSkpIHsKKwkJCXN0cnVjdCByZWYgKnJlZiA9IG1ha2VfbGlua2VkX3JlZihyZWZuYW1lLCAmaW5mby0+c3RhbGVfcmVmc190YWlsKTsKKwkJCWhhc2hjcHkocmVmLT5uZXdfc2hhMSwgc2hhMSk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCByZWYgKmdldF9zdGFsZV9oZWFkcyhzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIHN0cnVjdCByZWYgKmZldGNoX21hcCkKK3sKKwlzdHJ1Y3QgcmVmICpyZWYsICpzdGFsZV9yZWZzID0gTlVMTDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcmVmX25hbWVzID0geyBOVUxMLCAwLCAwLCAwIH07CisJc3RydWN0IHN0YWxlX2hlYWRzX2luZm8gaW5mbzsKKwlpbmZvLnJlbW90ZSA9IHJlbW90ZTsKKwlpbmZvLnJlZl9uYW1lcyA9ICZyZWZfbmFtZXM7CisJaW5mby5zdGFsZV9yZWZzX3RhaWwgPSAmc3RhbGVfcmVmczsKKwlmb3IgKHJlZiA9IGZldGNoX21hcDsgcmVmOyByZWYgPSByZWYtPm5leHQpCisJCXN0cmluZ19saXN0X2FwcGVuZChyZWYtPm5hbWUsICZyZWZfbmFtZXMpOworCXNvcnRfc3RyaW5nX2xpc3QoJnJlZl9uYW1lcyk7CisJZm9yX2VhY2hfcmVmKGdldF9zdGFsZV9oZWFkc19jYiwgJmluZm8pOworCXN0cmluZ19saXN0X2NsZWFyKCZyZWZfbmFtZXMsIDApOworCXJldHVybiBzdGFsZV9yZWZzOworfQpkaWZmIC0tZ2l0IGEvcmVtb3RlLmggYi9yZW1vdGUuaAppbmRleCA5OTcwNmE4Li42ZTEzNjQzIDEwMDY0NAotLS0gYS9yZW1vdGUuaAorKysgYi9yZW1vdGUuaApAQCAtMTEsMTAgKzExLDE2IEBACiAJY29uc3QgY2hhciAqbmFtZTsKIAlpbnQgb3JpZ2luOwogCisJY29uc3QgY2hhciAqZm9yZWlnbl92Y3M7CisKIAljb25zdCBjaGFyICoqdXJsOwogCWludCB1cmxfbnI7CiAJaW50IHVybF9hbGxvYzsKIAorCWNvbnN0IGNoYXIgKipwdXNodXJsOworCWludCBwdXNodXJsX25yOworCWludCBwdXNodXJsX2FsbG9jOworCiAJY29uc3QgY2hhciAqKnB1c2hfcmVmc3BlYzsKIAlzdHJ1Y3QgcmVmc3BlYyAqcHVzaDsKIAlpbnQgcHVzaF9yZWZzcGVjX25yOwpAQCAtODUsOCArOTEsMTUgQEAKIGludCB2YWxpZF9mZXRjaF9yZWZzcGVjKGNvbnN0IGNoYXIgKnJlZnNwZWMpOwogc3RydWN0IHJlZnNwZWMgKnBhcnNlX2ZldGNoX3JlZnNwZWMoaW50IG5yX3JlZnNwZWMsIGNvbnN0IGNoYXIgKipyZWZzcGVjKTsKIAotaW50IG1hdGNoX3JlZnMoc3RydWN0IHJlZiAqc3JjLCBzdHJ1Y3QgcmVmICpkc3QsIHN0cnVjdCByZWYgKioqZHN0X3RhaWwsCit2b2lkIGZyZWVfcmVmc3BlYyhpbnQgbnJfcmVmc3BlYywgc3RydWN0IHJlZnNwZWMgKnJlZnNwZWMpOworCitjaGFyICphcHBseV9yZWZzcGVjcyhzdHJ1Y3QgcmVmc3BlYyAqcmVmc3BlY3MsIGludCBucl9yZWZzcGVjLAorCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUpOworCitpbnQgbWF0Y2hfcmVmcyhzdHJ1Y3QgcmVmICpzcmMsIHN0cnVjdCByZWYgKipkc3QsCiAJICAgICAgIGludCBucl9yZWZzcGVjLCBjb25zdCBjaGFyICoqcmVmc3BlYywgaW50IGFsbCk7Cit2b2lkIHNldF9yZWZfc3RhdHVzX2Zvcl9wdXNoKHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLCBpbnQgc2VuZF9taXJyb3IsCisJaW50IGZvcmNlX3VwZGF0ZSk7CiAKIC8qCiAgKiBHaXZlbiBhIGxpc3Qgb2YgdGhlIHJlbW90ZSByZWZzIGFuZCB0aGUgc3BlY2lmaWNhdGlvbiBvZiB0aGluZ3MgdG8KQEAgLTE1MCw0ICsxNjMsNyBAQAogCQkJICAgICAgY29uc3Qgc3RydWN0IHJlZiAqcmVmcywKIAkJCSAgICAgIGludCBhbGwpOwogCisvKiBSZXR1cm4gcmVmcyB3aGljaCBubyBsb25nZXIgZXhpc3Qgb24gcmVtb3RlICovCitzdHJ1Y3QgcmVmICpnZXRfc3RhbGVfaGVhZHMoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBzdHJ1Y3QgcmVmICpmZXRjaF9tYXApOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3JlcGxhY2Vfb2JqZWN0LmMgYi9yZXBsYWNlX29iamVjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNTk2MDQKLS0tIC9kZXYvbnVsbAorKysgYi9yZXBsYWNlX29iamVjdC5jCkBAIC0wLDAgKzEsMTE0IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJzaGExLWxvb2t1cC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKworc3RhdGljIHN0cnVjdCByZXBsYWNlX29iamVjdCB7CisJdW5zaWduZWQgY2hhciBzaGExWzJdWzIwXTsKK30gKipyZXBsYWNlX29iamVjdDsKKworc3RhdGljIGludCByZXBsYWNlX29iamVjdF9hbGxvYywgcmVwbGFjZV9vYmplY3RfbnI7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpyZXBsYWNlX3NoYTFfYWNjZXNzKHNpemVfdCBpbmRleCwgdm9pZCAqdGFibGUpCit7CisJc3RydWN0IHJlcGxhY2Vfb2JqZWN0ICoqcmVwbGFjZSA9IHRhYmxlOworCXJldHVybiByZXBsYWNlW2luZGV4XS0+c2hhMVswXTsKK30KKworc3RhdGljIGludCByZXBsYWNlX29iamVjdF9wb3MoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlyZXR1cm4gc2hhMV9wb3Moc2hhMSwgcmVwbGFjZV9vYmplY3QsIHJlcGxhY2Vfb2JqZWN0X25yLAorCQkJcmVwbGFjZV9zaGExX2FjY2Vzcyk7Cit9CisKK3N0YXRpYyBpbnQgcmVnaXN0ZXJfcmVwbGFjZV9vYmplY3Qoc3RydWN0IHJlcGxhY2Vfb2JqZWN0ICpyZXBsYWNlLAorCQkJCSAgIGludCBpZ25vcmVfZHVwcykKK3sKKwlpbnQgcG9zID0gcmVwbGFjZV9vYmplY3RfcG9zKHJlcGxhY2UtPnNoYTFbMF0pOworCisJaWYgKDAgPD0gcG9zKSB7CisJCWlmIChpZ25vcmVfZHVwcykKKwkJCWZyZWUocmVwbGFjZSk7CisJCWVsc2UgeworCQkJZnJlZShyZXBsYWNlX29iamVjdFtwb3NdKTsKKwkJCXJlcGxhY2Vfb2JqZWN0W3Bvc10gPSByZXBsYWNlOworCQl9CisJCXJldHVybiAxOworCX0KKwlwb3MgPSAtcG9zIC0gMTsKKwlpZiAocmVwbGFjZV9vYmplY3RfYWxsb2MgPD0gKytyZXBsYWNlX29iamVjdF9ucikgeworCQlyZXBsYWNlX29iamVjdF9hbGxvYyA9IGFsbG9jX25yKHJlcGxhY2Vfb2JqZWN0X2FsbG9jKTsKKwkJcmVwbGFjZV9vYmplY3QgPSB4cmVhbGxvYyhyZXBsYWNlX29iamVjdCwKKwkJCQkJICBzaXplb2YoKnJlcGxhY2Vfb2JqZWN0KSAqCisJCQkJCSAgcmVwbGFjZV9vYmplY3RfYWxsb2MpOworCX0KKwlpZiAocG9zIDwgcmVwbGFjZV9vYmplY3RfbnIpCisJCW1lbW1vdmUocmVwbGFjZV9vYmplY3QgKyBwb3MgKyAxLAorCQkJcmVwbGFjZV9vYmplY3QgKyBwb3MsCisJCQkocmVwbGFjZV9vYmplY3RfbnIgLSBwb3MgLSAxKSAqCisJCQlzaXplb2YoKnJlcGxhY2Vfb2JqZWN0KSk7CisJcmVwbGFjZV9vYmplY3RbcG9zXSA9IHJlcGxhY2U7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVnaXN0ZXJfcmVwbGFjZV9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCWludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCS8qIEdldCBzaGExIGZyb20gcmVmbmFtZSAqLworCWNvbnN0IGNoYXIgKnNsYXNoID0gc3RycmNocihyZWZuYW1lLCAnLycpOworCWNvbnN0IGNoYXIgKmhhc2ggPSBzbGFzaCA/IHNsYXNoICsgMSA6IHJlZm5hbWU7CisJc3RydWN0IHJlcGxhY2Vfb2JqZWN0ICpyZXBsX29iaiA9IHhtYWxsb2Moc2l6ZW9mKCpyZXBsX29iaikpOworCisJaWYgKHN0cmxlbihoYXNoKSAhPSA0MCB8fCBnZXRfc2hhMV9oZXgoaGFzaCwgcmVwbF9vYmotPnNoYTFbMF0pKSB7CisJCWZyZWUocmVwbF9vYmopOworCQl3YXJuaW5nKCJiYWQgcmVwbGFjZSByZWYgbmFtZTogJXMiLCByZWZuYW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogQ29weSBzaGExIGZyb20gdGhlIHJlYWQgcmVmICovCisJaGFzaGNweShyZXBsX29iai0+c2hhMVsxXSwgc2hhMSk7CisKKwkvKiBSZWdpc3RlciBuZXcgb2JqZWN0ICovCisJaWYgKHJlZ2lzdGVyX3JlcGxhY2Vfb2JqZWN0KHJlcGxfb2JqLCAxKSkKKwkJZGllKCJkdXBsaWNhdGUgcmVwbGFjZSByZWY6ICVzIiwgcmVmbmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9yZXBsYWNlX29iamVjdCh2b2lkKQoreworCXN0YXRpYyBpbnQgcmVwbGFjZV9vYmplY3RfcHJlcGFyZWQ7CisKKwlpZiAocmVwbGFjZV9vYmplY3RfcHJlcGFyZWQpCisJCXJldHVybjsKKworCWZvcl9lYWNoX3JlcGxhY2VfcmVmKHJlZ2lzdGVyX3JlcGxhY2VfcmVmLCBOVUxMKTsKKwlyZXBsYWNlX29iamVjdF9wcmVwYXJlZCA9IDE7Cit9CisKKy8qIFdlIGFsbG93ICJyZWN1cnNpdmUiIHJlcGxhY2VtZW50LiBPbmx5IHdpdGhpbiByZWFzb24sIHRob3VnaCAqLworI2RlZmluZSBNQVhSRVBMQUNFREVQVEggNQorCitjb25zdCB1bnNpZ25lZCBjaGFyICpsb29rdXBfcmVwbGFjZV9vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlpbnQgcG9zLCBkZXB0aCA9IE1BWFJFUExBQ0VERVBUSDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpjdXIgPSBzaGExOworCisJaWYgKCFyZWFkX3JlcGxhY2VfcmVmcykKKwkJcmV0dXJuIHNoYTE7CisKKwlwcmVwYXJlX3JlcGxhY2Vfb2JqZWN0KCk7CisKKwkvKiBUcnkgdG8gcmVjdXJzaXZlbHkgcmVwbGFjZSB0aGUgb2JqZWN0ICovCisJZG8geworCQlpZiAoLS1kZXB0aCA8IDApCisJCQlkaWUoInJlcGxhY2UgZGVwdGggdG9vIGhpZ2ggZm9yIG9iamVjdCAlcyIsCisJCQkgICAgc2hhMV90b19oZXgoc2hhMSkpOworCisJCXBvcyA9IHJlcGxhY2Vfb2JqZWN0X3BvcyhjdXIpOworCQlpZiAoMCA8PSBwb3MpCisJCQljdXIgPSByZXBsYWNlX29iamVjdFtwb3NdLT5zaGExWzFdOworCX0gd2hpbGUgKDAgPD0gcG9zKTsKKworCXJldHVybiBjdXI7Cit9CmRpZmYgLS1naXQgYS9yZXJlcmUuYyBiL3JlcmVyZS5jCmluZGV4IDg3MzYwZGMuLmE1OWY3NGYgMTAwNjQ0Ci0tLSBhL3JlcmVyZS5jCisrKyBiL3JlcmVyZS5jCkBAIC0xLDggKzEsMTEgQEAKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCiAjaW5jbHVkZSAicmVyZXJlLmgiCi0jaW5jbHVkZSAieGRpZmYveGRpZmYuaCIKICNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJyZXNvbHZlLXVuZG8uaCIKKyNpbmNsdWRlICJsbC1tZXJnZS5oIgorI2luY2x1ZGUgImF0dHIuaCIKIAogLyogaWYgcmVyZXJlX2VuYWJsZWQgPT0gLTEsIGZhbGwgYmFjayB0byBkZXRlY3Rpb24gb2YgLmdpdC9yci1jYWNoZSAqLwogc3RhdGljIGludCByZXJlcmVfZW5hYmxlZCA9IC0xOwpAQCAtNjEsNyArNjQsNyBAQAogCQlwYXRoID0gcnItPml0ZW1zW2ldLnN0cmluZzsKIAkJbGVuZ3RoID0gc3RybGVuKHBhdGgpICsgMTsKIAkJaWYgKHdyaXRlX2luX2Z1bGwob3V0X2ZkLCByci0+aXRlbXNbaV0udXRpbCwgNDApICE9IDQwIHx8Ci0JCSAgICB3cml0ZV9pbl9mdWxsKG91dF9mZCwgIlx0IiwgMSkgIT0gMSB8fAorCQkgICAgd3JpdGVfc3RyX2luX2Z1bGwob3V0X2ZkLCAiXHQiKSAhPSAxIHx8CiAJCSAgICB3cml0ZV9pbl9mdWxsKG91dF9mZCwgcGF0aCwgbGVuZ3RoKSAhPSBsZW5ndGgpCiAJCQlkaWUoInVuYWJsZSB0byB3cml0ZSByZXJlcmUgcmVjb3JkIik7CiAJfQpAQCAtODMsNjEgKzg2LDEwNiBAQAogCWZlcnJfd3JpdGUocywgc3RybGVuKHMpLCBmcCwgZXJyKTsKIH0KIAotc3RhdGljIGludCBoYW5kbGVfZmlsZShjb25zdCBjaGFyICpwYXRoLAotCSB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpvdXRwdXQpCitzdHJ1Y3QgcmVyZXJlX2lvIHsKKwlpbnQgKCpnZXRsaW5lKShzdHJ1Y3Qgc3RyYnVmICosIHN0cnVjdCByZXJlcmVfaW8gKik7CisJRklMRSAqb3V0cHV0OworCWludCB3cmVycm9yOworCS8qIHNvbWUgbW9yZSBzdHVmZiAqLworfTsKKworc3RhdGljIHZvaWQgcmVyZXJlX2lvX3B1dHN0cihjb25zdCBjaGFyICpzdHIsIHN0cnVjdCByZXJlcmVfaW8gKmlvKQoreworCWlmIChpby0+b3V0cHV0KQorCQlmZXJyX3B1dHMoc3RyLCBpby0+b3V0cHV0LCAmaW8tPndyZXJyb3IpOworfQorCitzdGF0aWMgdm9pZCByZXJlcmVfaW9fcHV0Y29uZmxpY3QoaW50IGNoLCBpbnQgc2l6ZSwgc3RydWN0IHJlcmVyZV9pbyAqaW8pCit7CisJY2hhciBidWZbNjRdOworCisJd2hpbGUgKHNpemUpIHsKKwkJaWYgKHNpemUgPCBzaXplb2YoYnVmKSAtIDIpIHsKKwkJCW1lbXNldChidWYsIGNoLCBzaXplKTsKKwkJCWJ1ZltzaXplXSA9ICdcbic7CisJCQlidWZbc2l6ZSArIDFdID0gJ1wwJzsKKwkJCXNpemUgPSAwOworCQl9IGVsc2UgeworCQkJaW50IHN6ID0gc2l6ZW9mKGJ1ZikgLSAxOworCQkJaWYgKHNpemUgPD0gc3opCisJCQkJc3ogLT0gKHN6IC0gc2l6ZSkgKyAxOworCQkJbWVtc2V0KGJ1ZiwgY2gsIHN6KTsKKwkJCWJ1Zltzel0gPSAnXDAnOworCQkJc2l6ZSAtPSBzejsKKwkJfQorCQlyZXJlcmVfaW9fcHV0c3RyKGJ1ZiwgaW8pOworCX0KK30KKworc3RhdGljIHZvaWQgcmVyZXJlX2lvX3B1dG1lbShjb25zdCBjaGFyICptZW0sIHNpemVfdCBzeiwgc3RydWN0IHJlcmVyZV9pbyAqaW8pCit7CisJaWYgKGlvLT5vdXRwdXQpCisJCWZlcnJfd3JpdGUobWVtLCBzeiwgaW8tPm91dHB1dCwgJmlvLT53cmVycm9yKTsKK30KKworc3RydWN0IHJlcmVyZV9pb19maWxlIHsKKwlzdHJ1Y3QgcmVyZXJlX2lvIGlvOworCUZJTEUgKmlucHV0OworfTsKKworc3RhdGljIGludCByZXJlcmVfZmlsZV9nZXRsaW5lKHN0cnVjdCBzdHJidWYgKnNiLCBzdHJ1Y3QgcmVyZXJlX2lvICppb18pCit7CisJc3RydWN0IHJlcmVyZV9pb19maWxlICppbyA9IChzdHJ1Y3QgcmVyZXJlX2lvX2ZpbGUgKilpb187CisJcmV0dXJuIHN0cmJ1Zl9nZXR3aG9sZWxpbmUoc2IsIGlvLT5pbnB1dCwgJ1xuJyk7Cit9CisKK3N0YXRpYyBpbnQgaXNfY21hcmtlcihjaGFyICpidWYsIGludCBtYXJrZXJfY2hhciwgaW50IG1hcmtlcl9zaXplLCBpbnQgd2FudF9zcCkKK3sKKwl3aGlsZSAobWFya2VyX3NpemUtLSkKKwkJaWYgKCpidWYrKyAhPSBtYXJrZXJfY2hhcikKKwkJCXJldHVybiAwOworCWlmICh3YW50X3NwICYmICpidWYgIT0gJyAnKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gaXNzcGFjZSgqYnVmKTsKK30KKworc3RhdGljIGludCBoYW5kbGVfcGF0aCh1bnNpZ25lZCBjaGFyICpzaGExLCBzdHJ1Y3QgcmVyZXJlX2lvICppbywgaW50IG1hcmtlcl9zaXplKQogewogCWdpdF9TSEFfQ1RYIGN0eDsKLQljaGFyIGJ1ZlsxMDI0XTsKIAlpbnQgaHVua19ubyA9IDA7CiAJZW51bSB7CiAJCVJSX0NPTlRFWFQgPSAwLCBSUl9TSURFXzEsIFJSX1NJREVfMiwgUlJfT1JJR0lOQUwsCiAJfSBodW5rID0gUlJfQ09OVEVYVDsKIAlzdHJ1Y3Qgc3RyYnVmIG9uZSA9IFNUUkJVRl9JTklULCB0d28gPSBTVFJCVUZfSU5JVDsKLQlGSUxFICpmID0gZm9wZW4ocGF0aCwgInIiKTsKLQlGSUxFICpvdXQgPSBOVUxMOwotCWludCB3cmVycm9yID0gMDsKLQotCWlmICghZikKLQkJcmV0dXJuIGVycm9yKCJDb3VsZCBub3Qgb3BlbiAlcyIsIHBhdGgpOwotCi0JaWYgKG91dHB1dCkgewotCQlvdXQgPSBmb3BlbihvdXRwdXQsICJ3Iik7Ci0JCWlmICghb3V0KSB7Ci0JCQlmY2xvc2UoZik7Ci0JCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCB3cml0ZSAlcyIsIG91dHB1dCk7Ci0JCX0KLQl9CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKIAogCWlmIChzaGExKQogCQlnaXRfU0hBMV9Jbml0KCZjdHgpOwogCi0Jd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGYpKSB7Ci0JCWlmICghcHJlZml4Y21wKGJ1ZiwgIjw8PDw8PDwgIikpIHsKKwl3aGlsZSAoIWlvLT5nZXRsaW5lKCZidWYsIGlvKSkgeworCQlpZiAoaXNfY21hcmtlcihidWYuYnVmLCAnPCcsIG1hcmtlcl9zaXplLCAxKSkgewogCQkJaWYgKGh1bmsgIT0gUlJfQ09OVEVYVCkKIAkJCQlnb3RvIGJhZDsKIAkJCWh1bmsgPSBSUl9TSURFXzE7Ci0JCX0gZWxzZSBpZiAoIXByZWZpeGNtcChidWYsICJ8fHx8fHx8IikgJiYgaXNzcGFjZShidWZbN10pKSB7CisJCX0gZWxzZSBpZiAoaXNfY21hcmtlcihidWYuYnVmLCAnfCcsIG1hcmtlcl9zaXplLCAwKSkgewogCQkJaWYgKGh1bmsgIT0gUlJfU0lERV8xKQogCQkJCWdvdG8gYmFkOwogCQkJaHVuayA9IFJSX09SSUdJTkFMOwotCQl9IGVsc2UgaWYgKCFwcmVmaXhjbXAoYnVmLCAiPT09PT09PSIpICYmIGlzc3BhY2UoYnVmWzddKSkgeworCQl9IGVsc2UgaWYgKGlzX2NtYXJrZXIoYnVmLmJ1ZiwgJz0nLCBtYXJrZXJfc2l6ZSwgMCkpIHsKIAkJCWlmIChodW5rICE9IFJSX1NJREVfMSAmJiBodW5rICE9IFJSX09SSUdJTkFMKQogCQkJCWdvdG8gYmFkOwogCQkJaHVuayA9IFJSX1NJREVfMjsKLQkJfSBlbHNlIGlmICghcHJlZml4Y21wKGJ1ZiwgIj4+Pj4+Pj4gIikpIHsKKwkJfSBlbHNlIGlmIChpc19jbWFya2VyKGJ1Zi5idWYsICc+JywgbWFya2VyX3NpemUsIDEpKSB7CiAJCQlpZiAoaHVuayAhPSBSUl9TSURFXzIpCiAJCQkJZ290byBiYWQ7CiAJCQlpZiAoc3RyYnVmX2NtcCgmb25lLCAmdHdvKSA+IDApCiAJCQkJc3RyYnVmX3N3YXAoJm9uZSwgJnR3byk7CiAJCQlodW5rX25vKys7CiAJCQlodW5rID0gUlJfQ09OVEVYVDsKLQkJCWlmIChvdXQpIHsKLQkJCQlmZXJyX3B1dHMoIjw8PDw8PDxcbiIsIG91dCwgJndyZXJyb3IpOwotCQkJCWZlcnJfd3JpdGUob25lLmJ1Ziwgb25lLmxlbiwgb3V0LCAmd3JlcnJvcik7Ci0JCQkJZmVycl9wdXRzKCI9PT09PT09XG4iLCBvdXQsICZ3cmVycm9yKTsKLQkJCQlmZXJyX3dyaXRlKHR3by5idWYsIHR3by5sZW4sIG91dCwgJndyZXJyb3IpOwotCQkJCWZlcnJfcHV0cygiPj4+Pj4+PlxuIiwgb3V0LCAmd3JlcnJvcik7Ci0JCQl9CisJCQlyZXJlcmVfaW9fcHV0Y29uZmxpY3QoJzwnLCBtYXJrZXJfc2l6ZSwgaW8pOworCQkJcmVyZXJlX2lvX3B1dG1lbShvbmUuYnVmLCBvbmUubGVuLCBpbyk7CisJCQlyZXJlcmVfaW9fcHV0Y29uZmxpY3QoJz0nLCBtYXJrZXJfc2l6ZSwgaW8pOworCQkJcmVyZXJlX2lvX3B1dG1lbSh0d28uYnVmLCB0d28ubGVuLCBpbyk7CisJCQlyZXJlcmVfaW9fcHV0Y29uZmxpY3QoJz4nLCBtYXJrZXJfc2l6ZSwgaW8pOwogCQkJaWYgKHNoYTEpIHsKIAkJCQlnaXRfU0hBMV9VcGRhdGUoJmN0eCwgb25lLmJ1ZiA/IG9uZS5idWYgOiAiIiwKIAkJCQkJICAgIG9uZS5sZW4gKyAxKTsKQEAgLTE0NywxMyArMTk1LDEzIEBACiAJCQlzdHJidWZfcmVzZXQoJm9uZSk7CiAJCQlzdHJidWZfcmVzZXQoJnR3byk7CiAJCX0gZWxzZSBpZiAoaHVuayA9PSBSUl9TSURFXzEpCi0JCQlzdHJidWZfYWRkc3RyKCZvbmUsIGJ1Zik7CisJCQlzdHJidWZfYWRkc3RyKCZvbmUsIGJ1Zi5idWYpOwogCQllbHNlIGlmIChodW5rID09IFJSX09SSUdJTkFMKQogCQkJOyAvKiBkaXNjYXJkICovCiAJCWVsc2UgaWYgKGh1bmsgPT0gUlJfU0lERV8yKQotCQkJc3RyYnVmX2FkZHN0cigmdHdvLCBidWYpOwotCQllbHNlIGlmIChvdXQpCi0JCQlmZXJyX3B1dHMoYnVmLCBvdXQsICZ3cmVycm9yKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJnR3bywgYnVmLmJ1Zik7CisJCWVsc2UKKwkJCXJlcmVyZV9pb19wdXRzdHIoYnVmLmJ1ZiwgaW8pOwogCQljb250aW51ZTsKIAliYWQ6CiAJCWh1bmsgPSA5OTsgLyogZm9yY2UgZXJyb3IgZXhpdCAqLwpAQCAtMTYxLDI2ICsyMDksMTM4IEBACiAJfQogCXN0cmJ1Zl9yZWxlYXNlKCZvbmUpOwogCXN0cmJ1Zl9yZWxlYXNlKCZ0d28pOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOwogCi0JZmNsb3NlKGYpOwotCWlmICh3cmVycm9yKQotCQllcnJvcigiVGhlcmUgd2VyZSBlcnJvcnMgd2hpbGUgd3JpdGluZyAlcyAoJXMpIiwKLQkJICAgICAgcGF0aCwgc3RyZXJyb3Iod3JlcnJvcikpOwotCWlmIChvdXQgJiYgZmNsb3NlKG91dCkpCi0JCXdyZXJyb3IgPSBlcnJvcigiRmFpbGVkIHRvIGZsdXNoICVzOiAlcyIsCi0JCQkJcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKIAlpZiAoc2hhMSkKIAkJZ2l0X1NIQTFfRmluYWwoc2hhMSwgJmN0eCk7Ci0JaWYgKGh1bmsgIT0gUlJfQ09OVEVYVCkgeworCWlmIChodW5rICE9IFJSX0NPTlRFWFQpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gaHVua19ubzsKK30KKworc3RhdGljIGludCBoYW5kbGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpvdXRwdXQpCit7CisJaW50IGh1bmtfbm8gPSAwOworCXN0cnVjdCByZXJlcmVfaW9fZmlsZSBpbzsKKwlpbnQgbWFya2VyX3NpemUgPSBsbF9tZXJnZV9tYXJrZXJfc2l6ZShwYXRoKTsKKworCW1lbXNldCgmaW8sIDAsIHNpemVvZihpbykpOworCWlvLmlvLmdldGxpbmUgPSByZXJlcmVfZmlsZV9nZXRsaW5lOworCWlvLmlucHV0ID0gZm9wZW4ocGF0aCwgInIiKTsKKwlpby5pby53cmVycm9yID0gMDsKKwlpZiAoIWlvLmlucHV0KQorCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCBvcGVuICVzIiwgcGF0aCk7CisKKwlpZiAob3V0cHV0KSB7CisJCWlvLmlvLm91dHB1dCA9IGZvcGVuKG91dHB1dCwgInciKTsKKwkJaWYgKCFpby5pby5vdXRwdXQpIHsKKwkJCWZjbG9zZShpby5pbnB1dCk7CisJCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCB3cml0ZSAlcyIsIG91dHB1dCk7CisJCX0KKwl9CisKKwlodW5rX25vID0gaGFuZGxlX3BhdGgoc2hhMSwgKHN0cnVjdCByZXJlcmVfaW8gKikmaW8sIG1hcmtlcl9zaXplKTsKKworCWZjbG9zZShpby5pbnB1dCk7CisJaWYgKGlvLmlvLndyZXJyb3IpCisJCWVycm9yKCJUaGVyZSB3ZXJlIGVycm9ycyB3aGlsZSB3cml0aW5nICVzICglcykiLAorCQkgICAgICBwYXRoLCBzdHJlcnJvcihpby5pby53cmVycm9yKSk7CisJaWYgKGlvLmlvLm91dHB1dCAmJiBmY2xvc2UoaW8uaW8ub3V0cHV0KSkKKwkJaW8uaW8ud3JlcnJvciA9IGVycm9yKCJGYWlsZWQgdG8gZmx1c2ggJXM6ICVzIiwKKwkJCQkgICAgICBwYXRoLCBzdHJlcnJvcihlcnJubykpOworCisJaWYgKGh1bmtfbm8gPCAwKSB7CiAJCWlmIChvdXRwdXQpCiAJCQl1bmxpbmtfb3Jfd2FybihvdXRwdXQpOwogCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCBwYXJzZSBjb25mbGljdCBodW5rcyBpbiAlcyIsIHBhdGgpOwogCX0KLQlpZiAod3JlcnJvcikKKwlpZiAoaW8uaW8ud3JlcnJvcikKIAkJcmV0dXJuIC0xOwogCXJldHVybiBodW5rX25vOwogfQogCitzdHJ1Y3QgcmVyZXJlX2lvX21lbSB7CisJc3RydWN0IHJlcmVyZV9pbyBpbzsKKwlzdHJ1Y3Qgc3RyYnVmIGlucHV0OworfTsKKworc3RhdGljIGludCByZXJlcmVfbWVtX2dldGxpbmUoc3RydWN0IHN0cmJ1ZiAqc2IsIHN0cnVjdCByZXJlcmVfaW8gKmlvXykKK3sKKwlzdHJ1Y3QgcmVyZXJlX2lvX21lbSAqaW8gPSAoc3RydWN0IHJlcmVyZV9pb19tZW0gKilpb187CisJY2hhciAqZXA7CisJc2l6ZV90IGxlbjsKKworCXN0cmJ1Zl9yZWxlYXNlKHNiKTsKKwlpZiAoIWlvLT5pbnB1dC5sZW4pCisJCXJldHVybiAtMTsKKwllcCA9IHN0cmNocm51bChpby0+aW5wdXQuYnVmLCAnXG4nKTsKKwlpZiAoKmVwID09ICdcbicpCisJCWVwKys7CisJbGVuID0gZXAgLSBpby0+aW5wdXQuYnVmOworCXN0cmJ1Zl9hZGQoc2IsIGlvLT5pbnB1dC5idWYsIGxlbik7CisJc3RyYnVmX3JlbW92ZSgmaW8tPmlucHV0LCAwLCBsZW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9jYWNoZShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpvdXRwdXQpCit7CisJbW1maWxlX3QgbW1maWxlWzNdOworCW1tYnVmZmVyX3QgcmVzdWx0ID0ge05VTEwsIDB9OworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJaW50IHBvcywgbGVuLCBpLCBodW5rX25vOworCXN0cnVjdCByZXJlcmVfaW9fbWVtIGlvOworCWludCBtYXJrZXJfc2l6ZSA9IGxsX21lcmdlX21hcmtlcl9zaXplKHBhdGgpOworCisJLyoKKwkgKiBSZXByb2R1Y2UgdGhlIGNvbmZsaWN0ZWQgbWVyZ2UgaW4tY29yZQorCSAqLworCWxlbiA9IHN0cmxlbihwYXRoKTsKKwlwb3MgPSBjYWNoZV9uYW1lX3BvcyhwYXRoLCBsZW4pOworCWlmICgwIDw9IHBvcykKKwkJcmV0dXJuIC0xOworCXBvcyA9IC1wb3MgLSAxOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCQltbWZpbGVbaV0uc2l6ZSA9IDA7CisJCW1tZmlsZVtpXS5wdHIgPSBOVUxMOworCQlpZiAoYWN0aXZlX25yIDw9IHBvcykKKwkJCWJyZWFrOworCQljZSA9IGFjdGl2ZV9jYWNoZVtwb3MrK107CisJCWlmIChjZV9uYW1lbGVuKGNlKSAhPSBsZW4gfHwgbWVtY21wKGNlLT5uYW1lLCBwYXRoLCBsZW4pCisJCSAgICB8fCBjZV9zdGFnZShjZSkgIT0gaSArIDEpCisJCQlicmVhazsKKwkJbW1maWxlW2ldLnB0ciA9IHJlYWRfc2hhMV9maWxlKGNlLT5zaGExLCAmdHlwZSwgJnNpemUpOworCQltbWZpbGVbaV0uc2l6ZSA9IHNpemU7CisJfQorCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJaWYgKCFtbWZpbGVbaV0ucHRyICYmICFtbWZpbGVbaV0uc2l6ZSkKKwkJCW1tZmlsZVtpXS5wdHIgPSB4c3RyZHVwKCIiKTsKKwl9CisJbGxfbWVyZ2UoJnJlc3VsdCwgcGF0aCwgJm1tZmlsZVswXSwKKwkJICZtbWZpbGVbMV0sICJvdXJzIiwKKwkJICZtbWZpbGVbMl0sICJ0aGVpcnMiLCAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQlmcmVlKG1tZmlsZVtpXS5wdHIpOworCisJbWVtc2V0KCZpbywgMCwgc2l6ZW9mKGlvKSk7CisJaW8uaW8uZ2V0bGluZSA9IHJlcmVyZV9tZW1fZ2V0bGluZTsKKwlpZiAob3V0cHV0KQorCQlpby5pby5vdXRwdXQgPSBmb3BlbihvdXRwdXQsICJ3Iik7CisJZWxzZQorCQlpby5pby5vdXRwdXQgPSBOVUxMOworCXN0cmJ1Zl9pbml0KCZpby5pbnB1dCwgMCk7CisJc3RyYnVmX2F0dGFjaCgmaW8uaW5wdXQsIHJlc3VsdC5wdHIsIHJlc3VsdC5zaXplLCByZXN1bHQuc2l6ZSk7CisKKwlodW5rX25vID0gaGFuZGxlX3BhdGgoc2hhMSwgKHN0cnVjdCByZXJlcmVfaW8gKikmaW8sIG1hcmtlcl9zaXplKTsKKwlzdHJidWZfcmVsZWFzZSgmaW8uaW5wdXQpOworCWlmIChpby5pby5vdXRwdXQpCisJCWZjbG9zZShpby5pby5vdXRwdXQpOworCXJldHVybiBodW5rX25vOworfQorCiBzdGF0aWMgaW50IGZpbmRfY29uZmxpY3Qoc3RydWN0IHN0cmluZ19saXN0ICpjb25mbGljdCkKIHsKIAlpbnQgaTsKQEAgLTIwNCwxOSArMzY0LDE5IEBACiBzdGF0aWMgaW50IG1lcmdlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhdGgpCiB7CiAJaW50IHJldDsKLQltbWZpbGVfdCBjdXIsIGJhc2UsIG90aGVyOworCW1tZmlsZV90IGN1ciA9IHtOVUxMLCAwfSwgYmFzZSA9IHtOVUxMLCAwfSwgb3RoZXIgPSB7TlVMTCwgMH07CiAJbW1idWZmZXJfdCByZXN1bHQgPSB7TlVMTCwgMH07Ci0JeHBwYXJhbV90IHhwcCA9IHtYREZfTkVFRF9NSU5JTUFMfTsKIAogCWlmIChoYW5kbGVfZmlsZShwYXRoLCBOVUxMLCByZXJlcmVfcGF0aChuYW1lLCAidGhpc2ltYWdlIikpIDwgMCkKIAkJcmV0dXJuIDE7CiAKIAlpZiAocmVhZF9tbWZpbGUoJmN1ciwgcmVyZXJlX3BhdGgobmFtZSwgInRoaXNpbWFnZSIpKSB8fAogCQkJcmVhZF9tbWZpbGUoJmJhc2UsIHJlcmVyZV9wYXRoKG5hbWUsICJwcmVpbWFnZSIpKSB8fAotCQkJcmVhZF9tbWZpbGUoJm90aGVyLCByZXJlcmVfcGF0aChuYW1lLCAicG9zdGltYWdlIikpKQotCQlyZXR1cm4gMTsKLQlyZXQgPSB4ZGxfbWVyZ2UoJmJhc2UsICZjdXIsICIiLCAmb3RoZXIsICIiLAotCQkJJnhwcCwgWERMX01FUkdFX1pFQUxPVVMsICZyZXN1bHQpOworCQkJcmVhZF9tbWZpbGUoJm90aGVyLCByZXJlcmVfcGF0aChuYW1lLCAicG9zdGltYWdlIikpKSB7CisJCXJldCA9IDE7CisJCWdvdG8gb3V0OworCX0KKwlyZXQgPSBsbF9tZXJnZSgmcmVzdWx0LCBwYXRoLCAmYmFzZSwgJmN1ciwgIiIsICZvdGhlciwgIiIsIDApOwogCWlmICghcmV0KSB7CiAJCUZJTEUgKmYgPSBmb3BlbihwYXRoLCAidyIpOwogCQlpZiAoIWYpCkBAIC0yMjksNiArMzg5LDcgQEAKIAkJCQkgICAgIHN0cmVycm9yKGVycm5vKSk7CiAJfQogCitvdXQ6CiAJZnJlZShjdXIucHRyKTsKIAlmcmVlKGJhc2UucHRyKTsKIAlmcmVlKG90aGVyLnB0cik7CkBAIC0zNjcsNyArNTI4LDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotaW50IHNldHVwX3JlcmVyZShzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1lcmdlX3JyKQoraW50IHNldHVwX3JlcmVyZShzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1lcmdlX3JyLCBpbnQgZmxhZ3MpCiB7CiAJaW50IGZkOwogCkBAIC0zNzUsNiArNTM2LDggQEAKIAlpZiAoIWlzX3JlcmVyZV9lbmFibGVkKCkpCiAJCXJldHVybiAtMTsKIAorCWlmIChmbGFncyAmIChSRVJFUkVfQVVUT1VQREFURXxSRVJFUkVfTk9BVVRPVVBEQVRFKSkKKwkJcmVyZXJlX2F1dG91cGRhdGUgPSAhIShmbGFncyAmIFJFUkVSRV9BVVRPVVBEQVRFKTsKIAltZXJnZV9ycl9wYXRoID0gZ2l0X3BhdGhkdXAoIk1FUkdFX1JSIik7CiAJZmQgPSBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZ3cml0ZV9sb2NrLCBtZXJnZV9ycl9wYXRoLAogCQkJCSAgICAgICBMT0NLX0RJRV9PTl9FUlJPUik7CkBAIC0zODIsMTMgKzU0NSw2MiBAQAogCXJldHVybiBmZDsKIH0KIAotaW50IHJlcmVyZSh2b2lkKQoraW50IHJlcmVyZShpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHN0cmluZ19saXN0IG1lcmdlX3JyID0geyBOVUxMLCAwLCAwLCAxIH07CiAJaW50IGZkOwogCi0JZmQgPSBzZXR1cF9yZXJlcmUoJm1lcmdlX3JyKTsKKwlmZCA9IHNldHVwX3JlcmVyZSgmbWVyZ2VfcnIsIGZsYWdzKTsKIAlpZiAoZmQgPCAwKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gZG9fcGxhaW5fcmVyZXJlKCZtZXJnZV9yciwgZmQpOwogfQorCitzdGF0aWMgaW50IHJlcmVyZV9mb3JnZXRfb25lX3BhdGgoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0cmluZ19saXN0ICpycikKK3sKKwljb25zdCBjaGFyICpmaWxlbmFtZTsKKwljaGFyICpoZXg7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlpbnQgcmV0OworCisJcmV0ID0gaGFuZGxlX2NhY2hlKHBhdGgsIHNoYTEsIE5VTEwpOworCWlmIChyZXQgPCAxKQorCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCBwYXJzZSBjb25mbGljdCBodW5rcyBpbiAnJXMnIiwgcGF0aCk7CisJaGV4ID0geHN0cmR1cChzaGExX3RvX2hleChzaGExKSk7CisJZmlsZW5hbWUgPSByZXJlcmVfcGF0aChoZXgsICJwb3N0aW1hZ2UiKTsKKwlpZiAodW5saW5rKGZpbGVuYW1lKSkKKwkJcmV0dXJuIChlcnJubyA9PSBFTk9FTlQKKwkJCT8gZXJyb3IoIm5vIHJlbWVtYmVyZWQgcmVzb2x1dGlvbiBmb3IgJXMiLCBwYXRoKQorCQkJOiBlcnJvcigiY2Fubm90IHVubGluayAlczogJXMiLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKSk7CisKKwloYW5kbGVfY2FjaGUocGF0aCwgc2hhMSwgcmVyZXJlX3BhdGgoaGV4LCAicHJlaW1hZ2UiKSk7CisJZnByaW50ZihzdGRlcnIsICJVcGRhdGVkIHByZWltYWdlIGZvciAnJXMnXG4iLCBwYXRoKTsKKworCisJc3RyaW5nX2xpc3RfaW5zZXJ0KHBhdGgsIHJyKS0+dXRpbCA9IGhleDsKKwlmcHJpbnRmKHN0ZGVyciwgIkZvcmdvdCByZXNvbHV0aW9uIGZvciAlc1xuIiwgcGF0aCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCByZXJlcmVfZm9yZ2V0KGNvbnN0IGNoYXIgKipwYXRoc3BlYykKK3sKKwlpbnQgaSwgZmQ7CisJc3RydWN0IHN0cmluZ19saXN0IGNvbmZsaWN0ID0geyBOVUxMLCAwLCAwLCAxIH07CisJc3RydWN0IHN0cmluZ19saXN0IG1lcmdlX3JyID0geyBOVUxMLCAwLCAwLCAxIH07CisKKwlpZiAocmVhZF9jYWNoZSgpIDwgMCkKKwkJcmV0dXJuIGVycm9yKCJDb3VsZCBub3QgcmVhZCBpbmRleCIpOworCisJZmQgPSBzZXR1cF9yZXJlcmUoJm1lcmdlX3JyLCBSRVJFUkVfTk9BVVRPVVBEQVRFKTsKKworCXVubWVyZ2VfY2FjaGUocGF0aHNwZWMpOworCWZpbmRfY29uZmxpY3QoJmNvbmZsaWN0KTsKKwlmb3IgKGkgPSAwOyBpIDwgY29uZmxpY3QubnI7IGkrKykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQgPSAmY29uZmxpY3QuaXRlbXNbaV07CisJCWlmICghbWF0Y2hfcGF0aHNwZWMocGF0aHNwZWMsIGl0LT5zdHJpbmcsIHN0cmxlbihpdC0+c3RyaW5nKSwKKwkJCQkgICAgMCwgTlVMTCkpCisJCQljb250aW51ZTsKKwkJcmVyZXJlX2ZvcmdldF9vbmVfcGF0aChpdC0+c3RyaW5nLCAmbWVyZ2VfcnIpOworCX0KKwlyZXR1cm4gd3JpdGVfcnIoJm1lcmdlX3JyLCBmZCk7Cit9CmRpZmYgLS1naXQgYS9yZXJlcmUuaCBiL3JlcmVyZS5oCmluZGV4IDEzMzEzZjMuLmVhYTkwMDQgMTAwNjQ0Ci0tLSBhL3JlcmVyZS5oCisrKyBiL3JlcmVyZS5oCkBAIC0zLDkgKzMsMTYgQEAKIAogI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCiAKLWV4dGVybiBpbnQgc2V0dXBfcmVyZXJlKHN0cnVjdCBzdHJpbmdfbGlzdCAqKTsKLWV4dGVybiBpbnQgcmVyZXJlKHZvaWQpOworI2RlZmluZSBSRVJFUkVfQVVUT1VQREFURSAgIDAxCisjZGVmaW5lIFJFUkVSRV9OT0FVVE9VUERBVEUgMDIKKworZXh0ZXJuIGludCBzZXR1cF9yZXJlcmUoc3RydWN0IHN0cmluZ19saXN0ICosIGludCk7CitleHRlcm4gaW50IHJlcmVyZShpbnQpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKnJlcmVyZV9wYXRoKGNvbnN0IGNoYXIgKmhleCwgY29uc3QgY2hhciAqZmlsZSk7CiBleHRlcm4gaW50IGhhc19yZXJlcmVfcmVzb2x1dGlvbihjb25zdCBjaGFyICpoZXgpOworZXh0ZXJuIGludCByZXJlcmVfZm9yZ2V0KGNvbnN0IGNoYXIgKiopOworCisjZGVmaW5lIE9QVF9SRVJFUkVfQVVUT1VQREFURSh2KSBPUFRfVVlOKDAsICJyZXJlcmUtYXV0b3VwZGF0ZSIsICh2KSwgXAorCSJ1cGRhdGUgdGhlIGluZGV4IHdpdGggcmV1c2VkIGNvbmZsaWN0IHJlc29sdXRpb24gaWYgcG9zc2libGUiKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3Jlc29sdmUtdW5kby5jIGIvcmVzb2x2ZS11bmRvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY1MGVlMAotLS0gL2Rldi9udWxsCisrKyBiL3Jlc29sdmUtdW5kby5jCkBAIC0wLDAgKzEsMTc2IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJyZXNvbHZlLXVuZG8uaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorCisvKiBUaGUgb25seSBlcnJvciBjYXNlIGlzIHRvIHJ1biBvdXQgb2YgbWVtb3J5IGluIHN0cmluZy1saXN0ICovCit2b2lkIHJlY29yZF9yZXNvbHZlX3VuZG8oc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmxvc3Q7CisJc3RydWN0IHJlc29sdmVfdW5kb19pbmZvICp1aTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlc29sdmVfdW5kbzsKKwlpbnQgc3RhZ2UgPSBjZV9zdGFnZShjZSk7CisKKwlpZiAoIXN0YWdlKQorCQlyZXR1cm47CisKKwlpZiAoIWlzdGF0ZS0+cmVzb2x2ZV91bmRvKSB7CisJCXJlc29sdmVfdW5kbyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpyZXNvbHZlX3VuZG8pKTsKKwkJcmVzb2x2ZV91bmRvLT5zdHJkdXBfc3RyaW5ncyA9IDE7CisJCWlzdGF0ZS0+cmVzb2x2ZV91bmRvID0gcmVzb2x2ZV91bmRvOworCX0KKwlyZXNvbHZlX3VuZG8gPSBpc3RhdGUtPnJlc29sdmVfdW5kbzsKKwlsb3N0ID0gc3RyaW5nX2xpc3RfaW5zZXJ0KGNlLT5uYW1lLCByZXNvbHZlX3VuZG8pOworCWlmICghbG9zdC0+dXRpbCkKKwkJbG9zdC0+dXRpbCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCp1aSkpOworCXVpID0gbG9zdC0+dXRpbDsKKwloYXNoY3B5KHVpLT5zaGExW3N0YWdlIC0gMV0sIGNlLT5zaGExKTsKKwl1aS0+bW9kZVtzdGFnZSAtIDFdID0gY2UtPmNlX21vZGU7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfb25lKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtLCB2b2lkICpjYmRhdGEpCit7CisJc3RydWN0IHN0cmJ1ZiAqc2IgPSBjYmRhdGE7CisJc3RydWN0IHJlc29sdmVfdW5kb19pbmZvICp1aSA9IGl0ZW0tPnV0aWw7CisJaW50IGk7CisKKwlpZiAoIXVpKQorCQlyZXR1cm4gMDsKKwlzdHJidWZfYWRkc3RyKHNiLCBpdGVtLT5zdHJpbmcpOworCXN0cmJ1Zl9hZGRjaChzYiwgMCk7CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJc3RyYnVmX2FkZGYoc2IsICIlbyVjIiwgdWktPm1vZGVbaV0sIDApOworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJaWYgKCF1aS0+bW9kZVtpXSkKKwkJCWNvbnRpbnVlOworCQlzdHJidWZfYWRkKHNiLCB1aS0+c2hhMVtpXSwgMjApOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCByZXNvbHZlX3VuZG9fd3JpdGUoc3RydWN0IHN0cmJ1ZiAqc2IsIHN0cnVjdCBzdHJpbmdfbGlzdCAqcmVzb2x2ZV91bmRvKQoreworCWZvcl9lYWNoX3N0cmluZ19saXN0KHdyaXRlX29uZSwgcmVzb2x2ZV91bmRvLCBzYik7Cit9CisKK3N0cnVjdCBzdHJpbmdfbGlzdCAqcmVzb2x2ZV91bmRvX3JlYWQoY29uc3QgY2hhciAqZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCAqcmVzb2x2ZV91bmRvOworCXNpemVfdCBsZW47CisJY2hhciAqZW5kcHRyOworCWludCBpOworCisJcmVzb2x2ZV91bmRvID0geGNhbGxvYygxLCBzaXplb2YoKnJlc29sdmVfdW5kbykpOworCXJlc29sdmVfdW5kby0+c3RyZHVwX3N0cmluZ3MgPSAxOworCisJd2hpbGUgKHNpemUpIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmxvc3Q7CisJCXN0cnVjdCByZXNvbHZlX3VuZG9faW5mbyAqdWk7CisKKwkJbGVuID0gc3RybGVuKGRhdGEpICsgMTsKKwkJaWYgKHNpemUgPD0gbGVuKQorCQkJZ290byBlcnJvcjsKKwkJbG9zdCA9IHN0cmluZ19saXN0X2luc2VydChkYXRhLCByZXNvbHZlX3VuZG8pOworCQlpZiAoIWxvc3QtPnV0aWwpCisJCQlsb3N0LT51dGlsID0geGNhbGxvYygxLCBzaXplb2YoKnVpKSk7CisJCXVpID0gbG9zdC0+dXRpbDsKKwkJc2l6ZSAtPSBsZW47CisJCWRhdGEgKz0gbGVuOworCisJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJCXVpLT5tb2RlW2ldID0gc3RydG91bChkYXRhLCAmZW5kcHRyLCA4KTsKKwkJCWlmICghZW5kcHRyIHx8IGVuZHB0ciA9PSBkYXRhIHx8ICplbmRwdHIpCisJCQkJZ290byBlcnJvcjsKKwkJCWxlbiA9IChlbmRwdHIgKyAxKSAtIChjaGFyKilkYXRhOworCQkJaWYgKHNpemUgPD0gbGVuKQorCQkJCWdvdG8gZXJyb3I7CisJCQlzaXplIC09IGxlbjsKKwkJCWRhdGEgKz0gbGVuOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQkJaWYgKCF1aS0+bW9kZVtpXSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChzaXplIDwgMjApCisJCQkJZ290byBlcnJvcjsKKwkJCWhhc2hjcHkodWktPnNoYTFbaV0sIChjb25zdCB1bnNpZ25lZCBjaGFyICopZGF0YSk7CisJCQlzaXplIC09IDIwOworCQkJZGF0YSArPSAyMDsKKwkJfQorCX0KKwlyZXR1cm4gcmVzb2x2ZV91bmRvOworCitlcnJvcjoKKwlzdHJpbmdfbGlzdF9jbGVhcihyZXNvbHZlX3VuZG8sIDEpOworCWVycm9yKCJJbmRleCByZWNvcmRzIGludmFsaWQgcmVzb2x2ZS11bmRvIGluZm9ybWF0aW9uIik7CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgcmVzb2x2ZV91bmRvX2NsZWFyX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCAqcmVzb2x2ZV91bmRvID0gaXN0YXRlLT5yZXNvbHZlX3VuZG87CisJaWYgKCFyZXNvbHZlX3VuZG8pCisJCXJldHVybjsKKwlzdHJpbmdfbGlzdF9jbGVhcihyZXNvbHZlX3VuZG8sIDEpOworCWZyZWUocmVzb2x2ZV91bmRvKTsKKwlpc3RhdGUtPnJlc29sdmVfdW5kbyA9IE5VTEw7CisJaXN0YXRlLT5jYWNoZV9jaGFuZ2VkID0gMTsKK30KKworaW50IHVubWVyZ2VfaW5kZXhfZW50cnlfYXQoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGludCBwb3MpCit7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlzdHJ1Y3QgcmVzb2x2ZV91bmRvX2luZm8gKnJ1OworCWludCBpLCBlcnIgPSAwOworCisJaWYgKCFpc3RhdGUtPnJlc29sdmVfdW5kbykKKwkJcmV0dXJuIHBvczsKKworCWNlID0gaXN0YXRlLT5jYWNoZVtwb3NdOworCWlmIChjZV9zdGFnZShjZSkpIHsKKwkJLyogYWxyZWFkeSB1bm1lcmdlZCAqLworCQl3aGlsZSAoKHBvcyA8IGlzdGF0ZS0+Y2FjaGVfbnIpICYmCisJCSAgICAgICAhIHN0cmNtcChpc3RhdGUtPmNhY2hlW3Bvc10tPm5hbWUsIGNlLT5uYW1lKSkKKwkJCXBvcysrOworCQlyZXR1cm4gcG9zIC0gMTsgLyogcmV0dXJuIHRoZSBsYXN0IGVudHJ5IHByb2Nlc3NlZCAqLworCX0KKwlpdGVtID0gc3RyaW5nX2xpc3RfbG9va3VwKGNlLT5uYW1lLCBpc3RhdGUtPnJlc29sdmVfdW5kbyk7CisJaWYgKCFpdGVtKQorCQlyZXR1cm4gcG9zOworCXJ1ID0gaXRlbS0+dXRpbDsKKwlpZiAoIXJ1KQorCQlyZXR1cm4gcG9zOworCXJlbW92ZV9pbmRleF9lbnRyeV9hdChpc3RhdGUsIHBvcyk7CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKm5jZTsKKwkJaWYgKCFydS0+bW9kZVtpXSkKKwkJCWNvbnRpbnVlOworCQluY2UgPSBtYWtlX2NhY2hlX2VudHJ5KHJ1LT5tb2RlW2ldLCBydS0+c2hhMVtpXSwKKwkJCQkgICAgICAgY2UtPm5hbWUsIGkgKyAxLCAwKTsKKwkJaWYgKGFkZF9pbmRleF9lbnRyeShpc3RhdGUsIG5jZSwgQUREX0NBQ0hFX09LX1RPX0FERCkpIHsKKwkJCWVyciA9IDE7CisJCQllcnJvcigiY2Fubm90IHVubWVyZ2UgJyVzJyIsIGNlLT5uYW1lKTsKKwkJfQorCX0KKwlpZiAoZXJyKQorCQlyZXR1cm4gcG9zOworCWZyZWUocnUpOworCWl0ZW0tPnV0aWwgPSBOVUxMOworCXJldHVybiB1bm1lcmdlX2luZGV4X2VudHJ5X2F0KGlzdGF0ZSwgcG9zKTsKK30KKwordm9pZCB1bm1lcmdlX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICoqcGF0aHNwZWMpCit7CisJaW50IGk7CisKKwlpZiAoIWlzdGF0ZS0+cmVzb2x2ZV91bmRvKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgaXN0YXRlLT5jYWNoZV9ucjsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpc3RhdGUtPmNhY2hlW2ldOworCQlpZiAoIW1hdGNoX3BhdGhzcGVjKHBhdGhzcGVjLCBjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSksIDAsIE5VTEwpKQorCQkJY29udGludWU7CisJCWkgPSB1bm1lcmdlX2luZGV4X2VudHJ5X2F0KGlzdGF0ZSwgaSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvcmVzb2x2ZS11bmRvLmggYi9yZXNvbHZlLXVuZG8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDU4NzY5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzb2x2ZS11bmRvLmgKQEAgLTAsMCArMSwxNiBAQAorI2lmbmRlZiBSRVNPTFZFX1VORE9fSAorI2RlZmluZSBSRVNPTFZFX1VORE9fSAorCitzdHJ1Y3QgcmVzb2x2ZV91bmRvX2luZm8geworCXVuc2lnbmVkIGludCBtb2RlWzNdOworCXVuc2lnbmVkIGNoYXIgc2hhMVszXVsyMF07Cit9OworCitleHRlcm4gdm9pZCByZWNvcmRfcmVzb2x2ZV91bmRvKHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKik7CitleHRlcm4gdm9pZCByZXNvbHZlX3VuZG9fd3JpdGUoc3RydWN0IHN0cmJ1ZiAqLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKik7CitleHRlcm4gc3RydWN0IHN0cmluZ19saXN0ICpyZXNvbHZlX3VuZG9fcmVhZChjb25zdCBjaGFyICosIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgcmVzb2x2ZV91bmRvX2NsZWFyX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqKTsKK2V4dGVybiBpbnQgdW5tZXJnZV9pbmRleF9lbnRyeV9hdChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgaW50KTsKK2V4dGVybiB2b2lkIHVubWVyZ2VfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICosIGNvbnN0IGNoYXIgKiopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3JldmlzaW9uLmMgYi9yZXZpc2lvbi5jCmluZGV4IDE4YjdlYmIuLjQ5MGI0ODQgMTAwNjQ0Ci0tLSBhL3JldmlzaW9uLmMKKysrIGIvcmV2aXNpb24uYwpAQCAtMTMzLDExICsxMzMsMjEgQEAKIHN0YXRpYyB2b2lkIGFkZF9wZW5kaW5nX29iamVjdF93aXRoX21vZGUoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIG1vZGUpCiB7CiAJaWYgKHJldnMtPm5vX3dhbGsgJiYgKG9iai0+ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSkKLQkJZGllKCJvYmplY3QgcmFuZ2VzIGRvIG5vdCBtYWtlIHNlbnNlIHdoZW4gbm90IHdhbGtpbmcgcmV2aXNpb25zIik7Ci0JaWYgKHJldnMtPnJlZmxvZ19pbmZvICYmIG9iai0+dHlwZSA9PSBPQkpfQ09NTUlUICYmCi0JCQlhZGRfcmVmbG9nX2Zvcl93YWxrKHJldnMtPnJlZmxvZ19pbmZvLAotCQkJCShzdHJ1Y3QgY29tbWl0ICopb2JqLCBuYW1lKSkKLQkJcmV0dXJuOworCQlyZXZzLT5ub193YWxrID0gMDsKKwlpZiAocmV2cy0+cmVmbG9nX2luZm8gJiYgb2JqLT50eXBlID09IE9CSl9DT01NSVQpIHsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkJaW50IGxlbiA9IGludGVycHJldF9icmFuY2hfbmFtZShuYW1lLCAmYnVmKTsKKwkJaW50IHN0OworCisJCWlmICgwIDwgbGVuICYmIG5hbWVbbGVuXSAmJiBidWYubGVuKQorCQkJc3RyYnVmX2FkZHN0cigmYnVmLCBuYW1lICsgbGVuKTsKKwkJc3QgPSBhZGRfcmVmbG9nX2Zvcl93YWxrKHJldnMtPnJlZmxvZ19pbmZvLAorCQkJCQkgKHN0cnVjdCBjb21taXQgKilvYmosCisJCQkJCSBidWYuYnVmWzBdID8gYnVmLmJ1ZjogbmFtZSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQlpZiAoc3QpCisJCQlyZXR1cm47CisJfQogCWFkZF9vYmplY3RfYXJyYXlfd2l0aF9tb2RlKG9iaiwgbmFtZSwgJnJldnMtPnBlbmRpbmcsIG1vZGUpOwogfQogCkBAIC0yNTYsMzQgKzI2NiwyMyBAQAogCiAvKgogICogVGhlIGdvYWwgaXMgdG8gZ2V0IFJFVl9UUkVFX05FVyBhcyB0aGUgcmVzdWx0IG9ubHkgaWYgdGhlCi0gKiBkaWZmIGNvbnNpc3RzIG9mIGFsbCAnKycgKGFuZCBubyBvdGhlciBjaGFuZ2VzKSwgYW5kCi0gKiBSRVZfVFJFRV9ESUZGRVJFTlQgb3RoZXJ3aXNlIChvZiBjb3Vyc2UgaWYgdGhlIHRyZWVzIGFyZQotICogdGhlIHNhbWUgd2Ugd2FudCBSRVZfVFJFRV9TQU1FKS4gIFRoYXQgbWVhbnMgdGhhdCBvbmNlIHdlCi0gKiBnZXQgdG8gUkVWX1RSRUVfRElGRkVSRU5ULCB3ZSBkbyBub3QgaGF2ZSB0byBsb29rIGFueSBmdXJ0aGVyLgorICogZGlmZiBjb25zaXN0cyBvZiBhbGwgJysnIChhbmQgbm8gb3RoZXIgY2hhbmdlcyksIFJFVl9UUkVFX09MRAorICogaWYgdGhlIHdob2xlIGRpZmYgaXMgcmVtb3ZhbCBvZiBvbGQgZGF0YSwgYW5kIG90aGVyd2lzZQorICogUkVWX1RSRUVfRElGRkVSRU5UIChvZiBjb3Vyc2UgaWYgdGhlIHRyZWVzIGFyZSB0aGUgc2FtZSB3ZQorICogd2FudCBSRVZfVFJFRV9TQU1FKS4KKyAqIFRoYXQgbWVhbnMgdGhhdCBvbmNlIHdlIGdldCB0byBSRVZfVFJFRV9ESUZGRVJFTlQsIHdlIGRvIG5vdAorICogaGF2ZSB0byBsb29rIGFueSBmdXJ0aGVyLgogICovCiBzdGF0aWMgaW50IHRyZWVfZGlmZmVyZW5jZSA9IFJFVl9UUkVFX1NBTUU7CiAKIHN0YXRpYyB2b2lkIGZpbGVfYWRkX3JlbW92ZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAogCQkgICAgaW50IGFkZHJlbW92ZSwgdW5zaWduZWQgbW9kZSwKIAkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCi0JCSAgICBjb25zdCBjaGFyICpmdWxscGF0aCkKKwkJICAgIGNvbnN0IGNoYXIgKmZ1bGxwYXRoLCB1bnNpZ25lZCBkaXJ0eV9zdWJtb2R1bGUpCiB7Ci0JaW50IGRpZmYgPSBSRVZfVFJFRV9ESUZGRVJFTlQ7CisJaW50IGRpZmYgPSBhZGRyZW1vdmUgPT0gJysnID8gUkVWX1RSRUVfTkVXIDogUkVWX1RSRUVfT0xEOwogCi0JLyoKLQkgKiBJcyBpdCBhbiBhZGQgb2YgYSBuZXcgZmlsZT8gSXQgbWVhbnMgdGhhdCB0aGUgb2xkIHRyZWUKLQkgKiBkaWRuJ3QgaGF2ZSBpdCBhdCBhbGwsIHNvIHdlIHdpbGwgdHVybiAiUkVWX1RSRUVfU0FNRSIgLT4KLQkgKiAiUkVWX1RSRUVfTkVXIiwgYnV0IGxlYXZlIGFueSAiUkVWX1RSRUVfRElGRkVSRU5UIiBhbG9uZQotCSAqIChhbmQgaWYgaXQgYWxyZWFkeSB3YXMgIlJFVl9UUkVFX05FVyIsIHdlJ2xsIGtlZXAgaXQKLQkgKiAiUkVWX1RSRUVfTkVXIiBvZiBjb3Vyc2UpLgotCSAqLwotCWlmIChhZGRyZW1vdmUgPT0gJysnKSB7Ci0JCWRpZmYgPSB0cmVlX2RpZmZlcmVuY2U7Ci0JCWlmIChkaWZmICE9IFJFVl9UUkVFX1NBTUUpCi0JCQlyZXR1cm47Ci0JCWRpZmYgPSBSRVZfVFJFRV9ORVc7Ci0JfQotCXRyZWVfZGlmZmVyZW5jZSA9IGRpZmY7CisJdHJlZV9kaWZmZXJlbmNlIHw9IGRpZmY7CiAJaWYgKHRyZWVfZGlmZmVyZW5jZSA9PSBSRVZfVFJFRV9ESUZGRVJFTlQpCiAJCURJRkZfT1BUX1NFVChvcHRpb25zLCBIQVNfQ0hBTkdFUyk7CiB9CkBAIC0yOTIsNyArMjkxLDggQEAKIAkJIHVuc2lnbmVkIG9sZF9tb2RlLCB1bnNpZ25lZCBuZXdfbW9kZSwKIAkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9zaGExLAogCQkgY29uc3QgdW5zaWduZWQgY2hhciAqbmV3X3NoYTEsCi0JCSBjb25zdCBjaGFyICpmdWxscGF0aCkKKwkJIGNvbnN0IGNoYXIgKmZ1bGxwYXRoLAorCQkgdW5zaWduZWQgb2xkX2RpcnR5X3N1Ym1vZHVsZSwgdW5zaWduZWQgbmV3X2RpcnR5X3N1Ym1vZHVsZSkKIHsKIAl0cmVlX2RpZmZlcmVuY2UgPSBSRVZfVFJFRV9ESUZGRVJFTlQ7CiAJRElGRl9PUFRfU0VUKG9wdGlvbnMsIEhBU19DSEFOR0VTKTsKQEAgLTMwNSw2ICszMDUsOCBAQAogCiAJaWYgKCF0MSkKIAkJcmV0dXJuIFJFVl9UUkVFX05FVzsKKwlpZiAoIXQyKQorCQlyZXR1cm4gUkVWX1RSRUVfT0xEOwogCiAJaWYgKHJldnMtPnNpbXBsaWZ5X2J5X2RlY29yYXRpb24pIHsKIAkJLyoKQEAgLTMyMyw4ICszMjUsNyBAQAogCQlpZiAoIXJldnMtPnBydW5lX2RhdGEpCiAJCQlyZXR1cm4gUkVWX1RSRUVfU0FNRTsKIAl9Ci0JaWYgKCF0MikKLQkJcmV0dXJuIFJFVl9UUkVFX0RJRkZFUkVOVDsKKwogCXRyZWVfZGlmZmVyZW5jZSA9IFJFVl9UUkVFX1NBTUU7CiAJRElGRl9PUFRfQ0xSKCZyZXZzLT5wcnVuaW5nLCBIQVNfQ0hBTkdFUyk7CiAJaWYgKGRpZmZfdHJlZV9zaGExKHQxLT5vYmplY3Quc2hhMSwgdDItPm9iamVjdC5zaGExLCAiIiwKQEAgLTQyOSw2ICs0MzAsNyBAQAogCQkJCXAtPnBhcmVudHMgPSBOVUxMOwogCQkJfQogCQkvKiBmYWxsdGhyb3VnaCAqLworCQljYXNlIFJFVl9UUkVFX09MRDoKIAkJY2FzZSBSRVZfVFJFRV9ESUZGRVJFTlQ6CiAJCQl0cmVlX2NoYW5nZWQgPSAxOwogCQkJcHAgPSAmcGFyZW50LT5uZXh0OwpAQCAtNTQ1LDYgKzU0Nyw5IEBACiAJCQlyaWdodF9jb3VudCsrOwogCX0KIAorCWlmICghbGVmdF9jb3VudCB8fCAhcmlnaHRfY291bnQpCisJCXJldHVybjsKKwogCWxlZnRfZmlyc3QgPSBsZWZ0X2NvdW50IDwgcmlnaHRfY291bnQ7CiAJaW5pdF9wYXRjaF9pZHMoJmlkcyk7CiAJaWYgKHJldnMtPmRpZmZvcHQubnJfcGF0aHMpIHsKQEAgLTcwOCwxMiArNzEzLDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGluaXRfYWxsX3JlZnNfY2Ioc3RydWN0IGFsbF9yZWZzX2NiICpjYiwgc3RydWN0IHJldl9pbmZvICpyZXZzLAorCXVuc2lnbmVkIGZsYWdzKQoreworCWNiLT5hbGxfcmV2cyA9IHJldnM7CisJY2ItPmFsbF9mbGFncyA9IGZsYWdzOworfQorCiBzdGF0aWMgdm9pZCBoYW5kbGVfcmVmcyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHVuc2lnbmVkIGZsYWdzLAogCQlpbnQgKCpmb3JfZWFjaCkoZWFjaF9yZWZfZm4sIHZvaWQgKikpCiB7CiAJc3RydWN0IGFsbF9yZWZzX2NiIGNiOwotCWNiLmFsbF9yZXZzID0gcmV2czsKLQljYi5hbGxfZmxhZ3MgPSBmbGFnczsKKwlpbml0X2FsbF9yZWZzX2NiKCZjYiwgcmV2cywgZmxhZ3MpOwogCWZvcl9lYWNoKGhhbmRsZV9vbmVfcmVmLCAmY2IpOwogfQogCkBAIC04MDAsNyArODExLDcgQEAKIAlyZXZzLT5pZ25vcmVfbWVyZ2VzID0gMTsKIAlyZXZzLT5zaW1wbGlmeV9oaXN0b3J5ID0gMTsKIAlESUZGX09QVF9TRVQoJnJldnMtPnBydW5pbmcsIFJFQ1VSU0lWRSk7Ci0JRElGRl9PUFRfU0VUKCZyZXZzLT5wcnVuaW5nLCBRVUlFVCk7CisJRElGRl9PUFRfU0VUKCZyZXZzLT5wcnVuaW5nLCBRVUlDSyk7CiAJcmV2cy0+cHJ1bmluZy5hZGRfcmVtb3ZlID0gZmlsZV9hZGRfcmVtb3ZlOwogCXJldnMtPnBydW5pbmcuY2hhbmdlID0gZmlsZV9jaGFuZ2U7CiAJcmV2cy0+bGlmbyA9IDE7CkBAIC04MTUsNiArODI2LDcgQEAKIAogCXJldnMtPmdyZXBfZmlsdGVyLnN0YXR1c19vbmx5ID0gMTsKIAlyZXZzLT5ncmVwX2ZpbHRlci5wYXR0ZXJuX3RhaWwgPSAmKHJldnMtPmdyZXBfZmlsdGVyLnBhdHRlcm5fbGlzdCk7CisJcmV2cy0+Z3JlcF9maWx0ZXIuaGVhZGVyX3RhaWwgPSAmKHJldnMtPmdyZXBfZmlsdGVyLmhlYWRlcl9saXN0KTsKIAlyZXZzLT5ncmVwX2ZpbHRlci5yZWdmbGFncyA9IFJFR19ORVdMSU5FOwogCiAJZGlmZl9zZXR1cCgmcmV2cy0+ZGlmZm9wdCk7CkBAIC05NjIsMjEgKzk3NCw1OSBAQAogCXJldHVybiAwOwogfQogCi12b2lkIHJlYWRfcmV2aXNpb25zX2Zyb21fc3RkaW4oc3RydWN0IHJldl9pbmZvICpyZXZzKQorc3RhdGljIHZvaWQgcmVhZF9wYXRoc3BlY19mcm9tX3N0ZGluKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKioqcHJ1bmVfZGF0YSkKIHsKLQljaGFyIGxpbmVbMTAwMF07CisJY29uc3QgY2hhciAqKnBydW5lID0gKnBydW5lX2RhdGE7CisJaW50IHBydW5lX25yOworCWludCBwcnVuZV9hbGxvYzsKIAotCXdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIHN0ZGluKSAhPSBOVUxMKSB7Ci0JCWludCBsZW4gPSBzdHJsZW4obGluZSk7Ci0JCWlmIChsZW4gJiYgbGluZVtsZW4gLSAxXSA9PSAnXG4nKQotCQkJbGluZVstLWxlbl0gPSAnXDAnOworCS8qIGNvdW50IGV4aXN0aW5nIG9uZXMgKi8KKwlpZiAoIXBydW5lKQorCQlwcnVuZV9uciA9IDA7CisJZWxzZQorCQlmb3IgKHBydW5lX25yID0gMDsgcHJ1bmVbcHJ1bmVfbnJdOyBwcnVuZV9ucisrKQorCQkJOworCXBydW5lX2FsbG9jID0gcHJ1bmVfbnI7IC8qIG5vdCByZWFsbHksIGJ1dCB3ZSBkbyBub3Qga25vdyAqLworCisJd2hpbGUgKHN0cmJ1Zl9nZXR3aG9sZWxpbmUoc2IsIHN0ZGluLCAnXG4nKSAhPSBFT0YpIHsKKwkJaW50IGxlbiA9IHNiLT5sZW47CisJCWlmIChsZW4gJiYgc2ItPmJ1ZltsZW4gLSAxXSA9PSAnXG4nKQorCQkJc2ItPmJ1ZlstLWxlbl0gPSAnXDAnOworCQlBTExPQ19HUk9XKHBydW5lLCBwcnVuZV9ucisxLCBwcnVuZV9hbGxvYyk7CisJCXBydW5lW3BydW5lX25yKytdID0geHN0cmR1cChzYi0+YnVmKTsKKwl9CisJaWYgKHBydW5lKSB7CisJCUFMTE9DX0dST1cocHJ1bmUsIHBydW5lX25yKzEsIHBydW5lX2FsbG9jKTsKKwkJcHJ1bmVbcHJ1bmVfbnJdID0gTlVMTDsKKwl9CisJKnBydW5lX2RhdGEgPSBwcnVuZTsKK30KKworc3RhdGljIHZvaWQgcmVhZF9yZXZpc2lvbnNfZnJvbV9zdGRpbihzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGNvbnN0IGNoYXIgKioqcHJ1bmUpCit7CisJc3RydWN0IHN0cmJ1ZiBzYjsKKwlpbnQgc2Vlbl9kYXNoZGFzaCA9IDA7CisKKwlzdHJidWZfaW5pdCgmc2IsIDEwMDApOworCXdoaWxlIChzdHJidWZfZ2V0d2hvbGVsaW5lKCZzYiwgc3RkaW4sICdcbicpICE9IEVPRikgeworCQlpbnQgbGVuID0gc2IubGVuOworCQlpZiAobGVuICYmIHNiLmJ1ZltsZW4gLSAxXSA9PSAnXG4nKQorCQkJc2IuYnVmWy0tbGVuXSA9ICdcMCc7CiAJCWlmICghbGVuKQogCQkJYnJlYWs7Ci0JCWlmIChsaW5lWzBdID09ICctJykKKwkJaWYgKHNiLmJ1ZlswXSA9PSAnLScpIHsKKwkJCWlmIChsZW4gPT0gMiAmJiBzYi5idWZbMV0gPT0gJy0nKSB7CisJCQkJc2Vlbl9kYXNoZGFzaCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CiAJCQlkaWUoIm9wdGlvbnMgbm90IHN1cHBvcnRlZCBpbiAtLXN0ZGluIG1vZGUiKTsKLQkJaWYgKGhhbmRsZV9yZXZpc2lvbl9hcmcobGluZSwgcmV2cywgMCwgMSkpCi0JCQlkaWUoImJhZCByZXZpc2lvbiAnJXMnIiwgbGluZSk7CisJCX0KKwkJaWYgKGhhbmRsZV9yZXZpc2lvbl9hcmcoc2IuYnVmLCByZXZzLCAwLCAxKSkKKwkJCWRpZSgiYmFkIHJldmlzaW9uICclcyciLCBzYi5idWYpOwogCX0KKwlpZiAoc2Vlbl9kYXNoZGFzaCkKKwkJcmVhZF9wYXRoc3BlY19mcm9tX3N0ZGluKHJldnMsICZzYiwgcHJ1bmUpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CiB9CiAKIHN0YXRpYyB2b2lkIGFkZF9ncmVwKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgY29uc3QgY2hhciAqcHRuLCBlbnVtIGdyZXBfcGF0X3Rva2VuIHdoYXQpCkBAIC0xMDAzLDcgKzEwNTMsOCBAQAogCWlmICghc3RyY21wKGFyZywgIi0tYWxsIikgfHwgIXN0cmNtcChhcmcsICItLWJyYW5jaGVzIikgfHwKIAkgICAgIXN0cmNtcChhcmcsICItLXRhZ3MiKSB8fCAhc3RyY21wKGFyZywgIi0tcmVtb3RlcyIpIHx8CiAJICAgICFzdHJjbXAoYXJnLCAiLS1yZWZsb2ciKSB8fCAhc3RyY21wKGFyZywgIi0tbm90IikgfHwKLQkgICAgIXN0cmNtcChhcmcsICItLW5vLXdhbGsiKSB8fCAhc3RyY21wKGFyZywgIi0tZG8td2FsayIpKQorCSAgICAhc3RyY21wKGFyZywgIi0tbm8td2FsayIpIHx8ICFzdHJjbXAoYXJnLCAiLS1kby13YWxrIikgfHwKKwkgICAgIXN0cmNtcChhcmcsICItLWJpc2VjdCIpKQogCXsKIAkJdW5rdlsoKnVua2MpKytdID0gYXJnOwogCQlyZXR1cm4gMTsKQEAgLTEwNjEsNyArMTExMiw3IEBACiAJCXJldnMtPnNpbXBsaWZ5X2J5X2RlY29yYXRpb24gPSAxOwogCQlyZXZzLT5saW1pdGVkID0gMTsKIAkJcmV2cy0+cHJ1bmUgPSAxOwotCQlsb2FkX3JlZl9kZWNvcmF0aW9ucygpOworCQlsb2FkX3JlZl9kZWNvcmF0aW9ucyhERUNPUkFURV9TSE9SVF9SRUZTKTsKIAl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1kYXRlLW9yZGVyIikpIHsKIAkJcmV2cy0+bGlmbyA9IDA7CiAJCXJldnMtPnRvcG9fb3JkZXIgPSAxOwpAQCAtMTA4Niw2ICsxMTM3LDggQEAKIAkJcmV2cy0+c2hvd19hbGwgPSAxOwogCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXJlbW92ZS1lbXB0eSIpKSB7CiAJCXJldnMtPnJlbW92ZV9lbXB0eV90cmVlcyA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbWVyZ2VzIikpIHsKKwkJcmV2cy0+bWVyZ2VzX29ubHkgPSAxOwogCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLW1lcmdlcyIpKSB7CiAJCXJldnMtPm5vX21lcmdlcyA9IDE7CiAJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tYm91bmRhcnkiKSkgewpAQCAtMTEyOSwxMyArMTE4MiwyMiBAQAogCQlyZXZzLT52ZXJib3NlX2hlYWRlciA9IDE7CiAJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tcHJldHR5IikpIHsKIAkJcmV2cy0+dmVyYm9zZV9oZWFkZXIgPSAxOworCQlyZXZzLT5wcmV0dHlfZ2l2ZW4gPSAxOwogCQlnZXRfY29tbWl0X2Zvcm1hdChhcmcrOCwgcmV2cyk7CiAJfSBlbHNlIGlmICghcHJlZml4Y21wKGFyZywgIi0tcHJldHR5PSIpIHx8ICFwcmVmaXhjbXAoYXJnLCAiLS1mb3JtYXQ9IikpIHsKIAkJcmV2cy0+dmVyYm9zZV9oZWFkZXIgPSAxOworCQlyZXZzLT5wcmV0dHlfZ2l2ZW4gPSAxOwogCQlnZXRfY29tbWl0X2Zvcm1hdChhcmcrOSwgcmV2cyk7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tc2hvdy1ub3RlcyIpKSB7CisJCXJldnMtPnNob3dfbm90ZXMgPSAxOworCQlyZXZzLT5zaG93X25vdGVzX2dpdmVuID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1uby1ub3RlcyIpKSB7CisJCXJldnMtPnNob3dfbm90ZXMgPSAwOworCQlyZXZzLT5zaG93X25vdGVzX2dpdmVuID0gMTsKIAl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1vbmVsaW5lIikpIHsKIAkJcmV2cy0+dmVyYm9zZV9oZWFkZXIgPSAxOwogCQlnZXRfY29tbWl0X2Zvcm1hdCgib25lbGluZSIsIHJldnMpOworCQlyZXZzLT5wcmV0dHlfZ2l2ZW4gPSAxOwogCQlyZXZzLT5hYmJyZXZfY29tbWl0ID0gMTsKIAl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1ncmFwaCIpKSB7CiAJCXJldnMtPnRvcG9fb3JkZXIgPSAxOwpAQCAtMTE2Niw4ICsxMjI4LDEwIEBACiAJCXJldnMtPnNpbXBsaWZ5X2hpc3RvcnkgPSAwOwogCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXJlbGF0aXZlLWRhdGUiKSkgewogCQlyZXZzLT5kYXRlX21vZGUgPSBEQVRFX1JFTEFUSVZFOworCQlyZXZzLT5kYXRlX21vZGVfZXhwbGljaXQgPSAxOwogCX0gZWxzZSBpZiAoIXN0cm5jbXAoYXJnLCAiLS1kYXRlPSIsIDcpKSB7CiAJCXJldnMtPmRhdGVfbW9kZSA9IHBhcnNlX2RhdGVfZm9ybWF0KGFyZyArIDcpOworCQlyZXZzLT5kYXRlX21vZGVfZXhwbGljaXQgPSAxOwogCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWxvZy1zaXplIikpIHsKIAkJcmV2cy0+c2hvd19sb2dfc2l6ZSA9IDE7CiAJfQpAQCAtMTIyMyw2ICsxMjg3LDQ0IEBACiAJY3R4LT5hcmdjIC09IG47CiB9CiAKK3N0YXRpYyBpbnQgZm9yX2VhY2hfYmFkX2Jpc2VjdF9yZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJcmV0dXJuIGZvcl9lYWNoX3JlZl9pbigicmVmcy9iaXNlY3QvYmFkIiwgZm4sIGNiX2RhdGEpOworfQorCitzdGF0aWMgaW50IGZvcl9lYWNoX2dvb2RfYmlzZWN0X3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlyZXR1cm4gZm9yX2VhY2hfcmVmX2luKCJyZWZzL2Jpc2VjdC9nb29kIiwgZm4sIGNiX2RhdGEpOworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRfcHJ1bmVfZGF0YShjb25zdCBjaGFyICoqKnBydW5lX2RhdGEsIGNvbnN0IGNoYXIgKiphdikKK3sKKwljb25zdCBjaGFyICoqcHJ1bmUgPSAqcHJ1bmVfZGF0YTsKKwlpbnQgcHJ1bmVfbnI7CisJaW50IHBydW5lX2FsbG9jOworCisJaWYgKCFwcnVuZSkgeworCQkqcHJ1bmVfZGF0YSA9IGF2OworCQlyZXR1cm47CisJfQorCisJLyogY291bnQgZXhpc3Rpbmcgb25lcyAqLworCWZvciAocHJ1bmVfbnIgPSAwOyBwcnVuZVtwcnVuZV9ucl07IHBydW5lX25yKyspCisJCTsKKwlwcnVuZV9hbGxvYyA9IHBydW5lX25yOyAvKiBub3QgcmVhbGx5LCBidXQgd2UgZG8gbm90IGtub3cgKi8KKworCXdoaWxlICgqYXYpIHsKKwkJQUxMT0NfR1JPVyhwcnVuZSwgcHJ1bmVfbnIrMSwgcHJ1bmVfYWxsb2MpOworCQlwcnVuZVtwcnVuZV9ucisrXSA9ICphdjsKKwkJYXYrKzsKKwl9CisJaWYgKHBydW5lKSB7CisJCUFMTE9DX0dST1cocHJ1bmUsIHBydW5lX25yKzEsIHBydW5lX2FsbG9jKTsKKwkJcHJ1bmVbcHJ1bmVfbnJdID0gTlVMTDsKKwl9CisJKnBydW5lX2RhdGEgPSBwcnVuZTsKK30KKwogLyoKICAqIFBhcnNlIHJldmlzaW9uIGluZm9ybWF0aW9uLCBmaWxsaW5nIGluIHRoZSAicmV2X2luZm8iIHN0cnVjdHVyZSwKICAqIGFuZCByZW1vdmluZyB0aGUgdXNlZCBhcmd1bWVudHMgZnJvbSB0aGUgYXJndW1lbnQgbGlzdC4KQEAgLTEyMzIsNyArMTMzNCw4IEBACiAgKi8KIGludCBzZXR1cF9yZXZpc2lvbnMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGNvbnN0IGNoYXIgKmRlZikKIHsKLQlpbnQgaSwgZmxhZ3MsIGxlZnQsIHNlZW5fZGFzaGRhc2g7CisJaW50IGksIGZsYWdzLCBsZWZ0LCBzZWVuX2Rhc2hkYXNoLCByZWFkX2Zyb21fc3RkaW4sIGdvdF9yZXZfYXJnID0gMDsKKwljb25zdCBjaGFyICoqcHJ1bmVfZGF0YSA9IE5VTEw7CiAKIAkvKiBGaXJzdCwgc2VhcmNoIGZvciAiLS0iICovCiAJc2Vlbl9kYXNoZGFzaCA9IDA7CkBAIC0xMjQzLDEzICsxMzQ2LDE0IEBACiAJCWFyZ3ZbaV0gPSBOVUxMOwogCQlhcmdjID0gaTsKIAkJaWYgKGFyZ3ZbaSArIDFdKQotCQkJcmV2cy0+cHJ1bmVfZGF0YSA9IGdldF9wYXRoc3BlYyhyZXZzLT5wcmVmaXgsIGFyZ3YgKyBpICsgMSk7CisJCQlwcnVuZV9kYXRhID0gYXJndiArIGkgKyAxOwogCQlzZWVuX2Rhc2hkYXNoID0gMTsKIAkJYnJlYWs7CiAJfQogCiAJLyogU2Vjb25kLCBkZWFsIHdpdGggYXJndW1lbnRzIGFuZCBvcHRpb25zICovCiAJZmxhZ3MgPSAwOworCXJlYWRfZnJvbV9zdGRpbiA9IDA7CiAJZm9yIChsZWZ0ID0gaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKIAkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKIAkJaWYgKCphcmcgPT0gJy0nKSB7CkBAIC0xMjY0LDYgKzEzNjgsMTIgQEAKIAkJCQloYW5kbGVfcmVmcyhyZXZzLCBmbGFncywgZm9yX2VhY2hfYnJhbmNoX3JlZik7CiAJCQkJY29udGludWU7CiAJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLWJpc2VjdCIpKSB7CisJCQkJaGFuZGxlX3JlZnMocmV2cywgZmxhZ3MsIGZvcl9lYWNoX2JhZF9iaXNlY3RfcmVmKTsKKwkJCQloYW5kbGVfcmVmcyhyZXZzLCBmbGFncyBeIFVOSU5URVJFU1RJTkcsIGZvcl9lYWNoX2dvb2RfYmlzZWN0X3JlZik7CisJCQkJcmV2cy0+YmlzZWN0ID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KIAkJCWlmICghc3RyY21wKGFyZywgIi0tdGFncyIpKSB7CiAJCQkJaGFuZGxlX3JlZnMocmV2cywgZmxhZ3MsIGZvcl9lYWNoX3RhZ19yZWYpOwogCQkJCWNvbnRpbnVlOwpAQCAtMTI3Miw2ICsxMzgyLDMwIEBACiAJCQkJaGFuZGxlX3JlZnMocmV2cywgZmxhZ3MsIGZvcl9lYWNoX3JlbW90ZV9yZWYpOwogCQkJCWNvbnRpbnVlOwogCQkJfQorCQkJaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1nbG9iPSIpKSB7CisJCQkJc3RydWN0IGFsbF9yZWZzX2NiIGNiOworCQkJCWluaXRfYWxsX3JlZnNfY2IoJmNiLCByZXZzLCBmbGFncyk7CisJCQkJZm9yX2VhY2hfZ2xvYl9yZWYoaGFuZGxlX29uZV9yZWYsIGFyZyArIDcsICZjYik7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXByZWZpeGNtcChhcmcsICItLWJyYW5jaGVzPSIpKSB7CisJCQkJc3RydWN0IGFsbF9yZWZzX2NiIGNiOworCQkJCWluaXRfYWxsX3JlZnNfY2IoJmNiLCByZXZzLCBmbGFncyk7CisJCQkJZm9yX2VhY2hfZ2xvYl9yZWZfaW4oaGFuZGxlX29uZV9yZWYsIGFyZyArIDExLCAicmVmcy9oZWFkcy8iLCAmY2IpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS10YWdzPSIpKSB7CisJCQkJc3RydWN0IGFsbF9yZWZzX2NiIGNiOworCQkJCWluaXRfYWxsX3JlZnNfY2IoJmNiLCByZXZzLCBmbGFncyk7CisJCQkJZm9yX2VhY2hfZ2xvYl9yZWZfaW4oaGFuZGxlX29uZV9yZWYsIGFyZyArIDcsICJyZWZzL3RhZ3MvIiwgJmNiKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghcHJlZml4Y21wKGFyZywgIi0tcmVtb3Rlcz0iKSkgeworCQkJCXN0cnVjdCBhbGxfcmVmc19jYiBjYjsKKwkJCQlpbml0X2FsbF9yZWZzX2NiKCZjYiwgcmV2cywgZmxhZ3MpOworCQkJCWZvcl9lYWNoX2dsb2JfcmVmX2luKGhhbmRsZV9vbmVfcmVmLCBhcmcgKyAxMCwgInJlZnMvcmVtb3Rlcy8iLCAmY2IpOworCQkJCWNvbnRpbnVlOworCQkJfQogCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1yZWZsb2ciKSkgewogCQkJCWhhbmRsZV9yZWZsb2cocmV2cywgZmxhZ3MpOwogCQkJCWNvbnRpbnVlOwpAQCAtMTI4OCw2ICsxNDIyLDE2IEBACiAJCQkJcmV2cy0+bm9fd2FsayA9IDA7CiAJCQkJY29udGludWU7CiAJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLXN0ZGluIikpIHsKKwkJCQlpZiAocmV2cy0+ZGlzYWJsZV9zdGRpbikgeworCQkJCQlhcmd2W2xlZnQrK10gPSBhcmc7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlpZiAocmVhZF9mcm9tX3N0ZGluKyspCisJCQkJCWRpZSgiLS1zdGRpbiBnaXZlbiB0d2ljZT8iKTsKKwkJCQlyZWFkX3JldmlzaW9uc19mcm9tX3N0ZGluKHJldnMsICZwcnVuZV9kYXRhKTsKKwkJCQljb250aW51ZTsKKwkJCX0KIAogCQkJb3B0cyA9IGhhbmRsZV9yZXZpc2lvbl9vcHQocmV2cywgYXJnYyAtIGksIGFyZ3YgKyBpLCAmbGVmdCwgYXJndik7CiAJCQlpZiAob3B0cyA+IDApIHsKQEAgLTEzMTMsMTcgKzE0NTcsMjEgQEAKIAkJCWZvciAoaiA9IGk7IGogPCBhcmdjOyBqKyspCiAJCQkJdmVyaWZ5X2ZpbGVuYW1lKHJldnMtPnByZWZpeCwgYXJndltqXSk7CiAKLQkJCXJldnMtPnBydW5lX2RhdGEgPSBnZXRfcGF0aHNwZWMocmV2cy0+cHJlZml4LAotCQkJCQkJCWFyZ3YgKyBpKTsKKwkJCWFwcGVuZF9wcnVuZV9kYXRhKCZwcnVuZV9kYXRhLCBhcmd2ICsgaSk7CiAJCQlicmVhazsKIAkJfQorCQllbHNlCisJCQlnb3RfcmV2X2FyZyA9IDE7CiAJfQogCisJaWYgKHBydW5lX2RhdGEpCisJCXJldnMtPnBydW5lX2RhdGEgPSBnZXRfcGF0aHNwZWMocmV2cy0+cHJlZml4LCBwcnVuZV9kYXRhKTsKKwogCWlmIChyZXZzLT5kZWYgPT0gTlVMTCkKIAkJcmV2cy0+ZGVmID0gZGVmOwogCWlmIChyZXZzLT5zaG93X21lcmdlKQogCQlwcmVwYXJlX3Nob3dfbWVyZ2UocmV2cyk7Ci0JaWYgKHJldnMtPmRlZiAmJiAhcmV2cy0+cGVuZGluZy5ucikgeworCWlmIChyZXZzLT5kZWYgJiYgIXJldnMtPnBlbmRpbmcubnIgJiYgIWdvdF9yZXZfYXJnKSB7CiAJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CiAJCXN0cnVjdCBvYmplY3QgKm9iamVjdDsKIAkJdW5zaWduZWQgbW9kZTsKQEAgLTE2NTksNyArMTgwNyw3IEBACiAKIHN0YXRpYyBpbnQgY29tbWl0X21hdGNoKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IHJldl9pbmZvICpvcHQpCiB7Ci0JaWYgKCFvcHQtPmdyZXBfZmlsdGVyLnBhdHRlcm5fbGlzdCkKKwlpZiAoIW9wdC0+Z3JlcF9maWx0ZXIucGF0dGVybl9saXN0ICYmICFvcHQtPmdyZXBfZmlsdGVyLmhlYWRlcl9saXN0KQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gZ3JlcF9idWZmZXIoJm9wdC0+Z3JlcF9maWx0ZXIsCiAJCQkgICBOVUxMLCAvKiB3ZSBzYXkgbm90aGluZywgbm90IGV2ZW4gZmlsZW5hbWUgKi8KQEAgLTE2NzEsNyArMTgxOSw3IEBACiAJcmV0dXJuIChyZXZzLT5yZXdyaXRlX3BhcmVudHMgfHwgcmV2cy0+Y2hpbGRyZW4ubmFtZSk7CiB9CiAKLWVudW0gY29tbWl0X2FjdGlvbiBzaW1wbGlmeV9jb21taXQoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCitlbnVtIGNvbW1pdF9hY3Rpb24gZ2V0X2NvbW1pdF9hY3Rpb24oc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCiB7CiAJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgU0hPV04pCiAJCXJldHVybiBjb21taXRfaWdub3JlOwpAQCAtMTY4NSw2ICsxODMzLDggQEAKIAkJcmV0dXJuIGNvbW1pdF9pZ25vcmU7CiAJaWYgKHJldnMtPm5vX21lcmdlcyAmJiBjb21taXQtPnBhcmVudHMgJiYgY29tbWl0LT5wYXJlbnRzLT5uZXh0KQogCQlyZXR1cm4gY29tbWl0X2lnbm9yZTsKKwlpZiAocmV2cy0+bWVyZ2VzX29ubHkgJiYgIShjb21taXQtPnBhcmVudHMgJiYgY29tbWl0LT5wYXJlbnRzLT5uZXh0KSkKKwkJcmV0dXJuIGNvbW1pdF9pZ25vcmU7CiAJaWYgKCFjb21taXRfbWF0Y2goY29tbWl0LCByZXZzKSkKIAkJcmV0dXJuIGNvbW1pdF9pZ25vcmU7CiAJaWYgKHJldnMtPnBydW5lICYmIHJldnMtPmRlbnNlKSB7CkBAIC0xNjk3LDEyICsxODQ3LDIzIEBACiAJCQlpZiAoIWNvbW1pdC0+cGFyZW50cyB8fCAhY29tbWl0LT5wYXJlbnRzLT5uZXh0KQogCQkJCXJldHVybiBjb21taXRfaWdub3JlOwogCQl9Ci0JCWlmICh3YW50X2FuY2VzdHJ5KHJldnMpICYmIHJld3JpdGVfcGFyZW50cyhyZXZzLCBjb21taXQpIDwgMCkKLQkJCXJldHVybiBjb21taXRfZXJyb3I7CiAJfQogCXJldHVybiBjb21taXRfc2hvdzsKIH0KIAorZW51bSBjb21taXRfYWN0aW9uIHNpbXBsaWZ5X2NvbW1pdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwllbnVtIGNvbW1pdF9hY3Rpb24gYWN0aW9uID0gZ2V0X2NvbW1pdF9hY3Rpb24ocmV2cywgY29tbWl0KTsKKworCWlmIChhY3Rpb24gPT0gY29tbWl0X3Nob3cgJiYKKwkgICAgIXJldnMtPnNob3dfYWxsICYmCisJICAgIHJldnMtPnBydW5lICYmIHJldnMtPmRlbnNlICYmIHdhbnRfYW5jZXN0cnkocmV2cykpIHsKKwkJaWYgKHJld3JpdGVfcGFyZW50cyhyZXZzLCBjb21taXQpIDwgMCkKKwkJCXJldHVybiBjb21taXRfZXJyb3I7CisJfQorCXJldHVybiBhY3Rpb247Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY29tbWl0ICpnZXRfcmV2aXNpb25fMShzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCiB7CiAJaWYgKCFyZXZzLT5jb21taXRzKQpkaWZmIC0tZ2l0IGEvcmV2aXNpb24uaCBiL3JldmlzaW9uLmgKaW5kZXggYmUzOWU3ZC4uYTE0ZGVlZiAxMDA2NDQKLS0tIGEvcmV2aXNpb24uaAorKysgYi9yZXZpc2lvbi5oCkBAIC0xNSw2ICsxNSw5IEBACiAjZGVmaW5lIFNZTU1FVFJJQ19MRUZUCSgxdTw8OCkKICNkZWZpbmUgQUxMX1JFVl9GTEFHUwkoKDF1PDw5KS0xKQogCisjZGVmaW5lIERFQ09SQVRFX1NIT1JUX1JFRlMJMQorI2RlZmluZSBERUNPUkFURV9GVUxMX1JFRlMJMgorCiBzdHJ1Y3QgcmV2X2luZm87CiBzdHJ1Y3QgbG9nX2luZm87CiAKQEAgLTM2LDYgKzM5LDcgQEAKIAl1bnNpZ25lZCBpbnQJZGVuc2U6MSwKIAkJCXBydW5lOjEsCiAJCQlub19tZXJnZXM6MSwKKwkJCW1lcmdlc19vbmx5OjEsCiAJCQlub193YWxrOjEsCiAJCQlzaG93X2FsbDoxLAogCQkJcmVtb3ZlX2VtcHR5X3RyZWVzOjEsCkBAIC01OSw2ICs2Myw3IEBACiAJCQlyZXZlcnNlOjEsCiAJCQlyZXZlcnNlX291dHB1dF9zdGFnZToxLAogCQkJY2hlcnJ5X3BpY2s6MSwKKwkJCWJpc2VjdDoxLAogCQkJZmlyc3RfcGFyZW50X29ubHk6MTsKIAogCS8qIERpZmYgZmxhZ3MgKi8KQEAgLTc1LDkgKzgwLDE1IEBACiAJLyogRm9ybWF0IGluZm8gKi8KIAl1bnNpZ25lZCBpbnQJc2hvd25fb25lOjEsCiAJCQlzaG93X21lcmdlOjEsCisJCQlzaG93X25vdGVzOjEsCisJCQlzaG93X25vdGVzX2dpdmVuOjEsCisJCQlwcmV0dHlfZ2l2ZW46MSwKIAkJCWFiYnJldl9jb21taXQ6MSwKIAkJCXVzZV90ZXJtaW5hdG9yOjEsCi0JCQltaXNzaW5nX25ld2xpbmU6MTsKKwkJCW1pc3NpbmdfbmV3bGluZToxLAorCQkJZGF0ZV9tb2RlX2V4cGxpY2l0OjE7CisJdW5zaWduZWQgaW50CWRpc2FibGVfc3RkaW46MTsKKwogCWVudW0gZGF0ZV9tb2RlIGRhdGVfbW9kZTsKIAogCXVuc2lnbmVkIGludAlhYmJyZXY7CkBAIC0xMTgsMTIgKzEyOSwxMSBAQAogfTsKIAogI2RlZmluZSBSRVZfVFJFRV9TQU1FCQkwCi0jZGVmaW5lIFJFVl9UUkVFX05FVwkJMQotI2RlZmluZSBSRVZfVFJFRV9ESUZGRVJFTlQJMgorI2RlZmluZSBSRVZfVFJFRV9ORVcJCTEJLyogT25seSBuZXcgZmlsZXMgKi8KKyNkZWZpbmUgUkVWX1RSRUVfT0xECQkyCS8qIE9ubHkgZmlsZXMgcmVtb3ZlZCAqLworI2RlZmluZSBSRVZfVFJFRV9ESUZGRVJFTlQJMwkvKiBNaXhlZCBjaGFuZ2VzICovCiAKIC8qIHJldmlzaW9uLmMgKi8KLXZvaWQgcmVhZF9yZXZpc2lvbnNfZnJvbV9zdGRpbihzdHJ1Y3QgcmV2X2luZm8gKnJldnMpOwotCiB0eXBlZGVmIHZvaWQgKCpzaG93X2Vhcmx5X291dHB1dF9mbl90KShzdHJ1Y3QgcmV2X2luZm8gKiwgc3RydWN0IGNvbW1pdF9saXN0ICopOwogZXh0ZXJuIHZvbGF0aWxlIHNob3dfZWFybHlfb3V0cHV0X2ZuX3Qgc2hvd19lYXJseV9vdXRwdXQ7CiAKQEAgLTE2Myw2ICsxNzMsNyBAQAogCWNvbW1pdF9lcnJvcgogfTsKIAorZXh0ZXJuIGVudW0gY29tbWl0X2FjdGlvbiBnZXRfY29tbWl0X2FjdGlvbihzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCk7CiBleHRlcm4gZW51bSBjb21taXRfYWN0aW9uIHNpbXBsaWZ5X2NvbW1pdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvcnVuLWNvbW1hbmQuYyBiL3J1bi1jb21tYW5kLmMKaW5kZXggZWIyZWZjMy4uYzhkNTM3OSAxMDA2NDQKLS0tIGEvcnVuLWNvbW1hbmQuYworKysgYi9ydW4tY29tbWFuZC5jCkBAIC04LDE3ICs4LDEzOCBAQAogCWNsb3NlKGZkWzFdKTsKIH0KIAorI2lmbmRlZiBXSU4zMgogc3RhdGljIGlubGluZSB2b2lkIGR1cF9kZXZudWxsKGludCB0bykKIHsKIAlpbnQgZmQgPSBvcGVuKCIvZGV2L251bGwiLCBPX1JEV1IpOwogCWR1cDIoZmQsIHRvKTsKIAljbG9zZShmZCk7CiB9CisjZW5kaWYKKworc3RhdGljIGNvbnN0IGNoYXIgKipwcmVwYXJlX3NoZWxsX2NtZChjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgYXJnYywgbmFyZ2MgPSAwOworCWNvbnN0IGNoYXIgKipuYXJndjsKKworCWZvciAoYXJnYyA9IDA7IGFyZ3ZbYXJnY107IGFyZ2MrKykKKwkJOyAvKiBqdXN0IGNvdW50aW5nICovCisJLyogKzEgZm9yIE5VTEwsICszIGZvciAic2ggLWMiIHBsdXMgZXh0cmEgJDAgKi8KKwluYXJndiA9IHhtYWxsb2Moc2l6ZW9mKCpuYXJndikgKiAoYXJnYyArIDEgKyAzKSk7CisKKwlpZiAoYXJnYyA8IDEpCisJCWRpZSgiQlVHOiBzaGVsbCBjb21tYW5kIGlzIGVtcHR5Iik7CisKKwlpZiAoc3RyY3Nwbihhcmd2WzBdLCAifCY7PD4oKSRgXFxcIicgXHRcbio/WyN+PSUiKSAhPSBzdHJsZW4oYXJndlswXSkpIHsKKwkJbmFyZ3ZbbmFyZ2MrK10gPSAic2giOworCQluYXJndltuYXJnYysrXSA9ICItYyI7CisKKwkJaWYgKGFyZ2MgPCAyKQorCQkJbmFyZ3ZbbmFyZ2MrK10gPSBhcmd2WzBdOworCQllbHNlIHsKKwkJCXN0cnVjdCBzdHJidWYgYXJnMCA9IFNUUkJVRl9JTklUOworCQkJc3RyYnVmX2FkZGYoJmFyZzAsICIlcyBcIiRAXCIiLCBhcmd2WzBdKTsKKwkJCW5hcmd2W25hcmdjKytdID0gc3RyYnVmX2RldGFjaCgmYXJnMCwgTlVMTCk7CisJCX0KKwl9CisKKwlmb3IgKGFyZ2MgPSAwOyBhcmd2W2FyZ2NdOyBhcmdjKyspCisJCW5hcmd2W25hcmdjKytdID0gYXJndlthcmdjXTsKKwluYXJndltuYXJnY10gPSBOVUxMOworCisJcmV0dXJuIG5hcmd2OworfQorCisjaWZuZGVmIFdJTjMyCitzdGF0aWMgaW50IGV4ZWN2X3NoZWxsX2NtZChjb25zdCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICoqbmFyZ3YgPSBwcmVwYXJlX3NoZWxsX2NtZChhcmd2KTsKKwl0cmFjZV9hcmd2X3ByaW50ZihuYXJndiwgInRyYWNlOiBleGVjOiIpOworCWV4ZWN2cChuYXJndlswXSwgKGNoYXIgKiopbmFyZ3YpOworCWZyZWUobmFyZ3YpOworCXJldHVybiAtMTsKK30KKyNlbmRpZgorCisjaWZuZGVmIFdJTjMyCitzdGF0aWMgaW50IGNoaWxkX2VyciA9IDI7CitzdGF0aWMgaW50IGNoaWxkX25vdGlmaWVyID0gLTE7CisKK3N0YXRpYyB2b2lkIG5vdGlmeV9wYXJlbnQodm9pZCkKK3sKKwlzc2l6ZV90IHVudXNlZDsKKwl1bnVzZWQgPSB3cml0ZShjaGlsZF9ub3RpZmllciwgIiIsIDEpOworfQorCitzdGF0aWMgTk9SRVRVUk4gdm9pZCBkaWVfY2hpbGQoY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykKK3sKKwljaGFyIG1zZ1s0MDk2XTsKKwlzc2l6ZV90IHVudXNlZDsKKwlpbnQgbGVuID0gdnNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksIGVyciwgcGFyYW1zKTsKKwlpZiAobGVuID4gc2l6ZW9mKG1zZykpCisJCWxlbiA9IHNpemVvZihtc2cpOworCisJdW51c2VkID0gd3JpdGUoY2hpbGRfZXJyLCAiZmF0YWw6ICIsIDcpOworCXVudXNlZCA9IHdyaXRlKGNoaWxkX2VyciwgbXNnLCBsZW4pOworCXVudXNlZCA9IHdyaXRlKGNoaWxkX2VyciwgIlxuIiwgMSk7CisJZXhpdCgxMjgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2Nsb2V4ZWMoaW50IGZkKQoreworCWludCBmbGFncyA9IGZjbnRsKGZkLCBGX0dFVEZEKTsKKwlpZiAoZmxhZ3MgPj0gMCkKKwkJZmNudGwoZmQsIEZfU0VURkQsIGZsYWdzIHwgRkRfQ0xPRVhFQyk7Cit9CisjZW5kaWYKKworc3RhdGljIGludCB3YWl0X29yX3doaW5lKHBpZF90IHBpZCwgY29uc3QgY2hhciAqYXJndjAsIGludCBzaWxlbnRfZXhlY19mYWlsdXJlKQoreworCWludCBzdGF0dXMsIGNvZGUgPSAtMTsKKwlwaWRfdCB3YWl0aW5nOworCWludCBmYWlsZWRfZXJybm8gPSAwOworCisJd2hpbGUgKCh3YWl0aW5nID0gd2FpdHBpZChwaWQsICZzdGF0dXMsIDApKSA8IDAgJiYgZXJybm8gPT0gRUlOVFIpCisJCTsJLyogbm90aGluZyAqLworCisJaWYgKHdhaXRpbmcgPCAwKSB7CisJCWZhaWxlZF9lcnJubyA9IGVycm5vOworCQllcnJvcigid2FpdHBpZCBmb3IgJXMgZmFpbGVkOiAlcyIsIGFyZ3YwLCBzdHJlcnJvcihlcnJubykpOworCX0gZWxzZSBpZiAod2FpdGluZyAhPSBwaWQpIHsKKwkJZXJyb3IoIndhaXRwaWQgaXMgY29uZnVzZWQgKCVzKSIsIGFyZ3YwKTsKKwl9IGVsc2UgaWYgKFdJRlNJR05BTEVEKHN0YXR1cykpIHsKKwkJY29kZSA9IFdURVJNU0lHKHN0YXR1cyk7CisJCWVycm9yKCIlcyBkaWVkIG9mIHNpZ25hbCAlZCIsIGFyZ3YwLCBjb2RlKTsKKwkJLyoKKwkJICogVGhpcyByZXR1cm4gdmFsdWUgaXMgY2hvc2VuIHNvIHRoYXQgY29kZSAmIDB4ZmYKKwkJICogbWltaWNzIHRoZSBleGl0IGNvZGUgdGhhdCBhIFBPU0lYIHNoZWxsIHdvdWxkIHJlcG9ydCBmb3IKKwkJICogYSBwcm9ncmFtIHRoYXQgZGllZCBmcm9tIHRoaXMgc2lnbmFsLgorCQkgKi8KKwkJY29kZSAtPSAxMjg7CisJfSBlbHNlIGlmIChXSUZFWElURUQoc3RhdHVzKSkgeworCQljb2RlID0gV0VYSVRTVEFUVVMoc3RhdHVzKTsKKwkJLyoKKwkJICogQ29udmVydCBzcGVjaWFsIGV4aXQgY29kZSB3aGVuIGV4ZWN2cCBmYWlsZWQuCisJCSAqLworCQlpZiAoY29kZSA9PSAxMjcpIHsKKwkJCWNvZGUgPSAtMTsKKwkJCWZhaWxlZF9lcnJubyA9IEVOT0VOVDsKKwkJCWlmICghc2lsZW50X2V4ZWNfZmFpbHVyZSkKKwkJCQllcnJvcigiY2Fubm90IHJ1biAlczogJXMiLCBhcmd2MCwKKwkJCQkJc3RyZXJyb3IoRU5PRU5UKSk7CisJCX0KKwl9IGVsc2UgeworCQllcnJvcigid2FpdHBpZCBpcyBjb25mdXNlZCAoJXMpIiwgYXJndjApOworCX0KKwllcnJubyA9IGZhaWxlZF9lcnJubzsKKwlyZXR1cm4gY29kZTsKK30KIAogaW50IHN0YXJ0X2NvbW1hbmQoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNtZCkKIHsKIAlpbnQgbmVlZF9pbiwgbmVlZF9vdXQsIG5lZWRfZXJyOwogCWludCBmZGluWzJdLCBmZG91dFsyXSwgZmRlcnJbMl07CisJaW50IGZhaWxlZF9lcnJubyA9IGZhaWxlZF9lcnJubzsKIAogCS8qCiAJICogSW4gY2FzZSBvZiBlcnJvcnMgd2UgbXVzdCBrZWVwIHRoZSBwcm9taXNlIHRvIGNsb3NlIEZEcwpAQCAtMjgsOSArMTQ5LDEwIEBACiAJbmVlZF9pbiA9ICFjbWQtPm5vX3N0ZGluICYmIGNtZC0+aW4gPCAwOwogCWlmIChuZWVkX2luKSB7CiAJCWlmIChwaXBlKGZkaW4pIDwgMCkgeworCQkJZmFpbGVkX2Vycm5vID0gZXJybm87CiAJCQlpZiAoY21kLT5vdXQgPiAwKQogCQkJCWNsb3NlKGNtZC0+b3V0KTsKLQkJCXJldHVybiAtRVJSX1JVTl9DT01NQU5EX1BJUEU7CisJCQlnb3RvIGZhaWxfcGlwZTsKIAkJfQogCQljbWQtPmluID0gZmRpblsxXTsKIAl9CkBAIC00MCwxMSArMTYyLDEyIEBACiAJCSYmIGNtZC0+b3V0IDwgMDsKIAlpZiAobmVlZF9vdXQpIHsKIAkJaWYgKHBpcGUoZmRvdXQpIDwgMCkgeworCQkJZmFpbGVkX2Vycm5vID0gZXJybm87CiAJCQlpZiAobmVlZF9pbikKIAkJCQljbG9zZV9wYWlyKGZkaW4pOwogCQkJZWxzZSBpZiAoY21kLT5pbikKIAkJCQljbG9zZShjbWQtPmluKTsKLQkJCXJldHVybiAtRVJSX1JVTl9DT01NQU5EX1BJUEU7CisJCQlnb3RvIGZhaWxfcGlwZTsKIAkJfQogCQljbWQtPm91dCA9IGZkb3V0WzBdOwogCX0KQEAgLTUyLDYgKzE3NSw3IEBACiAJbmVlZF9lcnIgPSAhY21kLT5ub19zdGRlcnIgJiYgY21kLT5lcnIgPCAwOwogCWlmIChuZWVkX2VycikgewogCQlpZiAocGlwZShmZGVycikgPCAwKSB7CisJCQlmYWlsZWRfZXJybm8gPSBlcnJubzsKIAkJCWlmIChuZWVkX2luKQogCQkJCWNsb3NlX3BhaXIoZmRpbik7CiAJCQllbHNlIGlmIChjbWQtPmluKQpAQCAtNjAsMTcgKzE4NCw0MiBAQAogCQkJCWNsb3NlX3BhaXIoZmRvdXQpOwogCQkJZWxzZSBpZiAoY21kLT5vdXQpCiAJCQkJY2xvc2UoY21kLT5vdXQpOwotCQkJcmV0dXJuIC1FUlJfUlVOX0NPTU1BTkRfUElQRTsKK2ZhaWxfcGlwZToKKwkJCWVycm9yKCJjYW5ub3QgY3JlYXRlIHBpcGUgZm9yICVzOiAlcyIsCisJCQkJY21kLT5hcmd2WzBdLCBzdHJlcnJvcihmYWlsZWRfZXJybm8pKTsKKwkJCWVycm5vID0gZmFpbGVkX2Vycm5vOworCQkJcmV0dXJuIC0xOwogCQl9CiAJCWNtZC0+ZXJyID0gZmRlcnJbMF07CiAJfQogCiAJdHJhY2VfYXJndl9wcmludGYoY21kLT5hcmd2LCAidHJhY2U6IHJ1bl9jb21tYW5kOiIpOwogCi0jaWZuZGVmIF9fTUlOR1czMl9fCisjaWZuZGVmIFdJTjMyCit7CisJaW50IG5vdGlmeV9waXBlWzJdOworCWlmIChwaXBlKG5vdGlmeV9waXBlKSkKKwkJbm90aWZ5X3BpcGVbMF0gPSBub3RpZnlfcGlwZVsxXSA9IC0xOworCiAJZmZsdXNoKE5VTEwpOwogCWNtZC0+cGlkID0gZm9yaygpOwogCWlmICghY21kLT5waWQpIHsKKwkJLyoKKwkJICogUmVkaXJlY3QgdGhlIGNoYW5uZWwgdG8gd3JpdGUgc3lzY2FsbCBlcnJvciBtZXNzYWdlcyB0bworCQkgKiBiZWZvcmUgcmVkaXJlY3RpbmcgdGhlIHByb2Nlc3MncyBzdGRlcnIgc28gdGhhdCBhbGwgZGllKCkKKwkJICogaW4gc3Vic2VxdWVudCBjYWxsIHBhdGhzIHVzZSB0aGUgcGFyZW50J3Mgc3RkZXJyLgorCQkgKi8KKwkJaWYgKGNtZC0+bm9fc3RkZXJyIHx8IG5lZWRfZXJyKSB7CisJCQljaGlsZF9lcnIgPSBkdXAoMik7CisJCQlzZXRfY2xvZXhlYyhjaGlsZF9lcnIpOworCQl9CisJCXNldF9kaWVfcm91dGluZShkaWVfY2hpbGQpOworCisJCWNsb3NlKG5vdGlmeV9waXBlWzBdKTsKKwkJc2V0X2Nsb2V4ZWMobm90aWZ5X3BpcGVbMV0pOworCQljaGlsZF9ub3RpZmllciA9IG5vdGlmeV9waXBlWzFdOworCQlhdGV4aXQobm90aWZ5X3BhcmVudCk7CisKIAkJaWYgKGNtZC0+bm9fc3RkaW4pCiAJCQlkdXBfZGV2bnVsbCgwKTsKIAkJZWxzZSBpZiAobmVlZF9pbikgewpAQCAtODYsNiArMjM1LDkgQEAKIAkJZWxzZSBpZiAobmVlZF9lcnIpIHsKIAkJCWR1cDIoZmRlcnJbMV0sIDIpOwogCQkJY2xvc2VfcGFpcihmZGVycik7CisJCX0gZWxzZSBpZiAoY21kLT5lcnIgPiAxKSB7CisJCQlkdXAyKGNtZC0+ZXJyLCAyKTsKKwkJCWNsb3NlKGNtZC0+ZXJyKTsKIAkJfQogCiAJCWlmIChjbWQtPm5vX3N0ZG91dCkKQEAgLTEwMSw4ICsyNTMsOCBAQAogCQl9CiAKIAkJaWYgKGNtZC0+ZGlyICYmIGNoZGlyKGNtZC0+ZGlyKSkKLQkJCWRpZSgiZXhlYyAlczogY2QgdG8gJXMgZmFpbGVkICglcykiLCBjbWQtPmFyZ3ZbMF0sCi0JCQkgICAgY21kLT5kaXIsIHN0cmVycm9yKGVycm5vKSk7CisJCQlkaWVfZXJybm8oImV4ZWMgJyVzJzogY2QgdG8gJyVzJyBmYWlsZWQiLCBjbWQtPmFyZ3ZbMF0sCisJCQkgICAgY21kLT5kaXIpOwogCQlpZiAoY21kLT5lbnYpIHsKIAkJCWZvciAoOyAqY21kLT5lbnY7IGNtZC0+ZW52KyspIHsKIAkJCQlpZiAoc3RyY2hyKCpjbWQtPmVudiwgJz0nKSkKQEAgLTExMSw2OCArMjYzLDEwMSBAQAogCQkJCQl1bnNldGVudigqY21kLT5lbnYpOwogCQkJfQogCQl9Ci0JCWlmIChjbWQtPnByZWV4ZWNfY2IpCisJCWlmIChjbWQtPnByZWV4ZWNfY2IpIHsKKwkJCS8qCisJCQkgKiBXZSBjYW5ub3QgcHJlZGljdCB3aGF0IHRoZSBwcmUtZXhlYyBjYWxsYmFjayBkb2VzLgorCQkJICogRm9yZ28gcGFyZW50IG5vdGlmaWNhdGlvbi4KKwkJCSAqLworCQkJY2xvc2UoY2hpbGRfbm90aWZpZXIpOworCQkJY2hpbGRfbm90aWZpZXIgPSAtMTsKKwogCQkJY21kLT5wcmVleGVjX2NiKCk7CisJCX0KIAkJaWYgKGNtZC0+Z2l0X2NtZCkgewogCQkJZXhlY3ZfZ2l0X2NtZChjbWQtPmFyZ3YpOworCQl9IGVsc2UgaWYgKGNtZC0+dXNlX3NoZWxsKSB7CisJCQlleGVjdl9zaGVsbF9jbWQoY21kLT5hcmd2KTsKIAkJfSBlbHNlIHsKIAkJCWV4ZWN2cChjbWQtPmFyZ3ZbMF0sIChjaGFyICpjb25zdCopIGNtZC0+YXJndik7CiAJCX0KLQkJdHJhY2VfcHJpbnRmKCJ0cmFjZTogZXhlYyAnJXMnIGZhaWxlZDogJXNcbiIsIGNtZC0+YXJndlswXSwKLQkJCQlzdHJlcnJvcihlcnJubykpOwotCQlleGl0KDEyNyk7CisJCS8qCisJCSAqIERvIG5vdCBjaGVjayBmb3IgY21kLT5zaWxlbnRfZXhlY19mYWlsdXJlOyB0aGUgcGFyZW50CisJCSAqIHByb2Nlc3Mgd2lsbCBjaGVjayBpdCB3aGVuIGl0IHNlZXMgdGhpcyBleGl0IGNvZGUuCisJCSAqLworCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQkJZXhpdCgxMjcpOworCQllbHNlCisJCQlkaWVfZXJybm8oImNhbm5vdCBleGVjICclcyciLCBjbWQtPmFyZ3ZbMF0pOwogCX0KKwlpZiAoY21kLT5waWQgPCAwKQorCQllcnJvcigiY2Fubm90IGZvcmsoKSBmb3IgJXM6ICVzIiwgY21kLT5hcmd2WzBdLAorCQkJc3RyZXJyb3IoZmFpbGVkX2Vycm5vID0gZXJybm8pKTsKKworCS8qCisJICogV2FpdCBmb3IgY2hpbGQncyBleGVjdnAuIElmIHRoZSBleGVjdnAgc3VjY2VlZHMgKG9yIGlmIGZvcmsoKQorCSAqIGZhaWxlZCksIEVPRiBpcyBzZWVuIGltbWVkaWF0ZWx5IGJ5IHRoZSBwYXJlbnQuIE90aGVyd2lzZSwgdGhlCisJICogY2hpbGQgcHJvY2VzcyBzZW5kcyBhIHNpbmdsZSBieXRlLgorCSAqIE5vdGUgdGhhdCB1c2Ugb2YgdGhpcyBpbmZyYXN0cnVjdHVyZSBpcyBjb21wbGV0ZWx5IGFkdmlzb3J5LAorCSAqIHRoZXJlZm9yZSwgd2Uga2VlcCBlcnJvciBjaGVja3MgbWluaW1hbC4KKwkgKi8KKwljbG9zZShub3RpZnlfcGlwZVsxXSk7CisJaWYgKHJlYWQobm90aWZ5X3BpcGVbMF0sICZub3RpZnlfcGlwZVsxXSwgMSkgPT0gMSkgeworCQkvKgorCQkgKiBBdCB0aGlzIHBvaW50IHdlIGtub3cgdGhhdCBmb3JrKCkgc3VjY2VlZGVkLCBidXQgZXhlY3ZwKCkKKwkJICogZmFpbGVkLiBFcnJvcnMgaGF2ZSBiZWVuIHJlcG9ydGVkIHRvIG91ciBzdGRlcnIuCisJCSAqLworCQl3YWl0X29yX3doaW5lKGNtZC0+cGlkLCBjbWQtPmFyZ3ZbMF0sCisJCQkgICAgICBjbWQtPnNpbGVudF9leGVjX2ZhaWx1cmUpOworCQlmYWlsZWRfZXJybm8gPSBlcnJubzsKKwkJY21kLT5waWQgPSAtMTsKKwl9CisJY2xvc2Uobm90aWZ5X3BpcGVbMF0pOworfQogI2Vsc2UKLQlpbnQgczAgPSAtMSwgczEgPSAtMSwgczIgPSAtMTsJLyogYmFja3VwcyBvZiBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIgKi8KK3sKKwlpbnQgZmhpbiA9IDAsIGZob3V0ID0gMSwgZmhlcnIgPSAyOwogCWNvbnN0IGNoYXIgKipzYXJndiA9IGNtZC0+YXJndjsKIAljaGFyICoqZW52ID0gZW52aXJvbjsKIAotCWlmIChjbWQtPm5vX3N0ZGluKSB7Ci0JCXMwID0gZHVwKDApOwotCQlkdXBfZGV2bnVsbCgwKTsKLQl9IGVsc2UgaWYgKG5lZWRfaW4pIHsKLQkJczAgPSBkdXAoMCk7Ci0JCWR1cDIoZmRpblswXSwgMCk7Ci0JfSBlbHNlIGlmIChjbWQtPmluKSB7Ci0JCXMwID0gZHVwKDApOwotCQlkdXAyKGNtZC0+aW4sIDApOwotCX0KKwlpZiAoY21kLT5ub19zdGRpbikKKwkJZmhpbiA9IG9wZW4oIi9kZXYvbnVsbCIsIE9fUkRXUik7CisJZWxzZSBpZiAobmVlZF9pbikKKwkJZmhpbiA9IGR1cChmZGluWzBdKTsKKwllbHNlIGlmIChjbWQtPmluKQorCQlmaGluID0gZHVwKGNtZC0+aW4pOwogCi0JaWYgKGNtZC0+bm9fc3RkZXJyKSB7Ci0JCXMyID0gZHVwKDIpOwotCQlkdXBfZGV2bnVsbCgyKTsKLQl9IGVsc2UgaWYgKG5lZWRfZXJyKSB7Ci0JCXMyID0gZHVwKDIpOwotCQlkdXAyKGZkZXJyWzFdLCAyKTsKLQl9CisJaWYgKGNtZC0+bm9fc3RkZXJyKQorCQlmaGVyciA9IG9wZW4oIi9kZXYvbnVsbCIsIE9fUkRXUik7CisJZWxzZSBpZiAobmVlZF9lcnIpCisJCWZoZXJyID0gZHVwKGZkZXJyWzFdKTsKKwllbHNlIGlmIChjbWQtPmVyciA+IDIpCisJCWZoZXJyID0gZHVwKGNtZC0+ZXJyKTsKIAotCWlmIChjbWQtPm5vX3N0ZG91dCkgewotCQlzMSA9IGR1cCgxKTsKLQkJZHVwX2Rldm51bGwoMSk7Ci0JfSBlbHNlIGlmIChjbWQtPnN0ZG91dF90b19zdGRlcnIpIHsKLQkJczEgPSBkdXAoMSk7Ci0JCWR1cDIoMiwgMSk7Ci0JfSBlbHNlIGlmIChuZWVkX291dCkgewotCQlzMSA9IGR1cCgxKTsKLQkJZHVwMihmZG91dFsxXSwgMSk7Ci0JfSBlbHNlIGlmIChjbWQtPm91dCA+IDEpIHsKLQkJczEgPSBkdXAoMSk7Ci0JCWR1cDIoY21kLT5vdXQsIDEpOwotCX0KKwlpZiAoY21kLT5ub19zdGRvdXQpCisJCWZob3V0ID0gb3BlbigiL2Rldi9udWxsIiwgT19SRFdSKTsKKwllbHNlIGlmIChjbWQtPnN0ZG91dF90b19zdGRlcnIpCisJCWZob3V0ID0gZHVwKGZoZXJyKTsKKwllbHNlIGlmIChuZWVkX291dCkKKwkJZmhvdXQgPSBkdXAoZmRvdXRbMV0pOworCWVsc2UgaWYgKGNtZC0+b3V0ID4gMSkKKwkJZmhvdXQgPSBkdXAoY21kLT5vdXQpOwogCiAJaWYgKGNtZC0+ZGlyKQogCQlkaWUoImNoZGlyIGluIHN0YXJ0X2NvbW1hbmQoKSBub3QgaW1wbGVtZW50ZWQiKTsKLQlpZiAoY21kLT5lbnYpIHsKLQkJZW52ID0gY29weV9lbnZpcm9uKCk7Ci0JCWZvciAoOyAqY21kLT5lbnY7IGNtZC0+ZW52KyspCi0JCQllbnYgPSBlbnZfc2V0ZW52KGVudiwgKmNtZC0+ZW52KTsKLQl9CisJaWYgKGNtZC0+ZW52KQorCQllbnYgPSBtYWtlX2F1Z21lbnRlZF9lbnZpcm9uKGNtZC0+ZW52KTsKIAogCWlmIChjbWQtPmdpdF9jbWQpIHsKIAkJY21kLT5hcmd2ID0gcHJlcGFyZV9naXRfY21kKGNtZC0+YXJndik7CisJfSBlbHNlIGlmIChjbWQtPnVzZV9zaGVsbCkgeworCQljbWQtPmFyZ3YgPSBwcmVwYXJlX3NoZWxsX2NtZChjbWQtPmFyZ3YpOwogCX0KIAotCWNtZC0+cGlkID0gbWluZ3dfc3Bhd252cGUoY21kLT5hcmd2WzBdLCBjbWQtPmFyZ3YsIGVudik7CisJY21kLT5waWQgPSBtaW5nd19zcGF3bnZwZShjbWQtPmFyZ3ZbMF0sIGNtZC0+YXJndiwgZW52LAorCQkJCSAgZmhpbiwgZmhvdXQsIGZoZXJyKTsKKwlmYWlsZWRfZXJybm8gPSBlcnJubzsKKwlpZiAoY21kLT5waWQgPCAwICYmICghY21kLT5zaWxlbnRfZXhlY19mYWlsdXJlIHx8IGVycm5vICE9IEVOT0VOVCkpCisJCWVycm9yKCJjYW5ub3Qgc3Bhd24gJXM6ICVzIiwgY21kLT5hcmd2WzBdLCBzdHJlcnJvcihlcnJubykpOwogCiAJaWYgKGNtZC0+ZW52KQogCQlmcmVlX2Vudmlyb24oZW52KTsKQEAgLTE4MCwxNiArMzY1LDE2IEBACiAJCWZyZWUoY21kLT5hcmd2KTsKIAogCWNtZC0+YXJndiA9IHNhcmd2OwotCWlmIChzMCA+PSAwKQotCQlkdXAyKHMwLCAwKSwgY2xvc2UoczApOwotCWlmIChzMSA+PSAwKQotCQlkdXAyKHMxLCAxKSwgY2xvc2UoczEpOwotCWlmIChzMiA+PSAwKQotCQlkdXAyKHMyLCAyKSwgY2xvc2UoczIpOworCWlmIChmaGluICE9IDApCisJCWNsb3NlKGZoaW4pOworCWlmIChmaG91dCAhPSAxKQorCQljbG9zZShmaG91dCk7CisJaWYgKGZoZXJyICE9IDIpCisJCWNsb3NlKGZoZXJyKTsKK30KICNlbmRpZgogCiAJaWYgKGNtZC0+cGlkIDwgMCkgewotCQlpbnQgZXJyID0gZXJybm87CiAJCWlmIChuZWVkX2luKQogCQkJY2xvc2VfcGFpcihmZGluKTsKIAkJZWxzZSBpZiAoY21kLT5pbikKQEAgLTIwMCw5ICszODUsOCBAQAogCQkJY2xvc2UoY21kLT5vdXQpOwogCQlpZiAobmVlZF9lcnIpCiAJCQljbG9zZV9wYWlyKGZkZXJyKTsKLQkJcmV0dXJuIGVyciA9PSBFTk9FTlQgPwotCQkJLUVSUl9SVU5fQ09NTUFORF9FWEVDIDoKLQkJCS1FUlJfUlVOX0NPTU1BTkRfRk9SSzsKKwkJZXJybm8gPSBmYWlsZWRfZXJybm87CisJCXJldHVybiAtMTsKIAl9CiAKIAlpZiAobmVlZF9pbikKQEAgLTIxNyw0NCArNDAxLDE1IEBACiAKIAlpZiAobmVlZF9lcnIpCiAJCWNsb3NlKGZkZXJyWzFdKTsKKwllbHNlIGlmIChjbWQtPmVycikKKwkJY2xvc2UoY21kLT5lcnIpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgd2FpdF9vcl93aGluZShwaWRfdCBwaWQpCi17Ci0JZm9yICg7OykgewotCQlpbnQgc3RhdHVzLCBjb2RlOwotCQlwaWRfdCB3YWl0aW5nID0gd2FpdHBpZChwaWQsICZzdGF0dXMsIDApOwotCi0JCWlmICh3YWl0aW5nIDwgMCkgewotCQkJaWYgKGVycm5vID09IEVJTlRSKQotCQkJCWNvbnRpbnVlOwotCQkJZXJyb3IoIndhaXRwaWQgZmFpbGVkICglcykiLCBzdHJlcnJvcihlcnJubykpOwotCQkJcmV0dXJuIC1FUlJfUlVOX0NPTU1BTkRfV0FJVFBJRDsKLQkJfQotCQlpZiAod2FpdGluZyAhPSBwaWQpCi0JCQlyZXR1cm4gLUVSUl9SVU5fQ09NTUFORF9XQUlUUElEX1dST05HX1BJRDsKLQkJaWYgKFdJRlNJR05BTEVEKHN0YXR1cykpCi0JCQlyZXR1cm4gLUVSUl9SVU5fQ09NTUFORF9XQUlUUElEX1NJR05BTDsKLQotCQlpZiAoIVdJRkVYSVRFRChzdGF0dXMpKQotCQkJcmV0dXJuIC1FUlJfUlVOX0NPTU1BTkRfV0FJVFBJRF9OT0VYSVQ7Ci0JCWNvZGUgPSBXRVhJVFNUQVRVUyhzdGF0dXMpOwotCQlzd2l0Y2ggKGNvZGUpIHsKLQkJY2FzZSAxMjc6Ci0JCQlyZXR1cm4gLUVSUl9SVU5fQ09NTUFORF9FWEVDOwotCQljYXNlIDA6Ci0JCQlyZXR1cm4gMDsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtY29kZTsKLQkJfQotCX0KLX0KLQogaW50IGZpbmlzaF9jb21tYW5kKHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjbWQpCiB7Ci0JcmV0dXJuIHdhaXRfb3Jfd2hpbmUoY21kLT5waWQpOworCXJldHVybiB3YWl0X29yX3doaW5lKGNtZC0+cGlkLCBjbWQtPmFyZ3ZbMF0sIGNtZC0+c2lsZW50X2V4ZWNfZmFpbHVyZSk7CiB9CiAKIGludCBydW5fY29tbWFuZChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY21kKQpAQCAtMjc0LDYgKzQyOSw4IEBACiAJY21kLT5ub19zdGRpbiA9IG9wdCAmIFJVTl9DT01NQU5EX05PX1NURElOID8gMSA6IDA7CiAJY21kLT5naXRfY21kID0gb3B0ICYgUlVOX0dJVF9DTUQgPyAxIDogMDsKIAljbWQtPnN0ZG91dF90b19zdGRlcnIgPSBvcHQgJiBSVU5fQ09NTUFORF9TVERPVVRfVE9fU1RERVJSID8gMSA6IDA7CisJY21kLT5zaWxlbnRfZXhlY19mYWlsdXJlID0gb3B0ICYgUlVOX1NJTEVOVF9FWEVDX0ZBSUxVUkUgPyAxIDogMDsKKwljbWQtPnVzZV9zaGVsbCA9IG9wdCAmIFJVTl9VU0lOR19TSEVMTCA/IDEgOiAwOwogfQogCiBpbnQgcnVuX2NvbW1hbmRfdl9vcHQoY29uc3QgY2hhciAqKmFyZ3YsIGludCBvcHQpCkBAIC0yOTIsNTYgKzQ0OSwxMTAgQEAKIAlyZXR1cm4gcnVuX2NvbW1hbmQoJmNtZCk7CiB9CiAKLSNpZmRlZiBfX01JTkdXMzJfXwotc3RhdGljIF9fc3RkY2FsbCB1bnNpZ25lZCBydW5fdGhyZWFkKHZvaWQgKmRhdGEpCisjaWZkZWYgV0lOMzIKK3N0YXRpYyB1bnNpZ25lZCBfX3N0ZGNhbGwgcnVuX3RocmVhZCh2b2lkICpkYXRhKQogewogCXN0cnVjdCBhc3luYyAqYXN5bmMgPSBkYXRhOwotCXJldHVybiBhc3luYy0+cHJvYyhhc3luYy0+ZmRfZm9yX3Byb2MsIGFzeW5jLT5kYXRhKTsKKwlyZXR1cm4gYXN5bmMtPnByb2MoYXN5bmMtPnByb2NfaW4sIGFzeW5jLT5wcm9jX291dCwgYXN5bmMtPmRhdGEpOwogfQogI2VuZGlmCiAKIGludCBzdGFydF9hc3luYyhzdHJ1Y3QgYXN5bmMgKmFzeW5jKQogewotCWludCBwaXBlX291dFsyXTsKKwlpbnQgbmVlZF9pbiwgbmVlZF9vdXQ7CisJaW50IGZkaW5bMl0sIGZkb3V0WzJdOworCWludCBwcm9jX2luLCBwcm9jX291dDsKIAotCWlmIChwaXBlKHBpcGVfb3V0KSA8IDApCi0JCXJldHVybiBlcnJvcigiY2Fubm90IGNyZWF0ZSBwaXBlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Ci0JYXN5bmMtPm91dCA9IHBpcGVfb3V0WzBdOworCW5lZWRfaW4gPSBhc3luYy0+aW4gPCAwOworCWlmIChuZWVkX2luKSB7CisJCWlmIChwaXBlKGZkaW4pIDwgMCkgeworCQkJaWYgKGFzeW5jLT5vdXQgPiAwKQorCQkJCWNsb3NlKGFzeW5jLT5vdXQpOworCQkJcmV0dXJuIGVycm9yKCJjYW5ub3QgY3JlYXRlIHBpcGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJfQorCQlhc3luYy0+aW4gPSBmZGluWzFdOworCX0KIAotI2lmbmRlZiBfX01JTkdXMzJfXworCW5lZWRfb3V0ID0gYXN5bmMtPm91dCA8IDA7CisJaWYgKG5lZWRfb3V0KSB7CisJCWlmIChwaXBlKGZkb3V0KSA8IDApIHsKKwkJCWlmIChuZWVkX2luKQorCQkJCWNsb3NlX3BhaXIoZmRpbik7CisJCQllbHNlIGlmIChhc3luYy0+aW4pCisJCQkJY2xvc2UoYXN5bmMtPmluKTsKKwkJCXJldHVybiBlcnJvcigiY2Fubm90IGNyZWF0ZSBwaXBlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCX0KKwkJYXN5bmMtPm91dCA9IGZkb3V0WzBdOworCX0KKworCWlmIChuZWVkX2luKQorCQlwcm9jX2luID0gZmRpblswXTsKKwllbHNlIGlmIChhc3luYy0+aW4pCisJCXByb2NfaW4gPSBhc3luYy0+aW47CisJZWxzZQorCQlwcm9jX2luID0gLTE7CisKKwlpZiAobmVlZF9vdXQpCisJCXByb2Nfb3V0ID0gZmRvdXRbMV07CisJZWxzZSBpZiAoYXN5bmMtPm91dCkKKwkJcHJvY19vdXQgPSBhc3luYy0+b3V0OworCWVsc2UKKwkJcHJvY19vdXQgPSAtMTsKKworI2lmbmRlZiBXSU4zMgogCS8qIEZsdXNoIHN0ZGlvIGJlZm9yZSBmb3JrKCkgdG8gYXZvaWQgY2xvbmluZyBidWZmZXJzICovCiAJZmZsdXNoKE5VTEwpOwogCiAJYXN5bmMtPnBpZCA9IGZvcmsoKTsKIAlpZiAoYXN5bmMtPnBpZCA8IDApIHsKIAkJZXJyb3IoImZvcmsgKGFzeW5jKSBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKLQkJY2xvc2VfcGFpcihwaXBlX291dCk7Ci0JCXJldHVybiAtMTsKKwkJZ290byBlcnJvcjsKIAl9CiAJaWYgKCFhc3luYy0+cGlkKSB7Ci0JCWNsb3NlKHBpcGVfb3V0WzBdKTsKLQkJZXhpdCghIWFzeW5jLT5wcm9jKHBpcGVfb3V0WzFdLCBhc3luYy0+ZGF0YSkpOworCQlpZiAobmVlZF9pbikKKwkJCWNsb3NlKGZkaW5bMV0pOworCQlpZiAobmVlZF9vdXQpCisJCQljbG9zZShmZG91dFswXSk7CisJCWV4aXQoISFhc3luYy0+cHJvYyhwcm9jX2luLCBwcm9jX291dCwgYXN5bmMtPmRhdGEpKTsKIAl9Ci0JY2xvc2UocGlwZV9vdXRbMV0pOworCisJaWYgKG5lZWRfaW4pCisJCWNsb3NlKGZkaW5bMF0pOworCWVsc2UgaWYgKGFzeW5jLT5pbikKKwkJY2xvc2UoYXN5bmMtPmluKTsKKworCWlmIChuZWVkX291dCkKKwkJY2xvc2UoZmRvdXRbMV0pOworCWVsc2UgaWYgKGFzeW5jLT5vdXQpCisJCWNsb3NlKGFzeW5jLT5vdXQpOwogI2Vsc2UKLQlhc3luYy0+ZmRfZm9yX3Byb2MgPSBwaXBlX291dFsxXTsKKwlhc3luYy0+cHJvY19pbiA9IHByb2NfaW47CisJYXN5bmMtPnByb2Nfb3V0ID0gcHJvY19vdXQ7CiAJYXN5bmMtPnRpZCA9IChIQU5ETEUpIF9iZWdpbnRocmVhZGV4KE5VTEwsIDAsIHJ1bl90aHJlYWQsIGFzeW5jLCAwLCBOVUxMKTsKIAlpZiAoIWFzeW5jLT50aWQpIHsKIAkJZXJyb3IoImNhbm5vdCBjcmVhdGUgdGhyZWFkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Ci0JCWNsb3NlX3BhaXIocGlwZV9vdXQpOwotCQlyZXR1cm4gLTE7CisJCWdvdG8gZXJyb3I7CiAJfQogI2VuZGlmCiAJcmV0dXJuIDA7CisKK2Vycm9yOgorCWlmIChuZWVkX2luKQorCQljbG9zZV9wYWlyKGZkaW4pOworCWVsc2UgaWYgKGFzeW5jLT5pbikKKwkJY2xvc2UoYXN5bmMtPmluKTsKKworCWlmIChuZWVkX291dCkKKwkJY2xvc2VfcGFpcihmZG91dCk7CisJZWxzZSBpZiAoYXN5bmMtPm91dCkKKwkJY2xvc2UoYXN5bmMtPm91dCk7CisJcmV0dXJuIC0xOwogfQogCiBpbnQgZmluaXNoX2FzeW5jKHN0cnVjdCBhc3luYyAqYXN5bmMpCiB7Ci0jaWZuZGVmIF9fTUlOR1czMl9fCi0JaW50IHJldCA9IDA7Ci0KLQlpZiAod2FpdF9vcl93aGluZShhc3luYy0+cGlkKSkKLQkJcmV0ID0gZXJyb3IoIndhaXRwaWQgKGFzeW5jKSBmYWlsZWQiKTsKKyNpZm5kZWYgV0lOMzIKKwlpbnQgcmV0ID0gd2FpdF9vcl93aGluZShhc3luYy0+cGlkLCAiY2hpbGQgcHJvY2VzcyIsIDApOwogI2Vsc2UKIAlEV09SRCByZXQgPSAwOwogCWlmIChXYWl0Rm9yU2luZ2xlT2JqZWN0KGFzeW5jLT50aWQsIElORklOSVRFKSAhPSBXQUlUX09CSkVDVF8wKQpAQCAtMzg1LDE1ICs1OTYsNyBAQAogCQlob29rLmVudiA9IGVudjsKIAl9CiAKLQlyZXQgPSBzdGFydF9jb21tYW5kKCZob29rKTsKKwlyZXQgPSBydW5fY29tbWFuZCgmaG9vayk7CiAJZnJlZShhcmd2KTsKLQlpZiAocmV0KSB7Ci0JCXdhcm5pbmcoIkNvdWxkIG5vdCBzcGF3biAlcyIsIGFyZ3ZbMF0pOwotCQlyZXR1cm4gcmV0OwotCX0KLQlyZXQgPSBmaW5pc2hfY29tbWFuZCgmaG9vayk7Ci0JaWYgKHJldCA9PSAtRVJSX1JVTl9DT01NQU5EX1dBSVRQSURfU0lHTkFMKQotCQl3YXJuaW5nKCIlcyBleGl0ZWQgZHVlIHRvIHVuY2F1Z2h0IHNpZ25hbCIsIGFyZ3ZbMF0pOwotCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL3J1bi1jb21tYW5kLmggYi9ydW4tY29tbWFuZC5oCmluZGV4IGUzNDU1MDIuLjk0NjE5ZjUgMTAwNjQ0Ci0tLSBhL3J1bi1jb21tYW5kLmgKKysrIGIvcnVuLWNvbW1hbmQuaApAQCAtMSwxNyArMSw2IEBACiAjaWZuZGVmIFJVTl9DT01NQU5EX0gKICNkZWZpbmUgUlVOX0NPTU1BTkRfSAogCi1lbnVtIHsKLQlFUlJfUlVOX0NPTU1BTkRfRk9SSyA9IDEwMDAwLAotCUVSUl9SVU5fQ09NTUFORF9FWEVDLAotCUVSUl9SVU5fQ09NTUFORF9QSVBFLAotCUVSUl9SVU5fQ09NTUFORF9XQUlUUElELAotCUVSUl9SVU5fQ09NTUFORF9XQUlUUElEX1dST05HX1BJRCwKLQlFUlJfUlVOX0NPTU1BTkRfV0FJVFBJRF9TSUdOQUwsCi0JRVJSX1JVTl9DT01NQU5EX1dBSVRQSURfTk9FWElULAotfTsKLSNkZWZpbmUgSVNfUlVOX0NPTU1BTkRfRVJSKHgpICgtKHgpID49IEVSUl9SVU5fQ09NTUFORF9GT1JLKQotCiBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyB7CiAJY29uc3QgY2hhciAqKmFyZ3Y7CiAJcGlkX3QgcGlkOwpAQCAtMjksNyArMTgsNyBAQAogCSAqIC0gU3BlY2lmeSA+IDAgdG8gc2V0IGEgY2hhbm5lbCB0byBhIHBhcnRpY3VsYXIgRkQgYXMgZm9sbG93czoKIAkgKiAgICAgLmluOiBhIHJlYWRhYmxlIEZELCBiZWNvbWVzIGNoaWxkJ3Mgc3RkaW4KIAkgKiAgICAgLm91dDogYSB3cml0YWJsZSBGRCwgYmVjb21lcyBjaGlsZCdzIHN0ZG91dC9zdGRlcnIKLQkgKiAgICAgLmVyciA+IDAgbm90IHN1cHBvcnRlZAorCSAqICAgICAuZXJyOiBhIHdyaXRhYmxlIEZELCBiZWNvbWVzIGNoaWxkJ3Mgc3RkZXJyCiAJICogICBUaGUgc3BlY2lmaWVkIEZEIGlzIGNsb3NlZCBieSBzdGFydF9jb21tYW5kKCksIGV2ZW4gaW4gY2FzZQogCSAqICAgb2YgZXJyb3JzIQogCSAqLwpAQCAtNDIsNyArMzEsOSBAQAogCXVuc2lnbmVkIG5vX3N0ZG91dDoxOwogCXVuc2lnbmVkIG5vX3N0ZGVycjoxOwogCXVuc2lnbmVkIGdpdF9jbWQ6MTsgLyogaWYgdGhpcyBpcyB0byBiZSBnaXQgc3ViLWNvbW1hbmQgKi8KKwl1bnNpZ25lZCBzaWxlbnRfZXhlY19mYWlsdXJlOjE7CiAJdW5zaWduZWQgc3Rkb3V0X3RvX3N0ZGVycjoxOworCXVuc2lnbmVkIHVzZV9zaGVsbDoxOwogCXZvaWQgKCpwcmVleGVjX2NiKSh2b2lkKTsKIH07CiAKQEAgLTU1LDYgKzQ2LDggQEAKICNkZWZpbmUgUlVOX0NPTU1BTkRfTk9fU1RESU4gMQogI2RlZmluZSBSVU5fR0lUX0NNRAkgICAgIDIJLypJZiB0aGlzIGlzIHRvIGJlIGdpdCBzdWItY29tbWFuZCAqLwogI2RlZmluZSBSVU5fQ09NTUFORF9TVERPVVRfVE9fU1RERVJSIDQKKyNkZWZpbmUgUlVOX1NJTEVOVF9FWEVDX0ZBSUxVUkUgOAorI2RlZmluZSBSVU5fVVNJTkdfU0hFTEwgMTYKIGludCBydW5fY29tbWFuZF92X29wdChjb25zdCBjaGFyICoqYXJndiwgaW50IG9wdCk7CiAKIC8qCkBAIC03MywxNyArNjYsMjAgQEAKICAqLwogc3RydWN0IGFzeW5jIHsKIAkvKgotCSAqIHByb2Mgd3JpdGVzIHRvIGZkIGFuZCBjbG9zZXMgaXQ7CisJICogcHJvYyByZWFkcyBmcm9tIGluOyBjbG9zZXMgaXQgYmVmb3JlIHJldHVybgorCSAqIHByb2Mgd3JpdGVzIHRvIG91dDsgY2xvc2VzIGl0IGJlZm9yZSByZXR1cm4KIAkgKiByZXR1cm5zIDAgb24gc3VjY2Vzcywgbm9uLXplcm8gb24gZmFpbHVyZQogCSAqLwotCWludCAoKnByb2MpKGludCBmZCwgdm9pZCAqZGF0YSk7CisJaW50ICgqcHJvYykoaW50IGluLCBpbnQgb3V0LCB2b2lkICpkYXRhKTsKIAl2b2lkICpkYXRhOworCWludCBpbjsJCS8qIGNhbGxlciB3cml0ZXMgaGVyZSBhbmQgY2xvc2VzIGl0ICovCiAJaW50IG91dDsJLyogY2FsbGVyIHJlYWRzIGZyb20gaGVyZSBhbmQgY2xvc2VzIGl0ICovCi0jaWZuZGVmIF9fTUlOR1czMl9fCisjaWZuZGVmIFdJTjMyCiAJcGlkX3QgcGlkOwogI2Vsc2UKIAlIQU5ETEUgdGlkOwotCWludCBmZF9mb3JfcHJvYzsKKwlpbnQgcHJvY19pbjsKKwlpbnQgcHJvY19vdXQ7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL3NlbmQtcGFjay5oIGIvc2VuZC1wYWNrLmgKaW5kZXggMWQ3YjFiMy4uMjgxNDFhYyAxMDA2NDQKLS0tIGEvc2VuZC1wYWNrLmgKKysrIGIvc2VuZC1wYWNrLmgKQEAgLTMsMTEgKzMsMTMgQEAKIAogc3RydWN0IHNlbmRfcGFja19hcmdzIHsKIAl1bnNpZ25lZCB2ZXJib3NlOjEsCisJCXF1aWV0OjEsCiAJCXNlbmRfbWlycm9yOjEsCiAJCWZvcmNlX3VwZGF0ZToxLAogCQl1c2VfdGhpbl9wYWNrOjEsCiAJCXVzZV9vZnNfZGVsdGE6MSwKLQkJZHJ5X3J1bjoxOworCQlkcnlfcnVuOjEsCisJCXN0YXRlbGVzc19ycGM6MTsKIH07CiAKIGludCBzZW5kX3BhY2soc3RydWN0IHNlbmRfcGFja19hcmdzICphcmdzLApkaWZmIC0tZ2l0IGEvc2V0dXAuYyBiL3NldHVwLmMKaW5kZXggZWJkNjBkZS4uZmFjMzRmNyAxMDA2NDQKLS0tIGEvc2V0dXAuYworKysgYi9zZXR1cC5jCkBAIC0xOCw5ICsxOCwxMiBAQAogCWlmIChub3JtYWxpemVfcGF0aF9jb3B5KHNhbml0aXplZCwgc2FuaXRpemVkKSkKIAkJZ290byBlcnJvcl9vdXQ7CiAJaWYgKGlzX2Fic29sdXRlX3BhdGgob3JpZykpIHsKKwkJc2l6ZV90IGxlbiwgdG90YWw7CiAJCWNvbnN0IGNoYXIgKndvcmtfdHJlZSA9IGdldF9naXRfd29ya190cmVlKCk7Ci0JCXNpemVfdCBsZW4gPSBzdHJsZW4od29ya190cmVlKTsKLQkJc2l6ZV90IHRvdGFsID0gc3RybGVuKHNhbml0aXplZCkgKyAxOworCQlpZiAoIXdvcmtfdHJlZSkKKwkJCWdvdG8gZXJyb3Jfb3V0OworCQlsZW4gPSBzdHJsZW4od29ya190cmVlKTsKKwkJdG90YWwgPSBzdHJsZW4oc2FuaXRpemVkKSArIDE7CiAJCWlmIChzdHJuY21wKHNhbml0aXplZCwgd29ya190cmVlLCBsZW4pIHx8CiAJCSAgICAoc2FuaXRpemVkW2xlbl0gIT0gJ1wwJyAmJiBzYW5pdGl6ZWRbbGVuXSAhPSAnLycpKSB7CiAJCWVycm9yX291dDoKQEAgLTQxLDcgKzQ0LDcgQEAKIGNvbnN0IGNoYXIgKnByZWZpeF9maWxlbmFtZShjb25zdCBjaGFyICpwZngsIGludCBwZnhfbGVuLCBjb25zdCBjaGFyICphcmcpCiB7CiAJc3RhdGljIGNoYXIgcGF0aFtQQVRIX01BWF07Ci0jaWZuZGVmIF9fTUlOR1czMl9fCisjaWZuZGVmIFdJTjMyCiAJaWYgKCFwZnggfHwgISpwZnggfHwgaXNfYWJzb2x1dGVfcGF0aChhcmcpKQogCQlyZXR1cm4gYXJnOwogCW1lbWNweShwYXRoLCBwZngsIHBmeF9sZW4pOwpAQCAtNjEsNiArNjQsMzEgQEAKIAlyZXR1cm4gcGF0aDsKIH0KIAoraW50IGNoZWNrX2ZpbGVuYW1lKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqYXJnKQoreworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IHN0YXQgc3Q7CisKKwluYW1lID0gcHJlZml4ID8gcHJlZml4X2ZpbGVuYW1lKHByZWZpeCwgc3RybGVuKHByZWZpeCksIGFyZykgOiBhcmc7CisJaWYgKCFsc3RhdChuYW1lLCAmc3QpKQorCQlyZXR1cm4gMTsgLyogZmlsZSBleGlzdHMgKi8KKwlpZiAoZXJybm8gPT0gRU5PRU5UIHx8IGVycm5vID09IEVOT1RESVIpCisJCXJldHVybiAwOyAvKiBmaWxlIGRvZXMgbm90IGV4aXN0ICovCisJZGllX2Vycm5vKCJmYWlsZWQgdG8gc3RhdCAnJXMnIiwgYXJnKTsKK30KKworc3RhdGljIHZvaWQgTk9SRVRVUk4gZGllX3ZlcmlmeV9maWxlbmFtZShjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKmFyZykKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXVuc2lnbmVkIG1vZGU7CisJLyogdHJ5IGEgZGV0YWlsZWQgZGlhZ25vc3RpYyAuLi4gKi8KKwlnZXRfc2hhMV93aXRoX21vZGVfMShhcmcsIHNoYTEsICZtb2RlLCAwLCBwcmVmaXgpOworCS8qIC4uLiBvciBmYWxsIGJhY2sgdGhlIG1vc3QgZ2VuZXJhbCBtZXNzYWdlLiAqLworCWRpZSgiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IHVua25vd24gcmV2aXNpb24gb3IgcGF0aCBub3QgaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKwkgICAgIlVzZSAnLS0nIHRvIHNlcGFyYXRlIHBhdGhzIGZyb20gcmV2aXNpb25zIiwgYXJnKTsKKworfQorCiAvKgogICogVmVyaWZ5IGEgZmlsZW5hbWUgdGhhdCB3ZSBnb3QgYXMgYW4gYXJndW1lbnQgZm9yIGEgcGF0aHNwZWMKICAqIGVudHJ5LiBOb3RlIHRoYXQgYSBmaWxlbmFtZSB0aGF0IGJlZ2lucyB3aXRoICItIiBuZXZlciB2ZXJpZmllcwpAQCAtNzAsMTggKzk4LDExIEBACiAgKi8KIHZvaWQgdmVyaWZ5X2ZpbGVuYW1lKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqYXJnKQogewotCWNvbnN0IGNoYXIgKm5hbWU7Ci0Jc3RydWN0IHN0YXQgc3Q7Ci0KIAlpZiAoKmFyZyA9PSAnLScpCiAJCWRpZSgiYmFkIGZsYWcgJyVzJyB1c2VkIGFmdGVyIGZpbGVuYW1lIiwgYXJnKTsKLQluYW1lID0gcHJlZml4ID8gcHJlZml4X2ZpbGVuYW1lKHByZWZpeCwgc3RybGVuKHByZWZpeCksIGFyZykgOiBhcmc7Ci0JaWYgKCFsc3RhdChuYW1lLCAmc3QpKQorCWlmIChjaGVja19maWxlbmFtZShwcmVmaXgsIGFyZykpCiAJCXJldHVybjsKLQlpZiAoZXJybm8gPT0gRU5PRU5UKQotCQlkaWUoImFtYmlndW91cyBhcmd1bWVudCAnJXMnOiB1bmtub3duIHJldmlzaW9uIG9yIHBhdGggbm90IGluIHRoZSB3b3JraW5nIHRyZWUuXG4iCi0JCSAgICAiVXNlICctLScgdG8gc2VwYXJhdGUgcGF0aHMgZnJvbSByZXZpc2lvbnMiLCBhcmcpOwotCWRpZSgiJyVzJzogJXMiLCBhcmcsIHN0cmVycm9yKGVycm5vKSk7CisJZGllX3ZlcmlmeV9maWxlbmFtZShwcmVmaXgsIGFyZyk7CiB9CiAKIC8qCkBAIC05MSwxOSArMTEyLDE0IEBACiAgKi8KIHZvaWQgdmVyaWZ5X25vbl9maWxlbmFtZShjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKmFyZykKIHsKLQljb25zdCBjaGFyICpuYW1lOwotCXN0cnVjdCBzdGF0IHN0OwotCiAJaWYgKCFpc19pbnNpZGVfd29ya190cmVlKCkgfHwgaXNfaW5zaWRlX2dpdF9kaXIoKSkKIAkJcmV0dXJuOwogCWlmICgqYXJnID09ICctJykKIAkJcmV0dXJuOyAvKiBmbGFnICovCi0JbmFtZSA9IHByZWZpeCA/IHByZWZpeF9maWxlbmFtZShwcmVmaXgsIHN0cmxlbihwcmVmaXgpLCBhcmcpIDogYXJnOwotCWlmICghbHN0YXQobmFtZSwgJnN0KSkKLQkJZGllKCJhbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWVcbiIKLQkJICAgICJVc2UgJy0tJyB0byBzZXBhcmF0ZSBmaWxlbmFtZXMgZnJvbSByZXZpc2lvbnMiLCBhcmcpOwotCWlmIChlcnJubyAhPSBFTk9FTlQgJiYgZXJybm8gIT0gRU5PVERJUikKLQkJZGllKCInJXMnOiAlcyIsIGFyZywgc3RyZXJyb3IoZXJybm8pKTsKKwlpZiAoIWNoZWNrX2ZpbGVuYW1lKHByZWZpeCwgYXJnKSkKKwkJcmV0dXJuOworCWRpZSgiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lXG4iCisJICAgICJVc2UgJy0tJyB0byBzZXBhcmF0ZSBmaWxlbmFtZXMgZnJvbSByZXZpc2lvbnMiLCBhcmcpOwogfQogCiBjb25zdCBjaGFyICoqZ2V0X3BhdGhzcGVjKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqKnBhdGhzcGVjKQpAQCAtMTkwLDcgKzIwNiw3IEBACiB9CiAKIC8qCi0gKiBzZXRfd29ya190cmVlKCkgaXMgb25seSBldmVyIGNhbGxlZCBpZiB5b3Ugc2V0IEdJVF9ESVIgZXhwbGljaXRlbHkuCisgKiBzZXRfd29ya190cmVlKCkgaXMgb25seSBldmVyIGNhbGxlZCBpZiB5b3Ugc2V0IEdJVF9ESVIgZXhwbGljaXRseS4KICAqIFRoZSBvbGQgYmVoYXZpb3VyICh3aGljaCB3ZSByZXRhaW4gaGVyZSkgaXMgdG8gc2V0IHRoZSB3b3JrIHRyZWUgcm9vdAogICogdG8gdGhlIGN3ZCwgdW5sZXNzIG92ZXJyaWRkZW4gYnkgdGhlIGNvbmZpZywgdGhlIGNvbW1hbmQgbGluZSwgb3IKICAqIEdJVF9XT1JLX1RSRUUuCkBAIC0yNDcsNiArMjYzLDggQEAKIGNvbnN0IGNoYXIgKnJlYWRfZ2l0ZmlsZV9nZW50bHkoY29uc3QgY2hhciAqcGF0aCkKIHsKIAljaGFyICpidWY7CisJY2hhciAqZGlyOworCWNvbnN0IGNoYXIgKnNsYXNoOwogCXN0cnVjdCBzdGF0IHN0OwogCWludCBmZDsKIAlzaXplX3QgbGVuOwpAQCAtMjU3LDcgKzI3NSw3IEBACiAJCXJldHVybiBOVUxMOwogCWZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CiAJaWYgKGZkIDwgMCkKLQkJZGllKCJFcnJvciBvcGVuaW5nICVzOiAlcyIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiRXJyb3Igb3BlbmluZyAnJXMnIiwgcGF0aCk7CiAJYnVmID0geG1hbGxvYyhzdC5zdF9zaXplICsgMSk7CiAJbGVuID0gcmVhZF9pbl9mdWxsKGZkLCBidWYsIHN0LnN0X3NpemUpOwogCWNsb3NlKGZkKTsKQEAgLTI3MSw5ICsyODksMjMgQEAKIAlpZiAobGVuIDwgOSkKIAkJZGllKCJObyBwYXRoIGluIGdpdGZpbGU6ICVzIiwgcGF0aCk7CiAJYnVmW2xlbl0gPSAnXDAnOwotCWlmICghaXNfZ2l0X2RpcmVjdG9yeShidWYgKyA4KSkKLQkJZGllKCJOb3QgYSBnaXQgcmVwb3NpdG9yeTogJXMiLCBidWYgKyA4KTsKLQlwYXRoID0gbWFrZV9hYnNvbHV0ZV9wYXRoKGJ1ZiArIDgpOworCWRpciA9IGJ1ZiArIDg7CisKKwlpZiAoIWlzX2Fic29sdXRlX3BhdGgoZGlyKSAmJiAoc2xhc2ggPSBzdHJyY2hyKHBhdGgsICcvJykpKSB7CisJCXNpemVfdCBwYXRobGVuID0gc2xhc2grMSAtIHBhdGg7CisJCXNpemVfdCBkaXJsZW4gPSBwYXRobGVuICsgbGVuIC0gODsKKwkJZGlyID0geG1hbGxvYyhkaXJsZW4gKyAxKTsKKwkJc3RybmNweShkaXIsIHBhdGgsIHBhdGhsZW4pOworCQlzdHJuY3B5KGRpciArIHBhdGhsZW4sIGJ1ZiArIDgsIGxlbiAtIDgpOworCQlkaXJbZGlybGVuXSA9ICdcMCc7CisJCWZyZWUoYnVmKTsKKwkJYnVmID0gZGlyOworCX0KKworCWlmICghaXNfZ2l0X2RpcmVjdG9yeShkaXIpKQorCQlkaWUoIk5vdCBhIGdpdCByZXBvc2l0b3J5OiAlcyIsIGRpcik7CisJcGF0aCA9IG1ha2VfYWJzb2x1dGVfcGF0aChkaXIpOworCiAJZnJlZShidWYpOwogCXJldHVybiBwYXRoOwogfQpAQCAtMzI3LDcgKzM1OSw3IEBACiAJCQkJcmV0dXJuIE5VTEw7CiAJCQlzZXRfZ2l0X2RpcihtYWtlX2Fic29sdXRlX3BhdGgoZ2l0ZGlyZW52KSk7CiAJCQlpZiAoY2hkaXIod29ya190cmVlX2VudikgPCAwKQotCQkJCWRpZSAoIkNvdWxkIG5vdCBjaGRpciB0byAlcyIsIHdvcmtfdHJlZV9lbnYpOworCQkJCWRpZV9lcnJubyAoIkNvdWxkIG5vdCBjaGRpciB0byAnJXMnIiwgd29ya190cmVlX2Vudik7CiAJCQlzdHJjYXQoYnVmZmVyLCAiLyIpOwogCQkJcmV0dXJuIHJldHZhbDsKIAkJfQpAQCAtMzM5LDcgKzM3MSw3IEBACiAJfQogCiAJaWYgKCFnZXRjd2QoY3dkLCBzaXplb2YoY3dkKS0xKSkKLQkJZGllKCJVbmFibGUgdG8gcmVhZCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5Iik7CisJCWRpZV9lcnJubygiVW5hYmxlIHRvIHJlYWQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIpOwogCiAJY2VpbF9vZmZzZXQgPSBsb25nZXN0X2FuY2VzdG9yX2xlbmd0aChjd2QsIGVudl9jZWlsaW5nX2RpcnMpOwogCWlmIChjZWlsX29mZnNldCA8IDAgJiYgaGFzX2Rvc19kcml2ZV9wcmVmaXgoY3dkKSkKQEAgLTM4MiwxNCArNDE0LDE0IEBACiAJCWlmIChvZmZzZXQgPD0gY2VpbF9vZmZzZXQpIHsKIAkJCWlmIChub25naXRfb2spIHsKIAkJCQlpZiAoY2hkaXIoY3dkKSkKLQkJCQkJZGllKCJDYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIpOworCQkJCQlkaWVfZXJybm8oIkNhbm5vdCBjb21lIGJhY2sgdG8gY3dkIik7CiAJCQkJKm5vbmdpdF9vayA9IDE7CiAJCQkJcmV0dXJuIE5VTEw7CiAJCQl9CiAJCQlkaWUoIk5vdCBhIGdpdCByZXBvc2l0b3J5IChvciBhbnkgb2YgdGhlIHBhcmVudCBkaXJlY3Rvcmllcyk6ICVzIiwgREVGQVVMVF9HSVRfRElSX0VOVklST05NRU5UKTsKIAkJfQogCQlpZiAoY2hkaXIoIi4uIikpCi0JCQlkaWUoIkNhbm5vdCBjaGFuZ2UgdG8gJXMvLi46ICVzIiwgY3dkLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJDYW5ub3QgY2hhbmdlIHRvICclcy8uLiciLCBjd2QpOwogCX0KIAogCWluc2lkZV9naXRfZGlyID0gMDsKQEAgLTQ5MywxMCArNTI1LDEwIEBACiAJCXN0YXRpYyBjaGFyIGJ1ZmZlcltQQVRIX01BWCArIDFdOwogCQljaGFyICpyZWw7CiAJCWlmIChyZXR2YWwgJiYgY2hkaXIocmV0dmFsKSkKLQkJCWRpZSAoIkNvdWxkIG5vdCBqdW1wIGJhY2sgaW50byBvcmlnaW5hbCBjd2QiKTsKKwkJCWRpZV9lcnJubyAoIkNvdWxkIG5vdCBqdW1wIGJhY2sgaW50byBvcmlnaW5hbCBjd2QiKTsKIAkJcmVsID0gZ2V0X3JlbGF0aXZlX2N3ZChidWZmZXIsIFBBVEhfTUFYLCBnZXRfZ2l0X3dvcmtfdHJlZSgpKTsKIAkJaWYgKHJlbCAmJiAqcmVsICYmIGNoZGlyKGdldF9naXRfd29ya190cmVlKCkpKQotCQkJZGllICgiQ291bGQgbm90IGp1bXAgdG8gd29ya2luZyBkaXJlY3RvcnkiKTsKKwkJCWRpZV9lcnJubyAoIkNvdWxkIG5vdCBqdW1wIHRvIHdvcmtpbmcgZGlyZWN0b3J5Iik7CiAJCXJldHVybiByZWwgJiYgKnJlbCA/IHN0cmNhdChyZWwsICIvIikgOiBOVUxMOwogCX0KIApkaWZmIC0tZ2l0IGEvc2hhMV9maWxlLmMgYi9zaGExX2ZpbGUuYwppbmRleCA4ZjVmZTYyLi5jMjNjYzVlIDEwMDY0NAotLS0gYS9zaGExX2ZpbGUuYworKysgYi9zaGExX2ZpbGUuYwpAQCAtMzUsNTQgKzM1LDYgQEAKIAogY29uc3QgdW5zaWduZWQgY2hhciBudWxsX3NoYTFbMjBdOwogCi1jb25zdCBzaWduZWQgY2hhciBoZXh2YWxfdGFibGVbMjU2XSA9IHsKLQkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogMDAtMDcgKi8KLQkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogMDgtMGYgKi8KLQkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogMTAtMTcgKi8KLQkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogMTgtMWYgKi8KLQkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogMjAtMjcgKi8KLQkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogMjgtMmYgKi8KLQkgIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LAkJLyogMzAtMzcgKi8KLQkgIDgsICA5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogMzgtM2YgKi8KLQkgLTEsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIC0xLAkJLyogNDAtNDcgKi8KLQkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogNDgtNGYgKi8KLQkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogNTAtNTcgKi8KLQkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogNTgtNWYgKi8KLQkgLTEsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIC0xLAkJLyogNjAtNjcgKi8KLQkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogNjgtNjcgKi8KLQkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogNzAtNzcgKi8KLQkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogNzgtN2YgKi8KLQkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogODAtODcgKi8KLQkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogODgtOGYgKi8KLQkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogOTAtOTcgKi8KLQkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogOTgtOWYgKi8KLQkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogYTAtYTcgKi8KLQkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogYTgtYWYgKi8KLQkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogYjAtYjcgKi8KLQkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogYjgtYmYgKi8KLQkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogYzAtYzcgKi8KLQkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogYzgtY2YgKi8KLQkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogZDAtZDcgKi8KLQkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogZDgtZGYgKi8KLQkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogZTAtZTcgKi8KLQkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogZTgtZWYgKi8KLQkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogZjAtZjcgKi8KLQkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogZjgtZmYgKi8KLX07Ci0KLWludCBnZXRfc2hhMV9oZXgoY29uc3QgY2hhciAqaGV4LCB1bnNpZ25lZCBjaGFyICpzaGExKQotewotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCAyMDsgaSsrKSB7Ci0JCXVuc2lnbmVkIGludCB2YWwgPSAoaGV4dmFsKGhleFswXSkgPDwgNCkgfCBoZXh2YWwoaGV4WzFdKTsKLQkJaWYgKHZhbCAmIH4weGZmKQotCQkJcmV0dXJuIC0xOwotCQkqc2hhMSsrID0gdmFsOwotCQloZXggKz0gMjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IG9mZnNldF8xc3RfY29tcG9uZW50KGNvbnN0IGNoYXIgKnBhdGgpCiB7CiAJaWYgKGhhc19kb3NfZHJpdmVfcHJlZml4KHBhdGgpKQpAQCAtMTMzLDI0ICs4NSw2IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotY2hhciAqc2hhMV90b19oZXgoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKLXsKLQlzdGF0aWMgaW50IGJ1Zm5vOwotCXN0YXRpYyBjaGFyIGhleGJ1ZmZlcls0XVs1MF07Ci0Jc3RhdGljIGNvbnN0IGNoYXIgaGV4W10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7Ci0JY2hhciAqYnVmZmVyID0gaGV4YnVmZmVyWzMgJiArK2J1Zm5vXSwgKmJ1ZiA9IGJ1ZmZlcjsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAyMDsgaSsrKSB7Ci0JCXVuc2lnbmVkIGludCB2YWwgPSAqc2hhMSsrOwotCQkqYnVmKysgPSBoZXhbdmFsID4+IDRdOwotCQkqYnVmKysgPSBoZXhbdmFsICYgMHhmXTsKLQl9Ci0JKmJ1ZiA9ICdcMCc7Ci0KLQlyZXR1cm4gYnVmZmVyOwotfQotCiBzdGF0aWMgdm9pZCBmaWxsX3NoYTFfcGF0aChjaGFyICpwYXRoYnVmLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQogewogCWludCBpOwpAQCAtMTE3MCw3ICsxMTA0LDcgQEAKIAlzaXplID0gYyAmIDE1OwogCXNoaWZ0ID0gNDsKIAl3aGlsZSAoYyAmIDB4ODApIHsKLQkJaWYgKGxlbiA8PSB1c2VkIHx8IHNpemVvZihsb25nKSAqIDggPD0gc2hpZnQpIHsKKwkJaWYgKGxlbiA8PSB1c2VkIHx8IGJpdHNpemVvZihsb25nKSA8PSBzaGlmdCkgewogCQkJZXJyb3IoImJhZCBvYmplY3QgaGVhZGVyIik7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtMTIzMiw3ICsxMTY2LDcgQEAKIHN0YXRpYyB2b2lkICp1bnBhY2tfc2hhMV9yZXN0KHpfc3RyZWFtICpzdHJlYW0sIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQogewogCWludCBieXRlcyA9IHN0cmxlbihidWZmZXIpICsgMTsKLQl1bnNpZ25lZCBjaGFyICpidWYgPSB4bWFsbG9jKDErc2l6ZSk7CisJdW5zaWduZWQgY2hhciAqYnVmID0geG1hbGxvY3ooc2l6ZSk7CiAJdW5zaWduZWQgbG9uZyBuOwogCWludCBzdGF0dXMgPSBaX09LOwogCkBAIC0xMjYwLDcgKzExOTQsNiBAQAogCQl3aGlsZSAoc3RhdHVzID09IFpfT0spCiAJCQlzdGF0dXMgPSBnaXRfaW5mbGF0ZShzdHJlYW0sIFpfRklOSVNIKTsKIAl9Ci0JYnVmW3NpemVdID0gMDsKIAlpZiAoc3RhdHVzID09IFpfU1RSRUFNX0VORCAmJiAhc3RyZWFtLT5hdmFpbF9pbikgewogCQlnaXRfaW5mbGF0ZV9lbmQoc3RyZWFtKTsKIAkJcmV0dXJuIGJ1ZjsKQEAgLTE1ODMsMTcgKzE1MTYsMTggQEAKIAl6X3N0cmVhbSBzdHJlYW07CiAJdW5zaWduZWQgY2hhciAqYnVmZmVyLCAqaW47CiAKLQlidWZmZXIgPSB4bWFsbG9jKHNpemUgKyAxKTsKLQlidWZmZXJbc2l6ZV0gPSAwOworCWJ1ZmZlciA9IHhtYWxsb2N6KHNpemUpOwogCW1lbXNldCgmc3RyZWFtLCAwLCBzaXplb2Yoc3RyZWFtKSk7CiAJc3RyZWFtLm5leHRfb3V0ID0gYnVmZmVyOwotCXN0cmVhbS5hdmFpbF9vdXQgPSBzaXplOworCXN0cmVhbS5hdmFpbF9vdXQgPSBzaXplICsgMTsKIAogCWdpdF9pbmZsYXRlX2luaXQoJnN0cmVhbSk7CiAJZG8gewogCQlpbiA9IHVzZV9wYWNrKHAsIHdfY3VycywgY3VycG9zLCAmc3RyZWFtLmF2YWlsX2luKTsKIAkJc3RyZWFtLm5leHRfaW4gPSBpbjsKIAkJc3QgPSBnaXRfaW5mbGF0ZSgmc3RyZWFtLCBaX0ZJTklTSCk7CisJCWlmICghc3RyZWFtLmF2YWlsX291dCkKKwkJCWJyZWFrOyAvKiB0aGUgcGF5bG9hZCBpcyBsYXJnZXIgdGhhbiBpdCBzaG91bGQgYmUgKi8KIAkJY3VycG9zICs9IHN0cmVhbS5uZXh0X2luIC0gaW47CiAJfSB3aGlsZSAoc3QgPT0gWl9PSyB8fCBzdCA9PSBaX0JVRl9FUlJPUik7CiAJZ2l0X2luZmxhdGVfZW5kKCZzdHJlYW0pOwpAQCAtMjE0NCwxMyArMjA3OCwyNiBAQAogCXJldHVybiByZWFkX3BhY2tlZF9zaGExKHNoYTEsIHR5cGUsIHNpemUpOwogfQogCi12b2lkICpyZWFkX3NoYTFfZmlsZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBlbnVtIG9iamVjdF90eXBlICp0eXBlLAotCQkgICAgIHVuc2lnbmVkIGxvbmcgKnNpemUpCit2b2lkICpyZWFkX3NoYTFfZmlsZV9yZXBsKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkgIGVudW0gb2JqZWN0X3R5cGUgKnR5cGUsCisJCQkgIHVuc2lnbmVkIGxvbmcgKnNpemUsCisJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipyZXBsYWNlbWVudCkKIHsKLQl2b2lkICpkYXRhID0gcmVhZF9vYmplY3Qoc2hhMSwgdHlwZSwgc2l6ZSk7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcmVwbCA9IGxvb2t1cF9yZXBsYWNlX29iamVjdChzaGExKTsKKwl2b2lkICpkYXRhID0gcmVhZF9vYmplY3QocmVwbCwgdHlwZSwgc2l6ZSk7CisKKwkvKiBkaWUgaWYgd2UgcmVwbGFjZWQgYW4gb2JqZWN0IHdpdGggb25lIHRoYXQgZG9lcyBub3QgZXhpc3QgKi8KKwlpZiAoIWRhdGEgJiYgcmVwbCAhPSBzaGExKQorCQlkaWUoInJlcGxhY2VtZW50ICVzIG5vdCBmb3VuZCBmb3IgJXMiLAorCQkgICAgc2hhMV90b19oZXgocmVwbCksIHNoYTFfdG9faGV4KHNoYTEpKTsKKwogCS8qIGxlZ2FjeSBiZWhhdmlvciBpcyB0byBkaWUgb24gY29ycnVwdGVkIG9iamVjdHMgKi8KLQlpZiAoIWRhdGEgJiYgKGhhc19sb29zZV9vYmplY3Qoc2hhMSkgfHwgaGFzX3BhY2tlZF9hbmRfYmFkKHNoYTEpKSkKLQkJZGllKCJvYmplY3QgJXMgaXMgY29ycnVwdGVkIiwgc2hhMV90b19oZXgoc2hhMSkpOworCWlmICghZGF0YSAmJiAoaGFzX2xvb3NlX29iamVjdChyZXBsKSB8fCBoYXNfcGFja2VkX2FuZF9iYWQocmVwbCkpKQorCQlkaWUoIm9iamVjdCAlcyBpcyBjb3JydXB0ZWQiLCBzaGExX3RvX2hleChyZXBsKSk7CisKKwlpZiAocmVwbGFjZW1lbnQpCisJCSpyZXBsYWNlbWVudCA9IHJlcGw7CisKIAlyZXR1cm4gZGF0YTsKIH0KIApAQCAtMjI1OSw3ICsyMjA2LDcgQEAKIAl9CiAKIG91dDoKLQlpZiAoc2V0X3NoYXJlZF9wZXJtKGZpbGVuYW1lLCAoU19JRlJFR3wwNDQ0KSkpCisJaWYgKGFkanVzdF9zaGFyZWRfcGVybShmaWxlbmFtZSkpCiAJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIHNldCBwZXJtaXNzaW9uIHRvICclcyciLCBmaWxlbmFtZSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMjg2LDcgKzIyMzMsNyBAQAogCWlmIChmc3luY19vYmplY3RfZmlsZXMpCiAJCWZzeW5jX29yX2RpZShmZCwgInNoYTEgZmlsZSIpOwogCWlmIChjbG9zZShmZCkgIT0gMCkKLQkJZGllKCJlcnJvciB3aGVuIGNsb3Npbmcgc2hhMSBmaWxlICglcykiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImVycm9yIHdoZW4gY2xvc2luZyBzaGExIGZpbGUiKTsKIH0KIAogLyogU2l6ZSBvZiBkaXJlY3RvcnkgY29tcG9uZW50LCBpbmNsdWRpbmcgdGhlIGVuZGluZyAnLycgKi8KQEAgLTIzMTUsNyArMjI2Miw3IEBACiAJfQogCW1lbWNweShidWZmZXIsIGZpbGVuYW1lLCBkaXJsZW4pOwogCXN0cmNweShidWZmZXIgKyBkaXJsZW4sICJ0bXBfb2JqX1hYWFhYWCIpOwotCWZkID0gbWtzdGVtcChidWZmZXIpOworCWZkID0gZ2l0X21rc3RlbXBfbW9kZShidWZmZXIsIDA0NDQpOwogCWlmIChmZCA8IDAgJiYgZGlybGVuICYmIGVycm5vID09IEVOT0VOVCkgewogCQkvKiBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBleGlzdHMgKi8KIAkJbWVtY3B5KGJ1ZmZlciwgZmlsZW5hbWUsIGRpcmxlbik7CkBAIC0yMzI1LDcgKzIyNzIsNyBAQAogCiAJCS8qIFRyeSBhZ2FpbiAqLwogCQlzdHJjcHkoYnVmZmVyICsgZGlybGVuIC0gMSwgIi90bXBfb2JqX1hYWFhYWCIpOwotCQlmZCA9IG1rc3RlbXAoYnVmZmVyKTsKKwkJZmQgPSBnaXRfbWtzdGVtcF9tb2RlKGJ1ZmZlciwgMDQ0NCk7CiAJfQogCXJldHVybiBmZDsKIH0KQEAgLTIzMzQsOSArMjI4MSwxMCBAQAogCQkJICAgICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbiwgdGltZV90IG10aW1lKQogewogCWludCBmZCwgcmV0OwotCXNpemVfdCBzaXplOwotCXVuc2lnbmVkIGNoYXIgKmNvbXByZXNzZWQ7CisJdW5zaWduZWQgY2hhciBjb21wcmVzc2VkWzQwOTZdOwogCXpfc3RyZWFtIHN0cmVhbTsKKwlnaXRfU0hBX0NUWCBjOworCXVuc2lnbmVkIGNoYXIgcGFyYW5vX3NoYTFbMjBdOwogCWNoYXIgKmZpbGVuYW1lOwogCXN0YXRpYyBjaGFyIHRtcGZpbGVbUEFUSF9NQVhdOwogCkBAIC0yMzU0LDM2ICsyMzAyLDQwIEBACiAJLyogU2V0IGl0IHVwICovCiAJbWVtc2V0KCZzdHJlYW0sIDAsIHNpemVvZihzdHJlYW0pKTsKIAlkZWZsYXRlSW5pdCgmc3RyZWFtLCB6bGliX2NvbXByZXNzaW9uX2xldmVsKTsKLQlzaXplID0gOCArIGRlZmxhdGVCb3VuZCgmc3RyZWFtLCBsZW4raGRybGVuKTsKLQljb21wcmVzc2VkID0geG1hbGxvYyhzaXplKTsKLQotCS8qIENvbXByZXNzIGl0ICovCiAJc3RyZWFtLm5leHRfb3V0ID0gY29tcHJlc3NlZDsKLQlzdHJlYW0uYXZhaWxfb3V0ID0gc2l6ZTsKKwlzdHJlYW0uYXZhaWxfb3V0ID0gc2l6ZW9mKGNvbXByZXNzZWQpOworCWdpdF9TSEExX0luaXQoJmMpOwogCiAJLyogRmlyc3QgaGVhZGVyLi4gKi8KIAlzdHJlYW0ubmV4dF9pbiA9ICh1bnNpZ25lZCBjaGFyICopaGRyOwogCXN0cmVhbS5hdmFpbF9pbiA9IGhkcmxlbjsKIAl3aGlsZSAoZGVmbGF0ZSgmc3RyZWFtLCAwKSA9PSBaX09LKQogCQkvKiBub3RoaW5nICovOworCWdpdF9TSEExX1VwZGF0ZSgmYywgaGRyLCBoZHJsZW4pOwogCiAJLyogVGhlbiB0aGUgZGF0YSBpdHNlbGYuLiAqLwogCXN0cmVhbS5uZXh0X2luID0gYnVmOwogCXN0cmVhbS5hdmFpbF9pbiA9IGxlbjsKLQlyZXQgPSBkZWZsYXRlKCZzdHJlYW0sIFpfRklOSVNIKTsKKwlkbyB7CisJCXVuc2lnbmVkIGNoYXIgKmluMCA9IHN0cmVhbS5uZXh0X2luOworCQlyZXQgPSBkZWZsYXRlKCZzdHJlYW0sIFpfRklOSVNIKTsKKwkJZ2l0X1NIQTFfVXBkYXRlKCZjLCBpbjAsIHN0cmVhbS5uZXh0X2luIC0gaW4wKTsKKwkJaWYgKHdyaXRlX2J1ZmZlcihmZCwgY29tcHJlc3NlZCwgc3RyZWFtLm5leHRfb3V0IC0gY29tcHJlc3NlZCkgPCAwKQorCQkJZGllKCJ1bmFibGUgdG8gd3JpdGUgc2hhMSBmaWxlIik7CisJCXN0cmVhbS5uZXh0X291dCA9IGNvbXByZXNzZWQ7CisJCXN0cmVhbS5hdmFpbF9vdXQgPSBzaXplb2YoY29tcHJlc3NlZCk7CisJfSB3aGlsZSAocmV0ID09IFpfT0spOworCiAJaWYgKHJldCAhPSBaX1NUUkVBTV9FTkQpCiAJCWRpZSgidW5hYmxlIHRvIGRlZmxhdGUgbmV3IG9iamVjdCAlcyAoJWQpIiwgc2hhMV90b19oZXgoc2hhMSksIHJldCk7Ci0KIAlyZXQgPSBkZWZsYXRlRW5kKCZzdHJlYW0pOwogCWlmIChyZXQgIT0gWl9PSykKIAkJZGllKCJkZWZsYXRlRW5kIG9uIG9iamVjdCAlcyBmYWlsZWQgKCVkKSIsIHNoYTFfdG9faGV4KHNoYTEpLCByZXQpOworCWdpdF9TSEExX0ZpbmFsKHBhcmFub19zaGExLCAmYyk7CisJaWYgKGhhc2hjbXAoc2hhMSwgcGFyYW5vX3NoYTEpICE9IDApCisJCWRpZSgiY29uZnVzZWQgYnkgdW5zdGFibGUgb2JqZWN0IHNvdXJjZSBkYXRhIGZvciAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKIAotCXNpemUgPSBzdHJlYW0udG90YWxfb3V0OwotCi0JaWYgKHdyaXRlX2J1ZmZlcihmZCwgY29tcHJlc3NlZCwgc2l6ZSkgPCAwKQotCQlkaWUoInVuYWJsZSB0byB3cml0ZSBzaGExIGZpbGUiKTsKIAljbG9zZV9zaGExX2ZpbGUoZmQpOwotCWZyZWUoY29tcHJlc3NlZCk7CiAKIAlpZiAobXRpbWUpIHsKIAkJc3RydWN0IHV0aW1idWYgdXRiOwpAQCAtMjQ0MywxNCArMjM5NSw2IEBACiAJcmV0dXJuIDE7CiB9CiAKLWludCBoYXNfcGFja19maWxlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCi17Ci0Jc3RydWN0IHN0YXQgc3Q7Ci0JaWYgKHN0YXQoc2hhMV9wYWNrX25hbWUoc2hhMSksICZzdCkpCi0JCXJldHVybiAwOwotCXJldHVybiAxOwotfQotCiBpbnQgaGFzX3NoYTFfcGFjayhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQogewogCXN0cnVjdCBwYWNrX2VudHJ5IGU7CkBAIC0yNDk1LDYgKzI0MzksOCBAQAogCXJldHVybiByZXQ7CiB9CiAKKyNkZWZpbmUgU01BTExfRklMRV9TSVpFICgzMioxMDI0KQorCiBpbnQgaW5kZXhfZmQodW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZkLCBzdHJ1Y3Qgc3RhdCAqc3QsIGludCB3cml0ZV9vYmplY3QsCiAJICAgICBlbnVtIG9iamVjdF90eXBlIHR5cGUsIGNvbnN0IGNoYXIgKnBhdGgpCiB7CkBAIC0yNTA5LDYgKzI0NTUsMTQgQEAKIAkJZWxzZQogCQkJcmV0ID0gLTE7CiAJCXN0cmJ1Zl9yZWxlYXNlKCZzYnVmKTsKKwl9IGVsc2UgaWYgKHNpemUgPD0gU01BTExfRklMRV9TSVpFKSB7CisJCWNoYXIgKmJ1ZiA9IHhtYWxsb2Moc2l6ZSk7CisJCWlmIChzaXplID09IHJlYWRfaW5fZnVsbChmZCwgYnVmLCBzaXplKSkKKwkJCXJldCA9IGluZGV4X21lbShzaGExLCBidWYsIHNpemUsIHdyaXRlX29iamVjdCwgdHlwZSwKKwkJCQkJcGF0aCk7CisJCWVsc2UKKwkJCXJldCA9IGVycm9yKCJzaG9ydCByZWFkICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZnJlZShidWYpOwogCX0gZWxzZSBpZiAoc2l6ZSkgewogCQl2b2lkICpidWYgPSB4bW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgMCk7CiAJCXJldCA9IGluZGV4X21lbShzaGExLCBidWYsIHNpemUsIHdyaXRlX29iamVjdCwgdHlwZSwgcGF0aCk7CmRpZmYgLS1naXQgYS9zaGExX25hbWUuYyBiL3NoYTFfbmFtZS5jCmluZGV4IDQ0YmI2MmQuLmJmOTI0MTcgMTAwNjQ0Ci0tLSBhL3NoYTFfbmFtZS5jCisrKyBiL3NoYTFfbmFtZS5jCkBAIC01LDYgKzUsNyBAQAogI2luY2x1ZGUgImJsb2IuaCIKICNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKICNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCiAKIHN0YXRpYyBpbnQgZmluZF9zaG9ydF9vYmplY3RfZmlsZW5hbWUoaW50IGxlbiwgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKQEAgLTI0MCw3ICsyNDEsOCBAQAogCiAvKgogICogKnN0cmluZyBhbmQgKmxlbiB3aWxsIG9ubHkgYmUgc3Vic3RpdHV0ZWQsIGFuZCAqc3RyaW5nIHJldHVybmVkIChmb3IKLSAqIGxhdGVyIGZyZWUoKWluZykgaWYgdGhlIHN0cmluZyBwYXNzZWQgaW4gaXMgb2YgdGhlIGZvcm0gQHstPG4+fS4KKyAqIGxhdGVyIGZyZWUoKWluZykgaWYgdGhlIHN0cmluZyBwYXNzZWQgaW4gaXMgYSBtYWdpYyBzaG9ydC1oYW5kIGZvcm0KKyAqIHRvIG5hbWUgYSBicmFuY2guCiAgKi8KIHN0YXRpYyBjaGFyICpzdWJzdGl0dXRlX2JyYW5jaF9uYW1lKGNvbnN0IGNoYXIgKipzdHJpbmcsIGludCAqbGVuKQogewpAQCAtMjc4LDggKzI4MCw3IEBACiAJCQkJKnJlZiA9IHhzdHJkdXAocik7CiAJCQlpZiAoIXdhcm5fYW1iaWd1b3VzX3JlZnMpCiAJCQkJYnJlYWs7Ci0JCX0gZWxzZSBpZiAoKGZsYWcgJiBSRUZfSVNTWU1SRUYpICYmCi0JCQkgICAobGVuICE9IDQgfHwgc3RyY21wKHN0ciwgIkhFQUQiKSkpCisJCX0gZWxzZSBpZiAoKGZsYWcgJiBSRUZfSVNTWU1SRUYpICYmIHN0cmNtcChmdWxscmVmLCAiSEVBRCIpKQogCQkJd2FybmluZygiaWdub3JpbmcgZGFuZ2xpbmcgc3ltcmVmICVzLiIsIGZ1bGxyZWYpOwogCX0KIAlmcmVlKGxhc3RfYnJhbmNoKTsKQEAgLTMyMyw2ICszMjQsMjAgQEAKIAlyZXR1cm4gbG9nc19mb3VuZDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgdXBzdHJlYW1fbWFyayhjb25zdCBjaGFyICpzdHJpbmcsIGludCBsZW4pCit7CisJY29uc3QgY2hhciAqc3VmZml4W10gPSB7ICJAe3Vwc3RyZWFtfSIsICJAe3V9IiB9OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3VmZml4KTsgaSsrKSB7CisJCWludCBzdWZmaXhfbGVuID0gc3RybGVuKHN1ZmZpeFtpXSk7CisJCWlmIChzdWZmaXhfbGVuIDw9IGxlbgorCQkgICAgJiYgIW1lbWNtcChzdHJpbmcsIHN1ZmZpeFtpXSwgc3VmZml4X2xlbikpCisJCQlyZXR1cm4gc3VmZml4X2xlbjsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZ2V0X3NoYTFfMShjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLCB1bnNpZ25lZCBjaGFyICpzaGExKTsKIAogc3RhdGljIGludCBnZXRfc2hhMV9iYXNpYyhjb25zdCBjaGFyICpzdHIsIGludCBsZW4sIHVuc2lnbmVkIGNoYXIgKnNoYTEpCkBAIC0zNDAsOCArMzU1LDEwIEBACiAJaWYgKGxlbiAmJiBzdHJbbGVuLTFdID09ICd9JykgewogCQlmb3IgKGF0ID0gbGVuLTI7IGF0ID49IDA7IGF0LS0pIHsKIAkJCWlmIChzdHJbYXRdID09ICdAJyAmJiBzdHJbYXQrMV0gPT0gJ3snKSB7Ci0JCQkJcmVmbG9nX2xlbiA9IChsZW4tMSkgLSAoYXQrMik7Ci0JCQkJbGVuID0gYXQ7CisJCQkJaWYgKCF1cHN0cmVhbV9tYXJrKHN0ciArIGF0LCBsZW4gLSBhdCkpIHsKKwkJCQkJcmVmbG9nX2xlbiA9IChsZW4tMSkgLSAoYXQrMik7CisJCQkJCWxlbiA9IGF0OworCQkJCX0KIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtMzgxLDYgKzM5OCwxMCBAQAogCQl1bnNpZ25lZCBsb25nIGNvX3RpbWU7CiAJCWludCBjb190eiwgY29fY250OwogCisJCS8qIGEgQHstTn0gcGxhY2VkIGFueXdoZXJlIGV4Y2VwdCB0aGUgc3RhcnQgaXMgYW4gZXJyb3IgKi8KKwkJaWYgKHN0clthdCsyXSA9PSAnLScpCisJCQlyZXR1cm4gLTE7CisKIAkJLyogSXMgaXQgYXNraW5nIGZvciBOLXRoIGVudHJ5LCBvciBhcHByb3hpZGF0ZT8gKi8KIAkJZm9yIChpID0gbnRoID0gMDsgMCA8PSBudGggJiYgaSA8IHJlZmxvZ19sZW47IGkrKykgewogCQkJY2hhciBjaCA9IHN0clthdCsyK2ldOwpAQCAtMzk1LDkgKzQxNiwxMiBAQAogCQl9IGVsc2UgaWYgKDAgPD0gbnRoKQogCQkJYXRfdGltZSA9IDA7CiAJCWVsc2UgeworCQkJaW50IGVycm9ycyA9IDA7CiAJCQljaGFyICp0bXAgPSB4c3RybmR1cChzdHIgKyBhdCArIDIsIHJlZmxvZ19sZW4pOwotCQkJYXRfdGltZSA9IGFwcHJveGlkYXRlKHRtcCk7CisJCQlhdF90aW1lID0gYXBwcm94aWRhdGVfY2FyZWZ1bCh0bXAsICZlcnJvcnMpOwogCQkJZnJlZSh0bXApOworCQkJaWYgKGVycm9ycykKKwkJCQlyZXR1cm4gLTE7CiAJCX0KIAkJaWYgKHJlYWRfcmVmX2F0KHJlYWxfcmVmLCBhdF90aW1lLCBudGgsIHNoYTEsIE5VTEwsCiAJCQkJJmNvX3RpbWUsICZjb190eiwgJmNvX2NudCkpIHsKQEAgLTc0MCwxNyArNzY0LDEwIEBACiB9CiAKIC8qCi0gKiBUaGlzIHJlYWRzICJAey1OfSIgc3ludGF4LCBmaW5kcyB0aGUgbmFtZSBvZiB0aGUgTnRoIHByZXZpb3VzCi0gKiBicmFuY2ggd2Ugd2VyZSBvbiwgYW5kIHBsYWNlcyB0aGUgbmFtZSBvZiB0aGUgYnJhbmNoIGluIHRoZSBnaXZlbgotICogYnVmIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwYXJzZWQgaWYgc3VjY2Vzc2Z1bC4KLSAqCi0gKiBJZiB0aGUgaW5wdXQgaXMgbm90IG9mIHRoZSBhY2NlcHRlZCBmb3JtYXQsIGl0IHJldHVybnMgYSBuZWdhdGl2ZQotICogbnVtYmVyIHRvIHNpZ25hbCBhbiBlcnJvci4KLSAqCi0gKiBJZiB0aGUgaW5wdXQgd2FzIG9rIGJ1dCB0aGVyZSBhcmUgbm90IE4gYnJhbmNoIHN3aXRjaGVzIGluIHRoZQotICogcmVmbG9nLCBpdCByZXR1cm5zIDAuCisgKiBQYXJzZSBAey1OfSBzeW50YXgsIHJldHVybiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcGFyc2VkCisgKiBpZiBzdWNjZXNzZnVsOyBvdGhlcndpc2Ugc2lnbmFsIGFuIGVycm9yIHdpdGggbmVnYXRpdmUgdmFsdWUuCiAgKi8KLWludCBpbnRlcnByZXRfYnJhbmNoX25hbWUoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0cmJ1ZiAqYnVmKQorc3RhdGljIGludCBpbnRlcnByZXRfbnRoX3ByaW9yX2NoZWNrb3V0KGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdHJidWYgKmJ1ZikKIHsKIAlsb25nIG50aDsKIAlpbnQgaSwgcmV0dmFsOwpAQCAtNzk0LDYgKzgxMSwxMjIgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCitpbnQgZ2V0X3NoYTFfbWIoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpvbmUsICp0d287CisJc3RydWN0IGNvbW1pdF9saXN0ICptYnM7CisJdW5zaWduZWQgY2hhciBzaGExX3RtcFsyMF07CisJY29uc3QgY2hhciAqZG90czsKKwlpbnQgc3Q7CisKKwlkb3RzID0gc3Ryc3RyKG5hbWUsICIuLi4iKTsKKwlpZiAoIWRvdHMpCisJCXJldHVybiBnZXRfc2hhMShuYW1lLCBzaGExKTsKKwlpZiAoZG90cyA9PSBuYW1lKQorCQlzdCA9IGdldF9zaGExKCJIRUFEIiwgc2hhMV90bXApOworCWVsc2UgeworCQlzdHJ1Y3Qgc3RyYnVmIHNiOworCQlzdHJidWZfaW5pdCgmc2IsIGRvdHMgLSBuYW1lKTsKKwkJc3RyYnVmX2FkZCgmc2IsIG5hbWUsIGRvdHMgLSBuYW1lKTsKKwkJc3QgPSBnZXRfc2hhMShzYi5idWYsIHNoYTFfdG1wKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwl9CisJaWYgKHN0KQorCQlyZXR1cm4gc3Q7CisJb25lID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHNoYTFfdG1wLCAwKTsKKwlpZiAoIW9uZSkKKwkJcmV0dXJuIC0xOworCisJaWYgKGdldF9zaGExKGRvdHNbM10gPyAoZG90cyArIDMpIDogIkhFQUQiLCBzaGExX3RtcCkpCisJCXJldHVybiAtMTsKKwl0d28gPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkoc2hhMV90bXAsIDApOworCWlmICghdHdvKQorCQlyZXR1cm4gLTE7CisJbWJzID0gZ2V0X21lcmdlX2Jhc2VzKG9uZSwgdHdvLCAxKTsKKwlpZiAoIW1icyB8fCBtYnMtPm5leHQpCisJCXN0ID0gLTE7CisJZWxzZSB7CisJCXN0ID0gMDsKKwkJaGFzaGNweShzaGExLCBtYnMtPml0ZW0tPm9iamVjdC5zaGExKTsKKwl9CisJZnJlZV9jb21taXRfbGlzdChtYnMpOworCXJldHVybiBzdDsKK30KKworLyoKKyAqIFRoaXMgcmVhZHMgc2hvcnQtaGFuZCBzeW50YXggdGhhdCBub3Qgb25seSBldmFsdWF0ZXMgdG8gYSBjb21taXQKKyAqIG9iamVjdCBuYW1lLCBidXQgYWxzbyBjYW4gYWN0IGFzIGlmIHRoZSBlbmQgdXNlciBzcGVsbGVkIHRoZSBuYW1lCisgKiBvZiB0aGUgYnJhbmNoIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKyAqCisgKiAtICJAey1OfSIgZmluZHMgdGhlIG5hbWUgb2YgdGhlIE50aCBwcmV2aW91cyBicmFuY2ggd2Ugd2VyZSBvbiwgYW5kCisgKiAgIHBsYWNlcyB0aGUgbmFtZSBvZiB0aGUgYnJhbmNoIGluIHRoZSBnaXZlbiBidWYgYW5kIHJldHVybnMgdGhlCisgKiAgIG51bWJlciBvZiBjaGFyYWN0ZXJzIHBhcnNlZCBpZiBzdWNjZXNzZnVsLgorICoKKyAqIC0gIjxicmFuY2g+QHt1cHN0cmVhbX0iIGZpbmRzIHRoZSBuYW1lIG9mIHRoZSBvdGhlciByZWYgdGhhdAorICogICA8YnJhbmNoPiBpcyBjb25maWd1cmVkIHRvIG1lcmdlIHdpdGggKG1pc3NpbmcgPGJyYW5jaD4gZGVmYXVsdHMKKyAqICAgdG8gdGhlIGN1cnJlbnQgYnJhbmNoKSwgYW5kIHBsYWNlcyB0aGUgbmFtZSBvZiB0aGUgYnJhbmNoIGluIHRoZQorICogICBnaXZlbiBidWYgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHBhcnNlZCBpZgorICogICBzdWNjZXNzZnVsLgorICoKKyAqIElmIHRoZSBpbnB1dCBpcyBub3Qgb2YgdGhlIGFjY2VwdGVkIGZvcm1hdCwgaXQgcmV0dXJucyBhIG5lZ2F0aXZlCisgKiBudW1iZXIgdG8gc2lnbmFsIGFuIGVycm9yLgorICoKKyAqIElmIHRoZSBpbnB1dCB3YXMgb2sgYnV0IHRoZXJlIGFyZSBub3QgTiBicmFuY2ggc3dpdGNoZXMgaW4gdGhlCisgKiByZWZsb2csIGl0IHJldHVybnMgMC4KKyAqLworaW50IGludGVycHJldF9icmFuY2hfbmFtZShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJY2hhciAqY3A7CisJc3RydWN0IGJyYW5jaCAqdXBzdHJlYW07CisJaW50IG5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CisJaW50IGxlbiA9IGludGVycHJldF9udGhfcHJpb3JfY2hlY2tvdXQobmFtZSwgYnVmKTsKKwlpbnQgdG1wX2xlbjsKKworCWlmICghbGVuKQorCQlyZXR1cm4gbGVuOyAvKiBzeW50YXggT2ssIG5vdCBlbm91Z2ggc3dpdGNoZXMgKi8KKwlpZiAoMCA8IGxlbiAmJiBsZW4gPT0gbmFtZWxlbikKKwkJcmV0dXJuIGxlbjsgLyogY29uc3VtZWQgYWxsICovCisJZWxzZSBpZiAoMCA8IGxlbikgeworCQkvKiB3ZSBoYXZlIGV4dHJhIGRhdGEsIHdoaWNoIG1pZ2h0IG5lZWQgZnVydGhlciBwcm9jZXNzaW5nICovCisJCXN0cnVjdCBzdHJidWYgdG1wID0gU1RSQlVGX0lOSVQ7CisJCWludCB1c2VkID0gYnVmLT5sZW47CisJCWludCByZXQ7CisKKwkJc3RyYnVmX2FkZChidWYsIG5hbWUgKyBsZW4sIG5hbWVsZW4gLSBsZW4pOworCQlyZXQgPSBpbnRlcnByZXRfYnJhbmNoX25hbWUoYnVmLT5idWYsICZ0bXApOworCQkvKiB0aGF0IGRhdGEgd2FzIG5vdCBpbnRlcnByZXRlZCwgcmVtb3ZlIG91ciBjcnVmdCAqLworCQlpZiAocmV0IDwgMCkgeworCQkJc3RyYnVmX3NldGxlbihidWYsIHVzZWQpOworCQkJcmV0dXJuIGxlbjsKKwkJfQorCQlzdHJidWZfcmVzZXQoYnVmKTsKKwkJc3RyYnVmX2FkZGJ1ZihidWYsICZ0bXApOworCQlzdHJidWZfcmVsZWFzZSgmdG1wKTsKKwkJLyogdHdlYWsgZm9yIHNpemUgb2Ygey1OfSB2ZXJzdXMgZXhwYW5kZWQgcmVmIG5hbWUgKi8KKwkJcmV0dXJuIHJldCAtIHVzZWQgKyBsZW47CisJfQorCisJY3AgPSBzdHJjaHIobmFtZSwgJ0AnKTsKKwlpZiAoIWNwKQorCQlyZXR1cm4gLTE7CisJdG1wX2xlbiA9IHVwc3RyZWFtX21hcmsoY3AsIG5hbWVsZW4gLSAoY3AgLSBuYW1lKSk7CisJaWYgKCF0bXBfbGVuKQorCQlyZXR1cm4gLTE7CisJbGVuID0gY3AgKyB0bXBfbGVuIC0gbmFtZTsKKwljcCA9IHhzdHJuZHVwKG5hbWUsIGNwIC0gbmFtZSk7CisJdXBzdHJlYW0gPSBicmFuY2hfZ2V0KCpjcCA/IGNwIDogTlVMTCk7CisJaWYgKCF1cHN0cmVhbQorCSAgICB8fCAhdXBzdHJlYW0tPm1lcmdlCisJICAgIHx8ICF1cHN0cmVhbS0+bWVyZ2VbMF0tPmRzdCkKKwkJcmV0dXJuIGVycm9yKCJObyB1cHN0cmVhbSBicmFuY2ggZm91bmQgZm9yICclcyciLCBjcCk7CisJZnJlZShjcCk7CisJY3AgPSBzaG9ydGVuX3VuYW1iaWd1b3VzX3JlZih1cHN0cmVhbS0+bWVyZ2VbMF0tPmRzdCwgMCk7CisJc3RyYnVmX3Jlc2V0KGJ1Zik7CisJc3RyYnVmX2FkZHN0cihidWYsIGNwKTsKKwlmcmVlKGNwKTsKKwlyZXR1cm4gbGVuOworfQorCiAvKgogICogVGhpcyBpcyBsaWtlICJnZXRfc2hhMV9iYXNpYygpIiwgZXhjZXB0IGl0IGFsbG93cyAic2hhMSBleHByZXNzaW9ucyIsCiAgKiBub3RhYmx5ICJ4eXpeIiBmb3IgInBhcmVudCBvZiB4eXoiCkBAIC04MDQsNyArOTM3LDEwMCBAQAogCXJldHVybiBnZXRfc2hhMV93aXRoX21vZGUobmFtZSwgc2hhMSwgJnVudXNlZCk7CiB9CiAKLWludCBnZXRfc2hhMV93aXRoX21vZGUoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgY2hhciAqc2hhMSwgdW5zaWduZWQgKm1vZGUpCisvKiBNdXN0IGJlIGNhbGxlZCBvbmx5IHdoZW4gb2JqZWN0X25hbWU6ZmlsZW5hbWUgZG9lc24ndCBleGlzdC4gKi8KK3N0YXRpYyB2b2lkIGRpYWdub3NlX2ludmFsaWRfc2hhMV9wYXRoKGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRyZWVfc2hhMSwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqb2JqZWN0X25hbWUpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwl1bnNpZ25lZCBtb2RlOworCisJaWYgKCFwcmVmaXgpCisJCXByZWZpeCA9ICIiOworCisJaWYgKCFsc3RhdChmaWxlbmFtZSwgJnN0KSkKKwkJZGllKCJQYXRoICclcycgZXhpc3RzIG9uIGRpc2ssIGJ1dCBub3QgaW4gJyVzJy4iLAorCQkgICAgZmlsZW5hbWUsIG9iamVjdF9uYW1lKTsKKwlpZiAoZXJybm8gPT0gRU5PRU5UIHx8IGVycm5vID09IEVOT1RESVIpIHsKKwkJY2hhciAqZnVsbG5hbWUgPSB4bWFsbG9jKHN0cmxlbihmaWxlbmFtZSkKKwkJCQkJICAgICArIHN0cmxlbihwcmVmaXgpICsgMSk7CisJCXN0cmNweShmdWxsbmFtZSwgcHJlZml4KTsKKwkJc3RyY2F0KGZ1bGxuYW1lLCBmaWxlbmFtZSk7CisKKwkJaWYgKCFnZXRfdHJlZV9lbnRyeSh0cmVlX3NoYTEsIGZ1bGxuYW1lLAorCQkJCSAgICBzaGExLCAmbW9kZSkpIHsKKwkJCWRpZSgiUGF0aCAnJXMnIGV4aXN0cywgYnV0IG5vdCAnJXMnLlxuIgorCQkJICAgICJEaWQgeW91IG1lYW4gJyVzOiVzJz8iLAorCQkJICAgIGZ1bGxuYW1lLAorCQkJICAgIGZpbGVuYW1lLAorCQkJICAgIG9iamVjdF9uYW1lLAorCQkJICAgIGZ1bGxuYW1lKTsKKwkJfQorCQlkaWUoIlBhdGggJyVzJyBkb2VzIG5vdCBleGlzdCBpbiAnJXMnIiwKKwkJICAgIGZpbGVuYW1lLCBvYmplY3RfbmFtZSk7CisJfQorfQorCisvKiBNdXN0IGJlIGNhbGxlZCBvbmx5IHdoZW4gOnN0YWdlOmZpbGVuYW1lIGRvZXNuJ3QgZXhpc3QuICovCitzdGF0aWMgdm9pZCBkaWFnbm9zZV9pbnZhbGlkX2luZGV4X3BhdGgoaW50IHN0YWdlLAorCQkJCQljb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCWNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBzdGF0IHN0OworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJaW50IHBvczsKKwl1bnNpZ25lZCBuYW1lbGVuID0gc3RybGVuKGZpbGVuYW1lKTsKKwl1bnNpZ25lZCBmdWxsbmFtZWxlbjsKKwljaGFyICpmdWxsbmFtZTsKKworCWlmICghcHJlZml4KQorCQlwcmVmaXggPSAiIjsKKworCS8qIFdyb25nIHN0YWdlIG51bWJlcj8gKi8KKwlwb3MgPSBjYWNoZV9uYW1lX3BvcyhmaWxlbmFtZSwgbmFtZWxlbik7CisJaWYgKHBvcyA8IDApCisJCXBvcyA9IC1wb3MgLSAxOworCWlmIChwb3MgPCBhY3RpdmVfbnIpIHsKKwkJY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKKwkJaWYgKGNlX25hbWVsZW4oY2UpID09IG5hbWVsZW4gJiYKKwkJICAgICFtZW1jbXAoY2UtPm5hbWUsIGZpbGVuYW1lLCBuYW1lbGVuKSkKKwkJCWRpZSgiUGF0aCAnJXMnIGlzIGluIHRoZSBpbmRleCwgYnV0IG5vdCBhdCBzdGFnZSAlZC5cbiIKKwkJCSAgICAiRGlkIHlvdSBtZWFuICc6JWQ6JXMnPyIsCisJCQkgICAgZmlsZW5hbWUsIHN0YWdlLAorCQkJICAgIGNlX3N0YWdlKGNlKSwgZmlsZW5hbWUpOworCX0KKworCS8qIENvbmZ1c2lvbiBiZXR3ZWVuIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBmaWxlbmFtZXM/ICovCisJZnVsbG5hbWVsZW4gPSBuYW1lbGVuICsgc3RybGVuKHByZWZpeCk7CisJZnVsbG5hbWUgPSB4bWFsbG9jKGZ1bGxuYW1lbGVuICsgMSk7CisJc3RyY3B5KGZ1bGxuYW1lLCBwcmVmaXgpOworCXN0cmNhdChmdWxsbmFtZSwgZmlsZW5hbWUpOworCXBvcyA9IGNhY2hlX25hbWVfcG9zKGZ1bGxuYW1lLCBmdWxsbmFtZWxlbik7CisJaWYgKHBvcyA8IDApCisJCXBvcyA9IC1wb3MgLSAxOworCWlmIChwb3MgPCBhY3RpdmVfbnIpIHsKKwkJY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKKwkJaWYgKGNlX25hbWVsZW4oY2UpID09IGZ1bGxuYW1lbGVuICYmCisJCSAgICAhbWVtY21wKGNlLT5uYW1lLCBmdWxsbmFtZSwgZnVsbG5hbWVsZW4pKQorCQkJZGllKCJQYXRoICclcycgaXMgaW4gdGhlIGluZGV4LCBidXQgbm90ICclcycuXG4iCisJCQkgICAgIkRpZCB5b3UgbWVhbiAnOiVkOiVzJz8iLAorCQkJICAgIGZ1bGxuYW1lLCBmaWxlbmFtZSwKKwkJCSAgICBjZV9zdGFnZShjZSksIGZ1bGxuYW1lKTsKKwl9CisKKwlpZiAoIWxzdGF0KGZpbGVuYW1lLCAmc3QpKQorCQlkaWUoIlBhdGggJyVzJyBleGlzdHMgb24gZGlzaywgYnV0IG5vdCBpbiB0aGUgaW5kZXguIiwgZmlsZW5hbWUpOworCWlmIChlcnJubyA9PSBFTk9FTlQgfHwgZXJybm8gPT0gRU5PVERJUikKKwkJZGllKCJQYXRoICclcycgZG9lcyBub3QgZXhpc3QgKG5laXRoZXIgb24gZGlzayBub3IgaW4gdGhlIGluZGV4KS4iLAorCQkgICAgZmlsZW5hbWUpOworCisJZnJlZShmdWxsbmFtZSk7Cit9CisKKworaW50IGdldF9zaGExX3dpdGhfbW9kZV8xKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEsIHVuc2lnbmVkICptb2RlLCBpbnQgZ2VudGx5LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CiAJaW50IHJldCwgYnJhY2tldF9kZXB0aDsKIAlpbnQgbmFtZWxlbiA9IHN0cmxlbihuYW1lKTsKQEAgLTg1MCw2ICsxMDc2LDggQEAKIAkJCX0KIAkJCXBvcysrOwogCQl9CisJCWlmICghZ2VudGx5KQorCQkJZGlhZ25vc2VfaW52YWxpZF9pbmRleF9wYXRoKHN0YWdlLCBwcmVmaXgsIGNwKTsKIAkJcmV0dXJuIC0xOwogCX0KIAlmb3IgKGNwID0gbmFtZSwgYnJhY2tldF9kZXB0aCA9IDA7ICpjcDsgY3ArKykgewpAQCAtODYyLDkgKzEwOTAsMjUgQEAKIAl9CiAJaWYgKCpjcCA9PSAnOicpIHsKIAkJdW5zaWduZWQgY2hhciB0cmVlX3NoYTFbMjBdOwotCQlpZiAoIWdldF9zaGExXzEobmFtZSwgY3AtbmFtZSwgdHJlZV9zaGExKSkKLQkJCXJldHVybiBnZXRfdHJlZV9lbnRyeSh0cmVlX3NoYTEsIGNwKzEsIHNoYTEsCi0JCQkJCSAgICAgIG1vZGUpOworCQljaGFyICpvYmplY3RfbmFtZSA9IE5VTEw7CisJCWlmICghZ2VudGx5KSB7CisJCQlvYmplY3RfbmFtZSA9IHhtYWxsb2MoY3AtbmFtZSsxKTsKKwkJCXN0cm5jcHkob2JqZWN0X25hbWUsIG5hbWUsIGNwLW5hbWUpOworCQkJb2JqZWN0X25hbWVbY3AtbmFtZV0gPSAnXDAnOworCQl9CisJCWlmICghZ2V0X3NoYTFfMShuYW1lLCBjcC1uYW1lLCB0cmVlX3NoYTEpKSB7CisJCQljb25zdCBjaGFyICpmaWxlbmFtZSA9IGNwKzE7CisJCQlyZXQgPSBnZXRfdHJlZV9lbnRyeSh0cmVlX3NoYTEsIGZpbGVuYW1lLCBzaGExLCBtb2RlKTsKKwkJCWlmICghZ2VudGx5KSB7CisJCQkJZGlhZ25vc2VfaW52YWxpZF9zaGExX3BhdGgocHJlZml4LCBmaWxlbmFtZSwKKwkJCQkJCQkgICB0cmVlX3NoYTEsIG9iamVjdF9uYW1lKTsKKwkJCQlmcmVlKG9iamVjdF9uYW1lKTsKKwkJCX0KKwkJCXJldHVybiByZXQ7CisJCX0gZWxzZSB7CisJCQlpZiAoIWdlbnRseSkKKwkJCQlkaWUoIkludmFsaWQgb2JqZWN0IG5hbWUgJyVzJy4iLCBvYmplY3RfbmFtZSk7CisJCX0KIAl9CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL3NoZWxsLmMgYi9zaGVsbC5jCmluZGV4IGI5NjhiZTcuLmU0ODY0ZTAgMTAwNjQ0Ci0tLSBhL3NoZWxsLmMKKysrIGIvc2hlbGwuYwpAQCAtNjAsNyArNjAsNyBAQAogCXdoaWxlIChkZXZudWxsX2ZkID49IDAgJiYgZGV2bnVsbF9mZCA8PSAyKQogCQlkZXZudWxsX2ZkID0gZHVwKGRldm51bGxfZmQpOwogCWlmIChkZXZudWxsX2ZkID09IC0xKQotCQlkaWUoIm9wZW5pbmcgL2Rldi9udWxsIGZhaWxlZCAoJXMpIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJvcGVuaW5nIC9kZXYvbnVsbCBmYWlsZWQiKTsKIAljbG9zZSAoZGV2bnVsbF9mZCk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc2hvdy1pbmRleC5jIGIvc2hvdy1pbmRleC5jCmluZGV4IDQ1YmI1MzUuLjRjMGFjMTMgMTAwNjQ0Ci0tLSBhL3Nob3ctaW5kZXguYworKysgYi9zaG93LWluZGV4LmMKQEAgLTEsNiArMSw5IEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlICJwYWNrLmgiCiAKK3N0YXRpYyBjb25zdCBjaGFyIHNob3dfaW5kZXhfdXNhZ2VbXSA9CisiZ2l0IHNob3ctaW5kZXggPCA8cGFja2VkIGFyY2hpdmUgaW5kZXg+IjsKKwogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCWludCBpOwpAQCAtOCw2ICsxMSw4IEBACiAJdW5zaWduZWQgaW50IHZlcnNpb247CiAJc3RhdGljIHVuc2lnbmVkIGludCB0b3BfaW5kZXhbMjU2XTsKIAorCWlmIChhcmdjICE9IDEpCisJCXVzYWdlKHNob3dfaW5kZXhfdXNhZ2UpOwogCWlmIChmcmVhZCh0b3BfaW5kZXgsIDIgKiA0LCAxLCBzdGRpbikgIT0gMSkKIAkJZGllKCJ1bmFibGUgdG8gcmVhZCBoZWFkZXIiKTsKIAlpZiAodG9wX2luZGV4WzBdID09IGh0b25sKFBBQ0tfSURYX1NJR05BVFVSRSkpIHsKQEAgLTQzLDcgKzQ4LDcgQEAKIAkJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CiAJCQl1aW50MzJfdCBjcmM7CiAJCQl1aW50MzJfdCBvZmY7Ci0JCX0gKmVudHJpZXMgPSB4bWFsbG9jKG5yICogc2l6ZW9mKGVudHJpZXNbMF0pKTsKKwkJfSAqZW50cmllcyA9IG1hbGxvYyhuciAqIHNpemVvZihlbnRyaWVzWzBdKSk7CiAJCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQogCQkJaWYgKGZyZWFkKGVudHJpZXNbaV0uc2hhMSwgMjAsIDEsIHN0ZGluKSAhPSAxKQogCQkJCWRpZSgidW5hYmxlIHRvIHJlYWQgc2hhMSAldS8ldSIsIGksIG5yKTsKZGlmZiAtLWdpdCBhL3NpZGViYW5kLmMgYi9zaWRlYmFuZC5jCmluZGV4IDg5OWIxZmYuLmQ1ZmZhMWMgMTAwNjQ0Ci0tLSBhL3NpZGViYW5kLmMKKysrIGIvc2lkZWJhbmQuYwpAQCAtMTM1LDkgKzEzNSwxNCBAQAogCQluID0gc3o7CiAJCWlmIChwYWNrZXRfbWF4IC0gNSA8IG4pCiAJCQluID0gcGFja2V0X21heCAtIDU7Ci0JCXNwcmludGYoaGRyLCAiJTA0eCIsIG4gKyA1KTsKLQkJaGRyWzRdID0gYmFuZDsKLQkJc2FmZV93cml0ZShmZCwgaGRyLCA1KTsKKwkJaWYgKDAgPD0gYmFuZCkgeworCQkJc3ByaW50ZihoZHIsICIlMDR4IiwgbiArIDUpOworCQkJaGRyWzRdID0gYmFuZDsKKwkJCXNhZmVfd3JpdGUoZmQsIGhkciwgNSk7CisJCX0gZWxzZSB7CisJCQlzcHJpbnRmKGhkciwgIiUwNHgiLCBuICsgNCk7CisJCQlzYWZlX3dyaXRlKGZkLCBoZHIsIDQpOworCQl9CiAJCXNhZmVfd3JpdGUoZmQsIHAsIG4pOwogCQlwICs9IG47CiAJCXN6IC09IG47CmRpZmYgLS1naXQgYS9zdHJidWYuYyBiL3N0cmJ1Zi5jCmluZGV4IGYwM2QxMTcuLmJjM2EwODAgMTAwNjQ0Ci0tLSBhL3N0cmJ1Zi5jCisrKyBiL3N0cmJ1Zi5jCkBAIC0xMCw2ICsxMCwxNSBAQAogCQkJcmV0dXJuICh1bnNpZ25lZCBjaGFyKSpwcmVmaXggLSAodW5zaWduZWQgY2hhcikqc3RyOwogfQogCitpbnQgc3VmZml4Y21wKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqc3VmZml4KQoreworCWludCBsZW4gPSBzdHJsZW4oc3RyKSwgc3VmbGVuID0gc3RybGVuKHN1ZmZpeCk7CisJaWYgKGxlbiA8IHN1ZmxlbikKKwkJcmV0dXJuIC0xOworCWVsc2UKKwkJcmV0dXJuIHN0cmNtcChzdHIgKyBsZW4gLSBzdWZsZW4sIHN1ZmZpeCk7Cit9CisKIC8qCiAgKiBVc2VkIGFzIHRoZSBkZWZhdWx0IC0+YnVmIHZhbHVlLCBzbyB0aGF0IHBlb3BsZSBjYW4gYWx3YXlzIGFzc3VtZQogICogYnVmIGlzIG5vbiBOVUxMIGFuZCAtPmJ1ZiBpcyBOVUwgdGVybWluYXRlZCBldmVuIGZvciBhIGZyZXNobHkKQEAgLTkxLDEzICsxMDAsNiBAQAogCXNiLT5idWZbc2ItPmxlbl0gPSAnXDAnOwogfQogCi12b2lkIHN0cmJ1Zl90b2xvd2VyKHN0cnVjdCBzdHJidWYgKnNiKQotewotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBzYi0+bGVuOyBpKyspCi0JCXNiLT5idWZbaV0gPSB0b2xvd2VyKHNiLT5idWZbaV0pOwotfQotCiBzdHJ1Y3Qgc3RyYnVmICoqc3RyYnVmX3NwbGl0KGNvbnN0IHN0cnVjdCBzdHJidWYgKnNiLCBpbnQgZGVsaW0pCiB7CiAJaW50IGFsbG9jID0gMiwgcG9zID0gMDsKQEAgLTIyNyw2ICsyMjksMTIgQEAKIAkJCWJyZWFrOwogCQlmb3JtYXQgPSBwZXJjZW50ICsgMTsKIAorCQlpZiAoKmZvcm1hdCA9PSAnJScpIHsKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgJyUnKTsKKwkJCWZvcm1hdCsrOworCQkJY29udGludWU7CisJCX0KKwogCQljb25zdW1lZCA9IGZuKHNiLCBmb3JtYXQsIGNvbnRleHQpOwogCQlpZiAoY29uc3VtZWQpCiAJCQlmb3JtYXQgKz0gY29uc3VtZWQ7CkBAIC0yNTEsNiArMjU5LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQgc3RyYnVmX2FkZGJ1Zl9wZXJjZW50cXVvdGUoc3RydWN0IHN0cmJ1ZiAqZHN0LCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpzcmMpCit7CisJaW50IGksIGxlbiA9IHNyYy0+bGVuOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWlmIChzcmMtPmJ1ZltpXSA9PSAnJScpCisJCQlzdHJidWZfYWRkY2goZHN0LCAnJScpOworCQlzdHJidWZfYWRkY2goZHN0LCBzcmMtPmJ1ZltpXSk7CisJfQorfQorCiBzaXplX3Qgc3RyYnVmX2ZyZWFkKHN0cnVjdCBzdHJidWYgKnNiLCBzaXplX3Qgc2l6ZSwgRklMRSAqZikKIHsKIAlzaXplX3QgcmVzOwpAQCAtMzIyLDcgKzM0MSw3IEBACiAJcmV0dXJuIC0xOwogfQogCi1pbnQgc3RyYnVmX2dldGxpbmUoc3RydWN0IHN0cmJ1ZiAqc2IsIEZJTEUgKmZwLCBpbnQgdGVybSkKK2ludCBzdHJidWZfZ2V0d2hvbGVsaW5lKHN0cnVjdCBzdHJidWYgKnNiLCBGSUxFICpmcCwgaW50IHRlcm0pCiB7CiAJaW50IGNoOwogCkBAIC0zMzIsMTAgKzM1MSwxMCBAQAogCiAJc3RyYnVmX3Jlc2V0KHNiKTsKIAl3aGlsZSAoKGNoID0gZmdldGMoZnApKSAhPSBFT0YpIHsKLQkJaWYgKGNoID09IHRlcm0pCi0JCQlicmVhazsKIAkJc3RyYnVmX2dyb3coc2IsIDEpOwogCQlzYi0+YnVmW3NiLT5sZW4rK10gPSBjaDsKKwkJaWYgKGNoID09IHRlcm0pCisJCQlicmVhazsKIAl9CiAJaWYgKGNoID09IEVPRiAmJiBzYi0+bGVuID09IDApCiAJCXJldHVybiBFT0Y7CkBAIC0zNDQsNiArMzYzLDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCBzdHJidWZfZ2V0bGluZShzdHJ1Y3Qgc3RyYnVmICpzYiwgRklMRSAqZnAsIGludCB0ZXJtKQoreworCWlmIChzdHJidWZfZ2V0d2hvbGVsaW5lKHNiLCBmcCwgdGVybSkpCisJCXJldHVybiBFT0Y7CisJaWYgKHNiLT5idWZbc2ItPmxlbi0xXSA9PSB0ZXJtKQorCQlzdHJidWZfc2V0bGVuKHNiLCBzYi0+bGVuLTEpOworCXJldHVybiAwOworfQorCiBpbnQgc3RyYnVmX3JlYWRfZmlsZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IGhpbnQpCiB7CiAJaW50IGZkLCBsZW47CmRpZmYgLS1naXQgYS9zdHJidWYuaCBiL3N0cmJ1Zi5oCmluZGV4IGVhYTg3MDQuLmZhYzJkYmMgMTAwNjQ0Ci0tLSBhL3N0cmJ1Zi5oCisrKyBiL3N0cmJ1Zi5oCkBAIC04MSw3ICs4MSw2IEBACiBleHRlcm4gdm9pZCBzdHJidWZfcnRyaW0oc3RydWN0IHN0cmJ1ZiAqKTsKIGV4dGVybiB2b2lkIHN0cmJ1Zl9sdHJpbShzdHJ1Y3Qgc3RyYnVmICopOwogZXh0ZXJuIGludCBzdHJidWZfY21wKGNvbnN0IHN0cnVjdCBzdHJidWYgKiwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqKTsKLWV4dGVybiB2b2lkIHN0cmJ1Zl90b2xvd2VyKHN0cnVjdCBzdHJidWYgKik7CiAKIGV4dGVybiBzdHJ1Y3Qgc3RyYnVmICoqc3RyYnVmX3NwbGl0KGNvbnN0IHN0cnVjdCBzdHJidWYgKiwgaW50IGRlbGltKTsKIGV4dGVybiB2b2lkIHN0cmJ1Zl9saXN0X2ZyZWUoc3RydWN0IHN0cmJ1ZiAqKik7CkBAIC0xMDUsNiArMTA0LDcgQEAKIAlzdHJidWZfYWRkKHNiLCBzLCBzdHJsZW4ocykpOwogfQogc3RhdGljIGlubGluZSB2b2lkIHN0cmJ1Zl9hZGRidWYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IHN0cnVjdCBzdHJidWYgKnNiMikgeworCXN0cmJ1Zl9ncm93KHNiLCBzYjItPmxlbik7CiAJc3RyYnVmX2FkZChzYiwgc2IyLT5idWYsIHNiMi0+bGVuKTsKIH0KIGV4dGVybiB2b2lkIHN0cmJ1Zl9hZGRkdXAoc3RydWN0IHN0cmJ1ZiAqc2IsIHNpemVfdCBwb3MsIHNpemVfdCBsZW4pOwpAQCAtMTE2LDggKzExNiw5IEBACiAJY29uc3QgY2hhciAqdmFsdWU7CiB9OwogZXh0ZXJuIHNpemVfdCBzdHJidWZfZXhwYW5kX2RpY3RfY2Ioc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnBsYWNlaG9sZGVyLCB2b2lkICpjb250ZXh0KTsKK2V4dGVybiB2b2lkIHN0cmJ1Zl9hZGRidWZfcGVyY2VudHF1b3RlKHN0cnVjdCBzdHJidWYgKmRzdCwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqc3JjKTsKIAotX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwyLDMpKSkKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLDIsMykpKQogZXh0ZXJuIHZvaWQgc3RyYnVmX2FkZGYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKIAogZXh0ZXJuIHNpemVfdCBzdHJidWZfZnJlYWQoc3RydWN0IHN0cmJ1ZiAqLCBzaXplX3QsIEZJTEUgKik7CkBAIC0xMjYsNiArMTI3LDcgQEAKIGV4dGVybiBpbnQgc3RyYnVmX3JlYWRfZmlsZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IGhpbnQpOwogZXh0ZXJuIGludCBzdHJidWZfcmVhZGxpbmsoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnBhdGgsIHNpemVfdCBoaW50KTsKIAorZXh0ZXJuIGludCBzdHJidWZfZ2V0d2hvbGVsaW5lKHN0cnVjdCBzdHJidWYgKiwgRklMRSAqLCBpbnQpOwogZXh0ZXJuIGludCBzdHJidWZfZ2V0bGluZShzdHJ1Y3Qgc3RyYnVmICosIEZJTEUgKiwgaW50KTsKIAogZXh0ZXJuIHZvaWQgc3RyaXBzcGFjZShzdHJ1Y3Qgc3RyYnVmICpidWYsIGludCBza2lwX2NvbW1lbnRzKTsKZGlmZiAtLWdpdCBhL3N0cmluZy1saXN0LmggYi9zdHJpbmctbGlzdC5oCmluZGV4IDE0YmJjNDcuLjY1NjljZjYgMTAwNjQ0Ci0tLSBhL3N0cmluZy1saXN0LmgKKysrIGIvc3RyaW5nLWxpc3QuaApAQCAtMSw1ICsxLDUgQEAKLSNpZm5kZWYgUEFUSF9MSVNUX0gKLSNkZWZpbmUgUEFUSF9MSVNUX0gKKyNpZm5kZWYgU1RSSU5HX0xJU1RfSAorI2RlZmluZSBTVFJJTkdfTElTVF9ICiAKIHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtIHsKIAljaGFyICpzdHJpbmc7CkBAIC0zOSw0ICszOSw0IEBACiB2b2lkIHNvcnRfc3RyaW5nX2xpc3Qoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0KTsKIGludCB1bnNvcnRlZF9zdHJpbmdfbGlzdF9oYXNfc3RyaW5nKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqc3RyaW5nKTsKIAotI2VuZGlmIC8qIFBBVEhfTElTVF9IICovCisjZW5kaWYgLyogU1RSSU5HX0xJU1RfSCAqLwpkaWZmIC0tZ2l0IGEvc3VibW9kdWxlLmMgYi9zdWJtb2R1bGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDI4NmU0Ci0tLSAvZGV2L251bGwKKysrIGIvc3VibW9kdWxlLmMKQEAgLTAsMCArMSwxNzMgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisKK3N0YXRpYyBpbnQgYWRkX3N1Ym1vZHVsZV9vZGIoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG9iamVjdHNfZGlyZWN0b3J5ID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGFsdGVybmF0ZV9vYmplY3RfZGF0YWJhc2UgKmFsdF9vZGI7CisJaW50IHJldCA9IDA7CisKKwlzdHJidWZfYWRkZigmb2JqZWN0c19kaXJlY3RvcnksICIlcy8uZ2l0L29iamVjdHMvIiwgcGF0aCk7CisJaWYgKCFpc19kaXJlY3Rvcnkob2JqZWN0c19kaXJlY3RvcnkuYnVmKSkgeworCQlyZXQgPSAtMTsKKwkJZ290byBkb25lOworCX0KKwkvKiBhdm9pZCBhZGRpbmcgaXQgdHdpY2UgKi8KKwlmb3IgKGFsdF9vZGIgPSBhbHRfb2RiX2xpc3Q7IGFsdF9vZGI7IGFsdF9vZGIgPSBhbHRfb2RiLT5uZXh0KQorCQlpZiAoYWx0X29kYi0+bmFtZSAtIGFsdF9vZGItPmJhc2UgPT0gb2JqZWN0c19kaXJlY3RvcnkubGVuICYmCisJCQkJIXN0cm5jbXAoYWx0X29kYi0+YmFzZSwgb2JqZWN0c19kaXJlY3RvcnkuYnVmLAorCQkJCQlvYmplY3RzX2RpcmVjdG9yeS5sZW4pKQorCQkJZ290byBkb25lOworCisJYWx0X29kYiA9IHhtYWxsb2Mob2JqZWN0c19kaXJlY3RvcnkubGVuICsgNDIgKyBzaXplb2YoKmFsdF9vZGIpKTsKKwlhbHRfb2RiLT5uZXh0ID0gYWx0X29kYl9saXN0OworCXN0cmNweShhbHRfb2RiLT5iYXNlLCBvYmplY3RzX2RpcmVjdG9yeS5idWYpOworCWFsdF9vZGItPm5hbWUgPSBhbHRfb2RiLT5iYXNlICsgb2JqZWN0c19kaXJlY3RvcnkubGVuOworCWFsdF9vZGItPm5hbWVbMl0gPSAnLyc7CisJYWx0X29kYi0+bmFtZVs0MF0gPSAnXDAnOworCWFsdF9vZGItPm5hbWVbNDFdID0gJ1wwJzsKKwlhbHRfb2RiX2xpc3QgPSBhbHRfb2RiOworCXByZXBhcmVfYWx0X29kYigpOworZG9uZToKKwlzdHJidWZfcmVsZWFzZSgmb2JqZWN0c19kaXJlY3RvcnkpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgc2hvd19zdWJtb2R1bGVfc3VtbWFyeShGSUxFICpmLCBjb25zdCBjaGFyICpwYXRoLAorCQl1bnNpZ25lZCBjaGFyIG9uZVsyMF0sIHVuc2lnbmVkIGNoYXIgdHdvWzIwXSwKKwkJdW5zaWduZWQgZGlydHlfc3VibW9kdWxlLAorCQljb25zdCBjaGFyICpkZWwsIGNvbnN0IGNoYXIgKmFkZCwgY29uc3QgY2hhciAqcmVzZXQpCit7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQsICpsZWZ0ID0gbGVmdCwgKnJpZ2h0ID0gcmlnaHQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICptZXJnZV9iYXNlcywgKmxpc3Q7CisJY29uc3QgY2hhciAqbWVzc2FnZSA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXN0YXRpYyBjb25zdCBjaGFyICpmb3JtYXQgPSAiICAlbSAlcyI7CisJaW50IGZhc3RfZm9yd2FyZCA9IDAsIGZhc3RfYmFja3dhcmQgPSAwOworCisJaWYgKGlzX251bGxfc2hhMSh0d28pKQorCQltZXNzYWdlID0gIihzdWJtb2R1bGUgZGVsZXRlZCkiOworCWVsc2UgaWYgKGFkZF9zdWJtb2R1bGVfb2RiKHBhdGgpKQorCQltZXNzYWdlID0gIihub3QgY2hlY2tlZCBvdXQpIjsKKwllbHNlIGlmIChpc19udWxsX3NoYTEob25lKSkKKwkJbWVzc2FnZSA9ICIobmV3IHN1Ym1vZHVsZSkiOworCWVsc2UgaWYgKCEobGVmdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKG9uZSkpIHx8CisJCSAhKHJpZ2h0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UodHdvKSkpCisJCW1lc3NhZ2UgPSAiKGNvbW1pdHMgbm90IHByZXNlbnQpIjsKKworCWlmICghbWVzc2FnZSkgeworCQlpbml0X3JldmlzaW9ucygmcmV2LCBOVUxMKTsKKwkJc2V0dXBfcmV2aXNpb25zKDAsIE5VTEwsICZyZXYsIE5VTEwpOworCQlyZXYubGVmdF9yaWdodCA9IDE7CisJCXJldi5maXJzdF9wYXJlbnRfb25seSA9IDE7CisJCWxlZnQtPm9iamVjdC5mbGFncyB8PSBTWU1NRVRSSUNfTEVGVDsKKwkJYWRkX3BlbmRpbmdfb2JqZWN0KCZyZXYsICZsZWZ0LT5vYmplY3QsIHBhdGgpOworCQlhZGRfcGVuZGluZ19vYmplY3QoJnJldiwgJnJpZ2h0LT5vYmplY3QsIHBhdGgpOworCQltZXJnZV9iYXNlcyA9IGdldF9tZXJnZV9iYXNlcyhsZWZ0LCByaWdodCwgMSk7CisJCWlmIChtZXJnZV9iYXNlcykgeworCQkJaWYgKG1lcmdlX2Jhc2VzLT5pdGVtID09IGxlZnQpCisJCQkJZmFzdF9mb3J3YXJkID0gMTsKKwkJCWVsc2UgaWYgKG1lcmdlX2Jhc2VzLT5pdGVtID09IHJpZ2h0KQorCQkJCWZhc3RfYmFja3dhcmQgPSAxOworCQl9CisJCWZvciAobGlzdCA9IG1lcmdlX2Jhc2VzOyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkgeworCQkJbGlzdC0+aXRlbS0+b2JqZWN0LmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisJCQlhZGRfcGVuZGluZ19vYmplY3QoJnJldiwgJmxpc3QtPml0ZW0tPm9iamVjdCwKKwkJCQlzaGExX3RvX2hleChsaXN0LT5pdGVtLT5vYmplY3Quc2hhMSkpOworCQl9CisJCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldikpCisJCQltZXNzYWdlID0gIihyZXZpc2lvbiB3YWxrZXIgZmFpbGVkKSI7CisJfQorCisJc3RyYnVmX2FkZGYoJnNiLCAiU3VibW9kdWxlICVzICVzLi4iLCBwYXRoLAorCQkJZmluZF91bmlxdWVfYWJicmV2KG9uZSwgREVGQVVMVF9BQkJSRVYpKTsKKwlpZiAoIWZhc3RfYmFja3dhcmQgJiYgIWZhc3RfZm9yd2FyZCkKKwkJc3RyYnVmX2FkZGNoKCZzYiwgJy4nKTsKKwlzdHJidWZfYWRkZigmc2IsICIlcyIsIGZpbmRfdW5pcXVlX2FiYnJldih0d28sIERFRkFVTFRfQUJCUkVWKSk7CisJaWYgKGRpcnR5X3N1Ym1vZHVsZSkKKwkJc3RyYnVmX2FkZCgmc2IsICItZGlydHkiLCA2KTsKKwlpZiAobWVzc2FnZSkKKwkJc3RyYnVmX2FkZGYoJnNiLCAiICVzXG4iLCBtZXNzYWdlKTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRmKCZzYiwgIiVzOlxuIiwgZmFzdF9iYWNrd2FyZCA/ICIgKHJld2luZCkiIDogIiIpOworCWZ3cml0ZShzYi5idWYsIHNiLmxlbiwgMSwgZik7CisKKwlpZiAoIW1lc3NhZ2UpIHsKKwkJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24oJnJldikpKSB7CisJCQlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgY3R4ID0gezB9OworCQkJY3R4LmRhdGVfbW9kZSA9IHJldi5kYXRlX21vZGU7CisJCQlzdHJidWZfc2V0bGVuKCZzYiwgMCk7CisJCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBTWU1NRVRSSUNfTEVGVCkgeworCQkJCWlmIChkZWwpCisJCQkJCXN0cmJ1Zl9hZGRzdHIoJnNiLCBkZWwpOworCQkJfQorCQkJZWxzZSBpZiAoYWRkKQorCQkJCXN0cmJ1Zl9hZGRzdHIoJnNiLCBhZGQpOworCQkJZm9ybWF0X2NvbW1pdF9tZXNzYWdlKGNvbW1pdCwgZm9ybWF0LCAmc2IsICZjdHgpOworCQkJaWYgKHJlc2V0KQorCQkJCXN0cmJ1Zl9hZGRzdHIoJnNiLCByZXNldCk7CisJCQlzdHJidWZfYWRkY2goJnNiLCAnXG4nKTsKKwkJCWZwcmludGYoZiwgIiVzIiwgc2IuYnVmKTsKKwkJfQorCQljbGVhcl9jb21taXRfbWFya3MobGVmdCwgfjApOworCQljbGVhcl9jb21taXRfbWFya3MocmlnaHQsIH4wKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKworaW50IGlzX3N1Ym1vZHVsZV9tb2RpZmllZChjb25zdCBjaGFyICpwYXRoKQoreworCWludCBsZW4sIGk7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3A7CisJY29uc3QgY2hhciAqYXJndltdID0geworCQkic3RhdHVzIiwKKwkJIi0tcG9yY2VsYWluIiwKKwkJTlVMTCwKKwl9OworCWNvbnN0IGNoYXIgKmVudltMT0NBTF9SRVBPX0VOVl9TSVpFICsgM107CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWZvciAoaSA9IDA7IGkgPCBMT0NBTF9SRVBPX0VOVl9TSVpFOyBpKyspCisJCWVudltpXSA9IGxvY2FsX3JlcG9fZW52W2ldOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzLy5naXQvIiwgcGF0aCk7CisJaWYgKCFpc19kaXJlY3RvcnkoYnVmLmJ1ZikpIHsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCS8qIFRoZSBzdWJtb2R1bGUgaXMgbm90IGNoZWNrZWQgb3V0LCBzbyBpdCBpcyBub3QgbW9kaWZpZWQgKi8KKwkJcmV0dXJuIDA7CisKKwl9CisJc3RyYnVmX3Jlc2V0KCZidWYpOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgIkdJVF9XT1JLX1RSRUU9JXMiLCBwYXRoKTsKKwllbnZbaSsrXSA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisJc3RyYnVmX2FkZGYoJmJ1ZiwgIkdJVF9ESVI9JXMvLmdpdCIsIHBhdGgpOworCWVudltpKytdID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKwllbnZbaV0gPSBOVUxMOworCisJbWVtc2V0KCZjcCwgMCwgc2l6ZW9mKGNwKSk7CisJY3AuYXJndiA9IGFyZ3Y7CisJY3AuZW52ID0gZW52OworCWNwLmdpdF9jbWQgPSAxOworCWNwLm5vX3N0ZGluID0gMTsKKwljcC5vdXQgPSAtMTsKKwlpZiAoc3RhcnRfY29tbWFuZCgmY3ApKQorCQlkaWUoIkNvdWxkIG5vdCBydW4gZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiIpOworCisJbGVuID0gc3RyYnVmX3JlYWQoJmJ1ZiwgY3Aub3V0LCAxMDI0KTsKKwljbG9zZShjcC5vdXQpOworCisJaWYgKGZpbmlzaF9jb21tYW5kKCZjcCkpCisJCWRpZSgiZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiBmYWlsZWQiKTsKKworCWZvciAoaSA9IExPQ0FMX1JFUE9fRU5WX1NJWkU7IGVudltpXTsgaSsrKQorCQlmcmVlKChjaGFyICopZW52W2ldKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gbGVuICE9IDA7Cit9CmRpZmYgLS1naXQgYS9zdWJtb2R1bGUuaCBiL3N1Ym1vZHVsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMzY5NjUKLS0tIC9kZXYvbnVsbAorKysgYi9zdWJtb2R1bGUuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIFNVQk1PRFVMRV9ICisjZGVmaW5lIFNVQk1PRFVMRV9ICisKK3ZvaWQgc2hvd19zdWJtb2R1bGVfc3VtbWFyeShGSUxFICpmLCBjb25zdCBjaGFyICpwYXRoLAorCQl1bnNpZ25lZCBjaGFyIG9uZVsyMF0sIHVuc2lnbmVkIGNoYXIgdHdvWzIwXSwKKwkJdW5zaWduZWQgZGlydHlfc3VibW9kdWxlLAorCQljb25zdCBjaGFyICpkZWwsIGNvbnN0IGNoYXIgKmFkZCwgY29uc3QgY2hhciAqcmVzZXQpOworaW50IGlzX3N1Ym1vZHVsZV9tb2RpZmllZChjb25zdCBjaGFyICpwYXRoKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zeW1saW5rcy5jIGIvc3ltbGlua3MuYwppbmRleCAxZDZiMzViLi44ODYwMTIwIDEwMDY0NAotLS0gYS9zeW1saW5rcy5jCisrKyBiL3N5bWxpbmtzLmMKQEAgLTMyLDE5ICszMiwxMyBAQAogCXJldHVybiBtYXRjaF9sZW47CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY2FjaGVfZGVmIHsKLQljaGFyIHBhdGhbUEFUSF9NQVggKyAxXTsKLQlpbnQgbGVuOwotCWludCBmbGFnczsKLQlpbnQgdHJhY2tfZmxhZ3M7Ci0JaW50IHByZWZpeF9sZW5fc3RhdF9mdW5jOwotfSBjYWNoZTsKK3N0YXRpYyBzdHJ1Y3QgY2FjaGVfZGVmIGRlZmF1bHRfY2FjaGU7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByZXNldF9sc3RhdF9jYWNoZSh2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIHJlc2V0X2xzdGF0X2NhY2hlKHN0cnVjdCBjYWNoZV9kZWYgKmNhY2hlKQogewotCWNhY2hlLnBhdGhbMF0gPSAnXDAnOwotCWNhY2hlLmxlbiA9IDA7Ci0JY2FjaGUuZmxhZ3MgPSAwOworCWNhY2hlLT5wYXRoWzBdID0gJ1wwJzsKKwljYWNoZS0+bGVuID0gMDsKKwljYWNoZS0+ZmxhZ3MgPSAwOwogCS8qCiAJICogVGhlIHRyYWNrX2ZsYWdzIGFuZCBwcmVmaXhfbGVuX3N0YXRfZnVuYyBtZW1iZXJzIGlzIG9ubHkKIAkgKiBzZXQgYnkgdGhlIHNhZmVndWFyZCBydWxlIGluc2lkZSBsc3RhdF9jYWNoZSgpCkBAIC03MCwyMyArNjQsMjMgQEAKICAqIG9mIHRoZSBwcmVmaXgsIHdoZXJlIHRoZSBjYWNoZSBzaG91bGQgdXNlIHRoZSBzdGF0KCkgZnVuY3Rpb24KICAqIGluc3RlYWQgb2YgdGhlIGxzdGF0KCkgZnVuY3Rpb24gdG8gdGVzdCBlYWNoIHBhdGggY29tcG9uZW50LgogICovCi1zdGF0aWMgaW50IGxzdGF0X2NhY2hlKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sCitzdGF0aWMgaW50IGxzdGF0X2NhY2hlKHN0cnVjdCBjYWNoZV9kZWYgKmNhY2hlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLAogCQkgICAgICAgaW50IHRyYWNrX2ZsYWdzLCBpbnQgcHJlZml4X2xlbl9zdGF0X2Z1bmMpCiB7CiAJaW50IG1hdGNoX2xlbiwgbGFzdF9zbGFzaCwgbGFzdF9zbGFzaF9kaXIsIHByZXZpb3VzX3NsYXNoOwogCWludCBtYXRjaF9mbGFncywgcmV0X2ZsYWdzLCBzYXZlX2ZsYWdzLCBtYXhfbGVuLCByZXQ7CiAJc3RydWN0IHN0YXQgc3Q7CiAKLQlpZiAoY2FjaGUudHJhY2tfZmxhZ3MgIT0gdHJhY2tfZmxhZ3MgfHwKLQkgICAgY2FjaGUucHJlZml4X2xlbl9zdGF0X2Z1bmMgIT0gcHJlZml4X2xlbl9zdGF0X2Z1bmMpIHsKKwlpZiAoY2FjaGUtPnRyYWNrX2ZsYWdzICE9IHRyYWNrX2ZsYWdzIHx8CisJICAgIGNhY2hlLT5wcmVmaXhfbGVuX3N0YXRfZnVuYyAhPSBwcmVmaXhfbGVuX3N0YXRfZnVuYykgewogCQkvKgogCQkgKiBBcyBhIHNhZmVndWFyZCBydWxlIHdlIGNsZWFyIHRoZSBjYWNoZSBpZiB0aGUKIAkJICogdmFsdWVzIG9mIHRyYWNrX2ZsYWdzIGFuZC9vciBwcmVmaXhfbGVuX3N0YXRfZnVuYwogCQkgKiBkb2VzIG5vdCBtYXRjaCB3aXRoIHRoZSBsYXN0IHN1cHBsaWVkIHZhbHVlcy4KIAkJICovCi0JCXJlc2V0X2xzdGF0X2NhY2hlKCk7Ci0JCWNhY2hlLnRyYWNrX2ZsYWdzID0gdHJhY2tfZmxhZ3M7Ci0JCWNhY2hlLnByZWZpeF9sZW5fc3RhdF9mdW5jID0gcHJlZml4X2xlbl9zdGF0X2Z1bmM7CisJCXJlc2V0X2xzdGF0X2NhY2hlKGNhY2hlKTsKKwkJY2FjaGUtPnRyYWNrX2ZsYWdzID0gdHJhY2tfZmxhZ3M7CisJCWNhY2hlLT5wcmVmaXhfbGVuX3N0YXRfZnVuYyA9IHByZWZpeF9sZW5fc3RhdF9mdW5jOwogCQltYXRjaF9sZW4gPSBsYXN0X3NsYXNoID0gMDsKIAl9IGVsc2UgewogCQkvKgpAQCAtOTQsMTAgKzg4LDE0IEBACiAJCSAqIHRoZSAyICJleGNsdWRpbmciIHBhdGggdHlwZXMuCiAJCSAqLwogCQltYXRjaF9sZW4gPSBsYXN0X3NsYXNoID0KLQkJCWxvbmdlc3RfcGF0aF9tYXRjaChuYW1lLCBsZW4sIGNhY2hlLnBhdGgsIGNhY2hlLmxlbiwKKwkJCWxvbmdlc3RfcGF0aF9tYXRjaChuYW1lLCBsZW4sIGNhY2hlLT5wYXRoLCBjYWNoZS0+bGVuLAogCQkJCQkgICAmcHJldmlvdXNfc2xhc2gpOwotCQltYXRjaF9mbGFncyA9IGNhY2hlLmZsYWdzICYgdHJhY2tfZmxhZ3MgJiAoRkxfTk9FTlR8RkxfU1lNTElOSyk7Ci0JCWlmIChtYXRjaF9mbGFncyAmJiBtYXRjaF9sZW4gPT0gY2FjaGUubGVuKQorCQltYXRjaF9mbGFncyA9IGNhY2hlLT5mbGFncyAmIHRyYWNrX2ZsYWdzICYgKEZMX05PRU5UfEZMX1NZTUxJTkspOworCisJCWlmICghKHRyYWNrX2ZsYWdzICYgRkxfRlVMTFBBVEgpICYmIG1hdGNoX2xlbiA9PSBsZW4pCisJCQltYXRjaF9sZW4gPSBsYXN0X3NsYXNoID0gcHJldmlvdXNfc2xhc2g7CisKKwkJaWYgKG1hdGNoX2ZsYWdzICYmIG1hdGNoX2xlbiA9PSBjYWNoZS0+bGVuKQogCQkJcmV0dXJuIG1hdGNoX2ZsYWdzOwogCQkvKgogCQkgKiBJZiB3ZSBub3cgaGF2ZSBtYXRjaF9sZW4gPiAwLCB3ZSB3b3VsZCBrbm93IHRoYXQKQEAgLTEyMSwxOCArMTE5LDE4IEBACiAJbWF4X2xlbiA9IGxlbiA8IFBBVEhfTUFYID8gbGVuIDogUEFUSF9NQVg7CiAJd2hpbGUgKG1hdGNoX2xlbiA8IG1heF9sZW4pIHsKIAkJZG8gewotCQkJY2FjaGUucGF0aFttYXRjaF9sZW5dID0gbmFtZVttYXRjaF9sZW5dOworCQkJY2FjaGUtPnBhdGhbbWF0Y2hfbGVuXSA9IG5hbWVbbWF0Y2hfbGVuXTsKIAkJCW1hdGNoX2xlbisrOwogCQl9IHdoaWxlIChtYXRjaF9sZW4gPCBtYXhfbGVuICYmIG5hbWVbbWF0Y2hfbGVuXSAhPSAnLycpOwogCQlpZiAobWF0Y2hfbGVuID49IG1heF9sZW4gJiYgISh0cmFja19mbGFncyAmIEZMX0ZVTExQQVRIKSkKIAkJCWJyZWFrOwogCQlsYXN0X3NsYXNoID0gbWF0Y2hfbGVuOwotCQljYWNoZS5wYXRoW2xhc3Rfc2xhc2hdID0gJ1wwJzsKKwkJY2FjaGUtPnBhdGhbbGFzdF9zbGFzaF0gPSAnXDAnOwogCiAJCWlmIChsYXN0X3NsYXNoIDw9IHByZWZpeF9sZW5fc3RhdF9mdW5jKQotCQkJcmV0ID0gc3RhdChjYWNoZS5wYXRoLCAmc3QpOworCQkJcmV0ID0gc3RhdChjYWNoZS0+cGF0aCwgJnN0KTsKIAkJZWxzZQotCQkJcmV0ID0gbHN0YXQoY2FjaGUucGF0aCwgJnN0KTsKKwkJCXJldCA9IGxzdGF0KGNhY2hlLT5wYXRoLCAmc3QpOwogCiAJCWlmIChyZXQpIHsKIAkJCXJldF9mbGFncyA9IEZMX0xTVEFURVJSOwpAQCAtMTU2LDkgKzE1NCw5IEBACiAJICovCiAJc2F2ZV9mbGFncyA9IHJldF9mbGFncyAmIHRyYWNrX2ZsYWdzICYgKEZMX05PRU5UfEZMX1NZTUxJTkspOwogCWlmIChzYXZlX2ZsYWdzICYmIGxhc3Rfc2xhc2ggPiAwICYmIGxhc3Rfc2xhc2ggPD0gUEFUSF9NQVgpIHsKLQkJY2FjaGUucGF0aFtsYXN0X3NsYXNoXSA9ICdcMCc7Ci0JCWNhY2hlLmxlbiA9IGxhc3Rfc2xhc2g7Ci0JCWNhY2hlLmZsYWdzID0gc2F2ZV9mbGFnczsKKwkJY2FjaGUtPnBhdGhbbGFzdF9zbGFzaF0gPSAnXDAnOworCQljYWNoZS0+bGVuID0gbGFzdF9zbGFzaDsKKwkJY2FjaGUtPmZsYWdzID0gc2F2ZV9mbGFnczsKIAl9IGVsc2UgaWYgKCh0cmFja19mbGFncyAmIEZMX0RJUikgJiYKIAkJICAgbGFzdF9zbGFzaF9kaXIgPiAwICYmIGxhc3Rfc2xhc2hfZGlyIDw9IFBBVEhfTUFYKSB7CiAJCS8qCkBAIC0xNzIsNTMgKzE3MCwzMSBAQAogCQkgKiBjYW4gc3RpbGwgY2FjaGUgdGhlIHBhdGggY29tcG9uZW50cyBiZWZvcmUgdGhlIGxhc3QKIAkJICogb25lICh0aGUgZm91bmQgc3ltbGluayBvciBub24tZXhpc3RpbmcgY29tcG9uZW50KS4KIAkJICovCi0JCWNhY2hlLnBhdGhbbGFzdF9zbGFzaF9kaXJdID0gJ1wwJzsKLQkJY2FjaGUubGVuID0gbGFzdF9zbGFzaF9kaXI7Ci0JCWNhY2hlLmZsYWdzID0gRkxfRElSOworCQljYWNoZS0+cGF0aFtsYXN0X3NsYXNoX2Rpcl0gPSAnXDAnOworCQljYWNoZS0+bGVuID0gbGFzdF9zbGFzaF9kaXI7CisJCWNhY2hlLT5mbGFncyA9IEZMX0RJUjsKIAl9IGVsc2UgewotCQlyZXNldF9sc3RhdF9jYWNoZSgpOworCQlyZXNldF9sc3RhdF9jYWNoZShjYWNoZSk7CiAJfQogCXJldHVybiByZXRfZmxhZ3M7CiB9CiAKLS8qCi0gKiBJbnZhbGlkYXRlIHRoZSBnaXZlbiAnbmFtZScgZnJvbSB0aGUgY2FjaGUsIGlmICduYW1lJyBtYXRjaGVzCi0gKiBjb21wbGV0ZWx5IHdpdGggdGhlIGNhY2hlLgotICovCi12b2lkIGludmFsaWRhdGVfbHN0YXRfY2FjaGUoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKLXsKLQlpbnQgbWF0Y2hfbGVuLCBwcmV2aW91c19zbGFzaDsKLQotCW1hdGNoX2xlbiA9IGxvbmdlc3RfcGF0aF9tYXRjaChuYW1lLCBsZW4sIGNhY2hlLnBhdGgsIGNhY2hlLmxlbiwKLQkJCQkgICAgICAgJnByZXZpb3VzX3NsYXNoKTsKLQlpZiAobGVuID09IG1hdGNoX2xlbikgewotCQlpZiAoKGNhY2hlLnRyYWNrX2ZsYWdzICYgRkxfRElSKSAmJiBwcmV2aW91c19zbGFzaCA+IDApIHsKLQkJCWNhY2hlLnBhdGhbcHJldmlvdXNfc2xhc2hdID0gJ1wwJzsKLQkJCWNhY2hlLmxlbiA9IHByZXZpb3VzX3NsYXNoOwotCQkJY2FjaGUuZmxhZ3MgPSBGTF9ESVI7Ci0JCX0gZWxzZQotCQkJcmVzZXRfbHN0YXRfY2FjaGUoKTsKLQl9Ci19Ci0KLS8qCi0gKiBDb21wbGV0ZWx5IGNsZWFyIHRoZSBjb250ZW50cyBvZiB0aGUgY2FjaGUKLSAqLwotdm9pZCBjbGVhcl9sc3RhdF9jYWNoZSh2b2lkKQotewotCXJlc2V0X2xzdGF0X2NhY2hlKCk7Ci19Ci0KICNkZWZpbmUgVVNFX09OTFlfTFNUQVQgIDAKIAogLyoKICAqIFJldHVybiBub24temVybyBpZiBwYXRoICduYW1lJyBoYXMgYSBsZWFkaW5nIHN5bWxpbmsgY29tcG9uZW50CiAgKi8KK2ludCB0aHJlYWRlZF9oYXNfc3ltbGlua19sZWFkaW5nX3BhdGgoc3RydWN0IGNhY2hlX2RlZiAqY2FjaGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCit7CisJcmV0dXJuIGxzdGF0X2NhY2hlKGNhY2hlLCBuYW1lLCBsZW4sIEZMX1NZTUxJTkt8RkxfRElSLCBVU0VfT05MWV9MU1RBVCkgJiBGTF9TWU1MSU5LOworfQorCisvKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIHBhdGggJ25hbWUnIGhhcyBhIGxlYWRpbmcgc3ltbGluayBjb21wb25lbnQKKyAqLwogaW50IGhhc19zeW1saW5rX2xlYWRpbmdfcGF0aChjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKQogewotCXJldHVybiBsc3RhdF9jYWNoZShuYW1lLCBsZW4sCi0JCQkgICBGTF9TWU1MSU5LfEZMX0RJUiwgVVNFX09OTFlfTFNUQVQpICYKLQkJRkxfU1lNTElOSzsKKwlyZXR1cm4gdGhyZWFkZWRfaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKCZkZWZhdWx0X2NhY2hlLCBuYW1lLCBsZW4pOwogfQogCiAvKgpAQCAtMjI3LDcgKzIwMyw4IEBACiAgKi8KIGludCBoYXNfc3ltbGlua19vcl9ub2VudF9sZWFkaW5nX3BhdGgoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKIHsKLQlyZXR1cm4gbHN0YXRfY2FjaGUobmFtZSwgbGVuLAorCXN0cnVjdCBjYWNoZV9kZWYgKmNhY2hlID0gJmRlZmF1bHRfY2FjaGU7CS8qIEZJWE1FICovCisJcmV0dXJuIGxzdGF0X2NhY2hlKGNhY2hlLCBuYW1lLCBsZW4sCiAJCQkgICBGTF9TWU1MSU5LfEZMX05PRU5UfEZMX0RJUiwgVVNFX09OTFlfTFNUQVQpICYKIAkJKEZMX1NZTUxJTkt8RkxfTk9FTlQpOwogfQpAQCAtMjQxLDcgKzIxOCw4IEBACiAgKi8KIGludCBoYXNfZGlyc19vbmx5X3BhdGgoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwgaW50IHByZWZpeF9sZW4pCiB7Ci0JcmV0dXJuIGxzdGF0X2NhY2hlKG5hbWUsIGxlbiwKKwlzdHJ1Y3QgY2FjaGVfZGVmICpjYWNoZSA9ICZkZWZhdWx0X2NhY2hlOwkvKiBGSVhNRSAqLworCXJldHVybiBsc3RhdF9jYWNoZShjYWNoZSwgbmFtZSwgbGVuLAogCQkJICAgRkxfRElSfEZMX0ZVTExQQVRILCBwcmVmaXhfbGVuKSAmCiAJCUZMX0RJUjsKIH0KQEAgLTI2Myw3ICsyNDEsNiBAQAogCQkJIHJlbW92YWwucGF0aFtyZW1vdmFsLmxlbl0gIT0gJy8nKTsKIAl9CiAJcmVtb3ZhbC5sZW4gPSBuZXdfbGVuOwotCXJldHVybjsKIH0KIAogdm9pZCBzY2hlZHVsZV9kaXJfZm9yX3JlbW92YWwoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKQEAgLTI5NiwxMSArMjczLDkgQEAKIAkJICAgICAgIGxhc3Rfc2xhc2ggLSBtYXRjaF9sZW4pOwogCQlyZW1vdmFsLmxlbiA9IGxhc3Rfc2xhc2g7CiAJfQotCXJldHVybjsKIH0KIAogdm9pZCByZW1vdmVfc2NoZWR1bGVkX2RpcnModm9pZCkKIHsKIAlkb19yZW1vdmVfc2NoZWR1bGVkX2RpcnMoMCk7Ci0JcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvdC9NYWtlZmlsZSBiL3QvTWFrZWZpbGUKaW5kZXggYmY4MTZmYy4uMjVjNTU5YiAxMDA2NDQKLS0tIGEvdC9NYWtlZmlsZQorKysgYi90L01ha2VmaWxlCkBAIC0zLDYgKzMsOCBAQAogIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KICMKIAorLWluY2x1ZGUgLi4vY29uZmlnLm1haworCiAjR0lUX1RFU1RfT1BUUz0tLXZlcmJvc2UgLS1kZWJ1ZwogU0hFTExfUEFUSCA/PSAkKFNIRUxMKQogVEFSID89ICQoVEFSKQpAQCAtMjUsNiArMjcsOCBAQAogCiBjbGVhbjoKIAkkKFJNKSAtciAndHJhc2ggZGlyZWN0b3J5Jy4qIHRlc3QtcmVzdWx0cworCSQoUk0pIHQ/Pz8/L2N2c3Jvb3QvQ1ZTUk9PVC8/KgorCSQoUk0pIC1yIHZhbGdyaW5kL2JpbgogCiBhZ2dyZWdhdGUtcmVzdWx0cy1hbmQtY2xlYW51cDogJChUKQogCSQoTUFLRSkgYWdncmVnYXRlLXJlc3VsdHMKZGlmZiAtLWdpdCBhL3QvUkVBRE1FIGIvdC9SRUFETUUKaW5kZXggZDhmNmM3ZC4uZGNkM2ViYiAxMDA2NDQKLS0tIGEvdC9SRUFETUUKKysrIGIvdC9SRUFETUUKQEAgLTc1LDYgKzc1LDI4IEBACiAJQXMgdGhlIG5hbWVzIGRlcGVuZCBvbiB0aGUgdGVzdHMnIGZpbGUgbmFtZXMsIGl0IGlzIHNhZmUgdG8KIAlydW4gdGhlIHRlc3RzIHdpdGggdGhpcyBvcHRpb24gaW4gcGFyYWxsZWwuCiAKKy0td2l0aC1kYXNoZXM6OgorCUJ5IGRlZmF1bHQgdGVzdHMgYXJlIHJ1biB3aXRob3V0IGRhc2hlZCBmb3JtcyBvZgorCWNvbW1hbmRzIChsaWtlIGdpdC1jb21taXQpIGluIHRoZSBQQVRIIChpdCBvbmx5IHVzZXMKKwl3cmFwcGVycyBmcm9tIC4uL2Jpbi13cmFwcGVycykuICBVc2UgdGhpcyBvcHRpb24gdG8gaW5jbHVkZQorCXRoZSBidWlsZCBkaXJlY3RvcnkgKC4uKSBpbiB0aGUgUEFUSCwgd2hpY2ggY29udGFpbnMgYWxsCisJdGhlIGRhc2hlZCBmb3JtcyBvZiBjb21tYW5kcy4gIFRoaXMgb3B0aW9uIGlzIGN1cnJlbnRseQorCWltcGxpZWQgYnkgb3RoZXIgb3B0aW9ucyBsaWtlIC0tdmFsZ3JpbmQgYW5kCisJR0lUX1RFU1RfSU5TVEFMTEVELgorCitZb3UgY2FuIGFsc28gc2V0IHRoZSBHSVRfVEVTVF9JTlNUQUxMRUQgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8KK3RoZSBiaW5kaXIgb2YgYW4gZXhpc3RpbmcgZ2l0IGluc3RhbGxhdGlvbiB0byB0ZXN0IHRoYXQgaW5zdGFsbGF0aW9uLgorWW91IHN0aWxsIG5lZWQgdG8gaGF2ZSBidWlsdCB0aGlzIGdpdCBzYW5kYm94LCBmcm9tIHdoaWNoIHZhcmlvdXMKK3Rlc3QtKiBzdXBwb3J0IHByb2dyYW1zLCB0ZW1wbGF0ZXMsIGFuZCBwZXJsIGxpYnJhcmllcyBhcmUgdXNlZC4KK0lmIHlvdXIgaW5zdGFsbGVkIGdpdCBpcyBpbmNvbXBsZXRlLCBpdCB3aWxsIHNpbGVudGx5IHRlc3QgcGFydHMgb2YKK3lvdXIgYnVpbHQgdmVyc2lvbiBpbnN0ZWFkLgorCitXaGVuIHVzaW5nIEdJVF9URVNUX0lOU1RBTExFRCwgeW91IGNhbiBhbHNvIHNldCBHSVRfVEVTVF9FWEVDX1BBVEggdG8KK292ZXJyaWRlIHRoZSBsb2NhdGlvbiBvZiB0aGUgZGFzaGVkLWZvcm0gc3ViY29tbWFuZHMgKHdoYXQKK0dJVF9FWEVDX1BBVEggd291bGQgYmUgdXNlZCBmb3IgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24pLgorR0lUX1RFU1RfRVhFQ19QQVRIIGRlZmF1bHRzIHRvIGAkR0lUX1RFU1RfSU5TVEFMTEVEL2dpdCAtLWV4ZWMtcGF0aGAuCisKKwogU2tpcHBpbmcgVGVzdHMKIC0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL3QvZGlmZi1saWIuc2ggYi90L2RpZmYtbGliLnNoCmluZGV4IDRiZGRlYjUuLjc1YTM1ZmMgMTAwNjQ0Ci0tLSBhL3QvZGlmZi1saWIuc2gKKysrIGIvdC9kaWZmLWxpYi5zaApAQCAtMSw3ICsxLDUgQEAKIDoKIAotX3g0MD0nWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXScKLV94NDA9IiRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAiCiBzYW5pdGl6ZV9kaWZmX3Jhdz0nL146L3MvICciJF94NDAiJyAnIiRfeDQwIicgXChbQS1aXVwpWzAtOV0qCS8gWCBYIFwxIwkvJwogY29tcGFyZV9kaWZmX3JhdyAoKSB7CiAgICAgIyBXaGVuIGhldXJpc3RpY3MgYXJlIGltcHJvdmVkLCB0aGUgc2NvcmUgbnVtYmVycyB3b3VsZCBjaGFuZ2UuCmRpZmYgLS1naXQgYS90L2dpdHdlYi1saWIuc2ggYi90L2dpdHdlYi1saWIuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE3MzRiMQotLS0gL2Rldi9udWxsCisrKyBiL3QvZ2l0d2ViLWxpYi5zaApAQCAtMCwwICsxLDg4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEpha3ViIE5hcmVic2tpCisjCisKK2dpdHdlYl9pbml0ICgpIHsKKwlzYWZlX3B3ZD0iJChwZXJsIC1NUE9TSVg9Z2V0Y3dkIC1lICdwcmludCBxdW90ZW1ldGEoZ2V0Y3dkKScpIgorCWNhdCA+Z2l0d2ViX2NvbmZpZy5wZXJsIDw8RU9GCisjIS91c3IvYmluL3BlcmwKKworIyBnaXR3ZWIgY29uZmlndXJhdGlvbiBmb3IgdGVzdHMKKworb3VyIFwkdmVyc2lvbiA9ICdjdXJyZW50JzsKK291ciBcJEdJVCA9ICdnaXQnOworb3VyIFwkcHJvamVjdHJvb3QgPSAiJHNhZmVfcHdkIjsKK291ciBcJHByb2plY3RfbWF4ZGVwdGggPSA4Oworb3VyIFwkaG9tZV9saW5rX3N0ciA9ICdwcm9qZWN0cyc7CitvdXIgXCRzaXRlX25hbWUgPSAnW2xvY2FsaG9zdF0nOworb3VyIFwkc2l0ZV9oZWFkZXIgPSAnJzsKK291ciBcJHNpdGVfZm9vdGVyID0gJyc7CitvdXIgXCRob21lX3RleHQgPSAnaW5kZXh0ZXh0Lmh0bWwnOworb3VyIEBzdHlsZXNoZWV0cyA9ICgnZmlsZTovLy8kVEVTVF9ESVJFQ1RPUlkvLi4vZ2l0d2ViL2dpdHdlYi5jc3MnKTsKK291ciBcJGxvZ28gPSAnZmlsZTovLy8kVEVTVF9ESVJFQ1RPUlkvLi4vZ2l0d2ViL2dpdC1sb2dvLnBuZyc7CitvdXIgXCRmYXZpY29uID0gJ2ZpbGU6Ly8vJFRFU1RfRElSRUNUT1JZLy4uL2dpdHdlYi9naXQtZmF2aWNvbi5wbmcnOworb3VyIFwkcHJvamVjdHNfbGlzdCA9ICcnOworb3VyIFwkZXhwb3J0X29rID0gJyc7CitvdXIgXCRzdHJpY3RfZXhwb3J0ID0gJyc7CitvdXIgXCRtYXhsb2FkID0gdW5kZWY7CisKK0VPRgorCisJY2F0ID4uZ2l0L2Rlc2NyaXB0aW9uIDw8RU9GCiskMCB0ZXN0IHJlcG9zaXRvcnkKK0VPRgorfQorCitnaXR3ZWJfcnVuICgpIHsKKwlHQVRFV0FZX0lOVEVSRkFDRT0nQ0dJLzEuMScKKwlIVFRQX0FDQ0VQVD0nKi8qJworCVJFUVVFU1RfTUVUSE9EPSdHRVQnCisJU0NSSVBUX05BTUU9IiRURVNUX0RJUkVDVE9SWS8uLi9naXR3ZWIvZ2l0d2ViLnBlcmwiCisJUVVFUllfU1RSSU5HPSIiJDEiIgorCVBBVEhfSU5GTz0iIiQyIiIKKwlleHBvcnQgR0FURVdBWV9JTlRFUkZBQ0UgSFRUUF9BQ0NFUFQgUkVRVUVTVF9NRVRIT0QgXAorCQlTQ1JJUFRfTkFNRSBRVUVSWV9TVFJJTkcgUEFUSF9JTkZPCisKKwlHSVRXRUJfQ09ORklHPSQocHdkKS9naXR3ZWJfY29uZmlnLnBlcmwKKwlleHBvcnQgR0lUV0VCX0NPTkZJRworCisJIyBzb21lIG9mIGdpdCBjb21tYW5kcyB3cml0ZSB0byBTVERFUlIgb24gZXJyb3IsIGJ1dCB0aGlzIGlzIG5vdAorCSMgd3JpdHRlbiB0byB3ZWIgc2VydmVyIGxvZ3MsIHNvIHdlIGFyZSBub3QgaW50ZXJlc3RlZCBpbiB0aGF0OgorCSMgd2UgYXJlIGludGVyZXN0ZWQgb25seSBpbiBwcm9wZXJseSBmb3JtYXR0ZWQgZXJyb3JzL3dhcm5pbmdzCisJcm0gLWYgZ2l0d2ViLmxvZyAmJgorCXBlcmwgLS0gIiRTQ1JJUFRfTkFNRSIgXAorCQk+Z2l0d2ViLm91dHB1dCAyPmdpdHdlYi5sb2cgJiYKKwlwZXJsIC13IC1lICcKKwkJb3BlbiBPLCAiPmdpdHdlYi5oZWFkZXJzIjsKKwkJd2hpbGUgKDw+KSB7CisJCQlwcmludCBPOworCQkJbGFzdCBpZiAoL15cciQvIHx8IC9eJC8pOworCQl9CisJCW9wZW4gTywgIj5naXR3ZWIuYm9keSI7CisJCXdoaWxlICg8PikgeworCQkJcHJpbnQgTzsKKwkJfQorCQljbG9zZSBPOworCScgZ2l0d2ViLm91dHB1dCAmJgorCWlmIGdyZXAgJ15bW10nIGdpdHdlYi5sb2cgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIGZhbHNlOyBlbHNlIHRydWU7IGZpCisKKwkjIGdpdHdlYi5sb2cgaXMgbGVmdCBmb3IgZGVidWdnaW5nCisJIyBnaXR3ZWIub3V0cHV0IGlzIHVzZWQgdG8gcGFyc2UgSFRUUCBvdXRwdXQKKwkjIGdpdHdlYi5oZWFkZXJzIGNvbnRhaW5zIG9ubHkgSFRUUCBoZWFkZXJzCisJIyBnaXR3ZWIuYm9keSBjb250YWlucyBib2R5IG9mIG1lc3NhZ2UsIHdpdGhvdXQgaGVhZGVycworfQorCisuIC4vdGVzdC1saWIuc2gKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIFBFUkw7IHRoZW4KKwlzYXkgJ3NraXBwaW5nIGdpdHdlYiB0ZXN0cywgcGVybCBub3QgYXZhaWxhYmxlJworCXRlc3RfZG9uZQorZmkKKworcGVybCAtTUVuY29kZSAtZSAnZGVjb2RlX3V0ZjgoIiIsIEVuY29kZTo6RkJfQ1JPQUspJyA+L2Rldi9udWxsIDI+JjEgfHwgeworICAgIHNheSAnc2tpcHBpbmcgZ2l0d2ViIHRlc3RzLCBwZXJsIHZlcnNpb24gaXMgdG9vIG9sZCcKKyAgICB0ZXN0X2RvbmUKK30KKworZ2l0d2ViX2luaXQKZGlmZiAtLWdpdCBhL3QvbGliLWN2cy5zaCBiL3QvbGliLWN2cy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjNiNzkzCi0tLSAvZGV2L251bGwKKysrIGIvdC9saWItY3ZzLnNoCkBAIC0wLDAgKzEsNzUgQEAKKyMhL2Jpbi9zaAorCisuIC4vdGVzdC1saWIuc2gKKwordW5zZXQgQ1ZTX1NFUlZFUgorIyBmb3IgY2xlYW4gY3ZzcHMgY2FjaGUKK0hPTUU9JChwd2QpCitleHBvcnQgSE9NRQorCitpZiAhIHR5cGUgY3ZzID4vZGV2L251bGwgMj4mMQordGhlbgorCXNheSAnc2tpcHBpbmcgY3ZzaW1wb3J0IHRlc3RzLCBjdnMgbm90IGZvdW5kJworCXRlc3RfZG9uZQorZmkKKworQ1ZTPSJjdnMgLWYiCitleHBvcnQgQ1ZTCisKK2N2c3BzX3ZlcnNpb249YGN2c3BzIC1oIDI+JjEgfCBzZWQgLW5lICdzL2N2c3BzIHZlcnNpb24gLy9wJ2AKK2Nhc2UgIiRjdnNwc192ZXJzaW9uIiBpbgorMi4xIHwgMi4yKikKKwk7OworJycpCisJc2F5ICdza2lwcGluZyBjdnNpbXBvcnQgdGVzdHMsIGN2c3BzIG5vdCBmb3VuZCcKKwl0ZXN0X2RvbmUKKwk7OworKikKKwlzYXkgJ3NraXBwaW5nIGN2c2ltcG9ydCB0ZXN0cywgdW5zdXBwb3J0ZWQgY3ZzcHMgdmVyc2lvbicKKwl0ZXN0X2RvbmUKKwk7OworZXNhYworCit0ZXN0X2N2c19jbyAoKSB7CisJIyBVc2FnZTogdGVzdF9jdnNfY28gQlJBTkNIX05BTUUKKwlybSAtcmYgbW9kdWxlLWN2cy0iJDEiCisJaWYgWyAiJDEiID0gIm1hc3RlciIgXQorCXRoZW4KKwkJJENWUyBjbyAtUCAtZCBtb2R1bGUtY3ZzLSIkMSIgLUEgbW9kdWxlCisJZWxzZQorCQkkQ1ZTIGNvIC1QIC1kIG1vZHVsZS1jdnMtIiQxIiAtciAiJDEiIG1vZHVsZQorCWZpCit9CisKK3Rlc3RfZ2l0X2NvICgpIHsKKwkjIFVzYWdlOiB0ZXN0X2dpdF9jbyBCUkFOQ0hfTkFNRQorCShjZCBtb2R1bGUtZ2l0ICYmIGdpdCBjaGVja291dCAiJDEiKQorfQorCit0ZXN0X2NtcF9icmFuY2hfZmlsZSAoKSB7CisJIyBVc2FnZTogdGVzdF9jbXBfYnJhbmNoX2ZpbGUgQlJBTkNIX05BTUUgUEFUSAorCSMgVGhlIGJyYW5jaCBtdXN0IGFscmVhZHkgYmUgY2hlY2tlZCBvdXQgb2YgQ1ZTIGFuZCBnaXQuCisJdGVzdF9jbXAgbW9kdWxlLWN2cy0iJDEiLyIkMiIgbW9kdWxlLWdpdC8iJDIiCit9CisKK3Rlc3RfY21wX2JyYW5jaF90cmVlICgpIHsKKwkjIFVzYWdlOiB0ZXN0X2NtcF9icmFuY2hfdHJlZSBCUkFOQ0hfTkFNRQorCSMgQ2hlY2sgQlJBTkNIX05BTUUgb3V0IG9mIENWUyBhbmQgZ2l0IGFuZCBtYWtlIHN1cmUgdGhhdCBhbGwKKwkjIG9mIHRoZSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgYXJlIGlkZW50aWNhbC4KKworCXRlc3RfY3ZzX2NvICIkMSIgJiYKKwl0ZXN0X2dpdF9jbyAiJDEiICYmCisJKAorCQljZCBtb2R1bGUtY3ZzLSIkMSIKKwkJZmluZCAuIC10eXBlIGQgLW5hbWUgQ1ZTIC1wcnVuZSAtbyAtdHlwZSBmIC1wcmludAorCSkgfCBzb3J0ID5tb2R1bGUtY3ZzLSIkMSIubGlzdCAmJgorCSgKKwkJY2QgbW9kdWxlLWdpdAorCQlmaW5kIC4gLXR5cGUgZCAtbmFtZSAuZ2l0IC1wcnVuZSAtbyAtdHlwZSBmIC1wcmludAorCSkgfCBzb3J0ID5tb2R1bGUtZ2l0LSIkMSIubGlzdCAmJgorCXRlc3RfY21wIG1vZHVsZS1jdnMtIiQxIi5saXN0IG1vZHVsZS1naXQtIiQxIi5saXN0ICYmCisJY2F0IG1vZHVsZS1jdnMtIiQxIi5saXN0IHwgd2hpbGUgcmVhZCBmCisJZG8KKwkJdGVzdF9jbXBfYnJhbmNoX2ZpbGUgIiQxIiAiJGYiIHx8IHJldHVybiAxCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEvdC9saWItZ2l0LXN2bi5zaCBiL3QvbGliLWdpdC1zdm4uc2gKaW5kZXggNzczZDQ3Yy4uMGY3ZjM1YyAxMDA2NDQKLS0tIGEvdC9saWItZ2l0LXN2bi5zaAorKysgYi90L2xpYi1naXQtc3ZuLnNoCkBAIC0xNCw4ICsxNCw5IEBACiBmaQogCiBHSVRfRElSPSRQV0QvLmdpdAotR0lUX1NWTl9ESVI9JEdJVF9ESVIvc3ZuL2dpdC1zdm4KK0dJVF9TVk5fRElSPSRHSVRfRElSL3N2bi9yZWZzL3JlbW90ZXMvZ2l0LXN2bgogU1ZOX1RSRUU9JEdJVF9TVk5fRElSL3N2bi10cmVlCitQRVJMPSR7UEVSTDotcGVybH0KIAogc3ZuID4vZGV2L251bGwgMj4mMQogaWYgdGVzdCAkPyAtbmUgMQpAQCAtMjYsOCArMjcsMTAgQEAKIAogc3ZucmVwbz0kUFdEL3N2bnJlcG8KIGV4cG9ydCBzdm5yZXBvCitzdm5jb25mPSRQV0Qvc3ZuY29uZgorZXhwb3J0IHN2bmNvbmYKIAotcGVybCAtdyAtZSAiCiskUEVSTCAtdyAtZSAiCiB1c2UgU1ZOOjpDb3JlOwogdXNlIFNWTjo6UmVwb3M7CiBcJFNWTjo6Q29yZTo6VkVSU0lPTiBndCAnMS4xLjAnIG9yIGV4aXQoNDIpOwpAQCAtNTQsNiArNTcsMTkgQEAKIAl0ZXN0LWNobXRpbWUgKzEgIiQxIgogfQogCisjIFdlIG5lZWQgdGhpcywgYmVjYXVzZSB3ZSBzaG91bGQgcGFzcyBlbXB0eSBjb25maWd1cmF0aW9uIGRpcmVjdG9yeSB0bworIyB0aGUgJ3N2biBjb21taXQnIHRvIGF2b2lkIGF1dG9tYXRlZCBwcm9wZXJ0eSBjaGFuZ2VzIGFuZCBvdGhlciBzdHVmZgorIyB0aGF0IGNvdWxkIGJlIHNldCBmcm9tIHVzZXIncyBjb25maWd1cmF0aW9uIGZpbGVzIGluIH4vLnN1YnZlcnNpb24uCitzdm5fY21kICgpIHsKKwlbIC1kICIkc3ZuY29uZiIgXSB8fCBta2RpciAiJHN2bmNvbmYiCisJb3JpZ19zdm5jbWQ9IiQxIjsgc2hpZnQKKwlpZiBbIC16ICIkb3JpZ19zdm5jbWQiIF07IHRoZW4KKwkJc3ZuCisJCXJldHVybgorCWZpCisJc3ZuICIkb3JpZ19zdm5jbWQiIC0tY29uZmlnLWRpciAiJHN2bmNvbmYiICIkQCIKK30KKwogZm9yIGQgaW4gXAogCSIkU1ZOX0hUVFBEX1BBVEgiIFwKIAkvdXNyL3NiaW4vYXBhY2hlMiBcCkBAIC0xMTUsNyArMTMxLDcgQEAKIH0KIAogY29udmVydF90b19yZXZfZGIgKCkgewotCXBlcmwgLXcgLS0gLSAiJEAiIDw8XEVPRgorCSRQRVJMIC13IC0tIC0gIiRAIiA8PFxFT0YKIHVzZSBzdHJpY3Q7CiBAQVJHViA9PSAyIG9yIGRpZSAiVXNhZ2U6IGNvbnZlcnRfdG9fcmV2X2RiIDxpbnB1dD4gPG91dHB1dD4iOwogb3BlbiBteSAkd3IsICcrPicsICRBUkdWWzFdIG9yIGRpZSAiJCE6IGNvdWxkbid0IG9wZW46ICRBUkdWWzFdIjsKZGlmZiAtLWdpdCBhL3QvbGliLWh0dHBkLnNoIGIvdC9saWItaHR0cGQuc2gKaW5kZXggY2RlNjU5ZC4uMjhhZmY4OCAxMDA2NDQKLS0tIGEvdC9saWItaHR0cGQuc2gKKysrIGIvdC9saWItaHR0cGQuc2gKQEAgLTEyLDE2ICsxMiwyOSBAQAogCiBIVFRQRF9QQVJBPSIiCiAKK2ZvciBERUZBVUxUX0hUVFBEX1BBVEggaW4gJy91c3Ivc2Jpbi9odHRwZCcgJy91c3Ivc2Jpbi9hcGFjaGUyJworZG8KKwlpZiB0ZXN0IC14ICIkREVGQVVMVF9IVFRQRF9QQVRIIgorCXRoZW4KKwkJYnJlYWsKKwlmaQorZG9uZQorCitmb3IgREVGQVVMVF9IVFRQRF9NT0RVTEVfUEFUSCBpbiAnL3Vzci9saWJleGVjL2FwYWNoZTInIFwKKwkJCQkgJy91c3IvbGliL2FwYWNoZTIvbW9kdWxlcycgXAorCQkJCSAnL3Vzci9saWI2NC9odHRwZC9tb2R1bGVzJyBcCisJCQkJICcvdXNyL2xpYi9odHRwZC9tb2R1bGVzJworZG8KKwlpZiB0ZXN0IC1kICIkREVGQVVMVF9IVFRQRF9NT0RVTEVfUEFUSCIKKwl0aGVuCisJCWJyZWFrCisJZmkKK2RvbmUKKwogY2FzZSAkKHVuYW1lKSBpbgogCURhcndpbikKLQkJREVGQVVMVF9IVFRQRF9QQVRIPScvdXNyL3NiaW4vaHR0cGQnCi0JCURFRkFVTFRfSFRUUERfTU9EVUxFX1BBVEg9Jy91c3IvbGliZXhlYy9hcGFjaGUyJwogCQlIVFRQRF9QQVJBPSIkSFRUUERfUEFSQSAtRERhcndpbiIKIAk7OwotCSopCi0JCURFRkFVTFRfSFRUUERfUEFUSD0nL3Vzci9zYmluL2FwYWNoZTInCi0JCURFRkFVTFRfSFRUUERfTU9EVUxFX1BBVEg9Jy91c3IvbGliL2FwYWNoZTIvbW9kdWxlcycKLQk7OwogZXNhYwogCiBMSUJfSFRUUERfUEFUSD0ke0xJQl9IVFRQRF9QQVRILSIkREVGQVVMVF9IVFRQRF9QQVRIIn0KQEAgLTQ5LDYgKzYyLDExIEBACiAJCQlzYXkgInNraXBwaW5nIHRlc3QsIGF0IGxlYXN0IEFwYWNoZSB2ZXJzaW9uIDIgaXMgcmVxdWlyZWQiCiAJCQl0ZXN0X2RvbmUKIAkJZmkKKwkJaWYgISB0ZXN0IC1kICIkREVGQVVMVF9IVFRQRF9NT0RVTEVfUEFUSCIKKwkJdGhlbgorCQkJc2F5ICJBcGFjaGUgbW9kdWxlIGRpcmVjdG9yeSBub3QgZm91bmQuICBTa2lwcGluZyB0ZXN0cy4iCisJCQl0ZXN0X2RvbmUKKwkJZmkKIAogCQlMSUJfSFRUUERfTU9EVUxFX1BBVEg9IiRERUZBVUxUX0hUVFBEX01PRFVMRV9QQVRIIgogCWZpCkBAIC05MywxNCArMTExLDE2IEBACiBzdGFydF9odHRwZCgpIHsKIAlwcmVwYXJlX2h0dHBkID4mMyAyPiY0CiAKLQl0cmFwICdzdG9wX2h0dHBkOyBkaWUnIEVYSVQKKwl0cmFwICdjb2RlPSQ/OyBzdG9wX2h0dHBkOyAoZXhpdCAkY29kZSk7IGRpZScgRVhJVAogCiAJIiRMSUJfSFRUUERfUEFUSCIgLWQgIiRIVFRQRF9ST09UX1BBVEgiIFwKIAkJLWYgIiRURVNUX1BBVEgvYXBhY2hlLmNvbmYiICRIVFRQRF9QQVJBIFwKIAkJLWMgIkxpc3RlbiAxMjcuMC4wLjE6JExJQl9IVFRQRF9QT1JUIiAtayBzdGFydCBcCiAJCT4mMyAyPiY0Ci0JaWYgISB0ZXN0ICQ/ID0gMDsgdGhlbgorCWlmIHRlc3QgJD8gLW5lIDAKKwl0aGVuCiAJCXNheSAic2tpcHBpbmcgdGVzdCwgd2ViIHNlcnZlciBzZXR1cCBmYWlsZWQiCisJCXRyYXAgJ2RpZScgRVhJVAogCQl0ZXN0X2RvbmUKIAlmaQogfQpkaWZmIC0tZ2l0IGEvdC9saWItaHR0cGQvYXBhY2hlLmNvbmYgYi90L2xpYi1odHRwZC9hcGFjaGUuY29uZgppbmRleCAyMWFhNDJmLi40OTYxNTA1IDEwMDY0NAotLS0gYS90L2xpYi1odHRwZC9hcGFjaGUuY29uZgorKysgYi90L2xpYi1odHRwZC9hcGFjaGUuY29uZgpAQCAtOCw2ICs4LDMzIEBACiA8SWZNb2R1bGUgIW1vZF9sb2dfY29uZmlnLmM+CiAJTG9hZE1vZHVsZSBsb2dfY29uZmlnX21vZHVsZSBtb2R1bGVzL21vZF9sb2dfY29uZmlnLnNvCiA8L0lmTW9kdWxlPgorPElmTW9kdWxlICFtb2RfYWxpYXMuYz4KKwlMb2FkTW9kdWxlIGFsaWFzX21vZHVsZSBtb2R1bGVzL21vZF9hbGlhcy5zbworPC9JZk1vZHVsZT4KKzxJZk1vZHVsZSAhbW9kX2NnaS5jPgorCUxvYWRNb2R1bGUgY2dpX21vZHVsZSBtb2R1bGVzL21vZF9jZ2kuc28KKzwvSWZNb2R1bGU+Cis8SWZNb2R1bGUgIW1vZF9lbnYuYz4KKwlMb2FkTW9kdWxlIGVudl9tb2R1bGUgbW9kdWxlcy9tb2RfZW52LnNvCis8L0lmTW9kdWxlPgorCitBbGlhcyAvZHVtYi8gd3d3LworCis8TG9jYXRpb24gL3NtYXJ0Lz4KKwlTZXRFbnYgR0lUX0VYRUNfUEFUSCAke0dJVF9FWEVDX1BBVEh9CisJU2V0RW52IEdJVF9IVFRQX0VYUE9SVF9BTEwKKzwvTG9jYXRpb24+Cis8TG9jYXRpb24gL3NtYXJ0X25vZXhwb3J0Lz4KKwlTZXRFbnYgR0lUX0VYRUNfUEFUSCAke0dJVF9FWEVDX1BBVEh9Cis8L0xvY2F0aW9uPgorU2NyaXB0QWxpYXMgL3NtYXJ0LyAke0dJVF9FWEVDX1BBVEh9L2dpdC1odHRwLWJhY2tlbmQvCitTY3JpcHRBbGlhcyAvc21hcnRfbm9leHBvcnQvICR7R0lUX0VYRUNfUEFUSH0vZ2l0LWh0dHAtYmFja2VuZC8KKzxEaXJlY3RvcnkgJHtHSVRfRVhFQ19QQVRIfT4KKwlPcHRpb25zIE5vbmUKKzwvRGlyZWN0b3J5PgorPEZpbGVzICR7R0lUX0VYRUNfUEFUSH0vZ2l0LWh0dHAtYmFja2VuZD4KKwlPcHRpb25zIEV4ZWNDR0kKKzwvRmlsZXM+CiAKIDxJZkRlZmluZSBTU0w+CiBMb2FkTW9kdWxlIHNzbF9tb2R1bGUgbW9kdWxlcy9tb2Rfc3NsLnNvCkBAIC0yNiw3ICs1Myw3IEBACiAJTG9hZE1vZHVsZSBkYXZfZnNfbW9kdWxlIG1vZHVsZXMvbW9kX2Rhdl9mcy5zbwogCiAJREFWTG9ja0RCIERBVkxvY2sKLQk8TG9jYXRpb24gLz4KKwk8TG9jYXRpb24gL2R1bWIvPgogCQlEYXYgb24KIAk8L0xvY2F0aW9uPgogPC9JZkRlZmluZT4KZGlmZiAtLWdpdCBhL3QvbGliLXBhdGNoLW1vZGUuc2ggYi90L2xpYi1wYXRjaC1tb2RlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMzZmMzQKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1wYXRjaC1tb2RlLnNoCkBAIC0wLDAgKzEsNDMgQEAKKzogaW5jbHVkZWQgZnJvbSB0MjAxNiBhbmQgb3RoZXJzCisKKy4gLi90ZXN0LWxpYi5zaAorCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUEVSTDsgdGhlbgorCXNheSAnc2tpcHBpbmcgLS1wYXRjaCB0ZXN0cywgcGVybCBub3QgYXZhaWxhYmxlJworCXRlc3RfZG9uZQorZmkKKworc2V0X3N0YXRlICgpIHsKKwllY2hvICIkMyIgPiAiJDEiICYmCisJZ2l0IGFkZCAiJDEiICYmCisJZWNobyAiJDIiID4gIiQxIgorfQorCitzYXZlX3N0YXRlICgpIHsKKwlub3NsYXNoPSIkKGVjaG8gIiQxIiB8IHRyIC8gXykiICYmCisJY2F0ICIkMSIgPiBfd29ya3RyZWVfIiRub3NsYXNoIiAmJgorCWdpdCBzaG93IDoiJDEiID4gX2luZGV4XyIkbm9zbGFzaCIKK30KKworc2V0X2FuZF9zYXZlX3N0YXRlICgpIHsKKwlzZXRfc3RhdGUgIiRAIiAmJgorCXNhdmVfc3RhdGUgIiQxIgorfQorCit2ZXJpZnlfc3RhdGUgKCkgeworCXRlc3QgIiQoY2F0ICIkMSIpIiA9ICIkMiIgJiYKKwl0ZXN0ICIkKGdpdCBzaG93IDoiJDEiKSIgPSAiJDMiCit9CisKK3ZlcmlmeV9zYXZlZF9zdGF0ZSAoKSB7CisJbm9zbGFzaD0iJChlY2hvICIkMSIgfCB0ciAvIF8pIiAmJgorCXZlcmlmeV9zdGF0ZSAiJDEiICIkKGNhdCBfd29ya3RyZWVfIiRub3NsYXNoIikiICIkKGNhdCBfaW5kZXhfIiRub3NsYXNoIikiCit9CisKK3NhdmVfaGVhZCAoKSB7CisJZ2l0IHJldi1wYXJzZSBIRUFEID4gX2hlYWQKK30KKwordmVyaWZ5X3NhdmVkX2hlYWQgKCkgeworCXRlc3QgIiQoY2F0IF9oZWFkKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIgorfQpkaWZmIC0tZ2l0IGEvdC9saWItcmViYXNlLnNoIGIvdC9saWItcmViYXNlLnNoCmluZGV4IDI2MGEyMzEuLjZhZWZlMjcgMTAwNjQ0Ci0tLSBhL3QvbGliLXJlYmFzZS5zaAorKysgYi90L2xpYi1yZWJhc2Uuc2gKQEAgLTIsMjEgKzIsMzMgQEAKIAogIyBBZnRlciBzZXR0aW5nIHRoZSBmYWtlIGVkaXRvciB3aXRoIHRoaXMgZnVuY3Rpb24sIHlvdSBjYW4KICMKLSMgLSBvdmVycmlkZSB0aGUgY29tbWl0IG1lc3NhZ2Ugd2l0aCAkRkFLRV9DT01NSVRfTUVTU0FHRSwKKyMgLSBvdmVycmlkZSB0aGUgY29tbWl0IG1lc3NhZ2Ugd2l0aCAkRkFLRV9DT01NSVRfTUVTU0FHRQogIyAtIGFtZW5kIHRoZSBjb21taXQgbWVzc2FnZSB3aXRoICRGQUtFX0NPTU1JVF9BTUVORAogIyAtIGNoZWNrIHRoYXQgbm9uLWNvbW1pdCBtZXNzYWdlcyBoYXZlIGEgY2VydGFpbiBsaW5lIGNvdW50IHdpdGggJEVYUEVDVF9DT1VOVAotIyAtIHJld3JpdGUgYSByZWJhc2UgLWkgc2NyaXB0IHdpdGggJEZBS0VfTElORVMgaW4gdGhlIGZvcm0KKyMgLSBjaGVjayB0aGUgY29tbWl0IGNvdW50IGluIHRoZSBjb21taXQgbWVzc2FnZSBoZWFkZXIgd2l0aCAkRVhQRUNUX0hFQURFUl9DT1VOVAorIyAtIHJld3JpdGUgYSByZWJhc2UgLWkgc2NyaXB0IGFzIGRpcmVjdGVkIGJ5ICRGQUtFX0xJTkVTLgorIyAgICRGQUtFX0xJTkVTIGNvbnNpc3RzIG9mIGEgc2VxdWVuY2Ugb2Ygd29yZHMgc2VwYXJhdGVkIGJ5IHNwYWNlcy4KKyMgICBUaGUgZm9sbG93aW5nIHdvcmQgY29tYmluYXRpb25zIGFyZSBwb3NzaWJsZToKICMKLSMJIls8bGluZW5vMT5dIFs8bGluZW5vMj5dLi4uIgorIyAgICI8bGluZW5vPiIgLS0gYWRkIGEgInBpY2siIGxpbmUgd2l0aCB0aGUgU0hBMSB0YWtlbiBmcm9tIHRoZQorIyAgICAgICBzcGVjaWZpZWQgbGluZS4KICMKLSMgICBJZiBhIGxpbmUgbnVtYmVyIGlzIHByZWZpeGVkIHdpdGggInNxdWFzaCIgb3IgImVkaXQiLCB0aGUgcmVzcGVjdGl2ZSBsaW5lJ3MKLSMgICBjb21tYW5kIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgc3BlY2lmaWVkIG9uZS4KKyMgICAiPGNtZD4gPGxpbmVubz4iIC0tIGFkZCBhIGxpbmUgd2l0aCB0aGUgc3BlY2lmaWVkIGNvbW1hbmQKKyMgICAgICAgKCJzcXVhc2giLCAiZml4dXAiLCAiZWRpdCIsIG9yICJyZXdvcmQiKSBhbmQgdGhlIFNIQTEgdGFrZW4KKyMgICAgICAgZnJvbSB0aGUgc3BlY2lmaWVkIGxpbmUuCisjCisjICAgIiMiIC0tIEFkZCBhIGNvbW1lbnQgbGluZS4KKyMKKyMgICAiPiIgLS0gQWRkIGEgYmxhbmsgbGluZS4KIAogc2V0X2Zha2VfZWRpdG9yICgpIHsKIAllY2hvICIjISRTSEVMTF9QQVRIIiA+ZmFrZS1lZGl0b3Iuc2gKIAljYXQgPj4gZmFrZS1lZGl0b3Iuc2ggPDxcRU9GCiBjYXNlICIkMSIgaW4KICovQ09NTUlUX0VESVRNU0cpCisJdGVzdCAteiAiJEVYUEVDVF9IRUFERVJfQ09VTlQiIHx8CisJCXRlc3QgIiRFWFBFQ1RfSEVBREVSX0NPVU5UIiA9ICIkKHNlZCAtbiAnMXMvXiMgVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIFwoLipcKSBjb21taXRzXC4vXDEvcCcgPCAiJDEiKSIgfHwKKwkJZXhpdAogCXRlc3QgLXogIiRGQUtFX0NPTU1JVF9NRVNTQUdFIiB8fCBlY2hvICIkRkFLRV9DT01NSVRfTUVTU0FHRSIgPiAiJDEiCiAJdGVzdCAteiAiJEZBS0VfQ09NTUlUX0FNRU5EIiB8fCBlY2hvICIkRkFLRV9DT01NSVRfQU1FTkQiID4+ICIkMSIKIAlleGl0CkBAIC0yOCwxOSArNDAsMjQgQEAKIHRlc3QgLXogIiRGQUtFX0xJTkVTIiAmJiBleGl0CiBncmVwIC12ICdeIycgPCAiJDEiID4gIiQxIi50bXAKIHJtIC1mICIkMSIKK2VjaG8gJ3JlYmFzZSAtaSBzY3JpcHQgYmVmb3JlIGVkaXRpbmc6JwogY2F0ICIkMSIudG1wCiBhY3Rpb249cGljawogZm9yIGxpbmUgaW4gJEZBS0VfTElORVM7IGRvCiAJY2FzZSAkbGluZSBpbgotCXNxdWFzaHxlZGl0KQorCXNxdWFzaHxmaXh1cHxlZGl0fHJld29yZCkKIAkJYWN0aW9uPSIkbGluZSI7OworCSIjIikKKwkJZWNobyAnIyBjb21tZW50JyA+PiAiJDEiOzsKKwkiPiIpCisJCWVjaG8gPj4gIiQxIjs7CiAJKikKLQkJZWNobyBzZWQgLW4gIiR7bGluZX1zL15waWNrLyRhY3Rpb24vcCIKLQkJc2VkIC1uICIke2xpbmV9cCIgPCAiJDEiLnRtcAogCQlzZWQgLW4gIiR7bGluZX1zL15waWNrLyRhY3Rpb24vcCIgPCAiJDEiLnRtcCA+PiAiJDEiCiAJCWFjdGlvbj1waWNrOzsKIAllc2FjCiBkb25lCitlY2hvICdyZWJhc2UgLWkgc2NyaXB0IGFmdGVyIGVkaXRpbmc6JworY2F0ICIkMSIKIEVPRgogCiAJdGVzdF9zZXRfZWRpdG9yICIkKHB3ZCkvZmFrZS1lZGl0b3Iuc2giCmRpZmYgLS1naXQgYS90L3QwMDAxLWluaXQuc2ggYi90L3QwMDAxLWluaXQuc2gKaW5kZXggZTNkODQ2NC4uNTM4NjUwNCAxMDA3NTUKLS0tIGEvdC90MDAwMS1pbml0LnNoCisrKyBiL3QvdDAwMDEtaW5pdC5zaApAQCAtMjA4LDQgKzIwOCw4NyBAQAogCSkKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBjcmVhdGVzIGEgbmV3IGRpcmVjdG9yeScgJworCXJtIC1mciBuZXdkaXIgJiYKKwkoCisJCWdpdCBpbml0IG5ld2RpciAmJgorCQl0ZXN0IC1kIG5ld2Rpci8uZ2l0L3JlZnMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgY3JlYXRlcyBhIG5ldyBiYXJlIGRpcmVjdG9yeScgJworCXJtIC1mciBuZXdkaXIgJiYKKwkoCisJCWdpdCBpbml0IC0tYmFyZSBuZXdkaXIgJiYKKwkJdGVzdCAtZCBuZXdkaXIvcmVmcworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCByZWNyZWF0ZXMgYSBkaXJlY3RvcnknICcKKwlybSAtZnIgbmV3ZGlyICYmCisJKAorCQlta2RpciBuZXdkaXIgJiYKKwkJZ2l0IGluaXQgbmV3ZGlyICYmCisJCXRlc3QgLWQgbmV3ZGlyLy5naXQvcmVmcworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCByZWNyZWF0ZXMgYSBuZXcgYmFyZSBkaXJlY3RvcnknICcKKwlybSAtZnIgbmV3ZGlyICYmCisJKAorCQlta2RpciBuZXdkaXIgJiYKKwkJZ2l0IGluaXQgLS1iYXJlIG5ld2RpciAmJgorCQl0ZXN0IC1kIG5ld2Rpci9yZWZzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IGNyZWF0ZXMgYSBuZXcgZGVlcCBkaXJlY3RvcnknICcKKwlybSAtZnIgbmV3ZGlyICYmCisJZ2l0IGluaXQgbmV3ZGlyL2EvYi9jICYmCisJdGVzdCAtZCBuZXdkaXIvYS9iL2MvLmdpdC9yZWZzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICdpbml0IGNyZWF0ZXMgYSBuZXcgZGVlcCBkaXJlY3RvcnkgKHVtYXNrIHZzLiBzaGFyZWQpJyAnCisJcm0gLWZyIG5ld2RpciAmJgorCSgKKwkJIyBMZWFkaW5nIGRpcmVjdG9yaWVzIHNob3VsZCBob25vciB1bWFzayB3aGlsZQorCQkjIHRoZSByZXBvc2l0b3J5IGl0c2VsZiBzaG91bGQgZm9sbG93ICJzaGFyZWQiCisJCXVtYXNrIDAwMiAmJgorCQlnaXQgaW5pdCAtLWJhcmUgLS1zaGFyZWQ9MDY2MCBuZXdkaXIvYS9iL2MgJiYKKwkJdGVzdCAtZCBuZXdkaXIvYS9iL2MvcmVmcyAmJgorCQlscyAtbGQgbmV3ZGlyL2EgbmV3ZGlyL2EvYiA+IGxzYWIub3V0ICYmCisJCSEgZ3JlcCAtdiAiXmRyd3hyd1tzeF1yLXgiIGxzYWIub3V0ICYmCisJCWxzIC1sZCBuZXdkaXIvYS9iL2MgPiBsc2Mub3V0ICYmCisJCSEgZ3JlcCAtdiAiXmRyd3hyd1tzeF0tLS0iIGxzYy5vdXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgbm90aWNlcyBFRVhJU1QgKDEpJyAnCisJcm0gLWZyIG5ld2RpciAmJgorCSgKKwkJPm5ld2RpciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgaW5pdCBuZXdkaXIgJiYKKwkJdGVzdCAtZiBuZXdkaXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgbm90aWNlcyBFRVhJU1QgKDIpJyAnCisJcm0gLWZyIG5ld2RpciAmJgorCSgKKwkJbWtkaXIgbmV3ZGlyICYmCisJCT5uZXdkaXIvYQorCQl0ZXN0X211c3RfZmFpbCBnaXQgaW5pdCBuZXdkaXIvYS9iICYmCisJCXRlc3QgLWYgbmV3ZGlyL2EKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICdpbml0IG5vdGljZXMgRVBFUk0nICcKKwlybSAtZnIgbmV3ZGlyICYmCisJKAorCQlta2RpciBuZXdkaXIgJiYKKwkJY2htb2QgLXcgbmV3ZGlyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBpbml0IG5ld2Rpci9hL2IKKwkpCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAwNi1kYXRlLnNoIGIvdC90MDAwNi1kYXRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc1YjAyYWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDA2LWRhdGUuc2gKQEAgLTAsMCArMSw3NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZGF0ZSBwYXJzaW5nIGFuZCBwcmludGluZycKKy4gLi90ZXN0LWxpYi5zaAorCisjIGFyYml0cmFyeSByZWZlcmVuY2UgdGltZTogMjAwOS0wOC0zMCAxOToyMDowMAorVEVTVF9EQVRFX05PVz0xMjUxNjYwMDAwOyBleHBvcnQgVEVTVF9EQVRFX05PVworCitjaGVja19zaG93KCkgeworCXQ9JCgoJFRFU1RfREFURV9OT1cgLSAkMSkpCisJZWNobyAiJHQgLT4gJDIiID5leHBlY3QKKwl0ZXN0X2V4cGVjdF8kezM6LXN1Y2Nlc3N9ICJyZWxhdGl2ZSBkYXRlICgkMikiICIKKwl0ZXN0LWRhdGUgc2hvdyAkdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSIKK30KKworY2hlY2tfc2hvdyA1ICc1IHNlY29uZHMgYWdvJworY2hlY2tfc2hvdyAzMDAgJzUgbWludXRlcyBhZ28nCitjaGVja19zaG93IDE4MDAwICc1IGhvdXJzIGFnbycKK2NoZWNrX3Nob3cgNDMyMDAwICc1IGRheXMgYWdvJworY2hlY2tfc2hvdyAxNzI4MDAwICczIHdlZWtzIGFnbycKK2NoZWNrX3Nob3cgMTMwMDAwMDAgJzUgbW9udGhzIGFnbycKK2NoZWNrX3Nob3cgMzc1MDAwMDAgJzEgeWVhciwgMiBtb250aHMgYWdvJworY2hlY2tfc2hvdyA1NTE4ODAwMCAnMSB5ZWFyLCA5IG1vbnRocyBhZ28nCitjaGVja19zaG93IDYzMDAwMDAwMCAnMjAgeWVhcnMgYWdvJworY2hlY2tfc2hvdyAzMTQ0OTYwMCAnMTIgbW9udGhzIGFnbycKKworY2hlY2tfcGFyc2UoKSB7CisJZWNobyAiJDEgLT4gJDIiID5leHBlY3QKKwl0ZXN0X2V4cGVjdF8kezM6LXN1Y2Nlc3N9ICJwYXJzZSBkYXRlICgkMSkiICIKKwl0ZXN0LWRhdGUgcGFyc2UgJyQxJyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSIKK30KKworY2hlY2tfcGFyc2UgMjAwOCBiYWQKK2NoZWNrX3BhcnNlIDIwMDgtMDIgYmFkCitjaGVja19wYXJzZSAyMDA4LTAyLTE0IGJhZAorY2hlY2tfcGFyc2UgJzIwMDgtMDItMTQgMjA6MzA6NDUnICcyMDA4LTAyLTE0IDIwOjMwOjQ1ICswMDAwJworCitjaGVja19hcHByb3hpZGF0ZSgpIHsKKwllY2hvICIkMSAtPiAkMiArMDAwMCIgPmV4cGVjdAorCXRlc3RfZXhwZWN0XyR7Mzotc3VjY2Vzc30gInBhcnNlIGFwcHJveGlkYXRlICgkMSkiICIKKwl0ZXN0LWRhdGUgYXBwcm94aWRhdGUgJyQxJyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSIKK30KKworY2hlY2tfYXBwcm94aWRhdGUgbm93ICcyMDA5LTA4LTMwIDE5OjIwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgJzUgc2Vjb25kcyBhZ28nICcyMDA5LTA4LTMwIDE5OjE5OjU1JworY2hlY2tfYXBwcm94aWRhdGUgNS5zZWNvbmRzLmFnbyAnMjAwOS0wOC0zMCAxOToxOTo1NScKK2NoZWNrX2FwcHJveGlkYXRlIDEwLm1pbnV0ZXMuYWdvICcyMDA5LTA4LTMwIDE5OjEwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgeWVzdGVyZGF5ICcyMDA5LTA4LTI5IDE5OjIwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgMy5kYXlzLmFnbyAnMjAwOS0wOC0yNyAxOToyMDowMCcKK2NoZWNrX2FwcHJveGlkYXRlIDMud2Vla3MuYWdvICcyMDA5LTA4LTA5IDE5OjIwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgMy5tb250aHMuYWdvICcyMDA5LTA1LTMwIDE5OjIwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgMi55ZWFycy4zLm1vbnRocy5hZ28gJzIwMDctMDUtMzAgMTk6MjA6MDAnCisKK2NoZWNrX2FwcHJveGlkYXRlICc2YW0geWVzdGVyZGF5JyAnMjAwOS0wOC0yOSAwNjowMDowMCcKK2NoZWNrX2FwcHJveGlkYXRlICc2cG0geWVzdGVyZGF5JyAnMjAwOS0wOC0yOSAxODowMDowMCcKK2NoZWNrX2FwcHJveGlkYXRlICczOjAwJyAnMjAwOS0wOC0zMCAwMzowMDowMCcKK2NoZWNrX2FwcHJveGlkYXRlICcxNTowMCcgJzIwMDktMDgtMzAgMTU6MDA6MDAnCitjaGVja19hcHByb3hpZGF0ZSAnbm9vbiB0b2RheScgJzIwMDktMDgtMzAgMTI6MDA6MDAnCitjaGVja19hcHByb3hpZGF0ZSAnbm9vbiB5ZXN0ZXJkYXknICcyMDA5LTA4LTI5IDEyOjAwOjAwJworCitjaGVja19hcHByb3hpZGF0ZSAnbGFzdCB0dWVzZGF5JyAnMjAwOS0wOC0yNSAxOToyMDowMCcKK2NoZWNrX2FwcHJveGlkYXRlICdKdWx5IDV0aCcgJzIwMDktMDctMDUgMTk6MjA6MDAnCitjaGVja19hcHByb3hpZGF0ZSAnMDYvMDUvMjAwOScgJzIwMDktMDYtMDUgMTk6MjA6MDAnCitjaGVja19hcHByb3hpZGF0ZSAnMDYuMDUuMjAwOScgJzIwMDktMDUtMDYgMTk6MjA6MDAnCisKK2NoZWNrX2FwcHJveGlkYXRlICdKdW4gNiwgNUFNJyAnMjAwOS0wNi0wNiAwNTowMDowMCcKK2NoZWNrX2FwcHJveGlkYXRlICc1QU0gSnVuIDYnICcyMDA5LTA2LTA2IDA1OjAwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgJzZBTSwgSnVuZSA3LCAyMDA5JyAnMjAwOS0wNi0wNyAwNjowMDowMCcKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDIwLWNybGYuc2ggYi90L3QwMDIwLWNybGYuc2gKaW5kZXggNGU3MmI1My4uYzNlN2UzMiAxMDA3NTUKLS0tIGEvdC90MDAyMC1jcmxmLnNoCisrKyBiL3QvdDAwMjAtY3JsZi5zaApAQCAtNCwyMSArNCw4IEBACiAKIC4gLi90ZXN0LWxpYi5zaAogCi1xX3RvX251bCAoKSB7Ci0JcGVybCAtcGUgJ3kvUS9cMDAwLycKLX0KLQotcV90b19jciAoKSB7Ci0JdHIgUSAnXDAxNScKLX0KLQotYXBwZW5kX2NyICgpIHsKLQlzZWQgLWUgJ3MvJC9RLycgfCB0ciBRICdcMDE1JwotfQotCi1yZW1vdmVfY3IgKCkgewotCXRyICdcMDE1JyBRIDwiJDEiIHwgZ3JlcCBRID4vZGV2L251bGwgJiYKLQl0ciAnXDAxNScgUSA8IiQxIiB8IHNlZCAtbmUgJ3MvUSQvL3AnCitoYXNfY3IoKSB7CisJdHIgJ1wwMTUnIFEgPCIkMSIgfCBncmVwIFEgPi9kZXYvbnVsbAogfQogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKQEAgLTE1Niw3ICsxNDMsNyBAQAogCiAJZm9yIGYgaW4gb25lIGRpci90d28KIAlkbwotCQlyZW1vdmVfY3IgIiRmIiA+dG1wICYmIG12IC1mIHRtcCAkZiAmJgorCQlyZW1vdmVfY3IgPCIkZiIgPnRtcCAmJiBtdiAtZiB0bXAgJGYgJiYKIAkJZ2l0IHVwZGF0ZS1pbmRleCAtLSAkZiB8fCB7CiAJCQllY2hvICJFaD8gJGYiCiAJCQlmYWxzZQpAQCAtMTgwLDcgKzE2Nyw3IEBACiAKIAlmb3IgZiBpbiBvbmUgZGlyL3R3bwogCWRvCi0JCWlmIHJlbW92ZV9jciAiJGYiID4vZGV2L251bGwKKwkJaWYgaGFzX2NyICIkZiIKIAkJdGhlbgogCQkJZWNobyAiRWg/ICRmIgogCQkJZmFsc2UKQEAgLTI0NSw3ICsyMzIsNyBAQAogCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCiAKIAlnaXQgYXBwbHkgcGF0Y2guZmlsZSAmJgotCXRlc3QgIiRwYXRjaGVkIiA9ICJgcmVtb3ZlX2NyIG9uZSB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluYCIgfHwgeworCXRlc3QgIiRwYXRjaGVkIiA9ICJgcmVtb3ZlX2NyIDxvbmUgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbmAiIHx8IHsKIAkJZWNobyAiRWg/ICBhcHBseSB3aXRob3V0IGluZGV4IgogCQlmYWxzZQogCX0KQEAgLTI3Miw3ICsyNTksNyBAQAogCiAJZ2l0IGFwcGx5IC0taW5kZXggcGF0Y2guZmlsZSAmJgogCXRlc3QgIiRwYXRjaGVkIiA9IGBnaXQgcmV2LXBhcnNlIDpvbmVgICYmCi0JdGVzdCAiJHBhdGNoZWQiID0gImByZW1vdmVfY3Igb25lIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW5gIiB8fCB7CisJdGVzdCAiJHBhdGNoZWQiID0gImByZW1vdmVfY3IgPG9uZSB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluYCIgfHwgewogCQllY2hvICJFaD8gIGFwcGx5IHdpdGggLS1pbmRleCIKIAkJZmFsc2UKIAl9CkBAIC0yODUsNyArMjcyLDcgQEAKIAlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgogCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCiAKLQlpZiByZW1vdmVfY3IgZGlyL3R3byA+L2Rldi9udWxsCisJaWYgaGFzX2NyIGRpci90d28KIAl0aGVuCiAJCWVjaG8gIkh1aD8iCiAJCWZhbHNlCkBAIC0yOTMsNyArMjgwLDcgQEAKIAkJOiBoYXBweQogCWZpICYmCiAKLQlpZiByZW1vdmVfY3Igb25lID4vZGV2L251bGwKKwlpZiBoYXNfY3Igb25lCiAJdGhlbgogCQk6IGhhcHB5CiAJZWxzZQpAQCAtMzAxLDcgKzI4OCw3IEBACiAJCWZhbHNlCiAJZmkgJiYKIAotCWlmIHJlbW92ZV9jciB0aHJlZSA+L2Rldi9udWxsCisJaWYgaGFzX2NyIHRocmVlCiAJdGhlbgogCQllY2hvICJIdWg/IgogCQlmYWxzZQpAQCAtMzE2LDcgKzMwMyw3IEBACiAJZWNobyAidHdvIGNybGY9aW5wdXQiID4uZ2l0YXR0cmlidXRlcyAmJgogCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCiAKLQlpZiByZW1vdmVfY3IgZGlyL3R3byA+L2Rldi9udWxsCisJaWYgaGFzX2NyIGRpci90d28KIAl0aGVuCiAJCWVjaG8gIkh1aD8iCiAJCWZhbHNlCkBAIC0zMzEsNyArMzE4LDcgQEAKIAllY2hvICJ0KiBjcmxmIiA+LmdpdGF0dHJpYnV0ZXMgJiYKIAlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgogCi0JaWYgcmVtb3ZlX2NyIGRpci90d28gPi9kZXYvbnVsbAorCWlmIGhhc19jciBkaXIvdHdvCiAJdGhlbgogCQk6IGhhcHB5CiAJZWxzZQpAQCAtMzM5LDcgKzMyNiw3IEBACiAJCWZhbHNlCiAJZmkgJiYKIAotCWlmIHJlbW92ZV9jciB0aHJlZSA+L2Rldi9udWxsCisJaWYgaGFzX2NyIHRocmVlCiAJdGhlbgogCQk6IGhhcHB5CiAJZWxzZQpAQCAtMzU3LDE0ICszNDQsMTQgQEAKIAlybSAtcmYgdG1wIG9uZSBkaXIgLmdpdGF0dHJpYnV0ZXMgcGF0Y2guZmlsZSB0aHJlZSAmJgogCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCiAKLQlpZiByZW1vdmVfY3Igb25lID4vZGV2L251bGwKKwlpZiBoYXNfY3Igb25lCiAJdGhlbgogCQllY2hvICJFaD8gb25lIHNob3VsZCBub3QgaGF2ZSBDUkxGIgogCQlmYWxzZQogCWVsc2UKIAkJOiBoYXBweQogCWZpICYmCi0JcmVtb3ZlX2NyIHRocmVlID4vZGV2L251bGwgfHwgeworCWhhc19jciB0aHJlZSB8fCB7CiAJCWVjaG8gIkVoPyB0aHJlZSBzaG91bGQgc3RpbGwgaGF2ZSBDUkxGIgogCQlmYWxzZQogCX0KQEAgLTM3NiwxNCArMzYzLDE0IEBACiAJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IEhFQUQgJiYKIAlnaXQgY2hlY2tvdXQtaW5kZXggLWYgLXEgLXUgLWEgJiYKIAotCWlmIHJlbW92ZV9jciBvbmUgPi9kZXYvbnVsbAorCWlmIGhhc19jciBvbmUKIAl0aGVuCiAJCWVjaG8gIkVoPyBvbmUgc2hvdWxkIG5vdCBoYXZlIENSTEYiCiAJCWZhbHNlCiAJZWxzZQogCQk6IGhhcHB5CiAJZmkgJiYKLQlyZW1vdmVfY3IgdGhyZWUgPi9kZXYvbnVsbCB8fCB7CisJaGFzX2NyIHRocmVlIHx8IHsKIAkJZWNobyAiRWg/IHRocmVlIHNob3VsZCBzdGlsbCBoYXZlIENSTEYiCiAJCWZhbHNlCiAJfQpAQCAtMzk2LDE0ICszODMsMTQgQEAKIAlnaXQgY2hlY2tvdXQtaW5kZXggLXUgLmdpdGF0dHJpYnV0ZXMgJiYKIAlnaXQgY2hlY2tvdXQtaW5kZXggLXUgb25lIGRpci90d28gdGhyZWUgJiYKIAotCWlmIHJlbW92ZV9jciBvbmUgPi9kZXYvbnVsbAorCWlmIGhhc19jciBvbmUKIAl0aGVuCiAJCWVjaG8gIkVoPyBvbmUgc2hvdWxkIG5vdCBoYXZlIENSTEYiCiAJCWZhbHNlCiAJZWxzZQogCQk6IGhhcHB5CiAJZmkgJiYKLQlyZW1vdmVfY3IgdGhyZWUgPi9kZXYvbnVsbCB8fCB7CisJaGFzX2NyIHRocmVlIHx8IHsKIAkJZWNobyAiRWg/IHRocmVlIHNob3VsZCBzdGlsbCBoYXZlIENSTEYiCiAJCWZhbHNlCiAJfQpAQCAtNDE2LDE0ICs0MDMsMTQgQEAKIAlnaXQgY2hlY2tvdXQtaW5kZXggLXUgb25lIGRpci90d28gdGhyZWUgJiYKIAlnaXQgY2hlY2tvdXQtaW5kZXggLXUgLmdpdGF0dHJpYnV0ZXMgJiYKIAotCWlmIHJlbW92ZV9jciBvbmUgPi9kZXYvbnVsbAorCWlmIGhhc19jciBvbmUKIAl0aGVuCiAJCWVjaG8gIkVoPyBvbmUgc2hvdWxkIG5vdCBoYXZlIENSTEYiCiAJCWZhbHNlCiAJZWxzZQogCQk6IGhhcHB5CiAJZmkgJiYKLQlyZW1vdmVfY3IgdGhyZWUgPi9kZXYvbnVsbCB8fCB7CisJaGFzX2NyIHRocmVlIHx8IHsKIAkJZWNobyAiRWg/IHRocmVlIHNob3VsZCBzdGlsbCBoYXZlIENSTEYiCiAJCWZhbHNlCiAJfQpAQCAtNDU2LDcgKzQ0Myw3IEBACiAKIAlnaXQgY2hlY2tvdXQgbWFzdGVyfjEgJiYKIAlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCi0JcmVtb3ZlX2NyIC5maWxlMiA+L2Rldi9udWxsCisJaGFzX2NyIC5maWxlMgogCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDAwMjEtY29udmVyc2lvbi5zaCBiL3QvdDAwMjEtY29udmVyc2lvbi5zaAppbmRleCA4ZmMzOWQ3Li42Y2I4ZDYwIDEwMDc1NQotLS0gYS90L3QwMDIxLWNvbnZlcnNpb24uc2gKKysrIGIvdC90MDAyMS1jb252ZXJzaW9uLnNoCkBAIC00LDcgKzQsOCBAQAogCiAuIC4vdGVzdC1saWIuc2gKIAotY2F0IDw8XEVPRiA+cm90MTMuc2gKK2NhdCA8PEVPRiA+cm90MTMuc2gKKyMhJFNIRUxMX1BBVEgKIHRyIFwKICAgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonIFwKICAgJ25vcHFyc3R1dnd4eXphYmNkZWZnaGlqa2xtTk9QUVJTVFVWV1hZWkFCQ0RFRkdISUpLTE0nCmRpZmYgLS1naXQgYS90L3QwMDIyLWNybGYtcmVuYW1lLnNoIGIvdC90MDAyMi1jcmxmLXJlbmFtZS5zaAppbmRleCBmMWUxZDQ4Li43YWYzZmJjIDEwMDc1NQotLS0gYS90L3QwMDIyLWNybGYtcmVuYW1lLnNoCisrKyBiL3QvdDAwMjItY3JsZi1yZW5hbWUuc2gKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90MDA0MC1wYXJzZS1vcHRpb25zLnNoIGIvdC90MDA0MC1wYXJzZS1vcHRpb25zLnNoCmluZGV4IGUzODI0MWMuLjNkNDUwZWQgMTAwNzU1Ci0tLSBhL3QvdDAwNDAtcGFyc2Utb3B0aW9ucy5zaAorKysgYi90L3QwMDQwLXBhcnNlLW9wdGlvbnMuc2gKQEAgLTEyLDEyICsxMiwxNCBAQAogCiAgICAgLWIsIC0tYm9vbGVhbiAgICAgICAgIGdldCBhIGJvb2xlYW4KICAgICAtNCwgLS1vcjQgICAgICAgICAgICAgYml0d2lzZS1vciBib29sZWFuIHdpdGggLi4uMDEwMAorICAgIC0tbmVnLW9yNCAgICAgICAgICAgICBzYW1lIGFzIC0tbm8tb3I0CiAKICAgICAtaSwgLS1pbnRlZ2VyIDxuPiAgICAgZ2V0IGEgaW50ZWdlcgogICAgIC1qIDxuPiAgICAgICAgICAgICAgICBnZXQgYSBpbnRlZ2VyLCB0b28KICAgICAtLXNldDIzICAgICAgICAgICAgICAgc2V0IGludGVnZXIgdG8gMjMKICAgICAtdCA8dGltZT4gICAgICAgICAgICAgZ2V0IHRpbWVzdGFtcCBvZiA8dGltZT4KICAgICAtTCwgLS1sZW5ndGggPHN0cj4gICAgZ2V0IGxlbmd0aCBvZiA8c3RyPgorICAgIC1GLCAtLWZpbGUgPEZJTEU+ICAgICBzZXQgZmlsZSB0byA8RklMRT4KIAogU3RyaW5nIG9wdGlvbnMKICAgICAtcywgLS1zdHJpbmcgPHN0cmluZz4KQEAgLTI5LDYgKzMxLDEwIEBACiAKIE1hZ2ljIGFyZ3VtZW50cwogICAgIC0tcXV1eCAgICAgICAgICAgICAgICBtZWFucyAtLXF1dXgKKyAgICAtTlVNICAgICAgICAgICAgICAgICAgc2V0IGludGVnZXIgdG8gTlVNCisgICAgKyAgICAgICAgICAgICAgICAgICAgIHNhbWUgYXMgLWIKKyAgICAtLWFtYmlndW91cyAgICAgICAgICAgcG9zaXRpdmUgYW1iaWd1aXR5CisgICAgLS1uby1hbWJpZ3VvdXMgICAgICAgIG5lZ2F0aXZlIGFtYmlndWl0eQogCiBTdGFuZGFyZCBvcHRpb25zCiAgICAgLS1hYmJyZXZbPTxuPl0gICAgICAgIHVzZSA8bj4gZGlnaXRzIHRvIGRpc3BsYXkgU0hBLTFzCkBAIC01MywxMCArNTksMTIgQEAKIHZlcmJvc2U6IDIKIHF1aWV0OiBubwogZHJ5IHJ1bjogeWVzCitmaWxlOiBwcmVmaXgvbXkuZmlsZQogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3J0IG9wdGlvbnMnICcKLQl0ZXN0LXBhcnNlLW9wdGlvbnMgLXMxMjMgLWIgLWkgMTcyOSAtYiAtdnYgLW4gPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgorCXRlc3QtcGFyc2Utb3B0aW9ucyAtczEyMyAtYiAtaSAxNzI5IC1iIC12diAtbiAtRiBteS5maWxlIFwKKwk+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCiAJdGVzdF9jbXAgZXhwZWN0IG91dHB1dCAmJgogCXRlc3QgISAtcyBvdXRwdXQuZXJyCiAnCkBAIC03MCwxMSArNzgsMTIgQEAKIHZlcmJvc2U6IDIKIHF1aWV0OiBubwogZHJ5IHJ1bjogbm8KK2ZpbGU6IHByZWZpeC9maS5sZQogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvbmcgb3B0aW9ucycgJwogCXRlc3QtcGFyc2Utb3B0aW9ucyAtLWJvb2xlYW4gLS1pbnRlZ2VyIDE3MjkgLS1ib29sZWFuIC0tc3RyaW5nMj0zMjEgXAotCQktLXZlcmJvc2UgLS12ZXJib3NlIC0tbm8tZHJ5LXJ1biAtLWFiYnJldj0xMCBcCisJCS0tdmVyYm9zZSAtLXZlcmJvc2UgLS1uby1kcnktcnVuIC0tYWJicmV2PTEwIC0tZmlsZSBmaS5sZVwKIAkJPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgogCXRlc3QgISAtcyBvdXRwdXQuZXJyICYmCiAJdGVzdF9jbXAgZXhwZWN0IG91dHB1dApAQCAtODQsNiArOTMsOCBAQAogCXRlc3QtcGFyc2Utb3B0aW9ucyAtczsKIAl0ZXN0ICQ/ID0gMTI5ICYmCiAJdGVzdC1wYXJzZS1vcHRpb25zIC0tc3RyaW5nOworCXRlc3QgJD8gPSAxMjkgJiYKKwl0ZXN0LXBhcnNlLW9wdGlvbnMgLS1maWxlOwogCXRlc3QgJD8gPSAxMjkKICcKIApAQCAtOTYsNiArMTA3LDcgQEAKIHZlcmJvc2U6IDAKIHF1aWV0OiBubwogZHJ5IHJ1bjogbm8KK2ZpbGU6IChub3Qgc2V0KQogYXJnIDAwOiBhMQogYXJnIDAxOiBiMQogYXJnIDAyOiAtLWJvb2xlYW4KQEAgLTExNyw2ICsxMjksNyBAQAogdmVyYm9zZTogMAogcXVpZXQ6IG5vCiBkcnkgcnVuOiBubworZmlsZTogKG5vdCBzZXQpCiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndW5hbWJpZ3VvdXNseSBhYmJyZXZpYXRlZCBvcHRpb24nICcKQEAgLTE0NSw2ICsxNTgsNyBAQAogdmVyYm9zZTogMAogcXVpZXQ6IG5vCiBkcnkgcnVuOiBubworZmlsZTogKG5vdCBzZXQpCiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uIGFtYmlndW91cyBvcHRpb24gKGFmdGVyIHR3byBvcHRpb25zIGl0IGFiYnJldmlhdGVzKScgJwpAQCAtMTcyLDYgKzE4Niw3IEBACiB2ZXJib3NlOiAwCiBxdWlldDogbm8KIGRyeSBydW46IG5vCitmaWxlOiAobm90IHNldCkKIGFyZyAwMDogLS1xdXV4CiBFT0YKIApAQCAtMTkwLDYgKzIwNSw3IEBACiB2ZXJib3NlOiAwCiBxdWlldDogeWVzCiBkcnkgcnVuOiBubworZmlsZTogKG5vdCBzZXQpCiBhcmcgMDA6IGZvbwogRU9GCiAKQEAgLTIxMCw2ICsyMjYsNyBAQAogdmVyYm9zZTogMAogcXVpZXQ6IG5vCiBkcnkgcnVuOiBubworZmlsZTogKG5vdCBzZXQpCiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0NBTExCQUNLKCkgYW5kIE9QVF9CSVQoKSB3b3JrJyAnCkBAIC0yMzcsNiArMjU0LDcgQEAKIHZlcmJvc2U6IDAKIHF1aWV0OiBubwogZHJ5IHJ1bjogbm8KK2ZpbGU6IChub3Qgc2V0KQogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9CSVQoKSBhbmQgT1BUX1NFVF9JTlQoKSB3b3JrJyAnCkBAIC0yNDUsNyArMjYzLDc2IEBACiAJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAogJwogCi0jIC0tb3I0Ci0jIC0tbm8tb3I0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfTkVHQklUKCkgYW5kIE9QVF9TRVRfSU5UKCkgd29yaycgJworCXRlc3QtcGFyc2Utb3B0aW9ucyAtLXNldDIzIC1iYmJiYiAtLW5lZy1vcjQgPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgorCXRlc3QgISAtcyBvdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPiBleHBlY3QgPDxFT0YKK2Jvb2xlYW46IDYKK2ludGVnZXI6IDAKK3RpbWVzdGFtcDogMAorc3RyaW5nOiAobm90IHNldCkKK2FiYnJldjogNwordmVyYm9zZTogMAorcXVpZXQ6IG5vCitkcnkgcnVuOiBubworZmlsZTogKG5vdCBzZXQpCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0JJVCgpIHdvcmtzJyAnCisJdGVzdC1wYXJzZS1vcHRpb25zIC1iYiAtLW9yNCA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCisJdGVzdCAhIC1zIG91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9ORUdCSVQoKSB3b3JrcycgJworCXRlc3QtcGFyc2Utb3B0aW9ucyAtYmIgLS1uby1uZWctb3I0ID4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKKwl0ZXN0ICEgLXMgb3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0JPT0xFQU4oKSB3aXRoIFBBUlNFX09QVF9OT0RBU0ggd29ya3MnICcKKwl0ZXN0LXBhcnNlLW9wdGlvbnMgKyArICsgKyArICsgPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgorCXRlc3QgISAtcyBvdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPiBleHBlY3QgPDxFT0YKK2Jvb2xlYW46IDAKK2ludGVnZXI6IDEyMzQ1Cit0aW1lc3RhbXA6IDAKK3N0cmluZzogKG5vdCBzZXQpCithYmJyZXY6IDcKK3ZlcmJvc2U6IDAKK3F1aWV0OiBubworZHJ5IHJ1bjogbm8KK2ZpbGU6IChub3Qgc2V0KQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9OVU1CRVJfQ0FMTEJBQ0soKSB3b3JrcycgJworCXRlc3QtcGFyc2Utb3B0aW9ucyAtMTIzNDUgPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgorCXRlc3QgISAtcyBvdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorYm9vbGVhbjogMAoraW50ZWdlcjogMAordGltZXN0YW1wOiAwCitzdHJpbmc6IChub3Qgc2V0KQorYWJicmV2OiA3Cit2ZXJib3NlOiAwCitxdWlldDogbm8KK2RyeSBydW46IG5vCitmaWxlOiAobm90IHNldCkKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZWdhdGlvbiBvZiBPUFRfTk9ORUcgZmxhZ3MgaXMgbm90IGFtYmlndW91cycgJworCXRlc3QtcGFyc2Utb3B0aW9ucyAtLW5vLWFtYmlnID5vdXRwdXQgMj5vdXRwdXQuZXJyICYmCisJdGVzdCAhIC1zIG91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDA1MC1maWxlc3lzdGVtLnNoIGIvdC90MDA1MC1maWxlc3lzdGVtLnNoCmluZGV4IDg5MjgyY2MuLjQxZGY2YmMgMTAwNzU1Ci0tLSBhL3QvdDAwNTAtZmlsZXN5c3RlbS5zaAorKysgYi90L3QwMDUwLWZpbGVzeXN0ZW0uc2gKQEAgLTEwOCwxMyArMTA4LDE3IEBACiAKICcKIAotJHRlc3RfY2FzZSAnYWRkICh3aXRoIGRpZmZlcmVudCBjYXNlKScgJworCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2FkZCAod2l0aCBkaWZmZXJlbnQgY2FzZSknICcKIAogCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgogCXJtIGNhbWVsY2FzZSAmJgogCWVjaG8gMSA+Q2FtZWxDYXNlICYmCiAJZ2l0IGFkZCBDYW1lbENhc2UgJiYKLQl0ZXN0ICQoZ2l0IGxzLWZpbGVzIHwgZ3JlcCAtaSBjYW1lbGNhc2UgfCB3YyAtbCkgPSAxCisJY2FtZWw9JChnaXQgbHMtZmlsZXMgfCBncmVwIC1pIGNhbWVsY2FzZSkgJiYKKwl0ZXN0ICQoZWNobyAiJGNhbWVsIiB8IHdjIC1sKSA9IDEgJiYKKwl0ZXN0ICJ6JChnaXQgY2F0LWZpbGUgYmxvYiA6JGNhbWVsKSIgPSB6MQogCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDAwNjEtcnVuLWNvbW1hbmQuc2ggYi90L3QwMDYxLXJ1bi1jb21tYW5kLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEwYjI2ZTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDYxLXJ1bi1jb21tYW5kLnNoCkBAIC0wLDAgKzEsMTQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgSWxhcmkgTGl1c3ZhYXJhCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgcnVuIGNvbW1hbmQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydF9jb21tYW5kIHJlcG9ydHMgRU5PRU5UJyAnCisJdGVzdC1ydW4tY29tbWFuZCBzdGFydC1jb21tYW5kLUVOT0VOVCAuL2RvZXMtbm90LWV4aXN0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDEwMS1hdC1zeW50YXguc2ggYi90L3QwMTAxLWF0LXN5bnRheC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMTk5OGI1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDEwMS1hdC1zeW50YXguc2gKQEAgLTAsMCArMSw0NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3ZhcmlvdXMgQHt3aGF0ZXZlcn0gc3ludGF4IHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgb25lICYmCisJdGVzdF9jb21taXQgdHdvCisnCisKK2NoZWNrX2F0KCkgeworCWVjaG8gIiQyIiA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0lcyAiJDEiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7MH0gc2hvd3MgY3VycmVudCcgJworCWNoZWNrX2F0IEB7MH0gdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7MX0gc2hvd3Mgb2xkJyAnCisJY2hlY2tfYXQgQHsxfSBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQHtub3d9IHNob3dzIGN1cnJlbnQnICcKKwljaGVja19hdCBAe25vd30gdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7MjAwMS0wOS0xN30gKGJlZm9yZSB0aGUgZmlyc3QgY29tbWl0KSBzaG93cyBvbGQnICcKKwljaGVja19hdCBAezIwMDEtMDktMTd9IG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWxseSBhcHByb3hpZGF0ZXMgd29yaycgJworCWNoZWNrX2F0IEB7My5ob3QuZG9ncy5vbi4yMDAxLTA5LTE3fSBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90aWNlIG1pc3NwZWxsZWQgdXBzdHJlYW0nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIC0xIC0tZm9ybWF0PSVzIEB7dXNwdHJlYW19CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbXBsYWluIGFib3V0IHRvdGFsIG5vbnNlbnNlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyAtMSAtLWZvcm1hdD0lcyBAe3V0dGVyLmJvZ29zaXR5fQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwMDAtcmVhZC10cmVlLW0tM3dheS5zaCBiL3QvdDEwMDAtcmVhZC10cmVlLW0tM3dheS5zaAppbmRleCAyMmJhN2E1Li40ZjE3MTcyIDEwMDc1NQotLS0gYS90L3QxMDAwLXJlYWQtdHJlZS1tLTN3YXkuc2gKKysrIGIvdC90MTAwMC1yZWFkLXRyZWUtbS0zd2F5LnNoCkBAIC0xMjYsOSArMTI2LDYgQEAKIDEwMDY0NCBYIDAJWi9OTgogRU9GCiAKLV94NDA9J1swLTlhLWZdWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdWzAtOWEtZl0nCi1feDQwPSIkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwIgotCiBjaGVja19yZXN1bHQgKCkgewogICAgIGdpdCBscy1maWxlcyAtLXN0YWdlIHwgc2VkIC1lICdzLyAnIiRfeDQwIicgLyBYIC8nID5jdXJyZW50ICYmCiAgICAgdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudApkaWZmIC0tZ2l0IGEvdC90MTAwMS1yZWFkLXRyZWUtbS0yd2F5LnNoIGIvdC90MTAwMS1yZWFkLXRyZWUtbS0yd2F5LnNoCmluZGV4IDI3MWJjNGUuLjYzMjdkMjAgMTAwNzU1Ci0tLSBhL3QvdDEwMDEtcmVhZC10cmVlLW0tMndheS5zaAorKysgYi90L3QxMDAxLXJlYWQtdHJlZS1tLTJ3YXkuc2gKQEAgLTUsNyArNSw3IEBACiAKIHRlc3RfZGVzY3JpcHRpb249J1R3byB3YXkgbWVyZ2Ugd2l0aCByZWFkLXRyZWUgLW0gJEggJE0KIAotVGhpcyB0ZXN0IHRyaWVzIHR3by13YXkgbWVyZ2UgKGFrYSBmYXN0IGZvcndhcmQgd2l0aCBjYXJyeSBmb3J3YXJkKS4KK1RoaXMgdGVzdCB0cmllcyB0d28td2F5IG1lcmdlIChha2EgZmFzdC1mb3J3YXJkIHdpdGggY2FycnkgZm9yd2FyZCkuCiAKIFRoZXJlIGlzIHRoZSBoZWFkIChjYWxsZWQgSCkgYW5kIGFub3RoZXIgY29tbWl0IChjYWxsZWQgTSksIHdoaWNoIGlzCiBzaW1wbHkgYWhlYWQgb2YgSC4gIFRoZSBpbmRleCBhbmQgdGhlIHdvcmsgdHJlZSBjb250YWlucyBhIHN0YXRlIHRoYXQKQEAgLTI2LDggKzI2LDYgQEAKICAgICBnaXQgcmVhZC10cmVlIC1tICIkMSIgIiQyIiAmJiBnaXQgbHMtZmlsZXMgLS1zdGFnZQogfQogCi1feDQwPSdbMC05YS1mXVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdJwotX3g0MD0iJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCIKIGNvbXBhcmVfY2hhbmdlICgpIHsKIAlzZWQgLW4gPmN1cnJlbnQgXAogCSAgICAtZSAnL14tLS0gL2Q7IC9eKysrIC9kOyAvXkBAIC9kOycgXApAQCAtNTEsNyArNDksNyBAQAogfQogCiBjYXQgPmJvemJhci1vbGQgPDxcRU9GCi1UaGlzIGlzIGEgc2FtcGxlIGZpbGUgdXNlZCBpbiB0d28td2F5IGZhc3QgZm9yd2FyZCBtZXJnZQorVGhpcyBpcyBhIHNhbXBsZSBmaWxlIHVzZWQgaW4gdHdvLXdheSBmYXN0LWZvcndhcmQgbWVyZ2UKIHRlc3RzLiAgSXRzIHNlY29uZCBsaW5lIGVuZHMgd2l0aCBhIG1hZ2ljIHdvcmQgYm96YmFyCiB3aGljaCB3aWxsIGJlIG1vZGlmaWVkIGJ5IHRoZSBtZXJnZWQgaGVhZCB0byBnbnVzdG8uCiBJdCBoYXMgc29tZSBleHRyYSBsaW5lcyBzbyB0aGF0IGV4dGVybmFsIHRvb2xzIGNhbgpAQCAtMzAwLDcgKzI5OCw3IEBACiAgICAgIGVjaG8gZ251c3RvIGdudXN0byA+Ym96YmFyICYmCiAgICAgIGlmIHJlYWRfdHJlZV90d293YXkgJHRyZWVIICR0cmVlTTsgdGhlbiBmYWxzZTsgZWxzZSA6OyBmaScKIAotIyBUaGlzIGZhaWxzIHdpdGggc3RyYWlnaHQgdHdvLXdheSBmYXN0IGZvcndhcmQuCisjIFRoaXMgZmFpbHMgd2l0aCBzdHJhaWdodCB0d28td2F5IGZhc3QtZm9yd2FyZC4KIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICcyMiAtIGxvY2FsIGNoYW5nZSBjYWNoZSB1cGRhdGVkLicgXAogICAgICdybSAtZiAuZ2l0L2luZGV4ICYmCmRpZmYgLS1naXQgYS90L3QxMDAyLXJlYWQtdHJlZS1tLXUtMndheS5zaCBiL3QvdDEwMDItcmVhZC10cmVlLW0tdS0yd2F5LnNoCmluZGV4IDVlNDBjZWMuLjAyNDEzMjkgMTAwNzU1Ci0tLSBhL3QvdDEwMDItcmVhZC10cmVlLW0tdS0yd2F5LnNoCisrKyBiL3QvdDEwMDItcmVhZC10cmVlLW0tdS0yd2F5LnNoCkBAIC0xMCw4ICsxMCw2IEBACiAnCiAuIC4vdGVzdC1saWIuc2gKIAotX3g0MD0nWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXScKLV94NDA9IiRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAiCiBjb21wYXJlX2NoYW5nZSAoKSB7CiAJc2VkID5jdXJyZW50IFwKIAkgICAgLWUgJzF7L15kaWZmIC0tZ2l0IC9kO30nIFwKZGlmZiAtLWdpdCBhL3QvdDEwMDktcmVhZC10cmVlLW5ldy1pbmRleC5zaCBiL3QvdDEwMDktcmVhZC10cmVlLW5ldy1pbmRleC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41OWIzYWE0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTAwOS1yZWFkLXRyZWUtbmV3LWluZGV4LnNoCkBAIC0wLDAgKzEsMjUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHJlYWQtdHJlZSBpbnRvIGEgZnJlc2ggaW5kZXggZmlsZScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gb25lID5hICYmCisJZ2l0IGFkZCBhICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbi1leGlzdGVudCBpbmRleCBmaWxlJyAnCisJcm0gLWYgbmV3LWluZGV4ICYmCisJR0lUX0lOREVYX0ZJTEU9bmV3LWluZGV4IGdpdCByZWFkLXRyZWUgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IGluZGV4IGZpbGUnICcKKwlybSAtZiBuZXctaW5kZXggJiYKKwk+IG5ldy1pbmRleCAmJgorCUdJVF9JTkRFWF9GSUxFPW5ldy1pbmRleCBnaXQgcmVhZC10cmVlIG1hc3RlcgorJworCit0ZXN0X2RvbmUKKwpkaWZmIC0tZ2l0IGEvdC90MTAxMC1ta3RyZWUuc2ggYi90L3QxMDEwLW1rdHJlZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45OTU2ZTNhCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTAxMC1ta3RyZWUuc2gKQEAgLTAsMCArMSw3MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBta3RyZWUnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlmb3IgZCBpbiBhIGEuIGEwCisJZG8KKwkJbWtkaXIgIiRkIiAmJiBlY2hvICIkZC9vbmUiID4iJGQvb25lIiAmJgorCQlnaXQgYWRkICIkZCIKKwlkb25lICYmCisJZWNobyB6ZXJvID5vbmUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0taW5mby1vbmx5IG9uZSAmJgorCWdpdCB3cml0ZS10cmVlIC0tbWlzc2luZy1vayA+dHJlZS5taXNzaW5nICYmCisJZ2l0IGxzLXRyZWUgJChjYXQgdHJlZS5taXNzaW5nKSA+dG9wLm1pc3NpbmcgJiYKKwlnaXQgbHMtdHJlZSAtciAkKGNhdCB0cmVlLm1pc3NpbmcpID5hbGwubWlzc2luZyAmJgorCWVjaG8gb25lID5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCWdpdCB3cml0ZS10cmVlID50cmVlICYmCisJZ2l0IGxzLXRyZWUgJChjYXQgdHJlZSkgPnRvcCAmJgorCWdpdCBscy10cmVlIC1yICQoY2F0IHRyZWUpID5hbGwgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1xIC1tIG9uZSAmJgorCUg9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxNjAwMDAgJEggc3ViICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtcSAtbSB0d28gJiYKKwlnaXQgcmV2LXBhcnNlIEhFQURee3RyZWV9ID50cmVlLndpdGhzdWIgJiYKKwlnaXQgbHMtdHJlZSBIRUFEID50b3Aud2l0aHN1YiAmJgorCWdpdCBscy10cmVlIC1yIEhFQUQgPmFsbC53aXRoc3ViCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgcGlwZWQgdG8gbWt0cmVlICgxKScgJworCWdpdCBta3RyZWUgPHRvcCA+YWN0dWFsICYmCisJdGVzdF9jbXAgdHJlZSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSBwaXBlZCB0byBta3RyZWUgKDIpJyAnCisJZ2l0IG1rdHJlZSA8dG9wLndpdGhzdWIgPmFjdHVhbCAmJgorCXRlc3RfY21wIHRyZWUud2l0aHN1YiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSBvdXRwdXQgaW4gd3Jvbmcgb3JkZXIgZ2l2ZW4gdG8gbWt0cmVlICgxKScgJworCXBlcmwgLWUgInByaW50IHJldmVyc2UgPD4iIDx0b3AgfAorCWdpdCBta3RyZWUgPmFjdHVhbCAmJgorCXRlc3RfY21wIHRyZWUgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgb3V0cHV0IGluIHdyb25nIG9yZGVyIGdpdmVuIHRvIG1rdHJlZSAoMiknICcKKwlwZXJsIC1lICJwcmludCByZXZlcnNlIDw+IiA8dG9wLndpdGhzdWIgfAorCWdpdCBta3RyZWUgPmFjdHVhbCAmJgorCXRlc3RfY21wIHRyZWUud2l0aHN1YiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsb3cgbWlzc2luZyBvYmplY3Qgd2l0aCAtLW1pc3NpbmcnICcKKwlnaXQgbWt0cmVlIC0tbWlzc2luZyA8dG9wLm1pc3NpbmcgPmFjdHVhbCAmJgorCXRlc3RfY21wIHRyZWUubWlzc2luZyBhY3R1YWwKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnbWt0cmVlIHJlYWRzIGxzLXRyZWUgLXIgb3V0cHV0ICgxKScgJworCWdpdCBta3RyZWUgPGFsbCA+YWN0dWFsICYmCisJdGVzdF9jbXAgdHJlZSBhY3R1YWwKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnbWt0cmVlIHJlYWRzIGxzLXRyZWUgLXIgb3V0cHV0ICgyKScgJworCWdpdCBta3RyZWUgPGFsbC53aXRoc3ViID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCB0cmVlLndpdGhzdWIgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTAxMS1yZWFkLXRyZWUtc3BhcnNlLWNoZWNrb3V0LnNoIGIvdC90MTAxMS1yZWFkLXRyZWUtc3BhcnNlLWNoZWNrb3V0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYyMjQ2ZGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDExLXJlYWQtdHJlZS1zcGFyc2UtY2hlY2tvdXQuc2gKQEAgLTAsMCArMSwxNTAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdzcGFyc2UgY2hlY2tvdXQgdGVzdHMnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjYXQgPmV4cGVjdGVkIDw8RU9GCisxMDA2NDQgNzdmMGJhMTczNGVkNzlkMTI4ODFmODFiMzZlZTEzNGRlNmEzMzI3YiAwCWluaXQudAorMTAwNjQ0IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEgMAlzdWIvYWRkZWQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBpbml0ICYmCisJZWNobyBtb2RpZmllZCA+PiBpbml0LnQgJiYKKwlta2RpciBzdWIgJiYKKwl0b3VjaCBzdWIvYWRkZWQgJiYKKwlnaXQgYWRkIGluaXQudCBzdWIvYWRkZWQgJiYKKwlnaXQgY29tbWl0IC1tICJtb2RpZmllZCBhbmQgYWRkZWQiICYmCisJZ2l0IHRhZyB0b3AgJiYKKwlnaXQgcm0gc3ViL2FkZGVkICYmCisJZ2l0IGNvbW1pdCAtbSByZW1vdmVkICYmCisJZ2l0IHRhZyByZW1vdmVkICYmCisJZ2l0IGNoZWNrb3V0IHRvcCAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlID4gcmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK2NhdCA+ZXhwZWN0ZWQuc3d0IDw8RU9GCitIIGluaXQudAorSCBzdWIvYWRkZWQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZC10cmVlIHdpdGhvdXQgLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCcgJworCWdpdCByZWFkLXRyZWUgLW0gLXUgSEVBRCAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlID4gcmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0ICYmCisJZ2l0IGxzLWZpbGVzIC10ID4gcmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuc3d0IHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgd2l0aCAuZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0IGJ1dCBkaXNhYmxlZCcgJworCWVjaG8gPiAuZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0CisJZ2l0IHJlYWQtdHJlZSAtbSAtdSBIRUFEICYmCisJZ2l0IGxzLWZpbGVzIC10ID4gcmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuc3d0IHJlc3VsdCAmJgorCXRlc3QgLWYgaW5pdC50ICYmCisJdGVzdCAtZiBzdWIvYWRkZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZC10cmVlIC0tbm8tc3BhcnNlLWNoZWNrb3V0IHdpdGggZW1wdHkgLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCBhbmQgZW5hYmxlZCcgJworCWdpdCBjb25maWcgY29yZS5zcGFyc2VjaGVja291dCB0cnVlICYmCisJZWNobyA+IC5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlnaXQgcmVhZC10cmVlIC0tbm8tc3BhcnNlLWNoZWNrb3V0IC1tIC11IEhFQUQgJiYKKwlnaXQgbHMtZmlsZXMgLXQgPiByZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5zd3QgcmVzdWx0ICYmCisJdGVzdCAtZiBpbml0LnQgJiYKKwl0ZXN0IC1mIHN1Yi9hZGRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgd2l0aCBlbXB0eSAuZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0JyAnCisJZ2l0IGNvbmZpZyBjb3JlLnNwYXJzZWNoZWNrb3V0IHRydWUgJiYKKwllY2hvID4gLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWFkLXRyZWUgLW0gLXUgSEVBRCAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlID4gcmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0ICYmCisJZ2l0IGxzLWZpbGVzIC10ID4gcmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuc3d0IHJlc3VsdCAmJgorCXRlc3QgLWYgaW5pdC50ICYmCisJdGVzdCAtZiBzdWIvYWRkZWQKKycKKworY2F0ID5leHBlY3RlZC5zd3QgPDxFT0YKK1MgaW5pdC50CitIIHN1Yi9hZGRlZAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXRjaCBkaXJlY3RvcmllcyB3aXRoIHRyYWlsaW5nIHNsYXNoJyAnCisJZWNobyBzdWIvID4gLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCByZWFkLXRyZWUgLW0gLXUgSEVBRCAmJgorCWdpdCBscy1maWxlcyAtdCA+IHJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLnN3dCByZXN1bHQgJiYKKwl0ZXN0ICEgLWYgaW5pdC50ICYmCisJdGVzdCAtZiBzdWIvYWRkZWQKKycKKworY2F0ID5leHBlY3RlZC5zd3QgPDxFT0YKK0ggaW5pdC50CitIIHN1Yi9hZGRlZAorRU9GCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdtYXRjaCBkaXJlY3RvcmllcyB3aXRob3V0IHRyYWlsaW5nIHNsYXNoJyAnCisJZWNobyBpbml0LnQgPiAuZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZWNobyBzdWIgPj4gLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCByZWFkLXRyZWUgLW0gLXUgSEVBRCAmJgorCWdpdCBscy1maWxlcyAtdCA+IHJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLnN3dCByZXN1bHQgJiYKKwl0ZXN0ICEgLWYgaW5pdC50ICYmCisJdGVzdCAtZiBzdWIvYWRkZWQKKycKKworY2F0ID5leHBlY3RlZC5zd3QgPDxFT0YKK0ggaW5pdC50CitTIHN1Yi9hZGRlZAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBhcmVhIGNoYW5nZXMnICcKKwllY2hvIGluaXQudCA+IC5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlnaXQgcmVhZC10cmVlIC1tIC11IEhFQUQgJiYKKwlnaXQgbHMtZmlsZXMgLXQgPiByZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5zd3QgcmVzdWx0ICYmCisJdGVzdCAtZiBpbml0LnQgJiYKKwl0ZXN0ICEgLWYgc3ViL2FkZGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSB1cGRhdGVzIHdvcmt0cmVlLCBhYnNlbnQgY2FzZScgJworCWVjaG8gc3ViL2FkZGVkID4gLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCBjaGVja291dCAtZiB0b3AgJiYKKwlnaXQgcmVhZC10cmVlIC1tIC11IEhFQUReICYmCisJdGVzdCAhIC1mIGluaXQudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgdXBkYXRlcyB3b3JrdHJlZSwgZGlydHkgY2FzZScgJworCWVjaG8gc3ViL2FkZGVkID4gLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCBjaGVja291dCAtZiB0b3AgJiYKKwllY2hvIGRpcnR5ID4gaW5pdC50ICYmCisJZ2l0IHJlYWQtdHJlZSAtbSAtdSBIRUFEXiAmJgorCWdyZXAgLXEgZGlydHkgaW5pdC50ICYmCisJcm0gaW5pdC50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSByZW1vdmVzIHdvcmt0cmVlLCBkaXJ0eSBjYXNlJyAnCisJZWNobyBpbml0LnQgPiAuZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IGNoZWNrb3V0IC1mIHRvcCAmJgorCWVjaG8gZGlydHkgPiBhZGRlZCAmJgorCWdpdCByZWFkLXRyZWUgLW0gLXUgSEVBRF4gJiYKKwlncmVwIC1xIGRpcnR5IGFkZGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSBhZGRzIHRvIHdvcmt0cmVlLCBhYnNlbnQgY2FzZScgJworCWVjaG8gaW5pdC50ID4gLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCBjaGVja291dCAtZiByZW1vdmVkICYmCisJZ2l0IHJlYWQtdHJlZSAtdSAtbSBIRUFEXiAmJgorCXRlc3QgISAtZiBzdWIvYWRkZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZC10cmVlIGFkZHMgdG8gd29ya3RyZWUsIGRpcnR5IGNhc2UnICcKKwllY2hvIGluaXQudCA+IC5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlnaXQgY2hlY2tvdXQgLWYgcmVtb3ZlZCAmJgorCW1rZGlyIHN1YiAmJgorCWVjaG8gZGlydHkgPiBzdWIvYWRkZWQgJiYKKwlnaXQgcmVhZC10cmVlIC11IC1tIEhFQUReICYmCisJZ3JlcCAtcSBkaXJ0eSBzdWIvYWRkZWQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMDEyLXJlYWQtdHJlZS1kZi5zaCBiL3QvdDEwMTItcmVhZC10cmVlLWRmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk4MTFkNDYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDEyLXJlYWQtdHJlZS1kZi5zaApAQCAtMCwwICsxLDEwMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3JlYWQtdHJlZSBEL0YgY29uZmxpY3QgY29ybmVyIGNhc2VzJworCisuIC4vdGVzdC1saWIuc2gKKworbWFrZXRyZWUgKCkgeworCSgKKwkJcm0gLWYgLmdpdC9pbmRleCAuZ2l0L2luZGV4LmxvY2sgJiYKKwkJZ2l0IGNsZWFuIC1kIC1mIC1mIC1xIC14ICYmCisJCW5hbWU9IiQxIiAmJgorCQlzaGlmdCAmJgorCQlmb3IgaXQKKwkJZG8KKwkJCXBhdGg9JChleHByICIkaXQiIDogJ1woW146XSpcKScpICYmCisJCQlta2RpciAtcCAkKGRpcm5hbWUgIiRwYXRoIikgJiYKKwkJCWVjaG8gIiRpdCIgPiIkcGF0aCIgJiYKKwkJCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgIiRwYXRoIiB8fCBleGl0CisJCWRvbmUgJiYKKwkJZ2l0IHRhZyAiJG5hbWUiICQoZ2l0IHdyaXRlLXRyZWUpCisJKQorfQorCitzZXR0cmVlICgpIHsKKwlybSAtZiAuZ2l0L2luZGV4IC5naXQvaW5kZXgubG9jayAmJgorCWdpdCBjbGVhbiAtZCAtZiAtZiAtcSAteCAmJgorCWdpdCByZWFkLXRyZWUgIiQxIiAmJgorCWdpdCBjaGVja291dC1pbmRleCAtZiAtcSAtdSAtYSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoCit9CisKK2NoZWNraW5kZXggKCkgeworCWdpdCBscy1maWxlcyAtcyB8CisJc2VkICJzfF5bMC03XVswLTddKiAkX3g0MCBcKFswLTNdXCkJfFwxIHwiID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgY3VycmVudAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwltYWtldHJlZSBPLTAwMCBhL2ItMi9jL2QgYS9iL2MvZCBhL3ggJiYKKwltYWtldHJlZSBBLTAwMCBhL2ItMi9jL2QgYS9iL2MvZCBhL3ggJiYKKwltYWtldHJlZSBBLTAwMSBhL2ItMi9jL2QgYS9iL2MvZCBhL2IvYy9lIGEveCAmJgorCW1ha2V0cmVlIEItMDAwIGEvYi0yL2MvZCBhL2IgICAgIGEveCAmJgorCisJbWFrZXRyZWUgTy0wMTAgdC0wICAgICB0LzEgIHQvMiB0PTMgJiYKKwltYWtldHJlZSBBLTAxMCB0LTAgdCAgICAgICAgICAgIHQ9MyAmJgorCW1ha2V0cmVlIEItMDEwICAgICAgICAgdC8xOiAgICAgdD0zOiAmJgorCisJbWFrZXRyZWUgTy0wMjAgZHMvZG1hL2lvYXQuYyBkcy9kbWEvaW9hdF9kY2EuYyAmJgorCW1ha2V0cmVlIEEtMDIwIGRzL2RtYS9pb2F0L01ha2VmaWxlIGRzL2RtYS9pb2F0L3JlZ2lzdGVycy5oICYmCisJOgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICczLXdheSAoMSknICcKKwlzZXR0cmVlIEEtMDAwICYmCisJZ2l0IHJlYWQtdHJlZSAtbSAtdSBPLTAwMCBBLTAwMCBCLTAwMCAmJgorCWNoZWNraW5kZXggPDwtRU9GCisJMyBhL2IKKwkwIGEvYi0yL2MvZAorCTEgYS9iL2MvZAorCTIgYS9iL2MvZAorCTAgYS94CisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzMtd2F5ICgyKScgJworCXNldHRyZWUgQS0wMDEgJiYKKwlnaXQgcmVhZC10cmVlIC1tIC11IE8tMDAwIEEtMDAxIEItMDAwICYmCisJY2hlY2tpbmRleCA8PC1FT0YKKwkzIGEvYgorCTAgYS9iLTIvYy9kCisJMSBhL2IvYy9kCisJMiBhL2IvYy9kCisJMiBhL2IvYy9lCisJMCBhL3gKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMy13YXkgKDMpJyAnCisJc2V0dHJlZSBBLTAxMCAmJgorCWdpdCByZWFkLXRyZWUgLW0gLXUgTy0wMTAgQS0wMTAgQi0wMTAgJiYKKwljaGVja2luZGV4IDw8LUVPRgorCTIgdAorCTEgdC0wCisJMiB0LTAKKwkxIHQvMQorCTMgdC8xCisJMSB0LzIKKwkwIHQ9MworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcyLXdheSAoMSknICcKKwlzZXR0cmVlIE8tMDIwICYmCisJZ2l0IHJlYWQtdHJlZSAtbSAtdSBPLTAyMCBBLTAyMCAmJgorCWNoZWNraW5kZXggPDwtRU9GCisJMCBkcy9kbWEvaW9hdC9NYWtlZmlsZQorCTAgZHMvZG1hL2lvYXQvcmVnaXN0ZXJzLmgKKwlFT0YKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMjAwLXR1dG9yaWFsLnNoIGIvdC90MTIwMC10dXRvcmlhbC5zaAppbmRleCA2N2U2MzdiLi5hYjU1ZWRhIDEwMDc1NQotLS0gYS90L3QxMjAwLXR1dG9yaWFsLnNoCisrKyBiL3QvdDEyMDAtdHV0b3JpYWwuc2gKQEAgLTcsMTQgKzcsMTggQEAKIAogLiAuL3Rlc3QtbGliLnNoCiAKLWVjaG8gIkhlbGxvIFdvcmxkIiA+IGhlbGxvCi1lY2hvICJTaWxseSBleGFtcGxlIiA+IGV4YW1wbGUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jsb2InICAnCisJZWNobyAiSGVsbG8gV29ybGQiID4gaGVsbG8gJiYKKwllY2hvICJTaWxseSBleGFtcGxlIiA+IGV4YW1wbGUgJiYKIAotZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBoZWxsbyBleGFtcGxlCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBoZWxsbyBleGFtcGxlICYmCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jsb2InICJ0ZXN0IGJsb2IgPSBcIiQoZ2l0IGNhdC1maWxlIC10IDU1N2RiMDMpXCIiCisJdGVzdCBibG9iID0gIiQoZ2l0IGNhdC1maWxlIC10IDU1N2RiMDMpIgorJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdibG9iIDU1N2RiMDMnICJ0ZXN0IFwiSGVsbG8gV29ybGRcIiA9IFwiJChnaXQgY2F0LWZpbGUgYmxvYiA1NTdkYjAzKVwiIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxvYiA1NTdkYjAzJyAnCisJdGVzdCAiSGVsbG8gV29ybGQiID0gIiQoZ2l0IGNhdC1maWxlIGJsb2IgNTU3ZGIwMykiCisnCiAKIGVjaG8gIkl0J3MgYSBuZXcgZGF5IGZvciBnaXQiID4+aGVsbG8KIGNhdCA+IGRpZmYuZXhwZWN0IDw8IEVPRgpAQCAtMjYsMjUgKzMwLDM1IEBACiAgSGVsbG8gV29ybGQKICtJdCdzIGEgbmV3IGRheSBmb3IgZ2l0CiBFT0YKLWdpdCBkaWZmLWZpbGVzIC1wID4gZGlmZi5vdXRwdXQKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLWZpbGVzIC1wJyAnY21wIGRpZmYuZXhwZWN0IGRpZmYub3V0cHV0JwotZ2l0IGRpZmYgPiBkaWZmLm91dHB1dAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYnICdjbXAgZGlmZi5leHBlY3QgZGlmZi5vdXRwdXQnCiAKLXRyZWU9JChnaXQgd3JpdGUtdHJlZSAyPi9kZXYvbnVsbCkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLWZpbGVzIC1wJyAnCisJZ2l0IGRpZmYtZmlsZXMgLXAgPiBkaWZmLm91dHB1dCAmJgorCXRlc3RfY21wIGRpZmYuZXhwZWN0IGRpZmYub3V0cHV0CisnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyZWUnICJ0ZXN0IDg5ODhkYTE1ZDA3N2Q0ODI5ZmM1MWQ4NTQ0YzA5N2RlZjY2NDRkYmIgPSAkdHJlZSIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmJyAnCisJZ2l0IGRpZmYgPiBkaWZmLm91dHB1dCAmJgorCXRlc3RfY21wIGRpZmYuZXhwZWN0IGRpZmYub3V0cHV0CisnCiAKLW91dHB1dD0iJChlY2hvICJJbml0aWFsIGNvbW1pdCIgfCBnaXQgY29tbWl0LXRyZWUgJChnaXQgd3JpdGUtdHJlZSkgMj4mMSA+IC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIpIgordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJlZScgJworCXRyZWU9JChnaXQgd3JpdGUtdHJlZSAyPi9kZXYvbnVsbCkKKwl0ZXN0IDg5ODhkYTE1ZDA3N2Q0ODI5ZmM1MWQ4NTQ0YzA5N2RlZjY2NDRkYmIgPSAkdHJlZQorJwogCi1naXQgZGlmZi1pbmRleCAtcCBIRUFEID4gZGlmZi5vdXRwdXQKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLWluZGV4IC1wIEhFQUQnICdjbXAgZGlmZi5leHBlY3QgZGlmZi5vdXRwdXQnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1pbmRleCAtcCBIRUFEJyAnCisJdGVzdF90aWNrICYmCisJdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWNvbW1pdD0kKGVjaG8gIkluaXRpYWwgY29tbWl0IiB8IGdpdCBjb21taXQtdHJlZSAkdHJlZSkgJiYKKwlnaXQgdXBkYXRlLXJlZiBIRUFEICRjb21taXQgJiYKKwlnaXQgZGlmZi1pbmRleCAtcCBIRUFEID4gZGlmZi5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBkaWZmLmV4cGVjdCBkaWZmLm91dHB1dAorJwogCi1naXQgZGlmZiBIRUFEID4gZGlmZi5vdXRwdXQKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIEhFQUQnICdjbXAgZGlmZi5leHBlY3QgZGlmZi5vdXRwdXQnCi0KLSNybSBoZWxsbwotI3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZWFkLXRyZWUgLS1yZXNldCBIRUFEJyAiZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IEhFQUQgOyB0ZXN0IFwiaGVsbG86IG5lZWRzIHVwZGF0ZVwiID0gXCIkKGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoKVwiIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgSEVBRCcgJworCWdpdCBkaWZmIEhFQUQgPiBkaWZmLm91dHB1dCAmJgorCXRlc3RfY21wIGRpZmYuZXhwZWN0IGRpZmYub3V0cHV0CisnCiAKIGNhdCA+IHdoYXRjaGFuZ2VkLmV4cGVjdCA8PCBFT0YKIGNvbW1pdCBWQVJJQUJMRQpAQCAtNjksMzkgKzgzLDQ3IEBACiArSGVsbG8gV29ybGQKIEVPRgogCi1naXQgd2hhdGNoYW5nZWQgLXAgLS1yb290IHwgXAotCXNlZCAtZSAiMXMvXlwoLlx7N1x9XCkuXHs0MFx9L1wxVkFSSUFCTEUvIiBcCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgd2hhdGNoYW5nZWQgLXAgLS1yb290JyAnCisJZ2l0IHdoYXRjaGFuZ2VkIC1wIC0tcm9vdCB8CisJCXNlZCAtZSAiMXMvXlwoLlx7N1x9XCkuXHs0MFx9L1wxVkFSSUFCTEUvIiBcCiAJCS1lICIyLDNzL15cKC5cezhcfVwpLiokL1wxVkFSSUFCTEUvIiBcCi0+IHdoYXRjaGFuZ2VkLm91dHB1dAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHdoYXRjaGFuZ2VkIC1wIC0tcm9vdCcgJ2NtcCB3aGF0Y2hhbmdlZC5leHBlY3Qgd2hhdGNoYW5nZWQub3V0cHV0JworCT4gd2hhdGNoYW5nZWQub3V0cHV0ICYmCisJdGVzdF9jbXAgd2hhdGNoYW5nZWQuZXhwZWN0IHdoYXRjaGFuZ2VkLm91dHB1dAorJwogCi1naXQgdGFnIG15LWZpcnN0LXRhZwotdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHRhZyBteS1maXJzdC10YWcnICdjbXAgLmdpdC9yZWZzL2hlYWRzL21hc3RlciAuZ2l0L3JlZnMvdGFncy9teS1maXJzdC10YWcnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgdGFnIG15LWZpcnN0LXRhZycgJworCWdpdCB0YWcgbXktZmlyc3QtdGFnICYmCisJdGVzdF9jbXAgLmdpdC9yZWZzL2hlYWRzL21hc3RlciAuZ2l0L3JlZnMvdGFncy9teS1maXJzdC10YWcKKycKIAotIyBUT0RPOiB0ZXN0IGdpdCBjbG9uZQotCi1naXQgY2hlY2tvdXQgLWIgbXlicmFuY2gKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjaGVja291dCAtYiBteWJyYW5jaCcgJ2NtcCAuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyIC5naXQvcmVmcy9oZWFkcy9teWJyYW5jaCcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjaGVja291dCAtYiBteWJyYW5jaCcgJworCWdpdCBjaGVja291dCAtYiBteWJyYW5jaCAmJgorCXRlc3RfY21wIC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIgLmdpdC9yZWZzL2hlYWRzL215YnJhbmNoCisnCiAKIGNhdCA+IGJyYW5jaC5leHBlY3QgPDxFT0YKICAgbWFzdGVyCiAqIG15YnJhbmNoCiBFT0YKIAotZ2l0IGJyYW5jaCA+IGJyYW5jaC5vdXRwdXQKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2gnICdjbXAgYnJhbmNoLmV4cGVjdCBicmFuY2gub3V0cHV0JwotCi1naXQgY2hlY2tvdXQgbXlicmFuY2gKLWVjaG8gIldvcmssIHdvcmssIHdvcmsiID4+aGVsbG8KLWdpdCBjb21taXQgLW0gJ1NvbWUgd29yay4nIC1pIGhlbGxvCi0KLWdpdCBjaGVja291dCBtYXN0ZXIKLQotZWNobyAiUGxheSwgcGxheSwgcGxheSIgPj5oZWxsbwotZWNobyAiTG90cyBvZiBmdW4iID4+ZXhhbXBsZQotZ2l0IGNvbW1pdCAtbSAnU29tZSBmdW4uJyAtaSBoZWxsbyBleGFtcGxlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoJyAnCisJZ2l0IGJyYW5jaCA+IGJyYW5jaC5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBicmFuY2guZXhwZWN0IGJyYW5jaC5vdXRwdXQKKycKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlc29sdmUgbm93IGZhaWxzJyAnCisJZ2l0IGNoZWNrb3V0IG15YnJhbmNoICYmCisJZWNobyAiV29yaywgd29yaywgd29yayIgPj5oZWxsbyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIlNvbWUgd29yay4iIC1pIGhlbGxvICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisKKwllY2hvICJQbGF5LCBwbGF5LCBwbGF5IiA+PmhlbGxvICYmCisJZWNobyAiTG90cyBvZiBmdW4iID4+ZXhhbXBsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIlNvbWUgZnVuLiIgLWkgaGVsbG8gZXhhbXBsZSAmJgorCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1tICJNZXJnZSB3b3JrIGluIG15YnJhbmNoIiBteWJyYW5jaAogJwogCkBAIC0xMTIsNTIgKzEzNCwxMzIgQEAKIFdvcmssIHdvcmssIHdvcmsKIEVPRgogCi1naXQgY29tbWl0IC1tICdNZXJnZWQgIm15YnJhbmNoIiBjaGFuZ2VzLicgLWkgaGVsbG8KLQotdGVzdF9kb25lCi0KIGNhdCA+IHNob3ctYnJhbmNoLmV4cGVjdCA8PCBFT0YKLSogW21hc3Rlcl0gTWVyZ2VkICJteWJyYW5jaCIgY2hhbmdlcy4KKyogW21hc3Rlcl0gTWVyZ2Ugd29yayBpbiBteWJyYW5jaAogICEgW215YnJhbmNoXSBTb21lIHdvcmsuCiAtLQotLSAgW21hc3Rlcl0gTWVyZ2VkICJteWJyYW5jaCIgY2hhbmdlcy4KKy0gIFttYXN0ZXJdIE1lcmdlIHdvcmsgaW4gbXlicmFuY2gKICorIFtteWJyYW5jaF0gU29tZSB3b3JrLgorKiAgW21hc3Rlcl5dIFNvbWUgZnVuLgogRU9GCiAKLWdpdCBzaG93LWJyYW5jaCAtLXRvcG8tb3JkZXIgbWFzdGVyIG15YnJhbmNoID4gc2hvdy1icmFuY2gub3V0cHV0Ci10ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc2hvdy1icmFuY2gnICdjbXAgc2hvdy1icmFuY2guZXhwZWN0IHNob3ctYnJhbmNoLm91dHB1dCcKLQotZ2l0IGNoZWNrb3V0IG15YnJhbmNoCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc2hvdy1icmFuY2gnICcKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJNZXJnZSB3b3JrIGluIG15YnJhbmNoIiAtaSBoZWxsbyAmJgorCWdpdCBzaG93LWJyYW5jaCAtLXRvcG8tb3JkZXIgLS1tb3JlPTEgbWFzdGVyIG15YnJhbmNoIFwKKwkJPiBzaG93LWJyYW5jaC5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBzaG93LWJyYW5jaC5leHBlY3Qgc2hvdy1icmFuY2gub3V0cHV0CisnCiAKIGNhdCA+IHJlc29sdmUuZXhwZWN0IDw8IEVPRgotVXBkYXRpbmcgZnJvbSBWQVJJQUJMRSB0byBWQVJJQUJMRQorVXBkYXRpbmcgVkFSSUFCTEUuLlZBUklBQkxFCitGQVNURk9SV0FSRCAobm8gY29tbWl0IGNyZWF0ZWQ7IC1tIG9wdGlvbiBpZ25vcmVkKQogIGV4YW1wbGUgfCAgICAxICsKICBoZWxsbyAgIHwgICAgMSArCiAgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiBFT0YKIAotZ2l0IG1lcmdlIC1zICJNZXJnZSB1cHN0cmVhbSBjaGFuZ2VzLiIgbWFzdGVyIHwgXAotCXNlZCAtZSAiMXMvWzAtOWEtZl1cezQwXH0vVkFSSUFCTEUvZyIgPnJlc29sdmUub3V0cHV0Ci10ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmVzb2x2ZScgJ2NtcCByZXNvbHZlLmV4cGVjdCByZXNvbHZlLm91dHB1dCcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZXNvbHZlJyAnCisJZ2l0IGNoZWNrb3V0IG15YnJhbmNoICYmCisJZ2l0IG1lcmdlIC1tICJNZXJnZSB1cHN0cmVhbSBjaGFuZ2VzLiIgbWFzdGVyIHwKKwkJc2VkIC1lICIxcy9bMC05YS1mXVx7N1x9L1ZBUklBQkxFL2ciIFwKKwkJLWUgInMvXkZhc3RbLSBdZm9yd2FyZCAvRkFTVEZPUldBUkQgLyIgPnJlc29sdmUub3V0cHV0ICYmCisJdGVzdF9jbXAgcmVzb2x2ZS5leHBlY3QgcmVzb2x2ZS5vdXRwdXQKKycKIAogY2F0ID4gc2hvdy1icmFuY2gyLmV4cGVjdCA8PCBFT0YKLSEgW21hc3Rlcl0gTWVyZ2VkICJteWJyYW5jaCIgY2hhbmdlcy4KLSAqIFtteWJyYW5jaF0gTWVyZ2VkICJteWJyYW5jaCIgY2hhbmdlcy4KKyEgW21hc3Rlcl0gTWVyZ2Ugd29yayBpbiBteWJyYW5jaAorICogW215YnJhbmNoXSBNZXJnZSB3b3JrIGluIG15YnJhbmNoCiAtLQotLS0gW21hc3Rlcl0gTWVyZ2VkICJteWJyYW5jaCIgY2hhbmdlcy4KKy0tIFttYXN0ZXJdIE1lcmdlIHdvcmsgaW4gbXlicmFuY2gKIEVPRgogCi1naXQgc2hvdy1icmFuY2ggLS10b3BvLW9yZGVyIG1hc3RlciBteWJyYW5jaCA+IHNob3ctYnJhbmNoMi5vdXRwdXQKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzaG93LWJyYW5jaCcgJ2NtcCBzaG93LWJyYW5jaDIuZXhwZWN0IHNob3ctYnJhbmNoMi5vdXRwdXQnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc2hvdy1icmFuY2ggKHBhcnQgMiknICcKKwlnaXQgc2hvdy1icmFuY2ggLS10b3BvLW9yZGVyIG1hc3RlciBteWJyYW5jaCA+IHNob3ctYnJhbmNoMi5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBzaG93LWJyYW5jaDIuZXhwZWN0IHNob3ctYnJhbmNoMi5vdXRwdXQKKycKIAotIyBUT0RPOiB0ZXN0IGdpdCBmZXRjaAorY2F0ID4gc2hvdy1icmFuY2gzLmV4cGVjdCA8PCBFT0YKKyEgW21hc3Rlcl0gTWVyZ2Ugd29yayBpbiBteWJyYW5jaAorICogW215YnJhbmNoXSBNZXJnZSB3b3JrIGluIG15YnJhbmNoCistLQorLS0gW21hc3Rlcl0gTWVyZ2Ugd29yayBpbiBteWJyYW5jaAorKyogW21hc3Rlcl4yXSBTb21lIHdvcmsuCisrKiBbbWFzdGVyXl0gU29tZSBmdW4uCitFT0YKIAotIyBUT0RPOiB0ZXN0IGdpdCBwdXNoCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc2hvdy1icmFuY2ggKHBhcnQgMyknICcKKwlnaXQgc2hvdy1icmFuY2ggLS10b3BvLW9yZGVyIC0tbW9yZT0yIG1hc3RlciBteWJyYW5jaCBcCisJCT4gc2hvdy1icmFuY2gzLm91dHB1dCAmJgorCXRlc3RfY21wIHNob3ctYnJhbmNoMy5leHBlY3Qgc2hvdy1icmFuY2gzLm91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXdpbmQgdG8gIlNvbWUgZnVuLiIgYW5kICJTb21lIHdvcmsuIicgJworCWdpdCBjaGVja291dCBteWJyYW5jaCAmJgorCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyXjIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXJeCisnCisKK2NhdCA+IHNob3ctYnJhbmNoNC5leHBlY3QgPDwgRU9GCisqIFttYXN0ZXJdIFNvbWUgZnVuLgorICEgW215YnJhbmNoXSBTb21lIHdvcmsuCistLQorKiAgW21hc3Rlcl0gU29tZSBmdW4uCisgKyBbbXlicmFuY2hdIFNvbWUgd29yay4KKyorIFttYXN0ZXJeXSBJbml0aWFsIGNvbW1pdAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzaG93LWJyYW5jaCAocGFydCA0KScgJworCWdpdCBzaG93LWJyYW5jaCAtLXRvcG8tb3JkZXIgPiBzaG93LWJyYW5jaDQub3V0cHV0ICYmCisJdGVzdF9jbXAgc2hvdy1icmFuY2g0LmV4cGVjdCBzaG93LWJyYW5jaDQub3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hbnVhbCBtZXJnZScgJworCW1iPSQoZ2l0IG1lcmdlLWJhc2UgSEVBRCBteWJyYW5jaCkgJiYKKwlnaXQgbmFtZS1yZXYgLS1uYW1lLW9ubHkgLS10YWdzICRtYiA+IG5hbWUtcmV2Lm91dHB1dCAmJgorCXRlc3QgIm15LWZpcnN0LXRhZyIgPSAkKGNhdCBuYW1lLXJldi5vdXRwdXQpICYmCisKKwlnaXQgcmVhZC10cmVlIC1tIC11ICRtYiBIRUFEIG15YnJhbmNoCisnCisKK2NhdCA+IGxzLWZpbGVzLmV4cGVjdCA8PCBFT0YKKzEwMDY0NCA3ZjhiMTQxYjY1ZmRjZWU0NzMyMWUzOTlhMjU5OGEyMzVhMDMyNDIyIDAJZXhhbXBsZQorMTAwNjQ0IDU1N2RiMDNkZTk5N2M4NmE0YTAyOGUxZWJkM2ExY2ViMjI1YmUyMzggMQloZWxsbworMTAwNjQ0IGJhNDJhMmE5NmUzMDI3ZjMzMzNlMTNlZGU0Y2NmNDQ5OGMzYWU5NDIgMgloZWxsbworMTAwNjQ0IGNjNDRjNzNlYjc4MzU2NWRhNTgzMWI0ZDgyMGM5NjI5NTQwMTliNjkgMwloZWxsbworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy1maWxlcyAtLXN0YWdlJyAnCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPiBscy1maWxlcy5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBscy1maWxlcy5leHBlY3QgbHMtZmlsZXMub3V0cHV0CisnCisKK2NhdCA+IGxzLWZpbGVzLXVubWVyZ2VkLmV4cGVjdCA8PCBFT0YKKzEwMDY0NCA1NTdkYjAzZGU5OTdjODZhNGEwMjhlMWViZDNhMWNlYjIyNWJlMjM4IDEJaGVsbG8KKzEwMDY0NCBiYTQyYTJhOTZlMzAyN2YzMzMzZTEzZWRlNGNjZjQ0OThjM2FlOTQyIDIJaGVsbG8KKzEwMDY0NCBjYzQ0YzczZWI3ODM1NjVkYTU4MzFiNGQ4MjBjOTYyOTU0MDE5YjY5IDMJaGVsbG8KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtZmlsZXMgLS11bm1lcmdlZCcgJworCWdpdCBscy1maWxlcyAtLXVubWVyZ2VkID4gbHMtZmlsZXMtdW5tZXJnZWQub3V0cHV0ICYmCisJdGVzdF9jbXAgbHMtZmlsZXMtdW5tZXJnZWQuZXhwZWN0IGxzLWZpbGVzLXVubWVyZ2VkLm91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtbWVyZ2UtaW5kZXgnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtaW5kZXggZ2l0LW1lcmdlLW9uZS1maWxlIGhlbGxvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy1maWxlcyAtLXN0YWdlIChwYXJ0IDIpJyAnCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPiBscy1maWxlcy5vdXRwdXQyICYmCisJdGVzdF9jbXAgbHMtZmlsZXMuZXhwZWN0IGxzLWZpbGVzLm91dHB1dDIKKycKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlcGFjaycgJ2dpdCByZXBhY2snCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHJ1bmUtcGFja2VkJyAnZ2l0IHBydW5lLXBhY2tlZCcKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0+IG9ubHkgcGFja2VkIG9iamVjdHMnICcKLQkhIGZpbmQgLXR5cGUgZiAuZ2l0L29iamVjdHMvWzAtOWEtZl1bMC05YS1mXQorCWdpdCBwcnVuZSAmJiAjIFJlbW92ZSBjb25mbGljdCBtYXJrZWQgYmxvYnMKKwl0ZXN0ICQoZmluZCAuZ2l0L29iamVjdHMvWzAtOWEtZl1bMC05YS1mXSAtdHlwZSBmIC1wcmludCAyPi9kZXYvbnVsbCB8IHdjIC1sKSA9IDAKICcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMzAwLXJlcG8tY29uZmlnLnNoIGIvdC90MTMwMC1yZXBvLWNvbmZpZy5zaAppbmRleCA5MWNiZDU1Li5mMTFmOThjIDEwMDc1NQotLS0gYS90L3QxMzAwLXJlcG8tY29uZmlnLnNoCisrKyBiL3QvdDEzMDAtcmVwby1jb25maWcuc2gKQEAgLTM5OCw2ICszOTgsMTcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsdGVybmF0aXZlIEdJVF9DT05GSUcgKC0tZmlsZSknIFwKIAknZ2l0IGNvbmZpZyAtLWZpbGUgb3RoZXItY29uZmlnIC1sID4gb3V0cHV0ICYmIGNtcCBvdXRwdXQgZXhwZWN0JwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZlciBjb25maWcgZnJvbSBzdWJkaXJlY3RvcnknICcKKwlta2RpciB4ICYmCisJKAorCQljZCB4ICYmCisJCWVjaG8gc3RyYXNzZSA+ZXhwZWN0CisJCWdpdCBjb25maWcgLS1nZXQgLS1maWxlIC4uL290aGVyLWNvbmZpZyBlaW4uYmFobiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisKKycKKwogR0lUX0NPTkZJRz1vdGhlci1jb25maWcgZ2l0IGNvbmZpZyBhbndvaG5lci5wYXJrIGF1c3dlaXMKIAogY2F0ID4gZXhwZWN0IDw8IEVPRgpAQCAtNDYwLDYgKzQ3MSwyOCBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAicmVuYW1lIHN1Y2NlZWRlZCIgInRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZyIKIAogY2F0ID4+IC5naXQvY29uZmlnIDw8IEVPRgorW2JyYW5jaCAidmllciJdIHogPSAxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicmVuYW1lIGEgc2VjdGlvbiB3aXRoIGEgdmFyIG9uIHRoZSBzYW1lIGxpbmUiIFwKKwknZ2l0IGNvbmZpZyAtLXJlbmFtZS1zZWN0aW9uIGJyYW5jaC52aWVyIGJyYW5jaC56d2VpJworCitjYXQgPiBleHBlY3QgPDwgRU9GCisjIEhhbGxvCisJI0JlbGxvCitbYnJhbmNoICJ6d2VpIl0KKwl4ID0gMQorW2JyYW5jaCAiendlaSJdCisJeSA9IDEKK1ticmFuY2ggImRyZWkiXQord2VpcmQKK1ticmFuY2ggInp3ZWkiXQorCXogPSAxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicmVuYW1lIHN1Y2NlZWRlZCIgInRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZyIKKworY2F0ID4+IC5naXQvY29uZmlnIDw8IEVPRgogICBbYnJhbmNoICJ6d2VpIl0gYSA9IDEgW2JyYW5jaCAidmllciJdCiBFT0YKIApAQCAtNjYxLDYgKzY5NCwzNCBAQAogCiBybSAuZ2l0L2NvbmZpZwogCitjYXQgPmV4cGVjdCA8PFxFT0YKK1twYXRoXQorCWhvbWUgPSB+LworCW5vcm1hbCA9IC9kZXYvbnVsbAorCXRyYWlsaW5ndGlsZGUgPSBmb29+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IC0tcGF0aCcgJworCWdpdCBjb25maWcgLS1wYXRoIHBhdGguaG9tZSAifi8iICYmCisJZ2l0IGNvbmZpZyAtLXBhdGggcGF0aC5ub3JtYWwgIi9kZXYvbnVsbCIgJiYKKwlnaXQgY29uZmlnIC0tcGF0aCBwYXRoLnRyYWlsaW5ndGlsZGUgImZvb34iICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnJworCitjYXQgPmV4cGVjdCA8PEVPRgorJEhPTUUvCisvZGV2L251bGwKK2Zvb34KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQgLS1wYXRoJyAnCisJZ2l0IGNvbmZpZyAtLWdldCAtLXBhdGggcGF0aC5ob21lID4gcmVzdWx0ICYmCisJZ2l0IGNvbmZpZyAtLWdldCAtLXBhdGggcGF0aC5ub3JtYWwgPj4gcmVzdWx0ICYmCisJZ2l0IGNvbmZpZyAtLWdldCAtLXBhdGggcGF0aC50cmFpbGluZ3RpbGRlID4+IHJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdCByZXN1bHQKKycKKworcm0gLmdpdC9jb25maWcKKwogZ2l0IGNvbmZpZyBxdW90ZS5sZWFkaW5nICIgdGVzdCIKIGdpdCBjb25maWcgcXVvdGUuZW5kaW5nICJ0ZXN0ICIKIGdpdCBjb25maWcgcXVvdGUuc2VtaWNvbG9uICJ0ZXN0O3Rlc3QiCmRpZmYgLS1naXQgYS90L3QxMzA0LWRlZmF1bHQtYWNsLnNoIGIvdC90MTMwNC1kZWZhdWx0LWFjbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jYzMwYmU0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTMwNC1kZWZhdWx0LWFjbC5zaApAQCAtMCwwICsxLDY3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIE1hdHRoaWV1IE1veQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHJlcG9zaXRvcnkgd2l0aCBkZWZhdWx0IEFDTCcKKworIyBDcmVhdGUgdGhlIHRlc3QgcmVwbyB3aXRoIHJlc3RyaWN0aXZlIHVtYXNrCisjID0+IHRoaXMgbXVzdCBjb21lIGJlZm9yZSAuIC4vdGVzdC1saWIuc2gKK3VtYXNrIDA3NworCisuIC4vdGVzdC1saWIuc2gKKworIyBXZSBuZWVkIGFuIGFyYml0cmFyeSBvdGhlciB1c2VyIGdpdmUgcGVybWlzc2lvbiB0byB1c2luZyBBQ0xzLiByb290CisjIGlzIGEgZ29vZCBjYW5kaWRhdGU6IGV4aXN0cyBvbiBhbGwgdW5pY2VzLCBhbmQgaXQgaGFzIHBlcm1pc3Npb24KKyMgYW55d2F5LCBzbyB3ZSBkb24ndCBjcmVhdGUgYSBzZWN1cml0eSBob2xlIHJ1bm5pbmcgdGhlIHRlc3RzdWl0ZS4KKworaWYgISBzZXRmYWNsIC1tIHU6cm9vdDpyd3ggLjsgdGhlbgorICAgIHNheSAiU2tpcHBpbmcgQUNMIHRlc3RzOiB1bmFibGUgdG8gdXNlIHNldGZhY2wiCisgICAgdGVzdF9kb25lCitmaQorCittb2RlYml0cyAoKSB7CisJbHMgLWwgIiQxIiB8IHNlZCAtZSAnc3xeXCguLi4uLi4uLi4uXCkuKnxcMXwnCit9CisKK2NoZWNrX3Blcm1zX2FuZF9hY2wgKCkgeworCWFjdHVhbD0kKG1vZGViaXRzICIkMSIpICYmCisJY2FzZSAiJGFjdHVhbCIgaW4KKwktci0tci0tLS0tKikKKwkJOiBoYXBweQorCQk7OworCSopCisJCWVjaG8gIkdvdCBwZXJtaXNzaW9uICckYWN0dWFsJywgZXhwZWN0ZWQgJy1yLS1yLS0tLS0nIgorCQlmYWxzZQorCQk7OworCWVzYWMgJiYKKwlnZXRmYWNsICIkMSIgPiBhY3R1YWwgJiYKKwlncmVwIC1xICJ1c2VyOnJvb3Q6cnd4IiBhY3R1YWwgJiYKKwlncmVwIC1xICJ1c2VyOiR7TE9HTkFNRX06cnd4IiBhY3R1YWwgJiYKKwlncmVwIC1xICJtYXNrOjpyLS0iIGFjdHVhbCAmJgorCWdyZXAgLXEgImdyb3VwOjotLS0iIGFjdHVhbCB8fCBmYWxzZQorfQorCitkaXJzX3RvX3NldD0iLi8gLmdpdC8gLmdpdC9vYmplY3RzLyAuZ2l0L29iamVjdHMvcGFjay8iCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1NldHVwIHRlc3QgcmVwbycgJworCXNldGZhY2wgLW0gdTpyb290OnJ3eCAgICAgICAgICAkZGlyc190b19zZXQgJiYKKwlzZXRmYWNsIC1kIC1tIHU6IiRMT0dOQU1FIjpyd3ggJGRpcnNfdG9fc2V0ICYmCisJc2V0ZmFjbCAtZCAtbSB1OnJvb3Q6cnd4ICAgICAgICRkaXJzX3RvX3NldCAmJgorCisJdG91Y2ggZmlsZS50eHQgJiYKKwlnaXQgYWRkIGZpbGUudHh0ICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT2JqZWN0cyBjcmVhdGlvbiBkb2VzIG5vdCBicmVhayBBQ0xzIHdpdGggcmVzdHJpY3RpdmUgdW1hc2snICcKKwkjIFNIQTEgZm9yIGVtcHR5IGJsb2IKKwljaGVja19wZXJtc19hbmRfYWNsIC5naXQvb2JqZWN0cy9lNi85ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZ2MgZG9lcyBub3QgYnJlYWsgQUNMcyB3aXRoIHJlc3RyaWN0aXZlIHVtYXNrJyAnCisJZ2l0IGdjICYmCisJY2hlY2tfcGVybXNfYW5kX2FjbCAuZ2l0L29iamVjdHMvcGFjay8qLnBhY2sKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDAyLWNoZWNrLXJlZi1mb3JtYXQuc2ggYi90L3QxNDAyLWNoZWNrLXJlZi1mb3JtYXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWI0NWFmYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE0MDItY2hlY2stcmVmLWZvcm1hdC5zaApAQCAtMCwwICsxLDYxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBnaXQgY2hlY2stcmVmLWZvcm1hdCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3ZhbGlkX3JlZigpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWYgbmFtZSAnJDEnIGlzIHZhbGlkIiBcCisJCSJnaXQgY2hlY2stcmVmLWZvcm1hdCAnJDEnIgorfQoraW52YWxpZF9yZWYoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmVmIG5hbWUgJyQxJyBpcyBub3QgdmFsaWQiIFwKKwkJInRlc3RfbXVzdF9mYWlsIGdpdCBjaGVjay1yZWYtZm9ybWF0ICckMSciCit9CisKK3ZhbGlkX3JlZiAnaGVhZHMvZm9vJworaW52YWxpZF9yZWYgJ2ZvbycKK3ZhbGlkX3JlZiAnZm9vL2Jhci9iYXonCit2YWxpZF9yZWYgJ3JlZnMvLy9oZWFkcy9mb28nCitpbnZhbGlkX3JlZiAnaGVhZHMvZm9vLycKK2ludmFsaWRfcmVmICcuL2ZvbycKK2ludmFsaWRfcmVmICcucmVmcy9mb28nCitpbnZhbGlkX3JlZiAnaGVhZHMvZm9vLi5iYXInCitpbnZhbGlkX3JlZiAnaGVhZHMvZm9vP2JhcicKK3ZhbGlkX3JlZiAnZm9vLi9iYXInCitpbnZhbGlkX3JlZiAnaGVhZHMvZm9vLmxvY2snCit2YWxpZF9yZWYgJ2hlYWRzL2Zvb0BiYXInCitpbnZhbGlkX3JlZiAnaGVhZHMvdkB7YXRpb24nCitpbnZhbGlkX3JlZiAnaGVhZHMvZm9vXGJhcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiY2hlY2stcmVmLWZvcm1hdCAtLWJyYW5jaCBAey0xfSIgJworCVQ9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlzaGExPSQoZWNobyBBIHwgZ2l0IGNvbW1pdC10cmVlICRUKSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvbWFzdGVyICRzaGExICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgJHNoYTEKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IG9yaWdpbi9tYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJcmVmbmFtZT0kKGdpdCBjaGVjay1yZWYtZm9ybWF0IC0tYnJhbmNoIEB7LTF9KSAmJgorCXRlc3QgIiRyZWZuYW1lIiA9ICIkc2hhMSIgJiYKKwlyZWZuYW1lMj0kKGdpdCBjaGVjay1yZWYtZm9ybWF0IC0tYnJhbmNoIEB7LTJ9KSAmJgorCXRlc3QgIiRyZWZuYW1lMiIgPSBtYXN0ZXInCisKK3ZhbGlkX3JlZl9ub3JtYWxpemVkKCkgeworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlZiBuYW1lICckMScgc2ltcGxpZmllcyB0byAnJDInIiAiCisJCXJlZm5hbWU9XCQoZ2l0IGNoZWNrLXJlZi1mb3JtYXQgLS1wcmludCAnJDEnKSAmJgorCQl0ZXN0IFwiXCRyZWZuYW1lXCIgPSAnJDInIgorfQoraW52YWxpZF9yZWZfbm9ybWFsaXplZCgpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVjay1yZWYtZm9ybWF0IC0tcHJpbnQgcmVqZWN0cyAnJDEnIiAiCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVjay1yZWYtZm9ybWF0IC0tcHJpbnQgJyQxJyIKK30KKwordmFsaWRfcmVmX25vcm1hbGl6ZWQgJ2hlYWRzL2ZvbycgJ2hlYWRzL2ZvbycKK3ZhbGlkX3JlZl9ub3JtYWxpemVkICdyZWZzLy8vaGVhZHMvZm9vJyAncmVmcy9oZWFkcy9mb28nCitpbnZhbGlkX3JlZl9ub3JtYWxpemVkICdmb28nCitpbnZhbGlkX3JlZl9ub3JtYWxpemVkICdoZWFkcy9mb28vLi4vYmFyJworaW52YWxpZF9yZWZfbm9ybWFsaXplZCAnaGVhZHMvLi9mb28nCitpbnZhbGlkX3JlZl9ub3JtYWxpemVkICdoZWFkc1xmb28nCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTQxMC1yZWZsb2cuc2ggYi90L3QxNDEwLXJlZmxvZy5zaAppbmRleCA4MGFmNmI5Li4yNTA0NmM0IDEwMDc1NQotLS0gYS90L3QxNDEwLXJlZmxvZy5zaAorKysgYi90L3QxNDEwLXJlZmxvZy5zaApAQCAtMjE0LDQgKzIxNCw0NSBAQAogCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jld2luZDInICcKKworCXRlc3RfdGljayAmJiBnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MiAmJgorCWxvZ2xlbj0kKHdjIC1sIDwuZ2l0L2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJdGVzdCAkbG9nbGVuID0gNAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZXhwaXJlPW5ldmVyJyAnCisKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLXZlcmJvc2UgXAorCQktLWV4cGlyZT1uZXZlciBcCisJCS0tZXhwaXJlLXVucmVhY2hhYmxlPW5ldmVyIFwKKwkJLS1hbGwgJiYKKwlsb2dsZW49JCh3YyAtbCA8LmdpdC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyKSAmJgorCXRlc3QgJGxvZ2xlbiA9IDQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYy5yZWZsb2dleHBpcmU9bmV2ZXInICcKKworCWdpdCBjb25maWcgZ2MucmVmbG9nZXhwaXJlIG5ldmVyICYmCisJZ2l0IGNvbmZpZyBnYy5yZWZsb2dleHBpcmV1bnJlYWNoYWJsZSBuZXZlciAmJgorCWdpdCByZWZsb2cgZXhwaXJlIC0tdmVyYm9zZSAtLWFsbCAmJgorCWxvZ2xlbj0kKHdjIC1sIDwuZ2l0L2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJdGVzdCAkbG9nbGVuID0gNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYy5yZWZsb2dleHBpcmU9ZmFsc2UnICcKKworCWdpdCBjb25maWcgZ2MucmVmbG9nZXhwaXJlIGZhbHNlICYmCisJZ2l0IGNvbmZpZyBnYy5yZWZsb2dleHBpcmV1bnJlYWNoYWJsZSBmYWxzZSAmJgorCWdpdCByZWZsb2cgZXhwaXJlIC0tdmVyYm9zZSAtLWFsbCAmJgorCWxvZ2xlbj0kKHdjIC1sIDwuZ2l0L2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJdGVzdCAkbG9nbGVuID0gNCAmJgorCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGdjLnJlZmxvZ2V4cGlyZSAmJgorCWdpdCBjb25maWcgLS11bnNldCBnYy5yZWZsb2dleHBpcmV1bnJlYWNoYWJsZQorCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTQxMS1yZWZsb2ctc2hvdy5zaCBiL3QvdDE0MTEtcmVmbG9nLXNob3cuc2gKaW5kZXggYzE4ZWQ4ZS4uYmEyNWZmMyAxMDA3NTUKLS0tIGEvdC90MTQxMS1yZWZsb2ctc2hvdy5zaAorKysgYi90L3QxNDExLXJlZmxvZy1zaG93LnNoCkBAIC02NCw0ICs2NCwxMyBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAorOiA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSByZWZsb2cgZmlsZScgJworCWdpdCBicmFuY2ggZW1wdHkgJiYKKwk6ID4uZ2l0L2xvZ3MvcmVmcy9oZWFkcy9lbXB0eSAmJgorCisJZ2l0IGxvZyAtZyBlbXB0eSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE0NTAtZnNjay5zaCBiL3QvdDE0NTAtZnNjay5zaAppbmRleCBhMjI2MzJmLi40OWNhZTNlIDEwMDc1NQotLS0gYS90L3QxNDUwLWZzY2suc2gKKysrIGIvdC90MTQ1MC1mc2NrLnNoCkBAIC02NiwxMiArNjYsMTIgQEAKIFRoaXMgaXMgYW4gaW52YWxpZCB0YWcuCiBFT0YKIAotdGVzdF9leHBlY3RfZmFpbHVyZSAndGFnIHBvaW50aW5nIHRvIG5vbmV4aXN0ZW50JyAnCi0JdGFnPSQoZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4gPCBpbnZhbGlkLXRhZykgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RhZyBwb2ludGluZyB0byBub25leGlzdGVudCcgJworCXRhZz0kKGdpdCBoYXNoLW9iamVjdCAtdCB0YWcgLXcgLS1zdGRpbiA8IGludmFsaWQtdGFnKSAmJgogCWVjaG8gJHRhZyA+IC5naXQvcmVmcy90YWdzL2ludmFsaWQgJiYKLQlnaXQgZnNjayAtLXRhZ3MgMj5vdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAtLXRhZ3MgPm91dCAmJgogCWNhdCBvdXQgJiYKLQlncmVwICJjb3VsZCBub3QgbG9hZCB0YWdnZWQgb2JqZWN0IiBvdXQgJiYKKwlncmVwICJicm9rZW4gbGluayIgb3V0ICYmCiAJcm0gLmdpdC9yZWZzL3RhZ3MvaW52YWxpZAogJwogCkBAIC04NCwxMiArODQsMTIgQEAKIFRoaXMgaXMgYW4gaW52YWxpZCB0YWcuCiBFT0YKIAotdGVzdF9leHBlY3RfZmFpbHVyZSAndGFnIHBvaW50aW5nIHRvIHNvbWV0aGluZyBlbHNlIHRoYW4gaXRzIHR5cGUnICcKLQl0YWc9JChnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbiA8IHdyb25nLXRhZykgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RhZyBwb2ludGluZyB0byBzb21ldGhpbmcgZWxzZSB0aGFuIGl0cyB0eXBlJyAnCisJdGFnPSQoZ2l0IGhhc2gtb2JqZWN0IC10IHRhZyAtdyAtLXN0ZGluIDwgd3JvbmctdGFnKSAmJgogCWVjaG8gJHRhZyA+IC5naXQvcmVmcy90YWdzL3dyb25nICYmCi0JZ2l0IGZzY2sgLS10YWdzIDI+b3V0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgLS10YWdzIDI+b3V0ICYmCiAJY2F0IG91dCAmJgotCWdyZXAgInNvbWUgc2FuZSBlcnJvciBtZXNzYWdlIiBvdXQgJiYKKwlncmVwICJlcnJvciBpbiB0YWcuKmJyb2tlbiBsaW5rcyIgb3V0ICYmCiAJcm0gLmdpdC9yZWZzL3RhZ3Mvd3JvbmcKICcKIApkaWZmIC0tZ2l0IGEvdC90MTUwMS13b3JrdHJlZS5zaCBiL3QvdDE1MDEtd29ya3RyZWUuc2gKaW5kZXggZjZhNmY4My4uOWRmMzAxMiAxMDA3NTUKLS0tIGEvdC90MTUwMS13b3JrdHJlZS5zaAorKysgYi90L3QxNTAxLXdvcmt0cmVlLnNoCkBAIC0xNzQsNCArMTc0LDI1IEBACiAJR0lUX0RJUj0uLi8uLiBHSVRfV09SS19UUkVFPS4uIGdpdCBncmVwIC1sIGNoYW5nZWQgfCBncmVwIGRpci90cmFja2VkKQogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY29tbWl0JyAnCisJKAorCQljZCByZXBvLmdpdCAmJgorCQlHSVRfRElSPS4gR0lUX1dPUktfVFJFRT13b3JrIGdpdCBjb21taXQgLWEgLW0gZG9uZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJzb2x1dGUgcGF0aHNwZWMgc2hvdWxkIGZhaWwgZ3JhY2VmdWxseScgJworCSgKKwkJY2QgcmVwby5naXQgfHwgZXhpdCAxCisJCWdpdCBjb25maWcgLS11bnNldCBjb3JlLndvcmt0cmVlCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgSEVBRCAtLSAvaG9tZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZV9yZWxhdGl2ZV9wYXRoIGhhbmRsZXMgZG91YmxlIHNsYXNoZXMgaW4gR0lUX0RJUicgJworCTogPiBkdW1teV9maWxlCisJZWNobyBnaXQgLS1naXQtZGlyPSIkKHB3ZCkvL3JlcG8uZ2l0IiAtLXdvcmstdHJlZT0iJChwd2QpIiBhZGQgZHVtbXlfZmlsZSAmJgorCWdpdCAtLWdpdC1kaXI9IiQocHdkKS8vcmVwby5naXQiIC0td29yay10cmVlPSIkKHB3ZCkiIGFkZCBkdW1teV9maWxlCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTUwMi1yZXYtcGFyc2UtcGFyc2VvcHQuc2ggYi90L3QxNTAyLXJldi1wYXJzZS1wYXJzZW9wdC5zaAppbmRleCA5OTcwMDJkLi5lNTA0MDU4IDEwMDc1NQotLS0gYS90L3QxNTAyLXJldi1wYXJzZS1wYXJzZW9wdC5zaAorKysgYi90L3QxNTAyLXJldi1wYXJzZS1wYXJzZW9wdC5zaApAQCAtMjAsOCArMjAsNyBAQAogCiBFT0YKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXBhcnNlb3B0IGhlbHAgb3V0cHV0JyAnCi0JZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0tIC1oIDI+IG91dHB1dC5lcnIgPDxFT0YKK2NhdCA+IG9wdGlvbnNwZWMgPDwgRU9GCiBzb21lLWNvbW1hbmQgW29wdGlvbnNdIDxhcmdzPi4uLgogCiBzb21lLWNvbW1hbmQgZG9lcyBmb28gYW5kIGJhciEKQEAgLTM3LDcgKzM2LDQ3IEBACiBFeHRyYXMKIGV4dHJhMSAgICBsaW5lIGFib3ZlIHVzZWQgdG8gY2F1c2UgYSBzZWdmYXVsdCBidXQgbm8gbG9uZ2VyIGRvZXMKIEVPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tcGFyc2VvcHQgaGVscCBvdXRwdXQnICcKKwlnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS0gLWggMj4gb3V0cHV0LmVyciA8IG9wdGlvbnNwZWMKIAl0ZXN0X2NtcCBleHBlY3QuZXJyIG91dHB1dC5lcnIKICcKIAorY2F0ID4gZXhwZWN0IDw8RU9GCitzZXQgLS0gLS1mb28gLS1iYXIgJ2hhbScgLS0gJ2FyZycKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tcGFyc2VvcHQnICcKKwlnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS0gLS1mb28gLS1iYXI9aGFtIGFyZyA8IG9wdGlvbnNwZWMgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1wYXJzZW9wdCB3aXRoIG1peGVkIG9wdGlvbnMgYW5kIGFyZ3VtZW50cycgJworCWdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLSAtLWZvbyBhcmcgLS1iYXI9aGFtIDwgb3B0aW9uc3BlYyA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID4gZXhwZWN0IDw8RU9GCitzZXQgLS0gLS1mb28gLS0gJ2FyZycgJy0tYmFyPWhhbScKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tcGFyc2VvcHQgd2l0aCAtLScgJworCWdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLSAtLWZvbyAtLSBhcmcgLS1iYXI9aGFtIDwgb3B0aW9uc3BlYyA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXBhcnNlb3B0IC0tc3RvcC1hdC1ub24tb3B0aW9uJyAnCisJZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0tc3RvcC1hdC1ub24tb3B0aW9uIC0tIC0tZm9vIGFyZyAtLWJhcj1oYW0gPCBvcHRpb25zcGVjID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPiBleHBlY3QgPDxFT0YKK3NldCAtLSAtLWZvbyAtLSAnLS0nICdhcmcnICctLWJhcj1oYW0nCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXBhcnNlb3B0IC0ta2VlcC1kYXNoZGFzaCcgJworCWdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLWtlZXAtZGFzaGRhc2ggLS0gLS1mb28gLS0gYXJnIC0tYmFyPWhhbSA8IG9wdGlvbnNwZWMgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTUwNi1yZXYtcGFyc2UtZGlhZ25vc2lzLnNoIGIvdC90MTUwNi1yZXYtcGFyc2UtZGlhZ25vc2lzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFmNzIxZjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTA2LXJldi1wYXJzZS1kaWFnbm9zaXMuc2gKQEAgLTAsMCArMSw2OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZ2l0IHJldi1wYXJzZSBkaWFnbm9zaXMgZm9yIGludmFsaWQgYXJndW1lbnQnCisKK2V4ZWMgPC9kZXYvbnVsbAorCisuIC4vdGVzdC1saWIuc2gKKworSEFTSF9maWxlPQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgYmFzaWMgcmVwbycgJworCWVjaG8gb25lID4gZmlsZS50eHQgJiYKKwlta2RpciBzdWJkaXIgJiYKKwllY2hvIHR3byA+IHN1YmRpci9maWxlLnR4dCAmJgorCWVjaG8gdGhyZWUgPiBzdWJkaXIvZmlsZTIudHh0ICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0ICYmCisJZWNobyBmb3VyID4gaW5kZXgtb25seS50eHQgJiYKKwlnaXQgYWRkIGluZGV4LW9ubHkudHh0ICYmCisJZWNobyBmaXZlID4gZGlzay1vbmx5LnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3JyZWN0IGZpbGUgb2JqZWN0cycgJworCUhBU0hfZmlsZT0kKGdpdCByZXYtcGFyc2UgSEVBRDpmaWxlLnR4dCkgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQ6c3ViZGlyL2ZpbGUudHh0ICYmCisJZ2l0IHJldi1wYXJzZSA6aW5kZXgtb25seS50eHQgJiYKKwkoY2Qgc3ViZGlyICYmCisJIGdpdCByZXYtcGFyc2UgSEVBRDpzdWJkaXIvZmlsZTIudHh0ICYmCisJIHRlc3QgJEhBU0hfZmlsZSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEOmZpbGUudHh0KSAmJgorCSB0ZXN0ICRIQVNIX2ZpbGUgPSAkKGdpdCByZXYtcGFyc2UgOmZpbGUudHh0KSAmJgorCSB0ZXN0ICRIQVNIX2ZpbGUgPSAkKGdpdCByZXYtcGFyc2UgOjA6ZmlsZS50eHQpICkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jb3JyZWN0IHJldmlzaW9uIGlkJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBmb29iYXI6ZmlsZS50eHQgMj5lcnJvciAmJgorCWdyZXAgIkludmFsaWQgb2JqZWN0IG5hbWUgJyInIidmb29iYXInIiciJy4iIGVycm9yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBmb29iYXIgMj4gZXJyb3IgJiYKKwlncmVwICJ1bmtub3duIHJldmlzaW9uIG9yIHBhdGggbm90IGluIHRoZSB3b3JraW5nIHRyZWUuIiBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmNvcnJlY3QgZmlsZSBpbiBzaGExOnBhdGgnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQUQ6bm90aGluZy50eHQgMj4gZXJyb3IgJiYKKwlncmVwICJmYXRhbDogUGF0aCAnIiciJ25vdGhpbmcudHh0JyInIicgZG9lcyBub3QgZXhpc3QgaW4gJyInIidIRUFEJyInIiciIGVycm9yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOmluZGV4LW9ubHkudHh0IDI+IGVycm9yICYmCisJZ3JlcCAiZmF0YWw6IFBhdGggJyInIidpbmRleC1vbmx5LnR4dCciJyInIGV4aXN0cyBvbiBkaXNrLCBidXQgbm90IGluICciJyInSEVBRCciJyInLiIgZXJyb3IgJiYKKwkoY2Qgc3ViZGlyICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRDpmaWxlMi50eHQgMj4gZXJyb3IgJiYKKwkgZ3JlcCAiRGlkIHlvdSBtZWFuICciJyInSEVBRDpzdWJkaXIvZmlsZTIudHh0JyInIic/IiBlcnJvciApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luY29ycmVjdCBmaWxlIGluIDpwYXRoIGFuZCA6TjpwYXRoJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSA6bm90aGluZy50eHQgMj4gZXJyb3IgJiYKKwlncmVwICJmYXRhbDogUGF0aCAnIiciJ25vdGhpbmcudHh0JyInIicgZG9lcyBub3QgZXhpc3QgKG5laXRoZXIgb24gZGlzayBub3IgaW4gdGhlIGluZGV4KS4iIGVycm9yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSA6MTpub3RoaW5nLnR4dCAyPiBlcnJvciAmJgorCWdyZXAgIlBhdGggJyInIidub3RoaW5nLnR4dCciJyInIGRvZXMgbm90IGV4aXN0IChuZWl0aGVyIG9uIGRpc2sgbm9yIGluIHRoZSBpbmRleCkuIiBlcnJvciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgOjE6ZmlsZS50eHQgMj4gZXJyb3IgJiYKKwlncmVwICJEaWQgeW91IG1lYW4gJyInIic6MDpmaWxlLnR4dCciJyInPyIgZXJyb3IgJiYKKwkoY2Qgc3ViZGlyICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgOjE6ZmlsZS50eHQgMj4gZXJyb3IgJiYKKwkgZ3JlcCAiRGlkIHlvdSBtZWFuICciJyInOjA6ZmlsZS50eHQnIiciJz8iIGVycm9yICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgOmZpbGUyLnR4dCAyPiBlcnJvciAmJgorCSBncmVwICJEaWQgeW91IG1lYW4gJyInIic6MDpzdWJkaXIvZmlsZTIudHh0JyInIic/IiBlcnJvciAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIDoyOmZpbGUyLnR4dCAyPiBlcnJvciAmJgorCSBncmVwICJEaWQgeW91IG1lYW4gJyInIic6MDpzdWJkaXIvZmlsZTIudHh0JyInIic/IiBlcnJvcikgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIDpkaXNrLW9ubHkudHh0IDI+IGVycm9yICYmCisJZ3JlcCAiZmF0YWw6IFBhdGggJyInIidkaXNrLW9ubHkudHh0JyInIicgZXhpc3RzIG9uIGRpc2ssIGJ1dCBub3QgaW4gdGhlIGluZGV4LiIgZXJyb3IKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNTA3LXJldi1wYXJzZS11cHN0cmVhbS5zaCBiL3QvdDE1MDctcmV2LXBhcnNlLXVwc3RyZWFtLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhjOGRmZGEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTA3LXJldi1wYXJzZS11cHN0cmVhbS5zaApAQCAtMCwwICsxLDEzOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgPGJyYW5jaD5Ae3Vwc3RyZWFtfSBzeW50YXgnCisKKy4gLi90ZXN0LWxpYi5zaAorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisKKwl0ZXN0X2NvbW1pdCAxICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgJiYKKwl0ZXN0X2NvbW1pdCAyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjbG9uZSAuIGNsb25lICYmCisJdGVzdF9jb21taXQgMyAmJgorCShjZCBjbG9uZSAmJgorCSB0ZXN0X2NvbW1pdCA0ICYmCisJIGdpdCBicmFuY2ggLS10cmFjayBteS1zaWRlIG9yaWdpbi9zaWRlKQorCisnCisKK2Z1bGxfbmFtZSAoKSB7CisJKGNkIGNsb25lICYmCisJIGdpdCByZXYtcGFyc2UgLS1zeW1ib2xpYy1mdWxsLW5hbWUgIiRAIikKK30KKworY29tbWl0X3N1YmplY3QgKCkgeworCShjZCBjbG9uZSAmJgorCSBnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6JXMgIiRAIikKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQHt1cHN0cmVhbX0gcmVzb2x2ZXMgdG8gY29ycmVjdCBmdWxsIG5hbWUnICcKKwl0ZXN0IHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyID0gIiQoZnVsbF9uYW1lIEB7dXBzdHJlYW19KSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQHt1fSByZXNvbHZlcyB0byBjb3JyZWN0IGZ1bGwgbmFtZScgJworCXRlc3QgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgPSAiJChmdWxsX25hbWUgQHt1fSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ215LXNpZGVAe3Vwc3RyZWFtfSByZXNvbHZlcyB0byBjb3JyZWN0IGZ1bGwgbmFtZScgJworCXRlc3QgcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlID0gIiQoZnVsbF9uYW1lIG15LXNpZGVAe3V9KSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXktc2lkZUB7dX0gcmVzb2x2ZXMgdG8gY29ycmVjdCBjb21taXQnICcKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCXRlc3RfY29tbWl0IDUgJiYKKwkoY2QgY2xvbmUgJiYgZ2l0IGZldGNoKSAmJgorCXRlc3QgMiA9ICIkKGNvbW1pdF9zdWJqZWN0IG15LXNpZGUpIiAmJgorCXRlc3QgNSA9ICIkKGNvbW1pdF9zdWJqZWN0IG15LXNpZGVAe3V9KSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90LXRyYWNraW5nQHt1fSBmYWlscycgJworCXRlc3RfbXVzdF9mYWlsIGZ1bGxfbmFtZSBub24tdHJhY2tpbmdAe3V9ICYmCisJKGNkIGNsb25lICYmIGdpdCBjaGVja291dCAtLW5vLXRyYWNrIC1iIG5vbi10cmFja2luZykgJiYKKwl0ZXN0X211c3RfZmFpbCBmdWxsX25hbWUgbm9uLXRyYWNraW5nQHt1fQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc8YnJhbmNoPkB7dX1AezF9IHJlc29sdmVzIGNvcnJlY3RseScgJworCXRlc3RfY29tbWl0IDYgJiYKKwkoY2QgY2xvbmUgJiYgZ2l0IGZldGNoKSAmJgorCXRlc3QgNSA9ICQoY29tbWl0X3N1YmplY3QgbXktc2lkZUB7dX1AezF9KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdAe3V9IHdpdGhvdXQgc3BlY2lmeWluZyBicmFuY2ggZmFpbHMgb24gYSBkZXRhY2hlZCBIRUFEJyAnCisJZ2l0IGNoZWNrb3V0IEhFQUReMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgQHt1fQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtYiBuZXcgbXktc2lkZUB7dX0gZm9ya3MgZnJvbSB0aGUgc2FtZScgJworKAorCWNkIGNsb25lICYmCisJZ2l0IGNoZWNrb3V0IC1iIG5ldyBteS1zaWRlQHt1fSAmJgorCWdpdCByZXYtcGFyc2UgLS1zeW1ib2xpYy1mdWxsLW5hbWUgbXktc2lkZUB7dX0gPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgLS1zeW1ib2xpYy1mdWxsLW5hbWUgbmV3QHt1fSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBteS1zaWRlQHt1fSByZWNvcmRzIHRoZSBjb3JyZWN0IG5hbWUnICcKKygKKwlzcT0iJ1wnJyIgJiYKKwljZCBjbG9uZSB8fCBleGl0CisJZ2l0IGNoZWNrb3V0IG1hc3RlciB8fCBleGl0CisJZ2l0IGJyYW5jaCAtRCBuZXcgOyMgY2FuIGZhaWwgYnV0IGlzIG9rCisJZ2l0IGJyYW5jaCAtdCBuZXcgbXktc2lkZUB7dX0gJiYKKwlnaXQgbWVyZ2UgLXMgb3VycyBuZXdAe3V9ICYmCisJZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiVzID5hY3R1YWwgJiYKKwllY2hvICJNZXJnZSByZW1vdGUgYnJhbmNoICR7c3F9b3JpZ2luL3NpZGUke3NxfSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC1kIG90aGVyQHt1fScgJworCWdpdCBjaGVja291dCAtdCAtYiBvdGhlciBtYXN0ZXIgJiYKKwlnaXQgYnJhbmNoIC1kIEB7dX0gJiYKKwlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMvbWFzdGVyID5hY3R1YWwgJiYKKwk+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBvdGhlckB7dX0nICcKKwlnaXQgYnJhbmNoIC1mIG1hc3RlciBIRUFEICYmCisJZ2l0IGNoZWNrb3V0IC10IC1iIGFub3RoZXIgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IEB7dX0gJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgPmFjdHVhbCAmJgorCWVjaG8gcmVmcy9oZWFkcy9tYXN0ZXIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK2NvbW1pdCA4ZjQ4OWQwMWQwY2M2NWMzYjBmMDk1MDRlYzUwYjVlZDAyYTcwYmQ1CitSZWZsb2c6IG1hc3RlckB7MH0gKEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4pCitSZWZsb2cgbWVzc2FnZTogYnJhbmNoOiBDcmVhdGVkIGZyb20gSEVBRAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBUaHUgQXByIDcgMTU6MTU6MTMgMjAwNSAtMDcwMAorCisgICAgMworRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLWcgb3RoZXJAe3V9JyAnCisJZ2l0IGxvZyAtMSAtZyBvdGhlckB7dX0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK2NvbW1pdCA4ZjQ4OWQwMWQwY2M2NWMzYjBmMDk1MDRlYzUwYjVlZDAyYTcwYmQ1CitSZWZsb2c6IG1hc3RlckB7VGh1IEFwciA3IDE1OjE3OjEzIDIwMDUgLTA3MDB9IChDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+KQorUmVmbG9nIG1lc3NhZ2U6IGJyYW5jaDogQ3JlYXRlZCBmcm9tIEhFQUQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgVGh1IEFwciA3IDE1OjE1OjEzIDIwMDUgLTA3MDAKKworICAgIDMKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLWcgb3RoZXJAe3V9QHtub3d9JyAnCisJZ2l0IGxvZyAtMSAtZyBvdGhlckB7dX1Ae25vd30gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNTA4LWF0LWNvbWJpbmF0aW9ucy5zaCBiL3QvdDE1MDgtYXQtY29tYmluYXRpb25zLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ1ZDYyNDQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTA4LWF0LWNvbWJpbmF0aW9ucy5zaApAQCAtMCwwICsxLDUxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCB2YXJpb3VzIEB7WH0gc3ludGF4IGNvbWJpbmF0aW9ucyB0b2dldGhlcicKKy4gLi90ZXN0LWxpYi5zaAorCitjaGVjaygpIHsKK3Rlc3RfZXhwZWN0XyR7Mzotc3VjY2Vzc30gIiQxID0gJDIiICIKKwllY2hvICckMicgPmV4cGVjdCAmJgorCWdpdCBsb2cgLTEgLS1mb3JtYXQ9JXMgJyQxJyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorIgorfQorbm9uc2Vuc2UoKSB7Cit0ZXN0X2V4cGVjdF8kezI6LXN1Y2Nlc3N9ICIkMSBpcyBub25zZW5zaWNhbCIgIgorCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgLTEgJyQxJworIgorfQorZmFpbCgpIHsKKwkiJEAiIGZhaWx1cmUKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBtYXN0ZXItb25lICYmCisJdGVzdF9jb21taXQgbWFzdGVyLXR3byAmJgorCWdpdCBjaGVja291dCAtYiB1cHN0cmVhbS1icmFuY2ggJiYKKwl0ZXN0X2NvbW1pdCB1cHN0cmVhbS1vbmUgJiYKKwl0ZXN0X2NvbW1pdCB1cHN0cmVhbS10d28gJiYKKwlnaXQgY2hlY2tvdXQgLWIgb2xkLWJyYW5jaCAmJgorCXRlc3RfY29tbWl0IG9sZC1vbmUgJiYKKwl0ZXN0X2NvbW1pdCBvbGQtdHdvICYmCisJZ2l0IGNoZWNrb3V0IC1iIG5ldy1icmFuY2ggJiYKKwl0ZXN0X2NvbW1pdCBuZXctb25lICYmCisJdGVzdF9jb21taXQgbmV3LXR3byAmJgorCWdpdCBjb25maWcgYnJhbmNoLm9sZC1icmFuY2gucmVtb3RlIC4gJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5vbGQtYnJhbmNoLm1lcmdlIHJlZnMvaGVhZHMvbWFzdGVyICYmCisJZ2l0IGNvbmZpZyBicmFuY2gubmV3LWJyYW5jaC5yZW1vdGUgLiAmJgorCWdpdCBjb25maWcgYnJhbmNoLm5ldy1icmFuY2gubWVyZ2UgcmVmcy9oZWFkcy91cHN0cmVhbS1icmFuY2gKKycKKworY2hlY2sgSEVBRCBuZXctdHdvCitjaGVjayAiQHsxfSIgbmV3LW9uZQorY2hlY2sgIkB7LTF9IiBvbGQtdHdvCitjaGVjayAiQHstMX1AezF9IiBvbGQtb25lCitjaGVjayAiQHt1fSIgdXBzdHJlYW0tdHdvCitjaGVjayAiQHt1fUB7MX0iIHVwc3RyZWFtLW9uZQorY2hlY2sgIkB7LTF9QHt1fSIgbWFzdGVyLXR3bworY2hlY2sgIkB7LTF9QHt1fUB7MX0iIG1hc3Rlci1vbmUKK25vbnNlbnNlICJAe3V9QHstMX0iCitub25zZW5zZSAiQHsxfUB7dX0iCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjAwMC1jaGVja291dC1jYWNoZS1jbGFzaC5zaCBiL3QvdDIwMDAtY2hlY2tvdXQtY2FjaGUtY2xhc2guc2gKaW5kZXggZjdlMWE3My4uZGUzZWRiNSAxMDA3NTUKLS0tIGEvdC90MjAwMC1jaGVja291dC1jYWNoZS1jbGFzaC5zaAorKysgYi90L3QyMDAwLWNoZWNrb3V0LWNhY2hlLWNsYXNoLnNoCkBAIC00OCw0ICs0OCwxMyBAQAogICAgICdnaXQgY2hlY2tvdXQtaW5kZXggY29uZmxpY3RpbmcgcGF0aHMuJyBcCiAgICAgJ3Rlc3QgLWYgcGF0aDAgJiYgdGVzdCAtZCBwYXRoMSAmJiB0ZXN0IC1mIHBhdGgxL2ZpbGUxJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdjaGVja291dC1pbmRleCAtZiB0d2ljZSB3aXRoIC0tcHJlZml4JyAnCisJbWtkaXIgLXAgdGFyL2dldCAmJgorCWxuIC1zIHRhci9nZXQgdGhlcmUgJiYKKwllY2hvIGZpcnN0ICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC1hIC1mIC0tcHJlZml4PXRoZXJlLyAmJgorCWVjaG8gc2Vjb25kICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC1hIC1mIC0tcHJlZml4PXRoZXJlLworJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMTItY2hlY2tvdXQtbGFzdC5zaCBiL3QvdDIwMTItY2hlY2tvdXQtbGFzdC5zaAppbmRleCA4N2IzMGEyLi5iNDRkZTlkIDEwMDc1NQotLS0gYS90L3QyMDEyLWNoZWNrb3V0LWxhc3Quc2gKKysrIGIvdC90MjAxMi1jaGVja291dC1sYXN0LnNoCkBAIC0xLDYgKzEsNiBAQAogIyEvYmluL3NoCiAKLXRlc3RfZGVzY3JpcHRpb249J2NoZWNrb3V0IGNhbiBzd2l0Y2ggdG8gbGFzdCBicmFuY2gnCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVja291dCBjYW4gc3dpdGNoIHRvIGxhc3QgYnJhbmNoIGFuZCBtZXJnZSBiYXNlJwogCiAuIC4vdGVzdC1saWIuc2gKIApAQCAtOTEsNCArOTEsMjkgQEAKIAl0ZXN0ICJ6JChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA9ICJ6cmVmcy9oZWFkcy9icmFuY2gxMyIKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYmFzZSB0ZXN0IHNldHVwJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGFub3RoZXIgb3RoZXIgJiYKKwllY2hvICJoZWxsbyBhZ2FpbiIgPj53b3JsZCAmJgorCWdpdCBhZGQgd29ybGQgJiYKKwlnaXQgY29tbWl0IC1tIHRoaXJkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fub3RoZXIuLi5tYXN0ZXInICcKKwlnaXQgY2hlY2tvdXQgYW5vdGhlciAmJgorCWdpdCBjaGVja291dCBhbm90aGVyLi4ubWFzdGVyICYmCisJdGVzdCAieiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIgPSAieiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXJeKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLi4ubWFzdGVyJyAnCisJZ2l0IGNoZWNrb3V0IGFub3RoZXIgJiYKKwlnaXQgY2hlY2tvdXQgLi4ubWFzdGVyICYmCisJdGVzdCAieiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIgPSAieiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXJeKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFzdGVyLi4uJyAnCisJZ2l0IGNoZWNrb3V0IGFub3RoZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyLi4uICYmCisJdGVzdCAieiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIgPSAieiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXJeKSIKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDE1LWNoZWNrb3V0LXVuYm9ybi5zaCBiL3QvdDIwMTUtY2hlY2tvdXQtdW5ib3JuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM1NTFkMzkKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDE1LWNoZWNrb3V0LXVuYm9ybi5zaApAQCAtMCwwICsxLDQwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2tvdXQgZnJvbSB1bmJvcm4gYnJhbmNoIHByb3RlY3RzIGNvbnRlbnRzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJbWtkaXIgcGFyZW50ICYmCisJKGNkIHBhcmVudCAmJgorCSBnaXQgaW5pdCAmJgorCSBlY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwkgZ2l0IGFkZCBmaWxlICYmCisJIGdpdCBjb21taXQgLW0gYmFzZQorCSkgJiYKKwlnaXQgZmV0Y2ggcGFyZW50IG1hc3RlcjpvcmlnaW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgZnJvbSB1bmJvcm4gcHJlc2VydmVzIHVudHJhY2tlZCBmaWxlcycgJworCWVjaG8gcHJlY2lvdXMgPmV4cGVjdCAmJgorCWVjaG8gcHJlY2lvdXMgPmZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLWIgbmV3IG9yaWdpbiAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGZyb20gdW5ib3JuIHByZXNlcnZlcyBpbmRleCBjb250ZW50cycgJworCWVjaG8gcHJlY2lvdXMgPmV4cGVjdCAmJgorCWVjaG8gcHJlY2lvdXMgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLWIgbmV3IG9yaWdpbiAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCisJZ2l0IHNob3cgOmZpbGUgPmZpbGUgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBmcm9tIHVuYm9ybiBtZXJnZXMgaWRlbnRpY2FsIGluZGV4IGNvbnRlbnRzJyAnCisJZWNobyBjb250ZW50ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNoZWNrb3V0IC1iIG5ldyBvcmlnaW4KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDE2LWNoZWNrb3V0LXBhdGNoLnNoIGIvdC90MjAxNi1jaGVja291dC1wYXRjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMTQ0MTg0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjAxNi1jaGVja291dC1wYXRjaC5zaApAQCAtMCwwICsxLDExNSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjaGVja291dCAtLXBhdGNoJworCisuIC4vbGliLXBhdGNoLW1vZGUuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciBkaXIgJiYKKwllY2hvIHBhcmVudCA+IGRpci9mb28gJiYKKwllY2hvIGR1bW15ID4gYmFyICYmCisJZ2l0IGFkZCBiYXIgZGlyL2ZvbyAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCXRlc3RfdGljayAmJgorCXRlc3RfY29tbWl0IHNlY29uZCBkaXIvZm9vIGhlYWQgJiYKKwlzZXRfYW5kX3NhdmVfc3RhdGUgYmFyIGJhcl93b3JrIGJhcl9pbmRleCAmJgorCXNhdmVfaGVhZAorJworCisjIG5vdGU6IGJhciBzb3J0cyBiZWZvcmUgZGlyL2Zvbywgc28gdGhlIGZpcnN0ICduJyBpcyBhbHdheXMgdG8gc2tpcCAnYmFyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYXlpbmcgIm4iIGRvZXMgbm90aGluZycgJworCXNldF9hbmRfc2F2ZV9zdGF0ZSBkaXIvZm9vIHdvcmsgaGVhZCAmJgorCShlY2hvIG47IGVjaG8gbikgfCBnaXQgY2hlY2tvdXQgLXAgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGRpci9mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNoZWNrb3V0IC1wJyAnCisJKGVjaG8gbjsgZWNobyB5KSB8IGdpdCBjaGVja291dCAtcCAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyBoZWFkIGhlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNoZWNrb3V0IC1wIHdpdGggc3RhZ2VkIGNoYW5nZXMnICcKKwlzZXRfc3RhdGUgZGlyL2ZvbyB3b3JrIGluZGV4CisJKGVjaG8gbjsgZWNobyB5KSB8IGdpdCBjaGVja291dCAtcCAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyBpbmRleCBpbmRleAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2hlY2tvdXQgLXAgSEVBRCB3aXRoIE5PIHN0YWdlZCBjaGFuZ2VzOiBhYm9ydCcgJworCXNldF9hbmRfc2F2ZV9zdGF0ZSBkaXIvZm9vIHdvcmsgaGVhZCAmJgorCShlY2hvIG47IGVjaG8geTsgZWNobyBuKSB8IGdpdCBjaGVja291dCAtcCBIRUFEICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhciAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBkaXIvZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjaGVja291dCAtcCBIRUFEIHdpdGggTk8gc3RhZ2VkIGNoYW5nZXM6IGFwcGx5JyAnCisJKGVjaG8gbjsgZWNobyB5OyBlY2hvIHkpIHwgZ2l0IGNoZWNrb3V0IC1wIEhFQUQgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gaGVhZCBoZWFkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjaGVja291dCAtcCBIRUFEIHdpdGggY2hhbmdlIGFscmVhZHkgc3RhZ2VkJyAnCisJc2V0X3N0YXRlIGRpci9mb28gaW5kZXggaW5kZXgKKwkjIHRoZSB0aGlyZCBuIGlzIHRvIGdldCBvdXQgaW4gY2FzZSBpdCBtaXN0YWtlbmx5IGRvZXMgbm90IGFwcGx5CisJKGVjaG8gbjsgZWNobyB5OyBlY2hvIG4pIHwgZ2l0IGNoZWNrb3V0IC1wIEhFQUQgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gaGVhZCBoZWFkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjaGVja291dCAtcCBIRUFEXicgJworCSMgdGhlIHRoaXJkIG4gaXMgdG8gZ2V0IG91dCBpbiBjYXNlIGl0IG1pc3Rha2VubHkgZG9lcyBub3QgYXBwbHkKKwkoZWNobyBuOyBlY2hvIHk7IGVjaG8gbikgfCBnaXQgY2hlY2tvdXQgLXAgSEVBRF4gJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gcGFyZW50IHBhcmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2hlY2tvdXQgLXAgaGFuZGxlcyBkZWxldGlvbicgJworCXNldF9zdGF0ZSBkaXIvZm9vIHdvcmsgaW5kZXggJiYKKwlybSBkaXIvZm9vICYmCisJKGVjaG8gbjsgZWNobyB5KSB8IGdpdCBjaGVja291dCAtcCAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyBpbmRleCBpbmRleAorJworCisjIFRoZSBpZGVhIGluIHRoZSByZXN0IGlzIHRoYXQgYmFyIHNvcnRzIGZpcnN0LCBzbyB3ZSBhbHdheXMgc2F5ICd5JworIyBmaXJzdCBhbmQgaWYgdGhlIHBhdGggbGltaXRlciBmYWlscyBpdCdsbCBhcHBseSB0byBiYXIgaW5zdGVhZCBvZgorIyBkaXIvZm9vLiAgVGhlcmUncyBhbHdheXMgYW4gZXh0cmEgJ24nIHRvIHJlamVjdCBlZGl0cyB0byBkaXIvZm9vIGluCisjIHRoZSBmYWlsdXJlIGNhc2UgKGFuZCB0aHVzIGdldCBvdXQgb2YgdGhlIGxvb3ApLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRoIGxpbWl0aW5nIHdvcmtzOiBkaXInICcKKwlzZXRfc3RhdGUgZGlyL2ZvbyB3b3JrIGhlYWQgJiYKKwkoZWNobyB5OyBlY2hvIG4pIHwgZ2l0IGNoZWNrb3V0IC1wIGRpciAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyBoZWFkIGhlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0aCBsaW1pdGluZyB3b3JrczogLS0gZGlyJyAnCisJc2V0X3N0YXRlIGRpci9mb28gd29yayBoZWFkICYmCisJKGVjaG8geTsgZWNobyBuKSB8IGdpdCBjaGVja291dCAtcCAtLSBkaXIgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gaGVhZCBoZWFkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGggbGltaXRpbmcgd29ya3M6IEhFQUReIC0tIGRpcicgJworCSMgdGhlIHRoaXJkIG4gaXMgdG8gZ2V0IG91dCBpbiBjYXNlIGl0IG1pc3Rha2VubHkgZG9lcyBub3QgYXBwbHkKKwkoZWNobyB5OyBlY2hvIG47IGVjaG8gbikgfCBnaXQgY2hlY2tvdXQgLXAgSEVBRF4gLS0gZGlyICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhciAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIHBhcmVudCBwYXJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0aCBsaW1pdGluZyB3b3JrczogZm9vIGluc2lkZSBkaXInICcKKwlzZXRfc3RhdGUgZGlyL2ZvbyB3b3JrIGhlYWQgJiYKKwkjIHRoZSB0aGlyZCBuIGlzIHRvIGdldCBvdXQgaW4gY2FzZSBpdCBtaXN0YWtlbmx5IGRvZXMgbm90IGFwcGx5CisJKGVjaG8geTsgZWNobyBuOyBlY2hvIG4pIHwgKGNkIGRpciAmJiBnaXQgY2hlY2tvdXQgLXAgZm9vKSAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyBoZWFkIGhlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uZSBvZiB0aGlzIG1vdmVkIEhFQUQnICcKKwl2ZXJpZnlfc2F2ZWRfaGVhZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMzAtdW5yZXNvbHZlLWluZm8uc2ggYi90L3QyMDMwLXVucmVzb2x2ZS1pbmZvLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNiN2VmZmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDMwLXVucmVzb2x2ZS1pbmZvLnNoCkBAIC0wLDAgKzEsMTcwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndW5kb2luZyByZXNvbHV0aW9uJworCisuIC4vdGVzdC1saWIuc2gKKworY2hlY2tfcmVzb2x2ZV91bmRvICgpIHsKKwltc2c9JDEKKwlzaGlmdAorCXdoaWxlIGNhc2UgJCMgaW4KKwkwKQlicmVhayA7OworCTF8MnwzKQlkaWUgIkJ1ZyBpbiBjaGVjay1yZXNvbHZlLXVuZG8gdGVzdCIgOzsKKwllc2FjCisJZG8KKwkJcGF0aD0kMQorCQlzaGlmdAorCQlmb3Igc3RhZ2UgaW4gMSAyIDMKKwkJZG8KKwkJCXNoYTE9JDEKKwkJCXNoaWZ0CisJCQljYXNlICIkc2hhMSIgaW4KKwkJCScnKSBjb250aW51ZSA7OworCQkJZXNhYworCQkJc2hhMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiRzaGExIikKKwkJCXByaW50ZiAiMTAwNjQ0ICVzICVzXHQlc1xuIiAkc2hhMSAkc3RhZ2UgJHBhdGgKKwkJZG9uZQorCWRvbmUgPiIkbXNnLmV4cGVjdCIgJiYKKwlnaXQgbHMtZmlsZXMgLS1yZXNvbHZlLXVuZG8gPiIkbXNnLmFjdHVhbCIgJiYKKwl0ZXN0X2NtcCAiJG1zZy5leHBlY3QiICIkbXNnLmFjdHVhbCIKK30KKworcHJpbWVfcmVzb2x2ZV91bmRvICgpIHsKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IHNlY29uZF4wICYmCisJdGVzdF90aWNrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHRoaXJkXjAgJiYKKwllY2hvIG1lcmdlIGRvZXMgbm90IGxlYXZlIGFueXRoaW5nICYmCisJY2hlY2tfcmVzb2x2ZV91bmRvIGVtcHR5ICYmCisJZWNobyBkaWZmZXJlbnQgPmZpL2xlICYmCisJZ2l0IGFkZCBmaS9sZSAmJgorCWVjaG8gcmVzb2x2aW5nIHJlY29yZHMgJiYKKwljaGVja19yZXNvbHZlX3VuZG8gcmVjb3JkZWQgZmkvbGUgaW5pdGlhbDpmaS9sZSBzZWNvbmQ6ZmkvbGUgdGhpcmQ6ZmkvbGUKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJbWtkaXIgZmkgJiYKKwl0ZXN0X2NvbW1pdCBpbml0aWFsIGZpL2xlIGZpcnN0ICYmCisJZ2l0IGJyYW5jaCBzaWRlICYmCisJZ2l0IGJyYW5jaCBhbm90aGVyICYmCisJdGVzdF9jb21taXQgc2Vjb25kIGZpL2xlIHNlY29uZCAmJgorCWdpdCBjaGVja291dCBzaWRlICYmCisJdGVzdF9jb21taXQgdGhpcmQgZmkvbGUgdGhpcmQgJiYKKwlnaXQgY2hlY2tvdXQgYW5vdGhlciAmJgorCXRlc3RfY29tbWl0IGZvdXJ0aCBmaS9sZSBmb3VydGggJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCByZWNvcmRzIHN3aXRjaCBjbGVhcnMnICcKKwlwcmltZV9yZXNvbHZlX3VuZG8gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIG1lcmdlZCAmJgorCWVjaG8gY29tbWl0dGluZyBrZWVwcyAmJgorCWNoZWNrX3Jlc29sdmVfdW5kbyBrZXB0IGZpL2xlIGluaXRpYWw6ZmkvbGUgc2Vjb25kOmZpL2xlIHRoaXJkOmZpL2xlICYmCisJZ2l0IGNoZWNrb3V0IHNlY29uZF4wICYmCisJZWNobyBzd2l0Y2hpbmcgY2xlYXJzICYmCisJY2hlY2tfcmVzb2x2ZV91bmRvIGNsZWFyZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gcmVjb3JkcyByZXNldCBjbGVhcnMnICcKKwlwcmltZV9yZXNvbHZlX3VuZG8gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIG1lcmdlZCAmJgorCWVjaG8gY29tbWl0dGluZyBrZWVwcyAmJgorCWNoZWNrX3Jlc29sdmVfdW5kbyBrZXB0IGZpL2xlIGluaXRpYWw6ZmkvbGUgc2Vjb25kOmZpL2xlIHRoaXJkOmZpL2xlICYmCisKKwllY2hvIG1lcmdlIGNsZWFycyB1cGZyb250ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGZvdXJ0aF4wICYmCisJY2hlY2tfcmVzb2x2ZV91bmRvIG51a2VkICYmCisKKwlnaXQgcm0gLWYgZmkvbGUgJiYKKwllY2hvIHJlc29sdmluZyByZWNvcmRzICYmCisJY2hlY2tfcmVzb2x2ZV91bmRvIHJlY29yZGVkIGZpL2xlIGluaXRpYWw6ZmkvbGUgSEVBRDpmaS9sZSBmb3VydGg6ZmkvbGUgJiYKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIHJlc2V0dGluZyBkaXNjYXJkcyAmJgorCWNoZWNrX3Jlc29sdmVfdW5kbyBkaXNjYXJkZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGx1bWJpbmcgY2xlYXJzJyAnCisJcHJpbWVfcmVzb2x2ZV91bmRvICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBtZXJnZWQgJiYKKwllY2hvIGNvbW1pdHRpbmcga2VlcHMgJiYKKwljaGVja19yZXNvbHZlX3VuZG8ga2VwdCBmaS9sZSBpbml0aWFsOmZpL2xlIHNlY29uZDpmaS9sZSB0aGlyZDpmaS9sZSAmJgorCisJZWNobyBwbHVtYmluZyBjbGVhciAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1jbGVhci1yZXNvbHZlLXVuZG8gJiYKKwljaGVja19yZXNvbHZlX3VuZG8gY2xlYXJlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgcmVjb3JkcyBjaGVja291dCAtbSB1bmRvZXMnICcKKwlwcmltZV9yZXNvbHZlX3VuZG8gJiYKKwlnaXQgZGlmZiBIRUFEICYmCisJZ2l0IGNoZWNrb3V0IC0tY29uZmxpY3Q9bWVyZ2UgZmkvbGUgJiYKKwllY2hvIGNoZWNrb3V0IHVzZWQgdGhlIHJlY29yZCBhbmQgcmVtb3ZlZCBpdCAmJgorCWNoZWNrX3Jlc29sdmVfdW5kbyByZW1vdmVkICYmCisJZWNobyB0aGUgaW5kZXggYW5kIHRoZSB3b3JrIHRyZWUgaXMgdW5tZXJnZWQgYWdhaW4gJiYKKwlnaXQgZGlmZiA+YWN0dWFsICYmCisJZ3JlcCAiXisrPDw8PDw8PCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VubWVyZ2Ugd2l0aCBwbHVtYmluZycgJworCXByaW1lX3Jlc29sdmVfdW5kbyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS11bnJlc29sdmUgZmkvbGUgJiYKKwlnaXQgbHMtZmlsZXMgLXUgPmFjdHVhbCAmJgorCXRlc3QgJCh3YyAtbCA8YWN0dWFsKSA9IDMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVyZXJlIGFuZCByZXJlcmUgZm9yZ2V0JyAnCisJbWtkaXIgLmdpdC9yci1jYWNoZSAmJgorCXByaW1lX3Jlc29sdmVfdW5kbyAmJgorCWVjaG8gcmVjb3JkIHRoZSByZXNvbHV0aW9uICYmCisJZ2l0IHJlcmVyZSAmJgorCXJlcmVyZV9pZD0kKGNkIC5naXQvcnItY2FjaGUgJiYgZWNobyAqL3Bvc3RpbWFnZSkgJiYKKwlyZXJlcmVfaWQ9JHtyZXJlcmVfaWQlL3Bvc3RpbWFnZX0gJiYKKwl0ZXN0IC1mIC5naXQvcnItY2FjaGUvJHJlcmVyZV9pZC9wb3N0aW1hZ2UgJiYKKwlnaXQgY2hlY2tvdXQgLW0gZmkvbGUgJiYKKwllY2hvIHJlc3VycmVjdCB0aGUgY29uZmxpY3QgJiYKKwlncmVwICJePT09PT09PSIgZmkvbGUgJiYKKwllY2hvIHJlcmVzb2x2ZSB0aGUgY29uZmxpY3QgJiYKKwlnaXQgcmVyZXJlICYmCisJdGVzdCAieiQoY2F0IGZpL2xlKSIgPSB6ZGlmZmVyZW50ICYmCisJZWNobyByZWdpc3RlciB0aGUgcmVzb2x1dGlvbiBhZ2FpbiAmJgorCWdpdCBhZGQgZmkvbGUgJiYKKwljaGVja19yZXNvbHZlX3VuZG8ga2VwdCBmaS9sZSBpbml0aWFsOmZpL2xlIHNlY29uZDpmaS9sZSB0aGlyZDpmaS9sZSAmJgorCXRlc3QgLXogIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKwlnaXQgcmVyZXJlIGZvcmdldCBmaS9sZSAmJgorCSEgdGVzdCAtZiAuZ2l0L3JyLWNhY2hlLyRyZXJlcmVfaWQvcG9zdGltYWdlICYmCisJdHIgIlwwIiAiXG4iIDwuZ2l0L01FUkdFX1JSID5hY3R1YWwgJiYKKwllY2hvICIkcmVyZXJlX2lkCWZpL2xlIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXJlcmUgYW5kIHJlcmVyZSBmb3JnZXQgKHN1YmRpcmVjdG9yeSknICcKKwlybSAtZnIgLmdpdC9yci1jYWNoZSAmJgorCW1rZGlyIC5naXQvcnItY2FjaGUgJiYKKwlwcmltZV9yZXNvbHZlX3VuZG8gJiYKKwllY2hvIHJlY29yZCB0aGUgcmVzb2x1dGlvbiAmJgorCShjZCBmaSAmJiBnaXQgcmVyZXJlKSAmJgorCXJlcmVyZV9pZD0kKGNkIC5naXQvcnItY2FjaGUgJiYgZWNobyAqL3Bvc3RpbWFnZSkgJiYKKwlyZXJlcmVfaWQ9JHtyZXJlcmVfaWQlL3Bvc3RpbWFnZX0gJiYKKwl0ZXN0IC1mIC5naXQvcnItY2FjaGUvJHJlcmVyZV9pZC9wb3N0aW1hZ2UgJiYKKwkoY2QgZmkgJiYgZ2l0IGNoZWNrb3V0IC1tIGxlKSAmJgorCWVjaG8gcmVzdXJyZWN0IHRoZSBjb25mbGljdCAmJgorCWdyZXAgIl49PT09PT09IiBmaS9sZSAmJgorCWVjaG8gcmVyZXNvbHZlIHRoZSBjb25mbGljdCAmJgorCShjZCBmaSAmJiBnaXQgcmVyZXJlKSAmJgorCXRlc3QgInokKGNhdCBmaS9sZSkiID0gemRpZmZlcmVudCAmJgorCWVjaG8gcmVnaXN0ZXIgdGhlIHJlc29sdXRpb24gYWdhaW4gJiYKKwkoY2QgZmkgJiYgZ2l0IGFkZCBsZSkgJiYKKwljaGVja19yZXNvbHZlX3VuZG8ga2VwdCBmaS9sZSBpbml0aWFsOmZpL2xlIHNlY29uZDpmaS9sZSB0aGlyZDpmaS9sZSAmJgorCXRlc3QgLXogIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKwkoY2QgZmkgJiYgZ2l0IHJlcmVyZSBmb3JnZXQgbGUpICYmCisJISB0ZXN0IC1mIC5naXQvcnItY2FjaGUvJHJlcmVyZV9pZC9wb3N0aW1hZ2UgJiYKKwl0ciAiXDAiICJcbiIgPC5naXQvTUVSR0VfUlIgPmFjdHVhbCAmJgorCWVjaG8gIiRyZXJlcmVfaWQJZmkvbGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjEwNC11cGRhdGUtaW5kZXgtc2tpcC13b3JrdHJlZS5zaCBiL3QvdDIxMDQtdXBkYXRlLWluZGV4LXNraXAtd29ya3RyZWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWQwODc5YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIxMDQtdXBkYXRlLWluZGV4LXNraXAtd29ya3RyZWUuc2gKQEAgLTAsMCArMSw1NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBOZ3V54buFbiBUaMOhaSBOZ+G7jWMgRHV5CisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3NraXAtd29ya3RyZWUgYml0IHRlc3QnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjYXQgPmV4cGVjdC5mdWxsIDw8RU9GCitIIDEKK0ggMgorSCBzdWIvMQorSCBzdWIvMgorRU9GCisKK2NhdCA+ZXhwZWN0LnNraXAgPDxFT0YKK1MgMQorSCAyCitTIHN1Yi8xCitIIHN1Yi8yCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciBzdWIgJiYKKwl0b3VjaCAuLzEgLi8yIHN1Yi8xIHN1Yi8yICYmCisJZ2l0IGFkZCAxIDIgc3ViLzEgc3ViLzIgJiYKKwlnaXQgbHMtZmlsZXMgLXQgfCB0ZXN0X2NtcCBleHBlY3QuZnVsbCAtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4IGlzIGF0IHZlcnNpb24gMicgJworCXRlc3QgIiQodGVzdC1pbmRleC12ZXJzaW9uIDwgLmdpdC9pbmRleCkiID0gMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlJyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgMSBzdWIvMSAmJgorCWdpdCBscy1maWxlcyAtdCB8IHRlc3RfY21wIGV4cGVjdC5za2lwIC0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXggaXMgYXQgdmVyc2lvbiAzIGFmdGVyIGhhdmluZyBzb21lIHNraXAtd29ya3RyZWUgZW50cmllcycgJworCXRlc3QgIiQodGVzdC1pbmRleC12ZXJzaW9uIDwgLmdpdC9pbmRleCkiID0gMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyAtdCcgJworCWdpdCBscy1maWxlcyAtdCB8IHRlc3RfY21wIGV4cGVjdC5za2lwIC0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IC0tbm8tc2tpcC13b3JrdHJlZScgJworCWdpdCB1cGRhdGUtaW5kZXggLS1uby1za2lwLXdvcmt0cmVlIDEgc3ViLzEgJiYKKwlnaXQgbHMtZmlsZXMgLXQgfCB0ZXN0X2NtcCBleHBlY3QuZnVsbCAtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4IHZlcnNpb24gaXMgYmFjayB0byAyIHdoZW4gdGhlcmUgaXMgbm8gc2tpcC13b3JrdHJlZSBlbnRyeScgJworCXRlc3QgIiQodGVzdC1pbmRleC12ZXJzaW9uIDwgLmdpdC9pbmRleCkiID0gMgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIxMDUtdXBkYXRlLWluZGV4LWdpdGZpbGUuc2ggYi90L3QyMTA1LXVwZGF0ZS1pbmRleC1naXRmaWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY0MTYwN2QKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMTA1LXVwZGF0ZS1pbmRleC1naXRmaWxlLnNoCkBAIC0wLDAgKzEsMzggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgQnJhZCBLaW5nCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCB1cGRhdGUtaW5kZXggZm9yIGdpdGxpbmsgdG8gLmdpdCBmaWxlLgorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHdpdGggYWJzb2x1dGUgLmdpdCBmaWxlJyAnCisJbWtkaXIgc3ViMSAmJgorCShjZCBzdWIxICYmCisJIGdpdCBpbml0ICYmCisJIFJFQUw9IiQocHdkKS8ucmVhbCIgJiYKKwkgbXYgLmdpdCAiJFJFQUwiCisJIGVjaG8gImdpdGRpcjogJFJFQUwiID4uZ2l0ICYmCisJIHRlc3RfY29tbWl0IGZpcnN0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgZ2l0bGluayB0byBhYnNvbHV0ZSAuZ2l0IGZpbGUnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tIHN1YjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHdpdGggcmVsYXRpdmUgLmdpdCBmaWxlJyAnCisJbWtkaXIgc3ViMiAmJgorCShjZCBzdWIyICYmCisJIGdpdCBpbml0ICYmCisJIG12IC5naXQgLnJlYWwgJiYKKwkgZWNobyAiZ2l0ZGlyOiAucmVhbCIgPi5naXQgJiYKKwkgdGVzdF9jb21taXQgZmlyc3QpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBnaXRsaW5rIHRvIHJlbGF0aXZlIC5naXQgZmlsZScgJworCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS0gc3ViMgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIyMDAtYWRkLXVwZGF0ZS5zaCBiL3QvdDIyMDAtYWRkLXVwZGF0ZS5zaAppbmRleCA5MTIwNzUwLi4yYWQyODE5IDEwMDc1NQotLS0gYS90L3QyMjAwLWFkZC11cGRhdGUuc2gKKysrIGIvdC90MjIwMC1hZGQtdXBkYXRlLnNoCkBAIC0xNzYsNCArMTc2LDkgQEAKIAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIC11IG5vbi1leGlzdGVudCIgc2hvdWxkIGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIC11IG5vbi1leGlzdGVudCAmJgorCSEgKGdpdCBscy1maWxlcyB8IGdyZXAgIm5vbi1leGlzdGVudCIpCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjIwNC1hZGQtaWdub3JlZC5zaCBiL3QvdDIyMDQtYWRkLWlnbm9yZWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjRhZmRhYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIyMDQtYWRkLWlnbm9yZWQuc2gKQEAgLTAsMCArMSw3OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdmluZyBpZ25vcmVkIHBhdGhzIHRvIGdpdCBhZGQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlta2RpciBzdWIgZGlyIGRpci9zdWIgJiYKKwllY2hvIHN1YiA+LmdpdGlnbm9yZSAmJgorCWVjaG8gaWduID4+LmdpdGlnbm9yZSAmJgorCWZvciBwIGluIC4gc3ViIGRpciBkaXIvc3ViCisJZG8KKwkJPiIkcC9pZ24iICYmCisJCT4iJHAvZmlsZSIgfHwgZXhpdCAxCisJZG9uZQorJworCitmb3IgaSBpbiBmaWxlIGRpci9maWxlIGRpciAnZConCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIm5vIGNvbXBsYWludHMgZm9yIHVuaWdub3JlZCAkaSIgJworCQlybSAtZiAuZ2l0L2luZGV4ICYmCisJCWdpdCBhZGQgIiRpIiAmJgorCQlnaXQgbHMtZmlsZXMgIiRpIiA+b3V0ICYmCisJCXRlc3QgLXMgb3V0CisJJworZG9uZQorCitmb3IgaSBpbiBpZ24gZGlyL2lnbiBkaXIvc3ViIGRpci9zdWIvKmlnbiBzdWIvZmlsZSBzdWIgc3ViLyoKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tcGxhaW50cyBmb3IgaWdub3JlZCAkaSIgJworCQlybSAtZiAuZ2l0L2luZGV4ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgIiRpIiAyPmVyciAmJgorCQlnaXQgbHMtZmlsZXMgIiRpIiA+b3V0ICYmCisJCSEgdGVzdCAtcyBvdXQgJiYKKwkJZ3JlcCAtZSAiVXNlIC1mIGlmIiBlcnIgJiYKKwkJY2F0IGVycgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbXBsYWludHMgZm9yIGlnbm9yZWQgJGkgd2l0aCB1bmlnbm9yZWQgZmlsZSIgJworCQlybSAtZiAuZ2l0L2luZGV4ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgIiRpIiBmaWxlIDI+ZXJyICYmCisJCWdpdCBscy1maWxlcyAiJGkiID5vdXQgJiYKKwkJISB0ZXN0IC1zIG91dCAmJgorCQlncmVwIC1lICJVc2UgLWYgaWYiIGVyciAmJgorCQljYXQgZXJyCisJJworZG9uZQorCitmb3IgaSBpbiBzdWIgc3ViLyoKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tcGxhaW50cyBmb3IgaWdub3JlZCAkaSBpbiBkaXIiICcKKwkJcm0gLWYgLmdpdC9pbmRleCAmJgorCQkoCisJCQljZCBkaXIgJiYKKwkJCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgIiRpIiAyPmVyciAmJgorCQkJZ2l0IGxzLWZpbGVzICIkaSIgPm91dCAmJgorCQkJISB0ZXN0IC1zIG91dCAmJgorCQkJZ3JlcCAtZSAiVXNlIC1mIGlmIiBlcnIgJiYKKwkJCWNhdCBlcnIKKwkJKQorCScKK2RvbmUKKworZm9yIGkgaW4gaWduIGZpbGUKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tcGxhaW50cyBmb3IgaWdub3JlZCAkaSBpbiBzdWIiICcKKwkJcm0gLWYgLmdpdC9pbmRleCAmJgorCQkoCisJCQljZCBzdWIgJiYKKwkJCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgIiRpIiAyPmVyciAmJgorCQkJZ2l0IGxzLWZpbGVzICIkaSIgPm91dCAmJgorCQkJISB0ZXN0IC1zIG91dCAmJgorCQkJZ3JlcCAtZSAiVXNlIC1mIGlmIiBlcnIgJiYKKwkJCWNhdCBlcnIKKwkJKQorCScKK2RvbmUKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMzAwLWNkLXRvLXRvcGxldmVsLnNoIGIvdC90MjMwMC1jZC10by10b3BsZXZlbC5zaAppbmRleCAzYjAxYWQyLi45OTY1YmM1IDEwMDc1NQotLS0gYS90L3QyMzAwLWNkLXRvLXRvcGxldmVsLnNoCisrKyBiL3QvdDIzMDAtY2QtdG8tdG9wbGV2ZWwuc2gKQEAgLTgsNyArOCw3IEBACiAJdGVzdF9leHBlY3Rfc3VjY2VzcyAkMyAiJDIiICcKIAkJKAogCQkJY2QgJyInJDEnIicgJiYKLQkJCS4gZ2l0LXNoLXNldHVwICYmCisJCQkuICIkKGdpdCAtLWV4ZWMtcGF0aCkiL2dpdC1zaC1zZXR1cCAmJgogCQkJY2RfdG9fdG9wbGV2ZWwgJiYKIAkJCVsgIiQocHdkIC1QKSIgPSAiJFRPUExFVkVMIiBdCiAJCSkKZGlmZiAtLWdpdCBhL3QvdDMwMDEtbHMtZmlsZXMtb3RoZXJzLWV4Y2x1ZGUuc2ggYi90L3QzMDAxLWxzLWZpbGVzLW90aGVycy1leGNsdWRlLnNoCmluZGV4IGM2NWJjYTguLjZkMmYyYjYgMTAwNzU1Ci0tLSBhL3QvdDMwMDEtbHMtZmlsZXMtb3RoZXJzLWV4Y2x1ZGUuc2gKKysrIGIvdC90MzAwMS1scy1maWxlcy1vdGhlcnMtZXhjbHVkZS5zaApAQCAtNjQsNiArNjQsOCBAQAogZWNobyAnISouMgogISouOCcgPm9uZS90d28vLmdpdGlnbm9yZQogCithbGxpZ25vcmVzPScuZ2l0aWdub3JlIG9uZS8uZ2l0aWdub3JlIG9uZS90d28vLmdpdGlnbm9yZScKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2dpdCBscy1maWxlcyAtLW90aGVycyB3aXRoIHZhcmlvdXMgZXhjbHVkZSBvcHRpb25zLicgXAogICAgICdnaXQgbHMtZmlsZXMgLS1vdGhlcnMgXApAQCAtODUsNiArODcsMjYgQEAKICAgICAgICA+b3V0cHV0ICYmCiAgICAgIHRlc3RfY21wIGV4cGVjdCBvdXRwdXQnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHNraXAtd29ya3RyZWUgZ2l0aWdub3JlJyAnCisJZ2l0IGFkZCAkYWxsaWdub3JlcyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlICRhbGxpZ25vcmVzICYmCisJcm0gJGFsbGlnbm9yZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBscy1maWxlcyAtLW90aGVycyB3aXRoIHZhcmlvdXMgZXhjbHVkZSBvcHRpb25zLicgXAorICAgICdnaXQgbHMtZmlsZXMgLS1vdGhlcnMgXAorICAgICAgIC0tZXhjbHVkZT1cKi42IFwKKyAgICAgICAtLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT0uZ2l0aWdub3JlIFwKKyAgICAgICAtLWV4Y2x1ZGUtZnJvbT0uZ2l0L2lnbm9yZSBcCisgICAgICAgPm91dHB1dCAmJgorICAgICB0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXN0b3JlIGdpdGlnbm9yZScgJworCWdpdCBjaGVja291dCAkYWxsaWdub3JlcyAmJgorCXJtIC5naXQvaW5kZXgKKycKKwogY2F0ID4gZXhjbHVkZXMtZmlsZSA8PFxFT0YKICouWzEtOF0KIGUqCkBAIC0xNTMsNCArMTc1LDQzIEBACiAJZ3JlcCAiXmEuMSIgb3V0cHV0CiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1YmRpcmVjdG9yeSBpZ25vcmUgKHNldHVwKScgJworCW1rZGlyIC1wIHRvcC9sMS9sMiAmJgorCSgKKwkJY2QgdG9wICYmCisJCWdpdCBpbml0ICYmCisJCWVjaG8gLy5naXRpZ25vcmUgPi5naXRpZ25vcmUgJiYKKwkJZWNobyBsMSA+Pi5naXRpZ25vcmUgJiYKKwkJZWNobyBsMiA+bDEvLmdpdGlnbm9yZSAmJgorCQk+bDEvbDIvbDEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1YmRpcmVjdG9yeSBpZ25vcmUgKHRvcGxldmVsKScgJworCSgKKwkJY2QgdG9wICYmCisJCWdpdCBscy1maWxlcyAtbyAtLWV4Y2x1ZGUtc3RhbmRhcmQKKwkpID5hY3R1YWwgJiYKKwk+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJkaXJlY3RvcnkgaWdub3JlIChsMS9sMiknICcKKwkoCisJCWNkIHRvcC9sMS9sMiAmJgorCQlnaXQgbHMtZmlsZXMgLW8gLS1leGNsdWRlLXN0YW5kYXJkCisJKSA+YWN0dWFsICYmCisJPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ViZGlyZWN0b3J5IGlnbm9yZSAobDEpJyAnCisJKAorCQljZCB0b3AvbDEgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vIC0tZXhjbHVkZS1zdGFuZGFyZAorCSkgPmFjdHVhbCAmJgorCT5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAwMy1scy1maWxlcy1leGNsdWRlLnNoIGIvdC90MzAwMy1scy1maWxlcy1leGNsdWRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ1ZWMzMzMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMDAzLWxzLWZpbGVzLWV4Y2x1ZGUuc2gKQEAgLTAsMCArMSw0MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2xzLWZpbGVzIC0tZXhjbHVkZSBkb2VzIG5vdCBhZmZlY3QgaW5kZXggZmlsZXMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHJlcG8gd2l0aCBmaWxlJyAnCisJZWNobyBjb250ZW50ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBmaWxlICYmCisJZWNobyBtb2RpZmljYXRpb24gPmZpbGUKKycKKworY2hlY2tfb3V0cHV0KCkgewordGVzdF9leHBlY3Rfc3VjY2VzcyAibHMtZmlsZXMgb3V0cHV0IGNvbnRhaW5zIGZpbGUgKCQxKSIgIgorCWVjaG8gJyQyJyA+ZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzIC0tZXhjbHVkZS1zdGFuZGFyZCAtLSQxID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisiCit9CisKK2NoZWNrX2FsbF9vdXRwdXQoKSB7CisJY2hlY2tfb3V0cHV0ICdjYWNoZWQnICdmaWxlJworCWNoZWNrX291dHB1dCAnbW9kaWZpZWQnICdmaWxlJworfQorCitjaGVja19hbGxfb3V0cHV0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgZmlsZSB0byBnaXRpZ25vcmUnICcKKwllY2hvIGZpbGUgPi5naXRpZ25vcmUKKycKK2NoZWNrX2FsbF9vdXRwdXQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgLWkgbGlzdHMgb25seSB0cmFja2VkLWJ1dC1pZ25vcmVkIGZpbGVzJyAnCisJZWNobyBjb250ZW50ID5vdGhlci1maWxlICYmCisJZ2l0IGFkZCBvdGhlci1maWxlICYmCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwlnaXQgbHMtZmlsZXMgLWkgLS1leGNsdWRlLXN0YW5kYXJkID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAzMC1tZXJnZS1yZWN1cnNpdmUuc2ggYi90L3QzMDMwLW1lcmdlLXJlY3Vyc2l2ZS5zaAppbmRleCA5YjNmYTJiLi45OTI5ZjgyIDEwMDc1NQotLS0gYS90L3QzMDMwLW1lcmdlLXJlY3Vyc2l2ZS5zaAorKysgYi90L3QzMDMwLW1lcmdlLXJlY3Vyc2l2ZS5zaApAQCAtMjc2LDExICsyNzYsMTMgQEAKIAogCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAiJGM1IiAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAiJGM1IiAyPiBvdXQgJiYKKwlncmVwICJub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcyIgb3V0ICYmCisJZ2l0IGFkZCAtdSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAiJGM1IiAyPiBvdXQgJiYKIAlncmVwICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UiIG91dCAmJgogCXJtIC1mIC5naXQvTUVSR0VfSEVBRCAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAiJGM1IiAyPiBvdXQgJiYKLQlncmVwICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjb25mbGljdGVkIG1lcmdlIiBvdXQKLQorCWdyZXAgIllvdXIgbG9jYWwgY2hhbmdlcyB0byAuKiB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZS4iIG91dAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgcmVtb3ZlIGNvbmZsaWN0JyAnCmRpZmYgLS1naXQgYS90L3QzMTAwLWxzLXRyZWUtcmVzdHJpY3Quc2ggYi90L3QzMTAwLWxzLXRyZWUtcmVzdHJpY3Quc2gKaW5kZXggZWU2MGQwMy4uZWVlMGQzNCAxMDA3NTUKLS0tIGEvdC90MzEwMC1scy10cmVlLXJlc3RyaWN0LnNoCisrKyBiL3QvdDMxMDAtbHMtdHJlZS1yZXN0cmljdC5zaApAQCAtNDMsOCArNDMsNiBAQAogICAgICB0cmVlPWBnaXQgd3JpdGUtdHJlZWAgJiYKICAgICAgZWNobyAkdHJlZScKIAotX3g0MD0nWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXScKLV94NDA9IiRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAiCiB0ZXN0X291dHB1dCAoKSB7CiAgICAgc2VkIC1lICJzLyAkX3g0MAkvIFgJLyIgPGN1cnJlbnQgPmNoZWNrCiAgICAgdGVzdF9jbXAgZXhwZWN0ZWQgY2hlY2sKZGlmZiAtLWdpdCBhL3QvdDMxMDEtbHMtdHJlZS1kaXJuYW1lLnNoIGIvdC90MzEwMS1scy10cmVlLWRpcm5hbWUuc2gKaW5kZXggNTFjYjRhMy4uMDY2NTRjNiAxMDA3NTUKLS0tIGEvdC90MzEwMS1scy10cmVlLWRpcm5hbWUuc2gKKysrIGIvdC90MzEwMS1scy10cmVlLWRpcm5hbWUuc2gKQEAgLTM5LDggKzM5LDYgQEAKICAgICAgdHJlZT1gZ2l0IHdyaXRlLXRyZWVgICYmCiAgICAgIGVjaG8gJHRyZWUnCiAKLV94NDA9J1swLTlhLWZdWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdWzAtOWEtZl0nCi1feDQwPSIkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwIgogdGVzdF9vdXRwdXQgKCkgewogICAgIHNlZCAtZSAicy8gJF94NDAJLyBYCS8iIDxjdXJyZW50ID5jaGVjawogICAgIHRlc3RfY21wIGV4cGVjdGVkIGNoZWNrCkBAIC0xNDEsNCArMTM5LDg5IEBACiAJdGVzdF9vdXRwdXQKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSAtLWZ1bGwtbmFtZScgJworCSgKKwkJY2QgcGF0aDAgJiYKKwkJZ2l0IGxzLXRyZWUgLS1mdWxsLW5hbWUgJHRyZWUgYQorCSkgPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMDQwMDAwIHRyZWUgWAlwYXRoMC9hCitFT0YKKwl0ZXN0X291dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIC0tZnVsbC10cmVlJyAnCisJKAorCQljZCBwYXRoMS9iL2MgJiYKKwkJZ2l0IGxzLXRyZWUgLS1mdWxsLXRyZWUgJHRyZWUKKwkpID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzEwMDY0NCBibG9iIFgJMS50eHQKKzEwMDY0NCBibG9iIFgJMi50eHQKKzA0MDAwMCB0cmVlIFgJcGF0aDAKKzA0MDAwMCB0cmVlIFgJcGF0aDEKKzA0MDAwMCB0cmVlIFgJcGF0aDIKKzA0MDAwMCB0cmVlIFgJcGF0aDMKK0VPRgorCXRlc3Rfb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgLS1mdWxsLXRyZWUgLXInICcKKwkoCisJCWNkIHBhdGgzLyAmJgorCQlnaXQgbHMtdHJlZSAtLWZ1bGwtdHJlZSAtciAkdHJlZQorCSkgPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMTAwNjQ0IGJsb2IgWAkxLnR4dAorMTAwNjQ0IGJsb2IgWAkyLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMC9hL2IvYy8xLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMS9iL2MvMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDIvMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDMvMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDMvMi50eHQKK0VPRgorCXRlc3Rfb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgLS1hYmJyZXY9NScgJworCWdpdCBscy10cmVlIC0tYWJicmV2PTUgJHRyZWUgPmN1cnJlbnQgJiYKKwlzZWQgLWUgInMvICRfeDA1WzAtOWEtZl0qCS8gWAkvIiA8Y3VycmVudCA+Y2hlY2sgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMTAwNjQ0IGJsb2IgWAkxLnR4dAorMTAwNjQ0IGJsb2IgWAkyLnR4dAorMDQwMDAwIHRyZWUgWAlwYXRoMAorMDQwMDAwIHRyZWUgWAlwYXRoMQorMDQwMDAwIHRyZWUgWAlwYXRoMgorMDQwMDAwIHRyZWUgWAlwYXRoMworRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgY2hlY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSAtLW5hbWUtb25seScgJworCWdpdCBscy10cmVlIC0tbmFtZS1vbmx5ICR0cmVlID5jdXJyZW50CisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzEudHh0CisyLnR4dAorcGF0aDAKK3BhdGgxCitwYXRoMgorcGF0aDMKK0VPRgorCXRlc3Rfb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgLS1uYW1lLW9ubHkgLXInICcKKwlnaXQgbHMtdHJlZSAtLW5hbWUtb25seSAtciAkdHJlZSA+Y3VycmVudAorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisxLnR4dAorMi50eHQKK3BhdGgwL2EvYi9jLzEudHh0CitwYXRoMS9iL2MvMS50eHQKK3BhdGgyLzEudHh0CitwYXRoMy8xLnR4dAorcGF0aDMvMi50eHQKK0VPRgorCXRlc3Rfb3V0cHV0CisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzIwMC1icmFuY2guc2ggYi90L3QzMjAwLWJyYW5jaC5zaAppbmRleCBkNTlhOWI0Li5lMGI3NjA1IDEwMDc1NQotLS0gYS90L3QzMjAwLWJyYW5jaC5zaAorKysgYi90L3QzMjAwLWJyYW5jaC5zaApAQCAtNDY4LDQgKzQ2OCwzMCBAQAogCWdpdCBjb25maWcgLS11bnNldCBicmFuY2guYXV0b3NldHVwcmViYXNlCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0dGVtcHQgdG8gZGVsZXRlIGEgYnJhbmNoIHdpdGhvdXQgYmFzZSBhbmQgdW5tZXJnZWQgdG8gSEVBRCcgJworCWdpdCBjaGVja291dCBteTkgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgYnJhbmNoLm15OC5tZXJnZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLWQgbXk4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0dGVtcHQgdG8gZGVsZXRlIGEgYnJhbmNoIG1lcmdlZCB0byBpdHMgYmFzZScgJworCSMgd2UgYXJlIG9uIG15OSB3aGljaCBpcyB0aGUgaW5pdGlhbCBjb21taXQ7IHRyYWRpdGlvbmFsbHkKKwkjIHdlIHdvdWxkIG5vdCBoYXZlIGFsbG93ZWQgZGVsZXRpbmcgbXk4IHRoYXQgaXMgbm90IG1lcmdlZAorCSMgdG8gbXk5LCBidXQgaXQgaXMgc2V0IHRvIHRyYWNrIG1hc3RlciB0aGF0IGFscmVhZHkgaGFzIG15OAorCWdpdCBjb25maWcgYnJhbmNoLm15OC5tZXJnZSByZWZzL2hlYWRzL21hc3RlciAmJgorCWdpdCBicmFuY2ggLWQgbXk4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0dGVtcHQgdG8gZGVsZXRlIGEgYnJhbmNoIG1lcmdlZCB0byBpdHMgYmFzZScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIFRoaXJkID4+QSAmJgorCWdpdCBjb21taXQgLW0gIlRoaXJkIGNvbW1pdCIgQSAmJgorCWdpdCBicmFuY2ggLXQgbXkxMCBteTkgJiYKKwlnaXQgYnJhbmNoIC1mIG15MTAgSEVBRF4gJiYKKwkjIHdlIGFyZSBvbiBtYXN0ZXIgd2hpY2ggaXMgYXQgdGhlIHRoaXJkIGNvbW1pdCwgYW5kIG15MTAKKwkjIGlzIGJlaGluZCB1cywgc28gdHJhZGl0aW9uYWxseSB3ZSB3b3VsZCBoYXZlIGFsbG93ZWQgZGVsZXRpbmcKKwkjIGl0OyBidXQgbXkxMCBpcyBzZXQgdG8gdHJhY2sgbXk5IHRoYXQgaXMgZnVydGhlciBiZWhpbmQuCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtZCBteTEwCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzIwMi1zaG93LWJyYW5jaC1vY3RvcHVzLnNoIGIvdC90MzIwMi1zaG93LWJyYW5jaC1vY3RvcHVzLnNoCmluZGV4IDdmZTRhNmUuLjBhNWQ1ZTYgMTAwNzU1Ci0tLSBhL3QvdDMyMDItc2hvdy1icmFuY2gtb2N0b3B1cy5zaAorKysgYi90L3QzMjAyLXNob3ctYnJhbmNoLW9jdG9wdXMuc2gKQEAgLTU2LDQgKzU2LDEyIEBACiAKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdy1icmFuY2ggd2l0aCBzaG93YnJhbmNoLmRlZmF1bHQnICcKKwlmb3IgaSBpbiAkbnVtYmVyczsgZG8KKwkJZ2l0IGNvbmZpZyAtLWFkZCBzaG93YnJhbmNoLmRlZmF1bHQgYnJhbmNoJGkKKwlkb25lICYmCisJZ2l0IHNob3ctYnJhbmNoID5vdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0CisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzMwMS1ub3Rlcy5zaCBiL3QvdDMzMDEtbm90ZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzE0NjI2ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMzMDEtbm90ZXMuc2gKQEAgLTAsMCArMSwyMTAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGNvbW1pdCBub3RlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK2NhdCA+IGZha2VfZWRpdG9yLnNoIDw8IFxFT0YKKyMhL2Jpbi9zaAorZWNobyAiJE1TRyIgPiAiJDEiCitlY2hvICIkTVNHIiA+JiAyCitFT0YKK2NobW9kIGEreCBmYWtlX2VkaXRvci5zaAorVklTVUFMPS4vZmFrZV9lZGl0b3Iuc2gKK2V4cG9ydCBWSVNVQUwKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2Fubm90IGFubm90YXRlIG5vbi1leGlzdGluZyBIRUFEJyAnCisJKE1TRz0zICYmIGV4cG9ydCBNU0cgJiYgdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGVkaXQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCTogPiBhMSAmJgorCWdpdCBhZGQgYTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIDFzdCAmJgorCTogPiBhMiAmJgorCWdpdCBhZGQgYTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIDJuZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZWVkIHZhbGlkIG5vdGVzIHJlZicgJworCShNU0c9MSBHSVRfTk9URVNfUkVGPS8gJiYgZXhwb3J0IE1TRyBHSVRfTk9URVNfUkVGICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBlZGl0KSAmJgorCShNU0c9MiBHSVRfTk9URVNfUkVGPS8gJiYgZXhwb3J0IE1TRyBHSVRfTk9URVNfUkVGICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBzaG93KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZ1c2luZyB0byBlZGl0IGluIHJlZnMvaGVhZHMvJyAnCisJKE1TRz0xIEdJVF9OT1RFU19SRUY9cmVmcy9oZWFkcy9ib2d1cyAmJgorCSBleHBvcnQgTVNHIEdJVF9OT1RFU19SRUYgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGVkaXQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnVzaW5nIHRvIGVkaXQgaW4gcmVmcy9yZW1vdGVzLycgJworCShNU0c9MSBHSVRfTk9URVNfUkVGPXJlZnMvcmVtb3Rlcy9ib2d1cyAmJgorCSBleHBvcnQgTVNHIEdJVF9OT1RFU19SRUYgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGVkaXQpCisnCisKKyMgMSBpbmRpY2F0ZXMgY2F1Z2h0IGdyYWNlZnVsbHkgYnkgZGllLCAxMjggbWVhbnMgZ2l0LXNob3cgYmFya2VkCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoYW5kbGUgZW1wdHkgbm90ZXMgZ3JhY2VmdWxseScgJworCWdpdCBub3RlcyBzaG93IDsgdGVzdCAxID0gJD8KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIG5vdGVzJyAnCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMvY29tbWl0cyAmJgorCU1TRz1iMSBnaXQgbm90ZXMgZWRpdCAmJgorCXRlc3QgISAtZiAuZ2l0L25ldy1ub3RlcyAmJgorCXRlc3QgMSA9ICQoZ2l0IGxzLXRyZWUgcmVmcy9ub3Rlcy9jb21taXRzIHwgd2MgLWwpICYmCisJdGVzdCBiMSA9ICQoZ2l0IG5vdGVzIHNob3cpICYmCisJZ2l0IHNob3cgSEVBRF4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgc2hvdyBIRUFEXgorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitjb21taXQgMjY4MDQ4YmZiOGExZmIzOGU3MDNiYWNlYjhhYjIzNTQyMWJmODBjNQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBUaHUgQXByIDcgMTU6MTQ6MTMgMjAwNSAtMDcwMAorCisgICAgMm5kCisKK05vdGVzOgorICAgIGIxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyBub3RlcycgJworCSEgKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IGdyZXAgYjEpICYmCisJZ2l0IGxvZyAtMSA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBtdWx0aS1saW5lIG5vdGVzIChzZXR1cCknICcKKwk6ID4gYTMgJiYKKwlnaXQgYWRkIGEzICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAzcmQgJiYKKwlNU0c9ImIzCitjM2MzYzNjMworZDNkM2QzIiBnaXQgbm90ZXMgZWRpdAorJworCitjYXQgPiBleHBlY3QtbXVsdGlsaW5lIDw8IEVPRgorY29tbWl0IDE1ODQyMTVmMWQyOWM2NWU5OWM2YzY4NDg2MjY1NTNmZGQwN2ZkNzUKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgVGh1IEFwciA3IDE1OjE1OjEzIDIwMDUgLTA3MDAKKworICAgIDNyZAorCitOb3RlczoKKyAgICBiMworICAgIGMzYzNjM2MzCisgICAgZDNkM2QzCitFT0YKKworcHJpbnRmICJcbiIgPj4gZXhwZWN0LW11bHRpbGluZQorY2F0IGV4cGVjdCA+PiBleHBlY3QtbXVsdGlsaW5lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3cgbXVsdGktbGluZSBub3RlcycgJworCWdpdCBsb2cgLTIgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3QtbXVsdGlsaW5lIG91dHB1dAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIC1tIGFuZCAtRiBub3RlcyAoc2V0dXApJyAnCisJOiA+IGE0ICYmCisJZ2l0IGFkZCBhNCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gNHRoICYmCisJZWNobyAieHl6enkiID4gbm90ZTUgJiYKKwlnaXQgbm90ZXMgZWRpdCAtbSBzcGFtIC1GIG5vdGU1IC1tICJmb28KK2JhcgorYmF6IgorJworCit3aGl0ZXNwYWNlPSIgICAgIgorY2F0ID4gZXhwZWN0LW0tYW5kLUYgPDwgRU9GCitjb21taXQgMTUwMjM1MzU1NzRkZWQ4YjFhODkwNTJiMzI2NzNmODRjZjk1ODJiOAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBUaHUgQXByIDcgMTU6MTY6MTMgMjAwNSAtMDcwMAorCisgICAgNHRoCisKK05vdGVzOgorICAgIHNwYW0KKyR3aGl0ZXNwYWNlCisgICAgeHl6enkKKyR3aGl0ZXNwYWNlCisgICAgZm9vCisgICAgYmFyCisgICAgYmF6CitFT0YKKworcHJpbnRmICJcbiIgPj4gZXhwZWN0LW0tYW5kLUYKK2NhdCBleHBlY3QtbXVsdGlsaW5lID4+IGV4cGVjdC1tLWFuZC1GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3cgLW0gYW5kIC1GIG5vdGVzJyAnCisJZ2l0IGxvZyAtMyA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdC1tLWFuZC1GIG91dHB1dAorJworCitjYXQgPmV4cGVjdCA8PCBFT0YKK2NvbW1pdCAxNTAyMzUzNTU3NGRlZDhiMWE4OTA1MmIzMjY3M2Y4NGNmOTU4MmI4Cit0cmVlIGUwNzBlM2FmNTEwMTFlNDdiMTgzYzMzYWRmOTczNjczNmE1MjU3MDkKK3BhcmVudCAxNTg0MjE1ZjFkMjljNjVlOTljNmM2ODQ4NjI2NTUzZmRkMDdmZDc1CithdXRob3IgQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4gMTExMjkxMjE3MyAtMDcwMAorY29tbWl0dGVyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gMTExMjkxMjE3MyAtMDcwMAorCisgICAgNHRoCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgLS1wcmV0dHk9cmF3IGRvZXMgbm90IHNob3cgbm90ZXMnICcKKwlnaXQgbG9nIC0xIC0tcHJldHR5PXJhdyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPj5leHBlY3QgPDxFT0YKKworTm90ZXM6CisgICAgc3BhbQorJHdoaXRlc3BhY2UKKyAgICB4eXp6eQorJHdoaXRlc3BhY2UKKyAgICBmb28KKyAgICBiYXIKKyAgICBiYXoKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxvZyAtLXNob3ctbm90ZXMnICcKKwlnaXQgbG9nIC0xIC0tcHJldHR5PXJhdyAtLXNob3ctbm90ZXMgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxvZyAtLW5vLW5vdGVzJyAnCisJZ2l0IGxvZyAtMSAtLW5vLW5vdGVzID5vdXRwdXQgJiYKKwkhIGdyZXAgc3BhbSBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGZvcm1hdC1wYXRjaCBkb2VzIG5vdCBzaG93IG5vdGVzJyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCA+b3V0cHV0ICYmCisJISBncmVwIHNwYW0gb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBmb3JtYXQtcGF0Y2ggLS1zaG93LW5vdGVzIGRvZXMgc2hvdyBub3RlcycgJworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zaG93LW5vdGVzIC0xIC0tc3Rkb3V0ID5vdXRwdXQgJiYKKwlncmVwIHNwYW0gb3V0cHV0CisnCisKK2ZvciBwcmV0dHkgaW4gXAorCSIiIC0tcHJldHR5IC0tcHJldHR5PXJhdyAtLXByZXR0eT1zaG9ydCAtLXByZXR0eT1tZWRpdW0gXAorCS0tcHJldHR5PWZ1bGwgLS1wcmV0dHk9ZnVsbGVyIC0tcHJldHR5PWZvcm1hdDolcyAtLW9uZWxpbmUKK2RvCisJY2FzZSAiJHByZXR0eSIgaW4KKwkiIikgcD0gbm90PSBuZWdhdGU9IiIgOzsKKwk/KikgcD0iJHByZXR0eSIgbm90PSIgbm90IiBuZWdhdGU9IiEiIDs7CisJZXNhYworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdpdCBzaG93ICRwcmV0dHkgZG9lcyRub3Qgc2hvdyBub3RlcyIgJworCQlnaXQgc2hvdyAkcCA+b3V0cHV0ICYmCisJCWV2YWwgIiRuZWdhdGUgZ3JlcCBzcGFtIG91dHB1dCIKKwknCitkb25lCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzMwMi1ub3Rlcy1pbmRleC1leHBlbnNpdmUuc2ggYi90L3QzMzAyLW5vdGVzLWluZGV4LWV4cGVuc2l2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZTg0ZmM0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzMwMi1ub3Rlcy1pbmRleC1leHBlbnNpdmUuc2gKQEAgLTAsMCArMSwxMTggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGNvbW1pdCBub3RlcyBpbmRleCAoZXhwZW5zaXZlISknCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0IC16ICIkR0lUX05PVEVTX1RJTUlOR19URVNUUyIgJiYgeworCXNheSBTa2lwcGluZyB0aW1pbmcgdGVzdHMKKwl0ZXN0X2RvbmUKKwlleGl0Cit9CisKK2NyZWF0ZV9yZXBvICgpIHsKKwludW1iZXJfb2ZfY29tbWl0cz0kMQorCW5yPTAKKwl0ZXN0IC1kIC5naXQgfHwgeworCWdpdCBpbml0ICYmCisJKAorCQl3aGlsZSBbICRuciAtbHQgJG51bWJlcl9vZl9jb21taXRzIF07IGRvCisJCQlucj0kKCgkbnIrMSkpCisJCQltYXJrPSQoKCRuciskbnIpKQorCQkJbm90ZW1hcms9JCgoJG1hcmsrMSkpCisJCQl0ZXN0X3RpY2sgJiYKKwkJCWNhdCA8PElOUFVUX0VORCAmJgorY29tbWl0IHJlZnMvaGVhZHMvbWFzdGVyCittYXJrIDokbWFyaworY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitjb21taXQgIyRucgorQ09NTUlUCisKK00gNjQ0IGlubGluZSBmaWxlCitkYXRhIDw8RU9GCitmaWxlIGluIGNvbW1pdCAjJG5yCitFT0YKKworYmxvYgorbWFyayA6JG5vdGVtYXJrCitkYXRhIDw8RU9GCitub3RlIGZvciBjb21taXQgIyRucgorRU9GCisKK0lOUFVUX0VORAorCisJCQllY2hvICJOIDokbm90ZW1hcmsgOiRtYXJrIiA+PiBub3RlX2NvbW1pdAorCQlkb25lICYmCisJCXRlc3RfdGljayAmJgorCQljYXQgPDxJTlBVVF9FTkQgJiYKK2NvbW1pdCByZWZzL25vdGVzL2NvbW1pdHMKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorbm90ZXMKK0NPTU1JVAorCitJTlBVVF9FTkQKKworCQljYXQgbm90ZV9jb21taXQKKwkpIHwKKwlnaXQgZmFzdC1pbXBvcnQgLS1xdWlldCAmJgorCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL2NvbW1pdHMKKwl9Cit9CisKK3Rlc3Rfbm90ZXMgKCkgeworCWNvdW50PSQxICYmCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMvY29tbWl0cyAmJgorCWdpdCBsb2cgfCBncmVwICJeICAgICIgPiBvdXRwdXQgJiYKKwlpPSRjb3VudCAmJgorCXdoaWxlIFsgJGkgLWd0IDAgXTsgZG8KKwkJZWNobyAiICAgIGNvbW1pdCAjJGkiICYmCisJCWVjaG8gIiAgICBub3RlIGZvciBjb21taXQgIyRpIiAmJgorCQlpPSQoKCRpLTEpKTsKKwlkb25lID4gZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorfQorCitjYXQgPiB0aW1lX25vdGVzIDw8IFxFT0YKKwltb2RlPSQxCisJaT0xCisJd2hpbGUgWyAkaSAtbHQgJDIgXTsgZG8KKwkJY2FzZSAkMSBpbgorCQluby1ub3RlcykKKwkJCUdJVF9OT1RFU19SRUY9bm9uLWV4aXN0aW5nOyBleHBvcnQgR0lUX05PVEVTX1JFRgorCQk7OworCQlub3RlcykKKwkJCXVuc2V0IEdJVF9OT1RFU19SRUYKKwkJOzsKKwkJZXNhYworCQlnaXQgbG9nID4vZGV2L251bGwKKwkJaT0kKCgkaSsxKSkKKwlkb25lCitFT0YKKwordGltZV9ub3RlcyAoKSB7CisJZm9yIG1vZGUgaW4gbm8tbm90ZXMgbm90ZXMKKwlkbworCQllY2hvICRtb2RlCisJCS91c3IvYmluL3RpbWUgc2ggLi4vdGltZV9ub3RlcyAkbW9kZSAkMQorCWRvbmUKK30KKworZm9yIGNvdW50IGluIDEwIDEwMCAxMDAwIDEwMDAwOyBkbworCisJbWtkaXIgJGNvdW50CisJKGNkICRjb3VudDsKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldHVwICRjb3VudCIgImNyZWF0ZV9yZXBvICRjb3VudCIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdGVzIHdvcmsnICJ0ZXN0X25vdGVzICRjb3VudCIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdGVzIHRpbWluZycgInRpbWVfbm90ZXMgMTAwIgorCSkKK2RvbmUKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMzAzLW5vdGVzLXN1YnRyZWVzLnNoIGIvdC90MzMwMy1ub3Rlcy1zdWJ0cmVlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZGM0YmM4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzMwMy1ub3Rlcy1zdWJ0cmVlcy5zaApAQCAtMCwwICsxLDE4OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgY29tbWl0IG5vdGVzIG9yZ2FuaXplZCBpbiBzdWJ0cmVlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK251bWJlcl9vZl9jb21taXRzPTEwMAorCitzdGFydF9ub3RlX2NvbW1pdCAoKSB7CisJdGVzdF90aWNrICYmCisJY2F0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9ub3Rlcy9jb21taXRzCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK25vdGVzCitDT01NSVQKKworZnJvbSByZWZzL25vdGVzL2NvbW1pdHNeMAorZGVsZXRlYWxsCitJTlBVVF9FTkQKKworfQorCit2ZXJpZnlfbm90ZXMgKCkgeworCWdpdCBsb2cgfCBncmVwICJeICAgICIgPiBvdXRwdXQgJiYKKwlpPSRudW1iZXJfb2ZfY29tbWl0cyAmJgorCXdoaWxlIFsgJGkgLWd0IDAgXTsgZG8KKwkJZWNobyAiICAgIGNvbW1pdCAjJGkiICYmCisJCWVjaG8gIiAgICBub3RlIGZvciBjb21taXQgIyRpIiAmJgorCQlpPSQoKCRpLTEpKTsKKwlkb25lID4gZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXR1cDogY3JlYXRlICRudW1iZXJfb2ZfY29tbWl0cyBjb21taXRzIiAnCisKKwkoCisJCW5yPTAgJiYKKwkJd2hpbGUgWyAkbnIgLWx0ICRudW1iZXJfb2ZfY29tbWl0cyBdOyBkbworCQkJbnI9JCgoJG5yKzEpKSAmJgorCQkJdGVzdF90aWNrICYmCisJCQljYXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL2hlYWRzL21hc3RlcgorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitjb21taXQgIyRucgorQ09NTUlUCisKK00gNjQ0IGlubGluZSBmaWxlCitkYXRhIDw8RU9GCitmaWxlIGluIGNvbW1pdCAjJG5yCitFT0YKKworSU5QVVRfRU5ECisKKwkJZG9uZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJY2F0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9ub3Rlcy9jb21taXRzCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK25vIG5vdGVzCitDT01NSVQKKworZGVsZXRlYWxsCisKK0lOUFVUX0VORAorCisJKSB8CisJZ2l0IGZhc3QtaW1wb3J0IC0tcXVpZXQgJiYKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy9jb21taXRzCisnCisKK3Rlc3Rfc2hhMV9iYXNlZCAoKSB7CisJKAorCQlzdGFydF9ub3RlX2NvbW1pdCAmJgorCQlucj0kbnVtYmVyX29mX2NvbW1pdHMgJiYKKwkJZ2l0IHJldi1saXN0IHJlZnMvaGVhZHMvbWFzdGVyIHwKKwkJd2hpbGUgcmVhZCBzaGExOyBkbworCQkJbm90ZV9wYXRoPSQoZWNobyAiJHNoYTEiIHwgc2VkICIkMSIpCisJCQljYXQgPDxJTlBVVF9FTkQgJiYKK00gMTAwNjQ0IGlubGluZSAkbm90ZV9wYXRoCitkYXRhIDw8RU9GCitub3RlIGZvciBjb21taXQgIyRucgorRU9GCisKK0lOUFVUX0VORAorCisJCQlucj0kKCgkbnItMSkpCisJCWRvbmUKKwkpIHwKKwlnaXQgZmFzdC1pbXBvcnQgLS1xdWlldAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IG5vdGVzIGluIDIvMzgtZmFub3V0JyAndGVzdF9zaGExX2Jhc2VkICJzfF4uLnwmL3wiJwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG5vdGVzIGluIDIvMzgtZmFub3V0JyAndmVyaWZ5X25vdGVzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IG5vdGVzIGluIDQvMzYtZmFub3V0JyAndGVzdF9zaGExX2Jhc2VkICJzfF4uLi4ufCYvfCInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbm90ZXMgaW4gNC8zNi1mYW5vdXQnICd2ZXJpZnlfbm90ZXMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgbm90ZXMgaW4gMi8yLzM2LWZhbm91dCcgJ3Rlc3Rfc2hhMV9iYXNlZCAic3xeXCguLlwpXCguLlwpfFwxL1wyL3wiJwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG5vdGVzIGluIDIvMi8zNi1mYW5vdXQnICd2ZXJpZnlfbm90ZXMnCisKK3Rlc3Rfc2FtZV9ub3RlcyAoKSB7CisJKAorCQlzdGFydF9ub3RlX2NvbW1pdCAmJgorCQlucj0kbnVtYmVyX29mX2NvbW1pdHMgJiYKKwkJZ2l0IHJldi1saXN0IHJlZnMvaGVhZHMvbWFzdGVyIHwKKwkJd2hpbGUgcmVhZCBzaGExOyBkbworCQkJZmlyc3Rfbm90ZV9wYXRoPSQoZWNobyAiJHNoYTEiIHwgc2VkICIkMSIpCisJCQlzZWNvbmRfbm90ZV9wYXRoPSQoZWNobyAiJHNoYTEiIHwgc2VkICIkMiIpCisJCQljYXQgPDxJTlBVVF9FTkQgJiYKK00gMTAwNjQ0IGlubGluZSAkc2Vjb25kX25vdGVfcGF0aAorZGF0YSA8PEVPRgorbm90ZSBmb3IgY29tbWl0ICMkbnIKK0VPRgorCitNIDEwMDY0NCBpbmxpbmUgJGZpcnN0X25vdGVfcGF0aAorZGF0YSA8PEVPRgorbm90ZSBmb3IgY29tbWl0ICMkbnIKK0VPRgorCitJTlBVVF9FTkQKKworCQkJbnI9JCgoJG5yLTEpKQorCQlkb25lCisJKSB8CisJZ2l0IGZhc3QtaW1wb3J0IC0tcXVpZXQKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBzYW1lIG5vdGVzIGluIDQvMzYtZmFub3V0IGFuZCAyLzM4LWZhbm91dCcgJ3Rlc3Rfc2FtZV9ub3RlcyAic3xeLi58Ji98IiAic3xeLi4uLnwmL3wiJwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHNhbWUgbm90ZXMgaW4gNC8zNi1mYW5vdXQgYW5kIDIvMzgtZmFub3V0JyAndmVyaWZ5X25vdGVzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHNhbWUgbm90ZXMgaW4gMi8zOC1mYW5vdXQgYW5kIDIvMi8zNi1mYW5vdXQnICd0ZXN0X3NhbWVfbm90ZXMgInN8XlwoLi5cKVwoLi5cKXxcMS9cMi98IiAic3xeLi58Ji98IicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBzYW1lIG5vdGVzIGluIDIvMzgtZmFub3V0IGFuZCAyLzIvMzYtZmFub3V0JyAndmVyaWZ5X25vdGVzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHNhbWUgbm90ZXMgaW4gNC8zNi1mYW5vdXQgYW5kIDIvMi8zNi1mYW5vdXQnICd0ZXN0X3NhbWVfbm90ZXMgInN8XlwoLi5cKVwoLi5cKXxcMS9cMi98IiAic3xeLi4uLnwmL3wiJwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHNhbWUgbm90ZXMgaW4gNC8zNi1mYW5vdXQgYW5kIDIvMi8zNi1mYW5vdXQnICd2ZXJpZnlfbm90ZXMnCisKK3Rlc3RfY29uY2F0ZW5hdGVkX25vdGVzICgpIHsKKwkoCisJCXN0YXJ0X25vdGVfY29tbWl0ICYmCisJCW5yPSRudW1iZXJfb2ZfY29tbWl0cyAmJgorCQlnaXQgcmV2LWxpc3QgcmVmcy9oZWFkcy9tYXN0ZXIgfAorCQl3aGlsZSByZWFkIHNoYTE7IGRvCisJCQlmaXJzdF9ub3RlX3BhdGg9JChlY2hvICIkc2hhMSIgfCBzZWQgIiQxIikKKwkJCXNlY29uZF9ub3RlX3BhdGg9JChlY2hvICIkc2hhMSIgfCBzZWQgIiQyIikKKwkJCWNhdCA8PElOUFVUX0VORCAmJgorTSAxMDA2NDQgaW5saW5lICRzZWNvbmRfbm90ZV9wYXRoCitkYXRhIDw8RU9GCitzZWNvbmQgbm90ZSBmb3IgY29tbWl0ICMkbnIKK0VPRgorCitNIDEwMDY0NCBpbmxpbmUgJGZpcnN0X25vdGVfcGF0aAorZGF0YSA8PEVPRgorZmlyc3Qgbm90ZSBmb3IgY29tbWl0ICMkbnIKK0VPRgorCitJTlBVVF9FTkQKKworCQkJbnI9JCgoJG5yLTEpKQorCQlkb25lCisJKSB8CisJZ2l0IGZhc3QtaW1wb3J0IC0tcXVpZXQKK30KKwordmVyaWZ5X2NvbmNhdGVuYXRlZF9ub3RlcyAoKSB7CisgICAgZ2l0IGxvZyB8IGdyZXAgIl4gICAgIiA+IG91dHB1dCAmJgorICAgIGk9JG51bWJlcl9vZl9jb21taXRzICYmCisgICAgd2hpbGUgWyAkaSAtZ3QgMCBdOyBkbworICAgICAgICBlY2hvICIgICAgY29tbWl0ICMkaSIgJiYKKyAgICAgICAgZWNobyAiICAgIGZpcnN0IG5vdGUgZm9yIGNvbW1pdCAjJGkiICYmCisgICAgICAgIGVjaG8gIiAgICBzZWNvbmQgbm90ZSBmb3IgY29tbWl0ICMkaSIgJiYKKyAgICAgICAgaT0kKCgkaS0xKSk7CisgICAgZG9uZSA+IGV4cGVjdCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBvdXRwdXQKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBub3RlcyBpbiA0LzM2LWZhbm91dCBjb25jYXRlbmF0ZWQgd2l0aCAyLzM4LWZhbm91dCcgJ3Rlc3RfY29uY2F0ZW5hdGVkX25vdGVzICJzfF4uLnwmL3wiICJzfF4uLi4ufCYvfCInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbm90ZXMgaW4gNC8zNi1mYW5vdXQgY29uY2F0ZW5hdGVkIHdpdGggMi8zOC1mYW5vdXQnICd2ZXJpZnlfY29uY2F0ZW5hdGVkX25vdGVzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IG5vdGVzIGluIDIvMzgtZmFub3V0IGNvbmNhdGVuYXRlZCB3aXRoIDIvMi8zNi1mYW5vdXQnICd0ZXN0X2NvbmNhdGVuYXRlZF9ub3RlcyAic3xeXCguLlwpXCguLlwpfFwxL1wyL3wiICJzfF4uLnwmL3wiJwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG5vdGVzIGluIDIvMzgtZmFub3V0IGNvbmNhdGVuYXRlZCB3aXRoIDIvMi8zNi1mYW5vdXQnICd2ZXJpZnlfY29uY2F0ZW5hdGVkX25vdGVzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IG5vdGVzIGluIDQvMzYtZmFub3V0IGNvbmNhdGVuYXRlZCB3aXRoIDIvMi8zNi1mYW5vdXQnICd0ZXN0X2NvbmNhdGVuYXRlZF9ub3RlcyAic3xeXCguLlwpXCguLlwpfFwxL1wyL3wiICJzfF4uLi4ufCYvfCInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbm90ZXMgaW4gNC8zNi1mYW5vdXQgY29uY2F0ZW5hdGVkIHdpdGggMi8yLzM2LWZhbm91dCcgJ3ZlcmlmeV9jb25jYXRlbmF0ZWRfbm90ZXMnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzMwNC1ub3Rlcy1taXhlZC5zaCBiL3QvdDMzMDQtbm90ZXMtbWl4ZWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjU2Njg3ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMzMDQtbm90ZXMtbWl4ZWQuc2gKQEAgLTAsMCArMSwxNzIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IG5vdGVzIHRyZWVzIHRoYXQgYWxzbyBjb250YWluIG5vbi1ub3RlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK251bWJlcl9vZl9jb21taXRzPTEwMAorCitzdGFydF9ub3RlX2NvbW1pdCAoKSB7CisJdGVzdF90aWNrICYmCisJY2F0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9ub3Rlcy9jb21taXRzCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK25vdGVzCitDT01NSVQKKworZnJvbSByZWZzL25vdGVzL2NvbW1pdHNeMAorZGVsZXRlYWxsCitJTlBVVF9FTkQKKworfQorCit2ZXJpZnlfbm90ZXMgKCkgeworCWdpdCBsb2cgfCBncmVwICJeICAgICIgPiBvdXRwdXQgJiYKKwlpPSRudW1iZXJfb2ZfY29tbWl0cyAmJgorCXdoaWxlIFsgJGkgLWd0IDAgXTsgZG8KKwkJZWNobyAiICAgIGNvbW1pdCAjJGkiICYmCisJCWVjaG8gIiAgICBub3RlIGZvciBjb21taXQgIyRpIiAmJgorCQlpPSQoKCRpLTEpKTsKKwlkb25lID4gZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXR1cDogY3JlYXRlIGEgY291cGxlIG9mIGNvbW1pdHMiICcKKworCXRlc3RfdGljayAmJgorCWNhdCA8PElOUFVUX0VORCA+aW5wdXQgJiYKK2NvbW1pdCByZWZzL2hlYWRzL21hc3RlcgorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitjb21taXQgIzEKK0NPTU1JVAorCitNIDY0NCBpbmxpbmUgZmlsZQorZGF0YSA8PEVPRgorZmlsZSBpbiBjb21taXQgIzEKK0VPRgorCitJTlBVVF9FTkQKKworCXRlc3RfdGljayAmJgorCWNhdCA8PElOUFVUX0VORCA+PmlucHV0ICYmCitjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorY29tbWl0ICMyCitDT01NSVQKKworTSA2NDQgaW5saW5lIGZpbGUKK2RhdGEgPDxFT0YKK2ZpbGUgaW4gY29tbWl0ICMyCitFT0YKKworSU5QVVRfRU5ECisJZ2l0IGZhc3QtaW1wb3J0IC0tcXVpZXQgPGlucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImNyZWF0ZSBhIG5vdGVzIHRyZWUgd2l0aCBib3RoIG5vdGVzIGFuZCBub24tbm90ZXMiICcKKworCWNvbW1pdDE9JChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyXikgJiYKKwljb21taXQyPSQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwl0ZXN0X3RpY2sgJiYKKwljYXQgPDxJTlBVVF9FTkQgPmlucHV0ICYmCitjb21taXQgcmVmcy9ub3Rlcy9jb21taXRzCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK25vdGVzIGNvbW1pdCAjMQorQ09NTUlUCisKK04gaW5saW5lICRjb21taXQxCitkYXRhIDw8RU9GCitub3RlIGZvciBjb21taXQgIzEKK0VPRgorCitOIGlubGluZSAkY29tbWl0MgorZGF0YSA8PEVPRgorbm90ZSBmb3IgY29tbWl0ICMyCitFT0YKKworSU5QVVRfRU5ECisJdGVzdF90aWNrICYmCisJY2F0IDw8SU5QVVRfRU5EID4+aW5wdXQgJiYKK2NvbW1pdCByZWZzL25vdGVzL2NvbW1pdHMKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorbm90ZXMgY29tbWl0ICMyCitDT01NSVQKKworTSA2NDQgaW5saW5lIGZvb2Jhci9ub24tbm90ZS50eHQKK2RhdGEgPDxFT0YKK0Egbm9uLW5vdGUgaW4gYSBub3RlcyB0cmVlCitFT0YKKworTiBpbmxpbmUgJGNvbW1pdDIKK2RhdGEgPDxFT0YKK2VkaXRlZCBub3RlIGZvciBjb21taXQgIzIKK0VPRgorCitJTlBVVF9FTkQKKwl0ZXN0X3RpY2sgJiYKKwljYXQgPDxJTlBVVF9FTkQgPj5pbnB1dCAmJgorY29tbWl0IHJlZnMvbm90ZXMvY29tbWl0cworY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitub3RlcyBjb21taXQgIzMKK0NPTU1JVAorCitOIGlubGluZSAkY29tbWl0MQorZGF0YSA8PEVPRgorZWRpdGVkIG5vdGUgZm9yIGNvbW1pdCAjMQorRU9GCisKK00gNjQ0IGlubGluZSBkZWFkYmVlZgorZGF0YSA8PEVPRgorbm9uLW5vdGUgd2l0aCBTSEExLWxpa2UgbmFtZQorRU9GCisKK00gNjQ0IGlubGluZSBkZS9hZGJlZWYKK2RhdGEgPDxFT0YKK2Fub3RoZXIgbm9uLW5vdGUgd2l0aCBTSEExLWxpa2UgbmFtZQorRU9GCisKK0lOUFVUX0VORAorCWdpdCBmYXN0LWltcG9ydCAtLXF1aWV0IDxpbnB1dCAmJgorCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL2NvbW1pdHMKKycKKworY2F0ID5leHBlY3QgPDxFWFBFQ1RfRU5ECisgICAgY29tbWl0ICMyCisgICAgZWRpdGVkIG5vdGUgZm9yIGNvbW1pdCAjMgorICAgIGNvbW1pdCAjMQorICAgIGVkaXRlZCBub3RlIGZvciBjb21taXQgIzEKK0VYUEVDVF9FTkQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAidmVyaWZ5IGNvbnRlbnRzIG9mIG5vdGVzIiAnCisKKwlnaXQgbG9nIHwgZ3JlcCAiXiAgICAiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdF9ubjEgPDxFWFBFQ1RfRU5ECitBIG5vbi1ub3RlIGluIGEgbm90ZXMgdHJlZQorRVhQRUNUX0VORAorY2F0ID5leHBlY3Rfbm4yIDw8RVhQRUNUX0VORAorbm9uLW5vdGUgd2l0aCBTSEExLWxpa2UgbmFtZQorRVhQRUNUX0VORAorY2F0ID5leHBlY3Rfbm4zIDw8RVhQRUNUX0VORAorYW5vdGhlciBub24tbm90ZSB3aXRoIFNIQTEtbGlrZSBuYW1lCitFWFBFQ1RfRU5ECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInZlcmlmeSBjb250ZW50cyBvZiBub24tbm90ZXMiICcKKworCWdpdCBjYXQtZmlsZSAtcCByZWZzL25vdGVzL2NvbW1pdHM6Zm9vYmFyL25vbi1ub3RlLnR4dCA+IGFjdHVhbF9ubjEgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm4xIGFjdHVhbF9ubjEgJiYKKwlnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9jb21taXRzOmRlYWRiZWVmID4gYWN0dWFsX25uMiAmJgorCXRlc3RfY21wIGV4cGVjdF9ubjIgYWN0dWFsX25uMiAmJgorCWdpdCBjYXQtZmlsZSAtcCByZWZzL25vdGVzL2NvbW1pdHM6ZGUvYWRiZWVmID4gYWN0dWFsX25uMyAmJgorCXRlc3RfY21wIGV4cGVjdF9ubjMgYWN0dWFsX25uMworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MDAtcmViYXNlLnNoIGIvdC90MzQwMC1yZWJhc2Uuc2gKaW5kZXggNmUzOTFhMy4uNDMxNGFkMiAxMDA3NTUKLS0tIGEvdC90MzQwMC1yZWJhc2Uuc2gKKysrIGIvdC90MzQwMC1yZWJhc2Uuc2gKQEAgLTMsOSArMywxMCBAQAogIyBDb3B5cmlnaHQgKGMpIDIwMDUgQW1vcyBXYXRlcmxhbmQKICMKIAotdGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSBzaG91bGQgbm90IGRlc3Ryb3kgYXV0aG9yIGluZm9ybWF0aW9uCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmViYXNlIGFzc29ydGVkIHRlc3RzCiAKLVRoaXMgdGVzdCBydW5zIGdpdCByZWJhc2UgYW5kIGNoZWNrcyB0aGF0IHRoZSBhdXRob3IgaW5mb3JtYXRpb24gaXMgbm90IGxvc3QuCitUaGlzIHRlc3QgcnVucyBnaXQgcmViYXNlIGFuZCBjaGVja3MgdGhhdCB0aGUgYXV0aG9yIGluZm9ybWF0aW9uIGlzIG5vdCBsb3N0CithbW9uZyBvdGhlciB0aGluZ3MuCiAnCiAuIC4vdGVzdC1saWIuc2gKIApAQCAtNDEsOSArNDIsNDAgQEAKICAgICAgZ2l0IHRhZyB0b3BpYwogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2Ugb24gZGlydHkgd29ya3RyZWUnICcKKyAgICAgZWNobyBkaXJ0eSA+PiBBICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgbWFzdGVyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2Ugb24gZGlydHkgY2FjaGUnICcKKyAgICAgZ2l0IGFkZCBBICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgbWFzdGVyJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgYWdhaW5zdCBtYXN0ZXInICcKKyAgICAgZ2l0IHJlc2V0IC0taGFyZCBIRUFEICYmCiAgICAgIGdpdCByZWJhc2UgbWFzdGVyJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgYWdhaW5zdCBtYXN0ZXIgdHdpY2UnICcKKyAgICAgZ2l0IHJlYmFzZSBtYXN0ZXIgPm91dCAmJgorICAgICBncmVwICJDdXJyZW50IGJyYW5jaCBteS10b3BpYy1icmFuY2ggaXMgdXAgdG8gZGF0ZSIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBhZ2FpbnN0IG1hc3RlciB0d2ljZSB3aXRoIC0tZm9yY2UnICcKKyAgICAgZ2l0IHJlYmFzZSAtLWZvcmNlLXJlYmFzZSBtYXN0ZXIgPm91dCAmJgorICAgICBncmVwICJDdXJyZW50IGJyYW5jaCBteS10b3BpYy1icmFuY2ggaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZCIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBhZ2FpbnN0IG1hc3RlciB0d2ljZSBmcm9tIGFub3RoZXIgYnJhbmNoJyAnCisgICAgIGdpdCBjaGVja291dCBteS10b3BpYy1icmFuY2heICYmCisgICAgIGdpdCByZWJhc2UgbWFzdGVyIG15LXRvcGljLWJyYW5jaCA+b3V0ICYmCisgICAgIGdyZXAgIkN1cnJlbnQgYnJhbmNoIG15LXRvcGljLWJyYW5jaCBpcyB1cCB0byBkYXRlIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGZhc3QtZm9yd2FyZCB0byBtYXN0ZXInICcKKyAgICAgZ2l0IGNoZWNrb3V0IG15LXRvcGljLWJyYW5jaF4gJiYKKyAgICAgZ2l0IHJlYmFzZSBteS10b3BpYy1icmFuY2ggPm91dCAmJgorICAgICBncmVwICJGYXN0LWZvcndhcmRlZCBIRUFEIHRvIG15LXRvcGljLWJyYW5jaCIgb3V0CisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICd0aGUgcmViYXNlIG9wZXJhdGlvbiBzaG91bGQgbm90IGhhdmUgZGVzdHJveWVkIGF1dGhvciBpbmZvcm1hdGlvbicgXAogICAgICchIChnaXQgbG9nIHwgZ3JlcCAiQXV0aG9yOiIgfCBncmVwICI8PiIpJwpAQCAtOTUsNCArMTI3LDI4IEBACiAgICAgIGdyZXAgIlVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZSAuQi4gd291bGQgYmUgb3ZlcndyaXR0ZW4iIG91dHB1dC5lcnIKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1xIGlzIHF1aWV0JyAnCisgICAgIHJtIEIgJiYKKyAgICAgZ2l0IGNoZWNrb3V0IC1iIHF1aWV0IHRvcGljICYmCisgICAgIGdpdCByZWJhc2UgLXEgbWFzdGVyID4gb3V0cHV0Lm91dCAyPiYxICYmCisgICAgIHRlc3QgISAtcyBvdXRwdXQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlYmFzZSBhIGNvbW1pdCB0aGF0IHNwcmlua2xlcyBDUnMgaW4nICcKKwkoCisJCWVjaG8gIk9uZSIKKwkJZWNobyAiVHdvUSIKKwkJZWNobyAiVGhyZWUiCisJCWVjaG8gIkZRdXIiCisJCWVjaG8gIkZpdmUiCisJKSB8IHFfdG9fY3IgPkNSICYmCisJZ2l0IGFkZCBDUiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gIkEgZmlsZSB3aXRoIGEgbGluZSB3aXRoIENSIiAmJgorCWdpdCB0YWcgZmlsZS13aXRoLWNyICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReMCAmJgorCWdpdCByZWJhc2UgLS1vbnRvIEhFQUReXiBIRUFEXiAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGZpbGUtd2l0aC1jcjpDUiBIRUFEOkNSCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQwNC1yZWJhc2UtaW50ZXJhY3RpdmUuc2ggYi90L3QzNDA0LXJlYmFzZS1pbnRlcmFjdGl2ZS5zaAppbmRleCBjMzJmZjY2Li40ZTM1MTM3IDEwMDc1NQotLS0gYS90L3QzNDA0LXJlYmFzZS1pbnRlcmFjdGl2ZS5zaAorKysgYi90L3QzNDA0LXJlYmFzZS1pbnRlcmFjdGl2ZS5zaApAQCAtMTAsNjIgKzEwLDUxIEBACiAnCiAuIC4vdGVzdC1saWIuc2gKIAotLiAuLi9saWItcmViYXNlLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWJhc2Uuc2gKIAogc2V0X2Zha2VfZWRpdG9yCiAKLSMgc2V0IHVwIHR3byBicmFuY2hlcyBsaWtlIHRoaXM6CisjIFNldCB1cCB0aGUgcmVwb3NpdG9yeSBsaWtlIHRoaXM6CiAjCi0jIEEgLSBCIC0gQyAtIEQgLSBFCisjICAgICBvbmUgLSB0d28gLSB0aHJlZSAtIGZvdXIgKGNvbmZsaWN0LWJyYW5jaCkKKyMgICAvCisjIEEgLSBCIC0gQyAtIEQgLSBFICAgICAgICAgICAgKG1hc3RlcikKKyMgfCBcCisjIHwgICBGIC0gRyAtIEggICAgICAgICAgICAgICAgKGJyYW5jaDEpCisjIHwgICAgIFwKKyMgIFwgICAgICBJICAgICAgICAgICAgICAgICAgICAoYnJhbmNoMikKICMgICBcCi0jICAgICBGIC0gRyAtIEgKLSMgICAgICAgXAotIyAgICAgICAgIEkKKyMgICAgIEogLSBLIC0gTCAtIE0gICAgICAgICAgICAobm8tY29uZmxpY3QtYnJhbmNoKQogIwotIyB3aGVyZSBCLCBEIGFuZCBHIHRvdWNoIHRoZSBzYW1lIGZpbGUuCisjIHdoZXJlIEEsIEIsIEQgYW5kIEcgYWxsIHRvdWNoIGZpbGUxLCBhbmQgb25lLCB0d28sIHRocmVlLCBmb3VyIGFsbAorIyB0b3VjaCBmaWxlICJjb25mbGljdCIuCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCi0JOiA+IGZpbGUxICYmCi0JZ2l0IGFkZCBmaWxlMSAmJgotCXRlc3RfdGljayAmJgotCWdpdCBjb21taXQgLW0gQSAmJgotCWdpdCB0YWcgQSAmJgotCWVjaG8gMSA+IGZpbGUxICYmCi0JdGVzdF90aWNrICYmCi0JZ2l0IGNvbW1pdCAtbSBCIGZpbGUxICYmCi0JOiA+IGZpbGUyICYmCi0JZ2l0IGFkZCBmaWxlMiAmJgotCXRlc3RfdGljayAmJgotCWdpdCBjb21taXQgLW0gQyAmJgotCWVjaG8gMiA+IGZpbGUxICYmCi0JdGVzdF90aWNrICYmCi0JZ2l0IGNvbW1pdCAtbSBEIGZpbGUxICYmCi0JOiA+IGZpbGUzICYmCi0JZ2l0IGFkZCBmaWxlMyAmJgotCXRlc3RfdGljayAmJgotCWdpdCBjb21taXQgLW0gRSAmJgorCXRlc3RfY29tbWl0IEEgZmlsZTEgJiYKKwl0ZXN0X2NvbW1pdCBCIGZpbGUxICYmCisJdGVzdF9jb21taXQgQyBmaWxlMiAmJgorCXRlc3RfY29tbWl0IEQgZmlsZTEgJiYKKwl0ZXN0X2NvbW1pdCBFIGZpbGUzICYmCiAJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaDEgQSAmJgotCTogPiBmaWxlNCAmJgotCWdpdCBhZGQgZmlsZTQgJiYKLQl0ZXN0X3RpY2sgJiYKLQlnaXQgY29tbWl0IC1tIEYgJiYKLQlnaXQgdGFnIEYgJiYKLQllY2hvIDMgPiBmaWxlMSAmJgotCXRlc3RfdGljayAmJgotCWdpdCBjb21taXQgLW0gRyBmaWxlMSAmJgotCTogPiBmaWxlNSAmJgotCWdpdCBhZGQgZmlsZTUgJiYKLQl0ZXN0X3RpY2sgJiYKLQlnaXQgY29tbWl0IC1tIEggJiYKKwl0ZXN0X2NvbW1pdCBGIGZpbGU0ICYmCisJdGVzdF9jb21taXQgRyBmaWxlMSAmJgorCXRlc3RfY29tbWl0IEggZmlsZTUgJiYKIAlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMiBGICYmCi0JOiA+IGZpbGU2ICYmCi0JZ2l0IGFkZCBmaWxlNiAmJgotCXRlc3RfdGljayAmJgotCWdpdCBjb21taXQgLW0gSSAmJgotCWdpdCB0YWcgSQorCXRlc3RfY29tbWl0IEkgZmlsZTYKKwlnaXQgY2hlY2tvdXQgLWIgY29uZmxpY3QtYnJhbmNoIEEgJiYKKwlmb3IgbiBpbiBvbmUgdHdvIHRocmVlIGZvdXIKKwlkbworCQl0ZXN0X2NvbW1pdCAkbiBjb25mbGljdAorCWRvbmUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbm8tY29uZmxpY3QtYnJhbmNoIEEgJiYKKwlmb3IgbiBpbiBKIEsgTCBNCisJZG8KKwkJdGVzdF9jb21taXQgJG4gZmlsZSRuCisJZG9uZQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBjaGFuZ2VzIGFyZSBhIG5vcCcgJworCWdpdCBjaGVja291dCBicmFuY2gyICYmCiAJZ2l0IHJlYmFzZSAtaSBGICYmCiAJdGVzdCAiJChnaXQgc3ltYm9saWMtcmVmIC1xIEhFQUQpIiA9ICJyZWZzL2hlYWRzL2JyYW5jaDIiICYmCiAJdGVzdCAkKGdpdCByZXYtcGFyc2UgSSkgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKQEAgLTExMSwxOSArMTAwLDIwIEBACiAKIGNhdCA+IGV4cGVjdCA8PCBFT0YKIGRpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCi1pbmRleCBlNjlkZTI5Li4wMDc1MGVkIDEwMDY0NAoraW5kZXggZjcwZjEwZS4uZmQ3OTIzNSAxMDA2NDQKIC0tLSBhL2ZpbGUxCiArKysgYi9maWxlMQotQEAgLTAsMCArMSBAQAotKzMKK0BAIC0xICsxIEBACistQQorK0cKIEVPRgogCiBjYXQgPiBleHBlY3QyIDw8IEVPRgotPDw8PDw8PCBIRUFEOmZpbGUxCi0yCis8PDw8PDw8IEhFQUQKK0QKID09PT09PT0KLTMKLT4+Pj4+Pj4gYjdjYTk3Ni4uLiBHOmZpbGUxCitHCis+Pj4+Pj4+IDUxMDQ3ZGUuLi4gRwogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0b3Agb24gY29uZmxpY3RpbmcgcGljaycgJwpAQCAtMTYxLDcgKzE1MSw4IEBACiAJdGVzdF90aWNrICYmCiAJR0lUX0FVVEhPUl9OQU1FPSJOaXRmb2wiIGdpdCBjb21taXQgLW0gIm5pdGZvbCIgZmlsZTcgJiYKIAllY2hvICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiICYmCi0JRkFLRV9MSU5FUz0iMSBzcXVhc2ggMiIgZ2l0IHJlYmFzZSAtaSAtLW9udG8gbWFzdGVyIEhFQUR+MiAmJgorCUZBS0VfTElORVM9IjEgc3F1YXNoIDIiIEVYUEVDVF9IRUFERVJfQ09VTlQ9MiBcCisJCWdpdCByZWJhc2UgLWkgLS1vbnRvIG1hc3RlciBIRUFEfjIgJiYKIAl0ZXN0IEIgPSAkKGNhdCBmaWxlNykgJiYKIAl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgPSAkKGdpdCByZXYtcGFyc2UgbWFzdGVyKQogJwpAQCAtMjU2LDMwICsyNDcsMTEzIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aS1zcXVhc2ggb25seSBmaXJlcyB1cCBlZGl0b3Igb25jZScgJwogCWJhc2U9JChnaXQgcmV2LXBhcnNlIEhFQUR+NCkgJiYKIAlGQUtFX0NPTU1JVF9BTUVORD0iT05DRSIgRkFLRV9MSU5FUz0iMSBzcXVhc2ggMiBzcXVhc2ggMyBzcXVhc2ggNCIgXAorCQlFWFBFQ1RfSEVBREVSX0NPVU5UPTQgXAogCQlnaXQgcmViYXNlIC1pICRiYXNlICYmCiAJdGVzdCAkYmFzZSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKIAl0ZXN0IDEgPSAkKGdpdCBzaG93IHwgZ3JlcCBPTkNFIHwgd2MgLWwpCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpLWZpeHVwIGRvZXMgbm90IGZpcmUgdXAgZWRpdG9yJyAnCisJZ2l0IGNoZWNrb3V0IC1iIG11bHRpLWZpeHVwIEUgJiYKKwliYXNlPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjQpICYmCisJRkFLRV9DT01NSVRfQU1FTkQ9Ik5FVkVSIiBGQUtFX0xJTkVTPSIxIGZpeHVwIDIgZml4dXAgMyBmaXh1cCA0IiBcCisJCWdpdCByZWJhc2UgLWkgJGJhc2UgJiYKKwl0ZXN0ICRiYXNlID0gJChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCXRlc3QgMCA9ICQoZ2l0IHNob3cgfCBncmVwIE5FVkVSIHwgd2MgLWwpICYmCisJZ2l0IGNoZWNrb3V0IHRvLWJlLXJlYmFzZWQgJiYKKwlnaXQgYnJhbmNoIC1EIG11bHRpLWZpeHVwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBtZXNzYWdlIHVzZWQgYWZ0ZXIgY29uZmxpY3QnICcKKwlnaXQgY2hlY2tvdXQgLWIgY29uZmxpY3QtZml4dXAgY29uZmxpY3QtYnJhbmNoICYmCisJYmFzZT0kKGdpdCByZXYtcGFyc2UgSEVBRH40KSAmJgorCSgKKwkJRkFLRV9MSU5FUz0iMSBmaXh1cCAzIGZpeHVwIDQiICYmCisJCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgJGJhc2UKKwkpICYmCisJZWNobyB0aHJlZSA+IGNvbmZsaWN0ICYmCisJZ2l0IGFkZCBjb25mbGljdCAmJgorCUZBS0VfQ09NTUlUX0FNRU5EPSJPTkNFIiBFWFBFQ1RfSEVBREVSX0NPVU5UPTIgXAorCQlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwl0ZXN0ICRiYXNlID0gJChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHNob3cgfCBncmVwIE9OQ0UgfCB3YyAtbCkgJiYKKwlnaXQgY2hlY2tvdXQgdG8tYmUtcmViYXNlZCAmJgorCWdpdCBicmFuY2ggLUQgY29uZmxpY3QtZml4dXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IG1lc3NhZ2UgcmV0YWluZWQgYWZ0ZXIgY29uZmxpY3QnICcKKwlnaXQgY2hlY2tvdXQgLWIgY29uZmxpY3Qtc3F1YXNoIGNvbmZsaWN0LWJyYW5jaCAmJgorCWJhc2U9JChnaXQgcmV2LXBhcnNlIEhFQUR+NCkgJiYKKwkoCisJCUZBS0VfTElORVM9IjEgZml4dXAgMyBzcXVhc2ggNCIgJiYKKwkJZXhwb3J0IEZBS0VfTElORVMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSAkYmFzZQorCSkgJiYKKwllY2hvIHRocmVlID4gY29uZmxpY3QgJiYKKwlnaXQgYWRkIGNvbmZsaWN0ICYmCisJRkFLRV9DT01NSVRfQU1FTkQ9IlRXSUNFIiBFWFBFQ1RfSEVBREVSX0NPVU5UPTIgXAorCQlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwl0ZXN0ICRiYXNlID0gJChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCXRlc3QgMiA9ICQoZ2l0IHNob3cgfCBncmVwIFRXSUNFIHwgd2MgLWwpICYmCisJZ2l0IGNoZWNrb3V0IHRvLWJlLXJlYmFzZWQgJiYKKwlnaXQgYnJhbmNoIC1EIGNvbmZsaWN0LXNxdWFzaAorJworCitjYXQgPiBleHBlY3Qtc3F1YXNoLWZpeHVwIDw8IEVPRgorQgorCitECisKK09OQ0UKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcXVhc2ggYW5kIGZpeHVwIGdlbmVyYXRlIGNvcnJlY3QgbG9nIG1lc3NhZ2VzJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHNxdWFzaC1maXh1cCBFICYmCisJYmFzZT0kKGdpdCByZXYtcGFyc2UgSEVBRH40KSAmJgorCUZBS0VfQ09NTUlUX0FNRU5EPSJPTkNFIiBGQUtFX0xJTkVTPSIxIGZpeHVwIDIgc3F1YXNoIDMgZml4dXAgNCIgXAorCQlFWFBFQ1RfSEVBREVSX0NPVU5UPTQgXAorCQlnaXQgcmViYXNlIC1pICRiYXNlICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lIDEsL15cJC9kID4gYWN0dWFsLXNxdWFzaC1maXh1cCAmJgorCXRlc3RfY21wIGV4cGVjdC1zcXVhc2gtZml4dXAgYWN0dWFsLXNxdWFzaC1maXh1cCAmJgorCWdpdCBjaGVja291dCB0by1iZS1yZWJhc2VkICYmCisJZ2l0IGJyYW5jaCAtRCBzcXVhc2gtZml4dXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3F1YXNoIGlnbm9yZXMgY29tbWVudHMnICcKKwlnaXQgY2hlY2tvdXQgLWIgc2tpcC1jb21tZW50cyBFICYmCisJYmFzZT0kKGdpdCByZXYtcGFyc2UgSEVBRH40KSAmJgorCUZBS0VfQ09NTUlUX0FNRU5EPSJPTkNFIiBGQUtFX0xJTkVTPSIjIDEgIyBzcXVhc2ggMiAjIHNxdWFzaCAzICMgc3F1YXNoIDQgIyIgXAorCQlFWFBFQ1RfSEVBREVSX0NPVU5UPTQgXAorCQlnaXQgcmViYXNlIC1pICRiYXNlICYmCisJdGVzdCAkYmFzZSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwl0ZXN0IDEgPSAkKGdpdCBzaG93IHwgZ3JlcCBPTkNFIHwgd2MgLWwpICYmCisJZ2l0IGNoZWNrb3V0IHRvLWJlLXJlYmFzZWQgJiYKKwlnaXQgYnJhbmNoIC1EIHNraXAtY29tbWVudHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3F1YXNoIGlnbm9yZXMgYmxhbmsgbGluZXMnICcKKwlnaXQgY2hlY2tvdXQgLWIgc2tpcC1ibGFuay1saW5lcyBFICYmCisJYmFzZT0kKGdpdCByZXYtcGFyc2UgSEVBRH40KSAmJgorCUZBS0VfQ09NTUlUX0FNRU5EPSJPTkNFIiBGQUtFX0xJTkVTPSI+IDEgPiBzcXVhc2ggMiA+IHNxdWFzaCAzID4gc3F1YXNoIDQgPiIgXAorCQlFWFBFQ1RfSEVBREVSX0NPVU5UPTQgXAorCQlnaXQgcmViYXNlIC1pICRiYXNlICYmCisJdGVzdCAkYmFzZSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwl0ZXN0IDEgPSAkKGdpdCBzaG93IHwgZ3JlcCBPTkNFIHwgd2MgLWwpICYmCisJZ2l0IGNoZWNrb3V0IHRvLWJlLXJlYmFzZWQgJiYKKwlnaXQgYnJhbmNoIC1EIHNraXAtYmxhbmstbGluZXMKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3F1YXNoIHdvcmtzIGFzIGV4cGVjdGVkJyAnCi0JZm9yIG4gaW4gb25lIHR3byB0aHJlZSBmb3VyCi0JZG8KLQkJZWNobyAkbiA+PiBmaWxlJG4gJiYKLQkJZ2l0IGFkZCBmaWxlJG4gJiYKLQkJZ2l0IGNvbW1pdCAtbSAkbgotCWRvbmUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc3F1YXNoLXdvcmtzIG5vLWNvbmZsaWN0LWJyYW5jaCAmJgogCW9uZT0kKGdpdCByZXYtcGFyc2UgSEVBRH4zKSAmJgotCUZBS0VfTElORVM9IjEgc3F1YXNoIDMgMiIgZ2l0IHJlYmFzZSAtaSBIRUFEfjMgJiYKKwlGQUtFX0xJTkVTPSIxIHNxdWFzaCAzIDIiIEVYUEVDVF9IRUFERVJfQ09VTlQ9MiBcCisJCWdpdCByZWJhc2UgLWkgSEVBRH4zICYmCiAJdGVzdCAkb25lID0gJChnaXQgcmV2LXBhcnNlIEhFQUR+MikKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJydXB0ZWQgc3F1YXNoIHdvcmtzIGFzIGV4cGVjdGVkJyAnCi0JZm9yIG4gaW4gb25lIHR3byB0aHJlZSBmb3VyCi0JZG8KLQkJZWNobyAkbiA+PiBjb25mbGljdCAmJgotCQlnaXQgYWRkIGNvbmZsaWN0ICYmCi0JCWdpdCBjb21taXQgLW0gJG4KLQlkb25lICYmCisJZ2l0IGNoZWNrb3V0IC1iIGludGVycnVwdGVkLXNxdWFzaCBjb25mbGljdC1icmFuY2ggJiYKIAlvbmU9JChnaXQgcmV2LXBhcnNlIEhFQUR+MykgJiYKIAkoCiAJCUZBS0VfTElORVM9IjEgc3F1YXNoIDMgMiIgJiYKQEAgLTI5NiwxMiArMzcwLDcgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJydXB0ZWQgc3F1YXNoIHdvcmtzIGFzIGV4cGVjdGVkIChjYXNlIDIpJyAnCi0JZm9yIG4gaW4gb25lIHR3byB0aHJlZSBmb3VyCi0JZG8KLQkJZWNobyAkbiA+PiBjb25mbGljdCAmJgotCQlnaXQgYWRkIGNvbmZsaWN0ICYmCi0JCWdpdCBjb21taXQgLW0gJG4KLQlkb25lICYmCisJZ2l0IGNoZWNrb3V0IC1iIGludGVycnVwdGVkLXNxdWFzaDIgY29uZmxpY3QtYnJhbmNoICYmCiAJb25lPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjMpICYmCiAJKAogCQlGQUtFX0xJTkVTPSIzIHNxdWFzaCAxIDIiICYmCkBAIC00NzAsNCArNTM5LDE4IEBACiAJdGVzdCAxMjM0NTY3ODkgPSAkTVRJTUUKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV3b3JkJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHJld29yZC1icmFuY2ggbWFzdGVyICYmCisJRkFLRV9MSU5FUz0iMSAyIDMgcmV3b3JkIDQiIEZBS0VfQ09NTUlUX01FU1NBR0U9IkUgY2hhbmdlZCIgZ2l0IHJlYmFzZSAtaSBBICYmCisJZ2l0IHNob3cgSEVBRCB8IGdyZXAgIkUgY2hhbmdlZCIgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpICE9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIG1hc3Rlcl4pID0gJChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCUZBS0VfTElORVM9IjEgMiByZXdvcmQgMyA0IiBGQUtFX0NPTU1JVF9NRVNTQUdFPSJEIGNoYW5nZWQiIGdpdCByZWJhc2UgLWkgQSAmJgorCWdpdCBzaG93IEhFQUReIHwgZ3JlcCAiRCBjaGFuZ2VkIiAmJgorCUZBS0VfTElORVM9InJld29yZCAxIDIgMyA0IiBGQUtFX0NPTU1JVF9NRVNTQUdFPSJCIGNoYW5nZWQiIGdpdCByZWJhc2UgLWkgQSAmJgorCWdpdCBzaG93IEhFQUR+MyB8IGdyZXAgIkIgY2hhbmdlZCIgJiYKKwlGQUtFX0xJTkVTPSIxIHJld29yZCAyIDMgNCIgRkFLRV9DT01NSVRfTUVTU0FHRT0iQyBjaGFuZ2VkIiBnaXQgcmViYXNlIC1pIEEgJiYKKwlnaXQgc2hvdyBIRUFEfjIgfCBncmVwICJDIGNoYW5nZWQiCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQwOC1yZWJhc2UtbXVsdGktbGluZS5zaCBiL3QvdDM0MDgtcmViYXNlLW11bHRpLWxpbmUuc2gKaW5kZXggZTEyY2Q1Ny4uMjA2MmI4NSAxMDA3NTUKLS0tIGEvdC90MzQwOC1yZWJhc2UtbXVsdGktbGluZS5zaAorKysgYi90L3QzNDA4LXJlYmFzZS1tdWx0aS1saW5lLnNoCkBAIC0zMiw4ICszMiw4IEBACiAKIAlnaXQgY2hlY2tvdXQgc2lkZSAmJgogCWdpdCByZWJhc2UgbWFzdGVyICYmCi0JZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIxLC9eJC9kIiA+YWN0dWFsICYmCi0JZ2l0IGNhdC1maWxlIGNvbW1pdCBzaWRlQHsxfSB8IHNlZCAtZSAiMSwvXiQvZCIgPmV4cGVjdCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiMSwvXlwkL2QiID5hY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHNpZGVAezF9IHwgc2VkIC1lICIxLC9eXCQvZCIgPmV4cGVjdCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKIAogJwpkaWZmIC0tZ2l0IGEvdC90MzQwOS1yZWJhc2UtcHJlc2VydmUtbWVyZ2VzLnNoIGIvdC90MzQwOS1yZWJhc2UtcHJlc2VydmUtbWVyZ2VzLnNoCmluZGV4IGU2YzgzMjcuLjhmNzg1ZTcgMTAwNzU1Ci0tLSBhL3QvdDM0MDktcmViYXNlLXByZXNlcnZlLW1lcmdlcy5zaAorKysgYi90L3QzNDA5LXJlYmFzZS1wcmVzZXJ2ZS1tZXJnZXMuc2gKQEAgLTMyLDE0ICszMiwxNCBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIG1lcmdlLXByZXNlcnZpbmcgcmViYXNlJyBcCiAJJ2VjaG8gRmlyc3QgPiBBICYmCiAJZ2l0IGFkZCBBICYmCi0JZ2l0LWNvbW1pdCAtbSAiQWRkIEExIiAmJgorCWdpdCBjb21taXQgLW0gIkFkZCBBMSIgJiYKIAlnaXQgY2hlY2tvdXQgLWIgdG9waWMgJiYKIAllY2hvIFNlY29uZCA+IEIgJiYKIAlnaXQgYWRkIEIgJiYKLQlnaXQtY29tbWl0IC1tICJBZGQgQjEiICYmCisJZ2l0IGNvbW1pdCAtbSAiQWRkIEIxIiAmJgogCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKIAllY2hvIFRoaXJkID4+IEEgJiYKLQlnaXQtY29tbWl0IC1hIC1tICJNb2RpZnkgQTIiICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiTW9kaWZ5IEEyIiAmJgogCiAJZ2l0IGNsb25lIC4vLiBjbG9uZTEgJiYKIAljZCBjbG9uZTEgJiYKQEAgLTcxLDcgKzcxLDcgQEAKIAlnaXQgZmV0Y2ggJiYKIAlnaXQgcmViYXNlIC1wIG9yaWdpbi90b3BpYyAmJgogCXRlc3QgMSA9ICQoZ2l0IHJldi1saXN0IC0tYWxsIC0tcHJldHR5PW9uZWxpbmUgfCBncmVwICJNb2RpZnkgQSIgfCB3YyAtbCkgJiYKLQl0ZXN0IDEgPSAkKGdpdCByZXYtbGlzdCAtLWFsbCAtLXByZXR0eT1vbmVsaW5lIHwgZ3JlcCAiTWVyZ2UgY29tbWl0IiB8IHdjIC1sKQorCXRlc3QgMSA9ICQoZ2l0IHJldi1saXN0IC0tYWxsIC0tcHJldHR5PW9uZWxpbmUgfCBncmVwICJNZXJnZSByZW1vdGUgYnJhbmNoICIgfCB3YyAtbCkKIAkpCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDM0MTEtcmViYXNlLXByZXNlcnZlLWFyb3VuZC1tZXJnZXMuc2ggYi90L3QzNDExLXJlYmFzZS1wcmVzZXJ2ZS1hcm91bmQtbWVyZ2VzLnNoCmluZGV4IDY1MzM1MDUuLjE0YTIzY2QgMTAwNzU1Ci0tLSBhL3QvdDM0MTEtcmViYXNlLXByZXNlcnZlLWFyb3VuZC1tZXJnZXMuc2gKKysrIGIvdC90MzQxMS1yZWJhc2UtcHJlc2VydmUtYXJvdW5kLW1lcmdlcy5zaApAQCAtMTAsNyArMTAsNyBAQAogJwogLiAuL3Rlc3QtbGliLnNoCiAKLS4gLi4vbGliLXJlYmFzZS5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmViYXNlLnNoCiAKIHNldF9mYWtlX2VkaXRvcgogCmRpZmYgLS1naXQgYS90L3QzNDE0LXJlYmFzZS1wcmVzZXJ2ZS1vbnRvLnNoIGIvdC90MzQxNC1yZWJhc2UtcHJlc2VydmUtb250by5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZTBhNmNjCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzQxNC1yZWJhc2UtcHJlc2VydmUtb250by5zaApAQCAtMCwwICsxLDgwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEdyZWcgUHJpY2UKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSAtcCBzaG91bGQgcmVzcGVjdCAtLW9udG8KKworSW4gYSByZWJhc2Ugd2l0aCAtLW9udG8sIHdlIHNob3VsZCByZXdyaXRlIGFsbCB0aGUgY29tbWl0cyB0aGF0CithcmVuJyInIid0IG9uIHRvcCBvZiAkT05UTywgZXZlbiBpZiB0aGV5IGFyZSBvbiB0b3Agb2YgJFVQU1RSRUFNLgorJworLiAuL3Rlc3QtbGliLnNoCisKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYmFzZS5zaAorCisjIFNldCB1cCBicmFuY2hlcyBsaWtlIHRoaXM6CisjIEExLS0tQjEtLS1FMS0tLUYxLS0tRzEKKyMgIFwgICAgXCAgICAgICAgICAgICAvCisjICAgXCAgICBcLS1DMS0tLUQxLS0vCisjICAgIEgxCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgQTEgJiYKKwl0ZXN0X2NvbW1pdCBCMSAmJgorCXRlc3RfY29tbWl0IEMxICYmCisJdGVzdF9jb21taXQgRDEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEIxICYmCisJdGVzdF9jb21taXQgRTEgJiYKKwl0ZXN0X2NvbW1pdCBGMSAmJgorCXRlc3RfbWVyZ2UgRzEgRDEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEExICYmCisJdGVzdF9jb21taXQgSDEKKycKKworIyBOb3cgcmViYXNlIG1lcmdlIEcxIGZyb20gYm90aCBicmFuY2hlcycgYmFzZSBCMSwgYm90aCBzaG91bGQgbW92ZToKKyMgQTEtLS1CMS0tLUUxLS0tRjEtLS1HMQorIyAgXCAgICBcICAgICAgICAgICAgIC8KKyMgICBcICAgIFwtLUMxLS0tRDEtLS8KKyMgICAgXAorIyAgICAgSDEtLS1FMi0tLUYyLS0tRzIKKyMgICAgICBcICAgICAgICAgICAgIC8KKyMgICAgICAgXC0tQzItLS1EMi0tLworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgZnJvbSBCMSBvbnRvIEgxJyAnCisJZ2l0IGNoZWNrb3V0IEcxICYmCisJZ2l0IHJlYmFzZSAtcCAtLW9udG8gSDEgQjEgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4xXjFeMSkiID0gIiQoZ2l0IHJldi1wYXJzZSBIMSkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReMl4xXjEpIiA9ICIkKGdpdCByZXYtcGFyc2UgSDEpIgorJworCisjIE9uIHRoZSBvdGhlciBoYW5kIGlmIHJlYmFzZSBmcm9tIEUxIHdoaWNoIGlzIHdpdGhpbiBvbmUgYnJhbmNoLAorIyB0aGVuIHRoZSBvdGhlciBicmFuY2ggc3RheXM6CisjIEExLS0tQjEtLS1FMS0tLUYxLS0tRzEKKyMgIFwgICAgXCAgICAgICAgICAgICAvCisjICAgXCAgICBcLS1DMS0tLUQxLS0vCisjICAgIFwgICAgICAgICAgICAgXAorIyAgICAgSDEtLS0tLUYzLS0tLS1HMworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgZnJvbSBFMSBvbnRvIEgxJyAnCisJZ2l0IGNoZWNrb3V0IEcxICYmCisJZ2l0IHJlYmFzZSAtcCAtLW9udG8gSDEgRTEgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4xXjEpIiA9ICIkKGdpdCByZXYtcGFyc2UgSDEpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjIpIiA9ICIkKGdpdCByZXYtcGFyc2UgRDEpIgorJworCisjIEFuZCB0aGUgc2FtZSBpZiB3ZSByZWJhc2UgZnJvbSBhIGNvbW1pdCBpbiB0aGUgc2Vjb25kLXBhcmVudCBicmFuY2guCisjIEExLS0tQjEtLS1FMS0tLUYxLS0tLUcxCisjICBcICAgIFwgICAgICAgICAgXCAgIC8KKyMgICBcICAgIFwtLUMxLS0tRDEtXC0vCisjICAgIFwgICAgICAgICAgICAgICBcCisjICAgICBIMS0tLS0tLUQzLS0tLS0tRzQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGZyb20gQzEgb250byBIMScgJworCWdpdCBjaGVja291dCBHMSAmJgorCWdpdCByZXYtbGlzdCAtLWZpcnN0LXBhcmVudCAtLXByZXR0eT1vbmVsaW5lIEMxLi5HMSAmJgorCWdpdCByZWJhc2UgLXAgLS1vbnRvIEgxIEMxICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReMl4xKSIgPSAiJChnaXQgcmV2LXBhcnNlIEgxKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4xKSIgPSAiJChnaXQgcmV2LXBhcnNlIEYxKSIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDE1LXJlYmFzZS1hdXRvc3F1YXNoLnNoIGIvdC90MzQxNS1yZWJhc2UtYXV0b3NxdWFzaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNjNmNGUyCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzQxNS1yZWJhc2UtYXV0b3NxdWFzaC5zaApAQCAtMCwwICsxLDczIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYXV0byBzcXVhc2gnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIDAgPmZpbGUwICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCBjb21taXQiICYmCisJZWNobyAwID5maWxlMSAmJgorCWVjaG8gMiA+ZmlsZTIgJiYKKwlnaXQgYWRkIC4gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJmaXJzdCBjb21taXQiICYmCisJZWNobyAzID5maWxlMyAmJgorCWdpdCBhZGQgLiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInNlY29uZCBjb21taXQiICYmCisJZ2l0IHRhZyBiYXNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG8gZml4dXAnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGJhc2UgJiYKKwllY2hvIDEgPmZpbGUxICYmCisJZ2l0IGFkZCAtdSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImZpeHVwISBmaXJzdCIKKworCWdpdCB0YWcgZmluYWwtZml4dXAgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmViYXNlIC0tYXV0b3NxdWFzaCAtaSBIRUFEXl5eICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3QgMyA9ICQod2MgLWwgPGFjdHVhbCkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBmaW5hbC1maXh1cCAmJgorCXRlc3QgMSA9ICIkKGdpdCBjYXQtZmlsZSBibG9iIEhFQUReOmZpbGUxKSIgJiYKKwl0ZXN0IDEgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gfCBncmVwIGZpcnN0IHwgd2MgLWwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG8gc3F1YXNoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBiYXNlICYmCisJZWNobyAxID5maWxlMSAmJgorCWdpdCBhZGQgLXUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJzcXVhc2ghIGZpcnN0IgorCisJZ2l0IHRhZyBmaW5hbC1zcXVhc2ggJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmViYXNlIC0tYXV0b3NxdWFzaCAtaSBIRUFEXl5eICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3QgMyA9ICQod2MgLWwgPGFjdHVhbCkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBmaW5hbC1zcXVhc2ggJiYKKwl0ZXN0IDEgPSAiJChnaXQgY2F0LWZpbGUgYmxvYiBIRUFEXjpmaWxlMSkiICYmCisJdGVzdCAyID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReIHwgZ3JlcCBmaXJzdCB8IHdjIC1sKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXNzcGVsbGVkIGF1dG8gc3F1YXNoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBiYXNlICYmCisJZWNobyAxID5maWxlMSAmJgorCWdpdCBhZGQgLXUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJzcXVhc2ghIGZvcnN0IgorCWdpdCB0YWcgZmluYWwtbWlzc3F1YXNoICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJlYmFzZSAtLWF1dG9zcXVhc2ggLWkgSEVBRF5eXiAmJgorCWdpdCBsb2cgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwl0ZXN0IDQgPSAkKHdjIC1sIDxhY3R1YWwpICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgZmluYWwtbWlzc3F1YXNoICYmCisJdGVzdCAwID0gJChnaXQgcmV2LWxpc3QgZmluYWwtbWlzc3F1YXNoLi4uSEVBRCB8IHdjIC1sKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MTYtcmViYXNlLW9udG8tdGhyZWVkb3RzLnNoIGIvdC90MzQxNi1yZWJhc2Utb250by10aHJlZWRvdHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGRmMmY2NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MTYtcmViYXNlLW9udG8tdGhyZWVkb3RzLnNoCkBAIC0wLDAgKzEsMTA1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSAtLW9udG8gQS4uLkInCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZL2xpYi1yZWJhc2Uuc2giCisKKyMgUmViYXNlIG9ubHkgdGhlIHRpcCBjb21taXQgb2YgInRvcGljIiBvbiBtZXJnZSBiYXNlIGJldHdlZW4gIm1hc3RlciIKKyMgYW5kICJ0b3BpYyIuICBDYW5ub3QgZG8gdGhpcyBmb3IgInNpZGUiIHdpdGggIm1hc3RlciIgYmVjYXVzZSB0aGVyZQorIyBpcyBubyBzaW5nbGUgbWVyZ2UgYmFzZS4KKyMKKyMKKyMJICAgIEYtLS1HIHRvcGljICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHJworIwkgICAvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLworIyBBLS0tQi0tLUMtLS1ELS0tRSBtYXN0ZXIgICAgICAtLT4gICAgICAgQS0tLUItLS1DLS0tRC0tLUUKKyMgICAgICBcICAgXCAvCisjCVwgICB4CisjCSBcIC8gXAorIwkgIEgtLS1JLS0tSi0tLUsgc2lkZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X2NvbW1pdCBBICYmCisJdGVzdF9jb21taXQgQiAmJgorCWdpdCBicmFuY2ggc2lkZSAmJgorCXRlc3RfY29tbWl0IEMgJiYKKwlnaXQgYnJhbmNoIHRvcGljICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwl0ZXN0X2NvbW1pdCBIICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSBIICYmCisJZ2l0IHRhZyBEICYmCisJdGVzdF9jb21taXQgRSAmJgorCWdpdCBjaGVja291dCB0b3BpYyAmJgorCXRlc3RfY29tbWl0IEYgJiYKKwl0ZXN0X2NvbW1pdCBHICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgQyAmJgorCWdpdCB0YWcgSSAmJgorCXRlc3RfY29tbWl0IEogJiYKKwl0ZXN0X2NvbW1pdCBLCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW9udG8gbWFzdGVyLi4udG9waWMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IHRvcGljICYmCisJZ2l0IHJlc2V0IC0taGFyZCBHICYmCisKKwlnaXQgcmViYXNlIC0tb250byBtYXN0ZXIuLi50b3BpYyBGICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXjEgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgQ14wID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW9udG8gbWFzdGVyLi4uJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCB0b3BpYyAmJgorCWdpdCByZXNldCAtLWhhcmQgRyAmJgorCisJZ2l0IHJlYmFzZSAtLW9udG8gbWFzdGVyLi4uIEYgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUReMSA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSBDXjAgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tb250byBtYXN0ZXIuLi5zaWRlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBzaWRlICYmCisJZ2l0IHJlc2V0IC0taGFyZCBLICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tb250byBtYXN0ZXIuLi5zaWRlIEoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tb250byBtYXN0ZXIuLi50b3BpYycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgdG9waWMgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEcgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwlFWFBFQ1RfQ09VTlQ9MSBnaXQgcmViYXNlIC1pIC0tb250byBtYXN0ZXIuLi50b3BpYyBGICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXjEgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgQ14wID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLW9udG8gbWFzdGVyLi4uJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCB0b3BpYyAmJgorCWdpdCByZXNldCAtLWhhcmQgRyAmJgorCXNldF9mYWtlX2VkaXRvciAmJgorCUVYUEVDVF9DT1VOVD0xIGdpdCByZWJhc2UgLWkgLS1vbnRvIG1hc3Rlci4uLiBGICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXjEgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgQ14wID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLW9udG8gbWFzdGVyLi4uc2lkZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWdpdCByZXNldCAtLWhhcmQgSyAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSAtLW9udG8gbWFzdGVyLi4uc2lkZSBKCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQxNy1yZWJhc2Utd2hpdGVzcGFjZS1maXguc2ggYi90L3QzNDE3LXJlYmFzZS13aGl0ZXNwYWNlLWZpeC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMjBhNzQwCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzQxNy1yZWJhc2Utd2hpdGVzcGFjZS1maXguc2gKQEAgLTAsMCArMSwxMjYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmViYXNlIC0td2hpdGVzcGFjZT1maXgKKworVGhpcyB0ZXN0IHJ1bnMgZ2l0IHJlYmFzZSAtLXdoaXRlc3BhY2U9Zml4IGFuZCBtYWtlIHN1cmUgdGhhdCBpdCB3b3Jrcy4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgcHJlcGFyZSBpbml0aWFsIHJldmlzaW9uIG9mICJmaWxlIiB3aXRoIGEgYmxhbmsgbGluZSBhdCB0aGUgZW5kCitjYXQgPmZpbGUgPDxFT0YKK2EKK2IKK2MKKworRU9GCisKKyMgZXhwZWN0ZWQgY29udGVudHMgaW4gImZpbGUiIGFmdGVyIHJlYmFzZQorY2F0ID5leHBlY3QtZmlyc3QgPDxFT0YKK2EKK2IKK2MKK0VPRgorCisjIHByZXBhcmUgc2Vjb25kIHJldmlzaW9uIG9mICJmaWxlIgorY2F0ID5zZWNvbmQgPDxFT0YKK2EKK2IKK2MKKworZAorZQorZgorCisKKworCitFT0YKKworIyBleHBlY3RlZCBjb250ZW50cyBpbiBzZWNvbmQgcmV2aXNpb24gYWZ0ZXIgcmViYXNlCitjYXQgPmV4cGVjdC1zZWNvbmQgPDxFT0YKK2EKK2IKK2MKKworZAorZQorZgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW5rIGxpbmUgYXQgZW5kIG9mIGZpbGU7IGV4dGVuZCBhdCBlbmQgb2YgZmlsZScgJworCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiSW5pdGlhbCBlbXB0eSBjb21taXQiICYmCisJZ2l0IGFkZCBmaWxlICYmIGdpdCBjb21taXQgLW0gZmlyc3QgJiYKKwltdiBzZWNvbmQgZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJglnaXQgY29tbWl0IC1tIHNlY29uZCAmJgorCWdpdCByZWJhc2UgLS13aGl0ZXNwYWNlPWZpeCBIRUFEXl4gJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFEXjpmaWxlIGV4cGVjdC1maXJzdCAmJgorCXRlc3RfY21wIGZpbGUgZXhwZWN0LXNlY29uZAorJworCisjIHByZXBhcmUgdGhpcmQgcmV2aXNpb24gb2YgImZpbGUiCitzZWQgLWUncy9aLy8nID50aGlyZCA8PEVPRgorYQorYgorYworCitkCitlCitmCisgICAgWgorIFoKK2gKK2kKK2oKK2sKK2wKK0VPRgorCitzZWQgLWUncy8gLy9nJyA8dGhpcmQgPmV4cGVjdC10aGlyZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0d28gYmxhbmtzIGxpbmUgYXQgZW5kIG9mIGZpbGU7IGV4dGVuZCBhdCBlbmQgb2YgZmlsZScgJworCWNwIHRoaXJkIGZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmIGdpdCBjb21taXQgLW0gdGhpcmQgJiYKKwlnaXQgcmViYXNlIC0td2hpdGVzcGFjZT1maXggSEVBRF5eICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgSEVBRF46ZmlsZSBleHBlY3Qtc2Vjb25kICYmCisJdGVzdF9jbXAgZmlsZSBleHBlY3QtdGhpcmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2FtZSwgYnV0IGRvIG5vdCByZW1vdmUgdHJhaWxpbmcgc3BhY2VzJyAnCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgIi1ibGFuay1hdC1lb2wiICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCWNwIHRoaXJkIGZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmIGdpdCBjb21taXQgLW0gdGhpcmQgJiYKKwlnaXQgcmViYXNlIC0td2hpdGVzcGFjZT1maXggSEVBRF5eCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgSEVBRF46ZmlsZSBleHBlY3Qtc2Vjb25kICYmCisJdGVzdF9jbXAgZmlsZSB0aGlyZAorJworCitzZWQgLWUncy9aLy8nID5iZWdpbm5pbmcgPDxFT0YKK2EKKwkJICAgIFoKKyAgICAgICBaCitFT0YKKworY2F0ID5leHBlY3QtYmVnaW5uaW5nIDw8RU9GCithCisKKworMQorMgorMworNAorNQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0IGJlZ2lubmluZyBvZiBmaWxlJyAnCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgImJsYW5rLWF0LWVvbCIgJiYKKwljcCBiZWdpbm5pbmcgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gYmVnaW5uaW5nIGZpbGUgJiYKKwlmb3IgaSBpbiAxIDIgMyA0IDU7IGRvCisJCWVjaG8gJGkKKwlkb25lID4+IGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG1vcmUgZmlsZQkmJgorCWdpdCByZWJhc2UgLS13aGl0ZXNwYWNlPWZpeCBIRUFEXl4gJiYKKwl0ZXN0X2NtcCBmaWxlIGV4cGVjdC1iZWdpbm5pbmcKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNTAxLXJldmVydC1jaGVycnktcGljay5zaCBiL3QvdDM1MDEtcmV2ZXJ0LWNoZXJyeS1waWNrLnNoCmluZGV4IGJiNGNmMDAuLjdmODU4MTUgMTAwNzU1Ci0tLSBhL3QvdDM1MDEtcmV2ZXJ0LWNoZXJyeS1waWNrLnNoCisrKyBiL3QvdDM1MDEtcmV2ZXJ0LWNoZXJyeS1waWNrLnNoCkBAIC02Niw3ICs2Niw3IEBACiAJZWNobyBjb250ZW50ID5leHRyYV9maWxlICYmCiAJZ2l0IGFkZCBleHRyYV9maWxlICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldmVydCBIRUFEIDI+ZXJyb3JzICYmCi0JZ3JlcCAiRGlydHkgaW5kZXgiIGVycm9ycworCWdyZXAgIllvdXIgbG9jYWwgY2hhbmdlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAiIGVycm9ycwogCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDM2MDAtcm0uc2ggYi90L3QzNjAwLXJtLnNoCmluZGV4IDc2YjFiYjQuLjBhYWYwYWQgMTAwNzU1Ci0tLSBhL3QvdDM2MDAtcm0uc2gKKysrIGIvdC90MzYwMC1ybS5zaApAQCAtMjcxLDQgKzI3MSwxMiBAQAogCXRlc3QgIiRzdGF0dXMiICE9IDAKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gcmVtb3ZlcyBzdWJkaXJlY3RvcmllcyByZWN1cnNpdmVseScgJworCW1rZGlyIC1wIGRpci9zdWJkaXIvc3Vic3ViZGlyICYmCisJZWNobyBjb250ZW50ID5kaXIvc3ViZGlyL3N1YnN1YmRpci9maWxlICYmCisJZ2l0IGFkZCBkaXIvc3ViZGlyL3N1YnN1YmRpci9maWxlICYmCisJZ2l0IHJtIC1mIGRpci9zdWJkaXIvc3Vic3ViZGlyL2ZpbGUgJiYKKwkhIHRlc3QgLWQgZGlyCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzcwMC1hZGQuc2ggYi90L3QzNzAwLWFkZC5zaAppbmRleCBmZTkzY2U1Li41MjVjOWE4IDEwMDc1NQotLS0gYS90L3QzNzAwLWFkZC5zaAorKysgYi90L3QzNzAwLWFkZC5zaApAQCAtMjQzLDQgKzI0MywyMSBAQAogCSEgKCBnaXQgbHMtZmlsZXMgZm9vYmFyIHwgZ3JlcCBmb29iYXIgKQogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkIHRvIHJlc29sdmUgY29uZmxpY3RzIG9uIG90aGVyd2lzZSBpZ25vcmVkIHBhdGgnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJSD0kKGdpdCByZXYtcGFyc2UgOjEvMi9hKSAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRIIDEJdHJhY2stdGhpcyIKKwkJZWNobyAiMTAwNjQ0ICRIIDMJdHJhY2stdGhpcyIKKwkpIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwllY2hvIHRyYWNrLXRoaXMgPj4uZ2l0aWdub3JlICYmCisJZWNobyByZXNvbHZlZCA+dHJhY2stdGhpcyAmJgorCWdpdCBhZGQgdHJhY2stdGhpcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIG5vbi1leGlzdGVudCIgc2hvdWxkIGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIG5vbi1leGlzdGVudCAmJgorCSEgKGdpdCBscy1maWxlcyB8IGdyZXAgIm5vbi1leGlzdGVudCIpCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzcwMS1hZGQtaW50ZXJhY3RpdmUuc2ggYi90L3QzNzAxLWFkZC1pbnRlcmFjdGl2ZS5zaAppbmRleCA2MmZkNjVlLi5iNmViYTZhIDEwMDc1NQotLS0gYS90L3QzNzAxLWFkZC1pbnRlcmFjdGl2ZS5zaAorKysgYi90L3QzNzAxLWFkZC1pbnRlcmFjdGl2ZS5zaApAQCAtMTM4LDYgKzEzOCwyMCBAQAogCXRlc3RfY21wIGV4cGVjdGVkIG91dHB1dAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdza2lwIGZpbGVzIHNpbWlsYXJseSBhcyBjb21taXQgLWEnICcKKwlnaXQgcmVzZXQgJiYKKwllY2hvIGZpbGUgPi5naXRpZ25vcmUgJiYKKwllY2hvIGNoYW5nZWQgPmZpbGUgJiYKKwllY2hvIHkgfCBnaXQgYWRkIC1wIGZpbGUgJiYKKwlnaXQgZGlmZiA+b3V0cHV0ICYmCisJZ2l0IHJlc2V0ICYmCisJZ2l0IGNvbW1pdCAtYW0gY29tbWl0ICYmCisJZ2l0IGRpZmYgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0cHV0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorJworcm0gLWYgLmdpdGlnbm9yZQorCiBpZiB0ZXN0ICIkKGdpdCBjb25maWcgLS1ib29sIGNvcmUuZmlsZW1vZGUpIiA9IGZhbHNlCiB0aGVuCiAJc2F5ICdza2lwcGluZyBmaWxlbW9kZSB0ZXN0cyAoZmlsZXN5c3RlbSBkb2VzIG5vdCBwcm9wZXJseSBzdXBwb3J0IG1vZGVzKScKQEAgLTIxNCw0ICsyMjgsNDEgQEAKIAl0ZXN0X2NtcCBleHBlY3RlZCBkaWZmCiAnCiAKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2RpZmYgLS1naXQgYS9ub24tZW1wdHkgYi9ub24tZW1wdHkKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggZDk1ZjNhZC4uMDAwMDAwMAorLS0tIGEvbm9uLWVtcHR5CisrKysgL2Rldi9udWxsCitAQCAtMSArMCwwIEBACistY29udGVudAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGluZyBhIG5vbi1lbXB0eSBmaWxlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gY29udGVudCA+bm9uLWVtcHR5ICYmCisJZ2l0IGFkZCBub24tZW1wdHkgJiYKKwlnaXQgY29tbWl0IC1tIG5vbi1lbXB0eSAmJgorCXJtIG5vbi1lbXB0eSAmJgorCWVjaG8geSB8IGdpdCBhZGQgLXAgbm9uLWVtcHR5ICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgPmRpZmYgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBkaWZmCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2RpZmYgLS1naXQgYS9lbXB0eSBiL2VtcHR5CitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IGU2OWRlMjkuLjAwMDAwMDAKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGluZyBhbiBlbXB0eSBmaWxlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCT4gZW1wdHkgJiYKKwlnaXQgYWRkIGVtcHR5ICYmCisJZ2l0IGNvbW1pdCAtbSBlbXB0eSAmJgorCXJtIGVtcHR5ICYmCisJZWNobyB5IHwgZ2l0IGFkZCAtcCBlbXB0eSAmJgorCWdpdCBkaWZmIC0tY2FjaGVkID5kaWZmICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZGlmZgorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM3MDItYWRkLWVkaXQuc2ggYi90L3QzNzAyLWFkZC1lZGl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRlZTQ3Y2MKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNzAyLWFkZC1lZGl0LnNoCkBAIC0wLDAgKzEsMTIxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEpvaGFubmVzIEUuIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nYWRkIC1lIGJhc2ljIHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisKKworY2F0ID4gZmlsZSA8PCBFT0YKK0xPLCBwcmFpc2Ugb2YgdGhlIHByb3dlc3Mgb2YgcGVvcGxlLWtpbmdzCitvZiBzcGVhci1hcm1lZCBEYW5lcywgaW4gZGF5cyBsb25nIHNwZWQsCit3ZSBoYXZlIGhlYXJkLCBhbmQgd2hhdCBob25vciB0aGUgYXRoZWxpbmdzIHdvbiEKK09mdCBTY3lsZCB0aGUgU2NlZmluZyBmcm9tIHNxdWFkcm9uZWQgZm9lcywKK2Zyb20gbWFueSBhIHRyaWJlLCB0aGUgbWVhZC1iZW5jaCB0b3JlLAorYXdpbmcgdGhlIGVhcmxzLiBTaW5jZSBlcnN0IGhlIGxheQorZnJpZW5kbGVzcywgYSBmb3VuZGxpbmcsIGZhdGUgcmVwYWlkIGhpbToKK2ZvciBoZSB3YXhlZCB1bmRlciB3ZWxraW4sIGluIHdlYWx0aCBoZSB0aHJvdmUsCit0aWxsIGJlZm9yZSBoaW0gdGhlIGZvbGssIGJvdGggZmFyIGFuZCBuZWFyLAord2hvIGhvdXNlIGJ5IHRoZSB3aGFsZS1wYXRoLCBoZWFyZCBoaXMgbWFuZGF0ZSwKK2dhdmUgaGltIGdpZnRzOiAgYSBnb29kIGtpbmcgaGUhCitFT0YKKworY2F0ID4gc2Vjb25kLXBhcnQgPDwgRU9GCitUbyBoaW0gYW4gaGVpciB3YXMgYWZ0ZXJ3YXJkIGJvcm4sCithIHNvbiBpbiBoaXMgaGFsbHMsIHdob20gaGVhdmVuIHNlbnQKK3RvIGZhdm9yIHRoZSBmb2xrLCBmZWVsaW5nIHRoZWlyIHdvZQordGhhdCBlcnN0IHRoZXkgaGFkIGxhY2tlZCBhbiBlYXJsIGZvciBsZWFkZXIKK3NvIGxvbmcgYSB3aGlsZTsgdGhlIExvcmQgZW5kb3dlZCBoaW0sCit0aGUgV2llbGRlciBvZiBXb25kZXIsIHdpdGggd29ybGQncyByZW5vd24uCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKworCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCBmaWxlCisKKycKKworY2F0ID4gZXhwZWN0ZWQtcGF0Y2ggPDwgRU9GCitkaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUKK2luZGV4IGI5ODM0YjUuLjkwMjBhY2IgMTAwNjQ0CistLS0gYS9maWxlCisrKysgYi9maWxlCitAQCAtMSwxMSArMSw2IEBACistTE8sIHByYWlzZSBvZiB0aGUgcHJvd2VzcyBvZiBwZW9wbGUta2luZ3MKKy1vZiBzcGVhci1hcm1lZCBEYW5lcywgaW4gZGF5cyBsb25nIHNwZWQsCistd2UgaGF2ZSBoZWFyZCwgYW5kIHdoYXQgaG9ub3IgdGhlIGF0aGVsaW5ncyB3b24hCistT2Z0IFNjeWxkIHRoZSBTY2VmaW5nIGZyb20gc3F1YWRyb25lZCBmb2VzLAorLWZyb20gbWFueSBhIHRyaWJlLCB0aGUgbWVhZC1iZW5jaCB0b3JlLAorLWF3aW5nIHRoZSBlYXJscy4gU2luY2UgZXJzdCBoZSBsYXkKKy1mcmllbmRsZXNzLCBhIGZvdW5kbGluZywgZmF0ZSByZXBhaWQgaGltOgorLWZvciBoZSB3YXhlZCB1bmRlciB3ZWxraW4sIGluIHdlYWx0aCBoZSB0aHJvdmUsCistdGlsbCBiZWZvcmUgaGltIHRoZSBmb2xrLCBib3RoIGZhciBhbmQgbmVhciwKKy13aG8gaG91c2UgYnkgdGhlIHdoYWxlLXBhdGgsIGhlYXJkIGhpcyBtYW5kYXRlLAorLWdhdmUgaGltIGdpZnRzOiAgYSBnb29kIGtpbmcgaGUhCisrVG8gaGltIGFuIGhlaXIgd2FzIGFmdGVyd2FyZCBib3JuLAorK2Egc29uIGluIGhpcyBoYWxscywgd2hvbSBoZWF2ZW4gc2VudAorK3RvIGZhdm9yIHRoZSBmb2xrLCBmZWVsaW5nIHRoZWlyIHdvZQorK3RoYXQgZXJzdCB0aGV5IGhhZCBsYWNrZWQgYW4gZWFybCBmb3IgbGVhZGVyCisrc28gbG9uZyBhIHdoaWxlOyB0aGUgTG9yZCBlbmRvd2VkIGhpbSwKKyt0aGUgV2llbGRlciBvZiBXb25kZXIsIHdpdGggd29ybGQncyByZW5vd24uCitFT0YKKworY2F0ID4gcGF0Y2ggPDwgRU9GCitkaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUKK2luZGV4IGI5ODM0YjUuLmVmNmU5NGMgMTAwNjQ0CistLS0gYS9maWxlCisrKysgYi9maWxlCitAQCAtMywxICszLDMzMyBAQCBvZiBzcGVhci1hcm1lZCBEYW5lcywgaW4gZGF5cyBsb25nIHNwZWQsCisgd2UgaGF2ZSBoZWFyZCwgYW5kIHdoYXQgaG9ub3IgdGhlIGF0aGVsaW5ncyB3b24hCisrCisgT2Z0IFNjeWxkIHRoZSBTY2VmaW5nIGZyb20gc3F1YWRyb25lZCBmb2VzLAorQEAgLTIsNyArMSw1IEBAIGF3aW5nIHRoZSBlYXJscy4gU2luY2UgZXJzdCBoZSBsYXkKKyBmcmllbmRsZXNzLCBhIGZvdW5kbGluZywgZmF0ZSByZXBhaWQgaGltOgorKworIGZvciBoZSB3YXhlZCB1bmRlciB3ZWxraW4sIGluIHdlYWx0aCBoZSB0aHJvdmUsCitFT0YKKworY2F0ID4gZXhwZWN0ZWQgPDwgRU9GCitkaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUKK2luZGV4IGI5ODM0YjUuLmVmNmU5NGMgMTAwNjQ0CistLS0gYS9maWxlCisrKysgYi9maWxlCitAQCAtMSwxMCArMSwxMiBAQAorIExPLCBwcmFpc2Ugb2YgdGhlIHByb3dlc3Mgb2YgcGVvcGxlLWtpbmdzCisgb2Ygc3BlYXItYXJtZWQgRGFuZXMsIGluIGRheXMgbG9uZyBzcGVkLAorIHdlIGhhdmUgaGVhcmQsIGFuZCB3aGF0IGhvbm9yIHRoZSBhdGhlbGluZ3Mgd29uIQorKworIE9mdCBTY3lsZCB0aGUgU2NlZmluZyBmcm9tIHNxdWFkcm9uZWQgZm9lcywKKyBmcm9tIG1hbnkgYSB0cmliZSwgdGhlIG1lYWQtYmVuY2ggdG9yZSwKKyBhd2luZyB0aGUgZWFybHMuIFNpbmNlIGVyc3QgaGUgbGF5CisgZnJpZW5kbGVzcywgYSBmb3VuZGxpbmcsIGZhdGUgcmVwYWlkIGhpbToKKysKKyBmb3IgaGUgd2F4ZWQgdW5kZXIgd2Vsa2luLCBpbiB3ZWFsdGggaGUgdGhyb3ZlLAorIHRpbGwgYmVmb3JlIGhpbSB0aGUgZm9saywgYm90aCBmYXIgYW5kIG5lYXIsCisgd2hvIGhvdXNlIGJ5IHRoZSB3aGFsZS1wYXRoLCBoZWFyZCBoaXMgbWFuZGF0ZSwKK0VPRgorCitlY2hvICIjISRTSEVMTF9QQVRIIiA+ZmFrZS1lZGl0b3Iuc2gKK2NhdCA+PiBmYWtlLWVkaXRvci5zaCA8PFxFT0YKK212IC1mICIkMSIgb3JpZy1wYXRjaCAmJgorbXYgLWYgcGF0Y2ggIiQxIgorRU9GCisKK3Rlc3Rfc2V0X2VkaXRvciAiJChwd2QpL2Zha2UtZWRpdG9yLnNoIgorY2htb2QgYSt4IGZha2UtZWRpdG9yLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCAtZScgJworCisJY3Agc2Vjb25kLXBhcnQgZmlsZSAmJgorCWdpdCBhZGQgLWUgJiYKKwl0ZXN0X2NtcCBzZWNvbmQtcGFydCBmaWxlICYmCisJdGVzdF9jbXAgb3JpZy1wYXRjaCBleHBlY3RlZC1wYXRjaCAmJgorCWdpdCBkaWZmIC0tY2FjaGVkID4gb3V0ICYmCisJdGVzdF9jbXAgb3V0IGV4cGVjdGVkCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzOTAwLWkxOG4tY29tbWl0LnNoIGIvdC90MzkwMC1pMThuLWNvbW1pdC5zaAppbmRleCA3ODRjMzFhLi4yNTZjNGM5IDEwMDc1NQotLS0gYS90L3QzOTAwLWkxOG4tY29tbWl0LnNoCisrKyBiL3QvdDM5MDAtaTE4bi1jb21taXQuc2gKQEAgLTksNyArOSwxNSBAQAogCiBjb21wYXJlX3dpdGggKCkgewogCWdpdCBzaG93IC1zICQxIHwgc2VkIC1lICcxLC9eJC9kJyAtZSAncy9eICAgIC8vJyA+Y3VycmVudCAmJgotCXRlc3RfY21wIGN1cnJlbnQgIiQyIgorCWNhc2UgIiQzIiBpbgorCScnKQorCQl0ZXN0X2NtcCAiJDIiIGN1cnJlbnQgOzsKKwk/KikKKwkJaWNvbnYgLWYgIiQzIiAtdCBVVEYtOCA+Y3VycmVudC51dGY4IDxjdXJyZW50ICYmCisJCWljb252IC1mICIkMyIgLXQgVVRGLTggPmV4cGVjdC51dGY4IDwiJDIiICYmCisJCXRlc3RfY21wIGV4cGVjdC51dGY4IGN1cnJlbnQudXRmOAorCQk7OworCWVzYWMKIH0KIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCkBAIC0yNiw3ICszNCw3IEBACiAJdGVzdCB6ID0gInokRSIKICcKIAotZm9yIEggaW4gSVNPLTg4NTktMSBFVUNKUCBJU08tMjAyMi1KUAorZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQIElTTy0yMDIyLUpQCiBkbwogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIHNldHVwIiAnCiAJCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyAkSCAmJgpAQCAtMzYsNyArNDQsNyBAQAogCScKIGRvbmUKIAotZm9yIEggaW4gSVNPLTg4NTktMSBFVUNKUCBJU08tMjAyMi1KUAorZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQIElTTy0yMDIyLUpQCiBkbwogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNoZWNrIGVuY29kaW5nIGhlYWRlciBmb3IgJEgiICcKIAkJRT0kKGdpdCBjYXQtZmlsZSBjb21taXQgJyRIJyB8IHNlZCAtbmUgInMvXmVuY29kaW5nIC8vcCIpICYmCkBAIC01MywxNCArNjEsMTQgQEAKIAllbHNlCiAJCXRlc3QgeiA9ICJ6JFoiCiAJZmkgJiYKLQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgdXRmLTgKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTgKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnSVNPLTg4NTktMSBzaG91bGQgYmUgc2hvd24gaW4gVVRGLTggbm93JyAnCi0JY29tcGFyZV93aXRoIElTTy04ODU5LTEgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvMS1VVEYtOC50eHQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0lTTzg4NTktMSBzaG91bGQgYmUgc2hvd24gaW4gVVRGLTggbm93JyAnCisJY29tcGFyZV93aXRoIElTTzg4NTktMSAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8xLVVURi04LnR4dAogJwogCi1mb3IgSCBpbiBFVUNKUCBJU08tMjAyMi1KUAorZm9yIEggaW4gZXVjSlAgSVNPLTIwMjItSlAKIGRvCiAJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJEggc2hvdWxkIGJlIHNob3duIGluIFVURi04IG5vdyIgJwogCQljb21wYXJlX3dpdGggJyRIJyAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8yLVVURi04LnR4dApAQCAtNzgsNyArODYsNyBAQAogCWZpCiAnCiAKLWZvciBIIGluIElTTy04ODU5LTEgRVVDSlAgSVNPLTIwMjItSlAKK2ZvciBIIGluIElTTzg4NTktMSBldWNKUCBJU08tMjAyMi1KUAogZG8KIAl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkSCBzaG91bGQgYmUgc2hvd24gaW4gaXRzZWxmIG5vdyIgJwogCQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgJyRIJyAmJgpAQCAtODcsMzIgKzk1LDM4IEBACiBkb25lCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpZyB0byB0d2VhayBjdXN0b21pemF0aW9uJyAnCi0JZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIHV0Zi04CisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIFVURi04CiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0lTTy04ODU5LTEgc2hvdWxkIGJlIHNob3duIGluIFVURi04IG5vdycgJwotCWNvbXBhcmVfd2l0aCBJU08tODg1OS0xICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLzEtVVRGLTgudHh0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdJU084ODU5LTEgc2hvdWxkIGJlIHNob3duIGluIFVURi04IG5vdycgJworCWNvbXBhcmVfd2l0aCBJU084ODU5LTEgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvMS1VVEYtOC50eHQKICcKIAotZm9yIEggaW4gRVVDSlAgSVNPLTIwMjItSlAKK2ZvciBIIGluIGV1Y0pQIElTTy0yMDIyLUpQCiBkbwogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIHNob3VsZCBiZSBzaG93biBpbiBVVEYtOCBub3ciICcKIAkJY29tcGFyZV93aXRoICckSCcgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvMi1VVEYtOC50eHQKIAknCiBkb25lCiAKLWZvciBKIGluIEVVQ0pQIElTTy0yMDIyLUpQCitmb3IgSiBpbiBldWNKUCBJU08tMjAyMi1KUAogZG8KKwlpZiB0ZXN0ICIkSiIgPSBJU08tMjAyMi1KUAorCXRoZW4KKwkJSUNPTlY9JEoKKwllbHNlCisJCUlDT05WPQorCWZpCiAJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nICRKCi0JZm9yIEggaW4gRVVDSlAgSVNPLTIwMjItSlAKKwlmb3IgSCBpbiBldWNKUCBJU08tMjAyMi1KUAogCWRvCiAJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIHNob3VsZCBiZSBzaG93biBpbiAkSiBub3ciICcKLQkJCWNvbXBhcmVfd2l0aCAnJEgnICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLyckSicudHh0CisJCQljb21wYXJlX3dpdGggJyRIJyAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8nJEonLnR4dCAkSUNPTlYKIAkJJwogCWRvbmUKIGRvbmUKIAotZm9yIEggaW4gSVNPLTg4NTktMSBFVUNKUCBJU08tMjAyMi1KUAorZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQIElTTy0yMDIyLUpQCiBkbwogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIk5vIGNvbnZlcnNpb24gd2l0aCAkSCIgJwogCQljb21wYXJlX3dpdGggIi0tZW5jb2Rpbmc9bm9uZSAnJEgnIiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8nJEgnLnR4dApkaWZmIC0tZ2l0IGEvdC90MzkwMC9JU08tODg1OS0xLnR4dCBiL3QvdDM5MDAvSVNPODg1OS0xLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdC90MzkwMC9JU08tODg1OS0xLnR4dApyZW5hbWUgdG8gdC90MzkwMC9JU084ODU5LTEudHh0CmRpZmYgLS1naXQgYS90L3QzOTAwL0VVQ0pQLnR4dCBiL3QvdDM5MDAvZXVjSlAudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0L3QzOTAwL0VVQ0pQLnR4dApyZW5hbWUgdG8gdC90MzkwMC9ldWNKUC50eHQKZGlmZiAtLWdpdCBhL3QvdDM5MDEtaTE4bi1wYXRjaC5zaCBiL3QvdDM5MDEtaTE4bi1wYXRjaC5zaAppbmRleCA3NjU1ZGEzLi4zMWE1NzcwIDEwMDc1NQotLS0gYS90L3QzOTAxLWkxOG4tcGF0Y2guc2gKKysrIGIvdC90MzkwMS1pMThuLXBhdGNoLnNoCkBAIC0xNyw5ICsxNyw5IEBACiAJCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRH4kaiB8CiAJCWNhc2UgIiRoZWFkZXIiIGluCiAJCTg4NTkpCi0JCQlncmVwICJeZW5jb2RpbmcgSVNPLTg4NTktMSIgOzsKKwkJCWdyZXAgIl5lbmNvZGluZyBJU084ODU5LTEiIDs7CiAJCSopCi0JCQkhIGdyZXAgIl5lbmNvZGluZyBJU08tODg1OS0xIiA7OworCQkJZ3JlcCAiXmVuY29kaW5nIElTTzg4NTktMSI7IHRlc3QgIiQ/IiAhPSAwIDs7CiAJCWVzYWMgfHwgewogCQkJYmFkPTEKIAkJCWJyZWFrCkBAIC01NSw3ICs1NSw3IEBACiAJZ2l0IGNvbW1pdCAtcyAtbSAiU2Vjb25kIG9uIHNpZGUiICYmCiAKIAkjIHRoZSBzZWNvbmQgb25lIG9uIHRoZSBzaWRlIGJyYW5jaCBpcyBJU08tODg1OS0xCi0JZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTy04ODU5LTEgJiYKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPODg1OS0xICYmCiAJIyB1c2UgYXV0aG9yIGFuZCBjb21taXR0ZXIgbmFtZSBpbiBJU08tODg1OS0xIHRvIG1hdGNoIGl0LgogCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEtODg1OS0xLnR4dCAmJgogCXRlc3RfdGljayAmJgpAQCAtNjgsMTQgKzY4LDE0IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCBvdXRwdXQgKElTTy04ODU5LTEpJyAnCi0JZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIElTTy04ODU5LTEgJiYKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPODg1OS0xICYmCiAKIAlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IG1hc3Rlci4uSEVBRF4gPm91dC1sMSAmJgogCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgSEVBRF4gPm91dC1sMiAmJgotCWdyZXAgIl5Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMSIgb3V0LWwxICYmCi0JZ3JlcCAiXkZyb206ID0/SVNPLTg4NTktMT9xPz1DMT1FOT1FRD0yMD1GMz1GQT89IiBvdXQtbDEgJiYKLQlncmVwICJeQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTEiIG91dC1sMiAmJgotCWdyZXAgIl5Gcm9tOiA9P0lTTy04ODU5LTE/cT89QzE9RTk9RUQ9MjA9RjM9RkE/PSIgb3V0LWwyCisJZ3JlcCAiXkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU084ODU5LTEiIG91dC1sMSAmJgorCWdyZXAgIl5Gcm9tOiA9P0lTTzg4NTktMT9xPz1DMT1FOT1FRD0yMD1GMz1GQT89IiBvdXQtbDEgJiYKKwlncmVwICJeQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTzg4NTktMSIgb3V0LWwyICYmCisJZ3JlcCAiXkZyb206ID0/SVNPODg1OS0xP3E/PUMxPUU5PUVEPTIwPUYzPUZBPz0iIG91dC1sMgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggb3V0cHV0IChVVEYtOCknICcKQEAgLTExMCw3ICsxMTAsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgKFUvTCknICcKIAlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTggJiYKLQlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBJU084ODU5LTEgJiYKIAkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLXV0ZjgudHh0ICYmCiAKIAlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKQEAgLTEyMSw4ICsxMjEsOCBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgKEwvTCknICcKIAkjIEluIHRoaXMgdGVzdCB3ZSB3YW50IElTTy04ODU5LTEgZW5jb2RlZCBjb21taXRzIGFzIHRoZSByZXN1bHQKLQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgotCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBJU08tODg1OS0xICYmCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTzg4NTktMSAmJgorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBJU084ODU5LTEgJiYKIAkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLTg4NTktMS50eHQgJiYKIAogCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgpAQCAtMTM0LDcgKzEzNCw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgKEwvVSknICcKIAkjIFRoaXMgaXMgcGF0aG9sb2dpY2FsIC0tIHVzZSBVVEYtOCBhcyBpbnRlcm1lZGlhdGUgZm9ybQogCSMgdG8gZ2V0IElTTy04ODU5LTEgcmVzdWx0cy4KLQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU084ODU5LTEgJiYKIAlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgVVRGLTggJiYKIAkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLTg4NTktMS50eHQgJiYKIApAQCAtMTYyLDggKzE2Miw4IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayhML0wpJyAnCiAJIyBCb3RoIHRoZSBjb21taXRlbmNvZGluZyBhbmQgbG9nb3V0cHV0ZW5jb2RpbmcgaXMgc2V0IHRvIElTTy04ODU5LTEKIAotCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU08tODg1OS0xICYmCi0JZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIElTTy04ODU5LTEgJiYKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPODg1OS0xICYmCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIElTTzg4NTktMSAmJgogCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEtODg1OS0xLnR4dCAmJgogCiAJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKQEAgLTE3OCw3ICsxNzgsNyBAQAogCSMgQ29tbWl0ZW5jb2RpbmcgaXMgc2V0IHRvIFVURi04IGJ1dCBsb2dvdXRwdXRlbmNvZGluZyBpcyBJU08tODg1OS0xCiAKIAlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTggJiYKLQlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBJU084ODU5LTEgJiYKIAkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLXV0ZjgudHh0ICYmCiAKIAlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgpAQCAtMTkzLDcgKzE5Myw3IEBACiAJIyBBZ2FpbiwgdGhlIGNvbW1pdGVuY29kaW5nIGlzIHNldCB0byBJU08tODg1OS0xIGJ1dAogCSMgbG9nb3V0cHV0ZW5jb2RpbmcgaXMgc2V0IHRvIFVURi04LgogCi0JZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTy04ODU5LTEgJiYKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPODg1OS0xICYmCiAJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIFVURi04ICYmCiAJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS04ODU5LTEudHh0ICYmCiAKQEAgLTIxOCw3ICsyMTgsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1tZXJnZSAoVS9MKScgJwogCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBVVEYtOCAmJgotCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBJU08tODg1OS0xICYmCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIElTTzg4NTktMSAmJgogCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEtdXRmOC50eHQgJiYKIAogCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgpAQCAtMjI5LDggKzIyOSw4IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW1lcmdlIChML0wpJyAnCiAJIyBJbiB0aGlzIHRlc3Qgd2Ugd2FudCBJU08tODg1OS0xIGVuY29kZWQgY29tbWl0cyBhcyB0aGUgcmVzdWx0Ci0JZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTy04ODU5LTEgJiYKLQlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU084ODU5LTEgJiYKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPODg1OS0xICYmCiAJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS04ODU5LTEudHh0ICYmCiAKIAlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKQEAgLTI0Miw3ICsyNDIsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tbWVyZ2UgKEwvVSknICcKIAkjIFRoaXMgaXMgcGF0aG9sb2dpY2FsIC0tIHVzZSBVVEYtOCBhcyBpbnRlcm1lZGlhdGUgZm9ybQogCSMgdG8gZ2V0IElTTy04ODU5LTEgcmVzdWx0cy4KLQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU084ODU5LTEgJiYKIAlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgVVRGLTggJiYKIAkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLTg4NTktMS50eHQgJiYKIApkaWZmIC0tZ2l0IGEvdC90MzkwMi1xdW90ZWQuc2ggYi90L3QzOTAyLXF1b3RlZC5zaAppbmRleCA1ODY4MDUyLi4yOTEwM2Y2IDEwMDc1NQotLS0gYS90L3QzOTAyLXF1b3RlZC5zaAorKysgYi90L3QzOTAyLXF1b3RlZC5zaApAQCAtMjUsNyArMjUsNyBAQAogCWZvciBuYW1lIGluIFwKIAkgICAgTmFtZSAiTmFtZSBhbmQgYSR7TEZ9TEYiICJOYW1lIGFuZCBhbiR7SFR9SFQiICJOYW1lJHtEUX0iIFwKIAkgICAgIiRGTiRIVCRHTiIgIiRGTiRMRiRHTiIgIiRGTiAkR04iICIkRk4kR04iICIkRk4kRFEkR04iIFwKLQkgICAgIldpdGggU1AgaW4gaXQiCisJICAgICJXaXRoIFNQIGluIGl0IiAiJEZOL2ZpbGUiCiAJZG8KIAkJZXZhbCAiJDEiCiAJZG9uZQpAQCAtMzMsNiArMzMsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKIAorCW1rZGlyICIkRk4iICYmCiAJZm9yX2VhY2hfbmFtZSAiZWNobyBpbml0aWFsID5cIlwkbmFtZVwiIgogCWdpdCBhZGQgLiAmJgogCWdpdCBjb21taXQgLXEgLW0gSW5pdGlhbCAmJgpAQCAtNTQsNiArNTUsNyBAQAogIlwzNDZcMjc3XDI2MVwzNTFcMjA3XDIxNlxuXDM0N1wyNjRcMjI0IgogIlwzNDZcMjc3XDI2MVwzNTFcMjA3XDIxNiBcMzQ3XDI2NFwyMjQiCiAiXDM0NlwyNzdcMjYxXDM1MVwyMDdcMjE2XCJcMzQ3XDI2NFwyMjQiCisiXDM0NlwyNzdcMjYxXDM1MVwyMDdcMjE2L2ZpbGUiCiAiXDM0NlwyNzdcMjYxXDM1MVwyMDdcMjE2XDM0N1wyNjRcMjI0IgogRU9GCiAKQEAgLTY3LDYgKzY5LDcgQEAKICLmv7Hph45cbue0lCIKIOa/semHjiDntJQKICLmv7Hph45cIue0lCIKK+a/semHji9maWxlCiDmv7Hph47ntJQKIEVPRgogCkBAIC05Nyw2ICsxMDAsMTMgQEAKIAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBmdWxseSBxdW90ZWQgb3V0cHV0IGZyb20gbHMtdHJlZScgJworCisJZ2l0IGxzLXRyZWUgLS1uYW1lLW9ubHkgLXIgSEVBRCA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdC5xdW90ZWQgY3VycmVudAorCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHRpbmcgY29yZS5xdW90ZXBhdGgnICcKIAogCWdpdCBjb25maWcgLS1ib29sIGNvcmUucXVvdGVwYXRoIGZhbHNlCkBAIC0xMzAsNCArMTQwLDExIEBACiAKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgZnVsbHkgcXVvdGVkIG91dHB1dCBmcm9tIGxzLXRyZWUnICcKKworCWdpdCBscy10cmVlIC0tbmFtZS1vbmx5IC1yIEhFQUQgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3QucmF3IGN1cnJlbnQKKworJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM5MDMtc3Rhc2guc2ggYi90L3QzOTAzLXN0YXNoLnNoCmluZGV4IDc0ODRjYmUuLjQ3NmU1ZWMgMTAwNzU1Ci0tLSBhL3QvdDM5MDMtc3Rhc2guc2gKKysrIGIvdC90MzkwMy1zdGFzaC5zaApAQCAtMTc3LDQgKzE3Nyw1NSBAQAogCXRlc3QgMCA9ICQoZ2l0IHN0YXNoIGxpc3QgfCB3YyAtbCkKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLXEgaXMgcXVpZXQnICcKKwllY2hvIGZvbyA+IGZpbGUgJiYKKwlnaXQgc3Rhc2ggJiYKKwlnaXQgc3Rhc2ggYXBwbHkgLXEgPiBvdXRwdXQub3V0IDI+JjEgJiYKKwl0ZXN0ICEgLXMgb3V0cHV0Lm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYXZlIC1xIGlzIHF1aWV0JyAnCisJZ2l0IHN0YXNoIHNhdmUgLS1xdWlldCA+IG91dHB1dC5vdXQgMj4mMSAmJgorCXRlc3QgISAtcyBvdXRwdXQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BvcCAtcSBpcyBxdWlldCcgJworCWdpdCBzdGFzaCBwb3AgLXEgPiBvdXRwdXQub3V0IDI+JjEgJiYKKwl0ZXN0ICEgLXMgb3V0cHV0Lm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3AgLXEgLS1pbmRleCB3b3JrcyBhbmQgaXMgcXVpZXQnICcKKwllY2hvIGZvbyA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgc3Rhc2ggc2F2ZSAtLXF1aWV0ICYmCisJZ2l0IHN0YXNoIHBvcCAtcSAtLWluZGV4ID4gb3V0cHV0Lm91dCAyPiYxICYmCisJdGVzdCBmb28gPSAiJChnaXQgc2hvdyA6ZmlsZSkiICYmCisJdGVzdCAhIC1zIG91dHB1dC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZHJvcCAtcSBpcyBxdWlldCcgJworCWdpdCBzdGFzaCAmJgorCWdpdCBzdGFzaCBkcm9wIC1xID4gb3V0cHV0Lm91dCAyPiYxICYmCisJdGVzdCAhIC1zIG91dHB1dC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggLWsnICcKKwllY2hvIGJhcjMgPiBmaWxlICYmCisJZWNobyBiYXI0ID4gZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IHN0YXNoIC1rICYmCisJdGVzdCBiYXIsYmFyNCA9ICQoY2F0IGZpbGUpLCQoY2F0IGZpbGUyKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCAtLWludmFsaWQtb3B0aW9uJyAnCisJZWNobyBiYXI1ID4gZmlsZSAmJgorCWVjaG8gYmFyNiA+IGZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCAtLWludmFsaWQtb3B0aW9uICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIHNhdmUgLS1pbnZhbGlkLW9wdGlvbiAmJgorCXRlc3QgYmFyNSxiYXI2ID0gJChjYXQgZmlsZSksJChjYXQgZmlsZTIpICYmCisJZ2l0IHN0YXNoIC0tIC1tZXNzYWdlLXN0YXJ0aW5nLXdpdGgtZGFzaCAmJgorCXRlc3QgYmFyLGJhcjIgPSAkKGNhdCBmaWxlKSwkKGNhdCBmaWxlMikKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzOTA0LXN0YXNoLXBhdGNoLnNoIGIvdC90MzkwNC1zdGFzaC1wYXRjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMzdlM2JjCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzkwNC1zdGFzaC1wYXRjaC5zaApAQCAtMCwwICsxLDU1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGNoZWNrb3V0IC0tcGF0Y2gnCisuIC4vbGliLXBhdGNoLW1vZGUuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciBkaXIgJiYKKwllY2hvIHBhcmVudCA+IGRpci9mb28gJiYKKwllY2hvIGR1bW15ID4gYmFyICYmCisJZ2l0IGFkZCBiYXIgZGlyL2ZvbyAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCXRlc3RfdGljayAmJgorCXRlc3RfY29tbWl0IHNlY29uZCBkaXIvZm9vIGhlYWQgJiYKKwllY2hvIGluZGV4ID4gZGlyL2ZvbyAmJgorCWdpdCBhZGQgZGlyL2ZvbyAmJgorCXNldF9hbmRfc2F2ZV9zdGF0ZSBiYXIgYmFyX3dvcmsgYmFyX2luZGV4ICYmCisJc2F2ZV9oZWFkCisnCisKKyMgbm90ZTogYmFyIHNvcnRzIGJlZm9yZSBkaXIsIHNvIHRoZSBmaXJzdCAnbicgaXMgYWx3YXlzIHRvIHNraXAgJ2JhcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2F5aW5nICJuIiBkb2VzIG5vdGhpbmcnICcKKwlzZXRfc3RhdGUgZGlyL2ZvbyB3b3JrIGluZGV4CisJKGVjaG8gbjsgZWNobyBuKSB8IHRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBzYXZlIC1wICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gd29yayBpbmRleCAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN0YXNoIC1wJyAnCisJKGVjaG8gbjsgZWNobyB5KSB8IGdpdCBzdGFzaCBzYXZlIC1wICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gaGVhZCBpbmRleCAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN0YXNoIGFwcGx5ICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gd29yayBoZWFkICYmCisJdmVyaWZ5X3N0YXRlIGJhciBkdW1teSBkdW1teQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3Rhc2ggLXAgLS1uby1rZWVwLWluZGV4JyAnCisJc2V0X3N0YXRlIGRpci9mb28gd29yayBpbmRleCAmJgorCXNldF9zdGF0ZSBiYXIgYmFyX3dvcmsgYmFyX2luZGV4ICYmCisJKGVjaG8gbjsgZWNobyB5KSB8IGdpdCBzdGFzaCBzYXZlIC1wIC0tbm8ta2VlcC1pbmRleCAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIGhlYWQgaGVhZCAmJgorCXZlcmlmeV9zdGF0ZSBiYXIgYmFyX3dvcmsgZHVtbXkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN0YXNoIGFwcGx5IC0taW5kZXggJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyB3b3JrIGluZGV4ICYmCisJdmVyaWZ5X3N0YXRlIGJhciBkdW1teSBiYXJfaW5kZXgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uZSBvZiB0aGlzIG1vdmVkIEhFQUQnICcKKwl2ZXJpZnlfc2F2ZWRfaGVhZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMDYtZGlmZi1tb2RlLnNoIGIvdC90NDAwNi1kaWZmLW1vZGUuc2gKaW5kZXggOGMxYjgxZS4uZmY4YzJmNyAxMDA3NTUKLS0tIGEvdC90NDAwNi1kaWZmLW1vZGUuc2gKKysrIGIvdC90NDAwNi1kaWZmLW1vZGUuc2gKQEAgLTIwLDggKzIwLDYgQEAKICAgICAndGVzdF9jaG1vZCAreCByZXpyb3YgJiYKICAgICAgZ2l0IGRpZmYtaW5kZXggJHRyZWUgPmN1cnJlbnQnCiAKLV94NDA9J1swLTlhLWZdWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdWzAtOWEtZl0nCi1feDQwPSIkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwIgogc2VkIC1lICdzL1woOjEwMDY0NCAxMDA3NTVcKSBcKCciJF94NDAiJ1wpIFwyIC9cMSBYIFggLycgPGN1cnJlbnQgPmNoZWNrCiBlY2hvICI6MTAwNjQ0IDEwMDc1NSBYIFggTQlyZXpyb3YiID5leHBlY3RlZAogCmRpZmYgLS1naXQgYS90L3Q0MDA3LXJlbmFtZS0zLnNoIGIvdC90NDAwNy1yZW5hbWUtMy5zaAppbmRleCA0MjA3MmQ3Li4xMTUwMmI3IDEwMDc1NQotLS0gYS90L3Q0MDA3LXJlbmFtZS0zLnNoCisrKyBiL3QvdDQwMDctcmVuYW1lLTMuc2gKQEAgLTksMzIgKzksMzYgQEAKIC4gLi90ZXN0LWxpYi5zaAogLiAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi5zaCA7IyB0ZXN0LWxpYiBjaGRpcidzIGludG8gdHJhc2gKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ3ByZXBhcmUgcmVmZXJlbmNlIHRyZWUnIFwKLSAgICAnbWtkaXIgcGF0aDAgcGF0aDEgJiYKLSAgICAgY3AgIiRURVNUX0RJUkVDVE9SWSIvLi4vQ09QWUlORyBwYXRoMC9DT1BZSU5HICYmCi0gICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcGF0aDAvQ09QWUlORyAmJgotICAgIHRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKLSAgICBlY2hvICR0cmVlJwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSByZWZlcmVuY2UgdHJlZScgJworCW1rZGlyIHBhdGgwIHBhdGgxICYmCisJY3AgIiRURVNUX0RJUkVDVE9SWSIvLi4vQ09QWUlORyBwYXRoMC9DT1BZSU5HICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBwYXRoMC9DT1BZSU5HICYmCisJdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWVjaG8gJHRyZWUKKycKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ3ByZXBhcmUgd29yayB0cmVlJyBcCi0gICAgJ2NwIHBhdGgwL0NPUFlJTkcgcGF0aDEvQ09QWUlORyAmJgotICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIHBhdGgwL0NPUFlJTkcgcGF0aDEvQ09QWUlORycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgd29yayB0cmVlJyAnCisJY3AgcGF0aDAvQ09QWUlORyBwYXRoMS9DT1BZSU5HICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBwYXRoMC9DT1BZSU5HIHBhdGgxL0NPUFlJTkcKKycKIAogIyBJbiB0aGUgdHJlZSwgdGhlcmUgaXMgb25seSBwYXRoMC9DT1BZSU5HLiAgSW4gdGhlIGNhY2hlLCBwYXRoMCBhbmQKICMgcGF0aDEgYm90aCBoYXZlIENPUFlJTkcgYW5kIHRoZSBsYXR0ZXIgaXMgYSBjb3B5IG9mIHBhdGgwL0NPUFlJTkcuCiAjIENvbXBhcmluZyB0aGUgZnVsbCB0cmVlIHdpdGggY2FjaGUgc2hvdWxkIHRlbGwgdXMgc28uCiAKLWdpdCBkaWZmLWluZGV4IC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyICR0cmVlID5jdXJyZW50Ci0KIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GCiA6MTAwNjQ0IDEwMDY0NCA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIDZmZjg3YzQ2NjQ5ODFlNDM5NzYyNTc5MWM4ZWEzYmJiNWYyMjc5YTMgQzEwMAlwYXRoMC9DT1BZSU5HCXBhdGgxL0NPUFlJTkcKIEVPRgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgICAndmFsaWRhdGUgdGhlIHJlc3VsdCAoIzEpJyBcCi0gICAgJ2NvbXBhcmVfZGlmZl9yYXcgY3VycmVudCBleHBlY3RlZCcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcHkgZGV0ZWN0aW9uJyAnCisJZ2l0IGRpZmYtaW5kZXggLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgJHRyZWUgPmN1cnJlbnQgJiYKKwljb21wYXJlX2RpZmZfcmF3IGN1cnJlbnQgZXhwZWN0ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29weSBkZXRlY3Rpb24sIGNhY2hlZCcgJworCWdpdCBkaWZmLWluZGV4IC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tY2FjaGVkICR0cmVlID5jdXJyZW50ICYmCisJY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkCisnCiAKICMgSW4gdGhlIHRyZWUsIHRoZXJlIGlzIG9ubHkgcGF0aDAvQ09QWUlORy4gIEluIHRoZSBjYWNoZSwgcGF0aDAgYW5kCiAjIHBhdGgxIGJvdGggaGF2ZSBDT1BZSU5HIGFuZCB0aGUgbGF0dGVyIGlzIGEgY29weSBvZiBwYXRoMC9DT1BZSU5HLgpAQCAtNDIsNDkgKzQ2LDQ1IEBACiAjIHBhdGgxL0NPUFlJTkcgc3VkZGVubHkgYXBwZWFyaW5nIGZyb20gbm93aGVyZSwgbm90IGRldGVjdGVkIGFzCiAjIGEgY29weSBmcm9tIHBhdGgwL0NPUFlJTkcuCiAKLWdpdCBkaWZmLWluZGV4IC1DICR0cmVlIHBhdGgxID5jdXJyZW50Ci0KIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GCiA6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDZmZjg3YzQ2NjQ5ODFlNDM5NzYyNTc5MWM4ZWEzYmJiNWYyMjc5YTMgQQlwYXRoMS9DT1BZSU5HCiBFT0YKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ3ZhbGlkYXRlIHRoZSByZXN1bHQgKCMyKScgXAotICAgICdjb21wYXJlX2RpZmZfcmF3IGN1cnJlbnQgZXhwZWN0ZWQnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3B5LCBsaW1pdGVkIHRvIGEgc3VidHJlZScgJworCWdpdCBkaWZmLWluZGV4IC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyICR0cmVlIHBhdGgxID5jdXJyZW50ICYmCisJY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkCisnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICd0d2VhayB3b3JrIHRyZWUnIFwKLSAgICAncm0gLWYgcGF0aDAvQ09QWUlORyAmJgotICAgICBnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIHBhdGgwL0NPUFlJTkcnCi0KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R3ZWFrIHdvcmsgdHJlZScgJworCXJtIC1mIHBhdGgwL0NPUFlJTkcgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIHBhdGgwL0NPUFlJTkcKKycKICMgSW4gdGhlIHRyZWUsIHRoZXJlIGlzIG9ubHkgcGF0aDAvQ09QWUlORy4gIEluIHRoZSBjYWNoZSwgcGF0aDAgZG9lcwogIyBub3QgaGF2ZSBDT1BZSU5HIGFueW1vcmUgYW5kIHBhdGgxIGhhcyBDT1BZSU5HIHdoaWNoIGlzIGEgY29weSBvZgogIyBwYXRoMC9DT1BZSU5HLiAgU2hvd2luZyB0aGUgZnVsbCB0cmVlIHdpdGggY2FjaGUgc2hvdWxkIHRlbGwgdXMgYWJvdXQKICMgdGhlIHJlbmFtZS4KIAotZ2l0IGRpZmYtaW5kZXggLUMgJHRyZWUgPmN1cnJlbnQKLQogY2F0ID5leHBlY3RlZCA8PFxFT0YKIDoxMDA2NDQgMTAwNjQ0IDZmZjg3YzQ2NjQ5ODFlNDM5NzYyNTc5MWM4ZWEzYmJiNWYyMjc5YTMgNmZmODdjNDY2NDk4MWU0Mzk3NjI1NzkxYzhlYTNiYmI1ZjIyNzlhMyBSMTAwCXBhdGgwL0NPUFlJTkcJcGF0aDEvQ09QWUlORwogRU9GCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICd2YWxpZGF0ZSB0aGUgcmVzdWx0ICgjMyknIFwKLSAgICAnY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkJwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIGRldGVjdGlvbicgJworCWdpdCBkaWZmLWluZGV4IC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyICR0cmVlID5jdXJyZW50ICYmCisJY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkCisnCiAKICMgSW4gdGhlIHRyZWUsIHRoZXJlIGlzIG9ubHkgcGF0aDAvQ09QWUlORy4gIEluIHRoZSBjYWNoZSwgcGF0aDAgZG9lcwogIyBub3QgaGF2ZSBDT1BZSU5HIGFueW1vcmUgYW5kIHBhdGgxIGhhcyBDT1BZSU5HIHdoaWNoIGlzIGEgY29weSBvZgogIyBwYXRoMC9DT1BZSU5HLiAgV2hlbiB3ZSBzYXkgd2UgY2FyZSBvbmx5IGFib3V0IHBhdGgxLCB3ZSBzaG91bGQganVzdAogIyBzZWUgcGF0aDEvQ09QWUlORyBhcHBlYXJpbmcgZnJvbSBub3doZXJlLgogCi1naXQgZGlmZi1pbmRleCAtQyAkdHJlZSBwYXRoMSA+Y3VycmVudAotCiBjYXQgPmV4cGVjdGVkIDw8XEVPRgogOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIEEJcGF0aDEvQ09QWUlORwogRU9GCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICd2YWxpZGF0ZSB0aGUgcmVzdWx0ICgjNCknIFwKLSAgICAnY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkJwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lLCBsaW1pdGVkIHRvIGEgc3VidHJlZScgJworCWdpdCBkaWZmLWluZGV4IC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyICR0cmVlIHBhdGgxID5jdXJyZW50ICYmCisJY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkCisnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAxMi1kaWZmLWJpbmFyeS5zaCBiL3QvdDQwMTItZGlmZi1iaW5hcnkuc2gKaW5kZXggZjY0YWE0OC4uYmM0NjU2MyAxMDA3NTUKLS0tIGEvdC90NDAxMi1kaWZmLWJpbmFyeS5zaAorKysgYi90L3Q0MDEyLWRpZmYtYmluYXJ5LnNoCkBAIC03NywxMCArNzcsNiBAQAogCSB0cmVlMT1gZ2l0IHdyaXRlLXRyZWVgICYmCiAJIHRlc3QgIiR0cmVlMSIgPSAiJHRyZWUwIicKIAotcV90b19udWwoKSB7Ci0JcGVybCAtcGUgJ3kvUS9cMDAwLycKLX0KLQogbnVsX3RvX3EoKSB7CiAJcGVybCAtcGUgJ3kvXDAwMC9RLycKIH0KZGlmZiAtLWdpdCBhL3QvdDQwMTMtZGlmZi12YXJpb3VzLnNoIGIvdC90NDAxMy1kaWZmLXZhcmlvdXMuc2gKaW5kZXggOGIzMzMyMS4uOGUzNjk0ZSAxMDA3NTUKLS0tIGEvdC90NDAxMy1kaWZmLXZhcmlvdXMuc2gKKysrIGIvdC90NDAxMy1kaWZmLXZhcmlvdXMuc2gKQEAgLTIwNyw2ICsyMDcsNyBAQAogbG9nIC1TRiBtYXN0ZXIKIGxvZyAtU0YgLXAgbWFzdGVyCiBsb2cgLS1kZWNvcmF0ZSAtLWFsbAorbG9nIC0tZGVjb3JhdGU9ZnVsbCAtLWFsbAogCiByZXYtbGlzdCAtLXBhcmVudHMgSEVBRAogcmV2LWxpc3QgLS1jaGlsZHJlbiBIRUFECmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy0tZGVjb3JhdGU9ZnVsbF8tLWFsbCBiL3QvdDQwMTMvZGlmZi5sb2dfLS1kZWNvcmF0ZT1mdWxsXy0tYWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNTVlMGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy0tZGVjb3JhdGU9ZnVsbF8tLWFsbApAQCAtMCwwICsxLDM0IEBACiskIGdpdCBsb2cgLS1kZWNvcmF0ZT1mdWxsIC0tYWxsCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NCAoSEVBRCwgcmVmcy9oZWFkcy9tYXN0ZXIpCitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YSAocmVmcy9oZWFkcy9zaWRlKQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCisKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhIChyZWZzL2hlYWRzL2luaXRpYWwpCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tLWRlY29yYXRlXy0tYWxsIGIvdC90NDAxMy9kaWZmLmxvZ18tLWRlY29yYXRlXy0tYWxsCmluZGV4IDEyZGE4YWMuLmZkN2MzZTYgMTAwNjQ0Ci0tLSBhL3QvdDQwMTMvZGlmZi5sb2dfLS1kZWNvcmF0ZV8tLWFsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy0tZGVjb3JhdGVfLS1hbGwKQEAgLTEsMTIgKzEsMTIgQEAKICQgZ2l0IGxvZyAtLWRlY29yYXRlIC0tYWxsCi1jb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NCAocmVmcy9oZWFkcy9tYXN0ZXIpCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NCAoSEVBRCwgbWFzdGVyKQogTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQogQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgogRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKIAogICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKIAotY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEgKHJlZnMvaGVhZHMvc2lkZSkKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhIChzaWRlKQogQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgogRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKIApAQCAtMjYsNyArMjYsNyBAQAogICAgIAogICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCiAKLWNvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhIChyZWZzL2hlYWRzL2luaXRpYWwpCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYSAoaW5pdGlhbCkKIEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KIERhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCiAKZGlmZiAtLWdpdCBhL3QvdDQwMTQtZm9ybWF0LXBhdGNoLnNoIGIvdC90NDAxNC1mb3JtYXQtcGF0Y2guc2gKaW5kZXggOTIyYTg5NC4uODQzZWY3ZiAxMDA3NTUKLS0tIGEvdC90NDAxNC1mb3JtYXQtcGF0Y2guc2gKKysrIGIvdC90NDAxNC1mb3JtYXQtcGF0Y2guc2gKQEAgLTkzLDkgKzkzLDkgQEAKIAlnaXQgY29uZmlnIC0tYWRkIGZvcm1hdC5oZWFkZXJzICJDYzogUy4gRS4gQ2lwaWVudCA8c2NpcGllbnRAZXhhbXBsZS5jb20+CiAiICYmCiAJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgPiBwYXRjaDIgJiYKLQlzZWQgLWUgIi9eJC9xIiBwYXRjaDIgPiBoZHJzMiAmJgotCWdyZXAgIl5UbzogUi4gRS4gQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+JCIgaGRyczIgJiYKLQlncmVwICJeQ2M6IFMuIEUuIENpcGllbnQgPHNjaXBpZW50QGV4YW1wbGUuY29tPiQiIGhkcnMyCisJc2VkIC1lICIvXlwkL3EiIHBhdGNoMiA+IGhkcnMyICYmCisJZ3JlcCAiXlRvOiBSLiBFLiBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT5cJCIgaGRyczIgJiYKKwlncmVwICJeQ2M6IFMuIEUuIENpcGllbnQgPHNjaXBpZW50QGV4YW1wbGUuY29tPlwkIiBoZHJzMgogCiAnCiAKQEAgLTEwNCw5ICsxMDQsOSBAQAogCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBmb3JtYXQuaGVhZGVycyAiVG86IFIuIEUuIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPiIgJiYKIAlnaXQgY29uZmlnIC0tYWRkIGZvcm1hdC5oZWFkZXJzICJDYzogUy4gRS4gQ2lwaWVudCA8c2NpcGllbnRAZXhhbXBsZS5jb20+IiAmJgogCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgbWFzdGVyLi5zaWRlID5wYXRjaDMgJiYKLQlzZWQgLWUgIi9eJC9xIiBwYXRjaDMgPiBoZHJzMyAmJgotCWdyZXAgIl5UbzogUi4gRS4gQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+JCIgaGRyczMgJiYKLQlncmVwICJeQ2M6IFMuIEUuIENpcGllbnQgPHNjaXBpZW50QGV4YW1wbGUuY29tPiQiIGhkcnMzCisJc2VkIC1lICIvXlwkL3EiIHBhdGNoMyA+IGhkcnMzICYmCisJZ3JlcCAiXlRvOiBSLiBFLiBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT5cJCIgaGRyczMgJiYKKwlncmVwICJeQ2M6IFMuIEUuIENpcGllbnQgPHNjaXBpZW50QGV4YW1wbGUuY29tPlwkIiBoZHJzMwogCiAnCiAKQEAgLTExNSwzMiArMTE1LDMyIEBACiAJZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIGZvcm1hdC5oZWFkZXJzICJUbzogUi4gRS4gQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+IiAmJgogCWdpdCBjb25maWcgLS1hZGQgZm9ybWF0LmhlYWRlcnMgIlRvOiBTLiBFLiBDaXBpZW50IDxzY2lwaWVudEBleGFtcGxlLmNvbT4iICYmCiAJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgPiBwYXRjaDQgJiYKLQlzZWQgLWUgIi9eJC9xIiBwYXRjaDQgPiBoZHJzNCAmJgotCWdyZXAgIl5UbzogUi4gRS4gQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+LCQiIGhkcnM0ICYmCi0JZ3JlcCAiXiAqUy4gRS4gQ2lwaWVudCA8c2NpcGllbnRAZXhhbXBsZS5jb20+JCIgaGRyczQKKwlzZWQgLWUgIi9eXCQvcSIgcGF0Y2g0ID4gaGRyczQgJiYKKwlncmVwICJeVG86IFIuIEUuIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPixcJCIgaGRyczQgJiYKKwlncmVwICJeICpTLiBFLiBDaXBpZW50IDxzY2lwaWVudEBleGFtcGxlLmNvbT5cJCIgaGRyczQKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkaXRpb25hbCBjb21tYW5kIGxpbmUgY2MnICcKIAogCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBmb3JtYXQuaGVhZGVycyAiQ2M6IFIuIEUuIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPiIgJiYKLQlnaXQgZm9ybWF0LXBhdGNoIC0tY2M9IlMuIEUuIENpcGllbnQgPHNjaXBpZW50QGV4YW1wbGUuY29tPiIgLS1zdGRvdXQgbWFzdGVyLi5zaWRlIHwgc2VkIC1lICIvXiQvcSIgPnBhdGNoNSAmJgotCWdyZXAgIl5DYzogUi4gRS4gQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+LCQiIHBhdGNoNSAmJgotCWdyZXAgIl4gKlMuIEUuIENpcGllbnQgPHNjaXBpZW50QGV4YW1wbGUuY29tPiQiIHBhdGNoNQorCWdpdCBmb3JtYXQtcGF0Y2ggLS1jYz0iUy4gRS4gQ2lwaWVudCA8c2NpcGllbnRAZXhhbXBsZS5jb20+IiAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgfCBzZWQgLWUgIi9eXCQvcSIgPnBhdGNoNSAmJgorCWdyZXAgIl5DYzogUi4gRS4gQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+LFwkIiBwYXRjaDUgJiYKKwlncmVwICJeICpTLiBFLiBDaXBpZW50IDxzY2lwaWVudEBleGFtcGxlLmNvbT5cJCIgcGF0Y2g1CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1hbmQgbGluZSBoZWFkZXJzJyAnCiAKIAlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIGZvcm1hdC5oZWFkZXJzICYmCi0JZ2l0IGZvcm1hdC1wYXRjaCAtLWFkZC1oZWFkZXI9IkNjOiBSLiBFLiBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT4iIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSB8IHNlZCAtZSAiL14kL3EiID5wYXRjaDYgJiYKLQlncmVwICJeQ2M6IFIuIEUuIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPiQiIHBhdGNoNgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1hZGQtaGVhZGVyPSJDYzogUi4gRS4gQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+IiAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgfCBzZWQgLWUgIi9eXCQvcSIgPnBhdGNoNiAmJgorCWdyZXAgIl5DYzogUi4gRS4gQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+XCQiIHBhdGNoNgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWd1cmF0aW9uIGhlYWRlcnMgYW5kIGNvbW1hbmQgbGluZSBoZWFkZXJzJyAnCiAKIAlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgZm9ybWF0LmhlYWRlcnMgIkNjOiBSLiBFLiBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT4iICYmCi0JZ2l0IGZvcm1hdC1wYXRjaCAtLWFkZC1oZWFkZXI9IkNjOiBTLiBFLiBDaXBpZW50IDxzY2lwaWVudEBleGFtcGxlLmNvbT4iIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSB8IHNlZCAtZSAiL14kL3EiID5wYXRjaDcgJiYKLQlncmVwICJeQ2M6IFIuIEUuIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPiwkIiBwYXRjaDcgJiYKLQlncmVwICJeICpTLiBFLiBDaXBpZW50IDxzY2lwaWVudEBleGFtcGxlLmNvbT4kIiBwYXRjaDcKKwlnaXQgZm9ybWF0LXBhdGNoIC0tYWRkLWhlYWRlcj0iQ2M6IFMuIEUuIENpcGllbnQgPHNjaXBpZW50QGV4YW1wbGUuY29tPiIgLS1zdGRvdXQgbWFzdGVyLi5zaWRlIHwgc2VkIC1lICIvXlwkL3EiID5wYXRjaDcgJiYKKwlncmVwICJeQ2M6IFIuIEUuIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPixcJCIgcGF0Y2g3ICYmCisJZ3JlcCAiXiAqUy4gRS4gQ2lwaWVudCA8c2NpcGllbnRAZXhhbXBsZS5jb20+XCQiIHBhdGNoNwogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSBmaWxlcycgJwpAQCAtNDA2LDkgKzQwNiw5IEBACiAJZ2l0IG12IGZpbGUgZm9vICYmCiAJZ2l0IGNvbW1pdCAtbSBmb28gJiYKIAlnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIC0xICYmCi0JISBncmVwICJmaWxlID0+IGZvbyAuKiAwICokIiAwMDAwLWNvdmVyLWxldHRlci5wYXRjaCAmJgorCSEgZ3JlcCAiZmlsZSA9PiBmb28gLiogMCAqXCQiIDAwMDAtY292ZXItbGV0dGVyLnBhdGNoICYmCiAJZ2l0IGZvcm1hdC1wYXRjaCAtLWNvdmVyLWxldHRlciAtMSAtTSAmJgotCWdyZXAgImZpbGUgPT4gZm9vIC4qIDAgKiQiIDAwMDAtY292ZXItbGV0dGVyLnBhdGNoCisJZ3JlcCAiZmlsZSA9PiBmb28gLiogMCAqXCQiIDAwMDAtY292ZXItbGV0dGVyLnBhdGNoCiAKICcKIApAQCAtNDI1LDcgKzQyNSw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG9ydGxvZyBvZiBjb3Zlci1sZXR0ZXIgd3JhcHMgb3Zlcmx5LWxvbmcgb25lbGluZXMnICcKIAogCWdpdCBmb3JtYXQtcGF0Y2ggLS1jb3Zlci1sZXR0ZXIgLTIgJiYKLQlzZWQgLWUgIjEsL0EgVSBUaG9yL2QiIC1lICIvXiQvcSIgPCAwMDAwLWNvdmVyLWxldHRlci5wYXRjaCA+IG91dHB1dCAmJgorCXNlZCAtZSAiMSwvQSBVIFRob3IvZCIgLWUgIi9eXCQvcSIgPCAwMDAwLWNvdmVyLWxldHRlci5wYXRjaCA+IG91dHB1dCAmJgogCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKIAogJwpAQCAtNDUwLDcgKzQ1MCwyOCBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIHJlc3BlY3RzIC1VJyAnCiAKIAlnaXQgZm9ybWF0LXBhdGNoIC1VNCAtMiAmJgotCXNlZCAtZSAiMSwvXiQvZCIgLWUgIi9eKzUvcSIgPCAwMDAxLVRoaXMtaXMtYW4tZXhjZXNzaXZlbHktbG9uZy1zdWJqZWN0LWxpbmUtZm9yLWEtbWVzc2EucGF0Y2ggPiBvdXRwdXQgJiYKKwlzZWQgLWUgIjEsL15cJC9kIiAtZSAiL14rNS9xIiA8IDAwMDEtVGhpcy1pcy1hbi1leGNlc3NpdmVseS1sb25nLXN1YmplY3QtbGluZS1mb3ItYS1tZXNzYS5wYXRjaCA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKworJworCitjYXQgPiBleHBlY3QgPDwgRU9GCisKK2RpZmYgLS1naXQgYS9maWxlIGIvZmlsZQoraW5kZXggNDBmMzZjNi4uMmRjNWMyMyAxMDA2NDQKKy0tLSBhL2ZpbGUKKysrKyBiL2ZpbGUKK0BAIC0xNCwzICsxNCwxOSBAQCBDCisgRAorIEUKKyBGCisrNQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtcCBzdXBwcmVzc2VzIHN0YXQnICcKKworCWdpdCBmb3JtYXQtcGF0Y2ggLXAgLTIgJiYKKwlzZWQgLWUgIjEsL15cJC9kIiAtZSAiL14rNS9xIiA8IDAwMDEtVGhpcy1pcy1hbi1leGNlc3NpdmVseS1sb25nLXN1YmplY3QtbGluZS1mb3ItYS1tZXNzYS5wYXRjaCA+IG91dHB1dCAmJgogCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKIAogJwpAQCAtNDkzLDEzICs1MTQsMTIgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIGZyb20gYSBzdWJkaXJlY3RvcnkgKDMpJyAnCi0JaGVyZT0iJFRFU1RfRElSRUNUT1JZLyR0ZXN0IiAmJgogCXJtIC1mIDAqICYmCiAJZmlsZW5hbWU9JCgKIAkJcm0gLXJmIHN1YiAmJgogCQlta2RpciAtcCBzdWIvZGlyICYmCiAJCWNkIHN1Yi9kaXIgJiYKLQkJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtbyAiJGhlcmUiCisJCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLW8gIiRUUkFTSF9ESVJFQ1RPUlkiCiAJKSAmJgogCWJhc2VuYW1lPSQoZXhwciAiJGZpbGVuYW1lIiA6ICIuKi9cKC4qXCkiKSAmJgogCXRlc3QgLWYgIiRiYXNlbmFtZSIKQEAgLTUxNiw0ICs1MzYsMjkgQEAKIAlncmVwICJeU2lnbmVkLW9mZi1ieTogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IgogJwogCitlY2hvICJmYXRhbDogLS1uYW1lLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZSIgPiBleHBlY3QubmFtZS1vbmx5CitlY2hvICJmYXRhbDogLS1uYW1lLXN0YXR1cyBkb2VzIG5vdCBtYWtlIHNlbnNlIiA+IGV4cGVjdC5uYW1lLXN0YXR1cworZWNobyAiZmF0YWw6IC0tY2hlY2sgZG9lcyBub3QgbWFrZSBzZW5zZSIgPiBleHBlY3QuY2hlY2sKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3B0aW9ucyBubyBsb25nZXIgYWxsb3dlZCBmb3IgZm9ybWF0LXBhdGNoJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvcm1hdC1wYXRjaCAtLW5hbWUtb25seSAyPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3QubmFtZS1vbmx5IG91dHB1dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3JtYXQtcGF0Y2ggLS1uYW1lLXN0YXR1cyAyPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3QubmFtZS1zdGF0dXMgb3V0cHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvcm1hdC1wYXRjaCAtLWNoZWNrIDI+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdC5jaGVjayBvdXRwdXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLW51bXN0YXQgc2hvdWxkIHByb2R1Y2UgYSBwYXRjaCcgJworCWdpdCBmb3JtYXQtcGF0Y2ggLS1udW1zdGF0IC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSA+IG91dHB1dCAmJgorCXRlc3QgNiA9ICQoZ3JlcCAiXmRpZmYgLS1naXQgYS8iIG91dHB1dCB8IHdjIC1sKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0tIDxwYXRoPicgJworCWdpdCBmb3JtYXQtcGF0Y2ggbWFzdGVyLi5zaWRlIC0tIGZpbGUgMj5lcnJvciAmJgorCSEgZ3JlcCAiVXNlIC4tLSIgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0taWdub3JlLWlmLWluLXVwc3RyZWFtIEhFQUQnICcKKwlnaXQgZm9ybWF0LXBhdGNoIC0taWdub3JlLWlmLWluLXVwc3RyZWFtIEhFQUQKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDE1LWRpZmYtd2hpdGVzcGFjZS5zaCBiL3QvdDQwMTUtZGlmZi13aGl0ZXNwYWNlLnNoCmluZGV4IDZkMTNkYTMuLjkwZjMzNDIgMTAwNzU1Ci0tLSBhL3QvdDQwMTUtZGlmZi13aGl0ZXNwYWNlLnNoCisrKyBiL3QvdDQwMTUtZGlmZi13aGl0ZXNwYWNlLnNoCkBAIC05Myw4ICs5Myw2IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbm90aGVyIHRlc3QsIHdpdGhvdXQgb3B0aW9ucycgJ3Rlc3RfY21wIGV4cGVjdCBvdXQnCiAKIGNhdCA8PCBFT0YgPiBleHBlY3QKLWRpZmYgLS1naXQgYS94IGIveAotaW5kZXggZDk5YWYyMy4uOGIzMmZiNSAxMDA2NDQKIEVPRgogZ2l0IGRpZmYgLXcgPiBvdXQKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fub3RoZXIgdGVzdCwgd2l0aCAtdycgJ3Rlc3RfY21wIGV4cGVjdCBvdXQnCkBAIC0zNjIsMTAgKzM2MCwxNyBAQAogCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrZGlmZiBkZXRlY3RzIHRyYWlsaW5nIGJsYW5rIGxpbmVzJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja2RpZmYgZGV0ZWN0cyBuZXcgdHJhaWxpbmcgYmxhbmsgbGluZXMgKDEpJyAnCiAJZWNobyAiZm9vKCk7IiA+eCAmJgogCWVjaG8gIiIgPj54ICYmCi0JZ2l0IGRpZmYgLS1jaGVjayB8IGdyZXAgImVuZHMgd2l0aCBibGFuayIKKwlnaXQgZGlmZiAtLWNoZWNrIHwgZ3JlcCAibmV3IGJsYW5rIGxpbmUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrZGlmZiBkZXRlY3RzIG5ldyB0cmFpbGluZyBibGFuayBsaW5lcyAoMiknICcKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvOyBlY2hvOyB9ID54ICYmCisJZ2l0IGFkZCB4ICYmCisJeyBlY2hvIGE7IGVjaG87IGVjaG87IGVjaG87IGVjaG87IH0gPnggJiYKKwlnaXQgZGlmZiAtLWNoZWNrIHwgZ3JlcCAibmV3IGJsYW5rIGxpbmUiCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrZGlmZiBhbGxvd3MgbmV3IGJsYW5rIGxpbmVzJyAnCkBAIC0zNzksNiArMzg0LDE4IEBACiAJZ2l0IGRpZmYgLS1jaGVjawogJwogCitjYXQgPDxFT0YgPmV4cGVjdAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aGl0ZXNwYWNlLW9ubHkgY2hhbmdlcyBub3QgcmVwb3J0ZWQnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyA+eCAiaGVsbG8gd29ybGQiICYmCisJZ2l0IGFkZCB4ICYmCisJZ2l0IGNvbW1pdCAtbSAiaGVsbG8gMSIgJiYKKwllY2hvID54ICJoZWxsbyAgd29ybGQiICYmCisJZ2l0IGRpZmYgLWIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tYmluZWQgZGlmZiB3aXRoIGF1dG9jcmxmIGNvbnZlcnNpb24nICcKIAogCWdpdCByZXNldCAtLWhhcmQgJiYKZGlmZiAtLWdpdCBhL3QvdDQwMTctZGlmZi1yZXR2YWwuc2ggYi90L3Q0MDE3LWRpZmYtcmV0dmFsLnNoCmluZGV4IDYwZGQyMDEuLjAzOTFhNTggMTAwNzU1Ci0tLSBhL3QvdDQwMTctZGlmZi1yZXR2YWwuc2gKKysrIGIvdC90NDAxNy1kaWZmLXJldHZhbC5zaApAQCAtNSw2ICs1LDkgQEAKIC4gLi90ZXN0LWxpYi5zaAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gIjEgIiA+YSAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gemVyb3RoICYmCiAJZWNobyAxID5hICYmCiAJZ2l0IGFkZCAuICYmCiAJZ2l0IGNvbW1pdCAtbSBmaXJzdCAmJgpAQCAtMTMsNiArMTYsMTggQEAKIAlnaXQgY29tbWl0IC1hIC1tIHNlY29uZAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiAtLXF1aWV0IC13ICBIRUFEXl4gSEVBRF4nICcKKwlnaXQgZGlmZiAtLXF1aWV0IC13IEhFQUReXiBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiAtLXF1aWV0IEhFQUReXiBIRUFEXicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tcXVpZXQgSEVBRF5eIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIC0tcXVpZXQgLXcgIEhFQUReIEhFQUQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLXF1aWV0IC13IEhFQUReIEhFQUQKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtdHJlZSBIRUFEXiBIRUFEJyAnCiAJZ2l0IGRpZmYtdHJlZSAtLWV4aXQtY29kZSBIRUFEXiBIRUFECiAJdGVzdCAkPyA9IDEKZGlmZiAtLWdpdCBhL3QvdDQwMTktZGlmZi13c2Vycm9yLnNoIGIvdC90NDAxOS1kaWZmLXdzZXJyb3Iuc2gKaW5kZXggODRhMWZlMy4uZjZkMWYxZSAxMDA3NTUKLS0tIGEvdC90NDAxOS1kaWZmLXdzZXJyb3Iuc2gKKysrIGIvdC90NDAxOS1kaWZmLXdzZXJyb3Iuc2gKQEAgLTIwLDExICsyMCwyNyBAQAogCiBibHVlX2dyZXA9Jzc7MzRtJyA7IyBFU0MgWyA3IDsgMyA0IG0KIAorcHJpbnRmICJcMDMzWyVzIiAiJGJsdWVfZ3JlcCIgPmNoZWNrLWdyZXAKK2lmIChncmVwICIkYmx1ZV9ncmVwIiA8Y2hlY2stZ3JlcCB8IGdyZXAgIiRibHVlX2dyZXAiKSA+L2Rldi9udWxsIDI+JjEKK3RoZW4KKwlncmVwX2E9Z3JlcAorZWxpZiAoZ3JlcCAtYSAiJGJsdWVfZ3JlcCIgPGNoZWNrLWdyZXAgfCBncmVwIC1hICIkYmx1ZV9ncmVwIikgPi9kZXYvbnVsbCAyPiYxCit0aGVuCisJZ3JlcF9hPSdncmVwIC1hJworZWxzZQorCWdyZXBfYT1ncmVwIDsjIGV4cGVjdGVkIHRvIGZhaWwuLi4KK2ZpCitybSAtZiBjaGVjay1ncmVwCisKK3ByZXBhcmVfb3V0cHV0ICgpIHsKKwlnaXQgZGlmZiAtLWNvbG9yID5vdXRwdXQKKwkkZ3JlcF9hICIkYmx1ZV9ncmVwIiBvdXRwdXQgPmVycm9yCisJJGdyZXBfYSAtdiAiJGJsdWVfZ3JlcCIgb3V0cHV0ID5ub3JtYWwKK30KKwogdGVzdF9leHBlY3Rfc3VjY2VzcyBkZWZhdWx0ICcKIAotCWdpdCBkaWZmIC0tY29sb3IgPm91dHB1dAotCWdyZXAgIiRibHVlX2dyZXAiIG91dHB1dCA+ZXJyb3IKLQlncmVwIC12ICIkYmx1ZV9ncmVwIiBvdXRwdXQgPm5vcm1hbAorCXByZXBhcmVfb3V0cHV0CiAKIAlncmVwIEVpZ2h0IG5vcm1hbCA+L2Rldi9udWxsICYmCiAJZ3JlcCBIVCBlcnJvciA+L2Rldi9udWxsICYmCkBAIC0zNyw5ICs1Myw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRob3V0IC10cmFpbCcgJwogCiAJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgLXRyYWlsCi0JZ2l0IGRpZmYgLS1jb2xvciA+b3V0cHV0Ci0JZ3JlcCAiJGJsdWVfZ3JlcCIgb3V0cHV0ID5lcnJvcgotCWdyZXAgLXYgIiRibHVlX2dyZXAiIG91dHB1dCA+bm9ybWFsCisJcHJlcGFyZV9vdXRwdXQKIAogCWdyZXAgRWlnaHQgbm9ybWFsID4vZGV2L251bGwgJiYKIAlncmVwIEhUIGVycm9yID4vZGV2L251bGwgJiYKQEAgLTUzLDkgKzY3LDcgQEAKIAogCWdpdCBjb25maWcgLS11bnNldCBjb3JlLndoaXRlc3BhY2UKIAllY2hvICJGIHdoaXRlc3BhY2U9LXRyYWlsIiA+LmdpdGF0dHJpYnV0ZXMKLQlnaXQgZGlmZiAtLWNvbG9yID5vdXRwdXQKLQlncmVwICIkYmx1ZV9ncmVwIiBvdXRwdXQgPmVycm9yCi0JZ3JlcCAtdiAiJGJsdWVfZ3JlcCIgb3V0cHV0ID5ub3JtYWwKKwlwcmVwYXJlX291dHB1dAogCiAJZ3JlcCBFaWdodCBub3JtYWwgPi9kZXYvbnVsbCAmJgogCWdyZXAgSFQgZXJyb3IgPi9kZXYvbnVsbCAmJgpAQCAtNjksOSArODEsNyBAQAogCiAJcm0gLWYgLmdpdGF0dHJpYnV0ZXMKIAlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAtc3BhY2UKLQlnaXQgZGlmZiAtLWNvbG9yID5vdXRwdXQKLQlncmVwICIkYmx1ZV9ncmVwIiBvdXRwdXQgPmVycm9yCi0JZ3JlcCAtdiAiJGJsdWVfZ3JlcCIgb3V0cHV0ID5ub3JtYWwKKwlwcmVwYXJlX291dHB1dAogCiAJZ3JlcCBFaWdodCBub3JtYWwgPi9kZXYvbnVsbCAmJgogCWdyZXAgSFQgbm9ybWFsID4vZGV2L251bGwgJiYKQEAgLTg1LDkgKzk1LDcgQEAKIAogCWdpdCBjb25maWcgLS11bnNldCBjb3JlLndoaXRlc3BhY2UKIAllY2hvICJGIHdoaXRlc3BhY2U9LXNwYWNlIiA+LmdpdGF0dHJpYnV0ZXMKLQlnaXQgZGlmZiAtLWNvbG9yID5vdXRwdXQKLQlncmVwICIkYmx1ZV9ncmVwIiBvdXRwdXQgPmVycm9yCi0JZ3JlcCAtdiAiJGJsdWVfZ3JlcCIgb3V0cHV0ID5ub3JtYWwKKwlwcmVwYXJlX291dHB1dAogCiAJZ3JlcCBFaWdodCBub3JtYWwgPi9kZXYvbnVsbCAmJgogCWdyZXAgSFQgbm9ybWFsID4vZGV2L251bGwgJiYKQEAgLTEwMSw5ICsxMDksNyBAQAogCiAJcm0gLWYgLmdpdGF0dHJpYnV0ZXMKIAlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSBpbmRlbnQsLXRyYWlsaW5nLC1zcGFjZQotCWdpdCBkaWZmIC0tY29sb3IgPm91dHB1dAotCWdyZXAgIiRibHVlX2dyZXAiIG91dHB1dCA+ZXJyb3IKLQlncmVwIC12ICIkYmx1ZV9ncmVwIiBvdXRwdXQgPm5vcm1hbAorCXByZXBhcmVfb3V0cHV0CiAKIAlncmVwIEVpZ2h0IGVycm9yID4vZGV2L251bGwgJiYKIAlncmVwIEhUIG5vcm1hbCA+L2Rldi9udWxsICYmCkBAIC0xMTcsOSArMTIzLDcgQEAKIAogCWdpdCBjb25maWcgLS11bnNldCBjb3JlLndoaXRlc3BhY2UKIAllY2hvICJGIHdoaXRlc3BhY2U9aW5kZW50LC10cmFpbGluZywtc3BhY2UiID4uZ2l0YXR0cmlidXRlcwotCWdpdCBkaWZmIC0tY29sb3IgPm91dHB1dAotCWdyZXAgIiRibHVlX2dyZXAiIG91dHB1dCA+ZXJyb3IKLQlncmVwIC12ICIkYmx1ZV9ncmVwIiBvdXRwdXQgPm5vcm1hbAorCXByZXBhcmVfb3V0cHV0CiAKIAlncmVwIEVpZ2h0IGVycm9yID4vZGV2L251bGwgJiYKIAlncmVwIEhUIG5vcm1hbCA+L2Rldi9udWxsICYmCkBAIC0xMzMsOSArMTM3LDcgQEAKIAogCXJtIC1mIC5naXRhdHRyaWJ1dGVzCiAJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgY3ItYXQtZW9sCi0JZ2l0IGRpZmYgLS1jb2xvciA+b3V0cHV0Ci0JZ3JlcCAiJGJsdWVfZ3JlcCIgb3V0cHV0ID5lcnJvcgotCWdyZXAgLXYgIiRibHVlX2dyZXAiIG91dHB1dCA+bm9ybWFsCisJcHJlcGFyZV9vdXRwdXQKIAogCWdyZXAgRWlnaHQgbm9ybWFsID4vZGV2L251bGwgJiYKIAlncmVwIEhUIGVycm9yID4vZGV2L251bGwgJiYKQEAgLTE0OSw5ICsxNTEsNyBAQAogCiAJZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUud2hpdGVzcGFjZQogCWVjaG8gIkYgd2hpdGVzcGFjZT10cmFpbGluZyxjci1hdC1lb2wiID4uZ2l0YXR0cmlidXRlcwotCWdpdCBkaWZmIC0tY29sb3IgPm91dHB1dAotCWdyZXAgIiRibHVlX2dyZXAiIG91dHB1dCA+ZXJyb3IKLQlncmVwIC12ICIkYmx1ZV9ncmVwIiBvdXRwdXQgPm5vcm1hbAorCXByZXBhcmVfb3V0cHV0CiAKIAlncmVwIEVpZ2h0IG5vcm1hbCA+L2Rldi9udWxsICYmCiAJZ3JlcCBIVCBlcnJvciA+L2Rldi9udWxsICYmCkBAIC0xNjUsNyArMTY1LDcgQEAKIAogCXJtIC1mIC5naXRhdHRyaWJ1dGVzICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1jaGVjayA+b3V0cHV0ICYmCi0JZ3JlcCAiZW5kcyB3aXRoIGJsYW5rIGxpbmVzLiIgb3V0cHV0ICYmCisJZ3JlcCAibmV3IGJsYW5rIGxpbmUgYXQiIG91dHB1dCAmJgogCWdyZXAgInRyYWlsaW5nIHdoaXRlc3BhY2UiIG91dHB1dAogCiAnCkBAIC0xOTAsNCArMTkwLDEzIEBACiAKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29sb3IgbmV3IHRyYWlsaW5nIGJsYW5rIGxpbmVzJyAnCisJeyBlY2hvIGE7IGVjaG8gYjsgZWNobzsgZWNobzsgfSA+eCAmJgorCWdpdCBhZGQgeCAmJgorCXsgZWNobyBhOyBlY2hvOyBlY2hvOyBlY2hvOyBlY2hvIGM7IGVjaG87IGVjaG87IGVjaG87IGVjaG87IH0gPnggJiYKKwlnaXQgZGlmZiAtLWNvbG9yIHggPm91dHB1dCAmJgorCWNudD0kKCRncmVwX2EgIiR7Ymx1ZV9ncmVwfSIgb3V0cHV0IHwgd2MgLWwpICYmCisJdGVzdCAkY250ID0gMgorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMjAtZGlmZi1leHRlcm5hbC5zaCBiL3QvdDQwMjAtZGlmZi1leHRlcm5hbC5zaAppbmRleCAwNzIwMDAxLi5hNzYwMmNmIDEwMDc1NQotLS0gYS90L3Q0MDIwLWRpZmYtZXh0ZXJuYWwuc2gKKysrIGIvdC90NDAyMC1kaWZmLWV4dGVybmFsLnNoCkBAIC0xMzYsNiArMTM2LDE1IEBACiAJR0lUX0VYVEVSTkFMX0RJRkY9ZWNobyBnaXQgZGlmZgogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfRVhURVJOQUxfRElGRiBnZW5lcmF0ZXMgcHJldHR5IHBhdGhzJyAnCisJdG91Y2ggZmlsZS5leHQgJiYKKwlnaXQgYWRkIGZpbGUuZXh0ICYmCisJZWNobyB3aXRoIGV4dGVuc2lvbiA+IGZpbGUuZXh0ICYmCisJR0lUX0VYVEVSTkFMX0RJRkY9ZWNobyBnaXQgZGlmZiBmaWxlLmV4dCB8IGdyZXAgLi4uLi4uX2ZpbGVcLmV4dCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1mb3JjZS1yZW1vdmUgZmlsZS5leHQgJiYKKwlybSBmaWxlLmV4dAorJworCiBlY2hvICIjISRTSEVMTF9QQVRIIiA+ZmFrZS1kaWZmLnNoCiBjYXQgPj4gZmFrZS1kaWZmLnNoIDw8XEVPRgogY2F0ICQyID4+IGNybGZlZC50eHQKQEAgLTE1Nyw3ICsxNjYsNyBAQAogCWdpdCB1cGRhdGUtaW5kZXggLS1hc3N1bWUtdW5jaGFuZ2VkIGZpbGUgJiYKIAllY2hvIHNlY29uZCA+ZmlsZSAmJgogCWdpdCBkaWZmIC0tY2FjaGVkID5hY3R1YWwgJiYKLQl0ZXN0X2NtcCAuLi90NDAyMC9kaWZmLk5VTCBhY3R1YWwKKwl0ZXN0X2NtcCAiJFRFU1RfRElSRUNUT1JZIi90NDAyMC9kaWZmLk5VTCBhY3R1YWwKICcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDI2LWNvbG9yLnNoIGIvdC90NDAyNi1jb2xvci5zaAppbmRleCBiNjFlNTE2Li5kNWNjZGQwIDEwMDc1NQotLS0gYS90L3Q0MDI2LWNvbG9yLnNoCisrKyBiL3QvdDQwMjYtY29sb3Iuc2gKQEAgLTgsMTQgKzgsMTMgQEAKIAogY29sb3IoKQogewotCWdpdCBjb25maWcgZGlmZi5jb2xvci5uZXcgIiQxIiAmJgotCXRlc3QgImBnaXQgY29uZmlnIC0tZ2V0LWNvbG9yIGRpZmYuY29sb3IubmV3YCIgPSAiGyQyIgorCWFjdHVhbD0kKGdpdCBjb25maWcgLS1nZXQtY29sb3Igbm8uc3VjaC5zbG90ICIkMSIpICYmCisJdGVzdCAiJGFjdHVhbCIgPSAiGyQyIgogfQogCiBpbnZhbGlkX2NvbG9yKCkKIHsKLQlnaXQgY29uZmlnIGRpZmYuY29sb3IubmV3ICIkMSIgJiYKLQl0ZXN0IC16ICJgZ2l0IGNvbmZpZyAtLWdldC1jb2xvciBkaWZmLmNvbG9yLm5ldyAyPi9kZXYvbnVsbGAiCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWdldC1jb2xvciBuby5zdWNoLnNsb3QgIiQxIgogfQogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCcgJwpAQCAtNDIsNiArNDEsMTQgQEAKIAljb2xvciAiYmx1ZSByZWQgdWwiICJbNDszNDs0MW0iCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZnIGJnIGF0dHIuLi4nICcKKwljb2xvciAiYmx1ZSBib2xkIGRpbSB1bCBibGluayByZXZlcnNlIiAiWzE7Mjs0OzU7NzszNG0iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvbmcgY29sb3Igc3BlY2lmaWNhdGlvbicgJworCWNvbG9yICIyNTQgMjU1IGJvbGQgZGltIHVsIGJsaW5rIHJldmVyc2UiICJbMTsyOzQ7NTs3OzM4OzU7MjU0OzQ4OzU7MjU1bSIKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnMjU2IGNvbG9ycycgJwogCWNvbG9yICIyNTQgYm9sZCAyNTUiICJbMTszODs1OzI1NDs0ODs1OzI1NW0iCiAnCkBAIC02Niw0ICs3MywyMSBAQAogCWludmFsaWRfY29sb3IgImRpbVgiCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vua25vd24gY29sb3Igc2xvdHMgYXJlIGlnbm9yZWQgKGRpZmYpJyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGRpZmYuY29sb3IubmV3CisJZ2l0IGNvbmZpZyBjb2xvci5kaWZmLm5vc3VjaHNsb3R3aWxsZXZlcmJlZGVmaW5lZCB3aGl0ZSAmJgorCWdpdCBkaWZmIC0tY29sb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5rbm93biBjb2xvciBzbG90cyBhcmUgaWdub3JlZCAoYnJhbmNoKScgJworCWdpdCBjb25maWcgY29sb3IuYnJhbmNoLm5vc3VjaHNsb3R3aWxsZXZlcmJlZGVmaW5lZCB3aGl0ZSAmJgorCWdpdCBicmFuY2ggLWEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5rbm93biBjb2xvciBzbG90cyBhcmUgaWdub3JlZCAoc3RhdHVzKScgJworCWdpdCBjb25maWcgY29sb3Iuc3RhdHVzLm5vc3VjaHNsb3R3aWxsZXZlcmJlZGVmaW5lZCB3aGl0ZSB8fCBleGl0CisJZ2l0IHN0YXR1cworCWNhc2UgJD8gaW4gMHwxKSA6IG9rIDs7ICopIGZhbHNlIDs7IGVzYWMKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDI3LWRpZmYtc3VibW9kdWxlLnNoIGIvdC90NDAyNy1kaWZmLXN1Ym1vZHVsZS5zaAppbmRleCA1Y2Y4OTI0Li44M2MxOTE0IDEwMDc1NQotLS0gYS90L3Q0MDI3LWRpZmYtc3VibW9kdWxlLnNoCisrKyBiL3QvdDQwMjctZGlmZi1zdWJtb2R1bGUuc2gKQEAgLTMyLDcgKzMyLDggQEAKIAkJY2Qgc3ViICYmCiAJCWdpdCByZXYtbGlzdCBIRUFECiAJKSAmJgotCWVjaG8gIjoxNjAwMDAgMTYwMDAwICQzICRfejQwIE0Jc3ViIiA+ZXhwZWN0CisJZWNobyAiOjE2MDAwMCAxNjAwMDAgJDMgJF96NDAgTQlzdWIiID5leHBlY3QgJiYKKwlzdWJ0aXA9JDMgc3VicHJldj0kMgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiAtLXJhdyBIRUFEJyAnCkBAIC01MCw2ICs1MSw4NyBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuZmlsZXMKICcKIAorZXhwZWN0X2Zyb21fdG8gKCkgeworCXByaW50ZiAiJXNTdWJwcm9qZWN0IGNvbW1pdCAlc1xuK1N1YnByb2plY3QgY29tbWl0ICVzXG4iIFwKKwkJIi0iICIkMSIgIiQyIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiBIRUFEJyAnCisJZ2l0IGRpZmYgSEVBRCA+YWN0dWFsICYmCisJc2VkIC1lICIxLC9eQEAvZCIgYWN0dWFsID5hY3R1YWwuYm9keSAmJgorCWV4cGVjdF9mcm9tX3RvID5leHBlY3QuYm9keSAkc3VidGlwICRzdWJwcmV2ICYmCisJdGVzdF9jbXAgZXhwZWN0LmJvZHkgYWN0dWFsLmJvZHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgSEVBRCB3aXRoIGRpcnR5IHN1Ym1vZHVsZSAod29yayB0cmVlKScgJworCWVjaG8gPj5zdWIvd29ybGQgJiYKKwlnaXQgZGlmZiBIRUFEID5hY3R1YWwgJiYKKwlzZWQgLWUgIjEsL15AQC9kIiBhY3R1YWwgPmFjdHVhbC5ib2R5ICYmCisJZXhwZWN0X2Zyb21fdG8gPmV4cGVjdC5ib2R5ICRzdWJ0aXAgJHN1YnByZXYtZGlydHkgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYm9keSBhY3R1YWwuYm9keQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiBIRUFEIHdpdGggZGlydHkgc3VibW9kdWxlIChpbmRleCknICcKKwkoCisJCWNkIHN1YiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWVjaG8gPj53b3JsZCAmJgorCQlnaXQgYWRkIHdvcmxkCisJKSAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbCAmJgorCXNlZCAtZSAiMSwvXkBAL2QiIGFjdHVhbCA+YWN0dWFsLmJvZHkgJiYKKwlleHBlY3RfZnJvbV90byA+ZXhwZWN0LmJvZHkgJHN1YnRpcCAkc3VicHJldi1kaXJ0eSAmJgorCXRlc3RfY21wIGV4cGVjdC5ib2R5IGFjdHVhbC5ib2R5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIEhFQUQgd2l0aCBkaXJ0eSBzdWJtb2R1bGUgKHVudHJhY2tlZCknICcKKwkoCisJCWNkIHN1YiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWdpdCBjbGVhbiAtcWZkeCAmJgorCQk+Y3J1ZnQKKwkpICYmCisJZ2l0IGRpZmYgSEVBRCA+YWN0dWFsICYmCisJc2VkIC1lICIxLC9eQEAvZCIgYWN0dWFsID5hY3R1YWwuYm9keSAmJgorCWV4cGVjdF9mcm9tX3RvID5leHBlY3QuYm9keSAkc3VidGlwICRzdWJwcmV2LWRpcnR5ICYmCisJdGVzdF9jbXAgZXhwZWN0LmJvZHkgYWN0dWFsLmJvZHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgSEVBRCB3aXRoIGRpcnR5IHN1Ym1vZHVsZSAod29yayB0cmVlLCByZWZzIG1hdGNoKScgJworCWdpdCBjb21taXQgLW0gIngiIHN1YiAmJgorCWVjaG8gPj5zdWIvd29ybGQgJiYKKwlnaXQgZGlmZiBIRUFEID5hY3R1YWwgJiYKKwlzZWQgLWUgIjEsL15AQC9kIiBhY3R1YWwgPmFjdHVhbC5ib2R5ICYmCisJZXhwZWN0X2Zyb21fdG8gPmV4cGVjdC5ib2R5ICRzdWJwcmV2ICRzdWJwcmV2LWRpcnR5ICYmCisJdGVzdF9jbXAgZXhwZWN0LmJvZHkgYWN0dWFsLmJvZHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgSEVBRCB3aXRoIGRpcnR5IHN1Ym1vZHVsZSAoaW5kZXgsIHJlZnMgbWF0Y2gpJyAnCisJKAorCQljZCBzdWIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQllY2hvID4+d29ybGQgJiYKKwkJZ2l0IGFkZCB3b3JsZAorCSkgJiYKKwlnaXQgZGlmZiBIRUFEID5hY3R1YWwgJiYKKwlzZWQgLWUgIjEsL15AQC9kIiBhY3R1YWwgPmFjdHVhbC5ib2R5ICYmCisJZXhwZWN0X2Zyb21fdG8gPmV4cGVjdC5ib2R5ICRzdWJwcmV2ICRzdWJwcmV2LWRpcnR5ICYmCisJdGVzdF9jbXAgZXhwZWN0LmJvZHkgYWN0dWFsLmJvZHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgSEVBRCB3aXRoIGRpcnR5IHN1Ym1vZHVsZSAodW50cmFja2VkLCByZWZzIG1hdGNoKScgJworCSgKKwkJY2Qgc3ViICYmCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZ2l0IGNsZWFuIC1xZmR4ICYmCisJCT5jcnVmdAorCSkgJiYKKwlnaXQgZGlmZiBIRUFEID5hY3R1YWwgJiYKKwlzZWQgLWUgIjEsL15AQC9kIiBhY3R1YWwgPmFjdHVhbC5ib2R5ICYmCisJZXhwZWN0X2Zyb21fdG8gPmV4cGVjdC5ib2R5ICRzdWJwcmV2ICRzdWJwcmV2LWRpcnR5ICYmCisJdGVzdF9jbXAgZXhwZWN0LmJvZHkgYWN0dWFsLmJvZHkKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgKGVtcHR5IHN1Ym1vZHVsZSBkaXIpJyAnCiAJOiA+ZW1wdHkgJiYKIAlybSAtcmYgc3ViLyogc3ViLy5naXQgJiYKZGlmZiAtLWdpdCBhL3QvdDQwMzAtZGlmZi10ZXh0Y29udi5zaCBiL3QvdDQwMzAtZGlmZi10ZXh0Y29udi5zaAppbmRleCBhM2YwODk3Li44OGM1NjE5IDEwMDc1NQotLS0gYS90L3Q0MDMwLWRpZmYtdGV4dGNvbnYuc2gKKysrIGIvdC90NDAzMC1kaWZmLXRleHRjb252LnNoCkBAIC00OCw3ICs0OCw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRleHRjb252IGZpbHRlcnMnICcKIAllY2hvIGZpbGUgZGlmZj1mb28gPi5naXRhdHRyaWJ1dGVzICYmCi0JZ2l0IGNvbmZpZyBkaWZmLmZvby50ZXh0Y29udiAiJFBXRCIvaGV4ZHVtcCAmJgorCWdpdCBjb25maWcgZGlmZi5mb28udGV4dGNvbnYgIlwiJChwd2QpXCIiL2hleGR1bXAgJiYKIAlnaXQgY29uZmlnIGRpZmYuZmFpbC50ZXh0Y29udiBmYWxzZQogJwogCmRpZmYgLS1naXQgYS90L3Q0MDMxLWRpZmYtcmV3cml0ZS1iaW5hcnkuc2ggYi90L3Q0MDMxLWRpZmYtcmV3cml0ZS1iaW5hcnkuc2gKaW5kZXggYTg5NGM2MC4uN2U3YjMwNyAxMDA3NTUKLS0tIGEvdC90NDAzMS1kaWZmLXJld3JpdGUtYmluYXJ5LnNoCisrKyBiL3QvdDQwMzEtZGlmZi1yZXdyaXRlLWJpbmFyeS5zaApAQCAtNTQsNyArNTQsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0ZXh0Y29udicgJwogCWVjaG8gZmlsZSBkaWZmPWZvbyA+LmdpdGF0dHJpYnV0ZXMgJiYKLQlnaXQgY29uZmlnIGRpZmYuZm9vLnRleHRjb252ICIkUFdEIi9kdW1wCisJZ2l0IGNvbmZpZyBkaWZmLmZvby50ZXh0Y29udiAiXCIkKHB3ZClcIiIvZHVtcAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXdyaXRlIGRpZmYgcmVzcGVjdHMgdGV4dGNvbnYnICcKZGlmZiAtLWdpdCBhL3QvdDQwMzQtZGlmZi13b3Jkcy5zaCBiL3QvdDQwMzQtZGlmZi13b3Jkcy5zaAppbmRleCA0NTA4ZWZmLi4yZTJlMTAzIDEwMDc1NQotLS0gYS90L3Q0MDM0LWRpZmYtd29yZHMuc2gKKysrIGIvdC90NDAzNC1kaWZmLXdvcmRzLnNoCkBAIC04LDIxICs4LDEzIEBACiAKIAlnaXQgY29uZmlnIGRpZmYuY29sb3Iub2xkIHJlZAogCWdpdCBjb25maWcgZGlmZi5jb2xvci5uZXcgZ3JlZW4KKwlnaXQgY29uZmlnIGRpZmYuY29sb3IuZnVuYyBtYWdlbnRhCiAKICcKIAotZGVjcnlwdF9jb2xvciAoKSB7Ci0Jc2VkIFwKLQkJLWUgJ3MvLlxbMW0vPFdISVRFPi9nJyBcCi0JCS1lICdzLy5cWzMxbS88UkVEPi9nJyBcCi0JCS1lICdzLy5cWzMybS88R1JFRU4+L2cnIFwKLQkJLWUgJ3MvLlxbMzZtLzxCUk9XTj4vZycgXAotCQktZSAncy8uXFttLzxSRVNFVD4vZycKLX0KLQogd29yZF9kaWZmICgpIHsKIAl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLW5vLWluZGV4ICIkQCIgcHJlIHBvc3QgPiBvdXRwdXQgJiYKLQlkZWNyeXB0X2NvbG9yIDwgb3V0cHV0ID4gb3V0cHV0LmRlY3J5cHRlZCAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxvdXRwdXQgPm91dHB1dC5kZWNyeXB0ZWQgJiYKIAl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0LmRlY3J5cHRlZAogfQogCkBAIC00Nyw5ICszOSw5IEBACiA8V0hJVEU+aW5kZXggMzMwYjA0Zi4uNWVkOGVmZiAxMDA2NDQ8UkVTRVQ+CiA8V0hJVEU+LS0tIGEvcHJlPFJFU0VUPgogPFdISVRFPisrKyBiL3Bvc3Q8UkVTRVQ+Ci08QlJPV04+QEAgLTEsMyArMSw3IEBAPFJFU0VUPgorPENZQU4+QEAgLTEsMyArMSw3IEBAPFJFU0VUPgogPFJFRD5oKDQpPFJFU0VUPjxHUkVFTj5oKDQpLGhoWzQ0XTxSRVNFVD4KLTxSRVNFVD4KKwogYSA9IGIgKyBjPFJFU0VUPgogCiA8R1JFRU4+YWEgPSBhPFJFU0VUPgpAQCAtNjgsOSArNjAsMjkgQEAKIDxXSElURT5pbmRleCAzMzBiMDRmLi41ZWQ4ZWZmIDEwMDY0NDxSRVNFVD4KIDxXSElURT4tLS0gYS9wcmU8UkVTRVQ+CiA8V0hJVEU+KysrIGIvcG9zdDxSRVNFVD4KLTxCUk9XTj5AQCAtMSwzICsxLDcgQEA8UkVTRVQ+Cis8Q1lBTj5AQCAtMSArMSBAQDxSRVNFVD4KKzxSRUQ+aCg0KTxSRVNFVD48R1JFRU4+aCg0KSxoaFs0NF08UkVTRVQ+Cis8Q1lBTj5AQCAtMywwICs0LDQgQEA8UkVTRVQ+IDxSRVNFVD48TUFHRU5UQT5hID0gYiArIGM8UkVTRVQ+CisKKzxHUkVFTj5hYSA9IGE8UkVTRVQ+CisKKzxHUkVFTj5hZWZmID0gYWVmZiAqICggYWFhICk8UkVTRVQ+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd29yZCBkaWZmIHdpdGhvdXQgY29udGV4dCcgJworCisJd29yZF9kaWZmIC0tY29sb3Itd29yZHMgLS11bmlmaWVkPTAKKworJworCitjYXQgPiBleHBlY3QgPDxcRU9GCis8V0hJVEU+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+Cis8V0hJVEU+aW5kZXggMzMwYjA0Zi4uNWVkOGVmZiAxMDA2NDQ8UkVTRVQ+Cis8V0hJVEU+LS0tIGEvcHJlPFJFU0VUPgorPFdISVRFPisrKyBiL3Bvc3Q8UkVTRVQ+Cis8Q1lBTj5AQCAtMSwzICsxLDcgQEA8UkVTRVQ+CiBoKDQpLDxHUkVFTj5oaDxSRVNFVD5bNDRdCi08UkVTRVQ+CisKIGEgPSBiICsgYzxSRVNFVD4KIAogPEdSRUVOPmFhID0gYTxSRVNFVD4KQEAgLTEwNCw5ICsxMTYsOSBAQAogPFdISVRFPmluZGV4IDMzMGIwNGYuLjVlZDhlZmYgMTAwNjQ0PFJFU0VUPgogPFdISVRFPi0tLSBhL3ByZTxSRVNFVD4KIDxXSElURT4rKysgYi9wb3N0PFJFU0VUPgotPEJST1dOPkBAIC0xLDMgKzEsNyBAQDxSRVNFVD4KKzxDWUFOPkBAIC0xLDMgKzEsNyBAQDxSRVNFVD4KIGgoNCk8R1JFRU4+LGhoWzQ0XTxSRVNFVD4KLTxSRVNFVD4KKwogYSA9IGIgKyBjPFJFU0VUPgogCiA8R1JFRU4+YWEgPSBhPFJFU0VUPgpAQCAtMTQ2LDkgKzE1OCw5IEBACiA8V0hJVEU+aW5kZXggMzMwYjA0Zi4uNWVkOGVmZiAxMDA2NDQ8UkVTRVQ+CiA8V0hJVEU+LS0tIGEvcHJlPFJFU0VUPgogPFdISVRFPisrKyBiL3Bvc3Q8UkVTRVQ+Ci08QlJPV04+QEAgLTEsMyArMSw3IEBAPFJFU0VUPgorPENZQU4+QEAgLTEsMyArMSw3IEBAPFJFU0VUPgogaCg0KSw8R1JFRU4+aGhbNDQ8UkVTRVQ+XQotPFJFU0VUPgorCiBhID0gYiArIGM8UkVTRVQ+CiAKIDxHUkVFTj5hYSA9IGE8UkVTRVQ+CkBAIC0xNjgsNyArMTgwLDcgQEAKIDxXSElURT5pbmRleCBjMjk0NTNiLi5iZTIyZjM3IDEwMDY0NDxSRVNFVD4KIDxXSElURT4tLS0gYS9wcmU8UkVTRVQ+CiA8V0hJVEU+KysrIGIvcG9zdDxSRVNFVD4KLTxCUk9XTj5AQCAtMSArMSBAQDxSRVNFVD4KKzxDWUFOPkBAIC0xICsxIEBAPFJFU0VUPgogYWFhIChhYWEpIDxHUkVFTj5hYWE8UkVTRVQ+CiBFT0YKIApAQCAtMTg3LDcgKzE5OSw3IEBACiA8V0hJVEU+aW5kZXggMjg5Y2I5ZC4uMmQwNmYzNyAxMDA2NDQ8UkVTRVQ+CiA8V0hJVEU+LS0tIGEvcHJlPFJFU0VUPgogPFdISVRFPisrKyBiL3Bvc3Q8UkVTRVQ+Ci08QlJPV04+QEAgLTEgKzEgQEA8UkVTRVQ+Cis8Q1lBTj5AQCAtMSArMSBAQDxSRVNFVD4KICg8UkVEPjo8UkVTRVQ+CiBFT0YKIApkaWZmIC0tZ2l0IGEvdC90NDAzNy1kaWZmLXItdC1kaXJzLnNoIGIvdC90NDAzNy1kaWZmLXItdC1kaXJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY1Y2UzYjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM3LWRpZmYtci10LWRpcnMuc2gKQEAgLTAsMCArMSw1MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2RpZmYgLXIgLXQgc2hvd3MgZGlyZWN0b3J5IGFkZGl0aW9ucyBhbmQgZGVsZXRpb25zJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJbWtkaXIgZGMgZHIgZHQgJiYKKwk+ZGMvMSAmJgorCT5kci8yICYmCisJPmR0LzMgJiYKKwk+ZmMgJiYKKwk+ZnIgJiYKKwk+ZnQgJiYKKwlnaXQgYWRkIC4gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCXJtIC1mciBkdCBkciBmdCBmciAmJgorCW1rZGlyIGRhIGZ0ICYmCisJZm9yIHAgaW4gZGMvMSBkYS80IGR0IGZ0LzUgZmMKKwlkbworCQllY2hvIGhlbGxvID4kcCB8fCBleGl0CisJZG9uZSAmJgorCWdpdCBhZGQgLXUgJiYKKwlnaXQgYWRkIC4gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHNlY29uZAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK0EJZGEKK0EJZGEvNAorTQlkYworTQlkYy8xCitECWRyCitECWRyLzIKK0EJZHQKK0QJZHQKK0QJZHQvMworTQlmYworRAlmcgorRAlmdAorQQlmdAorQQlmdC81CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyB2ZXJpZnkgJworCWdpdCBkaWZmLXRyZWUgLXIgLXQgLS1uYW1lLXN0YXR1cyBIRUFEXiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAzOC1kaWZmLWNvbWJpbmVkLnNoIGIvdC90NDAzOC1kaWZmLWNvbWJpbmVkLnNoCmluZGV4IDJjZjdlMDEuLjc1ODRlZmEgMTAwNzU1Ci0tLSBhL3QvdDQwMzgtZGlmZi1jb21iaW5lZC5zaAorKysgYi90L3Q0MDM4LWRpZmYtY29tYmluZWQuc2gKQEAgLTc2LDcgKzc2LDcgQEAKIAl2ZXJpZnlfaGVscGVyIHNpZGV3aXRob25lCiAnCiAKLXRlc3RfZXhwZWN0X2ZhaWx1cmUgJ2NoZWNrIGNvbWJpbmVkIG91dHB1dCAoMiknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGNvbWJpbmVkIG91dHB1dCAoMiknICcKIAlnaXQgc2hvdyBzaWRlc2Fuc29uZSAtLSA+c2lkZXNhbnNvbmUgJiYKIAl2ZXJpZnlfaGVscGVyIHNpZGVzYW5zb25lCiAnCmRpZmYgLS1naXQgYS90L3Q0MDM5LWRpZmYtYXNzdW1lLXVuY2hhbmdlZC5zaCBiL3QvdDQwMzktZGlmZi1hc3N1bWUtdW5jaGFuZ2VkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlkOTQ5OGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM5LWRpZmYtYXNzdW1lLXVuY2hhbmdlZC5zaApAQCAtMCwwICsxLDMxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZGlmZiB3aXRoIGFzc3VtZS11bmNoYW5nZWQgZW50cmllcycKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgZXh0ZXJuYWwgZGlmZiBoYXMgYmVlbiB0ZXN0ZWQgaW4gdDQwMjAtZGlmZi1leHRlcm5hbC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gemVybyA+IHplcm8gJiYKKwlnaXQgYWRkIHplcm8gJiYKKwlnaXQgY29tbWl0IC1tIHplcm8gJiYKKwllY2hvIG9uZSA+IG9uZSAmJgorCWVjaG8gdHdvID4gdHdvICYmCisJZ2l0IGFkZCBvbmUgdHdvICYmCisJZ2l0IGNvbW1pdCAtbSBvbmV0d28gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYXNzdW1lLXVuY2hhbmdlZCBvbmUgJiYKKwllY2hvIGJvcmtlZCA+PiBvbmUgJiYKKwl0ZXN0ICIkKGdpdCBscy1maWxlcyAtdiBvbmUpIiA9ICJoIG9uZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1pbmRleCBkb2VzIG5vdCBleGFtaW5lIGFzc3VtZS11bmNoYW5nZWQgZW50cmllcycgJworCWdpdCBkaWZmLWluZGV4IEhFQUReIC0tIG9uZSB8IGdyZXAgLXEgNTYyNmFiZjBmNzJlNThkN2ExNTMzNjhiYTU3ZGI0YzY3M2MwZTE3MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWZpbGVzIGRvZXMgbm90IGV4YW1pbmUgYXNzdW1lLXVuY2hhbmdlZCBlbnRyaWVzJyAnCisJcm0gb25lICYmCisJdGVzdCAteiAiJChnaXQgZGlmZi1maWxlcyAtLSBvbmUpIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwNDAtd2hpdGVzcGFjZS1zdGF0dXMuc2ggYi90L3Q0MDQwLXdoaXRlc3BhY2Utc3RhdHVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEzMGIwM2IKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDQwLXdoaXRlc3BhY2Utc3RhdHVzLnNoCkBAIC0wLDAgKzEsNjMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdkaWZmIC0tZXhpdC1jb2RlIHdpdGggd2hpdGVzcGFjZScKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlta2RpciBhIGIgJiYKKwllY2hvID5jICYmCisJZWNobyA+YS9kICYmCisJZWNobyA+Yi9lICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZWNobyAiICIgPmEvZCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gc2Vjb25kICYmCisJZWNobyAiICAiID5hL2QgJiYKKwllY2hvICIgIiA+Yi9lICYmCisJZ2l0IGFkZCBhL2QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi10cmVlIC0tZXhpdC1jb2RlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1leGl0LWNvZGUgSEVBRF4gSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLXRyZWUgLS1leGl0LWNvZGUgSEVBRF4gSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWUgLWIgLS1leGl0LWNvZGUnICcKKwlnaXQgZGlmZiAtYiAtLWV4aXQtY29kZSBIRUFEXiBIRUFEICYmCisJZ2l0IGRpZmYtdHJlZSAtYiAtcCAtLWV4aXQtY29kZSBIRUFEXiBIRUFEICYmCisJZ2l0IGRpZmYtdHJlZSAtYiAtLWV4aXQtY29kZSBIRUFEXiBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtaW5kZXggLS1jYWNoZWQgLS1leGl0LWNvZGUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWNhY2hlZCAtLWV4aXQtY29kZSBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1leGl0LWNvZGUgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWluZGV4IC1iIC1wIC0tY2FjaGVkIC0tZXhpdC1jb2RlJyAnCisJZ2l0IGRpZmYgLWIgLS1jYWNoZWQgLS1leGl0LWNvZGUgSEVBRCAmJgorCWdpdCBkaWZmLWluZGV4IC1iIC1wIC0tY2FjaGVkIC0tZXhpdC1jb2RlIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1pbmRleCAtLWV4aXQtY29kZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1pbmRleCAtLWV4aXQtY29kZSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtaW5kZXggLWIgLXAgLS1leGl0LWNvZGUnICcKKwlnaXQgZGlmZiAtYiAtLWV4aXQtY29kZSBIRUFEICYmCisJZ2l0IGRpZmYtaW5kZXggLWIgLXAgLS1leGl0LWNvZGUgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWZpbGVzIC0tZXhpdC1jb2RlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1leGl0LWNvZGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1maWxlcyAtLWV4aXQtY29kZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWZpbGVzIC1iIC1wIC0tZXhpdC1jb2RlJyAnCisJZ2l0IGRpZmYgLWIgLS1leGl0LWNvZGUgJiYKKwlnaXQgZGlmZi1maWxlcyAtYiAtcCAtLWV4aXQtY29kZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwNDEtZGlmZi1zdWJtb2R1bGUuc2ggYi90L3Q0MDQxLWRpZmYtc3VibW9kdWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ2NDMwNTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDQxLWRpZmYtc3VibW9kdWxlLnNoCkBAIC0wLDAgKzEsMzI3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEplbnMgTGVobWFubiwgYmFzZWQgb24gdDc0MDEgYnkgUGluZyBZaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nU3VwcG9ydCBmb3IgdmVyYm9zZSBzdWJtb2R1bGUgZGlmZmVyZW5jZXMgaW4gZ2l0IGRpZmYKKworVGhpcyB0ZXN0IHRyaWVzIHRvIHZlcmlmeSB0aGUgc2FuaXR5IG9mIHRoZSAtLXN1Ym1vZHVsZSBvcHRpb24gb2YgZ2l0IGRpZmYuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCithZGRfZmlsZSAoKSB7CisJc209JDEKKwlzaGlmdAorCW93ZD0kKHB3ZCkKKwljZCAiJHNtIgorCWZvciBuYW1lOyBkbworCQllY2hvICIkbmFtZSIgPiAiJG5hbWUiICYmCisJCWdpdCBhZGQgIiRuYW1lIiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQWRkICRuYW1lIgorCWRvbmUgPi9kZXYvbnVsbAorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCB8IGN1dCAtYzEtNworCWNkICIkb3dkIgorfQorY29tbWl0X2ZpbGUgKCkgeworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgIiRAIiAtbSAiQ29tbWl0ICQqIiA+L2Rldi9udWxsCit9CisKK3Rlc3RfY3JlYXRlX3JlcG8gc20xICYmCithZGRfZmlsZSAuIGZvbyA+L2Rldi9udWxsCisKK2hlYWQxPSQoYWRkX2ZpbGUgc20xIGZvbzEgZm9vMikKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkZWQgc3VibW9kdWxlJyAiCisJZ2l0IGFkZCBzbTEgJiYKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJZGlmZiBhY3R1YWwgLSA8PC1FT0YKK1N1Ym1vZHVsZSBzbTEgMDAwMDAwMC4uLiRoZWFkMSAobmV3IHN1Ym1vZHVsZSkKK0VPRgorIgorCitjb21taXRfZmlsZSBzbTEgJiYKK2hlYWQyPSQoYWRkX2ZpbGUgc20xIGZvbzMpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZShmb3J3YXJkKScgIgorCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwlkaWZmIGFjdHVhbCAtIDw8LUVPRgorU3VibW9kdWxlIHNtMSAkaGVhZDEuLiRoZWFkMjoKKyAgPiBBZGQgZm9vMworRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZShmb3J3YXJkKScgIgorCWdpdCBkaWZmIC0tc3VibW9kdWxlPWxvZyA+YWN0dWFsICYmCisJZGlmZiBhY3R1YWwgLSA8PC1FT0YKK1N1Ym1vZHVsZSBzbTEgJGhlYWQxLi4kaGVhZDI6CisgID4gQWRkIGZvbzMKK0VPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUoZm9yd2FyZCkgLS1zdWJtb2R1bGUnICIKKwlnaXQgZGlmZiAtLXN1Ym1vZHVsZSA+YWN0dWFsICYmCisJZGlmZiBhY3R1YWwgLSA8PC1FT0YKK1N1Ym1vZHVsZSBzbTEgJGhlYWQxLi4kaGVhZDI6CisgID4gQWRkIGZvbzMKK0VPRgorIgorCitmdWxsaGVhZDE9JChjZCBzbTE7IGdpdCByZXYtbGlzdCAtLW1heC1jb3VudD0xICRoZWFkMSkKK2Z1bGxoZWFkMj0kKGNkIHNtMTsgZ2l0IHJldi1saXN0IC0tbWF4LWNvdW50PTEgJGhlYWQyKQordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlKGZvcndhcmQpIC0tc3VibW9kdWxlPXNob3J0JyAiCisJZ2l0IGRpZmYgLS1zdWJtb2R1bGU9c2hvcnQgPmFjdHVhbCAmJgorCWRpZmYgYWN0dWFsIC0gPDwtRU9GCitkaWZmIC0tZ2l0IGEvc20xIGIvc20xCitpbmRleCAkaGVhZDEuLiRoZWFkMiAxNjAwMDAKKy0tLSBhL3NtMQorKysrIGIvc20xCitAQCAtMSArMSBAQAorLVN1YnByb2plY3QgY29tbWl0ICRmdWxsaGVhZDEKKytTdWJwcm9qZWN0IGNvbW1pdCAkZnVsbGhlYWQyCitFT0YKKyIKKworY29tbWl0X2ZpbGUgc20xICYmCitjZCBzbTEgJiYKK2dpdCByZXNldCAtLWhhcmQgSEVBRH4yID4vZGV2L251bGwgJiYKK2hlYWQzPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEIHwgY3V0IC1jMS03KSAmJgorY2QgLi4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlKGJhY2t3YXJkKScgIgorCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwlkaWZmIGFjdHVhbCAtIDw8LUVPRgorU3VibW9kdWxlIHNtMSAkaGVhZDIuLiRoZWFkMyAocmV3aW5kKToKKyAgPCBBZGQgZm9vMworICA8IEFkZCBmb28yCitFT0YKKyIKKworaGVhZDQ9JChhZGRfZmlsZSBzbTEgZm9vNCBmb281KSAmJgoraGVhZDRfZnVsbD0kKEdJVF9ESVI9c20xLy5naXQgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKQordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlKGJhY2t3YXJkIGFuZCBmb3J3YXJkKScgIgorCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwlkaWZmIGFjdHVhbCAtIDw8LUVPRgorU3VibW9kdWxlIHNtMSAkaGVhZDIuLi4kaGVhZDQ6CisgID4gQWRkIGZvbzUKKyAgPiBBZGQgZm9vNAorICA8IEFkZCBmb28zCisgIDwgQWRkIGZvbzIKK0VPRgorIgorCitjb21taXRfZmlsZSBzbTEgJiYKK212IHNtMSBzbTEtYmFrICYmCitlY2hvIHNtMSA+c20xICYmCitoZWFkNT0kKGdpdCBoYXNoLW9iamVjdCBzbTEgfCBjdXQgLWMxLTcpICYmCitnaXQgYWRkIHNtMSAmJgorcm0gLWYgc20xICYmCittdiBzbTEtYmFrIHNtMQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0eXBlY2hhbmdlZCBzdWJtb2R1bGUoc3VibW9kdWxlLT5ibG9iKSwgLS1jYWNoZWQnICIKKwlnaXQgZGlmZiAtLXN1Ym1vZHVsZT1sb2cgLS1jYWNoZWQgPmFjdHVhbCAmJgorCWRpZmYgYWN0dWFsIC0gPDwtRU9GCitTdWJtb2R1bGUgc20xIDQxZmJlYTkuLi4wMDAwMDAwIChzdWJtb2R1bGUgZGVsZXRlZCkKK2RpZmYgLS1naXQgYS9zbTEgYi9zbTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi45ZGE1ZmI4CistLS0gL2Rldi9udWxsCisrKysgYi9zbTEKK0BAIC0wLDAgKzEgQEAKKytzbTEKK0VPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0eXBlY2hhbmdlZCBzdWJtb2R1bGUoc3VibW9kdWxlLT5ibG9iKScgIgorCWdpdCBkaWZmIC0tc3VibW9kdWxlPWxvZyA+YWN0dWFsICYmCisJZGlmZiBhY3R1YWwgLSA8PC1FT0YKK2RpZmYgLS1naXQgYS9zbTEgYi9zbTEKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggOWRhNWZiOC4uMDAwMDAwMAorLS0tIGEvc20xCisrKysgL2Rldi9udWxsCitAQCAtMSArMCwwIEBACistc20xCitTdWJtb2R1bGUgc20xIDAwMDAwMDAuLi4kaGVhZDQgKG5ldyBzdWJtb2R1bGUpCitFT0YKKyIKKworcm0gLXJmIHNtMSAmJgorZ2l0IGNoZWNrb3V0LWluZGV4IHNtMQordGVzdF9leHBlY3Rfc3VjY2VzcyAndHlwZWNoYW5nZWQgc3VibW9kdWxlKHN1Ym1vZHVsZS0+YmxvYiknICIKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJZGlmZiBhY3R1YWwgLSA8PC1FT0YKK1N1Ym1vZHVsZSBzbTEgJGhlYWQ0Li4uMDAwMDAwMCAoc3VibW9kdWxlIGRlbGV0ZWQpCitkaWZmIC0tZ2l0IGEvc20xIGIvc20xCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uJGhlYWQ1CistLS0gL2Rldi9udWxsCisrKysgYi9zbTEKK0BAIC0wLDAgKzEgQEAKKytzbTEKK0VPRgorIgorCitybSAtZiBzbTEgJiYKK3Rlc3RfY3JlYXRlX3JlcG8gc20xICYmCitoZWFkNj0kKGFkZF9maWxlIHNtMSBmb282IGZvbzcpCitmdWxsaGVhZDY9JChjZCBzbTE7IGdpdCByZXYtbGlzdCAtLW1heC1jb3VudD0xICRoZWFkNikKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbmV4aXN0ZW50IGNvbW1pdCcgIgorCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwlkaWZmIGFjdHVhbCAtIDw8LUVPRgorU3VibW9kdWxlIHNtMSAkaGVhZDQuLi4kaGVhZDYgKGNvbW1pdHMgbm90IHByZXNlbnQpCitFT0YKKyIKKworY29tbWl0X2ZpbGUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R5cGVjaGFuZ2VkIHN1Ym1vZHVsZShibG9iLT5zdWJtb2R1bGUpJyAiCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCWRpZmYgYWN0dWFsIC0gPDwtRU9GCitkaWZmIC0tZ2l0IGEvc20xIGIvc20xCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4ICRoZWFkNS4uMDAwMDAwMAorLS0tIGEvc20xCisrKysgL2Rldi9udWxsCitAQCAtMSArMCwwIEBACistc20xCitTdWJtb2R1bGUgc20xIDAwMDAwMDAuLi4kaGVhZDYgKG5ldyBzdWJtb2R1bGUpCitFT0YKKyIKKworY29tbWl0X2ZpbGUgc20xICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgaXMgdXAgdG8gZGF0ZScgIgorCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwlkaWZmIGFjdHVhbCAtIDw8LUVPRgorRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgY29udGVudCcgIgorCWVjaG8gbmV3ID4gc20xL25ldy1maWxlICYmCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCWRpZmYgYWN0dWFsIC0gPDwtRU9GCitTdWJtb2R1bGUgc20xICRoZWFkNi4uJGhlYWQ2LWRpcnR5OgorRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmZWQgY29udGVudCcgIgorCWVjaG8gbmV3ID4gc20xL2ZvbzYgJiYKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJZGlmZiBhY3R1YWwgLSA8PC1FT0YKK1N1Ym1vZHVsZSBzbTEgJGhlYWQ2Li4kaGVhZDYtZGlydHk6CitFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGNvbnRhaW5zIG1vZGlmZWQgY29udGVudCcgIgorCXJtIC1mIHNtMS9uZXctZmlsZSAmJgorCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwlkaWZmIGFjdHVhbCAtIDw8LUVPRgorU3VibW9kdWxlIHNtMSAkaGVhZDYuLiRoZWFkNi1kaXJ0eToKK0VPRgorIgorCisoY2Qgc20xOyBnaXQgY29tbWl0IC1tY2hhbmdlIGZvbzYgPi9kZXYvbnVsbCkgJiYKK2hlYWQ4PSQoY2Qgc20xOyBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgfCBjdXQgLWMxLTcpICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgaXMgbW9kaWZpZWQnICIKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJZGlmZiBhY3R1YWwgLSA8PC1FT0YKK1N1Ym1vZHVsZSBzbTEgJGhlYWQ2Li4kaGVhZDg6CisgID4gY2hhbmdlCitFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlIGNvbnRhaW5zIHVudHJhY2tlZCBjb250ZW50JyAiCisJZWNobyBuZXcgPiBzbTEvbmV3LWZpbGUgJiYKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJZGlmZiBhY3R1YWwgLSA8PC1FT0YKK1N1Ym1vZHVsZSBzbTEgJGhlYWQ2Li4kaGVhZDgtZGlydHk6CisgID4gY2hhbmdlCitFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlIGNvbnRhaW5zIHVudHJhY2tlZCBhbmQgbW9kaWZlZCBjb250ZW50JyAiCisJZWNobyBtb2RpZmljYXRpb24gPj4gc20xL2ZvbzYgJiYKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJZGlmZiBhY3R1YWwgLSA8PC1FT0YKK1N1Ym1vZHVsZSBzbTEgJGhlYWQ2Li4kaGVhZDgtZGlydHk6CisgID4gY2hhbmdlCitFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlIGNvbnRhaW5zIG1vZGlmZWQgY29udGVudCcgIgorCXJtIC1mIHNtMS9uZXctZmlsZSAmJgorCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwlkaWZmIGFjdHVhbCAtIDw8LUVPRgorU3VibW9kdWxlIHNtMSAkaGVhZDYuLiRoZWFkOC1kaXJ0eToKKyAgPiBjaGFuZ2UKK0VPRgorIgorCitybSAtcmYgc20xCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGVkIHN1Ym1vZHVsZScgIgorCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwlkaWZmIGFjdHVhbCAtIDw8LUVPRgorU3VibW9kdWxlIHNtMSAkaGVhZDYuLi4wMDAwMDAwIChzdWJtb2R1bGUgZGVsZXRlZCkKK0VPRgorIgorCit0ZXN0X2NyZWF0ZV9yZXBvIHNtMiAmJgoraGVhZDc9JChhZGRfZmlsZSBzbTIgZm9vOCBmb285KSAmJgorZ2l0IGFkZCBzbTIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlwbGUgc3VibW9kdWxlcycgIgorCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwlkaWZmIGFjdHVhbCAtIDw8LUVPRgorU3VibW9kdWxlIHNtMSAkaGVhZDYuLi4wMDAwMDAwIChzdWJtb2R1bGUgZGVsZXRlZCkKK1N1Ym1vZHVsZSBzbTIgMDAwMDAwMC4uLiRoZWFkNyAobmV3IHN1Ym1vZHVsZSkKK0VPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRoIGZpbHRlcicgIgorCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEIHNtMiA+YWN0dWFsICYmCisJZGlmZiBhY3R1YWwgLSA8PC1FT0YKK1N1Ym1vZHVsZSBzbTIgMDAwMDAwMC4uLiRoZWFkNyAobmV3IHN1Ym1vZHVsZSkKK0VPRgorIgorCitjb21taXRfZmlsZSBzbTIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdmVuIGNvbW1pdCcgIgorCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEXiA+YWN0dWFsICYmCisJZGlmZiBhY3R1YWwgLSA8PC1FT0YKK1N1Ym1vZHVsZSBzbTEgJGhlYWQ2Li4uMDAwMDAwMCAoc3VibW9kdWxlIGRlbGV0ZWQpCitTdWJtb2R1bGUgc20yIDAwMDAwMDAuLi4kaGVhZDcgKG5ldyBzdWJtb2R1bGUpCitFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l2ZW4gY29tbWl0IC0tc3VibW9kdWxlJyAiCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGUgSEVBRF4gPmFjdHVhbCAmJgorCWRpZmYgYWN0dWFsIC0gPDwtRU9GCitTdWJtb2R1bGUgc20xICRoZWFkNi4uLjAwMDAwMDAgKHN1Ym1vZHVsZSBkZWxldGVkKQorU3VibW9kdWxlIHNtMiAwMDAwMDAwLi4uJGhlYWQ3IChuZXcgc3VibW9kdWxlKQorRU9GCisiCisKK2Z1bGxoZWFkNz0kKGNkIHNtMjsgZ2l0IHJldi1saXN0IC0tbWF4LWNvdW50PTEgJGhlYWQ3KQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXZlbiBjb21taXQgLS1zdWJtb2R1bGU9c2hvcnQnICIKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1zaG9ydCBIRUFEXiA+YWN0dWFsICYmCisJZGlmZiBhY3R1YWwgLSA8PC1FT0YKK2RpZmYgLS1naXQgYS9zbTEgYi9zbTEKK2RlbGV0ZWQgZmlsZSBtb2RlIDE2MDAwMAoraW5kZXggJGhlYWQ2Li4wMDAwMDAwCistLS0gYS9zbTEKKysrKyAvZGV2L251bGwKK0BAIC0xICswLDAgQEAKKy1TdWJwcm9qZWN0IGNvbW1pdCAkZnVsbGhlYWQ2CitkaWZmIC0tZ2l0IGEvc20yIGIvc20yCituZXcgZmlsZSBtb2RlIDE2MDAwMAoraW5kZXggMDAwMDAwMC4uJGhlYWQ3CistLS0gL2Rldi9udWxsCisrKysgYi9zbTIKK0BAIC0wLDAgKzEgQEAKKytTdWJwcm9qZWN0IGNvbW1pdCAkZnVsbGhlYWQ3CitFT0YKKyIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTA0LWFwcGx5LWJvdW5kYXJ5LnNoIGIvdC90NDEwNC1hcHBseS1ib3VuZGFyeS5zaAppbmRleCAwZTNjZTM2Li5jNjE3YzJhIDEwMDc1NQotLS0gYS90L3Q0MTA0LWFwcGx5LWJvdW5kYXJ5LnNoCisrKyBiL3QvdDQxMDQtYXBwbHktYm91bmRhcnkuc2gKQEAgLTEzNCw0ICsxMzQsMTMgQEAKIAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBwYXRjaCB3aXRoIDMgY29udGV4dCBsaW5lcyBtYXRjaGluZyBhdCBlbmQnICcKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvIGM7IGVjaG8gZDsgfSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gZSA+PmZpbGUgJiYKKwlnaXQgZGlmZiA+cGF0Y2ggJiYKKwk+ZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBwYXRjaAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMDctYXBwbHktaWdub3JlLXdoaXRlc3BhY2Uuc2ggYi90L3Q0MTA3LWFwcGx5LWlnbm9yZS13aGl0ZXNwYWNlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIwNGZjOGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTA3LWFwcGx5LWlnbm9yZS13aGl0ZXNwYWNlLnNoCkBAIC0wLDAgKzEsMTg1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEdpdXNlcHBlIEJpbG90dGEKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0LWFwcGx5IC0taWdub3JlLXdoaXRlc3BhY2UuCisKKycKKy4gLi90ZXN0LWxpYi5zaAorCisjIFRoaXMgcHJpbWVzIG1haW4uYyBmaWxlIHRoYXQgaW5kZW50cyB3aXRob3V0IHVzaW5nIEhUIGF0IGFsbC4KKyMgVmFyaW91cyBwYXRjaGVzIHdpdGggSFQgYW5kIG90aGVyIHNwYWNlcyBhcmUgYXR0ZW1wdGVkIGluIHRoZSB0ZXN0LgorCitjYXQgPiBwYXRjaDEucGF0Y2ggPDxcRU9GCitkaWZmIC0tZ2l0IGEvbWFpbi5jIGIvbWFpbi5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAorLS0tIC9kZXYvbnVsbAorKysrIGIvbWFpbi5jCitAQCAtMCwwICsxLDIyIEBACisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrCisrdm9pZCBwcmludF9pbnQoaW50IG51bSk7CisraW50IGZ1bmMoaW50IG51bSk7CisrCisraW50IG1haW4oKSB7CisrICAgICAgIGludCBpOworKworKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworKyAgICAgICAgICAgICAgIHByaW50X2ludChmdW5jKGkpKTsgLyogc3R1ZmYgKi8KKysgICAgICAgfQorKworKyAgICAgICByZXR1cm4gMDsKKyt9CisrCisraW50IGZ1bmMoaW50IG51bSkgeworKyAgICAgICByZXR1cm4gbnVtICogbnVtOworK30KKysKKyt2b2lkIHByaW50X2ludChpbnQgbnVtKSB7CisrICAgICAgIHByaW50ZigiJWQiLCBudW0pOworK30KK0VPRgorCisjIFNpbmNlIHdoaXRlc3BhY2UgaXMgdmVyeSBzaWduaWZpY2FudCBhbmQgd2Ugd2FudCB0byBwcmV2ZW50IHdoaXRlc3BhY2UKKyMgbWFuZ2xpbmcgd2hlbiBjcmVhdGluZyB0aGlzIHRlc3QgZnJvbSBhIHBhdGNoLCB3ZSBwcm90ZWN0ICdmaXhhYmxlJworIyB3aGl0ZXNwYWNlIGJ5IHJlcGxhY2luZyBzcGFjZXMgd2l0aCBaIGFuZCByZXBsYWNpbmcgdGhlbSBhdCBwYXRjaAorIyBjcmVhdGlvbiB0aW1lLCBoZW5jZSB0aGUgc2VkIHRyaWNrLgorCisjIFRoaXMgcGF0Y2ggd2lsbCBmYWlsIHVubGVzcyB3aGl0ZXNwYWNlIGRpZmZlcmVuY2VzIGFyZSBiZWluZyBpZ25vcmVkCisKK3NlZCAtZSAncy9aLyAvZycgPiBwYXRjaDIucGF0Y2ggPDxcRU9GCitkaWZmIC0tZ2l0IGEvbWFpbi5jIGIvbWFpbi5jCistLS0gYS9tYWluLmMKKysrKyBiL21haW4uYworQEAgLTEwLDYgKzEwLDggQEAKK1oJCXByaW50X2ludChmdW5jKGkpKTsgLyogc3R1ZmYgKi8KK1oJfQorWgorKwlwcmludGYoIlxuIik7CisrCitaCXJldHVybiAwOworWn0KK1oKK0VPRgorCisjIFRoaXMgcGF0Y2ggd2lsbCBmYWlsIGV2ZW4gaWYgd2hpdGVzcGFjZSBkaWZmZXJlbmNlcyBhcmUgYmVpbmcgaWdub3JlZCwKKyMgYmVjYXVzZSBvZiB0aGUgbWlzc2luZyBzdHJpbmcgYXQgRU9MLiBUT0RPOiB0aGlzIHRlc3RjYXNlIHNob3VsZCBiZQorIyBpbXByb3ZlZCBieSBjcmVhdGluZyBhIGxpbmUgdGhhdCBoYXMgdGhlIHNhbWUgaGFzaCB3aXRoIGFuZCB3aXRob3V0CisjIHRoZSBmaW5hbCBzdHJpbmcuCisKK3NlZCAtZSAncy9aLyAvZycgPiBwYXRjaDMucGF0Y2ggPDxcRU9GCitkaWZmIC0tZ2l0IGEvbWFpbi5jIGIvbWFpbi5jCistLS0gYS9tYWluLmMKKysrKyBiL21haW4uYworQEAgLTEwLDMgKzEwLDQgQEAKK1oJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKK1oJCXByaW50X2ludChmdW5jKGkpKTtaCisrCQkvKiBzdHVmZiAqLworWgl9CitFT0YKKworIyBUaGlzIHBhdGNoIHdpbGwgZmFpbCBldmVuIGlmIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMgYXJlIGJlaW5nIGlnbm9yZWQsCisjIGJlY2F1c2Ugb2YgdGhlIG1pc3NpbmcgRU9MIGF0IEVPRi4KKworc2VkIC1lICdzL1ovIC9nJyA+IHBhdGNoNC5wYXRjaCA8PFxFT0YKK2RpZmYgLS1naXQgYS9tYWluLmMgYi9tYWluLmMKKy0tLSBhL21haW4uYworKysrIGIvbWFpbi5jCitAQCAtMjEsMSArMjEsMSBAQAorLQl9O1oKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorKwl9OworRU9GCisKKyMgVGhpcyBwYXRjaCB3aWxsIGZhaWwgdW5sZXNzIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMgYXJlIGJlaW5nIGlnbm9yZWQuCisKK3NlZCAtZSAncy9aLyAvZycgPiBwYXRjaDUucGF0Y2ggPDxcRU9GCitkaWZmIC0tZ2l0IGEvbWFpbi5jIGIvbWFpbi5jCistLS0gYS9tYWluLmMKKysrKyBiL21haW4uYworQEAgLTIsMiArMiwzIEBACitaCXZvaWQgcHJpbnRfaW50KGludCBudW0pOworKwkvKiBhIGNvbW1lbnQgKi8KK1oJaW50IGZ1bmMoaW50IG51bSk7CitFT0YKKworIyBBbmQgdGhpcyBpcyBob3cgdGhlIGZpbmFsIG91dHB1dCBzaG91bGQgYmUuICBQYXRjaGVzIGludHJvZHVjZQorIyBIVHMgYnV0IHRoZSBvcmlnaW5hbCBTUCBpbmRlbnRzIGFyZSBtb3N0bHkga2VwdC4KKworc2VkIC1lICdzL1QvCS9nJyA+IG1haW4uYy5maW5hbCA8PFxFT0YKKyNpbmNsdWRlIDxzdGRpby5oPgorCit2b2lkIHByaW50X2ludChpbnQgbnVtKTsKK1QvKiBhIGNvbW1lbnQgKi8KK2ludCBmdW5jKGludCBudW0pOworCitpbnQgbWFpbigpIHsKKyAgICAgICBpbnQgaTsKKworICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisgICAgICAgICAgICAgICBwcmludF9pbnQoZnVuYyhpKSk7IC8qIHN0dWZmICovCisgICAgICAgfQorCitUcHJpbnRmKCJcbiIpOworCisgICAgICAgcmV0dXJuIDA7Cit9CisKK2ludCBmdW5jKGludCBudW0pIHsKKyAgICAgICByZXR1cm4gbnVtICogbnVtOworfQorCit2b2lkIHByaW50X2ludChpbnQgbnVtKSB7CisgICAgICAgcHJpbnRmKCIlZCIsIG51bSk7Cit9CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSBjcmVhdGlvbicgJworCWdpdCBhcHBseSBwYXRjaDEucGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2gyIGZhaWxzIChyZXRhYiknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2gyLnBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoMiBhcHBsaWVzIHdpdGggLS1pZ25vcmUtd2hpdGVzcGFjZScgJworCWdpdCBhcHBseSAtLWlnbm9yZS13aGl0ZXNwYWNlIHBhdGNoMi5wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaDIgcmV2ZXJzZSBhcHBsaWVzIHdpdGggLS1pZ25vcmUtc3BhY2UtY2hhbmdlJyAnCisJZ2l0IGFwcGx5IC1SIC0taWdub3JlLXNwYWNlLWNoYW5nZSBwYXRjaDIucGF0Y2gKKycKKworZ2l0IGNvbmZpZyBhcHBseS5pZ25vcmV3aGl0ZXNwYWNlIGNoYW5nZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaDIgYXBwbGllcyAoYXBwbHkuaWdub3Jld2hpdGVzcGFjZSA9IGNoYW5nZSknICcKKwlnaXQgYXBwbHkgcGF0Y2gyLnBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoMyBmYWlscyAobWlzc2luZyBzdHJpbmcgYXQgRU9MKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBwYXRjaDMucGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2g0IGZhaWxzIChtaXNzaW5nIEVPTCBhdCBFT0YpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IHBhdGNoNC5wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaDUgYXBwbGllcyAobGVhZGluZyB3aGl0ZXNwYWNlKScgJworCWdpdCBhcHBseSBwYXRjaDUucGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2hlcyBkbyBub3QgbWFuZ2xlIHdoaXRlc3BhY2UnICcKKwl0ZXN0X2NtcCBtYWluLmMgbWFpbi5jLmZpbmFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlLWNyZWF0ZSBmaWxlICh3aXRoIC0taWdub3JlLXdoaXRlc3BhY2UpJyAnCisJcm0gLWYgbWFpbi5jICYmCisJZ2l0IGFwcGx5IHBhdGNoMS5wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaDUgZmFpbHMgKC0tbm8taWdub3JlLXdoaXRlc3BhY2UpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0tbm8taWdub3JlLXdoaXRlc3BhY2UgcGF0Y2g1LnBhdGNoCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEyMC1hcHBseS1wb3B0LnNoIGIvdC90NDEyMC1hcHBseS1wb3B0LnNoCmluZGV4IDgzZDRiYTYuLmI0NjNiNGYgMTAwNzU1Ci0tLSBhL3QvdDQxMjAtYXBwbHktcG9wdC5zaAorKysgYi90L3Q0MTIwLWFwcGx5LXBvcHQuc2gKQEAgLTIyLDQgKzIyLDkgQEAKIAlnaXQgYXBwbHkgLXAyIHBhdGNoLmZpbGUKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgd2l0aCB0b28gbGFyZ2UgLXAnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1zdGF0IC1wMyBwYXRjaC5maWxlIDI+ZXJyICYmCisJZ3JlcCAicmVtb3ZpbmcgMyBsZWFkaW5nIiBlcnIKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTI0LWFwcGx5LXdzLXJ1bGUuc2ggYi90L3Q0MTI0LWFwcGx5LXdzLXJ1bGUuc2gKaW5kZXggZmFjMjA5My4uZmI5YWQyNCAxMDA3NTUKLS0tIGEvdC90NDEyNC1hcHBseS13cy1ydWxlLnNoCisrKyBiL3QvdDQxMjQtYXBwbHktd3MtcnVsZS5zaApAQCAtMTcwLDQgKzE3MCwyNjUgQEAKIAlncmVwICJeJCIgdGFyZ2V0CiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW5rIGF0IEVPRiB3aXRoIC0td2hpdGVzcGFjZT1maXggKDEpJyAnCisJOiB0aGVzZSBjYW4gZmFpbCBkZXBlbmRpbmcgb24gd2hhdCB3ZSBkaWQgYmVmb3JlCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUud2hpdGVzcGFjZQorCXJtIC1mIC5naXRhdHRyaWJ1dGVzCisKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvIGM7IH0gPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJeyBlY2hvIGE7IGVjaG8gYjsgZWNobyBjOyB9ID5leHBlY3QgJiYKKwl7IGNhdCBleHBlY3Q7IGVjaG87IH0gPm9uZSAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKworCWdpdCBjaGVja291dCBvbmUgJiYKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIGV4cGVjdCBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbmsgYXQgRU9GIHdpdGggLS13aGl0ZXNwYWNlPWZpeCAoMiknICcKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvIGM7IH0gPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJeyBlY2hvIGE7IGVjaG8gYzsgfSA+ZXhwZWN0ICYmCisJeyBjYXQgZXhwZWN0OyBlY2hvOyBlY2hvOyB9ID5vbmUgJiYKKwlnaXQgZGlmZiAtLSBvbmUgPnBhdGNoICYmCisKKwlnaXQgY2hlY2tvdXQgb25lICYmCisJZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW5rIGF0IEVPRiB3aXRoIC0td2hpdGVzcGFjZT1maXggKDMpJyAnCisJeyBlY2hvIGE7IGVjaG8gYjsgZWNobzsgfSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwl7IGVjaG8gYTsgZWNobyBjOyBlY2hvOyB9ID5leHBlY3QgJiYKKwl7IGNhdCBleHBlY3Q7IGVjaG87IGVjaG87IH0gPm9uZSAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKworCWdpdCBjaGVja291dCBvbmUgJiYKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIGV4cGVjdCBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbmsgYXQgZW5kIG9mIGh1bmssIG5vdCBhdCBFT0Ygd2l0aCAtLXdoaXRlc3BhY2U9Zml4JyAnCisJeyBlY2hvIGE7IGVjaG8gYjsgZWNobzsgZWNobzsgZWNobzsgZWNobzsgZWNobzsgZWNobyBkOyB9ID5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXsgZWNobyBhOyBlY2hvIGM7IGVjaG87IGVjaG87IGVjaG87IGVjaG87IGVjaG87IGVjaG87IGVjaG8gZDsgfSA+ZXhwZWN0ICYmCisJY3AgZXhwZWN0IG9uZSAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKworCWdpdCBjaGVja291dCBvbmUgJiYKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIGV4cGVjdCBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbmsgYXQgRU9GIHdpdGggLS13aGl0ZXNwYWNlPXdhcm4nICcKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvIGM7IH0gPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJZWNobyA+Pm9uZSAmJgorCWNhdCBvbmUgPmV4cGVjdCAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKworCWdpdCBjaGVja291dCBvbmUgJiYKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPXdhcm4gcGF0Y2ggMj5lcnJvciAmJgorCXRlc3RfY21wIGV4cGVjdCBvbmUgJiYKKwlncmVwICJuZXcgYmxhbmsgbGluZSBhdCBFT0YiIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW5rIGF0IEVPRiB3aXRoIC0td2hpdGVzcGFjZT1lcnJvcicgJworCXsgZWNobyBhOyBlY2hvIGI7IGVjaG8gYzsgfSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwljYXQgb25lID5leHBlY3QgJiYKKwllY2hvID4+b25lICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCisJZ2l0IGNoZWNrb3V0IG9uZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLXdoaXRlc3BhY2U9ZXJyb3IgcGF0Y2ggMj5lcnJvciAmJgorCXRlc3RfY21wIGV4cGVjdCBvbmUgJiYKKwlncmVwICJuZXcgYmxhbmsgbGluZSBhdCBFT0YiIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW5rIGJ1dCBub3QgZW1wdHkgYXQgRU9GJyAnCisJeyBlY2hvIGE7IGVjaG8gYjsgZWNobyBjOyB9ID5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCWVjaG8gIiAgICIgPj5vbmUgJiYKKwljYXQgb25lID5leHBlY3QgJiYKKwlnaXQgZGlmZiAtLSBvbmUgPnBhdGNoICYmCisKKwlnaXQgY2hlY2tvdXQgb25lICYmCisJZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT13YXJuIHBhdGNoIDI+ZXJyb3IgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb25lICYmCisJZ3JlcCAibmV3IGJsYW5rIGxpbmUgYXQgRU9GIiBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseWluZyBiZXlvbmQgRU9GIHJlcXVpcmVzIG9uZSBub24tYmxhbmsgY29udGV4dCBsaW5lJyAnCisJeyBlY2hvOyBlY2hvOyBlY2hvOyBlY2hvOyB9ID5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXsgZWNobyBiOyB9ID4+b25lICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCisJZ2l0IGNoZWNrb3V0IG9uZSAmJgorCXsgZWNobyBhOyBlY2hvOyB9ID5vbmUgJiYKKwljcCBvbmUgZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X2NtcCBvbmUgZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taWdub3JlLXNwYWNlLWNoYW5nZSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoICYmCisJdGVzdF9jbXAgb25lIGV4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0b25zIG9mIGJsYW5rcyBhdCBFT0Ygc2hvdWxkIG5vdCBhcHBseScgJworCWZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2OyBkbworCQllY2hvOyBlY2hvOyBlY2hvOyBlY2hvOworCWRvbmUgPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJZWNobyBhID4+b25lICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCisJPm9uZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taWdub3JlLXNwYWNlLWNoYW5nZSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3NpbmcgYmxhbmsgbGluZSBhdCBlbmQgd2l0aCAtLXdoaXRlc3BhY2U9Zml4JyAnCisJZWNobyBhID5vbmUgJiYKKwllY2hvID4+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwllY2hvIGIgPj5vbmUgJiYKKwljcCBvbmUgZXhwZWN0ICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCWVjaG8gYSA+b25lICYmCisJY3Agb25lIHNhdmVkLW9uZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBwYXRjaCAmJgorCWdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoICYmCisJdGVzdF9jbXAgb25lIGV4cGVjdCAmJgorCW12IHNhdmVkLW9uZSBvbmUgJiYKKwlnaXQgYXBwbHkgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X2NtcCBvbmUgZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R3byBtaXNzaW5nIGJsYW5rIGxpbmVzIGF0IGVuZCB3aXRoIC0td2hpdGVzcGFjZT1maXgnICcKKwl7IGVjaG8gYTsgZWNobzsgZWNobyBiOyBlY2hvIGM7IH0gPm9uZSAmJgorCWNwIG9uZSBuby1ibGFuay1saW5lcyAmJgorCXsgZWNobzsgZWNobzsgfSA+Pm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJZWNobyBkID4+b25lICYmCisJY3Agb25lIGV4cGVjdCAmJgorCWVjaG8gPj5vbmUgJiYKKwlnaXQgZGlmZiAtLSBvbmUgPnBhdGNoICYmCisJY3Agbm8tYmxhbmstbGluZXMgb25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IHBhdGNoICYmCisJZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X2NtcCBvbmUgZXhwZWN0ICYmCisJbXYgbm8tYmxhbmstbGluZXMgb25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IHBhdGNoICYmCisJZ2l0IGFwcGx5IC0taWdub3JlLXNwYWNlLWNoYW5nZSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoICYmCisJdGVzdF9jbXAgb25lIGV4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaHJpbmsgZmlsZSB3aXRoIHRvbnMgb2YgbWlzc2luZyBibGFua3MgYXQgZW5kIG9mIGZpbGUnICcKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvIGM7IH0gPm9uZSAmJgorCWNwIG9uZSBuby1ibGFuay1saW5lcyAmJgorCWZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2OyBkbworCQllY2hvOyBlY2hvOyBlY2hvOyBlY2hvOworCWRvbmUgPj5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCWVjaG8gYSA+b25lICYmCisJY3Agb25lIGV4cGVjdCAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKwljcCBuby1ibGFuay1saW5lcyBvbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIG9uZSBleHBlY3QgJiYKKwltdiBuby1ibGFuay1saW5lcyBvbmUgJiYKKwlnaXQgYXBwbHkgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X2NtcCBvbmUgZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3NpbmcgYmxhbmtzIGF0IEVPRiBtdXN0IG9ubHkgbWF0Y2ggYmxhbmsgbGluZXMnICcKKwl7IGVjaG8gYTsgZWNobyBiOyB9ID5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXsgZWNobyBjOyBlY2hvIGQ7IH0gPj5vbmUgJiYKKwlnaXQgZGlmZiAtLSBvbmUgPnBhdGNoICYmCisKKwllY2hvIGEgPm9uZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBwYXRjaAorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taWdub3JlLXNwYWNlLWNoYW5nZSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoCisnCisKK3NlZCAtZSdzL1ovLycgPm9uZSA8PEVPRgorYQorYgorYworCQkgICAgICBaCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWlzc2luZyBibGFuayBsaW5lIHNob3VsZCBtYXRjaCBjb250ZXh0IGxpbmUgd2l0aCBzcGFjZXMnICcKKwlnaXQgYWRkIG9uZSAmJgorCWVjaG8gZCA+Pm9uZSAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvIGM7IH0gPm9uZSAmJgorCWNwIG9uZSBleHBlY3QgJiYKKwl7IGVjaG87IGVjaG8gZDsgfSA+PmV4cGVjdCAmJgorCWdpdCBhZGQgb25lICYmCisKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIG9uZSBleHBlY3QKKycKKworc2VkIC1lJ3MvWi8vJyA+b25lIDw8RU9GCithCitiCitjCisJCSAgICAgIFoKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1lLCBidXQgd2l0aCB0aGUgLS1pZ25vcmUtc3BhY2Utb3B0aW9uJyAnCisJZ2l0IGFkZCBvbmUgJiYKKwllY2hvIGQgPj5vbmUgJiYKKwljcCBvbmUgZXhwZWN0ICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCXsgZWNobyBhOyBlY2hvIGI7IGVjaG8gYzsgfSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKworCWdpdCBjaGVja291dC1pbmRleCAtZiBvbmUgJiYKKwlnaXQgYXBwbHkgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X2NtcCBvbmUgZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhbWUsIGJ1dCB3aXRoIENSLUxGIGxpbmUgZW5kaW5ncyAmJiBjci1hdC1lb2wgc2V0JyAnCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgY3ItYXQtZW9sICYmCisJcHJpbnRmICJhXHJcbiIgPm9uZSAmJgorCXByaW50ZiAiYlxyXG4iID4+b25lICYmCisJcHJpbnRmICJjXHJcbiIgPj5vbmUgJiYKKwljcCBvbmUgc2F2ZS1vbmUgJiYKKwlwcmludGYgIiAgICAgICAgICAgICAgICAgXHJcbiIgPj5vbmUKKwlnaXQgYWRkIG9uZSAmJgorCXByaW50ZiAiZFxyXG4iID4+b25lICYmCisJY3Agb25lIGV4cGVjdCAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKwltdiBzYXZlLW9uZSBvbmUgJiYKKworCWdpdCBhcHBseSAtLWlnbm9yZS1zcGFjZS1jaGFuZ2UgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIG9uZSBleHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2FtZSwgYnV0IHdpdGggQ1ItTEYgbGluZSBlbmRpbmdzICYmIGNyLWF0LWVvbCB1bnNldCcgJworCWdpdCBjb25maWcgLS11bnNldCBjb3JlLndoaXRlc3BhY2UgJiYKKwlwcmludGYgImFcclxuIiA+b25lICYmCisJcHJpbnRmICJiXHJcbiIgPj5vbmUgJiYKKwlwcmludGYgImNcclxuIiA+Pm9uZSAmJgorCWNwIG9uZSBzYXZlLW9uZSAmJgorCXByaW50ZiAiICAgICAgICAgICAgICAgICBcclxuIiA+Pm9uZQorCWdpdCBhZGQgb25lICYmCisJY3Agb25lIGV4cGVjdCAmJgorCXByaW50ZiAiZFxyXG4iID4+b25lICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCW12IHNhdmUtb25lIG9uZSAmJgorCWVjaG8gZCA+PmV4cGVjdCAmJgorCisJZ2l0IGFwcGx5IC0taWdub3JlLXNwYWNlLWNoYW5nZSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoICYmCisJdGVzdF9jbXAgb25lIGV4cGVjdAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMjUtYXBwbHktd3MtZnV6ei5zaCBiL3QvdDQxMjUtYXBwbHktd3MtZnV6ei5zaAppbmRleCAzYjQ3MWI2Li45NjcxZGU3IDEwMDc1NQotLS0gYS90L3Q0MTI1LWFwcGx5LXdzLWZ1enouc2gKKysrIGIvdC90NDEyNS1hcHBseS13cy1mdXp6LnNoCkBAIC0zNywxMSArMzcsMTEgQEAKIAkjIHBhdGNoLTIgaXMgdGhlIHNhbWUgYXMgcGF0Y2gtMSBidXQgaXMgYmFzZWQKIAkjIG9uIGEgdmVyc2lvbiB0aGF0IGFscmVhZHkgaGFzIHdoaXRlc3BhY2UgZml4ZWQsCiAJIyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIHdoaXRlc3BhY2UgYnJlYWthZ2VzLgotCXNlZCAtZSAicy8gJC8vIiBwYXRjaC0xID5wYXRjaC0yICYmCisJc2VkIC1lICJzLyBcJC8vIiBwYXRjaC0xID5wYXRjaC0yICYmCiAKIAkjIElmIGFsbCB3aGl0ZXNwYWNlIGJyZWFrYWdlcyBhcmUgZml4ZWQgdGhlIGNvbnRlbnRzCiAJIyBzaG91bGQgbG9vayBsaWtlIGZpbGUtZml4ZWQKLQlzZWQgLWUgInMvICQvLyIgZmlsZS0xID5maWxlLWZpeGVkCisJc2VkIC1lICJzLyBcJC8vIiBmaWxlLTEgPmZpbGUtZml4ZWQKIAogJwogCmRpZmYgLS1naXQgYS90L3Q0MTI4LWFwcGx5LXJvb3Quc2ggYi90L3Q0MTI4LWFwcGx5LXJvb3Quc2gKaW5kZXggOGY2YWVhNC4uNmNjNzQxYSAxMDA3NTUKLS0tIGEvdC90NDEyOC1hcHBseS1yb290LnNoCisrKyBiL3QvdDQxMjgtYXBwbHktcm9vdC5zaApAQCAtNTgsNiArNTgsMjMgQEAKICcKIAogY2F0ID4gcGF0Y2ggPDwgRU9GCitkaWZmIC0tZ2l0IGEvYy9uZXdmaWxlMiBiL2MvbmV3ZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kOTVmM2FkCistLS0gL2Rldi9udWxsCisrKysgYi9jL25ld2ZpbGUyCitAQCAtMCwwICsxIEBACisrY29udGVudAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0tZGlyZWN0b3J5IC1wIChuZXcgZmlsZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwlnaXQgYXBwbHkgLXAyIC0tZGlyZWN0b3J5PXNvbWUvc3ViL2Rpci8gLS1pbmRleCBwYXRjaCAmJgorCXRlc3QgY29udGVudCA9ICQoZ2l0IHNob3cgOnNvbWUvc3ViL2Rpci9uZXdmaWxlMikgJiYKKwl0ZXN0IGNvbnRlbnQgPSAkKGNhdCBzb21lL3N1Yi9kaXIvbmV3ZmlsZTIpCisnCisKK2NhdCA+IHBhdGNoIDw8IEVPRgogZGlmZiAtLWdpdCBhL2RlbGZpbGUgYi9kZWxmaWxlCiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKIGluZGV4IGQ5NWYzYWQuLjAwMDAwMDAKZGlmZiAtLWdpdCBhL3QvdDQxMzItYXBwbHktcmVtb3ZhbC5zaCBiL3QvdDQxMzItYXBwbHktcmVtb3ZhbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYjFmZmUzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzMi1hcHBseS1yZW1vdmFsLnNoCkBAIC0wLDAgKzEsOTUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgSnVuaW8gQyBIYW1hbm8KKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0LWFwcGx5IG5vdGljZXMgcmVtb3ZhbCBwYXRjaGVzIGdlbmVyYXRlZCBieSBHTlUgZGlmZicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWNhdCA8PC1FT0YgPmMgJiYKKwlkaWZmIC1ydU4gYS9maWxlIGIvZmlsZQorCS0tLSBhL2ZpbGUJVFMwCisJKysrIGIvZmlsZQlUUzEKKwlAQCAtMCwwICsxIEBACisJK3NvbWV0aGluZworCUVPRgorCisJY2F0IDw8LUVPRiA+ZCAmJgorCWRpZmYgLXJ1TiBhL2ZpbGUgYi9maWxlCisJLS0tIGEvZmlsZQlUUzAKKwkrKysgYi9maWxlCVRTMQorCUBAIC0xICswLDAgQEAKKwktc29tZXRoaW5nCisJRU9GCisKKwl0aW1lV2VzdD0iMTk4Mi0wOS0xNiAwNzowMDowMC4wMDAwMDAwMDAgLTA4MDAiICYmCisJIHRpbWVHTVQ9IjE5ODItMDktMTYgMTU6MDA6MDAuMDAwMDAwMDAwICswMDAwIiAmJgorCXRpbWVFYXN0PSIxOTgyLTA5LTE3IDAwOjAwOjAwLjAwMDAwMDAwMCArMDkwMCIgJiYKKworCWVwb2NXZXN0PSIxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMCIgJiYKKwkgZXBvY0dNVD0iMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAiICYmCisJZXBvY0Vhc3Q9IjE5NzAtMDEtMDEgMDk6MDA6MDAuMDAwMDAwMDAwICswOTAwIiAmJgorCisJc2VkIC1lICJzL1RTMC8kZXBvY1dlc3QvIiAtZSAicy9UUzEvJHRpbWVXZXN0LyIgPGMgPmNyZWF0ZVdlc3QucGF0Y2ggJiYKKwlzZWQgLWUgInMvVFMwLyRlcG9jRWFzdC8iIC1lICJzL1RTMS8kdGltZUVhc3QvIiA8YyA+Y3JlYXRlRWFzdC5wYXRjaCAmJgorCXNlZCAtZSAicy9UUzAvJGVwb2NHTVQvIiAtZSAicy9UUzEvJHRpbWVHTVQvIiA8YyA+Y3JlYXRlR01ULnBhdGNoICYmCisKKwlzZWQgLWUgInMvVFMwLyR0aW1lV2VzdC8iIC1lICJzL1RTMS8kdGltZVdlc3QvIiA8YyA+YWRkV2VzdC5wYXRjaCAmJgorCXNlZCAtZSAicy9UUzAvJHRpbWVFYXN0LyIgLWUgInMvVFMxLyR0aW1lRWFzdC8iIDxjID5hZGRFYXN0LnBhdGNoICYmCisJc2VkIC1lICJzL1RTMC8kdGltZUdNVC8iIC1lICJzL1RTMS8kdGltZUdNVC8iIDxjID5hZGRHTVQucGF0Y2ggJiYKKworCXNlZCAtZSAicy9UUzAvJHRpbWVXZXN0LyIgLWUgInMvVFMxLyR0aW1lV2VzdC8iIDxkID5lbXB0eVdlc3QucGF0Y2ggJiYKKwlzZWQgLWUgInMvVFMwLyR0aW1lRWFzdC8iIC1lICJzL1RTMS8kdGltZUVhc3QvIiA8ZCA+ZW1wdHlFYXN0LnBhdGNoICYmCisJc2VkIC1lICJzL1RTMC8kdGltZUdNVC8iIC1lICJzL1RTMS8kdGltZUdNVC8iIDxkID5lbXB0eUdNVC5wYXRjaCAmJgorCisJc2VkIC1lICJzL1RTMC8kdGltZVdlc3QvIiAtZSAicy9UUzEvJGVwb2NXZXN0LyIgPGQgPnJlbW92ZVdlc3QucGF0Y2ggJiYKKwlzZWQgLWUgInMvVFMwLyR0aW1lRWFzdC8iIC1lICJzL1RTMS8kZXBvY0Vhc3QvIiA8ZCA+cmVtb3ZlRWFzdC5wYXRjaCAmJgorCXNlZCAtZSAicy9UUzAvJHRpbWVHTVQvIiAtZSAicy9UUzEvJGVwb2NHTVQvIiA8ZCA+cmVtb3ZlR01ULnBhdGNoICYmCisKKwllY2hvIHNvbWV0aGluZyA+c29tZXRoaW5nICYmCisJPmVtcHR5CisnCisKK2ZvciBwYXRjaCBpbiAqLnBhdGNoCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInRlc3QgJHBhdGNoIiAnCisJCXJtIC1mIGZpbGUgLmdpdC9pbmRleCAmJgorCQljYXNlICIkcGF0Y2giIGluCisJCWNyZWF0ZSopCisJCQkjIG11c3QgYmUgYWJsZSB0byBjcmVhdGUKKwkJCWdpdCBhcHBseSAtLWluZGV4ICRwYXRjaCAmJgorCQkJdGVzdF9jbXAgZmlsZSBzb21ldGhpbmcgJiYKKwkJCSMgbXVzdCBub3RpY2UgdGhlIGZpbGUgaXMgYWxyZWFkeSB0aGVyZQorCQkJPmZpbGUgJiYKKwkJCWdpdCBhZGQgZmlsZSAmJgorCQkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5ICRwYXRjaAorCQkJOzsKKwkJYWRkKikKKwkJCSMgbXVzdCBiZSBhYmxlIHRvIGNyZWF0ZSBvciBwYXRjaAorCQkJZ2l0IGFwcGx5ICRwYXRjaCAmJgorCQkJdGVzdF9jbXAgZmlsZSBzb21ldGhpbmcgJiYKKwkJCT5maWxlICYmCisJCQlnaXQgYXBwbHkgJHBhdGNoICYmCisJCQl0ZXN0X2NtcCBmaWxlIHNvbWV0aGluZworCQkJOzsKKwkJZW1wdHkqKQorCQkJIyBtdXN0IGxlYXZlIGFuIGVtcHR5IGZpbGUKKwkJCWNhdCBzb21ldGhpbmcgPmZpbGUgJiYKKwkJCWdpdCBhZGQgZmlsZSAmJgorCQkJZ2l0IGFwcGx5IC0taW5kZXggJHBhdGNoICYmCisJCQl0ZXN0IC1mIGZpbGUgJiYKKwkJCXRlc3RfY21wIGVtcHR5IGZpbGUKKwkJCTs7CisJCXJlbW92ZSopCisJCQkjIG11c3QgcmVtb3ZlIHRoZSBmaWxlCisJCQljYXQgc29tZXRoaW5nID5maWxlICYmCisJCQlnaXQgYWRkIGZpbGUgJiYKKwkJCWdpdCBhcHBseSAtLWluZGV4ICRwYXRjaCAmJgorCQkJISB0ZXN0IC1mIGZpbGUKKwkJCTs7CisJCWVzYWMKKwknCitkb25lCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEzMy1hcHBseS1maWxlbmFtZXMuc2ggYi90L3Q0MTMzLWFwcGx5LWZpbGVuYW1lcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNDIxODA3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzMy1hcHBseS1maWxlbmFtZXMuc2gKQEAgLTAsMCArMSwzOCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBBbmRyZWFzIEdydWVuYmFjaGVyCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSBmaWxlbmFtZSBjb25zaXN0ZW5jeSBjaGVjaycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWNhdCA+IGJhZDEucGF0Y2ggPDxFT0YKK2RpZmYgLS1naXQgYS9mIGIvZgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmQwMDQ5MWYKKy0tLSAvZGV2L251bGwKKysrKyBiL2YtYmxhaAorQEAgLTAsMCArMSBAQAorKzEKK0VPRgorCWNhdCA+IGJhZDIucGF0Y2ggPDxFT0YKK2RpZmYgLS1naXQgYS9mIGIvZgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCBkMDA0OTFmLi4wMDAwMDAwCistLS0gYi9mLWJsYWgKKysrKyAvZGV2L251bGwKK0BAIC0xICswLDAgQEAKKy0xCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgZGlmZiB3aXRoIGluY29uc2lzdGVudCBmaWxlbmFtZXMgaW4gaGVhZGVycycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBiYWQxLnBhdGNoIDI+ZXJyCisJZ3JlcCAiaW5jb25zaXN0ZW50IG5ldyBmaWxlbmFtZSIgZXJyCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IGJhZDIucGF0Y2ggMj5lcnIKKwlncmVwICJpbmNvbnNpc3RlbnQgb2xkIGZpbGVuYW1lIiBlcnIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTUwLWFtLnNoIGIvdC90NDE1MC1hbS5zaAppbmRleCBkNmViYmFlLi44MTBiMDRiIDEwMDc1NQotLS0gYS90L3Q0MTUwLWFtLnNoCisrKyBiL3QvdDQxNTAtYW0uc2gKQEAgLTc3LDYgKzc3LDE4IEBACiAJZ2l0IGNvbW1pdCAtcyAtRiBtc2cgJiYKIAlnaXQgdGFnIHNlY29uZCAmJgogCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgZmlyc3QgPnBhdGNoMSAmJgorCXsKKwkJZWNobyAiWC1GYWtlLUZpZWxkOiBMaW5lIE9uZSIgJiYKKwkJZWNobyAiWC1GYWtlLUZpZWxkOiBMaW5lIFR3byIgJiYKKwkJZWNobyAiWC1GYWtlLUZpZWxkOiBMaW5lIFRocmVlIiAmJgorCQlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IGZpcnN0IHwgc2VkIC1lICIxZCIKKwl9ID4gcGF0Y2gxLmVtbCAmJgorCXsKKwkJZWNobyAiWC1GYWtlLUZpZWxkOiBMaW5lIE9uZSIgJiYKKwkJZWNobyAiWC1GYWtlLUZpZWxkOiBMaW5lIFR3byIgJiYKKwkJZWNobyAiWC1GYWtlLUZpZWxkOiBMaW5lIFRocmVlIiAmJgorCQlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IGZpcnN0IHwgc2VkIC1lICIxZCIKKwl9IHwgYXBwZW5kX2NyID5wYXRjaDEtY3JsZi5lbWwgJiYKIAlzZWQgLW4gLWUgIjMsXCRwIiBtc2cgPmZpbGUgJiYKIAlnaXQgYWRkIGZpbGUgJiYKIAl0ZXN0X3RpY2sgJiYKQEAgLTEwOCw2ICsxMjAsMjQgQEAKIAl0ZXN0ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kXikiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEXikiCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIGFwcGxpZXMgcGF0Y2ggZS1tYWlsIG5vdCBpbiBhIG1ib3gnICcKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwlnaXQgYW0gcGF0Y2gxLmVtbCAmJgorCSEgdGVzdCAtZCAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgc2Vjb25kKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBzZWNvbmReKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gYXBwbGllcyBwYXRjaCBlLW1haWwgbm90IGluIGEgbWJveCB3aXRoIENSTEYnICcKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwlnaXQgYW0gcGF0Y2gxLWNybGYuZW1sICYmCisJISB0ZXN0IC1kIC5naXQvcmViYXNlLWFwcGx5ICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiBzZWNvbmQpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBzZWNvbmQpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHNlY29uZF4pIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4pIgorJworCiBHSVRfQVVUSE9SX05BTUU9IkFub3RoZXIgVGhvciIKIEdJVF9BVVRIT1JfRU1BSUw9ImEudGhvckBleGFtcGxlLmNvbSIKIEdJVF9DT01NSVRURVJfTkFNRT0iQ28gTSBNaXRlciIKQEAgLTE4MCw2ICsyMTAsMTcgQEAKIAl0ZXN0IC16ICIkKGdpdCBkaWZmIGxvcmVtKSIKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLTMgLXEgaXMgcXVpZXQnICcKKwlnaXQgcmVzZXQgbWFzdGVyMiAtLWhhcmQgJiYKKwlzZWQgLW4gLWUgIjMsXCRwIiBtc2cgPmZpbGUgJiYKKwloZWFkIC1uIDkgbXNnID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImNvcGllZCBzdHVmZiIgJiYKKwlnaXQgYW0gLTMgLXEgbG9yZW0tbW92ZS5wYXRjaCA+IG91dHB1dC5vdXQgMj4mMSAmJgorCSEgdGVzdCAtcyBvdXRwdXQub3V0CisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHBhdXNlcyBvbiBjb25mbGljdCcgJwogCWdpdCBjaGVja291dCBsb3JlbTJeXiAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSBsb3JlbS1tb3ZlLnBhdGNoICYmCkBAIC0yNjEsNyArMzAyLDcgQEAKIAlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKIAl0ZXN0X3RpY2sgJiYKIAlnaXQgYW0gLS1jb21taXR0ZXItZGF0ZS1pcy1hdXRob3ItZGF0ZSBwYXRjaDEgJiYKLQlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIi9eJC9xIiA+aGVhZDEgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIi9eXCQvcSIgPmhlYWQxICYmCiAJYXQ9JChzZWQgLW5lICIvXmF1dGhvciAvcy8uKj4gLy9wIiBoZWFkMSkgJiYKIAljdD0kKHNlZCAtbmUgIi9eY29tbWl0dGVyIC9zLy4qPiAvL3AiIGhlYWQxKSAmJgogCXRlc3QgIiRhdCIgPSAiJGN0IgpAQCAtMjcxLDcgKzMxMiw3IEBACiAJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCiAJdGVzdF90aWNrICYmCiAJZ2l0IGFtIHBhdGNoMSAmJgotCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiL14kL3EiID5oZWFkMSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiL15cJC9xIiA+aGVhZDEgJiYKIAlhdD0kKHNlZCAtbmUgIi9eYXV0aG9yIC9zLy4qPiAvL3AiIGhlYWQxKSAmJgogCWN0PSQoc2VkIC1uZSAiL15jb21taXR0ZXIgL3MvLio+IC8vcCIgaGVhZDEpICYmCiAJdGVzdCAiJGF0IiAhPSAiJGN0IgpAQCAtMjg1LDcgKzMyNiw3IEBACiAJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCiAJdGVzdF90aWNrICYmCiAJZ2l0IGFtIC0taWdub3JlLWRhdGUgcGF0Y2gxICYmCi0JZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIvXiQvcSIgPmhlYWQxICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIvXlwkL3EiID5oZWFkMSAmJgogCWF0PSQoc2VkIC1uZSAiL15hdXRob3IgL3MvLio+IC8vcCIgaGVhZDEpICYmCiAJZWNobyAiJGF0IiB8IGdyZXAgIiswMDAwIgogJwpAQCAtMzA1LDQgKzM0NiwxOSBAQAogCXRlc3QgInokcmVzdWx0IiA9ICJ6JChnaXQgcmV2LXBhcnNlIGZpcnN0Xnt0cmVlfSkiCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIG5ld2xpbmUgaW4gc3ViamVjdCcgJworCWdpdCBjaGVja291dCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCXNlZCAtZSAicy9zZWNvbmQvc2Vjb25kIFxcXG4gZm9vLyIgcGF0Y2gxID4gcGF0Y2hubCAmJgorCWdpdCBhbSA8IHBhdGNobmwgPiBvdXRwdXQub3V0IDI+JjEgJiYKKwlncmVwICJeQXBwbHlpbmc6IHNlY29uZCBcXFxuIGZvbyQiIG91dHB1dC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLXEgaXMgcXVpZXQnICcKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgYW0gLXEgPCBwYXRjaDEgPiBvdXRwdXQub3V0IDI+JjEgJiYKKwkhIHRlc3QgLXMgb3V0cHV0Lm91dAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyMDAtcmVyZXJlLnNoIGIvdC90NDIwMC1yZXJlcmUuc2gKaW5kZXggYTZiYzAyOC4uYmI0MDJjMyAxMDA3NTUKLS0tIGEvdC90NDIwMC1yZXJlcmUuc2gKKysrIGIvdC90NDIwMC1yZXJlcmUuc2gKQEAgLTIxNyw3ICsyMTcsMjIgQEAKIAlnaXQgY2hlY2tvdXQgdmVyc2lvbjIgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgZmlmdGggJiYKIAl0ZXN0IDAgPSAkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKQorJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSAtLXJlcmVyZS1hdXRvdXBkYXRlJyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0IHJlcmVyZS5hdXRvdXBkYXRlCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCB2ZXJzaW9uMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLXJlcmVyZS1hdXRvdXBkYXRlIGZpZnRoICYmCisJdGVzdCAwID0gJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgLS1uby1yZXJlcmUtYXV0b3VwZGF0ZScgJworCWdpdCBjb25maWcgcmVyZXJlLmF1dG91cGRhdGUgdHJ1ZQorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgdmVyc2lvbjIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1yZXJlcmUtYXV0b3VwZGF0ZSBmaWZ0aCAmJgorCXRlc3QgMiA9ICQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpCiAnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDIwMS1zaG9ydGxvZy5zaCBiL3QvdDQyMDEtc2hvcnRsb2cuc2gKaW5kZXggNDA1Yjk3MS4uYTAxZTU1YiAxMDA3NTUKLS0tIGEvdC90NDIwMS1zaG9ydGxvZy5zaAorKysgYi90L3Q0MjAxLXNob3J0bG9nLnNoCkBAIC01Miw0ICs1MiwzMiBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG9ydGxvZyBmcm9tIG5vbi1naXQgZGlyZWN0b3J5JyAndGVzdF9jbXAgZXhwZWN0IG91dCcKIAoraWNvbnZmcm9tdXRmOHRvaXNvODg1OTEoKSB7CisJcHJpbnRmICIlcyIgIiQqIiB8IGljb252IC1mIFVURi04IC10IElTTzg4NTktMQorfQorCitEU0NITz0iSsO2aMOkbm7Dq3MgXCJEc2Now7ZcIiBTY2hpbmTDq2xpbiIKK0RTQ0hPRT0iJERTQ0hPIDxKb2hhbm5lcy5TY2hpbmRlbGluQGdteC5kZT4iCitNU0cxPSJzZXQgYTEgdG8gMiBhbmQgc29tZSBub24tQVNDSUkgY2hhcnM6IMOEw5/DuCIKK01TRzI9InNldCBhMSB0byAzIGFuZCBzb21lIG5vbi1BU0NJSSBjaGFyczogw6HDpsOvIgorY2F0ID4gZXhwZWN0IDw8IEVPRgorJERTQ0hPICgyKToKKyAgICAgICRNU0cxCisgICAgICAkTVNHMgorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvcnRsb2cgZW5jb2RpbmcnICcKKwlnaXQgcmVzZXQgLS1oYXJkICIkY29tbWl0IiAmJgorCWdpdCBjb25maWcgLS11bnNldCBpMThuLmNvbW1pdGVuY29kaW5nICYmCisJZWNobyAyID4gYTEgJiYKKwlnaXQgY29tbWl0IC0tcXVpZXQgLW0gIiRNU0cxIiAtLWF1dGhvcj0iJERTQ0hPRSIgYTEgJiYKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgIklTTzg4NTktMSIgJiYKKwllY2hvIDMgPiBhMSAmJgorCWdpdCBjb21taXQgLS1xdWlldCAtbSAiJChpY29udmZyb211dGY4dG9pc284ODU5MSAiJE1TRzIiKSIgXAorCQktLWF1dGhvcj0iJChpY29udmZyb211dGY4dG9pc284ODU5MSAiJERTQ0hPRSIpIiBhMSAmJgorCWdpdCBjb25maWcgLS11bnNldCBpMThuLmNvbW1pdGVuY29kaW5nICYmCisJZ2l0IHNob3J0bG9nIEhFQUR+Mi4uID4gb3V0ICYmCit0ZXN0X2NtcCBleHBlY3Qgb3V0JworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyMDItbG9nLnNoIGIvdC90NDIwMi1sb2cuc2gKaW5kZXggNjQ1MDJlMi4uMWRjMjI0ZiAxMDA3NTUKLS0tIGEvdC90NDIwMi1sb2cuc2gKKysrIGIvdC90NDIwMi1sb2cuc2gKQEAgLTY0LDYgKzY0LDI3IEBACiAnCiAKIGNhdCA+IGV4cGVjdCA8PCBFT0YKKyBUaGlzIGlzCisgIHRoZSBzaXh0aAorICBjb21taXQuCisgVGhpcyBpcworICB0aGUgZmlmdGgKKyAgY29tbWl0LgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdCAldygxMiwxLDIpJyAnCisKKwlnaXQgbG9nIC0yIC0tZm9ybWF0PSIldygxMiwxLDIpVGhpcyBpcyB0aGUgJXMgY29tbWl0LiIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdCAldygsMSwyKScgJworCisJZ2l0IGxvZyAtMiAtLWZvcm1hdD0iJXcoLDEsMilUaGlzIGlzJW50aGUgJXMlbmNvbW1pdC4iID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCiA4MDRhNzg3IHNpeHRoCiAzOTRlZjc4IGZpZnRoCiA1ZDMxMTU5IGZvdXJ0aApAQCAtMTQ5LDYgKzE3MCwyNiBAQAogCiAnCiAKK2NhdCA+IGV4cGVjdCA8PCBFT0YKKzgwNGE3ODcgc2l4dGgKKzM5NGVmNzggZmlmdGgKKzVkMzExNTkgZm91cnRoCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgLS1uby13YWxrIDxjb21taXRzPiBzb3J0cyBieSBjb21taXQgdGltZScgJworCWdpdCBsb2cgLS1uby13YWxrIC0tb25lbGluZSA1ZDMxMTU5IDgwNGE3ODcgMzk0ZWY3OCA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorNWQzMTE1OSBmb3VydGgKKzgwNGE3ODcgc2l4dGgKKzM5NGVmNzggZmlmdGgKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHNob3cgPGNvbW1pdHM+IGxlYXZlcyBsaXN0IG9mIGNvbW1pdHMgYXMgZ2l2ZW4nICcKKwlnaXQgc2hvdyAtLW9uZWxpbmUgLXMgNWQzMTE1OSA4MDRhNzg3IDM5NGVmNzggPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNhc2Ugc2Vuc2l0aXZpdHkgdGVzdHMnICcKIAllY2hvIGNhc2UgPm9uZSAmJgogCXRlc3RfdGljayAmJgpAQCAtMjE0LDcgKzI1NSw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyYXBoIHdpdGggbWVyZ2UnICcKIAlnaXQgbG9nIC0tZ3JhcGggLS1kYXRlLW9yZGVyIC0tcHJldHR5PXRmb3JtYXQ6JXMgfAotCQlzZWQgInMvICokLy8iID5hY3R1YWwgJiYKKwkJc2VkICJzLyAqXCQvLyIgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIApAQCAtMjc0LDcgKzMxNSw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIGZ1bGwgb3V0cHV0JyAnCiAJZ2l0IGxvZyAtLWdyYXBoIC0tZGF0ZS1vcmRlciAtLXByZXR0eT1zaG9ydCB8CiAJCWdpdCBuYW1lLXJldiAtLW5hbWUtb25seSAtLXN0ZGluIHwKLQkJc2VkICJzL01lcmdlOi4qL01lcmdlOiBBIEIvO3MvICokLy8iID5hY3R1YWwgJiYKKwkJc2VkICJzL01lcmdlOi4qL01lcmdlOiBBIEIvO3MvICpcJC8vIiA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCkBAIC0zMDAsMTEgKzM0MSwxMSBAQAogJwogCiBjYXQgPiBleHBlY3QgPDxcRU9GCi0qICAgTWVyZ2UgYnJhbmNoICdyZWFjaCcKKyogICBNZXJnZSBjb21taXQgJ3JlYWNoJwogfFwKIHwgXAogfCAgXAotKi0uIFwgICBNZXJnZSBicmFuY2hlcyAnb2N0b3B1cy1hJyBhbmQgJ29jdG9wdXMtYicKKyotLiBcICAgTWVyZ2UgY29tbWl0ICdvY3RvcHVzLWEnOyBjb21taXQgJ29jdG9wdXMtYicKIHxcIFwgXAogKiB8IHwgfCBzZXZlbnRoCiB8IHwgKiB8IG9jdG9wdXMtYgpAQCAtMzI0LDE0ICszNjUsMTIgQEAKICogfCB8IHwgICBNZXJnZSBicmFuY2ggJ3NpZGUnCiB8XCBcIFwgXAogfCAqIHwgfCB8IHNpZGUtMgotfCB8IHwgfC8KLXwgfCB8L3wKK3wgfCB8X3wvCiB8IHwvfCB8CiB8ICogfCB8IHNpZGUtMQogKiB8IHwgfCBTZWNvbmQKICogfCB8IHwgc2l4dGgKLXwgfCB8LwotfCB8L3wKK3wgfF98LwogfC98IHwKICogfCB8IGZpZnRoCiAqIHwgfCBmb3VydGgKQEAgLTM0NCw3ICszODMsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIG1lcmdlJyAnCiAJZ2l0IGxvZyAtLWdyYXBoIC0tZGF0ZS1vcmRlciAtLXByZXR0eT10Zm9ybWF0OiVzIHwKLQkJc2VkICJzLyAqJC8vIiA+YWN0dWFsICYmCisJCXNlZCAicy8gKlwkLy8iID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDUwMDAtdGFyLXRyZWUuc2ggYi90L3Q1MDAwLXRhci10cmVlLnNoCmluZGV4IDVmODRiMTguLjI3YmZiYTUgMTAwNzU1Ci0tLSBhL3QvdDUwMDAtdGFyLXRyZWUuc2gKKysrIGIvdC90NTAwMC10YXItdHJlZS5zaApAQCAtMTg5LDYgKzE4OSwxNiBAQAogICAgICdnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAgLS1vdXRwdXQ9ZDIuemlwIEhFQUQgJiYKICAgICB0ZXN0X2NtcCBkLnppcCBkMi56aXAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcmNoaXZlIHdpdGggLS1vdXRwdXQsIGluZmVycmluZyBmb3JtYXQnICcKKwlnaXQgYXJjaGl2ZSAtLW91dHB1dD1kMy56aXAgSEVBRCAmJgorCXRlc3RfY21wIGQuemlwIGQzLnppcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXJjaGl2ZSB3aXRoIC0tb3V0cHV0LCBvdmVycmlkZSBpbmZlcnJlZCBmb3JtYXQnICcKKwlnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIgLS1vdXRwdXQ9ZDQuemlwIEhFQUQgJiYKKwl0ZXN0X2NtcCBiLnRhciBkNC56aXAKKycKKwogJFVOWklQIC12ID4vZGV2L251bGwgMj4mMQogaWYgWyAkPyAtZXEgMTI3IF07IHRoZW4KIAlzYXkgIlNraXBwaW5nIFpJUCB0ZXN0cywgYmVjYXVzZSB1bnppcCB3YXMgbm90IGZvdW5kIgpAQCAtMjMwLDQgKzI0MCwxNiBAQAogICAgICdnaXQgYXJjaGl2ZSAtLWxpc3Qgb3V0c2lkZSBvZiBhIGdpdCByZXBvJyBcCiAgICAgJ0dJVF9ESVI9c29tZS9ub24tZXhpc3RpbmcvZGlyZWN0b3J5IGdpdCBhcmNoaXZlIC0tbGlzdCcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWFyY2hpdmUgLS1wcmVmaXg9b2xkZS0nICcKKwlnaXQgYXJjaGl2ZSAtLXByZWZpeD1vbGRlLSA+aC50YXIgSEVBRCAmJgorCSgKKwkJbWtkaXIgaCAmJgorCQljZCBoICYmCisJCSIkVEFSIiB4ZiAtIDwuLi9oLnRhcgorCSkgJiYKKwl0ZXN0IC1kIGgvb2xkZS1hICYmCisJdGVzdCAtZCBoL29sZGUtYS9iaW4gJiYKKwl0ZXN0IC1mIGgvb2xkZS1hL2Jpbi9zaAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUxMDAtbWFpbGluZm8uc2ggYi90L3Q1MTAwLW1haWxpbmZvLnNoCmluZGV4IGU3MGVhOTQuLmViYzM2YzEgMTAwNzU1Ci0tLSBhL3QvdDUxMDAtbWFpbGluZm8uc2gKKysrIGIvdC90NTEwMC1tYWlsaW5mby5zaApAQCAtMTEsMTggKzExLDMwIEBACiAJJ2dpdCBtYWlsc3BsaXQgLW8uICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MTAwL3NhbXBsZS5tYm94ID5sYXN0ICYmCiAJbGFzdD1gY2F0IGxhc3RgICYmCiAJZWNobyB0b3RhbCBpcyAkbGFzdCAmJgotCXRlc3QgYGNhdCBsYXN0YCA9IDEzJworCXRlc3QgYGNhdCBsYXN0YCA9IDE2JworCitjaGVja19tYWlsaW5mbyAoKSB7CisJbWFpbD0kMSBvcHQ9JDIKKwltbz0iJG1haWwkb3B0IgorCWdpdCBtYWlsaW5mbyAtdSAkb3B0IG1zZyRtbyBwYXRjaCRtbyA8JG1haWwgPmluZm8kbW8gJiYKKwl0ZXN0X2NtcCAiJFRFU1RfRElSRUNUT1JZIi90NTEwMC9tc2ckbW8gbXNnJG1vICYmCisJdGVzdF9jbXAgIiRURVNUX0RJUkVDVE9SWSIvdDUxMDAvcGF0Y2gkbW8gcGF0Y2gkbW8gJiYKKwl0ZXN0X2NtcCAiJFRFU1RfRElSRUNUT1JZIi90NTEwMC9pbmZvJG1vIGluZm8kbW8KK30KKwogCiBmb3IgbWFpbCBpbiBgZWNobyAwMCpgCiBkbwogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIm1haWxpbmZvICRtYWlsIiAnCi0JCWdpdCBtYWlsaW5mbyAtdSBtc2ckbWFpbCBwYXRjaCRtYWlsIDwkbWFpbCA+aW5mbyRtYWlsICYmCi0JCWVjaG8gbXNnICYmCi0JCXRlc3RfY21wICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MTAwL21zZyRtYWlsIG1zZyRtYWlsICYmCi0JCWVjaG8gcGF0Y2ggJiYKLQkJdGVzdF9jbXAgIiRURVNUX0RJUkVDVE9SWSIvdDUxMDAvcGF0Y2gkbWFpbCBwYXRjaCRtYWlsICYmCi0JCWVjaG8gaW5mbyAmJgotCQl0ZXN0X2NtcCAiJFRFU1RfRElSRUNUT1JZIi90NTEwMC9pbmZvJG1haWwgaW5mbyRtYWlsCisJCWNoZWNrX21haWxpbmZvICRtYWlsICIiICYmCisJCWlmIHRlc3QgLWYgIiRURVNUX0RJUkVDVE9SWSIvdDUxMDAvbXNnJG1haWwtLXNjaXNzb3JzCisJCXRoZW4KKwkJCWNoZWNrX21haWxpbmZvICRtYWlsIC0tc2Npc3NvcnMKKwkJZmkgJiYKKwkJaWYgdGVzdCAtZiAiJFRFU1RfRElSRUNUT1JZIi90NTEwMC9tc2ckbWFpbC0tbm8taW5ib2R5LWhlYWRlcnMKKwkJdGhlbgorCQkJY2hlY2tfbWFpbGluZm8gJG1haWwgLS1uby1pbmJvZHktaGVhZGVycworCQlmaQogCScKIGRvbmUKIApkaWZmIC0tZ2l0IGEvdC90NTEwMC8uZ2l0YXR0cmlidXRlcyBiL3QvdDUxMDAvLmdpdGF0dHJpYnV0ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkzZjUxNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvLmdpdGF0dHJpYnV0ZXMKQEAgLTAsMCArMSw0IEBACittc2cqCWVuY29kaW5nPVVURi04CitpbmZvKgllbmNvZGluZz1VVEYtOAorcmZjMjA0Ny1pbmZvLSoJZW5jb2Rpbmc9VVRGLTgKK3NhbXBsZS5tYm94CWVuY29kaW5nPVVURi04CmRpZmYgLS1naXQgYS90L3Q1MTAwLzAwMTAgYi90L3Q1MTAwLzAwMTAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1ODkyYzkuLjAwMDAwMDAKLS0tIGEvdC90NTEwMC8wMDEwCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotRnJvbSBiOTcwNGE1MThlMjExNTg0MzNiYWEyY2MyZDU5MWZlYTY4Nzk2N2Y2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogPT9VVEYtOD9xP0x1a2FzPTIwU2FuZHN0cj1DMz1CNm0/PSA8bHVrYXNzQGV0ZWsuY2hhbG1lcnMuc2U+Ci1EYXRlOiBUaHUsIDEwIEp1bCAyMDA4IDIzOjQxOjMzICswMjAwCi1TdWJqZWN0OiBSZTogZGlzY3Vzc2lvbiB0aGF0IGxlYWQgdG8gdGhpcyBwYXRjaAotTUlNRS1WZXJzaW9uOiAxLjAKLUNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAotQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAotCi1bUEFUQ0hdIGdpdC1tYWlsaW5mbzogRml4IGdldHRpbmcgdGhlIHN1YmplY3QgZnJvbSB0aGUgYm9keQotCi0iU3ViamVjdDogIiBpc24ndCBpbiB0aGUgc3RhdGljIGFycmF5ICJoZWFkZXIiLCBhbmQgdGh1cwotbWVtY21wKCJTdWJqZWN0OiAiLCBoZWFkZXJbaV0sIDcpIHdpbGwgbmV2ZXIgbWF0Y2guCi0KLVNpZ25lZC1vZmYtYnk6IEx1a2FzIFNhbmRzdHLDtm0gPGx1a2Fzc0BldGVrLmNoYWxtZXJzLnNlPgotU2lnbmVkLW9mZi1ieTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgotLS0tCi0gYnVpbHRpbi1tYWlsaW5mby5jIHwgICAgMiArLQotIDEgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvYnVpbHRpbi1tYWlsaW5mby5jIGIvYnVpbHRpbi1tYWlsaW5mby5jCi1pbmRleCA5NjJhYTM0Li4yZDE1MjBmIDEwMDY0NAotLS0tIGEvYnVpbHRpbi1tYWlsaW5mby5jCi0rKysgYi9idWlsdGluLW1haWxpbmZvLmMKLUBAIC0zMzQsNyArMzM0LDcgQEAgc3RhdGljIGludCBjaGVja19oZWFkZXIoY2hhciAqbGluZSwgdW5zaWduZWQgbGluZXNpemUsIGNoYXIgKipoZHJfZGF0YSwgaW50IG92ZXIKLSAJCXJldHVybiAxOwotIAlpZiAoIW1lbWNtcCgiW1BBVENIXSIsIGxpbmUsIDcpICYmIGlzc3BhY2UobGluZVs3XSkpIHsKLSAJCWZvciAoaSA9IDA7IGhlYWRlcltpXTsgaSsrKSB7Ci0tCQkJaWYgKCFtZW1jbXAoIlN1YmplY3Q6ICIsIGhlYWRlcltpXSwgOSkpIHsKLSsJCQlpZiAoIW1lbWNtcCgiU3ViamVjdCIsIGhlYWRlcltpXSwgNykpIHsKLSAJCQkJaWYgKCEgaGFuZGxlX2hlYWRlcihsaW5lLCBoZHJfZGF0YVtpXSwgMCkpIHsKLSAJCQkJCXJldHVybiAxOwotIAkJCQl9Ci0tLSAKLTEuNS42LjIuNDU1LmcxZWZiMgotCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDE0IGIvdC90NTEwMC9pbmZvMDAxNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODU2NmIzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAxNApAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogSnVuaW8gSGFtYW5vCitFbWFpbDoganVua2lvQGNveC5uZXQKK1N1YmplY3Q6IEJMQUggT05FCitEYXRlOiBUaHUsIDIwIEF1ZyAyMDA5IDE3OjE4OjIyIC0wNzAwCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMTQtLXNjaXNzb3JzIGIvdC90NTEwMC9pbmZvMDAxNC0tc2Npc3NvcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI5YzhkMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMTQtLXNjaXNzb3JzCkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBKdW5pbyBDIEhhbWFubworRW1haWw6IGdpdHN0ZXJAcG9ib3guY29tCitTdWJqZWN0OiBUZWFjaCBtYWlsaW5mbyB0byBpZ25vcmUgZXZlcnl0aGluZyBiZWZvcmUgLS0gPjggLS0gbWFyaworRGF0ZTogVGh1LCAyMCBBdWcgMjAwOSAxNzoxODoyMiAtMDcwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDE1IGIvdC90NTEwMC9pbmZvMDAxNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTE0ZjEwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAxNQpAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogCitFbWFpbDogCitTdWJqZWN0OiBjaGVjayBib2d1cyBib2R5IGhlYWRlciAoZnJvbSkKK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDE1LS1uby1pbmJvZHktaGVhZGVycyBiL3QvdDUxMDAvaW5mbzAwMTUtLW5vLWluYm9keS1oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZDhkNzcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8wMDE1LS1uby1pbmJvZHktaGVhZGVycwpAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogQSBVIFRob3IKK0VtYWlsOiBhLnUudGhvckBleGFtcGxlLmNvbQorU3ViamVjdDogY2hlY2sgYm9ndXMgYm9keSBoZWFkZXIgKGZyb20pCitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAxNiBiL3QvdDUxMDAvaW5mbzAwMTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhjY2QwZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMTYKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IEEgVSBUaG9yCitFbWFpbDogYS51LnRob3JAZXhhbXBsZS5jb20KK1N1YmplY3Q6IGNoZWNrIGJvZ3VzIGJvZHkgaGVhZGVyIChkYXRlKQorRGF0ZTogYm9ndXMgCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMTYtLW5vLWluYm9keS1oZWFkZXJzIGIvdC90NTEwMC9pbmZvMDAxNi0tbm8taW5ib2R5LWhlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ4NTdkNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMTYtLW5vLWluYm9keS1oZWFkZXJzCkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBBIFUgVGhvcgorRW1haWw6IGEudS50aG9yQGV4YW1wbGUuY29tCitTdWJqZWN0OiBjaGVjayBib2d1cyBib2R5IGhlYWRlciAoZGF0ZSkKK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMTQgYi90L3Q1MTAwL21zZzAwMTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJlNWNkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAxNApAQCAtMCwwICsxLDE4IEBACitJbiByZWFsIGxpZmUsIHdlIHdpbGwgc2VlIGEgZGlzY3Vzc2lvbiB0aGF0IGluc3BpcmVkIHRoaXMgcGF0Y2gKK2Rpc2N1c3NpbmcgcmVsYXRlZCBhbmQgdW5yZWxhdGVkIHRoaW5ncyBhcm91bmQgPjggc2Npc3NvcnMgbWFyaworaW4gdGhpcyBwYXJ0IG9mIHRoZSBtZXNzYWdlLgorCitTdWJqZWN0OiBbUEFUQ0hdIEJMQUggVFdPCisKK0FuZCB0aGVuIHdlIHdpbGwgc2VlIHRoZSBzY2lzc29ycy4KKworIFRoaXMgbGluZSBpcyBub3QgYSBzY2lzc29ycyBtYXJrIC0tID44IC0tIGJ1dCB0YWxrcyBhYm91dCBpdC4KKyAtIC0gPjggLSAtIHBsZWFzZSByZW1vdmUgZXZlcnl0aGluZyBhYm92ZSB0aGlzIGxpbmUgLSAtID44IC0gLQorCitTdWJqZWN0OiBbUEFUQ0hdIFRlYWNoIG1haWxpbmZvIHRvIGlnbm9yZSBldmVyeXRoaW5nIGJlZm9yZSAtLSA+OCAtLSBtYXJrCitGcm9tOiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CisKK1RoaXMgdGVhY2hlcyBtYWlsaW5mbyB0aGUgc2Npc3NvcnMgLS0gPjggLS0gbWFyazsgdGhlIGNvbW1hbmQgaWdub3JlcworZXZlcnl0aGluZyBiZWZvcmUgaXQgaW4gdGhlIG1lc3NhZ2UgYm9keS4KKworU2lnbmVkLW9mZi1ieTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgpkaWZmIC0tZ2l0IGEvdC90NTEwMC9tc2cwMDE0LS1zY2lzc29ycyBiL3QvdDUxMDAvbXNnMDAxNC0tc2Npc3NvcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU5YzZhNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAxNC0tc2Npc3NvcnMKQEAgLTAsMCArMSw0IEBACitUaGlzIHRlYWNoZXMgbWFpbGluZm8gdGhlIHNjaXNzb3JzIC0tID44IC0tIG1hcms7IHRoZSBjb21tYW5kIGlnbm9yZXMKK2V2ZXJ5dGhpbmcgYmVmb3JlIGl0IGluIHRoZSBtZXNzYWdlIGJvZHkuCisKK1NpZ25lZC1vZmYtYnk6IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAxNSBiL3QvdDUxMDAvbXNnMDAxNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWJiM2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDE1CkBAIC0wLDAgKzEsMiBAQAorICAtIGEgbGlzdAorICAtIG9mIHN0dWZmCmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMTUtLW5vLWluYm9keS1oZWFkZXJzIGIvdC90NTEwMC9tc2cwMDE1LS1uby1pbmJvZHktaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTUxMTViCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDE1LS1uby1pbmJvZHktaGVhZGVycwpAQCAtMCwwICsxLDMgQEAKK0Zyb206IGJvZ29zaXR5CisgIC0gYSBsaXN0CisgIC0gb2Ygc3R1ZmYKZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAxNiBiL3QvdDUxMDAvbXNnMDAxNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDlhZGFkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDE2CkBAIC0wLDAgKzEsMiBAQAorYW5kIHNvbWUgY29udGVudAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMTYtLW5vLWluYm9keS1oZWFkZXJzIGIvdC90NTEwMC9tc2cwMDE2LS1uby1pbmJvZHktaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDYzZjUxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDE2LS1uby1pbmJvZHktaGVhZGVycwpAQCAtMCwwICsxLDQgQEAKK0RhdGU6IGJvZ3VzCisKK2FuZCBzb21lIGNvbnRlbnQKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9wYXRjaDAwMTQgYi90L3Q1MTAwL3BhdGNoMDAxNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjRlZmQyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9wYXRjaDAwMTQKQEAgLTAsMCArMSw2NCBAQAorLS0tCisgYnVpbHRpbi1tYWlsaW5mby5jIHwgICAzNyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCisgMSBmaWxlcyBjaGFuZ2VkLCAzNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYnVpbHRpbi1tYWlsaW5mby5jIGIvYnVpbHRpbi1tYWlsaW5mby5jCitpbmRleCBiMGI1ZDhmLi40NjFjNDdlIDEwMDY0NAorLS0tIGEvYnVpbHRpbi1tYWlsaW5mby5jCisrKysgYi9idWlsdGluLW1haWxpbmZvLmMKK0BAIC03MTIsNiArNzEyLDM0IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBhdGNoYnJlYWsoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKKyAJcmV0dXJuIDA7CisgfQorIAorK3N0YXRpYyBpbnQgc2Npc3NvcnMoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKKyt7CisrCXNpemVfdCBpLCBsZW4gPSBsaW5lLT5sZW47CisrCWludCBzY2lzc29yc19kYXNoZXNfc2VlbiA9IDA7CisrCWNvbnN0IGNoYXIgKmJ1ZiA9IGxpbmUtPmJ1ZjsKKysKKysJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisrCQlpZiAoaXNzcGFjZShidWZbaV0pKQorKwkJCWNvbnRpbnVlOworKwkJaWYgKGJ1ZltpXSA9PSAnLScpIHsKKysJCQlzY2lzc29yc19kYXNoZXNfc2VlbiB8PSAwMjsKKysJCQljb250aW51ZTsKKysJCX0KKysJCWlmIChpICsgMSA8IGxlbiAmJiAhbWVtY21wKGJ1ZiArIGksICI+OCIsIDIpKSB7CisrCQkJc2Npc3NvcnNfZGFzaGVzX3NlZW4gfD0gMDE7CisrCQkJaSsrOworKwkJCWNvbnRpbnVlOworKwkJfQorKwkJaWYgKGkgKyA3IDwgbGVuICYmICFtZW1jbXAoYnVmICsgaSwgImN1dCBoZXJlIiwgOCkpIHsKKysJCQlpICs9IDc7CisrCQkJY29udGludWU7CisrCQl9CisrCQkvKiBldmVyeXRoaW5nIGVsc2UgLS0tIG5vdCBzY2lzc29ycyAqLworKwkJYnJlYWs7CisrCX0KKysJcmV0dXJuIHNjaXNzb3JzX2Rhc2hlc19zZWVuID09IDAzOworK30KKysKKyBzdGF0aWMgaW50IGhhbmRsZV9jb21taXRfbXNnKHN0cnVjdCBzdHJidWYgKmxpbmUpCisgeworIAlzdGF0aWMgaW50IHN0aWxsX2xvb2tpbmcgPSAxOworQEAgLTcyMywxMCArNzUxLDE3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2NvbW1pdF9tc2coc3RydWN0IHN0cmJ1ZiAqbGluZSkKKyAJCXN0cmJ1Zl9sdHJpbShsaW5lKTsKKyAJCWlmICghbGluZS0+bGVuKQorIAkJCXJldHVybiAwOworLQkJaWYgKChzdGlsbF9sb29raW5nID0gY2hlY2tfaGVhZGVyKGxpbmUsIHNfaGRyX2RhdGEsIDApKSAhPSAwKQorKwkJc3RpbGxfbG9va2luZyA9IGNoZWNrX2hlYWRlcihsaW5lLCBzX2hkcl9kYXRhLCAwKTsKKysJCWlmIChzdGlsbF9sb29raW5nKQorIAkJCXJldHVybiAwOworIAl9CisgCisrCWlmIChzY2lzc29ycyhsaW5lKSkgeworKwkJZnNlZWsoY21pdG1zZywgMEwsIFNFRUtfU0VUKTsKKysJCXN0aWxsX2xvb2tpbmcgPSAxOworKwkJcmV0dXJuIDA7CisrCX0KKysKKyAJLyogbm9ybWFsaXplIHRoZSBsb2cgbWVzc2FnZSB0byBVVEYtOC4gKi8KKyAJaWYgKG1ldGFpbmZvX2NoYXJzZXQpCisgCQljb252ZXJ0X3RvX3V0ZjgobGluZSwgY2hhcnNldC5idWYpOworLS0gCisxLjYuNC4xCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAxNC0tc2Npc3NvcnMgYi90L3Q1MTAwL3BhdGNoMDAxNC0tc2Npc3NvcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI0ZWZkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcGF0Y2gwMDE0LS1zY2lzc29ycwpAQCAtMCwwICsxLDY0IEBACistLS0KKyBidWlsdGluLW1haWxpbmZvLmMgfCAgIDM3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDM2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9idWlsdGluLW1haWxpbmZvLmMgYi9idWlsdGluLW1haWxpbmZvLmMKK2luZGV4IGIwYjVkOGYuLjQ2MWM0N2UgMTAwNjQ0CistLS0gYS9idWlsdGluLW1haWxpbmZvLmMKKysrKyBiL2J1aWx0aW4tbWFpbGluZm8uYworQEAgLTcxMiw2ICs3MTIsMzQgQEAgc3RhdGljIGlubGluZSBpbnQgcGF0Y2hicmVhayhjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQorIAlyZXR1cm4gMDsKKyB9CisgCisrc3RhdGljIGludCBzY2lzc29ycyhjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQorK3sKKysJc2l6ZV90IGksIGxlbiA9IGxpbmUtPmxlbjsKKysJaW50IHNjaXNzb3JzX2Rhc2hlc19zZWVuID0gMDsKKysJY29uc3QgY2hhciAqYnVmID0gbGluZS0+YnVmOworKworKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKysJCWlmIChpc3NwYWNlKGJ1ZltpXSkpCisrCQkJY29udGludWU7CisrCQlpZiAoYnVmW2ldID09ICctJykgeworKwkJCXNjaXNzb3JzX2Rhc2hlc19zZWVuIHw9IDAyOworKwkJCWNvbnRpbnVlOworKwkJfQorKwkJaWYgKGkgKyAxIDwgbGVuICYmICFtZW1jbXAoYnVmICsgaSwgIj44IiwgMikpIHsKKysJCQlzY2lzc29yc19kYXNoZXNfc2VlbiB8PSAwMTsKKysJCQlpKys7CisrCQkJY29udGludWU7CisrCQl9CisrCQlpZiAoaSArIDcgPCBsZW4gJiYgIW1lbWNtcChidWYgKyBpLCAiY3V0IGhlcmUiLCA4KSkgeworKwkJCWkgKz0gNzsKKysJCQljb250aW51ZTsKKysJCX0KKysJCS8qIGV2ZXJ5dGhpbmcgZWxzZSAtLS0gbm90IHNjaXNzb3JzICovCisrCQlicmVhazsKKysJfQorKwlyZXR1cm4gc2Npc3NvcnNfZGFzaGVzX3NlZW4gPT0gMDM7CisrfQorKworIHN0YXRpYyBpbnQgaGFuZGxlX2NvbW1pdF9tc2coc3RydWN0IHN0cmJ1ZiAqbGluZSkKKyB7CisgCXN0YXRpYyBpbnQgc3RpbGxfbG9va2luZyA9IDE7CitAQCAtNzIzLDEwICs3NTEsMTcgQEAgc3RhdGljIGludCBoYW5kbGVfY29tbWl0X21zZyhzdHJ1Y3Qgc3RyYnVmICpsaW5lKQorIAkJc3RyYnVmX2x0cmltKGxpbmUpOworIAkJaWYgKCFsaW5lLT5sZW4pCisgCQkJcmV0dXJuIDA7CistCQlpZiAoKHN0aWxsX2xvb2tpbmcgPSBjaGVja19oZWFkZXIobGluZSwgc19oZHJfZGF0YSwgMCkpICE9IDApCisrCQlzdGlsbF9sb29raW5nID0gY2hlY2tfaGVhZGVyKGxpbmUsIHNfaGRyX2RhdGEsIDApOworKwkJaWYgKHN0aWxsX2xvb2tpbmcpCisgCQkJcmV0dXJuIDA7CisgCX0KKyAKKysJaWYgKHNjaXNzb3JzKGxpbmUpKSB7CisrCQlmc2VlayhjbWl0bXNnLCAwTCwgU0VFS19TRVQpOworKwkJc3RpbGxfbG9va2luZyA9IDE7CisrCQlyZXR1cm4gMDsKKysJfQorKworIAkvKiBub3JtYWxpemUgdGhlIGxvZyBtZXNzYWdlIHRvIFVURi04LiAqLworIAlpZiAobWV0YWluZm9fY2hhcnNldCkKKyAJCWNvbnZlcnRfdG9fdXRmOChsaW5lLCBjaGFyc2V0LmJ1Zik7CistLSAKKzEuNi40LjEKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcGF0Y2gwMDE1IGIvdC90NTEwMC9wYXRjaDAwMTUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ2NDg0OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcGF0Y2gwMDE1CkBAIC0wLDAgKzEsOCBAQAorLS0tCitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCitpbmRleCBlNjlkZTI5Li5kOTVmM2FkIDEwMDY0NAorLS0tIGEvZm9vCisrKysgYi9mb28KK0BAIC0wLDAgKzEgQEAKKytjb250ZW50CisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcGF0Y2gwMDE1LS1uby1pbmJvZHktaGVhZGVycyBiL3QvdDUxMDAvcGF0Y2gwMDE1LS1uby1pbmJvZHktaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDY0ODQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9wYXRjaDAwMTUtLW5vLWluYm9keS1oZWFkZXJzCkBAIC0wLDAgKzEsOCBAQAorLS0tCitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCitpbmRleCBlNjlkZTI5Li5kOTVmM2FkIDEwMDY0NAorLS0tIGEvZm9vCisrKysgYi9mb28KK0BAIC0wLDAgKzEgQEAKKytjb250ZW50CisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcGF0Y2gwMDE2IGIvdC90NTEwMC9wYXRjaDAwMTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ2NDg0OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcGF0Y2gwMDE2CkBAIC0wLDAgKzEsOCBAQAorLS0tCitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCitpbmRleCBlNjlkZTI5Li5kOTVmM2FkIDEwMDY0NAorLS0tIGEvZm9vCisrKysgYi9mb28KK0BAIC0wLDAgKzEgQEAKKytjb250ZW50CisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcGF0Y2gwMDE2LS1uby1pbmJvZHktaGVhZGVycyBiL3QvdDUxMDAvcGF0Y2gwMDE2LS1uby1pbmJvZHktaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDY0ODQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9wYXRjaDAwMTYtLW5vLWluYm9keS1oZWFkZXJzCkBAIC0wLDAgKzEsOCBAQAorLS0tCitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCitpbmRleCBlNjlkZTI5Li5kOTVmM2FkIDEwMDY0NAorLS0tIGEvZm9vCisrKysgYi9mb28KK0BAIC0wLDAgKzEgQEAKKytjb250ZW50CisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcmZjMjA0Ny1zYW1wbGVzLm1ib3ggYi90L3Q1MTAwL3JmYzIwNDctc2FtcGxlcy5tYm94CmluZGV4IDNjYTI0NzAuLjFmYzIyNDggMTAwNjQ0Ci0tLSBhL3QvdDUxMDAvcmZjMjA0Ny1zYW1wbGVzLm1ib3gKKysrIGIvdC90NTEwMC9yZmMyMDQ3LXNhbXBsZXMubWJveApAQCAtMSw0OCArMSw0OCBAQAogRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiA9P1VTLUFTQ0lJP1E/S2VpdGhfTW9vcmU/PSA8bW9vcmVAY3MudXRrLmVkdT4KLVRvOiA9P0lTTy04ODU5LTE/UT9LZWxkX0o9Rjhybl9TaW1vbnNlbj89IDxrZWxkQGRrdXVnLmRrPgotQ0M6ID0/SVNPLTg4NTktMT9RP0FuZHI9RTk/PSBQaXJhcmQgPFBJUkFSREB2bTEudWxnLmFjLmJlPgotU3ViamVjdDogPT9JU08tODg1OS0xP0I/U1dZZ2VXOTFJR05oYmlCeVpXRmtJSFJvYVhNZ2VXOD0/PQotID0/SVNPLTg4NTktMj9CP2RTQjFibVJsY25OMFlXNWtJSFJvWlNCbGVHRnRjR3hsTGc9PT89CitUbzogPT9JU084ODU5LTE/UT9LZWxkX0o9Rjhybl9TaW1vbnNlbj89IDxrZWxkQGRrdXVnLmRrPgorQ0M6ID0/SVNPODg1OS0xP1E/QW5kcj1FOT89IFBpcmFyZCA8UElSQVJEQHZtMS51bGcuYWMuYmU+CitTdWJqZWN0OiA9P0lTTzg4NTktMT9CP1NXWWdlVzkxSUdOaGJpQnlaV0ZrSUhSb2FYTWdlVzg9Pz0KKyA9P0lTTzg4NTktMj9CP2RTQjFibVJsY25OMFlXNWtJSFJvWlNCbGVHRnRjR3hsTGc9PT89CiAKIEZyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogPT9JU08tODg1OS0xP1E/T2xsZV9KPUU0cm5lZm9ycz89IDxvamFybmVmQGFkbWluLmt0aC5zZT4KK0Zyb206ID0/SVNPODg1OS0xP1E/T2xsZV9KPUU0cm5lZm9ycz89IDxvamFybmVmQGFkbWluLmt0aC5zZT4KIFRvOiBpZXRmLTgyMkBkaW1hY3MucnV0Z2Vycy5lZHUsIG9qYXJuZWZAYWRtaW4ua3RoLnNlCiBTdWJqZWN0OiBUaW1lIGZvciBJU08gMTA2NDY/CiAKIEZyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogVG86IERhdmUgQ3JvY2tlciA8ZGNyb2NrZXJAbW9yZG9yLnN0YW5mb3JkLmVkdT4KIENjOiBpZXRmLTgyMkBkaW1hY3MucnV0Z2Vycy5lZHUsIHBhZkBjb21zb2wuc2UKLUZyb206ID0/SVNPLTg4NTktMT9RP1BhdHJpa19GPUU0bHRzdHI9RjZtPz0gPHBhZkBuYWRhLmt0aC5zZT4KK0Zyb206ID0/SVNPODg1OS0xP1E/UGF0cmlrX0Y9RTRsdHN0cj1GNm0/PSA8cGFmQG5hZGEua3RoLnNlPgogU3ViamVjdDogUmU6IFJGQy1IRFIgY2FyZSBhbmQgZmVlZGluZwogCiBGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IE5hdGhhbmllbCBCb3JlbnN0ZWluIDxuc2JAdGh1bXBlci5iZWxsY29yZS5jb20+Ci0gICAgICAoPT9pc28tODg1OS04P2I/N2VYcytTRHY0U0RwN09qMDhBPT0/PSkKKyAgICAgICg9P0lTTzg4NTktOD9iPzdlWHMrU0R2NFNEcDdPajA4QT09Pz0pCiBUbzogR3JlZyBWYXVkcmV1aWwgPGd2YXVkcmVATlJJLlJlc3Rvbi5WQS5VUz4sIE5lZCBGcmVlZAogICAgPG5lZEBpbm5vc29mdC5jb20+LCBLZWl0aCBNb29yZSA8bW9vcmVAY3MudXRrLmVkdT4KIFN1YmplY3Q6IFRlc3Qgb2YgbmV3IGhlYWRlciBnZW5lcmF0b3IKIE1JTUUtVmVyc2lvbjogMS4wCi1Db250ZW50LXR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMQorQ29udGVudC10eXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTzg4NTktMQogCiBGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLVN1YmplY3Q6ICg9P0lTTy04ODU5LTE/UT9hPz0pCitTdWJqZWN0OiAoPT9JU084ODU5LTE/UT9hPz0pCiAKIEZyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotU3ViamVjdDogKD0/SVNPLTg4NTktMT9RP2E/PSBiKQorU3ViamVjdDogKD0/SVNPODg1OS0xP1E/YT89IGIpCiAKIEZyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotU3ViamVjdDogKD0/SVNPLTg4NTktMT9RP2E/PSA9P0lTTy04ODU5LTE/UT9iPz0pCitTdWJqZWN0OiAoPT9JU084ODU5LTE/UT9hPz0gPT9JU084ODU5LTE/UT9iPz0pCiAKIEZyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotU3ViamVjdDogKD0/SVNPLTg4NTktMT9RP2E/PSAgPT9JU08tODg1OS0xP1E/Yj89KQorU3ViamVjdDogKD0/SVNPODg1OS0xP1E/YT89ICA9P0lTTzg4NTktMT9RP2I/PSkKIAogRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1TdWJqZWN0OiAoPT9JU08tODg1OS0xP1E/YT89Ci0gICAgPT9JU08tODg1OS0xP1E/Yj89KQorU3ViamVjdDogKD0/SVNPODg1OS0xP1E/YT89CisgICAgPT9JU084ODU5LTE/UT9iPz0pCiAKIEZyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotU3ViamVjdDogKD0/SVNPLTg4NTktMT9RP2FfYj89KQorU3ViamVjdDogKD0/SVNPODg1OS0xP1E/YV9iPz0pCiAKIEZyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotU3ViamVjdDogKD0/SVNPLTg4NTktMT9RP2E/PSA9P0lTTy04ODU5LTI/UT9fYj89KQorU3ViamVjdDogKD0/SVNPODg1OS0xP1E/YT89ID0/SVNPODg1OS0yP1E/X2I/PSkKZGlmZiAtLWdpdCBhL3QvdDUxMDAvc2FtcGxlLm1ib3ggYi90L3Q1MTAwL3NhbXBsZS5tYm94CmluZGV4IGM1YWQyMDYuLmRlMTAzMTIgMTAwNjQ0Ci0tLSBhL3QvdDUxMDAvc2FtcGxlLm1ib3gKKysrIGIvdC90NTEwMC9zYW1wbGUubWJveApAQCAtOTksNyArOTksNyBAQAogRnJvbSBub2JvZHkgU2F0IEF1ZyAyNyAyMzowNzo0OSAyMDA1CiBQYXRoOiBuZXdzLmdtYW5lLm9yZyFub3QtZm9yLW1haWwKIE1lc3NhZ2UtSUQ6IDwyMDA1MDcyMS4wOTEwMzYuMDExMTk1MTYueW9zaGZ1amlAbGludXgtaXB2Ni5vcmc+Ci1Gcm9tOiBZT1NISUZVSkkgSGlkZWFraSAvID0/aXNvLTIwMjItanA/Qj9HeVJDTlVoR0l6RlJURUFiS0VJPT89IAorRnJvbTogWU9TSElGVUpJIEhpZGVha2kgLyA9P0lTTy0yMDIyLUpQP0I/R3lSQ05VaEdJekZSVEVBYktFST0/PSAKIAk8eW9zaGZ1amlAbGludXgtaXB2Ni5vcmc+CiBOZXdzZ3JvdXBzOiBnbWFuZS5jb21wLnZlcnNpb24tY29udHJvbC5naXQKIFN1YmplY3Q6IFtQQVRDSCAxLzJdIEdJVDogVHJ5IGFsbCBhZGRyZXNzZXMgZm9yIGdpdmVuIHJlbW90ZSBuYW1lCkBAIC0yMTgsNyArMjE4LDcgQEAKIEZyb20gbm9ib2R5IFNhdCBBdWcgMjcgMjM6MDc6NDkgMjAwNQogUGF0aDogbmV3cy5nbWFuZS5vcmchbm90LWZvci1tYWlsCiBNZXNzYWdlLUlEOiA8dTV0YWNqamRweHEuZnNmQGx5c2F0b3IubGl1LnNlPgotRnJvbTogPT9pc28tODg1OS0xP1E/RGF2aWRfSz1FNWdlZGFsPz0gPGRhdmlka0BseXNhdG9yLmxpdS5zZT4KK0Zyb206ID0/SVNPODg1OS0xP1E/RGF2aWRfSz1FNWdlZGFsPz0gPGRhdmlka0BseXNhdG9yLmxpdS5zZT4KIE5ld3Nncm91cHM6IGdtYW5lLmNvbXAudmVyc2lvbi1jb250cm9sLmdpdAogU3ViamVjdDogW1BBVENIXSBGaXhlZCB0d28gYnVncyBpbiBnaXQtY3ZzaW1wb3J0LXNjcmlwdC4KIERhdGU6IE1vbiwgMTUgQXVnIDIwMDUgMjA6MTg6MjUgKzAyMDAKQEAgLTIyNiw3ICsyMjYsNyBAQAogQXBwcm92ZWQ6IG5ld3NAZ21hbmUub3JnCiBOTlRQLVBvc3RpbmctSG9zdDogbWFpbi5nbWFuZS5vcmcKIE1pbWUtVmVyc2lvbjogMS4wCi1Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9aXNvLTg4NTktMQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTzg4NTktMQogQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogUVVPVEVELVBSSU5UQUJMRQogWC1UcmFjZTogc2VhLmdtYW5lLm9yZyAxMTI0MTMwMjQ3IDMxODM5IDgwLjkxLjIyOS4yICgxNSBBdWcgMjAwNSAxODoyNDowNyBHTVQpCiBYLUNvbXBsYWludHMtVG86IHVzZW5ldEBzZWEuZ21hbmUub3JnCkBAIC00NzYsNyArNDc2LDcgQEAKIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iPS09LT0iCiAKIC0tPS09LT0KLUNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1pc28tODg1OS0xNQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTzg4NTktMTUKIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKIAogSGVyZSBjb21lcyBhIGNvbW1pdCBsb2cgbWVzc2FnZSwgYW5kCkBAIC01NjEsMyArNTYxLDEyNSBAQAogRGF0ZTogRnJpLCA5IEp1biAyMDA2IDAwOjQ0OjE2IC0wNzAwCiBTdWJqZWN0OiBbUEFUQ0hdIGEgcGF0Y2gKIAorRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdW5pbyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PgorRGF0ZTogVGh1LCAyMCBBdWcgMjAwOSAxNzoxODoyMiAtMDcwMAorU3ViamVjdDogV2h5IGRvZXNuJ3QgZ2l0LWFtIGRvZXMgbm90IGxpa2UgPjggc2Npc3NvcnMgbWFyaz8KKworU3ViamVjdDogW1BBVENIXSBCTEFIIE9ORQorCitJbiByZWFsIGxpZmUsIHdlIHdpbGwgc2VlIGEgZGlzY3Vzc2lvbiB0aGF0IGluc3BpcmVkIHRoaXMgcGF0Y2gKK2Rpc2N1c3NpbmcgcmVsYXRlZCBhbmQgdW5yZWxhdGVkIHRoaW5ncyBhcm91bmQgPjggc2Npc3NvcnMgbWFyaworaW4gdGhpcyBwYXJ0IG9mIHRoZSBtZXNzYWdlLgorCitTdWJqZWN0OiBbUEFUQ0hdIEJMQUggVFdPCisKK0FuZCB0aGVuIHdlIHdpbGwgc2VlIHRoZSBzY2lzc29ycy4KKworIFRoaXMgbGluZSBpcyBub3QgYSBzY2lzc29ycyBtYXJrIC0tID44IC0tIGJ1dCB0YWxrcyBhYm91dCBpdC4KKyAtIC0gPjggLSAtIHBsZWFzZSByZW1vdmUgZXZlcnl0aGluZyBhYm92ZSB0aGlzIGxpbmUgLSAtID44IC0gLQorCitTdWJqZWN0OiBbUEFUQ0hdIFRlYWNoIG1haWxpbmZvIHRvIGlnbm9yZSBldmVyeXRoaW5nIGJlZm9yZSAtLSA+OCAtLSBtYXJrCitGcm9tOiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CisKK1RoaXMgdGVhY2hlcyBtYWlsaW5mbyB0aGUgc2Npc3NvcnMgLS0gPjggLS0gbWFyazsgdGhlIGNvbW1hbmQgaWdub3JlcworZXZlcnl0aGluZyBiZWZvcmUgaXQgaW4gdGhlIG1lc3NhZ2UgYm9keS4KKworU2lnbmVkLW9mZi1ieTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgorLS0tCisgYnVpbHRpbi1tYWlsaW5mby5jIHwgICAzNyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCisgMSBmaWxlcyBjaGFuZ2VkLCAzNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYnVpbHRpbi1tYWlsaW5mby5jIGIvYnVpbHRpbi1tYWlsaW5mby5jCitpbmRleCBiMGI1ZDhmLi40NjFjNDdlIDEwMDY0NAorLS0tIGEvYnVpbHRpbi1tYWlsaW5mby5jCisrKysgYi9idWlsdGluLW1haWxpbmZvLmMKK0BAIC03MTIsNiArNzEyLDM0IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBhdGNoYnJlYWsoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKKyAJcmV0dXJuIDA7CisgfQorIAorK3N0YXRpYyBpbnQgc2Npc3NvcnMoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKKyt7CisrCXNpemVfdCBpLCBsZW4gPSBsaW5lLT5sZW47CisrCWludCBzY2lzc29yc19kYXNoZXNfc2VlbiA9IDA7CisrCWNvbnN0IGNoYXIgKmJ1ZiA9IGxpbmUtPmJ1ZjsKKysKKysJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisrCQlpZiAoaXNzcGFjZShidWZbaV0pKQorKwkJCWNvbnRpbnVlOworKwkJaWYgKGJ1ZltpXSA9PSAnLScpIHsKKysJCQlzY2lzc29yc19kYXNoZXNfc2VlbiB8PSAwMjsKKysJCQljb250aW51ZTsKKysJCX0KKysJCWlmIChpICsgMSA8IGxlbiAmJiAhbWVtY21wKGJ1ZiArIGksICI+OCIsIDIpKSB7CisrCQkJc2Npc3NvcnNfZGFzaGVzX3NlZW4gfD0gMDE7CisrCQkJaSsrOworKwkJCWNvbnRpbnVlOworKwkJfQorKwkJaWYgKGkgKyA3IDwgbGVuICYmICFtZW1jbXAoYnVmICsgaSwgImN1dCBoZXJlIiwgOCkpIHsKKysJCQlpICs9IDc7CisrCQkJY29udGludWU7CisrCQl9CisrCQkvKiBldmVyeXRoaW5nIGVsc2UgLS0tIG5vdCBzY2lzc29ycyAqLworKwkJYnJlYWs7CisrCX0KKysJcmV0dXJuIHNjaXNzb3JzX2Rhc2hlc19zZWVuID09IDAzOworK30KKysKKyBzdGF0aWMgaW50IGhhbmRsZV9jb21taXRfbXNnKHN0cnVjdCBzdHJidWYgKmxpbmUpCisgeworIAlzdGF0aWMgaW50IHN0aWxsX2xvb2tpbmcgPSAxOworQEAgLTcyMywxMCArNzUxLDE3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2NvbW1pdF9tc2coc3RydWN0IHN0cmJ1ZiAqbGluZSkKKyAJCXN0cmJ1Zl9sdHJpbShsaW5lKTsKKyAJCWlmICghbGluZS0+bGVuKQorIAkJCXJldHVybiAwOworLQkJaWYgKChzdGlsbF9sb29raW5nID0gY2hlY2tfaGVhZGVyKGxpbmUsIHNfaGRyX2RhdGEsIDApKSAhPSAwKQorKwkJc3RpbGxfbG9va2luZyA9IGNoZWNrX2hlYWRlcihsaW5lLCBzX2hkcl9kYXRhLCAwKTsKKysJCWlmIChzdGlsbF9sb29raW5nKQorIAkJCXJldHVybiAwOworIAl9CisgCisrCWlmIChzY2lzc29ycyhsaW5lKSkgeworKwkJZnNlZWsoY21pdG1zZywgMEwsIFNFRUtfU0VUKTsKKysJCXN0aWxsX2xvb2tpbmcgPSAxOworKwkJcmV0dXJuIDA7CisrCX0KKysKKyAJLyogbm9ybWFsaXplIHRoZSBsb2cgbWVzc2FnZSB0byBVVEYtOC4gKi8KKyAJaWYgKG1ldGFpbmZvX2NoYXJzZXQpCisgCQljb252ZXJ0X3RvX3V0ZjgobGluZSwgY2hhcnNldC5idWYpOworLS0gCisxLjYuNC4xCitGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhLnUudGhvckBleGFtcGxlLmNvbT4KK1N1YmplY3Q6IGNoZWNrIGJvZ3VzIGJvZHkgaGVhZGVyIChmcm9tKQorRGF0ZTogRnJpLCA5IEp1biAyMDA2IDAwOjQ0OjE2IC0wNzAwCisKK0Zyb206IGJvZ29zaXR5CisgIC0gYSBsaXN0CisgIC0gb2Ygc3R1ZmYKKy0tLQorZGlmZiAtLWdpdCBhL2ZvbyBiL2ZvbworaW5kZXggZTY5ZGUyOS4uZDk1ZjNhZCAxMDA2NDQKKy0tLSBhL2ZvbworKysrIGIvZm9vCitAQCAtMCwwICsxIEBACisrY29udGVudAorCitGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhLnUudGhvckBleGFtcGxlLmNvbT4KK1N1YmplY3Q6IGNoZWNrIGJvZ3VzIGJvZHkgaGVhZGVyIChkYXRlKQorRGF0ZTogRnJpLCA5IEp1biAyMDA2IDAwOjQ0OjE2IC0wNzAwCisKK0RhdGU6IGJvZ3VzCisKK2FuZCBzb21lIGNvbnRlbnQKKworLS0tCitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCitpbmRleCBlNjlkZTI5Li5kOTVmM2FkIDEwMDY0NAorLS0tIGEvZm9vCisrKysgYi9mb28KK0BAIC0wLDAgKzEgQEAKKytjb250ZW50CisKZGlmZiAtLWdpdCBhL3QvdDUzMDAtcGFjay1vYmplY3Quc2ggYi90L3Q1MzAwLXBhY2stb2JqZWN0LnNoCmluZGV4IGUyYWEyNTQuLjc2NDliODEgMTAwNzU1Ci0tLSBhL3QvdDUzMDAtcGFjay1vYmplY3Quc2gKKysrIGIvdC90NTMwMC1wYWNrLW9iamVjdC5zaApAQCAtMTYsNyArMTYsOSBAQAogICAgICBwZXJsIC1lICJwcmludCBcImFcIiB4IDQwOTY7IiA+IGEgJiYKICAgICAgcGVybCAtZSAicHJpbnQgXCJiXCIgeCA0MDk2OyIgPiBiICYmCiAgICAgIHBlcmwgLWUgInByaW50IFwiY1wiIHggNDA5NjsiID4gYyAmJgotICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGEgYiBjICYmCisgICAgIHRlc3QtZ2VucmFuZG9tICJzZWVkIGEiIDIwOTcxNTIgPiBhX2JpZyAmJgorICAgICB0ZXN0LWdlbnJhbmRvbSAic2VlZCBiIiAyMDk3MTUyID4gYl9iaWcgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBhIGFfYmlnIGIgYl9iaWcgYyAmJgogICAgICBjYXQgYyA+ZCAmJiBlY2hvIGZvbyA+PmQgJiYgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBkICYmCiAgICAgIHRyZWU9YGdpdCB3cml0ZS10cmVlYCAmJgogICAgICBjb21taXQ9YGdpdCBjb21taXQtdHJlZSAkdHJlZSA8L2Rldi9udWxsYCAmJiB7CkBAIC0yODAsMjYgKzI4Miw4IEBACiAKICAgICAgOicKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ2Zha2UgYSBTSEExIGhhc2ggY29sbGlzaW9uJyBcCi0gICAgJ3Rlc3QgLWYJLmdpdC9vYmplY3RzL2M4LzJkZTE5MzEyYjZjMzY5NWMwYzE4ZjcwNzA5YTZjNTM1NjgyYTY3ICYmCi0gICAgIGNwIC1mCS5naXQvb2JqZWN0cy85ZC8yMzVlZDA3Y2QxOTgxMWE2Y2ViMzQyZGU4MmYxOTBlNDljOWY2OCBcCi0JCS5naXQvb2JqZWN0cy9jOC8yZGUxOTMxMmI2YzM2OTVjMGMxOGY3MDcwOWE2YzUzNTY4MmE2NycKLQotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ21ha2Ugc3VyZSBpbmRleC1wYWNrIGRldGVjdHMgdGhlIFNIQTEgY29sbGlzaW9uJyBcCi0gICAgJ3Rlc3RfbXVzdF9mYWlsIGdpdCBpbmRleC1wYWNrIC1vIGJhZC5pZHggdGVzdC0zLnBhY2sgMj5tc2cgJiYKLSAgICAgZ3JlcCAiU0hBMSBDT0xMSVNJT04gRk9VTkQiIG1zZycKLQotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ2hvbm9yIHBhY2sucGFja1NpemVMaW1pdCcgXAotICAgICdnaXQgY29uZmlnIHBhY2sucGFja1NpemVMaW1pdCAyMDAgJiYKLSAgICAgcGFja25hbWVfND0kKGdpdCBwYWNrLW9iamVjdHMgdGVzdC00IDxvYmotbGlzdCkgJiYKLSAgICAgdGVzdCAzID0gJChscyB0ZXN0LTQtKi5wYWNrIHwgd2MgLWwpJwotCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnBhY2tpbmcgd2l0aCAtLXN0cmljdCcgJwogCi0JZ2l0IGNvbmZpZyAtLXVuc2V0IHBhY2sucGFja3NpemVsaW1pdCAmJgogCWZvciBqIGluIGEgYiBjIGQgZSBmIGcKIAlkbwogCQlmb3IgaSBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5CkBAIC0zOTIsMTAgKzM3Niw0MiBAQAogCSkKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAndG9sZXJhdGUgYWJzdXJkbHkgc21hbGwgcGFja3NpemVsaW1pdCcgJwotCWdpdCBjb25maWcgcGFjay5wYWNrU2l6ZUxpbWl0IDIgJiYKLQlwYWNrbmFtZV85PSQoZ2l0IHBhY2stb2JqZWN0cyB0ZXN0LTkgPG9iai1saXN0KSAmJgotCXRlc3QgJCh3YyAtbCA8b2JqLWxpc3QpID0gJChscyB0ZXN0LTktKi5wYWNrIHwgd2MgLWwpCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdob25vciBwYWNrLnBhY2tTaXplTGltaXQnICcKKwlnaXQgY29uZmlnIHBhY2sucGFja1NpemVMaW1pdCAzbSAmJgorCXBhY2tuYW1lXzEwPSQoZ2l0IHBhY2stb2JqZWN0cyB0ZXN0LTEwIDxvYmotbGlzdCkgJiYKKwl0ZXN0IDIgPSAkKGxzIHRlc3QtMTAtKi5wYWNrIHwgd2MgLWwpCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSByZXN1bHRpbmcgcGFja3MnICcKKwlnaXQgdmVyaWZ5LXBhY2sgdGVzdC0xMC0qLnBhY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndG9sZXJhdGUgcGFja3NpemVsaW1pdCBzbWFsbGVyIHRoYW4gYmlnZ2VzdCBvYmplY3QnICcKKwlnaXQgY29uZmlnIHBhY2sucGFja1NpemVMaW1pdCAxICYmCisJcGFja25hbWVfMTE9JChnaXQgcGFjay1vYmplY3RzIHRlc3QtMTEgPG9iai1saXN0KSAmJgorCXRlc3QgNSA9ICQobHMgdGVzdC0xMS0qLnBhY2sgfCB3YyAtbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHJlc3VsdGluZyBwYWNrcycgJworCWdpdCB2ZXJpZnktcGFjayB0ZXN0LTExLSoucGFjaworJworCisjCisjIFdBUk5JTkchCisjCisjIFRoZSBmb2xsb3dpbmcgdGVzdCBpcyBkZXN0cnVjdGl2ZS4gIFBsZWFzZSBrZWVwIHRoZSBuZXh0CisjIHR3byB0ZXN0cyBhdCB0aGUgZW5kIG9mIHRoaXMgZmlsZS4KKyMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2Zha2UgYSBTSEExIGhhc2ggY29sbGlzaW9uJyBcCisgICAgJ3Rlc3QgLWYJLmdpdC9vYmplY3RzL2M4LzJkZTE5MzEyYjZjMzY5NWMwYzE4ZjcwNzA5YTZjNTM1NjgyYTY3ICYmCisgICAgIGNwIC1mCS5naXQvb2JqZWN0cy85ZC8yMzVlZDA3Y2QxOTgxMWE2Y2ViMzQyZGU4MmYxOTBlNDljOWY2OCBcCisJCS5naXQvb2JqZWN0cy9jOC8yZGUxOTMxMmI2YzM2OTVjMGMxOGY3MDcwOWE2YzUzNTY4MmE2NycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ21ha2Ugc3VyZSBpbmRleC1wYWNrIGRldGVjdHMgdGhlIFNIQTEgY29sbGlzaW9uJyBcCisgICAgJ3Rlc3RfbXVzdF9mYWlsIGdpdCBpbmRleC1wYWNrIC1vIGJhZC5pZHggdGVzdC0zLnBhY2sgMj5tc2cgJiYKKyAgICAgZ3JlcCAiU0hBMSBDT0xMSVNJT04gRk9VTkQiIG1zZycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzAzLXBhY2stY29ycnVwdGlvbi1yZXNpbGllbmNlLnNoIGIvdC90NTMwMy1wYWNrLWNvcnJ1cHRpb24tcmVzaWxpZW5jZS5zaAppbmRleCA1MTMyZDQxLi41ZjZjZDRmIDEwMDc1NQotLS0gYS90L3Q1MzAzLXBhY2stY29ycnVwdGlvbi1yZXNpbGllbmNlLnNoCisrKyBiL3QvdDUzMDMtcGFjay1jb3JydXB0aW9uLXJlc2lsaWVuY2Uuc2gKQEAgLTI3NSw0ICsyNzUsMTMgQEAKICAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgogICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY29ycnVwdGluZyBoZWFkZXIgdG8gaGF2ZSB0b28gc21hbGwgb3V0cHV0IGJ1ZmZlciBmYWlscyB1bnBhY2snIFwKKyAgICAnY3JlYXRlX25ld19wYWNrICYmCisgICAgIGdpdCBwcnVuZS1wYWNrZWQgJiYKKyAgICAgcHJpbnRmICJcMjYyXDAwMSIgfCBkb19jb3JydXB0X29iamVjdCAkYmxvYl8xIDAgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTMwNC1wcnVuZS5zaCBiL3QvdDUzMDQtcHJ1bmUuc2gKaW5kZXggNTVlZDdjNy4uZTJlZDEzZCAxMDA3NTUKLS0tIGEvdC90NTMwNC1wcnVuZS5zaAorKysgYi90L3Q1MzA0LXBydW5lLnNoCkBAIC02LDYgKzYsMTcgQEAKIHRlc3RfZGVzY3JpcHRpb249J3BydW5lJwogLiAuL3Rlc3QtbGliLnNoCiAKK2RheT0kKCg2MCo2MCoyNCkpCit3ZWVrPSQoKCRkYXkqNykpCisKK2FkZF9ibG9iKCkgeworCWJlZm9yZT0kKGdpdCBjb3VudC1vYmplY3RzIHwgc2VkICJzLyAuKi8vIikgJiYKKwlCTE9CPSQoZWNobyBhbGVwaF8wIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJQkxPQl9GSUxFPS5naXQvb2JqZWN0cy8kKGVjaG8gJEJMT0IgfCBzZWQgInMvXi4uLyZcLy8iKSAmJgorCXRlc3QgJCgoMSArICRiZWZvcmUpKSA9ICQoZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgInMvIC4qLy8iKSAmJgorCXRlc3QgLWYgJEJMT0JfRklMRQorfQorCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKIAogCTogPiBmaWxlICYmCkBAIC0zMSwxMSArNDIsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcnVuZSAtLWV4cGlyZScgJwogCi0JYmVmb3JlPSQoZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgInMvIC4qLy8iKSAmJgotCUJMT0I9JChlY2hvIGFsZXBoIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCi0JQkxPQl9GSUxFPS5naXQvb2JqZWN0cy8kKGVjaG8gJEJMT0IgfCBzZWQgInMvXi4uLyZcLy8iKSAmJgotCXRlc3QgJCgoMSArICRiZWZvcmUpKSA9ICQoZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgInMvIC4qLy8iKSAmJgotCXRlc3QgLWYgJEJMT0JfRklMRSAmJgorCWFkZF9ibG9iICYmCiAJZ2l0IHBydW5lIC0tZXhwaXJlPTEuaG91ci5hZ28gJiYKIAl0ZXN0ICQoKDEgKyAkYmVmb3JlKSkgPSAkKGdpdCBjb3VudC1vYmplY3RzIHwgc2VkICJzLyAuKi8vIikgJiYKIAl0ZXN0IC1mICRCTE9CX0ZJTEUgJiYKQEAgLTQ4LDE2ICs1NSwxMiBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYzogaW1wbGljaXQgcHJ1bmUgLS1leHBpcmUnICcKIAotCWJlZm9yZT0kKGdpdCBjb3VudC1vYmplY3RzIHwgc2VkICJzLyAuKi8vIikgJiYKLQlCTE9CPSQoZWNobyBhbGVwaF8wIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCi0JQkxPQl9GSUxFPS5naXQvb2JqZWN0cy8kKGVjaG8gJEJMT0IgfCBzZWQgInMvXi4uLyZcLy8iKSAmJgotCXRlc3QgJCgoMSArICRiZWZvcmUpKSA9ICQoZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgInMvIC4qLy8iKSAmJgotCXRlc3QgLWYgJEJMT0JfRklMRSAmJgotCXRlc3QtY2htdGltZSA9LSQoKDg2NDAwKjE0LTMwKSkgJEJMT0JfRklMRSAmJgorCWFkZF9ibG9iICYmCisJdGVzdC1jaG10aW1lID0tJCgoMiokd2Vlay0zMCkpICRCTE9CX0ZJTEUgJiYKIAlnaXQgZ2MgJiYKIAl0ZXN0ICQoKDEgKyAkYmVmb3JlKSkgPSAkKGdpdCBjb3VudC1vYmplY3RzIHwgc2VkICJzLyAuKi8vIikgJiYKIAl0ZXN0IC1mICRCTE9CX0ZJTEUgJiYKLQl0ZXN0LWNobXRpbWUgPS0kKCg4NjQwMCoxNCsxKSkgJEJMT0JfRklMRSAmJgorCXRlc3QtY2htdGltZSA9LSQoKDIqJHdlZWsrMSkpICRCTE9CX0ZJTEUgJiYKIAlnaXQgZ2MgJiYKIAl0ZXN0ICRiZWZvcmUgPSAkKGdpdCBjb3VudC1vYmplY3RzIHwgc2VkICJzLyAuKi8vIikgJiYKIAkhIHRlc3QgLWYgJEJMT0JfRklMRQpAQCAtMTE0LDEyICsxMTcsOCBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYyAtLW5vLXBydW5lJyAnCiAKLQliZWZvcmU9JChnaXQgY291bnQtb2JqZWN0cyB8IHNlZCAicy8gLiovLyIpICYmCi0JQkxPQj0kKGVjaG8gYWxlcGhfMCB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgotCUJMT0JfRklMRT0uZ2l0L29iamVjdHMvJChlY2hvICRCTE9CIHwgc2VkICJzL14uLi8mXC8vIikgJiYKLQl0ZXN0ICQoKDEgKyAkYmVmb3JlKSkgPSAkKGdpdCBjb3VudC1vYmplY3RzIHwgc2VkICJzLyAuKi8vIikgJiYKLQl0ZXN0IC1mICRCTE9CX0ZJTEUgJiYKLQl0ZXN0LWNobXRpbWUgPS0kKCg4NjQwMCo1MDAxKSkgJEJMT0JfRklMRSAmJgorCWFkZF9ibG9iICYmCisJdGVzdC1jaG10aW1lID0tJCgoNTAwMSokZGF5KSkgJEJMT0JfRklMRSAmJgogCWdpdCBjb25maWcgZ2MucHJ1bmVFeHBpcmUgMi5kYXlzLmFnbyAmJgogCWdpdCBnYyAtLW5vLXBydW5lICYmCiAJdGVzdCAxID0gJChnaXQgY291bnQtb2JqZWN0cyB8IHNlZCAicy8gLiovLyIpICYmCkBAIC0xNDAsOSArMTM5LDggQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2MgLS1wcnVuZT08ZGF0ZT4nICcKIAotCUJMT0I9JChlY2hvIGFsZXBoXzAgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKLQlCTE9CX0ZJTEU9LmdpdC9vYmplY3RzLyQoZWNobyAkQkxPQiB8IHNlZCAicy9eLi4vJlwvLyIpICYmCi0JdGVzdC1jaG10aW1lID0tJCgoODY0MDAqNTAwMSkpICRCTE9CX0ZJTEUgJiYKKwlhZGRfYmxvYiAmJgorCXRlc3QtY2htdGltZSA9LSQoKDUwMDEqJGRheSkpICRCTE9CX0ZJTEUgJiYKIAlnaXQgZ2MgLS1wcnVuZT01MDAyLmRheXMuYWdvICYmCiAJdGVzdCAtZiAkQkxPQl9GSUxFICYmCiAJZ2l0IGdjIC0tcHJ1bmU9NTAwMC5kYXlzLmFnbyAmJgpAQCAtMTUwLDQgKzE0OCw1MCBAQAogCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2djIC0tcHJ1bmU9bmV2ZXInICcKKworCWFkZF9ibG9iICYmCisJZ2l0IGdjIC0tcHJ1bmU9bmV2ZXIgJiYKKwl0ZXN0IC1mICRCTE9CX0ZJTEUgJiYKKwlnaXQgZ2MgLS1wcnVuZT1ub3cgJiYKKwl0ZXN0ICEgLWYgJEJMT0JfRklMRQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2djIHJlc3BlY3RzIGdjLnBydW5lRXhwaXJlPW5ldmVyJyAnCisKKwlnaXQgY29uZmlnIGdjLnBydW5lRXhwaXJlIG5ldmVyICYmCisJYWRkX2Jsb2IgJiYKKwlnaXQgZ2MgJiYKKwl0ZXN0IC1mICRCTE9CX0ZJTEUgJiYKKwlnaXQgY29uZmlnIGdjLnBydW5lRXhwaXJlIG5vdyAmJgorCWdpdCBnYyAmJgorCXRlc3QgISAtZiAkQkxPQl9GSUxFCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmUgLS1leHBpcmU9bmV2ZXInICcKKworCWFkZF9ibG9iICYmCisJZ2l0IHBydW5lIC0tZXhwaXJlPW5ldmVyICYmCisJdGVzdCAtZiAkQkxPQl9GSUxFICYmCisJZ2l0IHBydW5lICYmCisJdGVzdCAhIC1mICRCTE9CX0ZJTEUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYzogcHJ1bmUgb2xkIG9iamVjdHMgYWZ0ZXIgbG9jYWwgY2xvbmUnICcKKwlhZGRfYmxvYiAmJgorCXRlc3QtY2htdGltZSA9LSQoKDIqJHdlZWsrMSkpICRCTE9CX0ZJTEUgJiYKKwlnaXQgY2xvbmUgLS1uby1oYXJkbGlua3MgLiBhY2xvbmUgJiYKKwkoCisJCWNkIGFjbG9uZSAmJgorCQl0ZXN0IDEgPSAkKGdpdCBjb3VudC1vYmplY3RzIHwgc2VkICJzLyAuKi8vIikgJiYKKwkJdGVzdCAtZiAkQkxPQl9GSUxFICYmCisJCWdpdCBnYyAtLXBydW5lICYmCisJCXRlc3QgMCA9ICQoZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgInMvIC4qLy8iKSAmJgorCQkhIHRlc3QgLWYgJEJMT0JfRklMRQorCSkKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NDAwLXNlbmQtcGFjay5zaCBiL3QvdDU0MDAtc2VuZC1wYWNrLnNoCmluZGV4IGYyZDU1ODEuLmM3MTgyNTMgMTAwNzU1Ci0tLSBhL3QvdDU0MDAtc2VuZC1wYWNrLnNoCisrKyBiL3QvdDU0MDAtc2VuZC1wYWNrLnNoCkBAIC0zMiw3ICszMiw3IEBACiAJZG9uZSAmJgogCWdpdCB1cGRhdGUtcmVmIEhFQUQgIiRjb21taXQiICYmCiAJZ2l0IGNsb25lIC4vLiB2aWN0aW0gJiYKLQkoIGNkIHZpY3RpbSAmJiBnaXQgbG9nICkgJiYKKwkoIGNkIHZpY3RpbSAmJiBnaXQgY29uZmlnIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggd2FybiAmJiBnaXQgbG9nICkgJiYKIAlnaXQgdXBkYXRlLXJlZiBIRUFEICIkemVybyIgJiYKIAlwYXJlbnQ9JHplcm8gJiYKIAlpPTAgJiYKQEAgLTEyOSw2ICsxMjksNyBAQAogCSAgICBjZCBwYXJlbnQgJiYKIAkgICAgZ2l0IGluaXQgJiYKIAkgICAgZWNobyBvbmUgPmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmIGdpdCBjb21taXQgLW0gb25lICYmCisJICAgIGdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCB3YXJuICYmCiAJICAgIGVjaG8gdHdvID5maWxlICYmIGdpdCBjb21taXQgLWEgLW0gdHdvCiAJKSAmJgogCWdpdCBjbG9uZSBwYXJlbnQgY2hpbGQgJiYKQEAgLTE5MCwxNiArMTkxLDExIEBACiAJdGVzdCAiJHBhcmVudF9oZWFkIiA9ICIkY2hpbGRfaGVhZCIKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnd2FybiBwdXNoaW5nIHRvIGRlbGV0ZSBjdXJyZW50IGJyYW5jaCcgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVueSBwdXNoaW5nIHRvIGRlbGV0ZSBjdXJyZW50IGJyYW5jaCcgJwogCXJld291bmRfcHVzaF9zZXR1cCAmJgogCSgKIAkgICAgY2QgY2hpbGQgJiYKLQkgICAgZ2l0IHNlbmQtcGFjayAuLi9wYXJlbnQgOnJlZnMvaGVhZHMvbWFzdGVyIDI+ZXJycwotCSkgJiYKLQlncmVwICJ3YXJuaW5nOiB0byByZWZ1c2UgZGVsZXRpbmciIGNoaWxkL2VycnMgJiYKLQkoCi0JCWNkIHBhcmVudCAmJgotCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcgorCSAgICB0ZXN0X211c3RfZmFpbCBnaXQgc2VuZC1wYWNrIC4uL3BhcmVudCA6cmVmcy9oZWFkcy9tYXN0ZXIgMj5lcnJzCiAJKQogJwogCmRpZmYgLS1naXQgYS90L3Q1NDAxLXVwZGF0ZS1ob29rcy5zaCBiL3QvdDU0MDEtdXBkYXRlLWhvb2tzLnNoCmluZGV4IDY0ZjY2YzkuLjE3YmNiMGIgMTAwNzU1Ci0tLSBhL3QvdDU0MDEtdXBkYXRlLWhvb2tzLnNoCisrKyBiL3QvdDU0MDEtdXBkYXRlLWhvb2tzLnNoCkBAIC0xNywyMiArMTcsMjIgQEAKIAljb21taXQxPSQoZWNobyBtb2RpZnkgfCBnaXQgY29tbWl0LXRyZWUgJHRyZWUxIC1wICRjb21taXQwKSAmJgogCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvbWFzdGVyICRjb21taXQwICYmCiAJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy90b2ZhaWwgJGNvbW1pdDEgJiYKLQlnaXQgY2xvbmUgLi8uIHZpY3RpbSAmJgotCUdJVF9ESVI9dmljdGltLy5naXQgZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy90b2ZhaWwgJGNvbW1pdDEgJiYKKwlnaXQgY2xvbmUgLS1iYXJlIC4vLiB2aWN0aW0uZ2l0ICYmCisJR0lUX0RJUj12aWN0aW0uZ2l0IGdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvdG9mYWlsICRjb21taXQxICYmCiAJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgJGNvbW1pdDEgJiYKIAlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL3RvZmFpbCAkY29tbWl0MAogJwogCi1jYXQgPnZpY3RpbS8uZ2l0L2hvb2tzL3ByZS1yZWNlaXZlIDw8J0VPRicKK2NhdCA+dmljdGltLmdpdC9ob29rcy9wcmUtcmVjZWl2ZSA8PCdFT0YnCiAjIS9iaW4vc2gKIHByaW50ZiAlcyAiJEAiID4+JEdJVF9ESVIvcHJlLXJlY2VpdmUuYXJncwogY2F0IC0gPiRHSVRfRElSL3ByZS1yZWNlaXZlLnN0ZGluCiBlY2hvIFNURE9VVCBwcmUtcmVjZWl2ZQogZWNobyBTVERFUlIgcHJlLXJlY2VpdmUgPiYyCiBFT0YKLWNobW9kIHUreCB2aWN0aW0vLmdpdC9ob29rcy9wcmUtcmVjZWl2ZQorY2htb2QgdSt4IHZpY3RpbS5naXQvaG9va3MvcHJlLXJlY2VpdmUKIAotY2F0ID52aWN0aW0vLmdpdC9ob29rcy91cGRhdGUgPDwnRU9GJworY2F0ID52aWN0aW0uZ2l0L2hvb2tzL3VwZGF0ZSA8PCdFT0YnCiAjIS9iaW4vc2gKIGVjaG8gIiRAIiA+PiRHSVRfRElSL3VwZGF0ZS5hcmdzCiByZWFkIHg7IHByaW50ZiAlcyAiJHgiID4kR0lUX0RJUi91cGRhdGUuc3RkaW4KQEAgLTQwLDc3ICs0MCw3NyBAQAogZWNobyBTVERFUlIgdXBkYXRlICQxID4mMgogdGVzdCAiJDEiID0gcmVmcy9oZWFkcy9tYXN0ZXIgfHwgZXhpdAogRU9GCi1jaG1vZCB1K3ggdmljdGltLy5naXQvaG9va3MvdXBkYXRlCitjaG1vZCB1K3ggdmljdGltLmdpdC9ob29rcy91cGRhdGUKIAotY2F0ID52aWN0aW0vLmdpdC9ob29rcy9wb3N0LXJlY2VpdmUgPDwnRU9GJworY2F0ID52aWN0aW0uZ2l0L2hvb2tzL3Bvc3QtcmVjZWl2ZSA8PCdFT0YnCiAjIS9iaW4vc2gKIHByaW50ZiAlcyAiJEAiID4+JEdJVF9ESVIvcG9zdC1yZWNlaXZlLmFyZ3MKIGNhdCAtID4kR0lUX0RJUi9wb3N0LXJlY2VpdmUuc3RkaW4KIGVjaG8gU1RET1VUIHBvc3QtcmVjZWl2ZQogZWNobyBTVERFUlIgcG9zdC1yZWNlaXZlID4mMgogRU9GCi1jaG1vZCB1K3ggdmljdGltLy5naXQvaG9va3MvcG9zdC1yZWNlaXZlCitjaG1vZCB1K3ggdmljdGltLmdpdC9ob29rcy9wb3N0LXJlY2VpdmUKIAotY2F0ID52aWN0aW0vLmdpdC9ob29rcy9wb3N0LXVwZGF0ZSA8PCdFT0YnCitjYXQgPnZpY3RpbS5naXQvaG9va3MvcG9zdC11cGRhdGUgPDwnRU9GJwogIyEvYmluL3NoCiBlY2hvICIkQCIgPj4kR0lUX0RJUi9wb3N0LXVwZGF0ZS5hcmdzCiByZWFkIHg7IHByaW50ZiAlcyAiJHgiID4kR0lUX0RJUi9wb3N0LXVwZGF0ZS5zdGRpbgogZWNobyBTVERPVVQgcG9zdC11cGRhdGUKIGVjaG8gU1RERVJSIHBvc3QtdXBkYXRlID4mMgogRU9GCi1jaG1vZCB1K3ggdmljdGltLy5naXQvaG9va3MvcG9zdC11cGRhdGUKK2NobW9kIHUreCB2aWN0aW0uZ2l0L2hvb2tzL3Bvc3QtdXBkYXRlCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgcHVzaCAnCi0JdGVzdF9tdXN0X2ZhaWwgZ2l0IHNlbmQtcGFjayAtLWZvcmNlIC4vdmljdGltLy5naXQgXAorCXRlc3RfbXVzdF9mYWlsIGdpdCBzZW5kLXBhY2sgLS1mb3JjZSAuL3ZpY3RpbS5naXQgXAogCQltYXN0ZXIgdG9mYWlsID5zZW5kLm91dCAyPnNlbmQuZXJyCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZWQgYXMgZXhwZWN0ZWQnICcKLQl0ZXN0ICQoR0lUX0RJUj12aWN0aW0vLmdpdCBnaXQgcmV2LXBhcnNlIG1hc3RlcikgPSAkY29tbWl0MSAmJgotCXRlc3QgJChHSVRfRElSPXZpY3RpbS8uZ2l0IGdpdCByZXYtcGFyc2UgdG9mYWlsKSA9ICRjb21taXQxCisJdGVzdCAkKEdJVF9ESVI9dmljdGltLmdpdCBnaXQgcmV2LXBhcnNlIG1hc3RlcikgPSAkY29tbWl0MSAmJgorCXRlc3QgJChHSVRfRElSPXZpY3RpbS5naXQgZ2l0IHJldi1wYXJzZSB0b2ZhaWwpID0gJGNvbW1pdDEKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnaG9va3MgcmFuJyAnCi0JdGVzdCAtZiB2aWN0aW0vLmdpdC9wcmUtcmVjZWl2ZS5hcmdzICYmCi0JdGVzdCAtZiB2aWN0aW0vLmdpdC9wcmUtcmVjZWl2ZS5zdGRpbiAmJgotCXRlc3QgLWYgdmljdGltLy5naXQvdXBkYXRlLmFyZ3MgJiYKLQl0ZXN0IC1mIHZpY3RpbS8uZ2l0L3VwZGF0ZS5zdGRpbiAmJgotCXRlc3QgLWYgdmljdGltLy5naXQvcG9zdC1yZWNlaXZlLmFyZ3MgJiYKLQl0ZXN0IC1mIHZpY3RpbS8uZ2l0L3Bvc3QtcmVjZWl2ZS5zdGRpbiAmJgotCXRlc3QgLWYgdmljdGltLy5naXQvcG9zdC11cGRhdGUuYXJncyAmJgotCXRlc3QgLWYgdmljdGltLy5naXQvcG9zdC11cGRhdGUuc3RkaW4KKwl0ZXN0IC1mIHZpY3RpbS5naXQvcHJlLXJlY2VpdmUuYXJncyAmJgorCXRlc3QgLWYgdmljdGltLmdpdC9wcmUtcmVjZWl2ZS5zdGRpbiAmJgorCXRlc3QgLWYgdmljdGltLmdpdC91cGRhdGUuYXJncyAmJgorCXRlc3QgLWYgdmljdGltLmdpdC91cGRhdGUuc3RkaW4gJiYKKwl0ZXN0IC1mIHZpY3RpbS5naXQvcG9zdC1yZWNlaXZlLmFyZ3MgJiYKKwl0ZXN0IC1mIHZpY3RpbS5naXQvcG9zdC1yZWNlaXZlLnN0ZGluICYmCisJdGVzdCAtZiB2aWN0aW0uZ2l0L3Bvc3QtdXBkYXRlLmFyZ3MgJiYKKwl0ZXN0IC1mIHZpY3RpbS5naXQvcG9zdC11cGRhdGUuc3RkaW4KICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlLXJlY2VpdmUgaG9vayBpbnB1dCcgJwogCShlY2hvICRjb21taXQwICRjb21taXQxIHJlZnMvaGVhZHMvbWFzdGVyOwogCSBlY2hvICRjb21taXQxICRjb21taXQwIHJlZnMvaGVhZHMvdG9mYWlsCi0JKSB8IHRlc3RfY21wIC0gdmljdGltLy5naXQvcHJlLXJlY2VpdmUuc3RkaW4KKwkpIHwgdGVzdF9jbXAgLSB2aWN0aW0uZ2l0L3ByZS1yZWNlaXZlLnN0ZGluCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBob29rIGFyZ3VtZW50cycgJwogCShlY2hvIHJlZnMvaGVhZHMvbWFzdGVyICRjb21taXQwICRjb21taXQxOwogCSBlY2hvIHJlZnMvaGVhZHMvdG9mYWlsICRjb21taXQxICRjb21taXQwCi0JKSB8IHRlc3RfY21wIC0gdmljdGltLy5naXQvdXBkYXRlLmFyZ3MKKwkpIHwgdGVzdF9jbXAgLSB2aWN0aW0uZ2l0L3VwZGF0ZS5hcmdzCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QtcmVjZWl2ZSBob29rIGlucHV0JyAnCiAJZWNobyAkY29tbWl0MCAkY29tbWl0MSByZWZzL2hlYWRzL21hc3RlciB8Ci0JdGVzdF9jbXAgLSB2aWN0aW0vLmdpdC9wb3N0LXJlY2VpdmUuc3RkaW4KKwl0ZXN0X2NtcCAtIHZpY3RpbS5naXQvcG9zdC1yZWNlaXZlLnN0ZGluCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QtdXBkYXRlIGhvb2sgYXJndW1lbnRzJyAnCiAJZWNobyByZWZzL2hlYWRzL21hc3RlciB8Ci0JdGVzdF9jbXAgLSB2aWN0aW0vLmdpdC9wb3N0LXVwZGF0ZS5hcmdzCisJdGVzdF9jbXAgLSB2aWN0aW0uZ2l0L3Bvc3QtdXBkYXRlLmFyZ3MKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsIGhvb2sgc3RkaW4gaXMgL2Rldi9udWxsJyAnCi0JISB0ZXN0IC1zIHZpY3RpbS8uZ2l0L3VwZGF0ZS5zdGRpbiAmJgotCSEgdGVzdCAtcyB2aWN0aW0vLmdpdC9wb3N0LXVwZGF0ZS5zdGRpbgorCSEgdGVzdCAtcyB2aWN0aW0uZ2l0L3VwZGF0ZS5zdGRpbiAmJgorCSEgdGVzdCAtcyB2aWN0aW0uZ2l0L3Bvc3QtdXBkYXRlLnN0ZGluCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsbCAqLXJlY2VpdmUgaG9vayBhcmdzIGFyZSBlbXB0eScgJwotCSEgdGVzdCAtcyB2aWN0aW0vLmdpdC9wcmUtcmVjZWl2ZS5hcmdzICYmCi0JISB0ZXN0IC1zIHZpY3RpbS8uZ2l0L3Bvc3QtcmVjZWl2ZS5hcmdzCisJISB0ZXN0IC1zIHZpY3RpbS5naXQvcHJlLXJlY2VpdmUuYXJncyAmJgorCSEgdGVzdCAtcyB2aWN0aW0uZ2l0L3Bvc3QtcmVjZWl2ZS5hcmdzCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlbmQtcGFjayBwcm9kdWNlZCBubyBvdXRwdXQnICcKQEAgLTExOCwyMCArMTE4LDIxIEBACiAnCiAKIGNhdCA8PEVPRiA+ZXhwZWN0Ci1TVERPVVQgcHJlLXJlY2VpdmUKLVNUREVSUiBwcmUtcmVjZWl2ZQotU1RET1VUIHVwZGF0ZSByZWZzL2hlYWRzL21hc3RlcgotU1RERVJSIHVwZGF0ZSByZWZzL2hlYWRzL21hc3RlcgotU1RET1VUIHVwZGF0ZSByZWZzL2hlYWRzL3RvZmFpbAotU1RERVJSIHVwZGF0ZSByZWZzL2hlYWRzL3RvZmFpbAotU1RET1VUIHBvc3QtcmVjZWl2ZQotU1RERVJSIHBvc3QtcmVjZWl2ZQotU1RET1VUIHBvc3QtdXBkYXRlCi1TVERFUlIgcG9zdC11cGRhdGUKK3JlbW90ZTogU1RET1VUIHByZS1yZWNlaXZlCityZW1vdGU6IFNUREVSUiBwcmUtcmVjZWl2ZQorcmVtb3RlOiBTVERPVVQgdXBkYXRlIHJlZnMvaGVhZHMvbWFzdGVyCityZW1vdGU6IFNUREVSUiB1cGRhdGUgcmVmcy9oZWFkcy9tYXN0ZXIKK3JlbW90ZTogU1RET1VUIHVwZGF0ZSByZWZzL2hlYWRzL3RvZmFpbAorcmVtb3RlOiBTVERFUlIgdXBkYXRlIHJlZnMvaGVhZHMvdG9mYWlsCityZW1vdGU6IGVycm9yOiBob29rIGRlY2xpbmVkIHRvIHVwZGF0ZSByZWZzL2hlYWRzL3RvZmFpbAorcmVtb3RlOiBTVERPVVQgcG9zdC1yZWNlaXZlCityZW1vdGU6IFNUREVSUiBwb3N0LXJlY2VpdmUKK3JlbW90ZTogU1RET1VUIHBvc3QtdXBkYXRlCityZW1vdGU6IFNUREVSUiBwb3N0LXVwZGF0ZQogRU9GCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZW5kLXBhY2sgc3RkZXJyIGNvbnRhaW5zIGhvb2sgbWVzc2FnZXMnICcKLQlncmVwIF5TVEQgc2VuZC5lcnIgPmFjdHVhbCAmJgotCXRlc3RfY21wIC0gYWN0dWFsIDxleHBlY3QKKwlncmVwIF5yZW1vdGU6IHNlbmQuZXJyIHwgc2VkICJzLyAqXCQvLyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NDA1LXNlbmQtcGFjay1yZXdpbmQuc2ggYi90L3Q1NDA1LXNlbmQtcGFjay1yZXdpbmQuc2gKaW5kZXggY2I5YWFjYy4uNGJkYTE4YSAxMDA3NTUKLS0tIGEvdC90NTQwNS1zZW5kLXBhY2stcmV3aW5kLnNoCisrKyBiL3QvdDU0MDUtc2VuZC1wYWNrLXJld2luZC5zaApAQCAtOCw2ICs4LDcgQEAKIAogCT5maWxlMSAmJiBnaXQgYWRkIGZpbGUxICYmIHRlc3RfdGljayAmJgogCWdpdCBjb21taXQgLW0gSW5pdGlhbCAmJgorCWdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCB3YXJuICYmCiAKIAlta2RpciBhbm90aGVyICYmICgKIAkJY2QgYW5vdGhlciAmJgpkaWZmIC0tZ2l0IGEvdC90NTUwMC1mZXRjaC1wYWNrLnNoIGIvdC90NTUwMC1mZXRjaC1wYWNrLnNoCmluZGV4IGM0NTBmMzMuLjE4Mzc2ZDYgMTAwNzU1Ci0tLSBhL3QvdDU1MDAtZmV0Y2gtcGFjay5zaAorKysgYi90L3Q1NTAwLWZldGNoLXBhY2suc2gKQEAgLTMsOSArMyw4IEBACiAjIENvcHlyaWdodCAoYykgMjAwNSBKb2hhbm5lcyBTY2hpbmRlbGluCiAjCiAKLXRlc3RfZGVzY3JpcHRpb249J1Rlc3RpbmcgbXVsdGlfYWNrIHBhY2sgZmV0Y2hpbmcKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3RpbmcgbXVsdGlfYWNrIHBhY2sgZmV0Y2hpbmcnCiAKLScKIC4gLi90ZXN0LWxpYi5zaAogCiAjIFRlc3QgZmV0Y2gtcGFjay91cGxvYWQtcGFjayBwYWlyLgpAQCAtMTMsNzcgKzEyLDYwIEBACiAjIFNvbWUgY29udmVuaWVuY2UgZnVuY3Rpb25zCiAKIGFkZCAoKSB7Ci0JbmFtZT0kMQotCXRleHQ9IiRAIgotCWJyYW5jaD1gZWNobyAkbmFtZSB8IHNlZCAtZSAncy9eXCguXCkuKiQvXDEvJ2AKLQlwYXJlbnRzPSIiCisJbmFtZT0kMSAmJgorCXRleHQ9IiRAIiAmJgorCWJyYW5jaD1gZWNobyAkbmFtZSB8IHNlZCAtZSAncy9eXCguXCkuKiQvXDEvJ2AgJiYKKwlwYXJlbnRzPSIiICYmCiAKLQlzaGlmdAorCXNoaWZ0ICYmCiAJd2hpbGUgdGVzdCAkMTsgZG8KLQkJcGFyZW50cz0iJHBhcmVudHMgLXAgJDEiCisJCXBhcmVudHM9IiRwYXJlbnRzIC1wICQxIiAmJgogCQlzaGlmdAotCWRvbmUKKwlkb25lICYmCiAKLQllY2hvICIkdGV4dCIgPiB0ZXN0LnR4dAotCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgdGVzdC50eHQKLQl0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpCisJZWNobyAiJHRleHQiID4gdGVzdC50eHQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHRlc3QudHh0ICYmCisJdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgogCSMgbWFrZSBzdXJlIHRpbWVzdGFtcHMgYXJlIGluIGNvcnJlY3Qgb3JkZXIKLQlzZWM9JCgoJHNlYysxKSkKLQljb21taXQ9JChlY2hvICIkdGV4dCIgfCBHSVRfQVVUSE9SX0RBVEU9JHNlYyBcCi0JCWdpdCBjb21taXQtdHJlZSAkdHJlZSAkcGFyZW50cyAyPj5sb2cyLnR4dCkKLQlldmFsICIkbmFtZT0kY29tbWl0OyBleHBvcnQgJG5hbWUiCi0JZWNobyAkY29tbWl0ID4gLmdpdC9yZWZzL2hlYWRzLyRicmFuY2gKKwl0ZXN0X3RpY2sgJiYKKwljb21taXQ9JChlY2hvICIkdGV4dCIgfCBnaXQgY29tbWl0LXRyZWUgJHRyZWUgJHBhcmVudHMpICYmCisJZXZhbCAiJG5hbWU9JGNvbW1pdDsgZXhwb3J0ICRuYW1lIiAmJgorCWVjaG8gJGNvbW1pdCA+IC5naXQvcmVmcy9oZWFkcy8kYnJhbmNoICYmCiAJZXZhbCAke2JyYW5jaH1USVA9JGNvbW1pdAogfQogCi1jb3VudF9vYmplY3RzICgpIHsKLQlscyAuZ2l0L29iamVjdHMvPz8vKiAyPj5sb2cyLnR4dCB8IHdjIC1sIHwgdHIgLWQgIiAiCi19Ci0KLXRlc3RfZXhwZWN0X29iamVjdF9jb3VudCAoKSB7Ci0JbWVzc2FnZT0kMQotCWNvdW50PSQyCi0KLQlvdXRwdXQ9IiQoY291bnRfb2JqZWN0cykiCi0JdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0JCSJuZXcgb2JqZWN0IGNvdW50ICRtZXNzYWdlIiBcCi0JCSJ0ZXN0ICRjb3VudCA9ICRvdXRwdXQiCi19Ci0KIHB1bGxfdG9fY2xpZW50ICgpIHsKLQludW1iZXI9JDEKLQloZWFkcz0kMgotCWNvdW50PSQzCi0Jbm9fc3RyaWN0X2NvdW50X2NoZWNrPSQ0CisJbnVtYmVyPSQxICYmCisJaGVhZHM9JDIgJiYKKwljb3VudD0kMyAmJgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRudW1iZXIgcHVsbCIgJworCQkoCisJCQljZCBjbGllbnQgJiYKKwkJCWdpdCBmZXRjaC1wYWNrIC1rIC12IC4uICRoZWFkcyAmJgogCi0JY2QgY2xpZW50Ci0JdGVzdF9leHBlY3Rfc3VjY2VzcyAiJG51bWJlciBwdWxsIiBcCi0JCSJnaXQgZmV0Y2gtcGFjayAtayAtdiAuLiAkaGVhZHMiCi0JY2FzZSAiJGhlYWRzIiBpbiAqQSopIGVjaG8gJEFUSVAgPiAuZ2l0L3JlZnMvaGVhZHMvQTs7IGVzYWMKLQljYXNlICIkaGVhZHMiIGluICpCKikgZWNobyAkQlRJUCA+IC5naXQvcmVmcy9oZWFkcy9COzsgZXNhYwotCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL2BlY2hvICRoZWFkcyB8IHNlZCAtZSAncy9eXCguXCkuKiQvXDEvJ2AKKwkJCWNhc2UgIiRoZWFkcyIgaW4KKwkJCSAgICAqQSopCisJCQkJICAgIGVjaG8gJEFUSVAgPiAuZ2l0L3JlZnMvaGVhZHMvQTs7CisJCQllc2FjICYmCisJCQljYXNlICIkaGVhZHMiIGluICpCKikKKwkJCSAgICBlY2hvICRCVElQID4gLmdpdC9yZWZzL2hlYWRzL0I7OworCQkJZXNhYyAmJgorCQkJZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvYGVjaG8gJGhlYWRzIFwKKwkJCQl8IHNlZCAtZSAicy9eXCguXCkuKiQvXDEvImAgJiYKIAotCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImZzY2siICdnaXQgZnNjayAtLWZ1bGwgPiBmc2NrLnR4dCAyPiYxJworCQkJZ2l0IGZzY2sgLS1mdWxsICYmCiAKLQl0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBkb3dubG9hZGVkIHJlc3VsdHMnIFwKLQknbXYgLmdpdC9vYmplY3RzL3BhY2svcGFjay0qIC4gJiYKLQkgcD1gbHMgLTEgcGFjay0qLnBhY2tgICYmCi0JIGdpdCB1bnBhY2stb2JqZWN0cyA8JHAgJiYKLQkgZ2l0IGZzY2sgLS1mdWxsJworCQkJbXYgLmdpdC9vYmplY3RzL3BhY2svcGFjay0qIC4gJiYKKwkJCXA9YGxzIC0xIHBhY2stKi5wYWNrYCAmJgorCQkJZ2l0IHVucGFjay1vYmplY3RzIDwkcCAmJgorCQkJZ2l0IGZzY2sgLS1mdWxsICYmCiAKLQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJuZXcgb2JqZWN0IGNvdW50IGFmdGVyICRudW1iZXIgcHVsbCIgXAotCSdpZHg9YGVjaG8gcGFjay0qLmlkeGAgJiYKLQkgcGFja19jb3VudD1gZ2l0IHNob3ctaW5kZXggPCRpZHggfCB3YyAtbGAgJiYKLQkgdGVzdCAkcGFja19jb3VudCA9ICRjb3VudCcKLQl0ZXN0IC16ICIkcGFja19jb3VudCIgJiYgcGFja19jb3VudD0wCi0JaWYgWyAteiAiJG5vX3N0cmljdF9jb3VudF9jaGVjayIgXTsgdGhlbgotCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJtaW5pbWFsIGNvdW50IiAidGVzdCAkY291bnQgPSAkcGFja19jb3VudCIKLQllbHNlCi0JCXRlc3QgJGNvdW50ICE9ICRwYWNrX2NvdW50ICYmIFwKLQkJCWVjaG8gIldBUk5JTkc6ICRwYWNrX2NvdW50IG9iamVjdHMgdHJhbnNtaXR0ZWQsIG9ubHkgJGNvdW50IG9mIHdoaWNoIHdlcmUgbmVlZGVkIgotCWZpCi0Jcm0gLWYgcGFjay0qCi0JY2QgLi4KKwkJCWlkeD1gZWNobyBwYWNrLSouaWR4YCAmJgorCQkJcGFja19jb3VudD1gZ2l0IHNob3ctaW5kZXggPCRpZHggfCB3YyAtbGAgJiYKKwkJCXRlc3QgJHBhY2tfY291bnQgPSAkY291bnQgJiYKKwkJCXJtIC1mIHBhY2stKgorCQkpCisJJwogfQogCiAjIEhlcmUgYmVnaW5zIHRoZSBhY3R1YWwgdGVzdGluZwpAQCAtOTQsODkgKzc2LDE3NiBAQAogCiAjIGNsaWVudCBwdWxscyBBMjAsIEIxLiBUaGVuIHRyYWNrcyBvbmx5IEIuIFRoZW4gcHVsbHMgQS4KIAotKAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKIAlta2RpciBjbGllbnQgJiYKLQljZCBjbGllbnQgJiYKLQlnaXQgaW5pdCAyPj4gbG9nMi50eHQgJiYKLQlnaXQgY29uZmlnIHRyYW5zZmVyLnVucGFja2xpbWl0IDAKLSkKLQotYWRkIEExCi0KLXByZXY9MTsgY3VyPTI7IHdoaWxlIFsgJGN1ciAtbGUgMTAgXTsgZG8KLQlhZGQgQSRjdXIgJChldmFsIGVjaG8gXCRBJHByZXYpCi0JcHJldj0kY3VyCi0JY3VyPSQoKCRjdXIrMSkpCi1kb25lCi0KLWFkZCBCMSAkQTEKLQotZWNobyAkQVRJUCA+IC5naXQvcmVmcy9oZWFkcy9BCi1lY2hvICRCVElQID4gLmdpdC9yZWZzL2hlYWRzL0IKLWdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL0IKKwkoCisJCWNkIGNsaWVudCAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgY29uZmlnIHRyYW5zZmVyLnVucGFja2xpbWl0IDAKKwkpICYmCisJYWRkIEExICYmCisJcHJldj0xICYmCisJY3VyPTIgJiYKKwl3aGlsZSBbICRjdXIgLWxlIDEwIF07IGRvCisJCWFkZCBBJGN1ciAkKGV2YWwgZWNobyBcJEEkcHJldikgJiYKKwkJcHJldj0kY3VyICYmCisJCWN1cj0kKCgkY3VyKzEpKQorCWRvbmUgJiYKKwlhZGQgQjEgJEExCisJZWNobyAkQVRJUCA+IC5naXQvcmVmcy9oZWFkcy9BICYmCisJZWNobyAkQlRJUCA+IC5naXQvcmVmcy9oZWFkcy9CICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvQgorJwogCiBwdWxsX3RvX2NsaWVudCAxc3QgIkIgQSIgJCgoMTEqMykpCiAKLWFkZCBBMTEgJEExMAotCi1wcmV2PTE7IGN1cj0yOyB3aGlsZSBbICRjdXIgLWxlIDY1IF07IGRvCi0JYWRkIEIkY3VyICQoZXZhbCBlY2hvIFwkQiRwcmV2KQotCXByZXY9JGN1cgotCWN1cj0kKCgkY3VyKzEpKQotZG9uZQordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdCAxc3QgcHVsbCBzZXR1cCcgJworCWFkZCBBMTEgJEExMCAmJgorCXByZXY9MSAmJgorCWN1cj0yICYmCisJd2hpbGUgWyAkY3VyIC1sZSA2NSBdOyBkbworCQlhZGQgQiRjdXIgJChldmFsIGVjaG8gXCRCJHByZXYpICYmCisJCXByZXY9JGN1ciAmJgorCQljdXI9JCgoJGN1cisxKSkKKwlkb25lCisnCiAKIHB1bGxfdG9fY2xpZW50IDJuZCAiQiIgJCgoNjQqMykpCiAKLXB1bGxfdG9fY2xpZW50IDNyZCAiQSIgJCgoMSozKSkgIyBvbGQgZmFpbHMKK3B1bGxfdG9fY2xpZW50IDNyZCAiQSIgJCgoMSozKSkKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2xvbmUgc2hhbGxvdyIgJ2dpdCBjbG9uZSAtLWRlcHRoIDIgImZpbGU6Ly8kKHB3ZCkvLiIgc2hhbGxvdycKLQotKGNkIHNoYWxsb3c7IGdpdCBjb3VudC1vYmplY3RzIC12KSA+IGNvdW50LnNoYWxsb3cKLQotdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2xvbmUgc2hhbGxvdyBvYmplY3QgY291bnQiIFwKLQkidGVzdCBcImluLXBhY2s6IDE4XCIgPSBcIiQoZ3JlcCBpbi1wYWNrIGNvdW50LnNoYWxsb3cpXCIiCi0KLWNvdW50X291dHB1dCAoKSB7Ci0Jc2VkIC1lICcvXmluLXBhY2s6L2QnIC1lICcvXnBhY2tzOi9kJyAtZSAnL15zaXplLXBhY2s6L2QnIC1lICcvOiAwJC9kJyAiJDEiCi19Ci0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNsb25lIHNoYWxsb3cgb2JqZWN0IGNvdW50IChwYXJ0IDIpIiAnCi0JdGVzdCAteiAiJChjb3VudF9vdXRwdXQgY291bnQuc2hhbGxvdykiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93JyAnCisJZ2l0IGNsb25lIC0tZGVwdGggMiAiZmlsZTovLyQocHdkKS8uIiBzaGFsbG93CiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImZzY2sgaW4gc2hhbGxvdyByZXBvIiBcCi0JIihjZCBzaGFsbG93OyBnaXQgZnNjayAtLWZ1bGwpIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2hhbGxvdyBvYmplY3QgY291bnQnICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IGNvdW50LW9iamVjdHMgLXYKKwkpID4gY291bnQuc2hhbGxvdyAmJgorCWdyZXAgIl5pbi1wYWNrOiAxOCIgY291bnQuc2hhbGxvdworJwogCi0jdGVzdF9kb25lOyBleGl0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IG9iamVjdCBjb3VudCAocGFydCAyKScgJworCXNlZCAtZSAiL15pbi1wYWNrOi9kIiAtZSAiL15wYWNrczovZCIgLWUgIi9ec2l6ZS1wYWNrOi9kIiBcCisJICAgIC1lICIvOiAwJC9kIiBjb3VudC5zaGFsbG93ID4gY291bnRfb3V0cHV0ICYmCisJISB0ZXN0IC1zIGNvdW50X291dHB1dAorJwogCi1hZGQgQjY2ICRCNjUKLWFkZCBCNjcgJEI2NgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayBpbiBzaGFsbG93IHJlcG8nICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IGZzY2sgLS1mdWxsCisJKQorJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICJwdWxsIGluIHNoYWxsb3cgcmVwbyIgXAotCSIoY2Qgc2hhbGxvdzsgZ2l0IHB1bGwgLi4gQikiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW1wbGUgZmV0Y2ggaW4gc2hhbGxvdyByZXBvJyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBmZXRjaAorCSkKKycKIAotKGNkIHNoYWxsb3c7IGdpdCBjb3VudC1vYmplY3RzIC12KSA+IGNvdW50LnNoYWxsb3cKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNsb25lIHNoYWxsb3cgb2JqZWN0IGNvdW50IiBcCi0JInRlc3QgXCJjb3VudDogNlwiID0gXCIkKGdyZXAgY291bnQgY291bnQuc2hhbGxvdylcIiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGNoYW5nZXMgZXhwZWN0ZWQnICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IGNvdW50LW9iamVjdHMgLXYKKwkpID4gY291bnQuc2hhbGxvdy4yICYmCisJY21wIGNvdW50LnNoYWxsb3cgY291bnQuc2hhbGxvdy4yCisnCiAKLWFkZCBCNjggJEI2NwotYWRkIEI2OSAkQjY4Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBzYW1lIGRlcHRoIGluIHNoYWxsb3cgcmVwbycgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgZmV0Y2ggLS1kZXB0aD0yCisJKQorJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICJkZWVwZW5pbmcgcHVsbCBpbiBzaGFsbG93IHJlcG8iIFwKLQkiKGNkIHNoYWxsb3c7IGdpdCBwdWxsIC0tZGVwdGggNCAuLiBCKSIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGNoYW5nZXMgZXhwZWN0ZWQnICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IGNvdW50LW9iamVjdHMgLXYKKwkpID4gY291bnQuc2hhbGxvdy4zICYmCisJY21wIGNvdW50LnNoYWxsb3cgY291bnQuc2hhbGxvdy4zCisnCiAKLShjZCBzaGFsbG93OyBnaXQgY291bnQtb2JqZWN0cyAtdikgPiBjb3VudC5zaGFsbG93Ci10ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSBzaGFsbG93IG9iamVjdCBjb3VudCIgXAotCSJ0ZXN0IFwiY291bnQ6IDEyXCIgPSBcIiQoZ3JlcCBjb3VudCBjb3VudC5zaGFsbG93KVwiIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHR3byBtb3JlJyAnCisJYWRkIEI2NiAkQjY1ICYmCisJYWRkIEI2NyAkQjY2CisnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImRlZXBlbmluZyBmZXRjaCBpbiBzaGFsbG93IHJlcG8iIFwKLQkiKGNkIHNoYWxsb3c7IGdpdCBmZXRjaCAtLWRlcHRoIDQgLi4gQTpBKSIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgaW4gc2hhbGxvdyByZXBvJyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBwdWxsIC4uIEIKKwkpCisnCiAKLShjZCBzaGFsbG93OyBnaXQgY291bnQtb2JqZWN0cyAtdikgPiBjb3VudC5zaGFsbG93Ci10ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSBzaGFsbG93IG9iamVjdCBjb3VudCIgXAotCSJ0ZXN0IFwiY291bnQ6IDE4XCIgPSBcIiQoZ3JlcCBjb3VudCBjb3VudC5zaGFsbG93KVwiIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2hhbGxvdyBvYmplY3QgY291bnQnICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IGNvdW50LW9iamVjdHMgLXYKKwkpID4gY291bnQuc2hhbGxvdyAmJgorCWdyZXAgIl5jb3VudDogNiIgY291bnQuc2hhbGxvdworJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICJwdWxsIGluIHNoYWxsb3cgcmVwbyB3aXRoIG1pc3NpbmcgbWVyZ2UgYmFzZSIgXAotCSIoY2Qgc2hhbGxvdyAmJiB0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLWRlcHRoIDQgLi4gQSkiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgdHdvIG1vcmUgKHBhcnQgMiknICcKKwlhZGQgQjY4ICRCNjcgJiYKKwlhZGQgQjY5ICRCNjgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVlcGVuaW5nIHB1bGwgaW4gc2hhbGxvdyByZXBvJyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBwdWxsIC0tZGVwdGggNCAuLiBCCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IG9iamVjdCBjb3VudCcgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgY291bnQtb2JqZWN0cyAtdgorCSkgPiBjb3VudC5zaGFsbG93ICYmCisJZ3JlcCAiXmNvdW50OiAxMiIgY291bnQuc2hhbGxvdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWVwZW5pbmcgZmV0Y2ggaW4gc2hhbGxvdyByZXBvJyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBmZXRjaCAtLWRlcHRoIDQgLi4gQTpBCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IG9iamVjdCBjb3VudCcgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgY291bnQtb2JqZWN0cyAtdgorCSkgPiBjb3VudC5zaGFsbG93ICYmCisJZ3JlcCAiXmNvdW50OiAxOCIgY291bnQuc2hhbGxvdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIGluIHNoYWxsb3cgcmVwbyB3aXRoIG1pc3NpbmcgbWVyZ2UgYmFzZScgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLWRlcHRoIDQgLi4gQQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkaXRpb25hbCBzaW1wbGUgc2hhbGxvdyBkZWVwZW5pbmdzJyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBmZXRjaCAtLWRlcHRoPTggJiYKKwkJZ2l0IGZldGNoIC0tZGVwdGg9MTAgJiYKKwkJZ2l0IGZldGNoIC0tZGVwdGg9MTEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHNoYWxsb3cgb2JqZWN0IGNvdW50JyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBjb3VudC1vYmplY3RzIC12CisJKSA+IGNvdW50LnNoYWxsb3cgJiYKKwlncmVwICJeY291bnQ6IDUyIiBjb3VudC5zaGFsbG93CisnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUwMi1xdWlja2ZldGNoLnNoIGIvdC90NTUwMi1xdWlja2ZldGNoLnNoCmluZGV4IDE2ZWFkZDYuLjEwMzdhNzIgMTAwNzU1Ci0tLSBhL3QvdDU1MDItcXVpY2tmZXRjaC5zaAorKysgYi90L3Q1NTAyLXF1aWNrZmV0Y2guc2gKQEAgLTExOSw0ICsxMTksMjQgQEAKIAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdxdWlja2ZldGNoIHNob3VsZCBoYW5kbGUgfjEwMDAgcmVmcyAob24gV2luZG93cyknICcKKworCWdpdCBnYyAmJgorCWhlYWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJYnJhbmNocHJlZml4PSIkaGVhZCByZWZzL2hlYWRzL2JyYW5jaCIgJiYKKwlmb3IgaSBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5OyBkbworCQlmb3IgaiBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5OyBkbworCQkJZm9yIGsgaW4gMCAxIDIgMyA0IDUgNiA3IDggOTsgZG8KKwkJCQllY2hvICIkYnJhbmNocHJlZml4JGkkaiRrIiA+PiAuZ2l0L3BhY2tlZC1yZWZzCisJCQlkb25lCisJCWRvbmUKKwlkb25lICYmCisJKAorCQljZCBjbG9uZWQgJiYKKwkJZ2l0IGZldGNoICYmCisJCWdpdCBmZXRjaAorCSkKKworJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MDUtcmVtb3RlLnNoIGIvdC90NTUwNS1yZW1vdGUuc2gKaW5kZXggOThlOGVjMC4uMjY5MjA1MCAxMDA3NTUKLS0tIGEvdC90NTUwNS1yZW1vdGUuc2gKKysrIGIvdC90NTUwNS1yZW1vdGUuc2gKQEAgLTEzNSw3ICsxMzUsOCBAQAogCiBjYXQgPiB0ZXN0L2V4cGVjdCA8PCBFT0YKICogcmVtb3RlIG9yaWdpbgotICBVUkw6ICQocHdkKS9vbmUKKyAgRmV0Y2ggVVJMOiAkKHB3ZCkvb25lCisgIFB1c2ggIFVSTDogJChwd2QpL29uZQogICBIRUFEIGJyYW5jaDogbWFzdGVyCiAgIFJlbW90ZSBicmFuY2hlczoKICAgICBtYXN0ZXIgbmV3IChuZXh0IGZldGNoIHdpbGwgc3RvcmUgaW4gcmVtb3Rlcy9vcmlnaW4pCkBAIC0xNTEsMTIgKzE1MiwxMyBAQAogICAgIG1hc3RlciBwdXNoZXMgdG8gbWFzdGVyICAgKGxvY2FsIG91dCBvZiBkYXRlKQogICAgIG1hc3RlciBwdXNoZXMgdG8gdXBzdHJlYW0gKGNyZWF0ZSkKICogcmVtb3RlIHR3bwotICBVUkw6IC4uL3R3bworICBGZXRjaCBVUkw6IC4uL3R3bworICBQdXNoICBVUkw6IC4uL3RocmVlCiAgIEhFQUQgYnJhbmNoIChyZW1vdGUgSEVBRCBpcyBhbWJpZ3VvdXMsIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyk6CiAgICAgYW5vdGhlcgogICAgIG1hc3RlcgogICBMb2NhbCByZWZzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCc6Ci0gICAgYWhlYWQgIGZvcmNlcyB0byBtYXN0ZXIgIChmYXN0IGZvcndhcmRhYmxlKQorICAgIGFoZWFkICBmb3JjZXMgdG8gbWFzdGVyICAoZmFzdC1mb3J3YXJkYWJsZSkKICAgICBtYXN0ZXIgcHVzaGVzIHRvIGFub3RoZXIgKHVwIHRvIGRhdGUpCiBFT0YKIApAQCAtMTczLDYgKzE3NSw3IEBACiAJIGdpdCBicmFuY2ggLS10cmFjayByZWJhc2Ugb3JpZ2luL21hc3RlciAmJgogCSBnaXQgYnJhbmNoIC1kIC1yIG9yaWdpbi9tYXN0ZXIgJiYKIAkgZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUudHdvLnVybCAuLi90d28gJiYKKwkgZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUudHdvLnB1c2h1cmwgLi4vdGhyZWUgJiYKIAkgZ2l0IGNvbmZpZyBicmFuY2gucmViYXNlLnJlYmFzZSB0cnVlICYmCiAJIGdpdCBjb25maWcgYnJhbmNoLm9jdG9wdXMubWVyZ2UgInRvcGljLWEgdG9waWMtYiB0b3BpYy1jIiAmJgogCSAoY2QgLi4vb25lICYmCkBAIC0xOTEsNyArMTk0LDggQEAKIAogY2F0ID4gdGVzdC9leHBlY3QgPDwgRU9GCiAqIHJlbW90ZSBvcmlnaW4KLSAgVVJMOiAkKHB3ZCkvb25lCisgIEZldGNoIFVSTDogJChwd2QpL29uZQorICBQdXNoICBVUkw6ICQocHdkKS9vbmUKICAgSEVBRCBicmFuY2g6IChub3QgcXVlcmllZCkKICAgUmVtb3RlIGJyYW5jaGVzOiAoc3RhdHVzIG5vdCBxdWVyaWVkKQogICAgIG1hc3RlcgpAQCAtMzYxLDYgKzM2NSwxNyBAQAogCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSAtLXBydW5lJyAnCisKKwkoY2Qgb25lICYmCisJIGdpdCBicmFuY2ggLW0gc2lkZTIgc2lkZTMpICYmCisJKGNkIHRlc3QgJiYKKwkgZ2l0IHJlbW90ZSB1cGRhdGUgLS1wcnVuZSAmJgorCSAoY2QgLi4vb25lICYmIGdpdCBicmFuY2ggLW0gc2lkZTMgc2lkZTIpCisJIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlMyAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZTIpCisnCisKIGNhdCA+IG9uZS9leHBlY3QgPDwgRU9GCiAgIGFwaXMvbWFzdGVyCiAgIGFwaXMvc2lkZQpAQCAtNDA0LDYgKzQxOSwyMCBAQAogCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSAod2l0aCByZW1vdGVzLmRlZmF1bHQgZGVmaW5lZCknICcKKworCShjZCBvbmUgJiYKKwkgZm9yIGIgaW4gJChnaXQgYnJhbmNoIC1yKQorCSBkbworCQlnaXQgYnJhbmNoIC1yIC1kICRiIHx8IGJyZWFrCisJIGRvbmUgJiYKKwkgZ2l0IGNvbmZpZyByZW1vdGVzLmRlZmF1bHQgImRyb3NvcGhpbGEiICYmCisJIGdpdCByZW1vdGUgdXBkYXRlICYmCisJIGdpdCBicmFuY2ggLXIgPiBvdXRwdXQgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IG91dHB1dCkKKworJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICcicmVtb3RlIHNob3ciIGRvZXMgbm90IHNob3cgc3ltYm9saWMgcmVmcycgJwogCiAJZ2l0IGNsb25lIG9uZSB0aHJlZSAmJgpAQCAtNTA0LDUgKzUzMywyMTkgQEAKIAkpCiAnCiAKLXRlc3RfZG9uZQordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmV3IHJlbW90ZScgJworKAorCWdpdCByZW1vdGUgYWRkIHNvbWVyZW1vdGUgZm9vICYmCisJZWNobyBmb28gPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnVybCA+YWN0dWFsICYmCisJY21wIGV4cGVjdCBhY3R1YWwKKykKKycKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC11cmwgYmFyJyAnCisoCisJZ2l0IHJlbW90ZSBzZXQtdXJsIHNvbWVyZW1vdGUgYmFyICYmCisJZWNobyBiYXIgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnVybCA+YWN0dWFsICYmCisJY21wIGV4cGVjdCBhY3R1YWwKKykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC11cmwgYmF6IGJhcicgJworKAorCWdpdCByZW1vdGUgc2V0LXVybCBzb21lcmVtb3RlIGJheiBiYXIgJiYKKwllY2hvIGJheiA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUudXJsID5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgc2V0LXVybCB6b3QgYmFyJyAnCisoCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlbW90ZSBzZXQtdXJsIHNvbWVyZW1vdGUgem90IGJhciAmJgorCWVjaG8gYmF6ID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS51cmwgPmFjdHVhbCAmJgorCWNtcCBleHBlY3QgYWN0dWFsCispCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBzZXQtdXJsIC0tcHVzaCB6b3QgYmF6JyAnCisoCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlbW90ZSBzZXQtdXJsIC0tcHVzaCBzb21lcmVtb3RlIHpvdCBiYXogJiYKKwllY2hvICJZWVkiID5leHBlY3QgJiYKKwllY2hvIGJheiA+PmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnB1c2h1cmwgPmFjdHVhbCAmJgorCWVjaG8gIllZWSIgPj5hY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS51cmwgPj5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgc2V0LXVybCAtLXB1c2ggem90JyAnCisoCisJZ2l0IHJlbW90ZSBzZXQtdXJsIC0tcHVzaCBzb21lcmVtb3RlIHpvdCAmJgorCWVjaG8gem90ID5leHBlY3QgJiYKKwllY2hvICJZWVkiID4+ZXhwZWN0ICYmCisJZWNobyBiYXogPj5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS5wdXNodXJsID5hY3R1YWwgJiYKKwllY2hvICJZWVkiID4+YWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUudXJsID4+YWN0dWFsICYmCisJY21wIGV4cGVjdCBhY3R1YWwKKykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC11cmwgLS1wdXNoIHF1eCB6b3QnICcKKygKKwlnaXQgcmVtb3RlIHNldC11cmwgLS1wdXNoIHNvbWVyZW1vdGUgcXV4IHpvdCAmJgorCWVjaG8gcXV4ID5leHBlY3QgJiYKKwllY2hvICJZWVkiID4+ZXhwZWN0ICYmCisJZWNobyBiYXogPj5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS5wdXNodXJsID5hY3R1YWwgJiYKKwllY2hvICJZWVkiID4+YWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUudXJsID4+YWN0dWFsICYmCisJY21wIGV4cGVjdCBhY3R1YWwKKykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC11cmwgLS1wdXNoIGZvbyBxdSt4JyAnCisoCisJZ2l0IHJlbW90ZSBzZXQtdXJsIC0tcHVzaCBzb21lcmVtb3RlIGZvbyBxdSt4ICYmCisJZWNobyBmb28gPmV4cGVjdCAmJgorCWVjaG8gIllZWSIgPj5leHBlY3QgJiYKKwllY2hvIGJheiA+PmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnB1c2h1cmwgPmFjdHVhbCAmJgorCWVjaG8gIllZWSIgPj5hY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS51cmwgPj5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgc2V0LXVybCAtLXB1c2ggLS1hZGQgYWFhJyAnCisoCisJZ2l0IHJlbW90ZSBzZXQtdXJsIC0tcHVzaCAtLWFkZCBzb21lcmVtb3RlIGFhYSAmJgorCWVjaG8gZm9vID5leHBlY3QgJiYKKwllY2hvIGFhYSA+PmV4cGVjdCAmJgorCWVjaG8gIllZWSIgPj5leHBlY3QgJiYKKwllY2hvIGJheiA+PmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnB1c2h1cmwgPmFjdHVhbCAmJgorCWVjaG8gIllZWSIgPj5hY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS51cmwgPj5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgc2V0LXVybCAtLXB1c2ggYmFyIGFhYScgJworKAorCWdpdCByZW1vdGUgc2V0LXVybCAtLXB1c2ggc29tZXJlbW90ZSBiYXIgYWFhICYmCisJZWNobyBmb28gPmV4cGVjdCAmJgorCWVjaG8gYmFyID4+ZXhwZWN0ICYmCisJZWNobyAiWVlZIiA+PmV4cGVjdCAmJgorCWVjaG8gYmF6ID4+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUucHVzaHVybCA+YWN0dWFsICYmCisJZWNobyAiWVlZIiA+PmFjdHVhbCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnVybCA+PmFjdHVhbCAmJgorCWNtcCBleHBlY3QgYWN0dWFsCispCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBzZXQtdXJsIC0tcHVzaCAtLWRlbGV0ZSBiYXInICcKKygKKwlnaXQgcmVtb3RlIHNldC11cmwgLS1wdXNoIC0tZGVsZXRlIHNvbWVyZW1vdGUgYmFyICYmCisJZWNobyBmb28gPmV4cGVjdCAmJgorCWVjaG8gIllZWSIgPj5leHBlY3QgJiYKKwllY2hvIGJheiA+PmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnB1c2h1cmwgPmFjdHVhbCAmJgorCWVjaG8gIllZWSIgPj5hY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS51cmwgPj5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgc2V0LXVybCAtLXB1c2ggLS1kZWxldGUgZm9vJyAnCisoCisJZ2l0IHJlbW90ZSBzZXQtdXJsIC0tcHVzaCAtLWRlbGV0ZSBzb21lcmVtb3RlIGZvbyAmJgorCWVjaG8gIllZWSIgPmV4cGVjdCAmJgorCWVjaG8gYmF6ID4+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUucHVzaHVybCA+YWN0dWFsICYmCisJZWNobyAiWVlZIiA+PmFjdHVhbCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnVybCA+PmFjdHVhbCAmJgorCWNtcCBleHBlY3QgYWN0dWFsCispCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBzZXQtdXJsIC0tYWRkIGJiYicgJworKAorCWdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCBzb21lcmVtb3RlIGJiYiAmJgorCWVjaG8gIllZWSIgPmV4cGVjdCAmJgorCWVjaG8gYmF6ID4+ZXhwZWN0ICYmCisJZWNobyBiYmIgPj5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS5wdXNodXJsID5hY3R1YWwgJiYKKwllY2hvICJZWVkiID4+YWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUudXJsID4+YWN0dWFsICYmCisJY21wIGV4cGVjdCBhY3R1YWwKKykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC11cmwgLS1kZWxldGUgLionICcKKygKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgc29tZXJlbW90ZSAuKiAmJgorCWVjaG8gIllZWSIgPmV4cGVjdCAmJgorCWVjaG8gYmF6ID4+ZXhwZWN0ICYmCisJZWNobyBiYmIgPj5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS5wdXNodXJsID5hY3R1YWwgJiYKKwllY2hvICJZWVkiID4+YWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUudXJsID4+YWN0dWFsICYmCisJY21wIGV4cGVjdCBhY3R1YWwKKykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC11cmwgLS1kZWxldGUgYmJiJyAnCisoCisJZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIHNvbWVyZW1vdGUgYmJiICYmCisJZWNobyAiWVlZIiA+ZXhwZWN0ICYmCisJZWNobyBiYXogPj5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS5wdXNodXJsID5hY3R1YWwgJiYKKwllY2hvICJZWVkiID4+YWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUudXJsID4+YWN0dWFsICYmCisJY21wIGV4cGVjdCBhY3R1YWwKKykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC11cmwgLS1kZWxldGUgYmF6JyAnCisoCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIHNvbWVyZW1vdGUgYmF6ICYmCisJZWNobyAiWVlZIiA+ZXhwZWN0ICYmCisJZWNobyBiYXogPj5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS5wdXNodXJsID5hY3R1YWwgJiYKKwllY2hvICJZWVkiID4+YWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUudXJsID4+YWN0dWFsICYmCisJY21wIGV4cGVjdCBhY3R1YWwKKykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC11cmwgLS1hZGQgY2NjJyAnCisoCisJZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIHNvbWVyZW1vdGUgY2NjICYmCisJZWNobyAiWVlZIiA+ZXhwZWN0ICYmCisJZWNobyBiYXogPj5leHBlY3QgJiYKKwllY2hvIGNjYyA+PmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnB1c2h1cmwgPmFjdHVhbCAmJgorCWVjaG8gIllZWSIgPj5hY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS51cmwgPj5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSBiYXonICcKKygKKwlnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgc29tZXJlbW90ZSBiYXogJiYKKwllY2hvICJZWVkiID5leHBlY3QgJiYKKwllY2hvIGNjYyA+PmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnB1c2h1cmwgPmFjdHVhbCAmJgorCWVjaG8gIllZWSIgPj5hY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS51cmwgPj5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MDYtcmVtb3RlLWdyb3Vwcy5zaCBiL3QvdDU1MDYtcmVtb3RlLWdyb3Vwcy5zaAppbmRleCAyYTE4MDZiLi5iN2I3ZGRhIDEwMDc1NQotLS0gYS90L3Q1NTA2LXJlbW90ZS1ncm91cHMuc2gKKysrIGIvdC90NTUwNi1yZW1vdGUtZ3JvdXBzLnNoCkBAIC01MSw3ICs1MSw3IEBACiAJISByZXBvX2ZldGNoZWQgdHdvCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0aW5nIGdyb3VwIHVwZGF0ZXMgYWxsIG1lbWJlcnMnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0aW5nIGdyb3VwIHVwZGF0ZXMgYWxsIG1lbWJlcnMgKHJlbW90ZSB1cGRhdGUpJyAnCiAJbWFyayBncm91cC1hbGwgJiYKIAl1cGRhdGVfcmVwb3MgJiYKIAlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZXMuYWxsIG9uZSAmJgpAQCAtNjEsNyArNjEsMTUgQEAKIAlyZXBvX2ZldGNoZWQgdHdvCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0aW5nIGdyb3VwIGRvZXMgbm90IHVwZGF0ZSBub24tbWVtYmVycycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRpbmcgZ3JvdXAgdXBkYXRlcyBhbGwgbWVtYmVycyAoZmV0Y2gpJyAnCisJbWFyayBmZXRjaC1ncm91cC1hbGwgJiYKKwl1cGRhdGVfcmVwb3MgJiYKKwlnaXQgZmV0Y2ggYWxsICYmCisJcmVwb19mZXRjaGVkIG9uZSAmJgorCXJlcG9fZmV0Y2hlZCB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRpbmcgZ3JvdXAgZG9lcyBub3QgdXBkYXRlIG5vbi1tZW1iZXJzIChyZW1vdGUgdXBkYXRlKScgJwogCW1hcmsgZ3JvdXAtc29tZSAmJgogCXVwZGF0ZV9yZXBvcyAmJgogCWdpdCBjb25maWcgLS1hZGQgcmVtb3Rlcy5zb21lIG9uZSAmJgpAQCAtNzAsNiArNzgsMTUgQEAKIAkhIHJlcG9fZmV0Y2hlZCB0d28KICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRpbmcgZ3JvdXAgZG9lcyBub3QgdXBkYXRlIG5vbi1tZW1iZXJzIChmZXRjaCknICcKKwltYXJrIGZldGNoLWdyb3VwLXNvbWUgJiYKKwl1cGRhdGVfcmVwb3MgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZXMuc29tZSBvbmUgJiYKKwlnaXQgcmVtb3RlIHVwZGF0ZSBzb21lICYmCisJcmVwb19mZXRjaGVkIG9uZSAmJgorCSEgcmVwb19mZXRjaGVkIHR3bworJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGluZyByZW1vdGUgbmFtZSB1cGRhdGVzIHRoYXQgcmVtb3RlJyAnCiAJbWFyayByZW1vdGUtbmFtZSAmJgogCXVwZGF0ZV9yZXBvcyAmJgpkaWZmIC0tZ2l0IGEvdC90NTUxMC1mZXRjaC5zaCBiL3QvdDU1MTAtZmV0Y2guc2gKaW5kZXggZDEzYzgwNi4uMTY5YWYxZSAxMDA3NTUKLS0tIGEvdC90NTUxMC1mZXRjaC5zaAorKysgYi90L3Q1NTEwLWZldGNoLnNoCkBAIC0zNDEsNCArMzQxLDE1IEBACiAKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAic2hvdWxkIGJlIGFibGUgdG8gZmV0Y2ggd2l0aCBkdXBsaWNhdGUgcmVmc3BlY3MiICcKKyAgICAgICAgbWtkaXIgZHVwcyAmJgorICAgICAgICBjZCBkdXBzICYmCisgICAgICAgIGdpdCBpbml0ICYmCisgICAgICAgIGdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgdGhyZWUgJiYKKyAgICAgICAgZ2l0IGNvbmZpZyByZW1vdGUudGhyZWUudXJsIC4uL3RocmVlLy5naXQgJiYKKyAgICAgICAgZ2l0IGNvbmZpZyByZW1vdGUudGhyZWUuZmV0Y2ggK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyogJiYKKyAgICAgICAgZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUudGhyZWUuZmV0Y2ggK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyogJiYKKyAgICAgICAgZ2l0IGZldGNoIHRocmVlCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUxNC1mZXRjaC1tdWx0aXBsZS5zaCBiL3QvdDU1MTQtZmV0Y2gtbXVsdGlwbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjczNzMzMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTQtZmV0Y2gtbXVsdGlwbGUuc2gKQEAgLTAsMCArMSwxNTQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdmZXRjaCAtLWFsbCB3b3JrcyBjb3JyZWN0bHknCisKKy4gLi90ZXN0LWxpYi5zaAorCitzZXR1cF9yZXBvc2l0b3J5ICgpIHsKKwlta2RpciAiJDEiICYmICgKKwljZCAiJDEiICYmCisJZ2l0IGluaXQgJiYKKwk+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIkluaXRpYWwiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgJiYKKwk+ZWxpZiAmJgorCWdpdCBhZGQgZWxpZiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIlNlY29uZCIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlzZXR1cF9yZXBvc2l0b3J5IG9uZSAmJgorCXNldHVwX3JlcG9zaXRvcnkgdHdvICYmCisJKAorCQljZCB0d28gJiYgZ2l0IGJyYW5jaCBhbm90aGVyCisJKSAmJgorCWdpdCBjbG9uZSAtLW1pcnJvciB0d28gdGhyZWUKKwlnaXQgY2xvbmUgb25lIHRlc3QKKycKKworY2F0ID4gdGVzdC9leHBlY3QgPDwgRU9GCisgIG9uZS9tYXN0ZXIKKyAgb25lL3NpZGUKKyAgb3JpZ2luL0hFQUQgLT4gb3JpZ2luL21hc3RlcgorICBvcmlnaW4vbWFzdGVyCisgIG9yaWdpbi9zaWRlCisgIHRocmVlL2Fub3RoZXIKKyAgdGhyZWUvbWFzdGVyCisgIHRocmVlL3NpZGUKKyAgdHdvL2Fub3RoZXIKKyAgdHdvL21hc3RlcgorICB0d28vc2lkZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBmZXRjaCAtLWFsbCcgJworCShjZCB0ZXN0ICYmCisJIGdpdCByZW1vdGUgYWRkIG9uZSAuLi9vbmUgJiYKKwkgZ2l0IHJlbW90ZSBhZGQgdHdvIC4uL3R3byAmJgorCSBnaXQgcmVtb3RlIGFkZCB0aHJlZSAuLi90aHJlZSAmJgorCSBnaXQgZmV0Y2ggLS1hbGwgJiYKKwkgZ2l0IGJyYW5jaCAtciA+IG91dHB1dCAmJgorCSB0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZmV0Y2ggLS1hbGwgc2hvdWxkIGNvbnRpbnVlIGlmIGEgcmVtb3RlIGhhcyBlcnJvcnMnICcKKwkoZ2l0IGNsb25lIG9uZSB0ZXN0MiAmJgorCSBjZCB0ZXN0MiAmJgorCSBnaXQgcmVtb3RlIGFkZCBiYWQgLi4vbm9uLWV4aXN0aW5nICYmCisJIGdpdCByZW1vdGUgYWRkIG9uZSAuLi9vbmUgJiYKKwkgZ2l0IHJlbW90ZSBhZGQgdHdvIC4uL3R3byAmJgorCSBnaXQgcmVtb3RlIGFkZCB0aHJlZSAuLi90aHJlZSAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggLS1hbGwgJiYKKwkgZ2l0IGJyYW5jaCAtciA+IG91dHB1dCAmJgorCSB0ZXN0X2NtcCAuLi90ZXN0L2V4cGVjdCBvdXRwdXQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBmZXRjaCAtLWFsbCBkb2VzIG5vdCBhbGxvdyBub24tb3B0aW9uIGFyZ3VtZW50cycgJworCShjZCB0ZXN0ICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaCAtLWFsbCBvcmlnaW4gJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoIC0tYWxsIG9yaWdpbiBtYXN0ZXIpCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKKyAgb3JpZ2luL0hFQUQgLT4gb3JpZ2luL21hc3RlcgorICBvcmlnaW4vbWFzdGVyCisgIG9yaWdpbi9zaWRlCisgIHRocmVlL2Fub3RoZXIKKyAgdGhyZWUvbWFzdGVyCisgIHRocmVlL3NpZGUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZmV0Y2ggLS1tdWx0aXBsZSAoYnV0IG9ubHkgb25lIHJlbW90ZSknICcKKwkoZ2l0IGNsb25lIG9uZSB0ZXN0MyAmJgorCSBjZCB0ZXN0MyAmJgorCSBnaXQgcmVtb3RlIGFkZCB0aHJlZSAuLi90aHJlZSAmJgorCSBnaXQgZmV0Y2ggLS1tdWx0aXBsZSB0aHJlZSAmJgorCSBnaXQgYnJhbmNoIC1yID4gb3V0cHV0ICYmCisJIHRlc3RfY21wIC4uL2V4cGVjdCBvdXRwdXQpCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKKyAgb25lL21hc3RlcgorICBvbmUvc2lkZQorICB0d28vYW5vdGhlcgorICB0d28vbWFzdGVyCisgIHR3by9zaWRlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGZldGNoIC0tbXVsdGlwbGUgKHR3byByZW1vdGVzKScgJworCShnaXQgY2xvbmUgb25lIHRlc3Q0ICYmCisJIGNkIHRlc3Q0ICYmCisJIGdpdCByZW1vdGUgcm0gb3JpZ2luICYmCisJIGdpdCByZW1vdGUgYWRkIG9uZSAuLi9vbmUgJiYKKwkgZ2l0IHJlbW90ZSBhZGQgdHdvIC4uL3R3byAmJgorCSBnaXQgZmV0Y2ggLS1tdWx0aXBsZSBvbmUgdHdvICYmCisJIGdpdCBicmFuY2ggLXIgPiBvdXRwdXQgJiYKKwkgdGVzdF9jbXAgLi4vZXhwZWN0IG91dHB1dCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGZldGNoIC0tbXVsdGlwbGUgKGJhZCByZW1vdGUgbmFtZXMpJyAnCisJKGNkIHRlc3Q0ICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaCAtLW11bHRpcGxlIGZvdXIpCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGZldGNoIC0tYWxsIChza2lwRmV0Y2hBbGwpJyAnCisJKGNkIHRlc3Q0ICYmCisJIGZvciBiIGluICQoZ2l0IGJyYW5jaCAtcikKKwkgZG8KKwkJZ2l0IGJyYW5jaCAtciAtZCAkYiB8fCBicmVhaworCSBkb25lICYmCisJIGdpdCByZW1vdGUgYWRkIHRocmVlIC4uL3RocmVlICYmCisJIGdpdCBjb25maWcgcmVtb3RlLnRocmVlLnNraXBGZXRjaEFsbCB0cnVlICYmCisJIGdpdCBmZXRjaCAtLWFsbCAmJgorCSBnaXQgYnJhbmNoIC1yID4gb3V0cHV0ICYmCisJIHRlc3RfY21wIC4uL2V4cGVjdCBvdXRwdXQpCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKKyAgb25lL21hc3RlcgorICBvbmUvc2lkZQorICB0aHJlZS9hbm90aGVyCisgIHRocmVlL21hc3RlcgorICB0aHJlZS9zaWRlCisgIHR3by9hbm90aGVyCisgIHR3by9tYXN0ZXIKKyAgdHdvL3NpZGUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZmV0Y2ggLS1tdWx0aXBsZSAoaWdub3Jpbmcgc2tpcEZldGNoQWxsKScgJworCShjZCB0ZXN0NCAmJgorCSBmb3IgYiBpbiAkKGdpdCBicmFuY2ggLXIpCisJIGRvCisJCWdpdCBicmFuY2ggLXIgLWQgJGIgfHwgYnJlYWsKKwkgZG9uZSAmJgorCSBnaXQgZmV0Y2ggLS1tdWx0aXBsZSBvbmUgdHdvIHRocmVlICYmCisJIGdpdCBicmFuY2ggLXIgPiBvdXRwdXQgJiYKKwkgdGVzdF9jbXAgLi4vZXhwZWN0IG91dHB1dCkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTE2LWZldGNoLXB1c2guc2ggYi90L3Q1NTE2LWZldGNoLXB1c2guc2gKaW5kZXggODk2NDllNy4uMGYwNGIyZSAxMDA3NTUKLS0tIGEvdC90NTUxNi1mZXRjaC1wdXNoLnNoCisrKyBiL3QvdDU1MTYtZmV0Y2gtcHVzaC5zaApAQCAtMTIsNiArMTIsNyBAQAogCSgKIAkJY2QgdGVzdHJlcG8gJiYKIAkJZ2l0IGluaXQgJiYKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHdhcm4gJiYKIAkJbXYgLmdpdC9ob29rcyAuZ2l0L2hvb2tzLWRpc2FibGVkCiAJKQogfQpAQCAtMTIyLDYgKzEyMywyMyBAQAogCSkKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggd2l0aCBwdXNoSW5zdGVhZE9mIChzaG91bGQgbm90IHJld3JpdGUpJyAnCisJbWtfZW1wdHkgJiYKKwkoCisJCVRSQVNIPSQocHdkKS8gJiYKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IGNvbmZpZyAidXJsLnRyYXNoLy5wdXNoSW5zdGVhZE9mIiAiJFRSQVNIIiAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS51cC51cmwgIiRUUkFTSC4iICYmCisJCWdpdCBjb25maWcgcmVtb3RlLnVwLmZldGNoICJyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIiAmJgorCQlnaXQgZmV0Y2ggdXAgJiYKKworCQlyPSQoZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyKSAmJgorCQl0ZXN0ICJ6JHIiID0gInokdGhlX2NvbW1pdCIgJiYKKworCQl0ZXN0IDEgPSAkKGdpdCBmb3ItZWFjaC1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbiB8IHdjIC1sKQorCSkKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRob3V0IHdpbGRjYXJkJyAnCiAJbWtfZW1wdHkgJiYKIApAQCAtMTYyLDYgKzE4MCwzNiBAQAogCSkKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIHB1c2hJbnN0ZWFkT2YnICcKKwlta19lbXB0eSAmJgorCVRSQVNIPSIkKHB3ZCkvIiAmJgorCWdpdCBjb25maWcgInVybC4kVFJBU0gucHVzaEluc3RlYWRPZiIgdHJhc2gvICYmCisJZ2l0IHB1c2ggdHJhc2gvdGVzdHJlcG8gcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCXI9JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIpICYmCisJCXRlc3QgInokciIgPSAieiR0aGVfY29tbWl0IiAmJgorCisJCXRlc3QgMSA9ICQoZ2l0IGZvci1lYWNoLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luIHwgd2MgLWwpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggcHVzaEluc3RlYWRPZiBhbmQgZXhwbGljaXQgcHVzaHVybCAocHVzaEluc3RlYWRPZiBzaG91bGQgbm90IHJld3JpdGUpJyAnCisJbWtfZW1wdHkgJiYKKwlUUkFTSD0iJChwd2QpLyIgJiYKKwlnaXQgY29uZmlnICJ1cmwudHJhc2gyLy5wdXNoSW5zdGVhZE9mIiB0cmFzaC8gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5yLnVybCB0cmFzaC93cm9uZyAmJgorCWdpdCBjb25maWcgcmVtb3RlLnIucHVzaHVybCAiJFRSQVNIL3Rlc3RyZXBvIiAmJgorCWdpdCBwdXNoIHIgcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCXI9JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIpICYmCisJCXRlc3QgInokciIgPSAieiR0aGVfY29tbWl0IiAmJgorCisJCXRlc3QgMSA9ICQoZ2l0IGZvci1lYWNoLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luIHwgd2MgLWwpCisJKQorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggbWF0Y2hpbmcgaGVhZHMnICcKIAogCW1rX3Rlc3QgaGVhZHMvbWFzdGVyICYmCkBAIC00MTksNiArNDY3LDE5IEBACiBnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gcmVtb3RlLnRoZXJlCiBnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gYnJhbmNoLm1hc3RlcgogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggY29uZmlnIHJlbW90ZS4qLnB1c2h1cmwnICcKKworCW1rX3Rlc3QgaGVhZHMvbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjb25maWcgcmVtb3RlLnRoZXJlLnVybCB0ZXN0MnJlcG8gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS50aGVyZS5wdXNodXJsIHRlc3RyZXBvICYmCisJZ2l0IHB1c2ggdGhlcmUgJiYKKwljaGVja19wdXNoX3Jlc3VsdCAkdGhlX2NvbW1pdCBoZWFkcy9tYXN0ZXIKKycKKworIyBjbGVhbiB1cCB0aGUgY3J1ZnQgbGVmdCB3aXRoIHRoZSBwcmV2aW91cyBvbmUKK2dpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiByZW1vdGUudGhlcmUKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIGRyeS1ydW4nICcKIAogCW1rX3Rlc3QgaGVhZHMvbWFzdGVyICYmCkBAIC00ODYsNiArNTQ3LDMyIEBACiAKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsb3cgZGVsZXRpbmcgYSByZWYgdXNpbmcgLS1kZWxldGUnICcKKwlta190ZXN0IGhlYWRzL21hc3RlciAmJgorCShjZCB0ZXN0cmVwbyAmJiBnaXQgY29uZmlnIHJlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnQgd2FybikgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyAtLWRlbGV0ZSBtYXN0ZXIgJiYKKwkoY2QgdGVzdHJlcG8gJiYgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsb3cgZGVsZXRpbmcgYSB0YWcgdXNpbmcgLS1kZWxldGUnICcKKwlta190ZXN0IGhlYWRzL21hc3RlciAmJgorCWdpdCB0YWcgLWEgLW0gZHVtbXlfbWVzc2FnZSBkZWx0YWcgaGVhZHMvbWFzdGVyICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gLS10YWdzICYmCisJKGNkIHRlc3RyZXBvICYmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgcmVmcy90YWdzL2RlbHRhZykgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyAtLWRlbGV0ZSB0YWcgZGVsdGFnICYmCisJKGNkIHRlc3RyZXBvICYmIHRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy90YWdzL2RlbHRhZykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtLWRlbGV0ZSB3aXRob3V0IGFyZ3MgYWJvcnRzJyAnCisJbWtfdGVzdCBoZWFkcy9tYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCB0ZXN0cmVwbyAtLWRlbGV0ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tZGVsZXRlIHJlZnVzZXMgc3JjOmRlc3QgcmVmc3BlY3MnICcKKwlta190ZXN0IGhlYWRzL21hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIHRlc3RyZXBvIC0tZGVsZXRlIG1hc3Rlcjpmb28KKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnd2FybiBvbiBwdXNoIHRvIEhFQUQgb2Ygbm9uLWJhcmUgcmVwb3NpdG9yeScgJwogCW1rX3Rlc3QgaGVhZHMvbWFzdGVyCiAJKGNkIHRlc3RyZXBvICYmCmRpZmYgLS1naXQgYS90L3Q1NTE3LXB1c2gtbWlycm9yLnNoIGIvdC90NTUxNy1wdXNoLW1pcnJvci5zaAppbmRleCBlYTQ5ZGVkLi5lMmFkMjYwIDEwMDc1NQotLS0gYS90L3Q1NTE3LXB1c2gtbWlycm9yLnNoCisrKyBiL3QvdDU1MTctcHVzaC1taXJyb3Iuc2gKQEAgLTE5LDcgKzE5LDggQEAKIAlta2RpciBtaXJyb3IgJiYKIAkoCiAJCWNkIG1pcnJvciAmJgotCQlnaXQgaW5pdAorCQlnaXQgaW5pdCAmJgorCQlnaXQgY29uZmlnIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggd2FybgogCSkgJiYKIAlta2RpciBtYXN0ZXIgJiYKIAkoCmRpZmYgLS1naXQgYS90L3Q1NTE4LWZldGNoLWV4aXQtc3RhdHVzLnNoIGIvdC90NTUxOC1mZXRjaC1leGl0LXN0YXR1cy5zaAppbmRleCBjNmJjNjVmLi5jMjA2MGJiIDEwMDc1NQotLS0gYS90L3Q1NTE4LWZldGNoLWV4aXQtc3RhdHVzLnNoCisrKyBiL3QvdDU1MTgtZmV0Y2gtZXhpdC1zdGF0dXMuc2gKQEAgLTIyLDcgKzIyLDcgQEAKIAlnaXQgY29tbWl0IC1hIC1tIG5leHQKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uIGZhc3QgZm9yd2FyZCBmZXRjaCcgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uLWZhc3QtZm9yd2FyZCBmZXRjaCcgJwogCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoIC4gbWFzdGVyOnNpZGUKIApkaWZmIC0tZ2l0IGEvdC90NTUyMC1wdWxsLnNoIGIvdC90NTUyMC1wdWxsLnNoCmluZGV4IDcyNTc3MWYuLmRkMmVlODQgMTAwNzU1Ci0tLSBhL3QvdDU1MjAtcHVsbC5zaAorKysgYi90L3Q1NTIwLXB1bGwuc2gKQEAgLTkyLDIwICs5Miw0NyBAQAogCiAJZ2l0IHJlbW90ZSBhZGQgLWYgbWUgLiAmJgogCWdpdCBjaGVja291dCBjb3B5ICYmCisJZ2l0IHRhZyBjb3B5LW9yaWcgJiYKIAlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCiAJZWNobyBjb25mbGljdGluZyBtb2RpZmljYXRpb24gPiBmaWxlICYmCiAJZ2l0IGNvbW1pdCAtbSBjb25mbGljdCBmaWxlICYmCiAJZ2l0IGNoZWNrb3V0IHRvLXJlYmFzZSAmJgogCWVjaG8gZmlsZSA+IGZpbGUyICYmCiAJZ2l0IGNvbW1pdCAtbSB0by1yZWJhc2UgZmlsZTIgJiYKKwlnaXQgdGFnIHRvLXJlYmFzZS1vcmlnICYmCiAJZ2l0IHB1bGwgLS1yZWJhc2UgbWUgY29weSAmJgogCXRlc3QgImNvbmZsaWN0aW5nIG1vZGlmaWNhdGlvbiIgPSAiJChjYXQgZmlsZSkiICYmCiAJdGVzdCBmaWxlID0gJChjYXQgZmlsZTIpCiAKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZWJhc2Ugd2l0aCByZWJhc2VkIGRlZmF1bHQgdXBzdHJlYW0nICcKKworCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9tZS9jb3B5IGNvcHktb3JpZyAmJgorCWdpdCBjaGVja291dCAtLXRyYWNrIC1iIHRvLXJlYmFzZTIgbWUvY29weSAmJgorCWdpdCByZXNldCAtLWhhcmQgdG8tcmViYXNlLW9yaWcgJiYKKwlnaXQgcHVsbCAtLXJlYmFzZSAmJgorCXRlc3QgImNvbmZsaWN0aW5nIG1vZGlmaWNhdGlvbiIgPSAiJChjYXQgZmlsZSkiICYmCisJdGVzdCBmaWxlID0gJChjYXQgZmlsZTIpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlZCB1cHN0cmVhbSArIGZldGNoICsgcHVsbCAtLXJlYmFzZScgJworCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL21lL2NvcHkgY29weS1vcmlnICYmCisJZ2l0IHJlc2V0IC0taGFyZCB0by1yZWJhc2Utb3JpZyAmJgorCWdpdCBjaGVja291dCAtLXRyYWNrIC1iIHRvLXJlYmFzZTMgbWUvY29weSAmJgorCWdpdCByZXNldCAtLWhhcmQgdG8tcmViYXNlLW9yaWcgJiYKKwlnaXQgZmV0Y2ggJiYKKwlnaXQgcHVsbCAtLXJlYmFzZSAmJgorCXRlc3QgImNvbmZsaWN0aW5nIG1vZGlmaWNhdGlvbiIgPSAiJChjYXQgZmlsZSkiICYmCisJdGVzdCBmaWxlID0gIiQoY2F0IGZpbGUyKSIKKworJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tcmViYXNlIGRpZXMgZWFybHkgd2l0aCBkaXJ0eSB3b3JraW5nIGRpcmVjdG9yeScgJwogCisJZ2l0IGNoZWNrb3V0IHRvLXJlYmFzZSAmJgogCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9tZS9jb3B5IGNvcHleICYmCiAJQ09QWT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWUvY29weSkgJiYKIAlnaXQgcmViYXNlIC0tb250byAkQ09QWSBjb3B5ICYmCkBAIC0xMjIsNCArMTQ5LDE1IEBACiAKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCAtLXJlYmFzZSB3b3JrcyBvbiBicmFuY2ggeWV0IHRvIGJlIGJvcm4nICcKKwlnaXQgcmV2LXBhcnNlIG1hc3RlciA+ZXhwZWN0ICYmCisJbWtkaXIgZW1wdHlfcmVwbyAmJgorCShjZCBlbXB0eV9yZXBvICYmCisJIGdpdCBpbml0ICYmCisJIGdpdCBwdWxsIC0tcmViYXNlIC4uIG1hc3RlciAmJgorCSBnaXQgcmV2LXBhcnNlIEhFQUQgPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUyMS1wdWxsLW9wdGlvbnMuc2ggYi90L3Q1NTIxLXB1bGwtb3B0aW9ucy5zaAppbmRleCA4M2UyZThhLi4xYjA2NjkxIDEwMDc1NQotLS0gYS90L3Q1NTIxLXB1bGwtb3B0aW9ucy5zaAorKysgYi90L3Q1NTIxLXB1bGwtb3B0aW9ucy5zaApAQCAtNCw4ICs0LDYgQEAKIAogLiAuL3Rlc3QtbGliLnNoCiAKLUQ9YHB3ZGAKLQogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKIAlta2RpciBwYXJlbnQgJiYKIAkoY2QgcGFyZW50ICYmIGdpdCBpbml0ICYmCkBAIC0xMyw0OCArMTEsODMgQEAKIAkgZ2l0IGNvbW1pdCAtbSBvbmUpCiAnCiAKLWNkICIkRCIKLQogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwgLXEnICcKIAlta2RpciBjbG9uZWRxICYmCi0JY2QgY2xvbmVkcSAmJgotCWdpdCBwdWxsIC1xICIkRC9wYXJlbnQiID5vdXQgMj5lcnIgJiYKLQl0ZXN0ICEgLXMgb3V0CisJKGNkIGNsb25lZHEgJiYgZ2l0IGluaXQgJiYKKwlnaXQgcHVsbCAtcSAiLi4vcGFyZW50IiA+b3V0IDI+ZXJyICYmCisJdGVzdCAhIC1zIGVyciAmJgorCXRlc3QgISAtcyBvdXQpCiAnCiAKLWNkICIkRCIKLQogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwnICcKIAlta2RpciBjbG9uZWQgJiYKLQljZCBjbG9uZWQgJiYKLQlnaXQgcHVsbCAiJEQvcGFyZW50IiA+b3V0IDI+ZXJyICYmCi0JdGVzdCAtcyBvdXQKKwkoY2QgY2xvbmVkICYmIGdpdCBpbml0ICYmCisJZ2l0IHB1bGwgIi4uL3BhcmVudCIgPm91dCAyPmVyciAmJgorCXRlc3QgLXMgZXJyICYmCisJdGVzdCAhIC1zIG91dCkKICcKLWNkICIkRCIKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwgLXYnICcKIAlta2RpciBjbG9uZWR2ICYmCi0JY2QgY2xvbmVkdiAmJgotCWdpdCBwdWxsIC12ICIkRC9wYXJlbnQiID5vdXQgMj5lcnIgJiYKLQl0ZXN0IC1zIG91dAorCShjZCBjbG9uZWR2ICYmIGdpdCBpbml0ICYmCisJZ2l0IHB1bGwgLXYgIi4uL3BhcmVudCIgPm91dCAyPmVyciAmJgorCXRlc3QgLXMgZXJyICYmCisJdGVzdCAhIC1zIG91dCkKICcKIAotY2QgIiREIgotCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtdiAtcScgJwogCW1rZGlyIGNsb25lZHZxICYmCi0JY2QgY2xvbmVkdnEgJiYKLQlnaXQgcHVsbCAtdiAtcSAiJEQvcGFyZW50IiA+b3V0IDI+ZXJyICYmCi0JdGVzdCAhIC1zIG91dAorCShjZCBjbG9uZWR2cSAmJiBnaXQgaW5pdCAmJgorCWdpdCBwdWxsIC12IC1xICIuLi9wYXJlbnQiID5vdXQgMj5lcnIgJiYKKwl0ZXN0ICEgLXMgb3V0ICYmCisJdGVzdCAhIC1zIGVycikKICcKIAotY2QgIiREIgotCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtcSAtdicgJwogCW1rZGlyIGNsb25lZHF2ICYmCi0JY2QgY2xvbmVkcXYgJiYKLQlnaXQgcHVsbCAtcSAtdiAiJEQvcGFyZW50IiA+b3V0IDI+ZXJyICYmCi0JdGVzdCAtcyBvdXQKKwkoY2QgY2xvbmVkcXYgJiYgZ2l0IGluaXQgJiYKKwlnaXQgcHVsbCAtcSAtdiAiLi4vcGFyZW50IiA+b3V0IDI+ZXJyICYmCisJdGVzdCAhIC1zIG91dCAmJgorCXRlc3QgLXMgZXJyKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtLWZvcmNlJyAnCisJbWtkaXIgY2xvbmVkb2xkc3R5bGUgJiYKKwkoY2QgY2xvbmVkb2xkc3R5bGUgJiYgZ2l0IGluaXQgJiYKKwljYXQgPj4uZ2l0L2NvbmZpZyA8PC1cRU9GICYmCisJW3JlbW90ZSAib25lIl0KKwkJdXJsID0gLi4vcGFyZW50CisJCWZldGNoID0gcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9taXJyb3IKKwlbcmVtb3RlICJ0d28iXQorCQl1cmwgPSAuLi9wYXJlbnQKKwkJZmV0Y2ggPSByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL29yaWdpbgorCVticmFuY2ggIm1hc3RlciJdCisJCXJlbW90ZSA9IHR3bworCQltZXJnZSA9IHJlZnMvaGVhZHMvbWFzdGVyCisJRU9GCisJZ2l0IHB1bGwgdHdvICYmCisJdGVzdF9jb21taXQgQSAmJgorCWdpdCBicmFuY2ggLWYgb3JpZ2luICYmCisJZ2l0IHB1bGwgLS1hbGwgLS1mb3JjZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwgLS1hbGwnICcKKwlta2RpciBjbG9uZWRtdWx0aSAmJgorCShjZCBjbG9uZWRtdWx0aSAmJiBnaXQgaW5pdCAmJgorCWNhdCA+Pi5naXQvY29uZmlnIDw8LVxFT0YgJiYKKwlbcmVtb3RlICJvbmUiXQorCQl1cmwgPSAuLi9wYXJlbnQKKwkJZmV0Y2ggPSByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29uZS8qCisJW3JlbW90ZSAidHdvIl0KKwkJdXJsID0gLi4vcGFyZW50CisJCWZldGNoID0gcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy90d28vKgorCVticmFuY2ggIm1hc3RlciJdCisJCXJlbW90ZSA9IG9uZQorCQltZXJnZSA9IHJlZnMvaGVhZHMvbWFzdGVyCisJRU9GCisJZ2l0IHB1bGwgLS1hbGwKKwkpCiAnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUyMi1wdWxsLXN5bWxpbmsuc2ggYi90L3Q1NTIyLXB1bGwtc3ltbGluay5zaAppbmRleCA4NmJiZDdkLi43MjA2ODE3IDEwMDc1NQotLS0gYS90L3Q1NTIyLXB1bGwtc3ltbGluay5zaAorKysgYi90L3Q1NTIyLXB1bGwtc3ltbGluay5zaApAQCAtMjAsMTMgKzIwLDE5IEBACiAjCiAjIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBpcyBzdWJkaXItbGluay4KIAotbWtkaXIgc3ViZGlyCi1lY2hvIGZpbGUgPnN1YmRpci9maWxlCi1naXQgYWRkIHN1YmRpci9maWxlCi1naXQgY29tbWl0IC1xIC1tIGZpbGUKLWdpdCBjbG9uZSAtcSAuIGNsb25lLXJlcG8KLWxuIC1zIGNsb25lLXJlcG8vc3ViZGlyLyBzdWJkaXItbGluawotCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlta2RpciBzdWJkaXIgJiYKKwllY2hvIGZpbGUgPnN1YmRpci9maWxlICYmCisJZ2l0IGFkZCBzdWJkaXIvZmlsZSAmJgorCWdpdCBjb21taXQgLXEgLW0gZmlsZSAmJgorCWdpdCBjbG9uZSAtcSAuIGNsb25lLXJlcG8gJiYKKwlsbiAtcyBjbG9uZS1yZXBvL3N1YmRpci8gc3ViZGlyLWxpbmsgJiYKKwkoCisJCWNkIGNsb25lLXJlcG8gJiYKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHdhcm4KKwkpICYmCisJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHdhcm4KKycKIAogIyBEZW1vbnN0cmF0ZSB0aGF0IHRoaW5ncyB3b3JrIGlmIHdlIGp1c3QgYXZvaWQgdGhlIHN5bWxpbmsKICMKZGlmZiAtLWdpdCBhL3QvdDU1MjMtcHVzaC11cHN0cmVhbS5zaCBiL3QvdDU1MjMtcHVzaC11cHN0cmVhbS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMGRhNzA3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUyMy1wdXNoLXVwc3RyZWFtLnNoCkBAIC0wLDAgKzEsNjkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwdXNoIHdpdGggLS1zZXQtdXBzdHJlYW0nCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYmFyZSBwYXJlbnQnICcKKwlnaXQgaW5pdCAtLWJhcmUgcGFyZW50ICYmCisJZ2l0IHJlbW90ZSBhZGQgdXBzdHJlYW0gcGFyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGxvY2FsIGNvbW1pdCcgJworCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gb25lCisnCisKK2NoZWNrX2NvbmZpZygpIHsKKwkoZWNobyAkMjsgZWNobyAkMykgPmV4cGVjdC4kMQorCShnaXQgY29uZmlnIGJyYW5jaC4kMS5yZW1vdGUKKwkgZ2l0IGNvbmZpZyBicmFuY2guJDEubWVyZ2UpID5hY3R1YWwuJDEKKwl0ZXN0X2NtcCBleHBlY3QuJDEgYWN0dWFsLiQxCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLXUgbWFzdGVyOm1hc3RlcicgJworCWdpdCBwdXNoIC11IHVwc3RyZWFtIG1hc3RlcjptYXN0ZXIgJiYKKwljaGVja19jb25maWcgbWFzdGVyIHVwc3RyZWFtIHJlZnMvaGVhZHMvbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLXUgbWFzdGVyOm90aGVyJyAnCisJZ2l0IHB1c2ggLXUgdXBzdHJlYW0gbWFzdGVyOm90aGVyICYmCisJY2hlY2tfY29uZmlnIG1hc3RlciB1cHN0cmVhbSByZWZzL2hlYWRzL290aGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLXUgLS1kcnktcnVuIG1hc3RlcjpvdGhlclgnICcKKwlnaXQgcHVzaCAtdSAtLWRyeS1ydW4gdXBzdHJlYW0gbWFzdGVyOm90aGVyWCAmJgorCWNoZWNrX2NvbmZpZyBtYXN0ZXIgdXBzdHJlYW0gcmVmcy9oZWFkcy9vdGhlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC11IG1hc3RlcjI6bWFzdGVyMicgJworCWdpdCBicmFuY2ggbWFzdGVyMiAmJgorCWdpdCBwdXNoIC11IHVwc3RyZWFtIG1hc3RlcjI6bWFzdGVyMiAmJgorCWNoZWNrX2NvbmZpZyBtYXN0ZXIyIHVwc3RyZWFtIHJlZnMvaGVhZHMvbWFzdGVyMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC11IG1hc3RlcjI6b3RoZXIyJyAnCisJZ2l0IHB1c2ggLXUgdXBzdHJlYW0gbWFzdGVyMjpvdGhlcjIgJiYKKwljaGVja19jb25maWcgbWFzdGVyMiB1cHN0cmVhbSByZWZzL2hlYWRzL290aGVyMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC11IDptYXN0ZXIyJyAnCisJZ2l0IHB1c2ggLXUgdXBzdHJlYW0gOm1hc3RlcjIgJiYKKwljaGVja19jb25maWcgbWFzdGVyMiB1cHN0cmVhbSByZWZzL2hlYWRzL290aGVyMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC11IC0tYWxsJyAnCisJZ2l0IGJyYW5jaCBhbGwxICYmCisJZ2l0IGJyYW5jaCBhbGwyICYmCisJZ2l0IHB1c2ggLXUgLS1hbGwgJiYKKwljaGVja19jb25maWcgYWxsMSB1cHN0cmVhbSByZWZzL2hlYWRzL2FsbDEgJiYKKwljaGVja19jb25maWcgYWxsMiB1cHN0cmVhbSByZWZzL2hlYWRzL2FsbDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtdSBIRUFEJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGhlYWRicmFuY2ggJiYKKwlnaXQgcHVzaCAtdSB1cHN0cmVhbSBIRUFEICYmCisJY2hlY2tfY29uZmlnIGhlYWRicmFuY2ggdXBzdHJlYW0gcmVmcy9oZWFkcy9oZWFkYnJhbmNoCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUyNC1wdWxsLW1zZy5zaCBiL3QvdDU1MjQtcHVsbC1tc2cuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGNjY2VjYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MjQtcHVsbC1tc2cuc2gKQEAgLTAsMCArMSwzNSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwdWxsIG1lc3NhZ2UgZ2VuZXJhdGlvbicKKworLiAuL3Rlc3QtbGliLnNoCisKK2RvbGxhcj0nJERvbGxhcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9jb21taXQgaW5pdGlhbCBhZmlsZSBvcmlnaW5hbCAmJgorCWdpdCBjbG9uZSAuIGNsb25lZCAmJgorCSgKKwkJY2QgY2xvbmVkICYmCisJCWVjaG8gYWRkZWQgPmJmaWxlICYmCisJCWdpdCBhZGQgYmZpbGUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBiZmlsZSIKKwkpICYmCisJdGVzdF90aWNrICYmIHRlc3RfdGljayAmJgorCWVjaG8gIm9yaWdpbmFsICRkb2xsYXIiID5hZmlsZSAmJgorCWdpdCBhZGQgYWZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJkbyBub3QgY2xvYmJlciAkZG9sbGFyIHNpZ25zIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHB1bGwgJworKAorCWNkIGNsb25lZCAmJgorCWdpdCBwdWxsIC0tbG9nICYmCisJZ2l0IGxvZyAtMiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+cmVzdWx0ICYmCisJZ3JlcCBEb2xsYXIgcmVzdWx0CispCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUzMC11cGxvYWQtcGFjay1lcnJvci5zaCBiL3QvdDU1MzAtdXBsb2FkLXBhY2stZXJyb3Iuc2gKaW5kZXggZjUxMDJiOS4uYTY5NmI4NyAxMDA3NTUKLS0tIGEvdC90NTUzMC11cGxvYWQtcGFjay1lcnJvci5zaAorKysgYi90L3Q1NTMwLXVwbG9hZC1wYWNrLWVycm9yLnNoCkBAIC0zMCwxMSArMzAsMTIgQEAKIAl0ZXN0X211c3RfZmFpbCBnaXQgZnNjawogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGxvYWQtcGFjayBmYWlscyBkdWUgdG8gZXJyb3IgaW4gcGFjay1vYmplY3RzJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGxvYWQtcGFjayBmYWlscyBkdWUgdG8gZXJyb3IgaW4gcGFjay1vYmplY3RzIHBhY2tpbmcnICcKIAogCSEgZWNobyAiMDAzMndhbnQgJChnaXQgcmV2LXBhcnNlIEhFQUQpCiAwMDAwMDAwOWRvbmUKIDAwMDAiIHwgZ2l0IHVwbG9hZC1wYWNrIC4gPiAvZGV2L251bGwgMj4gb3V0cHV0LmVyciAmJgorCWdyZXAgInVuYWJsZSB0byByZWFkIiBvdXRwdXQuZXJyICYmCiAJZ3JlcCAicGFjay1vYmplY3RzIGRpZWQiIG91dHB1dC5lcnIKICcKIApAQCAtNTEsOSArNTIsMjEgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwbG9hZC1wYWNrIGZhaWxzIGR1ZSB0byBlcnJvciBpbiByZXYtbGlzdCcgJwogCiAJISBlY2hvICIwMDMyd2FudCAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKzAwMzRzaGFsbG93ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikwMDAwMDAwOWRvbmUKKzAwMDAiIHwgZ2l0IHVwbG9hZC1wYWNrIC4gPiAvZGV2L251bGwgMj4gb3V0cHV0LmVyciAmJgorCSMgcGFjay1vYmplY3RzIHN1cnZpdmVkCisJZ3JlcCAiVG90YWwuKiwgcmV1c2VkIiBvdXRwdXQuZXJyICYmCisJIyBidXQgdGhlcmUgd2FzIGFuIGVycm9yLCB3aGljaCBtdXN0IGhhdmUgYmVlbiBpbiByZXYtbGlzdAorCWdyZXAgImJhZCB0cmVlIG9iamVjdCIgb3V0cHV0LmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGxvYWQtcGFjayBmYWlscyBkdWUgdG8gZXJyb3IgaW4gcGFjay1vYmplY3RzIGVudW1lcmF0aW9uJyAnCisKKwkhIGVjaG8gIjAwMzJ3YW50ICQoZ2l0IHJldi1wYXJzZSBIRUFEKQogMDAwMDAwMDlkb25lCiAwMDAwIiB8IGdpdCB1cGxvYWQtcGFjayAuID4gL2Rldi9udWxsIDI+IG91dHB1dC5lcnIgJiYKLQlncmVwICJ3YWl0cGlkIChhc3luYykgZmFpbGVkIiBvdXRwdXQuZXJyCisJZ3JlcCAiYmFkIHRyZWUgb2JqZWN0IiBvdXRwdXQuZXJyICYmCisJZ3JlcCAicGFjay1vYmplY3RzIGRpZWQiIG91dHB1dC5lcnIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGVtcHR5IHJlcG9zaXRvcnknICcKZGlmZiAtLWdpdCBhL3QvdDU1MzEtZGVlcC1zdWJtb2R1bGUtcHVzaC5zaCBiL3QvdDU1MzEtZGVlcC1zdWJtb2R1bGUtcHVzaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NWQ4ZDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUzMS1kZWVwLXN1Ym1vZHVsZS1wdXNoLnNoCkBAIC0wLDAgKzEsMzUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd1bnBhY2stb2JqZWN0cycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCW1rZGlyIHB1Yi5naXQgJiYKKwlHSVRfRElSPXB1Yi5naXQgZ2l0IGluaXQgLS1iYXJlCisJR0lUX0RJUj1wdWIuZ2l0IGdpdCBjb25maWcgcmVjZWl2ZS5mc2Nrb2JqZWN0cyB0cnVlICYmCisJbWtkaXIgd29yayAmJgorCSgKKwkJY2Qgd29yayAmJgorCQlnaXQgaW5pdCAmJgorCQlta2RpciAtcCBnYXIvYmFnZSAmJgorCQkoCisJCQljZCBnYXIvYmFnZSAmJgorCQkJZ2l0IGluaXQgJiYKKwkJCT5qdW5rICYmCisJCQlnaXQgYWRkIGp1bmsgJiYKKwkJCWdpdCBjb21taXQgLW0gIkluaXRpYWwganVuayIKKwkJKSAmJgorCQlnaXQgYWRkIGdhci9iYWdlICYmCisJCWdpdCBjb21taXQgLW0gIkluaXRpYWwgc3VwZXJwcm9qZWN0IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBwdXNoICcKKwkoCisJCWNkIHdvcmsgJiYKKwkJZ2l0IHB1c2ggLi4vcHViLmdpdCBtYXN0ZXIKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTU0MC1odHRwLXB1c2guc2ggYi90L3Q1NTQwLWh0dHAtcHVzaC5zaAppbmRleCA1ZmU0NzllLi5iYjE4ZjhiIDEwMDc1NQotLS0gYS90L3Q1NTQwLWh0dHAtcHVzaC5zaAorKysgYi90L3Q1NTQwLWh0dHAtcHVzaC5zaApAQCAtMywyMyArMywyMiBAQAogIyBDb3B5cmlnaHQgKGMpIDIwMDggQ2xlbWVucyBCdWNoYWNoZXIgPGRyaXp6ZEBhb24uYXQ+CiAjCiAKLXRlc3RfZGVzY3JpcHRpb249J3Rlc3QgaHR0cC1wdXNoCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IFdlYkRBViBodHRwLXB1c2gKIAogVGhpcyB0ZXN0IHJ1bnMgdmFyaW91cyBzYW5pdHkgY2hlY2tzIG9uIGh0dHAtcHVzaC4nCiAKIC4gLi90ZXN0LWxpYi5zaAogCi1ST09UX1BBVEg9IiRQV0QiCi1MSUJfSFRUUERfREFWPXQKLUxJQl9IVFRQRF9QT1JUPSR7TElCX0hUVFBEX1BPUlQtJzU1NDAnfQotCiBpZiBnaXQgaHR0cC1wdXNoID4gL2Rldi9udWxsIDI+JjEgfHwgWyAkPyAtZXEgMTI4IF0KIHRoZW4KIAlzYXkgInNraXBwaW5nIHRlc3QsIFVTRV9DVVJMX01VTFRJIGlzIG5vdCBkZWZpbmVkIgogCXRlc3RfZG9uZQogZmkKIAorTElCX0hUVFBEX0RBVj10CitMSUJfSFRUUERfUE9SVD0ke0xJQl9IVFRQRF9QT1JULSc1NTQwJ30KIC4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWh0dHBkLnNoCitST09UX1BBVEg9IiRQV0QiCiBzdGFydF9odHRwZAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZW1vdGUgcmVwb3NpdG9yeScgJwpAQCAtMzYsMTYgKzM1LDE3IEBACiAJY2QgdGVzdF9yZXBvLmdpdCAmJgogCWdpdCAtLWJhcmUgdXBkYXRlLXNlcnZlci1pbmZvICYmCiAJbXYgaG9va3MvcG9zdC11cGRhdGUuc2FtcGxlIGhvb2tzL3Bvc3QtdXBkYXRlICYmCisJT1JJR19IRUFEPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgogCWNkIC0gJiYKIAltdiB0ZXN0X3JlcG8uZ2l0ICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSByZW1vdGUgcmVwb3NpdG9yeScgJwogCWNkICIkUk9PVF9QQVRIIiAmJgotCWdpdCBjbG9uZSAkSFRUUERfVVJML3Rlc3RfcmVwby5naXQgdGVzdF9yZXBvX2Nsb25lCisJZ2l0IGNsb25lICRIVFRQRF9VUkwvZHVtYi90ZXN0X3JlcG8uZ2l0IHRlc3RfcmVwb19jbG9uZQogJwogCi10ZXN0X2V4cGVjdF9mYWlsdXJlICdwdXNoIHRvIHJlbW90ZSByZXBvc2l0b3J5IHdpdGggcGFja2VkIHJlZnMnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdG8gcmVtb3RlIHJlcG9zaXRvcnkgd2l0aCBwYWNrZWQgcmVmcycgJwogCWNkICIkUk9PVF9QQVRIIi90ZXN0X3JlcG9fY2xvbmUgJiYKIAk6ID5wYXRoMiAmJgogCWdpdCBhZGQgcGF0aDIgJiYKQEAgLTU3LDE2ICs1Nyw1NiBAQAogCSB0ZXN0ICRIRUFEID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpKQogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcgcHVzaCB0byByZW1vdGUgcmVwb3NpdG9yeSB3aXRoIHVucGFja2VkIHJlZnMnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggYWxyZWFkeSB1cC10by1kYXRlJyAnCisJZ2l0IHB1c2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0byByZW1vdGUgcmVwb3NpdG9yeSB3aXRoIHVucGFja2VkIHJlZnMnICcKIAkoY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3Rlc3RfcmVwby5naXQgJiYKIAkgcm0gcGFja2VkLXJlZnMgJiYKLQkgZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgXAotCQkwYzk3M2FlOWJkNTE5MDJhMjg0NjZmMzg1MGI1NDNmYTY2YTZhYWY0KSAmJgorCSBnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL21hc3RlciAkT1JJR19IRUFEICYmCisJIGdpdCAtLWJhcmUgdXBkYXRlLXNlcnZlci1pbmZvKSAmJgogCWdpdCBwdXNoICYmCiAJKGNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi90ZXN0X3JlcG8uZ2l0ICYmCiAJIHRlc3QgJEhFQUQgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkpCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAtcHVzaCBmZXRjaGVzIHVucGFja2VkIG9iamVjdHMnICcKKwljcCAtUiAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvdGVzdF9yZXBvLmdpdCBcCisJCSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi90ZXN0X3JlcG9fdW5wYWNrZWQuZ2l0ICYmCisKKwlnaXQgY2xvbmUgJEhUVFBEX1VSTC9kdW1iL3Rlc3RfcmVwb191bnBhY2tlZC5naXQgXAorCQkiJFJPT1RfUEFUSCIvZmV0Y2hfdW5wYWNrZWQgJiYKKworCSMgQnkgcmVzZXQsIHdlIGZvcmNlIGdpdCB0byByZXRyaWV2ZSB0aGUgb2JqZWN0CisJKGNkICIkUk9PVF9QQVRIIi9mZXRjaF91bnBhY2tlZCAmJgorCSBnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJIGdpdCByZW1vdGUgcm0gb3JpZ2luICYmCisJIGdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPTAgLS1hbGwgJiYKKwkgZ2l0IHBydW5lICYmCisJIGdpdCBwdXNoIC1mIC12ICRIVFRQRF9VUkwvZHVtYi90ZXN0X3JlcG9fdW5wYWNrZWQuZ2l0IG1hc3RlcikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHR0cC1wdXNoIGZldGNoZXMgcGFja2VkIG9iamVjdHMnICcKKwljcCAtUiAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvdGVzdF9yZXBvLmdpdCBcCisJCSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi90ZXN0X3JlcG9fcGFja2VkLmdpdCAmJgorCisJZ2l0IGNsb25lICRIVFRQRF9VUkwvZHVtYi90ZXN0X3JlcG9fcGFja2VkLmdpdCBcCisJCSIkUk9PVF9QQVRIIi90ZXN0X3JlcG9fY2xvbmVfcGFja2VkICYmCisKKwkoY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3Rlc3RfcmVwb19wYWNrZWQuZ2l0ICYmCisJIGdpdCAtLWJhcmUgcmVwYWNrICYmCisJIGdpdCAtLWJhcmUgcHJ1bmUtcGFja2VkKSAmJgorCisJIyBCeSByZXNldCwgd2UgZm9yY2UgZ2l0IHRvIHJldHJpZXZlIHRoZSBwYWNrZWQgb2JqZWN0CisJKGNkICIkUk9PVF9QQVRIIi90ZXN0X3JlcG9fY2xvbmVfcGFja2VkICYmCisJIGdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwkgZ2l0IHJlbW90ZSBybSBvcmlnaW4gJiYKKwkgZ2l0IHJlZmxvZyBleHBpcmUgLS1leHBpcmU9MCAtLWFsbCAmJgorCSBnaXQgcHJ1bmUgJiYKKwkgZ2l0IHB1c2ggLWYgLXYgJEhUVFBEX1VSTC9kdW1iL3Rlc3RfcmVwb19wYWNrZWQuZ2l0IG1hc3RlcikKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGFuZCBkZWxldGUgcmVtb3RlIGJyYW5jaCcgJwogCWNkICIkUk9PVF9QQVRIIi90ZXN0X3JlcG9fY2xvbmUgJiYKIAlnaXQgY2hlY2tvdXQgLWIgZGV2ICYmCkBAIC03NSwxMCArMTE1LDcgQEAKIAl0ZXN0X3RpY2sgJiYKIAlnaXQgY29tbWl0IC1tIGRldiAmJgogCWdpdCBwdXNoIG9yaWdpbiBkZXYgJiYKLQlnaXQgZmV0Y2ggJiYKIAlnaXQgcHVzaCBvcmlnaW4gOmRldiAmJgotCWdpdCBicmFuY2ggLWQgLXIgb3JpZ2luL2RldiAmJgotCWdpdCBmZXRjaCAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL2RldgogJwogCmRpZmYgLS1naXQgYS90L3Q1NTQxLWh0dHAtcHVzaC5zaCBiL3QvdDU1NDEtaHR0cC1wdXNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUzZjU0YTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTQxLWh0dHAtcHVzaC5zaApAQCAtMCwwICsxLDEzMiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBDbGVtZW5zIEJ1Y2hhY2hlciA8ZHJpenpkQGFvbi5hdD4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBzbWFydCBwdXNoaW5nIG92ZXIgaHR0cCB2aWEgaHR0cC1iYWNrZW5kJworLiAuL3Rlc3QtbGliLnNoCisKK2lmIHRlc3QgLW4gIiROT19DVVJMIjsgdGhlbgorCXNheSAnc2tpcHBpbmcgdGVzdCwgZ2l0IGJ1aWx0IHdpdGhvdXQgaHR0cCBzdXBwb3J0JworCXRlc3RfZG9uZQorZmkKKworUk9PVF9QQVRIPSIkUFdEIgorTElCX0hUVFBEX1BPUlQ9JHtMSUJfSFRUUERfUE9SVC0nNTU0MSd9CisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1odHRwZC5zaAorc3RhcnRfaHR0cGQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVtb3RlIHJlcG9zaXRvcnknICcKKwljZCAiJFJPT1RfUEFUSCIgJiYKKwlta2RpciB0ZXN0X3JlcG8gJiYKKwljZCB0ZXN0X3JlcG8gJiYKKwlnaXQgaW5pdCAmJgorCTogPnBhdGgxICYmCisJZ2l0IGFkZCBwYXRoMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWNkIC0gJiYKKwlnaXQgY2xvbmUgLS1iYXJlIHRlc3RfcmVwbyB0ZXN0X3JlcG8uZ2l0ICYmCisJY2QgdGVzdF9yZXBvLmdpdCAmJgorCWdpdCBjb25maWcgaHR0cC5yZWNlaXZlcGFjayB0cnVlICYmCisJT1JJR19IRUFEPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWNkIC0gJiYKKwltdiB0ZXN0X3JlcG8uZ2l0ICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSByZW1vdGUgcmVwb3NpdG9yeScgJworCWNkICIkUk9PVF9QQVRIIiAmJgorCWdpdCBjbG9uZSAkSFRUUERfVVJML3NtYXJ0L3Rlc3RfcmVwby5naXQgdGVzdF9yZXBvX2Nsb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdG8gcmVtb3RlIHJlcG9zaXRvcnknICcKKwljZCAiJFJPT1RfUEFUSCIvdGVzdF9yZXBvX2Nsb25lICYmCisJOiA+cGF0aDIgJiYKKwlnaXQgYWRkIHBhdGgyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBwYXRoMiAmJgorCUhFQUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IHB1c2ggJiYKKwkoY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3Rlc3RfcmVwby5naXQgJiYKKwkgdGVzdCAkSEVBRCA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBhbHJlYWR5IHVwLXRvLWRhdGUnICcKKwlnaXQgcHVzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgYW5kIGRlbGV0ZSByZW1vdGUgYnJhbmNoJyAnCisJY2QgIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZSAmJgorCWdpdCBjaGVja291dCAtYiBkZXYgJiYKKwk6ID5wYXRoMyAmJgorCWdpdCBhZGQgcGF0aDMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGRldiAmJgorCWdpdCBwdXNoIG9yaWdpbiBkZXYgJiYKKwlnaXQgcHVzaCBvcmlnaW4gOmRldiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL2RldgorJworCitjYXQgPmV4cCA8PEVPRgorR0VUICAvc21hcnQvdGVzdF9yZXBvLmdpdC9pbmZvL3JlZnM/c2VydmljZT1naXQtdXBsb2FkLXBhY2sgSFRUUC8xLjEgMjAwCitQT1NUIC9zbWFydC90ZXN0X3JlcG8uZ2l0L2dpdC11cGxvYWQtcGFjayBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0L3Rlc3RfcmVwby5naXQvaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXJlY2VpdmUtcGFjayBIVFRQLzEuMSAyMDAKK1BPU1QgL3NtYXJ0L3Rlc3RfcmVwby5naXQvZ2l0LXJlY2VpdmUtcGFjayBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0L3Rlc3RfcmVwby5naXQvaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXJlY2VpdmUtcGFjayBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0L3Rlc3RfcmVwby5naXQvaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXJlY2VpdmUtcGFjayBIVFRQLzEuMSAyMDAKK1BPU1QgL3NtYXJ0L3Rlc3RfcmVwby5naXQvZ2l0LXJlY2VpdmUtcGFjayBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0L3Rlc3RfcmVwby5naXQvaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXJlY2VpdmUtcGFjayBIVFRQLzEuMSAyMDAKK1BPU1QgL3NtYXJ0L3Rlc3RfcmVwby5naXQvZ2l0LXJlY2VpdmUtcGFjayBIVFRQLzEuMSAyMDAKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlZCByZWNlaXZlLXBhY2sgc2VydmljZScgJworCXNlZCAtZSAiCisJCXMvXi4qIFwiLy8KKwkJcy9cIi8vCisJCXMvIFsxLTldWzAtOV0qXCQvLworCQlzL15HRVQgL0dFVCAgLworCSIgPmFjdCA8IiRIVFRQRF9ST09UX1BBVEgiL2FjY2Vzcy5sb2cgJiYKKwl0ZXN0X2NtcCBleHAgYWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbi1mYXN0LWZvcndhcmQgcHVzaCBmYWlscycgJworCWNkICIkUk9PVF9QQVRIIi90ZXN0X3JlcG9fY2xvbmUgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyAiY2hhbmdlZCIgPiBwYXRoMiAmJgorCWdpdCBjb21taXQgLWEgLW0gcGF0aDIgLS1hbWVuZCAmJgorCisJSEVBRD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwkhKGdpdCBwdXNoIC12IG9yaWdpbiA+b3V0cHV0IDI+JjEpICYmCisJKGNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi90ZXN0X3JlcG8uZ2l0ICYmCisJIHRlc3QgJEhFQUQgIT0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24tZmFzdC1mb3J3YXJkIHB1c2ggc2hvdyByZWYgc3RhdHVzJyAnCisJZ3JlcCAiXiAhIFxbcmVqZWN0ZWRcXVsgXSptYXN0ZXIgLT4gbWFzdGVyIChub24tZmFzdC1mb3J3YXJkKSQiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24tZmFzdC1mb3J3YXJkIHB1c2ggc2hvd3MgaGVscCBtZXNzYWdlJyAnCisJZ3JlcCAiVG8gcHJldmVudCB5b3UgZnJvbSBsb3NpbmcgaGlzdG9yeSwgbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGVzIHdlcmUgcmVqZWN0ZWQiIFwKKwkJb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggZmFpbHMgZm9yIG5vbi1mYXN0LWZvcndhcmQgcmVmcyB1bm1hdGNoZWQgYnkgcmVtb3RlIGhlbHBlcicgJworCSMgY3JlYXRlIGEgZGlzc2ltaWxhcmx5LW5hbWVkIHJlbW90ZSByZWYgc28gdGhhdCBnaXQgaXMgdW5hYmxlIHRvIG1hdGNoIHRoZQorCSMgdHdvIHJlZnMgKHZpei4gbG9jYWwsIHJlbW90ZSkgdW5sZXNzIGFuIGV4cGxpY2l0IHJlZnNwZWMgaXMgcHJvdmlkZWQuCisJZ2l0IHB1c2ggb3JpZ2luIG1hc3RlcjpyZXRzYW0KKworCWVjaG8gImNoYW5nZSBjaGFuZ2VkIiA+IHBhdGgyICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBwYXRoMiAtLWFtZW5kICYmCisKKwkjIHB1c2ggbWFzdGVyIHRvbzsgdGhpcyBlbnN1cmVzIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSAnIidwdXNoJyInIGNvbW1hbmQgdG8KKwkjIHRoZSByZW1vdGUgaGVscGVyIGFuZCB0cmlnZ2VycyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoZWxwZXIuCisJIShnaXQgcHVzaCAtdiBvcmlnaW4gK21hc3RlciBtYXN0ZXI6cmV0c2FtID5vdXRwdXQgMj4mMSkgJiYKKworCWdyZXAgIl4gKyBbYS1mMC05XSpcLlwuXC5bYS1mMC05XSogKm1hc3RlciAtPiBtYXN0ZXIgKGZvcmNlZCB1cGRhdGUpJCIgb3V0cHV0ICYmCisJZ3JlcCAiXiAhIFxbcmVqZWN0ZWRcXSAqbWFzdGVyIC0+IHJldHNhbSAobm9uLWZhc3QtZm9yd2FyZCkkIiBvdXRwdXQgJiYKKworCWdyZXAgIlRvIHByZXZlbnQgeW91IGZyb20gbG9zaW5nIGhpc3RvcnksIG5vbi1mYXN0LWZvcndhcmQgdXBkYXRlcyB3ZXJlIHJlamVjdGVkIiBcCisJCW91dHB1dAorJworCitzdG9wX2h0dHBkCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1NTAtaHR0cC1mZXRjaC5zaCBiL3QvdDU1NTAtaHR0cC1mZXRjaC5zaAppbmRleCAwNWIxYjYyLi44Y2ZjZTk2IDEwMDc1NQotLS0gYS90L3Q1NTUwLWh0dHAtZmV0Y2guc2gKKysrIGIvdC90NTU1MC1odHRwLWZldGNoLnNoCkBAIC0xLDYgKzEsNiBAQAogIyEvYmluL3NoCiAKLXRlc3RfZGVzY3JpcHRpb249J3Rlc3QgZmV0Y2hpbmcgb3ZlciBodHRwJwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBkdW1iIGZldGNoaW5nIG92ZXIgaHR0cCB2aWEgc3RhdGljIGZpbGUnCiAuIC4vdGVzdC1saWIuc2gKIAogaWYgdGVzdCAtbiAiJE5PX0NVUkwiOyB0aGVuCkBAIC0zMCw3ICszMCw3IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGh0dHAgcmVwb3NpdG9yeScgJwotCWdpdCBjbG9uZSAkSFRUUERfVVJML3JlcG8uZ2l0IGNsb25lICYmCisJZ2l0IGNsb25lICRIVFRQRF9VUkwvZHVtYi9yZXBvLmdpdCBjbG9uZSAmJgogCXRlc3RfY21wIGZpbGUgY2xvbmUvZmlsZQogJwogCkBAIC01Myw1ICs1MywxOSBAQAogCSkKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggcGFja2VkIG9iamVjdHMnICcKKwljcCAtUiAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvcmVwby5naXQgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fcGFjay5naXQgJiYKKwljZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvcmVwb19wYWNrLmdpdCAmJgorCWdpdCAtLWJhcmUgcmVwYWNrICYmCisJZ2l0IC0tYmFyZSBwcnVuZS1wYWNrZWQgJiYKKwlnaXQgY2xvbmUgJEhUVFBEX1VSTC9kdW1iL3JlcG9fcGFjay5naXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlkIG5vdCB1c2UgdXBsb2FkLXBhY2sgc2VydmljZScgJworCWdyZXAgJy9naXQtdXBsb2FkLXBhY2snIDwiJEhUVFBEX1JPT1RfUEFUSCIvYWNjZXNzLmxvZyA+YWN0CisJOiA+ZXhwCisJdGVzdF9jbXAgZXhwIGFjdAorJworCiBzdG9wX2h0dHBkCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1NTEtaHR0cC1mZXRjaC5zaCBiL3QvdDU1NTEtaHR0cC1mZXRjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZmFhMzFhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTU1MS1odHRwLWZldGNoLnNoCkBAIC0wLDAgKzEsMTA1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBzbWFydCBmZXRjaGluZyBvdmVyIGh0dHAgdmlhIGh0dHAtYmFja2VuZCcKKy4gLi90ZXN0LWxpYi5zaAorCitpZiB0ZXN0IC1uICIkTk9fQ1VSTCI7IHRoZW4KKwlzYXkgJ3NraXBwaW5nIHRlc3QsIGdpdCBidWlsdCB3aXRob3V0IGh0dHAgc3VwcG9ydCcKKwl0ZXN0X2RvbmUKK2ZpCisKK0xJQl9IVFRQRF9QT1JUPSR7TElCX0hUVFBEX1BPUlQtJzU1NTEnfQorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItaHR0cGQuc2gKK3N0YXJ0X2h0dHBkCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG9zaXRvcnknICcKKwllY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgaHR0cC1hY2Nlc3NpYmxlIGJhcmUgcmVwb3NpdG9yeScgJworCW1rZGlyICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCShjZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwkgZ2l0IC0tYmFyZSBpbml0CisJKSAmJgorCWdpdCByZW1vdGUgYWRkIHB1YmxpYyAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwlnaXQgcHVzaCBwdWJsaWMgbWFzdGVyOm1hc3RlcgorJworCitjYXQgPmV4cCA8PEVPRgorPiBHRVQgL3NtYXJ0L3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC11cGxvYWQtcGFjayBIVFRQLzEuMQorPiBBY2NlcHQ6ICovKgorPiBQcmFnbWE6IG5vLWNhY2hlCis8IEhUVFAvMS4xIDIwMCBPSworPCBQcmFnbWE6IG5vLWNhY2hlCis8IENhY2hlLUNvbnRyb2w6IG5vLWNhY2hlLCBtYXgtYWdlPTAsIG11c3QtcmV2YWxpZGF0ZQorPCBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtZ2l0LXVwbG9hZC1wYWNrLWFkdmVydGlzZW1lbnQKKz4gUE9TVCAvc21hcnQvcmVwby5naXQvZ2l0LXVwbG9hZC1wYWNrIEhUVFAvMS4xCis+IEFjY2VwdC1FbmNvZGluZzogZGVmbGF0ZSwgZ3ppcAorPiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtZ2l0LXVwbG9hZC1wYWNrLXJlcXVlc3QKKz4gQWNjZXB0OiBhcHBsaWNhdGlvbi94LWdpdC11cGxvYWQtcGFjay1yZXN1bHQKKz4gQ29udGVudC1MZW5ndGg6IHh4eAorPCBIVFRQLzEuMSAyMDAgT0sKKzwgUHJhZ21hOiBuby1jYWNoZQorPCBDYWNoZS1Db250cm9sOiBuby1jYWNoZSwgbWF4LWFnZT0wLCBtdXN0LXJldmFsaWRhdGUKKzwgQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LWdpdC11cGxvYWQtcGFjay1yZXN1bHQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgaHR0cCByZXBvc2l0b3J5JyAnCisJR0lUX0NVUkxfVkVSQk9TRT0xIGdpdCBjbG9uZSAtLXF1aWV0ICRIVFRQRF9VUkwvc21hcnQvcmVwby5naXQgY2xvbmUgMj5lcnIgJiYKKwl0ZXN0X2NtcCBmaWxlIGNsb25lL2ZpbGUgJiYKKwl0ciAnXCcnXDAxNSdcJycgUSA8ZXJyIHwKKwlzZWQgLWUgIgorCQlzL1FcJC8vCisJCS9eWypdIC9kCisJCS9eJC9kCisJCS9ePCAkL2QKKworCQkvXltePjxdL3sKKwkJCXMvXi8+IC8KKwkJfQorCisJCS9ePiBVc2VyLUFnZW50OiAvZAorCQkvXj4gSG9zdDogL2QKKwkJL14+IFBPU1QgLywkIHsKKwkJCS9ePiBBY2NlcHQ6IFsqXVxcL1sqXS9kCisJCX0KKwkJcy9ePiBDb250ZW50LUxlbmd0aDogLiovPiBDb250ZW50LUxlbmd0aDogeHh4LworCQkvXj4gMDAuLndhbnQgL2QKKwkJL14+IDAwLipkb25lL2QKKworCQkvXjwgU2VydmVyOiAvZAorCQkvXjwgRXhwaXJlczogL2QKKwkJL148IERhdGU6IC9kCisJCS9ePCBDb250ZW50LUxlbmd0aDogL2QKKwkJL148IFRyYW5zZmVyLUVuY29kaW5nOiAvZAorCSIgPmFjdCAmJgorCXRlc3RfY21wIGV4cCBhY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggY2hhbmdlcyB2aWEgaHR0cCcgJworCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHR3byAmJgorCWdpdCBwdXNoIHB1YmxpYworCShjZCBjbG9uZSAmJiBnaXQgcHVsbCkgJiYKKwl0ZXN0X2NtcCBmaWxlIGNsb25lL2ZpbGUKKycKKworY2F0ID5leHAgPDxFT0YKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC11cGxvYWQtcGFjayBIVFRQLzEuMSAyMDAKK1BPU1QgL3NtYXJ0L3JlcG8uZ2l0L2dpdC11cGxvYWQtcGFjayBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC11cGxvYWQtcGFjayBIVFRQLzEuMSAyMDAKK1BPU1QgL3NtYXJ0L3JlcG8uZ2l0L2dpdC11cGxvYWQtcGFjayBIVFRQLzEuMSAyMDAKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlZCB1cGxvYWQtcGFjayBzZXJ2aWNlJyAnCisJc2VkIC1lICIKKwkJcy9eLiogXCIvLworCQlzL1wiLy8KKwkJcy8gWzEtOV1bMC05XSpcJC8vCisJCXMvXkdFVCAvR0VUICAvCisJIiA+YWN0IDwiJEhUVFBEX1JPT1RfUEFUSCIvYWNjZXNzLmxvZyAmJgorCXRlc3RfY21wIGV4cCBhY3QKKycKKworc3RvcF9odHRwZAordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTYwLWh0dHAtYmFja2VuZC1ub3NlcnZlci5zaCBiL3QvdDU1NjAtaHR0cC1iYWNrZW5kLW5vc2VydmVyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ0ODg1YjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTYwLWh0dHAtYmFja2VuZC1ub3NlcnZlci5zaApAQCAtMCwwICsxLDczIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBnaXQtaHR0cC1iYWNrZW5kLW5vc2VydmVyJworLiAuL3Rlc3QtbGliLnNoCisKK0hUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSD0iJFRSQVNIX0RJUkVDVE9SWSIKKworcnVuX2JhY2tlbmQoKSB7CisJZWNobyAiJDIiIHwKKwlRVUVSWV9TVFJJTkc9IiR7MSMqXD99IiBcCisJR0lUX1BST0pFQ1RfUk9PVD0iJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIgXAorCVBBVEhfSU5GTz0iJHsxJSVcPyp9IiBcCisJZ2l0IGh0dHAtYmFja2VuZCA+YWN0Lm91dCAyPmFjdC5lcnIKK30KKworR0VUKCkgeworCWV4cG9ydCBSRVFVRVNUX01FVEhPRD0iR0VUIiAmJgorCXJ1bl9iYWNrZW5kICIvcmVwby5naXQvJDEiICYmCisJdW5zZXQgUkVRVUVTVF9NRVRIT0QgJiYKKwlpZiAhIGdyZXAgIlN0YXR1cyIgYWN0Lm91dCA+YWN0CisJdGhlbgorCQlwcmludGYgIlN0YXR1czogMjAwIE9LXHJcbiIgPmFjdAorCWZpCisJcHJpbnRmICJTdGF0dXM6ICQyXHJcbiIgPmV4cCAmJgorCXRlc3RfY21wIGV4cCBhY3QKK30KKworUE9TVCgpIHsKKwlleHBvcnQgUkVRVUVTVF9NRVRIT0Q9IlBPU1QiICYmCisJZXhwb3J0IENPTlRFTlRfVFlQRT0iYXBwbGljYXRpb24veC0kMS1yZXF1ZXN0IiAmJgorCXJ1bl9iYWNrZW5kICIvcmVwby5naXQvJDEiICIkMiIgJiYKKwl1bnNldCBSRVFVRVNUX01FVEhPRCAmJgorCXVuc2V0IENPTlRFTlRfVFlQRSAmJgorCWlmICEgZ3JlcCAiU3RhdHVzIiBhY3Qub3V0ID5hY3QKKwl0aGVuCisJCXByaW50ZiAiU3RhdHVzOiAyMDAgT0tcclxuIiA+YWN0CisJZmkKKwlwcmludGYgIlN0YXR1czogJDNcclxuIiA+ZXhwICYmCisJdGVzdF9jbXAgZXhwIGFjdAorfQorCitsb2dfZGl2KCkgeworCXJldHVybiAwCit9CisKKy4gIiRURVNUX0RJUkVDVE9SWSIvdDU1NnhfY29tbW9uCisKK2V4cGVjdF9hbGlhc2VkKCkgeworCWV4cG9ydCBSRVFVRVNUX01FVEhPRD0iR0VUIiAmJgorCWlmIHRlc3QgJDEgPSAwOyB0aGVuCisJCXJ1bl9iYWNrZW5kICIkMiIKKwllbHNlCisJCXJ1bl9iYWNrZW5kICIkMiIgJiYKKwkJZWNobyAiZmF0YWw6ICckMic6IGFsaWFzZWQiID5leHAuZXJyICYmCisJCXRlc3RfY21wIGV4cC5lcnIgYWN0LmVycgorCWZpCisJdW5zZXQgUkVRVUVTVF9NRVRIT0QKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHR0cC1iYWNrZW5kIGJsb2NrcyBiYWQgUEFUSF9JTkZPJyAnCisJY29uZmlnIGh0dHAuZ2V0YW55ZmlsZSB0cnVlICYmCisKKwlleHBlY3RfYWxpYXNlZCAwIC9yZXBvLmdpdC9IRUFEICYmCisKKwlleHBlY3RfYWxpYXNlZCAxIC9yZXBvLmdpdC8uLi9IRUFEICYmCisJZXhwZWN0X2FsaWFzZWQgMSAvLi4vZXRjL3Bhc3N3ZCAmJgorCWV4cGVjdF9hbGlhc2VkIDEgLi4vZXRjL3Bhc3N3ZCAmJgorCWV4cGVjdF9hbGlhc2VkIDEgL2V0Yy8vcGFzc3dkICYmCisJZXhwZWN0X2FsaWFzZWQgMSAvZXRjLy4vcGFzc3dkICYmCisJZXhwZWN0X2FsaWFzZWQgMSAvL2RvbWFpbi9kYXRhLnR4dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1NjEtaHR0cC1iYWNrZW5kLnNoIGIvdC90NTU2MS1odHRwLWJhY2tlbmQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGM2ZDBiMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1NjEtaHR0cC1iYWNrZW5kLnNoCkBAIC0wLDAgKzEsMTQ5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBnaXQtaHR0cC1iYWNrZW5kJworLiAuL3Rlc3QtbGliLnNoCisKK2lmIHRlc3QgLW4gIiROT19DVVJMIjsgdGhlbgorCXNheSAnc2tpcHBpbmcgdGVzdCwgZ2l0IGJ1aWx0IHdpdGhvdXQgaHR0cCBzdXBwb3J0JworCXRlc3RfZG9uZQorZmkKKworTElCX0hUVFBEX1BPUlQ9JHtMSUJfSFRUUERfUE9SVC0nNTU2MSd9CisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1odHRwZC5zaAorc3RhcnRfaHR0cGQKKworR0VUKCkgeworCWN1cmwgLS1pbmNsdWRlICIkSFRUUERfVVJMLyRTTUFSVC9yZXBvLmdpdC8kMSIgPm91dCAyPi9kZXYvbnVsbCAmJgorCXRyICdcMDE1JyBRIDxvdXQgfAorCXNlZCAnCisJCXMvUSQvLworCQkxcQorCScgPmFjdCAmJgorCWVjaG8gIkhUVFAvMS4xICQyIiA+ZXhwICYmCisJdGVzdF9jbXAgZXhwIGFjdAorfQorCitQT1NUKCkgeworCWN1cmwgLS1pbmNsdWRlIC0tZGF0YSAiJDIiIFwKKwktLWhlYWRlciAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LSQxLXJlcXVlc3QiIFwKKwkiJEhUVFBEX1VSTC9zbWFydC9yZXBvLmdpdC8kMSIgPm91dCAyPi9kZXYvbnVsbCAmJgorCXRyICdcMDE1JyBRIDxvdXQgfAorCXNlZCAnCisJCXMvUSQvLworCQkxcQorCScgPmFjdCAmJgorCWVjaG8gIkhUVFAvMS4xICQzIiA+ZXhwICYmCisJdGVzdF9jbXAgZXhwIGFjdAorfQorCitsb2dfZGl2KCkgeworCWVjaG8gPj4iJEhUVFBEX1JPT1RfUEFUSCIvYWNjZXNzLmxvZworCWVjaG8gIiMjIyAgJDEiID4+IiRIVFRQRF9ST09UX1BBVEgiL2FjY2Vzcy5sb2cKKwllY2hvICIjIyMiID4+IiRIVFRQRF9ST09UX1BBVEgiL2FjY2Vzcy5sb2cKK30KKworLiAiJFRFU1RfRElSRUNUT1JZIi90NTU2eF9jb21tb24KKworY2F0ID5leHAgPDxFT0YKKworIyMjICByZWZzL2hlYWRzL21hc3RlcgorIyMjCitHRVQgIC9zbWFydC9yZXBvLmdpdC9yZWZzL2hlYWRzL21hc3RlciBIVFRQLzEuMSA0MDQgLQorCisjIyMgIGdldGFueWZpbGUgZGVmYXVsdAorIyMjCitHRVQgIC9zbWFydC9yZXBvLmdpdC9IRUFEIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnQvcmVwby5naXQvaW5mby9yZWZzIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnQvcmVwby5naXQvb2JqZWN0cy9pbmZvL3BhY2tzIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnQvcmVwby5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgSFRUUC8xLjEgMjAwIC0KK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L29iamVjdHMvaW5mby9odHRwLWFsdGVybmF0ZXMgSFRUUC8xLjEgMjAwIC0KK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0LyRMT09TRV9VUkwgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydC9yZXBvLmdpdC8kUEFDS19VUkwgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydC9yZXBvLmdpdC8kSURYX1VSTCBIVFRQLzEuMSAyMDAKKworIyMjICBubyBnaXQtZGFlbW9uLWV4cG9ydC1vaworIyMjCitHRVQgIC9zbWFydF9ub2V4cG9ydC9yZXBvLmdpdC9IRUFEIEhUVFAvMS4xIDQwNCAtCitHRVQgIC9zbWFydF9ub2V4cG9ydC9yZXBvLmdpdC9pbmZvL3JlZnMgSFRUUC8xLjEgNDA0IC0KK0dFVCAgL3NtYXJ0X25vZXhwb3J0L3JlcG8uZ2l0L29iamVjdHMvaW5mby9wYWNrcyBIVFRQLzEuMSA0MDQgLQorR0VUICAvc21hcnRfbm9leHBvcnQvcmVwby5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgSFRUUC8xLjEgNDA0IC0KK0dFVCAgL3NtYXJ0X25vZXhwb3J0L3JlcG8uZ2l0L29iamVjdHMvaW5mby9odHRwLWFsdGVybmF0ZXMgSFRUUC8xLjEgNDA0IC0KK0dFVCAgL3NtYXJ0X25vZXhwb3J0L3JlcG8uZ2l0LyRMT09TRV9VUkwgSFRUUC8xLjEgNDA0IC0KK0dFVCAgL3NtYXJ0X25vZXhwb3J0L3JlcG8uZ2l0LyRQQUNLX1VSTCBIVFRQLzEuMSA0MDQgLQorR0VUICAvc21hcnRfbm9leHBvcnQvcmVwby5naXQvJElEWF9VUkwgSFRUUC8xLjEgNDA0IC0KKworIyMjICBnaXQtZGFlbW9uLWV4cG9ydC1vaworIyMjCitHRVQgIC9zbWFydF9ub2V4cG9ydC9yZXBvLmdpdC9IRUFEIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnRfbm9leHBvcnQvcmVwby5naXQvaW5mby9yZWZzIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnRfbm9leHBvcnQvcmVwby5naXQvb2JqZWN0cy9pbmZvL3BhY2tzIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnRfbm9leHBvcnQvcmVwby5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgSFRUUC8xLjEgMjAwIC0KK0dFVCAgL3NtYXJ0X25vZXhwb3J0L3JlcG8uZ2l0L29iamVjdHMvaW5mby9odHRwLWFsdGVybmF0ZXMgSFRUUC8xLjEgMjAwIC0KK0dFVCAgL3NtYXJ0X25vZXhwb3J0L3JlcG8uZ2l0LyRMT09TRV9VUkwgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydF9ub2V4cG9ydC9yZXBvLmdpdC8kUEFDS19VUkwgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydF9ub2V4cG9ydC9yZXBvLmdpdC8kSURYX1VSTCBIVFRQLzEuMSAyMDAKKworIyMjICBnZXRhbnlmaWxlIHRydWUKKyMjIworR0VUICAvc21hcnQvcmVwby5naXQvSEVBRCBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L2luZm8vcmVmcyBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L29iamVjdHMvaW5mby9wYWNrcyBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIEhUVFAvMS4xIDIwMCAtCitHRVQgIC9zbWFydC9yZXBvLmdpdC9vYmplY3RzL2luZm8vaHR0cC1hbHRlcm5hdGVzIEhUVFAvMS4xIDIwMCAtCitHRVQgIC9zbWFydC9yZXBvLmdpdC8kTE9PU0VfVVJMIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnQvcmVwby5naXQvJFBBQ0tfVVJMIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnQvcmVwby5naXQvJElEWF9VUkwgSFRUUC8xLjEgMjAwCisKKyMjIyAgZ2V0YW55ZmlsZSBmYWxzZQorIyMjCitHRVQgIC9zbWFydC9yZXBvLmdpdC9IRUFEIEhUVFAvMS4xIDQwMyAtCitHRVQgIC9zbWFydC9yZXBvLmdpdC9pbmZvL3JlZnMgSFRUUC8xLjEgNDAzIC0KK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L29iamVjdHMvaW5mby9wYWNrcyBIVFRQLzEuMSA0MDMgLQorR0VUICAvc21hcnQvcmVwby5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgSFRUUC8xLjEgNDAzIC0KK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L29iamVjdHMvaW5mby9odHRwLWFsdGVybmF0ZXMgSFRUUC8xLjEgNDAzIC0KK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0LyRMT09TRV9VUkwgSFRUUC8xLjEgNDAzIC0KK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0LyRQQUNLX1VSTCBIVFRQLzEuMSA0MDMgLQorR0VUICAvc21hcnQvcmVwby5naXQvJElEWF9VUkwgSFRUUC8xLjEgNDAzIC0KKworIyMjICB1cGxvYWRwYWNrIGRlZmF1bHQKKyMjIworR0VUICAvc21hcnQvcmVwby5naXQvaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXVwbG9hZC1wYWNrIEhUVFAvMS4xIDIwMAorUE9TVCAvc21hcnQvcmVwby5naXQvZ2l0LXVwbG9hZC1wYWNrIEhUVFAvMS4xIDIwMCAtCisKKyMjIyAgdXBsb2FkcGFjayB0cnVlCisjIyMKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC11cGxvYWQtcGFjayBIVFRQLzEuMSAyMDAKK1BPU1QgL3NtYXJ0L3JlcG8uZ2l0L2dpdC11cGxvYWQtcGFjayBIVFRQLzEuMSAyMDAgLQorCisjIyMgIHVwbG9hZHBhY2sgZmFsc2UKKyMjIworR0VUICAvc21hcnQvcmVwby5naXQvaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXVwbG9hZC1wYWNrIEhUVFAvMS4xIDQwMyAtCitQT1NUIC9zbWFydC9yZXBvLmdpdC9naXQtdXBsb2FkLXBhY2sgSFRUUC8xLjEgNDAzIC0KKworIyMjICByZWNlaXZlcGFjayBkZWZhdWx0CisjIyMKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjEgNDAzIC0KK1BPU1QgL3NtYXJ0L3JlcG8uZ2l0L2dpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjEgNDAzIC0KKworIyMjICByZWNlaXZlcGFjayB0cnVlCisjIyMKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjEgMjAwCitQT1NUIC9zbWFydC9yZXBvLmdpdC9naXQtcmVjZWl2ZS1wYWNrIEhUVFAvMS4xIDIwMCAtCisKKyMjIyAgcmVjZWl2ZXBhY2sgZmFsc2UKKyMjIworR0VUICAvc21hcnQvcmVwby5naXQvaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXJlY2VpdmUtcGFjayBIVFRQLzEuMSA0MDMgLQorUE9TVCAvc21hcnQvcmVwby5naXQvZ2l0LXJlY2VpdmUtcGFjayBIVFRQLzEuMSA0MDMgLQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXJ2ZXIgcmVxdWVzdCBsb2cgbWF0Y2hlcyB0ZXN0IHJlc3VsdHMnICcKKwlzZWQgLWUgIgorCQlzL14uKiBcIi8vCisJCXMvXCIvLworCQlzLyBbMS05XVswLTldKlwkLy8KKwkJcy9eR0VUIC9HRVQgIC8KKwkiID5hY3QgPCIkSFRUUERfUk9PVF9QQVRIIi9hY2Nlc3MubG9nICYmCisJdGVzdF9jbXAgZXhwIGFjdAorJworCitzdG9wX2h0dHBkCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1NnhfY29tbW9uIGIvdC90NTU2eF9jb21tb24KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmUwMjRlNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1NnhfY29tbW9uCkBAIC0wLDAgKzEsMTIyIEBACisjIS9iaW4vc2gKKworZmluZF9maWxlKCkgeworCWNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCWZpbmQgJDEgLXR5cGUgZiB8CisJc2VkIC1lIDFxCit9CisKK2NvbmZpZygpIHsKKwlnaXQgLS1naXQtZGlyPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiBjb25maWcgJDEgJDIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwb3NpdG9yeScgJworCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gb25lICYmCisKKwlta2RpciAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwkoY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJIGdpdCAtLWJhcmUgaW5pdCAmJgorCSA6ID5vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCSA6ID5vYmplY3RzL2luZm8vaHR0cC1hbHRlcm5hdGVzCisJKSAmJgorCWdpdCByZW1vdGUgYWRkIHB1YmxpYyAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwlnaXQgcHVzaCBwdWJsaWMgbWFzdGVyOm1hc3RlciAmJgorCisJKGNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCSBnaXQgcmVwYWNrIC1hIC1kCisJKSAmJgorCisJZWNobyBvdGhlciA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gdHdvICYmCisJZ2l0IHB1c2ggcHVibGljIG1hc3RlcjptYXN0ZXIgJiYKKworCUxPT1NFX1VSTD0kKGZpbmRfZmlsZSBvYmplY3RzLz8/KSAmJgorCVBBQ0tfVVJMPSQoZmluZF9maWxlIG9iamVjdHMvcGFjay8qLnBhY2spICYmCisJSURYX1VSTD0kKGZpbmRfZmlsZSBvYmplY3RzL3BhY2svKi5pZHgpCisnCisKK2dldF9zdGF0aWNfZmlsZXMoKSB7CisJR0VUIEhFQUQgIiQxIiAmJgorCUdFVCBpbmZvL3JlZnMgIiQxIiAmJgorCUdFVCBvYmplY3RzL2luZm8vcGFja3MgIiQxIiAmJgorCUdFVCBvYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAiJDEiICYmCisJR0VUIG9iamVjdHMvaW5mby9odHRwLWFsdGVybmF0ZXMgIiQxIiAmJgorCUdFVCAkTE9PU0VfVVJMICIkMSIgJiYKKwlHRVQgJFBBQ0tfVVJMICIkMSIgJiYKKwlHRVQgJElEWF9VUkwgIiQxIgorfQorCitTTUFSVD1zbWFydAorZXhwb3J0IEdJVF9IVFRQX0VYUE9SVF9BTEw9MQordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlyZWN0IHJlZnMvaGVhZHMvbWFzdGVyIG5vdCBmb3VuZCcgJworCWxvZ19kaXYgInJlZnMvaGVhZHMvbWFzdGVyIgorCUdFVCByZWZzL2hlYWRzL21hc3RlciAiNDA0IE5vdCBGb3VuZCIKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXRpYyBmaWxlIGlzIG9rJyAnCisJbG9nX2RpdiAiZ2V0YW55ZmlsZSBkZWZhdWx0IgorCWdldF9zdGF0aWNfZmlsZXMgIjIwMCBPSyIKKycKK1NNQVJUPXNtYXJ0X25vZXhwb3J0Cit1bnNldCBHSVRfSFRUUF9FWFBPUlRfQUxMCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBleHBvcnQgYnkgZGVmYXVsdCcgJworCWxvZ19kaXYgIm5vIGdpdC1kYWVtb24tZXhwb3J0LW9rIgorCWdldF9zdGF0aWNfZmlsZXMgIjQwNCBOb3QgRm91bmQiCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBvcnQgaWYgZ2l0LWRhZW1vbi1leHBvcnQtb2snICcKKwlsb2dfZGl2ICJnaXQtZGFlbW9uLWV4cG9ydC1vayIKKyAgICAgICAgKGNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCSB0b3VjaCBnaXQtZGFlbW9uLWV4cG9ydC1vaworCSkgJiYKKyAgICAgICAgZ2V0X3N0YXRpY19maWxlcyAiMjAwIE9LIgorJworU01BUlQ9c21hcnQKK2V4cG9ydCBHSVRfSFRUUF9FWFBPUlRfQUxMPTEKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXRpYyBmaWxlIGlmIGh0dHAuZ2V0YW55ZmlsZSB0cnVlIGlzIG9rJyAnCisJbG9nX2RpdiAiZ2V0YW55ZmlsZSB0cnVlIgorCWNvbmZpZyBodHRwLmdldGFueWZpbGUgdHJ1ZSAmJgorCWdldF9zdGF0aWNfZmlsZXMgIjIwMCBPSyIKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXRpYyBmaWxlIGlmIGh0dHAuZ2V0YW55ZmlsZSBmYWxzZSBmYWlscycgJworCWxvZ19kaXYgImdldGFueWZpbGUgZmFsc2UiCisJY29uZmlnIGh0dHAuZ2V0YW55ZmlsZSBmYWxzZSAmJgorCWdldF9zdGF0aWNfZmlsZXMgIjQwMyBGb3JiaWRkZW4iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAudXBsb2FkcGFjayBkZWZhdWx0IGVuYWJsZWQnICcKKwlsb2dfZGl2ICJ1cGxvYWRwYWNrIGRlZmF1bHQiCisJR0VUIGluZm8vcmVmcz9zZXJ2aWNlPWdpdC11cGxvYWQtcGFjayAiMjAwIE9LIiAgJiYKKwlQT1NUIGdpdC11cGxvYWQtcGFjayAwMDAwICIyMDAgT0siCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwLnVwbG9hZHBhY2sgdHJ1ZScgJworCWxvZ19kaXYgInVwbG9hZHBhY2sgdHJ1ZSIKKwljb25maWcgaHR0cC51cGxvYWRwYWNrIHRydWUgJiYKKwlHRVQgaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXVwbG9hZC1wYWNrICIyMDAgT0siICYmCisJUE9TVCBnaXQtdXBsb2FkLXBhY2sgMDAwMCAiMjAwIE9LIgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHR0cC51cGxvYWRwYWNrIGZhbHNlJyAnCisJbG9nX2RpdiAidXBsb2FkcGFjayBmYWxzZSIKKwljb25maWcgaHR0cC51cGxvYWRwYWNrIGZhbHNlICYmCisJR0VUIGluZm8vcmVmcz9zZXJ2aWNlPWdpdC11cGxvYWQtcGFjayAiNDAzIEZvcmJpZGRlbiIgJiYKKwlQT1NUIGdpdC11cGxvYWQtcGFjayAwMDAwICI0MDMgRm9yYmlkZGVuIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwLnJlY2VpdmVwYWNrIGRlZmF1bHQgZGlzYWJsZWQnICcKKwlsb2dfZGl2ICJyZWNlaXZlcGFjayBkZWZhdWx0IgorCUdFVCBpbmZvL3JlZnM/c2VydmljZT1naXQtcmVjZWl2ZS1wYWNrICI0MDMgRm9yYmlkZGVuIiAgJiYKKwlQT1NUIGdpdC1yZWNlaXZlLXBhY2sgMDAwMCAiNDAzIEZvcmJpZGRlbiIKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAucmVjZWl2ZXBhY2sgdHJ1ZScgJworCWxvZ19kaXYgInJlY2VpdmVwYWNrIHRydWUiCisJY29uZmlnIGh0dHAucmVjZWl2ZXBhY2sgdHJ1ZSAmJgorCUdFVCBpbmZvL3JlZnM/c2VydmljZT1naXQtcmVjZWl2ZS1wYWNrICIyMDAgT0siICYmCisJUE9TVCBnaXQtcmVjZWl2ZS1wYWNrIDAwMDAgIjIwMCBPSyIKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAucmVjZWl2ZXBhY2sgZmFsc2UnICcKKwlsb2dfZGl2ICJyZWNlaXZlcGFjayBmYWxzZSIKKwljb25maWcgaHR0cC5yZWNlaXZlcGFjayBmYWxzZSAmJgorCUdFVCBpbmZvL3JlZnM/c2VydmljZT1naXQtcmVjZWl2ZS1wYWNrICI0MDMgRm9yYmlkZGVuIiAmJgorCVBPU1QgZ2l0LXJlY2VpdmUtcGFjayAwMDAwICI0MDMgRm9yYmlkZGVuIgorJwpkaWZmIC0tZ2l0IGEvdC90NTcwMS1jbG9uZS1sb2NhbC5zaCBiL3QvdDU3MDEtY2xvbmUtbG9jYWwuc2gKaW5kZXggMTliNWMwZC4uOGI0YzM1NiAxMDA3NTUKLS0tIGEvdC90NTcwMS1jbG9uZS1sb2NhbC5zaAorKysgYi90L3Q1NzAxLWNsb25lLWxvY2FsLnNoCkBAIC0xMTksNyArMTE5LDkgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGVtcHR5IHJlcG9zaXRvcnknICcKIAljZCAiJEQiICYmCiAJbWtkaXIgZW1wdHkgJiYKLQkoY2QgZW1wdHkgJiYgZ2l0IGluaXQpICYmCisJKGNkIGVtcHR5ICYmCisJIGdpdCBpbml0ICYmCisJIGdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCB3YXJuKSAmJgogCWdpdCBjbG9uZSBlbXB0eSBlbXB0eS1jbG9uZSAmJgogCXRlc3RfdGljayAmJgogCShjZCBlbXB0eS1jbG9uZQpkaWZmIC0tZ2l0IGEvdC90NTcwMi1jbG9uZS1vcHRpb25zLnNoIGIvdC90NTcwMi1jbG9uZS1vcHRpb25zLnNoCmluZGV4IDI3ODI1ZjUuLjAyY2IwMjQgMTAwNzU1Ci0tLSBhL3QvdDU3MDItY2xvbmUtb3B0aW9ucy5zaAorKysgYi90L3Q1NzAyLWNsb25lLW9wdGlvbnMuc2gKQEAgLTI3LDcgKzI3LDggQEAKICcKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZGlyZWN0ZWQgY2xvbmUgLXYnICcKIAotCWdpdCBjbG9uZSAtdiAiZmlsZTovLyQocHdkKS9wYXJlbnQiIGNsb25lLXJlZGlyZWN0ZWQtdiA+b3V0IDI+ZXJyICYmCisJZ2l0IGNsb25lIC0tcHJvZ3Jlc3MgImZpbGU6Ly8kKHB3ZCkvcGFyZW50IiBjbG9uZS1yZWRpcmVjdGVkLXByb2dyZXNzIFwKKwkJPm91dCAyPmVyciAmJgogCXRlc3QgLXMgZXJyCiAKICcKZGlmZiAtLWdpdCBhL3QvdDU3MDUtY2xvbmUtMmdiLnNoIGIvdC90NTcwNS1jbG9uZS0yZ2Iuc2gKaW5kZXggOWY1MjE1NC4uYWRmYWFlOCAxMDA3NTUKLS0tIGEvdC90NTcwNS1jbG9uZS0yZ2Iuc2gKKysrIGIvdC90NTcwNS1jbG9uZS0yZ2Iuc2gKQEAgLTMxLDcgKzMxLDcgQEAKIAkgZWNobyAiZGF0YSA1IiAmJgogCSBlY2hvICI+MmdiIiAmJgogCSBjYXQgY29tbWl0KSB8Ci0JZ2l0IGZhc3QtaW1wb3J0ICYmCisJZ2l0IGZhc3QtaW1wb3J0IC0tYmlnLWZpbGUtdGhyZXNob2xkPTIgJiYKIAl0ZXN0ICEgLWYgZXhpdC1zdGF0dXMKIAogJwpkaWZmIC0tZ2l0IGEvdC90NTcwNi1jbG9uZS1icmFuY2guc2ggYi90L3Q1NzA2LWNsb25lLWJyYW5jaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mM2Y5YTc2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTcwNi1jbG9uZS1icmFuY2guc2gKQEAgLTAsMCArMSw2OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2Nsb25lIC0tYnJhbmNoIG9wdGlvbicKKy4gLi90ZXN0LWxpYi5zaAorCitjaGVja19IRUFEKCkgeworCWVjaG8gcmVmcy9oZWFkcy8iJDEiID5leHBlY3QgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKworY2hlY2tfZmlsZSgpIHsKKwllY2hvICIkMSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJbWtkaXIgcGFyZW50ICYmCisJKGNkIHBhcmVudCAmJiBnaXQgaW5pdCAmJgorCSBlY2hvIG9uZSA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwkgZ2l0IGNoZWNrb3V0IC1iIHR3byAmJgorCSBlY2hvIHR3byA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSB0d28gJiYKKwkgZ2l0IGNoZWNrb3V0IG1hc3RlcikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFuaWxsYSBjbG9uZSBjaG9vc2VzIEhFQUQnICcKKwlnaXQgY2xvbmUgcGFyZW50IGNsb25lICYmCisJKGNkIGNsb25lICYmCisJIGNoZWNrX0hFQUQgbWFzdGVyICYmCisJIGNoZWNrX2ZpbGUgb25lCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtYiBjaG9vc2VzIHNwZWNpZmllZCBicmFuY2gnICcKKwlnaXQgY2xvbmUgLWIgdHdvIHBhcmVudCBjbG9uZS10d28gJiYKKwkoY2QgY2xvbmUtdHdvICYmCisJIGNoZWNrX0hFQUQgdHdvICYmCisJIGNoZWNrX2ZpbGUgdHdvCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtYiBzZXRzIHVwIHRyYWNraW5nJyAnCisJKGNkIGNsb25lLXR3byAmJgorCSBlY2hvIG9yaWdpbiA+ZXhwZWN0ICYmCisJIGdpdCBjb25maWcgYnJhbmNoLnR3by5yZW1vdGUgPmFjdHVhbCAmJgorCSBlY2hvIHJlZnMvaGVhZHMvdHdvID4+ZXhwZWN0ICYmCisJIGdpdCBjb25maWcgYnJhbmNoLnR3by5tZXJnZSA+PmFjdHVhbCAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtYiBkb2VzIG5vdCBtdW5nZSByZW1vdGVzL29yaWdpbi9IRUFEJyAnCisJKGNkIGNsb25lLXR3byAmJgorCSBlY2hvIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyID5leHBlY3QgJiYKKwkgZ2l0IHN5bWJvbGljLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgPmFjdHVhbCAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtYiB3aXRoIGJvZ3VzIGJyYW5jaCBjaG9vc2VzIEhFQUQnICcKKwlnaXQgY2xvbmUgLWIgYm9ndXMgcGFyZW50IGNsb25lLWJvZ3VzICYmCisJKGNkIGNsb25lLWJvZ3VzICYmCisJIGNoZWNrX0hFQUQgbWFzdGVyICYmCisJIGNoZWNrX2ZpbGUgb25lCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMDBsaWIuc2ggYi90L3Q2MDAwbGliLnNoCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKaW5kZXggZjU1NjI3Yi4uOTg1ZDUxNwotLS0gYS90L3Q2MDAwbGliLnNoCisrKyBiL3QvdDYwMDBsaWIuc2gKQEAgLTEsMyArMSw1IEBACis6IGluY2x1ZGVkIGZyb20gNjAwMiBhbmQgb3RoZXJzCisKIFsgLWQgLmdpdC9yZWZzL3RhZ3MgXSB8fCBta2RpciAtcCAuZ2l0L3JlZnMvdGFncwogCiA6PiBzZWQuc2NyaXB0CmRpZmYgLS1naXQgYS90L3Q2MDA2LXJldi1saXN0LWZvcm1hdC5zaCBiL3QvdDYwMDYtcmV2LWxpc3QtZm9ybWF0LnNoCmluZGV4IDU5ZDFmNjIuLmIwMDQ3ZDMgMTAwNzU1Ci0tLSBhL3QvdDYwMDYtcmV2LWxpc3QtZm9ybWF0LnNoCisrKyBiL3QvdDYwMDYtcmV2LWxpc3QtZm9ybWF0LnNoCkBAIC0xOSw2ICsxOSwxMyBAQAogIgogfQogCit0ZXN0X2Zvcm1hdCBwZXJjZW50ICUlaCA8PCdFT0YnCitjb21taXQgMTMxYTMxMGViOTEzZDEwN2RkM2MwOWE2NWQxNjUxMTc1ODk4NzM1ZAorJWgKK2NvbW1pdCA4NmM3NWNmZDcwOGEwZTU4NjhkYzg3NmVkNWI4YmI2NmM4MGI0ODczCislaAorRU9GCisKIHRlc3RfZm9ybWF0IGhhc2ggJUglbiVoIDw8J0VPRicKIGNvbW1pdCAxMzFhMzEwZWI5MTNkMTA3ZGQzYzA5YTY1ZDE2NTExNzU4OTg3MzVkCiAxMzFhMzEwZWI5MTNkMTA3ZGQzYzA5YTY1ZDE2NTExNzU4OTg3MzVkCkBAIC0xNjIsNCArMTY5LDQ0IEBACiAJfQogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWwgTEYgYmVmb3JlIGVtcHR5ICgxKScgJworCWdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDoiJXMlbiUtYiVuVGhhbmtzJW4iIEhFQUReXiA+YWN0dWFsICYmCisJdGVzdCAkKHdjIC1sIDxhY3R1YWwpID0gMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWwgTEYgYmVmb3JlIGVtcHR5ICgyKScgJworCWdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDoiJXMlbiUtYiVuVGhhbmtzJW4iIEhFQUQgPmFjdHVhbCAmJgorCXRlc3QgJCh3YyAtbCA8YWN0dWFsKSA9IDYgJiYKKwlncmVwICJeJCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBMRiBiZWZvcmUgbm9uLWVtcHR5ICgxKScgJworCWdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDoiJXMlK2IlblRoYW5rcyVuIiBIRUFEXl4gPmFjdHVhbCAmJgorCXRlc3QgJCh3YyAtbCA8YWN0dWFsKSA9IDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIExGIGJlZm9yZSBub24tZW1wdHkgKDIpJyAnCisJZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiIlcyUrYiVuVGhhbmtzJW4iIEhFQUQgPmFjdHVhbCAmJgorCXRlc3QgJCh3YyAtbCA8YWN0dWFsKSA9IDYgJiYKKwlncmVwICJeJCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyIlaCAlZ0Q6ICVncyIgaXMgc2FtZSBhcyBnaXQtcmVmbG9nJyAnCisJZ2l0IHJlZmxvZyA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtZyAtLWZvcm1hdD0iJWggJWdEOiAlZ3MiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyIlaCAlZ0Q6ICVncyIgaXMgc2FtZSBhcyBnaXQtcmVmbG9nICh3aXRoIGRhdGUpJyAnCisJZ2l0IHJlZmxvZyAtLWRhdGU9cmF3ID5leHBlY3QgJiYKKwlnaXQgbG9nIC1nIC0tZm9ybWF0PSIlaCAlZ0Q6ICVncyIgLS1kYXRlPXJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclZ2Qgc2hvcnRlbnMgcmVmIG5hbWUnICcKKwllY2hvICJtYXN0ZXJAezB9IiA+ZXhwZWN0LmdkLXNob3J0ICYmCisJZ2l0IGxvZyAtZyAtMSAtLWZvcm1hdD0lZ2QgcmVmcy9oZWFkcy9tYXN0ZXIgPmFjdHVhbC5nZC1zaG9ydCAmJgorCXRlc3RfY21wIGV4cGVjdC5nZC1zaG9ydCBhY3R1YWwuZ2Qtc2hvcnQKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDEwLW1lcmdlLWJhc2Uuc2ggYi90L3Q2MDEwLW1lcmdlLWJhc2Uuc2gKaW5kZXggMDRlNGI3Yy4uMDE0NGQ5ZSAxMDA3NTUKLS0tIGEvdC90NjAxMC1tZXJnZS1iYXNlLnNoCisrKyBiL3QvdDYwMTAtbWVyZ2UtYmFzZS5zaApAQCAtMTEwLDYgKzExMCwxOCBAQAogCiAjIEFub3RoZXIgc2V0IHRvIGRlbW9uc3RyYXRlIGJhc2UgYmV0d2VlbiBvbmUgY29tbWl0IGFuZCBhIG1lcmdlCiAjIGluIHRoZSBkb2N1bWVudGF0aW9uLgorIworIyAqIEMgKE1NQykgKiBCIChNTUIpICogQSAgKE1NQSkKKyMgKiBvICAgICAgICogbyAgICAgICAqIG8KKyMgKiBvICAgICAgICogbyAgICAgICAqIG8KKyMgKiBvICAgICAgICogbyAgICAgICAqIG8KKyMgKiBvICAgICAgIHwgX19fX19fXy8KKyMgfCAgICAgICAgIHwvCisjIHwgICAgICAgICAqIDEgKE1NMSkKKyMgfCBfX19fX19fLworIyB8LworIyAqIHJvb3QgKE1NUikKKwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1iYXNlIGZvciBvY3RvcHVzLXN0ZXAgKHNldHVwKScgJwogCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gcm9vdCAmJiBnaXQgdGFnIE1NUiAmJgpAQCAtMTM3LDYgKzE0OSwxMiBAQAogCXRlc3QgIiRNTTEiID0gIiRNQiIKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtYmFzZSBBIEIgQyB1c2luZyBzaG93LWJyYW5jaCcgJworCU1CPSQoZ2l0IHNob3ctYnJhbmNoIC0tbWVyZ2UtYmFzZSBNTUEgTU1CIE1NQykgJiYKKwlNTVI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IE1NUikgJiYKKwl0ZXN0ICIkTU1SIiA9ICIkTUIiCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyaXNzLWNyb3NzIG1lcmdlLWJhc2UgZm9yIG9jdG9wdXMtc3RlcCAoc2V0dXApJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCBNTVIgJiYKIAl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIDEgJiYgZ2l0IHRhZyBDQzEgJiYKZGlmZiAtLWdpdCBhL3QvdDYwMTItcmV2LWxpc3Qtc2ltcGxpZnkuc2ggYi90L3Q2MDEyLXJldi1saXN0LXNpbXBsaWZ5LnNoCmluZGV4IDUxMGJiOTYuLmFmMzRhMWUgMTAwNzU1Ci0tLSBhL3QvdDYwMTItcmV2LWxpc3Qtc2ltcGxpZnkuc2gKKysrIGIvdC90NjAxMi1yZXYtbGlzdC1zaW1wbGlmeS5zaApAQCAtOCw5ICs4LDYgQEAKIAlnaXQgdGFnICIkMSIKIH0KIAotX3g0MD0nWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXScKLV94NDA9IiRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAiCi0KIHVubm90ZSAoKSB7CiAJZ2l0IG5hbWUtcmV2IC0tdGFncyAtLXN0ZGluIHwgc2VkIC1lICJzfCRfeDQwICh0YWdzL1woW14pXSpcKSkgfFwxIHxnIgogfQpkaWZmIC0tZ2l0IGEvdC90NjAxNS1yZXYtbGlzdC1zaG93LWFsbC1wYXJlbnRzLnNoIGIvdC90NjAxNS1yZXYtbGlzdC1zaG93LWFsbC1wYXJlbnRzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhiMTQ2ZmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDE1LXJldi1saXN0LXNob3ctYWxsLXBhcmVudHMuc2gKQEAgLTAsMCArMSwzMSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249Jy0tc2hvdy1hbGwgLS1wYXJlbnRzIGRvZXMgbm90IHJld3JpdGUgVFJFRVNBTUUgY29tbWl0cycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCAtLXNob3ctYWxsIC0tcGFyZW50cyB0ZXN0JyAnCisJdGVzdF9jb21taXQgb25lIGZvby50eHQgJiYKKwljb21taXQxPWBnaXQgcmV2LWxpc3QgLTEgSEVBRGAgJiYKKwl0ZXN0X2NvbW1pdCB0d28gYmFyLnR4dCAmJgorCWNvbW1pdDI9YGdpdCByZXYtbGlzdCAtMSBIRUFEYCAmJgorCXRlc3RfY29tbWl0IHRocmVlIGZvby50eHQgJiYKKwljb21taXQzPWBnaXQgcmV2LWxpc3QgLTEgSEVBRGAKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcGFyZW50cyByZXdyaXRlcyBUUkVFU0FNRSBwYXJlbnRzIGNvcnJlY3RseScgJworCWVjaG8gJGNvbW1pdDMgJGNvbW1pdDEgPiBleHBlY3RlZCAmJgorCWVjaG8gJGNvbW1pdDEgPj4gZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgLS1wYXJlbnRzIEhFQUQgLS0gZm9vLnR4dCA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1wYXJlbnRzIC0tc2hvdy1hbGwgZG9lcyBub3QgcmV3cml0ZXMgVFJFRVNBTUUgcGFyZW50cycgJworCWVjaG8gJGNvbW1pdDMgJGNvbW1pdDIgPiBleHBlY3RlZCAmJgorCWVjaG8gJGNvbW1pdDIgJGNvbW1pdDEgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICRjb21taXQxID4+IGV4cGVjdGVkICYmCisJZ2l0IHJldi1saXN0IC0tcGFyZW50cyAtLXNob3ctYWxsIEhFQUQgLS0gZm9vLnR4dCA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDE2LXJldi1saXN0LWdyYXBoLXNpbXBsaWZ5LWhpc3Rvcnkuc2ggYi90L3Q2MDE2LXJldi1saXN0LWdyYXBoLXNpbXBsaWZ5LWhpc3Rvcnkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjdmZDUyYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMTYtcmV2LWxpc3QtZ3JhcGgtc2ltcGxpZnktaGlzdG9yeS5zaApAQCAtMCwwICsxLDI3NiBAQAorIyEvYmluL3NoCisKKyMgVGhlcmUncyBtb3JlIHRoYW4gb25lICJjb3JyZWN0IiB3YXkgdG8gcmVwcmVzZW50IHRoZSBoaXN0b3J5IGdyYXBoaWNhbGx5LgorIyBUaGVzZSB0ZXN0cyBkZXBlbmQgb24gdGhlIGN1cnJlbnQgYmVoYXZpb3Igb2YgdGhlIGdyYXBoaW5nIGNvZGUuICBJZiB0aGUKKyMgZ3JhcGhpbmcgY29kZSBpcyBldmVyIGNoYW5nZWQgdG8gZHJhdyB0aGUgb3V0cHV0IGRpZmZlcmVudGx5LCB0aGVzZSB0ZXN0cworIyBjYXNlcyB3aWxsIG5lZWQgdG8gYmUgdXBkYXRlZCB0byBrbm93IGFib3V0IHRoZSBuZXcgbGF5b3V0LgorCit0ZXN0X2Rlc2NyaXB0aW9uPSctLWdyYXBoIGFuZCBzaW1wbGlmaWVkIGhpc3RvcnknCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgcmV2LWxpc3QgLS1ncmFwaCB0ZXN0JyAnCisJIyAzIGNvbW1pdHMgb24gYnJhbmNoIEEKKwl0ZXN0X2NvbW1pdCBBMSBmb28udHh0ICYmCisJdGVzdF9jb21taXQgQTIgYmFyLnR4dCAmJgorCXRlc3RfY29tbWl0IEEzIGJhci50eHQgJiYKKwlnaXQgYnJhbmNoIC1tIG1hc3RlciBBICYmCisKKwkjIDIgY29tbWl0cyBvbiBicmFuY2ggQiwgc3RhcnRlZCBmcm9tIEExCisJZ2l0IGNoZWNrb3V0IC1iIEIgQTEgJiYKKwl0ZXN0X2NvbW1pdCBCMSBmb28udHh0ICYmCisJdGVzdF9jb21taXQgQjIgYWJjLnR4dCAmJgorCisJIyAyIGNvbW1pdHMgb24gYnJhbmNoIEMsIHN0YXJ0ZWQgZnJvbSBBMgorCWdpdCBjaGVja291dCAtYiBDIEEyICYmCisJdGVzdF9jb21taXQgQzEgeHl6LnR4dCAmJgorCXRlc3RfY29tbWl0IEMyIHh5ei50eHQgJiYKKworCSMgT2N0b3B1cyBtZXJnZSBCIGFuZCBDIGludG8gYnJhbmNoIEEKKwlnaXQgY2hlY2tvdXQgQSAmJgorCWdpdCBtZXJnZSBCIEMgJiYKKwlnaXQgdGFnIEE0CisKKwl0ZXN0X2NvbW1pdCBBNSBiYXIudHh0ICYmCisKKwkjIE1vcmUgY29tbWl0cyBvbiBDLCB0aGVuIG1lcmdlIEMgaW50byBBCisJZ2l0IGNoZWNrb3V0IEMgJiYKKwl0ZXN0X2NvbW1pdCBDMyBmb28udHh0ICYmCisJdGVzdF9jb21taXQgQzQgYmFyLnR4dCAmJgorCWdpdCBjaGVja291dCBBICYmCisJZ2l0IG1lcmdlIC1zIG91cnMgQyAmJgorCWdpdCB0YWcgQTYKKworCXRlc3RfY29tbWl0IEE3IGJhci50eHQgJiYKKworCSMgU3RvcmUgY29tbWl0IG5hbWVzIGluIHZhcmlhYmxlcyBmb3IgbGF0ZXIgdXNlCisJQTE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEExKSAmJgorCUEyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBBMikgJiYKKwlBMz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQTMpICYmCisJQTQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEE0KSAmJgorCUE1PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBBNSkgJiYKKwlBNj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQTYpICYmCisJQTc9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEE3KSAmJgorCUIxPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBCMSkgJiYKKwlCMj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQjIpICYmCisJQzE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEMxKSAmJgorCUMyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBDMikgJiYKKwlDMz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQzMpICYmCisJQzQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEM0KQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ncmFwaCAtLWFsbCcgJworCXJtIC1mIGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTciID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAgICRBNiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8XFwgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogJEM0IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiAkQzMiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiB8ICRBNSIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8IHwgICAgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICBcXCAgICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKi0uIFxcICAgJEE0IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInxcXCBcXCBcXCAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgfCB8LyAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgfCAqICRDMiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8IHwgKiAkQzEiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqIHwgJEIyIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiB8ICRCMSIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqIHwgfCAkQTMiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCB8LyAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwvfCAgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqIHwgJEEyIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwvICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTEiID4+IGV4cGVjdGVkICYmCisJZ2l0IHJldi1saXN0IC0tZ3JhcGggLS1hbGwgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKyMgTWFrZSBzdXJlIHRoZSBncmFwaF9pc19pbnRlcmVzdGluZygpIGNvZGUgc3RpbGwgcmVhbGl6ZXMKKyMgdGhhdCB1bmRlY29yYXRlZCBtZXJnZXMgYXJlIGludGVyZXN0aW5nLCBldmVuIHdpdGggLS1zaW1wbGlmeS1ieS1kZWNvcmF0aW9uCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWdyYXBoIC0tc2ltcGxpZnktYnktZGVjb3JhdGlvbicgJworCXJtIC1mIGV4cGVjdGVkICYmCisJZ2l0IHRhZyAtZCBBNAorCWVjaG8gIiogJEE3IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogICAkQTYiID4+IGV4cGVjdGVkICYmCisJZWNobyAifFxcICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqICRDNCIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogJEMzIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogfCAkQTUiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCB8ICAgICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAgXFwgICAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiotLiBcXCAgICRBNCIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8XFwgXFwgXFwgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8IHwgfC8gICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8IHwgKiAkQzIiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCB8ICogJEMxIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiB8ICRCMiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogfCAkQjEiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiB8IHwgJEEzIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgfC8gICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8L3wgICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiB8ICRBMiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8LyAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEExIiA+PiBleHBlY3RlZCAmJgorCWdpdCByZXYtbGlzdCAtLWdyYXBoIC0tYWxsIC0tc2ltcGxpZnktYnktZGVjb3JhdGlvbiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworIyBHZXQgcmlkIG9mIGFsbCBkZWNvcmF0aW9ucyBvbiBicmFuY2ggQiwgYW5kIGdyYXBoIHdpdGggaXQgc2ltcGxpZmllZCBhd2F5Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWdyYXBoIC0tc2ltcGxpZnktYnktZGVjb3JhdGlvbiBwcnVuZSBicmFuY2ggQicgJworCXJtIC1mIGV4cGVjdGVkICYmCisJZ2l0IHRhZyAtZCBCMgorCWdpdCB0YWcgLWQgQjEKKwlnaXQgYnJhbmNoIC1kIEIKKwllY2hvICIqICRBNyIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICAgJEE2IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInxcXCAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiAkQzQiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqICRDMyIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqIHwgJEE1IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogfCAgICRBNCIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8XFwgXFwgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8IHwvICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqICRDMiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogJEMxIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogfCAkQTMiID4+IGV4cGVjdGVkICYmCisJZWNobyAifC8gICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBMiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBMSIgPj4gZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgLS1ncmFwaCAtLXNpbXBsaWZ5LWJ5LWRlY29yYXRpb24gLS1hbGwgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZ3JhcGggLS1mdWxsLWhpc3RvcnkgLS0gYmFyLnR4dCcgJworCXJtIC1mIGV4cGVjdGVkICYmCisJZ2l0IHRhZyAtZCBCMgorCWdpdCB0YWcgLWQgQjEKKwlnaXQgYnJhbmNoIC1kIEIKKwllY2hvICIqICRBNyIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICAgJEE2IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInxcXCAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiAkQzQiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiB8ICRBNSIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqIHwgICAkQTQiID4+IGV4cGVjdGVkICYmCisJZWNobyAifFxcIFxcICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCB8LyAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogfCAkQTMiID4+IGV4cGVjdGVkICYmCisJZWNobyAifC8gICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBMiIgPj4gZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgLS1ncmFwaCAtLWZ1bGwtaGlzdG9yeSAtLWFsbCAtLSBiYXIudHh0ID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWdyYXBoIC0tZnVsbC1oaXN0b3J5IC0tc2ltcGxpZnktbWVyZ2VzIC0tIGJhci50eHQnICcKKwlybSAtZiBleHBlY3RlZCAmJgorCWdpdCB0YWcgLWQgQjIKKwlnaXQgdGFnIC1kIEIxCisJZ2l0IGJyYW5jaCAtZCBCCisJZWNobyAiKiAkQTciID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAgICRBNiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8XFwgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogJEM0IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogfCAkQTUiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiB8ICRBMyIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8LyAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEEyIiA+PiBleHBlY3RlZCAmJgorCWdpdCByZXYtbGlzdCAtLWdyYXBoIC0tZnVsbC1oaXN0b3J5IC0tc2ltcGxpZnktbWVyZ2VzIC0tYWxsIFwKKwkJLS0gYmFyLnR4dCA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ncmFwaCAtLSBiYXIudHh0JyAnCisJcm0gLWYgZXhwZWN0ZWQgJiYKKwlnaXQgdGFnIC1kIEIyCisJZ2l0IHRhZyAtZCBCMQorCWdpdCBicmFuY2ggLWQgQgorCWVjaG8gIiogJEE3IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEE1IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEEzIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiAkQzQiID4+IGV4cGVjdGVkICYmCisJZWNobyAifC8gICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBMiIgPj4gZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgLS1ncmFwaCAtLWFsbCAtLSBiYXIudHh0ID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWdyYXBoIC0tc3BhcnNlIC0tIGJhci50eHQnICcKKwlybSAtZiBleHBlY3RlZCAmJgorCWdpdCB0YWcgLWQgQjIKKwlnaXQgdGFnIC1kIEIxCisJZ2l0IGJyYW5jaCAtZCBCCisJZWNobyAiKiAkQTciID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTYiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTUiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTQiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTMiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqICRDNCIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogJEMzIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiAkQzIiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqICRDMSIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8LyAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEEyIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEExIiA+PiBleHBlY3RlZCAmJgorCWdpdCByZXYtbGlzdCAtLWdyYXBoIC0tc3BhcnNlIC0tYWxsIC0tIGJhci50eHQgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZ3JhcGggXkM0JyAnCisJcm0gLWYgZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBNyIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBNiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBNSIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICAgJEE0IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInxcXCAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiAkQjIiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqICRCMSIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBMyIgPj4gZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgLS1ncmFwaCAtLWFsbCBeQzQgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZ3JhcGggXkMzJyAnCisJcm0gLWYgZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBNyIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICAgJEE2IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInxcXCAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiAkQzQiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTUiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAgICRBNCIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8XFwgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogJEIyIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiAkQjEiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTMiID4+IGV4cGVjdGVkICYmCisJZ2l0IHJldi1saXN0IC0tZ3JhcGggLS1hbGwgXkMzID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisjIEkgZG9uJ3QgdGhpbmsgdGhlIG9yZGVyaW5nIG9mIHRoZSBib3VuZGFyeSBjb21taXRzIGlzIHJlYWxseQorIyB0aGF0IGltcG9ydGFudCwgYnV0IHRoaXMgdGVzdCBkZXBlbmRzIG9uIGl0LiAgSWYgdGhlIG9yZGVyaW5nIGV2ZXIgY2hhbmdlcworIyBpbiB0aGUgY29kZSwgd2UnbGwgbmVlZCB0byB1cGRhdGUgdGhpcyB0ZXN0LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ncmFwaCAtLWJvdW5kYXJ5IF5DMycgJworCXJtIC1mIGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTciID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAgICRBNiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8XFwgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogJEM0IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogfCAkQTUiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCB8ICAgICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAgXFwgICAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiotLiBcXCAgICRBNCIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8XFwgXFwgXFwgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogfCB8ICRCMiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogfCB8ICRCMSIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqIHwgfCB8ICRBMyIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJvIHwgfCB8ICRBMiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8LyAvIC8gICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJvIHwgfCAkQTEiID4+IGV4cGVjdGVkICYmCisJZWNobyAiIC8gLyAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgbyAkQzMiID4+IGV4cGVjdGVkICYmCisJZWNobyAifC8gICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJvICRDMiIgPj4gZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgLS1ncmFwaCAtLWJvdW5kYXJ5IC0tYWxsIF5DMyA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDE3LXJldi1saXN0LXN0ZGluLnNoIGIvdC90NjAxNy1yZXYtbGlzdC1zdGRpbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMWMzMmRiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAxNy1yZXYtbGlzdC1zdGRpbi5zaApAQCAtMCwwICsxLDYxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5LCBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdsb2cgZmFtaWx5IGxlYXJucyAtLXN0ZGluJworCisuIC4vdGVzdC1saWIuc2gKKworY2hlY2sgKCkgeworCWZvciBjbWQgaW4gcmV2LWxpc3QgImxvZyAtLXN0YXQiCisJZG8KKwkJZm9yIGkgaW4gIiRAIgorCQlkbworCQkJcHJpbnRmICIlc1xuIiAkaQorCQlkb25lID5pbnB1dCAmJgorCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVjayAkY21kICQqIiAnCisJCQlnaXQgJGNtZCAkKGNhdCBpbnB1dCkgPmV4cGVjdCAmJgorCQkJZ2l0ICRjbWQgLS1zdGRpbiA8aW5wdXQgPmFjdHVhbCAmJgorCQkJc2VkIC1lICJzL14vaW5wdXQgLyIgaW5wdXQgJiYKKwkJCXNlZCAtZSAicy9eL291dHB1dCAvIiBleHBlY3QgJiYKKwkJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkJJworCWRvbmUKK30KKwordGhlbT0nMSAyIDMgNCA1IDYgNycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJKAorCQlmb3IgaSBpbiAwICR0aGVtCisJCWRvCisJCQlmb3IgaiBpbiAkdGhlbQorCQkJZG8KKwkJCQllY2hvICRpLiRqID5maWxlLSRqICYmCisJCQkJZ2l0IGFkZCBmaWxlLSRqIHx8IGV4aXQKKwkJCWRvbmUgJiYKKwkJCXRlc3RfdGljayAmJgorCQkJZ2l0IGNvbW1pdCAtbSAkaSB8fCBleGl0CisJCWRvbmUgJiYKKwkJZm9yIGkgaW4gJHRoZW0KKwkJZG8KKwkJCWdpdCBjaGVja291dCAtYiBzaWRlLSRpIG1hc3Rlcn4kaSAmJgorCQkJZWNobyB1cGRhdGVkICRpID5maWxlLSRpICYmCisJCQlnaXQgYWRkIGZpbGUtJGkgJiYKKwkJCXRlc3RfdGljayAmJgorCQkJZ2l0IGNvbW1pdCAtbSBzaWRlLSRpIHx8IGV4aXQKKwkJZG9uZQorCSkKKycKKworY2hlY2sgbWFzdGVyCitjaGVjayBzaWRlLTEgXnNpZGUtNAorY2hlY2sgc2lkZS0xIF5zaWRlLTcgLS0KK2NoZWNrIHNpZGUtMSBec2lkZS03IC0tIGZpbGUtMQorY2hlY2sgc2lkZS0xIF5zaWRlLTcgLS0gZmlsZS0yCitjaGVjayBzaWRlLTMgXnNpZGUtNCAtLSBmaWxlLTMKK2NoZWNrIHNpZGUtMyBec2lkZS0yCitjaGVjayBzaWRlLTMgXnNpZGUtMiAtLSBmaWxlLTEKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDE4LXJldi1saXN0LWdsb2Iuc2ggYi90L3Q2MDE4LXJldi1saXN0LWdsb2Iuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGQzZmE3ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMTgtcmV2LWxpc3QtZ2xvYi5zaApAQCAtMCwwICsxLDE5NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Jldi1saXN0L3Jldi1wYXJzZSAtLWdsb2InCisKKy4gLi90ZXN0LWxpYi5zaAorCitjb21taXQgKCkgeworCXRlc3RfdGljayAmJgorCWVjaG8gJDEgPiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLW0gIiQxIgorfQorCitjb21wYXJlICgpIHsKKwkjIFNwbGl0IGFyZ3VtZW50cyBvbiB3aGl0ZXNwYWNlLgorCWdpdCAkMSAkMiA+ZXhwZWN0ZWQgJiYKKwlnaXQgJDEgJDMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCisJY29tbWl0IG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtYiBzdWJzcGFjZS9vbmUgbWFzdGVyICYmCisJY29tbWl0IG9uZSAmJgorCWdpdCBjaGVja291dCAtYiBzdWJzcGFjZS90d28gbWFzdGVyICYmCisJY29tbWl0IHR3byAmJgorCWdpdCBjaGVja291dCAtYiBzdWJzcGFjZS14IG1hc3RlciAmJgorCWNvbW1pdCBzdWJzcGFjZS14ICYmCisJZ2l0IGNoZWNrb3V0IC1iIG90aGVyL3RocmVlIG1hc3RlciAmJgorCWNvbW1pdCB0aHJlZSAmJgorCWdpdCBjaGVja291dCAtYiBzb21lcmVmIG1hc3RlciAmJgorCWNvbW1pdCBzb21lICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWNvbW1pdCBtYXN0ZXIyICYmCisJZ2l0IHRhZyBmb28vYmFyIG1hc3RlciAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9mb28vYmF6IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgLS1nbG9iPXJlZnMvaGVhZHMvc3Vic3BhY2UvKicgJworCisJY29tcGFyZSByZXYtcGFyc2UgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iICItLWdsb2I9cmVmcy9oZWFkcy9zdWJzcGFjZS8qIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLWdsb2I9aGVhZHMvc3Vic3BhY2UvKicgJworCisJY29tcGFyZSByZXYtcGFyc2UgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iICItLWdsb2I9aGVhZHMvc3Vic3BhY2UvKiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgLS1nbG9iPXJlZnMvaGVhZHMvc3Vic3BhY2UvJyAnCisKKwljb21wYXJlIHJldi1wYXJzZSAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tZ2xvYj1yZWZzL2hlYWRzL3N1YnNwYWNlLyIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgLS1nbG9iPWhlYWRzL3N1YnNwYWNlLycgJworCisJY29tcGFyZSByZXYtcGFyc2UgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iICItLWdsb2I9aGVhZHMvc3Vic3BhY2UvIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLWdsb2I9aGVhZHMvc3Vic3BhY2UnICcKKworCWNvbXBhcmUgcmV2LXBhcnNlICJzdWJzcGFjZS9vbmUgc3Vic3BhY2UvdHdvIiAiLS1nbG9iPWhlYWRzL3N1YnNwYWNlIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLWJyYW5jaGVzPXN1YnNwYWNlLyonICcKKworCWNvbXBhcmUgcmV2LXBhcnNlICJzdWJzcGFjZS9vbmUgc3Vic3BhY2UvdHdvIiAiLS1icmFuY2hlcz1zdWJzcGFjZS8qIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLWJyYW5jaGVzPXN1YnNwYWNlLycgJworCisJY29tcGFyZSByZXYtcGFyc2UgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iICItLWJyYW5jaGVzPXN1YnNwYWNlLyIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgLS1icmFuY2hlcz1zdWJzcGFjZScgJworCisJY29tcGFyZSByZXYtcGFyc2UgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iICItLWJyYW5jaGVzPXN1YnNwYWNlIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLWdsb2I9aGVhZHMvc3Vic3BhY2UvKiAtLWdsb2I9aGVhZHMvb3RoZXIvKicgJworCisJY29tcGFyZSByZXYtcGFyc2UgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28gb3RoZXIvdGhyZWUiICItLWdsb2I9aGVhZHMvc3Vic3BhY2UvKiAtLWdsb2I9aGVhZHMvb3RoZXIvKiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgLS1nbG9iPWhlYWRzL3NvbWVyZWYvKiBtYXN0ZXInICcKKworCWNvbXBhcmUgcmV2LXBhcnNlICJtYXN0ZXIiICItLWdsb2I9aGVhZHMvc29tZXJlZi8qIG1hc3RlciIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgLS1nbG9iPWhlYWRzLyonICcKKworCWNvbXBhcmUgcmV2LXBhcnNlICJtYXN0ZXIgb3RoZXIvdGhyZWUgc29tZXJlZiBzdWJzcGFjZS14IHN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iICItLWdsb2I9aGVhZHMvKiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgLS10YWdzPWZvbycgJworCisJY29tcGFyZSByZXYtcGFyc2UgImZvby9iYXIiICItLXRhZ3M9Zm9vIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLXJlbW90ZXM9Zm9vJyAnCisKKwljb21wYXJlIHJldi1wYXJzZSAiZm9vL2JheiIgIi0tcmVtb3Rlcz1mb28iCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1nbG9iPXJlZnMvaGVhZHMvc3Vic3BhY2UvKicgJworCisJY29tcGFyZSByZXYtbGlzdCAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tZ2xvYj1yZWZzL2hlYWRzL3N1YnNwYWNlLyoiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1nbG9iPWhlYWRzL3N1YnNwYWNlLyonICcKKworCWNvbXBhcmUgcmV2LWxpc3QgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iICItLWdsb2I9aGVhZHMvc3Vic3BhY2UvKiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLWdsb2I9cmVmcy9oZWFkcy9zdWJzcGFjZS8nICcKKworCWNvbXBhcmUgcmV2LWxpc3QgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iICItLWdsb2I9cmVmcy9oZWFkcy9zdWJzcGFjZS8iCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1nbG9iPWhlYWRzL3N1YnNwYWNlLycgJworCisJY29tcGFyZSByZXYtbGlzdCAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tZ2xvYj1oZWFkcy9zdWJzcGFjZS8iCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1nbG9iPWhlYWRzL3N1YnNwYWNlJyAnCisKKwljb21wYXJlIHJldi1saXN0ICJzdWJzcGFjZS9vbmUgc3Vic3BhY2UvdHdvIiAiLS1nbG9iPWhlYWRzL3N1YnNwYWNlIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tYnJhbmNoZXM9c3Vic3BhY2UvKicgJworCisJY29tcGFyZSByZXYtbGlzdCAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tYnJhbmNoZXM9c3Vic3BhY2UvKiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLWJyYW5jaGVzPXN1YnNwYWNlLycgJworCisJY29tcGFyZSByZXYtbGlzdCAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tYnJhbmNoZXM9c3Vic3BhY2UvIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tYnJhbmNoZXM9c3Vic3BhY2UnICcKKworCWNvbXBhcmUgcmV2LWxpc3QgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iICItLWJyYW5jaGVzPXN1YnNwYWNlIgorCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLWdsb2I9aGVhZHMvc29tZXJlZi8qIG1hc3RlcicgJworCisJY29tcGFyZSByZXYtbGlzdCAibWFzdGVyIiAiLS1nbG9iPWhlYWRzL3NvbWVyZWYvKiBtYXN0ZXIiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1nbG9iPWhlYWRzL3N1YnNwYWNlLyogLS1nbG9iPWhlYWRzL290aGVyLyonICcKKworCWNvbXBhcmUgcmV2LWxpc3QgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28gb3RoZXIvdGhyZWUiICItLWdsb2I9aGVhZHMvc3Vic3BhY2UvKiAtLWdsb2I9aGVhZHMvb3RoZXIvKiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLWdsb2I9aGVhZHMvKicgJworCisJY29tcGFyZSByZXYtbGlzdCAibWFzdGVyIG90aGVyL3RocmVlIHNvbWVyZWYgc3Vic3BhY2UteCBzdWJzcGFjZS9vbmUgc3Vic3BhY2UvdHdvIiAiLS1nbG9iPWhlYWRzLyoiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS10YWdzPWZvbycgJworCisJY29tcGFyZSByZXYtbGlzdCAiZm9vL2JhciIgIi0tdGFncz1mb28iCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1yZW1vdGVzPWZvbycgJworCisJY29tcGFyZSByZXYtbGlzdCAiZm9vL2JheiIgIi0tcmVtb3Rlcz1mb28iCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDIwLW1lcmdlLWRmLnNoIGIvdC90NjAyMC1tZXJnZS1kZi5zaAppbmRleCBhMTlkNDlkLi5lNzFjNjg3IDEwMDc1NQotLS0gYS90L3Q2MDIwLW1lcmdlLWRmLnNoCisrKyBiL3QvdDYwMjAtbWVyZ2UtZGYuc2gKQEAgLTIyLDQgKzIyLDI3IEBACiAKIHRlc3RfZXhwZWN0X2NvZGUgMSAnTWVyZ2Ugd2l0aCBkL2YgY29uZmxpY3RzJyAnZ2l0IG1lcmdlICJtZXJnZSBtc2ciIEIgbWFzdGVyJwogCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdGL0QgY29uZmxpY3QnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXJtIC5naXQvaW5kZXggJiYKKworCW1rZGlyIGJlZm9yZSAmJgorCWVjaG8gRklMRSA+YmVmb3JlL29uZSAmJgorCWVjaG8gRklMRSA+YWZ0ZXIgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tIGZpcnN0ICYmCisKKwlybSAtZiBhZnRlciAmJgorCWdpdCBtdiBiZWZvcmUgYWZ0ZXIgJiYKKwlnaXQgY29tbWl0IC1tIG1vdmUgJiYKKworCWdpdCBjaGVja291dCAtYiBwYXJhIEhFQUReICYmCisJZWNobyBDT01QTEVURUxZIEFOT1RIRVIgRklMRSA+YW5vdGhlciAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gcGFyYSAmJgorCisJZ2l0IG1lcmdlIG1hc3RlcgorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMjMtbWVyZ2UtZmlsZS5zaCBiL3QvdDYwMjMtbWVyZ2UtZmlsZS5zaAppbmRleCA3ZGNmMzkxLi42MjkxMzA3IDEwMDc1NQotLS0gYS90L3Q2MDIzLW1lcmdlLWZpbGUuc2gKKysrIGIvdC90NjAyMy1tZXJnZS1maWxlLnNoCkBAIC0xNDYsOCArMTQ2LDggQEAKIAlncmVwICJDYW5ub3QgbWVyZ2UgYmluYXJ5IGZpbGVzIiBtZXJnZS5lcnIKICcKIAotc2VkIC1lICJzL2RlZXJpdC4kL2RlZXJpdDsvIiAtZSAicy9tZTskL21lLi8iIDwgbmV3NS50eHQgPiBuZXc2LnR4dAotc2VkIC1lICJzL2RlZXJpdC4kL2RlZXJpdCwvIiAtZSAicy9tZTskL21lLC8iIDwgbmV3NS50eHQgPiBuZXc3LnR4dAorc2VkIC1lICJzL2RlZXJpdC5cJC9kZWVyaXQ7LyIgLWUgInMvbWU7XCQvbWUuLyIgPCBuZXc1LnR4dCA+IG5ldzYudHh0CitzZWQgLWUgInMvZGVlcml0LlwkL2RlZXJpdCwvIiAtZSAicy9tZTtcJC9tZSwvIiA8IG5ldzUudHh0ID4gbmV3Ny50eHQKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnTUVSR0VfWkVBTE9VUyBzaW1wbGlmaWVzIG5vbi1jb25mbGljdHMnICcKIApkaWZmIC0tZ2l0IGEvdC90NjAyNC1yZWN1cnNpdmUtbWVyZ2Uuc2ggYi90L3Q2MDI0LXJlY3Vyc2l2ZS1tZXJnZS5zaAppbmRleCAxMjlmYTMwLi5iM2ZiZjY1IDEwMDc1NQotLS0gYS90L3Q2MDI0LXJlY3Vyc2l2ZS1tZXJnZS5zaAorKysgYi90L3Q2MDI0LXJlY3Vyc2l2ZS1tZXJnZS5zaApAQCAtNjUsMTggKzY1LDE4IEBACiAiCiAKIGNhdCA+IGV4cGVjdCA8PCBFT0YKLTw8PDw8PDwgSEVBRDphMQorPDw8PDw8PCBIRUFECiBGCiA9PT09PT09CiBHCi0+Pj4+Pj4+IEc6YTEKKz4+Pj4+Pj4gRwogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlc3VsdCBjb250YWlucyBhIGNvbmZsaWN0IiAidGVzdF9jbXAgZXhwZWN0IGExIgogCiBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+IG91dAogY2F0ID4gZXhwZWN0IDw8IEVPRgotMTAwNjQ0IGRhMDU2Y2UxNGEyMjQxNTA5ODk3ZmE2OGJiMmIzYjZlNjE5NGVmOWUgMQlhMQorMTAwNjQ0IDQzOWNjNDZkZTc3M2Q4YTgzYzc3Nzk5YjdjYzkxOTFjMTI4YmZjZmYgMQlhMQogMTAwNjQ0IGNmODQ0NDNlNDllMWIzNjZmYWM5Mzg3MTFkZGY0YmUyZDRkMWQ5ZTkgMglhMQogMTAwNjQ0IGZkNzkyMzUyOTg1NWQwYjI3NDc5NWFlMzM0OWM1ZTA0MzgzMzM5NzkgMwlhMQogRU9GCkBAIC05Myw4ICs5Myw3IEBACiAJZ2l0IGFkZCBiaW5hcnktZmlsZSAmJgogCWdpdCBjb21taXQgLW0gYmluYXJ5MiAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBGID4gbWVyZ2Uub3V0IDI+IG1lcmdlLmVyciAmJgotCWdyZXAgIkNhbm5vdCBtZXJnZSBiaW5hcnkgZmlsZXM6IEhFQUQ6YmluYXJ5LWZpbGUgdnMuIEY6YmluYXJ5LWZpbGUiIFwKLQkJbWVyZ2UuZXJyCisJZ3JlcCAiQ2Fubm90IG1lcmdlIGJpbmFyeSBmaWxlczogYmluYXJ5LWZpbGUgKEhFQUQgdnMuIEYpIiBtZXJnZS5lcnIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFyayByZW5hbWUvZGVsZXRlIGFzIHVubWVyZ2VkJyAnCmRpZmYgLS1naXQgYS90L3Q2MDI2LW1lcmdlLWF0dHIuc2ggYi90L3Q2MDI2LW1lcmdlLWF0dHIuc2gKaW5kZXggMWJhMGEyNS4uNWU0Mzk5NyAxMDA3NTUKLS0tIGEvdC90NjAyNi1tZXJnZS1hdHRyLnNoCisrKyBiL3QvdDYwMjYtbWVyZ2UtYXR0ci5zaApAQCAtNzAsNiArNzAsMTggQEAKIAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXRyeSB0aGUgbWVyZ2Ugd2l0aCBsb25nZXIgY29udGV4dCcgJworCWVjaG8gdGV4dCBjb25mbGljdC1tYXJrZXItc2l6ZT0zMiA+Pi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNoZWNrb3V0IC1tIHRleHQgJiYKKwlzZWQgLW5lICIvXlwoWzw9Pl1cKVwxXDFcMSoveworCQlzLyAuKiQvLworCQlwCisJfSIgPmFjdHVhbCB0ZXh0ICYmCisJZ3JlcCAiPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4iIGFjdHVhbCAmJgorCWdyZXAgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IiBhY3R1YWwgJiYKKwlncmVwICI8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PCIgYWN0dWFsCisnCisKIGNhdCA+Li9jdXN0b20tbWVyZ2UgPDxcRU9GCiAjIS9iaW4vc2gKIApkaWZmIC0tZ2l0IGEvdC90NjAyOC1tZXJnZS11cC10by1kYXRlLnNoIGIvdC90NjAyOC1tZXJnZS11cC10by1kYXRlLnNoCmluZGV4IGY4ZjNlM2YuLmE5MTY0NGUgMTAwNzU1Ci0tLSBhL3QvdDYwMjgtbWVyZ2UtdXAtdG8tZGF0ZS5zaAorKysgYi90L3Q2MDI4LW1lcmdlLXVwLXRvLWRhdGUuc2gKQEAgLTEsNiArMSw2IEBACiAjIS9iaW4vc2gKIAotdGVzdF9kZXNjcmlwdGlvbj0nbWVyZ2UgZmFzdCBmb3J3YXJkIGFuZCB1cCB0byBkYXRlJwordGVzdF9kZXNjcmlwdGlvbj0nbWVyZ2UgZmFzdC1mb3J3YXJkIGFuZCB1cCB0byBkYXRlJwogCiAuIC4vdGVzdC1saWIuc2gKIApkaWZmIC0tZ2l0IGEvdC90NjAyOS1tZXJnZS1zdWJ0cmVlLnNoIGIvdC90NjAyOS1tZXJnZS1zdWJ0cmVlLnNoCmluZGV4IDViYmZhNDQuLjM5MDBkOWYgMTAwNzU1Ci0tLSBhL3QvdDYwMjktbWVyZ2Utc3VidHJlZS5zaAorKysgYi90L3Q2MDI5LW1lcmdlLXN1YnRyZWUuc2gKQEAgLTUyLDYgKzUyLDcgQEAKIAlnaXQgbWVyZ2UgLXMgb3VycyAtLW5vLWNvbW1pdCBndWkvbWFzdGVyICYmCiAJZ2l0IHJlYWQtdHJlZSAtLXByZWZpeD1naXQtZ3VpLyAtdSBndWkvbWFzdGVyICYmCiAJZ2l0IGNvbW1pdCAtbSAiTWVyZ2UgZ2l0LWd1aSBhcyBvdXIgc3ViZGlyZWN0b3J5IiAmJgorCWdpdCBjaGVja291dCAtYiB3b3JrICYmCiAJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKIAkoCiAJCWVjaG8gIjEwMDY0NCAkbzEgMAlnaXQtZ3VpL2dpdC1ndWkuc2giCkBAIC02NSw5ICs2NiwxMCBAQAogCWVjaG8gZ2l0LWd1aTIgPiBnaXQtZ3VpLnNoICYmCiAJbzM9JChnaXQgaGFzaC1vYmplY3QgZ2l0LWd1aS5zaCkgJiYKIAlnaXQgYWRkIGdpdC1ndWkuc2ggJiYKKwlnaXQgY2hlY2tvdXQgLWIgbWFzdGVyMiAmJgogCWdpdCBjb21taXQgLW0gInVwZGF0ZSBnaXQtZ3VpIiAmJgogCWNkIC4uL2dpdCAmJgotCWdpdCBwdWxsIC1zIHN1YnRyZWUgZ3VpIG1hc3RlciAmJgorCWdpdCBwdWxsIC1zIHN1YnRyZWUgZ3VpIG1hc3RlcjIgJiYKIAlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgogCSgKIAkJZWNobyAiMTAwNjQ0ICRvMyAwCWdpdC1ndWkvZ2l0LWd1aS5zaCIKQEAgLTc2LDQgKzc4LDQ3IEBACiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWwgYW1iaWd1b3VzIHN1YnRyZWUnICcKKwljZCAuLi9naXQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtYiBtYXN0ZXIyICYmCisJZ2l0IG1lcmdlIC1zIG91cnMgLS1uby1jb21taXQgZ3VpL21hc3RlciAmJgorCWdpdCByZWFkLXRyZWUgLS1wcmVmaXg9Z2l0LWd1aTIvIC11IGd1aS9tYXN0ZXIgJiYKKwlnaXQgY29tbWl0IC1tICJNZXJnZSBnaXQtZ3VpMiBhcyBvdXIgc3ViZGlyZWN0b3J5IiAmJgorCWdpdCBjaGVja291dCAtYiB3b3JrMiAmJgorCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgJG8xIDAJZ2l0LWd1aS9naXQtZ3VpLnNoIgorCQllY2hvICIxMDA2NDQgJG8xIDAJZ2l0LWd1aTIvZ2l0LWd1aS5zaCIKKwkJZWNobyAiMTAwNjQ0ICRvMiAwCWdpdC5jIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHVzaW5nIGV4cGxpY2l0JyAnCisJY2QgLi4vZ2l0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIyICYmCisJZ2l0IHB1bGwgLVhzdWJ0cmVlPWdpdC1ndWkgZ3VpIG1hc3RlcjIgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRvMyAwCWdpdC1ndWkvZ2l0LWd1aS5zaCIKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWdpdC1ndWkyL2dpdC1ndWkuc2giCisJCWVjaG8gIjEwMDY0NCAkbzIgMAlnaXQuYyIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZTIgdXNpbmcgZXhwbGljaXQnICcKKwljZCAuLi9naXQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlcjIgJiYKKwlnaXQgcHVsbCAtWHN1YnRyZWU9Z2l0LWd1aTIgZ3VpIG1hc3RlcjIgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWdpdC1ndWkvZ2l0LWd1aS5zaCIKKwkJZWNobyAiMTAwNjQ0ICRvMyAwCWdpdC1ndWkyL2dpdC1ndWkuc2giCisJCWVjaG8gIjEwMDY0NCAkbzIgMAlnaXQuYyIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMzAtYmlzZWN0LXBvcmNlbGFpbi5zaCBiL3QvdDYwMzAtYmlzZWN0LXBvcmNlbGFpbi5zaAppbmRleCA1NGI3ZWE2Li4zYjA0MmFhIDEwMDc1NQotLS0gYS90L3Q2MDMwLWJpc2VjdC1wb3JjZWxhaW4uc2gKKysrIGIvdC90NjAzMC1iaXNlY3QtcG9yY2VsYWluLnNoCkBAIC0xNzUsNyArMTc1LDcgQEAKIAlnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINCAkSEFTSDEgJiYKIAlnaXQgYmlzZWN0IHNraXAgJiYKIAlnaXQgYmlzZWN0IGJhZCA+IG15X2Jpc2VjdF9sb2cudHh0ICYmCi0JZ3JlcCAiJEhBU0gyIGlzIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAiJEhBU0gyIGlzIHRoZSBmaXJzdCBiYWQgY29tbWl0IiBteV9iaXNlY3RfbG9nLnR4dCAmJgogCWdpdCBiaXNlY3QgcmVzZXQKICcKIApAQCAtMjYxLDcgKzI2MSw3IEBACiAgICAgIGdpdCBiaXNlY3QgZ29vZCAkSEFTSDEgJiYKICAgICAgZ2l0IGJpc2VjdCBiYWQgJEhBU0g0ICYmCiAgICAgIGdpdCBiaXNlY3QgcnVuIC4vdGVzdF9zY3JpcHQuc2ggPiBteV9iaXNlY3RfbG9nLnR4dCAmJgotICAgICBncmVwICIkSEFTSDMgaXMgZmlyc3QgYmFkIGNvbW1pdCIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKyAgICAgZ3JlcCAiJEhBU0gzIGlzIHRoZSBmaXJzdCBiYWQgY29tbWl0IiBteV9iaXNlY3RfbG9nLnR4dCAmJgogICAgICBnaXQgYmlzZWN0IHJlc2V0JwogCiAjIFdlIHdhbnQgdG8gYXV0b21hdGljYWxseSBmaW5kIHRoZSBjb21taXQgdGhhdApAQCAtMjc0LDcgKzI3NCw3IEBACiAgICAgIGNobW9kICt4IHRlc3Rfc2NyaXB0LnNoICYmCiAgICAgIGdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0ICRIQVNIMSAmJgogICAgICBnaXQgYmlzZWN0IHJ1biAuL3Rlc3Rfc2NyaXB0LnNoID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKLSAgICAgZ3JlcCAiJEhBU0g0IGlzIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisgICAgIGdyZXAgIiRIQVNINCBpcyB0aGUgZmlyc3QgYmFkIGNvbW1pdCIgbXlfYmlzZWN0X2xvZy50eHQgJiYKICAgICAgZ2l0IGJpc2VjdCByZXNldCcKIAogIyAkSEFTSDEgaXMgZ29vZCwgJEhBU0g1IGlzIGJhZCwgd2Ugc2tpcCAkSEFTSDMKQEAgLTI4NywxNCArMjg3LDE0IEBACiAJZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDUgJEhBU0gxICYmCiAJZ2l0IGJpc2VjdCBza2lwICYmCiAJZ2l0IGJpc2VjdCBnb29kID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKLQlncmVwICIkSEFTSDUgaXMgZmlyc3QgYmFkIGNvbW1pdCIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICIkSEFTSDUgaXMgdGhlIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCiAJZ2l0IGJpc2VjdCBsb2cgPiBsb2dfdG9fcmVwbGF5LnR4dCAmJgogCWdpdCBiaXNlY3QgcmVzZXQKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHNraXAgYW5kIGJpc2VjdCByZXBsYXknICcKIAlnaXQgYmlzZWN0IHJlcGxheSBsb2dfdG9fcmVwbGF5LnR4dCA+IG15X2Jpc2VjdF9sb2cudHh0ICYmCi0JZ3JlcCAiJEhBU0g1IGlzIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAiJEhBU0g1IGlzIHRoZSBmaXJzdCBiYWQgY29tbWl0IiBteV9iaXNlY3RfbG9nLnR4dCAmJgogCWdpdCBiaXNlY3QgcmVzZXQKICcKIApAQCAtMzM1LDcgKzMzNSw3IEBACiAJY2htb2QgK3ggdGVzdF9zY3JpcHQuc2ggJiYKIAlnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINyAkSEFTSDEgJiYKIAlnaXQgYmlzZWN0IHJ1biAuL3Rlc3Rfc2NyaXB0LnNoID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKLQlncmVwICIkSEFTSDYgaXMgZmlyc3QgYmFkIGNvbW1pdCIgbXlfYmlzZWN0X2xvZy50eHQKKwlncmVwICIkSEFTSDYgaXMgdGhlIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBza2lwIG9ubHkgb25lIHJhbmdlJyAnCkBAIC0zODUsNyArMzg1LDcgQEAKIAlyZXZfaGFzaDY9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCiAJdGVzdCAiJHJldl9oYXNoNiIgPSAiJEhBU0g2IiAmJgogCWdpdCBiaXNlY3QgZ29vZCA+IG15X2Jpc2VjdF9sb2cudHh0ICYmCi0JZ3JlcCAiJEhBU0g3IGlzIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAiJEhBU0g3IGlzIHRoZSBmaXJzdCBiYWQgY29tbWl0IiBteV9iaXNlY3RfbG9nLnR4dCAmJgogCWdpdCBiaXNlY3QgcmVzZXQgJiYKIAlyZXZfaGFzaDY9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGJpc2VjdCkgJiYKIAl0ZXN0ICIkcmV2X2hhc2g2IiA9ICIkSEFTSDYiICYmCkBAIC00MjMsNyArNDIzLDcgQEAKIAlncmVwICJtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkIiBteV9iaXNlY3RfbG9nLnR4dCAmJgogCWdyZXAgJEhBU0g0IG15X2Jpc2VjdF9sb2cudHh0ICYmCiAJZ2l0IGJpc2VjdCBza2lwID4gbXlfYmlzZWN0X2xvZy50eHQgMj4mMSAmJgotCWdyZXAgIldhcm5pbmciIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAid2FybmluZyIgbXlfYmlzZWN0X2xvZy50eHQgJiYKIAlncmVwICRTSURFX0hBU0g2IG15X2Jpc2VjdF9sb2cudHh0ICYmCiAJZ2l0IGJpc2VjdCByZXNldAogJwpAQCAtNDgyLDI4ICs0ODIsMTcgQEAKIAlnaXQgYmlzZWN0IHJlc2V0CiAnCiAKLWNoZWNrX3RyYWNlKCkgewotCWdyZXAgIiQxIiAiJEdJVF9UUkFDRSIgfCBncmVwICJcXiQyIiB8IGdyZXAgIiQzIiA+L2Rldi9udWxsCi19Ci0KIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29wdGltaXplZCBtZXJnZSBiYXNlIGNoZWNrcycgJwotCUdJVF9UUkFDRT0iJChwd2QpL3RyYWNlLmxvZyIgJiYKLQlleHBvcnQgR0lUX1RSQUNFICYmCiAJZ2l0IGJpc2VjdCBzdGFydCAiJEhBU0g3IiAiJFNJREVfSEFTSDciID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKIAlncmVwICJtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkIiBteV9iaXNlY3RfbG9nLnR4dCAmJgogCWdyZXAgIiRIQVNINCIgbXlfYmlzZWN0X2xvZy50eHQgJiYKLQljaGVja190cmFjZSAicmV2LWxpc3QiICIkSEFTSDciICIkU0lERV9IQVNINyIgJiYKIAlnaXQgYmlzZWN0IGdvb2QgPiBteV9iaXNlY3RfbG9nMi50eHQgJiYKIAl0ZXN0IC1mICIuZ2l0L0JJU0VDVF9BTkNFU1RPUlNfT0siICYmCiAJdGVzdCAiJEhBU0g2IiA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgotCTogPiAiJEdJVF9UUkFDRSIgJiYKIAlnaXQgYmlzZWN0IGJhZCA+IG15X2Jpc2VjdF9sb2czLnR4dCAmJgotCXRlc3RfbXVzdF9mYWlsIGNoZWNrX3RyYWNlICJyZXYtbGlzdCIgIiRIQVNINiIgIiRTSURFX0hBU0g3IiAmJgogCWdpdCBiaXNlY3QgZ29vZCAiJEFfSEFTSCIgPiBteV9iaXNlY3RfbG9nNC50eHQgJiYKIAlncmVwICJtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkIiBteV9iaXNlY3RfbG9nNC50eHQgJiYKLQl0ZXN0X211c3RfZmFpbCB0ZXN0IC1mICIuZ2l0L0JJU0VDVF9BTkNFU1RPUlNfT0siICYmCi0JY2hlY2tfdHJhY2UgInJldi1saXN0IiAiJEhBU0g2IiAiJEFfSEFTSCIgJiYKLQl1bnNldCBHSVRfVFJBQ0UKKwl0ZXN0X211c3RfZmFpbCB0ZXN0IC1mICIuZ2l0L0JJU0VDVF9BTkNFU1RPUlNfT0siCiAnCiAKICMgVGhpcyBjcmVhdGVzIGFub3RoZXIgc2lkZSBicmFuY2ggY2FsbGVkICJwYXJhbGxlbCIgd2l0aCBzb21lIGZpbGVzCkBAIC01NDUsNyArNTM0LDcgQEAKIAlwYXJhMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKIAl0ZXN0ICIkcGFyYTEiID0gIiRQQVJBX0hBU0gxIiAmJgogCWdpdCBiaXNlY3QgYmFkID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKLQlncmVwICIkUEFSQV9IQVNIMSBpcyBmaXJzdCBiYWQgY29tbWl0IiBteV9iaXNlY3RfbG9nLnR4dAorCWdyZXAgIiRQQVJBX0hBU0gxIGlzIHRoZSBmaXJzdCBiYWQgY29tbWl0IiBteV9iaXNlY3RfbG9nLnR4dAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXN0cmljdGluZyBiaXNlY3Rpb24gb24gb25lIGRpciBhbmQgYSBmaWxlJyAnCkBAIC01NjMsNyArNTUyLDI0IEBACiAJcGFyYTE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCiAJdGVzdCAiJHBhcmExIiA9ICIkUEFSQV9IQVNIMSIgJiYKIAlnaXQgYmlzZWN0IGdvb2QgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgotCWdyZXAgIiRQQVJBX0hBU0g0IGlzIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0CisJZ3JlcCAiJFBBUkFfSEFTSDQgaXMgdGhlIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NraXBwaW5nIGF3YXkgZnJvbSBza2lwcGVkIGNvbW1pdCcgJworCWdpdCBiaXNlY3Qgc3RhcnQgJFBBUkFfSEFTSDcgJEhBU0gxICYmCisJcGFyYTQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdCAiJHBhcmE0IiA9ICIkUEFSQV9IQVNINCIgJiYKKyAgICAgICAgZ2l0IGJpc2VjdCBza2lwICYmCisJaGFzaDc9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdCAiJGhhc2g3IiA9ICIkSEFTSDciICYmCisgICAgICAgIGdpdCBiaXNlY3Qgc2tpcCAmJgorCXBhcmEzPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCXRlc3QgIiRwYXJhMyIgPSAiJFBBUkFfSEFTSDMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vycm9yaW5nIG91dCB3aGVuIHVzaW5nIGJhZCBwYXRoIHBhcmFtZXRlcnMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IHN0YXJ0ICRQQVJBX0hBU0g3ICRIQVNIMSAtLSBmb29iYXIgMj4gZXJyb3IudHh0ICYmCisJZ3JlcCAiYmFkIHBhdGggcGFyYW1ldGVycyIgZXJyb3IudHh0CiAnCiAKICMKZGlmZiAtLWdpdCBhL3QvdDYwMzMtbWVyZ2UtY3JsZi5zaCBiL3QvdDYwMzMtbWVyZ2UtY3JsZi5zaAppbmRleCA3NWQ5NjAyLi5lOGQ2NWVlIDEwMDc1NQotLS0gYS90L3Q2MDMzLW1lcmdlLWNybGYuc2gKKysrIGIvdC90NjAzMy1tZXJnZS1jcmxmLnNoCkBAIC0xLDEzICsxLDUgQEAKICMhL2Jpbi9zaAogCi1hcHBlbmRfY3IgKCkgewotCXNlZCAtZSAncy8kL1EvJyB8IHRyIFEgJ1wwMTUnCi19Ci0KLXJlbW92ZV9jciAoKSB7Ci0JdHIgJ1wwMTUnIFEgfCBzZWQgLWUgJ3MvUSQvLycKLX0KLQogdGVzdF9kZXNjcmlwdGlvbj0nbWVyZ2UgY29uZmxpY3QgaW4gY3JsZiByZXBvCiAKIAkJYi0tLU0KZGlmZiAtLWdpdCBhL3QvdDYwMzUtbWVyZ2UtZGlyLXRvLXN5bWxpbmsuc2ggYi90L3Q2MDM1LW1lcmdlLWRpci10by1zeW1saW5rLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMyMDJlMWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDM1LW1lcmdlLWRpci10by1zeW1saW5rLnNoCkBAIC0wLDAgKzEsOTMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdtZXJnaW5nIHdoZW4gYSBkaXJlY3Rvcnkgd2FzIHJlcGxhY2VkIHdpdGggYSBzeW1saW5rJworLiAuL3Rlc3QtbGliLnNoCisKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUwordGhlbgorCXNheSAnU3ltYm9saWMgbGlua3Mgbm90IHN1cHBvcnRlZCwgc2tpcHBpbmcgdGVzdHMuJworCXRlc3RfZG9uZQorZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGEgY29tbWl0IHdoZXJlIGRpciBhL2IgY2hhbmdlZCB0byBzeW1saW5rJyAnCisJbWtkaXIgLXAgYS9iL2MgYS9iLTIvYyAmJgorCT4gYS9iL2MvZCAmJgorCT4gYS9iLTIvYy9kICYmCisJPiBhL3ggJiYKKwlnaXQgYWRkIC1BICYmCisJZ2l0IGNvbW1pdCAtbSBiYXNlICYmCisJZ2l0IHRhZyBzdGFydCAmJgorCXJtIC1yZiBhL2IgJiYKKwlsbiAtcyBiLTIgYS9iICYmCisJZ2l0IGFkZCAtQSAmJgorCWdpdCBjb21taXQgLW0gImRpciB0byBzeW1saW5rIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdrZWVwIGEvYi0yL2MvZCBhY3Jvc3MgY2hlY2tvdXQnICcKKwlnaXQgY2hlY2tvdXQgSEVBRF4wICYmCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgcm0gLS1jYWNoZWQgYS9iICYmCisJZ2l0IGNvbW1pdCAtbSAidW50cmFja2VkIHN5bWxpbmsgcmVtYWlucyIgJiYKKwkgZ2l0IGNoZWNrb3V0IHN0YXJ0XjAgJiYKKwkgdGVzdCAtZiBhL2ItMi9jL2QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgc2hvdWxkIG5vdCBoYXZlIGRlbGV0ZWQgYS9iLTIvYy9kJyAnCisJZ2l0IGNoZWNrb3V0IEhFQUReMCAmJgorCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJIGdpdCBjaGVja291dCBzdGFydF4wICYmCisJIHRlc3QgLWYgYS9iLTIvYy9kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZvciBtZXJnZSB0ZXN0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3QgLWYgYS9iLTIvYy9kICYmCisJZWNobyB4ID4gYS94ICYmCisJZ2l0IGFkZCBhL3ggJiYKKwlnaXQgY29tbWl0IC1tIHggJiYKKwlnaXQgdGFnIGJhc2VsaW5lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBsb3NlIGEvYi0yL2MvZCBpbiBtZXJnZSAocmVzb2x2ZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGJhc2VsaW5lXjAgJiYKKwlnaXQgbWVyZ2UgLXMgcmVzb2x2ZSBtYXN0ZXIgJiYKKwl0ZXN0IC1oIGEvYiAmJgorCXRlc3QgLWYgYS9iLTIvYy9kCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2RvIG5vdCBsb3NlIGEvYi0yL2MvZCBpbiBtZXJnZSAocmVjdXJzaXZlKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgYmFzZWxpbmVeMCAmJgorCWdpdCBtZXJnZSAtcyByZWN1cnNpdmUgbWFzdGVyICYmCisJdGVzdCAtaCBhL2IgJiYKKwl0ZXN0IC1mIGEvYi0yL2MvZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhIG1lcmdlIHdoZXJlIGRpciBhL2ItMiBjaGFuZ2VkIHRvIHN5bWxpbmsnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IHN0YXJ0XjAgJiYKKwlybSAtcmYgYS9iLTIgJiYKKwlsbiAtcyBiIGEvYi0yICYmCisJZ2l0IGFkZCAtQSAmJgorCWdpdCBjb21taXQgLW0gImRpciBhL2ItMiB0byBzeW1saW5rIiAmJgorCWdpdCB0YWcgdGVzdDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugc2hvdWxkIG5vdCBoYXZlIGNvbmZsaWN0cyAocmVzb2x2ZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGJhc2VsaW5lXjAgJiYKKwlnaXQgbWVyZ2UgLXMgcmVzb2x2ZSB0ZXN0MiAmJgorCXRlc3QgLWggYS9iLTIgJiYKKwl0ZXN0IC1mIGEvYi9jL2QKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnbWVyZ2Ugc2hvdWxkIG5vdCBoYXZlIGNvbmZsaWN0cyAocmVjdXJzaXZlKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgYmFzZWxpbmVeMCAmJgorCWdpdCBtZXJnZSAtcyByZWN1cnNpdmUgdGVzdDIgJiYKKwl0ZXN0IC1oIGEvYi0yICYmCisJdGVzdCAtZiBhL2IvYy9kCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAzNi1yZWN1cnNpdmUtY29ybmVyLWNhc2VzLnNoIGIvdC90NjAzNi1yZWN1cnNpdmUtY29ybmVyLWNhc2VzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI4NzQxNDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDM2LXJlY3Vyc2l2ZS1jb3JuZXItY2FzZXMuc2gKQEAgLTAsMCArMSw1NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3JlY3Vyc2l2ZSBtZXJnZSBjb3JuZXIgY2FzZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjCisjICBMMSAgTDIKKyMgICBvLS0tbworIyAgLyBcIC8gXAorIyBvICAgWCAgID8KKyMgIFwgLyBcIC8KKyMgICBvLS0tbworIyAgUjEgIFIyCisjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlbj0iMCAxIDIgMyA0IDUgNiA3IDggOSIKKwlmb3IgaSBpbiAkdGVuCisJZG8KKwkJZWNobyBsaW5lICRpIGluIGEgc2FtcGxlIGZpbGUKKwlkb25lID5vbmUgJiYKKwlmb3IgaSBpbiAkdGVuCisJZG8KKwkJZWNobyBsaW5lICRpIGluIGFub3RoZXIgc2FtcGxlIGZpbGUKKwlkb25lID50d28gJiYKKwlnaXQgYWRkIG9uZSB0d28gJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwlnaXQgYnJhbmNoIEwxICYmCisJZ2l0IGNoZWNrb3V0IC1iIFIxICYmCisJZ2l0IG12IG9uZSB0aHJlZSAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIFIxICYmCisKKwlnaXQgY2hlY2tvdXQgTDEgJiYKKwlnaXQgbXYgdHdvIHRocmVlICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gTDEgJiYKKworCWdpdCBjaGVja291dCBMMV4wICYmCisJdGVzdF90aWNrICYmIGdpdCBtZXJnZSAtcyBvdXJzIFIxICYmCisJZ2l0IHRhZyBMMiAmJgorCisJZ2l0IGNoZWNrb3V0IFIxXjAgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IG1lcmdlIC1zIG91cnMgTDEgJiYKKwlnaXQgdGFnIFIyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgbWVyZ2UgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgTDJeMCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBSMl4wCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAzNy1tZXJnZS1vdXJzLXRoZWlycy5zaCBiL3QvdDYwMzctbWVyZ2Utb3Vycy10aGVpcnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGFiM2Q2MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMzctbWVyZ2Utb3Vycy10aGVpcnMuc2gKQEAgLTAsMCArMSw2NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J01lcmdlLXJlY3Vyc2l2ZSBvdXJzIGFuZCB0aGVpcnMgdmFyaWFudHMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkKKwlkbworCQllY2hvICIkaSIKKwlkb25lID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJY3AgZmlsZSBlbGlmICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwlzZWQgLWUgInMvMS9vbmUvIiAtZSAicy85L25pbmUvIiA+ZmlsZSA8ZWxpZiAmJgorCWdpdCBjb21taXQgLWEgLW0gb3VycyAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgSEVBRF4gJiYKKworCXNlZCAtZSAicy85L251ZXZlLyIgPmZpbGUgPGVsaWYgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHRoZWlycyAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3Rlcl4wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BsYWluIHJlY3Vyc2l2ZSAtIHNob3VsZCBjb25mbGljdCcgJworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBzaWRlICYmCisJZ3JlcCBuaW5lIGZpbGUgJiYKKwlncmVwIG51ZXZlIGZpbGUgJiYKKwkhIGdyZXAgOSBmaWxlICYmCisJZ3JlcCBvbmUgZmlsZSAmJgorCSEgZ3JlcCAxIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVjdXJzaXZlIGZhdm91cmluZyB0aGVpcnMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBtZXJnZSAtcyByZWN1cnNpdmUgLVh0aGVpcnMgc2lkZSAmJgorCSEgZ3JlcCBuaW5lIGZpbGUgJiYKKwlncmVwIG51ZXZlIGZpbGUgJiYKKwkhIGdyZXAgOSBmaWxlICYmCisJZ3JlcCBvbmUgZmlsZSAmJgorCSEgZ3JlcCAxIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVjdXJzaXZlIGZhdm91cmluZyBvdXJzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIC1YIG91cnMgc2lkZSAmJgorCWdyZXAgbmluZSBmaWxlICYmCisJISBncmVwIG51ZXZlIGZpbGUgJiYKKwkhIGdyZXAgOSBmaWxlICYmCisJZ3JlcCBvbmUgZmlsZSAmJgorCSEgZ3JlcCAxIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCB3aXRoIC1YJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYgZ2l0IHB1bGwgLXMgcmVjdXJzaXZlIC1Yb3VycyAuIHNpZGUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJiBnaXQgcHVsbCAtcyByZWN1cnNpdmUgLVggb3VycyAuIHNpZGUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJiBnaXQgcHVsbCAtcyByZWN1cnNpdmUgLVh0aGVpcnMgLiBzaWRlICYmCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYgZ2l0IHB1bGwgLXMgcmVjdXJzaXZlIC1YIHRoZWlycyAuIHNpZGUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJiAhIGdpdCBwdWxsIC1zIHJlY3Vyc2l2ZSAtWCBib3JrIC4gc2lkZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwNDAtdHJhY2tpbmctaW5mby5zaCBiL3QvdDYwNDAtdHJhY2tpbmctaW5mby5zaAppbmRleCAzZDZkYjRkLi4xNzg1ZTE3IDEwMDc1NQotLS0gYS90L3Q2MDQwLXRyYWNraW5nLWluZm8uc2gKKysrIGIvdC90NjA0MC10cmFja2luZy1pbmZvLnNoCkBAIC02OSwxMCArNjksNDUgQEAKIAkJY2QgdGVzdCAmJgogCQlnaXQgY2hlY2tvdXQgYjEgPi9kZXYvbnVsbCAmJgogCQkjIHJlcG9ydHMgbm90aGluZyB0byBjb21taXQKLQkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXR1cworCQl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tZHJ5LXJ1bgogCSkgPmFjdHVhbCAmJgogCWdyZXAgImhhdmUgMSBhbmQgMSBkaWZmZXJlbnQiIGFjdHVhbAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2hlbiB0cmFja2luZyBsaWdodHdlaWdodCB0YWdzJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCB0YWcgbGlnaHQgJiYKKwlnaXQgYnJhbmNoIC0tdHJhY2sgbGlnaHR0cmFjayBsaWdodCA+YWN0dWFsICYmCisJZ3JlcCAic2V0IHVwIHRvIHRyYWNrIiBhY3R1YWwgJiYKKwlnaXQgY2hlY2tvdXQgbGlnaHR0cmFjaworJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2hlbiB0cmFja2luZyBhbm5vdGF0ZWQgdGFncycgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgdGFnIC1tIGhlYXZ5IGhlYXZ5ICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIGhlYXZ5dHJhY2sgaGVhdnkgPmFjdHVhbCAmJgorCWdyZXAgInNldCB1cCB0byB0cmFjayIgYWN0dWFsICYmCisJZ2l0IGNoZWNrb3V0IGhlYXZ5dHJhY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdHJhY2tpbmcgd2l0aCBicmFuY2ggLS1zZXQtdXBzdHJlYW0gb24gZXhpc3RpbmcgYnJhbmNoJyAnCisJZ2l0IGJyYW5jaCBmcm9tLW1hc3RlciBtYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIGJyYW5jaC5mcm9tLW1hc3Rlci5tZXJnZSA+IGFjdHVhbCAmJgorCWdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0gZnJvbS1tYXN0ZXIgbWFzdGVyICYmCisJZ2l0IGNvbmZpZyBicmFuY2guZnJvbS1tYXN0ZXIubWVyZ2UgPiBhY3R1YWwgJiYKKwlncmVwIC1xICJecmVmcy9oZWFkcy9tYXN0ZXIkIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zZXQtdXBzdHJlYW0gZG9lcyBub3QgY2hhbmdlIGJyYW5jaCcgJworCWdpdCBicmFuY2ggZnJvbS1tYXN0ZXIyIG1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgYnJhbmNoLmZyb20tbWFzdGVyMi5tZXJnZSA+IGFjdHVhbCAmJgorCWdpdCByZXYtbGlzdCBmcm9tLW1hc3RlcjIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2Zyb20tbWFzdGVyMiBmcm9tLW1hc3RlcjJeICYmCisJZ2l0IHJldi1wYXJzZSBmcm9tLW1hc3RlcjIgPmV4cGVjdDIgJiYKKwlnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtIGZyb20tbWFzdGVyMiBtYXN0ZXIgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5mcm9tLW1hc3Rlci5tZXJnZSA+IGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgZnJvbS1tYXN0ZXIyID5hY3R1YWwyICYmCisJZ3JlcCAtcSAiXnJlZnMvaGVhZHMvbWFzdGVyJCIgYWN0dWFsICYmCisJY21wIGV4cGVjdDIgYWN0dWFsMgorJwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDUwLXJlcGxhY2Uuc2ggYi90L3Q2MDUwLXJlcGxhY2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjAzZmZkYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwNTAtcmVwbGFjZS5zaApAQCAtMCwwICsxLDIyNCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBDaHJpc3RpYW4gQ291ZGVyCisjCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0cyByZXBsYWNlIHJlZnMgZnVuY3Rpb25hbGl0eScKKworZXhlYyA8L2Rldi9udWxsCisKKy4gLi90ZXN0LWxpYi5zaAorCithZGRfYW5kX2NvbW1pdF9maWxlKCkKK3sKKyAgICBfZmlsZT0iJDEiCisgICAgX21zZz0iJDIiCisKKyAgICBnaXQgYWRkICRfZmlsZSB8fCByZXR1cm4gJD8KKyAgICB0ZXN0X3RpY2sgfHwgcmV0dXJuICQ/CisgICAgZ2l0IGNvbW1pdCAtLXF1aWV0IC1tICIkX2ZpbGU6ICRfbXNnIgorfQorCitIQVNIMT0KK0hBU0gyPQorSEFTSDM9CitIQVNIND0KK0hBU0g1PQorSEFTSDY9CitIQVNINz0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGJ1Z2d5IGJyYW5jaCcgJworICAgICBlY2hvICJsaW5lIDEiID4+IGhlbGxvICYmCisgICAgIGVjaG8gImxpbmUgMiIgPj4gaGVsbG8gJiYKKyAgICAgZWNobyAibGluZSAzIiA+PiBoZWxsbyAmJgorICAgICBlY2hvICJsaW5lIDQiID4+IGhlbGxvICYmCisgICAgIGFkZF9hbmRfY29tbWl0X2ZpbGUgaGVsbG8gIjQgbGluZXMiICYmCisgICAgIEhBU0gxPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorICAgICBlY2hvICJsaW5lIEJVRyIgPj4gaGVsbG8gJiYKKyAgICAgZWNobyAibGluZSA2IiA+PiBoZWxsbyAmJgorICAgICBlY2hvICJsaW5lIDciID4+IGhlbGxvICYmCisgICAgIGVjaG8gImxpbmUgOCIgPj4gaGVsbG8gJiYKKyAgICAgYWRkX2FuZF9jb21taXRfZmlsZSBoZWxsbyAiNCBtb3JlIGxpbmVzIHdpdGggYSBCVUciICYmCisgICAgIEhBU0gyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorICAgICBlY2hvICJsaW5lIDkiID4+IGhlbGxvICYmCisgICAgIGVjaG8gImxpbmUgMTAiID4+IGhlbGxvICYmCisgICAgIGFkZF9hbmRfY29tbWl0X2ZpbGUgaGVsbG8gIjIgbW9yZSBsaW5lcyIgJiYKKyAgICAgSEFTSDM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisgICAgIGVjaG8gImxpbmUgMTEiID4+IGhlbGxvICYmCisgICAgIGFkZF9hbmRfY29tbWl0X2ZpbGUgaGVsbG8gIjEgbW9yZSBsaW5lIiAmJgorICAgICBIQVNIND0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKyAgICAgc2VkIC1lICJzL0JVRy81LyIgaGVsbG8gPiBoZWxsby5uZXcgJiYKKyAgICAgbXYgaGVsbG8ubmV3IGhlbGxvICYmCisgICAgIGFkZF9hbmRfY29tbWl0X2ZpbGUgaGVsbG8gIkJVRyBmaXhlZCIgJiYKKyAgICAgSEFTSDU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisgICAgIGVjaG8gImxpbmUgMTIiID4+IGhlbGxvICYmCisgICAgIGVjaG8gImxpbmUgMTMiID4+IGhlbGxvICYmCisgICAgIGFkZF9hbmRfY29tbWl0X2ZpbGUgaGVsbG8gIjIgbW9yZSBsaW5lcyIgJiYKKyAgICAgSEFTSDY9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpCisgICAgIGVjaG8gImxpbmUgMTQiID4+IGhlbGxvICYmCisgICAgIGVjaG8gImxpbmUgMTUiID4+IGhlbGxvICYmCisgICAgIGVjaG8gImxpbmUgMTYiID4+IGhlbGxvICYmCisgICAgIGFkZF9hbmRfY29tbWl0X2ZpbGUgaGVsbG8gImFnYWluIDMgbW9yZSBsaW5lcyIgJiYKKyAgICAgSEFTSDc9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGxhY2UgdGhlIGF1dGhvcicgJworICAgICBnaXQgY2F0LWZpbGUgY29tbWl0ICRIQVNIMiB8IGdyZXAgImF1dGhvciBBIFUgVGhvciIgJiYKKyAgICAgUj0kKGdpdCBjYXQtZmlsZSBjb21taXQgJEhBU0gyIHwgc2VkIC1lICJzL0EgVS9PLyIgfCBnaXQgaGFzaC1vYmplY3QgLXQgY29tbWl0IC0tc3RkaW4gLXcpICYmCisgICAgIGdpdCBjYXQtZmlsZSBjb21taXQgJFIgfCBncmVwICJhdXRob3IgTyBUaG9yIiAmJgorICAgICBnaXQgdXBkYXRlLXJlZiByZWZzL3JlcGxhY2UvJEhBU0gyICRSICYmCisgICAgIGdpdCBzaG93IEhFQUR+NSB8IGdyZXAgIk8gVGhvciIgJiYKKyAgICAgZ2l0IHNob3cgJEhBU0gyIHwgZ3JlcCAiTyBUaG9yIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tbm8tcmVwbGFjZS1vYmplY3RzIG9wdGlvbicgJworICAgICBnaXQgY2F0LWZpbGUgY29tbWl0ICRIQVNIMiB8IGdyZXAgImF1dGhvciBPIFRob3IiICYmCisgICAgIGdpdCAtLW5vLXJlcGxhY2Utb2JqZWN0cyBjYXQtZmlsZSBjb21taXQgJEhBU0gyIHwgZ3JlcCAiYXV0aG9yIEEgVSBUaG9yIiAmJgorICAgICBnaXQgc2hvdyAkSEFTSDIgfCBncmVwICJPIFRob3IiICYmCisgICAgIGdpdCAtLW5vLXJlcGxhY2Utb2JqZWN0cyBzaG93ICRIQVNIMiB8IGdyZXAgIkEgVSBUaG9yIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IEdJVF9OT19SRVBMQUNFX09CSkVDVFMgZW52IHZhcmlhYmxlJyAnCisgICAgIEdJVF9OT19SRVBMQUNFX09CSkVDVFM9MSBnaXQgY2F0LWZpbGUgY29tbWl0ICRIQVNIMiB8IGdyZXAgImF1dGhvciBBIFUgVGhvciIgJiYKKyAgICAgR0lUX05PX1JFUExBQ0VfT0JKRUNUUz0xIGdpdCBzaG93ICRIQVNIMiB8IGdyZXAgIkEgVSBUaG9yIgorJworCitjYXQgPnRhZy5zaWcgPDxFT0YKK29iamVjdCAkSEFTSDIKK3R5cGUgY29tbWl0Cit0YWcgbXl0YWcKK3RhZ2dlciBUIEEgR2dlciA8PiAwICswMDAwCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YWcgcmVwbGFjZWQgY29tbWl0JyAnCisgICAgIGdpdCBta3RhZyA8dGFnLnNpZyA+LmdpdC9yZWZzL3RhZ3MvbXl0YWcgMj5tZXNzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgZnNjayIgd29ya3MnICcKKyAgICAgZ2l0IGZzY2sgbWFzdGVyID4gZnNja19tYXN0ZXIub3V0ICYmCisgICAgIGdyZXAgImRhbmdsaW5nIGNvbW1pdCAkUiIgZnNja19tYXN0ZXIub3V0ICYmCisgICAgIGdyZXAgImRhbmdsaW5nIHRhZyAkKGNhdCAuZ2l0L3JlZnMvdGFncy9teXRhZykiIGZzY2tfbWFzdGVyLm91dCAmJgorICAgICB0ZXN0IC16ICIkKGdpdCBmc2NrKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwYWNrLCBjbG9uZSBhbmQgZmV0Y2ggd29yaycgJworICAgICBnaXQgcmVwYWNrIC1hIC1kICYmCisgICAgIGdpdCBjbG9uZSAtLW5vLWhhcmRsaW5rcyAuIGNsb25lX2RpciAmJgorICAgICBjZCBjbG9uZV9kaXIgJiYKKyAgICAgZ2l0IHNob3cgSEVBRH41IHwgZ3JlcCAiQSBVIFRob3IiICYmCisgICAgIGdpdCBzaG93ICRIQVNIMiB8IGdyZXAgIkEgVSBUaG9yIiAmJgorICAgICBnaXQgY2F0LWZpbGUgY29tbWl0ICRSICYmCisgICAgIGdpdCByZXBhY2sgLWEgLWQgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGNvbW1pdCAkUiAmJgorICAgICBnaXQgZmV0Y2ggLi4vICJyZWZzL3JlcGxhY2UvKjpyZWZzL3JlcGxhY2UvKiIgJiYKKyAgICAgZ2l0IHNob3cgSEVBRH41IHwgZ3JlcCAiTyBUaG9yIiAmJgorICAgICBnaXQgc2hvdyAkSEFTSDIgfCBncmVwICJPIFRob3IiICYmCisgICAgIGdpdCBjYXQtZmlsZSBjb21taXQgJFIgJiYKKyAgICAgY2QgLi4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCByZXBsYWNlIiBsaXN0aW5nIGFuZCBkZWxldGluZycgJworICAgICB0ZXN0ICIkSEFTSDIiID0gIiQoZ2l0IHJlcGxhY2UgLWwpIiAmJgorICAgICB0ZXN0ICIkSEFTSDIiID0gIiQoZ2l0IHJlcGxhY2UpIiAmJgorICAgICBhYT0ke0hBU0gyJT8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/fSAmJgorICAgICB0ZXN0ICIkSEFTSDIiID0gIiQoZ2l0IHJlcGxhY2UgLWwgIiRhYSoiKSIgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlcGxhY2UgLWQgJFIgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlcGxhY2UgLWQgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlcGxhY2UgLWwgLWQgJEhBU0gyICYmCisgICAgIGdpdCByZXBsYWNlIC1kICRIQVNIMiAmJgorICAgICBnaXQgc2hvdyAkSEFTSDIgfCBncmVwICJBIFUgVGhvciIgJiYKKyAgICAgdGVzdCAteiAiJChnaXQgcmVwbGFjZSAtbCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgcmVwbGFjZSIgcmVwbGFjaW5nJyAnCisgICAgIGdpdCByZXBsYWNlICRIQVNIMiAkUiAmJgorICAgICBnaXQgc2hvdyAkSEFTSDIgfCBncmVwICJPIFRob3IiICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXBsYWNlICRIQVNIMiAkUiAmJgorICAgICBnaXQgcmVwbGFjZSAtZiAkSEFTSDIgJFIgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlcGxhY2UgLWYgJiYKKyAgICAgdGVzdCAiJEhBU0gyIiA9ICIkKGdpdCByZXBsYWNlKSIKKycKKworIyBUaGlzIGNyZWF0ZXMgYSBzaWRlIGJyYW5jaCB3aGVyZSB0aGUgYnVnIGluIEgyCisjIGRvZXMgbm90IGFwcGVhciBiZWNhdXNlIFAyIGlzIGNyZWF0ZWQgYnkgYXBwbHlpbmcKKyMgSDIgYW5kIHNxdWFzaGluZyBINSBpbnRvIGl0LgorIyBQMywgUDQgYW5kIFA2IGFyZSBjcmVhdGVkIGJ5IGNoZXJyeS1waWNraW5nIEgzLCBINAorIyBhbmQgSDYgcmVzcGVjdGl2ZWx5LgorIworIyBBdCB0aGlzIHBvaW50LCB3ZSBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nOgorIworIyAgICBQMi0tUDMtLVA0LS1QNgorIyAgIC8KKyMgSDEtSDItSDMtSDQtSDUtSDYtSDcKKyMKKyMgVGhlbiB3ZSByZXBsYWNlIEg2IHdpdGggUDYuCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgcGFyYWxsZWwgYnJhbmNoIHdpdGhvdXQgdGhlIGJ1ZycgJworICAgICBnaXQgcmVwbGFjZSAtZCAkSEFTSDIgJiYKKyAgICAgZ2l0IHNob3cgJEhBU0gyIHwgZ3JlcCAiQSBVIFRob3IiICYmCisgICAgIGdpdCBjaGVja291dCAkSEFTSDEgJiYKKyAgICAgZ2l0IGNoZXJyeS1waWNrICRIQVNIMiAmJgorICAgICBnaXQgc2hvdyAkSEFTSDUgfCBnaXQgYXBwbHkgJiYKKyAgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC1tICJoZWxsbzogNCBtb3JlIGxpbmVzIFdJVEhPVVQgdGhlIGJ1ZyIgaGVsbG8gJiYKKyAgICAgUEFSQTI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisgICAgIGdpdCBjaGVycnktcGljayAkSEFTSDMgJiYKKyAgICAgUEFSQTM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisgICAgIGdpdCBjaGVycnktcGljayAkSEFTSDQgJiYKKyAgICAgUEFSQTQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisgICAgIGdpdCBjaGVycnktcGljayAkSEFTSDYgJiYKKyAgICAgUEFSQTY9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisgICAgIGdpdCByZXBsYWNlICRIQVNINiAkUEFSQTYgJiYKKyAgICAgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorICAgICBjdXI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisgICAgIHRlc3QgIiRjdXIiID0gIiRIQVNINyIgJiYKKyAgICAgZ2l0IGxvZyAtLXByZXR0eT1vbmVsaW5lIHwgZ3JlcCAkUEFSQTIgJiYKKyAgICAgZ2l0IHJlbW90ZSBhZGQgY2xvbmVkIC4vY2xvbmVfZGlyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdG8gY2xvbmVkIHJlcG8nICcKKyAgICAgZ2l0IHB1c2ggY2xvbmVkICRIQVNINl46cmVmcy9oZWFkcy9wYXJhbGxlbCAmJgorICAgICBjZCBjbG9uZV9kaXIgJiYKKyAgICAgZ2l0IGNoZWNrb3V0IHBhcmFsbGVsICYmCisgICAgIGdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSB8IGdyZXAgJFBBUkEyICYmCisgICAgIGNkIC4uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggYnJhbmNoIHdpdGggcmVwbGFjZW1lbnQnICcKKyAgICAgZ2l0IGNhdC1maWxlIGNvbW1pdCAkUEFSQTMgfCBncmVwICJhdXRob3IgQSBVIFRob3IiICYmCisgICAgIFM9JChnaXQgY2F0LWZpbGUgY29tbWl0ICRQQVJBMyB8IHNlZCAtZSAicy9BIFUvTy8iIHwgZ2l0IGhhc2gtb2JqZWN0IC10IGNvbW1pdCAtLXN0ZGluIC13KSAmJgorICAgICBnaXQgY2F0LWZpbGUgY29tbWl0ICRTIHwgZ3JlcCAiYXV0aG9yIE8gVGhvciIgJiYKKyAgICAgZ2l0IHJlcGxhY2UgJFBBUkEzICRTICYmCisgICAgIGdpdCBzaG93ICRIQVNINn4yIHwgZ3JlcCAiTyBUaG9yIiAmJgorICAgICBnaXQgc2hvdyAkUEFSQTMgfCBncmVwICJPIFRob3IiICYmCisgICAgIGdpdCBwdXNoIGNsb25lZCAkSEFTSDZeOnJlZnMvaGVhZHMvcGFyYWxsZWwyICYmCisgICAgIGNkIGNsb25lX2RpciAmJgorICAgICBnaXQgY2hlY2tvdXQgcGFyYWxsZWwyICYmCisgICAgIGdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSB8IGdyZXAgJFBBUkEzICYmCisgICAgIGdpdCBzaG93ICRQQVJBMyB8IGdyZXAgIkEgVSBUaG9yIiAmJgorICAgICBjZCAuLgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBicmFuY2ggd2l0aCByZXBsYWNlbWVudCcgJworICAgICBnaXQgYnJhbmNoIHRvZmV0Y2ggJEhBU0g2ICYmCisgICAgIGNkIGNsb25lX2RpciAmJgorICAgICBnaXQgZmV0Y2ggb3JpZ2luIHJlZnMvaGVhZHMvdG9mZXRjaDpyZWZzL2hlYWRzL3BhcmFsbGVsMworICAgICBnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgcGFyYWxsZWwzIHwgZ3JlcCAkUEFSQTMKKyAgICAgZ2l0IHNob3cgJFBBUkEzIHwgZ3JlcCAiQSBVIFRob3IiCisgICAgIGNkIC4uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBhbmQgcmVwbGFjZW1lbnRzJyAnCisgICAgIGdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g3ICRIQVNIMSAmJgorICAgICB0ZXN0ICIkUyIgPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIiAmJgorICAgICBnaXQgYmlzZWN0IHJlc2V0ICYmCisgICAgIEdJVF9OT19SRVBMQUNFX09CSkVDVFM9MSBnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINyAkSEFTSDEgJiYKKyAgICAgdGVzdCAiJEhBU0g0IiA9ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkiICYmCisgICAgIGdpdCBiaXNlY3QgcmVzZXQgJiYKKyAgICAgZ2l0IC0tbm8tcmVwbGFjZS1vYmplY3RzIGJpc2VjdCBzdGFydCAkSEFTSDcgJEhBU0gxICYmCisgICAgIHRlc3QgIiRIQVNINCIgPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIiAmJgorICAgICBnaXQgYmlzZWN0IHJlc2V0CisnCisKKyMKKyMKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjEyMC1kZXNjcmliZS5zaCBiL3QvdDYxMjAtZGVzY3JpYmUuc2gKaW5kZXggOGM3ZTA4MS4uMDY1ZGVhZCAxMDA3NTUKLS0tIGEvdC90NjEyMC1kZXNjcmliZS5zaAorKysgYi90L3Q2MTIwLWRlc2NyaWJlLnNoCkBAIC0zNCw2ICszNCw4IEBACiAJZWNobyBvbmUgPmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmIGdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgogCW9uZT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKIAorCWdpdCBkZXNjcmliZSAtLWFsd2F5cyBIRUFEICYmCisKIAl0ZXN0X3RpY2sgJiYKIAllY2hvIHR3byA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBzZWNvbmQgJiYKIAl0d289JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCkBAIC05MCwxMiArOTIsMTggQEAKIGNoZWNrX2Rlc2NyaWJlIEQtKiBIRUFEXl4KIGNoZWNrX2Rlc2NyaWJlIEEtKiBIRUFEXl4yCiBjaGVja19kZXNjcmliZSBCIEhFQUReXjJeCitjaGVja19kZXNjcmliZSBELSogSEVBRF5eXgogCiBjaGVja19kZXNjcmliZSBjLSogLS10YWdzIEhFQUQKIGNoZWNrX2Rlc2NyaWJlIGMtKiAtLXRhZ3MgSEVBRF4KIGNoZWNrX2Rlc2NyaWJlIGUtKiAtLXRhZ3MgSEVBRF5eCiBjaGVja19kZXNjcmliZSBjLSogLS10YWdzIEhFQUReXjIKIGNoZWNrX2Rlc2NyaWJlIEIgLS10YWdzIEhFQUReXjJeCitjaGVja19kZXNjcmliZSBlIC0tdGFncyBIRUFEXl5eCisKK2NoZWNrX2Rlc2NyaWJlIGhlYWRzL21hc3RlciAtLWFsbCBIRUFECitjaGVja19kZXNjcmliZSB0YWdzL2MtKiAtLWFsbCBIRUFEXgorY2hlY2tfZGVzY3JpYmUgdGFncy9lIC0tYWxsIEhFQUReXl4KIAogY2hlY2tfZGVzY3JpYmUgQi0wLSogLS1sb25nIEhFQUReXjJeCiBjaGVja19kZXNjcmliZSBBLTMtKiAtLWxvbmcgSEVBRF5eMgpAQCAtMTIzLDYgKzEzMSwyMCBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjayB0YWcgcmVmcycgJ2dpdCBwYWNrLXJlZnMnCiBjaGVja19kZXNjcmliZSBBLSogSEVBRAogCitjaGVja19kZXNjcmliZSAiQS0qWzAtOWEtZl0iIC0tZGlydHkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0LXVwIGRpcnR5IHdvcmsgdHJlZScgJworCWVjaG8gPj5maWxlCisnCisKK2NoZWNrX2Rlc2NyaWJlICJBLSpbMC05YS1mXS1kaXJ0eSIgLS1kaXJ0eQorCitjaGVja19kZXNjcmliZSAiQS0qWzAtOWEtZl0ubW9kIiAtLWRpcnR5PS5tb2QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVzY3JpYmUgLS1kaXJ0eSBIRUFEJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRlc2NyaWJlIC0tZGlydHkgSEVBRAorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQtdXAgbWF0Y2hpbmcgcGF0dGVybiB0ZXN0cycgJwogCWdpdCB0YWcgLWEgLW0gdGVzdC1hbm5vdGF0ZWQgdGVzdC1hbm5vdGF0ZWQgJiYKIAllY2hvID4+ZmlsZSAmJgpkaWZmIC0tZ2l0IGEvdC90NzAwMS1tdi5zaCBiL3QvdDcwMDEtbXYuc2gKaW5kZXggMTBiOGY4Yy4uNjVhMzVkOSAxMDA3NTUKLS0tIGEvdC90NzAwMS1tdi5zaAorKysgYi90L3Q3MDAxLW12LnNoCkBAIC0xODksNiArMTg5LDE4IEBACiAKICknCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBtdiB0byBtb3ZlIG11bHRpcGxlIHNvdXJjZXMgaW50byBhIGRpcmVjdG9yeScgJworCXJtIC1mciAuZ2l0ICYmIGdpdCBpbml0ICYmCisJbWtkaXIgZGlyIG90aGVyICYmCisJPmRpci9hLnR4dCAmJgorCT5kaXIvYi50eHQgJiYKKwlnaXQgYWRkIGRpci8/LnR4dCAmJgorCWdpdCBtdiBkaXIvYS50eHQgZGlyL2IudHh0IG90aGVyICYmCisJZ2l0IGxzLWZpbGVzID5hY3R1YWwgJiYKKwl7IGVjaG8gb3RoZXIvYS50eHQ7IGVjaG8gb3RoZXIvYi50eHQ7IH0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG12IHNob3VsZCBub3QgY2hhbmdlIHNoYTEgb2YgbW92ZWQgY2FjaGUgZW50cnknICcKIAogCXJtIC1mciAuZ2l0ICYmCmRpZmYgLS1naXQgYS90L3Q3MDAyLWdyZXAuc2ggYi90L3Q3MDAyLWdyZXAuc2gKaW5kZXggNzg2OGFmOC4uYWY2M2Q2ZSAxMDA3NTUKLS0tIGEvdC90NzAwMi1ncmVwLnNoCisrKyBiL3QvdDcwMDItZ3JlcC5zaApAQCAtOCw2ICs4LDE2IEBACiAKIC4gLi90ZXN0LWxpYi5zaAogCitjYXQgPmhlbGxvLmMgPDxFT0YKKyNpbmNsdWRlIDxzdGRpby5oPgoraW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXByaW50ZigiSGVsbG8gd29ybGQuXG4iKTsKKwlyZXR1cm4gMDsKKwkvKiBjaGFyID8/ICovCit9CitFT0YKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCiAJewogCQllY2hvIGZvbyBtbWFwIGJhcgpAQCAtMTYsMTMgKzI2LDE3IEBACiAJCWVjaG8gZm9vIG1tYXAgYmFyX21tYXAKIAkJZWNobyBmb29fbW1hcCBiYXIgbW1hcCBiYXoKIAl9ID5maWxlICYmCisJZWNobyB2dnYgPnYgJiYKIAllY2hvIHd3IHcgPncgJiYKIAllY2hvIHggeCB4eCB4ID54ICYmCiAJZWNobyB5IHl5ID55ICYmCiAJZWNobyB6enogPiB6ICYmCiAJbWtkaXIgdCAmJgogCWVjaG8gdGVzdCA+dC90ICYmCi0JZ2l0IGFkZCBmaWxlIHcgeCB5IHogdC90ICYmCisJZWNobyB2dnYgPnQvdiAmJgorCW1rZGlyIHQvYSAmJgorCWVjaG8gdnZ2ID50L2EvdiAmJgorCWdpdCBhZGQgLiAmJgogCXRlc3RfdGljayAmJgogCWdpdCBjb21taXQgLW0gaW5pdGlhbAogJwpAQCAtMTIzLDYgKzEzNyw1MSBAQAogCQkhIGdpdCBncmVwIC1jIHRlc3QgJEggfCBncmVwIC9kZXYvbnVsbAogICAgICAgICAnCiAKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC0tbWF4LWRlcHRoIC0xICRMIiAnCisJCXsKKwkJCWVjaG8gJHtIQ310L2EvdjoxOnZ2dgorCQkJZWNobyAke0hDfXQvdjoxOnZ2dgorCQkJZWNobyAke0hDfXY6MTp2dnYKKwkJfSA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IGdyZXAgLS1tYXgtZGVwdGggLTEgLW4gLWUgdnZ2ICRIID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAtLW1heC1kZXB0aCAwICRMIiAnCisJCXsKKwkJCWVjaG8gJHtIQ312OjE6dnZ2CisJCX0gPmV4cGVjdGVkICYmCisJCWdpdCBncmVwIC0tbWF4LWRlcHRoIDAgLW4gLWUgdnZ2ICRIID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAtLW1heC1kZXB0aCAwIC0tICcqJyAkTCIgJworCQl7CisJCQllY2hvICR7SEN9dC9hL3Y6MTp2dnYKKwkJCWVjaG8gJHtIQ310L3Y6MTp2dnYKKwkJCWVjaG8gJHtIQ312OjE6dnZ2CisJCX0gPmV4cGVjdGVkICYmCisJCWdpdCBncmVwIC0tbWF4LWRlcHRoIDAgLW4gLWUgdnZ2ICRIIC0tICIqIiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLS1tYXgtZGVwdGggMSAkTCIgJworCQl7CisJCQllY2hvICR7SEN9dC92OjE6dnZ2CisJCQllY2hvICR7SEN9djoxOnZ2dgorCQl9ID5leHBlY3RlZCAmJgorCQlnaXQgZ3JlcCAtLW1heC1kZXB0aCAxIC1uIC1lIHZ2diAkSCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLS1tYXgtZGVwdGggMCAtLSB0ICRMIiAnCisJCXsKKwkJCWVjaG8gJHtIQ310L3Y6MTp2dnYKKwkJfSA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IGdyZXAgLS1tYXgtZGVwdGggMCAtbiAtZSB2dnYgJEggLS0gdCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKwogZG9uZQogCiBjYXQgPmV4cGVjdGVkIDw8RU9GCkBAIC0xNTUsNiArMjE0LDEwNyBAQAogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIHNob3VsZCBpZ25vcmUgR1JFUF9PUFRJT05TJyAnCisJR1JFUF9PUFRJT05TPS12IGdpdCBncmVwICIgbW1hcCBiYXJcJCIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1mLCBub24tZXhpc3RlbnQgZmlsZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBncmVwIC1mIHBhdHRlcm5zCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2ZpbGU6Zm9vIG1tYXAgYmFyCitmaWxlOmZvb19tbWFwIGJhcgorZmlsZTpmb29fbW1hcCBiYXIgbW1hcAorZmlsZTpmb28gbW1hcCBiYXJfbW1hcAorZmlsZTpmb29fbW1hcCBiYXIgbW1hcCBiYXoKK0VPRgorCitjYXQgPnBhdHRlcm4gPDxFT0YKK21tYXAKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1mLCBvbmUgcGF0dGVybicgJworCWdpdCBncmVwIC1mIHBhdHRlcm4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitmaWxlOmZvbyBtbWFwIGJhcgorZmlsZTpmb29fbW1hcCBiYXIKK2ZpbGU6Zm9vX21tYXAgYmFyIG1tYXAKK2ZpbGU6Zm9vIG1tYXAgYmFyX21tYXAKK2ZpbGU6Zm9vX21tYXAgYmFyIG1tYXAgYmF6Cit0L2Evdjp2dnYKK3Qvdjp2dnYKK3Y6dnZ2CitFT0YKKworY2F0ID5wYXR0ZXJucyA8PEVPRgorbW1hcAordnZ2CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtZiwgbXVsdGlwbGUgcGF0dGVybnMnICcKKwlnaXQgZ3JlcCAtZiBwYXR0ZXJucyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2ZpbGU6Zm9vIG1tYXAgYmFyCitmaWxlOmZvb19tbWFwIGJhcgorZmlsZTpmb29fbW1hcCBiYXIgbW1hcAorZmlsZTpmb28gbW1hcCBiYXJfbW1hcAorZmlsZTpmb29fbW1hcCBiYXIgbW1hcCBiYXoKK3QvYS92OnZ2dgordC92OnZ2dgordjp2dnYKK0VPRgorCitjYXQgPnBhdHRlcm5zIDw8RU9GCisKK21tYXAKKwordnZ2CisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1mLCBpZ25vcmUgZW1wdHkgbGluZXMnICcKKwlnaXQgZ3JlcCAtZiBwYXR0ZXJucyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK3k6eSB5eQorLS0KK3o6enp6CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtcSwgc2lsZW50bHkgcmVwb3J0IG1hdGNoZXMnICcKKwk+ZW1wdHkgJiYKKwlnaXQgZ3JlcCAtcSBtbWFwID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBlbXB0eSBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCAtcSBxZndmcSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZW1wdHkgYWN0dWFsCisnCisKKyMgQ3JlYXRlIDEwMjQgZmlsZSBuYW1lcyB0aGF0IHNvcnQgYmV0d2VlbiAieSIgYW5kICJ6IiB0byBtYWtlIHN1cmUKKyMgdGhlIHR3byBmaWxlcyBhcmUgaGFuZGxlZCBieSBkaWZmZXJlbnQgY2FsbHMgdG8gYW4gZXh0ZXJuYWwgZ3JlcC4KKyMgVGhpcyBkZXBlbmRzIG9uIE1BWEFSR1MgaW4gYnVpbHRpbi1ncmVwLmMgYmVpbmcgMTAyNCBvciBsZXNzLgorYzMyPSIwIDEgMiAzIDQgNSA2IDcgOCA5IGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1DMSwgaHVuayBtYXJrIGJldHdlZW4gZmlsZXMnICcKKwlmb3IgYSBpbiAkYzMyOyBkbyBmb3IgYiBpbiAkYzMyOyBkbyA6ID55LSRhJGI7IGRvbmU7IGRvbmUgJiYKKwlnaXQgYWRkIHktPz8gJiYKKwlnaXQgZ3JlcCAtQzEgIl5beXpdIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLUMxIGh1bmsgbWFyayBiZXR3ZWVuIGZpbGVzJyAnCisJZ2l0IGdyZXAgLUMxICJeW3l6XSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgZ3JlcCBzZXR1cCcgJwogCWVjaG8gYSA+PmZpbGUgJiYKIAl0ZXN0X3RpY2sgJiYKQEAgLTE5Myw3ICszNTMsNyBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgZ3JlcCAoNSknICcKLQlnaXQgbG9nIC0tYXV0aG9yPVRob3IgLUYgLS1ncmVwPVRodSAtLXByZXR0eT10Zm9ybWF0OiVzID5hY3R1YWwgJiYKKwlnaXQgbG9nIC0tYXV0aG9yPVRob3IgLUYgLS1wcmV0dHk9dGZvcm1hdDolcyA+YWN0dWFsICYmCiAJKCBlY2hvIHRoaXJkIDsgZWNobyBpbml0aWFsICkgPmV4cGVjdCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKQEAgLTIwNCwxMiArMzY0LDExNSBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JlcCAtLWF1dGhvciBpbXBsaWNpdGx5IHVzZXMgYWxsLW1hdGNoJyAnCisJIyBncmVwIG1hdGNoZXMgaW5pdGlhbCBhbmQgc2Vjb25kIGJ1dCBub3QgdGhpcmQKKwkjIGF1dGhvciBtYXRjaGVzIG9ubHkgaW5pdGlhbCBhbmQgdGhpcmQKKwlnaXQgbG9nIC0tYXV0aG9yPSJBIFUgVGhvciIgLS1ncmVwPXMgLS1ncmVwPWwgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCWVjaG8gaW5pdGlhbCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIHdpdGggQ0VfVkFMSUQgZmlsZScgJwogCWdpdCB1cGRhdGUtaW5kZXggLS1hc3N1bWUtdW5jaGFuZ2VkIHQvdCAmJgogCXJtIHQvdCAmJgotCXRlc3QgIiQoZ2l0IGdyZXAgLS1uby1leHQtZ3JlcCB0KSIgPSAidC90OnRlc3QiICYmCisJdGVzdCAiJChnaXQgZ3JlcCB0ZXN0KSIgPSAidC90OnRlc3QiICYmCiAJZ2l0IHVwZGF0ZS1pbmRleCAtLW5vLWFzc3VtZS11bmNoYW5nZWQgdC90ICYmCiAJZ2l0IGNoZWNrb3V0IHQvdAogJwogCitjYXQgPmV4cGVjdGVkIDw8RU9GCitoZWxsby5jPSNpbmNsdWRlIDxzdGRpby5oPgoraGVsbG8uYzoJcmV0dXJuIDA7CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtcCB3aXRoIHVzZXJkaWZmJyAnCisJZ2l0IGNvbmZpZyBkaWZmLmN1c3RvbS5mdW5jbmFtZSAiXiMiICYmCisJZWNobyAiaGVsbG8uYyBkaWZmPWN1c3RvbSIgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGdyZXAgLXAgcmV0dXJuID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgoraGVsbG8uYz1pbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCitoZWxsby5jOglyZXR1cm4gMDsKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1wJyAnCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgZ3JlcCAtcCByZXR1cm4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitoZWxsby5jLSNpbmNsdWRlIDxzdGRpby5oPgoraGVsbG8uYz1pbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCitoZWxsby5jLXsKK2hlbGxvLmMtCXByaW50ZigiSGVsbG8gd29ybGQuXG4iKTsKK2hlbGxvLmM6CXJldHVybiAwOworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLXAgLUI1JyAnCisJZ2l0IGdyZXAgLXAgLUI1IHJldHVybiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgZnJvbSBhIHN1YmRpcmVjdG9yeSB0byBzZWFyY2ggd2lkZXIgYXJlYSAoMSknICcKKwlta2RpciAtcCBzICYmCisJKAorCQljZCBzICYmIGdpdCBncmVwICJ4IHggeCIgLi4KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgZnJvbSBhIHN1YmRpcmVjdG9yeSB0byBzZWFyY2ggd2lkZXIgYXJlYSAoMiknICcKKwlta2RpciAtcCBzICYmCisJKAorCQljZCBzIHx8IGV4aXQgMQorCQkoIGdpdCBncmVwIHh4eXl6eiAuLiA+b3V0IDsgZWNobyAkPyA+c3RhdHVzICkKKwkJISB0ZXN0IC1zIG91dCAmJgorCQl0ZXN0IDEgPSAkKGNhdCBzdGF0dXMpCisJKQorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitoZWxsby5jOmludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1GaScgJworCWdpdCBncmVwIC1GaSAiQ0hBUiAqIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGRvdWJsZS1kYXNoIHRlc3RzJyAnCitjYXQgPmRvdWJsZS1kYXNoIDw8RU9GICYmCistLQorLT4KK290aGVyCitFT0YKK2dpdCBhZGQgZG91YmxlLWRhc2gKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorZG91YmxlLWRhc2g6LT4KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtLSBwYXR0ZXJuJyAnCisJZ2l0IGdyZXAgLS0gIi0+IiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC0tIHBhdHRlcm4gLS0gcGF0aHNwZWMnICcKKwlnaXQgZ3JlcCAtLSAiLT4iIC0tIGRvdWJsZS1kYXNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLWUgcGF0dGVybiAtLSBwYXRoJyAnCisJZ2l0IGdyZXAgLWUgIi0+IiAtLSBkb3VibGUtZGFzaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2RvdWJsZS1kYXNoOi0tCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLWUgLS0gLS0gcGF0aCcgJworCWdpdCBncmVwIC1lIC0tIC0tIGRvdWJsZS1kYXNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MDAzLWZpbHRlci1icmFuY2guc2ggYi90L3Q3MDAzLWZpbHRlci1icmFuY2guc2gKaW5kZXggMzI5Yzg1MS4uMGRhMTNhOCAxMDA3NTUKLS0tIGEvdC90NzAwMy1maWx0ZXItYnJhbmNoLnNoCisrKyBiL3QvdDcwMDMtZmlsdGVyLWJyYW5jaC5zaApAQCAtMjg4LDQgKzI4OCw2MSBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZW1hcC10by1hbmNlc3RvciB3aXRoIGZpbGVuYW1lIGZpbHRlcnMnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBBICYmCisJdGVzdF9jb21taXQgYWRkLWZvbyBmb28gMSAmJgorCWdpdCBicmFuY2ggbW92ZWQtZm9vICYmCisJdGVzdF9jb21taXQgYWRkLWJhciBiYXIgYSAmJgorCWdpdCBicmFuY2ggaW52YXJpYW50ICYmCisJb3JpZ19pbnZhcmlhbnQ9JChnaXQgcmV2LXBhcnNlIGludmFyaWFudCkgJiYKKwlnaXQgYnJhbmNoIG1vdmVkLWJhciAmJgorCXRlc3RfY29tbWl0IGNoYW5nZS1mb28gZm9vIDIgJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLXJlbWFwLXRvLWFuY2VzdG9yIFwKKwkJbW92ZWQtZm9vIG1vdmVkLWJhciBBLi5tYXN0ZXIgXAorCQktLSAtLSBmb28gJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBtb3ZlZC1mb28pID0gJChnaXQgcmV2LXBhcnNlIG1vdmVkLWJhcikgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBtb3ZlZC1mb28pID0gJChnaXQgcmV2LXBhcnNlIG1hc3Rlcl4pICYmCisJdGVzdCAkb3JpZ19pbnZhcmlhbnQgPSAkKGdpdCByZXYtcGFyc2UgaW52YXJpYW50KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdWJtb2R1bGUnICcKKwlybSAtZnIgPyogLmdpdCAmJgorCWdpdCBpbml0ICYmCisJdGVzdF9jb21taXQgZmlsZSAmJgorCW1rZGlyIHN1Ym1vZCAmJgorCXN1Ym1vZHVybD0iJFBXRC9zdWJtb2QiICYmCisJKCBjZCBzdWJtb2QgJiYKKwkgIGdpdCBpbml0ICYmCisJICB0ZXN0X2NvbW1pdCBmaWxlLWluLXN1Ym1vZCApICYmCisJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRzdWJtb2R1cmwiICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkZWQgc3VibW9kdWxlIiAmJgorCXRlc3RfY29tbWl0IGFkZC1maWxlICYmCisJKCBjZCBzdWJtb2QgJiYgdGVzdF9jb21taXQgYWRkLWluLXN1Ym1vZHVsZSApICYmCisJZ2l0IGFkZCBzdWJtb2QgJiYKKwlnaXQgY29tbWl0IC1tICJjaGFuZ2VkIHN1Ym1vZHVsZSIgJiYKKwlnaXQgYnJhbmNoIG9yaWdpbmFsIEhFQUQKKycKKworb3JpZ19oZWFkPWBnaXQgc2hvdy1yZWYgLS1oYXNoIC0taGVhZCBIRUFEYAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXdyaXRlIHN1Ym1vZHVsZSB3aXRoIGFub3RoZXIgY29udGVudCcgJworCWdpdCBmaWx0ZXItYnJhbmNoIC0tdHJlZS1maWx0ZXIgInRlc3QgLWQgc3VibW9kICYmIHsKKwkJCQkJIHJtIC1yZiBzdWJtb2QgJiYKKwkJCQkJIGdpdCBybSAtcmYgLS1xdWlldCBzdWJtb2QgJiYKKwkJCQkJIG1rZGlyIHN1Ym1vZCAmJgorCQkJCQkgOiA+IHN1Ym1vZC9maWxlCisJCQkJCSB9IHx8IDoiIEhFQUQgJiYKKwl0ZXN0ICRvcmlnX2hlYWQgIT0gYGdpdCBzaG93LXJlZiAtLWhhc2ggLS1oZWFkIEhFQURgCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGxhY2Ugc3VibW9kdWxlIHJldmlzaW9uJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW5hbCAmJgorCWdpdCBmaWx0ZXItYnJhbmNoIC1mIC0tdHJlZS1maWx0ZXIgXAorCSAgICAiaWYgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCAtLSBzdWJtb2QgPiAvZGV2L251bGwgMj4mMQorCSAgICAgdGhlbiBnaXQgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDE2MDAwMCAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5IHN1Ym1vZAorCSAgICAgZmkiIEhFQUQgJiYKKwl0ZXN0ICRvcmlnX2hlYWQgIT0gYGdpdCBzaG93LXJlZiAtLWhhc2ggLS1oZWFkIEhFQURgCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzAwNS1lZGl0b3Iuc2ggYi90L3Q3MDA1LWVkaXRvci5zaAppbmRleCBiNjQ3OTU3Li41MjU3ZjRkIDEwMDc1NQotLS0gYS90L3Q3MDA1LWVkaXRvci5zaAorKysgYi90L3Q3MDA1LWVkaXRvci5zaApAQCAtNCw3ICs0LDIxIEBACiAKIC4gLi90ZXN0LWxpYi5zaAogCi1mb3IgaSBpbiBHSVRfRURJVE9SIGNvcmVfZWRpdG9yIEVESVRPUiBWSVNVQUwgdmkKK3Vuc2V0IEVESVRPUiBWSVNVQUwgR0lUX0VESVRPUgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlcm1pbmUgZGVmYXVsdCBlZGl0b3InICcKKworCXZpPSQoVEVSTT12dDEwMCBnaXQgdmFyIEdJVF9FRElUT1IpICYmCisJdGVzdCAtbiAiJHZpIgorCisnCisKK2lmICEgZXhwciAiJHZpIiA6ICdeW2Etel0qJCcgPi9kZXYvbnVsbAordGhlbgorCXZpPQorZmkKKworZm9yIGkgaW4gR0lUX0VESVRPUiBjb3JlX2VkaXRvciBFRElUT1IgVklTVUFMICR2aQogZG8KIAljYXQgPmUtJGkuc2ggPDwtRU9GCiAJIyEkU0hFTExfUEFUSApAQCAtMTIsMTkgKzI2LDE4IEBACiAJRU9GCiAJY2htb2QgK3ggZS0kaS5zaAogZG9uZQotdW5zZXQgdmkKLW12IGUtdmkuc2ggdmkKLXVuc2V0IEVESVRPUiBWSVNVQUwgR0lUX0VESVRPUgorCitpZiAhIHRlc3QgLXogIiR2aSIKK3RoZW4KKwltdiBlLSR2aS5zaCAkdmkKK2ZpCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJwogCi0JbXNnPSJIYW5kIGVkaXRlZCIgJiYKKwltc2c9IkhhbmQtZWRpdGVkIiAmJgorCXRlc3RfY29tbWl0ICIkbXNnIiAmJgogCWVjaG8gIiRtc2ciID5leHBlY3QgJiYKLQlnaXQgYWRkIHZpICYmCi0JdGVzdF90aWNrICYmCi0JZ2l0IGNvbW1pdCAtbSAiJG1zZyIgJiYKLQlnaXQgc2hvdyAtcyAtLXByZXR0eT1vbmVsaW5lIHwKLQlzZWQgLWUgInMvXlswLTlhLWZdKiAvLyIgPmFjdHVhbCAmJgorCWdpdCBzaG93IC1zIC0tZm9ybWF0PSVzID4gYWN0dWFsICYmCiAJZGlmZiBhY3R1YWwgZXhwZWN0CiAKICcKQEAgLTQyLDkgKzU1LDE5IEBACiAJZmkKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZHVtYiBzaG91bGQgcHJlZmVyIEVESVRPUiB0byBWSVNVQUwnICcKKworCUVESVRPUj0uL2UtRURJVE9SLnNoICYmCisJVklTVUFMPS4vZS1WSVNVQUwuc2ggJiYKKwlleHBvcnQgRURJVE9SIFZJU1VBTCAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAmJgorCXRlc3QgIiQoZ2l0IHNob3cgLXMgLS1mb3JtYXQ9JXMpIiA9ICJFZGl0ZWQgYnkgRURJVE9SIgorCisnCisKIFRFUk09dnQxMDAKIGV4cG9ydCBURVJNCi1mb3IgaSBpbiB2aSBFRElUT1IgVklTVUFMIGNvcmVfZWRpdG9yIEdJVF9FRElUT1IKK2ZvciBpIGluICR2aSBFRElUT1IgVklTVUFMIGNvcmVfZWRpdG9yIEdJVF9FRElUT1IKIGRvCiAJZWNobyAiRWRpdGVkIGJ5ICRpIiA+ZXhwZWN0CiAJdW5zZXQgRURJVE9SIFZJU1VBTCBHSVRfRURJVE9SCkBAIC02OCw3ICs5MSw3IEBACiAKIHVuc2V0IEVESVRPUiBWSVNVQUwgR0lUX0VESVRPUgogZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBjb3JlLmVkaXRvcgotZm9yIGkgaW4gdmkgRURJVE9SIFZJU1VBTCBjb3JlX2VkaXRvciBHSVRfRURJVE9SCitmb3IgaSBpbiAkdmkgRURJVE9SIFZJU1VBTCBjb3JlX2VkaXRvciBHSVRfRURJVE9SCiBkbwogCWVjaG8gIkVkaXRlZCBieSAkaSIgPmV4cGVjdAogCWNhc2UgIiRpIiBpbgpkaWZmIC0tZ2l0IGEvdC90NzAwNi1wYWdlci5zaCBiL3QvdDcwMDYtcGFnZXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDkyMDJkNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcwMDYtcGFnZXIuc2gKQEAgLTAsMCArMSwxNzYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGF1dG9tYXRpYyB1c2Ugb2YgYSBwYWdlci4nCisKKy4gLi90ZXN0LWxpYi5zaAorCitybSAtZiBzdGRvdXRfaXNfdHR5Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgdGVybWluYWwgZm9yIHRlc3RzJyAnCisJaWYgdGVzdCAtdCAxCisJdGhlbgorCQk6ID4gc3Rkb3V0X2lzX3R0eQorCWVsaWYKKwkJdGVzdF9oYXZlX3ByZXJlcSBQRVJMICYmCisJCSIkUEVSTF9QQVRIIiAiJFRFU1RfRElSRUNUT1JZIi90NzAwNi90ZXN0LXRlcm1pbmFsLnBlcmwgXAorCQkJc2ggLWMgInRlc3QgLXQgMSIKKwl0aGVuCisJCTogPiB0ZXN0X3Rlcm1pbmFsX3dvcmtzCisJZmkKKycKKworaWYgdGVzdCAtZSBzdGRvdXRfaXNfdHR5Cit0aGVuCisJdGVzdF90ZXJtaW5hbCgpIHsgIiRAIjsgfQorCXRlc3Rfc2V0X3ByZXJlcSBUVFkKK2VsaWYgdGVzdCAtZSB0ZXN0X3Rlcm1pbmFsX3dvcmtzCit0aGVuCisJdGVzdF90ZXJtaW5hbCgpIHsKKwkJIiRQRVJMX1BBVEgiICIkVEVTVF9ESVJFQ1RPUlkiL3Q3MDA2L3Rlc3QtdGVybWluYWwucGVybCAiJEAiCisJfQorCXRlc3Rfc2V0X3ByZXJlcSBUVFkKK2Vsc2UKKwlzYXkgbm8gdXNhYmxlIHRlcm1pbmFsLCBzbyBza2lwcGluZyBzb21lIHRlc3RzCitmaQorCit1bnNldCBHSVRfUEFHRVIgR0lUX1BBR0VSX0lOX1VTRQorZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUucGFnZXIKK1BBR0VSPSdjYXQgPiBwYWdpbmF0ZWQub3V0JworZXhwb3J0IFBBR0VSCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgaW5pdGlhbAorJworCitybSAtZiBwYWdpbmF0ZWQub3V0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnc29tZSBjb21tYW5kcyB1c2UgYSBwYWdlcicgJworCXRlc3RfdGVybWluYWwgZ2l0IGxvZyAmJgorCXRlc3QgLWUgcGFnaW5hdGVkLm91dAorJworCitybSAtZiBwYWdpbmF0ZWQub3V0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnc29tZSBjb21tYW5kcyBkbyBub3QgdXNlIGEgcGFnZXInICcKKwl0ZXN0X3Rlcm1pbmFsIGdpdCByZXYtbGlzdCBIRUFEICYmCisJISB0ZXN0IC1lIHBhZ2luYXRlZC5vdXQKKycKKworcm0gLWYgcGFnaW5hdGVkLm91dAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gcGFnZXIgd2hlbiBzdGRvdXQgaXMgYSBwaXBlJyAnCisJZ2l0IGxvZyB8IGNhdCAmJgorCSEgdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3JtIC1mIHBhZ2luYXRlZC5vdXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIHBhZ2VyIHdoZW4gc3Rkb3V0IGlzIGEgcmVndWxhciBmaWxlJyAnCisJZ2l0IGxvZyA+IGZpbGUgJiYKKwkhIHRlc3QgLWUgcGFnaW5hdGVkLm91dAorJworCitybSAtZiBwYWdpbmF0ZWQub3V0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnZ2l0IC0tcGFnaW5hdGUgcmV2LWxpc3QgdXNlcyBhIHBhZ2VyJyAnCisJdGVzdF90ZXJtaW5hbCBnaXQgLS1wYWdpbmF0ZSByZXYtbGlzdCBIRUFEICYmCisJdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3JtIC1mIGZpbGUgcGFnaW5hdGVkLm91dAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gcGFnZXIgZXZlbiB3aXRoIC0tcGFnaW5hdGUgd2hlbiBzdGRvdXQgaXMgYSBwaXBlJyAnCisJZ2l0IC0tcGFnaW5hdGUgbG9nIHwgY2F0ICYmCisJISB0ZXN0IC1lIHBhZ2luYXRlZC5vdXQKKycKKworcm0gLWYgcGFnaW5hdGVkLm91dAordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ25vIHBhZ2VyIHdpdGggLS1uby1wYWdlcicgJworCXRlc3RfdGVybWluYWwgZ2l0IC0tbm8tcGFnZXIgbG9nICYmCisJISB0ZXN0IC1lIHBhZ2luYXRlZC5vdXQKKycKKworIyBBIGNvbG9yZWQgY29tbWl0IGxvZyB3aWxsIGJlZ2luIHdpdGggYW4gYXBwcm9wcmlhdGUgQU5TSSBlc2NhcGUKKyMgZm9yIHRoZSBmaXJzdCBjb2xvcjsgdGhlIHRleHQgImNvbW1pdCIgY29tZXMgbGF0ZXIuCitjb2xvcmZ1bCgpIHsKKwlyZWFkIGZpcnN0bGluZSA8ICQxCisJISBleHByICIkZmlyc3RsaW5lIiA6ICJeW2EtekEtWl0iID4vZGV2L251bGwKK30KKworcm0gLWYgY29sb3JmdWwubG9nIGNvbG9ybGVzcy5sb2cKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3RzIGNhbiBkZXRlY3QgY29sb3InICcKKwlnaXQgbG9nIC0tbm8tY29sb3IgPiBjb2xvcmxlc3MubG9nICYmCisJZ2l0IGxvZyAtLWNvbG9yID4gY29sb3JmdWwubG9nICYmCisJISBjb2xvcmZ1bCBjb2xvcmxlc3MubG9nICYmCisJY29sb3JmdWwgY29sb3JmdWwubG9nCisnCisKK3JtIC1mIGNvbG9ybGVzcy5sb2cKK2dpdCBjb25maWcgY29sb3IudWkgYXV0bwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gY29sb3Igd2hlbiBzdGRvdXQgaXMgYSByZWd1bGFyIGZpbGUnICcKKwlnaXQgbG9nID4gY29sb3JsZXNzLmxvZyAmJgorCSEgY29sb3JmdWwgY29sb3JsZXNzLmxvZworJworCitybSAtZiBwYWdpbmF0ZWQub3V0CitnaXQgY29uZmlnIGNvbG9yLnVpIGF1dG8KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdjb2xvciB3aGVuIHdyaXRpbmcgdG8gYSBwYWdlcicgJworCVRFUk09dnQxMDAgdGVzdF90ZXJtaW5hbCBnaXQgbG9nICYmCisJY29sb3JmdWwgcGFnaW5hdGVkLm91dAorJworCitybSAtZiBjb2xvcmZ1bC5sb2cKK2dpdCBjb25maWcgY29sb3IudWkgYXV0bwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29sb3Igd2hlbiB3cml0aW5nIHRvIGEgZmlsZSBpbnRlbmRlZCBmb3IgYSBwYWdlcicgJworCVRFUk09dnQxMDAgR0lUX1BBR0VSX0lOX1VTRT10cnVlIGdpdCBsb2cgPiBjb2xvcmZ1bC5sb2cgJiYKKwljb2xvcmZ1bCBjb2xvcmZ1bC5sb2cKKycKKwordW5zZXQgUEFHRVIgR0lUX1BBR0VSCitnaXQgY29uZmlnIC0tdW5zZXQgY29yZS5wYWdlcgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZXJtaW5lIGRlZmF1bHQgcGFnZXInICcKKwlsZXNzPSQoZ2l0IHZhciBHSVRfUEFHRVIpICYmCisJdGVzdCAtbiAiJGxlc3MiCisnCisKK2lmIGV4cHIgIiRsZXNzIiA6ICdeW2Etel0qJCcgPiAvZGV2L251bGwgJiYgdGVzdF9oYXZlX3ByZXJlcSBUVFkKK3RoZW4KKwl0ZXN0X3NldF9wcmVyZXEgU0lNUExFUEFHRVIKK2ZpCisKK3Vuc2V0IFBBR0VSIEdJVF9QQUdFUgorZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUucGFnZXIKK3JtIC1mIGRlZmF1bHRfcGFnZXJfdXNlZAordGVzdF9leHBlY3Rfc3VjY2VzcyBTSU1QTEVQQUdFUiAnZGVmYXVsdCBwYWdlciBpcyB1c2VkIGJ5IGRlZmF1bHQnICcKKwljYXQgPiAkbGVzcyA8PC1FT0YgJiYKKwkjISRTSEVMTF9QQVRICisJd2MgPiBkZWZhdWx0X3BhZ2VyX3VzZWQKKwlFT0YKKwljaG1vZCAreCAkbGVzcyAmJgorCVBBVEg9LjokUEFUSCB0ZXN0X3Rlcm1pbmFsIGdpdCBsb2cgJiYKKwl0ZXN0IC1lIGRlZmF1bHRfcGFnZXJfdXNlZAorJworCit1bnNldCBHSVRfUEFHRVIKK2dpdCBjb25maWcgLS11bnNldCBjb3JlLnBhZ2VyCitybSAtZiBQQUdFUl91c2VkCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnUEFHRVIgb3ZlcnJpZGVzIGRlZmF1bHQgcGFnZXInICcKKwlQQUdFUj0id2MgPiBQQUdFUl91c2VkIiAmJgorCWV4cG9ydCBQQUdFUiAmJgorCXRlc3RfdGVybWluYWwgZ2l0IGxvZyAmJgorCXRlc3QgLWUgUEFHRVJfdXNlZAorJworCit1bnNldCBHSVRfUEFHRVIKK3JtIC1mIGNvcmUucGFnZXJfdXNlZAordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2NvcmUucGFnZXIgb3ZlcnJpZGVzIFBBR0VSJyAnCisJUEFHRVI9d2MgJiYKKwlleHBvcnQgUEFHRVIgJiYKKwlnaXQgY29uZmlnIGNvcmUucGFnZXIgIndjID4gY29yZS5wYWdlcl91c2VkIiAmJgorCXRlc3RfdGVybWluYWwgZ2l0IGxvZyAmJgorCXRlc3QgLWUgY29yZS5wYWdlcl91c2VkCisnCisKK3JtIC1mIEdJVF9QQUdFUl91c2VkCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnR0lUX1BBR0VSIG92ZXJyaWRlcyBjb3JlLnBhZ2VyJyAnCisJZ2l0IGNvbmZpZyBjb3JlLnBhZ2VyIHdjICYmCisJR0lUX1BBR0VSPSJ3YyA+IEdJVF9QQUdFUl91c2VkIiAmJgorCWV4cG9ydCBHSVRfUEFHRVIgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBsb2cgJiYKKwl0ZXN0IC1lIEdJVF9QQUdFUl91c2VkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzAwNi90ZXN0LXRlcm1pbmFsLnBlcmwgYi90L3Q3MDA2L3Rlc3QtdGVybWluYWwucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43M2ZmODA5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzAwNi90ZXN0LXRlcm1pbmFsLnBlcmwKQEAgLTAsMCArMSw1OCBAQAorIyEvdXNyL2Jpbi9wZXJsCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIElPOjpQdHk7Cit1c2UgRmlsZTo6Q29weTsKKworIyBSdW4gQCRhcmd2IGluIHRoZSBiYWNrZ3JvdW5kIHdpdGggc3Rkb3V0IHJlZGlyZWN0ZWQgdG8gJG91dC4KK3N1YiBzdGFydF9jaGlsZCB7CisJbXkgKCRhcmd2LCAkb3V0KSA9IEBfOworCW15ICRwaWQgPSBmb3JrOworCWlmIChub3QgZGVmaW5lZCAkcGlkKSB7CisJCWRpZSAiZm9yayBmYWlsZWQ6ICQhIgorCX0gZWxzaWYgKCRwaWQgPT0gMCkgeworCQlvcGVuIFNURE9VVCwgIj4mIiwgJG91dDsKKwkJY2xvc2UgJG91dDsKKwkJZXhlYyhAJGFyZ3YpIG9yIGRpZSAiY2Fubm90IGV4ZWMgJyRhcmd2LT5bMF0nOiAkISIKKwl9CisJcmV0dXJuICRwaWQ7Cit9CisKKyMgV2FpdCBmb3IgJHBpZCB0byBmaW5pc2guCitzdWIgZmluaXNoX2NoaWxkIHsKKwkjIFNpbXBsaWZpZWQgZnJvbSB3YWl0X29yX3doaW5lKCkgaW4gcnVuLWNvbW1hbmQuYy4KKwlteSAoJHBpZCkgPSBAXzsKKworCW15ICR3YWl0aW5nID0gd2FpdHBpZCgkcGlkLCAwKTsKKwlpZiAoJHdhaXRpbmcgPCAwKSB7CisJCWRpZSAid2FpdHBpZCBmYWlsZWQ6ICQhIjsKKwl9IGVsc2lmICgkPyAmIDEyNykgeworCQlteSAkY29kZSA9ICQ/ICYgMTI3OworCQl3YXJuICJkaWVkIG9mIHNpZ25hbCAkY29kZSI7CisJCXJldHVybiAkY29kZSAtIDEyODsKKwl9IGVsc2UgeworCQlyZXR1cm4gJD8gPj4gODsKKwl9Cit9CisKK3N1YiB4c2VuZGZpbGUgeworCW15ICgkb3V0LCAkaW4pID0gQF87CisKKwkjIE5vdGU6IHRoZSByZWFsIHNlbmRmaWxlKCkgY2Fubm90IHJlYWQgZnJvbSBhIHRlcm1pbmFsLgorCisJIyBJdCBpcyB1bnNwZWNpZmllZCBieSBQT1NJWCB3aGV0aGVyIHJlYWRzCisJIyBmcm9tIGEgZGlzY29ubmVjdGVkIHRlcm1pbmFsIHdpbGwgcmV0dXJuCisJIyBFSU8gKGFzIGluIEFJWCA0LngsIElSSVgsIGFuZCBMaW51eCkgb3IKKwkjIGVuZC1vZi1maWxlLiAgRWl0aGVyIGlzIGZpbmUuCisJY29weSgkaW4sICRvdXQsIDQwOTYpIG9yICQhe0VJT30gb3IgZGllICJjYW5ub3QgY29weSBmcm9tIGNoaWxkOiAkISI7Cit9CisKK2lmICgkI0FSR1YgPCAxKSB7CisJZGllICJ1c2FnZTogdGVzdC10ZXJtaW5hbCBwcm9ncmFtIGFyZ3MiOworfQorbXkgJG1hc3RlciA9IG5ldyBJTzo6UHR5OworbXkgJHNsYXZlID0gJG1hc3Rlci0+c2xhdmU7CitteSAkcGlkID0gc3RhcnRfY2hpbGQoXEBBUkdWLCAkc2xhdmUpOworY2xvc2UgJHNsYXZlOworeHNlbmRmaWxlKFwqU1RET1VULCAkbWFzdGVyKTsKK2V4aXQoZmluaXNoX2NoaWxkKCRwaWQpKTsKZGlmZiAtLWdpdCBhL3QvdDcwMTEtc2tpcC13b3JrdHJlZS1yZWFkaW5nLnNoIGIvdC90NzAxMS1za2lwLXdvcmt0cmVlLXJlYWRpbmcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmI0MDY2ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcwMTEtc2tpcC13b3JrdHJlZS1yZWFkaW5nLnNoCkBAIC0wLDAgKzEsMTYzIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IE5ndXnhu4VuIFRow6FpIE5n4buNYyBEdXkKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nc2tpcC13b3JrdHJlZSBiaXQgdGVzdCcKKworLiAuL3Rlc3QtbGliLnNoCisKK2NhdCA+ZXhwZWN0LmZ1bGwgPDxFT0YKK0ggMQorSCAyCitIIGluaXQudAorSCBzdWIvMQorSCBzdWIvMgorRU9GCisKK2NhdCA+ZXhwZWN0LnNraXAgPDxFT0YKK1MgMQorSCAyCitIIGluaXQudAorUyBzdWIvMQorSCBzdWIvMgorRU9GCisKK05VTExfU0hBMT1lNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCitaRVJPX1NIQTA9MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorc2V0dXBfYWJzZW50KCkgeworCXRlc3QgLWYgMSAmJiBybSAxCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSAxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxMDA2NDQgJE5VTExfU0hBMSAxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgMQorfQorCit0ZXN0X2Fic2VudCgpIHsKKwllY2hvICIxMDA2NDQgJE5VTExfU0hBMSAwCTEiID4gZXhwZWN0ZWQgJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSAxID4gcmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0ICYmCisJdGVzdCAhIC1mIDEKK30KKworc2V0dXBfZGlydHkoKSB7CisJZ2l0IHVwZGF0ZS1pbmRleCAtLWZvcmNlLXJlbW92ZSAxICYmCisJZWNobyBkaXJ0eSA+IDEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDEwMDY0NCAkTlVMTF9TSEExIDEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tc2tpcC13b3JrdHJlZSAxCit9CisKK3Rlc3RfZGlydHkoKSB7CisJZWNobyAiMTAwNjQ0ICROVUxMX1NIQTEgMAkxIiA+IGV4cGVjdGVkICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgMSA+IHJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdCAmJgorCWVjaG8gZGlydHkgPiBleHBlY3RlZAorCXRlc3RfY21wIGV4cGVjdGVkIDEKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBpbml0ICYmCisJbWtkaXIgc3ViICYmCisJdG91Y2ggLi8xIC4vMiBzdWIvMSBzdWIvMiAmJgorCWdpdCBhZGQgMSAyIHN1Yi8xIHN1Yi8yICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgMSBzdWIvMSAmJgorCWdpdCBscy1maWxlcyAtdCA+IHJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdC5za2lwIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXgnICcKKwlzZXR1cF9hYnNlbnQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IDEgJiYKKwl0ZXN0X2Fic2VudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXgnICcKKwlzZXR1cF9kaXJ0eSAmJgorCWdpdCB1cGRhdGUtaW5kZXggMSAmJgorCXRlc3RfZGlydHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IC0tcmVtb3ZlJyAnCisJc2V0dXBfYWJzZW50ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSAxICYmCisJdGVzdCAteiAiJChnaXQgbHMtZmlsZXMgMSkiICYmCisJdGVzdCAhIC1mIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IC0tcmVtb3ZlJyAnCisJc2V0dXBfZGlydHkgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIDEgJiYKKwl0ZXN0IC16ICIkKGdpdCBscy1maWxlcyAxKSIgJiYKKwllY2hvIGRpcnR5ID4gZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIC0tZGVsZXRlJyAnCisJc2V0dXBfYWJzZW50ICYmCisJdGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLWQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyAtLWRlbGV0ZScgJworCXNldHVwX2RpcnR5ICYmCisJdGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLWQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyAtLW1vZGlmaWVkJyAnCisJc2V0dXBfYWJzZW50ICYmCisJdGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLW0pIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyAtLW1vZGlmaWVkJyAnCisJc2V0dXBfZGlydHkgJiYKKwl0ZXN0IC16ICIkKGdpdCBscy1maWxlcyAtbSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgd2l0aCBza2lwLXdvcmt0cmVlIGZpbGUnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tbm8tc2tpcC13b3JrdHJlZSAxICYmCisJZWNobyB0ZXN0ID4gMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlIDEgJiYKKwlybSAxICYmCisJdGVzdCAiJChnaXQgZ3JlcCAtLW5vLWV4dC1ncmVwIHRlc3QpIiA9ICIxOnRlc3QiCisnCisKK2VjaG8gIjowMDAwMDAgMTAwNjQ0ICRaRVJPX1NIQTAgJE5VTExfU0hBMSBBCTEiID4gZXhwZWN0ZWQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtaW5kZXggZG9lcyBub3QgZXhhbWluZSBza2lwLXdvcmt0cmVlIGFic2VudCBlbnRyaWVzJyAnCisJc2V0dXBfYWJzZW50ICYmCisJZ2l0IGRpZmYtaW5kZXggSEVBRCAtLSAxID4gcmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtaW5kZXggZG9lcyBub3QgZXhhbWluZSBza2lwLXdvcmt0cmVlIGRpcnR5IGVudHJpZXMnICcKKwlzZXR1cF9kaXJ0eSAmJgorCWdpdCBkaWZmLWluZGV4IEhFQUQgLS0gMSA+IHJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWZpbGVzIGRvZXMgbm90IGV4YW1pbmUgc2tpcC13b3JrdHJlZSBhYnNlbnQgZW50cmllcycgJworCXNldHVwX2Fic2VudCAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYtZmlsZXMgLS0gb25lKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1maWxlcyBkb2VzIG5vdCBleGFtaW5lIHNraXAtd29ya3RyZWUgZGlydHkgZW50cmllcycgJworCXNldHVwX2RpcnR5ICYmCisJdGVzdCAteiAiJChnaXQgZGlmZi1maWxlcyAtLSBvbmUpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtcm0gc3VjY2VlZHMgb24gc2tpcC13b3JrdHJlZSBhYnNlbnQgZW50cmllcycgJworCXNldHVwX2Fic2VudCAmJgorCWdpdCBybSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBvbiBza2lwLXdvcmt0cmVlIGFic2VudCBlbnRyaWVzJyAnCisJZ2l0IHJlc2V0ICYmCisJc2V0dXBfYWJzZW50ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtbSBudWxsIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IG9uIHNraXAtd29ya3RyZWUgZGlydHkgZW50cmllcycgJworCWdpdCByZXNldCAmJgorCXNldHVwX2RpcnR5ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtbSBudWxsIDEKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MDEyLXNraXAtd29ya3RyZWUtd3JpdGluZy5zaCBiL3QvdDcwMTItc2tpcC13b3JrdHJlZS13cml0aW5nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhkOGIxYzAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MDEyLXNraXAtd29ya3RyZWUtd3JpdGluZy5zaApAQCAtMCwwICsxLDE0NiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBOZ3V54buFbiBUaMOhaSBOZ+G7jWMgRHV5CisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3Qgd29ya3RyZWUgd3JpdGluZyBvcGVyYXRpb25zIHdoZW4gc2tpcC13b3JrdHJlZSBpcyB1c2VkJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBpbml0ICYmCisJZWNobyBtb2RpZmllZCA+PiBpbml0LnQgJiYKKwl0b3VjaCBhZGRlZCAmJgorCWdpdCBhZGQgaW5pdC50IGFkZGVkICYmCisJZ2l0IGNvbW1pdCAtbSAibW9kaWZpZWQgYW5kIGFkZGVkIiAmJgorCWdpdCB0YWcgdG9wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSB1cGRhdGVzIHdvcmt0cmVlLCBhYnNlbnQgY2FzZScgJworCWdpdCBjaGVja291dCAtZiB0b3AgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tc2tpcC13b3JrdHJlZSBpbml0LnQgJiYKKwlybSBpbml0LnQgJiYKKwlnaXQgcmVhZC10cmVlIC1tIC11IEhFQUReICYmCisJZWNobyBpbml0ID4gZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBpbml0LnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZC10cmVlIHVwZGF0ZXMgd29ya3RyZWUsIGRpcnR5IGNhc2UnICcKKwlnaXQgY2hlY2tvdXQgLWYgdG9wICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgaW5pdC50ICYmCisJZWNobyBkaXJ0eSA+PiBpbml0LnQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVhZC10cmVlIC1tIC11IEhFQUReICYmCisJZ3JlcCAtcSBkaXJ0eSBpbml0LnQgJiYKKwl0ZXN0ICIkKGdpdCBscy1maWxlcyAtdCBpbml0LnQpIiA9ICJTIGluaXQudCIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tbm8tc2tpcC13b3JrdHJlZSBpbml0LnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZC10cmVlIHJlbW92ZXMgd29ya3RyZWUsIGFic2VudCBjYXNlJyAnCisJZ2l0IGNoZWNrb3V0IC1mIHRvcCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlIGFkZGVkICYmCisJcm0gYWRkZWQgJiYKKwlnaXQgcmVhZC10cmVlIC1tIC11IEhFQUReICYmCisJdGVzdCAhIC1mIGFkZGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSByZW1vdmVzIHdvcmt0cmVlLCBkaXJ0eSBjYXNlJyAnCisJZ2l0IGNoZWNrb3V0IC1mIHRvcCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlIGFkZGVkICYmCisJZWNobyBkaXJ0eSA+PiBhZGRlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWFkLXRyZWUgLW0gLXUgSEVBRF4gJiYKKwlncmVwIC1xIGRpcnR5IGFkZGVkICYmCisJdGVzdCAiJChnaXQgbHMtZmlsZXMgLXQgYWRkZWQpIiA9ICJTIGFkZGVkIiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1uby1za2lwLXdvcmt0cmVlIGFkZGVkCisnCisKK05VTExfU0hBMT1lNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCitaRVJPX1NIQTA9MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorc2V0dXBfYWJzZW50KCkgeworCXRlc3QgLWYgMSAmJiBybSAxCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSAxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxMDA2NDQgJE5VTExfU0hBMSAxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgMQorfQorCit0ZXN0X2Fic2VudCgpIHsKKwllY2hvICIxMDA2NDQgJE5VTExfU0hBMSAwCTEiID4gZXhwZWN0ZWQgJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSAxID4gcmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0ICYmCisJdGVzdCAhIC1mIDEKK30KKworc2V0dXBfZGlydHkoKSB7CisJZ2l0IHVwZGF0ZS1pbmRleCAtLWZvcmNlLXJlbW92ZSAxICYmCisJZWNobyBkaXJ0eSA+IDEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDEwMDY0NCAkTlVMTF9TSEExIDEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tc2tpcC13b3JrdHJlZSAxCit9CisKK3Rlc3RfZGlydHkoKSB7CisJZWNobyAiMTAwNjQ0ICROVUxMX1NIQTEgMAkxIiA+IGV4cGVjdGVkICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgMSA+IHJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdCAmJgorCWVjaG8gZGlydHkgPiBleHBlY3RlZAorCXRlc3RfY21wIGV4cGVjdGVkIDEKK30KKworY2F0ID5leHBlY3RlZCA8PEVPRgorUyAxCitIIDIKK0ggaW5pdC50CitTIHN1Yi8xCitIIHN1Yi8yCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXggc2V0dXAnICcKKwlnaXQgY2hlY2tvdXQgLWYgaW5pdCAmJgorCW1rZGlyIHN1YiAmJgorCXRvdWNoIC4vMSAuLzIgc3ViLzEgc3ViLzIgJiYKKwlnaXQgYWRkIDEgMiBzdWIvMSBzdWIvMiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlIDEgc3ViLzEgJiYKKwlnaXQgbHMtZmlsZXMgLXQgPiByZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWFkZCBpZ25vcmVzIHdvcmt0cmVlIGNvbnRlbnQnICcKKwlzZXR1cF9hYnNlbnQgJiYKKwlnaXQgYWRkIDEgJiYKKwl0ZXN0X2Fic2VudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtYWRkIGlnbm9yZXMgd29ya3RyZWUgY29udGVudCcgJworCXNldHVwX2RpcnR5ICYmCisJZ2l0IGFkZCAxICYmCisJdGVzdF9kaXJ0eQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtcm0gZmFpbHMgaWYgd29ya3RyZWUgaXMgZGlydHknICcKKwlzZXR1cF9kaXJ0eSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBybSAxICYmCisJdGVzdF9kaXJ0eQorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitXb3VsZCByZW1vdmUgZXhwZWN0ZWQKK1dvdWxkIHJlbW92ZSByZXN1bHQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWNsZWFuLCBhYnNlbnQgY2FzZScgJworCXNldHVwX2Fic2VudCAmJgorCWdpdCBjbGVhbiAtbiA+IHJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtY2xlYW4sIGRpcnR5IGNhc2UnICcKKwlzZXR1cF9kaXJ0eSAmJgorCWdpdCBjbGVhbiAtbiA+IHJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdnaXQtYXBwbHkgYWRkcyBmaWxlJyBmYWxzZQordGVzdF9leHBlY3RfZmFpbHVyZSAnZ2l0LWFwcGx5IHVwZGF0ZXMgZmlsZScgZmFsc2UKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2dpdC1hcHBseSByZW1vdmVzIGZpbGUnIGZhbHNlCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdnaXQtbXYgdG8gc2tpcC13b3JrdHJlZScgZmFsc2UKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2dpdC1tdiBmcm9tIHNraXAtd29ya3RyZWUnIGZhbHNlCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdnaXQtY2hlY2tvdXQnIGZhbHNlCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzA2MC13dHN0YXR1cy5zaCBiL3QvdDcwNjAtd3RzdGF0dXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmNhYzQ3MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcwNjAtd3RzdGF0dXMuc2gKQEAgLTAsMCArMSw1OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2Jhc2ljIHdvcmsgdHJlZSBzdGF0dXMgcmVwb3J0aW5nJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9jb21taXQgQSAmJgorCXRlc3RfY29tbWl0IEIgb25lc2lkZSBhZGRlZCAmJgorCWdpdCBjaGVja291dCBBXjAgJiYKKwl0ZXN0X2NvbW1pdCBDIG9uZXNpZGUgY3JlYXRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBL0EgY29uZmxpY3QnICcKKwlnaXQgY2hlY2tvdXQgQl4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmVwb3J0IHBhdGggd2l0aCBjb25mbGljdCcgJworCWdpdCBkaWZmIC0tY2FjaGVkIC0tbmFtZS1zdGF0dXMgPmFjdHVhbCAmJgorCWVjaG8gIlUJb25lc2lkZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmVwb3J0IG5ldyBwYXRoIHdpdGggY29uZmxpY3QnICcKKwlnaXQgZGlmZiAtLWNhY2hlZCAtLW5hbWUtc3RhdHVzIEhFQUReID5hY3R1YWwgJiYKKwllY2hvICJVCW9uZXNpZGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCisjIE9uIGJyYW5jaCBzaWRlCisjIFVubWVyZ2VkIHBhdGhzOgorIyAgICh1c2UgImdpdCBhZGQvcm0gPGZpbGU+Li4uIiBhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24pCisjCisjCWRlbGV0ZWQgYnkgdXM6ICAgICAgZm9vCisjCitubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIiBhbmQvb3IgImdpdCBjb21taXQgLWEiKQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ00vRCBjb25mbGljdCBkb2VzIG5vdCBzZWdmYXVsdCcgJworCW1rZGlyIG1kY29uZmxpY3QgJiYKKwkoCisJCWNkIG1kY29uZmxpY3QgJiYKKwkJZ2l0IGluaXQgJiYKKwkJdGVzdF9jb21taXQgaW5pdGlhbCBmb28gIiIgJiYKKwkJdGVzdF9jb21taXQgbW9kaWZ5IGZvbyBmb28gJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgSEVBRF4gJiYKKwkJZ2l0IHJtIGZvbyAmJgorCQlnaXQgY29tbWl0IC1tIGRlbGV0ZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS1kcnktcnVuID4uLi9hY3R1YWwgJiYKKwkJdGVzdF9jbXAgLi4vZXhwZWN0IC4uL2FjdHVhbCAmJgorCQlnaXQgc3RhdHVzID4uLi9hY3R1YWwgJiYKKwkJdGVzdF9jbXAgLi4vZXhwZWN0IC4uL2FjdHVhbAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MTAyLXJlc2V0LnNoIGIvdC90NzEwMi1yZXNldC5zaAppbmRleCA1ZjM5MTZiLi5iOGNmMjYwIDEwMDc1NQotLS0gYS90L3Q3MTAyLXJlc2V0LnNoCisrKyBiL3QvdDcxMDItcmVzZXQuc2gKQEAgLTQxOSw3ICs0MTksOCBAQAogJwogCiBjYXQgPiBleHBlY3QgPDwgRU9GCi1maWxlMjogbG9jYWxseSBtb2RpZmllZAorVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldDoKK00JZmlsZTIKIEVPRgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW1peGVkIHJlZnJlc2hlcyB0aGUgaW5kZXgnICcKZGlmZiAtLWdpdCBhL3QvdDcxMDMtcmVzZXQtYmFyZS5zaCBiL3QvdDcxMDMtcmVzZXQtYmFyZS5zaAppbmRleCA0MmJmNTE4Li5hZmI1NWIzIDEwMDc1NQotLS0gYS90L3Q3MTAzLXJlc2V0LWJhcmUuc2gKKysrIGIvdC90NzEwMy1yZXNldC1iYXJlLnNoCkBAIC0xMSwxNiArMTEsNDggQEAKIAlnaXQgY29tbWl0IC1hIC1tIHR3bwogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoYXJkIHJlc2V0IHJlcXVpcmVzIGEgd29ya3RyZWUnICcKKwkoY2QgLmdpdCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1oYXJkKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSByZXNldCByZXF1aXJlcyBhIHdvcmt0cmVlJyAnCisJKGNkIC5naXQgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0tbWVyZ2UpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21peGVkIHJlc2V0IGlzIG9rJyAnCisJKGNkIC5naXQgJiYgZ2l0IHJlc2V0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzb2Z0IHJlc2V0IGlzIG9rJyAnCisJKGNkIC5naXQgJiYgZ2l0IHJlc2V0IC0tc29mdCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaGFyZCByZXNldCB3b3JrcyB3aXRoIEdJVF9XT1JLX1RSRUUnICcKKwlta2RpciB3b3JrdHJlZSAmJgorCUdJVF9XT1JLX1RSRUU9JFBXRC93b3JrdHJlZSBHSVRfRElSPSRQV0QvLmdpdCBnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9jbXAgZmlsZSB3b3JrdHJlZS9maWxlCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGJhcmUnICcKIAlnaXQgY2xvbmUgLS1iYXJlIC4gYmFyZS5naXQgJiYKIAljZCBiYXJlLmdpdAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdoYXJkIHJlc2V0IGlzIG5vdCBhbGxvd2VkJyAnCi0JdGVzdF9tdXN0X2ZhaWwgIGdpdCByZXNldCAtLWhhcmQgSEVBRF4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hhcmQgcmVzZXQgaXMgbm90IGFsbG93ZWQgaW4gYmFyZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLWhhcmQgSEVBRF4KICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnc29mdCByZXNldCBpcyBhbGxvd2VkJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSByZXNldCBpcyBub3QgYWxsb3dlZCBpbiBiYXJlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0tbWVyZ2UgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWl4ZWQgcmVzZXQgaXMgbm90IGFsbG93ZWQgaW4gYmFyZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLW1peGVkIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NvZnQgcmVzZXQgaXMgYWxsb3dlZCBpbiBiYXJlJyAnCiAJZ2l0IHJlc2V0IC0tc29mdCBIRUFEXiAmJgogCXRlc3QgImBnaXQgc2hvdyAtLXByZXR0eT1mb3JtYXQ6JXMgfCBoZWFkIC1uIDFgIiA9ICJvbmUiCiAnCmRpZmYgLS1naXQgYS90L3Q3MTA1LXJlc2V0LXBhdGNoLnNoIGIvdC90NzEwNS1yZXNldC1wYXRjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMWY0ZmMzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzEwNS1yZXNldC1wYXRjaC5zaApAQCAtMCwwICsxLDY5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlc2V0IC0tcGF0Y2gnCisuIC4vbGliLXBhdGNoLW1vZGUuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciBkaXIgJiYKKwllY2hvIHBhcmVudCA+IGRpci9mb28gJiYKKwllY2hvIGR1bW15ID4gYmFyICYmCisJZ2l0IGFkZCBkaXIgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwl0ZXN0X3RpY2sgJiYKKwl0ZXN0X2NvbW1pdCBzZWNvbmQgZGlyL2ZvbyBoZWFkICYmCisJc2V0X2FuZF9zYXZlX3N0YXRlIGJhciBiYXJfd29yayBiYXJfaW5kZXggJiYKKwlzYXZlX2hlYWQKKycKKworIyBub3RlOiBiYXIgc29ydHMgYmVmb3JlIGZvbywgc28gdGhlIGZpcnN0ICduJyBpcyBhbHdheXMgdG8gc2tpcCAnYmFyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYXlpbmcgIm4iIGRvZXMgbm90aGluZycgJworCXNldF9hbmRfc2F2ZV9zdGF0ZSBkaXIvZm9vIHdvcmsgd29yaworCShlY2hvIG47IGVjaG8gbikgfCBnaXQgcmVzZXQgLXAgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgZGlyL2ZvbyAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlc2V0IC1wJyAnCisJKGVjaG8gbjsgZWNobyB5KSB8IGdpdCByZXNldCAtcCAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIHdvcmsgaGVhZCAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlc2V0IC1wIEhFQUReJyAnCisJKGVjaG8gbjsgZWNobyB5KSB8IGdpdCByZXNldCAtcCBIRUFEXiAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIHdvcmsgcGFyZW50ICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhcgorJworCisjIFRoZSBpZGVhIGluIHRoZSByZXN0IGlzIHRoYXQgYmFyIHNvcnRzIGZpcnN0LCBzbyB3ZSBhbHdheXMgc2F5ICd5JworIyBmaXJzdCBhbmQgaWYgdGhlIHBhdGggbGltaXRlciBmYWlscyBpdCdsbCBhcHBseSB0byBiYXIgaW5zdGVhZCBvZgorIyBkaXIvZm9vLiAgVGhlcmUncyBhbHdheXMgYW4gZXh0cmEgJ24nIHRvIHJlamVjdCBlZGl0cyB0byBkaXIvZm9vIGluCisjIHRoZSBmYWlsdXJlIGNhc2UgKGFuZCB0aHVzIGdldCBvdXQgb2YgdGhlIGxvb3ApLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmVzZXQgLXAgZGlyJyAnCisJc2V0X3N0YXRlIGRpci9mb28gd29yayB3b3JrCisJKGVjaG8geTsgZWNobyBuKSB8IGdpdCByZXNldCAtcCBkaXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyB3b3JrIGhlYWQgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZXNldCAtcCAtLSBmb28gKGluc2lkZSBkaXIpJyAnCisJc2V0X3N0YXRlIGRpci9mb28gd29yayB3b3JrCisJKGVjaG8geTsgZWNobyBuKSB8IChjZCBkaXIgJiYgZ2l0IHJlc2V0IC1wIC0tIGZvbykgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyB3b3JrIGhlYWQgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZXNldCAtcCBIRUFEXiAtLSBkaXInICcKKwkoZWNobyB5OyBlY2hvIG4pIHwgZ2l0IHJlc2V0IC1wIEhFQUReIC0tIGRpciAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIHdvcmsgcGFyZW50ICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub25lIG9mIHRoaXMgbW92ZWQgSEVBRCcgJworCXZlcmlmeV9zYXZlZF9oZWFkCisnCisKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MTEwLXJlc2V0LW1lcmdlLnNoIGIvdC90NzExMC1yZXNldC1tZXJnZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NzA0ZDAwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzExMC1yZXNldC1tZXJnZS5zaApAQCAtMCwwICsxLDE4MyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBDaHJpc3RpYW4gQ291ZGVyCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3RzIGZvciAiZ2l0IHJlc2V0IC0tbWVyZ2UiJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisgICAgZm9yIGkgaW4gMSAyIDM7IGRvIGVjaG8gbGluZSAkaTsgZG9uZSA+ZmlsZTEgJiYKKyAgICBjYXQgZmlsZTEgPmZpbGUyICYmCisgICAgZ2l0IGFkZCBmaWxlMSBmaWxlMiAmJgorICAgIHRlc3RfdGljayAmJgorICAgIGdpdCBjb21taXQgLW0gIkluaXRpYWwgY29tbWl0IiAmJgorICAgIGdpdCB0YWcgaW5pdGlhbCAmJgorICAgIGVjaG8gbGluZSA0ID4+ZmlsZTEgJiYKKyAgICBjYXQgZmlsZTEgPmZpbGUyICYmCisgICAgdGVzdF90aWNrICYmCisgICAgZ2l0IGNvbW1pdCAtbSAiYWRkIGxpbmUgNCB0byBmaWxlMSIgZmlsZTEgJiYKKyAgICBnaXQgdGFnIHNlY29uZAorJworCisjIFRoZSBuZXh0IHRlc3Qgd2lsbCB0ZXN0IHRoZSBmb2xsb3dpbmc6CisjCisjICAgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQgdGFyZ2V0ICAgICAgICAgd29ya2luZyBpbmRleCBIRUFECisjICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZpbGUxOiAgICAgQyAgICAgICBDICAgICBDICAgIEQgICAgIC0tbWVyZ2UgIEQgICAgICAgRCAgICAgRAorIyBmaWxlMjogICAgIEMgICAgICAgRCAgICAgRCAgICBEICAgICAtLW1lcmdlICBDICAgICAgIEQgICAgIEQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IC0tbWVyZ2UgaXMgb2sgd2l0aCBjaGFuZ2VzIGluIGZpbGUgaXQgZG9lcyBub3QgdG91Y2gnICcKKyAgICBnaXQgcmVzZXQgLS1tZXJnZSBIRUFEXiAmJgorICAgICEgZ3JlcCA0IGZpbGUxICYmCisgICAgZ3JlcCA0IGZpbGUyICYmCisgICAgdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2UgaW5pdGlhbCkiICYmCisgICAgdGVzdCAteiAiJChnaXQgZGlmZiAtLWNhY2hlZCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IC0tbWVyZ2UgaXMgb2sgd2hlbiBzd2l0Y2hpbmcgYmFjaycgJworICAgIGdpdCByZXNldCAtLW1lcmdlIHNlY29uZCAmJgorICAgIGdyZXAgNCBmaWxlMSAmJgorICAgIGdyZXAgNCBmaWxlMiAmJgorICAgIHRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPSAiJChnaXQgcmV2LXBhcnNlIHNlY29uZCkiICYmCisgICAgdGVzdCAteiAiJChnaXQgZGlmZiAtLWNhY2hlZCkiCisnCisKKyMgVGhlIG5leHQgdGVzdCB3aWxsIHRlc3QgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRCB0YXJnZXQgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQKKyMgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZmlsZTE6ICAgICBCICAgICAgIEIgICAgIEMgICAgRCAgICAgLS1tZXJnZSAgRCAgICAgICBEICAgICBECisjIGZpbGUyOiAgICAgQyAgICAgICBEICAgICBEICAgIEQgICAgIC0tbWVyZ2UgIEMgICAgICAgRCAgICAgRAordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1tZXJnZSBkaXNjYXJkcyBjaGFuZ2VzIGFkZGVkIHRvIGluZGV4ICgxKScgJworICAgIGdpdCByZXNldCAtLWhhcmQgc2Vjb25kICYmCisgICAgY2F0IGZpbGUxID5maWxlMiAmJgorICAgIGVjaG8gImxpbmUgNSIgPj4gZmlsZTEgJiYKKyAgICBnaXQgYWRkIGZpbGUxICYmCisgICAgZ2l0IHJlc2V0IC0tbWVyZ2UgSEVBRF4gJiYKKyAgICAhIGdyZXAgNCBmaWxlMSAmJgorICAgICEgZ3JlcCA1IGZpbGUxICYmCisgICAgZ3JlcCA0IGZpbGUyICYmCisgICAgdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2UgaW5pdGlhbCkiICYmCisgICAgdGVzdCAteiAiJChnaXQgZGlmZiAtLWNhY2hlZCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IC0tbWVyZ2UgaXMgb2sgYWdhaW4gd2hlbiBzd2l0Y2hpbmcgYmFjayAoMSknICcKKyAgICBnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKyAgICBlY2hvICJsaW5lIDUiID4+IGZpbGUyICYmCisgICAgZ2l0IGFkZCBmaWxlMiAmJgorICAgIGdpdCByZXNldCAtLW1lcmdlIHNlY29uZCAmJgorICAgICEgZ3JlcCA0IGZpbGUyICYmCisgICAgISBncmVwIDUgZmlsZTEgJiYKKyAgICBncmVwIDQgZmlsZTEgJiYKKyAgICB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSBzZWNvbmQpIiAmJgorICAgIHRlc3QgLXogIiQoZ2l0IGRpZmYgLS1jYWNoZWQpIgorJworCisjIFRoZSBuZXh0IHRlc3Qgd2lsbCB0ZXN0IHRoZSBmb2xsb3dpbmc6CisjCisjICAgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQgdGFyZ2V0ICAgICAgICAgd29ya2luZyBpbmRleCBIRUFECisjICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZpbGUxOiAgICAgQyAgICAgICBDICAgICBDICAgIEQgICAgIC0tbWVyZ2UgIEQgICAgICAgRCAgICAgRAorIyBmaWxlMjogICAgIEMgICAgICAgQyAgICAgRCAgICBEICAgICAtLW1lcmdlICBEICAgICAgIEQgICAgIEQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IC0tbWVyZ2UgZGlzY2FyZHMgY2hhbmdlcyBhZGRlZCB0byBpbmRleCAoMiknICcKKyAgICBnaXQgcmVzZXQgLS1oYXJkIHNlY29uZCAmJgorICAgIGVjaG8gImxpbmUgNCIgPj4gZmlsZTIgJiYKKyAgICBnaXQgYWRkIGZpbGUyICYmCisgICAgZ2l0IHJlc2V0IC0tbWVyZ2UgSEVBRF4gJiYKKyAgICAhIGdyZXAgNCBmaWxlMiAmJgorICAgIHRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPSAiJChnaXQgcmV2LXBhcnNlIGluaXRpYWwpIiAmJgorICAgIHRlc3QgLXogIiQoZ2l0IGRpZmYpIiAmJgorICAgIHRlc3QgLXogIiQoZ2l0IGRpZmYgLS1jYWNoZWQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLW1lcmdlIGlzIG9rIGFnYWluIHdoZW4gc3dpdGNoaW5nIGJhY2sgKDIpJyAnCisgICAgZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisgICAgZ2l0IHJlc2V0IC0tbWVyZ2Ugc2Vjb25kICYmCisgICAgISBncmVwIDQgZmlsZTIgJiYKKyAgICBncmVwIDQgZmlsZTEgJiYKKyAgICB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSBzZWNvbmQpIiAmJgorICAgIHRlc3QgLXogIiQoZ2l0IGRpZmYgLS1jYWNoZWQpIgorJworCisjIFRoZSBuZXh0IHRlc3Qgd2lsbCB0ZXN0IHRoZSBmb2xsb3dpbmc6CisjCisjICAgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQgdGFyZ2V0ICAgICAgICAgd29ya2luZyBpbmRleCBIRUFECisjICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZpbGUxOiAgICAgQSAgICAgICBCICAgICBCICAgIEMgICAgIC0tbWVyZ2UgIChkaXNhbGxvd2VkKQordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1tZXJnZSBmYWlscyB3aXRoIGNoYW5nZXMgaW4gZmlsZSBpdCB0b3VjaGVzJyAnCisgICAgZ2l0IHJlc2V0IC0taGFyZCBzZWNvbmQgJiYKKyAgICBlY2hvICJsaW5lIDUiID4+IGZpbGUxICYmCisgICAgdGVzdF90aWNrICYmCisgICAgZ2l0IGNvbW1pdCAtbSAiYWRkIGxpbmUgNSIgZmlsZTEgJiYKKyAgICBzZWQgLWUgInMvbGluZSAxL2NoYW5nZWQgbGluZSAxLyIgPGZpbGUxID5maWxlMyAmJgorICAgIG12IGZpbGUzIGZpbGUxICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0tbWVyZ2UgSEVBRF4gMj5lcnIubG9nICYmCisgICAgZ3JlcCBmaWxlMSBlcnIubG9nIHwgZ3JlcCAibm90IHVwdG9kYXRlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAzIGRpZmZlcmVudCBicmFuY2hlcycgJworICAgIGdpdCByZXNldCAtLWhhcmQgc2Vjb25kICYmCisgICAgZ2l0IGJyYW5jaCBicmFuY2gxICYmCisgICAgZ2l0IGJyYW5jaCBicmFuY2gyICYmCisgICAgZ2l0IGJyYW5jaCBicmFuY2gzICYmCisgICAgZ2l0IGNoZWNrb3V0IGJyYW5jaDEgJiYKKyAgICBlY2hvICJsaW5lIDUgaW4gYnJhbmNoMSIgPj4gZmlsZTEgJiYKKyAgICB0ZXN0X3RpY2sgJiYKKyAgICBnaXQgY29tbWl0IC1hIC1tICJjaGFuZ2UgaW4gYnJhbmNoMSIgJiYKKyAgICBnaXQgY2hlY2tvdXQgYnJhbmNoMiAmJgorICAgIGVjaG8gImxpbmUgNSBpbiBicmFuY2gyIiA+PiBmaWxlMSAmJgorICAgIHRlc3RfdGljayAmJgorICAgIGdpdCBjb21taXQgLWEgLW0gImNoYW5nZSBpbiBicmFuY2gyIiAmJgorICAgIGdpdCB0YWcgdGhpcmQgJiYKKyAgICBnaXQgY2hlY2tvdXQgYnJhbmNoMyAmJgorICAgIGVjaG8gYSBuZXcgZmlsZSA+ZmlsZTMgJiYKKyAgICBybSAtZiBmaWxlMSAmJgorICAgIGdpdCBhZGQgZmlsZTMgJiYKKyAgICB0ZXN0X3RpY2sgJiYKKyAgICBnaXQgY29tbWl0IC1hIC1tICJjaGFuZ2UgaW4gYnJhbmNoMyIKKycKKworIyBUaGUgbmV4dCB0ZXN0IHdpbGwgdGVzdCB0aGUgZm9sbG93aW5nOgorIworIyAgICAgICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorIyAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaWxlMTogICAgIFggICAgICAgVSAgICAgQiAgICBDICAgICAtLW1lcmdlICBDICAgICAgIEMgICAgIEMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJyZXNldCAtLW1lcmdlIEhFQUReIiBpcyBvayB3aXRoIHBlbmRpbmcgbWVyZ2UnICcKKyAgICBnaXQgY2hlY2tvdXQgdGhpcmQgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYnJhbmNoMSAmJgorICAgIGdpdCByZXNldCAtLW1lcmdlIEhFQUReICYmCisgICAgdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmKSIKKycKKworIyBUaGUgbmV4dCB0ZXN0IHdpbGwgdGVzdCB0aGUgZm9sbG93aW5nOgorIworIyAgICAgICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorIyAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaWxlMTogICAgIFggICAgICAgVSAgICAgQiAgICBCICAgICAtLW1lcmdlICBCICAgICAgIEIgICAgIEIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJyZXNldCAtLW1lcmdlIEhFQUQiIGlzIG9rIHdpdGggcGVuZGluZyBtZXJnZScgJworICAgIGdpdCByZXNldCAtLWhhcmQgdGhpcmQgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYnJhbmNoMSAmJgorICAgIGdpdCByZXNldCAtLW1lcmdlIEhFQUQgJiYKKyAgICB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSB0aGlyZCkiICYmCisgICAgdGVzdCAteiAiJChnaXQgZGlmZiAtLWNhY2hlZCkiICYmCisgICAgdGVzdCAteiAiJChnaXQgZGlmZikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbWVyZ2Ugd2l0aCBhZGRlZC9kZWxldGVkJyAnCisgICAgZ2l0IHJlc2V0IC0taGFyZCB0aGlyZCAmJgorICAgIHJtIC1mIGZpbGUyICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGJyYW5jaDMgJiYKKyAgICAhIHRlc3QgLWYgZmlsZTIgJiYKKyAgICB0ZXN0IC1mIGZpbGUzICYmCisgICAgZ2l0IGRpZmYgLS1leGl0LWNvZGUgZmlsZTMgJiYKKyAgICBnaXQgZGlmZiAtLWV4aXQtY29kZSBicmFuY2gzIGZpbGUzICYmCisgICAgZ2l0IHJlc2V0IC0tbWVyZ2UgSEVBRCAmJgorICAgICEgdGVzdCAtZiBmaWxlMyAmJgorICAgICEgdGVzdCAtZiBmaWxlMiAmJgorICAgIGdpdCBkaWZmIC0tZXhpdC1jb2RlIC0tY2FjaGVkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzExMS1yZXNldC10YWJsZS5zaCBiL3QvdDcxMTEtcmVzZXQtdGFibGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGU4OTZjOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcxMTEtcmVzZXQtdGFibGUuc2gKQEAgLTAsMCArMSwxMTMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgQ2hyaXN0aWFuIENvdWRlcgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0cyB0byBjaGVjayB0aGF0ICJyZXNldCIgb3B0aW9ucyBmb2xsb3cgYSBrbm93biB0YWJsZScKKworLiAuL3Rlc3QtbGliLnNoCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRpbmcgaW5pdGlhbCBjb21taXRzJyAnCisgICAgdGVzdF9jb21taXQgRSBmaWxlMSAmJgorICAgIHRlc3RfY29tbWl0IEQgZmlsZTEgJiYKKyAgICB0ZXN0X2NvbW1pdCBDIGZpbGUxCisnCisKK3doaWxlIHJlYWQgVzEgSTEgSDEgVCBvcHQgVzIgSTIgSDIKK2RvCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2hlY2s6ICRXMSAkSTEgJEgxICRUIC0tJG9wdCAkVzIgJEkyICRIMiIgJworCWdpdCByZXNldCAtLWhhcmQgQyAmJgorCWlmIHRlc3QgIiRJMSIgIT0gIiRIMSIKKwl0aGVuCisJICAgIGVjaG8gIiRJMSIgPmZpbGUxICYmCisJICAgIGdpdCBhZGQgZmlsZTEKKwlmaSAmJgorCWlmIHRlc3QgIiRXMSIgIT0gIiRJMSIKKwl0aGVuCisJICAgIGVjaG8gIiRXMSIgPmZpbGUxCisJZmkgJiYKKwlpZiB0ZXN0ICIkVzIiICE9ICJYWFhYWCIKKwl0aGVuCisJICAgIGdpdCByZXNldCAtLSRvcHQgJFQgJiYKKwkgICAgdGVzdCAiJChjYXQgZmlsZTEpIiA9ICIkVzIiICYmCisJICAgIGdpdCBjaGVja291dC1pbmRleCAtZiAtLSBmaWxlMSAmJgorCSAgICB0ZXN0ICIkKGNhdCBmaWxlMSkiID0gIiRJMiIgJiYKKwkgICAgZ2l0IGNoZWNrb3V0IC1mIEhFQUQgLS0gZmlsZTEgJiYKKwkgICAgdGVzdCAiJChjYXQgZmlsZTEpIiA9ICIkSDIiCisJZWxzZQorCSAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS0kb3B0ICRUCisJZmkKKyAgICAnCitkb25lIDw8XEVPRgorQSBCIEMgRCBzb2Z0ICAgQSBCIEQKK0EgQiBDIEQgbWl4ZWQgIEEgRCBECitBIEIgQyBEIGhhcmQgICBEIEQgRAorQSBCIEMgRCBtZXJnZSAgWFhYWFgKK0EgQiBDIEMgc29mdCAgIEEgQiBDCitBIEIgQyBDIG1peGVkICBBIEMgQworQSBCIEMgQyBoYXJkICAgQyBDIEMKK0EgQiBDIEMgbWVyZ2UgIFhYWFhYCitCIEIgQyBEIHNvZnQgICBCIEIgRAorQiBCIEMgRCBtaXhlZCAgQiBEIEQKK0IgQiBDIEQgaGFyZCAgIEQgRCBECitCIEIgQyBEIG1lcmdlICBEIEQgRAorQiBCIEMgQyBzb2Z0ICAgQiBCIEMKK0IgQiBDIEMgbWl4ZWQgIEIgQyBDCitCIEIgQyBDIGhhcmQgICBDIEMgQworQiBCIEMgQyBtZXJnZSAgQyBDIEMKK0IgQyBDIEQgc29mdCAgIEIgQyBECitCIEMgQyBEIG1peGVkICBCIEQgRAorQiBDIEMgRCBoYXJkICAgRCBEIEQKK0IgQyBDIEQgbWVyZ2UgIFhYWFhYCitCIEMgQyBDIHNvZnQgICBCIEMgQworQiBDIEMgQyBtaXhlZCAgQiBDIEMKK0IgQyBDIEMgaGFyZCAgIEMgQyBDCitCIEMgQyBDIG1lcmdlICBCIEMgQworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHRpbmcgdXAgYnJhbmNoZXMgdG8gdGVzdCB3aXRoIHVubWVyZ2VkIGVudHJpZXMnICcKKyAgICBnaXQgcmVzZXQgLS1oYXJkIEMgJiYKKyAgICBnaXQgYnJhbmNoIGJyYW5jaDEgJiYKKyAgICBnaXQgYnJhbmNoIGJyYW5jaDIgJiYKKyAgICBnaXQgY2hlY2tvdXQgYnJhbmNoMSAmJgorICAgIHRlc3RfY29tbWl0IEIxIGZpbGUxICYmCisgICAgZ2l0IGNoZWNrb3V0IGJyYW5jaDIgJiYKKyAgICB0ZXN0X2NvbW1pdCBCIGZpbGUxCisnCisKK3doaWxlIHJlYWQgVzEgSTEgSDEgVCBvcHQgVzIgSTIgSDIKK2RvCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2hlY2s6ICRXMSAkSTEgJEgxICRUIC0tJG9wdCAkVzIgJEkyICRIMiIgJworCWdpdCByZXNldCAtLWhhcmQgQiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBicmFuY2gxICYmCisJY2F0IGZpbGUxID5YX2ZpbGUxICYmCisJaWYgdGVzdCAiJFcyIiAhPSAiWFhYWFgiCisJdGhlbgorCSAgICBnaXQgcmVzZXQgLS0kb3B0ICRUICYmCisJICAgIGlmIHRlc3QgIiRXMiIgPSAiWCIKKwkgICAgdGhlbgorCQl0ZXN0X2NtcCBmaWxlMSBYX2ZpbGUxCisJICAgIGVsc2UKKwkJdGVzdCAiJChjYXQgZmlsZTEpIiA9ICIkVzIiCisJICAgIGZpICYmCisJICAgIGdpdCBjaGVja291dC1pbmRleCAtZiAtLSBmaWxlMSAmJgorCSAgICB0ZXN0ICIkKGNhdCBmaWxlMSkiID0gIiRJMiIgJiYKKwkgICAgZ2l0IGNoZWNrb3V0IC1mIEhFQUQgLS0gZmlsZTEgJiYKKwkgICAgdGVzdCAiJChjYXQgZmlsZTEpIiA9ICIkSDIiCisJZWxzZQorCSAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS0kb3B0ICRUCisJZmkKKyAgICAnCitkb25lIDw8XEVPRgorWCBVIEIgQyBzb2Z0ICAgWFhYWFgKK1ggVSBCIEMgbWl4ZWQgIFggQyBDCitYIFUgQiBDIGhhcmQgICBDIEMgQworWCBVIEIgQyBtZXJnZSAgQyBDIEMKK1ggVSBCIEIgc29mdCAgIFhYWFhYCitYIFUgQiBCIG1peGVkICBYIEIgQgorWCBVIEIgQiBoYXJkICAgQiBCIEIKK1ggVSBCIEIgbWVyZ2UgIEIgQiBCCitFT0YKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MjAxLWNvLnNoIGIvdC90NzIwMS1jby5zaAppbmRleCBlYmZkMzRkLi5kMjBlZDYxIDEwMDc1NQotLS0gYS90L3Q3MjAxLWNvLnNoCisrKyBiL3QvdDcyMDEtY28uc2gKQEAgLTE2NiwxOSArMTY2LDMxIEBACiAJISB0ZXN0IC1zIGN1cnJlbnQKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgdG8gZGV0YWNoIEhFQUQnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHRvIGRldGFjaCBIRUFEICh3aXRoIGFkdmljZSBkZWNsaW5lZCknICcKIAorCWdpdCBjb25maWcgYWR2aWNlLmRldGFjaGVkSGVhZCBmYWxzZSAmJgogCWdpdCBjaGVja291dCAtZiByZW5hbWVyICYmIGdpdCBjbGVhbiAtZiAmJgogCWdpdCBjaGVja291dCByZW5hbWVyXiAyPm1lc3NhZ2VzICYmCi0JKGNhdCA+bWVzc2FnZXMuZXhwZWN0IDw8RU9GCi1Ob3RlOiBtb3ZpbmcgdG8gJ1wnJ3JlbmFtZXJeJ1wnJyB3aGljaCBpc24nXCcndCBhIGxvY2FsIGJyYW5jaAotSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCBmcm9tIHRoaXMgY2hlY2tvdXQsIHlvdSBtYXkgZG8gc28KLShub3cgb3IgbGF0ZXIpIGJ5IHVzaW5nIC1iIHdpdGggdGhlIGNoZWNrb3V0IGNvbW1hbmQgYWdhaW4uIEV4YW1wbGU6Ci0gIGdpdCBjaGVja291dCAtYiA8bmV3X2JyYW5jaF9uYW1lPgotSEVBRCBpcyBub3cgYXQgNzMyOTM4OC4uLiBJbml0aWFsIEEgb25lLCBBIHR3bwotRU9GCi0pICYmCi0JdGVzdF9jbXAgbWVzc2FnZXMuZXhwZWN0IG1lc3NhZ2VzICYmCisJZ3JlcCAiSEVBRCBpcyBub3cgYXQgNzMyOTM4OCIgbWVzc2FnZXMgJiYKKwl0ZXN0IDEgLWVxICQod2MgLWwgPG1lc3NhZ2VzKSAmJgorCUg9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJTT0kKGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwl0ZXN0ICJ6JEgiID0gInokTSIgJiYKKwlpZiBnaXQgc3ltYm9saWMtcmVmIEhFQUQgPi9kZXYvbnVsbCAyPiYxCisJdGhlbgorCQllY2hvICJPT1BTLCBIRUFEIGlzIHN0aWxsIHN5bWJvbGljPz8/IgorCQlmYWxzZQorCWVsc2UKKwkJOiBoYXBweQorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHRvIGRldGFjaCBIRUFEJyAnCisJZ2l0IGNvbmZpZyBhZHZpY2UuZGV0YWNoZWRIZWFkIHRydWUgJiYKKwlnaXQgY2hlY2tvdXQgLWYgcmVuYW1lciAmJiBnaXQgY2xlYW4gLWYgJiYKKwlnaXQgY2hlY2tvdXQgcmVuYW1lcl4gMj5tZXNzYWdlcyAmJgorCWdyZXAgIkhFQUQgaXMgbm93IGF0IDczMjkzODgiIG1lc3NhZ2VzICYmCisJdGVzdCAxIC1sdCAkKHdjIC1sIDxtZXNzYWdlcykgJiYKIAlIPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgogCU09JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCiAJdGVzdCAieiRIIiA9ICJ6JE0iICYmCkBAIC01NDIsNCArNTU0LDYxIEBACiAJISBncmVwICJeUHJldmlvdXMgSEVBRCIgZXJyb3IubG9nCiAnCiAKKygKKyBlY2hvICIjISRTSEVMTF9QQVRIIgorIGNhdCA8PFxFT0YKK089JDEgQT0kMiBCPSQzCitjYXQgIiRBIiA+LnRtcAorZXhlYyA+IiRBIgorZWNobyAnPDw8PDw8PCBmaWxmcmUtdGhlaXJzJworY2F0ICIkQiIKK2VjaG8gJ3x8fHx8fHwgZmlsZnJlLWNvbW1vbicKK2NhdCAiJE8iCitlY2hvICc9PT09PT09JworY2F0ICIudG1wIgorZWNobyAnPj4+Pj4+PiBmaWxmcmUtb3VycycKK3JtIC1mIC50bXAKK2V4aXQgMQorRU9GCispID5maWxmcmUuc2gKK2NobW9kICt4IGZpbGZyZS5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdXN0b20gbWVyZ2UgZHJpdmVyIHdpdGggY2hlY2tvdXQgLW0nICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisKKwlnaXQgY29uZmlnIG1lcmdlLmZpbGZyZS5kcml2ZXIgIi4vZmlsZnJlLnNoICVPICVBICVCIiAmJgorCWdpdCBjb25maWcgbWVyZ2UuZmlsZnJlLm5hbWUgIkZlZWwtZnJlZSBtZXJnZSBkcml2ZXIiICYmCisJZ2l0IGNvbmZpZyBtZXJnZS5maWxmcmUucmVjdXJzaXZlIGJpbmFyeSAmJgorCWVjaG8gImFybSBtZXJnZT1maWxmcmUiID4uZ2l0YXR0cmlidXRlcyAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGxlZnQgJiYKKwllY2hvIG5ldXRyYWwgPmFybSAmJgorCWdpdCBhZGQgYXJtIC5naXRhdHRyaWJ1dGVzICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBuZXV0cmFsICYmCisJZ2l0IGJyYW5jaCByaWdodCAmJgorCisJZWNobyBsZWZ0ID5hcm0gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGxlZnQgJiYKKwlnaXQgY2hlY2tvdXQgcmlnaHQgJiYKKworCWVjaG8gcmlnaHQgPmFybSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gcmlnaHQgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBsZWZ0ICYmCisJKAorCQlmb3IgdCBpbiBmaWxmcmUtY29tbW9uIGxlZnQgcmlnaHQKKwkJZG8KKwkJCWdyZXAgJHQgYXJtIHx8IGV4aXQgMQorCQlkb25lCisJCWV4aXQgMAorCSkgJiYKKworCW12IGFybSBleHBlY3QgJiYKKwlnaXQgY2hlY2tvdXQgLW0gYXJtICYmCisJdGVzdF9jbXAgZXhwZWN0IGFybQorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDczMDAtY2xlYW4uc2ggYi90L3Q3MzAwLWNsZWFuLnNoCmluZGV4IDkyOWQ1ZDQuLjdkOGVkNjggMTAwNzU1Ci0tLSBhL3QvdDczMDAtY2xlYW4uc2gKKysrIGIvdC90NzMwMC1jbGVhbi5zaApAQCAtMjIsNiArMjIsMjUgQEAKIAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gd2l0aCBza2lwLXdvcmt0cmVlIC5naXRpZ25vcmUnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tc2tpcC13b3JrdHJlZSAuZ2l0aWdub3JlICYmCisJcm0gLmdpdGlnbm9yZSAmJgorCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJZ2l0IGNsZWFuICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0ICEgLWYgYS5vdXQgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1uby1za2lwLXdvcmt0cmVlIC5naXRpZ25vcmUgJiYKKwlnaXQgY2hlY2tvdXQgLmdpdGlnbm9yZQorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4nICcKIAogCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKQEAgLTM4MCw0ICszOTksNDMgQEAKICcKIGNobW9kIDc1NSBmb28KIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmVzdGVkIGdpdCB3b3JrIHRyZWUnICcKKwlybSAtZnIgZm9vIGJhciAmJgorCW1rZGlyIGZvbyBiYXIgJiYKKwkoCisJCWNkIGZvbyAmJgorCQlnaXQgaW5pdCAmJgorCQk+aGVsbG8ud29ybGQKKwkJZ2l0IGFkZCAuICYmCisJCWdpdCBjb21taXQgLWEgLW0gbmVzdGVkCisJKSAmJgorCSgKKwkJY2QgYmFyICYmCisJCT5nb29kYnllLnBlb3BsZQorCSkgJiYKKwlnaXQgY2xlYW4gLWYgLWQgJiYKKwl0ZXN0IC1mIGZvby8uZ2l0L2luZGV4ICYmCisJdGVzdCAtZiBmb28vaGVsbG8ud29ybGQgJiYKKwkhIHRlc3QgLWQgYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvcmNlIHJlbW92YWwgb2YgbmVzdGVkIGdpdCB3b3JrIHRyZWUnICcKKwlybSAtZnIgZm9vIGJhciAmJgorCW1rZGlyIGZvbyBiYXIgJiYKKwkoCisJCWNkIGZvbyAmJgorCQlnaXQgaW5pdCAmJgorCQk+aGVsbG8ud29ybGQKKwkJZ2l0IGFkZCAuICYmCisJCWdpdCBjb21taXQgLWEgLW0gbmVzdGVkCisJKSAmJgorCSgKKwkJY2QgYmFyICYmCisJCT5nb29kYnllLnBlb3BsZQorCSkgJiYKKwlnaXQgY2xlYW4gLWYgLWYgLWQgJiYKKwkhIHRlc3QgLWQgZm9vICYmCisJISB0ZXN0IC1kIGJhcgorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc0MDAtc3VibW9kdWxlLWJhc2ljLnNoIGIvdC90NzQwMC1zdWJtb2R1bGUtYmFzaWMuc2gKaW5kZXggMGYyY2NjNi4uMWE0ZGM1ZiAxMDA3NTUKLS0tIGEvdC90NzQwMC1zdWJtb2R1bGUtYmFzaWMuc2gKKysrIGIvdC90NzQwMC1zdWJtb2R1bGUtYmFzaWMuc2gKQEAgLTI5OSw2ICsyOTksMTUgQEAKIAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb3ZpbmcgdG8gYSBjb21taXQgd2l0aG91dCBzdWJtb2R1bGUgZG9lcyBub3QgbGVhdmUgZW1wdHkgZGlyJyAnCisJcm0gLXJmIGluaXQgJiYKKwlta2RpciBpbml0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBpbml0aWFsICYmCisJdGVzdCAhIC1kIGluaXQgJiYKKwlnaXQgY2hlY2tvdXQgc2Vjb25kCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSA8aW52YWxpZC1wYXRoPiB3YXJucycgJwogCiAJZ2l0IHN1Ym1vZHVsZSBuby1zdWNoLXN1Ym1vZHVsZSAyPiBvdXRwdXQuZXJyICYmCkBAIC0zMDYsNCArMzE1LDIwIEBACiAKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHN1Ym1vZHVsZXMgd2l0aG91dCBzcGVjaWZ5aW5nIGFuIGV4cGxpY2l0IHBhdGgnICcKKwlta2RpciByZXBvICYmCisJY2QgcmVwbyAmJgorCWdpdCBpbml0ICYmCisJZWNobyByID5yICYmCisJZ2l0IGFkZCByICYmCisJZ2l0IGNvbW1pdCAtbSAicmVwbyBjb21taXQgMSIgJiYKKwljZCAuLiAmJgorCWdpdCBjbG9uZSAtLWJhcmUgcmVwby8gYmFyZS5naXQgJiYKKwljZCBhZGR0ZXN0ICYmCisJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRzdWJtb2R1cmwvcmVwbyIgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5yZXBvLnBhdGggcmVwbyAmJgorCWdpdCBzdWJtb2R1bGUgYWRkICIkc3VibW9kdXJsL2JhcmUuZ2l0IiAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLmJhcmUucGF0aCBiYXJlCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzQwMS1zdWJtb2R1bGUtc3VtbWFyeS5zaCBiL3QvdDc0MDEtc3VibW9kdWxlLXN1bW1hcnkuc2gKaW5kZXggNjE0OTgyOS4uZDNjMDM5ZiAxMDA3NTUKLS0tIGEvdC90NzQwMS1zdWJtb2R1bGUtc3VtbWFyeS5zaAorKysgYi90L3Q3NDAxLXN1Ym1vZHVsZS1zdW1tYXJ5LnNoCkBAIC01Niw2ICs1NiwxNSBAQAogRU9GCiAiCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZShmb3J3YXJkKSwgLS1maWxlcycgIgorCWdpdCBzdWJtb2R1bGUgc3VtbWFyeSAtLWZpbGVzID5hY3R1YWwgJiYKKwlkaWZmIGFjdHVhbCAtIDw8LUVPRgorKiBzbTEgJGhlYWQxLi4uJGhlYWQyICgxKToKKyAgPiBBZGQgZm9vMworCitFT0YKKyIKKwogY29tbWl0X2ZpbGUgc20xICYmCiBjZCBzbTEgJiYKIGdpdCByZXNldCAtLWhhcmQgSEVBRH4yID4vZGV2L251bGwgJiYKQEAgLTExNCw2ICsxMjMsMTUgQEAKIEVPRgogIgogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0eXBlY2hhbmdlZCBzdWJtb2R1bGUoc3VibW9kdWxlLT5ibG9iKSwgLS1maWxlcycgIgorICAgIGdpdCBzdWJtb2R1bGUgc3VtbWFyeSAtLWZpbGVzID5hY3R1YWwgJiYKKyAgICBkaWZmIGFjdHVhbCAtIDw8LUVPRgorKiBzbTEgJGhlYWQ1KGJsb2IpLT4kaGVhZDQoc3VibW9kdWxlKSAoMyk6CisgID4gQWRkIGZvbzUKKworRU9GCisiCisKIHJtIC1yZiBzbTEgJiYKIGdpdCBjaGVja291dC1pbmRleCBzbTEKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R5cGVjaGFuZ2VkIHN1Ym1vZHVsZShzdWJtb2R1bGUtPmJsb2IpJyAiCkBAIC0xOTUsNyArMjEzLDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZm9yLXN0YXR1cycgIgogICAgIGdpdCBzdWJtb2R1bGUgc3VtbWFyeSAtLWZvci1zdGF0dXMgSEVBRF4gPmFjdHVhbCAmJgogICAgIHRlc3RfY21wIGFjdHVhbCAtIDw8RU9GCi0jIE1vZGlmaWVkIHN1Ym1vZHVsZXM6CisjIFN1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKICMKICMgKiBzbTEgJGhlYWQ2Li4uMDAwMDAwMDoKICMKQEAgLTIwNSw0ICsyMjMsOCBAQAogRU9GCiAiCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgd2hlbiB1c2luZyAtLWZpbGVzIHRvZ2V0aGVyIHdpdGggLS1jYWNoZWQnICIKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIHN1bW1hcnkgLS1maWxlcyAtLWNhY2hlZAorIgorCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc0MDYtc3VibW9kdWxlLXVwZGF0ZS5zaCBiL3QvdDc0MDYtc3VibW9kdWxlLXVwZGF0ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMzgyYThlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzQwNi1zdWJtb2R1bGUtdXBkYXRlLnNoCkBAIC0wLDAgKzEsMjA2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IFJlZCBIYXQsIEluYy4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCB1cGRhdGluZyBzdWJtb2R1bGVzCisKK1RoaXMgdGVzdCB2ZXJpZmllcyB0aGF0ICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIgZGV0YWNoZXMgdGhlIEhFQUQgb2YgdGhlCitzdWJtb2R1bGUgYW5kICJnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlYmFzZS8tLW1lcmdlIiBkb2VzIG5vdCBkZXRhY2ggdGhlIEhFQUQuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCisKK2NvbXBhcmVfaGVhZCgpCit7CisgICAgc2hhX21hc3Rlcj1gZ2l0IHJldi1saXN0IC0tbWF4LWNvdW50PTEgbWFzdGVyYAorICAgIHNoYV9oZWFkPWBnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSBIRUFEYAorCisgICAgdGVzdCAiJHNoYV9tYXN0ZXIiID0gIiRzaGFfaGVhZCIKK30KKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhIHN1Ym1vZHVsZSB0cmVlJyAnCisJZWNobyBmaWxlID4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdXBzdHJlYW0KKwlnaXQgY2xvbmUgLiBzdXBlciAmJgorCWdpdCBjbG9uZSBzdXBlciBzdWJtb2R1bGUgJiYKKwlnaXQgY2xvbmUgc3VwZXIgcmViYXNpbmcgJiYKKwlnaXQgY2xvbmUgc3VwZXIgbWVyZ2luZyAmJgorCShjZCBzdXBlciAmJgorCSBnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgc3VibW9kdWxlICYmCisJIHRlc3RfdGljayAmJgorCSBnaXQgY29tbWl0IC1tICJzdWJtb2R1bGUiICYmCisJIGdpdCBzdWJtb2R1bGUgaW5pdCBzdWJtb2R1bGUKKwkpICYmCisJKGNkIHN1Ym1vZHVsZSAmJgorCWVjaG8gImxpbmUyIiA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJDb21taXQgMiIKKwkpICYmCisJKGNkIHN1cGVyICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGdpdCBwdWxsIC0tcmViYXNlIG9yaWdpbgorCSApICYmCisJIGdpdCBhZGQgc3VibW9kdWxlICYmCisJIGdpdCBjb21taXQgLW0gInN1Ym1vZHVsZSB1cGRhdGUiCisJKSAmJgorCShjZCBzdXBlciAmJgorCSBnaXQgc3VibW9kdWxlIGFkZCAuLi9yZWJhc2luZyByZWJhc2luZyAmJgorCSB0ZXN0X3RpY2sgJiYKKwkgZ2l0IGNvbW1pdCAtbSAicmViYXNpbmciCisJKSAmJgorCShjZCBzdXBlciAmJgorCSBnaXQgc3VibW9kdWxlIGFkZCAuLi9tZXJnaW5nIG1lcmdpbmcgJiYKKwkgdGVzdF90aWNrICYmCisJIGdpdCBjb21taXQgLW0gInJlYmFzaW5nIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSBkZXRhY2hpbmcgdGhlIEhFQUQgJyAnCisJKGNkIHN1cGVyL3N1Ym1vZHVsZSAmJgorCSBnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MQorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgc3VibW9kdWxlICYmCisJIGNkIHN1Ym1vZHVsZSAmJgorCSAhIGNvbXBhcmVfaGVhZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtLXJlYmFzZSBzdGF5aW5nIG9uIG1hc3RlcicgJworCShjZCBzdXBlci9zdWJtb2R1bGUgJiYKKwkgIGdpdCBjaGVja291dCBtYXN0ZXIKKwkpICYmCisJKGNkIHN1cGVyICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGNvbXBhcmVfaGVhZAorCSApICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmViYXNlIHN1Ym1vZHVsZSAmJgorCSBjZCBzdWJtb2R1bGUgJiYKKwkgY29tcGFyZV9oZWFkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0tbWVyZ2Ugc3RheWluZyBvbiBtYXN0ZXInICcKKwkoY2Qgc3VwZXIvc3VibW9kdWxlICYmCisJICBnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MQorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1tZXJnZSBzdWJtb2R1bGUgJiYKKwkgY2Qgc3VibW9kdWxlICYmCisJIGNvbXBhcmVfaGVhZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtIHJlYmFzZSBpbiAuZ2l0L2NvbmZpZycgJworCShjZCBzdXBlciAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlIHJlYmFzZQorCSkgJiYKKwkoY2Qgc3VwZXIvc3VibW9kdWxlICYmCisJICBnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MQorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgc3VibW9kdWxlICYmCisJIGNkIHN1Ym1vZHVsZSAmJgorCSBjb21wYXJlX2hlYWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLSBjaGVja291dCBpbiAuZ2l0L2NvbmZpZyBidXQgLS1yZWJhc2UgZ2l2ZW4nICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSBjaGVja291dAorCSkgJiYKKwkoY2Qgc3VwZXIvc3VibW9kdWxlICYmCisJICBnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MQorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZWJhc2Ugc3VibW9kdWxlICYmCisJIGNkIHN1Ym1vZHVsZSAmJgorCSBjb21wYXJlX2hlYWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLSBtZXJnZSBpbiAuZ2l0L2NvbmZpZycgJworCShjZCBzdXBlciAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlIG1lcmdlCisJKSAmJgorCShjZCBzdXBlci9zdWJtb2R1bGUgJiYKKwkgIGdpdCByZXNldCAtLWhhcmQgSEVBRH4xCisJKSAmJgorCShjZCBzdXBlciAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBjb21wYXJlX2hlYWQKKwkgKSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSBzdWJtb2R1bGUgJiYKKwkgY2Qgc3VibW9kdWxlICYmCisJIGNvbXBhcmVfaGVhZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtIGNoZWNrb3V0IGluIC5naXQvY29uZmlnIGJ1dCAtLW1lcmdlIGdpdmVuJyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cGRhdGUgY2hlY2tvdXQKKwkpICYmCisJKGNkIHN1cGVyL3N1Ym1vZHVsZSAmJgorCSAgZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEKKwkpICYmCisJKGNkIHN1cGVyICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGNvbXBhcmVfaGVhZAorCSApICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tbWVyZ2Ugc3VibW9kdWxlICYmCisJIGNkIHN1Ym1vZHVsZSAmJgorCSBjb21wYXJlX2hlYWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLSBjaGVja291dCBpbiAuZ2l0L2NvbmZpZycgJworCShjZCBzdXBlciAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlIGNoZWNrb3V0CisJKSAmJgorCShjZCBzdXBlci9zdWJtb2R1bGUgJiYKKwkgIGdpdCByZXNldCAtLWhhcmQgSEVBRF4KKwkpICYmCisJKGNkIHN1cGVyICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGNvbXBhcmVfaGVhZAorCSApICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIHN1Ym1vZHVsZSAmJgorCSBjZCBzdWJtb2R1bGUgJiYKKwkgISBjb21wYXJlX2hlYWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBpbml0IHBpY2tzIHVwIHJlYmFzZScgJworCShjZCBzdXBlciAmJgorCSBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5yZWJhc2luZy51cGRhdGUgcmViYXNlICYmCisJIGdpdCBzdWJtb2R1bGUgaW5pdCByZWJhc2luZyAmJgorCSB0ZXN0ICJyZWJhc2UiID0gIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUucmViYXNpbmcudXBkYXRlKSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBpbml0IHBpY2tzIHVwIG1lcmdlJyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLm1lcmdpbmcudXBkYXRlIG1lcmdlICYmCisJIGdpdCBzdWJtb2R1bGUgaW5pdCBtZXJnaW5nICYmCisJIHRlc3QgIm1lcmdlIiA9ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLm1lcmdpbmcudXBkYXRlKSIKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzQwNy1zdWJtb2R1bGUtZm9yZWFjaC5zaCBiL3QvdDc0MDctc3VibW9kdWxlLWZvcmVhY2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmE1Mjc3NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc0MDctc3VibW9kdWxlLWZvcmVhY2guc2gKQEAgLTAsMCArMSwyMzcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgSm9oYW4gSGVybGFuZAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0ICJnaXQgc3VibW9kdWxlIGZvcmVhY2giCisKK1RoaXMgdGVzdCB2ZXJpZmllcyB0aGF0ICJnaXQgc3VibW9kdWxlIGZvcmVhY2giIGNvcnJlY3RseSB2aXNpdHMgYWxsIHN1Ym1vZHVsZXMKK3RoYXQgYXJlIGN1cnJlbnRseSBjaGVja2VkIG91dC4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYSBzdWJtb2R1bGUgdHJlZScgJworCWVjaG8gZmlsZSA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHVwc3RyZWFtCisJZ2l0IGNsb25lIC4gc3VwZXIgJiYKKwlnaXQgY2xvbmUgc3VwZXIgc3VibW9kdWxlICYmCisJKAorCQljZCBzdXBlciAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgc3ViMSAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgc3ViMiAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgc3ViMyAmJgorCQlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIC0tcmVuYW1lLXNlY3Rpb24gXAorCQkJc3VibW9kdWxlLnN1YjEgc3VibW9kdWxlLmZvbzEgJiYKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAtLXJlbmFtZS1zZWN0aW9uIFwKKwkJCXN1Ym1vZHVsZS5zdWIyIHN1Ym1vZHVsZS5mb28yICYmCisJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgLS1yZW5hbWUtc2VjdGlvbiBcCisJCQlzdWJtb2R1bGUuc3ViMyBzdWJtb2R1bGUuZm9vMyAmJgorCQlnaXQgYWRkIC5naXRtb2R1bGVzCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJzdWJtb2R1bGVzIiAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgc3ViMSAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgc3ViMiAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgc3ViMworCSkgJiYKKwkoCisJCWNkIHN1Ym1vZHVsZSAmJgorCQllY2hvIGRpZmZlcmVudCA+IGZpbGUgJiYKKwkJZ2l0IGFkZCBmaWxlICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJkaWZmZXJlbnQiCisJKSAmJgorCSgKKwkJY2Qgc3VwZXIgJiYKKwkJKAorCQkJY2Qgc3ViMyAmJgorCQkJZ2l0IHB1bGwKKwkJKSAmJgorCQlnaXQgYWRkIHN1YjMgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gInVwZGF0ZSBzdWIzIgorCSkKKycKKworc3ViMXNoYTE9JChjZCBzdXBlci9zdWIxICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKK3N1YjNzaGExPSQoY2Qgc3VwZXIvc3ViMyAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpCisKK2NhdCA+IGV4cGVjdCA8PEVPRgorRW50ZXJpbmcgJ3N1YjEnCitmb28xLXN1YjEtJHN1YjFzaGExCitFbnRlcmluZyAnc3ViMycKK2ZvbzMtc3ViMy0kc3ViM3NoYTEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGJhc2ljICJzdWJtb2R1bGUgZm9yZWFjaCIgdXNhZ2UnICcKKwlnaXQgY2xvbmUgc3VwZXIgY2xvbmUgJiYKKwkoCisJCWNkIGNsb25lICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLSBzdWIxIHN1YjMgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBmb3JlYWNoICJlY2hvIFwkbmFtZS1cJHBhdGgtXCRzaGExIiA+IC4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG5lc3RlZCBzdWJtb2R1bGVzJyAnCisJZ2l0IGNsb25lIHN1Ym1vZHVsZSBuZXN0ZWQxICYmCisJZ2l0IGNsb25lIHN1Ym1vZHVsZSBuZXN0ZWQyICYmCisJZ2l0IGNsb25lIHN1Ym1vZHVsZSBuZXN0ZWQzICYmCisJKAorCQljZCBuZXN0ZWQzICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1Ym1vZHVsZSBzdWJtb2R1bGUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gInN1Ym1vZHVsZSIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0IHN1Ym1vZHVsZQorCSkgJiYKKwkoCisJCWNkIG5lc3RlZDIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vbmVzdGVkMyBuZXN0ZWQzICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJuZXN0ZWQzIiAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgbmVzdGVkMworCSkgJiYKKwkoCisJCWNkIG5lc3RlZDEgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vbmVzdGVkMiBuZXN0ZWQyICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJuZXN0ZWQyIiAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgbmVzdGVkMgorCSkgJiYKKwkoCisJCWNkIHN1cGVyICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL25lc3RlZDEgbmVzdGVkMSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAibmVzdGVkMSIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0IG5lc3RlZDEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSAic3VibW9kdWxlIGZvcmVhY2giIHRvIGNoZWNrb3V0IDJuZCBsZXZlbCBzdWJtb2R1bGUnICcKKwlnaXQgY2xvbmUgc3VwZXIgY2xvbmUyICYmCisJKAorCQljZCBjbG9uZTIgJiYKKwkJdGVzdCAhIC1kIHN1YjEvLmdpdCAmJgorCQl0ZXN0ICEgLWQgc3ViMi8uZ2l0ICYmCisJCXRlc3QgISAtZCBzdWIzLy5naXQgJiYKKwkJdGVzdCAhIC1kIG5lc3RlZDEvLmdpdCAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgJiYKKwkJdGVzdCAtZCBzdWIxLy5naXQgJiYKKwkJdGVzdCAtZCBzdWIyLy5naXQgJiYKKwkJdGVzdCAtZCBzdWIzLy5naXQgJiYKKwkJdGVzdCAtZCBuZXN0ZWQxLy5naXQgJiYKKwkJdGVzdCAhIC1kIG5lc3RlZDEvbmVzdGVkMi8uZ2l0ICYmCisJCWdpdCBzdWJtb2R1bGUgZm9yZWFjaCAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IiAmJgorCQl0ZXN0IC1kIG5lc3RlZDEvbmVzdGVkMi8uZ2l0ICYmCisJCXRlc3QgISAtZCBuZXN0ZWQxL25lc3RlZDIvbmVzdGVkMy8uZ2l0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgImZvcmVhY2ggLS1yZWN1cnNpdmUiIHRvIGNoZWNrb3V0IGFsbCBzdWJtb2R1bGVzJyAnCisJKAorCQljZCBjbG9uZTIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBmb3JlYWNoIC0tcmVjdXJzaXZlICJnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQiICYmCisJCXRlc3QgLWQgbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMvLmdpdCAmJgorCQl0ZXN0IC1kIG5lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzL3N1Ym1vZHVsZS8uZ2l0CisJKQorJworCitjYXQgPiBleHBlY3QgPDxFT0YKK0VudGVyaW5nICduZXN0ZWQxJworRW50ZXJpbmcgJ25lc3RlZDEvbmVzdGVkMicKK0VudGVyaW5nICduZXN0ZWQxL25lc3RlZDIvbmVzdGVkMycKK0VudGVyaW5nICduZXN0ZWQxL25lc3RlZDIvbmVzdGVkMy9zdWJtb2R1bGUnCitFbnRlcmluZyAnc3ViMScKK0VudGVyaW5nICdzdWIyJworRW50ZXJpbmcgJ3N1YjMnCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBtZXNzYWdlcyBmcm9tICJmb3JlYWNoIC0tcmVjdXJzaXZlIicgJworCSgKKwkJY2QgY2xvbmUyICYmCisJCWdpdCBzdWJtb2R1bGUgZm9yZWFjaCAtLXJlY3Vyc2l2ZSAidHJ1ZSIgPiAuLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPiBleHBlY3QgPDxFT0YKK25lc3RlZDEtbmVzdGVkMQorbmVzdGVkMi1uZXN0ZWQyCituZXN0ZWQzLW5lc3RlZDMKK3N1Ym1vZHVsZS1zdWJtb2R1bGUKK2ZvbzEtc3ViMQorZm9vMi1zdWIyCitmb28zLXN1YjMKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0ICJmb3JlYWNoIC0tcXVpZXQgLS1yZWN1cnNpdmUiJyAnCisJKAorCQljZCBjbG9uZTIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBmb3JlYWNoIC1xIC0tcmVjdXJzaXZlICJlY2hvIFwkbmFtZS1cJHBhdGgiID4gLi4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlICJ1cGRhdGUgLS1yZWN1cnNpdmUiIHRvIGNoZWNrb3V0IGFsbCBzdWJtb2R1bGVzJyAnCisJZ2l0IGNsb25lIHN1cGVyIGNsb25lMyAmJgorCSgKKwkJY2QgY2xvbmUzICYmCisJCXRlc3QgISAtZCBzdWIxLy5naXQgJiYKKwkJdGVzdCAhIC1kIHN1YjIvLmdpdCAmJgorCQl0ZXN0ICEgLWQgc3ViMy8uZ2l0ICYmCisJCXRlc3QgISAtZCBuZXN0ZWQxLy5naXQgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlICYmCisJCXRlc3QgLWQgc3ViMS8uZ2l0ICYmCisJCXRlc3QgLWQgc3ViMi8uZ2l0ICYmCisJCXRlc3QgLWQgc3ViMy8uZ2l0ICYmCisJCXRlc3QgLWQgbmVzdGVkMS8uZ2l0ICYmCisJCXRlc3QgLWQgbmVzdGVkMS9uZXN0ZWQyLy5naXQgJiYKKwkJdGVzdCAtZCBuZXN0ZWQxL25lc3RlZDIvbmVzdGVkMy8uZ2l0ICYmCisJCXRlc3QgLWQgbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMvc3VibW9kdWxlLy5naXQKKwkpCisnCisKK25lc3RlZDFzaGExPSQoY2QgY2xvbmUzL25lc3RlZDEgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKQorbmVzdGVkMnNoYTE9JChjZCBjbG9uZTMvbmVzdGVkMS9uZXN0ZWQyICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKK25lc3RlZDNzaGExPSQoY2QgY2xvbmUzL25lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKK3N1Ym1vZHVsZXNoYTE9JChjZCBjbG9uZTMvbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMvc3VibW9kdWxlICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKK3N1YjFzaGExPSQoY2QgY2xvbmUzL3N1YjEgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKQorc3ViMnNoYTE9JChjZCBjbG9uZTMvc3ViMiAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpCitzdWIzc2hhMT0kKGNkIGNsb25lMy9zdWIzICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKK3N1YjFzaGExX3Nob3J0PSQoY2QgY2xvbmUzL3N1YjEgJiYgZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpCitzdWIyc2hhMV9zaG9ydD0kKGNkIGNsb25lMy9zdWIyICYmIGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKQorCitjYXQgPiBleHBlY3QgPDxFT0YKKyAkbmVzdGVkMXNoYTEgbmVzdGVkMSAoaGVhZHMvbWFzdGVyKQorICRuZXN0ZWQyc2hhMSBuZXN0ZWQxL25lc3RlZDIgKGhlYWRzL21hc3RlcikKKyAkbmVzdGVkM3NoYTEgbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMgKGhlYWRzL21hc3RlcikKKyAkc3VibW9kdWxlc2hhMSBuZXN0ZWQxL25lc3RlZDIvbmVzdGVkMy9zdWJtb2R1bGUgKGhlYWRzL21hc3RlcikKKyAkc3ViMXNoYTEgc3ViMSAoJHN1YjFzaGExX3Nob3J0KQorICRzdWIyc2hhMSBzdWIyICgkc3ViMnNoYTFfc2hvcnQpCisgJHN1YjNzaGExIHN1YjMgKGhlYWRzL21hc3RlcikKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0ICJzdGF0dXMgLS1yZWN1cnNpdmUiJyAnCisJKAorCQljZCBjbG9uZTMgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgLS1yZWN1cnNpdmUgPiAuLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgImdpdCBjbG9uZSAtLXJlY3Vyc2l2ZSIgdG8gY2hlY2tvdXQgYWxsIHN1Ym1vZHVsZXMnICcKKwlnaXQgY2xvbmUgLS1yZWN1cnNpdmUgc3VwZXIgY2xvbmU0ICYmCisJdGVzdCAtZCBjbG9uZTQvLmdpdCAmJgorCXRlc3QgLWQgY2xvbmU0L3N1YjEvLmdpdCAmJgorCXRlc3QgLWQgY2xvbmU0L3N1YjIvLmdpdCAmJgorCXRlc3QgLWQgY2xvbmU0L3N1YjMvLmdpdCAmJgorCXRlc3QgLWQgY2xvbmU0L25lc3RlZDEvLmdpdCAmJgorCXRlc3QgLWQgY2xvbmU0L25lc3RlZDEvbmVzdGVkMi8uZ2l0ICYmCisJdGVzdCAtZCBjbG9uZTQvbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMvLmdpdCAmJgorCXRlc3QgLWQgY2xvbmU0L25lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzL3N1Ym1vZHVsZS8uZ2l0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzQwOC1zdWJtb2R1bGUtcmVmZXJlbmNlLnNoIGIvdC90NzQwOC1zdWJtb2R1bGUtcmVmZXJlbmNlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNjMTZkM2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NDA4LXN1Ym1vZHVsZS1yZWZlcmVuY2Uuc2gKQEAgLTAsMCArMSw4MSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSwgUmVkIEhhdCBJbmMsIEF1dGhvcjogTWljaGFlbCBTLiBUc2lya2luIChtc3RAcmVkaGF0LmNvbSkKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBjbG9uZSAtLXJlZmVyZW5jZScKKy4gLi90ZXN0LWxpYi5zaAorCitiYXNlX2Rpcj1gcHdkYAorCitVPSRiYXNlX2Rpci9VUExPQURfTE9HCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmluZyBmaXJzdCByZXBvc2l0b3J5JyBcCisndGVzdF9jcmVhdGVfcmVwbyBBICYmIGNkIEEgJiYKK2VjaG8gZmlyc3QgPiBmaWxlMSAmJgorZ2l0IGFkZCBmaWxlMSAmJgorZ2l0IGNvbW1pdCAtbSBBLWluaXRpYWwnCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmluZyBzZWNvbmQgcmVwb3NpdG9yeScgXAorJ2dpdCBjbG9uZSBBIEIgJiYgY2QgQiAmJgorZWNobyBzZWNvbmQgPiBmaWxlMiAmJgorZ2l0IGFkZCBmaWxlMiAmJgorZ2l0IGNvbW1pdCAtbSBCLWFkZGl0aW9uICYmCitnaXQgcmVwYWNrIC1hIC1kICYmCitnaXQgcHJ1bmUnCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmluZyBzdXBlcm1vZHVsZScgXAorJ3Rlc3RfY3JlYXRlX3JlcG8gc3VwZXIgJiYgY2Qgc3VwZXIgJiYKK2VjaG8gZmlsZSA+IGZpbGUgJiYKK2dpdCBhZGQgZmlsZSAmJgorZ2l0IGNvbW1pdCAtbSBCLXN1cGVyLWluaXRpYWwnCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQgLS1yZWZlcmVuY2UnIFwKKydjZCBzdXBlciAmJiBnaXQgc3VibW9kdWxlIGFkZCAtLXJlZmVyZW5jZSAuLi9CICJmaWxlOi8vJGJhc2VfZGlyL0EiIHN1YiAmJgorZ2l0IGNvbW1pdCAtbSBCLXN1cGVyLWFkZGVkJworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZnRlciBhZGQ6IGV4aXN0ZW5jZSBvZiBpbmZvL2FsdGVybmF0ZXMnIFwKKyd0ZXN0IGB3YyAtbCA8c3VwZXIvc3ViLy5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXNgID0gMScKKworY2QgIiRiYXNlX2RpciIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhhdCByZWZlcmVuY2UgZ2V0cyB1c2VkIHdpdGggYWRkJyBcCisnY2Qgc3VwZXIvc3ViICYmCitlY2hvICIwIG9iamVjdHMsIDAga2lsb2J5dGVzIiA+IGV4cGVjdGVkICYmCitnaXQgY291bnQtb2JqZWN0cyA+IGN1cnJlbnQgJiYKK2RpZmYgZXhwZWN0ZWQgY3VycmVudCcKKworY2QgIiRiYXNlX2RpciIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmluZyBzdXBlcm1vZHVsZScgXAorJ2dpdCBjbG9uZSBzdXBlciBzdXBlci1jbG9uZScKKworY2QgIiRiYXNlX2RpciIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIHdpdGggcmVmZXJlbmNlJyBcCisnY2Qgc3VwZXItY2xvbmUgJiYgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVmZXJlbmNlIC4uL0InCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FmdGVyIHVwZGF0ZTogZXhpc3RlbmNlIG9mIGluZm8vYWx0ZXJuYXRlcycgXAorJ3Rlc3QgYHdjIC1sIDxzdXBlci1jbG9uZS9zdWIvLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlc2AgPSAxJworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aGF0IHJlZmVyZW5jZSBnZXRzIHVzZWQgd2l0aCB1cGRhdGUnIFwKKydjZCBzdXBlci1jbG9uZS9zdWIgJiYKK2VjaG8gIjAgb2JqZWN0cywgMCBraWxvYnl0ZXMiID4gZXhwZWN0ZWQgJiYKK2dpdCBjb3VudC1vYmplY3RzID4gY3VycmVudCAmJgorZGlmZiBleHBlY3RlZCBjdXJyZW50JworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MDAtY29tbWl0LnNoIGIvdC90NzUwMC1jb21taXQuc2gKaW5kZXggOGVlYzBmYS4uOWY1YzNlZCAxMDA3NTUKLS0tIGEvdC90NzUwMC1jb21taXQuc2gKKysrIGIvdC90NzUwMC1jb21taXQuc2gKQEAgLTE1MCw3ICsxNTAsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaWdub2ZmJyAnCiAJZWNobyAieWV0IGFub3RoZXIgY29udGVudCAqbmFyZioiID4+IGZvbyAmJgogCWVjaG8gInpvcnQiIHwgZ2l0IGNvbW1pdCAtcyAtRiAtIGZvbyAmJgotCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAiMSwvXiQvZCIgPiBvdXRwdXQgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgIjEsL15cJC9kIiA+IG91dHB1dCAmJgogCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKICcKIApkaWZmIC0tZ2l0IGEvdC90NzUwMS1jb21taXQuc2ggYi90L3Q3NTAxLWNvbW1pdC5zaAppbmRleCBlMmVmNTMyLi43OTQwOTAxIDEwMDc1NQotLS0gYS90L3Q3NTAxLWNvbW1pdC5zaAorKysgYi90L3Q3NTAxLWNvbW1pdC5zaApAQCAtODYsNyArODYsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKIAkiYW1lbmQgY29tbWl0IiBcCi0JIlZJU1VBTD0uL2VkaXRvciBnaXQgY29tbWl0IC0tYW1lbmQiCisJIkVESVRPUj0uL2VkaXRvciBnaXQgY29tbWl0IC0tYW1lbmQiCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSJwYXNzaW5nIC1tIGFuZCAtRiIgXApAQCAtMTA3LDcgKzEwNyw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKIAkiZWRpdGluZyBtZXNzYWdlIGZyb20gb3RoZXIgY29tbWl0IiBcCiAJImVjaG8gJ2h1bGEgaHVsYScgPmZpbGUgJiYgXAotCSBWSVNVQUw9Li9lZGl0b3IgZ2l0IGNvbW1pdCAtYyBIRUFEXiAtYSIKKwkgRURJVE9SPS4vZWRpdG9yIGdpdCBjb21taXQgLWMgSEVBRF4gLWEiCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSJtZXNzYWdlIGZyb20gc3RkaW4iIFwKQEAgLTExNyw3ICsxMTcsMTEgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSJvdmVycmlkaW5nIGF1dGhvciBmcm9tIGNvbW1hbmQgbGluZSIgXAogCSJlY2hvICdnYWsnID5maWxlICYmIFwKLQkgZ2l0IGNvbW1pdCAtbSAnYXV0aG9yJyAtLWF1dGhvciAnUnViYmVyIER1Y2sgPHJkdWNrQGNvbnZveS5vcmc+JyAtYSIKKwkgZ2l0IGNvbW1pdCAtbSAnYXV0aG9yJyAtLWF1dGhvciAnUnViYmVyIER1Y2sgPHJkdWNrQGNvbnZveS5vcmc+JyAtYSA+b3V0cHV0IDI+JjEiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSJjb21taXQgLS1hdXRob3Igb3V0cHV0IG1lbnRpb25zIGF1dGhvciIgXAorCSJncmVwIFJ1YmJlci5EdWNrIG91dHB1dCIKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMIFwKIAkiaW50ZXJhY3RpdmUgYWRkIiBcCkBAIC0xNDEsMTAgKzE0NSwxMCBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAJJ2VkaXRvciBub3QgaW52b2tlZCBpZiAtRiBpcyBnaXZlbicgJwogCSBlY2hvICJtb28iID5maWxlICYmCi0JIFZJU1VBTD0uL2VkaXRvciBnaXQgY29tbWl0IC1hIC1GIG1zZyAmJgorCSBFRElUT1I9Li9lZGl0b3IgZ2l0IGNvbW1pdCAtYSAtRiBtc2cgJiYKIAkgZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiIlcyIgfCBncmVwIC1xIGdvb2QgJiYKIAkgZWNobyAicXVhY2siID5maWxlICYmCi0JIGVjaG8gIkFub3RoZXIgZ29vZCBtZXNzYWdlLiIgfCBWSVNVQUw9Li9lZGl0b3IgZ2l0IGNvbW1pdCAtYSAtRiAtICYmCisJIGVjaG8gIkFub3RoZXIgZ29vZCBtZXNzYWdlLiIgfCBFRElUT1I9Li9lZGl0b3IgZ2l0IGNvbW1pdCAtYSAtRiAtICYmCiAJIGdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDoiJXMiIHwgZ3JlcCAtcSBnb29kCiAJICcKICMgV2UgY291bGQganVzdCBjaGVjayB0aGUgaGVhZCBzaGExLCBidXQgY2hlY2tpbmcgZWFjaCBjb21taXQgbWFrZXMgaXQKQEAgLTIxMSw2ICsyMTUsMjEgQEAKIAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWVuZCBjb21taXQgdG8gZml4IGRhdGUnICcKKworCXRlc3RfdGljayAmJgorCW5ld3RpY2s9JEdJVF9BVVRIT1JfREFURSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2F0LWZpbGUgLXAgSEVBRCB8CisJc2VkIC1lICJzL2F1dGhvci4qL2F1dGhvciAkYXV0aG9yICRuZXd0aWNrLyIgXAorCQktZSAicy9eXChjb21taXR0ZXIuKj4gXCkuKiQvXDEkR0lUX0NPTU1JVFRFUl9EQVRFLyIgPiBcCisJCWV4cGVjdGVkICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC0tZGF0ZT0iJG5ld3RpY2siICYmCisJZ2l0IGNhdC1maWxlIC1wIEhFQUQgPiBjdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ24gb2ZmICgxKScgJwogCiAJZWNobyAxID5wb3NpdGl2ZSAmJgpAQCAtMjQ3LDYgKzI2Niw0NyBAQAogCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25vZmYgZ2FwJyAnCisKKwllY2hvIDMgPnBvc2l0aXZlICYmCisJZ2l0IGFkZCBwb3NpdGl2ZSAmJgorCWFsdD0iQWx0LVJGQy04MjItSGVhZGVyOiBWYWx1ZSIgJiYKKwlnaXQgY29tbWl0IC1zIC1tICJ3ZWxjb21lCisKKyRhbHQiICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIxLC9eXCQvZCIgPiBhY3R1YWwgJiYKKwkoCisJCWVjaG8gd2VsY29tZQorCQllY2hvCisJCWVjaG8gJGFsdAorCQlnaXQgdmFyIEdJVF9DT01NSVRURVJfSURFTlQgfAorCQlzZWQgLWUgInMvPi4qLz4vIiAtZSAicy9eL1NpZ25lZC1vZmYtYnk6IC8iCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lnbm9mZiBnYXAgMicgJworCisJZWNobyA0ID5wb3NpdGl2ZSAmJgorCWdpdCBhZGQgcG9zaXRpdmUgJiYKKwlhbHQ9ImZpeGVkOiAzNCIgJiYKKwlnaXQgY29tbWl0IC1zIC1tICJ3ZWxjb21lCisKK1dlIGhhdmUgbm93CiskYWx0IiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiMSwvXlwkL2QiID4gYWN0dWFsICYmCisJKAorCQllY2hvIHdlbGNvbWUKKwkJZWNobworCQllY2hvIFdlIGhhdmUgbm93CisJCWVjaG8gJGFsdAorCQllY2hvCisJCWdpdCB2YXIgR0lUX0NPTU1JVFRFUl9JREVOVCB8CisJCXNlZCAtZSAicy8+LiovPi8iIC1lICJzL14vU2lnbmVkLW9mZi1ieTogLyIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSAtbScgJwogCiAJPm5lZ2F0aXZlICYmCmRpZmYgLS1naXQgYS90L3Q3NTAyLWNvbW1pdC5zaCBiL3QvdDc1MDItY29tbWl0LnNoCmluZGV4IDU2Y2Q4NjYuLjg0NGZiNDMgMTAwNzU1Ci0tLSBhL3QvdDc1MDItY29tbWl0LnNoCisrKyBiL3QvdDc1MDItY29tbWl0LnNoCkBAIC0yNTgsNCArMjU4LDEyMiBAQAogCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Egc2luZ2xlLWxpbmVyIHN1YmplY3Qgd2l0aCBhIHRva2VuIHBsdXMgY29sb24gaXMgbm90IGEgZm9vdGVyJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNvbW1pdCAtcyAtbSAiaGVsbG86IGtpdHR5IiAtLWFsbG93LWVtcHR5ICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIxLC9eJC9kIiA+YWN0dWFsICYmCisJdGVzdCAkKHdjIC1sIDxhY3R1YWwpID0gMworCisnCisKK2NhdCA+LmdpdC9GQUtFX0VESVRPUiA8PEVPRgorIyEkU0hFTExfUEFUSAorbXYgIlwkMSIgIlwkMS5vcmlnIgorKAorCWVjaG8gbWVzc2FnZQorCWNhdCAiXCQxLm9yaWciCispID4iXCQxIgorRU9GCisKK2VjaG8gJyMjIEN1c3RvbSB0ZW1wbGF0ZScgPnRlbXBsYXRlCisKK2NsZWFyX2NvbmZpZyAoKSB7CisJKAorCQlnaXQgY29uZmlnIC0tdW5zZXQtYWxsICIkMSIKKwkJY2FzZSAkPyBpbgorCQkwfDUpCWV4aXQgMCA7OworCQkqKQlleGl0IDEgOzsKKwkJZXNhYworCSkKK30KKwordHJ5X2NvbW1pdCAoKSB7CisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gPj5uZWdhdGl2ZSAmJgorCUdJVF9FRElUT1I9LmdpdC9GQUtFX0VESVRPUiBnaXQgY29tbWl0IC1hICQqICR1c2VfdGVtcGxhdGUgJiYKKwljYXNlICIkdXNlX3RlbXBsYXRlIiBpbgorCScnKQorCQkhIGdyZXAgIl4jIyBDdXN0b20gdGVtcGxhdGUiIC5naXQvQ09NTUlUX0VESVRNU0cgOzsKKwkqKQorCQlncmVwICJeIyMgQ3VzdG9tIHRlbXBsYXRlIiAuZ2l0L0NPTU1JVF9FRElUTVNHIDs7CisJZXNhYworfQorCit0cnlfY29tbWl0X3N0YXR1c19jb21ibyAoKSB7CisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQnICcKKwkJY2xlYXJfY29uZmlnIGNvbW1pdC5zdGF0dXMgJiYKKwkJdHJ5X2NvbW1pdCAiIiAmJgorCQlncmVwICJeIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiIC5naXQvQ09NTUlUX0VESVRNU0cKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQnICcKKwkJY2xlYXJfY29uZmlnIGNvbW1pdC5zdGF0dXMgJiYKKwkJdHJ5X2NvbW1pdCAiIiAmJgorCQlncmVwICJeIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiIC5naXQvQ09NTUlUX0VESVRNU0cKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLS1zdGF0dXMnICcKKwkJY2xlYXJfY29uZmlnIGNvbW1pdC5zdGF0dXMgJiYKKwkJdHJ5X2NvbW1pdCAtLXN0YXR1cyAmJgorCQlncmVwICJeIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiIC5naXQvQ09NTUlUX0VESVRNU0cKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLS1uby1zdGF0dXMnICcKKwkJY2xlYXJfY29uZmlnIGNvbW1pdC5zdGF0dXMgJiYKKwkJdHJ5X2NvbW1pdCAtLW5vLXN0YXR1cworCQkhIGdyZXAgIl4jIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIgLmdpdC9DT01NSVRfRURJVE1TRworCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCB3aXRoIGNvbW1pdC5zdGF0dXMgPSB5ZXMnICcKKwkJY2xlYXJfY29uZmlnIGNvbW1pdC5zdGF0dXMgJiYKKwkJZ2l0IGNvbmZpZyBjb21taXQuc3RhdHVzIHllcyAmJgorCQl0cnlfY29tbWl0ICIiICYmCisJCWdyZXAgIl4jIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIgLmdpdC9DT01NSVRfRURJVE1TRworCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCB3aXRoIGNvbW1pdC5zdGF0dXMgPSBubycgJworCQljbGVhcl9jb25maWcgY29tbWl0LnN0YXR1cyAmJgorCQlnaXQgY29uZmlnIGNvbW1pdC5zdGF0dXMgbm8gJiYKKwkJdHJ5X2NvbW1pdCAiIiAmJgorCQkhIGdyZXAgIl4jIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIgLmdpdC9DT01NSVRfRURJVE1TRworCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtLXN0YXR1cyB3aXRoIGNvbW1pdC5zdGF0dXMgPSB5ZXMnICcKKwkJY2xlYXJfY29uZmlnIGNvbW1pdC5zdGF0dXMgJiYKKwkJZ2l0IGNvbmZpZyBjb21taXQuc3RhdHVzIHllcyAmJgorCQl0cnlfY29tbWl0IC0tc3RhdHVzICYmCisJCWdyZXAgIl4jIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIgLmdpdC9DT01NSVRfRURJVE1TRworCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtLW5vLXN0YXR1cyB3aXRoIGNvbW1pdC5zdGF0dXMgPSB5ZXMnICcKKwkJY2xlYXJfY29uZmlnIGNvbW1pdC5zdGF0dXMgJiYKKwkJZ2l0IGNvbmZpZyBjb21taXQuc3RhdHVzIHllcyAmJgorCQl0cnlfY29tbWl0IC0tbm8tc3RhdHVzICYmCisJCSEgZ3JlcCAiXiMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IiAuZ2l0L0NPTU1JVF9FRElUTVNHCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tc3RhdHVzIHdpdGggY29tbWl0LnN0YXR1cyA9IG5vJyAnCisJCWNsZWFyX2NvbmZpZyBjb21taXQuc3RhdHVzICYmCisJCWdpdCBjb25maWcgY29tbWl0LnN0YXR1cyBubyAmJgorCQl0cnlfY29tbWl0IC0tc3RhdHVzICYmCisJCWdyZXAgIl4jIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIgLmdpdC9DT01NSVRfRURJVE1TRworCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtLW5vLXN0YXR1cyB3aXRoIGNvbW1pdC5zdGF0dXMgPSBubycgJworCQljbGVhcl9jb25maWcgY29tbWl0LnN0YXR1cyAmJgorCQlnaXQgY29uZmlnIGNvbW1pdC5zdGF0dXMgbm8gJiYKKwkJdHJ5X2NvbW1pdCAtLW5vLXN0YXR1cyAmJgorCQkhIGdyZXAgIl4jIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIgLmdpdC9DT01NSVRfRURJVE1TRworCScKKworfQorCit0cnlfY29tbWl0X3N0YXR1c19jb21ibworCit1c2VfdGVtcGxhdGU9Ii10IHRlbXBsYXRlIgorCit0cnlfY29tbWl0X3N0YXR1c19jb21ibworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MDYtc3RhdHVzLXN1Ym1vZHVsZS5zaCBiL3QvdDc1MDYtc3RhdHVzLXN1Ym1vZHVsZS5zaAppbmRleCBkOWEwOGFhLi4yNTNjMzM0IDEwMDc1NQotLS0gYS90L3Q3NTA2LXN0YXR1cy1zdWJtb2R1bGUuc2gKKysrIGIvdC90NzUwNi1zdGF0dXMtc3VibW9kdWxlLnNoCkBAIC01LDM0ICs1LDg3IEBACiAuIC4vdGVzdC1saWIuc2gKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKLQl0ZXN0X2NyZWF0ZV9yZXBvIHN1YgotCWNkIHN1YiAmJgotCTogPmJhciAmJgotCWdpdCBhZGQgYmFyICYmCi0JZ2l0IGNvbW1pdCAtbSAiIEFkZCBiYXIiICYmCi0JY2QgLi4gJiYKLQlnaXQgYWRkIHN1YiAmJgorCXRlc3RfY3JlYXRlX3JlcG8gc3ViICYmCisJKAorCQljZCBzdWIgJiYKKwkJOiA+YmFyICYmCisJCWdpdCBhZGQgYmFyICYmCisJCWdpdCBjb21taXQgLW0gIiBBZGQgYmFyIiAmJgorCQk6ID5mb28gJiYKKwkJZ2l0IGFkZCBmb28gJiYKKwkJZ2l0IGNvbW1pdCAtbSAiIEFkZCBmb28iCisJKSAmJgorCWVjaG8gb3V0cHV0ID4gLmdpdGlnbm9yZSAmJgorCWdpdCBhZGQgc3ViIC5naXRpZ25vcmUgJiYKIAlnaXQgY29tbWl0IC1tICJBZGQgc3VibW9kdWxlIHN1YiIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGNsZWFuJyAnCi0JZ2l0IHN0YXR1cyB8Ci0JZ3JlcCAibm90aGluZyB0byBjb21taXQiCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJZ3JlcCAibm90aGluZyB0byBjb21taXQiIG91dHB1dAogJwotdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1hIGNsZWFuJyAnCi0JZ2l0IHN0YXR1cyAtYSB8Ci0JZ3JlcCAibm90aGluZyB0byBjb21taXQiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtLWRyeS1ydW4gLWEgY2xlYW4nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tZHJ5LXJ1biAtYSA+b3V0cHV0ICYmCisJZ3JlcCAibm90aGluZyB0byBjb21taXQiIG91dHB1dAogJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBtb2RpZmllZCBmaWxlIGluIHN1Ym1vZHVsZScgJworCShjZCBzdWIgJiYgZ2l0IHJlc2V0IC0taGFyZCkgJiYKKwllY2hvICJjaGFuZ2VkIiA+c3ViL2ZvbyAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCWdyZXAgIm1vZGlmaWVkOiAgIHN1YiIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIG1vZGlmaWVkIGZpbGUgaW4gc3VibW9kdWxlIChwb3JjZWxhaW4pJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkKSAmJgorCWVjaG8gImNoYW5nZWQiID5zdWIvZm9vICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+b3V0cHV0ICYmCisJZGlmZiBvdXRwdXQgLSA8PC1cRU9GCisJIE0gc3ViCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIGFkZGVkIGZpbGUgaW4gc3VibW9kdWxlJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkICYmIGVjaG8gPmZvbyAmJiBnaXQgYWRkIGZvbykgJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwlncmVwICJtb2RpZmllZDogICBzdWIiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBhZGRlZCBmaWxlIGluIHN1Ym1vZHVsZSAocG9yY2VsYWluKScgJworCShjZCBzdWIgJiYgZ2l0IHJlc2V0IC0taGFyZCAmJiBlY2hvID5mb28gJiYgZ2l0IGFkZCBmb28pICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+b3V0cHV0ICYmCisJZGlmZiBvdXRwdXQgLSA8PC1cRU9GCisJIE0gc3ViCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIHVudHJhY2tlZCBmaWxlIGluIHN1Ym1vZHVsZScgJworCShjZCBzdWIgJiYgZ2l0IHJlc2V0IC0taGFyZCkgJiYKKwllY2hvICJjb250ZW50IiA+c3ViL25ldy1maWxlICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJZ3JlcCAibW9kaWZpZWQ6ICAgc3ViIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggdW50cmFja2VkIGZpbGUgaW4gc3VibW9kdWxlIChwb3JjZWxhaW4pJyAnCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+b3V0cHV0ICYmCisJZGlmZiBvdXRwdXQgLSA8PC1cRU9GCisJIE0gc3ViCisJRU9GCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIHN1Ym1vZHVsZSBjb250ZW50cycgJwogCXJtIC1yZiBzdWIvKiBzdWIvLmdpdAogJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgY2xlYW4gKGVtcHR5IHN1Ym1vZHVsZSBkaXIpJyAnCi0JZ2l0IHN0YXR1cyB8Ci0JZ3JlcCAibm90aGluZyB0byBjb21taXQiCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJZ3JlcCAibm90aGluZyB0byBjb21taXQiIG91dHB1dAogJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLWEgY2xlYW4gKGVtcHR5IHN1Ym1vZHVsZSBkaXIpJyAnCi0JZ2l0IHN0YXR1cyAtYSB8Ci0JZ3JlcCAibm90aGluZyB0byBjb21taXQiCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLWRyeS1ydW4gLWEgPm91dHB1dCAmJgorCWdyZXAgIm5vdGhpbmcgdG8gY29tbWl0IiBvdXRwdXQKICcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTA4LXN0YXR1cy5zaCBiL3QvdDc1MDgtc3RhdHVzLnNoCmluZGV4IDkzZjg3NWYuLjU1NmQwZmEgMTAwNzU1Ci0tLSBhL3QvdDc1MDgtc3RhdHVzLnNoCisrKyBiL3QvdDc1MDgtc3RhdHVzLnNoCkBAIC04LDI2ICs4LDI2IEBACiAuIC4vdGVzdC1saWIuc2gKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKLQk6ID4gdHJhY2tlZCAmJgotCTogPiBtb2RpZmllZCAmJgorCTogPnRyYWNrZWQgJiYKKwk6ID5tb2RpZmllZCAmJgogCW1rZGlyIGRpcjEgJiYKLQk6ID4gZGlyMS90cmFja2VkICYmCi0JOiA+IGRpcjEvbW9kaWZpZWQgJiYKKwk6ID5kaXIxL3RyYWNrZWQgJiYKKwk6ID5kaXIxL21vZGlmaWVkICYmCiAJbWtkaXIgZGlyMiAmJgotCTogPiBkaXIxL3RyYWNrZWQgJiYKLQk6ID4gZGlyMS9tb2RpZmllZCAmJgorCTogPmRpcjEvdHJhY2tlZCAmJgorCTogPmRpcjEvbW9kaWZpZWQgJiYKIAlnaXQgYWRkIC4gJiYKIAogCWdpdCBzdGF0dXMgPm91dHB1dCAmJgogCiAJdGVzdF90aWNrICYmCiAJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCi0JOiA+IHVudHJhY2tlZCAmJgotCTogPiBkaXIxL3VudHJhY2tlZCAmJgotCTogPiBkaXIyL3VudHJhY2tlZCAmJgotCWVjaG8gMSA+IGRpcjEvbW9kaWZpZWQgJiYKLQllY2hvIDIgPiBkaXIyL21vZGlmaWVkICYmCi0JZWNobyAzID4gZGlyMi9hZGRlZCAmJgorCTogPnVudHJhY2tlZCAmJgorCTogPmRpcjEvdW50cmFja2VkICYmCisJOiA+ZGlyMi91bnRyYWNrZWQgJiYKKwllY2hvIDEgPmRpcjEvbW9kaWZpZWQgJiYKKwllY2hvIDIgPmRpcjIvbW9kaWZpZWQgJiYKKwllY2hvIDMgPmRpcjIvYWRkZWQgJiYKIAlnaXQgYWRkIGRpcjIvYWRkZWQKICcKIApAQCAtMzcsNyArMzcsNyBAQAogCiAnCiAKLWNhdCA+IGV4cGVjdCA8PCBcRU9GCitjYXQgPmV4cGVjdCA8PFxFT0YKICMgT24gYnJhbmNoIG1hc3RlcgogIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKICMgICAodXNlICJnaXQgcmVzZXQgSEVBRCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCkBAIC02Myw3ICs2MywyNSBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgKDIpJyAnCiAKLQlnaXQgc3RhdHVzID4gb3V0cHV0ICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorIE0gZGlyMS9tb2RpZmllZAorQSAgZGlyMi9hZGRlZAorPz8gZGlyMS91bnRyYWNrZWQKKz8/IGRpcjIvbW9kaWZpZWQKKz8/IGRpcjIvdW50cmFja2VkCis/PyBleHBlY3QKKz8/IG91dHB1dAorPz8gdW50cmFja2VkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zICgyKScgJworCisJZ2l0IHN0YXR1cyAtcyA+b3V0cHV0ICYmCiAJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAogCiAnCkBAIC04NSw4ICsxMDMsOCBAQAogRU9GCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXVubycgJwogCW1rZGlyIGRpcjMgJiYKLQk6ID4gZGlyMy91bnRyYWNrZWQxICYmCi0JOiA+IGRpcjMvdW50cmFja2VkMiAmJgorCTogPmRpcjMvdW50cmFja2VkMSAmJgorCTogPmRpcjMvdW50cmFja2VkMiAmJgogCWdpdCBzdGF0dXMgLXVubyA+b3V0cHV0ICYmCiAJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAogJwpAQCAtOTcsNiArMTE1LDIyIEBACiAJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAogJwogCitjYXQgPmV4cGVjdCA8PCBFT0YKKyBNIGRpcjEvbW9kaWZpZWQKK0EgIGRpcjIvYWRkZWQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zIC11bm8nICcKKwlnaXQgY29uZmlnIC0tdW5zZXQgc3RhdHVzLnNob3d1bnRyYWNrZWRmaWxlcworCWdpdCBzdGF0dXMgLXMgLXVubyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgKHN0YXR1cy5zaG93VW50cmFja2VkRmlsZXMgbm8pJyAnCisJZ2l0IGNvbmZpZyBzdGF0dXMuc2hvd3VudHJhY2tlZGZpbGVzIG5vCisJZ2l0IHN0YXR1cyAtcyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCiBjYXQgPmV4cGVjdCA8PEVPRgogIyBPbiBicmFuY2ggbWFzdGVyCiAjIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgpAQCAtMTMzLDYgKzE2NywyOSBAQAogJwogCiBjYXQgPmV4cGVjdCA8PEVPRgorIE0gZGlyMS9tb2RpZmllZAorQSAgZGlyMi9hZGRlZAorPz8gZGlyMS91bnRyYWNrZWQKKz8/IGRpcjIvbW9kaWZpZWQKKz8/IGRpcjIvdW50cmFja2VkCis/PyBkaXIzLworPz8gZXhwZWN0Cis/PyBvdXRwdXQKKz8/IHVudHJhY2tlZAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgLXVub3JtYWwnICcKKwlnaXQgY29uZmlnIC0tdW5zZXQgc3RhdHVzLnNob3d1bnRyYWNrZWRmaWxlcworCWdpdCBzdGF0dXMgLXMgLXVub3JtYWwgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zIChzdGF0dXMuc2hvd1VudHJhY2tlZEZpbGVzIG5vcm1hbCknICcKKwlnaXQgY29uZmlnIHN0YXR1cy5zaG93dW50cmFja2VkZmlsZXMgbm9ybWFsCisJZ2l0IHN0YXR1cyAtcyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPmV4cGVjdCA8PEVPRgogIyBPbiBicmFuY2ggbWFzdGVyCiAjIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgogIyAgICh1c2UgImdpdCByZXNldCBIRUFEIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKQEAgLTE2OSw3ICsyMjYsMzAgQEAKIAl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CiAnCiAKLWNhdCA+IGV4cGVjdCA8PCBcRU9GCitjYXQgPmV4cGVjdCA8PEVPRgorIE0gZGlyMS9tb2RpZmllZAorQSAgZGlyMi9hZGRlZAorPz8gZGlyMS91bnRyYWNrZWQKKz8/IGRpcjIvbW9kaWZpZWQKKz8/IGRpcjIvdW50cmFja2VkCis/PyBleHBlY3QKKz8/IG91dHB1dAorPz8gdW50cmFja2VkCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtcyAtdWFsbCcgJworCWdpdCBjb25maWcgLS11bnNldCBzdGF0dXMuc2hvd3VudHJhY2tlZGZpbGVzCisJZ2l0IHN0YXR1cyAtcyAtdWFsbCA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zIChzdGF0dXMuc2hvd1VudHJhY2tlZEZpbGVzIGFsbCknICcKKwlnaXQgY29uZmlnIHN0YXR1cy5zaG93dW50cmFja2VkZmlsZXMgYWxsCisJZ2l0IHN0YXR1cyAtcyA+b3V0cHV0ICYmCisJcm0gLXJmIGRpcjMgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgc3RhdHVzLnNob3d1bnRyYWNrZWRmaWxlcyAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCiAjIE9uIGJyYW5jaCBtYXN0ZXIKICMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CiAjICAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQpAQCAtMTk1LDEyICsyNzUsMTU2IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIHJlbGF0aXZlIHBhdGhzJyAnCiAKLQkoY2QgZGlyMSAmJiBnaXQgc3RhdHVzKSA+IG91dHB1dCAmJgorCShjZCBkaXIxICYmIGdpdCBzdGF0dXMpID5vdXRwdXQgJiYKIAl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CiAKICcKIAotY2F0ID4gZXhwZWN0IDw8IFxFT0YKK2NhdCA+ZXhwZWN0IDw8XEVPRgorIE0gbW9kaWZpZWQKK0EgIC4uL2RpcjIvYWRkZWQKKz8/IHVudHJhY2tlZAorPz8gLi4vZGlyMi9tb2RpZmllZAorPz8gLi4vZGlyMi91bnRyYWNrZWQKKz8/IC4uL2V4cGVjdAorPz8gLi4vb3V0cHV0Cis/PyAuLi91bnRyYWNrZWQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zIHdpdGggcmVsYXRpdmUgcGF0aHMnICcKKworCShjZCBkaXIxICYmIGdpdCBzdGF0dXMgLXMpID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCisgTSBkaXIxL21vZGlmaWVkCitBICBkaXIyL2FkZGVkCis/PyBkaXIxL3VudHJhY2tlZAorPz8gZGlyMi9tb2RpZmllZAorPz8gZGlyMi91bnRyYWNrZWQKKz8/IGV4cGVjdAorPz8gb3V0cHV0Cis/PyB1bnRyYWNrZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLS1wb3JjZWxhaW4gaWdub3JlcyByZWxhdGl2ZSBwYXRocyBzZXR0aW5nJyAnCisKKwkoY2QgZGlyMSAmJiBnaXQgc3RhdHVzIC0tcG9yY2VsYWluKSA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHVuaXF1ZSBjb2xvcnMnICcKKworCWdpdCBjb25maWcgc3RhdHVzLmNvbG9yLnVudHJhY2tlZCBibHVlCisKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCisjIE9uIGJyYW5jaCBtYXN0ZXIKKyMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisjICAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorIworIwk8R1JFRU4+bmV3IGZpbGU6ICAgZGlyMi9hZGRlZDxSRVNFVD4KKyMKKyMgQ2hhbmdlZCBidXQgbm90IHVwZGF0ZWQ6CisjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorIyAgICh1c2UgImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKyMKKyMJPFJFRD5tb2RpZmllZDogICBkaXIxL21vZGlmaWVkPFJFU0VUPgorIworIyBVbnRyYWNrZWQgZmlsZXM6CisjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyMKKyMJPEJMVUU+ZGlyMS91bnRyYWNrZWQ8UkVTRVQ+CisjCTxCTFVFPmRpcjIvbW9kaWZpZWQ8UkVTRVQ+CisjCTxCTFVFPmRpcjIvdW50cmFja2VkPFJFU0VUPgorIwk8QkxVRT5leHBlY3Q8UkVTRVQ+CisjCTxCTFVFPm91dHB1dDxSRVNFVD4KKyMJPEJMVUU+dW50cmFja2VkPFJFU0VUPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIGNvbG9yLnVpJyAnCisKKwlnaXQgY29uZmlnIGNvbG9yLnVpIGFsd2F5cyAmJgorCWdpdCBzdGF0dXMgfCB0ZXN0X2RlY29kZV9jb2xvciA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIGNvbG9yLnN0YXR1cycgJworCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGNvbG9yLnVpICYmCisJZ2l0IGNvbmZpZyBjb2xvci5zdGF0dXMgYWx3YXlzICYmCisJZ2l0IHN0YXR1cyB8IHRlc3RfZGVjb2RlX2NvbG9yID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCisgPFJFRD5NPFJFU0VUPiBkaXIxL21vZGlmaWVkCis8R1JFRU4+QTxSRVNFVD4gIGRpcjIvYWRkZWQKKzxCTFVFPj8/PFJFU0VUPiBkaXIxL3VudHJhY2tlZAorPEJMVUU+Pz88UkVTRVQ+IGRpcjIvbW9kaWZpZWQKKzxCTFVFPj8/PFJFU0VUPiBkaXIyL3VudHJhY2tlZAorPEJMVUU+Pz88UkVTRVQ+IGV4cGVjdAorPEJMVUU+Pz88UkVTRVQ+IG91dHB1dAorPEJMVUU+Pz88UkVTRVQ+IHVudHJhY2tlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtcyB3aXRoIGNvbG9yLnVpJyAnCisKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29sb3Iuc3RhdHVzICYmCisJZ2l0IGNvbmZpZyBjb2xvci51aSBhbHdheXMgJiYKKwlnaXQgc3RhdHVzIC1zIHwgdGVzdF9kZWNvZGVfY29sb3IgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgd2l0aCBjb2xvci5zdGF0dXMnICcKKworCWdpdCBjb25maWcgLS11bnNldCBjb2xvci51aSAmJgorCWdpdCBjb25maWcgY29sb3Iuc3RhdHVzIGFsd2F5cyAmJgorCWdpdCBzdGF0dXMgLXMgfCB0ZXN0X2RlY29kZV9jb2xvciA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorIE0gZGlyMS9tb2RpZmllZAorQSAgZGlyMi9hZGRlZAorPz8gZGlyMS91bnRyYWNrZWQKKz8/IGRpcjIvbW9kaWZpZWQKKz8/IGRpcjIvdW50cmFja2VkCis/PyBleHBlY3QKKz8/IG91dHB1dAorPz8gdW50cmFja2VkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC0tcG9yY2VsYWluIGlnbm9yZXMgY29sb3IudWknICcKKworCWdpdCBjb25maWcgLS11bnNldCBjb2xvci5zdGF0dXMgJiYKKwlnaXQgY29uZmlnIGNvbG9yLnVpIGFsd2F5cyAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gfCB0ZXN0X2RlY29kZV9jb2xvciA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtLXBvcmNlbGFpbiBpZ25vcmVzIGNvbG9yLnN0YXR1cycgJworCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGNvbG9yLnVpICYmCisJZ2l0IGNvbmZpZyBjb2xvci5zdGF0dXMgYWx3YXlzICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiB8IHRlc3RfZGVjb2RlX2NvbG9yID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisKKycKKworIyByZWNvdmVyIHVuY29uZGl0aW9uYWxseSBmcm9tIGNvbG9yIHRlc3RzCitnaXQgY29uZmlnIC0tdW5zZXQgY29sb3Iuc3RhdHVzCitnaXQgY29uZmlnIC0tdW5zZXQgY29sb3IudWkKKworY2F0ID5leHBlY3QgPDxcRU9GCiAjIE9uIGJyYW5jaCBtYXN0ZXIKICMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CiAjICAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQpAQCAtMjI0LDEwICs0NDgsMjkgQEAKICMJdW50cmFja2VkCiBFT0YKIAorCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aG91dCByZWxhdGl2ZSBwYXRocycgJwogCiAJZ2l0IGNvbmZpZyBzdGF0dXMucmVsYXRpdmVQYXRocyBmYWxzZQotCShjZCBkaXIxICYmIGdpdCBzdGF0dXMpID4gb3V0cHV0ICYmCisJKGNkIGRpcjEgJiYgZ2l0IHN0YXR1cykgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKworJworCitjYXQgPmV4cGVjdCA8PFxFT0YKKyBNIGRpcjEvbW9kaWZpZWQKK0EgIGRpcjIvYWRkZWQKKz8/IGRpcjEvdW50cmFja2VkCis/PyBkaXIyL21vZGlmaWVkCis/PyBkaXIyL3VudHJhY2tlZAorPz8gZXhwZWN0Cis/PyBvdXRwdXQKKz8/IHVudHJhY2tlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtcyB3aXRob3V0IHJlbGF0aXZlIHBhdGhzJyAnCisKKwkoY2QgZGlyMSAmJiBnaXQgc3RhdHVzIC1zKSA+b3V0cHV0ICYmCiAJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAogCiAnCkBAIC0yNDgsOCArNDkxLDggQEAKICMJb3V0cHV0CiAjCXVudHJhY2tlZAogRU9GCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgb2YgcGFydGlhbCBjb21taXQgZXhjbHVkaW5nIG5ldyBmaWxlIGluIGluZGV4JyAnCi0JZ2l0IHN0YXR1cyBkaXIxL21vZGlmaWVkID5vdXRwdXQgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RyeS1ydW4gb2YgcGFydGlhbCBjb21taXQgZXhjbHVkaW5nIG5ldyBmaWxlIGluIGluZGV4JyAnCisJZ2l0IGNvbW1pdCAtLWRyeS1ydW4gZGlyMS9tb2RpZmllZCA+b3V0cHV0ICYmCiAJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAogJwogCkBAIC0yOTgsNiArNTQxLDI4IEBACiAJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAogJwogCitjYXQgPmV4cGVjdCA8PEVPRgorIE0gZGlyMS9tb2RpZmllZAorQSAgZGlyMi9hZGRlZAorQSAgc20KKz8/IGRpcjEvdW50cmFja2VkCis/PyBkaXIyL21vZGlmaWVkCis/PyBkaXIyL3VudHJhY2tlZAorPz8gZXhwZWN0Cis/PyBvdXRwdXQKKz8/IHVudHJhY2tlZAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgc3VibW9kdWxlIHN1bW1hcnkgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCcgJworCWdpdCBzdGF0dXMgLXMgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworIyB3ZSBleHBlY3QgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIHRlc3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtcyAtLXVudHJhY2tlZC1maWxlcz1hbGwgZG9lcyBub3Qgc2hvdyBzdWJtb2R1bGUnICcKKwlnaXQgc3RhdHVzIC1zIC0tdW50cmFja2VkLWZpbGVzPWFsbCA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCiBoZWFkPSQoY2Qgc20gJiYgZ2l0IHJldi1wYXJzZSAtLXNob3J0PTcgLS12ZXJpZnkgSEVBRCkKIAogY2F0ID5leHBlY3QgPDxFT0YKQEAgLTMxNCw3ICs1NzksNyBAQAogIwogIwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCiAjCi0jIE1vZGlmaWVkIHN1Ym1vZHVsZXM6CisjIFN1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKICMKICMgKiBzbSAwMDAwMDAwLi4uJGhlYWQgKDEpOgogIyAgID4gQWRkIGZvbwpAQCAtMzM1LDYgKzYwMCwyMSBAQAogCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKICcKIAorY2F0ID5leHBlY3QgPDxFT0YKKyBNIGRpcjEvbW9kaWZpZWQKK0EgIGRpcjIvYWRkZWQKK0EgIHNtCis/PyBkaXIxL3VudHJhY2tlZAorPz8gZGlyMi9tb2RpZmllZAorPz8gZGlyMi91bnRyYWNrZWQKKz8/IGV4cGVjdAorPz8gb3V0cHV0Cis/PyB1bnRyYWNrZWQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zIHN1Ym1vZHVsZSBzdW1tYXJ5JyAnCisJZ2l0IHN0YXR1cyAtcyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJwogCiBjYXQgPmV4cGVjdCA8PEVPRgogIyBPbiBicmFuY2ggbWFzdGVyCkBAIC0zNTgsNyArNjM4LDIzIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgc3VibW9kdWxlIHN1bW1hcnkgKGNsZWFuIHN1Ym1vZHVsZSknICcKIAlnaXQgY29tbWl0IC1tICJjb21taXQgc3VibW9kdWxlIiAmJgogCWdpdCBjb25maWcgc3RhdHVzLnN1Ym1vZHVsZXN1bW1hcnkgMTAgJiYKLQl0ZXN0X211c3RfZmFpbCBnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tZHJ5LXJ1biA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dCAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKyBNIGRpcjEvbW9kaWZpZWQKKz8/IGRpcjEvdW50cmFja2VkCis/PyBkaXIyL21vZGlmaWVkCis/PyBkaXIyL3VudHJhY2tlZAorPz8gZXhwZWN0Cis/PyBvdXRwdXQKKz8/IHVudHJhY2tlZAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgc3VibW9kdWxlIHN1bW1hcnkgKGNsZWFuIHN1Ym1vZHVsZSknICcKKwlnaXQgc3RhdHVzIC1zID5vdXRwdXQgJiYKIAl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CiAnCiAKQEAgLTM3Niw3ICs2NzIsNyBAQAogIwogIwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCiAjCi0jIE1vZGlmaWVkIHN1Ym1vZHVsZXM6CisjIFN1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKICMKICMgKiBzbSAwMDAwMDAwLi4uJGhlYWQgKDEpOgogIyAgID4gQWRkIGZvbwpAQCAtMzkxLDkgKzY4Nyw5IEBACiAjCW91dHB1dAogIwl1bnRyYWNrZWQKIEVPRgotdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHN1Ym1vZHVsZSBzdW1tYXJ5ICgtLWFtZW5kKScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tZHJ5LXJ1biBzdWJtb2R1bGUgc3VtbWFyeSAoLS1hbWVuZCknICcKIAlnaXQgY29uZmlnIHN0YXR1cy5zdWJtb2R1bGVzdW1tYXJ5IDEwICYmCi0JZ2l0IHN0YXR1cyAtLWFtZW5kID5vdXRwdXQgJiYKKwlnaXQgY29tbWl0IC0tZHJ5LXJ1biAtLWFtZW5kID5vdXRwdXQgJiYKIAl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CiAnCiAKZGlmZiAtLWdpdCBhL3QvdDc1MDktY29tbWl0LnNoIGIvdC90NzUwOS1jb21taXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDUyYzA2MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MDktY29tbWl0LnNoCkBAIC0wLDAgKzEsMTE0IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEVyaWNrIE1hdHRvcworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY29tbWl0IC0tcmVzZXQtYXV0aG9yJworCisuIC4vdGVzdC1saWIuc2gKKworYXV0aG9yX2hlYWRlciAoKSB7CisJZ2l0IGNhdC1maWxlIGNvbW1pdCAiJDEiIHwKKwlzZWQgLW4gLWUgJy9eJC9xJyAtZSAnL15hdXRob3IgL3AnCit9CisKK21lc3NhZ2VfYm9keSAoKSB7CisJZ2l0IGNhdC1maWxlIGNvbW1pdCAiJDEiIHwKKwlzZWQgLWUgJzEsL14kL2QnCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1DIG9wdGlvbiBjb3BpZXMgYXV0aG9yc2hpcCBhbmQgbWVzc2FnZScgJworCWVjaG8gIkluaXRpYWwiID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIkluaXRpYWwgQ29tbWl0IiAtLWF1dGhvciBGcmlnYXRlXCBcPGZseWluZ0BvdmVyLndvcmxkXD4gJiYKKwlnaXQgdGFnIEluaXRpYWwgJiYKKwllY2hvICJUZXN0IDEiID4+Zm9vICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtQyBJbml0aWFsICYmCisJYXV0aG9yX2hlYWRlciBJbml0aWFsID5leHBlY3QgJiYKKwlhdXRob3JfaGVhZGVyIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCW1lc3NhZ2VfYm9keSBJbml0aWFsID5leHBlY3QgJiYKKwltZXNzYWdlX2JvZHkgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctQyBvcHRpb24gY29waWVzIG9ubHkgdGhlIG1lc3NhZ2Ugd2l0aCAtLXJlc2V0LWF1dGhvcicgJworCWVjaG8gIlRlc3QgMiIgPj5mb28gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1DIEluaXRpYWwgLS1yZXNldC1hdXRob3IgJiYKKwllY2hvICJhdXRob3IgJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+ICRHSVRfQVVUSE9SX0RBVEUiID5leHBlY3QgJiYKKwlhdXRob3JfaGVhZGVyIEhFQUQgPmFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCW1lc3NhZ2VfYm9keSBJbml0aWFsID5leHBlY3QgJiYKKwltZXNzYWdlX2JvZHkgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctYyBvcHRpb24gY29waWVzIGF1dGhvcnNoaXAgYW5kIG1lc3NhZ2UnICcKKwllY2hvICJUZXN0IDMiID4+Zm9vICYmCisJdGVzdF90aWNrICYmCisJRURJVE9SPTogVklTVUFMPTogZ2l0IGNvbW1pdCAtYSAtYyBJbml0aWFsICYmCisJYXV0aG9yX2hlYWRlciBJbml0aWFsID5leHBlY3QgJiYKKwlhdXRob3JfaGVhZGVyIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLWMgb3B0aW9uIGNvcGllcyBvbmx5IHRoZSBtZXNzYWdlIHdpdGggLS1yZXNldC1hdXRob3InICcKKwllY2hvICJUZXN0IDQiID4+Zm9vICYmCisJdGVzdF90aWNrICYmCisJRURJVE9SPTogVklTVUFMPTogZ2l0IGNvbW1pdCAtYSAtYyBJbml0aWFsIC0tcmVzZXQtYXV0aG9yICYmCisJZWNobyAiYXV0aG9yICRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPiAkR0lUX0FVVEhPUl9EQVRFIiA+ZXhwZWN0ICYmCisJYXV0aG9yX2hlYWRlciBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwltZXNzYWdlX2JvZHkgSW5pdGlhbCA+ZXhwZWN0ICYmCisJbWVzc2FnZV9ib2R5IEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hbWVuZCBvcHRpb24gY29waWVzIGF1dGhvcnNoaXAnICcKKwlnaXQgY2hlY2tvdXQgSW5pdGlhbCAmJgorCWVjaG8gIlRlc3QgNSIgPj5mb28gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC0tYW1lbmQgLW0gImFtZW5kIHRlc3QiICYmCisJYXV0aG9yX2hlYWRlciBJbml0aWFsID5leHBlY3QgJiYKKwlhdXRob3JfaGVhZGVyIEhFQUQgPmFjdHVhbCAmJgorCisJZWNobyAiYW1lbmQgdGVzdCIgPmV4cGVjdCAmJgorCW1lc3NhZ2VfYm9keSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmVzZXQtYXV0aG9yIG1ha2VzIHRoZSBjb21taXQgb3VycyBldmVuIHdpdGggLS1hbWVuZCBvcHRpb24nICcKKwlnaXQgY2hlY2tvdXQgSW5pdGlhbCAmJgorCWVjaG8gIlRlc3QgNiIgPj5mb28gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC0tcmVzZXQtYXV0aG9yIC1tICJDaGFuZ2VkIGFnYWluIiAtLWFtZW5kICYmCisJZWNobyAiYXV0aG9yICRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPiAkR0lUX0FVVEhPUl9EQVRFIiA+ZXhwZWN0ICYmCisJYXV0aG9yX2hlYWRlciBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvICJDaGFuZ2VkIGFnYWluIiA+ZXhwZWN0ICYmCisJbWVzc2FnZV9ib2R5IEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZXNldC1hdXRob3IgYW5kIC0tYXV0aG9yIGFyZSBtdXR1YWxseSBleGNsdXNpdmUnICcKKwlnaXQgY2hlY2tvdXQgSW5pdGlhbCAmJgorCWVjaG8gIlRlc3QgNyIgPj5mb28gJiYKKwl0ZXN0X3RpY2sgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1hIC0tcmVzZXQtYXV0aG9yIC0tYXV0aG9yPSJYeXp6eSA8ZnJvdHpAbml0Zm9sLnh6PiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZXNldC1hdXRob3Igc2hvdWxkIGJlIHJlamVjdGVkIHdpdGhvdXQgLWMvLUMvLS1hbWVuZCcgJworCWdpdCBjaGVja291dCBJbml0aWFsICYmCisJZWNobyAiVGVzdCA3IiA+PmZvbyAmJgorCXRlc3RfdGljayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLWEgLS1yZXNldC1hdXRob3IgLW0gZG9uZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc2MDAtbWVyZ2Uuc2ggYi90L3Q3NjAwLW1lcmdlLnNoCmluZGV4IGU1YjIxMGIuLjU3ZjZkMmIgMTAwNzU1Ci0tLSBhL3QvdDc2MDAtbWVyZ2Uuc2gKKysrIGIvdC90NzYwMC1tZXJnZS5zaApAQCAtMjQzLDYgKzI0MywxNiBAQAogCiB0ZXN0X2RlYnVnICdnaXRrIC0tYWxsJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMCB3aXRoIGMxIHdpdGggLS1mZi1vbmx5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWdpdCBtZXJnZSAtLWZmLW9ubHkgYzEgJiYKKwlnaXQgbWVyZ2UgLS1mZi1vbmx5IEhFQUQgYzAgYzEgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMSAmJgorCXZlcmlmeV9oZWFkICIkYzEiCisnCisKK3Rlc3RfZGVidWcgJ2dpdGsgLS1hbGwnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzInICcKIAlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCiAJdGVzdF90aWNrICYmCkBAIC0yNjMsNiArMjczLDE0IEBACiAKIHRlc3RfZGVidWcgJ2dpdGsgLS1hbGwnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxpbmcgbWVyZ2VzIHdpdGggLS1mZi1vbmx5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCXRlc3RfdGljayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLWZmLW9ubHkgYzIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1mZi1vbmx5IGMzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tZmYtb25seSBjMiBjMworJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMCB3aXRoIGMxIChuby1jb21taXQpJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgogCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCBjMSAmJgpAQCAtMzAzLDYgKzMyMSwxNyBAQAogCiB0ZXN0X2RlYnVnICdnaXRrIC0tYWxsJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMCB3aXRoIGMxIChzcXVhc2gsIGZmLW9ubHkpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWdpdCBtZXJnZSAtLXNxdWFzaCAtLWZmLW9ubHkgYzEgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMSAmJgorCXZlcmlmeV9oZWFkICRjMCAmJgorCXZlcmlmeV9ub19tZXJnZWhlYWQgJiYKKwl2ZXJpZnlfZGlmZiBzcXVhc2guMSAuZ2l0L1NRVUFTSF9NU0cgIltPT1BTXSBiYWQgc3F1YXNoIG1lc3NhZ2UiCisnCisKK3Rlc3RfZGVidWcgJ2dpdGsgLS1hbGwnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzIgKHNxdWFzaCknICcKIAlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCiAJZ2l0IG1lcmdlIC0tc3F1YXNoIGMyICYmCkBAIC0zMTQsNiArMzQzLDEzIEBACiAKIHRlc3RfZGVidWcgJ2dpdGsgLS1hbGwnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vuc3VjY2VzZnVsIG1lcmdlIG9mIGMxIHdpdGggYzIgKHNxdWFzaCwgZmYtb25seSknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tc3F1YXNoIC0tZmYtb25seSBjMgorJworCit0ZXN0X2RlYnVnICdnaXRrIC0tYWxsJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMSB3aXRoIGMyIGFuZCBjMyAoc3F1YXNoKScgJwogCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKIAlnaXQgbWVyZ2UgLS1zcXVhc2ggYzIgYzMgJiYKQEAgLTQzMiw2ICs0NjgsMTEgQEAKIAl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1mZiAtLXNxdWFzaCBjMQogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21iaW5pbmcgLS1mZi1vbmx5IGFuZCAtLW5vLWZmIGlzIHJlZnVzZWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1mZi1vbmx5IC0tbm8tZmYgYzEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1mZiAtLWZmLW9ubHkgYzEKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzAgd2l0aCBjMSAoZmYgb3ZlcnJpZGVzIG5vLWZmKScgJwogCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKIAlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2VvcHRpb25zICItLW5vLWZmIiAmJgpkaWZmIC0tZ2l0IGEvdC90NzYwMi1tZXJnZS1vY3RvcHVzLW1hbnkuc2ggYi90L3Q3NjAyLW1lcmdlLW9jdG9wdXMtbWFueS5zaAppbmRleCAwMWU1NDE1Li4yNzQ2MTY5IDEwMDc1NQotLS0gYS90L3Q3NjAyLW1lcmdlLW9jdG9wdXMtbWFueS5zaAorKysgYi90L3Q3NjAyLW1lcmdlLW9jdG9wdXMtbWFueS5zaApAQCAtNDksNCArNDksNTUgQEAKIAlkb25lCiAnCiAKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCitUcnlpbmcgc2ltcGxlIG1lcmdlIHdpdGggYzIKK1RyeWluZyBzaW1wbGUgbWVyZ2Ugd2l0aCBjMworVHJ5aW5nIHNpbXBsZSBtZXJnZSB3aXRoIGM0CitNZXJnZSBtYWRlIGJ5IG9jdG9wdXMuCisgYzIuYyB8ICAgIDEgKworIGMzLmMgfCAgICAxICsKKyBjNC5jIHwgICAgMSArCisgMyBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGMyLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgYzMuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBjNC5jCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugb3V0cHV0IHVzZXMgcHJldHR5IG5hbWVzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBtZXJnZSBjMiBjMyBjNCA+YWN0dWFsICYmCisJdGVzdF9jbXAgYWN0dWFsIGV4cGVjdGVkCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCitBbHJlYWR5IHVwLXRvLWRhdGUgd2l0aCBjNAorVHJ5aW5nIHNpbXBsZSBtZXJnZSB3aXRoIGM1CitNZXJnZSBtYWRlIGJ5IG9jdG9wdXMuCisgYzUuYyB8ICAgIDEgKworIDEgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBjNS5jCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgdXAtdG8tZGF0ZSBvdXRwdXQgdXNlcyBwcmV0dHkgbmFtZXMnICcKKwlnaXQgbWVyZ2UgYzQgYzUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGFjdHVhbCBleHBlY3RlZAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorRmFzdC1mb3J3YXJkaW5nIHRvOiBjMQorVHJ5aW5nIHNpbXBsZSBtZXJnZSB3aXRoIGMyCitNZXJnZSBtYWRlIGJ5IG9jdG9wdXMuCisgYzEuYyB8ICAgIDEgKworIGMyLmMgfCAgICAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgYzEuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBjMi5jCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgZmFzdC1mb3J3YXJkIG91dHB1dCB1c2VzIHByZXR0eSBuYW1lcycgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwlnaXQgbWVyZ2UgYzEgYzIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGFjdHVhbCBleHBlY3RlZAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc2MDQtbWVyZ2UtY3VzdG9tLW1lc3NhZ2Uuc2ggYi90L3Q3NjA0LW1lcmdlLWN1c3RvbS1tZXNzYWdlLnNoCmluZGV4IGRlOTc3YzUuLjI2OWNmZGYgMTAwNzU1Ci0tLSBhL3QvdDc2MDQtbWVyZ2UtY3VzdG9tLW1lc3NhZ2Uuc2gKKysrIGIvdC90NzYwNC1tZXJnZS1jdXN0b20tbWVzc2FnZS5zaApAQCAtMjIsMTUgKzIyLDEyIEBACiAJZ2l0IHRhZyBjMgogJwogCi1jYXQgPmV4cGVjdGVkIDw8XEVPRgotY3VzdG9tIG1lc3NhZ2UKIAotTWVyZ2UgY29tbWl0ICdjMicKLUVPRgogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzIgd2l0aCBhIGN1c3RvbSBtZXNzYWdlJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWVjaG8gPmV4cGVjdGVkICJjdXN0b20gbWVzc2FnZSIgJiYKIAlnaXQgbWVyZ2UgLW0gImN1c3RvbSBtZXNzYWdlIiBjMiAmJgotCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiMSwvXiQvZCIgPiBhY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIjEsL14kL2QiID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIApkaWZmIC0tZ2l0IGEvdC90NzYwOC1tZXJnZS1tZXNzYWdlcy5zaCBiL3QvdDc2MDgtbWVyZ2UtbWVzc2FnZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjhkNTY3OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc2MDgtbWVyZ2UtbWVzc2FnZXMuc2gKQEAgLTAsMCArMSw2MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgYXV0by1nZW5lcmF0ZWQgbWVyZ2UgbWVzc2FnZXMnCisuIC4vdGVzdC1saWIuc2gKKworY2hlY2tfb25lbGluZSgpIHsKKwllY2hvICIkMSIgfCBzZWQgInMvUS8nL2ciID5leHBlY3QgJiYKKwlnaXQgbG9nIC0xIC0tcHJldHR5PXRmb3JtYXQ6JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgbG9jYWwgYnJhbmNoJyAnCisJdGVzdF9jb21taXQgbWFzdGVyLTEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbG9jYWwtYnJhbmNoICYmCisJdGVzdF9jb21taXQgYnJhbmNoLTEgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgbWFzdGVyLTIgJiYKKwlnaXQgbWVyZ2UgbG9jYWwtYnJhbmNoICYmCisJY2hlY2tfb25lbGluZSAiTWVyZ2UgYnJhbmNoIFFsb2NhbC1icmFuY2hRIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBvY3RvcHVzIGJyYW5jaGVzJyAnCisJZ2l0IGNoZWNrb3V0IC1iIG9jdG9wdXMtYSBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBvY3RvcHVzLTEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgb2N0b3B1cy1iIG1hc3RlciAmJgorCXRlc3RfY29tbWl0IG9jdG9wdXMtMiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2Ugb2N0b3B1cy1hIG9jdG9wdXMtYiAmJgorCWNoZWNrX29uZWxpbmUgIk1lcmdlIGJyYW5jaGVzIFFvY3RvcHVzLWFRIGFuZCBRb2N0b3B1cy1iUSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgdGFnJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHRhZy1icmFuY2ggbWFzdGVyICYmCisJdGVzdF9jb21taXQgdGFnLTEgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgbWFzdGVyLTMgJiYKKwlnaXQgbWVyZ2UgdGFnLTEgJiYKKwljaGVja19vbmVsaW5lICJNZXJnZSBjb21taXQgUXRhZy0xUSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW1iaWd1b3VzIHRhZycgJworCWdpdCBjaGVja291dCAtYiBhbWJpZ3VvdXMgbWFzdGVyICYmCisJdGVzdF9jb21taXQgYW1iaWd1b3VzICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29tbWl0IG1hc3Rlci00ICYmCisJZ2l0IG1lcmdlIGFtYmlndW91cyAmJgorCWNoZWNrX29uZWxpbmUgIk1lcmdlIGNvbW1pdCBRYW1iaWd1b3VzUSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIGJyYW5jaCcgJworCWdpdCBjaGVja291dCAtYiByZW1vdGUgbWFzdGVyICYmCisJdGVzdF9jb21taXQgcmVtb3RlLTEgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciByZW1vdGUgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgbWFzdGVyLTUgJiYKKwlnaXQgbWVyZ2Ugb3JpZ2luL21hc3RlciAmJgorCWNoZWNrX29uZWxpbmUgIk1lcmdlIHJlbW90ZSBicmFuY2ggUW9yaWdpbi9tYXN0ZXJRIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc3MDAtcmVwYWNrLnNoIGIvdC90NzcwMC1yZXBhY2suc2gKaW5kZXggODdjOWIwZS4uZjRhYTA1NCAxMDA3NTUKLS0tIGEvdC90NzcwMC1yZXBhY2suc2gKKysrIGIvdC90NzcwMC1yZXBhY2suc2gKQEAgLTE0OSw1ICsxNDksMTcgQEAKIAl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdyAkY3NoYTEKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnb2JqZWN0cyBtYWRlIHVucmVhY2hhYmxlIGJ5IGdyYWZ0cyBvbmx5IGFyZSBrZXB0JyAnCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJjb21taXQgNCIgJiYKKwlIMD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlIMT0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJSDI9JChnaXQgcmV2LXBhcnNlIEhFQUReXikgJiYKKwllY2hvICIkSDAgJEgyIiA+IC5naXQvaW5mby9ncmFmdHMgJiYKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZT1ub3cgLS1leHBpcmUtdW5yZWFjaGFibGU9bm93IC0tYWxsICYmCisJZ2l0IHJlcGFjayAtYSAtZCAmJgorCWdpdCBjYXQtZmlsZSAtdCAkSDEKKwknCisKIHRlc3RfZG9uZQogCmRpZmYgLS1naXQgYS90L3Q3ODAwLWRpZmZ0b29sLnNoIGIvdC90NzgwMC1kaWZmdG9vbC5zaAppbmRleCBlYmRjY2Y5Li4xZGU4M2VmIDEwMDc1NQotLS0gYS90L3Q3ODAwLWRpZmZ0b29sLnNoCisrKyBiL3QvdDc4MDAtZGlmZnRvb2wuc2gKQEAgLTEsNiArMSw2IEBACiAjIS9iaW4vc2gKICMKLSMgQ29weXJpZ2h0IChjKSAyMDA5IERhdmlkIEFndWlsYXIKKyMgQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwIERhdmlkIEFndWlsYXIKICMKIAogdGVzdF9kZXNjcmlwdGlvbj0nZ2l0LWRpZmZ0b29sCkBAIC0xNSwxNCArMTUsMTkgQEAKIAl0ZXN0X2RvbmUKIGZpCiAKK0xGPScKKycKKwogcmVtb3ZlX2NvbmZpZ192YXJzKCkKIHsKIAkjIFVuc2V0IGFsbCBjb25maWcgdmFyaWFibGVzIHVzZWQgYnkgZ2l0LWRpZmZ0b29sCiAJZ2l0IGNvbmZpZyAtLXVuc2V0IGRpZmYudG9vbAorCWdpdCBjb25maWcgLS11bnNldCBkaWZmLmd1aXRvb2wKIAlnaXQgY29uZmlnIC0tdW5zZXQgZGlmZnRvb2wudGVzdC10b29sLmNtZAogCWdpdCBjb25maWcgLS11bnNldCBkaWZmdG9vbC5wcm9tcHQKIAlnaXQgY29uZmlnIC0tdW5zZXQgbWVyZ2UudG9vbAogCWdpdCBjb25maWcgLS11bnNldCBtZXJnZXRvb2wudGVzdC10b29sLmNtZAorCWdpdCBjb25maWcgLS11bnNldCBtZXJnZXRvb2wucHJvbXB0CiAJcmV0dXJuIDAKIH0KIApAQCAtMzEsMTEgKzM2LDExIEBACiAJIyBSZXN0b3JlcyB0aGUgdGVzdCBkZWZhdWx0cyB1c2VkIGJ5IHNldmVyYWwgdGVzdHMKIAlyZW1vdmVfY29uZmlnX3ZhcnMKIAl1bnNldCBHSVRfRElGRl9UT09MCi0JdW5zZXQgR0lUX01FUkdFX1RPT0wKIAl1bnNldCBHSVRfRElGRlRPT0xfUFJPTVBUCiAJdW5zZXQgR0lUX0RJRkZUT09MX05PX1BST01QVAogCWdpdCBjb25maWcgZGlmZi50b29sIHRlc3QtdG9vbCAmJgogCWdpdCBjb25maWcgZGlmZnRvb2wudGVzdC10b29sLmNtZCAnY2F0ICRMT0NBTCcKKwlnaXQgY29uZmlnIGRpZmZ0b29sLmJvZ3VzLXRvb2wuY21kIGZhbHNlCiB9CiAKIHByb21wdF9naXZlbigpCkBAIC03MSwxMSArNzYsMzEgQEAKIAogIyBFbnN1cmVzIHRoYXQgZ2l0LWRpZmZ0b29sIGlnbm9yZXMgYm9ndXMgLS10b29sIHZhbHVlcwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZnRvb2wgaWdub3JlcyBiYWQgLS10b29sIHZhbHVlcycgJwotCWRpZmY9JChnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgLS10b29sPWJvZ3VzLXRvb2wgYnJhbmNoKQorCWRpZmY9JChnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgLS10b29sPWJhZC10b29sIGJyYW5jaCkKIAl0ZXN0ICIkPyIgPSAxICYmCiAJdGVzdCAiJGRpZmYiID0gIiIKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZnRvb2wgaG9ub3JzIC0tZ3VpJyAnCisJZ2l0IGNvbmZpZyBtZXJnZS50b29sIGJvZ3VzLXRvb2wgJiYKKwlnaXQgY29uZmlnIGRpZmYudG9vbCBib2d1cy10b29sICYmCisJZ2l0IGNvbmZpZyBkaWZmLmd1aXRvb2wgdGVzdC10b29sICYmCisKKwlkaWZmPSQoZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IC0tZ3VpIGJyYW5jaCkgJiYKKwl0ZXN0ICIkZGlmZiIgPSAiYnJhbmNoIiAmJgorCisJcmVzdG9yZV90ZXN0X2RlZmF1bHRzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZ0b29sIC0tZ3VpIHdvcmtzIHdpdGhvdXQgY29uZmlndXJlZCBkaWZmLmd1aXRvb2wnICcKKwlnaXQgY29uZmlnIGRpZmYudG9vbCB0ZXN0LXRvb2wgJiYKKworCWRpZmY9JChnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgLS1ndWkgYnJhbmNoKSAmJgorCXRlc3QgIiRkaWZmIiA9ICJicmFuY2giICYmCisKKwlyZXN0b3JlX3Rlc3RfZGVmYXVsdHMKKycKKwogIyBTcGVjaWZ5IHRoZSBkaWZmIHRvb2wgdXNpbmcgJEdJVF9ESUZGX1RPT0wKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9ESUZGX1RPT0wgdmFyaWFibGUnICcKIAlnaXQgY29uZmlnIC0tdW5zZXQgZGlmZi50b29sCkBAIC05NCwxNSArMTE5LDcgQEAKIAlnaXQgY29uZmlnIGRpZmYudG9vbCBib2d1cy10b29sICYmCiAJZ2l0IGNvbmZpZyBtZXJnZS50b29sIGJvZ3VzLXRvb2wgJiYKIAotCUdJVF9NRVJHRV9UT09MPXRlc3QtdG9vbCAmJgotCWV4cG9ydCBHSVRfTUVSR0VfVE9PTCAmJgotCWRpZmY9JChnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgYnJhbmNoKSAmJgotCXRlc3QgIiRkaWZmIiA9ICJicmFuY2giICYmCi0JdW5zZXQgR0lUX01FUkdFX1RPT0wgJiYKLQotCUdJVF9NRVJHRV9UT09MPWJvZ3VzLXRvb2wgJiYKIAlHSVRfRElGRl9UT09MPXRlc3QtdG9vbCAmJgotCWV4cG9ydCBHSVRfTUVSR0VfVE9PTCAmJgogCWV4cG9ydCBHSVRfRElGRl9UT09MICYmCiAKIAlkaWZmPSQoZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IGJyYW5jaCkgJiYKQEAgLTEzNiw3ICsxNTMsNyBAQAogCUdJVF9ESUZGVE9PTF9QUk9NUFQ9dHJ1ZSAmJgogCWV4cG9ydCBHSVRfRElGRlRPT0xfUFJPTVBUICYmCiAKLQlwcm9tcHQ9JChlY2hvIHwgZ2l0IGRpZmZ0b29sIC0tcHJvbXB0IGJyYW5jaCB8IHRhaWwgLTEpICYmCisJcHJvbXB0PSQoZWNobyB8IGdpdCBkaWZmdG9vbCBicmFuY2ggfCB0YWlsIC0xKSAmJgogCXByb21wdF9naXZlbiAiJHByb21wdCIgJiYKIAogCXJlc3RvcmVfdGVzdF9kZWZhdWx0cwpAQCAtMTUyLDYgKzE2OSwxNyBAQAogCXJlc3RvcmVfdGVzdF9kZWZhdWx0cwogJwogCisjIFRlc3QgdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHBhc3MgLS1uby1wcm9tcHQgd2hlbiBtZXJnZXRvb2wucHJvbXB0IGlzIGZhbHNlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmdG9vbCBtZXJnZS5wcm9tcHQgPSBmYWxzZScgJworCWdpdCBjb25maWcgLS11bnNldCBkaWZmdG9vbC5wcm9tcHQKKwlnaXQgY29uZmlnIG1lcmdldG9vbC5wcm9tcHQgZmFsc2UgJiYKKworCWRpZmY9JChnaXQgZGlmZnRvb2wgYnJhbmNoKSAmJgorCXRlc3QgIiRkaWZmIiA9ICJicmFuY2giICYmCisKKwlyZXN0b3JlX3Rlc3RfZGVmYXVsdHMKKycKKwogIyBUZXN0IHRoYXQgdGhlIC15IGZsYWcgY2FuIG92ZXJyaWRlIGRpZmZ0b29sLnByb21wdCA9IHRydWUKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZ0b29sLnByb21wdCBjYW4gb3ZlcnJpZGRlbiB3aXRoIC15JyAnCiAJZ2l0IGNvbmZpZyBkaWZmdG9vbC5wcm9tcHQgdHJ1ZSAmJgpAQCAtMjEwLDcgKzIzOCwzOSBAQAogCWRpZmY9JChnaXQgZGlmZnRvb2wgLS10b29sPXRrZGlmZiAtLW5vLXByb21wdCBicmFuY2gpICYmCiAJZ2l0IGNvbmZpZyAtLXVuc2V0IGRpZmZ0b29sLnRrZGlmZi5wYXRoICYmCiAJbGluZXM9JChlY2hvICIkZGlmZiIgfCBncmVwIGZpbGUgfCB3YyAtbCkgJiYKLQl0ZXN0ICIkbGluZXMiIC1lcSAxCisJdGVzdCAiJGxpbmVzIiAtZXEgMSAmJgorCisJcmVzdG9yZV90ZXN0X2RlZmF1bHRzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZ0b29sIC0tZXh0Y21kPWNhdCcgJworCWRpZmY9JChnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgLS1leHRjbWQ9Y2F0IGJyYW5jaCkgJiYKKwl0ZXN0ICIkZGlmZiIgPSBicmFuY2giJExGIm1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmdG9vbCAtLWV4dGNtZCBjYXQnICcKKwlkaWZmPSQoZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IC0tZXh0Y21kIGNhdCBicmFuY2gpICYmCisJdGVzdCAiJGRpZmYiID0gYnJhbmNoIiRMRiJtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZnRvb2wgLXggY2F0JyAnCisJZGlmZj0kKGdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCAteCBjYXQgYnJhbmNoKSAmJgorCXRlc3QgIiRkaWZmIiA9IGJyYW5jaCIkTEYibWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZ0b29sIC0tZXh0Y21kIGVjaG8gYXJnMScgJworCWRpZmY9JChnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgLS1leHRjbWQgc2hcIC1jXCBcImVjaG9cIFwkMVwiIGJyYW5jaCkKKwl0ZXN0ICIkZGlmZiIgPSBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZ0b29sIC0tZXh0Y21kIGNhdCBhcmcxJyAnCisJZGlmZj0kKGdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCAtLWV4dGNtZCBzaFwgLWNcIFwiY2F0XCBcJDFcIiBicmFuY2gpCisJdGVzdCAiJGRpZmYiID0gbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZ0b29sIC0tZXh0Y21kIGNhdCBhcmcyJyAnCisJZGlmZj0kKGdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCAtLWV4dGNtZCBzaFwgLWNcIFwiY2F0XCBcJDJcIiBicmFuY2gpCisJdGVzdCAiJGRpZmYiID0gYnJhbmNoCiAnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90ODAwMy1ibGFtZS5zaCBiL3QvdDgwMDMtYmxhbWUuc2gKaW5kZXggMTNjMjVmMS4uMjMwMTQzYyAxMDA3NTUKLS0tIGEvdC90ODAwMy1ibGFtZS5zaAorKysgYi90L3Q4MDAzLWJsYW1lLnNoCkBAIC0xMSw3ICsxMSwxNSBAQAogCWVjaG8gQiBCIEIgQiBCID50d28gJiYKIAllY2hvIEMgQyBDIEMgQyA+dHJlcyAmJgogCWVjaG8gQUJDID5tb3VzZSAmJgotCWdpdCBhZGQgb25lIHR3byB0cmVzIG1vdXNlICYmCisJZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkKKwlkbworCQllY2hvICRpCisJZG9uZSA+bmluZV9saW5lcyAmJgorCWZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5IGEKKwlkbworCQllY2hvICRpCisJZG9uZSA+dGVuX2xpbmVzICYmCisJZ2l0IGFkZCBvbmUgdHdvIHRyZXMgbW91c2UgbmluZV9saW5lcyB0ZW5fbGluZXMgJiYKIAl0ZXN0X3RpY2sgJiYKIAlHSVRfQVVUSE9SX05BTUU9SW5pdGlhbCBnaXQgY29tbWl0IC1tIEluaXRpYWwgJiYKIApAQCAtMTQ0LDQgKzE1MiwzNyBAQAogCWdpdCBibGFtZSBIRUFEXi4uIC0tIHBhdGgKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgdG8gYSBjb21taXQgd2l0aCBubyBhdXRob3IgbmFtZScgJworICBUUkVFPWBnaXQgcmV2LXBhcnNlIEhFQUQ6YAorICBjYXQgPmJhZGNvbW1pdCA8PEVPRgordHJlZSAkVFJFRQorYXV0aG9yIDxub25hbWU+IDEyMzQ1Njc4OTAgKzAwMDAKK2NvbW1pdHRlciBEYXZpZCBSZWlzcyA8ZHJlaXNzQGZhY2Vib29rLmNvbT4gMTIzNDU2Nzg5MCArMDAwMAorCitzb21lIG1lc3NhZ2UKK0VPRgorICBDT01NSVQ9YGdpdCBoYXNoLW9iamVjdCAtdCBjb21taXQgLXcgYmFkY29tbWl0YAorICBnaXQgLS1uby1wYWdlciBibGFtZSAkQ09NTUlUIC0tIHVubyA+L2Rldi9udWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIHdpdGggaW52YWxpZCBzdGFydCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBibGFtZSAtTDUgdHJlcyAyPmVycm9ycyAmJgorCWdyZXAgImhhcyBvbmx5IDIgbGluZXMiIGVycm9ycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCB3aXRoIGludmFsaWQgZW5kJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJsYW1lIC1MMSw1IHRyZXMgMj5lcnJvcnMgJiYKKwlncmVwICJoYXMgb25seSAyIGxpbmVzIiBlcnJvcnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZW50IG9mIGxpbmUgbnVtYmVycywgbmluZSBsaW5lcycgJworCWdpdCBibGFtZSBuaW5lX2xpbmVzID5hY3R1YWwgJiYKKwl0ZXN0ICQoZ3JlcCAtYyAiICAiIGFjdHVhbCkgPSAwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGVudCBvZiBsaW5lIG51bWJlcnMsIHRlbiBsaW5lcycgJworCWdpdCBibGFtZSB0ZW5fbGluZXMgPmFjdHVhbCAmJgorCXRlc3QgJChncmVwIC1jICIgICIgYWN0dWFsKSA9IDkKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q4MDA1LWJsYW1lLWkxOG4uc2ggYi90L3Q4MDA1LWJsYW1lLWkxOG4uc2gKaW5kZXggOWMxZTIxYS4uY2IzOTA1NSAxMDA3NTUKLS0tIGEvdC90ODAwNS1ibGFtZS1pMThuLnNoCisrKyBiL3QvdDgwMDUtYmxhbWUtaTE4bi5zaApAQCAtMjAsNyArMjAsNyBAQAogCiAJZWNobyAiU0pJUyBMSU5FIiA+PiBmaWxlICYmCiAJZ2l0IGFkZCBmaWxlICYmCi0JZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIHNoaWZ0LWppcyAmJgorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBTSklTICYmCiAJZ2l0IGNvbW1pdCAtLWF1dGhvciAiJFNKSVNfTkFNRSA8c2ppc0Bsb2NhbGhvc3Q+IiAtbSAiJFNKSVNfTVNHIgogJwogCkBAIC02Nyw4ICs2Nyw4IEBACiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0JJ2JsYW1lIHJlc3BlY3RzIC0tZW5jb2Rpbmc9dXRmLTgnICcKLQlnaXQgYmxhbWUgLS1pbmNyZW1lbnRhbCAtLWVuY29kaW5nPXV0Zi04IGZpbGUgfCBcCisJJ2JsYW1lIHJlc3BlY3RzIC0tZW5jb2Rpbmc9VVRGLTgnICcKKwlnaXQgYmxhbWUgLS1pbmNyZW1lbnRhbCAtLWVuY29kaW5nPVVURi04IGZpbGUgfCBcCiAJCWVncmVwICJeKGF1dGhvcnxzdW1tYXJ5KSAiID4gYWN0dWFsICYmCiAJdGVzdF9jbXAgYWN0dWFsIGV4cGVjdGVkCiAnCmRpZmYgLS1naXQgYS90L3Q4MDA1L2NwMTI1MS50eHQgYi90L3Q4MDA1L2NwMTI1MS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNDFlOTguLjAwMDAwMDAKLS0tIGEvdC90ODAwNS9jcDEyNTEudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1DUDEyNTFfTkFNRT0iyOLg7SDP5fLw7uLo9yDR6OTu8O7iIgotQ1AxMjUxX01TRz0i0uXx8u7i7uUg8e7u4fnl7ejlIgpkaWZmIC0tZ2l0IGEvdC90OTAwMS1zZW5kLWVtYWlsLnNoIGIvdC90OTAwMS1zZW5kLWVtYWlsLnNoCmluZGV4IGNlMjZlYTQuLmMwOWYzNzUgMTAwNzU1Ci0tLSBhL3QvdDkwMDEtc2VuZC1lbWFpbC5zaAorKysgYi90L3Q5MDAxLXNlbmQtZW1haWwuc2gKQEAgLTk1LDYgKzk1LDQwIEBACiAgICAgJ1ZlcmlmeSBjb21tYW5kbGluZScgXAogICAgICd0ZXN0X2NtcCBleHBlY3RlZCBjb21tYW5kbGluZTEnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1NlbmQgcGF0Y2hlcyB3aXRoIC0tZW52ZWxvcGUtc2VuZGVyJyAnCisgICAgY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorICAgICBnaXQgc2VuZC1lbWFpbCAtLWVudmVsb3BlLXNlbmRlcj0iUGF0Y2ggQ29udHJpYnV0ZXIgPHBhdGNoQGV4YW1wbGUuY29tPiIgLS1zdXBwcmVzcy1jYz1zb2IgLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiAtLXRvPW5vYm9keUBleGFtcGxlLmNvbSAtLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgJHBhdGNoZXMgMj5lcnJvcnMKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKKyFwYXRjaEBleGFtcGxlLmNvbSEKKyEtaSEKKyFub2JvZHlAZXhhbXBsZS5jb20hCishYXV0aG9yQGV4YW1wbGUuY29tIQorIW9uZUBleGFtcGxlLmNvbSEKKyF0d29AZXhhbXBsZS5jb20hCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdWZXJpZnkgY29tbWFuZGxpbmUnIFwKKyAgICAndGVzdF9jbXAgZXhwZWN0ZWQgY29tbWFuZGxpbmUxJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTZW5kIHBhdGNoZXMgd2l0aCAtLWVudmVsb3BlLXNlbmRlcj1hdXRvJyAnCisgICAgY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorICAgICBnaXQgc2VuZC1lbWFpbCAtLWVudmVsb3BlLXNlbmRlcj1hdXRvIC0tc3VwcHJlc3MtY2M9c29iIC0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiICRwYXRjaGVzIDI+ZXJyb3JzCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCishbm9ib2R5QGV4YW1wbGUuY29tIQorIS1pIQorIW5vYm9keUBleGFtcGxlLmNvbSEKKyFhdXRob3JAZXhhbXBsZS5jb20hCishb25lQGV4YW1wbGUuY29tIQorIXR3b0BleGFtcGxlLmNvbSEKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1ZlcmlmeSBjb21tYW5kbGluZScgXAorICAgICd0ZXN0X2NtcCBleHBlY3RlZCBjb21tYW5kbGluZTEnCisKIGNhdCA+ZXhwZWN0ZWQtc2hvdy1hbGwtaGVhZGVycyA8PFxFT0YKIDAwMDEtU2Vjb25kLnBhdGNoCiAobWJveCkgQWRkaW5nIGNjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnRnJvbTogQSA8YXV0aG9yQGV4YW1wbGUuY29tPicKQEAgLTEwMywxMCArMTM3LDE4IEBACiBEcnktT0suIExvZyBzYXlzOgogU2VydmVyOiByZWxheS5leGFtcGxlLmNvbQogTUFJTCBGUk9NOjxmcm9tQGV4YW1wbGUuY29tPgotUkNQVCBUTzo8dG9AZXhhbXBsZS5jb20+LDxjY0BleGFtcGxlLmNvbT4sPGF1dGhvckBleGFtcGxlLmNvbT4sPG9uZUBleGFtcGxlLmNvbT4sPHR3b0BleGFtcGxlLmNvbT4sPGJjY0BleGFtcGxlLmNvbT4KK1JDUFQgVE86PHRvQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8Y2NAZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxhdXRob3JAZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxvbmVAZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0d29AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxiY2NAZXhhbXBsZS5jb20+CiBGcm9tOiBFeGFtcGxlIDxmcm9tQGV4YW1wbGUuY29tPgogVG86IHRvQGV4YW1wbGUuY29tCi1DYzogY2NAZXhhbXBsZS5jb20sIEEgPGF1dGhvckBleGFtcGxlLmNvbT4sIE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tCitDYzogY2NAZXhhbXBsZS5jb20sCisJQSA8YXV0aG9yQGV4YW1wbGUuY29tPiwKKwlPbmUgPG9uZUBleGFtcGxlLmNvbT4sCisJdHdvQGV4YW1wbGUuY29tCiBTdWJqZWN0OiBbUEFUQ0ggMS8xXSBTZWNvbmQuCiBEYXRlOiBEQVRFLVNUUklORwogTWVzc2FnZS1JZDogTUVTU0FHRS1JRC1TVFJJTkcKQEAgLTE0NCw4ICsxODYsMjcgQEAKIAkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKIAkJJHBhdGNoZXMgXAogCQkyPmVycm9ycyAmJgotCQlncmVwICJeRnJvbTogRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4kIiBtc2d0eHQxICYmCi0JCWdyZXAgIl5UbzogdG9AZXhhbXBsZS5jb20kIiBtc2d0eHQxCisJCWdyZXAgIl5Gcm9tOiBFeGFtcGxlIDxmcm9tQGV4YW1wbGUuY29tPlwkIiBtc2d0eHQxICYmCisJCWdyZXAgIl5UbzogdG9AZXhhbXBsZS5jb21cJCIgbXNndHh0MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjY2NtZCB3b3JrcycgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwljcCAkcGF0Y2hlcyBjY2NtZC5wYXRjaCAmJgorCWVjaG8gY2NjbWQtLWNjY21kQGV4YW1wbGUuY29tID4+Y2NjbWQucGF0Y2ggJiYKKwl7CisJICBlY2hvICIjISRTSEVMTF9QQVRIIgorCSAgZWNobyBzZWQgLW4gLWUgcy9eY2NjbWQtLS8vcCBcIlwkMVwiCisJfSA+IGNjY21kLXNlZCAmJgorCWNobW9kICt4IGNjY21kLXNlZCAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJLS1jYy1jbWQ9Li9jY2NtZC1zZWQgXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQljY2NtZC5wYXRjaCBcCisJCSYmCisJZ3JlcCAiXgljY2NtZEBleGFtcGxlLmNvbSIgbXNndHh0MQogJwogCiB6OD16enp6enp6egpAQCAtMTc1LDcgKzIzNiw3IEBACiAJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKIAkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKIAkJJHBhdGNoZXMgJiYKLQlzZWQgIjEsL14kL2QiIDwgbXNndHh0MSA+IG1zZ2JvZHkxCisJc2VkICIxLC9eXCQvZCIgPCBtc2d0eHQxID4gbXNnYm9keTEKIAlncmVwICJGcm9tOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+IiBtc2dib2R5MQogJwogCkBAIC0xODYsNyArMjQ3LDcgQEAKIAkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAogCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAogCQkkcGF0Y2hlcyAmJgotCXNlZCAiMSwvXiQvZCIgPCBtc2d0eHQxID4gbXNnYm9keTEKKwlzZWQgIjEsL15cJC9kIiA8IG1zZ3R4dDEgPiBtc2dib2R5MQogCSEgZ3JlcCAiRnJvbTogQSA8YXV0aG9yQGV4YW1wbGUuY29tPiIgbXNnYm9keTEKICcKIApAQCAtMjU5LDEwICszMjAsMTcgQEAKIERyeS1PSy4gTG9nIHNheXM6CiBTZXJ2ZXI6IHJlbGF5LmV4YW1wbGUuY29tCiBNQUlMIEZST006PGZyb21AZXhhbXBsZS5jb20+Ci1SQ1BUIFRPOjx0b0BleGFtcGxlLmNvbT4sPGNjQGV4YW1wbGUuY29tPiw8YXV0aG9yQGV4YW1wbGUuY29tPiw8b25lQGV4YW1wbGUuY29tPiw8dHdvQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8dG9AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxjY0BleGFtcGxlLmNvbT4KK1JDUFQgVE86PGF1dGhvckBleGFtcGxlLmNvbT4KK1JDUFQgVE86PG9uZUBleGFtcGxlLmNvbT4KK1JDUFQgVE86PHR3b0BleGFtcGxlLmNvbT4KIEZyb206IEV4YW1wbGUgPGZyb21AZXhhbXBsZS5jb20+CiBUbzogdG9AZXhhbXBsZS5jb20KLUNjOiBjY0BleGFtcGxlLmNvbSwgQSA8YXV0aG9yQGV4YW1wbGUuY29tPiwgT25lIDxvbmVAZXhhbXBsZS5jb20+LCB0d29AZXhhbXBsZS5jb20KK0NjOiBjY0BleGFtcGxlLmNvbSwKKwlBIDxhdXRob3JAZXhhbXBsZS5jb20+LAorCU9uZSA8b25lQGV4YW1wbGUuY29tPiwKKwl0d29AZXhhbXBsZS5jb20KIFN1YmplY3Q6IFtQQVRDSCAxLzFdIFNlY29uZC4KIERhdGU6IERBVEUtU1RSSU5HCiBNZXNzYWdlLUlkOiBNRVNTQUdFLUlELVNUUklORwpAQCAtMjc0LDcgKzM0Miw3IEBACiB0ZXN0X3N1cHByZXNzaW9uICgpIHsKIAlnaXQgc2VuZC1lbWFpbCBcCiAJCS0tZHJ5LXJ1biBcCi0JCS0tc3VwcHJlc3MtY2M9JDEgXAorCQktLXN1cHByZXNzLWNjPSQxICR7MisiLS1zdXBwcmVzcy1jYz0kMiJ9IFwKIAkJLS1mcm9tPSJFeGFtcGxlIDxmcm9tQGV4YW1wbGUuY29tPiIgXAogCQktLXRvPXRvQGV4YW1wbGUuY29tIFwKIAkJLS1zbXRwLXNlcnZlciByZWxheS5leGFtcGxlLmNvbSBcCkBAIC0yODIsOCArMzUwLDggQEAKIAlzZWQJLWUgInMvXlwoRGF0ZTpcKS4qL1wxIERBVEUtU1RSSU5HLyIgXAogCQktZSAicy9eXChNZXNzYWdlLUlkOlwpLiovXDEgTUVTU0FHRS1JRC1TVFJJTkcvIiBcCiAJCS1lICJzL15cKFgtTWFpbGVyOlwpLiovXDEgWC1NQUlMRVItU1RSSU5HLyIgXAotCQk+YWN0dWFsLXN1cHByZXNzLSQxICYmCi0JdGVzdF9jbXAgZXhwZWN0ZWQtc3VwcHJlc3MtJDEgYWN0dWFsLXN1cHByZXNzLSQxCisJCT5hY3R1YWwtc3VwcHJlc3MtJDEkezIrIi0kMiJ9ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtc3VwcHJlc3MtJDEkezIrIi0kMiJ9IGFjdHVhbC1zdXBwcmVzcy0kMSR7MisiLSQyIn0KIH0KIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2VuZGVtYWlsLmNjIHNldCcgJwpAQCAtMjk5LDEwICszNjcsMTUgQEAKIERyeS1PSy4gTG9nIHNheXM6CiBTZXJ2ZXI6IHJlbGF5LmV4YW1wbGUuY29tCiBNQUlMIEZST006PGZyb21AZXhhbXBsZS5jb20+Ci1SQ1BUIFRPOjx0b0BleGFtcGxlLmNvbT4sPGF1dGhvckBleGFtcGxlLmNvbT4sPG9uZUBleGFtcGxlLmNvbT4sPHR3b0BleGFtcGxlLmNvbT4KK1JDUFQgVE86PHRvQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8YXV0aG9yQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8b25lQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8dHdvQGV4YW1wbGUuY29tPgogRnJvbTogRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4KIFRvOiB0b0BleGFtcGxlLmNvbQotQ2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4sIE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tCitDYzogQSA8YXV0aG9yQGV4YW1wbGUuY29tPiwKKwlPbmUgPG9uZUBleGFtcGxlLmNvbT4sCisJdHdvQGV4YW1wbGUuY29tCiBTdWJqZWN0OiBbUEFUQ0ggMS8xXSBTZWNvbmQuCiBEYXRlOiBEQVRFLVNUUklORwogTWVzc2FnZS1JZDogTUVTU0FHRS1JRC1TVFJJTkcKQEAgLTMxNiw2ICszODksNDEgQEAKIAl0ZXN0X3N1cHByZXNzaW9uIHNvYgogJwogCitjYXQgPmV4cGVjdGVkLXN1cHByZXNzLWNjY21kIDw8XEVPRgorMDAwMS1TZWNvbmQucGF0Y2gKKyhtYm94KSBBZGRpbmcgY2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdGcm9tOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+JworKG1ib3gpIEFkZGluZyBjYzogT25lIDxvbmVAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJworKG1ib3gpIEFkZGluZyBjYzogdHdvQGV4YW1wbGUuY29tIGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJworKGJvZHkpIEFkZGluZyBjYzogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiBmcm9tIGxpbmUgJ1NpZ25lZC1vZmYtYnk6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4nCitEcnktT0suIExvZyBzYXlzOgorU2VydmVyOiByZWxheS5leGFtcGxlLmNvbQorTUFJTCBGUk9NOjxmcm9tQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8dG9AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxhdXRob3JAZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxvbmVAZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0d29AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitGcm9tOiBFeGFtcGxlIDxmcm9tQGV4YW1wbGUuY29tPgorVG86IHRvQGV4YW1wbGUuY29tCitDYzogQSA8YXV0aG9yQGV4YW1wbGUuY29tPiwKKwlPbmUgPG9uZUBleGFtcGxlLmNvbT4sCisJdHdvQGV4YW1wbGUuY29tLAorCUMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KK1N1YmplY3Q6IFtQQVRDSCAxLzFdIFNlY29uZC4KK0RhdGU6IERBVEUtU1RSSU5HCitNZXNzYWdlLUlkOiBNRVNTQUdFLUlELVNUUklORworWC1NYWlsZXI6IFgtTUFJTEVSLVNUUklORworCitSZXN1bHQ6IE9LCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2VuZGVtYWlsLmNjY21kJyAnCisJZWNobyBlY2hvIGNjLWNtZEBleGFtcGxlLmNvbSA+IGNjY21kICYmCisJY2htb2QgK3ggY2NjbWQgJiYKKwlnaXQgY29uZmlnIHNlbmRlbWFpbC5jY2NtZCAuL2NjY21kICYmCisJdGVzdF9zdXBwcmVzc2lvbiBjY2NtZAorJworCiBjYXQgPmV4cGVjdGVkLXN1cHByZXNzLWFsbCA8PFxFT0YKIDAwMDEtU2Vjb25kLnBhdGNoCiBEcnktT0suIExvZyBzYXlzOgpAQCAtMzQxLDEzICs0NDksMjEgQEAKIChtYm94KSBBZGRpbmcgY2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdGcm9tOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+JwogKG1ib3gpIEFkZGluZyBjYzogT25lIDxvbmVAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJwogKG1ib3gpIEFkZGluZyBjYzogdHdvQGV4YW1wbGUuY29tIGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJworKGNjLWNtZCkgQWRkaW5nIGNjOiBjYy1jbWRAZXhhbXBsZS5jb20gZnJvbTogJy4vY2NjbWQnCiBEcnktT0suIExvZyBzYXlzOgogU2VydmVyOiByZWxheS5leGFtcGxlLmNvbQogTUFJTCBGUk9NOjxmcm9tQGV4YW1wbGUuY29tPgotUkNQVCBUTzo8dG9AZXhhbXBsZS5jb20+LDxhdXRob3JAZXhhbXBsZS5jb20+LDxvbmVAZXhhbXBsZS5jb20+LDx0d29AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0b0BleGFtcGxlLmNvbT4KK1JDUFQgVE86PGF1dGhvckBleGFtcGxlLmNvbT4KK1JDUFQgVE86PG9uZUBleGFtcGxlLmNvbT4KK1JDUFQgVE86PHR3b0BleGFtcGxlLmNvbT4KK1JDUFQgVE86PGNjLWNtZEBleGFtcGxlLmNvbT4KIEZyb206IEV4YW1wbGUgPGZyb21AZXhhbXBsZS5jb20+CiBUbzogdG9AZXhhbXBsZS5jb20KLUNjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+LCBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbQorQ2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4sCisJT25lIDxvbmVAZXhhbXBsZS5jb20+LAorCXR3b0BleGFtcGxlLmNvbSwKKwljYy1jbWRAZXhhbXBsZS5jb20KIFN1YmplY3Q6IFtQQVRDSCAxLzFdIFNlY29uZC4KIERhdGU6IERBVEUtU1RSSU5HCiBNZXNzYWdlLUlkOiBNRVNTQUdFLUlELVNUUklORwpAQCAtMzYwLDYgKzQ3NiwzNSBAQAogCXRlc3Rfc3VwcHJlc3Npb24gYm9keQogJwogCitjYXQgPmV4cGVjdGVkLXN1cHByZXNzLWJvZHktY2NjbWQgPDxcRU9GCiswMDAxLVNlY29uZC5wYXRjaAorKG1ib3gpIEFkZGluZyBjYzogQSA8YXV0aG9yQGV4YW1wbGUuY29tPiBmcm9tIGxpbmUgJ0Zyb206IEEgPGF1dGhvckBleGFtcGxlLmNvbT4nCisobWJveCkgQWRkaW5nIGNjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdDYzogT25lIDxvbmVAZXhhbXBsZS5jb20+LCB0d29AZXhhbXBsZS5jb20nCisobWJveCkgQWRkaW5nIGNjOiB0d29AZXhhbXBsZS5jb20gZnJvbSBsaW5lICdDYzogT25lIDxvbmVAZXhhbXBsZS5jb20+LCB0d29AZXhhbXBsZS5jb20nCitEcnktT0suIExvZyBzYXlzOgorU2VydmVyOiByZWxheS5leGFtcGxlLmNvbQorTUFJTCBGUk9NOjxmcm9tQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8dG9AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxhdXRob3JAZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxvbmVAZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0d29AZXhhbXBsZS5jb20+CitGcm9tOiBFeGFtcGxlIDxmcm9tQGV4YW1wbGUuY29tPgorVG86IHRvQGV4YW1wbGUuY29tCitDYzogQSA8YXV0aG9yQGV4YW1wbGUuY29tPiwKKwlPbmUgPG9uZUBleGFtcGxlLmNvbT4sCisJdHdvQGV4YW1wbGUuY29tCitTdWJqZWN0OiBbUEFUQ0ggMS8xXSBTZWNvbmQuCitEYXRlOiBEQVRFLVNUUklORworTWVzc2FnZS1JZDogTUVTU0FHRS1JRC1TVFJJTkcKK1gtTWFpbGVyOiBYLU1BSUxFUi1TVFJJTkcKKworUmVzdWx0OiBPSworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc3VwcHJlc3MtY2M9Ym9keSAtLXN1cHByZXNzLWNjPWNjY21kJyAnCisJdGVzdF9zdXBwcmVzc2lvbiBib2R5IGNjY21kCisnCisKIGNhdCA+ZXhwZWN0ZWQtc3VwcHJlc3Mtc29iIDw8XEVPRgogMDAwMS1TZWNvbmQucGF0Y2gKIChtYm94KSBBZGRpbmcgY2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdGcm9tOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+JwpAQCAtMzY4LDEwICs1MTMsMTUgQEAKIERyeS1PSy4gTG9nIHNheXM6CiBTZXJ2ZXI6IHJlbGF5LmV4YW1wbGUuY29tCiBNQUlMIEZST006PGZyb21AZXhhbXBsZS5jb20+Ci1SQ1BUIFRPOjx0b0BleGFtcGxlLmNvbT4sPGF1dGhvckBleGFtcGxlLmNvbT4sPG9uZUBleGFtcGxlLmNvbT4sPHR3b0BleGFtcGxlLmNvbT4KK1JDUFQgVE86PHRvQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8YXV0aG9yQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8b25lQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8dHdvQGV4YW1wbGUuY29tPgogRnJvbTogRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4KIFRvOiB0b0BleGFtcGxlLmNvbQotQ2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4sIE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tCitDYzogQSA8YXV0aG9yQGV4YW1wbGUuY29tPiwKKwlPbmUgPG9uZUBleGFtcGxlLmNvbT4sCisJdHdvQGV4YW1wbGUuY29tCiBTdWJqZWN0OiBbUEFUQ0ggMS8xXSBTZWNvbmQuCiBEYXRlOiBEQVRFLVNUUklORwogTWVzc2FnZS1JZDogTUVTU0FHRS1JRC1TVFJJTkcKQEAgLTM4MSw2ICs1MzEsNyBAQAogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc3VwcHJlc3MtY2M9c29iJyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0IHNlbmRlbWFpbC5jY2NtZAogCXRlc3Rfc3VwcHJlc3Npb24gc29iCiAnCiAKQEAgLTM5MywxMCArNTQ0LDE3IEBACiBEcnktT0suIExvZyBzYXlzOgogU2VydmVyOiByZWxheS5leGFtcGxlLmNvbQogTUFJTCBGUk9NOjxmcm9tQGV4YW1wbGUuY29tPgotUkNQVCBUTzo8dG9AZXhhbXBsZS5jb20+LDxhdXRob3JAZXhhbXBsZS5jb20+LDxvbmVAZXhhbXBsZS5jb20+LDx0d29AZXhhbXBsZS5jb20+LDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0b0BleGFtcGxlLmNvbT4KK1JDUFQgVE86PGF1dGhvckBleGFtcGxlLmNvbT4KK1JDUFQgVE86PG9uZUBleGFtcGxlLmNvbT4KK1JDUFQgVE86PHR3b0BleGFtcGxlLmNvbT4KK1JDUFQgVE86PGNvbW1pdHRlckBleGFtcGxlLmNvbT4KIEZyb206IEV4YW1wbGUgPGZyb21AZXhhbXBsZS5jb20+CiBUbzogdG9AZXhhbXBsZS5jb20KLUNjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+LCBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbSwgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorQ2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4sCisJT25lIDxvbmVAZXhhbXBsZS5jb20+LAorCXR3b0BleGFtcGxlLmNvbSwKKwlDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CiBTdWJqZWN0OiBbUEFUQ0ggMS8xXSBTZWNvbmQuCiBEYXRlOiBEQVRFLVNUUklORwogTWVzc2FnZS1JZDogTUVTU0FHRS1JRC1TVFJJTkcKQEAgLTQxNiwxMCArNTc0LDEzIEBACiBEcnktT0suIExvZyBzYXlzOgogU2VydmVyOiByZWxheS5leGFtcGxlLmNvbQogTUFJTCBGUk9NOjxmcm9tQGV4YW1wbGUuY29tPgotUkNQVCBUTzo8dG9AZXhhbXBsZS5jb20+LDxhdXRob3JAZXhhbXBsZS5jb20+LDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0b0BleGFtcGxlLmNvbT4KK1JDUFQgVE86PGF1dGhvckBleGFtcGxlLmNvbT4KK1JDUFQgVE86PGNvbW1pdHRlckBleGFtcGxlLmNvbT4KIEZyb206IEV4YW1wbGUgPGZyb21AZXhhbXBsZS5jb20+CiBUbzogdG9AZXhhbXBsZS5jb20KLUNjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+LCBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitDYzogQSA8YXV0aG9yQGV4YW1wbGUuY29tPiwKKwlDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CiBTdWJqZWN0OiBbUEFUQ0ggMS8xXSBTZWNvbmQuCiBEYXRlOiBEQVRFLVNUUklORwogTWVzc2FnZS1JZDogTUVTU0FHRS1JRC1TVFJJTkcKQEAgLTUzMiw4ICs2OTMsOCBAQAogCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKIAktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAogCW91dGRpci8qLnBhdGNoICYmCi0JZ3JlcCAiXkNjOiIgbXNndHh0MSB8Ci0JZ3JlcCAiPT91dGYtOD9xPz1DMz1BMD1DMz1BOT1DMz1BQz1DMz1CNj1DMz1CQT89IDx1dGY4QGV4YW1wbGUuY29tPiIKKwlncmVwICJeCSIgbXNndHh0MSB8CisJZ3JlcCAiPT9VVEYtOD9xPz1DMz1BMD1DMz1BOT1DMz1BQz1DMz1CNj1DMz1CQT89IDx1dGY4QGV4YW1wbGUuY29tPiIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb21wb3NlIGFkZHMgTUlNRSBmb3IgdXRmOCBib2R5JyAnCkBAIC01NTAsNyArNzExLDcgQEAKIAkgIC0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCiAJICAkcGF0Y2hlcyAmJgogCWdyZXAgIl51dGY4IGJvZHkiIG1zZ3R4dDEgJiYKLQlncmVwICJeQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiBtc2d0eHQxCisJZ3JlcCAiXkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOCIgbXNndHh0MQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvbXBvc2UgcmVzcGVjdHMgdXNlciBtaW1lIHR5cGUnICcKQEAgLTU3Myw3ICs3MzQsNyBAQAogCSAgJHBhdGNoZXMgJiYKIAlncmVwICJedXRmOCBib2R5IiBtc2d0eHQxICYmCiAJZ3JlcCAiXkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1pc28tODg1OS0xIiBtc2d0eHQxICYmCi0JISBncmVwICJeQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiBtc2d0eHQxCisJISBncmVwICJeQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04IiBtc2d0eHQxCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29tcG9zZSBhZGRzIE1JTUUgZm9yIHV0Zjggc3ViamVjdCcgJwpAQCAtNTg2LDcgKzc0Nyw3IEBACiAJICAtLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAogCSAgJHBhdGNoZXMgJiYKIAlncmVwICJeZmFrZSBlZGl0IiBtc2d0eHQxICYmCi0JZ3JlcCAiXlN1YmplY3Q6ID0/dXRmLTg/cT91dGY4LXM9QzM9QkNiaj1DMz1BQmN0Pz0iIG1zZ3R4dDEKKwlncmVwICJeU3ViamVjdDogPT9VVEYtOD9xP3V0Zjgtcz1DMz1CQ2JqPUMzPUFCY3Q/PSIgbXNndHh0MQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3RzIGFtYmlndW91cyByZWZlcmVuY2UvZmlsZSBjb25mbGljdCcgJwpAQCAtNjIxLDQgKzc4Miw3NCBAQAogCWdyZXAgIkluLVJlcGx5LVRvOiA8aW4tcmVwbHktaWRAZXhhbXBsZS5jb20+IgogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBpbi1yZXBseS10byBhbmQgbm8gdGhyZWFkaW5nJyAnCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLW5vdGhyZWFkIFwKKwkJJHBhdGNoZXMgJHBhdGNoZXMgPnN0ZG91dCAmJgorCSEgZ3JlcCAiSW4tUmVwbHktVG86ICIgc3Rkb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZGluZyBidXQgbm8gY2hhaW4tcmVwbHktdG8nICcKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZHJ5LXJ1biBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0tdGhyZWFkIFwKKwkJLS1ub2NoYWluLXJlcGx5LXRvIFwKKwkJJHBhdGNoZXMgJHBhdGNoZXMgPnN0ZG91dCAmJgorCWdyZXAgIkluLVJlcGx5LVRvOiAiIHN0ZG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3YXJuaW5nIHdpdGggYW4gaW1wbGljaXQgLS1jaGFpbi1yZXBseS10bycgJworCWdpdCBzZW5kLWVtYWlsIFwKKwktLWRyeS1ydW4gXAorCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwlvdXRkaXIvMDAwPy0qLnBhdGNoIDI+ZXJyb3JzID5vdXQgJiYKKwlncmVwICJuby1jaGFpbi1yZXBseS10byIgZXJyb3JzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIHdhcm5pbmcgd2l0aCBhbiBleHBsaWNpdCAtLWNoYWluLXJlcGx5LXRvJyAnCisJZ2l0IHNlbmQtZW1haWwgXAorCS0tZHJ5LXJ1biBcCisJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCS0tY2hhaW4tcmVwbHktdG8gXAorCW91dGRpci8wMDA/LSoucGF0Y2ggMj5lcnJvcnMgPm91dCAmJgorCSEgZ3JlcCAibm8tY2hhaW4tcmVwbHktdG8iIGVycm9ycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyB3YXJuaW5nIHdpdGggYW4gZXhwbGljaXQgLS1uby1jaGFpbi1yZXBseS10bycgJworCWdpdCBzZW5kLWVtYWlsIFwKKwktLWRyeS1ydW4gXAorCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwktLW5vY2hhaW4tcmVwbHktdG8gXAorCW91dGRpci8wMDA/LSoucGF0Y2ggMj5lcnJvcnMgPm91dCAmJgorCSEgZ3JlcCAibm8tY2hhaW4tcmVwbHktdG8iIGVycm9ycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyB3YXJuaW5nIHdpdGggc2VuZGVtYWlsLmNoYWlucmVwbHl0byA9IGZhbHNlJyAnCisJZ2l0IGNvbmZpZyBzZW5kZW1haWwuY2hhaW5yZXBseXRvIGZhbHNlICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCS0tZHJ5LXJ1biBcCisJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCW91dGRpci8wMDA/LSoucGF0Y2ggMj5lcnJvcnMgPm91dCAmJgorCSEgZ3JlcCAibm8tY2hhaW4tcmVwbHktdG8iIGVycm9ycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyB3YXJuaW5nIHdpdGggc2VuZGVtYWlsLmNoYWlucmVwbHl0byA9IHRydWUnICcKKwlnaXQgY29uZmlnIHNlbmRlbWFpbC5jaGFpbnJlcGx5dG8gdHJ1ZSAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwktLWRyeS1ydW4gXAorCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwlvdXRkaXIvMDAwPy0qLnBhdGNoIDI+ZXJyb3JzID5vdXQgJiYKKwkhIGdyZXAgIm5vLWNoYWluLXJlcGx5LXRvIiBlcnJvcnMKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTAwLWdpdC1zdm4tYmFzaWMuc2ggYi90L3Q5MTAwLWdpdC1zdm4tYmFzaWMuc2gKaW5kZXggNGVlZTJlOS4uNTcwZTAzNSAxMDA3NTUKLS0tIGEvdC90OTEwMC1naXQtc3ZuLWJhc2ljLnNoCisrKyBiL3QvdDkxMDAtZ2l0LXN2bi1iYXNpYy5zaApAQCAtMzEsNyArMzEsNyBAQAogCWVjaG8gInp6eiIgPiBiYXIvenp6ICYmCiAJZWNobyAiIyEvYmluL3NoIiA+IGV4ZWMuc2ggJiYKIAljaG1vZCAreCBleGVjLnNoICYmCi0Jc3ZuIGltcG9ydCAtbSAiaW1wb3J0IGZvciBnaXQgc3ZuIiAuICIkc3ZucmVwbyIgPi9kZXYvbnVsbCAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICJpbXBvcnQgZm9yIGdpdCBzdm4iIC4gIiRzdm5yZXBvIiA+L2Rldi9udWxsICYmCiAJY2QgLi4gJiYKIAlybSAtcmYgaW1wb3J0ICYmCiAJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyInCkBAIC01MSw3ICs1MSw3IEBACiAJZ2l0IGNvbW1pdCAtbSAiJG5hbWUiICYmCiAJZ2l0IHN2biBzZXQtdHJlZSAtLWZpbmQtY29waWVzLWhhcmRlciAtLXJtZGlyIFwKIAkJJHtyZW1vdGVzX2dpdF9zdm59Li5teWJyYW5jaCAmJgotCXN2biB1cCAiJFNWTl9UUkVFIiAmJgorCXN2bl9jbWQgdXAgIiRTVk5fVFJFRSIgJiYKIAl0ZXN0IC1kICIkU1ZOX1RSRUUiL2RpciAmJiB0ZXN0ICEgLWQgIiRTVk5fVFJFRSIvZGlyL2EnCiAKIApAQCAtMTE4LDcgKzExOCw3IEBACiAJZ2l0IGNvbW1pdCAtbSAiJG5hbWUiICYmCiAJZ2l0IHN2biBzZXQtdHJlZSAtLWZpbmQtY29waWVzLWhhcmRlciAtLXJtZGlyIFwKIAkJJHtyZW1vdGVzX2dpdF9zdm59Li5teWJyYW5jaDUgJiYKLQlzdm4gdXAgIiRTVk5fVFJFRSIgJiYKKwlzdm5fY21kIHVwICIkU1ZOX1RSRUUiICYmCiAJdGVzdCAhIC14ICIkU1ZOX1RSRUUiL2V4ZWMuc2gnCiAKIApAQCAtMTI5LDcgKzEyOSw3IEBACiAJZ2l0IGNvbW1pdCAtbSAiJG5hbWUiICYmCiAJZ2l0IHN2biBzZXQtdHJlZSAtLWZpbmQtY29waWVzLWhhcmRlciAtLXJtZGlyIFwKIAkJJHtyZW1vdGVzX2dpdF9zdm59Li5teWJyYW5jaDUgJiYKLQlzdm4gdXAgIiRTVk5fVFJFRSIgJiYKKwlzdm5fY21kIHVwICIkU1ZOX1RSRUUiICYmCiAJdGVzdCAteCAiJFNWTl9UUkVFIi9leGVjLnNoJwogCiAKQEAgLTE0MSw3ICsxNDEsNyBAQAogCWdpdCBjb21taXQgLW0gIiRuYW1lIiAmJgogCWdpdCBzdm4gc2V0LXRyZWUgLS1maW5kLWNvcGllcy1oYXJkZXIgLS1ybWRpciBcCiAJCSR7cmVtb3Rlc19naXRfc3ZufS4ubXlicmFuY2g1ICYmCi0Jc3ZuIHVwICIkU1ZOX1RSRUUiICYmCisJc3ZuX2NtZCB1cCAiJFNWTl9UUkVFIiAmJgogCXRlc3QgLUwgIiRTVk5fVFJFRSIvZXhlYy5zaCcKIAogbmFtZT0nbmV3IHN5bWxpbmsgaXMgYWRkZWQgdG8gYSBmaWxlIHRoYXQgd2FzIGFsc28ganVzdCBtYWRlIGV4ZWN1dGFibGUnCkBAIC0xNTMsNyArMTUzLDcgQEAKIAlnaXQgY29tbWl0IC1tICIkbmFtZSIgJiYKIAlnaXQgc3ZuIHNldC10cmVlIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tcm1kaXIgXAogCQkke3JlbW90ZXNfZ2l0X3N2bn0uLm15YnJhbmNoNSAmJgotCXN2biB1cCAiJFNWTl9UUkVFIiAmJgorCXN2bl9jbWQgdXAgIiRTVk5fVFJFRSIgJiYKIAl0ZXN0IC14ICIkU1ZOX1RSRUUiL2Jhci96enogJiYKIAl0ZXN0IC1MICIkU1ZOX1RSRUUiL2V4ZWMtMi5zaCcKIApAQCAtMTY2LDcgKzE2Niw3IEBACiAJZ2l0IGNvbW1pdCAtbSAiJG5hbWUiICYmCiAJZ2l0IHN2biBzZXQtdHJlZSAtLWZpbmQtY29waWVzLWhhcmRlciAtLXJtZGlyIFwKIAkJJHtyZW1vdGVzX2dpdF9zdm59Li5teWJyYW5jaDUgJiYKLQlzdm4gdXAgIiRTVk5fVFJFRSIgJiYKKwlzdm5fY21kIHVwICIkU1ZOX1RSRUUiICYmCiAJdGVzdCAtZiAiJFNWTl9UUkVFIi9leGVjLTIuc2ggJiYKIAl0ZXN0ICEgLUwgIiRTVk5fVFJFRSIvZXhlYy0yLnNoICYmCiAJdGVzdF9jbXAgaGVscCAiJFNWTl9UUkVFIi9leGVjLTIuc2gnCkBAIC0yMzEsNiArMjMxLDI1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXjpyZWZzLyR7cmVtb3Rlc19naXRfc3ZufSQiCiAgICAgICAgICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGNvbW1pdCAkcmV2IGRvZXMgbm90IGNsb2JiZXIgY3VycmVudCBicmFuY2gnICcKKwlnaXQgc3ZuIGZldGNoIC1pIGJhciAmJgorCWdpdCBjaGVja291dCAtYiBteS1iYXIgcmVmcy9yZW1vdGVzL2JhciAmJgorCWVjaG8gMSA+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAtbSAiY2hhbmdlIDEiICYmCisJZWNobyAyID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICJjaGFuZ2UgMiIgJiYKKwlvbGRfaGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgc3ZuIGRjb21taXQgLWkgYmFyIEhFQUReICYmCisJdGVzdCAkb2xkX2hlYWQgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwl0ZXN0IHJlZnMvaGVhZHMvbXktYmFyID0gJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpICYmCisJZ2l0IGxvZyByZWZzL3JlbW90ZXMvYmFyIHwgZ3JlcCAiY2hhbmdlIDEiICYmCisJISBnaXQgbG9nIHJlZnMvcmVtb3Rlcy9iYXIgfCBncmVwICJjaGFuZ2UgMiIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCAtRCBteS1iYXIKKwknCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FibGUgdG8gZGNvbW1pdCB0byBhIHN1YmRpcmVjdG9yeScgIgogCWdpdCBzdm4gZmV0Y2ggLWkgYmFyICYmCiAJZ2l0IGNoZWNrb3V0IC1iIG15LWJhciByZWZzL3JlbW90ZXMvYmFyICYmCmRpZmYgLS1naXQgYS90L3Q5MTAxLWdpdC1zdm4tcHJvcHMuc2ggYi90L3Q5MTAxLWdpdC1zdm4tcHJvcHMuc2gKaW5kZXggMWUzMWQ2ZS4uOTI5NDk5ZSAxMDA3NTUKLS0tIGEvdC90OTEwMS1naXQtc3ZuLXByb3BzLnNoCisrKyBiL3QvdDkxMDEtZ2l0LXN2bi1wcm9wcy5zaApAQCAtNDgsNyArNDgsNyBAQAogCXByaW50ZiAiXHJcbiIgPiBlbXB0eV9jcmxmCiAJYV9lbXB0eV9jcmxmPWBnaXQgaGFzaC1vYmplY3QgLXcgZW1wdHlfY3JsZmAKIAotCXN2biBpbXBvcnQgLS1uby1hdXRvLXByb3BzIC1tICdpbXBvcnQgZm9yIGdpdCBzdm4nIC4gIiRzdm5yZXBvIiA+L2Rldi9udWxsCisJc3ZuX2NtZCBpbXBvcnQgLS1uby1hdXRvLXByb3BzIC1tICdpbXBvcnQgZm9yIGdpdCBzdm4nIC4gIiRzdm5yZXBvIiA+L2Rldi9udWxsCiBjZCAuLgogCiBybSAtcmYgaW1wb3J0CkBAIC01NywxMyArNTcsMTMgQEAKIAknY2QgdGVzdF93YyAmJgogCQllY2hvIEdyZWV0aW5ncyA+PiBrdy5jICYmCiAJCXBva2Uga3cuYyAmJgotCQlzdm4gY29tbWl0IC1tICJOb3QgeWV0IGFuIElkIiAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiTm90IHlldCBhbiBJZCIgJiYKIAkJZWNobyBIZWxsbyB3b3JsZCA+PiBrdy5jICYmCiAJCXBva2Uga3cuYyAmJgotCQlzdm4gY29tbWl0IC1tICJNb2RpZmllZCBmaWxlLCBidXQgc3RpbGwgbm90IHlldCBhbiBJZCIgJiYKLQkJc3ZuIHByb3BzZXQgc3ZuOmtleXdvcmRzIElkIGt3LmMgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIk1vZGlmaWVkIGZpbGUsIGJ1dCBzdGlsbCBub3QgeWV0IGFuIElkIiAmJgorCQlzdm5fY21kIHByb3BzZXQgc3ZuOmtleXdvcmRzIElkIGt3LmMgJiYKIAkJcG9rZSBrdy5jICYmCi0JCXN2biBjb21taXQgLW0gIlByb3BzZXQgSWQiICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJQcm9wc2V0IElkIiAmJgogCWNkIC4uJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIGdpdCBzdm4nICdnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIicKQEAgLTgzLDE2ICs4MywxNiBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICJwcm9wc2V0IENSIG9uIGNybGYgZmlsZXMiIFwKIAknY2QgdGVzdF93YyAmJgotCQlzdm4gcHJvcHNldCBzdm46ZW9sLXN0eWxlIENSIGVtcHR5ICYmCi0JCXN2biBwcm9wc2V0IHN2bjplb2wtc3R5bGUgQ1IgY3JsZiAmJgotCQlzdm4gcHJvcHNldCBzdm46ZW9sLXN0eWxlIENSIG5lX2NybGYgJiYKLQkJc3ZuIGNvbW1pdCAtbSAicHJvcHNldCBDUiBvbiBjcmxmIGZpbGVzIiAmJgorCQlzdm5fY21kIHByb3BzZXQgc3ZuOmVvbC1zdHlsZSBDUiBlbXB0eSAmJgorCQlzdm5fY21kIHByb3BzZXQgc3ZuOmVvbC1zdHlsZSBDUiBjcmxmICYmCisJCXN2bl9jbWQgcHJvcHNldCBzdm46ZW9sLXN0eWxlIENSIG5lX2NybGYgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInByb3BzZXQgQ1Igb24gY3JsZiBmaWxlcyIgJiYKIAkgY2QgLi4nCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGFuZCBwdWxsIGxhdGVzdCBmcm9tIHN2biBhbmQgY2hlY2tvdXQgYSBuZXcgd2MnIFwKIAknZ2l0IHN2biBmZXRjaCAmJgogCSBnaXQgcHVsbCAuICR7cmVtb3Rlc19naXRfc3ZufSAmJgotCSBzdm4gY28gIiRzdm5yZXBvIiBuZXdfd2MnCisJIHN2bl9jbWQgY28gIiRzdm5yZXBvIiBuZXdfd2MnCiAKIGZvciBpIGluIGNybGYgbmVfY3JsZiBsZiBuZV9sZiBjciBuZV9jciBlbXB0eV9jciBlbXB0eV9sZiBlbXB0eSBlbXB0eV9jcmxmCiBkbwpAQCAtMTA2LDExICsxMDYsMTEgQEAKIAlhX2NyPWBwcmludGYgJyRJZCRcclxuSGVsbG9cclxuV29ybGRcclxuJyB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluYAogCWFfbmVfY3I9YHByaW50ZiAnJElkJFxyXG5IZWxsb1xyXG5Xb3JsZCcgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbmAKIAl0ZXN0X2V4cGVjdF9zdWNjZXNzICdTZXQgQ1JMRiBvbiBjciBmaWxlcycgXAotCSdzdm4gcHJvcHNldCBzdm46ZW9sLXN0eWxlIENSTEYgY3IgJiYKLQkgc3ZuIHByb3BzZXQgc3ZuOmVvbC1zdHlsZSBDUkxGIG5lX2NyICYmCi0JIHN2biBwcm9wc2V0IHN2bjprZXl3b3JkcyBJZCBjciAmJgotCSBzdm4gcHJvcHNldCBzdm46a2V5d29yZHMgSWQgbmVfY3IgJiYKLQkgc3ZuIGNvbW1pdCAtbSAicHJvcHNldCBDUkxGIG9uIGNyIGZpbGVzIicKKwknc3ZuX2NtZCBwcm9wc2V0IHN2bjplb2wtc3R5bGUgQ1JMRiBjciAmJgorCSBzdm5fY21kIHByb3BzZXQgc3ZuOmVvbC1zdHlsZSBDUkxGIG5lX2NyICYmCisJIHN2bl9jbWQgcHJvcHNldCBzdm46a2V5d29yZHMgSWQgY3IgJiYKKwkgc3ZuX2NtZCBwcm9wc2V0IHN2bjprZXl3b3JkcyBJZCBuZV9jciAmJgorCSBzdm5fY21kIGNvbW1pdCAtbSAicHJvcHNldCBDUkxGIG9uIGNyIGZpbGVzIicKIGNkIC4uCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBhbmQgcHVsbCBsYXRlc3QgZnJvbSBzdm4nIFwKIAknZ2l0IHN2biBmZXRjaCAmJiBnaXQgcHVsbCAuICR7cmVtb3Rlc19naXRfc3ZufScKQEAgLTE0MCwxMCArMTQwLDEyIEBACiAJY2QgdGVzdF93YyAmJgogCW1rZGlyIC1wIGRlZXBseS9uZXN0ZWQvZGlyZWN0b3J5ICYmCiAJdG91Y2ggZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkvLmtlZXAgJiYKLQlzdm4gYWRkIGRlZXBseSAmJgotCXN2biB1cCAmJgotCXN2biBwcm9wc2V0IC1SIHN2bjppZ25vcmUgJ25vLXN1Y2gtZmlsZSonIC4KLQlzdm4gY29tbWl0IC1tICdwcm9wc2V0IHN2bjppZ25vcmUnCisJc3ZuX2NtZCBhZGQgZGVlcGx5ICYmCisJc3ZuX2NtZCB1cCAmJgorCXN2bl9jbWQgcHJvcHNldCAtUiBzdm46aWdub3JlICcKK25vLXN1Y2gtZmlsZSoKKycgLgorCXN2bl9jbWQgY29tbWl0IC1tICdwcm9wc2V0IHN2bjppZ25vcmUnCiAJY2QgLi4gJiYKIAlnaXQgc3ZuIHNob3ctaWdub3JlID4gc2hvdy1pZ25vcmUuZ290ICYmCiAJY21wIHNob3ctaWdub3JlLmV4cGVjdCBzaG93LWlnbm9yZS5nb3QKQEAgLTE3MSw2ICsxNzMsNyBAQAogCSIKIAogY2F0ID5wcm9wLmV4cGVjdCA8PFxFT0YKKwogbm8tc3VjaC1maWxlKgogCiBFT0YKZGlmZiAtLWdpdCBhL3QvdDkxMDItZ2l0LXN2bi1kZWVwLXJtZGlyLnNoIGIvdC90OTEwMi1naXQtc3ZuLWRlZXAtcm1kaXIuc2gKaW5kZXggZTIyMzIxOC4uMDI4ZmIxOSAxMDA3NTUKLS0tIGEvdC90OTEwMi1naXQtc3ZuLWRlZXAtcm1kaXIuc2gKKysrIGIvdC90OTEwMi1naXQtc3ZuLWRlZXAtcm1kaXIuc2gKQEAgLTksNyArOSw3IEBACiAJbWtkaXIgLXAgZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkvbnVtYmVyLzIgJiYKIAllY2hvIGZvbyA+IGRlZXBseS9uZXN0ZWQvZGlyZWN0b3J5L251bWJlci8xL2ZpbGUgJiYKIAllY2hvIGZvbyA+IGRlZXBseS9uZXN0ZWQvZGlyZWN0b3J5L251bWJlci8yL2Fub3RoZXIgJiYKLQlzdm4gaW1wb3J0IC1tICJpbXBvcnQgZm9yIGdpdCBzdm4iIC4gIiRzdm5yZXBvIiAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICJpbXBvcnQgZm9yIGdpdCBzdm4iIC4gIiRzdm5yZXBvIiAmJgogCWNkIC4uCiAJJwogCkBAIC0yMyw3ICsyMyw3IEBACiAJZ2l0IHJtIC1mIGRlZXBseS9uZXN0ZWQvZGlyZWN0b3J5L251bWJlci8yL2Fub3RoZXIgJiYKIAlnaXQgY29tbWl0IC1hIC1tICJyZW1vdmUgYW5vdGhlciIgJiYKIAlnaXQgc3ZuIHNldC10cmVlIC0tcm1kaXIgSEVBRCAmJgotCXN2biBscyAtUiAiJHN2bnJlcG8iIHwgZ3JlcCBeZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkvbnVtYmVyLzEKKwlzdm5fY21kIGxzIC1SICIkc3ZucmVwbyIgfCBncmVwIF5kZWVwbHkvbmVzdGVkL2RpcmVjdG9yeS9udW1iZXIvMQogCScKIAogCmRpZmYgLS1naXQgYS90L3Q5MTAzLWdpdC1zdm4tdHJhY2tlZC1kaXJlY3RvcnktcmVtb3ZlZC5zaCBiL3QvdDkxMDMtZ2l0LXN2bi10cmFja2VkLWRpcmVjdG9yeS1yZW1vdmVkLnNoCmluZGV4IDk2M2RkOTUuLjM0MTMxNjQgMTAwNzU1Ci0tLSBhL3QvdDkxMDMtZ2l0LXN2bi10cmFja2VkLWRpcmVjdG9yeS1yZW1vdmVkLnNoCisrKyBiL3QvdDkxMDMtZ2l0LXN2bi10cmFja2VkLWRpcmVjdG9yeS1yZW1vdmVkLnNoCkBAIC0xMCwxNSArMTAsMTUgQEAKIAlta2RpciBpbXBvcnQgJiYKIAlta2RpciBpbXBvcnQvdHJ1bmsgJiYKIAllY2hvIGhlbGxvID4+IGltcG9ydC90cnVuay9SRUFETUUgJiYKLQlzdm4gaW1wb3J0IC1tIGluaXRpYWwgaW1wb3J0ICIkc3ZucmVwbyIgJiYKKwlzdm5fY21kIGltcG9ydCAtbSBpbml0aWFsIGltcG9ydCAiJHN2bnJlcG8iICYmCiAJcm0gLXJmIGltcG9ydCAmJgotCXN2biBjbyAiJHN2bnJlcG8iL3RydW5rIHRydW5rICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iL3RydW5rIHRydW5rICYmCiAJZWNobyBieWUgYnllID4+IHRydW5rL1JFQURNRSAmJgotCXN2biBybSAtbSAiZ29uZSIgIiRzdm5yZXBvIi90cnVuayAmJgorCXN2bl9jbWQgcm0gLW0gImdvbmUiICIkc3ZucmVwbyIvdHJ1bmsgJiYKIAlybSAtcmYgdHJ1bmsgJiYKIAlta2RpciB0cnVuayAmJgogCWVjaG8gIm5ldyIgPiB0cnVuay9GT0xMT1dNRSAmJgotCXN2biBpbXBvcnQgLW0gIm5ldyB0cnVuayIgdHJ1bmsgIiRzdm5yZXBvIi90cnVuaworCXN2bl9jbWQgaW1wb3J0IC1tICJuZXcgdHJ1bmsiIHRydW5rICIkc3ZucmVwbyIvdHJ1bmsKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgcmVwbyB3aXRoIGdpdCcgJwpkaWZmIC0tZ2l0IGEvdC90OTEwNC1naXQtc3ZuLWZvbGxvdy1wYXJlbnQuc2ggYi90L3Q5MTA0LWdpdC1zdm4tZm9sbG93LXBhcmVudC5zaAppbmRleCBhYjlmYTMyLi5iYmZkN2Y0IDEwMDc1NQotLS0gYS90L3Q5MTA0LWdpdC1zdm4tZm9sbG93LXBhcmVudC5zaAorKysgYi90L3Q5MTA0LWdpdC1zdm4tZm9sbG93LXBhcmVudC5zaApAQCAtMTEsMTggKzExLDE4IEBACiAJY2QgaW1wb3J0ICYmCiAJbWtkaXIgLXAgdHJ1bmsgJiYKIAllY2hvIGhlbGxvID4gdHJ1bmsvcmVhZG1lICYmCi0Jc3ZuIGltcG9ydCAtbSAiaW5pdGlhbCIgLiAiJHN2bnJlcG8iICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gImluaXRpYWwiIC4gIiRzdm5yZXBvIiAmJgogCWNkIC4uICYmCi0Jc3ZuIGNvICIkc3ZucmVwbyIgd2MgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgd2MgJiYKIAljZCB3YyAmJgogCWVjaG8gd29ybGQgPj4gdHJ1bmsvcmVhZG1lICYmCiAJcG9rZSB0cnVuay9yZWFkbWUgJiYKLQlzdm4gY29tbWl0IC1tICJhbm90aGVyIGNvbW1pdCIgJiYKLQlzdm4gdXAgJiYKLQlzdm4gbXYgdHJ1bmsgdGh1bmsgJiYKKwlzdm5fY21kIGNvbW1pdCAtbSAiYW5vdGhlciBjb21taXQiICYmCisJc3ZuX2NtZCB1cCAmJgorCXN2bl9jbWQgbXYgdHJ1bmsgdGh1bmsgJiYKIAllY2hvIGdvb2RieWUgPj4gdGh1bmsvcmVhZG1lICYmCiAJcG9rZSB0aHVuay9yZWFkbWUgJiYKLQlzdm4gY29tbWl0IC1tICJieWUgbm93IiAmJgorCXN2bl9jbWQgY29tbWl0IC1tICJieWUgbm93IiAmJgogCWNkIC4uCiAJJwogCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9sbG93IGRlbGV0ZWQgcGFyZW50JyAnCi0gICAgICAgIChzdm4gY3AgLW0gInJlc3VycmVjdGluZyB0cnVuayBhcyBqdW5rIiBcCisgICAgICAgIChzdm5fY21kIGNwIC1tICJyZXN1cnJlY3RpbmcgdHJ1bmsgYXMganVuayIgXAogICAgICAgICAgICAgICAgIiRzdm5yZXBvIi90cnVua0AyICIkc3ZucmVwbyIvanVuayB8fAogICAgICAgICAgc3ZuIGNwIC1tICJyZXN1cnJlY3RpbmcgdHJ1bmsgYXMganVuayIgXAogICAgICAgICAgICAgICAgLXIyICIkc3ZucmVwbyIvdHJ1bmsgIiRzdm5yZXBvIi9qdW5rKSAmJgpAQCAtOTcsOCArOTcsOCBAQAogICAgICAgICAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvbGxvdyBkZWxldGVkIGRpcmVjdG9yeScgJwotCXN2biBtdiAtbSAiYnllISIgIiRzdm5yZXBvIi9nbG9iL2Jsb2IvaGkgIiRzdm5yZXBvIi9nbG9iL2Jsb2IvYnllICYmCi0Jc3ZuIHJtIC1tICJyZW1vdmUgZ2xvYiIgIiRzdm5yZXBvIi9nbG9iICYmCisJc3ZuX2NtZCBtdiAtbSAiYnllISIgIiRzdm5yZXBvIi9nbG9iL2Jsb2IvaGkgIiRzdm5yZXBvIi9nbG9iL2Jsb2IvYnllICYmCisJc3ZuX2NtZCBybSAtbSAicmVtb3ZlIGdsb2IiICIkc3ZucmVwbyIvZ2xvYiAmJgogCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtaSBnbG9iICIkc3ZucmVwbyIvZ2xvYiAmJgogCWdpdCBzdm4gZmV0Y2ggLWkgZ2xvYiAmJgogCXRlc3QgImBnaXQgY2F0LWZpbGUgYmxvYiByZWZzL3JlbW90ZXMvZ2xvYjpibG9iL2J5ZWAiID0gaGkgJiYKQEAgLTEyMCw3ICsxMjAsNyBAQAogCWNkIGltcG9ydCAmJgogCSAgc3ZuIGltcG9ydCAtbSAicjkyNzAgdGVzdCIgLiAiJHN2bnJlcG8iL3I5MjcwICYmCiAJY2QgLi4gJiYKLQlzdm4gY28gIiRzdm5yZXBvIi9yOTI3MC90cnVuay9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcGVybCByOTI3MCAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIi9yOTI3MC90cnVuay9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcGVybCByOTI3MCAmJgogCWNkIHI5MjcwICYmCiAJICBzdm4gbWtkaXIgbmF0aXZlICYmCiAJICBzdm4gbXYgdCBuYXRpdmUvdCAmJgpAQCAtMTM4LDcgKzEzOCw3IEBACiAJJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICJ0cmFjayBpbml0aWFsIGNoYW5nZSBpZiBpdCB3YXMgb25seSBtYWRlIHRvIHBhcmVudCIgJwotCXN2biBjcCAtbSAid2hlZWUhIiAiJHN2bnJlcG8iL3I5MjcwL3RydW5rICIkc3ZucmVwbyIvcjkyNzAvZHJ1bmsgJiYKKwlzdm5fY21kIGNwIC1tICJ3aGVlZSEiICIkc3ZucmVwbyIvcjkyNzAvdHJ1bmsgIiRzdm5yZXBvIi9yOTI3MC9kcnVuayAmJgogCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtaSByOTI3MC1kIFwKIAkgICIkc3ZucmVwbyIvcjkyNzAvZHJ1bmsvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3BlcmwvbmF0aXZlL3QgJiYKIAlnaXQgc3ZuIGZldGNoIC1pIHI5MjcwLWQgJiYKQEAgLTE1MiwzMSArMTUyLDMxIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICJmb2xsb3ctcGFyZW50IGlzIGF0b21pYyIgJwogCSgKIAkJY2Qgd2MgJiYKLQkJc3ZuIHVwICYmCi0JCXN2biBta2RpciBzdHVuayAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgbWtkaXIgc3R1bmsgJiYKIAkJZWNobyAidHJ1bmsgc3R1bmsiID4gc3R1bmsvcmVhZG1lICYmCi0JCXN2biBhZGQgc3R1bmsvcmVhZG1lICYmCi0JCXN2biBjaSAtbSAidHJ1bmsgc3R1bmsiICYmCisJCXN2bl9jbWQgYWRkIHN0dW5rL3JlYWRtZSAmJgorCQlzdm5fY21kIGNpIC1tICJ0cnVuayBzdHVuayIgJiYKIAkJZWNobyAic3R1bmsgbGlrZSBqdW5rIiA+PiBzdHVuay9yZWFkbWUgJiYKLQkJc3ZuIGNpIC1tICJyZWFsbHkgc3R1bmsiICYmCisJCXN2bl9jbWQgY2kgLW0gInJlYWxseSBzdHVuayIgJiYKIAkJZWNobyAic3Rpbmsgc3Rhbmsgc3R1bmsiID4+IHN0dW5rL3JlYWRtZSAmJgotCQlzdm4gY2kgLW0gImV2ZW4gdGhlIGdyaW5jaCBhZ3JlZXMiCisJCXN2bl9jbWQgY2kgLW0gImV2ZW4gdGhlIGdyaW5jaCBhZ3JlZXMiCiAJKSAmJgotCXN2biBjb3B5IC1tICJzdHVuayBmbHVua2VkIiAiJHN2bnJlcG8iL3N0dW5rICIkc3ZucmVwbyIvZmx1bmsgJiYKKwlzdm5fY21kIGNvcHkgLW0gInN0dW5rIGZsdW5rZWQiICIkc3ZucmVwbyIvc3R1bmsgIiRzdm5yZXBvIi9mbHVuayAmJgogCXsgc3ZuIGNwIC1tICJlYXJseSBzdHVuayBmbHVua2VkIHRvbyIgXAogCQkiJHN2bnJlcG8iL3N0dW5rQDE3ICIkc3ZucmVwbyIvZmx1bmtlZCB8fAotCXN2biBjcCAtbSAiZWFybHkgc3R1bmsgZmx1bmtlZCB0b28iIFwKKwlzdm5fY21kIGNwIC1tICJlYXJseSBzdHVuayBmbHVua2VkIHRvbyIgXAogCQktcjE3ICIkc3ZucmVwbyIvc3R1bmsgIiRzdm5yZXBvIi9mbHVua2VkOyB9ICYmCiAJZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsIC1pIHN0dW5rICIkc3ZucmVwbyIvc3R1bmsgJiYKIAlnaXQgc3ZuIGZldGNoIC1pIHN0dW5rICYmCiAJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL2ZsdW5rQDE4IHJlZnMvcmVtb3Rlcy9zdHVua34yICYmCiAJZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9yZW1vdGVzL3N0dW5rICYmCiAJZ2l0IGNvbmZpZyAtLXVuc2V0IHN2bi1yZW1vdGUuc3ZuLmZldGNoIHN0dW5rICYmCi0JbWtkaXIgLXAgIiRHSVRfRElSIi9zdm4vZmx1bmtAMTggJiYKLQlyZXZfbWFwPSQoY2QgIiRHSVRfRElSIi9zdm4vc3R1bmsgJiYgbHMgLnJldl9tYXAqKSAmJgotCWRkIGlmPSIkR0lUX0RJUiIvc3ZuL3N0dW5rLyRyZXZfbWFwIFwKLQkgICBvZj0iJEdJVF9ESVIiL3N2bi9mbHVua0AxOC8kcmV2X21hcCBicz0yNCBjb3VudD0xICYmCi0Jcm0gLXJmICIkR0lUX0RJUiIvc3ZuL3N0dW5rICYmCisJbWtkaXIgLXAgIiRHSVRfRElSIi9zdm4vcmVmcy9yZW1vdGVzL2ZsdW5rQDE4ICYmCisJcmV2X21hcD0kKGNkICIkR0lUX0RJUiIvc3ZuL3JlZnMvcmVtb3Rlcy9zdHVuayAmJiBscyAucmV2X21hcCopICYmCisJZGQgaWY9IiRHSVRfRElSIi9zdm4vcmVmcy9yZW1vdGVzL3N0dW5rLyRyZXZfbWFwIFwKKwkgICBvZj0iJEdJVF9ESVIiL3N2bi9yZWZzL3JlbW90ZXMvZmx1bmtAMTgvJHJldl9tYXAgYnM9MjQgY291bnQ9MSAmJgorCXJtIC1yZiAiJEdJVF9ESVIiL3N2bi9yZWZzL3JlbW90ZXMvc3R1bmsgJiYKIAlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgZmx1bmsgIiRzdm5yZXBvIi9mbHVuayAmJgogCWdpdCBzdm4gZmV0Y2ggLWkgZmx1bmsgJiYKIAlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgc3R1bmsgIiRzdm5yZXBvIi9zdHVuayAmJgpAQCAtMTkyLDcgKzE5Miw3IEBACiAJJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICJ0cmFjayBtdWx0aS1wYXJlbnQgcGF0aHMiICcKLQlzdm4gY3AgLW0gInJlc3VycmVjdCAvZ2xvYiIgIiRzdm5yZXBvIi9yOTI3MCAiJHN2bnJlcG8iL2dsb2IgJiYKKwlzdm5fY21kIGNwIC1tICJyZXN1cnJlY3QgL2dsb2IiICIkc3ZucmVwbyIvcjkyNzAgIiRzdm5yZXBvIi9nbG9iICYmCiAJZ2l0IHN2biBtdWx0aS1mZXRjaCAmJgogCXRlc3QgYGdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2dsb2IgfCBcCiAJICAgICAgIGdyZXAgIl5wYXJlbnQgIiB8IHdjIC1sYCAtZXEgMgpkaWZmIC0tZ2l0IGEvdC90OTEwNS1naXQtc3ZuLWNvbW1pdC1kaWZmLnNoIGIvdC90OTEwNS1naXQtc3ZuLWNvbW1pdC1kaWZmLnNoCmluZGV4IGJhOTlhYmIuLmRkNDhlOWMgMTAwNzU1Ci0tLSBhL3QvdDkxMDUtZ2l0LXN2bi1jb21taXQtZGlmZi5zaAorKysgYi90L3Q5MTA1LWdpdC1zdm4tY29tbWl0LWRpZmYuc2gKQEAgLTgsNyArOCw3IEBACiAJbWtkaXIgaW1wb3J0ICYmCiAJY2QgaW1wb3J0ICYmCiAJZWNobyBoZWxsbyA+IHJlYWRtZSAmJgotCXN2biBpbXBvcnQgLW0gImluaXRpYWwiIC4gIiRzdm5yZXBvIiAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICJpbml0aWFsIiAuICIkc3ZucmVwbyIgJiYKIAljZCAuLiAmJgogCWVjaG8gaGVsbG8gPiByZWFkbWUgJiYKIAlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHJlYWRtZSAmJgpAQCAtMjcsMTYgKzI3LDE2IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHRoZSBjb21taXQtZGlmZiBjb21tYW5kJyAnCiAJdGVzdCAtbiAiJHByZXYiICYmIHRlc3QgLW4gIiRoZWFkIiAmJgogCWdpdCBzdm4gY29tbWl0LWRpZmYgLXIxICIkcHJldiIgIiRoZWFkIiAiJHN2bnJlcG8iICYmCi0Jc3ZuIGNvICIkc3ZucmVwbyIgd2MgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgd2MgJiYKIAljbXAgcmVhZG1lIHdjL3JlYWRtZQogCScKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0LWRpZmYgdG8gYSBzdWItZGlyZWN0b3J5ICh3aXRoIGdpdCBzdm4gY29uZmlnKScgJwotCXN2biBpbXBvcnQgLW0gInN1Yi1kaXJlY3RvcnkiIGltcG9ydCAiJHN2bnJlcG8iL3N1YmRpciAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICJzdWItZGlyZWN0b3J5IiBpbXBvcnQgIiRzdm5yZXBvIi9zdWJkaXIgJiYKIAlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgIiRzdm5yZXBvIi9zdWJkaXIgJiYKIAlnaXQgc3ZuIGZldGNoICYmCiAJZ2l0IHN2biBjb21taXQtZGlmZiAtcjMgIiRwcmV2IiAiJGhlYWQiICYmCi0Jc3ZuIGNhdCAiJHN2bnJlcG8iL3N1YmRpci9yZWFkbWUgPiByZWFkbWUuMiAmJgorCXN2bl9jbWQgY2F0ICIkc3ZucmVwbyIvc3ViZGlyL3JlYWRtZSA+IHJlYWRtZS4yICYmCiAJY21wIHJlYWRtZSByZWFkbWUuMgogCScKIApkaWZmIC0tZ2l0IGEvdC90OTEwNi1naXQtc3ZuLWNvbW1pdC1kaWZmLWNsb2JiZXIuc2ggYi90L3Q5MTA2LWdpdC1zdm4tY29tbWl0LWRpZmYtY2xvYmJlci5zaAppbmRleCA2ZWIwZmQ4Li4xMmYyMWI3IDEwMDc1NQotLS0gYS90L3Q5MTA2LWdpdC1zdm4tY29tbWl0LWRpZmYtY2xvYmJlci5zaAorKysgYi90L3Q5MTA2LWdpdC1zdm4tY29tbWl0LWRpZmYtY2xvYmJlci5zaApAQCAtOCwxOCArOCwxOCBAQAogCW1rZGlyIGltcG9ydCAmJgogCWNkIGltcG9ydCAmJgogCWVjaG8gaW5pdGlhbCA+IGZpbGUgJiYKLQlzdm4gaW1wb3J0IC1tICJpbml0aWFsIiAuICIkc3ZucmVwbyIgJiYKKwlzdm5fY21kIGltcG9ydCAtbSAiaW5pdGlhbCIgLiAiJHN2bnJlcG8iICYmCiAJY2QgLi4gJiYKIAllY2hvIGluaXRpYWwgPiBmaWxlICYmCiAJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlICYmCiAJZ2l0IGNvbW1pdCAtYSAtbSAiaW5pdGlhbCIKIAknCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgY2hhbmdlIGZyb20gc3ZuIHNpZGUnICcKLQlzdm4gY28gIiRzdm5yZXBvIiB0LnN2biAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIiB0LnN2biAmJgogCWNkIHQuc3ZuICYmCiAJZWNobyBzZWNvbmQgbGluZSBmcm9tIHN2biA+PiBmaWxlICYmCiAJcG9rZSBmaWxlICYmCi0Jc3ZuIGNvbW1pdCAtbSAic2Vjb25kIGxpbmUgZnJvbSBzdm4iICYmCisJc3ZuX2NtZCBjb21taXQgLW0gInNlY29uZCBsaW5lIGZyb20gc3ZuIiAmJgogCWNkIC4uICYmCiAJcm0gLXJmIHQuc3ZuCiAJJwpAQCAtNDMsMTEgKzQzLDExIEBACiAJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIgJiYKIAlnaXQgc3ZuIGZldGNoICYmCiAJZ2l0IHJlc2V0IC0taGFyZCByZWZzLyR7cmVtb3Rlc19naXRfc3ZufSAmJgotCXN2biBjbyAiJHN2bnJlcG8iIHQuc3ZuICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHQuc3ZuICYmCiAJY2QgdC5zdm4gJiYKIAllY2hvIGZvdXJ0aCBsaW5lIGZyb20gc3ZuID4+IGZpbGUgJiYKIAlwb2tlIGZpbGUgJiYKLQlzdm4gY29tbWl0IC1tICJmb3VydGggbGluZSBmcm9tIHN2biIgJiYKKwlzdm5fY21kIGNvbW1pdCAtbSAiZm91cnRoIGxpbmUgZnJvbSBzdm4iICYmCiAJY2QgLi4gJiYKIAlybSAtcmYgdC5zdm4gJiYKIAllY2hvICJmb3VydGggbGluZSBmcm9tIGdpdCIgPj4gZmlsZSAmJgpAQCAtNjcsMTEgKzY3LDExIEBACiAJIgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgYW5vdGhlciBjaGFuZ2UgZnJvbSBzdm4gc2lkZScgJwotCXN2biBjbyAiJHN2bnJlcG8iIHQuc3ZuICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHQuc3ZuICYmCiAJY2QgdC5zdm4gJiYKIAkJZWNobyB0aGlyZCBsaW5lIGZyb20gc3ZuID4+IGZpbGUgJiYKIAkJcG9rZSBmaWxlICYmCi0JCXN2biBjb21taXQgLW0gInRoaXJkIGxpbmUgZnJvbSBzdm4iICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJ0aGlyZCBsaW5lIGZyb20gc3ZuIiAmJgogCWNkIC4uICYmCiAJcm0gLXJmIHQuc3ZuCiAJJwpkaWZmIC0tZ2l0IGEvdC90OTEwNy1naXQtc3ZuLW1pZ3JhdGUuc2ggYi90L3Q5MTA3LWdpdC1zdm4tbWlncmF0ZS5zaAppbmRleCBhY2FkMTZhLi45MDFiOGUwIDEwMDc1NQotLS0gYS90L3Q5MTA3LWdpdC1zdm4tbWlncmF0ZS5zaAorKysgYi90L3Q5MTA3LWdpdC1zdm4tbWlncmF0ZS5zaApAQCAtMTIsMTMgKzEyLDExIEBACiAJCQlta2RpciAtcCAkaSAmJiBcCiAJCQllY2hvIGhlbGxvID4+ICRpL1JFQURNRSB8fCBleGl0IDEKIAkJZG9uZSAmJiBcCi0JCXN2biBpbXBvcnQgLW0gdGVzdCAuICIkc3ZucmVwbyIKKwkJc3ZuX2NtZCBpbXBvcnQgLW0gdGVzdCAuICIkc3ZucmVwbyIKIAkJY2QgLi4gJiYKIAlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiAmJgogCWdpdCBzdm4gZmV0Y2ggJiYKLQltdiAiJEdJVF9ESVIiL3N2bi8qICIkR0lUX0RJUiIvICYmCi0JbXYgIiRHSVRfRElSIi9zdm4vLm1ldGFkYXRhICIkR0lUX0RJUiIvICYmCi0Jcm1kaXIgIiRHSVRfRElSIi9zdm4gJiYKKwlybSAtcmYgIiRHSVRfRElSIi9zdm4gJiYKIAlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2dpdC1zdm4tSEVBRCByZWZzLyR7cmVtb3Rlc19naXRfc3ZufSAmJgogCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvc3ZuLUhFQUQgcmVmcy8ke3JlbW90ZXNfZ2l0X3N2bn0gJiYKIAlnaXQgdXBkYXRlLXJlZiAtZCByZWZzLyR7cmVtb3Rlc19naXRfc3ZufSByZWZzLyR7cmVtb3Rlc19naXRfc3ZufQpAQCAtNTYsNyArNTQsMTUgQEAKIAlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLmZldGNoICJicmFuY2hlcy9iOnJlZnMvcmVtb3Rlcy9iIiAmJgogCWZvciBpIGluIHRhZ3MvMC4xIHRhZ3MvMC4yIHRhZ3MvMC4zOyBkbwogCQlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLmZldGNoIFwKLQkJICAgICAgICAgICAgICAgICAkaTpyZWZzL3JlbW90ZXMvJGkgfHwgZXhpdCAxOyBkb25lCisJCSAgICAgICAgICAgICAgICAgJGk6cmVmcy9yZW1vdGVzLyRpIHx8IGV4aXQgMTsgZG9uZSAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHN2bi1yZW1vdGUuc3ZuLmZldGNoID4gZmV0Y2gub3V0ICYmCisJZ3JlcCAiXnRydW5rOnJlZnMvcmVtb3Rlcy90cnVuayQiIGZldGNoLm91dCAmJgorCWdyZXAgIl5icmFuY2hlcy9hOnJlZnMvcmVtb3Rlcy9hJCIgZmV0Y2gub3V0ICYmCisJZ3JlcCAiXmJyYW5jaGVzL2I6cmVmcy9yZW1vdGVzL2IkIiBmZXRjaC5vdXQgJiYKKwlncmVwICJedGFncy8wXC4xOnJlZnMvcmVtb3Rlcy90YWdzLzBcLjEkIiBmZXRjaC5vdXQgJiYKKwlncmVwICJedGFncy8wXC4yOnJlZnMvcmVtb3Rlcy90YWdzLzBcLjIkIiBmZXRjaC5vdXQgJiYKKwlncmVwICJedGFncy8wXC4zOnJlZnMvcmVtb3Rlcy90YWdzLzBcLjMkIiBmZXRjaC5vdXQgJiYKKwlncmVwICJeOnJlZnMvJHtyZW1vdGVzX2dpdF9zdm59IiBmZXRjaC5vdXQKIAknCiAKICMgcmVmcyBzaG91bGQgYWxsIGJlIGRpZmZlcmVudCwgYnV0IHRoZSB0cmVlcyBzaG91bGQgYWxsIGJlIHRoZSBzYW1lOgpAQCAtNzksMzYgKzg1LDM2IEBACiAJcm0gLXJmICIkR0lUX0RJUiIvc3ZuICYmCiAJZm9yIGkgaW4gYGNhdCBmZXRjaC5vdXRgOyBkbwogCQlwYXRoPWBleHByICRpIDogIlwoW146XSpcKTouKiQiYAotCQlyZWY9YGV4cHIgJGkgOiAiW146XSo6cmVmcy9yZW1vdGVzL1woLipcKSQiYAorCQlyZWY9YGV4cHIgJGkgOiAiW146XSo6XChyZWZzL3JlbW90ZXMvLipcKSQiYAogCQlpZiB0ZXN0IC16ICIkcmVmIjsgdGhlbiBjb250aW51ZTsgZmkKIAkJaWYgdGVzdCAtbiAiJHBhdGgiOyB0aGVuIHBhdGg9Ii8kcGF0aCI7IGZpCiAJCSggbWtkaXIgLXAgIiRHSVRfRElSIi9zdm4vJHJlZi9pbmZvLyAmJgogCQllY2hvICIkc3ZucmVwbyIkcGF0aCA+ICIkR0lUX0RJUiIvc3ZuLyRyZWYvaW5mby91cmwgKSB8fCBleGl0IDE7CiAJZG9uZSAmJgogCWdpdCBzdm4gbWlncmF0ZSAtLW1pbmltaXplICYmCi0JdGVzdCAteiAiYGdpdCBjb25maWcgLWwgfGdyZXAgLXYgIl5zdm4tcmVtb3RlXC5naXQtc3ZuXC4iYCIgJiYKKwl0ZXN0IC16ICJgZ2l0IGNvbmZpZyAtbCB8IGdyZXAgIl5zdm4tcmVtb3RlXC5naXQtc3ZuXC4iYCIgJiYKIAlnaXQgY29uZmlnIC0tZ2V0LWFsbCBzdm4tcmVtb3RlLnN2bi5mZXRjaCA+IGZldGNoLm91dCAmJgogCWdyZXAgIl50cnVuazpyZWZzL3JlbW90ZXMvdHJ1bmskIiBmZXRjaC5vdXQgJiYKIAlncmVwICJeYnJhbmNoZXMvYTpyZWZzL3JlbW90ZXMvYSQiIGZldGNoLm91dCAmJgogCWdyZXAgIl5icmFuY2hlcy9iOnJlZnMvcmVtb3Rlcy9iJCIgZmV0Y2gub3V0ICYmCiAJZ3JlcCAiXnRhZ3MvMFwuMTpyZWZzL3JlbW90ZXMvdGFncy8wXC4xJCIgZmV0Y2gub3V0ICYmCiAJZ3JlcCAiXnRhZ3MvMFwuMjpyZWZzL3JlbW90ZXMvdGFncy8wXC4yJCIgZmV0Y2gub3V0ICYmCi0JZ3JlcCAiXnRhZ3MvMFwuMzpyZWZzL3JlbW90ZXMvdGFncy8wXC4zJCIgZmV0Y2gub3V0CisJZ3JlcCAiXnRhZ3MvMFwuMzpyZWZzL3JlbW90ZXMvdGFncy8wXC4zJCIgZmV0Y2gub3V0ICYmCiAJZ3JlcCAiXjpyZWZzLyR7cmVtb3Rlc19naXRfc3ZufSIgZmV0Y2gub3V0CiAJJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICAiLnJldl9kYiBhdXRvLWNvbnZlcnRlZCB0byAucmV2X21hcC5VVUlEIiAnCiAJZ2l0IHN2biBmZXRjaCAtaSB0cnVuayAmJgotCXRlc3QgLXogIiQobHMgIiRHSVRfRElSIi9zdm4vdHJ1bmsvLnJldl9kYi4qIDI+L2Rldi9udWxsKSIgJiYKLQlleHBlY3Q9IiQobHMgIiRHSVRfRElSIi9zdm4vdHJ1bmsvLnJldl9tYXAuKikiICYmCisJdGVzdCAteiAiJChscyAiJEdJVF9ESVIiL3N2bi9yZWZzL3JlbW90ZXMvdHJ1bmsvLnJldl9kYi4qIDI+L2Rldi9udWxsKSIgJiYKKwlleHBlY3Q9IiQobHMgIiRHSVRfRElSIi9zdm4vcmVmcy9yZW1vdGVzL3RydW5rLy5yZXZfbWFwLiopIiAmJgogCXRlc3QgLW4gIiRleHBlY3QiICYmCiAJcmV2X2RiPSIkKGVjaG8gJGV4cGVjdCB8IHNlZCAtZSAicyxfbWFwLF9kYiwiKSIgJiYKIAljb252ZXJ0X3RvX3Jldl9kYiAiJGV4cGVjdCIgIiRyZXZfZGIiICYmCiAJcm0gLWYgIiRleHBlY3QiICYmCiAJdGVzdCAtZiAiJHJldl9kYiIgJiYKIAlnaXQgc3ZuIGZldGNoIC1pIHRydW5rICYmCi0JdGVzdCAteiAiJChscyAiJEdJVF9ESVIiL3N2bi90cnVuay8ucmV2X2RiLiogMj4vZGV2L251bGwpIiAmJgotCXRlc3QgISAtZSAiJEdJVF9ESVIiL3N2bi90cnVuay8ucmV2X2RiICYmCisJdGVzdCAteiAiJChscyAiJEdJVF9ESVIiL3N2bi9yZWZzL3JlbW90ZXMvdHJ1bmsvLnJldl9kYi4qIDI+L2Rldi9udWxsKSIgJiYKKwl0ZXN0ICEgLWUgIiRHSVRfRElSIi9zdm4vcmVmcy9yZW1vdGVzL3RydW5rLy5yZXZfZGIgJiYKIAl0ZXN0IC1mICIkZXhwZWN0IgogCScKIApkaWZmIC0tZ2l0IGEvdC90OTEwOC1naXQtc3ZuLWdsb2Iuc2ggYi90L3Q5MTA4LWdpdC1zdm4tZ2xvYi5zaAppbmRleCBkODU4MmIxLi5kNzMyZDMxIDEwMDc1NQotLS0gYS90L3Q5MTA4LWdpdC1zdm4tZ2xvYi5zaAorKysgYi90L3Q5MTA4LWdpdC1zdm4tZ2xvYi5zaApAQCAtMTQsMzAgKzE0LDMwIEBACiAJbWtkaXIgLXAgdHJ1bmsvc3JjL2EgdHJ1bmsvc3JjL2IgdHJ1bmsvZG9jICYmCiAJZWNobyAiaGVsbG8gd29ybGQiID4gdHJ1bmsvc3JjL2EvcmVhZG1lICYmCiAJZWNobyAiZ29vZGJ5ZSB3b3JsZCIgPiB0cnVuay9zcmMvYi9yZWFkbWUgJiYKLQlzdm4gaW1wb3J0IC1tICJpbml0aWFsIiB0cnVuayAiJHN2bnJlcG8iL3RydW5rICYmCi0Jc3ZuIGNvICIkc3ZucmVwbyIgdG1wICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gImluaXRpYWwiIHRydW5rICIkc3ZucmVwbyIvdHJ1bmsgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgdG1wICYmCiAJKAogCQljZCB0bXAgJiYKIAkJbWtkaXIgYnJhbmNoZXMgdGFncyAmJgotCQlzdm4gYWRkIGJyYW5jaGVzIHRhZ3MgJiYKLQkJc3ZuIGNwIHRydW5rIGJyYW5jaGVzL3N0YXJ0ICYmCi0JCXN2biBjb21taXQgLW0gInN0YXJ0IGEgbmV3IGJyYW5jaCIgJiYKLQkJc3ZuIHVwICYmCisJCXN2bl9jbWQgYWRkIGJyYW5jaGVzIHRhZ3MgJiYKKwkJc3ZuX2NtZCBjcCB0cnVuayBicmFuY2hlcy9zdGFydCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAic3RhcnQgYSBuZXcgYnJhbmNoIiAmJgorCQlzdm5fY21kIHVwICYmCiAJCWVjaG8gImhpIiA+PiBicmFuY2hlcy9zdGFydC9zcmMvYi9yZWFkbWUgJiYKIAkJcG9rZSBicmFuY2hlcy9zdGFydC9zcmMvYi9yZWFkbWUgJiYKIAkJZWNobyAiaGV5IiA+PiBicmFuY2hlcy9zdGFydC9zcmMvYS9yZWFkbWUgJiYKIAkJcG9rZSBicmFuY2hlcy9zdGFydC9zcmMvYS9yZWFkbWUgJiYKLQkJc3ZuIGNvbW1pdCAtbSAiaGkiICYmCi0JCXN2biB1cCAmJgotCQlzdm4gY3AgYnJhbmNoZXMvc3RhcnQgdGFncy9lbmQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImhpIiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgY3AgYnJhbmNoZXMvc3RhcnQgdGFncy9lbmQgJiYKIAkJZWNobyAiYnllIiA+PiB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKIAkJcG9rZSB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKIAkJZWNobyAiYXllIiA+PiB0YWdzL2VuZC9zcmMvYS9yZWFkbWUgJiYKIAkJcG9rZSB0YWdzL2VuZC9zcmMvYS9yZWFkbWUgJiYKLQkJc3ZuIGNvbW1pdCAtbSAidGhlIGVuZCIgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInRoZSBlbmQiICYmCiAJCWVjaG8gImJ5ZWJ5ZSIgPj4gdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCiAJCXBva2UgdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCi0JCXN2biBjb21taXQgLW0gIm5vdGhpbmcgdG8gc2VlIGhlcmUiCisJCXN2bl9jbWQgY29tbWl0IC1tICJub3RoaW5nIHRvIHNlZSBoZXJlIgogCSkgJiYKIAlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLnVybCAiJHN2bnJlcG8iICYmCiAJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCkBAIC03Miw3ICs3Miw3IEBACiAJCWNkIHRtcCAmJgogCQllY2hvICJ0cnkgdHJ5IiA+PiB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKIAkJcG9rZSB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKLQkJc3ZuIGNvbW1pdCAtbSAidHJ5IHRvIHRyeSIKKwkJc3ZuX2NtZCBjb21taXQgLW0gInRyeSB0byB0cnkiCiAJKSAmJgogCWdpdCBzdm4gZmV0Y2ggdHdvICYmCiAJdGVzdCBgZ2l0IHJldi1saXN0IHJlZnMvcmVtb3Rlcy90d28vdGFncy9lbmQgfCB3YyAtbGAgLWVxIDYgJiYKQEAgLTEwMiw3ICsxMDIsNyBAQAogCQljZCB0bXAgJiYKIAkJZWNobyAidHJ5IHRyeSIgPj4gdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCiAJCXBva2UgdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCi0JCXN2biBjb21taXQgLW0gInRyeSB0byB0cnkiCisJCXN2bl9jbWQgY29tbWl0IC1tICJ0cnkgdG8gdHJ5IgogCSkgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIGZldGNoIHRocmVlIDI+IHN0ZGVyci50aHJlZSAmJgogCXRlc3RfY21wIGV4cGVjdC50aHJlZSBzdGRlcnIudGhyZWUKZGlmZiAtLWdpdCBhL3QvdDkxMDktZ2l0LXN2bi1tdWx0aS1nbG9iLnNoIGIvdC90OTEwOS1naXQtc3ZuLW11bHRpLWdsb2Iuc2gKaW5kZXggOGY3OWMzZi4uYzMxOGY5ZiAxMDA3NTUKLS0tIGEvdC90OTEwOS1naXQtc3ZuLW11bHRpLWdsb2Iuc2gKKysrIGIvdC90OTEwOS1naXQtc3ZuLW11bHRpLWdsb2Iuc2gKQEAgLTE0LDMwICsxNCwzMCBAQAogCW1rZGlyIC1wIHRydW5rL3NyYy9hIHRydW5rL3NyYy9iIHRydW5rL2RvYyAmJgogCWVjaG8gImhlbGxvIHdvcmxkIiA+IHRydW5rL3NyYy9hL3JlYWRtZSAmJgogCWVjaG8gImdvb2RieWUgd29ybGQiID4gdHJ1bmsvc3JjL2IvcmVhZG1lICYmCi0Jc3ZuIGltcG9ydCAtbSAiaW5pdGlhbCIgdHJ1bmsgIiRzdm5yZXBvIi90cnVuayAmJgotCXN2biBjbyAiJHN2bnJlcG8iIHRtcCAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICJpbml0aWFsIiB0cnVuayAiJHN2bnJlcG8iL3RydW5rICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHRtcCAmJgogCSgKIAkJY2QgdG1wICYmCiAJCW1rZGlyIGJyYW5jaGVzIGJyYW5jaGVzL3YxIHRhZ3MgJiYKLQkJc3ZuIGFkZCBicmFuY2hlcyB0YWdzICYmCi0JCXN2biBjcCB0cnVuayBicmFuY2hlcy92MS9zdGFydCAmJgotCQlzdm4gY29tbWl0IC1tICJzdGFydCBhIG5ldyBicmFuY2giICYmCi0JCXN2biB1cCAmJgorCQlzdm5fY21kIGFkZCBicmFuY2hlcyB0YWdzICYmCisJCXN2bl9jbWQgY3AgdHJ1bmsgYnJhbmNoZXMvdjEvc3RhcnQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInN0YXJ0IGEgbmV3IGJyYW5jaCIgJiYKKwkJc3ZuX2NtZCB1cCAmJgogCQllY2hvICJoaSIgPj4gYnJhbmNoZXMvdjEvc3RhcnQvc3JjL2IvcmVhZG1lICYmCiAJCXBva2UgYnJhbmNoZXMvdjEvc3RhcnQvc3JjL2IvcmVhZG1lICYmCiAJCWVjaG8gImhleSIgPj4gYnJhbmNoZXMvdjEvc3RhcnQvc3JjL2EvcmVhZG1lICYmCiAJCXBva2UgYnJhbmNoZXMvdjEvc3RhcnQvc3JjL2EvcmVhZG1lICYmCi0JCXN2biBjb21taXQgLW0gImhpIiAmJgotCQlzdm4gdXAgJiYKLQkJc3ZuIGNwIGJyYW5jaGVzL3YxL3N0YXJ0IHRhZ3MvZW5kICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJoaSIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIGNwIGJyYW5jaGVzL3YxL3N0YXJ0IHRhZ3MvZW5kICYmCiAJCWVjaG8gImJ5ZSIgPj4gdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCiAJCXBva2UgdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCiAJCWVjaG8gImF5ZSIgPj4gdGFncy9lbmQvc3JjL2EvcmVhZG1lICYmCiAJCXBva2UgdGFncy9lbmQvc3JjL2EvcmVhZG1lICYmCi0JCXN2biBjb21taXQgLW0gInRoZSBlbmQiICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJ0aGUgZW5kIiAmJgogCQllY2hvICJieWVieWUiID4+IHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgogCQlwb2tlIHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgotCQlzdm4gY29tbWl0IC1tICJub3RoaW5nIHRvIHNlZSBoZXJlIgorCQlzdm5fY21kIGNvbW1pdCAtbSAibm90aGluZyB0byBzZWUgaGVyZSIKIAkpICYmCiAJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi51cmwgIiRzdm5yZXBvIiAmJgogCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggXApAQCAtNzIsNyArNzIsNyBAQAogCQljZCB0bXAgJiYKIAkJZWNobyAidHJ5IHRyeSIgPj4gdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCiAJCXBva2UgdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCi0JCXN2biBjb21taXQgLW0gInRyeSB0byB0cnkiCisJCXN2bl9jbWQgY29tbWl0IC1tICJ0cnkgdG8gdHJ5IgogCSkgJiYKIAlnaXQgc3ZuIGZldGNoIHR3byAmJgogCXRlc3QgYGdpdCByZXYtbGlzdCByZWZzL3JlbW90ZXMvdHdvL3RhZ3MvZW5kIHwgd2MgLWxgIC1lcSA2ICYmCkBAIC05NywyNSArOTcsMjUgQEAKIAkoCiAJCWNkIHRtcCAmJgogCQlta2RpciBicmFuY2hlcy92MiAmJgotCQlzdm4gYWRkIGJyYW5jaGVzL3YyICYmCi0JCXN2biBjcCB0cnVuayBicmFuY2hlcy92Mi9zdGFydCAmJgotCQlzdm4gY29tbWl0IC1tICJBbm90aGVyIHZlcnNpb25lZCBicmFuY2giICYmCi0JCXN2biB1cCAmJgorCQlzdm5fY21kIGFkZCBicmFuY2hlcy92MiAmJgorCQlzdm5fY21kIGNwIHRydW5rIGJyYW5jaGVzL3YyL3N0YXJ0ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJBbm90aGVyIHZlcnNpb25lZCBicmFuY2giICYmCisJCXN2bl9jbWQgdXAgJiYKIAkJZWNobyAiaGVsbG8iID4+IGJyYW5jaGVzL3YyL3N0YXJ0L3NyYy9iL3JlYWRtZSAmJgogCQlwb2tlIGJyYW5jaGVzL3YyL3N0YXJ0L3NyYy9iL3JlYWRtZSAmJgogCQllY2hvICJob3dkeSIgPj4gYnJhbmNoZXMvdjIvc3RhcnQvc3JjL2EvcmVhZG1lICYmCiAJCXBva2UgYnJhbmNoZXMvdjIvc3RhcnQvc3JjL2EvcmVhZG1lICYmCi0JCXN2biBjb21taXQgLW0gIkNoYW5nZWQgMiBpbiB2Mi9zdGFydCIgJiYKLQkJc3ZuIHVwICYmCi0JCXN2biBjcCBicmFuY2hlcy92Mi9zdGFydCB0YWdzL25leHQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIkNoYW5nZWQgMiBpbiB2Mi9zdGFydCIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIGNwIGJyYW5jaGVzL3YyL3N0YXJ0IHRhZ3MvbmV4dCAmJgogCQllY2hvICJieWUiID4+IHRhZ3MvbmV4dC9zcmMvYi9yZWFkbWUgJiYKIAkJcG9rZSB0YWdzL25leHQvc3JjL2IvcmVhZG1lICYmCiAJCWVjaG8gImF5ZSIgPj4gdGFncy9uZXh0L3NyYy9hL3JlYWRtZSAmJgogCQlwb2tlIHRhZ3MvbmV4dC9zcmMvYS9yZWFkbWUgJiYKLQkJc3ZuIGNvbW1pdCAtbSAiYWRkaW5nIG1vcmUiICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJhZGRpbmcgbW9yZSIgJiYKIAkJZWNobyAiYnllYnllIiA+PiB0YWdzL25leHQvc3JjL2IvcmVhZG1lICYmCiAJCXBva2UgdGFncy9uZXh0L3NyYy9iL3JlYWRtZSAmJgotCQlzdm4gY29tbWl0IC1tICJhZGlvcyIKKwkJc3ZuX2NtZCBjb21taXQgLW0gImFkaW9zIgogCSkgJiYKIAlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuZm91ci51cmwgIiRzdm5yZXBvIiAmJgogCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5mb3VyLmZldGNoIHRydW5rOnJlZnMvcmVtb3Rlcy9mb3VyL3RydW5rICYmCkBAIC0xNTEsNyArMTUxLDcgQEAKIAkJY2QgdG1wICYmCiAJCWVjaG8gInRyeSB0cnkiID4+IHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgogCQlwb2tlIHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgotCQlzdm4gY29tbWl0IC1tICJ0cnkgdG8gdHJ5IgorCQlzdm5fY21kIGNvbW1pdCAtbSAidHJ5IHRvIHRyeSIKIAkpICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBmZXRjaCB0aHJlZSAyPiBzdGRlcnIudGhyZWUgJiYKIAl0ZXN0X2NtcCBleHBlY3QudGhyZWUgc3RkZXJyLnRocmVlCmRpZmYgLS1naXQgYS90L3Q5MTEzLWdpdC1zdm4tZGNvbW1pdC1uZXctZmlsZS5zaCBiL3QvdDkxMTMtZ2l0LXN2bi1kY29tbWl0LW5ldy1maWxlLnNoCmluZGV4IGU5YjYxMjguLmU4NDc5Y2UgMTAwNzU1Ci0tLSBhL3QvdDkxMTMtZ2l0LXN2bi1kY29tbWl0LW5ldy1maWxlLnNoCisrKyBiL3QvdDkxMTMtZ2l0LXN2bi1kY29tbWl0LW5ldy1maWxlLnNoCkBAIC0xNSw3ICsxNSw3IEBACiByZXF1aXJlX3N2bnNlcnZlCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHRyYWNraW5nIGFuIGVtcHR5IHJlcG8nICcKLQlzdm4gbWtkaXIgLW0gImVtcHR5IGRpciIgIiRzdm5yZXBvIi9lbXB0eS1kaXIgJiYKKwlzdm5fY21kIG1rZGlyIC1tICJlbXB0eSBkaXIiICIkc3ZucmVwbyIvZW1wdHktZGlyICYmCiAJZWNobyAiW2dlbmVyYWxdIiA+ICIkcmF3c3ZucmVwbyIvY29uZi9zdm5zZXJ2ZS5jb25mICYmCiAJZWNobyBhbm9uLWFjY2VzcyA9IHdyaXRlID4+ICIkcmF3c3ZucmVwbyIvY29uZi9zdm5zZXJ2ZS5jb25mICYmCiAJc3RhcnRfc3Zuc2VydmUgJiYKZGlmZiAtLWdpdCBhL3QvdDkxMTQtZ2l0LXN2bi1kY29tbWl0LW1lcmdlLnNoIGIvdC90OTExNC1naXQtc3ZuLWRjb21taXQtbWVyZ2Uuc2gKaW5kZXggMTdiMjg1NS4uODRmN2M5YiAxMDA3NTUKLS0tIGEvdC90OTExNC1naXQtc3ZuLWRjb21taXQtbWVyZ2Uuc2gKKysrIGIvdC90OTExNC1naXQtc3ZuLWRjb21taXQtbWVyZ2Uuc2gKQEAgLTM1LDEyICszNSwxMiBAQAogfQogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdm4gcmVwb3NpdG9yeScgJwotCXN2biBjbyAiJHN2bnJlcG8iIG15c3Zud29yayAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIiBteXN2bndvcmsgJiYKIAlta2RpciAtcCBteXN2bndvcmsvdHJ1bmsgJiYKIAljZCBteXN2bndvcmsgJiYKIAkJYmlnX3RleHRfYmxvY2sgPj4gdHJ1bmsvUkVBRE1FICYmCi0JCXN2biBhZGQgdHJ1bmsgJiYKLQkJc3ZuIGNpIC1tICJmaXJzdCBjb21taXQiIHRydW5rICYmCisJCXN2bl9jbWQgYWRkIHRydW5rICYmCisJCXN2bl9jbWQgY2kgLW0gImZpcnN0IGNvbW1pdCIgdHJ1bmsgJiYKIAkJY2QgLi4KIAknCiAKZGlmZiAtLWdpdCBhL3QvdDkxMTUtZ2l0LXN2bi1kY29tbWl0LWZ1bmt5LXJlbmFtZXMuc2ggYi90L3Q5MTE1LWdpdC1zdm4tZGNvbW1pdC1mdW5reS1yZW5hbWVzLnNoCmluZGV4IDliZTdhZWYuLjc2Nzc5OWUgMTAwNzU1Ci0tLSBhL3QvdDkxMTUtZ2l0LXN2bi1kY29tbWl0LWZ1bmt5LXJlbmFtZXMuc2gKKysrIGIvdC90OTExNS1naXQtc3ZuLWRjb21taXQtZnVua3ktcmVuYW1lcy5zaApAQCAtMTksNyArMTksNyBAQAogCScKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGZpbGUgaW4gZXhpc3RpbmcgdWdseSBhbmQgZW1wdHkgZGlyJyAnCi0JbWtkaXIgIiN7YmFkX2RpcmVjdG9yeV9uYW1lfSIgJiYKKwlta2RpciAtcCAiI3tiYWRfZGlyZWN0b3J5X25hbWV9IiAmJgogCWVjaG8gaGkgPiAiI3tiYWRfZGlyZWN0b3J5X25hbWV9LyBmb28iICYmCiAJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAiI3tiYWRfZGlyZWN0b3J5X25hbWV9LyBmb28iICYmCiAJZ2l0IGNvbW1pdCAtbSAibmV3IGZpbGUgaW4gdWdseSBwYXJlbnQiICYmCkBAIC0zNyw3ICszNyw3IEBACiAJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBwcmV0dHkgJiYKIAlnaXQgY29tbWl0IC1tICJwcmV0dHkgOngiICYmCiAJZ2l0IHN2biBkY29tbWl0ICYmCi0JbWtkaXIgcmVndWxhcl9kaXJfbmFtZSAmJgorCW1rZGlyIC1wIHJlZ3VsYXJfZGlyX25hbWUgJiYKIAlnaXQgbXYgcHJldHR5IHJlZ3VsYXJfZGlyX25hbWUvcHJldHR5ICYmCiAJZ2l0IGNvbW1pdCAtbSAibW92ZWQgcHJldHR5IGZpbGUiICYmCiAJZ2l0IHN2biBkY29tbWl0CmRpZmYgLS1naXQgYS90L3Q5MTE2LWdpdC1zdm4tbG9nLnNoIGIvdC90OTExNi1naXQtc3ZuLWxvZy5zaAppbmRleCBmZDZkMWQyLi4wMzc0YTc0IDEwMDc1NQotLS0gYS90L3Q5MTE2LWdpdC1zdm4tbG9nLnNoCisrKyBiL3QvdDkxMTYtZ2l0LXN2bi1sb2cuc2gKQEAgLTE0LDcgKzE0LDcgQEAKIAkJCW1rZGlyIC1wICRpICYmIFwKIAkJCWVjaG8gaGVsbG8gPj4gJGkvUkVBRE1FIHx8IGV4aXQgMQogCQlkb25lICYmIFwKLQkJc3ZuIGltcG9ydCAtbSB0ZXN0IC4gIiRzdm5yZXBvIgorCQlzdm5fY21kIGltcG9ydCAtbSB0ZXN0IC4gIiRzdm5yZXBvIgogCQljZCAuLiAmJgogCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iIC1UIHRydW5rIC1iIGJyYW5jaGVzIC10IHRhZ3MgJiYKIAlnaXQgc3ZuIGZldGNoICYmCmRpZmYgLS1naXQgYS90L3Q5MTE3LWdpdC1zdm4taW5pdC1jbG9uZS5zaCBiL3QvdDkxMTctZ2l0LXN2bi1pbml0LWNsb25lLnNoCmluZGV4IGRkZTQ2Y2QuLmI3ZWY5ZTIgMTAwNzU1Ci0tLSBhL3QvdDkxMTctZ2l0LXN2bi1pbml0LWNsb25lLnNoCisrKyBiL3QvdDkxMTctZ2l0LXN2bi1pbml0LWNsb25lLnNoCkBAIC0xNiw3ICsxNiw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdm5yZXBvJyAnCiAJbWtkaXIgcHJvamVjdCBwcm9qZWN0L3RydW5rIHByb2plY3QvYnJhbmNoZXMgcHJvamVjdC90YWdzICYmCiAJZWNobyBmb28gPiBwcm9qZWN0L3RydW5rL2ZvbyAmJgotCXN2biBpbXBvcnQgLW0gIiR0ZXN0X2Rlc2NyaXB0aW9uIiBwcm9qZWN0ICIkc3ZucmVwbyIvcHJvamVjdCAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICIkdGVzdF9kZXNjcmlwdGlvbiIgcHJvamVjdCAiJHN2bnJlcG8iL3Byb2plY3QgJiYKIAlybSAtcmYgcHJvamVjdAogCScKIApkaWZmIC0tZ2l0IGEvdC90OTExOC1naXQtc3ZuLWZ1bmt5LWJyYW5jaC1uYW1lcy5zaCBiL3QvdDkxMTgtZ2l0LXN2bi1mdW5reS1icmFuY2gtbmFtZXMuc2gKaW5kZXggN2E3YzEyOC4uYWM1MmJmZiAxMDA3NTUKLS0tIGEvdC90OTExOC1naXQtc3ZuLWZ1bmt5LWJyYW5jaC1uYW1lcy5zaAorKysgYi90L3Q5MTE4LWdpdC1zdm4tZnVua3ktYnJhbmNoLW5hbWVzLnNoCkBAIC0xMywxMyArMTMsMTMgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2bnJlcG8nICcKIAlta2RpciBwcm9qZWN0IHByb2plY3QvdHJ1bmsgcHJvamVjdC9icmFuY2hlcyBwcm9qZWN0L3RhZ3MgJiYKIAllY2hvIGZvbyA+IHByb2plY3QvdHJ1bmsvZm9vICYmCi0Jc3ZuIGltcG9ydCAtbSAiJHRlc3RfZGVzY3JpcHRpb24iIHByb2plY3QgIiRzdm5yZXBvL3ByIGplY3QiICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gIiR0ZXN0X2Rlc2NyaXB0aW9uIiBwcm9qZWN0ICIkc3ZucmVwby9wciBqZWN0IiAmJgogCXJtIC1yZiBwcm9qZWN0ICYmCi0Jc3ZuIGNwIC1tICJmdW4iICIkc3ZucmVwby9wciBqZWN0L3RydW5rIiBcCisJc3ZuX2NtZCBjcCAtbSAiZnVuIiAiJHN2bnJlcG8vcHIgamVjdC90cnVuayIgXAogCSAgICAgICAgICAgICAgICAiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy9mdW4gcGx1Z2luIiAmJgotCXN2biBjcCAtbSAibW9yZSBmdW4hIiAiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy9mdW4gcGx1Z2luIiBcCisJc3ZuX2NtZCBjcCAtbSAibW9yZSBmdW4hIiAiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy9mdW4gcGx1Z2luIiBcCiAJICAgICAgICAgICAgICAgICAgICAgICIkc3ZucmVwby9wciBqZWN0L2JyYW5jaGVzL21vcmUgZnVuIHBsdWdpbiEiICYmCi0Jc3ZuIGNwIC1tICJzY2FyeSIgIiRzdm5yZXBvL3ByIGplY3QvYnJhbmNoZXMvZnVuIHBsdWdpbiIgXAorCXN2bl9jbWQgY3AgLW0gInNjYXJ5IiAiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy9mdW4gcGx1Z2luIiBcCiAJICAgICAgICAgICAgICAiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy8kc2NhcnlfdXJpIiAmJgogCXN0YXJ0X2h0dHBkCiAJJwpkaWZmIC0tZ2l0IGEvdC90OTExOS1naXQtc3ZuLWluZm8uc2ggYi90L3Q5MTE5LWdpdC1zdm4taW5mby5zaAppbmRleCAyN2RkN2MyLi45NTc0MWNiIDEwMDc1NQotLS0gYS90L3Q5MTE5LWdpdC1zdm4taW5mby5zaAorKysgYi90L3Q5MTE5LWdpdC1zdm4taW5mby5zaApAQCAtNyw3ICs3LDcgQEAKIC4gLi9saWItZ2l0LXN2bi5zaAogCiAjIFRlc3RlZCB3aXRoOiBzdm4sIHZlcnNpb24gMS40LjQgKHIyNTE4OCkKLXY9YHN2biAtLXZlcnNpb24gfCBzZWQgLW4gLWUgJ3MvXnN2biwgdmVyc2lvbiBcKDFcLlswLTldKlwuWzAtOV0qXCkuKiQvXDEvcCdgCit2PWBzdm5fY21kIC0tdmVyc2lvbiB8IHNlZCAtbiAtZSAncy9ec3ZuLCB2ZXJzaW9uIFwoMVwuWzAtOV0qXC5bMC05XSpcKS4qJC9cMS9wJ2AKIGNhc2UgJHYgaW4KIDEuWzQ1XS4qKQogCTs7CkBAIC0zMSw3ICszMSw3IEBACiAJCQlteSAkYXRpbWUgPSAkbXRpbWU7CiAJCQl1dGltZSAkYXRpbWUsICRtdGltZSwgJGdpdF9maWxlOwogCQl9Ci0JJyAiYHN2biBpbmZvICQyIHwgZ3JlcCAnXlRleHQgTGFzdCBVcGRhdGVkOidgIiAiJDEiCisJJyAiYHN2bl9jbWQgaW5mbyAkMiB8IGdyZXAgJ15UZXh0IExhc3QgVXBkYXRlZDonYCIgIiQxIgogfQogCiBxdW90ZWRfc3ZucmVwbz0iJChlY2hvICRzdm5yZXBvIHwgc2VkICdzLyAvJTIwLycpIgpAQCAtNDUsMTQgKzQ1LDE0IEBACiAJCW1rZGlyIGRpcmVjdG9yeSAmJgogCQl0b3VjaCBkaXJlY3RvcnkvLnBsYWNlaG9sZGVyICYmCiAJCWxuIC1zIGRpcmVjdG9yeSBzeW1saW5rLWRpcmVjdG9yeSAmJgotCQlzdm4gaW1wb3J0IC1tICJpbml0aWFsIiAuICIkc3ZucmVwbyIgJiYKKwkJc3ZuX2NtZCBpbXBvcnQgLW0gImluaXRpYWwiIC4gIiRzdm5yZXBvIiAmJgogCWNkIC4uICYmCi0Jc3ZuIGNvICIkc3ZucmVwbyIgc3Zud2MgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgc3Zud2MgJiYKIAljZCBzdm53YyAmJgogCQllY2hvIGZvbyA+IGZvbyAmJgotCQlzdm4gYWRkIGZvbyAmJgotCQlzdm4gY29tbWl0IC1tICJjaGFuZ2Ugb3V0c2lkZSBkaXJlY3RvcnkiICYmCi0JCXN2biB1cGRhdGUgJiYKKwkJc3ZuX2NtZCBhZGQgZm9vICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJjaGFuZ2Ugb3V0c2lkZSBkaXJlY3RvcnkiICYmCisJCXN2bl9jbWQgdXBkYXRlICYmCiAJY2QgLi4gJiYKIAlta2RpciBnaXR3YyAmJgogCWNkIGdpdHdjICYmCkBAIC0xNDMsNyArMTQzLDcgQEAKIAljcCBnaXR3Yy9hZGRlZC1maWxlIHN2bndjL2FkZGVkLWZpbGUgJiYKIAlwdG91Y2ggZ2l0d2MvYWRkZWQtZmlsZSBzdm53Yy9hZGRlZC1maWxlICYmCiAJY2Qgc3Zud2MgJiYKLQkJc3ZuIGFkZCBhZGRlZC1maWxlID4gL2Rldi9udWxsICYmCisJCXN2bl9jbWQgYWRkIGFkZGVkLWZpbGUgPiAvZGV2L251bGwgJiYKIAljZCAuLiAmJgogCShjZCBzdm53Yzsgc3ZuIGluZm8gYWRkZWQtZmlsZSkgPiBleHBlY3RlZC5pbmZvLWFkZGVkLWZpbGUgJiYKIAkoY2QgZ2l0d2M7IGdpdCBzdm4gaW5mbyBhZGRlZC1maWxlKSA+IGFjdHVhbC5pbmZvLWFkZGVkLWZpbGUgJiYKQEAgLTE2MCw3ICsxNjAsNyBAQAogCXB0b3VjaCBnaXR3Yy9hZGRlZC1kaXJlY3Rvcnkgc3Zud2MvYWRkZWQtZGlyZWN0b3J5ICYmCiAJdG91Y2ggZ2l0d2MvYWRkZWQtZGlyZWN0b3J5Ly5wbGFjZWhvbGRlciAmJgogCWNkIHN2bndjICYmCi0JCXN2biBhZGQgYWRkZWQtZGlyZWN0b3J5ID4gL2Rldi9udWxsICYmCisJCXN2bl9jbWQgYWRkIGFkZGVkLWRpcmVjdG9yeSA+IC9kZXYvbnVsbCAmJgogCWNkIC4uICYmCiAJY2QgZ2l0d2MgJiYKIAkJZ2l0IGFkZCBhZGRlZC1kaXJlY3RvcnkgJiYKQEAgLTE4NCw3ICsxODQsNyBAQAogCWNkIC4uICYmCiAJY2Qgc3Zud2MgJiYKIAkJbG4gLXMgYWRkZWQtZmlsZSBhZGRlZC1zeW1saW5rLWZpbGUgJiYKLQkJc3ZuIGFkZCBhZGRlZC1zeW1saW5rLWZpbGUgPiAvZGV2L251bGwgJiYKKwkJc3ZuX2NtZCBhZGQgYWRkZWQtc3ltbGluay1maWxlID4gL2Rldi9udWxsICYmCiAJY2QgLi4gJiYKIAlwdG91Y2ggZ2l0d2MvYWRkZWQtc3ltbGluay1maWxlIHN2bndjL2FkZGVkLXN5bWxpbmstZmlsZSAmJgogCShjZCBzdm53Yzsgc3ZuIGluZm8gYWRkZWQtc3ltbGluay1maWxlKSBcCkBAIC0yMDcsNyArMjA3LDcgQEAKIAljZCAuLiAmJgogCWNkIHN2bndjICYmCiAJCWxuIC1zIGFkZGVkLWRpcmVjdG9yeSBhZGRlZC1zeW1saW5rLWRpcmVjdG9yeSAmJgotCQlzdm4gYWRkIGFkZGVkLXN5bWxpbmstZGlyZWN0b3J5ID4gL2Rldi9udWxsICYmCisJCXN2bl9jbWQgYWRkIGFkZGVkLXN5bWxpbmstZGlyZWN0b3J5ID4gL2Rldi9udWxsICYmCiAJY2QgLi4gJiYKIAlwdG91Y2ggZ2l0d2MvYWRkZWQtc3ltbGluay1kaXJlY3Rvcnkgc3Zud2MvYWRkZWQtc3ltbGluay1kaXJlY3RvcnkgJiYKIAkoY2Qgc3Zud2M7IHN2biBpbmZvIGFkZGVkLXN5bWxpbmstZGlyZWN0b3J5KSBcCkBAIC0yMzMsNyArMjMzLDcgQEAKIAkJZ2l0IHJtIC1mIGZpbGUgPiAvZGV2L251bGwgJiYKIAljZCAuLiAmJgogCWNkIHN2bndjICYmCi0JCXN2biBybSAtLWZvcmNlIGZpbGUgPiAvZGV2L251bGwgJiYKKwkJc3ZuX2NtZCBybSAtLWZvcmNlIGZpbGUgPiAvZGV2L251bGwgJiYKIAljZCAuLiAmJgogCShjZCBzdm53Yzsgc3ZuIGluZm8gZmlsZSkgfAogCXNlZCAtZSAncy9eXChUZXh0IExhc3QgVXBkYXRlZDpcKS4qL1wxIFRFWFQtTEFTVC1VUERBVEVELVNUUklORy8nIFwKQEAgLTI1NCw3ICsyNTQsNyBAQAogCQlnaXQgcm0gLXIgLWYgZGlyZWN0b3J5ID4gL2Rldi9udWxsICYmCiAJY2QgLi4gJiYKIAljZCBzdm53YyAmJgotCQlzdm4gcm0gLS1mb3JjZSBkaXJlY3RvcnkgPiAvZGV2L251bGwgJiYKKwkJc3ZuX2NtZCBybSAtLWZvcmNlIGRpcmVjdG9yeSA+IC9kZXYvbnVsbCAmJgogCWNkIC4uICYmCiAJKGNkIHN2bndjOyBzdm4gaW5mbyBkaXJlY3RvcnkpIHwKIAlzZWQgLWUgJ3MvXlwoVGV4dCBMYXN0IFVwZGF0ZWQ6XCkuKi9cMSBURVhULUxBU1QtVVBEQVRFRC1TVFJJTkcvJyBcCkBAIC0yNzUsNyArMjc1LDcgQEAKIAkJZ2l0IHJtIC1mIHN5bWxpbmstZmlsZSA+IC9kZXYvbnVsbCAmJgogCWNkIC4uICYmCiAJY2Qgc3Zud2MgJiYKLQkJc3ZuIHJtIC0tZm9yY2Ugc3ltbGluay1maWxlID4gL2Rldi9udWxsICYmCisJCXN2bl9jbWQgcm0gLS1mb3JjZSBzeW1saW5rLWZpbGUgPiAvZGV2L251bGwgJiYKIAljZCAuLiAmJgogCShjZCBzdm53Yzsgc3ZuIGluZm8gc3ltbGluay1maWxlKSB8CiAJc2VkIC1lICdzL15cKFRleHQgTGFzdCBVcGRhdGVkOlwpLiovXDEgVEVYVC1MQVNULVVQREFURUQtU1RSSU5HLycgXApAQCAtMjk3LDcgKzI5Nyw3IEBACiAJCWdpdCBybSAtZiBzeW1saW5rLWRpcmVjdG9yeSA+IC9kZXYvbnVsbCAmJgogCWNkIC4uICYmCiAJY2Qgc3Zud2MgJiYKLQkJc3ZuIHJtIC0tZm9yY2Ugc3ltbGluay1kaXJlY3RvcnkgPiAvZGV2L251bGwgJiYKKwkJc3ZuX2NtZCBybSAtLWZvcmNlIHN5bWxpbmstZGlyZWN0b3J5ID4gL2Rldi9udWxsICYmCiAJY2QgLi4gJiYKIAkoY2Qgc3Zud2M7IHN2biBpbmZvIHN5bWxpbmstZGlyZWN0b3J5KSB8CiAJc2VkIC1lICdzL15cKFRleHQgTGFzdCBVcGRhdGVkOlwpLiovXDEgVEVYVC1MQVNULVVQREFURUQtU1RSSU5HLycgXApkaWZmIC0tZ2l0IGEvdC90OTEyMC1naXQtc3ZuLWNsb25lLXdpdGgtcGVyY2VudC1lc2NhcGVzLnNoIGIvdC90OTEyMC1naXQtc3ZuLWNsb25lLXdpdGgtcGVyY2VudC1lc2NhcGVzLnNoCmluZGV4IGVmMmMwNTIuLjlkOWViZDUgMTAwNzU1Ci0tLSBhL3QvdDkxMjAtZ2l0LXN2bi1jbG9uZS13aXRoLXBlcmNlbnQtZXNjYXBlcy5zaAorKysgYi90L3Q5MTIwLWdpdC1zdm4tY2xvbmUtd2l0aC1wZXJjZW50LWVzY2FwZXMuc2gKQEAgLTksMjIgKzksNjkgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2bnJlcG8nICcKIAlta2RpciBwcm9qZWN0IHByb2plY3QvdHJ1bmsgcHJvamVjdC9icmFuY2hlcyBwcm9qZWN0L3RhZ3MgJiYKIAllY2hvIGZvbyA+IHByb2plY3QvdHJ1bmsvZm9vICYmCi0Jc3ZuIGltcG9ydCAtbSAiJHRlc3RfZGVzY3JpcHRpb24iIHByb2plY3QgIiRzdm5yZXBvL3ByIGplY3QiICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gIiR0ZXN0X2Rlc2NyaXB0aW9uIiBwcm9qZWN0ICIkc3ZucmVwby9wciBqZWN0IiAmJgorCXN2bl9jbWQgY3AgLW0gImJyYW5jaCIgIiRzdm5yZXBvL3ByIGplY3QvdHJ1bmsiIFwKKwkgICIkc3ZucmVwby9wciBqZWN0L2JyYW5jaGVzL2IiICYmCisJc3ZuX2NtZCBjcCAtbSAidGFnIiAiJHN2bnJlcG8vcHIgamVjdC90cnVuayIgXAorCSAgIiRzdm5yZXBvL3ByIGplY3QvdGFncy92MSIgJiYKIAlybSAtcmYgcHJvamVjdCAmJgogCXN0YXJ0X2h0dHBkCiAnCiAKLWlmIHRlc3QgIiRTVk5fSFRUUERfUE9SVCIgPSAiIgotdGhlbgotCXRlc3RfZXhwZWN0X2ZhaWx1cmUgJ3Rlc3QgY2xvbmUgd2l0aCBwZXJjZW50IGVzY2FwZXMgLSBuZWVkcyBTVk5fSFRUUERfUE9SVCBzZXQnICdmYWxzZScKLWVsc2UKLQl0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGNsb25lIHdpdGggcGVyY2VudCBlc2NhcGVzJyAnCi0JCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvL3ByJTIwamVjdCIgY2xvbmUgJiYKLQkJY2QgY2xvbmUgJiYKLQkJCWdpdCByZXYtcGFyc2UgcmVmcy8ke3JlbW90ZXNfZ2l0X3N2bn0gJiYKLQkJY2QgLi4KLQknCi1maQordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBjbG9uZSB3aXRoIHBlcmNlbnQgZXNjYXBlcycgJworCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvL3ByJTIwamVjdCIgY2xvbmUgJiYKKwljZCBjbG9uZSAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvJHtyZW1vdGVzX2dpdF9zdm59ICYmCisJY2QgLi4KKycKKworIyBTVk4gd29ya3MgZWl0aGVyIHdheSwgc28gc2hvdWxkIHdlLi4uCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N2biBjaGVja291dCB3aXRoIHBlcmNlbnQgZXNjYXBlcycgJworCXN2bl9jbWQgY2hlY2tvdXQgIiRzdm5yZXBvL3ByJTIwamVjdCIgc3ZuLnBlcmNlbnQgJiYKKwlzdm5fY21kIGNoZWNrb3V0ICIkc3ZucmVwby9wciUyMGplY3QvdHJ1bmsiIHN2bi5wZXJjZW50LnRydW5rCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N2biBjaGVja291dCB3aXRoIHNwYWNlJyAnCisJc3ZuX2NtZCBjaGVja291dCAiJHN2bnJlcG8vcHIgamVjdCIgc3ZuLnNwYWNlICYmCisJc3ZuX2NtZCBjaGVja291dCAiJHN2bnJlcG8vcHIgamVjdC90cnVuayIgc3ZuLnNwYWNlLnRydW5rCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgY2xvbmUgdHJ1bmsgd2l0aCBwZXJjZW50IGVzY2FwZXMgYW5kIG1pbmltaXplLXVybCcgJworCWdpdCBzdm4gY2xvbmUgLS1taW5pbWl6ZS11cmwgIiRzdm5yZXBvL3ByJTIwamVjdC90cnVuayIgbWluaW1pemUgJiYKKwkoCisJCWNkIG1pbmltaXplICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy8ke3JlbW90ZXNfZ2l0X3N2bn0KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgY2xvbmUgdHJ1bmsgd2l0aCBwZXJjZW50IGVzY2FwZXMnICcKKwlnaXQgc3ZuIGNsb25lICIkc3ZucmVwby9wciUyMGplY3QvdHJ1bmsiIHRydW5rICYmCisJKAorCQljZCB0cnVuayAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvJHtyZW1vdGVzX2dpdF9zdm59CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGNsb25lIC0tc3RkbGF5b3V0IHdpdGggcGVyY2VudCBlc2NhcGVzJyAnCisJZ2l0IHN2biBjbG9uZSAtLXN0ZGxheW91dCAiJHN2bnJlcG8vcHIlMjBqZWN0IiBwZXJjZW50ICYmCisJKAorCQljZCBwZXJjZW50ICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RydW5rXjAgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvYl4wICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RhZ3MvdjFeMAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBjbG9uZSAtcyB3aXRoIHVuZXNjYXBlZCBzcGFjZScgJworCWdpdCBzdm4gY2xvbmUgLXMgIiRzdm5yZXBvL3ByIGplY3QiIHNwYWNlICYmCisJKAorCQljZCBzcGFjZSAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90cnVua14wICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2JeMCAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90YWdzL3YxXjAKKwkpCisnCiAKIHN0b3BfaHR0cGQKIApkaWZmIC0tZ2l0IGEvdC90OTEyMi1naXQtc3ZuLWF1dGhvci5zaCBiL3QvdDkxMjItZ2l0LXN2bi1hdXRob3Iuc2gKaW5kZXggMWIxY2Y0Ny4uMzAwMTNiNyAxMDA3NTUKLS0tIGEvdC90OTEyMi1naXQtc3ZuLWF1dGhvci5zaAorKysgYi90L3Q5MTIyLWdpdC1zdm4tYXV0aG9yLnNoCkBAIC00LDEyICs0LDEyIEBACiAuIC4vbGliLWdpdC1zdm4uc2gKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZuIHJlcG9zaXRvcnknICcKLQlzdm4gY2hlY2tvdXQgIiRzdm5yZXBvIiB3b3JrLnN2biAmJgorCXN2bl9jbWQgY2hlY2tvdXQgIiRzdm5yZXBvIiB3b3JrLnN2biAmJgogCSgKIAkJY2Qgd29yay5zdm4gJiYKIAkJZWNobyA+ZmlsZQotCQlzdm4gYWRkIGZpbGUKLQkJc3ZuIGNvbW1pdCAtbSAiZmlyc3QgY29tbWl0IiBmaWxlCisJCXN2bl9jbWQgYWRkIGZpbGUKKwkJc3ZuX2NtZCBjb21taXQgLW0gImZpcnN0IGNvbW1pdCIgZmlsZQogCSkKICcKIApAQCAtNzQsMTAgKzc0LDEwIEBACiAJIyBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHN2biBjb21taXQgbWVzc2FnZXMgd2l0aCBleGNlc3MgYmxhbmsgbGluZXMKIAkoCiAJCWNkIHdvcmsuc3ZuICYmCi0JCXN2biB1cCAmJgorCQlzdm5fY21kIHVwICYmCiAJCQotCQl0ZXN0ICQoc3ZuIGxvZyAtcjI6MiB8IHdjIC1sKSA9IDUgJiYKLQkJdGVzdCAkKHN2biBsb2cgLXI0OjQgfCB3YyAtbCkgPSA3CisJCXRlc3QgJChzdm5fY21kIGxvZyAtcjI6MiB8IHdjIC1sKSA9IDUgJiYKKwkJdGVzdCAkKHN2bl9jbWQgbG9nIC1yNDo0IHwgd2MgLWwpID0gNwogCSkKICcKIApkaWZmIC0tZ2l0IGEvdC90OTEyMy1naXQtc3ZuLXJlYnVpbGQtd2l0aC1yZXdyaXRlcm9vdC5zaCBiL3QvdDkxMjMtZ2l0LXN2bi1yZWJ1aWxkLXdpdGgtcmV3cml0ZXJvb3Quc2gKaW5kZXggY2YwNDE1Mi4uMDQ1NTIxNiAxMDA3NTUKLS0tIGEvdC90OTEyMy1naXQtc3ZuLXJlYnVpbGQtd2l0aC1yZXdyaXRlcm9vdC5zaAorKysgYi90L3Q5MTIzLWdpdC1zdm4tcmVidWlsZC13aXRoLXJld3JpdGVyb290LnNoCkBAIC0xMCw3ICsxMCw3IEBACiBta2RpciBpbXBvcnQKIGNkIGltcG9ydAogCXRvdWNoIGZvbwotCXN2biBpbXBvcnQgLW0gJ2ltcG9ydCBmb3IgZ2l0IHN2bicgLiAiJHN2bnJlcG8iID4vZGV2L251bGwKKwlzdm5fY21kIGltcG9ydCAtbSAnaW1wb3J0IGZvciBnaXQgc3ZuJyAuICIkc3ZucmVwbyIgPi9kZXYvbnVsbAogY2QgLi4KIHJtIC1yZiBpbXBvcnQKIApkaWZmIC0tZ2l0IGEvdC90OTEyNC1naXQtc3ZuLWRjb21taXQtYXV0by1wcm9wcy5zaCBiL3QvdDkxMjQtZ2l0LXN2bi1kY29tbWl0LWF1dG8tcHJvcHMuc2gKaW5kZXggMjYzZGJmNS4uZDZiMDc2ZiAxMDA3NTUKLS0tIGEvdC90OTEyNC1naXQtc3ZuLWRjb21taXQtYXV0by1wcm9wcy5zaAorKysgYi90L3Q5MTI0LWdpdC1zdm4tZGNvbW1pdC1hdXRvLXByb3BzLnNoCkBAIC0yMSw3ICsyMSw3IEBACiAJKAogCQljZCBpbXBvcnQgJiYKIAkJZWNobyBmb28gPmZvbyAmJgotCQlzdm4gaW1wb3J0IC1tICJpbXBvcnQgZm9yIGdpdCBzdm4iIC4gIiRzdm5yZXBvIgorCQlzdm5fY21kIGltcG9ydCAtbSAiaW1wb3J0IGZvciBnaXQgc3ZuIiAuICIkc3ZucmVwbyIKIAkpICYmCiAJcm0gLXJmIGltcG9ydCAmJgogCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iCkBAIC02MSwyMyArNjEsMjMgQEAKICgKIAlta2RpciB3b3JrICYmCiAJY2Qgd29yayAmJgotCXN2biBjbyAiJHN2bnJlcG8iICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iICYmCiAJY2Qgc3ZucmVwbyAmJgogCiAJIyBDaGVjayBwcm9wZXJ0aWVzIGZyb20gZmlyc3QgY29tbWl0LgotCXRlc3QgIngkKHN2biBwcm9wZ2V0IHN2bjpleGVjdXRhYmxlIGV4ZWMxLnNoKSIgPSAieCoiICYmCi0JdGVzdCAieCQoc3ZuIHByb3BnZXQgc3ZuOm1pbWUtdHlwZSBleGVjMS5zaCkiID0gXAorCXRlc3QgIngkKHN2bl9jbWQgcHJvcGdldCBzdm46ZXhlY3V0YWJsZSBleGVjMS5zaCkiID0gIngqIiAmJgorCXRlc3QgIngkKHN2bl9jbWQgcHJvcGdldCBzdm46bWltZS10eXBlIGV4ZWMxLnNoKSIgPSBcCiAJICAgICAieGFwcGxpY2F0aW9uL3gtc2hlbGxzY3JpcHQiICYmCi0JdGVzdCAieCQoc3ZuIHByb3BnZXQgc3ZuOm1pbWUtdHlwZSBoZWxsby50eHQpIiA9ICJ4dGV4dC9wbGFpbiIgJiYKLQl0ZXN0ICJ4JChzdm4gcHJvcGdldCBzdm46ZW9sLXN0eWxlIGhlbGxvLnR4dCkiID0gInhuYXRpdmUiICYmCi0JdGVzdCAieCQoc3ZuIHByb3BnZXQgc3ZuOm1pbWUtdHlwZSBiYXIpIiA9ICJ4IiAmJgorCXRlc3QgIngkKHN2bl9jbWQgcHJvcGdldCBzdm46bWltZS10eXBlIGhlbGxvLnR4dCkiID0gInh0ZXh0L3BsYWluIiAmJgorCXRlc3QgIngkKHN2bl9jbWQgcHJvcGdldCBzdm46ZW9sLXN0eWxlIGhlbGxvLnR4dCkiID0gInhuYXRpdmUiICYmCisJdGVzdCAieCQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjptaW1lLXR5cGUgYmFyKSIgPSAieCIgJiYKIAogCSMgQ2hlY2sgcHJvcGVydGllcyBmcm9tIHNlY29uZCBjb21taXQuCi0JdGVzdCAieCQoc3ZuIHByb3BnZXQgc3ZuOmV4ZWN1dGFibGUgZXhlYzIuc2gpIiA9ICJ4KiIgJiYKLQl0ZXN0ICJ4JChzdm4gcHJvcGdldCBzdm46bWltZS10eXBlIGV4ZWMyLnNoKSIgPSAieCIgJiYKLQl0ZXN0ICJ4JChzdm4gcHJvcGdldCBzdm46bWltZS10eXBlIHdvcmxkLnR4dCkiID0gIngiICYmCi0JdGVzdCAieCQoc3ZuIHByb3BnZXQgc3ZuOmVvbC1zdHlsZSB3b3JsZC50eHQpIiA9ICJ4IiAmJgotCXRlc3QgIngkKHN2biBwcm9wZ2V0IHN2bjptaW1lLXR5cGUgem90KSIgPSAieCIKKwl0ZXN0ICJ4JChzdm5fY21kIHByb3BnZXQgc3ZuOmV4ZWN1dGFibGUgZXhlYzIuc2gpIiA9ICJ4KiIgJiYKKwl0ZXN0ICJ4JChzdm5fY21kIHByb3BnZXQgc3ZuOm1pbWUtdHlwZSBleGVjMi5zaCkiID0gIngiICYmCisJdGVzdCAieCQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjptaW1lLXR5cGUgd29ybGQudHh0KSIgPSAieCIgJiYKKwl0ZXN0ICJ4JChzdm5fY21kIHByb3BnZXQgc3ZuOmVvbC1zdHlsZSB3b3JsZC50eHQpIiA9ICJ4IiAmJgorCXRlc3QgIngkKHN2bl9jbWQgcHJvcGdldCBzdm46bWltZS10eXBlIHpvdCkiID0gIngiCiApCiAnCiAKQEAgLTg5LDEyICs4OSwxMiBAQAogCWdpdCBzdm4gZGNvbW1pdCAtLWNvbmZpZy1kaXI9dXNlciAmJgogCSgKIAkJY2Qgd29yay9zdm5yZXBvICYmCi0JCXN2biB1cCAmJgorCQlzdm5fY21kIHVwICYmCiAJCXRlc3QgISAtZSBmb28gJiYKIAkJdGVzdCAtZSBmb28uc2ggJiYKLQkJdGVzdCAieCQoc3ZuIHByb3BnZXQgc3ZuOm1pbWUtdHlwZSBmb28uc2gpIiA9IFwKKwkJdGVzdCAieCQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjptaW1lLXR5cGUgZm9vLnNoKSIgPSBcCiAJCSAgICAgInhhcHBsaWNhdGlvbi94LXNoZWxsc2NyaXB0IiAmJgotCQl0ZXN0ICJ4JChzdm4gcHJvcGdldCBzdm46ZW9sLXN0eWxlIGZvby5zaCkiID0gInhMRiIKKwkJdGVzdCAieCQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjplb2wtc3R5bGUgZm9vLnNoKSIgPSAieExGIgogCSkKICcKIApkaWZmIC0tZ2l0IGEvdC90OTEyNS1naXQtc3ZuLW11bHRpLWdsb2ItYnJhbmNoLW5hbWVzLnNoIGIvdC90OTEyNS1naXQtc3ZuLW11bHRpLWdsb2ItYnJhbmNoLW5hbWVzLnNoCmluZGV4IDQ3NWM3NTEuLmMxOTQxODYgMTAwNzU1Ci0tLSBhL3QvdDkxMjUtZ2l0LXN2bi1tdWx0aS1nbG9iLWJyYW5jaC1uYW1lcy5zaAorKysgYi90L3Q5MTI1LWdpdC1zdm4tbXVsdGktZ2xvYi1icmFuY2gtbmFtZXMuc2gKQEAgLTgsMTEgKzgsMTEgQEAKIAlta2RpciBwcm9qZWN0IHByb2plY3QvdHJ1bmsgcHJvamVjdC9icmFuY2hlcyBcCiAJCQlwcm9qZWN0L2JyYW5jaGVzL3YxNC4xIHByb2plY3QvdGFncyAmJgogCWVjaG8gZm9vID4gcHJvamVjdC90cnVuay9mb28gJiYKLQlzdm4gaW1wb3J0IC1tICIkdGVzdF9kZXNjcmlwdGlvbiIgcHJvamVjdCAiJHN2bnJlcG8vcHJvamVjdCIgJiYKKwlzdm5fY21kIGltcG9ydCAtbSAiJHRlc3RfZGVzY3JpcHRpb24iIHByb2plY3QgIiRzdm5yZXBvL3Byb2plY3QiICYmCiAJcm0gLXJmIHByb2plY3QgJiYKLQlzdm4gY3AgLW0gImZ1biIgIiRzdm5yZXBvL3Byb2plY3QvdHJ1bmsiIFwKKwlzdm5fY21kIGNwIC1tICJmdW4iICIkc3ZucmVwby9wcm9qZWN0L3RydW5rIiBcCiAJICAgICAgICAgICAgICAgICIkc3ZucmVwby9wcm9qZWN0L2JyYW5jaGVzL3YxNC4xL2JldGEiICYmCi0Jc3ZuIGNwIC1tICJtb3JlIGZ1biEiICIkc3ZucmVwby9wcm9qZWN0L2JyYW5jaGVzL3YxNC4xL2JldGEiIFwKKwlzdm5fY21kIGNwIC1tICJtb3JlIGZ1biEiICIkc3ZucmVwby9wcm9qZWN0L2JyYW5jaGVzL3YxNC4xL2JldGEiIFwKIAkgICAgICAgICAgICAgICAgICAgICAgIiRzdm5yZXBvL3Byb2plY3QvYnJhbmNoZXMvdjE0LjEvZ29sZCIKIAknCiAKZGlmZiAtLWdpdCBhL3QvdDkxMjctZ2l0LXN2bi1wYXJ0aWFsLXJlYnVpbGQuc2ggYi90L3Q5MTI3LWdpdC1zdm4tcGFydGlhbC1yZWJ1aWxkLnNoCmluZGV4IDg3Njk2YTkuLjRhYWI4ZWMgMTAwNzU1Ci0tLSBhL3QvdDkxMjctZ2l0LXN2bi1wYXJ0aWFsLXJlYnVpbGQuc2gKKysrIGIvdC90OTEyNy1naXQtc3ZuLXBhcnRpYWwtcmVidWlsZC5zaApAQCAtMTQsMjEgKzE0LDIxIEBACiAJCWNkIHRydW5rICYmCiAJCWVjaG8gZm9vID4gZm9vICYmCiAJCWNkIC4uICYmCi0JCXN2biBpbXBvcnQgLW0gImltcG9ydCBmb3IgZ2l0LXN2biIgLiAiJHN2bnJlcG8iID4vZGV2L251bGwgJiYKLQkJc3ZuIGNvcHkgIiRzdm5yZXBvIi90cnVuayAiJHN2bnJlcG8iL2JyYW5jaGVzL2EgXAorCQlzdm5fY21kIGltcG9ydCAtbSAiaW1wb3J0IGZvciBnaXQtc3ZuIiAuICIkc3ZucmVwbyIgPi9kZXYvbnVsbCAmJgorCQlzdm5fY21kIGNvcHkgIiRzdm5yZXBvIi90cnVuayAiJHN2bnJlcG8iL2JyYW5jaGVzL2EgXAogCQkJLW0gImNyZWF0ZWQgYnJhbmNoIGEiICYmCiAJCWNkIC4uICYmCiAJCXJtIC1yZiBpbXBvcnQgJiYKLQkJc3ZuIGNvICIkc3ZucmVwbyIvdHJ1bmsgdHJ1bmsgJiYKKwkJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iL3RydW5rIHRydW5rICYmCiAJCWNkIHRydW5rICYmCiAJCWVjaG8gYmFyID4+IGZvbyAmJgotCQlzdm4gY2kgLW0gInVwZGF0ZWQgdHJ1bmsiICYmCisJCXN2bl9jbWQgY2kgLW0gInVwZGF0ZWQgdHJ1bmsiICYmCiAJCWNkIC4uICYmCi0JCXN2biBjbyAiJHN2bnJlcG8iL2JyYW5jaGVzL2EgYSAmJgorCQlzdm5fY21kIGNvICIkc3ZucmVwbyIvYnJhbmNoZXMvYSBhICYmCiAJCWNkIGEgJiYKIAkJZWNobyBiYXogPj4gYSAmJgotCQlzdm4gYWRkIGEgJiYKLQkJc3ZuIGNpIC1tICJ1cGRhdGVkIGEiICYmCisJCXN2bl9jbWQgYWRkIGEgJiYKKwkJc3ZuX2NtZCBjaSAtbSAidXBkYXRlZCBhIiAmJgogCQljZCAuLiAmJgogCQlnaXQgc3ZuIGluaXQgLS1zdGRsYXlvdXQgIiRzdm5yZXBvIgogCSkKZGlmZiAtLWdpdCBhL3QvdDkxMjgtZ2l0LXN2bi1jbWQtYnJhbmNoLnNoIGIvdC90OTEyOC1naXQtc3ZuLWNtZC1icmFuY2guc2gKaW5kZXggMjUyZGFhNy4uODA3ZTQ5NCAxMDA3NTUKLS0tIGEvdC90OTEyOC1naXQtc3ZuLWNtZC1icmFuY2guc2gKKysrIGIvdC90OTEyOC1naXQtc3ZuLWNtZC1icmFuY2guc2gKQEAgLTE0LDEzICsxNCwxMyBAQAogCQljZCB0cnVuayAmJgogCQllY2hvIGZvbyA+IGZvbyAmJgogCQljZCAuLiAmJgotCQlzdm4gaW1wb3J0IC1tICJpbXBvcnQgZm9yIGdpdC1zdm4iIC4gIiRzdm5yZXBvIiA+L2Rldi9udWxsICYmCisJCXN2bl9jbWQgaW1wb3J0IC1tICJpbXBvcnQgZm9yIGdpdC1zdm4iIC4gIiRzdm5yZXBvIiA+L2Rldi9udWxsICYmCiAJCWNkIC4uICYmCiAJCXJtIC1yZiBpbXBvcnQgJiYKLQkJc3ZuIGNvICIkc3ZucmVwbyIvdHJ1bmsgdHJ1bmsgJiYKKwkJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iL3RydW5rIHRydW5rICYmCiAJCWNkIHRydW5rICYmCiAJCWVjaG8gYmFyID4+IGZvbyAmJgotCQlzdm4gY2kgLW0gInVwZGF0ZWQgdHJ1bmsiICYmCisJCXN2bl9jbWQgY2kgLW0gInVwZGF0ZWQgdHJ1bmsiICYmCiAJCWNkIC4uICYmCiAJCXJtIC1yZiB0cnVuawogCSkKQEAgLTU3LDE0ICs1NywxNCBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggdXNlcyBjb3JyZWN0IHN2bi1yZW1vdGUnICcKLQkoc3ZuIGNvICIkc3ZucmVwbyIgc3ZuICYmCisJKHN2bl9jbWQgY28gIiRzdm5yZXBvIiBzdm4gJiYKIAljZCBzdm4gJiYKIAlta2RpciBtaXJyb3IgJiYKLQlzdm4gYWRkIG1pcnJvciAmJgotCXN2biBjb3B5IHRydW5rIG1pcnJvci8gJiYKLQlzdm4gY29weSB0YWdzIG1pcnJvci8gJiYKLQlzdm4gY29weSBicmFuY2hlcyBtaXJyb3IvICYmCi0Jc3ZuIGNpIC1tICJtYWRlIG1pcnJvciIgKSAmJgorCXN2bl9jbWQgYWRkIG1pcnJvciAmJgorCXN2bl9jbWQgY29weSB0cnVuayBtaXJyb3IvICYmCisJc3ZuX2NtZCBjb3B5IHRhZ3MgbWlycm9yLyAmJgorCXN2bl9jbWQgY29weSBicmFuY2hlcyBtaXJyb3IvICYmCisJc3ZuX2NtZCBjaSAtbSAibWFkZSBtaXJyb3IiICkgJiYKIAlybSAtcmYgc3ZuICYmCiAJZ2l0IHN2biBpbml0IC1zIC1SIG1pcnJvciAtLXByZWZpeD1taXJyb3IvICIkc3ZucmVwbyIvbWlycm9yICYmCiAJZ2l0IHN2biBmZXRjaCAtUiBtaXJyb3IgJiYKZGlmZiAtLWdpdCBhL3QvdDkxMjktZ2l0LXN2bi1pMThuLWNvbW1pdGVuY29kaW5nLnNoIGIvdC90OTEyOS1naXQtc3ZuLWkxOG4tY29tbWl0ZW5jb2Rpbmcuc2gKaW5kZXggMzIwMGFiMy4uYjkyMjRiZCAxMDA3NTUKLS0tIGEvdC90OTEyOS1naXQtc3ZuLWkxOG4tY29tbWl0ZW5jb2Rpbmcuc2gKKysrIGIvdC90OTEyOS1naXQtc3ZuLWkxOG4tY29tbWl0ZW5jb2Rpbmcuc2gKQEAgLTI5LDE2ICsyOSwxNiBAQAogCXRlc3RfY21wIGN1cnJlbnQgIiQxIgogfQogCi1mb3IgSCBpbiBJU08tODg1OS0xIEVVQ0pQIElTTy0yMDIyLUpQCitmb3IgSCBpbiBJU084ODU5LTEgZXVjSlAgSVNPLTIwMjItSlAKIGRvCiAJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJEggc2V0dXAiICcKIAkJbWtkaXIgJEggJiYKLQkJc3ZuIGltcG9ydCAtbSAiJEggdGVzdCIgJEggIiRzdm5yZXBvIi8kSCAmJgorCQlzdm5fY21kIGltcG9ydCAtbSAiJEggdGVzdCIgJEggIiRzdm5yZXBvIi8kSCAmJgogCQlnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIvJEggJEgKIAknCiBkb25lCiAKLWZvciBIIGluIElTTy04ODU5LTEgRVVDSlAgSVNPLTIwMjItSlAKK2ZvciBIIGluIElTTzg4NTktMSBldWNKUCBJU08tMjAyMi1KUAogZG8KIAl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkSCBjb21taXQgb24gZ2l0IHNpZGUiICcKIAkoCkBAIC01NSw3ICs1NSw3IEBACiAJJwogZG9uZQogCi1mb3IgSCBpbiBJU08tODg1OS0xIEVVQ0pQIElTTy0yMDIyLUpQCitmb3IgSCBpbiBJU084ODU5LTEgZXVjSlAgSVNPLTIwMjItSlAKIGRvCiAJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJEggZGNvbW1pdCB0byBzdm4iICcKIAkoCkBAIC03NywxMiArNzcsMTIgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBVVEY4ICdJU08tODg1OS0xIHNob3VsZCBtYXRjaCBVVEYtOCBpbiBzdm4nICcKIAkoCi0JCWNkIElTTy04ODU5LTEgJiYKKwkJY2QgSVNPODg1OS0xICYmCiAJCWNvbXBhcmVfc3ZuX2hlYWRfd2l0aCAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8xLVVURi04LnR4dAogCSkKICcKIAotZm9yIEggaW4gRVVDSlAgSVNPLTIwMjItSlAKK2ZvciBIIGluIGV1Y0pQIElTTy0yMDIyLUpQCiBkbwogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgVVRGOCAiJEggc2hvdWxkIG1hdGNoIFVURi04IGluIHN2biIgJwogCQkoCmRpZmYgLS1naXQgYS90L3Q5MTMwLWdpdC1zdm4tYXV0aG9ycy1maWxlLnNoIGIvdC90OTEzMC1naXQtc3ZuLWF1dGhvcnMtZmlsZS5zaAppbmRleCBiOGZiMjc3Li4xMzQ0MTFlIDEwMDc1NQotLS0gYS90L3Q5MTMwLWdpdC1zdm4tYXV0aG9ycy1maWxlLnNoCisrKyBiL3QvdDkxMzAtZ2l0LXN2bi1hdXRob3JzLWZpbGUuc2gKQEAgLTE1LDcgKzE1LDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2bnJlcG8nICcKIAlmb3IgaSBpbiBhYSBiYiBjYyBkZAogCWRvCi0JCXN2biBta2RpciAtbSAkaSAtLXVzZXJuYW1lICRpICIkc3ZucmVwbyIvJGkKKwkJc3ZuX2NtZCBta2RpciAtbSAkaSAtLXVzZXJuYW1lICRpICIkc3ZucmVwbyIvJGkKIAlkb25lCiAJJwogCkBAIC01MiwxMyArNTIsMTMgQEAKIAknCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dGhvcnMtZmlsZSBhZ2FpbnN0IGdsb2JzJyAnCi0Jc3ZuIG1rZGlyIC1tIGdsb2JzIC0tdXNlcm5hbWUgYWEgXAorCXN2bl9jbWQgbWtkaXIgLW0gZ2xvYnMgLS11c2VybmFtZSBhYSBcCiAJICAiJHN2bnJlcG8iL2FhL3RydW5rICIkc3ZucmVwbyIvYWEvYnJhbmNoZXMgIiRzdm5yZXBvIi9hYS90YWdzICYmCiAJZ2l0IHN2biBjbG9uZSAtLWF1dGhvcnMtZmlsZT1zdm4tYXV0aG9ycyAtcyAiJHN2bnJlcG8iL2FhIGFhLXdvcmsgJiYKIAlmb3IgaSBpbiBiYiBlZSBjYwogCWRvCiAJCWJyYW5jaD0iYWEvYnJhbmNoZXMvJGkiCi0JCXN2biBta2RpciAtbSAiJGJyYW5jaCIgLS11c2VybmFtZSAkaSAiJHN2bnJlcG8vJGJyYW5jaCIKKwkJc3ZuX2NtZCBta2RpciAtbSAiJGJyYW5jaCIgLS11c2VybmFtZSAkaSAiJHN2bnJlcG8vJGJyYW5jaCIKIAlkb25lCiAJJwogCkBAIC05MSw0ICs5MSwyNyBAQAogCSkKIAknCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZyZXNoIGNsb25lIHdpdGggc3ZuLmF1dGhvcnMtZmlsZSBpbiBjb25maWcnICcKKwkoCisJCXJtIC1yICIkR0lUX0RJUiIgJiYKKwkJdGVzdCB4ID0geCIkKGdpdCBjb25maWcgc3ZuLmF1dGhvcnNmaWxlKSIgJiYKKwkJSE9NRT0iYHB3ZGAiICYmCisJCWV4cG9ydCBIT01FICYmCisJCXRlc3RfY29uZmlnPSIkSE9NRSIvLmdpdGNvbmZpZyAmJgorCQl1bnNldCBHSVRfQ09ORklHX05PR0xPQkFMICYmCisJCXVuc2V0IEdJVF9ESVIgJiYKKwkJdW5zZXQgR0lUX0NPTkZJRyAmJgorCQlnaXQgY29uZmlnIC0tZ2xvYmFsIFwKKwkJICBzdm4uYXV0aG9yc2ZpbGUgIiRIT01FIi9zdm4tYXV0aG9ycyAmJgorCQl0ZXN0IHgiJEhPTUUiL3N2bi1hdXRob3JzID0geCIkKGdpdCBjb25maWcgc3ZuLmF1dGhvcnNmaWxlKSIgJiYKKwkJZ2l0IHN2biBjbG9uZSAiJHN2bnJlcG8iIGdpdGNvbmZpZy5jbG9uZSAmJgorCQljZCBnaXRjb25maWcuY2xvbmUgJiYKKwkJbnJfZXg9JChnaXQgbG9nIHwgZ3JlcCAiXkF1dGhvcjouKmV4YW1wbGUuY29tIiB8IHdjIC1sKSAmJgorCQlucl9yZXY9JChnaXQgcmV2LWxpc3QgSEVBRCB8IHdjIC1sKSAmJgorCQl0ZXN0ICRucl9yZXYgLWVxICRucl9leAorCSkKKycKKwordGVzdF9kZWJ1ZyAnR0lUX0RJUj1naXRjb25maWcuY2xvbmUvLmdpdCBnaXQgbG9nJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMzMtZ2l0LXN2bi1uZXN0ZWQtZ2l0LXJlcG8uc2ggYi90L3Q5MTMzLWdpdC1zdm4tbmVzdGVkLWdpdC1yZXBvLnNoCmluZGV4IDg5M2Y1N2UuLmYzYzMwZTYgMTAwNzU1Ci0tLSBhL3QvdDkxMzMtZ2l0LXN2bi1uZXN0ZWQtZ2l0LXJlcG8uc2gKKysrIGIvdC90OTEzMy1naXQtc3ZuLW5lc3RlZC1naXQtcmVwby5zaApAQCAtNywxOSArNywxOSBAQAogLiAuL2xpYi1naXQtc3ZuLnNoCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG8gd2l0aCBhIGdpdCByZXBvIGluc2lkZSBpdCcgJwotCXN2biBjbyAiJHN2bnJlcG8iIHMgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgcyAmJgogCSgKIAkJY2QgcyAmJgogCQlnaXQgaW5pdCAmJgogCQl0ZXN0IC1mIC5naXQvSEVBRCAmJgogCQk+IC5naXQvYSAmJgogCQllY2hvIGEgPiBhICYmCi0JCXN2biBhZGQgLmdpdCBhICYmCi0JCXN2biBjb21taXQgLW0gImNyZWF0ZSBhIG5lc3RlZCBnaXQgcmVwbyIgJiYKLQkJc3ZuIHVwICYmCisJCXN2bl9jbWQgYWRkIC5naXQgYSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiY3JlYXRlIGEgbmVzdGVkIGdpdCByZXBvIiAmJgorCQlzdm5fY21kIHVwICYmCiAJCWVjaG8gaGkgPj4gLmdpdC9hICYmCi0JCXN2biBjb21taXQgLW0gIm1vZGlmeSAuZ2l0L2EiICYmCi0JCXN2biB1cAorCQlzdm5fY21kIGNvbW1pdCAtbSAibW9kaWZ5IC5naXQvYSIgJiYKKwkJc3ZuX2NtZCB1cAogCSkKICcKIApAQCAtMzMsOSArMzMsOSBAQAogCSgKIAkJY2QgcyAmJgogCQllY2hvIGIgPj4gYSAmJgotCQlzdm4gY29tbWl0IC1tICJTVk4tc2lkZSBjaGFuZ2Ugb3V0c2lkZSBvZiAuZ2l0IiAmJgotCQlzdm4gdXAgJiYKLQkJc3ZuIGxvZyAtdiB8IGZncmVwICJTVk4tc2lkZSBjaGFuZ2Ugb3V0c2lkZSBvZiAuZ2l0IgorCQlzdm5fY21kIGNvbW1pdCAtbSAiU1ZOLXNpZGUgY2hhbmdlIG91dHNpZGUgb2YgLmdpdCIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIGxvZyAtdiB8IGZncmVwICJTVk4tc2lkZSBjaGFuZ2Ugb3V0c2lkZSBvZiAuZ2l0IgogCSkKICcKIApAQCAtNTYsMTAgKzU2LDEwIEBACiAJCWdpdCBhZGQgYSAmJgogCQlnaXQgY29tbWl0IC1tICJhZGQgYSBpbnNpZGUgYW4gU1ZOIHJlcG8iICYmCiAJCWdpdCBsb2cgJiYKLQkJc3ZuIGFkZCAtLWZvcmNlIC5naXQgJiYKLQkJc3ZuIGNvbW1pdCAtbSAiU1ZOLXNpZGUgY2hhbmdlIGluc2lkZSBvZiAuZ2l0IiAmJgotCQlzdm4gdXAgJiYKLQkJc3ZuIGxvZyAtdiB8IGZncmVwICJTVk4tc2lkZSBjaGFuZ2UgaW5zaWRlIG9mIC5naXQiCisJCXN2bl9jbWQgYWRkIC0tZm9yY2UgLmdpdCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiU1ZOLXNpZGUgY2hhbmdlIGluc2lkZSBvZiAuZ2l0IiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgbG9nIC12IHwgZmdyZXAgIlNWTi1zaWRlIGNoYW5nZSBpbnNpZGUgb2YgLmdpdCIKIAkpCiAnCiAKQEAgLTgwLDkgKzgwLDkgQEAKIAkJZWNobyBjID4+IGEgJiYKIAkJZ2l0IGFkZCBhICYmCiAJCWdpdCBjb21taXQgLW0gImFkZCBhIGluc2lkZSBhbiBTVk4gcmVwbyIgJiYKLQkJc3ZuIGNvbW1pdCAtbSAiU1ZOLXNpZGUgY2hhbmdlIGluIGFuZCBvdXQgb2YgLmdpdCIgJiYKLQkJc3ZuIHVwICYmCi0JCXN2biBsb2cgLXYgfCBmZ3JlcCAiU1ZOLXNpZGUgY2hhbmdlIGluIGFuZCBvdXQgb2YgLmdpdCIKKwkJc3ZuX2NtZCBjb21taXQgLW0gIlNWTi1zaWRlIGNoYW5nZSBpbiBhbmQgb3V0IG9mIC5naXQiICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJc3ZuX2NtZCBsb2cgLXYgfCBmZ3JlcCAiU1ZOLXNpZGUgY2hhbmdlIGluIGFuZCBvdXQgb2YgLmdpdCIKIAkpCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDkxMzQtZ2l0LXN2bi1pZ25vcmUtcGF0aHMuc2ggYi90L3Q5MTM0LWdpdC1zdm4taWdub3JlLXBhdGhzLnNoCmluZGV4IDcxZmRjNGEuLjA5ZmYxMGMgMTAwNzU1Ci0tLSBhL3QvdDkxMzQtZ2l0LXN2bi1pZ25vcmUtcGF0aHMuc2gKKysrIGIvdC90OTEzNC1naXQtc3ZuLWlnbm9yZS1wYXRocy5zaApAQCAtOCwxOSArOCwxOSBAQAogLiAuL2xpYi1naXQtc3ZuLnNoCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRlc3QgcmVwb3NpdG9yeScgJwotCXN2biBjbyAiJHN2bnJlcG8iIHMgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgcyAmJgogCSgKIAkJY2QgcyAmJgogCQlta2RpciBxcXEgd3d3ICYmCiAJCWVjaG8gdGVzdF9xcXEgPiBxcXEvdGVzdF9xcXEudHh0ICYmCiAJCWVjaG8gdGVzdF93d3cgPiB3d3cvdGVzdF93d3cudHh0ICYmCi0JCXN2biBhZGQgcXFxICYmCi0JCXN2biBhZGQgd3d3ICYmCi0JCXN2biBjb21taXQgLW0gImNyZWF0ZSBzb21lIGZpbGVzIiAmJgotCQlzdm4gdXAgJiYKKwkJc3ZuX2NtZCBhZGQgcXFxICYmCisJCXN2bl9jbWQgYWRkIHd3dyAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiY3JlYXRlIHNvbWUgZmlsZXMiICYmCisJCXN2bl9jbWQgdXAgJiYKIAkJZWNobyBoaSA+PiB3d3cvdGVzdF93d3cudHh0ICYmCi0JCXN2biBjb21taXQgLW0gIm1vZGlmeSB3d3cvdGVzdF93d3cudHh0IiAmJgotCQlzdm4gdXAKKwkJc3ZuX2NtZCBjb21taXQgLW0gIm1vZGlmeSB3d3cvdGVzdF93d3cudHh0IiAmJgorCQlzdm5fY21kIHVwCiAJKQogJwogCkBAIC01MSw5ICs1MSw5IEBACiAJKAogCQljZCBzICYmCiAJCWVjaG8gYiA+PiBxcXEvdGVzdF9xcXEudHh0ICYmCi0JCXN2biBjb21taXQgLW0gIlNWTi1zaWRlIGNoYW5nZSBvdXRzaWRlIG9mIHd3dyIgJiYKLQkJc3ZuIHVwICYmCi0JCXN2biBsb2cgLXYgfCBmZ3JlcCAiU1ZOLXNpZGUgY2hhbmdlIG91dHNpZGUgb2Ygd3d3IgorCQlzdm5fY21kIGNvbW1pdCAtbSAiU1ZOLXNpZGUgY2hhbmdlIG91dHNpZGUgb2Ygd3d3IiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgbG9nIC12IHwgZmdyZXAgIlNWTi1zaWRlIGNoYW5nZSBvdXRzaWRlIG9mIHd3dyIKIAkpCiAnCiAKQEAgLTgzLDkgKzgzLDkgQEAKIAkoCiAJCWNkIHMgJiYKIAkJZWNobyB6YXEgPj4gd3d3L3Rlc3Rfd3d3LnR4dAotCQlzdm4gY29tbWl0IC1tICJTVk4tc2lkZSBjaGFuZ2UgaW5zaWRlIG9mIHd3dy90ZXN0X3d3dy50eHQiICYmCi0JCXN2biB1cCAmJgotCQlzdm4gbG9nIC12IHwgZmdyZXAgIlNWTi1zaWRlIGNoYW5nZSBpbnNpZGUgb2Ygd3d3L3Rlc3Rfd3d3LnR4dCIKKwkJc3ZuX2NtZCBjb21taXQgLW0gIlNWTi1zaWRlIGNoYW5nZSBpbnNpZGUgb2Ygd3d3L3Rlc3Rfd3d3LnR4dCIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIGxvZyAtdiB8IGZncmVwICJTVk4tc2lkZSBjaGFuZ2UgaW5zaWRlIG9mIHd3dy90ZXN0X3d3dy50eHQiCiAJKQogJwogCkBAIC0xMTYsOSArMTE2LDkgQEAKIAkJY2QgcyAmJgogCQllY2hvIGN2ZiA+PiB3d3cvdGVzdF93d3cudHh0CiAJCWVjaG8geWdnID4+IHFxcS90ZXN0X3FxcS50eHQKLQkJc3ZuIGNvbW1pdCAtbSAiU1ZOLXNpZGUgY2hhbmdlIGluIGFuZCBvdXQgb2YgaWdub3JlZCB3d3ciICYmCi0JCXN2biB1cCAmJgotCQlzdm4gbG9nIC12IHwgZmdyZXAgIlNWTi1zaWRlIGNoYW5nZSBpbiBhbmQgb3V0IG9mIGlnbm9yZWQgd3d3IgorCQlzdm5fY21kIGNvbW1pdCAtbSAiU1ZOLXNpZGUgY2hhbmdlIGluIGFuZCBvdXQgb2YgaWdub3JlZCB3d3ciICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJc3ZuX2NtZCBsb2cgLXYgfCBmZ3JlcCAiU1ZOLXNpZGUgY2hhbmdlIGluIGFuZCBvdXQgb2YgaWdub3JlZCB3d3ciCiAJKQogJwogCmRpZmYgLS1naXQgYS90L3Q5MTM1LWdpdC1zdm4tbW92ZWQtYnJhbmNoLWVtcHR5LWZpbGUuc2ggYi90L3Q5MTM1LWdpdC1zdm4tbW92ZWQtYnJhbmNoLWVtcHR5LWZpbGUuc2gKaW5kZXggMDM3MDVmYS4uNTI4MGU1ZiAxMDA3NTUKLS0tIGEvdC90OTEzNS1naXQtc3ZuLW1vdmVkLWJyYW5jaC1lbXB0eS1maWxlLnNoCisrKyBiL3QvdDkxMzUtZ2l0LXN2bi1tb3ZlZC1icmFuY2gtZW1wdHktZmlsZS5zaApAQCAtMTAsNyArMTAsMTIgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHVzaW5nIGdpdCBzdm4nICdnaXQgc3ZuIGNsb25lIC1zICIkc3ZucmVwbyIgeCcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCB0aGF0IGIxIGV4aXN0cyBhbmQgaXMgZW1wdHknICcKLQkoY2QgeCAmJiB0ZXN0IC1mIGIxICYmICEgdGVzdCAtcyBiMSkKKwkoCisJCWNkIHggJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBicmFuY2gtYyAmJgorCQl0ZXN0IC1mIGIxICYmCisJCSEgdGVzdCAtcyBiMQorCSkKIAknCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEzNy1naXQtc3ZuLWRjb21taXQtY2xvYmJlci1zZXJpZXMuc2ggYi90L3Q5MTM3LWdpdC1zdm4tZGNvbW1pdC1jbG9iYmVyLXNlcmllcy5zaAppbmRleCBmZDE4NTAxLi42MzZjYTBhIDEwMDc1NQotLS0gYS90L3Q5MTM3LWdpdC1zdm4tZGNvbW1pdC1jbG9iYmVyLXNlcmllcy5zaAorKysgYi90L3Q5MTM3LWdpdC1zdm4tZGNvbW1pdC1jbG9iYmVyLXNlcmllcy5zaApAQCAtOCw3ICs4LDcgQEAKIAlta2RpciBpbXBvcnQgJiYKIAljZCBpbXBvcnQgJiYKIAlhd2sgIkJFR0lOIHsgZm9yIChpID0gMTsgaSA8IDY0OyBpKyspIHsgcHJpbnQgaSB9IH0iID4gZmlsZQotCXN2biBpbXBvcnQgLW0gImluaXRpYWwiIC4gIiRzdm5yZXBvIiAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICJpbml0aWFsIiAuICIkc3ZucmVwbyIgJiYKIAljZCAuLiAmJgogCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iICYmCiAJZ2l0IHN2biBmZXRjaCAmJgpAQCAtMTgsMTQgKzE4LDE0IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICcoc3VwcG9zZWRseSkgbm9uLWNvbmZsaWN0aW5nIGNoYW5nZSBmcm9tIFNWTicgJwogCXRlc3QgeCJgc2VkIC1uIC1lIDU4cCA8IGZpbGVgIiA9IHg1OCAmJgogCXRlc3QgeCJgc2VkIC1uIC1lIDYxcCA8IGZpbGVgIiA9IHg2MSAmJgotCXN2biBjbyAiJHN2bnJlcG8iIHRtcCAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIiB0bXAgJiYKIAljZCB0bXAgJiYKIAkJcGVybCAtaS5iYWsgLXAgLWUgInMvXjU4JC81NTg4LyIgZmlsZSAmJgogCQlwZXJsIC1pLmJhayAtcCAtZSAicy9eNjEkLzY2MTEvIiBmaWxlICYmCiAJCXBva2UgZmlsZSAmJgogCQl0ZXN0IHgiYHNlZCAtbiAtZSA1OHAgPCBmaWxlYCIgPSB4NTU4OCAmJgogCQl0ZXN0IHgiYHNlZCAtbiAtZSA2MXAgPCBmaWxlYCIgPSB4NjYxMSAmJgotCQlzdm4gY29tbWl0IC1tICI1OCA9PiA1NTg4LCA2MSA9PiA2NjExIiAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiNTggPT4gNTU4OCwgNjEgPT4gNjYxMSIgJiYKIAkJY2QgLi4KIAknCiAKQEAgLTQ2LDcgKzQ2LDcgQEAKIAl0ZXN0IHhcIlxgc2VkIC1uIC1lIDdwIDwgZmlsZVxgXCIgPSB4Nzc3NyAmJgogCWdpdCBjb21taXQgLW0gJzQgPT4gNDQ0NCwgNyA9PiA3Nzc3JyBmaWxlICYmCiAJZ2l0IHN2biBkY29tbWl0ICYmCi0Jc3ZuIHVwIHRtcCAmJgorCXN2bl9jbWQgdXAgdG1wICYmCiAJY2QgdG1wICYmCiAJCXRlc3QgeFwiXGBzZWQgLW4gLWUgNHAgPCBmaWxlXGBcIiA9IHg0NDQ0ICYmCiAJCXRlc3QgeFwiXGBzZWQgLW4gLWUgN3AgPCBmaWxlXGBcIiA9IHg3Nzc3ICYmCmRpZmYgLS1naXQgYS90L3Q5MTM4LWdpdC1zdm4tYXV0aG9ycy1wcm9nLnNoIGIvdC90OTEzOC1naXQtc3ZuLWF1dGhvcnMtcHJvZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44M2NjNWZjCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEzOC1naXQtc3ZuLWF1dGhvcnMtcHJvZy5zaApAQCAtMCwwICsxLDgzIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEVyaWMgV29uZywgTWFyayBMb2RhdG8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBhdXRob3JzIHByb2cgdGVzdHMnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCitjYXQgPiBzdm4tYXV0aG9ycy1wcm9nIDw8J0VPRicKKyMhL3Vzci9iaW4vcGVybAorJF8gPSBzaGlmdDsKK2lmIChzLy1zdWIkLy8pICB7CisJcHJpbnQgIiRfIDwkX1xAc3ViLmV4YW1wbGUuY29tPlxuIjsKK30KK2Vsc2UgeworCXByaW50ICIkXyA8JF9cQGV4YW1wbGUuY29tPlxuIjsKK30KK0VPRgorY2htb2QgK3ggc3ZuLWF1dGhvcnMtcHJvZworCitjYXQgPiBzdm4tYXV0aG9ycyA8PCdFT0YnCitmZiA9IEZGRkZGRkYgRkZGRkZGRiA8ZkZmQG90aGVyLmV4YW1wbGUuY29tPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2bnJlcG8nICcKKwlmb3IgaSBpbiBhYSBiYiBjYy1zdWIgZGQtc3ViIGVlLWZvbyBmZgorCWRvCisJCXN2biBta2RpciAtbSAkaSAtLXVzZXJuYW1lICRpICIkc3ZucmVwbyIvJGkKKwlkb25lCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbXBvcnQgYXV0aG9ycyB3aXRoIHByb2cgYW5kIGZpbGUnICcKKwlnaXQgc3ZuIGNsb25lIC0tYXV0aG9ycy1wcm9nPS4vc3ZuLWF1dGhvcnMtcHJvZyBcCisJICAgIC0tYXV0aG9ycy1maWxlPXN2bi1hdXRob3JzICIkc3ZucmVwbyIgeAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW1wb3J0ZWQgNiByZXZpc2lvbnMgc3VjY2Vzc2Z1bGx5JyAnCisJKAorCQljZCB4CisJCXRlc3QgImBnaXQgcmV2LWxpc3QgcmVmcy9yZW1vdGVzL2dpdC1zdm4gfCB3YyAtbGAiIC1lcSA2CisJKQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0aG9ycy1wcm9nIHJhbiBjb3JyZWN0bHknICcKKwkoCisJCWNkIHgKKwkJZ2l0IHJldi1saXN0IC0xIC0tcHJldHR5PXJhdyByZWZzL3JlbW90ZXMvZ2l0LXN2bn4xIHwgXAorCQkgIGdyZXAgIl5hdXRob3IgZWUtZm9vIDxlZS1mb29AZXhhbXBsZVwuY29tPiAiICYmCisJCWdpdCByZXYtbGlzdCAtMSAtLXByZXR0eT1yYXcgcmVmcy9yZW1vdGVzL2dpdC1zdm5+MiB8IFwKKwkJICBncmVwICJeYXV0aG9yIGRkIDxkZEBzdWJcLmV4YW1wbGVcLmNvbT4gIiAmJgorCQlnaXQgcmV2LWxpc3QgLTEgLS1wcmV0dHk9cmF3IHJlZnMvcmVtb3Rlcy9naXQtc3ZufjMgfCBcCisJCSAgZ3JlcCAiXmF1dGhvciBjYyA8Y2NAc3ViXC5leGFtcGxlXC5jb20+ICIgJiYKKwkJZ2l0IHJldi1saXN0IC0xIC0tcHJldHR5PXJhdyByZWZzL3JlbW90ZXMvZ2l0LXN2bn40IHwgXAorCQkgIGdyZXAgIl5hdXRob3IgYmIgPGJiQGV4YW1wbGVcLmNvbT4gIiAmJgorCQlnaXQgcmV2LWxpc3QgLTEgLS1wcmV0dHk9cmF3IHJlZnMvcmVtb3Rlcy9naXQtc3ZufjUgfCBcCisJCSAgZ3JlcCAiXmF1dGhvciBhYSA8YWFAZXhhbXBsZVwuY29tPiAiCisJKQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0aG9ycy1maWxlIG92ZXJyb2RlIGF1dGhvcnMtcHJvZycgJworCSgKKwkJY2QgeAorCQlnaXQgcmV2LWxpc3QgLTEgLS1wcmV0dHk9cmF3IHJlZnMvcmVtb3Rlcy9naXQtc3ZuIHwgXAorCQkgIGdyZXAgIl5hdXRob3IgRkZGRkZGRiBGRkZGRkZGIDxmRmZAb3RoZXJcLmV4YW1wbGVcLmNvbT4gIgorCSkKKwknCisKK2dpdCAtLWdpdC1kaXI9eC8uZ2l0IGNvbmZpZyAtLXVuc2V0IHN2bi5hdXRob3JzZmlsZQorZ2l0IC0tZ2l0LWRpcj14Ly5naXQgY29uZmlnIC0tdW5zZXQgc3ZuLmF1dGhvcnNwcm9nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dGhvcnMtcHJvZyBoYW5kbGVkIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB1c2VybmFtZScgJworCXN2biBta2RpciAtbSBiYWQgLS11c2VybmFtZSAieHl6OyB0b3VjaCBldmlsIiAiJHN2bnJlcG8iL2JhZCAmJgorCSgKKwkJY2QgeCAmJgorCQlnaXQgc3ZuIC0tYXV0aG9ycy1wcm9nPS4uL3N2bi1hdXRob3JzLXByb2cgZmV0Y2ggJiYKKwkJZ2l0IHJldi1saXN0IC0xIC0tcHJldHR5PXJhdyByZWZzL3JlbW90ZXMvZ2l0LXN2biB8CisJCWdyZXAgIl5hdXRob3IgeHl6OyB0b3VjaCBldmlsIDx4eXo7IHRvdWNoIGV2aWxAZXhhbXBsZVwuY29tPiAiICYmCisJCSEgdGVzdCAtZiBldmlsCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMzktZ2l0LXN2bi1ub24tdXRmOC1jb21taXRlbmNvZGluZy5zaCBiL3QvdDkxMzktZ2l0LXN2bi1ub24tdXRmOC1jb21taXRlbmNvZGluZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMzM3OTU5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTEzOS1naXQtc3ZuLW5vbi11dGY4LWNvbW1pdGVuY29kaW5nLnNoCkBAIC0wLDAgKzEsNDcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgRXJpYyBXb25nCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gcmVmdXNlcyB0byBkY29tbWl0IG5vbi1VVEY4IG1lc3NhZ2VzJworCisuIC4vbGliLWdpdC1zdm4uc2gKKworIyBJU08tMjAyMi1KUCBjYW4gcGFzcyBmb3IgdmFsaWQgVVRGLTgsIHNvIHNraXBwaW5nIHRoYXQgaW4gdGhpcyB0ZXN0CisKK2ZvciBIIGluIElTTzg4NTktMSBldWNKUAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkSCBzZXR1cCIgJworCQlta2RpciAkSCAmJgorCQlzdm5fY21kIGltcG9ydCAtbSAiJEggdGVzdCIgJEggIiRzdm5yZXBvIi8kSCAmJgorCQlnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIvJEggJEgKKwknCitkb25lCisKK2ZvciBIIGluIElTTzg4NTktMSBldWNKUAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkSCBjb21taXQgb24gZ2l0IHNpZGUiICcKKwkoCisJCWNkICRIICYmCisJCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyAkSCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgdCByZWZzL3JlbW90ZXMvZ2l0LXN2biAmJgorCQllY2hvICRIID5GICYmCisJCWdpdCBhZGQgRiAmJgorCQlnaXQgY29tbWl0IC1hIC1GICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLyRILnR4dCAmJgorCQlFPSQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSAicy9eZW5jb2RpbmcgLy9wIikgJiYKKwkJdGVzdCAieiRFIiA9ICJ6JEgiCisJKQorCScKK2RvbmUKKworZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIGRjb21taXQgdG8gc3ZuIiAnCisJKAorCQljZCAkSCAmJgorCQlnaXQgY29uZmlnIC0tdW5zZXQgaTE4bi5jb21taXRlbmNvZGluZyAmJgorCQkhIGdpdCBzdm4gZGNvbW1pdAorCSkKKwknCitkb25lCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE0MC1naXQtc3ZuLXJlc2V0LnNoIGIvdC90OTE0MC1naXQtc3ZuLXJlc2V0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA3MzU1MjYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTQwLWdpdC1zdm4tcmVzZXQuc2gKQEAgLTAsMCArMSw2NiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBCZW4gSmFja3NvbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHJlc2V0JworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRlc3QgcmVwb3NpdG9yeScgJworCXN2bl9jbWQgY28gIiRzdm5yZXBvIiBzICYmCisJKAorCQljZCBzICYmCisJCW1rZGlyIHZpcyAmJgorCQllY2hvIGFsd2F5cyB2aXNpYmxlID4gdmlzL3Zpcy50eHQgJiYKKwkJc3ZuX2NtZCBhZGQgdmlzICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJjcmVhdGUgdmlzaWJsZSBmaWxlcyIgJiYKKwkJbWtkaXIgaGlkICYmCisJCWVjaG8gaW5pdGlhbGx5IGhpZGRlbiA+IGhpZC9oaWQudHh0ICYmCisJCXN2bl9jbWQgYWRkIGhpZCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiY3JlYXRlIGluaXRpYWxseSBoaWRkZW4gZmlsZXMiICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJZWNobyBtb2QgPj4gdmlzL3Zpcy50eHQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIm1vZGlmeSB2aXMiICYmCisJCXN2bl9jbWQgdXAKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIFNWTiByZXBvc2l0b3J5IHdpdGggaGlkZGVuIGRpcmVjdG9yeScgJworCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iIGcgJiYKKwkoIGNkIGcgJiYgZ2l0IHN2biBmZXRjaCAtLWlnbm9yZS1wYXRocz0iXmhpZCIgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZnkgaGlkZGVuIGZpbGUgaW4gU1ZOIHJlcG8nICcKKwkoIGNkIHMgJiYKKwkgIGVjaG8gbW9kIGhpZGRlbiA+PiBoaWQvaGlkLnR4dCAmJgorCSAgc3ZuX2NtZCBjb21taXQgLW0gIm1vZGlmeSBoaWQiICYmCisJICBzdm5fY21kIHVwCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBmYWlscyBvbiBtb2RpZmllZCBoaWRkZW4gZmlsZScgJworCSggY2QgZyAmJgorCSAgZ2l0IHN2biBmaW5kLXJldiByZWZzL3JlbW90ZXMvZ2l0LXN2biA+IC4uL2V4cGVjdCAmJgorCSAgISBnaXQgc3ZuIGZldGNoIDI+IC4uL2Vycm9ycyAmJgorCSAgZ2l0IHN2biBmaW5kLXJldiByZWZzL3JlbW90ZXMvZ2l0LXN2biA+IC4uL2V4cGVjdDIgKSAmJgorCWZncmVwICJub3QgZm91bmQgaW4gY29tbWl0IiBlcnJvcnMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZXhwZWN0MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCB1bndpbmRzIGJhY2sgdG8gcjEnICcKKwkoIGNkIGcgJiYKKwkgIGdpdCBzdm4gcmVzZXQgLXIxICYmCisJICBnaXQgc3ZuIGZpbmQtcmV2IHJlZnMvcmVtb3Rlcy9naXQtc3ZuID4gLi4vZXhwZWN0MiApICYmCisJZWNobyAxID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZXhwZWN0MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZldGNoIHN1Y2NlZWRzIG5vdCBpZ25vcmluZyBhbnkgZmlsZXMnICcKKwkoIGNkIGcgJiYKKwkgIGdpdCBzdm4gZmV0Y2ggJiYKKwkgIGdpdCBzdm4gcmViYXNlICYmCisJICBmZ3JlcCAibW9kIGhpZGRlbiIgaGlkL2hpZC50eHQKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE0MS1naXQtc3ZuLW11bHRpcGxlLWJyYW5jaGVzLnNoIGIvdC90OTE0MS1naXQtc3ZuLW11bHRpcGxlLWJyYW5jaGVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNjZDA2NzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTQxLWdpdC1zdm4tbXVsdGlwbGUtYnJhbmNoZXMuc2gKQEAgLTAsMCArMSwxMjIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgTWFyYyBCcmFuY2hhdWQKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBtdWx0aXBsZSBicmFuY2ggYW5kIHRhZyBwYXRocyBpbiB0aGUgc3ZuIHJlcG8nCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZucmVwbycgJworCW1rZGlyCXByb2plY3QgXAorCQlwcm9qZWN0L3RydW5rIFwKKwkJcHJvamVjdC9iX29uZSBcCisJCXByb2plY3QvYl90d28gXAorCQlwcm9qZWN0L3RhZ3NfQSBcCisJCXByb2plY3QvdGFnc19CICYmCisJZWNobyAxID4gcHJvamVjdC90cnVuay9hLmZpbGUgJiYKKwlzdm5fY21kIGltcG9ydCAtbSAiJHRlc3RfZGVzY3JpcHRpb24iIHByb2plY3QgIiRzdm5yZXBvL3Byb2plY3QiICYmCisJcm0gLXJmIHByb2plY3QgJiYKKwlzdm5fY21kIGNwIC1tICJCcmFuY2ggMSIgIiRzdm5yZXBvL3Byb2plY3QvdHJ1bmsiIFwKKwkJCQkgIiRzdm5yZXBvL3Byb2plY3QvYl9vbmUvZmlyc3QiICYmCisJc3ZuX2NtZCBjcCAtbSAiVGFnIDEiICIkc3ZucmVwby9wcm9qZWN0L3RydW5rIiBcCisJCQkgICAgICAiJHN2bnJlcG8vcHJvamVjdC90YWdzX0EvMS4wIiAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvL3Byb2plY3QiIHN2bl9wcm9qZWN0ICYmCisJKCBjZCBzdm5fcHJvamVjdCAmJgorCQllY2hvIDIgPiB0cnVuay9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjaSAtbSAiQ2hhbmdlIDEiIHRydW5rL2EuZmlsZSAmJgorCQlzdm5fY21kIGNwIC1tICJCcmFuY2ggMiIgIiRzdm5yZXBvL3Byb2plY3QvdHJ1bmsiIFwKKwkJCQkJICIkc3ZucmVwby9wcm9qZWN0L2Jfb25lL3NlY29uZCIgJiYKKwkJc3ZuX2NtZCBjcCAtbSAiVGFnIDIiICIkc3ZucmVwby9wcm9qZWN0L3RydW5rIiBcCisJCQkJICAgICAgIiRzdm5yZXBvL3Byb2plY3QvdGFnc19BLzIuMCIgJiYKKwkJZWNobyAzID4gdHJ1bmsvYS5maWxlICYmCisJCXN2bl9jbWQgY2kgLW0gIkNoYW5nZSAyIiB0cnVuay9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjcCAtbSAiQnJhbmNoIDMiICIkc3ZucmVwby9wcm9qZWN0L3RydW5rIiBcCisJCQkJCSAiJHN2bnJlcG8vcHJvamVjdC9iX3R3by8xIiAmJgorCQlzdm5fY21kIGNwIC1tICJUYWcgMyIgIiRzdm5yZXBvL3Byb2plY3QvdHJ1bmsiIFwKKwkJCQkgICAgICAiJHN2bnJlcG8vcHJvamVjdC90YWdzX0EvMy4wIiAmJgorCQllY2hvIDQgPiB0cnVuay9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjaSAtbSAiQ2hhbmdlIDMiIHRydW5rL2EuZmlsZSAmJgorCQlzdm5fY21kIGNwIC1tICJCcmFuY2ggNCIgIiRzdm5yZXBvL3Byb2plY3QvdHJ1bmsiIFwKKwkJCQkJICIkc3ZucmVwby9wcm9qZWN0L2JfdHdvLzIiICYmCisJCXN2bl9jbWQgY3AgLW0gIlRhZyA0IiAiJHN2bnJlcG8vcHJvamVjdC90cnVuayIgXAorCQkJCSAgICAgICIkc3ZucmVwby9wcm9qZWN0L3RhZ3NfQS80LjAiICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJZWNobyA1ID4gYl9vbmUvZmlyc3QvYS5maWxlICYmCisJCXN2bl9jbWQgY2kgLW0gIkNoYW5nZSA0IiBiX29uZS9maXJzdC9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjcCAtbSAiVGFnIDUiICIkc3ZucmVwby9wcm9qZWN0L2Jfb25lL2ZpcnN0IiBcCisJCQkJICAgICAgIiRzdm5yZXBvL3Byb2plY3QvdGFnc19CL3Y1IiAmJgorCQllY2hvIDYgPiBiX29uZS9zZWNvbmQvYS5maWxlICYmCisJCXN2bl9jbWQgY2kgLW0gIkNoYW5nZSA1IiBiX29uZS9zZWNvbmQvYS5maWxlICYmCisJCXN2bl9jbWQgY3AgLW0gIlRhZyA2IiAiJHN2bnJlcG8vcHJvamVjdC9iX29uZS9zZWNvbmQiIFwKKwkJCQkgICAgICAiJHN2bnJlcG8vcHJvamVjdC90YWdzX0IvdjYiICYmCisJCWVjaG8gNyA+IGJfdHdvLzEvYS5maWxlICYmCisJCXN2bl9jbWQgY2kgLW0gIkNoYW5nZSA2IiBiX3R3by8xL2EuZmlsZSAmJgorCQlzdm5fY21kIGNwIC1tICJUYWcgNyIgIiRzdm5yZXBvL3Byb2plY3QvYl90d28vMSIgXAorCQkJCSAgICAgICIkc3ZucmVwby9wcm9qZWN0L3RhZ3NfQi92NyIgJiYKKwkJZWNobyA4ID4gYl90d28vMi9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjaSAtbSAiQ2hhbmdlIDciIGJfdHdvLzIvYS5maWxlICYmCisJCXN2bl9jbWQgY3AgLW0gIlRhZyA4IiAiJHN2bnJlcG8vcHJvamVjdC9iX3R3by8yIiBcCisJCQkJICAgICAgIiRzdm5yZXBvL3Byb2plY3QvdGFnc19CL3Y4IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgbXVsdGlwbGUgYnJhbmNoIGFuZCB0YWcgcGF0aHMnICcKKwlnaXQgc3ZuIGNsb25lIC1UIHRydW5rIFwKKwkJICAgICAgLWIgYl9vbmUvKiAtLWJyYW5jaGVzIGJfdHdvLyogXAorCQkgICAgICAtdCB0YWdzX0EvKiAtLXRhZ3MgdGFnc19CIFwKKwkJICAgICAgIiRzdm5yZXBvL3Byb2plY3QiIGdpdF9wcm9qZWN0ICYmCisJKCBjZCBnaXRfcHJvamVjdCAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9maXJzdCAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9zZWNvbmQgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvMSAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy8yICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RhZ3MvMS4wICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RhZ3MvMi4wICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RhZ3MvMy4wICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RhZ3MvNC4wICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RhZ3MvdjUgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdGFncy92NiAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90YWdzL3Y3ICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RhZ3MvdjgKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ011bHRpcGxlIGJyYW5jaCBvciB0YWcgcGF0aHMgcmVxdWlyZSAtZCcgJworCSggY2QgZ2l0X3Byb2plY3QgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBicmFuY2ggLW0gIk5vIG5ldyBicmFuY2giIE5vcGUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biB0YWcgLW0gIk5vIG5ldyB0YWciIFRhZ2xlc3MgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvTm9wZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90YWdzL1RhZ2xlc3MKKwkpICYmCisJKCBjZCBzdm5fcHJvamVjdCAmJgorCQlzdm5fY21kIHVwICYmCisJCXRlc3RfbXVzdF9mYWlsIHRlc3QgLWQgYl9vbmUvTm9wZSAmJgorCQl0ZXN0X211c3RfZmFpbCB0ZXN0IC1kIGJfdHdvL05vcGUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgdGVzdCAtZCB0YWdzX0EvVGFnbGVzcyAmJgorCQl0ZXN0X211c3RfZmFpbCB0ZXN0IC1kIHRhZ3NfQi9UYWdsZXNzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgbmV3IGJyYW5jaGVzIGFuZCB0YWdzJyAnCisJKCBjZCBnaXRfcHJvamVjdCAmJgorCQlnaXQgc3ZuIGJyYW5jaCAtbSAiTmV3IGJyYW5jaCAxIiAtZCBiX29uZSBOZXcxICkgJiYKKwkoIGNkIHN2bl9wcm9qZWN0ICYmCisJCXN2bl9jbWQgdXAgJiYgdGVzdCAtZSBiX29uZS9OZXcxL2EuZmlsZSApICYmCisKKwkoIGNkIGdpdF9wcm9qZWN0ICYmCisJCWdpdCBzdm4gYnJhbmNoIC1tICJOZXcgYnJhbmNoIDIiIC1kIGJfdHdvIE5ldzIgKSAmJgorCSggY2Qgc3ZuX3Byb2plY3QgJiYKKwkJc3ZuX2NtZCB1cCAmJiB0ZXN0IC1lIGJfdHdvL05ldzIvYS5maWxlICkgJiYKKworCSggY2QgZ2l0X3Byb2plY3QgJiYKKwkJZ2l0IHN2biBicmFuY2ggLXQgLW0gIk5ldyB0YWcgMSIgLWQgdGFnc19BIFRhZzEgKSAmJgorCSggY2Qgc3ZuX3Byb2plY3QgJiYKKwkJc3ZuX2NtZCB1cCAmJiB0ZXN0IC1lIHRhZ3NfQS9UYWcxL2EuZmlsZSApICYmCisKKwkoIGNkIGdpdF9wcm9qZWN0ICYmCisJCWdpdCBzdm4gdGFnIC1tICJOZXcgdGFnIDIiIC1kIHRhZ3NfQiBUYWcyICkgJiYKKwkoIGNkIHN2bl9wcm9qZWN0ICYmCisJCXN2bl9jbWQgdXAgJiYgdGVzdCAtZSB0YWdzX0IvVGFnMi9hLmZpbGUgKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNDItZ2l0LXN2bi1zaGFsbG93LWNsb25lLnNoIGIvdC90OTE0Mi1naXQtc3ZuLXNoYWxsb3ctY2xvbmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTIzNmFjYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNDItZ2l0LXN2bi1zaGFsbG93LWNsb25lLnNoCkBAIC0wLDAgKzEsMzIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgRXJpYyBXb25nCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gc2hhbGxvdyBjbG9uZScKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0ZXN0IHJlcG9zaXRvcnknICcKKwlzdm5fY21kIG1rZGlyIC1tICJjcmVhdGUgc3RhbmRhcmQgbGF5b3V0IiBcCisJICAiJHN2bnJlcG8iL3RydW5rICIkc3ZucmVwbyIvYnJhbmNoZXMgIiRzdm5yZXBvIi90YWdzICYmCisJc3ZuX2NtZCBjcCAtbSAiYnJhbmNoIG9mZiB0cnVuayIgXAorCSAgIiRzdm5yZXBvIi90cnVuayAiJHN2bnJlcG8iL2JyYW5jaGVzL2EgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIvYnJhbmNoZXMvYSAmJgorCSgKKwkJY2QgYSAmJgorCQk+IGZvbyAmJgorCQlzdm5fY21kIGFkZCBmb28gJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImFkZCBmb28iCisJKQorJworCitzdGFydF9odHRwZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB0cnVuayB3aXRoICItciBIRUFEIicgJworCWdpdCBzdm4gY2xvbmUgLXIgSEVBRCAiJHN2bnJlcG8vdHJ1bmsiIGcgJiYKKwkoIGNkIGcgJiYgZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljIC0tdmVyaWZ5IEhFQUQgKQorJworCitzdG9wX2h0dHBkCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE0My1naXQtc3ZuLWdjLnNoIGIvdC90OTE0My1naXQtc3ZuLWdjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk5ZjY5YzYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTQzLWdpdC1zdm4tZ2Muc2gKQEAgLTAsMCArMSw1MyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBSb2JlcnQgQWxsYW4gWmVoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gZ2MgYmFzaWMgdGVzdHMnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBkaXJlY3RvcmllcyBhbmQgdGVzdCByZXBvJyAnCisJbWtkaXIgaW1wb3J0ICYmCisJbWtkaXIgdG1wICYmCisJZWNobyAiU2FtcGxlIHRleHQgZm9yIFN1YnZlcnNpb24gcmVwb3NpdG9yeS4iID4gaW1wb3J0L3Rlc3QudHh0ICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gImltcG9ydCBmb3IgZ2l0IHN2biIgaW1wb3J0ICIkc3ZucmVwbyIgPiAvZGV2L251bGwKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdvcmtpbmcgY29weSBmcm9tIHN2bicgXAorCSdzdm5fY21kIGNvICIkc3ZucmVwbyIgdGVzdF93YycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHNvbWUgcHJvcGVydGllcyB0byBjcmVhdGUgYW4gdW5oYW5kbGVkLmxvZyBmaWxlJyAnCisJKAorCQljZCB0ZXN0X3djICYmCisJCXN2bl9jbWQgcHJvcHNldCBmb28gYmFyIHRlc3QudHh0ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJwcm9wZXJ0eSBzZXQiCisJKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU2V0dXAgcmVwbycgJ2dpdCBzdm4gaW5pdCAiJHN2bnJlcG8iJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdGZXRjaCByZXBvJyAnZ2l0IHN2biBmZXRjaCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBiYWNrdXAgY29weSBvZiB1bmhhbmRsZWQubG9nJyAnCisJIGNwIC5naXQvc3ZuL3JlZnMvcmVtb3Rlcy9naXQtc3ZuL3VuaGFuZGxlZC5sb2cgdG1wCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgbGVmdG92ZXIgaW5kZXgnICc+IC5naXQvc3ZuL3JlZnMvcmVtb3Rlcy9naXQtc3ZuL2luZGV4JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIGdjIHJ1bnMnICdnaXQgc3ZuIGdjJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIGluZGV4IHJlbW92ZWQnICchIHRlc3QgLWYgLmdpdC9zdm4vcmVmcy9yZW1vdGVzL2dpdC1zdm4vaW5kZXgnCisKK2lmIHBlcmwgLU1Db21wcmVzczo6WmxpYiAtZSAwIDI+L2Rldi9udWxsCit0aGVuCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biBnYyBwcm9kdWNlcyBhIHZhbGlkIGd6aXAgZmlsZScgJworCQkgZ3VuemlwIC5naXQvc3ZuL3JlZnMvcmVtb3Rlcy9naXQtc3ZuL3VuaGFuZGxlZC5sb2cuZ3oKKwkJJworZWxzZQorCXNheSAiUGVybCBDb21wcmVzczo6WmxpYiB1bmF2YWlsYWJsZSwgc2tpcHBpbmcgZ3VuemlwIHRlc3QiCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIGdjIGRvZXMgbm90IGNoYW5nZSB1bmhhbmRsZWQubG9nIGZpbGVzJyAnCisJIHRlc3RfY21wIC5naXQvc3ZuL3JlZnMvcmVtb3Rlcy9naXQtc3ZuL3VuaGFuZGxlZC5sb2cgdG1wL3VuaGFuZGxlZC5sb2cKKwknCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE0NC1naXQtc3ZuLW9sZC1yZXZfbWFwLnNoIGIvdC90OTE0NC1naXQtc3ZuLW9sZC1yZXZfbWFwLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc2MDBhMzUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTQ0LWdpdC1zdm4tb2xkLXJldl9tYXAuc2gKQEAgLTAsMCArMSwzMSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBFcmljIFdvbmcKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBvbGQgcmV2X21hcCBwcmVzZXJ2ZCcKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0ZXN0IHJlcG9zaXRvcnkgd2l0aCBvbGQgbGF5b3V0JyAnCisJbWtkaXIgaSAmJgorCShjZCBpICYmID4gYSkgJiYKKwlzdm5fY21kIGltcG9ydCAtbS0gaSAiJHN2bnJlcG8iICYmCisJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIgJiYKKwlnaXQgc3ZuIGZldGNoICYmCisJdGVzdCAtZCAuZ2l0L3N2bi9yZWZzL3JlbW90ZXMvZ2l0LXN2bi8gJiYKKwkhIHRlc3QgLWUgLmdpdC9zdm4vZ2l0LXN2bi8gJiYKKwltdiAuZ2l0L3N2bi9yZWZzL3JlbW90ZXMvZ2l0LXN2biAuZ2l0L3N2bi8gJiYKKwlybSAtciAuZ2l0L3N2bi9yZWZzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29sZCBsYXlvdXQgY29udGludWVzIHRvIHdvcmsnICcKKwlzdm5fY21kIGltcG9ydCAtbS0gaSAiJHN2bnJlcG8vYiIgJiYKKwlnaXQgc3ZuIHJlYmFzZSAmJgorCWVjaG8gYSA+PiBiL2EgJiYKKwlnaXQgYWRkIGIvYSAmJgorCWdpdCBjb21taXQgLW0tIC1hICYmCisJZ2l0IHN2biBkY29tbWl0ICYmCisJISB0ZXN0IC1kIC5naXQvc3ZuL3JlZnMvICYmCisJdGVzdCAtZSAuZ2l0L3N2bi9naXQtc3ZuLworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNDUtZ2l0LXN2bi1tYXN0ZXItYnJhbmNoLnNoIGIvdC90OTE0NS1naXQtc3ZuLW1hc3Rlci1icmFuY2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTY4NTJkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNDUtZ2l0LXN2bi1tYXN0ZXItYnJhbmNoLnNoCkBAIC0wLDAgKzEsMjUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgRXJpYyBXb25nCisjCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGluaXRpYWwgbWFzdGVyIGJyYW5jaCBpcyAidHJ1bmsiIGlmIHBvc3NpYmxlJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRlc3QgcmVwb3NpdG9yeScgJworCW1rZGlyIGkgJiYKKwk+IGkvYSAmJgorCXN2bl9jbWQgaW1wb3J0IC1tIHRydW5rIGkgIiRzdm5yZXBvL3RydW5rIiAmJgorCXN2bl9jbWQgaW1wb3J0IC1tIGIvYSBpICIkc3ZucmVwby9icmFuY2hlcy9hIiAmJgorCXN2bl9jbWQgaW1wb3J0IC1tIGIvYiBpICIkc3ZucmVwby9icmFuY2hlcy9iIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIGNsb25lIC0tc3RkbGF5b3V0IHNldHMgdXAgdHJ1bmsgYXMgbWFzdGVyJyAnCisJZ2l0IHN2biBjbG9uZSAtcyAiJHN2bnJlcG8iIGcgJiYKKwkoCisJCWNkIGcgJiYKKwkJdGVzdCB4YGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL3RydW5rXjBgID0gXAorCQkgICAgIHhgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3Rlcl4wYAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTQ2LWdpdC1zdm4tZW1wdHktZGlycy5zaCBiL3QvdDkxNDYtZ2l0LXN2bi1lbXB0eS1kaXJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU2NTM2NWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTQ2LWdpdC1zdm4tZW1wdHktZGlycy5zaApAQCAtMCwwICsxLDE0MiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBFcmljIFdvbmcKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBjcmVhdGVzIGVtcHR5IGRpcmVjdG9yaWVzJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgcmVwbycgJworCWZvciBpIGluIGEgYiBjIGQgZC9lIGQvZS9mICJ3ZWlyZCBmaWxlIG5hbWUiCisJZG8KKwkJc3ZuX2NtZCBta2RpciAtbSAibWtkaXIgJGkiICIkc3ZucmVwbyIvIiRpIgorCWRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUnICdnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIgY2xvbmVkJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSBkaXJlY3RvcmllcyBleGlzdCcgJworCSgKKwkJY2QgY2xvbmVkICYmCisJCWZvciBpIGluIGEgYiBjIGQgZC9lIGQvZS9mICJ3ZWlyZCBmaWxlIG5hbWUiCisJCWRvCisJCQlpZiAhIHRlc3QgLWQgIiRpIgorCQkJdGhlbgorCQkJCWVjaG8gPiYyICIkaSBkb2VzIG5vdCBleGlzdCIKKwkJCQlleGl0IDEKKwkJCWZpCisJCWRvbmUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vcmUgZW1wdGluZXNzJyAnCisJc3ZuX2NtZCBta2RpciAtbSAiYmFuZyBiYW5nIiAgIiRzdm5yZXBvIi8iISAhIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIHJlYmFzZSBjcmVhdGVzIGVtcHR5IGRpcmVjdG9yeScgJworCSggY2QgY2xvbmVkICYmIGdpdCBzdm4gcmViYXNlICkKKwl0ZXN0IC1kIGNsb25lZC8iISAhIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIG1rZGlycyByZWNyZWF0ZXMgZW1wdHkgZGlyZWN0b3JpZXMnICcKKwkoCisJCWNkIGNsb25lZCAmJgorCQlybSAtciAqICYmCisJCWdpdCBzdm4gbWtkaXJzICYmCisJCWZvciBpIGluIGEgYiBjIGQgZC9lIGQvZS9mICJ3ZWlyZCBmaWxlIG5hbWUiICIhICEiCisJCWRvCisJCQlpZiAhIHRlc3QgLWQgIiRpIgorCQkJdGhlbgorCQkJCWVjaG8gPiYyICIkaSBkb2VzIG5vdCBleGlzdCIKKwkJCQlleGl0IDEKKwkJCWZpCisJCWRvbmUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzdm4gbWtkaXJzIC1yIHdvcmtzJyAnCisJKAorCQljZCBjbG9uZWQgJiYKKwkJcm0gLXIgKiAmJgorCQlnaXQgc3ZuIG1rZGlycyAtcjcgJiYKKwkJZm9yIGkgaW4gYSBiIGMgZCBkL2UgZC9lL2YgIndlaXJkIGZpbGUgbmFtZSIKKwkJZG8KKwkJCWlmICEgdGVzdCAtZCAiJGkiCisJCQl0aGVuCisJCQkJZWNobyA+JjIgIiRpIGRvZXMgbm90IGV4aXN0IgorCQkJCWV4aXQgMQorCQkJZmkKKwkJZG9uZQorCisJCWlmIHRlc3QgLWQgIiEgISIKKwkJdGhlbgorCQkJZWNobyA+JjIgIiRpIHNob3VsZCBub3QgZXhpc3QiCisJCQlleGl0IDEKKwkJZmkKKworCQlnaXQgc3ZuIG1rZGlycyAtcjggJiYKKwkJaWYgISB0ZXN0IC1kICIhICEiCisJCXRoZW4KKwkJCWVjaG8gPiYyICIkaSBub3QgZXhpc3QiCisJCQlleGl0IDEKKwkJZmkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgdHJ1bmsnICcKKwlmb3IgaSBpbiB0cnVuayB0cnVuay9hIHRydW5rLyJ3ZWlyZCBmaWxlIG5hbWUiCisJZG8KKwkJc3ZuX2NtZCBta2RpciAtbSAibWtkaXIgJGkiICIkc3ZucmVwbyIvIiRpIgorCWRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdHJ1bmsnICdnaXQgc3ZuIGNsb25lIC1zICIkc3ZucmVwbyIgdHJ1bmsnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IGRpcmVjdG9yaWVzIGluIHRydW5rIGV4aXN0JyAnCisJKAorCQljZCB0cnVuayAmJgorCQlmb3IgaSBpbiBhICJ3ZWlyZCBmaWxlIG5hbWUiCisJCWRvCisJCQlpZiAhIHRlc3QgLWQgIiRpIgorCQkJdGhlbgorCQkJCWVjaG8gPiYyICIkaSBkb2VzIG5vdCBleGlzdCIKKwkJCQlleGl0IDEKKwkJCWZpCisJCWRvbmUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSBhIHRvcC1sZXZlbCBkaXJlY3RvcnkgZnJvbSBzdm4nICcKKwlzdm5fY21kIHJtIC1tICJyZW1vdmUgZCIgIiRzdm5yZXBvIi9kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZWQgdG9wLWxldmVsIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCcgJworCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIiByZW1vdmVkICYmCisJdGVzdCAhIC1lIHJlbW92ZWQvZAorCisnCit1bmhhbmRsZWQ9LmdpdC9zdm4vcmVmcy9yZW1vdGVzL2dpdC1zdm4vdW5oYW5kbGVkLmxvZwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biBnYy1lZCBmaWxlcyB3b3JrJyAnCisJKAorCQljZCByZW1vdmVkICYmCisJCWdpdCBzdm4gZ2MgJiYKKwkJOiBDb21wcmVzczo6WmxpYiBtYXkgbm90IGJlIGF2YWlsYWJsZSAmJgorCQlpZiB0ZXN0IC1mICIkdW5oYW5kbGVkIi5negorCQl0aGVuCisJCQlzdm5fY21kIG1rZGlyIC1tIGd6ICIkc3ZucmVwbyIvZ3ogJiYKKwkJCWdpdCByZXNldCAtLWhhcmQgJChnaXQgcmV2LWxpc3QgSEVBRCB8IHRhaWwgLTEpICYmCisJCQlnaXQgc3ZuIHJlYmFzZSAmJgorCQkJdGVzdCAtZiAiJHVuaGFuZGxlZCIuZ3ogJiYKKwkJCXRlc3QgLWYgIiR1bmhhbmRsZWQiICYmCisJCQlmb3IgaSBpbiBhIGIgYyAid2VpcmQgZmlsZSBuYW1lIiBneiAiISAhIgorCQkJZG8KKwkJCQlpZiAhIHRlc3QgLWQgIiRpIgorCQkJCXRoZW4KKwkJCQkJZWNobyA+JjIgIiRpIGRvZXMgbm90IGV4aXN0IgorCQkJCQlleGl0IDEKKwkJCQlmaQorCQkJZG9uZQorCQlmaQorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTUwLXN2ay1tZXJnZXRpY2tldHMuc2ggYi90L3Q5MTUwLXN2ay1tZXJnZXRpY2tldHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTM1ODE0MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNTAtc3ZrLW1lcmdldGlja2V0cy5zaApAQCAtMCwwICsxLDI0IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IFNhbSBWaWxhaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0LXN2biBzdmsgbWVyZ2UgdGlja2V0cycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgc3ZrIGRlcG90JyAiCisJc3ZuYWRtaW4gbG9hZCAtcSAnJHJhd3N2bnJlcG8nIFwKKwkgIDwgJyRURVNUX0RJUkVDVE9SWS90OTE1MC9zdmstbWVyZ2UuZHVtcCcgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLVIgc3ZrbWVyZ2UgXAorCSAgLVQgdHJ1bmsgLWIgYnJhbmNoZXMgJyRzdm5yZXBvJyAmJgorCWdpdCBzdm4gZmV0Y2ggLS1hbGwKKwkiCisKK3V1aWQ9YjQ4Mjg5YjItOWMwOC00ZDcyLWFmMzctMDM1OGE0MGI5YzE1CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N2ayBtZXJnZXMgd2VyZSByZXByZXNlbnRlZCBjb21pbmcgaW4nICIKKwlbIGBnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBncmVwIHBhcmVudCB8IHdjIC1sYCAtZXEgMiBdCisJIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNTAvbWFrZS1zdmstZHVtcCBiL3QvdDkxNTAvbWFrZS1zdmstZHVtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjQyZjE0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1MC9tYWtlLXN2ay1kdW1wCkBAIC0wLDAgKzEsNTcgQEAKKyMhL2Jpbi9zaAorIworIyB0aGlzIHNjcmlwdCBzZXRzIHVwIGEgU3VidmVyc2lvbiByZXBvc2l0b3J5IGZvciBNYWtlZmlsZSBpbiB0aGUKKyMgZmlyc3QgZXZlciBnaXQgbWVyZ2UsIGFzIGlmIGl0IHdlcmUgZG9uZSB3aXRoIHN2ay4KKyMKKworc2V0IC1lCisKK3N2ayBkZXBvdG1hcCBmb28gfi8uc3ZrL2Zvbworc3ZrIGNvIC9mb28vIGZvbworY2QgZm9vCitta2RpciB0cnVuaworbWtkaXIgYnJhbmNoZXMKK3N2ayBhZGQgdHJ1bmsgYnJhbmNoZXMKK3N2ayBjb21taXQgLW0gIlNldHVwIHRydW5rIGFuZCBicmFuY2hlcyIKK2NkIHRydW5rCisKK2dpdCBjYXQtZmlsZSBibG9iIDY2ODM0NjNlOk1ha2VmaWxlID4gTWFrZWZpbGUKK3N2ayBhZGQgTWFrZWZpbGUgCisKK3N2ayBjb21taXQgLW0gImFuY2VzdG9yIgorY2QgLi4KK3N2ayBjcCB0cnVuayBicmFuY2hlcy9sZWZ0CisKK3N2ayBjb21taXQgLW0gIm1ha2UgbGVmdCBicmFuY2giCitjZCBicmFuY2hlcy9sZWZ0LworCitnaXQgY2F0LWZpbGUgYmxvYiA1ODczYjY3ZTpNYWtlZmlsZSA+IE1ha2VmaWxlCitzdmsgY29tbWl0IC1tICJsZWZ0IHVwZGF0ZSAxIgorCitjZCAuLi8uLi90cnVuaworZ2l0IGNhdC1maWxlIGJsb2IgNzUxMThiMTM6TWFrZWZpbGUgPiBNYWtlZmlsZQorc3ZrIGNvbW1pdCAtbSAidHJ1bmsgdXBkYXRlIgorCitjZCAuLi9icmFuY2hlcy9sZWZ0CitnaXQgY2F0LWZpbGUgYmxvYiBiNTAzOWRiNjpNYWtlZmlsZSA+IE1ha2VmaWxlCitzdmsgY29tbWl0IC1tICJsZWZ0IHVwZGF0ZSAyIgorCitjZCAuLi8uLi90cnVuaworc3ZrIHNtIC9mb28vYnJhbmNoZXMvbGVmdAorIyBpbiB0aGVvcnkgd2UgY291bGQgZGVsZXRlIHRoZSAibGVmdCIgYnJhbmNoIGhlcmUsIGJ1dCBpdCdzIG5vdAorIyByZXF1aXJlZCBzbyBkb24ndCBkbyBpdCwgaW4gY2FzZSBwZW9wbGUgc3RhcnQgZ2V0dGluZyBpZGVhcyA7KQorc3ZrIGNvbW1pdCAtbSAibWVyZ2UgYnJhbmNoICdsZWZ0JyBpbnRvICd0cnVuayciCisKK2dpdCBjYXQtZmlsZSBibG9iIGI1MWFkNDMxOk1ha2VmaWxlID4gTWFrZWZpbGUKKworc3ZrIGRpZmYgTWFrZWZpbGUgJiYgZWNobyAiSGV5ISAgTm8gZGlmZmVyZW5jZXMsIG1hZ2ljIgorCitjZCAuLi8uLgorCitzdm5hZG1pbiBkdW1wIH4vLnN2ay9mb28gPiBzdmstbWVyZ2UuZHVtcAorCitzdmsgY28gLWQgZm9vCitybSAtcmYgZm9vCitzdmsgZGVwb3RtYXAgLWQgL2Zvby8KK3JtIC1yZiB+Ly5zdmsvZm9vCisKZGlmZiAtLWdpdCBhL3QvdDkxNTAvc3ZrLW1lcmdlLmR1bXAgYi90L3Q5MTUwL3N2ay1tZXJnZS5kdW1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZjcwZGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTUwL3N2ay1tZXJnZS5kdW1wCkBAIC0wLDAgKzEsNjE2IEBACitTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMgorCitVVUlEOiBiNDgyODliMi05YzA4LTRkNzItYWYzNy0wMzU4YTQwYjljMTUKKworUmV2aXNpb24tbnVtYmVyOiAwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA1NgorQ29udGVudC1sZW5ndGg6IDU2CisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMTAtMTlUMjM6NDQ6MDMuNzIyOTY5WgorUFJPUFMtRU5ECisKK1JldmlzaW9uLW51bWJlcjogMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTIzCitDb250ZW50LWxlbmd0aDogMTIzCisKK0sgNworc3ZuOmxvZworViAyNAorU2V0dXAgdHJ1bmsgYW5kIGJyYW5jaGVzCitLIDEwCitzdm46YXV0aG9yCitWIDQKK3NhbXYKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMTAtMTlUMjM6NDQ6MDQuOTI3NTMzWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdHJ1bmsKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK1JldmlzaW9uLW51bWJlcjogMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTA2CitDb250ZW50LWxlbmd0aDogMTA2CisKK0sgNworc3ZuOmxvZworViA4CithbmNlc3RvcgorSyAxMAorc3ZuOmF1dGhvcgorViA0CitzYW12CitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTEwLTE5VDIzOjQ0OjA1LjgzNTU4NVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rL01ha2VmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNDAxCitUZXh0LWNvbnRlbnQtbWQ1OiBiZmQ4ZmY3NzhkMTQ5MmRjNjc1ODU2NzM3MzE3NmE4OQorQ29udGVudC1sZW5ndGg6IDI0MTEKKworUFJPUFMtRU5ECisjIC1EQ09MTElTSU9OX0NIRUNLIGlmIHlvdSBiZWxpZXZlIHRoYXQgU0hBMSdzCisjIDE0NjE1MDE2MzczMzA5MDI5MTgyMDM2ODQ4MzI3MTYyODMwMTk2NTU5MzI1NDI5NzYgaGFzaGVzIGRvIG5vdCBnaXZlIHlvdQorIyBlbm91Z2ggZ3VhcmFudGVlcyBhYm91dCBubyBjb2xsaXNpb25zIGJldHdlZW4gb2JqZWN0cyBldmVyIGhhcGVubmluZy4KKyMKKyMgLUROU0VDIGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHN1Yi1zZWNvbmQgZmlsZSBtdGltZXMgYW5kIGN0aW1lcy4KKyMgTm90ZSB0aGF0IHlvdSBuZWVkIHNvbWUgbmV3IGdsaWJjIChhdCBsZWFzdCA+Mi4yLjQpIGZvciB0aGlzLCBhbmQgaXQgd2lsbAorIyBCUkVBSyBZT1VSIExPQ0FMIERJRkZTISBzaG93LWRpZmYgYW5kIGFueXRoaW5nIHVzaW5nIGl0IHdpbGwgbGlrZWx5IHJhbmRvbWx5CisjIGJyZWFrIHVubGVzcyB5b3VyIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBzdXBwb3J0cyB0aG9zZSBzdWItc2Vjb25kIHRpbWVzCisjIChteSBleHQzIGRvZXNuJ3QpLgorQ0ZMQUdTPS1nIC1PMyAtV2FsbAorCitDQz1nY2MKKworCitQUk9HPSAgIHVwZGF0ZS1jYWNoZSBzaG93LWRpZmYgaW5pdC1kYiB3cml0ZS10cmVlIHJlYWQtdHJlZSBjb21taXQtdHJlZSBcCisJY2F0LWZpbGUgZnNjay1jYWNoZSBjaGVja291dC1jYWNoZSBkaWZmLXRyZWUgcmV2LXRyZWUgc2hvdy1maWxlcyBcCisJY2hlY2stZmlsZXMgbHMtdHJlZSBtZXJnZS1iYXNlCisKK2FsbDogJChQUk9HKQorCitpbnN0YWxsOiAkKFBST0cpCisJaW5zdGFsbCAkKFBST0cpICQoSE9NRSkvYmluLworCitMSUJTPSAtbHNzbCAtbHoKKworaW5pdC1kYjogaW5pdC1kYi5vCisKK3VwZGF0ZS1jYWNoZTogdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHVwZGF0ZS1jYWNoZSB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitzaG93LWRpZmY6IHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWRpZmYgc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKword3JpdGUtdHJlZTogd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB3cml0ZS10cmVlIHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLXRyZWU6IHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZWFkLXRyZWUgcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY29tbWl0LXRyZWU6IGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNvbW1pdC10cmVlIGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2F0LWZpbGU6IGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNhdC1maWxlIGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZnNjay1jYWNoZTogZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBmc2NrLWNhY2hlIGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVja291dC1jYWNoZTogY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2tvdXQtY2FjaGUgY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitkaWZmLXRyZWU6IGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBkaWZmLXRyZWUgZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmV2LXRyZWU6IHJldi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJldi10cmVlIHJldi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1maWxlczogc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWZpbGVzIHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVjay1maWxlczogY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2stZmlsZXMgY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitscy10cmVlOiBscy10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGxzLXRyZWUgbHMtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK21lcmdlLWJhc2U6IG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtYmFzZSBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC1jYWNoZS5vOiBjYWNoZS5oCitzaG93LWRpZmYubzogY2FjaGUuaAorCitjbGVhbjoKKwlybSAtZiAqLm8gJChQUk9HKQorCitiYWNrdXA6IGNsZWFuCisJY2QgLi4gOyB0YXIgY3p2ZiBkaXJjYWNoZS50YXIuZ3ogZGlyLWNhY2hlCisKKworUmV2aXNpb24tbnVtYmVyOiAzCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTUKK0NvbnRlbnQtbGVuZ3RoOiAxMTUKKworSyA3Citzdm46bG9nCitWIDE2CittYWtlIGxlZnQgYnJhbmNoCitLIDEwCitzdm46YXV0aG9yCitWIDQKK3NhbXYKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMTAtMTlUMjM6NDQ6MDYuNzE5NzM3WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAyCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworUmV2aXNpb24tbnVtYmVyOiA0CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTIKK0NvbnRlbnQtbGVuZ3RoOiAxMTIKKworSyA3Citzdm46bG9nCitWIDEzCitsZWZ0IHVwZGF0ZSAxCitLIDEwCitzdm46YXV0aG9yCitWIDQKK3NhbXYKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMTAtMTlUMjM6NDQ6MDcuMTY3NjY2WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNDY1CitUZXh0LWNvbnRlbnQtbWQ1OiAxNmUzOGQ5NzUzYjA2MTczMTY1MDU2MWNlMDFiMTE5NQorQ29udGVudC1sZW5ndGg6IDI0NjUKKworIyAtRENPTExJU0lPTl9DSEVDSyBpZiB5b3UgYmVsaWV2ZSB0aGF0IFNIQTEncworIyAxNDYxNTAxNjM3MzMwOTAyOTE4MjAzNjg0ODMyNzE2MjgzMDE5NjU1OTMyNTQyOTc2IGhhc2hlcyBkbyBub3QgZ2l2ZSB5b3UKKyMgZW5vdWdoIGd1YXJhbnRlZXMgYWJvdXQgbm8gY29sbGlzaW9ucyBiZXR3ZWVuIG9iamVjdHMgZXZlciBoYXBlbm5pbmcuCisjCisjIC1ETlNFQyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCBzdWItc2Vjb25kIGZpbGUgbXRpbWVzIGFuZCBjdGltZXMuCisjIE5vdGUgdGhhdCB5b3UgbmVlZCBzb21lIG5ldyBnbGliYyAoYXQgbGVhc3QgPjIuMi40KSBmb3IgdGhpcywgYW5kIGl0IHdpbGwKKyMgQlJFQUsgWU9VUiBMT0NBTCBESUZGUyEgc2hvdy1kaWZmIGFuZCBhbnl0aGluZyB1c2luZyBpdCB3aWxsIGxpa2VseSByYW5kb21seQorIyBicmVhayB1bmxlc3MgeW91ciB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdGhvc2Ugc3ViLXNlY29uZCB0aW1lcworIyAobXkgZXh0MyBkb2Vzbid0KS4KK0NGTEFHUz0tZyAtTzMgLVdhbGwKKworQ0M9Z2NjCisKKworUFJPRz0gICB1cGRhdGUtY2FjaGUgc2hvdy1kaWZmIGluaXQtZGIgd3JpdGUtdHJlZSByZWFkLXRyZWUgY29tbWl0LXRyZWUgXAorCWNhdC1maWxlIGZzY2stY2FjaGUgY2hlY2tvdXQtY2FjaGUgZGlmZi10cmVlIHJldi10cmVlIHNob3ctZmlsZXMgXAorCWNoZWNrLWZpbGVzIGxzLXRyZWUgbWVyZ2UtYmFzZQorCithbGw6ICQoUFJPRykKKworaW5zdGFsbDogJChQUk9HKQorCWluc3RhbGwgJChQUk9HKSAkKEhPTUUpL2Jpbi8KKworTElCUz0gLWxzc2wgLWx6CisKK2luaXQtZGI6IGluaXQtZGIubworCit1cGRhdGUtY2FjaGU6IHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB1cGRhdGUtY2FjaGUgdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1kaWZmOiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1kaWZmIHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3dyaXRlLXRyZWU6IHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gd3JpdGUtdHJlZSB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC10cmVlOiByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmVhZC10cmVlIHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NvbW1pdC10cmVlOiBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjb21taXQtdHJlZSBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NhdC1maWxlOiBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjYXQtZmlsZSBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2ZzY2stY2FjaGU6IGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZnNjay1jYWNoZSBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2tvdXQtY2FjaGU6IGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrb3V0LWNhY2hlIGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZGlmZi10cmVlOiBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZGlmZi10cmVlIGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Jldi10cmVlOiByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIHJldi10cmVlIHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitzaG93LWZpbGVzOiBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZmlsZXMgc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrLWZpbGVzOiBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVjay1maWxlcyBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2xzLXRyZWU6IGxzLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbHMtdHJlZSBscy10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbWVyZ2UtYmFzZTogbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1iYXNlIG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLWNhY2hlLm86IGNhY2hlLmgKK3Nob3ctZGlmZi5vOiBjYWNoZS5oCisKK2NsZWFuOgorCXJtIC1mICoubyAkKFBST0cpCisKK2JhY2t1cDogY2xlYW4KKwljZCAuLiA7IHRhciBjenZmIGRpcmNhY2hlLnRhci5neiBkaXItY2FjaGUKKworCitSZXZpc2lvbi1udW1iZXI6IDUKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMQorQ29udGVudC1sZW5ndGg6IDExMQorCitLIDcKK3N2bjpsb2cKK1YgMTIKK3RydW5rIHVwZGF0ZQorSyAxMAorc3ZuOmF1dGhvcgorViA0CitzYW12CitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTEwLTE5VDIzOjQ0OjA3LjYxOTYzM1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rL01ha2VmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDI1MjEKK1RleHQtY29udGVudC1tZDU6IDA2Njg0MThhNjIxMzMzZjRhYThiNjYzMmNkNjNlMmEwCitDb250ZW50LWxlbmd0aDogMjUyMQorCisjIC1EQ09MTElTSU9OX0NIRUNLIGlmIHlvdSBiZWxpZXZlIHRoYXQgU0hBMSdzCisjIDE0NjE1MDE2MzczMzA5MDI5MTgyMDM2ODQ4MzI3MTYyODMwMTk2NTU5MzI1NDI5NzYgaGFzaGVzIGRvIG5vdCBnaXZlIHlvdQorIyBlbm91Z2ggZ3VhcmFudGVlcyBhYm91dCBubyBjb2xsaXNpb25zIGJldHdlZW4gb2JqZWN0cyBldmVyIGhhcGVubmluZy4KKyMKKyMgLUROU0VDIGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHN1Yi1zZWNvbmQgZmlsZSBtdGltZXMgYW5kIGN0aW1lcy4KKyMgTm90ZSB0aGF0IHlvdSBuZWVkIHNvbWUgbmV3IGdsaWJjIChhdCBsZWFzdCA+Mi4yLjQpIGZvciB0aGlzLCBhbmQgaXQgd2lsbAorIyBCUkVBSyBZT1VSIExPQ0FMIERJRkZTISBzaG93LWRpZmYgYW5kIGFueXRoaW5nIHVzaW5nIGl0IHdpbGwgbGlrZWx5IHJhbmRvbWx5CisjIGJyZWFrIHVubGVzcyB5b3VyIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBzdXBwb3J0cyB0aG9zZSBzdWItc2Vjb25kIHRpbWVzCisjIChteSBleHQzIGRvZXNuJ3QpLgorQ0ZMQUdTPS1nIC1PMyAtV2FsbAorCitDQz1nY2MKKworCitQUk9HPSAgIHVwZGF0ZS1jYWNoZSBzaG93LWRpZmYgaW5pdC1kYiB3cml0ZS10cmVlIHJlYWQtdHJlZSBjb21taXQtdHJlZSBcCisJY2F0LWZpbGUgZnNjay1jYWNoZSBjaGVja291dC1jYWNoZSBkaWZmLXRyZWUgcmV2LXRyZWUgc2hvdy1maWxlcyBcCisJY2hlY2stZmlsZXMgbHMtdHJlZSBtZXJnZS1iYXNlIG1lcmdlLWNhY2hlCisKK2FsbDogJChQUk9HKQorCitpbnN0YWxsOiAkKFBST0cpCisJaW5zdGFsbCAkKFBST0cpICQoSE9NRSkvYmluLworCitMSUJTPSAtbHNzbCAtbHoKKworaW5pdC1kYjogaW5pdC1kYi5vCisKK3VwZGF0ZS1jYWNoZTogdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHVwZGF0ZS1jYWNoZSB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitzaG93LWRpZmY6IHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWRpZmYgc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKword3JpdGUtdHJlZTogd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB3cml0ZS10cmVlIHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLXRyZWU6IHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZWFkLXRyZWUgcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY29tbWl0LXRyZWU6IGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNvbW1pdC10cmVlIGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2F0LWZpbGU6IGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNhdC1maWxlIGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZnNjay1jYWNoZTogZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBmc2NrLWNhY2hlIGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVja291dC1jYWNoZTogY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2tvdXQtY2FjaGUgY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitkaWZmLXRyZWU6IGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBkaWZmLXRyZWUgZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmV2LXRyZWU6IHJldi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJldi10cmVlIHJldi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1maWxlczogc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWZpbGVzIHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVjay1maWxlczogY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2stZmlsZXMgY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitscy10cmVlOiBscy10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGxzLXRyZWUgbHMtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK21lcmdlLWJhc2U6IG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtYmFzZSBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbWVyZ2UtY2FjaGU6IG1lcmdlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWNhY2hlIG1lcmdlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC1jYWNoZS5vOiBjYWNoZS5oCitzaG93LWRpZmYubzogY2FjaGUuaAorCitjbGVhbjoKKwlybSAtZiAqLm8gJChQUk9HKQorCitiYWNrdXA6IGNsZWFuCisJY2QgLi4gOyB0YXIgY3p2ZiBkaXJjYWNoZS50YXIuZ3ogZGlyLWNhY2hlCisKKworUmV2aXNpb24tbnVtYmVyOiA2CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTIKK0NvbnRlbnQtbGVuZ3RoOiAxMTIKKworSyA3Citzdm46bG9nCitWIDEzCitsZWZ0IHVwZGF0ZSAyCitLIDEwCitzdm46YXV0aG9yCitWIDQKK3NhbXYKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMTAtMTlUMjM6NDQ6MDguMDY3NTU0WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNTkzCitUZXh0LWNvbnRlbnQtbWQ1OiA1Y2NmZjY4OWZiMjkwZTAwYjg1ZmUxOGVlNTBjNTRiYQorQ29udGVudC1sZW5ndGg6IDI1OTMKKworIyAtRENPTExJU0lPTl9DSEVDSyBpZiB5b3UgYmVsaWV2ZSB0aGF0IFNIQTEncworIyAxNDYxNTAxNjM3MzMwOTAyOTE4MjAzNjg0ODMyNzE2MjgzMDE5NjU1OTMyNTQyOTc2IGhhc2hlcyBkbyBub3QgZ2l2ZSB5b3UKKyMgZW5vdWdoIGd1YXJhbnRlZXMgYWJvdXQgbm8gY29sbGlzaW9ucyBiZXR3ZWVuIG9iamVjdHMgZXZlciBoYXBlbm5pbmcuCisjCisjIC1ETlNFQyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCBzdWItc2Vjb25kIGZpbGUgbXRpbWVzIGFuZCBjdGltZXMuCisjIE5vdGUgdGhhdCB5b3UgbmVlZCBzb21lIG5ldyBnbGliYyAoYXQgbGVhc3QgPjIuMi40KSBmb3IgdGhpcywgYW5kIGl0IHdpbGwKKyMgQlJFQUsgWU9VUiBMT0NBTCBESUZGUyEgc2hvdy1kaWZmIGFuZCBhbnl0aGluZyB1c2luZyBpdCB3aWxsIGxpa2VseSByYW5kb21seQorIyBicmVhayB1bmxlc3MgeW91ciB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdGhvc2Ugc3ViLXNlY29uZCB0aW1lcworIyAobXkgZXh0MyBkb2Vzbid0KS4KK0NGTEFHUz0tZyAtTzMgLVdhbGwKKworQ0M9Z2NjCisKKworUFJPRz0gICB1cGRhdGUtY2FjaGUgc2hvdy1kaWZmIGluaXQtZGIgd3JpdGUtdHJlZSByZWFkLXRyZWUgY29tbWl0LXRyZWUgXAorCWNhdC1maWxlIGZzY2stY2FjaGUgY2hlY2tvdXQtY2FjaGUgZGlmZi10cmVlIHJldi10cmVlIHNob3ctZmlsZXMgXAorCWNoZWNrLWZpbGVzIGxzLXRyZWUgbWVyZ2UtYmFzZQorCithbGw6ICQoUFJPRykKKworaW5zdGFsbDogJChQUk9HKQorCWluc3RhbGwgJChQUk9HKSAkKEhPTUUpL2Jpbi8KKworTElCUz0gLWxzc2wgLWx6CisKK2luaXQtZGI6IGluaXQtZGIubworCit1cGRhdGUtY2FjaGU6IHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB1cGRhdGUtY2FjaGUgdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1kaWZmOiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1kaWZmIHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3dyaXRlLXRyZWU6IHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gd3JpdGUtdHJlZSB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC10cmVlOiByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmVhZC10cmVlIHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NvbW1pdC10cmVlOiBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjb21taXQtdHJlZSBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NhdC1maWxlOiBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjYXQtZmlsZSBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2ZzY2stY2FjaGU6IGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBmc2NrLWNhY2hlIGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK2NoZWNrb3V0LWNhY2hlOiBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVja291dC1jYWNoZSBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2RpZmYtdHJlZTogZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGRpZmYtdHJlZSBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZXYtdHJlZTogcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZXYtdHJlZSByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworc2hvdy1maWxlczogc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWZpbGVzIHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVjay1maWxlczogY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2stZmlsZXMgY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitscy10cmVlOiBscy10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGxzLXRyZWUgbHMtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK21lcmdlLWJhc2U6IG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1iYXNlIG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK3JlYWQtY2FjaGUubzogY2FjaGUuaAorc2hvdy1kaWZmLm86IGNhY2hlLmgKKworY2xlYW46CisJcm0gLWYgKi5vICQoUFJPRykKKworYmFja3VwOiBjbGVhbgorCWNkIC4uIDsgdGFyIGN6dmYgZGlyY2FjaGUudGFyLmd6IGRpci1jYWNoZQorCisKK1JldmlzaW9uLW51bWJlcjogNworUHJvcC1jb250ZW50LWxlbmd0aDogMTMxCitDb250ZW50LWxlbmd0aDogMTMxCisKK0sgNworc3ZuOmxvZworViAzMgorbWVyZ2UgYnJhbmNoICdsZWZ0JyBpbnRvICd0cnVuaycKK0sgMTAKK3N2bjphdXRob3IKK1YgNAorc2FtdgorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOS0xMC0xOVQyMzo0NDowOC45NzE4MDFaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuaworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDgzCitDb250ZW50LWxlbmd0aDogODMKKworSyA5Citzdms6bWVyZ2UKK1YgNTMKK2I0ODI4OWIyLTljMDgtNGQ3Mi1hZjM3LTAzNThhNDBiOWMxNTovYnJhbmNoZXMvbGVmdDo2CitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IHRydW5rL01ha2VmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDI3MTMKK1RleHQtY29udGVudC1tZDU6IDBhZmJlMzRmMjQ0Y2Q2NjJiMWY5N2Q3MDhjNjg3ZjkwCitDb250ZW50LWxlbmd0aDogMjcxMworCisjIC1EQ09MTElTSU9OX0NIRUNLIGlmIHlvdSBiZWxpZXZlIHRoYXQgU0hBMSdzCisjIDE0NjE1MDE2MzczMzA5MDI5MTgyMDM2ODQ4MzI3MTYyODMwMTk2NTU5MzI1NDI5NzYgaGFzaGVzIGRvIG5vdCBnaXZlIHlvdQorIyBlbm91Z2ggZ3VhcmFudGVlcyBhYm91dCBubyBjb2xsaXNpb25zIGJldHdlZW4gb2JqZWN0cyBldmVyIGhhcGVubmluZy4KKyMKKyMgLUROU0VDIGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHN1Yi1zZWNvbmQgZmlsZSBtdGltZXMgYW5kIGN0aW1lcy4KKyMgTm90ZSB0aGF0IHlvdSBuZWVkIHNvbWUgbmV3IGdsaWJjIChhdCBsZWFzdCA+Mi4yLjQpIGZvciB0aGlzLCBhbmQgaXQgd2lsbAorIyBCUkVBSyBZT1VSIExPQ0FMIERJRkZTISBzaG93LWRpZmYgYW5kIGFueXRoaW5nIHVzaW5nIGl0IHdpbGwgbGlrZWx5IHJhbmRvbWx5CisjIGJyZWFrIHVubGVzcyB5b3VyIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBzdXBwb3J0cyB0aG9zZSBzdWItc2Vjb25kIHRpbWVzCisjIChteSBleHQzIGRvZXNuJ3QpLgorQ0ZMQUdTPS1nIC1PMyAtV2FsbAorCitDQz1nY2MKKworCitQUk9HPSAgIHVwZGF0ZS1jYWNoZSBzaG93LWRpZmYgaW5pdC1kYiB3cml0ZS10cmVlIHJlYWQtdHJlZSBjb21taXQtdHJlZSBcCisJY2F0LWZpbGUgZnNjay1jYWNoZSBjaGVja291dC1jYWNoZSBkaWZmLXRyZWUgcmV2LXRyZWUgc2hvdy1maWxlcyBcCisJY2hlY2stZmlsZXMgbHMtdHJlZSBtZXJnZS1iYXNlIG1lcmdlLWNhY2hlCisKK2FsbDogJChQUk9HKQorCitpbnN0YWxsOiAkKFBST0cpCisJaW5zdGFsbCAkKFBST0cpICQoSE9NRSkvYmluLworCitMSUJTPSAtbHNzbCAtbHoKKworaW5pdC1kYjogaW5pdC1kYi5vCisKK3VwZGF0ZS1jYWNoZTogdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHVwZGF0ZS1jYWNoZSB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitzaG93LWRpZmY6IHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWRpZmYgc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKword3JpdGUtdHJlZTogd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB3cml0ZS10cmVlIHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLXRyZWU6IHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZWFkLXRyZWUgcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY29tbWl0LXRyZWU6IGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNvbW1pdC10cmVlIGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2F0LWZpbGU6IGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNhdC1maWxlIGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZnNjay1jYWNoZTogZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIGZzY2stY2FjaGUgZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworY2hlY2tvdXQtY2FjaGU6IGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrb3V0LWNhY2hlIGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZGlmZi10cmVlOiBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZGlmZi10cmVlIGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Jldi10cmVlOiByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIHJldi10cmVlIHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitzaG93LWZpbGVzOiBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZmlsZXMgc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrLWZpbGVzOiBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVjay1maWxlcyBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2xzLXRyZWU6IGxzLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbHMtdHJlZSBscy10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbWVyZ2UtYmFzZTogbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWJhc2UgbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworbWVyZ2UtY2FjaGU6IG1lcmdlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWNhY2hlIG1lcmdlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC1jYWNoZS5vOiBjYWNoZS5oCitzaG93LWRpZmYubzogY2FjaGUuaAorCitjbGVhbjoKKwlybSAtZiAqLm8gJChQUk9HKQorCitiYWNrdXA6IGNsZWFuCisJY2QgLi4gOyB0YXIgY3p2ZiBkaXJjYWNoZS50YXIuZ3ogZGlyLWNhY2hlCisKKwpkaWZmIC0tZ2l0IGEvdC90OTE1MS1zdm4tbWVyZ2VpbmZvLnNoIGIvdC90OTE1MS1zdm4tbWVyZ2VpbmZvLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM1NjljNjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTUxLXN2bi1tZXJnZWluZm8uc2gKQEAgLTAsMCArMSw0MSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNywgMjAwOSBTYW0gVmlsYWluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdC1zdm4gc3ZuIG1lcmdlaW5mbyBwcm9wZXJ0aWVzJworCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9hZCBzdm4gZHVtcCcgIgorCXN2bmFkbWluIGxvYWQgLXEgJyRyYXdzdm5yZXBvJyBcCisJICA8ICckVEVTVF9ESVJFQ1RPUlkvdDkxNTEvc3ZuLW1lcmdlaW5mby5kdW1wJyAmJgorCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtUiBzdm5tZXJnZSBcCisJICAtVCB0cnVuayAtYiBicmFuY2hlcyAnJHN2bnJlcG8nICYmCisJZ2l0IHN2biBmZXRjaCAtLWFsbAorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsIHN2biBtZXJnZXMgYmVjYW1lIGdpdCBtZXJnZSBjb21taXRzJyAnCisJdW5tYXJrZWQ9JChnaXQgcmV2LWxpc3QgLS1wYXJlbnRzIC0tYWxsIC0tZ3JlcD1NZXJnZSB8CisJCWdyZXAgLXYgIiAuKiAiIHwgY3V0IC1mMSAtZCIgIikKKwlbIC16ICIkdW5tYXJrZWQiIF0KKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeSBwaWNrcyBkaWQgbm90IGJlY29tZSBnaXQgbWVyZ2UgY29tbWl0cycgJworCWJhZF9jaGVycmllcz0kKGdpdCByZXYtbGlzdCAtLXBhcmVudHMgLS1hbGwgLS1ncmVwPUNoZXJyeSB8CisJCWdyZXAgIiAuKiAiIHwgY3V0IC1mMSAtZCIgIikKKwlbIC16ICIkYmFkX2NoZXJyaWVzIiBdCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdm4gbm9uLW1lcmdlIG1lcmdlIGNvbW1pdHMgZGlkIG5vdCBiZWNvbWUgZ2l0IG1lcmdlIGNvbW1pdHMnICcKKwliYWRfbm9uX21lcmdlcz0kKGdpdCByZXYtbGlzdCAtLXBhcmVudHMgLS1hbGwgLS1ncmVwPW5vbi1tZXJnZSB8CisJCWdyZXAgIiAuKiAiIHwgY3V0IC1mMSAtZCIgIikKKwlbIC16ICIkYmFkX25vbl9tZXJnZXMiIF0KKwknCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2V2ZXJ5dGhpbmcgZ290IG1lcmdlZCBpbiB0aGUgZW5kJyAnCisJdW5tZXJnZWQ9JChnaXQgcmV2LWxpc3QgLS1hbGwgLS1ub3QgbWFzdGVyKQorCVsgLXogIiR1bm1lcmdlZCIgXQorCScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTUxLy5naXRpZ25vcmUgYi90L3Q5MTUxLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg3YzM3ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNTEvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDIgQEAKK2ZvbworZm9vLnN2bgpkaWZmIC0tZ2l0IGEvdC90OTE1MS9tYWtlLXN2bm1lcmdlLWR1bXAgYi90L3Q5MTUxL21ha2Utc3ZubWVyZ2UtZHVtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDczZjE0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1MS9tYWtlLXN2bm1lcmdlLWR1bXAKQEAgLTAsMCArMSwyMjIgQEAKKyMhL2Jpbi9zaAorIworIyB0aGlzIHNjcmlwdCBzZXRzIHVwIGEgU3VidmVyc2lvbiByZXBvc2l0b3J5IGZvciBNYWtlZmlsZSBpbiB0aGUKKyMgZmlyc3QgZXZlciBnaXQgbWVyZ2UsIGFzIGlmIGl0IHdlcmUgZG9uZSB3aXRoIHN2bm1lcmdlIChTVk4gMS41KykKKyMKKworcm0gLXJmIGZvby5zdm4gZm9vCitzZXQgLWUKKworbWtkaXIgZm9vLnN2bgorc3ZuYWRtaW4gY3JlYXRlIGZvby5zdm4KK3N2biBjbyBmaWxlOi8vYHB3ZGAvZm9vLnN2biBmb28KKworY29tbWl0KCkgeworICAgIGk9JCgoICQxICsgMSApKQorICAgIHNoaWZ0OworICAgIHN2biBjb21taXQgLW0gIihyJGkpICQqIiA+L2Rldi9udWxsIHx8IGV4aXQgMQorICAgIGVjaG8gJGkKK30KKworc2F5KCkgeworICAgIGVjaG8gIhtbMW0gKiAkKhtbMG0iCit9CisKK2k9MAorY2QgZm9vCitta2RpciB0cnVuaworbWtkaXIgYnJhbmNoZXMKK21rZGlyIHRhZ3MKK3N2biBhZGQgdHJ1bmsgYnJhbmNoZXMgdGFncworaT0kKGNvbW1pdCAkaSAiU2V0dXAgdHJ1bmssIGJyYW5jaGVzLCBhbmQgdGFncyIpCisKK2dpdCBjYXQtZmlsZSBibG9iIDY2ODM0NjNlOk1ha2VmaWxlID4gdHJ1bmsvTWFrZWZpbGUKK3N2biBhZGQgdHJ1bmsvTWFrZWZpbGUgCisKK3NheSAiQ29tbWl0dGluZyBBTkNFU1RPUiIKK2k9JChjb21taXQgJGkgImFuY2VzdG9yIikKK3N2biBjcCB0cnVuayBicmFuY2hlcy9sZWZ0CisKK3NheSAiQ29tbWl0dGluZyBCUkFOQ0ggUE9JTlQiCitpPSQoY29tbWl0ICRpICJtYWtlIGxlZnQgYnJhbmNoIikKK3N2biBjcCB0cnVuayBicmFuY2hlcy9yaWdodAorCitzYXkgIkNvbW1pdHRpbmcgb3RoZXIgQlJBTkNIIFBPSU5UIgoraT0kKGNvbW1pdCAkaSAibWFrZSByaWdodCBicmFuY2giKQorCitzYXkgIkNvbW1pdHRpbmcgTEVGVCBVUERBVEUiCitnaXQgY2F0LWZpbGUgYmxvYiA1ODczYjY3ZTpNYWtlZmlsZSA+IGJyYW5jaGVzL2xlZnQvTWFrZWZpbGUKK2k9JChjb21taXQgJGkgImxlZnQgdXBkYXRlIDEiKQorCitnaXQgY2F0LWZpbGUgYmxvYiA3NTExOGIxMzpNYWtlZmlsZSA+IGJyYW5jaGVzL3JpZ2h0L01ha2VmaWxlCitzYXkgIkNvbW1pdHRpbmcgUklHSFQgVVBEQVRFIgorcHJlX3JpZ2h0X3VwZGF0ZV8xPSRpCitpPSQoY29tbWl0ICRpICJyaWdodCB1cGRhdGUgMSIpCisKK3NheSAiTWFraW5nIG1vcmUgY29tbWl0cyBvbiBMRUZUIgorZ2l0IGNhdC1maWxlIGJsb2IgZmY1ZWJlMzk6TWFrZWZpbGUgPiBicmFuY2hlcy9sZWZ0L01ha2VmaWxlCitpPSQoY29tbWl0ICRpICJsZWZ0IHVwZGF0ZSAyIikKK2dpdCBjYXQtZmlsZSBibG9iIGI1MDM5ZGI2Ok1ha2VmaWxlID4gYnJhbmNoZXMvbGVmdC9NYWtlZmlsZQoraT0kKGNvbW1pdCAkaSAibGVmdCB1cGRhdGUgMyIpCisKK3NheSAiTWFraW5nIGEgTEVGVCBTVUItQlJBTkNIIgorc3ZuIGNwIGJyYW5jaGVzL2xlZnQgYnJhbmNoZXMvbGVmdC1zdWIKK3N1Yl9sZWZ0X21ha2U9JGkKK2k9JChjb21taXQgJGkgIm1ha2UgbGVmdCBzdWItYnJhbmNoIikKKworc2F5ICJNYWtpbmcgYSBjb21taXQgb24gTEVGVCBTVUItQlJBTkNIIgorZWNobyAiY3J1bmNoIiA+IGJyYW5jaGVzL2xlZnQtc3ViL1JFQURNRQorc3ZuIGFkZCBicmFuY2hlcy9sZWZ0LXN1Yi9SRUFETUUKK2k9JChjb21taXQgJGkgImxlZnQgc3ViLWJyYW5jaCB1cGRhdGUgMSIpCisKK3NheSAiTWVyZ2luZyBMRUZUIHRvIFRSVU5LIgorc3ZuIHVwZGF0ZQorY2QgdHJ1bmsKK3N2biBtZXJnZSAuLi9icmFuY2hlcy9sZWZ0IC0tYWNjZXB0IHBvc3Rwb25lCitnaXQgY2F0LWZpbGUgYmxvYiBiNTAzOWRiNjpNYWtlZmlsZSA+IE1ha2VmaWxlCitzdm4gcmVzb2x2ZWQgTWFrZWZpbGUKK2k9JChjb21taXQgJGkgIk1lcmdlIGxlZnQgdG8gdHJ1bmsgMSIpCitjZCAuLgorCitzYXkgIk1ha2luZyBtb3JlIGNvbW1pdHMgb24gTEVGVCBhbmQgUklHSFQiCitlY2hvICJ0b3VjaGUiID4gYnJhbmNoZXMvbGVmdC96bG9uaworc3ZuIGFkZCBicmFuY2hlcy9sZWZ0L3psb25rCitpPSQoY29tbWl0ICRpICJsZWZ0IHVwZGF0ZSA0IikKK2VjaG8gInRod2Fja2UiID4gYnJhbmNoZXMvcmlnaHQvYmFuZworc3ZuIGFkZCBicmFuY2hlcy9yaWdodC9iYW5nCitpPSQoY29tbWl0ICRpICJyaWdodCB1cGRhdGUgMiIpCisKK3NheSAiU3F1YXNoIG1lcmdlIG9mIFJJR0hUIHRpcCAyIGNvbW1pdHMgb250byBUUlVOSyIKK3N2biB1cGRhdGUKK2NkIHRydW5rCitzdm4gbWVyZ2UgLXIkcHJlX3JpZ2h0X3VwZGF0ZV8xOiRpIC4uL2JyYW5jaGVzL3JpZ2h0CitpPSQoY29tbWl0ICRpICJDaGVycnktcGljayByaWdodCAyIGNvbW1pdHMgdG8gdHJ1bmsiKQorY2QgLi4KKworc2F5ICJNZXJnaW5nIFJJR0hUIHRvIFRSVU5LIgorc3ZuIHVwZGF0ZQorY2QgdHJ1bmsKK3N2biBtZXJnZSAuLi9icmFuY2hlcy9yaWdodCAtLWFjY2VwdCBwb3N0cG9uZQorZ2l0IGNhdC1maWxlIGJsb2IgYjUxYWQ0MzE6TWFrZWZpbGUgPiBNYWtlZmlsZQorc3ZuIHJlc29sdmVkIE1ha2VmaWxlCitpPSQoY29tbWl0ICRpICJNZXJnZSByaWdodCB0byB0cnVuayAxIikKK2NkIC4uCisKK3NheSAiTWFraW5nIG1vcmUgY29tbWl0cyBvbiBSSUdIVCBhbmQgVFJVTksiCitlY2hvICJ3aGFtbSIgPiBicmFuY2hlcy9yaWdodC91cmtraworc3ZuIGFkZCBicmFuY2hlcy9yaWdodC91cmtraworaT0kKGNvbW1pdCAkaSAicmlnaHQgdXBkYXRlIDMiKQorZWNobyAicG93IiA+IHRydW5rL3Zyb25rCitzdm4gYWRkIHRydW5rL3Zyb25rCitpPSQoY29tbWl0ICRpICJ0cnVuayB1cGRhdGUgMSIpCisKK3NheSAiTWVyZ2luZyBSSUdIVCB0byBMRUZUIFNVQi1CUkFOQ0giCitzdm4gdXBkYXRlCitjZCBicmFuY2hlcy9sZWZ0LXN1Ygorc3ZuIG1lcmdlIC4uL3JpZ2h0IC0tYWNjZXB0IHBvc3Rwb25lCitnaXQgY2F0LWZpbGUgYmxvYiBiNTFhZDQzMTpNYWtlZmlsZSA+IE1ha2VmaWxlCitzdm4gcmVzb2x2ZWQgTWFrZWZpbGUKK2k9JChjb21taXQgJGkgIk1lcmdlIHJpZ2h0IHRvIGxlZnQgc3ViLWJyYW5jaCIpCitjZCAuLi8uLgorCitzYXkgIk1ha2luZyBtb3JlIGNvbW1pdHMgb24gTEVGVCBTVUItQlJBTkNIIGFuZCBMRUZUIgorZWNobyAiem93aWUiID4gYnJhbmNoZXMvbGVmdC1zdWIvd2hhbV9ldGgKK3N2biBhZGQgYnJhbmNoZXMvbGVmdC1zdWIvd2hhbV9ldGgKK3ByZV9zdWJfbGVmdF91cGRhdGVfMj0kaQoraT0kKGNvbW1pdCAkaSAibGVmdCBzdWItYnJhbmNoIHVwZGF0ZSAyIikKK3N1Yl9sZWZ0X3VwZGF0ZV8yPSRpCitlY2hvICJlZWVfeW93IiA+IGJyYW5jaGVzL2xlZnQvZ2x1cnBwCitzdm4gYWRkIGJyYW5jaGVzL2xlZnQvZ2x1cnBwCitpPSQoY29tbWl0ICRpICJsZWZ0IHVwZGF0ZSA1IikKKworc2F5ICJDaGVycnkgcGljayBMRUZUIFNVQi1CUkFOQ0ggY29tbWl0IHRvIExFRlQiCitzdm4gdXBkYXRlCitjZCBicmFuY2hlcy9sZWZ0Citzdm4gbWVyZ2UgLXIkcHJlX3N1Yl9sZWZ0X3VwZGF0ZV8yOiRzdWJfbGVmdF91cGRhdGVfMiAuLi9sZWZ0LXN1YgoraT0kKGNvbW1pdCAkaSAiQ2hlcnJ5LXBpY2sgbGVmdCBzdWItYnJhbmNoIGNvbW1pdCB0byBsZWZ0IikKK2NkIC4uLy4uCisKK3NheSAiTWVyZ2luZyBMRUZUIFNVQi1CUkFOQ0ggYmFjayB0byBMRUZUIgorc3ZuIHVwZGF0ZQorY2QgYnJhbmNoZXMvbGVmdAorIyBpdCdzIG9ubHkgYSBtZXJnZSBiZWNhdXNlIHRoZSBwcmV2aW91cyBtZXJnZSBjaGVycnktcGlja2VkIHRoZSB0b3AgY29tbWl0Citzdm4gbWVyZ2UgLXIkc3ViX2xlZnRfbWFrZTokc3ViX2xlZnRfdXBkYXRlXzIgLi4vbGVmdC1zdWIgLS1hY2NlcHQgcG9zdHBvbmUKK2k9JChjb21taXQgJGkgIk1lcmdlIGxlZnQgc3ViLWJyYW5jaCB0byBsZWZ0IikKK2NkIC4uLy4uCisKK3NheSAiTWVyZ2luZyBFVkVSWVRISU5HIHRvIFRSVU5LIgorc3ZuIHVwZGF0ZQorY2QgdHJ1bmsKK3N2biBtZXJnZSAuLi9icmFuY2hlcy9sZWZ0IC0tYWNjZXB0IHBvc3Rwb25lCitzdm4gcmVzb2x2ZWQgYmFuZworaT0kKGNvbW1pdCAkaSAiTWVyZ2UgbGVmdCB0byB0cnVuayAyIikKKyMgdGhpcyBtZXJnZSwgc3ZuIGhhcHBpbHkgdXBkYXRlcyB0aGUgbWVyZ2VpbmZvLCBidXQgdGhlcmUgaXMgYWN0dWFsbHkKKyMgbm90aGluZyB0byBtZXJnZS4gIGdpdC1zdm4gd2lsbCBub3QgbWFrZSBhIG1lYW5pbmdsZXNzIG1lcmdlIGNvbW1pdC4KK3N2biBtZXJnZSAuLi9icmFuY2hlcy9yaWdodCAtLWFjY2VwdCBwb3N0cG9uZQoraT0kKGNvbW1pdCAkaSAibm9uLW1lcmdlIHJpZ2h0IHRvIHRydW5rIDIiKQorY2QgLi4KKworc2F5ICJBZGRpbmcgc3ViZGlyZWN0b3J5IHRvIExFRlQiCitzdm4gdXBkYXRlCitjZCBicmFuY2hlcy9sZWZ0Citta2RpciBzdWJkaXIKK2VjaG8gIlllZWhhdyIgPiBzdWJkaXIvY293Ym95Citzdm4gYWRkIHN1YmRpcgoraT0kKGNvbW1pdCAkaSAiYWRkIHN1YmRpcmVjdG9yeSB0byBsZWZ0IGJyYW5jaCIpCitjZCAuLi8uLi8KKworc2F5ICJNZXJnaW5nIExFRlQgdG8gVFJVTksiCitzdm4gdXBkYXRlCitjZCB0cnVuaworc3ZuIG1lcmdlIC4uL2JyYW5jaGVzL2xlZnQgLS1hY2NlcHQgcG9zdHBvbmUKK2k9JChjb21taXQgJGkgIm1lcmdlIGxlZnQgdG8gdHJ1bmsiKQorY2QgLi4KKworc2F5ICJNYWtlIFBBUlRJQUwgYnJhbmNoIgorc3ZuIHVwZGF0ZQoraT0kKGNvbW1pdCAkaSAibWFrZSBwYXJ0aWFsIGJyYW5jaCIpCitzdm4gY3AgdHJ1bmsvc3ViZGlyIGJyYW5jaGVzL3BhcnRpYWwKKworc2F5ICJNYWtlIGEgY29tbWl0IHRvIFBBUlRJQUwiCitzdm4gdXBkYXRlCitjZCBicmFuY2hlcy9wYXJ0aWFsCitlY2hvICJyYWNlY2FyIiA+IHBhbGluZHJvbWVzCitzdm4gYWRkIHBhbGluZHJvbWVzCitpPSQoY29tbWl0ICRpICJwYXJ0aWFsIHVwZGF0ZSIpCitjZCAuLi8uLi8KKworc2F5ICJNZXJnZSBQQVJUSUFMIHRvIFRSVU5LIgorc3ZuIHVwZGF0ZQorY2QgdHJ1bmsvc3ViZGlyCitzdm4gbWVyZ2UgLi4vLi4vYnJhbmNoZXMvcGFydGlhbCAtLWFjY2VwdCBwb3N0cG9uZQoraT0kKGNvbW1pdCAkaSAibWVyZ2UgcGFydGlhbCB0byB0cnVuayIpCitjZCAuLi8uLi8KKworc2F5ICJUYWdnaW5nIHRydW5rIgorc3ZuIHVwZGF0ZQoraT0kKGNvbW1pdCAkaSAidGFnZ2luZyB2MS4wIikKK3N2biBjcCB0cnVuayB0YWdzL3YxLjAKKworc2F5ICJCcmFuY2hpbmcgQlVHRklYIGZyb20gdjEuMCIKK3N2biB1cGRhdGUKK2k9JChjb21taXQgJGkgIm1ha2UgYnVnZml4IGJyYW5jaCBmcm9tIHRhZyIpCitzdm4gY3AgdGFncy92MS4wIGJyYW5jaGVzL2J1Z2ZpeAorCitzYXkgIk1ha2UgYSBjb21taXQgdG8gQlVHRklYIgorc3ZuIHVwZGF0ZQorY2QgYnJhbmNoZXMvYnVnZml4LworZWNobyAia2F5YWsiID4+IHN1YmRpci9wYWxpbmRyb21lcworaT0kKGNvbW1pdCAkaSAiY29tbWl0IHRvIGJ1Z2ZpeCIpCitjZCAuLi8uLi8KKworc2F5ICJNZXJnZSBCVUdGSVggdG8gVFJVTksiCitzdm4gdXBkYXRlCitjZCB0cnVuaworc3ZuIG1lcmdlIC4uL2JyYW5jaGVzL2J1Z2ZpeC8gLS1hY2NlcHQgcG9zdHBvbmUKK2k9JChjb21taXQgJGkgIk1lcmdlIEJVR0ZJWCB0byBUUlVOSyIpCitjZCAuLgorCitjZCAuLgorc3ZuYWRtaW4gZHVtcCBmb28uc3ZuID4gc3ZuLW1lcmdlaW5mby5kdW1wCisKK3JtIC1yZiBmb28gZm9vLnN2bgpkaWZmIC0tZ2l0IGEvdC90OTE1MS9zdm4tbWVyZ2VpbmZvLmR1bXAgYi90L3Q5MTUxL3N2bi1tZXJnZWluZm8uZHVtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmYzODZlCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1MS9zdm4tbWVyZ2VpbmZvLmR1bXAKQEAgLTAsMCArMSwxOTIyIEBACitTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMgorCitVVUlEOiBkNjE5MTUzMC0yNjkzLTRhOGUtOThlNy1iMTk0ZDRjM2VkZDgKKworUmV2aXNpb24tbnVtYmVyOiAwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA1NgorQ29udGVudC1sZW5ndGg6IDU2CisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MDIuODMyNDA2WgorUFJPUFMtRU5ECisKK1JldmlzaW9uLW51bWJlcjogMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTM0CitDb250ZW50LWxlbmd0aDogMTM0CisKK0sgNworc3ZuOmxvZworViAzNgorKHIxKSBTZXR1cCB0cnVuaywgYnJhbmNoZXMsIGFuZCB0YWdzCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDowMy4wNTUxNzJaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0YWdzCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitSZXZpc2lvbi1udW1iZXI6IDIKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMQorQ29udGVudC1sZW5ndGg6IDExMQorCitLIDcKK3N2bjpsb2cKK1YgMTMKKyhyMikgYW5jZXN0b3IKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjA0LjA2NDUwNloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rL01ha2VmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNDAxCitUZXh0LWNvbnRlbnQtbWQ1OiBiZmQ4ZmY3NzhkMTQ5MmRjNjc1ODU2NzM3MzE3NmE4OQorVGV4dC1jb250ZW50LXNoYTE6IDEwMzIwNWNlMzMxZjdkNjQwODZkYmE0OTc1NzQ3MzRmNzg0Mzk1OTAKK0NvbnRlbnQtbGVuZ3RoOiAyNDExCisKK1BST1BTLUVORAorIyAtRENPTExJU0lPTl9DSEVDSyBpZiB5b3UgYmVsaWV2ZSB0aGF0IFNIQTEncworIyAxNDYxNTAxNjM3MzMwOTAyOTE4MjAzNjg0ODMyNzE2MjgzMDE5NjU1OTMyNTQyOTc2IGhhc2hlcyBkbyBub3QgZ2l2ZSB5b3UKKyMgZW5vdWdoIGd1YXJhbnRlZXMgYWJvdXQgbm8gY29sbGlzaW9ucyBiZXR3ZWVuIG9iamVjdHMgZXZlciBoYXBlbm5pbmcuCisjCisjIC1ETlNFQyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCBzdWItc2Vjb25kIGZpbGUgbXRpbWVzIGFuZCBjdGltZXMuCisjIE5vdGUgdGhhdCB5b3UgbmVlZCBzb21lIG5ldyBnbGliYyAoYXQgbGVhc3QgPjIuMi40KSBmb3IgdGhpcywgYW5kIGl0IHdpbGwKKyMgQlJFQUsgWU9VUiBMT0NBTCBESUZGUyEgc2hvdy1kaWZmIGFuZCBhbnl0aGluZyB1c2luZyBpdCB3aWxsIGxpa2VseSByYW5kb21seQorIyBicmVhayB1bmxlc3MgeW91ciB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdGhvc2Ugc3ViLXNlY29uZCB0aW1lcworIyAobXkgZXh0MyBkb2Vzbid0KS4KK0NGTEFHUz0tZyAtTzMgLVdhbGwKKworQ0M9Z2NjCisKKworUFJPRz0gICB1cGRhdGUtY2FjaGUgc2hvdy1kaWZmIGluaXQtZGIgd3JpdGUtdHJlZSByZWFkLXRyZWUgY29tbWl0LXRyZWUgXAorCWNhdC1maWxlIGZzY2stY2FjaGUgY2hlY2tvdXQtY2FjaGUgZGlmZi10cmVlIHJldi10cmVlIHNob3ctZmlsZXMgXAorCWNoZWNrLWZpbGVzIGxzLXRyZWUgbWVyZ2UtYmFzZQorCithbGw6ICQoUFJPRykKKworaW5zdGFsbDogJChQUk9HKQorCWluc3RhbGwgJChQUk9HKSAkKEhPTUUpL2Jpbi8KKworTElCUz0gLWxzc2wgLWx6CisKK2luaXQtZGI6IGluaXQtZGIubworCit1cGRhdGUtY2FjaGU6IHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB1cGRhdGUtY2FjaGUgdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1kaWZmOiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1kaWZmIHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3dyaXRlLXRyZWU6IHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gd3JpdGUtdHJlZSB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC10cmVlOiByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmVhZC10cmVlIHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NvbW1pdC10cmVlOiBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjb21taXQtdHJlZSBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NhdC1maWxlOiBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjYXQtZmlsZSBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2ZzY2stY2FjaGU6IGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZnNjay1jYWNoZSBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2tvdXQtY2FjaGU6IGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrb3V0LWNhY2hlIGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZGlmZi10cmVlOiBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZGlmZi10cmVlIGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Jldi10cmVlOiByZXYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZXYtdHJlZSByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZmlsZXM6IHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1maWxlcyBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2stZmlsZXM6IGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrLWZpbGVzIGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbHMtdHJlZTogbHMtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBscy10cmVlIGxzLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCittZXJnZS1iYXNlOiBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWJhc2UgbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtY2FjaGUubzogY2FjaGUuaAorc2hvdy1kaWZmLm86IGNhY2hlLmgKKworY2xlYW46CisJcm0gLWYgKi5vICQoUFJPRykKKworYmFja3VwOiBjbGVhbgorCWNkIC4uIDsgdGFyIGN6dmYgZGlyY2FjaGUudGFyLmd6IGRpci1jYWNoZQorCisKK1JldmlzaW9uLW51bWJlcjogMworUHJvcC1jb250ZW50LWxlbmd0aDogMTE5CitDb250ZW50LWxlbmd0aDogMTE5CisKK0sgNworc3ZuOmxvZworViAyMQorKHIzKSBtYWtlIGxlZnQgYnJhbmNoCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDowNi4wNDAzODlaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0CitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDEKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQvTWFrZWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDIKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsvTWFrZWZpbGUKK1RleHQtY29weS1zb3VyY2UtbWQ1OiBiZmQ4ZmY3NzhkMTQ5MmRjNjc1ODU2NzM3MzE3NmE4OQorVGV4dC1jb3B5LXNvdXJjZS1zaGExOiAxMDMyMDVjZTMzMWY3ZDY0MDg2ZGJhNDk3NTc0NzM0Zjc4NDM5NTkwCisKKworUmV2aXNpb24tbnVtYmVyOiA0CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjAKK0NvbnRlbnQtbGVuZ3RoOiAxMjAKKworSyA3Citzdm46bG9nCitWIDIyCisocjQpIG1ha2UgcmlnaHQgYnJhbmNoCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDowOC4wNDA5MDVaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9yaWdodAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9yaWdodC9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMgorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuay9NYWtlZmlsZQorVGV4dC1jb3B5LXNvdXJjZS1tZDU6IGJmZDhmZjc3OGQxNDkyZGM2NzU4NTY3MzczMTc2YTg5CitUZXh0LWNvcHktc291cmNlLXNoYTE6IDEwMzIwNWNlMzMxZjdkNjQwODZkYmE0OTc1NzQ3MzRmNzg0Mzk1OTAKKworCitSZXZpc2lvbi1udW1iZXI6IDUKK1Byb3AtY29udGVudC1sZW5ndGg6IDExNgorQ29udGVudC1sZW5ndGg6IDExNgorCitLIDcKK3N2bjpsb2cKK1YgMTgKKyhyNSkgbGVmdCB1cGRhdGUgMQorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MDkuMDQ5MTY5WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNDY1CitUZXh0LWNvbnRlbnQtbWQ1OiAxNmUzOGQ5NzUzYjA2MTczMTY1MDU2MWNlMDFiMTE5NQorVGV4dC1jb250ZW50LXNoYTE6IDM2ZGE0Yjg0ZWE5YjY0MjE4YWI0ODE3MWRmYzVjNDhhZTAyNWYzOGIKK0NvbnRlbnQtbGVuZ3RoOiAyNDY1CisKKyMgLURDT0xMSVNJT05fQ0hFQ0sgaWYgeW91IGJlbGlldmUgdGhhdCBTSEExJ3MKKyMgMTQ2MTUwMTYzNzMzMDkwMjkxODIwMzY4NDgzMjcxNjI4MzAxOTY1NTkzMjU0Mjk3NiBoYXNoZXMgZG8gbm90IGdpdmUgeW91CisjIGVub3VnaCBndWFyYW50ZWVzIGFib3V0IG5vIGNvbGxpc2lvbnMgYmV0d2VlbiBvYmplY3RzIGV2ZXIgaGFwZW5uaW5nLgorIworIyAtRE5TRUMgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgc3ViLXNlY29uZCBmaWxlIG10aW1lcyBhbmQgY3RpbWVzLgorIyBOb3RlIHRoYXQgeW91IG5lZWQgc29tZSBuZXcgZ2xpYmMgKGF0IGxlYXN0ID4yLjIuNCkgZm9yIHRoaXMsIGFuZCBpdCB3aWxsCisjIEJSRUFLIFlPVVIgTE9DQUwgRElGRlMhIHNob3ctZGlmZiBhbmQgYW55dGhpbmcgdXNpbmcgaXQgd2lsbCBsaWtlbHkgcmFuZG9tbHkKKyMgYnJlYWsgdW5sZXNzIHlvdXIgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnRzIHRob3NlIHN1Yi1zZWNvbmQgdGltZXMKKyMgKG15IGV4dDMgZG9lc24ndCkuCitDRkxBR1M9LWcgLU8zIC1XYWxsCisKK0NDPWdjYworCisKK1BST0c9ICAgdXBkYXRlLWNhY2hlIHNob3ctZGlmZiBpbml0LWRiIHdyaXRlLXRyZWUgcmVhZC10cmVlIGNvbW1pdC10cmVlIFwKKwljYXQtZmlsZSBmc2NrLWNhY2hlIGNoZWNrb3V0LWNhY2hlIGRpZmYtdHJlZSByZXYtdHJlZSBzaG93LWZpbGVzIFwKKwljaGVjay1maWxlcyBscy10cmVlIG1lcmdlLWJhc2UKKworYWxsOiAkKFBST0cpCisKK2luc3RhbGw6ICQoUFJPRykKKwlpbnN0YWxsICQoUFJPRykgJChIT01FKS9iaW4vCisKK0xJQlM9IC1sc3NsIC1segorCitpbml0LWRiOiBpbml0LWRiLm8KKwordXBkYXRlLWNhY2hlOiB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gdXBkYXRlLWNhY2hlIHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZGlmZjogc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZGlmZiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCit3cml0ZS10cmVlOiB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHdyaXRlLXRyZWUgd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtdHJlZTogcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJlYWQtdHJlZSByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjb21taXQtdHJlZTogY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY29tbWl0LXRyZWUgY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjYXQtZmlsZTogY2F0LWZpbGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2F0LWZpbGUgY2F0LWZpbGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitmc2NrLWNhY2hlOiBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGZzY2stY2FjaGUgZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrb3V0LWNhY2hlOiBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVja291dC1jYWNoZSBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2RpZmYtdHJlZTogZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGRpZmYtdHJlZSBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZXYtdHJlZTogcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZXYtdHJlZSByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworc2hvdy1maWxlczogc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWZpbGVzIHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVjay1maWxlczogY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2stZmlsZXMgY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitscy10cmVlOiBscy10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGxzLXRyZWUgbHMtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK21lcmdlLWJhc2U6IG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtYmFzZSBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC1jYWNoZS5vOiBjYWNoZS5oCitzaG93LWRpZmYubzogY2FjaGUuaAorCitjbGVhbjoKKwlybSAtZiAqLm8gJChQUk9HKQorCitiYWNrdXA6IGNsZWFuCisJY2QgLi4gOyB0YXIgY3p2ZiBkaXJjYWNoZS50YXIuZ3ogZGlyLWNhY2hlCisKKworUmV2aXNpb24tbnVtYmVyOiA2CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTcKK0NvbnRlbnQtbGVuZ3RoOiAxMTcKKworSyA3Citzdm46bG9nCitWIDE5CisocjYpIHJpZ2h0IHVwZGF0ZSAxCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDoxMC4wNDkzNTBaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9yaWdodC9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNTIxCitUZXh0LWNvbnRlbnQtbWQ1OiAwNjY4NDE4YTYyMTMzM2Y0YWE4YjY2MzJjZDYzZTJhMAorVGV4dC1jb250ZW50LXNoYTE6IDRmMjlhZmQwMzhlNTJmNDVhY2I1ZWY4YzQxYWNmYzcwMDYyYTc0MWEKK0NvbnRlbnQtbGVuZ3RoOiAyNTIxCisKKyMgLURDT0xMSVNJT05fQ0hFQ0sgaWYgeW91IGJlbGlldmUgdGhhdCBTSEExJ3MKKyMgMTQ2MTUwMTYzNzMzMDkwMjkxODIwMzY4NDgzMjcxNjI4MzAxOTY1NTkzMjU0Mjk3NiBoYXNoZXMgZG8gbm90IGdpdmUgeW91CisjIGVub3VnaCBndWFyYW50ZWVzIGFib3V0IG5vIGNvbGxpc2lvbnMgYmV0d2VlbiBvYmplY3RzIGV2ZXIgaGFwZW5uaW5nLgorIworIyAtRE5TRUMgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgc3ViLXNlY29uZCBmaWxlIG10aW1lcyBhbmQgY3RpbWVzLgorIyBOb3RlIHRoYXQgeW91IG5lZWQgc29tZSBuZXcgZ2xpYmMgKGF0IGxlYXN0ID4yLjIuNCkgZm9yIHRoaXMsIGFuZCBpdCB3aWxsCisjIEJSRUFLIFlPVVIgTE9DQUwgRElGRlMhIHNob3ctZGlmZiBhbmQgYW55dGhpbmcgdXNpbmcgaXQgd2lsbCBsaWtlbHkgcmFuZG9tbHkKKyMgYnJlYWsgdW5sZXNzIHlvdXIgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnRzIHRob3NlIHN1Yi1zZWNvbmQgdGltZXMKKyMgKG15IGV4dDMgZG9lc24ndCkuCitDRkxBR1M9LWcgLU8zIC1XYWxsCisKK0NDPWdjYworCisKK1BST0c9ICAgdXBkYXRlLWNhY2hlIHNob3ctZGlmZiBpbml0LWRiIHdyaXRlLXRyZWUgcmVhZC10cmVlIGNvbW1pdC10cmVlIFwKKwljYXQtZmlsZSBmc2NrLWNhY2hlIGNoZWNrb3V0LWNhY2hlIGRpZmYtdHJlZSByZXYtdHJlZSBzaG93LWZpbGVzIFwKKwljaGVjay1maWxlcyBscy10cmVlIG1lcmdlLWJhc2UgbWVyZ2UtY2FjaGUKKworYWxsOiAkKFBST0cpCisKK2luc3RhbGw6ICQoUFJPRykKKwlpbnN0YWxsICQoUFJPRykgJChIT01FKS9iaW4vCisKK0xJQlM9IC1sc3NsIC1segorCitpbml0LWRiOiBpbml0LWRiLm8KKwordXBkYXRlLWNhY2hlOiB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gdXBkYXRlLWNhY2hlIHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZGlmZjogc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZGlmZiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCit3cml0ZS10cmVlOiB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHdyaXRlLXRyZWUgd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtdHJlZTogcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJlYWQtdHJlZSByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjb21taXQtdHJlZTogY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY29tbWl0LXRyZWUgY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjYXQtZmlsZTogY2F0LWZpbGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2F0LWZpbGUgY2F0LWZpbGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitmc2NrLWNhY2hlOiBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGZzY2stY2FjaGUgZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrb3V0LWNhY2hlOiBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVja291dC1jYWNoZSBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2RpZmYtdHJlZTogZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGRpZmYtdHJlZSBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZXYtdHJlZTogcmV2LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmV2LXRyZWUgcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitzaG93LWZpbGVzOiBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZmlsZXMgc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrLWZpbGVzOiBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVjay1maWxlcyBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2xzLXRyZWU6IGxzLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbHMtdHJlZSBscy10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbWVyZ2UtYmFzZTogbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1iYXNlIG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCittZXJnZS1jYWNoZTogbWVyZ2UtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtY2FjaGUgbWVyZ2UtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLWNhY2hlLm86IGNhY2hlLmgKK3Nob3ctZGlmZi5vOiBjYWNoZS5oCisKK2NsZWFuOgorCXJtIC1mICoubyAkKFBST0cpCisKK2JhY2t1cDogY2xlYW4KKwljZCAuLiA7IHRhciBjenZmIGRpcmNhY2hlLnRhci5neiBkaXItY2FjaGUKKworCitSZXZpc2lvbi1udW1iZXI6IDcKK1Byb3AtY29udGVudC1sZW5ndGg6IDExNgorQ29udGVudC1sZW5ndGg6IDExNgorCitLIDcKK3N2bjpsb2cKK1YgMTgKKyhyNykgbGVmdCB1cGRhdGUgMgorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MTEuMDQ5MjA5WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNTI5CitUZXh0LWNvbnRlbnQtbWQ1OiBmNmIxOTdjYzNmMmU4OWE4M2U1NDVkNGJiMDAzZGU3MworVGV4dC1jb250ZW50LXNoYTE6IDJmNjU2Njc3Y2ZlYzBiY2VlYzg1ZTUzMDM2ZmZiNjNlMjUxMjZmOGUKK0NvbnRlbnQtbGVuZ3RoOiAyNTI5CisKKyMgLURDT0xMSVNJT05fQ0hFQ0sgaWYgeW91IGJlbGlldmUgdGhhdCBTSEExJ3MKKyMgMTQ2MTUwMTYzNzMzMDkwMjkxODIwMzY4NDgzMjcxNjI4MzAxOTY1NTkzMjU0Mjk3NiBoYXNoZXMgZG8gbm90IGdpdmUgeW91CisjIGVub3VnaCBndWFyYW50ZWVzIGFib3V0IG5vIGNvbGxpc2lvbnMgYmV0d2VlbiBvYmplY3RzIGV2ZXIgaGFwZW5uaW5nLgorIworIyAtRE5TRUMgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgc3ViLXNlY29uZCBmaWxlIG10aW1lcyBhbmQgY3RpbWVzLgorIyBOb3RlIHRoYXQgeW91IG5lZWQgc29tZSBuZXcgZ2xpYmMgKGF0IGxlYXN0ID4yLjIuNCkgZm9yIHRoaXMsIGFuZCBpdCB3aWxsCisjIEJSRUFLIFlPVVIgTE9DQUwgRElGRlMhIHNob3ctZGlmZiBhbmQgYW55dGhpbmcgdXNpbmcgaXQgd2lsbCBsaWtlbHkgcmFuZG9tbHkKKyMgYnJlYWsgdW5sZXNzIHlvdXIgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnRzIHRob3NlIHN1Yi1zZWNvbmQgdGltZXMKKyMgKG15IGV4dDMgZG9lc24ndCkuCitDRkxBR1M9LWcgLU8zIC1XYWxsCisKK0NDPWdjYworCisKK1BST0c9ICAgdXBkYXRlLWNhY2hlIHNob3ctZGlmZiBpbml0LWRiIHdyaXRlLXRyZWUgcmVhZC10cmVlIGNvbW1pdC10cmVlIFwKKwljYXQtZmlsZSBmc2NrLWNhY2hlIGNoZWNrb3V0LWNhY2hlIGRpZmYtdHJlZSByZXYtdHJlZSBzaG93LWZpbGVzIFwKKwljaGVjay1maWxlcyBscy10cmVlIG1lcmdlLWJhc2UKKworYWxsOiAkKFBST0cpCisKK2luc3RhbGw6ICQoUFJPRykKKwlpbnN0YWxsICQoUFJPRykgJChIT01FKS9iaW4vCisKK0xJQlM9IC1sc3NsIC1segorCitpbml0LWRiOiBpbml0LWRiLm8KKwordXBkYXRlLWNhY2hlOiB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gdXBkYXRlLWNhY2hlIHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZGlmZjogc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZGlmZiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCit3cml0ZS10cmVlOiB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHdyaXRlLXRyZWUgd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtdHJlZTogcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJlYWQtdHJlZSByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjb21taXQtdHJlZTogY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY29tbWl0LXRyZWUgY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjYXQtZmlsZTogY2F0LWZpbGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2F0LWZpbGUgY2F0LWZpbGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitmc2NrLWNhY2hlOiBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZnNjay1jYWNoZSBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitjaGVja291dC1jYWNoZTogY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2tvdXQtY2FjaGUgY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitkaWZmLXRyZWU6IGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBkaWZmLXRyZWUgZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmV2LXRyZWU6IHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmV2LXRyZWUgcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK3Nob3ctZmlsZXM6IHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1maWxlcyBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2stZmlsZXM6IGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrLWZpbGVzIGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbHMtdHJlZTogbHMtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBscy10cmVlIGxzLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCittZXJnZS1iYXNlOiBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWJhc2UgbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtY2FjaGUubzogY2FjaGUuaAorc2hvdy1kaWZmLm86IGNhY2hlLmgKKworY2xlYW46CisJcm0gLWYgKi5vICQoUFJPRykKKworYmFja3VwOiBjbGVhbgorCWNkIC4uIDsgdGFyIGN6dmYgZGlyY2FjaGUudGFyLmd6IGRpci1jYWNoZQorCisKK1JldmlzaW9uLW51bWJlcjogOAorUHJvcC1jb250ZW50LWxlbmd0aDogMTE2CitDb250ZW50LWxlbmd0aDogMTE2CisKK0sgNworc3ZuOmxvZworViAxOAorKHI4KSBsZWZ0IHVwZGF0ZSAzCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDoxMi4wNDkyMzRaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0L01ha2VmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDI1OTMKK1RleHQtY29udGVudC1tZDU6IDVjY2ZmNjg5ZmIyOTBlMDBiODVmZTE4ZWU1MGM1NGJhCitUZXh0LWNvbnRlbnQtc2hhMTogYTEzZGU4ZTIzZjE0ODNlZmNhM2U1N2IyYjY0YjBhZTZmNzQwY2UxMAorQ29udGVudC1sZW5ndGg6IDI1OTMKKworIyAtRENPTExJU0lPTl9DSEVDSyBpZiB5b3UgYmVsaWV2ZSB0aGF0IFNIQTEncworIyAxNDYxNTAxNjM3MzMwOTAyOTE4MjAzNjg0ODMyNzE2MjgzMDE5NjU1OTMyNTQyOTc2IGhhc2hlcyBkbyBub3QgZ2l2ZSB5b3UKKyMgZW5vdWdoIGd1YXJhbnRlZXMgYWJvdXQgbm8gY29sbGlzaW9ucyBiZXR3ZWVuIG9iamVjdHMgZXZlciBoYXBlbm5pbmcuCisjCisjIC1ETlNFQyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCBzdWItc2Vjb25kIGZpbGUgbXRpbWVzIGFuZCBjdGltZXMuCisjIE5vdGUgdGhhdCB5b3UgbmVlZCBzb21lIG5ldyBnbGliYyAoYXQgbGVhc3QgPjIuMi40KSBmb3IgdGhpcywgYW5kIGl0IHdpbGwKKyMgQlJFQUsgWU9VUiBMT0NBTCBESUZGUyEgc2hvdy1kaWZmIGFuZCBhbnl0aGluZyB1c2luZyBpdCB3aWxsIGxpa2VseSByYW5kb21seQorIyBicmVhayB1bmxlc3MgeW91ciB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdGhvc2Ugc3ViLXNlY29uZCB0aW1lcworIyAobXkgZXh0MyBkb2Vzbid0KS4KK0NGTEFHUz0tZyAtTzMgLVdhbGwKKworQ0M9Z2NjCisKKworUFJPRz0gICB1cGRhdGUtY2FjaGUgc2hvdy1kaWZmIGluaXQtZGIgd3JpdGUtdHJlZSByZWFkLXRyZWUgY29tbWl0LXRyZWUgXAorCWNhdC1maWxlIGZzY2stY2FjaGUgY2hlY2tvdXQtY2FjaGUgZGlmZi10cmVlIHJldi10cmVlIHNob3ctZmlsZXMgXAorCWNoZWNrLWZpbGVzIGxzLXRyZWUgbWVyZ2UtYmFzZQorCithbGw6ICQoUFJPRykKKworaW5zdGFsbDogJChQUk9HKQorCWluc3RhbGwgJChQUk9HKSAkKEhPTUUpL2Jpbi8KKworTElCUz0gLWxzc2wgLWx6CisKK2luaXQtZGI6IGluaXQtZGIubworCit1cGRhdGUtY2FjaGU6IHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB1cGRhdGUtY2FjaGUgdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1kaWZmOiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1kaWZmIHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3dyaXRlLXRyZWU6IHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gd3JpdGUtdHJlZSB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC10cmVlOiByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmVhZC10cmVlIHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NvbW1pdC10cmVlOiBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjb21taXQtdHJlZSBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NhdC1maWxlOiBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjYXQtZmlsZSBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2ZzY2stY2FjaGU6IGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBmc2NrLWNhY2hlIGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK2NoZWNrb3V0LWNhY2hlOiBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVja291dC1jYWNoZSBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2RpZmYtdHJlZTogZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGRpZmYtdHJlZSBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZXYtdHJlZTogcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZXYtdHJlZSByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworc2hvdy1maWxlczogc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWZpbGVzIHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVjay1maWxlczogY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2stZmlsZXMgY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitscy10cmVlOiBscy10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGxzLXRyZWUgbHMtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK21lcmdlLWJhc2U6IG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1iYXNlIG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK3JlYWQtY2FjaGUubzogY2FjaGUuaAorc2hvdy1kaWZmLm86IGNhY2hlLmgKKworY2xlYW46CisJcm0gLWYgKi5vICQoUFJPRykKKworYmFja3VwOiBjbGVhbgorCWNkIC4uIDsgdGFyIGN6dmYgZGlyY2FjaGUudGFyLmd6IGRpci1jYWNoZQorCisKK1JldmlzaW9uLW51bWJlcjogOQorUHJvcC1jb250ZW50LWxlbmd0aDogMTIzCitDb250ZW50LWxlbmd0aDogMTIzCisKK0sgNworc3ZuOmxvZworViAyNQorKHI5KSBtYWtlIGxlZnQgc3ViLWJyYW5jaAorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MTQuMDQwODk0WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC1zdWIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMworTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9sZWZ0CisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0LXN1Yi9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogZGVsZXRlCisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC1zdWIvTWFrZWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDgKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvbGVmdC9NYWtlZmlsZQorVGV4dC1jb3B5LXNvdXJjZS1tZDU6IDVjY2ZmNjg5ZmIyOTBlMDBiODVmZTE4ZWU1MGM1NGJhCitUZXh0LWNvcHktc291cmNlLXNoYTE6IGExM2RlOGUyM2YxNDgzZWZjYTNlNTdiMmI2NGIwYWU2Zjc0MGNlMTAKKworCisKKworUmV2aXNpb24tbnVtYmVyOiAxMAorUHJvcC1jb250ZW50LWxlbmd0aDogMTI4CitDb250ZW50LWxlbmd0aDogMTI4CisKK0sgNworc3ZuOmxvZworViAzMAorKHIxMCkgbGVmdCBzdWItYnJhbmNoIHVwZGF0ZSAxCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDoxNS4wNDk5MzVaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0LXN1Yi9SRUFETUUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDcKK1RleHQtY29udGVudC1tZDU6IGZkYmNmYjZiZTlhZmUxMTIxODYyMTQzZjIyNmI1MWNmCitUZXh0LWNvbnRlbnQtc2hhMTogMWQxZjVlYTRjZWI1ODQzMzdmZmU1OWI4OTgwZDkyZTNiNzhkZmVmNAorQ29udGVudC1sZW5ndGg6IDE3CisKK1BST1BTLUVORAorY3J1bmNoCisKKworUmV2aXNpb24tbnVtYmVyOiAxMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTI1CitDb250ZW50LWxlbmd0aDogMTI1CisKK0sgNworc3ZuOmxvZworViAyNworKHIxMSkgTWVyZ2UgbGVmdCB0byB0cnVuayAxCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDoxOC4wNTY1OTRaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuaworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDU0CitDb250ZW50LWxlbmd0aDogNTQKKworSyAxMworc3ZuOm1lcmdlaW5mbworViAxOQorL2JyYW5jaGVzL2xlZnQ6Mi0xMAorUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuay9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNTkzCitUZXh0LWNvbnRlbnQtbWQ1OiA1Y2NmZjY4OWZiMjkwZTAwYjg1ZmUxOGVlNTBjNTRiYQorVGV4dC1jb250ZW50LXNoYTE6IGExM2RlOGUyM2YxNDgzZWZjYTNlNTdiMmI2NGIwYWU2Zjc0MGNlMTAKK0NvbnRlbnQtbGVuZ3RoOiAyNTkzCisKKyMgLURDT0xMSVNJT05fQ0hFQ0sgaWYgeW91IGJlbGlldmUgdGhhdCBTSEExJ3MKKyMgMTQ2MTUwMTYzNzMzMDkwMjkxODIwMzY4NDgzMjcxNjI4MzAxOTY1NTkzMjU0Mjk3NiBoYXNoZXMgZG8gbm90IGdpdmUgeW91CisjIGVub3VnaCBndWFyYW50ZWVzIGFib3V0IG5vIGNvbGxpc2lvbnMgYmV0d2VlbiBvYmplY3RzIGV2ZXIgaGFwZW5uaW5nLgorIworIyAtRE5TRUMgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgc3ViLXNlY29uZCBmaWxlIG10aW1lcyBhbmQgY3RpbWVzLgorIyBOb3RlIHRoYXQgeW91IG5lZWQgc29tZSBuZXcgZ2xpYmMgKGF0IGxlYXN0ID4yLjIuNCkgZm9yIHRoaXMsIGFuZCBpdCB3aWxsCisjIEJSRUFLIFlPVVIgTE9DQUwgRElGRlMhIHNob3ctZGlmZiBhbmQgYW55dGhpbmcgdXNpbmcgaXQgd2lsbCBsaWtlbHkgcmFuZG9tbHkKKyMgYnJlYWsgdW5sZXNzIHlvdXIgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnRzIHRob3NlIHN1Yi1zZWNvbmQgdGltZXMKKyMgKG15IGV4dDMgZG9lc24ndCkuCitDRkxBR1M9LWcgLU8zIC1XYWxsCisKK0NDPWdjYworCisKK1BST0c9ICAgdXBkYXRlLWNhY2hlIHNob3ctZGlmZiBpbml0LWRiIHdyaXRlLXRyZWUgcmVhZC10cmVlIGNvbW1pdC10cmVlIFwKKwljYXQtZmlsZSBmc2NrLWNhY2hlIGNoZWNrb3V0LWNhY2hlIGRpZmYtdHJlZSByZXYtdHJlZSBzaG93LWZpbGVzIFwKKwljaGVjay1maWxlcyBscy10cmVlIG1lcmdlLWJhc2UKKworYWxsOiAkKFBST0cpCisKK2luc3RhbGw6ICQoUFJPRykKKwlpbnN0YWxsICQoUFJPRykgJChIT01FKS9iaW4vCisKK0xJQlM9IC1sc3NsIC1segorCitpbml0LWRiOiBpbml0LWRiLm8KKwordXBkYXRlLWNhY2hlOiB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gdXBkYXRlLWNhY2hlIHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZGlmZjogc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZGlmZiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCit3cml0ZS10cmVlOiB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHdyaXRlLXRyZWUgd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtdHJlZTogcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJlYWQtdHJlZSByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjb21taXQtdHJlZTogY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY29tbWl0LXRyZWUgY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjYXQtZmlsZTogY2F0LWZpbGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2F0LWZpbGUgY2F0LWZpbGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitmc2NrLWNhY2hlOiBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZnNjay1jYWNoZSBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitjaGVja291dC1jYWNoZTogY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2tvdXQtY2FjaGUgY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitkaWZmLXRyZWU6IGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBkaWZmLXRyZWUgZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmV2LXRyZWU6IHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmV2LXRyZWUgcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK3Nob3ctZmlsZXM6IHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1maWxlcyBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2stZmlsZXM6IGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrLWZpbGVzIGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbHMtdHJlZTogbHMtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBscy10cmVlIGxzLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCittZXJnZS1iYXNlOiBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtYmFzZSBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCityZWFkLWNhY2hlLm86IGNhY2hlLmgKK3Nob3ctZGlmZi5vOiBjYWNoZS5oCisKK2NsZWFuOgorCXJtIC1mICoubyAkKFBST0cpCisKK2JhY2t1cDogY2xlYW4KKwljZCAuLiA7IHRhciBjenZmIGRpcmNhY2hlLnRhci5neiBkaXItY2FjaGUKKworCitSZXZpc2lvbi1udW1iZXI6IDEyCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTcKK0NvbnRlbnQtbGVuZ3RoOiAxMTcKKworSyA3Citzdm46bG9nCitWIDE5CisocjEyKSBsZWZ0IHVwZGF0ZSA0CitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDoxOS4wNDk2MjBaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0L3psb25rCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA3CitUZXh0LWNvbnRlbnQtbWQ1OiA4YjlkOGM3YzJhYWE2MTY3ZTdkMzQwN2E3NzNiYmJiYQorVGV4dC1jb250ZW50LXNoYTE6IDk3MTY1MjdlYmQ3MGE3NWMyNzYyNWNhY2JlYjJkODk3YzZlODYxNzgKK0NvbnRlbnQtbGVuZ3RoOiAxNworCitQUk9QUy1FTkQKK3RvdWNoZQorCisKK1JldmlzaW9uLW51bWJlcjogMTMKK1Byb3AtY29udGVudC1sZW5ndGg6IDExOAorQ29udGVudC1sZW5ndGg6IDExOAorCitLIDcKK3N2bjpsb2cKK1YgMjAKKyhyMTMpIHJpZ2h0IHVwZGF0ZSAyCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDoyMC4wNDk2NTlaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9yaWdodC9iYW5nCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA4CitUZXh0LWNvbnRlbnQtbWQ1OiAzNGMyOGYxZDJkYzZhOWFkZWNjYzQyNjViZjc1MTZjYgorVGV4dC1jb250ZW50LXNoYTE6IDBiYzViYjM0NWMwZTcxZDI4Zjc4NGYxMmUwYmQyZDM4NGMyODMwNjIKK0NvbnRlbnQtbGVuZ3RoOiAxOAorCitQUk9QUy1FTkQKK3Rod2Fja2UKKworCitSZXZpc2lvbi1udW1iZXI6IDE0CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxNDAKK0NvbnRlbnQtbGVuZ3RoOiAxNDAKKworSyA3Citzdm46bG9nCitWIDQyCisocjE0KSBDaGVycnktcGljayByaWdodCAyIGNvbW1pdHMgdG8gdHJ1bmsKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjIzLjA0MTk5MVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogNzUKK0NvbnRlbnQtbGVuZ3RoOiA3NQorCitLIDEzCitzdm46bWVyZ2VpbmZvCitWIDQwCisvYnJhbmNoZXMvbGVmdDoyLTEwCisvYnJhbmNoZXMvcmlnaHQ6Ni0xMworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuay9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNzEzCitUZXh0LWNvbnRlbnQtbWQ1OiAwYWZiZTM0ZjI0NGNkNjYyYjFmOTdkNzA4YzY4N2Y5MAorVGV4dC1jb250ZW50LXNoYTE6IDQ2ZDkzNzdkNzgzZTY3YTliNTgxZGExMTAzNTJlNzk5NTE3YzhhMTQKK0NvbnRlbnQtbGVuZ3RoOiAyNzEzCisKKyMgLURDT0xMSVNJT05fQ0hFQ0sgaWYgeW91IGJlbGlldmUgdGhhdCBTSEExJ3MKKyMgMTQ2MTUwMTYzNzMzMDkwMjkxODIwMzY4NDgzMjcxNjI4MzAxOTY1NTkzMjU0Mjk3NiBoYXNoZXMgZG8gbm90IGdpdmUgeW91CisjIGVub3VnaCBndWFyYW50ZWVzIGFib3V0IG5vIGNvbGxpc2lvbnMgYmV0d2VlbiBvYmplY3RzIGV2ZXIgaGFwZW5uaW5nLgorIworIyAtRE5TRUMgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgc3ViLXNlY29uZCBmaWxlIG10aW1lcyBhbmQgY3RpbWVzLgorIyBOb3RlIHRoYXQgeW91IG5lZWQgc29tZSBuZXcgZ2xpYmMgKGF0IGxlYXN0ID4yLjIuNCkgZm9yIHRoaXMsIGFuZCBpdCB3aWxsCisjIEJSRUFLIFlPVVIgTE9DQUwgRElGRlMhIHNob3ctZGlmZiBhbmQgYW55dGhpbmcgdXNpbmcgaXQgd2lsbCBsaWtlbHkgcmFuZG9tbHkKKyMgYnJlYWsgdW5sZXNzIHlvdXIgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnRzIHRob3NlIHN1Yi1zZWNvbmQgdGltZXMKKyMgKG15IGV4dDMgZG9lc24ndCkuCitDRkxBR1M9LWcgLU8zIC1XYWxsCisKK0NDPWdjYworCisKK1BST0c9ICAgdXBkYXRlLWNhY2hlIHNob3ctZGlmZiBpbml0LWRiIHdyaXRlLXRyZWUgcmVhZC10cmVlIGNvbW1pdC10cmVlIFwKKwljYXQtZmlsZSBmc2NrLWNhY2hlIGNoZWNrb3V0LWNhY2hlIGRpZmYtdHJlZSByZXYtdHJlZSBzaG93LWZpbGVzIFwKKwljaGVjay1maWxlcyBscy10cmVlIG1lcmdlLWJhc2UgbWVyZ2UtY2FjaGUKKworYWxsOiAkKFBST0cpCisKK2luc3RhbGw6ICQoUFJPRykKKwlpbnN0YWxsICQoUFJPRykgJChIT01FKS9iaW4vCisKK0xJQlM9IC1sc3NsIC1segorCitpbml0LWRiOiBpbml0LWRiLm8KKwordXBkYXRlLWNhY2hlOiB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gdXBkYXRlLWNhY2hlIHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZGlmZjogc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZGlmZiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCit3cml0ZS10cmVlOiB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHdyaXRlLXRyZWUgd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtdHJlZTogcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJlYWQtdHJlZSByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjb21taXQtdHJlZTogY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY29tbWl0LXRyZWUgY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjYXQtZmlsZTogY2F0LWZpbGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2F0LWZpbGUgY2F0LWZpbGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitmc2NrLWNhY2hlOiBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZnNjay1jYWNoZSBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitjaGVja291dC1jYWNoZTogY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2tvdXQtY2FjaGUgY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitkaWZmLXRyZWU6IGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBkaWZmLXRyZWUgZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmV2LXRyZWU6IHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmV2LXRyZWUgcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK3Nob3ctZmlsZXM6IHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1maWxlcyBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2stZmlsZXM6IGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrLWZpbGVzIGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbHMtdHJlZTogbHMtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBscy10cmVlIGxzLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCittZXJnZS1iYXNlOiBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtYmFzZSBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCittZXJnZS1jYWNoZTogbWVyZ2UtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtY2FjaGUgbWVyZ2UtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLWNhY2hlLm86IGNhY2hlLmgKK3Nob3ctZGlmZi5vOiBjYWNoZS5oCisKK2NsZWFuOgorCXJtIC1mICoubyAkKFBST0cpCisKK2JhY2t1cDogY2xlYW4KKwljZCAuLiA7IHRhciBjenZmIGRpcmNhY2hlLnRhci5neiBkaXItY2FjaGUKKworCitOb2RlLXBhdGg6IHRydW5rL2JhbmcKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDEzCitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL3JpZ2h0L2JhbmcKK1RleHQtY29weS1zb3VyY2UtbWQ1OiAzNGMyOGYxZDJkYzZhOWFkZWNjYzQyNjViZjc1MTZjYgorVGV4dC1jb3B5LXNvdXJjZS1zaGExOiAwYmM1YmIzNDVjMGU3MWQyOGY3ODRmMTJlMGJkMmQzODRjMjgzMDYyCisKKworUmV2aXNpb24tbnVtYmVyOiAxNQorUHJvcC1jb250ZW50LWxlbmd0aDogMTI2CitDb250ZW50LWxlbmd0aDogMTI2CisKK0sgNworc3ZuOmxvZworViAyOAorKHIxNSkgTWVyZ2UgcmlnaHQgdG8gdHJ1bmsgMQorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MjYuMDU0NDU2WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA3NQorQ29udGVudC1sZW5ndGg6IDc1CisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgNDAKKy9icmFuY2hlcy9sZWZ0OjItMTAKKy9icmFuY2hlcy9yaWdodDoyLTE0CitQUk9QUy1FTkQKKworCitSZXZpc2lvbi1udW1iZXI6IDE2CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTgKK0NvbnRlbnQtbGVuZ3RoOiAxMTgKKworSyA3Citzdm46bG9nCitWIDIwCisocjE2KSByaWdodCB1cGRhdGUgMworSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MjcuMDQ5OTU1WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvcmlnaHQvdXJra2sKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDYKK1RleHQtY29udGVudC1tZDU6IDU4ODljODM5MmUxNjI1MWIwYzgwOTI3NjA3YTAzMDM2CitUZXh0LWNvbnRlbnQtc2hhMTogMzkzNDI2NGQyNzdhMGNmODg2YjZiMWM3ZjJiOWU1NmRhMjUyNTMwMgorQ29udGVudC1sZW5ndGg6IDE2CisKK1BST1BTLUVORAord2hhbW0KKworCitSZXZpc2lvbi1udW1iZXI6IDE3CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTgKK0NvbnRlbnQtbGVuZ3RoOiAxMTgKKworSyA3Citzdm46bG9nCitWIDIwCisocjE3KSB0cnVuayB1cGRhdGUgMQorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MjguMDQ5NjE1WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsvdnJvbmsKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDQKK1RleHQtY29udGVudC1tZDU6IGIyZjgwZmEwMmE3ZjEzNjRiOWMyOWQzZGE0NGJmOWY5CitUZXh0LWNvbnRlbnQtc2hhMTogZTk5NGQ5ODBjMGYyZDdhM2Y3NjEzOGJmOTZkNTdmMzZmOTYzMzgyOAorQ29udGVudC1sZW5ndGg6IDE0CisKK1BST1BTLUVORAorcG93CisKKworUmV2aXNpb24tbnVtYmVyOiAxOAorUHJvcC1jb250ZW50LWxlbmd0aDogMTM0CitDb250ZW50LWxlbmd0aDogMTM0CisKK0sgNworc3ZuOmxvZworViAzNgorKHIxOCkgTWVyZ2UgcmlnaHQgdG8gbGVmdCBzdWItYnJhbmNoCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDozMS4wNjE0NjBaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0LXN1YgorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDU1CitDb250ZW50LWxlbmd0aDogNTUKKworSyAxMworc3ZuOm1lcmdlaW5mbworViAyMAorL2JyYW5jaGVzL3JpZ2h0OjItMTcKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC1zdWIvTWFrZWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMjcxMworVGV4dC1jb250ZW50LW1kNTogMGFmYmUzNGYyNDRjZDY2MmIxZjk3ZDcwOGM2ODdmOTAKK1RleHQtY29udGVudC1zaGExOiA0NmQ5Mzc3ZDc4M2U2N2E5YjU4MWRhMTEwMzUyZTc5OTUxN2M4YTE0CitDb250ZW50LWxlbmd0aDogMjcxMworCisjIC1EQ09MTElTSU9OX0NIRUNLIGlmIHlvdSBiZWxpZXZlIHRoYXQgU0hBMSdzCisjIDE0NjE1MDE2MzczMzA5MDI5MTgyMDM2ODQ4MzI3MTYyODMwMTk2NTU5MzI1NDI5NzYgaGFzaGVzIGRvIG5vdCBnaXZlIHlvdQorIyBlbm91Z2ggZ3VhcmFudGVlcyBhYm91dCBubyBjb2xsaXNpb25zIGJldHdlZW4gb2JqZWN0cyBldmVyIGhhcGVubmluZy4KKyMKKyMgLUROU0VDIGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHN1Yi1zZWNvbmQgZmlsZSBtdGltZXMgYW5kIGN0aW1lcy4KKyMgTm90ZSB0aGF0IHlvdSBuZWVkIHNvbWUgbmV3IGdsaWJjIChhdCBsZWFzdCA+Mi4yLjQpIGZvciB0aGlzLCBhbmQgaXQgd2lsbAorIyBCUkVBSyBZT1VSIExPQ0FMIERJRkZTISBzaG93LWRpZmYgYW5kIGFueXRoaW5nIHVzaW5nIGl0IHdpbGwgbGlrZWx5IHJhbmRvbWx5CisjIGJyZWFrIHVubGVzcyB5b3VyIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBzdXBwb3J0cyB0aG9zZSBzdWItc2Vjb25kIHRpbWVzCisjIChteSBleHQzIGRvZXNuJ3QpLgorQ0ZMQUdTPS1nIC1PMyAtV2FsbAorCitDQz1nY2MKKworCitQUk9HPSAgIHVwZGF0ZS1jYWNoZSBzaG93LWRpZmYgaW5pdC1kYiB3cml0ZS10cmVlIHJlYWQtdHJlZSBjb21taXQtdHJlZSBcCisJY2F0LWZpbGUgZnNjay1jYWNoZSBjaGVja291dC1jYWNoZSBkaWZmLXRyZWUgcmV2LXRyZWUgc2hvdy1maWxlcyBcCisJY2hlY2stZmlsZXMgbHMtdHJlZSBtZXJnZS1iYXNlIG1lcmdlLWNhY2hlCisKK2FsbDogJChQUk9HKQorCitpbnN0YWxsOiAkKFBST0cpCisJaW5zdGFsbCAkKFBST0cpICQoSE9NRSkvYmluLworCitMSUJTPSAtbHNzbCAtbHoKKworaW5pdC1kYjogaW5pdC1kYi5vCisKK3VwZGF0ZS1jYWNoZTogdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHVwZGF0ZS1jYWNoZSB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitzaG93LWRpZmY6IHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWRpZmYgc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKword3JpdGUtdHJlZTogd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB3cml0ZS10cmVlIHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLXRyZWU6IHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZWFkLXRyZWUgcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY29tbWl0LXRyZWU6IGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNvbW1pdC10cmVlIGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2F0LWZpbGU6IGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNhdC1maWxlIGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZnNjay1jYWNoZTogZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIGZzY2stY2FjaGUgZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworY2hlY2tvdXQtY2FjaGU6IGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrb3V0LWNhY2hlIGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZGlmZi10cmVlOiBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZGlmZi10cmVlIGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Jldi10cmVlOiByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIHJldi10cmVlIHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitzaG93LWZpbGVzOiBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZmlsZXMgc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrLWZpbGVzOiBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVjay1maWxlcyBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2xzLXRyZWU6IGxzLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbHMtdHJlZSBscy10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbWVyZ2UtYmFzZTogbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWJhc2UgbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworbWVyZ2UtY2FjaGU6IG1lcmdlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWNhY2hlIG1lcmdlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC1jYWNoZS5vOiBjYWNoZS5oCitzaG93LWRpZmYubzogY2FjaGUuaAorCitjbGVhbjoKKwlybSAtZiAqLm8gJChQUk9HKQorCitiYWNrdXA6IGNsZWFuCisJY2QgLi4gOyB0YXIgY3p2ZiBkaXJjYWNoZS50YXIuZ3ogZGlyLWNhY2hlCisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0LXN1Yi9iYW5nCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxNworTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9yaWdodC9iYW5nCitUZXh0LWNvcHktc291cmNlLW1kNTogMzRjMjhmMWQyZGM2YTlhZGVjY2M0MjY1YmY3NTE2Y2IKK1RleHQtY29weS1zb3VyY2Utc2hhMTogMGJjNWJiMzQ1YzBlNzFkMjhmNzg0ZjEyZTBiZDJkMzg0YzI4MzA2MgorCisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC1zdWIvdXJra2sKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDE3CitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL3JpZ2h0L3Vya2trCitUZXh0LWNvcHktc291cmNlLW1kNTogNTg4OWM4MzkyZTE2MjUxYjBjODA5Mjc2MDdhMDMwMzYKK1RleHQtY29weS1zb3VyY2Utc2hhMTogMzkzNDI2NGQyNzdhMGNmODg2YjZiMWM3ZjJiOWU1NmRhMjUyNTMwMgorCisKK1JldmlzaW9uLW51bWJlcjogMTkKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyOAorQ29udGVudC1sZW5ndGg6IDEyOAorCitLIDcKK3N2bjpsb2cKK1YgMzAKKyhyMTkpIGxlZnQgc3ViLWJyYW5jaCB1cGRhdGUgMgorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MzIuMDQ5MjQ0WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC1zdWIvd2hhbV9ldGgKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDYKK1RleHQtY29udGVudC1tZDU6IDc1N2JjZDU4MTg1NzJlZjNmOTU4MDA1MjYxN2MxYzhiCitUZXh0LWNvbnRlbnQtc2hhMTogYjE2NTAxOWIwMDVjMTk5MjM3YmE4MjJjNDQwNGU3NzFlOTNiNjU0YQorQ29udGVudC1sZW5ndGg6IDE2CisKK1BST1BTLUVORAorem93aWUKKworCitSZXZpc2lvbi1udW1iZXI6IDIwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTcKK0NvbnRlbnQtbGVuZ3RoOiAxMTcKKworSyA3Citzdm46bG9nCitWIDE5CisocjIwKSBsZWZ0IHVwZGF0ZSA1CitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDozMy4wNDkzMzJaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0L2dsdXJwcAorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogOAorVGV4dC1jb250ZW50LW1kNTogMTRhMTY5ZjYyOGUwYmI1OWRmOWMyMTYwNjQ5ZDBhMzAKK1RleHQtY29udGVudC1zaGExOiBlZjdkOTI5ZTUyMTc3NzY3ZWNmY2QyODk0MWY2YjdmMDRiNDEzMWUzCitDb250ZW50LWxlbmd0aDogMTgKKworUFJPUFMtRU5ECitlZWVfeW93CisKKworUmV2aXNpb24tbnVtYmVyOiAyMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTQ2CitDb250ZW50LWxlbmd0aDogMTQ2CisKK0sgNworc3ZuOmxvZworViA0OAorKHIyMSkgQ2hlcnJ5LXBpY2sgbGVmdCBzdWItYnJhbmNoIGNvbW1pdCB0byBsZWZ0CitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDozNi4wNDE4MzlaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0CitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogNTYKK0NvbnRlbnQtbGVuZ3RoOiA1NgorCitLIDEzCitzdm46bWVyZ2VpbmZvCitWIDIxCisvYnJhbmNoZXMvbGVmdC1zdWI6MTkKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC93aGFtX2V0aAorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMTkKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvbGVmdC1zdWIvd2hhbV9ldGgKK1RleHQtY29weS1zb3VyY2UtbWQ1OiA3NTdiY2Q1ODE4NTcyZWYzZjk1ODAwNTI2MTdjMWM4YgorVGV4dC1jb3B5LXNvdXJjZS1zaGExOiBiMTY1MDE5YjAwNWMxOTkyMzdiYTgyMmM0NDA0ZTc3MWU5M2I2NTRhCisKKworUmV2aXNpb24tbnVtYmVyOiAyMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTMzCitDb250ZW50LWxlbmd0aDogMTMzCisKK0sgNworc3ZuOmxvZworViAzNQorKHIyMikgTWVyZ2UgbGVmdCBzdWItYnJhbmNoIHRvIGxlZnQKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjM5LjA0NTAxNFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA3OQorQ29udGVudC1sZW5ndGg6IDc5CisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgNDQKKy9icmFuY2hlcy9sZWZ0LXN1Yjo0LTE5CisvYnJhbmNoZXMvcmlnaHQ6Mi0xNworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0L01ha2VmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDI3MTMKK1RleHQtY29udGVudC1tZDU6IDBhZmJlMzRmMjQ0Y2Q2NjJiMWY5N2Q3MDhjNjg3ZjkwCitUZXh0LWNvbnRlbnQtc2hhMTogNDZkOTM3N2Q3ODNlNjdhOWI1ODFkYTExMDM1MmU3OTk1MTdjOGExNAorQ29udGVudC1sZW5ndGg6IDI3MTMKKworIyAtRENPTExJU0lPTl9DSEVDSyBpZiB5b3UgYmVsaWV2ZSB0aGF0IFNIQTEncworIyAxNDYxNTAxNjM3MzMwOTAyOTE4MjAzNjg0ODMyNzE2MjgzMDE5NjU1OTMyNTQyOTc2IGhhc2hlcyBkbyBub3QgZ2l2ZSB5b3UKKyMgZW5vdWdoIGd1YXJhbnRlZXMgYWJvdXQgbm8gY29sbGlzaW9ucyBiZXR3ZWVuIG9iamVjdHMgZXZlciBoYXBlbm5pbmcuCisjCisjIC1ETlNFQyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCBzdWItc2Vjb25kIGZpbGUgbXRpbWVzIGFuZCBjdGltZXMuCisjIE5vdGUgdGhhdCB5b3UgbmVlZCBzb21lIG5ldyBnbGliYyAoYXQgbGVhc3QgPjIuMi40KSBmb3IgdGhpcywgYW5kIGl0IHdpbGwKKyMgQlJFQUsgWU9VUiBMT0NBTCBESUZGUyEgc2hvdy1kaWZmIGFuZCBhbnl0aGluZyB1c2luZyBpdCB3aWxsIGxpa2VseSByYW5kb21seQorIyBicmVhayB1bmxlc3MgeW91ciB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdGhvc2Ugc3ViLXNlY29uZCB0aW1lcworIyAobXkgZXh0MyBkb2Vzbid0KS4KK0NGTEFHUz0tZyAtTzMgLVdhbGwKKworQ0M9Z2NjCisKKworUFJPRz0gICB1cGRhdGUtY2FjaGUgc2hvdy1kaWZmIGluaXQtZGIgd3JpdGUtdHJlZSByZWFkLXRyZWUgY29tbWl0LXRyZWUgXAorCWNhdC1maWxlIGZzY2stY2FjaGUgY2hlY2tvdXQtY2FjaGUgZGlmZi10cmVlIHJldi10cmVlIHNob3ctZmlsZXMgXAorCWNoZWNrLWZpbGVzIGxzLXRyZWUgbWVyZ2UtYmFzZSBtZXJnZS1jYWNoZQorCithbGw6ICQoUFJPRykKKworaW5zdGFsbDogJChQUk9HKQorCWluc3RhbGwgJChQUk9HKSAkKEhPTUUpL2Jpbi8KKworTElCUz0gLWxzc2wgLWx6CisKK2luaXQtZGI6IGluaXQtZGIubworCit1cGRhdGUtY2FjaGU6IHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB1cGRhdGUtY2FjaGUgdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1kaWZmOiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1kaWZmIHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3dyaXRlLXRyZWU6IHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gd3JpdGUtdHJlZSB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC10cmVlOiByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmVhZC10cmVlIHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NvbW1pdC10cmVlOiBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjb21taXQtdHJlZSBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NhdC1maWxlOiBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjYXQtZmlsZSBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2ZzY2stY2FjaGU6IGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBmc2NrLWNhY2hlIGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK2NoZWNrb3V0LWNhY2hlOiBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVja291dC1jYWNoZSBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2RpZmYtdHJlZTogZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGRpZmYtdHJlZSBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZXYtdHJlZTogcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZXYtdHJlZSByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworc2hvdy1maWxlczogc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWZpbGVzIHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVjay1maWxlczogY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2stZmlsZXMgY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitscy10cmVlOiBscy10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGxzLXRyZWUgbHMtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK21lcmdlLWJhc2U6IG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1iYXNlIG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK21lcmdlLWNhY2hlOiBtZXJnZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1jYWNoZSBtZXJnZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtY2FjaGUubzogY2FjaGUuaAorc2hvdy1kaWZmLm86IGNhY2hlLmgKKworY2xlYW46CisJcm0gLWYgKi5vICQoUFJPRykKKworYmFja3VwOiBjbGVhbgorCWNkIC4uIDsgdGFyIGN6dmYgZGlyY2FjaGUudGFyLmd6IGRpci1jYWNoZQorCisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC9SRUFETUUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDE4CitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL2xlZnQtc3ViL1JFQURNRQorVGV4dC1jb3B5LXNvdXJjZS1tZDU6IGZkYmNmYjZiZTlhZmUxMTIxODYyMTQzZjIyNmI1MWNmCitUZXh0LWNvcHktc291cmNlLXNoYTE6IDFkMWY1ZWE0Y2ViNTg0MzM3ZmZlNTliODk4MGQ5MmUzYjc4ZGZlZjQKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQvYmFuZworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMTgKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvbGVmdC1zdWIvYmFuZworVGV4dC1jb3B5LXNvdXJjZS1tZDU6IDM0YzI4ZjFkMmRjNmE5YWRlY2NjNDI2NWJmNzUxNmNiCitUZXh0LWNvcHktc291cmNlLXNoYTE6IDBiYzViYjM0NWMwZTcxZDI4Zjc4NGYxMmUwYmQyZDM4NGMyODMwNjIKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQvdXJra2sKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDE4CitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL2xlZnQtc3ViL3Vya2trCitUZXh0LWNvcHktc291cmNlLW1kNTogNTg4OWM4MzkyZTE2MjUxYjBjODA5Mjc2MDdhMDMwMzYKK1RleHQtY29weS1zb3VyY2Utc2hhMTogMzkzNDI2NGQyNzdhMGNmODg2YjZiMWM3ZjJiOWU1NmRhMjUyNTMwMgorCisKK1JldmlzaW9uLW51bWJlcjogMjMKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyNQorQ29udGVudC1sZW5ndGg6IDEyNQorCitLIDcKK3N2bjpsb2cKK1YgMjcKKyhyMjMpIE1lcmdlIGxlZnQgdG8gdHJ1bmsgMgorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6NDIuMDUyNzk4WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA5OQorQ29udGVudC1sZW5ndGg6IDk5CisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgNjQKKy9icmFuY2hlcy9sZWZ0OjItMjIKKy9icmFuY2hlcy9sZWZ0LXN1Yjo0LTE5CisvYnJhbmNoZXMvcmlnaHQ6Mi0xNworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuay9SRUFETUUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDIyCitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL2xlZnQvUkVBRE1FCitUZXh0LWNvcHktc291cmNlLW1kNTogZmRiY2ZiNmJlOWFmZTExMjE4NjIxNDNmMjI2YjUxY2YKK1RleHQtY29weS1zb3VyY2Utc2hhMTogMWQxZjVlYTRjZWI1ODQzMzdmZmU1OWI4OTgwZDkyZTNiNzhkZmVmNAorCisKK05vZGUtcGF0aDogdHJ1bmsvZ2x1cnBwCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAyMgorTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9sZWZ0L2dsdXJwcAorVGV4dC1jb3B5LXNvdXJjZS1tZDU6IDE0YTE2OWY2MjhlMGJiNTlkZjljMjE2MDY0OWQwYTMwCitUZXh0LWNvcHktc291cmNlLXNoYTE6IGVmN2Q5MjllNTIxNzc3NjdlY2ZjZDI4OTQxZjZiN2YwNGI0MTMxZTMKKworCitOb2RlLXBhdGg6IHRydW5rL3Vya2trCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAyMgorTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9sZWZ0L3Vya2trCitUZXh0LWNvcHktc291cmNlLW1kNTogNTg4OWM4MzkyZTE2MjUxYjBjODA5Mjc2MDdhMDMwMzYKK1RleHQtY29weS1zb3VyY2Utc2hhMTogMzkzNDI2NGQyNzdhMGNmODg2YjZiMWM3ZjJiOWU1NmRhMjUyNTMwMgorCisKK05vZGUtcGF0aDogdHJ1bmsvd2hhbV9ldGgKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDIyCitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL2xlZnQvd2hhbV9ldGgKK1RleHQtY29weS1zb3VyY2UtbWQ1OiA3NTdiY2Q1ODE4NTcyZWYzZjk1ODAwNTI2MTdjMWM4YgorVGV4dC1jb3B5LXNvdXJjZS1zaGExOiBiMTY1MDE5YjAwNWMxOTkyMzdiYTgyMmM0NDA0ZTc3MWU5M2I2NTRhCisKKworTm9kZS1wYXRoOiB0cnVuay96bG9uaworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMjIKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvbGVmdC96bG9uaworVGV4dC1jb3B5LXNvdXJjZS1tZDU6IDhiOWQ4YzdjMmFhYTYxNjdlN2QzNDA3YTc3M2JiYmJhCitUZXh0LWNvcHktc291cmNlLXNoYTE6IDk3MTY1MjdlYmQ3MGE3NWMyNzYyNWNhY2JlYjJkODk3YzZlODYxNzgKKworCitSZXZpc2lvbi1udW1iZXI6IDI0CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMzAKK0NvbnRlbnQtbGVuZ3RoOiAxMzAKKworSyA3Citzdm46bG9nCitWIDMyCisocjI0KSBub24tbWVyZ2UgcmlnaHQgdG8gdHJ1bmsgMgorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6NDQuMDM4NDM0WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA5OQorQ29udGVudC1sZW5ndGg6IDk5CisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgNjQKKy9icmFuY2hlcy9sZWZ0OjItMjIKKy9icmFuY2hlcy9sZWZ0LXN1Yjo0LTE5CisvYnJhbmNoZXMvcmlnaHQ6Mi0yMgorUFJPUFMtRU5ECisKKworUmV2aXNpb24tbnVtYmVyOiAyNQorUHJvcC1jb250ZW50LWxlbmd0aDogMTM1CitDb250ZW50LWxlbmd0aDogMTM1CisKK0sgNworc3ZuOmxvZworViAzNworKHIyNSkgYWRkIHN1YmRpcmVjdG9yeSB0byBsZWZ0IGJyYW5jaAorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6NDYuMDUyNjQ5WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC9zdWJkaXIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC9zdWJkaXIvY293Ym95CitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA3CitUZXh0LWNvbnRlbnQtbWQ1OiBmMWQ2NTMwMjc4YWQ0MDllNjhjYzY3NTQ3NmFkOTk1ZgorVGV4dC1jb250ZW50LXNoYTE6IDczMmQ5ZTNlNWMzOTFmZmQ3NjdhOThiNDVkZGNjODQ4ZGU3NzhjZWEKK0NvbnRlbnQtbGVuZ3RoOiAxNworCitQUk9QUy1FTkQKK1llZWhhdworCisKK1JldmlzaW9uLW51bWJlcjogMjYKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMworQ29udGVudC1sZW5ndGg6IDEyMworCitLIDcKK3N2bjpsb2cKK1YgMjUKKyhyMjYpIG1lcmdlIGxlZnQgdG8gdHJ1bmsKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjQ5LjA0MDc4M1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogOTkKK0NvbnRlbnQtbGVuZ3RoOiA5OQorCitLIDEzCitzdm46bWVyZ2VpbmZvCitWIDY0CisvYnJhbmNoZXMvbGVmdDoyLTI1CisvYnJhbmNoZXMvbGVmdC1zdWI6NC0xOQorL2JyYW5jaGVzL3JpZ2h0OjItMjIKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdHJ1bmsvc3ViZGlyCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDI1CitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL2xlZnQvc3ViZGlyCisKKworUmV2aXNpb24tbnVtYmVyOiAyNworUHJvcC1jb250ZW50LWxlbmd0aDogMTE4CitDb250ZW50LWxlbmd0aDogMTE4CisKK0sgNworc3ZuOmxvZworViAyMAorKHIyOCkgcGFydGlhbCB1cGRhdGUKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjUzLjA0OTAzN1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL3BhcnRpYWwKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMjYKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsvc3ViZGlyCisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9wYXJ0aWFsL3BhbGluZHJvbWVzCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA4CitUZXh0LWNvbnRlbnQtbWQ1OiA1ZDFjMjAyNGZiNWVmYzRlZWY4MTI4NTZkZjFiMDgwYworVGV4dC1jb250ZW50LXNoYTE6IDVmODUwOWRkZDE0YzkxYTUyODY0ZGQxNDQ3MzQ0ZTcwNmY5YmJjNjkKK0NvbnRlbnQtbGVuZ3RoOiAxOAorCitQUk9QUy1FTkQKK3JhY2VjYXIKKworCitSZXZpc2lvbi1udW1iZXI6IDI4CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjYKK0NvbnRlbnQtbGVuZ3RoOiAxMjYKKworSyA3Citzdm46bG9nCitWIDI4CisocjI5KSBtZXJnZSBwYXJ0aWFsIHRvIHRydW5rCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDo1Ni4wNDE1MjZaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuay9zdWJkaXIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxNDIKK0NvbnRlbnQtbGVuZ3RoOiAxNDIKKworSyAxMworc3ZuOm1lcmdlaW5mbworViAxMDYKKy9icmFuY2hlcy9sZWZ0L3N1YmRpcjoyLTI1CisvYnJhbmNoZXMvbGVmdC1zdWIvc3ViZGlyOjQtMTkKKy9icmFuY2hlcy9wYXJ0aWFsOjI3CisvYnJhbmNoZXMvcmlnaHQvc3ViZGlyOjItMjIKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdHJ1bmsvc3ViZGlyL3BhbGluZHJvbWVzCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAyNworTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9wYXJ0aWFsL3BhbGluZHJvbWVzCitUZXh0LWNvcHktc291cmNlLW1kNTogNWQxYzIwMjRmYjVlZmM0ZWVmODEyODU2ZGYxYjA4MGMKK1RleHQtY29weS1zb3VyY2Utc2hhMTogNWY4NTA5ZGRkMTRjOTFhNTI4NjRkZDE0NDczNDRlNzA2ZjliYmM2OQorCisKK1JldmlzaW9uLW51bWJlcjogMjkKK1Byb3AtY29udGVudC1sZW5ndGg6IDEzMQorQ29udGVudC1sZW5ndGg6IDEzMQorCitLIDcKK3N2bjpsb2cKK1YgMzMKKyhyMzEpIG1ha2UgYnVnZml4IGJyYW5jaCBmcm9tIHRhZworSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTU6MDAuMDM5NzYxWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdGFncy92MS4wCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDI4CitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworUmV2aXNpb24tbnVtYmVyOiAzMAorUHJvcC1jb250ZW50LWxlbmd0aDogMTIwCitDb250ZW50LWxlbmd0aDogMTIwCisKK0sgNworc3ZuOmxvZworViAyMgorKHIzMikgY29tbWl0IHRvIGJ1Z2ZpeAorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTU6MDMuMDQzMjE4WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvYnVnZml4CitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDI5CitOb2RlLWNvcHlmcm9tLXBhdGg6IHRhZ3MvdjEuMAorCisKK05vZGUtcGF0aDogYnJhbmNoZXMvYnVnZml4L3N1YmRpci9wYWxpbmRyb21lcworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxNAorVGV4dC1jb250ZW50LW1kNTogM2IxMmQ5ODU3OGEzZjQzMjBiYTk3ZTY2ZGE1NGZlNWYKK1RleHQtY29udGVudC1zaGExOiA2NzI5MzFjOWU4YWMyYzQwODIwOWVmYWIyZjAxNTYzOGI2ZDY0MDQyCitDb250ZW50LWxlbmd0aDogMTQKKworcmFjZWNhcgora2F5YWsKKworCitSZXZpc2lvbi1udW1iZXI6IDMxCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjUKK0NvbnRlbnQtbGVuZ3RoOiAxMjUKKworSyA3Citzdm46bG9nCitWIDI3CisocjMzKSBNZXJnZSBCVUdGSVggdG8gVFJVTksKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE1OjA2LjA0MzcyM1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogMTMzCitDb250ZW50LWxlbmd0aDogMTMzCisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgOTgKKy9icmFuY2hlcy9idWdmaXg6MzAKKy9icmFuY2hlcy9sZWZ0OjItMjUKKy9icmFuY2hlcy9sZWZ0LXN1Yjo0LTE5CisvYnJhbmNoZXMvcmlnaHQ6Mi0yMgorL3RhZ3MvdjEuMDoyOQorUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuay9zdWJkaXIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxOTAKK0NvbnRlbnQtbGVuZ3RoOiAxOTAKKworSyAxMworc3ZuOm1lcmdlaW5mbworViAxNTQKKy9icmFuY2hlcy9idWdmaXgvc3ViZGlyOjMwCisvYnJhbmNoZXMvbGVmdC9zdWJkaXI6Mi0yNQorL2JyYW5jaGVzL2xlZnQtc3ViL3N1YmRpcjo0LTE5CisvYnJhbmNoZXMvcGFydGlhbDoyNworL2JyYW5jaGVzL3JpZ2h0L3N1YmRpcjoyLTIyCisvdGFncy92MS4wL3N1YmRpcjoyOQorUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuay9zdWJkaXIvcGFsaW5kcm9tZXMKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMTQKK1RleHQtY29udGVudC1tZDU6IDNiMTJkOTg1NzhhM2Y0MzIwYmE5N2U2NmRhNTRmZTVmCitUZXh0LWNvbnRlbnQtc2hhMTogNjcyOTMxYzllOGFjMmM0MDgyMDllZmFiMmYwMTU2MzhiNmQ2NDA0MgorQ29udGVudC1sZW5ndGg6IDE0CisKK3JhY2VjYXIKK2theWFrCisKKwpkaWZmIC0tZ2l0IGEvdC90OTE1Mi1zdm4tZW1wdHktZGlycy1hZnRlci1nYy5zaCBiL3QvdDkxNTItc3ZuLWVtcHR5LWRpcnMtYWZ0ZXItZ2Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzAxZTc3OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNTItc3ZuLWVtcHR5LWRpcnMtYWZ0ZXItZ2Muc2gKQEAgLTAsMCArMSw0MCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBSb2JlcnQgWmVoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gY3JlYXRlcyBlbXB0eSBkaXJlY3RvcmllcywgY2FsbHMgZ2l0IGdjLCBtYWtlcyBzdXJlIHRoZXkgYXJlIHN0aWxsIGVtcHR5JworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgcmVwbycgJworCWZvciBpIGluIGEgYiBjIGQgZC9lIGQvZS9mICJ3ZWlyZCBmaWxlIG5hbWUiCisJZG8KKwkJc3ZuX2NtZCBta2RpciAtbSAibWtkaXIgJGkiICIkc3ZucmVwbyIvIiRpIgorCWRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUnICdnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIgY2xvbmVkJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIGdjIHJ1bnMnICcKKwkoCisJCWNkIGNsb25lZCAmJgorCQlnaXQgc3ZuIGdjCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIG1rZGlycyByZWNyZWF0ZXMgZW1wdHkgZGlyZWN0b3JpZXMgYWZ0ZXIgZ2l0IHN2biBnYycgJworCSgKKwkJY2QgY2xvbmVkICYmCisJCXJtIC1yICogJiYKKwkJZ2l0IHN2biBta2RpcnMgJiYKKwkJZm9yIGkgaW4gYSBiIGMgZCBkL2UgZC9lL2YgIndlaXJkIGZpbGUgbmFtZSIKKwkJZG8KKwkJCWlmICEgdGVzdCAtZCAiJGkiCisJCQl0aGVuCisJCQkJZWNobyA+JjIgIiRpIGRvZXMgbm90IGV4aXN0IgorCQkJCWV4aXQgMQorCQkJZmkKKwkJZG9uZQorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTUzLWdpdC1zdm4tcmV3cml0ZS11dWlkLnNoIGIvdC90OTE1My1naXQtc3ZuLXJld3JpdGUtdXVpZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44OGEyY2ZhCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1My1naXQtc3ZuLXJld3JpdGUtdXVpZC5zaApAQCAtMCwwICsxLDI1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIEpheSBTb2ZmaWFuCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gLS1yZXdyaXRlLXV1aWQgdGVzdCcKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3V1aWQ9NmNjOGFkYTQtNTkzMi00YjRhLTgyNDItMzUzNGVkOGEzMjMyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgc3ZuIHJlcG8nICIKKwlzdm5hZG1pbiBsb2FkIC1xICckcmF3c3ZucmVwbycgPCAnJFRFU1RfRElSRUNUT1JZL3Q5MTUzL3N2bi5kdW1wJyAmJgorCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtLXJld3JpdGUtdXVpZD0nJHV1aWQnICckc3ZucmVwbycgJiYKKwlnaXQgc3ZuIGZldGNoCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdXVpZCcgIgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2dpdC1zdm5+MCB8IFwKKwkgICBncmVwICdeJHtnaXRfc3ZuX2lkfTogLipAMiAkdXVpZCQnICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvZ2l0LXN2bn4xIHwgXAorCSAgIGdyZXAgJ14ke2dpdF9zdm5faWR9OiAuKkAxICR1dWlkJCcKKwkiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE1My9zdm4uZHVtcCBiL3QvdDkxNTMvc3ZuLmR1bXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRkZmU3MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNTMvc3ZuLmR1bXAKQEAgLTAsMCArMSw3NSBAQAorU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDIKKworVVVJRDogYjQ4ODU2MjYtYzk0Zi00YTZjLWIxNzktMDBjMDMwZmM2OGU4CisKK1JldmlzaW9uLW51bWJlcjogMAorUHJvcC1jb250ZW50LWxlbmd0aDogNTYKK0NvbnRlbnQtbGVuZ3RoOiA1NgorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTIzVDA2OjQxOjAzLjkwODU3NloKK1BST1BTLUVORAorCitSZXZpc2lvbi1udW1iZXI6IDEKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwOQorQ29udGVudC1sZW5ndGg6IDEwOQorCitLIDcKK3N2bjpsb2cKK1YgMTEKK2luaXRpYWwgZm9vCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2pheQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0yM1QwNjo0MTo0OC4zNTM3NzZaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBmb28KK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDQKK1RleHQtY29udGVudC1tZDU6IGQzYjA3Mzg0ZDExM2VkZWM0OWVhYTYyMzhhZDVmZjAwCitUZXh0LWNvbnRlbnQtc2hhMTogZjFkMmQyZjkyNGU5ODZhYzg2ZmRmN2IzNmM5NGJjZGYzMmJlZWMxNQorQ29udGVudC1sZW5ndGg6IDE0CisKK1BST1BTLUVORAorZm9vCisKKworUmV2aXNpb24tbnVtYmVyOiAyCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMTAKKworSyA3Citzdm46bG9nCitWIDEyCitub3cgd2l0aCBiYXIKK0sgMTAKK3N2bjphdXRob3IKK1YgMworamF5CitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTIzVDA2OjQyOjE0LjIxNDY0MFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGZvbworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA4CitUZXh0LWNvbnRlbnQtbWQ1OiBmNDdjNzU2MTQwODdhOGRkOTM4YmE0YWNmZjI1MjQ5NAorVGV4dC1jb250ZW50LXNoYTE6IDRlNDhlMmM5YTNkMmNhOGE3MDhjYjBjYzU0NTcwMDU0NGVmYjUwMjEKK0NvbnRlbnQtbGVuZ3RoOiA4CisKK2ZvbworYmFyCisKKwpkaWZmIC0tZ2l0IGEvdC90OTE1NC1naXQtc3ZuLWZhbmN5LWdsb2Iuc2ggYi90L3Q5MTU0LWdpdC1zdm4tZmFuY3ktZ2xvYi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNmE1NmE2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1NC1naXQtc3ZuLWZhbmN5LWdsb2Iuc2gKQEAgLTAsMCArMSw0MiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBKYXkgU29mZmlhbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGZhbmN5IGdsb2IgdGVzdCcKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgc3ZuIHJlcG8nICIKKwlzdm5hZG1pbiBsb2FkIC1xICckcmF3c3ZucmVwbycgPCAnJFRFU1RfRElSRUNUT1JZL3Q5MTU0L3N2bi5kdW1wJyAmJgorCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtVCB0cnVuayAnJHN2bnJlcG8nICYmCisJZ2l0IHN2biBmZXRjaAorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHJlZCBicmFuY2gnICIKKwlnaXQgY29uZmlnIHN2bi1yZW1vdGUuc3ZuLmJyYW5jaGVzICdicmFuY2hlcy97cmVkfTpyZWZzL3JlbW90ZXMvKicgJiYKKwlnaXQgc3ZuIGZldGNoICYmCisJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvcmVkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvZ3JlZW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9ibHVlCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgZ3JlZW4gYnJhbmNoJyAiCisJR0lUX0NPTkZJRz0uZ2l0L3N2bi8ubWV0YWRhdGEgZ2l0IGNvbmZpZyAtLXVuc2V0IHN2bi1yZW1vdGUuc3ZuLmJyYW5jaGVzLW1heFJldiAmJgorCWdpdCBjb25maWcgc3ZuLXJlbW90ZS5zdm4uYnJhbmNoZXMgJ2JyYW5jaGVzL3tyZWQsZ3JlZW59OnJlZnMvcmVtb3Rlcy8qJyAmJgorCWdpdCBzdm4gZmV0Y2ggJiYKKwlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9yZWQgJiYKKwlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9ncmVlbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2JsdWUKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBhbGwgYnJhbmNoZXMnICIKKwlHSVRfQ09ORklHPS5naXQvc3ZuLy5tZXRhZGF0YSBnaXQgY29uZmlnIC0tdW5zZXQgc3ZuLXJlbW90ZS5zdm4uYnJhbmNoZXMtbWF4UmV2ICYmCisJZ2l0IGNvbmZpZyBzdm4tcmVtb3RlLnN2bi5icmFuY2hlcyAnYnJhbmNoZXMvKjpyZWZzL3JlbW90ZXMvKicgJiYKKwlnaXQgc3ZuIGZldGNoICYmCisJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvcmVkICYmCisJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvZ3JlZW4gJiYKKwlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9ibHVlCisJIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNTQvc3ZuLmR1bXAgYi90L3Q5MTU0L3N2bi5kdW1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZmFiYjYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTU0L3N2bi5kdW1wCkBAIC0wLDAgKzEsMjIyIEBACitTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMgorCitVVUlEOiBhMTgwOTNhMC01ZjBiLTQ0ZTAtOGQ4OC04OTExYWM3MDc4ZGIKKworUmV2aXNpb24tbnVtYmVyOiAwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA1NgorQ29udGVudC1sZW5ndGg6IDU2CisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMjNUMDc6NDA6MjUuNjYwMDUzWgorUFJPUFMtRU5ECisKK1JldmlzaW9uLW51bWJlcjogMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTA0CitDb250ZW50LWxlbmd0aDogMTA0CisKK0sgNworc3ZuOmxvZworViA3Citpbml0aWFsCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2pheQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0yM1QwNzo0MTozMy42MzYzNjVaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuaworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuay9mb28KK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDQKK1RleHQtY29udGVudC1tZDU6IGQzYjA3Mzg0ZDExM2VkZWM0OWVhYTYyMzhhZDVmZjAwCitUZXh0LWNvbnRlbnQtc2hhMTogZjFkMmQyZjkyNGU5ODZhYzg2ZmRmN2IzNmM5NGJjZGYzMmJlZWMxNQorQ29udGVudC1sZW5ndGg6IDE0CisKK1BST1BTLUVORAorZm9vCisKKworUmV2aXNpb24tbnVtYmVyOiAyCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMTAKKworSyA3Citzdm46bG9nCitWIDEyCithZGQgYnJhbmNoZXMKK0sgMTAKK3N2bjphdXRob3IKK1YgMworamF5CitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTIzVDA3OjQyOjM3LjI5MDY5NFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL2JsdWUKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMQorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworCisKK05vZGUtcGF0aDogYnJhbmNoZXMvZ3JlZW4KK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMQorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworCisKK05vZGUtcGF0aDogYnJhbmNoZXMvcmVkCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDEKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsKKworCitSZXZpc2lvbi1udW1iZXI6IDMKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwOAorQ29udGVudC1sZW5ndGg6IDEwOAorCitLIDcKK3N2bjpsb2cKK1YgMTAKK3JlZCBjaGFuZ2UKK0sgMTAKK3N2bjphdXRob3IKK1YgMworamF5CitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTIzVDA3OjQzOjAyLjIwODkxOFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL3JlZC9mb28KK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogOAorVGV4dC1jb250ZW50LW1kNTogNjRjM2M4Y2Y3ZDAyMzNhYjc2Mjc2MjNhNjg4ODhiZDEKK1RleHQtY29udGVudC1zaGExOiA5NWEwNDkyMDI3ODc2YWRmZDM4OTFlYzcxZWUzN2I3OWVlNDRkNjQwCitDb250ZW50LWxlbmd0aDogOAorCitmb28KK3JlZAorCisKK1JldmlzaW9uLW51bWJlcjogNAorUHJvcC1jb250ZW50LWxlbmd0aDogMTEwCitDb250ZW50LWxlbmd0aDogMTEwCisKK0sgNworc3ZuOmxvZworViAxMgorZ3JlZW4gY2hhbmdlCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2pheQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0yM1QwNzo0MzoxNS43NDY1ODZaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9ncmVlbi9mb28KK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1tZDU6IDAyMDliNjQ1MDg5MWFiYzAzM2Q1ZWFhYTlkM2E4MDIzCitUZXh0LWNvbnRlbnQtc2hhMTogODdmYzNiZWY5ZmFlZWM0OGMwY2Q2MWRmYzk4NTFkYjM3N2ZkY2NmNworQ29udGVudC1sZW5ndGg6IDEwCisKK2ZvbworZ3JlZW4KKworCitSZXZpc2lvbi1udW1iZXI6IDUKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwOQorQ29udGVudC1sZW5ndGg6IDEwOQorCitLIDcKK3N2bjpsb2cKK1YgMTEKK2JsdWUgY2hhbmdlCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2pheQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0yM1QwNzo0MzoyOS4zNjQ4MTFaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9ibHVlL2ZvbworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA5CitUZXh0LWNvbnRlbnQtbWQ1OiA5ZmJlNGMxM2QwYmFlODYzODZhZTUyMDliMmU2YjI3NQorVGV4dC1jb250ZW50LXNoYTE6IGNjNDU3NTA4MzQ1OWExNmY5YWFlZjc5NmM0YTI0NTZkNjQ2OTFiYTAKK0NvbnRlbnQtbGVuZ3RoOiA5CisKK2ZvbworYmx1ZQorCisKK1JldmlzaW9uLW51bWJlcjogNgorUHJvcC1jb250ZW50LWxlbmd0aDogMTEwCitDb250ZW50LWxlbmd0aDogMTEwCisKK0sgNworc3ZuOmxvZworViAxMgordHJ1bmsgY2hhbmdlCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2pheQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0yM1QwNzo0NDowMS4zMTMxMzBaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuay9mb28KK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1tZDU6IDFjNGRiOTc3ZDdhNTdjM2JhZTU4MmFhYjg3OTQ4NTE2CitUZXh0LWNvbnRlbnQtc2hhMTogNDY5YzA4ZGY0NDllNzAyY2YyYTFmZTc0NjI0NGE5ZWYzZjgzN2ZhZAorQ29udGVudC1sZW5ndGg6IDEwCisKK2ZvbwordHJ1bmsKKworCmRpZmYgLS1naXQgYS90L3Q5MjAwLWdpdC1jdnNleHBvcnRjb21taXQuc2ggYi90L3Q5MjAwLWdpdC1jdnNleHBvcnRjb21taXQuc2gKaW5kZXggNTZiN2MwNi4uZmMzNzk1ZCAxMDA3NTUKLS0tIGEvdC90OTIwMC1naXQtY3ZzZXhwb3J0Y29tbWl0LnNoCisrKyBiL3QvdDkyMDAtZ2l0LWN2c2V4cG9ydGNvbW1pdC5zaApAQCAtMjg4LDYgKzI4OCwyNyBAQAogCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlLWNvbW1pdCBhIHJlbW92ZWQgZmlsZW5hbWUgd2hpY2ggcmVtYWlucyBpbiBDVlMgYXR0aWMnICcKKworICAgIChjZCAiJENWU1dPUksiICYmCisgICAgIGVjaG8gPmF0dGljX2dyZW1saW4gJiYKKyAgICAgY3ZzIC1RIGFkZCBhdHRpY19ncmVtbGluICYmCisgICAgIGN2cyAtUSBjaSAtbSAiYWRkZWQgYXR0aWNfZ3JlbWxpbiIgJiYKKyAgICAgcm0gYXR0aWNfZ3JlbWxpbiAmJgorICAgICBjdnMgLVEgcm0gYXR0aWNfZ3JlbWxpbiAmJgorICAgICBjdnMgLVEgY2kgLW0gInJlbW92ZWQgYXR0aWNfZ3JlbWxpbiIpICYmCisKKyAgICBlY2hvID4gYXR0aWNfZ3JlbWxpbiAmJgorICAgIGdpdCBhZGQgYXR0aWNfZ3JlbWxpbiAmJgorICAgIGdpdCBjb21taXQgLW0gIkFkZGVkIGF0dGljX2dyZW1saW4iICYmCisJZ2l0IGN2c2V4cG9ydGNvbW1pdCAtdyAiJENWU1dPUksiIC1jIEhFQUQgJiYKKyAgICAoY2QgIiRDVlNXT1JLIjsgY3ZzIC1RIHVwZGF0ZSAtZCkgJiYKKyAgICB0ZXN0IC1mICIkQ1ZTV09SSy9hdHRpY19ncmVtbGluIgorJworCisjIHRoZSBzdGF0ZSBvZiB0aGUgQ1ZTIHNhbmRib3ggbWF5IGJlIGluZGV0ZXJtaW5hdGUgZm9yICcgc3BhY2UnCisjIGFmdGVyIHRoaXMgdGVzdCBvbiBzb21lIHBsYXRmb3JtcyAvIHdpdGggc29tZSB2ZXJzaW9ucyBvZiBDVlMKKyMgY29uc2lkZXIgYWRkaW5nIG5ldyB0ZXN0cyBhYm92ZSB0aGlzIHBvaW50CiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgYSBmaWxlIHdpdGggbGVhZGluZyBzcGFjZXMgaW4gdGhlIG5hbWUnICcKIAogCWVjaG8gc3BhY2UgPiAiIHNwYWNlIiAmJgpAQCAtMjk1LDcgKzMxNiw3IEBACiAJZ2l0IGNvbW1pdCAtbSAiQWRkIGEgZmlsZSB3aXRoIGEgbGVhZGluZyBzcGFjZSIgJiYKIAlpZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKIAlnaXQgY3ZzZXhwb3J0Y29tbWl0IC13ICIkQ1ZTV09SSyIgLWMgJGlkICYmCi0JY2hlY2tfZW50cmllcyAiJENWU1dPUksiICIgc3BhY2UvMS4xL3xEUy8xLjEvfHJlbGVhc2Utbm90ZXMvMS4yLyIgJiYKKwljaGVja19lbnRyaWVzICIkQ1ZTV09SSyIgIiBzcGFjZS8xLjEvfERTLzEuMS98YXR0aWNfZ3JlbWxpbi8xLjMvfHJlbGVhc2Utbm90ZXMvMS4yLyIgJiYKIAl0ZXN0X2NtcCAiJENWU1dPUksvIHNwYWNlIiAiIHNwYWNlIgogCiAnCmRpZmYgLS1naXQgYS90L3Q5MzAwLWZhc3QtaW1wb3J0LnNoIGIvdC90OTMwMC1mYXN0LWltcG9ydC5zaAppbmRleCA4MjFiZTdjLi4xMzFmMDMyIDEwMDc1NQotLS0gYS90L3Q5MzAwLWZhc3QtaW1wb3J0LnNoCisrKyBiL3QvdDkzMDAtZmFzdC1pbXBvcnQuc2gKQEAgLTEwODgsNCArMTA4OCw0OTggQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1A6IGZhaWwgb24gYmxvYiBtYXJrIGluIGdpdGxpbmsnICcKICAgICB0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPGlucHV0JwogCisjIyMKKyMjIyBzZXJpZXMgUSAobm90ZXMpCisjIyMKKworbm90ZTFfZGF0YT0iVGhlIGZpcnN0IG5vdGUgZm9yIHRoZSBmaXJzdCBjb21taXQiCitub3RlMl9kYXRhPSJUaGUgZmlyc3Qgbm90ZSBmb3IgdGhlIHNlY29uZCBjb21taXQiCitub3RlM19kYXRhPSJUaGUgZmlyc3Qgbm90ZSBmb3IgdGhlIHRoaXJkIGNvbW1pdCIKK25vdGUxYl9kYXRhPSJUaGUgc2Vjb25kIG5vdGUgZm9yIHRoZSBmaXJzdCBjb21taXQiCitub3RlMWNfZGF0YT0iVGhlIHRoaXJkIG5vdGUgZm9yIHRoZSBmaXJzdCBjb21taXQiCitub3RlMmJfZGF0YT0iVGhlIHNlY29uZCBub3RlIGZvciB0aGUgc2Vjb25kIGNvbW1pdCIKKwordGVzdF90aWNrCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitibG9iCittYXJrIDoyCitkYXRhIDw8RU9GCiskZmlsZTJfZGF0YQorRU9GCisKK2NvbW1pdCByZWZzL2hlYWRzL25vdGVzLXRlc3QKK21hcmsgOjMKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorZmlyc3QgKDozKQorQ09NTUlUCisKK00gNjQ0IDoyIGZpbGUyCisKK2Jsb2IKK21hcmsgOjQKK2RhdGEgJGZpbGU0X2xlbgorJGZpbGU0X2RhdGEKK2NvbW1pdCByZWZzL2hlYWRzL25vdGVzLXRlc3QKK21hcmsgOjUKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorc2Vjb25kICg6NSkKK0NPTU1JVAorCitNIDY0NCA6NCBmaWxlNAorCitjb21taXQgcmVmcy9oZWFkcy9ub3Rlcy10ZXN0CittYXJrIDo2Citjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK3RoaXJkICg6NikKK0NPTU1JVAorCitNIDY0NCBpbmxpbmUgZmlsZTUKK2RhdGEgPDxFT0YKKyRmaWxlNV9kYXRhCitFT0YKKworTSA3NTUgaW5saW5lIGZpbGU2CitkYXRhIDw8RU9GCiskZmlsZTZfZGF0YQorRU9GCisKK2Jsb2IKK21hcmsgOjcKK2RhdGEgPDxFT0YKKyRub3RlMV9kYXRhCitFT0YKKworYmxvYgorbWFyayA6OAorZGF0YSA8PEVPRgorJG5vdGUyX2RhdGEKK0VPRgorCitjb21taXQgcmVmcy9ub3Rlcy9mb29iYXIKK21hcmsgOjkKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorbm90ZXMgKDo5KQorQ09NTUlUCisKK04gOjcgOjMKK04gOjggOjUKK04gaW5saW5lIDo2CitkYXRhIDw8RU9GCiskbm90ZTNfZGF0YQorRU9GCisKK2NvbW1pdCByZWZzL25vdGVzL2Zvb2JhcgorbWFyayA6MTAKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorbm90ZXMgKDoxMCkKK0NPTU1JVAorCitOIGlubGluZSA6MworZGF0YSA8PEVPRgorJG5vdGUxYl9kYXRhCitFT0YKKworY29tbWl0IHJlZnMvbm90ZXMvZm9vYmFyMgorbWFyayA6MTEKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorbm90ZXMgKDoxMSkKK0NPTU1JVAorCitOIGlubGluZSA6MworZGF0YSA8PEVPRgorJG5vdGUxY19kYXRhCitFT0YKKworY29tbWl0IHJlZnMvbm90ZXMvZm9vYmFyCittYXJrIDoxMgorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitub3RlcyAoOjEyKQorQ09NTUlUCisKK2RlbGV0ZWFsbAorTiBpbmxpbmUgOjUKK2RhdGEgPDxFT0YKKyRub3RlMmJfZGF0YQorRU9GCisKK0lOUFVUX0VORAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUTogY29tbWl0IG5vdGVzJyBcCisJJ2dpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwkgZ2l0IHdoYXRjaGFuZ2VkIG5vdGVzLXRlc3QnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUTogdmVyaWZ5IHBhY2snIFwKKwknZm9yIHAgaW4gLmdpdC9vYmplY3RzL3BhY2svKi5wYWNrO2RvIGdpdCB2ZXJpZnktcGFjayAkcHx8ZXhpdDtkb25lJworCitjb21taXQxPSQoZ2l0IHJldi1wYXJzZSBub3Rlcy10ZXN0fjIpCitjb21taXQyPSQoZ2l0IHJldi1wYXJzZSBub3Rlcy10ZXN0XikKK2NvbW1pdDM9JChnaXQgcmV2LXBhcnNlIG5vdGVzLXRlc3QpCisKK2NhdCA+ZXhwZWN0IDw8RU9GCithdXRob3IgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCitmaXJzdCAoOjMpCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdROiB2ZXJpZnkgZmlyc3QgY29tbWl0JyBcCisJJ2dpdCBjYXQtZmlsZSBjb21taXQgbm90ZXMtdGVzdH4yIHwgc2VkIDFkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJworCitjYXQgPmV4cGVjdCA8PEVPRgorcGFyZW50ICRjb21taXQxCithdXRob3IgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCitzZWNvbmQgKDo1KQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUTogdmVyaWZ5IHNlY29uZCBjb21taXQnIFwKKwknZ2l0IGNhdC1maWxlIGNvbW1pdCBub3Rlcy10ZXN0XiB8IHNlZCAxZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKKworY2F0ID5leHBlY3QgPDxFT0YKK3BhcmVudCAkY29tbWl0MgorYXV0aG9yICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwordGhpcmQgKDo2KQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUTogdmVyaWZ5IHRoaXJkIGNvbW1pdCcgXAorCSdnaXQgY2F0LWZpbGUgY29tbWl0IG5vdGVzLXRlc3QgfCBzZWQgMWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCithdXRob3IgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCitub3RlcyAoOjkpCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdROiB2ZXJpZnkgZmlyc3Qgbm90ZXMgY29tbWl0JyBcCisJJ2dpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9ub3Rlcy9mb29iYXJ+MiB8IHNlZCAxZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKKworY2F0ID5leHBlY3QudW5zb3J0ZWQgPDxFT0YKKzEwMDY0NCBibG9iICRjb21taXQxCisxMDA2NDQgYmxvYiAkY29tbWl0MgorMTAwNjQ0IGJsb2IgJGNvbW1pdDMKK0VPRgorY2F0IGV4cGVjdC51bnNvcnRlZCB8IHNvcnQgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1E6IHZlcmlmeSBmaXJzdCBub3RlcyB0cmVlJyBcCisJJ2dpdCBjYXQtZmlsZSAtcCByZWZzL25vdGVzL2Zvb2Jhcn4yXnt0cmVlfSB8IHNlZCAicy8gWzAtOWEtZl0qCS8gLyIgPmFjdHVhbCAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJworCitlY2hvICIkbm90ZTFfZGF0YSIgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1E6IHZlcmlmeSBmaXJzdCBub3RlIGZvciBmaXJzdCBjb21taXQnIFwKKwknZ2l0IGNhdC1maWxlIGJsb2IgcmVmcy9ub3Rlcy9mb29iYXJ+MjokY29tbWl0MSA+YWN0dWFsICYmIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK2VjaG8gIiRub3RlMl9kYXRhIiA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUTogdmVyaWZ5IGZpcnN0IG5vdGUgZm9yIHNlY29uZCBjb21taXQnIFwKKwknZ2l0IGNhdC1maWxlIGJsb2IgcmVmcy9ub3Rlcy9mb29iYXJ+MjokY29tbWl0MiA+YWN0dWFsICYmIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK2VjaG8gIiRub3RlM19kYXRhIiA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUTogdmVyaWZ5IGZpcnN0IG5vdGUgZm9yIHRoaXJkIGNvbW1pdCcgXAorCSdnaXQgY2F0LWZpbGUgYmxvYiByZWZzL25vdGVzL2Zvb2Jhcn4yOiRjb21taXQzID5hY3R1YWwgJiYgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKKworY2F0ID5leHBlY3QgPDxFT0YKK3BhcmVudCBgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL25vdGVzL2Zvb2Jhcn4yYAorYXV0aG9yICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKworbm90ZXMgKDoxMCkKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1E6IHZlcmlmeSBzZWNvbmQgbm90ZXMgY29tbWl0JyBcCisJJ2dpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9ub3Rlcy9mb29iYXJeIHwgc2VkIDFkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJworCitjYXQgPmV4cGVjdC51bnNvcnRlZCA8PEVPRgorMTAwNjQ0IGJsb2IgJGNvbW1pdDEKKzEwMDY0NCBibG9iICRjb21taXQyCisxMDA2NDQgYmxvYiAkY29tbWl0MworRU9GCitjYXQgZXhwZWN0LnVuc29ydGVkIHwgc29ydCA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUTogdmVyaWZ5IHNlY29uZCBub3RlcyB0cmVlJyBcCisJJ2dpdCBjYXQtZmlsZSAtcCByZWZzL25vdGVzL2Zvb2Jhcl5ee3RyZWV9IHwgc2VkICJzLyBbMC05YS1mXSoJLyAvIiA+YWN0dWFsICYmCisJIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK2VjaG8gIiRub3RlMWJfZGF0YSIgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1E6IHZlcmlmeSBzZWNvbmQgbm90ZSBmb3IgZmlyc3QgY29tbWl0JyBcCisJJ2dpdCBjYXQtZmlsZSBibG9iIHJlZnMvbm90ZXMvZm9vYmFyXjokY29tbWl0MSA+YWN0dWFsICYmIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK2VjaG8gIiRub3RlMl9kYXRhIiA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUTogdmVyaWZ5IGZpcnN0IG5vdGUgZm9yIHNlY29uZCBjb21taXQnIFwKKwknZ2l0IGNhdC1maWxlIGJsb2IgcmVmcy9ub3Rlcy9mb29iYXJeOiRjb21taXQyID5hY3R1YWwgJiYgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKKworZWNobyAiJG5vdGUzX2RhdGEiID5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdROiB2ZXJpZnkgZmlyc3Qgbm90ZSBmb3IgdGhpcmQgY29tbWl0JyBcCisJJ2dpdCBjYXQtZmlsZSBibG9iIHJlZnMvbm90ZXMvZm9vYmFyXjokY29tbWl0MyA+YWN0dWFsICYmIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCithdXRob3IgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCitub3RlcyAoOjExKQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUTogdmVyaWZ5IHRoaXJkIG5vdGVzIGNvbW1pdCcgXAorCSdnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvbm90ZXMvZm9vYmFyMiB8IHNlZCAxZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKKworY2F0ID5leHBlY3QudW5zb3J0ZWQgPDxFT0YKKzEwMDY0NCBibG9iICRjb21taXQxCitFT0YKK2NhdCBleHBlY3QudW5zb3J0ZWQgfCBzb3J0ID5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdROiB2ZXJpZnkgdGhpcmQgbm90ZXMgdHJlZScgXAorCSdnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9mb29iYXIyXnt0cmVlfSB8IHNlZCAicy8gWzAtOWEtZl0qCS8gLyIgPmFjdHVhbCAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJworCitlY2hvICIkbm90ZTFjX2RhdGEiID5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdROiB2ZXJpZnkgdGhpcmQgbm90ZSBmb3IgZmlyc3QgY29tbWl0JyBcCisJJ2dpdCBjYXQtZmlsZSBibG9iIHJlZnMvbm90ZXMvZm9vYmFyMjokY29tbWl0MSA+YWN0dWFsICYmIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCitwYXJlbnQgYGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9ub3Rlcy9mb29iYXJeYAorYXV0aG9yICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKworbm90ZXMgKDoxMikKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1E6IHZlcmlmeSBmb3VydGggbm90ZXMgY29tbWl0JyBcCisJJ2dpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9ub3Rlcy9mb29iYXIgfCBzZWQgMWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK2NhdCA+ZXhwZWN0LnVuc29ydGVkIDw8RU9GCisxMDA2NDQgYmxvYiAkY29tbWl0MgorRU9GCitjYXQgZXhwZWN0LnVuc29ydGVkIHwgc29ydCA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUTogdmVyaWZ5IGZvdXJ0aCBub3RlcyB0cmVlJyBcCisJJ2dpdCBjYXQtZmlsZSAtcCByZWZzL25vdGVzL2Zvb2Jhcl57dHJlZX0gfCBzZWQgInMvIFswLTlhLWZdKgkvIC8iID5hY3R1YWwgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKKworZWNobyAiJG5vdGUyYl9kYXRhIiA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUTogdmVyaWZ5IHNlY29uZCBub3RlIGZvciBzZWNvbmQgY29tbWl0JyBcCisJJ2dpdCBjYXQtZmlsZSBibG9iIHJlZnMvbm90ZXMvZm9vYmFyOiRjb21taXQyID5hY3R1YWwgJiYgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKKworIyMjCisjIyMgc2VyaWVzIFIgKGZlYXR1cmUgYW5kIG9wdGlvbikKKyMjIworCitjYXQgPmlucHV0IDw8RU9GCitmZWF0dXJlIG5vLXN1Y2gtZmVhdHVyZS1leGlzdHMKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBhYm9ydCBvbiB1bnN1cHBvcnRlZCBmZWF0dXJlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworCitjYXQgPmlucHV0IDw8RU9GCitmZWF0dXJlIGRhdGUtZm9ybWF0PW5vdworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IHN1cHBvcnRlZCBmZWF0dXJlIGlzIGFjY2VwdGVkJyAnCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworCitjYXQgPmlucHV0IDw8IEVPRgorYmxvYgorZGF0YSAzCitoaQorZmVhdHVyZSBkYXRlLWZvcm1hdD1ub3cKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBhYm9ydCBvbiByZWNlaXZpbmcgZmVhdHVyZSBhZnRlciBkYXRhIGNvbW1hbmQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPGlucHV0CisnCisKK2NhdCA+aW5wdXQgPDwgRU9GCitmZWF0dXJlIGltcG9ydC1tYXJrcz1naXQubWFya3MKK2ZlYXR1cmUgaW1wb3J0LW1hcmtzPWdpdDIubWFya3MKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBvbmx5IG9uZSBpbXBvcnQtbWFya3MgZmVhdHVyZSBhbGxvd2VkIHBlciBzdHJlYW0nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPGlucHV0CisnCisKK2NhdCA+aW5wdXQgPDwgRU9GCitmZWF0dXJlIGV4cG9ydC1tYXJrcz1naXQubWFya3MKK2Jsb2IKK21hcmsgOjEKK2RhdGEgMworaGkKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdSOiBleHBvcnQtbWFya3MgZmVhdHVyZSByZXN1bHRzIGluIGEgbWFya3MgZmlsZSBiZWluZyBjcmVhdGVkJyBcCisgICAgJ2NhdCBpbnB1dCB8IGdpdCBmYXN0LWltcG9ydCAmJgorICAgIGdyZXAgOjEgZ2l0Lm1hcmtzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnUjogZXhwb3J0LW1hcmtzIG9wdGlvbnMgY2FuIGJlIG92ZXJyaWRlbiBieSBjb21tYW5kbGluZSBvcHRpb25zJyBcCisgICAgJ2NhdCBpbnB1dCB8IGdpdCBmYXN0LWltcG9ydCAtLWV4cG9ydC1tYXJrcz1vdGhlci5tYXJrcyAmJgorICAgIGdyZXAgOjEgb3RoZXIubWFya3MnCisKK2NhdCA+aW5wdXQgPDwgRU9GCitmZWF0dXJlIGltcG9ydC1tYXJrcz1tYXJrcy5vdXQKK2ZlYXR1cmUgZXhwb3J0LW1hcmtzPW1hcmtzLm5ldworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdSOiBpbXBvcnQgdG8gb3V0cHV0IG1hcmtzIHdvcmtzIHdpdGhvdXQgYW55IGNvbnRlbnQnIFwKKyAgICAnY2F0IGlucHV0IHwgZ2l0IGZhc3QtaW1wb3J0ICYmCisgICAgdGVzdF9jbXAgbWFya3Mub3V0IG1hcmtzLm5ldycKKworY2F0ID5pbnB1dCA8PEVPRgorZmVhdHVyZSBpbXBvcnQtbWFya3M9bm9uZXhpc3RhbnQubWFya3MKK2ZlYXR1cmUgZXhwb3J0LW1hcmtzPW1hcmtzLm5ldworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdSOiBpbXBvcnQgbWFya3MgcHJlZmVycyBjb21tYW5kbGluZSBtYXJrcyBmaWxlIG92ZXIgdGhlIHN0cmVhbScgXAorICAgICdjYXQgaW5wdXQgfCBnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3M9bWFya3Mub3V0ICYmCisgICAgdGVzdF9jbXAgbWFya3Mub3V0IG1hcmtzLm5ldycKKworCitjYXQgPmlucHV0IDw8RU9GCitmZWF0dXJlIGltcG9ydC1tYXJrcz1ub25leGlzdGFudC5tYXJrcworZmVhdHVyZSBleHBvcnQtbWFya3M9Y29tYmluZWQubWFya3MKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBtdWx0aXBsZSAtLWltcG9ydC1tYXJrcz0gc2hvdWxkIGJlIGhvbm91cmVkJyAnCisgICAgaGVhZCAtbjIgbWFya3Mub3V0ID4gb25lLm1hcmtzICYmCisgICAgdGFpbCAtbiArMyBtYXJrcy5vdXQgPiB0d28ubWFya3MgJiYKKyAgICBnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3M9b25lLm1hcmtzIC0taW1wb3J0LW1hcmtzPXR3by5tYXJrcyA8aW5wdXQgJiYKKyAgICB0ZXN0X2NtcCBtYXJrcy5vdXQgY29tYmluZWQubWFya3MKKycKKworY2F0ID5pbnB1dCA8PEVPRgorZmVhdHVyZSByZWxhdGl2ZS1tYXJrcworZmVhdHVyZSBpbXBvcnQtbWFya3M9cmVsYXRpdmUuaW4KK2ZlYXR1cmUgZXhwb3J0LW1hcmtzPXJlbGF0aXZlLm91dAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IGZlYXR1cmUgcmVsYXRpdmUtbWFya3Mgc2hvdWxkIGJlIGhvbm91cmVkJyAnCisgICAgbWtkaXIgLXAgLmdpdC9pbmZvL2Zhc3QtaW1wb3J0LyAmJgorICAgIGNwIG1hcmtzLm5ldyAuZ2l0L2luZm8vZmFzdC1pbXBvcnQvcmVsYXRpdmUuaW4gJiYKKyAgICBnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisgICAgdGVzdF9jbXAgbWFya3MubmV3IC5naXQvaW5mby9mYXN0LWltcG9ydC9yZWxhdGl2ZS5vdXQKKycKKworY2F0ID5pbnB1dCA8PEVPRgorZmVhdHVyZSByZWxhdGl2ZS1tYXJrcworZmVhdHVyZSBpbXBvcnQtbWFya3M9cmVsYXRpdmUuaW4KK2ZlYXR1cmUgbm8tcmVsYXRpdmUtbWFya3MKK2ZlYXR1cmUgZXhwb3J0LW1hcmtzPW5vbi1yZWxhdGl2ZS5vdXQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBmZWF0dXJlIG5vLXJlbGF0aXZlLW1hcmtzIHNob3VsZCBiZSBob25vdXJlZCcgJworICAgIGdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKyAgICB0ZXN0X2NtcCBtYXJrcy5uZXcgbm9uLXJlbGF0aXZlLm91dAorJworCitjYXQgPmlucHV0IDw8IEVPRgorb3B0aW9uIGdpdCBxdWlldAorYmxvYgorZGF0YSAzCitoaQorCitFT0YKKwordG91Y2ggZW1wdHkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogcXVpZXQgb3B0aW9uIHJlc3VsdHMgaW4gbm8gc3RhdHMgYmVpbmcgb3V0cHV0JyAnCisgICAgY2F0IGlucHV0IHwgZ2l0IGZhc3QtaW1wb3J0IDI+IG91dHB1dCAmJgorICAgIHRlc3RfY21wIGVtcHR5IG91dHB1dAorJworCitjYXQgPmlucHV0IDw8RU9GCitvcHRpb24gZ2l0IG5vbi1leGlzdGluZy1vcHRpb24KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBkaWUgb24gdW5rbm93biBvcHRpb24nICcKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPGlucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IHVua25vd24gY29tbWFuZGxpbmUgb3B0aW9ucyBhcmUgcmVqZWN0ZWQnICdcCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0tbm9uLWV4aXN0aW5nLW9wdGlvbiA8IC9kZXYvbnVsbAorJworCitjYXQgPmlucHV0IDw8RU9GCitvcHRpb24gbm9uLWV4aXN0aW5nLXZjcyBub24tZXhpc3Rpbmctb3B0aW9uCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogaWdub3JlIG5vbi1naXQgb3B0aW9ucycgJworICAgIGdpdCBmYXN0LWltcG9ydCA8aW5wdXQKKycKKworIyMKKyMjIFI6IHZlcnkgbGFyZ2UgYmxvYnMKKyMjCitibG9ic2l6ZT0kKCgyKjEwMjQqMTAyNCArIDUzKSkKK3Rlc3QtZ2VucmFuZG9tIGJhciAkYmxvYnNpemUgPmV4cGVjdAorY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvYmlnLWZpbGUKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorUiAtIGJpZyBmaWxlCitDT01NSVQKKworTSA2NDQgaW5saW5lIGJpZzEKK2RhdGEgJGJsb2JzaXplCitJTlBVVF9FTkQKK2NhdCBleHBlY3QgPj5pbnB1dAorY2F0ID4+aW5wdXQgPDxJTlBVVF9FTkQKK00gNjQ0IGlubGluZSBiaWcyCitkYXRhICRibG9ic2l6ZQorSU5QVVRfRU5ECitjYXQgZXhwZWN0ID4+aW5wdXQKK2VjaG8gPj5pbnB1dAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUjogYmxvYiBiaWdnZXIgdGhhbiB0aHJlc2hvbGQnIFwKKwkndGVzdF9jcmVhdGVfcmVwbyBSICYmCisJIGdpdCAtLWdpdC1kaXI9Ui8uZ2l0IGZhc3QtaW1wb3J0IC0tYmlnLWZpbGUtdGhyZXNob2xkPTEgPGlucHV0JwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1I6IHZlcmlmeSBjcmVhdGVkIHBhY2snIFwKKwknOiA+dmVyaWZ5ICYmCisJIGZvciBwIGluIFIvLmdpdC9vYmplY3RzL3BhY2svKi5wYWNrOworCSBkbworCSAgIGdpdCB2ZXJpZnktcGFjayAtdiAkcCA+PnZlcmlmeSB8fCBleGl0OworCSBkb25lJwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1I6IHZlcmlmeSB3cml0dGVuIG9iamVjdHMnIFwKKwknZ2l0IC0tZ2l0LWRpcj1SLy5naXQgY2F0LWZpbGUgYmxvYiBiaWctZmlsZTpiaWcxID5hY3R1YWwgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCSBhPSQoZ2l0IC0tZ2l0LWRpcj1SLy5naXQgcmV2LXBhcnNlIGJpZy1maWxlOmJpZzEpICYmCisJIGI9JChnaXQgLS1naXQtZGlyPVIvLmdpdCByZXYtcGFyc2UgYmlnLWZpbGU6YmlnMikgJiYKKwkgdGVzdCAkYSA9ICRiJwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1I6IGJsb2IgYXBwZWFycyBvbmx5IG9uY2UnIFwKKwknbj0kKGdyZXAgJGEgdmVyaWZ5IHwgd2MgLWwpICYmCisJIHRlc3QgMSA9ICRuJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkzMDEtZmFzdC1pbXBvcnQtbm90ZXMuc2ggYi90L3Q5MzAxLWZhc3QtaW1wb3J0LW5vdGVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE1Yzk5ZDgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MzAxLWZhc3QtaW1wb3J0LW5vdGVzLnNoCkBAIC0wLDAgKzEsNjIzIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEpvaGFuIEhlcmxhbmQKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBnaXQgZmFzdC1pbXBvcnQgb2Ygbm90ZXMgb2JqZWN0cycKKy4gLi90ZXN0LWxpYi5zaAorCisKK3Rlc3RfdGljaworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvbWFzdGVyCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2ZpcnN0IGNvbW1pdAorQ09NTUlUCisKK00gNjQ0IGlubGluZSBmb28KK2RhdGEgPDxFT0YKK2ZpbGUgZm9vIGluIGZpcnN0IGNvbW1pdAorRU9GCisKK00gNzU1IGlubGluZSBiYXIKK2RhdGEgPDxFT0YKK2ZpbGUgYmFyIGluIGZpcnN0IGNvbW1pdAorRU9GCisKK00gNjQ0IGlubGluZSBiYXoveHl6enkKK2RhdGEgPDxFT0YKK2ZpbGUgYmF6L3h5enp5IGluIGZpcnN0IGNvbW1pdAorRU9GCisKK2NvbW1pdCByZWZzL2hlYWRzL21hc3RlcgorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitzZWNvbmQgY29tbWl0CitDT01NSVQKKworTSA2NDQgaW5saW5lIGZvbworZGF0YSA8PEVPRgorZmlsZSBmb28gaW4gc2Vjb25kIGNvbW1pdAorRU9GCisKK00gNzU1IGlubGluZSBiYXoveHl6enkKK2RhdGEgPDxFT0YKK2ZpbGUgYmF6L3h5enp5IGluIHNlY29uZCBjb21taXQKK0VPRgorCitjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAordGhpcmQgY29tbWl0CitDT01NSVQKKworTSA2NDQgaW5saW5lIGZvbworZGF0YSA8PEVPRgorZmlsZSBmb28gaW4gdGhpcmQgY29tbWl0CitFT0YKKworY29tbWl0IHJlZnMvaGVhZHMvbWFzdGVyCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2ZvdXJ0aCBjb21taXQKK0NPTU1JVAorCitNIDc1NSBpbmxpbmUgYmFyCitkYXRhIDw8RU9GCitmaWxlIGJhciBpbiBmb3VydGggY29tbWl0CitFT0YKKworSU5QVVRfRU5ECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBtYXN0ZXIgYnJhbmNoJyAnCisKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJZ2l0IHdoYXRjaGFuZ2VkIG1hc3RlcgorJworCitjb21taXQ0PSQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL21hc3RlcikKK2NvbW1pdDM9JChnaXQgcmV2LXBhcnNlICIkY29tbWl0NF4iKQorY29tbWl0Mj0kKGdpdCByZXYtcGFyc2UgIiRjb21taXQ0fjIiKQorY29tbWl0MT0kKGdpdCByZXYtcGFyc2UgIiRjb21taXQ0fjMiKQorCit0ZXN0X3RpY2sKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL25vdGVzL3Rlc3QKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorZmlyc3Qgbm90ZXMgY29tbWl0CitDT01NSVQKKworTSA2NDQgaW5saW5lICRjb21taXQxCitkYXRhIDw8RU9GCitmaXJzdCBub3RlIGZvciBmaXJzdCBjb21taXQKK0VPRgorCitNIDc1NSBpbmxpbmUgJGNvbW1pdDIKK2RhdGEgPDxFT0YKK2ZpcnN0IG5vdGUgZm9yIHNlY29uZCBjb21taXQKK0VPRgorCitJTlBVVF9FTkQKKworY2F0ID5leHBlY3QgPDxFWFBFQ1RfRU5ECisgICAgZm91cnRoIGNvbW1pdAorICAgIHRoaXJkIGNvbW1pdAorICAgIHNlY29uZCBjb21taXQKKyAgICBmaXJzdCBub3RlIGZvciBzZWNvbmQgY29tbWl0CisgICAgZmlyc3QgY29tbWl0CisgICAgZmlyc3Qgbm90ZSBmb3IgZmlyc3QgY29tbWl0CitFWFBFQ1RfRU5ECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBub3RlcyB3aXRoIHNpbXBsZSBNIGNvbW1hbmQnICcKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvdGVzdCBnaXQgbG9nIHwgZ3JlcCAiXiAgICAiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfdGljaworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvbm90ZXMvdGVzdAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitzZWNvbmQgbm90ZXMgY29tbWl0CitDT01NSVQKKworZnJvbSByZWZzL25vdGVzL3Rlc3ReMAorTiBpbmxpbmUgJGNvbW1pdDMKK2RhdGEgPDxFT0YKK2ZpcnN0IG5vdGUgZm9yIHRoaXJkIGNvbW1pdAorRU9GCisKK04gaW5saW5lICRjb21taXQ0CitkYXRhIDw8RU9GCitmaXJzdCBub3RlIGZvciBmb3VydGggY29tbWl0CitFT0YKKworSU5QVVRfRU5ECisKK2NhdCA+ZXhwZWN0IDw8RVhQRUNUX0VORAorICAgIGZvdXJ0aCBjb21taXQKKyAgICBmaXJzdCBub3RlIGZvciBmb3VydGggY29tbWl0CisgICAgdGhpcmQgY29tbWl0CisgICAgZmlyc3Qgbm90ZSBmb3IgdGhpcmQgY29tbWl0CisgICAgc2Vjb25kIGNvbW1pdAorICAgIGZpcnN0IG5vdGUgZm9yIHNlY29uZCBjb21taXQKKyAgICBmaXJzdCBjb21taXQKKyAgICBmaXJzdCBub3RlIGZvciBmaXJzdCBjb21taXQKK0VYUEVDVF9FTkQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIG5vdGVzIHdpdGggc2ltcGxlIE4gY29tbWFuZCcgJworCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCUdJVF9OT1RFU19SRUY9cmVmcy9ub3Rlcy90ZXN0IGdpdCBsb2cgfCBncmVwICJeICAgICIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF90aWNrCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9ub3Rlcy90ZXN0Citjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK3RoaXJkIG5vdGVzIGNvbW1pdAorQ09NTUlUCisKK2Zyb20gcmVmcy9ub3Rlcy90ZXN0XjAKK04gaW5saW5lICRjb21taXQxCitkYXRhIDw8RU9GCitzZWNvbmQgbm90ZSBmb3IgZmlyc3QgY29tbWl0CitFT0YKKworTiBpbmxpbmUgJGNvbW1pdDIKK2RhdGEgPDxFT0YKK3NlY29uZCBub3RlIGZvciBzZWNvbmQgY29tbWl0CitFT0YKKworTiBpbmxpbmUgJGNvbW1pdDMKK2RhdGEgPDxFT0YKK3NlY29uZCBub3RlIGZvciB0aGlyZCBjb21taXQKK0VPRgorCitOIGlubGluZSAkY29tbWl0NAorZGF0YSA8PEVPRgorc2Vjb25kIG5vdGUgZm9yIGZvdXJ0aCBjb21taXQKK0VPRgorCitJTlBVVF9FTkQKKworY2F0ID5leHBlY3QgPDxFWFBFQ1RfRU5ECisgICAgZm91cnRoIGNvbW1pdAorICAgIHNlY29uZCBub3RlIGZvciBmb3VydGggY29tbWl0CisgICAgdGhpcmQgY29tbWl0CisgICAgc2Vjb25kIG5vdGUgZm9yIHRoaXJkIGNvbW1pdAorICAgIHNlY29uZCBjb21taXQKKyAgICBzZWNvbmQgbm90ZSBmb3Igc2Vjb25kIGNvbW1pdAorICAgIGZpcnN0IGNvbW1pdAorICAgIHNlY29uZCBub3RlIGZvciBmaXJzdCBjb21taXQKK0VYUEVDVF9FTkQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGV4aXN0aW5nIG5vdGVzIHdpdGggTiBjb21tYW5kJyAnCisKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJR0lUX05PVEVTX1JFRj1yZWZzL25vdGVzL3Rlc3QgZ2l0IGxvZyB8IGdyZXAgIl4gICAgIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X3RpY2sKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL25vdGVzL3Rlc3QKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorZm91cnRoIG5vdGVzIGNvbW1pdAorQ09NTUlUCisKK2Zyb20gcmVmcy9ub3Rlcy90ZXN0XjAKK00gNjQ0IGlubGluZSAkKGVjaG8gIiRjb21taXQzIiB8IHNlZCAic3xeLi58Ji98IikKK2RhdGEgPDxFT0YKK3ByZWZpeCBvZiBub3RlIGZvciB0aGlyZCBjb21taXQKK0VPRgorCitNIDY0NCBpbmxpbmUgJChlY2hvICIkY29tbWl0NCIgfCBzZWQgInN8Xi4ufCYvfCIpCitkYXRhIDw8RU9GCitwcmVmaXggb2Ygbm90ZSBmb3IgZm91cnRoIGNvbW1pdAorRU9GCisKK00gNjQ0IGlubGluZSAkKGVjaG8gIiRjb21taXQ0IiB8IHNlZCAic3xeXCguLlwpXCguLlwpfFwxL1wyL3wiKQorZGF0YSA8PEVPRgorcHJlLXByZWZpeCBvZiBub3RlIGZvciBmb3VydGggY29tbWl0CitFT0YKKworTiBpbmxpbmUgJGNvbW1pdDEKK2RhdGEgPDxFT0YKK3RoaXJkIG5vdGUgZm9yIGZpcnN0IGNvbW1pdAorRU9GCisKK04gaW5saW5lICRjb21taXQyCitkYXRhIDw8RU9GCit0aGlyZCBub3RlIGZvciBzZWNvbmQgY29tbWl0CitFT0YKKworTiBpbmxpbmUgJGNvbW1pdDMKK2RhdGEgPDxFT0YKK3RoaXJkIG5vdGUgZm9yIHRoaXJkIGNvbW1pdAorRU9GCisKK04gaW5saW5lICRjb21taXQ0CitkYXRhIDw8RU9GCit0aGlyZCBub3RlIGZvciBmb3VydGggY29tbWl0CitFT0YKKworCitJTlBVVF9FTkQKKworY2F0ID5leHBlY3QgPDxFWFBFQ1RfRU5ECisgICAgZm91cnRoIGNvbW1pdAorICAgIHByZS1wcmVmaXggb2Ygbm90ZSBmb3IgZm91cnRoIGNvbW1pdAorICAgIHByZWZpeCBvZiBub3RlIGZvciBmb3VydGggY29tbWl0CisgICAgdGhpcmQgbm90ZSBmb3IgZm91cnRoIGNvbW1pdAorICAgIHRoaXJkIGNvbW1pdAorICAgIHByZWZpeCBvZiBub3RlIGZvciB0aGlyZCBjb21taXQKKyAgICB0aGlyZCBub3RlIGZvciB0aGlyZCBjb21taXQKKyAgICBzZWNvbmQgY29tbWl0CisgICAgdGhpcmQgbm90ZSBmb3Igc2Vjb25kIGNvbW1pdAorICAgIGZpcnN0IGNvbW1pdAorICAgIHRoaXJkIG5vdGUgZm9yIGZpcnN0IGNvbW1pdAorRVhQRUNUX0VORAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgY29uY2F0ZW50YXRpb24gbm90ZXMgd2l0aCBNIGNvbW1hbmQnICcKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvdGVzdCBnaXQgbG9nIHwgZ3JlcCAiXiAgICAiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfdGljaworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvbm90ZXMvdGVzdAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitmaWZ0aCBub3RlcyBjb21taXQKK0NPTU1JVAorCitmcm9tIHJlZnMvbm90ZXMvdGVzdF4wCitkZWxldGVhbGwKKworSU5QVVRfRU5ECisKK2NhdCA+ZXhwZWN0IDw8RVhQRUNUX0VORAorICAgIGZvdXJ0aCBjb21taXQKKyAgICB0aGlyZCBjb21taXQKKyAgICBzZWNvbmQgY29tbWl0CisgICAgZmlyc3QgY29tbWl0CitFWFBFQ1RfRU5ECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB0aGF0IGRlbGV0ZWFsbCBhbHNvIHJlbW92ZXMgbm90ZXMnICcKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvdGVzdCBnaXQgbG9nIHwgZ3JlcCAiXiAgICAiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfdGljaworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvbm90ZXMvdGVzdAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitzaXh0aCBub3RlcyBjb21taXQKK0NPTU1JVAorCitmcm9tIHJlZnMvbm90ZXMvdGVzdF4wCitNIDY0NCBpbmxpbmUgJGNvbW1pdDEKK2RhdGEgPDxFT0YKK3RoaXJkIG5vdGUgZm9yIGZpcnN0IGNvbW1pdAorRU9GCisKK00gNjQ0IGlubGluZSAkY29tbWl0MworZGF0YSA8PEVPRgordGhpcmQgbm90ZSBmb3IgdGhpcmQgY29tbWl0CitFT0YKKworTiBpbmxpbmUgJGNvbW1pdDEKK2RhdGEgPDxFT0YKK2ZvdXJ0aCBub3RlIGZvciBmaXJzdCBjb21taXQKK0VPRgorCitOIGlubGluZSAkY29tbWl0MworZGF0YSA8PEVPRgorZm91cnRoIG5vdGUgZm9yIHRoaXJkIGNvbW1pdAorRU9GCisKK0lOUFVUX0VORAorCitjYXQgPmV4cGVjdCA8PEVYUEVDVF9FTkQKKyAgICBmb3VydGggY29tbWl0CisgICAgdGhpcmQgY29tbWl0CisgICAgZm91cnRoIG5vdGUgZm9yIHRoaXJkIGNvbW1pdAorICAgIHNlY29uZCBjb21taXQKKyAgICBmaXJzdCBjb21taXQKKyAgICBmb3VydGggbm90ZSBmb3IgZmlyc3QgY29tbWl0CitFWFBFQ1RfRU5ECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB0aGF0IGxhdGVyIE4gY29tbWFuZHMgb3ZlcnJpZGUgZWFybGllciBNIGNvbW1hbmRzJyAnCisKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJR0lUX05PVEVTX1JFRj1yZWZzL25vdGVzL3Rlc3QgZ2l0IGxvZyB8IGdyZXAgIl4gICAgIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCisjIFdyaXRlIGZhc3QtaW1wb3J0IGNvbW1hbmRzIHRvIGNyZWF0ZSB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGNvbW1pdHMKK2Zhc3RfaW1wb3J0X2NvbW1pdHMgKCkgeworCW15X3JlZj0kMQorCW15X251bV9jb21taXRzPSQyCisJbXlfYXBwZW5kX3RvX2ZpbGU9JDMKKwlteV9pPTAKKwl3aGlsZSB0ZXN0ICRteV9pIC1sdCAkbXlfbnVtX2NvbW1pdHMKKwlkbworCQlteV9pPSQoKCRteV9pICsgMSkpCisJCXRlc3RfdGljaworCQljYXQgPj4iJG15X2FwcGVuZF90b19maWxlIiA8PElOUFVUX0VORAorY29tbWl0ICRteV9yZWYKK21hcmsgOiRteV9pCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2NvbW1pdCAjJG15X2kKK0NPTU1JVAorCitNIDY0NCBpbmxpbmUgZmlsZQorZGF0YSA8PEVPRgorZmlsZSBjb250ZW50cyBpbiBjb21taXQgIyRteV9pCitFT0YKKworSU5QVVRfRU5ECisJZG9uZQorfQorCisjIFdyaXRlIGZhc3QtaW1wb3J0IGNvbW1hbmRzIHRvIGNyZWF0ZSB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG5vdGVzIGFubm90YXRpbmcKKyMgdGhlIGNvbW1pdHMgY3JlYXRlZCBieSBmYXN0X2ltcG9ydF9jb21taXRzKCkKK2Zhc3RfaW1wb3J0X25vdGVzICgpIHsKKwlteV9ub3Rlc19yZWY9JDEKKwlteV9udW1fY29tbWl0cz0kMgorCW15X2FwcGVuZF90b19maWxlPSQzCisJbXlfbm90ZV9hcHBlbmQ9JDQKKwl0ZXN0X3RpY2sKKwljYXQgPj4iJG15X2FwcGVuZF90b19maWxlIiA8PElOUFVUX0VORAorY29tbWl0ICRteV9ub3Rlc19yZWYKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorY29tbWl0dGluZyAkbXlfbnVtX2NvbW1pdHMgbm90ZXMKK0NPTU1JVAorCitJTlBVVF9FTkQKKworCW15X2k9MAorCXdoaWxlIHRlc3QgJG15X2kgLWx0ICRteV9udW1fY29tbWl0cworCWRvCisJCW15X2k9JCgoJG15X2kgKyAxKSkKKwkJY2F0ID4+IiRteV9hcHBlbmRfdG9fZmlsZSIgPDxJTlBVVF9FTkQKK04gaW5saW5lIDokbXlfaQorZGF0YSA8PEVPRgorbm90ZSBmb3IgY29tbWl0ICMkbXlfaSRteV9ub3RlX2FwcGVuZAorRU9GCisKK0lOUFVUX0VORAorCWRvbmUKK30KKworCitybSBpbnB1dCBleHBlY3QKK251bV9jb21taXRzPTQwMAorIyBDcmVhdGUgbG90cyBvZiBjb21taXRzCitmYXN0X2ltcG9ydF9jb21taXRzICJyZWZzL2hlYWRzL21hbnlfY29tbWl0cyIgJG51bV9jb21taXRzIGlucHV0CisjIENyZWF0ZSBvbmUgbm90ZSBwZXIgYWJvdmUgY29tbWl0CitmYXN0X2ltcG9ydF9ub3RlcyAicmVmcy9ub3Rlcy9tYW55X25vdGVzIiAkbnVtX2NvbW1pdHMgaW5wdXQKKyMgQWRkIGEgY291cGxlIG9mIG5vbi1ub3RlcyBhcyB3ZWxsCit0ZXN0X3RpY2sKK2NhdCA+PmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9ub3Rlcy9tYW55X25vdGVzCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2NvbW1pdHRpbmcgc29tZSBub24tbm90ZXMgdG8gdGhlIG5vdGVzIHRyZWUKK0NPTU1JVAorCitNIDc1NSBpbmxpbmUgZm9vYmFyL25vbi1ub3RlLnR4dAorZGF0YSA8PEVPRgorVGhpcyBpcyBub3QgYSBub3RlLCBidXQgcmF0aGVyIGEgcmVndWxhciBmaWxlIHJlc2lkaW5nIGluIGEgbm90ZXMgdHJlZQorRU9GCisKK00gNjQ0IGlubGluZSBkZWFkYmVlZgorZGF0YSA8PEVPRgorTm9uLW5vdGUgZmlsZQorRU9GCisKK00gNjQ0IGlubGluZSBkZS9hZGJlZWYKK2RhdGEgPDxFT0YKK0Fub3RoZXIgbm9uLW5vdGUgZmlsZQorRU9GCisKK0lOUFVUX0VORAorIyBGaW5hbGx5IGNyZWF0ZSB0aGUgZXhwZWN0ZWQgb3V0cHV0IGZyb20gYWxsIHRoZXNlIG5vdGVzIGFuZCBjb21taXRzCitpPSRudW1fY29tbWl0cword2hpbGUgdGVzdCAkaSAtZ3QgMAorZG8KKwljYXQgPj5leHBlY3QgPDxFWFBFQ1RfRU5ECisgICAgY29tbWl0ICMkaQorICAgIG5vdGUgZm9yIGNvbW1pdCAjJGkKK0VYUEVDVF9FTkQKKwlpPSQoKCRpIC0gMSkpCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBsb3RzIG9mIGNvbW1pdHMgYW5kIG5vdGVzJyAnCisKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJR0lUX05PVEVTX1JFRj1yZWZzL25vdGVzL21hbnlfbm90ZXMgZ2l0IGxvZyByZWZzL2hlYWRzL21hbnlfY29tbWl0cyB8CisJICAgIGdyZXAgIl4gICAgIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdGhhdCBsb3RzIG9mIG5vdGVzIHRyaWdnZXIgYSBmYW5vdXQgc2NoZW1lJyAnCisKKwkjIE5vbmUgb2YgdGhlIGVudHJpZXMgaW4gdGhlIHRvcC1sZXZlbCBub3RlcyB0cmVlIHNob3VsZCBiZSBhIGZ1bGwgU0hBMQorCWdpdCBscy10cmVlIC0tbmFtZS1vbmx5IHJlZnMvbm90ZXMvbWFueV9ub3RlcyB8CisJd2hpbGUgcmVhZCBwYXRoCisJZG8KKwkJaWYgdGVzdCAkKGV4cHIgbGVuZ3RoICIkcGF0aCIpIC1nZSA0MAorCQl0aGVuCisJCQlyZXR1cm4gMQorCQlmaQorCWRvbmUKKworJworCitjYXQgPj5leHBlY3Rfbm9uLW5vdGUxIDw8IEVPRgorVGhpcyBpcyBub3QgYSBub3RlLCBidXQgcmF0aGVyIGEgcmVndWxhciBmaWxlIHJlc2lkaW5nIGluIGEgbm90ZXMgdHJlZQorRU9GCisKK2NhdCA+PmV4cGVjdF9ub24tbm90ZTIgPDwgRU9GCitOb24tbm90ZSBmaWxlCitFT0YKKworY2F0ID4+ZXhwZWN0X25vbi1ub3RlMyA8PCBFT0YKK0Fub3RoZXIgbm9uLW5vdGUgZmlsZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB0aGF0IG5vbi1ub3RlcyBhcmUgdW50b3VjaGVkIGJ5IGEgZmFub3V0IGNoYW5nZScgJworCisJZ2l0IGNhdC1maWxlIC1wIHJlZnMvbm90ZXMvbWFueV9ub3Rlczpmb29iYXIvbm9uLW5vdGUudHh0ID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0X25vbi1ub3RlMSBhY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9tYW55X25vdGVzOmRlYWRiZWVmID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0X25vbi1ub3RlMiBhY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9tYW55X25vdGVzOmRlL2FkYmVlZiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdF9ub24tbm90ZTMgYWN0dWFsCisKKycKK3JlbWFpbmluZ19ub3Rlcz0xMAordGVzdF90aWNrCitjYXQgPj5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvbm90ZXMvbWFueV9ub3RlcworY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCityZW1vdmluZyBhbGwgbm90ZXMgYnV0ICRyZW1haW5pbmdfbm90ZXMKK0NPTU1JVAorZnJvbSByZWZzL25vdGVzL21hbnlfbm90ZXNeMAorSU5QVVRfRU5ECisKK2k9JHJlbWFpbmluZ19ub3Rlcword2hpbGUgdGVzdCAkaSAtbHQgJG51bV9jb21taXRzCitkbworCWk9JCgoJGkgKyAxKSkKKwljYXQgPj5pbnB1dCA8PElOUFVUX0VORAorTiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDokaQorSU5QVVRfRU5ECitkb25lCisKK2k9JG51bV9jb21taXRzCitybSBleHBlY3QKK3doaWxlIHRlc3QgJGkgLWd0IDAKK2RvCisJY2F0ID4+ZXhwZWN0IDw8RVhQRUNUX0VORAorICAgIGNvbW1pdCAjJGkKK0VYUEVDVF9FTkQKKwlpZiB0ZXN0ICRpIC1sZSAkcmVtYWluaW5nX25vdGVzCisJdGhlbgorCQljYXQgPj5leHBlY3QgPDxFWFBFQ1RfRU5ECisgICAgbm90ZSBmb3IgY29tbWl0ICMkaQorRVhQRUNUX0VORAorCWZpCisJaT0kKCgkaSAtIDEpKQorZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgbG90cyBvZiBub3RlcycgJworCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCUdJVF9OT1RFU19SRUY9cmVmcy9ub3Rlcy9tYW55X25vdGVzIGdpdCBsb2cgcmVmcy9oZWFkcy9tYW55X2NvbW1pdHMgfAorCSAgICBncmVwICJeICAgICIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHRoYXQgcmVtb3Zpbmcgbm90ZXMgdHJpZ2dlciBmYW5vdXQgY29uc29saWRhdGlvbicgJworCisJIyBBbGwgZW50cmllcyBpbiB0aGUgdG9wLWxldmVsIG5vdGVzIHRyZWUgc2hvdWxkIGJlIGEgZnVsbCBTSEExCisJZ2l0IGxzLXRyZWUgLS1uYW1lLW9ubHkgLXIgcmVmcy9ub3Rlcy9tYW55X25vdGVzIHwKKwl3aGlsZSByZWFkIHBhdGgKKwlkbworCQkjIEV4cGxpY2l0bHkgaWdub3JlIHRoZSBub24tbm90ZSBwYXRocworCQl0ZXN0ICIkcGF0aCIgPSAiZm9vYmFyL25vbi1ub3RlLnR4dCIgJiYgY29udGludWUKKwkJdGVzdCAiJHBhdGgiID0gImRlYWRiZWVmIiAmJiBjb250aW51ZQorCQl0ZXN0ICIkcGF0aCIgPSAiZGUvYWRiZWVmIiAmJiBjb250aW51ZQorCisJCWlmIHRlc3QgJChleHByIGxlbmd0aCAiJHBhdGgiKSAtbmUgNDAKKwkJdGhlbgorCQkJcmV0dXJuIDEKKwkJZmkKKwlkb25lCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHRoYXQgbm9uLW5vdGVzIGFyZSB1bnRvdWNoZWQgYnkgYSBmYW5vdXQgY2hhbmdlJyAnCisKKwlnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9tYW55X25vdGVzOmZvb2Jhci9ub24tbm90ZS50eHQgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm9uLW5vdGUxIGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSAtcCByZWZzL25vdGVzL21hbnlfbm90ZXM6ZGVhZGJlZWYgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm9uLW5vdGUyIGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSAtcCByZWZzL25vdGVzL21hbnlfbm90ZXM6ZGUvYWRiZWVmID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0X25vbi1ub3RlMyBhY3R1YWwKKworJworCisKK3JtIGlucHV0IGV4cGVjdAorbnVtX25vdGVzX3JlZnM9MTAKK251bV9jb21taXRzPTE2Citzb21lX2NvbW1pdHM9OAorIyBDcmVhdGUgY29tbWl0cworZmFzdF9pbXBvcnRfY29tbWl0cyAicmVmcy9oZWFkcy9tb3JlX2NvbW1pdHMiICRudW1fY29tbWl0cyBpbnB1dAorIyBDcmVhdGUgb25lIG5vdGUgcGVyIGFib3ZlIGNvbW1pdCBwZXIgbm90ZXMgcmVmCitpPTAKK3doaWxlIHRlc3QgJGkgLWx0ICRudW1fbm90ZXNfcmVmcworZG8KKwlpPSQoKCRpICsgMSkpCisJZmFzdF9pbXBvcnRfbm90ZXMgInJlZnMvbm90ZXMvbW9yZV9ub3Rlc18kaSIgJG51bV9jb21taXRzIGlucHV0Citkb25lCisjIFRyaWdnZXIgYnJhbmNoIHJlbG9hZGluZyBpbiBnaXQtZmFzdC1pbXBvcnQgYnkgcmVwZWF0aW5nIHRoZSBub3RlIGNyZWF0aW9uCitpPTAKK3doaWxlIHRlc3QgJGkgLWx0ICRudW1fbm90ZXNfcmVmcworZG8KKwlpPSQoKCRpICsgMSkpCisJZmFzdF9pbXBvcnRfbm90ZXMgInJlZnMvbm90ZXMvbW9yZV9ub3Rlc18kaSIgJHNvbWVfY29tbWl0cyBpbnB1dCAiICgyKSIKK2RvbmUKKyMgRmluYWxseSBjcmVhdGUgdGhlIGV4cGVjdGVkIG91dHB1dCBmcm9tIHRoZSBub3RlcyBpbiByZWZzL25vdGVzL21vcmVfbm90ZXNfMQoraT0kbnVtX2NvbW1pdHMKK3doaWxlIHRlc3QgJGkgLWd0IDAKK2RvCisJbm90ZV9kYXRhPSJub3RlIGZvciBjb21taXQgIyRpIgorCWlmIHRlc3QgJGkgLWxlICRzb21lX2NvbW1pdHMKKwl0aGVuCisJCW5vdGVfZGF0YT0iJG5vdGVfZGF0YSAoMikiCisJZmkKKwljYXQgPj5leHBlY3QgPDxFWFBFQ1RfRU5ECisgICAgY29tbWl0ICMkaQorICAgICRub3RlX2RhdGEKK0VYUEVDVF9FTkQKKwlpPSQoKCRpIC0gMSkpCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImFkZCBub3RlcyB0byAkbnVtX2NvbW1pdHMgY29tbWl0cyBpbiBlYWNoIG9mICRudW1fbm90ZXNfcmVmcyByZWZzIiAnCisKKwlnaXQgZmFzdC1pbXBvcnQgLS1hY3RpdmUtYnJhbmNoZXM9NSA8aW5wdXQgJiYKKwlHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvbW9yZV9ub3Rlc18xIGdpdCBsb2cgcmVmcy9oZWFkcy9tb3JlX2NvbW1pdHMgfAorCSAgICBncmVwICJeICAgICIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MzAxLWZhc3QtZXhwb3J0LnNoIGIvdC90OTM1MC1mYXN0LWV4cG9ydC5zaApzaW1pbGFyaXR5IGluZGV4IDc1JQpyZW5hbWUgZnJvbSB0L3Q5MzAxLWZhc3QtZXhwb3J0LnNoCnJlbmFtZSB0byB0L3Q5MzUwLWZhc3QtZXhwb3J0LnNoCmluZGV4IDhkYTljZTUuLmQ0M2YzN2MgMTAwNzU1Ci0tLSBhL3QvdDkzMDEtZmFzdC1leHBvcnQuc2gKKysrIGIvdC90OTM1MC1mYXN0LWV4cG9ydC5zaApAQCAtNjgsNyArNjgsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdpc28tODg1OS0xJyAnCiAKLQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU084ODU5LTEgJiYKIAkjIHVzZSBhdXRob3IgYW5kIGNvbW1pdHRlciBuYW1lIGluIElTTy04ODU5LTEgdG8gbWF0Y2ggaXQuCiAJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS04ODU5LTEudHh0ICYmCiAJdGVzdF90aWNrICYmCkBAIC0xNTAsMjAgKzE1MCwyMiBAQAogCiAJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgogCW1rZGlyIHN1YiAmJgotCWNkIHN1YiAmJgotCWdpdCBpbml0ICAmJgotCWVjaG8gdGVzdCBmaWxlID4gZmlsZSAmJgotCWdpdCBhZGQgZmlsZSAmJgotCWdpdCBjb21taXQgLW0gc3ViX2luaXRpYWwgJiYKLQljZCAuLiAmJgorCSgKKwkJY2Qgc3ViICYmCisJCWdpdCBpbml0ICAmJgorCQllY2hvIHRlc3QgZmlsZSA+IGZpbGUgJiYKKwkJZ2l0IGFkZCBmaWxlICYmCisJCWdpdCBjb21taXQgLW0gc3ViX2luaXRpYWwKKwkpICYmCiAJZ2l0IHN1Ym1vZHVsZSBhZGQgImBwd2RgL3N1YiIgc3ViICYmCiAJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCiAJdGVzdF90aWNrICYmCi0JY2Qgc3ViICYmCi0JZWNobyBtb3JlIGRhdGEgPj4gZmlsZSAmJgotCWdpdCBhZGQgZmlsZSAmJgotCWdpdCBjb21taXQgLW0gc3ViX3NlY29uZCAmJgotCWNkIC4uICYmCisJKAorCQljZCBzdWIgJiYKKwkJZWNobyBtb3JlIGRhdGEgPj4gZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSBzdWJfc2Vjb25kCisJKSAmJgogCWdpdCBhZGQgc3ViICYmCiAJZ2l0IGNvbW1pdCAtbSBzZWNvbmQKIApAQCAtMjYyLDYgKzI2NCw5NyBAQAogCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZvciBsaW1pdGluZyBleHBvcnRzIGJ5IFBBVEgnICcKKwlta2RpciBsaW1pdC1ieS1wYXRocyAmJgorCSgKKwkJY2QgbGltaXQtYnktcGF0aHMgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZWNobyBoaSA+IHRoZXJlICYmCisJCWdpdCBhZGQgdGhlcmUgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiRmlyc3QgZmlsZSIgJiYKKwkJZWNobyBmb28gPiBiYXIgJiYKKwkJZ2l0IGFkZCBiYXIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiU2Vjb25kIGZpbGUiICYmCisJCWdpdCB0YWcgLWEgLW0gbXNnIG15dGFnICYmCisJCWVjaG8gbW9yZWZvbyA+PiBiYXIgJiYKKwkJZ2l0IGFkZCBiYXIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQ2hhbmdlIHRvIHNlY29uZCBmaWxlIgorCSkKKycKKworY2F0ID4gbGltaXQtYnktcGF0aHMvZXhwZWN0ZWQgPDwgRU9GCitibG9iCittYXJrIDoxCitkYXRhIDMKK2hpCisKK3Jlc2V0IHJlZnMvdGFncy9teXRhZworY29tbWl0IHJlZnMvdGFncy9teXRhZworbWFyayA6MgorYXV0aG9yIEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+IDExMTI5MTI3MTMgLTA3MDAKK2NvbW1pdHRlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IDExMTI5MTI3MTMgLTA3MDAKK2RhdGEgMTEKK0ZpcnN0IGZpbGUKK00gMTAwNjQ0IDoxIHRoZXJlCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkcm9wcGluZyB0YWcgb2YgZmlsdGVyZWQgb3V0IG9iamVjdCcgJworKAorCWNkIGxpbWl0LWJ5LXBhdGhzICYmCisJZ2l0IGZhc3QtZXhwb3J0IC0tdGFnLW9mLWZpbHRlcmVkLW9iamVjdD1kcm9wIG15dGFnIC0tIHRoZXJlID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgb3V0cHV0IGV4cGVjdGVkCispCisnCisKK2NhdCA+PiBsaW1pdC1ieS1wYXRocy9leHBlY3RlZCA8PCBFT0YKK3RhZyBteXRhZworZnJvbSA6MgordGFnZ2VyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gMTExMjkxMjcxMyAtMDcwMAorZGF0YSA0Cittc2cKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jld3JpdGluZyB0YWcgb2YgZmlsdGVyZWQgb3V0IG9iamVjdCcgJworKAorCWNkIGxpbWl0LWJ5LXBhdGhzICYmCisJZ2l0IGZhc3QtZXhwb3J0IC0tdGFnLW9mLWZpbHRlcmVkLW9iamVjdD1yZXdyaXRlIG15dGFnIC0tIHRoZXJlID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgb3V0cHV0IGV4cGVjdGVkCispCisnCisKK2NhdCA+IGxpbWl0LWJ5LXBhdGhzL2V4cGVjdGVkIDw8IEVPRgorYmxvYgorbWFyayA6MQorZGF0YSA0Citmb28KKworYmxvYgorbWFyayA6MgorZGF0YSAzCitoaQorCityZXNldCByZWZzL2hlYWRzL21hc3RlcgorY29tbWl0IHJlZnMvaGVhZHMvbWFzdGVyCittYXJrIDozCithdXRob3IgQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4gMTExMjkxMjcxMyAtMDcwMAorY29tbWl0dGVyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gMTExMjkxMjcxMyAtMDcwMAorZGF0YSAxMgorU2Vjb25kIGZpbGUKK00gMTAwNjQ0IDoxIGJhcgorTSAxMDA2NDQgOjIgdGhlcmUKKworRU9GCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ25vIGV4YWN0LXJlZiByZXZpc2lvbnMgaW5jbHVkZWQnICcKKwkoCisJCWNkIGxpbWl0LWJ5LXBhdGhzICYmCisJCWdpdCBmYXN0LWV4cG9ydCBtYXN0ZXJ+Mi4ubWFzdGVyfjEgPiBvdXRwdXQgJiYKKwkJdGVzdF9jbXAgb3V0cHV0IGV4cGVjdGVkCisJKQorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQtdXAgYSBmZXcgbW9yZSB0YWdzIGZvciB0YWcgZXhwb3J0IHRlc3RzJyAnCiAJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgogCUhFQURfVFJFRT1gZ2l0IHNob3cgLXMgLS1wcmV0dHk9cmF3IEhFQUQgfCBncmVwIHRyZWUgfCBzZWQgInMvdHJlZSAvLyJgICYmCkBAIC0yNzEsOCArMzY0LDE0IEBACiAJZ2l0IHRhZyAtYSB0YWctb2JqX3RhZy1vYmogLW0gInRhZ2dpbmcgYSB0YWciIHRyZWVfdGFnLW9iagogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmVlX3RhZycgICAgICAgICcKKwlta2RpciByZXN1bHQgJiYKKwkoY2QgcmVzdWx0ICYmIGdpdCBpbml0KSAmJgorCWdpdCBmYXN0LWV4cG9ydCB0cmVlX3RhZyA+IGZlLXN0cmVhbSAmJgorCShjZCByZXN1bHQgJiYgZ2l0IGZhc3QtaW1wb3J0IDwgLi4vZmUtc3RyZWFtKQorJworCiAjIE5FRURTV09SSzogbm90IGp1c3QgY2hlY2sgcmV0dXJuIHN0YXR1cywgYnV0IHZhbGlkYXRlIHRoZSBvdXRwdXQKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyZWVfdGFnJyAgICAgICAgJ2dpdCBmYXN0LWV4cG9ydCB0cmVlX3RhZycKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyZWVfdGFnLW9iaicgICAgJ2dpdCBmYXN0LWV4cG9ydCB0cmVlX3RhZy1vYmonCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YWctb2JqX3RhZycgICAgICdnaXQgZmFzdC1leHBvcnQgdGFnLW9ial90YWcnCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YWctb2JqX3RhZy1vYmonICdnaXQgZmFzdC1leHBvcnQgdGFnLW9ial90YWctb2JqJwpkaWZmIC0tZ2l0IGEvdC90OTQwMC1naXQtY3Zzc2VydmVyLXNlcnZlci5zaCBiL3QvdDk0MDAtZ2l0LWN2c3NlcnZlci1zZXJ2ZXIuc2gKaW5kZXggNjRmOTQ3ZC4uZGFlZjJkNiAxMDA3NTUKLS0tIGEvdC90OTQwMC1naXQtY3Zzc2VydmVyLXNlcnZlci5zaAorKysgYi90L3Q5NDAwLWdpdC1jdnNzZXJ2ZXItc2VydmVyLnNoCkBAIC0yMCw3ICsyMCw3IEBACiAgICAgc2F5ICdza2lwcGluZyBnaXQtY3Zzc2VydmVyIHRlc3RzLCBjdnMgbm90IGZvdW5kJwogICAgIHRlc3RfZG9uZQogZmkKLXBlcmwgLWUgJ3VzZSBEQkk7IHVzZSBEQkQ6OlNRTGl0ZScgPi9kZXYvbnVsbCAyPiYxIHx8IHsKKyIkUEVSTF9QQVRIIiAtZSAndXNlIERCSTsgdXNlIERCRDo6U1FMaXRlJyA+L2Rldi9udWxsIDI+JjEgfHwgewogICAgIHNheSAnc2tpcHBpbmcgZ2l0LWN2c3NlcnZlciB0ZXN0cywgUGVybCBTUUxpdGUgaW50ZXJmYWNlIHVuYXZhaWxhYmxlJwogICAgIHRlc3RfZG9uZQogfQpAQCAtOTYsNyArOTYsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwc2VydmVyIGF1dGhlbnRpY2F0aW9uJyBcCiAgICdjYXQgcmVxdWVzdC1hbm9ueW1vdXMgfCBnaXQtY3Zzc2VydmVyIHBzZXJ2ZXIgPmxvZyAyPiYxICYmCi0gICBzZWQgLW5lIFwkcCBsb2cgfCBncmVwICJeSSBMT1ZFIFlPVSQiJworICAgc2VkIC1uZSBcJHAgbG9nIHwgZ3JlcCAiXkkgTE9WRSBZT1VcJCInCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BzZXJ2ZXIgYXV0aGVudGljYXRpb24gZmFpbHVyZSAobm9uLWFub255bW91cyB1c2VyKScgXAogICAnaWYgY2F0IHJlcXVlc3QtZ2l0IHwgZ2l0LWN2c3NlcnZlciBwc2VydmVyID5sb2cgMj4mMQpAQCAtMTA1LDExICsxMDUsMTEgQEAKICAgIGVsc2UKICAgICAgICB0cnVlCiAgICBmaSAmJgotICAgc2VkIC1uZSBcJHAgbG9nIHwgZ3JlcCAiXkkgSEFURSBZT1UkIicKKyAgIHNlZCAtbmUgXCRwIGxvZyB8IGdyZXAgIl5JIEhBVEUgWU9VXCQiJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwc2VydmVyIGF1dGhlbnRpY2F0aW9uIChsb2dpbiknIFwKICAgJ2NhdCBsb2dpbi1hbm9ueW1vdXMgfCBnaXQtY3Zzc2VydmVyIHBzZXJ2ZXIgPmxvZyAyPiYxICYmCi0gICBzZWQgLW5lIFwkcCBsb2cgfCBncmVwICJeSSBMT1ZFIFlPVSQiJworICAgc2VkIC1uZSBcJHAgbG9nIHwgZ3JlcCAiXkkgTE9WRSBZT1VcJCInCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BzZXJ2ZXIgYXV0aGVudGljYXRpb24gZmFpbHVyZSAobG9naW4vbm9uLWFub255bW91cyB1c2VyKScgXAogICAnaWYgY2F0IGxvZ2luLWdpdCB8IGdpdC1jdnNzZXJ2ZXIgcHNlcnZlciA+bG9nIDI+JjEKQEAgLTExOCw3ICsxMTgsNyBAQAogICAgZWxzZQogICAgICAgIHRydWUKICAgIGZpICYmCi0gICBzZWQgLW5lIFwkcCBsb2cgfCBncmVwICJeSSBIQVRFIFlPVSQiJworICAgc2VkIC1uZSBcJHAgbG9nIHwgZ3JlcCAiXkkgSEFURSBZT1VcJCInCiAKIAogIyBtaXN1c2UgcHNlcnZlciBhdXRoZW50aWNhdGlvbiBmb3IgdGVzdGluZyBvZiByZXFfUm9vdApAQCAtMTU2LDcgKzE1Niw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcV9Sb290IChzdHJpY3QgcGF0aHMpJyBcCiAgICdjYXQgcmVxdWVzdC1hbm9ueW1vdXMgfCBnaXQtY3Zzc2VydmVyIC0tc3RyaWN0LXBhdGhzIHBzZXJ2ZXIgIiRTRVJWRVJESVIiID5sb2cgMj4mMSAmJgotICAgc2VkIC1uZSBcJHAgbG9nIHwgZ3JlcCAiXkkgTE9WRSBZT1UkIicKKyAgIHNlZCAtbmUgXCRwIGxvZyB8IGdyZXAgIl5JIExPVkUgWU9VXCQiJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXFfUm9vdCBmYWlsdXJlIChzdHJpY3QtcGF0aHMpJyAnCiAgICAgISBjYXQgcmVxdWVzdC1hbm9ueW1vdXMgfApAQCAtMTY1LDcgKzE2NSw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcV9Sb290ICh3L28gc3RyaWN0LXBhdGhzKScgXAogICAnY2F0IHJlcXVlc3QtYW5vbnltb3VzIHwgZ2l0LWN2c3NlcnZlciBwc2VydmVyICIkV09SS0RJUi8iID5sb2cgMj4mMSAmJgotICAgc2VkIC1uZSBcJHAgbG9nIHwgZ3JlcCAiXkkgTE9WRSBZT1UkIicKKyAgIHNlZCAtbmUgXCRwIGxvZyB8IGdyZXAgIl5JIExPVkUgWU9VXCQiJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXFfUm9vdCBmYWlsdXJlICh3L28gc3RyaWN0LXBhdGhzKScgJwogICAgICEgY2F0IHJlcXVlc3QtYW5vbnltb3VzIHwKQEAgLTE4Myw3ICsxODMsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXFfUm9vdCAoYmFzZS1wYXRoKScgXAogICAnY2F0IHJlcXVlc3QtYmFzZSB8IGdpdC1jdnNzZXJ2ZXIgLS1zdHJpY3QtcGF0aHMgLS1iYXNlLXBhdGggIiRXT1JLRElSLyIgcHNlcnZlciAiJFNFUlZFUkRJUiIgPmxvZyAyPiYxICYmCi0gICBzZWQgLW5lIFwkcCBsb2cgfCBncmVwICJeSSBMT1ZFIFlPVSQiJworICAgc2VkIC1uZSBcJHAgbG9nIHwgZ3JlcCAiXkkgTE9WRSBZT1VcJCInCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcV9Sb290IGZhaWx1cmUgKGJhc2UtcGF0aCknICcKICAgICAhIGNhdCByZXF1ZXN0LWFub255bW91cyB8CkBAIC0xOTQsMTQgKzE5NCwxNCBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXFfUm9vdCAoZXhwb3J0LWFsbCknIFwKICAgJ2NhdCByZXF1ZXN0LWFub255bW91cyB8IGdpdC1jdnNzZXJ2ZXIgLS1leHBvcnQtYWxsIHBzZXJ2ZXIgIiRXT1JLRElSIiA+bG9nIDI+JjEgJiYKLSAgIHNlZCAtbmUgXCRwIGxvZyB8IGdyZXAgIl5JIExPVkUgWU9VJCInCisgICBzZWQgLW5lIFwkcCBsb2cgfCBncmVwICJeSSBMT1ZFIFlPVVwkIicKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxX1Jvb3QgZmFpbHVyZSAoZXhwb3J0LWFsbCB3L28gd2hpdGVsaXN0KScgXAogICAnISAoY2F0IHJlcXVlc3QtYW5vbnltb3VzIHwgZ2l0LWN2c3NlcnZlciAtLWV4cG9ydC1hbGwgcHNlcnZlciA+bG9nIDI+JjEgfHwgZmFsc2UpJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXFfUm9vdCAoZXZlcnl0aGluZyB0b2dldGhlciknIFwKICAgJ2NhdCByZXF1ZXN0LWJhc2UgfCBnaXQtY3Zzc2VydmVyIC0tZXhwb3J0LWFsbCAtLXN0cmljdC1wYXRocyAtLWJhc2UtcGF0aCAiJFdPUktESVIvIiBwc2VydmVyICIkU0VSVkVSRElSIiA+bG9nIDI+JjEgJiYKLSAgIHNlZCAtbmUgXCRwIGxvZyB8IGdyZXAgIl5JIExPVkUgWU9VJCInCisgICBzZWQgLW5lIFwkcCBsb2cgfCBncmVwICJeSSBMT1ZFIFlPVVwkIicKIAogR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLmVuYWJsZWQgdHJ1ZSB8fCBleGl0IDEKIApAQCAtMjI2LDcgKzIyNiw3IEBACiAgICdHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIC0tYm9vbCBnaXRjdnMuZXh0LmVuYWJsZWQgdHJ1ZSAmJgogICAgR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLmVuYWJsZWQgZmFsc2UgJiYKICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgY28gLWQgY3Zzd29yazIgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKLSAgIGRpZmYgLXEgY3Zzd29yayBjdnN3b3JrMicKKyAgIHRlc3RfY21wIGN2c3dvcmsgY3Zzd29yazInCiAKIHJtIC1mciBjdnN3b3JrMgogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0Y3ZzLmV4dC5lbmFibGVkID0gZmFsc2UnIFwKQEAgLTI0Nyw3ICsyNDcsNyBAQAogICAnR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLmV4dC5lbmFibGVkIHRydWUgJiYKICAgIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgZ2l0Y3ZzLmRibmFtZSAlR2dpdGN2cy4lYS4lbS5zcWxpdGUgJiYKICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgY28gLWQgY3Zzd29yazIgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKLSAgIGRpZmYgLXEgY3Zzd29yayBjdnN3b3JrMiAmJgorICAgdGVzdF9jbXAgY3Zzd29yayBjdnN3b3JrMiAmJgogICAgdGVzdCAtZiAiJFNFUlZFUkRJUi9naXRjdnMuZXh0Lm1hc3Rlci5zcWxpdGUiICYmCiAgICBjbXAgIiRTRVJWRVJESVIvZ2l0Y3ZzLm1hc3Rlci5zcWxpdGUiICIkU0VSVkVSRElSL2dpdGN2cy5leHQubWFzdGVyLnNxbGl0ZSInCiAKQEAgLTI1Nyw3ICsyNTcsNyBAQAogICAgR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyBnaXRjdnMuZXh0LmRibmFtZSAlR2dpdGN2czEuJWEuJW0uc3FsaXRlICYmCiAgICBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIGdpdGN2cy5kYm5hbWUgJUdnaXRjdnMyLiVhLiVtLnNxbGl0ZSAmJgogICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBjbyAtZCBjdnN3b3JrMiBtYXN0ZXIgPmN2cy5sb2cgMj4mMSAmJgotICAgZGlmZiAtcSBjdnN3b3JrIGN2c3dvcmsyICYmCisgICB0ZXN0X2NtcCBjdnN3b3JrIGN2c3dvcmsyICYmCiAgICB0ZXN0IC1mICIkU0VSVkVSRElSL2dpdGN2czEuZXh0Lm1hc3Rlci5zcWxpdGUiICYmCiAgICB0ZXN0ICEgLWYgIiRTRVJWRVJESVIvZ2l0Y3ZzMi5leHQubWFzdGVyLnNxbGl0ZSIgJiYKICAgIGNtcCAiJFNFUlZFUkRJUi9naXRjdnMubWFzdGVyLnNxbGl0ZSIgIiRTRVJWRVJESVIvZ2l0Y3ZzMS5leHQubWFzdGVyLnNxbGl0ZSInCkBAIC0yODIsNyArMjgyLDcgQEAKICAgIGNkIGN2c3dvcmsgJiYKICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgdXBkYXRlICYmCiAgICB0ZXN0ICIkKGVjaG8gJChncmVwIHRlc3RmaWxlMSBDVlMvRW50cmllc3xjdXQgLWQvIC1mMiwzLDUpKSIgPSAidGVzdGZpbGUxLzEuMS8iICYmCi0gICBkaWZmIC1xIHRlc3RmaWxlMSAuLi90ZXN0ZmlsZTEnCisgICB0ZXN0X2NtcCB0ZXN0ZmlsZTEgLi4vdGVzdGZpbGUxJwogCiBjZCAiJFdPUktESVIiCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXBkYXRlICh1cGRhdGUgZXhpc3RpbmcgZmlsZSknIFwKQEAgLTI5Myw3ICsyOTMsNyBAQAogICAgY2QgY3Zzd29yayAmJgogICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSB1cGRhdGUgJiYKICAgIHRlc3QgIiQoZWNobyAkKGdyZXAgdGVzdGZpbGUxIENWUy9FbnRyaWVzfGN1dCAtZC8gLWYyLDMsNSkpIiA9ICJ0ZXN0ZmlsZTEvMS4yLyIgJiYKLSAgIGRpZmYgLXEgdGVzdGZpbGUxIC4uL3Rlc3RmaWxlMScKKyAgIHRlc3RfY21wIHRlc3RmaWxlMSAuLi90ZXN0ZmlsZTEnCiAKIGNkICIkV09SS0RJUiIKICNUT0RPOiBjdnNzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IHVwZGF0ZSB3L28gLWQKQEAgLTMyMiw3ICszMjIsNyBAQAogICAgKGZvciBkaXIgaW4gQSBBL0IgQS9CL0MgQS9EIEU7IGRvCiAgICAgICBmaWxlbmFtZT0iZmlsZV9pbl8kKGVjaG8gJGRpcnxzZWQgLWUgInMjLyMgI2ciKSIgJiYKICAgICAgIGlmIHRlc3QgIiQoZWNobyAkKGdyZXAgLXYgXkQgJGRpci9DVlMvRW50cmllc3xjdXQgLWQvIC1mMiwzLDUpKSIgPSAiJGZpbGVuYW1lLzEuMS8iICYmCi0gICAgICAgICAgIGRpZmYgLXEgIiRkaXIvJGZpbGVuYW1lIiAiLi4vJGRpci8kZmlsZW5hbWUiOyB0aGVuCisJdGVzdF9jbXAgIiRkaXIvJGZpbGVuYW1lIiAiLi4vJGRpci8kZmlsZW5hbWUiOyB0aGVuCiAgICAgICAgIDoKICAgICAgIGVsc2UKICAgICAgICAgZWNobyA+ZmFpbHVyZQpAQCAtMzQ5LDcgKzM0OSw3IEBACiAgICBjZCBjdnN3b3JrICYmCiAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIHVwZGF0ZSAmJgogICAgdGVzdCAiJChlY2hvICQoZ3JlcCB0ZXN0ZmlsZTEgQ1ZTL0VudHJpZXN8Y3V0IC1kLyAtZjIsMyw1KSkiID0gInRlc3RmaWxlMS8xLjQvIiAmJgotICAgZGlmZiAtcSB0ZXN0ZmlsZTEgLi4vdGVzdGZpbGUxJworICAgdGVzdF9jbXAgdGVzdGZpbGUxIC4uL3Rlc3RmaWxlMScKIAogY2QgIiRXT1JLRElSIgogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHVwZGF0ZSAobWVyZ2UpJyBcCkBAIC0zNjYsNyArMzY2LDcgQEAKICAgIGNkIGN2c3dvcmsgJiYKICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgdXBkYXRlICYmCiAgICB0ZXN0ICIkKGVjaG8gJChncmVwIG1lcmdlIENWUy9FbnRyaWVzfGN1dCAtZC8gLWYyLDMsNSkpIiA9ICJtZXJnZS8xLjEvIiAmJgotICAgZGlmZiAtcSBtZXJnZSAuLi9tZXJnZSAmJgorICAgdGVzdF9jbXAgbWVyZ2UgLi4vbWVyZ2UgJiYKICAgICggZWNobyBMaW5lIDA7IGNhdCBtZXJnZSApID5tZXJnZS50bXAgJiYKICAgIG12IG1lcmdlLnRtcCBtZXJnZSAmJgogICAgY2QgIiRXT1JLRElSIiAmJgpAQCAtMzc3LDcgKzM3Nyw3IEBACiAgICBjZCBjdnN3b3JrICYmCiAgICBzbGVlcCAxICYmIHRvdWNoIG1lcmdlICYmCiAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIHVwZGF0ZSAmJgotICAgZGlmZiAtcSBtZXJnZSAuLi9leHBlY3RlZCcKKyAgIHRlc3RfY21wIG1lcmdlIC4uL2V4cGVjdGVkJwogCiBjZCAiJFdPUktESVIiCiAKQEAgLTQwMiwxMyArNDAyLDEzIEBACiAgICBnaXQgcHVzaCBnaXRjdnMuZ2l0ID4vZGV2L251bGwgJiYKICAgIGNkIGN2c3dvcmsgJiYKICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgdXBkYXRlICYmCi0gICBkaWZmIC1xIG1lcmdlIC4uL2V4cGVjdGVkLkMnCisgICB0ZXN0X2NtcCBtZXJnZSAuLi9leHBlY3RlZC5DJwogCiBjZCAiJFdPUktESVIiCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXBkYXRlICgtQyknIFwKICAgJ2NkIGN2c3dvcmsgJiYKICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgdXBkYXRlIC1DICYmCi0gICBkaWZmIC1xIG1lcmdlIC4uL21lcmdlJworICAgdGVzdF9jbXAgbWVyZ2UgLi4vbWVyZ2UnCiAKIGNkICIkV09SS0RJUiIKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyB1cGRhdGUgKG1lcmdlIG5vLW9wKScgXApAQCAtNDIwLDcgKzQyMCw3IEBACiAgICAgY2QgY3Zzd29yayAmJgogICAgIHNsZWVwIDEgJiYgdG91Y2ggbWVyZ2UgJiYKICAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIHVwZGF0ZSAmJgotICAgIGRpZmYgLXEgbWVyZ2UgLi4vbWVyZ2UnCisgICAgdGVzdF9jbXAgbWVyZ2UgLi4vbWVyZ2UnCiAKIGNkICIkV09SS0RJUiIKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyB1cGRhdGUgKC1wKScgJwpkaWZmIC0tZ2l0IGEvdC90OTQwMS1naXQtY3Zzc2VydmVyLWNybGYuc2ggYi90L3Q5NDAxLWdpdC1jdnNzZXJ2ZXItY3JsZi5zaAppbmRleCBhY2E0MGMxLi5lZDdiNTEzIDEwMDc1NQotLS0gYS90L3Q5NDAxLWdpdC1jdnNzZXJ2ZXItY3JsZi5zaAorKysgYi90L3Q5NDAxLWdpdC1jdnNzZXJ2ZXItY3JsZi5zaApAQCAtMTEsMTQgKzExLDYgQEAKIAogLiAuL3Rlc3QtbGliLnNoCiAKLXFfdG9fbnVsICgpIHsKLSAgICBwZXJsIC1wZSAneS9RL1wwMDAvJwotfQotCi1xX3RvX2NyICgpIHsKLSAgICB0ciBRICdcMDE1JwotfQotCiBtYXJrZWRfYXMgKCkgewogICAgIGZvdW5kRW50cnk9IiQoZ3JlcCAiXi8kMi8iICIkMS9DVlMvRW50cmllcyIpIgogICAgIGlmIFsgeCIkZm91bmRFbnRyeSIgPSB4IiIgXSA7IHRoZW4KQEAgLTU3LDcgKzQ5LDcgQEAKICAgICBzYXkgJ3NraXBwaW5nIGdpdC1jdnNzZXJ2ZXIgdGVzdHMsIHBlcmwgbm90IGF2YWlsYWJsZScKICAgICB0ZXN0X2RvbmUKIGZpCi1wZXJsIC1lICd1c2UgREJJOyB1c2UgREJEOjpTUUxpdGUnID4vZGV2L251bGwgMj4mMSB8fCB7CisiJFBFUkxfUEFUSCIgLWUgJ3VzZSBEQkk7IHVzZSBEQkQ6OlNRTGl0ZScgPi9kZXYvbnVsbCAyPiYxIHx8IHsKICAgICBzYXkgJ3NraXBwaW5nIGdpdC1jdnNzZXJ2ZXIgdGVzdHMsIFBlcmwgU1FMaXRlIGludGVyZmFjZSB1bmF2YWlsYWJsZScKICAgICB0ZXN0X2RvbmUKIH0KZGlmZiAtLWdpdCBhL3QvdDk1MDAtZ2l0d2ViLXN0YW5kYWxvbmUtbm8tZXJyb3JzLnNoIGIvdC90OTUwMC1naXR3ZWItc3RhbmRhbG9uZS1uby1lcnJvcnMuc2gKaW5kZXggZjQyMTBmYi4uNjNiNmIwNiAxMDA3NTUKLS0tIGEvdC90OTUwMC1naXR3ZWItc3RhbmRhbG9uZS1uby1lcnJvcnMuc2gKKysrIGIvdC90OTUwMC1naXR3ZWItc3RhbmRhbG9uZS1uby1lcnJvcnMuc2gKQEAgLTksNzMgKzksOCBAQAogY29tbWFuZGxpbmUsIGFuZCBjaGVja3MgdGhhdCBpdCB3b3VsZCBub3Qgd3JpdGUgYW55IGVycm9ycwogb3Igd2FybmluZ3MgdG8gbG9nLicKIAotZ2l0d2ViX2luaXQgKCkgewotCXNhZmVfcHdkPSIkKHBlcmwgLU1QT1NJWD1nZXRjd2QgLWUgJ3ByaW50IHF1b3RlbWV0YShnZXRjd2QpJykiCi0JY2F0ID5naXR3ZWJfY29uZmlnLnBlcmwgPDxFT0YKLSMhL3Vzci9iaW4vcGVybAogCi0jIGdpdHdlYiBjb25maWd1cmF0aW9uIGZvciB0ZXN0cwotCi1vdXIgXCR2ZXJzaW9uID0gImN1cnJlbnQiOwotb3VyIFwkR0lUID0gImdpdCI7Ci1vdXIgXCRwcm9qZWN0cm9vdCA9ICIkc2FmZV9wd2QiOwotb3VyIFwkcHJvamVjdF9tYXhkZXB0aCA9IDg7Ci1vdXIgXCRob21lX2xpbmtfc3RyID0gInByb2plY3RzIjsKLW91ciBcJHNpdGVfbmFtZSA9ICJbbG9jYWxob3N0XSI7Ci1vdXIgXCRzaXRlX2hlYWRlciA9ICIiOwotb3VyIFwkc2l0ZV9mb290ZXIgPSAiIjsKLW91ciBcJGhvbWVfdGV4dCA9ICJpbmRleHRleHQuaHRtbCI7Ci1vdXIgQHN0eWxlc2hlZXRzID0gKCJmaWxlOi8vLyRURVNUX0RJUkVDVE9SWS8uLi9naXR3ZWIvZ2l0d2ViLmNzcyIpOwotb3VyIFwkbG9nbyA9ICJmaWxlOi8vLyRURVNUX0RJUkVDVE9SWS8uLi9naXR3ZWIvZ2l0LWxvZ28ucG5nIjsKLW91ciBcJGZhdmljb24gPSAiZmlsZTovLy8kVEVTVF9ESVJFQ1RPUlkvLi4vZ2l0d2ViL2dpdC1mYXZpY29uLnBuZyI7Ci1vdXIgXCRwcm9qZWN0c19saXN0ID0gIiI7Ci1vdXIgXCRleHBvcnRfb2sgPSAiIjsKLW91ciBcJHN0cmljdF9leHBvcnQgPSAiIjsKLQotRU9GCi0KLQljYXQgPi5naXQvZGVzY3JpcHRpb24gPDxFT0YKLSQwIHRlc3QgcmVwb3NpdG9yeQotRU9GCi19Ci0KLWdpdHdlYl9ydW4gKCkgewotCUdBVEVXQVlfSU5URVJGQUNFPSJDR0kvMS4xIgotCUhUVFBfQUNDRVBUPSIqLyoiCi0JUkVRVUVTVF9NRVRIT0Q9IkdFVCIKLQlTQ1JJUFRfTkFNRT0iJFRFU1RfRElSRUNUT1JZLy4uL2dpdHdlYi9naXR3ZWIucGVybCIKLQlRVUVSWV9TVFJJTkc9IiIkMSIiCi0JUEFUSF9JTkZPPSIiJDIiIgotCWV4cG9ydCBHQVRFV0FZX0lOVEVSRkFDRSBIVFRQX0FDQ0VQVCBSRVFVRVNUX01FVEhPRCBcCi0JCVNDUklQVF9OQU1FIFFVRVJZX1NUUklORyBQQVRIX0lORk8KLQotCUdJVFdFQl9DT05GSUc9JChwd2QpL2dpdHdlYl9jb25maWcucGVybAotCWV4cG9ydCBHSVRXRUJfQ09ORklHCi0KLQkjIHNvbWUgb2YgZ2l0IGNvbW1hbmRzIHdyaXRlIHRvIFNUREVSUiBvbiBlcnJvciwgYnV0IHRoaXMgaXMgbm90Ci0JIyB3cml0dGVuIHRvIHdlYiBzZXJ2ZXIgbG9ncywgc28gd2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIHRoYXQ6Ci0JIyB3ZSBhcmUgaW50ZXJlc3RlZCBvbmx5IGluIHByb3Blcmx5IGZvcm1hdHRlZCBlcnJvcnMvd2FybmluZ3MKLQlybSAtZiBnaXR3ZWIubG9nICYmCi0JcGVybCAtLSAiJFNDUklQVF9OQU1FIiBcCi0JCT4vZGV2L251bGwgMj5naXR3ZWIubG9nICYmCi0JaWYgZ3JlcCAiXltbXSIgZ2l0d2ViLmxvZyA+L2Rldi9udWxsIDI+JjE7IHRoZW4gZmFsc2U7IGVsc2UgdHJ1ZTsgZmkKLQotCSMgZ2l0d2ViLmxvZyBpcyBsZWZ0IGZvciBkZWJ1Z2dpbmcKLX0KLQotLiAuL3Rlc3QtbGliLnNoCi0KLWlmICEgdGVzdF9oYXZlX3ByZXJlcSBQRVJMOyB0aGVuCi0Jc2F5ICdza2lwcGluZyBnaXR3ZWIgdGVzdHMsIHBlcmwgbm90IGF2YWlsYWJsZScKLQl0ZXN0X2RvbmUKLWZpCi0KLXBlcmwgLU1FbmNvZGUgLWUgJ2RlY29kZV91dGY4KCIiLCBFbmNvZGU6OkZCX0NST0FLKScgPi9kZXYvbnVsbCAyPiYxIHx8IHsKLSAgICBzYXkgJ3NraXBwaW5nIGdpdHdlYiB0ZXN0cywgcGVybCB2ZXJzaW9uIGlzIHRvbyBvbGQnCi0gICAgdGVzdF9kb25lCi19Ci0KLWdpdHdlYl9pbml0CisuIC4vZ2l0d2ViLWxpYi5zaAogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgbm8gY29tbWl0cyAoZW1wdHksIGp1c3QgaW5pdGlhbGl6ZWQgcmVwb3NpdG9yeSkKQEAgLTU5MCw3ICs1MjUsNyBAQAogCSBlY2hvICJJU08tODg1OS0xIiA+PiBmaWxlICYmCiAJIGdpdCBhZGQgZmlsZSAmJgogCSBnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgotCSBnaXQgY29tbWl0IC1GICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwL0lTTy04ODU5LTEudHh0ICYmCisJIGdpdCBjb21taXQgLUYgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvSVNPODg1OS0xLnR4dCAmJgogCSBnaXQgY29uZmlnIC0tdW5zZXQgaTE4bi5jb21taXRlbmNvZGluZyAmJgogCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXQiJwogdGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5sb2cnCkBAIC02NTYsMTMgKzU5MSwyMiBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIGdpdHdlYiBjb25maWcgYW5kIHJlcG8gY29uZmlnCiAKLWNhdCA+PmdpdHdlYl9jb25maWcucGVybCA8PEVPRgorY2F0ID4+Z2l0d2ViX2NvbmZpZy5wZXJsIDw8XEVPRgogCi1cJGZlYXR1cmV7J2JsYW1lJ317J292ZXJyaWRlJ30gPSAxOwotXCRmZWF0dXJleydzbmFwc2hvdCd9eydvdmVycmlkZSd9ID0gMTsKKyMgdHVybiBvbiBvdmVycmlkZSBmb3IgZWFjaCBvdmVycmlkYWJsZSBmZWF0dXJlCitmb3JlYWNoIG15ICRrZXkgKGtleXMgJWZlYXR1cmUpIHsKKwlpZiAoJGZlYXR1cmV7JGtleX17J3N1Yid9KSB7CisJCSRmZWF0dXJleyRrZXl9eydvdmVycmlkZSd9ID0gMTsKKwl9Cit9CiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbmZpZyBvdmVycmlkZTogcHJvamVjdHMgbGlzdCAoaW1wbGljaXQpJyBcCisJJ2dpdHdlYl9ydW4nCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmxvZycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAJJ2NvbmZpZyBvdmVycmlkZTogdHJlZSB2aWV3LCBmZWF0dXJlcyBub3Qgb3ZlcnJpZGRlbiBpbiByZXBvIGNvbmZpZycgXAogCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT10cmVlIicKIHRlc3RfZGVidWcgJ2NhdCBnaXR3ZWIubG9nJwpAQCAtNjcxLDYgKzYxNSw3IEBACiAJJ2NvbmZpZyBvdmVycmlkZTogdHJlZSB2aWV3LCBmZWF0dXJlcyBkaXNhYmxlZCBpbiByZXBvIGNvbmZpZycgXAogCSdnaXQgY29uZmlnIGdpdHdlYi5ibGFtZSBubyAmJgogCSBnaXQgY29uZmlnIGdpdHdlYi5zbmFwc2hvdCBub25lICYmCisJIGdpdCBjb25maWcgZ2l0d2ViLmF2YXRhciBncmF2YXRhciAmJgogCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT10cmVlIicKIHRlc3RfZGVidWcgJ2NhdCBnaXR3ZWIubG9nJwogCmRpZmYgLS1naXQgYS90L3Q5NTAxLWdpdHdlYi1zdGFuZGFsb25lLWh0dHAtc3RhdHVzLnNoIGIvdC90OTUwMS1naXR3ZWItc3RhbmRhbG9uZS1odHRwLXN0YXR1cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMTk2Y2M1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTUwMS1naXR3ZWItc3RhbmRhbG9uZS1odHRwLXN0YXR1cy5zaApAQCAtMCwwICsxLDEzNyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBNYXJrIFJhZGEKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0d2ViIGFzIHN0YW5kYWxvbmUgc2NyaXB0IChodHRwIHN0YXR1cyB0ZXN0cykuCisKK1RoaXMgdGVzdCBydW5zIGdpdHdlYiAoZ2l0IHdlYiBpbnRlcmZhY2UpIGFzIGEgQ0dJIHNjcmlwdCBmcm9tIHRoZQorY29tbWFuZGxpbmUsIGFuZCBjaGVja3MgdGhhdCBpdCByZXR1cm5zIHRoZSBleHBlY3RlZCBIVFRQIHN0YXR1cworY29kZSBhbmQgbWVzc2FnZS4nCisKKworLiAuL2dpdHdlYi1saWIuc2gKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHNuYXBzaG90IHNldHRpbmdzCisKK3Rlc3RfY29tbWl0IFwKKwknU25hcHNob3RUZXN0cycgXAorCSdpIGNhbiBoYXMgc25hcHNob3Q/JworCitjYXQgPj5naXR3ZWJfY29uZmlnLnBlcmwgPDxcRU9GCiskZmVhdHVyZXsnc25hcHNob3QnfXsnb3ZlcnJpZGUnfSA9IDA7CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3NuYXBzaG90czogdGd6IG9ubHkgZGVmYXVsdCBmb3JtYXQgZW5hYmxlZCcgXAorICAgICdnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPUhFQUQ7c2Y9dGd6IiAmJgorICAgIGdyZXAgIlN0YXR1czogMjAwIE9LIiBnaXR3ZWIub3V0cHV0ICYmCisgICAgZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1IRUFEO3NmPXRiejIiICYmCisgICAgZ3JlcCAiNDAzIC0gVW5zdXBwb3J0ZWQgc25hcHNob3QgZm9ybWF0IiBnaXR3ZWIub3V0cHV0ICYmCisgICAgZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1IRUFEO3NmPXR4eiIgJiYKKyAgICBncmVwICI0MDMgLSBTbmFwc2hvdCBmb3JtYXQgbm90IGFsbG93ZWQiIGdpdHdlYi5vdXRwdXQgJiYKKyAgICBnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPUhFQUQ7c2Y9emlwIiAmJgorICAgIGdyZXAgIjQwMyAtIFVuc3VwcG9ydGVkIHNuYXBzaG90IGZvcm1hdCIgZ2l0d2ViLm91dHB1dCcKKworCitjYXQgPj5naXR3ZWJfY29uZmlnLnBlcmwgPDxcRU9GCiskZmVhdHVyZXsnc25hcHNob3QnfXsnZGVmYXVsdCd9ID0gWyd0Z3onLCd0YnoyJywndHh6JywnemlwJ107CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3NuYXBzaG90czogYWxsIGVuYWJsZWQgaW4gZGVmYXVsdCwgdXNlIGRlZmF1bHQgZGlzYWJsZWQgdmFsdWUnIFwKKyAgICAnZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1IRUFEO3NmPXRneiIgJiYKKyAgICBncmVwICJTdGF0dXM6IDIwMCBPSyIgZ2l0d2ViLm91dHB1dCAmJgorICAgIGdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9SEVBRDtzZj10YnoyIiAmJgorICAgIGdyZXAgIlN0YXR1czogMjAwIE9LIiBnaXR3ZWIub3V0cHV0ICYmCisgICAgZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1IRUFEO3NmPXR4eiIgJiYKKyAgICBncmVwICI0MDMgLSBTbmFwc2hvdCBmb3JtYXQgbm90IGFsbG93ZWQiIGdpdHdlYi5vdXRwdXQgJiYKKyAgICBnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPUhFQUQ7c2Y9emlwIiAmJgorICAgIGdyZXAgIlN0YXR1czogMjAwIE9LIiBnaXR3ZWIub3V0cHV0JworCisKK2NhdCA+PmdpdHdlYl9jb25maWcucGVybCA8PFxFT0YKKyRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyd6aXAnfXsnZGlzYWJsZWQnfSA9IDE7CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3NuYXBzaG90czogemlwIGV4cGxpY2l0bHkgZGlzYWJsZWQnIFwKKyAgICAnZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1IRUFEO3NmPXppcCIgJiYKKyAgICBncmVwICI0MDMgLSBTbmFwc2hvdCBmb3JtYXQgbm90IGFsbG93ZWQiIGdpdHdlYi5vdXRwdXQnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLm91dHB1dCcKKworCitjYXQgPj5naXR3ZWJfY29uZmlnLnBlcmwgPDxcRU9GCiska25vd25fc25hcHNob3RfZm9ybWF0c3sndGd6J317J2Rpc2FibGVkJ30gPSAwOworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdzbmFwc2hvdHM6IHRneiBleHBsaWNpdGx5IGVuYWJsZWQnIFwKKyAgICAnZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1IRUFEO3NmPXRneiIgJiYKKyAgICBncmVwICJTdGF0dXM6IDIwMCBPSyIgZ2l0d2ViLm91dHB1dCcKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycycKKworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgc25hcHNob3QgaGFzaCBpZHMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc25hcHNob3RzOiBnb29kIHRyZWUtaXNoIGlkJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1tYXN0ZXI7c2Y9dGd6IiAmJgorCWdyZXAgIlN0YXR1czogMjAwIE9LIiBnaXR3ZWIub3V0cHV0CisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmhlYWRlcnMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NuYXBzaG90czogYmFkIHRyZWUtaXNoIGlkJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1mcml6enVtRnJhenp1bTtzZj10Z3oiICYmCisJZ3JlcCAiNDA0IC0gT2JqZWN0IGRvZXMgbm90IGV4aXN0IiBnaXR3ZWIub3V0cHV0CisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLm91dHB1dCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc25hcHNob3RzOiBiYWQgdHJlZS1pc2ggaWQgKHRhZ2dlZCBvYmplY3QpJyAnCisJZWNobyBvYmplY3QgPiB0YWctb2JqZWN0ICYmCisJZ2l0IGFkZCB0YWctb2JqZWN0ICYmCisJZ2l0IGNvbW1pdCAtbSAiT2JqZWN0IHRvIGJlIHRhZ2dlZCIgJiYKKwlnaXQgdGFnIHRhZ2dlZC1vYmplY3QgYGdpdCBoYXNoLW9iamVjdCB0YWctb2JqZWN0YCAmJgorCWdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9dGFnZ2VkLW9iamVjdDtzZj10Z3oiICYmCisJZ3JlcCAiNDAwIC0gT2JqZWN0IGlzIG5vdCBhIHRyZWUtaXNoIiBnaXR3ZWIub3V0cHV0CisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLm91dHB1dCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc25hcHNob3RzOiBnb29kIG9iamVjdCBpZCcgJworCUlEPWBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQURgICYmCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD0kSUQ7c2Y9dGd6IiAmJgorCWdyZXAgIlN0YXR1czogMjAwIE9LIiBnaXR3ZWIub3V0cHV0CisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmhlYWRlcnMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NuYXBzaG90czogYmFkIG9iamVjdCBpZCcgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9YWJjZGVmMDEyMzQ7c2Y9dGd6IiAmJgorCWdyZXAgIjQwNCAtIE9iamVjdCBkb2VzIG5vdCBleGlzdCIgZ2l0d2ViLm91dHB1dAorJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5vdXRwdXQnCisKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGxvYWQgY2hlY2tpbmcKKworIyBhbHdheXMgaGl0IHRoZSBsb2FkIGxpbWl0CitjYXQgPj5naXR3ZWJfY29uZmlnLnBlcmwgPDxcRU9GCitvdXIgJG1heGxvYWQgPSAtMTsKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIGNoZWNraW5nOiBsb2FkIHRvbyBoaWdoIChkZWZhdWx0IGFjdGlvbiknICcKKwlnaXR3ZWJfcnVuICJwPS5naXQiICYmCisJZ3JlcCAiU3RhdHVzOiA1MDMgU2VydmljZSBVbmF2YWlsYWJsZSIgZ2l0d2ViLmhlYWRlcnMgJiYKKwlncmVwICI1MDMgLSBUaGUgbG9hZCBhdmVyYWdlIG9uIHRoZSBzZXJ2ZXIgaXMgdG9vIGhpZ2giIGdpdHdlYi5ib2R5CisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmxvZycgIyBqdXN0IGluIGNhc2UKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycycKKworIyB0dXJuIG9mZiBsb2FkIGNoZWNraW5nCitjYXQgPj5naXR3ZWJfY29uZmlnLnBlcmwgPDxcRU9GCitvdXIgJG1heGxvYWQgPSB1bmRlZjsKK0VPRgorCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTUwMi1naXR3ZWItc3RhbmRhbG9uZS1wYXJzZS1vdXRwdXQuc2ggYi90L3Q5NTAyLWdpdHdlYi1zdGFuZGFsb25lLXBhcnNlLW91dHB1dC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZDgzODkwCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTUwMi1naXR3ZWItc3RhbmRhbG9uZS1wYXJzZS1vdXRwdXQuc2gKQEAgLTAsMCArMSwxMTUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgTWFyayBSYWRhCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdHdlYiBhcyBzdGFuZGFsb25lIHNjcmlwdCAocGFyc2luZyBzY3JpcHQgb3V0cHV0KS4KKworVGhpcyB0ZXN0IHJ1bnMgZ2l0d2ViIChnaXQgd2ViIGludGVyZmFjZSkgYXMgYSBDR0kgc2NyaXB0IGZyb20gdGhlCitjb21tYW5kbGluZSwgYW5kIGNoZWNrcyB0aGF0IGl0IHByb2R1Y2VzIHRoZSBjb3JyZWN0IG91dHB1dCwgZWl0aGVyCitpbiB0aGUgSFRUUCBoZWFkZXIgb3IgdGhlIGFjdHVhbCBzY3JpcHQgb3V0cHV0LicKKworCisuIC4vZ2l0d2ViLWxpYi5zaAorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgc25hcHNob3QgZmlsZSBuYW1lIGFuZCBwcmVmaXgKKworY2F0ID4+Z2l0d2ViX2NvbmZpZy5wZXJsIDw8XEVPRgorCiska25vd25fc25hcHNob3RfZm9ybWF0c3sndGFyJ30gPSB7CisJJ2Rpc3BsYXknID0+ICd0YXInLAorCSd0eXBlJyA9PiAnYXBwbGljYXRpb24veC10YXInLAorCSdzdWZmaXgnID0+ICcudGFyJywKKwknZm9ybWF0JyA9PiAndGFyJywKK307CisKKyRmZWF0dXJleydzbmFwc2hvdCd9eydkZWZhdWx0J30gPSBbJ3RhciddOworRU9GCisKKyMgQ2FsbCBjaGVja19zbmFwc2hvdCB3aXRoIHRoZSBhcmd1bWVudHMgIjxiYXNlbmFtZT4gWzxwcmVmaXg+XSIKKyMKKyMgVGhpcyB3aWxsIGNoZWNrIHRoYXQgZ2l0d2ViIEhUVFAgaGVhZGVyIGNvbnRhaW5zIHByb3Bvc2VkIGZpbGVuYW1lCisjIGFzIDxiYXNlbmFtZT4gd2l0aCAnLnRhcicgc3VmZml4IGFkZGVkLCBhbmQgdGhhdCBnZW5lcmF0ZWQgdGFyZmlsZQorIyAoZ2l0d2ViIG1lc3NhZ2UgYm9keSkgaGFzIDxwcmVmaXg+IGFzIHByZWZpeCBmb3IgYWwgZmlsZXMgaW4gdGFyZmlsZQorIworIyA8cHJlZml4PiBkZWZhdWx0IHRvIDxiYXNlbmFtZT4KK2NoZWNrX3NuYXBzaG90ICgpIHsKKwliYXNlbmFtZT0kMQorCXByZWZpeD0kezI6LSIkMSJ9CisJZWNobyAiYmFzZW5hbWU9JGJhc2VuYW1lIgorCWdyZXAgImZpbGVuYW1lPS4qJGJhc2VuYW1lLnRhciIgZ2l0d2ViLmhlYWRlcnMgPi9kZXYvbnVsbCAyPiYxICYmCisJIiRUQVIiIHRmIGdpdHdlYi5ib2R5ID5maWxlX2xpc3QgJiYKKwkhIGdyZXAgLXYgIl4kcHJlZml4LyIgZmlsZV9saXN0Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfY29tbWl0IGZpcnN0IGZvbyAmJgorCWdpdCBicmFuY2ggeHgvdGVzdCAmJgorCUZVTExfSUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJU0hPUlRfSUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tc2hvcnQ9NyBIRUFEKQorJwordGVzdF9kZWJ1ZyAnCisJZWNobyAiRlVMTF9JRCAgPSAkRlVMTF9JRCIKKwllY2hvICJTSE9SVF9JRCA9ICRTSE9SVF9JRCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc25hcHNob3Q6IGZ1bGwgc2hhMScgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9JEZVTExfSUQ7c2Y9dGFyIiAmJgorCWNoZWNrX3NuYXBzaG90ICIuZ2l0LSRTSE9SVF9JRCIKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycyAmJiBjYXQgZmlsZV9saXN0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzbmFwc2hvdDogc2hvcnRlbmVkIHNoYTEnICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPSRTSE9SVF9JRDtzZj10YXIiICYmCisJY2hlY2tfc25hcHNob3QgIi5naXQtJFNIT1JUX0lEIgorJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzICYmIGNhdCBmaWxlX2xpc3QnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NuYXBzaG90OiBhbG1vc3QgZnVsbCBzaGExJyAnCisJSUQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQ9MzAgSEVBRCkgJiYKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPSRJRDtzZj10YXIiICYmCisJY2hlY2tfc25hcHNob3QgIi5naXQtJFNIT1JUX0lEIgorJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzICYmIGNhdCBmaWxlX2xpc3QnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NuYXBzaG90OiBIRUFEJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1IRUFEO3NmPXRhciIgJiYKKwljaGVja19zbmFwc2hvdCAiLmdpdC1IRUFELSRTSE9SVF9JRCIKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycyAmJiBjYXQgZmlsZV9saXN0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzbmFwc2hvdDogc2hvcnQgYnJhbmNoIG5hbWUgKG1hc3RlciknICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPW1hc3RlcjtzZj10YXIiICYmCisJSUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tc2hvcnQ9NyBtYXN0ZXIpICYmCisJY2hlY2tfc25hcHNob3QgIi5naXQtbWFzdGVyLSRJRCIKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycyAmJiBjYXQgZmlsZV9saXN0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzbmFwc2hvdDogc2hvcnQgdGFnIG5hbWUgKGZpcnN0KScgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9Zmlyc3Q7c2Y9dGFyIiAmJgorCUlEPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXNob3J0PTcgZmlyc3QpICYmCisJY2hlY2tfc25hcHNob3QgIi5naXQtZmlyc3QtJElEIgorJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzICYmIGNhdCBmaWxlX2xpc3QnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NuYXBzaG90OiBmdWxsIGJyYW5jaCBuYW1lIChyZWZzL2hlYWRzL21hc3RlciknICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPXJlZnMvaGVhZHMvbWFzdGVyO3NmPXRhciIgJiYKKwlJRD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1zaG9ydD03IG1hc3RlcikgJiYKKwljaGVja19zbmFwc2hvdCAiLmdpdC1tYXN0ZXItJElEIgorJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzICYmIGNhdCBmaWxlX2xpc3QnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NuYXBzaG90OiBmdWxsIHRhZyBuYW1lIChyZWZzL3RhZ3MvZmlyc3QpJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1yZWZzL3RhZ3MvZmlyc3Q7c2Y9dGFyIiAmJgorCWNoZWNrX3NuYXBzaG90ICIuZ2l0LWZpcnN0IgorJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzICYmIGNhdCBmaWxlX2xpc3QnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NuYXBzaG90OiBoaWVyYXJjaGljYWwgYnJhbmNoIG5hbWUgKHh4L3Rlc3QpJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD14eC90ZXN0O3NmPXRhciIgJiYKKwkhIGdyZXAgImZpbGVuYW1lPS4qLyIgZ2l0d2ViLmhlYWRlcnMKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5NjAwLWN2c2ltcG9ydC5zaCBiL3QvdDk2MDAtY3ZzaW1wb3J0LnNoCmluZGV4IDQzMjJhMGMuLjM2MzM0NWYgMTAwNzU1Ci0tLSBhL3QvdDk2MDAtY3ZzaW1wb3J0LnNoCisrKyBiL3QvdDk2MDAtY3ZzaW1wb3J0LnNoCkBAIC0xLDcgKzEsNyBAQAogIyEvYmluL3NoCiAKIHRlc3RfZGVzY3JpcHRpb249J2dpdCBjdnNpbXBvcnQgYmFzaWMgdGVzdHMnCi0uIC4vdGVzdC1saWIuc2gKKy4gLi9saWItY3ZzLnNoCiAKIGlmICEgdGVzdF9oYXZlX3ByZXJlcSBQRVJMOyB0aGVuCiAJc2F5ICdza2lwcGluZyBnaXQgY3ZzaW1wb3J0IHRlc3RzLCBwZXJsIG5vdCBhdmFpbGFibGUnCkBAIC0xMCwzNyArMTAsMTMgQEAKIAogQ1ZTUk9PVD0kKHB3ZCkvY3Zzcm9vdAogZXhwb3J0IENWU1JPT1QKLXVuc2V0IENWU19TRVJWRVIKLSMgZm9yIGNsZWFuIGN2c3BzIGNhY2hlCi1IT01FPSQocHdkKQotZXhwb3J0IEhPTUUKIAotaWYgISB0eXBlIGN2cyA+L2Rldi9udWxsIDI+JjEKLXRoZW4KLQlzYXkgJ3NraXBwaW5nIGN2c2ltcG9ydCB0ZXN0cywgY3ZzIG5vdCBmb3VuZCcKLQl0ZXN0X2RvbmUKLWZpCi0KLWN2c3BzX3ZlcnNpb249YGN2c3BzIC1oIDI+JjEgfCBzZWQgLW5lICdzL2N2c3BzIHZlcnNpb24gLy9wJ2AKLWNhc2UgIiRjdnNwc192ZXJzaW9uIiBpbgotMi4xIHwgMi4yKikKLQk7OwotJycpCi0Jc2F5ICdza2lwcGluZyBjdnNpbXBvcnQgdGVzdHMsIGN2c3BzIG5vdCBmb3VuZCcKLQl0ZXN0X2RvbmUKLQk7OwotKikKLQlzYXkgJ3NraXBwaW5nIGN2c2ltcG9ydCB0ZXN0cywgdW5zdXBwb3J0ZWQgY3ZzcHMgdmVyc2lvbicKLQl0ZXN0X2RvbmUKLQk7OwotZXNhYwotCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjdnNyb290JyAnY3ZzIGluaXQnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjdnNyb290JyAnJENWUyBpbml0JwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhIGN2cyBtb2R1bGUnICcKIAogCW1rZGlyICIkQ1ZTUk9PVC9tb2R1bGUiICYmCi0JY3ZzIGNvIC1kIG1vZHVsZS1jdnMgbW9kdWxlICYmCisJJENWUyBjbyAtZCBtb2R1bGUtY3ZzIG1vZHVsZSAmJgogCWNkIG1vZHVsZS1jdnMgJiYKIAljYXQgPDxFT0YgPm9fZm9ydHVuYSAmJgogTyBGb3J0dW5hCkBAIC01OSwxMyArMzUsMTMgQEAKIHBvdGVzdGF0ZW0KIGRpc3NvbHZpdCB1dCBnbGFjaWVtLgogRU9GCi0JY3ZzIGFkZCBvX2ZvcnR1bmEgJiYKKwkkQ1ZTIGFkZCBvX2ZvcnR1bmEgJiYKIAljYXQgPDxFT0YgPm1lc3NhZ2UgJiYKIGFkZCAiTyBGb3J0dW5hIiBseXJpY3MKIAogVGhlc2UgcHVibGljIGRvbWFpbiBseXJpY3MgbWFrZSBhbiBleGNlbGxlbnQgc2FtcGxlIHRleHQuCiBFT0YKLQljdnMgY29tbWl0IC1GIG1lc3NhZ2UgJiYKKwkkQ1ZTIGNvbW1pdCAtRiBtZXNzYWdlICYmCiAJY2QgLi4KICcKIApAQCAtMTAzLDcgKzc5LDcgQEAKIAogTXkgTGF0aW4gaXMgdGVycmlibGUuCiBFT0YKLQljdnMgY29tbWl0IC1GIG1lc3NhZ2UgJiYKKwkkQ1ZTIGNvbW1pdCAtRiBtZXNzYWdlICYmCiAJY2QgLi4KICcKIApAQCAtMTIxLDggKzk3LDggQEAKIAogCWNkIG1vZHVsZS1jdnMgJiYKIAkJZWNobyAxID50aWNrICYmCi0JCWN2cyBhZGQgdGljayAmJgotCQljdnMgY29tbWl0IC1tIDEKKwkJJENWUyBhZGQgdGljayAmJgorCQkkQ1ZTIGNvbW1pdCAtbSAxCiAJY2QgLi4KIAogJwpAQCAtMTQwLDcgKzExNiw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ltcG9ydCBmcm9tIGEgQ1ZTIHdvcmtpbmcgdHJlZScgJwogCi0JY3ZzIGNvIC1kIGltcG9ydC1mcm9tLXd0IG1vZHVsZSAmJgorCSRDVlMgY28gLWQgaW1wb3J0LWZyb20td3QgbW9kdWxlICYmCiAJY2QgaW1wb3J0LWZyb20td3QgJiYKIAkJZ2l0IGN2c2ltcG9ydCAtYSAtejAgJiYKIAkJZWNobyAxID5leHBlY3QgJiYKQEAgLTE1MCw0ICsxMjYsNiBAQAogCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZW50aXJlIEhFQUQnICd0ZXN0X2NtcF9icmFuY2hfdHJlZSBtYXN0ZXInCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTYwMS1jdnNpbXBvcnQtdmVuZG9yLWJyYW5jaC5zaCBiL3QvdDk2MDEtY3ZzaW1wb3J0LXZlbmRvci1icmFuY2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2FmYWY1NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDEtY3ZzaW1wb3J0LXZlbmRvci1icmFuY2guc2gKQEAgLTAsMCArMSw4NiBAQAorIyEvYmluL3NoCisKKyMgRGVzY3JpcHRpb24gb2YgdGhlIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5OgorIworIyAgICBpbXBvcnRlZC1vbmNlLnR4dDoKKyMKKyMgICAgICAgSW1wb3J0ZWQgb25jZS4gIDEuMSBhbmQgMS4xLjEuMSBzaG91bGQgYmUgaWRlbnRpY2FsLgorIworIyAgICBpbXBvcnRlZC10d2ljZS50eHQ6CisjCisjICAgICAgIEltcG9ydGVkIHR3aWNlLiAgSEVBRCBzaG91bGQgcmVmbGVjdCB0aGUgY29udGVudHMgb2YgdGhlCisjICAgICAgIHNlY29uZCBpbXBvcnQgKGkuZS4sIGhhdmUgdGhlIHNhbWUgY29udGVudHMgYXMgMS4xLjEuMikuCisjCisjICAgIGltcG9ydGVkLW1vZGlmaWVkLnR4dDoKKyMKKyMgICAgICAgSW1wb3J0ZWQsIHRoZW4gbW9kaWZpZWQgb24gSEVBRC4gIEhFQUQgc2hvdWxkIHJlZmxlY3QgdGhlCisjICAgICAgIG1vZGlmaWNhdGlvbi4KKyMKKyMgICAgaW1wb3J0ZWQtbW9kaWZpZWQtaW1wb3J0ZWQudHh0OgorIworIyAgICAgICBJbXBvcnRlZCwgdGhlbiBtb2RpZmllZCBvbiBIRUFELCB0aGVuIGltcG9ydGVkIGFnYWluLgorIworIyAgICBhZGRlZC1pbXBvcnRlZC50eHQsdjoKKyMKKyMgICAgICAgQWRkZWQgd2l0aCAnY3ZzIGFkZCcgdG8gY3JlYXRlIDEuMSwgdGhlbiBpbXBvcnRlZCB3aXRoCisjICAgICAgIGNvbXBsZXRlbHkgZGlmZmVyZW50IGNvbnRlbnRzIHRvIGNyZWF0ZSAxLjEuMS4xLCB0aGVyZWZvcmUgdGhlCisjICAgICAgIHZlbmRvciBicmFuY2ggd2FzIG5ldmVyIHRoZSBkZWZhdWx0IGJyYW5jaC4KKyMKKyMgICAgaW1wb3J0ZWQtYW5vbnltb3VzbHkudHh0OgorIworIyAgICAgICBMaWtlIGltcG9ydGVkLXR3aWNlLnR4dCwgYnV0IHdpdGggYSB2ZW5kb3IgYnJhbmNoIHdob3NlIGJyYW5jaAorIyAgICAgICB0YWcgaGFzIGJlZW4gcmVtb3ZlZC4KKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGN2c2ltcG9ydCBoYW5kbGluZyBvZiB2ZW5kb3IgYnJhbmNoZXMnCisuIC4vbGliLWN2cy5zaAorCitDVlNST09UPSIkVEVTVF9ESVJFQ1RPUlkiL3Q5NjAxL2N2c3Jvb3QKK2V4cG9ydCBDVlNST09UCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ltcG9ydCBhIG1vZHVsZSB3aXRoIGEgdmVuZG9yIGJyYW5jaCcgJworCisJZ2l0IGN2c2ltcG9ydCAtQyBtb2R1bGUtZ2l0IG1vZHVsZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIEhFQUQgb3V0IG9mIGN2cyByZXBvc2l0b3J5JyAndGVzdF9jdnNfY28gbWFzdGVyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBtYXN0ZXIgb3V0IG9mIGdpdCByZXBvc2l0b3J5JyAndGVzdF9naXRfY28gbWFzdGVyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBhIGZpbGUgdGhhdCB3YXMgaW1wb3J0ZWQgb25jZScgJworCisJdGVzdF9jbXBfYnJhbmNoX2ZpbGUgbWFzdGVyIGltcG9ydGVkLW9uY2UudHh0CisKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnY2hlY2sgYSBmaWxlIHRoYXQgd2FzIGltcG9ydGVkIHR3aWNlJyAnCisKKwl0ZXN0X2NtcF9icmFuY2hfZmlsZSBtYXN0ZXIgaW1wb3J0ZWQtdHdpY2UudHh0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgYSBmaWxlIHRoYXQgd2FzIGltcG9ydGVkIHRoZW4gbW9kaWZpZWQgb24gSEVBRCcgJworCisJdGVzdF9jbXBfYnJhbmNoX2ZpbGUgbWFzdGVyIGltcG9ydGVkLW1vZGlmaWVkLnR4dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGEgZmlsZSB0aGF0IHdhcyBpbXBvcnRlZCwgbW9kaWZpZWQsIHRoZW4gaW1wb3J0ZWQgYWdhaW4nICcKKworCXRlc3RfY21wX2JyYW5jaF9maWxlIG1hc3RlciBpbXBvcnRlZC1tb2RpZmllZC1pbXBvcnRlZC50eHQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBhIGZpbGUgdGhhdCB3YXMgYWRkZWQgdG8gSEVBRCB0aGVuIGltcG9ydGVkJyAnCisKKwl0ZXN0X2NtcF9icmFuY2hfZmlsZSBtYXN0ZXIgYWRkZWQtaW1wb3J0ZWQudHh0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYSB2ZW5kb3IgYnJhbmNoIHdob3NlIHRhZyBoYXMgYmVlbiByZW1vdmVkJyAnCisKKwl0ZXN0X2NtcF9icmFuY2hfZmlsZSBtYXN0ZXIgaW1wb3J0ZWQtYW5vbnltb3VzbHkudHh0CisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5NjAxL2N2c3Jvb3QvLmdpdGF0dHJpYnV0ZXMgYi90L3Q5NjAxL2N2c3Jvb3QvLmdpdGF0dHJpYnV0ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYyYjEyZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDEvY3Zzcm9vdC8uZ2l0YXR0cmlidXRlcwpAQCAtMCwwICsxIEBACisqIC13aGl0ZXNwYWNlCmRpZmYgLS1naXQgYS90L3Q5NjAxL2N2c3Jvb3QvQ1ZTUk9PVC8uZ2l0aWdub3JlIGIvdC90OTYwMS9jdnNyb290L0NWU1JPT1QvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmI5YjM0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMS9jdnNyb290L0NWU1JPT1QvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDIgQEAKK2hpc3RvcnkKK3ZhbC10YWdzCmRpZmYgLS1naXQgYS90L3Q5NjAxL2N2c3Jvb3QvbW9kdWxlL2FkZGVkLWltcG9ydGVkLnR4dCx2IGIvdC90OTYwMS9jdnNyb290L21vZHVsZS9hZGRlZC1pbXBvcnRlZC50eHQsdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjgzMDcyCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMS9jdnNyb290L21vZHVsZS9hZGRlZC1pbXBvcnRlZC50eHQsdgpAQCAtMCwwICsxLDQ0IEBACitoZWFkCTEuMTsKK2FjY2VzczsKK3N5bWJvbHMKKwl2dGFnLTQ6MS4xLjEuMQorCXZicmFuY2hBOjEuMS4xOworbG9ja3M7IHN0cmljdDsKK2NvbW1lbnQJQCMgQDsKKworCisxLjEKK2RhdGUJMjAwNC4wMi4wOS4xNS40My4xNTsJYXV0aG9yIGtmb2dlbDsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjEuMS4xOworbmV4dAk7CisKKzEuMS4xLjEKK2RhdGUJMjAwNC4wMi4wOS4xNS40My4xNjsJYXV0aG9yIGtmb2dlbDsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworCitkZXNjCitAQAorCisKKzEuMQorbG9nCitAQWRkIGEgZmlsZSB0byB0aGUgd29ya2luZyBjb3B5LgorQAordGV4dAorQEFkZGluZyB0aGlzIGZpbGUsIGJlZm9yZSBpbXBvcnRpbmcgaXQgd2l0aCBkaWZmZXJlbnQgY29udGVudHMuCitACisKKworMS4xLjEuMQorbG9nCitASW1wb3J0ICh2YnJhbmNoQSwgdnRhZy00KS4KK0AKK3RleHQKK0BkMSAxCithMSAxCitUaGlzIGlzIHZ0YWctNCAob24gdmJyYW5jaEEpIG9mIGFkZGVkLXRoZW4taW1wb3J0ZWQudHh0LgorQAorCmRpZmYgLS1naXQgYS90L3Q5NjAxL2N2c3Jvb3QvbW9kdWxlL2ltcG9ydGVkLWFub255bW91c2x5LnR4dCx2IGIvdC90OTYwMS9jdnNyb290L21vZHVsZS9pbXBvcnRlZC1hbm9ueW1vdXNseS50eHQsdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWUxYjBjCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMS9jdnNyb290L21vZHVsZS9pbXBvcnRlZC1hbm9ueW1vdXNseS50eHQsdgpAQCAtMCwwICsxLDQyIEBACitoZWFkCTEuMTsKK2JyYW5jaAkxLjEuMTsKK2FjY2VzczsKK3N5bWJvbHMKKwl2dGFnLTE6MS4xLjEuMTsKK2xvY2tzOyBzdHJpY3Q7Citjb21tZW50CUAjIEA7CisKKworMS4xCitkYXRlCTIwMDQuMDIuMDkuMTUuNDMuMTM7CWF1dGhvciBrZm9nZWw7CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4xLjEuMTsKK25leHQJOworCisxLjEuMS4xCitkYXRlCTIwMDQuMDIuMDkuMTUuNDMuMTM7CWF1dGhvciBrZm9nZWw7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKworZGVzYworQEAKKworCisxLjEKK2xvZworQEluaXRpYWwgcmV2aXNpb24KK0AKK3RleHQKK0BUaGlzIGlzIHZ0YWctMSAob24gdmJyYW5jaEEpIG9mIGltcG9ydGVkLWFub255bW91c2x5LnR4dC4KK0AKKworCisxLjEuMS4xCitsb2cKK0BJbXBvcnQgKHZicmFuY2hBLCB2dGFnLTEpLgorQAordGV4dAorQEAKKworCmRpZmYgLS1naXQgYS90L3Q5NjAxL2N2c3Jvb3QvbW9kdWxlL2ltcG9ydGVkLW1vZGlmaWVkLWltcG9ydGVkLnR4dCx2IGIvdC90OTYwMS9jdnNyb290L21vZHVsZS9pbXBvcnRlZC1tb2RpZmllZC1pbXBvcnRlZC50eHQsdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTgzMGFlCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMS9jdnNyb290L21vZHVsZS9pbXBvcnRlZC1tb2RpZmllZC1pbXBvcnRlZC50eHQsdgpAQCAtMCwwICsxLDc2IEBACitoZWFkCTEuMjsKK2FjY2VzczsKK3N5bWJvbHMKKwl2dGFnLTI6MS4xLjEuMgorCXZ0YWctMToxLjEuMS4xCisJdmJyYW5jaEE6MS4xLjE7Citsb2Nrczsgc3RyaWN0OworY29tbWVudAlAIyBAOworCisKKzEuMgorZGF0ZQkyMDA0LjAyLjA5LjE1LjQzLjE0OwlhdXRob3Iga2ZvZ2VsOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4xOworCisxLjEKK2RhdGUJMjAwNC4wMi4wOS4xNS40My4xMzsJYXV0aG9yIGtmb2dlbDsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjEuMS4xOworbmV4dAk7CisKKzEuMS4xLjEKK2RhdGUJMjAwNC4wMi4wOS4xNS40My4xMzsJYXV0aG9yIGtmb2dlbDsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuMS4xLjI7CisKKzEuMS4xLjIKK2RhdGUJMjAwNC4wMi4wOS4xNS40My4xMzsJYXV0aG9yIGtmb2dlbDsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworCitkZXNjCitAQAorCisKKzEuMgorbG9nCitARmlyc3QgcmVndWxhciBjb21taXQsIHRvIGltcG9ydGVkLW1vZGlmaWVkLWltcG9ydGVkLnR4dCwgb24gSEVBRC4KK0AKK3RleHQKK0BUaGlzIGlzIGEgbW9kaWZpY2F0aW9uIG9mIGltcG9ydGVkLW1vZGlmaWVkLWltcG9ydGVkLnR4dCBvbiBIRUFELgorSXQgc2hvdWxkIHN1cGVyc2VkZSB0aGUgdmVyc2lvbiBmcm9tIHRoZSB2ZW5kb3IgYnJhbmNoLgorQAorCisKKzEuMQorbG9nCitASW5pdGlhbCByZXZpc2lvbgorQAordGV4dAorQGQxIDIKK2EyIDEKK1RoaXMgaXMgdnRhZy0xIChvbiB2YnJhbmNoQSkgb2YgaW1wb3J0ZWQtbW9kaWZpZWQtaW1wb3J0ZWQudHh0LgorQAorCisKKzEuMS4xLjEKK2xvZworQEltcG9ydCAodmJyYW5jaEEsIHZ0YWctMSkuCitACit0ZXh0CitAQAorCisKKzEuMS4xLjIKK2xvZworQEltcG9ydCAodmJyYW5jaEEsIHZ0YWctMikuCitACit0ZXh0CitAZDEgMQorYTEgMQorVGhpcyBpcyB2dGFnLTIgKG9uIHZicmFuY2hBKSBvZiBpbXBvcnRlZC1tb2RpZmllZC1pbXBvcnRlZC50eHQuCitACisKKwpkaWZmIC0tZ2l0IGEvdC90OTYwMS9jdnNyb290L21vZHVsZS9pbXBvcnRlZC1tb2RpZmllZC50eHQsdiBiL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvaW1wb3J0ZWQtbW9kaWZpZWQudHh0LHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJjZmU0NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvaW1wb3J0ZWQtbW9kaWZpZWQudHh0LHYKQEAgLTAsMCArMSw1OSBAQAoraGVhZAkxLjI7CithY2Nlc3M7CitzeW1ib2xzCisJdnRhZy0xOjEuMS4xLjEKKwl2YnJhbmNoQToxLjEuMTsKK2xvY2tzOyBzdHJpY3Q7Citjb21tZW50CUAjIEA7CisKKworMS4yCitkYXRlCTIwMDQuMDIuMDkuMTUuNDMuMTQ7CWF1dGhvciBrZm9nZWw7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjE7CisKKzEuMQorZGF0ZQkyMDA0LjAyLjA5LjE1LjQzLjEzOwlhdXRob3Iga2ZvZ2VsOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMS4xLjE7CituZXh0CTsKKworMS4xLjEuMQorZGF0ZQkyMDA0LjAyLjA5LjE1LjQzLjEzOwlhdXRob3Iga2ZvZ2VsOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisKK2Rlc2MKK0BACisKKworMS4yCitsb2cKK0BDb21taXQgb24gSEVBRC4KK0AKK3RleHQKK0BUaGlzIGlzIGEgbW9kaWZpY2F0aW9uIG9mIGltcG9ydGVkLW1vZGlmaWVkLnR4dCBvbiBIRUFELgorSXQgc2hvdWxkIHN1cGVyc2VkZSB0aGUgdmVyc2lvbiBmcm9tIHRoZSB2ZW5kb3IgYnJhbmNoLgorQAorCisKKzEuMQorbG9nCitASW5pdGlhbCByZXZpc2lvbgorQAordGV4dAorQGQxIDIKK2EyIDEKK1RoaXMgaXMgdnRhZy0xIChvbiB2YnJhbmNoQSkgb2YgaW1wb3J0ZWQtbW9kaWZpZWQudHh0LgorQAorCisKKzEuMS4xLjEKK2xvZworQEltcG9ydCAodmJyYW5jaEEsIHZ0YWctMSkuCitACit0ZXh0CitAQAorCisKZGlmZiAtLWdpdCBhL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvaW1wb3J0ZWQtb25jZS50eHQsdiBiL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvaW1wb3J0ZWQtb25jZS50eHQsdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWRkODJiCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMS9jdnNyb290L21vZHVsZS9pbXBvcnRlZC1vbmNlLnR4dCx2CkBAIC0wLDAgKzEsNDMgQEAKK2hlYWQJMS4xOworYnJhbmNoCTEuMS4xOworYWNjZXNzOworc3ltYm9scworCXZ0YWctMToxLjEuMS4xCisJdmJyYW5jaEE6MS4xLjE7Citsb2Nrczsgc3RyaWN0OworY29tbWVudAlAIyBAOworCisKKzEuMQorZGF0ZQkyMDA0LjAyLjA5LjE1LjQzLjEzOwlhdXRob3Iga2ZvZ2VsOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMS4xLjE7CituZXh0CTsKKworMS4xLjEuMQorZGF0ZQkyMDA0LjAyLjA5LjE1LjQzLjEzOwlhdXRob3Iga2ZvZ2VsOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisKK2Rlc2MKK0BACisKKworMS4xCitsb2cKK0BJbml0aWFsIHJldmlzaW9uCitACit0ZXh0CitAVGhpcyBpcyB2dGFnLTEgKG9uIHZicmFuY2hBKSBvZiBpbXBvcnRlZC1vbmNlLnR4dC4KK0AKKworCisxLjEuMS4xCitsb2cKK0BJbXBvcnQgKHZicmFuY2hBLCB2dGFnLTEpLgorQAordGV4dAorQEAKKworCmRpZmYgLS1naXQgYS90L3Q5NjAxL2N2c3Jvb3QvbW9kdWxlL2ltcG9ydGVkLXR3aWNlLnR4dCx2IGIvdC90OTYwMS9jdnNyb290L21vZHVsZS9pbXBvcnRlZC10d2ljZS50eHQsdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWYzZjFiCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMS9jdnNyb290L21vZHVsZS9pbXBvcnRlZC10d2ljZS50eHQsdgpAQCAtMCwwICsxLDYwIEBACitoZWFkCTEuMTsKK2JyYW5jaAkxLjEuMTsKK2FjY2VzczsKK3N5bWJvbHMKKwl2dGFnLTI6MS4xLjEuMgorCXZ0YWctMToxLjEuMS4xCisJdmJyYW5jaEE6MS4xLjE7Citsb2Nrczsgc3RyaWN0OworY29tbWVudAlAIyBAOworCisKKzEuMQorZGF0ZQkyMDA0LjAyLjA5LjE1LjQzLjEzOwlhdXRob3Iga2ZvZ2VsOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMS4xLjE7CituZXh0CTsKKworMS4xLjEuMQorZGF0ZQkyMDA0LjAyLjA5LjE1LjQzLjEzOwlhdXRob3Iga2ZvZ2VsOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4xLjEuMjsKKworMS4xLjEuMgorZGF0ZQkyMDA0LjAyLjA5LjE1LjQzLjEzOwlhdXRob3Iga2ZvZ2VsOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisKK2Rlc2MKK0BACisKKworMS4xCitsb2cKK0BJbml0aWFsIHJldmlzaW9uCitACit0ZXh0CitAVGhpcyBpcyB2dGFnLTEgKG9uIHZicmFuY2hBKSBvZiBpbXBvcnRlZC10d2ljZS50eHQuCitACisKKworMS4xLjEuMQorbG9nCitASW1wb3J0ICh2YnJhbmNoQSwgdnRhZy0xKS4KK0AKK3RleHQKK0BACisKKworMS4xLjEuMgorbG9nCitASW1wb3J0ICh2YnJhbmNoQSwgdnRhZy0yKS4KK0AKK3RleHQKK0BkMSAxCithMSAxCitUaGlzIGlzIHZ0YWctMiAob24gdmJyYW5jaEEpIG9mIGltcG9ydGVkLXR3aWNlLnR4dC4KK0AKKworCmRpZmYgLS1naXQgYS90L3Q5NjAyLWN2c2ltcG9ydC1icmFuY2hlcy10YWdzLnNoIGIvdC90OTYwMi1jdnNpbXBvcnQtYnJhbmNoZXMtdGFncy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42Nzg3OGIyCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMi1jdnNpbXBvcnQtYnJhbmNoZXMtdGFncy5zaApAQCAtMCwwICsxLDc5IEBACisjIS9iaW4vc2gKKworIyBBIGRlc2NyaXB0aW9uIG9mIHRoZSByZXBvc2l0b3J5IHVzZWQgZm9yIHRoaXMgdGVzdCBjYW4gYmUgZm91bmQgaW4KKyMgdDk2MDIvUkVBRE1FLgorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY3ZzaW1wb3J0IGhhbmRsaW5nIG9mIGJyYW5jaGVzIGFuZCB0YWdzJworLiAuL2xpYi1jdnMuc2gKKworQ1ZTUk9PVD0iJFRFU1RfRElSRUNUT1JZIi90OTYwMi9jdnNyb290CitleHBvcnQgQ1ZTUk9PVAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbXBvcnQgbW9kdWxlJyAnCisKKwlnaXQgY3ZzaW1wb3J0IC1DIG1vZHVsZS1naXQgbW9kdWxlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBicmFuY2ggbWFzdGVyJyAnCisKKwl0ZXN0X2NtcF9icmFuY2hfdHJlZSBtYXN0ZXIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGJyYW5jaCB2ZW5kb3JicmFuY2gnICcKKworCXRlc3RfY21wX2JyYW5jaF90cmVlIHZlbmRvcmJyYW5jaAorCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ3Rlc3QgYnJhbmNoIEJfRlJPTV9JTklUSUFMUycgJworCisJdGVzdF9jbXBfYnJhbmNoX3RyZWUgQl9GUk9NX0lOSVRJQUxTCisKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAndGVzdCBicmFuY2ggQl9GUk9NX0lOSVRJQUxTX0JVVF9PTkUnICcKKworCXRlc3RfY21wX2JyYW5jaF90cmVlIEJfRlJPTV9JTklUSUFMU19CVVRfT05FCisKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAndGVzdCBicmFuY2ggQl9NSVhFRCcgJworCisJdGVzdF9jbXBfYnJhbmNoX3RyZWUgQl9NSVhFRAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgYnJhbmNoIEJfU1BMSVQnICcKKworCXRlc3RfY21wX2JyYW5jaF90cmVlIEJfU1BMSVQKKworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICd0ZXN0IHRhZyB2ZW5kb3J0YWcnICcKKworCXRlc3RfY21wX2JyYW5jaF90cmVlIHZlbmRvcnRhZworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgdGFnIFRfQUxMX0lOSVRJQUxfRklMRVMnICcKKworCXRlc3RfY21wX2JyYW5jaF90cmVlIFRfQUxMX0lOSVRJQUxfRklMRVMKKworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICd0ZXN0IHRhZyBUX0FMTF9JTklUSUFMX0ZJTEVTX0JVVF9PTkUnICcKKworCXRlc3RfY21wX2JyYW5jaF90cmVlIFRfQUxMX0lOSVRJQUxfRklMRVNfQlVUX09ORQorCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ3Rlc3QgdGFnIFRfTUlYRUQnICcKKworCXRlc3RfY21wX2JyYW5jaF90cmVlIFRfTUlYRUQKKworJworCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTYwMi9SRUFETUUgYi90L3Q5NjAyL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjMxZTBmCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMi9SRUFETUUKQEAgLTAsMCArMSw2MiBAQAorVGhpcyByZXBvc2l0b3J5IGlzIGZvciB0ZXN0aW5nIHRoZSBhYmlsaXR5IHRvIGdyb3VwIHJldmlzaW9ucworY29ycmVjdGx5IGFsb25nIHRhZ3MgYW5kIGJyYW5jaGVzLiAgSGVyZSBpcyBpdHMgaGlzdG9yeToKKworICAxLiAgVGhlIGluaXRpYWwgaW1wb3J0IChyZXZpc2lvbiAxLjEgb2YgZXZlcnlib2R5KSBjcmVhdGVkIGEKKyAgICAgIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgd2l0aCBhIGZpbGUgbmFtZWQgYGRlZmF1bHQnIGluIGVhY2ggZGlyOgorCisgICAgICAgICAgICAuLworICAgICAgICAgICAgICBkZWZhdWx0CisgICAgICAgICAgICAgIHN1YjEvZGVmYXVsdAorICAgICAgICAgICAgICAgICAgIHN1YnN1YkEvZGVmYXVsdAorICAgICAgICAgICAgICAgICAgIHN1YnN1YkIvZGVmYXVsdAorICAgICAgICAgICAgICBzdWIyL2RlZmF1bHQKKyAgICAgICAgICAgICAgICAgICBzdWJzdWJBL2RlZmF1bHQKKyAgICAgICAgICAgICAgc3ViMy9kZWZhdWx0CisKKyAgMi4gIFRoZW4gdGFnZ2VkIGV2ZXJ5b25lIHdpdGggVF9BTExfSU5JVElBTF9GSUxFUy4KKworICAzLiAgVGhlbiB0YWdnZWQgZXZlcnlvbmUgZXhjZXB0IHN1YjEvc3Vic3ViQi9kZWZhdWx0IHdpdGgKKyAgICAgIFRfQUxMX0lOSVRJQUxfRklMRVNfQlVUX09ORS4KKworICA0LiAgVGhlbiBjcmVhdGVkIGJyYW5jaCBCX0ZST01fSU5JVElBTFMgb24gZXZlcnlvbmUuCisKKyAgNS4gIFRoZW4gY3JlYXRlZCBicmFuY2ggQl9GUk9NX0lOSVRJQUxTX0JVVF9PTkUgb24gZXZlcnlvbmUgZXhjZXB0CisgICAgICAvc3ViMS9zdWJzdWJCL2RlZmF1bHQuCisKKyAgNi4gIFRoZW4gY29tbWl0dGVkIG1vZGlmaWNhdGlvbnMgdG8gdHdvIGZpbGVzOiBzdWIzL2RlZmF1bHQsIGFuZAorICAgICAgc3ViMS9zdWJzdWJBL2RlZmF1bHQuCisKKyAgNy4gIFRoZW4gY29tbWl0dGVkIGEgbW9kaWZpY2F0aW9uIHRvIGFsbCA3IGZpbGVzLgorCisgIDguICBUaGVuIGJhY2tkYXRlZCBzdWIzL2RlZmF1bHQgdG8gcmV2aXNpb24gMS4yLCBhbmQKKyAgICAgIHN1YjIvc3Vic3ViQS9kZWZhdWx0IHRvIHJldmlzaW9uIDEuMSwgYW5kIHRhZ2dlZCB3aXRoIFRfTUlYRUQuCisKKyAgOS4gIFNhbWUgYXMgOCwgYnV0IHRhZ2dlZCB3aXRoIC1iIHRvIGNyZWF0ZSBicmFuY2ggQl9NSVhFRC4KKworICAxMC4gU3dpdGNoZWQgdGhlIHdvcmtpbmcgY29weSB0byBCX01JWEVELCBhbmQgYWRkZWQKKyAgICAgIHN1YjIvYnJhbmNoX0JfTUlYRURfb25seS4gIChUaGF0J3Mgd2h5IHRoZSBSQ1MgZmlsZSBpcyBpbgorICAgICAgc3ViMi9BdHRpYy8gLS0gaXQgbmV2ZXIgZXhpc3RlZCBvbiB0cnVuay4pCisKKyAgMTEuIEluIG9uZSBjb21taXQsIG1vZGlmaWVkIGRlZmF1bHQsIHN1YjEvZGVmYXVsdCwgYW5kCisgICAgICBzdWIyL3N1YnN1YkEvZGVmYXVsdCwgb24gYnJhbmNoIEJfTUlYRUQuCisKKyAgMTIuIERpZCAiY3ZzIHVwIC1BIiBvbiBzdWIyL2RlZmF1bHQsIHRoZW4gaW4gb25lIGNvbW1pdCwgbWFkZSBhCisgICAgICBjaGFuZ2UgdG8gc3ViMi9kZWZhdWx0IGFuZCBzdWIyL2JyYW5jaF9CX01JWEVEX29ubHkuICBTbyB0aGlzCisgICAgICBjb21taXQgc2hvdWxkIGJlIHNwcmVhZCBiZXR3ZWVuIHRoZSBicmFuY2ggYW5kIHRoZSB0cnVuay4KKworICAxMy4gRG8gImN2cyB1cCAtQSIgdG8gZ2V0IGV2ZXJ5b25lIGJhY2sgdG8gdHJ1bmssIHRoZW4gbWFrZSBhIG5ldworICAgICAgYnJhbmNoIEJfU1BMSVQgb24gZXZlcnlvbmUgZXhjZXB0IHN1YjEvc3Vic3ViQi9kZWZhdWx0LHYuCisKKyAgMTQuIFN3aXRjaCB0byBicmFuY2ggQl9TUExJVCAoc2VlIHN1YjEvc3Vic3ViQi9kZWZhdWx0IGRpc2FwcGVhcikKKyAgICAgIGFuZCBjb21taXQgYSBjaGFuZ2UgdGhhdCBhZmZlY3RzIGV2ZXJ5b25lIGV4Y2VwdCBzdWIzL2RlZmF1bHQuCisKKyAgMTUuIEFuIGhvdXIgb3Igc28gbGF0ZXIsICJjdnMgdXAgLUEiIHRvIGdldCBzdWIxL3N1YnN1YkIvZGVmYXVsdAorICAgICAgYmFjaywgdGhlbiBjb21taXQgYSBjaGFuZ2Ugb24gdGhhdCBmaWxlLCBvbiB0cnVuay4gIChJdCdzCisgICAgICBpbXBvcnRhbnQgdGhhdCB0aGlzIGNoYW5nZSBoYXBwZW5lZCBhZnRlciB0aGUgcHJldmlvdXMgY29tbWl0cworICAgICAgb24gQl9TUExJVC4pCisKKyAgMTYuIEJyYW5jaCBzdWIxL3N1YnN1YkIvZGVmYXVsdCB0byBCX1NQTElULCB0aGVuICJjdnMgdXAgLXIgQl9TUExJVCIKKyAgICAgIHRvIHN3aXRjaCB0aGUgd2hvbGUgd29ya2luZyBjb3B5IHRvIHRoZSBicmFuY2guCisKKyAgMTcuIENvbW1pdCBhIGNoYW5nZSBvbiBCX1NQTElULCB0byBzdWIxL3N1YnN1YkIvZGVmYXVsdCBhbmQKKyAgICAgIHN1YjMvZGVmYXVsdC4KZGlmZiAtLWdpdCBhL3QvdDk2MDIvY3Zzcm9vdC8uZ2l0YXR0cmlidXRlcyBiL3QvdDk2MDIvY3Zzcm9vdC8uZ2l0YXR0cmlidXRlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjJiMTJlCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMi9jdnNyb290Ly5naXRhdHRyaWJ1dGVzCkBAIC0wLDAgKzEgQEAKKyogLXdoaXRlc3BhY2UKZGlmZiAtLWdpdCBhL3QvdDk2MDIvY3Zzcm9vdC9DVlNST09ULy5naXRpZ25vcmUgYi90L3Q5NjAyL2N2c3Jvb3QvQ1ZTUk9PVC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYjliMzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAyL2N2c3Jvb3QvQ1ZTUk9PVC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMiBAQAoraGlzdG9yeQordmFsLXRhZ3MKZGlmZiAtLWdpdCBhL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvZGVmYXVsdCx2IGIvdC90OTYwMi9jdnNyb290L21vZHVsZS9kZWZhdWx0LHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I2ODM4MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvZGVmYXVsdCx2CkBAIC0wLDAgKzEsMTAyIEBACitoZWFkCTEuMjsKK2FjY2VzczsKK3N5bWJvbHMKKwlCX1NQTElUOjEuMi4wLjQKKwlCX01JWEVEOjEuMi4wLjIKKwlUX01JWEVEOjEuMgorCUJfRlJPTV9JTklUSUFMU19CVVRfT05FOjEuMS4xLjEuMC40CisJQl9GUk9NX0lOSVRJQUxTOjEuMS4xLjEuMC4yCisJVF9BTExfSU5JVElBTF9GSUxFU19CVVRfT05FOjEuMS4xLjEKKwlUX0FMTF9JTklUSUFMX0ZJTEVTOjEuMS4xLjEKKwl2ZW5kb3J0YWc6MS4xLjEuMQorCXZlbmRvcmJyYW5jaDoxLjEuMTsKK2xvY2tzOyBzdHJpY3Q7Citjb21tZW50CUAjIEA7CisKKworMS4yCitkYXRlCTIwMDMuMDUuMjMuMDAuMTcuNTM7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMi4yLjEKKwkxLjIuNC4xOworbmV4dAkxLjE7CisKKzEuMQorZGF0ZQkyMDAzLjA1LjIyLjIzLjIwLjE5OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjEuMS4xOworbmV4dAk7CisKKzEuMS4xLjEKK2RhdGUJMjAwMy4wNS4yMi4yMy4yMC4xOTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKzEuMi4yLjEKK2RhdGUJMjAwMy4wNS4yMy4wMC4zMS4zNjsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKzEuMi40LjEKK2RhdGUJMjAwMy4wNi4wMy4wMy4yMC4zMTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKworZGVzYworQEAKKworCisxLjIKK2xvZworQFNlY29uZCBjb21taXQgdG8gcHJvaiwgYWZmZWN0aW5nIGFsbCA3IGZpbGVzLgorQAordGV4dAorQFRoaXMgaXMgdGhlIGZpbGUgYGRlZmF1bHQnIGluIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIHByb2plY3QuCisKK0V2ZXJ5IGRpcmVjdG9yeSBpbiB0aGUgYHByb2onIHByb2plY3QgaGFzIGEgZmlsZSBuYW1lZCBgZGVmYXVsdCcuCisKK1RoaXMgbGluZSB3YXMgYWRkZWQgaW4gdGhlIHNlY29uZCBjb21taXQgKGFmZmVjdGluZyBhbGwgNyBmaWxlcykuCitACisKKworMS4yLjQuMQorbG9nCitARmlyc3QgY2hhbmdlIG9uIGJyYW5jaCBCX1NQTElULgorCitUaGlzIGNoYW5nZSBleGNsdWRlcyBzdWIzL2RlZmF1bHQsIGJlY2F1c2UgaXQgd2FzIG5vdCBwYXJ0IG9mIHRoaXMKK2NvbW1pdCwgYW5kIHN1YjEvc3Vic3ViQi9kZWZhdWx0LCB3aGljaCBpcyBub3QgZXZlbiBvbiB0aGUgYnJhbmNoIHlldC4KK0AKK3RleHQKK0BhNSAyCisKK0ZpcnN0IGNoYW5nZSBvbiBicmFuY2ggQl9TUExJVC4KK0AKKworCisxLjIuMi4xCitsb2cKK0BNb2RpZnkgdGhyZWUgZmlsZXMsIG9uIGJyYW5jaCBCX01JWEVELgorQAordGV4dAorQGE1IDIKKworVGhpcyBsaW5lIHdhcyBhZGRlZCBvbiBicmFuY2ggQl9NSVhFRCBvbmx5IChhZmZlY3RpbmcgMyBmaWxlcykuCitACisKKworMS4xCitsb2cKK0BJbml0aWFsIHJldmlzaW9uCitACit0ZXh0CitAZDQgMgorQAorCisKKzEuMS4xLjEKK2xvZworQEluaXRpYWwgaW1wb3J0LgorQAordGV4dAorQEAKZGlmZiAtLWdpdCBhL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMS9kZWZhdWx0LHYgYi90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjEvZGVmYXVsdCx2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZmRjY2QKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjEvZGVmYXVsdCx2CkBAIC0wLDAgKzEsMTAyIEBACitoZWFkCTEuMjsKK2FjY2VzczsKK3N5bWJvbHMKKwlCX1NQTElUOjEuMi4wLjQKKwlCX01JWEVEOjEuMi4wLjIKKwlUX01JWEVEOjEuMgorCUJfRlJPTV9JTklUSUFMU19CVVRfT05FOjEuMS4xLjEuMC40CisJQl9GUk9NX0lOSVRJQUxTOjEuMS4xLjEuMC4yCisJVF9BTExfSU5JVElBTF9GSUxFU19CVVRfT05FOjEuMS4xLjEKKwlUX0FMTF9JTklUSUFMX0ZJTEVTOjEuMS4xLjEKKwl2ZW5kb3J0YWc6MS4xLjEuMQorCXZlbmRvcmJyYW5jaDoxLjEuMTsKK2xvY2tzOyBzdHJpY3Q7Citjb21tZW50CUAjIEA7CisKKworMS4yCitkYXRlCTIwMDMuMDUuMjMuMDAuMTcuNTM7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMi4yLjEKKwkxLjIuNC4xOworbmV4dAkxLjE7CisKKzEuMQorZGF0ZQkyMDAzLjA1LjIyLjIzLjIwLjE5OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjEuMS4xOworbmV4dAk7CisKKzEuMS4xLjEKK2RhdGUJMjAwMy4wNS4yMi4yMy4yMC4xOTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKzEuMi4yLjEKK2RhdGUJMjAwMy4wNS4yMy4wMC4zMS4zNjsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKzEuMi40LjEKK2RhdGUJMjAwMy4wNi4wMy4wMy4yMC4zMTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKworZGVzYworQEAKKworCisxLjIKK2xvZworQFNlY29uZCBjb21taXQgdG8gcHJvaiwgYWZmZWN0aW5nIGFsbCA3IGZpbGVzLgorQAordGV4dAorQFRoaXMgaXMgc3ViMS9kZWZhdWx0LgorCitFdmVyeSBkaXJlY3RvcnkgaW4gdGhlIGBwcm9qJyBwcm9qZWN0IGhhcyBhIGZpbGUgbmFtZWQgYGRlZmF1bHQnLgorCitUaGlzIGxpbmUgd2FzIGFkZGVkIGluIHRoZSBzZWNvbmQgY29tbWl0IChhZmZlY3RpbmcgYWxsIDcgZmlsZXMpLgorQAorCisKKzEuMi40LjEKK2xvZworQEZpcnN0IGNoYW5nZSBvbiBicmFuY2ggQl9TUExJVC4KKworVGhpcyBjaGFuZ2UgZXhjbHVkZXMgc3ViMy9kZWZhdWx0LCBiZWNhdXNlIGl0IHdhcyBub3QgcGFydCBvZiB0aGlzCitjb21taXQsIGFuZCBzdWIxL3N1YnN1YkIvZGVmYXVsdCwgd2hpY2ggaXMgbm90IGV2ZW4gb24gdGhlIGJyYW5jaCB5ZXQuCitACit0ZXh0CitAYTUgMgorCitGaXJzdCBjaGFuZ2Ugb24gYnJhbmNoIEJfU1BMSVQuCitACisKKworMS4yLjIuMQorbG9nCitATW9kaWZ5IHRocmVlIGZpbGVzLCBvbiBicmFuY2ggQl9NSVhFRC4KK0AKK3RleHQKK0BhNSAyCisKK1RoaXMgbGluZSB3YXMgYWRkZWQgb24gYnJhbmNoIEJfTUlYRUQgb25seSAoYWZmZWN0aW5nIDMgZmlsZXMpLgorQAorCisKKzEuMQorbG9nCitASW5pdGlhbCByZXZpc2lvbgorQAordGV4dAorQGQ0IDIKK0AKKworCisxLjEuMS4xCitsb2cKK0BJbml0aWFsIGltcG9ydC4KK0AKK3RleHQKK0BACmRpZmYgLS1naXQgYS90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjEvc3Vic3ViQS9kZWZhdWx0LHYgYi90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjEvc3Vic3ViQS9kZWZhdWx0LHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcyYjdiMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMS9zdWJzdWJBL2RlZmF1bHQsdgpAQCAtMCwwICsxLDEwMSBAQAoraGVhZAkxLjM7CithY2Nlc3M7CitzeW1ib2xzCisJQl9TUExJVDoxLjMuMC40CisJQl9NSVhFRDoxLjMuMC4yCisJVF9NSVhFRDoxLjMKKwlCX0ZST01fSU5JVElBTFNfQlVUX09ORToxLjEuMS4xLjAuNAorCUJfRlJPTV9JTklUSUFMUzoxLjEuMS4xLjAuMgorCVRfQUxMX0lOSVRJQUxfRklMRVNfQlVUX09ORToxLjEuMS4xCisJVF9BTExfSU5JVElBTF9GSUxFUzoxLjEuMS4xCisJdmVuZG9ydGFnOjEuMS4xLjEKKwl2ZW5kb3JicmFuY2g6MS4xLjE7Citsb2Nrczsgc3RyaWN0OworY29tbWVudAlAIyBAOworCisKKzEuMworZGF0ZQkyMDAzLjA1LjIzLjAwLjE3LjUzOwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjMuNC4xOworbmV4dAkxLjI7CisKKzEuMgorZGF0ZQkyMDAzLjA1LjIzLjAwLjE1LjI2OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuMTsKKworMS4xCitkYXRlCTIwMDMuMDUuMjIuMjMuMjAuMTk7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMS4xLjE7CituZXh0CTsKKworMS4xLjEuMQorZGF0ZQkyMDAzLjA1LjIyLjIzLjIwLjE5OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworMS4zLjQuMQorZGF0ZQkyMDAzLjA2LjAzLjAzLjIwLjMxOwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworCitkZXNjCitAQAorCisKKzEuMworbG9nCitAU2Vjb25kIGNvbW1pdCB0byBwcm9qLCBhZmZlY3RpbmcgYWxsIDcgZmlsZXMuCitACit0ZXh0CitAVGhpcyBpcyBzdWIxL3N1YnN1YkEvZGVmYXVsdC4KKworRXZlcnkgZGlyZWN0b3J5IGluIHRoZSBgcHJvaicgcHJvamVjdCBoYXMgYSBmaWxlIG5hbWVkIGBkZWZhdWx0Jy4KKworVGhpcyBsaW5lIHdhcyBhZGRlZCBieSB0aGUgZmlyc3QgY29tbWl0IChhZmZlY3RpbmcgdHdvIGZpbGVzKS4KKworVGhpcyBsaW5lIHdhcyBhZGRlZCBpbiB0aGUgc2Vjb25kIGNvbW1pdCAoYWZmZWN0aW5nIGFsbCA3IGZpbGVzKS4KK0AKKworCisxLjMuNC4xCitsb2cKK0BGaXJzdCBjaGFuZ2Ugb24gYnJhbmNoIEJfU1BMSVQuCisKK1RoaXMgY2hhbmdlIGV4Y2x1ZGVzIHN1YjMvZGVmYXVsdCwgYmVjYXVzZSBpdCB3YXMgbm90IHBhcnQgb2YgdGhpcworY29tbWl0LCBhbmQgc3ViMS9zdWJzdWJCL2RlZmF1bHQsIHdoaWNoIGlzIG5vdCBldmVuIG9uIHRoZSBicmFuY2ggeWV0LgorQAordGV4dAorQGE3IDIKKworRmlyc3QgY2hhbmdlIG9uIGJyYW5jaCBCX1NQTElULgorQAorCisKKzEuMgorbG9nCitARmlyc3QgY29tbWl0IHRvIHByb2osIGFmZmVjdGluZyB0d28gZmlsZXMuCitACit0ZXh0CitAZDYgMgorQAorCisKKzEuMQorbG9nCitASW5pdGlhbCByZXZpc2lvbgorQAordGV4dAorQGQ0IDIKK0AKKworCisxLjEuMS4xCitsb2cKK0BJbml0aWFsIGltcG9ydC4KK0AKK3RleHQKK0BACmRpZmYgLS1naXQgYS90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjEvc3Vic3ViQi9kZWZhdWx0LHYgYi90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjEvc3Vic3ViQi9kZWZhdWx0LHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU2ZWZhNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMS9zdWJzdWJCL2RlZmF1bHQsdgpAQCAtMCwwICsxLDEwNyBAQAoraGVhZAkxLjM7CithY2Nlc3M7CitzeW1ib2xzCisJQl9TUExJVDoxLjMuMC4yCisJQl9NSVhFRDoxLjIuMC4yCisJVF9NSVhFRDoxLjIKKwlCX0ZST01fSU5JVElBTFM6MS4xLjEuMS4wLjIKKwlUX0FMTF9JTklUSUFMX0ZJTEVTOjEuMS4xLjEKKwl2ZW5kb3J0YWc6MS4xLjEuMQorCXZlbmRvcmJyYW5jaDoxLjEuMTsKK2xvY2tzOyBzdHJpY3Q7Citjb21tZW50CUAjIEA7CisKKworMS4zCitkYXRlCTIwMDMuMDYuMDMuMDQuMjkuMTQ7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMy4yLjE7CituZXh0CTEuMjsKKworMS4yCitkYXRlCTIwMDMuMDUuMjMuMDAuMTcuNTM7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4xOworCisxLjEKK2RhdGUJMjAwMy4wNS4yMi4yMy4yMC4xOTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4xLjEuMTsKK25leHQJOworCisxLjEuMS4xCitkYXRlCTIwMDMuMDUuMjIuMjMuMjAuMTk7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisxLjMuMi4xCitkYXRlCTIwMDMuMDYuMDMuMDQuMzMuMTM7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisKK2Rlc2MKK0BACisKKworMS4zCitsb2cKK0BBIHRydW5rIGNoYW5nZSB0byBzdWIxL3N1YnN1YkIvZGVmYXVsdC4gIFRoaXMgd2FzIGNvbW1pdHRlZCBhYm91dCBhbgoraG91ciBhZnRlciBhbiBlYXJsaWVyIGNoYW5nZSB0aGF0IGFmZmVjdGVkIG1vc3QgZmlsZXMgb24gYnJhbmNoCitCX1NQTElULiAgVGhpcyBmaWxlIGlzIG5vdCBvbiB0aGF0IGJyYW5jaCB5ZXQsIGJ1dCBhZnRlciB0aGlzIGNvbW1pdCwKK3dlJ2xsIGJyYW5jaCB0byBCX1NQTElULCBhbGJlaXQgcm9vdGVkIGluIGEgcmV2aXNpb24gdGhhdCBkaWRuJ3QgZXhpc3QKK2F0IHRoZSB0aW1lIHRoZSByZXN0IG9mIEJfU1BMSVQgd2FzIGNyZWF0ZWQuCitACit0ZXh0CitAVGhpcyBpcyBzdWIxL3N1YnN1YkIvZGVmYXVsdC4KKworRXZlcnkgZGlyZWN0b3J5IGluIHRoZSBgcHJvaicgcHJvamVjdCBoYXMgYSBmaWxlIG5hbWVkIGBkZWZhdWx0Jy4KKworVGhpcyBsaW5lIHdhcyBhZGRlZCBpbiB0aGUgc2Vjb25kIGNvbW1pdCAoYWZmZWN0aW5nIGFsbCA3IGZpbGVzKS4KKworVGhpcyBiaXQgd2FzIGNvbW1pdHRlZCBvbiB0cnVuayBhYm91dCBhbiBob3VyIGFmdGVyIGFuIGVhcmxpZXIgY2hhbmdlCit0byBldmVyeW9uZSBlbHNlIG9uIGJyYW5jaCBCX1NQTElULiAgQWZ0ZXJ3YXJkcywgd2UnbGwgZmluYWxseSBicmFuY2gKK3RoaXMgZmlsZSB0byBCX1NQTElULCBidXQgcm9vdGVkIGluIGEgcmV2aXNpb24gdGhhdCBkaWRuJ3QgZXhpc3QgYXQKK3RoZSB0aW1lIHRoZSByZXN0IG9mIEJfU1BMSVQgd2FzIGNyZWF0ZWQuCitACisKKworMS4zLjIuMQorbG9nCitAVGhpcyBjaGFuZ2UgYWZmZWN0cyBzdWIzL2RlZmF1bHQgYW5kIHN1YjEvc3Vic3ViQi9kZWZhdWx0LCBvbiBicmFuY2gKK0JfU1BMSVQuICBOb3RlIHRoYXQgdGhlIGxhdHRlciBmaWxlIGRpZCBub3QgZXZlbiBleGlzdCBvbiB0aGlzIGJyYW5jaAordW50aWwgYWZ0ZXIgc29tZSBvdGhlciBmaWxlcyBoYWQgaGFkIHJldmlzaW9ucyBjb21taXR0ZWQgb24gQl9TUExJVC4KK0AKK3RleHQKK0BhMTAgNAorCitUaGlzIGNoYW5nZSBhZmZlY3RzIHN1YjMvZGVmYXVsdCBhbmQgc3ViMS9zdWJzdWJCL2RlZmF1bHQsIG9uIGJyYW5jaAorQl9TUExJVC4gIE5vdGUgdGhhdCB0aGUgbGF0dGVyIGZpbGUgZGlkIG5vdCBldmVuIGV4aXN0IG9uIHRoaXMgYnJhbmNoCit1bnRpbCBhZnRlciBzb21lIG90aGVyIGZpbGVzIGhhZCBoYWQgcmV2aXNpb25zIGNvbW1pdHRlZCBvbiBCX1NQTElULgorQAorCisKKzEuMgorbG9nCitAU2Vjb25kIGNvbW1pdCB0byBwcm9qLCBhZmZlY3RpbmcgYWxsIDcgZmlsZXMuCitACit0ZXh0CitAZDYgNQorQAorCisKKzEuMQorbG9nCitASW5pdGlhbCByZXZpc2lvbgorQAordGV4dAorQGQ0IDIKK0AKKworCisxLjEuMS4xCitsb2cKK0BJbml0aWFsIGltcG9ydC4KK0AKK3RleHQKK0BACmRpZmYgLS1naXQgYS90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjIvQXR0aWMvYnJhbmNoX0JfTUlYRURfb25seSx2IGIvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIyL0F0dGljL2JyYW5jaF9CX01JWEVEX29ubHksdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGM5Nzg5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIyL0F0dGljL2JyYW5jaF9CX01JWEVEX29ubHksdgpAQCAtMCwwICsxLDU5IEBACitoZWFkCTEuMTsKK2FjY2VzczsKK3N5bWJvbHMKKwlCX01JWEVEOjEuMS4wLjI7Citsb2Nrczsgc3RyaWN0OworY29tbWVudAlAIyBAOworCisKKzEuMQorZGF0ZQkyMDAzLjA1LjIzLjAwLjI1LjI2OwlhdXRob3IganJhbmRvbTsJc3RhdGUgZGVhZDsKK2JyYW5jaGVzCisJMS4xLjIuMTsKK25leHQJOworCisxLjEuMi4xCitkYXRlCTIwMDMuMDUuMjMuMDAuMjUuMjY7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4xLjIuMjsKKworMS4xLjIuMgorZGF0ZQkyMDAzLjA1LjIzLjAwLjQ4LjUxOwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworCitkZXNjCitAQAorCisKKzEuMQorbG9nCitAZmlsZSBicmFuY2hfQl9NSVhFRF9vbmx5IHdhcyBpbml0aWFsbHkgYWRkZWQgb24gYnJhbmNoIEJfTUlYRUQuCitACit0ZXh0CitAQAorCisKKzEuMS4yLjEKK2xvZworQEFkZCBhIGZpbGUgb24gYnJhbmNoIEJfTUlYRUQuCitACit0ZXh0CitAYTAgMQorVGhpcyBmaWxlIHdhcyBhZGRlZCBvbiBicmFuY2ggQl9NSVhFRC4gIEl0IG5ldmVyIGV4aXN0ZWQgb24gdHJ1bmsuCitACisKKworMS4xLjIuMgorbG9nCitAQSBzaW5nbGUgY29tbWl0IGFmZmVjdGluZyBvbmUgZmlsZSBvbiBicmFuY2ggQl9NSVhFRCBhbmQgb25lIG9uIHRydW5rLgorQAordGV4dAorQGExIDMKKworVGhlIHNhbWUgY29tbWl0IGFkZGVkIHRoZXNlIHR3byBsaW5lcyBoZXJlIG9uIGJyYW5jaCBCX01JWEVELCBhbmQgdHdvCitzaW1pbGFyIGxpbmVzIHRvIC4vZGVmYXVsdCBvbiB0cnVuay4KK0AKKworCmRpZmYgLS1naXQgYS90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjIvZGVmYXVsdCx2IGIvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIyL2RlZmF1bHQsdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMThmN2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIyL2RlZmF1bHQsdgpAQCAtMCwwICsxLDEwMiBAQAoraGVhZAkxLjM7CithY2Nlc3M7CitzeW1ib2xzCisJQl9TUExJVDoxLjMuMC4yCisJQl9NSVhFRDoxLjIuMC4yCisJVF9NSVhFRDoxLjIKKwlCX0ZST01fSU5JVElBTFNfQlVUX09ORToxLjEuMS4xLjAuNAorCUJfRlJPTV9JTklUSUFMUzoxLjEuMS4xLjAuMgorCVRfQUxMX0lOSVRJQUxfRklMRVNfQlVUX09ORToxLjEuMS4xCisJVF9BTExfSU5JVElBTF9GSUxFUzoxLjEuMS4xCisJdmVuZG9ydGFnOjEuMS4xLjEKKwl2ZW5kb3JicmFuY2g6MS4xLjE7Citsb2Nrczsgc3RyaWN0OworY29tbWVudAlAIyBAOworCisKKzEuMworZGF0ZQkyMDAzLjA1LjIzLjAwLjQ4LjUxOwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjMuMi4xOworbmV4dAkxLjI7CisKKzEuMgorZGF0ZQkyMDAzLjA1LjIzLjAwLjE3LjUzOwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuMTsKKworMS4xCitkYXRlCTIwMDMuMDUuMjIuMjMuMjAuMTk7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMS4xLjE7CituZXh0CTsKKworMS4xLjEuMQorZGF0ZQkyMDAzLjA1LjIyLjIzLjIwLjE5OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworMS4zLjIuMQorZGF0ZQkyMDAzLjA2LjAzLjAzLjIwLjMxOwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworCitkZXNjCitAQAorCisKKzEuMworbG9nCitAQSBzaW5nbGUgY29tbWl0IGFmZmVjdGluZyBvbmUgZmlsZSBvbiBicmFuY2ggQl9NSVhFRCBhbmQgb25lIG9uIHRydW5rLgorQAordGV4dAorQFRoaXMgaXMgc3ViMi9kZWZhdWx0LgorCitFdmVyeSBkaXJlY3RvcnkgaW4gdGhlIGBwcm9qJyBwcm9qZWN0IGhhcyBhIGZpbGUgbmFtZWQgYGRlZmF1bHQnLgorCitUaGlzIGxpbmUgd2FzIGFkZGVkIGluIHRoZSBzZWNvbmQgY29tbWl0IChhZmZlY3RpbmcgYWxsIDcgZmlsZXMpLgorCitUaGUgc2FtZSBjb21taXQgYWRkZWQgdGhlc2UgdHdvIGxpbmVzIGhlcmUgb24gdHJ1bmssIGFuZCB0d28gc2ltaWxhcgorbGluZXMgdG8gLi9icmFuY2hfQl9NSVhFRF9vbmx5IG9uIGJyYW5jaCBCX01JWEVELgorQAorCisKKzEuMy4yLjEKK2xvZworQEZpcnN0IGNoYW5nZSBvbiBicmFuY2ggQl9TUExJVC4KKworVGhpcyBjaGFuZ2UgZXhjbHVkZXMgc3ViMy9kZWZhdWx0LCBiZWNhdXNlIGl0IHdhcyBub3QgcGFydCBvZiB0aGlzCitjb21taXQsIGFuZCBzdWIxL3N1YnN1YkIvZGVmYXVsdCwgd2hpY2ggaXMgbm90IGV2ZW4gb24gdGhlIGJyYW5jaCB5ZXQuCitACit0ZXh0CitAYTggMgorCitGaXJzdCBjaGFuZ2Ugb24gYnJhbmNoIEJfU1BMSVQuCitACisKKworMS4yCitsb2cKK0BTZWNvbmQgY29tbWl0IHRvIHByb2osIGFmZmVjdGluZyBhbGwgNyBmaWxlcy4KK0AKK3RleHQKK0BkNiAzCitACisKKworMS4xCitsb2cKK0BJbml0aWFsIHJldmlzaW9uCitACit0ZXh0CitAZDQgMgorQAorCisKKzEuMS4xLjEKK2xvZworQEluaXRpYWwgaW1wb3J0LgorQAordGV4dAorQEAKZGlmZiAtLWdpdCBhL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMi9zdWJzdWJBL2RlZmF1bHQsdiBiL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMi9zdWJzdWJBL2RlZmF1bHQsdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTMyNDJjCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIyL3N1YnN1YkEvZGVmYXVsdCx2CkBAIC0wLDAgKzEsMTAyIEBACitoZWFkCTEuMjsKK2FjY2VzczsKK3N5bWJvbHMKKwlCX1NQTElUOjEuMi4wLjIKKwlCX01JWEVEOjEuMS4wLjIKKwlUX01JWEVEOjEuMQorCUJfRlJPTV9JTklUSUFMU19CVVRfT05FOjEuMS4xLjEuMC40CisJQl9GUk9NX0lOSVRJQUxTOjEuMS4xLjEuMC4yCisJVF9BTExfSU5JVElBTF9GSUxFU19CVVRfT05FOjEuMS4xLjEKKwlUX0FMTF9JTklUSUFMX0ZJTEVTOjEuMS4xLjEKKwl2ZW5kb3J0YWc6MS4xLjEuMQorCXZlbmRvcmJyYW5jaDoxLjEuMTsKK2xvY2tzOyBzdHJpY3Q7Citjb21tZW50CUAjIEA7CisKKworMS4yCitkYXRlCTIwMDMuMDUuMjMuMDAuMTcuNTM7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMi4yLjE7CituZXh0CTEuMTsKKworMS4xCitkYXRlCTIwMDMuMDUuMjIuMjMuMjAuMTk7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMS4xLjEKKwkxLjEuMi4xOworbmV4dAk7CisKKzEuMS4xLjEKK2RhdGUJMjAwMy4wNS4yMi4yMy4yMC4xOTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKzEuMS4yLjEKK2RhdGUJMjAwMy4wNS4yMy4wMC4zMS4zNjsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKzEuMi4yLjEKK2RhdGUJMjAwMy4wNi4wMy4wMy4yMC4zMTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKworZGVzYworQEAKKworCisxLjIKK2xvZworQFNlY29uZCBjb21taXQgdG8gcHJvaiwgYWZmZWN0aW5nIGFsbCA3IGZpbGVzLgorQAordGV4dAorQFRoaXMgaXMgc3ViMi9zdWJzdWIyL2RlZmF1bHQuCisKK0V2ZXJ5IGRpcmVjdG9yeSBpbiB0aGUgYHByb2onIHByb2plY3QgaGFzIGEgZmlsZSBuYW1lZCBgZGVmYXVsdCcuCisKK1RoaXMgbGluZSB3YXMgYWRkZWQgaW4gdGhlIHNlY29uZCBjb21taXQgKGFmZmVjdGluZyBhbGwgNyBmaWxlcykuCitACisKKworMS4yLjIuMQorbG9nCitARmlyc3QgY2hhbmdlIG9uIGJyYW5jaCBCX1NQTElULgorCitUaGlzIGNoYW5nZSBleGNsdWRlcyBzdWIzL2RlZmF1bHQsIGJlY2F1c2UgaXQgd2FzIG5vdCBwYXJ0IG9mIHRoaXMKK2NvbW1pdCwgYW5kIHN1YjEvc3Vic3ViQi9kZWZhdWx0LCB3aGljaCBpcyBub3QgZXZlbiBvbiB0aGUgYnJhbmNoIHlldC4KK0AKK3RleHQKK0BhNSAyCisKK0ZpcnN0IGNoYW5nZSBvbiBicmFuY2ggQl9TUExJVC4KK0AKKworCisxLjEKK2xvZworQEluaXRpYWwgcmV2aXNpb24KK0AKK3RleHQKK0BkNCAyCitACisKKworMS4xLjIuMQorbG9nCitATW9kaWZ5IHRocmVlIGZpbGVzLCBvbiBicmFuY2ggQl9NSVhFRC4KK0AKK3RleHQKK0BhMyAyCisKK1RoaXMgbGluZSB3YXMgYWRkZWQgb24gYnJhbmNoIEJfTUlYRUQgb25seSAoYWZmZWN0aW5nIDMgZmlsZXMpLgorQAorCisKKzEuMS4xLjEKK2xvZworQEluaXRpYWwgaW1wb3J0LgorQAordGV4dAorQEAKZGlmZiAtLWdpdCBhL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMy9kZWZhdWx0LHYgYi90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjMvZGVmYXVsdCx2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZTQ1NjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjMvZGVmYXVsdCx2CkBAIC0wLDAgKzEsMTAyIEBACitoZWFkCTEuMzsKK2FjY2VzczsKK3N5bWJvbHMKKwlCX1NQTElUOjEuMy4wLjIKKwlCX01JWEVEOjEuMi4wLjIKKwlUX01JWEVEOjEuMgorCUJfRlJPTV9JTklUSUFMU19CVVRfT05FOjEuMS4xLjEuMC40CisJQl9GUk9NX0lOSVRJQUxTOjEuMS4xLjEuMC4yCisJVF9BTExfSU5JVElBTF9GSUxFU19CVVRfT05FOjEuMS4xLjEKKwlUX0FMTF9JTklUSUFMX0ZJTEVTOjEuMS4xLjEKKwl2ZW5kb3J0YWc6MS4xLjEuMQorCXZlbmRvcmJyYW5jaDoxLjEuMTsKK2xvY2tzOyBzdHJpY3Q7Citjb21tZW50CUAjIEA7CisKKworMS4zCitkYXRlCTIwMDMuMDUuMjMuMDAuMTcuNTM7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMy4yLjE7CituZXh0CTEuMjsKKworMS4yCitkYXRlCTIwMDMuMDUuMjMuMDAuMTUuMjY7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4xOworCisxLjEKK2RhdGUJMjAwMy4wNS4yMi4yMy4yMC4xOTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4xLjEuMTsKK25leHQJOworCisxLjEuMS4xCitkYXRlCTIwMDMuMDUuMjIuMjMuMjAuMTk7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisxLjMuMi4xCitkYXRlCTIwMDMuMDYuMDMuMDQuMzMuMTM7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisKK2Rlc2MKK0BACisKKworMS4zCitsb2cKK0BTZWNvbmQgY29tbWl0IHRvIHByb2osIGFmZmVjdGluZyBhbGwgNyBmaWxlcy4KK0AKK3RleHQKK0BUaGlzIGlzIHN1YjMvZGVmYXVsdC4KKworRXZlcnkgZGlyZWN0b3J5IGluIHRoZSBgcHJvaicgcHJvamVjdCBoYXMgYSBmaWxlIG5hbWVkIGBkZWZhdWx0Jy4KKworVGhpcyBsaW5lIHdhcyBhZGRlZCBieSB0aGUgZmlyc3QgY29tbWl0IChhZmZlY3RpbmcgdHdvIGZpbGVzKS4KKworVGhpcyBsaW5lIHdhcyBhZGRlZCBpbiB0aGUgc2Vjb25kIGNvbW1pdCAoYWZmZWN0aW5nIGFsbCA3IGZpbGVzKS4KK0AKKworCisxLjMuMi4xCitsb2cKK0BUaGlzIGNoYW5nZSBhZmZlY3RzIHN1YjMvZGVmYXVsdCBhbmQgc3ViMS9zdWJzdWJCL2RlZmF1bHQsIG9uIGJyYW5jaAorQl9TUExJVC4gIE5vdGUgdGhhdCB0aGUgbGF0dGVyIGZpbGUgZGlkIG5vdCBldmVuIGV4aXN0IG9uIHRoaXMgYnJhbmNoCit1bnRpbCBhZnRlciBzb21lIG90aGVyIGZpbGVzIGhhZCBoYWQgcmV2aXNpb25zIGNvbW1pdHRlZCBvbiBCX1NQTElULgorQAordGV4dAorQGE3IDQKKworVGhpcyBjaGFuZ2UgYWZmZWN0cyBzdWIzL2RlZmF1bHQgYW5kIHN1YjEvc3Vic3ViQi9kZWZhdWx0LCBvbiBicmFuY2gKK0JfU1BMSVQuICBOb3RlIHRoYXQgdGhlIGxhdHRlciBmaWxlIGRpZCBub3QgZXZlbiBleGlzdCBvbiB0aGlzIGJyYW5jaAordW50aWwgYWZ0ZXIgc29tZSBvdGhlciBmaWxlcyBoYWQgaGFkIHJldmlzaW9ucyBjb21taXR0ZWQgb24gQl9TUExJVC4KK0AKKworCisxLjIKK2xvZworQEZpcnN0IGNvbW1pdCB0byBwcm9qLCBhZmZlY3RpbmcgdHdvIGZpbGVzLgorQAordGV4dAorQGQ2IDIKK0AKKworCisxLjEKK2xvZworQEluaXRpYWwgcmV2aXNpb24KK0AKK3RleHQKK0BkNCAyCitACisKKworMS4xLjEuMQorbG9nCitASW5pdGlhbCBpbXBvcnQuCitACit0ZXh0CitAQApkaWZmIC0tZ2l0IGEvdC90OTYwMy1jdnNpbXBvcnQtcGF0Y2hzZXRzLnNoIGIvdC90OTYwMy1jdnNpbXBvcnQtcGF0Y2hzZXRzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk1OGJkY2UKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAzLWN2c2ltcG9ydC1wYXRjaHNldHMuc2gKQEAgLTAsMCArMSw0MCBAQAorIyEvYmluL3NoCisKKyMgU3RydWN0dXJlIG9mIHRoZSB0ZXN0IGN2cyByZXBvc2l0b3J5CisjCisjIE1lc3NhZ2UgICBGaWxlOkNvbnRlbnQgICAgICAgICBDb21taXQgVGltZQorIyBSZXYgMSAgICAgYTogMS4xICAgICAgICAgICAgICAgMjAwOS0wMi0yMSAxOToxMTo0MyArMDEwMAorIyBSZXYgMiAgICAgYTogMS4yICAgIGI6IDEuMSAgICAgMjAwOS0wMi0yMSAxOToxMToxNCArMDEwMAorIyBSZXYgMyAgICAgICAgICAgICAgIGI6IDEuMiAgICAgMjAwOS0wMi0yMSAxOToxMTo0MyArMDEwMAorIworIyBBcyB5b3UgY2FuIHNlZSB0aGUgY29tbWl0IG9mIFJldiAzIGhhcyB0aGUgc2FtZSB0aW1lIGFzCisjIFJldiAxIHRoaXMgbGVhZHMgdG8gYSBicm9rZW4gaW1wb3J0IGJlY2F1c2Ugb2YgYSBjdnNwcworIyBidWcuCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjdnNpbXBvcnQgdGVzdGluZyBmb3IgY29ycmVjdCBwYXRjaHNldCBlc3RpbWF0aW9uJworLiAuL2xpYi1jdnMuc2gKKworQ1ZTUk9PVD0iJFRFU1RfRElSRUNUT1JZIi90OTYwMy9jdnNyb290CitleHBvcnQgQ1ZTUk9PVAorCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdpbXBvcnQgd2l0aCBjcmlzcyBjcm9zcyB0aW1lcyBvbiByZXZpc2lvbnMnICcKKworICAgIGdpdCBjdnNpbXBvcnQgLXAiLXgiIC1DIG1vZHVsZS1naXQgbW9kdWxlICYmCisgICAgY2QgbW9kdWxlLWdpdCAmJgorICAgICAgICBnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDolcyA+IC4uL2FjdHVhbC1tYXN0ZXIgJiYKKyAgICAgICAgZ2l0IGxvZyBBfjIuLkEgLS1wcmV0dHk9ImZvcm1hdDolcyAlYWQiIC0tID4gLi4vYWN0dWFsLUEgJiYKKyAgICAgICAgZWNobyAiIiA+PiAuLi9hY3R1YWwtbWFzdGVyICYmCisgICAgICAgIGVjaG8gIiIgPj4gLi4vYWN0dWFsLUEgJiYKKyAgICBjZCAuLiAmJgorICAgIGVjaG8gIlJldiA0CitSZXYgMworUmV2IDIKK1JldiAxIiA+IGV4cGVjdC1tYXN0ZXIgJiYKKyAgICB0ZXN0X2NtcCBhY3R1YWwtbWFzdGVyIGV4cGVjdC1tYXN0ZXIgJiYKKworICAgIGVjaG8gIlJldiA1IEJyYW5jaCBBIFdlZCBNYXIgMTEgMTk6MDk6MTAgMjAwOSArMDAwMAorUmV2IDQgQnJhbmNoIEEgV2VkIE1hciAxMSAxOTowMzo1MiAyMDA5ICswMDAwIiA+IGV4cGVjdC1BICYmCisgICAgdGVzdF9jbXAgYWN0dWFsLUEgZXhwZWN0LUEKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5NjAzL2N2c3Jvb3QvLmdpdGF0dHJpYnV0ZXMgYi90L3Q5NjAzL2N2c3Jvb3QvLmdpdGF0dHJpYnV0ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYyYjEyZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDMvY3Zzcm9vdC8uZ2l0YXR0cmlidXRlcwpAQCAtMCwwICsxIEBACisqIC13aGl0ZXNwYWNlCmRpZmYgLS1naXQgYS90L3Q5NjAzL2N2c3Jvb3QvQ1ZTUk9PVC8uZ2l0aWdub3JlIGIvdC90OTYwMy9jdnNyb290L0NWU1JPT1QvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmI5YjM0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMy9jdnNyb290L0NWU1JPT1QvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDIgQEAKK2hpc3RvcnkKK3ZhbC10YWdzCmRpZmYgLS1naXQgYS90L3Q5NjAzL2N2c3Jvb3QvbW9kdWxlL2EsdiBiL3QvdDk2MDMvY3Zzcm9vdC9tb2R1bGUvYSx2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhOGZkNWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAzL2N2c3Jvb3QvbW9kdWxlL2EsdgpAQCAtMCwwICsxLDc0IEBACitoZWFkCTEuMjsKK2FjY2VzczsKK3N5bWJvbHMKKwlBOjEuMi4wLjI7Citsb2Nrczsgc3RyaWN0OworY29tbWVudAlAIyBAOworCisKKzEuMgorZGF0ZQkyMDA5LjAyLjIxLjE4LjExLjE0OwlhdXRob3IgdGVzdGVyOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMi4yLjE7CituZXh0CTEuMTsKKworMS4xCitkYXRlCTIwMDkuMDIuMjEuMTguMTEuNDM7CWF1dGhvciB0ZXN0ZXI7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKzEuMi4yLjEKK2RhdGUJMjAwOS4wMy4xMS4xOS4wMy41MjsJYXV0aG9yIHRlc3RlcjsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuMi4yLjI7CisKKzEuMi4yLjIKK2RhdGUJMjAwOS4wMy4xMS4xOS4wOS4xMDsJYXV0aG9yIHRlc3RlcjsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworCitkZXNjCitAQAorCisKKzEuMgorbG9nCitAUmV2IDIKK0AKK3RleHQKK0AxLjIKK0AKKworCisxLjIuMi4xCitsb2cKK0BSZXYgNCBCcmFuY2ggQQorQAordGV4dAorQGQxIDEKK2ExIDEKKzEuMi4yLjEKK0AKKworCisxLjIuMi4yCitsb2cKK0BSZXYgNSBCcmFuY2ggQQorQAordGV4dAorQGQxIDEKK2ExIDEKKzEuMi4yLjIKK0AKKworCisxLjEKK2xvZworQFJldiAxCitACit0ZXh0CitAZDEgMQorYTEgMQorMS4xCitACmRpZmYgLS1naXQgYS90L3Q5NjAzL2N2c3Jvb3QvbW9kdWxlL2IsdiBiL3QvdDk2MDMvY3Zzcm9vdC9tb2R1bGUvYix2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNjg4NTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAzL2N2c3Jvb3QvbW9kdWxlL2IsdgpAQCAtMCwwICsxLDkwIEBACitoZWFkCTEuMzsKK2FjY2VzczsKK3N5bWJvbHMKKwlBOjEuMi4wLjI7Citsb2Nrczsgc3RyaWN0OworY29tbWVudAlAIyBAOworCisKKzEuMworZGF0ZQkyMDA5LjAzLjExLjE5LjA1LjA4OwlhdXRob3IgdGVzdGVyOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4yOworCisxLjIKK2RhdGUJMjAwOS4wMi4yMS4xOC4xMS40MzsJYXV0aG9yIHRlc3RlcjsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjIuMi4xOworbmV4dAkxLjE7CisKKzEuMQorZGF0ZQkyMDA5LjAyLjIxLjE4LjExLjE0OwlhdXRob3IgdGVzdGVyOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisxLjIuMi4xCitkYXRlCTIwMDkuMDMuMTEuMTkuMDMuNTI7CWF1dGhvciB0ZXN0ZXI7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjIuMi4yOworCisxLjIuMi4yCitkYXRlCTIwMDkuMDMuMTEuMTkuMDkuMTA7CWF1dGhvciB0ZXN0ZXI7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKworZGVzYworQEAKKworCisxLjMKK2xvZworQFJldiA0CitACit0ZXh0CitAMS4zCitACisKKworMS4yCitsb2cKK0BSZXYgMworQAordGV4dAorQGQxIDEKK2ExIDEKKzEuMgorQAorCisKKzEuMi4yLjEKK2xvZworQFJldiA0IEJyYW5jaCBBCitACit0ZXh0CitAZDEgMQorYTEgMQorMS4yLjIuMQorQAorCisKKzEuMi4yLjIKK2xvZworQFJldiA1IEJyYW5jaCBBCitACit0ZXh0CitAZDEgMQorYTEgMQorMS4yCitACisKKworMS4xCitsb2cKK0BSZXYgMgorQAordGV4dAorQGQxIDEKK2ExIDEKKzEuMQorQApkaWZmIC0tZ2l0IGEvdC90OTcwMC1wZXJsLWdpdC5zaCBiL3QvdDk3MDAtcGVybC1naXQuc2gKaW5kZXggYjRjYTI0NC4uODY4NjA4NiAxMDA3NTUKLS0tIGEvdC90OTcwMC1wZXJsLWdpdC5zaAorKysgYi90L3Q5NzAwLXBlcmwtZ2l0LnNoCkBAIC0xMSw3ICsxMSw3IEBACiAJdGVzdF9kb25lCiBmaQogCi1wZXJsIC1NVGVzdDo6TW9yZSAtZSAwIDI+L2Rldi9udWxsIHx8IHsKKyIkUEVSTF9QQVRIIiAtTVRlc3Q6Ok1vcmUgLWUgMCAyPi9kZXYvbnVsbCB8fCB7CiAJc2F5ICJQZXJsIFRlc3Q6Ok1vcmUgdW5hdmFpbGFibGUsIHNraXBwaW5nIHRlc3QiCiAJdGVzdF9kb25lCiB9CkBAIC0yOSw2ICsyOSwxMCBAQAogICAgICBnaXQgYWRkIC4gJiYKICAgICAgZ2l0IGNvbW1pdCAtbSAiZmlyc3QgY29tbWl0IiAmJgogCisgICAgIGVjaG8gIm5ldyBmaWxlIGluIHN1YmRpciAyIiA+IGRpcmVjdG9yeTIvZmlsZTIgJiYKKyAgICAgZ2l0IGFkZCAuICYmCisgICAgIGdpdCBjb21taXQgLW0gImNvbW1pdCBpbiBkaXJlY3RvcnkyIiAmJgorCiAgICAgIGVjaG8gImNoYW5nZWQgZmlsZSAxIiA+IGZpbGUxICYmCiAgICAgIGdpdCBjb21taXQgLWEgLW0gInNlY29uZCBjb21taXQiICYmCiAKQEAgLTQ0LDYgKzQ4LDYgQEAKIAogdGVzdF9leHRlcm5hbF93aXRob3V0X3N0ZGVyciBcCiAgICAgJ1BlcmwgQVBJJyBcCi0gICAgcGVybCAiJFRFU1RfRElSRUNUT1JZIi90OTcwMC90ZXN0LnBsCisgICAgIiRQRVJMX1BBVEgiICIkVEVTVF9ESVJFQ1RPUlkiL3Q5NzAwL3Rlc3QucGwKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5NzAwL3Rlc3QucGwgYi90L3Q5NzAwL3Rlc3QucGwKaW5kZXggNjk3ZGFmMy4uNjY2NzIyZCAxMDA3NTUKLS0tIGEvdC90OTcwMC90ZXN0LnBsCisrKyBiL3QvdDk3MDAvdGVzdC5wbApAQCAtMTMsNyArMTMsNyBAQAogQkVHSU4geyB1c2Vfb2soJ0dpdCcpIH0KIAogIyBzZXQgdXAKLW91ciAkYWJzX3JlcG9fZGlyID0gQ3dkLT5jd2Q7CitvdXIgJGFic19yZXBvX2RpciA9IGN3ZCgpOwogb2sob3VyICRyID0gR2l0LT5yZXBvc2l0b3J5KERpcmVjdG9yeSA9PiAiLiIpLCAib3BlbiByZXBvc2l0b3J5Iik7CiAKICMgY29uZmlnCkBAIC04NiwxNSArODYsMjIgQEAKIHVubGluayAkdG1wZmlsZTsKIAogIyBwYXRocwotaXMoJHItPnJlcG9fcGF0aCwgIi4vLmdpdCIsICJyZXBvX3BhdGgiKTsKK2lzKCRyLT5yZXBvX3BhdGgsICRhYnNfcmVwb19kaXIgLiAiLy5naXQiLCAicmVwb19wYXRoIik7CiBpcygkci0+d2NfcGF0aCwgJGFic19yZXBvX2RpciAuICIvIiwgIndjX3BhdGgiKTsKIGlzKCRyLT53Y19zdWJkaXIsICIiLCAid2Nfc3ViZGlyIGluaXRpYWwiKTsKICRyLT53Y19jaGRpcigiZGlyZWN0b3J5MSIpOwogaXMoJHItPndjX3N1YmRpciwgImRpcmVjdG9yeTEiLCAid2Nfc3ViZGlyIGFmdGVyIHdjX2NoZGlyIik7Ci1UT0RPOiB7Ci0JbG9jYWwgJFRPRE8gPSAiY29tbWFuZHMgZG8gbm90IHdvcmsgYWZ0ZXIgd2NfY2hkaXIiOwotCSMgRmFpbHVyZSBvdXRwdXQgaXMgYWN0aXZlIGV2ZW4gaW4gbm9uLXZlcmJvc2UgbW9kZSBhbmQgdGh1cwotCSMgYW5ub3lpbmcuICBIZW5jZSB3ZSBza2lwIHRoZXNlIHRlc3RzIGFzIGxvbmcgYXMgdGhleSBmYWlsLgotCXRvZG9fc2tpcCAnY29uZmlnIGFmdGVyIHdjX2NoZGlyJywgMTsKLQlpcygkci0+Y29uZmlnKCJjb2xvci5zdHJpbmciKSwgInZhbHVlIiwgImNvbmZpZyBhZnRlciB3Y19jaGRpciIpOwotfQoraXMoJHItPmNvbmZpZygidGVzdC5zdHJpbmciKSwgInZhbHVlIiwgImNvbmZpZyBhZnRlciB3Y19jaGRpciIpOworCisjIE9iamVjdCBnZW5lcmF0aW9uIGluIHN1YiBkaXJlY3RvcnkKK2NoZGlyKCJkaXJlY3RvcnkyIik7CitteSAkcjIgPSBHaXQtPnJlcG9zaXRvcnkoKTsKK2lzKCRyMi0+cmVwb19wYXRoLCAkYWJzX3JlcG9fZGlyIC4gIi8uZ2l0IiwgInJlcG9fcGF0aCAoMikiKTsKK2lzKCRyMi0+d2NfcGF0aCwgJGFic19yZXBvX2RpciAuICIvIiwgIndjX3BhdGggKDIpIik7CitpcygkcjItPndjX3N1YmRpciwgImRpcmVjdG9yeTIvIiwgIndjX3N1YmRpciBpbml0aWFsICgyKSIpOworCisjIGNvbW1hbmRzIGluIHN1YiBkaXJlY3RvcnkKK215ICRsYXN0X2NvbW1pdCA9ICRyMi0+Y29tbWFuZF9vbmVsaW5lKHF3KHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSk7CitsaWtlKCRsYXN0X2NvbW1pdCwgcXIvXlswLTlhLWZBLUZdezQwfSQvLCAncmV2LXBhcnNlIHJldHVybmVkIGhhc2gnKTsKK215ICRkaXJfY29tbWl0ID0gJHIyLT5jb21tYW5kX29uZWxpbmUoJ2xvZycsICctbjEnLCAnLS1wcmV0dHk9Zm9ybWF0OiVIJywgJy4nKTsKK2lzbnQoJGxhc3RfY29tbWl0LCAkZGlyX2NvbW1pdCwgJ2xvZyAuIGRvZXMgbm90IHNob3cgbGFzdCBjb21taXQnKTsKZGlmZiAtLWdpdCBhL3QvdGVzdC1saWIuc2ggYi90L3Rlc3QtbGliLnNoCmluZGV4IGRhZDE0MzcuLmEwZTM5NmEgMTAwNjQ0Ci0tLSBhL3QvdGVzdC1saWIuc2gKKysrIGIvdC90ZXN0LWxpYi5zaApAQCAtMzAsNyArMzAsNyBAQAogVEVSTT1kdW1iCiBleHBvcnQgTEFORyBMQ19BTEwgUEFHRVIgVEVSTSBUWgogRURJVE9SPToKLVZJU1VBTD06Cit1bnNldCBWSVNVQUwKIHVuc2V0IEdJVF9FRElUT1IKIHVuc2V0IEFVVEhPUl9EQVRFCiB1bnNldCBBVVRIT1JfRU1BSUwKQEAgLTU4LDEzICs1OCwxNSBAQAogZXhwb3J0IEdJVF9NRVJHRV9WRVJCT1NJVFkKIGV4cG9ydCBHSVRfQVVUSE9SX0VNQUlMIEdJVF9BVVRIT1JfTkFNRQogZXhwb3J0IEdJVF9DT01NSVRURVJfRU1BSUwgR0lUX0NPTU1JVFRFUl9OQU1FCi1leHBvcnQgRURJVE9SIFZJU1VBTAorZXhwb3J0IEVESVRPUgogR0lUX1RFU1RfQ01QPSR7R0lUX1RFU1RfQ01QOi1kaWZmIC11fQogCiAjIFByb3RlY3Qgb3Vyc2VsdmVzIGZyb20gY29tbW9uIG1pc2NvbmZpZ3VyYXRpb24gdG8gZXhwb3J0CiAjIENEUEFUSCBpbnRvIHRoZSBlbnZpcm9ubWVudAogdW5zZXQgQ0RQQVRICiAKK3Vuc2V0IEdSRVBfT1BUSU9OUworCiBjYXNlICQoZWNobyAkR0lUX1RSQUNFIHx0ciAiW0EtWl0iICJbYS16XSIpIGluCiAJMXwyfHRydWUpCiAJCWVjaG8gIiogd2FybmluZzogU29tZSB0ZXN0cyB3aWxsIG5vdCB3b3JrIGlmIEdJVF9UUkFDRSIgXApAQCAtNzQsNiArNzYsMTIgQEAKIAkJOzsKIGVzYWMKIAorIyBDb252ZW5pZW5jZQorIworIyBBIHJlZ2V4cCB0byBtYXRjaCA1IGFuZCA0MCBoZXhkaWdpdHMKK194MDU9J1swLTlhLWZdWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdWzAtOWEtZl0nCitfeDQwPSIkX3gwNSRfeDA1JF94MDUkX3gwNSRfeDA1JF94MDUkX3gwNSRfeDA1IgorCiAjIEVhY2ggdGVzdCBzaG91bGQgc3RhcnQgd2l0aCBzb21ldGhpbmcgbGlrZSB0aGlzLCBhZnRlciBjb3B5cmlnaHQgbm90aWNlczoKICMKICMgdGVzdF9kZXNjcmlwdGlvbj0nRGVzY3JpcHRpb24gb2YgdGhpcyB0ZXN0Li4uCkBAIC0xMDUsNiArMTEzLDggQEAKIAkJdmVyYm9zZT10OyBzaGlmdCA7OwogCS1xfC0tcXwtLXF1fC0tcXVpfC0tcXVpZXwtLXF1aWV0KQogCQlxdWlldD10OyBzaGlmdCA7OworCS0td2l0aC1kYXNoZXMpCisJCXdpdGhfZGFzaGVzPXQ7IHNoaWZ0IDs7CiAJLS1uby1jb2xvcikKIAkJY29sb3I9OyBzaGlmdCA7OwogCS0tbm8tcHl0aG9uKQpAQCAtMTE0LDggKzEyNCwxMSBAQAogCQl2YWxncmluZD10OyB2ZXJib3NlPXQ7IHNoaWZ0IDs7CiAJLS10ZWUpCiAJCXNoaWZ0IDs7ICMgd2FzIGhhbmRsZWQgYWxyZWFkeQorCS0tcm9vdD0qKQorCQlyb290PSQoZXhwciAieiQxIiA6ICd6W149XSo9XCguKlwpJykKKwkJc2hpZnQgOzsKIAkqKQotCQlicmVhayA7OworCQllY2hvICJlcnJvcjogdW5rbm93biB0ZXN0IG9wdGlvbiAnJDEnIiA+JjI7IGV4aXQgMSA7OwogCWVzYWMKIGRvbmUKIApAQCAtMTQ3LDcgKzE2MCw3IEBACiAKIGVycm9yICgpIHsKIAlzYXlfY29sb3IgZXJyb3IgImVycm9yOiAkKiIKLQl0cmFwIC0gRVhJVAorCUdJVF9FWElUX09LPXQKIAlleGl0IDEKIH0KIApAQCAtMTc5LDEwICsxOTIsMTcgQEAKIHRlc3Rfc3VjY2Vzcz0wCiAKIGRpZSAoKSB7Ci0JZWNobyA+JjUgIkZBVEFMOiBVbmV4cGVjdGVkIGV4aXQgd2l0aCBjb2RlICQ/IgotCWV4aXQgMQorCWNvZGU9JD8KKwlpZiB0ZXN0IC1uICIkR0lUX0VYSVRfT0siCisJdGhlbgorCQlleGl0ICRjb2RlCisJZWxzZQorCQllY2hvID4mNSAiRkFUQUw6IFVuZXhwZWN0ZWQgZXhpdCB3aXRoIGNvZGUgJGNvZGUiCisJCWV4aXQgMQorCWZpCiB9CiAKK0dJVF9FWElUX09LPQogdHJhcCAnZGllJyBFWElUCiAKICMgVGhlIHNlbWFudGljcyBvZiB0aGUgZWRpdG9yIHZhcmlhYmxlcyBhcmUgdGhhdCBvZiBpbnZva2luZwpAQCAtMTk3LDggKzIxNywzNSBAQAogdGVzdF9zZXRfZWRpdG9yICgpIHsKIAlGQUtFX0VESVRPUj0iJDEiCiAJZXhwb3J0IEZBS0VfRURJVE9SCi0JVklTVUFMPSciJEZBS0VfRURJVE9SIicKLQlleHBvcnQgVklTVUFMCisJRURJVE9SPSciJEZBS0VfRURJVE9SIicKKwlleHBvcnQgRURJVE9SCit9CisKK3Rlc3RfZGVjb2RlX2NvbG9yICgpIHsKKwlzZWQJLWUgJ3MvLlxbMW0vPFdISVRFPi9nJyBcCisJCS1lICdzLy5cWzMxbS88UkVEPi9nJyBcCisJCS1lICdzLy5cWzMybS88R1JFRU4+L2cnIFwKKwkJLWUgJ3MvLlxbMzNtLzxZRUxMT1c+L2cnIFwKKwkJLWUgJ3MvLlxbMzRtLzxCTFVFPi9nJyBcCisJCS1lICdzLy5cWzM1bS88TUFHRU5UQT4vZycgXAorCQktZSAncy8uXFszNm0vPENZQU4+L2cnIFwKKwkJLWUgJ3MvLlxbbS88UkVTRVQ+L2cnCit9CisKK3FfdG9fbnVsICgpIHsKKwlwZXJsIC1wZSAneS9RL1wwMDAvJworfQorCitxX3RvX2NyICgpIHsKKwl0ciBRICdcMDE1JworfQorCithcHBlbmRfY3IgKCkgeworCXNlZCAtZSAncy8kL1EvJyB8IHRyIFEgJ1wwMTUnCit9CisKK3JlbW92ZV9jciAoKSB7CisJdHIgJ1wwMTUnIFEgfCBzZWQgLWUgJ3MvUSQvLycKIH0KIAogdGVzdF90aWNrICgpIHsKQEAgLTI4NSw3ICszMzIsNyBAQAogCXNheV9jb2xvciBlcnJvciAiRkFJTCAkdGVzdF9jb3VudDogJDEiCiAJc2hpZnQKIAllY2hvICIkQCIgfCBzZWQgLWUgJ3MvXi8JLycKLQl0ZXN0ICIkaW1tZWRpYXRlIiA9ICIiIHx8IHsgdHJhcCAtIEVYSVQ7IGV4aXQgMTsgfQorCXRlc3QgIiRpbW1lZGlhdGUiID0gIiIgfHwgeyBHSVRfRVhJVF9PSz10OyBleGl0IDE7IH0KIH0KIAogdGVzdF9rbm93bl9icm9rZW5fb2tfICgpIHsKQEAgLTM0Nyw3ICszOTQsNyBAQAogCQl0aGVuCiAJCQl0ZXN0X2tub3duX2Jyb2tlbl9va18gIiQxIgogCQllbHNlCi0JCSAgICB0ZXN0X2tub3duX2Jyb2tlbl9mYWlsdXJlXyAiJDEiCisJCQl0ZXN0X2tub3duX2Jyb2tlbl9mYWlsdXJlXyAiJDEiCiAJCWZpCiAJZmkKIAllY2hvID4mMyAiIgpAQCAtNDk4LDcgKzU0NSw3IEBACiB9CiAKIHRlc3RfZG9uZSAoKSB7Ci0JdHJhcCAtIEVYSVQKKwlHSVRfRVhJVF9PSz10CiAJdGVzdF9yZXN1bHRzX2Rpcj0iJFRFU1RfRElSRUNUT1JZL3Rlc3QtcmVzdWx0cyIKIAlta2RpciAtcCAiJHRlc3RfcmVzdWx0c19kaXIiCiAJdGVzdF9yZXN1bHRzX3BhdGg9IiR0ZXN0X3Jlc3VsdHNfZGlyLyR7MCUuc2h9LSQkIgpAQCAtNTQxLDE5ICs1ODgsOCBAQAogIyBUZXN0IHRoZSBiaW5hcmllcyB3ZSBoYXZlIGp1c3QgYnVpbHQuICBUaGUgdGVzdHMgYXJlIGtlcHQgaW4KICMgdC8gc3ViZGlyZWN0b3J5IGFuZCBhcmUgcnVuIGluICd0cmFzaCBkaXJlY3RvcnknIHN1YmRpcmVjdG9yeS4KIFRFU1RfRElSRUNUT1JZPSQocHdkKQotaWYgdGVzdCAteiAiJHZhbGdyaW5kIgoraWYgdGVzdCAtbiAiJHZhbGdyaW5kIgogdGhlbgotCWlmIHRlc3QgLXogIiRHSVRfVEVTVF9JTlNUQUxMRUQiCi0JdGhlbgotCQlQQVRIPSRURVNUX0RJUkVDVE9SWS8uLjokUEFUSAotCQlHSVRfRVhFQ19QQVRIPSRURVNUX0RJUkVDVE9SWS8uLgotCWVsc2UKLQkJR0lUX0VYRUNfUEFUSD0kKCRHSVRfVEVTVF9JTlNUQUxMRUQvZ2l0IC0tZXhlYy1wYXRoKSAgfHwKLQkJZXJyb3IgIkNhbm5vdCBydW4gZ2l0IGZyb20gJEdJVF9URVNUX0lOU1RBTExFRC4iCi0JCVBBVEg9JEdJVF9URVNUX0lOU1RBTExFRDokVEVTVF9ESVJFQ1RPUlkvLi46JFBBVEgKLQkJR0lUX0VYRUNfUEFUSD0ke0dJVF9URVNUX0VYRUNfUEFUSDotJEdJVF9FWEVDX1BBVEh9Ci0JZmkKLWVsc2UKIAltYWtlX3N5bWxpbmsgKCkgewogCQl0ZXN0IC1oICIkMiIgJiYKIAkJdGVzdCAiJDEiID0gIiQocmVhZGxpbmsgIiQyIikiIHx8IHsKQEAgLTYxNSw2ICs2NTEsMjQgQEAKIAlQQVRIPSRHSVRfVkFMR1JJTkQvYmluOiRQQVRICiAJR0lUX0VYRUNfUEFUSD0kR0lUX1ZBTEdSSU5EL2JpbgogCWV4cG9ydCBHSVRfVkFMR1JJTkQKK2VsaWYgdGVzdCAtbiAiJEdJVF9URVNUX0lOU1RBTExFRCIgOyB0aGVuCisJR0lUX0VYRUNfUEFUSD0kKCRHSVRfVEVTVF9JTlNUQUxMRUQvZ2l0IC0tZXhlYy1wYXRoKSAgfHwKKwllcnJvciAiQ2Fubm90IHJ1biBnaXQgZnJvbSAkR0lUX1RFU1RfSU5TVEFMTEVELiIKKwlQQVRIPSRHSVRfVEVTVF9JTlNUQUxMRUQ6JFRFU1RfRElSRUNUT1JZLy4uOiRQQVRICisJR0lUX0VYRUNfUEFUSD0ke0dJVF9URVNUX0VYRUNfUEFUSDotJEdJVF9FWEVDX1BBVEh9CitlbHNlICMgbm9ybWFsIGNhc2UsIHVzZSAuLi9iaW4td3JhcHBlcnMgb25seSB1bmxlc3MgJHdpdGhfZGFzaGVzOgorCWdpdF9iaW5fZGlyPSIkVEVTVF9ESVJFQ1RPUlkvLi4vYmluLXdyYXBwZXJzIgorCWlmICEgdGVzdCAteCAiJGdpdF9iaW5fZGlyL2dpdCIgOyB0aGVuCisJCWlmIHRlc3QgLXogIiR3aXRoX2Rhc2hlcyIgOyB0aGVuCisJCQlzYXkgIiRnaXRfYmluX2Rpci9naXQgaXMgbm90IGV4ZWN1dGFibGU7IHVzaW5nIEdJVF9FWEVDX1BBVEgiCisJCWZpCisJCXdpdGhfZGFzaGVzPXQKKwlmaQorCVBBVEg9IiRnaXRfYmluX2RpcjokUEFUSCIKKwlHSVRfRVhFQ19QQVRIPSRURVNUX0RJUkVDVE9SWS8uLgorCWlmIHRlc3QgLW4gIiR3aXRoX2Rhc2hlcyIgOyB0aGVuCisJCVBBVEg9IiRURVNUX0RJUkVDVE9SWS8uLjokUEFUSCIKKwlmaQogZmkKIEdJVF9URU1QTEFURV9ESVI9JChwd2QpLy4uL3RlbXBsYXRlcy9ibHQKIHVuc2V0IEdJVF9DT05GSUcKQEAgLTYyMiwyNSArNjc2LDM5IEBACiBHSVRfQ09ORklHX05PR0xPQkFMPTEKIGV4cG9ydCBQQVRIIEdJVF9FWEVDX1BBVEggR0lUX1RFTVBMQVRFX0RJUiBHSVRfQ09ORklHX05PU1lTVEVNIEdJVF9DT05GSUdfTk9HTE9CQUwKIAorLiAuLi9HSVQtQlVJTEQtT1BUSU9OUworCiBHSVRQRVJMTElCPSQocHdkKS8uLi9wZXJsL2JsaWIvbGliOiQocHdkKS8uLi9wZXJsL2JsaWIvYXJjaC9hdXRvL0dpdAogZXhwb3J0IEdJVFBFUkxMSUIKIHRlc3QgLWQgLi4vdGVtcGxhdGVzL2JsdCB8fCB7CiAJZXJyb3IgIllvdSBoYXZlbid0IGJ1aWx0IHRoaW5ncyB5ZXQsIGhhdmUgeW91PyIKIH0KIAoraWYgdGVzdCAteiAiJEdJVF9URVNUX0lOU1RBTExFRCIgJiYgdGVzdCAteiAiJE5PX1BZVEhPTiIKK3RoZW4KKwlHSVRQWVRIT05MSUI9IiQocHdkKS8uLi9naXRfcmVtb3RlX2hlbHBlcnMvYnVpbGQvbGliIgorCWV4cG9ydCBHSVRQWVRIT05MSUIKKwl0ZXN0IC1kIC4uL2dpdF9yZW1vdGVfaGVscGVycy9idWlsZCB8fCB7CisJCWVycm9yICJZb3UgaGF2ZW4ndCBidWlsdCBnaXRfcmVtb3RlX2hlbHBlcnMgeWV0LCBoYXZlIHlvdT8iCisJfQorZmkKKwogaWYgISB0ZXN0IC14IC4uL3Rlc3QtY2htdGltZTsgdGhlbgogCWVjaG8gPiYyICdZb3UgbmVlZCB0byBidWlsZCB0ZXN0LWNobXRpbWU6JwogCWVjaG8gPiYyICdSdW4gIm1ha2UgdGVzdC1jaG10aW1lIiBpbiB0aGUgc291cmNlICh0b3BsZXZlbCkgZGlyZWN0b3J5JwogCWV4aXQgMQogZmkKIAotLiAuLi9HSVQtQlVJTEQtT1BUSU9OUwotCiAjIFRlc3QgcmVwb3NpdG9yeQogdGVzdD0idHJhc2ggZGlyZWN0b3J5LiQoYmFzZW5hbWUgIiQwIiAuc2gpIgotdGVzdCAhIC16ICIkZGVidWciIHx8IHJlbW92ZV90cmFzaD0iJFRFU1RfRElSRUNUT1JZLyR0ZXN0IgordGVzdCAtbiAiJHJvb3QiICYmIHRlc3Q9IiRyb290LyR0ZXN0IgorY2FzZSAiJHRlc3QiIGluCisvKikgVFJBU0hfRElSRUNUT1JZPSIkdGVzdCIgOzsKKyAqKSBUUkFTSF9ESVJFQ1RPUlk9IiRURVNUX0RJUkVDVE9SWS8kdGVzdCIgOzsKK2VzYWMKK3Rlc3QgISAteiAiJGRlYnVnIiB8fCByZW1vdmVfdHJhc2g9JFRSQVNIX0RJUkVDVE9SWQogcm0gLWZyICIkdGVzdCIgfHwgewotCXRyYXAgLSBFWElUCisJR0lUX0VYSVRfT0s9dAogCWVjaG8gPiY1ICJGQVRBTDogQ2Fubm90IHByZXBhcmUgdGVzdCBhcmVhIgogCWV4aXQgMQogfQpAQCAtNjcwLDYgKzczOCwyMSBAQAogCWVzYWMKIGRvbmUKIAorIyBQcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSAneWVzJyB1dGlsaXR5Cit5ZXMgKCkgeworCWlmIHRlc3QgJCMgPSAwCisJdGhlbgorCQl5PXkKKwllbHNlCisJCXk9IiQqIgorCWZpCisKKwl3aGlsZSBlY2hvICIkeSIKKwlkbworCQk6CisJZG9uZQorfQorCiAjIEZpeCBzb21lIGNvbW1hbmRzIG9uIFdpbmRvd3MKIGNhc2UgJCh1bmFtZSAtcykgaW4KICpNSU5HVyopCkBAIC02OTksNiArNzgyLDcgQEAKIGVzYWMKIAogdGVzdCAteiAiJE5PX1BFUkwiICYmIHRlc3Rfc2V0X3ByZXJlcSBQRVJMCit0ZXN0IC16ICIkTk9fUFlUSE9OIiAmJiB0ZXN0X3NldF9wcmVyZXEgUFlUSE9OCiAKICMgdGVzdCB3aGV0aGVyIHRoZSBmaWxlc3lzdGVtIHN1cHBvcnRzIHN5bWJvbGljIGxpbmtzCiBsbiAtcyB4IHkgMj4vZGV2L251bGwgJiYgdGVzdCAtaCB5IDI+L2Rldi9udWxsICYmIHRlc3Rfc2V0X3ByZXJlcSBTWU1MSU5LUwpkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzL01ha2VmaWxlIGIvdGVtcGxhdGVzL01ha2VmaWxlCmluZGV4IGExMmM2ZTIuLjQwOGYwMTMgMTAwNjQ0Ci0tLSBhL3RlbXBsYXRlcy9NYWtlZmlsZQorKysgYi90ZW1wbGF0ZXMvTWFrZWZpbGUKQEAgLTUwLDQgKzUwLDQgQEAKIGluc3RhbGw6IGFsbAogCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJCh0ZW1wbGF0ZV9pbnN0ZGlyX1NRKScKIAkoY2QgYmx0ICYmICQoVEFSKSBjZiAtIC4pIHwgXAotCShjZCAnJChERVNURElSX1NRKSQodGVtcGxhdGVfaW5zdGRpcl9TUSknICYmIHVtYXNrIDAyMiAmJiAkKFRBUikgeGZvIC0pCisJKGNkICckKERFU1RESVJfU1EpJCh0ZW1wbGF0ZV9pbnN0ZGlyX1NRKScgJiYgdW1hc2sgMDIyICYmICQoVEFSKSB4b2YgLSkKZGlmZiAtLWdpdCBhL3RlbXBsYXRlcy9ob29rcy0tcG9zdC1yZWNlaXZlLnNhbXBsZSBiL3RlbXBsYXRlcy9ob29rcy0tcG9zdC1yZWNlaXZlLnNhbXBsZQppbmRleCAxOGQyZTBmLi43YTgzZTE3IDEwMDc1NQotLS0gYS90ZW1wbGF0ZXMvaG9va3MtLXBvc3QtcmVjZWl2ZS5zYW1wbGUKKysrIGIvdGVtcGxhdGVzL2hvb2tzLS1wb3N0LXJlY2VpdmUuc2FtcGxlCkBAIC05LDcgKzksNyBAQAogIyBGb3IgZXhhbXBsZToKICMgIGFhNDUzMjE2ZDFiM2U0OWU3ZjZmOTg0NDFmYTU2OTQ2ZGRjZDZhMjAgNjhmN2FiZjRlNmY5MjI4MDc4ODlmNTJiYzA0M2VjZDMxYjc5ZjgxNCByZWZzL2hlYWRzL21hc3RlcgogIwotIyBzZWUgY29udHJpYi9ob29rcy8gZm9yIGFuIHNhbXBsZSwgb3IgdW5jb21tZW50IHRoZSBuZXh0IGxpbmUgYW5kCisjIHNlZSBjb250cmliL2hvb2tzLyBmb3IgYSBzYW1wbGUsIG9yIHVuY29tbWVudCB0aGUgbmV4dCBsaW5lIGFuZAogIyByZW5hbWUgdGhlIGZpbGUgdG8gInBvc3QtcmVjZWl2ZSIuCiAKICMuIC91c3Ivc2hhcmUvZG9jL2dpdC1jb3JlL2NvbnRyaWIvaG9va3MvcG9zdC1yZWNlaXZlLWVtYWlsCmRpZmYgLS1naXQgYS90ZW1wbGF0ZXMvaG9va3MtLXByZS1jb21taXQuc2FtcGxlIGIvdGVtcGxhdGVzL2hvb2tzLS1wcmUtY29tbWl0LnNhbXBsZQppbmRleCAwYmE2MjA3Li40MzllZWZkIDEwMDc1NQotLS0gYS90ZW1wbGF0ZXMvaG9va3MtLXByZS1jb21taXQuc2FtcGxlCisrKyBiL3RlbXBsYXRlcy9ob29rcy0tcHJlLWNvbW1pdC5zYW1wbGUKQEAgLTE1LDQgKzE1LDMyIEBACiAJYWdhaW5zdD00YjgyNWRjNjQyY2I2ZWI5YTA2MGU1NGJmOGQ2OTI4OGZiZWU0OTA0CiBmaQogCisjIElmIHlvdSB3YW50IHRvIGFsbG93IG5vbi1hc2NpaSBmaWxlbmFtZXMgc2V0IHRoaXMgdmFyaWFibGUgdG8gdHJ1ZS4KK2FsbG93bm9uYXNjaWk9JChnaXQgY29uZmlnIGhvb2tzLmFsbG93bm9uYXNjaWkpCisKKyMgQ3Jvc3MgcGxhdGZvcm0gcHJvamVjdHMgdGVuZCB0byBhdm9pZCBub24tYXNjaWkgZmlsZW5hbWVzOyBwcmV2ZW50CisjIHRoZW0gZnJvbSBiZWluZyBhZGRlZCB0byB0aGUgcmVwb3NpdG9yeS4gV2UgZXhwbG9pdCB0aGUgZmFjdCB0aGF0IHRoZQorIyBwcmludGFibGUgcmFuZ2Ugc3RhcnRzIGF0IHRoZSBzcGFjZSBjaGFyYWN0ZXIgYW5kIGVuZHMgd2l0aCB0aWxkZS4KK2lmIFsgIiRhbGxvd25vbmFzY2lpIiAhPSAidHJ1ZSIgXSAmJgorCSMgTm90ZSB0aGF0IHRoZSB1c2Ugb2YgYnJhY2tldHMgYXJvdW5kIGEgdHIgcmFuZ2UgaXMgb2sgaGVyZSwgKGl0J3MKKwkjIGV2ZW4gcmVxdWlyZWQsIGZvciBwb3J0YWJpbGl0eSB0byBTb2xhcmlzIDEwJ3MgL3Vzci9iaW4vdHIpLCBzaW5jZQorCSMgdGhlIHNxdWFyZSBicmFja2V0IGJ5dGVzIGhhcHBlbiB0byBmYWxsIGluIHRoZSBkZXNpZ25hdGVkIHJhbmdlLgorCXRlc3QgIiQoZ2l0IGRpZmYgLS1jYWNoZWQgLS1uYW1lLW9ubHkgLS1kaWZmLWZpbHRlcj1BIC16ICRhZ2FpbnN0IHwKKwkgIExDX0FMTD1DIHRyIC1kICdbIC1+XVwwJykiCit0aGVuCisJZWNobyAiRXJyb3I6IEF0dGVtcHQgdG8gYWRkIGEgbm9uLWFzY2lpIGZpbGUgbmFtZS4iCisJZWNobworCWVjaG8gIlRoaXMgY2FuIGNhdXNlIHByb2JsZW1zIGlmIHlvdSB3YW50IHRvIHdvcmsiCisJZWNobyAid2l0aCBwZW9wbGUgb24gb3RoZXIgcGxhdGZvcm1zLiIKKwllY2hvCisJZWNobyAiVG8gYmUgcG9ydGFibGUgaXQgaXMgYWR2aXNhYmxlIHRvIHJlbmFtZSB0aGUgZmlsZSAuLi4iCisJZWNobworCWVjaG8gIklmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZyB5b3UgY2FuIGRpc2FibGUgdGhpcyIKKwllY2hvICJjaGVjayB1c2luZzoiCisJZWNobworCWVjaG8gIiAgZ2l0IGNvbmZpZyBob29rcy5hbGxvd25vbmFzY2lpIHRydWUiCisJZWNobworCWV4aXQgMQorZmkKKwogZXhlYyBnaXQgZGlmZi1pbmRleCAtLWNoZWNrIC0tY2FjaGVkICRhZ2FpbnN0IC0tCmRpZmYgLS1naXQgYS90ZW1wbGF0ZXMvaG9va3MtLXVwZGF0ZS5zYW1wbGUgYi90ZW1wbGF0ZXMvaG9va3MtLXVwZGF0ZS5zYW1wbGUKaW5kZXggZjhiZjQ5MC4uZmQ2M2IyZCAxMDA3NTUKLS0tIGEvdGVtcGxhdGVzL2hvb2tzLS11cGRhdGUuc2FtcGxlCisrKyBiL3RlbXBsYXRlcy9ob29rcy0tdXBkYXRlLnNhbXBsZQpAQCAtMTMsNiArMTMsOSBAQAogIyBob29rcy5hbGxvd2RlbGV0ZXRhZwogIyAgIFRoaXMgYm9vbGVhbiBzZXRzIHdoZXRoZXIgZGVsZXRpbmcgdGFncyB3aWxsIGJlIGFsbG93ZWQgaW4gdGhlCiAjICAgcmVwb3NpdG9yeS4gIEJ5IGRlZmF1bHQgdGhleSB3b24ndCBiZS4KKyMgaG9va3MuYWxsb3dtb2RpZnl0YWcKKyMgICBUaGlzIGJvb2xlYW4gc2V0cyB3aGV0aGVyIGEgdGFnIG1heSBiZSBtb2RpZmllZCBhZnRlciBjcmVhdGlvbi4gQnkgZGVmYXVsdAorIyAgIGl0IHdvbid0IGJlLgogIyBob29rcy5hbGxvd2RlbGV0ZWJyYW5jaAogIyAgIFRoaXMgYm9vbGVhbiBzZXRzIHdoZXRoZXIgZGVsZXRpbmcgYnJhbmNoZXMgd2lsbCBiZSBhbGxvd2VkIGluIHRoZQogIyAgIHJlcG9zaXRvcnkuICBCeSBkZWZhdWx0IHRoZXkgd29uJ3QgYmUuCkBAIC00NCw2ICs0Nyw3IEBACiBhbGxvd2RlbGV0ZWJyYW5jaD0kKGdpdCBjb25maWcgLS1ib29sIGhvb2tzLmFsbG93ZGVsZXRlYnJhbmNoKQogZGVueWNyZWF0ZWJyYW5jaD0kKGdpdCBjb25maWcgLS1ib29sIGhvb2tzLmRlbnljcmVhdGVicmFuY2gpCiBhbGxvd2RlbGV0ZXRhZz0kKGdpdCBjb25maWcgLS1ib29sIGhvb2tzLmFsbG93ZGVsZXRldGFnKQorYWxsb3dtb2RpZnl0YWc9JChnaXQgY29uZmlnIC0tYm9vbCBob29rcy5hbGxvd21vZGlmeXRhZykKIAogIyBjaGVjayBmb3Igbm8gZGVzY3JpcHRpb24KIHByb2plY3RkZXNjPSQoc2VkIC1lICcxcScgIiRHSVRfRElSL2Rlc2NyaXB0aW9uIikKQEAgLTgyLDYgKzg2LDEyIEBACiAJCTs7CiAJcmVmcy90YWdzLyosdGFnKQogCQkjIGFubm90YXRlZCB0YWcKKwkJaWYgWyAiJGFsbG93bW9kaWZ5dGFnIiAhPSAidHJ1ZSIgXSAmJiBnaXQgcmV2LXBhcnNlICRyZWZuYW1lID4gL2Rldi9udWxsIDI+JjEKKwkJdGhlbgorCQkJZWNobyAiKioqIFRhZyAnJHJlZm5hbWUnIGFscmVhZHkgZXhpc3RzLiIgPiYyCisJCQllY2hvICIqKiogTW9kaWZ5aW5nIGEgdGFnIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgcmVwb3NpdG9yeS4iID4mMgorCQkJZXhpdCAxCisJCWZpCiAJCTs7CiAJcmVmcy9oZWFkcy8qLGNvbW1pdCkKIAkJIyBicmFuY2gKZGlmZiAtLWdpdCBhL3Rlc3QtY2htdGltZS5jIGIvdGVzdC1jaG10aW1lLmMKaW5kZXggZDUzNThjYi4uOTI3MTNkMSAxMDA2NDQKLS0tIGEvdGVzdC1jaG10aW1lLmMKKysrIGIvdGVzdC1jaG10aW1lLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogVGhpcyBwcm9ncmFtIGNhbiBlaXRoZXIgY2hhbmdlIG1vZGlmaWNhdGlvbiB0aW1lIG9mIHRoZSBnaXZlbgogICogZmlsZShzKSBvciBqdXN0IHByaW50IGl0LiBUaGUgcHJvZ3JhbSBkb2VzIG5vdCBjaGFuZ2UgYXRpbWUgbm9yCi0gKiBjdGltZSAodGhlaXIgdmFsdWVzIGFyZSBleHBsaWNpdGVseSBwcmVzZXJ2ZWQpLgorICogY3RpbWUgKHRoZWlyIHZhbHVlcyBhcmUgZXhwbGljaXRseSBwcmVzZXJ2ZWQpLgogICoKICAqIFRoZSBtdGltZSBjYW4gYmUgY2hhbmdlZCB0byBhbiBhYnNvbHV0ZSB2YWx1ZToKICAqCkBAIC04Nyw2ICs4NywxNSBAQAogCQkJcmV0dXJuIC0xOwogCQl9CiAKKyNpZmRlZiBXSU4zMgorCQlpZiAoIShzYi5zdF9tb2RlICYgU19JV1VTUikgJiYKKwkJCQljaG1vZChhcmd2W2ldLCBzYi5zdF9tb2RlIHwgU19JV1VTUikpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IG1ha2UgdXNlci13cml0YWJsZSAlczogJXMiLAorCQkJCWFyZ3ZbaV0sIHN0cmVycm9yKGVycm5vKSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKyNlbmRpZgorCiAJCXV0Yi5hY3RpbWUgPSBzYi5zdF9hdGltZTsKIAkJdXRiLm1vZHRpbWUgPSBzZXRfZXEgPyBzZXRfdGltZSA6IHNiLnN0X210aW1lICsgc2V0X3RpbWU7CiAKZGlmZiAtLWdpdCBhL3Rlc3QtZGF0ZS5jIGIvdGVzdC1kYXRlLmMKaW5kZXggNjJlOGYyMy4uYTllNzA1ZiAxMDA2NDQKLS0tIGEvdGVzdC1kYXRlLmMKKysrIGIvdGVzdC1kYXRlLmMKQEAgLTEsMjAgKzEsNjcgQEAKICNpbmNsdWRlICJjYWNoZS5oIgogCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0JaW50IGk7CitzdGF0aWMgY29uc3QgY2hhciAqdXNhZ2VfbXNnID0gIlxuIgorIiAgdGVzdC1kYXRlIHNob3cgW3RpbWVfdF0uLi5cbiIKKyIgIHRlc3QtZGF0ZSBwYXJzZSBbZGF0ZV0uLi5cbiIKKyIgIHRlc3QtZGF0ZSBhcHByb3hpZGF0ZSBbZGF0ZV0uLi5cbiI7CiAKLQlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CitzdGF0aWMgdm9pZCBzaG93X2RhdGVzKGNoYXIgKiphcmd2LCBzdHJ1Y3QgdGltZXZhbCAqbm93KQoreworCWNoYXIgYnVmWzEyOF07CisKKwlmb3IgKDsgKmFyZ3Y7IGFyZ3YrKykgeworCQl0aW1lX3QgdCA9IGF0b2koKmFyZ3YpOworCQlzaG93X2RhdGVfcmVsYXRpdmUodCwgMCwgbm93LCBidWYsIHNpemVvZihidWYpKTsKKwkJcHJpbnRmKCIlcyAtPiAlc1xuIiwgKmFyZ3YsIGJ1Zik7CisJfQorfQorCitzdGF0aWMgdm9pZCBwYXJzZV9kYXRlcyhjaGFyICoqYXJndiwgc3RydWN0IHRpbWV2YWwgKm5vdykKK3sKKwlmb3IgKDsgKmFyZ3Y7IGFyZ3YrKykgewogCQljaGFyIHJlc3VsdFsxMDBdOwogCQl0aW1lX3QgdDsKIAotCQltZW1jcHkocmVzdWx0LCAiYmFkIiwgNCk7Ci0JCXBhcnNlX2RhdGUoYXJndltpXSwgcmVzdWx0LCBzaXplb2YocmVzdWx0KSk7CisJCXJlc3VsdFswXSA9IDA7CisJCXBhcnNlX2RhdGUoKmFyZ3YsIHJlc3VsdCwgc2l6ZW9mKHJlc3VsdCkpOwogCQl0ID0gc3RydG91bChyZXN1bHQsIE5VTEwsIDApOwotCQlwcmludGYoIiVzIC0+ICVzIC0+ICVzIiwgYXJndltpXSwgcmVzdWx0LCBjdGltZSgmdCkpOwotCi0JCXQgPSBhcHByb3hpZGF0ZShhcmd2W2ldKTsKLQkJcHJpbnRmKCIlcyAtPiAlc1xuIiwgYXJndltpXSwgY3RpbWUoJnQpKTsKKwkJcHJpbnRmKCIlcyAtPiAlc1xuIiwgKmFyZ3YsCisJCQl0ID8gc2hvd19kYXRlKHQsIDAsIERBVEVfSVNPODYwMSkgOiAiYmFkIik7CiAJfQorfQorCitzdGF0aWMgdm9pZCBwYXJzZV9hcHByb3hpZGF0ZShjaGFyICoqYXJndiwgc3RydWN0IHRpbWV2YWwgKm5vdykKK3sKKwlmb3IgKDsgKmFyZ3Y7IGFyZ3YrKykgeworCQl0aW1lX3QgdDsKKwkJdCA9IGFwcHJveGlkYXRlX3JlbGF0aXZlKCphcmd2LCBub3cpOworCQlwcmludGYoIiVzIC0+ICVzXG4iLCAqYXJndiwgc2hvd19kYXRlKHQsIDAsIERBVEVfSVNPODYwMSkpOworCX0KK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwljb25zdCBjaGFyICp4OworCisJeCA9IGdldGVudigiVEVTVF9EQVRFX05PVyIpOworCWlmICh4KSB7CisJCW5vdy50dl9zZWMgPSBhdG9pKHgpOworCQlub3cudHZfdXNlYyA9IDA7CisJfQorCWVsc2UKKwkJZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOworCisJYXJndisrOworCWlmICghKmFyZ3YpCisJCXVzYWdlKHVzYWdlX21zZyk7CisJaWYgKCFzdHJjbXAoKmFyZ3YsICJzaG93IikpCisJCXNob3dfZGF0ZXMoYXJndisxLCAmbm93KTsKKwllbHNlIGlmICghc3RyY21wKCphcmd2LCAicGFyc2UiKSkKKwkJcGFyc2VfZGF0ZXMoYXJndisxLCAmbm93KTsKKwllbHNlIGlmICghc3RyY21wKCphcmd2LCAiYXBwcm94aWRhdGUiKSkKKwkJcGFyc2VfYXBwcm94aWRhdGUoYXJndisxLCAmbm93KTsKKwllbHNlCisJCXVzYWdlKHVzYWdlX21zZyk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS90ZXN0LWRlbHRhLmMgYi90ZXN0LWRlbHRhLmMKaW5kZXggM2Q4ODVmZi4uYWY0MGEzYyAxMDA2NDQKLS0tIGEvdGVzdC1kZWx0YS5jCisrKyBiL3Rlc3QtZGVsdGEuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiB0ZXN0LWRlbHRhLmM6IHRlc3QgY29kZSB0byBleGVyY2lzZSBkaWZmLWRlbHRhLmMgYW5kIHBhdGNoLWRlbHRhLmMKICAqCi0gKiAoQykgMjAwNSBOaWNvbGFzIFBpdHJlIDxuaWNvQGNhbS5vcmc+CisgKiAoQykgMjAwNSBOaWNvbGFzIFBpdHJlIDxuaWNvQGZsdXhuaWMubmV0PgogICoKICAqIFRoaXMgY29kZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpkaWZmIC0tZ2l0IGEvdGVzdC1nZW5yYW5kb20uYyBiL3Rlc3QtZ2VucmFuZG9tLmMKaW5kZXggOGFkMjc2ZC4uYjNjMjhkOSAxMDA2NDQKLS0tIGEvdGVzdC1nZW5yYW5kb20uYworKysgYi90ZXN0LWdlbnJhbmRvbS5jCkBAIC00LDggKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA3IGJ5IE5pY29sYXMgUGl0cmUsIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgdmVyc2lvbiAyLgogICovCiAKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogewpkaWZmIC0tZ2l0IGEvdGVzdC1pbmRleC12ZXJzaW9uLmMgYi90ZXN0LWluZGV4LXZlcnNpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmFhZDllCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC1pbmRleC12ZXJzaW9uLmMKQEAgLTAsMCArMSwxNCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgY2FjaGVfaGVhZGVyIGhkcjsKKwlpbnQgdmVyc2lvbjsKKworCW1lbXNldCgmaGRyLDAsc2l6ZW9mKGhkcikpOworCWlmIChyZWFkKDAsICZoZHIsIHNpemVvZihoZHIpKSAhPSBzaXplb2YoaGRyKSkKKwkJcmV0dXJuIDA7CisJdmVyc2lvbiA9IG50b2hsKGhkci5oZHJfdmVyc2lvbik7CisJcHJpbnRmKCIlZFxuIiwgdmVyc2lvbik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0LXBhcnNlLW9wdGlvbnMuYyBiL3Rlc3QtcGFyc2Utb3B0aW9ucy5jCmluZGV4IDYxZDJjMzkuLmFjZDFhMmIgMTAwNjQ0Ci0tLSBhL3Rlc3QtcGFyc2Utb3B0aW9ucy5jCisrKyBiL3Rlc3QtcGFyc2Utb3B0aW9ucy5jCkBAIC03LDggKzcsMTAgQEAKIHN0YXRpYyBpbnQgYWJicmV2ID0gNzsKIHN0YXRpYyBpbnQgdmVyYm9zZSA9IDAsIGRyeV9ydW4gPSAwLCBxdWlldCA9IDA7CiBzdGF0aWMgY2hhciAqc3RyaW5nID0gTlVMTDsKK3N0YXRpYyBjaGFyICpmaWxlID0gTlVMTDsKK3N0YXRpYyBpbnQgYW1iaWd1b3VzOwogCi1pbnQgbGVuZ3RoX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCitzdGF0aWMgaW50IGxlbmd0aF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQogewogCXByaW50ZigiQ2FsbGJhY2s6IFwiJXNcIiwgJWRcbiIsCiAJCShhcmcgPyBhcmcgOiAibm90IHNldCIpLCB1bnNldCk7CkBAIC0xOSw4ICsyMSwxNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG51bWJlcl9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCSooaW50ICopb3B0LT52YWx1ZSA9IHN0cnRvbChhcmcsIE5VTEwsIDEwKTsKKwlyZXR1cm4gMDsKK30KKwogaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogeworCWNvbnN0IGNoYXIgKnByZWZpeCA9ICJwcmVmaXgvIjsKIAljb25zdCBjaGFyICp1c2FnZVtdID0gewogCQkidGVzdC1wYXJzZS1vcHRpb25zIDxvcHRpb25zPiIsCiAJCU5VTEwKQEAgLTI5LDYgKzM4LDcgQEAKIAkJT1BUX0JPT0xFQU4oJ2InLCAiYm9vbGVhbiIsICZib29sZWFuLCAiZ2V0IGEgYm9vbGVhbiIpLAogCQlPUFRfQklUKCc0JywgIm9yNCIsICZib29sZWFuLAogCQkJImJpdHdpc2Utb3IgYm9vbGVhbiB3aXRoIC4uLjAxMDAiLCA0KSwKKwkJT1BUX05FR0JJVCgwLCAibmVnLW9yNCIsICZib29sZWFuLCAic2FtZSBhcyAtLW5vLW9yNCIsIDQpLAogCQlPUFRfR1JPVVAoIiIpLAogCQlPUFRfSU5URUdFUignaScsICJpbnRlZ2VyIiwgJmludGVnZXIsICJnZXQgYSBpbnRlZ2VyIiksCiAJCU9QVF9JTlRFR0VSKCdqJywgTlVMTCwgJmludGVnZXIsICJnZXQgYSBpbnRlZ2VyLCB0b28iKSwKQEAgLTM2LDYgKzQ2LDcgQEAKIAkJT1BUX0RBVEUoJ3QnLCBOVUxMLCAmdGltZXN0YW1wLCAiZ2V0IHRpbWVzdGFtcCBvZiA8dGltZT4iKSwKIAkJT1BUX0NBTExCQUNLKCdMJywgImxlbmd0aCIsICZpbnRlZ2VyLCAic3RyIiwKIAkJCSJnZXQgbGVuZ3RoIG9mIDxzdHI+IiwgbGVuZ3RoX2NhbGxiYWNrKSwKKwkJT1BUX0ZJTEVOQU1FKCdGJywgImZpbGUiLCAmZmlsZSwgInNldCBmaWxlIHRvIDxGSUxFPiIpLAogCQlPUFRfR1JPVVAoIlN0cmluZyBvcHRpb25zIiksCiAJCU9QVF9TVFJJTkcoJ3MnLCAic3RyaW5nIiwgJnN0cmluZywgInN0cmluZyIsICJnZXQgYSBzdHJpbmciKSwKIAkJT1BUX1NUUklORygwLCAic3RyaW5nMiIsICZzdHJpbmcsICJzdHIiLCAiZ2V0IGFub3RoZXIgc3RyaW5nIiksCkBAIC00NSw2ICs1NiwxNCBAQAogCQkJInNldCBzdHJpbmcgdG8gZGVmYXVsdCIsICh1bnNpZ25lZCBsb25nKSJkZWZhdWx0IiksCiAJCU9QVF9HUk9VUCgiTWFnaWMgYXJndW1lbnRzIiksCiAJCU9QVF9BUkdVTUVOVCgicXV1eCIsICJtZWFucyAtLXF1dXgiKSwKKwkJT1BUX05VTUJFUl9DQUxMQkFDSygmaW50ZWdlciwgInNldCBpbnRlZ2VyIHRvIE5VTSIsCisJCQludW1iZXJfY2FsbGJhY2spLAorCQl7IE9QVElPTl9CT09MRUFOLCAnKycsIE5VTEwsICZib29sZWFuLCBOVUxMLCAic2FtZSBhcyAtYiIsCisJCSAgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHIHwgUEFSU0VfT1BUX05PREFTSCB9LAorCQl7IE9QVElPTl9CT09MRUFOLCAwLCAiYW1iaWd1b3VzIiwgJmFtYmlndW91cywgTlVMTCwKKwkJICAicG9zaXRpdmUgYW1iaWd1aXR5IiwgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHIH0sCisJCXsgT1BUSU9OX0JPT0xFQU4sIDAsICJuby1hbWJpZ3VvdXMiLCAmYW1iaWd1b3VzLCBOVUxMLAorCQkgICJuZWdhdGl2ZSBhbWJpZ3VpdHkiLCBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcgfSwKIAkJT1BUX0dST1VQKCJTdGFuZGFyZCBvcHRpb25zIiksCiAJCU9QVF9fQUJCUkVWKCZhYmJyZXYpLAogCQlPUFRfX1ZFUkJPU0UoJnZlcmJvc2UpLApAQCAtNTQsNyArNzMsNyBAQAogCX07CiAJaW50IGk7CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCB1c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCB1c2FnZSwgMCk7CiAKIAlwcmludGYoImJvb2xlYW46ICVkXG4iLCBib29sZWFuKTsKIAlwcmludGYoImludGVnZXI6ICV1XG4iLCBpbnRlZ2VyKTsKQEAgLTY0LDYgKzgzLDcgQEAKIAlwcmludGYoInZlcmJvc2U6ICVkXG4iLCB2ZXJib3NlKTsKIAlwcmludGYoInF1aWV0OiAlc1xuIiwgcXVpZXQgPyAieWVzIiA6ICJubyIpOwogCXByaW50ZigiZHJ5IHJ1bjogJXNcbiIsIGRyeV9ydW4gPyAieWVzIiA6ICJubyIpOworCXByaW50ZigiZmlsZTogJXNcbiIsIGZpbGUgPyBmaWxlIDogIihub3Qgc2V0KSIpOwogCiAJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKIAkJcHJpbnRmKCJhcmcgJTAyZDogJXNcbiIsIGksIGFyZ3ZbaV0pOwpkaWZmIC0tZ2l0IGEvdGVzdC1ydW4tY29tbWFuZC5jIGIvdGVzdC1ydW4tY29tbWFuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MTJiZmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0LXJ1bi1jb21tYW5kLmMKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIHRlc3QtcnVuLWNvbW1hbmQuYzogdGVzdCBydW4gY29tbWFuZCBBUEkuCisgKgorICogKEMpIDIwMDkgSWxhcmkgTGl1c3ZhYXJhIDxpbGFyaS5saXVzdmFhcmFAZWxpc2FuZXQuZmk+CisgKgorICogVGhpcyBjb2RlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgcHJvYzsKKworCW1lbXNldCgmcHJvYywgMCwgc2l6ZW9mKHByb2MpKTsKKworCWlmIChhcmdjIDwgMykKKwkJcmV0dXJuIDE7CisJcHJvYy5hcmd2ID0gKGNvbnN0IGNoYXIgKiopYXJndisyOworCisJaWYgKCFzdHJjbXAoYXJndlsxXSwgInN0YXJ0LWNvbW1hbmQtRU5PRU5UIikpIHsKKwkJaWYgKHN0YXJ0X2NvbW1hbmQoJnByb2MpIDwgMCAmJiBlcnJubyA9PSBFTk9FTlQpCisJCQlyZXR1cm4gMDsKKwkJZnByaW50ZihzdGRlcnIsICJGQUlMICVzXG4iLCBhcmd2WzFdKTsKKwkJcmV0dXJuIDE7CisJfQorCisJZnByaW50ZihzdGRlcnIsICJjaGVjayB1c2FnZVxuIik7CisJcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS90ZXN0LXNoYTEuYyBiL3Rlc3Qtc2hhMS5jCmluZGV4IDliOThkMDcuLjgwZGFiYTkgMTAwNjQ0Ci0tLSBhL3Rlc3Qtc2hhMS5jCisrKyBiL3Rlc3Qtc2hhMS5jCkBAIC0zMiw3ICszMiw3IEBACiAJCQlpZiAoc3ogPT0gMCkKIAkJCQlicmVhazsKIAkJCWlmIChzeiA8IDApCi0JCQkJZGllKCJ0ZXN0LXNoYTE6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQlkaWVfZXJybm8oInRlc3Qtc2hhMSIpOwogCQkJdGhpc19zeiArPSBzejsKIAkJCWNwICs9IHN6OwogCQkJcm9vbSAtPSBzejsKZGlmZiAtLWdpdCBhL3RocmVhZC11dGlscy5jIGIvdGhyZWFkLXV0aWxzLmMKaW5kZXggNTVlN2UyOS4uNGY5YzgyOSAxMDA2NDQKLS0tIGEvdGhyZWFkLXV0aWxzLmMKKysrIGIvdGhyZWFkLXV0aWxzLmMKQEAgLTEsOSArMSw2IEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKIAotI2lmZGVmIF9XSU4zMgotIyAgZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KLSMgIGluY2x1ZGUgPHdpbmRvd3MuaD4KLSNlbGlmIGRlZmluZWQoaHB1eCkgfHwgZGVmaW5lZChfX2hwdXgpIHx8IGRlZmluZWQoX2hwdXgpCisjaWYgZGVmaW5lZChocHV4KSB8fCBkZWZpbmVkKF9faHB1eCkgfHwgZGVmaW5lZChfaHB1eCkKICMgIGluY2x1ZGUgPHN5cy9wc3RhdC5oPgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL3RyYW5zcG9ydC1oZWxwZXIuYyBiL3RyYW5zcG9ydC1oZWxwZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODIyOTcyCi0tLSAvZGV2L251bGwKKysrIGIvdHJhbnNwb3J0LWhlbHBlci5jCkBAIC0wLDAgKzEsNzUzIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKworc3RhdGljIGludCBkZWJ1ZzsKKworc3RydWN0IGhlbHBlcl9kYXRhCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqaGVscGVyOworCUZJTEUgKm91dDsKKwl1bnNpZ25lZCBmZXRjaCA6IDEsCisJCWltcG9ydCA6IDEsCisJCW9wdGlvbiA6IDEsCisJCXB1c2ggOiAxLAorCQljb25uZWN0IDogMSwKKwkJbm9fZGlzY29ubmVjdF9yZXEgOiAxOworCS8qIFRoZXNlIGdvIGZyb20gcmVtb3RlIG5hbWUgKGFzIGluICJsaXN0IikgdG8gcHJpdmF0ZSBuYW1lICovCisJc3RydWN0IHJlZnNwZWMgKnJlZnNwZWNzOworCWludCByZWZzcGVjX25yOworCS8qIFRyYW5zcG9ydCBvcHRpb25zIGZvciBmZXRjaC1wYWNrL3NlbmQtcGFjayAoc2hvdWxkIG9uZSBvZgorCSAqIHRob3NlIGJlIGludm9rZWQpLgorCSAqLworCXN0cnVjdCBnaXRfdHJhbnNwb3J0X29wdGlvbnMgdHJhbnNwb3J0X29wdGlvbnM7Cit9OworCitzdGF0aWMgdm9pZCBzZW5kbGluZShzdHJ1Y3QgaGVscGVyX2RhdGEgKmhlbHBlciwgc3RydWN0IHN0cmJ1ZiAqYnVmZmVyKQoreworCWlmIChkZWJ1ZykKKwkJZnByaW50ZihzdGRlcnIsICJEZWJ1ZzogUmVtb3RlIGhlbHBlcjogLT4gJXMiLCBidWZmZXItPmJ1Zik7CisJaWYgKHdyaXRlX2luX2Z1bGwoaGVscGVyLT5oZWxwZXItPmluLCBidWZmZXItPmJ1ZiwgYnVmZmVyLT5sZW4pCisJCSE9IGJ1ZmZlci0+bGVuKQorCQlkaWVfZXJybm8oIkZ1bGwgd3JpdGUgdG8gcmVtb3RlIGhlbHBlciBmYWlsZWQiKTsKK30KKworc3RhdGljIGludCByZWN2bGluZV9maChGSUxFICpoZWxwZXIsIHN0cnVjdCBzdHJidWYgKmJ1ZmZlcikKK3sKKwlzdHJidWZfcmVzZXQoYnVmZmVyKTsKKwlpZiAoZGVidWcpCisJCWZwcmludGYoc3RkZXJyLCAiRGVidWc6IFJlbW90ZSBoZWxwZXI6IFdhaXRpbmcuLi5cbiIpOworCWlmIChzdHJidWZfZ2V0bGluZShidWZmZXIsIGhlbHBlciwgJ1xuJykgPT0gRU9GKSB7CisJCWlmIChkZWJ1ZykKKwkJCWZwcmludGYoc3RkZXJyLCAiRGVidWc6IFJlbW90ZSBoZWxwZXIgcXVpdC5cbiIpOworCQlleGl0KDEyOCk7CisJfQorCisJaWYgKGRlYnVnKQorCQlmcHJpbnRmKHN0ZGVyciwgIkRlYnVnOiBSZW1vdGUgaGVscGVyOiA8LSAlc1xuIiwgYnVmZmVyLT5idWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlY3ZsaW5lKHN0cnVjdCBoZWxwZXJfZGF0YSAqaGVscGVyLCBzdHJ1Y3Qgc3RyYnVmICpidWZmZXIpCit7CisJcmV0dXJuIHJlY3ZsaW5lX2ZoKGhlbHBlci0+b3V0LCBidWZmZXIpOworfQorCitzdGF0aWMgdm9pZCB4Y2hnbGluZShzdHJ1Y3QgaGVscGVyX2RhdGEgKmhlbHBlciwgc3RydWN0IHN0cmJ1ZiAqYnVmZmVyKQoreworCXNlbmRsaW5lKGhlbHBlciwgYnVmZmVyKTsKKwlyZWN2bGluZShoZWxwZXIsIGJ1ZmZlcik7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2NvbnN0YW50KGludCBmZCwgY29uc3QgY2hhciAqc3RyKQoreworCWlmIChkZWJ1ZykKKwkJZnByaW50ZihzdGRlcnIsICJEZWJ1ZzogUmVtb3RlIGhlbHBlcjogLT4gJXMiLCBzdHIpOworCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBzdHIsIHN0cmxlbihzdHIpKSAhPSBzdHJsZW4oc3RyKSkKKwkJZGllX2Vycm5vKCJGdWxsIHdyaXRlIHRvIHJlbW90ZSBoZWxwZXIgZmFpbGVkIik7Cit9CisKK2NvbnN0IGNoYXIgKnJlbW92ZV9leHRfZm9yY2UoY29uc3QgY2hhciAqdXJsKQoreworCWlmICh1cmwpIHsKKwkJY29uc3QgY2hhciAqY29sb24gPSBzdHJjaHIodXJsLCAnOicpOworCQlpZiAoY29sb24gJiYgY29sb25bMV0gPT0gJzonKQorCQkJcmV0dXJuIGNvbG9uICsgMjsKKwl9CisJcmV0dXJuIHVybDsKK30KKworc3RhdGljIHZvaWQgZG9fdGFrZV9vdmVyKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCkKK3sKKwlzdHJ1Y3QgaGVscGVyX2RhdGEgKmRhdGE7CisJZGF0YSA9IChzdHJ1Y3QgaGVscGVyX2RhdGEgKil0cmFuc3BvcnQtPmRhdGE7CisJdHJhbnNwb3J0X3Rha2Vfb3Zlcih0cmFuc3BvcnQsIGRhdGEtPmhlbHBlcik7CisJZmNsb3NlKGRhdGEtPm91dCk7CisJZnJlZShkYXRhKTsKK30KKworc3RhdGljIHN0cnVjdCBjaGlsZF9wcm9jZXNzICpnZXRfaGVscGVyKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCkKK3sKKwlzdHJ1Y3QgaGVscGVyX2RhdGEgKmRhdGEgPSB0cmFuc3BvcnQtPmRhdGE7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqaGVscGVyOworCWNvbnN0IGNoYXIgKipyZWZzcGVjcyA9IE5VTEw7CisJaW50IHJlZnNwZWNfbnIgPSAwOworCWludCByZWZzcGVjX2FsbG9jID0gMDsKKwlpbnQgZHVwZWQ7CisJaW50IGNvZGU7CisKKwlpZiAoZGF0YS0+aGVscGVyKQorCQlyZXR1cm4gZGF0YS0+aGVscGVyOworCisJaGVscGVyID0geGNhbGxvYygxLCBzaXplb2YoKmhlbHBlcikpOworCWhlbHBlci0+aW4gPSAtMTsKKwloZWxwZXItPm91dCA9IC0xOworCWhlbHBlci0+ZXJyID0gMDsKKwloZWxwZXItPmFyZ3YgPSB4Y2FsbG9jKDQsIHNpemVvZigqaGVscGVyLT5hcmd2KSk7CisJc3RyYnVmX2FkZGYoJmJ1ZiwgImdpdC1yZW1vdGUtJXMiLCBkYXRhLT5uYW1lKTsKKwloZWxwZXItPmFyZ3ZbMF0gPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCWhlbHBlci0+YXJndlsxXSA9IHRyYW5zcG9ydC0+cmVtb3RlLT5uYW1lOworCWhlbHBlci0+YXJndlsyXSA9IHJlbW92ZV9leHRfZm9yY2UodHJhbnNwb3J0LT51cmwpOworCWhlbHBlci0+Z2l0X2NtZCA9IDA7CisJaGVscGVyLT5zaWxlbnRfZXhlY19mYWlsdXJlID0gMTsKKwljb2RlID0gc3RhcnRfY29tbWFuZChoZWxwZXIpOworCWlmIChjb2RlIDwgMCAmJiBlcnJubyA9PSBFTk9FTlQpCisJCWRpZSgiVW5hYmxlIHRvIGZpbmQgcmVtb3RlIGhlbHBlciBmb3IgJyVzJyIsIGRhdGEtPm5hbWUpOworCWVsc2UgaWYgKGNvZGUgIT0gMCkKKwkJZXhpdChjb2RlKTsKKworCWRhdGEtPmhlbHBlciA9IGhlbHBlcjsKKwlkYXRhLT5ub19kaXNjb25uZWN0X3JlcSA9IDA7CisKKwkvKgorCSAqIE9wZW4gdGhlIG91dHB1dCBhcyBGSUxFKiBzbyBzdHJidWZfZ2V0bGluZSgpIGNhbiBiZSB1c2VkLgorCSAqIERvIHRoaXMgd2l0aCBkdXBlZCBmZCBiZWNhdXNlIGZjbG9zZSgpIHdpbGwgY2xvc2UgdGhlIGZkLAorCSAqIGFuZCBzdHVmZiBsaWtlIHRha2luZyBvdmVyIHdpbGwgcmVxdWlyZSB0aGUgZmQgdG8gcmVtYWluLgorCSAqLworCWR1cGVkID0gZHVwKGhlbHBlci0+b3V0KTsKKwlpZiAoZHVwZWQgPCAwKQorCQlkaWVfZXJybm8oIkNhbid0IGR1cCBoZWxwZXIgb3V0cHV0IGZkIik7CisJZGF0YS0+b3V0ID0geGZkb3BlbihkdXBlZCwgInIiKTsKKworCXdyaXRlX2NvbnN0YW50KGhlbHBlci0+aW4sICJjYXBhYmlsaXRpZXNcbiIpOworCisJd2hpbGUgKDEpIHsKKwkJY29uc3QgY2hhciAqY2FwbmFtZTsKKwkJaW50IG1hbmRhdG9yeSA9IDA7CisJCXJlY3ZsaW5lKGRhdGEsICZidWYpOworCisJCWlmICghKmJ1Zi5idWYpCisJCQlicmVhazsKKworCQlpZiAoKmJ1Zi5idWYgPT0gJyonKSB7CisJCQljYXBuYW1lID0gYnVmLmJ1ZiArIDE7CisJCQltYW5kYXRvcnkgPSAxOworCQl9IGVsc2UKKwkJCWNhcG5hbWUgPSBidWYuYnVmOworCisJCWlmIChkZWJ1ZykKKwkJCWZwcmludGYoc3RkZXJyLCAiRGVidWc6IEdvdCBjYXAgJXNcbiIsIGNhcG5hbWUpOworCQlpZiAoIXN0cmNtcChjYXBuYW1lLCAiZmV0Y2giKSkKKwkJCWRhdGEtPmZldGNoID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChjYXBuYW1lLCAib3B0aW9uIikpCisJCQlkYXRhLT5vcHRpb24gPSAxOworCQllbHNlIGlmICghc3RyY21wKGNhcG5hbWUsICJwdXNoIikpCisJCQlkYXRhLT5wdXNoID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChjYXBuYW1lLCAiaW1wb3J0IikpCisJCQlkYXRhLT5pbXBvcnQgPSAxOworCQllbHNlIGlmICghZGF0YS0+cmVmc3BlY3MgJiYgIXByZWZpeGNtcChjYXBuYW1lLCAicmVmc3BlYyAiKSkgeworCQkJQUxMT0NfR1JPVyhyZWZzcGVjcywKKwkJCQkgICByZWZzcGVjX25yICsgMSwKKwkJCQkgICByZWZzcGVjX2FsbG9jKTsKKwkJCXJlZnNwZWNzW3JlZnNwZWNfbnIrK10gPSBzdHJkdXAoYnVmLmJ1ZiArIHN0cmxlbigicmVmc3BlYyAiKSk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjYXBuYW1lLCAiY29ubmVjdCIpKSB7CisJCQlkYXRhLT5jb25uZWN0ID0gMTsKKwkJfSBlbHNlIGlmIChtYW5kYXRvcnkpIHsKKwkJCWRpZSgiVW5rbm93biBtYW5kYXRvcnkgY2FwYWJpbGl0eSAlcy4gVGhpcyByZW1vdGUgIgorCQkJICAgICJoZWxwZXIgcHJvYmFibHkgbmVlZHMgbmV3ZXIgdmVyc2lvbiBvZiBHaXQuXG4iLAorCQkJICAgIGNhcG5hbWUpOworCQl9CisJfQorCWlmIChyZWZzcGVjcykgeworCQlpbnQgaTsKKwkJZGF0YS0+cmVmc3BlY19uciA9IHJlZnNwZWNfbnI7CisJCWRhdGEtPnJlZnNwZWNzID0gcGFyc2VfZmV0Y2hfcmVmc3BlYyhyZWZzcGVjX25yLCByZWZzcGVjcyk7CisJCWZvciAoaSA9IDA7IGkgPCByZWZzcGVjX25yOyBpKyspIHsKKwkJCWZyZWUoKGNoYXIgKilyZWZzcGVjc1tpXSk7CisJCX0KKwkJZnJlZShyZWZzcGVjcyk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCWlmIChkZWJ1ZykKKwkJZnByaW50ZihzdGRlcnIsICJEZWJ1ZzogQ2FwYWJpbGl0aWVzIGNvbXBsZXRlLlxuIik7CisJcmV0dXJuIGRhdGEtPmhlbHBlcjsKK30KKworc3RhdGljIGludCBkaXNjb25uZWN0X2hlbHBlcihzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpCit7CisJc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoZGF0YS0+aGVscGVyKSB7CisJCWlmIChkZWJ1ZykKKwkJCWZwcmludGYoc3RkZXJyLCAiRGVidWc6IERpc2Nvbm5lY3RpbmcuXG4iKTsKKwkJaWYgKCFkYXRhLT5ub19kaXNjb25uZWN0X3JlcSkgeworCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIlxuIik7CisJCQlzZW5kbGluZShkYXRhLCAmYnVmKTsKKwkJfQorCQljbG9zZShkYXRhLT5oZWxwZXItPmluKTsKKwkJY2xvc2UoZGF0YS0+aGVscGVyLT5vdXQpOworCQlmY2xvc2UoZGF0YS0+b3V0KTsKKwkJZmluaXNoX2NvbW1hbmQoZGF0YS0+aGVscGVyKTsKKwkJZnJlZSgoY2hhciAqKWRhdGEtPmhlbHBlci0+YXJndlswXSk7CisJCWZyZWUoZGF0YS0+aGVscGVyLT5hcmd2KTsKKwkJZnJlZShkYXRhLT5oZWxwZXIpOworCQlkYXRhLT5oZWxwZXIgPSBOVUxMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnVuc3VwcG9ydGVkX29wdGlvbnNbXSA9IHsKKwlUUkFOU19PUFRfVVBMT0FEUEFDSywKKwlUUkFOU19PUFRfUkVDRUlWRVBBQ0ssCisJVFJBTlNfT1BUX1RISU4sCisJVFJBTlNfT1BUX0tFRVAKKwl9Oworc3RhdGljIGNvbnN0IGNoYXIgKmJvb2xlYW5fb3B0aW9uc1tdID0geworCVRSQU5TX09QVF9USElOLAorCVRSQU5TX09QVF9LRUVQLAorCVRSQU5TX09QVF9GT0xMT1dUQUdTCisJfTsKKworc3RhdGljIGludCBzZXRfaGVscGVyX29wdGlvbihzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCQkgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCXN0cnVjdCBoZWxwZXJfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCBpLCByZXQsIGlzX2Jvb2wgPSAwOworCisJZ2V0X2hlbHBlcih0cmFuc3BvcnQpOworCisJaWYgKCFkYXRhLT5vcHRpb24pCisJCXJldHVybiAxOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodW5zdXBwb3J0ZWRfb3B0aW9ucyk7IGkrKykgeworCQlpZiAoIXN0cmNtcChuYW1lLCB1bnN1cHBvcnRlZF9vcHRpb25zW2ldKSkKKwkJCXJldHVybiAxOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJvb2xlYW5fb3B0aW9ucyk7IGkrKykgeworCQlpZiAoIXN0cmNtcChuYW1lLCBib29sZWFuX29wdGlvbnNbaV0pKSB7CisJCQlpc19ib29sID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJc3RyYnVmX2FkZGYoJmJ1ZiwgIm9wdGlvbiAlcyAiLCBuYW1lKTsKKwlpZiAoaXNfYm9vbCkKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCB2YWx1ZSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCWVsc2UKKwkJcXVvdGVfY19zdHlsZSh2YWx1ZSwgJmJ1ZiwgTlVMTCwgMCk7CisJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOworCisJeGNoZ2xpbmUoZGF0YSwgJmJ1Zik7CisKKwlpZiAoIXN0cmNtcChidWYuYnVmLCAib2siKSkKKwkJcmV0ID0gMDsKKwllbHNlIGlmICghcHJlZml4Y21wKGJ1Zi5idWYsICJlcnJvciIpKSB7CisJCXJldCA9IC0xOworCX0gZWxzZSBpZiAoIXN0cmNtcChidWYuYnVmLCAidW5zdXBwb3J0ZWQiKSkKKwkJcmV0ID0gMTsKKwllbHNlIHsKKwkJd2FybmluZygiJXMgdW5leHBlY3RlZGx5IHNhaWQ6ICclcyciLCBkYXRhLT5uYW1lLCBidWYuYnVmKTsKKwkJcmV0ID0gMTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc3RhbmRhcmRfb3B0aW9ucyhzdHJ1Y3QgdHJhbnNwb3J0ICp0KQoreworCWNoYXIgYnVmWzE2XTsKKwlpbnQgbjsKKwlpbnQgdiA9IHQtPnZlcmJvc2U7CisJaW50IG5vX3Byb2dyZXNzID0gdiA8IDAgfHwgKCF0LT5wcm9ncmVzcyAmJiAhaXNhdHR5KDIpKTsKKworCXNldF9oZWxwZXJfb3B0aW9uKHQsICJwcm9ncmVzcyIsICFub19wcm9ncmVzcyA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCisJbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIHYgKyAxKTsKKwlpZiAobiA+PSBzaXplb2YoYnVmKSkKKwkJZGllKCJpbXBvc3NpYmx5IGxhcmdlIHZlcmJvc2l0eSB2YWx1ZSIpOworCXNldF9oZWxwZXJfb3B0aW9uKHQsICJ2ZXJib3NpdHkiLCBidWYpOworfQorCitzdGF0aWMgaW50IHJlbGVhc2VfaGVscGVyKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCkKK3sKKwlzdHJ1Y3QgaGVscGVyX2RhdGEgKmRhdGEgPSB0cmFuc3BvcnQtPmRhdGE7CisJZnJlZV9yZWZzcGVjKGRhdGEtPnJlZnNwZWNfbnIsIGRhdGEtPnJlZnNwZWNzKTsKKwlkYXRhLT5yZWZzcGVjcyA9IE5VTEw7CisJZGlzY29ubmVjdF9oZWxwZXIodHJhbnNwb3J0KTsKKwlmcmVlKHRyYW5zcG9ydC0+ZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfd2l0aF9mZXRjaChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCQkgICAgaW50IG5yX2hlYWRzLCBzdHJ1Y3QgcmVmICoqdG9fZmV0Y2gpCit7CisJc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCWludCBpOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlzdGFuZGFyZF9vcHRpb25zKHRyYW5zcG9ydCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaGVhZHM7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgcmVmICpwb3NuID0gdG9fZmV0Y2hbaV07CisJCWlmIChwb3NuLT5zdGF0dXMgJiBSRUZfU1RBVFVTX1VQVE9EQVRFKQorCQkJY29udGludWU7CisKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgImZldGNoICVzICVzXG4iLAorCQkJICAgIHNoYTFfdG9faGV4KHBvc24tPm9sZF9zaGExKSwgcG9zbi0+bmFtZSk7CisJfQorCisJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOworCXNlbmRsaW5lKGRhdGEsICZidWYpOworCisJd2hpbGUgKDEpIHsKKwkJcmVjdmxpbmUoZGF0YSwgJmJ1Zik7CisKKwkJaWYgKCFwcmVmaXhjbXAoYnVmLmJ1ZiwgImxvY2sgIikpIHsKKwkJCWNvbnN0IGNoYXIgKm5hbWUgPSBidWYuYnVmICsgNTsKKwkJCWlmICh0cmFuc3BvcnQtPnBhY2tfbG9ja2ZpbGUpCisJCQkJd2FybmluZygiJXMgYWxzbyBsb2NrZWQgJXMiLCBkYXRhLT5uYW1lLCBuYW1lKTsKKwkJCWVsc2UKKwkJCQl0cmFuc3BvcnQtPnBhY2tfbG9ja2ZpbGUgPSB4c3RyZHVwKG5hbWUpOworCQl9CisJCWVsc2UgaWYgKCFidWYubGVuKQorCQkJYnJlYWs7CisJCWVsc2UKKwkJCXdhcm5pbmcoIiVzIHVuZXhwZWN0ZWRseSBzYWlkOiAnJXMnIiwgZGF0YS0+bmFtZSwgYnVmLmJ1Zik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9pbXBvcnRlcihzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIHN0cnVjdCBjaGlsZF9wcm9jZXNzICpmYXN0aW1wb3J0KQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzICpoZWxwZXIgPSBnZXRfaGVscGVyKHRyYW5zcG9ydCk7CisJbWVtc2V0KGZhc3RpbXBvcnQsIDAsIHNpemVvZigqZmFzdGltcG9ydCkpOworCWZhc3RpbXBvcnQtPmluID0gaGVscGVyLT5vdXQ7CisJZmFzdGltcG9ydC0+YXJndiA9IHhjYWxsb2MoNSwgc2l6ZW9mKCpmYXN0aW1wb3J0LT5hcmd2KSk7CisJZmFzdGltcG9ydC0+YXJndlswXSA9ICJmYXN0LWltcG9ydCI7CisJZmFzdGltcG9ydC0+YXJndlsxXSA9ICItLXF1aWV0IjsKKworCWZhc3RpbXBvcnQtPmdpdF9jbWQgPSAxOworCXJldHVybiBzdGFydF9jb21tYW5kKGZhc3RpbXBvcnQpOworfQorCitzdGF0aWMgaW50IGZldGNoX3dpdGhfaW1wb3J0KHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJCSAgICAgaW50IG5yX2hlYWRzLCBzdHJ1Y3QgcmVmICoqdG9fZmV0Y2gpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgZmFzdGltcG9ydDsKKwlzdHJ1Y3QgaGVscGVyX2RhdGEgKmRhdGEgPSB0cmFuc3BvcnQtPmRhdGE7CisJaW50IGk7CisJc3RydWN0IHJlZiAqcG9zbjsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJZ2V0X2hlbHBlcih0cmFuc3BvcnQpOworCisJaWYgKGdldF9pbXBvcnRlcih0cmFuc3BvcnQsICZmYXN0aW1wb3J0KSkKKwkJZGllKCJDb3VsZG4ndCBydW4gZmFzdC1pbXBvcnQiKTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9oZWFkczsgaSsrKSB7CisJCXBvc24gPSB0b19mZXRjaFtpXTsKKwkJaWYgKHBvc24tPnN0YXR1cyAmIFJFRl9TVEFUVVNfVVBUT0RBVEUpCisJCQljb250aW51ZTsKKworCQlzdHJidWZfYWRkZigmYnVmLCAiaW1wb3J0ICVzXG4iLCBwb3NuLT5uYW1lKTsKKwkJc2VuZGxpbmUoZGF0YSwgJmJ1Zik7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwl9CisJZGlzY29ubmVjdF9oZWxwZXIodHJhbnNwb3J0KTsKKwlmaW5pc2hfY29tbWFuZCgmZmFzdGltcG9ydCk7CisJZnJlZShmYXN0aW1wb3J0LmFyZ3YpOworCWZhc3RpbXBvcnQuYXJndiA9IE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaGVhZHM7IGkrKykgeworCQljaGFyICpwcml2YXRlOworCQlwb3NuID0gdG9fZmV0Y2hbaV07CisJCWlmIChwb3NuLT5zdGF0dXMgJiBSRUZfU1RBVFVTX1VQVE9EQVRFKQorCQkJY29udGludWU7CisJCWlmIChkYXRhLT5yZWZzcGVjcykKKwkJCXByaXZhdGUgPSBhcHBseV9yZWZzcGVjcyhkYXRhLT5yZWZzcGVjcywgZGF0YS0+cmVmc3BlY19uciwgcG9zbi0+bmFtZSk7CisJCWVsc2UKKwkJCXByaXZhdGUgPSBzdHJkdXAocG9zbi0+bmFtZSk7CisJCXJlYWRfcmVmKHByaXZhdGUsIHBvc24tPm9sZF9zaGExKTsKKwkJZnJlZShwcml2YXRlKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19jb25uZWN0X3NlcnZpY2Uoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmV4ZWMpCit7CisJc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCXN0cnVjdCBzdHJidWYgY21kYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmhlbHBlcjsKKwlpbnQgciwgZHVwZWQsIHJldCA9IDA7CisJRklMRSAqaW5wdXQ7CisKKwloZWxwZXIgPSBnZXRfaGVscGVyKHRyYW5zcG9ydCk7CisKKwkvKgorCSAqIFllcywgZHVwIHRoZSBwaXBlIGFub3RoZXIgdGltZSwgYXMgd2UgbmVlZCB1bmJ1ZmZlcmVkIHZlcnNpb24KKwkgKiBvZiBpbnB1dCBwaXBlIGFzIEZJTEUqLiBmY2xvc2UoKSBjbG9zZXMgdGhlIHVuZGVybHlpbmcgZmQgYW5kCisJICogc3RyZWFtIGJ1ZmZlcmluZyBvbmx5IGNhbiBiZSBjaGFuZ2VkIGJlZm9yZSBmaXJzdCBJL08gb3BlcmF0aW9uCisJICogb24gaXQuCisJICovCisJZHVwZWQgPSBkdXAoaGVscGVyLT5vdXQpOworCWlmIChkdXBlZCA8IDApCisJCWRpZV9lcnJubygiQ2FuJ3QgZHVwIGhlbHBlciBvdXRwdXQgZmQiKTsKKwlpbnB1dCA9IHhmZG9wZW4oZHVwZWQsICJyIik7CisJc2V0dmJ1ZihpbnB1dCwgTlVMTCwgX0lPTkJGLCAwKTsKKworCS8qCisJICogSGFuZGxlIC0tdXBsb2FkLXBhY2sgYW5kIGZyaWVuZHMuIFRoaXMgaXMgZmlyZSBhbmQgZm9yZ2V0Li4uCisJICoganVzdCB3YXJuIGlmIGl0IGZhaWxzLgorCSAqLworCWlmIChzdHJjbXAobmFtZSwgZXhlYykpIHsKKwkJciA9IHNldF9oZWxwZXJfb3B0aW9uKHRyYW5zcG9ydCwgInNlcnZwYXRoIiwgZXhlYyk7CisJCWlmIChyID4gMCkKKwkJCXdhcm5pbmcoIlNldHRpbmcgcmVtb3RlIHNlcnZpY2UgcGF0aCBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sLiIpOworCQllbHNlIGlmIChyIDwgMCkKKwkJCXdhcm5pbmcoIkludmFsaWQgcmVtb3RlIHNlcnZpY2UgcGF0aC4iKTsKKwl9CisKKwlpZiAoZGF0YS0+Y29ubmVjdCkKKwkJc3RyYnVmX2FkZGYoJmNtZGJ1ZiwgImNvbm5lY3QgJXNcbiIsIG5hbWUpOworCWVsc2UKKwkJZ290byBleGl0OworCisJc2VuZGxpbmUoZGF0YSwgJmNtZGJ1Zik7CisJcmVjdmxpbmVfZmgoaW5wdXQsICZjbWRidWYpOworCWlmICghc3RyY21wKGNtZGJ1Zi5idWYsICIiKSkgeworCQlkYXRhLT5ub19kaXNjb25uZWN0X3JlcSA9IDE7CisJCWlmIChkZWJ1ZykKKwkJCWZwcmludGYoc3RkZXJyLCAiRGVidWc6IFNtYXJ0IHRyYW5zcG9ydCBjb25uZWN0aW9uICIKKwkJCQkicmVhZHkuXG4iKTsKKwkJcmV0ID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoY21kYnVmLmJ1ZiwgImZhbGxiYWNrIikpIHsKKwkJaWYgKGRlYnVnKQorCQkJZnByaW50ZihzdGRlcnIsICJEZWJ1ZzogRmFsbGluZyBiYWNrIHRvIGR1bWIgIgorCQkJCSJ0cmFuc3BvcnQuXG4iKTsKKwl9IGVsc2UKKwkJZGllKCJVbmtub3duIHJlc3BvbnNlIHRvIGNvbm5lY3Q6ICVzIiwKKwkJCWNtZGJ1Zi5idWYpOworCitleGl0OgorCWZjbG9zZShpbnB1dCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwcm9jZXNzX2Nvbm5lY3Qoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQkJCSAgICAgaW50IGZvcl9wdXNoKQoreworCXN0cnVjdCBoZWxwZXJfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKmV4ZWM7CisKKwluYW1lID0gZm9yX3B1c2ggPyAiZ2l0LXJlY2VpdmUtcGFjayIgOiAiZ2l0LXVwbG9hZC1wYWNrIjsKKwlpZiAoZm9yX3B1c2gpCisJCWV4ZWMgPSBkYXRhLT50cmFuc3BvcnRfb3B0aW9ucy5yZWNlaXZlcGFjazsKKwllbHNlCisJCWV4ZWMgPSBkYXRhLT50cmFuc3BvcnRfb3B0aW9ucy51cGxvYWRwYWNrOworCisJcmV0dXJuIHByb2Nlc3NfY29ubmVjdF9zZXJ2aWNlKHRyYW5zcG9ydCwgbmFtZSwgZXhlYyk7Cit9CisKK3N0YXRpYyBpbnQgY29ubmVjdF9oZWxwZXIoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBjb25zdCBjaGFyICpuYW1lLAorCQkgICBjb25zdCBjaGFyICpleGVjLCBpbnQgZmRbMl0pCit7CisJc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCisJLyogR2V0X2hlbHBlciBzbyBjb25uZWN0IGlzIGluaXRlZC4gKi8KKwlnZXRfaGVscGVyKHRyYW5zcG9ydCk7CisJaWYgKCFkYXRhLT5jb25uZWN0KQorCQlkaWUoIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sLiIpOworCisJaWYgKCFwcm9jZXNzX2Nvbm5lY3Rfc2VydmljZSh0cmFuc3BvcnQsIG5hbWUsIGV4ZWMpKQorCQlkaWUoIkNhbid0IGNvbm5lY3QgdG8gc3Vic2VydmljZSAlcy4iLCBuYW1lKTsKKworCWZkWzBdID0gZGF0YS0+aGVscGVyLT5vdXQ7CisJZmRbMV0gPSBkYXRhLT5oZWxwZXItPmluOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZldGNoKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJIGludCBucl9oZWFkcywgc3RydWN0IHJlZiAqKnRvX2ZldGNoKQoreworCXN0cnVjdCBoZWxwZXJfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKwlpbnQgaSwgY291bnQ7CisKKwlpZiAocHJvY2Vzc19jb25uZWN0KHRyYW5zcG9ydCwgMCkpIHsKKwkJZG9fdGFrZV9vdmVyKHRyYW5zcG9ydCk7CisJCXJldHVybiB0cmFuc3BvcnQtPmZldGNoKHRyYW5zcG9ydCwgbnJfaGVhZHMsIHRvX2ZldGNoKTsKKwl9CisKKwljb3VudCA9IDA7CisJZm9yIChpID0gMDsgaSA8IG5yX2hlYWRzOyBpKyspCisJCWlmICghKHRvX2ZldGNoW2ldLT5zdGF0dXMgJiBSRUZfU1RBVFVTX1VQVE9EQVRFKSkKKwkJCWNvdW50Kys7CisKKwlpZiAoIWNvdW50KQorCQlyZXR1cm4gMDsKKworCWlmIChkYXRhLT5mZXRjaCkKKwkJcmV0dXJuIGZldGNoX3dpdGhfZmV0Y2godHJhbnNwb3J0LCBucl9oZWFkcywgdG9fZmV0Y2gpOworCisJaWYgKGRhdGEtPmltcG9ydCkKKwkJcmV0dXJuIGZldGNoX3dpdGhfaW1wb3J0KHRyYW5zcG9ydCwgbnJfaGVhZHMsIHRvX2ZldGNoKTsKKworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBwdXNoX3JlZnMoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQlzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywgaW50IGZsYWdzKQoreworCWludCBmb3JjZV9hbGwgPSBmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0ZPUkNFOworCWludCBtaXJyb3IgPSBmbGFncyAmIFRSQU5TUE9SVF9QVVNIX01JUlJPUjsKKwlzdHJ1Y3QgaGVscGVyX2RhdGEgKmRhdGEgPSB0cmFuc3BvcnQtPmRhdGE7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqaGVscGVyOworCXN0cnVjdCByZWYgKnJlZjsKKworCWlmIChwcm9jZXNzX2Nvbm5lY3QodHJhbnNwb3J0LCAxKSkgeworCQlkb190YWtlX292ZXIodHJhbnNwb3J0KTsKKwkJcmV0dXJuIHRyYW5zcG9ydC0+cHVzaF9yZWZzKHRyYW5zcG9ydCwgcmVtb3RlX3JlZnMsIGZsYWdzKTsKKwl9CisKKwlpZiAoIXJlbW90ZV9yZWZzKSB7CisJCWZwcmludGYoc3RkZXJyLCAiTm8gcmVmcyBpbiBjb21tb24gYW5kIG5vbmUgc3BlY2lmaWVkOyBkb2luZyBub3RoaW5nLlxuIgorCQkJIlBlcmhhcHMgeW91IHNob3VsZCBzcGVjaWZ5IGEgYnJhbmNoIHN1Y2ggYXMgJ21hc3RlcicuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaGVscGVyID0gZ2V0X2hlbHBlcih0cmFuc3BvcnQpOworCWlmICghZGF0YS0+cHVzaCkKKwkJcmV0dXJuIDE7CisKKwlmb3IgKHJlZiA9IHJlbW90ZV9yZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlpZiAoIXJlZi0+cGVlcl9yZWYgJiYgIW1pcnJvcikKKwkJCWNvbnRpbnVlOworCisJCS8qIENoZWNrIGZvciBzdGF0dXNlcyBzZXQgYnkgc2V0X3JlZl9zdGF0dXNfZm9yX3B1c2goKSAqLworCQlzd2l0Y2ggKHJlZi0+c3RhdHVzKSB7CisJCWNhc2UgUkVGX1NUQVRVU19SRUpFQ1RfTk9ORkFTVEZPUldBUkQ6CisJCWNhc2UgUkVGX1NUQVRVU19VUFRPREFURToKKwkJCWNvbnRpbnVlOworCQlkZWZhdWx0OgorCQkJOyAvKiBkbyBub3RoaW5nICovCisJCX0KKworCQlpZiAoZm9yY2VfYWxsKQorCQkJcmVmLT5mb3JjZSA9IDE7CisKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCAicHVzaCAiKTsKKwkJaWYgKCFyZWYtPmRlbGV0aW9uKSB7CisJCQlpZiAocmVmLT5mb3JjZSkKKwkJCQlzdHJidWZfYWRkY2goJmJ1ZiwgJysnKTsKKwkJCWlmIChyZWYtPnBlZXJfcmVmKQorCQkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgcmVmLT5wZWVyX3JlZi0+bmFtZSk7CisJCQllbHNlCisJCQkJc3RyYnVmX2FkZHN0cigmYnVmLCBzaGExX3RvX2hleChyZWYtPm5ld19zaGExKSk7CisJCX0KKwkJc3RyYnVmX2FkZGNoKCZidWYsICc6Jyk7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgcmVmLT5uYW1lKTsKKwkJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOworCX0KKwlpZiAoYnVmLmxlbiA9PSAwKQorCQlyZXR1cm4gMDsKKworCXRyYW5zcG9ydC0+dmVyYm9zZSA9IGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfVkVSQk9TRSA/IDEgOiAwOworCXN0YW5kYXJkX29wdGlvbnModHJhbnNwb3J0KTsKKworCWlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0RSWV9SVU4pIHsKKwkJaWYgKHNldF9oZWxwZXJfb3B0aW9uKHRyYW5zcG9ydCwgImRyeS1ydW4iLCAidHJ1ZSIpICE9IDApCisJCQlkaWUoImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IGRyeS1ydW4iLCBkYXRhLT5uYW1lKTsKKwl9CisKKwlzdHJidWZfYWRkY2goJmJ1ZiwgJ1xuJyk7CisJc2VuZGxpbmUoZGF0YSwgJmJ1Zik7CisKKwlyZWYgPSByZW1vdGVfcmVmczsKKwl3aGlsZSAoMSkgeworCQljaGFyICpyZWZuYW1lLCAqbXNnOworCQlpbnQgc3RhdHVzOworCisJCXJlY3ZsaW5lKGRhdGEsICZidWYpOworCQlpZiAoIWJ1Zi5sZW4pCisJCQlicmVhazsKKworCQlpZiAoIXByZWZpeGNtcChidWYuYnVmLCAib2sgIikpIHsKKwkJCXN0YXR1cyA9IFJFRl9TVEFUVVNfT0s7CisJCQlyZWZuYW1lID0gYnVmLmJ1ZiArIDM7CisJCX0gZWxzZSBpZiAoIXByZWZpeGNtcChidWYuYnVmLCAiZXJyb3IgIikpIHsKKwkJCXN0YXR1cyA9IFJFRl9TVEFUVVNfUkVNT1RFX1JFSkVDVDsKKwkJCXJlZm5hbWUgPSBidWYuYnVmICsgNjsKKwkJfSBlbHNlCisJCQlkaWUoImV4cGVjdGVkIG9rL2Vycm9yLCBoZWxwZXIgc2FpZCAnJXMnXG4iLCBidWYuYnVmKTsKKworCQltc2cgPSBzdHJjaHIocmVmbmFtZSwgJyAnKTsKKwkJaWYgKG1zZykgeworCQkJc3RydWN0IHN0cmJ1ZiBtc2dfYnVmID0gU1RSQlVGX0lOSVQ7CisJCQljb25zdCBjaGFyICplbmQ7CisKKwkJCSptc2crKyA9ICdcMCc7CisJCQlpZiAoIXVucXVvdGVfY19zdHlsZSgmbXNnX2J1ZiwgbXNnLCAmZW5kKSkKKwkJCQltc2cgPSBzdHJidWZfZGV0YWNoKCZtc2dfYnVmLCBOVUxMKTsKKwkJCWVsc2UKKwkJCQltc2cgPSB4c3RyZHVwKG1zZyk7CisJCQlzdHJidWZfcmVsZWFzZSgmbXNnX2J1Zik7CisKKwkJCWlmICghc3RyY21wKG1zZywgIm5vIG1hdGNoIikpIHsKKwkJCQlzdGF0dXMgPSBSRUZfU1RBVFVTX05PTkU7CisJCQkJZnJlZShtc2cpOworCQkJCW1zZyA9IE5VTEw7CisJCQl9CisJCQllbHNlIGlmICghc3RyY21wKG1zZywgInVwIHRvIGRhdGUiKSkgeworCQkJCXN0YXR1cyA9IFJFRl9TVEFUVVNfVVBUT0RBVEU7CisJCQkJZnJlZShtc2cpOworCQkJCW1zZyA9IE5VTEw7CisJCQl9CisJCQllbHNlIGlmICghc3RyY21wKG1zZywgIm5vbi1mYXN0IGZvcndhcmQiKSkgeworCQkJCXN0YXR1cyA9IFJFRl9TVEFUVVNfUkVKRUNUX05PTkZBU1RGT1JXQVJEOworCQkJCWZyZWUobXNnKTsKKwkJCQltc2cgPSBOVUxMOworCQkJfQorCQl9CisKKwkJaWYgKHJlZikKKwkJCXJlZiA9IGZpbmRfcmVmX2J5X25hbWUocmVmLCByZWZuYW1lKTsKKwkJaWYgKCFyZWYpCisJCQlyZWYgPSBmaW5kX3JlZl9ieV9uYW1lKHJlbW90ZV9yZWZzLCByZWZuYW1lKTsKKwkJaWYgKCFyZWYpIHsKKwkJCXdhcm5pbmcoImhlbHBlciByZXBvcnRlZCB1bmV4cGVjdGVkIHN0YXR1cyBvZiAlcyIsIHJlZm5hbWUpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAocmVmLT5zdGF0dXMgIT0gUkVGX1NUQVRVU19OT05FKSB7CisJCQkvKgorCQkJICogRWFybGllciwgdGhlIHJlZiB3YXMgbWFya2VkIG5vdCB0byBiZSBwdXNoZWQsIHNvIGlnbm9yZSB0aGUgcmVmCisJCQkgKiBzdGF0dXMgcmVwb3J0ZWQgYnkgdGhlIHJlbW90ZSBoZWxwZXIgaWYgdGhlIGxhdHRlciBpcyAnbm8gbWF0Y2gnLgorCQkJICovCisJCQlpZiAoc3RhdHVzID09IFJFRl9TVEFUVVNfTk9ORSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCXJlZi0+c3RhdHVzID0gc3RhdHVzOworCQlyZWYtPnJlbW90ZV9zdGF0dXMgPSBtc2c7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhc19hdHRyaWJ1dGUoY29uc3QgY2hhciAqYXR0cnMsIGNvbnN0IGNoYXIgKmF0dHIpIHsKKwlpbnQgbGVuOworCWlmICghYXR0cnMpCisJCXJldHVybiAwOworCisJbGVuID0gc3RybGVuKGF0dHIpOworCWZvciAoOzspIHsKKwkJY29uc3QgY2hhciAqc3BhY2UgPSBzdHJjaHJudWwoYXR0cnMsICcgJyk7CisJCWlmIChsZW4gPT0gc3BhY2UgLSBhdHRycyAmJiAhc3RybmNtcChhdHRycywgYXR0ciwgbGVuKSkKKwkJCXJldHVybiAxOworCQlpZiAoISpzcGFjZSkKKwkJCXJldHVybiAwOworCQlhdHRycyA9IHNwYWNlICsgMTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmICpnZXRfcmVmc19saXN0KHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgaW50IGZvcl9wdXNoKQoreworCXN0cnVjdCBoZWxwZXJfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqaGVscGVyOworCXN0cnVjdCByZWYgKnJldCA9IE5VTEw7CisJc3RydWN0IHJlZiAqKnRhaWwgPSAmcmV0OworCXN0cnVjdCByZWYgKnBvc247CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWhlbHBlciA9IGdldF9oZWxwZXIodHJhbnNwb3J0KTsKKworCWlmIChwcm9jZXNzX2Nvbm5lY3QodHJhbnNwb3J0LCBmb3JfcHVzaCkpIHsKKwkJZG9fdGFrZV9vdmVyKHRyYW5zcG9ydCk7CisJCXJldHVybiB0cmFuc3BvcnQtPmdldF9yZWZzX2xpc3QodHJhbnNwb3J0LCBmb3JfcHVzaCk7CisJfQorCisJaWYgKGRhdGEtPnB1c2ggJiYgZm9yX3B1c2gpCisJCXdyaXRlX3N0cl9pbl9mdWxsKGhlbHBlci0+aW4sICJsaXN0IGZvci1wdXNoXG4iKTsKKwllbHNlCisJCXdyaXRlX3N0cl9pbl9mdWxsKGhlbHBlci0+aW4sICJsaXN0XG4iKTsKKworCXdoaWxlICgxKSB7CisJCWNoYXIgKmVvdiwgKmVvbjsKKwkJcmVjdmxpbmUoZGF0YSwgJmJ1Zik7CisKKwkJaWYgKCEqYnVmLmJ1ZikKKwkJCWJyZWFrOworCisJCWVvdiA9IHN0cmNocihidWYuYnVmLCAnICcpOworCQlpZiAoIWVvdikKKwkJCWRpZSgiTWFsZm9ybWVkIHJlc3BvbnNlIGluIHJlZiBsaXN0OiAlcyIsIGJ1Zi5idWYpOworCQllb24gPSBzdHJjaHIoZW92ICsgMSwgJyAnKTsKKwkJKmVvdiA9ICdcMCc7CisJCWlmIChlb24pCisJCQkqZW9uID0gJ1wwJzsKKwkJKnRhaWwgPSBhbGxvY19yZWYoZW92ICsgMSk7CisJCWlmIChidWYuYnVmWzBdID09ICdAJykKKwkJCSgqdGFpbCktPnN5bXJlZiA9IHhzdHJkdXAoYnVmLmJ1ZiArIDEpOworCQllbHNlIGlmIChidWYuYnVmWzBdICE9ICc/JykKKwkJCWdldF9zaGExX2hleChidWYuYnVmLCAoKnRhaWwpLT5vbGRfc2hhMSk7CisJCWlmIChlb24pIHsKKwkJCWlmIChoYXNfYXR0cmlidXRlKGVvbiArIDEsICJ1bmNoYW5nZWQiKSkgeworCQkJCSgqdGFpbCktPnN0YXR1cyB8PSBSRUZfU1RBVFVTX1VQVE9EQVRFOworCQkJCXJlYWRfcmVmKCgqdGFpbCktPm5hbWUsICgqdGFpbCktPm9sZF9zaGExKTsKKwkJCX0KKwkJfQorCQl0YWlsID0gJigoKnRhaWwpLT5uZXh0KTsKKwl9CisJaWYgKGRlYnVnKQorCQlmcHJpbnRmKHN0ZGVyciwgIkRlYnVnOiBSZWFkIHJlZiBsaXN0aW5nLlxuIik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwlmb3IgKHBvc24gPSByZXQ7IHBvc247IHBvc24gPSBwb3NuLT5uZXh0KQorCQlyZXNvbHZlX3JlbW90ZV9zeW1yZWYocG9zbiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCB0cmFuc3BvcnRfaGVscGVyX2luaXQoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBoZWxwZXJfZGF0YSAqZGF0YSA9IHhjYWxsb2Moc2l6ZW9mKCpkYXRhKSwgMSk7CisJZGF0YS0+bmFtZSA9IG5hbWU7CisKKwlpZiAoZ2V0ZW52KCJHSVRfVFJBTlNQT1JUX0hFTFBFUl9ERUJVRyIpKQorCQlkZWJ1ZyA9IDE7CisKKwl0cmFuc3BvcnQtPmRhdGEgPSBkYXRhOworCXRyYW5zcG9ydC0+c2V0X29wdGlvbiA9IHNldF9oZWxwZXJfb3B0aW9uOworCXRyYW5zcG9ydC0+Z2V0X3JlZnNfbGlzdCA9IGdldF9yZWZzX2xpc3Q7CisJdHJhbnNwb3J0LT5mZXRjaCA9IGZldGNoOworCXRyYW5zcG9ydC0+cHVzaF9yZWZzID0gcHVzaF9yZWZzOworCXRyYW5zcG9ydC0+ZGlzY29ubmVjdCA9IHJlbGVhc2VfaGVscGVyOworCXRyYW5zcG9ydC0+Y29ubmVjdCA9IGNvbm5lY3RfaGVscGVyOworCXRyYW5zcG9ydC0+c21hcnRfb3B0aW9ucyA9ICYoZGF0YS0+dHJhbnNwb3J0X29wdGlvbnMpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdHJhbnNwb3J0LmMgYi90cmFuc3BvcnQuYwppbmRleCBlZmVjYjY1Li4wOGU0ZmEwIDEwMDY0NAotLS0gYS90cmFuc3BvcnQuYworKysgYi90cmFuc3BvcnQuYwpAQCAtMSw5ICsxLDYgQEAKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgInRyYW5zcG9ydC5oIgogI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCi0jaWZuZGVmIE5PX0NVUkwKLSNpbmNsdWRlICJodHRwLmgiCi0jZW5kaWYKICNpbmNsdWRlICJwa3QtbGluZS5oIgogI2luY2x1ZGUgImZldGNoLXBhY2suaCIKICNpbmNsdWRlICJzZW5kLXBhY2suaCIKQEAgLTExLDYgKzgsNyBAQAogI2luY2x1ZGUgImJ1bmRsZS5oIgogI2luY2x1ZGUgImRpci5oIgogI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJicmFuY2guaCIKIAogLyogcnN5bmMgc3VwcG9ydCAqLwogCkBAIC0xMzgsNiArMTM2LDUzIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBzZXRfdXBzdHJlYW1zKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgc3RydWN0IHJlZiAqcmVmcywKKwlpbnQgcHJldGVuZCkKK3sKKwlzdHJ1Y3QgcmVmICpyZWY7CisJZm9yIChyZWYgPSByZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQljb25zdCBjaGFyICpsb2NhbG5hbWU7CisJCWNvbnN0IGNoYXIgKnRtcDsKKwkJY29uc3QgY2hhciAqcmVtb3RlbmFtZTsKKwkJdW5zaWduZWQgY2hhciBzaGFbMjBdOworCQlpbnQgZmxhZyA9IDA7CisJCS8qCisJCSAqIENoZWNrIHN1aXRhYmlsaXR5IGZvciB0cmFja2luZy4gTXVzdCBiZSBzdWNjZXNzZnVsIC8KKwkJICogYWxyZWFkeSB1cC10by1kYXRlIHJlZiBjcmVhdGUvbW9kaWZ5IChub3QgZGVsZXRlKS4KKwkJICovCisJCWlmIChyZWYtPnN0YXR1cyAhPSBSRUZfU1RBVFVTX09LICYmCisJCQlyZWYtPnN0YXR1cyAhPSBSRUZfU1RBVFVTX1VQVE9EQVRFKQorCQkJY29udGludWU7CisJCWlmICghcmVmLT5wZWVyX3JlZikKKwkJCWNvbnRpbnVlOworCQlpZiAoIXJlZi0+bmV3X3NoYTEgfHwgaXNfbnVsbF9zaGExKHJlZi0+bmV3X3NoYTEpKQorCQkJY29udGludWU7CisKKwkJLyogRm9sbG93IHN5bWJvbGljIHJlZnMgKG1haW5seSBmb3IgSEVBRCkuICovCisJCWxvY2FsbmFtZSA9IHJlZi0+cGVlcl9yZWYtPm5hbWU7CisJCXJlbW90ZW5hbWUgPSByZWYtPm5hbWU7CisJCXRtcCA9IHJlc29sdmVfcmVmKGxvY2FsbmFtZSwgc2hhLCAxLCAmZmxhZyk7CisJCWlmICh0bXAgJiYgZmxhZyAmIFJFRl9JU1NZTVJFRiAmJgorCQkJIXByZWZpeGNtcCh0bXAsICJyZWZzL2hlYWRzLyIpKQorCQkJbG9jYWxuYW1lID0gdG1wOworCisJCS8qIEJvdGggc291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IGJlIGxvY2FsIGJyYW5jaGVzLiAqLworCQlpZiAoIWxvY2FsbmFtZSB8fCBwcmVmaXhjbXAobG9jYWxuYW1lLCAicmVmcy9oZWFkcy8iKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXJlbW90ZW5hbWUgfHwgcHJlZml4Y21wKHJlbW90ZW5hbWUsICJyZWZzL2hlYWRzLyIpKQorCQkJY29udGludWU7CisKKwkJaWYgKCFwcmV0ZW5kKQorCQkJaW5zdGFsbF9icmFuY2hfY29uZmlnKEJSQU5DSF9DT05GSUdfVkVSQk9TRSwKKwkJCQlsb2NhbG5hbWUgKyAxMSwgdHJhbnNwb3J0LT5yZW1vdGUtPm5hbWUsCisJCQkJcmVtb3RlbmFtZSk7CisJCWVsc2UKKwkJCXByaW50ZigiV291bGQgc2V0IHVwc3RyZWFtIG9mICclcycgdG8gJyVzJyBvZiAnJXMnXG4iLAorCQkJCWxvY2FsbmFtZSArIDExLCByZW1vdGVuYW1lICsgMTEsCisJCQkJdHJhbnNwb3J0LT5yZW1vdGUtPm5hbWUpOworCX0KK30KKwogc3RhdGljIGNvbnN0IGNoYXIgKnJzeW5jX3VybChjb25zdCBjaGFyICp1cmwpCiB7CiAJcmV0dXJuIHByZWZpeGNtcCh1cmwsICJyc3luYzovLyIpID8gc2tpcF9wcmVmaXgodXJsLCAicnN5bmM6IikgOiB1cmw7CkBAIC0xNDYsNyArMTkxLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVmICpnZXRfcmVmc192aWFfcnN5bmMoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBpbnQgZm9yX3B1c2gpCiB7CiAJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVCwgdGVtcF9kaXIgPSBTVFJCVUZfSU5JVDsKLQlzdHJ1Y3QgcmVmIGR1bW15LCAqdGFpbCA9ICZkdW1teTsKKwlzdHJ1Y3QgcmVmIGR1bW15ID0gezB9LCAqdGFpbCA9ICZkdW1teTsKIAlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyByc3luYzsKIAljb25zdCBjaGFyICphcmdzWzVdOwogCWludCB0ZW1wX2Rpcl9sZW47CkBAIC0xNTgsNyArMjAzLDcgQEAKIAogCXN0cmJ1Zl9hZGRzdHIoJnRlbXBfZGlyLCBnaXRfcGF0aCgicnN5bmMtcmVmcy1YWFhYWFgiKSk7CiAJaWYgKCFta2R0ZW1wKHRlbXBfZGlyLmJ1ZikpCi0JCWRpZSAoIkNvdWxkIG5vdCBtYWtlIHRlbXBvcmFyeSBkaXJlY3RvcnkiKTsKKwkJZGllX2Vycm5vICgiQ291bGQgbm90IG1ha2UgdGVtcG9yYXJ5IGRpcmVjdG9yeSIpOwogCXRlbXBfZGlyX2xlbiA9IHRlbXBfZGlyLmxlbjsKIAogCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgcnN5bmNfdXJsKHRyYW5zcG9ydC0+dXJsKSk7CkBAIC0yMDcsNyArMjUyLDcgQEAKIH0KIAogc3RhdGljIGludCBmZXRjaF9vYmpzX3ZpYV9yc3luYyhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCi0JCQkJaW50IG5yX29ianMsIGNvbnN0IHN0cnVjdCByZWYgKip0b19mZXRjaCkKKwkJCQlpbnQgbnJfb2Jqcywgc3RydWN0IHJlZiAqKnRvX2ZldGNoKQogewogCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CiAJc3RydWN0IGNoaWxkX3Byb2Nlc3MgcnN5bmM7CkBAIC0zMjEsNyArMzY2LDcgQEAKIAogCXN0cmJ1Zl9hZGRzdHIoJnRlbXBfZGlyLCBnaXRfcGF0aCgicnN5bmMtcmVmcy1YWFhYWFgiKSk7CiAJaWYgKCFta2R0ZW1wKHRlbXBfZGlyLmJ1ZikpCi0JCWRpZSAoIkNvdWxkIG5vdCBtYWtlIHRlbXBvcmFyeSBkaXJlY3RvcnkiKTsKKwkJZGllX2Vycm5vICgiQ291bGQgbm90IG1ha2UgdGVtcG9yYXJ5IGRpcmVjdG9yeSIpOwogCXN0cmJ1Zl9hZGRjaCgmdGVtcF9kaXIsICcvJyk7CiAKIAlpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9BTEwpIHsKQEAgLTM1MiwxODcgKzM5Nyw2IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotLyogR2VuZXJpYyBmdW5jdGlvbnMgZm9yIHVzaW5nIGNvbW1pdCB3YWxrZXJzICovCi0KLSNpZm5kZWYgTk9fQ1VSTCAvKiBodHRwIGZldGNoIGlzIHRoZSBvbmx5IHVzZXIgKi8KLXN0YXRpYyBpbnQgZmV0Y2hfb2Jqc192aWFfd2Fsa2VyKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKLQkJCQkgaW50IG5yX29ianMsIGNvbnN0IHN0cnVjdCByZWYgKip0b19mZXRjaCkKLXsKLQljaGFyICpkZXN0ID0geHN0cmR1cCh0cmFuc3BvcnQtPnVybCk7Ci0Jc3RydWN0IHdhbGtlciAqd2Fsa2VyID0gdHJhbnNwb3J0LT5kYXRhOwotCWNoYXIgKipvYmpzID0geG1hbGxvYyhucl9vYmpzICogc2l6ZW9mKCpvYmpzKSk7Ci0JaW50IGk7Ci0KLQl3YWxrZXItPmdldF9hbGwgPSAxOwotCXdhbGtlci0+Z2V0X3RyZWUgPSAxOwotCXdhbGtlci0+Z2V0X2hpc3RvcnkgPSAxOwotCXdhbGtlci0+Z2V0X3ZlcmJvc2VseSA9IHRyYW5zcG9ydC0+dmVyYm9zZSA+PSAwOwotCXdhbGtlci0+Z2V0X3JlY292ZXIgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IG5yX29ianM7IGkrKykKLQkJb2Jqc1tpXSA9IHhzdHJkdXAoc2hhMV90b19oZXgodG9fZmV0Y2hbaV0tPm9sZF9zaGExKSk7Ci0KLQlpZiAod2Fsa2VyX2ZldGNoKHdhbGtlciwgbnJfb2Jqcywgb2JqcywgTlVMTCwgTlVMTCkpCi0JCWRpZSgiRmV0Y2ggZmFpbGVkLiIpOwotCi0JZm9yIChpID0gMDsgaSA8IG5yX29ianM7IGkrKykKLQkJZnJlZShvYmpzW2ldKTsKLQlmcmVlKG9ianMpOwotCWZyZWUoZGVzdCk7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYgLyogTk9fQ1VSTCAqLwotCi1zdGF0aWMgaW50IGRpc2Nvbm5lY3Rfd2Fsa2VyKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCkKLXsKLQlzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIgPSB0cmFuc3BvcnQtPmRhdGE7Ci0JaWYgKHdhbGtlcikKLQkJd2Fsa2VyX2ZyZWUod2Fsa2VyKTsKLQlyZXR1cm4gMDsKLX0KLQotI2lmbmRlZiBOT19DVVJMCi1zdGF0aWMgaW50IGN1cmxfdHJhbnNwb3J0X3B1c2goc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBpbnQgcmVmc3BlY19uciwgY29uc3QgY2hhciAqKnJlZnNwZWMsIGludCBmbGFncykKLXsKLQljb25zdCBjaGFyICoqYXJndjsKLQlpbnQgYXJnYzsKLQlpbnQgZXJyOwotCi0JaWYgKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfTUlSUk9SKQotCQlyZXR1cm4gZXJyb3IoImh0dHAgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgbWlycm9yIG1vZGUiKTsKLQotCWFyZ3YgPSB4bWFsbG9jKChyZWZzcGVjX25yICsgMTIpICogc2l6ZW9mKGNoYXIgKikpOwotCWFyZ3ZbMF0gPSAiaHR0cC1wdXNoIjsKLQlhcmdjID0gMTsKLQlpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9BTEwpCi0JCWFyZ3ZbYXJnYysrXSA9ICItLWFsbCI7Ci0JaWYgKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfRk9SQ0UpCi0JCWFyZ3ZbYXJnYysrXSA9ICItLWZvcmNlIjsKLQlpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9EUllfUlVOKQotCQlhcmd2W2FyZ2MrK10gPSAiLS1kcnktcnVuIjsKLQlpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9WRVJCT1NFKQotCQlhcmd2W2FyZ2MrK10gPSAiLS12ZXJib3NlIjsKLQlhcmd2W2FyZ2MrK10gPSB0cmFuc3BvcnQtPnVybDsKLQl3aGlsZSAocmVmc3BlY19uci0tKQotCQlhcmd2W2FyZ2MrK10gPSAqcmVmc3BlYysrOwotCWFyZ3ZbYXJnY10gPSBOVUxMOwotCWVyciA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3YsIFJVTl9HSVRfQ01EKTsKLQlzd2l0Y2ggKGVycikgewotCWNhc2UgLUVSUl9SVU5fQ09NTUFORF9GT1JLOgotCQllcnJvcigidW5hYmxlIHRvIGZvcmsgZm9yICVzIiwgYXJndlswXSk7Ci0JY2FzZSAtRVJSX1JVTl9DT01NQU5EX0VYRUM6Ci0JCWVycm9yKCJ1bmFibGUgdG8gZXhlYyAlcyIsIGFyZ3ZbMF0pOwotCQlicmVhazsKLQljYXNlIC1FUlJfUlVOX0NPTU1BTkRfV0FJVFBJRDoKLQljYXNlIC1FUlJfUlVOX0NPTU1BTkRfV0FJVFBJRF9XUk9OR19QSUQ6Ci0JY2FzZSAtRVJSX1JVTl9DT01NQU5EX1dBSVRQSURfU0lHTkFMOgotCWNhc2UgLUVSUl9SVU5fQ09NTUFORF9XQUlUUElEX05PRVhJVDoKLQkJZXJyb3IoIiVzIGRpZWQgd2l0aCBzdHJhbmdlIGVycm9yIiwgYXJndlswXSk7Ci0JfQotCXJldHVybiAhIWVycjsKLX0KLQotc3RhdGljIHN0cnVjdCByZWYgKmdldF9yZWZzX3ZpYV9jdXJsKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgaW50IGZvcl9wdXNoKQotewotCXN0cnVjdCBzdHJidWYgYnVmZmVyID0gU1RSQlVGX0lOSVQ7Ci0JY2hhciAqZGF0YSwgKnN0YXJ0LCAqbWlkOwotCWNoYXIgKnJlZl9uYW1lOwotCWNoYXIgKnJlZnNfdXJsOwotCWludCBpID0gMDsKLQotCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OwotCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKLQotCXN0cnVjdCByZWYgKnJlZnMgPSBOVUxMOwotCXN0cnVjdCByZWYgKnJlZiA9IE5VTEw7Ci0Jc3RydWN0IHJlZiAqbGFzdF9yZWYgPSBOVUxMOwotCi0Jc3RydWN0IHdhbGtlciAqd2Fsa2VyOwotCi0JaWYgKGZvcl9wdXNoKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmICghdHJhbnNwb3J0LT5kYXRhKQotCQl0cmFuc3BvcnQtPmRhdGEgPSBnZXRfaHR0cF93YWxrZXIodHJhbnNwb3J0LT51cmwsCi0JCQkJCQl0cmFuc3BvcnQtPnJlbW90ZSk7Ci0KLQl3YWxrZXIgPSB0cmFuc3BvcnQtPmRhdGE7Ci0KLQlyZWZzX3VybCA9IHhtYWxsb2Moc3RybGVuKHRyYW5zcG9ydC0+dXJsKSArIDExKTsKLQlzcHJpbnRmKHJlZnNfdXJsLCAiJXMvaW5mby9yZWZzIiwgdHJhbnNwb3J0LT51cmwpOwotCi0Jc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOwotCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgJmJ1ZmZlcik7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZV9idWZmZXIpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHJlZnNfdXJsKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgTlVMTCk7Ci0KLQlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKLQkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOwotCQlpZiAocmVzdWx0cy5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSykgewotCQkJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7Ci0JCQlpZiAobWlzc2luZ190YXJnZXQoJnJlc3VsdHMpKQotCQkJCWRpZSgiJXMgbm90IGZvdW5kOiBkaWQgeW91IHJ1biBnaXQgdXBkYXRlLXNlcnZlci1pbmZvIG9uIHRoZSBzZXJ2ZXI/IiwgcmVmc191cmwpOwotCQkJZWxzZQotCQkJCWRpZSgiJXMgZG93bmxvYWQgZXJyb3IgLSAlcyIsIHJlZnNfdXJsLCBjdXJsX2Vycm9yc3RyKTsKLQkJfQotCX0gZWxzZSB7Ci0JCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOwotCQlkaWUoIlVuYWJsZSB0byBzdGFydCBIVFRQIHJlcXVlc3QiKTsKLQl9Ci0KLQlkYXRhID0gYnVmZmVyLmJ1ZjsKLQlzdGFydCA9IE5VTEw7Ci0JbWlkID0gZGF0YTsKLQl3aGlsZSAoaSA8IGJ1ZmZlci5sZW4pIHsKLQkJaWYgKCFzdGFydCkKLQkJCXN0YXJ0ID0gJmRhdGFbaV07Ci0JCWlmIChkYXRhW2ldID09ICdcdCcpCi0JCQltaWQgPSAmZGF0YVtpXTsKLQkJaWYgKGRhdGFbaV0gPT0gJ1xuJykgewotCQkJZGF0YVtpXSA9IDA7Ci0JCQlyZWZfbmFtZSA9IG1pZCArIDE7Ci0JCQlyZWYgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVmKSArCi0JCQkJICAgICAgc3RybGVuKHJlZl9uYW1lKSArIDEpOwotCQkJbWVtc2V0KHJlZiwgMCwgc2l6ZW9mKHN0cnVjdCByZWYpKTsKLQkJCXN0cmNweShyZWYtPm5hbWUsIHJlZl9uYW1lKTsKLQkJCWdldF9zaGExX2hleChzdGFydCwgcmVmLT5vbGRfc2hhMSk7Ci0JCQlpZiAoIXJlZnMpCi0JCQkJcmVmcyA9IHJlZjsKLQkJCWlmIChsYXN0X3JlZikKLQkJCQlsYXN0X3JlZi0+bmV4dCA9IHJlZjsKLQkJCWxhc3RfcmVmID0gcmVmOwotCQkJc3RhcnQgPSBOVUxMOwotCQl9Ci0JCWkrKzsKLQl9Ci0KLQlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKLQotCXJlZiA9IGFsbG9jX3JlZigiSEVBRCIpOwotCWlmICghd2Fsa2VyLT5mZXRjaF9yZWYod2Fsa2VyLCByZWYpICYmCi0JICAgICFyZXNvbHZlX3JlbW90ZV9zeW1yZWYocmVmLCByZWZzKSkgewotCQlyZWYtPm5leHQgPSByZWZzOwotCQlyZWZzID0gcmVmOwotCX0gZWxzZSB7Ci0JCWZyZWUocmVmKTsKLQl9Ci0KLQlyZXR1cm4gcmVmczsKLX0KLQotc3RhdGljIGludCBmZXRjaF9vYmpzX3ZpYV9jdXJsKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKLQkJCQkgaW50IG5yX29ianMsIGNvbnN0IHN0cnVjdCByZWYgKip0b19mZXRjaCkKLXsKLQlpZiAoIXRyYW5zcG9ydC0+ZGF0YSkKLQkJdHJhbnNwb3J0LT5kYXRhID0gZ2V0X2h0dHBfd2Fsa2VyKHRyYW5zcG9ydC0+dXJsLAotCQkJCQkJdHJhbnNwb3J0LT5yZW1vdGUpOwotCXJldHVybiBmZXRjaF9vYmpzX3ZpYV93YWxrZXIodHJhbnNwb3J0LCBucl9vYmpzLCB0b19mZXRjaCk7Ci19Ci0KLSNlbmRpZgotCiBzdHJ1Y3QgYnVuZGxlX3RyYW5zcG9ydF9kYXRhIHsKIAlpbnQgZmQ7CiAJc3RydWN0IGJ1bmRsZV9oZWFkZXIgaGVhZGVyOwpAQCAtNTYzLDcgKzQyNyw3IEBACiB9CiAKIHN0YXRpYyBpbnQgZmV0Y2hfcmVmc19mcm9tX2J1bmRsZShzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCi0JCQkgICAgICAgaW50IG5yX2hlYWRzLCBjb25zdCBzdHJ1Y3QgcmVmICoqdG9fZmV0Y2gpCisJCQkgICAgICAgaW50IG5yX2hlYWRzLCBzdHJ1Y3QgcmVmICoqdG9fZmV0Y2gpCiB7CiAJc3RydWN0IGJ1bmRsZV90cmFuc3BvcnRfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKIAlyZXR1cm4gdW5idW5kbGUoJmRhdGEtPmhlYWRlciwgZGF0YS0+ZmQpOwpAQCAtNTc5LDQxICs0NDMsMzYgQEAKIH0KIAogc3RydWN0IGdpdF90cmFuc3BvcnRfZGF0YSB7Ci0JdW5zaWduZWQgdGhpbiA6IDE7Ci0JdW5zaWduZWQga2VlcCA6IDE7Ci0JdW5zaWduZWQgZm9sbG93dGFncyA6IDE7Ci0JaW50IGRlcHRoOworCXN0cnVjdCBnaXRfdHJhbnNwb3J0X29wdGlvbnMgb3B0aW9uczsKIAlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY29ubjsKIAlpbnQgZmRbMl07Ci0JY29uc3QgY2hhciAqdXBsb2FkcGFjazsKLQljb25zdCBjaGFyICpyZWNlaXZlcGFjazsKKwl1bnNpZ25lZCBnb3RfcmVtb3RlX2hlYWRzIDogMTsKIAlzdHJ1Y3QgZXh0cmFfaGF2ZV9vYmplY3RzIGV4dHJhX2hhdmU7CiB9OwogCi1zdGF0aWMgaW50IHNldF9naXRfb3B0aW9uKHN0cnVjdCB0cmFuc3BvcnQgKmNvbm5lY3Rpb24sCitzdGF0aWMgaW50IHNldF9naXRfb3B0aW9uKHN0cnVjdCBnaXRfdHJhbnNwb3J0X29wdGlvbnMgKm9wdHMsCiAJCQkgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQogewotCXN0cnVjdCBnaXRfdHJhbnNwb3J0X2RhdGEgKmRhdGEgPSBjb25uZWN0aW9uLT5kYXRhOwogCWlmICghc3RyY21wKG5hbWUsIFRSQU5TX09QVF9VUExPQURQQUNLKSkgewotCQlkYXRhLT51cGxvYWRwYWNrID0gdmFsdWU7CisJCW9wdHMtPnVwbG9hZHBhY2sgPSB2YWx1ZTsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlIGlmICghc3RyY21wKG5hbWUsIFRSQU5TX09QVF9SRUNFSVZFUEFDSykpIHsKLQkJZGF0YS0+cmVjZWl2ZXBhY2sgPSB2YWx1ZTsKKwkJb3B0cy0+cmVjZWl2ZXBhY2sgPSB2YWx1ZTsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlIGlmICghc3RyY21wKG5hbWUsIFRSQU5TX09QVF9USElOKSkgewotCQlkYXRhLT50aGluID0gISF2YWx1ZTsKKwkJb3B0cy0+dGhpbiA9ICEhdmFsdWU7CiAJCXJldHVybiAwOwogCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCBUUkFOU19PUFRfRk9MTE9XVEFHUykpIHsKLQkJZGF0YS0+Zm9sbG93dGFncyA9ICEhdmFsdWU7CisJCW9wdHMtPmZvbGxvd3RhZ3MgPSAhIXZhbHVlOwogCQlyZXR1cm4gMDsKIAl9IGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgVFJBTlNfT1BUX0tFRVApKSB7Ci0JCWRhdGEtPmtlZXAgPSAhIXZhbHVlOworCQlvcHRzLT5rZWVwID0gISF2YWx1ZTsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlIGlmICghc3RyY21wKG5hbWUsIFRSQU5TX09QVF9ERVBUSCkpIHsKIAkJaWYgKCF2YWx1ZSkKLQkJCWRhdGEtPmRlcHRoID0gMDsKKwkJCW9wdHMtPmRlcHRoID0gMDsKIAkJZWxzZQotCQkJZGF0YS0+ZGVwdGggPSBhdG9pKHZhbHVlKTsKKwkJCW9wdHMtPmRlcHRoID0gYXRvaSh2YWx1ZSk7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gMTsKQEAgLTYyMiw5ICs0ODEsMTUgQEAKIHN0YXRpYyBpbnQgY29ubmVjdF9zZXR1cChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGludCBmb3JfcHVzaCwgaW50IHZlcmJvc2UpCiB7CiAJc3RydWN0IGdpdF90cmFuc3BvcnRfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKworCWlmIChkYXRhLT5jb25uKQorCQlyZXR1cm4gMDsKKwogCWRhdGEtPmNvbm4gPSBnaXRfY29ubmVjdChkYXRhLT5mZCwgdHJhbnNwb3J0LT51cmwsCi0JCQkJIGZvcl9wdXNoID8gZGF0YS0+cmVjZWl2ZXBhY2sgOiBkYXRhLT51cGxvYWRwYWNrLAorCQkJCSBmb3JfcHVzaCA/IGRhdGEtPm9wdGlvbnMucmVjZWl2ZXBhY2sgOgorCQkJCSBkYXRhLT5vcHRpb25zLnVwbG9hZHBhY2ssCiAJCQkJIHZlcmJvc2UgPyBDT05ORUNUX1ZFUkJPU0UgOiAwKTsKKwogCXJldHVybiAwOwogfQogCkBAIC02MzYsMTIgKzUwMSwxMyBAQAogCWNvbm5lY3Rfc2V0dXAodHJhbnNwb3J0LCBmb3JfcHVzaCwgMCk7CiAJZ2V0X3JlbW90ZV9oZWFkcyhkYXRhLT5mZFswXSwgJnJlZnMsIDAsIE5VTEwsCiAJCQkgZm9yX3B1c2ggPyBSRUZfTk9STUFMIDogMCwgJmRhdGEtPmV4dHJhX2hhdmUpOworCWRhdGEtPmdvdF9yZW1vdGVfaGVhZHMgPSAxOwogCiAJcmV0dXJuIHJlZnM7CiB9CiAKIHN0YXRpYyBpbnQgZmV0Y2hfcmVmc192aWFfcGFjayhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCi0JCQkgICAgICAgaW50IG5yX2hlYWRzLCBjb25zdCBzdHJ1Y3QgcmVmICoqdG9fZmV0Y2gpCisJCQkgICAgICAgaW50IG5yX2hlYWRzLCBzdHJ1Y3QgcmVmICoqdG9fZmV0Y2gpCiB7CiAJc3RydWN0IGdpdF90cmFuc3BvcnRfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKIAljaGFyICoqaGVhZHMgPSB4bWFsbG9jKG5yX2hlYWRzICogc2l6ZW9mKCpoZWFkcykpOwpAQCAtNjUzLDIyICs1MTksMjMgQEAKIAlzdHJ1Y3QgcmVmICpyZWZzX3RtcCA9IE5VTEw7CiAKIAltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7Ci0JYXJncy51cGxvYWRwYWNrID0gZGF0YS0+dXBsb2FkcGFjazsKLQlhcmdzLmtlZXBfcGFjayA9IGRhdGEtPmtlZXA7CisJYXJncy51cGxvYWRwYWNrID0gZGF0YS0+b3B0aW9ucy51cGxvYWRwYWNrOworCWFyZ3Mua2VlcF9wYWNrID0gZGF0YS0+b3B0aW9ucy5rZWVwOwogCWFyZ3MubG9ja19wYWNrID0gMTsKLQlhcmdzLnVzZV90aGluX3BhY2sgPSBkYXRhLT50aGluOwotCWFyZ3MuaW5jbHVkZV90YWcgPSBkYXRhLT5mb2xsb3d0YWdzOworCWFyZ3MudXNlX3RoaW5fcGFjayA9IGRhdGEtPm9wdGlvbnMudGhpbjsKKwlhcmdzLmluY2x1ZGVfdGFnID0gZGF0YS0+b3B0aW9ucy5mb2xsb3d0YWdzOwogCWFyZ3MudmVyYm9zZSA9ICh0cmFuc3BvcnQtPnZlcmJvc2UgPiAwKTsKIAlhcmdzLnF1aWV0ID0gKHRyYW5zcG9ydC0+dmVyYm9zZSA8IDApOwotCWFyZ3Mubm9fcHJvZ3Jlc3MgPSBhcmdzLnF1aWV0IHx8ICghdHJhbnNwb3J0LT5wcm9ncmVzcyAmJiAhaXNhdHR5KDEpKTsKLQlhcmdzLmRlcHRoID0gZGF0YS0+ZGVwdGg7CisJYXJncy5ub19wcm9ncmVzcyA9IGFyZ3MucXVpZXQgfHwgKCF0cmFuc3BvcnQtPnByb2dyZXNzICYmICFpc2F0dHkoMikpOworCWFyZ3MuZGVwdGggPSBkYXRhLT5vcHRpb25zLmRlcHRoOwogCiAJZm9yIChpID0gMDsgaSA8IG5yX2hlYWRzOyBpKyspCiAJCW9yaWdoW2ldID0gaGVhZHNbaV0gPSB4c3RyZHVwKHRvX2ZldGNoW2ldLT5uYW1lKTsKIAotCWlmICghZGF0YS0+Y29ubikgeworCWlmICghZGF0YS0+Z290X3JlbW90ZV9oZWFkcykgewogCQljb25uZWN0X3NldHVwKHRyYW5zcG9ydCwgMCwgMCk7CiAJCWdldF9yZW1vdGVfaGVhZHMoZGF0YS0+ZmRbMF0sICZyZWZzX3RtcCwgMCwgTlVMTCwgMCwgTlVMTCk7CisJCWRhdGEtPmdvdF9yZW1vdGVfaGVhZHMgPSAxOwogCX0KIAogCXJlZnMgPSBmZXRjaF9wYWNrKCZhcmdzLCBkYXRhLT5mZCwgZGF0YS0+Y29ubiwKQEAgLTY3OSw2ICs1NDYsNyBAQAogCWlmIChmaW5pc2hfY29ubmVjdChkYXRhLT5jb25uKSkKIAkJcmVmcyA9IE5VTEw7CiAJZGF0YS0+Y29ubiA9IE5VTEw7CisJZGF0YS0+Z290X3JlbW90ZV9oZWFkcyA9IDA7CiAKIAlmcmVlX3JlZnMocmVmc190bXApOwogCkBAIC02OTAsNiArNTU4LDIxIEBACiAJcmV0dXJuIChyZWZzID8gMCA6IC0xKTsKIH0KIAorc3RhdGljIGludCBwdXNoX2hhZF9lcnJvcnMoc3RydWN0IHJlZiAqcmVmKQoreworCWZvciAoOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlzd2l0Y2ggKHJlZi0+c3RhdHVzKSB7CisJCWNhc2UgUkVGX1NUQVRVU19OT05FOgorCQljYXNlIFJFRl9TVEFUVVNfVVBUT0RBVEU6CisJCWNhc2UgUkVGX1NUQVRVU19PSzoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgcmVmc19wdXNoZWQoc3RydWN0IHJlZiAqcmVmKQogewogCWZvciAoOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgewpAQCAtNzI4LDE5ICs2MTEsMzAgQEAKIAogI2RlZmluZSBTVU1NQVJZX1dJRFRIICgyICogREVGQVVMVF9BQkJSRVYgKyAzKQogCi1zdGF0aWMgdm9pZCBwcmludF9yZWZfc3RhdHVzKGNoYXIgZmxhZywgY29uc3QgY2hhciAqc3VtbWFyeSwgc3RydWN0IHJlZiAqdG8sIHN0cnVjdCByZWYgKmZyb20sIGNvbnN0IGNoYXIgKm1zZykKK3N0YXRpYyB2b2lkIHByaW50X3JlZl9zdGF0dXMoY2hhciBmbGFnLCBjb25zdCBjaGFyICpzdW1tYXJ5LCBzdHJ1Y3QgcmVmICp0bywgc3RydWN0IHJlZiAqZnJvbSwgY29uc3QgY2hhciAqbXNnLCBpbnQgcG9yY2VsYWluKQogewotCWZwcmludGYoc3RkZXJyLCAiICVjICUtKnMgIiwgZmxhZywgU1VNTUFSWV9XSURUSCwgc3VtbWFyeSk7Ci0JaWYgKGZyb20pCi0JCWZwcmludGYoc3RkZXJyLCAiJXMgLT4gJXMiLCBwcmV0dGlmeV9yZWYoZnJvbSksIHByZXR0aWZ5X3JlZih0bykpOwotCWVsc2UKLQkJZnB1dHMocHJldHRpZnlfcmVmKHRvKSwgc3RkZXJyKTsKLQlpZiAobXNnKSB7Ci0JCWZwdXRzKCIgKCIsIHN0ZGVycik7Ci0JCWZwdXRzKG1zZywgc3RkZXJyKTsKLQkJZnB1dGMoJyknLCBzdGRlcnIpOworCWlmIChwb3JjZWxhaW4pIHsKKwkJaWYgKGZyb20pCisJCQlmcHJpbnRmKHN0ZG91dCwgIiVjXHQlczolc1x0IiwgZmxhZywgZnJvbS0+bmFtZSwgdG8tPm5hbWUpOworCQllbHNlCisJCQlmcHJpbnRmKHN0ZG91dCwgIiVjXHQ6JXNcdCIsIGZsYWcsIHRvLT5uYW1lKTsKKwkJaWYgKG1zZykKKwkJCWZwcmludGYoc3Rkb3V0LCAiJXMgKCVzKVxuIiwgc3VtbWFyeSwgbXNnKTsKKwkJZWxzZQorCQkJZnByaW50ZihzdGRvdXQsICIlc1xuIiwgc3VtbWFyeSk7CisJfSBlbHNlIHsKKwkJZnByaW50ZihzdGRlcnIsICIgJWMgJS0qcyAiLCBmbGFnLCBTVU1NQVJZX1dJRFRILCBzdW1tYXJ5KTsKKwkJaWYgKGZyb20pCisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIC0+ICVzIiwgcHJldHRpZnlfcmVmbmFtZShmcm9tLT5uYW1lKSwgcHJldHRpZnlfcmVmbmFtZSh0by0+bmFtZSkpOworCQllbHNlCisJCQlmcHV0cyhwcmV0dGlmeV9yZWZuYW1lKHRvLT5uYW1lKSwgc3RkZXJyKTsKKwkJaWYgKG1zZykgeworCQkJZnB1dHMoIiAoIiwgc3RkZXJyKTsKKwkJCWZwdXRzKG1zZywgc3RkZXJyKTsKKwkJCWZwdXRjKCcpJywgc3RkZXJyKTsKKwkJfQorCQlmcHV0YygnXG4nLCBzdGRlcnIpOwogCX0KLQlmcHV0YygnXG4nLCBzdGRlcnIpOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhdHVzX2FiYnJldih1bnNpZ25lZCBjaGFyIHNoYTFbMjBdKQpAQCAtNzQ4LDE1ICs2NDIsMTUgQEAKIAlyZXR1cm4gZmluZF91bmlxdWVfYWJicmV2KHNoYTEsIERFRkFVTFRfQUJCUkVWKTsKIH0KIAotc3RhdGljIHZvaWQgcHJpbnRfb2tfcmVmX3N0YXR1cyhzdHJ1Y3QgcmVmICpyZWYpCitzdGF0aWMgdm9pZCBwcmludF9va19yZWZfc3RhdHVzKHN0cnVjdCByZWYgKnJlZiwgaW50IHBvcmNlbGFpbikKIHsKIAlpZiAocmVmLT5kZWxldGlvbikKLQkJcHJpbnRfcmVmX3N0YXR1cygnLScsICJbZGVsZXRlZF0iLCByZWYsIE5VTEwsIE5VTEwpOworCQlwcmludF9yZWZfc3RhdHVzKCctJywgIltkZWxldGVkXSIsIHJlZiwgTlVMTCwgTlVMTCwgcG9yY2VsYWluKTsKIAllbHNlIGlmIChpc19udWxsX3NoYTEocmVmLT5vbGRfc2hhMSkpCiAJCXByaW50X3JlZl9zdGF0dXMoJyonLAogCQkJKCFwcmVmaXhjbXAocmVmLT5uYW1lLCAicmVmcy90YWdzLyIpID8gIltuZXcgdGFnXSIgOgotCQkJICAiW25ldyBicmFuY2hdIiksCi0JCQlyZWYsIHJlZi0+cGVlcl9yZWYsIE5VTEwpOworCQkJIltuZXcgYnJhbmNoXSIpLAorCQkJcmVmLCByZWYtPnBlZXJfcmVmLCBOVUxMLCBwb3JjZWxhaW4pOwogCWVsc2UgewogCQljaGFyIHF1aWNrcmVmWzg0XTsKIAkJY2hhciB0eXBlOwpAQCAtNzc0LDUwICs2NjgsNTEgQEAKIAkJfQogCQlzdHJjYXQocXVpY2tyZWYsIHN0YXR1c19hYmJyZXYocmVmLT5uZXdfc2hhMSkpOwogCi0JCXByaW50X3JlZl9zdGF0dXModHlwZSwgcXVpY2tyZWYsIHJlZiwgcmVmLT5wZWVyX3JlZiwgbXNnKTsKKwkJcHJpbnRfcmVmX3N0YXR1cyh0eXBlLCBxdWlja3JlZiwgcmVmLCByZWYtPnBlZXJfcmVmLCBtc2csIHBvcmNlbGFpbik7CiAJfQogfQogCi1zdGF0aWMgaW50IHByaW50X29uZV9wdXNoX3N0YXR1cyhzdHJ1Y3QgcmVmICpyZWYsIGNvbnN0IGNoYXIgKmRlc3QsIGludCBjb3VudCkKK3N0YXRpYyBpbnQgcHJpbnRfb25lX3B1c2hfc3RhdHVzKHN0cnVjdCByZWYgKnJlZiwgY29uc3QgY2hhciAqZGVzdCwgaW50IGNvdW50LCBpbnQgcG9yY2VsYWluKQogewogCWlmICghY291bnQpCiAJCWZwcmludGYoc3RkZXJyLCAiVG8gJXNcbiIsIGRlc3QpOwogCiAJc3dpdGNoKHJlZi0+c3RhdHVzKSB7CiAJY2FzZSBSRUZfU1RBVFVTX05PTkU6Ci0JCXByaW50X3JlZl9zdGF0dXMoJ1gnLCAiW25vIG1hdGNoXSIsIHJlZiwgTlVMTCwgTlVMTCk7CisJCXByaW50X3JlZl9zdGF0dXMoJ1gnLCAiW25vIG1hdGNoXSIsIHJlZiwgTlVMTCwgTlVMTCwgcG9yY2VsYWluKTsKIAkJYnJlYWs7CiAJY2FzZSBSRUZfU1RBVFVTX1JFSkVDVF9OT0RFTEVURToKIAkJcHJpbnRfcmVmX3N0YXR1cygnIScsICJbcmVqZWN0ZWRdIiwgcmVmLCBOVUxMLAotCQkJCSJyZW1vdGUgZG9lcyBub3Qgc3VwcG9ydCBkZWxldGluZyByZWZzIik7CisJCQkJCQkgInJlbW90ZSBkb2VzIG5vdCBzdXBwb3J0IGRlbGV0aW5nIHJlZnMiLCBwb3JjZWxhaW4pOwogCQlicmVhazsKIAljYXNlIFJFRl9TVEFUVVNfVVBUT0RBVEU6CiAJCXByaW50X3JlZl9zdGF0dXMoJz0nLCAiW3VwIHRvIGRhdGVdIiwgcmVmLAotCQkJCXJlZi0+cGVlcl9yZWYsIE5VTEwpOworCQkJCQkJIHJlZi0+cGVlcl9yZWYsIE5VTEwsIHBvcmNlbGFpbik7CiAJCWJyZWFrOwogCWNhc2UgUkVGX1NUQVRVU19SRUpFQ1RfTk9ORkFTVEZPUldBUkQ6CiAJCXByaW50X3JlZl9zdGF0dXMoJyEnLCAiW3JlamVjdGVkXSIsIHJlZiwgcmVmLT5wZWVyX3JlZiwKLQkJCQkibm9uLWZhc3QgZm9yd2FyZCIpOworCQkJCQkJICJub24tZmFzdC1mb3J3YXJkIiwgcG9yY2VsYWluKTsKIAkJYnJlYWs7CiAJY2FzZSBSRUZfU1RBVFVTX1JFTU9URV9SRUpFQ1Q6CiAJCXByaW50X3JlZl9zdGF0dXMoJyEnLCAiW3JlbW90ZSByZWplY3RlZF0iLCByZWYsCi0JCQkJcmVmLT5kZWxldGlvbiA/IE5VTEwgOiByZWYtPnBlZXJfcmVmLAotCQkJCXJlZi0+cmVtb3RlX3N0YXR1cyk7CisJCQkJCQkgcmVmLT5kZWxldGlvbiA/IE5VTEwgOiByZWYtPnBlZXJfcmVmLAorCQkJCQkJIHJlZi0+cmVtb3RlX3N0YXR1cywgcG9yY2VsYWluKTsKIAkJYnJlYWs7CiAJY2FzZSBSRUZfU1RBVFVTX0VYUEVDVElOR19SRVBPUlQ6CiAJCXByaW50X3JlZl9zdGF0dXMoJyEnLCAiW3JlbW90ZSBmYWlsdXJlXSIsIHJlZiwKLQkJCQlyZWYtPmRlbGV0aW9uID8gTlVMTCA6IHJlZi0+cGVlcl9yZWYsCi0JCQkJInJlbW90ZSBmYWlsZWQgdG8gcmVwb3J0IHN0YXR1cyIpOworCQkJCQkJIHJlZi0+ZGVsZXRpb24gPyBOVUxMIDogcmVmLT5wZWVyX3JlZiwKKwkJCQkJCSAicmVtb3RlIGZhaWxlZCB0byByZXBvcnQgc3RhdHVzIiwgcG9yY2VsYWluKTsKIAkJYnJlYWs7CiAJY2FzZSBSRUZfU1RBVFVTX09LOgotCQlwcmludF9va19yZWZfc3RhdHVzKHJlZik7CisJCXByaW50X29rX3JlZl9zdGF0dXMocmVmLCBwb3JjZWxhaW4pOwogCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgcHJpbnRfcHVzaF9zdGF0dXMoY29uc3QgY2hhciAqZGVzdCwgc3RydWN0IHJlZiAqcmVmcywgaW50IHZlcmJvc2UpCitzdGF0aWMgdm9pZCBwcmludF9wdXNoX3N0YXR1cyhjb25zdCBjaGFyICpkZXN0LCBzdHJ1Y3QgcmVmICpyZWZzLAorCQkJICAgICAgaW50IHZlcmJvc2UsIGludCBwb3JjZWxhaW4sIGludCAqIG5vbmZhc3Rmb3J3YXJkKQogewogCXN0cnVjdCByZWYgKnJlZjsKIAlpbnQgbiA9IDA7CkBAIC04MjUsMTggKzcyMCwyMSBAQAogCWlmICh2ZXJib3NlKSB7CiAJCWZvciAocmVmID0gcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpCiAJCQlpZiAocmVmLT5zdGF0dXMgPT0gUkVGX1NUQVRVU19VUFRPREFURSkKLQkJCQluICs9IHByaW50X29uZV9wdXNoX3N0YXR1cyhyZWYsIGRlc3QsIG4pOworCQkJCW4gKz0gcHJpbnRfb25lX3B1c2hfc3RhdHVzKHJlZiwgZGVzdCwgbiwgcG9yY2VsYWluKTsKIAl9CiAKIAlmb3IgKHJlZiA9IHJlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQogCQlpZiAocmVmLT5zdGF0dXMgPT0gUkVGX1NUQVRVU19PSykKLQkJCW4gKz0gcHJpbnRfb25lX3B1c2hfc3RhdHVzKHJlZiwgZGVzdCwgbik7CisJCQluICs9IHByaW50X29uZV9wdXNoX3N0YXR1cyhyZWYsIGRlc3QsIG4sIHBvcmNlbGFpbik7CiAKKwkqbm9uZmFzdGZvcndhcmQgPSAwOwogCWZvciAocmVmID0gcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKIAkJaWYgKHJlZi0+c3RhdHVzICE9IFJFRl9TVEFUVVNfTk9ORSAmJgogCQkgICAgcmVmLT5zdGF0dXMgIT0gUkVGX1NUQVRVU19VUFRPREFURSAmJgogCQkgICAgcmVmLT5zdGF0dXMgIT0gUkVGX1NUQVRVU19PSykKLQkJCW4gKz0gcHJpbnRfb25lX3B1c2hfc3RhdHVzKHJlZiwgZGVzdCwgbik7CisJCQluICs9IHByaW50X29uZV9wdXNoX3N0YXR1cyhyZWYsIGRlc3QsIG4sIHBvcmNlbGFpbik7CisJCWlmIChyZWYtPnN0YXR1cyA9PSBSRUZfU1RBVFVTX1JFSkVDVF9OT05GQVNURk9SV0FSRCkKKwkJCSpub25mYXN0Zm9yd2FyZCA9IDE7CiAJfQogfQogCkBAIC04NzcsMTggKzc3NSwyMSBAQAogCXN0cnVjdCBzZW5kX3BhY2tfYXJncyBhcmdzOwogCWludCByZXQ7CiAKLQlpZiAoIWRhdGEtPmNvbm4pIHsKKwlpZiAoIWRhdGEtPmdvdF9yZW1vdGVfaGVhZHMpIHsKIAkJc3RydWN0IHJlZiAqdG1wX3JlZnM7CiAJCWNvbm5lY3Rfc2V0dXAodHJhbnNwb3J0LCAxLCAwKTsKIAogCQlnZXRfcmVtb3RlX2hlYWRzKGRhdGEtPmZkWzBdLCAmdG1wX3JlZnMsIDAsIE5VTEwsIFJFRl9OT1JNQUwsCiAJCQkJIE5VTEwpOworCQlkYXRhLT5nb3RfcmVtb3RlX2hlYWRzID0gMTsKIAl9CiAKKwltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7CiAJYXJncy5zZW5kX21pcnJvciA9ICEhKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfTUlSUk9SKTsKIAlhcmdzLmZvcmNlX3VwZGF0ZSA9ICEhKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfRk9SQ0UpOwotCWFyZ3MudXNlX3RoaW5fcGFjayA9IGRhdGEtPnRoaW47CisJYXJncy51c2VfdGhpbl9wYWNrID0gZGF0YS0+b3B0aW9ucy50aGluOwogCWFyZ3MudmVyYm9zZSA9ICEhKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfVkVSQk9TRSk7CisJYXJncy5xdWlldCA9ICEhKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfUVVJRVQpOwogCWFyZ3MuZHJ5X3J1biA9ICEhKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfRFJZX1JVTik7CiAKIAlyZXQgPSBzZW5kX3BhY2soJmFyZ3MsIGRhdGEtPmZkLCBkYXRhLT5jb25uLCByZW1vdGVfcmVmcywKQEAgLTg5OCwxNSArNzk5LDI4IEBACiAJY2xvc2UoZGF0YS0+ZmRbMF0pOwogCXJldCB8PSBmaW5pc2hfY29ubmVjdChkYXRhLT5jb25uKTsKIAlkYXRhLT5jb25uID0gTlVMTDsKKwlkYXRhLT5nb3RfcmVtb3RlX2hlYWRzID0gMDsKIAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgY29ubmVjdF9naXQoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICAgY29uc3QgY2hhciAqZXhlY3V0YWJsZSwgaW50IGZkWzJdKQoreworCXN0cnVjdCBnaXRfdHJhbnNwb3J0X2RhdGEgKmRhdGEgPSB0cmFuc3BvcnQtPmRhdGE7CisJZGF0YS0+Y29ubiA9IGdpdF9jb25uZWN0KGRhdGEtPmZkLCB0cmFuc3BvcnQtPnVybCwKKwkJCQkgZXhlY3V0YWJsZSwgMCk7CisJZmRbMF0gPSBkYXRhLT5mZFswXTsKKwlmZFsxXSA9IGRhdGEtPmZkWzFdOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGRpc2Nvbm5lY3RfZ2l0KHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCkKIHsKIAlzdHJ1Y3QgZ2l0X3RyYW5zcG9ydF9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOwogCWlmIChkYXRhLT5jb25uKSB7Ci0JCXBhY2tldF9mbHVzaChkYXRhLT5mZFsxXSk7CisJCWlmIChkYXRhLT5nb3RfcmVtb3RlX2hlYWRzKQorCQkJcGFja2V0X2ZsdXNoKGRhdGEtPmZkWzFdKTsKIAkJY2xvc2UoZGF0YS0+ZmRbMF0pOwogCQljbG9zZShkYXRhLT5mZFsxXSk7CiAJCWZpbmlzaF9jb25uZWN0KGRhdGEtPmNvbm4pOwpAQCAtOTE2LDYgKzgzMCwzMiBAQAogCXJldHVybiAwOwogfQogCit2b2lkIHRyYW5zcG9ydF90YWtlX292ZXIoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQkJIHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjaGlsZCkKK3sKKwlzdHJ1Y3QgZ2l0X3RyYW5zcG9ydF9kYXRhICpkYXRhOworCisJaWYgKCF0cmFuc3BvcnQtPnNtYXJ0X29wdGlvbnMpCisJCWRpZSgiQnVnIGRldGVjdGVkOiBUYWtpbmcgb3ZlciB0cmFuc3BvcnQgcmVxdWlyZXMgbm9uLU5VTEwgIgorCQkgICAgInNtYXJ0X29wdGlvbnMgZmllbGQuIik7CisKKwlkYXRhID0geGNhbGxvYygxLCBzaXplb2YoKmRhdGEpKTsKKwlkYXRhLT5vcHRpb25zID0gKnRyYW5zcG9ydC0+c21hcnRfb3B0aW9uczsKKwlkYXRhLT5jb25uID0gY2hpbGQ7CisJZGF0YS0+ZmRbMF0gPSBkYXRhLT5jb25uLT5vdXQ7CisJZGF0YS0+ZmRbMV0gPSBkYXRhLT5jb25uLT5pbjsKKwlkYXRhLT5nb3RfcmVtb3RlX2hlYWRzID0gMDsKKwl0cmFuc3BvcnQtPmRhdGEgPSBkYXRhOworCisJdHJhbnNwb3J0LT5zZXRfb3B0aW9uID0gTlVMTDsKKwl0cmFuc3BvcnQtPmdldF9yZWZzX2xpc3QgPSBnZXRfcmVmc192aWFfY29ubmVjdDsKKwl0cmFuc3BvcnQtPmZldGNoID0gZmV0Y2hfcmVmc192aWFfcGFjazsKKwl0cmFuc3BvcnQtPnB1c2ggPSBOVUxMOworCXRyYW5zcG9ydC0+cHVzaF9yZWZzID0gZ2l0X3RyYW5zcG9ydF9wdXNoOworCXRyYW5zcG9ydC0+ZGlzY29ubmVjdCA9IGRpc2Nvbm5lY3RfZ2l0OworCXRyYW5zcG9ydC0+c21hcnRfb3B0aW9ucyA9ICYoZGF0YS0+b3B0aW9ucyk7Cit9CisKIHN0YXRpYyBpbnQgaXNfbG9jYWwoY29uc3QgY2hhciAqdXJsKQogewogCWNvbnN0IGNoYXIgKmNvbG9uID0gc3RyY2hyKHVybCwgJzonKTsKQEAgLTkzMiw1NCArODcyLDEyMCBAQAogCXJldHVybiBTX0lTUkVHKGJ1Zi5zdF9tb2RlKTsKIH0KIAorc3RhdGljIGludCBpc191cmwoY29uc3QgY2hhciAqdXJsKQoreworCWNvbnN0IGNoYXIgKnVybDIsICpmaXJzdF9zbGFzaDsKKworCWlmICghdXJsKQorCQlyZXR1cm4gMDsKKwl1cmwyID0gdXJsOworCWZpcnN0X3NsYXNoID0gc3RyY2hyKHVybCwgJy8nKTsKKworCS8qIElucHV0IHdpdGggbm8gc2xhc2ggYXQgYWxsIG9yIHNsYXNoIGZpcnN0IGNhbid0IGJlIFVSTC4gKi8KKwlpZiAoIWZpcnN0X3NsYXNoIHx8IGZpcnN0X3NsYXNoID09IHVybCkKKwkJcmV0dXJuIDA7CisJLyogQ2hhcmFjdGVyIGJlZm9yZSBtdXN0IGJlIDogYW5kIG5leHQgbXVzdCBiZSAvLiAqLworCWlmIChmaXJzdF9zbGFzaFstMV0gIT0gJzonIHx8IGZpcnN0X3NsYXNoWzFdICE9ICcvJykKKwkJcmV0dXJuIDA7CisJLyogVGhlcmUgbXVzdCBiZSBzb21ldGhpbmcgYmVmb3JlIHRoZSA6Ly8gKi8KKwlpZiAoZmlyc3Rfc2xhc2ggPT0gdXJsICsgMSkKKwkJcmV0dXJuIDA7CisJLyoKKwkgKiBDaGVjayBhbGwgY2hhcmFjdGVycyB1cCB0byBmaXJzdCBzbGFzaCAtIDEuIE9ubHkgYWxwaGFudW0KKwkgKiBpcyBhbGxvd2VkLgorCSAqLworCXVybDIgPSB1cmw7CisJd2hpbGUgKHVybDIgPCBmaXJzdF9zbGFzaCAtIDEpIHsKKwkJaWYgKCFpc2FsbnVtKCh1bnNpZ25lZCBjaGFyKSp1cmwyKSkKKwkJCXJldHVybiAwOworCQl1cmwyKys7CisJfQorCisJLyogVmFsaWQgZW5vdWdoLiAqLworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGV4dGVybmFsX3NwZWNpZmljYXRpb25fbGVuKGNvbnN0IGNoYXIgKnVybCkKK3sKKwlyZXR1cm4gc3RyY2hyKHVybCwgJzonKSAtIHVybDsKK30KKwogc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0X2dldChzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIGNvbnN0IGNoYXIgKnVybCkKIHsKKwljb25zdCBjaGFyICpoZWxwZXI7CiAJc3RydWN0IHRyYW5zcG9ydCAqcmV0ID0geGNhbGxvYygxLCBzaXplb2YoKnJldCkpOwogCisJaWYgKCFyZW1vdGUpCisJCWRpZSgiTm8gcmVtb3RlIHByb3ZpZGVkIHRvIHRyYW5zcG9ydF9nZXQoKSIpOworCisJcmV0LT5nb3RfcmVtb3RlX3JlZnMgPSAwOwogCXJldC0+cmVtb3RlID0gcmVtb3RlOworCWhlbHBlciA9IHJlbW90ZS0+Zm9yZWlnbl92Y3M7CisKKwlpZiAoIXVybCAmJiByZW1vdGUtPnVybCkKKwkJdXJsID0gcmVtb3RlLT51cmxbMF07CiAJcmV0LT51cmwgPSB1cmw7CiAKLQlpZiAoIXByZWZpeGNtcCh1cmwsICJyc3luYzoiKSkgeworCS8qIG1heWJlIGl0IGlzIGEgZm9yZWlnbiBVUkw/ICovCisJaWYgKHVybCkgeworCQljb25zdCBjaGFyICpwID0gdXJsOworCisJCXdoaWxlIChpc2FsbnVtKCpwKSkKKwkJCXArKzsKKwkJaWYgKCFwcmVmaXhjbXAocCwgIjo6IikpCisJCQloZWxwZXIgPSB4c3RybmR1cCh1cmwsIHAgLSB1cmwpOworCX0KKworCWlmIChoZWxwZXIpIHsKKwkJdHJhbnNwb3J0X2hlbHBlcl9pbml0KHJldCwgaGVscGVyKTsKKwl9IGVsc2UgaWYgKCFwcmVmaXhjbXAodXJsLCAicnN5bmM6IikpIHsKIAkJcmV0LT5nZXRfcmVmc19saXN0ID0gZ2V0X3JlZnNfdmlhX3JzeW5jOwogCQlyZXQtPmZldGNoID0gZmV0Y2hfb2Jqc192aWFfcnN5bmM7CiAJCXJldC0+cHVzaCA9IHJzeW5jX3RyYW5zcG9ydF9wdXNoOwotCi0JfSBlbHNlIGlmICghcHJlZml4Y21wKHVybCwgImh0dHA6Ly8iKQotCSAgICAgICAgfHwgIXByZWZpeGNtcCh1cmwsICJodHRwczovLyIpCi0JICAgICAgICB8fCAhcHJlZml4Y21wKHVybCwgImZ0cDovLyIpKSB7Ci0jaWZkZWYgTk9fQ1VSTAotCQllcnJvcigiZ2l0IHdhcyBjb21waWxlZCB3aXRob3V0IGxpYmN1cmwgc3VwcG9ydC4iKTsKLSNlbHNlCi0JCXJldC0+Z2V0X3JlZnNfbGlzdCA9IGdldF9yZWZzX3ZpYV9jdXJsOwotCQlyZXQtPmZldGNoID0gZmV0Y2hfb2Jqc192aWFfY3VybDsKLQkJcmV0LT5wdXNoID0gY3VybF90cmFuc3BvcnRfcHVzaDsKLSNlbmRpZgotCQlyZXQtPmRpc2Nvbm5lY3QgPSBkaXNjb25uZWN0X3dhbGtlcjsKLQorCQlyZXQtPnNtYXJ0X29wdGlvbnMgPSBOVUxMOwogCX0gZWxzZSBpZiAoaXNfbG9jYWwodXJsKSAmJiBpc19maWxlKHVybCkpIHsKIAkJc3RydWN0IGJ1bmRsZV90cmFuc3BvcnRfZGF0YSAqZGF0YSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpkYXRhKSk7CiAJCXJldC0+ZGF0YSA9IGRhdGE7CiAJCXJldC0+Z2V0X3JlZnNfbGlzdCA9IGdldF9yZWZzX2Zyb21fYnVuZGxlOwogCQlyZXQtPmZldGNoID0gZmV0Y2hfcmVmc19mcm9tX2J1bmRsZTsKIAkJcmV0LT5kaXNjb25uZWN0ID0gY2xvc2VfYnVuZGxlOwotCi0JfSBlbHNlIHsKKwkJcmV0LT5zbWFydF9vcHRpb25zID0gTlVMTDsKKwl9IGVsc2UgaWYgKCFpc191cmwodXJsKQorCQl8fCAhcHJlZml4Y21wKHVybCwgImZpbGU6Ly8iKQorCQl8fCAhcHJlZml4Y21wKHVybCwgImdpdDovLyIpCisJCXx8ICFwcmVmaXhjbXAodXJsLCAic3NoOi8vIikKKwkJfHwgIXByZWZpeGNtcCh1cmwsICJnaXQrc3NoOi8vIikKKwkJfHwgIXByZWZpeGNtcCh1cmwsICJzc2grZ2l0Oi8vIikpIHsKKwkJLyogVGhlc2UgYXJlIGJ1aWx0aW4gc21hcnQgdHJhbnNwb3J0cy4gKi8KIAkJc3RydWN0IGdpdF90cmFuc3BvcnRfZGF0YSAqZGF0YSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpkYXRhKSk7CiAJCXJldC0+ZGF0YSA9IGRhdGE7Ci0JCXJldC0+c2V0X29wdGlvbiA9IHNldF9naXRfb3B0aW9uOworCQlyZXQtPnNldF9vcHRpb24gPSBOVUxMOwogCQlyZXQtPmdldF9yZWZzX2xpc3QgPSBnZXRfcmVmc192aWFfY29ubmVjdDsKIAkJcmV0LT5mZXRjaCA9IGZldGNoX3JlZnNfdmlhX3BhY2s7CiAJCXJldC0+cHVzaF9yZWZzID0gZ2l0X3RyYW5zcG9ydF9wdXNoOworCQlyZXQtPmNvbm5lY3QgPSBjb25uZWN0X2dpdDsKIAkJcmV0LT5kaXNjb25uZWN0ID0gZGlzY29ubmVjdF9naXQ7CisJCXJldC0+c21hcnRfb3B0aW9ucyA9ICYoZGF0YS0+b3B0aW9ucyk7CiAKLQkJZGF0YS0+dGhpbiA9IDE7CiAJCWRhdGEtPmNvbm4gPSBOVUxMOwotCQlkYXRhLT51cGxvYWRwYWNrID0gImdpdC11cGxvYWQtcGFjayI7Ci0JCWlmIChyZW1vdGUgJiYgcmVtb3RlLT51cGxvYWRwYWNrKQotCQkJZGF0YS0+dXBsb2FkcGFjayA9IHJlbW90ZS0+dXBsb2FkcGFjazsKLQkJZGF0YS0+cmVjZWl2ZXBhY2sgPSAiZ2l0LXJlY2VpdmUtcGFjayI7Ci0JCWlmIChyZW1vdGUgJiYgcmVtb3RlLT5yZWNlaXZlcGFjaykKLQkJCWRhdGEtPnJlY2VpdmVwYWNrID0gcmVtb3RlLT5yZWNlaXZlcGFjazsKKwkJZGF0YS0+Z290X3JlbW90ZV9oZWFkcyA9IDA7CisJfSBlbHNlIHsKKwkJLyogVW5rbm93biBwcm90b2NvbCBpbiBVUkwuIFBhc3MgdG8gZXh0ZXJuYWwgaGFuZGxlci4gKi8KKwkJaW50IGxlbiA9IGV4dGVybmFsX3NwZWNpZmljYXRpb25fbGVuKHVybCk7CisJCWNoYXIgKmhhbmRsZXIgPSB4bWFsbG9jKGxlbiArIDEpOworCQloYW5kbGVyW2xlbl0gPSAwOworCQlzdHJuY3B5KGhhbmRsZXIsIHVybCwgbGVuKTsKKwkJdHJhbnNwb3J0X2hlbHBlcl9pbml0KHJldCwgaGFuZGxlcik7CisJfQorCisJaWYgKHJldC0+c21hcnRfb3B0aW9ucykgeworCQlyZXQtPnNtYXJ0X29wdGlvbnMtPnRoaW4gPSAxOworCQlyZXQtPnNtYXJ0X29wdGlvbnMtPnVwbG9hZHBhY2sgPSAiZ2l0LXVwbG9hZC1wYWNrIjsKKwkJaWYgKHJlbW90ZS0+dXBsb2FkcGFjaykKKwkJCXJldC0+c21hcnRfb3B0aW9ucy0+dXBsb2FkcGFjayA9IHJlbW90ZS0+dXBsb2FkcGFjazsKKwkJcmV0LT5zbWFydF9vcHRpb25zLT5yZWNlaXZlcGFjayA9ICJnaXQtcmVjZWl2ZS1wYWNrIjsKKwkJaWYgKHJlbW90ZS0+cmVjZWl2ZXBhY2spCisJCQlyZXQtPnNtYXJ0X29wdGlvbnMtPnJlY2VpdmVwYWNrID0gcmVtb3RlLT5yZWNlaXZlcGFjazsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtOTg4LDQzICs5OTQsNzYgQEAKIGludCB0cmFuc3BvcnRfc2V0X29wdGlvbihzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCiAJCQkgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCiB7CisJaW50IGdpdF9yZXBvcnRzID0gMSwgcHJvdG9jb2xfcmVwb3J0cyA9IDE7CisKKwlpZiAodHJhbnNwb3J0LT5zbWFydF9vcHRpb25zKQorCQlnaXRfcmVwb3J0cyA9IHNldF9naXRfb3B0aW9uKHRyYW5zcG9ydC0+c21hcnRfb3B0aW9ucywKKwkJCQkJICAgICBuYW1lLCB2YWx1ZSk7CisKIAlpZiAodHJhbnNwb3J0LT5zZXRfb3B0aW9uKQotCQlyZXR1cm4gdHJhbnNwb3J0LT5zZXRfb3B0aW9uKHRyYW5zcG9ydCwgbmFtZSwgdmFsdWUpOworCQlwcm90b2NvbF9yZXBvcnRzID0gdHJhbnNwb3J0LT5zZXRfb3B0aW9uKHRyYW5zcG9ydCwgbmFtZSwKKwkJCQkJCQl2YWx1ZSk7CisKKwkvKiBJZiBlaXRoZXIgcmVwb3J0IGlzIDAsIHJlcG9ydCAwIChzdWNjZXNzKS4gKi8KKwlpZiAoIWdpdF9yZXBvcnRzIHx8ICFwcm90b2NvbF9yZXBvcnRzKQorCQlyZXR1cm4gMDsKKwkvKiBJZiBlaXRoZXIgcmVwb3J0cyAtMSAoaW52YWxpZCB2YWx1ZSksIHJlcG9ydCAtMS4gKi8KKwlpZiAoKGdpdF9yZXBvcnRzID09IC0xKSB8fCAocHJvdG9jb2xfcmVwb3J0cyA9PSAtMSkpCisJCXJldHVybiAtMTsKKwkvKiBPdGhlcndpc2UgaWYgYm90aCByZXBvcnQgdW5rbm93biwgcmVwb3J0IHVua25vd24uICovCiAJcmV0dXJuIDE7CiB9CiAKIGludCB0cmFuc3BvcnRfcHVzaChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCi0JCSAgIGludCByZWZzcGVjX25yLCBjb25zdCBjaGFyICoqcmVmc3BlYywgaW50IGZsYWdzKQorCQkgICBpbnQgcmVmc3BlY19uciwgY29uc3QgY2hhciAqKnJlZnNwZWMsIGludCBmbGFncywKKwkJICAgaW50ICpub25mYXN0Zm9yd2FyZCkKIHsKKwkqbm9uZmFzdGZvcndhcmQgPSAwOwogCXZlcmlmeV9yZW1vdGVfbmFtZXMocmVmc3BlY19uciwgcmVmc3BlYyk7CiAKLQlpZiAodHJhbnNwb3J0LT5wdXNoKQorCWlmICh0cmFuc3BvcnQtPnB1c2gpIHsKKwkJLyogTWF5YmUgRklYTUUuIEJ1dCBubyBpbXBvcnRhbnQgdHJhbnNwb3J0IHVzZXMgdGhpcyBjYXNlLiAqLworCQlpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9TRVRfVVBTVFJFQU0pCisJCQlkaWUoIlRoaXMgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgdXNpbmcgLS1zZXQtdXBzdHJlYW0iKTsKKwogCQlyZXR1cm4gdHJhbnNwb3J0LT5wdXNoKHRyYW5zcG9ydCwgcmVmc3BlY19uciwgcmVmc3BlYywgZmxhZ3MpOwotCWlmICh0cmFuc3BvcnQtPnB1c2hfcmVmcykgeworCX0gZWxzZSBpZiAodHJhbnNwb3J0LT5wdXNoX3JlZnMpIHsKIAkJc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMgPQogCQkJdHJhbnNwb3J0LT5nZXRfcmVmc19saXN0KHRyYW5zcG9ydCwgMSk7Ci0JCXN0cnVjdCByZWYgKipyZW1vdGVfdGFpbDsKIAkJc3RydWN0IHJlZiAqbG9jYWxfcmVmcyA9IGdldF9sb2NhbF9oZWFkcygpOwogCQlpbnQgbWF0Y2hfZmxhZ3MgPSBNQVRDSF9SRUZTX05PTkU7CiAJCWludCB2ZXJib3NlID0gZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9WRVJCT1NFOwotCQlpbnQgcmV0OworCQlpbnQgcXVpZXQgPSBmbGFncyAmIFRSQU5TUE9SVF9QVVNIX1FVSUVUOworCQlpbnQgcG9yY2VsYWluID0gZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9QT1JDRUxBSU47CisJCWludCBwcmV0ZW5kID0gZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9EUllfUlVOOworCQlpbnQgcmV0LCBlcnI7CiAKIAkJaWYgKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfQUxMKQogCQkJbWF0Y2hfZmxhZ3MgfD0gTUFUQ0hfUkVGU19BTEw7CiAJCWlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX01JUlJPUikKIAkJCW1hdGNoX2ZsYWdzIHw9IE1BVENIX1JFRlNfTUlSUk9SOwogCi0JCXJlbW90ZV90YWlsID0gJnJlbW90ZV9yZWZzOwotCQl3aGlsZSAoKnJlbW90ZV90YWlsKQotCQkJcmVtb3RlX3RhaWwgPSAmKCgqcmVtb3RlX3RhaWwpLT5uZXh0KTsKLQkJaWYgKG1hdGNoX3JlZnMobG9jYWxfcmVmcywgcmVtb3RlX3JlZnMsICZyZW1vdGVfdGFpbCwKKwkJaWYgKG1hdGNoX3JlZnMobG9jYWxfcmVmcywgJnJlbW90ZV9yZWZzLAogCQkJICAgICAgIHJlZnNwZWNfbnIsIHJlZnNwZWMsIG1hdGNoX2ZsYWdzKSkgewogCQkJcmV0dXJuIC0xOwogCQl9CiAKLQkJcmV0ID0gdHJhbnNwb3J0LT5wdXNoX3JlZnModHJhbnNwb3J0LCByZW1vdGVfcmVmcywgZmxhZ3MpOworCQlzZXRfcmVmX3N0YXR1c19mb3JfcHVzaChyZW1vdGVfcmVmcywKKwkJCWZsYWdzICYgVFJBTlNQT1JUX1BVU0hfTUlSUk9SLAorCQkJZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9GT1JDRSk7CiAKLQkJcHJpbnRfcHVzaF9zdGF0dXModHJhbnNwb3J0LT51cmwsIHJlbW90ZV9yZWZzLCB2ZXJib3NlKTsKKwkJcmV0ID0gdHJhbnNwb3J0LT5wdXNoX3JlZnModHJhbnNwb3J0LCByZW1vdGVfcmVmcywgZmxhZ3MpOworCQllcnIgPSBwdXNoX2hhZF9lcnJvcnMocmVtb3RlX3JlZnMpOworCisJCXJldCB8PSBlcnI7CisKKwkJaWYgKCFxdWlldCB8fCBlcnIpCisJCQlwcmludF9wdXNoX3N0YXR1cyh0cmFuc3BvcnQtPnVybCwgcmVtb3RlX3JlZnMsCisJCQkJCXZlcmJvc2UgfCBwb3JjZWxhaW4sIHBvcmNlbGFpbiwKKwkJCQkJbm9uZmFzdGZvcndhcmQpOworCisJCWlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX1NFVF9VUFNUUkVBTSkKKwkJCXNldF91cHN0cmVhbXModHJhbnNwb3J0LCByZW1vdGVfcmVmcywgcHJldGVuZCk7CiAKIAkJaWYgKCEoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9EUllfUlVOKSkgewogCQkJc3RydWN0IHJlZiAqcmVmOwpAQCAtMTAzMiw3ICsxMDcxLDcgQEAKIAkJCQl1cGRhdGVfdHJhY2tpbmdfcmVmKHRyYW5zcG9ydC0+cmVtb3RlLCByZWYsIHZlcmJvc2UpOwogCQl9CiAKLQkJaWYgKCFyZXQgJiYgIXJlZnNfcHVzaGVkKHJlbW90ZV9yZWZzKSkKKwkJaWYgKCFxdWlldCAmJiAhcmV0ICYmICFyZWZzX3B1c2hlZChyZW1vdGVfcmVmcykpCiAJCQlmcHJpbnRmKHN0ZGVyciwgIkV2ZXJ5dGhpbmcgdXAtdG8tZGF0ZVxuIik7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtMTA0MSwyNyArMTA4MCw0NiBAQAogCiBjb25zdCBzdHJ1Y3QgcmVmICp0cmFuc3BvcnRfZ2V0X3JlbW90ZV9yZWZzKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCkKIHsKLQlpZiAoIXRyYW5zcG9ydC0+cmVtb3RlX3JlZnMpCisJaWYgKCF0cmFuc3BvcnQtPmdvdF9yZW1vdGVfcmVmcykgewogCQl0cmFuc3BvcnQtPnJlbW90ZV9yZWZzID0gdHJhbnNwb3J0LT5nZXRfcmVmc19saXN0KHRyYW5zcG9ydCwgMCk7CisJCXRyYW5zcG9ydC0+Z290X3JlbW90ZV9yZWZzID0gMTsKKwl9CisKIAlyZXR1cm4gdHJhbnNwb3J0LT5yZW1vdGVfcmVmczsKIH0KIAotaW50IHRyYW5zcG9ydF9mZXRjaF9yZWZzKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgY29uc3Qgc3RydWN0IHJlZiAqcmVmcykKK2ludCB0cmFuc3BvcnRfZmV0Y2hfcmVmcyhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIHN0cnVjdCByZWYgKnJlZnMpCiB7CiAJaW50IHJjOwotCWludCBucl9oZWFkcyA9IDAsIG5yX2FsbG9jID0gMDsKLQljb25zdCBzdHJ1Y3QgcmVmICoqaGVhZHMgPSBOVUxMOwotCWNvbnN0IHN0cnVjdCByZWYgKnJtOworCWludCBucl9oZWFkcyA9IDAsIG5yX2FsbG9jID0gMCwgbnJfcmVmcyA9IDA7CisJc3RydWN0IHJlZiAqKmhlYWRzID0gTlVMTDsKKwlzdHJ1Y3QgcmVmICpybTsKIAogCWZvciAocm0gPSByZWZzOyBybTsgcm0gPSBybS0+bmV4dCkgeworCQlucl9yZWZzKys7CiAJCWlmIChybS0+cGVlcl9yZWYgJiYKKwkJICAgICFpc19udWxsX3NoYTEocm0tPm9sZF9zaGExKSAmJgogCQkgICAgIWhhc2hjbXAocm0tPnBlZXJfcmVmLT5vbGRfc2hhMSwgcm0tPm9sZF9zaGExKSkKIAkJCWNvbnRpbnVlOwogCQlBTExPQ19HUk9XKGhlYWRzLCBucl9oZWFkcyArIDEsIG5yX2FsbG9jKTsKIAkJaGVhZHNbbnJfaGVhZHMrK10gPSBybTsKIAl9CiAKKwlpZiAoIW5yX2hlYWRzKSB7CisJCS8qCisJCSAqIFdoZW4gZGVlcGVuaW5nIG9mIGEgc2hhbGxvdyByZXBvc2l0b3J5IGlzIHJlcXVlc3RlZCwKKwkJICogdGhlbiBsb2NhbCBhbmQgcmVtb3RlIHJlZnMgYXJlIGxpa2VseSB0byBzdGlsbCBiZSBlcXVhbC4KKwkJICogSnVzdCBmZWVkIHRoZW0gYWxsIHRvIHRoZSBmZXRjaCBtZXRob2QgaW4gdGhhdCBjYXNlLgorCQkgKiBUaGlzIGNvbmRpdGlvbiBzaG91bGRuJ3QgYmUgbWV0IGluIGEgbm9uLWRlZXBlbmluZyBmZXRjaAorCQkgKiAoc2VlIGJ1aWx0aW4tZmV0Y2guYzpxdWlja2ZldGNoKCkpLgorCQkgKi8KKwkJaGVhZHMgPSB4bWFsbG9jKG5yX3JlZnMgKiBzaXplb2YoKmhlYWRzKSk7CisJCWZvciAocm0gPSByZWZzOyBybTsgcm0gPSBybS0+bmV4dCkKKwkJCWhlYWRzW25yX2hlYWRzKytdID0gcm07CisJfQorCiAJcmMgPSB0cmFuc3BvcnQtPmZldGNoKHRyYW5zcG9ydCwgbnJfaGVhZHMsIGhlYWRzKTsKKwogCWZyZWUoaGVhZHMpOwogCXJldHVybiByYzsKIH0KQEAgLTEwNzUsNiArMTEzMywxNSBAQAogCX0KIH0KIAoraW50IHRyYW5zcG9ydF9jb25uZWN0KHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgY29uc3QgY2hhciAqZXhlYywgaW50IGZkWzJdKQoreworCWlmICh0cmFuc3BvcnQtPmNvbm5lY3QpCisJCXJldHVybiB0cmFuc3BvcnQtPmNvbm5lY3QodHJhbnNwb3J0LCBuYW1lLCBleGVjLCBmZCk7CisJZWxzZQorCQlkaWUoIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sIik7Cit9CisKIGludCB0cmFuc3BvcnRfZGlzY29ubmVjdChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpCiB7CiAJaW50IHJldCA9IDA7CkBAIC0xMDgzLDMgKzExNTAsNTEgQEAKIAlmcmVlKHRyYW5zcG9ydCk7CiAJcmV0dXJuIHJldDsKIH0KKworLyoKKyAqIFN0cmlwIHVzZXJuYW1lIChhbmQgcGFzc3dvcmQpIGZyb20gYW4gdXJsIGFuZCByZXR1cm4KKyAqIGl0IGluIGEgbmV3bHkgYWxsb2NhdGVkIHN0cmluZy4KKyAqLworY2hhciAqdHJhbnNwb3J0X2Fub255bWl6ZV91cmwoY29uc3QgY2hhciAqdXJsKQoreworCWNoYXIgKmFub25fdXJsLCAqc2NoZW1lX3ByZWZpeCwgKmFub25fcGFydDsKKwlzaXplX3QgYW5vbl9sZW4sIHByZWZpeF9sZW4gPSAwOworCisJYW5vbl9wYXJ0ID0gc3RyY2hyKHVybCwgJ0AnKTsKKwlpZiAoaXNfbG9jYWwodXJsKSB8fCAhYW5vbl9wYXJ0KQorCQlnb3RvIGxpdGVyYWxfY29weTsKKworCWFub25fbGVuID0gc3RybGVuKCsrYW5vbl9wYXJ0KTsKKwlzY2hlbWVfcHJlZml4ID0gc3Ryc3RyKHVybCwgIjovLyIpOworCWlmICghc2NoZW1lX3ByZWZpeCkgeworCQlpZiAoIXN0cmNocihhbm9uX3BhcnQsICc6JykpCisJCQkvKiBjYW5ub3QgYmUgIm1lQHRoZXJlOi9wYXRoL25hbWUiICovCisJCQlnb3RvIGxpdGVyYWxfY29weTsKKwl9IGVsc2UgeworCQljb25zdCBjaGFyICpjcDsKKwkJLyogbWFrZSBzdXJlIHNjaGVtZSBpcyByZWFzb25hYmxlICovCisJCWZvciAoY3AgPSB1cmw7IGNwIDwgc2NoZW1lX3ByZWZpeDsgY3ArKykgeworCQkJc3dpdGNoICgqY3ApIHsKKwkJCQkvKiBSRkMgMTczOCAyLjEgKi8KKwkJCWNhc2UgJysnOiBjYXNlICcuJzogY2FzZSAnLSc6CisJCQkJYnJlYWs7IC8qIG9rICovCisJCQlkZWZhdWx0OgorCQkJCWlmIChpc2FsbnVtKCpjcCkpCisJCQkJCWJyZWFrOworCQkJCS8qIGl0IGlzbid0ICovCisJCQkJZ290byBsaXRlcmFsX2NvcHk7CisJCQl9CisJCX0KKwkJLyogQCBwYXN0IHRoZSBmaXJzdCBzbGFzaCBkb2VzIG5vdCBjb3VudCAqLworCQljcCA9IHN0cmNocihzY2hlbWVfcHJlZml4ICsgMywgJy8nKTsKKwkJaWYgKGNwICYmIGNwIDwgYW5vbl9wYXJ0KQorCQkJZ290byBsaXRlcmFsX2NvcHk7CisJCXByZWZpeF9sZW4gPSBzY2hlbWVfcHJlZml4IC0gdXJsICsgMzsKKwl9CisJYW5vbl91cmwgPSB4Y2FsbG9jKDEsIDEgKyBwcmVmaXhfbGVuICsgYW5vbl9sZW4pOworCW1lbWNweShhbm9uX3VybCwgdXJsLCBwcmVmaXhfbGVuKTsKKwltZW1jcHkoYW5vbl91cmwgKyBwcmVmaXhfbGVuLCBhbm9uX3BhcnQsIGFub25fbGVuKTsKKwlyZXR1cm4gYW5vbl91cmw7CitsaXRlcmFsX2NvcHk6CisJcmV0dXJuIHhzdHJkdXAodXJsKTsKK30KZGlmZiAtLWdpdCBhL3RyYW5zcG9ydC5oIGIvdHJhbnNwb3J0LmgKaW5kZXggYjFjMjI1Mi4uNmRkOWFlMSAxMDA2NDQKLS0tIGEvdHJhbnNwb3J0LmgKKysrIGIvdHJhbnNwb3J0LmgKQEAgLTQsNiArNCwxNSBAQAogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSAicmVtb3RlLmgiCiAKK3N0cnVjdCBnaXRfdHJhbnNwb3J0X29wdGlvbnMgeworCXVuc2lnbmVkIHRoaW4gOiAxOworCXVuc2lnbmVkIGtlZXAgOiAxOworCXVuc2lnbmVkIGZvbGxvd3RhZ3MgOiAxOworCWludCBkZXB0aDsKKwljb25zdCBjaGFyICp1cGxvYWRwYWNrOworCWNvbnN0IGNoYXIgKnJlY2VpdmVwYWNrOworfTsKKwogc3RydWN0IHRyYW5zcG9ydCB7CiAJc3RydWN0IHJlbW90ZSAqcmVtb3RlOwogCWNvbnN0IGNoYXIgKnVybDsKQEAgLTExLDYgKzIwLDEyIEBACiAJY29uc3Qgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnM7CiAKIAkvKioKKwkgKiBJbmRpY2F0ZXMgd2hldGhlciB3ZSBhbHJlYWR5IGNhbGxlZCBnZXRfcmVmc19saXN0KCk7IHNldCBieQorCSAqIHRyYW5zcG9ydC5jOjp0cmFuc3BvcnRfZ2V0X3JlbW90ZV9yZWZzKCkuCisJICovCisJdW5zaWduZWQgZ290X3JlbW90ZV9yZWZzIDogMTsKKworCS8qKgogCSAqIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBwb3NpdGl2ZSBpZiB0aGUgb3B0aW9uIGlzIG5vdAogCSAqIHJlY29nbml6ZWQgb3IgaXMgaW5hcHBsaWNhYmxlLCBhbmQgbmVnYXRpdmUgaWYgdGhlIG9wdGlvbgogCSAqIGlzIGFwcGxpY2FibGUgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLgpAQCAtMTgsMTYgKzMzLDYxIEBACiAJaW50ICgqc2V0X29wdGlvbikoc3RydWN0IHRyYW5zcG9ydCAqY29ubmVjdGlvbiwgY29uc3QgY2hhciAqbmFtZSwKIAkJCSAgY29uc3QgY2hhciAqdmFsdWUpOwogCisJLyoqCisJICogUmV0dXJucyBhIGxpc3Qgb2YgdGhlIHJlbW90ZSBzaWRlJ3MgcmVmcy4gSW4gb3JkZXIgdG8gYWxsb3cKKwkgKiB0aGUgdHJhbnNwb3J0IHRvIHRyeSB0byBzaGFyZSBjb25uZWN0aW9ucywgZm9yX3B1c2ggaXMgYQorCSAqIGhpbnQgYXMgdG8gd2hldGhlciB0aGUgdWx0aW1hdGUgb3BlcmF0aW9uIGlzIGEgcHVzaCBvciBhIGZldGNoLgorCSAqCisJICogSWYgdGhlIHRyYW5zcG9ydCBpcyBhYmxlIHRvIGRldGVybWluZSB0aGUgcmVtb3RlIGhhc2ggZm9yCisJICogdGhlIHJlZiB3aXRob3V0IGEgaHVnZSBhbW91bnQgb2YgZWZmb3J0LCBpdCBzaG91bGQgc3RvcmUgaXQKKwkgKiBpbiB0aGUgcmVmJ3Mgb2xkX3NoYTEgZmllbGQ7IG90aGVyd2lzZSBpdCBzaG91bGQgYmUgYWxsIDAuCisJICoqLwogCXN0cnVjdCByZWYgKigqZ2V0X3JlZnNfbGlzdCkoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBpbnQgZm9yX3B1c2gpOwotCWludCAoKmZldGNoKShzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGludCByZWZzX25yLCBjb25zdCBzdHJ1Y3QgcmVmICoqcmVmcyk7CisKKwkvKioKKwkgKiBGZXRjaCB0aGUgb2JqZWN0cyBmb3IgdGhlIGdpdmVuIHJlZnMuIE5vdGUgdGhhdCB0aGlzIGdldHMKKwkgKiBhbiBhcnJheSwgYW5kIHNob3VsZCBpZ25vcmUgdGhlIGxpc3Qgc3RydWN0dXJlLgorCSAqCisJICogSWYgdGhlIHRyYW5zcG9ydCBkaWQgbm90IGdldCBoYXNoZXMgZm9yIHJlZnMgaW4KKwkgKiBnZXRfcmVmc19saXN0KCksIGl0IHNob3VsZCBzZXQgdGhlIG9sZF9zaGExIGZpZWxkcyBpbiB0aGUKKwkgKiBwcm92aWRlZCByZWZzIG5vdy4KKwkgKiovCisJaW50ICgqZmV0Y2gpKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgaW50IHJlZnNfbnIsIHN0cnVjdCByZWYgKipyZWZzKTsKKworCS8qKgorCSAqIFB1c2ggdGhlIG9iamVjdHMgYW5kIHJlZnMuIFNlbmQgdGhlIG5lY2Vzc2FyeSBvYmplY3RzLCBhbmQKKwkgKiB0aGVuLCBmb3IgYW55IHJlZnMgd2hlcmUgcGVlcl9yZWYgaXMgc2V0IGFuZAorCSAqIHBlZXJfcmVmLT5uZXdfc2hhMSBpcyBkaWZmZXJlbnQgZnJvbSBvbGRfc2hhMSwgdGVsbCB0aGUKKwkgKiByZW1vdGUgc2lkZSB0byB1cGRhdGUgZWFjaCByZWYgaW4gdGhlIGxpc3QgZnJvbSBvbGRfc2hhMSB0bworCSAqIHBlZXJfcmVmLT5uZXdfc2hhMS4KKwkgKgorCSAqIFdoZXJlIHBvc3NpYmxlLCBzZXQgdGhlIHN0YXR1cyBmb3IgZWFjaCByZWYgYXBwcm9wcmlhdGVseS4KKwkgKgorCSAqIFRoZSB0cmFuc3BvcnQgbXVzdCBtb2RpZnkgbmV3X3NoYTEgaW4gdGhlIHJlZiB0byB0aGUgbmV3CisJICogdmFsdWUgaWYgdGhlIHJlbW90ZSBhY2NlcHRlZCB0aGUgY2hhbmdlLiBOb3RlIHRoYXQgdGhpcworCSAqIGNvdWxkIGJlIGEgZGlmZmVyZW50IHZhbHVlIGZyb20gcGVlcl9yZWYtPm5ld19zaGExIGlmIHRoZQorCSAqIHByb2Nlc3MgaW52b2x2ZWQgZ2VuZXJhdGluZyBuZXcgY29tbWl0cy4KKwkgKiovCiAJaW50ICgqcHVzaF9yZWZzKShzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIHN0cnVjdCByZWYgKnJlZnMsIGludCBmbGFncyk7CiAJaW50ICgqcHVzaCkoc3RydWN0IHRyYW5zcG9ydCAqY29ubmVjdGlvbiwgaW50IHJlZnNwZWNfbnIsIGNvbnN0IGNoYXIgKipyZWZzcGVjLCBpbnQgZmxhZ3MpOworCWludCAoKmNvbm5lY3QpKHN0cnVjdCB0cmFuc3BvcnQgKmNvbm5lY3Rpb24sIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgICBjb25zdCBjaGFyICpleGVjdXRhYmxlLCBpbnQgZmRbMl0pOwogCisJLyoqIGdldF9yZWZzX2xpc3QoKSwgZmV0Y2goKSwgYW5kIHB1c2hfcmVmcygpIGNhbiBrZWVwCisJICogcmVzb3VyY2VzIChzdWNoIGFzIGEgY29ubmVjdGlvbikgcmVzZXJ2ZWQgZm9yIGZ1dGhlcgorCSAqIHVzZS4gZGlzY29ubmVjdCgpIHJlbGVhc2VzIHRoZXNlIHJlc291cmNlcy4KKwkgKiovCiAJaW50ICgqZGlzY29ubmVjdCkoc3RydWN0IHRyYW5zcG9ydCAqY29ubmVjdGlvbik7CiAJY2hhciAqcGFja19sb2NrZmlsZTsKLQlzaWduZWQgdmVyYm9zZSA6IDI7Ci0JLyogRm9yY2UgcHJvZ3Jlc3MgZXZlbiBpZiB0aGUgb3V0cHV0IGlzIG5vdCBhIHR0eSAqLworCXNpZ25lZCB2ZXJib3NlIDogMzsKKwkvKiBGb3JjZSBwcm9ncmVzcyBldmVuIGlmIHN0ZGVyciBpcyBub3QgYSB0dHkgKi8KIAl1bnNpZ25lZCBwcm9ncmVzcyA6IDE7CisJLyoKKwkgKiBJZiB0cmFuc3BvcnQgaXMgYXQgbGVhc3QgcG90ZW50aWFsbHkgc21hcnQsIHRoaXMgcG9pbnRzIHRvCisJICogZ2l0X3RyYW5zcG9ydF9vcHRpb25zIHN0cnVjdHVyZSB0byB1c2UgaW4gY2FzZSB0cmFuc3BvcnQKKwkgKiBhY3R1YWxseSB0dXJucyBvdXQgdG8gYmUgc21hcnQuCisJICovCisJc3RydWN0IGdpdF90cmFuc3BvcnRfb3B0aW9ucyAqc21hcnRfb3B0aW9uczsKIH07CiAKICNkZWZpbmUgVFJBTlNQT1JUX1BVU0hfQUxMIDEKQEAgLTM1LDYgKzk1LDkgQEAKICNkZWZpbmUgVFJBTlNQT1JUX1BVU0hfRFJZX1JVTiA0CiAjZGVmaW5lIFRSQU5TUE9SVF9QVVNIX01JUlJPUiA4CiAjZGVmaW5lIFRSQU5TUE9SVF9QVVNIX1ZFUkJPU0UgMTYKKyNkZWZpbmUgVFJBTlNQT1JUX1BVU0hfUE9SQ0VMQUlOIDMyCisjZGVmaW5lIFRSQU5TUE9SVF9QVVNIX1FVSUVUIDY0CisjZGVmaW5lIFRSQU5TUE9SVF9QVVNIX1NFVF9VUFNUUkVBTSAxMjgKIAogLyogUmV0dXJucyBhIHRyYW5zcG9ydCBzdWl0YWJsZSBmb3IgdGhlIHVybCAqLwogc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0X2dldChzdHJ1Y3QgcmVtb3RlICosIGNvbnN0IGNoYXIgKik7CkBAIC02NywxMiArMTMwLDIyIEBACiAJCQkgY29uc3QgY2hhciAqdmFsdWUpOwogCiBpbnQgdHJhbnNwb3J0X3B1c2goc3RydWN0IHRyYW5zcG9ydCAqY29ubmVjdGlvbiwKLQkJICAgaW50IHJlZnNwZWNfbnIsIGNvbnN0IGNoYXIgKipyZWZzcGVjLCBpbnQgZmxhZ3MpOworCQkgICBpbnQgcmVmc3BlY19uciwgY29uc3QgY2hhciAqKnJlZnNwZWMsIGludCBmbGFncywKKwkJICAgaW50ICogbm9uZmFzdGZvcndhcmQpOwogCiBjb25zdCBzdHJ1Y3QgcmVmICp0cmFuc3BvcnRfZ2V0X3JlbW90ZV9yZWZzKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCk7CiAKLWludCB0cmFuc3BvcnRfZmV0Y2hfcmVmcyhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGNvbnN0IHN0cnVjdCByZWYgKnJlZnMpOworaW50IHRyYW5zcG9ydF9mZXRjaF9yZWZzKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgc3RydWN0IHJlZiAqcmVmcyk7CiB2b2lkIHRyYW5zcG9ydF91bmxvY2tfcGFjayhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpOwogaW50IHRyYW5zcG9ydF9kaXNjb25uZWN0KHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCk7CitjaGFyICp0cmFuc3BvcnRfYW5vbnltaXplX3VybChjb25zdCBjaGFyICp1cmwpOwordm9pZCB0cmFuc3BvcnRfdGFrZV9vdmVyKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJCSBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY2hpbGQpOworCitpbnQgdHJhbnNwb3J0X2Nvbm5lY3Qoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICBjb25zdCBjaGFyICpleGVjLCBpbnQgZmRbMl0pOworCisvKiBUcmFuc3BvcnQgbWV0aG9kcyBkZWZpbmVkIG91dHNpZGUgdHJhbnNwb3J0LmMgKi8KK2ludCB0cmFuc3BvcnRfaGVscGVyX2luaXQoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBjb25zdCBjaGFyICpuYW1lKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS90cmVlLWRpZmYuYyBiL3RyZWUtZGlmZi5jCmluZGV4IGVkZDgzOTQuLmZlOWY1MmMgMTAwNjQ0Ci0tLSBhL3RyZWUtZGlmZi5jCisrKyBiL3RyZWUtZGlmZi5jCkBAIC02OCw3ICs2OCw3IEBACiAJCWlmIChESUZGX09QVF9UU1Qob3B0LCBUUkVFX0lOX1JFQ1VSU0lWRSkpIHsKIAkJCW5ld2Jhc2VbYmFzZWxlbiArIHBhdGhsZW4xXSA9IDA7CiAJCQlvcHQtPmNoYW5nZShvcHQsIG1vZGUxLCBtb2RlMiwKLQkJCQkgICAgc2hhMSwgc2hhMiwgbmV3YmFzZSk7CisJCQkJICAgIHNoYTEsIHNoYTIsIG5ld2Jhc2UsIDAsIDApOwogCQkJbmV3YmFzZVtiYXNlbGVuICsgcGF0aGxlbjFdID0gJy8nOwogCQl9CiAJCXJldHZhbCA9IGRpZmZfdHJlZV9zaGExKHNoYTEsIHNoYTIsIG5ld2Jhc2UsIG9wdCk7CkBAIC03Nyw3ICs3Nyw3IEBACiAJfQogCiAJZnVsbG5hbWUgPSBtYWxsb2NfZnVsbG5hbWUoYmFzZSwgYmFzZWxlbiwgcGF0aDEsIHBhdGhsZW4xKTsKLQlvcHQtPmNoYW5nZShvcHQsIG1vZGUxLCBtb2RlMiwgc2hhMSwgc2hhMiwgZnVsbG5hbWUpOworCW9wdC0+Y2hhbmdlKG9wdCwgbW9kZTEsIG1vZGUyLCBzaGExLCBzaGEyLCBmdWxsbmFtZSwgMCwgMCk7CiAJZnJlZShmdWxsbmFtZSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMzksNiArMjM5LDEyIEBACiAJCWlmICghdHJlZSB8fCB0eXBlICE9IE9CSl9UUkVFKQogCQkJZGllKCJjb3JydXB0IHRyZWUgc2hhICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOwogCisJCWlmIChESUZGX09QVF9UU1Qob3B0LCBUUkVFX0lOX1JFQ1VSU0lWRSkpIHsKKwkJCW5ld2Jhc2VbYmFzZWxlbiArIHBhdGhsZW5dID0gMDsKKwkJCW9wdC0+YWRkX3JlbW92ZShvcHQsICpwcmVmaXgsIG1vZGUsIHNoYTEsIG5ld2Jhc2UsIDApOworCQkJbmV3YmFzZVtiYXNlbGVuICsgcGF0aGxlbl0gPSAnLyc7CisJCX0KKwogCQlpbml0X3RyZWVfZGVzYygmaW5uZXIsIHRyZWUsIHNpemUpOwogCQlzaG93X3RyZWUob3B0LCBwcmVmaXgsICZpbm5lciwgbmV3YmFzZSwgYmFzZWxlbiArIDEgKyBwYXRobGVuKTsKIApAQCAtMjQ2LDcgKzI1Miw3IEBACiAJCWZyZWUobmV3YmFzZSk7CiAJfSBlbHNlIHsKIAkJY2hhciAqZnVsbG5hbWUgPSBtYWxsb2NfZnVsbG5hbWUoYmFzZSwgYmFzZWxlbiwgcGF0aCwgcGF0aGxlbik7Ci0JCW9wdC0+YWRkX3JlbW92ZShvcHQsIHByZWZpeFswXSwgbW9kZSwgc2hhMSwgZnVsbG5hbWUpOworCQlvcHQtPmFkZF9yZW1vdmUob3B0LCBwcmVmaXhbMF0sIG1vZGUsIHNoYTEsIGZ1bGxuYW1lLCAwKTsKIAkJZnJlZShmdWxsbmFtZSk7CiAJfQogfQpAQCAtMjgwLDcgKzI4Niw4IEBACiAJaW50IGJhc2VsZW4gPSBzdHJsZW4oYmFzZSk7CiAKIAlmb3IgKDs7KSB7Ci0JCWlmIChESUZGX09QVF9UU1Qob3B0LCBRVUlFVCkgJiYgRElGRl9PUFRfVFNUKG9wdCwgSEFTX0NIQU5HRVMpKQorCQlpZiAoRElGRl9PUFRfVFNUKG9wdCwgUVVJQ0spICYmCisJCSAgICBESUZGX09QVF9UU1Qob3B0LCBIQVNfQ0hBTkdFUykpCiAJCQlicmVhazsKIAkJaWYgKG9wdC0+bnJfcGF0aHMpIHsKIAkJCXNraXBfdW5pbnRlcmVzdGluZyh0MSwgYmFzZSwgYmFzZWxlbiwgb3B0KTsKZGlmZiAtLWdpdCBhL3RyZWUtd2Fsay5jIGIvdHJlZS13YWxrLmMKaW5kZXggMDJlMmFlZC4uNjdhOWEwYyAxMDA2NDQKLS0tIGEvdHJlZS13YWxrLmMKKysrIGIvdHJlZS13YWxrLmMKQEAgLTYwLDEzICs2MCw2IEBACiAJcmV0dXJuIGJ1ZjsKIH0KIAotc3RhdGljIGludCBlbnRyeV9jb21wYXJlKHN0cnVjdCBuYW1lX2VudHJ5ICphLCBzdHJ1Y3QgbmFtZV9lbnRyeSAqYikKLXsKLQlyZXR1cm4gZGZfbmFtZV9jb21wYXJlKAotCQkJYS0+cGF0aCwgdHJlZV9lbnRyeV9sZW4oYS0+cGF0aCwgYS0+c2hhMSksIGEtPm1vZGUsCi0JCQliLT5wYXRoLCB0cmVlX2VudHJ5X2xlbihiLT5wYXRoLCBiLT5zaGExKSwgYi0+bW9kZSk7Ci19Ci0KIHN0YXRpYyB2b2lkIGVudHJ5X2NsZWFyKHN0cnVjdCBuYW1lX2VudHJ5ICphKQogewogCW1lbXNldChhLCAwLCBzaXplb2YoKmEpKTsKQEAgLTEzOCw2NiArMTMxLDI2NCBAQAogCXJldHVybiBwYXRoOwogfQogCitzdHJ1Y3QgdHJlZV9kZXNjX3NraXAgeworCXN0cnVjdCB0cmVlX2Rlc2Nfc2tpcCAqcHJldjsKKwljb25zdCB2b2lkICpwdHI7Cit9OworCitzdHJ1Y3QgdHJlZV9kZXNjX3ggeworCXN0cnVjdCB0cmVlX2Rlc2MgZDsKKwlzdHJ1Y3QgdHJlZV9kZXNjX3NraXAgKnNraXA7Cit9OworCitzdGF0aWMgaW50IG5hbWVfY29tcGFyZShjb25zdCBjaGFyICphLCBpbnQgYV9sZW4sCisJCQljb25zdCBjaGFyICpiLCBpbnQgYl9sZW4pCit7CisJaW50IGxlbiA9IChhX2xlbiA8IGJfbGVuKSA/IGFfbGVuIDogYl9sZW47CisJaW50IGNtcCA9IG1lbWNtcChhLCBiLCBsZW4pOworCWlmIChjbXApCisJCXJldHVybiBjbXA7CisJcmV0dXJuIChhX2xlbiAtIGJfbGVuKTsKK30KKworc3RhdGljIGludCBjaGVja19lbnRyeV9tYXRjaChjb25zdCBjaGFyICphLCBpbnQgYV9sZW4sIGNvbnN0IGNoYXIgKmIsIGludCBiX2xlbikKK3sKKwkvKgorCSAqIFRoZSBjYWxsZXIgd2FudHMgdG8gcGljayAqYSogZnJvbSBhIHRyZWUgb3Igbm90aGluZy4KKwkgKiBXZSBhcmUgbG9va2luZyBhdCAqYiogaW4gYSB0cmVlLgorCSAqCisJICogKDApIElmIGEgYW5kIGIgYXJlIHRoZSBzYW1lIG5hbWUsIHdlIGFyZSB0cml2aWFsbHkgaGFwcHkuCisJICoKKwkgKiBUaGVyZSBhcmUgdGhyZWUgcG9zc2liaWxpdGllcyB3aGVyZSAqYSogY291bGQgYmUgaGlkaW5nCisJICogYmVoaW5kICpiKi4KKwkgKgorCSAqICgxKSAqYSogPT0gInQiLCAgICpiKiA9PSAiYWIiICBpLmUuICpiKiBzb3J0cyBlYXJsaWVyIHRoYW4gKmEqIG5vCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHRlciB3aGF0LgorCSAqICgyKSAqYSogPT0gInQiLCAgICpiKiA9PSAidC0yIiBhbmQgInQiIGlzIGEgc3VidHJlZSBpbiB0aGUgdHJlZTsKKwkgKiAoMykgKmEqID09ICJ0LTIiLCAqYiogPT0gInQiICAgYW5kICJ0LTIiIGlzIGEgYmxvYiBpbiB0aGUgdHJlZS4KKwkgKgorCSAqIE90aGVyd2lzZSB3ZSBrbm93ICphKiB3b24ndCBhcHBlYXIgaW4gdGhlIHRyZWUgd2l0aG91dAorCSAqIHNjYW5uaW5nIGZ1cnRoZXIuCisJICovCisKKwlpbnQgY21wID0gbmFtZV9jb21wYXJlKGEsIGFfbGVuLCBiLCBiX2xlbik7CisKKwkvKiBNb3N0IGNvbW1vbiBjYXNlIGZpcnN0IC0tIHJlYWRpbmcgc3luYydkIHRyZWVzICovCisJaWYgKCFjbXApCisJCXJldHVybiBjbXA7CisKKwlpZiAoMCA8IGNtcCkgeworCQkvKiBhIGNvbWVzIGFmdGVyIGI7IGl0IGRvZXMgbm90IG1hdHRlciBpZiBpdCBpcyBjYXNlICgzKQorCQlpZiAoYl9sZW4gPCBhX2xlbiAmJiAhbWVtY21wKGEsIGIsIGJfbGVuKSAmJiBhW2JfbGVuXSA8ICcvJykKKwkJCXJldHVybiAxOworCQkqLworCQlyZXR1cm4gMTsgLyoga2VlcCBsb29raW5nICovCisJfQorCisJLyogYiBjb21lcyBhZnRlciBhOyBhcmUgd2UgbG9va2luZyBhdCBjYXNlICgyKT8gKi8KKwlpZiAoYV9sZW4gPCBiX2xlbiAmJiAhbWVtY21wKGEsIGIsIGFfbGVuKSAmJiBiW2FfbGVuXSA8ICcvJykKKwkJcmV0dXJuIDE7IC8qIGtlZXAgbG9va2luZyAqLworCisJcmV0dXJuIC0xOyAvKiBhIGNhbm5vdCBhcHBlYXIgaW4gdGhlIHRyZWUgKi8KK30KKworLyoKKyAqIEZyb20gdGhlIGV4dGVuZGVkIHRyZWVfZGVzYywgZXh0cmFjdCB0aGUgZmlyc3QgbmFtZSBlbnRyeSwgd2hpbGUKKyAqIHBheWluZyBhdHRlbnRpb24gdG8gdGhlIGNhbmRpZGF0ZSAiZmlyc3QiIG5hbWUuICBNb3N0IGltcG9ydGFudGx5LAorICogd2hlbiBsb29raW5nIGZvciBhbiBlbnRyeSwgaWYgdGhlcmUgYXJlIGVudHJpZXMgdGhhdCBzb3J0cyBlYXJsaWVyCisgKiBpbiB0aGUgdHJlZSBvYmplY3QgcmVwcmVzZW50YXRpb24gdGhhbiB0aGF0IG5hbWUsIHNraXAgdGhlbSBhbmQKKyAqIHByb2Nlc3MgdGhlIG5hbWVkIGVudHJ5IGZpcnN0LiAgV2Ugd2lsbCByZW1lbWJlciB0aGF0IHdlIGhhdmVuJ3QKKyAqIHByb2Nlc3NlZCB0aGUgZmlyc3QgZW50cnkgeWV0LCBhbmQgaW4gdGhlIGxhdGVyIGNhbGwgc2tpcCB0aGUKKyAqIGVudHJ5IHdlIHByb2Nlc3NlZCBlYXJseSB3aGVuIHVwZGF0ZV9leHRlbmRlZF9lbnRyeSgpIGlzIGNhbGxlZC4KKyAqCisgKiBFLmcuIGlmIHRoZSB1bmRlcmx5aW5nIHRyZWUgb2JqZWN0IGhhcyB0aGVzZSBlbnRyaWVzOgorICoKKyAqICAgIGJsb2IgICAgInQtMSIKKyAqICAgIGJsb2IgICAgInQtMiIKKyAqICAgIHRyZWUgICAgInQiCisgKiAgICBibG9iICAgICJ0PTEiCisgKgorICogYW5kIHRoZSAiZmlyc3QiIGFza3MgZm9yICJ0IiwgcmVtZW1iZXIgdGhhdCB3ZSBzdGlsbCBuZWVkIHRvCisgKiBwcm9jZXNzICJ0LTEiIGFuZCAidC0yIiBidXQgZXh0cmFjdCAidCIuICBBZnRlciBwcm9jZXNzaW5nIHRoZQorICogZW50cnkgInQiIGZyb20gdGhpcyBjYWxsLCB0aGUgY2FsbGVyIHdpbGwgbGV0IHVzIGtub3cgYnkgY2FsbGluZworICogdXBkYXRlX2V4dGVuZGVkX2VudHJ5KCkgdGhhdCB3ZSBjYW4gcmVtZW1iZXIgInQiIGhhcyBiZWVuIHByb2Nlc3NlZAorICogYWxyZWFkeS4KKyAqLworCitzdGF0aWMgdm9pZCBleHRlbmRlZF9lbnRyeV9leHRyYWN0KHN0cnVjdCB0cmVlX2Rlc2NfeCAqdCwKKwkJCQkgICBzdHJ1Y3QgbmFtZV9lbnRyeSAqYSwKKwkJCQkgICBjb25zdCBjaGFyICpmaXJzdCwKKwkJCQkgICBpbnQgZmlyc3RfbGVuKQoreworCWNvbnN0IGNoYXIgKnBhdGg7CisJaW50IGxlbjsKKwlzdHJ1Y3QgdHJlZV9kZXNjIHByb2JlOworCXN0cnVjdCB0cmVlX2Rlc2Nfc2tpcCAqc2tpcDsKKworCS8qCisJICogRXh0cmFjdCB0aGUgZmlyc3QgZW50cnkgZnJvbSB0aGUgdHJlZV9kZXNjLCBidXQgc2tpcCB0aGUKKwkgKiBvbmVzIHRoYXQgd2UgYWxyZWFkeSByZXR1cm5lZCBpbiBlYXJsaWVyIHJvdW5kcy4KKwkgKi8KKwl3aGlsZSAoMSkgeworCQlpZiAoIXQtPmQuc2l6ZSkgeworCQkJZW50cnlfY2xlYXIoYSk7CisJCQlicmVhazsgLyogbm90IGZvdW5kICovCisJCX0KKwkJZW50cnlfZXh0cmFjdCgmdC0+ZCwgYSk7CisJCWZvciAoc2tpcCA9IHQtPnNraXA7IHNraXA7IHNraXAgPSBza2lwLT5wcmV2KQorCQkJaWYgKGEtPnBhdGggPT0gc2tpcC0+cHRyKQorCQkJCWJyZWFrOyAvKiBmb3VuZCAqLworCQlpZiAoIXNraXApCisJCQlicmVhazsKKwkJLyogV2UgaGF2ZSBwcm9jZXNzZWQgdGhpcyBlbnRyeSBhbHJlYWR5LiAqLworCQl1cGRhdGVfdHJlZV9lbnRyeSgmdC0+ZCk7CisJfQorCisJaWYgKCFmaXJzdCB8fCAhYS0+cGF0aCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBUaGUgY2FsbGVyIHdhbnRzICJmaXJzdCIgZnJvbSB0aGlzIHRyZWUsIG9yIG5vdGhpbmcuCisJICovCisJcGF0aCA9IGEtPnBhdGg7CisJbGVuID0gdHJlZV9lbnRyeV9sZW4oYS0+cGF0aCwgYS0+c2hhMSk7CisJc3dpdGNoIChjaGVja19lbnRyeV9tYXRjaChmaXJzdCwgZmlyc3RfbGVuLCBwYXRoLCBsZW4pKSB7CisJY2FzZSAtMToKKwkJZW50cnlfY2xlYXIoYSk7CisJY2FzZSAwOgorCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBXZSBuZWVkIHRvIGxvb2stYWhlYWQgLS0gd2Ugc3VzcGVjdCB0aGF0IGEgc3VidHJlZSB3aG9zZQorCSAqIG5hbWUgaXMgImZpcnN0IiBtYXkgYmUgaGlkaW5nIGJlaGluZCB0aGUgY3VycmVudCBlbnRyeSAicGF0aCIuCisJICovCisJcHJvYmUgPSB0LT5kOworCXdoaWxlIChwcm9iZS5zaXplKSB7CisJCWVudHJ5X2V4dHJhY3QoJnByb2JlLCBhKTsKKwkJcGF0aCA9IGEtPnBhdGg7CisJCWxlbiA9IHRyZWVfZW50cnlfbGVuKGEtPnBhdGgsIGEtPnNoYTEpOworCQlzd2l0Y2ggKGNoZWNrX2VudHJ5X21hdGNoKGZpcnN0LCBmaXJzdF9sZW4sIHBhdGgsIGxlbikpIHsKKwkJY2FzZSAtMToKKwkJCWVudHJ5X2NsZWFyKGEpOworCQljYXNlIDA6CisJCQlyZXR1cm47CisJCWRlZmF1bHQ6CisJCQl1cGRhdGVfdHJlZV9lbnRyeSgmcHJvYmUpOworCQkJYnJlYWs7CisJCX0KKwkJLyoga2VlcCBsb29raW5nICovCisJfQorCWVudHJ5X2NsZWFyKGEpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfZXh0ZW5kZWRfZW50cnkoc3RydWN0IHRyZWVfZGVzY194ICp0LCBzdHJ1Y3QgbmFtZV9lbnRyeSAqYSkKK3sKKwlpZiAodC0+ZC5lbnRyeS5wYXRoID09IGEtPnBhdGgpIHsKKwkJdXBkYXRlX3RyZWVfZW50cnkoJnQtPmQpOworCX0gZWxzZSB7CisJCS8qIHdlIGhhdmUgcmV0dXJuZWQgdGhpcyBlbnRyeSBlYXJseSAqLworCQlzdHJ1Y3QgdHJlZV9kZXNjX3NraXAgKnNraXAgPSB4bWFsbG9jKHNpemVvZigqc2tpcCkpOworCQlza2lwLT5wdHIgPSBhLT5wYXRoOworCQlza2lwLT5wcmV2ID0gdC0+c2tpcDsKKwkJdC0+c2tpcCA9IHNraXA7CisJfQorfQorCitzdGF0aWMgdm9pZCBmcmVlX2V4dGVuZGVkX2VudHJ5KHN0cnVjdCB0cmVlX2Rlc2NfeCAqdCkKK3sKKwlzdHJ1Y3QgdHJlZV9kZXNjX3NraXAgKnAsICpzOworCisJZm9yIChzID0gdC0+c2tpcDsgczsgcyA9IHApIHsKKwkJcCA9IHMtPnByZXY7CisJCWZyZWUocyk7CisJfQorfQorCiBpbnQgdHJhdmVyc2VfdHJlZXMoaW50IG4sIHN0cnVjdCB0cmVlX2Rlc2MgKnQsIHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvKQogewogCWludCByZXQgPSAwOwogCXN0cnVjdCBuYW1lX2VudHJ5ICplbnRyeSA9IHhtYWxsb2MobipzaXplb2YoKmVudHJ5KSk7CisJaW50IGk7CisJc3RydWN0IHRyZWVfZGVzY194ICp0eCA9IHhjYWxsb2Mobiwgc2l6ZW9mKCp0eCkpOworCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJdHhbaV0uZCA9IHRbaV07CiAKIAlmb3IgKDs7KSB7Ci0JCXVuc2lnbmVkIGxvbmcgbWFzayA9IDA7Ci0JCXVuc2lnbmVkIGxvbmcgZGlybWFzayA9IDA7Ci0JCWludCBpLCBsYXN0OworCQl1bnNpZ25lZCBsb25nIG1hc2ssIGRpcm1hc2s7CisJCWNvbnN0IGNoYXIgKmZpcnN0ID0gTlVMTDsKKwkJaW50IGZpcnN0X2xlbiA9IDA7CisJCXN0cnVjdCBuYW1lX2VudHJ5ICplOworCQlpbnQgbGVuOwogCi0JCWxhc3QgPSAtMTsKIAkJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotCQkJaWYgKCF0W2ldLnNpemUpCi0JCQkJY29udGludWU7Ci0JCQllbnRyeV9leHRyYWN0KHQraSwgZW50cnkraSk7Ci0JCQlpZiAobGFzdCA+PSAwKSB7Ci0JCQkJaW50IGNtcCA9IGVudHJ5X2NvbXBhcmUoZW50cnkraSwgZW50cnkrbGFzdCk7CisJCQllID0gZW50cnkgKyBpOworCQkJZXh0ZW5kZWRfZW50cnlfZXh0cmFjdCh0eCArIGksIGUsIE5VTEwsIDApOworCQl9CiAKLQkJCQkvKgotCQkJCSAqIElzIHRoZSBuZXcgbmFtZSBiaWdnZXIgdGhhbiB0aGUgb2xkIG9uZT8KLQkJCQkgKiBJZ25vcmUgaXQKLQkJCQkgKi8KLQkJCQlpZiAoY21wID4gMCkKLQkJCQkJY29udGludWU7Ci0JCQkJLyoKLQkJCQkgKiBJcyB0aGUgbmV3IG5hbWUgc21hbGxlciB0aGFuIHRoZSBvbGQgb25lPwotCQkJCSAqIElnbm9yZSBhbGwgb2xkIG9uZXMKLQkJCQkgKi8KLQkJCQlpZiAoY21wIDwgMCkKLQkJCQkJbWFzayA9IDA7CisJCS8qCisJCSAqIEEgdHJlZSBtYXkgaGF2ZSAidC0yIiBhdCB0aGUgY3VycmVudCBsb2NhdGlvbiBldmVuCisJCSAqIHRob3VnaCBpdCBtYXkgaGF2ZSAidCIgdGhhdCBpcyBhIHN1YnRyZWUgYmVoaW5kIGl0LAorCQkgKiBhbmQgYW5vdGhlciB0cmVlIG1heSByZXR1cm4gInQiLiAgV2Ugd2FudCB0byBncmFiCisJCSAqIGFsbCAidCIgZnJvbSBhbGwgdHJlZXMgdG8gbWF0Y2ggaW4gc3VjaCBhIGNhc2UuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQllID0gZW50cnkgKyBpOworCQkJaWYgKCFlLT5wYXRoKQorCQkJCWNvbnRpbnVlOworCQkJbGVuID0gdHJlZV9lbnRyeV9sZW4oZS0+cGF0aCwgZS0+c2hhMSk7CisJCQlpZiAoIWZpcnN0KSB7CisJCQkJZmlyc3QgPSBlLT5wYXRoOworCQkJCWZpcnN0X2xlbiA9IGxlbjsKKwkJCQljb250aW51ZTsKIAkJCX0KKwkJCWlmIChuYW1lX2NvbXBhcmUoZS0+cGF0aCwgbGVuLCBmaXJzdCwgZmlyc3RfbGVuKSA8IDApIHsKKwkJCQlmaXJzdCA9IGUtPnBhdGg7CisJCQkJZmlyc3RfbGVuID0gbGVuOworCQkJfQorCQl9CisKKwkJaWYgKGZpcnN0KSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQkJZSA9IGVudHJ5ICsgaTsKKwkJCQlleHRlbmRlZF9lbnRyeV9leHRyYWN0KHR4ICsgaSwgZSwgZmlyc3QsIGZpcnN0X2xlbik7CisJCQkJLyogQ3VsbCB0aGUgb25lcyB0aGF0IGFyZSBub3QgdGhlIGVhcmxpZXN0ICovCisJCQkJaWYgKCFlLT5wYXRoKQorCQkJCQljb250aW51ZTsKKwkJCQlsZW4gPSB0cmVlX2VudHJ5X2xlbihlLT5wYXRoLCBlLT5zaGExKTsKKwkJCQlpZiAobmFtZV9jb21wYXJlKGUtPnBhdGgsIGxlbiwgZmlyc3QsIGZpcnN0X2xlbikpCisJCQkJCWVudHJ5X2NsZWFyKGUpOworCQkJfQorCQl9CisKKwkJLyogTm93IHdlIGhhdmUgaW4gZW50cnlbaV0gdGhlIGVhcmxpZXN0IG5hbWUgZnJvbSB0aGUgdHJlZXMgKi8KKwkJbWFzayA9IDA7CisJCWRpcm1hc2sgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQlpZiAoIWVudHJ5W2ldLnBhdGgpCisJCQkJY29udGludWU7CiAJCQltYXNrIHw9IDF1bCA8PCBpOwogCQkJaWYgKFNfSVNESVIoZW50cnlbaV0ubW9kZSkpCiAJCQkJZGlybWFzayB8PSAxdWwgPDwgaTsKLQkJCWxhc3QgPSBpOwogCQl9CiAJCWlmICghbWFzaykKIAkJCWJyZWFrOwotCQlkaXJtYXNrICY9IG1hc2s7Ci0KLQkJLyoKLQkJICogQ2xlYXIgYWxsIHRoZSB1bnVzZWQgbmFtZS1lbnRyaWVzLgotCQkgKi8KLQkJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotCQkJaWYgKG1hc2sgJiAoMXVsIDw8IGkpKQotCQkJCWNvbnRpbnVlOwotCQkJZW50cnlfY2xlYXIoZW50cnkgKyBpKTsKLQkJfQogCQlyZXQgPSBpbmZvLT5mbihuLCBtYXNrLCBkaXJtYXNrLCBlbnRyeSwgaW5mbyk7CiAJCWlmIChyZXQgPCAwKQogCQkJYnJlYWs7Ci0JCWlmIChyZXQpCi0JCQltYXNrICY9IHJldDsKKwkJbWFzayAmPSByZXQ7CiAJCXJldCA9IDA7Ci0JCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IG47IGkrKykKIAkJCWlmIChtYXNrICYgKDF1bCA8PCBpKSkKLQkJCQl1cGRhdGVfdHJlZV9lbnRyeSh0ICsgaSk7Ci0JCX0KKwkJCQl1cGRhdGVfZXh0ZW5kZWRfZW50cnkodHggKyBpLCBlbnRyeSArIGkpOwogCX0KIAlmcmVlKGVudHJ5KTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQlmcmVlX2V4dGVuZGVkX2VudHJ5KHR4ICsgaSk7CisJZnJlZSh0eCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjUwLDYgKzQ0MSw3IEBACiAKIAlpZiAobmFtZVswXSA9PSAnXDAnKSB7CiAJCWhhc2hjcHkoc2hhMSwgcm9vdCk7CisJCWZyZWUodHJlZSk7CiAJCXJldHVybiAwOwogCX0KIApkaWZmIC0tZ2l0IGEvdW5wYWNrLXRyZWVzLmMgYi91bnBhY2stdHJlZXMuYwppbmRleCBhMDY5N2QyLi43NWY1NGNhIDEwMDY0NAotLS0gYS91bnBhY2stdHJlZXMuYworKysgYi91bnBhY2stdHJlZXMuYwpAQCAtMzIsNiArMzIsMTIgQEAKIAogCS8qIGJpbmRfb3ZlcmxhcCAqLwogCSJFbnRyeSAnJXMnIG92ZXJsYXBzIHdpdGggJyVzJy4gIENhbm5vdCBiaW5kLiIsCisKKwkvKiBzcGFyc2Vfbm90X3VwdG9kYXRlX2ZpbGUgKi8KKwkiRW50cnkgJyVzJyBub3QgdXB0b2RhdGUuIENhbm5vdCB1cGRhdGUgc3BhcnNlIGNoZWNrb3V0LiIsCisKKwkvKiB3b3VsZF9sb3NlX29ycGhhbmVkICovCisJIldvcmtpbmcgdHJlZSBmaWxlICclcycgd291bGQgYmUgJXMgYnkgc3BhcnNlIGNoZWNrb3V0IHVwZGF0ZS4iLAogfTsKIAogI2RlZmluZSBFUlJPUk1TRyhvLGZsZCkgXApAQCAtNjEsOCArNjcsMTYgQEAKIHsKIAlpZiAoaGFzX3N5bWxpbmtfb3Jfbm9lbnRfbGVhZGluZ19wYXRoKGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSkpCiAJCXJldHVybjsKLQlpZiAodW5saW5rX29yX3dhcm4oY2UtPm5hbWUpKQotCQlyZXR1cm47CisJaWYgKFNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSkgeworCQlpZiAocm1kaXIoY2UtPm5hbWUpKSB7CisJCQl3YXJuaW5nKCJ1bmFibGUgdG8gcm1kaXIgJXM6ICVzIiwKKwkJCQljZS0+bmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwllbHNlCisJCWlmICh1bmxpbmtfb3Jfd2FybihjZS0+bmFtZSkpCisJCQlyZXR1cm47CiAJc2NoZWR1bGVfZGlyX2Zvcl9yZW1vdmFsKGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSk7CiB9CiAKQEAgLTc4LDcgKzkyLDcgQEAKIAlpZiAoby0+dXBkYXRlICYmIG8tPnZlcmJvc2VfdXBkYXRlKSB7CiAJCWZvciAodG90YWwgPSBjbnQgPSAwOyBjbnQgPCBpbmRleC0+Y2FjaGVfbnI7IGNudCsrKSB7CiAJCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaW5kZXgtPmNhY2hlW2NudF07Ci0JCQlpZiAoY2UtPmNlX2ZsYWdzICYgKENFX1VQREFURSB8IENFX1JFTU9WRSkpCisJCQlpZiAoY2UtPmNlX2ZsYWdzICYgKENFX1VQREFURSB8IENFX1JFTU9WRSB8IENFX1dUX1JFTU9WRSkpCiAJCQkJdG90YWwrKzsKIAkJfQogCkBAIC05Miw2ICsxMDYsMTMgQEAKIAlmb3IgKGkgPSAwOyBpIDwgaW5kZXgtPmNhY2hlX25yOyBpKyspIHsKIAkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGluZGV4LT5jYWNoZVtpXTsKIAorCQlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfV1RfUkVNT1ZFKSB7CisJCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCArK2NudCk7CisJCQlpZiAoby0+dXBkYXRlKQorCQkJCXVubGlua19lbnRyeShjZSk7CisJCQljb250aW51ZTsKKwkJfQorCiAJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9SRU1PVkUpIHsKIAkJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsICsrY250KTsKIAkJCWlmIChvLT51cGRhdGUpCkBAIC0xMTgsNiArMTM5LDU3IEBACiAJcmV0dXJuIGVycnMgIT0gMDsKIH0KIAorc3RhdGljIGludCB2ZXJpZnlfdXB0b2RhdGVfc3BhcnNlKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbyk7CitzdGF0aWMgaW50IHZlcmlmeV9hYnNlbnRfc3BhcnNlKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGNvbnN0IGNoYXIgKmFjdGlvbiwgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKTsKKworc3RhdGljIGludCB3aWxsX2hhdmVfc2tpcF93b3JrdHJlZShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJY29uc3QgY2hhciAqYmFzZW5hbWU7CisKKwlpZiAoY2Vfc3RhZ2UoY2UpKQorCQlyZXR1cm4gMDsKKworCWJhc2VuYW1lID0gc3RycmNocihjZS0+bmFtZSwgJy8nKTsKKwliYXNlbmFtZSA9IGJhc2VuYW1lID8gYmFzZW5hbWUrMSA6IGNlLT5uYW1lOworCXJldHVybiBleGNsdWRlZF9mcm9tX2xpc3QoY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpLCBiYXNlbmFtZSwgTlVMTCwgby0+ZWwpIDw9IDA7Cit9CisKK3N0YXRpYyBpbnQgYXBwbHlfc3BhcnNlX2NoZWNrb3V0KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwlpbnQgd2FzX3NraXBfd29ya3RyZWUgPSBjZV9za2lwX3dvcmt0cmVlKGNlKTsKKworCWlmICh3aWxsX2hhdmVfc2tpcF93b3JrdHJlZShjZSwgbykpCisJCWNlLT5jZV9mbGFncyB8PSBDRV9TS0lQX1dPUktUUkVFOworCWVsc2UKKwkJY2UtPmNlX2ZsYWdzICY9IH5DRV9TS0lQX1dPUktUUkVFOworCisJLyoKKwkgKiBXZSBvbmx5IGNhcmUgYWJvdXQgZmlsZXMgZ2V0dGluZyBpbnRvIHRoZSBjaGVja291dCBhcmVhCisJICogSWYgbWVyZ2Ugc3RyYXRlZ2llcyB3YW50IHRvIHJlbW92ZSBzb21lLCBnbyBhaGVhZCwgdGhpcworCSAqIGZsYWcgd2lsbCBiZSByZW1vdmVkIGV2ZW50dWFsbHkgaW4gdW5wYWNrX3RyZWVzKCkgaWYgaXQncworCSAqIG91dHNpZGUgY2hlY2tvdXQgYXJlYS4KKwkgKi8KKwlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfUkVNT1ZFKQorCQlyZXR1cm4gMDsKKworCWlmICghd2FzX3NraXBfd29ya3RyZWUgJiYgY2Vfc2tpcF93b3JrdHJlZShjZSkpIHsKKwkJLyoKKwkJICogSWYgQ0VfVVBEQVRFIGlzIHNldCwgdmVyaWZ5X3VwdG9kYXRlKCkgbXVzdCBiZSBjYWxsZWQgYWxyZWFkeQorCQkgKiBhbHNvIHN0YXQgaW5mbyBtYXkgaGF2ZSBsb3N0IGFmdGVyIG1lcmdlZF9lbnRyeSgpIHNvIGNhbGxpbmcKKwkJICogdmVyaWZ5X3VwdG9kYXRlKCkgYWdhaW4gbWF5IGZhaWwKKwkJICovCisJCWlmICghKGNlLT5jZV9mbGFncyAmIENFX1VQREFURSkgJiYgdmVyaWZ5X3VwdG9kYXRlX3NwYXJzZShjZSwgbykpCisJCQlyZXR1cm4gLTE7CisJCWNlLT5jZV9mbGFncyB8PSBDRV9XVF9SRU1PVkU7CisJfQorCWlmICh3YXNfc2tpcF93b3JrdHJlZSAmJiAhY2Vfc2tpcF93b3JrdHJlZShjZSkpIHsKKwkJaWYgKHZlcmlmeV9hYnNlbnRfc3BhcnNlKGNlLCAib3ZlcndyaXR0ZW4iLCBvKSkKKwkJCXJldHVybiAtMTsKKwkJY2UtPmNlX2ZsYWdzIHw9IENFX1VQREFURTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGNhbGxfdW5wYWNrX2ZuKHN0cnVjdCBjYWNoZV9lbnRyeSAqKnNyYywgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQogewogCWludCByZXQgPSBvLT5mbihzcmMsIG8pOwpAQCAtMTI2LDIzICsxOTgsMTQyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB1bnBhY2tfaW5kZXhfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQorc3RhdGljIHZvaWQgbWFya19jZV91c2VkKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKIHsKLQlzdHJ1Y3QgY2FjaGVfZW50cnkgKnNyY1s1XSA9IHsgY2UsIH07CisJY2UtPmNlX2ZsYWdzIHw9IENFX1VOUEFDS0VEOwogCi0Jby0+cG9zKys7CisJaWYgKG8tPmNhY2hlX2JvdHRvbSA8IG8tPnNyY19pbmRleC0+Y2FjaGVfbnIgJiYKKwkgICAgby0+c3JjX2luZGV4LT5jYWNoZVtvLT5jYWNoZV9ib3R0b21dID09IGNlKSB7CisJCWludCBib3R0b20gPSBvLT5jYWNoZV9ib3R0b207CisJCXdoaWxlIChib3R0b20gPCBvLT5zcmNfaW5kZXgtPmNhY2hlX25yICYmCisJCSAgICAgICBvLT5zcmNfaW5kZXgtPmNhY2hlW2JvdHRvbV0tPmNlX2ZsYWdzICYgQ0VfVU5QQUNLRUQpCisJCQlib3R0b20rKzsKKwkJby0+Y2FjaGVfYm90dG9tID0gYm90dG9tOworCX0KK30KKworc3RhdGljIHZvaWQgbWFya19hbGxfY2VfdW51c2VkKHN0cnVjdCBpbmRleF9zdGF0ZSAqaW5kZXgpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGluZGV4LT5jYWNoZV9ucjsgaSsrKQorCQlpbmRleC0+Y2FjaGVbaV0tPmNlX2ZsYWdzICY9IH5DRV9VTlBBQ0tFRDsKK30KKworc3RhdGljIGludCBsb2NhdGVfaW5fc3JjX2luZGV4KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgICAgICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCXN0cnVjdCBpbmRleF9zdGF0ZSAqaW5kZXggPSBvLT5zcmNfaW5kZXg7CisJaW50IGxlbiA9IGNlX25hbWVsZW4oY2UpOworCWludCBwb3MgPSBpbmRleF9uYW1lX3BvcyhpbmRleCwgY2UtPm5hbWUsIGxlbik7CisJaWYgKHBvcyA8IDApCisJCXBvcyA9IC0xIC0gcG9zOworCXJldHVybiBwb3M7Cit9CisKKy8qCisgKiBXZSBjYWxsIHVucGFja19pbmRleF9lbnRyeSgpIHdpdGggYW4gdW5tZXJnZWQgY2FjaGUgZW50cnkKKyAqIG9ubHkgaW4gZGlmZi1pbmRleCwgYW5kIGl0IHdhbnRzIGEgc2luZ2xlIGNhbGxiYWNrLiAgU2tpcAorICogdGhlIG90aGVyIHVubWVyZ2VkIGVudHJ5IHdpdGggdGhlIHNhbWUgbmFtZS4KKyAqLworc3RhdGljIHZvaWQgbWFya19jZV91c2VkX3NhbWVfbmFtZShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJCSAgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmluZGV4ID0gby0+c3JjX2luZGV4OworCWludCBsZW4gPSBjZV9uYW1lbGVuKGNlKTsKKwlpbnQgcG9zOworCisJZm9yIChwb3MgPSBsb2NhdGVfaW5fc3JjX2luZGV4KGNlLCBvKTsgcG9zIDwgaW5kZXgtPmNhY2hlX25yOyBwb3MrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKm5leHQgPSBpbmRleC0+Y2FjaGVbcG9zXTsKKwkJaWYgKGxlbiAhPSBjZV9uYW1lbGVuKG5leHQpIHx8CisJCSAgICBtZW1jbXAoY2UtPm5hbWUsIG5leHQtPm5hbWUsIGxlbikpCisJCQlicmVhazsKKwkJbWFya19jZV91c2VkKG5leHQsIG8pOworCX0KK30KKworc3RhdGljIHN0cnVjdCBjYWNoZV9lbnRyeSAqbmV4dF9jYWNoZV9lbnRyeShzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppbmRleCA9IG8tPnNyY19pbmRleDsKKwlpbnQgcG9zID0gby0+Y2FjaGVfYm90dG9tOworCisJd2hpbGUgKHBvcyA8IGluZGV4LT5jYWNoZV9ucikgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaW5kZXgtPmNhY2hlW3Bvc107CisJCWlmICghKGNlLT5jZV9mbGFncyAmIENFX1VOUEFDS0VEKSkKKwkJCXJldHVybiBjZTsKKwkJcG9zKys7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBhZGRfc2FtZV91bm1lcmdlZChzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJICAgICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCXN0cnVjdCBpbmRleF9zdGF0ZSAqaW5kZXggPSBvLT5zcmNfaW5kZXg7CisJaW50IGxlbiA9IGNlX25hbWVsZW4oY2UpOworCWludCBwb3MgPSBpbmRleF9uYW1lX3BvcyhpbmRleCwgY2UtPm5hbWUsIGxlbik7CisKKwlpZiAoMCA8PSBwb3MpCisJCWRpZSgicHJvZ3JhbW1pbmcgZXJyb3IgaW4gYSBjYWxsZXIgb2YgbWFya19jZV91c2VkX3NhbWVfbmFtZSIpOworCWZvciAocG9zID0gLXBvcyAtIDE7IHBvcyA8IGluZGV4LT5jYWNoZV9ucjsgcG9zKyspIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpuZXh0ID0gaW5kZXgtPmNhY2hlW3Bvc107CisJCWlmIChsZW4gIT0gY2VfbmFtZWxlbihuZXh0KSB8fAorCQkgICAgbWVtY21wKGNlLT5uYW1lLCBuZXh0LT5uYW1lLCBsZW4pKQorCQkJYnJlYWs7CisJCWFkZF9lbnRyeShvLCBuZXh0LCAwLCAwKTsKKwkJbWFya19jZV91c2VkKG5leHQsIG8pOworCX0KK30KKworc3RhdGljIGludCB1bnBhY2tfaW5kZXhfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCSAgICAgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKnNyY1s1XSA9IHsgY2UsIE5VTEwsIH07CisJaW50IHJldDsKKworCW1hcmtfY2VfdXNlZChjZSwgbyk7CiAJaWYgKGNlX3N0YWdlKGNlKSkgewogCQlpZiAoby0+c2tpcF91bm1lcmdlZCkgewogCQkJYWRkX2VudHJ5KG8sIGNlLCAwLCAwKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQotCXJldHVybiBjYWxsX3VucGFja19mbihzcmMsIG8pOworCXJldCA9IGNhbGxfdW5wYWNrX2ZuKHNyYywgbyk7CisJaWYgKGNlX3N0YWdlKGNlKSkKKwkJbWFya19jZV91c2VkX3NhbWVfbmFtZShjZSwgbyk7CisJcmV0dXJuIHJldDsKIH0KIAotaW50IHRyYXZlcnNlX3RyZWVzX3JlY3Vyc2l2ZShpbnQgbiwgdW5zaWduZWQgbG9uZyBkaXJtYXNrLCB1bnNpZ25lZCBsb25nIGRmX2NvbmZsaWN0cywgc3RydWN0IG5hbWVfZW50cnkgKm5hbWVzLCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbykKK3N0YXRpYyBpbnQgZmluZF9jYWNoZV9wb3Moc3RydWN0IHRyYXZlcnNlX2luZm8gKiwgY29uc3Qgc3RydWN0IG5hbWVfZW50cnkgKik7CisKK3N0YXRpYyB2b2lkIHJlc3RvcmVfY2FjaGVfYm90dG9tKHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLCBpbnQgYm90dG9tKQogewotCWludCBpOworCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbyA9IGluZm8tPmRhdGE7CisKKwlpZiAoby0+ZGlmZl9pbmRleF9jYWNoZWQpCisJCXJldHVybjsKKwlvLT5jYWNoZV9ib3R0b20gPSBib3R0b207Cit9CisKK3N0YXRpYyBpbnQgc3dpdGNoX2NhY2hlX2JvdHRvbShzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8gPSBpbmZvLT5kYXRhOworCWludCByZXQsIHBvczsKKworCWlmIChvLT5kaWZmX2luZGV4X2NhY2hlZCkKKwkJcmV0dXJuIDA7CisJcmV0ID0gby0+Y2FjaGVfYm90dG9tOworCXBvcyA9IGZpbmRfY2FjaGVfcG9zKGluZm8tPnByZXYsICZpbmZvLT5uYW1lKTsKKworCWlmIChwb3MgPCAtMSkKKwkJby0+Y2FjaGVfYm90dG9tID0gLTIgLSBwb3M7CisJZWxzZSBpZiAocG9zIDwgMCkKKwkJby0+Y2FjaGVfYm90dG9tID0gby0+c3JjX2luZGV4LT5jYWNoZV9ucjsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHRyYXZlcnNlX3RyZWVzX3JlY3Vyc2l2ZShpbnQgbiwgdW5zaWduZWQgbG9uZyBkaXJtYXNrLCB1bnNpZ25lZCBsb25nIGRmX2NvbmZsaWN0cywgc3RydWN0IG5hbWVfZW50cnkgKm5hbWVzLCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbykKK3sKKwlpbnQgaSwgcmV0LCBib3R0b207CiAJc3RydWN0IHRyZWVfZGVzYyB0W01BWF9VTlBBQ0tfVFJFRVNdOwogCXN0cnVjdCB0cmF2ZXJzZV9pbmZvIG5ld2luZm87CiAJc3RydWN0IG5hbWVfZW50cnkgKnA7CkBAIC0xNjMsNyArMzU0LDExIEBACiAJCQlzaGExID0gbmFtZXNbaV0uc2hhMTsKIAkJZmlsbF90cmVlX2Rlc2NyaXB0b3IodCtpLCBzaGExKTsKIAl9Ci0JcmV0dXJuIHRyYXZlcnNlX3RyZWVzKG4sIHQsICZuZXdpbmZvKTsKKworCWJvdHRvbSA9IHN3aXRjaF9jYWNoZV9ib3R0b20oJm5ld2luZm8pOworCXJldCA9IHRyYXZlcnNlX3RyZWVzKG4sIHQsICZuZXdpbmZvKTsKKwlyZXN0b3JlX2NhY2hlX2JvdHRvbSgmbmV3aW5mbywgYm90dG9tKTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKgpAQCAtMjEyLDYgKzQwNywyMCBAQAogCXJldHVybiBjZV9uYW1lbGVuKGNlKSA+IHRyYXZlcnNlX3BhdGhfbGVuKGluZm8sIG4pOwogfQogCitzdGF0aWMgaW50IGNlX2luX3RyYXZlcnNlX3BhdGgoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbykKK3sKKwlpZiAoIWluZm8tPnByZXYpCisJCXJldHVybiAxOworCWlmIChkb19jb21wYXJlX2VudHJ5KGNlLCBpbmZvLT5wcmV2LCAmaW5mby0+bmFtZSkpCisJCXJldHVybiAwOworCS8qCisJICogSWYgY2UgKGJsb2IpIGlzIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHBhdGggKHdoaWNoIGlzIGEgdHJlZQorCSAqIHdlIHdpbGwgYmUgZGVzY2VuZGluZyBpbnRvKSwgaXQgd29uJ3QgYmUgaW5zaWRlIGl0LgorCSAqLworCXJldHVybiAoaW5mby0+cGF0aGxlbiA8IGNlX25hbWVsZW4oY2UpKTsKK30KKwogc3RhdGljIHN0cnVjdCBjYWNoZV9lbnRyeSAqY3JlYXRlX2NlX2VudHJ5KGNvbnN0IHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgbmFtZV9lbnRyeSAqbiwgaW50IHN0YWdlKQogewogCWludCBsZW4gPSB0cmF2ZXJzZV9wYXRoX2xlbihpbmZvLCBuKTsKQEAgLTI3Nyw2ICs0ODYsMTI1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdW5wYWNrX2ZhaWxlZChzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8sIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJZGlzY2FyZF9pbmRleCgmby0+cmVzdWx0KTsKKwlpZiAoIW8tPmdlbnRseSkgeworCQlpZiAobWVzc2FnZSkKKwkJCXJldHVybiBlcnJvcigiJXMiLCBtZXNzYWdlKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gLTE7Cit9CisKKy8qIE5FRURTV09SSzogZ2l2ZSB0aGlzIGEgYmV0dGVyIG5hbWUgYW5kIHNoYXJlIHdpdGggdHJlZS13YWxrLmMgKi8KK3N0YXRpYyBpbnQgbmFtZV9jb21wYXJlKGNvbnN0IGNoYXIgKmEsIGludCBhX2xlbiwKKwkJCWNvbnN0IGNoYXIgKmIsIGludCBiX2xlbikKK3sKKwlpbnQgbGVuID0gKGFfbGVuIDwgYl9sZW4pID8gYV9sZW4gOiBiX2xlbjsKKwlpbnQgY21wID0gbWVtY21wKGEsIGIsIGxlbik7CisJaWYgKGNtcCkKKwkJcmV0dXJuIGNtcDsKKwlyZXR1cm4gKGFfbGVuIC0gYl9sZW4pOworfQorCisvKgorICogVGhlIHRyZWUgdHJhdmVyc2FsIGlzIGxvb2tpbmcgYXQgbmFtZSBwLiAgSWYgd2UgaGF2ZSBhIG1hdGNoaW5nIGVudHJ5LAorICogcmV0dXJuIGl0LiAgSWYgbmFtZSBwIGlzIGEgZGlyZWN0b3J5IGluIHRoZSBpbmRleCwgZG8gbm90IHJldHVybgorICogYW55dGhpbmcsIGFzIHdlIHdpbGwgd2FudCB0byBtYXRjaCBpdCB3aGVuIHRoZSB0cmF2ZXJzYWwgZGVzY2VuZHMgaW50bworICogdGhlIGRpcmVjdG9yeS4KKyAqLworc3RhdGljIGludCBmaW5kX2NhY2hlX3BvcyhzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbywKKwkJCSAgY29uc3Qgc3RydWN0IG5hbWVfZW50cnkgKnApCit7CisJaW50IHBvczsKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8gPSBpbmZvLT5kYXRhOworCXN0cnVjdCBpbmRleF9zdGF0ZSAqaW5kZXggPSBvLT5zcmNfaW5kZXg7CisJaW50IHBmeGxlbiA9IGluZm8tPnBhdGhsZW47CisJaW50IHBfbGVuID0gdHJlZV9lbnRyeV9sZW4ocC0+cGF0aCwgcC0+c2hhMSk7CisKKwlmb3IgKHBvcyA9IG8tPmNhY2hlX2JvdHRvbTsgcG9zIDwgaW5kZXgtPmNhY2hlX25yOyBwb3MrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaW5kZXgtPmNhY2hlW3Bvc107CisJCWNvbnN0IGNoYXIgKmNlX25hbWUsICpjZV9zbGFzaDsKKwkJaW50IGNtcCwgY2VfbGVuOworCisJCWlmICghY2VfaW5fdHJhdmVyc2VfcGF0aChjZSwgaW5mbykpCisJCQljb250aW51ZTsKKwkJaWYgKGNlLT5jZV9mbGFncyAmIENFX1VOUEFDS0VEKQorCQkJY29udGludWU7CisJCWNlX25hbWUgPSBjZS0+bmFtZSArIHBmeGxlbjsKKwkJY2Vfc2xhc2ggPSBzdHJjaHIoY2VfbmFtZSwgJy8nKTsKKwkJaWYgKGNlX3NsYXNoKQorCQkJY2VfbGVuID0gY2Vfc2xhc2ggLSBjZV9uYW1lOworCQllbHNlCisJCQljZV9sZW4gPSBjZV9uYW1lbGVuKGNlKSAtIHBmeGxlbjsKKwkJY21wID0gbmFtZV9jb21wYXJlKHAtPnBhdGgsIHBfbGVuLCBjZV9uYW1lLCBjZV9sZW4pOworCQkvKgorCQkgKiBFeGFjdCBtYXRjaDsgaWYgd2UgaGF2ZSBhIGRpcmVjdG9yeSB3ZSBuZWVkIHRvCisJCSAqIGRlbGF5IHJldHVybmluZyBpdC4KKwkJICovCisJCWlmICghY21wKQorCQkJcmV0dXJuIGNlX3NsYXNoID8gLTIgLSBwb3MgOiBwb3M7CisJCWlmICgwIDwgY21wKQorCQkJY29udGludWU7IC8qIGtlZXAgbG9va2luZyAqLworCQkvKgorCQkgKiBjZV9uYW1lIHNvcnRzIGFmdGVyIHAtPnBhdGg7IGNvdWxkIGl0IGJlIHRoYXQgd2UKKwkJICogaGF2ZSBmaWxlcyB1bmRlciBwLT5wYXRoIGRpcmVjdG9yeSBpbiB0aGUgaW5kZXg/CisJCSAqIEUuZy4gIGNlX25hbWUgPT0gInQtaSIsIGFuZCBwLT5wYXRoID09ICJ0Ijsgd2UgbWF5CisJCSAqIGhhdmUgInQvYSIgaW4gdGhlIGluZGV4LgorCQkgKi8KKwkJaWYgKHBfbGVuIDwgY2VfbGVuICYmICFtZW1jbXAoY2VfbmFtZSwgcC0+cGF0aCwgcF9sZW4pICYmCisJCSAgICBjZV9uYW1lW3BfbGVuXSA8ICcvJykKKwkJCWNvbnRpbnVlOyAvKiBrZWVwIGxvb2tpbmcgKi8KKwkJYnJlYWs7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIHN0cnVjdCBjYWNoZV9lbnRyeSAqZmluZF9jYWNoZV9lbnRyeShzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbywKKwkJCQkJICAgIGNvbnN0IHN0cnVjdCBuYW1lX2VudHJ5ICpwKQoreworCWludCBwb3MgPSBmaW5kX2NhY2hlX3BvcyhpbmZvLCBwKTsKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8gPSBpbmZvLT5kYXRhOworCisJaWYgKDAgPD0gcG9zKQorCQlyZXR1cm4gby0+c3JjX2luZGV4LT5jYWNoZVtwb3NdOworCWVsc2UKKwkJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGRlYnVnX3BhdGgoc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8pCit7CisJaWYgKGluZm8tPnByZXYpIHsKKwkJZGVidWdfcGF0aChpbmZvLT5wcmV2KTsKKwkJaWYgKCppbmZvLT5wcmV2LT5uYW1lLnBhdGgpCisJCQlwdXRjaGFyKCcvJyk7CisJfQorCXByaW50ZigiJXMiLCBpbmZvLT5uYW1lLnBhdGgpOworfQorCitzdGF0aWMgdm9pZCBkZWJ1Z19uYW1lX2VudHJ5KGludCBpLCBzdHJ1Y3QgbmFtZV9lbnRyeSAqbikKK3sKKwlwcmludGYoImVudCMlZCAlMDZvICVzXG4iLCBpLAorCSAgICAgICBuLT5wYXRoID8gbi0+bW9kZSA6IDAsCisJICAgICAgIG4tPnBhdGggPyBuLT5wYXRoIDogIihtaXNzaW5nKSIpOworfQorCitzdGF0aWMgdm9pZCBkZWJ1Z191bnBhY2tfY2FsbGJhY2soaW50IG4sCisJCQkJICB1bnNpZ25lZCBsb25nIG1hc2ssCisJCQkJICB1bnNpZ25lZCBsb25nIGRpcm1hc2ssCisJCQkJICBzdHJ1Y3QgbmFtZV9lbnRyeSAqbmFtZXMsCisJCQkJICBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbykKK3sKKwlpbnQgaTsKKwlwcmludGYoIiogdW5wYWNrIG1hc2sgJWx1LCBkaXJtYXNrICVsdSwgY250ICVkICIsCisJICAgICAgIG1hc2ssIGRpcm1hc2ssIG4pOworCWRlYnVnX3BhdGgoaW5mbyk7CisJcHV0Y2hhcignXG4nKTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQlkZWJ1Z19uYW1lX2VudHJ5KGksIG5hbWVzICsgaSk7Cit9CisKIHN0YXRpYyBpbnQgdW5wYWNrX2NhbGxiYWNrKGludCBuLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZGlybWFzaywgc3RydWN0IG5hbWVfZW50cnkgKm5hbWVzLCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgY2FjaGVfZW50cnkgKnNyY1tNQVhfVU5QQUNLX1RSRUVTICsgMV0gPSB7IE5VTEwsIH07CkBAIC0yODcsMjUgKzYxNSwzOCBAQAogCXdoaWxlICghcC0+bW9kZSkKIAkJcCsrOwogCisJaWYgKG8tPmRlYnVnX3VucGFjaykKKwkJZGVidWdfdW5wYWNrX2NhbGxiYWNrKG4sIG1hc2ssIGRpcm1hc2ssIG5hbWVzLCBpbmZvKTsKKwogCS8qIEFyZSB3ZSBzdXBwb3NlZCB0byBsb29rIGF0IHRoZSBpbmRleCB0b28/ICovCiAJaWYgKG8tPm1lcmdlKSB7Ci0JCXdoaWxlIChvLT5wb3MgPCBvLT5zcmNfaW5kZXgtPmNhY2hlX25yKSB7Ci0JCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gby0+c3JjX2luZGV4LT5jYWNoZVtvLT5wb3NdOwotCQkJaW50IGNtcCA9IGNvbXBhcmVfZW50cnkoY2UsIGluZm8sIHApOworCQl3aGlsZSAoMSkgeworCQkJaW50IGNtcDsKKwkJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisKKwkJCWlmIChvLT5kaWZmX2luZGV4X2NhY2hlZCkKKwkJCQljZSA9IG5leHRfY2FjaGVfZW50cnkobyk7CisJCQllbHNlCisJCQkJY2UgPSBmaW5kX2NhY2hlX2VudHJ5KGluZm8sIHApOworCisJCQlpZiAoIWNlKQorCQkJCWJyZWFrOworCQkJY21wID0gY29tcGFyZV9lbnRyeShjZSwgaW5mbywgcCk7CiAJCQlpZiAoY21wIDwgMCkgewogCQkJCWlmICh1bnBhY2tfaW5kZXhfZW50cnkoY2UsIG8pIDwgMCkKLQkJCQkJcmV0dXJuIC0xOworCQkJCQlyZXR1cm4gdW5wYWNrX2ZhaWxlZChvLCBOVUxMKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWlmICghY21wKSB7Ci0JCQkJby0+cG9zKys7CiAJCQkJaWYgKGNlX3N0YWdlKGNlKSkgewogCQkJCQkvKgotCQkJCQkgKiBJZiB3ZSBza2lwIHVubWVyZ2VkIGluZGV4IGVudHJpZXMsIHdlJ2xsIHNraXAgdGhpcwotCQkJCQkgKiBlbnRyeSAqYW5kKiB0aGUgdHJlZSBlbnRyaWVzIGFzc29jaWF0ZWQgd2l0aCBpdCEKKwkJCQkJICogSWYgd2Ugc2tpcCB1bm1lcmdlZCBpbmRleAorCQkJCQkgKiBlbnRyaWVzLCB3ZSdsbCBza2lwIHRoaXMKKwkJCQkJICogZW50cnkgKmFuZCogdGhlIHRyZWUKKwkJCQkJICogZW50cmllcyBhc3NvY2lhdGVkIHdpdGggaXQhCiAJCQkJCSAqLwogCQkJCQlpZiAoby0+c2tpcF91bm1lcmdlZCkgewotCQkJCQkJYWRkX2VudHJ5KG8sIGNlLCAwLCAwKTsKKwkJCQkJCWFkZF9zYW1lX3VubWVyZ2VkKGNlLCBvKTsKIAkJCQkJCXJldHVybiBtYXNrOwogCQkJCQl9CiAJCQkJfQpAQCAtMzE4LDYgKzY1OSwxMyBAQAogCWlmICh1bnBhY2tfbm9uZGlyZWN0b3JpZXMobiwgbWFzaywgZGlybWFzaywgc3JjLCBuYW1lcywgaW5mbykgPCAwKQogCQlyZXR1cm4gLTE7CiAKKwlpZiAoc3JjWzBdKSB7CisJCWlmIChjZV9zdGFnZShzcmNbMF0pKQorCQkJbWFya19jZV91c2VkX3NhbWVfbmFtZShzcmNbMF0sIG8pOworCQllbHNlCisJCQltYXJrX2NlX3VzZWQoc3JjWzBdLCBvKTsKKwl9CisKIAkvKiBOb3cgaGFuZGxlIGFueSBkaXJlY3Rvcmllcy4uICovCiAJaWYgKGRpcm1hc2spIHsKIAkJdW5zaWduZWQgbG9uZyBjb25mbGljdHMgPSBtYXNrICYgfmRpcm1hc2s7CkBAIC0zMjYsNiArNjc0LDI1IEBACiAJCQlpZiAoc3JjWzBdKQogCQkJCWNvbmZsaWN0cyB8PSAxOwogCQl9CisKKwkJLyogc3BlY2lhbCBjYXNlOiAiZGlmZi1pbmRleCAtLWNhY2hlZCIgbG9va2luZyBhdCBhIHRyZWUgKi8KKwkJaWYgKG8tPmRpZmZfaW5kZXhfY2FjaGVkICYmCisJCSAgICBuID09IDEgJiYgZGlybWFzayA9PSAxICYmIFNfSVNESVIobmFtZXMtPm1vZGUpKSB7CisJCQlpbnQgbWF0Y2hlczsKKwkJCW1hdGNoZXMgPSBjYWNoZV90cmVlX21hdGNoZXNfdHJhdmVyc2FsKG8tPnNyY19pbmRleC0+Y2FjaGVfdHJlZSwKKwkJCQkJCQkgICAgICAgbmFtZXMsIGluZm8pOworCQkJLyoKKwkJCSAqIEV2ZXJ5dGhpbmcgdW5kZXIgdGhlIG5hbWUgbWF0Y2hlczsgc2tpcCB0aGUKKwkJCSAqIGVudGlyZSBoaWVyYXJjaHkuICBkaWZmX2luZGV4X2NhY2hlZCBjb2RlcGF0aAorCQkJICogc3BlY2lhbCBjYXNlcyBEL0YgY29uZmxpY3RzIGluIHN1Y2ggYSB3YXkgdGhhdAorCQkJICogaXQgZG9lcyBub3QgZG8gYW55IGxvb2stYWhlYWQsIHNvIHRoaXMgaXMgc2FmZS4KKwkJCSAqLworCQkJaWYgKG1hdGNoZXMpIHsKKwkJCQlvLT5jYWNoZV9ib3R0b20gKz0gbWF0Y2hlczsKKwkJCQlyZXR1cm4gbWFzazsKKwkJCX0KKwkJfQorCiAJCWlmICh0cmF2ZXJzZV90cmVlc19yZWN1cnNpdmUobiwgZGlybWFzaywgY29uZmxpY3RzLAogCQkJCQkgICAgIG5hbWVzLCBpbmZvKSA8IDApCiAJCQlyZXR1cm4gLTE7CkBAIC0zMzUsMjUgKzcwMiwxNSBAQAogCXJldHVybiBtYXNrOwogfQogCi1zdGF0aWMgaW50IHVucGFja19mYWlsZWQoc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvLCBjb25zdCBjaGFyICptZXNzYWdlKQotewotCWRpc2NhcmRfaW5kZXgoJm8tPnJlc3VsdCk7Ci0JaWYgKCFvLT5nZW50bHkpIHsKLQkJaWYgKG1lc3NhZ2UpCi0JCQlyZXR1cm4gZXJyb3IoIiVzIiwgbWVzc2FnZSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0JcmV0dXJuIC0xOwotfQotCiAvKgogICogTi13YXkgbWVyZ2UgImxlbiIgdHJlZXMuICBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZSB0byBtYW5pcHVsYXRlIHRoZQogICogcmVzdWx0aW5nIGluZGV4LCAtMiBvbiBmYWlsdXJlIHRvIHJlZmxlY3QgdGhlIGNoYW5nZXMgdG8gdGhlIHdvcmsgdHJlZS4KICAqLwogaW50IHVucGFja190cmVlcyh1bnNpZ25lZCBsZW4sIHN0cnVjdCB0cmVlX2Rlc2MgKnQsIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKIHsKLQlpbnQgcmV0OworCWludCBpLCByZXQ7CiAJc3RhdGljIHN0cnVjdCBjYWNoZV9lbnRyeSAqZGZjOworCXN0cnVjdCBleGNsdWRlX2xpc3QgZWw7CiAKIAlpZiAobGVuID4gTUFYX1VOUEFDS19UUkVFUykKIAkJZGllKCJ1bnBhY2tfdHJlZXMgdGFrZXMgYXQgbW9zdCAlZCB0cmVlcyIsIE1BWF9VTlBBQ0tfVFJFRVMpOwpAQCAtMzYzLDEzICs3MjAsMjIgQEAKIAlzdGF0ZS5xdWlldCA9IDE7CiAJc3RhdGUucmVmcmVzaF9jYWNoZSA9IDE7CiAKKwltZW1zZXQoJmVsLCAwLCBzaXplb2YoZWwpKTsKKwlpZiAoIWNvcmVfYXBwbHlfc3BhcnNlX2NoZWNrb3V0IHx8ICFvLT51cGRhdGUpCisJCW8tPnNraXBfc3BhcnNlX2NoZWNrb3V0ID0gMTsKKwlpZiAoIW8tPnNraXBfc3BhcnNlX2NoZWNrb3V0KSB7CisJCWlmIChhZGRfZXhjbHVkZXNfZnJvbV9maWxlX3RvX2xpc3QoZ2l0X3BhdGgoImluZm8vc3BhcnNlLWNoZWNrb3V0IiksICIiLCAwLCBOVUxMLCAmZWwsIDApIDwgMCkKKwkJCW8tPnNraXBfc3BhcnNlX2NoZWNrb3V0ID0gMTsKKwkJZWxzZQorCQkJby0+ZWwgPSAmZWw7CisJfQorCiAJbWVtc2V0KCZvLT5yZXN1bHQsIDAsIHNpemVvZihvLT5yZXN1bHQpKTsKIAlvLT5yZXN1bHQuaW5pdGlhbGl6ZWQgPSAxOwotCWlmIChvLT5zcmNfaW5kZXgpIHsKLQkJby0+cmVzdWx0LnRpbWVzdGFtcC5zZWMgPSBvLT5zcmNfaW5kZXgtPnRpbWVzdGFtcC5zZWM7Ci0JCW8tPnJlc3VsdC50aW1lc3RhbXAubnNlYyA9IG8tPnNyY19pbmRleC0+dGltZXN0YW1wLm5zZWM7Ci0JfQorCW8tPnJlc3VsdC50aW1lc3RhbXAuc2VjID0gby0+c3JjX2luZGV4LT50aW1lc3RhbXAuc2VjOworCW8tPnJlc3VsdC50aW1lc3RhbXAubnNlYyA9IG8tPnNyY19pbmRleC0+dGltZXN0YW1wLm5zZWM7CiAJby0+bWVyZ2Vfc2l6ZSA9IGxlbjsKKwltYXJrX2FsbF9jZV91bnVzZWQoby0+c3JjX2luZGV4KTsKIAogCWlmICghZGZjKQogCQlkZmMgPSB4Y2FsbG9jKDEsIGNhY2hlX2VudHJ5X3NpemUoMCkpOwpAQCAtMzgzLDI3ICs3NDksODcgQEAKIAkJaW5mby5mbiA9IHVucGFja19jYWxsYmFjazsKIAkJaW5mby5kYXRhID0gbzsKIAorCQlpZiAoby0+cHJlZml4KSB7CisJCQkvKgorCQkJICogVW5wYWNrIGV4aXN0aW5nIGluZGV4IGVudHJpZXMgdGhhdCBzb3J0IGJlZm9yZSB0aGUKKwkJCSAqIHByZWZpeCB0aGUgdHJlZSBpcyBzcGxpY2VkIGludG8uICBOb3RlIHRoYXQgby0+bWVyZ2UKKwkJCSAqIGlzIGFsd2F5cyB0cnVlIGluIHRoaXMgY2FzZS4KKwkJCSAqLworCQkJd2hpbGUgKDEpIHsKKwkJCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gbmV4dF9jYWNoZV9lbnRyeShvKTsKKwkJCQlpZiAoIWNlKQorCQkJCQlicmVhazsKKwkJCQlpZiAoY2VfaW5fdHJhdmVyc2VfcGF0aChjZSwgJmluZm8pKQorCQkJCQlicmVhazsKKwkJCQlpZiAodW5wYWNrX2luZGV4X2VudHJ5KGNlLCBvKSA8IDApCisJCQkJCWdvdG8gcmV0dXJuX2ZhaWxlZDsKKwkJCX0KKwkJfQorCiAJCWlmICh0cmF2ZXJzZV90cmVlcyhsZW4sIHQsICZpbmZvKSA8IDApCi0JCQlyZXR1cm4gdW5wYWNrX2ZhaWxlZChvLCBOVUxMKTsKKwkJCWdvdG8gcmV0dXJuX2ZhaWxlZDsKIAl9CiAKIAkvKiBBbnkgbGVmdC1vdmVyIGVudHJpZXMgaW4gdGhlIGluZGV4PyAqLwogCWlmIChvLT5tZXJnZSkgewotCQl3aGlsZSAoby0+cG9zIDwgby0+c3JjX2luZGV4LT5jYWNoZV9ucikgewotCQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IG8tPnNyY19pbmRleC0+Y2FjaGVbby0+cG9zXTsKKwkJd2hpbGUgKDEpIHsKKwkJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBuZXh0X2NhY2hlX2VudHJ5KG8pOworCQkJaWYgKCFjZSkKKwkJCQlicmVhazsKIAkJCWlmICh1bnBhY2tfaW5kZXhfZW50cnkoY2UsIG8pIDwgMCkKLQkJCQlyZXR1cm4gdW5wYWNrX2ZhaWxlZChvLCBOVUxMKTsKKwkJCQlnb3RvIHJldHVybl9mYWlsZWQ7CiAJCX0KIAl9CisJbWFya19hbGxfY2VfdW51c2VkKG8tPnNyY19pbmRleCk7CiAKLQlpZiAoby0+dHJpdmlhbF9tZXJnZXNfb25seSAmJiBvLT5ub250cml2aWFsX21lcmdlKQotCQlyZXR1cm4gdW5wYWNrX2ZhaWxlZChvLCAiTWVyZ2UgcmVxdWlyZXMgZmlsZS1sZXZlbCBtZXJnaW5nIik7CisJaWYgKG8tPnRyaXZpYWxfbWVyZ2VzX29ubHkgJiYgby0+bm9udHJpdmlhbF9tZXJnZSkgeworCQlyZXQgPSB1bnBhY2tfZmFpbGVkKG8sICJNZXJnZSByZXF1aXJlcyBmaWxlLWxldmVsIG1lcmdpbmciKTsKKwkJZ290byBkb25lOworCX0KKworCWlmICghby0+c2tpcF9zcGFyc2VfY2hlY2tvdXQpIHsKKwkJaW50IGVtcHR5X3dvcmt0cmVlID0gMTsKKwkJZm9yIChpID0gMDtpIDwgby0+cmVzdWx0LmNhY2hlX25yO2krKykgeworCQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IG8tPnJlc3VsdC5jYWNoZVtpXTsKKworCQkJaWYgKGFwcGx5X3NwYXJzZV9jaGVja291dChjZSwgbykpIHsKKwkJCQlyZXQgPSAtMTsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCQkvKgorCQkJICogTWVyZ2Ugc3RyYXRlZ2llcyBtYXkgc2V0IENFX1VQREFURXxDRV9SRU1PVkUgb3V0c2lkZSBjaGVja291dAorCQkJICogYXJlYSBhcyBhIHJlc3VsdCBvZiBjZV9za2lwX3dvcmt0cmVlKCkgc2hvcnRjdXRzIGluCisJCQkgKiB2ZXJpZnlfYWJzZW50KCkgYW5kIHZlcmlmeV91cHRvZGF0ZSgpLiBDbGVhciB0aGVtLgorCQkJICovCisJCQlpZiAoY2Vfc2tpcF93b3JrdHJlZShjZSkpCisJCQkJY2UtPmNlX2ZsYWdzICY9IH4oQ0VfVVBEQVRFIHwgQ0VfUkVNT1ZFKTsKKwkJCWVsc2UKKwkJCQllbXB0eV93b3JrdHJlZSA9IDA7CisKKwkJfQorCQlpZiAoby0+cmVzdWx0LmNhY2hlX25yICYmIGVtcHR5X3dvcmt0cmVlKSB7CisJCQlyZXQgPSB1bnBhY2tfZmFpbGVkKG8sICJTcGFyc2UgY2hlY2tvdXQgbGVhdmVzIG5vIGVudHJ5IG9uIHdvcmtpbmcgZGlyZWN0b3J5Iik7CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CiAKIAlvLT5zcmNfaW5kZXggPSBOVUxMOwogCXJldCA9IGNoZWNrX3VwZGF0ZXMobykgPyAoLTIpIDogMDsKIAlpZiAoby0+ZHN0X2luZGV4KQogCQkqby0+ZHN0X2luZGV4ID0gby0+cmVzdWx0OworCitkb25lOgorCWZvciAoaSA9IDA7aSA8IGVsLm5yO2krKykKKwkJZnJlZShlbC5leGNsdWRlc1tpXSk7CisJaWYgKGVsLmV4Y2x1ZGVzKQorCQlmcmVlKGVsLmV4Y2x1ZGVzKTsKKwogCXJldHVybiByZXQ7CisKK3JldHVybl9mYWlsZWQ6CisJbWFya19hbGxfY2VfdW51c2VkKG8tPnNyY19pbmRleCk7CisJcmV0ID0gdW5wYWNrX2ZhaWxlZChvLCBOVUxMKTsKKwlnb3RvIGRvbmU7CiB9CiAKIC8qIEhlcmUgY29tZSB0aGUgbWVyZ2UgZnVuY3Rpb25zICovCkBAIC00MTksNiArODQ1LDggQEAKIAkJcmV0dXJuIDA7CiAJaWYgKCFhICYmICFiKQogCQlyZXR1cm4gMTsKKwlpZiAoKGEtPmNlX2ZsYWdzIHwgYi0+Y2VfZmxhZ3MpICYgQ0VfQ09ORkxJQ1RFRCkKKwkJcmV0dXJuIDA7CiAJcmV0dXJuIGEtPmNlX21vZGUgPT0gYi0+Y2VfbW9kZSAmJgogCSAgICAgICAhaGFzaGNtcChhLT5zaGExLCBiLT5zaGExKTsKIH0KQEAgLTQyOCwxNiArODU2LDE3IEBACiAgKiBXaGVuIGEgQ0UgZ2V0cyB0dXJuZWQgaW50byBhbiB1bm1lcmdlZCBlbnRyeSwgd2UKICAqIHdhbnQgaXQgdG8gYmUgdXAtdG8tZGF0ZQogICovCi1zdGF0aWMgaW50IHZlcmlmeV91cHRvZGF0ZShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAotCQlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCitzdGF0aWMgaW50IHZlcmlmeV91cHRvZGF0ZV8xKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvLAorCQkJCSAgIGNvbnN0IGNoYXIgKmVycm9yX21zZykKIHsKIAlzdHJ1Y3Qgc3RhdCBzdDsKIAotCWlmIChvLT5pbmRleF9vbmx5IHx8IG8tPnJlc2V0IHx8IGNlX3VwdG9kYXRlKGNlKSkKKwlpZiAoby0+aW5kZXhfb25seSB8fCAoIWNlX3NraXBfd29ya3RyZWUoY2UpICYmIChvLT5yZXNldCB8fCBjZV91cHRvZGF0ZShjZSkpKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIWxzdGF0KGNlLT5uYW1lLCAmc3QpKSB7Ci0JCXVuc2lnbmVkIGNoYW5nZWQgPSBpZV9tYXRjaF9zdGF0KG8tPnNyY19pbmRleCwgY2UsICZzdCwgQ0VfTUFUQ0hfSUdOT1JFX1ZBTElEKTsKKwkJdW5zaWduZWQgY2hhbmdlZCA9IGllX21hdGNoX3N0YXQoby0+c3JjX2luZGV4LCBjZSwgJnN0LCBDRV9NQVRDSF9JR05PUkVfVkFMSUR8Q0VfTUFUQ0hfSUdOT1JFX1NLSVBfV09SS1RSRUUpOwogCQlpZiAoIWNoYW5nZWQpCiAJCQlyZXR1cm4gMDsKIAkJLyoKQEAgLTQ1NCw3ICs4ODMsMjEgQEAKIAlpZiAoZXJybm8gPT0gRU5PRU5UKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gby0+Z2VudGx5ID8gLTEgOgotCQllcnJvcihFUlJPUk1TRyhvLCBub3RfdXB0b2RhdGVfZmlsZSksIGNlLT5uYW1lKTsKKwkJZXJyb3IoZXJyb3JfbXNnLCBjZS0+bmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgdmVyaWZ5X3VwdG9kYXRlKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJaWYgKCFvLT5za2lwX3NwYXJzZV9jaGVja291dCAmJiB3aWxsX2hhdmVfc2tpcF93b3JrdHJlZShjZSwgbykpCisJCXJldHVybiAwOworCXJldHVybiB2ZXJpZnlfdXB0b2RhdGVfMShjZSwgbywgRVJST1JNU0cobywgbm90X3VwdG9kYXRlX2ZpbGUpKTsKK30KKworc3RhdGljIGludCB2ZXJpZnlfdXB0b2RhdGVfc3BhcnNlKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJcmV0dXJuIHZlcmlmeV91cHRvZGF0ZV8xKGNlLCBvLCBFUlJPUk1TRyhvLCBzcGFyc2Vfbm90X3VwdG9kYXRlX2ZpbGUpKTsKIH0KIAogc3RhdGljIHZvaWQgaW52YWxpZGF0ZV9jZV9wYXRoKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKQEAgLTUwNSw3ICs5NDgsOSBAQAogCSAqIGluIHRoYXQgZGlyZWN0b3J5LgogCSAqLwogCW5hbWVsZW4gPSBzdHJsZW4oY2UtPm5hbWUpOwotCWZvciAoaSA9IG8tPnBvczsgaSA8IG8tPnNyY19pbmRleC0+Y2FjaGVfbnI7IGkrKykgeworCWZvciAoaSA9IGxvY2F0ZV9pbl9zcmNfaW5kZXgoY2UsIG8pOworCSAgICAgaSA8IG8tPnNyY19pbmRleC0+Y2FjaGVfbnI7CisJICAgICBpKyspIHsKIAkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTIgPSBvLT5zcmNfaW5kZXgtPmNhY2hlW2ldOwogCQlpbnQgbGVuID0gY2VfbmFtZWxlbihjZTIpOwogCQlpZiAobGVuIDwgbmFtZWxlbiB8fApAQCAtNTEzLDEyICs5NTgsMTQgQEAKIAkJICAgIGNlMi0+bmFtZVtuYW1lbGVuXSAhPSAnLycpCiAJCQlicmVhazsKIAkJLyoKLQkJICogY2UyLT5uYW1lIGlzIGFuIGVudHJ5IGluIHRoZSBzdWJkaXJlY3RvcnkuCisJCSAqIGNlMi0+bmFtZSBpcyBhbiBlbnRyeSBpbiB0aGUgc3ViZGlyZWN0b3J5IHRvIGJlCisJCSAqIHJlbW92ZWQuCiAJCSAqLwogCQlpZiAoIWNlX3N0YWdlKGNlMikpIHsKIAkJCWlmICh2ZXJpZnlfdXB0b2RhdGUoY2UyLCBvKSkKIAkJCQlyZXR1cm4gLTE7CiAJCQlhZGRfZW50cnkobywgY2UyLCBDRV9SRU1PVkUsIDApOworCQkJbWFya19jZV91c2VkKGNlMiwgbyk7CiAJCX0KIAkJY250Kys7CiAJfQpAQCAtNTM0LDcgKzk4MSw3IEBACiAJbWVtc2V0KCZkLCAwLCBzaXplb2YoZCkpOwogCWlmIChvLT5kaXIpCiAJCWQuZXhjbHVkZV9wZXJfZGlyID0gby0+ZGlyLT5leGNsdWRlX3Blcl9kaXI7Ci0JaSA9IHJlYWRfZGlyZWN0b3J5KCZkLCBjZS0+bmFtZSwgcGF0aGJ1ZiwgbmFtZWxlbisxLCBOVUxMKTsKKwlpID0gcmVhZF9kaXJlY3RvcnkoJmQsIHBhdGhidWYsIG5hbWVsZW4rMSwgTlVMTCk7CiAJaWYgKGkpCiAJCXJldHVybiBvLT5nZW50bHkgPyAtMSA6CiAJCQllcnJvcihFUlJPUk1TRyhvLCBub3RfdXB0b2RhdGVfZGlyKSwgY2UtPm5hbWUpOwpAQCAtNTU1LDE1ICsxMDAyLDE2IEBACiAJc3RydWN0IGNhY2hlX2VudHJ5ICpzcmM7CiAKIAlzcmMgPSBpbmRleF9uYW1lX2V4aXN0cyhvLT5zcmNfaW5kZXgsIGRzdC0+bmFtZSwgY2VfbmFtZWxlbihkc3QpLCAxKTsKLQlyZXR1cm4gc3JjICYmICFpZV9tYXRjaF9zdGF0KG8tPnNyY19pbmRleCwgc3JjLCBzdCwgQ0VfTUFUQ0hfSUdOT1JFX1ZBTElEKTsKKwlyZXR1cm4gc3JjICYmICFpZV9tYXRjaF9zdGF0KG8tPnNyY19pbmRleCwgc3JjLCBzdCwgQ0VfTUFUQ0hfSUdOT1JFX1ZBTElEfENFX01BVENIX0lHTk9SRV9TS0lQX1dPUktUUkVFKTsKIH0KIAogLyoKICAqIFdlIGRvIG5vdCB3YW50IHRvIHJlbW92ZSBvciBvdmVyd3JpdGUgYSB3b3JraW5nIHRyZWUgZmlsZSB0aGF0CiAgKiBpcyBub3QgdHJhY2tlZCwgdW5sZXNzIGl0IGlzIGlnbm9yZWQuCiAgKi8KLXN0YXRpYyBpbnQgdmVyaWZ5X2Fic2VudChzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBjb25zdCBjaGFyICphY3Rpb24sCi0JCQkgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQorc3RhdGljIGludCB2ZXJpZnlfYWJzZW50XzEoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgY29uc3QgY2hhciAqYWN0aW9uLAorCQkJCSBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8sCisJCQkJIGNvbnN0IGNoYXIgKmVycm9yX21zZykKIHsKIAlzdHJ1Y3Qgc3RhdCBzdDsKIApAQCAtNTc0LDcgKzEwMjIsNiBAQAogCQlyZXR1cm4gMDsKIAogCWlmICghbHN0YXQoY2UtPm5hbWUsICZzdCkpIHsKLQkJaW50IHJldDsKIAkJaW50IGR0eXBlID0gY2VfdG9fZHR5cGUoY2UpOwogCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKnJlc3VsdDsKIApAQCAtNjAwLDMwICsxMDQ3LDEwIEBACiAJCQkgKiBmb3VuZCAiZm9vLy4iIGluIHRoZSB3b3JraW5nIHRyZWUuCiAJCQkgKiBUaGlzIGlzIHRyaWNreSAtLSBpZiB3ZSBoYXZlIG1vZGlmaWVkCiAJCQkgKiBmaWxlcyB0aGF0IGFyZSBpbiAiZm9vLyIgd2Ugd291bGQgbG9zZQotCQkJICogaXQuCisJCQkgKiB0aGVtLgogCQkJICovCi0JCQlyZXQgPSB2ZXJpZnlfY2xlYW5fc3ViZGlyZWN0b3J5KGNlLCBhY3Rpb24sIG8pOwotCQkJaWYgKHJldCA8IDApCi0JCQkJcmV0dXJuIHJldDsKLQotCQkJLyoKLQkJCSAqIElmIHRoaXMgcmVtb3ZlZCBlbnRyaWVzIGZyb20gdGhlIGluZGV4LAotCQkJICogd2hhdCB0aGF0IG1lYW5zIGlzOgotCQkJICoKLQkJCSAqICgxKSB0aGUgY2FsbGVyIHVucGFja19jYWxsYmFjaygpIHNhdyBwYXRoL2ZvbwotCQkJICogaW4gdGhlIGluZGV4LCBhbmQgaXQgaGFzIG5vdCByZW1vdmVkIGl0IGJlY2F1c2UKLQkJCSAqIGl0IHRoaW5rcyBpdCBpcyBoYW5kbGluZyAncGF0aCcgYXMgYmxvYiB3aXRoCi0JCQkgKiBEL0YgY29uZmxpY3Q7Ci0JCQkgKiAoMikgd2Ugd2lsbCByZXR1cm4gIm9rLCB3ZSBwbGFjZWQgYSBtZXJnZWQgZW50cnkKLQkJCSAqIGluIHRoZSBpbmRleCIgd2hpY2ggd291bGQgY2F1c2Ugby0+cG9zIHRvIGJlCi0JCQkgKiBpbmNyZW1lbnRlZCBieSBvbmU7Ci0JCQkgKiAoMykgaG93ZXZlciwgb3JpZ2luYWwgby0+cG9zIG5vdyBoYXMgJ3BhdGgvZm9vJwotCQkJICogbWFya2VkIHdpdGggInRvIGJlIHJlbW92ZWQiLgotCQkJICoKLQkJCSAqIFdlIG5lZWQgdG8gaW5jcmVtZW50IGl0IGJ5IHRoZSBudW1iZXIgb2YKLQkJCSAqIGRlbGV0ZWQgZW50cmllcyBoZXJlLgotCQkJICovCi0JCQlvLT5wb3MgKz0gcmV0OworCQkJaWYgKHZlcmlmeV9jbGVhbl9zdWJkaXJlY3RvcnkoY2UsIGFjdGlvbiwgbykgPCAwKQorCQkJCXJldHVybiAtMTsKIAkJCXJldHVybiAwOwogCQl9CiAKQEAgLTY0MywxMyArMTA3MCwzMCBAQAogCX0KIAlyZXR1cm4gMDsKIH0KK3N0YXRpYyBpbnQgdmVyaWZ5X2Fic2VudChzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBjb25zdCBjaGFyICphY3Rpb24sCisJCQkgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCWlmICghby0+c2tpcF9zcGFyc2VfY2hlY2tvdXQgJiYgd2lsbF9oYXZlX3NraXBfd29ya3RyZWUoY2UsIG8pKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gdmVyaWZ5X2Fic2VudF8xKGNlLCBhY3Rpb24sIG8sIEVSUk9STVNHKG8sIHdvdWxkX2xvc2VfdW50cmFja2VkKSk7Cit9CisKK3N0YXRpYyBpbnQgdmVyaWZ5X2Fic2VudF9zcGFyc2Uoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgY29uc3QgY2hhciAqYWN0aW9uLAorCQkJIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwlyZXR1cm4gdmVyaWZ5X2Fic2VudF8xKGNlLCBhY3Rpb24sIG8sIEVSUk9STVNHKG8sIHdvdWxkX2xvc2Vfb3JwaGFuZWQpKTsKK30KIAogc3RhdGljIGludCBtZXJnZWRfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICptZXJnZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpvbGQsCiAJCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKIHsKIAlpbnQgdXBkYXRlID0gQ0VfVVBEQVRFOwogCi0JaWYgKG9sZCkgeworCWlmICghb2xkKSB7CisJCWlmICh2ZXJpZnlfYWJzZW50KG1lcmdlLCAib3ZlcndyaXR0ZW4iLCBvKSkKKwkJCXJldHVybiAtMTsKKwkJaW52YWxpZGF0ZV9jZV9wYXRoKG1lcmdlLCBvKTsKKwl9IGVsc2UgaWYgKCEob2xkLT5jZV9mbGFncyAmIENFX0NPTkZMSUNURUQpKSB7CiAJCS8qCiAJCSAqIFNlZSBpZiB3ZSBjYW4gcmUtdXNlIHRoZSBvbGQgQ0UgZGlyZWN0bHk/CiAJCSAqIFRoYXQgd2F5IHdlIGdldCB0aGUgdXB0b2RhdGUgc3RhdCBpbmZvLgpAQCAtNjYzLDEzICsxMTA3LDE2IEBACiAJCX0gZWxzZSB7CiAJCQlpZiAodmVyaWZ5X3VwdG9kYXRlKG9sZCwgbykpCiAJCQkJcmV0dXJuIC0xOworCQkJaWYgKGNlX3NraXBfd29ya3RyZWUob2xkKSkKKwkJCQl1cGRhdGUgfD0gQ0VfU0tJUF9XT1JLVFJFRTsKIAkJCWludmFsaWRhdGVfY2VfcGF0aChvbGQsIG8pOwogCQl9Ci0JfQotCWVsc2UgewotCQlpZiAodmVyaWZ5X2Fic2VudChtZXJnZSwgIm92ZXJ3cml0dGVuIiwgbykpCi0JCQlyZXR1cm4gLTE7Ci0JCWludmFsaWRhdGVfY2VfcGF0aChtZXJnZSwgbyk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogUHJldmlvdXNseSB1bm1lcmdlZCBlbnRyeSBsZWZ0IGFzIGFuIGV4aXN0ZW5jZQorCQkgKiBtYXJrZXIgYnkgcmVhZF9pbmRleF91bm1lcmdlZCgpOworCQkgKi8KKwkJaW52YWxpZGF0ZV9jZV9wYXRoKG9sZCwgbyk7CiAJfQogCiAJYWRkX2VudHJ5KG8sIG1lcmdlLCB1cGRhdGUsIENFX1NUQUdFTUFTSyk7CkBAIC02ODUsNyArMTEzMiw3IEBACiAJCQlyZXR1cm4gLTE7CiAJCXJldHVybiAwOwogCX0KLQlpZiAodmVyaWZ5X3VwdG9kYXRlKG9sZCwgbykpCisJaWYgKCEob2xkLT5jZV9mbGFncyAmIENFX0NPTkZMSUNURUQpICYmIHZlcmlmeV91cHRvZGF0ZShvbGQsIG8pKQogCQlyZXR1cm4gLTE7CiAJYWRkX2VudHJ5KG8sIGNlLCBDRV9SRU1PVkUsIDApOwogCWludmFsaWRhdGVfY2VfcGF0aChjZSwgbyk7CkBAIC03NTAsNyArMTE5Nyw4IEBACiAJCXJlbW90ZSA9IE5VTEw7CiAJfQogCi0JLyogRmlyc3QsIGlmIHRoZXJlJ3MgYSAjMTYgc2l0dWF0aW9uLCBub3RlIHRoYXQgdG8gcHJldmVudCAjMTMKKwkvKgorCSAqIEZpcnN0LCBpZiB0aGVyZSdzIGEgIzE2IHNpdHVhdGlvbiwgbm90ZSB0aGF0IHRvIHByZXZlbnQgIzEzCiAJICogYW5kICMxNC4KIAkgKi8KIAlpZiAoIXNhbWUocmVtb3RlLCBoZWFkKSkgewpAQCAtNzY0LDcgKzEyMTIsOCBAQAogCQl9CiAJfQogCi0JLyogV2Ugc3RhcnQgd2l0aCBjYXNlcyB3aGVyZSB0aGUgaW5kZXggaXMgYWxsb3dlZCB0byBtYXRjaAorCS8qCisJICogV2Ugc3RhcnQgd2l0aCBjYXNlcyB3aGVyZSB0aGUgaW5kZXggaXMgYWxsb3dlZCB0byBtYXRjaAogCSAqIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBoZWFkOiAjMTQoQUxUKSBhbmQgIzJBTFQsIHdoZXJlIGl0CiAJICogaXMgcGVybWl0dGVkIHRvIG1hdGNoIHRoZSByZXN1bHQgaW5zdGVhZC4KIAkgKi8KQEAgLTc5NCwxMiArMTI0MywxMyBAQAogCWlmICghaGVhZCAmJiAhcmVtb3RlICYmIGFueV9hbmNfbWlzc2luZykKIAkJcmV0dXJuIDA7CiAKLQkvKiBVbmRlciB0aGUgbmV3ICJhZ2dyZXNzaXZlIiBydWxlLCB3ZSByZXNvbHZlIG1vc3RseSB0cml2aWFsCisJLyoKKwkgKiBVbmRlciB0aGUgImFnZ3Jlc3NpdmUiIHJ1bGUsIHdlIHJlc29sdmUgbW9zdGx5IHRyaXZpYWwKIAkgKiBjYXNlcyB0aGF0IHdlIGhpc3RvcmljYWxseSBoYWQgZ2l0LW1lcmdlLW9uZS1maWxlIHJlc29sdmUuCiAJICovCiAJaWYgKG8tPmFnZ3Jlc3NpdmUpIHsKLQkJaW50IGhlYWRfZGVsZXRlZCA9ICFoZWFkICYmICFkZl9jb25mbGljdF9oZWFkOwotCQlpbnQgcmVtb3RlX2RlbGV0ZWQgPSAhcmVtb3RlICYmICFkZl9jb25mbGljdF9yZW1vdGU7CisJCWludCBoZWFkX2RlbGV0ZWQgPSAhaGVhZDsKKwkJaW50IHJlbW90ZV9kZWxldGVkID0gIXJlbW90ZTsKIAkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IE5VTEw7CiAKIAkJaWYgKGluZGV4KQpAQCAtODc4LDcgKzEzMjgsNyBAQAogICogVHdvLXdheSBtZXJnZS4KICAqCiAgKiBUaGUgcnVsZSBpcyB0byAiY2FycnkgZm9yd2FyZCIgd2hhdCBpcyBpbiB0aGUgaW5kZXggd2l0aG91dCBsb3NpbmcKLSAqIGluZm9ybWF0aW9uIGFjcm9zcyBhICJmYXN0IGZvcndhcmQiLCBmYXZvcmluZyBhIHN1Y2Nlc3NmdWwgbWVyZ2UKKyAqIGluZm9ybWF0aW9uIGFjcm9zcyBhICJmYXN0LWZvcndhcmQiLCBmYXZvcmluZyBhIHN1Y2Nlc3NmdWwgbWVyZ2UKICAqIG92ZXIgYSBtZXJnZSBmYWlsdXJlIHdoZW4gaXQgbWFrZXMgc2Vuc2UuICBGb3IgZGV0YWlscyBvZiB0aGUKICAqICJjYXJyeSBmb3J3YXJkIiBydWxlLCBwbGVhc2Ugc2VlIDxEb2N1bWVudGF0aW9uL2dpdC1yZWFkLXRyZWUudHh0Pi4KICAqCkBAIC05ODcsMTAgKzE0MzcsMTAgQEAKIAogCWlmIChvbGQgJiYgc2FtZShvbGQsIGEpKSB7CiAJCWludCB1cGRhdGUgPSAwOwotCQlpZiAoby0+cmVzZXQpIHsKKwkJaWYgKG8tPnJlc2V0ICYmICFjZV91cHRvZGF0ZShvbGQpICYmICFjZV9za2lwX3dvcmt0cmVlKG9sZCkpIHsKIAkJCXN0cnVjdCBzdGF0IHN0OwogCQkJaWYgKGxzdGF0KG9sZC0+bmFtZSwgJnN0KSB8fAotCQkJICAgIGllX21hdGNoX3N0YXQoby0+c3JjX2luZGV4LCBvbGQsICZzdCwgQ0VfTUFUQ0hfSUdOT1JFX1ZBTElEKSkKKwkJCSAgICBpZV9tYXRjaF9zdGF0KG8tPnNyY19pbmRleCwgb2xkLCAmc3QsIENFX01BVENIX0lHTk9SRV9WQUxJRHxDRV9NQVRDSF9JR05PUkVfU0tJUF9XT1JLVFJFRSkpCiAJCQkJdXBkYXRlIHw9IENFX1VQREFURTsKIAkJfQogCQlhZGRfZW50cnkobywgb2xkLCB1cGRhdGUsIDApOwpkaWZmIC0tZ2l0IGEvdW5wYWNrLXRyZWVzLmggYi91bnBhY2stdHJlZXMuaAppbmRleCAwZDI2ZjNkLi5lZjcwZWFiIDEwMDY0NAotLS0gYS91bnBhY2stdHJlZXMuaAorKysgYi91bnBhY2stdHJlZXMuaApAQCAtNCw2ICs0LDcgQEAKICNkZWZpbmUgTUFYX1VOUEFDS19UUkVFUyA4CiAKIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9uczsKK3N0cnVjdCBleGNsdWRlX2xpc3Q7CiAKIHR5cGVkZWYgaW50ICgqbWVyZ2VfZm5fdCkoc3RydWN0IGNhY2hlX2VudHJ5ICoqc3JjLAogCQlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm9wdGlvbnMpOwpAQCAtMTQsMjIgKzE1LDI3IEBACiAJY29uc3QgY2hhciAqbm90X3VwdG9kYXRlX2RpcjsKIAljb25zdCBjaGFyICp3b3VsZF9sb3NlX3VudHJhY2tlZDsKIAljb25zdCBjaGFyICpiaW5kX292ZXJsYXA7CisJY29uc3QgY2hhciAqc3BhcnNlX25vdF91cHRvZGF0ZV9maWxlOworCWNvbnN0IGNoYXIgKndvdWxkX2xvc2Vfb3JwaGFuZWQ7CiB9OwogCiBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgewotCXVuc2lnbmVkIGludCByZXNldDoxLAotCQkgICAgIG1lcmdlOjEsCi0JCSAgICAgdXBkYXRlOjEsCi0JCSAgICAgaW5kZXhfb25seToxLAotCQkgICAgIG5vbnRyaXZpYWxfbWVyZ2U6MSwKLQkJICAgICB0cml2aWFsX21lcmdlc19vbmx5OjEsCi0JCSAgICAgdmVyYm9zZV91cGRhdGU6MSwKLQkJICAgICBhZ2dyZXNzaXZlOjEsCi0JCSAgICAgc2tpcF91bm1lcmdlZDoxLAotCQkgICAgIGluaXRpYWxfY2hlY2tvdXQ6MSwKLQkJICAgICBnZW50bHk6MTsKKwl1bnNpZ25lZCBpbnQgcmVzZXQsCisJCSAgICAgbWVyZ2UsCisJCSAgICAgdXBkYXRlLAorCQkgICAgIGluZGV4X29ubHksCisJCSAgICAgbm9udHJpdmlhbF9tZXJnZSwKKwkJICAgICB0cml2aWFsX21lcmdlc19vbmx5LAorCQkgICAgIHZlcmJvc2VfdXBkYXRlLAorCQkgICAgIGFnZ3Jlc3NpdmUsCisJCSAgICAgc2tpcF91bm1lcmdlZCwKKwkJICAgICBpbml0aWFsX2NoZWNrb3V0LAorCQkgICAgIGRpZmZfaW5kZXhfY2FjaGVkLAorCQkgICAgIGRlYnVnX3VucGFjaywKKwkJICAgICBza2lwX3NwYXJzZV9jaGVja291dCwKKwkJICAgICBnZW50bHk7CiAJY29uc3QgY2hhciAqcHJlZml4OwotCWludCBwb3M7CisJaW50IGNhY2hlX2JvdHRvbTsKIAlzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyOwogCW1lcmdlX2ZuX3QgZm47CiAJc3RydWN0IHVucGFja190cmVlc19lcnJvcl9tc2dzIG1zZ3M7CkBAIC00Myw2ICs0OSw4IEBACiAJc3RydWN0IGluZGV4X3N0YXRlICpkc3RfaW5kZXg7CiAJc3RydWN0IGluZGV4X3N0YXRlICpzcmNfaW5kZXg7CiAJc3RydWN0IGluZGV4X3N0YXRlIHJlc3VsdDsKKworCXN0cnVjdCBleGNsdWRlX2xpc3QgKmVsOyAvKiBmb3IgaW50ZXJuYWwgdXNlICovCiB9OwogCiBleHRlcm4gaW50IHVucGFja190cmVlcyh1bnNpZ25lZCBuLCBzdHJ1Y3QgdHJlZV9kZXNjICp0LApkaWZmIC0tZ2l0IGEvdXBkYXRlLXNlcnZlci1pbmZvLmMgYi91cGRhdGUtc2VydmVyLWluZm8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2IzOGZkOC4uMDAwMDAwMAotLS0gYS91cGRhdGUtc2VydmVyLWluZm8uYworKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSNpbmNsdWRlICJjYWNoZS5oIgotI2luY2x1ZGUgImV4ZWNfY21kLmgiCi0KLXN0YXRpYyBjb25zdCBjaGFyIHVwZGF0ZV9zZXJ2ZXJfaW5mb191c2FnZVtdID0KLSJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIFstLWZvcmNlXSI7Ci0KLWludCBtYWluKGludCBhYywgY2hhciAqKmF2KQotewotCWludCBpOwotCWludCBmb3JjZSA9IDA7Ci0JZm9yIChpID0gMTsgaSA8IGFjOyBpKyspIHsKLQkJaWYgKGF2W2ldWzBdID09ICctJykgewotCQkJaWYgKCFzdHJjbXAoIi0tZm9yY2UiLCBhdltpXSkgfHwKLQkJCSAgICAhc3RyY21wKCItZiIsIGF2W2ldKSkKLQkJCQlmb3JjZSA9IDE7Ci0JCQllbHNlCi0JCQkJdXNhZ2UodXBkYXRlX3NlcnZlcl9pbmZvX3VzYWdlKTsKLQkJfQotCX0KLQlpZiAoaSAhPSBhYykKLQkJdXNhZ2UodXBkYXRlX3NlcnZlcl9pbmZvX3VzYWdlKTsKLQotCWdpdF9leHRyYWN0X2FyZ3YwX3BhdGgoYXZbMF0pOwotCi0Jc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOwotCi0JcmV0dXJuICEhdXBkYXRlX3NlcnZlcl9pbmZvKGZvcmNlKTsKLX0KZGlmZiAtLWdpdCBhL3VwbG9hZC1wYWNrLmMgYi91cGxvYWQtcGFjay5jCmluZGV4IGVkYzc4NjEuLmRjNDY0ZDcgMTAwNjQ0Ci0tLSBhL3VwbG9hZC1wYWNrLmMKKysrIGIvdXBsb2FkLXBhY2suYwpAQCAtMjgsMTUgKzI4LDE5IEBACiAKIHN0YXRpYyBpbnQgbXVsdGlfYWNrLCBucl9vdXJfcmVmczsKIHN0YXRpYyBpbnQgdXNlX3RoaW5fcGFjaywgdXNlX29mc19kZWx0YSwgdXNlX2luY2x1ZGVfdGFnOwotc3RhdGljIGludCBub19wcm9ncmVzczsKK3N0YXRpYyBpbnQgbm9fcHJvZ3Jlc3MsIGRhZW1vbl9tb2RlOworc3RhdGljIGludCBzaGFsbG93X25yOwogc3RhdGljIHN0cnVjdCBvYmplY3RfYXJyYXkgaGF2ZV9vYmo7CiBzdGF0aWMgc3RydWN0IG9iamVjdF9hcnJheSB3YW50X29iajsKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2FycmF5IGV4dHJhX2VkZ2Vfb2JqOwogc3RhdGljIHVuc2lnbmVkIGludCB0aW1lb3V0OwogLyogMCBmb3Igbm8gc2lkZWJhbmQsCiAgKiBvdGhlcndpc2UgbWF4aW11bSBwYWNrZXQgc2l6ZSAodXAgdG8gNjU1MjAgYnl0ZXMpLgogICovCiBzdGF0aWMgaW50IHVzZV9zaWRlYmFuZDsKIHN0YXRpYyBpbnQgZGVidWdfZmQ7CitzdGF0aWMgaW50IGFkdmVydGlzZV9yZWZzOworc3RhdGljIGludCBzdGF0ZWxlc3NfcnBjOwogCiBzdGF0aWMgdm9pZCByZXNldF90aW1lb3V0KHZvaWQpCiB7CkBAIC0xMDEsMTQgKzEwNSwxMiBAQAogCWZwcmludGYocGFja19waXBlLCAiLSVzXG4iLCBzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSk7CiB9CiAKLXN0YXRpYyBpbnQgZG9fcmV2X2xpc3QoaW50IGZkLCB2b2lkICpjcmVhdGVfZnVsbF9wYWNrKQorc3RhdGljIGludCBkb19yZXZfbGlzdChpbnQgaW4sIGludCBvdXQsIHZvaWQgKmNyZWF0ZV9mdWxsX3BhY2spCiB7CiAJaW50IGk7CiAJc3RydWN0IHJldl9pbmZvIHJldnM7CiAKLQlwYWNrX3BpcGUgPSBmZG9wZW4oZmQsICJ3Iik7Ci0JaWYgKGNyZWF0ZV9mdWxsX3BhY2spCi0JCXVzZV90aGluX3BhY2sgPSAwOyAvKiBubyBwb2ludCBkb2luZyBpdCAqLworCXBhY2tfcGlwZSA9IHhmZG9wZW4ob3V0LCAidyIpOwogCWluaXRfcmV2aXNpb25zKCZyZXZzLCBOVUxMKTsKIAlyZXZzLnRhZ19vYmplY3RzID0gMTsKIAlyZXZzLnRyZWVfb2JqZWN0cyA9IDE7CkBAIC0xMzYsNiArMTM4LDEwIEBACiAJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2cykpCiAJCWRpZSgicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKTsKIAltYXJrX2VkZ2VzX3VuaW50ZXJlc3RpbmcocmV2cy5jb21taXRzLCAmcmV2cywgc2hvd19lZGdlKTsKKwlpZiAodXNlX3RoaW5fcGFjaykKKwkJZm9yIChpID0gMDsgaSA8IGV4dHJhX2VkZ2Vfb2JqLm5yOyBpKyspCisJCQlmcHJpbnRmKHBhY2tfcGlwZSwgIi0lc1xuIiwgc2hhMV90b19oZXgoCisJCQkJCWV4dHJhX2VkZ2Vfb2JqLm9iamVjdHNbaV0uaXRlbS0+c2hhMSkpOwogCXRyYXZlcnNlX2NvbW1pdF9saXN0KCZyZXZzLCBzaG93X2NvbW1pdCwgc2hvd19vYmplY3QsIE5VTEwpOwogCWZmbHVzaChwYWNrX3BpcGUpOwogCWZjbG9zZShwYWNrX3BpcGUpOwpAQCAtMTU1LDEzICsxNjEsMjIgQEAKIAljb25zdCBjaGFyICphcmd2WzEwXTsKIAlpbnQgYXJnID0gMDsKIAotCXJldl9saXN0LnByb2MgPSBkb19yZXZfbGlzdDsKLQkvKiAuZGF0YSBpcyBqdXN0IGEgYm9vbGVhbjogYW55IG5vbi1OVUxMIHZhbHVlIHdpbGwgZG8gKi8KLQlyZXZfbGlzdC5kYXRhID0gY3JlYXRlX2Z1bGxfcGFjayA/ICZyZXZfbGlzdCA6IE5VTEw7Ci0JaWYgKHN0YXJ0X2FzeW5jKCZyZXZfbGlzdCkpCi0JCWRpZSgiZ2l0IHVwbG9hZC1wYWNrOiB1bmFibGUgdG8gZm9yayBnaXQtcmV2LWxpc3QiKTsKKwlpZiAoc2hhbGxvd19ucikgeworCQltZW1zZXQoJnJldl9saXN0LCAwLCBzaXplb2YocmV2X2xpc3QpKTsKKwkJcmV2X2xpc3QucHJvYyA9IGRvX3Jldl9saXN0OworCQlyZXZfbGlzdC5vdXQgPSAtMTsKKwkJaWYgKHN0YXJ0X2FzeW5jKCZyZXZfbGlzdCkpCisJCQlkaWUoImdpdCB1cGxvYWQtcGFjazogdW5hYmxlIHRvIGZvcmsgZ2l0LXJldi1saXN0Iik7CisJCWFyZ3ZbYXJnKytdID0gInBhY2stb2JqZWN0cyI7CisJfSBlbHNlIHsKKwkJYXJndlthcmcrK10gPSAicGFjay1vYmplY3RzIjsKKwkJYXJndlthcmcrK10gPSAiLS1yZXZzIjsKKwkJaWYgKGNyZWF0ZV9mdWxsX3BhY2spCisJCQlhcmd2W2FyZysrXSA9ICItLWFsbCI7CisJCWVsc2UgaWYgKHVzZV90aGluX3BhY2spCisJCQlhcmd2W2FyZysrXSA9ICItLXRoaW4iOworCX0KIAotCWFyZ3ZbYXJnKytdID0gInBhY2stb2JqZWN0cyI7CiAJYXJndlthcmcrK10gPSAiLS1zdGRvdXQiOwogCWlmICghbm9fcHJvZ3Jlc3MpCiAJCWFyZ3ZbYXJnKytdID0gIi0tcHJvZ3Jlc3MiOwpAQCAtMTcyLDcgKzE4Nyw3IEBACiAJYXJndlthcmcrK10gPSBOVUxMOwogCiAJbWVtc2V0KCZwYWNrX29iamVjdHMsIDAsIHNpemVvZihwYWNrX29iamVjdHMpKTsKLQlwYWNrX29iamVjdHMuaW4gPSByZXZfbGlzdC5vdXQ7CS8qIHN0YXJ0X2NvbW1hbmQgY2xvc2VzIGl0ICovCisJcGFja19vYmplY3RzLmluID0gc2hhbGxvd19uciA/IHJldl9saXN0Lm91dCA6IC0xOwogCXBhY2tfb2JqZWN0cy5vdXQgPSAtMTsKIAlwYWNrX29iamVjdHMuZXJyID0gLTE7CiAJcGFja19vYmplY3RzLmdpdF9jbWQgPSAxOwpAQCAtMTgxLDYgKzE5NiwyNCBAQAogCWlmIChzdGFydF9jb21tYW5kKCZwYWNrX29iamVjdHMpKQogCQlkaWUoImdpdCB1cGxvYWQtcGFjazogdW5hYmxlIHRvIGZvcmsgZ2l0LXBhY2stb2JqZWN0cyIpOwogCisJLyogcGFzcyBvbiByZXZpc2lvbnMgd2UgKGRvbid0KSB3YW50ICovCisJaWYgKCFzaGFsbG93X25yKSB7CisJCUZJTEUgKnBpcGVfZmQgPSB4ZmRvcGVuKHBhY2tfb2JqZWN0cy5pbiwgInciKTsKKwkJaWYgKCFjcmVhdGVfZnVsbF9wYWNrKSB7CisJCQlpbnQgaTsKKwkJCWZvciAoaSA9IDA7IGkgPCB3YW50X29iai5ucjsgaSsrKQorCQkJCWZwcmludGYocGlwZV9mZCwgIiVzXG4iLCBzaGExX3RvX2hleCh3YW50X29iai5vYmplY3RzW2ldLml0ZW0tPnNoYTEpKTsKKwkJCWZwcmludGYocGlwZV9mZCwgIi0tbm90XG4iKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBoYXZlX29iai5ucjsgaSsrKQorCQkJCWZwcmludGYocGlwZV9mZCwgIiVzXG4iLCBzaGExX3RvX2hleChoYXZlX29iai5vYmplY3RzW2ldLml0ZW0tPnNoYTEpKTsKKwkJfQorCisJCWZwcmludGYocGlwZV9mZCwgIlxuIik7CisJCWZmbHVzaChwaXBlX2ZkKTsKKwkJZmNsb3NlKHBpcGVfZmQpOworCX0KKworCiAJLyogV2UgcmVhZCBmcm9tIHBhY2tfb2JqZWN0cy5lcnIgdG8gY2FwdHVyZSBzdGRlcnIgb3V0cHV0IGZvcgogCSAqIHByb2dyZXNzIGJhciwgYW5kIHBhY2tfb2JqZWN0cy5vdXQgdG8gY2FwdHVyZSB0aGUgcGFjayBkYXRhLgogCSAqLwpAQCAtMjE4LDYgKzI1MSwyMyBAQAogCQkJfQogCQkJY29udGludWU7CiAJCX0KKwkJaWYgKDAgPD0gcGUgJiYgKHBmZFtwZV0ucmV2ZW50cyAmIChQT0xMSU58UE9MTEhVUCkpKSB7CisJCQkvKiBTdGF0dXMgcmVhZHk7IHdlIHNoaXAgdGhhdCBpbiB0aGUgc2lkZS1iYW5kCisJCQkgKiBvciBkdW1wIHRvIHRoZSBzdGFuZGFyZCBlcnJvci4KKwkJCSAqLworCQkJc3ogPSB4cmVhZChwYWNrX29iamVjdHMuZXJyLCBwcm9ncmVzcywKKwkJCQkgIHNpemVvZihwcm9ncmVzcykpOworCQkJaWYgKDAgPCBzeikKKwkJCQlzZW5kX2NsaWVudF9kYXRhKDIsIHByb2dyZXNzLCBzeik7CisJCQllbHNlIGlmIChzeiA9PSAwKSB7CisJCQkJY2xvc2UocGFja19vYmplY3RzLmVycik7CisJCQkJcGFja19vYmplY3RzLmVyciA9IC0xOworCQkJfQorCQkJZWxzZQorCQkJCWdvdG8gZmFpbDsKKwkJCS8qIGdpdmUgcHJpb3JpdHkgdG8gc3RhdHVzIG1lc3NhZ2VzICovCisJCQljb250aW51ZTsKKwkJfQogCQlpZiAoMCA8PSBwdSAmJiAocGZkW3B1XS5yZXZlbnRzICYgKFBPTExJTnxQT0xMSFVQKSkpIHsKIAkJCS8qIERhdGEgcmVhZHk7IHdlIGtlZXAgdGhlIGxhc3QgYnl0ZSB0byBvdXJzZWx2ZXMKIAkJCSAqIGluIGNhc2Ugd2UgZGV0ZWN0IGJyb2tlbiByZXYtbGlzdCwgc28gdGhhdCB3ZQpAQCAtMjM3LDcgKzI4Nyw3IEBACiAJCQlzeiA9IHhyZWFkKHBhY2tfb2JqZWN0cy5vdXQsIGNwLAogCQkJCSAgc2l6ZW9mKGRhdGEpIC0gb3V0c3opOwogCQkJaWYgKDAgPCBzeikKLQkJCQkJOworCQkJCTsKIAkJCWVsc2UgaWYgKHN6ID09IDApIHsKIAkJCQljbG9zZShwYWNrX29iamVjdHMub3V0KTsKIAkJCQlwYWNrX29iamVjdHMub3V0ID0gLTE7CkBAIC0yNTUsMjggKzMwNSwxMyBAQAogCQkJaWYgKHN6IDwgMCkKIAkJCQlnb3RvIGZhaWw7CiAJCX0KLQkJaWYgKDAgPD0gcGUgJiYgKHBmZFtwZV0ucmV2ZW50cyAmIChQT0xMSU58UE9MTEhVUCkpKSB7Ci0JCQkvKiBTdGF0dXMgcmVhZHk7IHdlIHNoaXAgdGhhdCBpbiB0aGUgc2lkZS1iYW5kCi0JCQkgKiBvciBkdW1wIHRvIHRoZSBzdGFuZGFyZCBlcnJvci4KLQkJCSAqLwotCQkJc3ogPSB4cmVhZChwYWNrX29iamVjdHMuZXJyLCBwcm9ncmVzcywKLQkJCQkgIHNpemVvZihwcm9ncmVzcykpOwotCQkJaWYgKDAgPCBzeikKLQkJCQlzZW5kX2NsaWVudF9kYXRhKDIsIHByb2dyZXNzLCBzeik7Ci0JCQllbHNlIGlmIChzeiA9PSAwKSB7Ci0JCQkJY2xvc2UocGFja19vYmplY3RzLmVycik7Ci0JCQkJcGFja19vYmplY3RzLmVyciA9IC0xOwotCQkJfQotCQkJZWxzZQotCQkJCWdvdG8gZmFpbDsKLQkJfQogCX0KIAogCWlmIChmaW5pc2hfY29tbWFuZCgmcGFja19vYmplY3RzKSkgewogCQllcnJvcigiZ2l0IHVwbG9hZC1wYWNrOiBnaXQtcGFjay1vYmplY3RzIGRpZWQgd2l0aCBlcnJvci4iKTsKIAkJZ290byBmYWlsOwogCX0KLQlpZiAoZmluaXNoX2FzeW5jKCZyZXZfbGlzdCkpCisJaWYgKHNoYWxsb3dfbnIgJiYgZmluaXNoX2FzeW5jKCZyZXZfbGlzdCkpCiAJCWdvdG8gZmFpbDsJLyogZXJyb3Igd2FzIGFscmVhZHkgcmVwb3J0ZWQgKi8KIAogCS8qIGZsdXNoIHRoZSBkYXRhICovCkBAIC0zOTgsMzYgKzQzMyw0MSBAQAogewogCXN0YXRpYyBjaGFyIGxpbmVbMTAwMF07CiAJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKLQljaGFyIGhleFs0MV0sIGxhc3RfaGV4WzQxXTsKKwljaGFyIGxhc3RfaGV4WzQxXTsKIAogCXNhdmVfY29tbWl0X2J1ZmZlciA9IDA7CiAKLQlmb3IoOzspIHsKKwlmb3IgKDs7KSB7CiAJCWludCBsZW4gPSBwYWNrZXRfcmVhZF9saW5lKDAsIGxpbmUsIHNpemVvZihsaW5lKSk7CiAJCXJlc2V0X3RpbWVvdXQoKTsKIAogCQlpZiAoIWxlbikgewogCQkJaWYgKGhhdmVfb2JqLm5yID09IDAgfHwgbXVsdGlfYWNrKQogCQkJCXBhY2tldF93cml0ZSgxLCAiTkFLXG4iKTsKKwkJCWlmIChzdGF0ZWxlc3NfcnBjKQorCQkJCWV4aXQoMCk7CiAJCQljb250aW51ZTsKIAkJfQogCQlzdHJpcChsaW5lLCBsZW4pOwogCQlpZiAoIXByZWZpeGNtcChsaW5lLCAiaGF2ZSAiKSkgewogCQkJc3dpdGNoIChnb3Rfc2hhMShsaW5lKzUsIHNoYTEpKSB7CiAJCQljYXNlIC0xOiAvKiB0aGV5IGhhdmUgd2hhdCB3ZSBkbyBub3QgKi8KLQkJCQlpZiAobXVsdGlfYWNrICYmIG9rX3RvX2dpdmVfdXAoKSkKLQkJCQkJcGFja2V0X3dyaXRlKDEsICJBQ0sgJXMgY29udGludWVcbiIsCi0JCQkJCQkgICAgIHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJCQlpZiAobXVsdGlfYWNrICYmIG9rX3RvX2dpdmVfdXAoKSkgeworCQkJCQljb25zdCBjaGFyICpoZXggPSBzaGExX3RvX2hleChzaGExKTsKKwkJCQkJaWYgKG11bHRpX2FjayA9PSAyKQorCQkJCQkJcGFja2V0X3dyaXRlKDEsICJBQ0sgJXMgcmVhZHlcbiIsIGhleCk7CisJCQkJCWVsc2UKKwkJCQkJCXBhY2tldF93cml0ZSgxLCAiQUNLICVzIGNvbnRpbnVlXG4iLCBoZXgpOworCQkJCX0KIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6Ci0JCQkJbWVtY3B5KGhleCwgc2hhMV90b19oZXgoc2hhMSksIDQxKTsKLQkJCQlpZiAobXVsdGlfYWNrKSB7Ci0JCQkJCWNvbnN0IGNoYXIgKm1zZyA9ICJBQ0sgJXMgY29udGludWVcbiI7Ci0JCQkJCXBhY2tldF93cml0ZSgxLCBtc2csIGhleCk7Ci0JCQkJCW1lbWNweShsYXN0X2hleCwgaGV4LCA0MSk7Ci0JCQkJfQorCQkJCW1lbWNweShsYXN0X2hleCwgc2hhMV90b19oZXgoc2hhMSksIDQxKTsKKwkJCQlpZiAobXVsdGlfYWNrID09IDIpCisJCQkJCXBhY2tldF93cml0ZSgxLCAiQUNLICVzIGNvbW1vblxuIiwgbGFzdF9oZXgpOworCQkJCWVsc2UgaWYgKG11bHRpX2FjaykKKwkJCQkJcGFja2V0X3dyaXRlKDEsICJBQ0sgJXMgY29udGludWVcbiIsIGxhc3RfaGV4KTsKIAkJCQllbHNlIGlmIChoYXZlX29iai5uciA9PSAxKQotCQkJCQlwYWNrZXRfd3JpdGUoMSwgIkFDSyAlc1xuIiwgaGV4KTsKKwkJCQkJcGFja2V0X3dyaXRlKDEsICJBQ0sgJXNcbiIsIGxhc3RfaGV4KTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWNvbnRpbnVlOwpAQCAtNDUxLDggKzQ5MSw5IEBACiAJc3RhdGljIGNoYXIgbGluZVsxMDAwXTsKIAlpbnQgbGVuLCBkZXB0aCA9IDA7CiAKKwlzaGFsbG93X25yID0gMDsKIAlpZiAoZGVidWdfZmQpCi0JCXdyaXRlX2luX2Z1bGwoZGVidWdfZmQsICIjU1xuIiwgMyk7CisJCXdyaXRlX3N0cl9pbl9mdWxsKGRlYnVnX2ZkLCAiI1NcbiIpOwogCWZvciAoOzspIHsKIAkJc3RydWN0IG9iamVjdCAqbzsKIAkJdW5zaWduZWQgY2hhciBzaGExX2J1ZlsyMF07CkBAIC00NjYsNyArNTA3LDYgQEAKIAkJaWYgKCFwcmVmaXhjbXAobGluZSwgInNoYWxsb3cgIikpIHsKIAkJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CiAJCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3Q7Ci0JCQl1c2VfdGhpbl9wYWNrID0gMDsKIAkJCWlmIChnZXRfc2hhMShsaW5lICsgOCwgc2hhMSkpCiAJCQkJZGllKCJpbnZhbGlkIHNoYWxsb3cgbGluZTogJXMiLCBsaW5lKTsKIAkJCW9iamVjdCA9IHBhcnNlX29iamVjdChzaGExKTsKQEAgLTQ3OCw3ICs1MTgsNiBAQAogCQl9CiAJCWlmICghcHJlZml4Y21wKGxpbmUsICJkZWVwZW4gIikpIHsKIAkJCWNoYXIgKmVuZDsKLQkJCXVzZV90aGluX3BhY2sgPSAwOwogCQkJZGVwdGggPSBzdHJ0b2wobGluZSArIDcsICZlbmQsIDApOwogCQkJaWYgKGVuZCA9PSBsaW5lICsgNyB8fCBkZXB0aCA8PSAwKQogCQkJCWRpZSgiSW52YWxpZCBkZWVwZW46ICVzIiwgbGluZSk7CkBAIC00ODgsNyArNTI3LDkgQEAKIAkJICAgIGdldF9zaGExX2hleChsaW5lKzUsIHNoYTFfYnVmKSkKIAkJCWRpZSgiZ2l0IHVwbG9hZC1wYWNrOiBwcm90b2NvbCBlcnJvciwgIgogCQkJICAgICJleHBlY3RlZCB0byBnZXQgc2hhLCBub3QgJyVzJyIsIGxpbmUpOwotCQlpZiAoc3Ryc3RyKGxpbmUrNDUsICJtdWx0aV9hY2siKSkKKwkJaWYgKHN0cnN0cihsaW5lKzQ1LCAibXVsdGlfYWNrX2RldGFpbGVkIikpCisJCQltdWx0aV9hY2sgPSAyOworCQllbHNlIGlmIChzdHJzdHIobGluZSs0NSwgIm11bHRpX2FjayIpKQogCQkJbXVsdGlfYWNrID0gMTsKIAkJaWYgKHN0cnN0cihsaW5lKzQ1LCAidGhpbi1wYWNrIikpCiAJCQl1c2VfdGhpbl9wYWNrID0gMTsKQEAgLTUyMCw3ICs1NjEsMTEgQEAKIAkJfQogCX0KIAlpZiAoZGVidWdfZmQpCi0JCXdyaXRlX2luX2Z1bGwoZGVidWdfZmQsICIjRVxuIiwgMyk7CisJCXdyaXRlX3N0cl9pbl9mdWxsKGRlYnVnX2ZkLCAiI0VcbiIpOworCisJaWYgKCF1c2Vfc2lkZWJhbmQgJiYgZGFlbW9uX21vZGUpCisJCW5vX3Byb2dyZXNzID0gMTsKKwogCWlmIChkZXB0aCA9PSAwICYmIHNoYWxsb3dzLm5yID09IDApCiAJCXJldHVybjsKIAlpZiAoZGVwdGggPiAwKSB7CkBAIC01MzQsNiArNTc5LDcgQEAKIAkJCQlwYWNrZXRfd3JpdGUoMSwgInNoYWxsb3cgJXMiLAogCQkJCQkJc2hhMV90b19oZXgob2JqZWN0LT5zaGExKSk7CiAJCQkJcmVnaXN0ZXJfc2hhbGxvdyhvYmplY3QtPnNoYTEpOworCQkJCXNoYWxsb3dfbnIrKzsKIAkJCX0KIAkJCXJlc3VsdCA9IHJlc3VsdC0+bmV4dDsKIAkJfQpAQCAtNTU2LDYgKzYwMiw3IEBACiAJCQkJCQkJTlVMTCwgJndhbnRfb2JqKTsKIAkJCQkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQ7CiAJCQkJfQorCQkJCWFkZF9vYmplY3RfYXJyYXkob2JqZWN0LCBOVUxMLCAmZXh0cmFfZWRnZV9vYmopOwogCQkJfQogCQkJLyogbWFrZSBzdXJlIGNvbW1pdCB0cmF2ZXJzYWwgY29uZm9ybXMgdG8gY2xpZW50ICovCiAJCQlyZWdpc3Rlcl9zaGFsbG93KG9iamVjdC0+c2hhMSk7CkBAIC01NjcsNiArNjE0LDggQEAKIAkJCWZvciAoaSA9IDA7IGkgPCBzaGFsbG93cy5ucjsgaSsrKQogCQkJCXJlZ2lzdGVyX3NoYWxsb3coc2hhbGxvd3Mub2JqZWN0c1tpXS5pdGVtLT5zaGExKTsKIAkJfQorCisJc2hhbGxvd19uciArPSBzaGFsbG93cy5ucjsKIAlmcmVlKHNoYWxsb3dzLm9iamVjdHMpOwogfQogCkBAIC01NzQsNyArNjIzLDcgQEAKIHsKIAlzdGF0aWMgY29uc3QgY2hhciAqY2FwYWJpbGl0aWVzID0gIm11bHRpX2FjayB0aGluLXBhY2sgc2lkZS1iYW5kIgogCQkiIHNpZGUtYmFuZC02NGsgb2ZzLWRlbHRhIHNoYWxsb3cgbm8tcHJvZ3Jlc3MiCi0JCSIgaW5jbHVkZS10YWciOworCQkiIGluY2x1ZGUtdGFnIG11bHRpX2Fja19kZXRhaWxlZCI7CiAJc3RydWN0IG9iamVjdCAqbyA9IHBhcnNlX29iamVjdChzaGExKTsKIAogCWlmICghbykKQEAgLTU5OCwxMiArNjQ3LDMyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbWFya19vdXJfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBvYmplY3QgKm8gPSBwYXJzZV9vYmplY3Qoc2hhMSk7CisJaWYgKCFvKQorCQlkaWUoImdpdCB1cGxvYWQtcGFjazogY2Fubm90IGZpbmQgb2JqZWN0ICVzOiIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwlpZiAoIShvLT5mbGFncyAmIE9VUl9SRUYpKSB7CisJCW8tPmZsYWdzIHw9IE9VUl9SRUY7CisJCW5yX291cl9yZWZzKys7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCB1cGxvYWRfcGFjayh2b2lkKQogewotCXJlc2V0X3RpbWVvdXQoKTsKLQloZWFkX3JlZihzZW5kX3JlZiwgTlVMTCk7Ci0JZm9yX2VhY2hfcmVmKHNlbmRfcmVmLCBOVUxMKTsKLQlwYWNrZXRfZmx1c2goMSk7CisJaWYgKGFkdmVydGlzZV9yZWZzIHx8ICFzdGF0ZWxlc3NfcnBjKSB7CisJCXJlc2V0X3RpbWVvdXQoKTsKKwkJaGVhZF9yZWYoc2VuZF9yZWYsIE5VTEwpOworCQlmb3JfZWFjaF9yZWYoc2VuZF9yZWYsIE5VTEwpOworCQlwYWNrZXRfZmx1c2goMSk7CisJfSBlbHNlIHsKKwkJaGVhZF9yZWYobWFya19vdXJfcmVmLCBOVUxMKTsKKwkJZm9yX2VhY2hfcmVmKG1hcmtfb3VyX3JlZiwgTlVMTCk7CisJfQorCWlmIChhZHZlcnRpc2VfcmVmcykKKwkJcmV0dXJuOworCiAJcmVjZWl2ZV9uZWVkcygpOwogCWlmICh3YW50X29iai5ucikgewogCQlnZXRfY29tbW9uX2NvbW1pdHMoKTsKQEAgLTYxOCwxOCArNjg3LDI4IEBACiAJaW50IHN0cmljdCA9IDA7CiAKIAlnaXRfZXh0cmFjdF9hcmd2MF9wYXRoKGFyZ3ZbMF0pOworCXJlYWRfcmVwbGFjZV9yZWZzID0gMDsKIAogCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKIAkJY2hhciAqYXJnID0gYXJndltpXTsKIAogCQlpZiAoYXJnWzBdICE9ICctJykKIAkJCWJyZWFrOworCQlpZiAoIXN0cmNtcChhcmcsICItLWFkdmVydGlzZS1yZWZzIikpIHsKKwkJCWFkdmVydGlzZV9yZWZzID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tc3RhdGVsZXNzLXJwYyIpKSB7CisJCQlzdGF0ZWxlc3NfcnBjID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CiAJCWlmICghc3RyY21wKGFyZywgIi0tc3RyaWN0IikpIHsKIAkJCXN0cmljdCA9IDE7CiAJCQljb250aW51ZTsKIAkJfQogCQlpZiAoIXByZWZpeGNtcChhcmcsICItLXRpbWVvdXQ9IikpIHsKIAkJCXRpbWVvdXQgPSBhdG9pKGFyZysxMCk7CisJCQlkYWVtb25fbW9kZSA9IDE7CiAJCQljb250aW51ZTsKIAkJfQogCQlpZiAoIXN0cmNtcChhcmcsICItLSIpKSB7CmRpZmYgLS1naXQgYS91c2FnZS5jIGIvdXNhZ2UuYwppbmRleCA4MjBkMDlmLi43OTg1NmEyIDEwMDY0NAotLS0gYS91c2FnZS5jCisrKyBiL3VzYWdlLmMKQEAgLTcsMTQgKzcsMTQgQEAKIAogc3RhdGljIHZvaWQgcmVwb3J0KGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykKIHsKLQljaGFyIG1zZ1sxMDI0XTsKKwljaGFyIG1zZ1s0MDk2XTsKIAl2c25wcmludGYobXNnLCBzaXplb2YobXNnKSwgZXJyLCBwYXJhbXMpOwogCWZwcmludGYoc3RkZXJyLCAiJXMlc1xuIiwgcHJlZml4LCBtc2cpOwogfQogCi1zdGF0aWMgTk9SRVRVUk4gdm9pZCB1c2FnZV9idWlsdGluKGNvbnN0IGNoYXIgKmVycikKK3N0YXRpYyBOT1JFVFVSTiB2b2lkIHVzYWdlX2J1aWx0aW4oY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykKIHsKLQlmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiAlc1xuIiwgZXJyKTsKKwlyZXBvcnQoInVzYWdlOiAiLCBlcnIsIHBhcmFtcyk7CiAJZXhpdCgxMjkpOwogfQogCkBAIC0zNiwxOSArMzYsMjggQEAKIAogLyogSWYgd2UgYXJlIGluIGEgZGxvcGVuKCllZCAuc28gd3JpdGUgdG8gYSBnbG9iYWwgdmFyaWFibGUgd291bGQgc2VnZmF1bHQKICAqICh1Z2gpLCBzbyBrZWVwIHRoaW5ncyBzdGF0aWMuICovCi1zdGF0aWMgdm9pZCAoKnVzYWdlX3JvdXRpbmUpKGNvbnN0IGNoYXIgKmVycikgTk9SRVRVUk4gPSB1c2FnZV9idWlsdGluOwotc3RhdGljIHZvaWQgKCpkaWVfcm91dGluZSkoY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykgTk9SRVRVUk4gPSBkaWVfYnVpbHRpbjsKK3N0YXRpYyBOT1JFVFVSTl9QVFIgdm9pZCAoKnVzYWdlX3JvdXRpbmUpKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpID0gdXNhZ2VfYnVpbHRpbjsKK3N0YXRpYyBOT1JFVFVSTl9QVFIgdm9pZCAoKmRpZV9yb3V0aW5lKShjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKSA9IGRpZV9idWlsdGluOwogc3RhdGljIHZvaWQgKCplcnJvcl9yb3V0aW5lKShjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKSA9IGVycm9yX2J1aWx0aW47CiBzdGF0aWMgdm9pZCAoKndhcm5fcm91dGluZSkoY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykgPSB3YXJuX2J1aWx0aW47CiAKLXZvaWQgc2V0X2RpZV9yb3V0aW5lKHZvaWQgKCpyb3V0aW5lKShjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKSBOT1JFVFVSTikKK3ZvaWQgc2V0X2RpZV9yb3V0aW5lKE5PUkVUVVJOX1BUUiB2b2lkICgqcm91dGluZSkoY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykpCiB7CiAJZGllX3JvdXRpbmUgPSByb3V0aW5lOwogfQogCit2b2lkIHVzYWdlZihjb25zdCBjaGFyICplcnIsIC4uLikKK3sKKwl2YV9saXN0IHBhcmFtczsKKworCXZhX3N0YXJ0KHBhcmFtcywgZXJyKTsKKwl1c2FnZV9yb3V0aW5lKGVyciwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKK30KKwogdm9pZCB1c2FnZShjb25zdCBjaGFyICplcnIpCiB7Ci0JdXNhZ2Vfcm91dGluZShlcnIpOworCXVzYWdlZigiJXMiLCBlcnIpOwogfQogCiB2b2lkIGRpZShjb25zdCBjaGFyICplcnIsIC4uLikKQEAgLTYwLDYgKzY5LDM0IEBACiAJdmFfZW5kKHBhcmFtcyk7CiB9CiAKK3ZvaWQgZGllX2Vycm5vKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgcGFyYW1zOworCWNoYXIgZm10X3dpdGhfZXJyWzEwMjRdOworCWNoYXIgc3RyX2Vycm9yWzI1Nl0sICplcnI7CisJaW50IGksIGo7CisKKwllcnIgPSBzdHJlcnJvcihlcnJubyk7CisJZm9yIChpID0gaiA9IDA7IGVycltpXSAmJiBqIDwgc2l6ZW9mKHN0cl9lcnJvcikgLSAxOyApIHsKKwkJaWYgKChzdHJfZXJyb3JbaisrXSA9IGVycltpKytdKSAhPSAnJScpCisJCQljb250aW51ZTsKKwkJaWYgKGogPCBzaXplb2Yoc3RyX2Vycm9yKSAtIDEpIHsKKwkJCXN0cl9lcnJvcltqKytdID0gJyUnOworCQl9IGVsc2UgeworCQkJLyogTm8gcm9vbSB0byBkb3VibGUgdGhlICclJywgc28gd2Ugb3ZlcndyaXRlIGl0IHdpdGgKKwkJCSAqICdcMCcgYmVsb3cgKi8KKwkJCWotLTsKKwkJCWJyZWFrOworCQl9CisJfQorCXN0cl9lcnJvcltqXSA9IDA7CisJc25wcmludGYoZm10X3dpdGhfZXJyLCBzaXplb2YoZm10X3dpdGhfZXJyKSwgIiVzOiAlcyIsIGZtdCwgc3RyX2Vycm9yKTsKKworCXZhX3N0YXJ0KHBhcmFtcywgZm10KTsKKwlkaWVfcm91dGluZShmbXRfd2l0aF9lcnIsIHBhcmFtcyk7CisJdmFfZW5kKHBhcmFtcyk7Cit9CisKIGludCBlcnJvcihjb25zdCBjaGFyICplcnIsIC4uLikKIHsKIAl2YV9saXN0IHBhcmFtczsKZGlmZiAtLWdpdCBhL3VzZXJkaWZmLmMgYi91c2VyZGlmZi5jCmluZGV4IDU3NTI5YWUuLmRmOTkyNDkgMTAwNjQ0Ci0tLSBhL3VzZXJkaWZmLmMKKysrIGIvdXNlcmRpZmYuYwpAQCAtMTk4LDcgKzE5OCw3IEBACiAJc3RydWN0IGdpdF9hdHRyX2NoZWNrIGNoZWNrOwogCiAJaWYgKCFhdHRyKQotCQlhdHRyID0gZ2l0X2F0dHIoImRpZmYiLCA0KTsKKwkJYXR0ciA9IGdpdF9hdHRyKCJkaWZmIik7CiAJY2hlY2suYXR0ciA9IGF0dHI7CiAKIAlpZiAoIXBhdGgpCmRpZmYgLS1naXQgYS91dGY4LmMgYi91dGY4LmMKaW5kZXggZGRmZGM1ZS4uODRjZmM3MiAxMDA2NDQKLS0tIGEvdXRmOC5jCisrKyBiL3V0ZjguYwpAQCAtMSw0ICsxLDUgQEAKICNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKICNpbmNsdWRlICJ1dGY4LmgiCiAKIC8qIFRoaXMgY29kZSBpcyBvcmlnaW5hbGx5IGZyb20gaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L3Vjcy8gKi8KQEAgLTE2Miw3ICsxNjMsNyBAQAogICogSWYgdGhlIHN0cmluZyB3YXMgbm90IGEgdmFsaWQgVVRGLTgsICpzdGFydCBwb2ludGVyIGlzIHNldCB0byBOVUxMCiAgKiBhbmQgdGhlIHJldHVybiB2YWx1ZSBpcyB1bmRlZmluZWQuCiAgKi8KLXVjc19jaGFyX3QgcGlja19vbmVfdXRmOF9jaGFyKGNvbnN0IGNoYXIgKipzdGFydCwgc2l6ZV90ICpyZW1haW5kZXJfcCkKK3N0YXRpYyB1Y3NfY2hhcl90IHBpY2tfb25lX3V0ZjhfY2hhcihjb25zdCBjaGFyICoqc3RhcnQsIHNpemVfdCAqcmVtYWluZGVyX3ApCiB7CiAJdW5zaWduZWQgY2hhciAqcyA9ICh1bnNpZ25lZCBjaGFyICopKnN0YXJ0OwogCXVjc19jaGFyX3QgY2g7CkBAIC0yNzksMTQgKzI4MCw0MSBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgdm9pZCBwcmludF9zcGFjZXMoaW50IGNvdW50KQorc3RhdGljIHZvaWQgc3RyYnVmX2FkZGNoYXJzKHN0cnVjdCBzdHJidWYgKnNiLCBpbnQgYywgc2l6ZV90IG4pCiB7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgc1tdID0gIiAgICAgICAgICAgICAgICAgICAgIjsKLQl3aGlsZSAoY291bnQgPj0gc2l6ZW9mKHMpKSB7Ci0JCWZ3cml0ZShzLCBzaXplb2YocykgLSAxLCAxLCBzdGRvdXQpOwotCQljb3VudCAtPSBzaXplb2YocykgLSAxOworCXN0cmJ1Zl9ncm93KHNiLCBuKTsKKwltZW1zZXQoc2ItPmJ1ZiArIHNiLT5sZW4sIGMsIG4pOworCXN0cmJ1Zl9zZXRsZW4oc2IsIHNiLT5sZW4gKyBuKTsKK30KKworc3RhdGljIHZvaWQgc3RyYnVmX2FkZF9pbmRlbnRlZF90ZXh0KHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqdGV4dCwKKwkJCQkgICAgIGludCBpbmRlbnQsIGludCBpbmRlbnQyKQoreworCWlmIChpbmRlbnQgPCAwKQorCQlpbmRlbnQgPSAwOworCXdoaWxlICgqdGV4dCkgeworCQljb25zdCBjaGFyICplb2wgPSBzdHJjaHJudWwodGV4dCwgJ1xuJyk7CisJCWlmICgqZW9sID09ICdcbicpCisJCQllb2wrKzsKKwkJc3RyYnVmX2FkZGNoYXJzKGJ1ZiwgJyAnLCBpbmRlbnQpOworCQlzdHJidWZfYWRkKGJ1ZiwgdGV4dCwgZW9sIC0gdGV4dCk7CisJCXRleHQgPSBlb2w7CisJCWluZGVudCA9IGluZGVudDI7CiAJfQotCWZ3cml0ZShzLCBjb3VudCwgMSwgc3Rkb3V0KTsKK30KKworc3RhdGljIHNpemVfdCBkaXNwbGF5X21vZGVfZXNjX3NlcXVlbmNlX2xlbihjb25zdCBjaGFyICpzKQoreworCWNvbnN0IGNoYXIgKnAgPSBzOworCWlmICgqcCsrICE9ICdcMDMzJykKKwkJcmV0dXJuIDA7CisJaWYgKCpwKysgIT0gJ1snKQorCQlyZXR1cm4gMDsKKwl3aGlsZSAoaXNkaWdpdCgqcCkgfHwgKnAgPT0gJzsnKQorCQlwKys7CisJaWYgKCpwKysgIT0gJ20nKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcCAtIHM7CiB9CiAKIC8qCkBAIC0yOTUsNDUgKzMyMyw4MiBAQAogICogSWYgaW5kZW50IGlzIG5lZ2F0aXZlLCBhc3N1bWUgdGhhdCBhbHJlYWR5IC1pbmRlbnQgY29sdW1ucyBoYXZlIGJlZW4KICAqIGNvbnN1bWVkIChhbmQgbm8gZXh0cmEgaW5kZW50IGlzIG5lY2Vzc2FyeSBmb3IgdGhlIGZpcnN0IGxpbmUpLgogICovCi1pbnQgcHJpbnRfd3JhcHBlZF90ZXh0KGNvbnN0IGNoYXIgKnRleHQsIGludCBpbmRlbnQsIGludCBpbmRlbnQyLCBpbnQgd2lkdGgpCitpbnQgc3RyYnVmX2FkZF93cmFwcGVkX3RleHQoc3RydWN0IHN0cmJ1ZiAqYnVmLAorCQljb25zdCBjaGFyICp0ZXh0LCBpbnQgaW5kZW50MSwgaW50IGluZGVudDIsIGludCB3aWR0aCkKIHsKLQlpbnQgdyA9IGluZGVudCwgYXNzdW1lX3V0ZjggPSBpc191dGY4KHRleHQpOwotCWNvbnN0IGNoYXIgKmJvbCA9IHRleHQsICpzcGFjZSA9IE5VTEw7CisJaW50IGluZGVudCwgdywgYXNzdW1lX3V0ZjggPSAxOworCWNvbnN0IGNoYXIgKmJvbCwgKnNwYWNlLCAqc3RhcnQgPSB0ZXh0OworCXNpemVfdCBvcmlnX2xlbiA9IGJ1Zi0+bGVuOwogCisJaWYgKHdpZHRoIDw9IDApIHsKKwkJc3RyYnVmX2FkZF9pbmRlbnRlZF90ZXh0KGJ1ZiwgdGV4dCwgaW5kZW50MSwgaW5kZW50Mik7CisJCXJldHVybiAxOworCX0KKworcmV0cnk6CisJYm9sID0gdGV4dDsKKwl3ID0gaW5kZW50ID0gaW5kZW50MTsKKwlzcGFjZSA9IE5VTEw7CiAJaWYgKGluZGVudCA8IDApIHsKIAkJdyA9IC1pbmRlbnQ7CiAJCXNwYWNlID0gdGV4dDsKIAl9CiAKIAlmb3IgKDs7KSB7Ci0JCWNoYXIgYyA9ICp0ZXh0OworCQljaGFyIGM7CisJCXNpemVfdCBza2lwOworCisJCXdoaWxlICgoc2tpcCA9IGRpc3BsYXlfbW9kZV9lc2Nfc2VxdWVuY2VfbGVuKHRleHQpKSkKKwkJCXRleHQgKz0gc2tpcDsKKworCQljID0gKnRleHQ7CiAJCWlmICghYyB8fCBpc3NwYWNlKGMpKSB7CiAJCQlpZiAodyA8IHdpZHRoIHx8ICFzcGFjZSkgewogCQkJCWNvbnN0IGNoYXIgKnN0YXJ0ID0gYm9sOworCQkJCWlmICghYyAmJiB0ZXh0ID09IHN0YXJ0KQorCQkJCQlyZXR1cm4gdzsKIAkJCQlpZiAoc3BhY2UpCiAJCQkJCXN0YXJ0ID0gc3BhY2U7CiAJCQkJZWxzZQotCQkJCQlwcmludF9zcGFjZXMoaW5kZW50KTsKLQkJCQlmd3JpdGUoc3RhcnQsIHRleHQgLSBzdGFydCwgMSwgc3Rkb3V0KTsKKwkJCQkJc3RyYnVmX2FkZGNoYXJzKGJ1ZiwgJyAnLCBpbmRlbnQpOworCQkJCXN0cmJ1Zl9hZGQoYnVmLCBzdGFydCwgdGV4dCAtIHN0YXJ0KTsKIAkJCQlpZiAoIWMpCiAJCQkJCXJldHVybiB3OwotCQkJCWVsc2UgaWYgKGMgPT0gJ1x0JykKLQkJCQkJdyB8PSAweDA3OwogCQkJCXNwYWNlID0gdGV4dDsKKwkJCQlpZiAoYyA9PSAnXHQnKQorCQkJCQl3IHw9IDB4MDc7CisJCQkJZWxzZSBpZiAoYyA9PSAnXG4nKSB7CisJCQkJCXNwYWNlKys7CisJCQkJCWlmICgqc3BhY2UgPT0gJ1xuJykgeworCQkJCQkJc3RyYnVmX2FkZGNoKGJ1ZiwgJ1xuJyk7CisJCQkJCQlnb3RvIG5ld19saW5lOworCQkJCQl9CisJCQkJCWVsc2UgaWYgKCFpc2FsbnVtKCpzcGFjZSkpCisJCQkJCQlnb3RvIG5ld19saW5lOworCQkJCQllbHNlCisJCQkJCQlzdHJidWZfYWRkY2goYnVmLCAnICcpOworCQkJCX0KIAkJCQl3Kys7CiAJCQkJdGV4dCsrOwogCQkJfQogCQkJZWxzZSB7Ci0JCQkJcHV0Y2hhcignXG4nKTsKK25ld19saW5lOgorCQkJCXN0cmJ1Zl9hZGRjaChidWYsICdcbicpOwogCQkJCXRleHQgPSBib2wgPSBzcGFjZSArIGlzc3BhY2UoKnNwYWNlKTsKIAkJCQlzcGFjZSA9IE5VTEw7CiAJCQkJdyA9IGluZGVudCA9IGluZGVudDI7CiAJCQl9CiAJCQljb250aW51ZTsKIAkJfQotCQlpZiAoYXNzdW1lX3V0ZjgpCisJCWlmIChhc3N1bWVfdXRmOCkgewogCQkJdyArPSB1dGY4X3dpZHRoKCZ0ZXh0LCBOVUxMKTsKLQkJZWxzZSB7CisJCQlpZiAoIXRleHQpIHsKKwkJCQlhc3N1bWVfdXRmOCA9IDA7CisJCQkJdGV4dCA9IHN0YXJ0OworCQkJCXN0cmJ1Zl9zZXRsZW4oYnVmLCBvcmlnX2xlbik7CisJCQkJZ290byByZXRyeTsKKwkJCX0KKwkJfSBlbHNlIHsKIAkJCXcrKzsKIAkJCXRleHQrKzsKIAkJfQpAQCAtMzU0LDcgKzQxOSw3IEBACiAgKiB3aXRoIGljb252LiAgSWYgdGhlIGNvbnZlcnNpb24gZmFpbHMsIHJldHVybnMgTlVMTC4KICAqLwogI2lmbmRlZiBOT19JQ09OVgotI2lmZGVmIE9MRF9JQ09OVgorI2lmIGRlZmluZWQoT0xEX0lDT05WKSB8fCAoZGVmaW5lZChfX3N1bl9fKSAmJiAhZGVmaW5lZChfWFBHNikpCiAJdHlwZWRlZiBjb25zdCBjaGFyICogaWNvbnZfaWJwOwogI2Vsc2UKIAl0eXBlZGVmIGNoYXIgKiBpY29udl9pYnA7CmRpZmYgLS1naXQgYS91dGY4LmggYi91dGY4LmgKaW5kZXggMmYxYjE0Zi4uZWJjNGQyZiAxMDA2NDQKLS0tIGEvdXRmOC5oCisrKyBiL3V0ZjguaApAQCAtMywxMyArMywxMyBAQAogCiB0eXBlZGVmIHVuc2lnbmVkIGludCB1Y3NfY2hhcl90OyAgLyogYXNzdW1pbmcgMzJiaXQgaW50ICovCiAKLXVjc19jaGFyX3QgcGlja19vbmVfdXRmOF9jaGFyKGNvbnN0IGNoYXIgKipzdGFydCwgc2l6ZV90ICpyZW1haW5kZXJfcCk7CiBpbnQgdXRmOF93aWR0aChjb25zdCBjaGFyICoqc3RhcnQsIHNpemVfdCAqcmVtYWluZGVyX3ApOwogaW50IHV0Zjhfc3Ryd2lkdGgoY29uc3QgY2hhciAqc3RyaW5nKTsKIGludCBpc191dGY4KGNvbnN0IGNoYXIgKnRleHQpOwogaW50IGlzX2VuY29kaW5nX3V0ZjgoY29uc3QgY2hhciAqbmFtZSk7CiAKLWludCBwcmludF93cmFwcGVkX3RleHQoY29uc3QgY2hhciAqdGV4dCwgaW50IGluZGVudCwgaW50IGluZGVudDIsIGludCBsZW4pOworaW50IHN0cmJ1Zl9hZGRfd3JhcHBlZF90ZXh0KHN0cnVjdCBzdHJidWYgKmJ1ZiwKKwkJY29uc3QgY2hhciAqdGV4dCwgaW50IGluZGVudCwgaW50IGluZGVudDIsIGludCB3aWR0aCk7CiAKICNpZm5kZWYgTk9fSUNPTlYKIGNoYXIgKnJlZW5jb2RlX3N0cmluZyhjb25zdCBjaGFyICppbiwgY29uc3QgY2hhciAqb3V0X2VuY29kaW5nLCBjb25zdCBjaGFyICppbl9lbmNvZGluZyk7CmRpZmYgLS1naXQgYS93YWxrZXIuYyBiL3dhbGtlci5jCmluZGV4IGU1NzYzMGUuLjExZDkwNTIgMTAwNjQ0Ci0tLSBhL3dhbGtlci5jCisrKyBiL3dhbGtlci5jCkBAIC0yNDUsNyArMjQ1LDcgQEAKIHsKIAl3aGlsZSAodGFyZ2V0cy0tKSB7CiAJCWZyZWUodGFyZ2V0W3RhcmdldHNdKTsKLQkJaWYgKHdyaXRlX3JlZiAmJiB3cml0ZV9yZWZbdGFyZ2V0c10pCisJCWlmICh3cml0ZV9yZWYpCiAJCQlmcmVlKChjaGFyICopIHdyaXRlX3JlZlt0YXJnZXRzXSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvd3JhcC1mb3ItYmluLnNoIGIvd3JhcC1mb3ItYmluLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MDc1YzkKLS0tIC9kZXYvbnVsbAorKysgYi93cmFwLWZvci1iaW4uc2gKQEAgLTAsMCArMSwxNSBAQAorIyEvYmluL3NoCisKKyMgd3JhcC1mb3ItYmluLnNoOiBUZW1wbGF0ZSBmb3IgZ2l0IGV4ZWN1dGFibGUgd3JhcHBlciBzY3JpcHRzCisjIHRvIHJ1biB0ZXN0IHN1aXRlIGFnYWluc3Qgc2FuZGJveCwgYnV0IHdpdGggb25seSBiaW5kaXItaW5zdGFsbGVkCisjIGV4ZWN1dGFibGVzIGluIFBBVEguICBUaGUgTWFrZWZpbGUgY29waWVzIHRoaXMgaW50byB2YXJpb3VzCisjIGZpbGVzIGluIGJpbi13cmFwcGVycywgc3Vic3RpdHV0aW5nCisjIEBAQlVJTERfRElSQEAgYW5kIEBAUFJPR0BALgorCitHSVRfRVhFQ19QQVRIPSdAQEJVSUxEX0RJUkBAJworR0lUX1RFTVBMQVRFX0RJUj0nQEBCVUlMRF9ESVJAQC90ZW1wbGF0ZXMvYmx0JworR0lUUEVSTExJQj0nQEBCVUlMRF9ESVJAQC9wZXJsL2JsaWIvbGliJworUEFUSD0nQEBCVUlMRF9ESVJAQC9iaW4td3JhcHBlcnM6JyIkUEFUSCIKK2V4cG9ydCBHSVRfRVhFQ19QQVRIIEdJVF9URU1QTEFURV9ESVIgR0lUUEVSTExJQiBQQVRICisKK2V4ZWMgIiR7R0lUX0VYRUNfUEFUSH0vQEBQUk9HQEAiICIkQCIKZGlmZiAtLWdpdCBhL3dyYXBwZXIuYyBiL3dyYXBwZXIuYwppbmRleCA3ZWIzMjE4Li45YzcxYjIxIDEwMDY0NAotLS0gYS93cmFwcGVyLmMKKysrIGIvd3JhcHBlci5jCkBAIC0zNCw2ICszNCwxNiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3ZvaWQgKnhtYWxsb2N6KHNpemVfdCBzaXplKQoreworCXZvaWQgKnJldDsKKwlpZiAoc2l6ZSArIDEgPCBzaXplKQorCQlkaWUoIkRhdGEgdG9vIGxhcmdlIHRvIGZpdCBpbnRvIHZpcnR1YWwgbWVtb3J5IHNwYWNlLiIpOworCXJldCA9IHhtYWxsb2Moc2l6ZSArIDEpOworCSgoY2hhciopcmV0KVtzaXplXSA9IDA7CisJcmV0dXJuIHJldDsKK30KKwogLyoKICAqIHhtZW1kdXB6KCkgYWxsb2NhdGVzIChsZW4gKyAxKSBieXRlcyBvZiBtZW1vcnksIGR1cGxpY2F0ZXMgImxlbiIgYnl0ZXMgb2YKICAqICJkYXRhIiB0byB0aGUgYWxsb2NhdGVkIG1lbW9yeSwgemVybyB0ZXJtaW5hdGVzIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LApAQCAtNDIsMTAgKzUyLDcgQEAKICAqLwogdm9pZCAqeG1lbWR1cHooY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKIHsKLQljaGFyICpwID0geG1hbGxvYyhsZW4gKyAxKTsKLQltZW1jcHkocCwgZGF0YSwgbGVuKTsKLQlwW2xlbl0gPSAnXDAnOwotCXJldHVybiBwOworCXJldHVybiBtZW1jcHkoeG1hbGxvY3oobGVuKSwgZGF0YSwgbGVuKTsKIH0KIAogY2hhciAqeHN0cm5kdXAoY29uc3QgY2hhciAqc3RyLCBzaXplX3QgbGVuKQpAQCAtOTYsNyArMTAzLDcgQEAKIAkJcmVsZWFzZV9wYWNrX21lbW9yeShsZW5ndGgsIGZkKTsKIAkJcmV0ID0gbW1hcChzdGFydCwgbGVuZ3RoLCBwcm90LCBmbGFncywgZmQsIG9mZnNldCk7CiAJCWlmIChyZXQgPT0gTUFQX0ZBSUxFRCkKLQkJCWRpZSgiT3V0IG9mIG1lbW9yeT8gbW1hcCBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygiT3V0IG9mIG1lbW9yeT8gbW1hcCBmYWlsZWQiKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE3NSw3ICsxODIsNyBAQAogewogCWludCByZXQgPSBkdXAoZmQpOwogCWlmIChyZXQgPCAwKQotCQlkaWUoImR1cCBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJkdXAgZmFpbGVkIik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTgzLDcgKzE5MCw3IEBACiB7CiAJRklMRSAqc3RyZWFtID0gZmRvcGVuKGZkLCBtb2RlKTsKIAlpZiAoc3RyZWFtID09IE5VTEwpCi0JCWRpZSgiT3V0IG9mIG1lbW9yeT8gZmRvcGVuIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oIk91dCBvZiBtZW1vcnk/IGZkb3BlbiBmYWlsZWQiKTsKIAlyZXR1cm4gc3RyZWFtOwogfQogCkBAIC0xOTMsNyArMjAwLDE3IEBACiAKIAlmZCA9IG1rc3RlbXAodGVtcGxhdGUpOwogCWlmIChmZCA8IDApCi0JCWRpZSgiVW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oIlVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUiKTsKKwlyZXR1cm4gZmQ7Cit9CisKK2ludCB4bWtzdGVtcF9tb2RlKGNoYXIgKnRlbXBsYXRlLCBpbnQgbW9kZSkKK3sKKwlpbnQgZmQ7CisKKwlmZCA9IGdpdF9ta3N0ZW1wX21vZGUodGVtcGxhdGUsIG1vZGUpOworCWlmIChmZCA8IDApCisJCWRpZV9lcnJubygiVW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIpOwogCXJldHVybiBmZDsKIH0KIApAQCAtMjYwLDEwICsyNzcsMTQgQEAKIGludCBvZGJfbWtzdGVtcChjaGFyICp0ZW1wbGF0ZSwgc2l6ZV90IGxpbWl0LCBjb25zdCBjaGFyICpwYXR0ZXJuKQogewogCWludCBmZDsKLQorCS8qCisJICogd2UgbGV0IHRoZSB1bWFzayBkbyBpdHMgam9iLCBkb24ndCB0cnkgdG8gYmUgbW9yZQorCSAqIHJlc3RyaWN0aXZlIGV4Y2VwdCB0byByZW1vdmUgd3JpdGUgcGVybWlzc2lvbi4KKwkgKi8KKwlpbnQgbW9kZSA9IDA0NDQ7CiAJc25wcmludGYodGVtcGxhdGUsIGxpbWl0LCAiJXMvJXMiLAogCQkgZ2V0X29iamVjdF9kaXJlY3RvcnkoKSwgcGF0dGVybik7Ci0JZmQgPSBta3N0ZW1wKHRlbXBsYXRlKTsKKwlmZCA9IGdpdF9ta3N0ZW1wX21vZGUodGVtcGxhdGUsIG1vZGUpOwogCWlmICgwIDw9IGZkKQogCQlyZXR1cm4gZmQ7CiAKQEAgLTI3Miw3ICsyOTMsNyBAQAogCXNucHJpbnRmKHRlbXBsYXRlLCBsaW1pdCwgIiVzLyVzIiwKIAkJIGdldF9vYmplY3RfZGlyZWN0b3J5KCksIHBhdHRlcm4pOwogCXNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXModGVtcGxhdGUpOwotCXJldHVybiB4bWtzdGVtcCh0ZW1wbGF0ZSk7CisJcmV0dXJuIHhta3N0ZW1wX21vZGUodGVtcGxhdGUsIG1vZGUpOwogfQogCiBpbnQgb2RiX3BhY2tfa2VlcChjaGFyICpuYW1lLCBzaXplX3QgbmFtZXN6LCB1bnNpZ25lZCBjaGFyICpzaGExKQpkaWZmIC0tZ2l0IGEvd3JpdGVfb3JfZGllLmMgYi93cml0ZV9vcl9kaWUuYwppbmRleCA0YzI5MjU1Li5kNDViNTM2IDEwMDY0NAotLS0gYS93cml0ZV9vcl9kaWUuYworKysgYi93cml0ZV9vcl9kaWUuYwpAQCAtNDEsMTQgKzQxLDE0IEBACiAJCSAqLwogCQlpZiAoZXJybm8gPT0gRVBJUEUgfHwgZXJybm8gPT0gRUlOVkFMKQogCQkJZXhpdCgwKTsKLQkJZGllKCJ3cml0ZSBmYWlsdXJlIG9uICVzOiAlcyIsIGRlc2MsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygid3JpdGUgZmFpbHVyZSBvbiAnJXMnIiwgZGVzYyk7CiAJfQogfQogCiB2b2lkIGZzeW5jX29yX2RpZShpbnQgZmQsIGNvbnN0IGNoYXIgKm1zZykKIHsKIAlpZiAoZnN5bmMoZmQpIDwgMCkgewotCQlkaWUoIiVzOiBmc3luYyBlcnJvciAoJXMpIiwgbXNnLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImZzeW5jIGVycm9yIG9uICclcyciLCBtc2cpOwogCX0KIH0KIApAQCAtNTcsNyArNTcsNyBAQAogCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBidWYsIGNvdW50KSA8IDApIHsKIAkJaWYgKGVycm5vID09IEVQSVBFKQogCQkJZXhpdCgwKTsKLQkJZGllKCJ3cml0ZSBlcnJvciAoJXMpIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJ3cml0ZSBlcnJvciIpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvd3MuYyBiL3dzLmMKaW5kZXggNTlkMDg4My4uYzA4OTMzOCAxMDA2NDQKLS0tIGEvd3MuYworKysgYi93cy5jCkBAIC0xNiw2ICsxNiw4IEBACiAJeyAic3BhY2UtYmVmb3JlLXRhYiIsIFdTX1NQQUNFX0JFRk9SRV9UQUIsIDAgfSwKIAl7ICJpbmRlbnQtd2l0aC1ub24tdGFiIiwgV1NfSU5ERU5UX1dJVEhfTk9OX1RBQiwgMCB9LAogCXsgImNyLWF0LWVvbCIsIFdTX0NSX0FUX0VPTCwgMSB9LAorCXsgImJsYW5rLWF0LWVvbCIsIFdTX0JMQU5LX0FUX0VPTCwgMCB9LAorCXsgImJsYW5rLWF0LWVvZiIsIFdTX0JMQU5LX0FUX0VPRiwgMCB9LAogfTsKIAogdW5zaWduZWQgcGFyc2Vfd2hpdGVzcGFjZV9ydWxlKGNvbnN0IGNoYXIgKnN0cmluZykKQEAgLTYyLDcgKzY0LDcgQEAKIAlzdGF0aWMgc3RydWN0IGdpdF9hdHRyICphdHRyX3doaXRlc3BhY2U7CiAKIAlpZiAoIWF0dHJfd2hpdGVzcGFjZSkKLQkJYXR0cl93aGl0ZXNwYWNlID0gZ2l0X2F0dHIoIndoaXRlc3BhY2UiLCAxMCk7CisJCWF0dHJfd2hpdGVzcGFjZSA9IGdpdF9hdHRyKCJ3aGl0ZXNwYWNlIik7CiAJY2hlY2tbMF0uYXR0ciA9IGF0dHJfd2hpdGVzcGFjZTsKIH0KIApAQCAtMTAyLDggKzEwNCwxNyBAQAogY2hhciAqd2hpdGVzcGFjZV9lcnJvcl9zdHJpbmcodW5zaWduZWQgd3MpCiB7CiAJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKLQlpZiAod3MgJiBXU19UUkFJTElOR19TUEFDRSkKKwlpZiAoKHdzICYgV1NfVFJBSUxJTkdfU1BBQ0UpID09IFdTX1RSQUlMSU5HX1NQQUNFKQogCQlzdHJidWZfYWRkc3RyKCZlcnIsICJ0cmFpbGluZyB3aGl0ZXNwYWNlIik7CisJZWxzZSB7CisJCWlmICh3cyAmIFdTX0JMQU5LX0FUX0VPTCkKKwkJCXN0cmJ1Zl9hZGRzdHIoJmVyciwgInRyYWlsaW5nIHdoaXRlc3BhY2UiKTsKKwkJaWYgKHdzICYgV1NfQkxBTktfQVRfRU9GKSB7CisJCQlpZiAoZXJyLmxlbikKKwkJCQlzdHJidWZfYWRkc3RyKCZlcnIsICIsICIpOworCQkJc3RyYnVmX2FkZHN0cigmZXJyLCAibmV3IGJsYW5rIGxpbmUgYXQgRU9GIik7CisJCX0KKwl9CiAJaWYgKHdzICYgV1NfU1BBQ0VfQkVGT1JFX1RBQikgewogCQlpZiAoZXJyLmxlbikKIAkJCXN0cmJ1Zl9hZGRzdHIoJmVyciwgIiwgIik7CkBAIC0xNDEsMTEgKzE1MiwxMSBAQAogCX0KIAogCS8qIENoZWNrIGZvciB0cmFpbGluZyB3aGl0ZXNwYWNlLiAqLwotCWlmICh3c19ydWxlICYgV1NfVFJBSUxJTkdfU1BBQ0UpIHsKKwlpZiAod3NfcnVsZSAmIFdTX0JMQU5LX0FUX0VPTCkgewogCQlmb3IgKGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkgewogCQkJaWYgKGlzc3BhY2UobGluZVtpXSkpIHsKIAkJCQl0cmFpbGluZ193aGl0ZXNwYWNlID0gaTsKLQkJCQlyZXN1bHQgfD0gV1NfVFJBSUxJTkdfU1BBQ0U7CisJCQkJcmVzdWx0IHw9IFdTX0JMQU5LX0FUX0VPTDsKIAkJCX0KIAkJCWVsc2UKIAkJCQlicmVhazsKQEAgLTI2MSw3ICsyNzIsNyBAQAogCS8qCiAJICogU3RyaXAgdHJhaWxpbmcgd2hpdGVzcGFjZQogCSAqLwotCWlmICh3c19ydWxlICYgV1NfVFJBSUxJTkdfU1BBQ0UpIHsKKwlpZiAod3NfcnVsZSAmIFdTX0JMQU5LX0FUX0VPTCkgewogCQlpZiAoMCA8IGxlbiAmJiBzcmNbbGVuIC0gMV0gPT0gJ1xuJykgewogCQkJYWRkX25sX3RvX3RhaWwgPSAxOwogCQkJbGVuLS07CmRpZmYgLS1naXQgYS93dC1zdGF0dXMuYyBiL3d0LXN0YXR1cy5jCmluZGV4IDFiNmRmNDUuLjU4MDdmYzMgMTAwNjQ0Ci0tLSBhL3d0LXN0YXR1cy5jCisrKyBiL3d0LXN0YXR1cy5jCkBAIC0xLDYgKzEsNSBAQAogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSAid3Qtc3RhdHVzLmgiCi0jaW5jbHVkZSAiY29sb3IuaCIKICNpbmNsdWRlICJvYmplY3QuaCIKICNpbmNsdWRlICJkaXIuaCIKICNpbmNsdWRlICJjb21taXQuaCIKQEAgLTExLDM4ICsxMCwxOCBAQAogI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCiAjaW5jbHVkZSAicmVtb3RlLmgiCiAKLWludCB3dF9zdGF0dXNfcmVsYXRpdmVfcGF0aHMgPSAxOwotaW50IHd0X3N0YXR1c191c2VfY29sb3IgPSAtMTsKLWludCB3dF9zdGF0dXNfc3VibW9kdWxlX3N1bW1hcnk7Ci1zdGF0aWMgY2hhciB3dF9zdGF0dXNfY29sb3JzW11bQ09MT1JfTUFYTEVOXSA9IHsKK3N0YXRpYyBjaGFyIGRlZmF1bHRfd3Rfc3RhdHVzX2NvbG9yc1tdW0NPTE9SX01BWExFTl0gPSB7CiAJR0lUX0NPTE9SX05PUk1BTCwgLyogV1RfU1RBVFVTX0hFQURFUiAqLwogCUdJVF9DT0xPUl9HUkVFTiwgIC8qIFdUX1NUQVRVU19VUERBVEVEICovCiAJR0lUX0NPTE9SX1JFRCwgICAgLyogV1RfU1RBVFVTX0NIQU5HRUQgKi8KIAlHSVRfQ09MT1JfUkVELCAgICAvKiBXVF9TVEFUVVNfVU5UUkFDS0VEICovCiAJR0lUX0NPTE9SX1JFRCwgICAgLyogV1RfU1RBVFVTX05PQlJBTkNIICovCisJR0lUX0NPTE9SX1JFRCwgICAgLyogV1RfU1RBVFVTX1VOTUVSR0VEICovCiB9OwogCi1lbnVtIHVudHJhY2tlZF9zdGF0dXNfdHlwZSBzaG93X3VudHJhY2tlZF9maWxlcyA9IFNIT1dfTk9STUFMX1VOVFJBQ0tFRF9GSUxFUzsKLQotc3RhdGljIGludCBwYXJzZV9zdGF0dXNfc2xvdChjb25zdCBjaGFyICp2YXIsIGludCBvZmZzZXQpCitzdGF0aWMgY29uc3QgY2hhciAqY29sb3IoaW50IHNsb3QsIHN0cnVjdCB3dF9zdGF0dXMgKnMpCiB7Ci0JaWYgKCFzdHJjYXNlY21wKHZhcitvZmZzZXQsICJoZWFkZXIiKSkKLQkJcmV0dXJuIFdUX1NUQVRVU19IRUFERVI7Ci0JaWYgKCFzdHJjYXNlY21wKHZhcitvZmZzZXQsICJ1cGRhdGVkIikKLQkJfHwgIXN0cmNhc2VjbXAodmFyK29mZnNldCwgImFkZGVkIikpCi0JCXJldHVybiBXVF9TVEFUVVNfVVBEQVRFRDsKLQlpZiAoIXN0cmNhc2VjbXAodmFyK29mZnNldCwgImNoYW5nZWQiKSkKLQkJcmV0dXJuIFdUX1NUQVRVU19DSEFOR0VEOwotCWlmICghc3RyY2FzZWNtcCh2YXIrb2Zmc2V0LCAidW50cmFja2VkIikpCi0JCXJldHVybiBXVF9TVEFUVVNfVU5UUkFDS0VEOwotCWlmICghc3RyY2FzZWNtcCh2YXIrb2Zmc2V0LCAibm9icmFuY2giKSkKLQkJcmV0dXJuIFdUX1NUQVRVU19OT0JSQU5DSDsKLQlkaWUoImJhZCBjb25maWcgdmFyaWFibGUgJyVzJyIsIHZhcik7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpjb2xvcihpbnQgc2xvdCkKLXsKLQlyZXR1cm4gd3Rfc3RhdHVzX3VzZV9jb2xvciA+IDAgPyB3dF9zdGF0dXNfY29sb3JzW3Nsb3RdIDogIiI7CisJcmV0dXJuIHMtPnVzZV9jb2xvciA+IDAgPyBzLT5jb2xvcl9wYWxldHRlW3Nsb3RdIDogIiI7CiB9CiAKIHZvaWQgd3Rfc3RhdHVzX3ByZXBhcmUoc3RydWN0IHd0X3N0YXR1cyAqcykKQEAgLTUxLDMwICszMCw2MSBAQAogCWNvbnN0IGNoYXIgKmhlYWQ7CiAKIAltZW1zZXQocywgMCwgc2l6ZW9mKCpzKSk7CisJbWVtY3B5KHMtPmNvbG9yX3BhbGV0dGUsIGRlZmF1bHRfd3Rfc3RhdHVzX2NvbG9ycywKKwkgICAgICAgc2l6ZW9mKGRlZmF1bHRfd3Rfc3RhdHVzX2NvbG9ycykpOworCXMtPnNob3dfdW50cmFja2VkX2ZpbGVzID0gU0hPV19OT1JNQUxfVU5UUkFDS0VEX0ZJTEVTOworCXMtPnVzZV9jb2xvciA9IC0xOworCXMtPnJlbGF0aXZlX3BhdGhzID0gMTsKIAloZWFkID0gcmVzb2x2ZV9yZWYoIkhFQUQiLCBzaGExLCAwLCBOVUxMKTsKIAlzLT5icmFuY2ggPSBoZWFkID8geHN0cmR1cChoZWFkKSA6IE5VTEw7CiAJcy0+cmVmZXJlbmNlID0gIkhFQUQiOwogCXMtPmZwID0gc3Rkb3V0OwogCXMtPmluZGV4X2ZpbGUgPSBnZXRfaW5kZXhfZmlsZSgpOworCXMtPmNoYW5nZS5zdHJkdXBfc3RyaW5ncyA9IDE7CisJcy0+dW50cmFja2VkLnN0cmR1cF9zdHJpbmdzID0gMTsKK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX3ByaW50X3VubWVyZ2VkX2hlYWRlcihzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCWNvbnN0IGNoYXIgKmMgPSBjb2xvcihXVF9TVEFUVVNfSEVBREVSLCBzKTsKKworCWNvbG9yX2ZwcmludGZfbG4ocy0+ZnAsIGMsICIjIFVubWVyZ2VkIHBhdGhzOiIpOworCWlmICghYWR2aWNlX3N0YXR1c19oaW50cykKKwkJcmV0dXJuOworCWlmIChzLT5pbl9tZXJnZSkKKwkJOworCWVsc2UgaWYgKCFzLT5pc19pbml0aWFsKQorCQljb2xvcl9mcHJpbnRmX2xuKHMtPmZwLCBjLCAiIyAgICh1c2UgXCJnaXQgcmVzZXQgJXMgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiLCBzLT5yZWZlcmVuY2UpOworCWVsc2UKKwkJY29sb3JfZnByaW50Zl9sbihzLT5mcCwgYywgIiMgICAodXNlIFwiZ2l0IHJtIC0tY2FjaGVkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIik7CisJY29sb3JfZnByaW50Zl9sbihzLT5mcCwgYywgIiMgICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiBhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24pIik7CisJY29sb3JfZnByaW50Zl9sbihzLT5mcCwgYywgIiMiKTsKIH0KIAogc3RhdGljIHZvaWQgd3Rfc3RhdHVzX3ByaW50X2NhY2hlZF9oZWFkZXIoc3RydWN0IHd0X3N0YXR1cyAqcykKIHsKLQljb25zdCBjaGFyICpjID0gY29sb3IoV1RfU1RBVFVTX0hFQURFUik7CisJY29uc3QgY2hhciAqYyA9IGNvbG9yKFdUX1NUQVRVU19IRUFERVIsIHMpOworCiAJY29sb3JfZnByaW50Zl9sbihzLT5mcCwgYywgIiMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6Iik7Ci0JaWYgKCFzLT5pc19pbml0aWFsKSB7CisJaWYgKCFhZHZpY2Vfc3RhdHVzX2hpbnRzKQorCQlyZXR1cm47CisJaWYgKHMtPmluX21lcmdlKQorCQk7IC8qIE5FRURTV09SSzogdXNlICJnaXQgcmVzZXQgLS11bnJlc29sdmUiPz8/ICovCisJZWxzZSBpZiAoIXMtPmlzX2luaXRpYWwpCiAJCWNvbG9yX2ZwcmludGZfbG4ocy0+ZnAsIGMsICIjICAgKHVzZSBcImdpdCByZXNldCAlcyA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIsIHMtPnJlZmVyZW5jZSk7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCWNvbG9yX2ZwcmludGZfbG4ocy0+ZnAsIGMsICIjICAgKHVzZSBcImdpdCBybSAtLWNhY2hlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIpOwotCX0KIAljb2xvcl9mcHJpbnRmX2xuKHMtPmZwLCBjLCAiIyIpOwogfQogCiBzdGF0aWMgdm9pZCB3dF9zdGF0dXNfcHJpbnRfZGlydHlfaGVhZGVyKHN0cnVjdCB3dF9zdGF0dXMgKnMsCiAJCQkJCSBpbnQgaGFzX2RlbGV0ZWQpCiB7Ci0JY29uc3QgY2hhciAqYyA9IGNvbG9yKFdUX1NUQVRVU19IRUFERVIpOworCWNvbnN0IGNoYXIgKmMgPSBjb2xvcihXVF9TVEFUVVNfSEVBREVSLCBzKTsKKwogCWNvbG9yX2ZwcmludGZfbG4ocy0+ZnAsIGMsICIjIENoYW5nZWQgYnV0IG5vdCB1cGRhdGVkOiIpOworCWlmICghYWR2aWNlX3N0YXR1c19oaW50cykKKwkJcmV0dXJuOwogCWlmICghaGFzX2RlbGV0ZWQpCiAJCWNvbG9yX2ZwcmludGZfbG4ocy0+ZnAsIGMsICIjICAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIik7CiAJZWxzZQpAQCAtODUsMzEgKzk1LDczIEBACiAKIHN0YXRpYyB2b2lkIHd0X3N0YXR1c19wcmludF91bnRyYWNrZWRfaGVhZGVyKHN0cnVjdCB3dF9zdGF0dXMgKnMpCiB7Ci0JY29uc3QgY2hhciAqYyA9IGNvbG9yKFdUX1NUQVRVU19IRUFERVIpOworCWNvbnN0IGNoYXIgKmMgPSBjb2xvcihXVF9TVEFUVVNfSEVBREVSLCBzKTsKIAljb2xvcl9mcHJpbnRmX2xuKHMtPmZwLCBjLCAiIyBVbnRyYWNrZWQgZmlsZXM6Iik7CisJaWYgKCFhZHZpY2Vfc3RhdHVzX2hpbnRzKQorCQlyZXR1cm47CiAJY29sb3JfZnByaW50Zl9sbihzLT5mcCwgYywgIiMgICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIik7CiAJY29sb3JfZnByaW50Zl9sbihzLT5mcCwgYywgIiMiKTsKIH0KIAogc3RhdGljIHZvaWQgd3Rfc3RhdHVzX3ByaW50X3RyYWlsZXIoc3RydWN0IHd0X3N0YXR1cyAqcykKIHsKLQljb2xvcl9mcHJpbnRmX2xuKHMtPmZwLCBjb2xvcihXVF9TVEFUVVNfSEVBREVSKSwgIiMiKTsKKwljb2xvcl9mcHJpbnRmX2xuKHMtPmZwLCBjb2xvcihXVF9TVEFUVVNfSEVBREVSLCBzKSwgIiMiKTsKIH0KIAogI2RlZmluZSBxdW90ZV9wYXRoIHF1b3RlX3BhdGhfcmVsYXRpdmUKIAotc3RhdGljIHZvaWQgd3Rfc3RhdHVzX3ByaW50X2ZpbGVwYWlyKHN0cnVjdCB3dF9zdGF0dXMgKnMsCi0JCQkJICAgICBpbnQgdCwgc3RydWN0IGRpZmZfZmlsZXBhaXIgKnApCitzdGF0aWMgdm9pZCB3dF9zdGF0dXNfcHJpbnRfdW5tZXJnZWRfZGF0YShzdHJ1Y3Qgd3Rfc3RhdHVzICpzLAorCQkJCQkgIHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdCkKIHsKLQljb25zdCBjaGFyICpjID0gY29sb3IodCk7CisJY29uc3QgY2hhciAqYyA9IGNvbG9yKFdUX1NUQVRVU19VTk1FUkdFRCwgcyk7CisJc3RydWN0IHd0X3N0YXR1c19jaGFuZ2VfZGF0YSAqZCA9IGl0LT51dGlsOworCXN0cnVjdCBzdHJidWYgb25lYnVmID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqb25lLCAqaG93ID0gImJ1ZyI7CisKKwlvbmUgPSBxdW90ZV9wYXRoKGl0LT5zdHJpbmcsIC0xLCAmb25lYnVmLCBzLT5wcmVmaXgpOworCWNvbG9yX2ZwcmludGYocy0+ZnAsIGNvbG9yKFdUX1NUQVRVU19IRUFERVIsIHMpLCAiI1x0Iik7CisJc3dpdGNoIChkLT5zdGFnZW1hc2spIHsKKwljYXNlIDE6IGhvdyA9ICJib3RoIGRlbGV0ZWQ6IjsgYnJlYWs7CisJY2FzZSAyOiBob3cgPSAiYWRkZWQgYnkgdXM6IjsgYnJlYWs7CisJY2FzZSAzOiBob3cgPSAiZGVsZXRlZCBieSB0aGVtOiI7IGJyZWFrOworCWNhc2UgNDogaG93ID0gImFkZGVkIGJ5IHRoZW06IjsgYnJlYWs7CisJY2FzZSA1OiBob3cgPSAiZGVsZXRlZCBieSB1czoiOyBicmVhazsKKwljYXNlIDY6IGhvdyA9ICJib3RoIGFkZGVkOiI7IGJyZWFrOworCWNhc2UgNzogaG93ID0gImJvdGggbW9kaWZpZWQ6IjsgYnJlYWs7CisJfQorCWNvbG9yX2ZwcmludGYocy0+ZnAsIGMsICIlLTIwcyVzXG4iLCBob3csIG9uZSk7CisJc3RyYnVmX3JlbGVhc2UoJm9uZWJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHd0X3N0YXR1c19wcmludF9jaGFuZ2VfZGF0YShzdHJ1Y3Qgd3Rfc3RhdHVzICpzLAorCQkJCQlpbnQgY2hhbmdlX3R5cGUsCisJCQkJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdCkKK3sKKwlzdHJ1Y3Qgd3Rfc3RhdHVzX2NoYW5nZV9kYXRhICpkID0gaXQtPnV0aWw7CisJY29uc3QgY2hhciAqYyA9IGNvbG9yKGNoYW5nZV90eXBlLCBzKTsKKwlpbnQgc3RhdHVzID0gc3RhdHVzOworCWNoYXIgKm9uZV9uYW1lOworCWNoYXIgKnR3b19uYW1lOwogCWNvbnN0IGNoYXIgKm9uZSwgKnR3bzsKIAlzdHJ1Y3Qgc3RyYnVmIG9uZWJ1ZiA9IFNUUkJVRl9JTklULCB0d29idWYgPSBTVFJCVUZfSU5JVDsKIAotCW9uZSA9IHF1b3RlX3BhdGgocC0+b25lLT5wYXRoLCAtMSwgJm9uZWJ1Ziwgcy0+cHJlZml4KTsKLQl0d28gPSBxdW90ZV9wYXRoKHAtPnR3by0+cGF0aCwgLTEsICZ0d29idWYsIHMtPnByZWZpeCk7CisJb25lX25hbWUgPSB0d29fbmFtZSA9IGl0LT5zdHJpbmc7CisJc3dpdGNoIChjaGFuZ2VfdHlwZSkgeworCWNhc2UgV1RfU1RBVFVTX1VQREFURUQ6CisJCXN0YXR1cyA9IGQtPmluZGV4X3N0YXR1czsKKwkJaWYgKGQtPmhlYWRfcGF0aCkKKwkJCW9uZV9uYW1lID0gZC0+aGVhZF9wYXRoOworCQlicmVhazsKKwljYXNlIFdUX1NUQVRVU19DSEFOR0VEOgorCQlzdGF0dXMgPSBkLT53b3JrdHJlZV9zdGF0dXM7CisJCWJyZWFrOworCX0KIAotCWNvbG9yX2ZwcmludGYocy0+ZnAsIGNvbG9yKFdUX1NUQVRVU19IRUFERVIpLCAiI1x0Iik7Ci0Jc3dpdGNoIChwLT5zdGF0dXMpIHsKKwlvbmUgPSBxdW90ZV9wYXRoKG9uZV9uYW1lLCAtMSwgJm9uZWJ1Ziwgcy0+cHJlZml4KTsKKwl0d28gPSBxdW90ZV9wYXRoKHR3b19uYW1lLCAtMSwgJnR3b2J1Ziwgcy0+cHJlZml4KTsKKworCWNvbG9yX2ZwcmludGYocy0+ZnAsIGNvbG9yKFdUX1NUQVRVU19IRUFERVIsIHMpLCAiI1x0Iik7CisJc3dpdGNoIChzdGF0dXMpIHsKIAljYXNlIERJRkZfU1RBVFVTX0FEREVEOgogCQljb2xvcl9mcHJpbnRmKHMtPmZwLCBjLCAibmV3IGZpbGU6ICAgJXMiLCBvbmUpOwogCQlicmVhazsKQEAgLTEzNSw4MyArMTg3LDI3OSBAQAogCQljb2xvcl9mcHJpbnRmKHMtPmZwLCBjLCAidW5tZXJnZWQ6ICAgJXMiLCBvbmUpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlkaWUoImJ1ZzogdW5oYW5kbGVkIGRpZmYgc3RhdHVzICVjIiwgcC0+c3RhdHVzKTsKKwkJZGllKCJidWc6IHVuaGFuZGxlZCBkaWZmIHN0YXR1cyAlYyIsIHN0YXR1cyk7CiAJfQogCWZwcmludGYocy0+ZnAsICJcbiIpOwogCXN0cmJ1Zl9yZWxlYXNlKCZvbmVidWYpOwogCXN0cmJ1Zl9yZWxlYXNlKCZ0d29idWYpOwogfQogCi1zdGF0aWMgdm9pZCB3dF9zdGF0dXNfcHJpbnRfdXBkYXRlZF9jYihzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEsCi0JCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCi0JCXZvaWQgKmRhdGEpCitzdGF0aWMgdm9pZCB3dF9zdGF0dXNfY29sbGVjdF9jaGFuZ2VkX2NiKHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSwKKwkJCQkJIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCisJCQkJCSB2b2lkICpkYXRhKQogewogCXN0cnVjdCB3dF9zdGF0dXMgKnMgPSBkYXRhOworCWludCBpOworCisJaWYgKCFxLT5ucikKKwkJcmV0dXJuOworCXMtPndvcmtkaXJfZGlydHkgPSAxOworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwOworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQ7CisJCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQ7CisKKwkJcCA9IHEtPnF1ZXVlW2ldOworCQlpdCA9IHN0cmluZ19saXN0X2luc2VydChwLT5vbmUtPnBhdGgsICZzLT5jaGFuZ2UpOworCQlkID0gaXQtPnV0aWw7CisJCWlmICghZCkgeworCQkJZCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpkKSk7CisJCQlpdC0+dXRpbCA9IGQ7CisJCX0KKwkJaWYgKCFkLT53b3JrdHJlZV9zdGF0dXMpCisJCQlkLT53b3JrdHJlZV9zdGF0dXMgPSBwLT5zdGF0dXM7CisJfQorfQorCitzdGF0aWMgaW50IHVubWVyZ2VkX21hc2soY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgcG9zLCBtYXNrOworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisKKwlwb3MgPSBjYWNoZV9uYW1lX3BvcyhwYXRoLCBzdHJsZW4ocGF0aCkpOworCWlmICgwIDw9IHBvcykKKwkJcmV0dXJuIDA7CisKKwltYXNrID0gMDsKKwlwb3MgPSAtcG9zLTE7CisJd2hpbGUgKHBvcyA8IGFjdGl2ZV9ucikgeworCQljZSA9IGFjdGl2ZV9jYWNoZVtwb3MrK107CisJCWlmIChzdHJjbXAoY2UtPm5hbWUsIHBhdGgpIHx8ICFjZV9zdGFnZShjZSkpCisJCQlicmVhazsKKwkJbWFzayB8PSAoMSA8PCAoY2Vfc3RhZ2UoY2UpIC0gMSkpOworCX0KKwlyZXR1cm4gbWFzazsKK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX2NvbGxlY3RfdXBkYXRlZF9jYihzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEsCisJCQkJCSBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkJCQkgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgd3Rfc3RhdHVzICpzID0gZGF0YTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwOworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQ7CisJCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQ7CisKKwkJcCA9IHEtPnF1ZXVlW2ldOworCQlpdCA9IHN0cmluZ19saXN0X2luc2VydChwLT50d28tPnBhdGgsICZzLT5jaGFuZ2UpOworCQlkID0gaXQtPnV0aWw7CisJCWlmICghZCkgeworCQkJZCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpkKSk7CisJCQlpdC0+dXRpbCA9IGQ7CisJCX0KKwkJaWYgKCFkLT5pbmRleF9zdGF0dXMpCisJCQlkLT5pbmRleF9zdGF0dXMgPSBwLT5zdGF0dXM7CisJCXN3aXRjaCAocC0+c3RhdHVzKSB7CisJCWNhc2UgRElGRl9TVEFUVVNfQ09QSUVEOgorCQljYXNlIERJRkZfU1RBVFVTX1JFTkFNRUQ6CisJCQlkLT5oZWFkX3BhdGggPSB4c3RyZHVwKHAtPm9uZS0+cGF0aCk7CisJCQlicmVhazsKKwkJY2FzZSBESUZGX1NUQVRVU19VTk1FUkdFRDoKKwkJCWQtPnN0YWdlbWFzayA9IHVubWVyZ2VkX21hc2socC0+dHdvLT5wYXRoKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCB3dF9zdGF0dXNfY29sbGVjdF9jaGFuZ2VzX3dvcmt0cmVlKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKworCWluaXRfcmV2aXNpb25zKCZyZXYsIE5VTEwpOworCXNldHVwX3JldmlzaW9ucygwLCBOVUxMLCAmcmV2LCBOVUxMKTsKKwlyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX0NBTExCQUNLOworCXJldi5kaWZmb3B0LmZvcm1hdF9jYWxsYmFjayA9IHd0X3N0YXR1c19jb2xsZWN0X2NoYW5nZWRfY2I7CisJcmV2LmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrX2RhdGEgPSBzOworCXJldi5wcnVuZV9kYXRhID0gcy0+cGF0aHNwZWM7CisJcnVuX2RpZmZfZmlsZXMoJnJldiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHd0X3N0YXR1c19jb2xsZWN0X2NoYW5nZXNfaW5kZXgoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCisJaW5pdF9yZXZpc2lvbnMoJnJldiwgTlVMTCk7CisJc2V0dXBfcmV2aXNpb25zKDAsIE5VTEwsICZyZXYsCisJCXMtPmlzX2luaXRpYWwgPyBFTVBUWV9UUkVFX1NIQTFfSEVYIDogcy0+cmVmZXJlbmNlKTsKKwlyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX0NBTExCQUNLOworCXJldi5kaWZmb3B0LmZvcm1hdF9jYWxsYmFjayA9IHd0X3N0YXR1c19jb2xsZWN0X3VwZGF0ZWRfY2I7CisJcmV2LmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrX2RhdGEgPSBzOworCXJldi5kaWZmb3B0LmRldGVjdF9yZW5hbWUgPSAxOworCXJldi5kaWZmb3B0LnJlbmFtZV9saW1pdCA9IDIwMDsKKwlyZXYuZGlmZm9wdC5icmVha19vcHQgPSAwOworCXJldi5wcnVuZV9kYXRhID0gcy0+cGF0aHNwZWM7CisJcnVuX2RpZmZfaW5kZXgoJnJldiwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHd0X3N0YXR1c19jb2xsZWN0X2NoYW5nZXNfaW5pdGlhbChzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9ucjsgaSsrKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdDsKKwkJc3RydWN0IHd0X3N0YXR1c19jaGFuZ2VfZGF0YSAqZDsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKworCQlpZiAoIWNlX3BhdGhfbWF0Y2goY2UsIHMtPnBhdGhzcGVjKSkKKwkJCWNvbnRpbnVlOworCQlpdCA9IHN0cmluZ19saXN0X2luc2VydChjZS0+bmFtZSwgJnMtPmNoYW5nZSk7CisJCWQgPSBpdC0+dXRpbDsKKwkJaWYgKCFkKSB7CisJCQlkID0geGNhbGxvYygxLCBzaXplb2YoKmQpKTsKKwkJCWl0LT51dGlsID0gZDsKKwkJfQorCQlpZiAoY2Vfc3RhZ2UoY2UpKSB7CisJCQlkLT5pbmRleF9zdGF0dXMgPSBESUZGX1NUQVRVU19VTk1FUkdFRDsKKwkJCWQtPnN0YWdlbWFzayB8PSAoMSA8PCAoY2Vfc3RhZ2UoY2UpIC0gMSkpOworCQl9CisJCWVsc2UKKwkJCWQtPmluZGV4X3N0YXR1cyA9IERJRkZfU1RBVFVTX0FEREVEOworCX0KK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX2NvbGxlY3RfdW50cmFja2VkKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJaW50IGk7CisJc3RydWN0IGRpcl9zdHJ1Y3QgZGlyOworCisJaWYgKCFzLT5zaG93X3VudHJhY2tlZF9maWxlcykKKwkJcmV0dXJuOworCW1lbXNldCgmZGlyLCAwLCBzaXplb2YoZGlyKSk7CisJaWYgKHMtPnNob3dfdW50cmFja2VkX2ZpbGVzICE9IFNIT1dfQUxMX1VOVFJBQ0tFRF9GSUxFUykKKwkJZGlyLmZsYWdzIHw9CisJCQlESVJfU0hPV19PVEhFUl9ESVJFQ1RPUklFUyB8IERJUl9ISURFX0VNUFRZX0RJUkVDVE9SSUVTOworCXNldHVwX3N0YW5kYXJkX2V4Y2x1ZGVzKCZkaXIpOworCisJZmlsbF9kaXJlY3RvcnkoJmRpciwgcy0+cGF0aHNwZWMpOworCWZvciAoaSA9IDA7IGkgPCBkaXIubnI7IGkrKykgeworCQlzdHJ1Y3QgZGlyX2VudHJ5ICplbnQgPSBkaXIuZW50cmllc1tpXTsKKwkJaWYgKCFjYWNoZV9uYW1lX2lzX290aGVyKGVudC0+bmFtZSwgZW50LT5sZW4pKQorCQkJY29udGludWU7CisJCWlmICghbWF0Y2hfcGF0aHNwZWMocy0+cGF0aHNwZWMsIGVudC0+bmFtZSwgZW50LT5sZW4sIDAsIE5VTEwpKQorCQkJY29udGludWU7CisJCXMtPndvcmtkaXJfdW50cmFja2VkID0gMTsKKwkJc3RyaW5nX2xpc3RfaW5zZXJ0KGVudC0+bmFtZSwgJnMtPnVudHJhY2tlZCk7CisJfQorfQorCit2b2lkIHd0X3N0YXR1c19jb2xsZWN0KHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJd3Rfc3RhdHVzX2NvbGxlY3RfY2hhbmdlc193b3JrdHJlZShzKTsKKworCWlmIChzLT5pc19pbml0aWFsKQorCQl3dF9zdGF0dXNfY29sbGVjdF9jaGFuZ2VzX2luaXRpYWwocyk7CisJZWxzZQorCQl3dF9zdGF0dXNfY29sbGVjdF9jaGFuZ2VzX2luZGV4KHMpOworCXd0X3N0YXR1c19jb2xsZWN0X3VudHJhY2tlZChzKTsKK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX3ByaW50X3VubWVyZ2VkKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CiAJaW50IHNob3duX2hlYWRlciA9IDA7CiAJaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKLQkJaWYgKHEtPnF1ZXVlW2ldLT5zdGF0dXMgPT0gJ1UnKQorCisJZm9yIChpID0gMDsgaSA8IHMtPmNoYW5nZS5ucjsgaSsrKSB7CisJCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQ7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdDsKKwkJaXQgPSAmKHMtPmNoYW5nZS5pdGVtc1tpXSk7CisJCWQgPSBpdC0+dXRpbDsKKwkJaWYgKCFkLT5zdGFnZW1hc2spCisJCQljb250aW51ZTsKKwkJaWYgKCFzaG93bl9oZWFkZXIpIHsKKwkJCXd0X3N0YXR1c19wcmludF91bm1lcmdlZF9oZWFkZXIocyk7CisJCQlzaG93bl9oZWFkZXIgPSAxOworCQl9CisJCXd0X3N0YXR1c19wcmludF91bm1lcmdlZF9kYXRhKHMsIGl0KTsKKwl9CisJaWYgKHNob3duX2hlYWRlcikKKwkJd3Rfc3RhdHVzX3ByaW50X3RyYWlsZXIocyk7CisKK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX3ByaW50X3VwZGF0ZWQoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlpbnQgc2hvd25faGVhZGVyID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzLT5jaGFuZ2UubnI7IGkrKykgeworCQlzdHJ1Y3Qgd3Rfc3RhdHVzX2NoYW5nZV9kYXRhICpkOworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQ7CisJCWl0ID0gJihzLT5jaGFuZ2UuaXRlbXNbaV0pOworCQlkID0gaXQtPnV0aWw7CisJCWlmICghZC0+aW5kZXhfc3RhdHVzIHx8CisJCSAgICBkLT5pbmRleF9zdGF0dXMgPT0gRElGRl9TVEFUVVNfVU5NRVJHRUQpCiAJCQljb250aW51ZTsKIAkJaWYgKCFzaG93bl9oZWFkZXIpIHsKIAkJCXd0X3N0YXR1c19wcmludF9jYWNoZWRfaGVhZGVyKHMpOwogCQkJcy0+Y29tbWl0YWJsZSA9IDE7CiAJCQlzaG93bl9oZWFkZXIgPSAxOwogCQl9Ci0JCXd0X3N0YXR1c19wcmludF9maWxlcGFpcihzLCBXVF9TVEFUVVNfVVBEQVRFRCwgcS0+cXVldWVbaV0pOworCQl3dF9zdGF0dXNfcHJpbnRfY2hhbmdlX2RhdGEocywgV1RfU1RBVFVTX1VQREFURUQsIGl0KTsKIAl9CiAJaWYgKHNob3duX2hlYWRlcikKIAkJd3Rfc3RhdHVzX3ByaW50X3RyYWlsZXIocyk7CiB9CiAKLXN0YXRpYyB2b2lkIHd0X3N0YXR1c19wcmludF9jaGFuZ2VkX2NiKHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhKQorLyoKKyAqIC0xIDogaGFzIGRlbGV0ZQorICogIDAgOiBubyBjaGFuZ2UKKyAqICAxIDogc29tZSBjaGFuZ2UgYnV0IG5vIGRlbGV0ZQorICovCitzdGF0aWMgaW50IHd0X3N0YXR1c19jaGVja193b3JrdHJlZV9jaGFuZ2VzKHN0cnVjdCB3dF9zdGF0dXMgKnMpCiB7Ci0Jc3RydWN0IHd0X3N0YXR1cyAqcyA9IGRhdGE7CiAJaW50IGk7Ci0JaWYgKHEtPm5yKSB7Ci0JCWludCBoYXNfZGVsZXRlZCA9IDA7Ci0JCXMtPndvcmtkaXJfZGlydHkgPSAxOwotCQlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykKLQkJCWlmIChxLT5xdWV1ZVtpXS0+c3RhdHVzID09IERJRkZfU1RBVFVTX0RFTEVURUQpIHsKLQkJCQloYXNfZGVsZXRlZCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCXd0X3N0YXR1c19wcmludF9kaXJ0eV9oZWFkZXIocywgaGFzX2RlbGV0ZWQpOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykKLQkJd3Rfc3RhdHVzX3ByaW50X2ZpbGVwYWlyKHMsIFdUX1NUQVRVU19DSEFOR0VELCBxLT5xdWV1ZVtpXSk7Ci0JaWYgKHEtPm5yKQotCQl3dF9zdGF0dXNfcHJpbnRfdHJhaWxlcihzKTsKLX0KKwlpbnQgY2hhbmdlcyA9IDA7CiAKLXN0YXRpYyB2b2lkIHd0X3N0YXR1c19wcmludF91cGRhdGVkKHN0cnVjdCB3dF9zdGF0dXMgKnMpCi17Ci0Jc3RydWN0IHJldl9pbmZvIHJldjsKLQlpbml0X3JldmlzaW9ucygmcmV2LCBOVUxMKTsKLQlzZXR1cF9yZXZpc2lvbnMoMCwgTlVMTCwgJnJldiwKLQkJcy0+aXNfaW5pdGlhbCA/IEVNUFRZX1RSRUVfU0hBMV9IRVggOiBzLT5yZWZlcmVuY2UpOwotCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgfD0gRElGRl9GT1JNQVRfQ0FMTEJBQ0s7Ci0JcmV2LmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrID0gd3Rfc3RhdHVzX3ByaW50X3VwZGF0ZWRfY2I7Ci0JcmV2LmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrX2RhdGEgPSBzOwotCXJldi5kaWZmb3B0LmRldGVjdF9yZW5hbWUgPSAxOwotCXJldi5kaWZmb3B0LnJlbmFtZV9saW1pdCA9IDIwMDsKLQlyZXYuZGlmZm9wdC5icmVha19vcHQgPSAwOwotCXJ1bl9kaWZmX2luZGV4KCZyZXYsIDEpOworCWZvciAoaSA9IDA7IGkgPCBzLT5jaGFuZ2UubnI7IGkrKykgeworCQlzdHJ1Y3Qgd3Rfc3RhdHVzX2NoYW5nZV9kYXRhICpkOworCQlkID0gcy0+Y2hhbmdlLml0ZW1zW2ldLnV0aWw7CisJCWlmICghZC0+d29ya3RyZWVfc3RhdHVzIHx8CisJCSAgICBkLT53b3JrdHJlZV9zdGF0dXMgPT0gRElGRl9TVEFUVVNfVU5NRVJHRUQpCisJCQljb250aW51ZTsKKwkJY2hhbmdlcyA9IDE7CisJCWlmIChkLT53b3JrdHJlZV9zdGF0dXMgPT0gRElGRl9TVEFUVVNfREVMRVRFRCkKKwkJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIGNoYW5nZXM7CiB9CiAKIHN0YXRpYyB2b2lkIHd0X3N0YXR1c19wcmludF9jaGFuZ2VkKHN0cnVjdCB3dF9zdGF0dXMgKnMpCiB7Ci0Jc3RydWN0IHJldl9pbmZvIHJldjsKLQlpbml0X3JldmlzaW9ucygmcmV2LCAiIik7Ci0Jc2V0dXBfcmV2aXNpb25zKDAsIE5VTEwsICZyZXYsIE5VTEwpOwotCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgfD0gRElGRl9GT1JNQVRfQ0FMTEJBQ0s7Ci0JcmV2LmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrID0gd3Rfc3RhdHVzX3ByaW50X2NoYW5nZWRfY2I7Ci0JcmV2LmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrX2RhdGEgPSBzOwotCXJ1bl9kaWZmX2ZpbGVzKCZyZXYsIDApOworCWludCBpOworCWludCB3b3JrdHJlZV9jaGFuZ2VzID0gd3Rfc3RhdHVzX2NoZWNrX3dvcmt0cmVlX2NoYW5nZXMocyk7CisKKwlpZiAoIXdvcmt0cmVlX2NoYW5nZXMpCisJCXJldHVybjsKKworCXd0X3N0YXR1c19wcmludF9kaXJ0eV9oZWFkZXIocywgd29ya3RyZWVfY2hhbmdlcyA8IDApOworCisJZm9yIChpID0gMDsgaSA8IHMtPmNoYW5nZS5ucjsgaSsrKSB7CisJCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQ7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdDsKKwkJaXQgPSAmKHMtPmNoYW5nZS5pdGVtc1tpXSk7CisJCWQgPSBpdC0+dXRpbDsKKwkJaWYgKCFkLT53b3JrdHJlZV9zdGF0dXMgfHwKKwkJICAgIGQtPndvcmt0cmVlX3N0YXR1cyA9PSBESUZGX1NUQVRVU19VTk1FUkdFRCkKKwkJCWNvbnRpbnVlOworCQl3dF9zdGF0dXNfcHJpbnRfY2hhbmdlX2RhdGEocywgV1RfU1RBVFVTX0NIQU5HRUQsIGl0KTsKKwl9CisJd3Rfc3RhdHVzX3ByaW50X3RyYWlsZXIocyk7CiB9CiAKLXN0YXRpYyB2b2lkIHd0X3N0YXR1c19wcmludF9zdWJtb2R1bGVfc3VtbWFyeShzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQorc3RhdGljIHZvaWQgd3Rfc3RhdHVzX3ByaW50X3N1Ym1vZHVsZV9zdW1tYXJ5KHN0cnVjdCB3dF9zdGF0dXMgKnMsIGludCB1bmNvbW1pdHRlZCkKIHsKIAlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBzbV9zdW1tYXJ5OwogCWNoYXIgc3VtbWFyeV9saW1pdFs2NF07CkBAIC0yMjAsMTUgKzQ2OCwxNSBAQAogCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsKIAkJInN1Ym1vZHVsZSIsCiAJCSJzdW1tYXJ5IiwKLQkJIi0tY2FjaGVkIiwKKwkJdW5jb21taXR0ZWQgPyAiLS1maWxlcyIgOiAiLS1jYWNoZWQiLAogCQkiLS1mb3Itc3RhdHVzIiwKIAkJIi0tc3VtbWFyeS1saW1pdCIsCiAJCXN1bW1hcnlfbGltaXQsCi0JCXMtPmFtZW5kID8gIkhFQUReIiA6ICJIRUFEIiwKKwkJdW5jb21taXR0ZWQgPyBOVUxMIDogKHMtPmFtZW5kID8gIkhFQUReIiA6ICJIRUFEIiksCiAJCU5VTEwKIAl9OwogCi0Jc3ByaW50ZihzdW1tYXJ5X2xpbWl0LCAiJWQiLCB3dF9zdGF0dXNfc3VibW9kdWxlX3N1bW1hcnkpOworCXNwcmludGYoc3VtbWFyeV9saW1pdCwgIiVkIiwgcy0+c3VibW9kdWxlX3N1bW1hcnkpOwogCXNucHJpbnRmKGluZGV4LCBzaXplb2YoaW5kZXgpLCAiR0lUX0lOREVYX0ZJTEU9JXMiLCBzLT5pbmRleF9maWxlKTsKIAogCW1lbXNldCgmc21fc3VtbWFyeSwgMCwgc2l6ZW9mKHNtX3N1bW1hcnkpKTsKQEAgLTI0MywzMiArNDkxLDIwIEBACiAKIHN0YXRpYyB2b2lkIHd0X3N0YXR1c19wcmludF91bnRyYWNrZWQoc3RydWN0IHd0X3N0YXR1cyAqcykKIHsKLQlzdHJ1Y3QgZGlyX3N0cnVjdCBkaXI7CiAJaW50IGk7Ci0JaW50IHNob3duX2hlYWRlciA9IDA7CiAJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKIAotCW1lbXNldCgmZGlyLCAwLCBzaXplb2YoZGlyKSk7CisJaWYgKCFzLT51bnRyYWNrZWQubnIpCisJCXJldHVybjsKIAotCWlmICghcy0+dW50cmFja2VkKQotCQlkaXIuZmxhZ3MgfD0KLQkJCURJUl9TSE9XX09USEVSX0RJUkVDVE9SSUVTIHwgRElSX0hJREVfRU1QVFlfRElSRUNUT1JJRVM7Ci0Jc2V0dXBfc3RhbmRhcmRfZXhjbHVkZXMoJmRpcik7Ci0KLQlyZWFkX2RpcmVjdG9yeSgmZGlyLCAiLiIsICIiLCAwLCBOVUxMKTsKLQlmb3IoaSA9IDA7IGkgPCBkaXIubnI7IGkrKykgewotCQlzdHJ1Y3QgZGlyX2VudHJ5ICplbnQgPSBkaXIuZW50cmllc1tpXTsKLQkJaWYgKCFjYWNoZV9uYW1lX2lzX290aGVyKGVudC0+bmFtZSwgZW50LT5sZW4pKQotCQkJY29udGludWU7Ci0JCWlmICghc2hvd25faGVhZGVyKSB7Ci0JCQlzLT53b3JrZGlyX3VudHJhY2tlZCA9IDE7Ci0JCQl3dF9zdGF0dXNfcHJpbnRfdW50cmFja2VkX2hlYWRlcihzKTsKLQkJCXNob3duX2hlYWRlciA9IDE7Ci0JCX0KLQkJY29sb3JfZnByaW50ZihzLT5mcCwgY29sb3IoV1RfU1RBVFVTX0hFQURFUiksICIjXHQiKTsKLQkJY29sb3JfZnByaW50Zl9sbihzLT5mcCwgY29sb3IoV1RfU1RBVFVTX1VOVFJBQ0tFRCksICIlcyIsCi0JCQkJcXVvdGVfcGF0aChlbnQtPm5hbWUsIGVudC0+bGVuLAotCQkJCQkmYnVmLCBzLT5wcmVmaXgpKTsKKwl3dF9zdGF0dXNfcHJpbnRfdW50cmFja2VkX2hlYWRlcihzKTsKKwlmb3IgKGkgPSAwOyBpIDwgcy0+dW50cmFja2VkLm5yOyBpKyspIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0OworCQlpdCA9ICYocy0+dW50cmFja2VkLml0ZW1zW2ldKTsKKwkJY29sb3JfZnByaW50ZihzLT5mcCwgY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyksICIjXHQiKTsKKwkJY29sb3JfZnByaW50Zl9sbihzLT5mcCwgY29sb3IoV1RfU1RBVFVTX1VOVFJBQ0tFRCwgcyksICIlcyIsCisJCQkJIHF1b3RlX3BhdGgoaXQtPnN0cmluZywgc3RybGVuKGl0LT5zdHJpbmcpLAorCQkJCQkgICAgJmJ1Ziwgcy0+cHJlZml4KSk7CiAJfQogCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOwogfQpAQCAtMzEwLDE3ICs1NDYsMTUgQEAKIAkJcmV0dXJuOwogCiAJZm9yIChjcCA9IHNiLmJ1ZjsgKGVwID0gc3RyY2hyKGNwLCAnXG4nKSkgIT0gTlVMTDsgY3AgPSBlcCArIDEpCi0JCWNvbG9yX2ZwcmludGZfbG4ocy0+ZnAsIGNvbG9yKFdUX1NUQVRVU19IRUFERVIpLAorCQljb2xvcl9mcHJpbnRmX2xuKHMtPmZwLCBjb2xvcihXVF9TVEFUVVNfSEVBREVSLCBzKSwKIAkJCQkgIiMgJS4qcyIsIChpbnQpKGVwIC0gY3ApLCBjcCk7Ci0JY29sb3JfZnByaW50Zl9sbihzLT5mcCwgY29sb3IoV1RfU1RBVFVTX0hFQURFUiksICIjIik7CisJY29sb3JfZnByaW50Zl9sbihzLT5mcCwgY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyksICIjIik7CiB9CiAKIHZvaWQgd3Rfc3RhdHVzX3ByaW50KHN0cnVjdCB3dF9zdGF0dXMgKnMpCiB7Ci0JdW5zaWduZWQgY2hhciBzaGExWzIwXTsKLQljb25zdCBjaGFyICpicmFuY2hfY29sb3IgPSBjb2xvcihXVF9TVEFUVVNfSEVBREVSKTsKKwljb25zdCBjaGFyICpicmFuY2hfY29sb3IgPSBjb2xvcihXVF9TVEFUVVNfSEVBREVSLCBzKTsKIAotCXMtPmlzX2luaXRpYWwgPSBnZXRfc2hhMShzLT5yZWZlcmVuY2UsIHNoYTEpID8gMSA6IDA7CiAJaWYgKHMtPmJyYW5jaCkgewogCQljb25zdCBjaGFyICpvbl93aGF0ID0gIk9uIGJyYW5jaCAiOwogCQljb25zdCBjaGFyICpicmFuY2hfbmFtZSA9IHMtPmJyYW5jaDsKQEAgLTMyOCwyNiArNTYyLDI5IEBACiAJCQlicmFuY2hfbmFtZSArPSAxMTsKIAkJZWxzZSBpZiAoIXN0cmNtcChicmFuY2hfbmFtZSwgIkhFQUQiKSkgewogCQkJYnJhbmNoX25hbWUgPSAiIjsKLQkJCWJyYW5jaF9jb2xvciA9IGNvbG9yKFdUX1NUQVRVU19OT0JSQU5DSCk7CisJCQlicmFuY2hfY29sb3IgPSBjb2xvcihXVF9TVEFUVVNfTk9CUkFOQ0gsIHMpOwogCQkJb25fd2hhdCA9ICJOb3QgY3VycmVudGx5IG9uIGFueSBicmFuY2guIjsKIAkJfQotCQljb2xvcl9mcHJpbnRmKHMtPmZwLCBjb2xvcihXVF9TVEFUVVNfSEVBREVSKSwgIiMgIik7CisJCWNvbG9yX2ZwcmludGYocy0+ZnAsIGNvbG9yKFdUX1NUQVRVU19IRUFERVIsIHMpLCAiIyAiKTsKIAkJY29sb3JfZnByaW50Zl9sbihzLT5mcCwgYnJhbmNoX2NvbG9yLCAiJXMlcyIsIG9uX3doYXQsIGJyYW5jaF9uYW1lKTsKIAkJaWYgKCFzLT5pc19pbml0aWFsKQogCQkJd3Rfc3RhdHVzX3ByaW50X3RyYWNraW5nKHMpOwogCX0KIAogCWlmIChzLT5pc19pbml0aWFsKSB7Ci0JCWNvbG9yX2ZwcmludGZfbG4ocy0+ZnAsIGNvbG9yKFdUX1NUQVRVU19IRUFERVIpLCAiIyIpOwotCQljb2xvcl9mcHJpbnRmX2xuKHMtPmZwLCBjb2xvcihXVF9TVEFUVVNfSEVBREVSKSwgIiMgSW5pdGlhbCBjb21taXQiKTsKLQkJY29sb3JfZnByaW50Zl9sbihzLT5mcCwgY29sb3IoV1RfU1RBVFVTX0hFQURFUiksICIjIik7CisJCWNvbG9yX2ZwcmludGZfbG4ocy0+ZnAsIGNvbG9yKFdUX1NUQVRVU19IRUFERVIsIHMpLCAiIyIpOworCQljb2xvcl9mcHJpbnRmX2xuKHMtPmZwLCBjb2xvcihXVF9TVEFUVVNfSEVBREVSLCBzKSwgIiMgSW5pdGlhbCBjb21taXQiKTsKKwkJY29sb3JfZnByaW50Zl9sbihzLT5mcCwgY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyksICIjIik7CiAJfQogCiAJd3Rfc3RhdHVzX3ByaW50X3VwZGF0ZWQocyk7CisJd3Rfc3RhdHVzX3ByaW50X3VubWVyZ2VkKHMpOwogCXd0X3N0YXR1c19wcmludF9jaGFuZ2VkKHMpOwotCWlmICh3dF9zdGF0dXNfc3VibW9kdWxlX3N1bW1hcnkpCi0JCXd0X3N0YXR1c19wcmludF9zdWJtb2R1bGVfc3VtbWFyeShzKTsKLQlpZiAoc2hvd191bnRyYWNrZWRfZmlsZXMpCisJaWYgKHMtPnN1Ym1vZHVsZV9zdW1tYXJ5KSB7CisJCXd0X3N0YXR1c19wcmludF9zdWJtb2R1bGVfc3VtbWFyeShzLCAwKTsgIC8qIHN0YWdlZCAqLworCQl3dF9zdGF0dXNfcHJpbnRfc3VibW9kdWxlX3N1bW1hcnkocywgMSk7ICAvKiB1bnN0YWdlZCAqLworCX0KKwlpZiAocy0+c2hvd191bnRyYWNrZWRfZmlsZXMpCiAJCXd0X3N0YXR1c19wcmludF91bnRyYWNrZWQocyk7CiAJZWxzZSBpZiAocy0+Y29tbWl0YWJsZSkKIAkJIGZwcmludGYocy0+ZnAsICIjIFVudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkICh1c2UgLXUgb3B0aW9uIHRvIHNob3cgdW50cmFja2VkIGZpbGVzKVxuIik7CkBAIC0zNjEsNTMgKzU5OCwxMTcgQEAKIAkJCTsgLyogbm90aGluZyAqLwogCQllbHNlIGlmIChzLT53b3JrZGlyX2RpcnR5KQogCQkJcHJpbnRmKCJubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlIFwiZ2l0IGFkZFwiIGFuZC9vciBcImdpdCBjb21taXQgLWFcIilcbiIpOwotCQllbHNlIGlmIChzLT53b3JrZGlyX3VudHJhY2tlZCkKKwkJZWxzZSBpZiAocy0+dW50cmFja2VkLm5yKQogCQkJcHJpbnRmKCJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnQgKHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaylcbiIpOwogCQllbHNlIGlmIChzLT5pc19pbml0aWFsKQogCQkJcHJpbnRmKCJub3RoaW5nIHRvIGNvbW1pdCAoY3JlYXRlL2NvcHkgZmlsZXMgYW5kIHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaylcbiIpOwotCQllbHNlIGlmICghc2hvd191bnRyYWNrZWRfZmlsZXMpCisJCWVsc2UgaWYgKCFzLT5zaG93X3VudHJhY2tlZF9maWxlcykKIAkJCXByaW50Zigibm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcylcbiIpOwogCQllbHNlCiAJCQlwcmludGYoIm5vdGhpbmcgdG8gY29tbWl0ICh3b3JraW5nIGRpcmVjdG9yeSBjbGVhbilcbiIpOwogCX0KIH0KIAotaW50IGdpdF9zdGF0dXNfY29uZmlnKGNvbnN0IGNoYXIgKmssIGNvbnN0IGNoYXIgKnYsIHZvaWQgKmNiKQorc3RhdGljIHZvaWQgd3Rfc2hvcnRzdGF0dXNfdW5tZXJnZWQoaW50IG51bGxfdGVybWluYXRpb24sIHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdCwKKwkJCSAgIHN0cnVjdCB3dF9zdGF0dXMgKnMpCiB7Ci0JaWYgKCFzdHJjbXAoaywgInN0YXR1cy5zdWJtb2R1bGVzdW1tYXJ5IikpIHsKLQkJaW50IGlzX2Jvb2w7Ci0JCXd0X3N0YXR1c19zdWJtb2R1bGVfc3VtbWFyeSA9IGdpdF9jb25maWdfYm9vbF9vcl9pbnQoaywgdiwgJmlzX2Jvb2wpOwotCQlpZiAoaXNfYm9vbCAmJiB3dF9zdGF0dXNfc3VibW9kdWxlX3N1bW1hcnkpCi0JCQl3dF9zdGF0dXNfc3VibW9kdWxlX3N1bW1hcnkgPSAtMTsKLQkJcmV0dXJuIDA7CisJc3RydWN0IHd0X3N0YXR1c19jaGFuZ2VfZGF0YSAqZCA9IGl0LT51dGlsOworCWNvbnN0IGNoYXIgKmhvdyA9ICI/PyI7CisKKwlzd2l0Y2ggKGQtPnN0YWdlbWFzaykgeworCWNhc2UgMTogaG93ID0gIkREIjsgYnJlYWs7IC8qIGJvdGggZGVsZXRlZCAqLworCWNhc2UgMjogaG93ID0gIkFVIjsgYnJlYWs7IC8qIGFkZGVkIGJ5IHVzICovCisJY2FzZSAzOiBob3cgPSAiVUQiOyBicmVhazsgLyogZGVsZXRlZCBieSB0aGVtICovCisJY2FzZSA0OiBob3cgPSAiVUEiOyBicmVhazsgLyogYWRkZWQgYnkgdGhlbSAqLworCWNhc2UgNTogaG93ID0gIkRVIjsgYnJlYWs7IC8qIGRlbGV0ZWQgYnkgdXMgKi8KKwljYXNlIDY6IGhvdyA9ICJBQSI7IGJyZWFrOyAvKiBib3RoIGFkZGVkICovCisJY2FzZSA3OiBob3cgPSAiVVUiOyBicmVhazsgLyogYm90aCBtb2RpZmllZCAqLwogCX0KLQlpZiAoIXN0cmNtcChrLCAic3RhdHVzLmNvbG9yIikgfHwgIXN0cmNtcChrLCAiY29sb3Iuc3RhdHVzIikpIHsKLQkJd3Rfc3RhdHVzX3VzZV9jb2xvciA9IGdpdF9jb25maWdfY29sb3Jib29sKGssIHYsIC0xKTsKLQkJcmV0dXJuIDA7CisJY29sb3JfZnByaW50ZihzLT5mcCwgY29sb3IoV1RfU1RBVFVTX1VOTUVSR0VELCBzKSwgIiVzIiwgaG93KTsKKwlpZiAobnVsbF90ZXJtaW5hdGlvbikgeworCQlmcHJpbnRmKHN0ZG91dCwgIiAlcyVjIiwgaXQtPnN0cmluZywgMCk7CisJfSBlbHNlIHsKKwkJc3RydWN0IHN0cmJ1ZiBvbmVidWYgPSBTVFJCVUZfSU5JVDsKKwkJY29uc3QgY2hhciAqb25lOworCQlvbmUgPSBxdW90ZV9wYXRoKGl0LT5zdHJpbmcsIC0xLCAmb25lYnVmLCBzLT5wcmVmaXgpOworCQlwcmludGYoIiAlc1xuIiwgb25lKTsKKwkJc3RyYnVmX3JlbGVhc2UoJm9uZWJ1Zik7CiAJfQotCWlmICghcHJlZml4Y21wKGssICJzdGF0dXMuY29sb3IuIikgfHwgIXByZWZpeGNtcChrLCAiY29sb3Iuc3RhdHVzLiIpKSB7Ci0JCWludCBzbG90ID0gcGFyc2Vfc3RhdHVzX3Nsb3QoaywgMTMpOwotCQlpZiAoIXYpCi0JCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2woayk7Ci0JCWNvbG9yX3BhcnNlKHYsIGssIHd0X3N0YXR1c19jb2xvcnNbc2xvdF0pOwotCQlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd3Rfc2hvcnRzdGF0dXNfc3RhdHVzKGludCBudWxsX3Rlcm1pbmF0aW9uLCBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQsCisJCQkgc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlzdHJ1Y3Qgd3Rfc3RhdHVzX2NoYW5nZV9kYXRhICpkID0gaXQtPnV0aWw7CisKKwlpZiAoZC0+aW5kZXhfc3RhdHVzKQorCQljb2xvcl9mcHJpbnRmKHMtPmZwLCBjb2xvcihXVF9TVEFUVVNfVVBEQVRFRCwgcyksICIlYyIsIGQtPmluZGV4X3N0YXR1cyk7CisJZWxzZQorCQlwdXRjaGFyKCcgJyk7CisJaWYgKGQtPndvcmt0cmVlX3N0YXR1cykKKwkJY29sb3JfZnByaW50ZihzLT5mcCwgY29sb3IoV1RfU1RBVFVTX0NIQU5HRUQsIHMpLCAiJWMiLCBkLT53b3JrdHJlZV9zdGF0dXMpOworCWVsc2UKKwkJcHV0Y2hhcignICcpOworCXB1dGNoYXIoJyAnKTsKKwlpZiAobnVsbF90ZXJtaW5hdGlvbikgeworCQlmcHJpbnRmKHN0ZG91dCwgIiVzJWMiLCBpdC0+c3RyaW5nLCAwKTsKKwkJaWYgKGQtPmhlYWRfcGF0aCkKKwkJCWZwcmludGYoc3Rkb3V0LCAiJXMlYyIsIGQtPmhlYWRfcGF0aCwgMCk7CisJfSBlbHNlIHsKKwkJc3RydWN0IHN0cmJ1ZiBvbmVidWYgPSBTVFJCVUZfSU5JVDsKKwkJY29uc3QgY2hhciAqb25lOworCQlpZiAoZC0+aGVhZF9wYXRoKSB7CisJCQlvbmUgPSBxdW90ZV9wYXRoKGQtPmhlYWRfcGF0aCwgLTEsICZvbmVidWYsIHMtPnByZWZpeCk7CisJCQlwcmludGYoIiVzIC0+ICIsIG9uZSk7CisJCQlzdHJidWZfcmVsZWFzZSgmb25lYnVmKTsKKwkJfQorCQlvbmUgPSBxdW90ZV9wYXRoKGl0LT5zdHJpbmcsIC0xLCAmb25lYnVmLCBzLT5wcmVmaXgpOworCQlwcmludGYoIiVzXG4iLCBvbmUpOworCQlzdHJidWZfcmVsZWFzZSgmb25lYnVmKTsKIAl9Ci0JaWYgKCFzdHJjbXAoaywgInN0YXR1cy5yZWxhdGl2ZXBhdGhzIikpIHsKLQkJd3Rfc3RhdHVzX3JlbGF0aXZlX3BhdGhzID0gZ2l0X2NvbmZpZ19ib29sKGssIHYpOwotCQlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd3Rfc2hvcnRzdGF0dXNfdW50cmFja2VkKGludCBudWxsX3Rlcm1pbmF0aW9uLCBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQsCisJCQkgICAgc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlpZiAobnVsbF90ZXJtaW5hdGlvbikgeworCQlmcHJpbnRmKHN0ZG91dCwgIj8/ICVzJWMiLCBpdC0+c3RyaW5nLCAwKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc3RyYnVmIG9uZWJ1ZiA9IFNUUkJVRl9JTklUOworCQljb25zdCBjaGFyICpvbmU7CisJCW9uZSA9IHF1b3RlX3BhdGgoaXQtPnN0cmluZywgLTEsICZvbmVidWYsIHMtPnByZWZpeCk7CisJCWNvbG9yX2ZwcmludGYocy0+ZnAsIGNvbG9yKFdUX1NUQVRVU19VTlRSQUNLRUQsIHMpLCAiPz8iKTsKKwkJcHJpbnRmKCIgJXNcbiIsIG9uZSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZvbmVidWYpOwogCX0KLQlpZiAoIXN0cmNtcChrLCAic3RhdHVzLnNob3d1bnRyYWNrZWRmaWxlcyIpKSB7Ci0JCWlmICghdikKLQkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbChrKTsKLQkJZWxzZSBpZiAoIXN0cmNtcCh2LCAibm8iKSkKLQkJCXNob3dfdW50cmFja2VkX2ZpbGVzID0gU0hPV19OT19VTlRSQUNLRURfRklMRVM7Ci0JCWVsc2UgaWYgKCFzdHJjbXAodiwgIm5vcm1hbCIpKQotCQkJc2hvd191bnRyYWNrZWRfZmlsZXMgPSBTSE9XX05PUk1BTF9VTlRSQUNLRURfRklMRVM7Ci0JCWVsc2UgaWYgKCFzdHJjbXAodiwgImFsbCIpKQotCQkJc2hvd191bnRyYWNrZWRfZmlsZXMgPSBTSE9XX0FMTF9VTlRSQUNLRURfRklMRVM7Cit9CisKK3ZvaWQgd3Rfc2hvcnRzdGF0dXNfcHJpbnQoc3RydWN0IHd0X3N0YXR1cyAqcywgaW50IG51bGxfdGVybWluYXRpb24pCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHMtPmNoYW5nZS5ucjsgaSsrKSB7CisJCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQ7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdDsKKworCQlpdCA9ICYocy0+Y2hhbmdlLml0ZW1zW2ldKTsKKwkJZCA9IGl0LT51dGlsOworCQlpZiAoZC0+c3RhZ2VtYXNrKQorCQkJd3Rfc2hvcnRzdGF0dXNfdW5tZXJnZWQobnVsbF90ZXJtaW5hdGlvbiwgaXQsIHMpOwogCQllbHNlCi0JCQlyZXR1cm4gZXJyb3IoIkludmFsaWQgdW50cmFja2VkIGZpbGVzIG1vZGUgJyVzJyIsIHYpOwotCQlyZXR1cm4gMDsKKwkJCXd0X3Nob3J0c3RhdHVzX3N0YXR1cyhudWxsX3Rlcm1pbmF0aW9uLCBpdCwgcyk7CiAJfQotCXJldHVybiBnaXRfZGlmZl91aV9jb25maWcoaywgdiwgY2IpOworCWZvciAoaSA9IDA7IGkgPCBzLT51bnRyYWNrZWQubnI7IGkrKykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQ7CisKKwkJaXQgPSAmKHMtPnVudHJhY2tlZC5pdGVtc1tpXSk7CisJCXd0X3Nob3J0c3RhdHVzX3VudHJhY2tlZChudWxsX3Rlcm1pbmF0aW9uLCBpdCwgcyk7CisJfQorfQorCit2b2lkIHd0X3BvcmNlbGFpbl9wcmludChzdHJ1Y3Qgd3Rfc3RhdHVzICpzLCBpbnQgbnVsbF90ZXJtaW5hdGlvbikKK3sKKwlzLT51c2VfY29sb3IgPSAwOworCXMtPnJlbGF0aXZlX3BhdGhzID0gMDsKKwlzLT5wcmVmaXggPSBOVUxMOworCXd0X3Nob3J0c3RhdHVzX3ByaW50KHMsIG51bGxfdGVybWluYXRpb24pOwogfQpkaWZmIC0tZ2l0IGEvd3Qtc3RhdHVzLmggYi93dC1zdGF0dXMuaAppbmRleCA3OGFkZDA5Li5jNjBmNDBhIDEwMDY0NAotLS0gYS93dC1zdGF0dXMuaAorKysgYi93dC1zdGF0dXMuaApAQCAtMiwxMyArMiwxNiBAQAogI2RlZmluZSBTVEFUVVNfSAogCiAjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgImNvbG9yLmgiCiAKIGVudW0gY29sb3Jfd3Rfc3RhdHVzIHsKLQlXVF9TVEFUVVNfSEVBREVSLAorCVdUX1NUQVRVU19IRUFERVIgPSAwLAogCVdUX1NUQVRVU19VUERBVEVELAogCVdUX1NUQVRVU19DSEFOR0VELAogCVdUX1NUQVRVU19VTlRSQUNLRUQsCiAJV1RfU1RBVFVTX05PQlJBTkNILAorCVdUX1NUQVRVU19VTk1FUkdFRCwKIH07CiAKIGVudW0gdW50cmFja2VkX3N0YXR1c190eXBlIHsKQEAgLTE2LDE2ICsxOSwyOSBAQAogCVNIT1dfTk9STUFMX1VOVFJBQ0tFRF9GSUxFUywKIAlTSE9XX0FMTF9VTlRSQUNLRURfRklMRVMKIH07Ci1leHRlcm4gZW51bSB1bnRyYWNrZWRfc3RhdHVzX3R5cGUgc2hvd191bnRyYWNrZWRfZmlsZXM7CisKK3N0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgeworCWludCB3b3JrdHJlZV9zdGF0dXM7CisJaW50IGluZGV4X3N0YXR1czsKKwlpbnQgc3RhZ2VtYXNrOworCWNoYXIgKmhlYWRfcGF0aDsKK307CiAKIHN0cnVjdCB3dF9zdGF0dXMgewogCWludCBpc19pbml0aWFsOwogCWNoYXIgKmJyYW5jaDsKIAljb25zdCBjaGFyICpyZWZlcmVuY2U7CisJY29uc3QgY2hhciAqKnBhdGhzcGVjOwogCWludCB2ZXJib3NlOwogCWludCBhbWVuZDsKLQlpbnQgdW50cmFja2VkOworCWludCBpbl9tZXJnZTsKIAlpbnQgbm93YXJuOworCWludCB1c2VfY29sb3I7CisJaW50IHJlbGF0aXZlX3BhdGhzOworCWludCBzdWJtb2R1bGVfc3VtbWFyeTsKKwllbnVtIHVudHJhY2tlZF9zdGF0dXNfdHlwZSBzaG93X3VudHJhY2tlZF9maWxlczsKKwljaGFyIGNvbG9yX3BhbGV0dGVbV1RfU1RBVFVTX1VOTUVSR0VEKzFdW0NPTE9SX01BWExFTl07CisKIAkvKiBUaGVzZSBhcmUgY29tcHV0ZWQgZHVyaW5nIHByb2Nlc3Npbmcgb2YgdGhlIGluZGl2aWR1YWwgc2VjdGlvbnMgKi8KIAlpbnQgY29tbWl0YWJsZTsKIAlpbnQgd29ya2Rpcl9kaXJ0eTsKQEAgLTMzLDEyICs0OSwxNSBAQAogCWNvbnN0IGNoYXIgKmluZGV4X2ZpbGU7CiAJRklMRSAqZnA7CiAJY29uc3QgY2hhciAqcHJlZml4OworCXN0cnVjdCBzdHJpbmdfbGlzdCBjaGFuZ2U7CisJc3RydWN0IHN0cmluZ19saXN0IHVudHJhY2tlZDsKIH07CiAKLWludCBnaXRfc3RhdHVzX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYik7Ci1leHRlcm4gaW50IHd0X3N0YXR1c191c2VfY29sb3I7Ci1leHRlcm4gaW50IHd0X3N0YXR1c19yZWxhdGl2ZV9wYXRoczsKIHZvaWQgd3Rfc3RhdHVzX3ByZXBhcmUoc3RydWN0IHd0X3N0YXR1cyAqcyk7CiB2b2lkIHd0X3N0YXR1c19wcmludChzdHJ1Y3Qgd3Rfc3RhdHVzICpzKTsKK3ZvaWQgd3Rfc3RhdHVzX2NvbGxlY3Qoc3RydWN0IHd0X3N0YXR1cyAqcyk7CisKK3ZvaWQgd3Rfc2hvcnRzdGF0dXNfcHJpbnQoc3RydWN0IHd0X3N0YXR1cyAqcywgaW50IG51bGxfdGVybWluYXRpb24pOwordm9pZCB3dF9wb3JjZWxhaW5fcHJpbnQoc3RydWN0IHd0X3N0YXR1cyAqcywgaW50IG51bGxfdGVybWluYXRpb24pOwogCiAjZW5kaWYgLyogU1RBVFVTX0ggKi8KZGlmZiAtLWdpdCBhL3hkaWZmLWludGVyZmFjZS5jIGIveGRpZmYtaW50ZXJmYWNlLmMKaW5kZXggYjliMGRiOC4uMDFmMTRmYiAxMDA2NDQKLS0tIGEveGRpZmYtaW50ZXJmYWNlLmMKKysrIGIveGRpZmYtaW50ZXJmYWNlLmMKQEAgLTMwOSw2ICszMDksMjEgQEAKIAl9CiB9CiAKK3ZvaWQgeGRpZmZfY2xlYXJfZmluZF9mdW5jKHhkZW1pdGNvbmZfdCAqeGVjZmcpCit7CisJaWYgKHhlY2ZnLT5maW5kX2Z1bmMpIHsKKwkJaW50IGk7CisJCXN0cnVjdCBmZl9yZWdzICpyZWdzID0geGVjZmctPmZpbmRfZnVuY19wcml2OworCisJCWZvciAoaSA9IDA7IGkgPCByZWdzLT5ucjsgaSsrKQorCQkJcmVnZnJlZSgmcmVncy0+YXJyYXlbaV0ucmUpOworCQlmcmVlKHJlZ3MtPmFycmF5KTsKKwkJZnJlZShyZWdzKTsKKwkJeGVjZmctPmZpbmRfZnVuYyA9IE5VTEw7CisJCXhlY2ZnLT5maW5kX2Z1bmNfcHJpdiA9IE5VTEw7CisJfQorfQorCiBpbnQgZ2l0X3htZXJnZV9zdHlsZSA9IC0xOwogCiBpbnQgZ2l0X3htZXJnZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCmRpZmYgLS1naXQgYS94ZGlmZi1pbnRlcmZhY2UuaCBiL3hkaWZmLWludGVyZmFjZS5oCmluZGV4IDczNTJiOWEuLjU1NTcyYzMgMTAwNjQ0Ci0tLSBhL3hkaWZmLWludGVyZmFjZS5oCisrKyBiL3hkaWZmLWludGVyZmFjZS5oCkBAIC0yMSw2ICsyMSw3IEBACiBpbnQgYnVmZmVyX2lzX2JpbmFyeShjb25zdCBjaGFyICpwdHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiAKIGV4dGVybiB2b2lkIHhkaWZmX3NldF9maW5kX2Z1bmMoeGRlbWl0Y29uZl90ICp4ZWNmZywgY29uc3QgY2hhciAqbGluZSwgaW50IGNmbGFncyk7CitleHRlcm4gdm9pZCB4ZGlmZl9jbGVhcl9maW5kX2Z1bmMoeGRlbWl0Y29uZl90ICp4ZWNmZyk7CiBleHRlcm4gaW50IGdpdF94bWVyZ2VfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKTsKIGV4dGVybiBpbnQgZ2l0X3htZXJnZV9zdHlsZTsKIApkaWZmIC0tZ2l0IGEveGRpZmYveGRpZmYuaCBiL3hkaWZmL3hkaWZmLmgKaW5kZXggNGRhMDUyYS4uM2Y2MjI5ZSAxMDA2NDQKLS0tIGEveGRpZmYveGRpZmYuaAorKysgYi94ZGlmZi94ZGlmZi5oCkBAIC01OCw2ICs1OCwxMiBAQAogI2RlZmluZSBYRExfTUVSR0VfWkVBTE9VU19BTE5VTSAzCiAjZGVmaW5lIFhETF9NRVJHRV9MRVZFTF9NQVNLIDB4MGYKIAorLyogbWVyZ2UgZmF2b3IgbW9kZXMgKi8KKyNkZWZpbmUgWERMX01FUkdFX0ZBVk9SX09VUlMgMQorI2RlZmluZSBYRExfTUVSR0VfRkFWT1JfVEhFSVJTIDIKKyNkZWZpbmUgWERMX01FUkdFX0ZBVk9SKGZsYWdzKSAoKChmbGFncyk+PjQpICYgMykKKyNkZWZpbmUgWERMX01FUkdFX0ZMQUdTKGxldmVsLCBzdHlsZSwgZmF2b3IpICgobGV2ZWwpfChzdHlsZSl8KChmYXZvcik8PDQpKQorCiAvKiBtZXJnZSBvdXRwdXQgc3R5bGVzICovCiAjZGVmaW5lIFhETF9NRVJHRV9ESUZGMyAweDgwMDAKICNkZWZpbmUgWERMX01FUkdFX1NUWUxFX01BU0sgMHg4MDAwCkBAIC0xMDgsOSArMTE0LDE2IEBACiBpbnQgeGRsX2RpZmYobW1maWxlX3QgKm1mMSwgbW1maWxlX3QgKm1mMiwgeHBwYXJhbV90IGNvbnN0ICp4cHAsCiAJICAgICB4ZGVtaXRjb25mX3QgY29uc3QgKnhlY2ZnLCB4ZGVtaXRjYl90ICplY2IpOwogCit0eXBlZGVmIHN0cnVjdCBzX3htcGFyYW0geworCXhwcGFyYW1fdCB4cHA7CisJaW50IG1hcmtlcl9zaXplOworfSB4bXBhcmFtX3Q7CisKKyNkZWZpbmUgREVGQVVMVF9DT05GTElDVF9NQVJLRVJfU0laRSA3CisKIGludCB4ZGxfbWVyZ2UobW1maWxlX3QgKm9yaWcsIG1tZmlsZV90ICptZjEsIGNvbnN0IGNoYXIgKm5hbWUxLAogCQltbWZpbGVfdCAqbWYyLCBjb25zdCBjaGFyICpuYW1lMiwKLQkJeHBwYXJhbV90IGNvbnN0ICp4cHAsIGludCBsZXZlbCwgbW1idWZmZXJfdCAqcmVzdWx0KTsKKwkJeG1wYXJhbV90IGNvbnN0ICp4bXAsIGludCBmbGFncywgbW1idWZmZXJfdCAqcmVzdWx0KTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS94ZGlmZi94ZGlmZmkuYyBiL3hkaWZmL3hkaWZmaS5jCmluZGV4IDFlYmFiNjguLmRhNjdjMDQgMTAwNjQ0Ci0tLSBhL3hkaWZmL3hkaWZmaS5jCisrKyBiL3hkaWZmL3hkaWZmaS5jCkBAIC0yNiw3ICsyNiw3IEBACiAKICNkZWZpbmUgWERMX01BWF9DT1NUX01JTiAyNTYKICNkZWZpbmUgWERMX0hFVVJfTUlOX0NPU1QgMjU2Ci0jZGVmaW5lIFhETF9MSU5FX01BWCAobG9uZykoKDFVTCA8PCAoOCAqIHNpemVvZihsb25nKSAtIDEpKSAtIDEpCisjZGVmaW5lIFhETF9MSU5FX01BWCAobG9uZykoKDFVTCA8PCAoQ0hBUl9CSVQgKiBzaXplb2YobG9uZykgLSAxKSkgLSAxKQogI2RlZmluZSBYRExfU05BS0VfQ05UIDIwCiAjZGVmaW5lIFhETF9LX0hFVVIgNAogCmRpZmYgLS1naXQgYS94ZGlmZi94bWVyZ2UuYyBiL3hkaWZmL3htZXJnZS5jCmluZGV4IDFjYjY1YTkuLjhjYmU0NWUgMTAwNjQ0Ci0tLSBhL3hkaWZmL3htZXJnZS5jCisrKyBiL3hkaWZmL3htZXJnZS5jCkBAIC0xNDUsMTMgKzE0NSwxNSBAQAogc3RhdGljIGludCBmaWxsX2NvbmZsaWN0X2h1bmsoeGRmZW52X3QgKnhlMSwgY29uc3QgY2hhciAqbmFtZTEsCiAJCQkgICAgICB4ZGZlbnZfdCAqeGUyLCBjb25zdCBjaGFyICpuYW1lMiwKIAkJCSAgICAgIGludCBzaXplLCBpbnQgaSwgaW50IHN0eWxlLAotCQkJICAgICAgeGRtZXJnZV90ICptLCBjaGFyICpkZXN0KQorCQkJICAgICAgeGRtZXJnZV90ICptLCBjaGFyICpkZXN0LCBpbnQgbWFya2VyX3NpemUpCiB7Ci0JY29uc3QgaW50IG1hcmtlcl9zaXplID0gNzsKIAlpbnQgbWFya2VyMV9zaXplID0gKG5hbWUxID8gc3RybGVuKG5hbWUxKSArIDEgOiAwKTsKIAlpbnQgbWFya2VyMl9zaXplID0gKG5hbWUyID8gc3RybGVuKG5hbWUyKSArIDEgOiAwKTsKIAlpbnQgajsKIAorCWlmIChtYXJrZXJfc2l6ZSA8PSAwKQorCQltYXJrZXJfc2l6ZSA9IERFRkFVTFRfQ09ORkxJQ1RfTUFSS0VSX1NJWkU7CisKIAkvKiBCZWZvcmUgY29uZmxpY3RpbmcgcGFydCAqLwogCXNpemUgKz0geGRsX3JlY3NfY29weSh4ZTEsIGksIG0tPmkxIC0gaSwgMCwKIAkJCSAgICAgIGRlc3QgPyBkZXN0ICsgc2l6ZSA6IE5VTEwpOwpAQCAtMjE0LDE0ICsyMTYsMjAgQEAKIAogc3RhdGljIGludCB4ZGxfZmlsbF9tZXJnZV9idWZmZXIoeGRmZW52X3QgKnhlMSwgY29uc3QgY2hhciAqbmFtZTEsCiAJCQkJIHhkZmVudl90ICp4ZTIsIGNvbnN0IGNoYXIgKm5hbWUyLAotCQkJCSB4ZG1lcmdlX3QgKm0sIGNoYXIgKmRlc3QsIGludCBzdHlsZSkKKwkJCQkgaW50IGZhdm9yLAorCQkJCSB4ZG1lcmdlX3QgKm0sIGNoYXIgKmRlc3QsIGludCBzdHlsZSwKKwkJCQkgaW50IG1hcmtlcl9zaXplKQogewogCWludCBzaXplLCBpOwogCiAJZm9yIChzaXplID0gaSA9IDA7IG07IG0gPSBtLT5uZXh0KSB7CisJCWlmIChmYXZvciAmJiAhbS0+bW9kZSkKKwkJCW0tPm1vZGUgPSBmYXZvcjsKKwogCQlpZiAobS0+bW9kZSA9PSAwKQogCQkJc2l6ZSA9IGZpbGxfY29uZmxpY3RfaHVuayh4ZTEsIG5hbWUxLCB4ZTIsIG5hbWUyLAotCQkJCQkJICBzaXplLCBpLCBzdHlsZSwgbSwgZGVzdCk7CisJCQkJCQkgIHNpemUsIGksIHN0eWxlLCBtLCBkZXN0LAorCQkJCQkJICBtYXJrZXJfc2l6ZSk7CiAJCWVsc2UgaWYgKG0tPm1vZGUgPT0gMSkKIAkJCXNpemUgKz0geGRsX3JlY3NfY29weSh4ZTEsIGksIG0tPmkxICsgbS0+Y2hnMSAtIGksIDAsCiAJCQkJCSAgICAgIGRlc3QgPyBkZXN0ICsgc2l6ZSA6IE5VTEwpOwpAQCAtMzg2LDExICszOTQsMTMgQEAKICAqLwogc3RhdGljIGludCB4ZGxfZG9fbWVyZ2UoeGRmZW52X3QgKnhlMSwgeGRjaGFuZ2VfdCAqeHNjcjEsIGNvbnN0IGNoYXIgKm5hbWUxLAogCQl4ZGZlbnZfdCAqeGUyLCB4ZGNoYW5nZV90ICp4c2NyMiwgY29uc3QgY2hhciAqbmFtZTIsCi0JCWludCBmbGFncywgeHBwYXJhbV90IGNvbnN0ICp4cHAsIG1tYnVmZmVyX3QgKnJlc3VsdCkgeworCQlpbnQgZmxhZ3MsIHhtcGFyYW1fdCBjb25zdCAqeG1wLCBtbWJ1ZmZlcl90ICpyZXN1bHQpIHsKIAl4ZG1lcmdlX3QgKmNoYW5nZXMsICpjOworCXhwcGFyYW1fdCBjb25zdCAqeHBwID0gJnhtcC0+eHBwOwogCWludCBpMCwgaTEsIGkyLCBjaGcwLCBjaGcxLCBjaGcyOwogCWludCBsZXZlbCA9IGZsYWdzICYgWERMX01FUkdFX0xFVkVMX01BU0s7CiAJaW50IHN0eWxlID0gZmxhZ3MgJiBYRExfTUVSR0VfU1RZTEVfTUFTSzsKKwlpbnQgZmF2b3IgPSBYRExfTUVSR0VfRkFWT1IoZmxhZ3MpOwogCiAJaWYgKHN0eWxlID09IFhETF9NRVJHRV9ESUZGMykgewogCQkvKgpAQCAtNTIyLDI2ICs1MzIsMjkgQEAKIAl9CiAJLyogb3V0cHV0ICovCiAJaWYgKHJlc3VsdCkgeworCQlpbnQgbWFya2VyX3NpemUgPSB4bXAtPm1hcmtlcl9zaXplOwogCQlpbnQgc2l6ZSA9IHhkbF9maWxsX21lcmdlX2J1ZmZlcih4ZTEsIG5hbWUxLCB4ZTIsIG5hbWUyLAotCQkJY2hhbmdlcywgTlVMTCwgc3R5bGUpOworCQkJCQkJIGZhdm9yLCBjaGFuZ2VzLCBOVUxMLCBzdHlsZSwKKwkJCQkJCSBtYXJrZXJfc2l6ZSk7CiAJCXJlc3VsdC0+cHRyID0geGRsX21hbGxvYyhzaXplKTsKIAkJaWYgKCFyZXN1bHQtPnB0cikgewogCQkJeGRsX2NsZWFudXBfbWVyZ2UoY2hhbmdlcyk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAkJcmVzdWx0LT5zaXplID0gc2l6ZTsKLQkJeGRsX2ZpbGxfbWVyZ2VfYnVmZmVyKHhlMSwgbmFtZTEsIHhlMiwgbmFtZTIsIGNoYW5nZXMsCi0JCQkJICAgICAgcmVzdWx0LT5wdHIsIHN0eWxlKTsKKwkJeGRsX2ZpbGxfbWVyZ2VfYnVmZmVyKHhlMSwgbmFtZTEsIHhlMiwgbmFtZTIsIGZhdm9yLCBjaGFuZ2VzLAorCQkJCSAgICAgIHJlc3VsdC0+cHRyLCBzdHlsZSwgbWFya2VyX3NpemUpOwogCX0KIAlyZXR1cm4geGRsX2NsZWFudXBfbWVyZ2UoY2hhbmdlcyk7CiB9CiAKIGludCB4ZGxfbWVyZ2UobW1maWxlX3QgKm9yaWcsIG1tZmlsZV90ICptZjEsIGNvbnN0IGNoYXIgKm5hbWUxLAogCQltbWZpbGVfdCAqbWYyLCBjb25zdCBjaGFyICpuYW1lMiwKLQkJeHBwYXJhbV90IGNvbnN0ICp4cHAsIGludCBmbGFncywgbW1idWZmZXJfdCAqcmVzdWx0KSB7CisJCXhtcGFyYW1fdCBjb25zdCAqeG1wLCBpbnQgZmxhZ3MsIG1tYnVmZmVyX3QgKnJlc3VsdCkgewogCXhkY2hhbmdlX3QgKnhzY3IxLCAqeHNjcjI7CiAJeGRmZW52X3QgeGUxLCB4ZTI7CiAJaW50IHN0YXR1czsKKwl4cHBhcmFtX3QgY29uc3QgKnhwcCA9ICZ4bXAtPnhwcDsKIAogCXJlc3VsdC0+cHRyID0gTlVMTDsKIAlyZXN1bHQtPnNpemUgPSAwOwpAQCAtNTc0LDcgKzU4Nyw3IEBACiAJfSBlbHNlIHsKIAkJc3RhdHVzID0geGRsX2RvX21lcmdlKCZ4ZTEsIHhzY3IxLCBuYW1lMSwKIAkJCQkgICAgICAmeGUyLCB4c2NyMiwgbmFtZTIsCi0JCQkJICAgICAgZmxhZ3MsIHhwcCwgcmVzdWx0KTsKKwkJCQkgICAgICBmbGFncywgeG1wLCByZXN1bHQpOwogCX0KIAl4ZGxfZnJlZV9zY3JpcHQoeHNjcjEpOwogCXhkbF9mcmVlX3NjcmlwdCh4c2NyMik7CmRpZmYgLS1naXQgYS94ZGlmZi94dXRpbHMuYyBiL3hkaWZmL3h1dGlscy5jCmluZGV4IDA0YWQ0NjguLmJjMTJmMjkgMTAwNjQ0Ci0tLSBhL3hkaWZmL3h1dGlscy5jCisrKyBiL3hkaWZmL3h1dGlscy5jCkBAIC0xOTAsNDggKzE5MCw2NiBAQAogewogCWludCBpMSwgaTI7CiAKKwlpZiAoIShmbGFncyAmIFhERl9XSElURVNQQUNFX0ZMQUdTKSkKKwkJcmV0dXJuIHMxID09IHMyICYmICFtZW1jbXAobDEsIGwyLCBzMSk7CisKKwlpMSA9IDA7CisJaTIgPSAwOworCisJLyoKKwkgKiAtdyBtYXRjaGVzIGV2ZXJ5dGhpbmcgdGhhdCBtYXRjaGVzIHdpdGggLWIsIGFuZCAtYiBpbiB0dXJuCisJICogbWF0Y2hlcyBldmVyeXRoaW5nIHRoYXQgbWF0Y2hlcyB3aXRoIC0taWdub3JlLXNwYWNlLWF0LWVvbC4KKwkgKgorCSAqIEVhY2ggZmxhdm9yIG9mIGlnbm9yaW5nIG5lZWRzIGRpZmZlcmVudCBsb2dpYyB0byBza2lwIHdoaXRlc3BhY2VzCisJICogd2hpbGUgd2UgaGF2ZSBib3RoIHNpZGVzIHRvIGNvbXBhcmUuCisJICovCiAJaWYgKGZsYWdzICYgWERGX0lHTk9SRV9XSElURVNQQUNFKSB7Ci0JCWZvciAoaTEgPSBpMiA9IDA7IGkxIDwgczEgJiYgaTIgPCBzMjsgKSB7Ci0JCQlpZiAoaXNzcGFjZShsMVtpMV0pKQotCQkJCXdoaWxlIChpc3NwYWNlKGwxW2kxXSkgJiYgaTEgPCBzMSkKLQkJCQkJaTErKzsKLQkJCWlmIChpc3NwYWNlKGwyW2kyXSkpCi0JCQkJd2hpbGUgKGlzc3BhY2UobDJbaTJdKSAmJiBpMiA8IHMyKQotCQkJCQlpMisrOwotCQkJaWYgKGkxIDwgczEgJiYgaTIgPCBzMiAmJiBsMVtpMSsrXSAhPSBsMltpMisrXSkKKwkJZ290byBza2lwX3dzOworCQl3aGlsZSAoaTEgPCBzMSAmJiBpMiA8IHMyKSB7CisJCQlpZiAobDFbaTErK10gIT0gbDJbaTIrK10pCiAJCQkJcmV0dXJuIDA7CisJCXNraXBfd3M6CisJCQl3aGlsZSAoaTEgPCBzMSAmJiBpc3NwYWNlKGwxW2kxXSkpCisJCQkJaTErKzsKKwkJCXdoaWxlIChpMiA8IHMyICYmIGlzc3BhY2UobDJbaTJdKSkKKwkJCQlpMisrOwogCQl9Ci0JCXJldHVybiAoaTEgPj0gczEgJiYgaTIgPj0gczIpOwogCX0gZWxzZSBpZiAoZmxhZ3MgJiBYREZfSUdOT1JFX1dISVRFU1BBQ0VfQ0hBTkdFKSB7Ci0JCWZvciAoaTEgPSBpMiA9IDA7IGkxIDwgczEgJiYgaTIgPCBzMjsgKSB7Ci0JCQlpZiAoaXNzcGFjZShsMVtpMV0pKSB7Ci0JCQkJaWYgKCFpc3NwYWNlKGwyW2kyXSkpCi0JCQkJCXJldHVybiAwOwotCQkJCXdoaWxlIChpc3NwYWNlKGwxW2kxXSkgJiYgaTEgPCBzMSkKLQkJCQkJaTErKzsKLQkJCQl3aGlsZSAoaXNzcGFjZShsMltpMl0pICYmIGkyIDwgczIpCi0JCQkJCWkyKys7Ci0JCQl9IGVsc2UgaWYgKGwxW2kxKytdICE9IGwyW2kyKytdKQotCQkJCXJldHVybiAwOwotCQl9Ci0JCXJldHVybiAoaTEgPj0gczEgJiYgaTIgPj0gczIpOwotCX0gZWxzZSBpZiAoZmxhZ3MgJiBYREZfSUdOT1JFX1dISVRFU1BBQ0VfQVRfRU9MKSB7Ci0JCWZvciAoaTEgPSBpMiA9IDA7IGkxIDwgczEgJiYgaTIgPCBzMjsgKSB7Ci0JCQlpZiAobDFbaTFdICE9IGwyW2kyXSkgeworCQl3aGlsZSAoaTEgPCBzMSAmJiBpMiA8IHMyKSB7CisJCQlpZiAoaXNzcGFjZShsMVtpMV0pICYmIGlzc3BhY2UobDJbaTJdKSkgeworCQkJCS8qIFNraXAgbWF0Y2hpbmcgc3BhY2VzIGFuZCB0cnkgYWdhaW4gKi8KIAkJCQl3aGlsZSAoaTEgPCBzMSAmJiBpc3NwYWNlKGwxW2kxXSkpCiAJCQkJCWkxKys7CiAJCQkJd2hpbGUgKGkyIDwgczIgJiYgaXNzcGFjZShsMltpMl0pKQogCQkJCQlpMisrOwotCQkJCWlmIChpMSA8IHMxIHx8IGkyIDwgczIpCi0JCQkJCXJldHVybiAwOwotCQkJCXJldHVybiAxOworCQkJCWNvbnRpbnVlOwogCQkJfQotCQkJaTErKzsKLQkJCWkyKys7CisJCQlpZiAobDFbaTErK10gIT0gbDJbaTIrK10pCisJCQkJcmV0dXJuIDA7CiAJCX0KLQkJcmV0dXJuIGkxID49IHMxICYmIGkyID49IHMyOwotCX0gZWxzZQotCQlyZXR1cm4gczEgPT0gczIgJiYgIW1lbWNtcChsMSwgbDIsIHMxKTsKKwl9IGVsc2UgaWYgKGZsYWdzICYgWERGX0lHTk9SRV9XSElURVNQQUNFX0FUX0VPTCkgeworCQl3aGlsZSAoaTEgPCBzMSAmJiBpMiA8IHMyICYmIGwxW2kxKytdID09IGwyW2kyKytdKQorCQkJOyAvKiBrZWVwIGdvaW5nICovCisJfQorCisJLyoKKwkgKiBBZnRlciBydW5uaW5nIG91dCBvZiBvbmUgc2lkZSwgdGhlIHJlbWFpbmluZyBzaWRlIG11c3QgaGF2ZQorCSAqIG5vdGhpbmcgYnV0IHdoaXRlc3BhY2UgZm9yIHRoZSBsaW5lcyB0byBtYXRjaC4gIE5vdGUgdGhhdAorCSAqIGlnbm9yZS13aGl0ZXNwYWNlLWF0LWVvbCBjYXNlIG1heSBicmVhayBvdXQgb2YgdGhlIGxvb3AKKwkgKiB3aGlsZSB0aGVyZSBzdGlsbCBhcmUgY2hhcmFjdGVycyByZW1haW5pbmcgb24gYm90aCBsaW5lcy4KKwkgKi8KKwlpZiAoaTEgPCBzMSkgeworCQl3aGlsZSAoaTEgPCBzMSAmJiBpc3NwYWNlKGwxW2kxXSkpCisJCQlpMSsrOworCQlpZiAoczEgIT0gaTEpCisJCQlyZXR1cm4gMDsKKwl9CisJaWYgKGkyIDwgczIpIHsKKwkJd2hpbGUgKGkyIDwgczIgJiYgaXNzcGFjZShsMltpMl0pKQorCQkJaTIrKzsKKwkJcmV0dXJuIChzMiA9PSBpMik7CisJfQorCXJldHVybiAxOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB4ZGxfaGFzaF9yZWNvcmRfd2l0aF93aGl0ZXNwYWNlKGNoYXIgY29uc3QgKipkYXRhLApAQCAtMjQyLDE4ICsyNjAsMjAgQEAKIAlmb3IgKDsgcHRyIDwgdG9wICYmICpwdHIgIT0gJ1xuJzsgcHRyKyspIHsKIAkJaWYgKGlzc3BhY2UoKnB0cikpIHsKIAkJCWNvbnN0IGNoYXIgKnB0cjIgPSBwdHI7CisJCQlpbnQgYXRfZW9sOwogCQkJd2hpbGUgKHB0ciArIDEgPCB0b3AgJiYgaXNzcGFjZShwdHJbMV0pCiAJCQkJCSYmIHB0clsxXSAhPSAnXG4nKQogCQkJCXB0cisrOworCQkJYXRfZW9sID0gKHRvcCA8PSBwdHIgKyAxIHx8IHB0clsxXSA9PSAnXG4nKTsKIAkJCWlmIChmbGFncyAmIFhERl9JR05PUkVfV0hJVEVTUEFDRSkKIAkJCQk7IC8qIGFscmVhZHkgaGFuZGxlZCAqLwogCQkJZWxzZSBpZiAoZmxhZ3MgJiBYREZfSUdOT1JFX1dISVRFU1BBQ0VfQ0hBTkdFCi0JCQkJCSYmIHB0clsxXSAhPSAnXG4nKSB7CisJCQkJICYmICFhdF9lb2wpIHsKIAkJCQloYSArPSAoaGEgPDwgNSk7CiAJCQkJaGEgXj0gKHVuc2lnbmVkIGxvbmcpICcgJzsKIAkJCX0KIAkJCWVsc2UgaWYgKGZsYWdzICYgWERGX0lHTk9SRV9XSElURVNQQUNFX0FUX0VPTAotCQkJCQkmJiBwdHJbMV0gIT0gJ1xuJykgeworCQkJCSAmJiAhYXRfZW9sKSB7CiAJCQkJd2hpbGUgKHB0cjIgIT0gcHRyICsgMSkgewogCQkJCQloYSArPSAoaGEgPDwgNSk7CiAJCQkJCWhhIF49ICh1bnNpZ25lZCBsb25nKSAqcHRyMjsK