ZGlmZiAtLWdpdCBhL01hYy9Ub29scy9JREUvTW9kdWxlQnJvd3Nlci5weSBiL01hYy9Ub29scy9JREUvTW9kdWxlQnJvd3Nlci5weQppbmRleCA3ODU4MWVjLi5mNWIyYjBhIDEwMDY0NAotLS0gYS9NYWMvVG9vbHMvSURFL01vZHVsZUJyb3dzZXIucHkKKysrIGIvTWFjL1Rvb2xzL0lERS9Nb2R1bGVCcm93c2VyLnB5CkBAIC0xNCw5ICsxNCw5IEBACiAJCQogCQkjc2VsZi53aW5kb3cuYmV2ZWxib3ggPSBXLkJldmVsQm94KCgwLCAwLCAwLCA1NikpCiAJCXNlbGYud2luZG93Lm9wZW5idXR0b24gPSBXLkJ1dHRvbigoMTAsIDgsIDgwLCAxNiksICJPcGVuIiwgc2VsZi5vcGVuYnV0dG9uaGl0KQotCQlzZWxmLndpbmRvdy5icm93c2VidXR0b24gPSBXLkJ1dHRvbigoMTAwLCA4LCA4MCwgMTYpLCAiQnJvd3NlgyIsIHNlbGYuYnJvd3NlYnV0dG9uaGl0KQorCQlzZWxmLndpbmRvdy5icm93c2VidXR0b24gPSBXLkJ1dHRvbigoMTAwLCA4LCA4MCwgMTYpLCAiQnJvd3NlXHhjOSIsIHNlbGYuYnJvd3NlYnV0dG9uaGl0KQogCQlzZWxmLndpbmRvdy5yZWxvYWRidXR0b24gPSBXLkJ1dHRvbigoMTAsIDMyLCA4MCwgMTYpLCAiUmVsb2FkIiwgc2VsZi5yZWxvYWRidXR0b25oaXQpCi0JCXNlbGYud2luZG93Lm9wZW5vdGhlcmJ1dHRvbiA9IFcuQnV0dG9uKCgxMDAsIDMyLCA4MCwgMTYpLCAiT3BlbiBvdGhlcoMiLCBzZWxmLm9wZW5vdGhlcikKKwkJc2VsZi53aW5kb3cub3Blbm90aGVyYnV0dG9uID0gVy5CdXR0b24oKDEwMCwgMzIsIDgwLCAxNiksICJPcGVuIG90aGVyXHhjOSIsIHNlbGYub3Blbm90aGVyKQogCQkKIAkJc2VsZi53aW5kb3cub3BlbmJ1dHRvbi5lbmFibGUoMCkKIAkJc2VsZi53aW5kb3cucmVsb2FkYnV0dG9uLmVuYWJsZSgwKQpAQCAtODEsNyArODEsNyBAQAogCQkJCQlmaWxlLCBwYXRoLCBkZXNjcmlwdGlvbiA9IGltcC5maW5kX21vZHVsZShtb2RuYW1lKQogCQkJCWV4Y2VwdCBJbXBvcnRFcnJvcjoKIAkJCQkJVy5TZXRDdXJzb3IoImFycm93IikKLQkJCQkJVy5NZXNzYWdlKCJDYW7VdCBmaW5kIGZpbGUgZm9yIG1vZHVsZSCWJXOULiIgCisJCQkJCVcuTWVzc2FnZSgiQ2FuJ3QgZmluZCBmaWxlIGZvciBtb2R1bGUgJyVzJy4iIAogCQkJCQkJCSUgbW9kbmFtZSkKIAkJCQllbHNlOgogCQkJCQlzZWxmLm9wZW5zY3JpcHQocGF0aCwgbW9kbmFtZSkJCQkJCQpAQCAtOTMsNyArOTMsNyBAQAogCQllbGlmIHBhdGhbLTQ6XSBpbiBbJy5weWMnLCAnLnB5byddOgogCQkJVy5nZXRhcHBsaWNhdGlvbigpLm9wZW5zY3JpcHQocGF0aFs6LTFdLCBtb2RuYW1lPW1vZG5hbWUpCiAJCWVsc2U6Ci0JCQlXLk1lc3NhZ2UoIkNhbtV0IGVkaXQgliVzlDsgaXQgbWlnaHQgYmUgYSBzaGFyZWQgbGlicmFyeSBvciBhIC5weWMgZmlsZS4iIAorCQkJVy5NZXNzYWdlKCJDYW4ndCBlZGl0ICclcyc7IGl0IG1pZ2h0IGJlIGEgc2hhcmVkIGxpYnJhcnkgb3IgYSAucHljIGZpbGUuIiAKIAkJCQkJJSBtb2RuYW1lKQogCQogCWRlZiBvcGVub3RoZXIoc2VsZik6CkBAIC0xMDYsOSArMTA2LDkgQEAKIAkJCQlmaWxlLCBwYXRoLCBkZXNjcmlwdGlvbiA9IGltcC5maW5kX21vZHVsZShtb2RuYW1lKQogCQkJZXhjZXB0IEltcG9ydEVycm9yOgogCQkJCWlmIG1vZG5hbWUgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgotCQkJCQlhbGVydHRleHQgPSAiliVzlCBpcyBhIGJ1aWx0aW4gbW9kdWxlLCB3aGljaCB5b3UgY2Fu1XQgZWRpdC4iICUgbW9kbmFtZQorCQkJCQlhbGVydHRleHQgPSAiJyVzJyBpcyBhIGJ1aWx0aW4gbW9kdWxlLCB3aGljaCB5b3UgY2FuJ3QgZWRpdC4iICUgbW9kbmFtZQogCQkJCWVsc2U6Ci0JCQkJCWFsZXJ0dGV4dCA9ICJObyBtb2R1bGUgbmFtZWQgliVzlC4iICUgbW9kbmFtZQorCQkJCQlhbGVydHRleHQgPSAiTm8gbW9kdWxlIG5hbWVkICclcycuIiAlIG1vZG5hbWUKIAkJCQlyYWlzZSBXLkFsZXJ0RXJyb3IsIGFsZXJ0dGV4dAogCQkJc2VsZi5vcGVuc2NyaXB0KHBhdGgsIG1vZG5hbWUpCiAJCmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvSURFL1B5QnJvd3Nlci5weSBiL01hYy9Ub29scy9JREUvUHlCcm93c2VyLnB5CmluZGV4IGU4YWFjODMuLjE5MzE5YTEgMTAwNjQ0Ci0tLSBhL01hYy9Ub29scy9JREUvUHlCcm93c2VyLnB5CisrKyBiL01hYy9Ub29scy9JREUvUHlCcm93c2VyLnB5CkBAIC0zOCw3ICszOCw3IEBACiAJCQl2YWx1ZSA9IF9yZXByKHZhbHVlKQogCQkJJycgKyB2YWx1ZQkjIHRlc3QgdG8gc2VlIGlmIGl0IGlzIGEgc3RyaW5nLCBpbiBjYXNlIGEgX19yZXByX18gbWV0aG9kIGlzIGJ1Z2d5CiAJCWV4Y2VwdDoKLQkJCXZhbHVlID0gJ4KCgiBleGNlcHRpb24gaW4gcmVwcigpJworCQkJdmFsdWUgPSAnXHhhNVx4YTVceGE1IGV4Y2VwdGlvbiBpbiByZXByKCknCiAJaWYgdHJ1bmN2YWx1ZToKIAkJcmV0dXJuIGtleSArICdcdCcgKyB2YWx1ZVs6MjU1XQogCXJldHVybiBrZXkgKyAnXHQnICsgdmFsdWUKQEAgLTM2MCw3ICszNjAsNyBAQAogZGVmIHVucGFja19vYmplY3Qob2JqZWN0LCBpbmRlbnQgPSAwKToKIAl0cCA9IHR5cGUob2JqZWN0KQogCWlmIHRwIGluIFNJTVBMRV9UWVBFUyBhbmQgdHAgaXMgbm90IHR5cGVzLk5vbmVUeXBlOgotCQlyYWlzZSBUeXBlRXJyb3IsICdjYW7VdCBicm93c2Ugc2ltcGxlIHR5cGU6ICVzJyAlIHRwLl9fbmFtZV9fCisJCXJhaXNlIFR5cGVFcnJvciwgImNhbid0IGJyb3dzZSBzaW1wbGUgdHlwZTogJXMiICUgdHAuX19uYW1lX18KIAllbGlmIHRwID09IHR5cGVzLkRpY3Rpb25hcnlUeXBlOgogCQlyZXR1cm4gdW5wYWNrX2RpY3Qob2JqZWN0LCBpbmRlbnQpCiAJZWxpZiB0cCBpbiAodHlwZXMuVHVwbGVUeXBlLCB0eXBlcy5MaXN0VHlwZSk6CmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvSURFL1B5Q29uc29sZS5weSBiL01hYy9Ub29scy9JREUvUHlDb25zb2xlLnB5CmluZGV4IGVhMmNmODMuLjRjMzI3ODUgMTAwNjQ0Ci0tLSBhL01hYy9Ub29scy9JREUvUHlDb25zb2xlLnB5CisrKyBiL01hYy9Ub29scy9JREUvUHlDb25zb2xlLnB5CkBAIC00OCw3ICs0OCw3IEBACiAJCiAJZGVmIG9wZW4oc2VsZik6CiAJCVcuRWRpdFRleHQub3BlbihzZWxmKQotCQlzZWxmLndyaXRlKCdQeXRob24gJyArIHN5cy52ZXJzaW9uICsgJ1xuJyArIHN5cy5jb3B5cmlnaHQgKyAnXG4nKQorCQlzZWxmLndyaXRlKCdQeXRob24gJyArIHN5cy52ZXJzaW9uICsgJ1xuVHlwZSAiY29weXJpZ2h0IiwgImNyZWRpdHMiIG9yICJsaWNlbnNlIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbicpCiAJCXNlbGYud3JpdGUoc3lzLnBzMSkKIAkJc2VsZi5mbHVzaCgpCiAJCkBAIC0xNTYsOCArMTU2LDggQEAKIAlkZWYgbWFrZW5hbWVzcGFjZW1lbnUoc2VsZiwgKmFyZ3MpOgogCQlXLlNldEN1cnNvcignd2F0Y2gnKQogCQluYW1lc3BhY2VsaXN0ID0gc2VsZi5nZXRuYW1lc3BhY2VsaXN0KCkKLQkJc2VsZi5uYW1lc3BhY2VtZW51LnNldChbKCJDbGVhciB3aW5kb3ciLCBzZWxmLmNsZWFyYnVmZmVyKSwgKCJGb250IHNldHRpbmdzgyIsIHNlbGYuZG9mb250c2V0dGluZ3MpLCAKLQkJCQlbIk5hbWVzcGFjZSJdICsgbmFtZXNwYWNlbGlzdCwgKCJCcm93c2UgbmFtZXNwYWNlgyIsIHNlbGYuYnJvd3NlbmFtZXNwYWNlKV0pCisJCXNlbGYubmFtZXNwYWNlbWVudS5zZXQoWygiQ2xlYXIgd2luZG93Iiwgc2VsZi5jbGVhcmJ1ZmZlciksICgiRm9udCBzZXR0aW5nc1x4YzkiLCBzZWxmLmRvZm9udHNldHRpbmdzKSwgCisJCQkJWyJOYW1lc3BhY2UiXSArIG5hbWVzcGFjZWxpc3QsICgiQnJvd3NlIG5hbWVzcGFjZVx4YzkiLCBzZWxmLmJyb3dzZW5hbWVzcGFjZSldKQogCQljdXJyZW50bmFtZSA9IHNlbGYuY29uc29sZXRleHQuX25hbWVzcGFjZVsiX19uYW1lX18iXQogCQlmb3IgaSBpbiByYW5nZShsZW4obmFtZXNwYWNlbGlzdCkpOgogCQkJaWYgbmFtZXNwYWNlbGlzdFtpXVswXSA9PSBjdXJyZW50bmFtZToKQEAgLTI2NCw3ICsyNjQsNyBAQAogCQkJCXRhYmJhYmxlID0gMCkKIAkJc2VsZi53Lm91dHB1dHRleHQgPSBPdXRwdXRUZXh0V2lkZ2V0KCgtMSwgLTEsIC0xNCwgMSksIGluc2V0ID0gKDYsIDUpLCAKIAkJCQlmb250c2V0dGluZ3MgPSBzZWxmLmZvbnRzZXR0aW5ncywgdGFic2V0dGluZ3MgPSBzZWxmLnRhYnNldHRpbmdzLCByZWFkb25seSA9IDEpCi0JCW1lbnVpdGVtcyA9IFsoIkNsZWFyIHdpbmRvdyIsIHNlbGYuY2xlYXJidWZmZXIpLCAoIkZvbnQgc2V0dGluZ3ODIiwgc2VsZi5kb2ZvbnRzZXR0aW5ncyldCisJCW1lbnVpdGVtcyA9IFsoIkNsZWFyIHdpbmRvdyIsIHNlbGYuY2xlYXJidWZmZXIpLCAoIkZvbnQgc2V0dGluZ3NceGM5Iiwgc2VsZi5kb2ZvbnRzZXR0aW5ncyldCiAJCXNlbGYudy5wb3B1cG1lbnUgPSBXLlBvcHVwTWVudSgoLTE1LCAtMSwgMTYsIDE2KSwgbWVudWl0ZW1zKQogCQkKIAkJc2VsZi53Ll9iYXJ5ID0gVy5TY3JvbGxiYXIoKC0xNSwgMTQsIDE2LCAtMTQpLCBzZWxmLncub3V0cHV0dGV4dC52c2Nyb2xsLCBtYXggPSAzMjc2NykKZGlmZiAtLWdpdCBhL01hYy9Ub29scy9JREUvUHlEZWJ1Z2dlci5weSBiL01hYy9Ub29scy9JREUvUHlEZWJ1Z2dlci5weQppbmRleCA2MWNlMTdiLi5jMWY5YjQ5IDEwMDY0NAotLS0gYS9NYWMvVG9vbHMvSURFL1B5RGVidWdnZXIucHkKKysrIGIvTWFjL1Rvb2xzL0lERS9QeURlYnVnZ2VyLnB5CkBAIC03Miw3ICs3Miw3IEBACiAJCXNlbGYuYm90ZnJhbWUgPSBib3R0b21mcmFtZQogCQlpZiBydW5uaW5nOgogCQkJc2VsZi5zZXRfY29udGludWUoKQotCQkJc2VsZi5yZWFzb24gPSAnUnVubmluZ4MnCisJCQlzZWxmLnJlYXNvbiA9ICdSdW5uaW5nXHhjOScKIAkJCXNlbGYuc2V0c3RhdGUoJ3J1bm5pbmcnKQogCQllbHNlOgogCQkJc2VsZi5zZXRfc3RlcCgpCkBAIC0xODcsNyArMTg3LDcgQEAKIAlkZWYgbWFrZW9wdGlvbnNtZW51KHNlbGYpOgogCQlvcHRpb25zID0gWygnQ2xlYXIgYnJlYWtwb2ludHMnLCBzZWxmLncucGFuZXMuYm90dG9tLnNyYy5zb3VyY2UuY2xlYXJicmVha3BvaW50cyksIAogCQkJCSgnQ2xlYXIgYWxsIGJyZWFrcG9pbnRzJywgc2VsZi5jbGVhcl9hbGxfYnJlYWtzKSwKLQkJCQkoJ0VkaXQgYnJlYWtwb2ludHODJywgc2VsZi5lZGl0X2JyZWFrcyksICctJywKKwkJCQkoJ0VkaXQgYnJlYWtwb2ludHNceGM5Jywgc2VsZi5lZGl0X2JyZWFrcyksICctJywKIAkJCQkoc2VsZi50cmFjZW1hZ2ljIGFuZCAKIAkJCQkJJ0Rpc2FibGUgX19tYWdpY19fIHRyYWNpbmcnIG9yICdFbmFibGUgX19tYWdpY19fIHRyYWNpbmcnLCBzZWxmLnRvZ2dsZW1hZ2ljKV0KIAkJc2VsZi53LnBhbmVzLmJvdHRvbS5zcmMub3B0aW9uc21lbnUuc2V0KG9wdGlvbnMpCkBAIC0zMTgsNyArMzE4LDcgQEAKIAkKIAlkZWYgcnVubmluZyhzZWxmKToKIAkJVy5TZXRDdXJzb3IoJ3dhdGNoJykKLQkJc2VsZi5yZWFzb24gPSAnUnVubmluZ4MnCisJCXNlbGYucmVhc29uID0gJ1J1bm5pbmdceGM5JwogCQlzZWxmLnNldHN0YXRlKCdydW5uaW5nJykKIAkJI3NlbGYudy5wYW5lcy5ib3R0b20uc3JjLnNvdXJjZS5zZXQoJycpCiAJCSNzZWxmLncucGFuZXMuYnJvd3NlcnBhbmVzLnN0YWNrbGlzdC5zdGFjay5zZXQoW10pCkBAIC0zNTAsNyArMzUwLDcgQEAKIAkJCQkJCXRyeToKIAkJCQkJCQlmLCBmaWxlbmFtZSwgKHN1ZmYsIG1vZGUsIGR1bW15KSA9IGltcC5maW5kX21vZHVsZShtb2RuYW1lKQogCQkJCQkJZXhjZXB0IEltcG9ydEVycm9yOgotCQkJCQkJCXNlbGYudy5wYW5lcy5ib3R0b20uc3JjLnNvdXJjZS5zZXQoJ2NhbtV0IGZpbmQgZmlsZScpCisJCQkJCQkJc2VsZi53LnBhbmVzLmJvdHRvbS5zcmMuc291cmNlLnNldCgiY2FuJ3QgZmluZCBmaWxlIikKIAkJCQkJCWVsc2U6CiAJCQkJCQkJaWYgZjoKIAkJCQkJCQkJZi5jbG9zZSgpCkBAIC0zNjAsOSArMzYwLDkgQEAKIAkJCQkJCQkJZi5jbG9zZSgpCiAJCQkJCQkJCXNlbGYudy5wYW5lcy5ib3R0b20uc3JjLnNvdXJjZS5zZXQoZGF0YSwgZmlsZW5hbWUpCiAJCQkJCQkJZWxzZToKLQkJCQkJCQkJc2VsZi53LnBhbmVzLmJvdHRvbS5zcmMuc291cmNlLnNldCgnY2Fu1XQgZmluZCBmaWxlJykKKwkJCQkJCQkJc2VsZi53LnBhbmVzLmJvdHRvbS5zcmMuc291cmNlLnNldCgiY2FuJ3QgZmluZCBmaWxlIikKIAkJCQkJZWxzZToKLQkJCQkJCXNlbGYudy5wYW5lcy5ib3R0b20uc3JjLnNvdXJjZS5zZXQoJ2NhbtV0IGZpbmQgZmlsZScpCisJCQkJCQlzZWxmLncucGFuZXMuYm90dG9tLnNyYy5zb3VyY2Uuc2V0KCJjYW4ndCBmaW5kIGZpbGUiKQogCQkJCWVsc2U6CiAJCQkJCXNlbGYudy5wYW5lcy5ib3R0b20uc3JjLnNvdXJjZS5zZXQoZGF0YSwgZmlsZW5hbWUpCiAJCQlzZWxmLmZpbGUgPSBmaWxlbmFtZQpAQCAtNjgyLDcgKzY4Miw3IEBACiAJCXNlbGYudy5wYW5lcy5maWxlcyA9IFcuTGlzdChOb25lLCBjYWxsYmFjayA9IHNlbGYuZmlsZWhpdCkJCSMsIGZsYWdzID0gTGlzdHMubE9ubHlPbmUpCiAJCXNlbGYudy5wYW5lcy5nciA9IFcuR3JvdXAoTm9uZSkKIAkJc2VsZi53LnBhbmVzLmdyLmJyZWFrcyA9IFcuTGlzdCgoMCwgMCwgLTEzMCwgMCksIGNhbGxiYWNrID0gc2VsZi5saW5laGl0KQkjLCBmbGFncyA9IExpc3RzLmxPbmx5T25lKQotCQlzZWxmLncucGFuZXMuZ3Iub3BlbmJ1dHRvbiA9IFcuQnV0dG9uKCgtODAsIDQsIDAsIDE2KSwgJ1ZpZXeDJywgc2VsZi5vcGVuYnV0dG9uaGl0KQorCQlzZWxmLncucGFuZXMuZ3Iub3BlbmJ1dHRvbiA9IFcuQnV0dG9uKCgtODAsIDQsIDAsIDE2KSwgJ1ZpZXdceGM5Jywgc2VsZi5vcGVuYnV0dG9uaGl0KQogCQlzZWxmLncucGFuZXMuZ3IuZGVsZXRlYnV0dG9uID0gVy5CdXR0b24oKC04MCwgMjgsIDAsIDE2KSwgJ0RlbGV0ZScsIHNlbGYuZGVsZXRlYnV0dG9uaGl0KQogCQkKIAkJc2VsZi53LmJpbmQoJzxjbG9zZT4nLCBzZWxmLmNsb3NlKQpAQCAtODgwLDcgKzg4MCw3IEBACiAKIGRlZiBnZXRkZWJ1Z2dlcigpOgogCWlmIG5vdCBfX2RlYnVnX186Ci0JCXJhaXNlIFcuQWxlcnRFcnJvciwgIkNhbtV0IGRlYnVnIGluIJZPcHRpbWl6ZSBieXRlY29kZZQgbW9kZS5ccihzZWUglkRlZmF1bHQgc3RhcnR1cCBvcHRpb25zlCBpbiBFZGl0UHl0aG9uUHJlZmVyZW5jZXMpIgorCQlyYWlzZSBXLkFsZXJ0RXJyb3IsICJDYW4ndCBkZWJ1ZyBpbiBcIk9wdGltaXplIGJ5dGVjb2RlXCIgbW9kZS5ccihzZWUgXCJEZWZhdWx0IHN0YXJ0dXAgb3B0aW9uc1wiIGluIEVkaXRQeXRob25QcmVmZXJlbmNlcykiCiAJZ2xvYmFsIF9kZWJ1Z2dlcgogCWlmIF9kZWJ1Z2dlciBpcyBOb25lOgogCQlfZGVidWdnZXIgPSBEZWJ1Z2dlcigpCmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvSURFL1B5RG9jU2VhcmNoLnB5IGIvTWFjL1Rvb2xzL0lERS9QeURvY1NlYXJjaC5weQppbmRleCA1OTljM2UwLi40YjM1ZTQ2IDEwMDY0NAotLS0gYS9NYWMvVG9vbHMvSURFL1B5RG9jU2VhcmNoLnB5CisrKyBiL01hYy9Ub29scy9JREUvUHlEb2NTZWFyY2gucHkKQEAgLTEwMSw3ICsxMDEsNyBAQAogY2xhc3MgU3RhdHVzOgogCQogCWRlZiBfX2luaXRfXyhzZWxmKToKLQkJc2VsZi53ID0gVy5EaWFsb2coKDQ0MCwgNjQpLCAiU2VhcmNoaW5ngyIpCisJCXNlbGYudyA9IFcuRGlhbG9nKCg0NDAsIDY0KSwgIlNlYXJjaGluZ1x4YzkiKQogCQlzZWxmLncuc2VhcmNoaW5nID0gVy5UZXh0Qm94KCg0LCA0LCAtNCwgMTYpLCAiRGV2RGV2OlB5UHlEb2MgMS41LjE6ZXh0OnBhcnNlVHVwbGVBbmRLZXl3b3Jkcy5odG1sIikKIAkJc2VsZi53LmhpdHMgPSBXLlRleHRCb3goKDQsIDI0LCAtNCwgMTYpLCAiSGl0czogMCIpCiAJCXNlbGYudy5jYW5jZWx0aXAgPSBXLlRleHRCb3goKDQsIDQ0LCAtNCwgMTYpLCAiVHlwZSBjbWQtcGVyaW9kICguKSB0byBjYW5jZWwuIikKZGlmZiAtLWdpdCBhL01hYy9Ub29scy9JREUvUHlFZGl0LnB5IGIvTWFjL1Rvb2xzL0lERS9QeUVkaXQucHkKaW5kZXggZDk2ODExNC4uYTU4ZGUxYiAxMDA2NDQKLS0tIGEvTWFjL1Rvb2xzL0lERS9QeUVkaXQucHkKKysrIGIvTWFjL1Rvb2xzL0lERS9QeUVkaXQucHkKQEAgLTY3LDcgKzY3LDcgQEAKIAkJCWVsc2U6CiAJCQkJc291cmNlT1MgPSAnVU5JWCcKIAkJCQlzZWFyY2hTdHJpbmcgPSAnXG4nCi0JCQljaGFuZ2UgPSBFYXN5RGlhbG9ncy5Bc2tZZXNOb0NhbmNlbCgnliVzlCBjb250YWlucyAlcy1zdHlsZSBsaW5lIGZlZWRzLiAnCisJCQljaGFuZ2UgPSBFYXN5RGlhbG9ncy5Bc2tZZXNOb0NhbmNlbCgnIiVzIiBjb250YWlucyAlcy1zdHlsZSBsaW5lIGZlZWRzLiAnCiAJCQkJCSdDaGFuZ2UgdGhlbSB0byBNYWNPUyBjYXJyaWFnZSByZXR1cm5zPycgJSAoc2VsZi50aXRsZSwgc291cmNlT1MpLCAxKQogCQkJIyBidWc6IENhbmNlbCBpcyB0cmVhdGVkIGFzIE5vCiAJCQlpZiBjaGFuZ2UgPiAwOgpAQCAtMjI0LDE0ICsyMjQsMTQgQEAKIAkJc2VsZi5saW5lZmllbGQuYmluZCgiPGNsaWNrPiIsIHNlbGYuY2xpY2tsaW5lZmllbGQpCiAJCiAJZGVmIG1ha2VvcHRpb25zbWVudShzZWxmKToKLQkJbWVudWl0ZW1zID0gWygnRm9udCBzZXR0aW5nc4MnLCBzZWxmLmRvbWVudV9mb250c2V0dGluZ3MpLCAKLQkJCQkoIlNhdmUgb3B0aW9uc4MiLCBzZWxmLmRvbWVudV9vcHRpb25zKSwKKwkJbWVudWl0ZW1zID0gWygnRm9udCBzZXR0aW5nc1x4YzknLCBzZWxmLmRvbWVudV9mb250c2V0dGluZ3MpLCAKKwkJCQkoIlNhdmUgb3B0aW9uc1x4YzkiLCBzZWxmLmRvbWVudV9vcHRpb25zKSwKIAkJCQknLScsCiAJCQkJKCdcMCcgKyBjaHIoc2VsZi5ydW5fYXNfbWFpbikgKyAnUnVuIGFzIF9fbWFpbl9fJywgc2VsZi5kb21lbnVfdG9nZ2xlX3J1bl9hc19tYWluKSwgCiAJCQkJIygnXDAnICsgY2hyKHNlbGYucnVuX3dpdGhfaW50ZXJwcmV0ZXIpICsgJ1J1biB3aXRoIEludGVycHJldGVyJywgc2VsZi5kb21lbnVfdG9nZ2xlX3J1bl93aXRoX2ludGVycHJldGVyKSwgCiAJCQkJIyctJywKIAkJCQkoJ01vZHVsYXJpemUnLCBzZWxmLmRvbWVudV9tb2R1bGFyaXplKSwKLQkJCQkoJ0Jyb3dzZSBuYW1lc3BhY2WDJywgc2VsZi5kb21lbnVfYnJvd3NlbmFtZXNwYWNlKSwgCisJCQkJKCdCcm93c2UgbmFtZXNwYWNlXHhjOScsIHNlbGYuZG9tZW51X2Jyb3dzZW5hbWVzcGFjZSksIAogCQkJCSctJ10KIAkJaWYgc2VsZi5wcm9maWxpbmc6CiAJCQltZW51aXRlbXMgPSBtZW51aXRlbXMgKyBbKCdEaXNhYmxlIHByb2ZpbGVyJywgc2VsZi5kb21lbnVfdG9nZ2xlcHJvZmlsZXIpXQpAQCAtMjQwLDcgKzI0MCw3IEBACiAJCWlmIHNlbGYuZWRpdGdyb3VwLmVkaXRvci5fZGVidWdnZXI6CiAJCQltZW51aXRlbXMgPSBtZW51aXRlbXMgKyBbKCdEaXNhYmxlIGRlYnVnZ2VyJywgc2VsZi5kb21lbnVfdG9nZ2xlZGVidWdnZXIpLAogCQkJCSgnQ2xlYXIgYnJlYWtwb2ludHMnLCBzZWxmLmRvbWVudV9jbGVhcmJyZWFrcG9pbnRzKSwKLQkJCQkoJ0VkaXQgYnJlYWtwb2ludHODJywgc2VsZi5kb21lbnVfZWRpdGJyZWFrcG9pbnRzKV0KKwkJCQkoJ0VkaXQgYnJlYWtwb2ludHNceGM5Jywgc2VsZi5kb21lbnVfZWRpdGJyZWFrcG9pbnRzKV0KIAkJZWxzZToKIAkJCW1lbnVpdGVtcyA9IG1lbnVpdGVtcyArIFsoJ0VuYWJsZSBkZWJ1Z2dlcicsIHNlbGYuZG9tZW51X3RvZ2dsZWRlYnVnZ2VyKV0KIAkJc2VsZi5lZGl0Z3JvdXAub3B0aW9uc21lbnUuc2V0KG1lbnVpdGVtcykKQEAgLTI4NSw3ICsyODUsNyBAQAogCWRlZiBkb21lbnVfbW9kdWxhcml6ZShzZWxmLCAqYXJncyk6CiAJCW1vZG5hbWUgPSBfZmlsZW5hbWVfYXNfbW9kbmFtZShzZWxmLnRpdGxlKQogCQlpZiBub3QgbW9kbmFtZToKLQkJCXJhaXNlIFcuQWxlcnRFcnJvciwgJ0NhbtV0IG1vZHVsYXJpemUgliVzlCcgJSBzZWxmLnRpdGxlCisJCQlyYWlzZSBXLkFsZXJ0RXJyb3IsICJDYW4ndCBtb2R1bGFyaXplIFwiJXNcIiIgJSBzZWxmLnRpdGxlCiAJCXJ1bl9hc19tYWluID0gc2VsZi5ydW5fYXNfbWFpbgogCQlzZWxmLnJ1bl9hc19tYWluID0gMAogCQlzZWxmLnJ1bigpCkBAIC0zNjAsNyArMzYwLDcgQEAKIAkJCWltcG9ydCBFYXN5RGlhbG9ncwogCQkJaW1wb3J0IFFkCiAJCQlRZC5Jbml0Q3Vyc29yKCkgIyBYWFggc2hvdWxkIGJlIGRvbmUgYnkgZGlhbG9nCi0JCQlzYXZlID0gRWFzeURpYWxvZ3MuQXNrWWVzTm9DYW5jZWwoJ1NhdmUgd2luZG93IJYlc5QgYmVmb3JlIGNsb3Npbmc/JyAlIHNlbGYudGl0bGUsIDEpCisJCQlzYXZlID0gRWFzeURpYWxvZ3MuQXNrWWVzTm9DYW5jZWwoJ1NhdmUgd2luZG93ICIlcyIgYmVmb3JlIGNsb3Npbmc/JyAlIHNlbGYudGl0bGUsIDEpCiAJCQlpZiBzYXZlID4gMDoKIAkJCQlpZiBzZWxmLmRvbWVudV9zYXZlKCk6CiAJCQkJCXJldHVybiAxCkBAIC00MTYsMTEgKzQxNiw3IEBACiAJCQkJVy5nZXRhcHBsaWNhdGlvbigpLm1ha2VzY3JpcHRzbWVudSgpCiAJCiAJZGVmIGRvbWVudV9zYXZlX2FzX2FwcGxldChzZWxmLCAqYXJncyk6Ci0JCXRyeToKLQkJCWltcG9ydCBidWlsZHRvb2xzCi0JCWV4Y2VwdCBJbXBvcnRFcnJvcjoKLQkJCSMgb25seSBoYXZlIGJ1aWxkdG9vbHMgaW4gUHl0aG9uID49IDEuNS4yCi0JCQlyYWlzZSBXLkFsZXJ0RXJyb3IsICKWU2F2ZSBhcyBBcHBsZXSUIGlzIG9ubHkgc3VwcG9ydGVkIGluXHJQeXRob24gMS41LjIgYW5kIHVwLiIKKwkJaW1wb3J0IGJ1aWxkdG9vbHMKIAkJCiAJCWJ1aWxkdG9vbHMuREVCVUcgPSAwCSMgb3VjaC4KIAkJCkBAIC01MDQsNyArNTAwLDcgQEAKIAkJCWlmIHNlbGYuZWRpdGdyb3VwLmVkaXRvci5jaGFuZ2VkOgogCQkJCWltcG9ydCBFYXN5RGlhbG9ncwogCQkJCWltcG9ydCBRZDsgUWQuSW5pdEN1cnNvcigpCi0JCQkJc2F2ZSA9IEVhc3lEaWFsb2dzLkFza1llc05vQ2FuY2VsKCdTYXZlIJYlc5QgYmVmb3JlIHJ1bm5pbmc/JyAlIHNlbGYudGl0bGUsIDEpCisJCQkJc2F2ZSA9IEVhc3lEaWFsb2dzLkFza1llc05vQ2FuY2VsKCdTYXZlICIlcyIgYmVmb3JlIHJ1bm5pbmc/JyAlIHNlbGYudGl0bGUsIDEpCiAJCQkJaWYgc2F2ZSA+IDA6CiAJCQkJCWlmIHNlbGYuZG9tZW51X3NhdmUoKToKIAkJCQkJCXJldHVybgpAQCAtNTYwLDIzICs1NTYsMjMgQEAKIAkJCQkJY2xhc3NuYW1lID0gc3RyaW5nLnNwbGl0KHN0cmluZy5zdHJpcChsaW5lWzY6XSkpWzBdCiAJCQkJCWNsYXNzZW5kID0gaWRlbnRpZmllUkVfbWF0Y2goY2xhc3NuYW1lKQogCQkJCQlpZiBjbGFzc2VuZCA8IDE6Ci0JCQkJCQlyYWlzZSBXLkFsZXJ0RXJyb3IsICdDYW7VdCBmaW5kIGEgY2xhc3MuJworCQkJCQkJcmFpc2UgVy5BbGVydEVycm9yLCAiQ2FuJ3QgZmluZCBhIGNsYXNzLiIKIAkJCQkJY2xhc3NuYW1lID0gY2xhc3NuYW1lWzpjbGFzc2VuZF0KIAkJCQkJYnJlYWsKIAkJCQllbGlmIGxpbmUgYW5kIGxpbmVbMF0gbm90IGluICdcdCMnOgotCQkJCQlyYWlzZSBXLkFsZXJ0RXJyb3IsICdDYW7VdCBmaW5kIGEgY2xhc3MuJworCQkJCQlyYWlzZSBXLkFsZXJ0RXJyb3IsICJDYW4ndCBmaW5kIGEgY2xhc3MuIgogCQkJZWxzZToKLQkJCQlyYWlzZSBXLkFsZXJ0RXJyb3IsICdDYW7VdCBmaW5kIGEgY2xhc3MuJworCQkJCXJhaXNlIFcuQWxlcnRFcnJvciwgIkNhbid0IGZpbmQgYSBjbGFzcy4iCiAJCQlpZiBnbG9iYWxzLmhhc19rZXkoY2xhc3NuYW1lKToKIAkJCQlsb2NhbHMgPSBnbG9iYWxzW2NsYXNzbmFtZV0uX19kaWN0X18KIAkJCWVsc2U6Ci0JCQkJcmFpc2UgVy5BbGVydEVycm9yLCAnQ2Fu1XQgZmluZCBjbGFzcyCWJXOULicgJSBjbGFzc25hbWUKKwkJCQlyYWlzZSBXLkFsZXJ0RXJyb3IsICJDYW4ndCBmaW5kIGNsYXNzIFwiJXNcIi4iICUgY2xhc3NuYW1lCiAJCQkjIGRlZGVudCB0byB0b3AgbGV2ZWwKIAkJCWZvciBpIGluIHJhbmdlKGxlbihsaW5lcykpOgogCQkJCWxpbmVzW2ldID0gbGluZXNbaV1bMTpdCiAJCQlweXRleHQgPSBzdHJpbmcuam9pbihsaW5lcywgJ1xyJykKIAkJZWxpZiBpbmRlbnQgPiAwOgotCQkJcmFpc2UgVy5BbGVydEVycm9yLCAnQ2Fu1XQgcnVuIGluZGVudGVkIGNvZGUuJworCQkJcmFpc2UgVy5BbGVydEVycm9yLCAiQ2FuJ3QgcnVuIGluZGVudGVkIGNvZGUuIgogCQkKIAkJIyBhZGQgIm5ld2xpbmVzIiB0byBmb29sIGNvbXBpbGUvZXhlYzogCiAJCSMgbm93IGEgdHJhY2ViYWNrIHdpbGwgZ2l2ZSB0aGUgcmlnaHQgbGluZSBudW1iZXIKQEAgLTgzOSw3ICs4MzUsNyBAQAogCQlzZWxmLmJ1dHRvbnMgPSBbCSgiRmluZCIsCQkiY21kZiIsCSBzZWxmLmZpbmQpLCAKIAkJCQkJKCJSZXBsYWNlIiwJICAgICAiY21kciIsCSBzZWxmLnJlcGxhY2UpLCAKIAkJCQkJKCJSZXBsYWNlIGFsbCIsCSBOb25lLCAgIHNlbGYucmVwbGFjZWFsbCksIAotCQkJCQkoIkRvbtV0IGZpbmQiLCAgImNtZGQiLAkgc2VsZi5kb250KSwgCisJCQkJCSgiRG9uJ3QgZmluZCIsICAiY21kZCIsCSBzZWxmLmRvbnQpLCAKIAkJCQkJKCJDYW5jZWwiLAkgICAgICAiY21kLiIsCSBzZWxmLmNhbmNlbCkKIAkJCQldCiAJCWZvciBpIGluIHJhbmdlKGxlbihzZWxmLmJ1dHRvbnMpKToKQEAgLTg0OCw3ICs4NDQsNyBAQAogCQkJc2VsZi53W3RpdGxlXSA9IFcuQnV0dG9uKGJvdW5kcywgdGl0bGUsIGNhbGxiYWNrKQogCQkJaWYgc2hvcnRjdXQ6CiAJCQkJc2VsZi53LmJpbmQoc2hvcnRjdXQsIHNlbGYud1t0aXRsZV0ucHVzaCkKLQkJc2VsZi53LnNldGRlZmF1bHRidXR0b24oc2VsZi53WyJEb27VdCBmaW5kIl0pCisJCXNlbGYudy5zZXRkZWZhdWx0YnV0dG9uKHNlbGYud1siRG9uJ3QgZmluZCJdKQogCQlzZWxmLncuZmluZC5lZGl0LmJpbmQoIjxrZXk+Iiwgc2VsZi5rZXkpCiAJCXNlbGYudy5iaW5kKCI8YWN0aXZhdGU+Iiwgc2VsZi5hY3RpdmF0ZSkKIAkJc2VsZi53LmJpbmQoIjxjbG9zZT4iLCBzZWxmLmNsb3NlKQpAQCAtODgxLDExICs4NzcsMTEgQEAKIAkJCWVsc2U6CiAJCQkJZm9yIHRpdGxlLCBjbWQsIGNhbGwgaW4gc2VsZi5idXR0b25zWzotMl06CiAJCQkJCXNlbGYud1t0aXRsZV0uZW5hYmxlKDApCi0JCQkJc2VsZi53LnNldGRlZmF1bHRidXR0b24oc2VsZi53WyJEb27VdCBmaW5kIl0pCisJCQkJc2VsZi53LnNldGRlZmF1bHRidXR0b24oc2VsZi53WyJEb24ndCBmaW5kIl0pCiAJCWVsc2U6CiAJCQlmb3IgdGl0bGUsIGNtZCwgY2FsbCBpbiBzZWxmLmJ1dHRvbnNbOi0yXToKIAkJCQlzZWxmLndbdGl0bGVdLmVuYWJsZSgwKQotCQkJc2VsZi53LnNldGRlZmF1bHRidXR0b24oc2VsZi53WyJEb27VdCBmaW5kIl0pCisJCQlzZWxmLncuc2V0ZGVmYXVsdGJ1dHRvbihzZWxmLndbIkRvbid0IGZpbmQiXSkKIAkKIAlkZWYgZmluZChzZWxmKToKIAkJc2VsZi5nZXRwYXJtc2Zyb213aW5kb3coKQpAQCAtMTIwNCw3ICsxMjAwLDcgQEAKIAkJc2VsZi50ZW1wbGF0ZSA9ICIlcywgJWQgcG9pbnQiCiAJCXNlbGYuZm9udHNldHRpbmdzLCBzZWxmLnRhYnNldHRpbmdzLCBzZWxmLndpbmRvd3NpemUgPSBnZXRlZGl0b3JwcmVmcygpCiAJCXNlbGYudyA9IFcuRGlhbG9nKCgzMjgsIDEyMCksICJFZGl0b3IgZGVmYXVsdCBzZXR0aW5ncyIpCi0JCXNlbGYudy5zZXRmb250YnV0dG9uID0gVy5CdXR0b24oKDgsIDgsIDgwLCAxNiksICJTZXQgZm9udIMiLCBzZWxmLmRvZm9udCkKKwkJc2VsZi53LnNldGZvbnRidXR0b24gPSBXLkJ1dHRvbigoOCwgOCwgODAsIDE2KSwgIlNldCBmb250XHhjOSIsIHNlbGYuZG9mb250KQogCQlzZWxmLncuZm9udHRleHQgPSBXLlRleHRCb3goKDk4LCAxMCwgLTgsIDE0KSwgc2VsZi50ZW1wbGF0ZSAlIChzZWxmLmZvbnRzZXR0aW5nc1swXSwgc2VsZi5mb250c2V0dGluZ3NbMl0pKQogCQkKIAkJc2VsZi53LnBpY2tzaXplYnV0dG9uID0gVy5CdXR0b24oKDgsIDUwLCA4MCwgMTYpLCAiRnJvbnQgd2luZG93Iiwgc2VsZi5waWNrc2l6ZSkKZGlmZiAtLWdpdCBhL01hYy9Ub29scy9JREUvUHl0aG9uSURFLnB5IGIvTWFjL1Rvb2xzL0lERS9QeXRob25JREUucHkKaW5kZXggYjgwZmQ1Zi4uOWMwOTAyZSAxMDA2NDQKLS0tIGEvTWFjL1Rvb2xzL0lERS9QeXRob25JREUucHkKKysrIGIvTWFjL1Rvb2xzL0lERS9QeXRob25JREUucHkKQEAgLTEsOSArMSw5IEBACi0jIGNvcHlyaWdodCAxOTk2LTE5OTkgSnVzdCB2YW4gUm9zc3VtLCBMZXR0ZXJyb3IuIGp1c3RAbGV0dGVycm9yLmNvbQorIyBjb3B5cmlnaHQgMTk5Ni0yMDAxIEp1c3QgdmFuIFJvc3N1bSwgTGV0dGVycm9yLiBqdXN0QGxldHRlcnJvci5jb20KIAogIyBrZWVwIHRoaXMgKF9fbWFpbl9fKSBhcyBjbGVhbiBhcyBwb3NzaWJsZSwgc2luY2Ugd2UgYXJlIHVzaW5nIAogIyBpdCBsaWtlIHRoZSAibm9ybWFsIiBpbnRlcnByZXRlci4KIAotX192ZXJzaW9uX18gPSAnMS4wJworX192ZXJzaW9uX18gPSAnMS4wLjEnCiAKIAogZGVmIGluaXQoKToKZGlmZiAtLWdpdCBhL01hYy9Ub29scy9JREUvUHl0aG9uSURFLnJzcmMgYi9NYWMvVG9vbHMvSURFL1B5dGhvbklERS5yc3JjCmluZGV4IDFkNmNhMmMuLjcwZjBiMmIgMTAwNjQ0Ci0tLSBhL01hYy9Ub29scy9JREUvUHl0aG9uSURFLnJzcmMKKysrIGIvTWFjL1Rvb2xzL0lERS9QeXRob25JREUucnNyYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvSURFL1B5dGhvbklERU1haW4ucHkgYi9NYWMvVG9vbHMvSURFL1B5dGhvbklERU1haW4ucHkKaW5kZXggZDU2NzdhNy4uNTU0ODllMiAxMDA2NDQKLS0tIGEvTWFjL1Rvb2xzL0lERS9QeXRob25JREVNYWluLnB5CisrKyBiL01hYy9Ub29scy9JREUvUHl0aG9uSURFTWFpbi5weQpAQCAtNTAsMTMgKzUwLDEzIEBACiAJZGVmIG1ha2V1c2VybWVudXMoc2VsZik6CiAJCW0gPSBXYXBwbGljYXRpb24uTWVudShzZWxmLm1lbnViYXIsICJGaWxlIikKIAkJbmV3aXRlbSA9IEZyYW1lV29yay5NZW51SXRlbShtLCAiTmV3IiwgIk4iLCAnbmV3JykKLQkJb3Blbml0ZW0gPSBGcmFtZVdvcmsuTWVudUl0ZW0obSwgIk9wZW6DIiwgIk8iLCAnb3BlbicpCisJCW9wZW5pdGVtID0gRnJhbWVXb3JrLk1lbnVJdGVtKG0sICJPcGVuXHhjOSIsICJPIiwgJ29wZW4nKQogCQlGcmFtZVdvcmsuU2VwYXJhdG9yKG0pCiAJCWNsb3NlaXRlbSA9IEZyYW1lV29yay5NZW51SXRlbShtLCAiQ2xvc2UiLCAiVyIsICdjbG9zZScpCiAJCXNhdmVpdGVtID0gRnJhbWVXb3JrLk1lbnVJdGVtKG0sICJTYXZlIiwgIlMiLCAnc2F2ZScpCi0JCXNhdmVhc2l0ZW0gPSBGcmFtZVdvcmsuTWVudUl0ZW0obSwgIlNhdmUgYXODIiwgTm9uZSwgJ3NhdmVfYXMnKQorCQlzYXZlYXNpdGVtID0gRnJhbWVXb3JrLk1lbnVJdGVtKG0sICJTYXZlIGFzXHhjOSIsIE5vbmUsICdzYXZlX2FzJykKIAkJRnJhbWVXb3JrLlNlcGFyYXRvcihtKQotCQlzYXZlYXNhcHBsZXRpdGVtID0gRnJhbWVXb3JrLk1lbnVJdGVtKG0sICJTYXZlIGFzIEFwcGxldIMiLCBOb25lLCAnc2F2ZV9hc19hcHBsZXQnKQorCQlzYXZlYXNhcHBsZXRpdGVtID0gRnJhbWVXb3JrLk1lbnVJdGVtKG0sICJTYXZlIGFzIEFwcGxldFx4YzkiLCBOb25lLCAnc2F2ZV9hc19hcHBsZXQnKQogCQlGcmFtZVdvcmsuU2VwYXJhdG9yKG0pCiAJCXF1aXRpdGVtID0gRnJhbWVXb3JrLk1lbnVJdGVtKG0sICJRdWl0IiwgIlEiLCAncXVpdCcpCiAJCQpAQCAtNzEsNyArNzEsNyBAQAogCQlzZWxhbGxpdGVtID0gRnJhbWVXb3JrLk1lbnVJdGVtKG0sICJTZWxlY3QgYWxsIiwgIkEiLCAic2VsZWN0YWxsIikKIAkJc2VsbGluZWl0ZW0gPSBGcmFtZVdvcmsuTWVudUl0ZW0obSwgIlNlbGVjdCBsaW5lIiwgIkwiLCAic2VsZWN0bGluZSIpCiAJCUZyYW1lV29yay5TZXBhcmF0b3IobSkKLQkJZmluZGl0ZW0gPSBGcmFtZVdvcmsuTWVudUl0ZW0obSwgIkZpbmSDIiwgIkYiLCAiZmluZCIpCisJCWZpbmRpdGVtID0gRnJhbWVXb3JrLk1lbnVJdGVtKG0sICJGaW5kXHhjOSIsICJGIiwgImZpbmQiKQogCQlmaW5kYWdhaW5pdGVtID0gRnJhbWVXb3JrLk1lbnVJdGVtKG0sICJGaW5kIGFnYWluIiwgJ0cnLCAiZmluZG5leHQiKQogCQllbnRlcnNlbGl0ZW0gPSBGcmFtZVdvcmsuTWVudUl0ZW0obSwgIkVudGVyIHNlYXJjaCBzdHJpbmciLCAiRSIsICJlbnRlcnNlYXJjaHN0cmluZyIpCiAJCXJlcGxhY2VpdGVtID0gRnJhbWVXb3JrLk1lbnVJdGVtKG0sICJSZXBsYWNlIiwgTm9uZSwgInJlcGxhY2UiKQpAQCAtODQsMTIgKzg0LDEyIEBACiAJCXJ1bml0ZW0gPSBGcmFtZVdvcmsuTWVudUl0ZW0obSwgIlJ1biB3aW5kb3ciLCAiUiIsICdydW4nKQogCQlydW5zZWxpdGVtID0gRnJhbWVXb3JrLk1lbnVJdGVtKG0sICJSdW4gc2VsZWN0aW9uIiwgTm9uZSwgJ3J1bnNlbGVjdGlvbicpCiAJCUZyYW1lV29yay5TZXBhcmF0b3IobSkKLQkJbW9kaXRlbSA9IEZyYW1lV29yay5NZW51SXRlbShtLCAiTW9kdWxlIGJyb3dzZXKDIiwgIk0iLCBzZWxmLmRvbWVudV9tb2R1bGVicm93c2VyKQorCQltb2RpdGVtID0gRnJhbWVXb3JrLk1lbnVJdGVtKG0sICJNb2R1bGUgYnJvd3Nlclx4YzkiLCAiTSIsIHNlbGYuZG9tZW51X21vZHVsZWJyb3dzZXIpCiAJCUZyYW1lV29yay5TZXBhcmF0b3IobSkKIAkJbW0gPSBGcmFtZVdvcmsuU3ViTWVudShtLCAiUHJlZmVyZW5jZXMiKQotCQlGcmFtZVdvcmsuTWVudUl0ZW0obW0sICJTZXQgU2NyaXB0cyBmb2xkZXKDIiwgTm9uZSwgc2VsZi5kb19zZXRzY3JpcHRzZm9sZGVyKQotCQlGcmFtZVdvcmsuTWVudUl0ZW0obW0sICJFZGl0b3IgZGVmYXVsdCBzZXR0aW5nc4MiLCBOb25lLCBzZWxmLmRvX2VkaXRvcnByZWZzKQotCQlGcmFtZVdvcmsuTWVudUl0ZW0obW0sICJTZXQgZGVmYXVsdCB3aW5kb3cgZm9udIMiLCBOb25lLCBzZWxmLmRvX3NldHdpbmRvd2ZvbnQpCisJCUZyYW1lV29yay5NZW51SXRlbShtbSwgIlNldCBTY3JpcHRzIGZvbGRlclx4YzkiLCBOb25lLCBzZWxmLmRvX3NldHNjcmlwdHNmb2xkZXIpCisJCUZyYW1lV29yay5NZW51SXRlbShtbSwgIkVkaXRvciBkZWZhdWx0IHNldHRpbmdzXHhjOSIsIE5vbmUsIHNlbGYuZG9fZWRpdG9ycHJlZnMpCisJCUZyYW1lV29yay5NZW51SXRlbShtbSwgIlNldCBkZWZhdWx0IHdpbmRvdyBmb250XHhjOSIsIE5vbmUsIHNlbGYuZG9fc2V0d2luZG93Zm9udCkKIAkJCiAJCXNlbGYub3BlbndpbmRvd3NtZW51ID0gV2FwcGxpY2F0aW9uLk1lbnUoc2VsZi5tZW51YmFyLCAnV2luZG93cycpCiAJCXNlbGYubWFrZW9wZW53aW5kb3dzbWVudSgpCkBAIC0xMTAsNyArMTEwLDcgQEAKIAkJCQlwYXRoID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCAiU2NyaXB0cyIpCiAJCQkJaWYgbm90IG9zLnBhdGguZXhpc3RzKHBhdGgpOgogCQkJCQlvcy5ta2RpcihwYXRoKQotCQkJCQlmID0gb3Blbihvcy5wYXRoLmpvaW4ocGF0aCwgIlBsYWNlIHlvdXIgc2NyaXB0cyBoZXJlgyIpLCAidyIpCisJCQkJCWYgPSBvcGVuKG9zLnBhdGguam9pbihwYXRoLCAiUGxhY2UgeW91ciBzY3JpcHRzIGhlcmVceGM5IiksICJ3IikKIAkJCQkJZi5jbG9zZSgpCiAJCQlmc3MgPSBtYWNmcy5GU1NwZWMocGF0aCkKIAkJCXNlbGYuc2NyaXB0c2ZvbGRlciA9IGZzcy5OZXdBbGlhcygpCkBAIC0xNTYsMTAgKzE1NiwxMCBAQAogCQlpZiBmdHlwZSA9PSAnVEVYVCc6CiAJCQlzZWxmLm9wZW5zY3JpcHQocGF0aCkKIAkJZWxzZToKLQkJCVcuTWVzc2FnZSgiQ2Fu1XQgb3BlbiBmaWxlIG9mIHR5cGUgJyVzJy4iICUgZnR5cGUpCisJCQlXLk1lc3NhZ2UoIkNhbid0IG9wZW4gZmlsZSBvZiB0eXBlICclcycuIiAlIGZ0eXBlKQogCQogCWRlZiBnZXRhYm91dHRleHQoc2VsZik6Ci0JCXJldHVybiAiQWJvdXQgUHl0aG9uIElERYMiCisJCXJldHVybiAiQWJvdXQgUHl0aG9uIElERVx4YzkiCiAJCiAJZGVmIGRvX2Fib3V0KHNlbGYsIGlkLCBpdGVtLCB3aW5kb3csIGV2ZW50KToKIAkJU3BsYXNoLmFib3V0KCkKZGlmZiAtLWdpdCBhL01hYy9Ub29scy9JREUvU3BsYXNoLnB5IGIvTWFjL1Rvb2xzL0lERS9TcGxhc2gucHkKaW5kZXggMDdhNTFlNC4uNjBjZDdjNiAxMDA2NDQKLS0tIGEvTWFjL1Rvb2xzL0lERS9TcGxhc2gucHkKKysrIGIvTWFjL1Rvb2xzL0lERS9TcGxhc2gucHkKQEAgLTI0LDYgKzI0LDkgQEAKIAogX3Byb2dyZXNzID0gMAogCitfYWJvdXRfd2lkdGggPSA0NDAKK19hYm91dF9oZWlnaHQgPSAzNDAKKwogZGVmIGltcG9ydGluZyhtb2R1bGUpOgogCWdsb2JhbCBfcHJvZ3Jlc3MKIAlRZC5TZXRQb3J0KHNwbGFzaCkKQEAgLTMyLDE3ICszNSwxOSBAQAogCQlmb250SUQgPSBnZW5ldmEKIAlRZC5UZXh0Rm9udChmb250SUQpCiAJUWQuVGV4dFNpemUoOSkKLQlyZWN0ID0gKDM1LCAyNjUsIDM2NSwgMjgxKQorCWxhYmVscmVjdCA9ICgzNSwgX2Fib3V0X2hlaWdodCAtIDM1LCBfYWJvdXRfd2lkdGggLSAzNSwgX2Fib3V0X2hlaWdodCAtIDE5KQorCWZyYW1lcmVjdCA9ICgzNSwgX2Fib3V0X2hlaWdodCAtIDE5LCBfYWJvdXRfd2lkdGggLSAzNSwgX2Fib3V0X2hlaWdodCAtIDExKQorCWwsIHQsIHIsIGIgPSBwcm9ncmVjdCA9IFFkLkluc2V0UmVjdChmcmFtZXJlY3QsIDEsIDEpCiAJaWYgbW9kdWxlOgotCQlURS5URVRleHRCb3goJ0ltcG9ydGluZzogJyArIG1vZHVsZSwgcmVjdCwgMCkKKwkJVEUuVEVUZXh0Qm94KCdJbXBvcnRpbmc6ICcgKyBtb2R1bGUsIGxhYmVscmVjdCwgMCkKIAkJaWYgbm90IF9wcm9ncmVzczoKLQkJCVFkLkZyYW1lUmVjdCgoMzUsIDI4MSwgMzY1LCAyODkpKQotCQlwb3MgPSBtaW4oMzYgKyAzMzAgKiBfcHJvZ3Jlc3MgLyA0NCwgMzY0KQotCQlRZC5QYWludFJlY3QoKDM2LCAyODIsIHBvcywgMjg4KSkKKwkJCVFkLkZyYW1lUmVjdChmcmFtZXJlY3QpCisJCXBvcyA9IG1pbihyLCBsICsgKChyIC0gbCkgKiBfcHJvZ3Jlc3MpIC8gNDQpCisJCVFkLlBhaW50UmVjdCgobCwgdCwgcG9zLCBiKSkKIAkJX3Byb2dyZXNzID0gX3Byb2dyZXNzICsgMQogCWVsc2U6Ci0JCVFkLkVyYXNlUmVjdChyZWN0KQotCQlRZC5QYWludFJlY3QoKDM2LCAyODIsIHBvcywgMjg4KSkKKwkJUWQuRXJhc2VSZWN0KGxhYmVscmVjdCkKKwkJUWQuUGFpbnRSZWN0KChsLCB0LCBwb3MsIGIpKQogCVFkLlFERmx1c2hQb3J0QnVmZmVyKHNwbGFzaC5HZXREaWFsb2dXaW5kb3coKS5HZXRXaW5kb3dQb3J0KCksIE5vbmUpCiAKIGRlZiBteV9faW1wb3J0X18obmFtZSwgZ2xvYmFscz1Ob25lLCBsb2NhbHM9Tm9uZSwgZnJvbWxpc3Q9Tm9uZSk6CkBAIC03MSwyMCArNzYsMjAgQEAKIAogX2tlZXBzcGxhc2hzY3JlZW5vcGVuID0gMAogCi1hYm91dHRleHQxID0gIiIiVGhlIFB5dGhvbiBJbnRlZ3JhdGVkIERldmVsb3BtZW50IEVudmlyb25tZW50IGZvciB0aGUgTWFjaW50b3NojgorYWJvdXR0ZXh0MSA9ICIiIlRoZSBQeXRob24gSW50ZWdyYXRlZCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCBmb3IgdGhlIE1hY2ludG9zaFx4YWEKIFZlcnNpb246ICVzCi1Db3B5cmlnaHQgMTk5Ny0yMDAwIEp1c3QgdmFuIFJvc3N1bSwgTGV0dGVycm9yLiA8anVzdEBsZXR0ZXJyb3IuY29tPgorQ29weXJpZ2h0IDE5OTctMjAwMSBKdXN0IHZhbiBSb3NzdW0sIExldHRlcnJvci4gPGp1c3RAbGV0dGVycm9yLmNvbT4KIFB5dGhvbiAlcwogJXMKIFNlZTogPGh0dHA6Ly93d3cucHl0aG9uLm9yZy8+IGZvciBpbmZvcm1hdGlvbiBhbmQgZG9jdW1lbnRhdGlvbi4iIiIKIAotZmxhdXdla3VsID0gWwknR29vZGRheSwgQnJ1Y2UuJywgCi0JCQknV2hhdNVzIG5ldz8nLCAKLQkJCSdOdWRnZSwgbnVkZ2UsIHNheSBubyBtb3JlIScsIAotCQkJJ05vLCBubyBzaXIsIGl01XMgbm90IGRlYWQuIEl01XMgcmVzdGluZy4nLAotCQkJJ0FsYmF0cm9zIScsCi0JCQknSXTVcyAuIC4gLicsCi0JCQknSXMgeW91ciBuYW1lIG5vdCBCcnVjZSwgdGhlbj8nLAorZmxhdXdla3VsID0gWwkiR29vZGRheSwgQnJ1Y2UuIiwgCisJCQkiV2hhdCdzIG5ldz8iLAorCQkJIk51ZGdlLCBudWRnZSwgc2F5IG5vIG1vcmUhIiwgCisJCQkiTm8sIG5vIHNpciwgaXQncyBub3QgZGVhZC4gSXQncyByZXN0aW5nLiIsCisJCQkiQWxiYXRyb3MhIiwKKwkJCSJJdCdzIC4gLiAuIiwKKwkJCSJJcyB5b3VyIG5hbWUgbm90IEJydWNlLCB0aGVuPyIsCiAJCQkiIiJCdXQgTXIgRi5HLiBTdXBlcm1hbiBoYXMgYSBzZWNyZXQgaWRlbnRpdHkgLiAuIC4gCiB3aGVuIHRyb3VibGUgc3RyaWtlcyBhdCBhbnkgdGltZSAuIC4gLiAKIGF0IGFueSBwbGFjZSAuIC4gLiBoZSBpcyByZWFkeSB0byBiZWNvbWUgLiAuIC4gCkBAIC0xMTEsNyArMTE2LDcgQEAKIAkJZm9udElEID0gZ2VuZXZhCiAJUWQuVGV4dEZvbnQoZm9udElEKQogCVFkLlRleHRTaXplKDkpCi0JcmVjdCA9ICgxMCwgMTE1LCAzOTAsIDI5MCkKKwlyZWN0ID0gKDEwLCAxMTUsIF9hYm91dF93aWR0aCAtIDEwLCBfYWJvdXRfaGVpZ2h0IC0gMzApCiAJaWYgbm90IHdoYXQ6CiAJCWltcG9ydCBfX21haW5fXwogCQlhYm91dHR4dCA9IG5sMnJldHVybihhYm91dHRleHQxICUgKApAQCAtMTM0LDYgKzEzOSw3IEBACiAJUWQuSW5pdEN1cnNvcigpCiAJdGltZSA9IEV2dC5UaWNrQ291bnQoKQogCXdoYXR0ZXh0ID0gMAorCWRyYXd0ZXh0KHdoYXR0ZXh0KQogCXdoaWxlIF9rZWVwc3BsYXNoc2NyZWVub3BlbjoKIAkJb2ssIGV2ZW50ID0gRXZ0LkV2ZW50QXZhaWwoRXZlbnRzLmhpZ2hMZXZlbEV2ZW50TWFzaykKIAkJaWYgb2s6CkBAIC0xNTQsNyArMTYwLDcgQEAKIAkJCWRyYXd0ZXh0KHdoYXR0ZXh0KQogCQkJdGltZSA9IEV2dC5UaWNrQ291bnQoKQogCWRlbCBzcGxhc2gKLQkjUmVzLkNsb3NlUmVzRmlsZShzcGxhc2hyZXNmaWxlKQorCiAKIGRlZiBhYm91dCgpOgogCWdsb2JhbCBzcGxhc2gsIHNwbGFzaHJlc2ZpbGUsIF9rZWVwc3BsYXNoc2NyZWVub3BlbgpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0lERS9XYXBwbGljYXRpb24ucHkgYi9NYWMvVG9vbHMvSURFL1dhcHBsaWNhdGlvbi5weQppbmRleCA1NDBmY2EwLi43YTliNzRhIDEwMDY0NAotLS0gYS9NYWMvVG9vbHMvSURFL1dhcHBsaWNhdGlvbi5weQorKysgYi9NYWMvVG9vbHMvSURFL1dhcHBsaWNhdGlvbi5weQpAQCAtMzQ0LDE4ICszNDQsMTggQEAKIAkJCQkjIFhYWCBhbmQgdGhhdCdzIHRoZSBsYXN0IHRoaW5nIHdlIHdhbnQgaGVyZS4KIAkJCQlmLCBmaWxlbmFtZSwgKHN1ZmYsIG1vZGUsIGR1bW15KSA9IGltcC5maW5kX21vZHVsZShtb2RuYW1lKQogCQkJZXhjZXB0IEltcG9ydEVycm9yOgotCQkJCXJhaXNlIFcuQWxlcnRFcnJvciwgIkNhbtV0IGZpbmQgZmlsZSBmb3IgliVzlCIgJSBtb2RuYW1lCisJCQkJcmFpc2UgVy5BbGVydEVycm9yLCAiQ2FuJ3QgZmluZCBmaWxlIGZvciBcIiVzXCIiICUgbW9kbmFtZQogCQkJZWxzZToKIAkJCQlpZiBub3QgZjoKLQkJCQkJcmFpc2UgVy5BbGVydEVycm9yLCAiQ2Fu1XQgZmluZCBmaWxlIGZvciCWJXOUIiAlIG1vZG5hbWUKKwkJCQkJcmFpc2UgVy5BbGVydEVycm9yLCAiQ2FuJ3QgZmluZCBmaWxlIGZvciBcIiVzXCIiICUgbW9kbmFtZQogCQkJCWYuY2xvc2UoKQogCQkJaWYgc3VmZiA9PSAnLnB5JzoKIAkJCQlzZWxmLm9wZW5zY3JpcHQoZmlsZW5hbWUsIGxpbmVubywgY2hhcm9mZnNldCkKIAkJCQlyZXR1cm4KIAkJCWVsc2U6Ci0JCQkJcmFpc2UgVy5BbGVydEVycm9yLCAiQ2Fu1XQgZmluZCBmaWxlIGZvciCWJXOUIiAlIG1vZG5hbWUKKwkJCQlyYWlzZSBXLkFsZXJ0RXJyb3IsICJDYW4ndCBmaW5kIGZpbGUgZm9yIFwiJXNcIiIgJSBtb2RuYW1lCiAJCWVsc2U6Ci0JCQlyYWlzZSBXLkFsZXJ0RXJyb3IsICJDYW7VdCBmaW5kIGZpbGUglSVz1SIgJSBmaWxlbmFtZQorCQkJcmFpc2UgVy5BbGVydEVycm9yLCAiQ2FuJ3QgZmluZCBmaWxlIFwiJXNcIiIgJSBmaWxlbmFtZQogCQlpZiBsaW5lbm8gaXMgbm90IE5vbmU6CiAJCQllZGl0b3Iuc2VsZWN0bGluZShsaW5lbm8sIGNoYXJvZmZzZXQpCiAJCXJldHVybiBlZGl0b3IKZGlmZiAtLWdpdCBhL01hYy9Ub29scy9JREUvV3RleHQucHkgYi9NYWMvVG9vbHMvSURFL1d0ZXh0LnB5CmluZGV4IGI4NzAwOGIuLjE1MTg2ODMgMTAwNjQ0Ci0tLSBhL01hYy9Ub29scy9JREUvV3RleHQucHkKKysrIGIvTWFjL1Rvb2xzL0lERS9XdGV4dC5weQpAQCAtODcxLDcgKzg3MSw3IEBACiAJCQlpZiBvbm9mZjoKIAkJCQlpZiBub3QgX19kZWJ1Z19fOgogCQkJCQlpbXBvcnQgVwotCQkJCQlyYWlzZSBXLkFsZXJ0RXJyb3IsICJDYW7VdCBkZWJ1ZyBpbiCWT3B0aW1pemUgYnl0ZWNvZGWUIG1vZGUuXHIoc2VlIJZEZWZhdWx0IHN0YXJ0dXAgb3B0aW9uc5QgaW4gRWRpdFB5dGhvblByZWZlcmVuY2VzKSIKKwkJCQkJcmFpc2UgVy5BbGVydEVycm9yLCAiQ2FuJ3QgZGVidWcgaW4gXCJPcHRpbWl6ZSBieXRlY29kZVwiIG1vZGUuXHIoc2VlIFwiRGVmYXVsdCBzdGFydHVwIG9wdGlvbnNcIiBpbiBFZGl0UHl0aG9uUHJlZmVyZW5jZXMpIgogCQkJCWltcG9ydCBQeURlYnVnZ2VyCiAJCQkJc2VsZi5fZGVidWdnZXIgPSBQeURlYnVnZ2VyLmdldGRlYnVnZ2VyKCkKIAkJCQlzZWxmLl9kZWJ1Z2dlci5yZWdpc3Rlcl9lZGl0b3Ioc2VsZiwgc2VsZi5maWxlKQpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0lERS9XdHJhY2ViYWNrLnB5IGIvTWFjL1Rvb2xzL0lERS9XdHJhY2ViYWNrLnB5CmluZGV4IDEwODk0YTguLjI2MzdjYzYgMTAwNjQ0Ci0tLSBhL01hYy9Ub29scy9JREUvV3RyYWNlYmFjay5weQorKysgYi9NYWMvVG9vbHMvSURFL1d0cmFjZWJhY2sucHkKQEAgLTU3LDcgKzU3LDcgQEAKIAkJCWZpbGVuYW1lID0gb3MucGF0aC5zcGxpdChmaWxlbmFtZSlbMV0KIAkJaWYgbGluZW5vOgogCQkJY2hhcm5vID0gY2hhcm5vIC0gMQotCQkJdGV4dCA9IHN0cih2YWx1ZSkgKyAnXHJGaWxlOiAiJyArIHN0cihmaWxlbmFtZSkgKyAnIiwgbGluZSAnICsgc3RyKGxpbmVubykgKyAnXHJccicgKyBsaW5lWzpjaGFybm9dICsgIoIiICsgbGluZVtjaGFybm86LTFdCisJCQl0ZXh0ID0gc3RyKHZhbHVlKSArICdcckZpbGU6ICInICsgc3RyKGZpbGVuYW1lKSArICciLCBsaW5lICcgKyBzdHIobGluZW5vKSArICdcclxyJyArIGxpbmVbOmNoYXJub10gKyAiXHhhNSIgKyBsaW5lW2NoYXJubzotMV0KIAkJZWxzZToKIAkJCXRleHQgPSBzdHIodmFsdWUpICsgJ1xyRmlsZTogIicgKyBzdHIoZmlsZW5hbWUpICsgJyInCiAJCXNlbGYuc3ludGF4ZGlhbG9nID0gVy5Nb2RhbERpYWxvZygoMzYwLCAxMjApLCAiU3ludGF4IEVycm9yIikKQEAgLTEyMywxMCArMTIzLDEwIEBACiAJCXNlbGYudy5lZGl0YnV0dG9uID0gVy5CdXR0b24oKDEwLCAtMzAsIDYwLCAxNiksICJFZGl0Iiwgc2VsZi5lZGl0KQogCQlzZWxmLncuZWRpdGJ1dHRvbi5lbmFibGUoMCkKIAkJCi0JCXNlbGYudy5icm93c2Vsb2NhbHNidXR0b24gPSBXLkJ1dHRvbigoODAsIC0zMCwgMTAwLCAxNiksICJCcm93c2UgbG9jYWxzgyIsIHNlbGYuYnJvd3NlbG9jYWxzKQorCQlzZWxmLncuYnJvd3NlbG9jYWxzYnV0dG9uID0gVy5CdXR0b24oKDgwLCAtMzAsIDEwMCwgMTYpLCAiQnJvd3NlIGxvY2Fsc1x4YzkiLCBzZWxmLmJyb3dzZWxvY2FscykKIAkJc2VsZi53LmJyb3dzZWxvY2Fsc2J1dHRvbi5lbmFibGUoMCkKIAkJCi0JCXNlbGYudy5wb3N0bW9ydGVtYnV0dG9uID0gVy5CdXR0b24oKDE5MCwgLTMwLCAxMDAsIDE2KSwgIlBvc3QgbW9ydGVtgyIsIHNlbGYucG9zdG1vcnRlbSkKKwkJc2VsZi53LnBvc3Rtb3J0ZW1idXR0b24gPSBXLkJ1dHRvbigoMTkwLCAtMzAsIDEwMCwgMTYpLCAiUG9zdCBtb3J0ZW1ceGM5Iiwgc2VsZi5wb3N0bW9ydGVtKQogCQkKIAkJc2VsZi53LnNldGRlZmF1bHRidXR0b24oc2VsZi53LmVkaXRidXR0b24pCiAJCXNlbGYudy5iaW5kKCJjbWRiIiwgc2VsZi53LmJyb3dzZWxvY2Fsc2J1dHRvbi5wdXNoKQpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0lERS9Xd2luZG93cy5weSBiL01hYy9Ub29scy9JREUvV3dpbmRvd3MucHkKaW5kZXggZTE2YzY0Ny4uMjljMDdlNSAxMDA2NDQKLS0tIGEvTWFjL1Rvb2xzL0lERS9Xd2luZG93cy5weQorKysgYi9NYWMvVG9vbHMvSURFL1d3aW5kb3dzLnB5CkBAIC01NjgsNyArNTY4LDcgQEAKIAkJCQlwYXNzCiAJaW1wb3J0IEVhc3lEaWFsb2dzCiAJaWYgRWFzeURpYWxvZ3MuQXNrWWVzTm9DYW5jZWwoCi0JCQkiQ2Fu1XQgZmluZCB3aW5kb3cgb3Igd2lkZ2V0IHRvIGluc2VydCB0ZXh0IGludG87IGNvcHkgdG8gY2xpcGJvYXJkIGluc3RlYWQ/IiwgCisJCQkiQ2FuJ3QgZmluZCB3aW5kb3cgb3Igd2lkZ2V0IHRvIGluc2VydCB0ZXh0IGludG87IGNvcHkgdG8gY2xpcGJvYXJkIGluc3RlYWQ/IiwgCiAJCQkxKSA9PSAxOgogCQlpbXBvcnQgU2NyYXAKIAkJU2NyYXAuWmVyb1NjcmFwKCkK