.wrapper {
	width: 100%;
	max-width: 1600px;
	margin: 0 auto;
}

.wrapper--fluid {
	max-width: 100%;
	padding-left: 15px;
	padding-right: 15px;
}

@media only screen and (max-width: 1630px) {
	.wrapper {
		padding: 0 15px;
	}
}

.wrapper--lg {
	max-width: 1280px;
}

@media only screen and (max-width: 1310px) {
	.wrapper--lg {
		padding: 0 15px;
	}
}

.wrapper--md {
	max-width: 1024px;
}

.wrapper--sm {
	max-width: 960px;
}

.wrapper--xs {
	max-width: 768px;
}

.hide {
	display: none;
}

.flex {
	display: -webkit-box;
	display: -ms-flexbox;
	display: flex;
	-ms-flex-wrap: wrap;
	    flex-wrap: wrap;
}

.red {
	color: #c1272d;
}

.blue {
	color: #004AAC;
}

.edit {
	font-size: 18px;
	font-size: 1.125rem;
	line-height: 1.688rem;
}

.edit img, .edit iframe {
	max-width: 100%;
	height: auto;
}

.edit table {
	max-width: 100%;
}

.text-24 {
	font-size: 24px;
	font-size: 1.5rem;
	line-height: 2.25rem;
}

@media only screen and (max-width: 768px) {
	.text-24 {
		font-size: 18px;
		font-size: 1.125rem;
		line-height: 1.688rem;
	}
}

/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS9sYXlvdXQuY3NzIiwic291cmNlcyI6WyJiYXNlL2xheW91dC5zYXNzIiwic2V0dGluZy9fZGVmYXVsdC5zYXNzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9fc3VzeS5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9fc3VzeS1wcmVmaXguc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3MvX3ZlcnNpb24uc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9fdXRpbGl0aWVzLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvX3N1LXZhbGlkYXRlLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvX3N1LW1hdGguc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9fc2V0dGluZ3Muc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9fbm9ybWFsaXplLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvX3BhcnNlLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvX3N5bnRheC1oZWxwZXJzLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvX2FwaS5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L191bnByZWZpeC5zY3NzIiwic2V0dGluZy9fdmFyaWFibGUuc2FzcyIsInNldHRpbmcvX2Z1bmN0aW9uLnNhc3MiLCJzZXR0aW5nL19taXhpbi5zYXNzIiwic2V0dGluZy9fZXh0ZW5kLnNhc3MiXSwic291cmNlc0NvbnRlbnQiOlsiQGltcG9ydCBcIi4uL3NldHRpbmcvZGVmYXVsdFwiO1xuLy9sYXlvdXQg5qGG5p626Kit5a6aXG4ud3JhcHBlciB7XG5cdHdpZHRoOiAxMDAlO1xuXHQvL+WvrOW6puiuiuWMllxuXHRAZWFjaCAkaW5uZXJOYW1lLCRpbm5lclNpemUsJGlubmVyR2FwICBpbiAkaW5uZXIge1xuXHRcdEBpZiAkaW5uZXJOYW1lID09ICd4bCcge1xuXHRcdFx0XHRAaW5jbHVkZSBpbm5lcigkaW5uZXJTaXplLCRpbm5lckdhcCk7XG5cdFx0XHRcdG1hcmdpbjogMCBhdXRvOyB9XG5cdFx0QGVsc2UgaWYgJGlubmVyTmFtZSA9PSAnZmx1aWQnIHtcblx0XHRcdCYtLSN7JGlubmVyTmFtZX0ge1xuXHRcdFx0XHRtYXgtd2lkdGg6ICRpbm5lclNpemU7XG5cdFx0XHRcdEBpZiAkaW5uZXJHYXAgIT0gMCB7XG5cdFx0XHRcdFx0cGFkZGluZy1sZWZ0OiAkaW5uZXJHYXAgLyAyICogMXB4O1xuXHRcdFx0XHRcdHBhZGRpbmctcmlnaHQ6ICRpbm5lckdhcCAvIDIgKiAxcHg7IH0gfSB9XG5cdFx0QGVsc2Uge1xuXHRcdFx0Ji0tI3skaW5uZXJOYW1lfSB7XG5cdFx0XHRcdEBpbmNsdWRlIGlubmVyKCRpbm5lclNpemUsJGlubmVyR2FwKTsgfSB9IH0gfVxuXG4vL290aGVyXG4uaGlkZSB7XG5cdGRpc3BsYXk6IG5vbmU7IH1cbi5mbGV4IHtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC13cmFwOiB3cmFwOyB9XG4ucmVkIHtcblx0Y29sb3I6ICRyZWQ7IH1cbi5ibHVlIHtcblx0Y29sb3I6ICRtYWluLWNvbG9yOyB9XG5cbi8vZWRpdCAodmlkZW8g5ru/54mI5aWX5Lu2KVxuLmVkaXQge1xuXHRAaW5jbHVkZSBmb250LXNpemUoMThweCk7XG5cdGltZyxpZnJhbWUge1xuXHRcdG1heC13aWR0aDogMTAwJTtcblx0XHRoZWlnaHQ6IGF1dG87IH1cblx0dGFibGUge1xuXHRcdG1heC13aWR0aDogMTAwJTsgfSB9XG4udGV4dC0yNCB7XG5cdEBpbmNsdWRlIGZvbnQtc2l6ZSgyNHB4KTtcblx0QGluY2x1ZGUgcndkKDc2OCkge1xuXHRcdEBpbmNsdWRlIGZvbnQtc2l6ZSgxOHB4KTsgfSB9XG4iLCIvL1RoaXMgaXMgc2FzcyBmaWxlXG5AaW1wb3J0ICdzdXN5JztcbkBpbXBvcnQgXCJ2YXJpYWJsZVwiO1xuQGltcG9ydCBcImZ1bmN0aW9uXCI7XG5AaW1wb3J0IFwibWl4aW5cIjtcbkBpbXBvcnQgXCJleHRlbmRcIjtcbiIsIi8vIFN1c3kgKFVuLVByZWZpeGVkKVxuLy8gPT09PT09PT09PT09PT09PT09XG5cbkBpbXBvcnQgJ3N1c3ktcHJlZml4JztcbkBpbXBvcnQgJ3N1c3kvdW5wcmVmaXgnO1xuIiwiLy8gU3VzeSAoUHJlZml4ZWQpXG4vLyA9PT09PT09PT09PT09PT1cblxuXG5AaW1wb3J0ICd2ZXJzaW9uJztcbkBpbXBvcnQgJ3N1c3kvdXRpbGl0aWVzJztcbkBpbXBvcnQgJ3N1c3kvc3UtdmFsaWRhdGUnO1xuQGltcG9ydCAnc3VzeS9zdS1tYXRoJztcbkBpbXBvcnQgJ3N1c3kvc2V0dGluZ3MnO1xuQGltcG9ydCAnc3VzeS9ub3JtYWxpemUnO1xuQGltcG9ydCAnc3VzeS9wYXJzZSc7XG5AaW1wb3J0ICdzdXN5L3N5bnRheC1oZWxwZXJzJztcbkBpbXBvcnQgJ3N1c3kvYXBpJztcbiIsIi8vIFJlbGVhc2UgTWFuYWdlbWVudCBpbiBTdXN5XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5cbi8vIFN1c3kgVmVyc2lvbiBbdmFyaWFibGVdXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8vIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgU3VzeSBiZWluZyB1c2VkLlxuLy8vIC0gV2Ugd2lsbCByZWxlYXNlIGEgbWFqb3IgdmVyc2lvbiBmb3IgYW55IEJSRUFLSU5HIGNoYW5nZXMuXG4vLy8gLSBXZSB3aWxsIHJlbGVhc2UgYSBtaW5vciB2ZXJzaW9uIGZvciBhbnkgc2lnbmlmaWNhbnQgTkVXIGZlYXR1cmVzLlxuLy8vIC0gV2Ugd2lsbCByZWxlYXNlIGEgcGF0Y2ggZm9yIGFueSBCVUdGSVggY2hhbmdlcy5cbi8vL1xuLy8vIEBncm91cCBfdmVyc2lvblxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vIEBzaW5jZSAzLjAuMVxuLy8vXG4vLy8gQHByb3Age2ludGVnZXJ9ICdtYWpvcicgLSB0aGUgbWFqb3IgcmVsZWFzZSBudW1iZXJcbi8vLyBAcHJvcCB7aW50ZWdlcn0gJ21pbm9yJyAtIHRoZSBtaW5vciByZWxlYXNlIG51bWJlclxuLy8vIEBwcm9wIHtpbnRlZ2VyfSAncGF0Y2gnIC0gdGhlIHBhdGNoIG51bWJlclxuJF9zdXN5LXZlcnNpb246IChcbiAgJ21ham9yJzogMyxcbiAgJ21pbm9yJzogMCxcbiAgJ3BhdGNoJzogNyxcbik7XG5cblxuLy8gU3VzeSBWZXJzaW9uIFtmdW5jdGlvbl1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLy8gUmV0dXJucyB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIFN1c3lcbi8vLyBhcyBhIHN0cmluZyBpbiB0aGUgY29tbW9uIGBtYWpvci5taW5vci5wYXRjaGAgZm9ybWF0IOKAk1xuLy8vIG9yIHJldHVybnMgb25lIHBhcnQgKG1ham9yIHwgbWlub3IgfCBwYXRjaCkgYXMgYSBudW1iZXJcbi8vLyBmb3IgdmVyc2lvbiBjb21wYXJpc29ucy5cbi8vLyBTaW5jZSB2ZXJzaW9uIG51bWJlcnMgYXJlbid0IGFjdHVhbCBkZWNpbWFscyxcbi8vLyB0aGVyZSBpcyBubyBzaW1wbGUgd2F5IHRvIHJldHVybiB0aGUgZnVsbCB2ZXJzaW9uXG4vLy8gYXMgYSBjb21wYXJhYmxlIG51bWJlciBpbiBTYXNzLlxuLy8vXG4vLy8gQGdyb3VwIF92ZXJzaW9uXG4vLy9cbi8vLyBAcGFyYW0geydtYWpvcicgfCAnbWlub3InIHwgJ3BhdGNoJ30gJHBhcnQgW251bGxdIC1cbi8vLyAgIFRoZSBwYXJ0IChtYWpvciB8IG1pbm9yIHwgcGF0Y2gpIHRvIHJldHVybiBhcyBhIG51bWJlci5cbi8vLyAgIEFueSBvdGhlciB2YWx1ZSB3aWxsIHJldHVybiB0aGUgZnVsbCB2ZXJzaW9uIGFzIGEgc3RyaW5nLlxuLy8vIEBleGFtcGxlIHNjc3MgLSBDdXJyZW50IFN1c3kgVmVyc2lvblxuLy8vICAgLyogRnVsbCBWZXJzaW9uOiAje3N1c3ktdmVyc2lvbigpfSAqL1xuLy8vICAgLyogTWFqb3IgUmVsZWFzZTogI3tzdXN5LXZlcnNpb24oJ21ham9yJyl9ICovXG5AZnVuY3Rpb24gc3VzeS12ZXJzaW9uKFxuICAkcGFydDogbnVsbFxuKSB7XG4gICRtYWpvcjogbWFwLWdldCgkX3N1c3ktdmVyc2lvbiwgJ21ham9yJyk7XG4gICRtaW5vcjogbWFwLWdldCgkX3N1c3ktdmVyc2lvbiwgJ21pbm9yJyk7XG4gICRwYXRjaDogbWFwLWdldCgkX3N1c3ktdmVyc2lvbiwgJ3BhdGNoJyk7XG4gICRmdWxsOiAnI3skbWFqb3J9LiN7JG1pbm9yfS4jeyRwYXRjaH0nO1xuXG4gIEByZXR1cm4gbWFwLWdldCgkX3N1c3ktdmVyc2lvbiwgJHBhcnQpIG9yICRmdWxsO1xufVxuIiwiLy8gU2FzcyBVdGlsaXRpZXNcbi8vID09PT09PT09PT09PT09XG4vLyAtIFN1c3kgRXJyb3IgT3V0cHV0IE92ZXJyaWRlIFt2YXJpYWJsZV1cbi8vIC0gU3VzeSBFcnJvciBbZnVuY3Rpb25dXG5cblxuXG4vLyBTdXN5IEVycm9yIE91dHB1dCBPdmVycmlkZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vLyBUdXJuIG9mZiBlcnJvciBvdXRwdXQgZm9yIHRlc3Rpbmdcbi8vLyBAZ3JvdXAgeC11dGlsaXR5XG4vLy8gQGFjY2VzcyBwcml2YXRlXG4kX3N1c3ktZXJyb3Itb3V0cHV0LW92ZXJyaWRlOiBmYWxzZSAhZGVmYXVsdDtcblxuXG5cbi8vIFN1c3kgRXJyb3Jcbi8vIC0tLS0tLS0tLS1cbi8vLyBPcHRpb25hbGx5IHJldHVybiBlcnJvciBtZXNzYWdlcyB3aXRob3V0IGZhaWxpbmcsXG4vLy8gYXMgYSB3YXkgdG8gdGVzdCBlcnJvciBjYXNlc1xuLy8vXG4vLy8gQGdyb3VwIHgtdXRpbGl0eVxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtzdHJpbmd9ICRtZXNzYWdlIC1cbi8vLyAgIEEgdXNlZnVsIGVycm9yIG1lc3NhZ2UsIGV4cGxhaW5pbmcgdGhlIHByb2JsZW1cbi8vLyBAcGFyYW0ge3N0cmluZ30gJHNvdXJjZSAtXG4vLy8gICBUaGUgb3JpZ2luYWwgc291cmNlIG9mIHRoZSBlcnJvciBmb3IgZGVidWdnaW5nXG4vLy8gQHBhcmFtIHtib29sfSAkb3ZlcnJpZGUgWyRfc3VzeS1lcnJvci1vdXRwdXQtb3ZlcnJpZGVdIC1cbi8vLyAgIE9wdGlvbmFsbHkgcmV0dXJuIHRoZSBlcnJvciByYXRoZXIgdGhhbiBmYWlsaW5nXG4vLy8gQHJldHVybiB7c3RyaW5nfSAtXG4vLy8gICBDb21iaW5lZCBlcnJvciB3aXRoIHNvdXJjZSBhbmQgbWVzc2FnZVxuLy8vIEB0aHJvd3MgV2hlbiBgJG92ZXJyaWRlID09IHRydWVgXG5AZnVuY3Rpb24gX3N1c3ktZXJyb3IoXG4gICRtZXNzYWdlLFxuICAkc291cmNlLFxuICAkb3ZlcnJpZGU6ICRfc3VzeS1lcnJvci1vdXRwdXQtb3ZlcnJpZGVcbikge1xuICBAaWYgJG92ZXJyaWRlIHtcbiAgICBAcmV0dXJuICdFUlJPUiBbI3skc291cmNlfV0gI3skbWVzc2FnZX0nO1xuICB9XG5cbiAgQGVycm9yICdbI3skc291cmNlfV0gI3skbWVzc2FnZX0nO1xufVxuXG5cbi8vIFN1IElzIENvbXBhcmFibGVcbi8vIC0tLS0tLS0tLS0tLS0tLS1cbi8vLyBDaGVjayB0aGF0IHRoZSB1bml0cyBpbiBhIGdyaWQgYXJlIGNvbXBhcmFibGVcbi8vL1xuLy8vIEBncm91cCBfdmFsaWRhdGlvblxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtudW1iZXJzfSAkbGVuZ3Roc+KApiAtXG4vLy8gICBBcmdsaXN0IG9mIGFsbCB0aGUgbnVtYmVyIHZhbHVlcyB0byBjb21wYXJlXG4vLy8gICAoY29sdW1ucywgZ3V0dGVycywgc3BhbiwgZXRjKVxuLy8vXG4vLy8gQHJldHVybiB7J2ZsdWlkJyB8ICdzdGF0aWMnIHwgZmFsc2V9IC1cbi8vLyAgIFRoZSB0eXBlIG9mIHNwYW4gKGZsdWlkIG9yIHN0YXRpYykgd2hlbiB1bml0cyBtYXRjaCxcbi8vLyAgIG9yIGBmYWxzZWAgZm9yIG1pc21hdGNoZWQgdW5pdHNcbkBmdW5jdGlvbiBfc3UtaXMtY29tcGFyYWJsZShcbiAgJGxlbmd0aHMuLi5cbikge1xuICAkZmlyc3Q6IG50aCgkbGVuZ3RocywgMSk7XG5cbiAgQGlmIChsZW5ndGgoJGxlbmd0aHMpID09IDEpIHtcbiAgICBAcmV0dXJuIGlmKHVuaXRsZXNzKCRmaXJzdCksICdmbHVpZCcsICdzdGF0aWMnKTtcbiAgfVxuXG4gIEBmb3IgJGkgZnJvbSAyIHRocm91Z2ggbGVuZ3RoKCRsZW5ndGhzKSB7XG4gICAgJGNvbXA6IG50aCgkbGVuZ3RocywgJGkpO1xuXG4gICAgJGZhaWw6IG5vdCBjb21wYXJhYmxlKCRmaXJzdCwgJGNvbXApO1xuICAgICRmYWlsOiAkZmFpbCBvciAodW5pdGxlc3MoJGZpcnN0KSBhbmQgbm90IHVuaXRsZXNzKCRjb21wKSk7XG4gICAgJGZhaWw6ICRmYWlsIG9yICh1bml0bGVzcygkY29tcCkgYW5kIG5vdCB1bml0bGVzcygkZmlyc3QpKTtcblxuICAgIEBpZiAkZmFpbCB7XG4gICAgICBAcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gaWYodW5pdGxlc3MoJGZpcnN0KSwgJ2ZsdWlkJywgJ3N0YXRpYycpO1xufVxuXG5cbi8vIFN1IE1hcCBBZGQgVW5pdHNcbi8vIC0tLS0tLS0tLS0tLS0tLS1cbi8vLyBUaGUgY2FsYyBmZWF0dXJlcyB1c2UgYSBtYXAgb2YgdW5pdHMgYW5kIHZhbHVlc1xuLy8vIHRvIGNvbXBpbGUgdGhlIHByb3BlciBhbGdvcnl0aG0uXG4vLy8gVGhpcyBmdW5jdGlvbiBhZGRzIGEgbmV3IHZhbHVlIHRvIGFueSBjb21wYXJhYmxlIGV4aXN0aW5nIHVuaXQvdmFsdWUsXG4vLy8gb3IgYWRkcyBhIG5ldyB1bml0L3ZhbHVlIHBhaXIgdG8gdGhlIG1hcFxuLy8vXG4vLy8gQGdyb3VwIHgtdXRpbGl0eVxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHttYXB9ICRtYXAgLVxuLy8vICAgQSBtYXAgb2YgdW5pdC92YWx1ZSBwYWlycywgZS5nLiAoJ3B4JzogMTIwcHgpXG4vLy8gQHBhcmFtIHtsZW5ndGh9ICR2YWx1ZSAtXG4vLy8gICBBIG5ldyBsZW5ndGggdG8gYmUgYWRkZWQgdG8gdGhlIG1hcFxuLy8vIEByZXR1cm4ge21hcH0gLVxuLy8vICAgVGhlIHVwZGF0ZWQgbWFwLCB3aXRoIG5ldyB2YWx1ZSBhZGRlZFxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtXG4vLy8gICAkbWFwOiAoMHB4OiAxMjBweCk7XG4vLy8gICAkbWFwOiBfc3UtbWFwLWFkZC11bml0cygkbWFwLCAxaW4pOyAvLyBhZGQgYSBjb21wYXJhYmxlIHVuaXRcbi8vLyAgICRtYXA6IF9zdS1tYXAtYWRkLXVuaXRzKCRtYXAsIDN2dyk7IC8vIGFkZCBhIG5ldyB1bml0XG4vLy9cbi8vLyAgIEBlYWNoICR1bml0cywgJHZhbHVlIGluICRtYXAge1xuLy8vICAgICAvKiAjeyR1bml0c306ICN7JHZhbHVlfSAqL1xuLy8vICAgfVxuQGZ1bmN0aW9uIF9zdS1tYXAtYWRkLXVuaXRzKFxuICAkbWFwLFxuICAkdmFsdWVcbikge1xuICAkdW5pdDogJHZhbHVlICogMDtcbiAgJGhhczogbWFwLWdldCgkbWFwLCAkdW5pdCkgb3IgMDtcblxuICBAaWYgKCRoYXMgPT0gMCkge1xuICAgIEBlYWNoICR0cnksICRjb3VsZCBpbiAkbWFwIHtcbiAgICAgICRtYXRjaDogY29tcGFyYWJsZSgkdHJ5LCAkdmFsdWUpO1xuICAgICAgJHVuaXQ6IGlmKCRtYXRjaCwgJHRyeSwgJHVuaXQpO1xuICAgICAgJGhhczogaWYoJG1hdGNoLCAkY291bGQsICRoYXMpO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gbWFwLW1lcmdlKCRtYXAsICgkdW5pdDogJGhhcyArICR2YWx1ZSkpO1xufVxuXG5cbi8vIFN1c3kgRmxhdHRlblxuLy8gLS0tLS0tLS0tLS0tXG4vLy8gRmxhdHRlbiBhIG11bHRpZGltZW5zaW9uYWwgbGlzdFxuLy8vXG4vLy8gQGdyb3VwIHgtdXRpbGl0eVxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0fSAkbGlzdCAtXG4vLy8gICBUaGUgbGlzdCB0byBiZSBmbGF0dGVuZWRcbi8vLyBAcmV0dXJuIHtsaXN0fSAtXG4vLy8gICBUaGUgZmxhdHRlbmVkIGxpc3Rcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLVxuLy8vICAgJGxpc3Q6IDEyMHB4ICgzMGVtIDMwZW0pIDEyMHB4O1xuLy8vICAgLyogI3tfc3VzeS1mbGF0dGVuKCRsaXN0KX0gKi9cbkBmdW5jdGlvbiBfc3VzeS1mbGF0dGVuKFxuICAkbGlzdFxuKSB7XG4gICRmbGF0OiAoKTtcblxuICAvLyBEb24ndCBpdGVyYXRlIG92ZXIgbWFwc1xuICBAaWYgKHR5cGUtb2YoJGxpc3QpID09ICdtYXAnKSB7XG4gICAgQHJldHVybiAkbGlzdDtcbiAgfVxuXG4gIC8vIEl0ZXJhdGUgb3ZlciBsaXN0cyAob3Igc2luZ2xlIGl0ZW1zKVxuICBAZWFjaCAkaXRlbSBpbiAkbGlzdCB7XG4gICAgQGlmICh0eXBlLW9mKCRpdGVtKSA9PSAnbGlzdCcpIHtcbiAgICAgICRpdGVtOiBfc3VzeS1mbGF0dGVuKCRpdGVtKTtcbiAgICAgICRmbGF0OiBqb2luKCRmbGF0LCAkaXRlbSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkZmxhdDogYXBwZW5kKCRmbGF0LCAkaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0dXJuIGZsYXR0ZW5lZCBsaXN0XG4gIEByZXR1cm4gJGZsYXQ7XG59XG4iLCIvLy8gVmFsaWRhdGlvblxuLy8vID09PT09PT09PT1cbi8vLyBFYWNoIGFyZ3VtZW50IHRvIFN1IGhhcyBhIHNpbmdsZSBjYW5vbmljYWwgc3ludGF4LlxuLy8vIFRoZXNlIHZhbGlkYXRpb24gZnVuY3Rpb25zIGNoZWNrIHRvIGVuc3VyZVxuLy8vIHRoYXQgZWFjaCBhcmd1bWVudCBpcyB2YWxpZCxcbi8vLyBpbiBvcmRlciB0byBwcm92aWRlIHVzZWZ1bCBlcnJvcnNcbi8vLyBiZWZvcmUgYXR0ZW1wdGluZyB0byBjYWxjdWxhdGUgdGhlIHJlc3VsdHMvXG4vLy9cbi8vLyBAZ3JvdXAgX3ZhbGlkYXRpb25cbi8vL1xuLy8vIEBzZWUgc3UtdmFsaWQtY29sdW1uc1xuLy8vIEBzZWUgc3UtdmFsaWQtZ3V0dGVyc1xuLy8vIEBzZWUgc3UtdmFsaWQtc3ByZWFkXG4vLy8gQHNlZSBzdS12YWxpZC1sb2NhdGlvblxuXG5cblxuLy8gVmFsaWQgU3BhblxuLy8gLS0tLS0tLS0tLVxuLy8vIENoZWNrIHRoYXQgdGhlIGBzcGFuYCBhcmd1bWVudFxuLy8vIGlzIGEgbnVtYmVyLCBsZW5ndGgsIG9yIGNvbHVtbi1saXN0XG4vLy9cbi8vLyBAZ3JvdXAgX3ZhbGlkYXRpb25cbi8vL1xuLy8vIEBwYXJhbSB7bnVtYmVyIHwgbGlzdH0gJHNwYW4gLVxuLy8vICAgTnVtYmVyIG9mIGNvbHVtbnMsIG9yIGxlbmd0aCBvZiBzcGFuXG4vLy9cbi8vLyBAcmV0dXJuIHtudW1iZXIgfCBsaXN0fSAtXG4vLy8gICBWYWxpZGF0ZWQgYCRzcGFuYCBudW1iZXIsIGxlbmd0aCwgb3IgY29sdW1ucyBsaXN0XG4vLy9cbi8vLyBAdGhyb3dcbi8vLyAgIHdoZW4gc3BhbiB2YWx1ZSBpcyBub3QgYSBudW1iZXIsIG9yIHZhbGlkIGNvbHVtbiBsaXN0XG5AZnVuY3Rpb24gc3UtdmFsaWQtc3BhbihcbiAgJHNwYW5cbikge1xuICAkdHlwZTogdHlwZS1vZigkc3Bhbik7XG4gIEBpZiAoJHR5cGUgPT0gJ251bWJlcicpIHtcbiAgICBAcmV0dXJuICRzcGFuO1xuICB9IEBlbHNlIGlmICgkdHlwZSA9PSAnbGlzdCcpIGFuZCBzdS12YWxpZC1jb2x1bW5zKCRzcGFuLCAnc2lsZW50LWZhaWx1cmUnKSB7XG4gICAgQHJldHVybiAkc3BhbjtcbiAgfVxuXG4gICRhY3R1YWw6ICdbI3t0eXBlLW9mKCRzcGFuKX1dIGAje2luc3BlY3QoJHNwYW4pfWAnO1xuICBAcmV0dXJuIF9zdXN5LWVycm9yKFxuICAgICcjeyRhY3R1YWx9IGlzIG5vdCBhIHZhbGlkIG51bWJlciwgbGVuZ3RoLCBvciBjb2x1bW4tbGlzdCBmb3IgJHNwYW4uJyxcbiAgICAnc3UtdmFsaWQtc3BhbicpO1xufVxuXG5cblxuLy8gVmFsaWQgQ29sdW1uc1xuLy8gLS0tLS0tLS0tLS0tLVxuLy8vIENoZWNrIHRoYXQgdGhlIGBjb2x1bW5zYCBhcmd1bWVudCBpcyBhIHZhbGlkXG4vLy8gbGlzdCBvZiBjb2x1bW4tbGVuZ3Roc1xuLy8vXG4vLy8gQGdyb3VwIF92YWxpZGF0aW9uXG4vLy9cbi8vLyBAcGFyYW0ge2xpc3R9ICRjb2x1bW5zIC1cbi8vLyAgIExpc3Qgb2YgY29sdW1uLWxlbmd0aHNcbi8vLyBAcGFyYW0ge2Jvb2x9ICRzaWxlbnQtZmFpbHVyZSBbdHJ1ZV0gLVxuLy8vICAgU2V0IGZhbHNlIHRvIHJldHVybiBudWxsIG9uIGZhaWx1cmVcbi8vL1xuLy8vIEByZXR1cm4ge2xpc3R9IC1cbi8vLyAgIFZhbGlkYXRlZCBgJGNvbHVtbnNgIGxpc3Rcbi8vL1xuLy8vIEB0aHJvd1xuLy8vICAgd2hlbiBjb2x1bW4gdmFsdWUgaXMgbm90IGEgdmFsaWQgbGlzdCBvZiBudW1iZXJzXG5AZnVuY3Rpb24gc3UtdmFsaWQtY29sdW1ucyhcbiAgJGNvbHVtbnMsXG4gICRzaWxlbnQtZmFpbHVyZTogZmFsc2Vcbikge1xuICBAaWYgKHR5cGUtb2YoJGNvbHVtbnMpID09ICdsaXN0Jykge1xuICAgICRmYWlsOiBmYWxzZTtcblxuICAgIEBlYWNoICRjb2wgaW4gJGNvbHVtbnMge1xuICAgICAgQGlmICh0eXBlLW9mKCRjb2wpICE9ICdudW1iZXInKSB7XG4gICAgICAgICRmYWlsOiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiBub3QgJGZhaWwge1xuICAgICAgQHJldHVybiAkY29sdW1ucztcbiAgICB9XG4gIH1cblxuICAvLyBTaWxlbnQgRmFpbHVyZVxuICBAaWYgJHNpbGVudC1mYWlsdXJlIHtcbiAgICBAcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBFcnJvciBNZXNzYWdlXG4gICRhY3R1YWw6ICdbI3t0eXBlLW9mKCRjb2x1bW5zKX1dIGAje2luc3BlY3QoJGNvbHVtbnMpfWAnO1xuXG4gIEByZXR1cm4gX3N1c3ktZXJyb3IoXG4gICAgJyN7JGFjdHVhbH0gaXMgbm90IGEgdmFsaWQgbGlzdCBvZiBudW1iZXJzIGZvciAkY29sdW1ucy4nLFxuICAgICdzdS12YWxpZC1jb2x1bW5zJyk7XG59XG5cblxuXG4vLyBWYWxpZCBHdXR0ZXJzXG4vLyAtLS0tLS0tLS0tLS0tXG4vLy8gQ2hlY2sgdGhhdCB0aGUgYGd1dHRlcnNgIGFyZ3VtZW50IGlzIGEgdmFsaWQgbnVtYmVyXG4vLy9cbi8vLyBAZ3JvdXAgX3ZhbGlkYXRpb25cbi8vL1xuLy8vIEBwYXJhbSB7bnVtYmVyfSAkZ3V0dGVycyAtXG4vLy8gICBXaWR0aCBvZiBhIGd1dHRlclxuLy8vXG4vLy8gQHJldHVybiB7bnVtYmVyfSAtXG4vLy8gICBWYWxpZGF0ZWQgYCRndXR0ZXJzYCBudW1iZXJcbi8vL1xuLy8vIEB0aHJvd1xuLy8vICAgd2hlbiBndXR0ZXIgdmFsdWUgaXMgbm90IGEgbnVtYmVyXG5AZnVuY3Rpb24gc3UtdmFsaWQtZ3V0dGVycyhcbiAgJGd1dHRlcnNcbikge1xuICAkdHlwZTogdHlwZS1vZigkZ3V0dGVycyk7XG5cbiAgQGlmICgkdHlwZSA9PSAnbnVtYmVyJykge1xuICAgIEByZXR1cm4gJGd1dHRlcnM7XG4gIH1cblxuICAkYWN0dWFsOiAnWyN7JHR5cGV9XSBgI3tpbnNwZWN0KCRndXR0ZXJzKX1gJztcbiAgQHJldHVybiBfc3VzeS1lcnJvcihcbiAgICAnI3skYWN0dWFsfSBpcyBub3QgYSBudW1iZXIgb3IgbGVuZ3RoIGZvciAkZ3V0dGVycy4nLFxuICAgICdzdS12YWxpZC1ndXR0ZXJzJyk7XG59XG5cblxuXG4vLyBWYWxpZCBTcHJlYWRcbi8vIC0tLS0tLS0tLS0tLVxuLy8vIENoZWNrIHRoYXQgdGhlIGBzcHJlYWRgIGFyZ3VtZW50IGlzIGEgdmFsaWRcbi8vLyBpbnRpZ2VyIGJldHdlZW4gYC0xYCBhbmQgYDFgXG4vLy9cbi8vLyBAZ3JvdXAgX3ZhbGlkYXRpb25cbi8vL1xuLy8vIEBwYXJhbSB7MCB8IDEgfCAtMX0gJHNwcmVhZCAtXG4vLy8gICBOdW1iZXIgb2YgZ3V0dGVycyB0byBpbmNsdWRlIGluIGEgc3Bhbixcbi8vLyAgIHJlbGF0aXZlIHRvIHRoZSBudW1iZXIgY29sdW1uc1xuLy8vXG4vLy8gQHJldHVybiB7MCB8IDEgfCAtMX0gLVxuLy8vICAgVmFsaWRhdGVkIGAkc3ByZWFkYCBudW1iZXJcbi8vL1xuLy8vIEB0aHJvd1xuLy8vICAgd2hlbiBzcHJlYWQgdmFsdWUgaXMgbm90IGEgdmFsaWQgc3ByZWFkXG5AZnVuY3Rpb24gc3UtdmFsaWQtc3ByZWFkKFxuICAkc3ByZWFkXG4pIHtcbiAgQGlmIGluZGV4KDAgMSAtMSwgJHNwcmVhZCkge1xuICAgIEByZXR1cm4gJHNwcmVhZDtcbiAgfVxuXG4gICRhY3R1YWw6ICdbI3t0eXBlLW9mKCRzcHJlYWQpfV0gYCN7aW5zcGVjdCgkc3ByZWFkKX1gJztcbiAgQHJldHVybiBfc3VzeS1lcnJvcihcbiAgICAnI3skYWN0dWFsfSBpcyBub3QgYSBub3JtYWxpemVkIFswIHwgMSB8IC0xXSB2YWx1ZSBmb3IgYCRzcHJlYWRgLicsXG4gICAgJ3N1LXZhbGlkLXNwcmVhZCcpO1xufVxuXG5cblxuLy8gVmFsaWQgTG9jYXRpb25cbi8vIC0tLS0tLS0tLS0tLS0tXG4vLy8gQ2hlY2sgdGhhdCB0aGUgYGxvY2F0aW9uYCBhcmd1bWVudCBpcyBhIHZhbGlkIG51bWJlcixcbi8vLyB3aXRoaW4gdGhlIHNjb3BlIG9mIGF2YWlsYWJsZSBjb2x1bW5zXG4vLy9cbi8vLyBAZ3JvdXAgX3ZhbGlkYXRpb25cbi8vL1xuLy8vIEBwYXJhbSB7bnVtYmVyfSAkc3BhbiAtXG4vLy8gICBOdW1iZXIgb2YgZ3JpZC1jb2x1bW5zIHRvIGJlIHNwYW5uZWRcbi8vLyBAcGFyYW0ge2ludGVnZXIgfCBzdHJpbmd9ICRsb2NhdGlvbiAtXG4vLy8gICBTdGFydGluZyAoMS1pbmRleGVkKSBjb2x1bW4tcG9zaXRpb24gb2YgdGhhdCBzcGFuXG4vLy8gQHBhcmFtIHtsaXN0fSAkY29sdW1ucyAtXG4vLy8gICBMaXN0IG9mIGF2YWlsYWJsZSBjb2x1bW5zIGluIHRoZSBncmlkXG4vLy9cbi8vLyBAcmV0dXJuIHtpbnRlZ2VyfSAtXG4vLy8gICBWYWxpZGF0ZWQgYCRsb2NhdGlvbmAgaW50aWdlclxuLy8vXG4vLy8gQHRocm93XG4vLy8gICB3aGVuIGxvY2F0aW9uIHZhbHVlIGlzIG5vdCBhIHZhbGlkIGluZGV4LFxuLy8vICAgZ2l2ZW4gdGhlIGNvbnRleHQgYW5kIHNwYW4uXG5AZnVuY3Rpb24gc3UtdmFsaWQtbG9jYXRpb24oXG4gICRzcGFuLFxuICAkbG9jYXRpb24sXG4gICRjb2x1bW5zXG4pIHtcbiAgJGNvdW50OiBsZW5ndGgoJGNvbHVtbnMpO1xuXG4gIEBpZiAkbG9jYXRpb24ge1xuICAgIEBpZiAodHlwZS1vZigkbG9jYXRpb24pICE9ICdudW1iZXInKSBvciAobm90IHVuaXRsZXNzKCRsb2NhdGlvbikpIHtcbiAgICAgICRhY3R1YWw6ICdbI3t0eXBlLW9mKCRsb2NhdGlvbil9XSBgI3skbG9jYXRpb259YCc7XG4gICAgICBAcmV0dXJuIF9zdXN5LWVycm9yKFxuICAgICAgICAnI3skYWN0dWFsfSBpcyBub3QgYSB1bml0bGVzcyBudW1iZXIgZm9yICRsb2NhdGlvbi4nLFxuICAgICAgICAnc3UtdmFsaWQtbG9jYXRpb24nKTtcbiAgICB9IEBlbHNlIGlmIChyb3VuZCgkbG9jYXRpb24pICE9ICRsb2NhdGlvbikge1xuICAgICAgQHJldHVybiBfc3VzeS1lcnJvcihcbiAgICAgICAgJ0xvY2F0aW9uIChgI3skbG9jYXRpb259YCkgbXVzdCBiZSBhIDEtaW5kZXhlZCBpbnRpZ2VyIHBvc2l0aW9uLicsXG4gICAgICAgICdzdS12YWxpZC1sb2NhdGlvbicpO1xuICAgIH0gQGVsc2UgaWYgKCRsb2NhdGlvbiA+ICRjb3VudCkgb3IgKCRsb2NhdGlvbiA8IDEpIHtcbiAgICAgIEByZXR1cm4gX3N1c3ktZXJyb3IoXG4gICAgICAgICdQb3NpdGlvbiBgI3skbG9jYXRpb259YCBkb2VzIG5vdCBleGlzdCBpbiBncmlkIGAjeyRjb2x1bW5zfWAuJyxcbiAgICAgICAgJ3N1LXZhbGlkLWxvY2F0aW9uJyk7XG4gICAgfSBAZWxzZSBpZiAoJGxvY2F0aW9uICsgJHNwYW4gLSAxID4gJGNvdW50KSB7XG4gICAgICAkZGV0YWlsczogJ2dyaWQgYCN7JGNvbHVtbnN9YCBmb3Igc3BhbiBgI3skc3Bhbn1gIGF0IGAjeyRsb2NhdGlvbn1gJztcbiAgICAgIEByZXR1cm4gX3N1c3ktZXJyb3IoXG4gICAgICAgICdUaGVyZSBhcmUgbm90IGVub3VnaCBjb2x1bW5zIGluICN7JGRldGFpbHN9LicsXG4gICAgICAgICdzdS12YWxpZC1sb2NhdGlvbicpO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGxvY2F0aW9uO1xufVxuIiwiLy8vIEdyaWQgTWF0aCBFbmdpbmVcbi8vLyA9PT09PT09PT09PT09PT09XG4vLy8gVGhlIGBzdWAgZnVuY3Rpb25zIGdpdmUgeW91IGRpcmVjdCBhY2Nlc3MgdG8gdGhlIG1hdGggbGF5ZXIsXG4vLy8gd2l0aG91dCBhbnkgc3ludGF4LXN1Z2FyIGxpa2Ugc2hvcnRoYW5kIHBhcnNpbmcsIGFuZCBub3JtYWxpemF0aW9uLlxuLy8vIElmIHlvdSBwcmVmZXIgbmFtZWQgYXJndW1lbnRzLCBhbmQgc3RyaXBwZWQtZG93biBzeW50YXgsXG4vLy8geW91IGNhbiB1c2UgdGhlc2UgZnVuY3Rpb25zIGRpcmVjdGx5IGluIHlvdXIgY29kZSDigJNcbi8vLyByZXBsYWNpbmcgYHNwYW5gLCBgZ3V0dGVyYCwgYW5kIGBzbGljZWAuXG4vLy9cbi8vLyBUaGVzZSBmdW5jdGlvbnMgYXJlIGFsc28gdXNlZnVsXG4vLy8gZm9yIGJ1aWxkaW5nIG1peGlucyBvciBvdGhlciBleHRlbnNpb25zIHRvIFN1c3kuXG4vLy8gQXBwbHkgdGhlIFN1c3kgc3ludGF4IHRvIG5ldyBtaXhpbnMgYW5kIGZ1bmN0aW9ucyxcbi8vLyB1c2luZyBvdXIgXCJQbHVnaW4gSGVscGVyc1wiLFxuLy8vIG9yIHdyaXRlIHlvdXIgb3duIHN5bnRheCBhbmQgcGFzcyB0aGUgbm9ybWFsaXplZCByZXN1bHRzIGFsb25nXG4vLy8gdG8gYHN1YCBmb3IgY29tcGlsYXRpb24uXG4vLy9cbi8vLyBAZ3JvdXAgc3UtbWF0aFxuLy8vXG4vLy8gQHNlZSBzdS1zcGFuXG4vLy8gQHNlZSBzdS1ndXR0ZXJcbi8vLyBAc2VlIHN1LXNsaWNlXG4vLy8gQGlnbm9yZSBfc3Utc3VtXG4vLy8gQGlnbm9yZSBfc3UtY2FsYy1zcGFuXG4vLy8gQGlnbm9yZSBfc3UtY2FsYy1zdW1cbi8vLyBAaWdub3JlIF9zdS1uZWVkcy1jYWxjLW91dHB1dFxuXG5cblxuLy8gU3UgU3BhblxuLy8gLS0tLS0tLVxuLy8vIENhbGN1bGF0ZXMgYW5kIHJldHVybnMgYSBDU1MtcmVhZHkgc3BhbiB3aWR0aCxcbi8vLyBiYXNlZCBvbiBub3JtYWxpemVkIHNwYW4gYW5kIGNvbnRleHQgZGF0YSDigJNcbi8vLyBhIGxvdy1sZXZlbCB2ZXJzaW9uIG9mIGBzdXN5LXNwYW5gLFxuLy8vIHdpdGggYWxsIG9mIHRoZSBsb2dpYyBhbmQgbm9uZSBvZiB0aGUgc3ludGF4IHN1Z2FyLlxuLy8vXG4vLy8gLSBHcmlkcyBkZWZpbmVkIHdpdGggdW5pdGxlc3MgbnVtYmVycyB3aWxsIHJldHVybiBgJWAgdmFsdWVzLlxuLy8vIC0gR3JpZHMgZGVmaW5lZCB3aXRoIGNvbXBhcmFibGUgdW5pdHNcbi8vLyAgIHdpbGwgcmV0dXJuIGEgdmFsdWUgaW4gdGhlIHVuaXRzIHByb3ZpZGVkLlxuLy8vIC0gR3JpZHMgZGVmaW5lZCB3aXRoIGEgbWl4IG9mIHVuaXRzLFxuLy8vICAgb3IgYSBjb21iaW5hdGlvbiBvZiB1bnRpbGVzcyBudW1iZXJzIGFuZCB1bml0LWxlbmd0aHMsXG4vLy8gICB3aWxsIHJldHVybiBhIGBjYWxjKClgIHN0cmluZy5cbi8vL1xuLy8vIEBncm91cCBzdS1tYXRoXG4vLy8gQHNlZSBzdXN5LXNwYW5cbi8vL1xuLy8vIEBwYXJhbSB7bnVtYmVyIHwgbGlzdH0gJHNwYW4gLVxuLy8vICAgTnVtYmVyIG9yIGxpc3Qgb2YgZ3JpZCBjb2x1bW5zIHRvIHNwYW5cbi8vLyBAcGFyYW0ge2xpc3R9ICRjb2x1bW5zIC1cbi8vLyAgIExpc3Qgb2YgY29sdW1ucyBhdmFpbGFibGVcbi8vLyBAcGFyYW0ge251bWJlcn0gJGd1dHRlcnMgLVxuLy8vICAgV2lkdGggb2YgYSBndXR0ZXIgaW4gY29sdW1uLWNvbXBhcmFibGUgdW5pdHNcbi8vLyBAcGFyYW0gezAgfCAxIHwgLTF9ICRzcHJlYWQgLVxuLy8vICAgTnVtYmVyIG9mIGd1dHRlcnMgc3Bhbm5lZCxcbi8vLyAgIHJlbGF0aXZlIHRvIGBzcGFuYCBjb3VudFxuLy8vIEBwYXJhbSB7MCB8IDEgfCAtMX0gJGNvbnRhaW5lci1zcHJlYWQgWyRzcHJlYWRdIC1cbi8vLyAgIE51bWJlciBvZiBndXR0ZXJzIHNwYW5uZWQsXG4vLy8gICByZWxhdGl2ZSB0byBgY29sdW1uc2AgY291bnRcbi8vLyBAcGFyYW0ge2ludGVnZXJ9ICRsb2NhdGlvbiBbMV0gLVxuLy8vICAgT3B0aW9uYWwgcG9zaXRpb24gb2Ygc3ViLXNwYW4gYW1vbmcgZnVsbCBzZXQgb2YgY29sdW1uc1xuLy8vXG4vLy8gQHJldHVybiB7bGVuZ3RofSAtXG4vLy8gICBSZWxhdGl2ZSBvciBzdGF0aWMgbGVuZ3RoIG9mIGEgc3BhbiBvbiB0aGUgZ3JpZFxuQGZ1bmN0aW9uIHN1LXNwYW4oXG4gICRzcGFuLFxuICAkY29sdW1ucyxcbiAgJGd1dHRlcnMsXG4gICRzcHJlYWQsXG4gICRjb250YWluZXItc3ByZWFkOiAkc3ByZWFkLFxuICAkbG9jYXRpb246IDFcbikge1xuICAkc3Bhbjogc3UtdmFsaWQtc3Bhbigkc3Bhbik7XG4gICRjb2x1bW5zOiBzdS12YWxpZC1jb2x1bW5zKCRjb2x1bW5zKTtcbiAgJGd1dHRlcnM6IHN1LXZhbGlkLWd1dHRlcnMoJGd1dHRlcnMpO1xuICAkc3ByZWFkOiBzdS12YWxpZC1zcHJlYWQoJHNwcmVhZCk7XG5cbiAgQGlmICh0eXBlLW9mKCRzcGFuKSA9PSAnbnVtYmVyJykge1xuICAgIEBpZiAobm90IHVuaXRsZXNzKCRzcGFuKSkge1xuICAgICAgQHJldHVybiAkc3BhbjtcbiAgICB9XG5cbiAgICAkbG9jYXRpb246IHN1LXZhbGlkLWxvY2F0aW9uKCRzcGFuLCAkbG9jYXRpb24sICRjb2x1bW5zKTtcbiAgICAkc3Bhbjogc3Utc2xpY2UoJHNwYW4sICRjb2x1bW5zLCAkbG9jYXRpb24sICR2YWxpZGF0ZTogZmFsc2UpO1xuICB9XG5cbiAgQGlmIF9zdS1uZWVkcy1jYWxjLW91dHB1dCgkc3BhbiwgJGNvbHVtbnMsICRndXR0ZXJzLCAkc3ByZWFkLCBub3QgJ3ZhbGlkYXRlJykge1xuICAgIEByZXR1cm4gX3N1LWNhbGMtc3Bhbigkc3BhbiwgJGNvbHVtbnMsICRndXR0ZXJzLCAkc3ByZWFkLCAkY29udGFpbmVyLXNwcmVhZCwgbm90ICd2YWxpZGF0ZScpO1xuICB9XG5cbiAgJHNwYW4td2lkdGg6IF9zdS1zdW0oJHNwYW4sICRndXR0ZXJzLCAkc3ByZWFkLCAkdmFsaWRhdGU6IGZhbHNlKTtcblxuICBAaWYgdW5pdGxlc3MoJHNwYW4td2lkdGgpIHtcbiAgICAkY29udGFpbmVyLXNwcmVhZDogc3UtdmFsaWQtc3ByZWFkKCRjb250YWluZXItc3ByZWFkKTtcbiAgICAkY29udGFpbmVyOiBfc3Utc3VtKCRjb2x1bW5zLCAkZ3V0dGVycywgJGNvbnRhaW5lci1zcHJlYWQsICR2YWxpZGF0ZTogZmFsc2UpO1xuICAgIEByZXR1cm4gcGVyY2VudGFnZSgkc3Bhbi13aWR0aCAvICRjb250YWluZXIpO1xuICB9XG5cbiAgQHJldHVybiAkc3Bhbi13aWR0aDtcbn1cblxuXG5cbi8vIFN1IEd1dHRlclxuLy8gLS0tLS0tLS0tXG4vLy8gQ2FsY3VsYXRlcyBhbmQgcmV0dXJucyBhIENTUy1yZWFkeSBndXR0ZXIgd2lkdGgsXG4vLy8gYmFzZWQgb24gbm9ybWFsaXplZCBncmlkIGRhdGEg4oCTXG4vLy8gYSBsb3ctbGV2ZWwgdmVyc2lvbiBvZiBgc3VzeS1ndXR0ZXJgLFxuLy8vIHdpdGggYWxsIG9mIHRoZSBsb2dpYyBhbmQgbm9uZSBvZiB0aGUgc3ludGF4IHN1Z2FyLlxuLy8vXG4vLy8gLSBHcmlkcyBkZWZpbmVkIHdpdGggdW5pdGxlc3MgbnVtYmVycyB3aWxsIHJldHVybiBgJWAgdmFsdWVzLlxuLy8vIC0gR3JpZHMgZGVmaW5lZCB3aXRoIGNvbXBhcmFibGUgdW5pdHNcbi8vLyAgIHdpbGwgcmV0dXJuIGEgdmFsdWUgaW4gdGhlIHVuaXRzIHByb3ZpZGVkLlxuLy8vIC0gR3JpZHMgZGVmaW5lZCB3aXRoIGEgbWl4IG9mIHVuaXRzLFxuLy8vICAgb3IgYSBjb21iaW5hdGlvbiBvZiB1bnRpbGVzcyBudW1iZXJzIGFuZCB1bml0LWxlbmd0aHMsXG4vLy8gICB3aWxsIHJldHVybiBhIGBjYWxjKClgIHN0cmluZy5cbi8vL1xuLy8vIEBncm91cCBzdS1tYXRoXG4vLy8gQHNlZSBzdXN5LWd1dHRlclxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0fSAkY29sdW1ucyAtXG4vLy8gICBMaXN0IG9mIGNvbHVtbnMgaW4gdGhlIGdyaWRcbi8vLyBAcGFyYW0ge251bWJlcn0gJGd1dHRlcnMgLVxuLy8vICAgV2lkdGggb2YgYSBndXR0ZXIgaW4gY29sdW1uLWNvbXBhcmFibGUgdW5pdHNcbi8vLyBAcGFyYW0gezAgfCAxIHwgLTF9ICRjb250YWluZXItc3ByZWFkIC1cbi8vLyAgIE51bWJlciBvZiBndXR0ZXJzIHNwYW5uZWQsXG4vLy8gICByZWxhdGl2ZSB0byBgY29sdW1uc2AgY291bnRcbi8vL1xuLy8vIEByZXR1cm4ge2xlbmd0aH0gLVxuLy8vICAgUmVsYXRpdmUgb3Igc3RhdGljIGxlbmd0aCBvZiBvbmUgZ3V0dGVyIGluIGEgZ3JpZFxuQGZ1bmN0aW9uIHN1LWd1dHRlcihcbiAgJGNvbHVtbnMsXG4gICRndXR0ZXJzLFxuICAkY29udGFpbmVyLXNwcmVhZFxuKSB7XG4gIEBpZiAodHlwZS1vZigkZ3V0dGVycykgPT0gJ251bWJlcicpIHtcbiAgICBAaWYgKCRndXR0ZXJzID09IDApIG9yIChub3QgdW5pdGxlc3MoJGd1dHRlcnMpKSB7XG4gICAgICBAcmV0dXJuICRndXR0ZXJzO1xuICAgIH1cbiAgfVxuXG4gIEBpZiBfc3UtbmVlZHMtY2FsYy1vdXRwdXQoJGd1dHRlcnMsICRjb2x1bW5zLCAkZ3V0dGVycywgLTEsIG5vdCAndmFsaWRhdGUnKSB7XG4gICAgQHJldHVybiBfc3UtY2FsYy1zcGFuKCRndXR0ZXJzLCAkY29sdW1ucywgJGd1dHRlcnMsIC0xLCAkY29udGFpbmVyLXNwcmVhZCwgbm90ICd2YWxpZGF0ZScpO1xuICB9XG5cbiAgJGNvbnRhaW5lcjogX3N1LXN1bSgkY29sdW1ucywgJGd1dHRlcnMsICRjb250YWluZXItc3ByZWFkKTtcbiAgQHJldHVybiBwZXJjZW50YWdlKCRndXR0ZXJzIC8gJGNvbnRhaW5lcik7XG59XG5cblxuXG4vLyBTdSBTbGljZVxuLy8gLS0tLS0tLS1cbi8vLyBSZXR1cm5zIGEgbGlzdCBvZiBjb2x1bW5zXG4vLy8gYmFzZWQgb24gYSBnaXZlbiBzcGFuL2xvY2F0aW9uIHNsaWNlIG9mIHRoZSBncmlkIOKAk1xuLy8vIGEgbG93LWxldmVsIHZlcnNpb24gb2YgYHN1c3ktc2xpY2VgLFxuLy8vIHdpdGggYWxsIG9mIHRoZSBsb2dpYyBhbmQgbm9uZSBvZiB0aGUgc3ludGF4IHN1Z2FyLlxuLy8vXG4vLy8gQGdyb3VwIHN1LW1hdGhcbi8vLyBAc2VlIHN1c3ktc2xpY2Vcbi8vL1xuLy8vIEBwYXJhbSB7bnVtYmVyfSAkc3BhbiAtXG4vLy8gICBOdW1iZXIgb2YgZ3JpZCBjb2x1bW5zIHRvIHNwYW5cbi8vLyBAcGFyYW0ge2xpc3R9ICRjb2x1bW5zIC1cbi8vLyAgIExpc3Qgb2YgY29sdW1ucyBpbiB0aGUgZ3JpZFxuLy8vIEBwYXJhbSB7bnVtYmVyfSAkbG9jYXRpb24gWzFdIC1cbi8vLyAgIFN0YXJ0aW5nIGluZGV4IG9mIGEgc3BhbiBpbiB0aGUgbGlzdCBvZiBjb2x1bW5zXG4vLy8gQHBhcmFtIHtib29sfSAkdmFsaWRhdGUgW3RydWVdIC1cbi8vLyAgIENoZWNrIHRoYXQgYXJndW1lbnRzIGFyZSB2YWxpZCBiZWZvcmUgcHJvY2VlZGluZ1xuLy8vXG4vLy8gQHJldHVybiB7bGlzdH0gLVxuLy8vICAgU3Vic2V0IGxpc3Qgb2YgZ3JpZCBjb2x1bW5zLCBiYXNlZCBvbiBzcGFuIGFuZCBsb2NhdGlvblxuQGZ1bmN0aW9uIHN1LXNsaWNlKFxuICAkc3BhbixcbiAgJGNvbHVtbnMsXG4gICRsb2NhdGlvbjogMSxcbiAgJHZhbGlkYXRlOiB0cnVlXG4pIHtcbiAgQGlmICR2YWxpZGF0ZSB7XG4gICAgJGNvbHVtbnM6IHN1LXZhbGlkLWNvbHVtbnMoJGNvbHVtbnMpO1xuICAgICRsb2NhdGlvbjogc3UtdmFsaWQtbG9jYXRpb24oJHNwYW4sICRsb2NhdGlvbiwgJGNvbHVtbnMpO1xuICB9XG5cbiAgJGZsb29yOiBmbG9vcigkc3Bhbik7XG4gICRzdWItY29sdW1uczogKCk7XG5cbiAgQGZvciAkaSBmcm9tICRsb2NhdGlvbiB0byAoJGxvY2F0aW9uICsgJGZsb29yKSB7XG4gICAgJHN1Yi1jb2x1bW5zOiBhcHBlbmQoJHN1Yi1jb2x1bW5zLCBudGgoJGNvbHVtbnMsICRpKSk7XG4gIH1cblxuICBAaWYgJGZsb29yICE9ICRzcGFuIHtcbiAgICAkcmVtYWluZGVyOiAkc3BhbiAtICRmbG9vcjtcbiAgICAkY29sdW1uOiAkbG9jYXRpb24gKyAkZmxvb3I7XG4gICAgJHN1Yi1jb2x1bW5zOiBhcHBlbmQoJHN1Yi1jb2x1bW5zLCBudGgoJGNvbHVtbnMsICRjb2x1bW4pICogJHJlbWFpbmRlcik7XG4gIH1cblxuICBAcmV0dXJuICRzdWItY29sdW1ucztcbn1cblxuXG5cbi8vIFN1IFN1bVxuLy8gLS0tLS0tXG4vLy8gR2V0IHRoZSB0b3RhbCBzdW0gb2YgY29sdW1uLXVuaXRzIGluIGEgbGF5b3V0LlxuLy8vXG4vLy8gQGdyb3VwIHN1LW1hdGhcbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vL1xuLy8vIEBwYXJhbSB7bGlzdH0gJGNvbHVtbnMgLVxuLy8vICAgTGlzdCBvZiBjb2x1bW5zIGluIHRoZSBncmlkXG4vLy8gQHBhcmFtIHtudW1iZXJ9ICRndXR0ZXJzIC1cbi8vLyAgIFdpZHRoIG9mIGEgZ3V0dGVyIGluIGNvbHVtbi1jb21wYXJhYmxlIHVuaXRzXG4vLy8gQHBhcmFtIHswIHwgMSB8IC0xfSAkc3ByZWFkIC1cbi8vLyAgIE51bWJlciBvZiBndXR0ZXJzIHNwYW5uZWQsXG4vLy8gICByZWxhdGl2ZSB0byBgY29sdW1uc2AgY291bnRcbi8vLyBAcGFyYW0ge2Jvb2x9ICR2YWxpZGF0ZSBbdHJ1ZV0gLVxuLy8vICAgQ2hlY2sgdGhhdCBhcmd1bWVudHMgYXJlIHZhbGlkIGJlZm9yZSBwcm9jZWVkaW5nXG4vLy9cbi8vLyBAcmV0dXJuIHtudW1iZXJ9IC1cbi8vLyAgIFRvdGFsIHN1bSBvZiBjb2x1bW4tdW5pdHMgaW4gYSBncmlkXG5AZnVuY3Rpb24gX3N1LXN1bShcbiAgJGNvbHVtbnMsXG4gICRndXR0ZXJzLFxuICAkc3ByZWFkLFxuICAkdmFsaWRhdGU6IHRydWVcbikge1xuICBAaWYgJHZhbGlkYXRlIHtcbiAgICAkY29sdW1uczogc3UtdmFsaWQtc3BhbigkY29sdW1ucyk7XG4gICAgJGd1dHRlcnM6IHN1LXZhbGlkLWd1dHRlcnMoJGd1dHRlcnMpO1xuICAgICRzcHJlYWQ6IHN1LXZhbGlkLXNwcmVhZCgkc3ByZWFkKTtcbiAgfVxuXG4gIC8vIENhbGN1bGF0ZSBjb2x1bW4tc3VtXG4gICRjb2x1bW4tc3VtOiAwO1xuICBAZWFjaCAkY29sdW1uIGluICRjb2x1bW5zIHtcbiAgICAkY29sdW1uLXN1bTogJGNvbHVtbi1zdW0gKyAkY29sdW1uO1xuICB9XG5cbiAgJGd1dHRlci1zdW06IChjZWlsKGxlbmd0aCgkY29sdW1ucykpICsgJHNwcmVhZCkgKiAkZ3V0dGVycztcbiAgJHRvdGFsOiBpZigoJGd1dHRlci1zdW0gPiAwKSwgJGNvbHVtbi1zdW0gKyAkZ3V0dGVyLXN1bSwgJGNvbHVtbi1zdW0pO1xuXG4gIEByZXR1cm4gJHRvdGFsO1xufVxuXG5cblxuLy8gU3UgQ2FsY1xuLy8gLS0tLS0tLVxuLy8vIFJldHVybiBhIHVzYWJsZSBzcGFuIHdpZHRoIGFzIGEgYGNhbGMoKWAgZnVuY3Rpb24sXG4vLy8gaW4gb3JkZXIgdG8gY3JlYXRlIG1peGVkLXVuaXQgZ3JpZHMuXG4vLy9cbi8vLyBAZ3JvdXAgc3UtbWF0aFxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtudW1iZXIgfCBsaXN0fSAkc3BhbiAtXG4vLy8gICBQcmUtc2xpY2VkIGxpc3Qgb2YgZ3JpZCBjb2x1bW5zIHRvIHNwYW5cbi8vLyBAcGFyYW0ge2xpc3R9ICRjb2x1bW5zIC1cbi8vLyAgIExpc3Qgb2YgY29sdW1ucyBhdmFpbGFibGVcbi8vLyBAcGFyYW0ge251bWJlcn0gJGd1dHRlcnMgLVxuLy8vICAgV2lkdGggb2YgYSBndXR0ZXIgaW4gY29sdW1uLWNvbXBhcmFibGUgdW5pdHNcbi8vLyBAcGFyYW0gezAgfCAxIHwgLTF9ICRzcHJlYWQgLVxuLy8vICAgTnVtYmVyIG9mIGd1dHRlcnMgc3Bhbm5lZCxcbi8vLyAgIHJlbGF0aXZlIHRvIGBzcGFuYCBjb3VudFxuLy8vIEBwYXJhbSB7MCB8IDEgfCAtMX0gJGNvbnRhaW5lci1zcHJlYWQgWyRzcHJlYWRdIC1cbi8vLyAgIE51bWJlciBvZiBndXR0ZXJzIHNwYW5uZWQsXG4vLy8gICByZWxhdGl2ZSB0byBgY29sdW1uc2AgY291bnRcbi8vLyBAcGFyYW0ge2Jvb2x9ICR2YWxpZGF0ZSBbdHJ1ZV0gLVxuLy8vICAgQ2hlY2sgdGhhdCBhcmd1bWVudHMgYXJlIHZhbGlkIGJlZm9yZSBwcm9jZWVkaW5nXG4vLy9cbi8vLyBAcmV0dXJuIHtsZW5ndGh9IC1cbi8vLyAgIFJlbGF0aXZlIG9yIHN0YXRpYyBsZW5ndGggb2YgYSBzcGFuIG9uIHRoZSBncmlkXG5AZnVuY3Rpb24gX3N1LWNhbGMtc3BhbihcbiAgJHNwYW4sXG4gICRjb2x1bW5zLFxuICAkZ3V0dGVycyxcbiAgJHNwcmVhZCxcbiAgJGNvbnRhaW5lci1zcHJlYWQ6ICRzcHJlYWQsXG4gICR2YWxpZGF0ZTogdHJ1ZVxuKSB7XG4gIEBpZiAkdmFsaWRhdGUge1xuICAgICRzcGFuOiBzdS12YWxpZC1zcGFuKCRzcGFuKTtcbiAgICAkY29sdW1uczogc3UtdmFsaWQtY29sdW1ucygkY29sdW1ucyk7XG4gICAgJGd1dHRlcnM6IHN1LXZhbGlkLWd1dHRlcnMoJGd1dHRlcnMpO1xuICAgICRzcHJlYWQ6IHN1LXZhbGlkLXNwcmVhZCgkc3ByZWFkKTtcbiAgICAkY29udGFpbmVyLXNwcmVhZDogc3UtdmFsaWQtc3ByZWFkKCRjb250YWluZXItc3ByZWFkKTtcbiAgfVxuXG4gIC8vIFNwYW4gYW5kIGNvbnRleHRcbiAgJHNwYW46IF9zdS1jYWxjLXN1bSgkc3BhbiwgJGd1dHRlcnMsICRzcHJlYWQsIG5vdCAndmFsaWRhdGUnKTtcbiAgJGNvbnRleHQ6IF9zdS1jYWxjLXN1bSgkY29sdW1ucywgJGd1dHRlcnMsICRjb250YWluZXItc3ByZWFkLCBub3QgJ3ZhbGlkYXRlJyk7XG5cbiAgLy8gRml4ZWQgYW5kIGZsdWlkXG4gICRmaXhlZC1zcGFuOiBtYXAtZ2V0KCRzcGFuLCAnZml4ZWQnKTtcbiAgJGZsdWlkLXNwYW46IG1hcC1nZXQoJHNwYW4sICdmbHVpZCcpO1xuICAkZml4ZWQtY29udGV4dDogbWFwLWdldCgkY29udGV4dCwgJ2ZpeGVkJyk7XG4gICRmbHVpZC1jb250ZXh0OiBtYXAtZ2V0KCRjb250ZXh0LCAnZmx1aWQnKTtcblxuICAkY2FsYzogJyN7JGZpeGVkLXNwYW59JztcbiAgJGZsdWlkLWNhbGM6ICcoMTAwJSAtICN7JGZpeGVkLWNvbnRleHR9KSc7XG5cbiAgLy8gRmx1aWQtdmFsdWVzXG4gIEBpZiAobm90ICRmbHVpZC1zcGFuKSB7XG4gICAgJGZsdWlkLWNhbGM6IG51bGw7XG4gIH0gQGVsc2UgaWYgKCRmbHVpZC1zcGFuICE9ICRmbHVpZC1jb250ZXh0KSB7XG4gICAgJGZsdWlkLXNwYW46ICcqICN7JGZsdWlkLXNwYW59JztcbiAgICAkZmx1aWQtY29udGV4dDogaWYoJGZsdWlkLWNvbnRleHQsICcvICN7JGZsdWlkLWNvbnRleHR9JywgJycpO1xuICAgICRmbHVpZC1jYWxjOiAnKCN7JGZsdWlkLWNhbGMgJGZsdWlkLWNvbnRleHQgJGZsdWlkLXNwYW59KSc7XG4gIH1cblxuICBAaWYgJGZsdWlkLWNhbGMge1xuICAgICRjYWxjOiBpZigoJGNhbGMgIT0gJycpLCAnI3skY2FsY30gKyAnLCAnJyk7XG4gICAgJGNhbGM6ICcjeyRjYWxjICsgJGZsdWlkLWNhbGN9JztcbiAgfVxuXG4gIEByZXR1cm4gY2FsYygje3VucXVvdGUoJGNhbGMpfSk7XG59XG5cblxuXG4vLyBTdSBDYWxjLVN1bVxuLy8gLS0tLS0tLS0tLS1cbi8vLyBHZXQgdGhlIHRvdGFsIHN1bSBvZiBmaXhlZCBhbmQgZmx1aWQgY29sdW1uLXVuaXRzXG4vLy8gZm9yIGNyZWF0aW5nIGEgbWl4ZWQtdW5pdCBsYXlvdXQgd2l0aCBgY2FsYygpYCB2YWx1ZXMuXG4vLy9cbi8vLyBAZ3JvdXAgc3UtbWF0aFxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0fSAkY29sdW1ucyAtXG4vLy8gICBMaXN0IG9mIGNvbHVtbnMgYXZhaWxhYmxlXG4vLy8gQHBhcmFtIHtudW1iZXJ9ICRndXR0ZXJzIC1cbi8vLyAgIFdpZHRoIG9mIGEgZ3V0dGVyIGluIGNvbHVtbi1jb21wYXJhYmxlIHVuaXRzXG4vLy8gQHBhcmFtIHswIHwgMSB8IC0xfSAkc3ByZWFkIC1cbi8vLyAgIE51bWJlciBvZiBndXR0ZXJzIHNwYW5uZWQsXG4vLy8gICByZWxhdGl2ZSB0byBgc3BhbmAgY291bnRcbi8vLyBAcGFyYW0ge2Jvb2x9ICR2YWxpZGF0ZSBbdHJ1ZV0gLVxuLy8vICAgQ2hlY2sgdGhhdCBhcmd1bWVudHMgYXJlIHZhbGlkIGJlZm9yZSBwcm9jZWVkaW5nXG4vLy9cbi8vLyBAcmV0dXJuIHttYXB9IC1cbi8vLyAgIE1hcCB3aXRoIGBmaXhlZGAgYW5kIGBmbHVpZGAga2V5c1xuLy8vICAgY29udGFpbmluZyB0aGUgcHJvcGVyIG1hdGggYXMgc3RyaW5nc1xuQGZ1bmN0aW9uIF9zdS1jYWxjLXN1bShcbiAgJGNvbHVtbnMsXG4gICRndXR0ZXJzLFxuICAkc3ByZWFkLFxuICAkdmFsaWRhdGU6IHRydWVcbikge1xuICBAaWYgJHZhbGlkYXRlIHtcbiAgICAkY29sdW1uczogc3UtdmFsaWQtc3BhbigkY29sdW1ucyk7XG4gICAgJGd1dHRlcnM6IHN1LXZhbGlkLWd1dHRlcnMoJGd1dHRlcnMpO1xuICAgICRzcHJlYWQ6IHN1LXZhbGlkLXNwcmVhZCgkc3ByZWFkKTtcbiAgfVxuXG4gICRmbHVpZDogMDtcbiAgJGZpeGVkOiAoKTtcbiAgJGNhbGM6IG51bGw7XG5cbiAgLy8gR3V0dGVyc1xuICAkZ3V0dGVyczogICRndXR0ZXJzICogKGxlbmd0aCgkY29sdW1ucykgKyAkc3ByZWFkKTtcblxuICAvLyBDb2x1bW5zXG4gIEBlYWNoICRjb2wgaW4gYXBwZW5kKCRjb2x1bW5zLCAkZ3V0dGVycykge1xuICAgIEBpZiB1bml0bGVzcygkY29sKSB7XG4gICAgICAkZmx1aWQ6ICRmbHVpZCArICRjb2w7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkZml4ZWQ6IF9zdS1tYXAtYWRkLXVuaXRzKCRmaXhlZCwgJGNvbCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ29tcGlsZSBGaXhlZCBVbml0c1xuICBAZWFjaCAkdW5pdCwgJHRvdGFsIGluICRmaXhlZCB7XG4gICAgQGlmICgkdG90YWwgIT0gKDAgKiAkdG90YWwpKSB7XG4gICAgICAkY2FsYzogaWYoJGNhbGMsICcjeyRjYWxjfSArICN7JHRvdGFsfScsICcjeyR0b3RhbH0nKTtcbiAgICB9XG4gIH1cblxuICAvLyBDYWxjIG51bGwgb3Igc3RyaW5nXG4gIEBpZiAkY2FsYyB7XG4gICAgJGNhbGM6IGlmKHN0ci1pbmRleCgkY2FsYywgJysnKSwgJygjeyRjYWxjfSknLCAnI3skY2FsY30nKTtcbiAgfVxuXG4gIC8vIEZsdWlkIDAgPT4gbnVsbFxuICAkZmx1aWQ6IGlmKCgkZmx1aWQgPT0gMCksIG51bGwsICRmbHVpZCk7XG5cblxuICAvLyBSZXR1cm4gbWFwXG4gICRyZXR1cm46IChcbiAgICAnZml4ZWQnOiAkY2FsYyxcbiAgICAnZmx1aWQnOiAkZmx1aWQsXG4gICk7XG5cbiAgQHJldHVybiAkcmV0dXJuO1xufVxuXG5cblxuLy8gTmVlZHMgQ2FsY1xuLy8gLS0tLS0tLS0tLVxuLy8vIENoZWNrIGlmIGBjYWxjKClgIHdpbGwgYmUgbmVlZGVkIGluIGRlZmluaW5nIGEgc3Bhbixcbi8vLyBpZiB0aGUgbmVjZXNzYXJ5IHVuaXRzIGluIGEgZ3JpZCBhcmUgbm90IGNvbXBhcmFibGUuXG4vLy9cbi8vLyBAZ3JvdXAgc3UtbWF0aFxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0fSAkc3BhbiAtXG4vLy8gICBTbGljZSBvZiBjb2x1bW5zIHRvIHNwYW5cbi8vLyBAcGFyYW0ge2xpc3R9ICRjb2x1bW5zIC1cbi8vLyAgIExpc3Qgb2YgYXZhaWxhYmxlIGNvbHVtbnMgaW4gdGhlIGdyaWRcbi8vLyBAcGFyYW0ge251bWJlcn0gJGd1dHRlcnMgLVxuLy8vICAgV2lkdGggb2YgYSBndXR0ZXJcbi8vLyBAcGFyYW0gezAgfCAxIHwgLTF9ICRzcHJlYWQgLVxuLy8vICAgTnVtYmVyIG9mIGd1dHRlcnMgc3Bhbm5lZCxcbi8vLyAgIHJlbGF0aXZlIHRvIGBzcGFuYCBjb3VudFxuLy8vIEBwYXJhbSB7Ym9vbH0gJHZhbGlkYXRlIFt0cnVlXSAtXG4vLy8gICBDaGVjayB0aGF0IGFyZ3VtZW50cyBhcmUgdmFsaWQgYmVmb3JlIHByb2NlZWRpbmdcbi8vL1xuLy8vIEByZXR1cm4ge2Jvb2x9IC1cbi8vLyAgIGBUcnVlYCB3aGVuIHVuaXRzIGRvIG5vdCBtYXRjaCwgYW5kIGBjYWxjKClgIHdpbGwgYmUgcmVxdWlyZWRcbkBmdW5jdGlvbiBfc3UtbmVlZHMtY2FsYy1vdXRwdXQoXG4gICRzcGFuLFxuICAkY29sdW1ucyxcbiAgJGd1dHRlcnMsXG4gICRzcHJlYWQsXG4gICR2YWxpZGF0ZTogdHJ1ZVxuKSB7XG4gIEBpZiAkdmFsaWRhdGUge1xuICAgICRzcGFuOiBzdS12YWxpZC1zcGFuKCRzcGFuKTtcbiAgICAkY29sdW1uczogc3UtdmFsaWQtY29sdW1ucygkY29sdW1ucyk7XG4gICAgJGd1dHRlcnM6IHN1LXZhbGlkLWd1dHRlcnMoJGd1dHRlcnMpO1xuICB9XG5cbiAgJGhhcy1ndXR0ZXI6IGlmKChsZW5ndGgoJHNwYW4pID4gMSkgb3IgKCRzcHJlYWQgPj0gMCksIHRydWUsIGZhbHNlKTtcbiAgJGNoZWNrOiBpZigkaGFzLWd1dHRlciwgYXBwZW5kKCRzcGFuLCAkZ3V0dGVycyksICRzcGFuKTtcbiAgJHNhZmUtc3BhbjogX3N1LWlzLWNvbXBhcmFibGUoJGNoZWNrLi4uKTtcblxuICBAaWYgKCRzYWZlLXNwYW4gPT0gJ3N0YXRpYycpIHtcbiAgICBAcmV0dXJuIGZhbHNlO1xuICB9IEBlbHNlIGlmIChub3QgJHNhZmUtc3Bhbikge1xuICAgIEByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gICRzYWZlLWZsdWlkOiBfc3UtaXMtY29tcGFyYWJsZSgkZ3V0dGVycywgJGNvbHVtbnMuLi4pO1xuXG4gIEByZXR1cm4gbm90ICRzYWZlLWZsdWlkO1xufVxuIiwiLy8vIFN1c3kzIENvbmZpZ3VyYXRpb25cbi8vLyA9PT09PT09PT09PT09PT09PT09XG4vLy8gU3VzeTMgaGFzIDQgY29yZSBzZXR0aW5ncywgaW4gYSBzaW5nbGUgc2V0dGluZ3MgbWFwLlxuLy8vIFlvdSdsbCBub3RpY2UgYSBmZXcgZGlmZmVyZW5jZXMgZnJvbSBTdXN5Mjpcbi8vL1xuLy8vICoqQ29sdW1ucyoqIG5vIGxvbmdlciBhY2NlcHQgYSBzaW5nbGUgbnVtYmVyLCBsaWtlIGAxMmAsXG4vLy8gYnV0IHVzZSBhIHN5bnRheCBtb3JlIHNpbWlsYXIgdG8gdGhlIG5ld1xuLy8vIENTUyBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXVtjb2x1bW5zXSDigJNcbi8vLyBhIGxpc3Qgb2YgcmVsYXRpdmUgc2l6ZXMgZm9yIGVhY2ggY29sdW1uIG9uIHRoZSBncmlkLlxuLy8vIFVuaXRsZXNzIG51bWJlcnMgaW4gU3VzeSBhY3QgdmVyeSBzaW1pbGFyIHRvIGBmcmAgdW5pdHMgaW4gQ1NTLFxuLy8vIGFuZCB0aGUgYHN1c3ktcmVwZWF0KClgIGZ1bmN0aW9uIChzaW1pbGFyIHRvIHRoZSBjc3MgYHJlcGVhdCgpYClcbi8vLyBoZWxwcyBxdWlja2x5IGVzdGFibGlzaCBlcXVhbC13aWR0aCBjb2x1bW5zLlxuLy8vXG4vLy8gW2NvbHVtbnNdOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXG4vLy9cbi8vLyAtIGBzdXN5LXJlcGVhdCgxMilgIHdpbGwgY3JlYXRlIDEyIGZsdWlkLCBlcXVhbC13aWR0aCBjb2x1bW5zXG4vLy8gLSBgc3VzeS1yZXBlYXQoNiwgMTIwcHgpYCB3aWxsIGNyZWF0ZSA2IGVxdWFsIGAxMjBweGAtd2lkZSBjb2x1bW5zXG4vLy8gLSBgMTIwcHggc3VzeS1yZXBlYXQoNCkgMTIwcHhgIHdpbGwgY3JlYXRlIDYgY29sdW1ucyxcbi8vLyAgIHRoZSBmaXJzdCBhbmQgbGFzdCBhcmUgYDEyMHB4YCxcbi8vLyAgIHdoaWxlIHRoZSBtaWRkbGUgNCBhcmUgZXF1YWwgZnJhY3Rpb25zIG9mIHRoZSByZW1haW5kZXIuXG4vLy8gICBTdXN5IHdpbGwgb3V0cHV0IGBjYWxjKClgIHZhbHVlcyBpbiBvcmRlciB0byBhY2hpZXZlIHRoaXMuXG4vLy9cbi8vLyAqKkd1dHRlcnMqKiBoYXZlbid0IGNoYW5nZWQg4oCTXG4vLy8gYSBzaW5nbGUgZnJhY3Rpb24gb3IgZXhwbGljaXQgd2lkdGgg4oCTXG4vLy8gYnV0IHRoZSBgY2FsYygpYCBvdXRwdXQgZmVhdHVyZVxuLy8vIG1lYW5zIHlvdSBjYW4gbm93IHVzZSBhbnkgY29tYmluYXRpb24gb2YgdW5pdHMgYW5kIGZyYWN0aW9uc1xuLy8vIHRvIGNyZWF0ZSBzdGF0aWMtZ3V0dGVycyBvbiBhIGZsdWlkIGdyaWQsIGV0Yy5cbi8vL1xuLy8vICoqU3ByZWFkKiogZXhpc3RlZCBpbiB0aGUgU3VzeTIgQVBJIGFzIGEgc3BhbiBvcHRpb24sXG4vLy8gYW5kIHdhcyBvdGhlcndpc2UgaGFuZGxlZCBiZWhpbmQgdGhlIHNjZW5lcy5cbi8vLyBOb3cgd2UncmUgZ2l2aW5nIHlvdSBmdWxsIGNvbnRyb2wgb3ZlciBhbGwgc3ByZWFkIGlzc3Vlcy5cbi8vLyBZb3UgY2FuIGZpbmQgYSBtb3JlIFtkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiBzcHJlYWQgb24gdGhlIGJsb2ddW3NwcmVhZF0uXG4vLy9cbi8vLyBbc3ByZWFkXTogaHR0cDovL29kZGJpcmQubmV0LzIwMTcvMDYvMTMvc3VzeS1zcHJlYWQvXG4vLy9cbi8vLyBZb3UgY2FuIGFjY2VzcyB5b3VyIGdsb2JhbCBzZXR0aW5ncyBhdCBhbnkgdGltZVxuLy8vIHdpdGggdGhlIGBzdXN5LXNldHRpbmdzKClgIGZ1bmN0aW9uLFxuLy8vIG9yIGdyYWIgYSBzaW5nbGUgc2V0dGluZyBmcm9tIHRoZSBnbG9iYWwgc2NvcGVcbi8vLyB3aXRoIGBzdXN5LWdldCgnY29sdW1ucycpYCwgYHN1c3ktZ2V0KCdndXR0ZXJzJylgIGV0Yy5cbi8vL1xuLy8vIEBncm91cCBjb25maWdcbi8vLyBAbGluayBodHRwOi8vb2RkYmlyZC5uZXQvMjAxNy8wNi8xMy9zdXN5LXNwcmVhZC9cbi8vLyAgIEFydGljbGU6IFVuZGVyc3RhbmRpbmcgU3ByZWFkIGluIFN1c3kzXG4vLy9cbi8vLyBAc2VlICRzdXN5XG4vLy8gQHNlZSBzdXN5LXNldHRpbmdzXG4vLy8gQHNlZSBzdXN5LWdldFxuXG5cblxuLy8gU3VzeVxuLy8gLS0tLVxuLy8vIFRoZSBncmlkIGlzIGRlZmluZWQgaW4gYSBzaW5nbGUgbWFwIHZhcmlhYmxlLFxuLy8vIHdpdGggZm91ciBpbml0aWFsIHByb3BlcnRpZXM6XG4vLy8gYGNvbHVtbnNgLCBgZ3V0dGVyc2AsIGBzcHJlYWRgIGFuZCBgY29udGFpbmVyLXNwcmVhZGAuXG4vLy8gQW55dGhpbmcgeW91IHB1dCBpbiB0aGUgcm9vdCBgJHN1c3lgIHZhcmlhYmxlIG1hcFxuLy8vIHdpbGwgYmUgdHJlYXRlZCBhcyBhIGdsb2JhbCBwcm9qZWN0IGRlZmF1bHQuXG4vLy8gWW91IGNhbiBjcmVhdGUgc2ltaWxhciBjb25maWd1cmF0aW9uIG1hcHNcbi8vLyB1bmRlciBkaWZmZXJlbnQgdmFyaWFibGUgbmFtZXMsXG4vLy8gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRzIGFzLW5lZWRlZC5cbi8vL1xuLy8vIEBncm91cCBjb25maWdcbi8vLyBAdHlwZSBNYXBcbi8vL1xuLy8vIEBzZWUgJF9zdXN5LWRlZmF1bHRzXG4vLy8gQHNlZSB7ZnVuY3Rpb259IHN1c3ktcmVwZWF0XG4vLy8gQGxpbmtcbi8vLyAgIGh0dHBzOi8vY29kZXBlbi5pby9taXJpc3V6YW5uZS9wZW4vRWdtSkpwP2VkaXRvcnM9MTEwMFxuLy8vICAgU3ByZWFkIGV4YW1wbGVzIG9uIENvZGVQZW5cbi8vL1xuLy8vIEBwcm9wIHtsaXN0fSBjb2x1bW5zIC1cbi8vLyAgIENvbHVtbnMgYXJlIGRlc2NyaWJlZCBieSBhIGxpc3Qgb2YgbnVtYmVycyxcbi8vLyAgIHJlcHJlc2VudGluZyB0aGUgcmVsYXRpdmUgd2lkdGggb2YgZWFjaCBjb2x1bW4uXG4vLy8gICBUaGUgc3ludGF4IGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIENTUyBuYXRpdmVcbi8vLyAgIGBncmlkLXRlbXBsYXRlLWNvbHVtbnNgLFxuLy8vICAgZXhwZWN0aW5nIGEgbGlzdCBvZiBncmlkLWNvbHVtbiB3aWR0aHMuXG4vLy8gICBVbml0bGVzcyBudW1iZXJzIGNyZWF0ZSBmcmFjdGlvbmFsIGZsdWlkIGNvbHVtbnNcbi8vLyAgIChzaW1pbGFyIHRvIHRoZSBDU1MtbmF0aXZlIGBmcmAgdW5pdCksXG4vLy8gICB3aGlsZSBsZW5ndGggdmFsdWVzICh1bml0ZWQgbnVtYmVycylcbi8vLyAgIGFyZSB1c2VkIHRvIGRlZmluZSBzdGF0aWMgY29sdW1ucy5cbi8vLyAgIFlvdSBjYW4gbWl4LWFuZCBtYXRjaCB1bml0cyBhbmQgZnJhY3Rpb25zLFxuLy8vICAgdG8gY3JlYXRlIGEgbWl4ZWQgZ3JpZC5cbi8vLyAgIFN1c3kgd2lsbCBnZW5lcmF0ZSBgY2FsYygpYCB2YWx1ZXMgd2hlbiBuZWNlc3NhcnksXG4vLy8gICB0byBtYWtlIGFsbCB5b3VyIHVuaXRzIHdvcmsgdG9nZXRoZXIuXG4vLy9cbi8vLyAgIFVzZSB0aGUgYHN1c3ktcmVwZWF0KCRjb3VudCwgJHZhbHVlKWAgZnVuY3Rpb25cbi8vLyAgIHRvIG1vcmUgZWFzaWx5IHJlcGV0YXRpdmUgY29sdW1ucyxcbi8vLyAgIHNpbWlsYXIgdG8gdGhlIENTUy1uYXRpdmUgYHJlcGVhdCgpYC5cbi8vL1xuLy8vICAgLSBgc3VzeS1yZXBlYXQoOClgOlxuLy8vICAgICBhbiA4LWNvbHVtbiwgc3ltbWV0cmljYWwsIGZsdWlkIGdyaWQuXG4vLy8gICAgIDxiciAvPklkZW50aWNhbCB0byBgKDEgMSAxIDEgMSAxIDEgMSlgLlxuLy8vICAgLSBgc3VzeS1yZXBlYXQoNiwgOGVtKWA6XG4vLy8gICAgIGEgNi1jb2x1bW4sIHN5bW1ldHJpY2FsLCBlbS1iYXNlZCBncmlkLlxuLy8vICAgICA8YnIgLz5JZGVudGljYWwgdG8gYCg4ZW0gOGVtIDhlbSA4ZW0gOGVtIDhlbSlgLlxuLy8vICAgLSBgKDMwMHB4IHN1c3ktcmVwZWF0KDQpIDMwMHB4KWA6XG4vLy8gICAgIGEgNi1jb2x1bW4sIGFzeW1tZXRyaWNhbCwgbWl4ZWQgZmx1aWQvc3RhdGljIGdyaWRcbi8vLyAgICAgdXNpbmcgYGNhbGMoKWAgb3V0cHV0LlxuLy8vICAgICA8YnIgLz5JZGVudGljYWwgdG8gYCgzMDBweCAxIDEgMSAxIDMwMHB4KWAuXG4vLy9cbi8vLyAgICoqTk9URSoqIHRoYXQgYDEyYCBpcyBubyBsb25nZXIgYSB2YWxpZCAxMi1jb2x1bW4gZ3JpZCBkZWZpbml0aW9uLFxuLy8vICAgYW5kIHlvdSBtdXN0IGxpc3QgYWxsIHRoZSBjb2x1bW5zIGluZGl2aWR1YWxseVxuLy8vICAgKG9yIGJ5IHVzaW5nIHRoZSBgc3VzeS1yZXBlYXQoKWAgZnVuY3Rpb24pLlxuLy8vXG4vLy8gQHByb3Age251bWJlcn0gZ3V0dGVycyAtXG4vLy8gICBHdXR0ZXJzIGFyZSBkZWZpbmVkIGFzIGEgc2luZ2xlIHdpZHRoLFxuLy8vICAgb3IgZmx1aWQgcmF0aW8sIHNpbWlsYXIgdG8gdGhlIG5hdGl2ZS1DU1Ncbi8vLyAgIGBncmlkLWNvbHVtbi1nYXBgIHN5bnRheC5cbi8vLyAgIFNpbWlsYXIgdG8gY29sdW1ucyxcbi8vLyAgIGd1dHRlcnMgY2FuIHVzZSBhbnkgdmFsaWQgQ1NTIGxlbmd0aCB1bml0LFxuLy8vICAgb3IgdW5pdGxlc3MgbnVtYmVycyB0byBkZWZpbmUgYSByZWxhdGl2ZSBmcmFjdGlvbi5cbi8vL1xuLy8vICAgLSBgMC41YDpcbi8vLyAgICAgYSBmbHVpZCBndXR0ZXIsIGhhbGYgdGhlIHNpemUgb2YgYSBzaW5nbGUtZnJhY3Rpb24gY29sdW1uLlxuLy8vICAgLSBgMWVtYDpcbi8vLyAgICAgYSBzdGF0aWMgZ3V0dGVyLCBgMWVtYCB3aWRlLlxuLy8vXG4vLy8gICBNaXggc3RhdGljIGd1dHRlcnMgd2l0aCBmbHVpZCBjb2x1bW5zLCBvciB2aWNlIHZlcnNhLFxuLy8vICAgYW5kIFN1c3kgd2lsbCBnZW5lcmF0ZSB0aGUgcmVxdWlyZWQgYGNhbGMoKWAgdG8gbWFrZSBpdCB3b3JrLlxuLy8vXG4vLy8gQHByb3Age3N0cmluZ30gc3ByZWFkIFtuYXJyb3ddIC1cbi8vLyAgIFNwcmVhZCBvZiBhbiBlbGVtZW50IGFjcm9zcyBhZGphY2VudCBndXR0ZXJzOlxuLy8vICAgZWl0aGVyIGBuYXJyb3dgIChub25lKSwgYHdpZGVgIChvbmUpLCBvciBgd2lkZXJgICh0d28pXG4vLy9cbi8vLyAgIC0gQm90aCBzcHJlYWQgc2V0dGluZ3MgZGVmYXVsdCB0byBgbmFycm93YCxcbi8vLyAgICAgdGhlIG1vc3QgY29tbW9uIHVzZS1jYXNlLlxuLy8vICAgICBBIGBuYXJyb3dgIHNwcmVhZCBvbmx5IGhhcyBndXR0ZXJzICpiZXR3ZWVuKiBjb2x1bW5zXG4vLy8gICAgIChvbmUgbGVzcyBndXR0ZXIgdGhhbiBjb2x1bW5zKS5cbi8vLyAgICAgVGhpcyBpcyBob3cgYWxsIGNzcy1uYXRpdmUgZ3JpZHMgd29yayxcbi8vLyAgICAgYW5kIG1vc3QgbWFyZ2luLWJhc2VkIGdyaWQgc3lzdGVtcy5cbi8vLyAgIC0gQSBgd2lkZWAgc3ByZWFkIGluY2x1ZGVzIHRoZSBzYW1lIG51bWJlciBvZiBndXR0ZXJzIGFzIGNvbHVtbnMsXG4vLy8gICAgIHNwYW5uaW5nIGFjcm9zcyBhIHNpbmdsZSBzaWRlLWd1dHRlci5cbi8vLyAgICAgVGhpcyBpcyBob3cgbW9zdCBwYWRkaW5nLWJhc2VkIGdyaWQgc3lzdGVtcyBvZnRlbiB3b3JrLFxuLy8vICAgICBhbmQgaXMgYWxzbyB1c2VmdWwgZm9yIHB1c2hpbmcgYW5kIHB1bGxpbmcgZWxlbWVudHMgaW50byBwbGFjZS5cbi8vLyAgIC0gVGhlIHJhcmUgYHdpZGVyYCBzcHJlYWQgaW5jbHVkZXMgZ3V0dGVyc1xuLy8vICAgICBvbiBib3RoIHNpZGVzIG9mIHRoZSBjb2x1bW4tc3BhblxuLy8vICAgICAob25lIG1vcmUgZ3V0dGVycyB0aGFuIGNvbHVtbnMpLlxuLy8vXG4vLy8gQHByb3Age3N0cmluZ30gY29udGFpbmVyLXNwcmVhZCBbbmFycm93XSAtXG4vLy8gICBTcHJlYWQgb2YgYSBjb250YWluZXIgYXJvdW5kIGFkamFjZW50IGd1dHRlcnM6XG4vLy8gICBlaXRoZXIgYG5hcnJvd2AgKG5vbmUpLCBgd2lkZWAgKG9uZSksIG9yIGB3aWRlcmAgKHR3bykuXG4vLy8gICBTZWUgYHNwcmVhZGAgcHJvcGVydHkgZm9yIGRldGFpbHMuXG4vLy9cbi8vLyBAc2luY2UgMy4wLjAtYmV0YS4xIC1cbi8vLyAgIGBjb2x1bW5zYCBzZXR0aW5nIG5vIGxvbmdlciBhY2NlcHRzIG51bWJlcnNcbi8vLyAgIChlLmcuIGAxMmApIGZvciBzeW1tZXRyaWNhbCBmbHVpZCBncmlkcyxcbi8vLyAgIG9yIHRoZSBpbml0aWFsIGAxMiB4IDEyMHB4YCBzeW50YXggZm9yXG4vLy8gICBzeW1tZXRyaWNhbCBmaXhlZC11bml0IGdyaWRzLlxuLy8vICAgVXNlIGBzdXN5LXJlcGVhdCgxMilgIG9yIGBzdXN5LXJlcGVhdCgxMiwgMTIwcHgpYCBpbnN0ZWFkLlxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIGRlZmF1bHQgdmFsdWVzXG4vLy8gICAvLyA0IHN5bW1ldHJpY2FsLCBmbHVpZCBjb2x1bW5zXG4vLy8gICAvLyBndXR0ZXJzIGFyZSAxLzQgdGhlIHNpemUgb2YgYSBjb2x1bW5cbi8vLyAgIC8vIGVsZW1lbnRzIHNwYW4gMSBsZXNzIGd1dHRlciB0aGFuIGNvbHVtbnNcbi8vLyAgIC8vIGNvbnRhaW5lcnMgc3BhbiAxIGxlc3MgZ3V0dGVyIGFzIHdlbGxcbi8vLyAgICRzdXN5OiAoXG4vLy8gICAgICdjb2x1bW5zJzogc3VzeS1yZXBlYXQoNCksXG4vLy8gICAgICdndXR0ZXJzJzogMC4yNSxcbi8vLyAgICAgJ3NwcmVhZCc6ICduYXJyb3cnLFxuLy8vICAgICAnY29udGFpbmVyLXNwcmVhZCc6ICduYXJyb3cnLFxuLy8vICAgKTtcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBpbnNpZGUtc3RhdGljIGd1dHRlcnNcbi8vLyAgIC8vIDYgc3ltbWV0cmljYWwsIGZsdWlkIGNvbHVtbnPigKZcbi8vLyAgIC8vIGd1dHRlcnMgYXJlIHN0YXRpYywgdHJpZ2dlcmluZyBjYWxjKCnigKZcbi8vLyAgIC8vIGVsZW1lbnRzIHNwYW4gZXF1YWwgY29sdW1ucyAmIGd1dHRlcnPigKZcbi8vLyAgIC8vIGNvbnRhaW5lcnMgc3BhbiBlcXVhbCBjb2x1bW5zICYgZ3V0dGVyc+KAplxuLy8vICAgJHN1c3k6IChcbi8vLyAgICAgJ2NvbHVtbnMnOiBzdXN5LXJlcGVhdCg2KSxcbi8vLyAgICAgJ2d1dHRlcnMnOiAwLjVlbSxcbi8vLyAgICAgJ3NwcmVhZCc6ICd3aWRlJyxcbi8vLyAgICAgJ2NvbnRhaW5lci1zcHJlYWQnOiAnd2lkZScsXG4vLy8gICApO1xuJHN1c3k6ICgpICFkZWZhdWx0O1xuXG5cblxuLy8gU3VzeSBSZXBlYXRcbi8vIC0tLS0tLS0tLS0tXG4vLy8gU2ltaWxhciB0byB0aGUgYHJlcGVhdCg8Y291bnQ+LCA8dmFsdWU+KWAgZnVuY3Rpb25cbi8vLyB0aGF0IGlzIGF2YWlsYWJsZSBpbiBuYXRpdmUgQ1NTIEdyaWQgdGVtcGxhdGVzLFxuLy8vIHRoZSBgc3VzeS1yZXBlYXQoKWAgZnVuY3Rpb24gaGVscHMgZ2VuZXJhdGUgcmVwZXRhdGl2ZSBsYXlvdXRzXG4vLy8gYnkgcmVwZWF0aW5nIGFueSB2YWx1ZSBhIGdpdmVuIG51bWJlciBvZiB0aW1lcy5cbi8vLyBXaGVyZSBTdXN5IHByZXZpb3VzbHkgYWxsb3dlZCBgOGAgYXMgYSBjb2x1bW4gZGVmaW5pdGlvblxuLy8vIGZvciA4IGVxdWFsIGNvbHVtbnMsIHlvdSBzaG91bGQgbm93IHVzZSBgc3VzeS1yZXBlYXQoOClgLlxuLy8vXG4vLy8gQGdyb3VwIGNvbmZpZ1xuLy8vXG4vLy8gQHBhcmFtIHtpbnRlZ2VyfSAkY291bnQgLVxuLy8vICAgVGhlIG51bWJlciBvZiByZXBldGl0aW9ucywgZS5nLiBgMTJgIGZvciBhIDEyLWNvbHVtbiBncmlkLlxuLy8vIEBwYXJhbSB7Kn0gJHZhbHVlIFsxXSAtXG4vLy8gICBUaGUgdmFsdWUgdG8gYmUgcmVwZWF0ZWQuXG4vLy8gICBUZWNobmljYWxseSBhbnkgdmFsdWUgY2FuIGJlIHJlcGVhdGVkIGhlcmUsXG4vLy8gICBidXQgdGhlIGZ1bmN0aW9uIGV4aXN0cyB0byByZXBlYXQgY29sdW1uLXdpZHRoIGRlc2NyaXB0aW9uczpcbi8vLyAgIGUuZy4gdGhlIGRlZmF1bHQgYDFgIGZvciBzaW5nbGUtZnJhY3Rpb24gZmx1aWQgY29sdW1ucyxcbi8vLyAgIGA1ZW1gIGZvciBhIHN0YXRpYyBjb2x1bW4sXG4vLy8gICBvciBldmVuIGA1ZW0gMTIwcHhgIGlmIHlvdSBhcmUgYWx0ZXJuYXRpbmcgY29sdW1uIHdpZHRocy5cbi8vL1xuLy8vIEByZXR1cm4ge2xpc3R9IC1cbi8vLyAgIExpc3Qgb2YgcmVwZWF0ZWQgdmFsdWVzXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzXG4vLy8gICAvLyAxMiBjb2x1bW4gZ3JpZCwgd2l0aCA1ZW0gY29sdW1uc1xuLy8vICAgJHN1c3k6IChcbi8vLyAgICAgY29sdW1uczogc3VzeS1yZXBlYXQoMTIsIDVlbSksXG4vLy8gICApO1xuLy8vXG4vLy8gQGV4YW1wbGUgc2Nzc1xuLy8vICAgLy8gYXN5bW1ldHJpY2FsIDUtY29sdW1uIGdyaWRcbi8vLyAgICRzdXN5OiAoXG4vLy8gICAgIGNvbHVtbnM6IDIwcHggc3VzeS1yZXBlYXQoMywgMTAwcHgpIDIwcHgsXG4vLy8gICApO1xuLy8vXG4vLy8gICAvKiByZXN1bHQ6ICN7c3VzeS1nZXQoJ2NvbHVtbnMnKX0gKi9cbkBmdW5jdGlvbiBzdXN5LXJlcGVhdChcbiAgJGNvdW50LFxuICAkdmFsdWU6IDFcbikge1xuICAkcmV0dXJuOiAoKTtcblxuICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICRjb3VudCB7XG4gICAgJHJldHVybjogam9pbigkcmV0dXJuLCAkdmFsdWUpO1xuICB9XG5cbiAgQHJldHVybiAkcmV0dXJuO1xufVxuXG5cblxuLy8gU3VzeSBEZWZhdWx0c1xuLy8gLS0tLS0tLS0tLS0tLVxuLy8vIENvbmZpZ3VyYXRpb24gbWFwIG9mIFN1c3kgZmFjdG9yeSBkZWZhdWx0cy5cbi8vLyBEbyBub3Qgb3ZlcnJpZGUgdGhpcyBtYXAgZGlyZWN0bHkg4oCTXG4vLy8gdXNlIGAkc3VzeWAgZm9yIHVzZXIgYW5kIHByb2plY3Qgc2V0dGluZyBvdmVycmlkZXMuXG4vLy9cbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vLyBAdHlwZSBNYXBcbi8vL1xuLy8vIEBzZWUgJHN1c3lcbi8vL1xuLy8vIEBwcm9wIHtudW1iZXIgfCBsaXN0fSBjb2x1bW5zIFtzdXN5LXJlcGVhdCg0KV1cbi8vLyBAcHJvcCB7bnVtYmVyfSBndXR0ZXJzIFswLjI1XVxuLy8vIEBwcm9wIHtzdHJpbmd9IHNwcmVhZCBbJ25hcnJvdyddXG4vLy8gQHByb3Age3N0cmluZ30gY29udGFpbmVyLXNwcmVhZCBbJ25hcnJvdyddXG4kX3N1c3ktZGVmYXVsdHM6IChcbiAgJ2NvbHVtbnMnOiBzdXN5LXJlcGVhdCg0KSxcbiAgJ2d1dHRlcnMnOiAwLjI1LFxuICAnc3ByZWFkJzogJ25hcnJvdycsXG4gICdjb250YWluZXItc3ByZWFkJzogJ25hcnJvdycsXG4pO1xuXG5cblxuLy8gU3VzeSBTZXR0aW5nc1xuLy8gLS0tLS0tLS0tLS0tLVxuLy8vIFJldHVybiBhIGNvbWJpbmVkIG1hcCBvZiBTdXN5IHNldHRpbmdzLFxuLy8vIGJhc2VkIG9uIHRoZSBmYWN0b3J5IGRlZmF1bHRzIChgJF9zdXN5LWRlZmF1bHRzYCksXG4vLy8gdXNlci1kZWZpbmVkIHByb2plY3QgY29uZmlndXJhdGlvbiAoYCRzdXN5YCksXG4vLy8gYW5kIGFueSBsb2NhbCBvdmVycmlkZXMgcmVxdWlyZWQg4oCTXG4vLy8gc3VjaCBhcyBhIGNvbmZpZ3VyYXRpb24gbWFwIHBhc3NlZCBpbnRvIGEgZnVuY3Rpb24uXG4vLy9cbi8vLyBAZ3JvdXAgY29uZmlnXG4vLy9cbi8vLyBAcGFyYW0ge21hcHN9ICRvdmVycmlkZXPigKYgLVxuLy8vICAgT3B0aW9uYWwgbWFwIG92ZXJyaWRlIG9mIGdsb2JhbCBjb25maWd1cmF0aW9uIHNldHRpbmdzLlxuLy8vICAgU2VlIGAkc3VzeWAgYWJvdmUgZm9yIHByb3BlcnRpZXMuXG4vLy9cbi8vLyBAcmV0dXJuIHttYXB9IC1cbi8vLyAgIENvbWJpbmVkIG1hcCBvZiBTdXN5IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsXG4vLy8gICBpbiBvcmRlciBvZiBzcGVjaWZpY2l0eTpcbi8vLyAgIGFueSBgJG92ZXJyaWRlcy4uLmAsXG4vLy8gICB0aGVuIGAkc3VzeWAgcHJvamVjdCBzZXR0aW5ncyxcbi8vLyAgIGFuZCBmaW5hbGx5IHRoZSBgJF9zdXN5LWRlZmF1bHRzYFxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIGdsb2JhbCBzZXR0aW5nc1xuLy8vICAgQGVhY2ggJGtleSwgJHZhbHVlIGluIHN1c3ktc2V0dGluZ3MoKSB7XG4vLy8gICAgIC8qICN7JGtleX06ICN7JHZhbHVlfSAqL1xuLy8vICAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIGxvY2FsIHNldHRpbmdzXG4vLy8gICAkbG9jYWw6ICgnY29sdW1ucyc6IDEgMiAzIDUgOCk7XG4vLy9cbi8vLyAgIEBlYWNoICRrZXksICR2YWx1ZSBpbiBzdXN5LXNldHRpbmdzKCRsb2NhbCkge1xuLy8vICAgICAvKiAjeyRrZXl9OiAjeyR2YWx1ZX0gKi9cbi8vLyAgIH1cbkBmdW5jdGlvbiBzdXN5LXNldHRpbmdzKFxuICAkb3ZlcnJpZGVzLi4uXG4pIHtcbiAgJHNldHRpbmdzOiBtYXAtbWVyZ2UoJF9zdXN5LWRlZmF1bHRzLCAkc3VzeSk7XG5cbiAgQGVhY2ggJGNvbmZpZyBpbiAkb3ZlcnJpZGVzIHtcbiAgICAkc2V0dGluZ3M6IG1hcC1tZXJnZSgkc2V0dGluZ3MsICRjb25maWcpO1xuICB9XG5cbiAgQHJldHVybiAkc2V0dGluZ3M7XG59XG5cblxuXG4vLyBTdXN5IEdldFxuLy8gLS0tLS0tLS1cbi8vLyBSZXR1cm4gdGhlIGN1cnJlbnQgZ2xvYmFsIHZhbHVlIG9mIGFueSBTdXN5IHNldHRpbmdcbi8vL1xuLy8vIEBncm91cCBjb25maWdcbi8vL1xuLy8vIEBwYXJhbSB7c3RyaW5nfSAka2V5IC1cbi8vLyAgIFNldHRpbmcgdG8gcmV0cmlldmUgZnJvbSB0aGUgY29uZmlndXJhdGlvbi5cbi8vL1xuLy8vIEByZXR1cm4geyp9IC1cbi8vLyAgIFZhbHVlIG1hcHBlZCB0byBgJGtleWAgaW4gdGhlIGNvbmZpZ3VyYXRpb24gbWFwcyxcbi8vLyAgIGluIG9yZGVyIG9mIHNwZWNpZmljaXR5OlxuLy8vICAgYCRzdXN5YCwgdGhlbiBgJF9zdXN5LWRlZmF1bHRzYFxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtXG4vLy8gICAvKiBjb2x1bW5zOiAje3N1c3ktZ2V0KCdjb2x1bW5zJyl9ICovXG4vLy8gICAvKiBndXR0ZXJzOiAje3N1c3ktZ2V0KCdndXR0ZXJzJyl9ICovXG5AZnVuY3Rpb24gc3VzeS1nZXQoXG4gICRrZXlcbikge1xuICAkc2V0dGluZ3M6IHN1c3ktc2V0dGluZ3MoKTtcblxuICBAaWYgbm90IG1hcC1oYXMta2V5KCRzZXR0aW5ncywgJGtleSkge1xuICAgIEByZXR1cm4gX3N1c3ktZXJyb3IoXG4gICAgICAnVGhlcmUgaXMgbm8gU3VzeSBzZXR0aW5nIGNhbGxlZCBgI3ska2V5fWAnLFxuICAgICAgJ3N1c3ktZ2V0Jyk7XG4gIH1cblxuICBAcmV0dXJuIG1hcC1nZXQoJHNldHRpbmdzLCAka2V5KTtcbn1cbiIsIi8vLyBTeW50YXggTm9ybWFsaXphdGlvblxuLy8vID09PT09PT09PT09PT09PT09PT09XG4vLy8gU3VzeSBpcyBkaXZpZGVkIGludG8gdHdvIGxheWVyczpcbi8vLyBcIlN1XCIgcHJvdmlkZXMgdGhlIGNvcmUgbWF0aCBmdW5jdGlvbnMgd2l0aCBhIHN0cmlwcGVkLWRvd24gc3ludGF4LFxuLy8vIHdoaWxlIFwiU3VzeVwiIGFkZHMgZ2xvYmFsIHNldHRpbmdzLCBzaG9ydGhhbmQgc3ludGF4LFxuLy8vIGFuZCBvdGhlciBoZWxwZXJzLlxuLy8vIEVhY2ggc2V0dGluZyAoZS5nLiBzcGFuLCBsb2NhdGlvbiwgY29sdW1ucywgc3ByZWFkLCBldGMuKVxuLy8vIGhhcyBhIHNpbmdsZSBjYW5vbmljYWwgc3ludGF4IGluIFN1LlxuLy8vXG4vLy8gVGhpcyBub3JtYWxpemF0aW9uIG1vZHVsZSBoZWxwcyB0cmFuc2xhdGUgYmV0d2VlbiB0aG9zZSBsYXllcnMsXG4vLy8gdHJhbnNmb3JtaW5nIHBhcnNlZCBTdXN5IGlucHV0IGludG9cbi8vLyB2YWx1ZXMgdGhhdCBTdSB3aWxsIHVuZGVyc3RhbmQuXG4vLy9cbi8vLyBAZ3JvdXAgX25vcm1hbFxuLy8vXG4vLy8gQHNlZSBzdXN5LW5vcm1hbGl6ZVxuLy8vIEBzZWUgc3VzeS1ub3JtYWxpemUtc3BhblxuLy8vIEBzZWUgc3VzeS1ub3JtYWxpemUtY29sdW1uc1xuLy8vIEBzZWUgc3VzeS1ub3JtYWxpemUtc3ByZWFkXG4vLy8gQHNlZSBzdXN5LW5vcm1hbGl6ZS1sb2NhdGlvblxuXG5cblxuLy8gU3VzeSBOb3JtYWxpemVcbi8vIC0tLS0tLS0tLS0tLS0tXG4vLy8gTm9ybWFsaXplIHRoZSB2YWx1ZXMgaW4gYSBjb25maWd1cmF0aW9uIG1hcC5cbi8vLyBJbiBhZGRpdGlvbiB0byB0aGUgZ2xvYmFsIGAkc3VzeWAgcHJvcGVydGllcyxcbi8vLyB0aGlzIG1hcCBjYW4gaW5jbHVkZSBsb2NhbCBzcGFuLXJlbGF0ZWQgaW5mb3JtYXRpb24sXG4vLy8gbGlrZSBgc3BhbmAgYW5kIGBsb2NhdGlvbmAuXG4vLy9cbi8vLyBOb3JtYWxpemF0aW9uIGRvZXMgbm90IGNoZWNrIHRoYXQgdmFsdWVzIGFyZSB2YWxpZCxcbi8vLyB3aGljaCB3aWxsIGhhcHBlbiBpbiB0aGUgU3UgbWF0aCBsYXllci5cbi8vLyBUaGVzZSBmdW5jdGlvbnMgbWVyZWx5IGxvb2sgZm9yIGtub3duIFN1c3kgc3ludGF4IOKAk1xuLy8vIHJldHVybmluZyBhIG1hcCB3aXRoIHRob3NlIHNob3J0aGFuZCB2YWx1ZXNcbi8vLyBjb252ZXJ0ZWQgaW50byBsb3ctbGV2ZWwgZGF0YSBmb3IgU3UuXG4vLy8gRm9yIGV4YW1wbGUgYHNwYW46IGFsbGAgYW5kIGBsb2NhdGlvbjogZmlyc3RgXG4vLy8gd2lsbCBiZSBjb252ZXJ0ZWQgaW50byBzcGVjaWZpYyBudW1iZXJzLlxuLy8vXG4vLy8gQGdyb3VwIF9ub3JtYWxcbi8vLyBAc2VlICRzdXN5XG4vLy8gQHNlZSBzdXN5LXBhcnNlXG4vLy9cbi8vLyBAcGFyYW0ge21hcH0gJGNvbmZpZyAtXG4vLy8gICBNYXAgb2YgU3VzeSBjb25maWd1cmF0aW9uIHNldHRpbmdzIHRvIG5vcm1hbGl6ZS5cbi8vLyAgIFNlZSBgJHN1c3lgIGFuZCBgc3VzeS1wYXJzZSgpYCBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLlxuLy8vIEBwYXJhbSB7bWFwIHwgbnVsbH0gJGNvbnRleHQgW251bGxdIC1cbi8vLyAgIE1hcCBvZiBTdXN5IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgdG8gdXNlIGFzIGdsb2JhbCByZWZlcmVuY2UsXG4vLy8gICBvciBgbnVsbGAgdG8gdXNlIGdsb2JhbCBzZXR0aW5ncy5cbi8vL1xuLy8vIEByZXR1cm4ge21hcH0gLVxuLy8vICAgTWFwIG9mIFN1c3kgY29uZmlndXJhdGlvbiBzZXR0aW5ncyxcbi8vLyAgIHdpdGggYWxsIHZhbHVlcyBub3JtYWxpemVkIGZvciBTdSBtYXRoIGZ1bmN0aW9ucy5cbkBmdW5jdGlvbiBzdXN5LW5vcm1hbGl6ZShcbiAgJGNvbmZpZyxcbiAgJGNvbnRleHQ6IG51bGxcbikge1xuICAvLyBTcHJlYWRcbiAgQGVhY2ggJHNldHRpbmcgaW4gKCdzcHJlYWQnLCAnY29udGFpbmVyLXNwcmVhZCcpIHtcbiAgICAkdmFsdWU6IG1hcC1nZXQoJGNvbmZpZywgJHNldHRpbmcpO1xuXG4gICAgQGlmICR2YWx1ZSB7XG4gICAgICAkdmFsdWU6IHN1c3ktbm9ybWFsaXplLXNwcmVhZCgkdmFsdWUpO1xuICAgICAgJGNvbmZpZzogbWFwLW1lcmdlKCRjb25maWcsICgkc2V0dGluZzogJHZhbHVlKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ29sdW1uc1xuICAkY29sdW1uczogbWFwLWdldCgkY29uZmlnLCAnY29sdW1ucycpO1xuXG4gIEBpZiAkY29sdW1ucyB7XG4gICAgJGNvbHVtbnM6IHN1c3ktbm9ybWFsaXplLWNvbHVtbnMoJGNvbHVtbnMsICRjb250ZXh0KTtcbiAgICAkY29uZmlnOiBtYXAtbWVyZ2UoJGNvbmZpZywgKCdjb2x1bW5zJzogJGNvbHVtbnMpKTtcbiAgfVxuXG4gIEBpZiBub3QgJGNvbHVtbnMge1xuICAgICRtYXA6IHR5cGUtb2YoJGNvbnRleHQpID09ICdtYXAnO1xuICAgICRjb2x1bW5zOiBpZigkbWFwLCBtYXAtZ2V0KCRjb250ZXh0LCAnY29sdW1ucycpLCBudWxsKTtcbiAgICAkY29sdW1uczogJGNvbHVtbnMgb3Igc3VzeS1nZXQoJ2NvbHVtbnMnKTtcbiAgfVxuXG4gIC8vIFNwYW5cbiAgJHNwYW46IG1hcC1nZXQoJGNvbmZpZywgJ3NwYW4nKTtcblxuICBAaWYgJHNwYW4ge1xuICAgICRzcGFuOiBzdXN5LW5vcm1hbGl6ZS1zcGFuKCRzcGFuLCAkY29sdW1ucyk7XG4gICAgJGNvbmZpZzogbWFwLW1lcmdlKCRjb25maWcsICgnc3Bhbic6ICRzcGFuKSk7XG4gIH1cblxuICAvLyBMb2NhdGlvblxuICAkbG9jYXRpb246IG1hcC1nZXQoJGNvbmZpZywgJ2xvY2F0aW9uJyk7XG5cbiAgQGlmICRsb2NhdGlvbiB7XG4gICAgJGxvY2F0aW9uOiBzdXN5LW5vcm1hbGl6ZS1sb2NhdGlvbigkc3BhbiwgJGxvY2F0aW9uLCAkY29sdW1ucyk7XG4gICAgJGNvbmZpZzogbWFwLW1lcmdlKCRjb25maWcsICgnbG9jYXRpb24nOiAkbG9jYXRpb24pKTtcbiAgfVxuXG4gIEByZXR1cm4gJGNvbmZpZztcbn1cblxuXG5cbi8vIE5vcm1hbGl6ZSBTcGFuXG4vLyAtLS0tLS0tLS0tLS0tLVxuLy8vIE5vcm1hbGl6ZSBgc3BhbmAgc2hvcnRoYW5kIGZvciBTdS5cbi8vLyBTdSBzcGFuIHN5bnRheCBhbGxvd3MgYW4gZXhwbGljaXQgbGVuZ3RoIChlLmcuIGAzZW1gKSxcbi8vLyB1bml0bGVzcyBjb2x1bW4tc3BhbiBudW1iZXIgKGUuZy4gYDNgIGNvbHVtbnMpLFxuLy8vIG9yIGFuIGV4cGxpY2l0IGxpc3Qgb2YgY29sdW1ucyAoZS5nLiBgKDMgNSA4KWApLlxuLy8vXG4vLy8gU3VzeSBzcGFuIHN5bnRheCBhbHNvIGFsbG93cyB0aGUgYGFsbGAga2V5d29yZCxcbi8vLyB3aGljaCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHNsaWNlIG9mIHRoZSBjb250ZXh0XG4vLy8gaW4gbm9ybWFsaXphdGlvbi5cbi8vL1xuLy8vIEBncm91cCBfbm9ybWFsXG4vLy9cbi8vLyBAcGFyYW0ge251bWJlciB8IGxpc3QgfCAnYWxsJ30gJHNwYW4gLVxuLy8vICAgU3BhbiB2YWx1ZSB0byBub3JtYWxpemUuXG4vLy8gQHBhcmFtIHtsaXN0fSAkY29sdW1ucyAtXG4vLy8gICBOb3JtYWxpemVkIGxpc3Qgb2YgY29sdW1ucyBpbiB0aGUgZ3JpZFxuLy8vXG4vLy8gQHJldHVybiB7bnVtYmVyIHwgbGlzdH0gLVxuLy8vICAgTnVtYmVyIG9yIGxpc3QgdmFsdWUgZm9yIGAkc3BhbmBcbkBmdW5jdGlvbiBzdXN5LW5vcm1hbGl6ZS1zcGFuKFxuICAkc3BhbixcbiAgJGNvbHVtbnM6IHN1c3ktZ2V0KCdjb2x1bW5zJylcbikge1xuICBAaWYgKCRzcGFuID09ICdhbGwnKSB7XG4gICAgQHJldHVybiBsZW5ndGgoJGNvbHVtbnMpO1xuICB9XG5cbiAgQHJldHVybiAkc3Bhbjtcbn1cblxuXG5cbi8vIE5vcm1hbGl6ZSBDb2x1bW5zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLVxuLy8vIE5vcm1hbGl6ZSBgY29sdW1uYCBzaG9ydGhhbmQgZm9yIFN1LlxuLy8vIFN1IGNvbHVtbiBzeW50YXggb25seSBhbGxvd3MgY29sdW1uIGxpc3RzIChlLmcuIGAxMjBweCAxIDEgMSAxMjBweGApLlxuLy8vXG4vLy8gU3VzeSBzcGFuIHN5bnRheCBhbHNvIGFsbG93cyBhIHVuaXRsZXNzIGBzbGljZWAgbnVtYmVyIChlLmcgYG9mIDVgKSxcbi8vLyB3aGljaCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHNsaWNlIG9mIHRoZSBjb250ZXh0XG4vLy8gaW4gbm9ybWFsaXphdGlvbi5cbi8vL1xuLy8vIEBncm91cCBfbm9ybWFsXG4vLy9cbi8vLyBAcGFyYW0ge2xpc3QgfCBpbnRlZ2VyfSAkY29sdW1ucyAtXG4vLy8gICBMaXN0IG9mIGF2YWlsYWJsZSBjb2x1bW5zLFxuLy8vICAgb3IgdW5pdGxlc3MgaW50ZWdlciByZXByZXNlbnRpbmcgYSBzbGljZSBvZlxuLy8vICAgdGhlIGF2YWlsYWJsZSBjb250ZXh0LlxuLy8vIEBwYXJhbSB7bWFwIHwgbnVsbH0gJGNvbnRleHQgW251bGxdIC1cbi8vLyAgIE1hcCBvZiBTdXN5IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgdG8gdXNlIGFzIGdsb2JhbCByZWZlcmVuY2UsXG4vLy8gICBvciBgbnVsbGAgdG8gYWNjZXNzIGdsb2JhbCBzZXR0aW5ncy5cbi8vL1xuLy8vIEByZXR1cm4ge2xpc3R9IC1cbi8vLyAgIENvbHVtbnMgbGlzdCB2YWx1ZSwgbm9ybWFsaXplZCBmb3IgU3UgaW5wdXQuXG4vLy9cbi8vLyBAdGhyb3dzXG4vLy8gICB3aGVuIGF0dGVtcHRpbmcgdG8gYWNjZXNzIGEgc2xpY2Ugb2YgYXN5bW1ldHJpY2FsIGNvbnRleHRcbkBmdW5jdGlvbiBzdXN5LW5vcm1hbGl6ZS1jb2x1bW5zKFxuICAkY29sdW1ucyxcbiAgJGNvbnRleHQ6IG51bGxcbikge1xuICAkY29udGV4dDogJGNvbnRleHQgb3Igc3VzeS1zZXR0aW5ncygpO1xuXG4gIEBpZiB0eXBlLW9mKCRjb2x1bW5zKSA9PSAnbGlzdCcge1xuICAgIEByZXR1cm4gX3N1c3ktZmxhdHRlbigkY29sdW1ucyk7XG4gIH1cblxuICBAaWYgKHR5cGUtb2YoJGNvbHVtbnMpID09ICdudW1iZXInKSBhbmQgKHVuaXRsZXNzKCRjb2x1bW5zKSkge1xuICAgICRzcGFuOiAkY29sdW1ucztcbiAgICAkY29udGV4dDogbWFwLWdldCgkY29udGV4dCwgJ2NvbHVtbnMnKTtcbiAgICAkc3ltbWV0cmljYWw6IHN1c3ktcmVwZWF0KGxlbmd0aCgkY29udGV4dCksIG50aCgkY29udGV4dCwgMSkpO1xuXG4gICAgQGlmICgkY29udGV4dCA9PSAkc3ltbWV0cmljYWwpIHtcbiAgICAgIEByZXR1cm4gc3VzeS1yZXBlYXQoJHNwYW4sIG50aCgkY29udGV4dCwgMSkpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJGFjdHVhbDogJ29mIGAjeyRzcGFufWAnO1xuICAgICAgJGNvbHVtbnM6ICdncmlkLWNvbHVtbnMgYCN7JGNvbnRleHR9YCc7XG4gICAgICBAcmV0dXJuIF9zdXN5LWVycm9yKFxuICAgICAgICAnY29udGV4dC1zbGljZSAjeyRhY3R1YWx9IGNhbiBub3QgYmUgZGV0ZXJtaW5lZCBiYXNlZCBvbiAjeyRjb2x1bW5zfS4nLFxuICAgICAgICAnc3VzeS1ub3JtYWxpemUtY29sdW1ucycpO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGNvbHVtbnM7XG59XG5cblxuXG4vLyBOb3JtYWxpemUgU3ByZWFkXG4vLyAtLS0tLS0tLS0tLS0tLS0tXG4vLy8gTm9ybWFsaXplIGBzcHJlYWRgIHNob3J0aGFuZCBmb3IgU3UuXG4vLy8gU3Ugc3ByZWFkIHN5bnRheCBvbmx5IGFsbG93cyB0aGUgbnVtYmVycyBgLTFgLCBgMGAsIG9yIGAxYCDigJNcbi8vLyByZXByZXNlbnRpbmcgdGhlIG51bWJlciBvZiBndXR0ZXJzIGNvdmVyZWRcbi8vLyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIHNwYW5uZWQuXG4vLy9cbi8vLyBTdXN5IHNwcmVhZCBzeW50YXggYWxzbyBhbGxvd3Mga2V5d29yZHMgZm9yIGVhY2ggdmFsdWUg4oCTXG4vLy8gYG5hcnJvd2AgZm9yIGAtMWAsIGB3aWRlYCBmb3IgYDBgLCBvciBgd2lkZXJgIGZvciBgMWAg4oCTXG4vLy8gd2hpY2ggd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlZ2Vyc1xuLy8vIGluIG5vcm1hbGl6YXRpb24uXG4vLy9cbi8vLyBAZ3JvdXAgX25vcm1hbFxuLy8vXG4vLy8gQHBhcmFtIHswIHwgMSB8IC0xIHwgJ25hcnJvdycgfCAnd2lkZScgfCAnd2lkZXInfSAkc3ByZWFkIC1cbi8vLyAgIFNwcmVhZCBhY3Jvc3MgYWRqYWNlbnQgZ3V0dGVycywgcmVsYXRpdmUgdG8gYSBjb2x1bW4tY291bnQg4oCUXG4vLy8gICBlaXRoZXIgYG5hcnJvd2AgKC0xKSwgYHdpZGVgICgwKSwgb3IgYHdpZGVyYCAoMSlcbi8vL1xuLy8vIEByZXR1cm4ge251bWJlcn0gLVxuLy8vICAgTnVtZXJpYyB2YWx1ZSBmb3IgYCRzcHJlYWRgXG5AZnVuY3Rpb24gc3VzeS1ub3JtYWxpemUtc3ByZWFkKFxuICAkc3ByZWFkXG4pIHtcbiAgJG5vcm1hbC1zcHJlYWQ6IChcbiAgICAnbmFycm93JzogLTEsXG4gICAgJ3dpZGUnOiAwLFxuICAgICd3aWRlcic6IDEsXG4gICk7XG5cbiAgQHJldHVybiBtYXAtZ2V0KCRub3JtYWwtc3ByZWFkLCAkc3ByZWFkKSBvciAkc3ByZWFkO1xufVxuXG5cblxuLy8gTm9ybWFsaXplIExvY2F0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS1cbi8vLyBOb3JtYWxpemUgYGxvY2F0aW9uYCBzaG9ydGhhbmQgZm9yIFN1LlxuLy8vIFN1IGxvY2F0aW9uIHN5bnRheCByZXF1aXJlcyB0aGUgKDEtaW5kZXhlZCkgbnVtYmVyIGZvciBhIGNvbHVtbi5cbi8vL1xuLy8vIFN1c3kgYWxzbyBhbGxvd3MgdGhlIGBmaXJzdGAgYW5kIGBsYXN0YCBrZXl3b3Jkcyxcbi8vLyB3aGVyZSBgZmlyc3RgIGlzIGFsd2F5cyBgMWAsXG4vLy8gYW5kIGBsYXN0YCBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIHNwYW4gYW5kIGNvbHVtbiB2YWx1ZXMuXG4vLy8gQm90aCBrZXl3b3JkcyBhcmUgbm9ybWFsaXplZCBpbnRvIGFuIGludGVnZXIgaW5kZXhcbi8vLyBpbiBub3JtYWxpemF0aW9uLlxuLy8vXG4vLy8gQGdyb3VwIF9ub3JtYWxcbi8vL1xuLy8vIEBwYXJhbSB7bnVtYmVyfSAkc3BhbiAtXG4vLy8gICBOdW1iZXIgb2YgZ3JpZC1jb2x1bW5zIHRvIGJlIHNwYW5uZWRcbi8vLyBAcGFyYW0ge2ludGVnZXIgfCAnZmlyc3QnIHwgJ2xhc3QnfSAkbG9jYXRpb24gLVxuLy8vICAgU3RhcnRpbmcgKDEtaW5kZXhlZCkgY29sdW1uIHBvc2l0aW9uIG9mIGEgc3Bhbixcbi8vLyAgIG9yIGEgbmFtZWQgbG9jYXRpb24ga2V5d29yZC5cbi8vLyBAcGFyYW0ge2xpc3R9ICRjb2x1bW5zIC1cbi8vLyAgIEFscmVhZHktbm9ybWFsaXplZCBsaXN0IG9mIGNvbHVtbnMgaW4gdGhlIGdyaWQuXG4vLy9cbi8vLyBAcmV0dXJuIHtpbnRlZ2VyfSAtXG4vLy8gICBOdW1lcmljIHZhbHVlIGZvciBgJGxvY2F0aW9uYFxuQGZ1bmN0aW9uIHN1c3ktbm9ybWFsaXplLWxvY2F0aW9uKFxuICAkc3BhbixcbiAgJGxvY2F0aW9uLFxuICAkY29sdW1uc1xuKSB7XG4gICRjb3VudDogbGVuZ3RoKCRjb2x1bW5zKTtcbiAgJG5vcm1hbC1sb2NhdGlvbnM6IChcbiAgICAnZmlyc3QnOiAxLFxuICAgICdhbHBoYSc6IDEsXG4gICAgJ2xhc3QnOiAkY291bnQgLSAkc3BhbiArIDEsXG4gICAgJ29tZWdhJzogJGNvdW50IC0gJHNwYW4gKyAxLFxuICApO1xuXG4gIEByZXR1cm4gbWFwLWdldCgkbm9ybWFsLWxvY2F0aW9ucywgJGxvY2F0aW9uKSBvciAkbG9jYXRpb247XG59XG4iLCIvLy8gU2hvcnRoYW5kIFN5bnRheCBQYXJzZXJcbi8vLyA9PT09PT09PT09PT09PT09PT09PT09PVxuLy8vIFRoZSBzeW50YXggcGFyc2VyIGNvbnZlcnRzIFtzaG9ydGhhbmQgc3ludGF4XVtzaG9ydF1cbi8vLyBpbnRvIGEgbWFwIG9mIHNldHRpbmdzIHRoYXQgY2FuIGJlIGNvbXBhcmVkL21lcmdlZCB3aXRoXG4vLy8gb3RoZXIgY29uZmlnIG1hcHMgYW5kIGdsb2JhbCBzZXR0aW5nLlxuLy8vXG4vLy8gW3Nob3J0XTogYXBpLmh0bWxcbi8vL1xuLy8vIEBncm91cCBfcGFyc2VyXG5cblxuXG4vLyBQYXJzZVxuLy8gLS0tLS1cbi8vLyBUaGUgYHBhcnNlYCBmdW5jdGlvbiBwcm92aWRlcyBhbGwgdGhlIHN5bnRheC1zdWdhciBpbiBTdXN5LFxuLy8vIGNvbnZlcnRpbmcgdXNlciBzaG9ydGhhbmRcbi8vLyBpbnRvIGEgdXNhYmxlIG1hcCBvZiBrZXlzIGFuZCB2YWx1ZXNcbi8vLyB0aGF0IGNhbiBiZSBub3JtYWxpemVkIGFuZCBwYXNzZWQgdG8gU3UuXG4vLy9cbi8vLyBAZ3JvdXAgX3BhcnNlclxuLy8vIEBzZWUgJHN1c3lcbi8vL1xuLy8vIEBwYXJhbSB7bGlzdH0gJHNob3J0aGFuZCAtXG4vLy8gICBTaG9ydGhhbmQgZXhwcmVzc2lvbiB0byBkZWZpbmUgdGhlIHdpZHRoIG9mIHRoZSBzcGFuLFxuLy8vICAgb3B0aW9uYWxseSBjb250YWluaW5nOlxuLy8vICAgLSBhIGNvdW50LCBsZW5ndGgsIG9yIGNvbHVtbi1saXN0IHNwYW47XG4vLy8gICAtIGBhdCAkbmAsIGBmaXJzdGAsIG9yIGBsYXN0YCBsb2NhdGlvbiBvbiBhc3ltbWV0cmljYWwgZ3JpZHM7XG4vLy8gICAtIGBuYXJyb3dgLCBgd2lkZWAsIG9yIGB3aWRlcmAgZm9yIG9wdGlvbmFsbHkgc3ByZWFkaW5nXG4vLy8gICAgIGFjcm9zcyBhZGphY2VudCBndXR0ZXJzO1xuLy8vICAgLSBgb2YgJG4gPHNwcmVhZD5gIGZvciBhdmFpbGFibGUgZ3JpZCBjb2x1bW5zXG4vLy8gICAgIGFuZCBzcHJlYWQgb2YgdGhlIGNvbnRhaW5lclxuLy8vICAgICAoc3BhbiBjb3VudHMgbGlrZSBgb2YgNmAgYXJlIG9ubHkgdmFsaWRcbi8vLyAgICAgaW4gdGhlIGNvbnRleHQgb2Ygc3ltbWV0cmljYWwgZ3JpZHMpO1xuLy8vICAgLSBhbmQgYHNldC1ndXR0ZXJzICRuYCB0byBvdmVycmlkZSBnbG9iYWwgZ3V0dGVyIHNldHRpbmdzXG4vLy8gQHBhcmFtIHtib29sfSAkY29udGV4dC1vbmx5IFtmYWxzZV0gLVxuLy8vICAgQWxsb3cgdGhlIHBhcnNlciB0byBpZ25vcmUgc3BhbiBhbmQgc3Bhbi1zcHJlYWQgdmFsdWVzLFxuLy8vICAgb25seSBwYXJzaW5nIGNvbnRleHQgYW5kIGNvbnRhaW5lci1zcHJlYWQuXG4vLy8gICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGFjY2VwdCBzcGFubGVzcyB2YWx1ZXMsXG4vLy8gICBsaWtlIHRoZSBgZ3V0dGVycygpYCBzeW50YXguXG4vLy8gICBXaGVuIHBhcnNpbmcgY29udGV4dC1vbmx5LFxuLy8vICAgdGhlIGBvZmAgaW5kaWNhdG9yIGlzIG9wdGlvbmFsLlxuLy8vXG4vLy8gQHJldHVybiB7bWFwfSAtXG4vLy8gICBNYXAgb2Ygc3BhbiBhbmQgZ3JpZCBzZXR0aW5nc1xuLy8vICAgcGFyc2VkIGZyb20gc2hvcnRoYW5kIGlucHV0IOKAk1xuLy8vICAgaW5jbHVkaW5nIGFsbCB0aGUgcHJvcGVydGllcyBhdmFpbGFibGUgZ2xvYmFsbHkg4oCTXG4vLy8gICBgY29sdW1uc2AsIGBndXR0ZXJzYCwgYHNwcmVhZGAsIGBjb250YWluZXItc3ByZWFkYCDigJNcbi8vLyAgIGFsb25nIHdpdGggdGhlIHNwYW4tc3BlY2lmaWMgcHJvcGVydGllc1xuLy8vICAgYHNwYW5gLCBhbmQgYGxvY2F0aW9uYC5cbi8vL1xuLy8vIEB0aHJvd1xuLy8vICAgd2hlbiBhIHNob3J0aGFuZCB2YWx1ZSBpcyBub3QgcmVjb2duaXplZFxuQGZ1bmN0aW9uIHN1c3ktcGFyc2UoXG4gICRzaG9ydGhhbmQsXG4gICRjb250ZXh0LW9ubHk6IGZhbHNlXG4pIHtcbiAgJHBhcnNlLWVycm9yOiAnVW5rbm93biBzaG9ydGhhbmQgcHJvcGVydHk6JztcbiAgJG9wdGlvbnM6IChcbiAgICAnZmlyc3QnOiAnbG9jYXRpb24nLFxuICAgICdsYXN0JzogJ2xvY2F0aW9uJyxcbiAgICAnYWxwaGEnOiAnbG9jYXRpb24nLFxuICAgICdvbWVnYSc6ICdsb2NhdGlvbicsXG4gICAgJ25hcnJvdyc6ICdzcHJlYWQnLFxuICAgICd3aWRlJzogJ3NwcmVhZCcsXG4gICAgJ3dpZGVyJzogJ3NwcmVhZCcsXG4gICk7XG5cbiAgJHJldHVybjogKCk7XG4gICRzcGFuOiBudWxsO1xuICAkY29sdW1uczogbnVsbDtcblxuICAkb2Y6IG51bGw7XG4gICRuZXh0OiBmYWxzZTtcblxuICAvLyBBbGxvdyBjb250ZXh0LW9ubHkgc2hvcnRoYW5kLCB3aXRob3V0IHNwYW5cbiAgQGlmICgkY29udGV4dC1vbmx5KSBhbmQgKG5vdCBpbmRleCgkc2hvcnRoYW5kLCAnb2YnKSkge1xuICAgIEBpZiBzdS12YWxpZC1jb2x1bW5zKCRzaG9ydGhhbmQsICdmYWlsLXNpbGVudCcpIHtcbiAgICAgICRzaG9ydGhhbmQ6ICdvZicgJHNob3J0aGFuZDtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRzaG9ydGhhbmQ6IGpvaW4oJ29mJywgJHNob3J0aGFuZCk7XG4gICAgfVxuICB9XG5cbiAgLy8gbG9vcCB0aHJvdWdoIHRoZSBzaG9ydGhhbmQgbGlzdFxuICBAZm9yICRpIGZyb20gMSB0aHJvdWdoIGxlbmd0aCgkc2hvcnRoYW5kKSB7XG4gICAgJGl0ZW06IG50aCgkc2hvcnRoYW5kLCAkaSk7XG4gICAgJHR5cGU6IHR5cGUtb2YoJGl0ZW0pO1xuICAgICRlcnJvcjogZmFsc2U7XG4gICAgJGRldGFpbHM6ICdbI3skdHlwZX1dIGAjeyRpdGVtfWAnO1xuXG4gICAgLy8gaWYgd2Uga25vdyB3aGF0J3Mgc3VwcG9zZWQgdG8gYmUgY29taW5nIG5leHTigKZcbiAgICBAaWYgJG5leHQge1xuXG4gICAgICAvLyBBZGQgdG8gdGhlIHJldHVybiBtYXBcbiAgICAgICRyZXR1cm46IG1hcC1tZXJnZSgkcmV0dXJuLCAoJG5leHQ6ICRpdGVtKSk7XG5cbiAgICAgIC8vIFJlc2V0IG5leHQgdG8gYGZhbHNlYFxuICAgICAgJG5leHQ6IGZhbHNlO1xuXG4gICAgfSBAZWxzZSB7IC8vIElmIHdlIGRvbid0IGtub3cgd2hhdCdzIHN1cHBvc2VkIHRvIGJlIGNvbWluZ+KAplxuXG4gICAgICAvLyBLZXl3b3Jkc+KAplxuICAgICAgQGlmICgkdHlwZSA9PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBDaGVjayB0aGUgbWFwIGZvciBrZXl3b3Jkc+KAplxuICAgICAgICBAaWYgbWFwLWhhcy1rZXkoJG9wdGlvbnMsICRpdGVtKSB7XG4gICAgICAgICAgJHNldHRpbmc6IG1hcC1nZXQoJG9wdGlvbnMsICRpdGVtKTtcblxuICAgICAgICAgIC8vIFNwcmVhZCBjb3VsZCBiZSBvbiB0aGUgc3BhbiBvciB0aGUgY29udGFpbmVy4oCmXG4gICAgICAgICAgQGlmICgkc2V0dGluZyA9PSAnc3ByZWFkJykgYW5kICgkb2YpIHtcbiAgICAgICAgICAgICRyZXR1cm46IG1hcC1tZXJnZSgkcmV0dXJuLCAoJ2NvbnRhaW5lci1zcHJlYWQnOiAkaXRlbSkpO1xuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgJHJldHVybjogbWFwLW1lcmdlKCRyZXR1cm4sICgkc2V0dGluZzogJGl0ZW0pKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBAZWxzZSBpZiAoJGl0ZW0gPT0gJ2FsbCcpIHtcbiAgICAgICAgICAvLyBgQWxsYCBpcyBhIHNwYW4gc2hvcnRjdXRcbiAgICAgICAgICAkc3BhbjogJ2FsbCc7XG4gICAgICAgIH0gQGVsc2UgaWYgKCRpdGVtID09ICdhdCcpIHtcbiAgICAgICAgICAvLyBTb21lIGtleXdvcmRzIHNldHVwIHdoYXQncyBuZXh04oCmXG4gICAgICAgICAgJG5leHQ6ICdsb2NhdGlvbic7XG4gICAgICAgIH0gQGVsc2UgaWYgKCRpdGVtID09ICdzZXQtZ3V0dGVycycpIHtcbiAgICAgICAgICAkbmV4dDogJ2d1dHRlcnMnO1xuICAgICAgICB9IEBlbHNlIGlmICgkaXRlbSA9PSAnb2YnKSB7XG4gICAgICAgICAgJG9mOiB0cnVlO1xuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAkZXJyb3I6IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgfSBAZWxzZSBpZiAoJHR5cGUgPT0gJ251bWJlcicpIG9yICgkdHlwZSA9PSAnbGlzdCcpIHsgLy8gTnVtYmVycyAmIGxpc3Rz4oCmXG5cbiAgICAgICAgQGlmIG5vdCAoJHNwYW4gb3IgJG9mKSB7XG4gICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIHNwYW4sIGFuZCB3ZSdyZSBub3QgZXhwZWN0aW5nIGNvbnRleHTigKZcbiAgICAgICAgICAkc3BhbjogJGl0ZW07XG4gICAgICAgIH0gQGVsc2UgaWYgKCRvZikgYW5kIChub3QgJGNvbHVtbnMpIHtcbiAgICAgICAgICAvLyBXZSBhcmUgZXhwZWN0aW5nIGNvbnRleHTigKZcbiAgICAgICAgICAkY29sdW1uczogJGl0ZW07XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICRlcnJvcjogdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgJGVycm9yOiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiAkZXJyb3Ige1xuICAgICAgQHJldHVybiBfc3VzeS1lcnJvcignI3skcGFyc2UtZXJyb3J9ICN7JGRldGFpbHN9JywgJ3N1c3ktcGFyc2UnKTtcbiAgICB9XG4gIH1cblxuICAvLyBJZiB3ZSBoYXZlIHNwYW4sIG1lcmdlIGl0IGluXG4gIEBpZiAkc3BhbiB7XG4gICAgJHJldHVybjogbWFwLW1lcmdlKCRyZXR1cm4sICgnc3Bhbic6ICRzcGFuKSk7XG4gIH1cblxuICAvLyBJZiB3ZSBoYXZlIGNvbHVtbnMsIG1lcmdlIHRoZW0gaW5cbiAgQGlmICRjb2x1bW5zIHtcbiAgICAkcmV0dXJuOiBtYXAtbWVyZ2UoJHJldHVybiwgKCdjb2x1bW5zJzogJGNvbHVtbnMpKTtcbiAgfVxuXG4gIC8vIFJldHVybiB0aGUgbWFwIG9mIHNldHRpbmdz4oCmXG4gIEByZXR1cm4gJHJldHVybjtcbn1cbiIsIi8vLyBTeW50YXggVXRpbGl0aWVzIGZvciBFeHRlbmRpbmcgU3VzeVxuLy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLy8gVGhlcmUgYXJlIG1hbnkgc3RlcHMgaW52b2x2ZWRcbi8vLyB3aGVuIHRyYW5zbGF0aW5nIGJldHdlZW4gdGhlIFN1c3kgc3ludGF4IGxheWVyLFxuLy8vIGFuZCB0aGUgU3UgY29yZSBtYXRoLlxuLy8vIFRoYXQgZW50aXJlIHByb2Nlc3MgY2FuIGJlIGNvbmRlbnNlZCB3aXRoIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4vLy8gRm9yIGFueW9uZSB0aGF0IHdhbnRzIHRvIGFjY2VzcyB0aGUgZnVsbCBwb3dlciBvZiBTdXN5LFxuLy8vIGFuZCBidWlsZCB0aGVpciBvd24gcGx1Z2lucywgZnVuY3Rpb25zLCBvciBtaXhpbnMg4oCTXG4vLy8gdGhpcyBpcyB0aGUgcHJpbWFyeSBBUEkgZm9yIGNvbXBpbGluZyB1c2VyIGlucHV0LFxuLy8vIGFuZCBhY2Nlc3NpbmcgdGhlIGNvcmUgbWF0aC5cbi8vL1xuLy8vIFRoaXMgaXMgdGhlIHNhbWUgdGVjaG5pcXVlIHdlIHVzZSBpbnRlcm5hbGx5LFxuLy8vIHRvIGtlZXAgb3VyIEFQSSBsYXllciBzaW1wbGUgYW5kIGxpZ2h0LXdlaWdodC5cbi8vLyBFdmVyeSBmdW5jdGlvbiBhY2NlcHRzIHR3byBhcmd1bWVudHMsXG4vLy8gYSBcInNob3J0aGFuZFwiIGRlc2NyaXB0aW9uIG9mIHRoZSBzcGFuIG9yIGNvbnRleHQsXG4vLy8gYW5kIGFuIG9wdGlvbmFsIHNldHRpbmdzLW1hcCB0byBvdmVycmlkZSBnbG9iYWwgZGVmYXVsdHMuXG4vLy9cbi8vLyAtIFVzZSBgc3VzeS1jb21waWxlKClgIHRvIHBhcnNlLCBtZXJnZSwgYW5kIG5vcm1hbGl6ZVxuLy8vICAgYWxsIHRoZSB1c2VyIHNldHRpbmdzIGludG8gYSBzaW5nbGUgbWFwLlxuLy8vIC0gVGhlbiB1c2UgYHN1LWNhbGwoKWAgdG8gY2FsbCBvbmUgb2YgdGhlIGNvcmUgbWF0aCBmdW5jdGlvbnMsXG4vLy8gICB3aXRoIHdoYXRldmVyIGRhdGEgaXMgbmVlZGVkIGZvciB0aGF0IGZ1bmN0aW9uLlxuLy8vXG4vLy8gQGdyb3VwIHBsdWdpbi11dGlsc1xuLy8vIEBzZWUgc3VzeS1jb21waWxlXG4vLy8gQHNlZSBzdS1jYWxsXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gU3VzeSBBUEkgYGd1dHRlcmAgZnVuY3Rpb25cbi8vLyAgIEBmdW5jdGlvbiBzdXN5LWd1dHRlcihcbi8vLyAgICAgJGNvbnRleHQ6IHN1c3ktZ2V0KCdjb2x1bW5zJyksXG4vLy8gICAgICRjb25maWc6ICgpXG4vLy8gICApIHtcbi8vLyAgICAgLy8gY29tcGlsZSBhbmQgbm9ybWFsaXplIGFsbCB1c2VyIGFyZ3VtZW50cyBhbmQgZ2xvYmFsIHNldHRpbmdzXG4vLy8gICAgICRjb250ZXh0OiBzdXN5LWNvbXBpbGUoJGNvbnRleHQsICRjb25maWcsICdjb250ZXh0LW9ubHknKTtcbi8vLyAgICAgLy8gY2FsbCBgc3UtZ3V0dGVyYCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBkYXRhXG4vLy8gICAgIEByZXR1cm4gc3UtY2FsbCgnc3UtZ3V0dGVyJywgJGNvbnRleHQpO1xuLy8vICAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFNhbXBsZSBgc3BhbmAgbWl4aW4gZm9yIGZsb2F0ZWQgZ3JpZHNcbi8vLyAgIEBtaXhpbiBzcGFuKFxuLy8vICAgICAkc3Bhbixcbi8vLyAgICAgJGNvbmZpZzogKClcbi8vLyAgICkge1xuLy8vICAgICAkY29udGV4dDogc3VzeS1jb21waWxlKCRzcGFuLCAkY29uZmlnKTtcbi8vLyAgICAgd2lkdGg6IHN1LWNhbGwoJ3N1LXNwYW4nLCAkY29udGV4dCk7XG4vLy9cbi8vLyAgICAgJGVuZDogbWFwLWdldCgkY29udGV4dCwgJ3NwYW4nKSArIG1hcC1nZXQoJGNvbnRleHQsICdsb2NhdGlvbicpIC0gMTtcbi8vLyAgICAgJGlzLWxhc3Q6ICgkZW5kID09IG1hcC1nZXQoJGNvbnRleHQsICdjb2x1bW5zJykpO1xuLy8vXG4vLy8gICAgIEBpZiAkaXMtbGFzdCB7XG4vLy8gICAgICAgZmxvYXQ6IHJpZ2h0O1xuLy8vICAgICB9IEBlbHNlIHtcbi8vLyAgICAgICBmbG9hdDogbGVmdDtcbi8vLyAgICAgICBtYXJnaW4tcmlnaHQ6IHN1LWNhbGwoJ3N1LWd1dHRlcicsICRjb250ZXh0KTtcbi8vLyAgICAgfVxuLy8vICAgfVxuXG5cblxuLy8gQ29tcGlsZVxuLy8gLS0tLS0tLVxuLy8vIFN1c3kncyBzeW50YXggbGF5ZXIgaGFzIHZhcmlvdXMgbW92aW5nIHBhcnRzLFxuLy8vIHdpdGggc3ludGF4LXBhcnNpbmcgZm9yIHRoZSBncmlkL3NwYW4gc2hvcnRoYW5kLFxuLy8vIGFuZCBub3JtYWxpemF0aW9uIGZvciBlYWNoIG9mIHRoZSByZXN1bHRpbmcgdmFsdWVzLlxuLy8vIFRoZSBjb21waWxlIGZ1bmN0aW9uIHJvbGxzIHRoaXMgYWxsIHRvZ2V0aGVyXG4vLy8gaW4gYSBzaW5nbGUgY2FsbCDigJNcbi8vLyBmb3IgcXVpY2sgYWNjZXNzIGZyb20gb3VyIGludGVybmFsIEFQSSBmdW5jdGlvbnMsXG4vLy8gb3IgYW55IGFkZGl0aW9uYWwgZnVuY3Rpb25zIGFuZCBtaXhpbnMgeW91IGFkZCB0byB5b3VyIHByb2plY3QuXG4vLy8gUGFzcyB1c2VyIGlucHV0IGFuZCBjb25maWd1cmF0aW9uIG1hcHMgdG8gdGhlIGNvbXBpbGVyLFxuLy8vIGFuZCBpdCB3aWxsIGhhbmQgYmFjayBhIG1hcCBvZiB2YWx1ZXMgcmVhZHkgZm9yIFN1LlxuLy8vIENvbWJpbmUgdGhpcyB3aXRoIHRoZSBgc3UtY2FsbGAgZnVuY3Rpb25cbi8vLyB0byBxdWlja2x5IHBhcnNlLCBub3JtYWxpemUsIGFuZCBwcm9jZXNzIGdyaWQgY2FsY3VsYXRpb25zLlxuLy8vXG4vLy8gQGdyb3VwIHBsdWdpbi11dGlsc1xuLy8vIEBzZWUgc3UtY2FsbFxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0IHwgbWFwfSAkc2hvcnQgW251bGxdIC1cbi8vLyAgIFNob3J0aGFuZCBleHByZXNzaW9uIHRvIGRlZmluZSB0aGUgd2lkdGggb2YgdGhlIHNwYW4sXG4vLy8gICBvcHRpb25hbGx5IGNvbnRhaW5pbmc6XG4vLy8gICAtIGEgY291bnQsIGxlbmd0aCwgb3IgY29sdW1uLWxpc3Qgc3Bhbjtcbi8vLyAgIC0gYGF0ICRuYCwgYGZpcnN0YCwgb3IgYGxhc3RgIGxvY2F0aW9uIG9uIGFzeW1tZXRyaWNhbCBncmlkcztcbi8vLyAgIC0gYG5hcnJvd2AsIGB3aWRlYCwgb3IgYHdpZGVyYCBmb3Igb3B0aW9uYWxseSBzcHJlYWRpbmdcbi8vLyAgICAgYWNyb3NzIGFkamFjZW50IGd1dHRlcnM7XG4vLy8gICAtIGBvZiAkbiA8c3ByZWFkPmAgZm9yIGF2YWlsYWJsZSBncmlkIGNvbHVtbnNcbi8vLyAgICAgYW5kIHNwcmVhZCBvZiB0aGUgY29udGFpbmVyXG4vLy8gICAgIChzcGFuIGNvdW50cyBsaWtlIGBvZiA2YCBhcmUgb25seSB2YWxpZFxuLy8vICAgICBpbiB0aGUgY29udGV4dCBvZiBzeW1tZXRyaWNhbCBncmlkcyk7XG4vLy8gICAtIGFuZCBgc2V0LWd1dHRlcnMgJG5gIHRvIG92ZXJyaWRlIGdsb2JhbCBndXR0ZXIgc2V0dGluZ3Ncbi8vLyBAcGFyYW0ge21hcH0gJGNvbmZpZyBbbnVsbF0gLVxuLy8vICAgT3B0aW9uYWwgbWFwIG9mIFN1c3kgZ3JpZCBjb25maWd1cmF0aW9uIHNldHRpbmdzXG4vLy8gQHBhcmFtIHtib29sfSAkY29udGV4dC1vbmx5IFtmYWxzZV0gLVxuLy8vICAgQWxsb3cgdGhlIHBhcnNlciB0byBpZ25vcmUgc3BhbiBhbmQgc3Bhbi1zcHJlYWQgdmFsdWVzLFxuLy8vICAgb25seSBwYXJzaW5nIGNvbnRleHQgYW5kIGNvbnRhaW5lci1zcHJlYWRcbi8vL1xuLy8vIEByZXR1cm4ge21hcH0gLVxuLy8vICAgUGFyc2VkIGFuZCBub3JtYWxpemVkIG1hcCBvZiBzZXR0aW5ncyxcbi8vLyAgIGJhc2VkIG9uIGdsb2JhbCBhbmQgbG9jYWwgY29uZmlndXJhdGlvbixcbi8vLyAgIGFsb25nd2l0aCBzaG9ydGhhZCBhZGp1c3RtZW50cy5cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLVxuLy8vICAgJHVzZXItaW5wdXQ6IDMgd2lkZSBvZiBzdXN5LXJlcGVhdCg2LCAxMjBweCkgc2V0LWd1dHRlcnMgMTBweDtcbi8vLyAgICRncmlkLWRhdGE6IHN1c3ktY29tcGlsZSgkdXNlci1pbnB1dCwgJHN1c3kpO1xuLy8vXG4vLy8gICBAZWFjaCAka2V5LCAkdmFsdWUgaW4gJGdyaWQtZGF0YSB7XG4vLy8gICAgIC8qICN7JGtleX06ICN7JHZhbHVlfSwgKi9cbi8vLyAgIH1cbkBmdW5jdGlvbiBzdXN5LWNvbXBpbGUoXG4gICRzaG9ydDogbnVsbCxcbiAgJGNvbmZpZzogbnVsbCxcbiAgJGNvbnRleHQtb25seTogZmFsc2Vcbikge1xuICAvLyBHZXQgYW5kIG5vcm1hbGl6ZSBjb25maWdcbiAgJGNvbmZpZzogaWYoJGNvbmZpZywgc3VzeS1zZXR0aW5ncygkY29uZmlnKSwgc3VzeS1zZXR0aW5ncygpKTtcbiAgJG5vcm1hbC1jb25maWc6IHN1c3ktbm9ybWFsaXplKCRjb25maWcpO1xuXG4gIC8vIFBhcnNlIGFuZCBub3JtYWxpemUgc2hvcnRoYW5kXG4gICRub3JtYWwtc2hvcnQ6ICgpO1xuXG4gIEBpZiAkc2hvcnQge1xuICAgIEBpZiAodHlwZS1vZigkc2hvcnQpICE9ICdtYXAnKSBhbmQgKGxlbmd0aCgkc2hvcnQpID4gMCkge1xuICAgICAgJHNob3J0OiBzdXN5LXBhcnNlKCRzaG9ydCwgJGNvbnRleHQtb25seSk7XG4gICAgfVxuXG4gICAgJG5vcm1hbC1zaG9ydDogc3VzeS1ub3JtYWxpemUoJHNob3J0LCAkbm9ybWFsLWNvbmZpZyk7XG4gIH1cblxuICAvLyBNZXJnZSBhbmQgcmV0dXJuXG4gIEByZXR1cm4gbWFwLW1lcmdlKCRub3JtYWwtY29uZmlnLCAkbm9ybWFsLXNob3J0KTtcbn1cblxuXG5cbi8vIENhbGxcbi8vIC0tLS1cbi8vLyBUaGUgU3VzeSBwYXJzaW5nIGFuZCBub3JtYWxpemF0aW9uIHByb2Nlc3Ncbi8vLyByZXN1bHRzIGluIGEgbWFwIG9mIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsXG4vLy8gbXVjaCBsaWtlIHRoZSBnbG9iYWwgYCRzdXN5YCBzZXR0aW5ncyBtYXAuXG4vLy8gSW4gb3JkZXIgdG8gcGFzcyB0aGF0IGluZm9ybWF0aW9uIGFsb25nIHRvIFN1IG1hdGggZnVuY3Rpb25zLFxuLy8vIHRoZSBwcm9wZXIgdmFsdWVzIGhhdmUgdG8gYmUgcGlja2VkIG91dCxcbi8vLyBhbmQgY29udmVydGVkIHRvIGFyZ3VtZW50cy5cbi8vL1xuLy8vIFRoZSBgc3UtY2FsbGAgZnVuY3Rpb24gc3RyZWFtbGluZXMgdGhhdCBwcm9jZXNzLFxuLy8vIHdlZWRpbmcgb3V0IHRoZSB1bm5lY2Vzc2FyeSBkYXRhLFxuLy8vIGFuZCBwYXNzaW5nIHRoZSByZXN0IGFsb25nIHRvIFN1IGluIHRoZSBwcm9wZXIgZm9ybWF0LlxuLy8vIENvbWJpbmUgdGhpcyB3aXRoIGBzdXN5LWNvbXBpbGVgIHRvIHF1aWNrbHkgcGFyc2UsXG4vLy8gbm9ybWFsaXplLCBhbmQgcHJvY2VzcyBncmlkIGNhbGN1bGF0aW9ucy5cbi8vL1xuLy8vIEBncm91cCBwbHVnaW4tdXRpbHNcbi8vL1xuLy8vIEByZXF1aXJlIHN1LXNwYW5cbi8vLyBAcmVxdWlyZSBzdS1ndXR0ZXJcbi8vLyBAcmVxdWlyZSBzdS1zbGljZVxuLy8vIEBzZWUgc3VzeS1jb21waWxlXG4vLy9cbi8vLyBAcGFyYW0geydzdS1zcGFuJyB8ICdzdS1ndXR0ZXInIHwgJ3N1LXNsaWNlJ30gJG5hbWUgLVxuLy8vICAgTmFtZSBvZiB0aGUgU3UgbWF0aCBmdW5jdGlvbiB0byBjYWxsLlxuLy8vIEBwYXJhbSB7bWFwfSAkY29uZmlnIC1cbi8vLyAgIFBhcnNlZCBhbmQgbm9ybWFsaXplZCBtYXAgb2YgU3VzeSBjb25maWd1cmF0aW9uIHNldHRpbmdzXG4vLy8gICB0byB1c2UgZm9yIG1hdGgtZnVuY3Rpb24gYXJndW1lbnRzLlxuLy8vXG4vLy8gQHJldHVybiB7Kn0gLVxuLy8vICAgUmVzdWx0cyBvZiB0aGUgZnVuY3Rpb24gYmVpbmcgY2FsbGVkLlxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtXG4vLy8gICAkdXNlci1pbnB1dDogMyB3aWRlIG9mIHN1c3ktcmVwZWF0KDYsIDEyMHB4KSBzZXQtZ3V0dGVycyAxMHB4O1xuLy8vICAgJGdyaWQtZGF0YTogc3VzeS1jb21waWxlKCR1c2VyLWlucHV0LCAkc3VzeSk7XG4vLy9cbi8vLyAgIC5zdS1zcGFuIHtcbi8vLyAgICAgd2lkdGg6IHN1LWNhbGwoJ3N1LXNwYW4nLCAkZ3JpZC1kYXRhKTtcbi8vLyAgIH1cbkBmdW5jdGlvbiBzdS1jYWxsKFxuICAkbmFtZSxcbiAgJGNvbmZpZ1xuKSB7XG4gICRncmlkLWZ1bmN0aW9uLWFyZ3M6IChcbiAgICAnc3Utc3Bhbic6ICgnc3BhbicsICdjb2x1bW5zJywgJ2d1dHRlcnMnLCAnc3ByZWFkJywgJ2NvbnRhaW5lci1zcHJlYWQnLCAnbG9jYXRpb24nKSxcbiAgICAnc3UtZ3V0dGVyJzogKCdjb2x1bW5zJywgJ2d1dHRlcnMnLCAnY29udGFpbmVyLXNwcmVhZCcpLFxuICAgICdzdS1zbGljZSc6ICgnc3BhbicsICdjb2x1bW5zJywgJ2xvY2F0aW9uJyksXG4gICk7XG5cbiAgJGFyZ3M6IG1hcC1nZXQoJGdyaWQtZnVuY3Rpb24tYXJncywgJG5hbWUpO1xuXG4gIEBpZiBub3QgJGFyZ3Mge1xuICAgICRvcHRpb25zOiAnVHJ5IG9uZSBvZiB0aGVzZTogI3ttYXAta2V5cygkZ3JpZC1mdW5jdGlvbi1hcmdzKX0nO1xuICAgIEByZXR1cm4gX3N1c3ktZXJyb3IoXG4gICAgICAnI3skbmFtZX0gaXMgbm90IGEgcHVibGljIFN1IGZ1bmN0aW9uLiAjeyRvcHRpb25zfScsXG4gICAgICAnc3UtY2FsbCcpO1xuICB9XG5cbiAgJGNhbGw6IGlmKGZ1bmN0aW9uLWV4aXN0cygnZ2V0LWZ1bmN0aW9uJyksIGdldC1mdW5jdGlvbigkbmFtZSksICRuYW1lKTtcbiAgJG91dHB1dDogKCk7XG5cbiAgQGVhY2ggJGFyZyBpbiAkYXJncyB7XG4gICAgJHZhbHVlOiBtYXAtZ2V0KCRjb25maWcsICRhcmcpO1xuICAgICRvdXRwdXQ6IGlmKCR2YWx1ZSwgbWFwLW1lcmdlKCRvdXRwdXQsICgkYXJnOiAkdmFsdWUpKSwgJG91dHB1dCk7XG4gIH1cblxuICBAcmV0dXJuIGNhbGwoJGNhbGwsICRvdXRwdXQuLi4pO1xufVxuIiwiLy8vIFN1c3kzIEFQSSBGdW5jdGlvbnNcbi8vLyA9PT09PT09PT09PT09PT09PT09XG4vLy8gVGhlc2UgdGhyZWUgZnVuY3Rpb25zIGZvcm0gdGhlIGNvcmUgb2YgU3VzeSdzXG4vLy8gbGF5b3V0LWJ1aWxkaW5nIGdyaWQgQVBJLlxuLy8vXG4vLy8gLSBVc2UgYHNwYW4oKWAgYW5kIGBndXR0ZXIoKWAgdG8gcmV0dXJuIGFueSBncmlkLXdpZHRoLFxuLy8vICAgYW5kIGFwcGx5IHRoZSByZXN1bHRzIHdoZXJldmVyIHlvdSBuZWVkIHRoZW06XG4vLy8gICBDU1MgYHdpZHRoYCwgYG1hcmdpbmAsIGBwYWRkaW5nYCwgYGZsZXgtYmFzaXNgLCBgdHJhbnNmb3JtYCwgZXRjLlxuLy8vIC0gRm9yIGFzeW1tZXRyaWNhbC1mbHVpZCBncmlkcyxcbi8vLyAgIGBzbGljZSgpYCBjYW4gaGVscCBtYW5hZ2UgeW91ciBuZXN0aW5nIGNvbnRleHQuXG4vLy9cbi8vLyBBbGwgdGhyZWUgZnVuY3Rpb25zIGNvbWUgd2l0aCBhbiB1bnByZWZpeGVkIGFsaWFzIGJ5IGRlZmF1bHQsXG4vLy8gdXNpbmcgdGhlIGBzdXN5YCBpbXBvcnQuXG4vLy8gSW1wb3J0IHRoZSBgc3VzeS1wcmVmaXhgIHBhcnRpYWwgaW5zdGVhZCxcbi8vLyBpZiB5b3Ugb25seSBvbmx5IHdhbnQgcHJlZml4ZWQgdmVyc2lvbnMgb2YgdGhlIEFQSS5cbi8vL1xuLy8vIFRoaXMgaXMgYSB0aGluIHN5bnRheC1zdWdhciBzaGVsbCBhcm91bmRcbi8vLyB0aGUgXCJTdVwiIGNvcmUtbWF0aCBmdW5jdGlvbnM6IGBzdS1zcGFuYCwgYHN1LWd1dHRlcmAsIGFuZCBgc3Utc2xpY2VgLlxuLy8vIElmIHlvdSBwcmVmZXIgdGhlIG1vcmUgY29uc3RyYWluZWQgc3ludGF4IG9mIHRoZSBtYXRoIGVuZ2luZSxcbi8vLyB5b3UgYXJlIHdlbGNvbWUgdG8gdXNlIHRob3NlIGZ1bmN0aW9ucyBpbnN0ZWFkLlxuLy8vXG4vLy8gQGdyb3VwIGFwaVxuLy8vIEBzZWUgc3VzeS1zcGFuXG4vLy8gQHNlZSBzdXN5LWd1dHRlclxuLy8vIEBzZWUgc3VzeS1zbGljZVxuLy8vIEBzZWUgc3Utc3BhblxuLy8vIEBzZWUgc3UtZ3V0dGVyXG4vLy8gQHNlZSBzdS1zbGljZVxuXG5cblxuLy8vICMjIFNob3J0aGFuZFxuLy8vXG4vLy8gQWxsIGZ1bmN0aW9ucyBkcmF3IG9uIHRoZSBzYW1lIHNob3J0aGFuZCBzeW50YXggaW4gdHdvIHBhcnRzLFxuLy8vIHNlcGVyYXRlZCBieSB0aGUgd29yZCBgb2ZgLlxuLy8vXG4vLy8gIyMjIFNwYW4gU3ludGF4OiBgPHdpZHRoPmAgW2A8bG9jYXRpb24+YCBgPHNwcmVhZD5gXVxuLy8vIFRoZSBmaXJzdCBwYXJ0IGRlc2NyaWJlcyB0aGVcbi8vLyAqKnNwYW4qKiB3aWR0aCwgbG9jYXRpb24sIGFuZCBzcHJlYWQgaW4gYW55IG9yZGVyLlxuLy8vIE9ubHkgdGhlIHdpZHRoIGlzIHJlcXVpcmVkOlxuLy8vXG4vLy8gLSBgc3BhbigyKWAgd2lsbCByZXR1cm4gdGhlIHdpZHRoIG9mIDIgY29sdW1ucy5cbi8vLyAtIGBzcGFuKDMgd2lkZSlgIHdpbGwgcmV0dXJuIDMtY29sdW1ucywgd2l0aCBhbiBhZGRpdGlvbmFsIGd1dHRlci5cbi8vLyAtIGxvY2F0aW9uIGlzIG9ubHkgbmVlZGVkIHdpdGggYXN5bW1ldHJpY2FsIGdyaWRzLFxuLy8vICAgd2hlcmUgYHNwYW4oMyBhdCAyKWAgd2lsbCByZXR1cm4gdGhlIHdpZHRoIG9mXG4vLy8gICBzcGVjaWZpYyBjb2x1bW5zIG9uIHRoZSBncmlkLlxuLy8vICAgU2luY2UgdGhlc2UgYXJlIGZ1bmN0aW9ucywgdGhleSB3aWxsIG5vdCBoYW5kbGUgcGxhY2VtZW50IGZvciB5b3UuXG4vLy9cbi8vLyAjIyMgQ29udGV4dCBTeW50YXg6IGBbb2YgPGNvbHVtbnM+IDxjb250YWluZXItc3ByZWFkPiA8Z3V0dGVycz5dYFxuLy8vIFRoZSBzZWNvbmQgaGFsZiBvZiBTdXN5J3Mgc2hvcnRoYW5kXG4vLy8gZGVzY3JpYmVzIHRoZSBncmlkLSoqY29udGV4dCoqIOKAk1xuLy8vIGF2YWlsYWJsZSBjb2x1bW5zLCBjb250YWluZXItc3ByZWFkLCBhbmQgb3B0aW9uYWwgZ3V0dGVyIG92ZXJyaWRlIOKAk1xuLy8vIGluIGFueSBvcmRlci5cbi8vLyBBbGwgb2YgdGhlc2Ugc2V0dGluZ3MgaGF2ZSBnbG9iYWxseS1kZWZpbmVkIGRlZmF1bHRzOlxuLy8vXG4vLy8gLSBgc3BhbigyIG9mIDYpYCB3aWxsIHNldCB0aGUgY29udGV4dCB0b1xuLy8vICAgYSBzbGljZSBvZiA2IGNvbHVtbnMgZnJvbSB0aGUgZ2xvYmFsIGdyaWQuXG4vLy8gICBNb3JlIGRldGFpbHMgYmVsb3cuXG4vLy8gLSBgc3BhbigyIG9mIDEyIHdpZGUpYCBjaGFuZ2VzIHRoZSBjb250YWluZXItc3ByZWFkXG4vLy8gICBhcyB3ZWxsIGFzIHRoZSBjb2x1bW4tY29udGV4dC5cbi8vLyAtIGBzcGFuKDIgb2YgMTIgc2V0LWd1dHRlcnMgMC41ZW0pYFxuLy8vICAgd2lsbCBvdmVycmlkZSB0aGUgZ2xvYmFsIGd1dHRlcnMgc2V0dGluZ1xuLy8vICAgZm9yIHRoaXMgb25lIGNhbGN1bGF0aW9uLlxuLy8vXG4vLy8gQSBzaW5nbGUgdW5pdGxlc3MgbnVtYmVyIGZvciBgY29sdW1uc2Bcbi8vLyB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBzbGljZSBvZiB0aGUgcGFyZW50IGdyaWQuXG4vLy8gT24gYSBncmlkIHdpdGggYGNvbHVtbnM6IHN1c3ktcmVwZWF0KDEyLCAxMjBweClgLFxuLy8vIHRoZSBzaG9ydGhhbmQgYG9mIDRgIHdpbGwgdXNlIHRoZSBwYXJlbnQgYDEyMHB4YCBjb2x1bW4td2lkdGguXG4vLy8gWW91IGNhbiBhbHNvIGJlIG1vcmUgZXhwbGljaXQsXG4vLy8gYW5kIHNheSBgb2Ygc3VzeS1yZXBlYXQoNCwgMTAwcHgpYC5cbi8vLyBJZiB5b3UgYXJlIHVzaW5nIGFzeW1tZXRyaWNhbCBncmlkcyxcbi8vLyBsaWtlIGBjb2x1bW5zOiAoMSAxIDIgMyA1IDgpYCxcbi8vLyBTdXN5IGNhbid0IHNsaWNlIGl0IGZvciB5b3Ugd2l0aG91dCBrbm93aW5nIHdoaWNoIGNvbHVtbnMgeW91IHdhbnQuXG4vLy8gVGhlIGBzbGljZWAgZnVuY3Rpb24gYWNjZXB0cyBleGFjdGx5IHRoZSBzYW1lIHN5bnRheCBhcyBgc3BhbmAsXG4vLy8gYnV0IHJldHVybnMgYSBsaXN0IG9mIGNvbHVtbnMgcmF0aGVyIHRoYW4gYSB3aWR0aC5cbi8vLyBVc2UgaXQgaW4geW91ciBjb250ZXh0IGxpa2UgYG9mIHNsaWNlKGZpcnN0IDMpYC5cbi8vL1xuLy8vIEBncm91cCBhcGlcblxuXG5cbi8vIFN1c3kgU3BhblxuLy8gLS0tLS0tLS0tXG4vLy8gVGhpcyBpcyB0aGUgcHJpbWFyeSBmdW5jdGlvbiBpbiBTdXN5IOKAlFxuLy8vIHVzZWQgdG8gcmV0dXJuIHRoZSB3aWR0aCBvZiBhIHNwYW4gYWNyb3NzIG9uZSBvciBtb3JlIGNvbHVtbnMsXG4vLy8gYW5kIGFueSByZWxldmFudCBndXR0ZXJzIGFsb25nIHRoZSB3YXkuXG4vLy8gV2l0aCB0aGUgZGVmYXVsdCBzZXR0aW5ncyxcbi8vLyBgc3BhbigzKWAgd2lsbCByZXR1cm4gdGhlIHdpZHRoIG9mIDMgY29sdW1ucyxcbi8vLyBhbmQgdGhlIDIgaW50ZXJtZWRpYXRlIGd1dHRlcnMuXG4vLy8gVGhpcyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGB3aWR0aGAgcHJvcGVydHkgb2YgZ3JpZCBlbGVtZW50cyxcbi8vLyBvciBgbWFyZ2luYCBhbmQgYHBhZGRpbmdgXG4vLy8gdG8gcHVzaCwgcHVsbCwgYW5kIHBhZCB5b3VyIGVsZW1lbnRzLlxuLy8vXG4vLy8gLSBUaGlzIGlzIGEgdGhpbiBzeW50YXgtc3VnYXIgc2hlbGwgYXJvdW5kXG4vLy8gICB0aGUgY29yZS1tYXRoIGBzdS1zcGFuKClgIGZ1bmN0aW9uLlxuLy8vIC0gVGhlIHVuLXByZWZpeGVkIGFsaWFzIGBzcGFuKClgIGlzIGF2YWlsYWJsZSBieSBkZWZhdWx0LlxuLy8vXG4vLy8gQGdyb3VwIGFwaVxuLy8vIEBzZWUgc3Utc3BhblxuLy8vIEBzZWUgJHN1c3lcbi8vL1xuLy8vIEBwYXJhbSB7bGlzdH0gJHNwYW4gLVxuLy8vICAgU2hvcnRoYW5kIGV4cHJlc3Npb24gdG8gZGVmaW5lIHRoZSB3aWR0aCBvZiB0aGUgc3Bhbixcbi8vLyAgIG9wdGlvbmFsbHkgY29udGFpbmluZzpcbi8vLyAgIC0gYSBjb3VudCwgbGVuZ3RoLCBvciBjb2x1bW4tbGlzdCBzcGFuLlxuLy8vICAgLSBgYXQgJG5gLCBgZmlyc3RgLCBvciBgbGFzdGAgbG9jYXRpb24gb24gYXN5bW1ldHJpY2FsIGdyaWRzLFxuLy8vICAgICB3aGVyZSBgYXQgMSA9PSBmaXJzdGAsXG4vLy8gICAgIGFuZCBgbGFzdGAgd2lsbCBjYWxjdWxhdGUgdGhlIHByb3BlciBsb2NhdGlvblxuLy8vICAgICBiYXNlZCBvbiBjb2x1bW5zIGFuZCBzcGFuLlxuLy8vICAgLSBgbmFycm93YCwgYHdpZGVgLCBvciBgd2lkZXJgIGZvciBvcHRpb25hbGx5IHNwcmVhZGluZ1xuLy8vICAgICBhY3Jvc3MgYWRqYWNlbnQgZ3V0dGVycy5cbi8vLyAgIC0gYG9mICRuIDxzcHJlYWQ+YCBmb3IgYXZhaWxhYmxlIGdyaWQgY29sdW1uc1xuLy8vICAgICBhbmQgc3ByZWFkIG9mIHRoZSBjb250YWluZXIuXG4vLy8gICAgIFNwYW4gY291bnRzIGxpa2UgYG9mIDZgIGFyZSB2YWxpZFxuLy8vICAgICBpbiB0aGUgY29udGV4dCBvZiBzeW1tZXRyaWNhbCBncmlkcyxcbi8vLyAgICAgd2hlcmUgU3VzeSBjYW4gc2FmZWx5IGluZmVyIGEgc2xpY2Ugb2YgdGhlIHBhcmVudCBjb2x1bW5zLlxuLy8vICAgLSBhbmQgYHNldC1ndXR0ZXJzICRuYCB0byBvdmVycmlkZSBnbG9iYWwgZ3V0dGVyIHNldHRpbmdzLlxuLy8vXG4vLy8gQHBhcmFtIHttYXB9ICRjb25maWcgWygpXSAtXG4vLy8gICBPcHRpb25hbCBtYXAgb2YgU3VzeSBncmlkIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuXG4vLy8gICBTZWUgYCRzdXN5YCBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLlxuLy8vXG4vLy8gQHJldHVybiB7bGVuZ3RofSAtXG4vLy8gICBDYWxjdWxhdGVkIGxlbmd0aCB2YWx1ZSwgdXNpbmcgdGhlIHVuaXRzIGdpdmVuLFxuLy8vICAgb3IgY29udmVydGluZyB0byBgJWAgZm9yIGZyYWN0aW9uLWJhc2VkIGdyaWRzLFxuLy8vICAgb3IgYSBmdWxsIGBjYWxjYCBmdW5jdGlvbiB3aGVuIHVuaXRzL2ZyYWN0aW9uc1xuLy8vICAgYXJlIG5vdCBjb21wYXJhYmxlIG91dHNpZGUgdGhlIGJyb3dzZXIuXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gc3BhbiBoYWxmIHRoZSBncmlkXG4vLy8gICAuZm9vIHtcbi8vLyAgICAgLy8gdGhlIHJlc3VsdCBpcyBhIGJpdCB1bmRlciA1MCUgdG8gYWNjb3VudCBmb3IgZ3V0dGVyc1xuLy8vICAgICB3aWR0aDogc3VzeS1zcGFuKDYgb2YgMTIpO1xuLy8vICAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIHNwYW4gYSBzcGVjaWZpYyBzZWdtZW50IG9mIGFzeW1tZXRyaWNhbCBncmlkXG4vLy8gICAuZm9vIHtcbi8vLyAgICAgd2lkdGg6IHN1c3ktc3BhbigzIGF0IDMgb2YgKDEgMiAzIDUgOCkpO1xuLy8vICAgfVxuQGZ1bmN0aW9uIHN1c3ktc3BhbihcbiAgJHNwYW4sXG4gICRjb25maWc6ICgpXG4pIHtcbiAgJG91dHB1dDogc3VzeS1jb21waWxlKCRzcGFuLCAkY29uZmlnKTtcblxuICBAaWYgbWFwLWdldCgkb3V0cHV0LCAnc3BhbicpIHtcbiAgICBAcmV0dXJuIHN1LWNhbGwoJ3N1LXNwYW4nLCAkb3V0cHV0KTtcbiAgfVxuXG4gICRhY3R1YWw6ICdbI3t0eXBlLW9mKCRzcGFuKX1dIGAje2luc3BlY3QoJHNwYW4pfWAnO1xuICBAcmV0dXJuIF9zdXN5LWVycm9yKFxuICAgICdVbmFibGUgdG8gZGV0ZXJtaW5lIHNwYW4gdmFsdWUgZnJvbSAjeyRhY3R1YWx9LicsXG4gICAgJ3N1c3ktc3BhbicpO1xufVxuXG5cblxuLy8gU3VzeSBHdXR0ZXJcbi8vIC0tLS0tLS0tLS0tXG4vLy8gVGhlIGd1dHRlciBmdW5jdGlvbiByZXR1cm5zXG4vLy8gdGhlIHdpZHRoIG9mIGEgc2luZ2xlIGd1dHRlciBvbiB5b3VyIGdyaWQsXG4vLy8gdG8gYmUgYXBwbGllZCB3aGVyZSB5b3Ugc2VlIGZpdCDigJNcbi8vLyBvbiBgbWFyZ2luc2AsIGBwYWRkaW5nYCwgYHRyYW5zZm9ybWAsIG9yIGVsZW1lbnQgYHdpZHRoYC5cbi8vL1xuLy8vIC0gVGhpcyBpcyBhIHRoaW4gc3ludGF4LXN1Z2FyIHNoZWxsIGFyb3VuZFxuLy8vICAgdGhlIGNvcmUtbWF0aCBgc3UtZ3V0dGVyKClgIGZ1bmN0aW9uLlxuLy8vIC0gVGhlIHVuLXByZWZpeGVkIGFsaWFzIGBndXR0ZXIoKWAgaXMgYXZhaWxhYmxlIGJ5IGRlZmF1bHQuXG4vLy9cbi8vLyBAZ3JvdXAgYXBpXG4vLy8gQHNlZSBzdS1ndXR0ZXJcbi8vLyBAc2VlICRzdXN5XG4vLy9cbi8vLyBAcGFyYW0ge2xpc3QgfCBudW1iZXJ9ICRjb250ZXh0IFtudWxsXSAtXG4vLy8gICBPcHRpb25hbCBjb250ZXh0IGZvciBuZXN0ZWQgZ3V0dGVycyxcbi8vLyAgIGluY2x1ZGluZyBzaG9ydGhhbmQgZm9yXG4vLy8gICBgY29sdW1uc2AsIGBndXR0ZXJzYCwgYW5kIGBjb250YWluZXItc3ByZWFkYFxuLy8vICAgKGFkZGl0aW9uYWwgc2hvcnRoYW5kIHdpbGwgYmUgaWdub3JlZClcbi8vL1xuLy8vIEBwYXJhbSB7bWFwfSAkY29uZmlnIFsoKV0gLVxuLy8vICAgT3B0aW9uYWwgbWFwIG9mIFN1c3kgZ3JpZCBjb25maWd1cmF0aW9uIHNldHRpbmdzLlxuLy8vICAgU2VlIGAkc3VzeWAgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy5cbi8vL1xuLy8vIEByZXR1cm4ge2xlbmd0aH0gLVxuLy8vICAgV2lkdGggb2YgYSBndXR0ZXIgYXMgYCVgIG9mIGN1cnJlbnQgY29udGV4dCxcbi8vLyAgIG9yIGluIHRoZSB1bml0cyBkZWZpbmVkIGJ5IGBjb2x1bW4td2lkdGhgIHdoZW4gYXZhaWxhYmxlXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gYWRkIGd1dHRlcnMgYmVmb3JlIG9yIGFmdGVyIGFuIGVsZW1lbnRcbi8vLyAgIC5mbG9hdHMge1xuLy8vICAgICBmbG9hdDogbGVmdDtcbi8vLyAgICAgd2lkdGg6IHNwYW4oMyBvZiA2KTtcbi8vLyAgICAgbWFyZ2luLWxlZnQ6IGd1dHRlcihvZiA2KTtcbi8vLyAgIH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBhZGQgZ3V0dGVycyB0byBwYWRkaW5nXG4vLy8gICAuZmxleGJveCB7XG4vLy8gICAgIGZsZXg6IDEgMSBzcGFuKDMgd2lkZSBvZiA2IHdpZGUpO1xuLy8vICAgICBwYWRkaW5nOiBndXR0ZXIob2YgNikgLyAyO1xuLy8vICAgfVxuLy8vXG5AZnVuY3Rpb24gc3VzeS1ndXR0ZXIoXG4gICRjb250ZXh0OiBudWxsLFxuICAkY29uZmlnOiAoKVxuKSB7XG4gICRjb250ZXh0OiBzdXN5LWNvbXBpbGUoJGNvbnRleHQsICRjb25maWcsICdjb250ZXh0LW9ubHknKTtcblxuICBAcmV0dXJuIHN1LWNhbGwoJ3N1LWd1dHRlcicsICRjb250ZXh0KTtcbn1cblxuXG5cbi8vIFN1c3kgU2xpY2Vcbi8vIC0tLS0tLS0tLS1cbi8vLyBXb3JraW5nIHdpdGggYXN5bW1ldHJpY2FsIGdyaWRzICh1bi1lcXVhbCBjb2x1bW4gd2lkdGhzKVxuLy8vIGNhbiBiZSBjaGFsbGVuZ2luZyDigJPCoFxuLy8vIGV4cGVjaWFsbHkgd2hlbiB0aGV5IGludm9sdmUgZmx1aWQvZnJhY3Rpb25hbCBlbGVtZW50cy5cbi8vLyBEZXNjcmliaW5nIGEgY29udGV4dCBgb2YgKDE1ZW0gNmVtIDZlbSA2ZW0gMTVlbSlgIGlzIGEgbG90XG4vLy8gdG8gcHV0IGluc2lkZSB0aGUgc3BhbiBvciBndXR0ZXIgZnVuY3Rpb24gc2hvcnRoYW5kLlxuLy8vIFRoaXMgc2xpY2UgZnVuY3Rpb24gcmV0dXJucyBhIHN1Yi1zbGljZSBvZiBhc3ltbWV0cmljYWwgY29sdW1ucyB0byB1c2Vcbi8vLyBmb3IgYSBuZXN0ZWQgY29udGV4dC5cbi8vLyBgc2xpY2UoMyBhdCAyKWAgd2lsbCBnaXZlIHlvdSBhIHN1YnNldCBvZiB0aGUgZ2xvYmFsIGdyaWQsXG4vLy8gc3Bhbm5pbmcgMyBjb2x1bW5zLCBzdGFydGluZyB3aXRoIHRoZSBzZWNvbmQuXG4vLy9cbi8vLyAtIFRoaXMgaXMgYSB0aGluIHN5bnRheC1zdWdhciBzaGVsbCBhcm91bmRcbi8vLyAgIHRoZSBjb3JlLW1hdGggYHN1LXNsaWNlKClgIGZ1bmN0aW9uLlxuLy8vIC0gVGhlIHVuLXByZWZpeGVkIGFsaWFzIGBzbGljZSgpYCBpcyBhdmFpbGFibGUgYnkgZGVmYXVsdC5cbi8vL1xuLy8vIEBncm91cCBhcGlcbi8vLyBAc2VlIHN1LXNsaWNlXG4vLy8gQHNlZSAkc3VzeVxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0fSAkc3BhbiAtXG4vLy8gICBTaG9ydGhhbmQgZXhwcmVzc2lvbiB0byBkZWZpbmUgdGhlIHN1YnNldCBzcGFuLCBvcHRpb25hbGx5IGNvbnRhaW5pbmc6XG4vLy8gICAtIGBhdCAkbmAsIGBmaXJzdGAsIG9yIGBsYXN0YCBsb2NhdGlvbiBvbiBhc3ltbWV0cmljYWwgZ3JpZHM7XG4vLy8gICAtIGBvZiAkbiA8c3ByZWFkPmAgZm9yIGF2YWlsYWJsZSBncmlkIGNvbHVtbnNcbi8vLyAgICAgYW5kIHNwcmVhZCBvZiB0aGUgY29udGFpbmVyXG4vLy8gICAgIC0gU3Bhbi1jb3VudHMgbGlrZSBgb2YgNmAgYXJlIG9ubHkgdmFsaWRcbi8vLyAgICAgICBpbiB0aGUgY29udGV4dCBvZiBzeW1tZXRyaWNhbCBncmlkc1xuLy8vICAgICAtIFZhbGlkIHNwcmVhZHMgaW5jbHVkZSBgbmFycm93YCwgYHdpZGVgLCBvciBgd2lkZXJgXG4vLy9cbi8vLyBAcGFyYW0ge21hcH0gJGNvbmZpZyBbKCldIC1cbi8vLyAgIE9wdGlvbmFsIG1hcCBvZiBTdXN5IGdyaWQgY29uZmlndXJhdGlvbiBzZXR0aW5ncy5cbi8vLyAgIFNlZSBgJHN1c3lgIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuXG4vLy9cbi8vLyBAcmV0dXJuIHtsaXN0fSAtXG4vLy8gICBTdWJzZXQgbGlzdCBvZiBjb2x1bW5zIGZvciB1c2UgZm9yIGEgbmVzdGVkIGNvbnRleHRcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBSZXR1cm4gYSBuZXN0ZWQgc2VnbWVudCBvZiBhc3ltbWV0cmljYWwgZ3JpZFxuLy8vICAgJGNvbnRleHQ6IHN1c3ktc2xpY2UoMyBhdCAzIG9mICgxIDIgMyA1IDgpKTtcbi8vLyAgIC8qICRjb250ZXh0OiAjeyRjb250ZXh0fTsgKi9cbkBmdW5jdGlvbiBzdXN5LXNsaWNlKFxuICAkc3BhbixcbiAgJGNvbmZpZzogKClcbikge1xuICAkc3Bhbjogc3VzeS1jb21waWxlKCRzcGFuLCAkY29uZmlnKTtcblxuICBAcmV0dXJuIHN1LWNhbGwoJ3N1LXNsaWNlJywgJHNwYW4pO1xufVxuXG5cblxuLy8vICMjIEJ1aWxkaW5nIEdyaWRzXG4vLy8gVGhlIHdlYiBoYXMgY29tZSBhIGxvbmcgd2F5XG4vLy8gc2luY2UgdGhlIGRheXMgb2YgZG91YmxlLW1hcmdpbi1oYWNrc1xuLy8vIGFuZCBpbmNvbnNpc3RlbnQgc3VicGl4ZWwgcm91bmRpbmcuXG4vLy8gSW4gYWRkaXRpb24gdG8gZmxvYXRzIGFuZCB0YWJsZXMsXG4vLy8gd2UgY2FuIG5vdyB1c2UgbXVjaCBtb3JlIHBvd2VyZnVsIHRvb2xzLFxuLy8vIGxpa2UgZmxleGJveCBhbmQgQ1NTIGdyaWQsXG4vLy8gdG8gYnVpbGQgbW9yZSBpbnRlcmVzdGluZyBhbmQgcmVzcG9uc2l2ZSBsYXlvdXRzLlxuLy8vXG4vLy8gV2l0aCBTdXN5Mywgd2UgaG9wZSB5b3UnbGwgc3RhcnQgbW92aW5nIGluIHRoYXQgZGlyZWN0aW9uLlxuLy8vIFlvdSBjYW4gc3RpbGwgYnVpbGQgY2xhc3NpYyAxMi1jb2x1bW4gR3JpZCBTeXN0ZW1zLFxuLy8vIGFuZCB3ZSdsbCBoZWxwIHlvdSBnZXQgdGhlcmUsXG4vLy8gYnV0IFN1c3kzIGlzIHByaW1hcmlseSBkZXNpZ25lZCBmb3IgYSBncmlkLW1hdGgtb24tZGVtYW5kXG4vLy8gYXBwcm9hY2ggdG8gbGF5b3V0OlxuLy8vIGFwcGx5aW5nIG91ciBmdW5jdGlvbnMgb25seSB3aGVyZSB5b3UgcmVhbGx5IG5lZWQgZ3JpZCBtYXRoLlxuLy8vIFJlYWQgdGhlIFtpbnRybyBhcnRpY2xlIGJ5IE9kZEJpcmRdW3dlbGNvbWVdIGZvciBtb3JlIGRldGFpbHMuXG4vLy9cbi8vLyBbd2VsY29tZV06IGh0dHA6Ly9vZGRiaXJkLm5ldC8yMDE3LzA2LzI4L3N1c3kzL1xuLy8vXG4vLy8gQGdyb3VwIGFwaVxuLy8vIEBsaW5rIGh0dHA6Ly9vZGRiaXJkLm5ldC8yMDE3LzA2LzI4L3N1c3kzLyBBcnRpY2xlOiBXZWxjb21lIHRvIFN1c3kzXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gZmxvYXRzXG4vLy8gICAuZmxvYXQge1xuLy8vICAgICB3aWR0aDogc3BhbigzKTtcbi8vLyAgICAgbWFyZ2luLXJpZ2h0OiBndXR0ZXIoKTtcbi8vLyAgIH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBmbGV4Ym94XG4vLy8gICAuZmxleGJveCB7XG4vLy8gICAgIGZsZXg6IDEgMSBzcGFuKDMpO1xuLy8vICAgICAvLyBoYWxmIGEgZ3V0dGVyIG9uIGVpdGhlciBzaWRl4oCmXG4vLy8gICAgIHBhZGRpbmc6IDAgZ3V0dGVyKCkgLyAyO1xuLy8vICAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIHB1c2hpbmcgYW5kIHB1bGxpbmdcbi8vLyAgIC5wdXNoLTMge1xuLy8vICAgICBtYXJnaW4tbGVmdDogc3BhbigzIHdpZGUpO1xuLy8vICAgfVxuLy8vXG4vLy8gICAucHVsbC0zIHtcbi8vLyAgICAgbWFyZ2luLWxlZnQ6IDAgLSBzcGFuKDMgd2lkZSk7XG4vLy8gICB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gYnVpbGRpbmcgYW4gYXR0cmlidXRlIHN5c3RlbVxuLy8vICAgLy8gbWFya3VwIGV4YW1wbGU6IDxkaXYgZGF0YS1zcGFuPVwibGFzdCAzXCI+PC9kaXY+XG4vLy8gICBbZGF0YS1zcGFuXSB7XG4vLy8gICAgIGZsb2F0OiBsZWZ0O1xuLy8vXG4vLy8gICAgICY6bm90KFtkYXRhLXNwYW4qPSdsYXN0J10pIHtcbi8vLyAgICAgICBtYXJnaW4tcmlnaHQ6IGd1dHRlcigpO1xuLy8vICAgICB9XG4vLy8gICB9XG4vLy9cbi8vLyAgIEBmb3IgJHNwYW4gZnJvbSAxIHRocm91Z2ggbGVuZ3RoKHN1c3ktZ2V0KCdjb2x1bW5zJykpIHtcbi8vLyAgICAgW2RhdGEtc3Bhbio9JyN7JHNwYW59J10ge1xuLy8vICAgICAgIHdpZHRoOiBzcGFuKCRzcGFuKTtcbi8vLyAgICAgfVxuLy8vICAgfVxuIiwiLy8gVW5wcmVmaXggU3VzeVxuLy8gPT09PT09PT09PT09PVxuXG5cbi8vIFNwYW5cbi8vIC0tLS1cbi8vLyBVbi1wcmVmaXhlZCBhbGlhcyBmb3IgYHN1c3ktc3BhbmBcbi8vLyAoYXZhaWxhYmxlIGJ5IGRlZmF1bHQpXG4vLy9cbi8vLyBAZ3JvdXAgYXBpXG4vLy8gQGFsaWFzIHN1c3ktc3BhblxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0fSAkc3BhblxuLy8vIEBwYXJhbSB7bWFwfSAkY29uZmlnIFsoKV1cbkBmdW5jdGlvbiBzcGFuKFxuICAkc3BhbixcbiAgJGNvbmZpZzogKClcbikge1xuICBAcmV0dXJuIHN1c3ktc3Bhbigkc3BhbiwgJGNvbmZpZyk7XG59XG5cblxuLy8gR3V0dGVyXG4vLyAtLS0tLS1cbi8vLyBVbi1wcmVmaXhlZCBhbGlhcyBmb3IgYHN1c3ktZ3V0dGVyYFxuLy8vIChhdmFpbGFibGUgYnkgZGVmYXVsdClcbi8vL1xuLy8vIEBncm91cCBhcGlcbi8vLyBAYWxpYXMgc3VzeS1ndXR0ZXJcbi8vL1xuLy8vIEBwYXJhbSB7aW50ZWdlciB8IGxpc3R9ICRjb250ZXh0IFtudWxsXSAtXG4vLy8gQHBhcmFtIHttYXB9ICRjb25maWcgWygpXVxuQGZ1bmN0aW9uIGd1dHRlcihcbiAgJGNvbnRleHQ6IG51bGwsXG4gICRjb25maWc6ICgpXG4pIHtcbiAgQHJldHVybiBzdXN5LWd1dHRlcigkY29udGV4dCwgJGNvbmZpZyk7XG59XG5cblxuLy8gU2xpY2Vcbi8vIC0tLS0tXG4vLy8gVW4tcHJlZml4ZWQgYWxpYXMgZm9yIGBzdXN5LXNsaWNlYFxuLy8vIChhdmFpbGFibGUgYnkgZGVmYXVsdClcbi8vL1xuLy8vIEBncm91cCBhcGlcbi8vLyBAYWxpYXMgc3VzeS1zbGljZVxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0fSAkc3BhblxuLy8vIEBwYXJhbSB7bWFwfSAkY29uZmlnIFsoKV1cbkBmdW5jdGlvbiBzbGljZShcbiAgJHNwYW4sXG4gICRjb25maWc6ICgpXG4pIHtcbiAgQHJldHVybiBzdXN5LXNsaWNlKCRzcGFuLCAkY29uZmlnKTtcbn1cbiIsIi8vPT09PT09PT09PT09PT09PT09PT09PVxuLy/kuLvmoYbmnrboqK3lrpogbWFpblxuLy89PT09PT09PT09PT09PT09PT09PT09XG4vL+ahiOS7tuahhuaetjpcbi8v54CP6Ka95Zmo5a+s5bqm6Kit5a6aKOWQjeeosSDlr6zluqYg5bem5Y+z6ZaT6Led57i95ZKMKVxuJGlubmVyOiAoZmx1aWQgMTAwJSAzMCx4bCAxNjAwIDMwLGxnIDEyODAgMzAsbWQgMTAyNCAwLHNtIDk2MCAwLHhzIDc2OCAwKTsgLy/moYbmnrblr6zluqboqK3lrppcblxuLy89PT09PT09PT09PT09PT09PT09PT09XG4vL+i3nembouioreWumlxuLy89PT09PT09PT09PT09PT09PT09PT09XG4kYmFzZUdhcDogMTBweDsgLy/kuLvopoHot53pm6LlpKflsI8s6ZaT6Led57Wx5LiA5YCN5pW4XG5cbi8v5paH5a2X6Kit5a6aXG4kZm9udDogJ0xhdG8nLCdOb3RvIFNhbnMgVEMnLHNhbnMtc2VyaWY7Ly/mloflrZflrZflnotcbiRmb250U2l6ZTogMTZweDsgLy/kuLvmloflrZflpKflsI9cbiRmb250U2l6ZUxldmVsOiAwLjU7Ly/mloflrZfmlL7lpKflgI3njodcbiRGb250TGV2ZWw6IDU7IC8v5paH5a2XbGV2ZWznlJ/miJDmlbhcbiRsaW5lSGVpZ2h0TGV2ZWw6IDEuNTsgLy/ooYzot53lgI3njodcbiRmb250TGg6IGNlaWwoJGZvbnRTaXplICogJGxpbmVIZWlnaHRMZXZlbCk7IC8v5Li75paH5a2X6KGM6auYXG4kdGV4dENvbG9yOiAjMjUyNTI1OyAvL+S4u+aWh+Wtl+mhj+iJslxuLy8kdGV4dEhDb2xvcjogIzMyNTVGOSAvL+S4u+aWh+Wtl+a7keWFpemhj+iJslxuJHRleHRIQ29sb3I6ICMwMDRBQUM7XG4kbGV0dGVyU3BhY2luZzogMGVtOyAvL+aWh+Wtl+mWk+i3nVxuLy/ntrLnq5nkuLvmnrbmp4vpoY/oibLoqK3lrppcbiR3aGl0ZTogICAgI2ZmZjtcbiRncmF5LTEwMDogI2Y4ZjlmYTtcbiRncmF5LTIwMDogI2U5ZWNlZjtcbiRncmF5LTMwMDogI2RlZTJlNjtcbiRncmF5LTQwMDogI2NlZDRkYTtcbiRncmF5LTUwMDogI2FkYjViZDtcbiRncmF5LTYwMDogIzZjNzU3ZDtcbiRncmF5LTcwMDogIzQ5NTA1NztcbiRncmF5LTgwMDogIzM0M2E0MDtcbiRncmF5LTkwMDogIzIxMjUyOTtcbiRibGFjazogICAgIzI1MjUyNTtcbi8vJG1haW4tY29sb3I6ICMzMjU1RjlcbiRtYWluLWNvbG9yOiAjMDA0QUFDO1xuJGJsdWU6ICMwMDRBQUM7XG4kZ3JlZW46ICMxNDVBMTI7XG4kcmVkOiAjYzEyNzJkO1xuXG4vLz09PT09PT09PT09PT09PT09PT09PT1cbi8v57ay5qC85qGG5p62IGdyaWRcbi8vPT09PT09PT09PT09PT09PT09PT09PVxuJGdyaWRYTDogMTYwMDtcbiRncmlkTGc6IDEyODA7XG4kZ3JpZE1kOiA3Njg7XG4kZ3JpZFNtOiA0ODA7XG4kZ3JpZENvbHM6IDEyOyAvL+e2suagvOashOaVuFxuJGdyaWQtcHJvcHM6ICgnZGVmYXVsdCc6IDE5MjAsJy14bCc6ICRncmlkWEwsJy1sZyc6ICRncmlkTGcsJy1tZCc6ICRncmlkTWQsJy1zbSc6ICRncmlkU20pOy8vY2xhc3Mg5bCN5oeJ5a+s5bqm6Kit5a6aXG5cbi8vPT09PT09PT09PT09PT09PT09PT09PVxuLy/ooajpoK0gaGVhZGVyXG4vLz09PT09PT09PT09PT09PT09PT09PT1cbiRoZWFkZXJNb2RlOiAxOyAvL2hlYWRlcuaooeW8jyAxOumBuOWWruWQjOS4gOihjCAyOumBuOWWruWcqOS4i+aWuVxuJGhlYWRlck9yZGVyOiAoJ2xvZ28nOiAxLCduYXYnOiAyLCdzZWFyY2gnOiA0LCdzb2NpYWwnOiAzLCdoYW1idXJnZXInOiA1KTsgLy/mjpLluo9cbiR2aWV3OiAoJ3NlYXJjaCc6IDAsJ3NvY2lhbEl0ZW0nOiAwKTsgLy9zZWFyY2g6MeeCuumhr+ekujDngrrkuI3poa/npLogU29jaWFsSXRlbSDnpL7nvqTmlbjnm65cbiRsb2dvSGVpZ2h0OiAoJ21vZGUxJzogODBweCwnbW9kZTFGaXhlZCc6IDgwcHgsJ21vZGUyJzogNzBweCwnbW9kZTJGaXhlZCc6IDUwcHgpOyAvLyBtb2RlMTpsb2dv6auY5bqmIOiIhyBtb2RlMjpsb2dv6auY5bqmXG4kbG9nb1dpZHRoOiA0MDBweDsgLy9MT0dP5a+s5bqmKOWDj+e0oClcbiRsb2dvQWxpZ246IGZsZXgtc3RhcnQ7IC8vTE9HT+S9jee9rihqdXN0aWZ5LWNvbnRlbnQpXG4kc29jaWFsSGVpZ2h0OiAyMHB4OyAvL+ekvue+pGljb27pq5jluqbkuI3lpKfmlrw0MHB4XG4kbmF2Rm9udDogMjBweDsgLy/pgbjllq7mloflrZflpKflsI9cbiRuYXZJdGVtOiA0OyAvL+mBuOWWruaomemhjOaVuOmHj1xuJG5hdkFsaWduOiBmbGV4LWVuZDsgLy9uYXbpgbjllq7mjpLliJfkvY3nva4oanVzdGlmeS1jb250ZW50KVxuJG5hdkhlaWdodDogNTBweDsgLy9tb2RlMumBuOWWrumrmOW6plxuJG5hdkxheWVyV2lkdGg6IDI1MHB4OyAvL+a7keWFpemBuOWWrumajuWxpOWvrOW6plxuJG5hdkNvbG9yOiAkdGV4dENvbG9yOyAvL+mBuOWWruaWh+Wtl+mhj+iJslxuJG5hdmJnQ29sb3I6ICR3aGl0ZTsgLy/pgbjllq7og4zmma/oibJcbiRuYXZIb3ZlckNvbG9yOiAkbWFpbi1jb2xvcjsgIC8v5ruR5YWl6aGP6ImyXG4kbmF2SG92ZXJiZ0NvbG9yOiAkd2hpdGU7IC8v5ruR5YWl6IOM5pmv6aGP6ImyXG4kbmF2Qm9yZGVyQ29sb3I6ICRncmF5LTMwMDsgLy/pgbjllq7moYbpoY/oibJcbiRuYXZCdG5XaWR0aDogNDBweDsgLy/kuIvpmo7lsaTmjInpiJXlr6zluqZcbiRuYXZCdG5iZ0NvbG9yOiAkd2hpdGU7IC8v5LiL6ZqO5bGk5oyJ6YiV6IOM5pmv6aGP6ImyXG4kcy1uYXZiZ0NvbG9yOiAkbWFpbi1jb2xvcjsvL+aJi+apn+adv+majuWxpOmBuOWWruiDjOaZr1xuJGhlYWRlclJXRDogMTAyNDsgLy8g5omL5qmf54mI6K6K5o+b5a+s5bqmXG4kaGVhZGVyUGhvbmVIZWlnaHQ6IDUwcHg7IC8v5omL5qmf54mIaGVhZGVyIOmrmOW6plxuXG5cblxuLy89PT09PT09PT09PT09PT09PT09PT09XG4vL+ihqOWWriBmb3JtXG4vLz09PT09PT09PT09PT09PT09PT09PT1cbiRmb3JtSGVpZ2h0OiA0MHB4OyAvL+i8uOWFpeahhumrmOW6plxuJGZvcm1Db2xvcjogJHRleHRDb2xvcjsgLy/ovLjlhaXmoYbmloflrZfpoY/oibJcbiRmb3JtTGluZVdpZHRoOiAwOyAgLy/ovLjlhaXmoYbmoYbnt5rnspfntLBcbiRmb3JtTGluZUNvbG9yOiAjZjJmMmYyOyAgLy/ovLjlhaXmoYbmoYbnt5rpoY/oibJcbiRmb3JtQmdDb2xvcjogI2YyZjJmMjsgIC8v6Ly45YWl6IOM5pmv6aGP6ImyXG4kZm9ybUJkUnM6IDEwcHg7IC8v6Ly45YWl5qGG5ZyT6KeSXG4kZm9ybVNoYWRvdzogIzAwMDsgLy/ovLjlhaXmoYbpgbjlj5bpmbDlvbHpoY/oibJcbiRwbGFjZWhvbGRlckNvbG9yOiAjODg4OyAvL+i8uOWFpeahhnBsYWNlaG9sZGVy5paH5a2X6aGP6ImyXG4kbGVnZW5kQ29sb3I6ICMwMDA7IC8vZm9ybSDmqJnpoYzmloflrZfpoY/oibJcbiRyYWRpb1NpemU6IDIzcHg7IC8vcmFkaW8g6YG46aCF5aSn5bCPXG4kcmFkaW9CZ0NvbG9yOiAkZm9ybUJnQ29sb3I7IC8vcmFkaW8g6YG46aCF6aGP6ImyXG4kcmFkaW9MaW5lQ29sb3I6ICRmb3JtTGluZUNvbG9yOyAvL3JhZGlvIOmBuOmghemCiuahhumhj+iJslxuJHJhZGlvTGluZVdpZHRoOiAxcHg7IC8vcmFkaW8g6YG46aCF6YKK5qGG57KX57SwXG4kcmFkaW9CZFJzOiAyM3B4OyAvL3JhZGlvIOmBuOmgheWck+inklxuJHJhZGlvQ2hlY2tDb2xvcjogIzU1NTsgLy9yYWRpbyDpgbjmk4flvozpoY/oibJcbiRjaGVja2JveFNpemU6IDIzcHg7IC8vQ2hlY2tib3gg6YG46aCF5aSn5bCPXG4kY2hlY2tib3hCZ0NvbG9yOiAkZm9ybUJnQ29sb3I7IC8vQ2hlY2tib3gg6YG46aCF6aGP6ImyXG4kY2hlY2tib3hMaW5lV2lkdGg6IDFweDsgLy9DaGVja2JveCDpgbjpoIXpgormoYbnspfntLBcbiRjaGVja2JveExpbmVDb2xvcjogJGZvcm1MaW5lQ29sb3I7IC8vQ2hlY2tib3gg6YKK5qGG6aGP6ImyXG4kY2hlY2tib3hCZFJzOiAzcHg7IC8vQ2hlY2tib3gg5ZyT6KeS5aSn5bCPXG4kY2hlY2tib3hDaGVja0NvbG9yOiAjNTU1OyAvL0NoZWNrYm94IOmBuOaTh+W+jOWLvuWLvumhj+iJslxuJGNob2ljZUJ0bldpZHRoOiAxNTBweDsgLy9DaGVja2JveCByYWRpbyDku7/mjInpiJXlr6zluqZcbiRjaG9pY2VCdG5IZWlnaHQ6IDUwcHg7IC8vQ2hlY2tib3ggcmFkaW8g5Lu/5oyJ6YiV6auY5bqmXG4kY2hvaWNlQnRuQ29sb3I6ICRmb3JtQmdDb2xvcjsgLy9DaGVja2JveCByYWRpbyDku7/mjInpiJXpoY/oibJcbiRjaG9pY2VCdG5UZXh0Q29sb3I6ICM1NTU7IC8vQ2hlY2tib3ggcmFkaW8g5Lu/5oyJ6YiV5paH5a2X6aGP6ImyXG4kY2hvaWNlQnRuTGluZUNvbG9yOiAkZm9ybUxpbmVDb2xvcjsgLy9DaGVja2JveCByYWRpbyDku7/mjInpiJXpgormoYbpoY/oibJcbiRjaG9pY2VCdG5MaW5lV2lkdGg6IDFweDsgLy9DaGVja2JveCByYWRpbyDku7/mjInpiJXpgormoYbnspfntLBcbiRjaG9pY2VCdG5CZFJzOiA1cHg7IC8vQ2hlY2tib3ggcmFkaW8g5Lu/5oyJ6YiV5ZyT6KeSXG4kY2hvaWNlQnRuQ2hlY2tDb2xvcjogIzFlOTgxMzsgLy9DaGVja2JveCByYWRpbyDku7/mjInpiJXpgbjmk4flvozpoY/oibJcbiRjaG9pY2VCdG5DaGVja1RleHRDb2xvcjogI2ZmZjsgLy9DaGVja2JveCByYWRpbyDku7/mjInpiJXpgbjmk4flvozmloflrZfpoY/oibJcbiRjaG9pY2VCdG5DaGVja0xpbmVDb2xvcjogIzFlOTgxMzsgLy9DaGVja2JveCByYWRpbyDku7/mjInpiJXpgbjmk4flvozpgormoYbpoY/oibJcbiRzZWxlY3RBcnJvd1dpZHRoOiAxNnB4OyAvL3NlbGVjdCDkuInop5LlvaLlr6zluqZcbiRzZWxlY3RBcnJvd0hlaWdodDogMTBweDsgLy9zZWxlY3Qg5LiJ6KeS5b2i6auY5bqmXG4kc2VsZWN0QXJyb3dDb2xvcjogIzU1NTsgLy9zZWxlY3Qg5LiJ6KeS5b2i6aGP6ImyXG4kcmVxdWlyZWRDb2xvcjogI2MwMDAwMDsgLy/lv4XloavpoY/oibJcbiR0aXBzQ29sb3I6ICM5OTk7IC8v5o+Q56S65paH5a2X6aGP6ImyXG4kdGlwc0ljb25TaXplOiAyMHB4OyAvL+aPkOekumljb24g5aSn5bCPXG4kdGlwc0ljb246ICdcXGU5MDAnOyAvL+aPkOekumljb25cbiR2YWxpZEljb246ICdcXGU5MDAnOyAvL2ZlZWRiYWNrIOaPkOekuiBpY29uXG4kZXJyb3JDb2xvcjogI2MwMDAwMDsgLy9mZWVkYmFjayDpjK/oqqTmj5DnpLrpoY/oibJcbiRlcnJvckljb246ICdcXGU5MDYnOyAvL2ZlZWRiYWNrIOmMr+iqpOaPkOekumljb25cbiRzdWNjZXNzQ29sb3I6ICMxZTk4MTM7IC8vZmVlZGJhY2sg5oiQ5Yqf5o+Q56S66aGP6ImyXG4kc3VjY2Vzc0ljb246ICdcXGU5MDEnOyAvL2ZlZWRiYWNrIOaIkOmAmuaPkOekumljb25cbiR0ZXh0YXJlYUhlaWdodDogMTUwcHg7IC8vdGV4dGFyZWEg6auY5bqmXG4kcmVzZXRDb2xvcjogIzFlOTgxMzsgLy/oqo3orYnnorxyZXNldOmhj+iJslxuXG4vLz09PT09PT09PT09PT09PT09PT09PT1cbi8v5oyJ6YiVIGJ1dHRvblxuLy89PT09PT09PT09PT09PT09PT09PT09XG4kYnRuV2lkdGg6IDEyMHB4OyAvL+Wumue+qeaMiemIleWvrOW6plxuJGJ0bkhlaWdodDogNDBweDsgLy/lrprnvqnmjInpiJXpq5jluqZcbiRidG5MaW5lV2lkdGg6IDA7IC8v5a6a576p5oyJ6YiV5qGG57ea57KX57SwXG4kYnRuSWNvblNpemU6IDIwcHg7IC8v5a6a576p5oyJ6YiVaWNvbiDlpKflsI9cbiRidG5TbVdpZHRoOiAxMDBweDsgLy/lrprnvqnlsI/mjInpiJXlr6zluqZcbiRidG5TbUhlaWdodDogNDBweDsgLy/lrprnvqnlsI/mjInpiJXpq5jluqZcbiRidG5TbUljb25TaXplOiAyMHB4OyAvL+Wumue+qeWwj+aMiemIlWljb27lpKflsI9cbiRidG5EZWZhdWx0Q29sb3I6ICRncmF5LTIwMDsgLy/ljp/lp4vmjInpiJXpoY/oibJcbiRidG5EZWZhdWx0TGluZUNvbG9yOiAjZTNlM2UzOyAvL+WOn+Wni+aMiemIleahhue3mumhj+iJslxuJGJ0bkRlZmF1bHRUZXh0Q29sb3I6ICR0ZXh0Q29sb3I7IC8v5Y6f5aeL5oyJ6YiV5paH5a2X6aGP6ImyXG4kYnRuRGVmYXVsdEhvdmVyQ29sb3I6ICRtYWluLWNvbG9yOyAvL+WOn+Wni+aMiemIlea7keWFpemhj+iJslxuJGJ0bkRlZmF1bHRIb3ZlckxpbmVDb2xvcjogJG1haW4tY29sb3I7IC8v5Y6f5aeL5oyJ6YiV5ruR5YWl5qGG57ea6aGP6ImyXG4kYnRuRGVmYXVsdEhvdmVyVGV4dENvbG9yOiAkd2hpdGU7IC8v5Y6f5aeL5oyJ6YiV5ruR5YWl5paH5a2X6aGP6ImyXG4vL+aMiemIleWQjeeoseaWsOWinumgheebriAo5ZCN56ixIOiDjOaZr+mhj+iJsiDlpJbmoYbpoY/oibIg5paH5a2X6aGP6ImyKVxuJGJ0bkNvbmZpZzogKHN1Ym1pdCAjZDYwZDBkICNkNjBkMGQgJHdoaXRlLCBtYWluICRtYWluLWNvbG9yICRtYWluLWNvbG9yICR3aGl0ZSwgc3VjY2VzcyByZ2JhKDAsMCwwLDApICRncmVlbiAkYmxhY2spO1xuXG4vLz09PT09PT09PT09PT09PT09PT09PT1cbi8vIOmggeeivCBwYWdpbmF0aW9uXG4vLz09PT09PT09PT09PT09PT09PT09PT1cbiRwYWdlQmc6ICRncmF5LTIwMDsgLy/mjInpiJXog4zmma/oibJcbiRwYWdlSG92ZXJCZzogJG1haW4tY29sb3I7IC8v5ruR6byg56e76Iez5oyJ6YiV6IOM5pmv6ImyXG4kcGFnZUFjdGl2ZUJnOiBkYXJrZW4oJG1haW4tY29sb3IsMC4yKTsvL+a7kem8oOaMieS4i+eahOaoo+W8j1xuJHBhZ2VIb3ZlckNvbG9yOiAkd2hpdGU7Ly/mu5HlhaXoiIfpgbjlj5bmloflrZfpoY/oibJcbiRwYWdlRGlzYWJsZWQ6ICRncmF5LTQwMDsgLy/npoHnlKjmloflrZfpoY/oibJcbiIsIi8vcmVt566X5byPXG5AZnVuY3Rpb24gdG9SZW0oJHNpemUpIHtcblx0JHJlbVNpemU6IHJvdW5kKCRzaXplIC8gJGZvbnRTaXplICogMTAwMCkgLyAxMDAwO1xuXHRAcmV0dXJuICRyZW1TaXplICogMXJlbTsgfVxuXG4vL+i3nembomxldmVsIOeul+W8j1xuLy9nYXAoMikgPT0+IDIqJGJhc2VHYXBcbkBmdW5jdGlvbiBnYXAoJGdhcExldmVsOiAxLCAkZ2FwSGVpZ2h0OiAkYmFzZUdhcCkge1xuICAgIEByZXR1cm4gJGdhcExldmVsICogJGdhcEhlaWdodDsgfVxuIiwiLy9UaGlzIGlzIHNhc3MgZmlsZVxuLy9iYWNrZ3JvdW5kIOioreWumlxuQG1peGluIGJnKCRpbWcsICRwb3MteDogMCwgJHBvcy15OiAwLCAkcmVwOiBuby1yZXBlYXQpIHtcblx0YmFja2dyb3VuZC1pbWFnZTogdXJsKFwiLi4vLi4vaW1hZ2VzLyN7JGltZ31cIik7XG5cdGJhY2tncm91bmQtcG9zaXRpb246ICRwb3MteCAkcG9zLXk7XG5cdGJhY2tncm91bmQtcmVwZWF0OiAkcmVwOyB9XG5cbi8vcndkIHBvaW50XG4vLytyd2QoMTkyMCwgbWF4KVxuQG1peGluIHJ3ZCgkcG9pbnQsICRtdzogJ21heCcpIHtcblx0QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAoI3skbXd9LXdpZHRoOiAkcG9pbnQgKiAxcHgpIHtcblx0XHRAY29udGVudDsgfSB9XG5cbi8vK2ljb24oMzBweCwzMHB4LCdcXGYxMzgnLDI1cHgsICM5OTkpXG5AbWl4aW4gaWNvbigkd2lkdGg6IGF1dG8sICRoZWlnaHQ6IGF1dG8sICRpY29uX2NvbnRlbnQ6ICcnLCAkZm9udC1zaXplOiAxMDAlLCAkY29sb3I6aW5oZXJpdCkge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdCY6YmVmb3JlIHtcblx0XHRjb250ZW50OiAkaWNvbl9jb250ZW50O1xuXHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHR3aWR0aDogJHdpZHRoO1xuXHRcdGhlaWdodDogJGhlaWdodDtcblx0XHRmb250LWZhbWlseTogJ2ljb21vb24nO1xuXHRcdGZvbnQtc2l6ZTogJGZvbnQtc2l6ZTtcblx0XHRsaW5lLWhlaWdodDogJGhlaWdodDtcblx0XHRjb2xvcjogJGNvbG9yO1xuXHRcdEBjb250ZW50OyB9IH1cblxuLy/mloflrZfmoYbnt5pcbi8vK3N0cm9rZSgyLCNlZWUpXG5AbWl4aW4gc3Ryb2tlKCRzLXdpZHRoLCAkY29sb3IpIHtcblx0JHMtd2lkdGg6ICRzLXdpZHRoO1xuXHQkc2hhZG93OiAwIDAgMCB0cmFuc3BhcmVudDtcblx0JGk6IDA7XG5cdCR3OiAxO1xuXHRAd2hpbGUgKCRzLXdpZHRoID4gJGkpIHtcblx0XHQkaTogJGkgKyAxO1xuXHRcdCRqOiAwO1xuXHRcdCR3OiAkdyArIDI7XG5cdFx0QGZvciAkciBmcm9tIDEgdGhyb3VnaCAkdyB7XG5cdFx0XHRAZm9yICRjIGZyb20gMSB0aHJvdWdoICR3IHtcblx0XHRcdFx0JHg6ICRjIC0gY2VpbCgkdyAvIDIpO1xuXHRcdFx0XHQkeTogJHIgLSBjZWlsKCR3IC8gMik7XG5cdFx0XHRcdCRzaGFkb3c6ICN7JHNoYWRvd30sICN7JHh9cHggI3skeX1weCAwICRjb2xvcjsgfSB9IH1cblx0dGV4dC1zaGFkb3c6ICRzaGFkb3c7IH1cblxuLy9jYXNlIG1peGluXG4vLytpbm5lcigxOTIwLDMwKVxuLy8kaW5yLXcg5a+s5bqmXG4vL1JXRCAkaW5yLWdhcCDlt6blj7NwYWRkaW5n6ZaT6Led57i95ZKMXG5AbWl4aW4gaW5uZXIoJGluci13LCRpbnItZ2FwOiAwKSB7XG5cdG1heC13aWR0aDogJGluci13ICogMXB4O1xuXHRAaWYgJGluci1nYXAgIT0gMCB7XG5cdFx0QGluY2x1ZGUgcndkKCRpbnItdyArICRpbnItZ2FwKSB7XG5cdFx0XHRwYWRkaW5nOiAwICgkaW5yLWdhcCAvIDIgKiAxcHgpOyB9IH0gfVxuXG4vL+aWh+Wtl+maseiXjyBlbGxpcHNpcyjooYzpq5gpXG5AbWl4aW4gZWxsaXBzaXMoJGVsc19oZWlnaHQ6IDEpIHtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0QGlmKCRlbHNfaGVpZ2h0IDw9IDEpIHtcblx0XHR3aGl0ZS1zcGFjZTogbm93cmFwO1xuXHRcdHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuXHRcdEBjb250ZW50OyB9XG5cdEBlbHNlIGlmKCRlbHNfaGVpZ2h0ID4gMSkge1xuXHRcdGRpc3BsYXk6IC13ZWJraXQtYm94O1xuXHRcdHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuXHRcdC13ZWJraXQtbGluZS1jbGFtcDogJGVsc19oZWlnaHQ7XG5cdFx0LXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcblx0XHRAY29udGVudDsgfSB9XG5cblxuLy/mloflrZfovYnmj5sgcmVtXG5AbWl4aW4gZm9udC1zaXplKCRpblNpemUsJGluTGluZUhlaWdodDogMXB4KSB7XG5cdGZvbnQtc2l6ZTogJGluU2l6ZTtcblx0JG5ld0xpbmVIZWlnaHQ6IGNlaWwoJGluU2l6ZSAqICRsaW5lSGVpZ2h0TGV2ZWwpO1xuXHRmb250LXNpemU6IHRvUmVtKCRpblNpemUpO1xuXHRAaWYoJG5ld0xpbmVIZWlnaHQgPT0gMXB4IG9yICRpbkxpbmVIZWlnaHQgPCAkaW5TaXplKSB7XG5cdFx0bGluZS1oZWlnaHQ6IHRvUmVtKCRuZXdMaW5lSGVpZ2h0KTsgfVxuXHRAZWxzZSB7XG5cdFx0bGluZS1oZWlnaHQ6IHRvUmVtKCRpbkxpbmVIZWlnaHQpOyB9IH1cblxuLy/mloflrZflgI3njodcbkBtaXhpbiBmb250LWxldmVsKCRmTGV2ZWwpIHtcblx0QGlmKCRmTGV2ZWwgPCAwKSB7XG5cdFx0JGZMZXZlbDogMDsgfVxuXHQkbmV3Zm9udDogJGZvbnRTaXplICogKDEgKyAkZkxldmVsICogJGZvbnRTaXplTGV2ZWwpO1xuXHQkZkxldmVsTGluZUhlaWdodDogY2VpbCgkbmV3Zm9udCAqICRsaW5lSGVpZ2h0TGV2ZWwpO1xuXHRmb250LXNpemU6ICRuZXdmb250O1xuXHRmb250LXNpemU6IHRvUmVtKCRuZXdmb250KTtcblx0bGluZS1oZWlnaHQ6IHRvUmVtKCRmTGV2ZWxMaW5lSGVpZ2h0KTsgfVxuXG5cbi8vIHRyaWFuZ2xlIOS4ieinkuW9oiBtaXhpblxuLy8rdHJpYW5nbGUoMTBweCAxMnB4LCAjYWUwMDAwLHVwKVxuQG1peGluIHRyaWFuZ2xlICgkc2l6ZSwgJGNvbG9yLCAkZGlyZWN0aW9uKSB7XG5cdGhlaWdodDogMDtcblx0d2lkdGg6IDA7XG5cdCR3aWR0aDogbnRoKCRzaXplLCAxKTtcblx0JGhlaWdodDogbnRoKCRzaXplLCBsZW5ndGgoJHNpemUpKTtcblx0JGZvcmVncm91bmQtY29sb3I6IG50aCgkY29sb3IsIDEpO1xuXHQkYmFja2dyb3VuZC1jb2xvcjogaWYobGVuZ3RoKCRjb2xvcikgPT0gMiwgbnRoKCRjb2xvciwgMiksIHRyYW5zcGFyZW50KTtcblx0QGlmICgkZGlyZWN0aW9uID09IHVwKSBvciAoJGRpcmVjdGlvbiA9PSBkb3duKSBvciAoJGRpcmVjdGlvbiA9PSByaWdodCkgb3IgKCRkaXJlY3Rpb24gPT0gbGVmdCkge1xuXHRcdCR3aWR0aDogJHdpZHRoIC8gMjtcblx0XHQkaGVpZ2h0OiBpZihsZW5ndGgoJHNpemUpID4gMSwgJGhlaWdodCwgJGhlaWdodC8yKTtcblx0XHRAaWYgJGRpcmVjdGlvbiA9PSB1cCB7XG5cdFx0XHRib3JkZXItYm90dG9tOiAkaGVpZ2h0IHNvbGlkICRmb3JlZ3JvdW5kLWNvbG9yO1xuXHRcdFx0Ym9yZGVyLWxlZnQ6ICR3aWR0aCBzb2xpZCAkYmFja2dyb3VuZC1jb2xvcjtcblx0XHRcdGJvcmRlci1yaWdodDogJHdpZHRoIHNvbGlkICRiYWNrZ3JvdW5kLWNvbG9yOyB9XG5cblx0XHRAZWxzZSBpZiAkZGlyZWN0aW9uID09IHJpZ2h0IHtcblx0XHRcdGJvcmRlci1ib3R0b206ICR3aWR0aCBzb2xpZCAkYmFja2dyb3VuZC1jb2xvcjtcblx0XHRcdGJvcmRlci1sZWZ0OiAkaGVpZ2h0IHNvbGlkICRmb3JlZ3JvdW5kLWNvbG9yO1xuXHRcdFx0Ym9yZGVyLXRvcDogJHdpZHRoIHNvbGlkICRiYWNrZ3JvdW5kLWNvbG9yOyB9XG5cdFx0QGVsc2UgaWYgJGRpcmVjdGlvbiA9PSBkb3duIHtcblx0XHRcdGJvcmRlci1sZWZ0OiAkd2lkdGggc29saWQgJGJhY2tncm91bmQtY29sb3I7XG5cdFx0XHRib3JkZXItcmlnaHQ6ICR3aWR0aCBzb2xpZCAkYmFja2dyb3VuZC1jb2xvcjtcblx0XHRcdGJvcmRlci10b3A6ICRoZWlnaHQgc29saWQgJGZvcmVncm91bmQtY29sb3I7IH1cblx0XHRAZWxzZSBpZiAkZGlyZWN0aW9uID09IGxlZnQge1xuXHRcdFx0Ym9yZGVyLWJvdHRvbTogJHdpZHRoIHNvbGlkICRiYWNrZ3JvdW5kLWNvbG9yO1xuXHRcdFx0Ym9yZGVyLXJpZ2h0OiAkaGVpZ2h0IHNvbGlkICRmb3JlZ3JvdW5kLWNvbG9yO1xuXHRcdFx0Ym9yZGVyLXRvcDogJHdpZHRoIHNvbGlkICRiYWNrZ3JvdW5kLWNvbG9yOyB9IH1cblx0QGVsc2UgaWYgKCRkaXJlY3Rpb24gPT0gdXAtcmlnaHQpIG9yICgkZGlyZWN0aW9uID09IHVwLWxlZnQpIHtcblx0XHRib3JkZXItdG9wOiAkaGVpZ2h0IHNvbGlkICRmb3JlZ3JvdW5kLWNvbG9yO1xuXHRcdEBpZiAkZGlyZWN0aW9uID09IHVwLXJpZ2h0IHtcblx0XHRcdGJvcmRlci1sZWZ0OiAgJHdpZHRoIHNvbGlkICRiYWNrZ3JvdW5kLWNvbG9yOyB9XG5cdFx0QGVsc2UgaWYgJGRpcmVjdGlvbiA9PSB1cC1sZWZ0IHtcblx0XHRcdGJvcmRlci1yaWdodDogJHdpZHRoIHNvbGlkICRiYWNrZ3JvdW5kLWNvbG9yOyB9IH1cblx0QGVsc2UgaWYgKCRkaXJlY3Rpb24gPT0gZG93bi1yaWdodCkgb3IgKCRkaXJlY3Rpb24gPT0gZG93bi1sZWZ0KSB7XG5cdFx0Ym9yZGVyLWJvdHRvbTogJGhlaWdodCBzb2xpZCAkZm9yZWdyb3VuZC1jb2xvcjtcblx0XHRAaWYgJGRpcmVjdGlvbiA9PSBkb3duLXJpZ2h0IHtcblx0XHRcdGJvcmRlci1sZWZ0OiAgJHdpZHRoIHNvbGlkICRiYWNrZ3JvdW5kLWNvbG9yOyB9XG5cdFx0QGVsc2UgaWYgJGRpcmVjdGlvbiA9PSBkb3duLWxlZnQge1xuXHRcdFx0Ym9yZGVyLXJpZ2h0OiAkd2lkdGggc29saWQgJGJhY2tncm91bmQtY29sb3I7IH0gfVxuXHRAZWxzZSBpZiAoJGRpcmVjdGlvbiA9PSBpbnNldC11cCkge1xuXHRcdGJvcmRlci1jb2xvcjogJGJhY2tncm91bmQtY29sb3IgJGJhY2tncm91bmQtY29sb3IgJGZvcmVncm91bmQtY29sb3I7XG5cdFx0Ym9yZGVyLXN0eWxlOiBzb2xpZDtcblx0XHRib3JkZXItd2lkdGg6ICRoZWlnaHQgJHdpZHRoOyB9XG5cdEBlbHNlIGlmICgkZGlyZWN0aW9uID09IGluc2V0LWRvd24pIHtcblx0XHRib3JkZXItY29sb3I6ICRmb3JlZ3JvdW5kLWNvbG9yICRiYWNrZ3JvdW5kLWNvbG9yICRiYWNrZ3JvdW5kLWNvbG9yO1xuXHRcdGJvcmRlci1zdHlsZTogc29saWQ7XG5cdFx0Ym9yZGVyLXdpZHRoOiAkaGVpZ2h0ICR3aWR0aDsgfVxuXHRAZWxzZSBpZiAoJGRpcmVjdGlvbiA9PSBpbnNldC1yaWdodCkge1xuXHRcdGJvcmRlci1jb2xvcjogJGJhY2tncm91bmQtY29sb3IgJGJhY2tncm91bmQtY29sb3IgJGJhY2tncm91bmQtY29sb3IgJGZvcmVncm91bmQtY29sb3I7XG5cdFx0Ym9yZGVyLXN0eWxlOiBzb2xpZDtcblx0XHRib3JkZXItd2lkdGg6ICR3aWR0aCAkaGVpZ2h0OyB9XG5cdEBlbHNlIGlmICgkZGlyZWN0aW9uID09IGluc2V0LWxlZnQpIHtcblx0XHRib3JkZXItY29sb3I6ICRiYWNrZ3JvdW5kLWNvbG9yICRmb3JlZ3JvdW5kLWNvbG9yICRiYWNrZ3JvdW5kLWNvbG9yICRiYWNrZ3JvdW5kLWNvbG9yO1xuXHRcdGJvcmRlci1zdHlsZTogc29saWQ7XG5cdFx0Ym9yZGVyLXdpZHRoOiAkd2lkdGggJGhlaWdodDsgfSB9XG5cbi8v572u5LitICd2JyDlnoLnm7Tnva7kuK0gJ2gnIOawtOW5s+e9ruS4rSAnYicg5Z6C55u05rC05bmz572u5LitXG5AbWl4aW4gY2VudGVyKCRwb3NpdGlvbikge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdEBpZiAkcG9zaXRpb24gPT0gJ3YnIHtcblx0XHR0b3A6IDUwJTtcblx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7IH1cblx0QGVsc2UgaWYgJHBvc2l0aW9uID09ICdoJyB7XG5cdFx0bGVmdDogNTAlO1xuXHRcdHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUpOyB9XG5cdEBlbHNlIGlmICRwb3NpdGlvbiA9PSAnYicge1xuXHRcdHRvcDogNTAlO1xuXHRcdGxlZnQ6IDUwJTtcblx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsgfSB9XG5cbi8vUldEIOe2suagvOiuiuaPm1xuLy8kY29vQ29sIOe2suagvOaVuFxuLy8kY29vQ29scyDntrLmoLzkvZTmoLzmlbhcbi8vJGNvb0d1dHRlciDplpPot50gcHggZW0gJVxuLy/kvb/nlKjmlrnlvI8gK2Nvbyg2LDIsMTBweClcbkBtaXhpbiBjb28oJGNvb0NvbCwkY29vQ29sczogMSwkY29vR3V0dGVyOiAwKSB7XG5cdHdpZHRoOiBzcGFuKCRjb29Db2xzIG5hcnJvdyBvZiAkY29vQ29sIHNldC1ndXR0ZXJzICRjb29HdXR0ZXIgd2lkZSk7XG5cdEBpZiAkY29vR3V0dGVyICE9IDAge1xuXHRcdG1hcmdpbi1sZWZ0OiBndXR0ZXIob2YgJGNvb0NvbCBzZXQtZ3V0dGVycyAkY29vR3V0dGVyIHdpZGUpIC8gMjtcblx0XHRtYXJnaW4tcmlnaHQ6IGd1dHRlcihvZiAkY29vQ29sIHNldC1ndXR0ZXJzICRjb29HdXR0ZXIgd2lkZSkgLyAyO1xuXHRcdG1hcmdpbi1ib3R0b206IGd1dHRlcihvZiAkY29vQ29sIHNldC1ndXR0ZXJzICRjb29HdXR0ZXIgd2lkZSk7IH0gfVxuIiwiLy89PT09PT09PT09PT09PT09PT09PT09XG4vL+aMiemIlSBCdXR0b25cbi8vPT09PT09PT09PT09PT09PT09PT09PVxuJUJ0biB7XG5cdHdpZHRoOiAkYnRuV2lkdGg7XG5cdGhlaWdodDogJGJ0bkhlaWdodDtcblx0bWFyZ2luOiA1cHg7XG5cdHBhZGRpbmc6IDAgZ2FwKDIpO1xuXHRkaXNwbGF5OiBpbmxpbmUtZmxleDtcblx0Zm9udC13ZWlnaHQ6IG5vcm1hbDtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHQtbXMtdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247XG5cdHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdHVzZXItc2VsZWN0OiBub25lO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHRib3JkZXItd2lkdGg6ICRidG5MaW5lV2lkdGg7XG5cdGJvcmRlci1zdHlsZTogc29saWQ7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0YXBwZWFyYW5jZTogbm9uZTtcblx0dHJhbnNpdGlvbjogYWxsIC4zcyBlYXNlLW91dDtcblx0Jjpmb2N1cyxcblx0JjphY3RpdmU6Zm9jdXMge1xuXHRcdG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xuXHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfVxuXHQmOmFjdGl2ZSB7XG5cdFx0YmFja2dyb3VuZC1pbWFnZTogbm9uZTtcblx0XHRvdXRsaW5lOiAwOyB9IH1cbi8v5riF6ZmkXG4lY2xlYXIge1xuXHQmOmFmdGVyIHtcblx0XHRjb250ZW50OiBcIlwiO1xuXHRcdGRpc3BsYXk6IHRhYmxlO1xuXHRcdGNsZWFyOiBib3RoOyB9IH1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxBQUFBLFFBQVEsQ0FBQztDQUNSLEtBQUssRUFBRSxJQUFJO0NnQitDWCxTQUFTLEVBQUUsTUFBWTtDaEIxQ3BCLE1BQU0sRUFBRSxNQUFNO0NBUytCOztBQVA3QyxBQUFELGVBQVEsQ0FBUztDQUNoQixTQUFTLEVjTkUsSUFBSTtDZFFkLFlBQVksRUFBRSxJQUFtQjtDQUNqQyxhQUFhLEVBQUUsSUFBbUI7Q0FBSzs7QWdCSjNDLE1BQU0sTUFBTSxNQUFNLE1BQU0sU0FBUyxFQUFFLE1BQU07Q2hCUjFDLEFBQUEsUUFBUSxDQUFDO0VnQm1ETixPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQW9CO0VoQnBDZTs7O0FBRDdDLEFBQUQsWUFBSyxDQUFZO0NnQmtDbkIsU0FBUyxFQUFFLE1BQVk7Q2hCakNtQjs7QWdCUDFDLE1BQU0sTUFBTSxNQUFNLE1BQU0sU0FBUyxFQUFFLE1BQU07Q2hCTXRDLEFBQUQsWUFBSyxDQUFZO0VnQnFDakIsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFvQjtFaEJwQ1M7OztBQUR2QyxBQUFELFlBQUssQ0FBWTtDZ0JrQ25CLFNBQVMsRUFBRSxNQUFZO0NoQmpDbUI7O0FBRHZDLEFBQUQsWUFBSyxDQUFZO0NnQmtDbkIsU0FBUyxFQUFFLEtBQVk7Q2hCakNtQjs7QUFEdkMsQUFBRCxZQUFLLENBQVk7Q2dCa0NuQixTQUFTLEVBQUUsS0FBWTtDaEJqQ21COztBQUczQyxBQUFBLEtBQUssQ0FBQztDQUNMLE9BQU8sRUFBRSxJQUFJO0NBQUc7O0FBQ2pCLEFBQUEsS0FBSyxDQUFDO0NBQ0wsT0FBTyxFQUFFLElBQUk7Q0FDYixTQUFTLEVBQUUsSUFBSTtDQUFHOztBQUNuQixBQUFBLElBQUksQ0FBQztDQUNKLEtBQUssRWNhQSxPQUFPO0NkYkU7O0FBQ2YsQUFBQSxLQUFLLENBQUM7Q0FDTCxLQUFLLEVjUU8sT0FBTztDZFJFOztBQUd0QixBQUFBLEtBQUssQ0FBQztDZ0J5Q0wsU0FBUyxFaEJ4Q1UsSUFBSTtDZ0IwQ3ZCLFNBQVMsRUR2RUQsUUFBZTtDQ3lFdEIsV0FBVyxFRHpFSixRQUFlO0Nma0NGOztBQU50QixBQUVDLEtBRkksQ0FFSixHQUFHLEVBRkosS0FBSyxDQUVBLE1BQU0sQ0FBQztDQUNWLFNBQVMsRUFBRSxJQUFJO0NBQ2YsTUFBTSxFQUFFLElBQUk7Q0FBRzs7QUFKakIsQUFLQyxLQUxJLENBS0osS0FBSyxDQUFDO0NBQ0wsU0FBUyxFQUFFLElBQUk7Q0FBRzs7QUFDcEIsQUFBQSxRQUFRLENBQUM7Q2dCa0NSLFNBQVMsRWhCakNVLElBQUk7Q2dCbUN2QixTQUFTLEVEdkVELE1BQWU7Q0N5RXRCLFdBQVcsRUR6RUosT0FBZTtDZnNDTzs7QWdCL0I5QixNQUFNLE1BQU0sTUFBTSxNQUFNLFNBQVMsRUFBRSxLQUFLO0NoQjRCekMsQUFBQSxRQUFRLENBQUM7RWdCa0NSLFNBQVMsRWhCL0JXLElBQUk7RWdCaUN4QixTQUFTLEVEdkVELFFBQWU7RUN5RXRCLFdBQVcsRUR6RUosUUFBZTtFZnNDTyJ9 */
