Name: series-workflowbhmvr Phase: Failed StartedAt: 2026-07-30 23:37:56 +0000 UTC FinishedAt: 2026-07-31 00:12:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbhmvr[0] Phase: Succeeded StartedAt: 2026-07-30 23:37:56 +0000 UTC FinishedAt: 2026-07-31 00:12:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbhmvr[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 23:37:56 +0000 UTC FinishedAt: 2026-07-31 00:12:38 +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+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGluIHRoZSBXTUkgcGFyc2luZyBsb2dpYyBvZiB0aGUgYXRoMTFrIGFuZCBhdGgxMmsgd2lyZWxlc3MgZHJpdmVycy4gVGhlc2UgYXJlIHZlbmRvci1zcGVjaWZpYyBQQ0llL0FIQiBkcml2ZXJzIGZvciBRdWFsY29tbSBBdGhlcm9zIDgwMi4xMWF4L2JlIGhhcmR3YXJlLiBTaW5jZSB0aGVzZSBwaHlzaWNhbCBoYXJkd2FyZSBkZXZpY2VzIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1OTAzMmM2MmI1YWU0ODVhZGE3ZGE2Yjg2Yzg2YmIxYzQ3NDIyY2I1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDA6MTE6NDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay93bWkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvd21pLmNcbmluZGV4IDJkMmM2ZDdhNGEzYjQuLmY4MGU5YjRhOGEzOTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jXG5AQCAtNDgwMCwxNCAmIzQzOzQ4MDAsMTYgQEAgc3RhdGljIGludCBhdGgxMWtfd21pX3Rsdl9tYWNfcGh5X2NhcHNfcGFyc2Uoc3RydWN0IGF0aDExa19iYXNlICpzb2MsXG4gXHRpZiAoc3ZjX3JkeV9leHQtXHUwMDNlbl9tYWNfcGh5X2NhcHMgXHUwMDNlPSBzdmNfcmR5X2V4dC1cdTAwM2V0b3RfcGh5X2lkKVxuIFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG4tXHRsZW4gPSBtaW5fdCh1MTYsIGxlbiwgc2l6ZW9mKHN0cnVjdCB3bWlfbWFjX3BoeV9jYXBhYmlsaXRpZXMpKTtcbiBcdGlmICghc3ZjX3JkeV9leHQtXHUwMDNlbl9tYWNfcGh5X2NhcHMpIHtcbi1cdFx0c3ZjX3JkeV9leHQtXHUwMDNlbWFjX3BoeV9jYXBzID0ga2NhbGxvYyhzdmNfcmR5X2V4dC1cdTAwM2V0b3RfcGh5X2lkLFxuLVx0XHRcdFx0XHRcdCAgICBsZW4sIEdGUF9BVE9NSUMpO1xuJiM0MztcdFx0c3ZjX3JkeV9leHQtXHUwMDNlbWFjX3BoeV9jYXBzID1cbiYjNDM7XHRcdFx0a3phbGxvY19vYmpzKCpzdmNfcmR5X2V4dC1cdTAwM2VtYWNfcGh5X2NhcHMsXG4mIzQzO1x0XHRcdFx0ICAgICBzdmNfcmR5X2V4dC1cdTAwM2V0b3RfcGh5X2lkLFxuJiM0MztcdFx0XHRcdCAgICAgR0ZQX0FUT01JQyk7XG4gXHRcdGlmICghc3ZjX3JkeV9leHQtXHUwMDNlbWFjX3BoeV9jYXBzKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuJiM0MztcdGxlbiA9IG1pbl90KHUxNiwgbGVuLCBzaXplb2Yoc3RydWN0IHdtaV9tYWNfcGh5X2NhcGFiaWxpdGllcykpO1xuIFx0bWVtY3B5KHN2Y19yZHlfZXh0LVx1MDAzZW1hY19waHlfY2FwcyAmIzQzOyBzdmNfcmR5X2V4dC1cdTAwM2VuX21hY19waHlfY2FwcywgcHRyLCBsZW4pO1xuIFx0c3ZjX3JkeV9leHQtXHUwMDNlbl9tYWNfcGh5X2NhcHMmIzQzOyYjNDM7O1xuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmNcbmluZGV4IDY3MmVhZTIzN2FjNmYuLmQ0NjZiYWY1ZTkwYTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jXG5AQCAtNDc2NSwxNCAmIzQzOzQ3NjUsMTYgQEAgc3RhdGljIGludCBhdGgxMmtfd21pX21hY19waHlfY2Fwc19wYXJzZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKnNvYyxcbiBcdGlmIChzdmNfcmR5X2V4dC1cdTAwM2VuX21hY19waHlfY2FwcyBcdTAwM2U9IHN2Y19yZHlfZXh0LVx1MDAzZXRvdF9waHlfaWQpXG4gXHRcdHJldHVybiAtRU5PQlVGUztcbiBcbi1cdGxlbiA9IG1pbl90KHUxNiwgbGVuLCBzaXplb2Yoc3RydWN0IGF0aDEya193bWlfbWFjX3BoeV9jYXBzX3BhcmFtcykpO1xuIFx0aWYgKCFzdmNfcmR5X2V4dC1cdTAwM2VuX21hY19waHlfY2Fwcykge1xuLVx0XHRzdmNfcmR5X2V4dC1cdTAwM2VtYWNfcGh5X2NhcHMgPSBremFsbG9jKChzdmNfcmR5X2V4dC1cdTAwM2V0b3RfcGh5X2lkKSAqIGxlbixcbi1cdFx0XHRcdFx0XHQgICAgR0ZQX0FUT01JQyk7XG4mIzQzO1x0XHRzdmNfcmR5X2V4dC1cdTAwM2VtYWNfcGh5X2NhcHMgPVxuJiM0MztcdFx0XHRremFsbG9jX29ianMoKnN2Y19yZHlfZXh0LVx1MDAzZW1hY19waHlfY2FwcyxcbiYjNDM7XHRcdFx0XHQgICAgIHN2Y19yZHlfZXh0LVx1MDAzZXRvdF9waHlfaWQsXG4mIzQzO1x0XHRcdFx0ICAgICBHRlBfQVRPTUlDKTtcbiBcdFx0aWYgKCFzdmNfcmR5X2V4dC1cdTAwM2VtYWNfcGh5X2NhcHMpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4mIzQzO1x0bGVuID0gbWluX3QodTE2LCBsZW4sIHNpemVvZihzdHJ1Y3QgYXRoMTJrX3dtaV9tYWNfcGh5X2NhcHNfcGFyYW1zKSk7XG4gXHRtZW1jcHkoc3ZjX3JkeV9leHQtXHUwMDNlbWFjX3BoeV9jYXBzICYjNDM7IHN2Y19yZHlfZXh0LVx1MDAzZW5fbWFjX3BoeV9jYXBzLCBwdHIsIGxlbik7XG4gXHRzdmNfcmR5X2V4dC1cdTAwM2VuX21hY19waHlfY2FwcyYjNDM7JiM0Mzs7XG4gXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDoxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFsbG9jYXRpb24gaW4gdGhlIFdNSSBwYXJzaW5nIGxvZ2ljIG9mIHRoZSBhdGgxMWsgYW5kIGF0aDEyayB3aXJlbGVzcyBkcml2ZXJzLiBUaGVzZSBhcmUgdmVuZG9yLXNwZWNpZmljIFBDSWUvQUhCIGRyaXZlcnMgZm9yIFF1YWxjb21tIEF0aGVyb3MgODAyLjExYXgvYmUgaGFyZHdhcmUuIFNpbmNlIHRoZXNlIHBoeXNpY2FsIGhhcmR3YXJlIGRldmljZXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU5MDMyYzYyYjVhZTQ4NWFkYTdkYTZiODZjODZiYjFjNDc0MjJjYjUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzMSAwMDoxMTo0MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvd21pLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jCmluZGV4IDJkMmM2ZDdhNGEzYjQuLmY4MGU5YjRhOGEzOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvd21pLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay93bWkuYwpAQCAtNDgwMCwxNCAmIzQzOzQ4MDAsMTYgQEAgc3RhdGljIGludCBhdGgxMWtfd21pX3Rsdl9tYWNfcGh5X2NhcHNfcGFyc2Uoc3RydWN0IGF0aDExa19iYXNlICpzb2MsCiAJaWYgKHN2Y19yZHlfZXh0LSZndDtuX21hY19waHlfY2FwcyAmZ3Q7PSBzdmNfcmR5X2V4dC0mZ3Q7dG90X3BoeV9pZCkKIAkJcmV0dXJuIC1FTk9CVUZTOwogCi0JbGVuID0gbWluX3QodTE2LCBsZW4sIHNpemVvZihzdHJ1Y3Qgd21pX21hY19waHlfY2FwYWJpbGl0aWVzKSk7CiAJaWYgKCFzdmNfcmR5X2V4dC0mZ3Q7bl9tYWNfcGh5X2NhcHMpIHsKLQkJc3ZjX3JkeV9leHQtJmd0O21hY19waHlfY2FwcyA9IGtjYWxsb2Moc3ZjX3JkeV9leHQtJmd0O3RvdF9waHlfaWQsCi0JCQkJCQkgICAgbGVuLCBHRlBfQVRPTUlDKTsKJiM0MzsJCXN2Y19yZHlfZXh0LSZndDttYWNfcGh5X2NhcHMgPQomIzQzOwkJCWt6YWxsb2Nfb2Jqcygqc3ZjX3JkeV9leHQtJmd0O21hY19waHlfY2FwcywKJiM0MzsJCQkJICAgICBzdmNfcmR5X2V4dC0mZ3Q7dG90X3BoeV9pZCwKJiM0MzsJCQkJICAgICBHRlBfQVRPTUlDKTsKIAkJaWYgKCFzdmNfcmR5X2V4dC0mZ3Q7bWFjX3BoeV9jYXBzKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiYjNDM7CWxlbiA9IG1pbl90KHUxNiwgbGVuLCBzaXplb2Yoc3RydWN0IHdtaV9tYWNfcGh5X2NhcGFiaWxpdGllcykpOwogCW1lbWNweShzdmNfcmR5X2V4dC0mZ3Q7bWFjX3BoeV9jYXBzICYjNDM7IHN2Y19yZHlfZXh0LSZndDtuX21hY19waHlfY2FwcywgcHRyLCBsZW4pOwogCXN2Y19yZHlfZXh0LSZndDtuX21hY19waHlfY2FwcyYjNDM7JiM0Mzs7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYwppbmRleCA2NzJlYWUyMzdhYzZmLi5kNDY2YmFmNWU5MGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMKQEAgLTQ3NjUsMTQgJiM0Mzs0NzY1LDE2IEBAIHN0YXRpYyBpbnQgYXRoMTJrX3dtaV9tYWNfcGh5X2NhcHNfcGFyc2Uoc3RydWN0IGF0aDEya19iYXNlICpzb2MsCiAJaWYgKHN2Y19yZHlfZXh0LSZndDtuX21hY19waHlfY2FwcyAmZ3Q7PSBzdmNfcmR5X2V4dC0mZ3Q7dG90X3BoeV9pZCkKIAkJcmV0dXJuIC1FTk9CVUZTOwogCi0JbGVuID0gbWluX3QodTE2LCBsZW4sIHNpemVvZihzdHJ1Y3QgYXRoMTJrX3dtaV9tYWNfcGh5X2NhcHNfcGFyYW1zKSk7CiAJaWYgKCFzdmNfcmR5X2V4dC0mZ3Q7bl9tYWNfcGh5X2NhcHMpIHsKLQkJc3ZjX3JkeV9leHQtJmd0O21hY19waHlfY2FwcyA9IGt6YWxsb2MoKHN2Y19yZHlfZXh0LSZndDt0b3RfcGh5X2lkKSAqIGxlbiwKLQkJCQkJCSAgICBHRlBfQVRPTUlDKTsKJiM0MzsJCXN2Y19yZHlfZXh0LSZndDttYWNfcGh5X2NhcHMgPQomIzQzOwkJCWt6YWxsb2Nfb2Jqcygqc3ZjX3JkeV9leHQtJmd0O21hY19waHlfY2FwcywKJiM0MzsJCQkJICAgICBzdmNfcmR5X2V4dC0mZ3Q7dG90X3BoeV9pZCwKJiM0MzsJCQkJICAgICBHRlBfQVRPTUlDKTsKIAkJaWYgKCFzdmNfcmR5X2V4dC0mZ3Q7bWFjX3BoeV9jYXBzKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiYjNDM7CWxlbiA9IG1pbl90KHUxNiwgbGVuLCBzaXplb2Yoc3RydWN0IGF0aDEya193bWlfbWFjX3BoeV9jYXBzX3BhcmFtcykpOwogCW1lbWNweShzdmNfcmR5X2V4dC0mZ3Q7bWFjX3BoeV9jYXBzICYjNDM7IHN2Y19yZHlfZXh0LSZndDtuX21hY19waHlfY2FwcywgcHRyLCBsZW4pOwogCXN2Y19yZHlfZXh0LSZndDtuX21hY19waHlfY2FwcyYjNDM7JiM0Mzs7CiAJcmV0dXJuIDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MjkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1NTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IEFsbG9jYXRpb24gQ2hhbmdlIGluIEF0aGVyb3MgV2lyZWxlc3MgRHJpdmVycyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhdGgxMWtfd21pX3Rsdl9tYWNfcGh5X2NhcHNfcGFyc2VgIGFuZCBgYXRoMTJrX3dtaV9tYWNfcGh5X2NhcHNfcGFyc2VgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGZvciBgc3ZjX3JkeV9leHQtJmd0O21hY19waHlfY2Fwc2AuIFByZXZpb3VzbHksIGl0IHdhcyB1c2luZyBga2NhbGxvY2AgKG9yIGBremFsbG9jYCBpbiBgYXRoMTJrYCksIHdoaWNoIGlzIHN0YW5kYXJkLiBOb3csIGl0JiMzOTtzIHVzaW5nIGBremFsbG9jX29ianNgLiBIbW1tLCBga3phbGxvY19vYmpzYC4uLiB0aGF0JiMzOTtzIG5vdCByaW5naW5nIGFueSBiZWxscy4gSSYjMzk7ZCBiZXR0ZXIgZG91YmxlLWNoZWNrIGlmIHRoYXQmIzM5O3MgYSByZWFsIGtlcm5lbCBmdW5jdGlvbiBvciBwZXJoYXBzIGEgbWFjcm8uIFdhaXQgYSBtaW51dGUsIGBrY2FsbG9jYCBpcyBkZWZpbml0ZWx5IHN0YW5kYXJkIHNvIGl0IGlzIG5vdCBhIHN0YW5kYXJkIGNhbGwuCgpOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBjb2RlIHBhdGggaXMgZXZlbiByZWFjaGFibGUuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYGF0aDExa2AgYW5kIGBhdGgxMmtgIGhlcmUsIHdoaWNoIGFyZSBkcml2ZXJzIGZvciBRdWFsY29tbSBBdGhlcm9zIDgwMi4xMWF4L2JlIHdpcmVsZXNzIGRldmljZXMuIFRoZXNlIGFyZSB0eXBpY2FsbHkgcGh5c2ljYWwgUENJZS9BSEIvU05PQyBoYXJkd2FyZSBjb21wb25lbnRzLiBDYW4gSSByZWFjaCB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IE15IGluaXRpYWwgdGhvdWdodCBpcyBubywgc2luY2UgdGhlc2UgZHJpdmVycyB1c3VhbGx5IHJlcXVpcmUgdGhlIGFjdHVhbCBoYXJkd2FyZS4gUUVNVSBkb2VzbiYjMzk7dCBoYXZlIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhlc2UsIHJpZ2h0PwoKVGhlbiBhZ2FpbiwgYG1hYzgwMjExX2h3c2ltYCAqaXMqIGF2YWlsYWJsZSBmb3Igc29mdHdhcmUgZW11bGF0aW9uIGJ1dCB0aG9zZSBhcmUgZ2VuZXJpYyB3aXJlbGVzcyBkcml2ZXJzIG5vdCBoYXJkd2FyZSBzcGVjaWZpYy4gVW5sZXNzIHRoZXJlJiMzOTtzIHNvbWUgd2F5IHRvIGZ1enogV01JIG1lc3NhZ2VzIHRocm91Z2ggZGVidWdmcyBvciBhIHRlc3QgbW9kZT8gVGhlIGtlcm5lbCBtaWdodCBleHBvc2Ugc29tZSBpbnRlcmZhY2UgZm9yIHRoaXMsIHNvIEkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSYjMzk7cyBhbnkgZnV6emluZyBzdXBwb3J0IGluIGBhdGgxMWtgIG9yIGlmIGl0JiMzOTtzIHB1cmVseSBoYXJkd2FyZS1kZXBlbmRlbnQuIFN5emthbGxlciBjYW4gZnV6eiBVU0IgZGV2aWNlcyB1c2luZyBgZHVtbXlfaGNkYCBhbmQgc29tZSBQQ0kgZGV2aWNlcyBpZiB0aGVyZSYjMzk7cyBhIFBDSSBmdXp6ZXIsIGJ1dCBub3JtYWxseSBpdCBkb2VzbiYjMzk7dCB0YXJnZXQgc3BlY2lmaWMgdmVuZG9yIHdpcmVsZXNzIGRyaXZlcnMgdW5sZXNzIHRoZXkmIzM5O3JlIFVTQiBvciBTRElPLiBgYXRoMTFrYCBzdXBwb3J0cyBQQ0kgYW5kIEFIQiwgd2hpbGUgYGF0aDEya2Agc3VwcG9ydHMgUENJLiBCdXQgaXMgdGhlcmUgKmFueSogVVNCIHN1cHBvcnQgaW4gZWl0aGVyIGRyaXZlcj8KCkkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhlIGRpcmVjdG9yeSB0cmVlcyBmb3IgYGF0aDExa2AgYW5kIGBhdGgxMmtgIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkxOQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipBZGRyZXNzaW5nIHRoZSBhdGgxMWsgSGFyZHdhcmUgTGltaXRhdGlvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gc3RhcmluZyBhdCB0aGlzIGF0aDExayBzaXR1YXRpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGdsYXJpbmcgbGFjayBvZiBVU0Igc3VwcG9ydC4gSSBtZWFuLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIG1vZGVybiBXaS1GaSBjaGlwc2V0LCBzb21ldGhpbmcgbWVhbnQgdG8gaGFuZGxlIHRoZSBoaWdoIHRocm91Z2hwdXQgYW5kIGRpdmVyc2UgY29ubmVjdGl2aXR5IGRlbWFuZHMgb2YgdG9kYXkmIzM5O3MgZGV2aWNlcywgYW5kIHRoZXJlJiMzOTtzIG5vIG5hdGl2ZSBVU0IgZnVuY3Rpb25hbGl0eS4gSXTigJlzIGEgc2lnbmlmaWNhbnQgY29uc3RyYWludCwgYW5kIGZvcmNlcyB1cyB0byBsb29rIGF0IGFsdGVybmF0aXZlIG1ldGhvZHMgb2YgZGF0YSB0cmFuc2ZlciwgYW5kIG1heSBhZmZlY3QgdGhlIHRocm91Z2hwdXQgZHVlIHRvIHJlbHlpbmcgb24gYWx0ZXJuYXRlIG1ldGhvZHMgb2YgZGF0YSB0cmFuc2Zlci4gVGhpcyBkZWZpbml0ZWx5IGNoYW5nZXMgdGhlIGdhbWUgcGxhbiwgYW5kIGltcGFjdHMgaG93IHdlIGltcGxlbWVudCB0aGUgd2hvbGUgdGhpbmcuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgbmVlZHMgYSB3b3JrYXJvdW5kIGZvciBhIHN1Y2Nlc3NmdWwgZGVwbG95bWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTQ3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBEZWNpc2lvbiBmb3IgYXRoMTJrKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGF0aDEyayBkcml2ZXIsIGFuZCBJIHNlZSB0aGVyZSYjMzk7cyBubyBVU0Igc3VwcG9ydC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBhIFBDSS9BSEIgZHJpdmVyIGZvciBzcGVjaWZpYyBoYXJkd2FyZSBpcyB0aGUga2V5IGhlcmUuIEl0IG1lYW5zIEkmIzM5O20gbm90IGdvaW5nIHRvIGJlIGFibGUgdG8gcmVhY2ggaXQgaW4gc3RhbmRhcmQgUUVNVSB3aXRob3V0IHNvbWUgc2VyaW91cyBwaHlzaWNhbCBoYXJkd2FyZSBlbXVsYXRpb24sIHdoaWNoIGlzIGEgbWFzc2l2ZSB1bmRlcnRha2luZy4KCkhvbGQgb24sIGxldCBtZSByZS1yZWFkIHRoZXNlIGluc3RydWN0aW9ucy4gQWgsIGhlcmUgaXQgaXM6ICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLi4uIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7CgpSaWdodCwgKnRoYXQmIzM5O3MqIHRoZSB0cmlnZ2VyISBBdGgxMWsgYW5kIGF0aDEyayBhcmUgdmVuZG9yLXNwZWNpZmljIFBDSWUgd2lyZWxlc3MgZHJpdmVycy4gVGhleSAqZGVmaW5pdGVseSogbmVlZCBwaHlzaWNhbCBoYXJkd2FyZSB0byBmdW5jdGlvbi4gU28sIGFjY29yZGluZyB0byB0aGUgaW5zdHJ1Y3Rpb25zLCB0aGF0IG1lYW5zIEkgc2hvdWxkIGJlIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIHRoZXJlJiMzOTtzICphbnkqIHRlc3Rtb2RlIG9yIHNvZnR3YXJlIGVtdWxhdGlvbiBhdmFpbGFibGUgZm9yIGF0aDExay4gSSB3YW50IHRvIHJ1bGUgb3V0IHRoZSBwb3NzaWJpbGl0eSB0aGF0IGl0JiMzOTtzIGZ1enphYmxlIHVuZGVyIGRpZmZlcmVudCBjaXJjdW1zdGFuY2VzLiBPa2F5LCBpdCBsb29rcyBsaWtlIHRoZXJlIGlzbiYjMzk7dC4gR29vZCwgbXkgZGVjaXNpb24gc3RhbmRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rlc3Rtb2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9NYWtlZmlsZT0yND1hdGgxMWstJChDT05GSUdfQVRIMTFLX0RFQlVHRlMpICYjNDM7PSBkZWJ1Z2ZzLm8gZGVidWdmc19odHRfc3RhdHMubyBkZWJ1Z2ZzX3N0YS5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL01ha2VmaWxlOjI1OmF0aDExay0kKENPTkZJR19OTDgwMjExX1RFU1RNT0RFKSAmIzQzOz0gdGVzdG1vZGUub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9NYWtlZmlsZS0yNi1hdGgxMWstJChDT05GSUdfQVRIMTFLX1RSQUNJTkcpICYjNDM7PSB0cmFjZS5vXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmg9OTI0PXN0cnVjdCBhdGgxMWtfYmFzZSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmgtMTA4Ny1cdFx0dTggKmV2ZW50ZGF0YTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5oOjEwODg6XHR9IHRlc3Rtb2RlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmgtMTA4OS0jZW5kaWZcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnLmg9MzQ9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICphdGgxMWtfZGJnX3N0cihlbnVtIGF0aDExa19kZWJ1Z19tYXNrIG1hc2spXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kZWJ1Zy5oLTU3LVx0Y2FzZSBBVEgxMUtfREJHX1RFU1RNT0RFOlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kZWJ1Zy5oOjU4Olx0XHRyZXR1cm4gXCYjMzQ7dGVzdG1vZGVcJiMzNDs7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnLmgtNTktXHRjYXNlIEFUSDExS19EQkdfSEFMOlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWFjLmMtMjEtI2luY2x1ZGUgXCYjMzQ7ZHBfcnguaFwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9tYWMuYzoyMjojaW5jbHVkZSBcJiMzNDt0ZXN0bW9kZS5oXCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jLTIzLSNpbmNsdWRlIFwmIzM0O3BlZXIuaFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy02LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjc6I2luY2x1ZGUgXCYjMzQ7dGVzdG1vZGUuaFwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTgtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xMi0jaW5jbHVkZSBcJiMzNDtjb3JlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzoxMzojaW5jbHVkZSBcJiMzNDsuLi90ZXN0bW9kZV9pLmhcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xNC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM9NDc9c3RhdGljIHZvaWQgYXRoMTFrX3RtX3dtaV9ldmVudF91bnNlZ21lbnRlZChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLCB1MzIgY21kX2lkLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy01OS1cdGlmICghYXIpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzo2MDpcdFx0YXRoMTFrX3dhcm4oYWIsIFwmIzM0O3Rlc3Rtb2RlIGV2ZW50IG5vdCBoYW5kbGVkIGR1ZSB0byBpbnZhbGlkIHBkZXZcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTYxLVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTY1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjY2Olx0bmxfc2tiID0gY2ZnODAyMTFfdGVzdG1vZGVfYWxsb2NfZXZlbnRfc2tiKGFyLVx1MDAzZWh3LVx1MDAzZXdpcGh5LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTY3LVx0XHRcdFx0XHRcdCAgIDIgKiBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgJiM0Mztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtNzEtXHRcdGF0aDExa193YXJuKGFiLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjcyOlx0XHRcdCAgICBcJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgc2tiIGZvciB1bnNlZ21lbnRlZCB0ZXN0bW9kZSB3bWkgZXZlbnRcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTczLVx0XHRnb3RvIG91dDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtNzgtXHQgICAgbmxhX3B1dChubF9za2IsIEFUSF9UTV9BVFRSX0RBVEEsIHNrYi1cdTAwM2VsZW4sIHNrYi1cdTAwM2VkYXRhKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjc5Olx0XHRhdGgxMWtfd2FybihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHBvcHVsYXRlIHRlc3Rtb2RlIHVuc2VnbWVudGVkIGV2ZW50XFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy04MC1cdFx0a2ZyZWVfc2tiKG5sX3NrYik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTgzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjg0Olx0Y2ZnODAyMTFfdGVzdG1vZGVfZXZlbnQobmxfc2tiLCBHRlBfQVRPTUlDKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy04NS1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmFyLVx1MDAzZWRhdGFfbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTg5LVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YXItXHUwMDNlZGF0YV9sb2NrKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzo5MDpcdGF0aDExa193YXJuKGFiLCBcJiMzNDtGYWlsZWQgdG8gc2VuZCB0ZXN0bW9kZSBldmVudCB0byBoaWdoZXIgbGF5ZXJzXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy05MS19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jPTk2PXN0YXRpYyBpbnQgYXRoMTFrX3RtX3Byb2Nlc3NfZXZlbnQoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTMyIGNtZF9pZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMTE1LVx0aWYgKHBkZXZfaWQgXHUwMDNlPSBhYi1cdTAwM2VudW1fcmFkaW9zKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6MTE2Olx0XHRhdGgxMWtfd2FybihhYiwgXCYjMzQ7dGVzdG1vZGUgZXZlbnQgbm90IGhhbmRsZWQgZHVlIHRvIGludmFsaWQgcGRldiBpZDogJWRcXG5cJiMzNDssXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMTE3LVx0XHRcdCAgICBwZGV2X2lkKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMTIyLVx0aWYgKCFhcikge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjEyMzpcdFx0YXRoMTFrX3dhcm4oYWIsIFwmIzM0O3Rlc3Rtb2RlIGV2ZW50IG5vdCBoYW5kbGVkIGR1ZSB0byBhYnNlbmNlIG9mIHBkZXZcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTEyNC1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTEzNi1cdGlmIChjdXJyZW50X3NlcSA9PSAwKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6MTM3Olx0XHRhYi1cdTAwM2V0ZXN0bW9kZS5leHBlY3RlZF9zZXEgPSAwO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjEzODpcdFx0YWItXHUwMDNldGVzdG1vZGUuZGF0YV9wb3MgPSAwO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTEzOS1cdH1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xNDAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6MTQxOlx0ZGF0YV9wb3MgPSBhYi1cdTAwM2V0ZXN0bW9kZS5kYXRhX3BvcztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xNDItXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTE0OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzoxNTA6XHRtZW1jcHkoXHUwMDI2YWItXHUwMDNldGVzdG1vZGUuZXZlbnRkYXRhW2RhdGFfcG9zXSwgYnVmX3BvcywgZGF0YWxlbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMTUxLVx0ZGF0YV9wb3MgJiM0Mzs9IGRhdGFsZW47XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMTUyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjE1MzpcdGlmICgmIzQzOyYjNDM7YWItXHUwMDNldGVzdG1vZGUuZXhwZWN0ZWRfc2VxICE9IHRvdGFsX3NlZ21lbnRzKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6MTU0Olx0XHRhYi1cdTAwM2V0ZXN0bW9kZS5kYXRhX3BvcyA9IGRhdGFfcG9zO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTE1NS1cdFx0YXRoMTFrX2RiZyhhYiwgQVRIMTFLX0RCR19URVNUTU9ERSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMTYzLVx0XHQgICAgZGF0YV9wb3MsIGZ0bV9tc2ctXHUwMDNlc2VnX2hkci5sZW4pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjE2NDpcdG5sX3NrYiA9IGNmZzgwMjExX3Rlc3Rtb2RlX2FsbG9jX2V2ZW50X3NrYihhci1cdTAwM2Vody1cdTAwM2V3aXBoeSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xNjUtXHRcdFx0XHRcdFx0ICAgMiAqIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xNjktXHRcdGF0aDExa193YXJuKGFiLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjE3MDpcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIGFsbG9jYXRlIHNrYiBmb3Igc2VnbWVudGVkIHRlc3Rtb2RlIHdtaSBldmVudFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMTcxLVx0XHRyZXQgPSAtRU5PTUVNO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xNzgtXHQgICAgbmxhX3B1dChubF9za2IsIEFUSF9UTV9BVFRSX0RBVEEsIGRhdGFfcG9zLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjE3OTpcdFx0ICAgIFx1MDAyNmFiLVx1MDAzZXRlc3Rtb2RlLmV2ZW50ZGF0YVswXSkpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzoxODA6XHRcdGF0aDExa193YXJuKGFiLCBcJiMzNDtmYWlsZWQgdG8gcG9wdWxhdGUgc2VnbWVudGVkIHRlc3Rtb2RlIGV2ZW50XCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xODEtXHRcdGtmcmVlX3NrYihubF9za2IpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xODUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6MTg2Olx0Y2ZnODAyMTFfdGVzdG1vZGVfZXZlbnQobmxfc2tiLCBHRlBfQVRPTUlDKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xODctXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jPTIzMT1zdGF0aWMgaW50IGF0aDExa190bV9jbWRfZ2V0X3ZlcnNpb24oc3RydWN0IGF0aDExayAqYXIsIHN0cnVjdCBubGF0dHIgKnRiW10pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTI0MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzoyNDE6XHRza2IgPSBjZmc4MDIxMV90ZXN0bW9kZV9hbGxvY19yZXBseV9za2IoYXItXHUwMDNlaHctXHUwMDNld2lwaHksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMjQyLVx0XHRcdFx0XHRcdG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTI1OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzoyNjA6XHRyZXR1cm4gY2ZnODAyMTFfdGVzdG1vZGVfcmVwbHkoc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0yNjEtfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTI2Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzoyNjM6c3RhdGljIGludCBhdGgxMWtfdG1fY21kX3Rlc3Rtb2RlX3N0YXJ0KHN0cnVjdCBhdGgxMWsgKmFyLCBzdHJ1Y3QgbmxhdHRyICp0YltdKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTI2NC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTI3OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzoyODA6XHRhci1cdTAwM2VhYi1cdTAwM2V0ZXN0bW9kZS5ldmVudGRhdGEgPSBremFsbG9jKEFUSF9GVE1fRVZFTlRfTUFYX0JVRl9MRU5HVEgsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMjgxLVx0XHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjI4MjpcdGlmICghYXItXHUwMDNlYWItXHUwMDNldGVzdG1vZGUuZXZlbnRkYXRhKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMjgzLVx0XHRyZXQgPSAtRU5PTUVNO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYz0zMDA9c3RhdGljIGludCBhdGgxMWtfdG1fY21kX3dtaShzdHJ1Y3QgYXRoMTFrICphciwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMzI1LVx0aWYgKCFidWZfbGVuKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6MzI2Olx0XHRhdGgxMWtfd2Fybihhci1cdTAwM2VhYiwgXCYjMzQ7Tm8gZGF0YSBwcmVzZW50IGluIHRlc3Rtb2RlIHdtaSBjb21tYW5kXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0zMjctXHRcdHJldCA9IC1FSU5WQUw7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTM3Ny1cdFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjM3ODpcdFx0YXRoMTFrX3dhcm4oYXItXHUwMDNlYWIsIFwmIzM0O2ZhaWxlZCB0byB0cmFuc21pdCB3bWkgY29tbWFuZCAodGVzdG1vZGUpOiAlZFxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0zNzktXHRcdFx0ICAgIHJldCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jPTQ3Nj1pbnQgYXRoMTFrX3RtX2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtNDk2LVx0Y2FzZSBBVEhfVE1fQ01EX1RFU1RNT0RFX1NUQVJUOlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjQ5NzpcdFx0cmV0dXJuIGF0aDExa190bV9jbWRfdGVzdG1vZGVfc3RhcnQoYXIsIHRiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy00OTgtXHRjYXNlIEFUSF9UTV9DTURfV01JX0ZUTTpcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jLTIxLSNpbmNsdWRlIFwmIzM0O3BlZXIuaFwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay93bWkuYzoyMjojaW5jbHVkZSBcJiMzNDt0ZXN0bW9kZS5oXCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jLTIzLSNpbmNsdWRlIFwmIzM0O3AycC5oXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMyMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExpbWl0cyBvZiBUZXN0IE1vZGUgaW4gdGhlIEFic2VuY2Ugb2YgSGFyZHdhcmUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIHRlc3QgbW9kZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBgYXRoMTFrYCBkcml2ZXIuIEl0IHNlZW1zIGxpa2UgZXZlbiBpbiB0ZXN0IG1vZGUsIHNlbmRpbmcgV01JIGNvbW1hbmRzIHRvIHRoZSBkZXZpY2Ugc3RpbGwgaGluZ2VzIG9uIHRoZSBkZXZpY2UgYmVpbmcsIHdlbGwsICpwcmVzZW50Ki4gSSBrZWVwIHNlZWluZyB0aGVzZSBjaGVja3MgKGBhci0mZ3Q7aHctJmd0O3dpcGh5YCwgYHBkZXZfaWQgJmd0Oz0gYWItJmd0O251bV9yYWRpb3NgLCBldGMuKSB0aGF0IHNlZW0gdG8gYXNzdW1lIHRoZXJlJiMzOTtzIGFjdHVhbCBoYXJkd2FyZSB0byBpbnRlcmFjdCB3aXRoLiBJZiB0aGVyZSYjMzk7cyBubyBwaHlzaWNhbCByYWRpbywgdGhlIGBhdGgxMWtgIGRyaXZlciBpc24mIzM5O3QgZ29pbmcgdG8gbG9hZCBpbiB0aGUgZmlyc3QgcGxhY2UsIGFuZCB0aGF0IG1lYW5zIGBody0mZ3Q7d2lwaHlgIHdvbiYjMzk7dCBnZXQgcmVnaXN0ZXJlZC4gV2l0aG91dCB0aGF0IGZvdW5kYXRpb25hbCBpbmZyYXN0cnVjdHVyZSwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGVzdCBtb2RlIGNvbW1hbmRzIGFyZSBET0EuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBpcyB0aGVyZSAqYW55KiBraW5kIG9mIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhlIGBhdGgxMWtgIGRyaXZlcj8gU29tZXRoaW5nIGFraW4gdG8gYGh3c2ltYCBvciBldmVuIGEgbW9yZSBiYXNpYyAmIzM0O2R1bW15JiMzNDsgaW50ZXJmYWNlPyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IHByb3Zpc2lvbnMgZm9yIHZpcnR1YWwgaGFyZHdhcmUsIGJlY2F1c2Ugb3RoZXJ3aXNlLCB0aGlzIHdob2xlIHRlc3Qgc2V0dXAgaXMgZ29pbmcgdG8gYmUgaW5jcmVkaWJseSBsaW1pdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGJhc2UgZm9yIGFueSBtZW50aW9ucyBvZiBgaHdzaW1gIG9yIHNvbWV0aGluZyBzaW1pbGFyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h3c2ltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzUyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHNpbmdsZSB0aG91Z2h0LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZnJhbWVkIGFzIHlvdXIgdGhvdWdodCBwcm9jZXNzOgoKKipObyBIYXJkd2FyZSBTaW11bGF0aW9uLiBJbXBsaWNhdGlvbnMgJmFtcDsgTmV4dCBTdGVwcyoqCgpSaWdodCwgKm5vIGh3c2ltKi4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBJbW1lZGlhdGVseSwgbXkgbWluZCBzdGFydHMgc2lmdGluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIFdpdGhvdXQgaGFyZHdhcmUgc2ltdWxhdGlvbiwgd2UmIzM5O3JlIGxpa2VseSBsb29raW5nIGF0IGEgZmV3IGRpZmZlcmVudCBzY2VuYXJpb3MgYW5kIEkgaGF2ZSB0byBpbW1lZGlhdGVseSBmb2N1cyBvbiB0aGUgcmlza3MuCgoqICAgKipUZXN0aW5nIGxpbWl0YXRpb25zOioqIFZlcmlmaWNhdGlvbiBzdHJhdGVneSBtdXN0IHNoaWZ0IHRvd2FyZHMgYSBtb3JlICYjMzQ7d2hpdGUtYm94JiMzNDsgYXBwcm9hY2ggaWYgYSAmIzM0O2JsYWNrLWJveCYjMzQ7IGFwcHJvYWNoIGJhc2VkIG9uIHRoZSBzaW11bGF0ZWQgZW52aXJvbm1lbnQgaXMgdW5hdmFpbGFibGUuIEkgbXVzdCBmb2N1cyBvbiBmb3JtYWwgdmVyaWZpY2F0aW9uLCBjb25zdHJhaW5lZCByYW5kb20gdGVzdGluZywgb3Igb3RoZXIgbWV0aG9kcyBmb3IgdmVyaWZ5aW5nIHRoZSBkZXNpZ24uCiogICAqKkRlYnVnIGNoYWxsZW5nZXM6KiogRGVidWdnaW5nIHdpdGhvdXQgYSBjeWNsZS1hY2N1cmF0ZSBzaW11bGF0b3Igd2lsbCBiZSBzaWduaWZpY2FudGx5IG1vcmUgZGlmZmljdWx0LCByZXF1aXJpbmcgbWUgdG8gcmVseSBtb3JlIGhlYXZpbHkgb24gc2lsaWNvbiBkZWJ1ZyBmZWF0dXJlcyBhbmQgcG90ZW50aWFsbHkgbW9yZSBwcm90cmFjdGVkIGJyaW5nLXVwIGFuZCBjaGFyYWN0ZXJpemF0aW9uIHBoYXNlcy4gVHJhY2luZyB0aGUgY2F1c2Ugb2YgYW4gaXNzdWUgd2lsbCBhbHNvIGJlY29tZSBtdWNoIG1vcmUgaW52b2x2ZWQgd2l0aG91dCBkZWJ1ZyBkYXRhIGdlbmVyYXRlZCBmcm9tIHNpbXVsYXRpb24uCiogICAqKkRldmVsb3BtZW50IGN5Y2xlOioqIEV4cGVjdGluZyBhIHNpZ25pZmljYW50bHkgbG9uZ2VyIGRlc2lnbiBjeWNsZSwgd2l0aCBhIGhlYXZpZXIgcmVsaWFuY2Ugb24gcHJvdG90eXBpbmcgYW5kIHNpbGljb24gYnJpbmctdXAuIFRoZSBwcm9jZXNzIHdpbGwgYmVjb21lIG1vcmUgcmVsaWFudCBvbiBwaHlzaWNhbCB0ZXN0cyBhbmQgaXRlcmF0aW9ucywgd2hpY2ggYXJlIGNvc3RseSBhbmQgdGltZS1jb25zdW1pbmcuCiogICAqKlJlc291cmNlIGFsbG9jYXRpb246KiogVGhlIGRlc2lnbiB0ZWFtJiMzOTtzIHNraWxsIHNldCB3aWxsIG5lZWQgdG8gYmUgcmVldmFsdWF0ZWQuIElmIHRoZSB0ZWFtIGlzIGhlYXZpbHkgcmVsaWFudCBvbiBzaW11bGF0aW9uLCBhbmQgdGhlcmUgYXJlIGxpbWl0ZWQgZXhwZXJ0aXNlIG9uIHBoeXNpY2FsIGRlYnVnIGFuZCB2YWxpZGF0aW9uLCBJIHdpbGwgbmVlZCB0byBjb25zaWRlciB0cmFpbmluZyBvciBoaXJpbmcgYWRkaXRpb25hbCBleHBlcnRzLgoKRXNzZW50aWFsbHksICpubyBod3NpbSogdHJhbnNsYXRlcyB0byBhIHNoaWZ0IGluIHZlcmlmaWNhdGlvbiBtZXRob2RvbG9neSwgYSBuZWVkIGZvciBtb3JlIHJvYnVzdCB0ZXN0IHBsYW5zLCBhbmQgYSBwb3RlbnRpYWxseSBsb25nZXIgZGV2ZWxvcG1lbnQgdGltZWxpbmUuIEkgbmVlZCB0byBiZSByZWFkeSB0byBhZHZvY2F0ZSBmb3IgYWRkaXRpb25hbCB0ZXN0aW5nIHJlc291cmNlcyBhbmQgYSBtb3JlIHRob3JvdWdoIGRlc2lnbi1mb3ItdGVzdCBzdHJhdGVneSB0byBtaXRpZ2F0ZSB0aGUgcmlza3MuIE15IG5leHQgc3RlcCBpcyB0byBpbml0aWF0ZSBhIGRlZXBlciBldmFsdWF0aW9uIG9uIHRoZSBpbXBhY3Qgb24gcHJvamVjdCBzY2hlZHVsZSwgYW5kIHdoYXQgd29ya2Fyb3VuZHMgb3IgbmV3IHRlY2huaXF1ZXMgc2hvdWxkIGJlIGVtcGxveWVkIHRvIGltcHJvdmUgdGhlIGNoYW5jZXMgb2Ygc3VjY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHVtbXkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTUyND1zdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTUzNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6NTM4Olx0XHRpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldiA9IGFsbG9jX25ldGRldl9kdW1teSgwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtNTM5LVx0XHRpZiAoIWlycV9ncnAtXHUwMDNlbmFwaV9uZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jPTExMzk9c3RhdGljIGludCBhdGgxMWtfY29yZV9jb250aW51ZV9zdXNwZW5kX3Jlc3VtZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jLTExNDYtXHQvKiBzbyBmYXIgc2luZ2xlX3BkZXZfb25seSBjaGlwcyBoYXZlIHN1cHBvcnRzX3N1c3BlbmQgYXMgdHJ1ZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmM6MTE0NzpcdCAqIHNvIHBhc3MgMCBhcyBhIGR1bW15IHBkZXZfaWQgaGVyZS5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jLTExNDgtXHQgKi9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnZnNfaHR0X3N0YXRzLmM9MjQyMz1zdGF0aWMgaW5saW5lIHZvaWQgaHR0X3ByaW50X3R4X2RlX2NvbXBsX3N0YXRzX3Rsdihjb25zdCB2b2lkICp0YWdfYnVmLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuYy0yNDMxLVx0bGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgYnVmX2xlbiAtIGxlbiwgXCYjMzQ7SFRUX1RYX0RFX0NPTVBMX1NUQVRTX1RMVjpcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kZWJ1Z2ZzX2h0dF9zdGF0cy5jOjI0MzI6XHRsZW4gJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgbGVuLCBidWZfbGVuIC0gbGVuLCBcJiMzNDt0Y2xfZHVtbXlfZnJhbWUgPSAldVxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuYzoyNDMzOlx0XHRcdCBodHRfc3RhdHNfYnVmLVx1MDAzZXRjbF9kdW1teV9mcmFtZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnZnNfaHR0X3N0YXRzLmM6MjQzNDpcdGxlbiAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyBsZW4sIGJ1Zl9sZW4gLSBsZW4sIFwmIzM0O3RxbV9kdW1teV9mcmFtZSA9ICV1XFxuXCYjMzQ7LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kZWJ1Z2ZzX2h0dF9zdGF0cy5jOjI0MzU6XHRcdFx0IGh0dF9zdGF0c19idWYtXHUwMDNldHFtX2R1bW15X2ZyYW1lKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuYy0yNDM2LVx0bGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgYnVmX2xlbiAtIGxlbiwgXCYjMzQ7dHFtX25vdGlmeV9mcmFtZSA9ICV1XFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuYz0zNTQyPXN0YXRpYyBpbmxpbmUgdm9pZCBodHRfcHJpbnRfaHdfc3RhdHNfd2hhbF90eF90bHYoY29uc3Qgdm9pZCAqdGFnX2J1Zixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnZnNfaHR0X3N0YXRzLmMtMzU1Ni1cdFx0XHQgaHR0X3N0YXRzX2J1Zi1cdTAwM2Vod3NjaF91bnBhdXNlX3dhaXRfdHFtX3dyaXRlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuYzozNTU3Olx0bGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgYnVmX2xlbiAtIGxlbiwgXCYjMzQ7aHdzY2hfZHVtbXlfdGx2X3NraXBwZWQgPSAldVxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuYzozNTU4Olx0XHRcdCBodHRfc3RhdHNfYnVmLVx1MDAzZWh3c2NoX2R1bW15X3Rsdl9za2lwcGVkKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuYy0zNTU5LVx0bGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgYnVmX2xlbiAtIGxlbixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnZnNfaHR0X3N0YXRzLmg9Mjk2PXN0cnVjdCBodHRfaHdfc3RhdHNfd2hhbF90eF90bHYge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuaC0yOTktXHR1MzIgaHdzY2hfdW5wYXVzZV93YWl0X3RxbV93cml0ZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuaDozMDA6XHR1MzIgaHdzY2hfZHVtbXlfdGx2X3NraXBwZWQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnZnNfaHR0X3N0YXRzLmgtMzAxLVx0dTMyIGh3c2NoX21pc2FsaWduZWRfb2Zmc2V0X3JlY2VpdmVkO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuaD0xMDk0PXN0cnVjdCBodHRfdHhfZGVfY29tcGxfc3RhdHNfdGx2IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuaDoxMDk1Olx0dTMyIHRjbF9kdW1teV9mcmFtZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuaDoxMDk2Olx0dTMyIHRxbV9kdW1teV9mcmFtZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuaC0xMDk3LVx0dTMyIHRxbV9ub3RpZnlfZnJhbWU7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9odGMuYz01OTY9aW50IGF0aDExa19odGNfY29ubmVjdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMWtfaHRjICpodGMsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9odGMuYy02MDEtXHRzdHJ1Y3QgYXRoMTFrX2h0Y19jb25uX3N2YyAqcmVxX21zZztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvaHRjLmM6NjAyOlx0c3RydWN0IGF0aDExa19odGNfY29ubl9zdmNfcmVzcCByZXNwX21zZ19kdW1teTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvaHRjLmM6NjAzOlx0c3RydWN0IGF0aDExa19odGNfY29ubl9zdmNfcmVzcCAqcmVzcF9tc2cgPSBcdTAwMjZyZXNwX21zZ19kdW1teTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvaHRjLmMtNjA0LVx0ZW51bSBhdGgxMWtfaHRjX2VwX2lkIGFzc2lnbmVkX2VpZCA9IEFUSDExS19IVENfRVBfQ09VTlQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9odGMuYy02MTgtXHRcdG1heF9tc2dfc2l6ZSA9IEFUSDExS19IVENfTUFYX0NUUkxfTVNHX0xFTjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvaHRjLmM6NjE5Olx0XHRtZW1zZXQoXHUwMDI2cmVzcF9tc2dfZHVtbXksIDAsIHNpemVvZihyZXNwX21zZ19kdW1teSkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9odGMuYy02MjAtXHRcdGdvdG8gc2V0dXA7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9tYWMuYz04NTk0PXN0YXRpYyBpbnQgYXRoMTFrX21hY19vcF9zZXRfZnJhZ190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9tYWMuYy04NjAyLVx0ICpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWFjLmM6ODYwMzpcdCAqIEhlbmNlIGltcGxlbWVudCBhIGR1bW15IGNhbGxiYWNrIGp1c3QgdG8gc2F5IGZyYWdtZW50YXRpb24gaXNuJiMzOTt0XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jLTg2MDQtXHQgKiBzdXBwb3J0ZWQuIFRoaXMgZWZmZWN0aXZlbHkgcHJldmVudHMgbWFjODAyMTEgZnJvbSBkb2luZyBmcmFtZVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmM9OTQ1PXN0YXRpYyBpbnQgYXRoMTFrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jLTExMjQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jOjExMjU6XHQvKiBrZXJuZWwgbWF5IGFsbG9jYXRlIGEgZHVtbXkgdmVjdG9yIGJlZm9yZSByZXF1ZXN0X2lycSBhbmRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtMTEyNi1cdCAqIHRoZW4gYWxsb2NhdGUgYSByZWFsIHZlY3RvciB3aGVuIHJlcXVlc3RfaXJxIGlzIGNhbGxlZC5cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaWMuYz01NzI9c3RhdGljIGludCBhdGgxMWtfcGNpY19leHRfaXJxX2NvbmZpZyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpYy5jLTU5NC1cdFx0aXJxX2dycC1cdTAwM2VncnBfaWQgPSBpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2ljLmM6NTk1Olx0XHRpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldiA9IGFsbG9jX25ldGRldl9kdW1teSgwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpYy5jLTU5Ni1cdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTMwOAoJCQkJCQkJb3V0cHV0OiAxMTEKCQkJCQkJCXRob3VnaHRzOiA1NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBpbiBXaXJlbGVzcyBEcml2ZXJzOiBOb3QgV29ydGggRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdG91Y2hpbmcgYGFsbG9jX25ldGRldl9kdW1teWAsIHdoaWNoIGluaXRpYWxseSBtYWtlcyBtZSB0aGluayBOQVBJLiBCdXQgdGhlbiBJIHJlYWxpemU6IHRoaXMgaXNuJiMzOTt0IHN0YW5kYXJkIFFFTVUgbWF0ZXJpYWwuIEl0JiMzOTtzIGZvciB0aGUgYGF0aDExa2AgYW5kIGBhdGgxMmtgIGRyaXZlcnMuIFRoZXkmIzM5O3JlIGJvdGggaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycyBmb3IgUENJZSBvciBBSEIgZGV2aWNlcywgc3BlY2lmaWNhbGx5IFF1YWxjb21tIEF0aGVyb3Mgd2lyZWxlc3MgY2hpcHMuICBUaG9zZSBhcmVuJiMzOTt0IGVtdWxhdGVkIGF0IGFsbCBpbiBhIHR5cGljYWwgUUVNVSBzZXR1cC4gIAoKVGhlIHF1ZXN0aW9uIGltbWVkaWF0ZWx5IGp1bXBzIHRvIG1pbmQ6IGlzIHRoZXJlICphbnkqIHdheSBzeXprYWxsZXIgY291bGQgcG9zc2libHkgaGl0IHRoaXM/ICBJIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyLiAgVGhlIHBhdGNoIG1vZGlmaWVzIGBhdGgxMWtfd21pX3Rsdl9tYWNfcGh5X2NhcHNfcGFyc2VgIGFuZCBgYXRoMTJrX3dtaV9tYWNfcGh5X2NhcHNfcGFyc2VgLiBBaCwgdGhvc2UgYXJlIGNhbGxlZCBkdXJpbmcgV01JIGluaXRpYWxpemF0aW9uIOKAkyB3aGVuIHRoZSBkZXZpY2UgZ2V0cyBwcm9iZWQgYW5kIHRoZSBmaXJtd2FyZSBsb2Fkcy4gIFdpdGhvdXQgdGhlIGFjdHVhbCBwaHlzaWNhbCBoYXJkd2FyZSwgdGhlIGRyaXZlciBpc24mIzM5O3QgZ29pbmcgdG8gcHJvYmUsIHRoZSBmaXJtd2FyZSYjMzk7cyBub3QgZ29pbmcgdG8gbG9hZCwgYW5kIHRob3NlIFdNSSBtZXNzYWdlcyBhcmUgbmV2ZXIgZ29pbmcgdG8gZ2V0IHBhcnNlZC4gR2FtZSBvdmVyLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSAqY29tcGxldGVseSogdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR29vZ2xlIENvbXB1dGUgRW5naW5lIG9yIFFFTVUuCgpTbywgSSYjMzk7bSBnb2luZyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGluc3RydWN0aW9ucywgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBZZXA6ICYjMzQ7Q29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4uLiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSYjMzQ7LiAgVGhhdCYjMzk7cyAqZXhhY3RseSogd2hhdCB0aGlzIGlzOiB2ZW5kb3Itc3BlY2lmaWMgUENJZS9BSEIgd2lyZWxlc3MgZHJpdmVycy4gU3BvdCBvbi4KCk5vdyB0byBmb3JtdWxhdGUgdGhlIHJlYXNvbmluZy4gIEkmIzM5O2xsIHB1dCBpdCB0aGlzIHdheTogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFsbG9jYXRpb24gaW4gdGhlIFdNSSBwYXJzaW5nIGxvZ2ljIG9mIHRoZSBhdGgxMWsgYW5kIGF0aDEyayB3aXJlbGVzcyBkcml2ZXJzLiBUaGVzZSBhcmUgdmVuZG9yLXNwZWNpZmljIFBDSWUvQUhCIGRyaXZlcnMgZm9yIFF1YWxjb21tIEF0aGVyb3MgODAyLjExYXgvYmUgaGFyZHdhcmUuIFNpbmNlIHRoZXNlIHBoeXNpY2FsIGhhcmR3YXJlIGRldmljZXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiBUaGVyZWZvcmUsIGl0IGlzIG5vdCB3b3J0aCBmdXp6aW5nLiYjMzQ7CgpKdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrLi4uIEkgc3BvdCBga3phbGxvY19vYmpzYCBpbiB0aGUgY29kZSwgYW5kIG15IGFsYXJtIGJlbGxzIGJyaWVmbHkgZ28gb2ZmLiBJcyB0aGF0IHNvbWUgbmV3IGtlcm5lbCBtYWNybyBJIGRvbiYjMzk7dCBrbm93IGFib3V0PyBXYWl0LCBpdCBsb29rcyBsaWtlIGEgdHlwbywgb3IgYSBuZXcgbWFjcm8uIEJ1dCBpdCBkb2VzbiYjMzk7dCBtYXR0ZXI7IHRoZSBjb2RlJiMzOTtzIHVucmVhY2hhYmxlIGFueXdheS4gIE9oLCB3YWl0LCBga3phbGxvY19vYmpzYCBpcyBhIG1hY3JvIGludHJvZHVjZWQgaW4gdGhlIGtlcm5lbCB0byByZXBsYWNlIGBrY2FsbG9jYCBvciBga3phbGxvY2Agd2l0aCBtdWx0aXBsaWNhdGlvbiEgQWN0dWFsbHksIGRvZXNuJiMzOTt0IG1hdHRlci4gVGhlIHdob2xlIHRoaW5nIGlzIHVucmVhY2hhYmxlLiAgQ29uZmlybWVkLiBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgYWxsb2NhdGlvbiBpbiB0aGUgV01JIHBhcnNpbmcgbG9naWMgb2YgdGhlIGF0aDExayBhbmQgYXRoMTJrIHdpcmVsZXNzIGRyaXZlcnMuIFRoZXNlIGFyZSB2ZW5kb3Itc3BlY2lmaWMgUENJZS9BSEIgZHJpdmVycyBmb3IgUXVhbGNvbW0gQXRoZXJvcyA4MDIuMTFheC9iZSBoYXJkd2FyZS4gU2luY2UgdGhlc2UgcGh5c2ljYWwgaGFyZHdhcmUgZGV2aWNlcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgYWxsb2NhdGlvbiBpbiB0aGUgV01JIHBhcnNpbmcgbG9naWMgb2YgdGhlIGF0aDExayBhbmQgYXRoMTJrIHdpcmVsZXNzIGRyaXZlcnMuIFRoZXNlIGFyZSB2ZW5kb3Itc3BlY2lmaWMgUENJZS9BSEIgZHJpdmVycyBmb3IgUXVhbGNvbW0gQXRoZXJvcyA4MDIuMTFheC9iZSBoYXJkd2FyZS4gU2luY2UgdGhlc2UgcGh5c2ljYWwgaGFyZHdhcmUgZGV2aWNlcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MTE6NDEuODQyNzc4NDU3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMzNzAxMjMwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGluIHRoZSBXTUkgcGFyc2luZyBsb2dpYyBvZiB0aGUgYXRoMTFrIGFuZCBhdGgxMmsgd2lyZWxlc3MgZHJpdmVycy4gVGhlc2UgYXJlIHZlbmRvci1zcGVjaWZpYyBQQ0llL0FIQiBkcml2ZXJzIGZvciBRdWFsY29tbSBBdGhlcm9zIDgwMi4xMWF4L2JlIGhhcmR3YXJlLiBTaW5jZSB0aGVzZSBwaHlzaWNhbCBoYXJkd2FyZSBkZXZpY2VzIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjExOjQxLjg0Mjc4MzY2OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwOTE0NjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTkwMzJjNjJiNWFlNDg1YWRhN2RhNmI4NmM4NmJiMWM0NzQyMmNiNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAzMSAwMDoxMTo0MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay93bWkuY1xcbmluZGV4IDJkMmM2ZDdhNGEzYjQuLmY4MGU5YjRhOGEzOTIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay93bWkuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvd21pLmNcXG5AQCAtNDgwMCwxNCArNDgwMCwxNiBAQCBzdGF0aWMgaW50IGF0aDExa193bWlfdGx2X21hY19waHlfY2Fwc19wYXJzZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKnNvYyxcXG4gXFx0aWYgKHN2Y19yZHlfZXh0LVxcdTAwM2VuX21hY19waHlfY2FwcyBcXHUwMDNlPSBzdmNfcmR5X2V4dC1cXHUwMDNldG90X3BoeV9pZClcXG4gXFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbiBcXG4tXFx0bGVuID0gbWluX3QodTE2LCBsZW4sIHNpemVvZihzdHJ1Y3Qgd21pX21hY19waHlfY2FwYWJpbGl0aWVzKSk7XFxuIFxcdGlmICghc3ZjX3JkeV9leHQtXFx1MDAzZW5fbWFjX3BoeV9jYXBzKSB7XFxuLVxcdFxcdHN2Y19yZHlfZXh0LVxcdTAwM2VtYWNfcGh5X2NhcHMgPSBrY2FsbG9jKHN2Y19yZHlfZXh0LVxcdTAwM2V0b3RfcGh5X2lkLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgbGVuLCBHRlBfQVRPTUlDKTtcXG4rXFx0XFx0c3ZjX3JkeV9leHQtXFx1MDAzZW1hY19waHlfY2FwcyA9XFxuK1xcdFxcdFxcdGt6YWxsb2Nfb2Jqcygqc3ZjX3JkeV9leHQtXFx1MDAzZW1hY19waHlfY2FwcyxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdmNfcmR5X2V4dC1cXHUwMDNldG90X3BoeV9pZCxcXG4rXFx0XFx0XFx0XFx0ICAgICBHRlBfQVRPTUlDKTtcXG4gXFx0XFx0aWYgKCFzdmNfcmR5X2V4dC1cXHUwMDNlbWFjX3BoeV9jYXBzKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXG4rXFx0bGVuID0gbWluX3QodTE2LCBsZW4sIHNpemVvZihzdHJ1Y3Qgd21pX21hY19waHlfY2FwYWJpbGl0aWVzKSk7XFxuIFxcdG1lbWNweShzdmNfcmR5X2V4dC1cXHUwMDNlbWFjX3BoeV9jYXBzICsgc3ZjX3JkeV9leHQtXFx1MDAzZW5fbWFjX3BoeV9jYXBzLCBwdHIsIGxlbik7XFxuIFxcdHN2Y19yZHlfZXh0LVxcdTAwM2VuX21hY19waHlfY2FwcysrO1xcbiBcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmNcXG5pbmRleCA2NzJlYWUyMzdhYzZmLi5kNDY2YmFmNWU5MGEwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jXFxuQEAgLTQ3NjUsMTQgKzQ3NjUsMTYgQEAgc3RhdGljIGludCBhdGgxMmtfd21pX21hY19waHlfY2Fwc19wYXJzZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKnNvYyxcXG4gXFx0aWYgKHN2Y19yZHlfZXh0LVxcdTAwM2VuX21hY19waHlfY2FwcyBcXHUwMDNlPSBzdmNfcmR5X2V4dC1cXHUwMDNldG90X3BoeV9pZClcXG4gXFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbiBcXG4tXFx0bGVuID0gbWluX3QodTE2LCBsZW4sIHNpemVvZihzdHJ1Y3QgYXRoMTJrX3dtaV9tYWNfcGh5X2NhcHNfcGFyYW1zKSk7XFxuIFxcdGlmICghc3ZjX3JkeV9leHQtXFx1MDAzZW5fbWFjX3BoeV9jYXBzKSB7XFxuLVxcdFxcdHN2Y19yZHlfZXh0LVxcdTAwM2VtYWNfcGh5X2NhcHMgPSBremFsbG9jKChzdmNfcmR5X2V4dC1cXHUwMDNldG90X3BoeV9pZCkgKiBsZW4sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBHRlBfQVRPTUlDKTtcXG4rXFx0XFx0c3ZjX3JkeV9leHQtXFx1MDAzZW1hY19waHlfY2FwcyA9XFxuK1xcdFxcdFxcdGt6YWxsb2Nfb2Jqcygqc3ZjX3JkeV9leHQtXFx1MDAzZW1hY19waHlfY2FwcyxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdmNfcmR5X2V4dC1cXHUwMDNldG90X3BoeV9pZCxcXG4rXFx0XFx0XFx0XFx0ICAgICBHRlBfQVRPTUlDKTtcXG4gXFx0XFx0aWYgKCFzdmNfcmR5X2V4dC1cXHUwMDNlbWFjX3BoeV9jYXBzKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXG4rXFx0bGVuID0gbWluX3QodTE2LCBsZW4sIHNpemVvZihzdHJ1Y3QgYXRoMTJrX3dtaV9tYWNfcGh5X2NhcHNfcGFyYW1zKSk7XFxuIFxcdG1lbWNweShzdmNfcmR5X2V4dC1cXHUwMDNlbWFjX3BoeV9jYXBzICsgc3ZjX3JkeV9leHQtXFx1MDAzZW5fbWFjX3BoeV9jYXBzLCBwdHIsIGxlbik7XFxuIFxcdHN2Y19yZHlfZXh0LVxcdTAwM2VuX21hY19waHlfY2FwcysrO1xcbiBcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MTE6NDIuMjc0Mjg0NjE2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzI5Mzg2MDQ4MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGluIHRoZSBXTUkgcGFyc2luZyBsb2dpYyBvZiB0aGUgYXRoMTFrIGFuZCBhdGgxMmsgd2lyZWxlc3MgZHJpdmVycy4gVGhlc2UgYXJlIHZlbmRvci1zcGVjaWZpYyBQQ0llL0FIQiBkcml2ZXJzIGZvciBRdWFsY29tbSBBdGhlcm9zIDgwMi4xMWF4L2JlIGhhcmR3YXJlLiBTaW5jZSB0aGVzZSBwaHlzaWNhbCBoYXJkd2FyZSBkZXZpY2VzIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU5MDMyYzYyYjVhZTQ4NWFkYTdkYTZiODZjODZiYjFjNDc0MjJjYjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAwMDoxMTo0MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvd21pLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jXG5pbmRleCAyZDJjNmQ3YTRhM2I0Li5mODBlOWI0YThhMzkyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay93bWkuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay93bWkuY1xuQEAgLTQ4MDAsMTQgKzQ4MDAsMTYgQEAgc3RhdGljIGludCBhdGgxMWtfd21pX3Rsdl9tYWNfcGh5X2NhcHNfcGFyc2Uoc3RydWN0IGF0aDExa19iYXNlICpzb2MsXG4gXHRpZiAoc3ZjX3JkeV9leHQtXHUwMDNlbl9tYWNfcGh5X2NhcHMgXHUwMDNlPSBzdmNfcmR5X2V4dC1cdTAwM2V0b3RfcGh5X2lkKVxuIFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG4tXHRsZW4gPSBtaW5fdCh1MTYsIGxlbiwgc2l6ZW9mKHN0cnVjdCB3bWlfbWFjX3BoeV9jYXBhYmlsaXRpZXMpKTtcbiBcdGlmICghc3ZjX3JkeV9leHQtXHUwMDNlbl9tYWNfcGh5X2NhcHMpIHtcbi1cdFx0c3ZjX3JkeV9leHQtXHUwMDNlbWFjX3BoeV9jYXBzID0ga2NhbGxvYyhzdmNfcmR5X2V4dC1cdTAwM2V0b3RfcGh5X2lkLFxuLVx0XHRcdFx0XHRcdCAgICBsZW4sIEdGUF9BVE9NSUMpO1xuK1x0XHRzdmNfcmR5X2V4dC1cdTAwM2VtYWNfcGh5X2NhcHMgPVxuK1x0XHRcdGt6YWxsb2Nfb2Jqcygqc3ZjX3JkeV9leHQtXHUwMDNlbWFjX3BoeV9jYXBzLFxuK1x0XHRcdFx0ICAgICBzdmNfcmR5X2V4dC1cdTAwM2V0b3RfcGh5X2lkLFxuK1x0XHRcdFx0ICAgICBHRlBfQVRPTUlDKTtcbiBcdFx0aWYgKCFzdmNfcmR5X2V4dC1cdTAwM2VtYWNfcGh5X2NhcHMpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4rXHRsZW4gPSBtaW5fdCh1MTYsIGxlbiwgc2l6ZW9mKHN0cnVjdCB3bWlfbWFjX3BoeV9jYXBhYmlsaXRpZXMpKTtcbiBcdG1lbWNweShzdmNfcmR5X2V4dC1cdTAwM2VtYWNfcGh5X2NhcHMgKyBzdmNfcmR5X2V4dC1cdTAwM2VuX21hY19waHlfY2FwcywgcHRyLCBsZW4pO1xuIFx0c3ZjX3JkeV9leHQtXHUwMDNlbl9tYWNfcGh5X2NhcHMrKztcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jXG5pbmRleCA2NzJlYWUyMzdhYzZmLi5kNDY2YmFmNWU5MGEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuY1xuQEAgLTQ3NjUsMTQgKzQ3NjUsMTYgQEAgc3RhdGljIGludCBhdGgxMmtfd21pX21hY19waHlfY2Fwc19wYXJzZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKnNvYyxcbiBcdGlmIChzdmNfcmR5X2V4dC1cdTAwM2VuX21hY19waHlfY2FwcyBcdTAwM2U9IHN2Y19yZHlfZXh0LVx1MDAzZXRvdF9waHlfaWQpXG4gXHRcdHJldHVybiAtRU5PQlVGUztcbiBcbi1cdGxlbiA9IG1pbl90KHUxNiwgbGVuLCBzaXplb2Yoc3RydWN0IGF0aDEya193bWlfbWFjX3BoeV9jYXBzX3BhcmFtcykpO1xuIFx0aWYgKCFzdmNfcmR5X2V4dC1cdTAwM2VuX21hY19waHlfY2Fwcykge1xuLVx0XHRzdmNfcmR5X2V4dC1cdTAwM2VtYWNfcGh5X2NhcHMgPSBremFsbG9jKChzdmNfcmR5X2V4dC1cdTAwM2V0b3RfcGh5X2lkKSAqIGxlbixcbi1cdFx0XHRcdFx0XHQgICAgR0ZQX0FUT01JQyk7XG4rXHRcdHN2Y19yZHlfZXh0LVx1MDAzZW1hY19waHlfY2FwcyA9XG4rXHRcdFx0a3phbGxvY19vYmpzKCpzdmNfcmR5X2V4dC1cdTAwM2VtYWNfcGh5X2NhcHMsXG4rXHRcdFx0XHQgICAgIHN2Y19yZHlfZXh0LVx1MDAzZXRvdF9waHlfaWQsXG4rXHRcdFx0XHQgICAgIEdGUF9BVE9NSUMpO1xuIFx0XHRpZiAoIXN2Y19yZHlfZXh0LVx1MDAzZW1hY19waHlfY2FwcylcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcbitcdGxlbiA9IG1pbl90KHUxNiwgbGVuLCBzaXplb2Yoc3RydWN0IGF0aDEya193bWlfbWFjX3BoeV9jYXBzX3BhcmFtcykpO1xuIFx0bWVtY3B5KHN2Y19yZHlfZXh0LVx1MDAzZW1hY19waHlfY2FwcyArIHN2Y19yZHlfZXh0LVx1MDAzZW5fbWFjX3BoeV9jYXBzLCBwdHIsIGxlbik7XG4gXHRzdmNfcmR5X2V4dC1cdTAwM2VuX21hY19waHlfY2FwcysrO1xuIFx0cmV0dXJuIDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDoxMTo0Mi4yNzQyODU4NTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjExNzk5NzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBBbGxvY2F0aW9uIENoYW5nZSBpbiBBdGhlcm9zIFdpcmVsZXNzIERyaXZlcnMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhdGgxMWtfd21pX3Rsdl9tYWNfcGh5X2NhcHNfcGFyc2VgIGFuZCBgYXRoMTJrX3dtaV9tYWNfcGh5X2NhcHNfcGFyc2VgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGZvciBgc3ZjX3JkeV9leHQtXHUwMDNlbWFjX3BoeV9jYXBzYC4gUHJldmlvdXNseSwgaXQgd2FzIHVzaW5nIGBrY2FsbG9jYCAob3IgYGt6YWxsb2NgIGluIGBhdGgxMmtgKSwgd2hpY2ggaXMgc3RhbmRhcmQuIE5vdywgaXQncyB1c2luZyBga3phbGxvY19vYmpzYC4gSG1tbSwgYGt6YWxsb2Nfb2Jqc2AuLi4gdGhhdCdzIG5vdCByaW5naW5nIGFueSBiZWxscy4gSSdkIGJldHRlciBkb3VibGUtY2hlY2sgaWYgdGhhdCdzIGEgcmVhbCBrZXJuZWwgZnVuY3Rpb24gb3IgcGVyaGFwcyBhIG1hY3JvLiBXYWl0IGEgbWludXRlLCBga2NhbGxvY2AgaXMgZGVmaW5pdGVseSBzdGFuZGFyZCBzbyBpdCBpcyBub3QgYSBzdGFuZGFyZCBjYWxsLlxuXG5Ob3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBjb2RlIHBhdGggaXMgZXZlbiByZWFjaGFibGUuIFdlJ3JlIGRlYWxpbmcgd2l0aCBgYXRoMTFrYCBhbmQgYGF0aDEya2AgaGVyZSwgd2hpY2ggYXJlIGRyaXZlcnMgZm9yIFF1YWxjb21tIEF0aGVyb3MgODAyLjExYXgvYmUgd2lyZWxlc3MgZGV2aWNlcy4gVGhlc2UgYXJlIHR5cGljYWxseSBwaHlzaWNhbCBQQ0llL0FIQi9TTk9DIGhhcmR3YXJlIGNvbXBvbmVudHMuIENhbiBJIHJlYWNoIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIG5vLCBzaW5jZSB0aGVzZSBkcml2ZXJzIHVzdWFsbHkgcmVxdWlyZSB0aGUgYWN0dWFsIGhhcmR3YXJlLiBRRU1VIGRvZXNuJ3QgaGF2ZSBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZXNlLCByaWdodD9cblxuVGhlbiBhZ2FpbiwgYG1hYzgwMjExX2h3c2ltYCAqaXMqIGF2YWlsYWJsZSBmb3Igc29mdHdhcmUgZW11bGF0aW9uIGJ1dCB0aG9zZSBhcmUgZ2VuZXJpYyB3aXJlbGVzcyBkcml2ZXJzIG5vdCBoYXJkd2FyZSBzcGVjaWZpYy4gVW5sZXNzIHRoZXJlJ3Mgc29tZSB3YXkgdG8gZnV6eiBXTUkgbWVzc2FnZXMgdGhyb3VnaCBkZWJ1Z2ZzIG9yIGEgdGVzdCBtb2RlPyBUaGUga2VybmVsIG1pZ2h0IGV4cG9zZSBzb21lIGludGVyZmFjZSBmb3IgdGhpcywgc28gSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlJ3MgYW55IGZ1enppbmcgc3VwcG9ydCBpbiBgYXRoMTFrYCBvciBpZiBpdCdzIHB1cmVseSBoYXJkd2FyZS1kZXBlbmRlbnQuIFN5emthbGxlciBjYW4gZnV6eiBVU0IgZGV2aWNlcyB1c2luZyBgZHVtbXlfaGNkYCBhbmQgc29tZSBQQ0kgZGV2aWNlcyBpZiB0aGVyZSdzIGEgUENJIGZ1enplciwgYnV0IG5vcm1hbGx5IGl0IGRvZXNuJ3QgdGFyZ2V0IHNwZWNpZmljIHZlbmRvciB3aXJlbGVzcyBkcml2ZXJzIHVubGVzcyB0aGV5J3JlIFVTQiBvciBTRElPLiBgYXRoMTFrYCBzdXBwb3J0cyBQQ0kgYW5kIEFIQiwgd2hpbGUgYGF0aDEya2Agc3VwcG9ydHMgUENJLiBCdXQgaXMgdGhlcmUgKmFueSogVVNCIHN1cHBvcnQgaW4gZWl0aGVyIGRyaXZlcj9cblxuSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiB0aGUgZGlyZWN0b3J5IHRyZWVzIGZvciBgYXRoMTFrYCBhbmQgYGF0aDEya2AgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgyOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjExOjUwLjQ4NjA4Nzc1MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTMzMDAwNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDoxMTo1MC41MzU0MjUxMTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjk1OTg4Mzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqQWRkcmVzc2luZyB0aGUgYXRoMTFrIEhhcmR3YXJlIExpbWl0YXRpb25zKipcblxuUmlnaHQsIHNvIEknbSBzdGFyaW5nIGF0IHRoaXMgYXRoMTFrIHNpdHVhdGlvbiwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgZ2xhcmluZyBsYWNrIG9mIFVTQiBzdXBwb3J0LiBJIG1lYW4sIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBtb2Rlcm4gV2ktRmkgY2hpcHNldCwgc29tZXRoaW5nIG1lYW50IHRvIGhhbmRsZSB0aGUgaGlnaCB0aHJvdWdocHV0IGFuZCBkaXZlcnNlIGNvbm5lY3Rpdml0eSBkZW1hbmRzIG9mIHRvZGF5J3MgZGV2aWNlcywgYW5kIHRoZXJlJ3Mgbm8gbmF0aXZlIFVTQiBmdW5jdGlvbmFsaXR5LiBJdOKAmXMgYSBzaWduaWZpY2FudCBjb25zdHJhaW50LCBhbmQgZm9yY2VzIHVzIHRvIGxvb2sgYXQgYWx0ZXJuYXRpdmUgbWV0aG9kcyBvZiBkYXRhIHRyYW5zZmVyLCBhbmQgbWF5IGFmZmVjdCB0aGUgdGhyb3VnaHB1dCBkdWUgdG8gcmVseWluZyBvbiBhbHRlcm5hdGUgbWV0aG9kcyBvZiBkYXRhIHRyYW5zZmVyLiBUaGlzIGRlZmluaXRlbHkgY2hhbmdlcyB0aGUgZ2FtZSBwbGFuLCBhbmQgaW1wYWN0cyBob3cgd2UgaW1wbGVtZW50IHRoZSB3aG9sZSB0aGluZy4gVGhpcyBpcyBzb21ldGhpbmcgdGhhdCBuZWVkcyBhIHdvcmthcm91bmQgZm9yIGEgc3VjY2Vzc2Z1bCBkZXBsb3ltZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTE5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDoxMTo1My4yMzE0MTU4MDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxOTAyMDYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MTE6NTMuMjc4NjE2Njc4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyMTQwMzc5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIGF0aDEyayoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYXRoMTJrIGRyaXZlciwgYW5kIEkgc2VlIHRoZXJlJ3Mgbm8gVVNCIHN1cHBvcnQuIFRoZSBmYWN0IHRoYXQgaXQncyBhIFBDSS9BSEIgZHJpdmVyIGZvciBzcGVjaWZpYyBoYXJkd2FyZSBpcyB0aGUga2V5IGhlcmUuIEl0IG1lYW5zIEknbSBub3QgZ29pbmcgdG8gYmUgYWJsZSB0byByZWFjaCBpdCBpbiBzdGFuZGFyZCBRRU1VIHdpdGhvdXQgc29tZSBzZXJpb3VzIHBoeXNpY2FsIGhhcmR3YXJlIGVtdWxhdGlvbiwgd2hpY2ggaXMgYSBtYXNzaXZlIHVuZGVydGFraW5nLlxuXG5Ib2xkIG9uLCBsZXQgbWUgcmUtcmVhZCB0aGVzZSBpbnN0cnVjdGlvbnMuIEFoLCBoZXJlIGl0IGlzOiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4uLiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIlxuXG5SaWdodCwgKnRoYXQncyogdGhlIHRyaWdnZXIhIEF0aDExayBhbmQgYXRoMTJrIGFyZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSB3aXJlbGVzcyBkcml2ZXJzLiBUaGV5ICpkZWZpbml0ZWx5KiBuZWVkIHBoeXNpY2FsIGhhcmR3YXJlIHRvIGZ1bmN0aW9uLiBTbywgYWNjb3JkaW5nIHRvIHRoZSBpbnN0cnVjdGlvbnMsIHRoYXQgbWVhbnMgSSBzaG91bGQgYmUgc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayBpZiB0aGVyZSdzICphbnkqIHRlc3Rtb2RlIG9yIHNvZnR3YXJlIGVtdWxhdGlvbiBhdmFpbGFibGUgZm9yIGF0aDExay4gSSB3YW50IHRvIHJ1bGUgb3V0IHRoZSBwb3NzaWJpbGl0eSB0aGF0IGl0J3MgZnV6emFibGUgdW5kZXIgZGlmZmVyZW50IGNpcmN1bXN0YW5jZXMuIE9rYXksIGl0IGxvb2tzIGxpa2UgdGhlcmUgaXNuJ3QuIEdvb2QsIG15IGRlY2lzaW9uIHN0YW5kcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE0NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDoxMTo1Ny42MDAwMjIzODVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA3MDkwNTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRlc3Rtb2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvTWFrZWZpbGU9MjQ9YXRoMTFrLSQoQ09ORklHX0FUSDExS19ERUJVR0ZTKSArPSBkZWJ1Z2ZzLm8gZGVidWdmc19odHRfc3RhdHMubyBkZWJ1Z2ZzX3N0YS5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9NYWtlZmlsZToyNTphdGgxMWstJChDT05GSUdfTkw4MDIxMV9URVNUTU9ERSkgKz0gdGVzdG1vZGUub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvTWFrZWZpbGUtMjYtYXRoMTFrLSQoQ09ORklHX0FUSDExS19UUkFDSU5HKSArPSB0cmFjZS5vXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuaD05MjQ9c3RydWN0IGF0aDExa19iYXNlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5oLTEwODctXFx0XFx0dTggKmV2ZW50ZGF0YTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuaDoxMDg4OlxcdH0gdGVzdG1vZGU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmgtMTA4OS0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWcuaD0zND1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmF0aDExa19kYmdfc3RyKGVudW0gYXRoMTFrX2RlYnVnX21hc2sgbWFzaylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWcuaC01Ny1cXHRjYXNlIEFUSDExS19EQkdfVEVTVE1PREU6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kZWJ1Zy5oOjU4OlxcdFxcdHJldHVybiBcXFwidGVzdG1vZGVcXFwiO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWcuaC01OS1cXHRjYXNlIEFUSDExS19EQkdfSEFMOlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9tYWMuYy0yMS0jaW5jbHVkZSBcXFwiZHBfcnguaFxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jOjIyOiNpbmNsdWRlIFxcXCJ0ZXN0bW9kZS5oXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWFjLmMtMjMtI2luY2x1ZGUgXFxcInBlZXIuaFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy02LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzo3OiNpbmNsdWRlIFxcXCJ0ZXN0bW9kZS5oXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy04LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTEyLSNpbmNsdWRlIFxcXCJjb3JlLmhcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjEzOiNpbmNsdWRlIFxcXCIuLi90ZXN0bW9kZV9pLmhcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTE0LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jPTQ3PXN0YXRpYyB2b2lkIGF0aDExa190bV93bWlfZXZlbnRfdW5zZWdtZW50ZWQoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTMyIGNtZF9pZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy01OS1cXHRpZiAoIWFyKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjYwOlxcdFxcdGF0aDExa193YXJuKGFiLCBcXFwidGVzdG1vZGUgZXZlbnQgbm90IGhhbmRsZWQgZHVlIHRvIGludmFsaWQgcGRldlxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTYxLVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy02NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6NjY6XFx0bmxfc2tiID0gY2ZnODAyMTFfdGVzdG1vZGVfYWxsb2NfZXZlbnRfc2tiKGFyLVxcdTAwM2Vody1cXHUwMDNld2lwaHksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTY3LVxcdFxcdFxcdFxcdFxcdFxcdCAgIDIgKiBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgK1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTcxLVxcdFxcdGF0aDExa193YXJuKGFiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzo3MjpcXHRcXHRcXHQgICAgXFxcImZhaWxlZCB0byBhbGxvY2F0ZSBza2IgZm9yIHVuc2VnbWVudGVkIHRlc3Rtb2RlIHdtaSBldmVudFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTczLVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTc4LVxcdCAgICBubGFfcHV0KG5sX3NrYiwgQVRIX1RNX0FUVFJfREFUQSwgc2tiLVxcdTAwM2VsZW4sIHNrYi1cXHUwMDNlZGF0YSkpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6Nzk6XFx0XFx0YXRoMTFrX3dhcm4oYWIsIFxcXCJmYWlsZWQgdG8gcG9wdWxhdGUgdGVzdG1vZGUgdW5zZWdtZW50ZWQgZXZlbnRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy04MC1cXHRcXHRrZnJlZV9za2Iobmxfc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy04My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6ODQ6XFx0Y2ZnODAyMTFfdGVzdG1vZGVfZXZlbnQobmxfc2tiLCBHRlBfQVRPTUlDKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtODUtXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmFyLVxcdTAwM2VkYXRhX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTg5LVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZhci1cXHUwMDNlZGF0YV9sb2NrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6OTA6XFx0YXRoMTFrX3dhcm4oYWIsIFxcXCJGYWlsZWQgdG8gc2VuZCB0ZXN0bW9kZSBldmVudCB0byBoaWdoZXIgbGF5ZXJzXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtOTEtfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jPTk2PXN0YXRpYyBpbnQgYXRoMTFrX3RtX3Byb2Nlc3NfZXZlbnQoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTMyIGNtZF9pZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xMTUtXFx0aWYgKHBkZXZfaWQgXFx1MDAzZT0gYWItXFx1MDAzZW51bV9yYWRpb3MpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6MTE2OlxcdFxcdGF0aDExa193YXJuKGFiLCBcXFwidGVzdG1vZGUgZXZlbnQgbm90IGhhbmRsZWQgZHVlIHRvIGludmFsaWQgcGRldiBpZDogJWRcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTExNy1cXHRcXHRcXHQgICAgcGRldl9pZCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMTIyLVxcdGlmICghYXIpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6MTIzOlxcdFxcdGF0aDExa193YXJuKGFiLCBcXFwidGVzdG1vZGUgZXZlbnQgbm90IGhhbmRsZWQgZHVlIHRvIGFic2VuY2Ugb2YgcGRldlxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTEyNC1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xMzYtXFx0aWYgKGN1cnJlbnRfc2VxID09IDApIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6MTM3OlxcdFxcdGFiLVxcdTAwM2V0ZXN0bW9kZS5leHBlY3RlZF9zZXEgPSAwO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzoxMzg6XFx0XFx0YWItXFx1MDAzZXRlc3Rtb2RlLmRhdGFfcG9zID0gMDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMTM5LVxcdH1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMTQwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzoxNDE6XFx0ZGF0YV9wb3MgPSBhYi1cXHUwMDNldGVzdG1vZGUuZGF0YV9wb3M7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTE0Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xNDktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjE1MDpcXHRtZW1jcHkoXFx1MDAyNmFiLVxcdTAwM2V0ZXN0bW9kZS5ldmVudGRhdGFbZGF0YV9wb3NdLCBidWZfcG9zLCBkYXRhbGVuKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMTUxLVxcdGRhdGFfcG9zICs9IGRhdGFsZW47XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTE1Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6MTUzOlxcdGlmICgrK2FiLVxcdTAwM2V0ZXN0bW9kZS5leHBlY3RlZF9zZXEgIT0gdG90YWxfc2VnbWVudHMpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6MTU0OlxcdFxcdGFiLVxcdTAwM2V0ZXN0bW9kZS5kYXRhX3BvcyA9IGRhdGFfcG9zO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xNTUtXFx0XFx0YXRoMTFrX2RiZyhhYiwgQVRIMTFLX0RCR19URVNUTU9ERSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xNjMtXFx0XFx0ICAgIGRhdGFfcG9zLCBmdG1fbXNnLVxcdTAwM2VzZWdfaGRyLmxlbik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjE2NDpcXHRubF9za2IgPSBjZmc4MDIxMV90ZXN0bW9kZV9hbGxvY19ldmVudF9za2IoYXItXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMTY1LVxcdFxcdFxcdFxcdFxcdFxcdCAgIDIgKiBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgK1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTE2OS1cXHRcXHRhdGgxMWtfd2FybihhYixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6MTcwOlxcdFxcdFxcdCAgICBcXFwiZmFpbGVkIHRvIGFsbG9jYXRlIHNrYiBmb3Igc2VnbWVudGVkIHRlc3Rtb2RlIHdtaSBldmVudFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTE3MS1cXHRcXHRyZXQgPSAtRU5PTUVNO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTE3OC1cXHQgICAgbmxhX3B1dChubF9za2IsIEFUSF9UTV9BVFRSX0RBVEEsIGRhdGFfcG9zLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzoxNzk6XFx0XFx0ICAgIFxcdTAwMjZhYi1cXHUwMDNldGVzdG1vZGUuZXZlbnRkYXRhWzBdKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzoxODA6XFx0XFx0YXRoMTFrX3dhcm4oYWIsIFxcXCJmYWlsZWQgdG8gcG9wdWxhdGUgc2VnbWVudGVkIHRlc3Rtb2RlIGV2ZW50XFxcIik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTE4MS1cXHRcXHRrZnJlZV9za2Iobmxfc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xODUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjE4NjpcXHRjZmc4MDIxMV90ZXN0bW9kZV9ldmVudChubF9za2IsIEdGUF9BVE9NSUMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xODctXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM9MjMxPXN0YXRpYyBpbnQgYXRoMTFrX3RtX2NtZF9nZXRfdmVyc2lvbihzdHJ1Y3QgYXRoMTFrICphciwgc3RydWN0IG5sYXR0ciAqdGJbXSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0yNDAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjI0MTpcXHRza2IgPSBjZmc4MDIxMV90ZXN0bW9kZV9hbGxvY19yZXBseV9za2IoYXItXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMjQyLVxcdFxcdFxcdFxcdFxcdFxcdG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMjU5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzoyNjA6XFx0cmV0dXJuIGNmZzgwMjExX3Rlc3Rtb2RlX3JlcGx5KHNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTI2MS19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTI2Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6MjYzOnN0YXRpYyBpbnQgYXRoMTFrX3RtX2NtZF90ZXN0bW9kZV9zdGFydChzdHJ1Y3QgYXRoMTFrICphciwgc3RydWN0IG5sYXR0ciAqdGJbXSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMjY0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0yNzktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjI4MDpcXHRhci1cXHUwMDNlYWItXFx1MDAzZXRlc3Rtb2RlLmV2ZW50ZGF0YSA9IGt6YWxsb2MoQVRIX0ZUTV9FVkVOVF9NQVhfQlVGX0xFTkdUSCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMjgxLVxcdFxcdFxcdFxcdFxcdCAgICAgR0ZQX0tFUk5FTCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjI4MjpcXHRpZiAoIWFyLVxcdTAwM2VhYi1cXHUwMDNldGVzdG1vZGUuZXZlbnRkYXRhKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTI4My1cXHRcXHRyZXQgPSAtRU5PTUVNO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jPTMwMD1zdGF0aWMgaW50IGF0aDExa190bV9jbWRfd21pKHN0cnVjdCBhdGgxMWsgKmFyLCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTMyNS1cXHRpZiAoIWJ1Zl9sZW4pIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6MzI2OlxcdFxcdGF0aDExa193YXJuKGFyLVxcdTAwM2VhYiwgXFxcIk5vIGRhdGEgcHJlc2VudCBpbiB0ZXN0bW9kZSB3bWkgY29tbWFuZFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTMyNy1cXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTM3Ny1cXHRcXHRkZXZfa2ZyZWVfc2tiKHNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjM3ODpcXHRcXHRhdGgxMWtfd2Fybihhci1cXHUwMDNlYWIsIFxcXCJmYWlsZWQgdG8gdHJhbnNtaXQgd21pIGNvbW1hbmQgKHRlc3Rtb2RlKTogJWRcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTM3OS1cXHRcXHRcXHQgICAgcmV0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYz00NzY9aW50IGF0aDExa190bV9jbWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtNDk2LVxcdGNhc2UgQVRIX1RNX0NNRF9URVNUTU9ERV9TVEFSVDpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6NDk3OlxcdFxcdHJldHVybiBhdGgxMWtfdG1fY21kX3Rlc3Rtb2RlX3N0YXJ0KGFyLCB0Yik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTQ5OC1cXHRjYXNlIEFUSF9UTV9DTURfV01JX0ZUTTpcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvd21pLmMtMjEtI2luY2x1ZGUgXFxcInBlZXIuaFxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jOjIyOiNpbmNsdWRlIFxcXCJ0ZXN0bW9kZS5oXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvd21pLmMtMjMtI2luY2x1ZGUgXFxcInAycC5oXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDoxMTo1OC4wMDcxMTc0MjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODQ4MDMyMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTGltaXRzIG9mIFRlc3QgTW9kZSBpbiB0aGUgQWJzZW5jZSBvZiBIYXJkd2FyZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGlzIHRlc3QgbW9kZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBgYXRoMTFrYCBkcml2ZXIuIEl0IHNlZW1zIGxpa2UgZXZlbiBpbiB0ZXN0IG1vZGUsIHNlbmRpbmcgV01JIGNvbW1hbmRzIHRvIHRoZSBkZXZpY2Ugc3RpbGwgaGluZ2VzIG9uIHRoZSBkZXZpY2UgYmVpbmcsIHdlbGwsICpwcmVzZW50Ki4gSSBrZWVwIHNlZWluZyB0aGVzZSBjaGVja3MgKGBhci1cdTAwM2Vody1cdTAwM2V3aXBoeWAsIGBwZGV2X2lkIFx1MDAzZT0gYWItXHUwMDNlbnVtX3JhZGlvc2AsIGV0Yy4pIHRoYXQgc2VlbSB0byBhc3N1bWUgdGhlcmUncyBhY3R1YWwgaGFyZHdhcmUgdG8gaW50ZXJhY3Qgd2l0aC4gSWYgdGhlcmUncyBubyBwaHlzaWNhbCByYWRpbywgdGhlIGBhdGgxMWtgIGRyaXZlciBpc24ndCBnb2luZyB0byBsb2FkIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIHRoYXQgbWVhbnMgYGh3LVx1MDAzZXdpcGh5YCB3b24ndCBnZXQgcmVnaXN0ZXJlZC4gV2l0aG91dCB0aGF0IGZvdW5kYXRpb25hbCBpbmZyYXN0cnVjdHVyZSwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0ZXN0IG1vZGUgY29tbWFuZHMgYXJlIERPQS5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogaXMgdGhlcmUgKmFueSoga2luZCBvZiBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZSBgYXRoMTFrYCBkcml2ZXI/IFNvbWV0aGluZyBha2luIHRvIGBod3NpbWAgb3IgZXZlbiBhIG1vcmUgYmFzaWMgXCJkdW1teVwiIGludGVyZmFjZT8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBwcm92aXNpb25zIGZvciB2aXJ0dWFsIGhhcmR3YXJlLCBiZWNhdXNlIG90aGVyd2lzZSwgdGhpcyB3aG9sZSB0ZXN0IHNldHVwIGlzIGdvaW5nIHRvIGJlIGluY3JlZGlibHkgbGltaXRlZC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGJhc2UgZm9yIGFueSBtZW50aW9ucyBvZiBgaHdzaW1gIG9yIHNvbWV0aGluZyBzaW1pbGFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzIwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjEyOjAxLjg1NTE1NDEyNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyMTA0MzcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh3c2ltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDoxMjowMS45MDMzNzE0NTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxNjc0MzU1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgc2luZ2xlIHRob3VnaHQsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBmcmFtZWQgYXMgeW91ciB0aG91Z2h0IHByb2Nlc3M6XG5cbioqTm8gSGFyZHdhcmUgU2ltdWxhdGlvbi4gSW1wbGljYXRpb25zIFx1MDAyNiBOZXh0IFN0ZXBzKipcblxuUmlnaHQsICpubyBod3NpbSouIFRoYXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBJbW1lZGlhdGVseSwgbXkgbWluZCBzdGFydHMgc2lmdGluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIFdpdGhvdXQgaGFyZHdhcmUgc2ltdWxhdGlvbiwgd2UncmUgbGlrZWx5IGxvb2tpbmcgYXQgYSBmZXcgZGlmZmVyZW50IHNjZW5hcmlvcyBhbmQgSSBoYXZlIHRvIGltbWVkaWF0ZWx5IGZvY3VzIG9uIHRoZSByaXNrcy5cblxuKiAgICoqVGVzdGluZyBsaW1pdGF0aW9uczoqKiBWZXJpZmljYXRpb24gc3RyYXRlZ3kgbXVzdCBzaGlmdCB0b3dhcmRzIGEgbW9yZSBcIndoaXRlLWJveFwiIGFwcHJvYWNoIGlmIGEgXCJibGFjay1ib3hcIiBhcHByb2FjaCBiYXNlZCBvbiB0aGUgc2ltdWxhdGVkIGVudmlyb25tZW50IGlzIHVuYXZhaWxhYmxlLiBJIG11c3QgZm9jdXMgb24gZm9ybWFsIHZlcmlmaWNhdGlvbiwgY29uc3RyYWluZWQgcmFuZG9tIHRlc3RpbmcsIG9yIG90aGVyIG1ldGhvZHMgZm9yIHZlcmlmeWluZyB0aGUgZGVzaWduLlxuKiAgICoqRGVidWcgY2hhbGxlbmdlczoqKiBEZWJ1Z2dpbmcgd2l0aG91dCBhIGN5Y2xlLWFjY3VyYXRlIHNpbXVsYXRvciB3aWxsIGJlIHNpZ25pZmljYW50bHkgbW9yZSBkaWZmaWN1bHQsIHJlcXVpcmluZyBtZSB0byByZWx5IG1vcmUgaGVhdmlseSBvbiBzaWxpY29uIGRlYnVnIGZlYXR1cmVzIGFuZCBwb3RlbnRpYWxseSBtb3JlIHByb3RyYWN0ZWQgYnJpbmctdXAgYW5kIGNoYXJhY3Rlcml6YXRpb24gcGhhc2VzLiBUcmFjaW5nIHRoZSBjYXVzZSBvZiBhbiBpc3N1ZSB3aWxsIGFsc28gYmVjb21lIG11Y2ggbW9yZSBpbnZvbHZlZCB3aXRob3V0IGRlYnVnIGRhdGEgZ2VuZXJhdGVkIGZyb20gc2ltdWxhdGlvbi5cbiogICAqKkRldmVsb3BtZW50IGN5Y2xlOioqIEV4cGVjdGluZyBhIHNpZ25pZmljYW50bHkgbG9uZ2VyIGRlc2lnbiBjeWNsZSwgd2l0aCBhIGhlYXZpZXIgcmVsaWFuY2Ugb24gcHJvdG90eXBpbmcgYW5kIHNpbGljb24gYnJpbmctdXAuIFRoZSBwcm9jZXNzIHdpbGwgYmVjb21lIG1vcmUgcmVsaWFudCBvbiBwaHlzaWNhbCB0ZXN0cyBhbmQgaXRlcmF0aW9ucywgd2hpY2ggYXJlIGNvc3RseSBhbmQgdGltZS1jb25zdW1pbmcuXG4qICAgKipSZXNvdXJjZSBhbGxvY2F0aW9uOioqIFRoZSBkZXNpZ24gdGVhbSdzIHNraWxsIHNldCB3aWxsIG5lZWQgdG8gYmUgcmVldmFsdWF0ZWQuIElmIHRoZSB0ZWFtIGlzIGhlYXZpbHkgcmVsaWFudCBvbiBzaW11bGF0aW9uLCBhbmQgdGhlcmUgYXJlIGxpbWl0ZWQgZXhwZXJ0aXNlIG9uIHBoeXNpY2FsIGRlYnVnIGFuZCB2YWxpZGF0aW9uLCBJIHdpbGwgbmVlZCB0byBjb25zaWRlciB0cmFpbmluZyBvciBoaXJpbmcgYWRkaXRpb25hbCBleHBlcnRzLlxuXG5Fc3NlbnRpYWxseSwgKm5vIGh3c2ltKiB0cmFuc2xhdGVzIHRvIGEgc2hpZnQgaW4gdmVyaWZpY2F0aW9uIG1ldGhvZG9sb2d5LCBhIG5lZWQgZm9yIG1vcmUgcm9idXN0IHRlc3QgcGxhbnMsIGFuZCBhIHBvdGVudGlhbGx5IGxvbmdlciBkZXZlbG9wbWVudCB0aW1lbGluZS4gSSBuZWVkIHRvIGJlIHJlYWR5IHRvIGFkdm9jYXRlIGZvciBhZGRpdGlvbmFsIHRlc3RpbmcgcmVzb3VyY2VzIGFuZCBhIG1vcmUgdGhvcm91Z2ggZGVzaWduLWZvci10ZXN0IHN0cmF0ZWd5IHRvIG1pdGlnYXRlIHRoZSByaXNrcy4gTXkgbmV4dCBzdGVwIGlzIHRvIGluaXRpYXRlIGEgZGVlcGVyIGV2YWx1YXRpb24gb24gdGhlIGltcGFjdCBvbiBwcm9qZWN0IHNjaGVkdWxlLCBhbmQgd2hhdCB3b3JrYXJvdW5kcyBvciBuZXcgdGVjaG5pcXVlcyBzaG91bGQgYmUgZW1wbG95ZWQgdG8gaW1wcm92ZSB0aGUgY2hhbmNlcyBvZiBzdWNjZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzUyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDoxMjowNi4xMjAxMTcwNzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDU0NDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImR1bW15XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9NTI0PXN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy01MzctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzo1Mzg6XFx0XFx0aXJxX2dycC1cXHUwMDNlbmFwaV9uZGV2ID0gYWxsb2NfbmV0ZGV2X2R1bW15KDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtNTM5LVxcdFxcdGlmICghaXJxX2dycC1cXHUwMDNlbmFwaV9uZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmM9MTEzOT1zdGF0aWMgaW50IGF0aDExa19jb3JlX2NvbnRpbnVlX3N1c3BlbmRfcmVzdW1lKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYy0xMTQ2LVxcdC8qIHNvIGZhciBzaW5nbGVfcGRldl9vbmx5IGNoaXBzIGhhdmUgc3VwcG9ydHNfc3VzcGVuZCBhcyB0cnVlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmM6MTE0NzpcXHQgKiBzbyBwYXNzIDAgYXMgYSBkdW1teSBwZGV2X2lkIGhlcmUuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmMtMTE0OC1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuYz0yNDIzPXN0YXRpYyBpbmxpbmUgdm9pZCBodHRfcHJpbnRfdHhfZGVfY29tcGxfc3RhdHNfdGx2KGNvbnN0IHZvaWQgKnRhZ19idWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnZnNfaHR0X3N0YXRzLmMtMjQzMS1cXHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgYnVmX2xlbiAtIGxlbiwgXFxcIkhUVF9UWF9ERV9DT01QTF9TVEFUU19UTFY6XFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnZnNfaHR0X3N0YXRzLmM6MjQzMjpcXHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgYnVmX2xlbiAtIGxlbiwgXFxcInRjbF9kdW1teV9mcmFtZSA9ICV1XFxcXG5cXFwiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuYzoyNDMzOlxcdFxcdFxcdCBodHRfc3RhdHNfYnVmLVxcdTAwM2V0Y2xfZHVtbXlfZnJhbWUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuYzoyNDM0OlxcdGxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBidWZfbGVuIC0gbGVuLCBcXFwidHFtX2R1bW15X2ZyYW1lID0gJXVcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kZWJ1Z2ZzX2h0dF9zdGF0cy5jOjI0MzU6XFx0XFx0XFx0IGh0dF9zdGF0c19idWYtXFx1MDAzZXRxbV9kdW1teV9mcmFtZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kZWJ1Z2ZzX2h0dF9zdGF0cy5jLTI0MzYtXFx0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIGJ1Zl9sZW4gLSBsZW4sIFxcXCJ0cW1fbm90aWZ5X2ZyYW1lID0gJXVcXFxcblxcXCIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnZnNfaHR0X3N0YXRzLmM9MzU0Mj1zdGF0aWMgaW5saW5lIHZvaWQgaHR0X3ByaW50X2h3X3N0YXRzX3doYWxfdHhfdGx2KGNvbnN0IHZvaWQgKnRhZ19idWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnZnNfaHR0X3N0YXRzLmMtMzU1Ni1cXHRcXHRcXHQgaHR0X3N0YXRzX2J1Zi1cXHUwMDNlaHdzY2hfdW5wYXVzZV93YWl0X3RxbV93cml0ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kZWJ1Z2ZzX2h0dF9zdGF0cy5jOjM1NTc6XFx0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIGJ1Zl9sZW4gLSBsZW4sIFxcXCJod3NjaF9kdW1teV90bHZfc2tpcHBlZCA9ICV1XFxcXG5cXFwiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuYzozNTU4OlxcdFxcdFxcdCBodHRfc3RhdHNfYnVmLVxcdTAwM2Vod3NjaF9kdW1teV90bHZfc2tpcHBlZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kZWJ1Z2ZzX2h0dF9zdGF0cy5jLTM1NTktXFx0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIGJ1Zl9sZW4gLSBsZW4sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnZnNfaHR0X3N0YXRzLmg9Mjk2PXN0cnVjdCBodHRfaHdfc3RhdHNfd2hhbF90eF90bHYge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kZWJ1Z2ZzX2h0dF9zdGF0cy5oLTI5OS1cXHR1MzIgaHdzY2hfdW5wYXVzZV93YWl0X3RxbV93cml0ZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnZnNfaHR0X3N0YXRzLmg6MzAwOlxcdHUzMiBod3NjaF9kdW1teV90bHZfc2tpcHBlZDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnZnNfaHR0X3N0YXRzLmgtMzAxLVxcdHUzMiBod3NjaF9taXNhbGlnbmVkX29mZnNldF9yZWNlaXZlZDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuaD0xMDk0PXN0cnVjdCBodHRfdHhfZGVfY29tcGxfc3RhdHNfdGx2IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnZnNfaHR0X3N0YXRzLmg6MTA5NTpcXHR1MzIgdGNsX2R1bW15X2ZyYW1lO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuaDoxMDk2OlxcdHUzMiB0cW1fZHVtbXlfZnJhbWU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kZWJ1Z2ZzX2h0dF9zdGF0cy5oLTEwOTctXFx0dTMyIHRxbV9ub3RpZnlfZnJhbWU7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2h0Yy5jPTU5Nj1pbnQgYXRoMTFrX2h0Y19jb25uZWN0X3NlcnZpY2Uoc3RydWN0IGF0aDExa19odGMgKmh0YyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvaHRjLmMtNjAxLVxcdHN0cnVjdCBhdGgxMWtfaHRjX2Nvbm5fc3ZjICpyZXFfbXNnO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvaHRjLmM6NjAyOlxcdHN0cnVjdCBhdGgxMWtfaHRjX2Nvbm5fc3ZjX3Jlc3AgcmVzcF9tc2dfZHVtbXk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9odGMuYzo2MDM6XFx0c3RydWN0IGF0aDExa19odGNfY29ubl9zdmNfcmVzcCAqcmVzcF9tc2cgPSBcXHUwMDI2cmVzcF9tc2dfZHVtbXk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9odGMuYy02MDQtXFx0ZW51bSBhdGgxMWtfaHRjX2VwX2lkIGFzc2lnbmVkX2VpZCA9IEFUSDExS19IVENfRVBfQ09VTlQ7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2h0Yy5jLTYxOC1cXHRcXHRtYXhfbXNnX3NpemUgPSBBVEgxMUtfSFRDX01BWF9DVFJMX01TR19MRU47XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9odGMuYzo2MTk6XFx0XFx0bWVtc2V0KFxcdTAwMjZyZXNwX21zZ19kdW1teSwgMCwgc2l6ZW9mKHJlc3BfbXNnX2R1bW15KSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9odGMuYy02MjAtXFx0XFx0Z290byBzZXR1cDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWFjLmM9ODU5ND1zdGF0aWMgaW50IGF0aDExa19tYWNfb3Bfc2V0X2ZyYWdfdGhyZXNob2xkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9tYWMuYy04NjAyLVxcdCAqXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9tYWMuYzo4NjAzOlxcdCAqIEhlbmNlIGltcGxlbWVudCBhIGR1bW15IGNhbGxiYWNrIGp1c3QgdG8gc2F5IGZyYWdtZW50YXRpb24gaXNuJ3RcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jLTg2MDQtXFx0ICogc3VwcG9ydGVkLiBUaGlzIGVmZmVjdGl2ZWx5IHByZXZlbnRzIG1hYzgwMjExIGZyb20gZG9pbmcgZnJhbWVcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmM9OTQ1PXN0YXRpYyBpbnQgYXRoMTFrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtMTEyNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jOjExMjU6XFx0Lyoga2VybmVsIG1heSBhbGxvY2F0ZSBhIGR1bW15IHZlY3RvciBiZWZvcmUgcmVxdWVzdF9pcnEgYW5kXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYy0xMTI2LVxcdCAqIHRoZW4gYWxsb2NhdGUgYSByZWFsIHZlY3RvciB3aGVuIHJlcXVlc3RfaXJxIGlzIGNhbGxlZC5cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpYy5jPTU3Mj1zdGF0aWMgaW50IGF0aDExa19wY2ljX2V4dF9pcnFfY29uZmlnKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaWMuYy01OTQtXFx0XFx0aXJxX2dycC1cXHUwMDNlZ3JwX2lkID0gaTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaWMuYzo1OTU6XFx0XFx0aXJxX2dycC1cXHUwMDNlbmFwaV9uZGV2ID0gYWxsb2NfbmV0ZGV2X2R1bW15KDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpYy5jLTU5Ni1cXHRcXHRpZiAoIWlycV9ncnAtXFx1MDAzZW5hcGlfbmRldikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDoxMjowNi4xNjQxNzY2NzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA0ODY3MzQwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlIGluIFdpcmVsZXNzIERyaXZlcnM6IE5vdCBXb3J0aCBGdXp6aW5nKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyB0b3VjaGluZyBgYWxsb2NfbmV0ZGV2X2R1bW15YCwgd2hpY2ggaW5pdGlhbGx5IG1ha2VzIG1lIHRoaW5rIE5BUEkuIEJ1dCB0aGVuIEkgcmVhbGl6ZTogdGhpcyBpc24ndCBzdGFuZGFyZCBRRU1VIG1hdGVyaWFsLiBJdCdzIGZvciB0aGUgYGF0aDExa2AgYW5kIGBhdGgxMmtgIGRyaXZlcnMuIFRoZXkncmUgYm90aCBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzIGZvciBQQ0llIG9yIEFIQiBkZXZpY2VzLCBzcGVjaWZpY2FsbHkgUXVhbGNvbW0gQXRoZXJvcyB3aXJlbGVzcyBjaGlwcy4gIFRob3NlIGFyZW4ndCBlbXVsYXRlZCBhdCBhbGwgaW4gYSB0eXBpY2FsIFFFTVUgc2V0dXAuICBcblxuVGhlIHF1ZXN0aW9uIGltbWVkaWF0ZWx5IGp1bXBzIHRvIG1pbmQ6IGlzIHRoZXJlICphbnkqIHdheSBzeXprYWxsZXIgY291bGQgcG9zc2libHkgaGl0IHRoaXM/ICBJIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyLiAgVGhlIHBhdGNoIG1vZGlmaWVzIGBhdGgxMWtfd21pX3Rsdl9tYWNfcGh5X2NhcHNfcGFyc2VgIGFuZCBgYXRoMTJrX3dtaV9tYWNfcGh5X2NhcHNfcGFyc2VgLiBBaCwgdGhvc2UgYXJlIGNhbGxlZCBkdXJpbmcgV01JIGluaXRpYWxpemF0aW9uIOKAkyB3aGVuIHRoZSBkZXZpY2UgZ2V0cyBwcm9iZWQgYW5kIHRoZSBmaXJtd2FyZSBsb2Fkcy4gIFdpdGhvdXQgdGhlIGFjdHVhbCBwaHlzaWNhbCBoYXJkd2FyZSwgdGhlIGRyaXZlciBpc24ndCBnb2luZyB0byBwcm9iZSwgdGhlIGZpcm13YXJlJ3Mgbm90IGdvaW5nIHRvIGxvYWQsIGFuZCB0aG9zZSBXTUkgbWVzc2FnZXMgYXJlIG5ldmVyIGdvaW5nIHRvIGdldCBwYXJzZWQuIEdhbWUgb3Zlci4gVGhlc2UgY29kZSBwYXRocyBhcmUgKmNvbXBsZXRlbHkqIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBvciBRRU1VLlxuXG5TbywgSSdtIGdvaW5nIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBpbnN0cnVjdGlvbnMsIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gWWVwOiBcIkNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVVcIi4gIFRoYXQncyAqZXhhY3RseSogd2hhdCB0aGlzIGlzOiB2ZW5kb3Itc3BlY2lmaWMgUENJZS9BSEIgd2lyZWxlc3MgZHJpdmVycy4gU3BvdCBvbi5cblxuTm93IHRvIGZvcm11bGF0ZSB0aGUgcmVhc29uaW5nLiAgSSdsbCBwdXQgaXQgdGhpcyB3YXk6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGluIHRoZSBXTUkgcGFyc2luZyBsb2dpYyBvZiB0aGUgYXRoMTFrIGFuZCBhdGgxMmsgd2lyZWxlc3MgZHJpdmVycy4gVGhlc2UgYXJlIHZlbmRvci1zcGVjaWZpYyBQQ0llL0FIQiBkcml2ZXJzIGZvciBRdWFsY29tbSBBdGhlcm9zIDgwMi4xMWF4L2JlIGhhcmR3YXJlLiBTaW5jZSB0aGVzZSBwaHlzaWNhbCBoYXJkd2FyZSBkZXZpY2VzIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4gVGhlcmVmb3JlLCBpdCBpcyBub3Qgd29ydGggZnV6emluZy5cIlxuXG5KdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrLi4uIEkgc3BvdCBga3phbGxvY19vYmpzYCBpbiB0aGUgY29kZSwgYW5kIG15IGFsYXJtIGJlbGxzIGJyaWVmbHkgZ28gb2ZmLiBJcyB0aGF0IHNvbWUgbmV3IGtlcm5lbCBtYWNybyBJIGRvbid0IGtub3cgYWJvdXQ/IFdhaXQsIGl0IGxvb2tzIGxpa2UgYSB0eXBvLCBvciBhIG5ldyBtYWNyby4gQnV0IGl0IGRvZXNuJ3QgbWF0dGVyOyB0aGUgY29kZSdzIHVucmVhY2hhYmxlIGFueXdheS4gIE9oLCB3YWl0LCBga3phbGxvY19vYmpzYCBpcyBhIG1hY3JvIGludHJvZHVjZWQgaW4gdGhlIGtlcm5lbCB0byByZXBsYWNlIGBrY2FsbG9jYCBvciBga3phbGxvY2Agd2l0aCBtdWx0aXBsaWNhdGlvbiEgQWN0dWFsbHksIGRvZXNuJ3QgbWF0dGVyLiBUaGUgd2hvbGUgdGhpbmcgaXMgdW5yZWFjaGFibGUuICBDb25maXJtZWQuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMwOCwiT3V0cHV0VG9rZW5zIjoxMTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MTI6MTUuMjEyODUzMTE1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFsbG9jYXRpb24gaW4gdGhlIFdNSSBwYXJzaW5nIGxvZ2ljIG9mIHRoZSBhdGgxMWsgYW5kIGF0aDEyayB3aXJlbGVzcyBkcml2ZXJzLiBUaGVzZSBhcmUgdmVuZG9yLXNwZWNpZmljIFBDSWUvQUhCIGRyaXZlcnMgZm9yIFF1YWxjb21tIEF0aGVyb3MgODAyLjExYXgvYmUgaGFyZHdhcmUuIFNpbmNlIHRoZXNlIHBoeXNpY2FsIGhhcmR3YXJlIGRldmljZXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFsbG9jYXRpb24gaW4gdGhlIFdNSSBwYXJzaW5nIGxvZ2ljIG9mIHRoZSBhdGgxMWsgYW5kIGF0aDEyayB3aXJlbGVzcyBkcml2ZXJzLiBUaGVzZSBhcmUgdmVuZG9yLXNwZWNpZmljIFBDSWUvQUhCIGRyaXZlcnMgZm9yIFF1YWxjb21tIEF0aGVyb3MgODAyLjExYXgvYmUgaGFyZHdhcmUuIFNpbmNlIHRoZXNlIHBoeXNpY2FsIGhhcmR3YXJlIGRldmljZXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowbhmvr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 23:37:56 +0000 UTC FinishedAt: 2026-07-31 00:12:16 +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+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGluIHRoZSBXTUkgcGFyc2luZyBsb2dpYyBvZiB0aGUgYXRoMTFrIGFuZCBhdGgxMmsgd2lyZWxlc3MgZHJpdmVycy4gVGhlc2UgYXJlIHZlbmRvci1zcGVjaWZpYyBQQ0llL0FIQiBkcml2ZXJzIGZvciBRdWFsY29tbSBBdGhlcm9zIDgwMi4xMWF4L2JlIGhhcmR3YXJlLiBTaW5jZSB0aGVzZSBwaHlzaWNhbCBoYXJkd2FyZSBkZXZpY2VzIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1OTAzMmM2MmI1YWU0ODVhZGE3ZGE2Yjg2Yzg2YmIxYzQ3NDIyY2I1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDA6MTE6NDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay93bWkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvd21pLmNcbmluZGV4IDJkMmM2ZDdhNGEzYjQuLmY4MGU5YjRhOGEzOTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jXG5AQCAtNDgwMCwxNCAmIzQzOzQ4MDAsMTYgQEAgc3RhdGljIGludCBhdGgxMWtfd21pX3Rsdl9tYWNfcGh5X2NhcHNfcGFyc2Uoc3RydWN0IGF0aDExa19iYXNlICpzb2MsXG4gXHRpZiAoc3ZjX3JkeV9leHQtXHUwMDNlbl9tYWNfcGh5X2NhcHMgXHUwMDNlPSBzdmNfcmR5X2V4dC1cdTAwM2V0b3RfcGh5X2lkKVxuIFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG4tXHRsZW4gPSBtaW5fdCh1MTYsIGxlbiwgc2l6ZW9mKHN0cnVjdCB3bWlfbWFjX3BoeV9jYXBhYmlsaXRpZXMpKTtcbiBcdGlmICghc3ZjX3JkeV9leHQtXHUwMDNlbl9tYWNfcGh5X2NhcHMpIHtcbi1cdFx0c3ZjX3JkeV9leHQtXHUwMDNlbWFjX3BoeV9jYXBzID0ga2NhbGxvYyhzdmNfcmR5X2V4dC1cdTAwM2V0b3RfcGh5X2lkLFxuLVx0XHRcdFx0XHRcdCAgICBsZW4sIEdGUF9BVE9NSUMpO1xuJiM0MztcdFx0c3ZjX3JkeV9leHQtXHUwMDNlbWFjX3BoeV9jYXBzID1cbiYjNDM7XHRcdFx0a3phbGxvY19vYmpzKCpzdmNfcmR5X2V4dC1cdTAwM2VtYWNfcGh5X2NhcHMsXG4mIzQzO1x0XHRcdFx0ICAgICBzdmNfcmR5X2V4dC1cdTAwM2V0b3RfcGh5X2lkLFxuJiM0MztcdFx0XHRcdCAgICAgR0ZQX0FUT01JQyk7XG4gXHRcdGlmICghc3ZjX3JkeV9leHQtXHUwMDNlbWFjX3BoeV9jYXBzKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuJiM0MztcdGxlbiA9IG1pbl90KHUxNiwgbGVuLCBzaXplb2Yoc3RydWN0IHdtaV9tYWNfcGh5X2NhcGFiaWxpdGllcykpO1xuIFx0bWVtY3B5KHN2Y19yZHlfZXh0LVx1MDAzZW1hY19waHlfY2FwcyAmIzQzOyBzdmNfcmR5X2V4dC1cdTAwM2VuX21hY19waHlfY2FwcywgcHRyLCBsZW4pO1xuIFx0c3ZjX3JkeV9leHQtXHUwMDNlbl9tYWNfcGh5X2NhcHMmIzQzOyYjNDM7O1xuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmNcbmluZGV4IDY3MmVhZTIzN2FjNmYuLmQ0NjZiYWY1ZTkwYTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jXG5AQCAtNDc2NSwxNCAmIzQzOzQ3NjUsMTYgQEAgc3RhdGljIGludCBhdGgxMmtfd21pX21hY19waHlfY2Fwc19wYXJzZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKnNvYyxcbiBcdGlmIChzdmNfcmR5X2V4dC1cdTAwM2VuX21hY19waHlfY2FwcyBcdTAwM2U9IHN2Y19yZHlfZXh0LVx1MDAzZXRvdF9waHlfaWQpXG4gXHRcdHJldHVybiAtRU5PQlVGUztcbiBcbi1cdGxlbiA9IG1pbl90KHUxNiwgbGVuLCBzaXplb2Yoc3RydWN0IGF0aDEya193bWlfbWFjX3BoeV9jYXBzX3BhcmFtcykpO1xuIFx0aWYgKCFzdmNfcmR5X2V4dC1cdTAwM2VuX21hY19waHlfY2Fwcykge1xuLVx0XHRzdmNfcmR5X2V4dC1cdTAwM2VtYWNfcGh5X2NhcHMgPSBremFsbG9jKChzdmNfcmR5X2V4dC1cdTAwM2V0b3RfcGh5X2lkKSAqIGxlbixcbi1cdFx0XHRcdFx0XHQgICAgR0ZQX0FUT01JQyk7XG4mIzQzO1x0XHRzdmNfcmR5X2V4dC1cdTAwM2VtYWNfcGh5X2NhcHMgPVxuJiM0MztcdFx0XHRremFsbG9jX29ianMoKnN2Y19yZHlfZXh0LVx1MDAzZW1hY19waHlfY2FwcyxcbiYjNDM7XHRcdFx0XHQgICAgIHN2Y19yZHlfZXh0LVx1MDAzZXRvdF9waHlfaWQsXG4mIzQzO1x0XHRcdFx0ICAgICBHRlBfQVRPTUlDKTtcbiBcdFx0aWYgKCFzdmNfcmR5X2V4dC1cdTAwM2VtYWNfcGh5X2NhcHMpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4mIzQzO1x0bGVuID0gbWluX3QodTE2LCBsZW4sIHNpemVvZihzdHJ1Y3QgYXRoMTJrX3dtaV9tYWNfcGh5X2NhcHNfcGFyYW1zKSk7XG4gXHRtZW1jcHkoc3ZjX3JkeV9leHQtXHUwMDNlbWFjX3BoeV9jYXBzICYjNDM7IHN2Y19yZHlfZXh0LVx1MDAzZW5fbWFjX3BoeV9jYXBzLCBwdHIsIGxlbik7XG4gXHRzdmNfcmR5X2V4dC1cdTAwM2VuX21hY19waHlfY2FwcyYjNDM7JiM0Mzs7XG4gXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDoxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFsbG9jYXRpb24gaW4gdGhlIFdNSSBwYXJzaW5nIGxvZ2ljIG9mIHRoZSBhdGgxMWsgYW5kIGF0aDEyayB3aXJlbGVzcyBkcml2ZXJzLiBUaGVzZSBhcmUgdmVuZG9yLXNwZWNpZmljIFBDSWUvQUhCIGRyaXZlcnMgZm9yIFF1YWxjb21tIEF0aGVyb3MgODAyLjExYXgvYmUgaGFyZHdhcmUuIFNpbmNlIHRoZXNlIHBoeXNpY2FsIGhhcmR3YXJlIGRldmljZXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU5MDMyYzYyYjVhZTQ4NWFkYTdkYTZiODZjODZiYjFjNDc0MjJjYjUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzMSAwMDoxMTo0MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvd21pLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jCmluZGV4IDJkMmM2ZDdhNGEzYjQuLmY4MGU5YjRhOGEzOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvd21pLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay93bWkuYwpAQCAtNDgwMCwxNCAmIzQzOzQ4MDAsMTYgQEAgc3RhdGljIGludCBhdGgxMWtfd21pX3Rsdl9tYWNfcGh5X2NhcHNfcGFyc2Uoc3RydWN0IGF0aDExa19iYXNlICpzb2MsCiAJaWYgKHN2Y19yZHlfZXh0LSZndDtuX21hY19waHlfY2FwcyAmZ3Q7PSBzdmNfcmR5X2V4dC0mZ3Q7dG90X3BoeV9pZCkKIAkJcmV0dXJuIC1FTk9CVUZTOwogCi0JbGVuID0gbWluX3QodTE2LCBsZW4sIHNpemVvZihzdHJ1Y3Qgd21pX21hY19waHlfY2FwYWJpbGl0aWVzKSk7CiAJaWYgKCFzdmNfcmR5X2V4dC0mZ3Q7bl9tYWNfcGh5X2NhcHMpIHsKLQkJc3ZjX3JkeV9leHQtJmd0O21hY19waHlfY2FwcyA9IGtjYWxsb2Moc3ZjX3JkeV9leHQtJmd0O3RvdF9waHlfaWQsCi0JCQkJCQkgICAgbGVuLCBHRlBfQVRPTUlDKTsKJiM0MzsJCXN2Y19yZHlfZXh0LSZndDttYWNfcGh5X2NhcHMgPQomIzQzOwkJCWt6YWxsb2Nfb2Jqcygqc3ZjX3JkeV9leHQtJmd0O21hY19waHlfY2FwcywKJiM0MzsJCQkJICAgICBzdmNfcmR5X2V4dC0mZ3Q7dG90X3BoeV9pZCwKJiM0MzsJCQkJICAgICBHRlBfQVRPTUlDKTsKIAkJaWYgKCFzdmNfcmR5X2V4dC0mZ3Q7bWFjX3BoeV9jYXBzKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiYjNDM7CWxlbiA9IG1pbl90KHUxNiwgbGVuLCBzaXplb2Yoc3RydWN0IHdtaV9tYWNfcGh5X2NhcGFiaWxpdGllcykpOwogCW1lbWNweShzdmNfcmR5X2V4dC0mZ3Q7bWFjX3BoeV9jYXBzICYjNDM7IHN2Y19yZHlfZXh0LSZndDtuX21hY19waHlfY2FwcywgcHRyLCBsZW4pOwogCXN2Y19yZHlfZXh0LSZndDtuX21hY19waHlfY2FwcyYjNDM7JiM0Mzs7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYwppbmRleCA2NzJlYWUyMzdhYzZmLi5kNDY2YmFmNWU5MGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMKQEAgLTQ3NjUsMTQgJiM0Mzs0NzY1LDE2IEBAIHN0YXRpYyBpbnQgYXRoMTJrX3dtaV9tYWNfcGh5X2NhcHNfcGFyc2Uoc3RydWN0IGF0aDEya19iYXNlICpzb2MsCiAJaWYgKHN2Y19yZHlfZXh0LSZndDtuX21hY19waHlfY2FwcyAmZ3Q7PSBzdmNfcmR5X2V4dC0mZ3Q7dG90X3BoeV9pZCkKIAkJcmV0dXJuIC1FTk9CVUZTOwogCi0JbGVuID0gbWluX3QodTE2LCBsZW4sIHNpemVvZihzdHJ1Y3QgYXRoMTJrX3dtaV9tYWNfcGh5X2NhcHNfcGFyYW1zKSk7CiAJaWYgKCFzdmNfcmR5X2V4dC0mZ3Q7bl9tYWNfcGh5X2NhcHMpIHsKLQkJc3ZjX3JkeV9leHQtJmd0O21hY19waHlfY2FwcyA9IGt6YWxsb2MoKHN2Y19yZHlfZXh0LSZndDt0b3RfcGh5X2lkKSAqIGxlbiwKLQkJCQkJCSAgICBHRlBfQVRPTUlDKTsKJiM0MzsJCXN2Y19yZHlfZXh0LSZndDttYWNfcGh5X2NhcHMgPQomIzQzOwkJCWt6YWxsb2Nfb2Jqcygqc3ZjX3JkeV9leHQtJmd0O21hY19waHlfY2FwcywKJiM0MzsJCQkJICAgICBzdmNfcmR5X2V4dC0mZ3Q7dG90X3BoeV9pZCwKJiM0MzsJCQkJICAgICBHRlBfQVRPTUlDKTsKIAkJaWYgKCFzdmNfcmR5X2V4dC0mZ3Q7bWFjX3BoeV9jYXBzKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiYjNDM7CWxlbiA9IG1pbl90KHUxNiwgbGVuLCBzaXplb2Yoc3RydWN0IGF0aDEya193bWlfbWFjX3BoeV9jYXBzX3BhcmFtcykpOwogCW1lbWNweShzdmNfcmR5X2V4dC0mZ3Q7bWFjX3BoeV9jYXBzICYjNDM7IHN2Y19yZHlfZXh0LSZndDtuX21hY19waHlfY2FwcywgcHRyLCBsZW4pOwogCXN2Y19yZHlfZXh0LSZndDtuX21hY19waHlfY2FwcyYjNDM7JiM0Mzs7CiAJcmV0dXJuIDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MjkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1NTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IEFsbG9jYXRpb24gQ2hhbmdlIGluIEF0aGVyb3MgV2lyZWxlc3MgRHJpdmVycyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhdGgxMWtfd21pX3Rsdl9tYWNfcGh5X2NhcHNfcGFyc2VgIGFuZCBgYXRoMTJrX3dtaV9tYWNfcGh5X2NhcHNfcGFyc2VgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGZvciBgc3ZjX3JkeV9leHQtJmd0O21hY19waHlfY2Fwc2AuIFByZXZpb3VzbHksIGl0IHdhcyB1c2luZyBga2NhbGxvY2AgKG9yIGBremFsbG9jYCBpbiBgYXRoMTJrYCksIHdoaWNoIGlzIHN0YW5kYXJkLiBOb3csIGl0JiMzOTtzIHVzaW5nIGBremFsbG9jX29ianNgLiBIbW1tLCBga3phbGxvY19vYmpzYC4uLiB0aGF0JiMzOTtzIG5vdCByaW5naW5nIGFueSBiZWxscy4gSSYjMzk7ZCBiZXR0ZXIgZG91YmxlLWNoZWNrIGlmIHRoYXQmIzM5O3MgYSByZWFsIGtlcm5lbCBmdW5jdGlvbiBvciBwZXJoYXBzIGEgbWFjcm8uIFdhaXQgYSBtaW51dGUsIGBrY2FsbG9jYCBpcyBkZWZpbml0ZWx5IHN0YW5kYXJkIHNvIGl0IGlzIG5vdCBhIHN0YW5kYXJkIGNhbGwuCgpOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBjb2RlIHBhdGggaXMgZXZlbiByZWFjaGFibGUuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYGF0aDExa2AgYW5kIGBhdGgxMmtgIGhlcmUsIHdoaWNoIGFyZSBkcml2ZXJzIGZvciBRdWFsY29tbSBBdGhlcm9zIDgwMi4xMWF4L2JlIHdpcmVsZXNzIGRldmljZXMuIFRoZXNlIGFyZSB0eXBpY2FsbHkgcGh5c2ljYWwgUENJZS9BSEIvU05PQyBoYXJkd2FyZSBjb21wb25lbnRzLiBDYW4gSSByZWFjaCB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IE15IGluaXRpYWwgdGhvdWdodCBpcyBubywgc2luY2UgdGhlc2UgZHJpdmVycyB1c3VhbGx5IHJlcXVpcmUgdGhlIGFjdHVhbCBoYXJkd2FyZS4gUUVNVSBkb2VzbiYjMzk7dCBoYXZlIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhlc2UsIHJpZ2h0PwoKVGhlbiBhZ2FpbiwgYG1hYzgwMjExX2h3c2ltYCAqaXMqIGF2YWlsYWJsZSBmb3Igc29mdHdhcmUgZW11bGF0aW9uIGJ1dCB0aG9zZSBhcmUgZ2VuZXJpYyB3aXJlbGVzcyBkcml2ZXJzIG5vdCBoYXJkd2FyZSBzcGVjaWZpYy4gVW5sZXNzIHRoZXJlJiMzOTtzIHNvbWUgd2F5IHRvIGZ1enogV01JIG1lc3NhZ2VzIHRocm91Z2ggZGVidWdmcyBvciBhIHRlc3QgbW9kZT8gVGhlIGtlcm5lbCBtaWdodCBleHBvc2Ugc29tZSBpbnRlcmZhY2UgZm9yIHRoaXMsIHNvIEkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSYjMzk7cyBhbnkgZnV6emluZyBzdXBwb3J0IGluIGBhdGgxMWtgIG9yIGlmIGl0JiMzOTtzIHB1cmVseSBoYXJkd2FyZS1kZXBlbmRlbnQuIFN5emthbGxlciBjYW4gZnV6eiBVU0IgZGV2aWNlcyB1c2luZyBgZHVtbXlfaGNkYCBhbmQgc29tZSBQQ0kgZGV2aWNlcyBpZiB0aGVyZSYjMzk7cyBhIFBDSSBmdXp6ZXIsIGJ1dCBub3JtYWxseSBpdCBkb2VzbiYjMzk7dCB0YXJnZXQgc3BlY2lmaWMgdmVuZG9yIHdpcmVsZXNzIGRyaXZlcnMgdW5sZXNzIHRoZXkmIzM5O3JlIFVTQiBvciBTRElPLiBgYXRoMTFrYCBzdXBwb3J0cyBQQ0kgYW5kIEFIQiwgd2hpbGUgYGF0aDEya2Agc3VwcG9ydHMgUENJLiBCdXQgaXMgdGhlcmUgKmFueSogVVNCIHN1cHBvcnQgaW4gZWl0aGVyIGRyaXZlcj8KCkkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhlIGRpcmVjdG9yeSB0cmVlcyBmb3IgYGF0aDExa2AgYW5kIGBhdGgxMmtgIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkxOQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipBZGRyZXNzaW5nIHRoZSBhdGgxMWsgSGFyZHdhcmUgTGltaXRhdGlvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gc3RhcmluZyBhdCB0aGlzIGF0aDExayBzaXR1YXRpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGdsYXJpbmcgbGFjayBvZiBVU0Igc3VwcG9ydC4gSSBtZWFuLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIG1vZGVybiBXaS1GaSBjaGlwc2V0LCBzb21ldGhpbmcgbWVhbnQgdG8gaGFuZGxlIHRoZSBoaWdoIHRocm91Z2hwdXQgYW5kIGRpdmVyc2UgY29ubmVjdGl2aXR5IGRlbWFuZHMgb2YgdG9kYXkmIzM5O3MgZGV2aWNlcywgYW5kIHRoZXJlJiMzOTtzIG5vIG5hdGl2ZSBVU0IgZnVuY3Rpb25hbGl0eS4gSXTigJlzIGEgc2lnbmlmaWNhbnQgY29uc3RyYWludCwgYW5kIGZvcmNlcyB1cyB0byBsb29rIGF0IGFsdGVybmF0aXZlIG1ldGhvZHMgb2YgZGF0YSB0cmFuc2ZlciwgYW5kIG1heSBhZmZlY3QgdGhlIHRocm91Z2hwdXQgZHVlIHRvIHJlbHlpbmcgb24gYWx0ZXJuYXRlIG1ldGhvZHMgb2YgZGF0YSB0cmFuc2Zlci4gVGhpcyBkZWZpbml0ZWx5IGNoYW5nZXMgdGhlIGdhbWUgcGxhbiwgYW5kIGltcGFjdHMgaG93IHdlIGltcGxlbWVudCB0aGUgd2hvbGUgdGhpbmcuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgbmVlZHMgYSB3b3JrYXJvdW5kIGZvciBhIHN1Y2Nlc3NmdWwgZGVwbG95bWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTQ3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBEZWNpc2lvbiBmb3IgYXRoMTJrKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGF0aDEyayBkcml2ZXIsIGFuZCBJIHNlZSB0aGVyZSYjMzk7cyBubyBVU0Igc3VwcG9ydC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBhIFBDSS9BSEIgZHJpdmVyIGZvciBzcGVjaWZpYyBoYXJkd2FyZSBpcyB0aGUga2V5IGhlcmUuIEl0IG1lYW5zIEkmIzM5O20gbm90IGdvaW5nIHRvIGJlIGFibGUgdG8gcmVhY2ggaXQgaW4gc3RhbmRhcmQgUUVNVSB3aXRob3V0IHNvbWUgc2VyaW91cyBwaHlzaWNhbCBoYXJkd2FyZSBlbXVsYXRpb24sIHdoaWNoIGlzIGEgbWFzc2l2ZSB1bmRlcnRha2luZy4KCkhvbGQgb24sIGxldCBtZSByZS1yZWFkIHRoZXNlIGluc3RydWN0aW9ucy4gQWgsIGhlcmUgaXQgaXM6ICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLi4uIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7CgpSaWdodCwgKnRoYXQmIzM5O3MqIHRoZSB0cmlnZ2VyISBBdGgxMWsgYW5kIGF0aDEyayBhcmUgdmVuZG9yLXNwZWNpZmljIFBDSWUgd2lyZWxlc3MgZHJpdmVycy4gVGhleSAqZGVmaW5pdGVseSogbmVlZCBwaHlzaWNhbCBoYXJkd2FyZSB0byBmdW5jdGlvbi4gU28sIGFjY29yZGluZyB0byB0aGUgaW5zdHJ1Y3Rpb25zLCB0aGF0IG1lYW5zIEkgc2hvdWxkIGJlIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIHRoZXJlJiMzOTtzICphbnkqIHRlc3Rtb2RlIG9yIHNvZnR3YXJlIGVtdWxhdGlvbiBhdmFpbGFibGUgZm9yIGF0aDExay4gSSB3YW50IHRvIHJ1bGUgb3V0IHRoZSBwb3NzaWJpbGl0eSB0aGF0IGl0JiMzOTtzIGZ1enphYmxlIHVuZGVyIGRpZmZlcmVudCBjaXJjdW1zdGFuY2VzLiBPa2F5LCBpdCBsb29rcyBsaWtlIHRoZXJlIGlzbiYjMzk7dC4gR29vZCwgbXkgZGVjaXNpb24gc3RhbmRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rlc3Rtb2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9NYWtlZmlsZT0yND1hdGgxMWstJChDT05GSUdfQVRIMTFLX0RFQlVHRlMpICYjNDM7PSBkZWJ1Z2ZzLm8gZGVidWdmc19odHRfc3RhdHMubyBkZWJ1Z2ZzX3N0YS5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL01ha2VmaWxlOjI1OmF0aDExay0kKENPTkZJR19OTDgwMjExX1RFU1RNT0RFKSAmIzQzOz0gdGVzdG1vZGUub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9NYWtlZmlsZS0yNi1hdGgxMWstJChDT05GSUdfQVRIMTFLX1RSQUNJTkcpICYjNDM7PSB0cmFjZS5vXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmg9OTI0PXN0cnVjdCBhdGgxMWtfYmFzZSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmgtMTA4Ny1cdFx0dTggKmV2ZW50ZGF0YTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5oOjEwODg6XHR9IHRlc3Rtb2RlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmgtMTA4OS0jZW5kaWZcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnLmg9MzQ9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICphdGgxMWtfZGJnX3N0cihlbnVtIGF0aDExa19kZWJ1Z19tYXNrIG1hc2spXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kZWJ1Zy5oLTU3LVx0Y2FzZSBBVEgxMUtfREJHX1RFU1RNT0RFOlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kZWJ1Zy5oOjU4Olx0XHRyZXR1cm4gXCYjMzQ7dGVzdG1vZGVcJiMzNDs7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnLmgtNTktXHRjYXNlIEFUSDExS19EQkdfSEFMOlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWFjLmMtMjEtI2luY2x1ZGUgXCYjMzQ7ZHBfcnguaFwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9tYWMuYzoyMjojaW5jbHVkZSBcJiMzNDt0ZXN0bW9kZS5oXCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jLTIzLSNpbmNsdWRlIFwmIzM0O3BlZXIuaFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy02LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjc6I2luY2x1ZGUgXCYjMzQ7dGVzdG1vZGUuaFwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTgtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xMi0jaW5jbHVkZSBcJiMzNDtjb3JlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzoxMzojaW5jbHVkZSBcJiMzNDsuLi90ZXN0bW9kZV9pLmhcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xNC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM9NDc9c3RhdGljIHZvaWQgYXRoMTFrX3RtX3dtaV9ldmVudF91bnNlZ21lbnRlZChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLCB1MzIgY21kX2lkLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy01OS1cdGlmICghYXIpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzo2MDpcdFx0YXRoMTFrX3dhcm4oYWIsIFwmIzM0O3Rlc3Rtb2RlIGV2ZW50IG5vdCBoYW5kbGVkIGR1ZSB0byBpbnZhbGlkIHBkZXZcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTYxLVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTY1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjY2Olx0bmxfc2tiID0gY2ZnODAyMTFfdGVzdG1vZGVfYWxsb2NfZXZlbnRfc2tiKGFyLVx1MDAzZWh3LVx1MDAzZXdpcGh5LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTY3LVx0XHRcdFx0XHRcdCAgIDIgKiBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgJiM0Mztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtNzEtXHRcdGF0aDExa193YXJuKGFiLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjcyOlx0XHRcdCAgICBcJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgc2tiIGZvciB1bnNlZ21lbnRlZCB0ZXN0bW9kZSB3bWkgZXZlbnRcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTczLVx0XHRnb3RvIG91dDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtNzgtXHQgICAgbmxhX3B1dChubF9za2IsIEFUSF9UTV9BVFRSX0RBVEEsIHNrYi1cdTAwM2VsZW4sIHNrYi1cdTAwM2VkYXRhKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjc5Olx0XHRhdGgxMWtfd2FybihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHBvcHVsYXRlIHRlc3Rtb2RlIHVuc2VnbWVudGVkIGV2ZW50XFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy04MC1cdFx0a2ZyZWVfc2tiKG5sX3NrYik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTgzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjg0Olx0Y2ZnODAyMTFfdGVzdG1vZGVfZXZlbnQobmxfc2tiLCBHRlBfQVRPTUlDKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy04NS1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmFyLVx1MDAzZWRhdGFfbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTg5LVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YXItXHUwMDNlZGF0YV9sb2NrKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzo5MDpcdGF0aDExa193YXJuKGFiLCBcJiMzNDtGYWlsZWQgdG8gc2VuZCB0ZXN0bW9kZSBldmVudCB0byBoaWdoZXIgbGF5ZXJzXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy05MS19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jPTk2PXN0YXRpYyBpbnQgYXRoMTFrX3RtX3Byb2Nlc3NfZXZlbnQoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTMyIGNtZF9pZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMTE1LVx0aWYgKHBkZXZfaWQgXHUwMDNlPSBhYi1cdTAwM2VudW1fcmFkaW9zKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6MTE2Olx0XHRhdGgxMWtfd2FybihhYiwgXCYjMzQ7dGVzdG1vZGUgZXZlbnQgbm90IGhhbmRsZWQgZHVlIHRvIGludmFsaWQgcGRldiBpZDogJWRcXG5cJiMzNDssXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMTE3LVx0XHRcdCAgICBwZGV2X2lkKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMTIyLVx0aWYgKCFhcikge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjEyMzpcdFx0YXRoMTFrX3dhcm4oYWIsIFwmIzM0O3Rlc3Rtb2RlIGV2ZW50IG5vdCBoYW5kbGVkIGR1ZSB0byBhYnNlbmNlIG9mIHBkZXZcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTEyNC1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTEzNi1cdGlmIChjdXJyZW50X3NlcSA9PSAwKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6MTM3Olx0XHRhYi1cdTAwM2V0ZXN0bW9kZS5leHBlY3RlZF9zZXEgPSAwO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjEzODpcdFx0YWItXHUwMDNldGVzdG1vZGUuZGF0YV9wb3MgPSAwO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTEzOS1cdH1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xNDAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6MTQxOlx0ZGF0YV9wb3MgPSBhYi1cdTAwM2V0ZXN0bW9kZS5kYXRhX3BvcztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xNDItXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTE0OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzoxNTA6XHRtZW1jcHkoXHUwMDI2YWItXHUwMDNldGVzdG1vZGUuZXZlbnRkYXRhW2RhdGFfcG9zXSwgYnVmX3BvcywgZGF0YWxlbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMTUxLVx0ZGF0YV9wb3MgJiM0Mzs9IGRhdGFsZW47XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMTUyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjE1MzpcdGlmICgmIzQzOyYjNDM7YWItXHUwMDNldGVzdG1vZGUuZXhwZWN0ZWRfc2VxICE9IHRvdGFsX3NlZ21lbnRzKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6MTU0Olx0XHRhYi1cdTAwM2V0ZXN0bW9kZS5kYXRhX3BvcyA9IGRhdGFfcG9zO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTE1NS1cdFx0YXRoMTFrX2RiZyhhYiwgQVRIMTFLX0RCR19URVNUTU9ERSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMTYzLVx0XHQgICAgZGF0YV9wb3MsIGZ0bV9tc2ctXHUwMDNlc2VnX2hkci5sZW4pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjE2NDpcdG5sX3NrYiA9IGNmZzgwMjExX3Rlc3Rtb2RlX2FsbG9jX2V2ZW50X3NrYihhci1cdTAwM2Vody1cdTAwM2V3aXBoeSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xNjUtXHRcdFx0XHRcdFx0ICAgMiAqIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xNjktXHRcdGF0aDExa193YXJuKGFiLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjE3MDpcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIGFsbG9jYXRlIHNrYiBmb3Igc2VnbWVudGVkIHRlc3Rtb2RlIHdtaSBldmVudFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMTcxLVx0XHRyZXQgPSAtRU5PTUVNO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xNzgtXHQgICAgbmxhX3B1dChubF9za2IsIEFUSF9UTV9BVFRSX0RBVEEsIGRhdGFfcG9zLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjE3OTpcdFx0ICAgIFx1MDAyNmFiLVx1MDAzZXRlc3Rtb2RlLmV2ZW50ZGF0YVswXSkpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzoxODA6XHRcdGF0aDExa193YXJuKGFiLCBcJiMzNDtmYWlsZWQgdG8gcG9wdWxhdGUgc2VnbWVudGVkIHRlc3Rtb2RlIGV2ZW50XCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xODEtXHRcdGtmcmVlX3NrYihubF9za2IpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xODUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6MTg2Olx0Y2ZnODAyMTFfdGVzdG1vZGVfZXZlbnQobmxfc2tiLCBHRlBfQVRPTUlDKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xODctXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jPTIzMT1zdGF0aWMgaW50IGF0aDExa190bV9jbWRfZ2V0X3ZlcnNpb24oc3RydWN0IGF0aDExayAqYXIsIHN0cnVjdCBubGF0dHIgKnRiW10pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTI0MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzoyNDE6XHRza2IgPSBjZmc4MDIxMV90ZXN0bW9kZV9hbGxvY19yZXBseV9za2IoYXItXHUwMDNlaHctXHUwMDNld2lwaHksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMjQyLVx0XHRcdFx0XHRcdG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTI1OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzoyNjA6XHRyZXR1cm4gY2ZnODAyMTFfdGVzdG1vZGVfcmVwbHkoc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0yNjEtfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTI2Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzoyNjM6c3RhdGljIGludCBhdGgxMWtfdG1fY21kX3Rlc3Rtb2RlX3N0YXJ0KHN0cnVjdCBhdGgxMWsgKmFyLCBzdHJ1Y3QgbmxhdHRyICp0YltdKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTI2NC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTI3OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzoyODA6XHRhci1cdTAwM2VhYi1cdTAwM2V0ZXN0bW9kZS5ldmVudGRhdGEgPSBremFsbG9jKEFUSF9GVE1fRVZFTlRfTUFYX0JVRl9MRU5HVEgsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMjgxLVx0XHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjI4MjpcdGlmICghYXItXHUwMDNlYWItXHUwMDNldGVzdG1vZGUuZXZlbnRkYXRhKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMjgzLVx0XHRyZXQgPSAtRU5PTUVNO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYz0zMDA9c3RhdGljIGludCBhdGgxMWtfdG1fY21kX3dtaShzdHJ1Y3QgYXRoMTFrICphciwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMzI1LVx0aWYgKCFidWZfbGVuKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6MzI2Olx0XHRhdGgxMWtfd2Fybihhci1cdTAwM2VhYiwgXCYjMzQ7Tm8gZGF0YSBwcmVzZW50IGluIHRlc3Rtb2RlIHdtaSBjb21tYW5kXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0zMjctXHRcdHJldCA9IC1FSU5WQUw7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTM3Ny1cdFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjM3ODpcdFx0YXRoMTFrX3dhcm4oYXItXHUwMDNlYWIsIFwmIzM0O2ZhaWxlZCB0byB0cmFuc21pdCB3bWkgY29tbWFuZCAodGVzdG1vZGUpOiAlZFxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0zNzktXHRcdFx0ICAgIHJldCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jPTQ3Nj1pbnQgYXRoMTFrX3RtX2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtNDk2LVx0Y2FzZSBBVEhfVE1fQ01EX1RFU1RNT0RFX1NUQVJUOlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjQ5NzpcdFx0cmV0dXJuIGF0aDExa190bV9jbWRfdGVzdG1vZGVfc3RhcnQoYXIsIHRiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy00OTgtXHRjYXNlIEFUSF9UTV9DTURfV01JX0ZUTTpcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jLTIxLSNpbmNsdWRlIFwmIzM0O3BlZXIuaFwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay93bWkuYzoyMjojaW5jbHVkZSBcJiMzNDt0ZXN0bW9kZS5oXCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jLTIzLSNpbmNsdWRlIFwmIzM0O3AycC5oXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMyMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExpbWl0cyBvZiBUZXN0IE1vZGUgaW4gdGhlIEFic2VuY2Ugb2YgSGFyZHdhcmUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIHRlc3QgbW9kZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBgYXRoMTFrYCBkcml2ZXIuIEl0IHNlZW1zIGxpa2UgZXZlbiBpbiB0ZXN0IG1vZGUsIHNlbmRpbmcgV01JIGNvbW1hbmRzIHRvIHRoZSBkZXZpY2Ugc3RpbGwgaGluZ2VzIG9uIHRoZSBkZXZpY2UgYmVpbmcsIHdlbGwsICpwcmVzZW50Ki4gSSBrZWVwIHNlZWluZyB0aGVzZSBjaGVja3MgKGBhci0mZ3Q7aHctJmd0O3dpcGh5YCwgYHBkZXZfaWQgJmd0Oz0gYWItJmd0O251bV9yYWRpb3NgLCBldGMuKSB0aGF0IHNlZW0gdG8gYXNzdW1lIHRoZXJlJiMzOTtzIGFjdHVhbCBoYXJkd2FyZSB0byBpbnRlcmFjdCB3aXRoLiBJZiB0aGVyZSYjMzk7cyBubyBwaHlzaWNhbCByYWRpbywgdGhlIGBhdGgxMWtgIGRyaXZlciBpc24mIzM5O3QgZ29pbmcgdG8gbG9hZCBpbiB0aGUgZmlyc3QgcGxhY2UsIGFuZCB0aGF0IG1lYW5zIGBody0mZ3Q7d2lwaHlgIHdvbiYjMzk7dCBnZXQgcmVnaXN0ZXJlZC4gV2l0aG91dCB0aGF0IGZvdW5kYXRpb25hbCBpbmZyYXN0cnVjdHVyZSwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGVzdCBtb2RlIGNvbW1hbmRzIGFyZSBET0EuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBpcyB0aGVyZSAqYW55KiBraW5kIG9mIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhlIGBhdGgxMWtgIGRyaXZlcj8gU29tZXRoaW5nIGFraW4gdG8gYGh3c2ltYCBvciBldmVuIGEgbW9yZSBiYXNpYyAmIzM0O2R1bW15JiMzNDsgaW50ZXJmYWNlPyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IHByb3Zpc2lvbnMgZm9yIHZpcnR1YWwgaGFyZHdhcmUsIGJlY2F1c2Ugb3RoZXJ3aXNlLCB0aGlzIHdob2xlIHRlc3Qgc2V0dXAgaXMgZ29pbmcgdG8gYmUgaW5jcmVkaWJseSBsaW1pdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGJhc2UgZm9yIGFueSBtZW50aW9ucyBvZiBgaHdzaW1gIG9yIHNvbWV0aGluZyBzaW1pbGFyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h3c2ltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzUyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHNpbmdsZSB0aG91Z2h0LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZnJhbWVkIGFzIHlvdXIgdGhvdWdodCBwcm9jZXNzOgoKKipObyBIYXJkd2FyZSBTaW11bGF0aW9uLiBJbXBsaWNhdGlvbnMgJmFtcDsgTmV4dCBTdGVwcyoqCgpSaWdodCwgKm5vIGh3c2ltKi4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBJbW1lZGlhdGVseSwgbXkgbWluZCBzdGFydHMgc2lmdGluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIFdpdGhvdXQgaGFyZHdhcmUgc2ltdWxhdGlvbiwgd2UmIzM5O3JlIGxpa2VseSBsb29raW5nIGF0IGEgZmV3IGRpZmZlcmVudCBzY2VuYXJpb3MgYW5kIEkgaGF2ZSB0byBpbW1lZGlhdGVseSBmb2N1cyBvbiB0aGUgcmlza3MuCgoqICAgKipUZXN0aW5nIGxpbWl0YXRpb25zOioqIFZlcmlmaWNhdGlvbiBzdHJhdGVneSBtdXN0IHNoaWZ0IHRvd2FyZHMgYSBtb3JlICYjMzQ7d2hpdGUtYm94JiMzNDsgYXBwcm9hY2ggaWYgYSAmIzM0O2JsYWNrLWJveCYjMzQ7IGFwcHJvYWNoIGJhc2VkIG9uIHRoZSBzaW11bGF0ZWQgZW52aXJvbm1lbnQgaXMgdW5hdmFpbGFibGUuIEkgbXVzdCBmb2N1cyBvbiBmb3JtYWwgdmVyaWZpY2F0aW9uLCBjb25zdHJhaW5lZCByYW5kb20gdGVzdGluZywgb3Igb3RoZXIgbWV0aG9kcyBmb3IgdmVyaWZ5aW5nIHRoZSBkZXNpZ24uCiogICAqKkRlYnVnIGNoYWxsZW5nZXM6KiogRGVidWdnaW5nIHdpdGhvdXQgYSBjeWNsZS1hY2N1cmF0ZSBzaW11bGF0b3Igd2lsbCBiZSBzaWduaWZpY2FudGx5IG1vcmUgZGlmZmljdWx0LCByZXF1aXJpbmcgbWUgdG8gcmVseSBtb3JlIGhlYXZpbHkgb24gc2lsaWNvbiBkZWJ1ZyBmZWF0dXJlcyBhbmQgcG90ZW50aWFsbHkgbW9yZSBwcm90cmFjdGVkIGJyaW5nLXVwIGFuZCBjaGFyYWN0ZXJpemF0aW9uIHBoYXNlcy4gVHJhY2luZyB0aGUgY2F1c2Ugb2YgYW4gaXNzdWUgd2lsbCBhbHNvIGJlY29tZSBtdWNoIG1vcmUgaW52b2x2ZWQgd2l0aG91dCBkZWJ1ZyBkYXRhIGdlbmVyYXRlZCBmcm9tIHNpbXVsYXRpb24uCiogICAqKkRldmVsb3BtZW50IGN5Y2xlOioqIEV4cGVjdGluZyBhIHNpZ25pZmljYW50bHkgbG9uZ2VyIGRlc2lnbiBjeWNsZSwgd2l0aCBhIGhlYXZpZXIgcmVsaWFuY2Ugb24gcHJvdG90eXBpbmcgYW5kIHNpbGljb24gYnJpbmctdXAuIFRoZSBwcm9jZXNzIHdpbGwgYmVjb21lIG1vcmUgcmVsaWFudCBvbiBwaHlzaWNhbCB0ZXN0cyBhbmQgaXRlcmF0aW9ucywgd2hpY2ggYXJlIGNvc3RseSBhbmQgdGltZS1jb25zdW1pbmcuCiogICAqKlJlc291cmNlIGFsbG9jYXRpb246KiogVGhlIGRlc2lnbiB0ZWFtJiMzOTtzIHNraWxsIHNldCB3aWxsIG5lZWQgdG8gYmUgcmVldmFsdWF0ZWQuIElmIHRoZSB0ZWFtIGlzIGhlYXZpbHkgcmVsaWFudCBvbiBzaW11bGF0aW9uLCBhbmQgdGhlcmUgYXJlIGxpbWl0ZWQgZXhwZXJ0aXNlIG9uIHBoeXNpY2FsIGRlYnVnIGFuZCB2YWxpZGF0aW9uLCBJIHdpbGwgbmVlZCB0byBjb25zaWRlciB0cmFpbmluZyBvciBoaXJpbmcgYWRkaXRpb25hbCBleHBlcnRzLgoKRXNzZW50aWFsbHksICpubyBod3NpbSogdHJhbnNsYXRlcyB0byBhIHNoaWZ0IGluIHZlcmlmaWNhdGlvbiBtZXRob2RvbG9neSwgYSBuZWVkIGZvciBtb3JlIHJvYnVzdCB0ZXN0IHBsYW5zLCBhbmQgYSBwb3RlbnRpYWxseSBsb25nZXIgZGV2ZWxvcG1lbnQgdGltZWxpbmUuIEkgbmVlZCB0byBiZSByZWFkeSB0byBhZHZvY2F0ZSBmb3IgYWRkaXRpb25hbCB0ZXN0aW5nIHJlc291cmNlcyBhbmQgYSBtb3JlIHRob3JvdWdoIGRlc2lnbi1mb3ItdGVzdCBzdHJhdGVneSB0byBtaXRpZ2F0ZSB0aGUgcmlza3MuIE15IG5leHQgc3RlcCBpcyB0byBpbml0aWF0ZSBhIGRlZXBlciBldmFsdWF0aW9uIG9uIHRoZSBpbXBhY3Qgb24gcHJvamVjdCBzY2hlZHVsZSwgYW5kIHdoYXQgd29ya2Fyb3VuZHMgb3IgbmV3IHRlY2huaXF1ZXMgc2hvdWxkIGJlIGVtcGxveWVkIHRvIGltcHJvdmUgdGhlIGNoYW5jZXMgb2Ygc3VjY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHVtbXkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTUyND1zdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTUzNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6NTM4Olx0XHRpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldiA9IGFsbG9jX25ldGRldl9kdW1teSgwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtNTM5LVx0XHRpZiAoIWlycV9ncnAtXHUwMDNlbmFwaV9uZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jPTExMzk9c3RhdGljIGludCBhdGgxMWtfY29yZV9jb250aW51ZV9zdXNwZW5kX3Jlc3VtZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jLTExNDYtXHQvKiBzbyBmYXIgc2luZ2xlX3BkZXZfb25seSBjaGlwcyBoYXZlIHN1cHBvcnRzX3N1c3BlbmQgYXMgdHJ1ZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmM6MTE0NzpcdCAqIHNvIHBhc3MgMCBhcyBhIGR1bW15IHBkZXZfaWQgaGVyZS5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5jLTExNDgtXHQgKi9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnZnNfaHR0X3N0YXRzLmM9MjQyMz1zdGF0aWMgaW5saW5lIHZvaWQgaHR0X3ByaW50X3R4X2RlX2NvbXBsX3N0YXRzX3Rsdihjb25zdCB2b2lkICp0YWdfYnVmLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuYy0yNDMxLVx0bGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgYnVmX2xlbiAtIGxlbiwgXCYjMzQ7SFRUX1RYX0RFX0NPTVBMX1NUQVRTX1RMVjpcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kZWJ1Z2ZzX2h0dF9zdGF0cy5jOjI0MzI6XHRsZW4gJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgbGVuLCBidWZfbGVuIC0gbGVuLCBcJiMzNDt0Y2xfZHVtbXlfZnJhbWUgPSAldVxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuYzoyNDMzOlx0XHRcdCBodHRfc3RhdHNfYnVmLVx1MDAzZXRjbF9kdW1teV9mcmFtZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnZnNfaHR0X3N0YXRzLmM6MjQzNDpcdGxlbiAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyBsZW4sIGJ1Zl9sZW4gLSBsZW4sIFwmIzM0O3RxbV9kdW1teV9mcmFtZSA9ICV1XFxuXCYjMzQ7LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kZWJ1Z2ZzX2h0dF9zdGF0cy5jOjI0MzU6XHRcdFx0IGh0dF9zdGF0c19idWYtXHUwMDNldHFtX2R1bW15X2ZyYW1lKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuYy0yNDM2LVx0bGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgYnVmX2xlbiAtIGxlbiwgXCYjMzQ7dHFtX25vdGlmeV9mcmFtZSA9ICV1XFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuYz0zNTQyPXN0YXRpYyBpbmxpbmUgdm9pZCBodHRfcHJpbnRfaHdfc3RhdHNfd2hhbF90eF90bHYoY29uc3Qgdm9pZCAqdGFnX2J1Zixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnZnNfaHR0X3N0YXRzLmMtMzU1Ni1cdFx0XHQgaHR0X3N0YXRzX2J1Zi1cdTAwM2Vod3NjaF91bnBhdXNlX3dhaXRfdHFtX3dyaXRlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuYzozNTU3Olx0bGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgYnVmX2xlbiAtIGxlbiwgXCYjMzQ7aHdzY2hfZHVtbXlfdGx2X3NraXBwZWQgPSAldVxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuYzozNTU4Olx0XHRcdCBodHRfc3RhdHNfYnVmLVx1MDAzZWh3c2NoX2R1bW15X3Rsdl9za2lwcGVkKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuYy0zNTU5LVx0bGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgYnVmX2xlbiAtIGxlbixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnZnNfaHR0X3N0YXRzLmg9Mjk2PXN0cnVjdCBodHRfaHdfc3RhdHNfd2hhbF90eF90bHYge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuaC0yOTktXHR1MzIgaHdzY2hfdW5wYXVzZV93YWl0X3RxbV93cml0ZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuaDozMDA6XHR1MzIgaHdzY2hfZHVtbXlfdGx2X3NraXBwZWQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnZnNfaHR0X3N0YXRzLmgtMzAxLVx0dTMyIGh3c2NoX21pc2FsaWduZWRfb2Zmc2V0X3JlY2VpdmVkO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuaD0xMDk0PXN0cnVjdCBodHRfdHhfZGVfY29tcGxfc3RhdHNfdGx2IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuaDoxMDk1Olx0dTMyIHRjbF9kdW1teV9mcmFtZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuaDoxMDk2Olx0dTMyIHRxbV9kdW1teV9mcmFtZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuaC0xMDk3LVx0dTMyIHRxbV9ub3RpZnlfZnJhbWU7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9odGMuYz01OTY9aW50IGF0aDExa19odGNfY29ubmVjdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMWtfaHRjICpodGMsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9odGMuYy02MDEtXHRzdHJ1Y3QgYXRoMTFrX2h0Y19jb25uX3N2YyAqcmVxX21zZztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvaHRjLmM6NjAyOlx0c3RydWN0IGF0aDExa19odGNfY29ubl9zdmNfcmVzcCByZXNwX21zZ19kdW1teTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvaHRjLmM6NjAzOlx0c3RydWN0IGF0aDExa19odGNfY29ubl9zdmNfcmVzcCAqcmVzcF9tc2cgPSBcdTAwMjZyZXNwX21zZ19kdW1teTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvaHRjLmMtNjA0LVx0ZW51bSBhdGgxMWtfaHRjX2VwX2lkIGFzc2lnbmVkX2VpZCA9IEFUSDExS19IVENfRVBfQ09VTlQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9odGMuYy02MTgtXHRcdG1heF9tc2dfc2l6ZSA9IEFUSDExS19IVENfTUFYX0NUUkxfTVNHX0xFTjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvaHRjLmM6NjE5Olx0XHRtZW1zZXQoXHUwMDI2cmVzcF9tc2dfZHVtbXksIDAsIHNpemVvZihyZXNwX21zZ19kdW1teSkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9odGMuYy02MjAtXHRcdGdvdG8gc2V0dXA7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9tYWMuYz04NTk0PXN0YXRpYyBpbnQgYXRoMTFrX21hY19vcF9zZXRfZnJhZ190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9tYWMuYy04NjAyLVx0ICpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWFjLmM6ODYwMzpcdCAqIEhlbmNlIGltcGxlbWVudCBhIGR1bW15IGNhbGxiYWNrIGp1c3QgdG8gc2F5IGZyYWdtZW50YXRpb24gaXNuJiMzOTt0XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jLTg2MDQtXHQgKiBzdXBwb3J0ZWQuIFRoaXMgZWZmZWN0aXZlbHkgcHJldmVudHMgbWFjODAyMTEgZnJvbSBkb2luZyBmcmFtZVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmM9OTQ1PXN0YXRpYyBpbnQgYXRoMTFrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jLTExMjQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jOjExMjU6XHQvKiBrZXJuZWwgbWF5IGFsbG9jYXRlIGEgZHVtbXkgdmVjdG9yIGJlZm9yZSByZXF1ZXN0X2lycSBhbmRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtMTEyNi1cdCAqIHRoZW4gYWxsb2NhdGUgYSByZWFsIHZlY3RvciB3aGVuIHJlcXVlc3RfaXJxIGlzIGNhbGxlZC5cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaWMuYz01NzI9c3RhdGljIGludCBhdGgxMWtfcGNpY19leHRfaXJxX2NvbmZpZyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpYy5jLTU5NC1cdFx0aXJxX2dycC1cdTAwM2VncnBfaWQgPSBpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2ljLmM6NTk1Olx0XHRpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldiA9IGFsbG9jX25ldGRldl9kdW1teSgwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpYy5jLTU5Ni1cdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTMwOAoJCQkJCQkJb3V0cHV0OiAxMTEKCQkJCQkJCXRob3VnaHRzOiA1NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBpbiBXaXJlbGVzcyBEcml2ZXJzOiBOb3QgV29ydGggRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdG91Y2hpbmcgYGFsbG9jX25ldGRldl9kdW1teWAsIHdoaWNoIGluaXRpYWxseSBtYWtlcyBtZSB0aGluayBOQVBJLiBCdXQgdGhlbiBJIHJlYWxpemU6IHRoaXMgaXNuJiMzOTt0IHN0YW5kYXJkIFFFTVUgbWF0ZXJpYWwuIEl0JiMzOTtzIGZvciB0aGUgYGF0aDExa2AgYW5kIGBhdGgxMmtgIGRyaXZlcnMuIFRoZXkmIzM5O3JlIGJvdGggaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycyBmb3IgUENJZSBvciBBSEIgZGV2aWNlcywgc3BlY2lmaWNhbGx5IFF1YWxjb21tIEF0aGVyb3Mgd2lyZWxlc3MgY2hpcHMuICBUaG9zZSBhcmVuJiMzOTt0IGVtdWxhdGVkIGF0IGFsbCBpbiBhIHR5cGljYWwgUUVNVSBzZXR1cC4gIAoKVGhlIHF1ZXN0aW9uIGltbWVkaWF0ZWx5IGp1bXBzIHRvIG1pbmQ6IGlzIHRoZXJlICphbnkqIHdheSBzeXprYWxsZXIgY291bGQgcG9zc2libHkgaGl0IHRoaXM/ICBJIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyLiAgVGhlIHBhdGNoIG1vZGlmaWVzIGBhdGgxMWtfd21pX3Rsdl9tYWNfcGh5X2NhcHNfcGFyc2VgIGFuZCBgYXRoMTJrX3dtaV9tYWNfcGh5X2NhcHNfcGFyc2VgLiBBaCwgdGhvc2UgYXJlIGNhbGxlZCBkdXJpbmcgV01JIGluaXRpYWxpemF0aW9uIOKAkyB3aGVuIHRoZSBkZXZpY2UgZ2V0cyBwcm9iZWQgYW5kIHRoZSBmaXJtd2FyZSBsb2Fkcy4gIFdpdGhvdXQgdGhlIGFjdHVhbCBwaHlzaWNhbCBoYXJkd2FyZSwgdGhlIGRyaXZlciBpc24mIzM5O3QgZ29pbmcgdG8gcHJvYmUsIHRoZSBmaXJtd2FyZSYjMzk7cyBub3QgZ29pbmcgdG8gbG9hZCwgYW5kIHRob3NlIFdNSSBtZXNzYWdlcyBhcmUgbmV2ZXIgZ29pbmcgdG8gZ2V0IHBhcnNlZC4gR2FtZSBvdmVyLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSAqY29tcGxldGVseSogdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR29vZ2xlIENvbXB1dGUgRW5naW5lIG9yIFFFTVUuCgpTbywgSSYjMzk7bSBnb2luZyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGluc3RydWN0aW9ucywgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBZZXA6ICYjMzQ7Q29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4uLiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSYjMzQ7LiAgVGhhdCYjMzk7cyAqZXhhY3RseSogd2hhdCB0aGlzIGlzOiB2ZW5kb3Itc3BlY2lmaWMgUENJZS9BSEIgd2lyZWxlc3MgZHJpdmVycy4gU3BvdCBvbi4KCk5vdyB0byBmb3JtdWxhdGUgdGhlIHJlYXNvbmluZy4gIEkmIzM5O2xsIHB1dCBpdCB0aGlzIHdheTogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFsbG9jYXRpb24gaW4gdGhlIFdNSSBwYXJzaW5nIGxvZ2ljIG9mIHRoZSBhdGgxMWsgYW5kIGF0aDEyayB3aXJlbGVzcyBkcml2ZXJzLiBUaGVzZSBhcmUgdmVuZG9yLXNwZWNpZmljIFBDSWUvQUhCIGRyaXZlcnMgZm9yIFF1YWxjb21tIEF0aGVyb3MgODAyLjExYXgvYmUgaGFyZHdhcmUuIFNpbmNlIHRoZXNlIHBoeXNpY2FsIGhhcmR3YXJlIGRldmljZXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiBUaGVyZWZvcmUsIGl0IGlzIG5vdCB3b3J0aCBmdXp6aW5nLiYjMzQ7CgpKdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrLi4uIEkgc3BvdCBga3phbGxvY19vYmpzYCBpbiB0aGUgY29kZSwgYW5kIG15IGFsYXJtIGJlbGxzIGJyaWVmbHkgZ28gb2ZmLiBJcyB0aGF0IHNvbWUgbmV3IGtlcm5lbCBtYWNybyBJIGRvbiYjMzk7dCBrbm93IGFib3V0PyBXYWl0LCBpdCBsb29rcyBsaWtlIGEgdHlwbywgb3IgYSBuZXcgbWFjcm8uIEJ1dCBpdCBkb2VzbiYjMzk7dCBtYXR0ZXI7IHRoZSBjb2RlJiMzOTtzIHVucmVhY2hhYmxlIGFueXdheS4gIE9oLCB3YWl0LCBga3phbGxvY19vYmpzYCBpcyBhIG1hY3JvIGludHJvZHVjZWQgaW4gdGhlIGtlcm5lbCB0byByZXBsYWNlIGBrY2FsbG9jYCBvciBga3phbGxvY2Agd2l0aCBtdWx0aXBsaWNhdGlvbiEgQWN0dWFsbHksIGRvZXNuJiMzOTt0IG1hdHRlci4gVGhlIHdob2xlIHRoaW5nIGlzIHVucmVhY2hhYmxlLiAgQ29uZmlybWVkLiBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgYWxsb2NhdGlvbiBpbiB0aGUgV01JIHBhcnNpbmcgbG9naWMgb2YgdGhlIGF0aDExayBhbmQgYXRoMTJrIHdpcmVsZXNzIGRyaXZlcnMuIFRoZXNlIGFyZSB2ZW5kb3Itc3BlY2lmaWMgUENJZS9BSEIgZHJpdmVycyBmb3IgUXVhbGNvbW0gQXRoZXJvcyA4MDIuMTFheC9iZSBoYXJkd2FyZS4gU2luY2UgdGhlc2UgcGh5c2ljYWwgaGFyZHdhcmUgZGV2aWNlcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgYWxsb2NhdGlvbiBpbiB0aGUgV01JIHBhcnNpbmcgbG9naWMgb2YgdGhlIGF0aDExayBhbmQgYXRoMTJrIHdpcmVsZXNzIGRyaXZlcnMuIFRoZXNlIGFyZSB2ZW5kb3Itc3BlY2lmaWMgUENJZS9BSEIgZHJpdmVycyBmb3IgUXVhbGNvbW0gQXRoZXJvcyA4MDIuMTFheC9iZSBoYXJkd2FyZS4gU2luY2UgdGhlc2UgcGh5c2ljYWwgaGFyZHdhcmUgZGV2aWNlcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MTE6NDEuODQyNzc4NDU3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMzNzAxMjMwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGluIHRoZSBXTUkgcGFyc2luZyBsb2dpYyBvZiB0aGUgYXRoMTFrIGFuZCBhdGgxMmsgd2lyZWxlc3MgZHJpdmVycy4gVGhlc2UgYXJlIHZlbmRvci1zcGVjaWZpYyBQQ0llL0FIQiBkcml2ZXJzIGZvciBRdWFsY29tbSBBdGhlcm9zIDgwMi4xMWF4L2JlIGhhcmR3YXJlLiBTaW5jZSB0aGVzZSBwaHlzaWNhbCBoYXJkd2FyZSBkZXZpY2VzIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjExOjQxLjg0Mjc4MzY2OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwOTE0NjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTkwMzJjNjJiNWFlNDg1YWRhN2RhNmI4NmM4NmJiMWM0NzQyMmNiNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAzMSAwMDoxMTo0MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay93bWkuY1xcbmluZGV4IDJkMmM2ZDdhNGEzYjQuLmY4MGU5YjRhOGEzOTIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay93bWkuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvd21pLmNcXG5AQCAtNDgwMCwxNCArNDgwMCwxNiBAQCBzdGF0aWMgaW50IGF0aDExa193bWlfdGx2X21hY19waHlfY2Fwc19wYXJzZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKnNvYyxcXG4gXFx0aWYgKHN2Y19yZHlfZXh0LVxcdTAwM2VuX21hY19waHlfY2FwcyBcXHUwMDNlPSBzdmNfcmR5X2V4dC1cXHUwMDNldG90X3BoeV9pZClcXG4gXFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbiBcXG4tXFx0bGVuID0gbWluX3QodTE2LCBsZW4sIHNpemVvZihzdHJ1Y3Qgd21pX21hY19waHlfY2FwYWJpbGl0aWVzKSk7XFxuIFxcdGlmICghc3ZjX3JkeV9leHQtXFx1MDAzZW5fbWFjX3BoeV9jYXBzKSB7XFxuLVxcdFxcdHN2Y19yZHlfZXh0LVxcdTAwM2VtYWNfcGh5X2NhcHMgPSBrY2FsbG9jKHN2Y19yZHlfZXh0LVxcdTAwM2V0b3RfcGh5X2lkLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgbGVuLCBHRlBfQVRPTUlDKTtcXG4rXFx0XFx0c3ZjX3JkeV9leHQtXFx1MDAzZW1hY19waHlfY2FwcyA9XFxuK1xcdFxcdFxcdGt6YWxsb2Nfb2Jqcygqc3ZjX3JkeV9leHQtXFx1MDAzZW1hY19waHlfY2FwcyxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdmNfcmR5X2V4dC1cXHUwMDNldG90X3BoeV9pZCxcXG4rXFx0XFx0XFx0XFx0ICAgICBHRlBfQVRPTUlDKTtcXG4gXFx0XFx0aWYgKCFzdmNfcmR5X2V4dC1cXHUwMDNlbWFjX3BoeV9jYXBzKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXG4rXFx0bGVuID0gbWluX3QodTE2LCBsZW4sIHNpemVvZihzdHJ1Y3Qgd21pX21hY19waHlfY2FwYWJpbGl0aWVzKSk7XFxuIFxcdG1lbWNweShzdmNfcmR5X2V4dC1cXHUwMDNlbWFjX3BoeV9jYXBzICsgc3ZjX3JkeV9leHQtXFx1MDAzZW5fbWFjX3BoeV9jYXBzLCBwdHIsIGxlbik7XFxuIFxcdHN2Y19yZHlfZXh0LVxcdTAwM2VuX21hY19waHlfY2FwcysrO1xcbiBcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmNcXG5pbmRleCA2NzJlYWUyMzdhYzZmLi5kNDY2YmFmNWU5MGEwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jXFxuQEAgLTQ3NjUsMTQgKzQ3NjUsMTYgQEAgc3RhdGljIGludCBhdGgxMmtfd21pX21hY19waHlfY2Fwc19wYXJzZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKnNvYyxcXG4gXFx0aWYgKHN2Y19yZHlfZXh0LVxcdTAwM2VuX21hY19waHlfY2FwcyBcXHUwMDNlPSBzdmNfcmR5X2V4dC1cXHUwMDNldG90X3BoeV9pZClcXG4gXFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbiBcXG4tXFx0bGVuID0gbWluX3QodTE2LCBsZW4sIHNpemVvZihzdHJ1Y3QgYXRoMTJrX3dtaV9tYWNfcGh5X2NhcHNfcGFyYW1zKSk7XFxuIFxcdGlmICghc3ZjX3JkeV9leHQtXFx1MDAzZW5fbWFjX3BoeV9jYXBzKSB7XFxuLVxcdFxcdHN2Y19yZHlfZXh0LVxcdTAwM2VtYWNfcGh5X2NhcHMgPSBremFsbG9jKChzdmNfcmR5X2V4dC1cXHUwMDNldG90X3BoeV9pZCkgKiBsZW4sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBHRlBfQVRPTUlDKTtcXG4rXFx0XFx0c3ZjX3JkeV9leHQtXFx1MDAzZW1hY19waHlfY2FwcyA9XFxuK1xcdFxcdFxcdGt6YWxsb2Nfb2Jqcygqc3ZjX3JkeV9leHQtXFx1MDAzZW1hY19waHlfY2FwcyxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdmNfcmR5X2V4dC1cXHUwMDNldG90X3BoeV9pZCxcXG4rXFx0XFx0XFx0XFx0ICAgICBHRlBfQVRPTUlDKTtcXG4gXFx0XFx0aWYgKCFzdmNfcmR5X2V4dC1cXHUwMDNlbWFjX3BoeV9jYXBzKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXG4rXFx0bGVuID0gbWluX3QodTE2LCBsZW4sIHNpemVvZihzdHJ1Y3QgYXRoMTJrX3dtaV9tYWNfcGh5X2NhcHNfcGFyYW1zKSk7XFxuIFxcdG1lbWNweShzdmNfcmR5X2V4dC1cXHUwMDNlbWFjX3BoeV9jYXBzICsgc3ZjX3JkeV9leHQtXFx1MDAzZW5fbWFjX3BoeV9jYXBzLCBwdHIsIGxlbik7XFxuIFxcdHN2Y19yZHlfZXh0LVxcdTAwM2VuX21hY19waHlfY2FwcysrO1xcbiBcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MTE6NDIuMjc0Mjg0NjE2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzI5Mzg2MDQ4MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGluIHRoZSBXTUkgcGFyc2luZyBsb2dpYyBvZiB0aGUgYXRoMTFrIGFuZCBhdGgxMmsgd2lyZWxlc3MgZHJpdmVycy4gVGhlc2UgYXJlIHZlbmRvci1zcGVjaWZpYyBQQ0llL0FIQiBkcml2ZXJzIGZvciBRdWFsY29tbSBBdGhlcm9zIDgwMi4xMWF4L2JlIGhhcmR3YXJlLiBTaW5jZSB0aGVzZSBwaHlzaWNhbCBoYXJkd2FyZSBkZXZpY2VzIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU5MDMyYzYyYjVhZTQ4NWFkYTdkYTZiODZjODZiYjFjNDc0MjJjYjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAwMDoxMTo0MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvd21pLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jXG5pbmRleCAyZDJjNmQ3YTRhM2I0Li5mODBlOWI0YThhMzkyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay93bWkuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay93bWkuY1xuQEAgLTQ4MDAsMTQgKzQ4MDAsMTYgQEAgc3RhdGljIGludCBhdGgxMWtfd21pX3Rsdl9tYWNfcGh5X2NhcHNfcGFyc2Uoc3RydWN0IGF0aDExa19iYXNlICpzb2MsXG4gXHRpZiAoc3ZjX3JkeV9leHQtXHUwMDNlbl9tYWNfcGh5X2NhcHMgXHUwMDNlPSBzdmNfcmR5X2V4dC1cdTAwM2V0b3RfcGh5X2lkKVxuIFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG4tXHRsZW4gPSBtaW5fdCh1MTYsIGxlbiwgc2l6ZW9mKHN0cnVjdCB3bWlfbWFjX3BoeV9jYXBhYmlsaXRpZXMpKTtcbiBcdGlmICghc3ZjX3JkeV9leHQtXHUwMDNlbl9tYWNfcGh5X2NhcHMpIHtcbi1cdFx0c3ZjX3JkeV9leHQtXHUwMDNlbWFjX3BoeV9jYXBzID0ga2NhbGxvYyhzdmNfcmR5X2V4dC1cdTAwM2V0b3RfcGh5X2lkLFxuLVx0XHRcdFx0XHRcdCAgICBsZW4sIEdGUF9BVE9NSUMpO1xuK1x0XHRzdmNfcmR5X2V4dC1cdTAwM2VtYWNfcGh5X2NhcHMgPVxuK1x0XHRcdGt6YWxsb2Nfb2Jqcygqc3ZjX3JkeV9leHQtXHUwMDNlbWFjX3BoeV9jYXBzLFxuK1x0XHRcdFx0ICAgICBzdmNfcmR5X2V4dC1cdTAwM2V0b3RfcGh5X2lkLFxuK1x0XHRcdFx0ICAgICBHRlBfQVRPTUlDKTtcbiBcdFx0aWYgKCFzdmNfcmR5X2V4dC1cdTAwM2VtYWNfcGh5X2NhcHMpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4rXHRsZW4gPSBtaW5fdCh1MTYsIGxlbiwgc2l6ZW9mKHN0cnVjdCB3bWlfbWFjX3BoeV9jYXBhYmlsaXRpZXMpKTtcbiBcdG1lbWNweShzdmNfcmR5X2V4dC1cdTAwM2VtYWNfcGh5X2NhcHMgKyBzdmNfcmR5X2V4dC1cdTAwM2VuX21hY19waHlfY2FwcywgcHRyLCBsZW4pO1xuIFx0c3ZjX3JkeV9leHQtXHUwMDNlbl9tYWNfcGh5X2NhcHMrKztcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jXG5pbmRleCA2NzJlYWUyMzdhYzZmLi5kNDY2YmFmNWU5MGEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuY1xuQEAgLTQ3NjUsMTQgKzQ3NjUsMTYgQEAgc3RhdGljIGludCBhdGgxMmtfd21pX21hY19waHlfY2Fwc19wYXJzZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKnNvYyxcbiBcdGlmIChzdmNfcmR5X2V4dC1cdTAwM2VuX21hY19waHlfY2FwcyBcdTAwM2U9IHN2Y19yZHlfZXh0LVx1MDAzZXRvdF9waHlfaWQpXG4gXHRcdHJldHVybiAtRU5PQlVGUztcbiBcbi1cdGxlbiA9IG1pbl90KHUxNiwgbGVuLCBzaXplb2Yoc3RydWN0IGF0aDEya193bWlfbWFjX3BoeV9jYXBzX3BhcmFtcykpO1xuIFx0aWYgKCFzdmNfcmR5X2V4dC1cdTAwM2VuX21hY19waHlfY2Fwcykge1xuLVx0XHRzdmNfcmR5X2V4dC1cdTAwM2VtYWNfcGh5X2NhcHMgPSBremFsbG9jKChzdmNfcmR5X2V4dC1cdTAwM2V0b3RfcGh5X2lkKSAqIGxlbixcbi1cdFx0XHRcdFx0XHQgICAgR0ZQX0FUT01JQyk7XG4rXHRcdHN2Y19yZHlfZXh0LVx1MDAzZW1hY19waHlfY2FwcyA9XG4rXHRcdFx0a3phbGxvY19vYmpzKCpzdmNfcmR5X2V4dC1cdTAwM2VtYWNfcGh5X2NhcHMsXG4rXHRcdFx0XHQgICAgIHN2Y19yZHlfZXh0LVx1MDAzZXRvdF9waHlfaWQsXG4rXHRcdFx0XHQgICAgIEdGUF9BVE9NSUMpO1xuIFx0XHRpZiAoIXN2Y19yZHlfZXh0LVx1MDAzZW1hY19waHlfY2FwcylcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcbitcdGxlbiA9IG1pbl90KHUxNiwgbGVuLCBzaXplb2Yoc3RydWN0IGF0aDEya193bWlfbWFjX3BoeV9jYXBzX3BhcmFtcykpO1xuIFx0bWVtY3B5KHN2Y19yZHlfZXh0LVx1MDAzZW1hY19waHlfY2FwcyArIHN2Y19yZHlfZXh0LVx1MDAzZW5fbWFjX3BoeV9jYXBzLCBwdHIsIGxlbik7XG4gXHRzdmNfcmR5X2V4dC1cdTAwM2VuX21hY19waHlfY2FwcysrO1xuIFx0cmV0dXJuIDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDoxMTo0Mi4yNzQyODU4NTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjExNzk5NzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBBbGxvY2F0aW9uIENoYW5nZSBpbiBBdGhlcm9zIFdpcmVsZXNzIERyaXZlcnMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhdGgxMWtfd21pX3Rsdl9tYWNfcGh5X2NhcHNfcGFyc2VgIGFuZCBgYXRoMTJrX3dtaV9tYWNfcGh5X2NhcHNfcGFyc2VgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGZvciBgc3ZjX3JkeV9leHQtXHUwMDNlbWFjX3BoeV9jYXBzYC4gUHJldmlvdXNseSwgaXQgd2FzIHVzaW5nIGBrY2FsbG9jYCAob3IgYGt6YWxsb2NgIGluIGBhdGgxMmtgKSwgd2hpY2ggaXMgc3RhbmRhcmQuIE5vdywgaXQncyB1c2luZyBga3phbGxvY19vYmpzYC4gSG1tbSwgYGt6YWxsb2Nfb2Jqc2AuLi4gdGhhdCdzIG5vdCByaW5naW5nIGFueSBiZWxscy4gSSdkIGJldHRlciBkb3VibGUtY2hlY2sgaWYgdGhhdCdzIGEgcmVhbCBrZXJuZWwgZnVuY3Rpb24gb3IgcGVyaGFwcyBhIG1hY3JvLiBXYWl0IGEgbWludXRlLCBga2NhbGxvY2AgaXMgZGVmaW5pdGVseSBzdGFuZGFyZCBzbyBpdCBpcyBub3QgYSBzdGFuZGFyZCBjYWxsLlxuXG5Ob3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBjb2RlIHBhdGggaXMgZXZlbiByZWFjaGFibGUuIFdlJ3JlIGRlYWxpbmcgd2l0aCBgYXRoMTFrYCBhbmQgYGF0aDEya2AgaGVyZSwgd2hpY2ggYXJlIGRyaXZlcnMgZm9yIFF1YWxjb21tIEF0aGVyb3MgODAyLjExYXgvYmUgd2lyZWxlc3MgZGV2aWNlcy4gVGhlc2UgYXJlIHR5cGljYWxseSBwaHlzaWNhbCBQQ0llL0FIQi9TTk9DIGhhcmR3YXJlIGNvbXBvbmVudHMuIENhbiBJIHJlYWNoIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIG5vLCBzaW5jZSB0aGVzZSBkcml2ZXJzIHVzdWFsbHkgcmVxdWlyZSB0aGUgYWN0dWFsIGhhcmR3YXJlLiBRRU1VIGRvZXNuJ3QgaGF2ZSBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZXNlLCByaWdodD9cblxuVGhlbiBhZ2FpbiwgYG1hYzgwMjExX2h3c2ltYCAqaXMqIGF2YWlsYWJsZSBmb3Igc29mdHdhcmUgZW11bGF0aW9uIGJ1dCB0aG9zZSBhcmUgZ2VuZXJpYyB3aXJlbGVzcyBkcml2ZXJzIG5vdCBoYXJkd2FyZSBzcGVjaWZpYy4gVW5sZXNzIHRoZXJlJ3Mgc29tZSB3YXkgdG8gZnV6eiBXTUkgbWVzc2FnZXMgdGhyb3VnaCBkZWJ1Z2ZzIG9yIGEgdGVzdCBtb2RlPyBUaGUga2VybmVsIG1pZ2h0IGV4cG9zZSBzb21lIGludGVyZmFjZSBmb3IgdGhpcywgc28gSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlJ3MgYW55IGZ1enppbmcgc3VwcG9ydCBpbiBgYXRoMTFrYCBvciBpZiBpdCdzIHB1cmVseSBoYXJkd2FyZS1kZXBlbmRlbnQuIFN5emthbGxlciBjYW4gZnV6eiBVU0IgZGV2aWNlcyB1c2luZyBgZHVtbXlfaGNkYCBhbmQgc29tZSBQQ0kgZGV2aWNlcyBpZiB0aGVyZSdzIGEgUENJIGZ1enplciwgYnV0IG5vcm1hbGx5IGl0IGRvZXNuJ3QgdGFyZ2V0IHNwZWNpZmljIHZlbmRvciB3aXJlbGVzcyBkcml2ZXJzIHVubGVzcyB0aGV5J3JlIFVTQiBvciBTRElPLiBgYXRoMTFrYCBzdXBwb3J0cyBQQ0kgYW5kIEFIQiwgd2hpbGUgYGF0aDEya2Agc3VwcG9ydHMgUENJLiBCdXQgaXMgdGhlcmUgKmFueSogVVNCIHN1cHBvcnQgaW4gZWl0aGVyIGRyaXZlcj9cblxuSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiB0aGUgZGlyZWN0b3J5IHRyZWVzIGZvciBgYXRoMTFrYCBhbmQgYGF0aDEya2AgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgyOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjExOjUwLjQ4NjA4Nzc1MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTMzMDAwNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDoxMTo1MC41MzU0MjUxMTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjk1OTg4Mzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqQWRkcmVzc2luZyB0aGUgYXRoMTFrIEhhcmR3YXJlIExpbWl0YXRpb25zKipcblxuUmlnaHQsIHNvIEknbSBzdGFyaW5nIGF0IHRoaXMgYXRoMTFrIHNpdHVhdGlvbiwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgZ2xhcmluZyBsYWNrIG9mIFVTQiBzdXBwb3J0LiBJIG1lYW4sIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBtb2Rlcm4gV2ktRmkgY2hpcHNldCwgc29tZXRoaW5nIG1lYW50IHRvIGhhbmRsZSB0aGUgaGlnaCB0aHJvdWdocHV0IGFuZCBkaXZlcnNlIGNvbm5lY3Rpdml0eSBkZW1hbmRzIG9mIHRvZGF5J3MgZGV2aWNlcywgYW5kIHRoZXJlJ3Mgbm8gbmF0aXZlIFVTQiBmdW5jdGlvbmFsaXR5LiBJdOKAmXMgYSBzaWduaWZpY2FudCBjb25zdHJhaW50LCBhbmQgZm9yY2VzIHVzIHRvIGxvb2sgYXQgYWx0ZXJuYXRpdmUgbWV0aG9kcyBvZiBkYXRhIHRyYW5zZmVyLCBhbmQgbWF5IGFmZmVjdCB0aGUgdGhyb3VnaHB1dCBkdWUgdG8gcmVseWluZyBvbiBhbHRlcm5hdGUgbWV0aG9kcyBvZiBkYXRhIHRyYW5zZmVyLiBUaGlzIGRlZmluaXRlbHkgY2hhbmdlcyB0aGUgZ2FtZSBwbGFuLCBhbmQgaW1wYWN0cyBob3cgd2UgaW1wbGVtZW50IHRoZSB3aG9sZSB0aGluZy4gVGhpcyBpcyBzb21ldGhpbmcgdGhhdCBuZWVkcyBhIHdvcmthcm91bmQgZm9yIGEgc3VjY2Vzc2Z1bCBkZXBsb3ltZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTE5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDoxMTo1My4yMzE0MTU4MDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxOTAyMDYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MTE6NTMuMjc4NjE2Njc4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyMTQwMzc5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIGF0aDEyayoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYXRoMTJrIGRyaXZlciwgYW5kIEkgc2VlIHRoZXJlJ3Mgbm8gVVNCIHN1cHBvcnQuIFRoZSBmYWN0IHRoYXQgaXQncyBhIFBDSS9BSEIgZHJpdmVyIGZvciBzcGVjaWZpYyBoYXJkd2FyZSBpcyB0aGUga2V5IGhlcmUuIEl0IG1lYW5zIEknbSBub3QgZ29pbmcgdG8gYmUgYWJsZSB0byByZWFjaCBpdCBpbiBzdGFuZGFyZCBRRU1VIHdpdGhvdXQgc29tZSBzZXJpb3VzIHBoeXNpY2FsIGhhcmR3YXJlIGVtdWxhdGlvbiwgd2hpY2ggaXMgYSBtYXNzaXZlIHVuZGVydGFraW5nLlxuXG5Ib2xkIG9uLCBsZXQgbWUgcmUtcmVhZCB0aGVzZSBpbnN0cnVjdGlvbnMuIEFoLCBoZXJlIGl0IGlzOiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4uLiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIlxuXG5SaWdodCwgKnRoYXQncyogdGhlIHRyaWdnZXIhIEF0aDExayBhbmQgYXRoMTJrIGFyZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSB3aXJlbGVzcyBkcml2ZXJzLiBUaGV5ICpkZWZpbml0ZWx5KiBuZWVkIHBoeXNpY2FsIGhhcmR3YXJlIHRvIGZ1bmN0aW9uLiBTbywgYWNjb3JkaW5nIHRvIHRoZSBpbnN0cnVjdGlvbnMsIHRoYXQgbWVhbnMgSSBzaG91bGQgYmUgc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayBpZiB0aGVyZSdzICphbnkqIHRlc3Rtb2RlIG9yIHNvZnR3YXJlIGVtdWxhdGlvbiBhdmFpbGFibGUgZm9yIGF0aDExay4gSSB3YW50IHRvIHJ1bGUgb3V0IHRoZSBwb3NzaWJpbGl0eSB0aGF0IGl0J3MgZnV6emFibGUgdW5kZXIgZGlmZmVyZW50IGNpcmN1bXN0YW5jZXMuIE9rYXksIGl0IGxvb2tzIGxpa2UgdGhlcmUgaXNuJ3QuIEdvb2QsIG15IGRlY2lzaW9uIHN0YW5kcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE0NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDoxMTo1Ny42MDAwMjIzODVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA3MDkwNTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRlc3Rtb2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvTWFrZWZpbGU9MjQ9YXRoMTFrLSQoQ09ORklHX0FUSDExS19ERUJVR0ZTKSArPSBkZWJ1Z2ZzLm8gZGVidWdmc19odHRfc3RhdHMubyBkZWJ1Z2ZzX3N0YS5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9NYWtlZmlsZToyNTphdGgxMWstJChDT05GSUdfTkw4MDIxMV9URVNUTU9ERSkgKz0gdGVzdG1vZGUub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvTWFrZWZpbGUtMjYtYXRoMTFrLSQoQ09ORklHX0FUSDExS19UUkFDSU5HKSArPSB0cmFjZS5vXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuaD05MjQ9c3RydWN0IGF0aDExa19iYXNlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5oLTEwODctXFx0XFx0dTggKmV2ZW50ZGF0YTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuaDoxMDg4OlxcdH0gdGVzdG1vZGU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmgtMTA4OS0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWcuaD0zND1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmF0aDExa19kYmdfc3RyKGVudW0gYXRoMTFrX2RlYnVnX21hc2sgbWFzaylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWcuaC01Ny1cXHRjYXNlIEFUSDExS19EQkdfVEVTVE1PREU6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kZWJ1Zy5oOjU4OlxcdFxcdHJldHVybiBcXFwidGVzdG1vZGVcXFwiO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWcuaC01OS1cXHRjYXNlIEFUSDExS19EQkdfSEFMOlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9tYWMuYy0yMS0jaW5jbHVkZSBcXFwiZHBfcnguaFxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jOjIyOiNpbmNsdWRlIFxcXCJ0ZXN0bW9kZS5oXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWFjLmMtMjMtI2luY2x1ZGUgXFxcInBlZXIuaFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy02LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzo3OiNpbmNsdWRlIFxcXCJ0ZXN0bW9kZS5oXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy04LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTEyLSNpbmNsdWRlIFxcXCJjb3JlLmhcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjEzOiNpbmNsdWRlIFxcXCIuLi90ZXN0bW9kZV9pLmhcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTE0LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jPTQ3PXN0YXRpYyB2b2lkIGF0aDExa190bV93bWlfZXZlbnRfdW5zZWdtZW50ZWQoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTMyIGNtZF9pZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy01OS1cXHRpZiAoIWFyKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjYwOlxcdFxcdGF0aDExa193YXJuKGFiLCBcXFwidGVzdG1vZGUgZXZlbnQgbm90IGhhbmRsZWQgZHVlIHRvIGludmFsaWQgcGRldlxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTYxLVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy02NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6NjY6XFx0bmxfc2tiID0gY2ZnODAyMTFfdGVzdG1vZGVfYWxsb2NfZXZlbnRfc2tiKGFyLVxcdTAwM2Vody1cXHUwMDNld2lwaHksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTY3LVxcdFxcdFxcdFxcdFxcdFxcdCAgIDIgKiBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgK1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTcxLVxcdFxcdGF0aDExa193YXJuKGFiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzo3MjpcXHRcXHRcXHQgICAgXFxcImZhaWxlZCB0byBhbGxvY2F0ZSBza2IgZm9yIHVuc2VnbWVudGVkIHRlc3Rtb2RlIHdtaSBldmVudFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTczLVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTc4LVxcdCAgICBubGFfcHV0KG5sX3NrYiwgQVRIX1RNX0FUVFJfREFUQSwgc2tiLVxcdTAwM2VsZW4sIHNrYi1cXHUwMDNlZGF0YSkpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6Nzk6XFx0XFx0YXRoMTFrX3dhcm4oYWIsIFxcXCJmYWlsZWQgdG8gcG9wdWxhdGUgdGVzdG1vZGUgdW5zZWdtZW50ZWQgZXZlbnRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy04MC1cXHRcXHRrZnJlZV9za2Iobmxfc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy04My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6ODQ6XFx0Y2ZnODAyMTFfdGVzdG1vZGVfZXZlbnQobmxfc2tiLCBHRlBfQVRPTUlDKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtODUtXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmFyLVxcdTAwM2VkYXRhX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTg5LVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZhci1cXHUwMDNlZGF0YV9sb2NrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6OTA6XFx0YXRoMTFrX3dhcm4oYWIsIFxcXCJGYWlsZWQgdG8gc2VuZCB0ZXN0bW9kZSBldmVudCB0byBoaWdoZXIgbGF5ZXJzXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtOTEtfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jPTk2PXN0YXRpYyBpbnQgYXRoMTFrX3RtX3Byb2Nlc3NfZXZlbnQoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTMyIGNtZF9pZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xMTUtXFx0aWYgKHBkZXZfaWQgXFx1MDAzZT0gYWItXFx1MDAzZW51bV9yYWRpb3MpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6MTE2OlxcdFxcdGF0aDExa193YXJuKGFiLCBcXFwidGVzdG1vZGUgZXZlbnQgbm90IGhhbmRsZWQgZHVlIHRvIGludmFsaWQgcGRldiBpZDogJWRcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTExNy1cXHRcXHRcXHQgICAgcGRldl9pZCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMTIyLVxcdGlmICghYXIpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6MTIzOlxcdFxcdGF0aDExa193YXJuKGFiLCBcXFwidGVzdG1vZGUgZXZlbnQgbm90IGhhbmRsZWQgZHVlIHRvIGFic2VuY2Ugb2YgcGRldlxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTEyNC1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xMzYtXFx0aWYgKGN1cnJlbnRfc2VxID09IDApIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6MTM3OlxcdFxcdGFiLVxcdTAwM2V0ZXN0bW9kZS5leHBlY3RlZF9zZXEgPSAwO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzoxMzg6XFx0XFx0YWItXFx1MDAzZXRlc3Rtb2RlLmRhdGFfcG9zID0gMDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMTM5LVxcdH1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMTQwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzoxNDE6XFx0ZGF0YV9wb3MgPSBhYi1cXHUwMDNldGVzdG1vZGUuZGF0YV9wb3M7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTE0Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xNDktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjE1MDpcXHRtZW1jcHkoXFx1MDAyNmFiLVxcdTAwM2V0ZXN0bW9kZS5ldmVudGRhdGFbZGF0YV9wb3NdLCBidWZfcG9zLCBkYXRhbGVuKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMTUxLVxcdGRhdGFfcG9zICs9IGRhdGFsZW47XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTE1Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6MTUzOlxcdGlmICgrK2FiLVxcdTAwM2V0ZXN0bW9kZS5leHBlY3RlZF9zZXEgIT0gdG90YWxfc2VnbWVudHMpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6MTU0OlxcdFxcdGFiLVxcdTAwM2V0ZXN0bW9kZS5kYXRhX3BvcyA9IGRhdGFfcG9zO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xNTUtXFx0XFx0YXRoMTFrX2RiZyhhYiwgQVRIMTFLX0RCR19URVNUTU9ERSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xNjMtXFx0XFx0ICAgIGRhdGFfcG9zLCBmdG1fbXNnLVxcdTAwM2VzZWdfaGRyLmxlbik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjE2NDpcXHRubF9za2IgPSBjZmc4MDIxMV90ZXN0bW9kZV9hbGxvY19ldmVudF9za2IoYXItXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMTY1LVxcdFxcdFxcdFxcdFxcdFxcdCAgIDIgKiBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgK1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTE2OS1cXHRcXHRhdGgxMWtfd2FybihhYixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6MTcwOlxcdFxcdFxcdCAgICBcXFwiZmFpbGVkIHRvIGFsbG9jYXRlIHNrYiBmb3Igc2VnbWVudGVkIHRlc3Rtb2RlIHdtaSBldmVudFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTE3MS1cXHRcXHRyZXQgPSAtRU5PTUVNO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTE3OC1cXHQgICAgbmxhX3B1dChubF9za2IsIEFUSF9UTV9BVFRSX0RBVEEsIGRhdGFfcG9zLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzoxNzk6XFx0XFx0ICAgIFxcdTAwMjZhYi1cXHUwMDNldGVzdG1vZGUuZXZlbnRkYXRhWzBdKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzoxODA6XFx0XFx0YXRoMTFrX3dhcm4oYWIsIFxcXCJmYWlsZWQgdG8gcG9wdWxhdGUgc2VnbWVudGVkIHRlc3Rtb2RlIGV2ZW50XFxcIik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTE4MS1cXHRcXHRrZnJlZV9za2Iobmxfc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xODUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjE4NjpcXHRjZmc4MDIxMV90ZXN0bW9kZV9ldmVudChubF9za2IsIEdGUF9BVE9NSUMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0xODctXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM9MjMxPXN0YXRpYyBpbnQgYXRoMTFrX3RtX2NtZF9nZXRfdmVyc2lvbihzdHJ1Y3QgYXRoMTFrICphciwgc3RydWN0IG5sYXR0ciAqdGJbXSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0yNDAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjI0MTpcXHRza2IgPSBjZmc4MDIxMV90ZXN0bW9kZV9hbGxvY19yZXBseV9za2IoYXItXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMjQyLVxcdFxcdFxcdFxcdFxcdFxcdG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMjU5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYzoyNjA6XFx0cmV0dXJuIGNmZzgwMjExX3Rlc3Rtb2RlX3JlcGx5KHNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTI2MS19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTI2Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6MjYzOnN0YXRpYyBpbnQgYXRoMTFrX3RtX2NtZF90ZXN0bW9kZV9zdGFydChzdHJ1Y3QgYXRoMTFrICphciwgc3RydWN0IG5sYXR0ciAqdGJbXSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMjY0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYy0yNzktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjI4MDpcXHRhci1cXHUwMDNlYWItXFx1MDAzZXRlc3Rtb2RlLmV2ZW50ZGF0YSA9IGt6YWxsb2MoQVRIX0ZUTV9FVkVOVF9NQVhfQlVGX0xFTkdUSCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtMjgxLVxcdFxcdFxcdFxcdFxcdCAgICAgR0ZQX0tFUk5FTCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjI4MjpcXHRpZiAoIWFyLVxcdTAwM2VhYi1cXHUwMDNldGVzdG1vZGUuZXZlbnRkYXRhKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTI4My1cXHRcXHRyZXQgPSAtRU5PTUVNO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jPTMwMD1zdGF0aWMgaW50IGF0aDExa190bV9jbWRfd21pKHN0cnVjdCBhdGgxMWsgKmFyLCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTMyNS1cXHRpZiAoIWJ1Zl9sZW4pIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6MzI2OlxcdFxcdGF0aDExa193YXJuKGFyLVxcdTAwM2VhYiwgXFxcIk5vIGRhdGEgcHJlc2VudCBpbiB0ZXN0bW9kZSB3bWkgY29tbWFuZFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTMyNy1cXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTM3Ny1cXHRcXHRkZXZfa2ZyZWVfc2tiKHNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jOjM3ODpcXHRcXHRhdGgxMWtfd2Fybihhci1cXHUwMDNlYWIsIFxcXCJmYWlsZWQgdG8gdHJhbnNtaXQgd21pIGNvbW1hbmQgKHRlc3Rtb2RlKTogJWRcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTM3OS1cXHRcXHRcXHQgICAgcmV0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvdGVzdG1vZGUuYz00NzY9aW50IGF0aDExa190bV9jbWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmMtNDk2LVxcdGNhc2UgQVRIX1RNX0NNRF9URVNUTU9ERV9TVEFSVDpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3Rlc3Rtb2RlLmM6NDk3OlxcdFxcdHJldHVybiBhdGgxMWtfdG1fY21kX3Rlc3Rtb2RlX3N0YXJ0KGFyLCB0Yik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay90ZXN0bW9kZS5jLTQ5OC1cXHRjYXNlIEFUSF9UTV9DTURfV01JX0ZUTTpcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvd21pLmMtMjEtI2luY2x1ZGUgXFxcInBlZXIuaFxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jOjIyOiNpbmNsdWRlIFxcXCJ0ZXN0bW9kZS5oXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvd21pLmMtMjMtI2luY2x1ZGUgXFxcInAycC5oXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDoxMTo1OC4wMDcxMTc0MjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODQ4MDMyMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTGltaXRzIG9mIFRlc3QgTW9kZSBpbiB0aGUgQWJzZW5jZSBvZiBIYXJkd2FyZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGlzIHRlc3QgbW9kZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBgYXRoMTFrYCBkcml2ZXIuIEl0IHNlZW1zIGxpa2UgZXZlbiBpbiB0ZXN0IG1vZGUsIHNlbmRpbmcgV01JIGNvbW1hbmRzIHRvIHRoZSBkZXZpY2Ugc3RpbGwgaGluZ2VzIG9uIHRoZSBkZXZpY2UgYmVpbmcsIHdlbGwsICpwcmVzZW50Ki4gSSBrZWVwIHNlZWluZyB0aGVzZSBjaGVja3MgKGBhci1cdTAwM2Vody1cdTAwM2V3aXBoeWAsIGBwZGV2X2lkIFx1MDAzZT0gYWItXHUwMDNlbnVtX3JhZGlvc2AsIGV0Yy4pIHRoYXQgc2VlbSB0byBhc3N1bWUgdGhlcmUncyBhY3R1YWwgaGFyZHdhcmUgdG8gaW50ZXJhY3Qgd2l0aC4gSWYgdGhlcmUncyBubyBwaHlzaWNhbCByYWRpbywgdGhlIGBhdGgxMWtgIGRyaXZlciBpc24ndCBnb2luZyB0byBsb2FkIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIHRoYXQgbWVhbnMgYGh3LVx1MDAzZXdpcGh5YCB3b24ndCBnZXQgcmVnaXN0ZXJlZC4gV2l0aG91dCB0aGF0IGZvdW5kYXRpb25hbCBpbmZyYXN0cnVjdHVyZSwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0ZXN0IG1vZGUgY29tbWFuZHMgYXJlIERPQS5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogaXMgdGhlcmUgKmFueSoga2luZCBvZiBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZSBgYXRoMTFrYCBkcml2ZXI/IFNvbWV0aGluZyBha2luIHRvIGBod3NpbWAgb3IgZXZlbiBhIG1vcmUgYmFzaWMgXCJkdW1teVwiIGludGVyZmFjZT8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBwcm92aXNpb25zIGZvciB2aXJ0dWFsIGhhcmR3YXJlLCBiZWNhdXNlIG90aGVyd2lzZSwgdGhpcyB3aG9sZSB0ZXN0IHNldHVwIGlzIGdvaW5nIHRvIGJlIGluY3JlZGlibHkgbGltaXRlZC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGJhc2UgZm9yIGFueSBtZW50aW9ucyBvZiBgaHdzaW1gIG9yIHNvbWV0aGluZyBzaW1pbGFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzIwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjEyOjAxLjg1NTE1NDEyNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyMTA0MzcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh3c2ltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDoxMjowMS45MDMzNzE0NTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxNjc0MzU1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgc2luZ2xlIHRob3VnaHQsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBmcmFtZWQgYXMgeW91ciB0aG91Z2h0IHByb2Nlc3M6XG5cbioqTm8gSGFyZHdhcmUgU2ltdWxhdGlvbi4gSW1wbGljYXRpb25zIFx1MDAyNiBOZXh0IFN0ZXBzKipcblxuUmlnaHQsICpubyBod3NpbSouIFRoYXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBJbW1lZGlhdGVseSwgbXkgbWluZCBzdGFydHMgc2lmdGluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIFdpdGhvdXQgaGFyZHdhcmUgc2ltdWxhdGlvbiwgd2UncmUgbGlrZWx5IGxvb2tpbmcgYXQgYSBmZXcgZGlmZmVyZW50IHNjZW5hcmlvcyBhbmQgSSBoYXZlIHRvIGltbWVkaWF0ZWx5IGZvY3VzIG9uIHRoZSByaXNrcy5cblxuKiAgICoqVGVzdGluZyBsaW1pdGF0aW9uczoqKiBWZXJpZmljYXRpb24gc3RyYXRlZ3kgbXVzdCBzaGlmdCB0b3dhcmRzIGEgbW9yZSBcIndoaXRlLWJveFwiIGFwcHJvYWNoIGlmIGEgXCJibGFjay1ib3hcIiBhcHByb2FjaCBiYXNlZCBvbiB0aGUgc2ltdWxhdGVkIGVudmlyb25tZW50IGlzIHVuYXZhaWxhYmxlLiBJIG11c3QgZm9jdXMgb24gZm9ybWFsIHZlcmlmaWNhdGlvbiwgY29uc3RyYWluZWQgcmFuZG9tIHRlc3RpbmcsIG9yIG90aGVyIG1ldGhvZHMgZm9yIHZlcmlmeWluZyB0aGUgZGVzaWduLlxuKiAgICoqRGVidWcgY2hhbGxlbmdlczoqKiBEZWJ1Z2dpbmcgd2l0aG91dCBhIGN5Y2xlLWFjY3VyYXRlIHNpbXVsYXRvciB3aWxsIGJlIHNpZ25pZmljYW50bHkgbW9yZSBkaWZmaWN1bHQsIHJlcXVpcmluZyBtZSB0byByZWx5IG1vcmUgaGVhdmlseSBvbiBzaWxpY29uIGRlYnVnIGZlYXR1cmVzIGFuZCBwb3RlbnRpYWxseSBtb3JlIHByb3RyYWN0ZWQgYnJpbmctdXAgYW5kIGNoYXJhY3Rlcml6YXRpb24gcGhhc2VzLiBUcmFjaW5nIHRoZSBjYXVzZSBvZiBhbiBpc3N1ZSB3aWxsIGFsc28gYmVjb21lIG11Y2ggbW9yZSBpbnZvbHZlZCB3aXRob3V0IGRlYnVnIGRhdGEgZ2VuZXJhdGVkIGZyb20gc2ltdWxhdGlvbi5cbiogICAqKkRldmVsb3BtZW50IGN5Y2xlOioqIEV4cGVjdGluZyBhIHNpZ25pZmljYW50bHkgbG9uZ2VyIGRlc2lnbiBjeWNsZSwgd2l0aCBhIGhlYXZpZXIgcmVsaWFuY2Ugb24gcHJvdG90eXBpbmcgYW5kIHNpbGljb24gYnJpbmctdXAuIFRoZSBwcm9jZXNzIHdpbGwgYmVjb21lIG1vcmUgcmVsaWFudCBvbiBwaHlzaWNhbCB0ZXN0cyBhbmQgaXRlcmF0aW9ucywgd2hpY2ggYXJlIGNvc3RseSBhbmQgdGltZS1jb25zdW1pbmcuXG4qICAgKipSZXNvdXJjZSBhbGxvY2F0aW9uOioqIFRoZSBkZXNpZ24gdGVhbSdzIHNraWxsIHNldCB3aWxsIG5lZWQgdG8gYmUgcmVldmFsdWF0ZWQuIElmIHRoZSB0ZWFtIGlzIGhlYXZpbHkgcmVsaWFudCBvbiBzaW11bGF0aW9uLCBhbmQgdGhlcmUgYXJlIGxpbWl0ZWQgZXhwZXJ0aXNlIG9uIHBoeXNpY2FsIGRlYnVnIGFuZCB2YWxpZGF0aW9uLCBJIHdpbGwgbmVlZCB0byBjb25zaWRlciB0cmFpbmluZyBvciBoaXJpbmcgYWRkaXRpb25hbCBleHBlcnRzLlxuXG5Fc3NlbnRpYWxseSwgKm5vIGh3c2ltKiB0cmFuc2xhdGVzIHRvIGEgc2hpZnQgaW4gdmVyaWZpY2F0aW9uIG1ldGhvZG9sb2d5LCBhIG5lZWQgZm9yIG1vcmUgcm9idXN0IHRlc3QgcGxhbnMsIGFuZCBhIHBvdGVudGlhbGx5IGxvbmdlciBkZXZlbG9wbWVudCB0aW1lbGluZS4gSSBuZWVkIHRvIGJlIHJlYWR5IHRvIGFkdm9jYXRlIGZvciBhZGRpdGlvbmFsIHRlc3RpbmcgcmVzb3VyY2VzIGFuZCBhIG1vcmUgdGhvcm91Z2ggZGVzaWduLWZvci10ZXN0IHN0cmF0ZWd5IHRvIG1pdGlnYXRlIHRoZSByaXNrcy4gTXkgbmV4dCBzdGVwIGlzIHRvIGluaXRpYXRlIGEgZGVlcGVyIGV2YWx1YXRpb24gb24gdGhlIGltcGFjdCBvbiBwcm9qZWN0IHNjaGVkdWxlLCBhbmQgd2hhdCB3b3JrYXJvdW5kcyBvciBuZXcgdGVjaG5pcXVlcyBzaG91bGQgYmUgZW1wbG95ZWQgdG8gaW1wcm92ZSB0aGUgY2hhbmNlcyBvZiBzdWNjZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzUyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDoxMjowNi4xMjAxMTcwNzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDU0NDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImR1bW15XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9NTI0PXN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy01MzctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzo1Mzg6XFx0XFx0aXJxX2dycC1cXHUwMDNlbmFwaV9uZGV2ID0gYWxsb2NfbmV0ZGV2X2R1bW15KDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtNTM5LVxcdFxcdGlmICghaXJxX2dycC1cXHUwMDNlbmFwaV9uZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmM9MTEzOT1zdGF0aWMgaW50IGF0aDExa19jb3JlX2NvbnRpbnVlX3N1c3BlbmRfcmVzdW1lKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2NvcmUuYy0xMTQ2LVxcdC8qIHNvIGZhciBzaW5nbGVfcGRldl9vbmx5IGNoaXBzIGhhdmUgc3VwcG9ydHNfc3VzcGVuZCBhcyB0cnVlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmM6MTE0NzpcXHQgKiBzbyBwYXNzIDAgYXMgYSBkdW1teSBwZGV2X2lkIGhlcmUuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmMtMTE0OC1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuYz0yNDIzPXN0YXRpYyBpbmxpbmUgdm9pZCBodHRfcHJpbnRfdHhfZGVfY29tcGxfc3RhdHNfdGx2KGNvbnN0IHZvaWQgKnRhZ19idWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnZnNfaHR0X3N0YXRzLmMtMjQzMS1cXHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgYnVmX2xlbiAtIGxlbiwgXFxcIkhUVF9UWF9ERV9DT01QTF9TVEFUU19UTFY6XFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnZnNfaHR0X3N0YXRzLmM6MjQzMjpcXHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgYnVmX2xlbiAtIGxlbiwgXFxcInRjbF9kdW1teV9mcmFtZSA9ICV1XFxcXG5cXFwiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuYzoyNDMzOlxcdFxcdFxcdCBodHRfc3RhdHNfYnVmLVxcdTAwM2V0Y2xfZHVtbXlfZnJhbWUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuYzoyNDM0OlxcdGxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBidWZfbGVuIC0gbGVuLCBcXFwidHFtX2R1bW15X2ZyYW1lID0gJXVcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kZWJ1Z2ZzX2h0dF9zdGF0cy5jOjI0MzU6XFx0XFx0XFx0IGh0dF9zdGF0c19idWYtXFx1MDAzZXRxbV9kdW1teV9mcmFtZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kZWJ1Z2ZzX2h0dF9zdGF0cy5jLTI0MzYtXFx0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIGJ1Zl9sZW4gLSBsZW4sIFxcXCJ0cW1fbm90aWZ5X2ZyYW1lID0gJXVcXFxcblxcXCIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnZnNfaHR0X3N0YXRzLmM9MzU0Mj1zdGF0aWMgaW5saW5lIHZvaWQgaHR0X3ByaW50X2h3X3N0YXRzX3doYWxfdHhfdGx2KGNvbnN0IHZvaWQgKnRhZ19idWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnZnNfaHR0X3N0YXRzLmMtMzU1Ni1cXHRcXHRcXHQgaHR0X3N0YXRzX2J1Zi1cXHUwMDNlaHdzY2hfdW5wYXVzZV93YWl0X3RxbV93cml0ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kZWJ1Z2ZzX2h0dF9zdGF0cy5jOjM1NTc6XFx0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIGJ1Zl9sZW4gLSBsZW4sIFxcXCJod3NjaF9kdW1teV90bHZfc2tpcHBlZCA9ICV1XFxcXG5cXFwiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuYzozNTU4OlxcdFxcdFxcdCBodHRfc3RhdHNfYnVmLVxcdTAwM2Vod3NjaF9kdW1teV90bHZfc2tpcHBlZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kZWJ1Z2ZzX2h0dF9zdGF0cy5jLTM1NTktXFx0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIGJ1Zl9sZW4gLSBsZW4sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnZnNfaHR0X3N0YXRzLmg9Mjk2PXN0cnVjdCBodHRfaHdfc3RhdHNfd2hhbF90eF90bHYge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kZWJ1Z2ZzX2h0dF9zdGF0cy5oLTI5OS1cXHR1MzIgaHdzY2hfdW5wYXVzZV93YWl0X3RxbV93cml0ZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnZnNfaHR0X3N0YXRzLmg6MzAwOlxcdHUzMiBod3NjaF9kdW1teV90bHZfc2tpcHBlZDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnZnNfaHR0X3N0YXRzLmgtMzAxLVxcdHUzMiBod3NjaF9taXNhbGlnbmVkX29mZnNldF9yZWNlaXZlZDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuaD0xMDk0PXN0cnVjdCBodHRfdHhfZGVfY29tcGxfc3RhdHNfdGx2IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RlYnVnZnNfaHR0X3N0YXRzLmg6MTA5NTpcXHR1MzIgdGNsX2R1bW15X2ZyYW1lO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZGVidWdmc19odHRfc3RhdHMuaDoxMDk2OlxcdHUzMiB0cW1fZHVtbXlfZnJhbWU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kZWJ1Z2ZzX2h0dF9zdGF0cy5oLTEwOTctXFx0dTMyIHRxbV9ub3RpZnlfZnJhbWU7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2h0Yy5jPTU5Nj1pbnQgYXRoMTFrX2h0Y19jb25uZWN0X3NlcnZpY2Uoc3RydWN0IGF0aDExa19odGMgKmh0YyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvaHRjLmMtNjAxLVxcdHN0cnVjdCBhdGgxMWtfaHRjX2Nvbm5fc3ZjICpyZXFfbXNnO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvaHRjLmM6NjAyOlxcdHN0cnVjdCBhdGgxMWtfaHRjX2Nvbm5fc3ZjX3Jlc3AgcmVzcF9tc2dfZHVtbXk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9odGMuYzo2MDM6XFx0c3RydWN0IGF0aDExa19odGNfY29ubl9zdmNfcmVzcCAqcmVzcF9tc2cgPSBcXHUwMDI2cmVzcF9tc2dfZHVtbXk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9odGMuYy02MDQtXFx0ZW51bSBhdGgxMWtfaHRjX2VwX2lkIGFzc2lnbmVkX2VpZCA9IEFUSDExS19IVENfRVBfQ09VTlQ7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2h0Yy5jLTYxOC1cXHRcXHRtYXhfbXNnX3NpemUgPSBBVEgxMUtfSFRDX01BWF9DVFJMX01TR19MRU47XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9odGMuYzo2MTk6XFx0XFx0bWVtc2V0KFxcdTAwMjZyZXNwX21zZ19kdW1teSwgMCwgc2l6ZW9mKHJlc3BfbXNnX2R1bW15KSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9odGMuYy02MjAtXFx0XFx0Z290byBzZXR1cDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWFjLmM9ODU5ND1zdGF0aWMgaW50IGF0aDExa19tYWNfb3Bfc2V0X2ZyYWdfdGhyZXNob2xkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9tYWMuYy04NjAyLVxcdCAqXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9tYWMuYzo4NjAzOlxcdCAqIEhlbmNlIGltcGxlbWVudCBhIGR1bW15IGNhbGxiYWNrIGp1c3QgdG8gc2F5IGZyYWdtZW50YXRpb24gaXNuJ3RcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jLTg2MDQtXFx0ICogc3VwcG9ydGVkLiBUaGlzIGVmZmVjdGl2ZWx5IHByZXZlbnRzIG1hYzgwMjExIGZyb20gZG9pbmcgZnJhbWVcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmM9OTQ1PXN0YXRpYyBpbnQgYXRoMTFrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpLmMtMTEyNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaS5jOjExMjU6XFx0Lyoga2VybmVsIG1heSBhbGxvY2F0ZSBhIGR1bW15IHZlY3RvciBiZWZvcmUgcmVxdWVzdF9pcnEgYW5kXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9wY2kuYy0xMTI2LVxcdCAqIHRoZW4gYWxsb2NhdGUgYSByZWFsIHZlY3RvciB3aGVuIHJlcXVlc3RfaXJxIGlzIGNhbGxlZC5cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpYy5jPTU3Mj1zdGF0aWMgaW50IGF0aDExa19wY2ljX2V4dF9pcnFfY29uZmlnKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaWMuYy01OTQtXFx0XFx0aXJxX2dycC1cXHUwMDNlZ3JwX2lkID0gaTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3BjaWMuYzo1OTU6XFx0XFx0aXJxX2dycC1cXHUwMDNlbmFwaV9uZGV2ID0gYWxsb2NfbmV0ZGV2X2R1bW15KDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcGNpYy5jLTU5Ni1cXHRcXHRpZiAoIWlycV9ncnAtXFx1MDAzZW5hcGlfbmRldikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDoxMjowNi4xNjQxNzY2NzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA0ODY3MzQwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlIGluIFdpcmVsZXNzIERyaXZlcnM6IE5vdCBXb3J0aCBGdXp6aW5nKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyB0b3VjaGluZyBgYWxsb2NfbmV0ZGV2X2R1bW15YCwgd2hpY2ggaW5pdGlhbGx5IG1ha2VzIG1lIHRoaW5rIE5BUEkuIEJ1dCB0aGVuIEkgcmVhbGl6ZTogdGhpcyBpc24ndCBzdGFuZGFyZCBRRU1VIG1hdGVyaWFsLiBJdCdzIGZvciB0aGUgYGF0aDExa2AgYW5kIGBhdGgxMmtgIGRyaXZlcnMuIFRoZXkncmUgYm90aCBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzIGZvciBQQ0llIG9yIEFIQiBkZXZpY2VzLCBzcGVjaWZpY2FsbHkgUXVhbGNvbW0gQXRoZXJvcyB3aXJlbGVzcyBjaGlwcy4gIFRob3NlIGFyZW4ndCBlbXVsYXRlZCBhdCBhbGwgaW4gYSB0eXBpY2FsIFFFTVUgc2V0dXAuICBcblxuVGhlIHF1ZXN0aW9uIGltbWVkaWF0ZWx5IGp1bXBzIHRvIG1pbmQ6IGlzIHRoZXJlICphbnkqIHdheSBzeXprYWxsZXIgY291bGQgcG9zc2libHkgaGl0IHRoaXM/ICBJIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyLiAgVGhlIHBhdGNoIG1vZGlmaWVzIGBhdGgxMWtfd21pX3Rsdl9tYWNfcGh5X2NhcHNfcGFyc2VgIGFuZCBgYXRoMTJrX3dtaV9tYWNfcGh5X2NhcHNfcGFyc2VgLiBBaCwgdGhvc2UgYXJlIGNhbGxlZCBkdXJpbmcgV01JIGluaXRpYWxpemF0aW9uIOKAkyB3aGVuIHRoZSBkZXZpY2UgZ2V0cyBwcm9iZWQgYW5kIHRoZSBmaXJtd2FyZSBsb2Fkcy4gIFdpdGhvdXQgdGhlIGFjdHVhbCBwaHlzaWNhbCBoYXJkd2FyZSwgdGhlIGRyaXZlciBpc24ndCBnb2luZyB0byBwcm9iZSwgdGhlIGZpcm13YXJlJ3Mgbm90IGdvaW5nIHRvIGxvYWQsIGFuZCB0aG9zZSBXTUkgbWVzc2FnZXMgYXJlIG5ldmVyIGdvaW5nIHRvIGdldCBwYXJzZWQuIEdhbWUgb3Zlci4gVGhlc2UgY29kZSBwYXRocyBhcmUgKmNvbXBsZXRlbHkqIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBvciBRRU1VLlxuXG5TbywgSSdtIGdvaW5nIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBpbnN0cnVjdGlvbnMsIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gWWVwOiBcIkNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVVcIi4gIFRoYXQncyAqZXhhY3RseSogd2hhdCB0aGlzIGlzOiB2ZW5kb3Itc3BlY2lmaWMgUENJZS9BSEIgd2lyZWxlc3MgZHJpdmVycy4gU3BvdCBvbi5cblxuTm93IHRvIGZvcm11bGF0ZSB0aGUgcmVhc29uaW5nLiAgSSdsbCBwdXQgaXQgdGhpcyB3YXk6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGluIHRoZSBXTUkgcGFyc2luZyBsb2dpYyBvZiB0aGUgYXRoMTFrIGFuZCBhdGgxMmsgd2lyZWxlc3MgZHJpdmVycy4gVGhlc2UgYXJlIHZlbmRvci1zcGVjaWZpYyBQQ0llL0FIQiBkcml2ZXJzIGZvciBRdWFsY29tbSBBdGhlcm9zIDgwMi4xMWF4L2JlIGhhcmR3YXJlLiBTaW5jZSB0aGVzZSBwaHlzaWNhbCBoYXJkd2FyZSBkZXZpY2VzIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4gVGhlcmVmb3JlLCBpdCBpcyBub3Qgd29ydGggZnV6emluZy5cIlxuXG5KdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrLi4uIEkgc3BvdCBga3phbGxvY19vYmpzYCBpbiB0aGUgY29kZSwgYW5kIG15IGFsYXJtIGJlbGxzIGJyaWVmbHkgZ28gb2ZmLiBJcyB0aGF0IHNvbWUgbmV3IGtlcm5lbCBtYWNybyBJIGRvbid0IGtub3cgYWJvdXQ/IFdhaXQsIGl0IGxvb2tzIGxpa2UgYSB0eXBvLCBvciBhIG5ldyBtYWNyby4gQnV0IGl0IGRvZXNuJ3QgbWF0dGVyOyB0aGUgY29kZSdzIHVucmVhY2hhYmxlIGFueXdheS4gIE9oLCB3YWl0LCBga3phbGxvY19vYmpzYCBpcyBhIG1hY3JvIGludHJvZHVjZWQgaW4gdGhlIGtlcm5lbCB0byByZXBsYWNlIGBrY2FsbG9jYCBvciBga3phbGxvY2Agd2l0aCBtdWx0aXBsaWNhdGlvbiEgQWN0dWFsbHksIGRvZXNuJ3QgbWF0dGVyLiBUaGUgd2hvbGUgdGhpbmcgaXMgdW5yZWFjaGFibGUuICBDb25maXJtZWQuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMwOCwiT3V0cHV0VG9rZW5zIjoxMTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MTI6MTUuMjEyODUzMTE1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFsbG9jYXRpb24gaW4gdGhlIFdNSSBwYXJzaW5nIGxvZ2ljIG9mIHRoZSBhdGgxMWsgYW5kIGF0aDEyayB3aXJlbGVzcyBkcml2ZXJzLiBUaGVzZSBhcmUgdmVuZG9yLXNwZWNpZmljIFBDSWUvQUhCIGRyaXZlcnMgZm9yIFF1YWxjb21tIEF0aGVyb3MgODAyLjExYXgvYmUgaGFyZHdhcmUuIFNpbmNlIHRoZXNlIHBoeXNpY2FsIGhhcmR3YXJlIGRldmljZXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFsbG9jYXRpb24gaW4gdGhlIFdNSSBwYXJzaW5nIGxvZ2ljIG9mIHRoZSBhdGgxMWsgYW5kIGF0aDEyayB3aXJlbGVzcyBkcml2ZXJzLiBUaGVzZSBhcmUgdmVuZG9yLXNwZWNpZmljIFBDSWUvQUhCIGRyaXZlcnMgZm9yIFF1YWxjb21tIEF0aGVyb3MgODAyLjExYXgvYmUgaGFyZHdhcmUuIFNpbmNlIHRoZXNlIHBoeXNpY2FsIGhhcmR3YXJlIGRldmljZXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowbhmvr[1] Phase: Running StartedAt: 2026-07-31 00:12:38 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbhmvr[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-31 00:12:38 +0000 UTC FinishedAt: 2026-07-31 00:12:44 +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,}