Name: series-workflowwjjk8 Phase: Failed StartedAt: 2026-07-25 20:57:01 +0000 UTC FinishedAt: 2026-07-25 21:39:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjjk8[0] Phase: Succeeded StartedAt: 2026-07-25 20:57:01 +0000 UTC FinishedAt: 2026-07-25 21:39:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjjk8[0].run-triage Phase: Succeeded StartedAt: 2026-07-25 20:57:01 +0000 UTC FinishedAt: 2026-07-25 21:39:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIxOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvKikgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMTozODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM3OWFkOGIwNjE4OTJlNDgyMzQwOTNmN2Q2YjJhOWI4N2U4NjdhMmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAyMTozODoyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2hcbmluZGV4IDg1M2RiYzFiMDBkN2FiLi5iNDQ4MzI0NTI3ZDhiMCAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoXG5AQCAtMzQsNiAmIzQzOzM0LDcgQEAgdGVzdHM9XCYjMzQ7XG4gXHRhY3Rpb25fc2V0XHRcdFx0XHRzZXQ6IFNFVCBhY3Rpb24gcmV3cml0ZXMgZmllbGRzXG4gXHR0cnVuY1x0XHRcdFx0XHR0cnVuYzogb3V0cHV0IHRydW5jYXRpb25cbiBcdGljbXB2Nlx0XHRcdFx0XHRpY21wdjY6IElDTVB2NiBlY2hvIHR5cGUgbWF0Y2hcbiYjNDM7XHRzY3RwX2Nvbm5lY3RfdjRcdFx0XHRcdHNjdHA6IFNDVFAgZmxvdyBrZXkgbWF0Y2hpbmdcbiBcdHBzYW1wbGVcdFx0XHRcdFx0cHNhbXBsZTogU2FtcGxpbmcgcGFja2V0cyB3aXRoIHBzYW1wbGVcJiMzNDtcbiBcbiBpbmZvKCkge1xuQEAgLTYxMSw2ICYjNDM7NjEyLDEyNiBAQCB0ZXN0X2ljbXB2NigpIHtcbiBcdHJldHVybiAwXG4gfVxuIFxuJiM0MzsjIENoZWNrIGZvciBhbiBTQ1RQIGVuZHBvaW50IHZpYSAvcHJvYywgd2hpY2ggd29ya3Mgd2l0aG91dCBzY3RwX2RpYWcuXG4mIzQzO3NjdHBfZXBzX2hhcygpIHtcbiYjNDM7XHRpcCBuZXRucyBleGVjIFwmIzM0OyQxXCYjMzQ7IGF3ayAtdiBwPVwmIzM0OyQyXCYjMzQ7ICYjMzk7JDY9PXAmIzM5OyAvcHJvYy9uZXQvc2N0cC9lcHMgfCBncmVwIC1xIC5cbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBzY3RwX2Nvbm5lY3RfdjQgdGVzdFxuJiM0MzsjIC0gc2N0cChkc3Q9NDQ0MykgbWF0Y2hlcyBjbGllbnQtdG8tc2VydmVyIElOSVRcbiYjNDM7IyAtIHNjdHAoc3JjPTQ0NDMpIG1hdGNoZXMgc2VydmVyLXRvLWNsaWVudCBJTklULUFDS1xuJiM0MzsjIC0gcmVtb3ZlIGZsb3dzIGFuZCB2ZXJpZnkgY29ubmVjdGlvbiBmYWlscywgcmVpbnN0YWxsIGFuZCByZWNvdmVyXG4mIzQzO3Rlc3Rfc2N0cF9jb25uZWN0X3Y0KCkge1xuJiM0MztcdGxvY2FsIHQ9XCYjMzQ7dGVzdF9zY3RwX2Nvbm5lY3RfdjRcJiMzNDtcbiYjNDM7XHRsb2NhbCBzcnZfaXA9MTcyLjMxLjExMC4yMFxuJiM0MztcbiYjNDM7XHRtb2Rwcm9iZSAtcSBzY3RwIDJcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuIFwmIzM0OyRrc2Z0X3NraXBcJiMzNDtcbiYjNDM7XHRzb2NhdCAtViAyXHUwMDNlXHUwMDI2MSB8IGdyZXAgLXEgXCYjMzQ7ZGVmaW5lIFdJVEhfU0NUUFwmIzM0OyB8fCByZXR1cm4gXCYjMzQ7JGtzZnRfc2tpcFwmIzM0O1xuJiM0MztcbiYjNDM7XHRzYnhfYWRkIFwmIzM0OyR0XCYjMzQ7IHx8IHJldHVybiAkP1xuJiM0MztcdG92c19hZGRfZHAgXCYjMzQ7JHRcJiMzNDsgc2N0cDQgfHwgcmV0dXJuIDFcbiYjNDM7XG4mIzQzO1x0aW5mbyBcJiMzNDtjcmVhdGUgbmFtZXNwYWNlc1wmIzM0O1xuJiM0MztcdGZvciBucyBpbiBjbGllbnQgc2VydmVyOyBkb1xuJiM0MztcdFx0b3ZzX2FkZF9uZXRuc19hbmRfdmV0aHMgXCYjMzQ7JHRcJiMzNDsgXCYjMzQ7c2N0cDRcJiMzNDsgXCYjMzQ7JG5zXCYjMzQ7IFxcXG4mIzQzO1x0XHQgICAgXCYjMzQ7JHtuczowOjF9MFwmIzM0OyBcJiMzNDske25zOjA6MX0xXCYjMzQ7IHx8IHJldHVybiAxXG4mIzQzO1x0ZG9uZVxuJiM0MztcbiYjNDM7XHRpcCBuZXRucyBleGVjIGNsaWVudCBpcCBhZGRyIGFkZCAxNzIuMzEuMTEwLjEwLzI0IGRldiBjMVxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIGxpbmsgc2V0IGMxIHVwXG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBzZXJ2ZXIgaXAgYWRkciBhZGQgXCYjMzQ7JHtzcnZfaXB9LzI0XCYjMzQ7IGRldiBzMVxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGxpbmsgc2V0IHMxIHVwXG4mIzQzO1xuJiM0MztcdCMgUHJvYmU6IGNoZWNrIGlmIGtlcm5lbCBzdXBwb3J0cyBzY3RwIGZsb3cga2V5LlxuJiM0MztcdG92c19hZGRfZmxvdyBcJiMzNDskdFwmIzM0OyBzY3RwNCBcXFxuJiM0MztcdCAgICAmIzM5O2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMiksc2N0cChkc3Q9NDQ0MykmIzM5OyBcXFxuJiM0MztcdCAgICAmIzM5OzImIzM5OyBcdTAwMjZcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRpZiBbICQ/IC1uZSAwIF07IHRoZW5cbiYjNDM7XHRcdGluZm8gXCYjMzQ7bm8gc3VwcG9ydCBmb3Igc2N0cCBrZXkgLSBza2lwcGluZ1wmIzM0O1xuJiM0MztcdFx0b3ZzX2V4aXRfc2lnXG4mIzQzO1x0XHRyZXR1cm4gJGtzZnRfc2tpcFxuJiM0MztcdGZpXG4mIzQzO1x0b3ZzX2RlbF9mbG93cyBcJiMzNDskdFwmIzM0OyBzY3RwNFxuJiM0MztcbiYjNDM7XHQjIEFSUCBmb3J3YXJkaW5nXG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0OyR0XCYjMzQ7IHNjdHA0IFxcXG4mIzQzO1x0ICAgICYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJiMzOTsgXFxcbiYjNDM7XHQgICAgJiMzOTsyJiMzOTsgfHwgcmV0dXJuIDFcbiYjNDM7XHRvdnNfYWRkX2Zsb3cgXCYjMzQ7JHRcJiMzNDsgc2N0cDQgXFxcbiYjNDM7XHQgICAgJiMzOTtpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwNiksYXJwKCkmIzM5OyBcXFxuJiM0MztcdCAgICAmIzM5OzEmIzM5OyB8fCByZXR1cm4gMVxuJiM0MztcbiYjNDM7XHQjIFNDVFAgcG9ydCBtYXRjaGluZzogZHN0IGZvciByZXF1ZXN0LCBzcmMgZm9yIHJlcGx5XG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0OyR0XCYjMzQ7IHNjdHA0IFxcXG4mIzQzO1x0ICAgICYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKGRzdD00NDQzKSYjMzk7IFxcXG4mIzQzO1x0ICAgICYjMzk7MiYjMzk7IHx8IHJldHVybiAxXG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0OyR0XCYjMzQ7IHNjdHA0IFxcXG4mIzQzO1x0ICAgICYjMzk7aW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKHNyYz00NDQzKSYjMzk7IFxcXG4mIzQzO1x0ICAgICYjMzk7MSYjMzk7IHx8IHJldHVybiAxXG4mIzQzO1xuJiM0MztcdG92c19uZXRuc19zcGF3bl9kYWVtb24gXCYjMzQ7JHRcJiMzNDsgXCYjMzQ7c2VydmVyXCYjMzQ7IFxcXG4mIzQzO1x0ICAgIHNvY2F0IC11IFNDVFA0LUxJU1RFTjo0NDQzIFNURE9VVFxuJiM0MztcdGxvY2FsIHNlcnZlcl9waWQ9XCYjMzQ7JHBpZFwmIzM0O1xuJiM0MztcdG92c193YWl0IHNjdHBfZXBzX2hhcyBzZXJ2ZXIgNDQ0MyB8fCByZXR1cm4gMVxuJiM0MztcbiYjNDM7XHRpbmZvIFwmIzM0O3ZlcmlmeSBTQ1RQIGFzc29jaWF0aW9uIHdpdGggcG9ydC1rZXllZCBmbG93c1wmIzM0O1xuJiM0MztcdG92c19zYnggXCYjMzQ7JHRcJiMzNDsgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcbiYjNDM7XHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFwmIzM0O1NDVFA0LUNPTk5FQ1Q6JHtzcnZfaXB9OjQ0NDNcJiMzNDsgXHUwMDNjL2Rldi9udWxsIFxcXG4mIzQzO1x0ICAgIHx8IHJldHVybiAxXG4mIzQzO1xuJiM0MztcdG92c19kZWxfZmxvd3MgXCYjMzQ7JHRcJiMzNDsgc2N0cDRcbiYjNDM7XG4mIzQzO1x0aW5mbyBcJiMzNDt2ZXJpZnkgY29ubmVjdGlvbiBmYWlscyB3aXRob3V0IGZsb3dzXCYjMzQ7XG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0OyR0XCYjMzQ7IHNjdHA0IFxcXG4mIzQzO1x0ICAgICYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJiMzOTsgXFxcbiYjNDM7XHQgICAgJiMzOTsyJiMzOTsgfHwgcmV0dXJuIDFcbiYjNDM7XHRvdnNfYWRkX2Zsb3cgXCYjMzQ7JHRcJiMzNDsgc2N0cDQgXFxcbiYjNDM7XHQgICAgJiMzOTtpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwNiksYXJwKCkmIzM5OyBcXFxuJiM0MztcdCAgICAmIzM5OzEmIzM5OyB8fCByZXR1cm4gMVxuJiM0MztcbiYjNDM7XHRraWxsIC1URVJNIFwmIzM0OyRzZXJ2ZXJfcGlkXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRsb2NhbCBpPTBcbiYjNDM7XHR3aGlsZSBraWxsIC0wIFwmIzM0OyRzZXJ2ZXJfcGlkXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwgXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JGlcJiMzNDsgLWx0IDUgXTsgZG9cbiYjNDM7XHQgICAgc2xlZXAgMC4yXG4mIzQzO1x0ICAgIGk9JCgoaSAmIzQzOyAxKSlcbiYjNDM7XHRkb25lXG4mIzQzO1x0b3ZzX25ldG5zX3NwYXduX2RhZW1vbiBcJiMzNDskdFwmIzM0OyBcJiMzNDtzZXJ2ZXJcJiMzNDsgXFxcbiYjNDM7XHQgICAgc29jYXQgLXUgU0NUUDQtTElTVEVOOjQ0NDMgU1RET1VUXG4mIzQzO1x0c2VydmVyX3BpZD1cJiMzNDskcGlkXCYjMzQ7XG4mIzQzO1x0b3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA0NDQzIHx8IHJldHVybiAxXG4mIzQzO1xuJiM0MztcdG92c19zYnggXCYjMzQ7JHRcJiMzNDsgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcbiYjNDM7XHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFwmIzM0O1NDVFA0LUNPTk5FQ1Q6JHtzcnZfaXB9OjQ0NDNcJiMzNDsgXHUwMDNjL2Rldi9udWxsIFxcXG4mIzQzO1x0ICAgIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSBcXFxuJiM0MztcdCAgICBcdTAwMjZcdTAwMjYgeyBpbmZvIFwmIzM0O2Nvbm5lY3Rpb24gc2hvdWxkIGZhaWwgd2l0aG91dCBmbG93c1wmIzM0O1xuJiM0MztcdCAgICAgICAgIHJldHVybiAxOyB9XG4mIzQzO1xuJiM0MztcdGluZm8gXCYjMzQ7cmVpbnN0YWxsIGZsb3dzIGFuZCB2ZXJpZnkgcmVjb3ZlcnlcJiMzNDtcbiYjNDM7XHRvdnNfYWRkX2Zsb3cgXCYjMzQ7JHRcJiMzNDsgc2N0cDQgXFxcbiYjNDM7XHQgICAgJiMzOTtpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4MDgwMCksaXB2NChwcm90bz0xMzIpLHNjdHAoZHN0PTQ0NDMpJiMzOTsgXFxcbiYjNDM7XHQgICAgJiMzOTsyJiMzOTsgfHwgcmV0dXJuIDFcbiYjNDM7XHRvdnNfYWRkX2Zsb3cgXCYjMzQ7JHRcJiMzNDsgc2N0cDQgXFxcbiYjNDM7XHQgICAgJiMzOTtpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwMCksaXB2NChwcm90bz0xMzIpLHNjdHAoc3JjPTQ0NDMpJiMzOTsgXFxcbiYjNDM7XHQgICAgJiMzOTsxJiMzOTsgfHwgcmV0dXJuIDFcbiYjNDM7XG4mIzQzO1x0a2lsbCAtVEVSTSBcJiMzNDskc2VydmVyX3BpZFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0aT0wXG4mIzQzO1x0d2hpbGUga2lsbCAtMCBcJiMzNDskc2VydmVyX3BpZFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsIFx1MDAyNlx1MDAyNiBbIFwmIzM0OyRpXCYjMzQ7IC1sdCA1IF07IGRvXG4mIzQzO1x0ICAgIHNsZWVwIDAuMlxuJiM0MztcdCAgICBpPSQoKGkgJiM0MzsgMSkpXG4mIzQzO1x0ZG9uZVxuJiM0MztcdG92c19uZXRuc19zcGF3bl9kYWVtb24gXCYjMzQ7JHRcJiMzNDsgXCYjMzQ7c2VydmVyXCYjMzQ7IFxcXG4mIzQzO1x0ICAgIHNvY2F0IC11IFNDVFA0LUxJU1RFTjo0NDQzIFNURE9VVFxuJiM0MztcdHNlcnZlcl9waWQ9XCYjMzQ7JHBpZFwmIzM0O1xuJiM0MztcdG92c193YWl0IHNjdHBfZXBzX2hhcyBzZXJ2ZXIgNDQ0MyB8fCByZXR1cm4gMVxuJiM0MztcbiYjNDM7XHRvdnNfc2J4IFwmIzM0OyR0XCYjMzQ7IGlwIG5ldG5zIGV4ZWMgY2xpZW50IFxcXG4mIzQzO1x0ICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiBcJiMzNDtTQ1RQNC1DT05ORUNUOiR7c3J2X2lwfTo0NDQzXCYjMzQ7IFx1MDAzYy9kZXYvbnVsbCBcXFxuJiM0MztcdCAgICB8fCByZXR1cm4gMVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMFxuJiM0Mzt9XG4mIzQzO1xuICMgcHNhbXBsZSB0ZXN0XG4gIyAtIHVzZSBwc2FtcGxlIHRvIG9ic2VydmUgcGFja2V0c1xuIHRlc3RfcHNhbXBsZSgpIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3ZzLWRwY3RsLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL292cy1kcGN0bC5weVxuaW5kZXggZjNlZGQxOTgyMjNmMTcuLjYzM2FmMTBkN2U4YWIyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL292cy1kcGN0bC5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL292cy1kcGN0bC5weVxuQEAgLTE1LDYgJiM0MzsxNSw3IEBAIGltcG9ydCBzdHJ1Y3RcbiBpbXBvcnQgc3lzXG4gaW1wb3J0IHRpbWVcbiBpbXBvcnQgdHlwZXNcbiYjNDM7aW1wb3J0IHVuaXR0ZXN0XG4gaW1wb3J0IHV1aWRcbiBcbiB0cnk6XG5AQCAtMTk4NCw2ICYjNDM7MTk4NSwxMSBAQCBjbGFzcyBvdnNrZXkobmxhKTpcbiAgICAgICAgICAgICAgICAgXCYjMzQ7dWRwXCYjMzQ7LFxuICAgICAgICAgICAgICAgICBvdnNrZXkub3ZzX2tleV91ZHAsXG4gICAgICAgICAgICAgKSxcbiYjNDM7ICAgICAgICAgICAgKFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7T1ZTX0tFWV9BVFRSX1NDVFBcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtzY3RwXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgb3Zza2V5Lm92c19rZXlfc2N0cCxcbiYjNDM7ICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgIFwmIzM0O09WU19LRVlfQVRUUl9JQ01QXCYjMzQ7LFxuICAgICAgICAgICAgICAgICBcJiMzNDtpY21wXCYjMzQ7LFxuQEAgLTMxNjUsNSAmIzQzOzMxNzEsMTI4IEBAIGRlZiBtYWluKGFyZ3YpOlxuICAgICByZXR1cm4gMFxuIFxuIFxuJiM0MztkZWYgX2luaXRfb3Zza2V5X25sYXMoKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O0luaXRpYWxpemUgcmVxdWlyZWQgTkxBIGNsYXNzZXMgZm9yIG92c2tleSBwYXJzaW5nLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgbmxtc2dfYXRvbXMuZW5jYXBfb3Zza2V5ID0gZW5jYXBfb3Zza2V5XG4mIzQzOyAgICBubG1zZ19hdG9tcy5vdnNrZXkgPSBvdnNrZXlcbiYjNDM7ICAgIG5sbXNnX2F0b21zLm92c2FjdGlvbnMgPSBvdnNhY3Rpb25zXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF9wYXJzZV9mbG93KGZsb3dzdHIpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7UGFyc2UgYSBmbG93IHN0cmluZyBhbmQgcmV0dXJuIHRoZSBrZXkuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBrZXkgPSBvdnNrZXkoKVxuJiM0MzsgICAga2V5W1wmIzM0O2F0dHJzXCYjMzQ7XSA9IFtdXG4mIzQzOyAgICBrZXkucGFyc2UoZmxvd3N0cilcbiYjNDM7ICAgIHJldHVybiBrZXlcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX2ZpbmRfYXR0cihrZXksIGF0dHJfbmFtZSk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtGaW5kIGFuIGF0dHJpYnV0ZSBpbiBwYXJzZWQga2V5LlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgZm9yIGF0dHIgaW4ga2V5W1wmIzM0O2F0dHJzXCYjMzQ7XTpcbiYjNDM7ICAgICAgICBpZiBhdHRyWzBdID09IGF0dHJfbmFtZTpcbiYjNDM7ICAgICAgICAgICAgcmV0dXJuIGF0dHJbMV1cbiYjNDM7ICAgIHJldHVybiBOb25lXG4mIzQzO1xuJiM0MztcbiYjNDM7Y2xhc3MgVGVzdE92c0tleVBhcnNlKHVuaXR0ZXN0LlRlc3RDYXNlKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1VuaXQgdGVzdHMgZm9yIG92c2tleS5wYXJzZSgpIGZsb3cgc3RyaW5nIHBhcnNpbmcuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgQGNsYXNzbWV0aG9kXG4mIzQzOyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOlxuJiM0MzsgICAgICAgIF9pbml0X292c2tleV9ubGFzKClcbiYjNDM7XG4mIzQzOyAgICBkZWYgdGVzdF9zY3RwX2RzdChzZWxmKTpcbiYjNDM7ICAgICAgICBcJiMzNDtcJiMzNDtcJiMzNDtUZXN0IFNDVFAgZGVzdGluYXRpb24gcG9ydCBwYXJzaW5nLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFwmIzM0O3NjdHAoZHN0PTQ0NDMpXCYjMzQ7KVxuJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXCYjMzQ7T1ZTX0tFWV9BVFRSX1NDVFBcJiMzNDspXG4mIzQzOyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXCYjMzQ7U0NUUCBrZXkgbm90IGZvdW5kXCYjMzQ7KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcJiMzNDtkc3RcJiMzNDtdLCA0NDQzKVxuJiM0MztcbiYjNDM7ICAgIGRlZiB0ZXN0X3NjdHBfc3JjKHNlbGYpOlxuJiM0MzsgICAgICAgIFwmIzM0O1wmIzM0O1wmIzM0O1Rlc3QgU0NUUCBzb3VyY2UgcG9ydCBwYXJzaW5nLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFwmIzM0O3NjdHAoc3JjPTQ0NDMpXCYjMzQ7KVxuJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXCYjMzQ7T1ZTX0tFWV9BVFRSX1NDVFBcJiMzNDspXG4mIzQzOyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXCYjMzQ7U0NUUCBrZXkgbm90IGZvdW5kXCYjMzQ7KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcJiMzNDtzcmNcJiMzNDtdLCA0NDQzKVxuJiM0MztcbiYjNDM7ICAgIGRlZiB0ZXN0X3NjdHBfc3JjX2FuZF9kc3Qoc2VsZik6XG4mIzQzOyAgICAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7VGVzdCBTQ1RQIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gcG9ydCBwYXJzaW5nLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFwmIzM0O3NjdHAoc3JjPTEyMzQsZHN0PTU2NzgpXCYjMzQ7KVxuJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXCYjMzQ7T1ZTX0tFWV9BVFRSX1NDVFBcJiMzNDspXG4mIzQzOyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXCYjMzQ7U0NUUCBrZXkgbm90IGZvdW5kXCYjMzQ7KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcJiMzNDtzcmNcJiMzNDtdLCAxMjM0KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcJiMzNDtkc3RcJiMzNDtdLCA1Njc4KVxuJiM0MztcbiYjNDM7ICAgIGRlZiB0ZXN0X3RjcF9kc3Qoc2VsZik6XG4mIzQzOyAgICAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7VGVzdCBUQ1AgZGVzdGluYXRpb24gcG9ydCBwYXJzaW5nLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFwmIzM0O3RjcChkc3Q9ODApXCYjMzQ7KVxuJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXCYjMzQ7T1ZTX0tFWV9BVFRSX1RDUFwmIzM0OylcbiYjNDM7ICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCBcJiMzNDtUQ1Aga2V5IG5vdCBmb3VuZFwmIzM0OylcbiYjNDM7ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJbXCYjMzQ7ZHN0XCYjMzQ7XSwgODApXG4mIzQzO1xuJiM0MzsgICAgZGVmIHRlc3RfdWRwX2RzdChzZWxmKTpcbiYjNDM7ICAgICAgICBcJiMzNDtcJiMzNDtcJiMzNDtUZXN0IFVEUCBkZXN0aW5hdGlvbiBwb3J0IHBhcnNpbmcuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coXCYjMzQ7dWRwKGRzdD01MylcJiMzNDspXG4mIzQzOyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5LCBcJiMzNDtPVlNfS0VZX0FUVFJfVURQXCYjMzQ7KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGF0dHIsIFwmIzM0O1VEUCBrZXkgbm90IGZvdW5kXCYjMzQ7KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcJiMzNDtkc3RcJiMzNDtdLCA1MylcbiYjNDM7XG4mIzQzOyAgICBkZWYgdGVzdF9pY21wX3R5cGVfY29kZShzZWxmKTpcbiYjNDM7ICAgICAgICBcJiMzNDtcJiMzNDtcJiMzNDtUZXN0IElDTVAgdHlwZSBhbmQgY29kZSBwYXJzaW5nLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFwmIzM0O2ljbXAodHlwZT04LGNvZGU9MClcJiMzNDspXG4mIzQzOyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5LCBcJiMzNDtPVlNfS0VZX0FUVFJfSUNNUFwmIzM0OylcbiYjNDM7ICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCBcJiMzNDtJQ01QIGtleSBub3QgZm91bmRcJiMzNDspXG4mIzQzOyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyW1wmIzM0O3R5cGVcJiMzNDtdLCA4KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcJiMzNDtjb2RlXCYjMzQ7XSwgMClcbiYjNDM7XG4mIzQzOyAgICBkZWYgdGVzdF9pcHY0X3Byb3RvKHNlbGYpOlxuJiM0MzsgICAgICAgIFwmIzM0O1wmIzM0O1wmIzM0O1Rlc3QgSVB2NCBwcm90b2NvbCBwYXJzaW5nLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFwmIzM0O2V0aF90eXBlKDB4MDgwMCksaXB2NChwcm90bz0xMzIpXCYjMzQ7KVxuJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXCYjMzQ7T1ZTX0tFWV9BVFRSX0lQVjRcJiMzNDspXG4mIzQzOyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXCYjMzQ7SVB2NCBrZXkgbm90IGZvdW5kXCYjMzQ7KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcJiMzNDtwcm90b1wmIzM0O10sIDEzMilcbiYjNDM7XG4mIzQzOyAgICBkZWYgdGVzdF9ldGhfdHlwZShzZWxmKTpcbiYjNDM7ICAgICAgICBcJiMzNDtcJiMzNDtcJiMzNDtUZXN0IEV0aGVybmV0IHR5cGUgcGFyc2luZy5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgICAgICBrZXkgPSBfcGFyc2VfZmxvdyhcJiMzNDtldGhfdHlwZSgweDA4MDApXCYjMzQ7KVxuJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXCYjMzQ7T1ZTX0tFWV9BVFRSX0VUSEVSVFlQRVwmIzM0OylcbiYjNDM7ICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCBcJiMzNDtFdGhUeXBlIGtleSBub3QgZm91bmRcJiMzNDspXG4mIzQzOyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyLCAweDA4MDApXG4mIzQzO1xuJiM0MzsgICAgZGVmIHRlc3RfZnVsbF9zY3RwX2Zsb3coc2VsZik6XG4mIzQzOyAgICAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7VGVzdCBjb21wbGV0ZSBTQ1RQIGZsb3cgc3RyaW5nIHBhcnNpbmcuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICAgICAgZmxvd3N0ciA9IChcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLFwmIzM0O1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtpcHY0KHByb3RvPTEzMiksc2N0cChkc3Q9NDQ0MylcJiMzNDtcbiYjNDM7ICAgICAgICApXG4mIzQzOyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coZmxvd3N0cilcbiYjNDM7ICAgICAgICBpbl9wb3J0ID0gX2ZpbmRfYXR0cihrZXksIFwmIzM0O09WU19LRVlfQVRUUl9JTl9QT1JUXCYjMzQ7KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5fcG9ydCwgMSlcbiYjNDM7ICAgICAgICBzY3RwID0gX2ZpbmRfYXR0cihrZXksIFwmIzM0O09WU19LRVlfQVRUUl9TQ1RQXCYjMzQ7KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHNjdHAsIFwmIzM0O1NDVFAga2V5IG5vdCBmb3VuZFwmIzM0OylcbiYjNDM7ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNjdHBbXCYjMzQ7ZHN0XCYjMzQ7XSwgNDQ0MylcbiYjNDM7XG4mIzQzOyAgICBkZWYgdGVzdF9zY3RwX3JvdW5kdHJpcChzZWxmKTpcbiYjNDM7ICAgICAgICBcJiMzNDtcJiMzNDtcJiMzNDtUZXN0IHBhcnNlIC1cdTAwM2UgZHBzdHIgLVx1MDAzZSBwYXJzZSBrZWVwcyB0aGUgU0NUUCBrZXkuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coXCYjMzQ7c2N0cChkc3Q9NDQ0MylcJiMzNDspXG4mIzQzOyAgICAgICAga2V5MiA9IG92c2tleSgpXG4mIzQzOyAgICAgICAga2V5MltcJiMzNDthdHRyc1wmIzM0O10gPSBbXVxuJiM0MzsgICAgICAgIHJlbWFpbmRlciA9IGtleTIucGFyc2Uoa2V5LmRwc3RyKCkpXG4mIzQzOyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZW1haW5kZXIsIFwmIzM0O1wmIzM0OywgXCYjMzQ7cm91bmQtdHJpcCBsZWZ0IHVucGFyc2VkIHRleHRcJiMzNDspXG4mIzQzOyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5MiwgXCYjMzQ7T1ZTX0tFWV9BVFRSX1NDVFBcJiMzNDspXG4mIzQzOyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXCYjMzQ7U0NUUCBrZXkgbG9zdCBpbiByb3VuZC10cmlwXCYjMzQ7KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcJiMzNDtkc3RcJiMzNDtdLCA0NDQzKVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiB0ZXN0X292c2tleV9wYXJzZSgpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7VGVzdCBvdnNrZXkucGFyc2UoKSBtZXRob2QgZm9yIHZhcmlvdXMgZmxvdyBrZXkgdHlwZXMuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKS5sb2FkVGVzdHNGcm9tVGVzdENhc2UoVGVzdE92c0tleVBhcnNlKVxuJiM0MzsgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIodmVyYm9zaXR5PTIpXG4mIzQzOyAgICByZXN1bHQgPSBydW5uZXIucnVuKHN1aXRlKVxuJiM0MzsgICAgcmV0dXJuIDAgaWYgcmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSBlbHNlIDFcbiYjNDM7XG4mIzQzO1xuIGlmIF9fbmFtZV9fID09IFwmIzM0O19fbWFpbl9fXCYjMzQ7OlxuJiM0MzsgICAgaWYgbGVuKHN5cy5hcmd2KSBcdTAwM2UgMSBhbmQgc3lzLmFyZ3ZbMV0gPT0gXCYjMzQ7LS10ZXN0XCYjMzQ7OlxuJiM0MzsgICAgICAgIHN5cy5leGl0KHRlc3Rfb3Zza2V5X3BhcnNlKCkpXG4gICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3YpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIxOjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoLyopIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNzlhZDhiMDYxODkyZTQ4MjM0MDkzZjdkNmIyYTliODdlODY3YTJiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMjUgMjE6Mzg6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2gKaW5kZXggODUzZGJjMWIwMGQ3YWIuLmI0NDgzMjQ1MjdkOGIwIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoCkBAIC0zNCw2ICYjNDM7MzQsNyBAQCB0ZXN0cz0mIzM0OwogCWFjdGlvbl9zZXQJCQkJc2V0OiBTRVQgYWN0aW9uIHJld3JpdGVzIGZpZWxkcwogCXRydW5jCQkJCQl0cnVuYzogb3V0cHV0IHRydW5jYXRpb24KIAlpY21wdjYJCQkJCWljbXB2NjogSUNNUHY2IGVjaG8gdHlwZSBtYXRjaAomIzQzOwlzY3RwX2Nvbm5lY3RfdjQJCQkJc2N0cDogU0NUUCBmbG93IGtleSBtYXRjaGluZwogCXBzYW1wbGUJCQkJCXBzYW1wbGU6IFNhbXBsaW5nIHBhY2tldHMgd2l0aCBwc2FtcGxlJiMzNDsKIAogaW5mbygpIHsKQEAgLTYxMSw2ICYjNDM7NjEyLDEyNiBAQCB0ZXN0X2ljbXB2NigpIHsKIAlyZXR1cm4gMAogfQogCiYjNDM7IyBDaGVjayBmb3IgYW4gU0NUUCBlbmRwb2ludCB2aWEgL3Byb2MsIHdoaWNoIHdvcmtzIHdpdGhvdXQgc2N0cF9kaWFnLgomIzQzO3NjdHBfZXBzX2hhcygpIHsKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyQxJiMzNDsgYXdrIC12IHA9JiMzNDskMiYjMzQ7ICYjMzk7JDY9PXAmIzM5OyAvcHJvYy9uZXQvc2N0cC9lcHMgfCBncmVwIC1xIC4KJiM0Mzt9CiYjNDM7CiYjNDM7IyBzY3RwX2Nvbm5lY3RfdjQgdGVzdAomIzQzOyMgLSBzY3RwKGRzdD00NDQzKSBtYXRjaGVzIGNsaWVudC10by1zZXJ2ZXIgSU5JVAomIzQzOyMgLSBzY3RwKHNyYz00NDQzKSBtYXRjaGVzIHNlcnZlci10by1jbGllbnQgSU5JVC1BQ0sKJiM0MzsjIC0gcmVtb3ZlIGZsb3dzIGFuZCB2ZXJpZnkgY29ubmVjdGlvbiBmYWlscywgcmVpbnN0YWxsIGFuZCByZWNvdmVyCiYjNDM7dGVzdF9zY3RwX2Nvbm5lY3RfdjQoKSB7CiYjNDM7CWxvY2FsIHQ9JiMzNDt0ZXN0X3NjdHBfY29ubmVjdF92NCYjMzQ7CiYjNDM7CWxvY2FsIHNydl9pcD0xNzIuMzEuMTEwLjIwCiYjNDM7CiYjNDM7CW1vZHByb2JlIC1xIHNjdHAgMiZndDsvZGV2L251bGwgfHwgcmV0dXJuICYjMzQ7JGtzZnRfc2tpcCYjMzQ7CiYjNDM7CXNvY2F0IC1WIDImZ3Q7JmFtcDsxIHwgZ3JlcCAtcSAmIzM0O2RlZmluZSBXSVRIX1NDVFAmIzM0OyB8fCByZXR1cm4gJiMzNDska3NmdF9za2lwJiMzNDsKJiM0MzsKJiM0MzsJc2J4X2FkZCAmIzM0OyR0JiMzNDsgfHwgcmV0dXJuICQ/CiYjNDM7CW92c19hZGRfZHAgJiMzNDskdCYjMzQ7IHNjdHA0IHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CWluZm8gJiMzNDtjcmVhdGUgbmFtZXNwYWNlcyYjMzQ7CiYjNDM7CWZvciBucyBpbiBjbGllbnQgc2VydmVyOyBkbwomIzQzOwkJb3ZzX2FkZF9uZXRuc19hbmRfdmV0aHMgJiMzNDskdCYjMzQ7ICYjMzQ7c2N0cDQmIzM0OyAmIzM0OyRucyYjMzQ7IFwKJiM0MzsJCSAgICAmIzM0OyR7bnM6MDoxfTAmIzM0OyAmIzM0OyR7bnM6MDoxfTEmIzM0OyB8fCByZXR1cm4gMQomIzQzOwlkb25lCiYjNDM7CiYjNDM7CWlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIGFkZHIgYWRkIDE3Mi4zMS4xMTAuMTAvMjQgZGV2IGMxCiYjNDM7CWlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIGxpbmsgc2V0IGMxIHVwCiYjNDM7CWlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGFkZHIgYWRkICYjMzQ7JHtzcnZfaXB9LzI0JiMzNDsgZGV2IHMxCiYjNDM7CWlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGxpbmsgc2V0IHMxIHVwCiYjNDM7CiYjNDM7CSMgUHJvYmU6IGNoZWNrIGlmIGtlcm5lbCBzdXBwb3J0cyBzY3RwIGZsb3cga2V5LgomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDskdCYjMzQ7IHNjdHA0IFwKJiM0MzsJICAgICYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKGRzdD00NDQzKSYjMzk7IFwKJiM0MzsJICAgICYjMzk7MiYjMzk7ICZhbXA7Jmd0Oy9kZXYvbnVsbAomIzQzOwlpZiBbICQ/IC1uZSAwIF07IHRoZW4KJiM0MzsJCWluZm8gJiMzNDtubyBzdXBwb3J0IGZvciBzY3RwIGtleSAtIHNraXBwaW5nJiMzNDsKJiM0MzsJCW92c19leGl0X3NpZwomIzQzOwkJcmV0dXJuICRrc2Z0X3NraXAKJiM0MzsJZmkKJiM0MzsJb3ZzX2RlbF9mbG93cyAmIzM0OyR0JiMzNDsgc2N0cDQKJiM0MzsKJiM0MzsJIyBBUlAgZm9yd2FyZGluZwomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDskdCYjMzQ7IHNjdHA0IFwKJiM0MzsJICAgICYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJiMzOTsgXAomIzQzOwkgICAgJiMzOTsyJiMzOTsgfHwgcmV0dXJuIDEKJiM0MzsJb3ZzX2FkZF9mbG93ICYjMzQ7JHQmIzM0OyBzY3RwNCBcCiYjNDM7CSAgICAmIzM5O2luX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHgwODA2KSxhcnAoKSYjMzk7IFwKJiM0MzsJICAgICYjMzk7MSYjMzk7IHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CSMgU0NUUCBwb3J0IG1hdGNoaW5nOiBkc3QgZm9yIHJlcXVlc3QsIHNyYyBmb3IgcmVwbHkKJiM0MzsJb3ZzX2FkZF9mbG93ICYjMzQ7JHQmIzM0OyBzY3RwNCBcCiYjNDM7CSAgICAmIzM5O2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMiksc2N0cChkc3Q9NDQ0MykmIzM5OyBcCiYjNDM7CSAgICAmIzM5OzImIzM5OyB8fCByZXR1cm4gMQomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDskdCYjMzQ7IHNjdHA0IFwKJiM0MzsJICAgICYjMzk7aW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKHNyYz00NDQzKSYjMzk7IFwKJiM0MzsJICAgICYjMzk7MSYjMzk7IHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CW92c19uZXRuc19zcGF3bl9kYWVtb24gJiMzNDskdCYjMzQ7ICYjMzQ7c2VydmVyJiMzNDsgXAomIzQzOwkgICAgc29jYXQgLXUgU0NUUDQtTElTVEVOOjQ0NDMgU1RET1VUCiYjNDM7CWxvY2FsIHNlcnZlcl9waWQ9JiMzNDskcGlkJiMzNDsKJiM0MzsJb3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA0NDQzIHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CWluZm8gJiMzNDt2ZXJpZnkgU0NUUCBhc3NvY2lhdGlvbiB3aXRoIHBvcnQta2V5ZWQgZmxvd3MmIzM0OwomIzQzOwlvdnNfc2J4ICYjMzQ7JHQmIzM0OyBpcCBuZXRucyBleGVjIGNsaWVudCBcCiYjNDM7CSAgICB0aW1lb3V0IDMgc29jYXQgLXUgU1RESU4gJiMzNDtTQ1RQNC1DT05ORUNUOiR7c3J2X2lwfTo0NDQzJiMzNDsgJmx0Oy9kZXYvbnVsbCBcCiYjNDM7CSAgICB8fCByZXR1cm4gMQomIzQzOwomIzQzOwlvdnNfZGVsX2Zsb3dzICYjMzQ7JHQmIzM0OyBzY3RwNAomIzQzOwomIzQzOwlpbmZvICYjMzQ7dmVyaWZ5IGNvbm5lY3Rpb24gZmFpbHMgd2l0aG91dCBmbG93cyYjMzQ7CiYjNDM7CW92c19hZGRfZmxvdyAmIzM0OyR0JiMzNDsgc2N0cDQgXAomIzQzOwkgICAgJiMzOTtpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4MDgwNiksYXJwKCkmIzM5OyBcCiYjNDM7CSAgICAmIzM5OzImIzM5OyB8fCByZXR1cm4gMQomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDskdCYjMzQ7IHNjdHA0IFwKJiM0MzsJICAgICYjMzk7aW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJiMzOTsgXAomIzQzOwkgICAgJiMzOTsxJiMzOTsgfHwgcmV0dXJuIDEKJiM0MzsKJiM0MzsJa2lsbCAtVEVSTSAmIzM0OyRzZXJ2ZXJfcGlkJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJbG9jYWwgaT0wCiYjNDM7CXdoaWxlIGtpbGwgLTAgJiMzNDskc2VydmVyX3BpZCYjMzQ7IDImZ3Q7L2Rldi9udWxsICZhbXA7JmFtcDsgWyAmIzM0OyRpJiMzNDsgLWx0IDUgXTsgZG8KJiM0MzsJICAgIHNsZWVwIDAuMgomIzQzOwkgICAgaT0kKChpICYjNDM7IDEpKQomIzQzOwlkb25lCiYjNDM7CW92c19uZXRuc19zcGF3bl9kYWVtb24gJiMzNDskdCYjMzQ7ICYjMzQ7c2VydmVyJiMzNDsgXAomIzQzOwkgICAgc29jYXQgLXUgU0NUUDQtTElTVEVOOjQ0NDMgU1RET1VUCiYjNDM7CXNlcnZlcl9waWQ9JiMzNDskcGlkJiMzNDsKJiM0MzsJb3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA0NDQzIHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CW92c19zYnggJiMzNDskdCYjMzQ7IGlwIG5ldG5zIGV4ZWMgY2xpZW50IFwKJiM0MzsJICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiAmIzM0O1NDVFA0LUNPTk5FQ1Q6JHtzcnZfaXB9OjQ0NDMmIzM0OyAmbHQ7L2Rldi9udWxsIFwKJiM0MzsJICAgICZndDsvZGV2L251bGwgMiZndDsmYW1wOzEgXAomIzQzOwkgICAgJmFtcDsmYW1wOyB7IGluZm8gJiMzNDtjb25uZWN0aW9uIHNob3VsZCBmYWlsIHdpdGhvdXQgZmxvd3MmIzM0OwomIzQzOwkgICAgICAgICByZXR1cm4gMTsgfQomIzQzOwomIzQzOwlpbmZvICYjMzQ7cmVpbnN0YWxsIGZsb3dzIGFuZCB2ZXJpZnkgcmVjb3ZlcnkmIzM0OwomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDskdCYjMzQ7IHNjdHA0IFwKJiM0MzsJICAgICYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKGRzdD00NDQzKSYjMzk7IFwKJiM0MzsJICAgICYjMzk7MiYjMzk7IHx8IHJldHVybiAxCiYjNDM7CW92c19hZGRfZmxvdyAmIzM0OyR0JiMzNDsgc2N0cDQgXAomIzQzOwkgICAgJiMzOTtpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwMCksaXB2NChwcm90bz0xMzIpLHNjdHAoc3JjPTQ0NDMpJiMzOTsgXAomIzQzOwkgICAgJiMzOTsxJiMzOTsgfHwgcmV0dXJuIDEKJiM0MzsKJiM0MzsJa2lsbCAtVEVSTSAmIzM0OyRzZXJ2ZXJfcGlkJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJaT0wCiYjNDM7CXdoaWxlIGtpbGwgLTAgJiMzNDskc2VydmVyX3BpZCYjMzQ7IDImZ3Q7L2Rldi9udWxsICZhbXA7JmFtcDsgWyAmIzM0OyRpJiMzNDsgLWx0IDUgXTsgZG8KJiM0MzsJICAgIHNsZWVwIDAuMgomIzQzOwkgICAgaT0kKChpICYjNDM7IDEpKQomIzQzOwlkb25lCiYjNDM7CW92c19uZXRuc19zcGF3bl9kYWVtb24gJiMzNDskdCYjMzQ7ICYjMzQ7c2VydmVyJiMzNDsgXAomIzQzOwkgICAgc29jYXQgLXUgU0NUUDQtTElTVEVOOjQ0NDMgU1RET1VUCiYjNDM7CXNlcnZlcl9waWQ9JiMzNDskcGlkJiMzNDsKJiM0MzsJb3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA0NDQzIHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CW92c19zYnggJiMzNDskdCYjMzQ7IGlwIG5ldG5zIGV4ZWMgY2xpZW50IFwKJiM0MzsJICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiAmIzM0O1NDVFA0LUNPTk5FQ1Q6JHtzcnZfaXB9OjQ0NDMmIzM0OyAmbHQ7L2Rldi9udWxsIFwKJiM0MzsJICAgIHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CXJldHVybiAwCiYjNDM7fQomIzQzOwogIyBwc2FtcGxlIHRlc3QKICMgLSB1c2UgcHNhbXBsZSB0byBvYnNlcnZlIHBhY2tldHMKIHRlc3RfcHNhbXBsZSgpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vdnMtZHBjdGwucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3ZzLWRwY3RsLnB5CmluZGV4IGYzZWRkMTk4MjIzZjE3Li42MzNhZjEwZDdlOGFiMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL292cy1kcGN0bC5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3ZzLWRwY3RsLnB5CkBAIC0xNSw2ICYjNDM7MTUsNyBAQCBpbXBvcnQgc3RydWN0CiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogaW1wb3J0IHR5cGVzCiYjNDM7aW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgdXVpZAogCiB0cnk6CkBAIC0xOTg0LDYgJiM0MzsxOTg1LDExIEBAIGNsYXNzIG92c2tleShubGEpOgogICAgICAgICAgICAgICAgICYjMzQ7dWRwJiMzNDssCiAgICAgICAgICAgICAgICAgb3Zza2V5Lm92c19rZXlfdWRwLAogICAgICAgICAgICAgKSwKJiM0MzsgICAgICAgICAgICAoCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7T1ZTX0tFWV9BVFRSX1NDVFAmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtzY3RwJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgIG92c2tleS5vdnNfa2V5X3NjdHAsCiYjNDM7ICAgICAgICAgICAgKSwKICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAmIzM0O09WU19LRVlfQVRUUl9JQ01QJiMzNDssCiAgICAgICAgICAgICAgICAgJiMzNDtpY21wJiMzNDssCkBAIC0zMTY1LDUgJiM0MzszMTcxLDEyOCBAQCBkZWYgbWFpbihhcmd2KToKICAgICByZXR1cm4gMAogCiAKJiM0MztkZWYgX2luaXRfb3Zza2V5X25sYXMoKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7SW5pdGlhbGl6ZSByZXF1aXJlZCBOTEEgY2xhc3NlcyBmb3Igb3Zza2V5IHBhcnNpbmcuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIG5sbXNnX2F0b21zLmVuY2FwX292c2tleSA9IGVuY2FwX292c2tleQomIzQzOyAgICBubG1zZ19hdG9tcy5vdnNrZXkgPSBvdnNrZXkKJiM0MzsgICAgbmxtc2dfYXRvbXMub3ZzYWN0aW9ucyA9IG92c2FjdGlvbnMKJiM0MzsKJiM0MzsKJiM0MztkZWYgX3BhcnNlX2Zsb3coZmxvd3N0cik6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O1BhcnNlIGEgZmxvdyBzdHJpbmcgYW5kIHJldHVybiB0aGUga2V5LiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBrZXkgPSBvdnNrZXkoKQomIzQzOyAgICBrZXlbJiMzNDthdHRycyYjMzQ7XSA9IFtdCiYjNDM7ICAgIGtleS5wYXJzZShmbG93c3RyKQomIzQzOyAgICByZXR1cm4ga2V5CiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF9maW5kX2F0dHIoa2V5LCBhdHRyX25hbWUpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtGaW5kIGFuIGF0dHJpYnV0ZSBpbiBwYXJzZWQga2V5LiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBmb3IgYXR0ciBpbiBrZXlbJiMzNDthdHRycyYjMzQ7XToKJiM0MzsgICAgICAgIGlmIGF0dHJbMF0gPT0gYXR0cl9uYW1lOgomIzQzOyAgICAgICAgICAgIHJldHVybiBhdHRyWzFdCiYjNDM7ICAgIHJldHVybiBOb25lCiYjNDM7CiYjNDM7CiYjNDM7Y2xhc3MgVGVzdE92c0tleVBhcnNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7VW5pdCB0ZXN0cyBmb3Igb3Zza2V5LnBhcnNlKCkgZmxvdyBzdHJpbmcgcGFyc2luZy4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgQGNsYXNzbWV0aG9kCiYjNDM7ICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CiYjNDM7ICAgICAgICBfaW5pdF9vdnNrZXlfbmxhcygpCiYjNDM7CiYjNDM7ICAgIGRlZiB0ZXN0X3NjdHBfZHN0KHNlbGYpOgomIzQzOyAgICAgICAgJiMzNDsmIzM0OyYjMzQ7VGVzdCBTQ1RQIGRlc3RpbmF0aW9uIHBvcnQgcGFyc2luZy4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KCYjMzQ7c2N0cChkc3Q9NDQ0MykmIzM0OykKJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgJiMzNDtPVlNfS0VZX0FUVFJfU0NUUCYjMzQ7KQomIzQzOyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgJiMzNDtTQ1RQIGtleSBub3QgZm91bmQmIzM0OykKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0clsmIzM0O2RzdCYjMzQ7XSwgNDQ0MykKJiM0MzsKJiM0MzsgICAgZGVmIHRlc3Rfc2N0cF9zcmMoc2VsZik6CiYjNDM7ICAgICAgICAmIzM0OyYjMzQ7JiMzNDtUZXN0IFNDVFAgc291cmNlIHBvcnQgcGFyc2luZy4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KCYjMzQ7c2N0cChzcmM9NDQ0MykmIzM0OykKJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgJiMzNDtPVlNfS0VZX0FUVFJfU0NUUCYjMzQ7KQomIzQzOyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgJiMzNDtTQ1RQIGtleSBub3QgZm91bmQmIzM0OykKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0clsmIzM0O3NyYyYjMzQ7XSwgNDQ0MykKJiM0MzsKJiM0MzsgICAgZGVmIHRlc3Rfc2N0cF9zcmNfYW5kX2RzdChzZWxmKToKJiM0MzsgICAgICAgICYjMzQ7JiMzNDsmIzM0O1Rlc3QgU0NUUCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHBvcnQgcGFyc2luZy4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KCYjMzQ7c2N0cChzcmM9MTIzNCxkc3Q9NTY3OCkmIzM0OykKJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgJiMzNDtPVlNfS0VZX0FUVFJfU0NUUCYjMzQ7KQomIzQzOyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgJiMzNDtTQ1RQIGtleSBub3QgZm91bmQmIzM0OykKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0clsmIzM0O3NyYyYjMzQ7XSwgMTIzNCkKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0clsmIzM0O2RzdCYjMzQ7XSwgNTY3OCkKJiM0MzsKJiM0MzsgICAgZGVmIHRlc3RfdGNwX2RzdChzZWxmKToKJiM0MzsgICAgICAgICYjMzQ7JiMzNDsmIzM0O1Rlc3QgVENQIGRlc3RpbmF0aW9uIHBvcnQgcGFyc2luZy4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KCYjMzQ7dGNwKGRzdD04MCkmIzM0OykKJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgJiMzNDtPVlNfS0VZX0FUVFJfVENQJiMzNDspCiYjNDM7ICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCAmIzM0O1RDUCBrZXkgbm90IGZvdW5kJiMzNDspCiYjNDM7ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJbJiMzNDtkc3QmIzM0O10sIDgwKQomIzQzOwomIzQzOyAgICBkZWYgdGVzdF91ZHBfZHN0KHNlbGYpOgomIzQzOyAgICAgICAgJiMzNDsmIzM0OyYjMzQ7VGVzdCBVRFAgZGVzdGluYXRpb24gcG9ydCBwYXJzaW5nLiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coJiMzNDt1ZHAoZHN0PTUzKSYjMzQ7KQomIzQzOyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5LCAmIzM0O09WU19LRVlfQVRUUl9VRFAmIzM0OykKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGF0dHIsICYjMzQ7VURQIGtleSBub3QgZm91bmQmIzM0OykKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0clsmIzM0O2RzdCYjMzQ7XSwgNTMpCiYjNDM7CiYjNDM7ICAgIGRlZiB0ZXN0X2ljbXBfdHlwZV9jb2RlKHNlbGYpOgomIzQzOyAgICAgICAgJiMzNDsmIzM0OyYjMzQ7VGVzdCBJQ01QIHR5cGUgYW5kIGNvZGUgcGFyc2luZy4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KCYjMzQ7aWNtcCh0eXBlPTgsY29kZT0wKSYjMzQ7KQomIzQzOyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5LCAmIzM0O09WU19LRVlfQVRUUl9JQ01QJiMzNDspCiYjNDM7ICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCAmIzM0O0lDTVAga2V5IG5vdCBmb3VuZCYjMzQ7KQomIzQzOyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyWyYjMzQ7dHlwZSYjMzQ7XSwgOCkKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0clsmIzM0O2NvZGUmIzM0O10sIDApCiYjNDM7CiYjNDM7ICAgIGRlZiB0ZXN0X2lwdjRfcHJvdG8oc2VsZik6CiYjNDM7ICAgICAgICAmIzM0OyYjMzQ7JiMzNDtUZXN0IElQdjQgcHJvdG9jb2wgcGFyc2luZy4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KCYjMzQ7ZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMikmIzM0OykKJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgJiMzNDtPVlNfS0VZX0FUVFJfSVBWNCYjMzQ7KQomIzQzOyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgJiMzNDtJUHY0IGtleSBub3QgZm91bmQmIzM0OykKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0clsmIzM0O3Byb3RvJiMzNDtdLCAxMzIpCiYjNDM7CiYjNDM7ICAgIGRlZiB0ZXN0X2V0aF90eXBlKHNlbGYpOgomIzQzOyAgICAgICAgJiMzNDsmIzM0OyYjMzQ7VGVzdCBFdGhlcm5ldCB0eXBlIHBhcnNpbmcuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgICAgICBrZXkgPSBfcGFyc2VfZmxvdygmIzM0O2V0aF90eXBlKDB4MDgwMCkmIzM0OykKJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgJiMzNDtPVlNfS0VZX0FUVFJfRVRIRVJUWVBFJiMzNDspCiYjNDM7ICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCAmIzM0O0V0aFR5cGUga2V5IG5vdCBmb3VuZCYjMzQ7KQomIzQzOyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyLCAweDA4MDApCiYjNDM7CiYjNDM7ICAgIGRlZiB0ZXN0X2Z1bGxfc2N0cF9mbG93KHNlbGYpOgomIzQzOyAgICAgICAgJiMzNDsmIzM0OyYjMzQ7VGVzdCBjb21wbGV0ZSBTQ1RQIGZsb3cgc3RyaW5nIHBhcnNpbmcuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgICAgICBmbG93c3RyID0gKAomIzQzOyAgICAgICAgICAgICYjMzQ7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLCYjMzQ7CiYjNDM7ICAgICAgICAgICAgJiMzNDtpcHY0KHByb3RvPTEzMiksc2N0cChkc3Q9NDQ0MykmIzM0OwomIzQzOyAgICAgICAgKQomIzQzOyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coZmxvd3N0cikKJiM0MzsgICAgICAgIGluX3BvcnQgPSBfZmluZF9hdHRyKGtleSwgJiMzNDtPVlNfS0VZX0FUVFJfSU5fUE9SVCYjMzQ7KQomIzQzOyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbl9wb3J0LCAxKQomIzQzOyAgICAgICAgc2N0cCA9IF9maW5kX2F0dHIoa2V5LCAmIzM0O09WU19LRVlfQVRUUl9TQ1RQJiMzNDspCiYjNDM7ICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShzY3RwLCAmIzM0O1NDVFAga2V5IG5vdCBmb3VuZCYjMzQ7KQomIzQzOyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY3RwWyYjMzQ7ZHN0JiMzNDtdLCA0NDQzKQomIzQzOwomIzQzOyAgICBkZWYgdGVzdF9zY3RwX3JvdW5kdHJpcChzZWxmKToKJiM0MzsgICAgICAgICYjMzQ7JiMzNDsmIzM0O1Rlc3QgcGFyc2UgLSZndDsgZHBzdHIgLSZndDsgcGFyc2Uga2VlcHMgdGhlIFNDVFAga2V5LiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coJiMzNDtzY3RwKGRzdD00NDQzKSYjMzQ7KQomIzQzOyAgICAgICAga2V5MiA9IG92c2tleSgpCiYjNDM7ICAgICAgICBrZXkyWyYjMzQ7YXR0cnMmIzM0O10gPSBbXQomIzQzOyAgICAgICAgcmVtYWluZGVyID0ga2V5Mi5wYXJzZShrZXkuZHBzdHIoKSkKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVtYWluZGVyLCAmIzM0OyYjMzQ7LCAmIzM0O3JvdW5kLXRyaXAgbGVmdCB1bnBhcnNlZCB0ZXh0JiMzNDspCiYjNDM7ICAgICAgICBhdHRyID0gX2ZpbmRfYXR0cihrZXkyLCAmIzM0O09WU19LRVlfQVRUUl9TQ1RQJiMzNDspCiYjNDM7ICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCAmIzM0O1NDVFAga2V5IGxvc3QgaW4gcm91bmQtdHJpcCYjMzQ7KQomIzQzOyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyWyYjMzQ7ZHN0JiMzNDtdLCA0NDQzKQomIzQzOwomIzQzOwomIzQzO2RlZiB0ZXN0X292c2tleV9wYXJzZSgpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtUZXN0IG92c2tleS5wYXJzZSgpIG1ldGhvZCBmb3IgdmFyaW91cyBmbG93IGtleSB0eXBlcy4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkubG9hZFRlc3RzRnJvbVRlc3RDYXNlKFRlc3RPdnNLZXlQYXJzZSkKJiM0MzsgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIodmVyYm9zaXR5PTIpCiYjNDM7ICAgIHJlc3VsdCA9IHJ1bm5lci5ydW4oc3VpdGUpCiYjNDM7ICAgIHJldHVybiAwIGlmIHJlc3VsdC53YXNTdWNjZXNzZnVsKCkgZWxzZSAxCiYjNDM7CiYjNDM7CiBpZiBfX25hbWVfXyA9PSAmIzM0O19fbWFpbl9fJiMzNDs6CiYjNDM7ICAgIGlmIGxlbihzeXMuYXJndikgJmd0OyAxIGFuZCBzeXMuYXJndlsxXSA9PSAmIzM0Oy0tdGVzdCYjMzQ7OgomIzQzOyAgICAgICAgc3lzLmV4aXQodGVzdF9vdnNrZXlfcGFyc2UoKSkKICAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2KSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjE6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkzMgoJCQkJCQkJb3V0cHV0OiA2NwoJCQkJCQkJdGhvdWdodHM6IDI5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIE5lZWQgZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgd2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgZnV6emluZyBkdWUgdG8gZnVuY3Rpb25hbCBjaGFuZ2VzIHdpdGhpbiB0aGUga2VybmVsLiBUaGUgZmlsZXMgbW9kaWZpZWQgYXJlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2hgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL292cy1kcGN0bC5weWAuIFRoZXNlIGFyZSBzZWxmdGVzdHMgZm9yIE9wZW4gdlN3aXRjaC4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aG91Z2g7IHRoZXJlIGFyZSAqbm8qIGNoYW5nZXMgdG8gYW55IGtlcm5lbCBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBhIGRpcmVjdG9yeSBsaWtlIGBuZXQvb3BlbnZzd2l0Y2gvYC4KCkFscmlnaHQsIGEgcXVpY2sgcmV2aWV3IG9mIHRoZSBkaWZmIGNvbmZpcm1zOiBpdCBpcyBpbmRlZWQgbGltaXRlZCB0byB0aG9zZSBzZWxmdGVzdCBmaWxlcy4gU2luY2UgdGhpcyBwYXRjaCAqZXhjbHVzaXZlbHkqIG1vZGlmaWVzIHNlbGZ0ZXN0cywgdGhpcyBtZWFucyBpdCBkb2VzbiYjMzk7dCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCYjMzk7cyBjb3JlIGJlaGF2aW9yLiBObyBrZXJuZWwtbGV2ZWwgY29kZSBpcyBiZWluZyBhbHRlcmVkIGhlcmUuIFRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyBjbGVhcjogYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLgoKSnVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGUgZGlmZiB0byBtYWtlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IG5vIG90aGVyIGZpbGVzIGFyZSBpbmNsdWRlZC4gWWVwLCBqdXN0IHRoZSB0d28gZmlsZXM6IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2hgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL292cy1kcGN0bC5weWAuIE5vIGtlcm5lbCBjb2RlIGlzIHRvdWNoZWQuCgpBbHJpZ2h0LCBJJiMzOTttIGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LiBJJiMzOTtsbCByZXR1cm4gYFdvcnRoRnV6emluZyA9IGZhbHNlYCwgZXhwbGFpbmluZyB0aGF0IHRoaXMgcGF0Y2ggZXhjbHVzaXZlbHkgaW52b2x2ZXMgbW9kaWZpY2F0aW9ucyB0byBzZWxmdGVzdHMsIGFuZCB0aGVyZWZvcmUgZG9lcyBub3QgaW1wYWN0IHRoZSBrZXJuZWwmIzM5O3MgZnVuY3Rpb25hbGl0eSBpbiBhIG1hbm5lciB0aGF0IHJlcXVpcmVzIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjE6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoLyopIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvKikgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIxOjM4OjIyLjI4MjA5MTE2NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMjEwODI2NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvKikgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjE6Mzg6MjIuMjgyMDk2OTY2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTkwMzYxNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjNzlhZDhiMDYxODkyZTQ4MjM0MDkzZjdkNmIyYTliODdlODY3YTJiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDI1IDIxOjM4OjIwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaFxcbmluZGV4IDg1M2RiYzFiMDBkN2FiLi5iNDQ4MzI0NTI3ZDhiMCAxMDA3NTVcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2hcXG5AQCAtMzQsNiArMzQsNyBAQCB0ZXN0cz1cXFwiXFxuIFxcdGFjdGlvbl9zZXRcXHRcXHRcXHRcXHRzZXQ6IFNFVCBhY3Rpb24gcmV3cml0ZXMgZmllbGRzXFxuIFxcdHRydW5jXFx0XFx0XFx0XFx0XFx0dHJ1bmM6IG91dHB1dCB0cnVuY2F0aW9uXFxuIFxcdGljbXB2NlxcdFxcdFxcdFxcdFxcdGljbXB2NjogSUNNUHY2IGVjaG8gdHlwZSBtYXRjaFxcbitcXHRzY3RwX2Nvbm5lY3RfdjRcXHRcXHRcXHRcXHRzY3RwOiBTQ1RQIGZsb3cga2V5IG1hdGNoaW5nXFxuIFxcdHBzYW1wbGVcXHRcXHRcXHRcXHRcXHRwc2FtcGxlOiBTYW1wbGluZyBwYWNrZXRzIHdpdGggcHNhbXBsZVxcXCJcXG4gXFxuIGluZm8oKSB7XFxuQEAgLTYxMSw2ICs2MTIsMTI2IEBAIHRlc3RfaWNtcHY2KCkge1xcbiBcXHRyZXR1cm4gMFxcbiB9XFxuIFxcbisjIENoZWNrIGZvciBhbiBTQ1RQIGVuZHBvaW50IHZpYSAvcHJvYywgd2hpY2ggd29ya3Mgd2l0aG91dCBzY3RwX2RpYWcuXFxuK3NjdHBfZXBzX2hhcygpIHtcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJDFcXFwiIGF3ayAtdiBwPVxcXCIkMlxcXCIgJyQ2PT1wJyAvcHJvYy9uZXQvc2N0cC9lcHMgfCBncmVwIC1xIC5cXG4rfVxcbitcXG4rIyBzY3RwX2Nvbm5lY3RfdjQgdGVzdFxcbisjIC0gc2N0cChkc3Q9NDQ0MykgbWF0Y2hlcyBjbGllbnQtdG8tc2VydmVyIElOSVRcXG4rIyAtIHNjdHAoc3JjPTQ0NDMpIG1hdGNoZXMgc2VydmVyLXRvLWNsaWVudCBJTklULUFDS1xcbisjIC0gcmVtb3ZlIGZsb3dzIGFuZCB2ZXJpZnkgY29ubmVjdGlvbiBmYWlscywgcmVpbnN0YWxsIGFuZCByZWNvdmVyXFxuK3Rlc3Rfc2N0cF9jb25uZWN0X3Y0KCkge1xcbitcXHRsb2NhbCB0PVxcXCJ0ZXN0X3NjdHBfY29ubmVjdF92NFxcXCJcXG4rXFx0bG9jYWwgc3J2X2lwPTE3Mi4zMS4xMTAuMjBcXG4rXFxuK1xcdG1vZHByb2JlIC1xIHNjdHAgMlxcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuIFxcXCIka3NmdF9za2lwXFxcIlxcbitcXHRzb2NhdCAtViAyXFx1MDAzZVxcdTAwMjYxIHwgZ3JlcCAtcSBcXFwiZGVmaW5lIFdJVEhfU0NUUFxcXCIgfHwgcmV0dXJuIFxcXCIka3NmdF9za2lwXFxcIlxcbitcXG4rXFx0c2J4X2FkZCBcXFwiJHRcXFwiIHx8IHJldHVybiAkP1xcbitcXHRvdnNfYWRkX2RwIFxcXCIkdFxcXCIgc2N0cDQgfHwgcmV0dXJuIDFcXG4rXFxuK1xcdGluZm8gXFxcImNyZWF0ZSBuYW1lc3BhY2VzXFxcIlxcbitcXHRmb3IgbnMgaW4gY2xpZW50IHNlcnZlcjsgZG9cXG4rXFx0XFx0b3ZzX2FkZF9uZXRuc19hbmRfdmV0aHMgXFxcIiR0XFxcIiBcXFwic2N0cDRcXFwiIFxcXCIkbnNcXFwiIFxcXFxcXG4rXFx0XFx0ICAgIFxcXCIke25zOjA6MX0wXFxcIiBcXFwiJHtuczowOjF9MVxcXCIgfHwgcmV0dXJuIDFcXG4rXFx0ZG9uZVxcbitcXG4rXFx0aXAgbmV0bnMgZXhlYyBjbGllbnQgaXAgYWRkciBhZGQgMTcyLjMxLjExMC4xMC8yNCBkZXYgYzFcXG4rXFx0aXAgbmV0bnMgZXhlYyBjbGllbnQgaXAgbGluayBzZXQgYzEgdXBcXG4rXFx0aXAgbmV0bnMgZXhlYyBzZXJ2ZXIgaXAgYWRkciBhZGQgXFxcIiR7c3J2X2lwfS8yNFxcXCIgZGV2IHMxXFxuK1xcdGlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGxpbmsgc2V0IHMxIHVwXFxuK1xcbitcXHQjIFByb2JlOiBjaGVjayBpZiBrZXJuZWwgc3VwcG9ydHMgc2N0cCBmbG93IGtleS5cXG4rXFx0b3ZzX2FkZF9mbG93IFxcXCIkdFxcXCIgc2N0cDQgXFxcXFxcbitcXHQgICAgJ2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMiksc2N0cChkc3Q9NDQ0MyknIFxcXFxcXG4rXFx0ICAgICcyJyBcXHUwMDI2XFx1MDAzZS9kZXYvbnVsbFxcbitcXHRpZiBbICQ/IC1uZSAwIF07IHRoZW5cXG4rXFx0XFx0aW5mbyBcXFwibm8gc3VwcG9ydCBmb3Igc2N0cCBrZXkgLSBza2lwcGluZ1xcXCJcXG4rXFx0XFx0b3ZzX2V4aXRfc2lnXFxuK1xcdFxcdHJldHVybiAka3NmdF9za2lwXFxuK1xcdGZpXFxuK1xcdG92c19kZWxfZmxvd3MgXFxcIiR0XFxcIiBzY3RwNFxcbitcXG4rXFx0IyBBUlAgZm9yd2FyZGluZ1xcbitcXHRvdnNfYWRkX2Zsb3cgXFxcIiR0XFxcIiBzY3RwNCBcXFxcXFxuK1xcdCAgICAnaW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJyBcXFxcXFxuK1xcdCAgICAnMicgfHwgcmV0dXJuIDFcXG4rXFx0b3ZzX2FkZF9mbG93IFxcXCIkdFxcXCIgc2N0cDQgXFxcXFxcbitcXHQgICAgJ2luX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHgwODA2KSxhcnAoKScgXFxcXFxcbitcXHQgICAgJzEnIHx8IHJldHVybiAxXFxuK1xcbitcXHQjIFNDVFAgcG9ydCBtYXRjaGluZzogZHN0IGZvciByZXF1ZXN0LCBzcmMgZm9yIHJlcGx5XFxuK1xcdG92c19hZGRfZmxvdyBcXFwiJHRcXFwiIHNjdHA0IFxcXFxcXG4rXFx0ICAgICdpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4MDgwMCksaXB2NChwcm90bz0xMzIpLHNjdHAoZHN0PTQ0NDMpJyBcXFxcXFxuK1xcdCAgICAnMicgfHwgcmV0dXJuIDFcXG4rXFx0b3ZzX2FkZF9mbG93IFxcXCIkdFxcXCIgc2N0cDQgXFxcXFxcbitcXHQgICAgJ2luX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMiksc2N0cChzcmM9NDQ0MyknIFxcXFxcXG4rXFx0ICAgICcxJyB8fCByZXR1cm4gMVxcbitcXG4rXFx0b3ZzX25ldG5zX3NwYXduX2RhZW1vbiBcXFwiJHRcXFwiIFxcXCJzZXJ2ZXJcXFwiIFxcXFxcXG4rXFx0ICAgIHNvY2F0IC11IFNDVFA0LUxJU1RFTjo0NDQzIFNURE9VVFxcbitcXHRsb2NhbCBzZXJ2ZXJfcGlkPVxcXCIkcGlkXFxcIlxcbitcXHRvdnNfd2FpdCBzY3RwX2Vwc19oYXMgc2VydmVyIDQ0NDMgfHwgcmV0dXJuIDFcXG4rXFxuK1xcdGluZm8gXFxcInZlcmlmeSBTQ1RQIGFzc29jaWF0aW9uIHdpdGggcG9ydC1rZXllZCBmbG93c1xcXCJcXG4rXFx0b3ZzX3NieCBcXFwiJHRcXFwiIGlwIG5ldG5zIGV4ZWMgY2xpZW50IFxcXFxcXG4rXFx0ICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiBcXFwiU0NUUDQtQ09OTkVDVDoke3Nydl9pcH06NDQ0M1xcXCIgXFx1MDAzYy9kZXYvbnVsbCBcXFxcXFxuK1xcdCAgICB8fCByZXR1cm4gMVxcbitcXG4rXFx0b3ZzX2RlbF9mbG93cyBcXFwiJHRcXFwiIHNjdHA0XFxuK1xcbitcXHRpbmZvIFxcXCJ2ZXJpZnkgY29ubmVjdGlvbiBmYWlscyB3aXRob3V0IGZsb3dzXFxcIlxcbitcXHRvdnNfYWRkX2Zsb3cgXFxcIiR0XFxcIiBzY3RwNCBcXFxcXFxuK1xcdCAgICAnaW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJyBcXFxcXFxuK1xcdCAgICAnMicgfHwgcmV0dXJuIDFcXG4rXFx0b3ZzX2FkZF9mbG93IFxcXCIkdFxcXCIgc2N0cDQgXFxcXFxcbitcXHQgICAgJ2luX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHgwODA2KSxhcnAoKScgXFxcXFxcbitcXHQgICAgJzEnIHx8IHJldHVybiAxXFxuK1xcbitcXHRraWxsIC1URVJNIFxcXCIkc2VydmVyX3BpZFxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0bG9jYWwgaT0wXFxuK1xcdHdoaWxlIGtpbGwgLTAgXFxcIiRzZXJ2ZXJfcGlkXFxcIiAyXFx1MDAzZS9kZXYvbnVsbCBcXHUwMDI2XFx1MDAyNiBbIFxcXCIkaVxcXCIgLWx0IDUgXTsgZG9cXG4rXFx0ICAgIHNsZWVwIDAuMlxcbitcXHQgICAgaT0kKChpICsgMSkpXFxuK1xcdGRvbmVcXG4rXFx0b3ZzX25ldG5zX3NwYXduX2RhZW1vbiBcXFwiJHRcXFwiIFxcXCJzZXJ2ZXJcXFwiIFxcXFxcXG4rXFx0ICAgIHNvY2F0IC11IFNDVFA0LUxJU1RFTjo0NDQzIFNURE9VVFxcbitcXHRzZXJ2ZXJfcGlkPVxcXCIkcGlkXFxcIlxcbitcXHRvdnNfd2FpdCBzY3RwX2Vwc19oYXMgc2VydmVyIDQ0NDMgfHwgcmV0dXJuIDFcXG4rXFxuK1xcdG92c19zYnggXFxcIiR0XFxcIiBpcCBuZXRucyBleGVjIGNsaWVudCBcXFxcXFxuK1xcdCAgICB0aW1lb3V0IDMgc29jYXQgLXUgU1RESU4gXFxcIlNDVFA0LUNPTk5FQ1Q6JHtzcnZfaXB9OjQ0NDNcXFwiIFxcdTAwM2MvZGV2L251bGwgXFxcXFxcbitcXHQgICAgXFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxIFxcXFxcXG4rXFx0ICAgIFxcdTAwMjZcXHUwMDI2IHsgaW5mbyBcXFwiY29ubmVjdGlvbiBzaG91bGQgZmFpbCB3aXRob3V0IGZsb3dzXFxcIlxcbitcXHQgICAgICAgICByZXR1cm4gMTsgfVxcbitcXG4rXFx0aW5mbyBcXFwicmVpbnN0YWxsIGZsb3dzIGFuZCB2ZXJpZnkgcmVjb3ZlcnlcXFwiXFxuK1xcdG92c19hZGRfZmxvdyBcXFwiJHRcXFwiIHNjdHA0IFxcXFxcXG4rXFx0ICAgICdpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4MDgwMCksaXB2NChwcm90bz0xMzIpLHNjdHAoZHN0PTQ0NDMpJyBcXFxcXFxuK1xcdCAgICAnMicgfHwgcmV0dXJuIDFcXG4rXFx0b3ZzX2FkZF9mbG93IFxcXCIkdFxcXCIgc2N0cDQgXFxcXFxcbitcXHQgICAgJ2luX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMiksc2N0cChzcmM9NDQ0MyknIFxcXFxcXG4rXFx0ICAgICcxJyB8fCByZXR1cm4gMVxcbitcXG4rXFx0a2lsbCAtVEVSTSBcXFwiJHNlcnZlcl9waWRcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdGk9MFxcbitcXHR3aGlsZSBraWxsIC0wIFxcXCIkc2VydmVyX3BpZFxcXCIgMlxcdTAwM2UvZGV2L251bGwgXFx1MDAyNlxcdTAwMjYgWyBcXFwiJGlcXFwiIC1sdCA1IF07IGRvXFxuK1xcdCAgICBzbGVlcCAwLjJcXG4rXFx0ICAgIGk9JCgoaSArIDEpKVxcbitcXHRkb25lXFxuK1xcdG92c19uZXRuc19zcGF3bl9kYWVtb24gXFxcIiR0XFxcIiBcXFwic2VydmVyXFxcIiBcXFxcXFxuK1xcdCAgICBzb2NhdCAtdSBTQ1RQNC1MSVNURU46NDQ0MyBTVERPVVRcXG4rXFx0c2VydmVyX3BpZD1cXFwiJHBpZFxcXCJcXG4rXFx0b3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA0NDQzIHx8IHJldHVybiAxXFxuK1xcbitcXHRvdnNfc2J4IFxcXCIkdFxcXCIgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcXFxcbitcXHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFxcXCJTQ1RQNC1DT05ORUNUOiR7c3J2X2lwfTo0NDQzXFxcIiBcXHUwMDNjL2Rldi9udWxsIFxcXFxcXG4rXFx0ICAgIHx8IHJldHVybiAxXFxuK1xcbitcXHRyZXR1cm4gMFxcbit9XFxuK1xcbiAjIHBzYW1wbGUgdGVzdFxcbiAjIC0gdXNlIHBzYW1wbGUgdG8gb2JzZXJ2ZSBwYWNrZXRzXFxuIHRlc3RfcHNhbXBsZSgpIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL292cy1kcGN0bC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vdnMtZHBjdGwucHlcXG5pbmRleCBmM2VkZDE5ODIyM2YxNy4uNjMzYWYxMGQ3ZThhYjIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL292cy1kcGN0bC5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vdnMtZHBjdGwucHlcXG5AQCAtMTUsNiArMTUsNyBAQCBpbXBvcnQgc3RydWN0XFxuIGltcG9ydCBzeXNcXG4gaW1wb3J0IHRpbWVcXG4gaW1wb3J0IHR5cGVzXFxuK2ltcG9ydCB1bml0dGVzdFxcbiBpbXBvcnQgdXVpZFxcbiBcXG4gdHJ5OlxcbkBAIC0xOTg0LDYgKzE5ODUsMTEgQEAgY2xhc3Mgb3Zza2V5KG5sYSk6XFxuICAgICAgICAgICAgICAgICBcXFwidWRwXFxcIixcXG4gICAgICAgICAgICAgICAgIG92c2tleS5vdnNfa2V5X3VkcCxcXG4gICAgICAgICAgICAgKSxcXG4rICAgICAgICAgICAgKFxcbisgICAgICAgICAgICAgICAgXFxcIk9WU19LRVlfQVRUUl9TQ1RQXFxcIixcXG4rICAgICAgICAgICAgICAgIFxcXCJzY3RwXFxcIixcXG4rICAgICAgICAgICAgICAgIG92c2tleS5vdnNfa2V5X3NjdHAsXFxuKyAgICAgICAgICAgICksXFxuICAgICAgICAgICAgIChcXG4gICAgICAgICAgICAgICAgIFxcXCJPVlNfS0VZX0FUVFJfSUNNUFxcXCIsXFxuICAgICAgICAgICAgICAgICBcXFwiaWNtcFxcXCIsXFxuQEAgLTMxNjUsNSArMzE3MSwxMjggQEAgZGVmIG1haW4oYXJndik6XFxuICAgICByZXR1cm4gMFxcbiBcXG4gXFxuK2RlZiBfaW5pdF9vdnNrZXlfbmxhcygpOlxcbisgICAgXFxcIlxcXCJcXFwiSW5pdGlhbGl6ZSByZXF1aXJlZCBOTEEgY2xhc3NlcyBmb3Igb3Zza2V5IHBhcnNpbmcuXFxcIlxcXCJcXFwiXFxuKyAgICBubG1zZ19hdG9tcy5lbmNhcF9vdnNrZXkgPSBlbmNhcF9vdnNrZXlcXG4rICAgIG5sbXNnX2F0b21zLm92c2tleSA9IG92c2tleVxcbisgICAgbmxtc2dfYXRvbXMub3ZzYWN0aW9ucyA9IG92c2FjdGlvbnNcXG4rXFxuK1xcbitkZWYgX3BhcnNlX2Zsb3coZmxvd3N0cik6XFxuKyAgICBcXFwiXFxcIlxcXCJQYXJzZSBhIGZsb3cgc3RyaW5nIGFuZCByZXR1cm4gdGhlIGtleS5cXFwiXFxcIlxcXCJcXG4rICAgIGtleSA9IG92c2tleSgpXFxuKyAgICBrZXlbXFxcImF0dHJzXFxcIl0gPSBbXVxcbisgICAga2V5LnBhcnNlKGZsb3dzdHIpXFxuKyAgICByZXR1cm4ga2V5XFxuK1xcbitcXG4rZGVmIF9maW5kX2F0dHIoa2V5LCBhdHRyX25hbWUpOlxcbisgICAgXFxcIlxcXCJcXFwiRmluZCBhbiBhdHRyaWJ1dGUgaW4gcGFyc2VkIGtleS5cXFwiXFxcIlxcXCJcXG4rICAgIGZvciBhdHRyIGluIGtleVtcXFwiYXR0cnNcXFwiXTpcXG4rICAgICAgICBpZiBhdHRyWzBdID09IGF0dHJfbmFtZTpcXG4rICAgICAgICAgICAgcmV0dXJuIGF0dHJbMV1cXG4rICAgIHJldHVybiBOb25lXFxuK1xcbitcXG4rY2xhc3MgVGVzdE92c0tleVBhcnNlKHVuaXR0ZXN0LlRlc3RDYXNlKTpcXG4rICAgIFxcXCJcXFwiXFxcIlVuaXQgdGVzdHMgZm9yIG92c2tleS5wYXJzZSgpIGZsb3cgc3RyaW5nIHBhcnNpbmcuXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgQGNsYXNzbWV0aG9kXFxuKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOlxcbisgICAgICAgIF9pbml0X292c2tleV9ubGFzKClcXG4rXFxuKyAgICBkZWYgdGVzdF9zY3RwX2RzdChzZWxmKTpcXG4rICAgICAgICBcXFwiXFxcIlxcXCJUZXN0IFNDVFAgZGVzdGluYXRpb24gcG9ydCBwYXJzaW5nLlxcXCJcXFwiXFxcIlxcbisgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFxcXCJzY3RwKGRzdD00NDQzKVxcXCIpXFxuKyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5LCBcXFwiT1ZTX0tFWV9BVFRSX1NDVFBcXFwiKVxcbisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGF0dHIsIFxcXCJTQ1RQIGtleSBub3QgZm91bmRcXFwiKVxcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcXFwiZHN0XFxcIl0sIDQ0NDMpXFxuK1xcbisgICAgZGVmIHRlc3Rfc2N0cF9zcmMoc2VsZik6XFxuKyAgICAgICAgXFxcIlxcXCJcXFwiVGVzdCBTQ1RQIHNvdXJjZSBwb3J0IHBhcnNpbmcuXFxcIlxcXCJcXFwiXFxuKyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coXFxcInNjdHAoc3JjPTQ0NDMpXFxcIilcXG4rICAgICAgICBhdHRyID0gX2ZpbmRfYXR0cihrZXksIFxcXCJPVlNfS0VZX0FUVFJfU0NUUFxcXCIpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXFxcIlNDVFAga2V5IG5vdCBmb3VuZFxcXCIpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyW1xcXCJzcmNcXFwiXSwgNDQ0MylcXG4rXFxuKyAgICBkZWYgdGVzdF9zY3RwX3NyY19hbmRfZHN0KHNlbGYpOlxcbisgICAgICAgIFxcXCJcXFwiXFxcIlRlc3QgU0NUUCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHBvcnQgcGFyc2luZy5cXFwiXFxcIlxcXCJcXG4rICAgICAgICBrZXkgPSBfcGFyc2VfZmxvdyhcXFwic2N0cChzcmM9MTIzNCxkc3Q9NTY3OClcXFwiKVxcbisgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXFxcIk9WU19LRVlfQVRUUl9TQ1RQXFxcIilcXG4rICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCBcXFwiU0NUUCBrZXkgbm90IGZvdW5kXFxcIilcXG4rICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJbXFxcInNyY1xcXCJdLCAxMjM0KVxcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcXFwiZHN0XFxcIl0sIDU2NzgpXFxuK1xcbisgICAgZGVmIHRlc3RfdGNwX2RzdChzZWxmKTpcXG4rICAgICAgICBcXFwiXFxcIlxcXCJUZXN0IFRDUCBkZXN0aW5hdGlvbiBwb3J0IHBhcnNpbmcuXFxcIlxcXCJcXFwiXFxuKyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coXFxcInRjcChkc3Q9ODApXFxcIilcXG4rICAgICAgICBhdHRyID0gX2ZpbmRfYXR0cihrZXksIFxcXCJPVlNfS0VZX0FUVFJfVENQXFxcIilcXG4rICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCBcXFwiVENQIGtleSBub3QgZm91bmRcXFwiKVxcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcXFwiZHN0XFxcIl0sIDgwKVxcbitcXG4rICAgIGRlZiB0ZXN0X3VkcF9kc3Qoc2VsZik6XFxuKyAgICAgICAgXFxcIlxcXCJcXFwiVGVzdCBVRFAgZGVzdGluYXRpb24gcG9ydCBwYXJzaW5nLlxcXCJcXFwiXFxcIlxcbisgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFxcXCJ1ZHAoZHN0PTUzKVxcXCIpXFxuKyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5LCBcXFwiT1ZTX0tFWV9BVFRSX1VEUFxcXCIpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXFxcIlVEUCBrZXkgbm90IGZvdW5kXFxcIilcXG4rICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJbXFxcImRzdFxcXCJdLCA1MylcXG4rXFxuKyAgICBkZWYgdGVzdF9pY21wX3R5cGVfY29kZShzZWxmKTpcXG4rICAgICAgICBcXFwiXFxcIlxcXCJUZXN0IElDTVAgdHlwZSBhbmQgY29kZSBwYXJzaW5nLlxcXCJcXFwiXFxcIlxcbisgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFxcXCJpY21wKHR5cGU9OCxjb2RlPTApXFxcIilcXG4rICAgICAgICBhdHRyID0gX2ZpbmRfYXR0cihrZXksIFxcXCJPVlNfS0VZX0FUVFJfSUNNUFxcXCIpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXFxcIklDTVAga2V5IG5vdCBmb3VuZFxcXCIpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyW1xcXCJ0eXBlXFxcIl0sIDgpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyW1xcXCJjb2RlXFxcIl0sIDApXFxuK1xcbisgICAgZGVmIHRlc3RfaXB2NF9wcm90byhzZWxmKTpcXG4rICAgICAgICBcXFwiXFxcIlxcXCJUZXN0IElQdjQgcHJvdG9jb2wgcGFyc2luZy5cXFwiXFxcIlxcXCJcXG4rICAgICAgICBrZXkgPSBfcGFyc2VfZmxvdyhcXFwiZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMilcXFwiKVxcbisgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXFxcIk9WU19LRVlfQVRUUl9JUFY0XFxcIilcXG4rICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCBcXFwiSVB2NCBrZXkgbm90IGZvdW5kXFxcIilcXG4rICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJbXFxcInByb3RvXFxcIl0sIDEzMilcXG4rXFxuKyAgICBkZWYgdGVzdF9ldGhfdHlwZShzZWxmKTpcXG4rICAgICAgICBcXFwiXFxcIlxcXCJUZXN0IEV0aGVybmV0IHR5cGUgcGFyc2luZy5cXFwiXFxcIlxcXCJcXG4rICAgICAgICBrZXkgPSBfcGFyc2VfZmxvdyhcXFwiZXRoX3R5cGUoMHgwODAwKVxcXCIpXFxuKyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5LCBcXFwiT1ZTX0tFWV9BVFRSX0VUSEVSVFlQRVxcXCIpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXFxcIkV0aFR5cGUga2V5IG5vdCBmb3VuZFxcXCIpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyLCAweDA4MDApXFxuK1xcbisgICAgZGVmIHRlc3RfZnVsbF9zY3RwX2Zsb3coc2VsZik6XFxuKyAgICAgICAgXFxcIlxcXCJcXFwiVGVzdCBjb21wbGV0ZSBTQ1RQIGZsb3cgc3RyaW5nIHBhcnNpbmcuXFxcIlxcXCJcXFwiXFxuKyAgICAgICAgZmxvd3N0ciA9IChcXG4rICAgICAgICAgICAgXFxcImluX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxcXFwiXFxuKyAgICAgICAgICAgIFxcXCJpcHY0KHByb3RvPTEzMiksc2N0cChkc3Q9NDQ0MylcXFwiXFxuKyAgICAgICAgKVxcbisgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KGZsb3dzdHIpXFxuKyAgICAgICAgaW5fcG9ydCA9IF9maW5kX2F0dHIoa2V5LCBcXFwiT1ZTX0tFWV9BVFRSX0lOX1BPUlRcXFwiKVxcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5fcG9ydCwgMSlcXG4rICAgICAgICBzY3RwID0gX2ZpbmRfYXR0cihrZXksIFxcXCJPVlNfS0VZX0FUVFJfU0NUUFxcXCIpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoc2N0cCwgXFxcIlNDVFAga2V5IG5vdCBmb3VuZFxcXCIpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY3RwW1xcXCJkc3RcXFwiXSwgNDQ0MylcXG4rXFxuKyAgICBkZWYgdGVzdF9zY3RwX3JvdW5kdHJpcChzZWxmKTpcXG4rICAgICAgICBcXFwiXFxcIlxcXCJUZXN0IHBhcnNlIC1cXHUwMDNlIGRwc3RyIC1cXHUwMDNlIHBhcnNlIGtlZXBzIHRoZSBTQ1RQIGtleS5cXFwiXFxcIlxcXCJcXG4rICAgICAgICBrZXkgPSBfcGFyc2VfZmxvdyhcXFwic2N0cChkc3Q9NDQ0MylcXFwiKVxcbisgICAgICAgIGtleTIgPSBvdnNrZXkoKVxcbisgICAgICAgIGtleTJbXFxcImF0dHJzXFxcIl0gPSBbXVxcbisgICAgICAgIHJlbWFpbmRlciA9IGtleTIucGFyc2Uoa2V5LmRwc3RyKCkpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZW1haW5kZXIsIFxcXCJcXFwiLCBcXFwicm91bmQtdHJpcCBsZWZ0IHVucGFyc2VkIHRleHRcXFwiKVxcbisgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleTIsIFxcXCJPVlNfS0VZX0FUVFJfU0NUUFxcXCIpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXFxcIlNDVFAga2V5IGxvc3QgaW4gcm91bmQtdHJpcFxcXCIpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyW1xcXCJkc3RcXFwiXSwgNDQ0MylcXG4rXFxuK1xcbitkZWYgdGVzdF9vdnNrZXlfcGFyc2UoKTpcXG4rICAgIFxcXCJcXFwiXFxcIlRlc3Qgb3Zza2V5LnBhcnNlKCkgbWV0aG9kIGZvciB2YXJpb3VzIGZsb3cga2V5IHR5cGVzLlxcXCJcXFwiXFxcIlxcbisgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkubG9hZFRlc3RzRnJvbVRlc3RDYXNlKFRlc3RPdnNLZXlQYXJzZSlcXG4rICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHZlcmJvc2l0eT0yKVxcbisgICAgcmVzdWx0ID0gcnVubmVyLnJ1bihzdWl0ZSlcXG4rICAgIHJldHVybiAwIGlmIHJlc3VsdC53YXNTdWNjZXNzZnVsKCkgZWxzZSAxXFxuK1xcbitcXG4gaWYgX19uYW1lX18gPT0gXFxcIl9fbWFpbl9fXFxcIjpcXG4rICAgIGlmIGxlbihzeXMuYXJndikgXFx1MDAzZSAxIGFuZCBzeXMuYXJndlsxXSA9PSBcXFwiLS10ZXN0XFxcIjpcXG4rICAgICAgICBzeXMuZXhpdCh0ZXN0X292c2tleV9wYXJzZSgpKVxcbiAgICAgc3lzLmV4aXQobWFpbihzeXMuYXJndikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIxOjM4OjIyLjcwMTc1OTY5NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU3MDE0MDk1MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvKikgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzc5YWQ4YjA2MTg5MmU0ODIzNDA5M2Y3ZDZiMmE5Yjg3ZTg2N2EyYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDIxOjM4OjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoXG5pbmRleCA4NTNkYmMxYjAwZDdhYi4uYjQ0ODMyNDUyN2Q4YjAgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaFxuQEAgLTM0LDYgKzM0LDcgQEAgdGVzdHM9XCJcbiBcdGFjdGlvbl9zZXRcdFx0XHRcdHNldDogU0VUIGFjdGlvbiByZXdyaXRlcyBmaWVsZHNcbiBcdHRydW5jXHRcdFx0XHRcdHRydW5jOiBvdXRwdXQgdHJ1bmNhdGlvblxuIFx0aWNtcHY2XHRcdFx0XHRcdGljbXB2NjogSUNNUHY2IGVjaG8gdHlwZSBtYXRjaFxuK1x0c2N0cF9jb25uZWN0X3Y0XHRcdFx0XHRzY3RwOiBTQ1RQIGZsb3cga2V5IG1hdGNoaW5nXG4gXHRwc2FtcGxlXHRcdFx0XHRcdHBzYW1wbGU6IFNhbXBsaW5nIHBhY2tldHMgd2l0aCBwc2FtcGxlXCJcbiBcbiBpbmZvKCkge1xuQEAgLTYxMSw2ICs2MTIsMTI2IEBAIHRlc3RfaWNtcHY2KCkge1xuIFx0cmV0dXJuIDBcbiB9XG4gXG4rIyBDaGVjayBmb3IgYW4gU0NUUCBlbmRwb2ludCB2aWEgL3Byb2MsIHdoaWNoIHdvcmtzIHdpdGhvdXQgc2N0cF9kaWFnLlxuK3NjdHBfZXBzX2hhcygpIHtcbitcdGlwIG5ldG5zIGV4ZWMgXCIkMVwiIGF3ayAtdiBwPVwiJDJcIiAnJDY9PXAnIC9wcm9jL25ldC9zY3RwL2VwcyB8IGdyZXAgLXEgLlxuK31cbitcbisjIHNjdHBfY29ubmVjdF92NCB0ZXN0XG4rIyAtIHNjdHAoZHN0PTQ0NDMpIG1hdGNoZXMgY2xpZW50LXRvLXNlcnZlciBJTklUXG4rIyAtIHNjdHAoc3JjPTQ0NDMpIG1hdGNoZXMgc2VydmVyLXRvLWNsaWVudCBJTklULUFDS1xuKyMgLSByZW1vdmUgZmxvd3MgYW5kIHZlcmlmeSBjb25uZWN0aW9uIGZhaWxzLCByZWluc3RhbGwgYW5kIHJlY292ZXJcbit0ZXN0X3NjdHBfY29ubmVjdF92NCgpIHtcbitcdGxvY2FsIHQ9XCJ0ZXN0X3NjdHBfY29ubmVjdF92NFwiXG4rXHRsb2NhbCBzcnZfaXA9MTcyLjMxLjExMC4yMFxuK1xuK1x0bW9kcHJvYmUgLXEgc2N0cCAyXHUwMDNlL2Rldi9udWxsIHx8IHJldHVybiBcIiRrc2Z0X3NraXBcIlxuK1x0c29jYXQgLVYgMlx1MDAzZVx1MDAyNjEgfCBncmVwIC1xIFwiZGVmaW5lIFdJVEhfU0NUUFwiIHx8IHJldHVybiBcIiRrc2Z0X3NraXBcIlxuK1xuK1x0c2J4X2FkZCBcIiR0XCIgfHwgcmV0dXJuICQ/XG4rXHRvdnNfYWRkX2RwIFwiJHRcIiBzY3RwNCB8fCByZXR1cm4gMVxuK1xuK1x0aW5mbyBcImNyZWF0ZSBuYW1lc3BhY2VzXCJcbitcdGZvciBucyBpbiBjbGllbnQgc2VydmVyOyBkb1xuK1x0XHRvdnNfYWRkX25ldG5zX2FuZF92ZXRocyBcIiR0XCIgXCJzY3RwNFwiIFwiJG5zXCIgXFxcbitcdFx0ICAgIFwiJHtuczowOjF9MFwiIFwiJHtuczowOjF9MVwiIHx8IHJldHVybiAxXG4rXHRkb25lXG4rXG4rXHRpcCBuZXRucyBleGVjIGNsaWVudCBpcCBhZGRyIGFkZCAxNzIuMzEuMTEwLjEwLzI0IGRldiBjMVxuK1x0aXAgbmV0bnMgZXhlYyBjbGllbnQgaXAgbGluayBzZXQgYzEgdXBcbitcdGlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGFkZHIgYWRkIFwiJHtzcnZfaXB9LzI0XCIgZGV2IHMxXG4rXHRpcCBuZXRucyBleGVjIHNlcnZlciBpcCBsaW5rIHNldCBzMSB1cFxuK1xuK1x0IyBQcm9iZTogY2hlY2sgaWYga2VybmVsIHN1cHBvcnRzIHNjdHAgZmxvdyBrZXkuXG4rXHRvdnNfYWRkX2Zsb3cgXCIkdFwiIHNjdHA0IFxcXG4rXHQgICAgJ2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMiksc2N0cChkc3Q9NDQ0MyknIFxcXG4rXHQgICAgJzInIFx1MDAyNlx1MDAzZS9kZXYvbnVsbFxuK1x0aWYgWyAkPyAtbmUgMCBdOyB0aGVuXG4rXHRcdGluZm8gXCJubyBzdXBwb3J0IGZvciBzY3RwIGtleSAtIHNraXBwaW5nXCJcbitcdFx0b3ZzX2V4aXRfc2lnXG4rXHRcdHJldHVybiAka3NmdF9za2lwXG4rXHRmaVxuK1x0b3ZzX2RlbF9mbG93cyBcIiR0XCIgc2N0cDRcbitcbitcdCMgQVJQIGZvcndhcmRpbmdcbitcdG92c19hZGRfZmxvdyBcIiR0XCIgc2N0cDQgXFxcbitcdCAgICAnaW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJyBcXFxuK1x0ICAgICcyJyB8fCByZXR1cm4gMVxuK1x0b3ZzX2FkZF9mbG93IFwiJHRcIiBzY3RwNCBcXFxuK1x0ICAgICdpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwNiksYXJwKCknIFxcXG4rXHQgICAgJzEnIHx8IHJldHVybiAxXG4rXG4rXHQjIFNDVFAgcG9ydCBtYXRjaGluZzogZHN0IGZvciByZXF1ZXN0LCBzcmMgZm9yIHJlcGx5XG4rXHRvdnNfYWRkX2Zsb3cgXCIkdFwiIHNjdHA0IFxcXG4rXHQgICAgJ2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMiksc2N0cChkc3Q9NDQ0MyknIFxcXG4rXHQgICAgJzInIHx8IHJldHVybiAxXG4rXHRvdnNfYWRkX2Zsb3cgXCIkdFwiIHNjdHA0IFxcXG4rXHQgICAgJ2luX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMiksc2N0cChzcmM9NDQ0MyknIFxcXG4rXHQgICAgJzEnIHx8IHJldHVybiAxXG4rXG4rXHRvdnNfbmV0bnNfc3Bhd25fZGFlbW9uIFwiJHRcIiBcInNlcnZlclwiIFxcXG4rXHQgICAgc29jYXQgLXUgU0NUUDQtTElTVEVOOjQ0NDMgU1RET1VUXG4rXHRsb2NhbCBzZXJ2ZXJfcGlkPVwiJHBpZFwiXG4rXHRvdnNfd2FpdCBzY3RwX2Vwc19oYXMgc2VydmVyIDQ0NDMgfHwgcmV0dXJuIDFcbitcbitcdGluZm8gXCJ2ZXJpZnkgU0NUUCBhc3NvY2lhdGlvbiB3aXRoIHBvcnQta2V5ZWQgZmxvd3NcIlxuK1x0b3ZzX3NieCBcIiR0XCIgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcbitcdCAgICB0aW1lb3V0IDMgc29jYXQgLXUgU1RESU4gXCJTQ1RQNC1DT05ORUNUOiR7c3J2X2lwfTo0NDQzXCIgXHUwMDNjL2Rldi9udWxsIFxcXG4rXHQgICAgfHwgcmV0dXJuIDFcbitcbitcdG92c19kZWxfZmxvd3MgXCIkdFwiIHNjdHA0XG4rXG4rXHRpbmZvIFwidmVyaWZ5IGNvbm5lY3Rpb24gZmFpbHMgd2l0aG91dCBmbG93c1wiXG4rXHRvdnNfYWRkX2Zsb3cgXCIkdFwiIHNjdHA0IFxcXG4rXHQgICAgJ2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODA2KSxhcnAoKScgXFxcbitcdCAgICAnMicgfHwgcmV0dXJuIDFcbitcdG92c19hZGRfZmxvdyBcIiR0XCIgc2N0cDQgXFxcbitcdCAgICAnaW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJyBcXFxuK1x0ICAgICcxJyB8fCByZXR1cm4gMVxuK1xuK1x0a2lsbCAtVEVSTSBcIiRzZXJ2ZXJfcGlkXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0bG9jYWwgaT0wXG4rXHR3aGlsZSBraWxsIC0wIFwiJHNlcnZlcl9waWRcIiAyXHUwMDNlL2Rldi9udWxsIFx1MDAyNlx1MDAyNiBbIFwiJGlcIiAtbHQgNSBdOyBkb1xuK1x0ICAgIHNsZWVwIDAuMlxuK1x0ICAgIGk9JCgoaSArIDEpKVxuK1x0ZG9uZVxuK1x0b3ZzX25ldG5zX3NwYXduX2RhZW1vbiBcIiR0XCIgXCJzZXJ2ZXJcIiBcXFxuK1x0ICAgIHNvY2F0IC11IFNDVFA0LUxJU1RFTjo0NDQzIFNURE9VVFxuK1x0c2VydmVyX3BpZD1cIiRwaWRcIlxuK1x0b3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA0NDQzIHx8IHJldHVybiAxXG4rXG4rXHRvdnNfc2J4IFwiJHRcIiBpcCBuZXRucyBleGVjIGNsaWVudCBcXFxuK1x0ICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiBcIlNDVFA0LUNPTk5FQ1Q6JHtzcnZfaXB9OjQ0NDNcIiBcdTAwM2MvZGV2L251bGwgXFxcbitcdCAgICBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgXFxcbitcdCAgICBcdTAwMjZcdTAwMjYgeyBpbmZvIFwiY29ubmVjdGlvbiBzaG91bGQgZmFpbCB3aXRob3V0IGZsb3dzXCJcbitcdCAgICAgICAgIHJldHVybiAxOyB9XG4rXG4rXHRpbmZvIFwicmVpbnN0YWxsIGZsb3dzIGFuZCB2ZXJpZnkgcmVjb3ZlcnlcIlxuK1x0b3ZzX2FkZF9mbG93IFwiJHRcIiBzY3RwNCBcXFxuK1x0ICAgICdpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4MDgwMCksaXB2NChwcm90bz0xMzIpLHNjdHAoZHN0PTQ0NDMpJyBcXFxuK1x0ICAgICcyJyB8fCByZXR1cm4gMVxuK1x0b3ZzX2FkZF9mbG93IFwiJHRcIiBzY3RwNCBcXFxuK1x0ICAgICdpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwMCksaXB2NChwcm90bz0xMzIpLHNjdHAoc3JjPTQ0NDMpJyBcXFxuK1x0ICAgICcxJyB8fCByZXR1cm4gMVxuK1xuK1x0a2lsbCAtVEVSTSBcIiRzZXJ2ZXJfcGlkXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0aT0wXG4rXHR3aGlsZSBraWxsIC0wIFwiJHNlcnZlcl9waWRcIiAyXHUwMDNlL2Rldi9udWxsIFx1MDAyNlx1MDAyNiBbIFwiJGlcIiAtbHQgNSBdOyBkb1xuK1x0ICAgIHNsZWVwIDAuMlxuK1x0ICAgIGk9JCgoaSArIDEpKVxuK1x0ZG9uZVxuK1x0b3ZzX25ldG5zX3NwYXduX2RhZW1vbiBcIiR0XCIgXCJzZXJ2ZXJcIiBcXFxuK1x0ICAgIHNvY2F0IC11IFNDVFA0LUxJU1RFTjo0NDQzIFNURE9VVFxuK1x0c2VydmVyX3BpZD1cIiRwaWRcIlxuK1x0b3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA0NDQzIHx8IHJldHVybiAxXG4rXG4rXHRvdnNfc2J4IFwiJHRcIiBpcCBuZXRucyBleGVjIGNsaWVudCBcXFxuK1x0ICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiBcIlNDVFA0LUNPTk5FQ1Q6JHtzcnZfaXB9OjQ0NDNcIiBcdTAwM2MvZGV2L251bGwgXFxcbitcdCAgICB8fCByZXR1cm4gMVxuK1xuK1x0cmV0dXJuIDBcbit9XG4rXG4gIyBwc2FtcGxlIHRlc3RcbiAjIC0gdXNlIHBzYW1wbGUgdG8gb2JzZXJ2ZSBwYWNrZXRzXG4gdGVzdF9wc2FtcGxlKCkge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vdnMtZHBjdGwucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3ZzLWRwY3RsLnB5XG5pbmRleCBmM2VkZDE5ODIyM2YxNy4uNjMzYWYxMGQ3ZThhYjIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3ZzLWRwY3RsLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3ZzLWRwY3RsLnB5XG5AQCAtMTUsNiArMTUsNyBAQCBpbXBvcnQgc3RydWN0XG4gaW1wb3J0IHN5c1xuIGltcG9ydCB0aW1lXG4gaW1wb3J0IHR5cGVzXG4raW1wb3J0IHVuaXR0ZXN0XG4gaW1wb3J0IHV1aWRcbiBcbiB0cnk6XG5AQCAtMTk4NCw2ICsxOTg1LDExIEBAIGNsYXNzIG92c2tleShubGEpOlxuICAgICAgICAgICAgICAgICBcInVkcFwiLFxuICAgICAgICAgICAgICAgICBvdnNrZXkub3ZzX2tleV91ZHAsXG4gICAgICAgICAgICAgKSxcbisgICAgICAgICAgICAoXG4rICAgICAgICAgICAgICAgIFwiT1ZTX0tFWV9BVFRSX1NDVFBcIixcbisgICAgICAgICAgICAgICAgXCJzY3RwXCIsXG4rICAgICAgICAgICAgICAgIG92c2tleS5vdnNfa2V5X3NjdHAsXG4rICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgIFwiT1ZTX0tFWV9BVFRSX0lDTVBcIixcbiAgICAgICAgICAgICAgICAgXCJpY21wXCIsXG5AQCAtMzE2NSw1ICszMTcxLDEyOCBAQCBkZWYgbWFpbihhcmd2KTpcbiAgICAgcmV0dXJuIDBcbiBcbiBcbitkZWYgX2luaXRfb3Zza2V5X25sYXMoKTpcbisgICAgXCJcIlwiSW5pdGlhbGl6ZSByZXF1aXJlZCBOTEEgY2xhc3NlcyBmb3Igb3Zza2V5IHBhcnNpbmcuXCJcIlwiXG4rICAgIG5sbXNnX2F0b21zLmVuY2FwX292c2tleSA9IGVuY2FwX292c2tleVxuKyAgICBubG1zZ19hdG9tcy5vdnNrZXkgPSBvdnNrZXlcbisgICAgbmxtc2dfYXRvbXMub3ZzYWN0aW9ucyA9IG92c2FjdGlvbnNcbitcbitcbitkZWYgX3BhcnNlX2Zsb3coZmxvd3N0cik6XG4rICAgIFwiXCJcIlBhcnNlIGEgZmxvdyBzdHJpbmcgYW5kIHJldHVybiB0aGUga2V5LlwiXCJcIlxuKyAgICBrZXkgPSBvdnNrZXkoKVxuKyAgICBrZXlbXCJhdHRyc1wiXSA9IFtdXG4rICAgIGtleS5wYXJzZShmbG93c3RyKVxuKyAgICByZXR1cm4ga2V5XG4rXG4rXG4rZGVmIF9maW5kX2F0dHIoa2V5LCBhdHRyX25hbWUpOlxuKyAgICBcIlwiXCJGaW5kIGFuIGF0dHJpYnV0ZSBpbiBwYXJzZWQga2V5LlwiXCJcIlxuKyAgICBmb3IgYXR0ciBpbiBrZXlbXCJhdHRyc1wiXTpcbisgICAgICAgIGlmIGF0dHJbMF0gPT0gYXR0cl9uYW1lOlxuKyAgICAgICAgICAgIHJldHVybiBhdHRyWzFdXG4rICAgIHJldHVybiBOb25lXG4rXG4rXG4rY2xhc3MgVGVzdE92c0tleVBhcnNlKHVuaXR0ZXN0LlRlc3RDYXNlKTpcbisgICAgXCJcIlwiVW5pdCB0ZXN0cyBmb3Igb3Zza2V5LnBhcnNlKCkgZmxvdyBzdHJpbmcgcGFyc2luZy5cIlwiXCJcbitcbisgICAgQGNsYXNzbWV0aG9kXG4rICAgIGRlZiBzZXRVcENsYXNzKGNscyk6XG4rICAgICAgICBfaW5pdF9vdnNrZXlfbmxhcygpXG4rXG4rICAgIGRlZiB0ZXN0X3NjdHBfZHN0KHNlbGYpOlxuKyAgICAgICAgXCJcIlwiVGVzdCBTQ1RQIGRlc3RpbmF0aW9uIHBvcnQgcGFyc2luZy5cIlwiXCJcbisgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFwic2N0cChkc3Q9NDQ0MylcIilcbisgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXCJPVlNfS0VZX0FUVFJfU0NUUFwiKVxuKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXCJTQ1RQIGtleSBub3QgZm91bmRcIilcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcImRzdFwiXSwgNDQ0MylcbitcbisgICAgZGVmIHRlc3Rfc2N0cF9zcmMoc2VsZik6XG4rICAgICAgICBcIlwiXCJUZXN0IFNDVFAgc291cmNlIHBvcnQgcGFyc2luZy5cIlwiXCJcbisgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFwic2N0cChzcmM9NDQ0MylcIilcbisgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXCJPVlNfS0VZX0FUVFJfU0NUUFwiKVxuKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXCJTQ1RQIGtleSBub3QgZm91bmRcIilcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcInNyY1wiXSwgNDQ0MylcbitcbisgICAgZGVmIHRlc3Rfc2N0cF9zcmNfYW5kX2RzdChzZWxmKTpcbisgICAgICAgIFwiXCJcIlRlc3QgU0NUUCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHBvcnQgcGFyc2luZy5cIlwiXCJcbisgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFwic2N0cChzcmM9MTIzNCxkc3Q9NTY3OClcIilcbisgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXCJPVlNfS0VZX0FUVFJfU0NUUFwiKVxuKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXCJTQ1RQIGtleSBub3QgZm91bmRcIilcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcInNyY1wiXSwgMTIzNClcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcImRzdFwiXSwgNTY3OClcbitcbisgICAgZGVmIHRlc3RfdGNwX2RzdChzZWxmKTpcbisgICAgICAgIFwiXCJcIlRlc3QgVENQIGRlc3RpbmF0aW9uIHBvcnQgcGFyc2luZy5cIlwiXCJcbisgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFwidGNwKGRzdD04MClcIilcbisgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXCJPVlNfS0VZX0FUVFJfVENQXCIpXG4rICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCBcIlRDUCBrZXkgbm90IGZvdW5kXCIpXG4rICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJbXCJkc3RcIl0sIDgwKVxuK1xuKyAgICBkZWYgdGVzdF91ZHBfZHN0KHNlbGYpOlxuKyAgICAgICAgXCJcIlwiVGVzdCBVRFAgZGVzdGluYXRpb24gcG9ydCBwYXJzaW5nLlwiXCJcIlxuKyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coXCJ1ZHAoZHN0PTUzKVwiKVxuKyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5LCBcIk9WU19LRVlfQVRUUl9VRFBcIilcbisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGF0dHIsIFwiVURQIGtleSBub3QgZm91bmRcIilcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcImRzdFwiXSwgNTMpXG4rXG4rICAgIGRlZiB0ZXN0X2ljbXBfdHlwZV9jb2RlKHNlbGYpOlxuKyAgICAgICAgXCJcIlwiVGVzdCBJQ01QIHR5cGUgYW5kIGNvZGUgcGFyc2luZy5cIlwiXCJcbisgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFwiaWNtcCh0eXBlPTgsY29kZT0wKVwiKVxuKyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5LCBcIk9WU19LRVlfQVRUUl9JQ01QXCIpXG4rICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCBcIklDTVAga2V5IG5vdCBmb3VuZFwiKVxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyW1widHlwZVwiXSwgOClcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcImNvZGVcIl0sIDApXG4rXG4rICAgIGRlZiB0ZXN0X2lwdjRfcHJvdG8oc2VsZik6XG4rICAgICAgICBcIlwiXCJUZXN0IElQdjQgcHJvdG9jb2wgcGFyc2luZy5cIlwiXCJcbisgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFwiZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMilcIilcbisgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXCJPVlNfS0VZX0FUVFJfSVBWNFwiKVxuKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXCJJUHY0IGtleSBub3QgZm91bmRcIilcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcInByb3RvXCJdLCAxMzIpXG4rXG4rICAgIGRlZiB0ZXN0X2V0aF90eXBlKHNlbGYpOlxuKyAgICAgICAgXCJcIlwiVGVzdCBFdGhlcm5ldCB0eXBlIHBhcnNpbmcuXCJcIlwiXG4rICAgICAgICBrZXkgPSBfcGFyc2VfZmxvdyhcImV0aF90eXBlKDB4MDgwMClcIilcbisgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXCJPVlNfS0VZX0FUVFJfRVRIRVJUWVBFXCIpXG4rICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCBcIkV0aFR5cGUga2V5IG5vdCBmb3VuZFwiKVxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyLCAweDA4MDApXG4rXG4rICAgIGRlZiB0ZXN0X2Z1bGxfc2N0cF9mbG93KHNlbGYpOlxuKyAgICAgICAgXCJcIlwiVGVzdCBjb21wbGV0ZSBTQ1RQIGZsb3cgc3RyaW5nIHBhcnNpbmcuXCJcIlwiXG4rICAgICAgICBmbG93c3RyID0gKFxuKyAgICAgICAgICAgIFwiaW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLFwiXG4rICAgICAgICAgICAgXCJpcHY0KHByb3RvPTEzMiksc2N0cChkc3Q9NDQ0MylcIlxuKyAgICAgICAgKVxuKyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coZmxvd3N0cilcbisgICAgICAgIGluX3BvcnQgPSBfZmluZF9hdHRyKGtleSwgXCJPVlNfS0VZX0FUVFJfSU5fUE9SVFwiKVxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbl9wb3J0LCAxKVxuKyAgICAgICAgc2N0cCA9IF9maW5kX2F0dHIoa2V5LCBcIk9WU19LRVlfQVRUUl9TQ1RQXCIpXG4rICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShzY3RwLCBcIlNDVFAga2V5IG5vdCBmb3VuZFwiKVxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY3RwW1wiZHN0XCJdLCA0NDQzKVxuK1xuKyAgICBkZWYgdGVzdF9zY3RwX3JvdW5kdHJpcChzZWxmKTpcbisgICAgICAgIFwiXCJcIlRlc3QgcGFyc2UgLVx1MDAzZSBkcHN0ciAtXHUwMDNlIHBhcnNlIGtlZXBzIHRoZSBTQ1RQIGtleS5cIlwiXCJcbisgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFwic2N0cChkc3Q9NDQ0MylcIilcbisgICAgICAgIGtleTIgPSBvdnNrZXkoKVxuKyAgICAgICAga2V5MltcImF0dHJzXCJdID0gW11cbisgICAgICAgIHJlbWFpbmRlciA9IGtleTIucGFyc2Uoa2V5LmRwc3RyKCkpXG4rICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbWFpbmRlciwgXCJcIiwgXCJyb3VuZC10cmlwIGxlZnQgdW5wYXJzZWQgdGV4dFwiKVxuKyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5MiwgXCJPVlNfS0VZX0FUVFJfU0NUUFwiKVxuKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXCJTQ1RQIGtleSBsb3N0IGluIHJvdW5kLXRyaXBcIilcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcImRzdFwiXSwgNDQ0MylcbitcbitcbitkZWYgdGVzdF9vdnNrZXlfcGFyc2UoKTpcbisgICAgXCJcIlwiVGVzdCBvdnNrZXkucGFyc2UoKSBtZXRob2QgZm9yIHZhcmlvdXMgZmxvdyBrZXkgdHlwZXMuXCJcIlwiXG4rICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdExvYWRlcigpLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShUZXN0T3ZzS2V5UGFyc2UpXG4rICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHZlcmJvc2l0eT0yKVxuKyAgICByZXN1bHQgPSBydW5uZXIucnVuKHN1aXRlKVxuKyAgICByZXR1cm4gMCBpZiByZXN1bHQud2FzU3VjY2Vzc2Z1bCgpIGVsc2UgMVxuK1xuK1xuIGlmIF9fbmFtZV9fID09IFwiX19tYWluX19cIjpcbisgICAgaWYgbGVuKHN5cy5hcmd2KSBcdTAwM2UgMSBhbmQgc3lzLmFyZ3ZbMV0gPT0gXCItLXRlc3RcIjpcbisgICAgICAgIHN5cy5leGl0KHRlc3Rfb3Zza2V5X3BhcnNlKCkpXG4gICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3YpKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjE6Mzg6MjIuNzAxNzYwNTIzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcwMTM4OTkzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBc3Nlc3NpbmcgdGhlIE5lZWQgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIGZ1enppbmcgZHVlIHRvIGZ1bmN0aW9uYWwgY2hhbmdlcyB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGZpbGVzIG1vZGlmaWVkIGFyZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vdnMtZHBjdGwucHlgLiBUaGVzZSBhcmUgc2VsZnRlc3RzIGZvciBPcGVuIHZTd2l0Y2guIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhvdWdoOyB0aGVyZSBhcmUgKm5vKiBjaGFuZ2VzIHRvIGFueSBrZXJuZWwgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gYSBkaXJlY3RvcnkgbGlrZSBgbmV0L29wZW52c3dpdGNoL2AuXG5cbkFscmlnaHQsIGEgcXVpY2sgcmV2aWV3IG9mIHRoZSBkaWZmIGNvbmZpcm1zOiBpdCBpcyBpbmRlZWQgbGltaXRlZCB0byB0aG9zZSBzZWxmdGVzdCBmaWxlcy4gU2luY2UgdGhpcyBwYXRjaCAqZXhjbHVzaXZlbHkqIG1vZGlmaWVzIHNlbGZ0ZXN0cywgdGhpcyBtZWFucyBpdCBkb2Vzbid0IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsJ3MgY29yZSBiZWhhdmlvci4gTm8ga2VybmVsLWxldmVsIGNvZGUgaXMgYmVpbmcgYWx0ZXJlZCBoZXJlLiBUaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgY2xlYXI6IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBkaWZmIHRvIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgbm8gb3RoZXIgZmlsZXMgYXJlIGluY2x1ZGVkLiBZZXAsIGp1c3QgdGhlIHR3byBmaWxlczogYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaGAgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3ZzLWRwY3RsLnB5YC4gTm8ga2VybmVsIGNvZGUgaXMgdG91Y2hlZC5cblxuQWxyaWdodCwgSSdtIGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LiBJJ2xsIHJldHVybiBgV29ydGhGdXp6aW5nID0gZmFsc2VgLCBleHBsYWluaW5nIHRoYXQgdGhpcyBwYXRjaCBleGNsdXNpdmVseSBpbnZvbHZlcyBtb2RpZmljYXRpb25zIHRvIHNlbGZ0ZXN0cywgYW5kIHRoZXJlZm9yZSBkb2VzIG5vdCBpbXBhY3QgdGhlIGtlcm5lbCdzIGZ1bmN0aW9uYWxpdHkgaW4gYSBtYW5uZXIgdGhhdCByZXF1aXJlcyBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTMyLCJPdXRwdXRUb2tlbnMiOjY3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjE6Mzg6MjguNDAzMTUyMjI5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoLyopIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvKikgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwjjk8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-25 20:57:01 +0000 UTC FinishedAt: 2026-07-25 21:38:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIxOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvKikgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMTozODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM3OWFkOGIwNjE4OTJlNDgyMzQwOTNmN2Q2YjJhOWI4N2U4NjdhMmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAyMTozODoyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2hcbmluZGV4IDg1M2RiYzFiMDBkN2FiLi5iNDQ4MzI0NTI3ZDhiMCAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoXG5AQCAtMzQsNiAmIzQzOzM0LDcgQEAgdGVzdHM9XCYjMzQ7XG4gXHRhY3Rpb25fc2V0XHRcdFx0XHRzZXQ6IFNFVCBhY3Rpb24gcmV3cml0ZXMgZmllbGRzXG4gXHR0cnVuY1x0XHRcdFx0XHR0cnVuYzogb3V0cHV0IHRydW5jYXRpb25cbiBcdGljbXB2Nlx0XHRcdFx0XHRpY21wdjY6IElDTVB2NiBlY2hvIHR5cGUgbWF0Y2hcbiYjNDM7XHRzY3RwX2Nvbm5lY3RfdjRcdFx0XHRcdHNjdHA6IFNDVFAgZmxvdyBrZXkgbWF0Y2hpbmdcbiBcdHBzYW1wbGVcdFx0XHRcdFx0cHNhbXBsZTogU2FtcGxpbmcgcGFja2V0cyB3aXRoIHBzYW1wbGVcJiMzNDtcbiBcbiBpbmZvKCkge1xuQEAgLTYxMSw2ICYjNDM7NjEyLDEyNiBAQCB0ZXN0X2ljbXB2NigpIHtcbiBcdHJldHVybiAwXG4gfVxuIFxuJiM0MzsjIENoZWNrIGZvciBhbiBTQ1RQIGVuZHBvaW50IHZpYSAvcHJvYywgd2hpY2ggd29ya3Mgd2l0aG91dCBzY3RwX2RpYWcuXG4mIzQzO3NjdHBfZXBzX2hhcygpIHtcbiYjNDM7XHRpcCBuZXRucyBleGVjIFwmIzM0OyQxXCYjMzQ7IGF3ayAtdiBwPVwmIzM0OyQyXCYjMzQ7ICYjMzk7JDY9PXAmIzM5OyAvcHJvYy9uZXQvc2N0cC9lcHMgfCBncmVwIC1xIC5cbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBzY3RwX2Nvbm5lY3RfdjQgdGVzdFxuJiM0MzsjIC0gc2N0cChkc3Q9NDQ0MykgbWF0Y2hlcyBjbGllbnQtdG8tc2VydmVyIElOSVRcbiYjNDM7IyAtIHNjdHAoc3JjPTQ0NDMpIG1hdGNoZXMgc2VydmVyLXRvLWNsaWVudCBJTklULUFDS1xuJiM0MzsjIC0gcmVtb3ZlIGZsb3dzIGFuZCB2ZXJpZnkgY29ubmVjdGlvbiBmYWlscywgcmVpbnN0YWxsIGFuZCByZWNvdmVyXG4mIzQzO3Rlc3Rfc2N0cF9jb25uZWN0X3Y0KCkge1xuJiM0MztcdGxvY2FsIHQ9XCYjMzQ7dGVzdF9zY3RwX2Nvbm5lY3RfdjRcJiMzNDtcbiYjNDM7XHRsb2NhbCBzcnZfaXA9MTcyLjMxLjExMC4yMFxuJiM0MztcbiYjNDM7XHRtb2Rwcm9iZSAtcSBzY3RwIDJcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuIFwmIzM0OyRrc2Z0X3NraXBcJiMzNDtcbiYjNDM7XHRzb2NhdCAtViAyXHUwMDNlXHUwMDI2MSB8IGdyZXAgLXEgXCYjMzQ7ZGVmaW5lIFdJVEhfU0NUUFwmIzM0OyB8fCByZXR1cm4gXCYjMzQ7JGtzZnRfc2tpcFwmIzM0O1xuJiM0MztcbiYjNDM7XHRzYnhfYWRkIFwmIzM0OyR0XCYjMzQ7IHx8IHJldHVybiAkP1xuJiM0MztcdG92c19hZGRfZHAgXCYjMzQ7JHRcJiMzNDsgc2N0cDQgfHwgcmV0dXJuIDFcbiYjNDM7XG4mIzQzO1x0aW5mbyBcJiMzNDtjcmVhdGUgbmFtZXNwYWNlc1wmIzM0O1xuJiM0MztcdGZvciBucyBpbiBjbGllbnQgc2VydmVyOyBkb1xuJiM0MztcdFx0b3ZzX2FkZF9uZXRuc19hbmRfdmV0aHMgXCYjMzQ7JHRcJiMzNDsgXCYjMzQ7c2N0cDRcJiMzNDsgXCYjMzQ7JG5zXCYjMzQ7IFxcXG4mIzQzO1x0XHQgICAgXCYjMzQ7JHtuczowOjF9MFwmIzM0OyBcJiMzNDske25zOjA6MX0xXCYjMzQ7IHx8IHJldHVybiAxXG4mIzQzO1x0ZG9uZVxuJiM0MztcbiYjNDM7XHRpcCBuZXRucyBleGVjIGNsaWVudCBpcCBhZGRyIGFkZCAxNzIuMzEuMTEwLjEwLzI0IGRldiBjMVxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIGxpbmsgc2V0IGMxIHVwXG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBzZXJ2ZXIgaXAgYWRkciBhZGQgXCYjMzQ7JHtzcnZfaXB9LzI0XCYjMzQ7IGRldiBzMVxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGxpbmsgc2V0IHMxIHVwXG4mIzQzO1xuJiM0MztcdCMgUHJvYmU6IGNoZWNrIGlmIGtlcm5lbCBzdXBwb3J0cyBzY3RwIGZsb3cga2V5LlxuJiM0MztcdG92c19hZGRfZmxvdyBcJiMzNDskdFwmIzM0OyBzY3RwNCBcXFxuJiM0MztcdCAgICAmIzM5O2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMiksc2N0cChkc3Q9NDQ0MykmIzM5OyBcXFxuJiM0MztcdCAgICAmIzM5OzImIzM5OyBcdTAwMjZcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRpZiBbICQ/IC1uZSAwIF07IHRoZW5cbiYjNDM7XHRcdGluZm8gXCYjMzQ7bm8gc3VwcG9ydCBmb3Igc2N0cCBrZXkgLSBza2lwcGluZ1wmIzM0O1xuJiM0MztcdFx0b3ZzX2V4aXRfc2lnXG4mIzQzO1x0XHRyZXR1cm4gJGtzZnRfc2tpcFxuJiM0MztcdGZpXG4mIzQzO1x0b3ZzX2RlbF9mbG93cyBcJiMzNDskdFwmIzM0OyBzY3RwNFxuJiM0MztcbiYjNDM7XHQjIEFSUCBmb3J3YXJkaW5nXG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0OyR0XCYjMzQ7IHNjdHA0IFxcXG4mIzQzO1x0ICAgICYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJiMzOTsgXFxcbiYjNDM7XHQgICAgJiMzOTsyJiMzOTsgfHwgcmV0dXJuIDFcbiYjNDM7XHRvdnNfYWRkX2Zsb3cgXCYjMzQ7JHRcJiMzNDsgc2N0cDQgXFxcbiYjNDM7XHQgICAgJiMzOTtpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwNiksYXJwKCkmIzM5OyBcXFxuJiM0MztcdCAgICAmIzM5OzEmIzM5OyB8fCByZXR1cm4gMVxuJiM0MztcbiYjNDM7XHQjIFNDVFAgcG9ydCBtYXRjaGluZzogZHN0IGZvciByZXF1ZXN0LCBzcmMgZm9yIHJlcGx5XG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0OyR0XCYjMzQ7IHNjdHA0IFxcXG4mIzQzO1x0ICAgICYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKGRzdD00NDQzKSYjMzk7IFxcXG4mIzQzO1x0ICAgICYjMzk7MiYjMzk7IHx8IHJldHVybiAxXG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0OyR0XCYjMzQ7IHNjdHA0IFxcXG4mIzQzO1x0ICAgICYjMzk7aW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKHNyYz00NDQzKSYjMzk7IFxcXG4mIzQzO1x0ICAgICYjMzk7MSYjMzk7IHx8IHJldHVybiAxXG4mIzQzO1xuJiM0MztcdG92c19uZXRuc19zcGF3bl9kYWVtb24gXCYjMzQ7JHRcJiMzNDsgXCYjMzQ7c2VydmVyXCYjMzQ7IFxcXG4mIzQzO1x0ICAgIHNvY2F0IC11IFNDVFA0LUxJU1RFTjo0NDQzIFNURE9VVFxuJiM0MztcdGxvY2FsIHNlcnZlcl9waWQ9XCYjMzQ7JHBpZFwmIzM0O1xuJiM0MztcdG92c193YWl0IHNjdHBfZXBzX2hhcyBzZXJ2ZXIgNDQ0MyB8fCByZXR1cm4gMVxuJiM0MztcbiYjNDM7XHRpbmZvIFwmIzM0O3ZlcmlmeSBTQ1RQIGFzc29jaWF0aW9uIHdpdGggcG9ydC1rZXllZCBmbG93c1wmIzM0O1xuJiM0MztcdG92c19zYnggXCYjMzQ7JHRcJiMzNDsgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcbiYjNDM7XHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFwmIzM0O1NDVFA0LUNPTk5FQ1Q6JHtzcnZfaXB9OjQ0NDNcJiMzNDsgXHUwMDNjL2Rldi9udWxsIFxcXG4mIzQzO1x0ICAgIHx8IHJldHVybiAxXG4mIzQzO1xuJiM0MztcdG92c19kZWxfZmxvd3MgXCYjMzQ7JHRcJiMzNDsgc2N0cDRcbiYjNDM7XG4mIzQzO1x0aW5mbyBcJiMzNDt2ZXJpZnkgY29ubmVjdGlvbiBmYWlscyB3aXRob3V0IGZsb3dzXCYjMzQ7XG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0OyR0XCYjMzQ7IHNjdHA0IFxcXG4mIzQzO1x0ICAgICYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJiMzOTsgXFxcbiYjNDM7XHQgICAgJiMzOTsyJiMzOTsgfHwgcmV0dXJuIDFcbiYjNDM7XHRvdnNfYWRkX2Zsb3cgXCYjMzQ7JHRcJiMzNDsgc2N0cDQgXFxcbiYjNDM7XHQgICAgJiMzOTtpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwNiksYXJwKCkmIzM5OyBcXFxuJiM0MztcdCAgICAmIzM5OzEmIzM5OyB8fCByZXR1cm4gMVxuJiM0MztcbiYjNDM7XHRraWxsIC1URVJNIFwmIzM0OyRzZXJ2ZXJfcGlkXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRsb2NhbCBpPTBcbiYjNDM7XHR3aGlsZSBraWxsIC0wIFwmIzM0OyRzZXJ2ZXJfcGlkXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwgXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JGlcJiMzNDsgLWx0IDUgXTsgZG9cbiYjNDM7XHQgICAgc2xlZXAgMC4yXG4mIzQzO1x0ICAgIGk9JCgoaSAmIzQzOyAxKSlcbiYjNDM7XHRkb25lXG4mIzQzO1x0b3ZzX25ldG5zX3NwYXduX2RhZW1vbiBcJiMzNDskdFwmIzM0OyBcJiMzNDtzZXJ2ZXJcJiMzNDsgXFxcbiYjNDM7XHQgICAgc29jYXQgLXUgU0NUUDQtTElTVEVOOjQ0NDMgU1RET1VUXG4mIzQzO1x0c2VydmVyX3BpZD1cJiMzNDskcGlkXCYjMzQ7XG4mIzQzO1x0b3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA0NDQzIHx8IHJldHVybiAxXG4mIzQzO1xuJiM0MztcdG92c19zYnggXCYjMzQ7JHRcJiMzNDsgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcbiYjNDM7XHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFwmIzM0O1NDVFA0LUNPTk5FQ1Q6JHtzcnZfaXB9OjQ0NDNcJiMzNDsgXHUwMDNjL2Rldi9udWxsIFxcXG4mIzQzO1x0ICAgIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSBcXFxuJiM0MztcdCAgICBcdTAwMjZcdTAwMjYgeyBpbmZvIFwmIzM0O2Nvbm5lY3Rpb24gc2hvdWxkIGZhaWwgd2l0aG91dCBmbG93c1wmIzM0O1xuJiM0MztcdCAgICAgICAgIHJldHVybiAxOyB9XG4mIzQzO1xuJiM0MztcdGluZm8gXCYjMzQ7cmVpbnN0YWxsIGZsb3dzIGFuZCB2ZXJpZnkgcmVjb3ZlcnlcJiMzNDtcbiYjNDM7XHRvdnNfYWRkX2Zsb3cgXCYjMzQ7JHRcJiMzNDsgc2N0cDQgXFxcbiYjNDM7XHQgICAgJiMzOTtpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4MDgwMCksaXB2NChwcm90bz0xMzIpLHNjdHAoZHN0PTQ0NDMpJiMzOTsgXFxcbiYjNDM7XHQgICAgJiMzOTsyJiMzOTsgfHwgcmV0dXJuIDFcbiYjNDM7XHRvdnNfYWRkX2Zsb3cgXCYjMzQ7JHRcJiMzNDsgc2N0cDQgXFxcbiYjNDM7XHQgICAgJiMzOTtpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwMCksaXB2NChwcm90bz0xMzIpLHNjdHAoc3JjPTQ0NDMpJiMzOTsgXFxcbiYjNDM7XHQgICAgJiMzOTsxJiMzOTsgfHwgcmV0dXJuIDFcbiYjNDM7XG4mIzQzO1x0a2lsbCAtVEVSTSBcJiMzNDskc2VydmVyX3BpZFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0aT0wXG4mIzQzO1x0d2hpbGUga2lsbCAtMCBcJiMzNDskc2VydmVyX3BpZFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsIFx1MDAyNlx1MDAyNiBbIFwmIzM0OyRpXCYjMzQ7IC1sdCA1IF07IGRvXG4mIzQzO1x0ICAgIHNsZWVwIDAuMlxuJiM0MztcdCAgICBpPSQoKGkgJiM0MzsgMSkpXG4mIzQzO1x0ZG9uZVxuJiM0MztcdG92c19uZXRuc19zcGF3bl9kYWVtb24gXCYjMzQ7JHRcJiMzNDsgXCYjMzQ7c2VydmVyXCYjMzQ7IFxcXG4mIzQzO1x0ICAgIHNvY2F0IC11IFNDVFA0LUxJU1RFTjo0NDQzIFNURE9VVFxuJiM0MztcdHNlcnZlcl9waWQ9XCYjMzQ7JHBpZFwmIzM0O1xuJiM0MztcdG92c193YWl0IHNjdHBfZXBzX2hhcyBzZXJ2ZXIgNDQ0MyB8fCByZXR1cm4gMVxuJiM0MztcbiYjNDM7XHRvdnNfc2J4IFwmIzM0OyR0XCYjMzQ7IGlwIG5ldG5zIGV4ZWMgY2xpZW50IFxcXG4mIzQzO1x0ICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiBcJiMzNDtTQ1RQNC1DT05ORUNUOiR7c3J2X2lwfTo0NDQzXCYjMzQ7IFx1MDAzYy9kZXYvbnVsbCBcXFxuJiM0MztcdCAgICB8fCByZXR1cm4gMVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMFxuJiM0Mzt9XG4mIzQzO1xuICMgcHNhbXBsZSB0ZXN0XG4gIyAtIHVzZSBwc2FtcGxlIHRvIG9ic2VydmUgcGFja2V0c1xuIHRlc3RfcHNhbXBsZSgpIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3ZzLWRwY3RsLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL292cy1kcGN0bC5weVxuaW5kZXggZjNlZGQxOTgyMjNmMTcuLjYzM2FmMTBkN2U4YWIyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL292cy1kcGN0bC5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL292cy1kcGN0bC5weVxuQEAgLTE1LDYgJiM0MzsxNSw3IEBAIGltcG9ydCBzdHJ1Y3RcbiBpbXBvcnQgc3lzXG4gaW1wb3J0IHRpbWVcbiBpbXBvcnQgdHlwZXNcbiYjNDM7aW1wb3J0IHVuaXR0ZXN0XG4gaW1wb3J0IHV1aWRcbiBcbiB0cnk6XG5AQCAtMTk4NCw2ICYjNDM7MTk4NSwxMSBAQCBjbGFzcyBvdnNrZXkobmxhKTpcbiAgICAgICAgICAgICAgICAgXCYjMzQ7dWRwXCYjMzQ7LFxuICAgICAgICAgICAgICAgICBvdnNrZXkub3ZzX2tleV91ZHAsXG4gICAgICAgICAgICAgKSxcbiYjNDM7ICAgICAgICAgICAgKFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7T1ZTX0tFWV9BVFRSX1NDVFBcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtzY3RwXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgb3Zza2V5Lm92c19rZXlfc2N0cCxcbiYjNDM7ICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgIFwmIzM0O09WU19LRVlfQVRUUl9JQ01QXCYjMzQ7LFxuICAgICAgICAgICAgICAgICBcJiMzNDtpY21wXCYjMzQ7LFxuQEAgLTMxNjUsNSAmIzQzOzMxNzEsMTI4IEBAIGRlZiBtYWluKGFyZ3YpOlxuICAgICByZXR1cm4gMFxuIFxuIFxuJiM0MztkZWYgX2luaXRfb3Zza2V5X25sYXMoKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O0luaXRpYWxpemUgcmVxdWlyZWQgTkxBIGNsYXNzZXMgZm9yIG92c2tleSBwYXJzaW5nLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgbmxtc2dfYXRvbXMuZW5jYXBfb3Zza2V5ID0gZW5jYXBfb3Zza2V5XG4mIzQzOyAgICBubG1zZ19hdG9tcy5vdnNrZXkgPSBvdnNrZXlcbiYjNDM7ICAgIG5sbXNnX2F0b21zLm92c2FjdGlvbnMgPSBvdnNhY3Rpb25zXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF9wYXJzZV9mbG93KGZsb3dzdHIpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7UGFyc2UgYSBmbG93IHN0cmluZyBhbmQgcmV0dXJuIHRoZSBrZXkuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBrZXkgPSBvdnNrZXkoKVxuJiM0MzsgICAga2V5W1wmIzM0O2F0dHJzXCYjMzQ7XSA9IFtdXG4mIzQzOyAgICBrZXkucGFyc2UoZmxvd3N0cilcbiYjNDM7ICAgIHJldHVybiBrZXlcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX2ZpbmRfYXR0cihrZXksIGF0dHJfbmFtZSk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtGaW5kIGFuIGF0dHJpYnV0ZSBpbiBwYXJzZWQga2V5LlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgZm9yIGF0dHIgaW4ga2V5W1wmIzM0O2F0dHJzXCYjMzQ7XTpcbiYjNDM7ICAgICAgICBpZiBhdHRyWzBdID09IGF0dHJfbmFtZTpcbiYjNDM7ICAgICAgICAgICAgcmV0dXJuIGF0dHJbMV1cbiYjNDM7ICAgIHJldHVybiBOb25lXG4mIzQzO1xuJiM0MztcbiYjNDM7Y2xhc3MgVGVzdE92c0tleVBhcnNlKHVuaXR0ZXN0LlRlc3RDYXNlKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1VuaXQgdGVzdHMgZm9yIG92c2tleS5wYXJzZSgpIGZsb3cgc3RyaW5nIHBhcnNpbmcuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgQGNsYXNzbWV0aG9kXG4mIzQzOyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOlxuJiM0MzsgICAgICAgIF9pbml0X292c2tleV9ubGFzKClcbiYjNDM7XG4mIzQzOyAgICBkZWYgdGVzdF9zY3RwX2RzdChzZWxmKTpcbiYjNDM7ICAgICAgICBcJiMzNDtcJiMzNDtcJiMzNDtUZXN0IFNDVFAgZGVzdGluYXRpb24gcG9ydCBwYXJzaW5nLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFwmIzM0O3NjdHAoZHN0PTQ0NDMpXCYjMzQ7KVxuJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXCYjMzQ7T1ZTX0tFWV9BVFRSX1NDVFBcJiMzNDspXG4mIzQzOyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXCYjMzQ7U0NUUCBrZXkgbm90IGZvdW5kXCYjMzQ7KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcJiMzNDtkc3RcJiMzNDtdLCA0NDQzKVxuJiM0MztcbiYjNDM7ICAgIGRlZiB0ZXN0X3NjdHBfc3JjKHNlbGYpOlxuJiM0MzsgICAgICAgIFwmIzM0O1wmIzM0O1wmIzM0O1Rlc3QgU0NUUCBzb3VyY2UgcG9ydCBwYXJzaW5nLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFwmIzM0O3NjdHAoc3JjPTQ0NDMpXCYjMzQ7KVxuJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXCYjMzQ7T1ZTX0tFWV9BVFRSX1NDVFBcJiMzNDspXG4mIzQzOyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXCYjMzQ7U0NUUCBrZXkgbm90IGZvdW5kXCYjMzQ7KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcJiMzNDtzcmNcJiMzNDtdLCA0NDQzKVxuJiM0MztcbiYjNDM7ICAgIGRlZiB0ZXN0X3NjdHBfc3JjX2FuZF9kc3Qoc2VsZik6XG4mIzQzOyAgICAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7VGVzdCBTQ1RQIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gcG9ydCBwYXJzaW5nLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFwmIzM0O3NjdHAoc3JjPTEyMzQsZHN0PTU2NzgpXCYjMzQ7KVxuJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXCYjMzQ7T1ZTX0tFWV9BVFRSX1NDVFBcJiMzNDspXG4mIzQzOyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXCYjMzQ7U0NUUCBrZXkgbm90IGZvdW5kXCYjMzQ7KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcJiMzNDtzcmNcJiMzNDtdLCAxMjM0KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcJiMzNDtkc3RcJiMzNDtdLCA1Njc4KVxuJiM0MztcbiYjNDM7ICAgIGRlZiB0ZXN0X3RjcF9kc3Qoc2VsZik6XG4mIzQzOyAgICAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7VGVzdCBUQ1AgZGVzdGluYXRpb24gcG9ydCBwYXJzaW5nLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFwmIzM0O3RjcChkc3Q9ODApXCYjMzQ7KVxuJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXCYjMzQ7T1ZTX0tFWV9BVFRSX1RDUFwmIzM0OylcbiYjNDM7ICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCBcJiMzNDtUQ1Aga2V5IG5vdCBmb3VuZFwmIzM0OylcbiYjNDM7ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJbXCYjMzQ7ZHN0XCYjMzQ7XSwgODApXG4mIzQzO1xuJiM0MzsgICAgZGVmIHRlc3RfdWRwX2RzdChzZWxmKTpcbiYjNDM7ICAgICAgICBcJiMzNDtcJiMzNDtcJiMzNDtUZXN0IFVEUCBkZXN0aW5hdGlvbiBwb3J0IHBhcnNpbmcuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coXCYjMzQ7dWRwKGRzdD01MylcJiMzNDspXG4mIzQzOyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5LCBcJiMzNDtPVlNfS0VZX0FUVFJfVURQXCYjMzQ7KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGF0dHIsIFwmIzM0O1VEUCBrZXkgbm90IGZvdW5kXCYjMzQ7KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcJiMzNDtkc3RcJiMzNDtdLCA1MylcbiYjNDM7XG4mIzQzOyAgICBkZWYgdGVzdF9pY21wX3R5cGVfY29kZShzZWxmKTpcbiYjNDM7ICAgICAgICBcJiMzNDtcJiMzNDtcJiMzNDtUZXN0IElDTVAgdHlwZSBhbmQgY29kZSBwYXJzaW5nLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFwmIzM0O2ljbXAodHlwZT04LGNvZGU9MClcJiMzNDspXG4mIzQzOyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5LCBcJiMzNDtPVlNfS0VZX0FUVFJfSUNNUFwmIzM0OylcbiYjNDM7ICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCBcJiMzNDtJQ01QIGtleSBub3QgZm91bmRcJiMzNDspXG4mIzQzOyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyW1wmIzM0O3R5cGVcJiMzNDtdLCA4KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcJiMzNDtjb2RlXCYjMzQ7XSwgMClcbiYjNDM7XG4mIzQzOyAgICBkZWYgdGVzdF9pcHY0X3Byb3RvKHNlbGYpOlxuJiM0MzsgICAgICAgIFwmIzM0O1wmIzM0O1wmIzM0O1Rlc3QgSVB2NCBwcm90b2NvbCBwYXJzaW5nLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFwmIzM0O2V0aF90eXBlKDB4MDgwMCksaXB2NChwcm90bz0xMzIpXCYjMzQ7KVxuJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXCYjMzQ7T1ZTX0tFWV9BVFRSX0lQVjRcJiMzNDspXG4mIzQzOyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXCYjMzQ7SVB2NCBrZXkgbm90IGZvdW5kXCYjMzQ7KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcJiMzNDtwcm90b1wmIzM0O10sIDEzMilcbiYjNDM7XG4mIzQzOyAgICBkZWYgdGVzdF9ldGhfdHlwZShzZWxmKTpcbiYjNDM7ICAgICAgICBcJiMzNDtcJiMzNDtcJiMzNDtUZXN0IEV0aGVybmV0IHR5cGUgcGFyc2luZy5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgICAgICBrZXkgPSBfcGFyc2VfZmxvdyhcJiMzNDtldGhfdHlwZSgweDA4MDApXCYjMzQ7KVxuJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXCYjMzQ7T1ZTX0tFWV9BVFRSX0VUSEVSVFlQRVwmIzM0OylcbiYjNDM7ICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCBcJiMzNDtFdGhUeXBlIGtleSBub3QgZm91bmRcJiMzNDspXG4mIzQzOyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyLCAweDA4MDApXG4mIzQzO1xuJiM0MzsgICAgZGVmIHRlc3RfZnVsbF9zY3RwX2Zsb3coc2VsZik6XG4mIzQzOyAgICAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7VGVzdCBjb21wbGV0ZSBTQ1RQIGZsb3cgc3RyaW5nIHBhcnNpbmcuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICAgICAgZmxvd3N0ciA9IChcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLFwmIzM0O1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtpcHY0KHByb3RvPTEzMiksc2N0cChkc3Q9NDQ0MylcJiMzNDtcbiYjNDM7ICAgICAgICApXG4mIzQzOyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coZmxvd3N0cilcbiYjNDM7ICAgICAgICBpbl9wb3J0ID0gX2ZpbmRfYXR0cihrZXksIFwmIzM0O09WU19LRVlfQVRUUl9JTl9QT1JUXCYjMzQ7KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5fcG9ydCwgMSlcbiYjNDM7ICAgICAgICBzY3RwID0gX2ZpbmRfYXR0cihrZXksIFwmIzM0O09WU19LRVlfQVRUUl9TQ1RQXCYjMzQ7KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHNjdHAsIFwmIzM0O1NDVFAga2V5IG5vdCBmb3VuZFwmIzM0OylcbiYjNDM7ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNjdHBbXCYjMzQ7ZHN0XCYjMzQ7XSwgNDQ0MylcbiYjNDM7XG4mIzQzOyAgICBkZWYgdGVzdF9zY3RwX3JvdW5kdHJpcChzZWxmKTpcbiYjNDM7ICAgICAgICBcJiMzNDtcJiMzNDtcJiMzNDtUZXN0IHBhcnNlIC1cdTAwM2UgZHBzdHIgLVx1MDAzZSBwYXJzZSBrZWVwcyB0aGUgU0NUUCBrZXkuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coXCYjMzQ7c2N0cChkc3Q9NDQ0MylcJiMzNDspXG4mIzQzOyAgICAgICAga2V5MiA9IG92c2tleSgpXG4mIzQzOyAgICAgICAga2V5MltcJiMzNDthdHRyc1wmIzM0O10gPSBbXVxuJiM0MzsgICAgICAgIHJlbWFpbmRlciA9IGtleTIucGFyc2Uoa2V5LmRwc3RyKCkpXG4mIzQzOyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZW1haW5kZXIsIFwmIzM0O1wmIzM0OywgXCYjMzQ7cm91bmQtdHJpcCBsZWZ0IHVucGFyc2VkIHRleHRcJiMzNDspXG4mIzQzOyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5MiwgXCYjMzQ7T1ZTX0tFWV9BVFRSX1NDVFBcJiMzNDspXG4mIzQzOyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXCYjMzQ7U0NUUCBrZXkgbG9zdCBpbiByb3VuZC10cmlwXCYjMzQ7KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcJiMzNDtkc3RcJiMzNDtdLCA0NDQzKVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiB0ZXN0X292c2tleV9wYXJzZSgpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7VGVzdCBvdnNrZXkucGFyc2UoKSBtZXRob2QgZm9yIHZhcmlvdXMgZmxvdyBrZXkgdHlwZXMuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKS5sb2FkVGVzdHNGcm9tVGVzdENhc2UoVGVzdE92c0tleVBhcnNlKVxuJiM0MzsgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIodmVyYm9zaXR5PTIpXG4mIzQzOyAgICByZXN1bHQgPSBydW5uZXIucnVuKHN1aXRlKVxuJiM0MzsgICAgcmV0dXJuIDAgaWYgcmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSBlbHNlIDFcbiYjNDM7XG4mIzQzO1xuIGlmIF9fbmFtZV9fID09IFwmIzM0O19fbWFpbl9fXCYjMzQ7OlxuJiM0MzsgICAgaWYgbGVuKHN5cy5hcmd2KSBcdTAwM2UgMSBhbmQgc3lzLmFyZ3ZbMV0gPT0gXCYjMzQ7LS10ZXN0XCYjMzQ7OlxuJiM0MzsgICAgICAgIHN5cy5leGl0KHRlc3Rfb3Zza2V5X3BhcnNlKCkpXG4gICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3YpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIxOjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoLyopIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNzlhZDhiMDYxODkyZTQ4MjM0MDkzZjdkNmIyYTliODdlODY3YTJiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMjUgMjE6Mzg6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2gKaW5kZXggODUzZGJjMWIwMGQ3YWIuLmI0NDgzMjQ1MjdkOGIwIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoCkBAIC0zNCw2ICYjNDM7MzQsNyBAQCB0ZXN0cz0mIzM0OwogCWFjdGlvbl9zZXQJCQkJc2V0OiBTRVQgYWN0aW9uIHJld3JpdGVzIGZpZWxkcwogCXRydW5jCQkJCQl0cnVuYzogb3V0cHV0IHRydW5jYXRpb24KIAlpY21wdjYJCQkJCWljbXB2NjogSUNNUHY2IGVjaG8gdHlwZSBtYXRjaAomIzQzOwlzY3RwX2Nvbm5lY3RfdjQJCQkJc2N0cDogU0NUUCBmbG93IGtleSBtYXRjaGluZwogCXBzYW1wbGUJCQkJCXBzYW1wbGU6IFNhbXBsaW5nIHBhY2tldHMgd2l0aCBwc2FtcGxlJiMzNDsKIAogaW5mbygpIHsKQEAgLTYxMSw2ICYjNDM7NjEyLDEyNiBAQCB0ZXN0X2ljbXB2NigpIHsKIAlyZXR1cm4gMAogfQogCiYjNDM7IyBDaGVjayBmb3IgYW4gU0NUUCBlbmRwb2ludCB2aWEgL3Byb2MsIHdoaWNoIHdvcmtzIHdpdGhvdXQgc2N0cF9kaWFnLgomIzQzO3NjdHBfZXBzX2hhcygpIHsKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyQxJiMzNDsgYXdrIC12IHA9JiMzNDskMiYjMzQ7ICYjMzk7JDY9PXAmIzM5OyAvcHJvYy9uZXQvc2N0cC9lcHMgfCBncmVwIC1xIC4KJiM0Mzt9CiYjNDM7CiYjNDM7IyBzY3RwX2Nvbm5lY3RfdjQgdGVzdAomIzQzOyMgLSBzY3RwKGRzdD00NDQzKSBtYXRjaGVzIGNsaWVudC10by1zZXJ2ZXIgSU5JVAomIzQzOyMgLSBzY3RwKHNyYz00NDQzKSBtYXRjaGVzIHNlcnZlci10by1jbGllbnQgSU5JVC1BQ0sKJiM0MzsjIC0gcmVtb3ZlIGZsb3dzIGFuZCB2ZXJpZnkgY29ubmVjdGlvbiBmYWlscywgcmVpbnN0YWxsIGFuZCByZWNvdmVyCiYjNDM7dGVzdF9zY3RwX2Nvbm5lY3RfdjQoKSB7CiYjNDM7CWxvY2FsIHQ9JiMzNDt0ZXN0X3NjdHBfY29ubmVjdF92NCYjMzQ7CiYjNDM7CWxvY2FsIHNydl9pcD0xNzIuMzEuMTEwLjIwCiYjNDM7CiYjNDM7CW1vZHByb2JlIC1xIHNjdHAgMiZndDsvZGV2L251bGwgfHwgcmV0dXJuICYjMzQ7JGtzZnRfc2tpcCYjMzQ7CiYjNDM7CXNvY2F0IC1WIDImZ3Q7JmFtcDsxIHwgZ3JlcCAtcSAmIzM0O2RlZmluZSBXSVRIX1NDVFAmIzM0OyB8fCByZXR1cm4gJiMzNDska3NmdF9za2lwJiMzNDsKJiM0MzsKJiM0MzsJc2J4X2FkZCAmIzM0OyR0JiMzNDsgfHwgcmV0dXJuICQ/CiYjNDM7CW92c19hZGRfZHAgJiMzNDskdCYjMzQ7IHNjdHA0IHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CWluZm8gJiMzNDtjcmVhdGUgbmFtZXNwYWNlcyYjMzQ7CiYjNDM7CWZvciBucyBpbiBjbGllbnQgc2VydmVyOyBkbwomIzQzOwkJb3ZzX2FkZF9uZXRuc19hbmRfdmV0aHMgJiMzNDskdCYjMzQ7ICYjMzQ7c2N0cDQmIzM0OyAmIzM0OyRucyYjMzQ7IFwKJiM0MzsJCSAgICAmIzM0OyR7bnM6MDoxfTAmIzM0OyAmIzM0OyR7bnM6MDoxfTEmIzM0OyB8fCByZXR1cm4gMQomIzQzOwlkb25lCiYjNDM7CiYjNDM7CWlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIGFkZHIgYWRkIDE3Mi4zMS4xMTAuMTAvMjQgZGV2IGMxCiYjNDM7CWlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIGxpbmsgc2V0IGMxIHVwCiYjNDM7CWlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGFkZHIgYWRkICYjMzQ7JHtzcnZfaXB9LzI0JiMzNDsgZGV2IHMxCiYjNDM7CWlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGxpbmsgc2V0IHMxIHVwCiYjNDM7CiYjNDM7CSMgUHJvYmU6IGNoZWNrIGlmIGtlcm5lbCBzdXBwb3J0cyBzY3RwIGZsb3cga2V5LgomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDskdCYjMzQ7IHNjdHA0IFwKJiM0MzsJICAgICYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKGRzdD00NDQzKSYjMzk7IFwKJiM0MzsJICAgICYjMzk7MiYjMzk7ICZhbXA7Jmd0Oy9kZXYvbnVsbAomIzQzOwlpZiBbICQ/IC1uZSAwIF07IHRoZW4KJiM0MzsJCWluZm8gJiMzNDtubyBzdXBwb3J0IGZvciBzY3RwIGtleSAtIHNraXBwaW5nJiMzNDsKJiM0MzsJCW92c19leGl0X3NpZwomIzQzOwkJcmV0dXJuICRrc2Z0X3NraXAKJiM0MzsJZmkKJiM0MzsJb3ZzX2RlbF9mbG93cyAmIzM0OyR0JiMzNDsgc2N0cDQKJiM0MzsKJiM0MzsJIyBBUlAgZm9yd2FyZGluZwomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDskdCYjMzQ7IHNjdHA0IFwKJiM0MzsJICAgICYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJiMzOTsgXAomIzQzOwkgICAgJiMzOTsyJiMzOTsgfHwgcmV0dXJuIDEKJiM0MzsJb3ZzX2FkZF9mbG93ICYjMzQ7JHQmIzM0OyBzY3RwNCBcCiYjNDM7CSAgICAmIzM5O2luX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHgwODA2KSxhcnAoKSYjMzk7IFwKJiM0MzsJICAgICYjMzk7MSYjMzk7IHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CSMgU0NUUCBwb3J0IG1hdGNoaW5nOiBkc3QgZm9yIHJlcXVlc3QsIHNyYyBmb3IgcmVwbHkKJiM0MzsJb3ZzX2FkZF9mbG93ICYjMzQ7JHQmIzM0OyBzY3RwNCBcCiYjNDM7CSAgICAmIzM5O2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMiksc2N0cChkc3Q9NDQ0MykmIzM5OyBcCiYjNDM7CSAgICAmIzM5OzImIzM5OyB8fCByZXR1cm4gMQomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDskdCYjMzQ7IHNjdHA0IFwKJiM0MzsJICAgICYjMzk7aW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKHNyYz00NDQzKSYjMzk7IFwKJiM0MzsJICAgICYjMzk7MSYjMzk7IHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CW92c19uZXRuc19zcGF3bl9kYWVtb24gJiMzNDskdCYjMzQ7ICYjMzQ7c2VydmVyJiMzNDsgXAomIzQzOwkgICAgc29jYXQgLXUgU0NUUDQtTElTVEVOOjQ0NDMgU1RET1VUCiYjNDM7CWxvY2FsIHNlcnZlcl9waWQ9JiMzNDskcGlkJiMzNDsKJiM0MzsJb3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA0NDQzIHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CWluZm8gJiMzNDt2ZXJpZnkgU0NUUCBhc3NvY2lhdGlvbiB3aXRoIHBvcnQta2V5ZWQgZmxvd3MmIzM0OwomIzQzOwlvdnNfc2J4ICYjMzQ7JHQmIzM0OyBpcCBuZXRucyBleGVjIGNsaWVudCBcCiYjNDM7CSAgICB0aW1lb3V0IDMgc29jYXQgLXUgU1RESU4gJiMzNDtTQ1RQNC1DT05ORUNUOiR7c3J2X2lwfTo0NDQzJiMzNDsgJmx0Oy9kZXYvbnVsbCBcCiYjNDM7CSAgICB8fCByZXR1cm4gMQomIzQzOwomIzQzOwlvdnNfZGVsX2Zsb3dzICYjMzQ7JHQmIzM0OyBzY3RwNAomIzQzOwomIzQzOwlpbmZvICYjMzQ7dmVyaWZ5IGNvbm5lY3Rpb24gZmFpbHMgd2l0aG91dCBmbG93cyYjMzQ7CiYjNDM7CW92c19hZGRfZmxvdyAmIzM0OyR0JiMzNDsgc2N0cDQgXAomIzQzOwkgICAgJiMzOTtpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4MDgwNiksYXJwKCkmIzM5OyBcCiYjNDM7CSAgICAmIzM5OzImIzM5OyB8fCByZXR1cm4gMQomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDskdCYjMzQ7IHNjdHA0IFwKJiM0MzsJICAgICYjMzk7aW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJiMzOTsgXAomIzQzOwkgICAgJiMzOTsxJiMzOTsgfHwgcmV0dXJuIDEKJiM0MzsKJiM0MzsJa2lsbCAtVEVSTSAmIzM0OyRzZXJ2ZXJfcGlkJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJbG9jYWwgaT0wCiYjNDM7CXdoaWxlIGtpbGwgLTAgJiMzNDskc2VydmVyX3BpZCYjMzQ7IDImZ3Q7L2Rldi9udWxsICZhbXA7JmFtcDsgWyAmIzM0OyRpJiMzNDsgLWx0IDUgXTsgZG8KJiM0MzsJICAgIHNsZWVwIDAuMgomIzQzOwkgICAgaT0kKChpICYjNDM7IDEpKQomIzQzOwlkb25lCiYjNDM7CW92c19uZXRuc19zcGF3bl9kYWVtb24gJiMzNDskdCYjMzQ7ICYjMzQ7c2VydmVyJiMzNDsgXAomIzQzOwkgICAgc29jYXQgLXUgU0NUUDQtTElTVEVOOjQ0NDMgU1RET1VUCiYjNDM7CXNlcnZlcl9waWQ9JiMzNDskcGlkJiMzNDsKJiM0MzsJb3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA0NDQzIHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CW92c19zYnggJiMzNDskdCYjMzQ7IGlwIG5ldG5zIGV4ZWMgY2xpZW50IFwKJiM0MzsJICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiAmIzM0O1NDVFA0LUNPTk5FQ1Q6JHtzcnZfaXB9OjQ0NDMmIzM0OyAmbHQ7L2Rldi9udWxsIFwKJiM0MzsJICAgICZndDsvZGV2L251bGwgMiZndDsmYW1wOzEgXAomIzQzOwkgICAgJmFtcDsmYW1wOyB7IGluZm8gJiMzNDtjb25uZWN0aW9uIHNob3VsZCBmYWlsIHdpdGhvdXQgZmxvd3MmIzM0OwomIzQzOwkgICAgICAgICByZXR1cm4gMTsgfQomIzQzOwomIzQzOwlpbmZvICYjMzQ7cmVpbnN0YWxsIGZsb3dzIGFuZCB2ZXJpZnkgcmVjb3ZlcnkmIzM0OwomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDskdCYjMzQ7IHNjdHA0IFwKJiM0MzsJICAgICYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKGRzdD00NDQzKSYjMzk7IFwKJiM0MzsJICAgICYjMzk7MiYjMzk7IHx8IHJldHVybiAxCiYjNDM7CW92c19hZGRfZmxvdyAmIzM0OyR0JiMzNDsgc2N0cDQgXAomIzQzOwkgICAgJiMzOTtpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwMCksaXB2NChwcm90bz0xMzIpLHNjdHAoc3JjPTQ0NDMpJiMzOTsgXAomIzQzOwkgICAgJiMzOTsxJiMzOTsgfHwgcmV0dXJuIDEKJiM0MzsKJiM0MzsJa2lsbCAtVEVSTSAmIzM0OyRzZXJ2ZXJfcGlkJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJaT0wCiYjNDM7CXdoaWxlIGtpbGwgLTAgJiMzNDskc2VydmVyX3BpZCYjMzQ7IDImZ3Q7L2Rldi9udWxsICZhbXA7JmFtcDsgWyAmIzM0OyRpJiMzNDsgLWx0IDUgXTsgZG8KJiM0MzsJICAgIHNsZWVwIDAuMgomIzQzOwkgICAgaT0kKChpICYjNDM7IDEpKQomIzQzOwlkb25lCiYjNDM7CW92c19uZXRuc19zcGF3bl9kYWVtb24gJiMzNDskdCYjMzQ7ICYjMzQ7c2VydmVyJiMzNDsgXAomIzQzOwkgICAgc29jYXQgLXUgU0NUUDQtTElTVEVOOjQ0NDMgU1RET1VUCiYjNDM7CXNlcnZlcl9waWQ9JiMzNDskcGlkJiMzNDsKJiM0MzsJb3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA0NDQzIHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CW92c19zYnggJiMzNDskdCYjMzQ7IGlwIG5ldG5zIGV4ZWMgY2xpZW50IFwKJiM0MzsJICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiAmIzM0O1NDVFA0LUNPTk5FQ1Q6JHtzcnZfaXB9OjQ0NDMmIzM0OyAmbHQ7L2Rldi9udWxsIFwKJiM0MzsJICAgIHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CXJldHVybiAwCiYjNDM7fQomIzQzOwogIyBwc2FtcGxlIHRlc3QKICMgLSB1c2UgcHNhbXBsZSB0byBvYnNlcnZlIHBhY2tldHMKIHRlc3RfcHNhbXBsZSgpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vdnMtZHBjdGwucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3ZzLWRwY3RsLnB5CmluZGV4IGYzZWRkMTk4MjIzZjE3Li42MzNhZjEwZDdlOGFiMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL292cy1kcGN0bC5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3ZzLWRwY3RsLnB5CkBAIC0xNSw2ICYjNDM7MTUsNyBAQCBpbXBvcnQgc3RydWN0CiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogaW1wb3J0IHR5cGVzCiYjNDM7aW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgdXVpZAogCiB0cnk6CkBAIC0xOTg0LDYgJiM0MzsxOTg1LDExIEBAIGNsYXNzIG92c2tleShubGEpOgogICAgICAgICAgICAgICAgICYjMzQ7dWRwJiMzNDssCiAgICAgICAgICAgICAgICAgb3Zza2V5Lm92c19rZXlfdWRwLAogICAgICAgICAgICAgKSwKJiM0MzsgICAgICAgICAgICAoCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7T1ZTX0tFWV9BVFRSX1NDVFAmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtzY3RwJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgIG92c2tleS5vdnNfa2V5X3NjdHAsCiYjNDM7ICAgICAgICAgICAgKSwKICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAmIzM0O09WU19LRVlfQVRUUl9JQ01QJiMzNDssCiAgICAgICAgICAgICAgICAgJiMzNDtpY21wJiMzNDssCkBAIC0zMTY1LDUgJiM0MzszMTcxLDEyOCBAQCBkZWYgbWFpbihhcmd2KToKICAgICByZXR1cm4gMAogCiAKJiM0MztkZWYgX2luaXRfb3Zza2V5X25sYXMoKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7SW5pdGlhbGl6ZSByZXF1aXJlZCBOTEEgY2xhc3NlcyBmb3Igb3Zza2V5IHBhcnNpbmcuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIG5sbXNnX2F0b21zLmVuY2FwX292c2tleSA9IGVuY2FwX292c2tleQomIzQzOyAgICBubG1zZ19hdG9tcy5vdnNrZXkgPSBvdnNrZXkKJiM0MzsgICAgbmxtc2dfYXRvbXMub3ZzYWN0aW9ucyA9IG92c2FjdGlvbnMKJiM0MzsKJiM0MzsKJiM0MztkZWYgX3BhcnNlX2Zsb3coZmxvd3N0cik6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O1BhcnNlIGEgZmxvdyBzdHJpbmcgYW5kIHJldHVybiB0aGUga2V5LiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBrZXkgPSBvdnNrZXkoKQomIzQzOyAgICBrZXlbJiMzNDthdHRycyYjMzQ7XSA9IFtdCiYjNDM7ICAgIGtleS5wYXJzZShmbG93c3RyKQomIzQzOyAgICByZXR1cm4ga2V5CiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF9maW5kX2F0dHIoa2V5LCBhdHRyX25hbWUpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtGaW5kIGFuIGF0dHJpYnV0ZSBpbiBwYXJzZWQga2V5LiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBmb3IgYXR0ciBpbiBrZXlbJiMzNDthdHRycyYjMzQ7XToKJiM0MzsgICAgICAgIGlmIGF0dHJbMF0gPT0gYXR0cl9uYW1lOgomIzQzOyAgICAgICAgICAgIHJldHVybiBhdHRyWzFdCiYjNDM7ICAgIHJldHVybiBOb25lCiYjNDM7CiYjNDM7CiYjNDM7Y2xhc3MgVGVzdE92c0tleVBhcnNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7VW5pdCB0ZXN0cyBmb3Igb3Zza2V5LnBhcnNlKCkgZmxvdyBzdHJpbmcgcGFyc2luZy4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgQGNsYXNzbWV0aG9kCiYjNDM7ICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CiYjNDM7ICAgICAgICBfaW5pdF9vdnNrZXlfbmxhcygpCiYjNDM7CiYjNDM7ICAgIGRlZiB0ZXN0X3NjdHBfZHN0KHNlbGYpOgomIzQzOyAgICAgICAgJiMzNDsmIzM0OyYjMzQ7VGVzdCBTQ1RQIGRlc3RpbmF0aW9uIHBvcnQgcGFyc2luZy4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KCYjMzQ7c2N0cChkc3Q9NDQ0MykmIzM0OykKJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgJiMzNDtPVlNfS0VZX0FUVFJfU0NUUCYjMzQ7KQomIzQzOyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgJiMzNDtTQ1RQIGtleSBub3QgZm91bmQmIzM0OykKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0clsmIzM0O2RzdCYjMzQ7XSwgNDQ0MykKJiM0MzsKJiM0MzsgICAgZGVmIHRlc3Rfc2N0cF9zcmMoc2VsZik6CiYjNDM7ICAgICAgICAmIzM0OyYjMzQ7JiMzNDtUZXN0IFNDVFAgc291cmNlIHBvcnQgcGFyc2luZy4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KCYjMzQ7c2N0cChzcmM9NDQ0MykmIzM0OykKJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgJiMzNDtPVlNfS0VZX0FUVFJfU0NUUCYjMzQ7KQomIzQzOyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgJiMzNDtTQ1RQIGtleSBub3QgZm91bmQmIzM0OykKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0clsmIzM0O3NyYyYjMzQ7XSwgNDQ0MykKJiM0MzsKJiM0MzsgICAgZGVmIHRlc3Rfc2N0cF9zcmNfYW5kX2RzdChzZWxmKToKJiM0MzsgICAgICAgICYjMzQ7JiMzNDsmIzM0O1Rlc3QgU0NUUCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHBvcnQgcGFyc2luZy4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KCYjMzQ7c2N0cChzcmM9MTIzNCxkc3Q9NTY3OCkmIzM0OykKJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgJiMzNDtPVlNfS0VZX0FUVFJfU0NUUCYjMzQ7KQomIzQzOyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgJiMzNDtTQ1RQIGtleSBub3QgZm91bmQmIzM0OykKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0clsmIzM0O3NyYyYjMzQ7XSwgMTIzNCkKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0clsmIzM0O2RzdCYjMzQ7XSwgNTY3OCkKJiM0MzsKJiM0MzsgICAgZGVmIHRlc3RfdGNwX2RzdChzZWxmKToKJiM0MzsgICAgICAgICYjMzQ7JiMzNDsmIzM0O1Rlc3QgVENQIGRlc3RpbmF0aW9uIHBvcnQgcGFyc2luZy4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KCYjMzQ7dGNwKGRzdD04MCkmIzM0OykKJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgJiMzNDtPVlNfS0VZX0FUVFJfVENQJiMzNDspCiYjNDM7ICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCAmIzM0O1RDUCBrZXkgbm90IGZvdW5kJiMzNDspCiYjNDM7ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJbJiMzNDtkc3QmIzM0O10sIDgwKQomIzQzOwomIzQzOyAgICBkZWYgdGVzdF91ZHBfZHN0KHNlbGYpOgomIzQzOyAgICAgICAgJiMzNDsmIzM0OyYjMzQ7VGVzdCBVRFAgZGVzdGluYXRpb24gcG9ydCBwYXJzaW5nLiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coJiMzNDt1ZHAoZHN0PTUzKSYjMzQ7KQomIzQzOyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5LCAmIzM0O09WU19LRVlfQVRUUl9VRFAmIzM0OykKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGF0dHIsICYjMzQ7VURQIGtleSBub3QgZm91bmQmIzM0OykKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0clsmIzM0O2RzdCYjMzQ7XSwgNTMpCiYjNDM7CiYjNDM7ICAgIGRlZiB0ZXN0X2ljbXBfdHlwZV9jb2RlKHNlbGYpOgomIzQzOyAgICAgICAgJiMzNDsmIzM0OyYjMzQ7VGVzdCBJQ01QIHR5cGUgYW5kIGNvZGUgcGFyc2luZy4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KCYjMzQ7aWNtcCh0eXBlPTgsY29kZT0wKSYjMzQ7KQomIzQzOyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5LCAmIzM0O09WU19LRVlfQVRUUl9JQ01QJiMzNDspCiYjNDM7ICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCAmIzM0O0lDTVAga2V5IG5vdCBmb3VuZCYjMzQ7KQomIzQzOyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyWyYjMzQ7dHlwZSYjMzQ7XSwgOCkKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0clsmIzM0O2NvZGUmIzM0O10sIDApCiYjNDM7CiYjNDM7ICAgIGRlZiB0ZXN0X2lwdjRfcHJvdG8oc2VsZik6CiYjNDM7ICAgICAgICAmIzM0OyYjMzQ7JiMzNDtUZXN0IElQdjQgcHJvdG9jb2wgcGFyc2luZy4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KCYjMzQ7ZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMikmIzM0OykKJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgJiMzNDtPVlNfS0VZX0FUVFJfSVBWNCYjMzQ7KQomIzQzOyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgJiMzNDtJUHY0IGtleSBub3QgZm91bmQmIzM0OykKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0clsmIzM0O3Byb3RvJiMzNDtdLCAxMzIpCiYjNDM7CiYjNDM7ICAgIGRlZiB0ZXN0X2V0aF90eXBlKHNlbGYpOgomIzQzOyAgICAgICAgJiMzNDsmIzM0OyYjMzQ7VGVzdCBFdGhlcm5ldCB0eXBlIHBhcnNpbmcuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgICAgICBrZXkgPSBfcGFyc2VfZmxvdygmIzM0O2V0aF90eXBlKDB4MDgwMCkmIzM0OykKJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgJiMzNDtPVlNfS0VZX0FUVFJfRVRIRVJUWVBFJiMzNDspCiYjNDM7ICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCAmIzM0O0V0aFR5cGUga2V5IG5vdCBmb3VuZCYjMzQ7KQomIzQzOyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyLCAweDA4MDApCiYjNDM7CiYjNDM7ICAgIGRlZiB0ZXN0X2Z1bGxfc2N0cF9mbG93KHNlbGYpOgomIzQzOyAgICAgICAgJiMzNDsmIzM0OyYjMzQ7VGVzdCBjb21wbGV0ZSBTQ1RQIGZsb3cgc3RyaW5nIHBhcnNpbmcuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgICAgICBmbG93c3RyID0gKAomIzQzOyAgICAgICAgICAgICYjMzQ7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLCYjMzQ7CiYjNDM7ICAgICAgICAgICAgJiMzNDtpcHY0KHByb3RvPTEzMiksc2N0cChkc3Q9NDQ0MykmIzM0OwomIzQzOyAgICAgICAgKQomIzQzOyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coZmxvd3N0cikKJiM0MzsgICAgICAgIGluX3BvcnQgPSBfZmluZF9hdHRyKGtleSwgJiMzNDtPVlNfS0VZX0FUVFJfSU5fUE9SVCYjMzQ7KQomIzQzOyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbl9wb3J0LCAxKQomIzQzOyAgICAgICAgc2N0cCA9IF9maW5kX2F0dHIoa2V5LCAmIzM0O09WU19LRVlfQVRUUl9TQ1RQJiMzNDspCiYjNDM7ICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShzY3RwLCAmIzM0O1NDVFAga2V5IG5vdCBmb3VuZCYjMzQ7KQomIzQzOyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY3RwWyYjMzQ7ZHN0JiMzNDtdLCA0NDQzKQomIzQzOwomIzQzOyAgICBkZWYgdGVzdF9zY3RwX3JvdW5kdHJpcChzZWxmKToKJiM0MzsgICAgICAgICYjMzQ7JiMzNDsmIzM0O1Rlc3QgcGFyc2UgLSZndDsgZHBzdHIgLSZndDsgcGFyc2Uga2VlcHMgdGhlIFNDVFAga2V5LiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coJiMzNDtzY3RwKGRzdD00NDQzKSYjMzQ7KQomIzQzOyAgICAgICAga2V5MiA9IG92c2tleSgpCiYjNDM7ICAgICAgICBrZXkyWyYjMzQ7YXR0cnMmIzM0O10gPSBbXQomIzQzOyAgICAgICAgcmVtYWluZGVyID0ga2V5Mi5wYXJzZShrZXkuZHBzdHIoKSkKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVtYWluZGVyLCAmIzM0OyYjMzQ7LCAmIzM0O3JvdW5kLXRyaXAgbGVmdCB1bnBhcnNlZCB0ZXh0JiMzNDspCiYjNDM7ICAgICAgICBhdHRyID0gX2ZpbmRfYXR0cihrZXkyLCAmIzM0O09WU19LRVlfQVRUUl9TQ1RQJiMzNDspCiYjNDM7ICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCAmIzM0O1NDVFAga2V5IGxvc3QgaW4gcm91bmQtdHJpcCYjMzQ7KQomIzQzOyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyWyYjMzQ7ZHN0JiMzNDtdLCA0NDQzKQomIzQzOwomIzQzOwomIzQzO2RlZiB0ZXN0X292c2tleV9wYXJzZSgpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtUZXN0IG92c2tleS5wYXJzZSgpIG1ldGhvZCBmb3IgdmFyaW91cyBmbG93IGtleSB0eXBlcy4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkubG9hZFRlc3RzRnJvbVRlc3RDYXNlKFRlc3RPdnNLZXlQYXJzZSkKJiM0MzsgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIodmVyYm9zaXR5PTIpCiYjNDM7ICAgIHJlc3VsdCA9IHJ1bm5lci5ydW4oc3VpdGUpCiYjNDM7ICAgIHJldHVybiAwIGlmIHJlc3VsdC53YXNTdWNjZXNzZnVsKCkgZWxzZSAxCiYjNDM7CiYjNDM7CiBpZiBfX25hbWVfXyA9PSAmIzM0O19fbWFpbl9fJiMzNDs6CiYjNDM7ICAgIGlmIGxlbihzeXMuYXJndikgJmd0OyAxIGFuZCBzeXMuYXJndlsxXSA9PSAmIzM0Oy0tdGVzdCYjMzQ7OgomIzQzOyAgICAgICAgc3lzLmV4aXQodGVzdF9vdnNrZXlfcGFyc2UoKSkKICAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2KSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjE6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkzMgoJCQkJCQkJb3V0cHV0OiA2NwoJCQkJCQkJdGhvdWdodHM6IDI5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIE5lZWQgZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgd2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgZnV6emluZyBkdWUgdG8gZnVuY3Rpb25hbCBjaGFuZ2VzIHdpdGhpbiB0aGUga2VybmVsLiBUaGUgZmlsZXMgbW9kaWZpZWQgYXJlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2hgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL292cy1kcGN0bC5weWAuIFRoZXNlIGFyZSBzZWxmdGVzdHMgZm9yIE9wZW4gdlN3aXRjaC4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aG91Z2g7IHRoZXJlIGFyZSAqbm8qIGNoYW5nZXMgdG8gYW55IGtlcm5lbCBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBhIGRpcmVjdG9yeSBsaWtlIGBuZXQvb3BlbnZzd2l0Y2gvYC4KCkFscmlnaHQsIGEgcXVpY2sgcmV2aWV3IG9mIHRoZSBkaWZmIGNvbmZpcm1zOiBpdCBpcyBpbmRlZWQgbGltaXRlZCB0byB0aG9zZSBzZWxmdGVzdCBmaWxlcy4gU2luY2UgdGhpcyBwYXRjaCAqZXhjbHVzaXZlbHkqIG1vZGlmaWVzIHNlbGZ0ZXN0cywgdGhpcyBtZWFucyBpdCBkb2VzbiYjMzk7dCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCYjMzk7cyBjb3JlIGJlaGF2aW9yLiBObyBrZXJuZWwtbGV2ZWwgY29kZSBpcyBiZWluZyBhbHRlcmVkIGhlcmUuIFRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyBjbGVhcjogYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLgoKSnVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGUgZGlmZiB0byBtYWtlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IG5vIG90aGVyIGZpbGVzIGFyZSBpbmNsdWRlZC4gWWVwLCBqdXN0IHRoZSB0d28gZmlsZXM6IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2hgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL292cy1kcGN0bC5weWAuIE5vIGtlcm5lbCBjb2RlIGlzIHRvdWNoZWQuCgpBbHJpZ2h0LCBJJiMzOTttIGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LiBJJiMzOTtsbCByZXR1cm4gYFdvcnRoRnV6emluZyA9IGZhbHNlYCwgZXhwbGFpbmluZyB0aGF0IHRoaXMgcGF0Y2ggZXhjbHVzaXZlbHkgaW52b2x2ZXMgbW9kaWZpY2F0aW9ucyB0byBzZWxmdGVzdHMsIGFuZCB0aGVyZWZvcmUgZG9lcyBub3QgaW1wYWN0IHRoZSBrZXJuZWwmIzM5O3MgZnVuY3Rpb25hbGl0eSBpbiBhIG1hbm5lciB0aGF0IHJlcXVpcmVzIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjE6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoLyopIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvKikgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIxOjM4OjIyLjI4MjA5MTE2NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMjEwODI2NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvKikgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjE6Mzg6MjIuMjgyMDk2OTY2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTkwMzYxNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjNzlhZDhiMDYxODkyZTQ4MjM0MDkzZjdkNmIyYTliODdlODY3YTJiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDI1IDIxOjM4OjIwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaFxcbmluZGV4IDg1M2RiYzFiMDBkN2FiLi5iNDQ4MzI0NTI3ZDhiMCAxMDA3NTVcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2hcXG5AQCAtMzQsNiArMzQsNyBAQCB0ZXN0cz1cXFwiXFxuIFxcdGFjdGlvbl9zZXRcXHRcXHRcXHRcXHRzZXQ6IFNFVCBhY3Rpb24gcmV3cml0ZXMgZmllbGRzXFxuIFxcdHRydW5jXFx0XFx0XFx0XFx0XFx0dHJ1bmM6IG91dHB1dCB0cnVuY2F0aW9uXFxuIFxcdGljbXB2NlxcdFxcdFxcdFxcdFxcdGljbXB2NjogSUNNUHY2IGVjaG8gdHlwZSBtYXRjaFxcbitcXHRzY3RwX2Nvbm5lY3RfdjRcXHRcXHRcXHRcXHRzY3RwOiBTQ1RQIGZsb3cga2V5IG1hdGNoaW5nXFxuIFxcdHBzYW1wbGVcXHRcXHRcXHRcXHRcXHRwc2FtcGxlOiBTYW1wbGluZyBwYWNrZXRzIHdpdGggcHNhbXBsZVxcXCJcXG4gXFxuIGluZm8oKSB7XFxuQEAgLTYxMSw2ICs2MTIsMTI2IEBAIHRlc3RfaWNtcHY2KCkge1xcbiBcXHRyZXR1cm4gMFxcbiB9XFxuIFxcbisjIENoZWNrIGZvciBhbiBTQ1RQIGVuZHBvaW50IHZpYSAvcHJvYywgd2hpY2ggd29ya3Mgd2l0aG91dCBzY3RwX2RpYWcuXFxuK3NjdHBfZXBzX2hhcygpIHtcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJDFcXFwiIGF3ayAtdiBwPVxcXCIkMlxcXCIgJyQ2PT1wJyAvcHJvYy9uZXQvc2N0cC9lcHMgfCBncmVwIC1xIC5cXG4rfVxcbitcXG4rIyBzY3RwX2Nvbm5lY3RfdjQgdGVzdFxcbisjIC0gc2N0cChkc3Q9NDQ0MykgbWF0Y2hlcyBjbGllbnQtdG8tc2VydmVyIElOSVRcXG4rIyAtIHNjdHAoc3JjPTQ0NDMpIG1hdGNoZXMgc2VydmVyLXRvLWNsaWVudCBJTklULUFDS1xcbisjIC0gcmVtb3ZlIGZsb3dzIGFuZCB2ZXJpZnkgY29ubmVjdGlvbiBmYWlscywgcmVpbnN0YWxsIGFuZCByZWNvdmVyXFxuK3Rlc3Rfc2N0cF9jb25uZWN0X3Y0KCkge1xcbitcXHRsb2NhbCB0PVxcXCJ0ZXN0X3NjdHBfY29ubmVjdF92NFxcXCJcXG4rXFx0bG9jYWwgc3J2X2lwPTE3Mi4zMS4xMTAuMjBcXG4rXFxuK1xcdG1vZHByb2JlIC1xIHNjdHAgMlxcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuIFxcXCIka3NmdF9za2lwXFxcIlxcbitcXHRzb2NhdCAtViAyXFx1MDAzZVxcdTAwMjYxIHwgZ3JlcCAtcSBcXFwiZGVmaW5lIFdJVEhfU0NUUFxcXCIgfHwgcmV0dXJuIFxcXCIka3NmdF9za2lwXFxcIlxcbitcXG4rXFx0c2J4X2FkZCBcXFwiJHRcXFwiIHx8IHJldHVybiAkP1xcbitcXHRvdnNfYWRkX2RwIFxcXCIkdFxcXCIgc2N0cDQgfHwgcmV0dXJuIDFcXG4rXFxuK1xcdGluZm8gXFxcImNyZWF0ZSBuYW1lc3BhY2VzXFxcIlxcbitcXHRmb3IgbnMgaW4gY2xpZW50IHNlcnZlcjsgZG9cXG4rXFx0XFx0b3ZzX2FkZF9uZXRuc19hbmRfdmV0aHMgXFxcIiR0XFxcIiBcXFwic2N0cDRcXFwiIFxcXCIkbnNcXFwiIFxcXFxcXG4rXFx0XFx0ICAgIFxcXCIke25zOjA6MX0wXFxcIiBcXFwiJHtuczowOjF9MVxcXCIgfHwgcmV0dXJuIDFcXG4rXFx0ZG9uZVxcbitcXG4rXFx0aXAgbmV0bnMgZXhlYyBjbGllbnQgaXAgYWRkciBhZGQgMTcyLjMxLjExMC4xMC8yNCBkZXYgYzFcXG4rXFx0aXAgbmV0bnMgZXhlYyBjbGllbnQgaXAgbGluayBzZXQgYzEgdXBcXG4rXFx0aXAgbmV0bnMgZXhlYyBzZXJ2ZXIgaXAgYWRkciBhZGQgXFxcIiR7c3J2X2lwfS8yNFxcXCIgZGV2IHMxXFxuK1xcdGlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGxpbmsgc2V0IHMxIHVwXFxuK1xcbitcXHQjIFByb2JlOiBjaGVjayBpZiBrZXJuZWwgc3VwcG9ydHMgc2N0cCBmbG93IGtleS5cXG4rXFx0b3ZzX2FkZF9mbG93IFxcXCIkdFxcXCIgc2N0cDQgXFxcXFxcbitcXHQgICAgJ2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMiksc2N0cChkc3Q9NDQ0MyknIFxcXFxcXG4rXFx0ICAgICcyJyBcXHUwMDI2XFx1MDAzZS9kZXYvbnVsbFxcbitcXHRpZiBbICQ/IC1uZSAwIF07IHRoZW5cXG4rXFx0XFx0aW5mbyBcXFwibm8gc3VwcG9ydCBmb3Igc2N0cCBrZXkgLSBza2lwcGluZ1xcXCJcXG4rXFx0XFx0b3ZzX2V4aXRfc2lnXFxuK1xcdFxcdHJldHVybiAka3NmdF9za2lwXFxuK1xcdGZpXFxuK1xcdG92c19kZWxfZmxvd3MgXFxcIiR0XFxcIiBzY3RwNFxcbitcXG4rXFx0IyBBUlAgZm9yd2FyZGluZ1xcbitcXHRvdnNfYWRkX2Zsb3cgXFxcIiR0XFxcIiBzY3RwNCBcXFxcXFxuK1xcdCAgICAnaW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJyBcXFxcXFxuK1xcdCAgICAnMicgfHwgcmV0dXJuIDFcXG4rXFx0b3ZzX2FkZF9mbG93IFxcXCIkdFxcXCIgc2N0cDQgXFxcXFxcbitcXHQgICAgJ2luX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHgwODA2KSxhcnAoKScgXFxcXFxcbitcXHQgICAgJzEnIHx8IHJldHVybiAxXFxuK1xcbitcXHQjIFNDVFAgcG9ydCBtYXRjaGluZzogZHN0IGZvciByZXF1ZXN0LCBzcmMgZm9yIHJlcGx5XFxuK1xcdG92c19hZGRfZmxvdyBcXFwiJHRcXFwiIHNjdHA0IFxcXFxcXG4rXFx0ICAgICdpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4MDgwMCksaXB2NChwcm90bz0xMzIpLHNjdHAoZHN0PTQ0NDMpJyBcXFxcXFxuK1xcdCAgICAnMicgfHwgcmV0dXJuIDFcXG4rXFx0b3ZzX2FkZF9mbG93IFxcXCIkdFxcXCIgc2N0cDQgXFxcXFxcbitcXHQgICAgJ2luX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMiksc2N0cChzcmM9NDQ0MyknIFxcXFxcXG4rXFx0ICAgICcxJyB8fCByZXR1cm4gMVxcbitcXG4rXFx0b3ZzX25ldG5zX3NwYXduX2RhZW1vbiBcXFwiJHRcXFwiIFxcXCJzZXJ2ZXJcXFwiIFxcXFxcXG4rXFx0ICAgIHNvY2F0IC11IFNDVFA0LUxJU1RFTjo0NDQzIFNURE9VVFxcbitcXHRsb2NhbCBzZXJ2ZXJfcGlkPVxcXCIkcGlkXFxcIlxcbitcXHRvdnNfd2FpdCBzY3RwX2Vwc19oYXMgc2VydmVyIDQ0NDMgfHwgcmV0dXJuIDFcXG4rXFxuK1xcdGluZm8gXFxcInZlcmlmeSBTQ1RQIGFzc29jaWF0aW9uIHdpdGggcG9ydC1rZXllZCBmbG93c1xcXCJcXG4rXFx0b3ZzX3NieCBcXFwiJHRcXFwiIGlwIG5ldG5zIGV4ZWMgY2xpZW50IFxcXFxcXG4rXFx0ICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiBcXFwiU0NUUDQtQ09OTkVDVDoke3Nydl9pcH06NDQ0M1xcXCIgXFx1MDAzYy9kZXYvbnVsbCBcXFxcXFxuK1xcdCAgICB8fCByZXR1cm4gMVxcbitcXG4rXFx0b3ZzX2RlbF9mbG93cyBcXFwiJHRcXFwiIHNjdHA0XFxuK1xcbitcXHRpbmZvIFxcXCJ2ZXJpZnkgY29ubmVjdGlvbiBmYWlscyB3aXRob3V0IGZsb3dzXFxcIlxcbitcXHRvdnNfYWRkX2Zsb3cgXFxcIiR0XFxcIiBzY3RwNCBcXFxcXFxuK1xcdCAgICAnaW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJyBcXFxcXFxuK1xcdCAgICAnMicgfHwgcmV0dXJuIDFcXG4rXFx0b3ZzX2FkZF9mbG93IFxcXCIkdFxcXCIgc2N0cDQgXFxcXFxcbitcXHQgICAgJ2luX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHgwODA2KSxhcnAoKScgXFxcXFxcbitcXHQgICAgJzEnIHx8IHJldHVybiAxXFxuK1xcbitcXHRraWxsIC1URVJNIFxcXCIkc2VydmVyX3BpZFxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0bG9jYWwgaT0wXFxuK1xcdHdoaWxlIGtpbGwgLTAgXFxcIiRzZXJ2ZXJfcGlkXFxcIiAyXFx1MDAzZS9kZXYvbnVsbCBcXHUwMDI2XFx1MDAyNiBbIFxcXCIkaVxcXCIgLWx0IDUgXTsgZG9cXG4rXFx0ICAgIHNsZWVwIDAuMlxcbitcXHQgICAgaT0kKChpICsgMSkpXFxuK1xcdGRvbmVcXG4rXFx0b3ZzX25ldG5zX3NwYXduX2RhZW1vbiBcXFwiJHRcXFwiIFxcXCJzZXJ2ZXJcXFwiIFxcXFxcXG4rXFx0ICAgIHNvY2F0IC11IFNDVFA0LUxJU1RFTjo0NDQzIFNURE9VVFxcbitcXHRzZXJ2ZXJfcGlkPVxcXCIkcGlkXFxcIlxcbitcXHRvdnNfd2FpdCBzY3RwX2Vwc19oYXMgc2VydmVyIDQ0NDMgfHwgcmV0dXJuIDFcXG4rXFxuK1xcdG92c19zYnggXFxcIiR0XFxcIiBpcCBuZXRucyBleGVjIGNsaWVudCBcXFxcXFxuK1xcdCAgICB0aW1lb3V0IDMgc29jYXQgLXUgU1RESU4gXFxcIlNDVFA0LUNPTk5FQ1Q6JHtzcnZfaXB9OjQ0NDNcXFwiIFxcdTAwM2MvZGV2L251bGwgXFxcXFxcbitcXHQgICAgXFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxIFxcXFxcXG4rXFx0ICAgIFxcdTAwMjZcXHUwMDI2IHsgaW5mbyBcXFwiY29ubmVjdGlvbiBzaG91bGQgZmFpbCB3aXRob3V0IGZsb3dzXFxcIlxcbitcXHQgICAgICAgICByZXR1cm4gMTsgfVxcbitcXG4rXFx0aW5mbyBcXFwicmVpbnN0YWxsIGZsb3dzIGFuZCB2ZXJpZnkgcmVjb3ZlcnlcXFwiXFxuK1xcdG92c19hZGRfZmxvdyBcXFwiJHRcXFwiIHNjdHA0IFxcXFxcXG4rXFx0ICAgICdpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4MDgwMCksaXB2NChwcm90bz0xMzIpLHNjdHAoZHN0PTQ0NDMpJyBcXFxcXFxuK1xcdCAgICAnMicgfHwgcmV0dXJuIDFcXG4rXFx0b3ZzX2FkZF9mbG93IFxcXCIkdFxcXCIgc2N0cDQgXFxcXFxcbitcXHQgICAgJ2luX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMiksc2N0cChzcmM9NDQ0MyknIFxcXFxcXG4rXFx0ICAgICcxJyB8fCByZXR1cm4gMVxcbitcXG4rXFx0a2lsbCAtVEVSTSBcXFwiJHNlcnZlcl9waWRcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdGk9MFxcbitcXHR3aGlsZSBraWxsIC0wIFxcXCIkc2VydmVyX3BpZFxcXCIgMlxcdTAwM2UvZGV2L251bGwgXFx1MDAyNlxcdTAwMjYgWyBcXFwiJGlcXFwiIC1sdCA1IF07IGRvXFxuK1xcdCAgICBzbGVlcCAwLjJcXG4rXFx0ICAgIGk9JCgoaSArIDEpKVxcbitcXHRkb25lXFxuK1xcdG92c19uZXRuc19zcGF3bl9kYWVtb24gXFxcIiR0XFxcIiBcXFwic2VydmVyXFxcIiBcXFxcXFxuK1xcdCAgICBzb2NhdCAtdSBTQ1RQNC1MSVNURU46NDQ0MyBTVERPVVRcXG4rXFx0c2VydmVyX3BpZD1cXFwiJHBpZFxcXCJcXG4rXFx0b3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA0NDQzIHx8IHJldHVybiAxXFxuK1xcbitcXHRvdnNfc2J4IFxcXCIkdFxcXCIgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcXFxcbitcXHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFxcXCJTQ1RQNC1DT05ORUNUOiR7c3J2X2lwfTo0NDQzXFxcIiBcXHUwMDNjL2Rldi9udWxsIFxcXFxcXG4rXFx0ICAgIHx8IHJldHVybiAxXFxuK1xcbitcXHRyZXR1cm4gMFxcbit9XFxuK1xcbiAjIHBzYW1wbGUgdGVzdFxcbiAjIC0gdXNlIHBzYW1wbGUgdG8gb2JzZXJ2ZSBwYWNrZXRzXFxuIHRlc3RfcHNhbXBsZSgpIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL292cy1kcGN0bC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vdnMtZHBjdGwucHlcXG5pbmRleCBmM2VkZDE5ODIyM2YxNy4uNjMzYWYxMGQ3ZThhYjIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL292cy1kcGN0bC5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vdnMtZHBjdGwucHlcXG5AQCAtMTUsNiArMTUsNyBAQCBpbXBvcnQgc3RydWN0XFxuIGltcG9ydCBzeXNcXG4gaW1wb3J0IHRpbWVcXG4gaW1wb3J0IHR5cGVzXFxuK2ltcG9ydCB1bml0dGVzdFxcbiBpbXBvcnQgdXVpZFxcbiBcXG4gdHJ5OlxcbkBAIC0xOTg0LDYgKzE5ODUsMTEgQEAgY2xhc3Mgb3Zza2V5KG5sYSk6XFxuICAgICAgICAgICAgICAgICBcXFwidWRwXFxcIixcXG4gICAgICAgICAgICAgICAgIG92c2tleS5vdnNfa2V5X3VkcCxcXG4gICAgICAgICAgICAgKSxcXG4rICAgICAgICAgICAgKFxcbisgICAgICAgICAgICAgICAgXFxcIk9WU19LRVlfQVRUUl9TQ1RQXFxcIixcXG4rICAgICAgICAgICAgICAgIFxcXCJzY3RwXFxcIixcXG4rICAgICAgICAgICAgICAgIG92c2tleS5vdnNfa2V5X3NjdHAsXFxuKyAgICAgICAgICAgICksXFxuICAgICAgICAgICAgIChcXG4gICAgICAgICAgICAgICAgIFxcXCJPVlNfS0VZX0FUVFJfSUNNUFxcXCIsXFxuICAgICAgICAgICAgICAgICBcXFwiaWNtcFxcXCIsXFxuQEAgLTMxNjUsNSArMzE3MSwxMjggQEAgZGVmIG1haW4oYXJndik6XFxuICAgICByZXR1cm4gMFxcbiBcXG4gXFxuK2RlZiBfaW5pdF9vdnNrZXlfbmxhcygpOlxcbisgICAgXFxcIlxcXCJcXFwiSW5pdGlhbGl6ZSByZXF1aXJlZCBOTEEgY2xhc3NlcyBmb3Igb3Zza2V5IHBhcnNpbmcuXFxcIlxcXCJcXFwiXFxuKyAgICBubG1zZ19hdG9tcy5lbmNhcF9vdnNrZXkgPSBlbmNhcF9vdnNrZXlcXG4rICAgIG5sbXNnX2F0b21zLm92c2tleSA9IG92c2tleVxcbisgICAgbmxtc2dfYXRvbXMub3ZzYWN0aW9ucyA9IG92c2FjdGlvbnNcXG4rXFxuK1xcbitkZWYgX3BhcnNlX2Zsb3coZmxvd3N0cik6XFxuKyAgICBcXFwiXFxcIlxcXCJQYXJzZSBhIGZsb3cgc3RyaW5nIGFuZCByZXR1cm4gdGhlIGtleS5cXFwiXFxcIlxcXCJcXG4rICAgIGtleSA9IG92c2tleSgpXFxuKyAgICBrZXlbXFxcImF0dHJzXFxcIl0gPSBbXVxcbisgICAga2V5LnBhcnNlKGZsb3dzdHIpXFxuKyAgICByZXR1cm4ga2V5XFxuK1xcbitcXG4rZGVmIF9maW5kX2F0dHIoa2V5LCBhdHRyX25hbWUpOlxcbisgICAgXFxcIlxcXCJcXFwiRmluZCBhbiBhdHRyaWJ1dGUgaW4gcGFyc2VkIGtleS5cXFwiXFxcIlxcXCJcXG4rICAgIGZvciBhdHRyIGluIGtleVtcXFwiYXR0cnNcXFwiXTpcXG4rICAgICAgICBpZiBhdHRyWzBdID09IGF0dHJfbmFtZTpcXG4rICAgICAgICAgICAgcmV0dXJuIGF0dHJbMV1cXG4rICAgIHJldHVybiBOb25lXFxuK1xcbitcXG4rY2xhc3MgVGVzdE92c0tleVBhcnNlKHVuaXR0ZXN0LlRlc3RDYXNlKTpcXG4rICAgIFxcXCJcXFwiXFxcIlVuaXQgdGVzdHMgZm9yIG92c2tleS5wYXJzZSgpIGZsb3cgc3RyaW5nIHBhcnNpbmcuXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgQGNsYXNzbWV0aG9kXFxuKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOlxcbisgICAgICAgIF9pbml0X292c2tleV9ubGFzKClcXG4rXFxuKyAgICBkZWYgdGVzdF9zY3RwX2RzdChzZWxmKTpcXG4rICAgICAgICBcXFwiXFxcIlxcXCJUZXN0IFNDVFAgZGVzdGluYXRpb24gcG9ydCBwYXJzaW5nLlxcXCJcXFwiXFxcIlxcbisgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFxcXCJzY3RwKGRzdD00NDQzKVxcXCIpXFxuKyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5LCBcXFwiT1ZTX0tFWV9BVFRSX1NDVFBcXFwiKVxcbisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGF0dHIsIFxcXCJTQ1RQIGtleSBub3QgZm91bmRcXFwiKVxcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcXFwiZHN0XFxcIl0sIDQ0NDMpXFxuK1xcbisgICAgZGVmIHRlc3Rfc2N0cF9zcmMoc2VsZik6XFxuKyAgICAgICAgXFxcIlxcXCJcXFwiVGVzdCBTQ1RQIHNvdXJjZSBwb3J0IHBhcnNpbmcuXFxcIlxcXCJcXFwiXFxuKyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coXFxcInNjdHAoc3JjPTQ0NDMpXFxcIilcXG4rICAgICAgICBhdHRyID0gX2ZpbmRfYXR0cihrZXksIFxcXCJPVlNfS0VZX0FUVFJfU0NUUFxcXCIpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXFxcIlNDVFAga2V5IG5vdCBmb3VuZFxcXCIpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyW1xcXCJzcmNcXFwiXSwgNDQ0MylcXG4rXFxuKyAgICBkZWYgdGVzdF9zY3RwX3NyY19hbmRfZHN0KHNlbGYpOlxcbisgICAgICAgIFxcXCJcXFwiXFxcIlRlc3QgU0NUUCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHBvcnQgcGFyc2luZy5cXFwiXFxcIlxcXCJcXG4rICAgICAgICBrZXkgPSBfcGFyc2VfZmxvdyhcXFwic2N0cChzcmM9MTIzNCxkc3Q9NTY3OClcXFwiKVxcbisgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXFxcIk9WU19LRVlfQVRUUl9TQ1RQXFxcIilcXG4rICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCBcXFwiU0NUUCBrZXkgbm90IGZvdW5kXFxcIilcXG4rICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJbXFxcInNyY1xcXCJdLCAxMjM0KVxcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcXFwiZHN0XFxcIl0sIDU2NzgpXFxuK1xcbisgICAgZGVmIHRlc3RfdGNwX2RzdChzZWxmKTpcXG4rICAgICAgICBcXFwiXFxcIlxcXCJUZXN0IFRDUCBkZXN0aW5hdGlvbiBwb3J0IHBhcnNpbmcuXFxcIlxcXCJcXFwiXFxuKyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coXFxcInRjcChkc3Q9ODApXFxcIilcXG4rICAgICAgICBhdHRyID0gX2ZpbmRfYXR0cihrZXksIFxcXCJPVlNfS0VZX0FUVFJfVENQXFxcIilcXG4rICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCBcXFwiVENQIGtleSBub3QgZm91bmRcXFwiKVxcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcXFwiZHN0XFxcIl0sIDgwKVxcbitcXG4rICAgIGRlZiB0ZXN0X3VkcF9kc3Qoc2VsZik6XFxuKyAgICAgICAgXFxcIlxcXCJcXFwiVGVzdCBVRFAgZGVzdGluYXRpb24gcG9ydCBwYXJzaW5nLlxcXCJcXFwiXFxcIlxcbisgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFxcXCJ1ZHAoZHN0PTUzKVxcXCIpXFxuKyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5LCBcXFwiT1ZTX0tFWV9BVFRSX1VEUFxcXCIpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXFxcIlVEUCBrZXkgbm90IGZvdW5kXFxcIilcXG4rICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJbXFxcImRzdFxcXCJdLCA1MylcXG4rXFxuKyAgICBkZWYgdGVzdF9pY21wX3R5cGVfY29kZShzZWxmKTpcXG4rICAgICAgICBcXFwiXFxcIlxcXCJUZXN0IElDTVAgdHlwZSBhbmQgY29kZSBwYXJzaW5nLlxcXCJcXFwiXFxcIlxcbisgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFxcXCJpY21wKHR5cGU9OCxjb2RlPTApXFxcIilcXG4rICAgICAgICBhdHRyID0gX2ZpbmRfYXR0cihrZXksIFxcXCJPVlNfS0VZX0FUVFJfSUNNUFxcXCIpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXFxcIklDTVAga2V5IG5vdCBmb3VuZFxcXCIpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyW1xcXCJ0eXBlXFxcIl0sIDgpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyW1xcXCJjb2RlXFxcIl0sIDApXFxuK1xcbisgICAgZGVmIHRlc3RfaXB2NF9wcm90byhzZWxmKTpcXG4rICAgICAgICBcXFwiXFxcIlxcXCJUZXN0IElQdjQgcHJvdG9jb2wgcGFyc2luZy5cXFwiXFxcIlxcXCJcXG4rICAgICAgICBrZXkgPSBfcGFyc2VfZmxvdyhcXFwiZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMilcXFwiKVxcbisgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXFxcIk9WU19LRVlfQVRUUl9JUFY0XFxcIilcXG4rICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCBcXFwiSVB2NCBrZXkgbm90IGZvdW5kXFxcIilcXG4rICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJbXFxcInByb3RvXFxcIl0sIDEzMilcXG4rXFxuKyAgICBkZWYgdGVzdF9ldGhfdHlwZShzZWxmKTpcXG4rICAgICAgICBcXFwiXFxcIlxcXCJUZXN0IEV0aGVybmV0IHR5cGUgcGFyc2luZy5cXFwiXFxcIlxcXCJcXG4rICAgICAgICBrZXkgPSBfcGFyc2VfZmxvdyhcXFwiZXRoX3R5cGUoMHgwODAwKVxcXCIpXFxuKyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5LCBcXFwiT1ZTX0tFWV9BVFRSX0VUSEVSVFlQRVxcXCIpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXFxcIkV0aFR5cGUga2V5IG5vdCBmb3VuZFxcXCIpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyLCAweDA4MDApXFxuK1xcbisgICAgZGVmIHRlc3RfZnVsbF9zY3RwX2Zsb3coc2VsZik6XFxuKyAgICAgICAgXFxcIlxcXCJcXFwiVGVzdCBjb21wbGV0ZSBTQ1RQIGZsb3cgc3RyaW5nIHBhcnNpbmcuXFxcIlxcXCJcXFwiXFxuKyAgICAgICAgZmxvd3N0ciA9IChcXG4rICAgICAgICAgICAgXFxcImluX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxcXFwiXFxuKyAgICAgICAgICAgIFxcXCJpcHY0KHByb3RvPTEzMiksc2N0cChkc3Q9NDQ0MylcXFwiXFxuKyAgICAgICAgKVxcbisgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KGZsb3dzdHIpXFxuKyAgICAgICAgaW5fcG9ydCA9IF9maW5kX2F0dHIoa2V5LCBcXFwiT1ZTX0tFWV9BVFRSX0lOX1BPUlRcXFwiKVxcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5fcG9ydCwgMSlcXG4rICAgICAgICBzY3RwID0gX2ZpbmRfYXR0cihrZXksIFxcXCJPVlNfS0VZX0FUVFJfU0NUUFxcXCIpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoc2N0cCwgXFxcIlNDVFAga2V5IG5vdCBmb3VuZFxcXCIpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY3RwW1xcXCJkc3RcXFwiXSwgNDQ0MylcXG4rXFxuKyAgICBkZWYgdGVzdF9zY3RwX3JvdW5kdHJpcChzZWxmKTpcXG4rICAgICAgICBcXFwiXFxcIlxcXCJUZXN0IHBhcnNlIC1cXHUwMDNlIGRwc3RyIC1cXHUwMDNlIHBhcnNlIGtlZXBzIHRoZSBTQ1RQIGtleS5cXFwiXFxcIlxcXCJcXG4rICAgICAgICBrZXkgPSBfcGFyc2VfZmxvdyhcXFwic2N0cChkc3Q9NDQ0MylcXFwiKVxcbisgICAgICAgIGtleTIgPSBvdnNrZXkoKVxcbisgICAgICAgIGtleTJbXFxcImF0dHJzXFxcIl0gPSBbXVxcbisgICAgICAgIHJlbWFpbmRlciA9IGtleTIucGFyc2Uoa2V5LmRwc3RyKCkpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZW1haW5kZXIsIFxcXCJcXFwiLCBcXFwicm91bmQtdHJpcCBsZWZ0IHVucGFyc2VkIHRleHRcXFwiKVxcbisgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleTIsIFxcXCJPVlNfS0VZX0FUVFJfU0NUUFxcXCIpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXFxcIlNDVFAga2V5IGxvc3QgaW4gcm91bmQtdHJpcFxcXCIpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyW1xcXCJkc3RcXFwiXSwgNDQ0MylcXG4rXFxuK1xcbitkZWYgdGVzdF9vdnNrZXlfcGFyc2UoKTpcXG4rICAgIFxcXCJcXFwiXFxcIlRlc3Qgb3Zza2V5LnBhcnNlKCkgbWV0aG9kIGZvciB2YXJpb3VzIGZsb3cga2V5IHR5cGVzLlxcXCJcXFwiXFxcIlxcbisgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkubG9hZFRlc3RzRnJvbVRlc3RDYXNlKFRlc3RPdnNLZXlQYXJzZSlcXG4rICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHZlcmJvc2l0eT0yKVxcbisgICAgcmVzdWx0ID0gcnVubmVyLnJ1bihzdWl0ZSlcXG4rICAgIHJldHVybiAwIGlmIHJlc3VsdC53YXNTdWNjZXNzZnVsKCkgZWxzZSAxXFxuK1xcbitcXG4gaWYgX19uYW1lX18gPT0gXFxcIl9fbWFpbl9fXFxcIjpcXG4rICAgIGlmIGxlbihzeXMuYXJndikgXFx1MDAzZSAxIGFuZCBzeXMuYXJndlsxXSA9PSBcXFwiLS10ZXN0XFxcIjpcXG4rICAgICAgICBzeXMuZXhpdCh0ZXN0X292c2tleV9wYXJzZSgpKVxcbiAgICAgc3lzLmV4aXQobWFpbihzeXMuYXJndikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIxOjM4OjIyLjcwMTc1OTY5NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU3MDE0MDk1MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvKikgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzc5YWQ4YjA2MTg5MmU0ODIzNDA5M2Y3ZDZiMmE5Yjg3ZTg2N2EyYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDIxOjM4OjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoXG5pbmRleCA4NTNkYmMxYjAwZDdhYi4uYjQ0ODMyNDUyN2Q4YjAgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaFxuQEAgLTM0LDYgKzM0LDcgQEAgdGVzdHM9XCJcbiBcdGFjdGlvbl9zZXRcdFx0XHRcdHNldDogU0VUIGFjdGlvbiByZXdyaXRlcyBmaWVsZHNcbiBcdHRydW5jXHRcdFx0XHRcdHRydW5jOiBvdXRwdXQgdHJ1bmNhdGlvblxuIFx0aWNtcHY2XHRcdFx0XHRcdGljbXB2NjogSUNNUHY2IGVjaG8gdHlwZSBtYXRjaFxuK1x0c2N0cF9jb25uZWN0X3Y0XHRcdFx0XHRzY3RwOiBTQ1RQIGZsb3cga2V5IG1hdGNoaW5nXG4gXHRwc2FtcGxlXHRcdFx0XHRcdHBzYW1wbGU6IFNhbXBsaW5nIHBhY2tldHMgd2l0aCBwc2FtcGxlXCJcbiBcbiBpbmZvKCkge1xuQEAgLTYxMSw2ICs2MTIsMTI2IEBAIHRlc3RfaWNtcHY2KCkge1xuIFx0cmV0dXJuIDBcbiB9XG4gXG4rIyBDaGVjayBmb3IgYW4gU0NUUCBlbmRwb2ludCB2aWEgL3Byb2MsIHdoaWNoIHdvcmtzIHdpdGhvdXQgc2N0cF9kaWFnLlxuK3NjdHBfZXBzX2hhcygpIHtcbitcdGlwIG5ldG5zIGV4ZWMgXCIkMVwiIGF3ayAtdiBwPVwiJDJcIiAnJDY9PXAnIC9wcm9jL25ldC9zY3RwL2VwcyB8IGdyZXAgLXEgLlxuK31cbitcbisjIHNjdHBfY29ubmVjdF92NCB0ZXN0XG4rIyAtIHNjdHAoZHN0PTQ0NDMpIG1hdGNoZXMgY2xpZW50LXRvLXNlcnZlciBJTklUXG4rIyAtIHNjdHAoc3JjPTQ0NDMpIG1hdGNoZXMgc2VydmVyLXRvLWNsaWVudCBJTklULUFDS1xuKyMgLSByZW1vdmUgZmxvd3MgYW5kIHZlcmlmeSBjb25uZWN0aW9uIGZhaWxzLCByZWluc3RhbGwgYW5kIHJlY292ZXJcbit0ZXN0X3NjdHBfY29ubmVjdF92NCgpIHtcbitcdGxvY2FsIHQ9XCJ0ZXN0X3NjdHBfY29ubmVjdF92NFwiXG4rXHRsb2NhbCBzcnZfaXA9MTcyLjMxLjExMC4yMFxuK1xuK1x0bW9kcHJvYmUgLXEgc2N0cCAyXHUwMDNlL2Rldi9udWxsIHx8IHJldHVybiBcIiRrc2Z0X3NraXBcIlxuK1x0c29jYXQgLVYgMlx1MDAzZVx1MDAyNjEgfCBncmVwIC1xIFwiZGVmaW5lIFdJVEhfU0NUUFwiIHx8IHJldHVybiBcIiRrc2Z0X3NraXBcIlxuK1xuK1x0c2J4X2FkZCBcIiR0XCIgfHwgcmV0dXJuICQ/XG4rXHRvdnNfYWRkX2RwIFwiJHRcIiBzY3RwNCB8fCByZXR1cm4gMVxuK1xuK1x0aW5mbyBcImNyZWF0ZSBuYW1lc3BhY2VzXCJcbitcdGZvciBucyBpbiBjbGllbnQgc2VydmVyOyBkb1xuK1x0XHRvdnNfYWRkX25ldG5zX2FuZF92ZXRocyBcIiR0XCIgXCJzY3RwNFwiIFwiJG5zXCIgXFxcbitcdFx0ICAgIFwiJHtuczowOjF9MFwiIFwiJHtuczowOjF9MVwiIHx8IHJldHVybiAxXG4rXHRkb25lXG4rXG4rXHRpcCBuZXRucyBleGVjIGNsaWVudCBpcCBhZGRyIGFkZCAxNzIuMzEuMTEwLjEwLzI0IGRldiBjMVxuK1x0aXAgbmV0bnMgZXhlYyBjbGllbnQgaXAgbGluayBzZXQgYzEgdXBcbitcdGlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGFkZHIgYWRkIFwiJHtzcnZfaXB9LzI0XCIgZGV2IHMxXG4rXHRpcCBuZXRucyBleGVjIHNlcnZlciBpcCBsaW5rIHNldCBzMSB1cFxuK1xuK1x0IyBQcm9iZTogY2hlY2sgaWYga2VybmVsIHN1cHBvcnRzIHNjdHAgZmxvdyBrZXkuXG4rXHRvdnNfYWRkX2Zsb3cgXCIkdFwiIHNjdHA0IFxcXG4rXHQgICAgJ2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMiksc2N0cChkc3Q9NDQ0MyknIFxcXG4rXHQgICAgJzInIFx1MDAyNlx1MDAzZS9kZXYvbnVsbFxuK1x0aWYgWyAkPyAtbmUgMCBdOyB0aGVuXG4rXHRcdGluZm8gXCJubyBzdXBwb3J0IGZvciBzY3RwIGtleSAtIHNraXBwaW5nXCJcbitcdFx0b3ZzX2V4aXRfc2lnXG4rXHRcdHJldHVybiAka3NmdF9za2lwXG4rXHRmaVxuK1x0b3ZzX2RlbF9mbG93cyBcIiR0XCIgc2N0cDRcbitcbitcdCMgQVJQIGZvcndhcmRpbmdcbitcdG92c19hZGRfZmxvdyBcIiR0XCIgc2N0cDQgXFxcbitcdCAgICAnaW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJyBcXFxuK1x0ICAgICcyJyB8fCByZXR1cm4gMVxuK1x0b3ZzX2FkZF9mbG93IFwiJHRcIiBzY3RwNCBcXFxuK1x0ICAgICdpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwNiksYXJwKCknIFxcXG4rXHQgICAgJzEnIHx8IHJldHVybiAxXG4rXG4rXHQjIFNDVFAgcG9ydCBtYXRjaGluZzogZHN0IGZvciByZXF1ZXN0LCBzcmMgZm9yIHJlcGx5XG4rXHRvdnNfYWRkX2Zsb3cgXCIkdFwiIHNjdHA0IFxcXG4rXHQgICAgJ2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMiksc2N0cChkc3Q9NDQ0MyknIFxcXG4rXHQgICAgJzInIHx8IHJldHVybiAxXG4rXHRvdnNfYWRkX2Zsb3cgXCIkdFwiIHNjdHA0IFxcXG4rXHQgICAgJ2luX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMiksc2N0cChzcmM9NDQ0MyknIFxcXG4rXHQgICAgJzEnIHx8IHJldHVybiAxXG4rXG4rXHRvdnNfbmV0bnNfc3Bhd25fZGFlbW9uIFwiJHRcIiBcInNlcnZlclwiIFxcXG4rXHQgICAgc29jYXQgLXUgU0NUUDQtTElTVEVOOjQ0NDMgU1RET1VUXG4rXHRsb2NhbCBzZXJ2ZXJfcGlkPVwiJHBpZFwiXG4rXHRvdnNfd2FpdCBzY3RwX2Vwc19oYXMgc2VydmVyIDQ0NDMgfHwgcmV0dXJuIDFcbitcbitcdGluZm8gXCJ2ZXJpZnkgU0NUUCBhc3NvY2lhdGlvbiB3aXRoIHBvcnQta2V5ZWQgZmxvd3NcIlxuK1x0b3ZzX3NieCBcIiR0XCIgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcbitcdCAgICB0aW1lb3V0IDMgc29jYXQgLXUgU1RESU4gXCJTQ1RQNC1DT05ORUNUOiR7c3J2X2lwfTo0NDQzXCIgXHUwMDNjL2Rldi9udWxsIFxcXG4rXHQgICAgfHwgcmV0dXJuIDFcbitcbitcdG92c19kZWxfZmxvd3MgXCIkdFwiIHNjdHA0XG4rXG4rXHRpbmZvIFwidmVyaWZ5IGNvbm5lY3Rpb24gZmFpbHMgd2l0aG91dCBmbG93c1wiXG4rXHRvdnNfYWRkX2Zsb3cgXCIkdFwiIHNjdHA0IFxcXG4rXHQgICAgJ2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODA2KSxhcnAoKScgXFxcbitcdCAgICAnMicgfHwgcmV0dXJuIDFcbitcdG92c19hZGRfZmxvdyBcIiR0XCIgc2N0cDQgXFxcbitcdCAgICAnaW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJyBcXFxuK1x0ICAgICcxJyB8fCByZXR1cm4gMVxuK1xuK1x0a2lsbCAtVEVSTSBcIiRzZXJ2ZXJfcGlkXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0bG9jYWwgaT0wXG4rXHR3aGlsZSBraWxsIC0wIFwiJHNlcnZlcl9waWRcIiAyXHUwMDNlL2Rldi9udWxsIFx1MDAyNlx1MDAyNiBbIFwiJGlcIiAtbHQgNSBdOyBkb1xuK1x0ICAgIHNsZWVwIDAuMlxuK1x0ICAgIGk9JCgoaSArIDEpKVxuK1x0ZG9uZVxuK1x0b3ZzX25ldG5zX3NwYXduX2RhZW1vbiBcIiR0XCIgXCJzZXJ2ZXJcIiBcXFxuK1x0ICAgIHNvY2F0IC11IFNDVFA0LUxJU1RFTjo0NDQzIFNURE9VVFxuK1x0c2VydmVyX3BpZD1cIiRwaWRcIlxuK1x0b3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA0NDQzIHx8IHJldHVybiAxXG4rXG4rXHRvdnNfc2J4IFwiJHRcIiBpcCBuZXRucyBleGVjIGNsaWVudCBcXFxuK1x0ICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiBcIlNDVFA0LUNPTk5FQ1Q6JHtzcnZfaXB9OjQ0NDNcIiBcdTAwM2MvZGV2L251bGwgXFxcbitcdCAgICBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgXFxcbitcdCAgICBcdTAwMjZcdTAwMjYgeyBpbmZvIFwiY29ubmVjdGlvbiBzaG91bGQgZmFpbCB3aXRob3V0IGZsb3dzXCJcbitcdCAgICAgICAgIHJldHVybiAxOyB9XG4rXG4rXHRpbmZvIFwicmVpbnN0YWxsIGZsb3dzIGFuZCB2ZXJpZnkgcmVjb3ZlcnlcIlxuK1x0b3ZzX2FkZF9mbG93IFwiJHRcIiBzY3RwNCBcXFxuK1x0ICAgICdpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4MDgwMCksaXB2NChwcm90bz0xMzIpLHNjdHAoZHN0PTQ0NDMpJyBcXFxuK1x0ICAgICcyJyB8fCByZXR1cm4gMVxuK1x0b3ZzX2FkZF9mbG93IFwiJHRcIiBzY3RwNCBcXFxuK1x0ICAgICdpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwMCksaXB2NChwcm90bz0xMzIpLHNjdHAoc3JjPTQ0NDMpJyBcXFxuK1x0ICAgICcxJyB8fCByZXR1cm4gMVxuK1xuK1x0a2lsbCAtVEVSTSBcIiRzZXJ2ZXJfcGlkXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0aT0wXG4rXHR3aGlsZSBraWxsIC0wIFwiJHNlcnZlcl9waWRcIiAyXHUwMDNlL2Rldi9udWxsIFx1MDAyNlx1MDAyNiBbIFwiJGlcIiAtbHQgNSBdOyBkb1xuK1x0ICAgIHNsZWVwIDAuMlxuK1x0ICAgIGk9JCgoaSArIDEpKVxuK1x0ZG9uZVxuK1x0b3ZzX25ldG5zX3NwYXduX2RhZW1vbiBcIiR0XCIgXCJzZXJ2ZXJcIiBcXFxuK1x0ICAgIHNvY2F0IC11IFNDVFA0LUxJU1RFTjo0NDQzIFNURE9VVFxuK1x0c2VydmVyX3BpZD1cIiRwaWRcIlxuK1x0b3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA0NDQzIHx8IHJldHVybiAxXG4rXG4rXHRvdnNfc2J4IFwiJHRcIiBpcCBuZXRucyBleGVjIGNsaWVudCBcXFxuK1x0ICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiBcIlNDVFA0LUNPTk5FQ1Q6JHtzcnZfaXB9OjQ0NDNcIiBcdTAwM2MvZGV2L251bGwgXFxcbitcdCAgICB8fCByZXR1cm4gMVxuK1xuK1x0cmV0dXJuIDBcbit9XG4rXG4gIyBwc2FtcGxlIHRlc3RcbiAjIC0gdXNlIHBzYW1wbGUgdG8gb2JzZXJ2ZSBwYWNrZXRzXG4gdGVzdF9wc2FtcGxlKCkge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vdnMtZHBjdGwucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3ZzLWRwY3RsLnB5XG5pbmRleCBmM2VkZDE5ODIyM2YxNy4uNjMzYWYxMGQ3ZThhYjIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3ZzLWRwY3RsLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3ZzLWRwY3RsLnB5XG5AQCAtMTUsNiArMTUsNyBAQCBpbXBvcnQgc3RydWN0XG4gaW1wb3J0IHN5c1xuIGltcG9ydCB0aW1lXG4gaW1wb3J0IHR5cGVzXG4raW1wb3J0IHVuaXR0ZXN0XG4gaW1wb3J0IHV1aWRcbiBcbiB0cnk6XG5AQCAtMTk4NCw2ICsxOTg1LDExIEBAIGNsYXNzIG92c2tleShubGEpOlxuICAgICAgICAgICAgICAgICBcInVkcFwiLFxuICAgICAgICAgICAgICAgICBvdnNrZXkub3ZzX2tleV91ZHAsXG4gICAgICAgICAgICAgKSxcbisgICAgICAgICAgICAoXG4rICAgICAgICAgICAgICAgIFwiT1ZTX0tFWV9BVFRSX1NDVFBcIixcbisgICAgICAgICAgICAgICAgXCJzY3RwXCIsXG4rICAgICAgICAgICAgICAgIG92c2tleS5vdnNfa2V5X3NjdHAsXG4rICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgIFwiT1ZTX0tFWV9BVFRSX0lDTVBcIixcbiAgICAgICAgICAgICAgICAgXCJpY21wXCIsXG5AQCAtMzE2NSw1ICszMTcxLDEyOCBAQCBkZWYgbWFpbihhcmd2KTpcbiAgICAgcmV0dXJuIDBcbiBcbiBcbitkZWYgX2luaXRfb3Zza2V5X25sYXMoKTpcbisgICAgXCJcIlwiSW5pdGlhbGl6ZSByZXF1aXJlZCBOTEEgY2xhc3NlcyBmb3Igb3Zza2V5IHBhcnNpbmcuXCJcIlwiXG4rICAgIG5sbXNnX2F0b21zLmVuY2FwX292c2tleSA9IGVuY2FwX292c2tleVxuKyAgICBubG1zZ19hdG9tcy5vdnNrZXkgPSBvdnNrZXlcbisgICAgbmxtc2dfYXRvbXMub3ZzYWN0aW9ucyA9IG92c2FjdGlvbnNcbitcbitcbitkZWYgX3BhcnNlX2Zsb3coZmxvd3N0cik6XG4rICAgIFwiXCJcIlBhcnNlIGEgZmxvdyBzdHJpbmcgYW5kIHJldHVybiB0aGUga2V5LlwiXCJcIlxuKyAgICBrZXkgPSBvdnNrZXkoKVxuKyAgICBrZXlbXCJhdHRyc1wiXSA9IFtdXG4rICAgIGtleS5wYXJzZShmbG93c3RyKVxuKyAgICByZXR1cm4ga2V5XG4rXG4rXG4rZGVmIF9maW5kX2F0dHIoa2V5LCBhdHRyX25hbWUpOlxuKyAgICBcIlwiXCJGaW5kIGFuIGF0dHJpYnV0ZSBpbiBwYXJzZWQga2V5LlwiXCJcIlxuKyAgICBmb3IgYXR0ciBpbiBrZXlbXCJhdHRyc1wiXTpcbisgICAgICAgIGlmIGF0dHJbMF0gPT0gYXR0cl9uYW1lOlxuKyAgICAgICAgICAgIHJldHVybiBhdHRyWzFdXG4rICAgIHJldHVybiBOb25lXG4rXG4rXG4rY2xhc3MgVGVzdE92c0tleVBhcnNlKHVuaXR0ZXN0LlRlc3RDYXNlKTpcbisgICAgXCJcIlwiVW5pdCB0ZXN0cyBmb3Igb3Zza2V5LnBhcnNlKCkgZmxvdyBzdHJpbmcgcGFyc2luZy5cIlwiXCJcbitcbisgICAgQGNsYXNzbWV0aG9kXG4rICAgIGRlZiBzZXRVcENsYXNzKGNscyk6XG4rICAgICAgICBfaW5pdF9vdnNrZXlfbmxhcygpXG4rXG4rICAgIGRlZiB0ZXN0X3NjdHBfZHN0KHNlbGYpOlxuKyAgICAgICAgXCJcIlwiVGVzdCBTQ1RQIGRlc3RpbmF0aW9uIHBvcnQgcGFyc2luZy5cIlwiXCJcbisgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFwic2N0cChkc3Q9NDQ0MylcIilcbisgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXCJPVlNfS0VZX0FUVFJfU0NUUFwiKVxuKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXCJTQ1RQIGtleSBub3QgZm91bmRcIilcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcImRzdFwiXSwgNDQ0MylcbitcbisgICAgZGVmIHRlc3Rfc2N0cF9zcmMoc2VsZik6XG4rICAgICAgICBcIlwiXCJUZXN0IFNDVFAgc291cmNlIHBvcnQgcGFyc2luZy5cIlwiXCJcbisgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFwic2N0cChzcmM9NDQ0MylcIilcbisgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXCJPVlNfS0VZX0FUVFJfU0NUUFwiKVxuKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXCJTQ1RQIGtleSBub3QgZm91bmRcIilcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcInNyY1wiXSwgNDQ0MylcbitcbisgICAgZGVmIHRlc3Rfc2N0cF9zcmNfYW5kX2RzdChzZWxmKTpcbisgICAgICAgIFwiXCJcIlRlc3QgU0NUUCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHBvcnQgcGFyc2luZy5cIlwiXCJcbisgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFwic2N0cChzcmM9MTIzNCxkc3Q9NTY3OClcIilcbisgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXCJPVlNfS0VZX0FUVFJfU0NUUFwiKVxuKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXCJTQ1RQIGtleSBub3QgZm91bmRcIilcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcInNyY1wiXSwgMTIzNClcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcImRzdFwiXSwgNTY3OClcbitcbisgICAgZGVmIHRlc3RfdGNwX2RzdChzZWxmKTpcbisgICAgICAgIFwiXCJcIlRlc3QgVENQIGRlc3RpbmF0aW9uIHBvcnQgcGFyc2luZy5cIlwiXCJcbisgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFwidGNwKGRzdD04MClcIilcbisgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXCJPVlNfS0VZX0FUVFJfVENQXCIpXG4rICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCBcIlRDUCBrZXkgbm90IGZvdW5kXCIpXG4rICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJbXCJkc3RcIl0sIDgwKVxuK1xuKyAgICBkZWYgdGVzdF91ZHBfZHN0KHNlbGYpOlxuKyAgICAgICAgXCJcIlwiVGVzdCBVRFAgZGVzdGluYXRpb24gcG9ydCBwYXJzaW5nLlwiXCJcIlxuKyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coXCJ1ZHAoZHN0PTUzKVwiKVxuKyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5LCBcIk9WU19LRVlfQVRUUl9VRFBcIilcbisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGF0dHIsIFwiVURQIGtleSBub3QgZm91bmRcIilcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcImRzdFwiXSwgNTMpXG4rXG4rICAgIGRlZiB0ZXN0X2ljbXBfdHlwZV9jb2RlKHNlbGYpOlxuKyAgICAgICAgXCJcIlwiVGVzdCBJQ01QIHR5cGUgYW5kIGNvZGUgcGFyc2luZy5cIlwiXCJcbisgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFwiaWNtcCh0eXBlPTgsY29kZT0wKVwiKVxuKyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5LCBcIk9WU19LRVlfQVRUUl9JQ01QXCIpXG4rICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCBcIklDTVAga2V5IG5vdCBmb3VuZFwiKVxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyW1widHlwZVwiXSwgOClcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcImNvZGVcIl0sIDApXG4rXG4rICAgIGRlZiB0ZXN0X2lwdjRfcHJvdG8oc2VsZik6XG4rICAgICAgICBcIlwiXCJUZXN0IElQdjQgcHJvdG9jb2wgcGFyc2luZy5cIlwiXCJcbisgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFwiZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMilcIilcbisgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXCJPVlNfS0VZX0FUVFJfSVBWNFwiKVxuKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXCJJUHY0IGtleSBub3QgZm91bmRcIilcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcInByb3RvXCJdLCAxMzIpXG4rXG4rICAgIGRlZiB0ZXN0X2V0aF90eXBlKHNlbGYpOlxuKyAgICAgICAgXCJcIlwiVGVzdCBFdGhlcm5ldCB0eXBlIHBhcnNpbmcuXCJcIlwiXG4rICAgICAgICBrZXkgPSBfcGFyc2VfZmxvdyhcImV0aF90eXBlKDB4MDgwMClcIilcbisgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXCJPVlNfS0VZX0FUVFJfRVRIRVJUWVBFXCIpXG4rICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCBcIkV0aFR5cGUga2V5IG5vdCBmb3VuZFwiKVxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyLCAweDA4MDApXG4rXG4rICAgIGRlZiB0ZXN0X2Z1bGxfc2N0cF9mbG93KHNlbGYpOlxuKyAgICAgICAgXCJcIlwiVGVzdCBjb21wbGV0ZSBTQ1RQIGZsb3cgc3RyaW5nIHBhcnNpbmcuXCJcIlwiXG4rICAgICAgICBmbG93c3RyID0gKFxuKyAgICAgICAgICAgIFwiaW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLFwiXG4rICAgICAgICAgICAgXCJpcHY0KHByb3RvPTEzMiksc2N0cChkc3Q9NDQ0MylcIlxuKyAgICAgICAgKVxuKyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coZmxvd3N0cilcbisgICAgICAgIGluX3BvcnQgPSBfZmluZF9hdHRyKGtleSwgXCJPVlNfS0VZX0FUVFJfSU5fUE9SVFwiKVxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbl9wb3J0LCAxKVxuKyAgICAgICAgc2N0cCA9IF9maW5kX2F0dHIoa2V5LCBcIk9WU19LRVlfQVRUUl9TQ1RQXCIpXG4rICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShzY3RwLCBcIlNDVFAga2V5IG5vdCBmb3VuZFwiKVxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY3RwW1wiZHN0XCJdLCA0NDQzKVxuK1xuKyAgICBkZWYgdGVzdF9zY3RwX3JvdW5kdHJpcChzZWxmKTpcbisgICAgICAgIFwiXCJcIlRlc3QgcGFyc2UgLVx1MDAzZSBkcHN0ciAtXHUwMDNlIHBhcnNlIGtlZXBzIHRoZSBTQ1RQIGtleS5cIlwiXCJcbisgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFwic2N0cChkc3Q9NDQ0MylcIilcbisgICAgICAgIGtleTIgPSBvdnNrZXkoKVxuKyAgICAgICAga2V5MltcImF0dHJzXCJdID0gW11cbisgICAgICAgIHJlbWFpbmRlciA9IGtleTIucGFyc2Uoa2V5LmRwc3RyKCkpXG4rICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbWFpbmRlciwgXCJcIiwgXCJyb3VuZC10cmlwIGxlZnQgdW5wYXJzZWQgdGV4dFwiKVxuKyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5MiwgXCJPVlNfS0VZX0FUVFJfU0NUUFwiKVxuKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXCJTQ1RQIGtleSBsb3N0IGluIHJvdW5kLXRyaXBcIilcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcImRzdFwiXSwgNDQ0MylcbitcbitcbitkZWYgdGVzdF9vdnNrZXlfcGFyc2UoKTpcbisgICAgXCJcIlwiVGVzdCBvdnNrZXkucGFyc2UoKSBtZXRob2QgZm9yIHZhcmlvdXMgZmxvdyBrZXkgdHlwZXMuXCJcIlwiXG4rICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdExvYWRlcigpLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShUZXN0T3ZzS2V5UGFyc2UpXG4rICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHZlcmJvc2l0eT0yKVxuKyAgICByZXN1bHQgPSBydW5uZXIucnVuKHN1aXRlKVxuKyAgICByZXR1cm4gMCBpZiByZXN1bHQud2FzU3VjY2Vzc2Z1bCgpIGVsc2UgMVxuK1xuK1xuIGlmIF9fbmFtZV9fID09IFwiX19tYWluX19cIjpcbisgICAgaWYgbGVuKHN5cy5hcmd2KSBcdTAwM2UgMSBhbmQgc3lzLmFyZ3ZbMV0gPT0gXCItLXRlc3RcIjpcbisgICAgICAgIHN5cy5leGl0KHRlc3Rfb3Zza2V5X3BhcnNlKCkpXG4gICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3YpKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjE6Mzg6MjIuNzAxNzYwNTIzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcwMTM4OTkzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBc3Nlc3NpbmcgdGhlIE5lZWQgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIGZ1enppbmcgZHVlIHRvIGZ1bmN0aW9uYWwgY2hhbmdlcyB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGZpbGVzIG1vZGlmaWVkIGFyZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vdnMtZHBjdGwucHlgLiBUaGVzZSBhcmUgc2VsZnRlc3RzIGZvciBPcGVuIHZTd2l0Y2guIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhvdWdoOyB0aGVyZSBhcmUgKm5vKiBjaGFuZ2VzIHRvIGFueSBrZXJuZWwgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gYSBkaXJlY3RvcnkgbGlrZSBgbmV0L29wZW52c3dpdGNoL2AuXG5cbkFscmlnaHQsIGEgcXVpY2sgcmV2aWV3IG9mIHRoZSBkaWZmIGNvbmZpcm1zOiBpdCBpcyBpbmRlZWQgbGltaXRlZCB0byB0aG9zZSBzZWxmdGVzdCBmaWxlcy4gU2luY2UgdGhpcyBwYXRjaCAqZXhjbHVzaXZlbHkqIG1vZGlmaWVzIHNlbGZ0ZXN0cywgdGhpcyBtZWFucyBpdCBkb2Vzbid0IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsJ3MgY29yZSBiZWhhdmlvci4gTm8ga2VybmVsLWxldmVsIGNvZGUgaXMgYmVpbmcgYWx0ZXJlZCBoZXJlLiBUaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgY2xlYXI6IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBkaWZmIHRvIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgbm8gb3RoZXIgZmlsZXMgYXJlIGluY2x1ZGVkLiBZZXAsIGp1c3QgdGhlIHR3byBmaWxlczogYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaGAgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3ZzLWRwY3RsLnB5YC4gTm8ga2VybmVsIGNvZGUgaXMgdG91Y2hlZC5cblxuQWxyaWdodCwgSSdtIGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LiBJJ2xsIHJldHVybiBgV29ydGhGdXp6aW5nID0gZmFsc2VgLCBleHBsYWluaW5nIHRoYXQgdGhpcyBwYXRjaCBleGNsdXNpdmVseSBpbnZvbHZlcyBtb2RpZmljYXRpb25zIHRvIHNlbGZ0ZXN0cywgYW5kIHRoZXJlZm9yZSBkb2VzIG5vdCBpbXBhY3QgdGhlIGtlcm5lbCdzIGZ1bmN0aW9uYWxpdHkgaW4gYSBtYW5uZXIgdGhhdCByZXF1aXJlcyBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTMyLCJPdXRwdXRUb2tlbnMiOjY3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjE6Mzg6MjguNDAzMTUyMjI5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoLyopIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvKikgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwjjk8[1] Phase: Running StartedAt: 2026-07-25 21:39:36 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjjk8[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-25 21:39:37 +0000 UTC FinishedAt: 2026-07-25 21:39:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}