JyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCicKJyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQonICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKJyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KJyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQonICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCicgICJMaWNlbnNlIiknIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKJyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAonCicgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCicKJyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAonICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgonICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKJyAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCicgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKJyAgdW5kZXIgdGhlIExpY2Vuc2UuCicKJyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgpTdWIgTWFpbgoJCScgT2VmZm5lbiBkZXIgTE9HLURhdGVpCgkJJyBFcyBnaWJ0IDIgTW9lZ2xpY2hna2VpdGVuLCBkaWVzZW4gVGVzdCB6dSBhYnNvbHZpZXJlbi4KCQknIDEpIEF1c2dhYmUgdm9uIEluZm9ybWF0aW9uZW4gaW4gTWVzc2FnZUJveGVuCgkJJyAyKSBBdXNnYWJlIHZvbiBJbmZvcm1hdGlvbmVuIGluIGVpbmVyIExPRy1EYXRlaQoJCScKCQknIERpZSBNZXRob2RlbiBPcGVuTE9HLCBDbG9zZUxPRywgTWVzc2FnZSwgRXJyb3JNZXNzYWdlIHVuZCBJbmZvTWVzc2FnZSBiZXJ1ZWNrc2ljaHRpZ2VuIGRhcyBhdXRvbWF0aXNjaCEKCQknIFp1bSBVbXNjaGFsdGVuIHp3aXNjaGVuIGRlbiBiZWlkZW4gWnVzdGFlbmRlbiBnZW51ZWd0IGVzLCBlaW5lIGRlciBmb2xnZW5kZW4KCQknIHp3ZWkgUHJvZ3JhbW16ZWlsZW4genUgYWt0aXZpZXJlbiAuLi4KCgkJJ2JMT0dPbgk9IGNPbgoJCWJMT0dPbgk9IGNPZmYKCgkJJ2JTaG93RXJyb3JzT25seQkJPSBjT24KCQliU2hvd0Vycm9yc09ubHkJCT0gY09mZgoKCQlPcGVuTE9HCQkoIGNUZXN0UGF0aCArICJUZXN0RG9jdW1lbnRQcm9wZXJ0aWVzLmxvZyIgKQoJCUluZm9NZXNzYWdlCSggIlRlc3QgRG9jdW1lbnRQcm9wZXJ0aWVzIC4uLiBbc3RhcnRdIiApCgoJCScgU2VydmljZSBiZXNvcmdlbgoJCUluZm9NZXNzYWdlICggIlNlcnZpY2UgYmVzb3JnZW4gLi4uIFtzdGFydF0iICkKCQlhRG9jdW1lbnRQcm9wZXJ0aWVzID0gY3JlYXRlVW5vU2VydmljZSAoICJjb20uc3VuLnN0YXIuZG9jdW1lbnQuRG9jdW1lbnRQcm9wZXJ0aWVzIiApCgoJCScgRXJmb2xnIGFidGVzdGVuCgkJaWYgKCBpc251bGwgKCBhRG9jdW1lbnRQcm9wZXJ0aWVzICkgKSB0aGVuCgkJCUVycm9yTWVzc2FnZSAoICJTZXJ2aWNlIGtvbm50ZSBuaWNodCBpbnN0YW56aWllcnQgd2VyZGVuISIJKQoJCQlleGl0IHN1YgoJCWVsc2UKCQkJSW5mb01lc3NhZ2UgKCAiU2VydmljZSBlcmZvbGdyZWljaCBpbnN0YW56aWllcnQgLi4uIgkpCgkJCUluZm9NZXNzYWdlICggIlNlcnZpY2UgYmVzb3JnZW4gLi4uIFtlbmRlXSIJCQkJKQoJCWVuZCBpZgoKCQknIFVudGVyc3R1ZXR6dGUgU2Nobml0dHN0ZWxsZW4sIE1ldGhvZGVuIHVuZCBQcm9wZXJ0aWVzIGFuemVpZ2VuCgkJJyBBY2h0dW5nOiBNZXRob2RlbiB1bmQgUHJvcGVydGllcyBrb2VubmVuIG5pY2h0IGFuZ2V6ZWlndCB3ZXJkZW4gLi4uCgkJJyBuZXVlcyBVbm8gPC0+IEJhc2ljICE/CgkJbXNnYm94CWFEb2N1bWVudFByb3BlcnRpZXMuZGJnX3N1cHBvcnRlZEludGVyZmFjZXMKCQknbXNnYm94CWFEb2N1bWVudFByb3BlcnRpZXMuZGJnX21ldGhvZHMKCQknbXNnYm94CWFEb2N1bWVudFByb3BlcnRpZXMuZGJnX3Byb3BlcnRpZXMKCgkJJyBUZXN0ZW4gZGVzIFNlcnZpY2VzIHVudGVyIG5vcm1hbGVuIEJlZGluZ3VuZ2VuIChhbHNvIHdpZSB2b3JnZXNlaGVuKQoJCWJTdGF0ZSA9IFRlc3RfTm9ybWFsVXNlCSggYURvY3VtZW50UHJvcGVydGllcyApCgkJJyBGZWhsZXJzdGF0dXMgYWJmcmFnZW4KCQlpZiAoIGJTdGF0ZSA9IGNFcnJvciApIHRoZW4KCQkJRXJyb3JNZXNzYWdlICggIkRlciBTZXJ2aWNlIGFyYmVpdGV0IHVudGVyIG5vcm1hbGVuIEJlZGluZ3VuZ2VuIG5pY2h0IGtvcnJla3QhIiApCgkJZW5kIGlmCgoJCWJTdGF0ZSA9IFRlc3RfRXJyb3JVc2UJKCBhRG9jdW1lbnRQcm9wZXJ0aWVzICkKCQknIEZlaGxlcnN0YXR1cyBhYmZyYWdlbgoJCWlmICggYlN0YXRlID0gY0Vycm9yICkgdGhlbgoJCQlFcnJvck1lc3NhZ2UgKCAiRGVyIFNlcnZpY2UgdmVyaGFlbHQgc2ljaCBpbiBGZWhsZXJzaXR1YXRpb25lbiBuaWNodCBrb3JyZWt0ISIgKQoJCWVuZCBpZgoKCQknIFNjaGxpZXNzZW4gZGVyIEVycm9yLUxvZ2RhdGVpCgkJSW5mb01lc3NhZ2UgKCAiVGVzdCBEb2N1bWVudFByb3BlcnRpZXMgLi4uIFtlbmRlXSIgKQoJCUNsb3NlTE9HCkVuZCBTdWIKCicqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgonIFRlc3RmdW5rdGlvbmVuCicqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJyBUZXN0bWV0aG9kZTogVGVzdGV0IGRlbiBTZXJ2aWNlIHVudGVyIG5vcm1hbGVuIEJlZGluZ3VuZ2VuCicKJyBSZXR1cm53ZXJ0IGNPSyBiZWRldXRldCwgZGFzcyBzaWNoIGRhcyBPYmpla3Qgbm9ybWFsIHZlcmhhZWx0IC4uLgonIFJldHVybndlcnQgY0Vycm9yIGJlZGV1dGV0LCBkYXNzIHNpY2ggZGFzIGVpbiBGZWhsZXIgYXVmZ2V0cmV0ZW4gaXN0IC4uLgonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGdW5jdGlvbiBUZXN0X05vcm1hbFVzZSAoIGFEb2N1bWVudFByb3BlcnRpZXMgKSBhcyBCb29sZWFuCgoJCScgWnVuYWVjaHN0IHdpcmQgdm9tIEVyZm9sZyBkZXMgVGVzdCBhdXNnZWdhbmdlbi4KCQknIFNvbGx0ZSBlaW5lciBkZXIgRGV0YWlsLVRlc3RzIGZlaGxzY2hsYWdlbiwgZGFubiB3aXJkIGRpZXNlciBXZXJ0CgkJJyB6dXJ1ZWNrZ2VzZXR6dC4gRGFtaXQgd2lyZCBkYW5uIGFuZ2V6ZWlndCwgZGFzcyBtaW5kZXN0ZW5zIGVpbgoJCScgRWluemVsdGVzdCBuaWNodCBrb3JyZWt0IGZ1bmt0aW9uaWVydGUuCgoJCVRlc3RfTm9ybWFsVXNlID0gY09LCgoJCWJTdGF0ZSA9IFRlc3RfTm9ybWFsVXNlX1hQcm9wZXJ0eVNldAkoIGFEb2N1bWVudFByb3BlcnRpZXMgKQoJCWlmICggYlN0YXRlID0gY0Vycm9yICkgdGhlbgoJCQlUZXN0X05vcm1hbFVzZSA9IGNFcnJvcgoJCWVuZCBpZgoKCQliU3RhdGUgPSBUZXN0X05vcm1hbFVzZV9YTmFtZUNvbnRhaW5lcgkoIGFEb2N1bWVudFByb3BlcnRpZXMgKQoJCWlmICggYlN0YXRlID0gY0Vycm9yICkgdGhlbgoJCQlUZXN0X05vcm1hbFVzZSA9IGNFcnJvcgoJCWVuZCBpZgoKCQliU3RhdGUgPSBUZXN0X05vcm1hbFVzZV9YUGVyc2lzdAkJKCBhRG9jdW1lbnRQcm9wZXJ0aWVzICkKCQlpZiAoIGJTdGF0ZSA9IGNFcnJvciApIHRoZW4KCQkJVGVzdF9Ob3JtYWxVc2UgPSBjRXJyb3IKCQllbmQgaWYKCkVuZCBGdW5jdGlvbgoKJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJyBUZXN0bWV0aG9kZTogVGVzdGV0IGRlbiBTZXJ2aWNlIHVudGVyIFJhbmRiZWRpbmd1bmdlbiB1bmQgcHJvdm96aWVydCBGZWhsZXJ6dXN0YWVuZGUKJwonIFJldHVybndlcnQgY09LIGJlZGV1dGV0LCBkYXNzIGRhcyBPYmpla3QgZGFtaXQga2VpbmUgUHJvYmxlbWUgaGF0IC4uLgonIFJldHVybndlcnQgY0Vycm9yIGJlZGV1dGV0LCBkYXNzIGRhcyBPYmpla3Qgbm9jaCBuaWNodCByb2J1c3QgZ2VudWcgaXN0IC4uLgonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGdW5jdGlvbiBUZXN0X0Vycm9yVXNlICggYURvY3VtZW50UHJvcGVydGllcyApIGFzIEJvb2xlYW4KCgkJVGVzdF9FcnJvclVzZSA9IGNPSwoKRW5kIEZ1bmN0aW9uCgonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQonIFRlc3RtZXRob2RlOiBUZXN0ZW4gZGVzIHVudGVyc3R1ZXR6dGVuIEludGVyZmFjZXMgIlhQcm9wZXJ0eVNldCIgdW50ZXIgbm9ybWFsZW4gQmVkaW5ndW5nZW4KJwonIFJldHVybndlcnQgPSBjT0sJCTsgd2VubiBkZXIgVGVzdCBlcmZvbGdyZWljaCB3YXIKJyBSZXR1cm53ZXJ0ID0gY0Vycm9yCTsgd2VubiBzaWNoIGRhcyBPYmpla3QgbmljaHQga29ycmVrdCB2ZXJoYWx0ZW4gaGF0CictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZ1bmN0aW9uIFRlc3RfTm9ybWFsVXNlX1hQcm9wZXJ0eVNldCAoIGFEb2N1bWVudFByb3BlcnRpZXMgKSBhcyBCb29sZWFuCgoJCScgRWluc2NoYWx0ZW4gZGVyIEZlaGxlcmJlaGFuZGx1bmcsIHVtIEV4Y2VwdGlvbnMgb2RlciBhZWhubGljaGVzIGFienVmYW5nZW4hCgkJb24gRXJyb3IgZ290byBUZXN0X05vcm1hbFVzZV9YUHJvcGVydHlTZXRfRXJyb3IKCgkJSW5mb01lc3NhZ2UgKCAiVGVzdF9Ob3JtYWxVc2VfWFByb3BlcnR5U2V0IC4uLiBbc3RhcnRdIiApCgoJCScgMSkgVGVzdCBkZXIgRnVua3Rpb24gImdldFByb3BlcnR5U2V0SW5mbygpIgoJCScJCURhIGRpZXNlIEZ1bmt0aW9uIGtlaW5lIFBhcmFtZXRlciBiZXNpdHp0IHVuZCB6dWRlbSBlaW5lICJnZXQiLU1ldGhvZGUKCQknCQlkYXJzdGVsbHQsIHdpcmQgc2llIGR1cmNoIEJhc2ljIGF1dG9tYXRpc2NoIGFscyAiUHJvcGVydHkiIGJlaGFuZGVsdCEKCQknCQlEYWhlciBzY2hyZWlidCBtYW4gbmljaHQgImdldFByb3BlcnR5U2V0SW5mbygpIiBzb25kZXJuIG51ciAiUHJvcGVydHlTZXRJbmZvIi4KCgkJJyBCZXNvcmdlbiBkZXIgSW5mbwoJCVByb3BlcnR5U2V0SW5mbyA9IGFEb2N1bWVudFByb3BlcnRpZXMuUHJvcGVydHlTZXRJbmZvCgkJJyBVbmQgYWJ0ZXN0ZW4gYXVmIEd1ZWx0aWdrZWl0CgkJaWYgKCBpc251bGwgKFByb3BlcnR5U2V0SW5mbykgKSB0aGVuCgkJCUVycm9yTWVzc2FnZSAoICJnZXRQcm9wZXJ0eVNldEluZm8oKSAuLi4gRXJyb3IgKEtlaW5lIEluZm8gYmVzdGltbWJhciEpIiApCgkJCWdvdG8gVGVzdF9Ob3JtYWxVc2VfWFByb3BlcnR5U2V0X0Vycm9yCgkJZW5kIGlmCgoJCScgSGllciBmZWhsdCBub2NoIGRlciBUZXN0IGRlciBJbmZvU3RydWt0dXIhIChMYWVzc3Qgc2ljaCB1bnRlciBCYXNpYyBpcmdlbmR3aWUgTklDSFQgdGVzdGVuISEhPz8/KQoJCScgLi4uCgoJCUluZm9NZXNzYWdlICggImdldFByb3BlcnR5U2V0SW5mbygpIC4uLiBPSyIgKQoKCQknIDIpIGdldFByb3BlcnR5VmFsdWUoKSAmIHNldFByb3BlcnR5VmFsdWUgKCkKCQknCQlJbiBkaWVzZW0gU2VydmljZSBzaW5kIG1laHJlcmUgUHJvcGVydGllcyBiZXJlaXRzIGRlZmluaWVydCB1bmQgdm9yYmVsZWd0LgoJCScJCVp1bSBUZXN0IHdlcmRlbiByZXByYWVzZW50YXRpdiBlaW5pZ2UgZGF2b24gdmVyd2VuZGV0LiBOYWVtbGljaCBqZSBlaW5lCgkJJwkJZGVyIHZlcnNjaGllZGVuZW4gRGF0ZW50eXBlbiEKCQknCQlEYXMgc2luZCBpbSBmb2xnZW5kZW46CQlPV1N0cmluZywgc2FsX0Jvb2wsIHNhbF9JbnQxNiwgc2FsX3VJbnQxNiwgc2FsX0ludDMyLCBEYXRlVGltZSwgU2VxdWVuY2U8IHNhbF9JbnQ4ID4KCQknCQkJCQkJCQkJQWNodHVuZyEgc2FsX3VJbnQxNiBrYW5uIGluIEJhc2ljIHNvIG5pY2h0IGRhcmdlc3RlbGx0IHdlcmRlbi4gRGFoZXIgd2lyZCBlaW4gbm9ybWFsZXIKCQknCQkJCQkJCQkJSW50ZWdlci1XZXJ0IGFuZ2Vub21tZW4gLSBCZWRpbmd1bmcgaXN0LCBkYXMgaGllciBpbSBUZXN0IGRlciBXZXJ0ZWJlcmVpY2ggbmljaHQKCQknCQkJCQkJCQkJdWViZXJzY2hyaXR0ZW4gd2lyZCEKCQknCQlFcyB3aXJkIHZlcnN1Y2h0IGRlbiBTdGFuZGFyZHdlcnQgZGllc2VyIHp1IGVybWl0dGVsbiB1bmQgenUgbWVya2VuOwoJCScJCWRhbm4gZWluZW4gbmV1ZW4gV2VydCB6dSBzZXR6ZW47IHNvd2llIGRpZXNlbiB3aWVkZXJ1bSB6dSBsZXNlbiB1bmQgbWl0IGRlbgoJCScJCXZvcmhlcmlnZW4gV2VydGVuIHp1IHZlcmdsZWljaGVuIQoKCQknIFp1bmFlY2hzdCB3ZXJkZW4gZGllIFN0YW5kYXJkd2VydGUgZGllc2VyIFByb3BlcnRpZXMgYmVzb3JndCAuLi4KCQlzRGVmYXVsdFZhbHVlX09XU3RyaW5nJAkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzLmdldFByb3BlcnR5VmFsdWUgKCAiQXV0aG9yIgkJCSkKCQliRGVmYXVsdFZhbHVlX3NhbF9Cb29sCQk9IGFEb2N1bWVudFByb3BlcnRpZXMuZ2V0UHJvcGVydHlWYWx1ZSAoICJBdXRvbG9hZEVuYWJsZWQiCSkKCQluRGVmYXVsdFZhbHVlX3NhbF9JbnQxNiUJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzLmdldFByb3BlcnR5VmFsdWUgKCAiRWRpdGluZ0N5Y2xlcyIJKQoJCW5EZWZhdWx0VmFsdWVfc2FsX3VJbnQxNiUJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzLmdldFByb3BlcnR5VmFsdWUgKCAiUHJpb3JpdHkiCQkJKQoJCW5EZWZhdWx0VmFsdWVfc2FsX0ludDMyJgk9IGFEb2N1bWVudFByb3BlcnRpZXMuZ2V0UHJvcGVydHlWYWx1ZSAoICJFZGl0aW5nRHVyYXRpb24iCSkKCQlhRGVmYXVsdFZhbHVlX0RhdGVUaW1lCQk9IGFEb2N1bWVudFByb3BlcnRpZXMuZ2V0UHJvcGVydHlWYWx1ZSAoICJNb2RpZnlEYXRlIgkJKQonCQlhRGVmYXVsdFZhbHVlX0J5dGVTZXF1ZW5jZQk9IGFEb2N1bWVudFByb3BlcnRpZXMuZ2V0UHJvcGVydHlWYWx1ZSAoICJFeHRyYURhdGEiCQkpCgkJYURlZmF1bHRWYWx1ZV9CeXRlU2VxdWVuY2UJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzLkV4dHJhRGF0YQoKCQknIC4uLiBkYW5uIGRpZSBXZXJ0ZSB6dXIgS29udHJvbGxlIGF1c2dlYmVuLgoJCVNob3dQcm9wZXJ0aWVzICggYURvY3VtZW50UHJvcGVydGllcyApCgoJCUluZm9NZXNzYWdlICggImdldFByb3BlcnR5VmFsdWUoKSAuLi4gT0siICkKCgkJJyBKZXR6dCB3ZXJkZW4gbmV1ZSBXZXJ0ZSB2ZXJlaW5iYXJ0IC4uLgoJCScgRGllc2Ugd2VyZGVuIHNvIGdld2FlaGx0LCBkYXMgc2llIGdhcmFudGllcnQgdm9uIGRlbiBTdGFuZGFyZHdlcnRlbiB2ZXJzY2hpZWRlbiBzaW5kIQoJCScgRGF6dSB3ZXJkZW4gZGllIGFsdGVuIGF1ZiBXZXJ0IGFiZ2VmcmFndCB1bmQgZW50c3ByZWNoZW5kIGRpZSBuZXVlbiBnZXNldHp0LgoJCXNOZXdWYWx1ZV9PV1N0cmluZyQJCT0gc0RlZmF1bHRWYWx1ZV9PV1N0cmluZyQJKyAiTmV1ZXJXZXJ0IgoJCWJOZXdWYWx1ZV9zYWxfQm9vbAkJPSBub3QgYkRlZmF1bHRWYWx1ZV9zYWxfQm9vbAoJCW5OZXdWYWx1ZV9zYWxfSW50MTYlCT0gbkRlZmF1bHRWYWx1ZV9zYWxfSW50MTYlCSsgMQoJCWlmICggbkRlZmF1bHRWYWx1ZV9zYWxfdUludDE2JSA9IDEgKSB0aGVuCgkJCW5OZXdWYWx1ZV9zYWxfdUludDE2JSA9IDIKCQllbHNlCgkJCW5OZXdWYWx1ZV9zYWxfdUludDE2JSA9IDEKCQllbmQgaWYKCQluTmV3VmFsdWVfc2FsX0ludDMyJgk9IG5EZWZhdWx0VmFsdWVfc2FsX0ludDMyJiAgKyAxCgoJCWFOZXdWYWx1ZV9EYXRlVGltZQkJCQkJPSBhRGVmYXVsdFZhbHVlX0RhdGVUaW1lCgkJYU5ld1ZhbHVlX0RhdGVUaW1lLkh1bmRyZWR0aFNlY29uZHMJPSBhRGVmYXVsdFZhbHVlX0RhdGVUaW1lLkh1bmRyZWR0aFNlY29uZHMJKyAxCgkJYU5ld1ZhbHVlX0RhdGVUaW1lLlNlY29uZHMJCQk9IGFEZWZhdWx0VmFsdWVfRGF0ZVRpbWUuU2Vjb25kcyAgICAgICAgIAkrIDEKCQlhTmV3VmFsdWVfRGF0ZVRpbWUuTWludXRlcwkJCT0gYURlZmF1bHRWYWx1ZV9EYXRlVGltZS5NaW51dGVzICAgICAgICAgCSsgMQoJCWFOZXdWYWx1ZV9EYXRlVGltZS5Ib3VycwkJCT0gYURlZmF1bHRWYWx1ZV9EYXRlVGltZS5Ib3VycyAgICAgICAgICAgCSsgMQoJCWFOZXdWYWx1ZV9EYXRlVGltZS5EYXkJCQkJPSBhRGVmYXVsdFZhbHVlX0RhdGVUaW1lLkRheSAgICAgICAgICAgICAJKyAxCgkJYU5ld1ZhbHVlX0RhdGVUaW1lLk1vbnRoCQkJPSBhRGVmYXVsdFZhbHVlX0RhdGVUaW1lLk1vbnRoICAgICAgICAgICAJKyAxCgkJYU5ld1ZhbHVlX0RhdGVUaW1lLlllYXIJCQkJPSBhRGVmYXVsdFZhbHVlX0RhdGVUaW1lLlllYXIgICAgICAgICAgICAJKyAxCgoJCWFOZXdWYWx1ZV9CeXRlU2VxdWVuY2UgPSBhRGVmYXVsdFZhbHVlX0J5dGVTZXF1ZW5jZQoJCW5FbGVtZW50Q291bnQlID0gVUJvdW5kICggYURlZmF1bHRWYWx1ZV9CeXRlU2VxdWVuY2UgKQonCQlmb3IgbkNvdW50ZXIlPTAgdG8gbkVsZW1lbnRDb3VudCUgc3RlcCAxCicJCQlhTmV3VmFsdWVfQnl0ZVNlcXVlbmNlKG5Db3VudGVyJSkgPSAoIGFEZWZhdWx0VmFsdWVfQnl0ZVNlcXVlbmNlKG5Db3VudGVyJSkgKyAxICkKJwkJbmV4dCBuQ291bnRlciUKCgkJJyBBbnNjaGxpZXNzZW5kIG11ZXNzZW4gZGllc2UgbmV1ZW4gV2VydGUgZ2VzZXR6dCB3ZXJkZW4uCgkJYURvY3VtZW50UHJvcGVydGllcy5zZXRQcm9wZXJ0eVZhbHVlICggIkF1dGhvciIJCQksIHNOZXdWYWx1ZV9PV1N0cmluZyQJCSkKCQlhRG9jdW1lbnRQcm9wZXJ0aWVzLnNldFByb3BlcnR5VmFsdWUgKCAiQXV0b2xvYWRFbmFibGVkIiwgYk5ld1ZhbHVlX3NhbF9Cb29sCQkpCgkJYURvY3VtZW50UHJvcGVydGllcy5zZXRQcm9wZXJ0eVZhbHVlICggIkVkaXRpbmdDeWNsZXMiCSwgbk5ld1ZhbHVlX3NhbF9JbnQxNiUJCSkKCQlhRG9jdW1lbnRQcm9wZXJ0aWVzLnNldFByb3BlcnR5VmFsdWUgKCAiUHJpb3JpdHkiCQksIG5OZXdWYWx1ZV9zYWxfdUludDE2JQkJKQoJCWFEb2N1bWVudFByb3BlcnRpZXMuc2V0UHJvcGVydHlWYWx1ZSAoICJFZGl0aW5nRHVyYXRpb24iLCBuTmV3VmFsdWVfc2FsX0ludDMyJgkJKQoJCWFEb2N1bWVudFByb3BlcnRpZXMuc2V0UHJvcGVydHlWYWx1ZSAoICJNb2RpZnlEYXRlIgkJLCBhTmV3VmFsdWVfRGF0ZVRpbWUJCSkKJwkJYURvY3VtZW50UHJvcGVydGllcy5zZXRQcm9wZXJ0eVZhbHVlICggIkV4dHJhRGF0YSIJCSwgYU5ld1ZhbHVlX0J5dGVTZXF1ZW5jZQkpCgkJYURvY3VtZW50UHJvcGVydGllcy5FeHRyYURhdGEgPSBhTmV3VmFsdWVfQnl0ZVNlcXVlbmNlCgoJCScgRGFubiBsYXNzZW4gd2lyIHNpZSB1bnMgYXVzZ2ViZW4sIHVtIHNpZSBtaXQgZGVuIHZvcmhlcmlnZW4gdmVyZ2xlaWNoZW4genUga29lbm5lbi4KCQknIChEYXMgZ2VodCBuYXR1ZXJsaWNoIG51ciwgd2VubiAiYkxPR09uPWNPbiIgaXN0IC0gYWxzbyBlaW5lIExPRy1EYXRlaSBnZXNjaHJpZWJlbiB3aXJkISkKCQlTaG93UHJvcGVydGllcyAoIGFEb2N1bWVudFByb3BlcnRpZXMgKQoKCQknIE51biB3ZXJkZW4gZGllIFByb3BlcnRpZXMgd2llZGVyIGdlbGVzZW4gLi4uCgkJc0xhc3RWYWx1ZV9PV1N0cmluZyQJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzLmdldFByb3BlcnR5VmFsdWUgKCAiQXV0aG9yIgkJCSkKCQliTGFzdFZhbHVlX3NhbF9Cb29sCQk9IGFEb2N1bWVudFByb3BlcnRpZXMuZ2V0UHJvcGVydHlWYWx1ZSAoICJBdXRvbG9hZEVuYWJsZWQiCSkKCQluTGFzdFZhbHVlX3NhbF9JbnQxNiUJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzLmdldFByb3BlcnR5VmFsdWUgKCAiRWRpdGluZ0N5Y2xlcyIJKQoJCW5MYXN0VmFsdWVfc2FsX3VJbnQxNiUJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzLmdldFByb3BlcnR5VmFsdWUgKCAiUHJpb3JpdHkiCQkJKQoJCW5MYXN0VmFsdWVfc2FsX0ludDMyJgk9IGFEb2N1bWVudFByb3BlcnRpZXMuZ2V0UHJvcGVydHlWYWx1ZSAoICJFZGl0aW5nRHVyYXRpb24iCSkKCQlhTGFzdFZhbHVlX0RhdGVUaW1lCQk9IGFEb2N1bWVudFByb3BlcnRpZXMuZ2V0UHJvcGVydHlWYWx1ZSAoICJNb2RpZnlEYXRlIgkJKQoJCWFMYXN0VmFsdWVfQnl0ZVNlcXVlbmNlCT0gYURvY3VtZW50UHJvcGVydGllcy5nZXRQcm9wZXJ0eVZhbHVlICggIkV4dHJhRGF0YSIJCSkKCgkJJyAuLi4gdW5kIG1pdCBkZW4gdm9yaGVyIGFscyB6dSBzZXR6ZW5kIGJlc3RpbW10ZSBXZXJ0ZSB2ZXJnbGVpY2hlbiEKCQknIEVzIGR1ZXJmZW4gS0VJTkUgVW50ZXJzY2hpZWRlIGF1ZnRyZXRlbiwgZGEgc29uc3QgInNldFByb3BlcnR5VmFsdWUoKSIgbmljaHQga29ycmVrdCBmdW5rdGlvbmllcnQgaGF0IQoKCQlpZiAoIENvbXBhcmVPV1N0cmluZwkJCSggc05ld1ZhbHVlX09XU3RyaW5nJCwJCXNMYXN0VmFsdWVfT1dTdHJpbmckCSkgPSBjRGlmZmVyZW50ICkgdGhlbgoJCQlFcnJvck1lc3NhZ2UJKCAic2V0UHJvcGVydHlWYWx1ZSgpIC4uLiBGZWhsZXIgW09XU3RyaW5nIGZlaGxlcmhhZnRdIgkJKQoJCQlnb3RvIFRlc3RfTm9ybWFsVXNlX1hQcm9wZXJ0eVNldF9FcnJvcgoJCWVsc2VpZiAoIENvbXBhcmVCb29sCQkJKCBiTmV3VmFsdWVfc2FsX0Jvb2wsCQliTGFzdFZhbHVlX3NhbF9Cb29sCQkpID0gY0RpZmZlcmVudCApIHRoZW4KCQkJRXJyb3JNZXNzYWdlCSggInNldFByb3BlcnR5VmFsdWUoKSAuLi4gRmVobGVyIFtzYWxfQm9vbCBmZWhsZXJoYWZ0XSIJCSkKCQkJZ290byBUZXN0X05vcm1hbFVzZV9YUHJvcGVydHlTZXRfRXJyb3IKCQllbHNlaWYgKCBDb21wYXJlSW50MTYJCQkoIG5OZXdWYWx1ZV9zYWxfSW50MTYlLAkJbkxhc3RWYWx1ZV9zYWxfSW50MTYlCSkgPSBjRGlmZmVyZW50ICkgdGhlbgoJCQlFcnJvck1lc3NhZ2UJKCAic2V0UHJvcGVydHlWYWx1ZSgpIC4uLiBGZWhsZXIgW3NhbF9JbnQxNiBmZWhsZXJoYWZ0XSIJKQoJCQlnb3RvIFRlc3RfTm9ybWFsVXNlX1hQcm9wZXJ0eVNldF9FcnJvcgoJCWVsc2VpZiAoIENvbXBhcmVJbnQxNgkJCSggbk5ld1ZhbHVlX3NhbF91SW50MTYlLAluTGFzdFZhbHVlX3NhbF91SW50MTYlCSkgPSBjRGlmZmVyZW50ICkgdGhlbgoJCQlFcnJvck1lc3NhZ2UJKCAic2V0UHJvcGVydHlWYWx1ZSgpIC4uLiBGZWhsZXIgW3NhbF91SW50MTYgZmVobGVyaGFmdF0iCSkKCQkJZ290byBUZXN0X05vcm1hbFVzZV9YUHJvcGVydHlTZXRfRXJyb3IKCQllbHNlaWYgKCBDb21wYXJlSW50MzIJCQkoIG5OZXdWYWx1ZV9zYWxfSW50MzImLAkJbkxhc3RWYWx1ZV9zYWxfSW50MzImCSkgPSBjRGlmZmVyZW50ICkgdGhlbgoJCQlFcnJvck1lc3NhZ2UJKCAic2V0UHJvcGVydHlWYWx1ZSgpIC4uLiBGZWhsZXIgW3NhbF9JbnQzMiBmZWhsZXJoYWZ0XSIJKQoJCQlnb3RvIFRlc3RfTm9ybWFsVXNlX1hQcm9wZXJ0eVNldF9FcnJvcgoJCWVsc2VpZiAoIENvbXBhcmVEYXRlVGltZQkJKCBhTmV3VmFsdWVfRGF0ZVRpbWUsCQlhTGFzdFZhbHVlX0RhdGVUaW1lCQkpID0gY0RpZmZlcmVudCApIHRoZW4KCQkJRXJyb3JNZXNzYWdlCSggInNldFByb3BlcnR5VmFsdWUoKSAuLi4gRmVobGVyIFtEYXRlVGltZSBmZWhsZXJoYWZ0XSIJCSkKCQkJZ290byBUZXN0X05vcm1hbFVzZV9YUHJvcGVydHlTZXRfRXJyb3IKCQllbHNlaWYgKCBDb21wYXJlQnl0ZVNlcXVlbmNlCSggYU5ld1ZhbHVlX0J5dGVTZXF1ZW5jZSwJYUxhc3RWYWx1ZV9CeXRlU2VxdWVuY2UJKSA9IGNEaWZmZXJlbnQgKSB0aGVuCgkJCUVycm9yTWVzc2FnZQkoICJzZXRQcm9wZXJ0eVZhbHVlKCkgLi4uIEZlaGxlciBbQnl0ZVNlcXVlbmNlIGZlaGxlcmhhZnRdIgkpCgkJCWdvdG8gVGVzdF9Ob3JtYWxVc2VfWFByb3BlcnR5U2V0X0Vycm9yCgkJZW5kIGlmCgoJCUluZm9NZXNzYWdlICggInNldFByb3BlcnR5VmFsdWUoKSAuLi4gT0siICkKCgkJJyBOdW4gd2lyZCBub2NoIG1pdCBkZW4genVlcnN0IGVybWl0dGVsdGVuIERlZmF1bHQtV2VydGVuIHZlcmdsaWNoZW4hCgkJJyBIaWVyIE1VRVNTRU4gVW50ZXJzY2hpZWRlIGF1ZnRyZXRlbiwgZGEgc29uc3QgImdldC0iIFVORCAic2V0UHJvcGVydHlWYWx1ZSgpIiBuaWNodCBrb3JyZWt0IGZ1bmt0aW9uaWVydCBoYWJlbiEKCgkJaWYgKCBDb21wYXJlT1dTdHJpbmcJCQkoIHNEZWZhdWx0VmFsdWVfT1dTdHJpbmckLAkJc0xhc3RWYWx1ZV9PV1N0cmluZyQJKSA9IGNFcXVhbCApIHRoZW4KCQkJRXJyb3JNZXNzYWdlCSggIlp1c2FtbWVuc3BpZWwgc2V0ICYgZ2V0UHJvcGVydHlWYWx1ZSgpIC4uLiBGZWhsZXIgW09XU3RyaW5nIGZlaGxlcmhhZnRdIgkJKQoJCQlnb3RvIFRlc3RfTm9ybWFsVXNlX1hQcm9wZXJ0eVNldF9FcnJvcgoJCWVsc2VpZiAoIENvbXBhcmVCb29sCQkJKCBiRGVmYXVsdFZhbHVlX3NhbF9Cb29sLAkJYkxhc3RWYWx1ZV9zYWxfQm9vbAkJKSA9IGNFcXVhbCApIHRoZW4KCQkJRXJyb3JNZXNzYWdlCSggIlp1c2FtbWVuc3BpZWwgc2V0ICYgZ2V0UHJvcGVydHlWYWx1ZSgpIC4uLiBGZWhsZXIgW3NhbF9Cb29sIGZlaGxlcmhhZnRdIgkJKQoJCQlnb3RvIFRlc3RfTm9ybWFsVXNlX1hQcm9wZXJ0eVNldF9FcnJvcgoJCWVsc2VpZiAoIENvbXBhcmVJbnQxNgkJCSggbkRlZmF1bHRWYWx1ZV9zYWxfSW50MTYlLAkJbkxhc3RWYWx1ZV9zYWxfSW50MTYlCSkgPSBjRXF1YWwgKSB0aGVuCgkJCUVycm9yTWVzc2FnZQkoICJadXNhbW1lbnNwaWVsIHNldCAmIGdldFByb3BlcnR5VmFsdWUoKSAuLi4gRmVobGVyIFtzYWxfSW50MTYgZmVobGVyaGFmdF0iCSkKCQkJZ290byBUZXN0X05vcm1hbFVzZV9YUHJvcGVydHlTZXRfRXJyb3IKCQllbHNlaWYgKCBDb21wYXJlSW50MTYJCQkoIG5EZWZhdWx0VmFsdWVfc2FsX3VJbnQxNiUsCW5MYXN0VmFsdWVfc2FsX3VJbnQxNiUJKSA9IGNFcXVhbCApIHRoZW4KCQkJRXJyb3JNZXNzYWdlCSggIlp1c2FtbWVuc3BpZWwgc2V0ICYgZ2V0UHJvcGVydHlWYWx1ZSgpIC4uLiBGZWhsZXIgW3NhbF91SW50MTYgZmVobGVyaGFmdF0iCSkKCQkJZ290byBUZXN0X05vcm1hbFVzZV9YUHJvcGVydHlTZXRfRXJyb3IKCQllbHNlaWYgKCBDb21wYXJlSW50MzIJCQkoIG5EZWZhdWx0VmFsdWVfc2FsX0ludDMyJiwJCW5MYXN0VmFsdWVfc2FsX0ludDMyJgkpID0gY0VxdWFsICkgdGhlbgoJCQlFcnJvck1lc3NhZ2UJKCAiWnVzYW1tZW5zcGllbCBzZXQgJiBnZXRQcm9wZXJ0eVZhbHVlKCkgLi4uIEZlaGxlciBbc2FsX0ludDMyIGZlaGxlcmhhZnRdIgkpCgkJCWdvdG8gVGVzdF9Ob3JtYWxVc2VfWFByb3BlcnR5U2V0X0Vycm9yCgkJZWxzZWlmICggQ29tcGFyZURhdGVUaW1lCQkoIGFEZWZhdWx0VmFsdWVfRGF0ZVRpbWUsCQlhTGFzdFZhbHVlX0RhdGVUaW1lCQkpID0gY0VxdWFsICkgdGhlbgoJCQlFcnJvck1lc3NhZ2UJKCAiWnVzYW1tZW5zcGllbCBzZXQgJiBnZXRQcm9wZXJ0eVZhbHVlKCkgLi4uIEZlaGxlciBbRGF0ZVRpbWUgZmVobGVyaGFmdF0iCQkpCgkJCWdvdG8gVGVzdF9Ob3JtYWxVc2VfWFByb3BlcnR5U2V0X0Vycm9yCicJCWVsc2VpZiAoIENvbXBhcmVCeXRlU2VxdWVuY2UJKCBhRGVmYXVsdFZhbHVlX0J5dGVTZXF1ZW5jZSwJYUxhc3RWYWx1ZV9CeXRlU2VxdWVuY2UJKSA9IGNFcXVhbCApIHRoZW4KJwkJCUVycm9yTWVzc2FnZQkoICJadXNhbW1lbnNwaWVsIHNldCAmIGdldFByb3BlcnR5VmFsdWUoKSAuLi4gRmVobGVyIFtCeXRlU2VxdWVuY2UgZmVobGVyaGFmdF0iCSkKJwkJCWdvdG8gVGVzdF9Ob3JtYWxVc2VfWFByb3BlcnR5U2V0X0Vycm9yCgkJZW5kIGlmCgoJCUluZm9NZXNzYWdlICggIlp1c2FtbWVuc3BpZWwgc2V0ICYgZ2V0UHJvcGVydHlWYWx1ZSgpIC4uLiBPSyIgKQoKCQknIERlciBUZXN0IHdhciBlcmZvbGdyZWljaCEgTWVsZHVuZyBhdXNnZWJlbiB1bmQgenVydWVjayB6bSBBdWZydWZlci4KCQknIEF1c3NjaGFsdGVuIGRlciBGZWhsZXJiZWhhbmRsdW5nCgkJb24gRXJyb3IgZ290byAwCgkJJyBNZWxkdW5nIGF1c2dlYmVuCgkJSW5mb01lc3NhZ2UgKCAiVGVzdF9Ob3JtYWxVc2VfWFByb3BlcnR5U2V0IC4uLiBbZW5kZV0iICkKCQknIFN0YXR1cyBzZXR6ZW4KCQlUZXN0X05vcm1hbFVzZV9YUHJvcGVydHlTZXQgPSBjT0sKCQknIFVuZCBGdW5rdGlvbiBiZWVuZGVuCgkJRXhpdCBGdW5jdGlvbgoKJyBFcyBpc3QgZWluIHVuZXJ3YXJ0ZXRlIEZlaGxlciBhdWZnZXRyZXRlbiEgKEV4Y2VwdGlvbiAuLi4pCicgTWVsZHVuZyBhdXNnZWJlbiB1bmQgbWl0IEZlaGxlciB6dXJ1ZWNra2VocmVuLgpUZXN0X05vcm1hbFVzZV9YUHJvcGVydHlTZXRfRXJyb3I6CgkJJyBBdXNzY2hhbHRlbiBkZXIgRmVobGVyYmVoYW5kbHVuZwoJCW9uIEVycm9yIGdvdG8gMAoJCScgTWVsZHVuZyBhdXNnZWJlbgoJCUVycm9yTWVzc2FnZSAoICJUZXN0X05vcm1hbFVzZV9YUHJvcGVydHlTZXQgLi4uIFtFcnJvcl0iICkKCQknIHVuZCBGZWhsZXJzdGF0dXMgc2V0emVuCgkJVGVzdF9Ob3JtYWxVc2VfWFByb3BlcnR5U2V0ID0gY0Vycm9yCgkJJyBBYmJydWNoIGRlciBGdW5rdGlvbiBlcnp3aW5nZW4hCgkJRXhpdCBGdW5jdGlvbgoKRW5kIEZ1bmN0aW9uCgonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQonIFRlc3RtZXRob2RlOiBUZXN0ZW4gZGVzIHVudGVyc3R1ZXR6dGVuIEludGVyZmFjZXMgIlhOYW1lQ29udGFpbmVyIiB1bnRlciBub3JtYWxlbiBCZWRpbmd1bmdlbgonCicgUmV0dXJud2VydCA9IGNPSwkJOyB3ZW5uIHNpY2ggZGFzIE9iamVrdCBrb3JyZWt0IHZlcmhhbHRlbiBoYXQKJyBSZXR1cm53ZXJ0ID0gY0Vycm9yCTsgd2VubiBkYXMgT2JqZWt0IG5vY2ggbmljaHQgcm9idXN0IGdlbnVnIGlzdAonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGdW5jdGlvbiBUZXN0X05vcm1hbFVzZV9YTmFtZUNvbnRhaW5lciAoIGFEb2N1bWVudFByb3BlcnRpZXMgKSBhcyBCb29sZWFuCgoJCScgRWluc2NoYWx0ZW4gZGVyIEZlaGxlcmJlaGFuZGx1bmcsIHVtIEV4Y2VwdGlvbnMgb2RlciBhZWhubGljaGVzIGFienVmYW5nZW4hCgkJb24gRXJyb3IgZ290byBUZXN0X05vcm1hbFVzZV9YTmFtZUNvbnRhaW5lcl9FcnJvcgoKCQlJbmZvTWVzc2FnZSAoICJUZXN0X05vcm1hbFVzZV9YTmFtZUNvbnRhaW5lciAuLi4gW3N0YXJ0XSIgKQoKCQknIERhIGRhcyBJbml0aWFsaXNpZXJlbiBpbSBLb25zdHJ1a3RvciBkZXMgT2JqZWt0ZXMgdW5kIGRhcyBBdWZyYWV1bWVuIGltIERlc3RydWt0b3IKCQknIGF1dG9tYXRpc2NoIGdlc2NoaWVodCB1bmQgZGllc2UgTWV0aG9kZSBwcm8gUHJvZ3JhbW1hYmxhdWYgbnVyIGVpbm1hbCB2ZXJ3ZW5kZXQgd2lyZCwKCQknIGRhcmYgc2ljaCBrZWluIEVsZW1lbnQgc2Nob24gaW0gTmFtZUNvbnRhaW5lciBiZWZpbmRlbiEKCQknIFdlbm4gZG9jaCwgaXN0IGRhcyBlaW4gRmVobGVyIQoJCWlmICggYURvY3VtZW50UHJvcGVydGllcy5oYXNFbGVtZW50cyAoKSA9IFRSVUUgKSB0aGVuCgkJCUVycm9yTWVzc2FnZSAoICJEZXIgTmFtZUNvbmF0aW5lciBzb2xsdGUgZWlnZW50bGljaCBsZWVyIHNlaW4sIGVudGhhZWx0IGluaXRpYWwgYWJlciBzY2hvbiBFbGVtZW50ZSE/IiApCgkJCWdvdG8gVGVzdF9Ob3JtYWxVc2VfWE5hbWVDb250YWluZXJfRXJyb3IKCQllbmQgaWYKCgkJJyBadW5hZWNoc3Qgd2VyZGVuIG1laHJlcmUgRWxlbWVudGUgaW4gZGVuIE5hbWVDb250YWluZXIgZWluZ2VmdWVndC4KCQlzSXRlbU5hbWVfMSQJPSAiSXRlbSAxIgoJCXNJdGVtTmFtZV8yJAk9ICJJdGVtIDIiCgkJc0l0ZW1OYW1lXzMkCT0gIkl0ZW0gMyIKCQlzSXRlbU5hbWVfNCQJPSAiSXRlbSA0IgoJCXNJdGVtTmFtZV81JAk9ICJJdGVtIDUiCgoJCXNGaXJzdFZhbHVlXzEkCT0gIlZhbHVlIDEiCgkJc0ZpcnN0VmFsdWVfMiQJPSAiVmFsdWUgMiIKCQlzRmlyc3RWYWx1ZV8zJAk9ICJWYWx1ZSAzIgoJCXNGaXJzdFZhbHVlXzQkCT0gIlZhbHVlIDQiCgkJc0ZpcnN0VmFsdWVfNSQJPSAiVmFsdWUgNSIKCgkJYURvY3VtZW50UHJvcGVydGllcy5pbnNlcnRCeU5hbWUgKCBzSXRlbU5hbWVfMSQsIHNGaXJzdFZhbHVlXzEkICkKCQlhRG9jdW1lbnRQcm9wZXJ0aWVzLmluc2VydEJ5TmFtZSAoIHNJdGVtTmFtZV8yJCwgc0ZpcnN0VmFsdWVfMiQgKQoJCWFEb2N1bWVudFByb3BlcnRpZXMuaW5zZXJ0QnlOYW1lICggc0l0ZW1OYW1lXzMkLCBzRmlyc3RWYWx1ZV8zJCApCgkJYURvY3VtZW50UHJvcGVydGllcy5pbnNlcnRCeU5hbWUgKCBzSXRlbU5hbWVfNCQsIHNGaXJzdFZhbHVlXzQkICkKCQlhRG9jdW1lbnRQcm9wZXJ0aWVzLmluc2VydEJ5TmFtZSAoIHNJdGVtTmFtZV81JCwgc0ZpcnN0VmFsdWVfNSQgKQoKCQknIFp1ciBLb250cm9sbGUgZGllIFdlcnRlIGF1c2dlYmVuLiAoTnVyIHdpY2h0aWcsIHdlbm4gZ2Vsb2dndCB3aXJkISkKCQknIERhYmVpIHdpcmQgZGllIE1ldGhvZGUgImdldEVsZW1lbnROYW1lcygpIiBnbGVpY2ggaW1wbGl6aXQgbWl0Z2V0ZXN0ZXQhCgkJU2hvd05hbWVDb250YWluZXIgKCBhRG9jdW1lbnRQcm9wZXJ0aWVzICkKCgkJJyBBYmVyIGF1Y2ggZGllIEFuemFobCBrb250cm9sbGllcmVuLgoJCScgKEhpZXIgd2lyZCBlaW5lIGVpZ2VuZSBCQVNJQy1IaWxmc2Z1bmt0aW9uIHZlcndlbmRldCEga2VpbmUgSW50ZXJmYWNlLU1ldGhvZGUpCgkJaWYgKCBnZXROYW1lQ29udGFpbmVyQ291bnQgKCBhRG9jdW1lbnRQcm9wZXJ0aWVzICkgPD4gNSApIHRoZW4KCQkJRXJyb3JNZXNzYWdlICggImluc2VydEJ5TmFtZSgpIC4uLiBGZWhsZXIgKERlciBOYW1lQ29uYXRpbmVyIGVudGhhZWx0IG5pY2h0IGRpZSBlaW5nZWZ1ZWd0ZW4gNSBFbGVtZW50ZSEpIiApCgkJCWdvdG8gVGVzdF9Ob3JtYWxVc2VfWE5hbWVDb250YWluZXJfRXJyb3IKCQllbmQgaWYKCgkJJyBOdW4gbm9jaCBmZXN0c3RlbGxlbiwgb2IgZGllIDUgZGVubiBhdWNoIHRhdHNhZWNobGljaCB2b3JoYW5kZW4gc2luZC4KCQlpZiAoIGFEb2N1bWVudFByb3BlcnRpZXMuaGFzQnlOYW1lICggc0l0ZW1OYW1lXzEkICkgPSBGQUxTRSApIHRoZW4KCQkJRXJyb3JNZXNzYWdlCSggImhhc0J5TmFtZSgpIC4uLiBGZWhsZXIgW0VsZW1lbnQgMSBuaWNodCB2b3JoYW5kZW4hP10iICkKCQkJZ290byBUZXN0X05vcm1hbFVzZV9YTmFtZUNvbnRhaW5lcl9FcnJvcgoJCWVsc2VpZiAoIGFEb2N1bWVudFByb3BlcnRpZXMuaGFzQnlOYW1lICggc0l0ZW1OYW1lXzIkICkgPSBGQUxTRSApIHRoZW4KCQkJRXJyb3JNZXNzYWdlCSggImhhc0J5TmFtZSgpIC4uLiBGZWhsZXIgW0VsZW1lbnQgMiBuaWNodCB2b3JoYW5kZW4hP10iICkKCQkJZ290byBUZXN0X05vcm1hbFVzZV9YTmFtZUNvbnRhaW5lcl9FcnJvcgoJCWVsc2VpZiAoIGFEb2N1bWVudFByb3BlcnRpZXMuaGFzQnlOYW1lICggc0l0ZW1OYW1lXzMkICkgPSBGQUxTRSApIHRoZW4KCQkJRXJyb3JNZXNzYWdlCSggImhhc0J5TmFtZSgpIC4uLiBGZWhsZXIgW0VsZW1lbnQgMyBuaWNodCB2b3JoYW5kZW4hP10iICkKCQkJZ290byBUZXN0X05vcm1hbFVzZV9YTmFtZUNvbnRhaW5lcl9FcnJvcgoJCWVsc2VpZiAoIGFEb2N1bWVudFByb3BlcnRpZXMuaGFzQnlOYW1lICggc0l0ZW1OYW1lXzQkICkgPSBGQUxTRSApIHRoZW4KCQkJRXJyb3JNZXNzYWdlCSggImhhc0J5TmFtZSgpIC4uLiBGZWhsZXIgW0VsZW1lbnQgNCBuaWNodCB2b3JoYW5kZW4hP10iICkKCQkJZ290byBUZXN0X05vcm1hbFVzZV9YTmFtZUNvbnRhaW5lcl9FcnJvcgoJCWVsc2VpZiAoIGFEb2N1bWVudFByb3BlcnRpZXMuaGFzQnlOYW1lICggc0l0ZW1OYW1lXzUkICkgPSBGQUxTRSApIHRoZW4KCQkJRXJyb3JNZXNzYWdlCSggImhhc0J5TmFtZSgpIC4uLiBGZWhsZXIgW0VsZW1lbnQgNSBuaWNodCB2b3JoYW5kZW4hP10iICkKCQkJZ290byBUZXN0X05vcm1hbFVzZV9YTmFtZUNvbnRhaW5lcl9FcnJvcgoJCWVuZCBpZgoKCQknIERhbm4gZGllIFdlcnRlIHdpZWRlciBhdXNsZXNlbi4KCQlzQ29tcGFyZVZhbHVlXzEkID0gYURvY3VtZW50UHJvcGVydGllcy5nZXRCeU5hbWUgKCBzSXRlbU5hbWVfMSQgKQoJCXNDb21wYXJlVmFsdWVfMiQgPSBhRG9jdW1lbnRQcm9wZXJ0aWVzLmdldEJ5TmFtZSAoIHNJdGVtTmFtZV8yJCApCgkJc0NvbXBhcmVWYWx1ZV8zJCA9IGFEb2N1bWVudFByb3BlcnRpZXMuZ2V0QnlOYW1lICggc0l0ZW1OYW1lXzMkICkKCQlzQ29tcGFyZVZhbHVlXzQkID0gYURvY3VtZW50UHJvcGVydGllcy5nZXRCeU5hbWUgKCBzSXRlbU5hbWVfNCQgKQoJCXNDb21wYXJlVmFsdWVfNSQgPSBhRG9jdW1lbnRQcm9wZXJ0aWVzLmdldEJ5TmFtZSAoIHNJdGVtTmFtZV81JCApCgoJCScgWnVtIFZlcmdsZWljaCBkaWUgV2VydGUgYXVzZ2ViZW4uIChOdXIgd2ljaHRpZywgd2VubiBnZWxvZ2d0IHdpcmQhKQoJCVNob3dOYW1lQ29udGFpbmVyICggYURvY3VtZW50UHJvcGVydGllcyApCgoJCScgRGFubiBkaWUgV2VydGUgYXV0b21hdGlzY2ggdmVyZ2xlaWNoZW4hCgkJaWYgKCBDb21wYXJlT1dTdHJpbmcJCSggc0ZpcnN0VmFsdWVfMSQsIHNDb21wYXJlVmFsdWVfMSQgKSA9IGNEaWZmZXJlbnQgKSB0aGVuCgkJCUVycm9yTWVzc2FnZQkoICJnZXRCeU5hbWUoKSAuLi4gRmVobGVyIFtFbGVtZW50IDEgZmVobGVyaGFmdF0iICkKCQkJZ290byBUZXN0X05vcm1hbFVzZV9YTmFtZUNvbnRhaW5lcl9FcnJvcgoJCWVsc2VpZiAoIENvbXBhcmVPV1N0cmluZwkoIHNGaXJzdFZhbHVlXzIkLCBzQ29tcGFyZVZhbHVlXzIkICkgPSBjRGlmZmVyZW50ICkgdGhlbgoJCQlFcnJvck1lc3NhZ2UJKCAiZ2V0QnlOYW1lKCkgLi4uIEZlaGxlciBbRWxlbWVudCAyIGZlaGxlcmhhZnRdIiApCgkJCWdvdG8gVGVzdF9Ob3JtYWxVc2VfWE5hbWVDb250YWluZXJfRXJyb3IKCQllbHNlaWYgKCBDb21wYXJlT1dTdHJpbmcJKCBzRmlyc3RWYWx1ZV8zJCwgc0NvbXBhcmVWYWx1ZV8zJCApID0gY0RpZmZlcmVudCApIHRoZW4KCQkJRXJyb3JNZXNzYWdlCSggImdldEJ5TmFtZSgpIC4uLiBGZWhsZXIgW0VsZW1lbnQgMyBmZWhsZXJoYWZ0XSIgKQoJCQlnb3RvIFRlc3RfTm9ybWFsVXNlX1hOYW1lQ29udGFpbmVyX0Vycm9yCgkJZWxzZWlmICggQ29tcGFyZU9XU3RyaW5nCSggc0ZpcnN0VmFsdWVfNCQsIHNDb21wYXJlVmFsdWVfNCQgKSA9IGNEaWZmZXJlbnQgKSB0aGVuCgkJCUVycm9yTWVzc2FnZQkoICJnZXRCeU5hbWUoKSAuLi4gRmVobGVyIFtFbGVtZW50IDQgZmVobGVyaGFmdF0iICkKCQkJZ290byBUZXN0X05vcm1hbFVzZV9YTmFtZUNvbnRhaW5lcl9FcnJvcgoJCWVsc2VpZiAoIENvbXBhcmVPV1N0cmluZwkoIHNGaXJzdFZhbHVlXzUkLCBzQ29tcGFyZVZhbHVlXzUkICkgPSBjRGlmZmVyZW50ICkgdGhlbgoJCQlFcnJvck1lc3NhZ2UJKCAiZ2V0QnlOYW1lKCkgLi4uIEZlaGxlciBbRWxlbWVudCA1IGZlaGxlcmhhZnRdIiApCgkJCWdvdG8gVGVzdF9Ob3JtYWxVc2VfWE5hbWVDb250YWluZXJfRXJyb3IKCQllbmQgaWYKCgkJSW5mb01lc3NhZ2UJKCAiZ2V0QnlOYW1lKCkgLi4uIE9LIiApCgoJCScgSmV0enQgd2lyZCB2ZXJzdWNodCBlaW5pZ2UgZGVyIEVsZW1lbnRlIGluIGlocmVtIFdlcnQgenUgdmVyYWVuZGVybi4KCQlzTmV3VmFsdWVfMSQJPSAiTmV3VmFsdWUgMSIKCQlzTmV3VmFsdWVfMiQJPSAiTmV3VmFsdWUgMiIKCQlzTmV3VmFsdWVfMyQJPSAiTmV3VmFsdWUgMyIKCQlzTmV3VmFsdWVfNCQJPSAiTmV3VmFsdWUgNCIKCQlzTmV3VmFsdWVfNSQJPSAiTmV3VmFsdWUgNSIKCgkJYURvY3VtZW50UHJvcGVydGllcy5yZXBsYWNlQnlOYW1lICggc0l0ZW1OYW1lXzEkLCBzTmV3VmFsdWVfMSQgKQoJCWFEb2N1bWVudFByb3BlcnRpZXMucmVwbGFjZUJ5TmFtZSAoIHNJdGVtTmFtZV8yJCwgc05ld1ZhbHVlXzIkICkKCQlhRG9jdW1lbnRQcm9wZXJ0aWVzLnJlcGxhY2VCeU5hbWUgKCBzSXRlbU5hbWVfMyQsIHNOZXdWYWx1ZV8zJCApCgkJYURvY3VtZW50UHJvcGVydGllcy5yZXBsYWNlQnlOYW1lICggc0l0ZW1OYW1lXzQkLCBzTmV3VmFsdWVfNCQgKQoJCWFEb2N1bWVudFByb3BlcnRpZXMucmVwbGFjZUJ5TmFtZSAoIHNJdGVtTmFtZV81JCwgc05ld1ZhbHVlXzUkICkKCgkJJyBadXIgS29udHJvbGxlIGRpZSBXZXJ0ZSBhdXNnZWJlbi4gKE51ciB3aWNodGlnLCB3ZW5uIGdlbG9nZ3Qgd2lyZCEpCgkJU2hvd05hbWVDb250YWluZXIgKCBhRG9jdW1lbnRQcm9wZXJ0aWVzICkKCgkJJyBEYW5uIGRpZSBXZXJ0ZSB3aWVkZXIgYXVzbGVzZW4uCgkJc0NvbXBhcmVWYWx1ZV8xJCA9IGFEb2N1bWVudFByb3BlcnRpZXMuZ2V0QnlOYW1lICggc0l0ZW1OYW1lXzEkICkKCQlzQ29tcGFyZVZhbHVlXzIkID0gYURvY3VtZW50UHJvcGVydGllcy5nZXRCeU5hbWUgKCBzSXRlbU5hbWVfMiQgKQoJCXNDb21wYXJlVmFsdWVfMyQgPSBhRG9jdW1lbnRQcm9wZXJ0aWVzLmdldEJ5TmFtZSAoIHNJdGVtTmFtZV8zJCApCgkJc0NvbXBhcmVWYWx1ZV80JCA9IGFEb2N1bWVudFByb3BlcnRpZXMuZ2V0QnlOYW1lICggc0l0ZW1OYW1lXzQkICkKCQlzQ29tcGFyZVZhbHVlXzUkID0gYURvY3VtZW50UHJvcGVydGllcy5nZXRCeU5hbWUgKCBzSXRlbU5hbWVfNSQgKQoKCQknIFp1bSBWZXJnbGVpY2ggZGllIFdlcnRlIGF1c2dlYmVuLiAoTnVyIHdpY2h0aWcsIHdlbm4gZ2Vsb2dndCB3aXJkISkKCQlTaG93TmFtZUNvbnRhaW5lciAoIGFEb2N1bWVudFByb3BlcnRpZXMgKQoKCQknIERhbm4gZGllIFdlcnRlIGF1dG9tYXRpc2NoIHZlcmdsZWljaGVuIQoJCWlmICggQ29tcGFyZU9XU3RyaW5nCQkoIHNOZXdWYWx1ZV8xJCwgc0NvbXBhcmVWYWx1ZV8xJCApID0gY0RpZmZlcmVudCApIHRoZW4KCQkJRXJyb3JNZXNzYWdlCSggInJlcGxhY2VCeU5hbWUoKSAuLi4gRmVobGVyIFtFbGVtZW50IDEgZmVobGVyaGFmdF0iICkKCQkJZ290byBUZXN0X05vcm1hbFVzZV9YTmFtZUNvbnRhaW5lcl9FcnJvcgoJCWVsc2VpZiAoIENvbXBhcmVPV1N0cmluZwkoIHNOZXdWYWx1ZV8yJCwgc0NvbXBhcmVWYWx1ZV8yJCApID0gY0RpZmZlcmVudCApIHRoZW4KCQkJRXJyb3JNZXNzYWdlCSggInJlcGxhY2VCeU5hbWUoKSAuLi4gRmVobGVyIFtFbGVtZW50IDIgZmVobGVyaGFmdF0iICkKCQkJZ290byBUZXN0X05vcm1hbFVzZV9YTmFtZUNvbnRhaW5lcl9FcnJvcgoJCWVsc2VpZiAoIENvbXBhcmVPV1N0cmluZwkoIHNOZXdWYWx1ZV8zJCwgc0NvbXBhcmVWYWx1ZV8zJCApID0gY0RpZmZlcmVudCApIHRoZW4KCQkJRXJyb3JNZXNzYWdlCSggInJlcGxhY2VCeU5hbWUoKSAuLi4gRmVobGVyIFtFbGVtZW50IDMgZmVobGVyaGFmdF0iICkKCQkJZ290byBUZXN0X05vcm1hbFVzZV9YTmFtZUNvbnRhaW5lcl9FcnJvcgoJCWVsc2VpZiAoIENvbXBhcmVPV1N0cmluZwkoIHNOZXdWYWx1ZV80JCwgc0NvbXBhcmVWYWx1ZV80JCApID0gY0RpZmZlcmVudCApIHRoZW4KCQkJRXJyb3JNZXNzYWdlCSggInJlcGxhY2VCeU5hbWUoKSAuLi4gRmVobGVyIFtFbGVtZW50IDQgZmVobGVyaGFmdF0iICkKCQkJZ290byBUZXN0X05vcm1hbFVzZV9YTmFtZUNvbnRhaW5lcl9FcnJvcgoJCWVsc2VpZiAoIENvbXBhcmVPV1N0cmluZwkoIHNOZXdWYWx1ZV81JCwgc0NvbXBhcmVWYWx1ZV81JCApID0gY0RpZmZlcmVudCApIHRoZW4KCQkJRXJyb3JNZXNzYWdlCSggInJlcGxhY2VCeU5hbWUoKSAuLi4gRmVobGVyIFtFbGVtZW50IDUgZmVobGVyaGFmdF0iICkKCQkJZ290byBUZXN0X05vcm1hbFVzZV9YTmFtZUNvbnRhaW5lcl9FcnJvcgoJCWVuZCBpZgoKCQlJbmZvTWVzc2FnZQkoICJyZXBsYWNlQnlOYW1lKCkgLi4uIE9LIiApCgoJCScgSGllciBzb2xsZW4gZWluaWdlIGRlciA1IEVpbnRyYWVnZSBnZWxvZXNjaHQgd2VyZGVuLgoJCWFEb2N1bWVudFByb3BlcnRpZXMucmVtb3ZlQnlOYW1lICggc0l0ZW1OYW1lXzEkICkKCQlhRG9jdW1lbnRQcm9wZXJ0aWVzLnJlbW92ZUJ5TmFtZSAoIHNJdGVtTmFtZV8zJCApCgoJCScgRGFubiB3aWVkZXIgZGllIEFuemFobCBrb250cm9sbGllcmVuLgoJCScgKEhpZXIgd2lyZCBlaW5lIGVpZ2VuZSBCQVNJQy1IaWxmc2Z1bmt0aW9uIHZlcndlbmRldCEga2VpbmUgSW50ZXJmYWNlLU1ldGhvZGUpCgkJaWYgKCBnZXROYW1lQ29udGFpbmVyQ291bnQgKCBhRG9jdW1lbnRQcm9wZXJ0aWVzICkgPD4gMyApIHRoZW4KCQkJRXJyb3JNZXNzYWdlICggInJlbW92ZUJ5TmFtZSgpIC4uLiBGZWhsZXIgKERlciBOYW1lQ29uYXRpbmVyIGVudGhhZWx0IG5pY2h0IGRpZSBlcndhcnRldGVuIDMgRWxlbWVudGUhKSIgKQoJCQlnb3RvIFRlc3RfTm9ybWFsVXNlX1hOYW1lQ29udGFpbmVyX0Vycm9yCgkJZW5kIGlmCgoJCScgTnVuIG5vY2ggZmVzdHN0ZWxsZW4sIG9iIGRpZSByZXN0bGljaGVuIDMgZGVubiBhdWNoIHRhdHNhZWNobGljaCBkaWUgcmljaHRpZ2VuIHNpbmQuCgkJaWYgKCBhRG9jdW1lbnRQcm9wZXJ0aWVzLmhhc0J5TmFtZSAoIHNJdGVtTmFtZV8yJCApID0gRkFMU0UgKSB0aGVuCgkJCUVycm9yTWVzc2FnZQkoICJyZW1vdmVCeU5hbWUoKSAuLi4gRmVobGVyIFtFbGVtZW50IDIgbmljaHQgdm9yaGFuZGVuIT9dIiApCgkJCWdvdG8gVGVzdF9Ob3JtYWxVc2VfWE5hbWVDb250YWluZXJfRXJyb3IKCQllbHNlaWYgKCBhRG9jdW1lbnRQcm9wZXJ0aWVzLmhhc0J5TmFtZSAoIHNJdGVtTmFtZV80JCApID0gRkFMU0UgKSB0aGVuCgkJCUVycm9yTWVzc2FnZQkoICJyZW1vdmVCeU5hbWUoKSAuLi4gRmVobGVyIFtFbGVtZW50IDQgbmljaHQgdm9yaGFuZGVuIT9dIiApCgkJCWdvdG8gVGVzdF9Ob3JtYWxVc2VfWE5hbWVDb250YWluZXJfRXJyb3IKCQllbHNlaWYgKCBhRG9jdW1lbnRQcm9wZXJ0aWVzLmhhc0J5TmFtZSAoIHNJdGVtTmFtZV81JCApID0gRkFMU0UgKSB0aGVuCgkJCUVycm9yTWVzc2FnZQkoICJyZW1vdmVCeU5hbWUoKSAuLi4gRmVobGVyIFtFbGVtZW50IDUgbmljaHQgdm9yaGFuZGVuIT9dIiApCgkJCWdvdG8gVGVzdF9Ob3JtYWxVc2VfWE5hbWVDb250YWluZXJfRXJyb3IKCQllbmQgaWYKCgkJJyBadXIgS29udHJvbGxlIGRpZSBXZXJ0ZSBub2NobWFscyBhdXNnZWJlbi4gKE51ciB3aWNodGlnLCB3ZW5uIGdlbG9nZ3Qgd2lyZCEpCgkJU2hvd05hbWVDb250YWluZXIgKCBhRG9jdW1lbnRQcm9wZXJ0aWVzICkKCgkJSW5mb01lc3NhZ2UJKCAicmVtb3ZlQnlOYW1lKCkgLi4uIE9LIiApCgoJCScgRGVyIFRlc3Qgd2FyIGVyZm9sZ3JlaWNoISBNZWxkdW5nIGF1c2dlYmVuIHVuZCB6dXJ1ZWNrIHptIEF1ZnJ1ZmVyLgoJCScgQXVzc2NoYWx0ZW4gZGVyIEZlaGxlcmJlaGFuZGx1bmcKCQlvbiBFcnJvciBnb3RvIDAKCQknIE1lbGR1bmcgYXVzZ2ViZW4KCQlJbmZvTWVzc2FnZSAoICJUZXN0X05vcm1hbFVzZV9YTmFtZUNvbnRhaW5lciAuLi4gW2VuZGVdIiApCgkJJyBTdGF0dXMgc2V0emVuCgkJVGVzdF9Ob3JtYWxVc2VfWE5hbWVDb250YWluZXIgPSBjT0sKCQknIFVuZCBGdW5rdGlvbiBiZWVuZGVuCgkJRXhpdCBGdW5jdGlvbgoKJyBFcyBpc3QgZWluIHVuZXJ3YXJ0ZXRlIEZlaGxlciBhdWZnZXRyZXRlbiEgKEV4Y2VwdGlvbiAuLi4pCicgTWVsZHVuZyBhdXNnZWJlbiB1bmQgbWl0IEZlaGxlciB6dXJ1ZWNra2VocmVuLgpUZXN0X05vcm1hbFVzZV9YTmFtZUNvbnRhaW5lcl9FcnJvcjoKCQknIEF1c3NjaGFsdGVuIGRlciBGZWhsZXJiZWhhbmRsdW5nCgkJb24gRXJyb3IgZ290byAwCgkJJyBNZWxkdW5nIGF1c2dlYmVuCgkJRXJyb3JNZXNzYWdlICggIlRlc3RfTm9ybWFsVXNlX1hOYW1lQ29udGFpbmVyIC4uLiBbRXJyb3JdIiApCgkJJyB1bmQgRmVobGVyc3RhdHVzIHNldHplbgoJCVRlc3RfTm9ybWFsVXNlX1hOYW1lQ29udGFpbmVyID0gY0Vycm9yCgkJJyBBYmJydWNoIGRlciBGdW5rdGlvbiBlcnp3aW5nZW4hCgkJRXhpdCBGdW5jdGlvbgoKRW5kIEZ1bmN0aW9uCgonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQonIFRlc3RtZXRob2RlOiBUZXN0ZW4gZGVzIHVudGVyc3R1ZXR6dGVuIEludGVyZmFjZXMgIlhQZXJzaXN0IiB1bnRlciBub3JtYWxlbiBCZWRpbmd1bmdlbgonCicgUmV0dXJud2VydCA9IGNPSwkJOyB3ZW5uIGRlciBUZXN0IGVyZm9sZ3JlaWNoIHdhcgonIFJldHVybndlcnQgPSBjRXJyb3IJOyB3ZW5uIHNpY2ggZGFzIE9iamVrdCBuaWNodCBrb3JyZWt0IHZlcmhhbHRlbiBoYXQKJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRnVuY3Rpb24gVGVzdF9Ob3JtYWxVc2VfWFBlcnNpc3QgKCBhRG9jdW1lbnRQcm9wZXJ0aWVzICkgYXMgQm9vbGVhbgoKCQknIEVpbnNjaGFsdGVuIGRlciBGZWhsZXJiZWhhbmRsdW5nLCB1bSBFeGNlcHRpb25zIG9kZXIgYWVobmxpY2hlcyBhYnp1ZmFuZ2VuIQoJCW9uIEVycm9yIGdvdG8gVGVzdF9Ob3JtYWxVc2VfWFBlcnNpc3RfRXJyb3IKCgkJSW5mb01lc3NhZ2UgKCAiVGVzdF9Ob3JtYWxVc2VfWFBlcnNpc3QgLi4uIFtzdGFydF0iICkKCgkJJyBMYWRlbiBkZXIgUHJvcGVydGllcyBhdXMgZWluZXIgRGF0ZWkKCQlhRG9jdW1lbnRQcm9wZXJ0aWVzLnJlYWQgKCBjVGVzdFBhdGggKyAiVGVzdERlYnVnX2luLnNkdyIgKQoKCQknIFp1ciBLb250cm9sbGUgYW56ZWlnZW4KCQlTaG93UHJvcGVydGllcyAoIGFEb2N1bWVudFByb3BlcnRpZXMgKQoKCQknIFNwZWljaGVybiBkZXIgUHJvcGVydGllcyBpbiBlaW5lciBuZXVlbiBEYXRlaQoJCWFEb2N1bWVudFByb3BlcnRpZXMud3JpdGUJKCBjVGVzdFBhdGggKyAiVGVzdERlYnVnX091dC5zZHciICkKCQlhRG9jdW1lbnRQcm9wZXJ0aWVzLnJlYWQJKCBjVGVzdFBhdGggKyAiVGVzdERlYnVnX091dC5zZHciICkKCgkJJyBadXIgS29udHJvbGxlIGFuemVpZ2VuCgkJU2hvd1Byb3BlcnRpZXMgKCBhRG9jdW1lbnRQcm9wZXJ0aWVzICkKCgkJJyBEZXIgVGVzdCB3YXIgZXJmb2xncmVpY2ghIE1lbGR1bmcgYXVzZ2ViZW4gdW5kIHp1cnVlY2sgem0gQXVmcnVmZXIuCgkJJyBBdXNzY2hhbHRlbiBkZXIgRmVobGVyYmVoYW5kbHVuZwoJCW9uIEVycm9yIGdvdG8gMAoJCScgTWVsZHVuZyBhdXNnZWJlbgoJCUluZm9NZXNzYWdlICggIlRlc3RfTm9ybWFsVXNlX1hQZXJzaXN0IC4uLiBbZW5kZV0iICkKCQknIFN0YXR1cyBzZXR6ZW4KCQlUZXN0X05vcm1hbFVzZV9YUGVyc2lzdCA9IGNPSwoJCScgVW5kIEZ1bmt0aW9uIGJlZW5kZW4KCQlFeGl0IEZ1bmN0aW9uCgonIEVzIGlzdCBlaW4gdW5lcndhcnRldGUgRmVobGVyIGF1ZmdldHJldGVuISAoRXhjZXB0aW9uIC4uLikKJyBNZWxkdW5nIGF1c2dlYmVuIHVuZCBtaXQgRmVobGVyIHp1cnVlY2trZWhyZW4uClRlc3RfTm9ybWFsVXNlX1hQZXJzaXN0X0Vycm9yOgoJCScgQXVzc2NoYWx0ZW4gZGVyIEZlaGxlcmJlaGFuZGx1bmcKCQlvbiBFcnJvciBnb3RvIDAKCQknIE1lbGR1bmcgYXVzZ2ViZW4KCQlFcnJvck1lc3NhZ2UgKCAiVGVzdF9Ob3JtYWxVc2VfWFBlcnNpc3QgLi4uIFtFcnJvcl0iICkKCQknIHVuZCBGZWhsZXJzdGF0dXMgc2V0emVuCgkJVGVzdF9Ob3JtYWxVc2VfWFBlcnNpc3QgPSBjRXJyb3IKCQknIEFiYnJ1Y2ggZGVyIEZ1bmt0aW9uIGVyendpbmdlbiEKCQlFeGl0IEZ1bmN0aW9uCgpFbmQgRnVuY3Rpb24KCicqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgonIEhpbGZzZnVua3Rpb25lbiB1bmQgLW1ldGhvZGVuCicqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJyBIaWxmc21ldGhvZGU6IE9lZmZuZXQgZGllIExPRy1EYXRlaS4KJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3ViIE9wZW5MT0cgKCBzRmlsZU5hbWUkICkKCQlpZiAoIGJMT0dPbiA9IGNPbiApIHRoZW4KCQkJc0xPR0ZpbGVOYW1lJAk9IHNGaWxlTmFtZSQKCQkJbkxPR0ZpbGVIYW5kbGUlCT0gRnJlZUZpbGUKCQkJb3BlbiBzTE9HRmlsZU5hbWUkIGZvciBvdXRwdXQgYXMgbkxPR0ZpbGVIYW5kbGUlCgkJZW5kIGlmCkVuZCBTdWIKCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCicgSGlsZnNtZXRob2RlOiBTY2hsaWVzc3QgZGllIExPRy1EYXRlaS4KJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3ViIENsb3NlTE9HCgkJaWYgKCBiTE9HT24gPSBjT24gKSB0aGVuCgkJCWNsb3NlICNuTE9HRmlsZUhhbmRsZSUKCQllbmQgaWYKRW5kIFN1YgoKJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJyBIaWxmc21ldGhvZGU6IEdpYnQgZWluZW4gVGV4dCBpbiBlaW5lciBMT0ctRGF0ZWkgYXVzLgonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdWIgV3JpdGVMT0cgKCBzTWVzc2FnZSQgKQoJCWlmICggYkxPR09uID0gY09uICkgdGhlbgoJCQlXcml0ZSAjbkxPR0ZpbGVIYW5kbGUlIHNNZXNzYWdlJAoJCWVuZCBpZgpFbmQgU3ViCgonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQonIEhpbGZzbWV0aG9kZTogR2lidCBlaW5lIE1lc3NhZ2VCb3ggbWl0IEZlaGxlcnRleHQsIFplaWxlbm51bW1lciB1bmQgV2FybnNjaGlsZCBhdXMuCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1YiBFcnJvck1lc3NhZ2UgKCBzTWVzc2FnZSQgKQoJCScgRW50d2VkZXIgaW4gZGllIExPRy1EYXRlaSBzY2hyZWliZW4gb2RlciBlaW5lIE1lc3NhZ2VCb3ggYW56ZWlnZW4uCgkJaWYgKCBiTE9HT24gPSBjT24gKSB0aGVuCgkJCVdyaXRlTE9HICggc01lc3NhZ2UkICkKCQllbHNlCgkJCU1zZ0JveCAoIHNNZXNzYWdlJCwgMTYgKQoJCWVuZCBpZgpFbmQgU3ViCgonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQonIEhpbGZzbWV0aG9kZTogR2lidCBlaW5lIEhpbndlaXNib3ggYXVzLgonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdWIgSW5mb01lc3NhZ2UgKCBzTWVzc2FnZSQgKQoJCScgTnVyIHdhcyBhbnplaWdlbiwgd2VubiBOdXR6ZXIgZXMgd3VlbnNjaHQhCgkJaWYgKCBiU2hvd0Vycm9yc09ubHkgPSBjT2ZmICkgdGhlbgoJCQknIEFuc29uc3RlbiB3aXJkIGVudHdlZGVyIGluIGRpZSBMT0ctRGF0ZWkgZ2VzY2hyaWViZW4gb2RlciBlaW5lIE1lc3NhZ2VCb3ggYW5nZXplaWd0LgoJCQlpZiAoIGJMT0dPbiA9IGNPbiApIHRoZW4KCQkJCVdyaXRlTE9HICggc01lc3NhZ2UkICkKCQkJZWxzZQoJCQkJTXNnQm94ICggc01lc3NhZ2UkLCA2NCApCgkJCWVuZCBpZgoJCWVuZCBpZgpFbmQgU3ViCgonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQonIEhpbGZzZnVua3Rpb246IFZlcmdsZWljaHQgendlaSBPV1N0cmluZy1XZXJ0ZQonCicgUmV0dXJud2VydCA9IGNFcXVhbAkJOyB3ZW5uIFdlcnRlIGlkZW50aXNjaCBzaW5kCicgUmV0dXJud2VydCA9IGNEaWZmZXJlbnQJOyB3ZW5uIFdlcnRlIHZlcnNjaGllZGVuIHNpbmQKJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRnVuY3Rpb24gQ29tcGFyZU9XU3RyaW5nICggc09XU3RyaW5nXzEkLCBzT1dTdHJpbmdfMiQgKSBhcyBCb29sZWFuCgoJCWlmICggc09XU3RyaW5nXzEkID0gc09XU3RyaW5nXzIkICkgdGhlbgoJCQlDb21wYXJlT1dTdHJpbmcgPSBjRXF1YWwKCQllbHNlCgkJCUNvbXBhcmVPV1N0cmluZyA9IGNEaWZmZXJlbnQKCQllbmQgaWYKCkVuZCBGdW5jdGlvbgoKJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJyBIaWxmc2Z1bmt0aW9uOiBWZXJnbGVpY2h0IHp3ZWkgRGF0ZVRpbWUtU3RydWt0dXJlbgonCicgUmV0dXJud2VydCA9IGNFcXVhbAkJOyB3ZW5uIFdlcnRlIGlkZW50aXNjaCBzaW5kCicgUmV0dXJud2VydCA9IGNEaWZmZXJlbnQJOyB3ZW5uIFdlcnRlIHZlcnNjaGllZGVuIHNpbmQKJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRnVuY3Rpb24gQ29tcGFyZURhdGVUaW1lICggYURhdGVUaW1lXzEsIGFEYXRlVGltZV8yICkgYXMgQm9vbGVhbgoKCQlpZiAoIGFEYXRlVGltZV8xLkRheSA9IGFEYXRlVGltZV8yLkRheSBhbmQgYURhdGVUaW1lXzEuTW9udGggPSBhRGF0ZVRpbWVfMi5Nb250aCBhbmQgYURhdGVUaW1lXzEuWWVhciA9IGFEYXRlVGltZV8yLlllYXIgYW5kIGFEYXRlVGltZV8xLkhvdXJzID0gYURhdGVUaW1lXzEuSG91cnMgYW5kIGFEYXRlVGltZV8xLk1pbnV0ZXMgPSBhRGF0ZVRpbWVfMS5NaW51dGVzIGFuZCBhRGF0ZVRpbWVfMS5TZWNvbmRzID0gYURhdGVUaW1lXzEuU2Vjb25kcyBhbmQgYURhdGVUaW1lXzEuSHVuZHJlZHRoU2Vjb25kcyA9IGFEYXRlVGltZV8xLkh1bmRyZWR0aFNlY29uZHMgKSB0aGVuCgkJCUNvbXBhcmVEYXRlVGltZSA9IGNFcXVhbAoJCWVsc2UKCQkJQ29tcGFyZURhdGVUaW1lID0gY0RpZmZlcmVudAoJCWVuZCBpZgoKRW5kIEZ1bmN0aW9uCgonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQonIEhpbGZzZnVua3Rpb246IFZlcmdsZWljaHQgendlaSBCeXRlU2VxdWVuY2UncwonCicgUmV0dXJud2VydCA9IGNFcXVhbAkJOyB3ZW5uIFdlcnRlIGlkZW50aXNjaCBzaW5kCicgUmV0dXJud2VydCA9IGNEaWZmZXJlbnQJOyB3ZW5uIFdlcnRlIHZlcnNjaGllZGVuIHNpbmQKJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRnVuY3Rpb24gQ29tcGFyZUJ5dGVTZXF1ZW5jZSAoIHNlcUJ5dGVTZXF1ZW5jZV8xLCBzZXFCeXRlU2VxdWVuY2VfMiApIGFzIEJvb2xlYW4KCgkJJyBXZW5uIGJlaWRlIGxlZXIgc2luZCwgc2luZCBzaWUgYXVjaCBpZGVudGlzY2ggIQoJCScgRGllc2VyIFRlc3QgbWl0ICJJc0FycmF5IiBpc3Qgbm9ldGlnLCBkYSBiZWkgZWluZW0gbGVlcmVuIEFycmF5IGRpZQoJCScgRnVua3Rpb24gIlVCb3VuZCIgZWluZW4gRmVobGVyIHByb2R1emllcnQhCgkJaWYgKCBJc0FycmF5ICggc2VxQnl0ZVNlcXVlbmNlXzEgKSA9IEZBTFNFIGFuZCBJc0FycmF5ICggc2VxQnl0ZVNlcXVlbmNlXzIgKSA9IEZBTFNFICkgdGhlbgoJCQlDb21wYXJlQnl0ZVNlcXVlbmNlID0gY0VxdWFsCgkJCUV4aXQgRnVuY3Rpb24KCQllbmQgaWYKCgkJJyBXZW5uIGplZG9jaCBudXIgZWluZSBsZWVyIGlzdCwgZGFubiBzaW5kIHNpZSBuaWNodCBpZGVudGlzY2guCgkJaWYgKCBJc0FycmF5ICggc2VxQnl0ZVNlcXVlbmNlXzEgKSA9IEZBTFNFICkgb3IgKCBJc0FycmF5ICggc2VxQnl0ZVNlcXVlbmNlXzIgKSA9IEZBTFNFICkgdGhlbgoJCQlDb21wYXJlQnl0ZVNlcXVlbmNlID0gY0RpZmZlcmVudAoJCQlFeGl0IEZ1bmN0aW9uCgkJZW5kIGlmCgoJCScgQmVzb3JnZW4gZGVyIEFuemFobCBkZXIgRWxlbWVudGUgZGVyIFNlcXVlbmNlcwoJCW5FbGVtZW50Q291bnRfMSUJPQlVQm91bmQgKCBzZXFCeXRlU2VxdWVuY2VfMSApCgkJbkVsZW1lbnRDb3VudF8yJQk9CVVCb3VuZCAoIHNlcUJ5dGVTZXF1ZW5jZV8yICkKCgkJJyBXZW5uIGRpZXNlIEFuemFobCBzY2hvbiB2ZXJzY2hpZWRlbiBpc3QsIGRhbm4gLi4uCgkJaWYgKCBuRWxlbWVudENvdW50XzElIDw+IG5FbGVtZW50Q291bnRfMiUgKSB0aGVuCgkJCScgLi4uIHNpbmQgZGllIFNlcXVlbmNlcyB3b2hsIHZlcnNjaGllZGVuLgoJCQlDb21wYXJlQnl0ZVNlcXVlbmNlID0gY0RpZmZlcmVudAoJCQknIERpZSBFbGVtZW50IGJyYXVjaGVuIGRhbm4gbmljaHQgbWVociB2ZXJnbGljaGVuIHp1IHdlcmRlbi4KCQkJRXhpdCBGdW5jdGlvbgoJCWVuZCBpZgoKCQknIEFuc29uc3RlbiB3ZXJkZW4gZGllIEVsZW1lbnRlIGVpbnplbG4gbWl0ZWluYW5kZXIgdmVyZ2xpY2hlbi4KCQlmb3IgbkNvdW50ZXIlPTAgdG8gbkVsZW1lbnRDb3VudF8xJSBzdGVwIDEKCQkJJyBXZW5uIGF1Y2ggbnVyIGVpbiBwYWFyIGRhdm9uIHZlcnNjaGllZGVuIGlzdCwgZGFubiAuLi4KCQkJaWYgKCBuRWxlbWVudENvdW50XzElKG5Db3VudGVyJSkgPD4gbkVsZW1lbnRDb3VudF8yJShuQ291bnRlciUpICkgdGhlbgoJCQkJJyAuLi4ga2FubiBkZXIgVmVyZ2xlaWNoIGFiZ2Vicm9jaGVuIHdlcmRlbiEKCQkJCUNvbXBhcmVCeXRlU2VxdWVuY2UgPSBjRGlmZmVyZW50CgkJCQlFeGl0IEZ1bmN0aW9uCgkJCWVuZCBpZgoJCW5leHQgbkNvdW50ZXIlCgoJCScgV2VubiBtYW4gYmlzIGhpZXIgZ2Vrb21tZW4gaXN0LCBkYW5uIHNpbmQgZGllIFNlcXVlbmNlcyBpZGVudGlzY2guCgkJQ29tcGFyZUJ5dGVTZXF1ZW5jZSA9IGNFcXVhbAoKRW5kIEZ1bmN0aW9uCgonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQonIEhpbGZzZnVua3Rpb246IFZlcmdsZWljaHQgendlaSBJbnQxNi1XZXJ0ZQonCicgUmV0dXJud2VydCA9IGNFcXVhbAkJOyB3ZW5uIFdlcnRlIGlkZW50aXNjaCBzaW5kCicgUmV0dXJud2VydCA9IGNEaWZmZXJlbnQJOyB3ZW5uIFdlcnRlIHZlcnNjaGllZGVuIHNpbmQKJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRnVuY3Rpb24gQ29tcGFyZUludDE2ICggbkludDE2XzElLCBuSW50MTZfMiUgKSBhcyBCb29sZWFuCgoJCWlmICggbkludDE2XzElID0gbkludDE2XzIlICkgdGhlbgoJCQlDb21wYXJlSW50MTYgPSBjRXF1YWwKCQllbHNlCgkJCUNvbXBhcmVJbnQxNiA9IGNEaWZmZXJlbnQKCQllbmQgaWYKCkVuZCBGdW5jdGlvbgoKJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJyBIaWxmc2Z1bmt0aW9uOiBWZXJnbGVpY2h0IHp3ZWkgSW50MzItV2VydGUKJwonIFJldHVybndlcnQgPSBjRXF1YWwJCTsgd2VubiBXZXJ0ZSBpZGVudGlzY2ggc2luZAonIFJldHVybndlcnQgPSBjRGlmZmVyZW50CTsgd2VubiBXZXJ0ZSB2ZXJzY2hpZWRlbiBzaW5kCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZ1bmN0aW9uIENvbXBhcmVJbnQzMiAoIG5JbnQzMl8xJiwgbkludDMyXzImICkgYXMgQm9vbGVhbgoKCQlpZiAoIG5JbnQzMl8xJiA9IG5JbnQzMl8yJiApIHRoZW4KCQkJQ29tcGFyZUludDMyID0gY0VxdWFsCgkJZWxzZQoJCQlDb21wYXJlSW50MzIgPSBjRGlmZmVyZW50CgkJZW5kIGlmCgpFbmQgRnVuY3Rpb24KCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCicgSGlsZnNmdW5rdGlvbjogVmVyZ2xlaWNodCB6d2VpIEJvb2wtV2VydGUKJwonIFJldHVybndlcnQgPSBjRXF1YWwJCTsgd2VubiBXZXJ0ZSBpZGVudGlzY2ggc2luZAonIFJldHVybndlcnQgPSBjRGlmZmVyZW50CTsgd2VubiBXZXJ0ZSB2ZXJzY2hpZWRlbiBzaW5kCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZ1bmN0aW9uIENvbXBhcmVCb29sICggYkJvb2xfMSwgYkJvb2xfMiApIGFzIEJvb2xlYW4KCgkJaWYgKCBiQm9vbF8xID0gYkJvb2xfMiApIHRoZW4KCQkJQ29tcGFyZUJvb2wgPSBjRXF1YWwKCQllbHNlCgkJCUNvbXBhcmVCb29sID0gY0RpZmZlcmVudAoJCWVuZCBpZgoKRW5kIEZ1bmN0aW9uCgonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQonIEhpbGZzZnVua3Rpb246IFZlcmdsZWljaHQgZGllIFByb3BlcnRpZXMgendlaWVyIE9iamVrdGUgdW0gVW50ZXJzY2hpZWRlIGZlc3R6dXN0ZWxsZW4uCicKJyBSZXR1cm53ZXJ0ID0gY0VxdWFsCQk7IHdlbm4gT2JqZWt0ZSB2b24gZGVuIFByb3BlcnRpZXMgaGVyIGlkZW50aXNjaCBzaW5kCicgUmV0dXJud2VydCA9IGNEaWZmZXJlbnQJOyB3ZW5uIE9iamVrdGUgdm9uIGRlbiBQcm9wZXJ0aWVzIGhlciB2ZXJzY2hpZWRlbiBzaW5kCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZ1bmN0aW9uIENvbXBhcmVEb2N1bWVudFByb3BlcnRpZXMgKCBhRG9jdW1lbnRQcm9wZXJ0aWVzXzEsIGFEb2N1bWVudFByb3BlcnRpZXNfMiApIGFzIEJvb2xlYW4KCgkJJyBCZXNvcmdlbiBkZXIgV2VydGUgdW5kIHp3aXNjaGVuc3BlaWNoZXJuIChiZXpvZ2VuIGF1ZiBPYmpla3QgMSkKCQlzQXV0aG9yXzEkCQkJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMS5nZXRQcm9wZXJ0eVZhbHVlICggIkF1dGhvciIJCQkJCQkpCgkJYkF1dG9sb2FkRW5hYmxlZF8xCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzXzEuZ2V0UHJvcGVydHlWYWx1ZSAoICJBdXRvbG9hZEVuYWJsZWQiCQkJKQoJCW5BdXRvbG9hZFNlY3NfMSUJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMS5nZXRQcm9wZXJ0eVZhbHVlICggIkF1dG9sb2FkU2VjcyIJCQkJKQoJCXNBdXRvTG9hZFVSTF8xJAkJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMS5nZXRQcm9wZXJ0eVZhbHVlICggIkF1dG9sb2FkVVJMIgkJCQkpCgkJc0JsaWVuZENvcGllc1RvXzEkCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzXzEuZ2V0UHJvcGVydHlWYWx1ZSAoICJCbGluZENvcGllc1RvIgkJCQkpCgkJc0NvcGllc1RvXzEkCQkJCT0gYURvY3VtZW50UHJvcGVydGllc18xLmdldFByb3BlcnR5VmFsdWUgKCAiQ29waWVzVG8iCQkJCQkpCgkJYUNyZWF0aW9uRGF0ZV8xCQkJCT0gYURvY3VtZW50UHJvcGVydGllc18xLmdldFByb3BlcnR5VmFsdWUgKCAiQ3JlYXRpb25EYXRlIgkJCQkpCgkJc0RlZmF1bHRUYXJnZXRfMSQJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMS5nZXRQcm9wZXJ0eVZhbHVlICggIkRlZmF1bHRUYXJnZXQiCQkJCSkKCQlzRGVzY3JpcHRpb25fMSQJCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzXzEuZ2V0UHJvcGVydHlWYWx1ZSAoICJEZXNjcmlwdGlvbiIJCQkJKQoJCW5FZGl0aW5nQ3ljbGVzXzElCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzXzEuZ2V0UHJvcGVydHlWYWx1ZSAoICJFZGl0aW5nQ3ljbGVzIgkJCQkpCgkJbkVkaXRpbmdEdXJhdGlvbl8xJgkJCT0gYURvY3VtZW50UHJvcGVydGllc18xLmdldFByb3BlcnR5VmFsdWUgKCAiRWRpdGluZ0R1cmF0aW9uIgkJCSkKCQlzZXFFeHRyYURhdGFfMQkJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMS5nZXRQcm9wZXJ0eVZhbHVlICggIkV4dHJhRGF0YSIJCQkJCSkKCQlzSW5SZXBseVRvXzEkCQkJCT0gYURvY3VtZW50UHJvcGVydGllc18xLmdldFByb3BlcnR5VmFsdWUgKCAiSW5SZXBseVRvIgkJCQkJKQoJCWJJc0VuY3J5cHRlZF8xCQkJCT0gYURvY3VtZW50UHJvcGVydGllc18xLmdldFByb3BlcnR5VmFsdWUgKCAiSXNFbmNyeXB0ZWQiCQkJCSkKCQlzS2V5d29yZHNfMSQJCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzXzEuZ2V0UHJvcGVydHlWYWx1ZSAoICJLZXl3b3JkcyIJCQkJCSkKCQlzTUlNRVR5cGVfMSQJCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzXzEuZ2V0UHJvcGVydHlWYWx1ZSAoICJNSU1FVHlwZSIJCQkJCSkKCQlzTW9kaWZpZWRCeV8xJAkJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMS5nZXRQcm9wZXJ0eVZhbHVlICggIk1vZGlmaWVkQnkiCQkJCQkpCgkJYU1vZGlmeURhdGVfMQkJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMS5nZXRQcm9wZXJ0eVZhbHVlICggIk1vZGlmeURhdGUiCQkJCQkpCgkJc05ld3Nncm91cHNfMSQJCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzXzEuZ2V0UHJvcGVydHlWYWx1ZSAoICJOZXdzZ3JvdXBzIgkJCQkJKQoJCXNPcmlnaW5hbF8xJAkJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMS5nZXRQcm9wZXJ0eVZhbHVlICggIk9yaWdpbmFsIgkJCQkJKQoJCWJQb3J0YWJsZUdyYXBoaWNzXzEJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMS5nZXRQcm9wZXJ0eVZhbHVlICggIlBvcnRhYmxlR3JhcGhpY3MiCQkJKQoJCWFQcmludERhdGVfMQkJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMS5nZXRQcm9wZXJ0eVZhbHVlICggIlByaW50RGF0ZSIJCQkJCSkKCQlzUHJpbnRlZEJ5XzEkCQkJCT0gYURvY3VtZW50UHJvcGVydGllc18xLmdldFByb3BlcnR5VmFsdWUgKCAiUHJpbnRlZEJ5IgkJCQkJKQoJCW5Qcmlvcml0eV8xJQkJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMS5nZXRQcm9wZXJ0eVZhbHVlICggIlByaW9yaXR5IgkJCQkJKQoJCWJRdWVyeVRlbXBsYXRlXzEJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMS5nZXRQcm9wZXJ0eVZhbHVlICggIlF1ZXJ5VGVtcGxhdGUiCQkJCSkKCQlzUmVjaXBpZW50XzEkCQkJCT0gYURvY3VtZW50UHJvcGVydGllc18xLmdldFByb3BlcnR5VmFsdWUgKCAiUmVjaXBpZW50IgkJCQkJKQoJCXNSZWZlcmVuY2VzXzEkCQkJCT0gYURvY3VtZW50UHJvcGVydGllc18xLmdldFByb3BlcnR5VmFsdWUgKCAiUmVmZXJlbmNlcyIJCQkJCSkKCQlzUmVwbHlUb18xJAkJCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzXzEuZ2V0UHJvcGVydHlWYWx1ZSAoICJSZXBseVRvIgkJCQkJKQoJCWJTYXZlR3JhcGhpY3NDb21wcmVzc2VkXzEJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzXzEuZ2V0UHJvcGVydHlWYWx1ZSAoICJTYXZlR3JhcGhpY3NDb21wcmVzc2VkIgkJKQoJCWJTYXZlT3JpZ2luYWxHcmFwaGljc18xCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMS5nZXRQcm9wZXJ0eVZhbHVlICggIlNhdmVPcmlnaW5hbEdyYXBoaWNzIgkJKQoJCWJTYXZlVmVyc2lvbk9uQ2xvc2VfMQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzXzEuZ2V0UHJvcGVydHlWYWx1ZSAoICJTYXZlVmVyc2lvbk9uQ2xvc2UiCQkJKQoJCXNUZW1wbGF0ZV8xJAkJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMS5nZXRQcm9wZXJ0eVZhbHVlICggIlRlbXBsYXRlIgkJCQkJKQoJCWJUZW1wbGF0ZUNvbmZpZ18xCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzXzEuZ2V0UHJvcGVydHlWYWx1ZSAoICJUZW1wbGF0ZUNvbmZpZyIJCQkJKQoJCWFUZW1wbGF0ZURhdGVfMQkJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMS5nZXRQcm9wZXJ0eVZhbHVlICggIlRlbXBsYXRlRGF0ZSIJCQkJKQoJCXNUZW1wbGF0ZUZpbGVOYW1lXzEkCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMS5nZXRQcm9wZXJ0eVZhbHVlICggIlRlbXBsYXRlRmlsZU5hbWUiCQkJKQoJCXNUaGVtZV8xJAkJCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzXzEuZ2V0UHJvcGVydHlWYWx1ZSAoICJUaGVtZSIJCQkJCQkpCgkJc1RpdGxlXzEkCQkJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMS5nZXRQcm9wZXJ0eVZhbHVlICggIlRpdGxlIgkJCQkJCSkKCQliVXNlckRhdGFfMQkJCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzXzEuZ2V0UHJvcGVydHlWYWx1ZSAoICJVc2VyRGF0YSIJCQkJCSkKCgkJJyBCZXNvcmdlbiBkZXIgV2VydGUgdW5kIHp3aXNjaGVuc3BlaWNoZXJuIChiZXpvZ2VuIGF1ZiBPYmpla3QgMikKCQlzQXV0aG9yXzIkCQkJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMi5nZXRQcm9wZXJ0eVZhbHVlICggIkF1dGhvciIJCQkJCQkpCgkJYkF1dG9sb2FkRW5hYmxlZF8yCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzXzIuZ2V0UHJvcGVydHlWYWx1ZSAoICJBdXRvbG9hZEVuYWJsZWQiCQkJKQoJCW5BdXRvbG9hZFNlY3NfMiUJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMi5nZXRQcm9wZXJ0eVZhbHVlICggIkF1dG9sb2FkU2VjcyIJCQkJKQoJCXNBdXRvTG9hZFVSTF8yJAkJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMi5nZXRQcm9wZXJ0eVZhbHVlICggIkF1dG9sb2FkVVJMIgkJCQkpCgkJc0JsaWVuZENvcGllc1RvXzIkCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzXzIuZ2V0UHJvcGVydHlWYWx1ZSAoICJCbGluZENvcGllc1RvIgkJCQkpCgkJc0NvcGllc1RvXzIkCQkJCT0gYURvY3VtZW50UHJvcGVydGllc18yLmdldFByb3BlcnR5VmFsdWUgKCAiQ29waWVzVG8iCQkJCQkpCgkJYUNyZWF0aW9uRGF0ZV8yCQkJCT0gYURvY3VtZW50UHJvcGVydGllc18yLmdldFByb3BlcnR5VmFsdWUgKCAiQ3JlYXRpb25EYXRlIgkJCQkpCgkJc0RlZmF1bHRUYXJnZXRfMiQJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMi5nZXRQcm9wZXJ0eVZhbHVlICggIkRlZmF1bHRUYXJnZXQiCQkJCSkKCQlzRGVzY3JpcHRpb25fMiQJCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzXzIuZ2V0UHJvcGVydHlWYWx1ZSAoICJEZXNjcmlwdGlvbiIJCQkJKQoJCW5FZGl0aW5nQ3ljbGVzXzIlCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzXzIuZ2V0UHJvcGVydHlWYWx1ZSAoICJFZGl0aW5nQ3ljbGVzIgkJCQkpCgkJbkVkaXRpbmdEdXJhdGlvbl8yJgkJCT0gYURvY3VtZW50UHJvcGVydGllc18yLmdldFByb3BlcnR5VmFsdWUgKCAiRWRpdGluZ0R1cmF0aW9uIgkJCSkKCQlzZXFFeHRyYURhdGFfMgkJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMi5nZXRQcm9wZXJ0eVZhbHVlICggIkV4dHJhRGF0YSIJCQkJCSkKCQlzSW5SZXBseVRvXzIkCQkJCT0gYURvY3VtZW50UHJvcGVydGllc18yLmdldFByb3BlcnR5VmFsdWUgKCAiSW5SZXBseVRvIgkJCQkJKQoJCWJJc0VuY3J5cHRlZF8yCQkJCT0gYURvY3VtZW50UHJvcGVydGllc18yLmdldFByb3BlcnR5VmFsdWUgKCAiSXNFbmNyeXB0ZWQiCQkJCSkKCQlzS2V5d29yZHNfMiQJCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzXzIuZ2V0UHJvcGVydHlWYWx1ZSAoICJLZXl3b3JkcyIJCQkJCSkKCQlzTUlNRVR5cGVfMiQJCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzXzIuZ2V0UHJvcGVydHlWYWx1ZSAoICJNSU1FVHlwZSIJCQkJCSkKCQlzTW9kaWZpZWRCeV8yJAkJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMi5nZXRQcm9wZXJ0eVZhbHVlICggIk1vZGlmaWVkQnkiCQkJCQkpCgkJYU1vZGlmeURhdGVfMgkJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMi5nZXRQcm9wZXJ0eVZhbHVlICggIk1vZGlmeURhdGUiCQkJCQkpCgkJc05ld3Nncm91cHNfMiQJCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzXzIuZ2V0UHJvcGVydHlWYWx1ZSAoICJOZXdzZ3JvdXBzIgkJCQkJKQoJCXNPcmlnaW5hbF8yJAkJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMi5nZXRQcm9wZXJ0eVZhbHVlICggIk9yaWdpbmFsIgkJCQkJKQoJCWJQb3J0YWJsZUdyYXBoaWNzXzIJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMi5nZXRQcm9wZXJ0eVZhbHVlICggIlBvcnRhYmxlR3JhcGhpY3MiCQkJKQoJCWFQcmludERhdGVfMgkJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMi5nZXRQcm9wZXJ0eVZhbHVlICggIlByaW50RGF0ZSIJCQkJCSkKCQlzUHJpbnRlZEJ5XzIkCQkJCT0gYURvY3VtZW50UHJvcGVydGllc18yLmdldFByb3BlcnR5VmFsdWUgKCAiUHJpbnRlZEJ5IgkJCQkJKQoJCW5Qcmlvcml0eV8yJQkJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMi5nZXRQcm9wZXJ0eVZhbHVlICggIlByaW9yaXR5IgkJCQkJKQoJCWJRdWVyeVRlbXBsYXRlXzIJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMi5nZXRQcm9wZXJ0eVZhbHVlICggIlF1ZXJ5VGVtcGxhdGUiCQkJCSkKCQlzUmVjaXBpZW50XzIkCQkJCT0gYURvY3VtZW50UHJvcGVydGllc18yLmdldFByb3BlcnR5VmFsdWUgKCAiUmVjaXBpZW50IgkJCQkJKQoJCXNSZWZlcmVuY2VzXzIkCQkJCT0gYURvY3VtZW50UHJvcGVydGllc18yLmdldFByb3BlcnR5VmFsdWUgKCAiUmVmZXJlbmNlcyIJCQkJCSkKCQlzUmVwbHlUb18yJAkJCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzXzIuZ2V0UHJvcGVydHlWYWx1ZSAoICJSZXBseVRvIgkJCQkJKQoJCWJTYXZlR3JhcGhpY3NDb21wcmVzc2VkXzIJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzXzIuZ2V0UHJvcGVydHlWYWx1ZSAoICJTYXZlR3JhcGhpY3NDb21wcmVzc2VkIgkJKQoJCWJTYXZlT3JpZ2luYWxHcmFwaGljc18yCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMi5nZXRQcm9wZXJ0eVZhbHVlICggIlNhdmVPcmlnaW5hbEdyYXBoaWNzIgkJKQoJCWJTYXZlVmVyc2lvbk9uQ2xvc2VfMgkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzXzIuZ2V0UHJvcGVydHlWYWx1ZSAoICJTYXZlVmVyc2lvbk9uQ2xvc2UiCQkJKQoJCXNUZW1wbGF0ZV8yJAkJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMi5nZXRQcm9wZXJ0eVZhbHVlICggIlRlbXBsYXRlIgkJCQkJKQoJCWJUZW1wbGF0ZUNvbmZpZ18yCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzXzIuZ2V0UHJvcGVydHlWYWx1ZSAoICJUZW1wbGF0ZUNvbmZpZyIJCQkJKQoJCWFUZW1wbGF0ZURhdGVfMgkJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMi5nZXRQcm9wZXJ0eVZhbHVlICggIlRlbXBsYXRlRGF0ZSIJCQkJKQoJCXNUZW1wbGF0ZUZpbGVOYW1lXzIkCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMi5nZXRQcm9wZXJ0eVZhbHVlICggIlRlbXBsYXRlRmlsZU5hbWUiCQkJKQoJCXNUaGVtZV8yJAkJCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzXzIuZ2V0UHJvcGVydHlWYWx1ZSAoICJUaGVtZSIJCQkJCQkpCgkJc1RpdGxlXzIkCQkJCQk9IGFEb2N1bWVudFByb3BlcnRpZXNfMi5nZXRQcm9wZXJ0eVZhbHVlICggIlRpdGxlIgkJCQkJCSkKCQliVXNlckRhdGFfMgkJCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzXzIuZ2V0UHJvcGVydHlWYWx1ZSAoICJVc2VyRGF0YSIJCQkJCSkKCgkJJyBBbHMgZXJ3YXJ0ZXRlbiBaaWVsd2VydCBzY2hvbiBtYWwgIlByb3BlcnRpZXMgaWRlbnRpc2NoIiBhbm5laG1lbiEhIQoJCScgRvxyIGRlbiBGYWxsLCBkYXMgbnVyIGVpbmUgZGllc2VuIEFuc3BydWNoIG5pY2h0IGVyZvxsbHQsIHdpcmQgZGVyIFdlcnQgZWluZmFjaCB6dXL8Y2tnZXNldHp0LgoJCScgVm9uIGRhIGJsZWlidCBkZXIgbmV1ZSBXZXJ0IGJlc3RlaGVuIHVuZCB6ZWlndCBhbiwgZGHfIHNpY2ggbWluZGVzdGVucyBlaW5lIFByb3BlcnR5IGdl5G5kZXJ0IGhhdCEKCQlDb21wYXJlRG9jdW1lbnRQcm9wZXJ0aWVzID0gY0VxdWFsCgoJCScgRGFubiBkaWUgV2VydGUgdmVyZ2xlaWNoZW4KCQlpZiAoIENvbXBhcmVPV1N0cmluZwkJKCBzQXV0aG9yXzEkLAkJCQkJc0F1dGhvcl8yJAkJCQkJKSA9IGNEaWZmZXJlbnQgKSB0aGVuCgkJCUNvbXBhcmVEb2N1bWVudFByb3BlcnRpZXMgPSBjRGlmZmVyZW50CgkJZWxzZWlmICggQ29tcGFyZUJvb2wJCSggYkF1dG9sb2FkRW5hYmxlZF8xLAkJCWJBdXRvbG9hZEVuYWJsZWRfMgkJCSkgPSBjRGlmZmVyZW50ICkgdGhlbgoJCQlDb21wYXJlRG9jdW1lbnRQcm9wZXJ0aWVzID0gY0RpZmZlcmVudAoJCWVsc2VpZiAoIENvbXBhcmVJbnQxNgkJKCBuQXV0b2xvYWRTZWNzXzElLAkJCQluQXV0b2xvYWRTZWNzXzIlCQkJKSA9IGNEaWZmZXJlbnQgKSB0aGVuCgkJCUNvbXBhcmVEb2N1bWVudFByb3BlcnRpZXMgPSBjRGlmZmVyZW50CgkJZWxzZWlmICggQ29tcGFyZU9XU3RyaW5nCSggc0F1dG9Mb2FkVVJMXzEkLAkJCQlzQXV0b0xvYWRVUkxfMiQJCQkJKSA9IGNEaWZmZXJlbnQgKSB0aGVuCgkJCUNvbXBhcmVEb2N1bWVudFByb3BlcnRpZXMgPSBjRGlmZmVyZW50CgkJZWxzZWlmICggQ29tcGFyZU9XU3RyaW5nCSggc0JsaWVuZENvcGllc1RvXzEkLAkJCXNCbGllbmRDb3BpZXNUb18yJAkJCSkgPSBjRGlmZmVyZW50ICkgdGhlbgoJCQlDb21wYXJlRG9jdW1lbnRQcm9wZXJ0aWVzID0gY0RpZmZlcmVudAoJCWVsc2VpZiAoIENvbXBhcmVPV1N0cmluZwkoIHNDb3BpZXNUb18xJCwJCQkJCXNDb3BpZXNUb18yJAkJCQkpID0gY0RpZmZlcmVudCApIHRoZW4KCQkJQ29tcGFyZURvY3VtZW50UHJvcGVydGllcyA9IGNEaWZmZXJlbnQKCQllbHNlaWYgKCBDb21wYXJlRGF0ZVRpbWUJKCBhQ3JlYXRpb25EYXRlXzEsCQkJCWFDcmVhdGlvbkRhdGVfMgkJCQkpID0gY0RpZmZlcmVudCApIHRoZW4KCQkJQ29tcGFyZURvY3VtZW50UHJvcGVydGllcyA9IGNEaWZmZXJlbnQKCQllbHNlaWYgKCBDb21wYXJlT1dTdHJpbmcJKCBzRGVmYXVsdFRhcmdldF8xJCwJCQlzRGVmYXVsdFRhcmdldF8yJAkJCSkgPSBjRGlmZmVyZW50ICkgdGhlbgoJCQlDb21wYXJlRG9jdW1lbnRQcm9wZXJ0aWVzID0gY0RpZmZlcmVudAoJCWVsc2VpZiAoIENvbXBhcmVPV1N0cmluZwkoIHNEZXNjcmlwdGlvbl8xJCwJCQkJc0Rlc2NyaXB0aW9uXzIkCQkJCSkgPSBjRGlmZmVyZW50ICkgdGhlbgoJCQlDb21wYXJlRG9jdW1lbnRQcm9wZXJ0aWVzID0gY0RpZmZlcmVudAoJCWVsc2VpZiAoIENvbXBhcmVJbnQxNgkJKCBuRWRpdGluZ0N5Y2xlc18xJSwJCQluRWRpdGluZ0N5Y2xlc18yJQkJCSkgPSBjRGlmZmVyZW50ICkgdGhlbgoJCQlDb21wYXJlRG9jdW1lbnRQcm9wZXJ0aWVzID0gY0RpZmZlcmVudAoJCWVsc2VpZiAoIENvbXBhcmVJbnQzMgkJKCBuRWRpdGluZ0R1cmF0aW9uXzEmLAkJCW5FZGl0aW5nRHVyYXRpb25fMiYJCQkpID0gY0RpZmZlcmVudCApIHRoZW4KCQkJQ29tcGFyZURvY3VtZW50UHJvcGVydGllcyA9IGNEaWZmZXJlbnQKCQllbHNlaWYgKCBDb21wYXJlQnl0ZVNlcXVlbmNlKCBzZXFFeHRyYURhdGFfMSwJCQkJc2VxRXh0cmFEYXRhXzIJCQkJKSA9IGNEaWZmZXJlbnQgKSB0aGVuCgkJCUNvbXBhcmVEb2N1bWVudFByb3BlcnRpZXMgPSBjRGlmZmVyZW50CgkJZWxzZWlmICggQ29tcGFyZU9XU3RyaW5nCSggc0luUmVwbHlUb18xJCwJCQkJc0luUmVwbHlUb18yJAkJCQkpID0gY0RpZmZlcmVudCApIHRoZW4KCQkJQ29tcGFyZURvY3VtZW50UHJvcGVydGllcyA9IGNEaWZmZXJlbnQKCQllbHNlaWYgKCBDb21wYXJlQm9vbAkJKCBiSXNFbmNyeXB0ZWRfMSwJCQkJYklzRW5jcnlwdGVkXzIJCQkJKSA9IGNEaWZmZXJlbnQgKSB0aGVuCgkJCUNvbXBhcmVEb2N1bWVudFByb3BlcnRpZXMgPSBjRGlmZmVyZW50CgkJZWxzZWlmICggQ29tcGFyZU9XU3RyaW5nCSggc0tleXdvcmRzXzEkLAkJCQkJc0tleXdvcmRzXzIkCQkJCSkgPSBjRGlmZmVyZW50ICkgdGhlbgoJCQlDb21wYXJlRG9jdW1lbnRQcm9wZXJ0aWVzID0gY0RpZmZlcmVudAoJCWVsc2VpZiAoIENvbXBhcmVPV1N0cmluZwkoIHNNSU1FVHlwZV8xJCwJCQkJCXNNSU1FVHlwZV8yJAkJCQkpID0gY0RpZmZlcmVudCApIHRoZW4KCQkJQ29tcGFyZURvY3VtZW50UHJvcGVydGllcyA9IGNEaWZmZXJlbnQKCQllbHNlaWYgKCBDb21wYXJlT1dTdHJpbmcJKCBzTW9kaWZpZWRCeV8xJCwJCQkJc01vZGlmaWVkQnlfMiQJCQkJKSA9IGNEaWZmZXJlbnQgKSB0aGVuCgkJCUNvbXBhcmVEb2N1bWVudFByb3BlcnRpZXMgPSBjRGlmZmVyZW50CgkJZWxzZWlmICggQ29tcGFyZURhdGVUaW1lCSggYU1vZGlmeURhdGVfMSwJCQkJYU1vZGlmeURhdGVfMgkJCQkpID0gY0RpZmZlcmVudCApIHRoZW4KCQkJQ29tcGFyZURvY3VtZW50UHJvcGVydGllcyA9IGNEaWZmZXJlbnQKCQllbHNlaWYgKCBDb21wYXJlT1dTdHJpbmcJKCBzTmV3c2dyb3Vwc18xJCwJCQkJc05ld3Nncm91cHNfMiQJCQkJKSA9IGNEaWZmZXJlbnQgKSB0aGVuCgkJCUNvbXBhcmVEb2N1bWVudFByb3BlcnRpZXMgPSBjRGlmZmVyZW50CgkJZWxzZWlmICggQ29tcGFyZU9XU3RyaW5nCSggc09yaWdpbmFsXzEkLAkJCQkJc09yaWdpbmFsXzIkCQkJCSkgPSBjRGlmZmVyZW50ICkgdGhlbgoJCQlDb21wYXJlRG9jdW1lbnRQcm9wZXJ0aWVzID0gY0RpZmZlcmVudAoJCWVsc2VpZiAoIENvbXBhcmVCb29sCQkoIGJQb3J0YWJsZUdyYXBoaWNzXzEsCQkJYlBvcnRhYmxlR3JhcGhpY3NfMgkJCSkgPSBjRGlmZmVyZW50ICkgdGhlbgoJCQlDb21wYXJlRG9jdW1lbnRQcm9wZXJ0aWVzID0gY0RpZmZlcmVudAoJCWVsc2VpZiAoIENvbXBhcmVEYXRlVGltZQkoIGFQcmludERhdGVfMSwJCQkJCWFQcmludERhdGVfMgkJCQkpID0gY0RpZmZlcmVudCApIHRoZW4KCQkJQ29tcGFyZURvY3VtZW50UHJvcGVydGllcyA9IGNEaWZmZXJlbnQKCQllbHNlaWYgKCBDb21wYXJlT1dTdHJpbmcJKCBzUHJpbnRlZEJ5XzEkLAkJCQlzUHJpbnRlZEJ5XzIkCQkJCSkgPSBjRGlmZmVyZW50ICkgdGhlbgoJCQlDb21wYXJlRG9jdW1lbnRQcm9wZXJ0aWVzID0gY0RpZmZlcmVudAoJCWVsc2VpZiAoIENvbXBhcmVJbnQxNgkJKCBuUHJpb3JpdHlfMSUsCQkJCQluUHJpb3JpdHlfMiUJCQkJKSA9IGNEaWZmZXJlbnQgKSB0aGVuCgkJCUNvbXBhcmVEb2N1bWVudFByb3BlcnRpZXMgPSBjRGlmZmVyZW50CgkJZWxzZWlmICggQ29tcGFyZUJvb2wJCSggYlF1ZXJ5VGVtcGxhdGVfMSwJCQkJYlF1ZXJ5VGVtcGxhdGVfMgkJCSkgPSBjRGlmZmVyZW50ICkgdGhlbgoJCQlDb21wYXJlRG9jdW1lbnRQcm9wZXJ0aWVzID0gY0RpZmZlcmVudAoJCWVsc2VpZiAoIENvbXBhcmVPV1N0cmluZwkoIHNSZWNpcGllbnRfMSQsCQkJCXNSZWNpcGllbnRfMiQJCQkJKSA9IGNEaWZmZXJlbnQgKSB0aGVuCgkJCUNvbXBhcmVEb2N1bWVudFByb3BlcnRpZXMgPSBjRGlmZmVyZW50CgkJZWxzZWlmICggQ29tcGFyZU9XU3RyaW5nCSggc1JlZmVyZW5jZXNfMSQsCQkJCXNSZWZlcmVuY2VzXzIkCQkJCSkgPSBjRGlmZmVyZW50ICkgdGhlbgoJCQlDb21wYXJlRG9jdW1lbnRQcm9wZXJ0aWVzID0gY0RpZmZlcmVudAoJCWVsc2VpZiAoIENvbXBhcmVPV1N0cmluZwkoIHNSZXBseVRvXzEkLAkJCQkJc1JlcGx5VG9fMiQJCQkJCSkgPSBjRGlmZmVyZW50ICkgdGhlbgoJCQlDb21wYXJlRG9jdW1lbnRQcm9wZXJ0aWVzID0gY0RpZmZlcmVudAoJCWVsc2VpZiAoIENvbXBhcmVCb29sCQkoIGJTYXZlR3JhcGhpY3NDb21wcmVzc2VkXzEsCWJTYXZlR3JhcGhpY3NDb21wcmVzc2VkXzIJKSA9IGNEaWZmZXJlbnQgKSB0aGVuCgkJCUNvbXBhcmVEb2N1bWVudFByb3BlcnRpZXMgPSBjRGlmZmVyZW50CgkJZWxzZWlmICggQ29tcGFyZUJvb2wJCSggYlNhdmVPcmlnaW5hbEdyYXBoaWNzXzEsCQliU2F2ZU9yaWdpbmFsR3JhcGhpY3NfMgkJKSA9IGNEaWZmZXJlbnQgKSB0aGVuCgkJCUNvbXBhcmVEb2N1bWVudFByb3BlcnRpZXMgPSBjRGlmZmVyZW50CgkJZWxzZWlmICggQ29tcGFyZUJvb2wJCSggYlNhdmVWZXJzaW9uT25DbG9zZV8xLAkJYlNhdmVWZXJzaW9uT25DbG9zZV8yCQkpID0gY0RpZmZlcmVudCApIHRoZW4KCQkJQ29tcGFyZURvY3VtZW50UHJvcGVydGllcyA9IGNEaWZmZXJlbnQKCQllbHNlaWYgKCBDb21wYXJlT1dTdHJpbmcJKCBzVGVtcGxhdGVfMSQsCQkJCQlzVGVtcGxhdGVfMiQJCQkJKSA9IGNEaWZmZXJlbnQgKSB0aGVuCgkJCUNvbXBhcmVEb2N1bWVudFByb3BlcnRpZXMgPSBjRGlmZmVyZW50CgkJZWxzZWlmICggQ29tcGFyZUJvb2wJCSggYlRlbXBsYXRlQ29uZmlnXzEsCQkJYlRlbXBsYXRlQ29uZmlnXzIJCQkpID0gY0RpZmZlcmVudCApIHRoZW4KCQkJQ29tcGFyZURvY3VtZW50UHJvcGVydGllcyA9IGNEaWZmZXJlbnQKCQllbHNlaWYgKCBDb21wYXJlRGF0ZVRpbWUJKCBhVGVtcGxhdGVEYXRlXzEsCQkJCWFUZW1wbGF0ZURhdGVfMgkJCQkpID0gY0RpZmZlcmVudCApIHRoZW4KCQkJQ29tcGFyZURvY3VtZW50UHJvcGVydGllcyA9IGNEaWZmZXJlbnQKCQllbHNlaWYgKCBDb21wYXJlT1dTdHJpbmcJKCBzVGVtcGxhdGVGaWxlTmFtZV8xJCwJCQlzVGVtcGxhdGVGaWxlTmFtZV8yJAkJKSA9IGNEaWZmZXJlbnQgKSB0aGVuCgkJCUNvbXBhcmVEb2N1bWVudFByb3BlcnRpZXMgPSBjRGlmZmVyZW50CgkJZWxzZWlmICggQ29tcGFyZU9XU3RyaW5nCSggc1RoZW1lXzEkLAkJCQkJc1RoZW1lXzIkCQkJCQkpID0gY0RpZmZlcmVudCApIHRoZW4KCQkJQ29tcGFyZURvY3VtZW50UHJvcGVydGllcyA9IGNEaWZmZXJlbnQKCQllbHNlaWYgKCBDb21wYXJlT1dTdHJpbmcJKCBzVGl0bGVfMSQsCQkJCQlzVGl0bGVfMiQJCQkJCSkgPSBjRGlmZmVyZW50ICkgdGhlbgoJCQlDb21wYXJlRG9jdW1lbnRQcm9wZXJ0aWVzID0gY0RpZmZlcmVudAoJCWVsc2VpZiAoIENvbXBhcmVCb29sCQkoIGJVc2VyRGF0YV8xLAkJCQkJYlVzZXJEYXRhXzIJCQkJCSkgPSBjRGlmZmVyZW50ICkgdGhlbgoJCQlDb21wYXJlRG9jdW1lbnRQcm9wZXJ0aWVzID0gY0RpZmZlcmVudAoJCWVuZCBpZgoKRW5kIEZ1bmN0aW9uCgonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQonIEhpbGZzZnVua3Rpb246IFdhbmRlbHQgZWluZSBTdHJ1a3R1ciBkZXMgVHlwZXMgRGF0ZVRpbWUgaW4gZWluZW4gZm9ybWF0aWVydGVuIFN0cmluZyB1bQonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGdW5jdGlvbiBEYXRlVGltZTJTdHJpbmcgKCBhRGF0ZVRpbWUgKSBhcyBTdHJpbmcKCgkJc3RlbXBTdHJpbmckID0gIiIKCQlzdGVtcFN0cmluZyQgPSBzdGVtcFN0cmluZyQgKyBhRGF0ZVRpbWUuRGF5CQkJCQkrICIuIgoJCXN0ZW1wU3RyaW5nJCA9IHN0ZW1wU3RyaW5nJCArIGFEYXRlVGltZS5Nb250aAkJCQkrICIuIgoJCXN0ZW1wU3RyaW5nJCA9IHN0ZW1wU3RyaW5nJCArIGFEYXRlVGltZS5ZZWFyCQkJCSsgIiAtICIKCQlzdGVtcFN0cmluZyQgPSBzdGVtcFN0cmluZyQgKyBhRGF0ZVRpbWUuSG91cnMJCQkJKyAiOiIKCQlzdGVtcFN0cmluZyQgPSBzdGVtcFN0cmluZyQgKyBhRGF0ZVRpbWUuTWludXRlcwkJCQkrICI6IgoJCXN0ZW1wU3RyaW5nJCA9IHN0ZW1wU3RyaW5nJCArIGFEYXRlVGltZS5TZWNvbmRzCQkJCSsgIjoiCgkJc3RlbXBTdHJpbmckID0gc3RlbXBTdHJpbmckICsgYURhdGVUaW1lLkh1bmRyZWR0aFNlY29uZHMJKyAiIFVociIKCgkJRGF0ZVRpbWUyU3RyaW5nID0gc3RlbXBTdHJpbmckCgpFbmQgRnVuY3Rpb24KCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCicgSGlsZnNmdW5rdGlvbjogV2FuZGVsdCBlaW5lIFNlcXVlbmNlIHZvbiBCeXRlcyBpbiBlaW5lbiBmb3JtYXRpZXJ0ZW4gU3RyaW5nIHVtCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZ1bmN0aW9uIEJ5dGVTZXF1ZW5jZTJTdHJpbmcgKCBzZXFCeXRlU2VxdWVuY2UgKSBhcyBTdHJpbmcKCgkJbkVsZW1lbnRDb3VudCUgPSBVQm91bmQgKCBzZXFCeXRlU2VxdWVuY2UoKSApCgoJCWlmICggbkVsZW1lbnRDb3VudCUgPCAxICkgdGhlbgoJCQlzdGVtcFN0cmluZyQgPSAibGVlciIKCQllbHNlCgkJCXN0ZW1wU3RyaW5nJCA9ICJ7IgoJCQlmb3IgbkNvdW50ZXIlPTAgdG8gbkVsZW1lbnRDb3VudCUgc3RlcCAxCgkJCQlzdGVtcFN0cmluZyQgPSBzdGVtcFN0cmluZyQgKyBzZXFCeXRlU2VxdWVuY2UobkNvdW50ZXIlKQoJCQluZXh0IG5Db3VudGVyJQoJCQlzdGVtcFN0cmluZyQgPSBzdGVtcFN0cmluZyQgKyAifSIKCQllbmQgaWYKCgkJQnl0ZVNlcXVlbmNlMlN0cmluZyA9IHN0ZW1wU3RyaW5nJAoKRW5kIEZ1bmN0aW9uCgonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQonIEhpbGZzbWV0aG9kZTogWmVpZ3QgZGllIGFrdHVlbGxlbiBXZXJ0ZSBBTExFUiBQcm9wZXJ0aWVzIGFuCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1YiBTaG93UHJvcGVydGllcyAoIGFEb2N1bWVudFByb3BlcnRpZXMgKQoKCQknIEJlc29yZ2VuIGRlciBXZXJ0ZSB1bmQgendpc2NoZW5zcGVpY2hlcm4KCQlzQXV0aG9yJAkJCQk9IGFEb2N1bWVudFByb3BlcnRpZXMuZ2V0UHJvcGVydHlWYWx1ZSAoICJBdXRob3IiCQkJCQkpCgkJYkF1dG9sb2FkRW5hYmxlZAkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzLmdldFByb3BlcnR5VmFsdWUgKCAiQXV0b2xvYWRFbmFibGVkIgkJCSkKCQluQXV0b2xvYWRTZWNzJQkJCT0gYURvY3VtZW50UHJvcGVydGllcy5nZXRQcm9wZXJ0eVZhbHVlICggIkF1dG9sb2FkU2VjcyIJCQkJKQoJCXNBdXRvTG9hZFVSTCQJCQk9IGFEb2N1bWVudFByb3BlcnRpZXMuZ2V0UHJvcGVydHlWYWx1ZSAoICJBdXRvbG9hZFVSTCIJCQkJKQoJCXNCbGllbmRDb3BpZXNUbyQJCT0gYURvY3VtZW50UHJvcGVydGllcy5nZXRQcm9wZXJ0eVZhbHVlICggIkJsaW5kQ29waWVzVG8iCQkJKQoJCXNDb3BpZXNUbyQJCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzLmdldFByb3BlcnR5VmFsdWUgKCAiQ29waWVzVG8iCQkJCQkpCgkJZENyZWF0aW9uRGF0ZQkJCT0gYURvY3VtZW50UHJvcGVydGllcy5nZXRQcm9wZXJ0eVZhbHVlICggIkNyZWF0aW9uRGF0ZSIJCQkJKQoJCXNEZWZhdWx0VGFyZ2V0JAkJCT0gYURvY3VtZW50UHJvcGVydGllcy5nZXRQcm9wZXJ0eVZhbHVlICggIkRlZmF1bHRUYXJnZXQiCQkJKQoJCXNEZXNjcmlwdGlvbiQJCQk9IGFEb2N1bWVudFByb3BlcnRpZXMuZ2V0UHJvcGVydHlWYWx1ZSAoICJEZXNjcmlwdGlvbiIJCQkJKQoJCW5FZGl0aW5nQ3ljbGVzJQkJCT0gYURvY3VtZW50UHJvcGVydGllcy5nZXRQcm9wZXJ0eVZhbHVlICggIkVkaXRpbmdDeWNsZXMiCQkJKQoJCW5FZGl0aW5nRHVyYXRpb24mCQk9IGFEb2N1bWVudFByb3BlcnRpZXMuZ2V0UHJvcGVydHlWYWx1ZSAoICJFZGl0aW5nRHVyYXRpb24iCQkJKQoJCXNlcUV4dHJhRGF0YQkJCT0gYURvY3VtZW50UHJvcGVydGllcy5nZXRQcm9wZXJ0eVZhbHVlICggIkV4dHJhRGF0YSIJCQkJKQoJCXNJblJlcGx5VG8kCQkJCT0gYURvY3VtZW50UHJvcGVydGllcy5nZXRQcm9wZXJ0eVZhbHVlICggIkluUmVwbHlUbyIJCQkJKQoJCWJJc0VuY3J5cHRlZAkJCT0gYURvY3VtZW50UHJvcGVydGllcy5nZXRQcm9wZXJ0eVZhbHVlICggIklzRW5jcnlwdGVkIgkJCQkpCgkJc0tleXdvcmRzJAkJCQk9IGFEb2N1bWVudFByb3BlcnRpZXMuZ2V0UHJvcGVydHlWYWx1ZSAoICJLZXl3b3JkcyIJCQkJCSkKCQlzTUlNRVR5cGUkCQkJCT0gYURvY3VtZW50UHJvcGVydGllcy5nZXRQcm9wZXJ0eVZhbHVlICggIk1JTUVUeXBlIgkJCQkJKQoJCXNNb2RpZmllZEJ5JAkJCT0gYURvY3VtZW50UHJvcGVydGllcy5nZXRQcm9wZXJ0eVZhbHVlICggIk1vZGlmaWVkQnkiCQkJCSkKCQlkTW9kaWZ5RGF0ZQkJCQk9IGFEb2N1bWVudFByb3BlcnRpZXMuZ2V0UHJvcGVydHlWYWx1ZSAoICJNb2RpZnlEYXRlIgkJCQkpCgkJc05ld3Nncm91cHMkCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzLmdldFByb3BlcnR5VmFsdWUgKCAiTmV3c2dyb3VwcyIJCQkJKQoJCXNPcmlnaW5hbCQJCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzLmdldFByb3BlcnR5VmFsdWUgKCAiT3JpZ2luYWwiCQkJCQkpCgkJYlBvcnRhYmxlR3JhcGhpY3MJCT0gYURvY3VtZW50UHJvcGVydGllcy5nZXRQcm9wZXJ0eVZhbHVlICggIlBvcnRhYmxlR3JhcGhpY3MiCQkJKQoJCWRQcmludERhdGUJCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzLmdldFByb3BlcnR5VmFsdWUgKCAiUHJpbnREYXRlIgkJCQkpCgkJc1ByaW50ZWRCeSQJCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzLmdldFByb3BlcnR5VmFsdWUgKCAiUHJpbnRlZEJ5IgkJCQkpCgkJblByaW9yaXR5JQkJCQk9IGFEb2N1bWVudFByb3BlcnRpZXMuZ2V0UHJvcGVydHlWYWx1ZSAoICJQcmlvcml0eSIJCQkJCSkKCQliUXVlcnlUZW1wbGF0ZQkJCT0gYURvY3VtZW50UHJvcGVydGllcy5nZXRQcm9wZXJ0eVZhbHVlICggIlF1ZXJ5VGVtcGxhdGUiCQkJKQoJCXNSZWNpcGllbnQkCQkJCT0gYURvY3VtZW50UHJvcGVydGllcy5nZXRQcm9wZXJ0eVZhbHVlICggIlJlY2lwaWVudCIJCQkJKQoJCXNSZWZlcmVuY2VzJAkJCT0gYURvY3VtZW50UHJvcGVydGllcy5nZXRQcm9wZXJ0eVZhbHVlICggIlJlZmVyZW5jZXMiCQkJCSkKCQlzUmVwbHlUbyQJCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzLmdldFByb3BlcnR5VmFsdWUgKCAiUmVwbHlUbyIJCQkJCSkKCQliU2F2ZUdyYXBoaWNzQ29tcHJlc3NlZAk9IGFEb2N1bWVudFByb3BlcnRpZXMuZ2V0UHJvcGVydHlWYWx1ZSAoICJTYXZlR3JhcGhpY3NDb21wcmVzc2VkIgkpCgkJYlNhdmVPcmlnaW5hbEdyYXBoaWNzCT0gYURvY3VtZW50UHJvcGVydGllcy5nZXRQcm9wZXJ0eVZhbHVlICggIlNhdmVPcmlnaW5hbEdyYXBoaWNzIgkJKQoJCWJTYXZlVmVyc2lvbk9uQ2xvc2UJCT0gYURvY3VtZW50UHJvcGVydGllcy5nZXRQcm9wZXJ0eVZhbHVlICggIlNhdmVWZXJzaW9uT25DbG9zZSIJCSkKCQlzVGVtcGxhdGUkCQkJCT0gYURvY3VtZW50UHJvcGVydGllcy5nZXRQcm9wZXJ0eVZhbHVlICggIlRlbXBsYXRlIgkJCQkJKQoJCWJUZW1wbGF0ZUNvbmZpZwkJCT0gYURvY3VtZW50UHJvcGVydGllcy5nZXRQcm9wZXJ0eVZhbHVlICggIlRlbXBsYXRlQ29uZmlnIgkJCSkKCQlkVGVtcGxhdGVEYXRlCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzLmdldFByb3BlcnR5VmFsdWUgKCAiVGVtcGxhdGVEYXRlIgkJCQkpCgkJc1RlbXBsYXRlRmlsZU5hbWUkCQk9IGFEb2N1bWVudFByb3BlcnRpZXMuZ2V0UHJvcGVydHlWYWx1ZSAoICJUZW1wbGF0ZUZpbGVOYW1lIgkJCSkKCQlzVGhlbWUkCQkJCQk9IGFEb2N1bWVudFByb3BlcnRpZXMuZ2V0UHJvcGVydHlWYWx1ZSAoICJUaGVtZSIJCQkJCSkKCQlzVGl0bGUkCQkJCQk9IGFEb2N1bWVudFByb3BlcnRpZXMuZ2V0UHJvcGVydHlWYWx1ZSAoICJUaXRsZSIJCQkJCSkKCQliVXNlckRhdGEJCQkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzLmdldFByb3BlcnR5VmFsdWUgKCAiVXNlckRhdGEiCQkJCQkpCgoJCScgRWluZSBaZWljaGVua2V0dGUgenVzYW1tZW5iYXN0ZWxuLCB3ZWxjaGUgZGllIFdlcnRlIGZvcm1hdGllcnQgZGFyc3RlbGx0LgoJCXNPdXRMaW5lJCA9IAkJCSJbT1dTdHJpbmddIgkJKyBjaHIkKDkpICsgIkF1dGhvciIgIAkJCQkJKyBjaHIkKDkpICsgIj0geyIgKyBjaHIkKDkpICsgc0F1dGhvciQJCQkJCQkJKyAifSIgKyBjaHIkKDEzKQoJCXNPdXRMaW5lJCA9IHNPdXRMaW5lJCArICJbc2FsX0Jvb2xdIgkJKyBjaHIkKDkpICsgIkF1dG9sb2FkRW5hYmxlZCIJCQkrIGNociQoOSkgKyAiPSB7IiArIGNociQoOSkgKyBiQXV0b2xvYWRFbmFibGVkCQkJCQkrICJ9IiArIGNociQoMTMpCgkJc091dExpbmUkID0gc091dExpbmUkICsgIltzYWxfSW50MTZdIgkJKyBjaHIkKDkpICsgIkF1dG9sb2FkU2VjcyIJCQkJKyBjaHIkKDkpICsgIj0geyIgKyBjaHIkKDkpICsgbkF1dG9sb2FkU2VjcyUJCQkJCSsgIn0iICsgY2hyJCgxMykKCQlzT3V0TGluZSQgPSBzT3V0TGluZSQgKyAiW09XU3RyaW5nXSIJCSsgY2hyJCg5KSArICJBdXRvTG9hZFVSTCIJCQkJKyBjaHIkKDkpICsgIj0geyIgKyBjaHIkKDkpICsgc0F1dG9Mb2FkVVJMJAkJCQkJCSsgIn0iICsgY2hyJCgxMykKCQlzT3V0TGluZSQgPSBzT3V0TGluZSQgKyAiW09XU3RyaW5nXSIJCSsgY2hyJCg5KSArICJCbGllbmRDb3BpZXNUbyIJCQkrIGNociQoOSkgKyAiPSB7IiArIGNociQoOSkgKyBzQmxpZW5kQ29waWVzVG8kCQkJCQkrICJ9IiArIGNociQoMTMpCgkJc091dExpbmUkID0gc091dExpbmUkICsgIltPV1N0cmluZ10iCQkrIGNociQoOSkgKyAiQ29waWVzVG8iCQkJCQkrIGNociQoOSkgKyAiPSB7IiArIGNociQoOSkgKyBzQ29waWVzVG8kCQkJCQkJKyAifSIgKyBjaHIkKDEzKQoJCXNPdXRMaW5lJCA9IHNPdXRMaW5lJCArICJbRGF0ZVRpbWVdIgkJKyBjaHIkKDkpICsgIkNyZWF0aW9uRGF0ZSIJCQkJKyBjaHIkKDkpICsgIj0geyIgKyBjaHIkKDkpICsgRGF0ZVRpbWUyU3RyaW5nKGRDcmVhdGlvbkRhdGUpCSsgIn0iICsgY2hyJCgxMykKCQlzT3V0TGluZSQgPSBzT3V0TGluZSQgKyAiW09XU3RyaW5nXSIJCSsgY2hyJCg5KSArICJEZWZhdWx0VGFyZ2V0IgkJCQkrIGNociQoOSkgKyAiPSB7IiArIGNociQoOSkgKyBzRGVmYXVsdFRhcmdldCQJCQkJCSsgIn0iICsgY2hyJCgxMykKCQlzT3V0TGluZSQgPSBzT3V0TGluZSQgKyAiW09XU3RyaW5nXSIJCSsgY2hyJCg5KSArICJEZXNjcmlwdGlvbiIJCQkJKyBjaHIkKDkpICsgIj0geyIgKyBjaHIkKDkpICsgc0Rlc2NyaXB0aW9uJAkJCQkJCSsgIn0iICsgY2hyJCgxMykKCQlzT3V0TGluZSQgPSBzT3V0TGluZSQgKyAiW3NhbF9JbnQxNl0iCQkrIGNociQoOSkgKyAiRWRpdGluZ0N5Y2xlcyIJCQkJKyBjaHIkKDkpICsgIj0geyIgKyBjaHIkKDkpICsgbkVkaXRpbmdDeWNsZXMlCQkJCQkrICJ9IiArIGNociQoMTMpCgkJc091dExpbmUkID0gc091dExpbmUkICsgIltzYWxfSW50MzJdIgkJKyBjaHIkKDkpICsgIkVkaXRpbmdEdXJhdGlvbiIJCQkrIGNociQoOSkgKyAiPSB7IiArIGNociQoOSkgKyBuRWRpdGluZ0R1cmF0aW9uJgkJCQkJKyAifSIgKyBjaHIkKDEzKQoJCXNPdXRMaW5lJCA9IHNPdXRMaW5lJCArICJbU2VxdWVuY2U8Qnl0ZT5dIgkrIGNociQoOSkgKyAiRXh0cmFEYXRhIgkJCQkJKyBjaHIkKDkpICsgIj0geyIgKyBjaHIkKDkpICsgQnl0ZVNlcXVlbmNlMlN0cmluZyhzZXFFeHRyYURhdGEpCSsgIn0iICsgY2hyJCgxMykKCQlzT3V0TGluZSQgPSBzT3V0TGluZSQgKyAiW09XU3RyaW5nXSIJCSsgY2hyJCg5KSArICJJblJlcGx5VG8iCQkJCQkrIGNociQoOSkgKyAiPSB7IiArIGNociQoOSkgKyBzSW5SZXBseVRvJAkJCQkJCSsgIn0iICsgY2hyJCgxMykKCQlzT3V0TGluZSQgPSBzT3V0TGluZSQgKyAiW3NhbF9Cb29sXSIJCSsgY2hyJCg5KSArICJJc0VuY3J5cHRlZCIJCQkJKyBjaHIkKDkpICsgIj0geyIgKyBjaHIkKDkpICsgYklzRW5jcnlwdGVkCQkJCQkJKyAifSIgKyBjaHIkKDEzKQoJCXNPdXRMaW5lJCA9IHNPdXRMaW5lJCArICJbT1dTdHJpbmddIgkJKyBjaHIkKDkpICsgIktleXdvcmRzIgkJCQkJKyBjaHIkKDkpICsgIj0geyIgKyBjaHIkKDkpICsgc0tleXdvcmRzJAkJCQkJCSsgIn0iICsgY2hyJCgxMykKCQlzT3V0TGluZSQgPSBzT3V0TGluZSQgKyAiW09XU3RyaW5nXSIJCSsgY2hyJCg5KSArICJNSU1FVHlwZSIJCQkJCSsgY2hyJCg5KSArICI9IHsiICsgY2hyJCg5KSArIHNNSU1FVHlwZSQJCQkJCQkrICJ9IiArIGNociQoMTMpCgkJc091dExpbmUkID0gc091dExpbmUkICsgIltPV1N0cmluZ10iCQkrIGNociQoOSkgKyAiTW9kaWZpZWRCeSIJCQkJKyBjaHIkKDkpICsgIj0geyIgKyBjaHIkKDkpICsgc01vZGlmaWVkQnkkCQkJCQkJKyAifSIgKyBjaHIkKDEzKQoJCXNPdXRMaW5lJCA9IHNPdXRMaW5lJCArICJbRGF0ZVRpbWVdIgkJKyBjaHIkKDkpICsgIk1vZGlmeURhdGUiCQkJCSsgY2hyJCg5KSArICI9IHsiICsgY2hyJCg5KSArIERhdGVUaW1lMlN0cmluZyhkTW9kaWZ5RGF0ZSkJCSsgIn0iICsgY2hyJCgxMykKCQlzT3V0TGluZSQgPSBzT3V0TGluZSQgKyAiW09XU3RyaW5nXSIJCSsgY2hyJCg5KSArICJOZXdzZ3JvdXBzIgkJCQkrIGNociQoOSkgKyAiPSB7IiArIGNociQoOSkgKyBzTmV3c2dyb3VwcyQJCQkJCQkrICJ9IiArIGNociQoMTMpCgkJc091dExpbmUkID0gc091dExpbmUkICsgIltPV1N0cmluZ10iCQkrIGNociQoOSkgKyAiT3JpZ2luYWwiCQkJCQkrIGNociQoOSkgKyAiPSB7IiArIGNociQoOSkgKyBzT3JpZ2luYWwkCQkJCQkJKyAifSIgKyBjaHIkKDEzKQoJCXNPdXRMaW5lJCA9IHNPdXRMaW5lJCArICJbc2FsX0Jvb2xdIgkJKyBjaHIkKDkpICsgIlBvcnRhYmxlR3JhcGhpY3MiCQkJKyBjaHIkKDkpICsgIj0geyIgKyBjaHIkKDkpICsgYlBvcnRhYmxlR3JhcGhpY3MJCQkJCSsgIn0iICsgY2hyJCgxMykKCQlzT3V0TGluZSQgPSBzT3V0TGluZSQgKyAiW0RhdGVUaW1lXSIJCSsgY2hyJCg5KSArICJQcmludERhdGUiCQkJCQkrIGNociQoOSkgKyAiPSB7IiArIGNociQoOSkgKyBEYXRlVGltZTJTdHJpbmcoZFByaW50RGF0ZSkJCSsgIn0iICsgY2hyJCgxMykKCQlzT3V0TGluZSQgPSBzT3V0TGluZSQgKyAiW09XU3RyaW5nXSIJCSsgY2hyJCg5KSArICJQcmludGVkQnkiCQkJCQkrIGNociQoOSkgKyAiPSB7IiArIGNociQoOSkgKyBzUHJpbnRlZEJ5JAkJCQkJCSsgIn0iICsgY2hyJCgxMykKCQlzT3V0TGluZSQgPSBzT3V0TGluZSQgKyAiW3NhbF9JbnQxNl0iCQkrIGNociQoOSkgKyAiUHJpb3JpdHkiCQkJCQkrIGNociQoOSkgKyAiPSB7IiArIGNociQoOSkgKyBuUHJpb3JpdHklCQkJCQkJKyAifSIgKyBjaHIkKDEzKQoJCXNPdXRMaW5lJCA9IHNPdXRMaW5lJCArICJbc2FsX0Jvb2xdIgkJKyBjaHIkKDkpICsgIlF1ZXJ5VGVtcGxhdGUiCQkJCSsgY2hyJCg5KSArICI9IHsiICsgY2hyJCg5KSArIGJRdWVyeVRlbXBsYXRlCQkJCQkrICJ9IiArIGNociQoMTMpCgkJc091dExpbmUkID0gc091dExpbmUkICsgIltPV1N0cmluZ10iCQkrIGNociQoOSkgKyAiUmVjaXBpZW50IgkJCQkJKyBjaHIkKDkpICsgIj0geyIgKyBjaHIkKDkpICsgc1JlY2lwaWVudCQJCQkJCQkrICJ9IiArIGNociQoMTMpCgkJc091dExpbmUkID0gc091dExpbmUkICsgIltPV1N0cmluZ10iCQkrIGNociQoOSkgKyAiUmVmZXJlbmNlcyIJCQkJKyBjaHIkKDkpICsgIj0geyIgKyBjaHIkKDkpICsgc1JlZmVyZW5jZXMkCQkJCQkJKyAifSIgKyBjaHIkKDEzKQoJCXNPdXRMaW5lJCA9IHNPdXRMaW5lJCArICJbT1dTdHJpbmddIgkJKyBjaHIkKDkpICsgIlJlcGx5VG8iCQkJCQkrIGNociQoOSkgKyAiPSB7IiArIGNociQoOSkgKyBzUmVwbHlUbyQJCQkJCQkJKyAifSIgKyBjaHIkKDEzKQoJCXNPdXRMaW5lJCA9IHNPdXRMaW5lJCArICJbc2FsX0Jvb2xdIgkJKyBjaHIkKDkpICsgIlNhdmVHcmFwaGljc0NvbXByZXNzZWQiCSsgY2hyJCg5KSArICI9IHsiICsgY2hyJCg5KSArIGJTYXZlR3JhcGhpY3NDb21wcmVzc2VkCQkJKyAifSIgKyBjaHIkKDEzKQoJCXNPdXRMaW5lJCA9IHNPdXRMaW5lJCArICJbc2FsX0Jvb2xdIgkJKyBjaHIkKDkpICsgIlNhdmVPcmlnaW5hbEdyYXBoaWNzIgkJKyBjaHIkKDkpICsgIj0geyIgKyBjaHIkKDkpICsgYlNhdmVPcmlnaW5hbEdyYXBoaWNzCQkJCSsgIn0iICsgY2hyJCgxMykKCQlzT3V0TGluZSQgPSBzT3V0TGluZSQgKyAiW3NhbF9Cb29sXSIJCSsgY2hyJCg5KSArICJTYXZlVmVyc2lvbk9uQ2xvc2UiCQkrIGNociQoOSkgKyAiPSB7IiArIGNociQoOSkgKyBiU2F2ZVZlcnNpb25PbkNsb3NlCQkJCSsgIn0iICsgY2hyJCgxMykKCQlzT3V0TGluZSQgPSBzT3V0TGluZSQgKyAiW09XU3RyaW5nXSIJCSsgY2hyJCg5KSArICJUZW1wbGF0ZSIJCQkJCSsgY2hyJCg5KSArICI9IHsiICsgY2hyJCg5KSArIHNUZW1wbGF0ZSQJCQkJCQkrICJ9IiArIGNociQoMTMpCgkJc091dExpbmUkID0gc091dExpbmUkICsgIltzYWxfQm9vbF0iCQkrIGNociQoOSkgKyAiVGVtcGxhdGVDb25maWciCQkJKyBjaHIkKDkpICsgIj0geyIgKyBjaHIkKDkpICsgYlRlbXBsYXRlQ29uZmlnCQkJCQkrICJ9IiArIGNociQoMTMpCgkJc091dExpbmUkID0gc091dExpbmUkICsgIltEYXRlVGltZV0iCQkrIGNociQoOSkgKyAiVGVtcGxhdGVEYXRlIgkJCQkrIGNociQoOSkgKyAiPSB7IiArIGNociQoOSkgKyBEYXRlVGltZTJTdHJpbmcoZFRlbXBsYXRlRGF0ZSkJKyAifSIgKyBjaHIkKDEzKQoJCXNPdXRMaW5lJCA9IHNPdXRMaW5lJCArICJbT1dTdHJpbmddIgkJKyBjaHIkKDkpICsgIlRlbXBsYXRlRmlsZU5hbWUiCQkJKyBjaHIkKDkpICsgIj0geyIgKyBjaHIkKDkpICsgc1RlbXBsYXRlRmlsZU5hbWUkCQkJCSsgIn0iICsgY2hyJCgxMykKCQlzT3V0TGluZSQgPSBzT3V0TGluZSQgKyAiW09XU3RyaW5nXSIJCSsgY2hyJCg5KSArICJUaGVtZSIJCQkJCQkrIGNociQoOSkgKyAiPSB7IiArIGNociQoOSkgKyBzVGhlbWUkCQkJCQkJCSsgIn0iICsgY2hyJCgxMykKCQlzT3V0TGluZSQgPSBzT3V0TGluZSQgKyAiW09XU3RyaW5nXSIJCSsgY2hyJCg5KSArICJUaXRsZSIJCQkJCQkrIGNociQoOSkgKyAiPSB7IiArIGNociQoOSkgKyBzVGl0bGUkCQkJCQkJCSsgIn0iICsgY2hyJCgxMykKCQlzT3V0TGluZSQgPSBzT3V0TGluZSQgKyAiW3NhbF9Cb29sXSIJCSsgY2hyJCg5KSArICJVc2VyRGF0YSIJCQkJCSsgY2hyJCg5KSArICI9IHsiICsgY2hyJCg5KSArIGJVc2VyRGF0YQkJCQkJCQkrICJ9IgoKCQknIEF1c2dhYmUgZGVyIGZvcm1hdGllcnRlbiBaZWljaGVua2V0dGUKCQlJbmZvTWVzc2FnZSAoIHNPdXRMaW5lJCApCkVuZCBTdWIKCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCicgSGlsZnNtZXRob2RlOiBaZWlndCBkaWUgYWt0dWVsbGVuIEVsZW1lbnRlIGRlcyBOYW1lQ29udGFpbmVycyBhbi4KJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3ViIFNob3dOYW1lQ29udGFpbmVyICggYURvY3VtZW50UHJvcGVydGllcyApCgoJCWlmICggYURvY3VtZW50UHJvcGVydGllcy5oYXNFbGVtZW50cyAoKSA9IEZBTFNFICkgdGhlbgoJCQlJbmZvTWVzc2FnZSAoICJLZWluZSBFbGVtZW50ZSBpbSBOYW1lQ29udGFpbmVyIGVudGhhbHRlbi4iICkKCQkJRXhpdCBTdWIKCQllbmQgaWYKCgkJYU5hbWVGaWVsZAkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzLmdldEVsZW1lbnROYW1lcyAoKQoJCWlmICggSXNBcnJheSAoIGFOYW1lRmllbGQgKSA9IEZBTFNFICkgdGhlbgoJCQlFcnJvck1lc3NhZ2UgKCAiZ2V0RWxlbWVudE5hbWVzKCkgLi4uLiBGZWhsZXIgKEVzIGtvbm50ZSBrZWluZSBTZXF1ZW5jZSBiZXN0aW1tdCB3ZXJkZW4hKSIgKQoJCQlFeGl0IFN1YgoJCWVuZCBpZgoJCW5FbGVtZW50Q291bnQlCT0gVUJvdW5kICggYU5hbWVGaWVsZCAoKSApCgoJCXN0ZW1wU3RyaW5nJCA9ICIiCgkJZm9yIG5Db3VudGVyJT0wIHRvIG5FbGVtZW50Q291bnQlIHN0ZXAgMQoJCQlzdGVtcFN0cmluZyQgPSAiWyIgKyBuQ291bnRlciUgKyAiXSIKCQkJc3RlbXBTdHJpbmckID0gc3RlbXBTdHJpbmckICsgY2hyJCg5KSArIGFOYW1lRmllbGQobkNvdW50ZXIlKQoJCQlzdGVtcFN0cmluZyQgPSBzdGVtcFN0cmluZyQgKyBjaHIkKDkpICsgIj0iCgkJCXN0ZW1wU3RyaW5nJCA9IHN0ZW1wU3RyaW5nJCArIGNociQoOSkgKyBhRG9jdW1lbnRQcm9wZXJ0aWVzLmdldEJ5TmFtZSAoIGFOYW1lRmllbGQobkNvdW50ZXIlKSApCgkJCXN0ZW1wU3RyaW5nJCA9IHN0ZW1wU3RyaW5nJCArIGNociQoMTMpCgkJbmV4dCBuQ291bnRlciUKCgkJSW5mb01lc3NhZ2UgKCBzdGVtcFN0cmluZyQgKQoKRW5kIFN1YgoKJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJyBIaWxmc2Z1bmt0aW9uOiBFcm1pdHRlbHQgZGllIEFuemFobCBkZXIgaW0gTmFtZUNvbnRhaW5lciBlbnRoYWx0ZW5lbiBFbGVtZW50ZS4KJwonIFJldHVybndlcnQgPSBBbnphaGwgZGVyIEVsZW1lbnRlCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZ1bmN0aW9uIGdldE5hbWVDb250YWluZXJDb3VudCAoIGFEb2N1bWVudFByb3BlcnRpZXMgKSBhcyBMb25nCgoJCWlmICggYURvY3VtZW50UHJvcGVydGllcy5oYXNFbGVtZW50cyAoKSA9IEZBTFNFICkgdGhlbgoJCQlnZXROYW1lQ29udGFpbmVyQ291bnQgPSAwCgkJCUV4aXQgRnVuY3Rpb24KCQllbmQgaWYKCgkJYU5hbWVGaWVsZAkJPSBhRG9jdW1lbnRQcm9wZXJ0aWVzLmdldEVsZW1lbnROYW1lcyAoKQoJCW5FbGVtZW50Q291bnQlCT0gVUJvdW5kICggYU5hbWVGaWVsZCAoKSApCgoJCScgRGEgZGllIFphZWhsdW5nIGJlaSAwIGJlZ2lubnQsIHVuZCBkZXIgZXJtaXR0ZWx0ZSBXZXJ0IGRpZSBvYmVyZSBHcmVuemUgZGFyc3RlbGx0LAoJCScgbXVzcyBoaWVyIGVpbmUgMSBkcmF1Zmdlc2NobGFnZW4gd2VyZGVuLgoJCWdldE5hbWVDb250YWluZXJDb3VudCA9IG5FbGVtZW50Q291bnQlICsgMQoKRW5kIEZ1bmN0aW9uCg==