IiIiU3VpdGUgTWV0cm93ZXJrcyBTaGVsbCBTdWl0ZTogRXZlbnRzIHN1cHBvcnRlZCBieSB0aGUgTWV0cm93ZXJrcyBQcm9qZWN0IFNoZWxsCkxldmVsIDEsIHZlcnNpb24gMQoKR2VuZXJhdGVkIGZyb20gZmxhcDpNZXRyb3dlcmtzOk1ldHJvd2Vya3MgQ29kZVdhcnJpb3I6Q29kZVdhcnJpb3IgSURFIDIuMC4xCkFFVEUvQUVVVCByZXNvdXJjZSB2ZXJzaW9uIDEvMCwgbGFuZ3VhZ2UgMCwgc2NyaXB0IDAKIiIiCgppbXBvcnQgYWV0b29scwppbXBvcnQgTWFjT1MKCl9jb2RlID0gJ01NUFInCgpjbGFzcyBNZXRyb3dlcmtzX1NoZWxsX1N1aXRlOgoKCV9hcmdtYXBfQWRkX0ZpbGVzID0gewoJCSdUb19TZWdtZW50JyA6ICdTZWdtJywKCX0KCglkZWYgQWRkX0ZpbGVzKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgoJCSIiIkFkZCBGaWxlczogQWRkIHRoZSBzcGVjaWZpZWQgZmlsZShzKSB0byB0aGUgY3VycmVudCBwcm9qZWN0CgkJUmVxdWlyZWQgYXJndW1lbnQ6IExpc3Qgb2YgZmlsZXMgdG8gYWRkCgkJS2V5d29yZCBhcmd1bWVudCBUb19TZWdtZW50OiBTZWdtZW50IG51bWJlciBpbnRvIHdoaWNoIHRvIGFkZCB0aGUgZmlsZShzKQoJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKCQlSZXR1cm5zOiBFcnJvciBjb2RlIGZvciBlYWNoIGZpbGUgYWRkZWQKCQkiIiIKCQlfY29kZSA9ICdNTVBSJwoJCV9zdWJjb2RlID0gJ0FkZEYnCgoJCWFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX0FkZF9GaWxlcykKCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CgoKCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgoJCQlyYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCgkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgoJCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCgoJX2FyZ21hcF9DaGVja19TeW50YXggPSB7CgkJJ0V4dGVybmFsRWRpdG9yJyA6ICdFcnJzJywKCX0KCglkZWYgQ2hlY2tfU3ludGF4KHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgoJCSIiIkNoZWNrIFN5bnRheDogQ2hlY2sgdGhlIHN5bnRheCBvZiB0aGUgc3BlY2lmaWVkIGZpbGUocykKCQlSZXF1aXJlZCBhcmd1bWVudDogTGlzdCBvZiBmaWxlcyB0byBjaGVjayB0aGUgc3ludGF4IG9mCgkJS2V5d29yZCBhcmd1bWVudCBFeHRlcm5hbEVkaXRvcjogU2hvdWxkIHRoZSBjb250ZW50cyBvZiB0aGUgbWVzc2FnZSB3aW5kb3cgYmUgcmV0dXJuZWQgdG8gdGhlIGNhbGxlcj8KCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CgkJUmV0dXJuczogRXJyb3JzIGZvciBlYWNoIGZpbGUgd2hvc2Ugc3ludGF4IHdhcyBjaGVja2VkCgkJIiIiCgkJX2NvZGUgPSAnTU1QUicKCQlfc3ViY29kZSA9ICdDaGVrJwoKCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9DaGVja19TeW50YXgpCgkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCWRlZiBDbG9zZV9Qcm9qZWN0KHNlbGYsIF9ub19vYmplY3Q9Tm9uZSwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CgkJIiIiQ2xvc2UgUHJvamVjdDogQ2xvc2UgdGhlIGN1cnJlbnQgcHJvamVjdAoJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKCQkiIiIKCQlfY29kZSA9ICdNTVBSJwoJCV9zdWJjb2RlID0gJ0Nsc1AnCgoJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCgkJaWYgX25vX29iamVjdCAhPSBOb25lOiByYWlzZSBUeXBlRXJyb3IsICdObyBkaXJlY3QgYXJnIGV4cGVjdGVkJwoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCV9hcmdtYXBfQ2xvc2VfV2luZG93ID0gewoJCSdTYXZpbmcnIDogJ3Nhdm8nLAoJfQoKCWRlZiBDbG9zZV9XaW5kb3coc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CgkJIiIiQ2xvc2UgV2luZG93OiBDbG9zZSB0aGUgd2luZG93cyBzaG93aW5nIHRoZSBzcGVjaWZpZWQgZmlsZXMKCQlSZXF1aXJlZCBhcmd1bWVudDogVGhlIGZpbGVzIHRvIGNsb3NlCgkJS2V5d29yZCBhcmd1bWVudCBTYXZpbmc6IFdoZXRoZXIgdG8gc2F2ZSBjaGFuZ2VzIHRvIGVhY2ggZmlsZSBiZWZvcmUgY2xvc2luZyBpdHMgd2luZG93CgkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQoJCSIiIgoJCV9jb2RlID0gJ01NUFInCgkJX3N1YmNvZGUgPSAnQ2xzVycKCgkJYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfQ2xvc2VfV2luZG93KQoJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKCgkJYWV0b29scy5lbnVtc3Vic3QoX2FyZ3VtZW50cywgJ3Nhdm8nLCBfRW51bV9zYXZvKQoKCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgoJCQlyYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCgkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgoJCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCgoJX2FyZ21hcF9Db21waWxlID0gewoJCSdFeHRlcm5hbEVkaXRvcicgOiAnRXJycycsCgl9CgoJZGVmIENvbXBpbGUoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CgkJIiIiQ29tcGlsZTogQ29tcGlsZSB0aGUgc3BlY2lmaWVkIGZpbGUocykKCQlSZXF1aXJlZCBhcmd1bWVudDogTGlzdCBvZiBmaWxlcyB0byBjb21waWxlCgkJS2V5d29yZCBhcmd1bWVudCBFeHRlcm5hbEVkaXRvcjogU2hvdWxkIHRoZSBjb250ZW50cyBvZiB0aGUgbWVzc2FnZSB3aW5kb3cgYmUgcmV0dXJuZWQgdG8gdGhlIGNhbGxlcj8KCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CgkJUmV0dXJuczogRXJyb3JzIGZvciBlYWNoIGZpbGUgY29tcGlsZWQKCQkiIiIKCQlfY29kZSA9ICdNTVBSJwoJCV9zdWJjb2RlID0gJ0NvbXAnCgoJCWFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX0NvbXBpbGUpCgkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCV9hcmdtYXBfQ3JlYXRlX1Byb2plY3QgPSB7CgkJJ2Zyb21fc3RhdGlvbmVyeScgOiAnVG1wbCcsCgl9CgoJZGVmIENyZWF0ZV9Qcm9qZWN0KHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgoJCSIiIkNyZWF0ZSBQcm9qZWN0OiBDcmVhdGUgYSBuZXcgcHJvamVjdCBmaWxlCgkJUmVxdWlyZWQgYXJndW1lbnQ6IE5ldyBwcm9qZWN0IGZpbGUgc3BlY2lmaWVyCgkJS2V5d29yZCBhcmd1bWVudCBmcm9tX3N0YXRpb25lcnk6IHVuZG9jdW1lbnRlZCwgdHlwZWNvZGUgJ2FsaXMnCgkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQoJCSIiIgoJCV9jb2RlID0gJ01NUFInCgkJX3N1YmNvZGUgPSAnTmV3UCcKCgkJYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfQ3JlYXRlX1Byb2plY3QpCgkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCWRlZiBHZXRfRGVmaW5pdGlvbihzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKCQkiIiJHZXQgRGVmaW5pdGlvbjogUmV0dXJucyB0aGUgbG9jYXRpb24ocykgb2YgYSBnbG9iYWxseSBzY29wZWQgZnVuY3Rpb24gb3IgZGF0YSBvYmplY3QuCgkJUmVxdWlyZWQgYXJndW1lbnQ6IHVuZG9jdW1lbnRlZCwgdHlwZWNvZGUgJ1RFWFQnCgkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQoJCVJldHVybnM6IHVuZG9jdW1lbnRlZCwgdHlwZWNvZGUgJ0ZEZWYnCgkJIiIiCgkJX2NvZGUgPSAnTU1QUicKCQlfc3ViY29kZSA9ICdHRGVmJwoKCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwoJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKCgoJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAoJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6CgkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6CgkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KCglkZWYgR2V0X09wZW5fRG9jdW1lbnRzKHNlbGYsIF9ub19vYmplY3Q9Tm9uZSwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CgkJIiIiR2V0IE9wZW4gRG9jdW1lbnRzOiBSZXR1cm5zIHRoZSBsaXN0IG9mIG9wZW4gZG9jdW1lbnRzCgkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQoJCVJldHVybnM6IFRoZSBsaXN0IG9mIGRvY3VtZW50cwoJCSIiIgoJCV9jb2RlID0gJ01NUFInCgkJX3N1YmNvZGUgPSAnR0RvYycKCgkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKCQlpZiBfbm9fb2JqZWN0ICE9IE5vbmU6IHJhaXNlIFR5cGVFcnJvciwgJ05vIGRpcmVjdCBhcmcgZXhwZWN0ZWQnCgoKCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgoJCQlyYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCgkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgoJCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCgoJX2FyZ21hcF9HZXRfUHJlZmVyZW5jZXMgPSB7CgkJJ29mJyA6ICdQUmVjJywKCQknZnJvbV9wYW5lbCcgOiAnUE5hbScsCgl9CgoJZGVmIEdldF9QcmVmZXJlbmNlcyhzZWxmLCBfbm9fb2JqZWN0PU5vbmUsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgoJCSIiIkdldCBQcmVmZXJlbmNlczogR2V0IHRoZSBwcmVmZXJlbmNlcyBmb3IgdGhlIGN1cnJlbnQgcHJvamVjdAoJCUtleXdvcmQgYXJndW1lbnQgb2Y6IE5hbWVzIG9mIHJlcXVlc3RlZCBwcmVmZXJlbmNlcwoJCUtleXdvcmQgYXJndW1lbnQgZnJvbV9wYW5lbDogTmFtZSBvZiB0aGUgcHJlZmVyZW5jZSBwYW5lbAoJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKCQlSZXR1cm5zOiBUaGUgcmVxdWVzdGVkIHByZWZlcmVuY2VzCgkJIiIiCgkJX2NvZGUgPSAnTU1QUicKCQlfc3ViY29kZSA9ICdHcmVmJwoKCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9HZXRfUHJlZmVyZW5jZXMpCgkJaWYgX25vX29iamVjdCAhPSBOb25lOiByYWlzZSBUeXBlRXJyb3IsICdObyBkaXJlY3QgYXJnIGV4cGVjdGVkJwoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCV9hcmdtYXBfR2V0X1Byb2plY3RfRmlsZSA9IHsKCQknU2VnbWVudCcgOiAnU2VnbScsCgl9CgoJZGVmIEdldF9Qcm9qZWN0X0ZpbGUoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CgkJIiIiR2V0IFByb2plY3QgRmlsZTogUmV0dXJucyBhIGRlc2NyaXB0aW9uIG9mIGEgZmlsZSBpbiB0aGUgcHJvamVjdCB3aW5kb3cuCgkJUmVxdWlyZWQgYXJndW1lbnQ6IFRoZSBpbmRleCBvZiB0aGUgZmlsZSB3aXRoaW4gaXRzIHNlZ21lbnQuCgkJS2V5d29yZCBhcmd1bWVudCBTZWdtZW50OiBUaGUgc2VnbWVudCBjb250YWluaW5nIHRoZSBmaWxlLgoJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKCQlSZXR1cm5zOiB1bmRvY3VtZW50ZWQsIHR5cGVjb2RlICdTcmNGJwoJCSIiIgoJCV9jb2RlID0gJ01NUFInCgkJX3N1YmNvZGUgPSAnR0ZpbCcKCgkJYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfR2V0X1Byb2plY3RfRmlsZSkKCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CgoKCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgoJCQlyYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCgkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgoJCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCgoJZGVmIEdldF9Qcm9qZWN0X1NwZWNpZmllcihzZWxmLCBfbm9fb2JqZWN0PU5vbmUsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgoJCSIiIkdldCBQcm9qZWN0IFNwZWNpZmllcjogUmV0dXJuIHRoZSBGaWxlIFNwZWNpZmllciBmb3IgdGhlIGN1cnJlbnQgcHJvamVjdAoJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKCQlSZXR1cm5zOiBGaWxlIFNwZWNpZmllciBmb3IgdGhlIGN1cnJlbnQgcHJvamVjdAoJCSIiIgoJCV9jb2RlID0gJ01NUFInCgkJX3N1YmNvZGUgPSAnR2V0UCcKCgkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKCQlpZiBfbm9fb2JqZWN0ICE9IE5vbmU6IHJhaXNlIFR5cGVFcnJvciwgJ05vIGRpcmVjdCBhcmcgZXhwZWN0ZWQnCgoKCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgoJCQlyYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCgkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgoJCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCgoJZGVmIEdldF9TZWdtZW50cyhzZWxmLCBfbm9fb2JqZWN0PU5vbmUsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgoJCSIiIkdldCBTZWdtZW50czogUmV0dXJucyBhIGRlc2NyaXB0aW9uIG9mIGVhY2ggc2VnbWVudCBpbiB0aGUgcHJvamVjdC4KCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CgkJUmV0dXJuczogdW5kb2N1bWVudGVkLCB0eXBlY29kZSAnU2VnICcKCQkiIiIKCQlfY29kZSA9ICdNTVBSJwoJCV9zdWJjb2RlID0gJ0dTZWcnCgoJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCgkJaWYgX25vX29iamVjdCAhPSBOb25lOiByYWlzZSBUeXBlRXJyb3IsICdObyBkaXJlY3QgYXJnIGV4cGVjdGVkJwoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCWRlZiBHb3RvX0Z1bmN0aW9uKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgoJCSIiIkdvdG8gRnVuY3Rpb246IEdvdG8gU3BlY2lmaWVkIEZ1bmN0aW9uIE5hbWUKCQlSZXF1aXJlZCBhcmd1bWVudDogdW5kb2N1bWVudGVkLCB0eXBlY29kZSAnVEVYVCcKCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CgkJIiIiCgkJX2NvZGUgPSAnTU1QUicKCQlfc3ViY29kZSA9ICdHb0ZuJwoKCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwoJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKCgoJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAoJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6CgkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6CgkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KCglkZWYgR290b19MaW5lKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgoJCSIiIkdvdG8gTGluZTogR290byBTcGVjaWZpZWQgTGluZSBOdW1iZXIKCQlSZXF1aXJlZCBhcmd1bWVudDogVGhlIHJlcXVlc3RlZCBzb3VyY2UgZmlsZSBsaW5lIG51bWJlcgoJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKCQkiIiIKCQlfY29kZSA9ICdNTVBSJwoJCV9zdWJjb2RlID0gJ0dvTG4nCgoJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCgkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCWRlZiBJc19Jbl9Qcm9qZWN0KHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgoJCSIiIklzIEluIFByb2plY3Q6IFdoZXRoZXIgb3Igbm90IHRoZSBzcGVjaWZpZWQgZmlsZShzKSBpcyBpbiB0aGUgY3VycmVudCBwcm9qZWN0CgkJUmVxdWlyZWQgYXJndW1lbnQ6IExpc3Qgb2YgZmlsZXMgdG8gY2hlY2sgZm9yIHByb2plY3QgbWVtYmVyc2hpcAoJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKCQlSZXR1cm5zOiBSZXN1bHQgY29kZSBmb3IgZWFjaCBmaWxlCgkJIiIiCgkJX2NvZGUgPSAnTU1QUicKCQlfc3ViY29kZSA9ICdGSW5QJwoKCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwoJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKCgoJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAoJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6CgkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6CgkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KCglfYXJnbWFwX01ha2VfUHJvamVjdCA9IHsKCQknRXh0ZXJuYWxFZGl0b3InIDogJ0VycnMnLAoJfQoKCWRlZiBNYWtlX1Byb2plY3Qoc2VsZiwgX25vX29iamVjdD1Ob25lLCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKCQkiIiJNYWtlIFByb2plY3Q6IE1ha2UgdGhlIGN1cnJlbnQgcHJvamVjdAoJCUtleXdvcmQgYXJndW1lbnQgRXh0ZXJuYWxFZGl0b3I6IFNob3VsZCB0aGUgY29udGVudHMgb2YgdGhlIG1lc3NhZ2Ugd2luZG93IGJlIHJldHVybmVkIHRvIHRoZSBjYWxsZXI/CgkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQoJCVJldHVybnM6IEVycm9ycyB0aGF0IG9jY3VycmVkIHdoaWxlIG1ha2luZyB0aGUgcHJvamVjdAoJCSIiIgoJCV9jb2RlID0gJ01NUFInCgkJX3N1YmNvZGUgPSAnTWFrZScKCgkJYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfTWFrZV9Qcm9qZWN0KQoJCWlmIF9ub19vYmplY3QgIT0gTm9uZTogcmFpc2UgVHlwZUVycm9yLCAnTm8gZGlyZWN0IGFyZyBleHBlY3RlZCcKCgoJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAoJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6CgkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6CgkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KCglfYXJnbWFwX1ByZWNvbXBpbGUgPSB7CgkJJ1NhdmluZ19BcycgOiAnVGFyZycsCgkJJ0V4dGVybmFsRWRpdG9yJyA6ICdFcnJzJywKCX0KCglkZWYgUHJlY29tcGlsZShzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKCQkiIiJQcmVjb21waWxlOiBQcmVjb21waWxlIHRoZSBzcGVjaWZpZWQgZmlsZSB0byB0aGUgc3BlY2lmaWVkIGRlc3RpbmF0aW9uIGZpbGUKCQlSZXF1aXJlZCBhcmd1bWVudDogRmlsZSB0byBwcmVjb21waWxlCgkJS2V5d29yZCBhcmd1bWVudCBTYXZpbmdfQXM6IERlc3RpbmF0aW9uIGZpbGUgZm9yIHByZWNvbXBpbGVkIGhlYWRlcgoJCUtleXdvcmQgYXJndW1lbnQgRXh0ZXJuYWxFZGl0b3I6IFNob3VsZCB0aGUgY29udGVudHMgb2YgdGhlIG1lc3NhZ2Ugd2luZG93IGJlIHJldHVybmVkIHRvIHRoZSBjYWxsZXI/CgkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQoJCVJldHVybnM6IEVycm9ycyBmb3IgdGhlIHByZWNvbXBpbGVkIGZpbGUKCQkiIiIKCQlfY29kZSA9ICdNTVBSJwoJCV9zdWJjb2RlID0gJ1ByZUMnCgoJCWFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX1ByZWNvbXBpbGUpCgkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCV9hcmdtYXBfUHJlcHJvY2VzcyA9IHsKCQknRXh0ZXJuYWxFZGl0b3InIDogJ0VycnMnLAoJfQoKCWRlZiBQcmVwcm9jZXNzKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgoJCSIiIlByZXByb2Nlc3M6IFByZXByb2Nlc3NlcyB0aGUgc3BlY2lmaWVkIGZpbGUocykKCQlSZXF1aXJlZCBhcmd1bWVudDogdW5kb2N1bWVudGVkLCB0eXBlY29kZSAnYWxpcycKCQlLZXl3b3JkIGFyZ3VtZW50IEV4dGVybmFsRWRpdG9yOiB1bmRvY3VtZW50ZWQsIHR5cGVjb2RlICdib29sJwoJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKCQlSZXR1cm5zOiBFcnJvcnMgZm9yIGVhY2ggcHJlcHJvY2Vzc2VkIGZpbGUKCQkiIiIKCQlfY29kZSA9ICdNTVBSJwoJCV9zdWJjb2RlID0gJ1ByZVAnCgoJCWFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX1ByZXByb2Nlc3MpCgkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCWRlZiBSZW1vdmVfQmluYXJpZXMoc2VsZiwgX25vX29iamVjdD1Ob25lLCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKCQkiIiJSZW1vdmUgQmluYXJpZXM6IFJlbW92ZSB0aGUgYmluYXJ5IG9iamVjdCBjb2RlIGZyb20gdGhlIGN1cnJlbnQgcHJvamVjdAoJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKCQkiIiIKCQlfY29kZSA9ICdNTVBSJwoJCV9zdWJjb2RlID0gJ1JlbUInCgoJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCgkJaWYgX25vX29iamVjdCAhPSBOb25lOiByYWlzZSBUeXBlRXJyb3IsICdObyBkaXJlY3QgYXJnIGV4cGVjdGVkJwoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCWRlZiBSZW1vdmVfRmlsZXMoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CgkJIiIiUmVtb3ZlIEZpbGVzOiBSZW1vdmUgdGhlIHNwZWNpZmllZCBmaWxlKHMpIGZyb20gdGhlIGN1cnJlbnQgcHJvamVjdAoJCVJlcXVpcmVkIGFyZ3VtZW50OiBMaXN0IG9mIGZpbGVzIHRvIHJlbW92ZQoJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKCQlSZXR1cm5zOiBFcnJvciBjb2RlIGZvciBlYWNoIGZpbGUgcmVtb3ZlZAoJCSIiIgoJCV9jb2RlID0gJ01NUFInCgkJX3N1YmNvZGUgPSAnUmVtRicKCgkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CgoKCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgoJCQlyYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCgkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgoJCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCgoJZGVmIFJlc2V0X0ZpbGVfUGF0aHMoc2VsZiwgX25vX29iamVjdD1Ob25lLCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKCQkiIiJSZXNldCBGaWxlIFBhdGhzOiBSZXNldHMgYWNjZXNzIHBhdGhzIGZvciBhbGwgZmlsZXMgYmVsb25naW5nIHRvIG9wZW4gcHJvamVjdC4KCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CgkJIiIiCgkJX2NvZGUgPSAnTU1QUicKCQlfc3ViY29kZSA9ICdSZUZQJwoKCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwoJCWlmIF9ub19vYmplY3QgIT0gTm9uZTogcmFpc2UgVHlwZUVycm9yLCAnTm8gZGlyZWN0IGFyZyBleHBlY3RlZCcKCgoJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAoJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6CgkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6CgkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KCglfYXJnbWFwX1J1bl9Qcm9qZWN0ID0gewoJCSdFeHRlcm5hbEVkaXRvcicgOiAnRXJycycsCgkJJ1NvdXJjZURlYnVnZ2VyJyA6ICdEZUJnJywKCX0KCglkZWYgUnVuX1Byb2plY3Qoc2VsZiwgX25vX29iamVjdD1Ob25lLCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKCQkiIiJSdW4gUHJvamVjdDogUnVuIHRoZSBjdXJyZW50IHByb2plY3QKCQlLZXl3b3JkIGFyZ3VtZW50IEV4dGVybmFsRWRpdG9yOiBTaG91bGQgdGhlIGNvbnRlbnRzIG9mIHRoZSBtZXNzYWdlIHdpbmRvdyBiZSByZXR1cm5lZCB0byB0aGUgY2FsbGVyPwoJCUtleXdvcmQgYXJndW1lbnQgU291cmNlRGVidWdnZXI6IFJ1biB0aGUgYXBwbGljYXRpb24gdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlIHNvdXJjZS1sZXZlbCBkZWJ1Z2dlcgoJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKCQlSZXR1cm5zOiBFcnJvcnMgdGhhdCBvY2N1cnJlZCB3aGVuIHJ1bm5pbmcgdGhlIHByb2plY3QKCQkiIiIKCQlfY29kZSA9ICdNTVBSJwoJCV9zdWJjb2RlID0gJ1J1blAnCgoJCWFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX1J1bl9Qcm9qZWN0KQoJCWlmIF9ub19vYmplY3QgIT0gTm9uZTogcmFpc2UgVHlwZUVycm9yLCAnTm8gZGlyZWN0IGFyZyBleHBlY3RlZCcKCgoJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAoJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6CgkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6CgkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KCglkZWYgU2F2ZV9FcnJvcl9XaW5kb3dfQXMoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CgkJIiIiU2F2ZSBFcnJvciBXaW5kb3cgQXM6IFNhdmVzIHRoZSBFcnJvcnMgJiBXYXJuaW5ncyB3aW5kb3cgYXMgYSB0ZXh0IGZpbGUKCQlSZXF1aXJlZCBhcmd1bWVudDogRGVzdGluYXRpb24gZmlsZSBmb3IgU2F2ZSBNZXNzYWdlIFdpbmRvdyBBcwoJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKCQkiIiIKCQlfY29kZSA9ICdNTVBSJwoJCV9zdWJjb2RlID0gJ1N2TXMnCgoJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCgkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCWRlZiBTZXRfQ3VycmVudF9UYXJnZXQoc2VsZiwgX29iamVjdD1Ob25lLCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKCQkiIiJTZXQgQ3VycmVudCBUYXJnZXQ6IFNldCB0aGUgY3VycmVudCB0YXJnZXQgb2YgYSBwcm9qZWN0CgkJUmVxdWlyZWQgYXJndW1lbnQ6IE5hbWUgb2YgdGFyZ2V0CgkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQoJCSIiIgoJCV9jb2RlID0gJ01NUFInCgkJX3N1YmNvZGUgPSAnU1RyZycKCgkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CgoKCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgoJCQlyYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCgkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgoJCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCgoJZGVmIFNldF9EZWZhdWx0X1Byb2plY3Qoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CgkJIiIiU2V0IERlZmF1bHQgUHJvamVjdDogU2V0IHRoZSBkZWZhdWx0IHByb2plY3QKCQlSZXF1aXJlZCBhcmd1bWVudDogTmFtZSBvZiBwcm9qZWN0CgkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQoJCSIiIgoJCV9jb2RlID0gJ01NUFInCgkJX3N1YmNvZGUgPSAnU0RmUCcKCgkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CgoKCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgoJCQlyYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCgkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgoJCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCgoJX2FyZ21hcF9TZXRfTW9kaWZpY2F0aW9uX0RhdGUgPSB7CgkJJ3RvJyA6ICdNRGF0JywKCX0KCglkZWYgU2V0X01vZGlmaWNhdGlvbl9EYXRlKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgoJCSIiIlNldCBNb2RpZmljYXRpb24gRGF0ZTogQ2hhbmdlcyB0aGUgaW50ZXJuYWwgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhlIHNwZWNpZmllZCBmaWxlKHMpCgkJUmVxdWlyZWQgYXJndW1lbnQ6IExpc3Qgb2YgZmlsZXMKCQlLZXl3b3JkIGFyZ3VtZW50IHRvOiB1bmRvY3VtZW50ZWQsIHR5cGVjb2RlICdsZHQgJwoJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKCQlSZXR1cm5zOiBFcnJvciBjb2RlIGZvciBlYWNoIG1vZGlmaWVkIGZpbGUKCQkiIiIKCQlfY29kZSA9ICdNTVBSJwoJCV9zdWJjb2RlID0gJ1NNb2QnCgoJCWFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX1NldF9Nb2RpZmljYXRpb25fRGF0ZSkKCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CgoKCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgoJCQlyYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCgkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgoJCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCgoJX2FyZ21hcF9TZXRfUHJlZmVyZW5jZXMgPSB7CgkJJ29mX3BhbmVsJyA6ICdQTmFtJywKCQkndG8nIDogJ1BSZWMnLAoJfQoKCWRlZiBTZXRfUHJlZmVyZW5jZXMoc2VsZiwgX25vX29iamVjdD1Ob25lLCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKCQkiIiJTZXQgUHJlZmVyZW5jZXM6IFNldCB0aGUgcHJlZmVyZW5jZXMgZm9yIHRoZSBjdXJyZW50IHByb2plY3QKCQlLZXl3b3JkIGFyZ3VtZW50IG9mX3BhbmVsOiBOYW1lIG9mIHRoZSBwcmVmZXJlbmNlIHBhbmVsCgkJS2V5d29yZCBhcmd1bWVudCB0bzogUHJlZmVyZW5jZXMgc2V0dGluZ3MKCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CgkJIiIiCgkJX2NvZGUgPSAnTU1QUicKCQlfc3ViY29kZSA9ICdQcmVmJwoKCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9TZXRfUHJlZmVyZW5jZXMpCgkJaWYgX25vX29iamVjdCAhPSBOb25lOiByYWlzZSBUeXBlRXJyb3IsICdObyBkaXJlY3QgYXJnIGV4cGVjdGVkJwoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCV9hcmdtYXBfU2V0X1Byb2plY3RfRmlsZSA9IHsKCQkndG8nIDogJ1NyY1MnLAoJfQoKCWRlZiBTZXRfUHJvamVjdF9GaWxlKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgoJCSIiIlNldCBQcm9qZWN0IEZpbGU6IENoYW5nZXMgdGhlIHNldHRpbmdzIGZvciBhIGdpdmVuIGZpbGUgaW4gdGhlIHByb2plY3QuCgkJUmVxdWlyZWQgYXJndW1lbnQ6IFRoZSBuYW1lIG9mIHRoZSBmaWxlCgkJS2V5d29yZCBhcmd1bWVudCB0bzogVGhlIG5ldyBzZXR0aW5ncyBmb3IgdGhlIGZpbGUKCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CgkJIiIiCgkJX2NvZGUgPSAnTU1QUicKCQlfc3ViY29kZSA9ICdTRmlsJwoKCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9TZXRfUHJvamVjdF9GaWxlKQoJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKCgoJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAoJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6CgkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6CgkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KCglfYXJnbWFwX1NldF9TZWdtZW50ID0gewoJCSd0bycgOiAnU2VnbScsCgl9CgoJZGVmIFNldF9TZWdtZW50KHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgoJCSIiIlNldCBTZWdtZW50OiBDaGFuZ2VzIHRoZSBuYW1lIGFuZCBhdHRyaWJ1dGVzIG9mIGEgc2VnbWVudC4KCQlSZXF1aXJlZCBhcmd1bWVudDogVGhlIHNlZ21lbnQgdG8gY2hhbmdlCgkJS2V5d29yZCBhcmd1bWVudCB0bzogVGhlIG5ldyBuYW1lIGFuZCBhdHRyaWJ1dGVzIGZvciB0aGUgc2VnbWVudC4KCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CgkJIiIiCgkJX2NvZGUgPSAnTU1QUicKCQlfc3ViY29kZSA9ICdTU2VnJwoKCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9TZXRfU2VnbWVudCkKCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CgoKCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgoJCQlyYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCgkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgoJCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCgoJZGVmIFRvdWNoKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgoJCSIiIlRvdWNoOiBGb3JjZSByZWNvbXBpbGF0aW9uIG9mIHRoZSBzcGVjaWZpZWQgZmlsZShzKQoJCVJlcXVpcmVkIGFyZ3VtZW50OiBMaXN0IG9mIGZpbGVzIHRvIGNvbXBpbGUKCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CgkJUmV0dXJuczogRXJyb3IgY29kZSBmb3IgZWFjaCBmaWxlIHRvdWNoZWQKCQkiIiIKCQlfY29kZSA9ICdNTVBSJwoJCV9zdWJjb2RlID0gJ1RvY2gnCgoJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCgkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCV9hcmdtYXBfVXBkYXRlX1Byb2plY3QgPSB7CgkJJ0V4dGVybmFsRWRpdG9yJyA6ICdFcnJzJywKCX0KCglkZWYgVXBkYXRlX1Byb2plY3Qoc2VsZiwgX25vX29iamVjdD1Ob25lLCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKCQkiIiJVcGRhdGUgUHJvamVjdDogVXBkYXRlIHRoZSBjdXJyZW50IHByb2plY3QKCQlLZXl3b3JkIGFyZ3VtZW50IEV4dGVybmFsRWRpdG9yOiBTaG91bGQgdGhlIGNvbnRlbnRzIG9mIHRoZSBtZXNzYWdlIHdpbmRvdyBiZSByZXR1cm5lZCB0byB0aGUgY2FsbGVyPwoJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKCQlSZXR1cm5zOiBFcnJvcnMgdGhhdCBvY2N1cnJlZCB3aGlsZSB1cGRhdGluZyB0aGUgcHJvamVjdAoJCSIiIgoJCV9jb2RlID0gJ01NUFInCgkJX3N1YmNvZGUgPSAnVXBkUCcKCgkJYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfVXBkYXRlX1Byb2plY3QpCgkJaWYgX25vX29iamVjdCAhPSBOb25lOiByYWlzZSBUeXBlRXJyb3IsICdObyBkaXJlY3QgYXJnIGV4cGVjdGVkJwoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCWRlZiBPcGVuX2Jyb3dzZXIoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CgkJIiIiT3BlbiBicm93c2VyOiBEaXNwbGF5IGEgY2xhc3MsIG1lbWJlciBmdW5jdGlvbiwgb3IgZGF0YSBtZW1iZXIgb2JqZWN0IGluIGEgc2luZ2xlIGNsYXNzIGJyb3dzZXIgd2luZG93CgkJUmVxdWlyZWQgYXJndW1lbnQ6IGFuIEFFIG9iamVjdCByZWZlcmVuY2UKCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CgkJIiIiCgkJX2NvZGUgPSAnTU1QUicKCQlfc3ViY29kZSA9ICdCcm93JwoKCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwoJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKCgoJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAoJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6CgkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6CgkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KCglkZWYgR2V0X25vbnNpbXBsZV9jbGFzc2VzKHNlbGYsIF9ub19vYmplY3Q9Tm9uZSwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CgkJIiIiR2V0IG5vbnNpbXBsZSBjbGFzc2VzOiBSZXR1cm5zIGFuIGFscGhhYmV0aWNhbCBsaXN0IG9mIGNsYXNzZXMgd2l0aCBtZW1iZXIgZnVuY3Rpb25zLCBiYXNlcyBjbGFzc2VzLCBvciBzdWJjbGFzc2VzCgkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQoJCVJldHVybnM6IHVuZG9jdW1lbnRlZCwgdHlwZWNvZGUgJ2xpc3QnCgkJIiIiCgkJX2NvZGUgPSAnTU1QUicKCQlfc3ViY29kZSA9ICdOc0NsJwoKCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwoJCWlmIF9ub19vYmplY3QgIT0gTm9uZTogcmFpc2UgVHlwZUVycm9yLCAnTm8gZGlyZWN0IGFyZyBleHBlY3RlZCcKCgoJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAoJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6CgkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6CgkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KCglkZWYgR2V0X21lbWJlcl9mdW5jdGlvbl9uYW1lcyhzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKCQkiIiJHZXQgbWVtYmVyIGZ1bmN0aW9uIG5hbWVzOiBSZXR1cm5zIGEgbGlzdCBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBhbGwgdGhlIG1lbWJlciBmdW5jdGlvbnMgb2YgYSBjbGFzcyBvYmplY3QKCQlSZXF1aXJlZCBhcmd1bWVudDogbXVzdCBiZSBhIGNsYXNzIG9iamVjdAoJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKCQlSZXR1cm5zOiB1bmRvY3VtZW50ZWQsIHR5cGVjb2RlICdsaXN0JwoJCSIiIgoJCV9jb2RlID0gJ01NUFInCgkJX3N1YmNvZGUgPSAnTWJGTicKCgkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CgoKCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgoJCQlyYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCgkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgoJCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCgoKY2xhc3MgQWNjZXNzX1BhdGhzKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiJBY2Nlc3MgUGF0aHMgLSBDb250YWlucyB0aGUgZGVmaW5pdGlvbnMgb2YgYSBwcm9qZWN0uXMgYWNjZXNzIChzZWFyY2gpIHBhdGhzLiIiIgoJd2FudCA9ICdQQVRIJwpjbGFzcyBVc2VyX1BhdGhzKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIlVzZXIgUGF0aHMgLSBUbyBhZGQgYW4gYWNjZXNzIHBhdGggZm9yIHRoZSBzb3VyY2UgZmlsZXMuIiIiCgl3aGljaCA9ICdQQTAxJwoJd2FudCA9ICdQSW5mJwpjbGFzcyBTeXN0ZW1fUGF0aHMoYWV0b29scy5OUHJvcGVydHkpOgoJIiIiU3lzdGVtIFBhdGhzIC0gVG8gYWRkIGFuIGFjY2VzcyBwYXRoIGZvciB0aGUgaW5jbHVkZSBmaWxlcy4gKE5vdCBzdXBwb3J0ZWQgaW4gUGFzY2FsKSIiIgoJd2hpY2ggPSAnUEEwMycKCXdhbnQgPSAnUEluZicKY2xhc3MgQWx3YXlzX0Z1bGxfU2VhcmNoKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIkFsd2F5cyBGdWxsIFNlYXJjaCAtIFRvIGZvcmNlIHRoZSBjb21waWxlciB0byBzZWFyY2ggZm9yIHN5c3RlbSBpbmNsdWRlcyBsaWtlIGl0IHNlYXJjaGVzIGZvciB1c2VyIGluY2x1ZGVzLiIiIgoJd2hpY2ggPSAnUEEwMicKCXdhbnQgPSAnYm9vbCcKCmNsYXNzIEVkaXRvcihhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgoJIiIiRWRpdG9yIC0gIiIiCgl3YW50ID0gJ0VEVFInCmNsYXNzIEZsYXNoX2RlbGF5KGFldG9vbHMuTlByb3BlcnR5KToKCSIiIkZsYXNoIGRlbGF5IC0gVGhlIGFtb3VudCBvZiB0aW1lLCBpbiBzaXh0aWV0aHMgb2YgYSBzZWNvbmQsIHRoZSBlZGl0b3IgaGlnaGxpZ2h0cyBhIG1hdGNoaW5nIGJyYWNrZXQuIiIiCgl3aGljaCA9ICdFRDAxJwoJd2FudCA9ICdsb25nJwpjbGFzcyBEeW5hbWljX3Njcm9sbChhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJEeW5hbWljIHNjcm9sbCAtIERpc3BsYXkgYSB3aW5kb3e5cyBjb250ZW50cyBhcyB5b3UgbW92ZSB0aGUgc2Nyb2xsIGJveC4iIiIKCXdoaWNoID0gJ0VEMDInCgl3YW50ID0gJ2Jvb2wnCmNsYXNzIEJhbGFuY2UoYWV0b29scy5OUHJvcGVydHkpOgoJIiIiQmFsYW5jZSAtIEZsYXNoIHRoZSBtYXRjaGluZyBvcGVuaW5nIGJyYWNrZXQgd2hlbiB5b3UgdHlwZSBhIGNsb3NpbmcgYnJhY2tldC4iIiIKCXdoaWNoID0gJ0VEMDMnCgl3YW50ID0gJ2Jvb2wnCmNsYXNzIFVzZV9EcmFnX18yNl9fRHJvcF9FZGl0aW5nKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIlVzZSBEcmFnICYgRHJvcCBFZGl0aW5nIC0gVXNlIERyYWcgJiBEcm9wIHRleHQgZWRpdGluZy4iIiIKCXdoaWNoID0gJ0VEMDQnCgl3YW50ID0gJ2Jvb2wnCmNsYXNzIFNhdmVfb25fdXBkYXRlKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIlNhdmUgb24gdXBkYXRlIC0gU2F2ZSBhbGwgZWRpdG9yIHdpbmRvd3MgYXV0b21hdGljYWxseSB3aGVuIHlvdSBjaG9vc2UgdGhlIFVwZGF0ZSBjb21tYW5kLiIiIgoJd2hpY2ggPSAnRUQwNScKCXdhbnQgPSAnYm9vbCcKY2xhc3MgU29ydF9GdW5jdGlvbl9Qb3B1cChhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJTb3J0IEZ1bmN0aW9uIFBvcHVwIC0gIiIiCgl3aGljaCA9ICdFRDA2JwoJd2FudCA9ICdib29sJwpjbGFzcyBVc2VfTXVsdGlwbGVfVW5kbyhhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJVc2UgTXVsdGlwbGUgVW5kbyAtICIiIgoJd2hpY2ggPSAnRUQwNycKCXdhbnQgPSAnYm9vbCcKY2xhc3MgUmVtZW1iZXJfZm9udChhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJSZW1lbWJlciBmb250IC0gRGlzcGxheSBhIHNvdXJjZSBmaWxlIHdpdGggaXRzIG93biBmb250IHNldHRpbmdzLiIiIgoJd2hpY2ggPSAnRUQwOCcKCXdhbnQgPSAnYm9vbCcKY2xhc3MgUmVtZW1iZXJfc2VsZWN0aW9uKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIlJlbWVtYmVyIHNlbGVjdGlvbiAtIFJlc3RvcmUgdGhlIHByZXZpb3VzIHNlbGVjdGlvbiBpbiBhIGZpbGUgd2hlbiB5b3Ugb3BlbiBpdC4iIiIKCXdoaWNoID0gJ0VEMDknCgl3YW50ID0gJ2Jvb2wnCmNsYXNzIFJlbWVtYmVyX3dpbmRvdyhhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJSZW1lbWJlciB3aW5kb3cgLSBSZXN0b3JlIHRoZSBsYXN0IHNpemUgYW5kIHBvc2l0aW9uIGZvciBhIHNvdXJjZSBmaWxlIHdpbmRvdyB3aGVuIHlvdSBvcGVuIGl0LiIiIgoJd2hpY2ggPSAnRUQxMCcKCXdhbnQgPSAnYm9vbCcKY2xhc3MgTWFpbl9UZXh0X0NvbG9yKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIk1haW4gVGV4dCBDb2xvciAtIE1haW4sIGRlZmF1bHQsIGNvbG9yIGZvciB0ZXh0LiIiIgoJd2hpY2ggPSAnRUQxMicKCXdhbnQgPSAnY1JHQicKY2xhc3MgQmFja2dyb3VuZF9Db2xvcihhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJCYWNrZ3JvdW5kIENvbG9yIC0gQ29sb3Igb2YgdGhlIGJhY2tncm91bmQgb2YgZWRpdG9yIHdpbmRvd3MuIiIiCgl3aGljaCA9ICdFRDEzJwoJd2FudCA9ICdjUkdCJwpjbGFzcyBDb250ZXh0X1BvcHVwX0RlbGF5KGFldG9vbHMuTlByb3BlcnR5KToKCSIiIkNvbnRleHQgUG9wdXAgRGVsYXkgLSBUaGUgYW1vdW50IG9mIHRpbWUsIGluIHNpeHRpZXRocyBvZiBhIHNlY29uZCwgYmVmb3JlIHRoZSBjb250ZXh0IHBvcHVwIGlzIGRpc3BsYXllZCBpZiB5b3UgY2xpY2sgYW5kIGhvbGQgb24gYSBicm93c2VyIHN5bWJvbC4iIiIKCXdoaWNoID0gJ0VEMTQnCgl3YW50ID0gJ2Jvb2wnCgpjbGFzcyBTeW50YXhfQ29sb3JpbmcoYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiIlN5bnRheCBDb2xvcmluZyAtICIiIgoJd2FudCA9ICdTTlRYJwpjbGFzcyBTeW50YXhfY29sb3JpbmcoYWV0b29scy5OUHJvcGVydHkpOgoJIiIiU3ludGF4IGNvbG9yaW5nIC0gTWFyayBrZXl3b3JkcyBhbmQgY29tbWVudHMgd2l0aCBjb2xvci4iIiIKCXdoaWNoID0gJ0dIMDEnCgl3YW50ID0gJ2Jvb2wnCmNsYXNzIENvbW1lbnRfY29sb3IoYWV0b29scy5OUHJvcGVydHkpOgoJIiIiQ29tbWVudCBjb2xvciAtIFRoZSBjb2xvciBmb3IgY29tbWVudHMuIiIiCgl3aGljaCA9ICdHSDAyJwoJd2FudCA9ICdjUkdCJwpjbGFzcyBLZXl3b3JkX2NvbG9yKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIktleXdvcmQgY29sb3IgLSBUaGUgY29sb3IgZm9yIGxhbmd1YWdlIGtleXdvcmRzLiIiIgoJd2hpY2ggPSAnR0gwMycKCXdhbnQgPSAnY1JHQicKY2xhc3MgU3RyaW5nX2NvbG9yKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIlN0cmluZyBjb2xvciAtIFRoZSBjb2xvciBmb3Igc3RyaW5ncy4iIiIKCXdoaWNoID0gJ0dIMDQnCgl3YW50ID0gJ2NSR0InCmNsYXNzIEN1c3RvbV9jb2xvcl8xKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIkN1c3RvbSBjb2xvciAxIC0gVGhlIGNvbG9yIGZvciB0aGUgZmlyc3Qgc2V0IG9mIGN1c3RvbSBrZXl3b3Jkcy4iIiIKCXdoaWNoID0gJ0dIMDUnCgl3YW50ID0gJ2NSR0InCmNsYXNzIEN1c3RvbV9jb2xvcl8yKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIkN1c3RvbSBjb2xvciAyIC0gVGhlIGNvbG9yIGZvciB0aGUgc2Vjb25kIHNldCBjdXN0b20ga2V5d29yZHMuIiIiCgl3aGljaCA9ICdHSDA2JwoJd2FudCA9ICdjUkdCJwpjbGFzcyBDdXN0b21fY29sb3JfMyhhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJDdXN0b20gY29sb3IgMyAtIFRoZSBjb2xvciBmb3IgdGhlIHRoaXJkIHNldCBvZiBjdXN0b20ga2V5d29yZHMuIiIiCgl3aGljaCA9ICdHSDA3JwoJd2FudCA9ICdjUkdCJwpjbGFzcyBDdXN0b21fY29sb3JfNChhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJDdXN0b20gY29sb3IgNCAtIFRoZSBjb2xvciBmb3IgdGhlIGZvdXJ0aCBzZXQgb2YgY3VzdG9tIGtleXdvcmRzLiIiIgoJd2hpY2ggPSAnR0gwOCcKCXdhbnQgPSAnY1JHQicKCmNsYXNzIEN1c3RvbV9LZXl3b3JkcyhhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgoJIiIiQ3VzdG9tIEtleXdvcmRzIC0gIiIiCgl3YW50ID0gJ0NVS1cnCmNsYXNzIEN1c3RvbV9jb2xvcl8xKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIkN1c3RvbSBjb2xvciAxIC0gVGhlIGNvbG9yIGZvciB0aGUgZmlyc3Qgc2V0IG9mIGN1c3RvbSBrZXl3b3Jkcy4iIiIKCXdoaWNoID0gJ0tXMDEnCgl3YW50ID0gJ2NSR0InCmNsYXNzIEN1c3RvbV9jb2xvcl8yKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIkN1c3RvbSBjb2xvciAyIC0gVGhlIGNvbG9yIGZvciB0aGUgc2Vjb25kIHNldCBjdXN0b20ga2V5d29yZHMuIiIiCgl3aGljaCA9ICdLVzAyJwoJd2FudCA9ICdjUkdCJwpjbGFzcyBDdXN0b21fY29sb3JfMyhhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJDdXN0b20gY29sb3IgMyAtIFRoZSBjb2xvciBmb3IgdGhlIHRoaXJkIHNldCBvZiBjdXN0b20ga2V5d29yZHMuIiIiCgl3aGljaCA9ICdLVzAzJwoJd2FudCA9ICdjUkdCJwpjbGFzcyBDdXN0b21fY29sb3JfNChhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJDdXN0b20gY29sb3IgNCAtIFRoZSBjb2xvciBmb3IgdGhlIGZvdXJ0aCBzZXQgb2YgY3VzdG9tIGtleXdvcmRzLiIiIgoJd2hpY2ggPSAnS1cwNCcKCXdhbnQgPSAnY1JHQicKCmNsYXNzIEJyb3dzZXJfQ29sb3JpbmcoYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiIkJyb3dzZXIgQ29sb3JpbmcgLSBDb2xvcnMgZm9yIEJyb3dzZXIgc3ltYm9scy4iIiIKCXdhbnQgPSAnQlJLVycKY2xhc3MgQnJvd3Nlcl9LZXl3b3JkcyhhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJCcm93c2VyIEtleXdvcmRzIC0gTWFyayBCcm93c2VyIHN5bWJvbHMgd2l0aCBjb2xvci4iIiIKCXdoaWNoID0gJ0JXMDAnCgl3YW50ID0gJ2Jvb2wnCmNsYXNzIENsYXNzZXNfQ29sb3IoYWV0b29scy5OUHJvcGVydHkpOgoJIiIiQ2xhc3NlcyBDb2xvciAtIFRoZSBjb2xvciBmb3IgY2xhc3Nlcy4iIiIKCXdoaWNoID0gJ0JXMDEnCgl3YW50ID0gJ2NSR0InCmNsYXNzIENvbnN0YW50c19Db2xvcihhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJDb25zdGFudHMgQ29sb3IgLSBUaGUgY29sb3IgZm9yIGNvbnN0YW50cy4iIiIKCXdoaWNoID0gJ0JXMDInCgl3YW50ID0gJ2NSR0InCmNsYXNzIEVudW1zX0NvbG9yKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIkVudW1zIENvbG9yIC0gVGhlIGNvbG9yIGZvciBlbnVtcy4iIiIKCXdoaWNoID0gJ0JXMDMnCgl3YW50ID0gJ2NSR0InCmNsYXNzIEZ1bmN0aW9uc19Db2xvcihhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJGdW5jdGlvbnMgQ29sb3IgLSBTZXQgY29sb3IgZm9yIGZ1bmN0aW9ucy4iIiIKCXdoaWNoID0gJ0JXMDQnCgl3YW50ID0gJ2NSR0InCmNsYXNzIEdsb2JhbHNfQ29sb3IoYWV0b29scy5OUHJvcGVydHkpOgoJIiIiR2xvYmFscyBDb2xvciAtIFRoZSBjb2xvciBmb3IgZ2xvYmFscyIiIgoJd2hpY2ggPSAnQlcwNScKCXdhbnQgPSAnY1JHQicKY2xhc3MgTWFjcm9zX0NvbG9yKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIk1hY3JvcyBDb2xvciAtIFRoZSBjb2xvciBmb3IgbWFjcm9zLiIiIgoJd2hpY2ggPSAnQlcwNicKCXdhbnQgPSAnY1JHQicKY2xhc3MgVGVtcGxhdGVzX0NvbG9yKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIlRlbXBsYXRlcyBDb2xvciAtIFNldCBjb2xvciBmb3IgdGVtcGxhdGVzLiIiIgoJd2hpY2ggPSAnQlcwNycKCXdhbnQgPSAnY1JHQicKY2xhc3MgVHlwZWRlZnNfQ29sb3IoYWV0b29scy5OUHJvcGVydHkpOgoJIiIiVHlwZWRlZnMgQ29sb3IgLSBUaGUgY29sb3IgZm9yIHR5cGVkZWZzLiIiIgoJd2hpY2ggPSAnQlcwOCcKCXdhbnQgPSAnY1JHQicKCmNsYXNzIEVycm9yX0luZm9ybWF0aW9uKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiJFcnJvciBJbmZvcm1hdGlvbiAtIERlc2NyaWJlcyBhIHNpbmdsZSBlcnJvciBvciB3YXJuaW5nIGZyb20gdGhlIGNvbXBpbGVyIG9yIHRoZSBsaW5rZXIuIiIiCgl3YW50ID0gJ0Vyck0nCmNsYXNzIGtpbmQoYWV0b29scy5OUHJvcGVydHkpOgoJIiIia2luZCAtIFRoZSB0eXBlIG9mIGVycm9yIG9yIHdhcm5pbmcuIiIiCgl3aGljaCA9ICdFcnJUJwoJd2FudCA9ICdFcnJUJwpjbGFzcyBtZXNzYWdlKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIm1lc3NhZ2UgLSBUaGUgZXJyb3Igb3Igd2FybmluZyBtZXNzYWdlLiIiIgoJd2hpY2ggPSAnRXJyUycKCXdhbnQgPSAnVEVYVCcKY2xhc3MgZGlza19maWxlKGFldG9vbHMuTlByb3BlcnR5KToKCSIiImRpc2sgZmlsZSAtIFRoZSBmaWxlIHdoZXJlIHRoZSBlcnJvciBvY2N1cnJlZC4gIE1heSBub3QgYmUgcmV0dXJuZWQgZm9yIGNlcnRhaW4ga2luZHMgb2YgZXJyb3JzIChlZywgbGluayBlcnJvcnMpLiIiIgoJd2hpY2ggPSAnZmlsZScKCXdhbnQgPSAnZnNzICcKY2xhc3MgbGluZU51bWJlcihhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJsaW5lTnVtYmVyIC0gVGhlIGxpbmUgaW4gdGhlIGZpbGUgd2hlcmUgdGhlIGVycm9yIG9jY3VycmVkLiAgTWF5IG5vdCBiZSByZXR1cm5lZCBmb3IgY2VydGFpbiBraW5kcyBvZiBlcnJvcnMgKGVnLCBsaW5rIGVycm9ycykuIiIiCgl3aGljaCA9ICdFcnJMJwoJd2FudCA9ICdsb25nJwoKY2xhc3MgRXh0cmFzKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiJFeHRyYXMgLSAiIiIKCXdhbnQgPSAnR1hUUicKY2xhc3MgQ29tcGxldGlvbl9zb3VuZChhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJDb21wbGV0aW9uIHNvdW5kIC0gUGxheSBhIHNvdW5kIHdoZW4gZmluaXNoZWQgYSBCcmluZyBVcCBUbyBEYXRlIG9yIE1ha2UgY29tbWFuZC4iIiIKCXdoaWNoID0gJ0VYMDEnCgl3YW50ID0gJ2Jvb2wnCmNsYXNzIFN1Y2Nlc3Nfc291bmQoYWV0b29scy5OUHJvcGVydHkpOgoJIiIiU3VjY2VzcyBzb3VuZCAtIFRoZSBzb3VuZCBDb2RlV2FycmlvciBwbGF5cyB3aGVuIGl0IHN1Y2Nlc3NmdWxseSBmaW5pc2hlcyBhIEJyaW5nIFVwIFRvIERhdGUgb3IgTWFrZSBjb21tYW5kLiIiIgoJd2hpY2ggPSAnRVgwMicKCXdhbnQgPSAnVEVYVCcKY2xhc3MgRmFpbHVyZV9zb3VuZChhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJGYWlsdXJlIHNvdW5kIC0gVGhlIHNvdW5kIENvZGVXYXJyaW9yIHBsYXlzIHdoZW4gaXQgY2Fubm90IGZpbmlzaCBhIEJyaW5nIFVwIFRvIERhdGUgb3IgTWFrZSBjb21tYW5kLiIiIgoJd2hpY2ggPSAnRVgwMycKCXdhbnQgPSAnVEVYVCcKY2xhc3MgRnVsbF9zY3JlZW5fem9vbShhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJGdWxsIHNjcmVlbiB6b29tIC0gWm9vbSB3aW5kb3dzIHRvIHRoZSBmdWxsIHNjcmVlbiB3aWR0aC4iIiIKCXdoaWNoID0gJ0VYMDcnCgl3YW50ID0gJ2Jvb2wnCmNsYXNzIEV4dGVybmFsX3JlZmVyZW5jZShhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJFeHRlcm5hbCByZWZlcmVuY2UgLSBXaGljaCBvbi1saW5lIGZ1bmN0aW9uIHJlZmVyZW5jZSB0byB1c2UuIiIiCgl3aGljaCA9ICdFWDA4JwoJd2FudCA9ICdSZWZQJwpjbGFzcyBVc2VfU2NyaXB0X01lbnUoYWV0b29scy5OUHJvcGVydHkpOgoJIiIiVXNlIFNjcmlwdCBNZW51IC0gQ29udHJvbHMgdGhlIHVzZSBvZiB0aGUgQXBwbGVTY3JpcHQgbWVudSIiIgoJd2hpY2ggPSAnRVgxMicKCXdhbnQgPSAnYm9vbCcKY2xhc3MgVXNlX0VkaXRvcl9FeHRlbnNpb25zKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIlVzZSBFZGl0b3IgRXh0ZW5zaW9ucyAtIENvbnRyb2xzIHRoZSB1c2Ugb2YgdGhlIEVkaXRvciBFeHRlbnNpb25zIG1lbnUiIiIKCXdoaWNoID0gJ0VYMTAnCgl3YW50ID0gJ2Jvb2wnCmNsYXNzIFVzZV9FeHRlcm5hbF9FZGl0b3IoYWV0b29scy5OUHJvcGVydHkpOgoJIiIiVXNlIEV4dGVybmFsIEVkaXRvciAtIENvbnRyb2xzIHdoZXRoZXIgQ29kZVdhcnJpb3IgdXNlcyBpdHMgb3duIGludGVncmF0ZWQgZWRpdG9yIG9yIGFuIGV4dGVybmFsIGFwcGxpY2F0aW9uIGZvciBlZGl0aW5nIHRleHQgZmlsZXMuIiIiCgl3aGljaCA9ICdFWDExJwoJd2FudCA9ICdib29sJwpjbGFzcyBIb25vcl9Qcm9qZWN0b3JfU3RhdGVfZm9yX1Byb2plY3RzKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIkhvbm9yIFByb2plY3RvciBTdGF0ZSBmb3IgUHJvamVjdHMgLSBDb250cm9scyB3aGV0aGVyIENvZGVXYXJyaW9yIG9wZW5zIGZpbGVzIHNldCB0byByZWFkLW9ubHkgYnkgUHJvamVjdG9yLiIiIgoJd2hpY2ggPSAnRVgxMycKCXdhbnQgPSAnYm9vbCcKCmNsYXNzIEJ1aWxkX0V4dHJhcyhhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgoJIiIiQnVpbGQgRXh0cmFzIC0gIiIiCgl3YW50ID0gJ0xYVFInCmNsYXNzIEJyb3dzZXJfYWN0aXZlKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIkJyb3dzZXIgYWN0aXZlIC0gQWxsb3cgdGhlIGNvbGxlY3Rpb24gb2YgYnJvd3NlciBpbmZvcm1hdGlvbi4iIiIKCXdoaWNoID0gJ0VYMDknCgl3YW50ID0gJ2Jvb2wnCmNsYXNzIE1vZGlmaWNhdGlvbl9kYXRlX2NhY2hpbmcoYWV0b29scy5OUHJvcGVydHkpOgoJIiIiTW9kaWZpY2F0aW9uIGRhdGUgY2FjaGluZyAtICIiIgoJd2hpY2ggPSAnRVgwNCcKCXdhbnQgPSAnYm9vbCcKY2xhc3MgTXVsdGlwcm9jZXNzaW5nX0NvbXBpbGF0aW9uKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIk11bHRpcHJvY2Vzc2luZyBDb21waWxhdGlvbiAtICIiIgoJd2hpY2ggPSAnRVgxNCcKCXdhbnQgPSAnYm9vbCcKY2xhc3MgU2hvd19Ub29sU2VydmVyX01lbnUoYWV0b29scy5OUHJvcGVydHkpOgoJIiIiU2hvdyBUb29sU2VydmVyIE1lbnUgLSAiIiIKCXdoaWNoID0gJ0VYMTgnCgl3YW50ID0gJ2Jvb2wnCmNsYXNzIEVuYWJsZV9BdXRvbWF0aWNfVG9vbGJhcl9IZWxwKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIkVuYWJsZSBBdXRvbWF0aWMgVG9vbGJhciBIZWxwIC0gIiIiCgl3aGljaCA9ICdFWDE5JwoJd2FudCA9ICdib29sJwpjbGFzcyBJbmNsdWRlX0ZpbGVfQ2FjaGVfU2l6ZV9fMjhfS18yOV8oYWV0b29scy5OUHJvcGVydHkpOgoJIiIiSW5jbHVkZSBGaWxlIENhY2hlIFNpemUgKEspIC0gIiIiCgl3aGljaCA9ICdFWDE1JwoJd2FudCA9ICdsb25nJwpjbGFzcyBSZWNlbnRfRG9jdW1lbnRzKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIlJlY2VudCBEb2N1bWVudHMgLSAiIiIKCXdoaWNoID0gJ0VYMTYnCgl3YW50ID0gJ3Nob3InCmNsYXNzIFJlY2VudF9Qcm9qZWN0cyhhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJSZWNlbnQgUHJvamVjdHMgLSAiIiIKCXdoaWNoID0gJ0VYMTcnCgl3YW50ID0gJ3Nob3InCgpjbGFzcyBGaWxlX01hcHBpbmdzKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiJGaWxlIE1hcHBpbmdzIC0gTWFwcGluZ3Mgb2YgZXh0ZW5zaW9ucyAmIGZpbGUgdHlwZXMgdG8gY29tcGlsZXJzIiIiCgl3YW50ID0gJ0ZMTVAnCmNsYXNzIG1hcHBpbmdzKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIm1hcHBpbmdzIC0gIiIiCgl3aGljaCA9ICdGTXBzJwoJd2FudCA9ICdGTWFwJwoKY2xhc3MgRm9udChhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgoJIiIiRm9udCAtICIiIgoJd2FudCA9ICdtRk5UJwpjbGFzcyBBdXRvX2luZGVudChhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJBdXRvIGluZGVudCAtIEluZGVudCBuZXcgbGluZXMgYXV0b21hdGljYWxseS4iIiIKCXdoaWNoID0gJ0ZOMDEnCgl3YW50ID0gJ2Jvb2wnCmNsYXNzIFRhYl9zaXplKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIlRhYiBzaXplIC0gIiIiCgl3aGljaCA9ICdGTjAyJwoJd2FudCA9ICdzaG9yJwpjbGFzcyBUZXh0X2ZvbnQoYWV0b29scy5OUHJvcGVydHkpOgoJIiIiVGV4dCBmb250IC0gVGhlIGZvbnQgdXNlZCBpbiBlZGl0aW5nIHdpbmRvd3MuIiIiCgl3aGljaCA9ICdwdHhmJwoJd2FudCA9ICdURVhUJwpjbGFzcyBUZXh0X3NpemUoYWV0b29scy5OUHJvcGVydHkpOgoJIiIiVGV4dCBzaXplIC0gVGhlIHNpemUgb2YgdGhlIHRleHQgaW4gYW4gZWRpdGluZyB3aW5kb3cuIiIiCgl3aGljaCA9ICdwdHBzJwoJd2FudCA9ICdzaG9yJwoKY2xhc3MgRnVuY3Rpb25fSW5mb3JtYXRpb24oYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiIkZ1bmN0aW9uIEluZm9ybWF0aW9uIC0gRGVzY3JpYmVzIHRoZSBsb2NhdGlvbiBvZiBhbnkgZnVuY3Rpb24gb3IgZ2xvYmFsIGRhdGEgZGVmaW5pdGlvbiB3aXRoaW4gdGhlIGN1cnJlbnQgcHJvamVjdC4iIiIKCXdhbnQgPSAnRkRlZicKIyByZXBlYXRlZCBwcm9wZXJ0eSBkaXNrX2ZpbGUgVGhlIGxvY2F0aW9uIG9uIGRpc2sgb2YgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgZGVmaW5pdGlvbi4KIyByZXBlYXRlZCBwcm9wZXJ0eSBsaW5lTnVtYmVyIFRoZSBsaW5lIG51bWJlciB3aGVyZSB0aGUgZGVmaW5pdGlvbiBiZWdpbnMuCgpjbGFzcyBQYXRoX0luZm9ybWF0aW9uKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiJQYXRoIEluZm9ybWF0aW9uIC0gQ29udGFpbnMgYWxsIG9mIHRoZSBwYXJhbWV0ZXJzIHRoYXQgZGVzY3JpYmUgYW4gYWNjZXNzIHBhdGguIiIiCgl3YW50ID0gJ1BJbmYnCmNsYXNzIG5hbWUoYWV0b29scy5OUHJvcGVydHkpOgoJIiIibmFtZSAtIFRoZSBhY3R1YWwgcGF0aCBuYW1lLiIiIgoJd2hpY2ggPSAncG5hbScKCXdhbnQgPSAnVEVYVCcKY2xhc3MgcmVjdXJzaXZlKGFldG9vbHMuTlByb3BlcnR5KToKCSIiInJlY3Vyc2l2ZSAtIFdpbGwgdGhlIHBhdGggYmUgc2VhcmNoZWQgcmVjdXJzaXZlbHk/ICAoRGVmYXVsdCBpcyB0cnVlKSIiIgoJd2hpY2ggPSAnUmVjdScKCXdhbnQgPSAnYm9vbCcKY2xhc3Mgb3JpZ2luKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIm9yaWdpbiAtICIiIgoJd2hpY2ggPSAnT3JpZycKCXdhbnQgPSAnUFBybScKCmNsYXNzIFByb2plY3RGaWxlKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiJQcm9qZWN0RmlsZSAtIEEgZmlsZSBjb250YWluZWQgaW4gYSBwcm9qZWN0IiIiCgl3YW50ID0gJ1NyY0YnCmNsYXNzIGZpbGV0eXBlKGFldG9vbHMuTlByb3BlcnR5KToKCSIiImZpbGV0eXBlIC0gV2hhdCBraW5kIG9mIGZpbGUgaXMgdGhpcyA/IiIiCgl3aGljaCA9ICdTcmNUJwoJd2FudCA9ICdTcmNUJwojIHJlcGVhdGVkIHByb3BlcnR5IG5hbWUgVGhlIGZpbGW5cyBuYW1lCiMgcmVwZWF0ZWQgcHJvcGVydHkgZGlza19maWxlIFRoZSBmaWxluXMgbG9jYXRpb24gb24gZGlzawpjbGFzcyBjb2Rlc2l6ZShhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJjb2Rlc2l6ZSAtIFRoZSBzaXplIG9mIHRoaXMgZmlsZblzIGNvZGUuIiIiCgl3aGljaCA9ICdDU2l6JwoJd2FudCA9ICdsb25nJwpjbGFzcyBkYXRhc2l6ZShhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJkYXRhc2l6ZSAtIFRoZSBzaXplIG9mIHRoaXMgZmlsZblzIGRhdGEuIiIiCgl3aGljaCA9ICdEU2l6JwoJd2FudCA9ICdsb25nJwpjbGFzcyB1cF90b19kYXRlKGFldG9vbHMuTlByb3BlcnR5KToKCSIiInVwIHRvIGRhdGUgLSBIYXMgdGhlIGZpbGUgYmVlbiBjb21waWxlZCBzaW5jZSBpdHMgbGFzdCBtb2RpZmljYXRpb24gPyIiIgoJd2hpY2ggPSAnVXBURCcKCXdhbnQgPSAnYm9vbCcKY2xhc3Mgc3ltYm9scyhhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJzeW1ib2xzIC0gQXJlIGRlYnVnZ2luZyBzeW1ib2xzIGdlbmVyYXRlZCBmb3IgdGhpcyBmaWxlID8iIiIKCXdoaWNoID0gJ1N5bUcnCgl3YW50ID0gJ2Jvb2wnCmNsYXNzIHdlYWtfbGluayhhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJ3ZWFrIGxpbmsgLSBJcyB0aGlzIGZpbGUgaW1wb3J0ZWQgd2Vha2x5IGludG8gdGhlIHByb2plY3QgPyBbUG93ZXJQQyBvbmx5XSIiIgoJd2hpY2ggPSAnV2VhaycKCXdhbnQgPSAnYm9vbCcKY2xhc3MgaW5pdGlhbGl6ZV9iZWZvcmUoYWV0b29scy5OUHJvcGVydHkpOgoJIiIiaW5pdGlhbGl6ZSBiZWZvcmUgLSBJbnRpYWlsaXplIHRoZSBzaGFyZWQgbGlicmFyeSBiZWZvcmUgdGhlIG1haW4gYXBwbGljYXRpb24uIiIiCgl3aGljaCA9ICdCZm9yJwoJd2FudCA9ICdib29sJwpjbGFzcyBpbmNsdWRlcyhhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJpbmNsdWRlcyAtICIiIgoJd2hpY2ggPSAnSW5jRicKCXdhbnQgPSAnZnNzICcKCmNsYXNzIFNlZ21lbnQoYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiIlNlZ21lbnQgLSBBIHNlZ21lbnQgb3IgZ3JvdXAgaW4gdGhlIHByb2plY3QiIiIKCXdhbnQgPSAnU2VnICcKIyByZXBlYXRlZCBwcm9wZXJ0eSBuYW1lIApjbGFzcyBmaWxlY291bnQoYWV0b29scy5OUHJvcGVydHkpOgoJIiIiZmlsZWNvdW50IC0gIiIiCgl3aGljaCA9ICdOdW1GJwoJd2FudCA9ICdzaG9yJwpjbGFzcyBwcmVsb2FkZWQoYWV0b29scy5OUHJvcGVydHkpOgoJIiIicHJlbG9hZGVkIC0gSXMgdGhlIHNlZ21lbnQgcHJlbG9hZGVkID8gWzY4SyBvbmx5XSIiIgoJd2hpY2ggPSAnUHJlbCcKCXdhbnQgPSAnYm9vbCcKY2xhc3MgcHJvdGVjdGVkKGFldG9vbHMuTlByb3BlcnR5KToKCSIiInByb3RlY3RlZCAtIElzIHRoZSBzZWdtZW50IHByb3RlY3RlZCA/IFs2OEsgb25seV0iIiIKCXdoaWNoID0gJ1Byb3QnCgl3YW50ID0gJ2Jvb2wnCmNsYXNzIGxvY2tlZChhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJsb2NrZWQgLSBJcyB0aGUgc2VnbWVudCBsb2NrZWQgPyBbNjhLIG9ubHldIiIiCgl3aGljaCA9ICdQTGNrJwoJd2FudCA9ICdib29sJwpjbGFzcyBwdXJnZWFibGUoYWV0b29scy5OUHJvcGVydHkpOgoJIiIicHVyZ2VhYmxlIC0gSXMgdGhlIHNlZ21lbnQgcHVyZ2VhYmxlID8gWzY4SyBvbmx5XSIiIgoJd2hpY2ggPSAnUHVyZycKCXdhbnQgPSAnYm9vbCcKY2xhc3Mgc3lzdGVtX2hlYXAoYWV0b29scy5OUHJvcGVydHkpOgoJIiIic3lzdGVtIGhlYXAgLSBJcyB0aGUgc2VnbWVudCBsb2FkZWQgaW50byB0aGUgc3lzdGVtIGhlYXAgPyBbNjhLIG9ubHldIiIiCgl3aGljaCA9ICdTeXNIJwoJd2FudCA9ICdib29sJwoKY2xhc3MgVGFyZ2V0X1NldHRpbmdzKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiJUYXJnZXQgU2V0dGluZ3MgLSBDb250YWlucyB0aGUgZGVmaW5pdGlvbnMgb2YgYSBwcm9qZWN0uXMgdGFyZ2V0LiIiIgoJd2FudCA9ICdUQVJHJwpjbGFzcyBMaW5rZXIoYWV0b29scy5OUHJvcGVydHkpOgoJIiIiTGlua2VyIC0gVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgbGlua2VyLiIiIgoJd2hpY2ggPSAnVEEwMScKCXdhbnQgPSAnVEVYVCcKY2xhc3MgUG9zdF9MaW5rZXIoYWV0b29scy5OUHJvcGVydHkpOgoJIiIiUG9zdCBMaW5rZXIgLSAiIiIKCXdoaWNoID0gJ1RBMDknCgl3YW50ID0gJ1RFWFQnCmNsYXNzIFRhcmdldF9OYW1lKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIlRhcmdldCBOYW1lIC0gIiIiCgl3aGljaCA9ICdUQTEwJwoJd2FudCA9ICdURVhUJwpjbGFzcyBPdXRwdXRfRGlyZWN0b3J5X1BhdGgoYWV0b29scy5OUHJvcGVydHkpOgoJIiIiT3V0cHV0IERpcmVjdG9yeSBQYXRoIC0gIiIiCgl3aGljaCA9ICdUQTExJwoJd2FudCA9ICdURVhUJwpjbGFzcyBPdXRwdXRfRGlyZWN0b3J5X09yaWdpbihhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJPdXRwdXQgRGlyZWN0b3J5IE9yaWdpbiAtICIiIgoJd2hpY2ggPSAnVEExMicKCXdhbnQgPSAnUFBybScKCmNsYXNzIEZpbGVfTWFwcGluZyhhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgoJIiIiRmlsZSBNYXBwaW5nIC0gIiIiCgl3YW50ID0gJ0ZNYXAnCmNsYXNzIEZpbGVfVHlwZShhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJGaWxlIFR5cGUgLSAiIiIKCXdoaWNoID0gJ1BSMDQnCgl3YW50ID0gJ1RFWFQnCmNsYXNzIEV4dGVuc2lvbihhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJFeHRlbnNpb24gLSAiIiIKCXdoaWNoID0gJ1RBMDInCgl3YW50ID0gJ1RFWFQnCmNsYXNzIFByZWNvbXBpbGVkKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIlByZWNvbXBpbGVkIC0gIiIiCgl3aGljaCA9ICdUQTAzJwoJd2FudCA9ICdib29sJwpjbGFzcyBSZXNvdXJjZV9GaWxlKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIlJlc291cmNlIEZpbGUgLSAiIiIKCXdoaWNoID0gJ1RBMDQnCgl3YW50ID0gJ2Jvb2wnCmNsYXNzIExhdW5jaGFibGUoYWV0b29scy5OUHJvcGVydHkpOgoJIiIiTGF1bmNoYWJsZSAtICIiIgoJd2hpY2ggPSAnVEEwNScKCXdhbnQgPSAnYm9vbCcKY2xhc3MgSWdub3JlZF9ieV9NYWtlKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIklnbm9yZWQgYnkgTWFrZSAtICIiIgoJd2hpY2ggPSAnVEEwNicKCXdhbnQgPSAnYm9vbCcKY2xhc3MgQ29tcGlsZXIoYWV0b29scy5OUHJvcGVydHkpOgoJIiIiQ29tcGlsZXIgLSAiIiIKCXdoaWNoID0gJ1RBMDcnCgl3YW50ID0gJ1RFWFQnCgpjbGFzcyBfY2xhc3MoYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiImNsYXNzIC0gQSBjbGFzcywgc3RydWN0LCBvciByZWNvcmQgdHlwZSBpbiB0aGUgY3VycmVudCBwcm9qZWN0IiIiCgl3YW50ID0gJ0NsYXMnCiMgcmVwZWF0ZWQgcHJvcGVydHkgbmFtZSAKY2xhc3MgbGFuZ3VhZ2UoYWV0b29scy5OUHJvcGVydHkpOgoJIiIibGFuZ3VhZ2UgLSBJbXBsZW1lbnRhdGlvbiBsYW5ndWFnZSBvZiB0aGlzIGNsYXNzIiIiCgl3aGljaCA9ICdMYW5nJwoJd2FudCA9ICdMYW5nJwpjbGFzcyBkZWNsYXJhdGlvbl9maWxlKGFldG9vbHMuTlByb3BlcnR5KToKCSIiImRlY2xhcmF0aW9uIGZpbGUgLSBTb3VyY2UgZmlsZSBjb250YWluaW5nIHRoZSBjbGFzcyBkZWNsYXJhdGlvbiIiIgoJd2hpY2ggPSAnRGNGbCcKCXdhbnQgPSAnZnNzICcKY2xhc3MgZGVjbGFyYXRpb25fc3RhcnRfb2Zmc2V0KGFldG9vbHMuTlByb3BlcnR5KToKCSIiImRlY2xhcmF0aW9uIHN0YXJ0IG9mZnNldCAtIFN0YXJ0IG9mIGNsYXNzIGRlY2xhcmF0aW9uIHNvdXJjZSBjb2RlIiIiCgl3aGljaCA9ICdEY1N0JwoJd2FudCA9ICdsb25nJwpjbGFzcyBkZWNsYXJhdGlvbl9lbmRfb2Zmc2V0KGFldG9vbHMuTlByb3BlcnR5KToKCSIiImRlY2xhcmF0aW9uIGVuZCBvZmZzZXQgLSBFbmQgb2YgY2xhc3MgZGVjbGFyYXRpb24iIiIKCXdoaWNoID0gJ0RjRW4nCgl3YW50ID0gJ2xvbmcnCmNsYXNzIHN1YmNsYXNzZXMoYWV0b29scy5OUHJvcGVydHkpOgoJIiIic3ViY2xhc3NlcyAtIHRoZSBpbW1lZGlhdGUgc3ViY2xhc3NlcyBvZiB0aGlzIGNsYXNzIiIiCgl3aGljaCA9ICdTdWJDJwoJd2FudCA9ICdDbGFzJwpjbGFzcyBhbGxfc3ViY2xhc3NlcyhhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJhbGwgc3ViY2xhc3NlcyAtIHRoZSBjbGFzc2VzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgZGVyaXZlZCBmcm9tIHRoaXMgY2xhc3MiIiIKCXdoaWNoID0gJ1N1YkEnCgl3YW50ID0gJ0NsYXMnCiMgICAgICAgIGVsZW1lbnQgJ0JzQ2wnIGFzIFsnaW5keCddCiMgICAgICAgIGVsZW1lbnQgJ01iRm4nIGFzIFsnaW5keCcsICduYW1lJ10KIyAgICAgICAgZWxlbWVudCAnRHRNYicgYXMgWydpbmR4JywgJ25hbWUnXQoKY2xhc3NlcyA9IF9jbGFzcwoKY2xhc3MgbWVtYmVyX2Z1bmN0aW9uKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiJtZW1iZXIgZnVuY3Rpb24gLSBBIGNsYXNzIG1lbWJlciBmdW5jdGlvbiBvciBtZXRob2QuIiIiCgl3YW50ID0gJ01iRm4nCiMgcmVwZWF0ZWQgcHJvcGVydHkgbmFtZSAKY2xhc3MgYWNjZXNzKGFldG9vbHMuTlByb3BlcnR5KToKCSIiImFjY2VzcyAtICIiIgoJd2hpY2ggPSAnQWNjZScKCXdhbnQgPSAnQWNjZScKY2xhc3MgdmlydHVhbChhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJ2aXJ0dWFsIC0gIiIiCgl3aGljaCA9ICdWaXJ0JwoJd2FudCA9ICdib29sJwpjbGFzcyBzdGF0aWMoYWV0b29scy5OUHJvcGVydHkpOgoJIiIic3RhdGljIC0gIiIiCgl3aGljaCA9ICdTdGF0JwoJd2FudCA9ICdib29sJwojIHJlcGVhdGVkIHByb3BlcnR5IGRlY2xhcmF0aW9uX2ZpbGUgU291cmNlIGZpbGUgY29udGFpbmluZyB0aGUgbWVtYmVyIGZ1bmN0aW9uIGRlY2xhcmF0aW9uCiMgcmVwZWF0ZWQgcHJvcGVydHkgZGVjbGFyYXRpb25fc3RhcnRfb2Zmc2V0IHN0YXJ0IG9mIG1lbWJlciBmdW5jdGlvbiBkZWNsYXJhdGlvbiBzb3VyY2UgY29kZQojIHJlcGVhdGVkIHByb3BlcnR5IGRlY2xhcmF0aW9uX2VuZF9vZmZzZXQgZW5kIG9mIG1lbWJlciBmdW5jdGlvbiBkZWNsYXJhdGlvbgpjbGFzcyBpbXBsZW1lbnRhdGlvbl9maWxlKGFldG9vbHMuTlByb3BlcnR5KToKCSIiImltcGxlbWVudGF0aW9uIGZpbGUgLSBTb3VyY2UgZmlsZSBjb250YWluaW5nIHRoZSBtZW1iZXIgZnVuY3Rpb24gZGVmaW5pdGlvbiIiIgoJd2hpY2ggPSAnRGZGbCcKCXdhbnQgPSAnZnNzICcKY2xhc3MgaW1wbGVtZW50YXRpb25fc3RhcnRfb2Zmc2V0KGFldG9vbHMuTlByb3BlcnR5KToKCSIiImltcGxlbWVudGF0aW9uIHN0YXJ0IG9mZnNldCAtIHN0YXJ0IG9mIG1lbWJlciBmdW5jdGlvbiBkZWZpbml0aW9uIHNvdXJjZSBjb2RlIiIiCgl3aGljaCA9ICdEZlN0JwoJd2FudCA9ICdsb25nJwpjbGFzcyBpbXBsZW1lbnRhdGlvbl9lbmRfb2Zmc2V0KGFldG9vbHMuTlByb3BlcnR5KToKCSIiImltcGxlbWVudGF0aW9uIGVuZCBvZmZzZXQgLSBlbmQgb2YgbWVtYmVyIGZ1bmN0aW9uIGRlZmluaXRpb24iIiIKCXdoaWNoID0gJ0RmRW4nCgl3YW50ID0gJ2xvbmcnCgptZW1iZXJfZnVuY3Rpb25zID0gbWVtYmVyX2Z1bmN0aW9uCgpjbGFzcyBkYXRhX21lbWJlcihhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgoJIiIiZGF0YSBtZW1iZXIgLSBBIGNsYXNzIGRhdGEgbWVtYmVyIG9yIGZpZWxkIiIiCgl3YW50ID0gJ0R0TWInCiMgcmVwZWF0ZWQgcHJvcGVydHkgbmFtZSAKIyByZXBlYXRlZCBwcm9wZXJ0eSBhY2Nlc3MgCiMgcmVwZWF0ZWQgcHJvcGVydHkgc3RhdGljIAojIHJlcGVhdGVkIHByb3BlcnR5IGRlY2xhcmF0aW9uX3N0YXJ0X29mZnNldCAKIyByZXBlYXRlZCBwcm9wZXJ0eSBkZWNsYXJhdGlvbl9lbmRfb2Zmc2V0IAoKZGF0YV9tZW1iZXJzID0gZGF0YV9tZW1iZXIKCmNsYXNzIGJhc2VfY2xhc3MoYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiImJhc2UgY2xhc3MgLSBBIGJhc2UgY2xhc3Mgb3Igc3VwZXIgY2xhc3Mgb2YgYSBjbGFzcyIiIgoJd2FudCA9ICdCc0NsJwpjbGFzcyBfY2xhc3MoYWV0b29scy5OUHJvcGVydHkpOgoJIiIiY2xhc3MgLSBUaGUgY2xhc3Mgb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBiYXNlIGNsYXNzIiIiCgl3aGljaCA9ICdDbGFzJwoJd2FudCA9ICdvYmogJwojIHJlcGVhdGVkIHByb3BlcnR5IGFjY2VzcyAKIyByZXBlYXRlZCBwcm9wZXJ0eSB2aXJ0dWFsIAoKYmFzZV9jbGFzc2VzID0gYmFzZV9jbGFzcwoKY2xhc3MgYnJvd3Nlcl9jYXRhbG9nKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiJicm93c2VyIGNhdGFsb2cgLSBUaGUgYnJvd3NlciBzeW1ib2wgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQgcHJvamVjdCIiIgoJd2FudCA9ICdDYXRhJwojICAgICAgICBlbGVtZW50ICdDbGFzJyBhcyBbJ2luZHgnLCAnbmFtZSddCgpjbGFzcyBWQ1NfU2V0dXAoYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiIlZDUyBTZXR1cCAtIFRoZSB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtIHBlcmZlcmVuY2VzLiIiIgoJd2FudCA9ICdWQ1NzJwpjbGFzcyBWQ1NfQWN0aXZlKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIlZDUyBBY3RpdmUgLSBVc2UgVmVyc2lvbiBDb250cm9sIiIiCgl3aGljaCA9ICdWQzAxJwoJd2FudCA9ICdib29sJwpjbGFzcyBDb25uZWN0aW9uX01ldGhvZChhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJDb25uZWN0aW9uIE1ldGhvZCAtIE5hbWUgb2YgVmVyc2lvbiBDb250cm9sIFN5c3RlbSB0byB1c2UuIiIiCgl3aGljaCA9ICdWQzAyJwoJd2FudCA9ICdURVhUJwpjbGFzcyBVc2VybmFtZShhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJVc2VybmFtZSAtIFRoZSB1c2VyIG5hbWUgZm9yIHRoZSBWQ1MuIiIiCgl3aGljaCA9ICdWQzAzJwoJd2FudCA9ICdURVhUJwpjbGFzcyBQYXNzd29yZChhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJQYXNzd29yZCAtIFRoZSBwYXNzd29yZCBmb3IgdGhlIFZDUy4iIiIKCXdoaWNoID0gJ1ZDMDQnCgl3YW50ID0gJ1RFWFQnCmNsYXNzIEF1dG9fQ29ubmVjdChhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJBdXRvIENvbm5lY3QgLSBBdXRvbWF0aWNhbGx5IGNvbm5lY3QgdG8gZGF0YWJhc2Ugd2hlbiBzdGFydGluZy4iIiIKCXdoaWNoID0gJ1ZDMDUnCgl3YW50ID0gJ2Jvb2wnCmNsYXNzIFN0b3JlX1Bhc3N3b3JkKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIlN0b3JlIFBhc3N3b3JkIC0gU3RvcmUgdGhlIHBhc3N3b3JkLiIiIgoJd2hpY2ggPSAnVkMwNicKCXdhbnQgPSAnYm9vbCcKY2xhc3MgQWx3YXlzX1Byb21wdChhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJBbHdheXMgUHJvbXB0IC0gQWx3YXlzIHNob3cgbG9naW4gZGlhbG9nIiIiCgl3aGljaCA9ICdWQzA3JwoJd2FudCA9ICdib29sJwpjbGFzcyBNb3VudF9Wb2x1bWUoYWV0b29scy5OUHJvcGVydHkpOgoJIiIiTW91bnQgVm9sdW1lIC0gQXR0ZW1wdCB0byBtb3VudCB0aGUgZGF0YWJhc2Ugdm9sdW1lIGlmIGl0IGlzbid0IGF2YWlsYWJsZS4iIiIKCXdoaWNoID0gJ1ZDMDgnCgl3YW50ID0gJ2Jvb2wnCmNsYXNzIERhdGFiYXNlX1BhdGgoYWV0b29scy5OUHJvcGVydHkpOgoJIiIiRGF0YWJhc2UgUGF0aCAtIFBhdGggdG8gdGhlIFZDUyBkYXRhYmFzZS4iIiIKCXdoaWNoID0gJ1ZDMDknCgl3YW50ID0gJ1BJbmYnCmNsYXNzIExvY2FsX1Jvb3QoYWV0b29scy5OUHJvcGVydHkpOgoJIiIiTG9jYWwgUm9vdCAtIFBhdGggdG8gdGhlIGxvY2FsIGRpcmVjdG9yeSB0byBjaGVja291dCB0by4iIiIKCXdoaWNoID0gJ1ZDMTAnCgl3YW50ID0gJ1BJbmYnCkFjY2Vzc19QYXRocy5fcHJvcGRpY3QgPSB7CgknVXNlcl9QYXRocycgOiBVc2VyX1BhdGhzLAoJJ1N5c3RlbV9QYXRocycgOiBTeXN0ZW1fUGF0aHMsCgknQWx3YXlzX0Z1bGxfU2VhcmNoJyA6IEFsd2F5c19GdWxsX1NlYXJjaCwKfQpBY2Nlc3NfUGF0aHMuX2VsZW1kaWN0ID0gewp9CkVkaXRvci5fcHJvcGRpY3QgPSB7CgknRmxhc2hfZGVsYXknIDogRmxhc2hfZGVsYXksCgknRHluYW1pY19zY3JvbGwnIDogRHluYW1pY19zY3JvbGwsCgknQmFsYW5jZScgOiBCYWxhbmNlLAoJJ1VzZV9EcmFnX18yNl9fRHJvcF9FZGl0aW5nJyA6IFVzZV9EcmFnX18yNl9fRHJvcF9FZGl0aW5nLAoJJ1NhdmVfb25fdXBkYXRlJyA6IFNhdmVfb25fdXBkYXRlLAoJJ1NvcnRfRnVuY3Rpb25fUG9wdXAnIDogU29ydF9GdW5jdGlvbl9Qb3B1cCwKCSdVc2VfTXVsdGlwbGVfVW5kbycgOiBVc2VfTXVsdGlwbGVfVW5kbywKCSdSZW1lbWJlcl9mb250JyA6IFJlbWVtYmVyX2ZvbnQsCgknUmVtZW1iZXJfc2VsZWN0aW9uJyA6IFJlbWVtYmVyX3NlbGVjdGlvbiwKCSdSZW1lbWJlcl93aW5kb3cnIDogUmVtZW1iZXJfd2luZG93LAoJJ01haW5fVGV4dF9Db2xvcicgOiBNYWluX1RleHRfQ29sb3IsCgknQmFja2dyb3VuZF9Db2xvcicgOiBCYWNrZ3JvdW5kX0NvbG9yLAoJJ0NvbnRleHRfUG9wdXBfRGVsYXknIDogQ29udGV4dF9Qb3B1cF9EZWxheSwKfQpFZGl0b3IuX2VsZW1kaWN0ID0gewp9ClN5bnRheF9Db2xvcmluZy5fcHJvcGRpY3QgPSB7CgknU3ludGF4X2NvbG9yaW5nJyA6IFN5bnRheF9jb2xvcmluZywKCSdDb21tZW50X2NvbG9yJyA6IENvbW1lbnRfY29sb3IsCgknS2V5d29yZF9jb2xvcicgOiBLZXl3b3JkX2NvbG9yLAoJJ1N0cmluZ19jb2xvcicgOiBTdHJpbmdfY29sb3IsCgknQ3VzdG9tX2NvbG9yXzEnIDogQ3VzdG9tX2NvbG9yXzEsCgknQ3VzdG9tX2NvbG9yXzInIDogQ3VzdG9tX2NvbG9yXzIsCgknQ3VzdG9tX2NvbG9yXzMnIDogQ3VzdG9tX2NvbG9yXzMsCgknQ3VzdG9tX2NvbG9yXzQnIDogQ3VzdG9tX2NvbG9yXzQsCn0KU3ludGF4X0NvbG9yaW5nLl9lbGVtZGljdCA9IHsKfQpDdXN0b21fS2V5d29yZHMuX3Byb3BkaWN0ID0gewoJJ0N1c3RvbV9jb2xvcl8xJyA6IEN1c3RvbV9jb2xvcl8xLAoJJ0N1c3RvbV9jb2xvcl8yJyA6IEN1c3RvbV9jb2xvcl8yLAoJJ0N1c3RvbV9jb2xvcl8zJyA6IEN1c3RvbV9jb2xvcl8zLAoJJ0N1c3RvbV9jb2xvcl80JyA6IEN1c3RvbV9jb2xvcl80LAp9CkN1c3RvbV9LZXl3b3Jkcy5fZWxlbWRpY3QgPSB7Cn0KQnJvd3Nlcl9Db2xvcmluZy5fcHJvcGRpY3QgPSB7CgknQnJvd3Nlcl9LZXl3b3JkcycgOiBCcm93c2VyX0tleXdvcmRzLAoJJ0NsYXNzZXNfQ29sb3InIDogQ2xhc3Nlc19Db2xvciwKCSdDb25zdGFudHNfQ29sb3InIDogQ29uc3RhbnRzX0NvbG9yLAoJJ0VudW1zX0NvbG9yJyA6IEVudW1zX0NvbG9yLAoJJ0Z1bmN0aW9uc19Db2xvcicgOiBGdW5jdGlvbnNfQ29sb3IsCgknR2xvYmFsc19Db2xvcicgOiBHbG9iYWxzX0NvbG9yLAoJJ01hY3Jvc19Db2xvcicgOiBNYWNyb3NfQ29sb3IsCgknVGVtcGxhdGVzX0NvbG9yJyA6IFRlbXBsYXRlc19Db2xvciwKCSdUeXBlZGVmc19Db2xvcicgOiBUeXBlZGVmc19Db2xvciwKfQpCcm93c2VyX0NvbG9yaW5nLl9lbGVtZGljdCA9IHsKfQpFcnJvcl9JbmZvcm1hdGlvbi5fcHJvcGRpY3QgPSB7Cgkna2luZCcgOiBraW5kLAoJJ21lc3NhZ2UnIDogbWVzc2FnZSwKCSdkaXNrX2ZpbGUnIDogZGlza19maWxlLAoJJ2xpbmVOdW1iZXInIDogbGluZU51bWJlciwKfQpFcnJvcl9JbmZvcm1hdGlvbi5fZWxlbWRpY3QgPSB7Cn0KRXh0cmFzLl9wcm9wZGljdCA9IHsKCSdDb21wbGV0aW9uX3NvdW5kJyA6IENvbXBsZXRpb25fc291bmQsCgknU3VjY2Vzc19zb3VuZCcgOiBTdWNjZXNzX3NvdW5kLAoJJ0ZhaWx1cmVfc291bmQnIDogRmFpbHVyZV9zb3VuZCwKCSdGdWxsX3NjcmVlbl96b29tJyA6IEZ1bGxfc2NyZWVuX3pvb20sCgknRXh0ZXJuYWxfcmVmZXJlbmNlJyA6IEV4dGVybmFsX3JlZmVyZW5jZSwKCSdVc2VfU2NyaXB0X01lbnUnIDogVXNlX1NjcmlwdF9NZW51LAoJJ1VzZV9FZGl0b3JfRXh0ZW5zaW9ucycgOiBVc2VfRWRpdG9yX0V4dGVuc2lvbnMsCgknVXNlX0V4dGVybmFsX0VkaXRvcicgOiBVc2VfRXh0ZXJuYWxfRWRpdG9yLAoJJ0hvbm9yX1Byb2plY3Rvcl9TdGF0ZV9mb3JfUHJvamVjdHMnIDogSG9ub3JfUHJvamVjdG9yX1N0YXRlX2Zvcl9Qcm9qZWN0cywKfQpFeHRyYXMuX2VsZW1kaWN0ID0gewp9CkJ1aWxkX0V4dHJhcy5fcHJvcGRpY3QgPSB7CgknQnJvd3Nlcl9hY3RpdmUnIDogQnJvd3Nlcl9hY3RpdmUsCgknTW9kaWZpY2F0aW9uX2RhdGVfY2FjaGluZycgOiBNb2RpZmljYXRpb25fZGF0ZV9jYWNoaW5nLAoJJ011bHRpcHJvY2Vzc2luZ19Db21waWxhdGlvbicgOiBNdWx0aXByb2Nlc3NpbmdfQ29tcGlsYXRpb24sCgknU2hvd19Ub29sU2VydmVyX01lbnUnIDogU2hvd19Ub29sU2VydmVyX01lbnUsCgknRW5hYmxlX0F1dG9tYXRpY19Ub29sYmFyX0hlbHAnIDogRW5hYmxlX0F1dG9tYXRpY19Ub29sYmFyX0hlbHAsCgknSW5jbHVkZV9GaWxlX0NhY2hlX1NpemVfXzI4X0tfMjlfJyA6IEluY2x1ZGVfRmlsZV9DYWNoZV9TaXplX18yOF9LXzI5XywKCSdSZWNlbnRfRG9jdW1lbnRzJyA6IFJlY2VudF9Eb2N1bWVudHMsCgknUmVjZW50X1Byb2plY3RzJyA6IFJlY2VudF9Qcm9qZWN0cywKfQpCdWlsZF9FeHRyYXMuX2VsZW1kaWN0ID0gewp9CkZpbGVfTWFwcGluZ3MuX3Byb3BkaWN0ID0gewoJJ21hcHBpbmdzJyA6IG1hcHBpbmdzLAp9CkZpbGVfTWFwcGluZ3MuX2VsZW1kaWN0ID0gewp9CkZvbnQuX3Byb3BkaWN0ID0gewoJJ0F1dG9faW5kZW50JyA6IEF1dG9faW5kZW50LAoJJ1RhYl9zaXplJyA6IFRhYl9zaXplLAoJJ1RleHRfZm9udCcgOiBUZXh0X2ZvbnQsCgknVGV4dF9zaXplJyA6IFRleHRfc2l6ZSwKfQpGb250Ll9lbGVtZGljdCA9IHsKfQpGdW5jdGlvbl9JbmZvcm1hdGlvbi5fcHJvcGRpY3QgPSB7CgknZGlza19maWxlJyA6IGRpc2tfZmlsZSwKCSdsaW5lTnVtYmVyJyA6IGxpbmVOdW1iZXIsCn0KRnVuY3Rpb25fSW5mb3JtYXRpb24uX2VsZW1kaWN0ID0gewp9ClBhdGhfSW5mb3JtYXRpb24uX3Byb3BkaWN0ID0gewoJJ25hbWUnIDogbmFtZSwKCSdyZWN1cnNpdmUnIDogcmVjdXJzaXZlLAoJJ29yaWdpbicgOiBvcmlnaW4sCn0KUGF0aF9JbmZvcm1hdGlvbi5fZWxlbWRpY3QgPSB7Cn0KUHJvamVjdEZpbGUuX3Byb3BkaWN0ID0gewoJJ2ZpbGV0eXBlJyA6IGZpbGV0eXBlLAoJJ25hbWUnIDogbmFtZSwKCSdkaXNrX2ZpbGUnIDogZGlza19maWxlLAoJJ2NvZGVzaXplJyA6IGNvZGVzaXplLAoJJ2RhdGFzaXplJyA6IGRhdGFzaXplLAoJJ3VwX3RvX2RhdGUnIDogdXBfdG9fZGF0ZSwKCSdzeW1ib2xzJyA6IHN5bWJvbHMsCgknd2Vha19saW5rJyA6IHdlYWtfbGluaywKCSdpbml0aWFsaXplX2JlZm9yZScgOiBpbml0aWFsaXplX2JlZm9yZSwKCSdpbmNsdWRlcycgOiBpbmNsdWRlcywKfQpQcm9qZWN0RmlsZS5fZWxlbWRpY3QgPSB7Cn0KU2VnbWVudC5fcHJvcGRpY3QgPSB7CgknbmFtZScgOiBuYW1lLAoJJ2ZpbGVjb3VudCcgOiBmaWxlY291bnQsCgkncHJlbG9hZGVkJyA6IHByZWxvYWRlZCwKCSdwcm90ZWN0ZWQnIDogcHJvdGVjdGVkLAoJJ2xvY2tlZCcgOiBsb2NrZWQsCgkncHVyZ2VhYmxlJyA6IHB1cmdlYWJsZSwKCSdzeXN0ZW1faGVhcCcgOiBzeXN0ZW1faGVhcCwKfQpTZWdtZW50Ll9lbGVtZGljdCA9IHsKfQpUYXJnZXRfU2V0dGluZ3MuX3Byb3BkaWN0ID0gewoJJ0xpbmtlcicgOiBMaW5rZXIsCgknUG9zdF9MaW5rZXInIDogUG9zdF9MaW5rZXIsCgknVGFyZ2V0X05hbWUnIDogVGFyZ2V0X05hbWUsCgknT3V0cHV0X0RpcmVjdG9yeV9QYXRoJyA6IE91dHB1dF9EaXJlY3RvcnlfUGF0aCwKCSdPdXRwdXRfRGlyZWN0b3J5X09yaWdpbicgOiBPdXRwdXRfRGlyZWN0b3J5X09yaWdpbiwKfQpUYXJnZXRfU2V0dGluZ3MuX2VsZW1kaWN0ID0gewp9CkZpbGVfTWFwcGluZy5fcHJvcGRpY3QgPSB7CgknRmlsZV9UeXBlJyA6IEZpbGVfVHlwZSwKCSdFeHRlbnNpb24nIDogRXh0ZW5zaW9uLAoJJ1ByZWNvbXBpbGVkJyA6IFByZWNvbXBpbGVkLAoJJ1Jlc291cmNlX0ZpbGUnIDogUmVzb3VyY2VfRmlsZSwKCSdMYXVuY2hhYmxlJyA6IExhdW5jaGFibGUsCgknSWdub3JlZF9ieV9NYWtlJyA6IElnbm9yZWRfYnlfTWFrZSwKCSdDb21waWxlcicgOiBDb21waWxlciwKfQpGaWxlX01hcHBpbmcuX2VsZW1kaWN0ID0gewp9Cl9jbGFzcy5fcHJvcGRpY3QgPSB7CgknbmFtZScgOiBuYW1lLAoJJ2xhbmd1YWdlJyA6IGxhbmd1YWdlLAoJJ2RlY2xhcmF0aW9uX2ZpbGUnIDogZGVjbGFyYXRpb25fZmlsZSwKCSdkZWNsYXJhdGlvbl9zdGFydF9vZmZzZXQnIDogZGVjbGFyYXRpb25fc3RhcnRfb2Zmc2V0LAoJJ2RlY2xhcmF0aW9uX2VuZF9vZmZzZXQnIDogZGVjbGFyYXRpb25fZW5kX29mZnNldCwKCSdzdWJjbGFzc2VzJyA6IHN1YmNsYXNzZXMsCgknYWxsX3N1YmNsYXNzZXMnIDogYWxsX3N1YmNsYXNzZXMsCn0KX2NsYXNzLl9lbGVtZGljdCA9IHsKCSdiYXNlX2NsYXNzJyA6IGJhc2VfY2xhc3MsCgknbWVtYmVyX2Z1bmN0aW9uJyA6IG1lbWJlcl9mdW5jdGlvbiwKCSdkYXRhX21lbWJlcicgOiBkYXRhX21lbWJlciwKfQptZW1iZXJfZnVuY3Rpb24uX3Byb3BkaWN0ID0gewoJJ25hbWUnIDogbmFtZSwKCSdhY2Nlc3MnIDogYWNjZXNzLAoJJ3ZpcnR1YWwnIDogdmlydHVhbCwKCSdzdGF0aWMnIDogc3RhdGljLAoJJ2RlY2xhcmF0aW9uX2ZpbGUnIDogZGVjbGFyYXRpb25fZmlsZSwKCSdkZWNsYXJhdGlvbl9zdGFydF9vZmZzZXQnIDogZGVjbGFyYXRpb25fc3RhcnRfb2Zmc2V0LAoJJ2RlY2xhcmF0aW9uX2VuZF9vZmZzZXQnIDogZGVjbGFyYXRpb25fZW5kX29mZnNldCwKCSdpbXBsZW1lbnRhdGlvbl9maWxlJyA6IGltcGxlbWVudGF0aW9uX2ZpbGUsCgknaW1wbGVtZW50YXRpb25fc3RhcnRfb2Zmc2V0JyA6IGltcGxlbWVudGF0aW9uX3N0YXJ0X29mZnNldCwKCSdpbXBsZW1lbnRhdGlvbl9lbmRfb2Zmc2V0JyA6IGltcGxlbWVudGF0aW9uX2VuZF9vZmZzZXQsCn0KbWVtYmVyX2Z1bmN0aW9uLl9lbGVtZGljdCA9IHsKfQpkYXRhX21lbWJlci5fcHJvcGRpY3QgPSB7CgknbmFtZScgOiBuYW1lLAoJJ2FjY2VzcycgOiBhY2Nlc3MsCgknc3RhdGljJyA6IHN0YXRpYywKCSdkZWNsYXJhdGlvbl9zdGFydF9vZmZzZXQnIDogZGVjbGFyYXRpb25fc3RhcnRfb2Zmc2V0LAoJJ2RlY2xhcmF0aW9uX2VuZF9vZmZzZXQnIDogZGVjbGFyYXRpb25fZW5kX29mZnNldCwKfQpkYXRhX21lbWJlci5fZWxlbWRpY3QgPSB7Cn0KYmFzZV9jbGFzcy5fcHJvcGRpY3QgPSB7CgknX2NsYXNzJyA6IF9jbGFzcywKCSdhY2Nlc3MnIDogYWNjZXNzLAoJJ3ZpcnR1YWwnIDogdmlydHVhbCwKfQpiYXNlX2NsYXNzLl9lbGVtZGljdCA9IHsKfQpicm93c2VyX2NhdGFsb2cuX3Byb3BkaWN0ID0gewp9CmJyb3dzZXJfY2F0YWxvZy5fZWxlbWRpY3QgPSB7CgknX2NsYXNzJyA6IF9jbGFzcywKfQpWQ1NfU2V0dXAuX3Byb3BkaWN0ID0gewoJJ1ZDU19BY3RpdmUnIDogVkNTX0FjdGl2ZSwKCSdDb25uZWN0aW9uX01ldGhvZCcgOiBDb25uZWN0aW9uX01ldGhvZCwKCSdVc2VybmFtZScgOiBVc2VybmFtZSwKCSdQYXNzd29yZCcgOiBQYXNzd29yZCwKCSdBdXRvX0Nvbm5lY3QnIDogQXV0b19Db25uZWN0LAoJJ1N0b3JlX1Bhc3N3b3JkJyA6IFN0b3JlX1Bhc3N3b3JkLAoJJ0Fsd2F5c19Qcm9tcHQnIDogQWx3YXlzX1Byb21wdCwKCSdNb3VudF9Wb2x1bWUnIDogTW91bnRfVm9sdW1lLAoJJ0RhdGFiYXNlX1BhdGgnIDogRGF0YWJhc2VfUGF0aCwKCSdMb2NhbF9Sb290JyA6IExvY2FsX1Jvb3QsCn0KVkNTX1NldHVwLl9lbGVtZGljdCA9IHsKfQpfRW51bV9zYXZvID0gewoJJ3llcycgOiAneWVzICcsCSMgU2F2ZSBjaGFuZ2VzCgknbm8nIDogJ25vICAnLAkjIERvIG5vdCBzYXZlIGNoYW5nZXMKCSdhc2snIDogJ2FzayAnLAkjIEFzayB0aGUgdXNlciB3aGV0aGVyIHRvIHNhdmUKfQoKX0VudW1fRXJyVCA9IHsKCSdpbmZvcm1hdGlvbicgOiAnRXJJbicsCSMgCgknY29tcGlsZXJfd2FybmluZycgOiAnRXJDVycsCSMgCgknY29tcGlsZXJfZXJyb3InIDogJ0VyQ0UnLAkjIAoJJ2RlZmluaXRpb24nIDogJ0VyRGYnLAkjIAoJJ2xpbmtlcl93YXJuaW5nJyA6ICdFckxXJywJIyAKCSdsaW5rZXJfZXJyb3InIDogJ0VyTEUnLAkjIAoJJ2ZpbmRfcmVzdWx0JyA6ICdFckZuJywJIyAKCSdnZW5lcmljX2Vycm9yJyA6ICdFckduJywJIyAKfQoKX0VudW1fTW9kZSA9IHsKCSdSZWFkV3JpdGUnIDogJ1JkV3InLAkjIFRoZSBmaWxlIGlzIG9wZW4gd2l0aCByZWFkL3dyaXRlIHByaXZpbGVnZXMKCSdSZWFkT25seScgOiAnUmVhZCcsCSMgVGhlIGZpbGUgaXMgb3BlbiB3aXRoIHJlYWQvb25seSBwcml2aWxlZ2VzCgknQ2hlY2tlZE91dF9SZWFkV3JpdGUnIDogJ0NrUlcnLAkjIFRoZSBmaWxlIGlzIGNoZWNrZWQgb3V0IHdpdGggcmVhZC93cml0ZSBwcml2aWxlZ2VzCgknQ2hlY2tlZE91dF9SZWFkT25seScgOiAnQ2tSTycsCSMgVGhlIGZpbGUgaXMgY2hlY2tlZCBvdXQgd2l0aCByZWFkL29ubHkgcHJpdmlsZWdlcwoJJ0NoZWNrZWRPdXRfUmVhZE1vZGlmeScgOiAnQ2tSTScsCSMgVGhlIGZpbGUgaXMgY2hlY2tlZCBvdXQgd2l0aCByZWFkL21vZGlmeSBwcml2aWxlZ2VzCgknTG9ja2VkJyA6ICdMb2NrJywJIyBUaGUgZmlsZSBpcyBsb2NrZWQgb24gZGlzawoJJ05vbmUnIDogJ05vbmUnLAkjIFRoZSBmaWxlIGlzIG5ldwp9CgpfRW51bV9TcmNUID0gewoJJ3NvdXJjZScgOiAnRlR4dCcsCSMgQSBzb3VyY2UgZmlsZSAoLmMsIC5jcCwgLnAsIGV0YykuCgkndW5rbm93bicgOiAnRlVuaycsCSMgQW4gdW5rbm93biBmaWxlIHR5cGUuCn0KCl9FbnVtX1BQcm0gPSB7CgknYWJzb2x1dGUnIDogJ0Fic28nLAkjIEFuIGFic29sdXRlIHBhdGggbmFtZSwgaW5jbHVkaW5nIHZvbHVtZSBuYW1lLgoJJ3Byb2plY3RfcmVsYXRpdmUnIDogJ1BSZWwnLAkjIEEgcGF0aCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBwcm9qZWN0uXMgZm9sZGVyLgoJJ3NoZWxsX3JlbGF0aXZlJyA6ICdTUmVsJywJIyBBIHBhdGggcmVsYXRpdmUgdG8gdGhlIENvZGVXYXJyaW9ygSBmb2xkZXIuCgknc3lzdGVtX3JlbGF0aXZlJyA6ICdZUmVsJywJIyBBIHBhdGggcmVsYXRpdmUgdG8gdGhlIHN5c3RlbSBmb2xkZXIKfQoKX0VudW1fUmVmUCA9IHsKCSdUaGlua19SZWZlcmVuY2UnIDogJ0RhblInLAkjIAoJJ1F1aWNrVmlldycgOiAnQUxUVicsCSMgCn0KCl9FbnVtX0xhbmcgPSB7CgknQycgOiAnTEMgICcsCSMgCgknQ18yYl9fMmJfJyA6ICdMQysrJywJIyAKCSdQYXNjYWwnIDogJ0xQICAnLAkjIAoJJ09iamVjdF9QYXNjYWwnIDogJ0xQKysnLAkjIAoJJ0phdmEnIDogJ0xKYXYnLAkjIAoJJ0Fzc2VtYmxlcicgOiAnTEFzbScsCSMgCgknVW5rbm93bicgOiAnTD8gICcsCSMgCn0KCl9FbnVtX0FjY2UgPSB7CgkncHVibGljJyA6ICdQdWJsJywJIyAKCSdwcm90ZWN0ZWQnIDogJ1Byb3QnLAkjIAoJJ3ByaXZhdGUnIDogJ1ByaXYnLAkjIAp9CgpfRW51bV9JbnRlID0gewoJJ25ldmVyX2ludGVyYWN0JyA6ICdlTnZyJywJIyBOZXZlciBhbGxvdyB1c2VyIGludGVyYWN0aW9ucwoJJ2ludGVyYWN0X3dpdGhfc2VsZicgOiAnZUluUycsCSMgQWxsb3cgdXNlciBpbnRlcmFjdGlvbiBvbmx5IHdoZW4gYW4gQXBwbGVFdmVudCBpcyBzZW50IGZyb20gd2l0aGluIENvZGVXYXJyaW9yCgknaW50ZXJhY3Rfd2l0aF9sb2NhbCcgOiAnZUluTCcsCSMgQWxsb3cgdXNlciBpbnRlcmFjdGlvbiB3aGVuIEFwcGxlRXZlbnRzIGFyZSBzZW50IGZyb20gYXBwbGljYXRpb25zIG9uIHRoZSBzYW1lIG1hY2hpbmUgKGRlZmF1bHQpCgknaW50ZXJhY3Rfd2l0aF9hbGwnIDogJ2VJbkEnLAkjIEFsbG93IHVzZXIgaW50ZXJhY3Rpb24gZnJvbSBib3RoIGxvY2FsIGFuZCByZW1vdGUgQXBwbGVFdmVudHMKfQoKCiMKIyBJbmRpY2VzIG9mIHR5cGVzIGRlY2xhcmVkIGluIHRoaXMgbW9kdWxlCiMKX2NsYXNzZGVjbGFyYXRpb25zID0gewoJJ0xYVFInIDogQnVpbGRfRXh0cmFzLAoJJ1NlZyAnIDogU2VnbWVudCwKCSdCc0NsJyA6IGJhc2VfY2xhc3MsCgknUEFUSCcgOiBBY2Nlc3NfUGF0aHMsCgknbUZOVCcgOiBGb250LAoJJ0JSS1cnIDogQnJvd3Nlcl9Db2xvcmluZywKCSdGTE1QJyA6IEZpbGVfTWFwcGluZ3MsCgknQ2F0YScgOiBicm93c2VyX2NhdGFsb2csCgknU05UWCcgOiBTeW50YXhfQ29sb3JpbmcsCgknQ1VLVycgOiBDdXN0b21fS2V5d29yZHMsCgknUEluZicgOiBQYXRoX0luZm9ybWF0aW9uLAoJJ1RBUkcnIDogVGFyZ2V0X1NldHRpbmdzLAoJJ0ZEZWYnIDogRnVuY3Rpb25fSW5mb3JtYXRpb24sCgknRURUUicgOiBFZGl0b3IsCgknVkNTcycgOiBWQ1NfU2V0dXAsCgknRXJyTScgOiBFcnJvcl9JbmZvcm1hdGlvbiwKCSdDbGFzJyA6IF9jbGFzcywKCSdTcmNGJyA6IFByb2plY3RGaWxlLAoJJ0dYVFInIDogRXh0cmFzLAoJJ01iRm4nIDogbWVtYmVyX2Z1bmN0aW9uLAoJJ0R0TWInIDogZGF0YV9tZW1iZXIsCgknRk1hcCcgOiBGaWxlX01hcHBpbmcsCn0KCl9wcm9wZGVjbGFyYXRpb25zID0gewoJJ0NTaXonIDogY29kZXNpemUsCgknRGNFbicgOiBkZWNsYXJhdGlvbl9lbmRfb2Zmc2V0LAoJJ0ZNcHMnIDogbWFwcGluZ3MsCgknVkMwMicgOiBDb25uZWN0aW9uX01ldGhvZCwKCSdWQzAzJyA6IFVzZXJuYW1lLAoJJ1RBMDInIDogRXh0ZW5zaW9uLAoJJ1VwVEQnIDogdXBfdG9fZGF0ZSwKCSdWQzA3JyA6IEFsd2F5c19Qcm9tcHQsCgknVmlydCcgOiB2aXJ0dWFsLAoJJ1ZDMDUnIDogQXV0b19Db25uZWN0LAoJJ1ZDMDgnIDogTW91bnRfVm9sdW1lLAoJJ1ZDMDknIDogRGF0YWJhc2VfUGF0aCwKCSdWQzA2JyA6IFN0b3JlX1Bhc3N3b3JkLAoJJ1BBMDInIDogQWx3YXlzX0Z1bGxfU2VhcmNoLAoJJ1BBMDMnIDogU3lzdGVtX1BhdGhzLAoJJ0NsYXMnIDogX2NsYXNzLAoJJ1BBMDEnIDogVXNlcl9QYXRocywKCSdUQTA5JyA6IFBvc3RfTGlua2VyLAoJJ0xhbmcnIDogbGFuZ3VhZ2UsCgknVkMxMCcgOiBMb2NhbF9Sb290LAoJJ0VYMDknIDogQnJvd3Nlcl9hY3RpdmUsCgknR0gwOCcgOiBDdXN0b21fY29sb3JfNCwKCSdEZkZsJyA6IGltcGxlbWVudGF0aW9uX2ZpbGUsCgknR0gwNicgOiBDdXN0b21fY29sb3JfMiwKCSdHSDA3JyA6IEN1c3RvbV9jb2xvcl8zLAoJJ0dIMDQnIDogU3RyaW5nX2NvbG9yLAoJJ0dIMDUnIDogQ3VzdG9tX2NvbG9yXzEsCgknS1cwMScgOiBDdXN0b21fY29sb3JfMSwKCSdHSDAzJyA6IEtleXdvcmRfY29sb3IsCgknS1cwMycgOiBDdXN0b21fY29sb3JfMywKCSdLVzAyJyA6IEN1c3RvbV9jb2xvcl8yLAoJJ0JXMDInIDogQ29uc3RhbnRzX0NvbG9yLAoJJ0JXMDMnIDogRW51bXNfQ29sb3IsCgknQlcwMCcgOiBCcm93c2VyX0tleXdvcmRzLAoJJ0JXMDEnIDogQ2xhc3Nlc19Db2xvciwKCSdCVzA2JyA6IE1hY3Jvc19Db2xvciwKCSdCVzA3JyA6IFRlbXBsYXRlc19Db2xvciwKCSdCVzA0JyA6IEZ1bmN0aW9uc19Db2xvciwKCSdwbmFtJyA6IG5hbWUsCgknRGZTdCcgOiBpbXBsZW1lbnRhdGlvbl9zdGFydF9vZmZzZXQsCgknQlcwOCcgOiBUeXBlZGVmc19Db2xvciwKCSdQUjA0JyA6IEZpbGVfVHlwZSwKCSdFWDA0JyA6IE1vZGlmaWNhdGlvbl9kYXRlX2NhY2hpbmcsCgknRVgwNycgOiBGdWxsX3NjcmVlbl96b29tLAoJJ1BMY2snIDogbG9ja2VkLAoJJ0VYMDInIDogU3VjY2Vzc19zb3VuZCwKCSdFWDAzJyA6IEZhaWx1cmVfc291bmQsCgknVEEwNicgOiBJZ25vcmVkX2J5X01ha2UsCgknVEEwNycgOiBDb21waWxlciwKCSdUQTA0JyA6IFJlc291cmNlX0ZpbGUsCgknVEEwNScgOiBMYXVuY2hhYmxlLAoJJ0VYMDgnIDogRXh0ZXJuYWxfcmVmZXJlbmNlLAoJJ0RTaXonIDogZGF0YXNpemUsCgknVEEwMScgOiBMaW5rZXIsCgknVkMwNCcgOiBQYXNzd29yZCwKCSdCZm9yJyA6IGluaXRpYWxpemVfYmVmb3JlLAoJJ1NyY1QnIDogZmlsZXR5cGUsCgknU3lzSCcgOiBzeXN0ZW1faGVhcCwKCSdHSDAxJyA6IFN5bnRheF9jb2xvcmluZywKCSdHSDAyJyA6IENvbW1lbnRfY29sb3IsCgknUHJlbCcgOiBwcmVsb2FkZWQsCgknT3JpZycgOiBvcmlnaW4sCgknRVgxNycgOiBSZWNlbnRfUHJvamVjdHMsCgknRVgxNicgOiBSZWNlbnRfRG9jdW1lbnRzLAoJJ0VYMTUnIDogSW5jbHVkZV9GaWxlX0NhY2hlX1NpemVfXzI4X0tfMjlfLAoJJ0VYMTQnIDogTXVsdGlwcm9jZXNzaW5nX0NvbXBpbGF0aW9uLAoJJ0VYMDEnIDogQ29tcGxldGlvbl9zb3VuZCwKCSdFWDEyJyA6IFVzZV9TY3JpcHRfTWVudSwKCSdFWDExJyA6IFVzZV9FeHRlcm5hbF9FZGl0b3IsCgknRVgxMCcgOiBVc2VfRWRpdG9yX0V4dGVuc2lvbnMsCgknVEExMScgOiBPdXRwdXRfRGlyZWN0b3J5X1BhdGgsCgknVEExMCcgOiBUYXJnZXRfTmFtZSwKCSdUQTEyJyA6IE91dHB1dF9EaXJlY3RvcnlfT3JpZ2luLAoJJ0VYMTknIDogRW5hYmxlX0F1dG9tYXRpY19Ub29sYmFyX0hlbHAsCgknRVgxOCcgOiBTaG93X1Rvb2xTZXJ2ZXJfTWVudSwKCSdFcnJUJyA6IGtpbmQsCgkncHR4ZicgOiBUZXh0X2ZvbnQsCgknRXJyUycgOiBtZXNzYWdlLAoJJ1N1YkEnIDogYWxsX3N1YmNsYXNzZXMsCgknU3ViQycgOiBzdWJjbGFzc2VzLAoJJ0VEMDgnIDogUmVtZW1iZXJfZm9udCwKCSdFRDA5JyA6IFJlbWVtYmVyX3NlbGVjdGlvbiwKCSdWQzAxJyA6IFZDU19BY3RpdmUsCgknRXJyTCcgOiBsaW5lTnVtYmVyLAoJJ0VEMDEnIDogRmxhc2hfZGVsYXksCgknRUQwMicgOiBEeW5hbWljX3Njcm9sbCwKCSdFRDAzJyA6IEJhbGFuY2UsCgknRUQwNCcgOiBVc2VfRHJhZ19fMjZfX0Ryb3BfRWRpdGluZywKCSdFRDA1JyA6IFNhdmVfb25fdXBkYXRlLAoJJ0VEMDYnIDogU29ydF9GdW5jdGlvbl9Qb3B1cCwKCSdFRDA3JyA6IFVzZV9NdWx0aXBsZV9VbmRvLAoJJ1JlY3UnIDogcmVjdXJzaXZlLAoJJ0luY0YnIDogaW5jbHVkZXMsCgknZmlsZScgOiBkaXNrX2ZpbGUsCgknVEEwMycgOiBQcmVjb21waWxlZCwKCSdXZWFrJyA6IHdlYWtfbGluaywKCSdEY1N0JyA6IGRlY2xhcmF0aW9uX3N0YXJ0X29mZnNldCwKCSdwdHBzJyA6IFRleHRfc2l6ZSwKCSdTdGF0JyA6IHN0YXRpYywKCSdFRDEwJyA6IFJlbWVtYmVyX3dpbmRvdywKCSdFWDEzJyA6IEhvbm9yX1Byb2plY3Rvcl9TdGF0ZV9mb3JfUHJvamVjdHMsCgknRGZFbicgOiBpbXBsZW1lbnRhdGlvbl9lbmRfb2Zmc2V0LAoJJ0JXMDUnIDogR2xvYmFsc19Db2xvciwKCSdGTjAxJyA6IEF1dG9faW5kZW50LAoJJ1B1cmcnIDogcHVyZ2VhYmxlLAoJJ051bUYnIDogZmlsZWNvdW50LAoJJ0FjY2UnIDogYWNjZXNzLAoJJ1Byb3QnIDogcHJvdGVjdGVkLAoJJ0RjRmwnIDogZGVjbGFyYXRpb25fZmlsZSwKCSdLVzA0JyA6IEN1c3RvbV9jb2xvcl80LAoJJ0VEMTMnIDogQmFja2dyb3VuZF9Db2xvciwKCSdFRDEyJyA6IE1haW5fVGV4dF9Db2xvciwKCSdTeW1HJyA6IHN5bWJvbHMsCgknRk4wMicgOiBUYWJfc2l6ZSwKCSdFRDE0JyA6IENvbnRleHRfUG9wdXBfRGVsYXksCn0KCl9jb21wZGVjbGFyYXRpb25zID0gewp9CgpfZW51bWRlY2xhcmF0aW9ucyA9IHsKCSdFcnJUJyA6IF9FbnVtX0VyclQsCgknUFBybScgOiBfRW51bV9QUHJtLAoJJ1JlZlAnIDogX0VudW1fUmVmUCwKCSdBY2NlJyA6IF9FbnVtX0FjY2UsCgknU3JjVCcgOiBfRW51bV9TcmNULAoJJ01vZGUnIDogX0VudW1fTW9kZSwKCSdJbnRlJyA6IF9FbnVtX0ludGUsCgknc2F2bycgOiBfRW51bV9zYXZvLAoJJ0xhbmcnIDogX0VudW1fTGFuZywKfQo=