ZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy9hdHRyaWJzLnB5IGIvcHl0aG9uL3Rlc3RzL2F0dHJpYnMucHkKaW5kZXggOTMzMWEyNy4uOTkxMzJjMiAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL2F0dHJpYnMucHkKKysrIGIvcHl0aG9uL3Rlc3RzL2F0dHJpYnMucHkKQEAgLTIwLDcgKzIwLDcgQEAKIGVsZW0gPSBkb2MuZ2V0Um9vdEVsZW1lbnQoKQogYXR0ciA9IGVsZW0uaGFzTnNQcm9wKCdhdHRyJywgJ2h0dHA6Ly9hYmMub3JnJykKIGlmIGF0dHIgPT0gTm9uZSBvciBhdHRyLnNlcmlhbGl6ZSgpWzotMV0gIT0gIiIiPCFBVFRMSVNUIHRlc3QgYWJjOmF0dHIgQ0RBVEEgI0ZJWEVEICJkZWYiPiIiIjoKLSAgICBwcmludCAiRmFpbGVkIHRvIGZpbmQgZGVmYXVsdGVkIGF0dHJpYnV0ZSBhYmM6YXR0ciIKKyAgICBwcmludCgiRmFpbGVkIHRvIGZpbmQgZGVmYXVsdGVkIGF0dHJpYnV0ZSBhYmM6YXR0ciIpCiAgICAgc3lzLmV4aXQoMSkKIAogZG9jLmZyZWVEb2MoKQpAQCAtMjgsNyArMjgsNyBAQAogIyBNZW1vcnkgZGVidWcgc3BlY2lmaWMKIGxpYnhtbDIuY2xlYW51cFBhcnNlcigpCiBpZiBsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpID09IDA6Ci0gICAgcHJpbnQgIk9LIgorICAgIHByaW50KCJPSyIpCiBlbHNlOgotICAgIHByaW50ICJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkKKyAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQogICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvYnVpbGQucHkgYi9weXRob24vdGVzdHMvYnVpbGQucHkKaW5kZXggYmZjNzc2Yy4uYjJkM2Y3OCAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL2J1aWxkLnB5CisrKyBiL3B5dGhvbi90ZXN0cy9idWlsZC5weQpAQCAtMjMsMjkgKzIzLDI5IEBACiBjb21tZW50ID0gZG9jLmNoaWxkcmVuCiBpZiBjb21tZW50LnR5cGUgIT0gImNvbW1lbnQiIG9yIFwKICAgIGNvbW1lbnQuY29udGVudCAhPSAiVGhpcyBpcyBhIGdlbmVyYXRlZCBkb2N1bWVudCI6Ci0gICBwcmludCAiZXJyb3IgcmVyZWFkaW5nIGNvbW1lbnQiCisgICBwcmludCgiZXJyb3IgcmVyZWFkaW5nIGNvbW1lbnQiKQogICAgc3lzLmV4aXQoMSkKIHBpID0gY29tbWVudC5uZXh0CiBpZiBwaS50eXBlICE9ICJwaSIgb3IgcGkubmFtZSAhPSAidGVzdCIgb3IgcGkuY29udGVudCAhPSAiUEkgY29udGVudCI6Ci0gICBwcmludCAiZXJyb3IgcmVyZWFkaW5nIFBJIgorICAgcHJpbnQoImVycm9yIHJlcmVhZGluZyBQSSIpCiAgICBzeXMuZXhpdCgxKQogcm9vdCA9IHBpLm5leHQKIGlmIHJvb3QubmFtZSAhPSAiZG9jIjoKLSAgIHByaW50ICJlcnJvciByZXJlYWRpbmcgcm9vdCIKKyAgIHByaW50KCJlcnJvciByZXJlYWRpbmcgcm9vdCIpCiAgICBzeXMuZXhpdCgxKQogbnMgPSByb290Lm5zKCkKIGlmIG5zLm5hbWUgIT0gIm15IiBvciBucy5jb250ZW50ICE9ICJodHRwOi8vZXhhbXBsZS5jb20vZG9jIjoKLSAgIHByaW50ICJlcnJvciByZXJlYWRpbmcgbmFtZXNwYWNlIgorICAgcHJpbnQoImVycm9yIHJlcmVhZGluZyBuYW1lc3BhY2UiKQogICAgc3lzLmV4aXQoMSkKIGVsZW0gPSByb290LmNoaWxkcmVuCiBpZiBlbGVtLm5hbWUgIT0gImZvbyI6Ci0gICBwcmludCAiZXJyb3IgcmVyZWFkaW5nIGVsZW0iCisgICBwcmludCgiZXJyb3IgcmVyZWFkaW5nIGVsZW0iKQogICAgc3lzLmV4aXQoMSkKIGlmIGVsZW0uZ2V0QmFzZShOb25lKSAhPSAiaHR0cDovL2V4YW1wbGUuY29tL2ltZ3MiOgotICAgcHJpbnQgImVycm9yIHJlcmVhZGluZyBiYXNlIgorICAgcHJpbnQoImVycm9yIHJlcmVhZGluZyBiYXNlIikKICAgIHN5cy5leGl0KDEpCiBpZiBlbGVtLnByb3AoImltZyIpICE9ICJpbWFnZS5naWYiOgotICAgcHJpbnQgImVycm9yIHJlcmVhZGluZyBwcm9wZXJ0eSIKKyAgIHByaW50KCJlcnJvciByZXJlYWRpbmcgcHJvcGVydHkiKQogICAgc3lzLmV4aXQoMSkKIAogZG9jLmZyZWVEb2MoKQpAQCAtNTMsNyArNTMsNyBAQAogIyBNZW1vcnkgZGVidWcgc3BlY2lmaWMKIGxpYnhtbDIuY2xlYW51cFBhcnNlcigpCiBpZiBsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpID09IDA6Ci0gICAgcHJpbnQgIk9LIgorICAgIHByaW50KCJPSyIpCiBlbHNlOgotICAgIHByaW50ICJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkKKyAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQogICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvY29tcGFyZU5vZGVzLnB5IGIvcHl0aG9uL3Rlc3RzL2NvbXBhcmVOb2Rlcy5weQppbmRleCBlYzA0MzIzLi5jYTVhNWEyIDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMvY29tcGFyZU5vZGVzLnB5CisrKyBiL3B5dGhvbi90ZXN0cy9jb21wYXJlTm9kZXMucHkKQEAgLTE3LDI1ICsxNywyNSBAQAogCiAjIE5vdyBjaGVjayB0aGF0IFtpbl1lcXVhbGl0eSB0ZXN0cyB3b3JrIG9rCiBpZiBub3QgKCBmb29ub2RlMSA9PSBmb29ub2RlMiApOgotICAgIHByaW50ICJFcnJvciBjb21wYXJpbmcgbm9kZXMgd2l0aCA9PSwgbm9kZXMgc2hvdWxkIGJlIGVxdWFsIGJ1dCBhcmUgdW5lcXVhbCIKKyAgICBwcmludCgiRXJyb3IgY29tcGFyaW5nIG5vZGVzIHdpdGggPT0sIG5vZGVzIHNob3VsZCBiZSBlcXVhbCBidXQgYXJlIHVuZXF1YWwiKQogICAgIHN5cy5leGl0KDEpCiBpZiBub3QgKCBmb29ub2RlMSAhPSByb290ICk6Ci0gICAgcHJpbnQgIkVycm9yIGNvbXBhcmluZyBub2RlcyB3aXRoID09LCBub2RlcyBzaG91bGQgbm90IGJlIGVxdWFsIGJ1dCBhcmUgZXF1YWwiCisgICAgcHJpbnQoIkVycm9yIGNvbXBhcmluZyBub2RlcyB3aXRoID09LCBub2RlcyBzaG91bGQgbm90IGJlIGVxdWFsIGJ1dCBhcmUgZXF1YWwiKQogICAgIHN5cy5leGl0KDEpCiBpZiBub3QgKCBmb29ub2RlMSAhPSByb290ICk6Ci0gICAgcHJpbnQgIkVycm9yIGNvbXBhcmluZyBub2RlcyB3aXRoICE9LCBub2RlcyBzaG91bGQgbm90IGJlIGVxdWFsIGJ1dCBhcmUgZXF1YWwiCisgICAgcHJpbnQoIkVycm9yIGNvbXBhcmluZyBub2RlcyB3aXRoICE9LCBub2RlcyBzaG91bGQgbm90IGJlIGVxdWFsIGJ1dCBhcmUgZXF1YWwiKQogaWYgKCBmb29ub2RlMSAhPSBmb29ub2RlMiApOgotICAgIHByaW50ICJFcnJvciBjb21wYXJpbmcgbm9kZXMgd2l0aCAhPSwgbm9kZXMgc2hvdWxkIGJlIGVxdWFsIGJ1dCBhcmUgdW5lcXVhbCIKKyAgICBwcmludCgiRXJyb3IgY29tcGFyaW5nIG5vZGVzIHdpdGggIT0sIG5vZGVzIHNob3VsZCBiZSBlcXVhbCBidXQgYXJlIHVuZXF1YWwiKQogCiAjIE5leHQgY2hlY2sgdGhhdCB0aGUgaGFzaCBmdW5jdGlvbiBmb3IgdGhlIG9iamVjdHMgYWxzbyB3b3JrcyBvawogaWYgbm90IChoYXNoKGZvb25vZGUxKSA9PSBoYXNoKGZvb25vZGUyKSk6Ci0gICAgcHJpbnQgIkVycm9yIGhhc2ggdmFsdWVzIGZvciB0d28gZXF1YWwgbm9kZXMgYXJlIGRpZmZlcmVudCIKKyAgICBwcmludCgiRXJyb3IgaGFzaCB2YWx1ZXMgZm9yIHR3byBlcXVhbCBub2RlcyBhcmUgZGlmZmVyZW50IikKICAgICBzeXMuZXhpdCgxKQogaWYgbm90IChoYXNoKGZvb25vZGUxKSAhPSBoYXNoKHJvb3QpKToKLSAgICBwcmludCAiRXJyb3IgaGFzaCB2YWx1ZXMgZm9yIHR3byB1bmVxdWFsIG5vZGVzIGFyZSBub3QgZGlmZmVyZW50IgorICAgIHByaW50KCJFcnJvciBoYXNoIHZhbHVlcyBmb3IgdHdvIHVuZXF1YWwgbm9kZXMgYXJlIG5vdCBkaWZmZXJlbnQiKQogICAgIHN5cy5leGl0KDEpCiBpZiBoYXNoKGZvb25vZGUxKSA9PSBoYXNoKHJvb3QpOgotICAgIHByaW50ICJFcnJvciBoYXNoIHZhbHVlcyBmb3IgdHdvIHVuZXF1YWwgbm9kZXMgYXJlIGVxdWFsIgorICAgIHByaW50KCJFcnJvciBoYXNoIHZhbHVlcyBmb3IgdHdvIHVuZXF1YWwgbm9kZXMgYXJlIGVxdWFsIikKICAgICBzeXMuZXhpdCgxKQogCiAjIEJhc2ljIHRlc3RzIHN1Y2Nlc3NmdWwKQEAgLTQ0LDcgKzQ0LDcgQEAKICMgTWVtb3J5IGRlYnVnIHNwZWNpZmljCiBsaWJ4bWwyLmNsZWFudXBQYXJzZXIoKQogaWYgbGlieG1sMi5kZWJ1Z01lbW9yeSgxKSA9PSAwOgotICAgIHByaW50ICJPSyIKKyAgICBwcmludCgiT0siKQogZWxzZToKLSAgICBwcmludCAiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpCisgICAgcHJpbnQoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKSkKICAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKQpkaWZmIC0tZ2l0IGEvcHl0aG9uL3Rlc3RzL2N0eHRlcnJvci5weSBiL3B5dGhvbi90ZXN0cy9jdHh0ZXJyb3IucHkKaW5kZXggZjJhODk3YS4uNDE2ZTM4NCAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL2N0eHRlcnJvci5weQorKysgYi9weXRob24vdGVzdHMvY3R4dGVycm9yLnB5CkBAIC0yMyw3ICsyMyw3IEBACiBwYXJzZXJDdHh0ID0gbGlieG1sMi5jcmVhdGVQdXNoUGFyc2VyKE5vbmUsIiIsMCwidGVzdC54bWwiKQogcGFyc2VyQ3R4dC5zZXRFcnJvckhhbmRsZXIoY2FsbGJhY2ssICItLT4iKQogaWYgcGFyc2VyQ3R4dC5nZXRFcnJvckhhbmRsZXIoKSAhPSAoY2FsbGJhY2ssIi0tPiIpOgotICAgIHByaW50ICJnZXRFcnJvckhhbmRsZXIgZmFpbGVkIgorICAgIHByaW50KCJnZXRFcnJvckhhbmRsZXIgZmFpbGVkIikKICAgICBzeXMuZXhpdCgxKQogcGFyc2VyQ3R4dC5wYXJzZUNodW5rKHMsbGVuKHMpLDEpCiBkb2MgPSBwYXJzZXJDdHh0LmRvYygpCkBAIC0zMSw5ICszMSw5IEBACiBwYXJzZXJDdHh0ID0gTm9uZQogCiBpZiBlcnIgIT0gZXhwZWN0OgotICAgIHByaW50ICJlcnJvciIKLSAgICBwcmludCAicmVjZWl2ZWQgJXMiICUoZXJyKQotICAgIHByaW50ICJleHBlY3RlZCAlcyIgJShleHBlY3QpCisgICAgcHJpbnQoImVycm9yIikKKyAgICBwcmludCgicmVjZWl2ZWQgJXMiICUoZXJyKSkKKyAgICBwcmludCgiZXhwZWN0ZWQgJXMiICUoZXhwZWN0KSkKICAgICBzeXMuZXhpdCgxKQogCiBpID0gMTAwMDAKQEAgLTUwLDcgKzUwLDcgQEAKICMgTWVtb3J5IGRlYnVnIHNwZWNpZmljCiBsaWJ4bWwyLmNsZWFudXBQYXJzZXIoKQogaWYgbGlieG1sMi5kZWJ1Z01lbW9yeSgxKSA9PSAwOgotICAgIHByaW50ICJPSyIKKyAgICBwcmludCgiT0siKQogZWxzZToKLSAgICBwcmludCAiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpCisgICAgcHJpbnQoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKSkKICAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKQpkaWZmIC0tZ2l0IGEvcHl0aG9uL3Rlc3RzL2N1dG5wYXN0ZS5weSBiL3B5dGhvbi90ZXN0cy9jdXRucGFzdGUucHkKaW5kZXggMGY5NjY1YS4uNzc4NzI0NiAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL2N1dG5wYXN0ZS5weQorKysgYi9weXRob24vdGVzdHMvY3V0bnBhc3RlLnB5CkBAIC0zNSwxNCArMzUsMTQgQEAKICMgY2hlY2sgdGhlIHJlc3VsdGluZyB0cmVlCiBzdHIgPSBkZXN0LnNlcmlhbGl6ZSgpCiBpZiBzdHIgIT0gIiIiPHJvb3QgeG1sbnM6Zm9vYmFyPSJodHRwOi8vZXhhbXBsZS5vcmcvYmFyIiB4bWxuczpkZWZhdWx0PSJodHRwOi8vZXhhbXBsZS5vcmcvaW5jbHVkZSIgeG1sbnM6Zm9vPSJodHRwOi8vZXhhbXBsZS5vcmcvZm9vIj48ZGVmYXVsdDpmcmFnbWVudD48Zm9vOmVsZW0gYmFyPSJ0cmlja3kiLz48L2RlZmF1bHQ6ZnJhZ21lbnQ+PC9yb290PiIiIjoKLSAgICBwcmludCAicmVjb25jaWxpYXRlTnMoKSBmYWlsZWQiCisgICAgcHJpbnQoInJlY29uY2lsaWF0ZU5zKCkgZmFpbGVkIikKICAgICBzeXMuZXhpdCgxKQogdGFyZ2V0LmZyZWVEb2MoKQogCiAjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwogbGlieG1sMi5jbGVhbnVwUGFyc2VyKCkKIGlmIGxpYnhtbDIuZGVidWdNZW1vcnkoMSkgPT0gMDoKLSAgICBwcmludCAiT0siCisgICAgcHJpbnQoIk9LIikKIGVsc2U6Ci0gICAgcHJpbnQgIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKQorICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCiAgICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy9kdGR2YWxpZC5weSBiL3B5dGhvbi90ZXN0cy9kdGR2YWxpZC5weQppbmRleCAyMDExZjJjLi5kNDA0OWI4IDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMvZHRkdmFsaWQucHkKKysrIGIvcHl0aG9uL3Rlc3RzL2R0ZHZhbGlkLnB5CkBAIC0xNCw3ICsxNCw3IEBACiBkb2MgPSBsaWJ4bWwyLnBhcnNlRG9jKGluc3RhbmNlKQogcmV0ID0gZG9jLnZhbGlkYXRlRHRkKGN0eHQsIGR0ZCkKIGlmIHJldCAhPSAxOgotICAgIHByaW50ICJlcnJvciBkb2luZyBEVEQgdmFsaWRhdGlvbiIKKyAgICBwcmludCgiZXJyb3IgZG9pbmcgRFREIHZhbGlkYXRpb24iKQogICAgIHN5cy5leGl0KDEpCiAKIGRvYy5mcmVlRG9jKCkKQEAgLTI1LDggKzI1LDggQEAKICMgTWVtb3J5IGRlYnVnIHNwZWNpZmljCiBsaWJ4bWwyLmNsZWFudXBQYXJzZXIoKQogaWYgbGlieG1sMi5kZWJ1Z01lbW9yeSgxKSA9PSAwOgotICAgIHByaW50ICJPSyIKKyAgICBwcmludCgiT0siKQogZWxzZToKLSAgICBwcmludCAiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpCisgICAgcHJpbnQoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKSkKICAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKQogCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvZXJyb3IucHkgYi9weXRob24vdGVzdHMvZXJyb3IucHkKaW5kZXggZGE2ZDBjMS4uNTMwYzJlZSAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL2Vycm9yLnB5CisrKyBiL3B5dGhvbi90ZXN0cy9lcnJvci5weQpAQCAtMjQsMTMgKzI0LDEzIEBACiAgICAgZ290X2V4YyA9IDEKIAogaWYgZ290X2V4YyA9PSAwOgotICAgIHByaW50ICJGYWlsZWQgdG8gZ2V0IGEgcGFyc2VyIGV4Y2VwdGlvbiIKKyAgICBwcmludCgiRmFpbGVkIHRvIGdldCBhIHBhcnNlciBleGNlcHRpb24iKQogICAgIHN5cy5leGl0KDEpCiAKIGlmIGVyciAhPSBleHBlY3Q6Ci0gICAgcHJpbnQgImVycm9yIgotICAgIHByaW50ICJyZWNlaXZlZCAlcyIgJShlcnIpCi0gICAgcHJpbnQgImV4cGVjdGVkICVzIiAlKGV4cGVjdCkKKyAgICBwcmludCgiZXJyb3IiKQorICAgIHByaW50KCJyZWNlaXZlZCAlcyIgJShlcnIpKQorICAgIHByaW50KCJleHBlY3RlZCAlcyIgJShleHBlY3QpKQogICAgIHN5cy5leGl0KDEpCiAKIGkgPSAxMDAwMApAQCAtNDUsNyArNDUsNyBAQAogIyBNZW1vcnkgZGVidWcgc3BlY2lmaWMKIGxpYnhtbDIuY2xlYW51cFBhcnNlcigpCiBpZiBsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpID09IDA6Ci0gICAgcHJpbnQgIk9LIgorICAgIHByaW50KCJPSyIpCiBlbHNlOgotICAgIHByaW50ICJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkKKyAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQogICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvaW5idWYucHkgYi9weXRob24vdGVzdHMvaW5idWYucHkKaW5kZXggYTdjYzdhNi4uMGMxNjY3NCAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL2luYnVmLnB5CisrKyBiL3B5dGhvbi90ZXN0cy9pbmJ1Zi5weQpAQCAtMSwxNCArMSwxOSBAQAogIyEvdXNyL2Jpbi9weXRob24gLXUKIGltcG9ydCBzeXMKIGltcG9ydCBsaWJ4bWwyCi1pbXBvcnQgU3RyaW5nSU8KK3RyeToKKyAgICBpbXBvcnQgU3RyaW5nSU8KKyAgICBzdHJfaW8gPSBTdHJpbmdJTy5TdHJpbmdJTworZXhjZXB0OgorICAgIGltcG9ydCBpbworICAgIHN0cl9pbyA9IGlvLlN0cmluZ0lPCiAKICMgTWVtb3J5IGRlYnVnIHNwZWNpZmljCiBsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpCiAKIGkgPSAwCiB3aGlsZSBpIDwgNTAwMDoKLSAgICBmID0gU3RyaW5nSU8uU3RyaW5nSU8oImZvb2JhciIpCisgICAgZiA9IHN0cl9pbygiZm9vYmFyIikKICAgICBidWYgPSBsaWJ4bWwyLmlucHV0QnVmZmVyKGYpCiAgICAgaSA9IGkgKyAxCiAKQEAgLTE4LDggKzIzLDggQEAKICMgTWVtb3J5IGRlYnVnIHNwZWNpZmljCiBsaWJ4bWwyLmNsZWFudXBQYXJzZXIoKQogaWYgbGlieG1sMi5kZWJ1Z01lbW9yeSgxKSA9PSAwOgotICAgIHByaW50ICJPSyIKKyAgICBwcmludCgiT0siKQogZWxzZToKLSAgICBwcmludCAiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpCisgICAgcHJpbnQoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKSkKICAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKQogCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvaW5kZXhlcy5weSBiL3B5dGhvbi90ZXN0cy9pbmRleGVzLnB5CmluZGV4IDhkN2E3ZmMuLmU0MWEwZDkgMTAwNzU1Ci0tLSBhL3B5dGhvbi90ZXN0cy9pbmRleGVzLnB5CisrKyBiL3B5dGhvbi90ZXN0cy9pbmRleGVzLnB5CkBAIC0yMCwxNiArMjAsMTYgQEAKICAgICBkZWYgc3RhcnREb2N1bWVudChzZWxmKToKICAgICAgICAgZ2xvYmFsIGN0eHQKICAgICAgICAgaWYgY3R4dC5ieXRlQ29uc3VtZWQoKSAhPSBzZWxmLnN0YXJ0ZDoKLSAgICAgICAgICAgIHByaW50ICJkb2N1bWVudCBzdGFydCBhdCB3cm9uZyBpbmRleDogJWQgZXhwZWN0aW5nICVkXG4iICUgKAotICAgICAgICAgICAgICAgICAgY3R4dC5ieXRlQ29uc3VtZWQoKSwgc2VsZi5zdGFydGQpCisgICAgICAgICAgICBwcmludCgiZG9jdW1lbnQgc3RhcnQgYXQgd3JvbmcgaW5kZXg6ICVkIGV4cGVjdGluZyAlZFxuIiAlICgKKyAgICAgICAgICAgICAgICAgIGN0eHQuYnl0ZUNvbnN1bWVkKCksIHNlbGYuc3RhcnRkKSkKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAKICAgICBkZWYgZW5kRG9jdW1lbnQoc2VsZik6CiAgICAgICAgIGdsb2JhbCBjdHh0CiAgICAgICAgIGV4cGVjdCA9IHNlbGYuZW5kZSArIHNlbGYuZGVsdGEgKiAoc2VsZi5jb3VudCAtIDEpICsgc2VsZi5lbmRkCiAgICAgICAgIGlmIGN0eHQuYnl0ZUNvbnN1bWVkKCkgIT0gZXhwZWN0OgotICAgICAgICAgICAgcHJpbnQgImRvY3VtZW50IGVuZCBhdCB3cm9uZyBpbmRleDogJWQgZXhwZWN0aW5nICVkXG4iICUgKAotICAgICAgICAgICAgICAgICAgY3R4dC5ieXRlQ29uc3VtZWQoKSwgZXhwZWN0KQorICAgICAgICAgICAgcHJpbnQoImRvY3VtZW50IGVuZCBhdCB3cm9uZyBpbmRleDogJWQgZXhwZWN0aW5nICVkXG4iICUgKAorICAgICAgICAgICAgICAgICAgY3R4dC5ieXRlQ29uc3VtZWQoKSwgZXhwZWN0KSkKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAKICAgICBkZWYgc3RhcnRFbGVtZW50KHNlbGYsIHRhZywgYXR0cnMpOgpAQCAtMzcsOCArMzcsOCBAQAogICAgICAgICBpZiB0YWcgPT0gImJhcjEiOgogICAgICAgICAgICAgZXhwZWN0ID0gc2VsZi5zdGFydGUgKyBzZWxmLmRlbHRhICogc2VsZi5jb3VudAogICAgICAgICAgICAgaWYgY3R4dC5ieXRlQ29uc3VtZWQoKSAhPSBleHBlY3Q6Ci0gICAgICAgICAgICAgICAgcHJpbnQgImVsZW1lbnQgc3RhcnQgYXQgd3JvbmcgaW5kZXg6ICVkIGV4cGVjdGluZyAlZFxuIiAlICgKLSAgICAgICAgICAgICAgICAgICBjdHh0LmJ5dGVDb25zdW1lZCgpLCBleHBlY3QpCisgICAgICAgICAgICAgICAgcHJpbnQoImVsZW1lbnQgc3RhcnQgYXQgd3JvbmcgaW5kZXg6ICVkIGV4cGVjdGluZyAlZFxuIiAlICgKKyAgICAgICAgICAgICAgICAgICBjdHh0LmJ5dGVDb25zdW1lZCgpLCBleHBlY3QpKQogICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgICAgICAgICAKIApAQCAtNDcsOCArNDcsOCBAQAogICAgICAgICBpZiB0YWcgPT0gImJhcjEiOgogICAgICAgICAgICAgZXhwZWN0ID0gc2VsZi5lbmRlICsgc2VsZi5kZWx0YSAqIHNlbGYuY291bnQKICAgICAgICAgICAgIGlmIGN0eHQuYnl0ZUNvbnN1bWVkKCkgIT0gZXhwZWN0OgotICAgICAgICAgICAgICAgIHByaW50ICJlbGVtZW50IGVuZCBhdCB3cm9uZyBpbmRleDogJWQgZXhwZWN0aW5nICVkXG4iICUgKAotICAgICAgICAgICAgICAgICAgICAgIGN0eHQuYnl0ZUNvbnN1bWVkKCksIGV4cGVjdCkKKyAgICAgICAgICAgICAgICBwcmludCgiZWxlbWVudCBlbmQgYXQgd3JvbmcgaW5kZXg6ICVkIGV4cGVjdGluZyAlZFxuIiAlICgKKyAgICAgICAgICAgICAgICAgICAgICBjdHh0LmJ5dGVDb25zdW1lZCgpLCBleHBlY3QpKQogICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgICAgICAgICBzZWxmLmNvdW50ID0gc2VsZi5jb3VudCArIDEKIApAQCAtMTA3LDcgKzEwNyw3IEBACiAjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwogbGlieG1sMi5jbGVhbnVwUGFyc2VyKCkKIGlmIGxpYnhtbDIuZGVidWdNZW1vcnkoMSkgPT0gMDoKLSAgICBwcmludCAiT0siCisgICAgcHJpbnQoIk9LIikKIGVsc2U6Ci0gICAgcHJpbnQgIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKQorICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCiAgICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy9pbnB1dF9jYWxsYmFjay5weSBiL3B5dGhvbi90ZXN0cy9pbnB1dF9jYWxsYmFjay5weQppbmRleCA3MTMxNjkxLi5mOGQwOGQ1IDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMvaW5wdXRfY2FsbGJhY2sucHkKKysrIGIvcHl0aG9uL3Rlc3RzL2lucHV0X2NhbGxiYWNrLnB5CkBAIC0zLDggKzMsMTMgQEAKICMgVGhpcyB0ZXN0cyBjdXN0b20gaW5wdXQgY2FsbGJhY2tzCiAjCiBpbXBvcnQgc3lzCi1pbXBvcnQgU3RyaW5nSU8KIGltcG9ydCBsaWJ4bWwyCit0cnk6CisgICAgaW1wb3J0IFN0cmluZ0lPCisgICAgc3RyX2lvID0gU3RyaW5nSU8uU3RyaW5nSU8KK2V4Y2VwdDoKKyAgICBpbXBvcnQgaW8KKyAgICBzdHJfaW8gPSBpby5TdHJpbmdJTwogCiAjIFdlIGltcGxlbWVudCBhIG5ldyBzY2hlbWUsIHB5Oi8vc3RyaW5ncy8gdGhhdCB3aWxsIHJlZmVyZW5jZSB0aGlzIGRpY3Rpb25hcnkKIHB5c3RyaW5ncyA9IHsKQEAgLTM2LDcgKzQxLDcgQEAKICAgICBwYXRoID0gVVJJW2xlbihwcmVmaXgpOl0KICAgICBpZiBwYXRoIG5vdCBpbiBweXN0cmluZ3M6CiAgICAgICAgIHJldHVybiBOb25lCi0gICAgcmV0dXJuIFN0cmluZ0lPLlN0cmluZ0lPKHB5c3RyaW5nc1twYXRoXSkKKyAgICByZXR1cm4gc3RyX2lvKHB5c3RyaW5nc1twYXRoXSkKIAogCiBkZWYgcnVuX3Rlc3QoZGVzYywgZG9jcGF0aCwgY2F0YWxvZywgZXhwX3N0YXR1cz0idmVyaWZpZWQiLCBleHBfZXJyPVtdLCB0ZXN0X2NhbGxiYWNrPU5vbmUsCkBAIC02OCwxNCArNzMsMTQgQEAKICAgICAgICAgYWN0dWFsX3N0YXR1cyA9ICJub3QgbG9hZGVkIgogCiAgICAgaWYgYWN0dWFsX3N0YXR1cyAhPSBleHBfc3RhdHVzOgotICAgICAgICBwcmludCAiVGVzdCAnJXMnIGZhaWxlZDogZXhwZWN0IHN0YXR1cyAnJXMnLCBhY3R1YWwgJyVzJyIgJSAoZGVzYywgZXhwX3N0YXR1cywgYWN0dWFsX3N0YXR1cykKKyAgICAgICAgcHJpbnQoIlRlc3QgJyVzJyBmYWlsZWQ6IGV4cGVjdCBzdGF0dXMgJyVzJywgYWN0dWFsICclcyciICUgKGRlc2MsIGV4cF9zdGF0dXMsIGFjdHVhbF9zdGF0dXMpKQogICAgICAgICBzeXMuZXhpdCgxKQogICAgIGVsaWYgYWN0dWFsX2VyciAhPSBleHBfZXJyOgotICAgICAgICBwcmludCAiVGVzdCAnJXMnIGZhaWxlZCIgJSBkZXNjCi0gICAgICAgIHByaW50ICJFeHBlY3QgZXJyb3JzOiIKLSAgICAgICAgZm9yIHMsbSBpbiBleHBfZXJyOiBwcmludCAiICBbJTJkXSAnJXMnIiAlIChzLG0pCi0gICAgICAgIHByaW50ICJBY3R1YWwgZXJyb3JzOiIKLSAgICAgICAgZm9yIHMsbSBpbiBhY3R1YWxfZXJyOiBwcmludCAiICBbJTJkXSAnJXMnIiAlIChzLG0pCisgICAgICAgIHByaW50KCJUZXN0ICclcycgZmFpbGVkIiAlIGRlc2MpCisgICAgICAgIHByaW50KCJFeHBlY3QgZXJyb3JzOiIpCisgICAgICAgIGZvciBzLG0gaW4gZXhwX2VycjogcHJpbnQoIiAgWyUyZF0gJyVzJyIgJSAocyxtKSkKKyAgICAgICAgcHJpbnQoIkFjdHVhbCBlcnJvcnM6IikKKyAgICAgICAgZm9yIHMsbSBpbiBhY3R1YWxfZXJyOiBwcmludCgiICBbJTJkXSAnJXMnIiAlIChzLG0pKQogICAgICAgICBzeXMuZXhpdCgxKQogCiAKQEAgLTEyOCw3ICsxMzMsNyBAQAogdHJ5OgogICAgIHdoaWxlIFRydWU6CiAgICAgICAgIGxpYnhtbDIucG9wSW5wdXRDYWxsYmFja3MoKQotZXhjZXB0IEluZGV4RXJyb3IsIGU6CitleGNlcHQgSW5kZXhFcnJvciBhcyBlOgogICAgIHBhc3MKIAogcnVuX3Rlc3QoZGVzYz0iTG9hZGluZyB1c2luZyBzdGFuZGFyZCBpL28gYWZ0ZXIgdW5yZWdpc3RlcmluZyBhbGwgY2FsbGJhY2tzIiwKQEAgLTEzOSw1ICsxNDQsNSBAQAogICAgICAgICAgICAgKC0xLCAiZmFpbGVkIHRvIGxvYWQgZXh0ZXJuYWwgZW50aXR5IFwidHN0LnhtbFwiXG4iKQogICAgICAgICAgICAgXSkKIAotcHJpbnQgIk9LIgorcHJpbnQoIk9LIikKIHN5cy5leGl0KDApOwpkaWZmIC0tZ2l0IGEvcHl0aG9uL3Rlc3RzL25zZGVsLnB5IGIvcHl0aG9uL3Rlc3RzL25zZGVsLnB5CmluZGV4IGMwNmRlZDMuLjA3OTM5OWEgMTAwNzU1Ci0tLSBhL3B5dGhvbi90ZXN0cy9uc2RlbC5weQorKysgYi9weXRob24vdGVzdHMvbnNkZWwucHkKQEAgLTE5LDcgKzE5LDcgQEAKICAgICBuc0xpc3QgPSBsaXN0KG5hbWVzcGFjZURlZnMobm9kZSkpCiAgICAgI3ByaW50IG5zTGlzdAogICAgIGlmIGxlbihuc0xpc3QpICE9IGNvdW50IDoKLSAgICAgICAgcmFpc2UgRXhjZXB0aW9uLCAiRXJyb3I6IHNhdyAlZCBuYW1lc3BhY2UgZGVjbGFyYXRpb25zLiAgRXhwZWN0ZWQgJWQiICUgKGxlbihuc0xpc3QpLCBjb3VudCkKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJFcnJvcjogc2F3ICVkIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMuICBFeHBlY3RlZCAlZCIgJSAobGVuKG5zTGlzdCksIGNvdW50KSkKICAgICAKICMgTWVtb3J5IGRlYnVnIHNwZWNpZmljCiBsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpCkBAIC01Niw3ICs1Niw3IEBACiAjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwogbGlieG1sMi5jbGVhbnVwUGFyc2VyKCkKIGlmIGxpYnhtbDIuZGVidWdNZW1vcnkoMSkgPT0gMDoKLSAgICBwcmludCAiT0siCisgICAgcHJpbnQoIk9LIikKIGVsc2U6Ci0gICAgcHJpbnQgIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKQorICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCiAgICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy9vdXRidWYucHkgYi9weXRob24vdGVzdHMvb3V0YnVmLnB5CmluZGV4IDA5Y2Q5YjUuLjYyNzYxY2MgMTAwNzU1Ci0tLSBhL3B5dGhvbi90ZXN0cy9vdXRidWYucHkKKysrIGIvcHl0aG9uL3Rlc3RzL291dGJ1Zi5weQpAQCAtMSwxNyArMSwyMiBAQAogIyEvdXNyL2Jpbi9weXRob24gLXUKIGltcG9ydCBzeXMKIGltcG9ydCBsaWJ4bWwyCi1pbXBvcnQgU3RyaW5nSU8KK3RyeToKKyAgICBpbXBvcnQgU3RyaW5nSU8KKyAgICBzdHJfaW8gPSBTdHJpbmdJTy5TdHJpbmdJTworZXhjZXB0OgorICAgIGltcG9ydCBpbworICAgIHN0cl9pbyA9IGlvLlN0cmluZ0lPCiAKIGRlZiB0ZXN0U2ltcGxlQnVmZmVyV3JpdGVzKCk6Ci0gICAgZiA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICBmID0gc3RyX2lvKCkKICAgICBidWYgPSBsaWJ4bWwyLmNyZWF0ZU91dHB1dEJ1ZmZlcihmLCAiSVNPLTg4NTktMSIpCiAgICAgYnVmLndyaXRlKDMsICJmb28iKQogICAgIGJ1Zi53cml0ZVN0cmluZygiYmFyIikKICAgICBidWYuY2xvc2UoKQotICAgIAorCiAgICAgaWYgZi5nZXR2YWx1ZSgpICE9ICJmb29iYXIiOgotICAgICAgICBwcmludCAiRmFpbGVkIHRvIHNhdmUgdG8gU3RyaW5nSU8iCisgICAgICAgIHByaW50KCJGYWlsZWQgdG8gc2F2ZSB0byBTdHJpbmdJTyIpCiAgICAgICAgIHN5cy5leGl0KDEpCiAKIGRlZiB0ZXN0U2F2ZURvY1RvQnVmZmVyKCk6CkBAIC0yMywxNSArMjgsMTUgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CiA8Zm9vPkhlbGxvPC9mb28+CiAnJycKLSAgICBmID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgIGYgPSBzdHJfaW8oKQogICAgIGJ1ZiA9IGxpYnhtbDIuY3JlYXRlT3V0cHV0QnVmZmVyKGYsICdVVEYtOCcpCiAgICAgZG9jID0gbGlieG1sMi5wYXJzZURvYyhpbnB1dCkKICAgICBkb2Muc2F2ZUZpbGVUbyhidWYsICdVVEYtOCcpCiAgICAgZG9jLmZyZWVEb2MoKQogICAgIGlmIGYuZ2V0dmFsdWUoKSAhPSBleHBlY3RlZDoKLSAgICAgICAgcHJpbnQgJ3htbERvYy5zYXZlRmlsZVRvKCkgY2FsbCBmYWlsZWQuJwotICAgICAgICBwcmludCAnICAgICBnb3Q6ICVzJyAlIHJlcHIoZi5nZXR2YWx1ZSgpKQotICAgICAgICBwcmludCAnZXhwZWN0ZWQ6ICVzJyAlIHJlcHIoZXhwZWN0ZWQpCisgICAgICAgIHByaW50KCd4bWxEb2Muc2F2ZUZpbGVUbygpIGNhbGwgZmFpbGVkLicpCisgICAgICAgIHByaW50KCcgICAgIGdvdDogJXMnICUgcmVwcihmLmdldHZhbHVlKCkpKQorICAgICAgICBwcmludCgnZXhwZWN0ZWQ6ICVzJyAlIHJlcHIoZXhwZWN0ZWQpKQogICAgICAgICBzeXMuZXhpdCgxKQogCiBkZWYgdGVzdFNhdmVGb3JtYXR0ZWREb2NUb0J1ZmZlcigpOgpAQCAtNDksMTMgKzU0LDEzIEBACiAnJycpCiAgICAgZG9jID0gbGlieG1sMi5wYXJzZURvYyhpbnB1dCkKICAgICBmb3IgaSBpbiAoMCwgMSk6Ci0gICAgICAgIGYgPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIGYgPSBzdHJfaW8oKQogICAgICAgICBidWYgPSBsaWJ4bWwyLmNyZWF0ZU91dHB1dEJ1ZmZlcihmLCAnVVRGLTgnKQogICAgICAgICBkb2Muc2F2ZUZvcm1hdEZpbGVUbyhidWYsICdVVEYtOCcsIGkpCiAgICAgICAgIGlmIGYuZ2V0dmFsdWUoKSAhPSBleHBlY3RlZFtpXToKLSAgICAgICAgICAgIHByaW50ICd4bWxEb2Muc2F2ZUZvcm1hdEZpbGVUbygpIGNhbGwgZmFpbGVkLicKLSAgICAgICAgICAgIHByaW50ICcgICAgIGdvdDogJXMnICUgcmVwcihmLmdldHZhbHVlKCkpCi0gICAgICAgICAgICBwcmludCAnZXhwZWN0ZWQ6ICVzJyAlIHJlcHIoZXhwZWN0ZWRbaV0pCisgICAgICAgICAgICBwcmludCgneG1sRG9jLnNhdmVGb3JtYXRGaWxlVG8oKSBjYWxsIGZhaWxlZC4nKQorICAgICAgICAgICAgcHJpbnQoJyAgICAgZ290OiAlcycgJSByZXByKGYuZ2V0dmFsdWUoKSkpCisgICAgICAgICAgICBwcmludCgnZXhwZWN0ZWQ6ICVzJyAlIHJlcHIoZXhwZWN0ZWRbaV0pKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKICAgICBkb2MuZnJlZURvYygpCiAKQEAgLTY5LDIyICs3NCwyMiBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KIDxmb28+SGVsbG88L2Zvbz4KICcnJwotICAgIGYgPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgZiA9IHN0cl9pbygpCiAgICAgZG9jID0gbGlieG1sMi5wYXJzZURvYyhpbnB1dCkKICAgICBidWYgPSBsaWJ4bWwyLmNyZWF0ZU91dHB1dEJ1ZmZlcihmLCAnVVRGLTgnKQogICAgIGJ1Zi5zYXZlRmlsZVRvKGRvYywgJ1VURi04JykKICAgICBpZiBmLmdldHZhbHVlKCkgIT0gZXhwZWN0ZWQ6Ci0gICAgICAgIHByaW50ICdvdXRwdXRCdWZmZXIuc2F2ZUZpbGVUbygpIGNhbGwgZmFpbGVkLicKLSAgICAgICAgcHJpbnQgJyAgICAgZ290OiAlcycgJSByZXByKGYuZ2V0dmFsdWUoKSkKLSAgICAgICAgcHJpbnQgJ2V4cGVjdGVkOiAlcycgJSByZXByKGV4cGVjdGVkKQorICAgICAgICBwcmludCgnb3V0cHV0QnVmZmVyLnNhdmVGaWxlVG8oKSBjYWxsIGZhaWxlZC4nKQorICAgICAgICBwcmludCgnICAgICBnb3Q6ICVzJyAlIHJlcHIoZi5nZXR2YWx1ZSgpKSkKKyAgICAgICAgcHJpbnQoJ2V4cGVjdGVkOiAlcycgJSByZXByKGV4cGVjdGVkKSkKICAgICAgICAgc3lzLmV4aXQoMSkKLSAgICBmID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgIGYgPSBzdHJfaW8oKQogICAgIGJ1ZiA9IGxpYnhtbDIuY3JlYXRlT3V0cHV0QnVmZmVyKGYsICdVVEYtOCcpCiAgICAgYnVmLnNhdmVGb3JtYXRGaWxlVG8oZG9jLCAnVVRGLTgnLCAxKQogICAgIGlmIGYuZ2V0dmFsdWUoKSAhPSBleHBlY3RlZDoKLSAgICAgICAgcHJpbnQgJ291dHB1dEJ1ZmZlci5zYXZlRm9ybWF0RmlsZVRvKCkgY2FsbCBmYWlsZWQuJwotICAgICAgICBwcmludCAnICAgICBnb3Q6ICVzJyAlIHJlcHIoZi5nZXR2YWx1ZSgpKQotICAgICAgICBwcmludCAnZXhwZWN0ZWQ6ICVzJyAlIHJlcHIoZXhwZWN0ZWQpCisgICAgICAgIHByaW50KCdvdXRwdXRCdWZmZXIuc2F2ZUZvcm1hdEZpbGVUbygpIGNhbGwgZmFpbGVkLicpCisgICAgICAgIHByaW50KCcgICAgIGdvdDogJXMnICUgcmVwcihmLmdldHZhbHVlKCkpKQorICAgICAgICBwcmludCgnZXhwZWN0ZWQ6ICVzJyAlIHJlcHIoZXhwZWN0ZWQpKQogICAgICAgICBzeXMuZXhpdCgxKQogICAgIGRvYy5mcmVlRG9jKCkKIApAQCAtOTksNyArMTA0LDcgQEAKIAogICAgIGxpYnhtbDIuY2xlYW51cFBhcnNlcigpCiAgICAgaWYgbGlieG1sMi5kZWJ1Z01lbW9yeSgxKSA9PSAwOgotICAgICAgICBwcmludCAiT0siCisgICAgICAgIHByaW50KCJPSyIpCiAgICAgZWxzZToKLSAgICAgICAgcHJpbnQgIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKQorICAgICAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQogICAgICAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKQpkaWZmIC0tZ2l0IGEvcHl0aG9uL3Rlc3RzL3B1c2gucHkgYi9weXRob24vdGVzdHMvcHVzaC5weQppbmRleCA1YjYwYTE2Li4wZWRkNjFkIDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMvcHVzaC5weQorKysgYi9weXRob24vdGVzdHMvcHVzaC5weQpAQCAtMTAsMTEgKzEwLDExIEBACiBkb2MgPSBjdHh0LmRvYygpCiBjdHh0PU5vbmUKIGlmIGRvYy5uYW1lICE9ICJ0ZXN0LnhtbCI6Ci0gICAgcHJpbnQgImRvY3VtZW50IG5hbWUgZXJyb3IiCisgICAgcHJpbnQoImRvY3VtZW50IG5hbWUgZXJyb3IiKQogICAgIHN5cy5leGl0KDEpCiByb290ID0gZG9jLmNoaWxkcmVuCiBpZiByb290Lm5hbWUgIT0gImZvbyI6Ci0gICAgcHJpbnQgInJvb3QgZWxlbWVudCBuYW1lIGVycm9yIgorICAgIHByaW50KCJyb290IGVsZW1lbnQgbmFtZSBlcnJvciIpCiAgICAgc3lzLmV4aXQoMSkKIGRvYy5mcmVlRG9jKCkKIGkgPSAxMDAwMApAQCAtMjksNyArMjksNyBAQAogIyBNZW1vcnkgZGVidWcgc3BlY2lmaWMKIGxpYnhtbDIuY2xlYW51cFBhcnNlcigpCiBpZiBsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpID09IDA6Ci0gICAgcHJpbnQgIk9LIgorICAgIHByaW50KCJPSyIpCiBlbHNlOgotICAgIHByaW50ICJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkKKyAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQogICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvcHVzaFNBWC5weSBiL3B5dGhvbi90ZXN0cy9wdXNoU0FYLnB5CmluZGV4IDFjMWU3ODYuLjQ4ZjZlODIgMTAwNzU1Ci0tLSBhL3B5dGhvbi90ZXN0cy9wdXNoU0FYLnB5CisrKyBiL3B5dGhvbi90ZXN0cy9wdXNoU0FYLnB5CkBAIC01MSwxNCArNTEsMTQgQEAKIAogcmVmZXJlbmNlID0gInN0YXJ0RG9jdW1lbnQ6c3RhcnRFbGVtZW50IGZvbyB7J3VybCc6ICd0c3QnfTpjaGFyYWN0ZXJzOiBiYXI6ZW5kRWxlbWVudCBmb286ZW5kRG9jdW1lbnQ6IgogaWYgbG9nICE9IHJlZmVyZW5jZToKLSAgICBwcmludCAiRXJyb3IgZ290OiAlcyIgJSBsb2cKLSAgICBwcmludCAiRXhwcmVjdGVkOiAlcyIgJSByZWZlcmVuY2UKKyAgICBwcmludCgiRXJyb3IgZ290OiAlcyIgJSBsb2cpCisgICAgcHJpbnQoIkV4cHJlY3RlZDogJXMiICUgcmVmZXJlbmNlKQogICAgIHN5cy5leGl0KDEpCiAKICMgTWVtb3J5IGRlYnVnIHNwZWNpZmljCiBsaWJ4bWwyLmNsZWFudXBQYXJzZXIoKQogaWYgbGlieG1sMi5kZWJ1Z01lbW9yeSgxKSA9PSAwOgotICAgIHByaW50ICJPSyIKKyAgICBwcmludCgiT0siKQogZWxzZToKLSAgICBwcmludCAiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpCisgICAgcHJpbnQoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKSkKICAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKQpkaWZmIC0tZ2l0IGEvcHl0aG9uL3Rlc3RzL3B1c2hTQVhodG1sLnB5IGIvcHl0aG9uL3Rlc3RzL3B1c2hTQVhodG1sLnB5CmluZGV4IGU2ZTg5ZDkuLjE1OWQzMDggMTAwNzU1Ci0tLSBhL3B5dGhvbi90ZXN0cy9wdXNoU0FYaHRtbC5weQorKysgYi9weXRob24vdGVzdHMvcHVzaFNBWGh0bWwucHkKQEAgLTUyLDE0ICs1MiwxNCBAQAogcmVmZXJlbmNlID0gIiIic3RhcnREb2N1bWVudDpzdGFydEVsZW1lbnQgaHRtbCBOb25lOnN0YXJ0RWxlbWVudCBib2R5IE5vbmU6c3RhcnRFbGVtZW50IGZvbyB7J3VybCc6ICd0c3QnfTplcnJvcjogVGFnIGZvbyBpbnZhbGlkCiA6Y2hhcmFjdGVyczogYmFyOmVuZEVsZW1lbnQgZm9vOmVuZEVsZW1lbnQgYm9keTplbmRFbGVtZW50IGh0bWw6ZW5kRG9jdW1lbnQ6IiIiCiBpZiBsb2cgIT0gcmVmZXJlbmNlOgotICAgIHByaW50ICJFcnJvciBnb3Q6ICVzIiAlIGxvZwotICAgIHByaW50ICJFeHByZWN0ZWQ6ICVzIiAlIHJlZmVyZW5jZQorICAgIHByaW50KCJFcnJvciBnb3Q6ICVzIiAlIGxvZykKKyAgICBwcmludCgiRXhwcmVjdGVkOiAlcyIgJSByZWZlcmVuY2UpCiAgICAgc3lzLmV4aXQoMSkKIAogIyBNZW1vcnkgZGVidWcgc3BlY2lmaWMKIGxpYnhtbDIuY2xlYW51cFBhcnNlcigpCiBpZiBsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpID09IDA6Ci0gICAgcHJpbnQgIk9LIgorICAgIHByaW50KCJPSyIpCiBlbHNlOgotICAgIHByaW50ICJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkKKyAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQogICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvcmVhZGVyLnB5IGIvcHl0aG9uL3Rlc3RzL3JlYWRlci5weQppbmRleCA2YzM3NzYyLi4xNzNjZTY2IDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMvcmVhZGVyLnB5CisrKyBiL3B5dGhvbi90ZXN0cy9yZWFkZXIucHkKQEAgLTQsOTEgKzQsOTYgQEAKICMgdGhpcyB0ZXN0cyB0aGUgYmFzaWMgQVBJcyBvZiB0aGUgWG1sVGV4dFJlYWRlciBpbnRlcmZhY2UKICMKIGltcG9ydCBsaWJ4bWwyCi1pbXBvcnQgU3RyaW5nSU8KIGltcG9ydCBzeXMKK3RyeToKKyAgICBpbXBvcnQgU3RyaW5nSU8KKyAgICBzdHJfaW8gPSBTdHJpbmdJTy5TdHJpbmdJTworZXhjZXB0OgorICAgIGltcG9ydCBpbworICAgIHN0cl9pbyA9IGlvLlN0cmluZ0lPCiAKICMgTWVtb3J5IGRlYnVnIHNwZWNpZmljCiBsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpCiAKLWYgPSBTdHJpbmdJTy5TdHJpbmdJTygiIiI8YT48YiBiMT0iYjEiLz48Yz5jb250ZW50IG9mIGM8L2M+PC9hPiIiIikKK2YgPSBzdHJfaW8oIiIiPGE+PGIgYjE9ImIxIi8+PGM+Y29udGVudCBvZiBjPC9jPjwvYT4iIiIpCiBpbnB1dCA9IGxpYnhtbDIuaW5wdXRCdWZmZXIoZikKIHJlYWRlciA9IGlucHV0Lm5ld1RleHRSZWFkZXIoInRlc3QxIikKIHJldCA9IHJlYWRlci5SZWFkKCkKIGlmIHJldCAhPSAxOgotICAgIHByaW50ICJ0ZXN0MTogRXJyb3IgcmVhZGluZyB0byBmaXJzdCBlbGVtZW50IgorICAgIHByaW50KCJ0ZXN0MTogRXJyb3IgcmVhZGluZyB0byBmaXJzdCBlbGVtZW50IikKICAgICBzeXMuZXhpdCgxKQogaWYgcmVhZGVyLk5hbWUoKSAhPSAiYSIgb3IgcmVhZGVyLklzRW1wdHlFbGVtZW50KCkgIT0gMCBvciBcCiAgICByZWFkZXIuTm9kZVR5cGUoKSAhPSAxIG9yIHJlYWRlci5IYXNBdHRyaWJ1dGVzKCkgIT0gMDoKLSAgICBwcmludCAidGVzdDE6IEVycm9yIHJlYWRpbmcgdGhlIGZpcnN0IGVsZW1lbnQiCisgICAgcHJpbnQoInRlc3QxOiBFcnJvciByZWFkaW5nIHRoZSBmaXJzdCBlbGVtZW50IikKICAgICBzeXMuZXhpdCgxKQogcmV0ID0gcmVhZGVyLlJlYWQoKQogaWYgcmV0ICE9IDE6Ci0gICAgcHJpbnQgInRlc3QxOiBFcnJvciByZWFkaW5nIHRvIHNlY29uZCBlbGVtZW50IgorICAgIHByaW50KCJ0ZXN0MTogRXJyb3IgcmVhZGluZyB0byBzZWNvbmQgZWxlbWVudCIpCiAgICAgc3lzLmV4aXQoMSkKIGlmIHJlYWRlci5OYW1lKCkgIT0gImIiIG9yIHJlYWRlci5Jc0VtcHR5RWxlbWVudCgpICE9IDEgb3IgXAogICAgcmVhZGVyLk5vZGVUeXBlKCkgIT0gMSBvciByZWFkZXIuSGFzQXR0cmlidXRlcygpICE9IDE6Ci0gICAgcHJpbnQgInRlc3QxOiBFcnJvciByZWFkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCIKKyAgICBwcmludCgidGVzdDE6IEVycm9yIHJlYWRpbmcgdGhlIHNlY29uZCBlbGVtZW50IikKICAgICBzeXMuZXhpdCgxKQogcmV0ID0gcmVhZGVyLlJlYWQoKQogaWYgcmV0ICE9IDE6Ci0gICAgcHJpbnQgInRlc3QxOiBFcnJvciByZWFkaW5nIHRvIHRoaXJkIGVsZW1lbnQiCisgICAgcHJpbnQoInRlc3QxOiBFcnJvciByZWFkaW5nIHRvIHRoaXJkIGVsZW1lbnQiKQogICAgIHN5cy5leGl0KDEpCiBpZiByZWFkZXIuTmFtZSgpICE9ICJjIiBvciByZWFkZXIuSXNFbXB0eUVsZW1lbnQoKSAhPSAwIG9yIFwKICAgIHJlYWRlci5Ob2RlVHlwZSgpICE9IDEgb3IgcmVhZGVyLkhhc0F0dHJpYnV0ZXMoKSAhPSAwOgotICAgIHByaW50ICJ0ZXN0MTogRXJyb3IgcmVhZGluZyB0aGUgdGhpcmQgZWxlbWVudCIKKyAgICBwcmludCgidGVzdDE6IEVycm9yIHJlYWRpbmcgdGhlIHRoaXJkIGVsZW1lbnQiKQogICAgIHN5cy5leGl0KDEpCiByZXQgPSByZWFkZXIuUmVhZCgpCiBpZiByZXQgIT0gMToKLSAgICBwcmludCAidGVzdDE6IEVycm9yIHJlYWRpbmcgdG8gdGV4dCBub2RlIgorICAgIHByaW50KCJ0ZXN0MTogRXJyb3IgcmVhZGluZyB0byB0ZXh0IG5vZGUiKQogICAgIHN5cy5leGl0KDEpCiBpZiByZWFkZXIuTmFtZSgpICE9ICIjdGV4dCIgb3IgcmVhZGVyLklzRW1wdHlFbGVtZW50KCkgIT0gMCBvciBcCiAgICByZWFkZXIuTm9kZVR5cGUoKSAhPSAzIG9yIHJlYWRlci5IYXNBdHRyaWJ1dGVzKCkgIT0gMCBvciBcCiAgICByZWFkZXIuVmFsdWUoKSAhPSAiY29udGVudCBvZiBjIjoKLSAgICBwcmludCAidGVzdDE6IEVycm9yIHJlYWRpbmcgdGhlIHRleHQgbm9kZSIKKyAgICBwcmludCgidGVzdDE6IEVycm9yIHJlYWRpbmcgdGhlIHRleHQgbm9kZSIpCiAgICAgc3lzLmV4aXQoMSkKIHJldCA9IHJlYWRlci5SZWFkKCkKIGlmIHJldCAhPSAxOgotICAgIHByaW50ICJ0ZXN0MTogRXJyb3IgcmVhZGluZyB0byBlbmQgb2YgdGhpcmQgZWxlbWVudCIKKyAgICBwcmludCgidGVzdDE6IEVycm9yIHJlYWRpbmcgdG8gZW5kIG9mIHRoaXJkIGVsZW1lbnQiKQogICAgIHN5cy5leGl0KDEpCiBpZiByZWFkZXIuTmFtZSgpICE9ICJjIiBvciByZWFkZXIuSXNFbXB0eUVsZW1lbnQoKSAhPSAwIG9yIFwKICAgIHJlYWRlci5Ob2RlVHlwZSgpICE9IDE1IG9yIHJlYWRlci5IYXNBdHRyaWJ1dGVzKCkgIT0gMDoKLSAgICBwcmludCAidGVzdDE6IEVycm9yIHJlYWRpbmcgdGhlIGVuZCBvZiB0aGlyZCBlbGVtZW50IgorICAgIHByaW50KCJ0ZXN0MTogRXJyb3IgcmVhZGluZyB0aGUgZW5kIG9mIHRoaXJkIGVsZW1lbnQiKQogICAgIHN5cy5leGl0KDEpCiByZXQgPSByZWFkZXIuUmVhZCgpCiBpZiByZXQgIT0gMToKLSAgICBwcmludCAidGVzdDE6IEVycm9yIHJlYWRpbmcgdG8gZW5kIG9mIGZpcnN0IGVsZW1lbnQiCisgICAgcHJpbnQoInRlc3QxOiBFcnJvciByZWFkaW5nIHRvIGVuZCBvZiBmaXJzdCBlbGVtZW50IikKICAgICBzeXMuZXhpdCgxKQogaWYgcmVhZGVyLk5hbWUoKSAhPSAiYSIgb3IgcmVhZGVyLklzRW1wdHlFbGVtZW50KCkgIT0gMCBvciBcCiAgICByZWFkZXIuTm9kZVR5cGUoKSAhPSAxNSBvciByZWFkZXIuSGFzQXR0cmlidXRlcygpICE9IDA6Ci0gICAgcHJpbnQgInRlc3QxOiBFcnJvciByZWFkaW5nIHRoZSBlbmQgb2YgZmlyc3QgZWxlbWVudCIKKyAgICBwcmludCgidGVzdDE6IEVycm9yIHJlYWRpbmcgdGhlIGVuZCBvZiBmaXJzdCBlbGVtZW50IikKICAgICBzeXMuZXhpdCgxKQogcmV0ID0gcmVhZGVyLlJlYWQoKQogaWYgcmV0ICE9IDA6Ci0gICAgcHJpbnQgInRlc3QxOiBFcnJvciByZWFkaW5nIHRvIGVuZCBvZiBkb2N1bWVudCIKKyAgICBwcmludCgidGVzdDE6IEVycm9yIHJlYWRpbmcgdG8gZW5kIG9mIGRvY3VtZW50IikKICAgICBzeXMuZXhpdCgxKQogCiAjCiAjIGV4YW1wbGUgZnJvbSB0aGUgWG1sVGV4dFJlYWRlciBkb2NzCiAjCi1mID0gU3RyaW5nSU8uU3RyaW5nSU8oIiIiPHRlc3QgeG1sbnM6ZHQ9InVybjpkYXRhdHlwZXMiIGR0OnR5cGU9ImludCIvPiIiIikKK2YgPSBzdHJfaW8oIiIiPHRlc3QgeG1sbnM6ZHQ9InVybjpkYXRhdHlwZXMiIGR0OnR5cGU9ImludCIvPiIiIikKIGlucHV0ID0gbGlieG1sMi5pbnB1dEJ1ZmZlcihmKQogcmVhZGVyID0gaW5wdXQubmV3VGV4dFJlYWRlcigidGVzdDIiKQogCiByZXQgPSByZWFkZXIuUmVhZCgpCiBpZiByZXQgIT0gMToKLSAgICBwcmludCAiRXJyb3IgcmVhZGluZyB0ZXN0IGVsZW1lbnQiCisgICAgcHJpbnQoIkVycm9yIHJlYWRpbmcgdGVzdCBlbGVtZW50IikKICAgICBzeXMuZXhpdCgxKQogaWYgcmVhZGVyLkdldEF0dHJpYnV0ZU5vKDApICE9ICJ1cm46ZGF0YXR5cGVzIiBvciBcCiAgICByZWFkZXIuR2V0QXR0cmlidXRlTm8oMSkgIT0gImludCIgb3IgXAogICAgcmVhZGVyLkdldEF0dHJpYnV0ZU5zKCJ0eXBlIiwgInVybjpkYXRhdHlwZXMiKSAhPSAiaW50IiBvciBcCiAgICByZWFkZXIuR2V0QXR0cmlidXRlKCJkdDp0eXBlIikgIT0gImludCI6Ci0gICAgcHJpbnQgImVycm9yIHJlYWRpbmcgdGVzdCBhdHRyaWJ1dGVzIgorICAgIHByaW50KCJlcnJvciByZWFkaW5nIHRlc3QgYXR0cmlidXRlcyIpCiAgICAgc3lzLmV4aXQoMSkKIAogIwogIyBleGFtcGxlIGZyb20gdGhlIFhtbFRleHRSZWFkZXIgZG9jcwogIwotZiA9IFN0cmluZ0lPLlN0cmluZ0lPKCIiIjxyb290IHhtbG5zOmE9InVybjo0NTYiPgorZiA9IHN0cl9pbygiIiI8cm9vdCB4bWxuczphPSJ1cm46NDU2Ij4KIDxpdGVtPgogPHJlZiBocmVmPSJhOmIiLz4KIDwvaXRlbT4KQEAgLTEwMCwyMDMgKzEwNSwyMDMgQEAKIHdoaWxlIHJldCA9PSAxOgogICAgIGlmIHJlYWRlci5OYW1lKCkgPT0gInJlZiI6CiAgICAgICAgIGlmIHJlYWRlci5Mb29rdXBOYW1lc3BhY2UoImEiKSAhPSAidXJuOjQ1NiI6Ci0gICAgICAgICAgICBwcmludCAiZXJyb3IgcmVzb2x2aW5nIG5hbWVzcGFjZSBwcmVmaXgiCisgICAgICAgICAgICBwcmludCgiZXJyb3IgcmVzb2x2aW5nIG5hbWVzcGFjZSBwcmVmaXgiKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKICAgICAgICAgYnJlYWsKICAgICByZXQgPSByZWFkZXIuUmVhZCgpCiBpZiByZXQgIT0gMToKLSAgICBwcmludCAiRXJyb3IgZmluZGluZyB0aGUgcmVmIGVsZW1lbnQiCisgICAgcHJpbnQoIkVycm9yIGZpbmRpbmcgdGhlIHJlZiBlbGVtZW50IikKICAgICBzeXMuZXhpdCgxKQogCiAjCiAjIEhvbWUgbWFkZSBleGFtcGxlIGZvciB0aGUgdmFyaW91cyBhdHRyaWJ1dGUgYWNjZXNzIGZ1bmN0aW9ucwogIwotZiA9IFN0cmluZ0lPLlN0cmluZ0lPKCIiIjx0ZXN0YXR0ciB4bWxucz0idXJuOjEiIHhtbG5zOmE9InVybjoyIiBiPSJiIiBhOmI9ImE6YiIvPiIiIikKK2YgPSBzdHJfaW8oIiIiPHRlc3RhdHRyIHhtbG5zPSJ1cm46MSIgeG1sbnM6YT0idXJuOjIiIGI9ImIiIGE6Yj0iYTpiIi8+IiIiKQogaW5wdXQgPSBsaWJ4bWwyLmlucHV0QnVmZmVyKGYpCiByZWFkZXIgPSBpbnB1dC5uZXdUZXh0UmVhZGVyKCJ0ZXN0NCIpCiByZXQgPSByZWFkZXIuUmVhZCgpCiBpZiByZXQgIT0gMToKLSAgICBwcmludCAiRXJyb3IgcmVhZGluZyB0aGUgdGVzdGF0dHIgZWxlbWVudCIKKyAgICBwcmludCgiRXJyb3IgcmVhZGluZyB0aGUgdGVzdGF0dHIgZWxlbWVudCIpCiAgICAgc3lzLmV4aXQoMSkKICMKICMgQXR0cmlidXRlIGV4cGxvcmF0aW9uIGJ5IGluZGV4CiAjCiBpZiByZWFkZXIuTW92ZVRvQXR0cmlidXRlTm8oMCkgIT0gMToKLSAgICBwcmludCAiRmFpbGVkIG1vdmVUb0F0dHJpYnV0ZSgwKSIKKyAgICBwcmludCgiRmFpbGVkIG1vdmVUb0F0dHJpYnV0ZSgwKSIpCiAgICAgc3lzLmV4aXQoMSkKIGlmIHJlYWRlci5WYWx1ZSgpICE9ICJ1cm46MSI6Ci0gICAgcHJpbnQgIkZhaWxlZCB0byByZWFkIGF0dHJpYnV0ZSgwKSIKKyAgICBwcmludCgiRmFpbGVkIHRvIHJlYWQgYXR0cmlidXRlKDApIikKICAgICBzeXMuZXhpdCgxKQogaWYgcmVhZGVyLk5hbWUoKSAhPSAieG1sbnMiOgotICAgIHByaW50ICJGYWlsZWQgdG8gcmVhZCBhdHRyaWJ1dGUoMCkgbmFtZSIKKyAgICBwcmludCgiRmFpbGVkIHRvIHJlYWQgYXR0cmlidXRlKDApIG5hbWUiKQogICAgIHN5cy5leGl0KDEpCiBpZiByZWFkZXIuTW92ZVRvQXR0cmlidXRlTm8oMSkgIT0gMToKLSAgICBwcmludCAiRmFpbGVkIG1vdmVUb0F0dHJpYnV0ZSgxKSIKKyAgICBwcmludCgiRmFpbGVkIG1vdmVUb0F0dHJpYnV0ZSgxKSIpCiAgICAgc3lzLmV4aXQoMSkKIGlmIHJlYWRlci5WYWx1ZSgpICE9ICJ1cm46MiI6Ci0gICAgcHJpbnQgIkZhaWxlZCB0byByZWFkIGF0dHJpYnV0ZSgxKSIKKyAgICBwcmludCgiRmFpbGVkIHRvIHJlYWQgYXR0cmlidXRlKDEpIikKICAgICBzeXMuZXhpdCgxKQogaWYgcmVhZGVyLk5hbWUoKSAhPSAieG1sbnM6YSI6Ci0gICAgcHJpbnQgIkZhaWxlZCB0byByZWFkIGF0dHJpYnV0ZSgxKSBuYW1lIgorICAgIHByaW50KCJGYWlsZWQgdG8gcmVhZCBhdHRyaWJ1dGUoMSkgbmFtZSIpCiAgICAgc3lzLmV4aXQoMSkKIGlmIHJlYWRlci5Nb3ZlVG9BdHRyaWJ1dGVObygyKSAhPSAxOgotICAgIHByaW50ICJGYWlsZWQgbW92ZVRvQXR0cmlidXRlKDIpIgorICAgIHByaW50KCJGYWlsZWQgbW92ZVRvQXR0cmlidXRlKDIpIikKICAgICBzeXMuZXhpdCgxKQogaWYgcmVhZGVyLlZhbHVlKCkgIT0gImIiOgotICAgIHByaW50ICJGYWlsZWQgdG8gcmVhZCBhdHRyaWJ1dGUoMikiCisgICAgcHJpbnQoIkZhaWxlZCB0byByZWFkIGF0dHJpYnV0ZSgyKSIpCiAgICAgc3lzLmV4aXQoMSkKIGlmIHJlYWRlci5OYW1lKCkgIT0gImIiOgotICAgIHByaW50ICJGYWlsZWQgdG8gcmVhZCBhdHRyaWJ1dGUoMikgbmFtZSIKKyAgICBwcmludCgiRmFpbGVkIHRvIHJlYWQgYXR0cmlidXRlKDIpIG5hbWUiKQogICAgIHN5cy5leGl0KDEpCiBpZiByZWFkZXIuTW92ZVRvQXR0cmlidXRlTm8oMykgIT0gMToKLSAgICBwcmludCAiRmFpbGVkIG1vdmVUb0F0dHJpYnV0ZSgzKSIKKyAgICBwcmludCgiRmFpbGVkIG1vdmVUb0F0dHJpYnV0ZSgzKSIpCiAgICAgc3lzLmV4aXQoMSkKIGlmIHJlYWRlci5WYWx1ZSgpICE9ICJhOmIiOgotICAgIHByaW50ICJGYWlsZWQgdG8gcmVhZCBhdHRyaWJ1dGUoMykiCisgICAgcHJpbnQoIkZhaWxlZCB0byByZWFkIGF0dHJpYnV0ZSgzKSIpCiAgICAgc3lzLmV4aXQoMSkKIGlmIHJlYWRlci5OYW1lKCkgIT0gImE6YiI6Ci0gICAgcHJpbnQgIkZhaWxlZCB0byByZWFkIGF0dHJpYnV0ZSgzKSBuYW1lIgorICAgIHByaW50KCJGYWlsZWQgdG8gcmVhZCBhdHRyaWJ1dGUoMykgbmFtZSIpCiAgICAgc3lzLmV4aXQoMSkKICMKICMgQXR0cmlidXRlIGV4cGxvcmF0aW9uIGJ5IG5hbWUKICMKIGlmIHJlYWRlci5Nb3ZlVG9BdHRyaWJ1dGUoInhtbG5zIikgIT0gMToKLSAgICBwcmludCAiRmFpbGVkIG1vdmVUb0F0dHJpYnV0ZSgneG1sbnMnKSIKKyAgICBwcmludCgiRmFpbGVkIG1vdmVUb0F0dHJpYnV0ZSgneG1sbnMnKSIpCiAgICAgc3lzLmV4aXQoMSkKIGlmIHJlYWRlci5WYWx1ZSgpICE9ICJ1cm46MSI6Ci0gICAgcHJpbnQgIkZhaWxlZCB0byByZWFkIGF0dHJpYnV0ZSgneG1sbnMnKSIKKyAgICBwcmludCgiRmFpbGVkIHRvIHJlYWQgYXR0cmlidXRlKCd4bWxucycpIikKICAgICBzeXMuZXhpdCgxKQogaWYgcmVhZGVyLk1vdmVUb0F0dHJpYnV0ZSgieG1sbnM6YSIpICE9IDE6Ci0gICAgcHJpbnQgIkZhaWxlZCBtb3ZlVG9BdHRyaWJ1dGUoJ3htbG5zJykiCisgICAgcHJpbnQoIkZhaWxlZCBtb3ZlVG9BdHRyaWJ1dGUoJ3htbG5zJykiKQogICAgIHN5cy5leGl0KDEpCiBpZiByZWFkZXIuVmFsdWUoKSAhPSAidXJuOjIiOgotICAgIHByaW50ICJGYWlsZWQgdG8gcmVhZCBhdHRyaWJ1dGUoJ3htbG5zOmEnKSIKKyAgICBwcmludCgiRmFpbGVkIHRvIHJlYWQgYXR0cmlidXRlKCd4bWxuczphJykiKQogICAgIHN5cy5leGl0KDEpCiBpZiByZWFkZXIuTW92ZVRvQXR0cmlidXRlKCJiIikgIT0gMToKLSAgICBwcmludCAiRmFpbGVkIG1vdmVUb0F0dHJpYnV0ZSgnYicpIgorICAgIHByaW50KCJGYWlsZWQgbW92ZVRvQXR0cmlidXRlKCdiJykiKQogICAgIHN5cy5leGl0KDEpCiBpZiByZWFkZXIuVmFsdWUoKSAhPSAiYiI6Ci0gICAgcHJpbnQgIkZhaWxlZCB0byByZWFkIGF0dHJpYnV0ZSgnYicpIgorICAgIHByaW50KCJGYWlsZWQgdG8gcmVhZCBhdHRyaWJ1dGUoJ2InKSIpCiAgICAgc3lzLmV4aXQoMSkKIGlmIHJlYWRlci5Nb3ZlVG9BdHRyaWJ1dGUoImE6YiIpICE9IDE6Ci0gICAgcHJpbnQgIkZhaWxlZCBtb3ZlVG9BdHRyaWJ1dGUoJ2E6YicpIgorICAgIHByaW50KCJGYWlsZWQgbW92ZVRvQXR0cmlidXRlKCdhOmInKSIpCiAgICAgc3lzLmV4aXQoMSkKIGlmIHJlYWRlci5WYWx1ZSgpICE9ICJhOmIiOgotICAgIHByaW50ICJGYWlsZWQgdG8gcmVhZCBhdHRyaWJ1dGUoJ2E6YicpIgorICAgIHByaW50KCJGYWlsZWQgdG8gcmVhZCBhdHRyaWJ1dGUoJ2E6YicpIikKICAgICBzeXMuZXhpdCgxKQogaWYgcmVhZGVyLk1vdmVUb0F0dHJpYnV0ZU5zKCJiIiwgInVybjoyIikgIT0gMToKLSAgICBwcmludCAiRmFpbGVkIG1vdmVUb0F0dHJpYnV0ZSgnYicsICd1cm46MicpIgorICAgIHByaW50KCJGYWlsZWQgbW92ZVRvQXR0cmlidXRlKCdiJywgJ3VybjoyJykiKQogICAgIHN5cy5leGl0KDEpCiBpZiByZWFkZXIuVmFsdWUoKSAhPSAiYTpiIjoKLSAgICBwcmludCAiRmFpbGVkIHRvIHJlYWQgYXR0cmlidXRlKCdiJywgJ3VybjoyJykiCisgICAgcHJpbnQoIkZhaWxlZCB0byByZWFkIGF0dHJpYnV0ZSgnYicsICd1cm46MicpIikKICAgICBzeXMuZXhpdCgxKQogIwogIyBHbyBiYWNrIGFuZCByZWFkIGluIHNlcXVlbmNlCiAjCiBpZiByZWFkZXIuTW92ZVRvRWxlbWVudCgpICE9IDE6Ci0gICAgcHJpbnQgIkZhaWxlZCB0byBtb3ZlIGJhY2sgdG8gZWxlbWVudCIKKyAgICBwcmludCgiRmFpbGVkIHRvIG1vdmUgYmFjayB0byBlbGVtZW50IikKICAgICBzeXMuZXhpdCgxKQogaWYgcmVhZGVyLk1vdmVUb0ZpcnN0QXR0cmlidXRlKCkgIT0gMToKLSAgICBwcmludCAiRmFpbGVkIHRvIG1vdmUgdG8gZmlyc3QgYXR0cmlidXRlIgorICAgIHByaW50KCJGYWlsZWQgdG8gbW92ZSB0byBmaXJzdCBhdHRyaWJ1dGUiKQogICAgIHN5cy5leGl0KDEpCiBpZiByZWFkZXIuVmFsdWUoKSAhPSAidXJuOjEiOgotICAgIHByaW50ICJGYWlsZWQgdG8gcmVhZCBhdHRyaWJ1dGUoMCkiCisgICAgcHJpbnQoIkZhaWxlZCB0byByZWFkIGF0dHJpYnV0ZSgwKSIpCiAgICAgc3lzLmV4aXQoMSkKIGlmIHJlYWRlci5OYW1lKCkgIT0gInhtbG5zIjoKLSAgICBwcmludCAiRmFpbGVkIHRvIHJlYWQgYXR0cmlidXRlKDApIG5hbWUiCisgICAgcHJpbnQoIkZhaWxlZCB0byByZWFkIGF0dHJpYnV0ZSgwKSBuYW1lIikKICAgICBzeXMuZXhpdCgxKQogaWYgcmVhZGVyLk1vdmVUb05leHRBdHRyaWJ1dGUoKSAhPSAxOgotICAgIHByaW50ICJGYWlsZWQgdG8gbW92ZSB0byBuZXh0IGF0dHJpYnV0ZSIKKyAgICBwcmludCgiRmFpbGVkIHRvIG1vdmUgdG8gbmV4dCBhdHRyaWJ1dGUiKQogICAgIHN5cy5leGl0KDEpCiBpZiByZWFkZXIuVmFsdWUoKSAhPSAidXJuOjIiOgotICAgIHByaW50ICJGYWlsZWQgdG8gcmVhZCBhdHRyaWJ1dGUoMSkiCisgICAgcHJpbnQoIkZhaWxlZCB0byByZWFkIGF0dHJpYnV0ZSgxKSIpCiAgICAgc3lzLmV4aXQoMSkKIGlmIHJlYWRlci5OYW1lKCkgIT0gInhtbG5zOmEiOgotICAgIHByaW50ICJGYWlsZWQgdG8gcmVhZCBhdHRyaWJ1dGUoMSkgbmFtZSIKKyAgICBwcmludCgiRmFpbGVkIHRvIHJlYWQgYXR0cmlidXRlKDEpIG5hbWUiKQogICAgIHN5cy5leGl0KDEpCiBpZiByZWFkZXIuTW92ZVRvTmV4dEF0dHJpYnV0ZSgpICE9IDE6Ci0gICAgcHJpbnQgIkZhaWxlZCB0byBtb3ZlIHRvIG5leHQgYXR0cmlidXRlIgorICAgIHByaW50KCJGYWlsZWQgdG8gbW92ZSB0byBuZXh0IGF0dHJpYnV0ZSIpCiAgICAgc3lzLmV4aXQoMSkKIGlmIHJlYWRlci5WYWx1ZSgpICE9ICJiIjoKLSAgICBwcmludCAiRmFpbGVkIHRvIHJlYWQgYXR0cmlidXRlKDIpIgorICAgIHByaW50KCJGYWlsZWQgdG8gcmVhZCBhdHRyaWJ1dGUoMikiKQogICAgIHN5cy5leGl0KDEpCiBpZiByZWFkZXIuTmFtZSgpICE9ICJiIjoKLSAgICBwcmludCAiRmFpbGVkIHRvIHJlYWQgYXR0cmlidXRlKDIpIG5hbWUiCisgICAgcHJpbnQoIkZhaWxlZCB0byByZWFkIGF0dHJpYnV0ZSgyKSBuYW1lIikKICAgICBzeXMuZXhpdCgxKQogaWYgcmVhZGVyLk1vdmVUb05leHRBdHRyaWJ1dGUoKSAhPSAxOgotICAgIHByaW50ICJGYWlsZWQgdG8gbW92ZSB0byBuZXh0IGF0dHJpYnV0ZSIKKyAgICBwcmludCgiRmFpbGVkIHRvIG1vdmUgdG8gbmV4dCBhdHRyaWJ1dGUiKQogICAgIHN5cy5leGl0KDEpCiBpZiByZWFkZXIuVmFsdWUoKSAhPSAiYTpiIjoKLSAgICBwcmludCAiRmFpbGVkIHRvIHJlYWQgYXR0cmlidXRlKDMpIgorICAgIHByaW50KCJGYWlsZWQgdG8gcmVhZCBhdHRyaWJ1dGUoMykiKQogICAgIHN5cy5leGl0KDEpCiBpZiByZWFkZXIuTmFtZSgpICE9ICJhOmIiOgotICAgIHByaW50ICJGYWlsZWQgdG8gcmVhZCBhdHRyaWJ1dGUoMykgbmFtZSIKKyAgICBwcmludCgiRmFpbGVkIHRvIHJlYWQgYXR0cmlidXRlKDMpIG5hbWUiKQogICAgIHN5cy5leGl0KDEpCiBpZiByZWFkZXIuTW92ZVRvTmV4dEF0dHJpYnV0ZSgpICE9IDA6Ci0gICAgcHJpbnQgIkZhaWxlZCB0byBkZXRlY3QgbGFzdCBhdHRyaWJ1dGUiCisgICAgcHJpbnQoIkZhaWxlZCB0byBkZXRlY3QgbGFzdCBhdHRyaWJ1dGUiKQogICAgIHN5cy5leGl0KDEpCiAKICAgICAKICMKICMgYSBjb3VwbGUgb2YgdGVzdHMgZm9yIG5hbWVzcGFjZSBub2RlcwogIwotZiA9IFN0cmluZ0lPLlN0cmluZ0lPKCIiIjxhIHhtbG5zPSJodHRwOi8vZXhhbXBsZS5jb20vZm9vIi8+IiIiKQorZiA9IHN0cl9pbygiIiI8YSB4bWxucz0iaHR0cDovL2V4YW1wbGUuY29tL2ZvbyIvPiIiIikKIGlucHV0ID0gbGlieG1sMi5pbnB1dEJ1ZmZlcihmKQogcmVhZGVyID0gaW5wdXQubmV3VGV4dFJlYWRlcigidGVzdDYiKQogcmV0ID0gcmVhZGVyLlJlYWQoKQogaWYgcmV0ICE9IDE6Ci0gICAgcHJpbnQgInRlc3Q2OiBmYWlsZWQgdG8gUmVhZCgpIgorICAgIHByaW50KCJ0ZXN0NjogZmFpbGVkIHRvIFJlYWQoKSIpCiAgICAgc3lzLmV4aXQoMSkKIHJldCA9IHJlYWRlci5Nb3ZlVG9GaXJzdEF0dHJpYnV0ZSgpCiBpZiByZXQgIT0gMToKLSAgICBwcmludCAidGVzdDY6IGZhaWxlZCB0byBNb3ZlVG9GaXJzdEF0dHJpYnV0ZSgpIgorICAgIHByaW50KCJ0ZXN0NjogZmFpbGVkIHRvIE1vdmVUb0ZpcnN0QXR0cmlidXRlKCkiKQogICAgIHN5cy5leGl0KDEpCiBpZiByZWFkZXIuTmFtZXNwYWNlVXJpKCkgIT0gImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIiBvciBcCiAgICByZWFkZXIuTG9jYWxOYW1lKCkgIT0gInhtbG5zIiBvciByZWFkZXIuTmFtZSgpICE9ICJ4bWxucyIgb3IgXAogICAgcmVhZGVyLlZhbHVlKCkgIT0gImh0dHA6Ly9leGFtcGxlLmNvbS9mb28iIG9yIHJlYWRlci5Ob2RlVHlwZSgpICE9IDI6Ci0gICAgcHJpbnQgInRlc3Q2OiBmYWlsZWQgdG8gcmVhZCB0aGUgbmFtZXNwYWNlIG5vZGUiCisgICAgcHJpbnQoInRlc3Q2OiBmYWlsZWQgdG8gcmVhZCB0aGUgbmFtZXNwYWNlIG5vZGUiKQogICAgIHN5cy5leGl0KDEpCiAKLWYgPSBTdHJpbmdJTy5TdHJpbmdJTygiIiI8YSB4bWxuczpwcmVmaXg9Imh0dHA6Ly9leGFtcGxlLmNvbS9mb28iLz4iIiIpCitmID0gc3RyX2lvKCIiIjxhIHhtbG5zOnByZWZpeD0iaHR0cDovL2V4YW1wbGUuY29tL2ZvbyIvPiIiIikKIGlucHV0ID0gbGlieG1sMi5pbnB1dEJ1ZmZlcihmKQogcmVhZGVyID0gaW5wdXQubmV3VGV4dFJlYWRlcigidGVzdDciKQogcmV0ID0gcmVhZGVyLlJlYWQoKQogaWYgcmV0ICE9IDE6Ci0gICAgcHJpbnQgInRlc3Q3OiBmYWlsZWQgdG8gUmVhZCgpIgorICAgIHByaW50KCJ0ZXN0NzogZmFpbGVkIHRvIFJlYWQoKSIpCiAgICAgc3lzLmV4aXQoMSkKIHJldCA9IHJlYWRlci5Nb3ZlVG9GaXJzdEF0dHJpYnV0ZSgpCiBpZiByZXQgIT0gMToKLSAgICBwcmludCAidGVzdDc6IGZhaWxlZCB0byBNb3ZlVG9GaXJzdEF0dHJpYnV0ZSgpIgorICAgIHByaW50KCJ0ZXN0NzogZmFpbGVkIHRvIE1vdmVUb0ZpcnN0QXR0cmlidXRlKCkiKQogICAgIHN5cy5leGl0KDEpCiBpZiByZWFkZXIuTmFtZXNwYWNlVXJpKCkgIT0gImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIiBvciBcCiAgICByZWFkZXIuTG9jYWxOYW1lKCkgIT0gInByZWZpeCIgb3IgcmVhZGVyLk5hbWUoKSAhPSAieG1sbnM6cHJlZml4IiBvciBcCiAgICByZWFkZXIuVmFsdWUoKSAhPSAiaHR0cDovL2V4YW1wbGUuY29tL2ZvbyIgb3IgcmVhZGVyLk5vZGVUeXBlKCkgIT0gMjoKLSAgICBwcmludCAidGVzdDc6IGZhaWxlZCB0byByZWFkIHRoZSBuYW1lc3BhY2Ugbm9kZSIKKyAgICBwcmludCgidGVzdDc6IGZhaWxlZCB0byByZWFkIHRoZSBuYW1lc3BhY2Ugbm9kZSIpCiAgICAgc3lzLmV4aXQoMSkKIAogIwogIyBUZXN0IGZvciBhIGxpbWl0IGNhc2U6CiAjCi1mID0gU3RyaW5nSU8uU3RyaW5nSU8oIiIiPGEvPiIiIikKK2YgPSBzdHJfaW8oIiIiPGEvPiIiIikKIGlucHV0ID0gbGlieG1sMi5pbnB1dEJ1ZmZlcihmKQogcmVhZGVyID0gaW5wdXQubmV3VGV4dFJlYWRlcigidGVzdDgiKQogcmV0ID0gcmVhZGVyLlJlYWQoKQogaWYgcmV0ICE9IDE6Ci0gICAgcHJpbnQgInRlc3Q4OiBmYWlsZWQgdG8gcmVhZCB0aGUgbm9kZSIKKyAgICBwcmludCgidGVzdDg6IGZhaWxlZCB0byByZWFkIHRoZSBub2RlIikKICAgICBzeXMuZXhpdCgxKQogaWYgcmVhZGVyLk5hbWUoKSAhPSAiYSIgb3IgcmVhZGVyLklzRW1wdHlFbGVtZW50KCkgIT0gMToKLSAgICBwcmludCAidGVzdDg6IGZhaWxlZCB0byBhbmFseXplIHRoZSBub2RlIgorICAgIHByaW50KCJ0ZXN0ODogZmFpbGVkIHRvIGFuYWx5emUgdGhlIG5vZGUiKQogICAgIHN5cy5leGl0KDEpCiByZXQgPSByZWFkZXIuUmVhZCgpCiBpZiByZXQgIT0gMDoKLSAgICBwcmludCAidGVzdDg6IGZhaWxlZCB0byBkZXRlY3QgdGhlIEVPRiIKKyAgICBwcmludCgidGVzdDg6IGZhaWxlZCB0byBkZXRlY3QgdGhlIEVPRiIpCiAgICAgc3lzLmV4aXQoMSkKIAogIwogIyBBbm90aGVyIHRlc3QgcHJvdmlkZWQgYnkgU3TpcGhhbmUgQmlkb3VsIGFuZCBjaGVja2VkIHdpdGggQyMKICMKIGRlZiB0c3RfcmVhZGVyKHMpOgotICAgIGYgPSBTdHJpbmdJTy5TdHJpbmdJTyhzKQorICAgIGYgPSBzdHJfaW8ocykKICAgICBpbnB1dCA9IGxpYnhtbDIuaW5wdXRCdWZmZXIoZikKICAgICByZWFkZXIgPSBpbnB1dC5uZXdUZXh0UmVhZGVyKCJ0c3QiKQogICAgIHJlcyA9ICIiCkBAIC0zMjIsOCArMzI3LDggQEAKICIiIgogcmVzID0gdHN0X3JlYWRlcihkb2MpCiBpZiByZXMgIT0gZXhwZWN0OgotICAgIHByaW50ICJ0ZXN0NSBmYWlsZWQiCi0gICAgcHJpbnQgcmVzCisgICAgcHJpbnQoInRlc3Q1IGZhaWxlZCIpCisgICAgcHJpbnQocmVzKQogICAgIHN5cy5leGl0KDEpCiAKIGRvYz0iIiI8dGVzdD48Yi8+PGMvPjwvdGVzdD4iIiIKQEAgLTMzNCw4ICszMzksOCBAQAogIiIiCiByZXMgPSB0c3RfcmVhZGVyKGRvYykKIGlmIHJlcyAhPSBleHBlY3Q6Ci0gICAgcHJpbnQgInRlc3Q5IGZhaWxlZCIKLSAgICBwcmludCByZXMKKyAgICBwcmludCgidGVzdDkgZmFpbGVkIikKKyAgICBwcmludChyZXMpCiAgICAgc3lzLmV4aXQoMSkKIAogZG9jPSIiIjxhPjxiPmJiYjwvYj48Yz5jY2M8L2M+PC9hPiIiIgpAQCAtMzUwLDggKzM1NSw4IEBACiAiIiIKIHJlcyA9IHRzdF9yZWFkZXIoZG9jKQogaWYgcmVzICE9IGV4cGVjdDoKLSAgICBwcmludCAidGVzdDEwIGZhaWxlZCIKLSAgICBwcmludCByZXMKKyAgICBwcmludCgidGVzdDEwIGZhaWxlZCIpCisgICAgcHJpbnQocmVzKQogICAgIHN5cy5leGl0KDEpCiAKIGRvYz0iIiI8dGVzdCBhPSJhIi8+IiIiCkBAIC0zNjAsOCArMzY1LDggQEAKICIiIgogcmVzID0gdHN0X3JlYWRlcihkb2MpCiBpZiByZXMgIT0gZXhwZWN0OgotICAgIHByaW50ICJ0ZXN0MTEgZmFpbGVkIgotICAgIHByaW50IHJlcworICAgIHByaW50KCJ0ZXN0MTEgZmFpbGVkIikKKyAgICBwcmludChyZXMpCiAgICAgc3lzLmV4aXQoMSkKIAogZG9jPSIiIjx0ZXN0PjxhPmFhYTwvYT48Yi8+PC90ZXN0PiIiIgpAQCAtMzc0LDggKzM3OSw4IEBACiAiIiIKIHJlcyA9IHRzdF9yZWFkZXIoZG9jKQogaWYgcmVzICE9IGV4cGVjdDoKLSAgICBwcmludCAidGVzdDEyIGZhaWxlZCIKLSAgICBwcmludCByZXMKKyAgICBwcmludCgidGVzdDEyIGZhaWxlZCIpCisgICAgcHJpbnQocmVzKQogICAgIHN5cy5leGl0KDEpCiAKIGRvYz0iIiI8dGVzdD48cD48L3A+PC90ZXN0PiIiIgpAQCAtMzg2LDggKzM5MSw4IEBACiAiIiIKIHJlcyA9IHRzdF9yZWFkZXIoZG9jKQogaWYgcmVzICE9IGV4cGVjdDoKLSAgICBwcmludCAidGVzdDEzIGZhaWxlZCIKLSAgICBwcmludCByZXMKKyAgICBwcmludCgidGVzdDEzIGZhaWxlZCIpCisgICAgcHJpbnQocmVzKQogICAgIHN5cy5leGl0KDEpCiAKIGRvYz0iIiI8cD48L3A+IiIiCkBAIC0zOTYsOCArNDAxLDggQEAKICIiIgogcmVzID0gdHN0X3JlYWRlcihkb2MpCiBpZiByZXMgIT0gZXhwZWN0OgotICAgIHByaW50ICJ0ZXN0MTQgZmFpbGVkIgotICAgIHByaW50IHJlcworICAgIHByaW50KCJ0ZXN0MTQgZmFpbGVkIikKKyAgICBwcmludChyZXMpCiAgICAgc3lzLmV4aXQoMSkKIAogIwpAQCAtNDIxLDggKzQyNiw4IEBACiAiIiIKIHJlcyA9IHRzdF9yZWFkZXIoZG9jKQogaWYgcmVzICE9IGV4cGVjdDoKLSAgICBwcmludCAidGVzdDE1IGZhaWxlZCIKLSAgICBwcmludCByZXMKKyAgICBwcmludCgidGVzdDE1IGZhaWxlZCIpCisgICAgcHJpbnQocmVzKQogICAgIHN5cy5leGl0KDEpCiAKICMKQEAgLTQzNSw3ICs0NDAsNyBAQAogIyBNZW1vcnkgZGVidWcgc3BlY2lmaWMKIGxpYnhtbDIuY2xlYW51cFBhcnNlcigpCiBpZiBsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpID09IDA6Ci0gICAgcHJpbnQgIk9LIgorICAgIHByaW50KCJPSyIpCiBlbHNlOgotICAgIHByaW50ICJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkKKyAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQogICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvcmVhZGVyMi5weSBiL3B5dGhvbi90ZXN0cy9yZWFkZXIyLnB5CmluZGV4IGVhODkwZWMuLjg1NzA1NzUgMTAwNzU1Ci0tLSBhL3B5dGhvbi90ZXN0cy9yZWFkZXIyLnB5CisrKyBiL3B5dGhvbi90ZXN0cy9yZWFkZXIyLnB5CkBAIC01LDggKzUsMTMgQEAKIGltcG9ydCBzeXMKIGltcG9ydCBnbG9iCiBpbXBvcnQgc3RyaW5nCi1pbXBvcnQgU3RyaW5nSU8KIGltcG9ydCBsaWJ4bWwyCit0cnk6CisgICAgaW1wb3J0IFN0cmluZ0lPCisgICAgc3RyX2lvID0gU3RyaW5nSU8uU3RyaW5nSU8KK2V4Y2VwdDoKKyAgICBpbXBvcnQgaW8KKyAgICBzdHJfaW8gPSBpby5TdHJpbmdJTwogCiAjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwogbGlieG1sMi5kZWJ1Z01lbW9yeSgxKQpAQCAtMzAsNyArMzUsMTEgQEAKIHZhbGlkX2ZpbGVzID0gZ2xvYi5nbG9iKCIuLi8uLi90ZXN0L3ZhbGlkLyoueCoiKQogdmFsaWRfZmlsZXMuc29ydCgpCiBmb3IgZmlsZSBpbiB2YWxpZF9maWxlczoKLSAgICBpZiBzdHJpbmcuZmluZChmaWxlLCAidDgiKSAhPSAtMToKKyAgICBpZiBmaWxlLmZpbmQoInQ4IikgIT0gLTE6CisgICAgICAgIGNvbnRpbnVlCisgICAgaWYgZmlsZSA9PSAiLi4vLi4vdGVzdC92YWxpZC9yc3MueG1sIjoKKyAgICAgICAgY29udGludWUKKyAgICBpZiBmaWxlID09ICIuLi8uLi90ZXN0L3ZhbGlkL3hsaW5rLnhtbCI6CiAgICAgICAgIGNvbnRpbnVlCiAgICAgcmVhZGVyID0gbGlieG1sMi5uZXdUZXh0UmVhZGVyRmlsZW5hbWUoZmlsZSkKICAgICAjcHJpbnQgIiVzOiIgJSAoZmlsZSkKQEAgLTM5LDExICs0OCwxMSBAQAogICAgIHdoaWxlIHJldCA9PSAxOgogICAgICAgICByZXQgPSByZWFkZXIuUmVhZCgpCiAgICAgaWYgcmV0ICE9IDA6Ci0gICAgICAgIHByaW50ICJFcnJvciBwYXJzaW5nIGFuZCB2YWxpZGF0aW5nICVzIiAlIChmaWxlKQorICAgICAgICBwcmludCgiRXJyb3IgcGFyc2luZyBhbmQgdmFsaWRhdGluZyAlcyIgJSAoZmlsZSkpCiAJI3N5cy5leGl0KDEpCiAKIGlmIGVyciAhPSBleHBlY3Q6Ci0gICAgcHJpbnQgZXJyCisgICAgcHJpbnQoZXJyKQogCiAjCiAjIGFub3RoZXIgc2VwYXJhdGUgdGVzdCBiYXNlZCBvbiBTdGVwaGFuZSBCaWRvdWwgb25lCkBAIC03OSw3ICs4OCw3IEBACiByZXM9IiIKIGVycj0iIgogCi1pbnB1dCA9IGxpYnhtbDIuaW5wdXRCdWZmZXIoU3RyaW5nSU8uU3RyaW5nSU8ocykpCitpbnB1dCA9IGxpYnhtbDIuaW5wdXRCdWZmZXIoc3RyX2lvKHMpKQogcmVhZGVyID0gaW5wdXQubmV3VGV4dFJlYWRlcigidGVzdDIiKQogcmVhZGVyLlNldFBhcnNlclByb3AobGlieG1sMi5QQVJTRVJfTE9BRERURCwxKQogcmVhZGVyLlNldFBhcnNlclByb3AobGlieG1sMi5QQVJTRVJfREVGQVVMVEFUVFJTLDEpCkBAIC04OSwxMiArOTgsMTIgQEAKICAgICByZXMgPSByZXMgKyAiJXMsJXNcbiIgJSAocmVhZGVyLk5vZGVUeXBlKCkscmVhZGVyLk5hbWUoKSkKIAogaWYgcmVzICE9IGV4cGVjdDoKLSAgICBwcmludCAidGVzdDIgZmFpbGVkOiB1bmV4cGVjdGVkIG91dHB1dCIKLSAgICBwcmludCByZXMKKyAgICBwcmludCgidGVzdDIgZmFpbGVkOiB1bmV4cGVjdGVkIG91dHB1dCIpCisgICAgcHJpbnQocmVzKQogICAgIHN5cy5leGl0KDEpCiBpZiBlcnIgIT0gIiI6Ci0gICAgcHJpbnQgInRlc3QyIGZhaWxlZDogdmFsaWRhdGlvbiBlcnJvciBmb3VuZCIKLSAgICBwcmludCBlcnIKKyAgICBwcmludCgidGVzdDIgZmFpbGVkOiB2YWxpZGF0aW9uIGVycm9yIGZvdW5kIikKKyAgICBwcmludChlcnIpCiAgICAgc3lzLmV4aXQoMSkKIAogIwpAQCAtMTI0LDEyICsxMzMsMTIgQEAKIAogZGVmIG15UmVzb2x2ZXIoVVJMLCBJRCwgY3R4dCk6CiAgICAgaWYgVVJMID09ICJ0c3QuZW50IjoKLSAgICAgICAgcmV0dXJuKFN0cmluZ0lPLlN0cmluZ0lPKHRzdF9lbnQpKQorICAgICAgICByZXR1cm4oc3RyX2lvKHRzdF9lbnQpKQogICAgIHJldHVybiBOb25lCiAKIGxpYnhtbDIuc2V0RW50aXR5TG9hZGVyKG15UmVzb2x2ZXIpCiAKLWlucHV0ID0gbGlieG1sMi5pbnB1dEJ1ZmZlcihTdHJpbmdJTy5TdHJpbmdJTyhzKSkKK2lucHV0ID0gbGlieG1sMi5pbnB1dEJ1ZmZlcihzdHJfaW8ocykpCiByZWFkZXIgPSBpbnB1dC5uZXdUZXh0UmVhZGVyKCJ0ZXN0MyIpCiByZWFkZXIuU2V0UGFyc2VyUHJvcChsaWJ4bWwyLlBBUlNFUl9MT0FERFRELDEpCiByZWFkZXIuU2V0UGFyc2VyUHJvcChsaWJ4bWwyLlBBUlNFUl9ERUZBVUxUQVRUUlMsMSkKQEAgLTEzOSwxMiArMTQ4LDEyIEBACiAgICAgcmVzID0gcmVzICsgIiVzICVzXG4iICUgKHJlYWRlci5Ob2RlVHlwZSgpLHJlYWRlci5OYW1lKCkpCiAKIGlmIHJlcyAhPSBleHBlY3Q6Ci0gICAgcHJpbnQgInRlc3QzIGZhaWxlZDogdW5leHBlY3RlZCBvdXRwdXQiCi0gICAgcHJpbnQgcmVzCisgICAgcHJpbnQoInRlc3QzIGZhaWxlZDogdW5leHBlY3RlZCBvdXRwdXQiKQorICAgIHByaW50KHJlcykKICAgICBzeXMuZXhpdCgxKQogaWYgZXJyICE9ICIiOgotICAgIHByaW50ICJ0ZXN0MyBmYWlsZWQ6IHZhbGlkYXRpb24gZXJyb3IgZm91bmQiCi0gICAgcHJpbnQgZXJyCisgICAgcHJpbnQoInRlc3QzIGZhaWxlZDogdmFsaWRhdGlvbiBlcnJvciBmb3VuZCIpCisgICAgcHJpbnQoZXJyKQogICAgIHN5cy5leGl0KDEpCiAKICMKQEAgLTE4Myw3ICsxOTIsNyBAQAogcmVzPSIiCiBlcnI9IiIKIAotaW5wdXQgPSBsaWJ4bWwyLmlucHV0QnVmZmVyKFN0cmluZ0lPLlN0cmluZ0lPKHMpKQoraW5wdXQgPSBsaWJ4bWwyLmlucHV0QnVmZmVyKHN0cl9pbyhzKSkKIHJlYWRlciA9IGlucHV0Lm5ld1RleHRSZWFkZXIoInRlc3Q0IikKIHJlYWRlci5TZXRQYXJzZXJQcm9wKGxpYnhtbDIuUEFSU0VSX0xPQUREVEQsMSkKIHJlYWRlci5TZXRQYXJzZXJQcm9wKGxpYnhtbDIuUEFSU0VSX0RFRkFVTFRBVFRSUywxKQpAQCAtMTkzLDEyICsyMDIsMTIgQEAKICAgICByZXMgPSByZXMgKyAiJXMgJXMgJWRcbiIgJSAocmVhZGVyLk5vZGVUeXBlKCkscmVhZGVyLk5hbWUoKSxyZWFkZXIuRGVwdGgoKSkKIAogaWYgcmVzICE9IGV4cGVjdDoKLSAgICBwcmludCAidGVzdDQgZmFpbGVkOiB1bmV4cGVjdGVkIG91dHB1dCIKLSAgICBwcmludCByZXMKKyAgICBwcmludCgidGVzdDQgZmFpbGVkOiB1bmV4cGVjdGVkIG91dHB1dCIpCisgICAgcHJpbnQocmVzKQogICAgIHN5cy5leGl0KDEpCiBpZiBlcnIgIT0gIiI6Ci0gICAgcHJpbnQgInRlc3Q0IGZhaWxlZDogdmFsaWRhdGlvbiBlcnJvciBmb3VuZCIKLSAgICBwcmludCBlcnIKKyAgICBwcmludCgidGVzdDQgZmFpbGVkOiB2YWxpZGF0aW9uIGVycm9yIGZvdW5kIikKKyAgICBwcmludChlcnIpCiAgICAgc3lzLmV4aXQoMSkKIAogIwpAQCAtMjI4LDE4ICsyMzcsMTggQEAKIHJlcz0iIgogZXJyPSIiCiAKLWlucHV0ID0gbGlieG1sMi5pbnB1dEJ1ZmZlcihTdHJpbmdJTy5TdHJpbmdJTyhzKSkKK2lucHV0ID0gbGlieG1sMi5pbnB1dEJ1ZmZlcihzdHJfaW8ocykpCiByZWFkZXIgPSBpbnB1dC5uZXdUZXh0UmVhZGVyKCJ0ZXN0NSIpCiByZWFkZXIuU2V0UGFyc2VyUHJvcChsaWJ4bWwyLlBBUlNFUl9WQUxJREFURSwxKQogd2hpbGUgcmVhZGVyLlJlYWQoKSA9PSAxOgogICAgIHJlcyA9IHJlcyArICIlcyAlcyAlZFxuIiAlIChyZWFkZXIuTm9kZVR5cGUoKSxyZWFkZXIuTmFtZSgpLHJlYWRlci5EZXB0aCgpKQogCiBpZiByZXMgIT0gZXhwZWN0OgotICAgIHByaW50ICJ0ZXN0NSBmYWlsZWQ6IHVuZXhwZWN0ZWQgb3V0cHV0IgotICAgIHByaW50IHJlcworICAgIHByaW50KCJ0ZXN0NSBmYWlsZWQ6IHVuZXhwZWN0ZWQgb3V0cHV0IikKKyAgICBwcmludChyZXMpCiBpZiBlcnIgIT0gIiI6Ci0gICAgcHJpbnQgInRlc3Q1IGZhaWxlZDogdmFsaWRhdGlvbiBlcnJvciBmb3VuZCIKLSAgICBwcmludCBlcnIKKyAgICBwcmludCgidGVzdDUgZmFpbGVkOiB2YWxpZGF0aW9uIGVycm9yIGZvdW5kIikKKyAgICBwcmludChlcnIpCiAKICMKICMgY2xlYW51cApAQCAtMjUwLDcgKzI1OSw3IEBACiAjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwogbGlieG1sMi5jbGVhbnVwUGFyc2VyKCkKIGlmIGxpYnhtbDIuZGVidWdNZW1vcnkoMSkgPT0gMDoKLSAgICBwcmludCAiT0siCisgICAgcHJpbnQoIk9LIikKIGVsc2U6Ci0gICAgcHJpbnQgIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKQorICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCiAgICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy9yZWFkZXIzLnB5IGIvcHl0aG9uL3Rlc3RzL3JlYWRlcjMucHkKaW5kZXggMjQ1OGM4OS4uNDMwMmI2YyAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL3JlYWRlcjMucHkKKysrIGIvcHl0aG9uL3Rlc3RzL3JlYWRlcjMucHkKQEAgLTMsOCArMywxMyBAQAogIyB0aGlzIHRlc3RzIHRoZSBlbnRpdGllcyBzdWJzdGl0dXRpb25zIHdpdGggdGhlIFhtbFRleHRSZWFkZXIgaW50ZXJmYWNlCiAjCiBpbXBvcnQgc3lzCi1pbXBvcnQgU3RyaW5nSU8KIGltcG9ydCBsaWJ4bWwyCit0cnk6CisgICAgaW1wb3J0IFN0cmluZ0lPCisgICAgc3RyX2lvID0gU3RyaW5nSU8uU3RyaW5nSU8KK2V4Y2VwdDoKKyAgICBpbXBvcnQgaW8KKyAgICBzdHJfaW8gPSBpby5TdHJpbmdJTwogCiBkb2NzdHI9IiIiPD94bWwgdmVyc2lvbj0nMS4wJz8+CiA8IURPQ1RZUEUgZG9jIFsKQEAgLTE4LDkwICsyMyw5MCBAQAogIwogIyBGaXJzdCB0ZXN0LCBub3JtYWwgZG9uJ3Qgc3Vic3RpdHV0ZSBlbnRpdGllcy4KICMKLWYgPSBTdHJpbmdJTy5TdHJpbmdJTyhkb2NzdHIpCitmID0gc3RyX2lvKGRvY3N0cikKIGlucHV0ID0gbGlieG1sMi5pbnB1dEJ1ZmZlcihmKQogcmVhZGVyID0gaW5wdXQubmV3VGV4dFJlYWRlcigidGVzdF9ub2VudCIpCiByZXQgPSByZWFkZXIuUmVhZCgpCiBpZiByZXQgIT0gMToKLSAgICBwcmludCAiRXJyb3IgcmVhZGluZyB0byByb290IgorICAgIHByaW50KCJFcnJvciByZWFkaW5nIHRvIHJvb3QiKQogICAgIHN5cy5leGl0KDEpCiBpZiByZWFkZXIuTmFtZSgpID09ICJkb2MiIG9yIHJlYWRlci5Ob2RlVHlwZSgpID09IDEwOgogICAgIHJldCA9IHJlYWRlci5SZWFkKCkKIGlmIHJldCAhPSAxOgotICAgIHByaW50ICJFcnJvciByZWFkaW5nIHRvIHJvb3QiCisgICAgcHJpbnQoIkVycm9yIHJlYWRpbmcgdG8gcm9vdCIpCiAgICAgc3lzLmV4aXQoMSkKIGlmIHJlYWRlci5OYW1lKCkgIT0gImRvYyIgb3IgcmVhZGVyLk5vZGVUeXBlKCkgIT0gMToKLSAgICBwcmludCAidGVzdF9ub3JtYWw6IEVycm9yIHJlYWRpbmcgdGhlIHJvb3QgZWxlbWVudCIKKyAgICBwcmludCgidGVzdF9ub3JtYWw6IEVycm9yIHJlYWRpbmcgdGhlIHJvb3QgZWxlbWVudCIpCiAgICAgc3lzLmV4aXQoMSkKIHJldCA9IHJlYWRlci5SZWFkKCkKIGlmIHJldCAhPSAxOgotICAgIHByaW50ICJ0ZXN0X25vcm1hbDogRXJyb3IgcmVhZGluZyB0byB0aGUgZW50aXR5IgorICAgIHByaW50KCJ0ZXN0X25vcm1hbDogRXJyb3IgcmVhZGluZyB0byB0aGUgZW50aXR5IikKICAgICBzeXMuZXhpdCgxKQogaWYgcmVhZGVyLk5hbWUoKSAhPSAidHN0IiBvciByZWFkZXIuTm9kZVR5cGUoKSAhPSA1OgotICAgIHByaW50ICJ0ZXN0X25vcm1hbDogRXJyb3IgcmVhZGluZyB0aGUgZW50aXR5IgorICAgIHByaW50KCJ0ZXN0X25vcm1hbDogRXJyb3IgcmVhZGluZyB0aGUgZW50aXR5IikKICAgICBzeXMuZXhpdCgxKQogcmV0ID0gcmVhZGVyLlJlYWQoKQogaWYgcmV0ICE9IDE6Ci0gICAgcHJpbnQgInRlc3Rfbm9ybWFsOiBFcnJvciByZWFkaW5nIHRvIHRoZSBlbmQgb2Ygcm9vdCIKKyAgICBwcmludCgidGVzdF9ub3JtYWw6IEVycm9yIHJlYWRpbmcgdG8gdGhlIGVuZCBvZiByb290IikKICAgICBzeXMuZXhpdCgxKQogaWYgcmVhZGVyLk5hbWUoKSAhPSAiZG9jIiBvciByZWFkZXIuTm9kZVR5cGUoKSAhPSAxNToKLSAgICBwcmludCAidGVzdF9ub3JtYWw6IEVycm9yIHJlYWRpbmcgdGhlIGVuZCBvZiB0aGUgcm9vdCBlbGVtZW50IgorICAgIHByaW50KCJ0ZXN0X25vcm1hbDogRXJyb3IgcmVhZGluZyB0aGUgZW5kIG9mIHRoZSByb290IGVsZW1lbnQiKQogICAgIHN5cy5leGl0KDEpCiByZXQgPSByZWFkZXIuUmVhZCgpCiBpZiByZXQgIT0gMDoKLSAgICBwcmludCAidGVzdF9ub3JtYWw6IEVycm9yIGRldGVjdGluZyB0aGUgZW5kIgorICAgIHByaW50KCJ0ZXN0X25vcm1hbDogRXJyb3IgZGV0ZWN0aW5nIHRoZSBlbmQiKQogICAgIHN5cy5leGl0KDEpCiAKICMKICMgU2Vjb25kIHRlc3QsIGNvbXBsZXRlbHkgc3Vic3RpdHV0ZSB0aGUgZW50aXRpZXMuCiAjCi1mID0gU3RyaW5nSU8uU3RyaW5nSU8oZG9jc3RyKQorZiA9IHN0cl9pbyhkb2NzdHIpCiBpbnB1dCA9IGxpYnhtbDIuaW5wdXRCdWZmZXIoZikKIHJlYWRlciA9IGlucHV0Lm5ld1RleHRSZWFkZXIoInRlc3Rfbm9lbnQiKQogcmVhZGVyLlNldFBhcnNlclByb3AobGlieG1sMi5QQVJTRVJfU1VCU1RfRU5USVRJRVMsIDEpCiByZXQgPSByZWFkZXIuUmVhZCgpCiBpZiByZXQgIT0gMToKLSAgICBwcmludCAiRXJyb3IgcmVhZGluZyB0byByb290IgorICAgIHByaW50KCJFcnJvciByZWFkaW5nIHRvIHJvb3QiKQogICAgIHN5cy5leGl0KDEpCiBpZiByZWFkZXIuTmFtZSgpID09ICJkb2MiIG9yIHJlYWRlci5Ob2RlVHlwZSgpID09IDEwOgogICAgIHJldCA9IHJlYWRlci5SZWFkKCkKIGlmIHJldCAhPSAxOgotICAgIHByaW50ICJFcnJvciByZWFkaW5nIHRvIHJvb3QiCisgICAgcHJpbnQoIkVycm9yIHJlYWRpbmcgdG8gcm9vdCIpCiAgICAgc3lzLmV4aXQoMSkKIGlmIHJlYWRlci5OYW1lKCkgIT0gImRvYyIgb3IgcmVhZGVyLk5vZGVUeXBlKCkgIT0gMToKLSAgICBwcmludCAidGVzdF9ub2VudDogRXJyb3IgcmVhZGluZyB0aGUgcm9vdCBlbGVtZW50IgorICAgIHByaW50KCJ0ZXN0X25vZW50OiBFcnJvciByZWFkaW5nIHRoZSByb290IGVsZW1lbnQiKQogICAgIHN5cy5leGl0KDEpCiByZXQgPSByZWFkZXIuUmVhZCgpCiBpZiByZXQgIT0gMToKLSAgICBwcmludCAidGVzdF9ub2VudDogRXJyb3IgcmVhZGluZyB0byB0aGUgZW50aXR5IGNvbnRlbnQiCisgICAgcHJpbnQoInRlc3Rfbm9lbnQ6IEVycm9yIHJlYWRpbmcgdG8gdGhlIGVudGl0eSBjb250ZW50IikKICAgICBzeXMuZXhpdCgxKQogaWYgcmVhZGVyLk5hbWUoKSAhPSAicCIgb3IgcmVhZGVyLk5vZGVUeXBlKCkgIT0gMToKLSAgICBwcmludCAidGVzdF9ub2VudDogRXJyb3IgcmVhZGluZyB0aGUgcCBlbGVtZW50IGZyb20gZW50aXR5IgorICAgIHByaW50KCJ0ZXN0X25vZW50OiBFcnJvciByZWFkaW5nIHRoZSBwIGVsZW1lbnQgZnJvbSBlbnRpdHkiKQogICAgIHN5cy5leGl0KDEpCiByZXQgPSByZWFkZXIuUmVhZCgpCiBpZiByZXQgIT0gMToKLSAgICBwcmludCAidGVzdF9ub2VudDogRXJyb3IgcmVhZGluZyB0byB0aGUgdGV4dCBub2RlIgorICAgIHByaW50KCJ0ZXN0X25vZW50OiBFcnJvciByZWFkaW5nIHRvIHRoZSB0ZXh0IG5vZGUiKQogICAgIHN5cy5leGl0KDEpCiBpZiByZWFkZXIuTm9kZVR5cGUoKSAhPSAzIG9yIHJlYWRlci5WYWx1ZSgpICE9ICJ0ZXN0IjoKLSAgICBwcmludCAidGVzdF9ub2VudDogRXJyb3IgcmVhZGluZyB0aGUgdGV4dCBub2RlIgorICAgIHByaW50KCJ0ZXN0X25vZW50OiBFcnJvciByZWFkaW5nIHRoZSB0ZXh0IG5vZGUiKQogICAgIHN5cy5leGl0KDEpCiByZXQgPSByZWFkZXIuUmVhZCgpCiBpZiByZXQgIT0gMToKLSAgICBwcmludCAidGVzdF9ub2VudDogRXJyb3IgcmVhZGluZyB0byB0aGUgZW5kIG9mIHAgZWxlbWVudCIKKyAgICBwcmludCgidGVzdF9ub2VudDogRXJyb3IgcmVhZGluZyB0byB0aGUgZW5kIG9mIHAgZWxlbWVudCIpCiAgICAgc3lzLmV4aXQoMSkKIGlmIHJlYWRlci5OYW1lKCkgIT0gInAiIG9yIHJlYWRlci5Ob2RlVHlwZSgpICE9IDE1OgotICAgIHByaW50ICJ0ZXN0X25vZW50OiBFcnJvciByZWFkaW5nIHRoZSBlbmQgb2YgdGhlIHAgZWxlbWVudCIKKyAgICBwcmludCgidGVzdF9ub2VudDogRXJyb3IgcmVhZGluZyB0aGUgZW5kIG9mIHRoZSBwIGVsZW1lbnQiKQogICAgIHN5cy5leGl0KDEpCiByZXQgPSByZWFkZXIuUmVhZCgpCiBpZiByZXQgIT0gMToKLSAgICBwcmludCAidGVzdF9ub2VudDogRXJyb3IgcmVhZGluZyB0byB0aGUgZW5kIG9mIHJvb3QiCisgICAgcHJpbnQoInRlc3Rfbm9lbnQ6IEVycm9yIHJlYWRpbmcgdG8gdGhlIGVuZCBvZiByb290IikKICAgICBzeXMuZXhpdCgxKQogaWYgcmVhZGVyLk5hbWUoKSAhPSAiZG9jIiBvciByZWFkZXIuTm9kZVR5cGUoKSAhPSAxNToKLSAgICBwcmludCAidGVzdF9ub2VudDogRXJyb3IgcmVhZGluZyB0aGUgZW5kIG9mIHRoZSByb290IGVsZW1lbnQiCisgICAgcHJpbnQoInRlc3Rfbm9lbnQ6IEVycm9yIHJlYWRpbmcgdGhlIGVuZCBvZiB0aGUgcm9vdCBlbGVtZW50IikKICAgICBzeXMuZXhpdCgxKQogcmV0ID0gcmVhZGVyLlJlYWQoKQogaWYgcmV0ICE9IDA6Ci0gICAgcHJpbnQgInRlc3Rfbm9lbnQ6IEVycm9yIGRldGVjdGluZyB0aGUgZW5kIgorICAgIHByaW50KCJ0ZXN0X25vZW50OiBFcnJvciBkZXRlY3RpbmcgdGhlIGVuZCIpCiAgICAgc3lzLmV4aXQoMSkKIAogIwpAQCAtMTIyLDEyICsxMjcsMTIgQEAKIAogZGVmIG15UmVzb2x2ZXIoVVJMLCBJRCwgY3R4dCk6CiAgICAgaWYgVVJMID09ICJzaW1wbGVzdHJ1Y3QyLmVudCI6Ci0gICAgICAgIHJldHVybihTdHJpbmdJTy5TdHJpbmdJTyhzaW1wbGVzdHJ1Y3QyX2VudCkpCisgICAgICAgIHJldHVybihzdHJfaW8oc2ltcGxlc3RydWN0Ml9lbnQpKQogICAgIHJldHVybiBOb25lCiAKIGxpYnhtbDIuc2V0RW50aXR5TG9hZGVyKG15UmVzb2x2ZXIpCiAKLWlucHV0ID0gbGlieG1sMi5pbnB1dEJ1ZmZlcihTdHJpbmdJTy5TdHJpbmdJTyhzKSkKK2lucHV0ID0gbGlieG1sMi5pbnB1dEJ1ZmZlcihzdHJfaW8ocykpCiByZWFkZXIgPSBpbnB1dC5uZXdUZXh0UmVhZGVyKCJ0ZXN0MyIpCiByZWFkZXIuU2V0UGFyc2VyUHJvcChsaWJ4bWwyLlBBUlNFUl9TVUJTVF9FTlRJVElFUywxKQogd2hpbGUgcmVhZGVyLlJlYWQoKSA9PSAxOgpAQCAtMTM1LDggKzE0MCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5EZXB0aCgpLHJlYWRlci5Jc0VtcHR5RWxlbWVudCgpKQogCiBpZiByZXMgIT0gZXhwZWN0OgotICAgIHByaW50ICJ0ZXN0MyBmYWlsZWQ6IHVuZXhwZWN0ZWQgb3V0cHV0IgotICAgIHByaW50IHJlcworICAgIHByaW50KCJ0ZXN0MyBmYWlsZWQ6IHVuZXhwZWN0ZWQgb3V0cHV0IikKKyAgICBwcmludChyZXMpCiAgICAgc3lzLmV4aXQoMSkKIAogIwpAQCAtMTQ5LDcgKzE1NCw3IEBACiAjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwogbGlieG1sMi5jbGVhbnVwUGFyc2VyKCkKIGlmIGxpYnhtbDIuZGVidWdNZW1vcnkoMSkgPT0gMDoKLSAgICBwcmludCAiT0siCisgICAgcHJpbnQoIk9LIikKIGVsc2U6Ci0gICAgcHJpbnQgIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKQorICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCiAgICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy9yZWFkZXI0LnB5IGIvcHl0aG9uL3Rlc3RzL3JlYWRlcjQucHkKaW5kZXggMDgyNDkyOS4uMGJiM2UzZiAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL3JlYWRlcjQucHkKKysrIGIvcHl0aG9uL3Rlc3RzL3JlYWRlcjQucHkKQEAgLTMsMTQgKzMsMTkgQEAKICMgdGhpcyB0ZXN0cyB0aGUgYmFzaWMgQVBJcyBvZiB0aGUgWG1sVGV4dFJlYWRlciBpbnRlcmZhY2UKICMKIGltcG9ydCBsaWJ4bWwyCi1pbXBvcnQgU3RyaW5nSU8KIGltcG9ydCBzeXMKK3RyeToKKyAgICBpbXBvcnQgU3RyaW5nSU8KKyAgICBzdHJfaW8gPSBTdHJpbmdJTy5TdHJpbmdJTworZXhjZXB0OgorICAgIGltcG9ydCBpbworICAgIHN0cl9pbyA9IGlvLlN0cmluZ0lPCiAKICMgTWVtb3J5IGRlYnVnIHNwZWNpZmljCiBsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpCiAKIGRlZiB0c3RfcmVhZGVyKHMpOgotICAgIGYgPSBTdHJpbmdJTy5TdHJpbmdJTyhzKQorICAgIGYgPSBzdHJfaW8ocykKICAgICBpbnB1dCA9IGxpYnhtbDIuaW5wdXRCdWZmZXIoZikKICAgICByZWFkZXIgPSBpbnB1dC5uZXdUZXh0UmVhZGVyKCJ0c3QiKQogICAgIHJlcyA9ICIiCkBAIC0zMiwxNCArMzcsMTQgQEAKIHJlcyA9IHRzdF9yZWFkZXIoIiIiPHRlc3Q+PGIvPjxjLz48L3Rlc3Q+IiIiKQogCiBpZiByZXMgIT0gZXhwZWN0OgotICAgIHByaW50ICJEaWQgbm90IGdldCB0aGUgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZToiCi0gICAgcHJpbnQgcmVzCisgICAgcHJpbnQoIkRpZCBub3QgZ2V0IHRoZSBleHBlY3RlZCBlcnJvciBtZXNzYWdlOiIpCisgICAgcHJpbnQocmVzKQogICAgIHN5cy5leGl0KDEpCiAKICMgTWVtb3J5IGRlYnVnIHNwZWNpZmljCiBsaWJ4bWwyLmNsZWFudXBQYXJzZXIoKQogaWYgbGlieG1sMi5kZWJ1Z01lbW9yeSgxKSA9PSAwOgotICAgIHByaW50ICJPSyIKKyAgICBwcmludCgiT0siKQogZWxzZToKLSAgICBwcmludCAiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpCisgICAgcHJpbnQoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKSkKICAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKQpkaWZmIC0tZ2l0IGEvcHl0aG9uL3Rlc3RzL3JlYWRlcjUucHkgYi9weXRob24vdGVzdHMvcmVhZGVyNS5weQppbmRleCBmY2JhZDYxLi44MmQwZGFlIDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMvcmVhZGVyNS5weQorKysgYi9weXRob24vdGVzdHMvcmVhZGVyNS5weQpAQCAtNCw3ICs0LDYgQEAKICMgdGhpcyBleHRyYWN0IHRoZSBEcmFnb24gYmlibGlvZ3JhcGh5IGVudHJpZXMgZnJvbSB0aGUgWE1MIHNwZWNpZmljYXRpb24KICMKIGltcG9ydCBsaWJ4bWwyCi1pbXBvcnQgU3RyaW5nSU8KIGltcG9ydCBzeXMKIAogIyBNZW1vcnkgZGVidWcgc3BlY2lmaWMKQEAgLTE1LDExICsxNCwxMSBAQAogPGVtcGg+Q29tcGlsZXJzOiAgUHJpbmNpcGxlcywgVGVjaG5pcXVlcywgYW5kIFRvb2xzPC9lbXBoPi4KIFJlYWRpbmc6ICBBZGRpc29uLVdlc2xleSwgMTk4NiwgcnB0LiBjb3JyLiAxOTg4LjwvYmlibD4iIiIKIAotZiA9IG9wZW4oJy4uLy4uL3Rlc3QvdmFsaWQvUkVDLXhtbC0xOTk4MDIxMC54bWwnKQorZiA9IG9wZW4oJy4uLy4uL3Rlc3QvdmFsaWQvUkVDLXhtbC0xOTk4MDIxMC54bWwnLCAncmInKQogaW5wdXQgPSBsaWJ4bWwyLmlucHV0QnVmZmVyKGYpCiByZWFkZXIgPSBpbnB1dC5uZXdUZXh0UmVhZGVyKCJSRUMiKQogcmVzPSIiCi13aGlsZSByZWFkZXIuUmVhZCgpOgord2hpbGUgcmVhZGVyLlJlYWQoKSA+IDA6CiAgICAgd2hpbGUgcmVhZGVyLk5hbWUoKSA9PSAnYmlibCc6CiAgICAgICAgIG5vZGUgPSByZWFkZXIuRXhwYW5kKCkgICAgICAgICAgICAjIGV4cGFuZCB0aGUgc3VidHJlZQogICAgICAgICBpZiBub2RlLnhwYXRoRXZhbCgiQGlkID0gJ0FobyciKTogIyB1c2UgWFBhdGggb24gaXQKQEAgLTI4LDkgKzI3LDkgQEAKICAgICAgICAgICAgIGJyZWFrOwogCiBpZiByZXMgIT0gZXhwZWN0OgotICAgIHByaW50ICJFcnJvcjogZGlkbid0IGdldCB0aGUgZXhwZWN0ZWQgb3V0cHV0IgotICAgIHByaW50ICJnb3QgJyVzJyIgJSAocmVzKQotICAgIHByaW50ICJleHBlY3RlZCAnJXMnIiAlIChleHBlY3QpCisgICAgcHJpbnQoIkVycm9yOiBkaWRuJ3QgZ2V0IHRoZSBleHBlY3RlZCBvdXRwdXQiKQorICAgIHByaW50KCJnb3QgJyVzJyIgJSAocmVzKSkKKyAgICBwcmludCgiZXhwZWN0ZWQgJyVzJyIgJSAoZXhwZWN0KSkKICAgICAKIAogIwpAQCAtNDIsNyArNDEsNyBAQAogIyBNZW1vcnkgZGVidWcgc3BlY2lmaWMKIGxpYnhtbDIuY2xlYW51cFBhcnNlcigpCiBpZiBsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpID09IDA6Ci0gICAgcHJpbnQgIk9LIgorICAgIHByaW50KCJPSyIpCiBlbHNlOgotICAgIHByaW50ICJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkKKyAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQogICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvcmVhZGVyNi5weSBiL3B5dGhvbi90ZXN0cy9yZWFkZXI2LnB5CmluZGV4IDdhMzQ2MDEuLmVmMzNiMTggMTAwNzU1Ci0tLSBhL3B5dGhvbi90ZXN0cy9yZWFkZXI2LnB5CisrKyBiL3B5dGhvbi90ZXN0cy9yZWFkZXI2LnB5CkBAIC0zLDggKzMsMTMgQEAKICMgdGhpcyB0ZXN0cyB0aGUgZW50aXRpZXMgc3Vic3RpdHV0aW9ucyB3aXRoIHRoZSBYbWxUZXh0UmVhZGVyIGludGVyZmFjZQogIwogaW1wb3J0IHN5cwotaW1wb3J0IFN0cmluZ0lPCiBpbXBvcnQgbGlieG1sMgordHJ5OgorICAgIGltcG9ydCBTdHJpbmdJTworICAgIHN0cl9pbyA9IFN0cmluZ0lPLlN0cmluZ0lPCitleGNlcHQ6CisgICAgaW1wb3J0IGlvCisgICAgc3RyX2lvID0gaW8uU3RyaW5nSU8KIAogc2NoZW1hPSIiIjxlbGVtZW50IG5hbWU9ImZvbyIgeG1sbnM9Imh0dHA6Ly9yZWxheG5nLm9yZy9ucy9zdHJ1Y3R1cmUvMS4wIgogICAgICAgICAgZGF0YXR5cGVMaWJyYXJ5PSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1kYXRhdHlwZXMiPgpAQCAtNDEsNyArNDYsNyBAQAogPGl0ZW0+MTAwPC9pdGVtPgogPC9mb28+IiIiCiAKLWYgPSBTdHJpbmdJTy5TdHJpbmdJTyhkb2NzdHIpCitmID0gc3RyX2lvKGRvY3N0cikKIGlucHV0ID0gbGlieG1sMi5pbnB1dEJ1ZmZlcihmKQogcmVhZGVyID0gaW5wdXQubmV3VGV4dFJlYWRlcigiY29ycmVjdCIpCiByZWFkZXIuUmVsYXhOR1NldFNjaGVtYShybmdzKQpAQCAtNTAsMTEgKzU1LDExIEBACiAgICAgcmV0ID0gcmVhZGVyLlJlYWQoKQogCiBpZiByZXQgIT0gMDoKLSAgICBwcmludCAiRXJyb3IgcGFyc2luZyB0aGUgZG9jdW1lbnQiCisgICAgcHJpbnQoIkVycm9yIHBhcnNpbmcgdGhlIGRvY3VtZW50IikKICAgICBzeXMuZXhpdCgxKQogCiBpZiByZWFkZXIuSXNWYWxpZCgpICE9IDE6Ci0gICAgcHJpbnQgIkRvY3VtZW50IGZhaWxlZCB0byB2YWxpZGF0ZSIKKyAgICBwcmludCgiRG9jdW1lbnQgZmFpbGVkIHRvIHZhbGlkYXRlIikKICAgICBzeXMuZXhpdCgxKQogCiAjCkBAIC04NCw3ICs4OSw3IEBACiAgICAgZXJyID0gZXJyICsgIiVzIiAlIChzdHIpCiBsaWJ4bWwyLnJlZ2lzdGVyRXJyb3JIYW5kbGVyKGNhbGxiYWNrLCAiIikKIAotZiA9IFN0cmluZ0lPLlN0cmluZ0lPKGRvY3N0cikKK2YgPSBzdHJfaW8oZG9jc3RyKQogaW5wdXQgPSBsaWJ4bWwyLmlucHV0QnVmZmVyKGYpCiByZWFkZXIgPSBpbnB1dC5uZXdUZXh0UmVhZGVyKCJlcnJvciIpCiByZWFkZXIuUmVsYXhOR1NldFNjaGVtYShybmdzKQpAQCAtOTMsMTYgKzk4LDE2IEBACiAgICAgcmV0ID0gcmVhZGVyLlJlYWQoKQogCiBpZiByZXQgIT0gMDoKLSAgICBwcmludCAiRXJyb3IgcGFyc2luZyB0aGUgZG9jdW1lbnQiCisgICAgcHJpbnQoIkVycm9yIHBhcnNpbmcgdGhlIGRvY3VtZW50IikKICAgICBzeXMuZXhpdCgxKQogCiBpZiByZWFkZXIuSXNWYWxpZCgpICE9IDA6Ci0gICAgcHJpbnQgIkRvY3VtZW50IGZhaWxlZCB0byBkZXRlY3QgdGhlIHZhbGlkYXRpb24gZXJyb3IiCisgICAgcHJpbnQoIkRvY3VtZW50IGZhaWxlZCB0byBkZXRlY3QgdGhlIHZhbGlkYXRpb24gZXJyb3IiKQogICAgIHN5cy5leGl0KDEpCiAKIGlmIGVyciAhPSBleHBlY3Q6Ci0gICAgcHJpbnQgIkRpZCBub3QgZ2V0IHRoZSBleHBlY3RlZCBlcnJvciBtZXNzYWdlOiIKLSAgICBwcmludCBlcnIKKyAgICBwcmludCgiRGlkIG5vdCBnZXQgdGhlIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2U6IikKKyAgICBwcmludChlcnIpCiAgICAgc3lzLmV4aXQoMSkKIAogIwpAQCAtMTE3LDcgKzEyMiw3IEBACiAjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwogbGlieG1sMi5jbGVhbnVwUGFyc2VyKCkKIGlmIGxpYnhtbDIuZGVidWdNZW1vcnkoMSkgPT0gMDoKLSAgICBwcmludCAiT0siCisgICAgcHJpbnQoIk9LIikKIGVsc2U6Ci0gICAgcHJpbnQgIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKQorICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCiAgICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy9yZWFkZXI3LnB5IGIvcHl0aG9uL3Rlc3RzL3JlYWRlcjcucHkKaW5kZXggMzVhNDI2Zi4uYTI0ZWUxMSAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL3JlYWRlcjcucHkKKysrIGIvcHl0aG9uL3Rlc3RzL3JlYWRlcjcucHkKQEAgLTMsNyArMyw3IEBACiAjIHRoaXMgdGVzdHMgdGhlIGVudGl0aWVzIHN1YnN0aXR1dGlvbnMgd2l0aCB0aGUgWG1sVGV4dFJlYWRlciBpbnRlcmZhY2UKICMKIGltcG9ydCBzeXMKLWltcG9ydCBTdHJpbmdJTworaW1wb3J0IGlvCiBpbXBvcnQgbGlieG1sMgogCiAjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwpAQCAtNDQsMTIgKzQ0LDEyIEBACiAgICAgcmV0ID0gcmVhZGVyLlJlYWQoKQogCiBpZiByZXQgIT0gMDoKLSAgICBwcmludCAiRXJyb3IgcGFyc2luZyB0aGUgZG9jdW1lbnQgdGVzdDEiCisgICAgcHJpbnQoIkVycm9yIHBhcnNpbmcgdGhlIGRvY3VtZW50IHRlc3QxIikKICAgICBzeXMuZXhpdCgxKQogCiBpZiByZXN1bHQgIT0gZXhwZWN0OgotICAgIHByaW50ICJVbmV4cGVjdGVkIHJlc3VsdCBmb3IgdGVzdDEiCi0gICAgcHJpbnQgcmVzdWx0CisgICAgcHJpbnQoIlVuZXhwZWN0ZWQgcmVzdWx0IGZvciB0ZXN0MSIpCisgICAgcHJpbnQocmVzdWx0KQogICAgIHN5cy5leGl0KDEpCiAKICMKQEAgLTgwLDEyICs4MCwxMiBAQAogICAgIHJldCA9IHJlYWRlci5SZWFkKCkKIAogaWYgcmV0ICE9IDA6Ci0gICAgcHJpbnQgIkVycm9yIHBhcnNpbmcgdGhlIGRvY3VtZW50IHRlc3QyIgorICAgIHByaW50KCJFcnJvciBwYXJzaW5nIHRoZSBkb2N1bWVudCB0ZXN0MiIpCiAgICAgc3lzLmV4aXQoMSkKIAogaWYgcmVzdWx0ICE9IGV4cGVjdDoKLSAgICBwcmludCAiVW5leHBlY3RlZCByZXN1bHQgZm9yIHRlc3QyIgotICAgIHByaW50IHJlc3VsdAorICAgIHByaW50KCJVbmV4cGVjdGVkIHJlc3VsdCBmb3IgdGVzdDIiKQorICAgIHByaW50KHJlc3VsdCkKICAgICBzeXMuZXhpdCgxKQogCiAjCkBAIC05Niw3ICs5Niw3IEBACiAjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwogbGlieG1sMi5jbGVhbnVwUGFyc2VyKCkKIGlmIGxpYnhtbDIuZGVidWdNZW1vcnkoMSkgPT0gMDoKLSAgICBwcmludCAiT0siCisgICAgcHJpbnQoIk9LIikKIGVsc2U6Ci0gICAgcHJpbnQgIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKQorICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCiAgICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy9yZWFkZXI4LnB5IGIvcHl0aG9uL3Rlc3RzL3JlYWRlcjgucHkKaW5kZXggNTNiN2YyNy4uZDcwNjRlYiAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL3JlYWRlcjgucHkKKysrIGIvcHl0aG9uL3Rlc3RzL3JlYWRlcjgucHkKQEAgLTMsNyArMyw3IEBACiAjIHRoaXMgdGVzdHMgdGhlIGVudGl0aWVzIHN1YnN0aXR1dGlvbnMgd2l0aCB0aGUgWG1sVGV4dFJlYWRlciBpbnRlcmZhY2UKICMKIGltcG9ydCBzeXMKLWltcG9ydCBTdHJpbmdJTworaW1wb3J0IGlvCiBpbXBvcnQgbGlieG1sMgogCiAjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwpAQCAtMjMsNyArMjMsNyBAQAogcmV0ID0gcmVhZGVyLkNsb3NlKCkKIAogaWYgcmV0ICE9IDA6Ci0gICAgcHJpbnQgIkVycm9yIGNsb3NpbmcgdGhlIGRvY3VtZW50IHRlc3QxIgorICAgIHByaW50KCJFcnJvciBjbG9zaW5nIHRoZSBkb2N1bWVudCB0ZXN0MSIpCiAgICAgc3lzLmV4aXQoMSkKIAogZGVsIHJlYWRlcgpAQCAtMzEsNyArMzEsNyBAQAogIyBNZW1vcnkgZGVidWcgc3BlY2lmaWMKIGxpYnhtbDIuY2xlYW51cFBhcnNlcigpCiBpZiBsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpID09IDA6Ci0gICAgcHJpbnQgIk9LIgorICAgIHByaW50KCJPSyIpCiBlbHNlOgotICAgIHByaW50ICJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkKKyAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQogICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvcmVhZGVyZXJyLnB5IGIvcHl0aG9uL3Rlc3RzL3JlYWRlcmVyci5weQpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDBkYWQzNmUuLmM4Y2ViYTUKLS0tIGEvcHl0aG9uL3Rlc3RzL3JlYWRlcmVyci5weQorKysgYi9weXRob24vdGVzdHMvcmVhZGVyZXJyLnB5CkBAIC0zLDggKzMsMTMgQEAKICMgdGhpcyB0ZXN0cyB0aGUgYmFzaWMgQVBJcyBvZiB0aGUgWG1sVGV4dFJlYWRlciBpbnRlcmZhY2UKICMKIGltcG9ydCBsaWJ4bWwyCi1pbXBvcnQgU3RyaW5nSU8KIGltcG9ydCBzeXMKK3RyeToKKyAgICBpbXBvcnQgU3RyaW5nSU8KKyAgICBzdHJfaW8gPSBTdHJpbmdJTy5TdHJpbmdJTworZXhjZXB0OgorICAgIGltcG9ydCBpbworICAgIHN0cl9pbyA9IGlvLlN0cmluZ0lPCiAKICMgTWVtb3J5IGRlYnVnIHNwZWNpZmljCiBsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpCkBAIC0xNyw3ICsyMiw3IEBACiAgICAgZ2xvYmFsIGVycgogICAgIGVyciA9IGVyciArICIlcyAoJWQpICVzOiVkOiVzIiAlIChhcmcsc2V2ZXJpdHksbG9jYXRvci5CYXNlVVJJKCksbG9jYXRvci5MaW5lTnVtYmVyKCksbXNnKQogCi1mID0gU3RyaW5nSU8uU3RyaW5nSU8oIiIiPGEgeG1sbnM9ImZvbyI+PGIgYjE9ImIxIi8+PGM+Y29udGVudCBvZiBjPC9hPiIiIikKK2YgPSBzdHJfaW8oIiIiPGEgeG1sbnM9ImZvbyI+PGIgYjE9ImIxIi8+PGM+Y29udGVudCBvZiBjPC9hPiIiIikKIGlucHV0ID0gbGlieG1sMi5pbnB1dEJ1ZmZlcihmKQogcmVhZGVyID0gaW5wdXQubmV3VGV4dFJlYWRlcigidGVzdDEiKQogcmVhZGVyLlNldEVycm9ySGFuZGxlcihteUVycm9ySGFuZGxlciwiLS0+IikKQEAgLTI1LDE0ICszMCwxNCBAQAogICAgIHBhc3MKIAogaWYgZXJyICE9IGV4cGVjdDoKLSAgICBwcmludCAiZXJyb3IiCi0gICAgcHJpbnQgInJlY2VpdmVkICVzIiAlKGVycikKLSAgICBwcmludCAiZXhwZWN0ZWQgJXMiICUoZXhwZWN0KQorICAgIHByaW50KCJlcnJvciIpCisgICAgcHJpbnQoInJlY2VpdmVkICVzIiAlKGVycikpCisgICAgcHJpbnQoImV4cGVjdGVkICVzIiAlKGV4cGVjdCkpCiAgICAgc3lzLmV4aXQoMSkKIAogcmVhZGVyLlNldEVycm9ySGFuZGxlcihOb25lLE5vbmUpCiBpZiByZWFkZXIuR2V0RXJyb3JIYW5kbGVyKCkgIT0gKE5vbmUsTm9uZSk6Ci0gICAgcHJpbnQgIkdldEVycm9ySGFuZGxlciBmYWlsZWQiCisgICAgcHJpbnQoIkdldEVycm9ySGFuZGxlciBmYWlsZWQiKQogICAgIHN5cy5leGl0KDEpCiAKICMKQEAgLTQ1LDcgKzUwLDcgQEAKICMgTWVtb3J5IGRlYnVnIHNwZWNpZmljCiBsaWJ4bWwyLmNsZWFudXBQYXJzZXIoKQogaWYgbGlieG1sMi5kZWJ1Z01lbW9yeSgxKSA9PSAwOgotICAgIHByaW50ICJPSyIKKyAgICBwcmludCgiT0siKQogZWxzZToKLSAgICBwcmludCAiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpCisgICAgcHJpbnQoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKSkKICAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKQpkaWZmIC0tZ2l0IGEvcHl0aG9uL3Rlc3RzL3JlYWRlcm5leHQucHkgYi9weXRob24vdGVzdHMvcmVhZGVybmV4dC5weQppbmRleCBiMDFhNDlkLi5mY2I5YWUzIDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMvcmVhZGVybmV4dC5weQorKysgYi9weXRob24vdGVzdHMvcmVhZGVybmV4dC5weQpAQCAtNCw2NSArNCw3MCBAQAogIyB0aGlzIHRlc3RzIHRoZSBuZXh0IEFQSSBvZiB0aGUgWG1sVGV4dFJlYWRlciBpbnRlcmZhY2UKICMKIGltcG9ydCBsaWJ4bWwyCi1pbXBvcnQgU3RyaW5nSU8KIGltcG9ydCBzeXMKK3RyeToKKyAgICBpbXBvcnQgU3RyaW5nSU8KKyAgICBzdHJfaW8gPSBTdHJpbmdJTy5TdHJpbmdJTworZXhjZXB0OgorICAgIGltcG9ydCBpbworICAgIHN0cl9pbyA9IGlvLlN0cmluZ0lPCiAKICMgTWVtb3J5IGRlYnVnIHNwZWNpZmljCiBsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpCiAKLWYgPSBTdHJpbmdJTy5TdHJpbmdJTygiIiI8YT48Yj48YyAvPjwvYj48ZD5jb250ZW50IG9mIGQ8L2Q+PC9hPiIiIikKK2YgPSBzdHJfaW8oIiIiPGE+PGI+PGMgLz48L2I+PGQ+Y29udGVudCBvZiBkPC9kPjwvYT4iIiIpCiBpbnB1dCA9IGxpYnhtbDIuaW5wdXRCdWZmZXIoZikKIHJlYWRlciA9IGlucHV0Lm5ld1RleHRSZWFkZXIoInRlc3RfbmV4dCIpCiByZXQgPSByZWFkZXIuUmVhZCgpCiBpZiByZXQgIT0gMToKLSAgICBwcmludCAidGVzdF9uZXh0OiBFcnJvciByZWFkaW5nIHRvIGZpcnN0IGVsZW1lbnQiCisgICAgcHJpbnQoInRlc3RfbmV4dDogRXJyb3IgcmVhZGluZyB0byBmaXJzdCBlbGVtZW50IikKICAgICBzeXMuZXhpdCgxKQogaWYgcmVhZGVyLk5hbWUoKSAhPSAiYSIgb3IgcmVhZGVyLklzRW1wdHlFbGVtZW50KCkgIT0gMCBvciBcCiAgICByZWFkZXIuTm9kZVR5cGUoKSAhPSAxIG9yIHJlYWRlci5IYXNBdHRyaWJ1dGVzKCkgIT0gMDoKLSAgICBwcmludCAidGVzdF9uZXh0OiBFcnJvciByZWFkaW5nIHRoZSBmaXJzdCBlbGVtZW50IgorICAgIHByaW50KCJ0ZXN0X25leHQ6IEVycm9yIHJlYWRpbmcgdGhlIGZpcnN0IGVsZW1lbnQiKQogICAgIHN5cy5leGl0KDEpCiByZXQgPSByZWFkZXIuUmVhZCgpCiBpZiByZXQgIT0gMToKLSAgICBwcmludCAidGVzdF9uZXh0OiBFcnJvciByZWFkaW5nIHRvIHNlY29uZCBlbGVtZW50IgorICAgIHByaW50KCJ0ZXN0X25leHQ6IEVycm9yIHJlYWRpbmcgdG8gc2Vjb25kIGVsZW1lbnQiKQogICAgIHN5cy5leGl0KDEpCiBpZiByZWFkZXIuTmFtZSgpICE9ICJiIiBvciByZWFkZXIuSXNFbXB0eUVsZW1lbnQoKSAhPSAwIG9yIFwKICAgIHJlYWRlci5Ob2RlVHlwZSgpICE9IDEgb3IgcmVhZGVyLkhhc0F0dHJpYnV0ZXMoKSAhPSAwOgotICAgIHByaW50ICJ0ZXN0X25leHQ6IEVycm9yIHJlYWRpbmcgdGhlIHNlY29uZCBlbGVtZW50IgorICAgIHByaW50KCJ0ZXN0X25leHQ6IEVycm9yIHJlYWRpbmcgdGhlIHNlY29uZCBlbGVtZW50IikKICAgICBzeXMuZXhpdCgxKQogcmV0ID0gcmVhZGVyLlJlYWQoKQogaWYgcmV0ICE9IDE6Ci0gICAgcHJpbnQgInRlc3RfbmV4dDogRXJyb3IgcmVhZGluZyB0byB0aGlyZCBlbGVtZW50IgorICAgIHByaW50KCJ0ZXN0X25leHQ6IEVycm9yIHJlYWRpbmcgdG8gdGhpcmQgZWxlbWVudCIpCiAgICAgc3lzLmV4aXQoMSkKIGlmIHJlYWRlci5OYW1lKCkgIT0gImMiIG9yIHJlYWRlci5Ob2RlVHlwZSgpICE9IDEgb3IgXAogICAgcmVhZGVyLkhhc0F0dHJpYnV0ZXMoKSAhPSAwOgotICAgIHByaW50ICJ0ZXN0X25leHQ6IEVycm9yIHJlYWRpbmcgdGhlIHRoaXJkIGVsZW1lbnQiCisgICAgcHJpbnQoInRlc3RfbmV4dDogRXJyb3IgcmVhZGluZyB0aGUgdGhpcmQgZWxlbWVudCIpCiAgICAgc3lzLmV4aXQoMSkKIHJldCA9IHJlYWRlci5SZWFkKCkKIGlmIHJldCAhPSAxOgotICAgIHByaW50ICJ0ZXN0X25leHQ6IEVycm9yIHJlYWRpbmcgdG8gZW5kIG9mIHRoaXJkIGVsZW1lbnQiCisgICAgcHJpbnQoInRlc3RfbmV4dDogRXJyb3IgcmVhZGluZyB0byBlbmQgb2YgdGhpcmQgZWxlbWVudCIpCiAgICAgc3lzLmV4aXQoMSkKIGlmIHJlYWRlci5OYW1lKCkgIT0gImIiIG9yIHJlYWRlci5Ob2RlVHlwZSgpICE9IDE1OgotICAgIHByaW50ICJ0ZXN0X25leHQ6IEVycm9yIHJlYWRpbmcgdG8gZW5kIG9mIHNlY29uZCBlbGVtZW50IgorICAgIHByaW50KCJ0ZXN0X25leHQ6IEVycm9yIHJlYWRpbmcgdG8gZW5kIG9mIHNlY29uZCBlbGVtZW50IikKICAgICBzeXMuZXhpdCgxKQogcmV0ID0gcmVhZGVyLk5leHQoKQogaWYgcmV0ICE9IDE6Ci0gICAgcHJpbnQgInRlc3RfbmV4dDogRXJyb3IgbW92aW5nIHRvIHRoaXJkIGVsZW1lbnQiCisgICAgcHJpbnQoInRlc3RfbmV4dDogRXJyb3IgbW92aW5nIHRvIHRoaXJkIGVsZW1lbnQiKQogICAgIHN5cy5leGl0KDEpCiBpZiByZWFkZXIuTmFtZSgpICE9ICJkIiBvciByZWFkZXIuSXNFbXB0eUVsZW1lbnQoKSAhPSAwIG9yIFwKICAgIHJlYWRlci5Ob2RlVHlwZSgpICE9IDEgb3IgcmVhZGVyLkhhc0F0dHJpYnV0ZXMoKSAhPSAwOgotICAgIHByaW50ICJ0ZXN0X25leHQ6IEVycm9yIHJlYWRpbmcgdGhpcmQgZWxlbWVudCIKKyAgICBwcmludCgidGVzdF9uZXh0OiBFcnJvciByZWFkaW5nIHRoaXJkIGVsZW1lbnQiKQogICAgIHN5cy5leGl0KDEpCiByZXQgPSByZWFkZXIuTmV4dCgpCiBpZiByZXQgIT0gMToKLSAgICBwcmludCAidGVzdF9uZXh0OiBFcnJvciByZWFkaW5nIHRvIGVuZCBvZiBmaXJzdCBlbGVtZW50IgorICAgIHByaW50KCJ0ZXN0X25leHQ6IEVycm9yIHJlYWRpbmcgdG8gZW5kIG9mIGZpcnN0IGVsZW1lbnQiKQogICAgIHN5cy5leGl0KDEpCiBpZiByZWFkZXIuTmFtZSgpICE9ICJhIiBvciByZWFkZXIuSXNFbXB0eUVsZW1lbnQoKSAhPSAwIG9yIFwKICAgIHJlYWRlci5Ob2RlVHlwZSgpICE9IDE1IG9yIHJlYWRlci5IYXNBdHRyaWJ1dGVzKCkgIT0gMDoKLSAgICBwcmludCAidGVzdF9uZXh0OiBFcnJvciByZWFkaW5nIHRoZSBlbmQgb2YgZmlyc3QgZWxlbWVudCIKKyAgICBwcmludCgidGVzdF9uZXh0OiBFcnJvciByZWFkaW5nIHRoZSBlbmQgb2YgZmlyc3QgZWxlbWVudCIpCiAgICAgc3lzLmV4aXQoMSkKIHJldCA9IHJlYWRlci5SZWFkKCkKIGlmIHJldCAhPSAwOgotICAgIHByaW50ICJ0ZXN0X25leHQ6IEVycm9yIHJlYWRpbmcgdG8gZW5kIG9mIGRvY3VtZW50IgorICAgIHByaW50KCJ0ZXN0X25leHQ6IEVycm9yIHJlYWRpbmcgdG8gZW5kIG9mIGRvY3VtZW50IikKICAgICBzeXMuZXhpdCgxKQogCiAjCkBAIC03NSw3ICs4MCw3IEBACiAjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwogbGlieG1sMi5jbGVhbnVwUGFyc2VyKCkKIGlmIGxpYnhtbDIuZGVidWdNZW1vcnkoMSkgPT0gMDoKLSAgICBwcmludCAiT0siCisgICAgcHJpbnQoIk9LIikKIGVsc2U6Ci0gICAgcHJpbnQgIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKQorICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCiAgICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy9yZWdleHAucHkgYi9weXRob24vdGVzdHMvcmVnZXhwLnB5Cm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggNGMwNTUwMi4uYTAzZTQ1OQotLS0gYS9weXRob24vdGVzdHMvcmVnZXhwLnB5CisrKyBiL3B5dGhvbi90ZXN0cy9yZWdleHAucHkKQEAgLTYsMTkgKzYsMTkgQEAKIAogcmUgPSBsaWJ4bWwyLnJlZ2V4cENvbXBpbGUoImF8YiIpCiBpZiByZS5yZWdleHBFeGVjKCJhIikgIT0gMToKLSAgICBwcmludCAiZXJyb3IgY2hlY2tpbmcgJ2EnIgorICAgIHByaW50KCJlcnJvciBjaGVja2luZyAnYSciKQogICAgIHN5cy5leGl0KDEpCiBpZiByZS5yZWdleHBFeGVjKCJiIikgIT0gMToKLSAgICBwcmludCAiZXJyb3IgY2hlY2tpbmcgJ2InIgorICAgIHByaW50KCJlcnJvciBjaGVja2luZyAnYiciKQogICAgIHN5cy5leGl0KDEpCiBpZiByZS5yZWdleHBFeGVjKCJhYiIpICE9IDA6Ci0gICAgcHJpbnQgImVycm9yIGNoZWNraW5nICdhYiciCisgICAgcHJpbnQoImVycm9yIGNoZWNraW5nICdhYiciKQogICAgIHN5cy5leGl0KDEpCiBpZiByZS5yZWdleHBFeGVjKCIiKSAhPSAwOgotICAgIHByaW50ICJlcnJvciBjaGVja2luZyAnYWInIgorICAgIHByaW50KCJlcnJvciBjaGVja2luZyAnYWInIikKICAgICBzeXMuZXhpdCgxKQogaWYgcmUucmVnZXhwSXNEZXRlcm1pbmlzdCgpICE9IDE6Ci0gICAgcHJpbnQgImVycm9yIGNoZWNraW5nIGRldGVybWluaXNtIgorICAgIHByaW50KCJlcnJvciBjaGVja2luZyBkZXRlcm1pbmlzbSIpCiAgICAgc3lzLmV4aXQoMSkKIGRlbCByZQogICAgIApAQCAtMjYsNyArMjYsNyBAQAogIyBNZW1vcnkgZGVidWcgc3BlY2lmaWMKIGxpYnhtbDIuY2xlYW51cFBhcnNlcigpCiBpZiBsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpID09IDA6Ci0gICAgcHJpbnQgIk9LIgorICAgIHByaW50KCJPSyIpCiBlbHNlOgotICAgIHByaW50ICJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkKKyAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQogICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvcmVsYXhuZy5weSBiL3B5dGhvbi90ZXN0cy9yZWxheG5nLnB5CmluZGV4IDJjODM2MzUuLmZhM2QzMjcgMTAwNzU1Ci0tLSBhL3B5dGhvbi90ZXN0cy9yZWxheG5nLnB5CisrKyBiL3B5dGhvbi90ZXN0cy9yZWxheG5nLnB5CkBAIC0yOSw3ICsyOSw3IEBACiBkb2MgPSBsaWJ4bWwyLnBhcnNlRG9jKGluc3RhbmNlKQogcmV0ID0gZG9jLnJlbGF4TkdWYWxpZGF0ZURvYyhjdHh0KQogaWYgcmV0ICE9IDA6Ci0gICAgcHJpbnQgImVycm9yIGRvaW5nIFJlbGF4TkcgdmFsaWRhdGlvbiIKKyAgICBwcmludCgiZXJyb3IgZG9pbmcgUmVsYXhORyB2YWxpZGF0aW9uIikKICAgICBzeXMuZXhpdCgxKQogCiBkb2MuZnJlZURvYygpCkBAIC00MSw4ICs0MSw4IEBACiAjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwogbGlieG1sMi5jbGVhbnVwUGFyc2VyKCkKIGlmIGxpYnhtbDIuZGVidWdNZW1vcnkoMSkgPT0gMDoKLSAgICBwcmludCAiT0siCisgICAgcHJpbnQoIk9LIikKIGVsc2U6Ci0gICAgcHJpbnQgIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKQorICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCiAgICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKIApkaWZmIC0tZ2l0IGEvcHl0aG9uL3Rlc3RzL3Jlc29sdmVyLnB5IGIvcHl0aG9uL3Rlc3RzL3Jlc29sdmVyLnB5CmluZGV4IDlmNGE0NzguLjZmMjFmNTIgMTAwNzU1Ci0tLSBhL3B5dGhvbi90ZXN0cy9yZXNvbHZlci5weQorKysgYi9weXRob24vdGVzdHMvcmVzb2x2ZXIucHkKQEAgLTEsMjAgKzEsMjUgQEAKICMhL3Vzci9iaW4vcHl0aG9uIC11CiBpbXBvcnQgc3lzCiBpbXBvcnQgbGlieG1sMgotaW1wb3J0IFN0cmluZ0lPCit0cnk6CisgICAgaW1wb3J0IFN0cmluZ0lPCisgICAgc3RyX2lvID0gU3RyaW5nSU8uU3RyaW5nSU8KK2V4Y2VwdDoKKyAgICBpbXBvcnQgaW8KKyAgICBzdHJfaW8gPSBpby5TdHJpbmdJTwogCiAjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwogbGlieG1sMi5kZWJ1Z01lbW9yeSgxKQogCiBkZWYgbXlSZXNvbHZlcihVUkwsIElELCBjdHh0KToKLSAgICByZXR1cm4oU3RyaW5nSU8uU3RyaW5nSU8oIjxmb28vPiIpKQorICAgIHJldHVybihzdHJfaW8oIjxmb28vPiIpKQogCiBsaWJ4bWwyLnNldEVudGl0eUxvYWRlcihteVJlc29sdmVyKQogCiBkb2MgPSBsaWJ4bWwyLnBhcnNlRmlsZSgiZG9lc25vdGV4aXN0LnhtbCIpCiByb290ID0gZG9jLmNoaWxkcmVuCiBpZiByb290Lm5hbWUgIT0gImZvbyI6Ci0gICAgcHJpbnQgInJvb3QgZWxlbWVudCBuYW1lIGVycm9yIgorICAgIHByaW50KCJyb290IGVsZW1lbnQgbmFtZSBlcnJvciIpCiAgICAgc3lzLmV4aXQoMSkKIGRvYy5mcmVlRG9jKCkKIApAQCAtMjMsNyArMjgsNyBAQAogICAgIGRvYyA9IGxpYnhtbDIucGFyc2VGaWxlKCJkb2Vzbm90ZXhpc3QueG1sIikKICAgICByb290ID0gZG9jLmNoaWxkcmVuCiAgICAgaWYgcm9vdC5uYW1lICE9ICJmb28iOgotICAgICAgICBwcmludCAicm9vdCBlbGVtZW50IG5hbWUgZXJyb3IiCisgICAgICAgIHByaW50KCJyb290IGVsZW1lbnQgbmFtZSBlcnJvciIpCiAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgZG9jLmZyZWVEb2MoKQogICAgIGkgPSBpICsgMQpAQCAtMzIsOCArMzcsOCBAQAogIyBNZW1vcnkgZGVidWcgc3BlY2lmaWMKIGxpYnhtbDIuY2xlYW51cFBhcnNlcigpCiBpZiBsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpID09IDA6Ci0gICAgcHJpbnQgIk9LIgorICAgIHByaW50KCJPSyIpCiBlbHNlOgotICAgIHByaW50ICJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkKKyAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQogICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCiAKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy9zY2hlbWEucHkgYi9weXRob24vdGVzdHMvc2NoZW1hLnB5CmluZGV4IGJmYTg0MjMuLjgwODkyNzIgMTAwNzU1Ci0tLSBhL3B5dGhvbi90ZXN0cy9zY2hlbWEucHkKKysrIGIvcHl0aG9uL3Rlc3RzL3NjaGVtYS5weQpAQCAtMzMsNyArMzMsNyBAQAogZG9jID0gbGlieG1sMi5wYXJzZURvYyhpbnN0YW5jZSkKIHJldCA9IGRvYy5zY2hlbWFWYWxpZGF0ZURvYyhjdHh0X3ZhbGlkKQogaWYgcmV0ICE9IDA6Ci0gICAgcHJpbnQgImVycm9yIGRvaW5nIHNjaGVtYSB2YWxpZGF0aW9uIgorICAgIHByaW50KCJlcnJvciBkb2luZyBzY2hlbWEgdmFsaWRhdGlvbiIpCiAgICAgc3lzLmV4aXQoMSkKIAogZG9jLmZyZWVEb2MoKQpAQCAtNDUsOCArNDUsOCBAQAogIyBNZW1vcnkgZGVidWcgc3BlY2lmaWMKIGxpYnhtbDIuY2xlYW51cFBhcnNlcigpCiBpZiBsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpID09IDA6Ci0gICAgcHJpbnQgIk9LIgorICAgIHByaW50KCJPSyIpCiBlbHNlOgotICAgIHByaW50ICJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkKKyAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQogICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCiAKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy9zZXJpYWxpemUucHkgYi9weXRob24vdGVzdHMvc2VyaWFsaXplLnB5CmluZGV4IDkxNzUzZTcuLjgwYjkwMWEgMTAwNzU1Ci0tLSBhL3B5dGhvbi90ZXN0cy9zZXJpYWxpemUucHkKKysrIGIvcHl0aG9uL3Rlc3RzL3NlcmlhbGl6ZS5weQpAQCAtMTMsMTMgKzEzLDEzIEBACiBpZiBzdHIgIT0gIiIiPD94bWwgdmVyc2lvbj0iMS4wIj8+CiA8cm9vdD48Zm9vPmhlbGxvPC9mb28+PC9yb290PgogIiIiOgotICAgcHJpbnQgImVycm9yIHNlcmlhbGl6aW5nIFhNTCBkb2N1bWVudCAxIgorICAgcHJpbnQoImVycm9yIHNlcmlhbGl6aW5nIFhNTCBkb2N1bWVudCAxIikKICAgIHN5cy5leGl0KDEpCiBzdHIgPSBkb2Muc2VyaWFsaXplKCJpc28tODg1OS0xIikKIGlmIHN0ciAhPSAiIiI8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJpc28tODg1OS0xIj8+CiA8cm9vdD48Zm9vPmhlbGxvPC9mb28+PC9yb290PgogIiIiOgotICAgcHJpbnQgImVycm9yIHNlcmlhbGl6aW5nIFhNTCBkb2N1bWVudCAyIgorICAgcHJpbnQoImVycm9yIHNlcmlhbGl6aW5nIFhNTCBkb2N1bWVudCAyIikKICAgIHN5cy5leGl0KDEpCiBzdHIgPSBkb2Muc2VyaWFsaXplKGZvcm1hdD0xKQogaWYgc3RyICE9ICIiIjw/eG1sIHZlcnNpb249IjEuMCI/PgpAQCAtMjcsNyArMjcsNyBAQAogICA8Zm9vPmhlbGxvPC9mb28+CiA8L3Jvb3Q+CiAiIiI6Ci0gICBwcmludCAiZXJyb3Igc2VyaWFsaXppbmcgWE1MIGRvY3VtZW50IDMiCisgICBwcmludCgiZXJyb3Igc2VyaWFsaXppbmcgWE1MIGRvY3VtZW50IDMiKQogICAgc3lzLmV4aXQoMSkKIHN0ciA9IGRvYy5zZXJpYWxpemUoImlzby04ODU5LTEiLCAxKQogaWYgc3RyICE9ICIiIjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Imlzby04ODU5LTEiPz4KQEAgLTM1LDcgKzM1LDcgQEAKICAgPGZvbz5oZWxsbzwvZm9vPgogPC9yb290PgogIiIiOgotICAgcHJpbnQgImVycm9yIHNlcmlhbGl6aW5nIFhNTCBkb2N1bWVudCA0IgorICAgcHJpbnQoImVycm9yIHNlcmlhbGl6aW5nIFhNTCBkb2N1bWVudCA0IikKICAgIHN5cy5leGl0KDEpCiAKICMKQEAgLTQ0LDIzICs0NCwyMyBAQAogcm9vdCA9IGRvYy5nZXRSb290RWxlbWVudCgpCiBzdHIgPSByb290LnNlcmlhbGl6ZSgpCiBpZiBzdHIgIT0gIiIiPHJvb3Q+PGZvbz5oZWxsbzwvZm9vPjwvcm9vdD4iIiI6Ci0gICBwcmludCAiZXJyb3Igc2VyaWFsaXppbmcgWE1MIHJvb3QgMSIKKyAgIHByaW50KCJlcnJvciBzZXJpYWxpemluZyBYTUwgcm9vdCAxIikKICAgIHN5cy5leGl0KDEpCiBzdHIgPSByb290LnNlcmlhbGl6ZSgiaXNvLTg4NTktMSIpCiBpZiBzdHIgIT0gIiIiPHJvb3Q+PGZvbz5oZWxsbzwvZm9vPjwvcm9vdD4iIiI6Ci0gICBwcmludCAiZXJyb3Igc2VyaWFsaXppbmcgWE1MIHJvb3QgMiIKKyAgIHByaW50KCJlcnJvciBzZXJpYWxpemluZyBYTUwgcm9vdCAyIikKICAgIHN5cy5leGl0KDEpCiBzdHIgPSByb290LnNlcmlhbGl6ZShmb3JtYXQ9MSkKIGlmIHN0ciAhPSAiIiI8cm9vdD4KICAgPGZvbz5oZWxsbzwvZm9vPgogPC9yb290PiIiIjoKLSAgIHByaW50ICJlcnJvciBzZXJpYWxpemluZyBYTUwgcm9vdCAzIgorICAgcHJpbnQoImVycm9yIHNlcmlhbGl6aW5nIFhNTCByb290IDMiKQogICAgc3lzLmV4aXQoMSkKIHN0ciA9IHJvb3Quc2VyaWFsaXplKCJpc28tODg1OS0xIiwgMSkKIGlmIHN0ciAhPSAiIiI8cm9vdD4KICAgPGZvbz5oZWxsbzwvZm9vPgogPC9yb290PiIiIjoKLSAgIHByaW50ICJlcnJvciBzZXJpYWxpemluZyBYTUwgcm9vdCA0IgorICAgcHJpbnQoImVycm9yIHNlcmlhbGl6aW5nIFhNTCByb290IDQiKQogICAgc3lzLmV4aXQoMSkKIGRvYy5mcmVlRG9jKCkKIApAQCAtNzIsMTMgKzcyLDEzIEBACiBpZiBzdHIgIT0gIiIiPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgogPGh0bWw+PGhlYWQ+PHRpdGxlPkhlbGxvPC90aXRsZT48L2hlYWQ+PGJvZHk+PHA+aGVsbG88L3A+PC9ib2R5PjwvaHRtbD4KICIiIjoKLSAgIHByaW50ICJlcnJvciBzZXJpYWxpemluZyBIVE1MIGRvY3VtZW50IDEiCisgICBwcmludCgiZXJyb3Igc2VyaWFsaXppbmcgSFRNTCBkb2N1bWVudCAxIikKICAgIHN5cy5leGl0KDEpCiBzdHIgPSBkb2Muc2VyaWFsaXplKCJJU08tODg1OS0xIikKIGlmIHN0ciAhPSAiIiI8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+CiA8aHRtbD48aGVhZD48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj48dGl0bGU+SGVsbG88L3RpdGxlPjwvaGVhZD48Ym9keT48cD5oZWxsbzwvcD48L2JvZHk+PC9odG1sPgogIiIiOgotICAgcHJpbnQgImVycm9yIHNlcmlhbGl6aW5nIEhUTUwgZG9jdW1lbnQgMiIKKyAgIHByaW50KCJlcnJvciBzZXJpYWxpemluZyBIVE1MIGRvY3VtZW50IDIiKQogICAgc3lzLmV4aXQoMSkKIHN0ciA9IGRvYy5zZXJpYWxpemUoZm9ybWF0PTEpCiBpZiBzdHIgIT0gIiIiPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgpAQCAtOTAsNyArOTAsNyBAQAogPGJvZHk+PHA+aGVsbG88L3A+PC9ib2R5PgogPC9odG1sPgogIiIiOgotICAgcHJpbnQgImVycm9yIHNlcmlhbGl6aW5nIEhUTUwgZG9jdW1lbnQgMyIKKyAgIHByaW50KCJlcnJvciBzZXJpYWxpemluZyBIVE1MIGRvY3VtZW50IDMiKQogICAgc3lzLmV4aXQoMSkKIHN0ciA9IGRvYy5zZXJpYWxpemUoImlzby04ODU5LTEiLCAxKQogaWYgc3RyICE9ICIiIjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KQEAgLTEwMiw3ICsxMDIsNyBAQAogPGJvZHk+PHA+aGVsbG88L3A+PC9ib2R5PgogPC9odG1sPgogIiIiOgotICAgcHJpbnQgImVycm9yIHNlcmlhbGl6aW5nIEhUTUwgZG9jdW1lbnQgNCIKKyAgIHByaW50KCJlcnJvciBzZXJpYWxpemluZyBIVE1MIGRvY3VtZW50IDQiKQogICAgc3lzLmV4aXQoMSkKIAogIwpAQCAtMTEyLDExICsxMTIsMTEgQEAKIHJvb3QgPSBkb2MuZ2V0Um9vdEVsZW1lbnQoKQogc3RyID0gcm9vdC5zZXJpYWxpemUoKQogaWYgc3RyICE9ICIiIjxodG1sPjxoZWFkPjx0aXRsZT5IZWxsbzwvdGl0bGU+PC9oZWFkPjxib2R5PjxwPmhlbGxvPC9wPjwvYm9keT48L2h0bWw+IiIiOgotICAgcHJpbnQgImVycm9yIHNlcmlhbGl6aW5nIEhUTUwgcm9vdCAxIgorICAgcHJpbnQoImVycm9yIHNlcmlhbGl6aW5nIEhUTUwgcm9vdCAxIikKICAgIHN5cy5leGl0KDEpCiBzdHIgPSByb290LnNlcmlhbGl6ZSgiSVNPLTg4NTktMSIpCiBpZiBzdHIgIT0gIiIiPGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+PHRpdGxlPkhlbGxvPC90aXRsZT48L2hlYWQ+PGJvZHk+PHA+aGVsbG88L3A+PC9ib2R5PjwvaHRtbD4iIiI6Ci0gICBwcmludCAiZXJyb3Igc2VyaWFsaXppbmcgSFRNTCByb290IDIiCisgICBwcmludCgiZXJyb3Igc2VyaWFsaXppbmcgSFRNTCByb290IDIiKQogICAgc3lzLmV4aXQoMSkKIHN0ciA9IHJvb3Quc2VyaWFsaXplKGZvcm1hdD0xKQogaWYgc3RyICE9ICIiIjxodG1sPgpAQCAtMTI2LDcgKzEyNiw3IEBACiA8L2hlYWQ+CiA8Ym9keT48cD5oZWxsbzwvcD48L2JvZHk+CiA8L2h0bWw+IiIiOgotICAgcHJpbnQgImVycm9yIHNlcmlhbGl6aW5nIEhUTUwgcm9vdCAzIgorICAgcHJpbnQoImVycm9yIHNlcmlhbGl6aW5nIEhUTUwgcm9vdCAzIikKICAgIHN5cy5leGl0KDEpCiBzdHIgPSByb290LnNlcmlhbGl6ZSgiaXNvLTg4NTktMSIsIDEpCiBpZiBzdHIgIT0gIiIiPGh0bWw+CkBAIC0xMzYsNyArMTM2LDcgQEAKIDwvaGVhZD4KIDxib2R5PjxwPmhlbGxvPC9wPjwvYm9keT4KIDwvaHRtbD4iIiI6Ci0gICBwcmludCAiZXJyb3Igc2VyaWFsaXppbmcgSFRNTCByb290IDQiCisgICBwcmludCgiZXJyb3Igc2VyaWFsaXppbmcgSFRNTCByb290IDQiKQogICAgc3lzLmV4aXQoMSkKIAogZG9jLmZyZWVEb2MoKQpAQCAtMTQ0LDcgKzE0NCw3IEBACiAjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwogbGlieG1sMi5jbGVhbnVwUGFyc2VyKCkKIGlmIGxpYnhtbDIuZGVidWdNZW1vcnkoMSkgPT0gMDoKLSAgICBwcmludCAiT0siCisgICAgcHJpbnQoIk9LIikKIGVsc2U6Ci0gICAgcHJpbnQgIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKQorICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCiAgICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy9zeW5jLnB5IGIvcHl0aG9uL3Rlc3RzL3N5bmMucHkKaW5kZXggMjE0MTg3NS4uOWQ1NjVkYiAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL3N5bmMucHkKKysrIGIvcHl0aG9uL3Rlc3RzL3N5bmMucHkKQEAgLTUwLDggKzUwLDggQEAKIAogcmVmZXJlbmNlID0gInN0YXJ0RG9jdW1lbnQ6c3RhcnRFbGVtZW50IGZvbyBOb25lOnN0YXJ0RWxlbWVudCBiYXIyIE5vbmU6ZW5kRWxlbWVudCBiYXIyOiIKIGlmIGxvZyAhPSByZWZlcmVuY2U6Ci0gICAgcHJpbnQgIkVycm9yIGdvdDogJXMiICUgbG9nCi0gICAgcHJpbnQgIkV4cHJlY3RlZDogJXMiICUgcmVmZXJlbmNlCisgICAgcHJpbnQoIkVycm9yIGdvdDogJXMiICUgbG9nKQorICAgIHByaW50KCJFeHByZWN0ZWQ6ICVzIiAlIHJlZmVyZW5jZSkKICAgICBzeXMuZXhpdCgxKQogCiBsb2c9IiIKQEAgLTYyLDggKzYyLDggQEAKIAogcmVmZXJlbmNlID0gInN0YXJ0RG9jdW1lbnQ6c3RhcnRFbGVtZW50IGZvbyBOb25lOnN0YXJ0RWxlbWVudCBiYXIyIE5vbmU6ZW5kRWxlbWVudCBiYXIyOiIKIGlmIGxvZyAhPSByZWZlcmVuY2U6Ci0gICAgcHJpbnQgIkVycm9yIGdvdDogJXMiICUgbG9nCi0gICAgcHJpbnQgIkV4cHJlY3RlZDogJXMiICUgcmVmZXJlbmNlCisgICAgcHJpbnQoIkVycm9yIGdvdDogJXMiICUgbG9nKQorICAgIHByaW50KCJFeHByZWN0ZWQ6ICVzIiAlIHJlZmVyZW5jZSkKICAgICBzeXMuZXhpdCgxKQogCiBsb2c9IiIKQEAgLTc0LDggKzc0LDggQEAKIAogcmVmZXJlbmNlID0gInN0YXJ0RG9jdW1lbnQ6c3RhcnRFbGVtZW50IGZvbyBOb25lOnN0YXJ0RWxlbWVudCBiYXIyIE5vbmU6IgogaWYgbG9nICE9IHJlZmVyZW5jZToKLSAgICBwcmludCAiRXJyb3IgZ290OiAlcyIgJSBsb2cKLSAgICBwcmludCAiRXhwcmVjdGVkOiAlcyIgJSByZWZlcmVuY2UKKyAgICBwcmludCgiRXJyb3IgZ290OiAlcyIgJSBsb2cpCisgICAgcHJpbnQoIkV4cHJlY3RlZDogJXMiICUgcmVmZXJlbmNlKQogICAgIHN5cy5leGl0KDEpCiAKIGxvZz0iIgpAQCAtODYsOCArODYsOCBAQAogCiByZWZlcmVuY2UgPSAic3RhcnREb2N1bWVudDpzdGFydEVsZW1lbnQgZm9vIE5vbmU6c3RhcnRFbGVtZW50IGJhcjIgeydhJzogJzEnLCAnYic6ICcyJ306ZW5kRWxlbWVudCBiYXIyOiIKIGlmIGxvZyAhPSByZWZlcmVuY2U6Ci0gICAgcHJpbnQgIkVycm9yIGdvdDogJXMiICUgbG9nCi0gICAgcHJpbnQgIkV4cHJlY3RlZDogJXMiICUgcmVmZXJlbmNlCisgICAgcHJpbnQoIkVycm9yIGdvdDogJXMiICUgbG9nKQorICAgIHByaW50KCJFeHByZWN0ZWQ6ICVzIiAlIHJlZmVyZW5jZSkKICAgICBzeXMuZXhpdCgxKQogCiBsb2c9IiIKQEAgLTk4LDggKzk4LDggQEAKIAogcmVmZXJlbmNlID0gInN0YXJ0RG9jdW1lbnQ6c3RhcnRFbGVtZW50IGZvbyBOb25lOnN0YXJ0RWxlbWVudCBiYXIyIHsnYSc6ICcxJywgJ2InOiAnMid9OiIKIGlmIGxvZyAhPSByZWZlcmVuY2U6Ci0gICAgcHJpbnQgIkVycm9yIGdvdDogJXMiICUgbG9nCi0gICAgcHJpbnQgIkV4cHJlY3RlZDogJXMiICUgcmVmZXJlbmNlCisgICAgcHJpbnQoIkVycm9yIGdvdDogJXMiICUgbG9nKQorICAgIHByaW50KCJFeHByZWN0ZWQ6ICVzIiAlIHJlZmVyZW5jZSkKICAgICBzeXMuZXhpdCgxKQogCiBsb2c9IiIKQEAgLTExMCw4ICsxMTAsOCBAQAogCiByZWZlcmVuY2UgPSAic3RhcnREb2N1bWVudDpzdGFydEVsZW1lbnQgZm9vIE5vbmU6c3RhcnRFbGVtZW50IGJhcjIgeydhJzogJzEnLCAnYic6ICcyJ306ZW5kRWxlbWVudCBiYXIyOiIKIGlmIGxvZyAhPSByZWZlcmVuY2U6Ci0gICAgcHJpbnQgIkVycm9yIGdvdDogJXMiICUgbG9nCi0gICAgcHJpbnQgIkV4cHJlY3RlZDogJXMiICUgcmVmZXJlbmNlCisgICAgcHJpbnQoIkVycm9yIGdvdDogJXMiICUgbG9nKQorICAgIHByaW50KCJFeHByZWN0ZWQ6ICVzIiAlIHJlZmVyZW5jZSkKICAgICBzeXMuZXhpdCgxKQogCiBsb2c9IiIKQEAgLTEyMiwxNCArMTIyLDE0IEBACiAKIHJlZmVyZW5jZSA9ICJzdGFydERvY3VtZW50OnN0YXJ0RWxlbWVudCBmb28gTm9uZToiCiBpZiBsb2cgIT0gcmVmZXJlbmNlOgotICAgIHByaW50ICJFcnJvciBnb3Q6ICVzIiAlIGxvZwotICAgIHByaW50ICJFeHByZWN0ZWQ6ICVzIiAlIHJlZmVyZW5jZQorICAgIHByaW50KCJFcnJvciBnb3Q6ICVzIiAlIGxvZykKKyAgICBwcmludCgiRXhwcmVjdGVkOiAlcyIgJSByZWZlcmVuY2UpCiAgICAgc3lzLmV4aXQoMSkKIAogIyBNZW1vcnkgZGVidWcgc3BlY2lmaWMKIGxpYnhtbDIuY2xlYW51cFBhcnNlcigpCiBpZiBsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpID09IDA6Ci0gICAgcHJpbnQgIk9LIgorICAgIHByaW50KCJPSyIpCiBlbHNlOgotICAgIHByaW50ICJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkKKyAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQogICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvdGhyZWFkMi5weSBiL3B5dGhvbi90ZXN0cy90aHJlYWQyLnB5CmluZGV4IGM4YWM1ZWQuLjI3NDllYjAgMTAwNzU1Ci0tLSBhL3B5dGhvbi90ZXN0cy90aHJlYWQyLnB5CisrKyBiL3B5dGhvbi90ZXN0cy90aHJlYWQyLnB5CkBAIC0xLDYgKzEsOSBAQAogIyEvdXNyL2Jpbi9weXRob24gLXUKIGltcG9ydCBzdHJpbmcsIHN5cywgdGltZQotaW1wb3J0IHRocmVhZAordHJ5OgorICAgIGZyb20gX3RocmVhZCBpbXBvcnQgZ2V0X2lkZW50CitleGNlcHQ6CisgICAgZnJvbSB0aHJlYWQgaW1wb3J0IGdldF9pZGVudAogZnJvbSB0aHJlYWRpbmcgaW1wb3J0IFRocmVhZCwgTG9jawogCiBpbXBvcnQgbGlieG1sMgpAQCAtMzEsOCArMzQsOCBAQAogICAgICMgY2hlY2sgYSBwZXIgdGhyZWFkLWdsb2JhbAogICAgIGlmIGV4cGVjdGVkTGluZU51bWJlcnNEZWZhdWx0ICE9IGdldExpbmVOdW1iZXJzRGVmYXVsdCgpOgogICAgICAgICBmYWlsZWQgPSAxCi0gICAgICAgIHByaW50ICJGQUlMRUQgdG8gb2J0YWluIGNvcnJlY3QgdmFsdWUgZm9yICIgXAotICAgICAgICAgICAgICAibGluZU51bWJlcnNEZWZhdWx0IGluIHRocmVhZCAlZCIgJSB0aHJlYWQuZ2V0X2lkZW50KCkKKyAgICAgICAgcHJpbnQoIkZBSUxFRCB0byBvYnRhaW4gY29ycmVjdCB2YWx1ZSBmb3IgIiBcCisgICAgICAgICAgICAgICJsaW5lTnVtYmVyc0RlZmF1bHQgaW4gdGhyZWFkICVkIiAlIGdldF9pZGVudCgpKQogICAgICMgY2hlY2sgdGhlciBnbG9iYWwgZXJyb3IgaGFuZGxlciAKICAgICAjICh3aGljaCBpcyBOT1QgcGVyLXRocmVhZCBpbiB0aGUgcHl0aG9uIGJpbmRpbmdzKQogICAgIHRyeToKQEAgLTUxLDcgKzU0LDcgQEAKIHRlc3QoMSkKIGVjID0gbGVuKGVoLmVycm9ycykKIGlmIGVjID09IDA6Ci0gICAgcHJpbnQgIkZBSUxFRDogc2hvdWxkIGhhdmUgb2J0YWluZWQgZXJyb3JzIgorICAgIHByaW50KCJGQUlMRUQ6IHNob3VsZCBoYXZlIG9idGFpbmVkIGVycm9ycyIpCiAgICAgc3lzLmV4aXQoMSkKIAogdHMgPSBbXQpAQCAtNjUsNyArNjgsNyBAQAogICAgIHQuam9pbigpCiAKIGlmIGxlbihlaC5lcnJvcnMpICE9IGVjK1RIUkVBRFNfQ09VTlQqZWM6Ci0gICAgcHJpbnQgIkZBSUxFRDogZGlkIG5vdCBvYnRhaW4gdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGVycm9ycyIKKyAgICBwcmludCgiRkFJTEVEOiBkaWQgbm90IG9idGFpbiB0aGUgY29ycmVjdCBudW1iZXIgb2YgZXJyb3JzIikKICAgICBzeXMuZXhpdCgxKQogCiAjIHNldCBsaW5lTnVtYmVyc0RlZmF1bHQgZm9yIGZ1dHVyZSBuZXcgdGhyZWFkcwpAQCAtODAsMTcgKzgzLDE3IEBACiAgICAgdC5qb2luKCkKIAogaWYgbGVuKGVoLmVycm9ycykgIT0gZWMrVEhSRUFEU19DT1VOVCplYyoyOgotICAgIHByaW50ICJGQUlMRUQ6IGRpZCBub3Qgb2J0YWluIHRoZSBjb3JyZWN0IG51bWJlciBvZiBlcnJvcnMiCisgICAgcHJpbnQoIkZBSUxFRDogZGlkIG5vdCBvYnRhaW4gdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGVycm9ycyIpCiAgICAgc3lzLmV4aXQoMSkKIAogaWYgZmFpbGVkOgotICAgIHByaW50ICJGQUlMRUQiCisgICAgcHJpbnQoIkZBSUxFRCIpCiAgICAgc3lzLmV4aXQoMSkKIAogIyBNZW1vcnkgZGVidWcgc3BlY2lmaWMKIGxpYnhtbDIuY2xlYW51cFBhcnNlcigpCiBpZiBsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpID09IDA6Ci0gICAgcHJpbnQgIk9LIgorICAgIHByaW50KCJPSyIpCiBlbHNlOgotICAgIHByaW50ICJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkKKyAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQogICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvdHN0LnB5IGIvcHl0aG9uL3Rlc3RzL3RzdC5weQppbmRleCA5NTQwY2RhLi41N2E3MzE4IDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMvdHN0LnB5CisrKyBiL3B5dGhvbi90ZXN0cy90c3QucHkKQEAgLTcsMjIgKzcsMjIgQEAKIAogZG9jID0gbGlieG1sMi5wYXJzZUZpbGUoInRzdC54bWwiKQogaWYgZG9jLm5hbWUgIT0gInRzdC54bWwiOgotICAgIHByaW50ICJkb2MubmFtZSBmYWlsZWQiCisgICAgcHJpbnQoImRvYy5uYW1lIGZhaWxlZCIpCiAgICAgc3lzLmV4aXQoMSkKIHJvb3QgPSBkb2MuY2hpbGRyZW4KIGlmIHJvb3QubmFtZSAhPSAiZG9jIjoKLSAgICBwcmludCAicm9vdC5uYW1lIGZhaWxlZCIKKyAgICBwcmludCgicm9vdC5uYW1lIGZhaWxlZCIpCiAgICAgc3lzLmV4aXQoMSkKIGNoaWxkID0gcm9vdC5jaGlsZHJlbgogaWYgY2hpbGQubmFtZSAhPSAiZm9vIjoKLSAgICBwcmludCAiY2hpbGQubmFtZSBmYWlsZWQiCisgICAgcHJpbnQoImNoaWxkLm5hbWUgZmFpbGVkIikKICAgICBzeXMuZXhpdCgxKQogZG9jLmZyZWVEb2MoKQogCiAjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwogbGlieG1sMi5jbGVhbnVwUGFyc2VyKCkKIGlmIGxpYnhtbDIuZGVidWdNZW1vcnkoMSkgPT0gMDoKLSAgICBwcmludCAiT0siCisgICAgcHJpbnQoIk9LIikKIGVsc2U6Ci0gICAgcHJpbnQgIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKQorICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCiAgICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy90c3RMYXN0RXJyb3IucHkgYi9weXRob24vdGVzdHMvdHN0TGFzdEVycm9yLnB5CmluZGV4IGQyNmU4MmMuLmQ1ZjliZTcgMTAwNzU1Ci0tLSBhL3B5dGhvbi90ZXN0cy90c3RMYXN0RXJyb3IucHkKKysrIGIvcHl0aG9uL3Rlc3RzL3RzdExhc3RFcnJvci5weQpAQCAtMTcsOCArMTcsOCBAQAogICAgICAgICBpZiBsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpICE9IDA6CiAgICAgICAgICAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKSAKICAgICAgICAgICAgIHNlbGYuZmFpbCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSksKSkKLQllbHNlOgotCSAgICBwcmludCAiT0siCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiT0siKQogCiAgICAgZGVmIGZhaWxVbmxlc3NYbWxFcnJvcihzZWxmLGYsYXJncyxleGMsZG9tYWluLGNvZGUsbWVzc2FnZSxsZXZlbCxmaWxlLGxpbmUpOgogICAgICAgICAiIiJSdW4gZnVuY3Rpb24gZiwgd2l0aCBhcmd1bWVudHMgYXJncyBhbmQgZXhwZWN0IGFuIGV4Y2VwdGlvbiBleGM7CkBAIC0yNywxOSArMjcsMTkgQEAKICAgICAgICAgIyBkaXNhYmxlIHRoZSBkZWZhdWx0IGVycm9yIGhhbmRsZXIKICAgICAgICAgbGlieG1sMi5yZWdpc3RlckVycm9ySGFuZGxlcihOb25lLE5vbmUpCiAgICAgICAgIHRyeToKLQkgICAgYXBwbHkoZixhcmdzKQorICAgICAgICAgICAgZigqYXJncykKICAgICAgICAgZXhjZXB0IGV4YzoKICAgICAgICAgICAgIGUgPSBsaWJ4bWwyLmxhc3RFcnJvcigpCiAgICAgICAgICAgICBpZiBlIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJsYXN0RXJyb3Igbm90IHNldCIpCiAgICAgICAgICAgICBpZiAwOgotICAgICAgICAgICAgICAgIHByaW50ICJkb21haW4gPSAiLGUuZG9tYWluKCkKLSAgICAgICAgICAgICAgICBwcmludCAiY29kZSA9ICIsZS5jb2RlKCkKLSAgICAgICAgICAgICAgICBwcmludCAibWVzc2FnZSA9IixyZXByKGUubWVzc2FnZSgpKQotICAgICAgICAgICAgICAgIHByaW50ICJsZXZlbCA9IixlLmxldmVsKCkKLSAgICAgICAgICAgICAgICBwcmludCAiZmlsZSA9IixlLmZpbGUoKQotICAgICAgICAgICAgICAgIHByaW50ICJsaW5lID0iLGUubGluZSgpCi0gICAgICAgICAgICAgICAgcHJpbnQKKyAgICAgICAgICAgICAgICBwcmludCgiZG9tYWluID0gIixlLmRvbWFpbigpKQorICAgICAgICAgICAgICAgIHByaW50KCJjb2RlID0gIixlLmNvZGUoKSkKKyAgICAgICAgICAgICAgICBwcmludCgibWVzc2FnZSA9IixyZXByKGUubWVzc2FnZSgpKSkKKyAgICAgICAgICAgICAgICBwcmludCgibGV2ZWwgPSIsZS5sZXZlbCgpKQorICAgICAgICAgICAgICAgIHByaW50KCJmaWxlID0iLGUuZmlsZSgpKQorICAgICAgICAgICAgICAgIHByaW50KCJsaW5lID0iLGUubGluZSgpKQorICAgICAgICAgICAgICAgIHByaW50KCkKICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGRvbWFpbixlLmRvbWFpbigpKQogICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoY29kZSxlLmNvZGUoKSkKICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKG1lc3NhZ2UsZS5tZXNzYWdlKCkpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvdHN0VVJJLnB5IGIvcHl0aG9uL3Rlc3RzL3RzdFVSSS5weQppbmRleCA1OGI3YWQ4Li5lNGQ1OGFmIDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMvdHN0VVJJLnB5CisrKyBiL3B5dGhvbi90ZXN0cy90c3RVUkkucHkKQEAgLTcsMzUgKzcsMzUgQEAKIAogdXJpID0gbGlieG1sMi5wYXJzZVVSSSgiaHR0cDovL2V4YW1wbGUub3JnOjgwODgvZm9vL2Jhcj9xdWVyeT1zaW1wbGUjZnJhZ2lkIikKIGlmIHVyaS5zY2hlbWUoKSAhPSAnaHR0cCc6Ci0gICAgcHJpbnQgIkVycm9yIHBhcnNpbmcgVVJJOiB3cm9uZyBzY2hlbWUiCisgICAgcHJpbnQoIkVycm9yIHBhcnNpbmcgVVJJOiB3cm9uZyBzY2hlbWUiKQogICAgIHN5cy5leGl0KDEpCiBpZiB1cmkuc2VydmVyKCkgIT0gJ2V4YW1wbGUub3JnJzoKLSAgICBwcmludCAiRXJyb3IgcGFyc2luZyBVUkk6IHdyb25nIHNlcnZlciIKKyAgICBwcmludCgiRXJyb3IgcGFyc2luZyBVUkk6IHdyb25nIHNlcnZlciIpCiAgICAgc3lzLmV4aXQoMSkKIGlmIHVyaS5wb3J0KCkgIT0gODA4ODoKLSAgICBwcmludCAiRXJyb3IgcGFyc2luZyBVUkk6IHdyb25nIHBvcnQiCisgICAgcHJpbnQoIkVycm9yIHBhcnNpbmcgVVJJOiB3cm9uZyBwb3J0IikKICAgICBzeXMuZXhpdCgxKQogaWYgdXJpLnBhdGgoKSAhPSAnL2Zvby9iYXInOgotICAgIHByaW50ICJFcnJvciBwYXJzaW5nIFVSSTogd3JvbmcgcGF0aCIKKyAgICBwcmludCgiRXJyb3IgcGFyc2luZyBVUkk6IHdyb25nIHBhdGgiKQogICAgIHN5cy5leGl0KDEpCiBpZiB1cmkucXVlcnkoKSAhPSAncXVlcnk9c2ltcGxlJzoKLSAgICBwcmludCAiRXJyb3IgcGFyc2luZyBVUkk6IHdyb25nIHF1ZXJ5IgorICAgIHByaW50KCJFcnJvciBwYXJzaW5nIFVSSTogd3JvbmcgcXVlcnkiKQogICAgIHN5cy5leGl0KDEpCiBpZiB1cmkuZnJhZ21lbnQoKSAhPSAnZnJhZ2lkJzoKLSAgICBwcmludCAiRXJyb3IgcGFyc2luZyBVUkk6IHdyb25nIHF1ZXJ5IgorICAgIHByaW50KCJFcnJvciBwYXJzaW5nIFVSSTogd3JvbmcgcXVlcnkiKQogICAgIHN5cy5leGl0KDEpCiB1cmkuc2V0U2NoZW1lKCJodHRwcyIpCiB1cmkuc2V0UG9ydCgyMjMpCiB1cmkuc2V0RnJhZ21lbnQoTm9uZSkKIHJlc3VsdD11cmkuc2F2ZVVyaSgpCiBpZiByZXN1bHQgIT0gImh0dHBzOi8vZXhhbXBsZS5vcmc6MjIzL2Zvby9iYXI/cXVlcnk9c2ltcGxlIjoKLSAgICBwcmludCAiRXJyb3IgbW9kaWZ5aW5nIG9yIHNhdmluZyB0aGUgVVJJIgorICAgIHByaW50KCJFcnJvciBtb2RpZnlpbmcgb3Igc2F2aW5nIHRoZSBVUkkiKQogdXJpID0gTm9uZQogCiAjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwogbGlieG1sMi5jbGVhbnVwUGFyc2VyKCkKIGlmIGxpYnhtbDIuZGVidWdNZW1vcnkoMSkgPT0gMDoKLSAgICBwcmludCAiT0siCisgICAgcHJpbnQoIk9LIikKIGVsc2U6Ci0gICAgcHJpbnQgIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKQorICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCiAgICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy90c3RtZW0ucHkgYi9weXRob24vdGVzdHMvdHN0bWVtLnB5CmluZGV4IDU1MzA5NmQuLjZiMzRjZjMgMTAwNzU1Ci0tLSBhL3B5dGhvbi90ZXN0cy90c3RtZW0ucHkKKysrIGIvcHl0aG9uL3Rlc3RzL3RzdG1lbS5weQpAQCAtMTksNyArMTksNyBAQAogZG9jID0gbGlieG1sMi5wYXJzZURvYyhpbnN0YW5jZSkKIHJldCA9IGRvYy52YWxpZGF0ZUR0ZChjdHh0LCBkdGQpCiBpZiByZXQgIT0gMToKLSAgICBwcmludCAiZXJyb3IgZG9pbmcgRFREIHZhbGlkYXRpb24iCisgICAgcHJpbnQoImVycm9yIGRvaW5nIERURCB2YWxpZGF0aW9uIikKICAgICBzeXMuZXhpdCgxKQogCiBkb2MuZnJlZURvYygpCkBAIC0zMCw3ICszMCw3IEBACiAjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwogbGlieG1sMi5jbGVhbnVwUGFyc2VyKCkKIGlmIGxpYnhtbDIuZGVidWdNZW1vcnkoMSkgPT0gMDoKLSAgICBwcmludCAiT0siCisgICAgcHJpbnQoIk9LIikKIGVsc2U6Ci0gICAgcHJpbnQgIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKQorICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCiAgICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy90c3R4cGF0aC5weSBiL3B5dGhvbi90ZXN0cy90c3R4cGF0aC5weQppbmRleCBlNDdjMzRkLi4wYmE1YTZkIDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMvdHN0eHBhdGgucHkKKysrIGIvcHl0aG9uL3Rlc3RzL3RzdHhwYXRoLnB5CkBAIC0yNSwxMCArMjUsMTAgQEAKIGN0eHQgPSBkb2MueHBhdGhOZXdDb250ZXh0KCkKIHJlcyA9IGN0eHQueHBhdGhFdmFsKCIvLyoiKQogaWYgbGVuKHJlcykgIT0gMjoKLSAgICBwcmludCAieHBhdGggcXVlcnk6IHdyb25nIG5vZGUgc2V0IHNpemUiCisgICAgcHJpbnQoInhwYXRoIHF1ZXJ5OiB3cm9uZyBub2RlIHNldCBzaXplIikKICAgICBzeXMuZXhpdCgxKQogaWYgcmVzWzBdLm5hbWUgIT0gImRvYyIgb3IgcmVzWzFdLm5hbWUgIT0gImZvbyI6Ci0gICAgcHJpbnQgInhwYXRoIHF1ZXJ5OiB3cm9uZyBub2RlIHNldCB2YWx1ZSIKKyAgICBwcmludCgieHBhdGggcXVlcnk6IHdyb25nIG5vZGUgc2V0IHZhbHVlIikKICAgICBzeXMuZXhpdCgxKQogbGlieG1sMi5yZWdpc3RlclhQYXRoRnVuY3Rpb24oY3R4dC5fbywgImZvbyIsIE5vbmUsIGZvbykKIGxpYnhtbDIucmVnaXN0ZXJYUGF0aEZ1bmN0aW9uKGN0eHQuX28sICJiYXIiLCBOb25lLCBiYXIpCkBAIC0zNiwyOCArMzYsMjggQEAKIHdoaWxlIGkgPiAwOgogICAgIHJlcyA9IGN0eHQueHBhdGhFdmFsKCJmb28oMSkiKQogICAgIGlmIHJlcyAhPSAyOgotICAgICAgICBwcmludCAieHBhdGggZXh0ZW5zaW9uIGZhaWx1cmUiCisgICAgICAgIHByaW50KCJ4cGF0aCBleHRlbnNpb24gZmFpbHVyZSIpCiAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgaSA9IGkgLSAxCiBpID0gMTAwMDAKIHdoaWxlIGkgPiAwOgogICAgIHJlcyA9IGN0eHQueHBhdGhFdmFsKCJiYXIoMSkiKQogICAgIGlmIHJlcyAhPSAiMyI6Ci0gICAgICAgIHByaW50ICJ4cGF0aCBleHRlbnNpb24gZmFpbHVyZSBnb3QgJXMgZXhwZWN0aW5nICczJyIKKyAgICAgICAgcHJpbnQoInhwYXRoIGV4dGVuc2lvbiBmYWlsdXJlIGdvdCAlcyBleHBlY3RpbmcgJzMnIikKICAgICAgICAgc3lzLmV4aXQoMSkKICAgICBpID0gaSAtIDEKIGRvYy5mcmVlRG9jKCkKIGN0eHQueHBhdGhGcmVlQ29udGV4dCgpCiAKIGlmIGNhbGxlZCAhPSAiZm9vIjoKLSAgICBwcmludCAieHBhdGggZnVuY3Rpb246IGZhaWxlZCB0byBhY2Nlc3MgdGhlIGNvbnRleHQiCi0gICAgcHJpbnQgInhwYXRoIGZ1bmN0aW9uOiAlcyIgJSAoY2FsbGVkKQorICAgIHByaW50KCJ4cGF0aCBmdW5jdGlvbjogZmFpbGVkIHRvIGFjY2VzcyB0aGUgY29udGV4dCIpCisgICAgcHJpbnQoInhwYXRoIGZ1bmN0aW9uOiAlcyIgJSAoY2FsbGVkKSkKICAgICBzeXMuZXhpdCgxKQogCiAjbWVtb3J5IGRlYnVnIHNwZWNpZmljCiBsaWJ4bWwyLmNsZWFudXBQYXJzZXIoKQogaWYgbGlieG1sMi5kZWJ1Z01lbW9yeSgxKSA9PSAwOgotICAgIHByaW50ICJPSyIKKyAgICBwcmludCgiT0siKQogZWxzZToKLSAgICBwcmludCAiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpCisgICAgcHJpbnQoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKSkKICAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKQpkaWZmIC0tZ2l0IGEvcHl0aG9uL3Rlc3RzL3ZhbGlkRFRELnB5IGIvcHl0aG9uL3Rlc3RzL3ZhbGlkRFRELnB5CmluZGV4IDEyMjJmOWYuLjRiMDNiOGUgMTAwNzU1Ci0tLSBhL3B5dGhvbi90ZXN0cy92YWxpZERURC5weQorKysgYi9weXRob24vdGVzdHMvdmFsaWREVEQucHkKQEAgLTExLDcgKzExLDcgQEAKIAogICAgIGRlZiBoYW5kbGVyKHNlbGYsIG1zZywgZGF0YSk6CiAgICAgICAgIGlmIGRhdGEgIT0gQVJHOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uLCAiRXJyb3IgaGFuZGxlciBkaWQgbm90IHJlY2VpdmUgY29ycmVjdCBhcmd1bWVudCIKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRXJyb3IgaGFuZGxlciBkaWQgbm90IHJlY2VpdmUgY29ycmVjdCBhcmd1bWVudCIpCiAgICAgICAgIHNlbGYuZXJyb3JzLmFwcGVuZChtc2cpCiAKIApAQCAtMzQsNyArMzQsNyBAQAogZG9jID0gbGlieG1sMi5wYXJzZURvYyh2YWxpZCkKIHJldCA9IGRvYy52YWxpZGF0ZUR0ZChjdHh0LCBkdGQpCiBpZiByZXQgIT0gMSBvciBlLmVycm9yczoKLSAgICBwcmludCAiZXJyb3IgZG9pbmcgRFREIHZhbGlkYXRpb24iCisgICAgcHJpbnQoImVycm9yIGRvaW5nIERURCB2YWxpZGF0aW9uIikKICAgICBzeXMuZXhpdCgxKQogZG9jLmZyZWVEb2MoKQogCkBAIC00Miw3ICs0Miw3IEBACiBkb2MgPSBsaWJ4bWwyLnBhcnNlRG9jKGludmFsaWQpCiByZXQgPSBkb2MudmFsaWRhdGVEdGQoY3R4dCwgZHRkKQogaWYgcmV0ICE9IDAgb3Igbm90IGUuZXJyb3JzOgotICAgIHByaW50ICJFcnJvcjogZG9jdW1lbnQgc3VwcG9zZWQgdG8gYmUgaW52YWxpZCIKKyAgICBwcmludCgiRXJyb3I6IGRvY3VtZW50IHN1cHBvc2VkIHRvIGJlIGludmFsaWQiKQogZG9jLmZyZWVEb2MoKQogCiBkdGQuZnJlZUR0ZCgpCkBAIC01Miw4ICs1Miw4IEBACiAjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwogbGlieG1sMi5jbGVhbnVwUGFyc2VyKCkKIGlmIGxpYnhtbDIuZGVidWdNZW1vcnkoMSkgPT0gMDoKLSAgICBwcmludCAiT0siCisgICAgcHJpbnQoIk9LIikKIGVsc2U6Ci0gICAgcHJpbnQgIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKQorICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCiAgICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKIApkaWZmIC0tZ2l0IGEvcHl0aG9uL3Rlc3RzL3ZhbGlkUk5HLnB5IGIvcHl0aG9uL3Rlc3RzL3ZhbGlkUk5HLnB5CmluZGV4IDcwMjJlZmUuLjU3ZjEzYTQgMTAwNzU1Ci0tLSBhL3B5dGhvbi90ZXN0cy92YWxpZFJORy5weQorKysgYi9weXRob24vdGVzdHMvdmFsaWRSTkcucHkKQEAgLTExLDcgKzExLDcgQEAKIAogICAgIGRlZiBoYW5kbGVyKHNlbGYsIG1zZywgZGF0YSk6CiAgICAgICAgIGlmIGRhdGEgIT0gQVJHOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uLCAiRXJyb3IgaGFuZGxlciBkaWQgbm90IHJlY2VpdmUgY29ycmVjdCBhcmd1bWVudCIKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRXJyb3IgaGFuZGxlciBkaWQgbm90IHJlY2VpdmUgY29ycmVjdCBhcmd1bWVudCIpCiAgICAgICAgIHNlbGYuZXJyb3JzLmFwcGVuZChtc2cpCiAKICMgTWVtb3J5IGRlYnVnIHNwZWNpZmljCkBAIC00OSw3ICs0OSw3IEBACiBkb2MgPSBsaWJ4bWwyLnBhcnNlRG9jKHZhbGlkKQogcmV0ID0gZG9jLnJlbGF4TkdWYWxpZGF0ZURvYyhjdHh0KQogaWYgcmV0ICE9IDAgb3IgZS5lcnJvcnM6Ci0gICAgcHJpbnQgImVycm9yIGRvaW5nIFJlbGF4TkcgdmFsaWRhdGlvbiIKKyAgICBwcmludCgiZXJyb3IgZG9pbmcgUmVsYXhORyB2YWxpZGF0aW9uIikKICAgICBzeXMuZXhpdCgxKQogZG9jLmZyZWVEb2MoKQogCkBAIC01Nyw3ICs1Nyw3IEBACiBkb2MgPSBsaWJ4bWwyLnBhcnNlRG9jKGludmFsaWQpCiByZXQgPSBkb2MucmVsYXhOR1ZhbGlkYXRlRG9jKGN0eHQpCiBpZiByZXQgPT0gMCBvciBub3QgZS5lcnJvcnM6Ci0gICAgcHJpbnQgIkVycm9yOiBkb2N1bWVudCBzdXBwb3NlZCB0byBiZSBSZWxheE5HIGludmFsaWQiCisgICAgcHJpbnQoIkVycm9yOiBkb2N1bWVudCBzdXBwb3NlZCB0byBiZSBSZWxheE5HIGludmFsaWQiKQogICAgIHN5cy5leGl0KDEpCiBkb2MuZnJlZURvYygpCiAKQEAgLTY5LDggKzY5LDggQEAKICMgTWVtb3J5IGRlYnVnIHNwZWNpZmljCiBsaWJ4bWwyLmNsZWFudXBQYXJzZXIoKQogaWYgbGlieG1sMi5kZWJ1Z01lbW9yeSgxKSA9PSAwOgotICAgIHByaW50ICJPSyIKKyAgICBwcmludCgiT0siKQogZWxzZToKLSAgICBwcmludCAiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpCisgICAgcHJpbnQoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKSkKICAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKQogCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvdmFsaWRTY2hlbWFzLnB5IGIvcHl0aG9uL3Rlc3RzL3ZhbGlkU2NoZW1hcy5weQppbmRleCBkNGQ2MmIyLi5jYzU0M2YzIDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMvdmFsaWRTY2hlbWFzLnB5CisrKyBiL3B5dGhvbi90ZXN0cy92YWxpZFNjaGVtYXMucHkKQEAgLTExLDcgKzExLDcgQEAKIAogICAgIGRlZiBoYW5kbGVyKHNlbGYsIG1zZywgZGF0YSk6CiAgICAgICAgIGlmIGRhdGEgIT0gQVJHOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uLCAiRXJyb3IgaGFuZGxlciBkaWQgbm90IHJlY2VpdmUgY29ycmVjdCBhcmd1bWVudCIKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRXJyb3IgaGFuZGxlciBkaWQgbm90IHJlY2VpdmUgY29ycmVjdCBhcmd1bWVudCIpCiAgICAgICAgIHNlbGYuZXJyb3JzLmFwcGVuZChtc2cpCiAKICMgTWVtb3J5IGRlYnVnIHNwZWNpZmljCkBAIC01Niw3ICs1Niw3IEBACiBkb2MgPSBsaWJ4bWwyLnBhcnNlRG9jKHZhbGlkKQogcmV0ID0gZG9jLnNjaGVtYVZhbGlkYXRlRG9jKGN0eHRfdmFsaWQpCiBpZiByZXQgIT0gMCBvciBlLmVycm9yczoKLSAgICBwcmludCAiZXJyb3IgZG9pbmcgc2NoZW1hIHZhbGlkYXRpb24iCisgICAgcHJpbnQoImVycm9yIGRvaW5nIHNjaGVtYSB2YWxpZGF0aW9uIikKICAgICBzeXMuZXhpdCgxKQogZG9jLmZyZWVEb2MoKQogCkBAIC02NCw3ICs2NCw3IEBACiBkb2MgPSBsaWJ4bWwyLnBhcnNlRG9jKGludmFsaWQpCiByZXQgPSBkb2Muc2NoZW1hVmFsaWRhdGVEb2MoY3R4dF92YWxpZCkKIGlmIHJldCA9PSAwIG9yIG5vdCBlLmVycm9yczoKLSAgICBwcmludCAiRXJyb3I6IGRvY3VtZW50IHN1cHBvc2VyIHRvIGJlIHNjaGVtYSBpbnZhbGlkIgorICAgIHByaW50KCJFcnJvcjogZG9jdW1lbnQgc3VwcG9zZXIgdG8gYmUgc2NoZW1hIGludmFsaWQiKQogICAgIHN5cy5leGl0KDEpCiBkb2MuZnJlZURvYygpCiAKQEAgLTc2LDggKzc2LDggQEAKICMgTWVtb3J5IGRlYnVnIHNwZWNpZmljCiBsaWJ4bWwyLmNsZWFudXBQYXJzZXIoKQogaWYgbGlieG1sMi5kZWJ1Z01lbW9yeSgxKSA9PSAwOgotICAgIHByaW50ICJPSyIKKyAgICBwcmludCgiT0siKQogZWxzZToKLSAgICBwcmludCAiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpCisgICAgcHJpbnQoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKSkKICAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKQogCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMvdmFsaWRhdGUucHkgYi9weXRob24vdGVzdHMvdmFsaWRhdGUucHkKaW5kZXggMGRjODZmNC4uMTZjMDM4NiAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL3ZhbGlkYXRlLnB5CisrKyBiL3B5dGhvbi90ZXN0cy92YWxpZGF0ZS5weQpAQCAtMTIsMTQgKzEyLDE0IEBACiB2YWxpZCA9IGN0eHQuaXNWYWxpZCgpCiAKIGlmIGRvYy5uYW1lICE9ICJ2YWxpZC54bWwiOgotICAgIHByaW50ICJkb2MubmFtZSBmYWlsZWQiCisgICAgcHJpbnQoImRvYy5uYW1lIGZhaWxlZCIpCiAgICAgc3lzLmV4aXQoMSkKIHJvb3QgPSBkb2MuY2hpbGRyZW4KIGlmIHJvb3QubmFtZSAhPSAiZG9jIjoKLSAgICBwcmludCAicm9vdC5uYW1lIGZhaWxlZCIKKyAgICBwcmludCgicm9vdC5uYW1lIGZhaWxlZCIpCiAgICAgc3lzLmV4aXQoMSkKIGlmIHZhbGlkICE9IDE6Ci0gICAgcHJpbnQgInZhbGlkaXR5IGNoZWMgZmFpbGVkIgorICAgIHByaW50KCJ2YWxpZGl0eSBjaGVjIGZhaWxlZCIpCiAgICAgc3lzLmV4aXQoMSkKIGRvYy5mcmVlRG9jKCkKIApAQCAtMzIsNyArMzIsNyBAQAogICAgIHZhbGlkID0gY3R4dC5pc1ZhbGlkKCkKICAgICBkb2MuZnJlZURvYygpCiAgICAgaWYgdmFsaWQgIT0gMToKLSAgICAgICAgcHJpbnQgInZhbGlkaXR5IGNoZWNrIGZhaWxlZCIKKyAgICAgICAgcHJpbnQoInZhbGlkaXR5IGNoZWNrIGZhaWxlZCIpCiAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgaSA9IGkgLSAxCiAKQEAgLTQ4LDE0ICs0OCwxNCBAQAogZG9jID0gY3R4dC5kb2MoKQogdmFsaWQgPSBjdHh0LmlzVmFsaWQoKQogaWYgZG9jLm5hbWUgIT0gImludmFsaWQueG1sIjoKLSAgICBwcmludCAiZG9jLm5hbWUgZmFpbGVkIgorICAgIHByaW50KCJkb2MubmFtZSBmYWlsZWQiKQogICAgIHN5cy5leGl0KDEpCiByb290ID0gZG9jLmNoaWxkcmVuCiBpZiByb290Lm5hbWUgIT0gImRvYyI6Ci0gICAgcHJpbnQgInJvb3QubmFtZSBmYWlsZWQiCisgICAgcHJpbnQoInJvb3QubmFtZSBmYWlsZWQiKQogICAgIHN5cy5leGl0KDEpCiBpZiB2YWxpZCAhPSAwOgotICAgIHByaW50ICJ2YWxpZGl0eSBjaGVjIGZhaWxlZCIKKyAgICBwcmludCgidmFsaWRpdHkgY2hlYyBmYWlsZWQiKQogICAgIHN5cy5leGl0KDEpCiBkb2MuZnJlZURvYygpCiAKQEAgLTY4LDcgKzY4LDcgQEAKICAgICB2YWxpZCA9IGN0eHQuaXNWYWxpZCgpCiAgICAgZG9jLmZyZWVEb2MoKQogICAgIGlmIHZhbGlkICE9IDA6Ci0gICAgICAgIHByaW50ICJ2YWxpZGl0eSBjaGVjayBmYWlsZWQiCisgICAgICAgIHByaW50KCJ2YWxpZGl0eSBjaGVjayBmYWlsZWQiKQogICAgICAgICBzeXMuZXhpdCgxKQogICAgIGkgPSBpIC0gMQogZGVsIGN0eHQKQEAgLTc2LDcgKzc2LDcgQEAKICMgTWVtb3J5IGRlYnVnIHNwZWNpZmljCiBsaWJ4bWwyLmNsZWFudXBQYXJzZXIoKQogaWYgbGlieG1sMi5kZWJ1Z01lbW9yeSgxKSA9PSAwOgotICAgIHByaW50ICJPSyIKKyAgICBwcmludCgiT0siKQogZWxzZToKLSAgICBwcmludCAiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpCisgICAgcHJpbnQoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKSkKICAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKQpkaWZmIC0tZ2l0IGEvcHl0aG9uL3Rlc3RzL3dhbGtlci5weSBiL3B5dGhvbi90ZXN0cy93YWxrZXIucHkKaW5kZXggM2I1YTYyYS4uNWM2ZjA2ZCAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL3dhbGtlci5weQorKysgYi9weXRob24vdGVzdHMvd2Fsa2VyLnB5CkBAIC0zLDcgKzMsNyBAQAogIyB0aGlzIHRlc3RzIHRoZSBlbnRpdGllcyBzdWJzdGl0dXRpb25zIHdpdGggdGhlIFhtbFRleHRSZWFkZXIgaW50ZXJmYWNlCiAjCiBpbXBvcnQgc3lzCi1pbXBvcnQgU3RyaW5nSU8KK2ltcG9ydCBpbwogaW1wb3J0IGxpYnhtbDIKIAogIyBNZW1vcnkgZGVidWcgc3BlY2lmaWMKQEAgLTQ1LDEyICs0NSwxMiBAQAogICAgIHJldCA9IHJlYWRlci5SZWFkKCkKIAogaWYgcmV0ICE9IDA6Ci0gICAgcHJpbnQgIkVycm9yIHBhcnNpbmcgdGhlIGRvY3VtZW50IHRlc3QxIgorICAgIHByaW50KCJFcnJvciBwYXJzaW5nIHRoZSBkb2N1bWVudCB0ZXN0MSIpCiAgICAgc3lzLmV4aXQoMSkKIAogaWYgcmVzdWx0ICE9IGV4cGVjdDoKLSAgICBwcmludCAiVW5leHBlY3RlZCByZXN1bHQgZm9yIHRlc3QxIgotICAgIHByaW50IHJlc3VsdAorICAgIHByaW50KCJVbmV4cGVjdGVkIHJlc3VsdCBmb3IgdGVzdDEiKQorICAgIHByaW50KHJlc3VsdCkKICAgICBzeXMuZXhpdCgxKQogCiBkb2MuZnJlZURvYygpCkBAIC04NSwxMiArODUsMTIgQEAKICAgICByZXQgPSByZWFkZXIuUmVhZCgpCiAKIGlmIHJldCAhPSAwOgotICAgIHByaW50ICJFcnJvciBwYXJzaW5nIHRoZSBkb2N1bWVudCB0ZXN0MiIKKyAgICBwcmludCgiRXJyb3IgcGFyc2luZyB0aGUgZG9jdW1lbnQgdGVzdDIiKQogICAgIHN5cy5leGl0KDEpCiAKIGlmIHJlc3VsdCAhPSBleHBlY3Q6Ci0gICAgcHJpbnQgIlVuZXhwZWN0ZWQgcmVzdWx0IGZvciB0ZXN0MiIKLSAgICBwcmludCByZXN1bHQKKyAgICBwcmludCgiVW5leHBlY3RlZCByZXN1bHQgZm9yIHRlc3QyIikKKyAgICBwcmludChyZXN1bHQpCiAgICAgc3lzLmV4aXQoMSkKIAogZG9jLmZyZWVEb2MoKQpAQCAtMTIzLDEyICsxMjMsMTIgQEAKICAgICByZXQgPSByZWFkZXIuUmVhZCgpCiAKIGlmIHJldCAhPSAwOgotICAgIHByaW50ICJFcnJvciBwYXJzaW5nIHRoZSBkb2N1bWVudCB0ZXN0MyIKKyAgICBwcmludCgiRXJyb3IgcGFyc2luZyB0aGUgZG9jdW1lbnQgdGVzdDMiKQogICAgIHN5cy5leGl0KDEpCiAKIGlmIHJlc3VsdCAhPSBleHBlY3Q6Ci0gICAgcHJpbnQgIlVuZXhwZWN0ZWQgcmVzdWx0IGZvciB0ZXN0MyIKLSAgICBwcmludCByZXN1bHQKKyAgICBwcmludCgiVW5leHBlY3RlZCByZXN1bHQgZm9yIHRlc3QzIikKKyAgICBwcmludChyZXN1bHQpCiAgICAgc3lzLmV4aXQoMSkKIAogIwpAQCAtMTM5LDcgKzEzOSw3IEBACiAjIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwogbGlieG1sMi5jbGVhbnVwUGFyc2VyKCkKIGlmIGxpYnhtbDIuZGVidWdNZW1vcnkoMSkgPT0gMDoKLSAgICBwcmludCAiT0siCisgICAgcHJpbnQoIk9LIikKIGVsc2U6Ci0gICAgcHJpbnQgIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKQorICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCiAgICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy94cGF0aC5weSBiL3B5dGhvbi90ZXN0cy94cGF0aC5weQppbmRleCAyZTAzNmUxLi43MmU2YzlkIDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMveHBhdGgucHkKKysrIGIvcHl0aG9uL3Rlc3RzL3hwYXRoLnB5CkBAIC0xMSwyNCArMTEsMjQgQEAKIAogZG9jID0gbGlieG1sMi5wYXJzZUZpbGUoInRzdC54bWwiKQogaWYgZG9jLm5hbWUgIT0gInRzdC54bWwiOgotICAgIHByaW50ICJkb2MubmFtZSBlcnJvciIKKyAgICBwcmludCgiZG9jLm5hbWUgZXJyb3IiKQogICAgIHN5cy5leGl0KDEpOwogCiBjdHh0ID0gZG9jLnhwYXRoTmV3Q29udGV4dCgpCiByZXMgPSBjdHh0LnhwYXRoRXZhbCgiLy8qIikKIGlmIGxlbihyZXMpICE9IDI6Ci0gICAgcHJpbnQgInhwYXRoIHF1ZXJ5OiB3cm9uZyBub2RlIHNldCBzaXplIgorICAgIHByaW50KCJ4cGF0aCBxdWVyeTogd3Jvbmcgbm9kZSBzZXQgc2l6ZSIpCiAgICAgc3lzLmV4aXQoMSkKIGlmIHJlc1swXS5uYW1lICE9ICJkb2MiIG9yIHJlc1sxXS5uYW1lICE9ICJmb28iOgotICAgIHByaW50ICJ4cGF0aCBxdWVyeTogd3Jvbmcgbm9kZSBzZXQgdmFsdWUiCisgICAgcHJpbnQoInhwYXRoIHF1ZXJ5OiB3cm9uZyBub2RlIHNldCB2YWx1ZSIpCiAgICAgc3lzLmV4aXQoMSkKIGN0eHQuc2V0Q29udGV4dE5vZGUocmVzWzBdKQogcmVzID0gY3R4dC54cGF0aEV2YWwoImZvbyIpCiBpZiBsZW4ocmVzKSAhPSAxOgotICAgIHByaW50ICJ4cGF0aCBxdWVyeTogd3Jvbmcgbm9kZSBzZXQgc2l6ZSIKKyAgICBwcmludCgieHBhdGggcXVlcnk6IHdyb25nIG5vZGUgc2V0IHNpemUiKQogICAgIHN5cy5leGl0KDEpCiBpZiByZXNbMF0ubmFtZSAhPSAiZm9vIjoKLSAgICBwcmludCAieHBhdGggcXVlcnk6IHdyb25nIG5vZGUgc2V0IHZhbHVlIgorICAgIHByaW50KCJ4cGF0aCBxdWVyeTogd3Jvbmcgbm9kZSBzZXQgdmFsdWUiKQogICAgIHN5cy5leGl0KDEpCiBkb2MuZnJlZURvYygpCiBjdHh0LnhwYXRoRnJlZUNvbnRleHQoKQpAQCAtNDUsNyArNDUsNyBAQAogIyBNZW1vcnkgZGVidWcgc3BlY2lmaWMKIGxpYnhtbDIuY2xlYW51cFBhcnNlcigpCiBpZiBsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpID09IDA6Ci0gICAgcHJpbnQgIk9LIgorICAgIHByaW50KCJPSyIpCiBlbHNlOgotICAgIHByaW50ICJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkKKyAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQogICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMveHBhdGhleHQucHkgYi9weXRob24vdGVzdHMveHBhdGhleHQucHkKaW5kZXggNDc2OTYyNi4uYjgzZDI4MyAxMDA3NTUKLS0tIGEvcHl0aG9uL3Rlc3RzL3hwYXRoZXh0LnB5CisrKyBiL3B5dGhvbi90ZXN0cy94cGF0aGV4dC5weQpAQCAtMTUsMTAgKzE1LDEwIEBACiBjdHh0ID0gZG9jLnhwYXRoTmV3Q29udGV4dCgpCiByZXMgPSBjdHh0LnhwYXRoRXZhbCgiLy8qIikKIGlmIGxlbihyZXMpICE9IDI6Ci0gICAgcHJpbnQgInhwYXRoIHF1ZXJ5OiB3cm9uZyBub2RlIHNldCBzaXplIgorICAgIHByaW50KCJ4cGF0aCBxdWVyeTogd3Jvbmcgbm9kZSBzZXQgc2l6ZSIpCiAgICAgc3lzLmV4aXQoMSkKIGlmIHJlc1swXS5uYW1lICE9ICJkb2MiIG9yIHJlc1sxXS5uYW1lICE9ICJmb28iOgotICAgIHByaW50ICJ4cGF0aCBxdWVyeTogd3Jvbmcgbm9kZSBzZXQgdmFsdWUiCisgICAgcHJpbnQoInhwYXRoIHF1ZXJ5OiB3cm9uZyBub2RlIHNldCB2YWx1ZSIpCiAgICAgc3lzLmV4aXQoMSkKIAogbGlieG1sMi5yZWdpc3RlclhQYXRoRnVuY3Rpb24oY3R4dC5fbywgImZvbyIsIE5vbmUsIGZvbykKQEAgLTI3LDE0ICsyNywxNCBAQAogd2hpbGUgaSA+IDA6CiAgICAgcmVzID0gY3R4dC54cGF0aEV2YWwoImZvbygxKSIpCiAgICAgaWYgcmVzICE9IDI6Ci0gICAgICAgIHByaW50ICJ4cGF0aCBleHRlbnNpb24gZmFpbHVyZSIKKyAgICAgICAgcHJpbnQoInhwYXRoIGV4dGVuc2lvbiBmYWlsdXJlIikKICAgICAgICAgc3lzLmV4aXQoMSkKICAgICBpID0gaSAtIDEKIGkgPSAxMDAwMAogd2hpbGUgaSA+IDA6CiAgICAgcmVzID0gY3R4dC54cGF0aEV2YWwoImJhcigxKSIpCiAgICAgaWYgcmVzICE9ICIzIjoKLSAgICAgICAgcHJpbnQgInhwYXRoIGV4dGVuc2lvbiBmYWlsdXJlIGdvdCAlcyBleHBlY3RpbmcgJzMnIgorICAgICAgICBwcmludCgieHBhdGggZXh0ZW5zaW9uIGZhaWx1cmUgZ290ICVzIGV4cGVjdGluZyAnMyciKQogICAgICAgICBzeXMuZXhpdCgxKQogICAgIGkgPSBpIC0gMQogZG9jLmZyZWVEb2MoKQpAQCAtNDMsNyArNDMsNyBAQAogIyBNZW1vcnkgZGVidWcgc3BlY2lmaWMKIGxpYnhtbDIuY2xlYW51cFBhcnNlcigpCiBpZiBsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpID09IDA6Ci0gICAgcHJpbnQgIk9LIgorICAgIHByaW50KCJPSyIpCiBlbHNlOgotICAgIHByaW50ICJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkKKyAgICBwcmludCgiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpKQogICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMveHBhdGhsZWFrLnB5IGIvcHl0aG9uL3Rlc3RzL3hwYXRobGVhay5weQpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDM5ZjQ5ZTMuLmQyMTk2ZmEKLS0tIGEvcHl0aG9uL3Rlc3RzL3hwYXRobGVhay5weQorKysgYi9weXRob24vdGVzdHMveHBhdGhsZWFrLnB5CkBAIC00MiwyNCArNDIsMjQgQEAKIGZvciBleHByIGluIGJhZGV4cHJzOgogCXRyeToKIAkJY3R4dC54cGF0aEV2YWwoZXhwcikKLQlleGNlcHQgbGlieG1sMi54cGF0aEVycm9yLCBlOgorCWV4Y2VwdCBsaWJ4bWwyLnhwYXRoRXJyb3IgYXMgZToKIAkgICAgICAgIHBhc3MKIAllbHNlOgotCQlwcmludCAiVW5leHBlY3RlZGx5IGxlZ2FsIGV4cHJlc3Npb246IiwgZXhwcgorCQlwcmludCgiVW5leHBlY3RlZGx5IGxlZ2FsIGV4cHJlc3Npb246IiwgZXhwcikKIGN0eHQueHBhdGhGcmVlQ29udGV4dCgpCiBkb2MuZnJlZURvYygpCiAKIGlmIGVyciAhPSBleHBlY3Q6Ci0gICAgcHJpbnQgImVycm9yIgotICAgIHByaW50ICJyZWNlaXZlZCAlcyIgJShlcnIpCi0gICAgcHJpbnQgImV4cGVjdGVkICVzIiAlKGV4cGVjdCkKKyAgICBwcmludCgiZXJyb3IiKQorICAgIHByaW50KCJyZWNlaXZlZCAlcyIgJShlcnIpKQorICAgIHByaW50KCJleHBlY3RlZCAlcyIgJShleHBlY3QpKQogICAgIHN5cy5leGl0KDEpCiAKIGxpYnhtbDIuY2xlYW51cFBhcnNlcigpCiBsZWFrZWRieXRlcyA9IGxpYnhtbDIuZGVidWdNZW1vcnkoVHJ1ZSkKIGlmIGxlYWtlZGJ5dGVzID09IDA6Ci0JcHJpbnQgIk9LIgorCXByaW50KCJPSyIpCiBlbHNlOgotCXByaW50ICJNZW1vcnkgbGVhayIsIGxlYWtlZGJ5dGVzLCAiYnl0ZXMiCisJcHJpbnQoIk1lbW9yeSBsZWFrIiwgbGVha2VkYnl0ZXMsICJieXRlcyIpCiAJIyBkcm9wIGZpbGUgdG8gLm1lbWR1bXAgZmlsZSBpbiBjd2QsIGJ1dCB3b24ndCB3b3JrIGlmIG5vdCBjb21waWxlZCBpbgogCWxpYnhtbDIuZHVtcE1lbW9yeSgpCmRpZmYgLS1naXQgYS9weXRob24vdGVzdHMveHBhdGhucy5weSBiL3B5dGhvbi90ZXN0cy94cGF0aG5zLnB5CmluZGV4IGU2N2U1NTAuLjM3OTUzNWUgMTAwNzU1Ci0tLSBhL3B5dGhvbi90ZXN0cy94cGF0aG5zLnB5CisrKyBiL3B5dGhvbi90ZXN0cy94cGF0aG5zLnB5CkBAIC0xNCw4ICsxNCw4IEBACiBkLmZyZWVEb2MoKQogCiBpZiByZXMgIT0gZXhwZWN0OgotICAgIHByaW50ICJ0ZXN0NSBmYWlsZWQ6IHVuZXhwZWN0ZWQgb3V0cHV0IgotICAgIHByaW50IHJlcworICAgIHByaW50KCJ0ZXN0NSBmYWlsZWQ6IHVuZXhwZWN0ZWQgb3V0cHV0IikKKyAgICBwcmludChyZXMpCiBkZWwgcmVzCiBkZWwgZAogZGVsIG4KQEAgLTIzLDcgKzIzLDcgQEAKIGxpYnhtbDIuY2xlYW51cFBhcnNlcigpCiAKIGlmIGxpYnhtbDIuZGVidWdNZW1vcnkoMSkgPT0gMDoKLSAgICBwcmludCAiT0siCisgICAgcHJpbnQoIk9LIikKIGVsc2U6Ci0gICAgcHJpbnQgIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKQorICAgIHByaW50KCJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkpCiAgICAgbGlieG1sMi5kdW1wTWVtb3J5KCkKZGlmZiAtLWdpdCBhL3B5dGhvbi90ZXN0cy94cGF0aHJldC5weSBiL3B5dGhvbi90ZXN0cy94cGF0aHJldC5weQppbmRleCAyYjU1NzZhLi4xMWM4YjMyIDEwMDc1NQotLS0gYS9weXRob24vdGVzdHMveHBhdGhyZXQucHkKKysrIGIvcHl0aG9uL3Rlc3RzL3hwYXRocmV0LnB5CkBAIC0yNywyMSArMjcsMjEgQEAKIGxpYnhtbDIucmVnaXN0ZXJYUGF0aEZ1bmN0aW9uKGN0eHQuX28sICJmb28iLCBOb25lLCBmb28pCiByZXMgPSBjdHh0LnhwYXRoRXZhbCgiZm9vKCdoZWxsbycpIikKIGlmIHR5cGUocmVzKSAhPSB0eXBlKFtdKToKLSAgICBwcmludCAiRmFpbGVkIHRvIHJldHVybiBhIG5vZGVzZXQiCisgICAgcHJpbnQoIkZhaWxlZCB0byByZXR1cm4gYSBub2Rlc2V0IikKICAgICBzeXMuZXhpdCgxKQogaWYgbGVuKHJlcykgIT0gMToKLSAgICBwcmludCAiVW5leHBlY3RlZCBub2Rlc2V0IHNpemUiCisgICAgcHJpbnQoIlVuZXhwZWN0ZWQgbm9kZXNldCBzaXplIikKICAgICBzeXMuZXhpdCgxKQogbm9kZSA9IHJlc1swXQogaWYgbm9kZS5uYW1lICE9ICdwJzoKLSAgICBwcmludCAiVW5leHBlY3RlZCBub2Rlc2V0IGVsZW1lbnQgcmVzdWx0IgorICAgIHByaW50KCJVbmV4cGVjdGVkIG5vZGVzZXQgZWxlbWVudCByZXN1bHQiKQogICAgIHN5cy5leGl0KDEpCiBub2RlID0gbm9kZS5jaGlsZHJlbgogaWYgbm9kZS50eXBlICE9ICd0ZXh0JzoKLSAgICBwcmludCAiVW5leHBlY3RlZCBub2Rlc2V0IGVsZW1lbnQgY2hpbGRyZW4gdHlwZSIKKyAgICBwcmludCgiVW5leHBlY3RlZCBub2Rlc2V0IGVsZW1lbnQgY2hpbGRyZW4gdHlwZSIpCiAgICAgc3lzLmV4aXQoMSkKIGlmIG5vZGUuY29udGVudCAhPSAnaGVsbG8nOgotICAgIHByaW50ICJVbmV4cGVjdGVkIG5vZGVzZXQgZWxlbWVudCBjaGlsZHJlbiBjb250ZW50IgorICAgIHByaW50KCJVbmV4cGVjdGVkIG5vZGVzZXQgZWxlbWVudCBjaGlsZHJlbiBjb250ZW50IikKICAgICBzeXMuZXhpdCgxKQogCiBkb2MuZnJlZURvYygpCkBAIC01MSw3ICs1MSw3IEBACiAjbWVtb3J5IGRlYnVnIHNwZWNpZmljCiBsaWJ4bWwyLmNsZWFudXBQYXJzZXIoKQogaWYgbGlieG1sMi5kZWJ1Z01lbW9yeSgxKSA9PSAwOgotICAgIHByaW50ICJPSyIKKyAgICBwcmludCgiT0siKQogZWxzZToKLSAgICBwcmludCAiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpCisgICAgcHJpbnQoIk1lbW9yeSBsZWFrICVkIGJ5dGVzIiAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKSkKICAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKQo=