Name: series-workflowhp9bl Phase: Failed StartedAt: 2026-09-13 05:29:31 +0000 UTC FinishedAt: 2026-09-13 06:22:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhp9bl[0] Phase: Succeeded StartedAt: 2026-09-13 05:29:31 +0000 UTC FinishedAt: 2026-09-13 06:22:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhp9bl[0].run-triage Phase: Succeeded StartedAt: 2026-09-13 05:29:31 +0000 UTC FinishedAt: 2026-09-13 06:22:33 +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+CgkJCTx0ZD4yMDI2LzA5LzEzIDA2OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMpIHRvIGFkZCBCSUcgVENQIEdSTyB0ZXN0IGNhc2VzLiBObyBrZXJuZWwtc3BhY2UgY29kZSBvciBjb21waWxlZCBrZXJuZWwgYXJ0aWZhY3RzICh2bWxpbnV4IG9yIGtlcm5lbCBtb2R1bGVzKSBhcmUgbW9kaWZpZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA2OjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWQxOWUzYjUyMjQzZjhmMjBlZTIzYzc5YmVlNDFkOTgxNjZjMDk3MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDA2OjIxOjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5XG5pbmRleCBiN2FjMDY2MGFkYzAxLi5hYmVjZjYwYmFhNTM3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weVxuQEAgLTQwLDEzICYjNDM7NDAsMTcgQEAgVGVzdCBjYXNlczpcbiAgIC0gaXBfdjZleHRfZGlmZjogKElQdjYpIElQdjYgZXh0IGhlYWRlciB3aXRoIGRpZmZlcmVudCBwYXlsb2FkIGRvZXNuJiMzOTt0IGNvYWxlc2NlXG4gICAtIGxhcmdlX21heDogUGFja2V0cyBleGNlZWRpbmcgR1JPX01BWF9TSVpFIGRvbiYjMzk7dCBjb2FsZXNjZVxuICAgLSBsYXJnZV9yZW06IExhcmdlIHBhY2tldCByZW1haW5kZXIgaGFuZGxpbmdcbiYjNDM7ICAtIGJpZ190Y3BfZGF0YV9zYW1lOiBTYW1lIHNpemUgcGFja2V0cyBjb2FsZXNjZSBwYXN0IElQX01BWFBBQ0tFVFxuJiM0MzsgIC0gYmlnX3RjcF9kYXRhX2xyZ19zbWw6IFNtYWxsZXIgbGFzdCBwYWNrZXQgY29hbGVzY2VzIHBhc3QgSVBfTUFYUEFDS0VUXG4mIzQzOyAgLSBiaWdfdGNwX3RjcF9zZXE6IFBhY2tldHMgd2l0aCAxNi1iaXQgdHJ1bmNhdGVkIHNlcW5vIGRvbiYjMzk7dCBjb2FsZXNjZVxuJiM0MzsgIC0gYmlnX3RjcF9sYXJnZV9tYXg6IFBhY2tldHMgZXhjZWVkaW5nIHRoZSBCSUcgVENQIGxpbWl0IGRvbiYjMzk7dCBjb2FsZXNjZVxuIFwmIzM0O1wmIzM0O1wmIzM0O1xuIFxuIGltcG9ydCBnbG9iXG4gaW1wb3J0IG9zXG4gaW1wb3J0IHJlXG4tZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfcnVuLCBrc2Z0X2V4aXQsIGtzZnRfcHJcbi1mcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIEtzZnRGYWlsRXgsIEtzZnRYZmFpbEV4XG4mIzQzO2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X3J1biwga3NmdF9leGl0LCBrc2Z0X3ByLCBrc2Z0X2VxXG4mIzQzO2Zyb20gbGliLnB5IGltcG9ydCBOZXREcnZFcEVudiwgS3NmdEZhaWxFeCwgS3NmdFNraXBFeCwgS3NmdFhmYWlsRXhcbiBmcm9tIGxpYi5weSBpbXBvcnQgTmV0ZGV2RmFtaWx5LCBFdGh0b29sRmFtaWx5XG4gZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgY21kLCBjdGxfZmlsZV93cml0ZSwgZGVmZXIsIGV0aHRvb2wsIGlwXG4gZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfdmFyaWFudHMsIEtzZnROYW1lZFZhcmlhbnRcbkBAIC01NSw2ICYjNDM7NTksOCBAQCBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF92YXJpYW50cywgS3NmdE5hbWVkVmFyaWFudFxuICMgZ3JvLmMgdXNlcyBoYXJkY29kZWQgRFBPUlQ9ODAwMFxuIEdST19EUE9SVCA9IDgwMDBcbiBcbiYjNDM7QklHX1RDUF9HUk9fTUFYX1NJWkUgPSAxMjgwMDBcbiYjNDM7XG4gXG4gZGVmIF9yZXNvbHZlX2RtYWMoY2ZnLCBpcHZlcik6XG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuQEAgLTkxLDYgJiM0Mzs5NywzNCBAQCBkZWYgX3NldF9tdHVfcmVzdG9yZShkZXYsIG10dSwgaG9zdCk6XG4gICAgICAgICBkZWZlcihpcCwgZlwmIzM0O2xpbmsgc2V0IGRldiB7ZGV2WyYjMzk7aWZuYW1lJiMzOTtdfSBtdHUge2RldlsmIzM5O210dSYjMzk7XX1cJiMzNDssIGhvc3Q9aG9zdClcbiBcbiBcbiYjNDM7ZGVmIF9zZXRfZ3JvX3NpemVfcmVzdG9yZShjZmcsIHNpemUpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBTZXQgdGhlIGxvY2FsIGRldmljZSYjMzk7cyBHUk8gc2l6ZSBsaW1pdHMsIHRoZW4gY29uZmlybSB0aGV5IHN0dWNrLlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgX3NldF9tdHVfcmVzdG9yZShjZmcuZGV2LCA0MDk2LCBOb25lKVxuJiM0MzsgICAgX3NldF9tdHVfcmVzdG9yZShjZmcucmVtb3RlX2RldiwgNDA5NiwgY2ZnLnJlbW90ZSlcbiYjNDM7XG4mIzQzOyAgICBpZiBcJiMzNDtncm9fbWF4X3NpemVcJiMzNDsgbm90IGluIGNmZy5kZXYgb3IgXCYjMzQ7Z3JvX2lwdjRfbWF4X3NpemVcJiMzNDsgbm90IGluIGNmZy5kZXY6XG4mIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcJiMzNDtpcHJvdXRlMiBkb2VzIG5vdCByZXBvcnQgdGhlIEdSTyBzaXplIGxpbWl0c1wmIzM0OylcbiYjNDM7XG4mIzQzOyAgICBpZiAoY2ZnLmRldltcJiMzNDtncm9fbWF4X3NpemVcJiMzNDtdID09IHNpemUgYW5kXG4mIzQzOyAgICAgICAgICAgIGNmZy5kZXZbXCYjMzQ7Z3JvX2lwdjRfbWF4X3NpemVcJiMzNDtdID09IHNpemUpOlxuJiM0MzsgICAgICAgIHJldHVyblxuJiM0MztcbiYjNDM7ICAgIG9sZCA9IChmXCYjMzQ7Z3JvX21heF9zaXplIHtjZmcuZGV2WyYjMzk7Z3JvX21heF9zaXplJiMzOTtdfSBcJiMzNDtcbiYjNDM7ICAgICAgICAgICBmXCYjMzQ7Z3JvX2lwdjRfbWF4X3NpemUge2NmZy5kZXZbJiMzOTtncm9faXB2NF9tYXhfc2l6ZSYjMzk7XX1cJiMzNDspXG4mIzQzOyAgICBuZXcgPSBmXCYjMzQ7Z3JvX21heF9zaXplIHtzaXplfSBncm9faXB2NF9tYXhfc2l6ZSB7c2l6ZX1cJiMzNDtcbiYjNDM7XG4mIzQzOyAgICBpcChmXCYjMzQ7bGluayBzZXQgZGV2IHtjZmcuaWZuYW1lfSB7bmV3fVwmIzM0OylcbiYjNDM7ICAgIGRlZmVyKGlwLCBmXCYjMzQ7bGluayBzZXQgZGV2IHtjZmcuaWZuYW1lfSB7b2xkfVwmIzM0OylcbiYjNDM7XG4mIzQzOyAgICBkZXYgPSBpcChcJiMzNDstZCBsaW5rIHNob3cgZGV2IFwmIzM0OyAmIzQzOyBjZmcuaWZuYW1lLCBqc29uPVRydWUpWzBdXG4mIzQzOyAgICBrc2Z0X2VxKGRldltcJiMzNDtncm9fbWF4X3NpemVcJiMzNDtdLCBzaXplLCBjb21tZW50PVwmIzM0O2dyb19tYXhfc2l6ZSBub3QgYXBwbGllZFwmIzM0OylcbiYjNDM7ICAgIGtzZnRfZXEoZGV2W1wmIzM0O2dyb19pcHY0X21heF9zaXplXCYjMzQ7XSwgc2l6ZSxcbiYjNDM7ICAgICAgICAgICAgY29tbWVudD1cJiMzNDtncm9faXB2NF9tYXhfc2l6ZSBub3QgYXBwbGllZFwmIzM0OylcbiYjNDM7XG4mIzQzO1xuIGRlZiBfc2V0X2V0aHRvb2xfZmVhdChkZXYsIGN1cnJlbnQsIGZlYXRzLCBob3N0PU5vbmUpOlxuICAgICBzMm4gPSB7VHJ1ZTogXCYjMzQ7b25cJiMzNDssIEZhbHNlOiBcJiMzNDtvZmZcJiMzNDt9XG4gXG5AQCAtMjM5LDcgJiM0MzsyNzMsMTEgQEAgZGVmIF9zZXR1cChjZmcsIG1vZGUsIHRlc3RfbmFtZSk6XG4gICAgICAgICBmbHVzaF9wYXRoID0gZlwmIzM0Oy9zeXMvY2xhc3MvbmV0L3tjZmcuaWZuYW1lfS9ncm9fZmx1c2hfdGltZW91dFwmIzM0O1xuICAgICAgICAgaXJxX3BhdGggPSBmXCYjMzQ7L3N5cy9jbGFzcy9uZXQve2NmZy5pZm5hbWV9L25hcGlfZGVmZXJfaGFyZF9pcnFzXCYjMzQ7XG4gXG4tICAgICAgICBjdGxfZmlsZV93cml0ZShmbHVzaF9wYXRoLCBcJiMzNDsyMDAwMDBcJiMzNDspXG4mIzQzOyAgICAgICAgIyBcJiMzNDtiaWdfdGNwXypcJiMzNDsgdGVzdHMgbmVlZCBhIGxvbmdlciB0aW1lb3V0LCB1c2UgMnggdGhlIHJlZ3VsYXIgdGltZW91dFxuJiM0MzsgICAgICAgIGlmIHRlc3RfbmFtZS5zdGFydHN3aXRoKFwmIzM0O2JpZ190Y3BfXCYjMzQ7KTpcbiYjNDM7ICAgICAgICAgICAgY3RsX2ZpbGVfd3JpdGUoZmx1c2hfcGF0aCwgXCYjMzQ7NDAwMDAwXCYjMzQ7KVxuJiM0MzsgICAgICAgIGVsc2U6XG4mIzQzOyAgICAgICAgICAgIGN0bF9maWxlX3dyaXRlKGZsdXNoX3BhdGgsIFwmIzM0OzIwMDAwMFwmIzM0OylcbiAgICAgICAgIGN0bF9maWxlX3dyaXRlKGlycV9wYXRoLCBcJiMzNDsxMFwmIzM0OylcbiBcbiAgICAgICAgIF9zZXRfZXRodG9vbF9mZWF0KGNmZy5pZm5hbWUsIGNmZy5mZWF0LFxuQEAgLTI4OSw2ICYjNDM7MzI3LDkgQEAgZGVmIF9zZXR1cChjZmcsIG1vZGUsIHRlc3RfbmFtZSk6XG4gICAgIGV4Y2VwdCBLc2Z0WGZhaWxFeDpcbiAgICAgICAgIHBhc3NcbiBcbiYjNDM7ICAgIGlmIHRlc3RfbmFtZS5zdGFydHN3aXRoKFwmIzM0O2JpZ190Y3BfXCYjMzQ7KTpcbiYjNDM7ICAgICAgICBfc2V0X2dyb19zaXplX3Jlc3RvcmUoY2ZnLCBCSUdfVENQX0dST19NQVhfU0laRSlcbiYjNDM7XG4gXG4gZGVmIF9ncm9fdmFyaWFudHMoKTpcbiAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7R2VuZXJhdG9yIHRoYXQgeWllbGRzIGFsbCBjb21iaW5hdGlvbnMgb2YgcHJvdG9jb2wgYW5kIHRlc3QgdHlwZXMuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG5AQCAtMzA0LDYgJiM0MzszNDUsMTEgQEAgZGVmIF9ncm9fdmFyaWFudHMoKTpcbiAgICAgICAgIFwmIzM0O2xhcmdlX21heFwmIzM0OywgXCYjMzQ7bGFyZ2VfcmVtXCYjMzQ7LFxuICAgICBdXG4gXG4mIzQzOyAgICBiaWdfdGNwX3Rlc3RzID0gW1xuJiM0MzsgICAgICAgIFwmIzM0O2JpZ190Y3BfZGF0YV9zYW1lXCYjMzQ7LCBcJiMzNDtiaWdfdGNwX2RhdGFfbHJnX3NtbFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtiaWdfdGNwX3RjcF9zZXFcJiMzNDssIFwmIzM0O2JpZ190Y3BfbGFyZ2VfbWF4XCYjMzQ7LFxuJiM0MzsgICAgXVxuJiM0MztcbiAgICAgIyBUZXN0cyBzcGVjaWZpYyB0byBJUHY0XG4gICAgIGlwdjRfdGVzdHMgPSBbXG4gICAgICAgICBcJiMzNDtpcF9jc3VtXCYjMzQ7LFxuQEAgLTMyMiw2ICYjNDM7MzY4LDEwIEBAIGRlZiBfZ3JvX3ZhcmlhbnRzKCk6XG4gICAgICAgICBmb3IgdGVzdF9uYW1lIGluIGNvbW1vbl90ZXN0czpcbiAgICAgICAgICAgICB5aWVsZCBwcm90b2NvbCwgdGVzdF9uYW1lXG4gXG4mIzQzOyAgICAgICAgaWYgcHJvdG9jb2wgaW4gW1wmIzM0O2lwdjRcJiMzNDssIFwmIzM0O2lwdjZcJiMzNDtdOlxuJiM0MzsgICAgICAgICAgICBmb3IgdGVzdF9uYW1lIGluIGJpZ190Y3BfdGVzdHM6XG4mIzQzOyAgICAgICAgICAgICAgICB5aWVsZCBwcm90b2NvbCwgdGVzdF9uYW1lXG4mIzQzO1xuICAgICAgICAgaWYgcHJvdG9jb2wgaW4gW1wmIzM0O2lwdjRcJiMzNDssIFwmIzM0O2lwaXBcJiMzNDtdOlxuICAgICAgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gaXB2NF90ZXN0czpcbiAgICAgICAgICAgICAgICAgeWllbGQgcHJvdG9jb2wsIHRlc3RfbmFtZVxuQEAgLTM1OCw3ICYjNDM7NDA4LDggQEAgZGVmIHJ1bl90ZXN0KGNmZywgbW9kZSwgcHJvdG9jb2wsIHRlc3RfbmFtZSk6XG4gICAgICAgICBpZiByeF9wcm9jLnJldCA9PSA0MjpcbiAgICAgICAgICAgICByYWlzZSBLc2Z0RmFpbEV4KGZcJiMzNDtHUk8gb3Zlci1jb2FsZXNjZWQgaW4ge3Byb3RvY29sfS97dGVzdF9uYW1lfVwmIzM0OylcbiBcbi0gICAgICAgIGlmIHRlc3RfbmFtZS5zdGFydHN3aXRoKFwmIzM0O2xhcmdlX1wmIzM0OykgYW5kIG9zLmVudmlyb24uZ2V0KFwmIzM0O0tTRlRfTUFDSElORV9TTE9XXCYjMzQ7KTpcbiYjNDM7ICAgICAgICBpZiAodGVzdF9uYW1lLnN0YXJ0c3dpdGgoKFwmIzM0O2xhcmdlX1wmIzM0OywgXCYjMzQ7YmlnX3RjcF9cJiMzNDspKSBhbmRcbiYjNDM7ICAgICAgICAgICAgICAgIG9zLmVudmlyb24uZ2V0KFwmIzM0O0tTRlRfTUFDSElORV9TTE9XXCYjMzQ7KSk6XG4gICAgICAgICAgICAga3NmdF9wcihmXCYjMzQ7SWdub3Jpbmcge3Byb3RvY29sfS97dGVzdF9uYW1lfSBmYWlsdXJlIGR1ZSB0byBzbG93IGVudmlyb25tZW50XCYjMzQ7KVxuICAgICAgICAgICAgIHJldHVyblxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jXG5pbmRleCA3YTMzMzE1NWRlMWFiLi43MGIwZGViM2MxMWZhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uY1xuQEAgLTQ2LDYgJiM0Mzs0NiwxMiBAQFxuICAqICAgLSBsYXJnZV9tYXg6IGV4Y2VlZGluZyBtYXggc2l6ZVxuICAqICAgLSBsYXJnZV9yZW06IHJlbWFpbmRlciBoYW5kbGluZ1xuICAqXG4mIzQzOyAqIGJpZ190Y3BfKjpcbiYjNDM7ICogICAtIGJpZ190Y3BfZGF0YV9zYW1lOiAgICBlcXVhbCBzZWdtZW50cyBjb2FsZXNjaW5nIHBhc3QgSVBfTUFYUEFDS0VUXG4mIzQzOyAqICAgLSBiaWdfdGNwX2RhdGFfbHJnX3NtbDogYSBzbWFsbGVyIGZpbmFsIHNlZ21lbnQgY2FycnlpbmcgaXQgb3ZlclxuJiM0MzsgKiAgIC0gYmlnX3RjcF90Y3Bfc2VxOiAgICAgIDE2LWJpdCB0cnVuY2F0ZWQgc2VxdWVuY2UgbnVtYmVyIG11c3Qgbm90IGNvYWxlc2NlXG4mIzQzOyAqICAgLSBiaWdfdGNwX2xhcmdlX21heDogICAgY29hbGVzY2luZyBzdG9wcyBhdCB0aGUgY29uZmlndXJlZCBsaW1pdFxuJiM0MzsgKlxuICAqIHNpbmdsZSwgY2FwYWNpdHk6XG4gICogIEJvcmluZyBjYXNlcyB1c2VkIHRvIHRlc3QgY29hbGVzY2luZyBtYWNoaW5lcnkgaXRzZWxmIGFuZCBzdGF0c1xuICAqICBtb3JlIHRoYW4gcHJvdG9jb2wgYmVoYXZpb3IuXG5AQCAtMTEwLDYgJiM0MzsxMTYsMTYgQEBcbiBcbiAjZGVmaW5lIEVYSVRfT1ZFUl9DT0FMRVNDRVx0NDJcbiBcbiYjNDM7LyogTXVzdCBtYXRjaCBCSUdfVENQX0dST19NQVhfU0laRSBpbiBncm9fbGliLnB5LiAqL1xuJiM0MzsjZGVmaW5lIEJJR19UQ1BfR1JPX01BWF9TSVpFXHQxMjgwMDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQklHX1RDUF9SRUNWX0JVRl9MRU4gXFxcbiYjNDM7XHQoQklHX1RDUF9HUk9fTUFYX1NJWkUgJiM0MzsgTUFYX01TUyAmIzQzOyBMMl9ITEVOX01BWClcbiYjNDM7I2RlZmluZSBCSUdfVENQX01JTl9NU1NcdFx0KEFTU1VNRURfTVRVIC0gKE1BWF9IRFJfTEVOIC0gRVRIX0hMRU4pKVxuJiM0MzsjZGVmaW5lIEJJR19UQ1BfTUFYX0ZJTExfQ05UIFxcXG4mIzQzO1x0KChpbnQpKChCSUdfVENQX0dST19NQVhfU0laRSAtIDEgLSAoTUFYX0hEUl9MRU4gLSBFVEhfSExFTikpIC8gXFxcbiYjNDM7XHQgICAgICAgQklHX1RDUF9NSU5fTVNTKSlcbiYjNDM7XG4gI2RlZmluZSBpcHY2X29wdGxlbihwKSAgKCgocCktXHUwMDNlaGRybGVuJiM0MzsxKSBcdTAwM2NcdTAwM2MgMykgLyogY2FsY3VsYXRlIElQdjYgZXh0ZW5zaW9uIGhlYWRlciBsZW4gKi9cbiAjZGVmaW5lIEJVSUxEX0JVR19PTihjb25kaXRpb24pICgodm9pZClzaXplb2YoY2hhclsxIC0gMiohIShjb25kaXRpb24pXSkpXG4gXG5AQCAtMTY2LDYgJiM0MzsxODIsMjcgQEAgc3RhdGljIGludCBudW1fbGFyZ2VfcGt0KHZvaWQpXG4gXHRyZXR1cm4gbWF4X3BheWxvYWQoKSAvIGNhbGNfbXNzKCk7XG4gfVxuIFxuJiM0MzsvKiBIb3cgbWFueSBtYXhpbXVtIHNpemVkIHNlZ21lbnRzIGZpdCB1bmRlciB0aGUgY29uZmlndXJlZCBsaW1pdC4gKi9cbiYjNDM7c3RhdGljIGludCBiaWdfdGNwX2xhcmdlX2NudCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIChCSUdfVENQX0dST19NQVhfU0laRSAtIDEgLSAodG90YWxfaGRyX2xlbiAtIEVUSF9ITEVOKSkgL1xuJiM0MztcdCAgICAgICBjYWxjX21zcygpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBIb3cgbWFueSBjYWxjX21zcygpIHNpemVkIHNlZ21lbnRzIGFyZSBuZWVkZWQgdG8gc2F0aXNmeSB0aGVcbiYjNDM7ICogZm9sbG93aW5nIGNvbmRpdGlvbjpcbiYjNDM7ICogcGt0X2NvdW50ICogY2FsY19tc3MoKSBcdTAwM2MgSVBfTUFYUEFDS0VUIFx1MDAzYyAocGt0X2NvdW50ICYjNDM7IDEpICogY2FsY19tc3MoKVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBiaWdfdGNwX2ZpbGxfY250KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gSVBfTUFYUEFDS0VUIC8gY2FsY19tc3MoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBiaWdfdGNwX2ZpbGxfbGVuKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYmlnX3RjcF9maWxsX2NudCgpICogY2FsY19tc3MoKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB2bG9nKGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIHtcbiBcdHZhX2xpc3QgYXJncztcbkBAIC01NjAsNiAmIzQzOzU5Nyw2MSBAQCBzdGF0aWMgdm9pZCBzZW5kX2RhdGFfcGt0cyhpbnQgZmQsIHN0cnVjdCBzb2NrYWRkcl9sbCAqZGFkZHIsXG4gXHR3cml0ZV9wYWNrZXQoZmQsIGJ1ZiwgdG90YWxfaGRyX2xlbiAmIzQzOyBwYXlsb2FkX2xlbjIsIGRhZGRyKTtcbiB9XG4gXG4mIzQzOy8qIFNlbmQgbnVtX3BrdCBzZWdtZW50cyBvZiBwa3RfbGVuIGJ5dGVzLCB0aGVuIG9uZSBvZiByZW1haW5kZXIgbGVuLiAqL1xuJiM0MztzdGF0aWMgdm9pZCBzZW5kX2JpZ190Y3AoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHJfbGwgKmRhZGRyLCBpbnQgcGt0X2xlbixcbiYjNDM7XHRcdFx0IGludCBudW1fcGt0LCBpbnQgcmVtYWluZGVyKVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIGNoYXIgcGt0c1tCSUdfVENQX01BWF9GSUxMX0NOVF1bTUFYX0hEUl9MRU4gJiM0MzsgTUFYX01TU107XG4mIzQzO1x0c3RhdGljIGNoYXIgbGFzdFtNQVhfSERSX0xFTiAmIzQzOyBNQVhfTVNTXTtcbiYjNDM7XHRjb25zdCBpbnQgZmlsbGVkID0gbnVtX3BrdCAqIHBrdF9sZW47XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmIChudW1fcGt0IFx1MDAzZSBCSUdfVENQX01BWF9GSUxMX0NOVClcbiYjNDM7XHRcdGVycm9yKDEsIDAsIFwmIzM0O25lZWQgJWQgcGFja2V0cywgYXJyYXkgaG9sZHMgJWRcJiMzNDssXG4mIzQzO1x0XHQgICAgICBudW1fcGt0LCBCSUdfVENQX01BWF9GSUxMX0NOVCk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9wa3Q7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0Y3JlYXRlX3BhY2tldChwa3RzW2ldLCBpICogcGt0X2xlbiwgMCwgcGt0X2xlbiwgMCk7XG4mIzQzO1x0Y3JlYXRlX3BhY2tldChsYXN0LCBmaWxsZWQsIDAsIHJlbWFpbmRlciwgMCk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9wa3Q7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0d3JpdGVfcGFja2V0KGZkLCBwa3RzW2ldLCB0b3RhbF9oZHJfbGVuICYjNDM7IHBrdF9sZW4sIGRhZGRyKTtcbiYjNDM7XHR3cml0ZV9wYWNrZXQoZmQsIGxhc3QsIHRvdGFsX2hkcl9sZW4gJiM0MzsgcmVtYWluZGVyLCBkYWRkcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEluIEJJRyBUQ1AgY29uZmlndXJhdGlvbiwgdGhlIHRvdGFsIGFnZ3JlZ2F0ZSBsZW5ndGggY2FuXG4mIzQzOyAqIGJlIGdyZWF0ZXIgdGhhbiB0aGUgbGVnYWN5IElQX01BWFBBQ0tFVC4gU2luY2UgdGhlIGFnZ3JlZ2F0ZVxuJiM0MzsgKiBsZW5ndGggaXMgdXNlZCBpbiBjYWxjdWxhdGluZyB0aGUgc2VxdWVuY2UgbnVtYmVycyxcbiYjNDM7ICogc2VuZCBhIHBhY2tldCB3aXRoIGEgc2VxdWVuY2UgbnVtYmVyIHRoYXQgZGlmZmVycyBieSBJUF9NQVhQQUNLRVQgJiM0MzsgMSxcbiYjNDM7ICogdG8gdGVzdCBhZ2FpbnN0IHRydW5jYXRpb24gYnVncy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHNlbmRfYmlnX3RjcF9iYWRfc2VxKGludCBmZCwgc3RydWN0IHNvY2thZGRyX2xsICpkYWRkcilcbiYjNDM7e1xuJiM0MztcdHN0YXRpYyBjaGFyIHBrdHNbQklHX1RDUF9NQVhfRklMTF9DTlRdW01BWF9IRFJfTEVOICYjNDM7IE1BWF9NU1NdO1xuJiM0MztcdGNvbnN0IGludCBudW1fcGt0ID0gYmlnX3RjcF9maWxsX2NudCgpICYjNDM7IDE7XG4mIzQzO1x0c3RhdGljIGNoYXIgbGFzdFtNQVhfSERSX0xFTiAmIzQzOyBNQVhfTVNTXTtcbiYjNDM7XHRjb25zdCBpbnQgcGt0X2xlbiA9IGNhbGNfbXNzKCk7XG4mIzQzO1x0aW50IGJhZF9zZXE7XG4mIzQzO1x0aW50IGZpbGxlZDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0ZmlsbGVkID0gbnVtX3BrdCAqIHBrdF9sZW47XG4mIzQzO1x0LyogTG93IDE2IGJpdHMgbWF0Y2ggd2l0aCB0aGUgY29ycmVjdCBpbmNvbWluZyBzZXF1ZW5jZSBudW1iZXIuICovXG4mIzQzO1x0YmFkX3NlcSA9IGZpbGxlZCAtIChJUF9NQVhQQUNLRVQgJiM0MzsgMSk7XG4mIzQzO1xuJiM0MztcdGlmIChudW1fcGt0IFx1MDAzZSBCSUdfVENQX01BWF9GSUxMX0NOVClcbiYjNDM7XHRcdGVycm9yKDEsIDAsIFwmIzM0O25lZWQgJWQgcGFja2V0cywgYXJyYXkgaG9sZHMgJWRcJiMzNDssXG4mIzQzO1x0XHQgICAgICBudW1fcGt0LCBCSUdfVENQX01BWF9GSUxMX0NOVCk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9wa3Q7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0Y3JlYXRlX3BhY2tldChwa3RzW2ldLCBpICogcGt0X2xlbiwgMCwgcGt0X2xlbiwgMCk7XG4mIzQzO1x0Y3JlYXRlX3BhY2tldChsYXN0LCBiYWRfc2VxLCAwLCBwa3RfbGVuLCAwKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3BrdDsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHR3cml0ZV9wYWNrZXQoZmQsIHBrdHNbaV0sIHRvdGFsX2hkcl9sZW4gJiM0MzsgcGt0X2xlbiwgZGFkZHIpO1xuJiM0MztcdHdyaXRlX3BhY2tldChmZCwgbGFzdCwgdG90YWxfaGRyX2xlbiAmIzQzOyBwa3RfbGVuLCBkYWRkcik7XG4mIzQzO31cbiYjNDM7XG4gLyogSWYgaW5jb21pbmcgc2VnbWVudHMgbWFrZSB0cmFja2VkIHNlZ21lbnQgbGVuZ3RoIGV4Y2VlZFxuICAqIGxlZ2FsIElQIGRhdGFncmFtIGxlbmd0aCwgZG8gbm90IGNvYWxlc2NlXG4gICovXG5AQCAtMTE2MSw3ICYjNDM7MTI1Myw3IEBAIHN0YXRpYyB2b2lkIHJlY3ZfZXJyb3IoaW50IGZkLCBpbnQgcmN2X2Vycm5vKVxuIHN0YXRpYyB2b2lkIGNoZWNrX3JlY3ZfcGt0cyhpbnQgZmQsIGludCAqY29ycmVjdF9wYXlsb2FkLFxuIFx0XHRcdCAgICBpbnQgY29ycmVjdF9udW1fcGt0cylcbiB7XG4tXHRzdGF0aWMgY2hhciBidWZmZXJbSVBfTUFYUEFDS0VUICYjNDM7IEwyX0hMRU5fTUFYICYjNDM7IDFdO1xuJiM0MztcdHN0YXRpYyBjaGFyIGJ1ZmZlcltCSUdfVENQX1JFQ1ZfQlVGX0xFTl07XG4gXHRpbnQgbmhvZmYgPSBFVEhfSExFTiAmIzQzOyAocHBwb2UgPyBQUFBPRV9TRVNfSExFTiA6IDApO1xuIFx0c3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopKGJ1ZmZlciAmIzQzOyBuaG9mZik7XG4gXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShidWZmZXIgJiM0MzsgbmhvZmYpO1xuQEAgLTE1NDEsNiAmIzQzOzE2MzMsMjUgQEAgc3RhdGljIHZvaWQgZ3JvX3NlbmRlcih2b2lkKVxuIFx0XHRzZW5kX2xhcmdlKHR4ZmQsIFx1MDAyNmRhZGRyLCByZW1haW5kZXIgJiM0MzsgMSk7XG4gXHRcdHdyaXRlX3BhY2tldCh0eGZkLCBmaW5fcGt0LCB0b3RhbF9oZHJfbGVuLCBcdTAwMjZkYWRkcik7XG4gXG4mIzQzO1x0LyogYmlnIHRjcCBzdWItdGVzdHMgKi9cbiYjNDM7XHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXCYjMzQ7YmlnX3RjcF9kYXRhX3NhbWVcJiMzNDspID09IDApIHtcbiYjNDM7XHRcdHNlbmRfYmlnX3RjcCh0eGZkLCBcdTAwMjZkYWRkciwgY2FsY19tc3MoKSwgYmlnX3RjcF9maWxsX2NudCgpLFxuJiM0MztcdFx0XHQgICAgIGNhbGNfbXNzKCkpO1xuJiM0MztcdFx0d3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sIFx1MDAyNmRhZGRyKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXCYjMzQ7YmlnX3RjcF9kYXRhX2xyZ19zbWxcJiMzNDspID09IDApIHtcbiYjNDM7XHRcdGludCByZW1haW5kZXIgPSBjYWxjX21zcygpIC8gMjtcbiYjNDM7XG4mIzQzO1x0XHRzZW5kX2JpZ190Y3AodHhmZCwgXHUwMDI2ZGFkZHIsIGNhbGNfbXNzKCksIGJpZ190Y3BfZmlsbF9jbnQoKSxcbiYjNDM7XHRcdFx0ICAgICByZW1haW5kZXIpO1xuJiM0MztcdFx0d3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sIFx1MDAyNmRhZGRyKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXCYjMzQ7YmlnX3RjcF90Y3Bfc2VxXCYjMzQ7KSA9PSAwKSB7XG4mIzQzO1x0XHRzZW5kX2JpZ190Y3BfYmFkX3NlcSh0eGZkLCBcdTAwMjZkYWRkcik7XG4mIzQzO1x0XHR3cml0ZV9wYWNrZXQodHhmZCwgZmluX3BrdCwgdG90YWxfaGRyX2xlbiwgXHUwMDI2ZGFkZHIpO1xuJiM0MztcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcJiMzNDtiaWdfdGNwX2xhcmdlX21heFwmIzM0OykgPT0gMCkge1xuJiM0MztcdFx0c2VuZF9iaWdfdGNwKHR4ZmQsIFx1MDAyNmRhZGRyLCBjYWxjX21zcygpLCBiaWdfdGNwX2xhcmdlX2NudCgpLFxuJiM0MztcdFx0XHQgICAgIGNhbGNfbXNzKCkpO1xuJiM0MztcdFx0d3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sIFx1MDAyNmRhZGRyKTtcbiYjNDM7XG4gXHQvKiBtYWNoaW5lcnkgc3ViLXRlc3RzICovXG4gXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXCYjMzQ7c2luZ2xlXCYjMzQ7KSA9PSAwKSB7XG4gXHRcdHN0YXRpYyBjaGFyIGJ1ZltNQVhfSERSX0xFTiAmIzQzOyBQQVlMT0FEX0xFTl07XG5AQCAtMTc2OCw2ICYjNDM7MTg3OSwyNiBAQCBzdGF0aWMgdm9pZCBncm9fcmVjZWl2ZXIodm9pZClcbiBcdFx0cHJpbnRmKFwmIzM0O2xhc3Qgc2VnbWVudCBzZW50IGluZGl2aWR1YWxseTogXCYjMzQ7KTtcbiBcdFx0Y2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMyk7XG4gXG4mIzQzO1x0LyogYmlnIHRjcCBzdWItdGVzdHMgKi9cbiYjNDM7XHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXCYjMzQ7YmlnX3RjcF9kYXRhX3NhbWVcJiMzNDspID09IDApIHtcbiYjNDM7XHRcdGNvcnJlY3RfcGF5bG9hZFswXSA9IGJpZ190Y3BfZmlsbF9sZW4oKSAmIzQzOyBjYWxjX21zcygpO1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0O2RhdGEgcGFja2V0cyBvZiBzYW1lIHNpemUgcGFzdCBJUF9NQVhQQUNLRVQ6IFwmIzM0Oyk7XG4mIzQzO1x0XHRjaGVja19yZWN2X3BrdHMocnhmZCwgY29ycmVjdF9wYXlsb2FkLCAxKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXCYjMzQ7YmlnX3RjcF9kYXRhX2xyZ19zbWxcJiMzNDspID09IDApIHtcbiYjNDM7XHRcdGNvcnJlY3RfcGF5bG9hZFswXSA9IGJpZ190Y3BfZmlsbF9sZW4oKSAmIzQzOyBjYWxjX21zcygpIC8gMjtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDtzbWFsbGVyIGxhc3QgcGFja2V0IHBhc3QgSVBfTUFYUEFDS0VUOiBcJiMzNDspO1xuJiM0MztcdFx0Y2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMSk7XG4mIzQzO1x0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFwmIzM0O2JpZ190Y3BfdGNwX3NlcVwmIzM0OykgPT0gMCkge1xuJiM0MztcdFx0Y29ycmVjdF9wYXlsb2FkWzBdID0gKGJpZ190Y3BfZmlsbF9jbnQoKSAmIzQzOyAxKSAqIGNhbGNfbXNzKCk7XG4mIzQzO1x0XHRjb3JyZWN0X3BheWxvYWRbMV0gPSBjYWxjX21zcygpO1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0O2FsaWFzZWQgc2VxIHBhc3QgSVBfTUFYUEFDS0VUIGRvZXNuJiMzOTt0IGNvYWxlc2NlOiBcJiMzNDspO1xuJiM0MztcdFx0Y2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMik7XG4mIzQzO1x0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFwmIzM0O2JpZ190Y3BfbGFyZ2VfbWF4XCYjMzQ7KSA9PSAwKSB7XG4mIzQzO1x0XHRjb3JyZWN0X3BheWxvYWRbMF0gPSBiaWdfdGNwX2xhcmdlX2NudCgpICogY2FsY19tc3MoKTtcbiYjNDM7XHRcdGNvcnJlY3RfcGF5bG9hZFsxXSA9IGNhbGNfbXNzKCk7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7c2hvdWxkbiYjMzk7dCBjb2FsZXNjZSBwYXN0IGdyb19tYXhfc2l6ZTogXCYjMzQ7KTtcbiYjNDM7XHRcdGNoZWNrX3JlY3ZfcGt0cyhyeGZkLCBjb3JyZWN0X3BheWxvYWQsIDIpO1xuJiM0MztcbiBcdC8qIG1hY2hpbmVyeSBzdWItdGVzdHMgKi9cbiBcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcJiMzNDtzaW5nbGVcJiMzNDspID09IDApIHtcbiBcdFx0cHJpbnRmKFwmIzM0O3NpbmdsZSBkYXRhIHBhY2tldDogXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNjoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weSBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYykgdG8gYWRkIEJJRyBUQ1AgR1JPIHRlc3QgY2FzZXMuIE5vIGtlcm5lbC1zcGFjZSBjb2RlIG9yIGNvbXBpbGVkIGtlcm5lbCBhcnRpZmFjdHMgKHZtbGludXggb3Iga2VybmVsIG1vZHVsZXMpIGFyZSBtb2RpZmllZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5ZDE5ZTNiNTIyNDNmOGYyMGVlMjNjNzliZWU0MWQ5ODE2NmMwOTcwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMDY6MjE6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weQppbmRleCBiN2FjMDY2MGFkYzAxLi5hYmVjZjYwYmFhNTM3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkKQEAgLTQwLDEzICYjNDM7NDAsMTcgQEAgVGVzdCBjYXNlczoKICAgLSBpcF92NmV4dF9kaWZmOiAoSVB2NikgSVB2NiBleHQgaGVhZGVyIHdpdGggZGlmZmVyZW50IHBheWxvYWQgZG9lc24mIzM5O3QgY29hbGVzY2UKICAgLSBsYXJnZV9tYXg6IFBhY2tldHMgZXhjZWVkaW5nIEdST19NQVhfU0laRSBkb24mIzM5O3QgY29hbGVzY2UKICAgLSBsYXJnZV9yZW06IExhcmdlIHBhY2tldCByZW1haW5kZXIgaGFuZGxpbmcKJiM0MzsgIC0gYmlnX3RjcF9kYXRhX3NhbWU6IFNhbWUgc2l6ZSBwYWNrZXRzIGNvYWxlc2NlIHBhc3QgSVBfTUFYUEFDS0VUCiYjNDM7ICAtIGJpZ190Y3BfZGF0YV9scmdfc21sOiBTbWFsbGVyIGxhc3QgcGFja2V0IGNvYWxlc2NlcyBwYXN0IElQX01BWFBBQ0tFVAomIzQzOyAgLSBiaWdfdGNwX3RjcF9zZXE6IFBhY2tldHMgd2l0aCAxNi1iaXQgdHJ1bmNhdGVkIHNlcW5vIGRvbiYjMzk7dCBjb2FsZXNjZQomIzQzOyAgLSBiaWdfdGNwX2xhcmdlX21heDogUGFja2V0cyBleGNlZWRpbmcgdGhlIEJJRyBUQ1AgbGltaXQgZG9uJiMzOTt0IGNvYWxlc2NlCiAmIzM0OyYjMzQ7JiMzNDsKIAogaW1wb3J0IGdsb2IKIGltcG9ydCBvcwogaW1wb3J0IHJlCi1mcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXhpdCwga3NmdF9wcgotZnJvbSBsaWIucHkgaW1wb3J0IE5ldERydkVwRW52LCBLc2Z0RmFpbEV4LCBLc2Z0WGZhaWxFeAomIzQzO2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X3J1biwga3NmdF9leGl0LCBrc2Z0X3ByLCBrc2Z0X2VxCiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IE5ldERydkVwRW52LCBLc2Z0RmFpbEV4LCBLc2Z0U2tpcEV4LCBLc2Z0WGZhaWxFeAogZnJvbSBsaWIucHkgaW1wb3J0IE5ldGRldkZhbWlseSwgRXRodG9vbEZhbWlseQogZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgY21kLCBjdGxfZmlsZV93cml0ZSwgZGVmZXIsIGV0aHRvb2wsIGlwCiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF92YXJpYW50cywgS3NmdE5hbWVkVmFyaWFudApAQCAtNTUsNiAmIzQzOzU5LDggQEAgZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfdmFyaWFudHMsIEtzZnROYW1lZFZhcmlhbnQKICMgZ3JvLmMgdXNlcyBoYXJkY29kZWQgRFBPUlQ9ODAwMAogR1JPX0RQT1JUID0gODAwMAogCiYjNDM7QklHX1RDUF9HUk9fTUFYX1NJWkUgPSAxMjgwMDAKJiM0MzsKIAogZGVmIF9yZXNvbHZlX2RtYWMoY2ZnLCBpcHZlcik6CiAgICAgJiMzNDsmIzM0OyYjMzQ7CkBAIC05MSw2ICYjNDM7OTcsMzQgQEAgZGVmIF9zZXRfbXR1X3Jlc3RvcmUoZGV2LCBtdHUsIGhvc3QpOgogICAgICAgICBkZWZlcihpcCwgZiYjMzQ7bGluayBzZXQgZGV2IHtkZXZbJiMzOTtpZm5hbWUmIzM5O119IG10dSB7ZGV2WyYjMzk7bXR1JiMzOTtdfSYjMzQ7LCBob3N0PWhvc3QpCiAKIAomIzQzO2RlZiBfc2V0X2dyb19zaXplX3Jlc3RvcmUoY2ZnLCBzaXplKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIFNldCB0aGUgbG9jYWwgZGV2aWNlJiMzOTtzIEdSTyBzaXplIGxpbWl0cywgdGhlbiBjb25maXJtIHRoZXkgc3R1Y2suCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICBfc2V0X210dV9yZXN0b3JlKGNmZy5kZXYsIDQwOTYsIE5vbmUpCiYjNDM7ICAgIF9zZXRfbXR1X3Jlc3RvcmUoY2ZnLnJlbW90ZV9kZXYsIDQwOTYsIGNmZy5yZW1vdGUpCiYjNDM7CiYjNDM7ICAgIGlmICYjMzQ7Z3JvX21heF9zaXplJiMzNDsgbm90IGluIGNmZy5kZXYgb3IgJiMzNDtncm9faXB2NF9tYXhfc2l6ZSYjMzQ7IG5vdCBpbiBjZmcuZGV2OgomIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM0O2lwcm91dGUyIGRvZXMgbm90IHJlcG9ydCB0aGUgR1JPIHNpemUgbGltaXRzJiMzNDspCiYjNDM7CiYjNDM7ICAgIGlmIChjZmcuZGV2WyYjMzQ7Z3JvX21heF9zaXplJiMzNDtdID09IHNpemUgYW5kCiYjNDM7ICAgICAgICAgICAgY2ZnLmRldlsmIzM0O2dyb19pcHY0X21heF9zaXplJiMzNDtdID09IHNpemUpOgomIzQzOyAgICAgICAgcmV0dXJuCiYjNDM7CiYjNDM7ICAgIG9sZCA9IChmJiMzNDtncm9fbWF4X3NpemUge2NmZy5kZXZbJiMzOTtncm9fbWF4X3NpemUmIzM5O119ICYjMzQ7CiYjNDM7ICAgICAgICAgICBmJiMzNDtncm9faXB2NF9tYXhfc2l6ZSB7Y2ZnLmRldlsmIzM5O2dyb19pcHY0X21heF9zaXplJiMzOTtdfSYjMzQ7KQomIzQzOyAgICBuZXcgPSBmJiMzNDtncm9fbWF4X3NpemUge3NpemV9IGdyb19pcHY0X21heF9zaXplIHtzaXplfSYjMzQ7CiYjNDM7CiYjNDM7ICAgIGlwKGYmIzM0O2xpbmsgc2V0IGRldiB7Y2ZnLmlmbmFtZX0ge25ld30mIzM0OykKJiM0MzsgICAgZGVmZXIoaXAsIGYmIzM0O2xpbmsgc2V0IGRldiB7Y2ZnLmlmbmFtZX0ge29sZH0mIzM0OykKJiM0MzsKJiM0MzsgICAgZGV2ID0gaXAoJiMzNDstZCBsaW5rIHNob3cgZGV2ICYjMzQ7ICYjNDM7IGNmZy5pZm5hbWUsIGpzb249VHJ1ZSlbMF0KJiM0MzsgICAga3NmdF9lcShkZXZbJiMzNDtncm9fbWF4X3NpemUmIzM0O10sIHNpemUsIGNvbW1lbnQ9JiMzNDtncm9fbWF4X3NpemUgbm90IGFwcGxpZWQmIzM0OykKJiM0MzsgICAga3NmdF9lcShkZXZbJiMzNDtncm9faXB2NF9tYXhfc2l6ZSYjMzQ7XSwgc2l6ZSwKJiM0MzsgICAgICAgICAgICBjb21tZW50PSYjMzQ7Z3JvX2lwdjRfbWF4X3NpemUgbm90IGFwcGxpZWQmIzM0OykKJiM0MzsKJiM0MzsKIGRlZiBfc2V0X2V0aHRvb2xfZmVhdChkZXYsIGN1cnJlbnQsIGZlYXRzLCBob3N0PU5vbmUpOgogICAgIHMybiA9IHtUcnVlOiAmIzM0O29uJiMzNDssIEZhbHNlOiAmIzM0O29mZiYjMzQ7fQogCkBAIC0yMzksNyAmIzQzOzI3MywxMSBAQCBkZWYgX3NldHVwKGNmZywgbW9kZSwgdGVzdF9uYW1lKToKICAgICAgICAgZmx1c2hfcGF0aCA9IGYmIzM0Oy9zeXMvY2xhc3MvbmV0L3tjZmcuaWZuYW1lfS9ncm9fZmx1c2hfdGltZW91dCYjMzQ7CiAgICAgICAgIGlycV9wYXRoID0gZiYjMzQ7L3N5cy9jbGFzcy9uZXQve2NmZy5pZm5hbWV9L25hcGlfZGVmZXJfaGFyZF9pcnFzJiMzNDsKIAotICAgICAgICBjdGxfZmlsZV93cml0ZShmbHVzaF9wYXRoLCAmIzM0OzIwMDAwMCYjMzQ7KQomIzQzOyAgICAgICAgIyAmIzM0O2JpZ190Y3BfKiYjMzQ7IHRlc3RzIG5lZWQgYSBsb25nZXIgdGltZW91dCwgdXNlIDJ4IHRoZSByZWd1bGFyIHRpbWVvdXQKJiM0MzsgICAgICAgIGlmIHRlc3RfbmFtZS5zdGFydHN3aXRoKCYjMzQ7YmlnX3RjcF8mIzM0Oyk6CiYjNDM7ICAgICAgICAgICAgY3RsX2ZpbGVfd3JpdGUoZmx1c2hfcGF0aCwgJiMzNDs0MDAwMDAmIzM0OykKJiM0MzsgICAgICAgIGVsc2U6CiYjNDM7ICAgICAgICAgICAgY3RsX2ZpbGVfd3JpdGUoZmx1c2hfcGF0aCwgJiMzNDsyMDAwMDAmIzM0OykKICAgICAgICAgY3RsX2ZpbGVfd3JpdGUoaXJxX3BhdGgsICYjMzQ7MTAmIzM0OykKIAogICAgICAgICBfc2V0X2V0aHRvb2xfZmVhdChjZmcuaWZuYW1lLCBjZmcuZmVhdCwKQEAgLTI4OSw2ICYjNDM7MzI3LDkgQEAgZGVmIF9zZXR1cChjZmcsIG1vZGUsIHRlc3RfbmFtZSk6CiAgICAgZXhjZXB0IEtzZnRYZmFpbEV4OgogICAgICAgICBwYXNzCiAKJiM0MzsgICAgaWYgdGVzdF9uYW1lLnN0YXJ0c3dpdGgoJiMzNDtiaWdfdGNwXyYjMzQ7KToKJiM0MzsgICAgICAgIF9zZXRfZ3JvX3NpemVfcmVzdG9yZShjZmcsIEJJR19UQ1BfR1JPX01BWF9TSVpFKQomIzQzOwogCiBkZWYgX2dyb192YXJpYW50cygpOgogICAgICYjMzQ7JiMzNDsmIzM0O0dlbmVyYXRvciB0aGF0IHlpZWxkcyBhbGwgY29tYmluYXRpb25zIG9mIHByb3RvY29sIGFuZCB0ZXN0IHR5cGVzLiYjMzQ7JiMzNDsmIzM0OwpAQCAtMzA0LDYgJiM0MzszNDUsMTEgQEAgZGVmIF9ncm9fdmFyaWFudHMoKToKICAgICAgICAgJiMzNDtsYXJnZV9tYXgmIzM0OywgJiMzNDtsYXJnZV9yZW0mIzM0OywKICAgICBdCiAKJiM0MzsgICAgYmlnX3RjcF90ZXN0cyA9IFsKJiM0MzsgICAgICAgICYjMzQ7YmlnX3RjcF9kYXRhX3NhbWUmIzM0OywgJiMzNDtiaWdfdGNwX2RhdGFfbHJnX3NtbCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtiaWdfdGNwX3RjcF9zZXEmIzM0OywgJiMzNDtiaWdfdGNwX2xhcmdlX21heCYjMzQ7LAomIzQzOyAgICBdCiYjNDM7CiAgICAgIyBUZXN0cyBzcGVjaWZpYyB0byBJUHY0CiAgICAgaXB2NF90ZXN0cyA9IFsKICAgICAgICAgJiMzNDtpcF9jc3VtJiMzNDssCkBAIC0zMjIsNiAmIzQzOzM2OCwxMCBAQCBkZWYgX2dyb192YXJpYW50cygpOgogICAgICAgICBmb3IgdGVzdF9uYW1lIGluIGNvbW1vbl90ZXN0czoKICAgICAgICAgICAgIHlpZWxkIHByb3RvY29sLCB0ZXN0X25hbWUKIAomIzQzOyAgICAgICAgaWYgcHJvdG9jb2wgaW4gWyYjMzQ7aXB2NCYjMzQ7LCAmIzM0O2lwdjYmIzM0O106CiYjNDM7ICAgICAgICAgICAgZm9yIHRlc3RfbmFtZSBpbiBiaWdfdGNwX3Rlc3RzOgomIzQzOyAgICAgICAgICAgICAgICB5aWVsZCBwcm90b2NvbCwgdGVzdF9uYW1lCiYjNDM7CiAgICAgICAgIGlmIHByb3RvY29sIGluIFsmIzM0O2lwdjQmIzM0OywgJiMzNDtpcGlwJiMzNDtdOgogICAgICAgICAgICAgZm9yIHRlc3RfbmFtZSBpbiBpcHY0X3Rlc3RzOgogICAgICAgICAgICAgICAgIHlpZWxkIHByb3RvY29sLCB0ZXN0X25hbWUKQEAgLTM1OCw3ICYjNDM7NDA4LDggQEAgZGVmIHJ1bl90ZXN0KGNmZywgbW9kZSwgcHJvdG9jb2wsIHRlc3RfbmFtZSk6CiAgICAgICAgIGlmIHJ4X3Byb2MucmV0ID09IDQyOgogICAgICAgICAgICAgcmFpc2UgS3NmdEZhaWxFeChmJiMzNDtHUk8gb3Zlci1jb2FsZXNjZWQgaW4ge3Byb3RvY29sfS97dGVzdF9uYW1lfSYjMzQ7KQogCi0gICAgICAgIGlmIHRlc3RfbmFtZS5zdGFydHN3aXRoKCYjMzQ7bGFyZ2VfJiMzNDspIGFuZCBvcy5lbnZpcm9uLmdldCgmIzM0O0tTRlRfTUFDSElORV9TTE9XJiMzNDspOgomIzQzOyAgICAgICAgaWYgKHRlc3RfbmFtZS5zdGFydHN3aXRoKCgmIzM0O2xhcmdlXyYjMzQ7LCAmIzM0O2JpZ190Y3BfJiMzNDspKSBhbmQKJiM0MzsgICAgICAgICAgICAgICAgb3MuZW52aXJvbi5nZXQoJiMzNDtLU0ZUX01BQ0hJTkVfU0xPVyYjMzQ7KSk6CiAgICAgICAgICAgICBrc2Z0X3ByKGYmIzM0O0lnbm9yaW5nIHtwcm90b2NvbH0ve3Rlc3RfbmFtZX0gZmFpbHVyZSBkdWUgdG8gc2xvdyBlbnZpcm9ubWVudCYjMzQ7KQogICAgICAgICAgICAgcmV0dXJuCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jCmluZGV4IDdhMzMzMTU1ZGUxYWIuLjcwYjBkZWIzYzExZmEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYwpAQCAtNDYsNiAmIzQzOzQ2LDEyIEBACiAgKiAgIC0gbGFyZ2VfbWF4OiBleGNlZWRpbmcgbWF4IHNpemUKICAqICAgLSBsYXJnZV9yZW06IHJlbWFpbmRlciBoYW5kbGluZwogICoKJiM0MzsgKiBiaWdfdGNwXyo6CiYjNDM7ICogICAtIGJpZ190Y3BfZGF0YV9zYW1lOiAgICBlcXVhbCBzZWdtZW50cyBjb2FsZXNjaW5nIHBhc3QgSVBfTUFYUEFDS0VUCiYjNDM7ICogICAtIGJpZ190Y3BfZGF0YV9scmdfc21sOiBhIHNtYWxsZXIgZmluYWwgc2VnbWVudCBjYXJyeWluZyBpdCBvdmVyCiYjNDM7ICogICAtIGJpZ190Y3BfdGNwX3NlcTogICAgICAxNi1iaXQgdHJ1bmNhdGVkIHNlcXVlbmNlIG51bWJlciBtdXN0IG5vdCBjb2FsZXNjZQomIzQzOyAqICAgLSBiaWdfdGNwX2xhcmdlX21heDogICAgY29hbGVzY2luZyBzdG9wcyBhdCB0aGUgY29uZmlndXJlZCBsaW1pdAomIzQzOyAqCiAgKiBzaW5nbGUsIGNhcGFjaXR5OgogICogIEJvcmluZyBjYXNlcyB1c2VkIHRvIHRlc3QgY29hbGVzY2luZyBtYWNoaW5lcnkgaXRzZWxmIGFuZCBzdGF0cwogICogIG1vcmUgdGhhbiBwcm90b2NvbCBiZWhhdmlvci4KQEAgLTExMCw2ICYjNDM7MTE2LDE2IEBACiAKICNkZWZpbmUgRVhJVF9PVkVSX0NPQUxFU0NFCTQyCiAKJiM0MzsvKiBNdXN0IG1hdGNoIEJJR19UQ1BfR1JPX01BWF9TSVpFIGluIGdyb19saWIucHkuICovCiYjNDM7I2RlZmluZSBCSUdfVENQX0dST19NQVhfU0laRQkxMjgwMDAKJiM0MzsKJiM0MzsjZGVmaW5lIEJJR19UQ1BfUkVDVl9CVUZfTEVOIFwKJiM0MzsJKEJJR19UQ1BfR1JPX01BWF9TSVpFICYjNDM7IE1BWF9NU1MgJiM0MzsgTDJfSExFTl9NQVgpCiYjNDM7I2RlZmluZSBCSUdfVENQX01JTl9NU1MJCShBU1NVTUVEX01UVSAtIChNQVhfSERSX0xFTiAtIEVUSF9ITEVOKSkKJiM0MzsjZGVmaW5lIEJJR19UQ1BfTUFYX0ZJTExfQ05UIFwKJiM0MzsJKChpbnQpKChCSUdfVENQX0dST19NQVhfU0laRSAtIDEgLSAoTUFYX0hEUl9MRU4gLSBFVEhfSExFTikpIC8gXAomIzQzOwkgICAgICAgQklHX1RDUF9NSU5fTVNTKSkKJiM0MzsKICNkZWZpbmUgaXB2Nl9vcHRsZW4ocCkgICgoKHApLSZndDtoZHJsZW4mIzQzOzEpICZsdDsmbHQ7IDMpIC8qIGNhbGN1bGF0ZSBJUHY2IGV4dGVuc2lvbiBoZWFkZXIgbGVuICovCiAjZGVmaW5lIEJVSUxEX0JVR19PTihjb25kaXRpb24pICgodm9pZClzaXplb2YoY2hhclsxIC0gMiohIShjb25kaXRpb24pXSkpCiAKQEAgLTE2Niw2ICYjNDM7MTgyLDI3IEBAIHN0YXRpYyBpbnQgbnVtX2xhcmdlX3BrdCh2b2lkKQogCXJldHVybiBtYXhfcGF5bG9hZCgpIC8gY2FsY19tc3MoKTsKIH0KIAomIzQzOy8qIEhvdyBtYW55IG1heGltdW0gc2l6ZWQgc2VnbWVudHMgZml0IHVuZGVyIHRoZSBjb25maWd1cmVkIGxpbWl0LiAqLwomIzQzO3N0YXRpYyBpbnQgYmlnX3RjcF9sYXJnZV9jbnQodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiAoQklHX1RDUF9HUk9fTUFYX1NJWkUgLSAxIC0gKHRvdGFsX2hkcl9sZW4gLSBFVEhfSExFTikpIC8KJiM0MzsJICAgICAgIGNhbGNfbXNzKCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIEhvdyBtYW55IGNhbGNfbXNzKCkgc2l6ZWQgc2VnbWVudHMgYXJlIG5lZWRlZCB0byBzYXRpc2Z5IHRoZQomIzQzOyAqIGZvbGxvd2luZyBjb25kaXRpb246CiYjNDM7ICogcGt0X2NvdW50ICogY2FsY19tc3MoKSAmbHQ7IElQX01BWFBBQ0tFVCAmbHQ7IChwa3RfY291bnQgJiM0MzsgMSkgKiBjYWxjX21zcygpCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBiaWdfdGNwX2ZpbGxfY250KHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gSVBfTUFYUEFDS0VUIC8gY2FsY19tc3MoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBiaWdfdGNwX2ZpbGxfbGVuKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gYmlnX3RjcF9maWxsX2NudCgpICogY2FsY19tc3MoKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB2bG9nKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCXZhX2xpc3QgYXJnczsKQEAgLTU2MCw2ICYjNDM7NTk3LDYxIEBAIHN0YXRpYyB2b2lkIHNlbmRfZGF0YV9wa3RzKGludCBmZCwgc3RydWN0IHNvY2thZGRyX2xsICpkYWRkciwKIAl3cml0ZV9wYWNrZXQoZmQsIGJ1ZiwgdG90YWxfaGRyX2xlbiAmIzQzOyBwYXlsb2FkX2xlbjIsIGRhZGRyKTsKIH0KIAomIzQzOy8qIFNlbmQgbnVtX3BrdCBzZWdtZW50cyBvZiBwa3RfbGVuIGJ5dGVzLCB0aGVuIG9uZSBvZiByZW1haW5kZXIgbGVuLiAqLwomIzQzO3N0YXRpYyB2b2lkIHNlbmRfYmlnX3RjcChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkcl9sbCAqZGFkZHIsIGludCBwa3RfbGVuLAomIzQzOwkJCSBpbnQgbnVtX3BrdCwgaW50IHJlbWFpbmRlcikKJiM0Mzt7CiYjNDM7CXN0YXRpYyBjaGFyIHBrdHNbQklHX1RDUF9NQVhfRklMTF9DTlRdW01BWF9IRFJfTEVOICYjNDM7IE1BWF9NU1NdOwomIzQzOwlzdGF0aWMgY2hhciBsYXN0W01BWF9IRFJfTEVOICYjNDM7IE1BWF9NU1NdOwomIzQzOwljb25zdCBpbnQgZmlsbGVkID0gbnVtX3BrdCAqIHBrdF9sZW47CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAobnVtX3BrdCAmZ3Q7IEJJR19UQ1BfTUFYX0ZJTExfQ05UKQomIzQzOwkJZXJyb3IoMSwgMCwgJiMzNDtuZWVkICVkIHBhY2tldHMsIGFycmF5IGhvbGRzICVkJiMzNDssCiYjNDM7CQkgICAgICBudW1fcGt0LCBCSUdfVENQX01BWF9GSUxMX0NOVCk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBudW1fcGt0OyBpJiM0MzsmIzQzOykKJiM0MzsJCWNyZWF0ZV9wYWNrZXQocGt0c1tpXSwgaSAqIHBrdF9sZW4sIDAsIHBrdF9sZW4sIDApOwomIzQzOwljcmVhdGVfcGFja2V0KGxhc3QsIGZpbGxlZCwgMCwgcmVtYWluZGVyLCAwKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG51bV9wa3Q7IGkmIzQzOyYjNDM7KQomIzQzOwkJd3JpdGVfcGFja2V0KGZkLCBwa3RzW2ldLCB0b3RhbF9oZHJfbGVuICYjNDM7IHBrdF9sZW4sIGRhZGRyKTsKJiM0MzsJd3JpdGVfcGFja2V0KGZkLCBsYXN0LCB0b3RhbF9oZHJfbGVuICYjNDM7IHJlbWFpbmRlciwgZGFkZHIpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBJbiBCSUcgVENQIGNvbmZpZ3VyYXRpb24sIHRoZSB0b3RhbCBhZ2dyZWdhdGUgbGVuZ3RoIGNhbgomIzQzOyAqIGJlIGdyZWF0ZXIgdGhhbiB0aGUgbGVnYWN5IElQX01BWFBBQ0tFVC4gU2luY2UgdGhlIGFnZ3JlZ2F0ZQomIzQzOyAqIGxlbmd0aCBpcyB1c2VkIGluIGNhbGN1bGF0aW5nIHRoZSBzZXF1ZW5jZSBudW1iZXJzLAomIzQzOyAqIHNlbmQgYSBwYWNrZXQgd2l0aCBhIHNlcXVlbmNlIG51bWJlciB0aGF0IGRpZmZlcnMgYnkgSVBfTUFYUEFDS0VUICYjNDM7IDEsCiYjNDM7ICogdG8gdGVzdCBhZ2FpbnN0IHRydW5jYXRpb24gYnVncy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBzZW5kX2JpZ190Y3BfYmFkX3NlcShpbnQgZmQsIHN0cnVjdCBzb2NrYWRkcl9sbCAqZGFkZHIpCiYjNDM7ewomIzQzOwlzdGF0aWMgY2hhciBwa3RzW0JJR19UQ1BfTUFYX0ZJTExfQ05UXVtNQVhfSERSX0xFTiAmIzQzOyBNQVhfTVNTXTsKJiM0MzsJY29uc3QgaW50IG51bV9wa3QgPSBiaWdfdGNwX2ZpbGxfY250KCkgJiM0MzsgMTsKJiM0MzsJc3RhdGljIGNoYXIgbGFzdFtNQVhfSERSX0xFTiAmIzQzOyBNQVhfTVNTXTsKJiM0MzsJY29uc3QgaW50IHBrdF9sZW4gPSBjYWxjX21zcygpOwomIzQzOwlpbnQgYmFkX3NlcTsKJiM0MzsJaW50IGZpbGxlZDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZpbGxlZCA9IG51bV9wa3QgKiBwa3RfbGVuOwomIzQzOwkvKiBMb3cgMTYgYml0cyBtYXRjaCB3aXRoIHRoZSBjb3JyZWN0IGluY29taW5nIHNlcXVlbmNlIG51bWJlci4gKi8KJiM0MzsJYmFkX3NlcSA9IGZpbGxlZCAtIChJUF9NQVhQQUNLRVQgJiM0MzsgMSk7CiYjNDM7CiYjNDM7CWlmIChudW1fcGt0ICZndDsgQklHX1RDUF9NQVhfRklMTF9DTlQpCiYjNDM7CQllcnJvcigxLCAwLCAmIzM0O25lZWQgJWQgcGFja2V0cywgYXJyYXkgaG9sZHMgJWQmIzM0OywKJiM0MzsJCSAgICAgIG51bV9wa3QsIEJJR19UQ1BfTUFYX0ZJTExfQ05UKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG51bV9wa3Q7IGkmIzQzOyYjNDM7KQomIzQzOwkJY3JlYXRlX3BhY2tldChwa3RzW2ldLCBpICogcGt0X2xlbiwgMCwgcGt0X2xlbiwgMCk7CiYjNDM7CWNyZWF0ZV9wYWNrZXQobGFzdCwgYmFkX3NlcSwgMCwgcGt0X2xlbiwgMCk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBudW1fcGt0OyBpJiM0MzsmIzQzOykKJiM0MzsJCXdyaXRlX3BhY2tldChmZCwgcGt0c1tpXSwgdG90YWxfaGRyX2xlbiAmIzQzOyBwa3RfbGVuLCBkYWRkcik7CiYjNDM7CXdyaXRlX3BhY2tldChmZCwgbGFzdCwgdG90YWxfaGRyX2xlbiAmIzQzOyBwa3RfbGVuLCBkYWRkcik7CiYjNDM7fQomIzQzOwogLyogSWYgaW5jb21pbmcgc2VnbWVudHMgbWFrZSB0cmFja2VkIHNlZ21lbnQgbGVuZ3RoIGV4Y2VlZAogICogbGVnYWwgSVAgZGF0YWdyYW0gbGVuZ3RoLCBkbyBub3QgY29hbGVzY2UKICAqLwpAQCAtMTE2MSw3ICYjNDM7MTI1Myw3IEBAIHN0YXRpYyB2b2lkIHJlY3ZfZXJyb3IoaW50IGZkLCBpbnQgcmN2X2Vycm5vKQogc3RhdGljIHZvaWQgY2hlY2tfcmVjdl9wa3RzKGludCBmZCwgaW50ICpjb3JyZWN0X3BheWxvYWQsCiAJCQkgICAgaW50IGNvcnJlY3RfbnVtX3BrdHMpCiB7Ci0Jc3RhdGljIGNoYXIgYnVmZmVyW0lQX01BWFBBQ0tFVCAmIzQzOyBMMl9ITEVOX01BWCAmIzQzOyAxXTsKJiM0MzsJc3RhdGljIGNoYXIgYnVmZmVyW0JJR19UQ1BfUkVDVl9CVUZfTEVOXTsKIAlpbnQgbmhvZmYgPSBFVEhfSExFTiAmIzQzOyAocHBwb2UgPyBQUFBPRV9TRVNfSExFTiA6IDApOwogCXN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKShidWZmZXIgJiM0MzsgbmhvZmYpOwogCXN0cnVjdCBpcHY2aGRyICppcDZoID0gKHN0cnVjdCBpcHY2aGRyICopKGJ1ZmZlciAmIzQzOyBuaG9mZik7CkBAIC0xNTQxLDYgJiM0MzsxNjMzLDI1IEBAIHN0YXRpYyB2b2lkIGdyb19zZW5kZXIodm9pZCkKIAkJc2VuZF9sYXJnZSh0eGZkLCAmYW1wO2RhZGRyLCByZW1haW5kZXIgJiM0MzsgMSk7CiAJCXdyaXRlX3BhY2tldCh0eGZkLCBmaW5fcGt0LCB0b3RhbF9oZHJfbGVuLCAmYW1wO2RhZGRyKTsKIAomIzQzOwkvKiBiaWcgdGNwIHN1Yi10ZXN0cyAqLwomIzQzOwl9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgJiMzNDtiaWdfdGNwX2RhdGFfc2FtZSYjMzQ7KSA9PSAwKSB7CiYjNDM7CQlzZW5kX2JpZ190Y3AodHhmZCwgJmFtcDtkYWRkciwgY2FsY19tc3MoKSwgYmlnX3RjcF9maWxsX2NudCgpLAomIzQzOwkJCSAgICAgY2FsY19tc3MoKSk7CiYjNDM7CQl3cml0ZV9wYWNrZXQodHhmZCwgZmluX3BrdCwgdG90YWxfaGRyX2xlbiwgJmFtcDtkYWRkcik7CiYjNDM7CX0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCAmIzM0O2JpZ190Y3BfZGF0YV9scmdfc21sJiMzNDspID09IDApIHsKJiM0MzsJCWludCByZW1haW5kZXIgPSBjYWxjX21zcygpIC8gMjsKJiM0MzsKJiM0MzsJCXNlbmRfYmlnX3RjcCh0eGZkLCAmYW1wO2RhZGRyLCBjYWxjX21zcygpLCBiaWdfdGNwX2ZpbGxfY250KCksCiYjNDM7CQkJICAgICByZW1haW5kZXIpOwomIzQzOwkJd3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sICZhbXA7ZGFkZHIpOwomIzQzOwl9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgJiMzNDtiaWdfdGNwX3RjcF9zZXEmIzM0OykgPT0gMCkgewomIzQzOwkJc2VuZF9iaWdfdGNwX2JhZF9zZXEodHhmZCwgJmFtcDtkYWRkcik7CiYjNDM7CQl3cml0ZV9wYWNrZXQodHhmZCwgZmluX3BrdCwgdG90YWxfaGRyX2xlbiwgJmFtcDtkYWRkcik7CiYjNDM7CX0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCAmIzM0O2JpZ190Y3BfbGFyZ2VfbWF4JiMzNDspID09IDApIHsKJiM0MzsJCXNlbmRfYmlnX3RjcCh0eGZkLCAmYW1wO2RhZGRyLCBjYWxjX21zcygpLCBiaWdfdGNwX2xhcmdlX2NudCgpLAomIzQzOwkJCSAgICAgY2FsY19tc3MoKSk7CiYjNDM7CQl3cml0ZV9wYWNrZXQodHhmZCwgZmluX3BrdCwgdG90YWxfaGRyX2xlbiwgJmFtcDtkYWRkcik7CiYjNDM7CiAJLyogbWFjaGluZXJ5IHN1Yi10ZXN0cyAqLwogCX0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCAmIzM0O3NpbmdsZSYjMzQ7KSA9PSAwKSB7CiAJCXN0YXRpYyBjaGFyIGJ1ZltNQVhfSERSX0xFTiAmIzQzOyBQQVlMT0FEX0xFTl07CkBAIC0xNzY4LDYgJiM0MzsxODc5LDI2IEBAIHN0YXRpYyB2b2lkIGdyb19yZWNlaXZlcih2b2lkKQogCQlwcmludGYoJiMzNDtsYXN0IHNlZ21lbnQgc2VudCBpbmRpdmlkdWFsbHk6ICYjMzQ7KTsKIAkJY2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMyk7CiAKJiM0MzsJLyogYmlnIHRjcCBzdWItdGVzdHMgKi8KJiM0MzsJfSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsICYjMzQ7YmlnX3RjcF9kYXRhX3NhbWUmIzM0OykgPT0gMCkgewomIzQzOwkJY29ycmVjdF9wYXlsb2FkWzBdID0gYmlnX3RjcF9maWxsX2xlbigpICYjNDM7IGNhbGNfbXNzKCk7CiYjNDM7CQlwcmludGYoJiMzNDtkYXRhIHBhY2tldHMgb2Ygc2FtZSBzaXplIHBhc3QgSVBfTUFYUEFDS0VUOiAmIzM0Oyk7CiYjNDM7CQljaGVja19yZWN2X3BrdHMocnhmZCwgY29ycmVjdF9wYXlsb2FkLCAxKTsKJiM0MzsJfSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsICYjMzQ7YmlnX3RjcF9kYXRhX2xyZ19zbWwmIzM0OykgPT0gMCkgewomIzQzOwkJY29ycmVjdF9wYXlsb2FkWzBdID0gYmlnX3RjcF9maWxsX2xlbigpICYjNDM7IGNhbGNfbXNzKCkgLyAyOwomIzQzOwkJcHJpbnRmKCYjMzQ7c21hbGxlciBsYXN0IHBhY2tldCBwYXN0IElQX01BWFBBQ0tFVDogJiMzNDspOwomIzQzOwkJY2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMSk7CiYjNDM7CX0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCAmIzM0O2JpZ190Y3BfdGNwX3NlcSYjMzQ7KSA9PSAwKSB7CiYjNDM7CQljb3JyZWN0X3BheWxvYWRbMF0gPSAoYmlnX3RjcF9maWxsX2NudCgpICYjNDM7IDEpICogY2FsY19tc3MoKTsKJiM0MzsJCWNvcnJlY3RfcGF5bG9hZFsxXSA9IGNhbGNfbXNzKCk7CiYjNDM7CQlwcmludGYoJiMzNDthbGlhc2VkIHNlcSBwYXN0IElQX01BWFBBQ0tFVCBkb2VzbiYjMzk7dCBjb2FsZXNjZTogJiMzNDspOwomIzQzOwkJY2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMik7CiYjNDM7CX0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCAmIzM0O2JpZ190Y3BfbGFyZ2VfbWF4JiMzNDspID09IDApIHsKJiM0MzsJCWNvcnJlY3RfcGF5bG9hZFswXSA9IGJpZ190Y3BfbGFyZ2VfY250KCkgKiBjYWxjX21zcygpOwomIzQzOwkJY29ycmVjdF9wYXlsb2FkWzFdID0gY2FsY19tc3MoKTsKJiM0MzsJCXByaW50ZigmIzM0O3Nob3VsZG4mIzM5O3QgY29hbGVzY2UgcGFzdCBncm9fbWF4X3NpemU6ICYjMzQ7KTsKJiM0MzsJCWNoZWNrX3JlY3ZfcGt0cyhyeGZkLCBjb3JyZWN0X3BheWxvYWQsIDIpOwomIzQzOwogCS8qIG1hY2hpbmVyeSBzdWItdGVzdHMgKi8KIAl9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgJiMzNDtzaW5nbGUmIzM0OykgPT0gMCkgewogCQlwcmludGYoJiMzNDtzaW5nbGUgZGF0YSBwYWNrZXQ6ICYjMzQ7KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMwMQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aCBGdXp6aW5nIERlY2lzaW9uIFByb2Nlc3MqKgoKT2theSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBzZXJpZXMgaXMgd29ydGggZnV6emluZyB3aXRoIHN5emthbGxlci4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBkaWZmLiBMZXQmIzM5O3Mgc2VlLi4uIGl0IHRvdWNoZXMgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHlgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uY2AuIEhvbGQgb24gYSBzZWNvbmQuLi4gdGhvc2UgYXJlIGJvdGggd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gIQoKUmlnaHQsIEkgbmVlZCB0byBhcHBseSBteSBydWxlcyBoZXJlLiBJIGtub3cgdGhlIGNyaXRlcmlhIGZvciAqbm90KiBmdXp6aW5nLCBhbmQgaXQmIzM5O3MgcHJldHR5IGNsZWFyLWN1dC4gUnVsZSBudW1iZXIgdHdvIHNheXMgSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmICphbGwqIHRoZSBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gdGhlIGNhdGVnb3JpZXMgb2Ygbm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlcywgcGFydGljdWxhcmx5IHRoaW5ncyBsaWtlIG1vZGlmaWNhdGlvbnMgdG8gc2VsZi10ZXN0cyBvciBzY3JpcHRzIHRoYXQgZG9uJiMzOTt0IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlIG9yIG1vZHVsZXMuIEJpbmdvISBUaGVzZSBmaWxlcyBhcmUgcmlnaHQgaW4gdGhhdCBjYXRlZ29yeS4KClRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBnaXQgZGlmZmAgb3IgYGdpdCBzaG93YCB0byBtYWtlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IG5vIG90aGVyLCBsZXNzIG9idmlvdXMsIGZpbGVzIHdlcmUgdG91Y2hlZCBpbiB0aGUgSEVBRCBjb21taXQuIEJ1dCBiYXNlZCBvbiB3aGF0IEkgc2VlIGhlcmUsIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyBhIG5vLWdvIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA2OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JJR19UQ1BfR1JPX01BWF9TSVpFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHk9NjA9R1JPX0RQT1JUID0gODAwMFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weS02MS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHk6NjI6QklHX1RDUF9HUk9fTUFYX1NJWkUgPSAxMjgwMDBcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHktNjMtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weT0yNTU9ZGVmIF9zZXR1cChjZmcsIG1vZGUsIHRlc3RfbmFtZSk6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weS0zMzAtICAgIGlmIHRlc3RfbmFtZS5zdGFydHN3aXRoKFwmIzM0O2JpZ190Y3BfXCYjMzQ7KTpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHk6MzMxOiAgICAgICAgX3NldF9ncm9fc2l6ZV9yZXN0b3JlKGNmZywgQklHX1RDUF9HUk9fTUFYX1NJWkUpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5LTMzMi1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jLTExOC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmM6MTE5Oi8qIE11c3QgbWF0Y2ggQklHX1RDUF9HUk9fTUFYX1NJWkUgaW4gZ3JvX2xpYi5weS4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmM6MTIwOiNkZWZpbmUgQklHX1RDUF9HUk9fTUFYX1NJWkVcdDEyODAwMFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYy0xMjEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jLTEyMi0jZGVmaW5lIEJJR19UQ1BfUkVDVl9CVUZfTEVOIFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jOjEyMzpcdChCSUdfVENQX0dST19NQVhfU0laRSAmIzQzOyBNQVhfTVNTICYjNDM7IEwyX0hMRU5fTUFYKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYy0xMjQtI2RlZmluZSBCSUdfVENQX01JTl9NU1NcdFx0KEFTU1VNRURfTVRVIC0gKE1BWF9IRFJfTEVOIC0gRVRIX0hMRU4pKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYy0xMjUtI2RlZmluZSBCSUdfVENQX01BWF9GSUxMX0NOVCBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYzoxMjY6XHQoKGludCkoKEJJR19UQ1BfR1JPX01BWF9TSVpFIC0gMSAtIChNQVhfSERSX0xFTiAtIEVUSF9ITEVOKSkgLyBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYy0xMjctXHQgICAgICAgQklHX1RDUF9NSU5fTVNTKSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jPTE4Nj1zdGF0aWMgaW50IGJpZ190Y3BfbGFyZ2VfY250KHZvaWQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jLTE4Ny17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jOjE4ODpcdHJldHVybiAoQklHX1RDUF9HUk9fTUFYX1NJWkUgLSAxIC0gKHRvdGFsX2hkcl9sZW4gLSBFVEhfSExFTikpIC9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMtMTg5LVx0ICAgICAgIGNhbGNfbXNzKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYyMAoJCQkJCQkJb3V0cHV0OiAxMTMKCQkJCQkJCXRob3VnaHRzOiAzMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogTm8gRnV6emluZyBSZXF1aXJlZCoqCgpPa2F5LCBsZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkuIEEgcXVpY2sgYGdpdCBsb2cgLW4gMSAtLXN0YXRgIGNoZWNrIG9yIGxvb2sgZm9yIGFueSBvdGhlciB1bnNlZW4gbW9kaWZpY2F0aW9ucy4gSXQgYXBwZWFycyB0aGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gIGRpcmVjdG9yeS4gVGhlIGRpZmYgY29uZmlybXMgdGhpcywgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5YCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmNgLgoKR2l2ZW4gU0VDVElPTiAyJiMzOTtzICYjMzQ7TmVnYXRpdmUgQ3JpdGVyaWEsJiMzNDsgdGhpcyBpcyBzdHJhaWdodGZvcndhcmQuIFRoZSBjaGFuZ2VzIGFyZSBub24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZS4gVGhleSBmYWxsIHNxdWFyZWx5IHVuZGVyIHRoZSBjYXRlZ29yeSBvZiB1c2VyLXNwYWNlIHNlbGYtdGVzdHMgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gLCB3aGljaCBieSBkZWZpbml0aW9uIGRvICpub3QqIGFmZmVjdCB0aGUga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBhbnkgbW9kdWxlcy4KClRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpczoKCiogICBgV29ydGhGdXp6aW5nID0gRmFsc2VgLgoqICAgYEZvY3VzU3ltYm9scyA9IFtdYC4KKiAgIGBFbmFibGVDb25maWdzID0gW11gLgoKVGhlIHJhdGlvbmFsZSBpcyBwcmVjaXNlLiBUaGUgcGF0Y2ggKm9ubHkqIGFkZHMgQklHIFRDUCB0ZXN0IGNhc2VzIGZvciBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSB0byB0aGUgc2VsZi10ZXN0IGNvZGUuIEl0JiMzOTtzIGNvbXBsZXRlbHkgaXNvbGF0ZWQgZnJvbSBhbnkga2VybmVsIGNvZGUgb3IgdGhlIGNvbXBpbGF0aW9uIG9mIHRoZSBrZXJuZWwgaXRzZWxmLgoKSnVzdCB0byBkb3VibGUtY2hlY2sgbXkgb3V0cHV0LCB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzIGFyZSBhcyBJJiMzOTt2ZSBkZXJpdmVkOgoKKiAgIGBXb3J0aEZ1enppbmcgPSBGYWxzZWAgKEJvb2xlYW4gLSBhcyBleHBlY3RlZCkKKiAgIGBGb2N1c1N5bWJvbHMgPSBbXWAgKEVtcHR5IGxpc3QgLSBjb3JyZWN0KQoqICAgYEVuYWJsZUNvbmZpZ3MgPSBbXWAgKEVtcHR5IGxpc3QgLSBhbHNvIGNvcnJlY3QpCgpUaGUgY29uY2x1c2lvbiBpcyBhYnNvbHV0ZS4gVGhpcyBhbGlnbnMgcGVyZmVjdGx5IHdpdGggdGhlIGRlZmluZWQgaW5zdHJ1Y3Rpb25zLiBObyBmdXp6aW5nIGlzIHJlcXVpcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA2OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMpIHRvIGFkZCBCSUcgVENQIEdSTyB0ZXN0IGNhc2VzLiBObyBrZXJuZWwtc3BhY2UgY29kZSBvciBjb21waWxlZCBrZXJuZWwgYXJ0aWZhY3RzICh2bWxpbnV4IG9yIGtlcm5lbCBtb2R1bGVzKSBhcmUgbW9kaWZpZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weSBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYykgdG8gYWRkIEJJRyBUQ1AgR1JPIHRlc3QgY2FzZXMuIE5vIGtlcm5lbC1zcGFjZSBjb2RlIG9yIGNvbXBpbGVkIGtlcm5lbCBhcnRpZmFjdHMgKHZtbGludXggb3Iga2VybmVsIG1vZHVsZXMpIGFyZSBtb2RpZmllZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDY6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA2OjIyOjAxLjM1Njc4Mzk1OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjA2NTA5NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMpIHRvIGFkZCBCSUcgVENQIEdSTyB0ZXN0IGNhc2VzLiBObyBrZXJuZWwtc3BhY2UgY29kZSBvciBjb21waWxlZCBrZXJuZWwgYXJ0aWZhY3RzICh2bWxpbnV4IG9yIGtlcm5lbCBtb2R1bGVzKSBhcmUgbW9kaWZpZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNjoyMjowMS4zNTY3OTAzOTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDQwNzYyMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5ZDE5ZTNiNTIyNDNmOGYyMGVlMjNjNzliZWU0MWQ5ODE2NmMwOTcwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDEzIDA2OjIxOjU5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5XFxuaW5kZXggYjdhYzA2NjBhZGMwMS4uYWJlY2Y2MGJhYTUzNyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5XFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weVxcbkBAIC00MCwxMyArNDAsMTcgQEAgVGVzdCBjYXNlczpcXG4gICAtIGlwX3Y2ZXh0X2RpZmY6IChJUHY2KSBJUHY2IGV4dCBoZWFkZXIgd2l0aCBkaWZmZXJlbnQgcGF5bG9hZCBkb2Vzbid0IGNvYWxlc2NlXFxuICAgLSBsYXJnZV9tYXg6IFBhY2tldHMgZXhjZWVkaW5nIEdST19NQVhfU0laRSBkb24ndCBjb2FsZXNjZVxcbiAgIC0gbGFyZ2VfcmVtOiBMYXJnZSBwYWNrZXQgcmVtYWluZGVyIGhhbmRsaW5nXFxuKyAgLSBiaWdfdGNwX2RhdGFfc2FtZTogU2FtZSBzaXplIHBhY2tldHMgY29hbGVzY2UgcGFzdCBJUF9NQVhQQUNLRVRcXG4rICAtIGJpZ190Y3BfZGF0YV9scmdfc21sOiBTbWFsbGVyIGxhc3QgcGFja2V0IGNvYWxlc2NlcyBwYXN0IElQX01BWFBBQ0tFVFxcbisgIC0gYmlnX3RjcF90Y3Bfc2VxOiBQYWNrZXRzIHdpdGggMTYtYml0IHRydW5jYXRlZCBzZXFubyBkb24ndCBjb2FsZXNjZVxcbisgIC0gYmlnX3RjcF9sYXJnZV9tYXg6IFBhY2tldHMgZXhjZWVkaW5nIHRoZSBCSUcgVENQIGxpbWl0IGRvbid0IGNvYWxlc2NlXFxuIFxcXCJcXFwiXFxcIlxcbiBcXG4gaW1wb3J0IGdsb2JcXG4gaW1wb3J0IG9zXFxuIGltcG9ydCByZVxcbi1mcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXhpdCwga3NmdF9wclxcbi1mcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIEtzZnRGYWlsRXgsIEtzZnRYZmFpbEV4XFxuK2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X3J1biwga3NmdF9leGl0LCBrc2Z0X3ByLCBrc2Z0X2VxXFxuK2Zyb20gbGliLnB5IGltcG9ydCBOZXREcnZFcEVudiwgS3NmdEZhaWxFeCwgS3NmdFNraXBFeCwgS3NmdFhmYWlsRXhcXG4gZnJvbSBsaWIucHkgaW1wb3J0IE5ldGRldkZhbWlseSwgRXRodG9vbEZhbWlseVxcbiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBjbWQsIGN0bF9maWxlX3dyaXRlLCBkZWZlciwgZXRodG9vbCwgaXBcXG4gZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfdmFyaWFudHMsIEtzZnROYW1lZFZhcmlhbnRcXG5AQCAtNTUsNiArNTksOCBAQCBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF92YXJpYW50cywgS3NmdE5hbWVkVmFyaWFudFxcbiAjIGdyby5jIHVzZXMgaGFyZGNvZGVkIERQT1JUPTgwMDBcXG4gR1JPX0RQT1JUID0gODAwMFxcbiBcXG4rQklHX1RDUF9HUk9fTUFYX1NJWkUgPSAxMjgwMDBcXG4rXFxuIFxcbiBkZWYgX3Jlc29sdmVfZG1hYyhjZmcsIGlwdmVyKTpcXG4gICAgIFxcXCJcXFwiXFxcIlxcbkBAIC05MSw2ICs5NywzNCBAQCBkZWYgX3NldF9tdHVfcmVzdG9yZShkZXYsIG10dSwgaG9zdCk6XFxuICAgICAgICAgZGVmZXIoaXAsIGZcXFwibGluayBzZXQgZGV2IHtkZXZbJ2lmbmFtZSddfSBtdHUge2RldlsnbXR1J119XFxcIiwgaG9zdD1ob3N0KVxcbiBcXG4gXFxuK2RlZiBfc2V0X2dyb19zaXplX3Jlc3RvcmUoY2ZnLCBzaXplKTpcXG4rICAgIFxcXCJcXFwiXFxcIlxcbisgICAgU2V0IHRoZSBsb2NhbCBkZXZpY2UncyBHUk8gc2l6ZSBsaW1pdHMsIHRoZW4gY29uZmlybSB0aGV5IHN0dWNrLlxcbisgICAgXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgX3NldF9tdHVfcmVzdG9yZShjZmcuZGV2LCA0MDk2LCBOb25lKVxcbisgICAgX3NldF9tdHVfcmVzdG9yZShjZmcucmVtb3RlX2RldiwgNDA5NiwgY2ZnLnJlbW90ZSlcXG4rXFxuKyAgICBpZiBcXFwiZ3JvX21heF9zaXplXFxcIiBub3QgaW4gY2ZnLmRldiBvciBcXFwiZ3JvX2lwdjRfbWF4X3NpemVcXFwiIG5vdCBpbiBjZmcuZGV2OlxcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxcImlwcm91dGUyIGRvZXMgbm90IHJlcG9ydCB0aGUgR1JPIHNpemUgbGltaXRzXFxcIilcXG4rXFxuKyAgICBpZiAoY2ZnLmRldltcXFwiZ3JvX21heF9zaXplXFxcIl0gPT0gc2l6ZSBhbmRcXG4rICAgICAgICAgICAgY2ZnLmRldltcXFwiZ3JvX2lwdjRfbWF4X3NpemVcXFwiXSA9PSBzaXplKTpcXG4rICAgICAgICByZXR1cm5cXG4rXFxuKyAgICBvbGQgPSAoZlxcXCJncm9fbWF4X3NpemUge2NmZy5kZXZbJ2dyb19tYXhfc2l6ZSddfSBcXFwiXFxuKyAgICAgICAgICAgZlxcXCJncm9faXB2NF9tYXhfc2l6ZSB7Y2ZnLmRldlsnZ3JvX2lwdjRfbWF4X3NpemUnXX1cXFwiKVxcbisgICAgbmV3ID0gZlxcXCJncm9fbWF4X3NpemUge3NpemV9IGdyb19pcHY0X21heF9zaXplIHtzaXplfVxcXCJcXG4rXFxuKyAgICBpcChmXFxcImxpbmsgc2V0IGRldiB7Y2ZnLmlmbmFtZX0ge25ld31cXFwiKVxcbisgICAgZGVmZXIoaXAsIGZcXFwibGluayBzZXQgZGV2IHtjZmcuaWZuYW1lfSB7b2xkfVxcXCIpXFxuK1xcbisgICAgZGV2ID0gaXAoXFxcIi1kIGxpbmsgc2hvdyBkZXYgXFxcIiArIGNmZy5pZm5hbWUsIGpzb249VHJ1ZSlbMF1cXG4rICAgIGtzZnRfZXEoZGV2W1xcXCJncm9fbWF4X3NpemVcXFwiXSwgc2l6ZSwgY29tbWVudD1cXFwiZ3JvX21heF9zaXplIG5vdCBhcHBsaWVkXFxcIilcXG4rICAgIGtzZnRfZXEoZGV2W1xcXCJncm9faXB2NF9tYXhfc2l6ZVxcXCJdLCBzaXplLFxcbisgICAgICAgICAgICBjb21tZW50PVxcXCJncm9faXB2NF9tYXhfc2l6ZSBub3QgYXBwbGllZFxcXCIpXFxuK1xcbitcXG4gZGVmIF9zZXRfZXRodG9vbF9mZWF0KGRldiwgY3VycmVudCwgZmVhdHMsIGhvc3Q9Tm9uZSk6XFxuICAgICBzMm4gPSB7VHJ1ZTogXFxcIm9uXFxcIiwgRmFsc2U6IFxcXCJvZmZcXFwifVxcbiBcXG5AQCAtMjM5LDcgKzI3MywxMSBAQCBkZWYgX3NldHVwKGNmZywgbW9kZSwgdGVzdF9uYW1lKTpcXG4gICAgICAgICBmbHVzaF9wYXRoID0gZlxcXCIvc3lzL2NsYXNzL25ldC97Y2ZnLmlmbmFtZX0vZ3JvX2ZsdXNoX3RpbWVvdXRcXFwiXFxuICAgICAgICAgaXJxX3BhdGggPSBmXFxcIi9zeXMvY2xhc3MvbmV0L3tjZmcuaWZuYW1lfS9uYXBpX2RlZmVyX2hhcmRfaXJxc1xcXCJcXG4gXFxuLSAgICAgICAgY3RsX2ZpbGVfd3JpdGUoZmx1c2hfcGF0aCwgXFxcIjIwMDAwMFxcXCIpXFxuKyAgICAgICAgIyBcXFwiYmlnX3RjcF8qXFxcIiB0ZXN0cyBuZWVkIGEgbG9uZ2VyIHRpbWVvdXQsIHVzZSAyeCB0aGUgcmVndWxhciB0aW1lb3V0XFxuKyAgICAgICAgaWYgdGVzdF9uYW1lLnN0YXJ0c3dpdGgoXFxcImJpZ190Y3BfXFxcIik6XFxuKyAgICAgICAgICAgIGN0bF9maWxlX3dyaXRlKGZsdXNoX3BhdGgsIFxcXCI0MDAwMDBcXFwiKVxcbisgICAgICAgIGVsc2U6XFxuKyAgICAgICAgICAgIGN0bF9maWxlX3dyaXRlKGZsdXNoX3BhdGgsIFxcXCIyMDAwMDBcXFwiKVxcbiAgICAgICAgIGN0bF9maWxlX3dyaXRlKGlycV9wYXRoLCBcXFwiMTBcXFwiKVxcbiBcXG4gICAgICAgICBfc2V0X2V0aHRvb2xfZmVhdChjZmcuaWZuYW1lLCBjZmcuZmVhdCxcXG5AQCAtMjg5LDYgKzMyNyw5IEBAIGRlZiBfc2V0dXAoY2ZnLCBtb2RlLCB0ZXN0X25hbWUpOlxcbiAgICAgZXhjZXB0IEtzZnRYZmFpbEV4OlxcbiAgICAgICAgIHBhc3NcXG4gXFxuKyAgICBpZiB0ZXN0X25hbWUuc3RhcnRzd2l0aChcXFwiYmlnX3RjcF9cXFwiKTpcXG4rICAgICAgICBfc2V0X2dyb19zaXplX3Jlc3RvcmUoY2ZnLCBCSUdfVENQX0dST19NQVhfU0laRSlcXG4rXFxuIFxcbiBkZWYgX2dyb192YXJpYW50cygpOlxcbiAgICAgXFxcIlxcXCJcXFwiR2VuZXJhdG9yIHRoYXQgeWllbGRzIGFsbCBjb21iaW5hdGlvbnMgb2YgcHJvdG9jb2wgYW5kIHRlc3QgdHlwZXMuXFxcIlxcXCJcXFwiXFxuQEAgLTMwNCw2ICszNDUsMTEgQEAgZGVmIF9ncm9fdmFyaWFudHMoKTpcXG4gICAgICAgICBcXFwibGFyZ2VfbWF4XFxcIiwgXFxcImxhcmdlX3JlbVxcXCIsXFxuICAgICBdXFxuIFxcbisgICAgYmlnX3RjcF90ZXN0cyA9IFtcXG4rICAgICAgICBcXFwiYmlnX3RjcF9kYXRhX3NhbWVcXFwiLCBcXFwiYmlnX3RjcF9kYXRhX2xyZ19zbWxcXFwiLFxcbisgICAgICAgIFxcXCJiaWdfdGNwX3RjcF9zZXFcXFwiLCBcXFwiYmlnX3RjcF9sYXJnZV9tYXhcXFwiLFxcbisgICAgXVxcbitcXG4gICAgICMgVGVzdHMgc3BlY2lmaWMgdG8gSVB2NFxcbiAgICAgaXB2NF90ZXN0cyA9IFtcXG4gICAgICAgICBcXFwiaXBfY3N1bVxcXCIsXFxuQEAgLTMyMiw2ICszNjgsMTAgQEAgZGVmIF9ncm9fdmFyaWFudHMoKTpcXG4gICAgICAgICBmb3IgdGVzdF9uYW1lIGluIGNvbW1vbl90ZXN0czpcXG4gICAgICAgICAgICAgeWllbGQgcHJvdG9jb2wsIHRlc3RfbmFtZVxcbiBcXG4rICAgICAgICBpZiBwcm90b2NvbCBpbiBbXFxcImlwdjRcXFwiLCBcXFwiaXB2NlxcXCJdOlxcbisgICAgICAgICAgICBmb3IgdGVzdF9uYW1lIGluIGJpZ190Y3BfdGVzdHM6XFxuKyAgICAgICAgICAgICAgICB5aWVsZCBwcm90b2NvbCwgdGVzdF9uYW1lXFxuK1xcbiAgICAgICAgIGlmIHByb3RvY29sIGluIFtcXFwiaXB2NFxcXCIsIFxcXCJpcGlwXFxcIl06XFxuICAgICAgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gaXB2NF90ZXN0czpcXG4gICAgICAgICAgICAgICAgIHlpZWxkIHByb3RvY29sLCB0ZXN0X25hbWVcXG5AQCAtMzU4LDcgKzQwOCw4IEBAIGRlZiBydW5fdGVzdChjZmcsIG1vZGUsIHByb3RvY29sLCB0ZXN0X25hbWUpOlxcbiAgICAgICAgIGlmIHJ4X3Byb2MucmV0ID09IDQyOlxcbiAgICAgICAgICAgICByYWlzZSBLc2Z0RmFpbEV4KGZcXFwiR1JPIG92ZXItY29hbGVzY2VkIGluIHtwcm90b2NvbH0ve3Rlc3RfbmFtZX1cXFwiKVxcbiBcXG4tICAgICAgICBpZiB0ZXN0X25hbWUuc3RhcnRzd2l0aChcXFwibGFyZ2VfXFxcIikgYW5kIG9zLmVudmlyb24uZ2V0KFxcXCJLU0ZUX01BQ0hJTkVfU0xPV1xcXCIpOlxcbisgICAgICAgIGlmICh0ZXN0X25hbWUuc3RhcnRzd2l0aCgoXFxcImxhcmdlX1xcXCIsIFxcXCJiaWdfdGNwX1xcXCIpKSBhbmRcXG4rICAgICAgICAgICAgICAgIG9zLmVudmlyb24uZ2V0KFxcXCJLU0ZUX01BQ0hJTkVfU0xPV1xcXCIpKTpcXG4gICAgICAgICAgICAga3NmdF9wcihmXFxcIklnbm9yaW5nIHtwcm90b2NvbH0ve3Rlc3RfbmFtZX0gZmFpbHVyZSBkdWUgdG8gc2xvdyBlbnZpcm9ubWVudFxcXCIpXFxuICAgICAgICAgICAgIHJldHVyblxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmNcXG5pbmRleCA3YTMzMzE1NWRlMWFiLi43MGIwZGViM2MxMWZhIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jXFxuQEAgLTQ2LDYgKzQ2LDEyIEBAXFxuICAqICAgLSBsYXJnZV9tYXg6IGV4Y2VlZGluZyBtYXggc2l6ZVxcbiAgKiAgIC0gbGFyZ2VfcmVtOiByZW1haW5kZXIgaGFuZGxpbmdcXG4gICpcXG4rICogYmlnX3RjcF8qOlxcbisgKiAgIC0gYmlnX3RjcF9kYXRhX3NhbWU6ICAgIGVxdWFsIHNlZ21lbnRzIGNvYWxlc2NpbmcgcGFzdCBJUF9NQVhQQUNLRVRcXG4rICogICAtIGJpZ190Y3BfZGF0YV9scmdfc21sOiBhIHNtYWxsZXIgZmluYWwgc2VnbWVudCBjYXJyeWluZyBpdCBvdmVyXFxuKyAqICAgLSBiaWdfdGNwX3RjcF9zZXE6ICAgICAgMTYtYml0IHRydW5jYXRlZCBzZXF1ZW5jZSBudW1iZXIgbXVzdCBub3QgY29hbGVzY2VcXG4rICogICAtIGJpZ190Y3BfbGFyZ2VfbWF4OiAgICBjb2FsZXNjaW5nIHN0b3BzIGF0IHRoZSBjb25maWd1cmVkIGxpbWl0XFxuKyAqXFxuICAqIHNpbmdsZSwgY2FwYWNpdHk6XFxuICAqICBCb3JpbmcgY2FzZXMgdXNlZCB0byB0ZXN0IGNvYWxlc2NpbmcgbWFjaGluZXJ5IGl0c2VsZiBhbmQgc3RhdHNcXG4gICogIG1vcmUgdGhhbiBwcm90b2NvbCBiZWhhdmlvci5cXG5AQCAtMTEwLDYgKzExNiwxNiBAQFxcbiBcXG4gI2RlZmluZSBFWElUX09WRVJfQ09BTEVTQ0VcXHQ0MlxcbiBcXG4rLyogTXVzdCBtYXRjaCBCSUdfVENQX0dST19NQVhfU0laRSBpbiBncm9fbGliLnB5LiAqL1xcbisjZGVmaW5lIEJJR19UQ1BfR1JPX01BWF9TSVpFXFx0MTI4MDAwXFxuK1xcbisjZGVmaW5lIEJJR19UQ1BfUkVDVl9CVUZfTEVOIFxcXFxcXG4rXFx0KEJJR19UQ1BfR1JPX01BWF9TSVpFICsgTUFYX01TUyArIEwyX0hMRU5fTUFYKVxcbisjZGVmaW5lIEJJR19UQ1BfTUlOX01TU1xcdFxcdChBU1NVTUVEX01UVSAtIChNQVhfSERSX0xFTiAtIEVUSF9ITEVOKSlcXG4rI2RlZmluZSBCSUdfVENQX01BWF9GSUxMX0NOVCBcXFxcXFxuK1xcdCgoaW50KSgoQklHX1RDUF9HUk9fTUFYX1NJWkUgLSAxIC0gKE1BWF9IRFJfTEVOIC0gRVRIX0hMRU4pKSAvIFxcXFxcXG4rXFx0ICAgICAgIEJJR19UQ1BfTUlOX01TUykpXFxuK1xcbiAjZGVmaW5lIGlwdjZfb3B0bGVuKHApICAoKChwKS1cXHUwMDNlaGRybGVuKzEpIFxcdTAwM2NcXHUwMDNjIDMpIC8qIGNhbGN1bGF0ZSBJUHY2IGV4dGVuc2lvbiBoZWFkZXIgbGVuICovXFxuICNkZWZpbmUgQlVJTERfQlVHX09OKGNvbmRpdGlvbikgKCh2b2lkKXNpemVvZihjaGFyWzEgLSAyKiEhKGNvbmRpdGlvbildKSlcXG4gXFxuQEAgLTE2Niw2ICsxODIsMjcgQEAgc3RhdGljIGludCBudW1fbGFyZ2VfcGt0KHZvaWQpXFxuIFxcdHJldHVybiBtYXhfcGF5bG9hZCgpIC8gY2FsY19tc3MoKTtcXG4gfVxcbiBcXG4rLyogSG93IG1hbnkgbWF4aW11bSBzaXplZCBzZWdtZW50cyBmaXQgdW5kZXIgdGhlIGNvbmZpZ3VyZWQgbGltaXQuICovXFxuK3N0YXRpYyBpbnQgYmlnX3RjcF9sYXJnZV9jbnQodm9pZClcXG4re1xcbitcXHRyZXR1cm4gKEJJR19UQ1BfR1JPX01BWF9TSVpFIC0gMSAtICh0b3RhbF9oZHJfbGVuIC0gRVRIX0hMRU4pKSAvXFxuK1xcdCAgICAgICBjYWxjX21zcygpO1xcbit9XFxuK1xcbisvKiBIb3cgbWFueSBjYWxjX21zcygpIHNpemVkIHNlZ21lbnRzIGFyZSBuZWVkZWQgdG8gc2F0aXNmeSB0aGVcXG4rICogZm9sbG93aW5nIGNvbmRpdGlvbjpcXG4rICogcGt0X2NvdW50ICogY2FsY19tc3MoKSBcXHUwMDNjIElQX01BWFBBQ0tFVCBcXHUwMDNjIChwa3RfY291bnQgKyAxKSAqIGNhbGNfbXNzKClcXG4rICovXFxuK3N0YXRpYyBpbnQgYmlnX3RjcF9maWxsX2NudCh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBJUF9NQVhQQUNLRVQgLyBjYWxjX21zcygpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGJpZ190Y3BfZmlsbF9sZW4odm9pZClcXG4re1xcbitcXHRyZXR1cm4gYmlnX3RjcF9maWxsX2NudCgpICogY2FsY19tc3MoKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdmxvZyhjb25zdCBjaGFyICpmbXQsIC4uLilcXG4ge1xcbiBcXHR2YV9saXN0IGFyZ3M7XFxuQEAgLTU2MCw2ICs1OTcsNjEgQEAgc3RhdGljIHZvaWQgc2VuZF9kYXRhX3BrdHMoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHJfbGwgKmRhZGRyLFxcbiBcXHR3cml0ZV9wYWNrZXQoZmQsIGJ1ZiwgdG90YWxfaGRyX2xlbiArIHBheWxvYWRfbGVuMiwgZGFkZHIpO1xcbiB9XFxuIFxcbisvKiBTZW5kIG51bV9wa3Qgc2VnbWVudHMgb2YgcGt0X2xlbiBieXRlcywgdGhlbiBvbmUgb2YgcmVtYWluZGVyIGxlbi4gKi9cXG4rc3RhdGljIHZvaWQgc2VuZF9iaWdfdGNwKGludCBmZCwgc3RydWN0IHNvY2thZGRyX2xsICpkYWRkciwgaW50IHBrdF9sZW4sXFxuK1xcdFxcdFxcdCBpbnQgbnVtX3BrdCwgaW50IHJlbWFpbmRlcilcXG4re1xcbitcXHRzdGF0aWMgY2hhciBwa3RzW0JJR19UQ1BfTUFYX0ZJTExfQ05UXVtNQVhfSERSX0xFTiArIE1BWF9NU1NdO1xcbitcXHRzdGF0aWMgY2hhciBsYXN0W01BWF9IRFJfTEVOICsgTUFYX01TU107XFxuK1xcdGNvbnN0IGludCBmaWxsZWQgPSBudW1fcGt0ICogcGt0X2xlbjtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRpZiAobnVtX3BrdCBcXHUwMDNlIEJJR19UQ1BfTUFYX0ZJTExfQ05UKVxcbitcXHRcXHRlcnJvcigxLCAwLCBcXFwibmVlZCAlZCBwYWNrZXRzLCBhcnJheSBob2xkcyAlZFxcXCIsXFxuK1xcdFxcdCAgICAgIG51bV9wa3QsIEJJR19UQ1BfTUFYX0ZJTExfQ05UKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fcGt0OyBpKyspXFxuK1xcdFxcdGNyZWF0ZV9wYWNrZXQocGt0c1tpXSwgaSAqIHBrdF9sZW4sIDAsIHBrdF9sZW4sIDApO1xcbitcXHRjcmVhdGVfcGFja2V0KGxhc3QsIGZpbGxlZCwgMCwgcmVtYWluZGVyLCAwKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fcGt0OyBpKyspXFxuK1xcdFxcdHdyaXRlX3BhY2tldChmZCwgcGt0c1tpXSwgdG90YWxfaGRyX2xlbiArIHBrdF9sZW4sIGRhZGRyKTtcXG4rXFx0d3JpdGVfcGFja2V0KGZkLCBsYXN0LCB0b3RhbF9oZHJfbGVuICsgcmVtYWluZGVyLCBkYWRkcik7XFxuK31cXG4rXFxuKy8qIEluIEJJRyBUQ1AgY29uZmlndXJhdGlvbiwgdGhlIHRvdGFsIGFnZ3JlZ2F0ZSBsZW5ndGggY2FuXFxuKyAqIGJlIGdyZWF0ZXIgdGhhbiB0aGUgbGVnYWN5IElQX01BWFBBQ0tFVC4gU2luY2UgdGhlIGFnZ3JlZ2F0ZVxcbisgKiBsZW5ndGggaXMgdXNlZCBpbiBjYWxjdWxhdGluZyB0aGUgc2VxdWVuY2UgbnVtYmVycyxcXG4rICogc2VuZCBhIHBhY2tldCB3aXRoIGEgc2VxdWVuY2UgbnVtYmVyIHRoYXQgZGlmZmVycyBieSBJUF9NQVhQQUNLRVQgKyAxLFxcbisgKiB0byB0ZXN0IGFnYWluc3QgdHJ1bmNhdGlvbiBidWdzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgc2VuZF9iaWdfdGNwX2JhZF9zZXEoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHJfbGwgKmRhZGRyKVxcbit7XFxuK1xcdHN0YXRpYyBjaGFyIHBrdHNbQklHX1RDUF9NQVhfRklMTF9DTlRdW01BWF9IRFJfTEVOICsgTUFYX01TU107XFxuK1xcdGNvbnN0IGludCBudW1fcGt0ID0gYmlnX3RjcF9maWxsX2NudCgpICsgMTtcXG4rXFx0c3RhdGljIGNoYXIgbGFzdFtNQVhfSERSX0xFTiArIE1BWF9NU1NdO1xcbitcXHRjb25zdCBpbnQgcGt0X2xlbiA9IGNhbGNfbXNzKCk7XFxuK1xcdGludCBiYWRfc2VxO1xcbitcXHRpbnQgZmlsbGVkO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZpbGxlZCA9IG51bV9wa3QgKiBwa3RfbGVuO1xcbitcXHQvKiBMb3cgMTYgYml0cyBtYXRjaCB3aXRoIHRoZSBjb3JyZWN0IGluY29taW5nIHNlcXVlbmNlIG51bWJlci4gKi9cXG4rXFx0YmFkX3NlcSA9IGZpbGxlZCAtIChJUF9NQVhQQUNLRVQgKyAxKTtcXG4rXFxuK1xcdGlmIChudW1fcGt0IFxcdTAwM2UgQklHX1RDUF9NQVhfRklMTF9DTlQpXFxuK1xcdFxcdGVycm9yKDEsIDAsIFxcXCJuZWVkICVkIHBhY2tldHMsIGFycmF5IGhvbGRzICVkXFxcIixcXG4rXFx0XFx0ICAgICAgbnVtX3BrdCwgQklHX1RDUF9NQVhfRklMTF9DTlQpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9wa3Q7IGkrKylcXG4rXFx0XFx0Y3JlYXRlX3BhY2tldChwa3RzW2ldLCBpICogcGt0X2xlbiwgMCwgcGt0X2xlbiwgMCk7XFxuK1xcdGNyZWF0ZV9wYWNrZXQobGFzdCwgYmFkX3NlcSwgMCwgcGt0X2xlbiwgMCk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX3BrdDsgaSsrKVxcbitcXHRcXHR3cml0ZV9wYWNrZXQoZmQsIHBrdHNbaV0sIHRvdGFsX2hkcl9sZW4gKyBwa3RfbGVuLCBkYWRkcik7XFxuK1xcdHdyaXRlX3BhY2tldChmZCwgbGFzdCwgdG90YWxfaGRyX2xlbiArIHBrdF9sZW4sIGRhZGRyKTtcXG4rfVxcbitcXG4gLyogSWYgaW5jb21pbmcgc2VnbWVudHMgbWFrZSB0cmFja2VkIHNlZ21lbnQgbGVuZ3RoIGV4Y2VlZFxcbiAgKiBsZWdhbCBJUCBkYXRhZ3JhbSBsZW5ndGgsIGRvIG5vdCBjb2FsZXNjZVxcbiAgKi9cXG5AQCAtMTE2MSw3ICsxMjUzLDcgQEAgc3RhdGljIHZvaWQgcmVjdl9lcnJvcihpbnQgZmQsIGludCByY3ZfZXJybm8pXFxuIHN0YXRpYyB2b2lkIGNoZWNrX3JlY3ZfcGt0cyhpbnQgZmQsIGludCAqY29ycmVjdF9wYXlsb2FkLFxcbiBcXHRcXHRcXHQgICAgaW50IGNvcnJlY3RfbnVtX3BrdHMpXFxuIHtcXG4tXFx0c3RhdGljIGNoYXIgYnVmZmVyW0lQX01BWFBBQ0tFVCArIEwyX0hMRU5fTUFYICsgMV07XFxuK1xcdHN0YXRpYyBjaGFyIGJ1ZmZlcltCSUdfVENQX1JFQ1ZfQlVGX0xFTl07XFxuIFxcdGludCBuaG9mZiA9IEVUSF9ITEVOICsgKHBwcG9lID8gUFBQT0VfU0VTX0hMRU4gOiAwKTtcXG4gXFx0c3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopKGJ1ZmZlciArIG5ob2ZmKTtcXG4gXFx0c3RydWN0IGlwdjZoZHIgKmlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoYnVmZmVyICsgbmhvZmYpO1xcbkBAIC0xNTQxLDYgKzE2MzMsMjUgQEAgc3RhdGljIHZvaWQgZ3JvX3NlbmRlcih2b2lkKVxcbiBcXHRcXHRzZW5kX2xhcmdlKHR4ZmQsIFxcdTAwMjZkYWRkciwgcmVtYWluZGVyICsgMSk7XFxuIFxcdFxcdHdyaXRlX3BhY2tldCh0eGZkLCBmaW5fcGt0LCB0b3RhbF9oZHJfbGVuLCBcXHUwMDI2ZGFkZHIpO1xcbiBcXG4rXFx0LyogYmlnIHRjcCBzdWItdGVzdHMgKi9cXG4rXFx0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFxcXCJiaWdfdGNwX2RhdGFfc2FtZVxcXCIpID09IDApIHtcXG4rXFx0XFx0c2VuZF9iaWdfdGNwKHR4ZmQsIFxcdTAwMjZkYWRkciwgY2FsY19tc3MoKSwgYmlnX3RjcF9maWxsX2NudCgpLFxcbitcXHRcXHRcXHQgICAgIGNhbGNfbXNzKCkpO1xcbitcXHRcXHR3cml0ZV9wYWNrZXQodHhmZCwgZmluX3BrdCwgdG90YWxfaGRyX2xlbiwgXFx1MDAyNmRhZGRyKTtcXG4rXFx0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFxcXCJiaWdfdGNwX2RhdGFfbHJnX3NtbFxcXCIpID09IDApIHtcXG4rXFx0XFx0aW50IHJlbWFpbmRlciA9IGNhbGNfbXNzKCkgLyAyO1xcbitcXG4rXFx0XFx0c2VuZF9iaWdfdGNwKHR4ZmQsIFxcdTAwMjZkYWRkciwgY2FsY19tc3MoKSwgYmlnX3RjcF9maWxsX2NudCgpLFxcbitcXHRcXHRcXHQgICAgIHJlbWFpbmRlcik7XFxuK1xcdFxcdHdyaXRlX3BhY2tldCh0eGZkLCBmaW5fcGt0LCB0b3RhbF9oZHJfbGVuLCBcXHUwMDI2ZGFkZHIpO1xcbitcXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXFxcImJpZ190Y3BfdGNwX3NlcVxcXCIpID09IDApIHtcXG4rXFx0XFx0c2VuZF9iaWdfdGNwX2JhZF9zZXEodHhmZCwgXFx1MDAyNmRhZGRyKTtcXG4rXFx0XFx0d3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sIFxcdTAwMjZkYWRkcik7XFxuK1xcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcXFwiYmlnX3RjcF9sYXJnZV9tYXhcXFwiKSA9PSAwKSB7XFxuK1xcdFxcdHNlbmRfYmlnX3RjcCh0eGZkLCBcXHUwMDI2ZGFkZHIsIGNhbGNfbXNzKCksIGJpZ190Y3BfbGFyZ2VfY250KCksXFxuK1xcdFxcdFxcdCAgICAgY2FsY19tc3MoKSk7XFxuK1xcdFxcdHdyaXRlX3BhY2tldCh0eGZkLCBmaW5fcGt0LCB0b3RhbF9oZHJfbGVuLCBcXHUwMDI2ZGFkZHIpO1xcbitcXG4gXFx0LyogbWFjaGluZXJ5IHN1Yi10ZXN0cyAqL1xcbiBcXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXFxcInNpbmdsZVxcXCIpID09IDApIHtcXG4gXFx0XFx0c3RhdGljIGNoYXIgYnVmW01BWF9IRFJfTEVOICsgUEFZTE9BRF9MRU5dO1xcbkBAIC0xNzY4LDYgKzE4NzksMjYgQEAgc3RhdGljIHZvaWQgZ3JvX3JlY2VpdmVyKHZvaWQpXFxuIFxcdFxcdHByaW50ZihcXFwibGFzdCBzZWdtZW50IHNlbnQgaW5kaXZpZHVhbGx5OiBcXFwiKTtcXG4gXFx0XFx0Y2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMyk7XFxuIFxcbitcXHQvKiBiaWcgdGNwIHN1Yi10ZXN0cyAqL1xcbitcXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXFxcImJpZ190Y3BfZGF0YV9zYW1lXFxcIikgPT0gMCkge1xcbitcXHRcXHRjb3JyZWN0X3BheWxvYWRbMF0gPSBiaWdfdGNwX2ZpbGxfbGVuKCkgKyBjYWxjX21zcygpO1xcbitcXHRcXHRwcmludGYoXFxcImRhdGEgcGFja2V0cyBvZiBzYW1lIHNpemUgcGFzdCBJUF9NQVhQQUNLRVQ6IFxcXCIpO1xcbitcXHRcXHRjaGVja19yZWN2X3BrdHMocnhmZCwgY29ycmVjdF9wYXlsb2FkLCAxKTtcXG4rXFx0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFxcXCJiaWdfdGNwX2RhdGFfbHJnX3NtbFxcXCIpID09IDApIHtcXG4rXFx0XFx0Y29ycmVjdF9wYXlsb2FkWzBdID0gYmlnX3RjcF9maWxsX2xlbigpICsgY2FsY19tc3MoKSAvIDI7XFxuK1xcdFxcdHByaW50ZihcXFwic21hbGxlciBsYXN0IHBhY2tldCBwYXN0IElQX01BWFBBQ0tFVDogXFxcIik7XFxuK1xcdFxcdGNoZWNrX3JlY3ZfcGt0cyhyeGZkLCBjb3JyZWN0X3BheWxvYWQsIDEpO1xcbitcXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXFxcImJpZ190Y3BfdGNwX3NlcVxcXCIpID09IDApIHtcXG4rXFx0XFx0Y29ycmVjdF9wYXlsb2FkWzBdID0gKGJpZ190Y3BfZmlsbF9jbnQoKSArIDEpICogY2FsY19tc3MoKTtcXG4rXFx0XFx0Y29ycmVjdF9wYXlsb2FkWzFdID0gY2FsY19tc3MoKTtcXG4rXFx0XFx0cHJpbnRmKFxcXCJhbGlhc2VkIHNlcSBwYXN0IElQX01BWFBBQ0tFVCBkb2Vzbid0IGNvYWxlc2NlOiBcXFwiKTtcXG4rXFx0XFx0Y2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMik7XFxuK1xcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcXFwiYmlnX3RjcF9sYXJnZV9tYXhcXFwiKSA9PSAwKSB7XFxuK1xcdFxcdGNvcnJlY3RfcGF5bG9hZFswXSA9IGJpZ190Y3BfbGFyZ2VfY250KCkgKiBjYWxjX21zcygpO1xcbitcXHRcXHRjb3JyZWN0X3BheWxvYWRbMV0gPSBjYWxjX21zcygpO1xcbitcXHRcXHRwcmludGYoXFxcInNob3VsZG4ndCBjb2FsZXNjZSBwYXN0IGdyb19tYXhfc2l6ZTogXFxcIik7XFxuK1xcdFxcdGNoZWNrX3JlY3ZfcGt0cyhyeGZkLCBjb3JyZWN0X3BheWxvYWQsIDIpO1xcbitcXG4gXFx0LyogbWFjaGluZXJ5IHN1Yi10ZXN0cyAqL1xcbiBcXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXFxcInNpbmdsZVxcXCIpID09IDApIHtcXG4gXFx0XFx0cHJpbnRmKFxcXCJzaW5nbGUgZGF0YSBwYWNrZXQ6IFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNjoyMjowMi45NjE1NTAyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxOTAwMTcyOTk1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMpIHRvIGFkZCBCSUcgVENQIEdSTyB0ZXN0IGNhc2VzLiBObyBrZXJuZWwtc3BhY2UgY29kZSBvciBjb21waWxlZCBrZXJuZWwgYXJ0aWZhY3RzICh2bWxpbnV4IG9yIGtlcm5lbCBtb2R1bGVzKSBhcmUgbW9kaWZpZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDlkMTllM2I1MjI0M2Y4ZjIwZWUyM2M3OWJlZTQxZDk4MTY2YzA5NzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAwNjoyMTo1OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5XG5pbmRleCBiN2FjMDY2MGFkYzAxLi5hYmVjZjYwYmFhNTM3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weVxuQEAgLTQwLDEzICs0MCwxNyBAQCBUZXN0IGNhc2VzOlxuICAgLSBpcF92NmV4dF9kaWZmOiAoSVB2NikgSVB2NiBleHQgaGVhZGVyIHdpdGggZGlmZmVyZW50IHBheWxvYWQgZG9lc24ndCBjb2FsZXNjZVxuICAgLSBsYXJnZV9tYXg6IFBhY2tldHMgZXhjZWVkaW5nIEdST19NQVhfU0laRSBkb24ndCBjb2FsZXNjZVxuICAgLSBsYXJnZV9yZW06IExhcmdlIHBhY2tldCByZW1haW5kZXIgaGFuZGxpbmdcbisgIC0gYmlnX3RjcF9kYXRhX3NhbWU6IFNhbWUgc2l6ZSBwYWNrZXRzIGNvYWxlc2NlIHBhc3QgSVBfTUFYUEFDS0VUXG4rICAtIGJpZ190Y3BfZGF0YV9scmdfc21sOiBTbWFsbGVyIGxhc3QgcGFja2V0IGNvYWxlc2NlcyBwYXN0IElQX01BWFBBQ0tFVFxuKyAgLSBiaWdfdGNwX3RjcF9zZXE6IFBhY2tldHMgd2l0aCAxNi1iaXQgdHJ1bmNhdGVkIHNlcW5vIGRvbid0IGNvYWxlc2NlXG4rICAtIGJpZ190Y3BfbGFyZ2VfbWF4OiBQYWNrZXRzIGV4Y2VlZGluZyB0aGUgQklHIFRDUCBsaW1pdCBkb24ndCBjb2FsZXNjZVxuIFwiXCJcIlxuIFxuIGltcG9ydCBnbG9iXG4gaW1wb3J0IG9zXG4gaW1wb3J0IHJlXG4tZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfcnVuLCBrc2Z0X2V4aXQsIGtzZnRfcHJcbi1mcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIEtzZnRGYWlsRXgsIEtzZnRYZmFpbEV4XG4rZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfcnVuLCBrc2Z0X2V4aXQsIGtzZnRfcHIsIGtzZnRfZXFcbitmcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIEtzZnRGYWlsRXgsIEtzZnRTa2lwRXgsIEtzZnRYZmFpbEV4XG4gZnJvbSBsaWIucHkgaW1wb3J0IE5ldGRldkZhbWlseSwgRXRodG9vbEZhbWlseVxuIGZyb20gbGliLnB5IGltcG9ydCBia2csIGNtZCwgY3RsX2ZpbGVfd3JpdGUsIGRlZmVyLCBldGh0b29sLCBpcFxuIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X3ZhcmlhbnRzLCBLc2Z0TmFtZWRWYXJpYW50XG5AQCAtNTUsNiArNTksOCBAQCBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF92YXJpYW50cywgS3NmdE5hbWVkVmFyaWFudFxuICMgZ3JvLmMgdXNlcyBoYXJkY29kZWQgRFBPUlQ9ODAwMFxuIEdST19EUE9SVCA9IDgwMDBcbiBcbitCSUdfVENQX0dST19NQVhfU0laRSA9IDEyODAwMFxuK1xuIFxuIGRlZiBfcmVzb2x2ZV9kbWFjKGNmZywgaXB2ZXIpOlxuICAgICBcIlwiXCJcbkBAIC05MSw2ICs5NywzNCBAQCBkZWYgX3NldF9tdHVfcmVzdG9yZShkZXYsIG10dSwgaG9zdCk6XG4gICAgICAgICBkZWZlcihpcCwgZlwibGluayBzZXQgZGV2IHtkZXZbJ2lmbmFtZSddfSBtdHUge2RldlsnbXR1J119XCIsIGhvc3Q9aG9zdClcbiBcbiBcbitkZWYgX3NldF9ncm9fc2l6ZV9yZXN0b3JlKGNmZywgc2l6ZSk6XG4rICAgIFwiXCJcIlxuKyAgICBTZXQgdGhlIGxvY2FsIGRldmljZSdzIEdSTyBzaXplIGxpbWl0cywgdGhlbiBjb25maXJtIHRoZXkgc3R1Y2suXG4rICAgIFwiXCJcIlxuK1xuKyAgICBfc2V0X210dV9yZXN0b3JlKGNmZy5kZXYsIDQwOTYsIE5vbmUpXG4rICAgIF9zZXRfbXR1X3Jlc3RvcmUoY2ZnLnJlbW90ZV9kZXYsIDQwOTYsIGNmZy5yZW1vdGUpXG4rXG4rICAgIGlmIFwiZ3JvX21heF9zaXplXCIgbm90IGluIGNmZy5kZXYgb3IgXCJncm9faXB2NF9tYXhfc2l6ZVwiIG5vdCBpbiBjZmcuZGV2OlxuKyAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcImlwcm91dGUyIGRvZXMgbm90IHJlcG9ydCB0aGUgR1JPIHNpemUgbGltaXRzXCIpXG4rXG4rICAgIGlmIChjZmcuZGV2W1wiZ3JvX21heF9zaXplXCJdID09IHNpemUgYW5kXG4rICAgICAgICAgICAgY2ZnLmRldltcImdyb19pcHY0X21heF9zaXplXCJdID09IHNpemUpOlxuKyAgICAgICAgcmV0dXJuXG4rXG4rICAgIG9sZCA9IChmXCJncm9fbWF4X3NpemUge2NmZy5kZXZbJ2dyb19tYXhfc2l6ZSddfSBcIlxuKyAgICAgICAgICAgZlwiZ3JvX2lwdjRfbWF4X3NpemUge2NmZy5kZXZbJ2dyb19pcHY0X21heF9zaXplJ119XCIpXG4rICAgIG5ldyA9IGZcImdyb19tYXhfc2l6ZSB7c2l6ZX0gZ3JvX2lwdjRfbWF4X3NpemUge3NpemV9XCJcbitcbisgICAgaXAoZlwibGluayBzZXQgZGV2IHtjZmcuaWZuYW1lfSB7bmV3fVwiKVxuKyAgICBkZWZlcihpcCwgZlwibGluayBzZXQgZGV2IHtjZmcuaWZuYW1lfSB7b2xkfVwiKVxuK1xuKyAgICBkZXYgPSBpcChcIi1kIGxpbmsgc2hvdyBkZXYgXCIgKyBjZmcuaWZuYW1lLCBqc29uPVRydWUpWzBdXG4rICAgIGtzZnRfZXEoZGV2W1wiZ3JvX21heF9zaXplXCJdLCBzaXplLCBjb21tZW50PVwiZ3JvX21heF9zaXplIG5vdCBhcHBsaWVkXCIpXG4rICAgIGtzZnRfZXEoZGV2W1wiZ3JvX2lwdjRfbWF4X3NpemVcIl0sIHNpemUsXG4rICAgICAgICAgICAgY29tbWVudD1cImdyb19pcHY0X21heF9zaXplIG5vdCBhcHBsaWVkXCIpXG4rXG4rXG4gZGVmIF9zZXRfZXRodG9vbF9mZWF0KGRldiwgY3VycmVudCwgZmVhdHMsIGhvc3Q9Tm9uZSk6XG4gICAgIHMybiA9IHtUcnVlOiBcIm9uXCIsIEZhbHNlOiBcIm9mZlwifVxuIFxuQEAgLTIzOSw3ICsyNzMsMTEgQEAgZGVmIF9zZXR1cChjZmcsIG1vZGUsIHRlc3RfbmFtZSk6XG4gICAgICAgICBmbHVzaF9wYXRoID0gZlwiL3N5cy9jbGFzcy9uZXQve2NmZy5pZm5hbWV9L2dyb19mbHVzaF90aW1lb3V0XCJcbiAgICAgICAgIGlycV9wYXRoID0gZlwiL3N5cy9jbGFzcy9uZXQve2NmZy5pZm5hbWV9L25hcGlfZGVmZXJfaGFyZF9pcnFzXCJcbiBcbi0gICAgICAgIGN0bF9maWxlX3dyaXRlKGZsdXNoX3BhdGgsIFwiMjAwMDAwXCIpXG4rICAgICAgICAjIFwiYmlnX3RjcF8qXCIgdGVzdHMgbmVlZCBhIGxvbmdlciB0aW1lb3V0LCB1c2UgMnggdGhlIHJlZ3VsYXIgdGltZW91dFxuKyAgICAgICAgaWYgdGVzdF9uYW1lLnN0YXJ0c3dpdGgoXCJiaWdfdGNwX1wiKTpcbisgICAgICAgICAgICBjdGxfZmlsZV93cml0ZShmbHVzaF9wYXRoLCBcIjQwMDAwMFwiKVxuKyAgICAgICAgZWxzZTpcbisgICAgICAgICAgICBjdGxfZmlsZV93cml0ZShmbHVzaF9wYXRoLCBcIjIwMDAwMFwiKVxuICAgICAgICAgY3RsX2ZpbGVfd3JpdGUoaXJxX3BhdGgsIFwiMTBcIilcbiBcbiAgICAgICAgIF9zZXRfZXRodG9vbF9mZWF0KGNmZy5pZm5hbWUsIGNmZy5mZWF0LFxuQEAgLTI4OSw2ICszMjcsOSBAQCBkZWYgX3NldHVwKGNmZywgbW9kZSwgdGVzdF9uYW1lKTpcbiAgICAgZXhjZXB0IEtzZnRYZmFpbEV4OlxuICAgICAgICAgcGFzc1xuIFxuKyAgICBpZiB0ZXN0X25hbWUuc3RhcnRzd2l0aChcImJpZ190Y3BfXCIpOlxuKyAgICAgICAgX3NldF9ncm9fc2l6ZV9yZXN0b3JlKGNmZywgQklHX1RDUF9HUk9fTUFYX1NJWkUpXG4rXG4gXG4gZGVmIF9ncm9fdmFyaWFudHMoKTpcbiAgICAgXCJcIlwiR2VuZXJhdG9yIHRoYXQgeWllbGRzIGFsbCBjb21iaW5hdGlvbnMgb2YgcHJvdG9jb2wgYW5kIHRlc3QgdHlwZXMuXCJcIlwiXG5AQCAtMzA0LDYgKzM0NSwxMSBAQCBkZWYgX2dyb192YXJpYW50cygpOlxuICAgICAgICAgXCJsYXJnZV9tYXhcIiwgXCJsYXJnZV9yZW1cIixcbiAgICAgXVxuIFxuKyAgICBiaWdfdGNwX3Rlc3RzID0gW1xuKyAgICAgICAgXCJiaWdfdGNwX2RhdGFfc2FtZVwiLCBcImJpZ190Y3BfZGF0YV9scmdfc21sXCIsXG4rICAgICAgICBcImJpZ190Y3BfdGNwX3NlcVwiLCBcImJpZ190Y3BfbGFyZ2VfbWF4XCIsXG4rICAgIF1cbitcbiAgICAgIyBUZXN0cyBzcGVjaWZpYyB0byBJUHY0XG4gICAgIGlwdjRfdGVzdHMgPSBbXG4gICAgICAgICBcImlwX2NzdW1cIixcbkBAIC0zMjIsNiArMzY4LDEwIEBAIGRlZiBfZ3JvX3ZhcmlhbnRzKCk6XG4gICAgICAgICBmb3IgdGVzdF9uYW1lIGluIGNvbW1vbl90ZXN0czpcbiAgICAgICAgICAgICB5aWVsZCBwcm90b2NvbCwgdGVzdF9uYW1lXG4gXG4rICAgICAgICBpZiBwcm90b2NvbCBpbiBbXCJpcHY0XCIsIFwiaXB2NlwiXTpcbisgICAgICAgICAgICBmb3IgdGVzdF9uYW1lIGluIGJpZ190Y3BfdGVzdHM6XG4rICAgICAgICAgICAgICAgIHlpZWxkIHByb3RvY29sLCB0ZXN0X25hbWVcbitcbiAgICAgICAgIGlmIHByb3RvY29sIGluIFtcImlwdjRcIiwgXCJpcGlwXCJdOlxuICAgICAgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gaXB2NF90ZXN0czpcbiAgICAgICAgICAgICAgICAgeWllbGQgcHJvdG9jb2wsIHRlc3RfbmFtZVxuQEAgLTM1OCw3ICs0MDgsOCBAQCBkZWYgcnVuX3Rlc3QoY2ZnLCBtb2RlLCBwcm90b2NvbCwgdGVzdF9uYW1lKTpcbiAgICAgICAgIGlmIHJ4X3Byb2MucmV0ID09IDQyOlxuICAgICAgICAgICAgIHJhaXNlIEtzZnRGYWlsRXgoZlwiR1JPIG92ZXItY29hbGVzY2VkIGluIHtwcm90b2NvbH0ve3Rlc3RfbmFtZX1cIilcbiBcbi0gICAgICAgIGlmIHRlc3RfbmFtZS5zdGFydHN3aXRoKFwibGFyZ2VfXCIpIGFuZCBvcy5lbnZpcm9uLmdldChcIktTRlRfTUFDSElORV9TTE9XXCIpOlxuKyAgICAgICAgaWYgKHRlc3RfbmFtZS5zdGFydHN3aXRoKChcImxhcmdlX1wiLCBcImJpZ190Y3BfXCIpKSBhbmRcbisgICAgICAgICAgICAgICAgb3MuZW52aXJvbi5nZXQoXCJLU0ZUX01BQ0hJTkVfU0xPV1wiKSk6XG4gICAgICAgICAgICAga3NmdF9wcihmXCJJZ25vcmluZyB7cHJvdG9jb2x9L3t0ZXN0X25hbWV9IGZhaWx1cmUgZHVlIHRvIHNsb3cgZW52aXJvbm1lbnRcIilcbiAgICAgICAgICAgICByZXR1cm5cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uY1xuaW5kZXggN2EzMzMxNTVkZTFhYi4uNzBiMGRlYjNjMTFmYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmNcbkBAIC00Niw2ICs0NiwxMiBAQFxuICAqICAgLSBsYXJnZV9tYXg6IGV4Y2VlZGluZyBtYXggc2l6ZVxuICAqICAgLSBsYXJnZV9yZW06IHJlbWFpbmRlciBoYW5kbGluZ1xuICAqXG4rICogYmlnX3RjcF8qOlxuKyAqICAgLSBiaWdfdGNwX2RhdGFfc2FtZTogICAgZXF1YWwgc2VnbWVudHMgY29hbGVzY2luZyBwYXN0IElQX01BWFBBQ0tFVFxuKyAqICAgLSBiaWdfdGNwX2RhdGFfbHJnX3NtbDogYSBzbWFsbGVyIGZpbmFsIHNlZ21lbnQgY2FycnlpbmcgaXQgb3ZlclxuKyAqICAgLSBiaWdfdGNwX3RjcF9zZXE6ICAgICAgMTYtYml0IHRydW5jYXRlZCBzZXF1ZW5jZSBudW1iZXIgbXVzdCBub3QgY29hbGVzY2VcbisgKiAgIC0gYmlnX3RjcF9sYXJnZV9tYXg6ICAgIGNvYWxlc2Npbmcgc3RvcHMgYXQgdGhlIGNvbmZpZ3VyZWQgbGltaXRcbisgKlxuICAqIHNpbmdsZSwgY2FwYWNpdHk6XG4gICogIEJvcmluZyBjYXNlcyB1c2VkIHRvIHRlc3QgY29hbGVzY2luZyBtYWNoaW5lcnkgaXRzZWxmIGFuZCBzdGF0c1xuICAqICBtb3JlIHRoYW4gcHJvdG9jb2wgYmVoYXZpb3IuXG5AQCAtMTEwLDYgKzExNiwxNiBAQFxuIFxuICNkZWZpbmUgRVhJVF9PVkVSX0NPQUxFU0NFXHQ0MlxuIFxuKy8qIE11c3QgbWF0Y2ggQklHX1RDUF9HUk9fTUFYX1NJWkUgaW4gZ3JvX2xpYi5weS4gKi9cbisjZGVmaW5lIEJJR19UQ1BfR1JPX01BWF9TSVpFXHQxMjgwMDBcbitcbisjZGVmaW5lIEJJR19UQ1BfUkVDVl9CVUZfTEVOIFxcXG4rXHQoQklHX1RDUF9HUk9fTUFYX1NJWkUgKyBNQVhfTVNTICsgTDJfSExFTl9NQVgpXG4rI2RlZmluZSBCSUdfVENQX01JTl9NU1NcdFx0KEFTU1VNRURfTVRVIC0gKE1BWF9IRFJfTEVOIC0gRVRIX0hMRU4pKVxuKyNkZWZpbmUgQklHX1RDUF9NQVhfRklMTF9DTlQgXFxcbitcdCgoaW50KSgoQklHX1RDUF9HUk9fTUFYX1NJWkUgLSAxIC0gKE1BWF9IRFJfTEVOIC0gRVRIX0hMRU4pKSAvIFxcXG4rXHQgICAgICAgQklHX1RDUF9NSU5fTVNTKSlcbitcbiAjZGVmaW5lIGlwdjZfb3B0bGVuKHApICAoKChwKS1cdTAwM2VoZHJsZW4rMSkgXHUwMDNjXHUwMDNjIDMpIC8qIGNhbGN1bGF0ZSBJUHY2IGV4dGVuc2lvbiBoZWFkZXIgbGVuICovXG4gI2RlZmluZSBCVUlMRF9CVUdfT04oY29uZGl0aW9uKSAoKHZvaWQpc2l6ZW9mKGNoYXJbMSAtIDIqISEoY29uZGl0aW9uKV0pKVxuIFxuQEAgLTE2Niw2ICsxODIsMjcgQEAgc3RhdGljIGludCBudW1fbGFyZ2VfcGt0KHZvaWQpXG4gXHRyZXR1cm4gbWF4X3BheWxvYWQoKSAvIGNhbGNfbXNzKCk7XG4gfVxuIFxuKy8qIEhvdyBtYW55IG1heGltdW0gc2l6ZWQgc2VnbWVudHMgZml0IHVuZGVyIHRoZSBjb25maWd1cmVkIGxpbWl0LiAqL1xuK3N0YXRpYyBpbnQgYmlnX3RjcF9sYXJnZV9jbnQodm9pZClcbit7XG4rXHRyZXR1cm4gKEJJR19UQ1BfR1JPX01BWF9TSVpFIC0gMSAtICh0b3RhbF9oZHJfbGVuIC0gRVRIX0hMRU4pKSAvXG4rXHQgICAgICAgY2FsY19tc3MoKTtcbit9XG4rXG4rLyogSG93IG1hbnkgY2FsY19tc3MoKSBzaXplZCBzZWdtZW50cyBhcmUgbmVlZGVkIHRvIHNhdGlzZnkgdGhlXG4rICogZm9sbG93aW5nIGNvbmRpdGlvbjpcbisgKiBwa3RfY291bnQgKiBjYWxjX21zcygpIFx1MDAzYyBJUF9NQVhQQUNLRVQgXHUwMDNjIChwa3RfY291bnQgKyAxKSAqIGNhbGNfbXNzKClcbisgKi9cbitzdGF0aWMgaW50IGJpZ190Y3BfZmlsbF9jbnQodm9pZClcbit7XG4rXHRyZXR1cm4gSVBfTUFYUEFDS0VUIC8gY2FsY19tc3MoKTtcbit9XG4rXG4rc3RhdGljIGludCBiaWdfdGNwX2ZpbGxfbGVuKHZvaWQpXG4re1xuK1x0cmV0dXJuIGJpZ190Y3BfZmlsbF9jbnQoKSAqIGNhbGNfbXNzKCk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHZsb2coY29uc3QgY2hhciAqZm10LCAuLi4pXG4ge1xuIFx0dmFfbGlzdCBhcmdzO1xuQEAgLTU2MCw2ICs1OTcsNjEgQEAgc3RhdGljIHZvaWQgc2VuZF9kYXRhX3BrdHMoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHJfbGwgKmRhZGRyLFxuIFx0d3JpdGVfcGFja2V0KGZkLCBidWYsIHRvdGFsX2hkcl9sZW4gKyBwYXlsb2FkX2xlbjIsIGRhZGRyKTtcbiB9XG4gXG4rLyogU2VuZCBudW1fcGt0IHNlZ21lbnRzIG9mIHBrdF9sZW4gYnl0ZXMsIHRoZW4gb25lIG9mIHJlbWFpbmRlciBsZW4uICovXG4rc3RhdGljIHZvaWQgc2VuZF9iaWdfdGNwKGludCBmZCwgc3RydWN0IHNvY2thZGRyX2xsICpkYWRkciwgaW50IHBrdF9sZW4sXG4rXHRcdFx0IGludCBudW1fcGt0LCBpbnQgcmVtYWluZGVyKVxuK3tcbitcdHN0YXRpYyBjaGFyIHBrdHNbQklHX1RDUF9NQVhfRklMTF9DTlRdW01BWF9IRFJfTEVOICsgTUFYX01TU107XG4rXHRzdGF0aWMgY2hhciBsYXN0W01BWF9IRFJfTEVOICsgTUFYX01TU107XG4rXHRjb25zdCBpbnQgZmlsbGVkID0gbnVtX3BrdCAqIHBrdF9sZW47XG4rXHRpbnQgaTtcbitcbitcdGlmIChudW1fcGt0IFx1MDAzZSBCSUdfVENQX01BWF9GSUxMX0NOVClcbitcdFx0ZXJyb3IoMSwgMCwgXCJuZWVkICVkIHBhY2tldHMsIGFycmF5IGhvbGRzICVkXCIsXG4rXHRcdCAgICAgIG51bV9wa3QsIEJJR19UQ1BfTUFYX0ZJTExfQ05UKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9wa3Q7IGkrKylcbitcdFx0Y3JlYXRlX3BhY2tldChwa3RzW2ldLCBpICogcGt0X2xlbiwgMCwgcGt0X2xlbiwgMCk7XG4rXHRjcmVhdGVfcGFja2V0KGxhc3QsIGZpbGxlZCwgMCwgcmVtYWluZGVyLCAwKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9wa3Q7IGkrKylcbitcdFx0d3JpdGVfcGFja2V0KGZkLCBwa3RzW2ldLCB0b3RhbF9oZHJfbGVuICsgcGt0X2xlbiwgZGFkZHIpO1xuK1x0d3JpdGVfcGFja2V0KGZkLCBsYXN0LCB0b3RhbF9oZHJfbGVuICsgcmVtYWluZGVyLCBkYWRkcik7XG4rfVxuK1xuKy8qIEluIEJJRyBUQ1AgY29uZmlndXJhdGlvbiwgdGhlIHRvdGFsIGFnZ3JlZ2F0ZSBsZW5ndGggY2FuXG4rICogYmUgZ3JlYXRlciB0aGFuIHRoZSBsZWdhY3kgSVBfTUFYUEFDS0VULiBTaW5jZSB0aGUgYWdncmVnYXRlXG4rICogbGVuZ3RoIGlzIHVzZWQgaW4gY2FsY3VsYXRpbmcgdGhlIHNlcXVlbmNlIG51bWJlcnMsXG4rICogc2VuZCBhIHBhY2tldCB3aXRoIGEgc2VxdWVuY2UgbnVtYmVyIHRoYXQgZGlmZmVycyBieSBJUF9NQVhQQUNLRVQgKyAxLFxuKyAqIHRvIHRlc3QgYWdhaW5zdCB0cnVuY2F0aW9uIGJ1Z3MuXG4rICovXG4rc3RhdGljIHZvaWQgc2VuZF9iaWdfdGNwX2JhZF9zZXEoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHJfbGwgKmRhZGRyKVxuK3tcbitcdHN0YXRpYyBjaGFyIHBrdHNbQklHX1RDUF9NQVhfRklMTF9DTlRdW01BWF9IRFJfTEVOICsgTUFYX01TU107XG4rXHRjb25zdCBpbnQgbnVtX3BrdCA9IGJpZ190Y3BfZmlsbF9jbnQoKSArIDE7XG4rXHRzdGF0aWMgY2hhciBsYXN0W01BWF9IRFJfTEVOICsgTUFYX01TU107XG4rXHRjb25zdCBpbnQgcGt0X2xlbiA9IGNhbGNfbXNzKCk7XG4rXHRpbnQgYmFkX3NlcTtcbitcdGludCBmaWxsZWQ7XG4rXHRpbnQgaTtcbitcbitcdGZpbGxlZCA9IG51bV9wa3QgKiBwa3RfbGVuO1xuK1x0LyogTG93IDE2IGJpdHMgbWF0Y2ggd2l0aCB0aGUgY29ycmVjdCBpbmNvbWluZyBzZXF1ZW5jZSBudW1iZXIuICovXG4rXHRiYWRfc2VxID0gZmlsbGVkIC0gKElQX01BWFBBQ0tFVCArIDEpO1xuK1xuK1x0aWYgKG51bV9wa3QgXHUwMDNlIEJJR19UQ1BfTUFYX0ZJTExfQ05UKVxuK1x0XHRlcnJvcigxLCAwLCBcIm5lZWQgJWQgcGFja2V0cywgYXJyYXkgaG9sZHMgJWRcIixcbitcdFx0ICAgICAgbnVtX3BrdCwgQklHX1RDUF9NQVhfRklMTF9DTlQpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3BrdDsgaSsrKVxuK1x0XHRjcmVhdGVfcGFja2V0KHBrdHNbaV0sIGkgKiBwa3RfbGVuLCAwLCBwa3RfbGVuLCAwKTtcbitcdGNyZWF0ZV9wYWNrZXQobGFzdCwgYmFkX3NlcSwgMCwgcGt0X2xlbiwgMCk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fcGt0OyBpKyspXG4rXHRcdHdyaXRlX3BhY2tldChmZCwgcGt0c1tpXSwgdG90YWxfaGRyX2xlbiArIHBrdF9sZW4sIGRhZGRyKTtcbitcdHdyaXRlX3BhY2tldChmZCwgbGFzdCwgdG90YWxfaGRyX2xlbiArIHBrdF9sZW4sIGRhZGRyKTtcbit9XG4rXG4gLyogSWYgaW5jb21pbmcgc2VnbWVudHMgbWFrZSB0cmFja2VkIHNlZ21lbnQgbGVuZ3RoIGV4Y2VlZFxuICAqIGxlZ2FsIElQIGRhdGFncmFtIGxlbmd0aCwgZG8gbm90IGNvYWxlc2NlXG4gICovXG5AQCAtMTE2MSw3ICsxMjUzLDcgQEAgc3RhdGljIHZvaWQgcmVjdl9lcnJvcihpbnQgZmQsIGludCByY3ZfZXJybm8pXG4gc3RhdGljIHZvaWQgY2hlY2tfcmVjdl9wa3RzKGludCBmZCwgaW50ICpjb3JyZWN0X3BheWxvYWQsXG4gXHRcdFx0ICAgIGludCBjb3JyZWN0X251bV9wa3RzKVxuIHtcbi1cdHN0YXRpYyBjaGFyIGJ1ZmZlcltJUF9NQVhQQUNLRVQgKyBMMl9ITEVOX01BWCArIDFdO1xuK1x0c3RhdGljIGNoYXIgYnVmZmVyW0JJR19UQ1BfUkVDVl9CVUZfTEVOXTtcbiBcdGludCBuaG9mZiA9IEVUSF9ITEVOICsgKHBwcG9lID8gUFBQT0VfU0VTX0hMRU4gOiAwKTtcbiBcdHN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKShidWZmZXIgKyBuaG9mZik7XG4gXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShidWZmZXIgKyBuaG9mZik7XG5AQCAtMTU0MSw2ICsxNjMzLDI1IEBAIHN0YXRpYyB2b2lkIGdyb19zZW5kZXIodm9pZClcbiBcdFx0c2VuZF9sYXJnZSh0eGZkLCBcdTAwMjZkYWRkciwgcmVtYWluZGVyICsgMSk7XG4gXHRcdHdyaXRlX3BhY2tldCh0eGZkLCBmaW5fcGt0LCB0b3RhbF9oZHJfbGVuLCBcdTAwMjZkYWRkcik7XG4gXG4rXHQvKiBiaWcgdGNwIHN1Yi10ZXN0cyAqL1xuK1x0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFwiYmlnX3RjcF9kYXRhX3NhbWVcIikgPT0gMCkge1xuK1x0XHRzZW5kX2JpZ190Y3AodHhmZCwgXHUwMDI2ZGFkZHIsIGNhbGNfbXNzKCksIGJpZ190Y3BfZmlsbF9jbnQoKSxcbitcdFx0XHQgICAgIGNhbGNfbXNzKCkpO1xuK1x0XHR3cml0ZV9wYWNrZXQodHhmZCwgZmluX3BrdCwgdG90YWxfaGRyX2xlbiwgXHUwMDI2ZGFkZHIpO1xuK1x0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFwiYmlnX3RjcF9kYXRhX2xyZ19zbWxcIikgPT0gMCkge1xuK1x0XHRpbnQgcmVtYWluZGVyID0gY2FsY19tc3MoKSAvIDI7XG4rXG4rXHRcdHNlbmRfYmlnX3RjcCh0eGZkLCBcdTAwMjZkYWRkciwgY2FsY19tc3MoKSwgYmlnX3RjcF9maWxsX2NudCgpLFxuK1x0XHRcdCAgICAgcmVtYWluZGVyKTtcbitcdFx0d3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sIFx1MDAyNmRhZGRyKTtcbitcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcImJpZ190Y3BfdGNwX3NlcVwiKSA9PSAwKSB7XG4rXHRcdHNlbmRfYmlnX3RjcF9iYWRfc2VxKHR4ZmQsIFx1MDAyNmRhZGRyKTtcbitcdFx0d3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sIFx1MDAyNmRhZGRyKTtcbitcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcImJpZ190Y3BfbGFyZ2VfbWF4XCIpID09IDApIHtcbitcdFx0c2VuZF9iaWdfdGNwKHR4ZmQsIFx1MDAyNmRhZGRyLCBjYWxjX21zcygpLCBiaWdfdGNwX2xhcmdlX2NudCgpLFxuK1x0XHRcdCAgICAgY2FsY19tc3MoKSk7XG4rXHRcdHdyaXRlX3BhY2tldCh0eGZkLCBmaW5fcGt0LCB0b3RhbF9oZHJfbGVuLCBcdTAwMjZkYWRkcik7XG4rXG4gXHQvKiBtYWNoaW5lcnkgc3ViLXRlc3RzICovXG4gXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXCJzaW5nbGVcIikgPT0gMCkge1xuIFx0XHRzdGF0aWMgY2hhciBidWZbTUFYX0hEUl9MRU4gKyBQQVlMT0FEX0xFTl07XG5AQCAtMTc2OCw2ICsxODc5LDI2IEBAIHN0YXRpYyB2b2lkIGdyb19yZWNlaXZlcih2b2lkKVxuIFx0XHRwcmludGYoXCJsYXN0IHNlZ21lbnQgc2VudCBpbmRpdmlkdWFsbHk6IFwiKTtcbiBcdFx0Y2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMyk7XG4gXG4rXHQvKiBiaWcgdGNwIHN1Yi10ZXN0cyAqL1xuK1x0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFwiYmlnX3RjcF9kYXRhX3NhbWVcIikgPT0gMCkge1xuK1x0XHRjb3JyZWN0X3BheWxvYWRbMF0gPSBiaWdfdGNwX2ZpbGxfbGVuKCkgKyBjYWxjX21zcygpO1xuK1x0XHRwcmludGYoXCJkYXRhIHBhY2tldHMgb2Ygc2FtZSBzaXplIHBhc3QgSVBfTUFYUEFDS0VUOiBcIik7XG4rXHRcdGNoZWNrX3JlY3ZfcGt0cyhyeGZkLCBjb3JyZWN0X3BheWxvYWQsIDEpO1xuK1x0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFwiYmlnX3RjcF9kYXRhX2xyZ19zbWxcIikgPT0gMCkge1xuK1x0XHRjb3JyZWN0X3BheWxvYWRbMF0gPSBiaWdfdGNwX2ZpbGxfbGVuKCkgKyBjYWxjX21zcygpIC8gMjtcbitcdFx0cHJpbnRmKFwic21hbGxlciBsYXN0IHBhY2tldCBwYXN0IElQX01BWFBBQ0tFVDogXCIpO1xuK1x0XHRjaGVja19yZWN2X3BrdHMocnhmZCwgY29ycmVjdF9wYXlsb2FkLCAxKTtcbitcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcImJpZ190Y3BfdGNwX3NlcVwiKSA9PSAwKSB7XG4rXHRcdGNvcnJlY3RfcGF5bG9hZFswXSA9IChiaWdfdGNwX2ZpbGxfY250KCkgKyAxKSAqIGNhbGNfbXNzKCk7XG4rXHRcdGNvcnJlY3RfcGF5bG9hZFsxXSA9IGNhbGNfbXNzKCk7XG4rXHRcdHByaW50ZihcImFsaWFzZWQgc2VxIHBhc3QgSVBfTUFYUEFDS0VUIGRvZXNuJ3QgY29hbGVzY2U6IFwiKTtcbitcdFx0Y2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMik7XG4rXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXCJiaWdfdGNwX2xhcmdlX21heFwiKSA9PSAwKSB7XG4rXHRcdGNvcnJlY3RfcGF5bG9hZFswXSA9IGJpZ190Y3BfbGFyZ2VfY250KCkgKiBjYWxjX21zcygpO1xuK1x0XHRjb3JyZWN0X3BheWxvYWRbMV0gPSBjYWxjX21zcygpO1xuK1x0XHRwcmludGYoXCJzaG91bGRuJ3QgY29hbGVzY2UgcGFzdCBncm9fbWF4X3NpemU6IFwiKTtcbitcdFx0Y2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMik7XG4rXG4gXHQvKiBtYWNoaW5lcnkgc3ViLXRlc3RzICovXG4gXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXCJzaW5nbGVcIikgPT0gMCkge1xuIFx0XHRwcmludGYoXCJzaW5nbGUgZGF0YSBwYWNrZXQ6IFwiKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA2OjIyOjAyLjk2MTU1MTYyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTMyOTc2NTkzNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGggRnV6emluZyBEZWNpc2lvbiBQcm9jZXNzKipcblxuT2theSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBzZXJpZXMgaXMgd29ydGggZnV6emluZyB3aXRoIHN5emthbGxlci4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBkaWZmLiBMZXQncyBzZWUuLi4gaXQgdG91Y2hlcyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weWAgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jYC4gSG9sZCBvbiBhIHNlY29uZC4uLiB0aG9zZSBhcmUgYm90aCB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2AhXG5cblJpZ2h0LCBJIG5lZWQgdG8gYXBwbHkgbXkgcnVsZXMgaGVyZS4gSSBrbm93IHRoZSBjcml0ZXJpYSBmb3IgKm5vdCogZnV6emluZywgYW5kIGl0J3MgcHJldHR5IGNsZWFyLWN1dC4gUnVsZSBudW1iZXIgdHdvIHNheXMgSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmICphbGwqIHRoZSBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gdGhlIGNhdGVnb3JpZXMgb2Ygbm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlcywgcGFydGljdWxhcmx5IHRoaW5ncyBsaWtlIG1vZGlmaWNhdGlvbnMgdG8gc2VsZi10ZXN0cyBvciBzY3JpcHRzIHRoYXQgZG9uJ3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2Ugb3IgbW9kdWxlcy4gQmluZ28hIFRoZXNlIGZpbGVzIGFyZSByaWdodCBpbiB0aGF0IGNhdGVnb3J5LlxuXG5UbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBnaXQgZGlmZmAgb3IgYGdpdCBzaG93YCB0byBtYWtlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IG5vIG90aGVyLCBsZXNzIG9idmlvdXMsIGZpbGVzIHdlcmUgdG91Y2hlZCBpbiB0aGUgSEVBRCBjb21taXQuIEJ1dCBiYXNlZCBvbiB3aGF0IEkgc2VlIGhlcmUsIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyBhIG5vLWdvIGZvciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzAxLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDY6MjI6MTYuMjU5MjE3MTY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjQ3NjQ5MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQklHX1RDUF9HUk9fTUFYX1NJWkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weT02MD1HUk9fRFBPUlQgPSA4MDAwXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weS02MS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5OjYyOkJJR19UQ1BfR1JPX01BWF9TSVpFID0gMTI4MDAwXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weS02My1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHk9MjU1PWRlZiBfc2V0dXAoY2ZnLCBtb2RlLCB0ZXN0X25hbWUpOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weS0zMzAtICAgIGlmIHRlc3RfbmFtZS5zdGFydHN3aXRoKFxcXCJiaWdfdGNwX1xcXCIpOlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHk6MzMxOiAgICAgICAgX3NldF9ncm9fc2l6ZV9yZXN0b3JlKGNmZywgQklHX1RDUF9HUk9fTUFYX1NJWkUpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weS0zMzItXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jLTExOC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jOjExOTovKiBNdXN0IG1hdGNoIEJJR19UQ1BfR1JPX01BWF9TSVpFIGluIGdyb19saWIucHkuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYzoxMjA6I2RlZmluZSBCSUdfVENQX0dST19NQVhfU0laRVxcdDEyODAwMFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMtMTIxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMtMTIyLSNkZWZpbmUgQklHX1RDUF9SRUNWX0JVRl9MRU4gXFxcXFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmM6MTIzOlxcdChCSUdfVENQX0dST19NQVhfU0laRSArIE1BWF9NU1MgKyBMMl9ITEVOX01BWClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jLTEyNC0jZGVmaW5lIEJJR19UQ1BfTUlOX01TU1xcdFxcdChBU1NVTUVEX01UVSAtIChNQVhfSERSX0xFTiAtIEVUSF9ITEVOKSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jLTEyNS0jZGVmaW5lIEJJR19UQ1BfTUFYX0ZJTExfQ05UIFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jOjEyNjpcXHQoKGludCkoKEJJR19UQ1BfR1JPX01BWF9TSVpFIC0gMSAtIChNQVhfSERSX0xFTiAtIEVUSF9ITEVOKSkgLyBcXFxcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYy0xMjctXFx0ICAgICAgIEJJR19UQ1BfTUlOX01TUykpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jPTE4Nj1zdGF0aWMgaW50IGJpZ190Y3BfbGFyZ2VfY250KHZvaWQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYy0xODcte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmM6MTg4OlxcdHJldHVybiAoQklHX1RDUF9HUk9fTUFYX1NJWkUgLSAxIC0gKHRvdGFsX2hkcl9sZW4gLSBFVEhfSExFTikpIC9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jLTE4OS1cXHQgICAgICAgY2FsY19tc3MoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDY6MjI6MTguMzIzOTg5MjQzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzYzOTI2NzE5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBObyBGdXp6aW5nIFJlcXVpcmVkKipcblxuT2theSwgbGV0J3MgcXVpY2tseSB2ZXJpZnkuIEEgcXVpY2sgYGdpdCBsb2cgLW4gMSAtLXN0YXRgIGNoZWNrIG9yIGxvb2sgZm9yIGFueSBvdGhlciB1bnNlZW4gbW9kaWZpY2F0aW9ucy4gSXQgYXBwZWFycyB0aGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gIGRpcmVjdG9yeS4gVGhlIGRpZmYgY29uZmlybXMgdGhpcywgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5YCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmNgLlxuXG5HaXZlbiBTRUNUSU9OIDIncyBcIk5lZ2F0aXZlIENyaXRlcmlhLFwiIHRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGUgY2hhbmdlcyBhcmUgbm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUuIFRoZXkgZmFsbCBzcXVhcmVseSB1bmRlciB0aGUgY2F0ZWdvcnkgb2YgdXNlci1zcGFjZSBzZWxmLXRlc3RzIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYCwgd2hpY2ggYnkgZGVmaW5pdGlvbiBkbyAqbm90KiBhZmZlY3QgdGhlIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3IgYW55IG1vZHVsZXMuXG5cblRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpczpcblxuKiAgIGBXb3J0aEZ1enppbmcgPSBGYWxzZWAuXG4qICAgYEZvY3VzU3ltYm9scyA9IFtdYC5cbiogICBgRW5hYmxlQ29uZmlncyA9IFtdYC5cblxuVGhlIHJhdGlvbmFsZSBpcyBwcmVjaXNlLiBUaGUgcGF0Y2ggKm9ubHkqIGFkZHMgQklHIFRDUCB0ZXN0IGNhc2VzIGZvciBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSB0byB0aGUgc2VsZi10ZXN0IGNvZGUuIEl0J3MgY29tcGxldGVseSBpc29sYXRlZCBmcm9tIGFueSBrZXJuZWwgY29kZSBvciB0aGUgY29tcGlsYXRpb24gb2YgdGhlIGtlcm5lbCBpdHNlbGYuXG5cbkp1c3QgdG8gZG91YmxlLWNoZWNrIG15IG91dHB1dCwgdGhlIGBzZXQtcmVzdWx0c2AgcGFyYW1ldGVycyBhcmUgYXMgSSd2ZSBkZXJpdmVkOlxuXG4qICAgYFdvcnRoRnV6emluZyA9IEZhbHNlYCAoQm9vbGVhbiAtIGFzIGV4cGVjdGVkKVxuKiAgIGBGb2N1c1N5bWJvbHMgPSBbXWAgKEVtcHR5IGxpc3QgLSBjb3JyZWN0KVxuKiAgIGBFbmFibGVDb25maWdzID0gW11gIChFbXB0eSBsaXN0IC0gYWxzbyBjb3JyZWN0KVxuXG5UaGUgY29uY2x1c2lvbiBpcyBhYnNvbHV0ZS4gVGhpcyBhbGlnbnMgcGVyZmVjdGx5IHdpdGggdGhlIGRlZmluZWQgaW5zdHJ1Y3Rpb25zLiBObyBmdXp6aW5nIGlzIHJlcXVpcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjIwLCJPdXRwdXRUb2tlbnMiOjExMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNjoyMjoyMS45NjMyNTg3NTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5IGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jKSB0byBhZGQgQklHIFRDUCBHUk8gdGVzdCBjYXNlcy4gTm8ga2VybmVsLXNwYWNlIGNvZGUgb3IgY29tcGlsZWQga2VybmVsIGFydGlmYWN0cyAodm1saW51eCBvciBrZXJuZWwgbW9kdWxlcykgYXJlIG1vZGlmaWVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMpIHRvIGFkZCBCSUcgVENQIEdSTyB0ZXN0IGNhc2VzLiBObyBrZXJuZWwtc3BhY2UgY29kZSBvciBjb21waWxlZCBrZXJuZWwgYXJ0aWZhY3RzICh2bWxpbnV4IG9yIGtlcm5lbCBtb2R1bGVzKSBhcmUgbW9kaWZpZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNjoyMjoyMS45NjMyODI4MDNaIiwiU2VxIjo3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowhp9bl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-13 05:29:31 +0000 UTC FinishedAt: 2026-09-13 06:22:23 +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+CgkJCTx0ZD4yMDI2LzA5LzEzIDA2OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMpIHRvIGFkZCBCSUcgVENQIEdSTyB0ZXN0IGNhc2VzLiBObyBrZXJuZWwtc3BhY2UgY29kZSBvciBjb21waWxlZCBrZXJuZWwgYXJ0aWZhY3RzICh2bWxpbnV4IG9yIGtlcm5lbCBtb2R1bGVzKSBhcmUgbW9kaWZpZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA2OjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWQxOWUzYjUyMjQzZjhmMjBlZTIzYzc5YmVlNDFkOTgxNjZjMDk3MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDA2OjIxOjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5XG5pbmRleCBiN2FjMDY2MGFkYzAxLi5hYmVjZjYwYmFhNTM3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weVxuQEAgLTQwLDEzICYjNDM7NDAsMTcgQEAgVGVzdCBjYXNlczpcbiAgIC0gaXBfdjZleHRfZGlmZjogKElQdjYpIElQdjYgZXh0IGhlYWRlciB3aXRoIGRpZmZlcmVudCBwYXlsb2FkIGRvZXNuJiMzOTt0IGNvYWxlc2NlXG4gICAtIGxhcmdlX21heDogUGFja2V0cyBleGNlZWRpbmcgR1JPX01BWF9TSVpFIGRvbiYjMzk7dCBjb2FsZXNjZVxuICAgLSBsYXJnZV9yZW06IExhcmdlIHBhY2tldCByZW1haW5kZXIgaGFuZGxpbmdcbiYjNDM7ICAtIGJpZ190Y3BfZGF0YV9zYW1lOiBTYW1lIHNpemUgcGFja2V0cyBjb2FsZXNjZSBwYXN0IElQX01BWFBBQ0tFVFxuJiM0MzsgIC0gYmlnX3RjcF9kYXRhX2xyZ19zbWw6IFNtYWxsZXIgbGFzdCBwYWNrZXQgY29hbGVzY2VzIHBhc3QgSVBfTUFYUEFDS0VUXG4mIzQzOyAgLSBiaWdfdGNwX3RjcF9zZXE6IFBhY2tldHMgd2l0aCAxNi1iaXQgdHJ1bmNhdGVkIHNlcW5vIGRvbiYjMzk7dCBjb2FsZXNjZVxuJiM0MzsgIC0gYmlnX3RjcF9sYXJnZV9tYXg6IFBhY2tldHMgZXhjZWVkaW5nIHRoZSBCSUcgVENQIGxpbWl0IGRvbiYjMzk7dCBjb2FsZXNjZVxuIFwmIzM0O1wmIzM0O1wmIzM0O1xuIFxuIGltcG9ydCBnbG9iXG4gaW1wb3J0IG9zXG4gaW1wb3J0IHJlXG4tZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfcnVuLCBrc2Z0X2V4aXQsIGtzZnRfcHJcbi1mcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIEtzZnRGYWlsRXgsIEtzZnRYZmFpbEV4XG4mIzQzO2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X3J1biwga3NmdF9leGl0LCBrc2Z0X3ByLCBrc2Z0X2VxXG4mIzQzO2Zyb20gbGliLnB5IGltcG9ydCBOZXREcnZFcEVudiwgS3NmdEZhaWxFeCwgS3NmdFNraXBFeCwgS3NmdFhmYWlsRXhcbiBmcm9tIGxpYi5weSBpbXBvcnQgTmV0ZGV2RmFtaWx5LCBFdGh0b29sRmFtaWx5XG4gZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgY21kLCBjdGxfZmlsZV93cml0ZSwgZGVmZXIsIGV0aHRvb2wsIGlwXG4gZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfdmFyaWFudHMsIEtzZnROYW1lZFZhcmlhbnRcbkBAIC01NSw2ICYjNDM7NTksOCBAQCBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF92YXJpYW50cywgS3NmdE5hbWVkVmFyaWFudFxuICMgZ3JvLmMgdXNlcyBoYXJkY29kZWQgRFBPUlQ9ODAwMFxuIEdST19EUE9SVCA9IDgwMDBcbiBcbiYjNDM7QklHX1RDUF9HUk9fTUFYX1NJWkUgPSAxMjgwMDBcbiYjNDM7XG4gXG4gZGVmIF9yZXNvbHZlX2RtYWMoY2ZnLCBpcHZlcik6XG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuQEAgLTkxLDYgJiM0Mzs5NywzNCBAQCBkZWYgX3NldF9tdHVfcmVzdG9yZShkZXYsIG10dSwgaG9zdCk6XG4gICAgICAgICBkZWZlcihpcCwgZlwmIzM0O2xpbmsgc2V0IGRldiB7ZGV2WyYjMzk7aWZuYW1lJiMzOTtdfSBtdHUge2RldlsmIzM5O210dSYjMzk7XX1cJiMzNDssIGhvc3Q9aG9zdClcbiBcbiBcbiYjNDM7ZGVmIF9zZXRfZ3JvX3NpemVfcmVzdG9yZShjZmcsIHNpemUpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBTZXQgdGhlIGxvY2FsIGRldmljZSYjMzk7cyBHUk8gc2l6ZSBsaW1pdHMsIHRoZW4gY29uZmlybSB0aGV5IHN0dWNrLlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgX3NldF9tdHVfcmVzdG9yZShjZmcuZGV2LCA0MDk2LCBOb25lKVxuJiM0MzsgICAgX3NldF9tdHVfcmVzdG9yZShjZmcucmVtb3RlX2RldiwgNDA5NiwgY2ZnLnJlbW90ZSlcbiYjNDM7XG4mIzQzOyAgICBpZiBcJiMzNDtncm9fbWF4X3NpemVcJiMzNDsgbm90IGluIGNmZy5kZXYgb3IgXCYjMzQ7Z3JvX2lwdjRfbWF4X3NpemVcJiMzNDsgbm90IGluIGNmZy5kZXY6XG4mIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcJiMzNDtpcHJvdXRlMiBkb2VzIG5vdCByZXBvcnQgdGhlIEdSTyBzaXplIGxpbWl0c1wmIzM0OylcbiYjNDM7XG4mIzQzOyAgICBpZiAoY2ZnLmRldltcJiMzNDtncm9fbWF4X3NpemVcJiMzNDtdID09IHNpemUgYW5kXG4mIzQzOyAgICAgICAgICAgIGNmZy5kZXZbXCYjMzQ7Z3JvX2lwdjRfbWF4X3NpemVcJiMzNDtdID09IHNpemUpOlxuJiM0MzsgICAgICAgIHJldHVyblxuJiM0MztcbiYjNDM7ICAgIG9sZCA9IChmXCYjMzQ7Z3JvX21heF9zaXplIHtjZmcuZGV2WyYjMzk7Z3JvX21heF9zaXplJiMzOTtdfSBcJiMzNDtcbiYjNDM7ICAgICAgICAgICBmXCYjMzQ7Z3JvX2lwdjRfbWF4X3NpemUge2NmZy5kZXZbJiMzOTtncm9faXB2NF9tYXhfc2l6ZSYjMzk7XX1cJiMzNDspXG4mIzQzOyAgICBuZXcgPSBmXCYjMzQ7Z3JvX21heF9zaXplIHtzaXplfSBncm9faXB2NF9tYXhfc2l6ZSB7c2l6ZX1cJiMzNDtcbiYjNDM7XG4mIzQzOyAgICBpcChmXCYjMzQ7bGluayBzZXQgZGV2IHtjZmcuaWZuYW1lfSB7bmV3fVwmIzM0OylcbiYjNDM7ICAgIGRlZmVyKGlwLCBmXCYjMzQ7bGluayBzZXQgZGV2IHtjZmcuaWZuYW1lfSB7b2xkfVwmIzM0OylcbiYjNDM7XG4mIzQzOyAgICBkZXYgPSBpcChcJiMzNDstZCBsaW5rIHNob3cgZGV2IFwmIzM0OyAmIzQzOyBjZmcuaWZuYW1lLCBqc29uPVRydWUpWzBdXG4mIzQzOyAgICBrc2Z0X2VxKGRldltcJiMzNDtncm9fbWF4X3NpemVcJiMzNDtdLCBzaXplLCBjb21tZW50PVwmIzM0O2dyb19tYXhfc2l6ZSBub3QgYXBwbGllZFwmIzM0OylcbiYjNDM7ICAgIGtzZnRfZXEoZGV2W1wmIzM0O2dyb19pcHY0X21heF9zaXplXCYjMzQ7XSwgc2l6ZSxcbiYjNDM7ICAgICAgICAgICAgY29tbWVudD1cJiMzNDtncm9faXB2NF9tYXhfc2l6ZSBub3QgYXBwbGllZFwmIzM0OylcbiYjNDM7XG4mIzQzO1xuIGRlZiBfc2V0X2V0aHRvb2xfZmVhdChkZXYsIGN1cnJlbnQsIGZlYXRzLCBob3N0PU5vbmUpOlxuICAgICBzMm4gPSB7VHJ1ZTogXCYjMzQ7b25cJiMzNDssIEZhbHNlOiBcJiMzNDtvZmZcJiMzNDt9XG4gXG5AQCAtMjM5LDcgJiM0MzsyNzMsMTEgQEAgZGVmIF9zZXR1cChjZmcsIG1vZGUsIHRlc3RfbmFtZSk6XG4gICAgICAgICBmbHVzaF9wYXRoID0gZlwmIzM0Oy9zeXMvY2xhc3MvbmV0L3tjZmcuaWZuYW1lfS9ncm9fZmx1c2hfdGltZW91dFwmIzM0O1xuICAgICAgICAgaXJxX3BhdGggPSBmXCYjMzQ7L3N5cy9jbGFzcy9uZXQve2NmZy5pZm5hbWV9L25hcGlfZGVmZXJfaGFyZF9pcnFzXCYjMzQ7XG4gXG4tICAgICAgICBjdGxfZmlsZV93cml0ZShmbHVzaF9wYXRoLCBcJiMzNDsyMDAwMDBcJiMzNDspXG4mIzQzOyAgICAgICAgIyBcJiMzNDtiaWdfdGNwXypcJiMzNDsgdGVzdHMgbmVlZCBhIGxvbmdlciB0aW1lb3V0LCB1c2UgMnggdGhlIHJlZ3VsYXIgdGltZW91dFxuJiM0MzsgICAgICAgIGlmIHRlc3RfbmFtZS5zdGFydHN3aXRoKFwmIzM0O2JpZ190Y3BfXCYjMzQ7KTpcbiYjNDM7ICAgICAgICAgICAgY3RsX2ZpbGVfd3JpdGUoZmx1c2hfcGF0aCwgXCYjMzQ7NDAwMDAwXCYjMzQ7KVxuJiM0MzsgICAgICAgIGVsc2U6XG4mIzQzOyAgICAgICAgICAgIGN0bF9maWxlX3dyaXRlKGZsdXNoX3BhdGgsIFwmIzM0OzIwMDAwMFwmIzM0OylcbiAgICAgICAgIGN0bF9maWxlX3dyaXRlKGlycV9wYXRoLCBcJiMzNDsxMFwmIzM0OylcbiBcbiAgICAgICAgIF9zZXRfZXRodG9vbF9mZWF0KGNmZy5pZm5hbWUsIGNmZy5mZWF0LFxuQEAgLTI4OSw2ICYjNDM7MzI3LDkgQEAgZGVmIF9zZXR1cChjZmcsIG1vZGUsIHRlc3RfbmFtZSk6XG4gICAgIGV4Y2VwdCBLc2Z0WGZhaWxFeDpcbiAgICAgICAgIHBhc3NcbiBcbiYjNDM7ICAgIGlmIHRlc3RfbmFtZS5zdGFydHN3aXRoKFwmIzM0O2JpZ190Y3BfXCYjMzQ7KTpcbiYjNDM7ICAgICAgICBfc2V0X2dyb19zaXplX3Jlc3RvcmUoY2ZnLCBCSUdfVENQX0dST19NQVhfU0laRSlcbiYjNDM7XG4gXG4gZGVmIF9ncm9fdmFyaWFudHMoKTpcbiAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7R2VuZXJhdG9yIHRoYXQgeWllbGRzIGFsbCBjb21iaW5hdGlvbnMgb2YgcHJvdG9jb2wgYW5kIHRlc3QgdHlwZXMuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG5AQCAtMzA0LDYgJiM0MzszNDUsMTEgQEAgZGVmIF9ncm9fdmFyaWFudHMoKTpcbiAgICAgICAgIFwmIzM0O2xhcmdlX21heFwmIzM0OywgXCYjMzQ7bGFyZ2VfcmVtXCYjMzQ7LFxuICAgICBdXG4gXG4mIzQzOyAgICBiaWdfdGNwX3Rlc3RzID0gW1xuJiM0MzsgICAgICAgIFwmIzM0O2JpZ190Y3BfZGF0YV9zYW1lXCYjMzQ7LCBcJiMzNDtiaWdfdGNwX2RhdGFfbHJnX3NtbFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtiaWdfdGNwX3RjcF9zZXFcJiMzNDssIFwmIzM0O2JpZ190Y3BfbGFyZ2VfbWF4XCYjMzQ7LFxuJiM0MzsgICAgXVxuJiM0MztcbiAgICAgIyBUZXN0cyBzcGVjaWZpYyB0byBJUHY0XG4gICAgIGlwdjRfdGVzdHMgPSBbXG4gICAgICAgICBcJiMzNDtpcF9jc3VtXCYjMzQ7LFxuQEAgLTMyMiw2ICYjNDM7MzY4LDEwIEBAIGRlZiBfZ3JvX3ZhcmlhbnRzKCk6XG4gICAgICAgICBmb3IgdGVzdF9uYW1lIGluIGNvbW1vbl90ZXN0czpcbiAgICAgICAgICAgICB5aWVsZCBwcm90b2NvbCwgdGVzdF9uYW1lXG4gXG4mIzQzOyAgICAgICAgaWYgcHJvdG9jb2wgaW4gW1wmIzM0O2lwdjRcJiMzNDssIFwmIzM0O2lwdjZcJiMzNDtdOlxuJiM0MzsgICAgICAgICAgICBmb3IgdGVzdF9uYW1lIGluIGJpZ190Y3BfdGVzdHM6XG4mIzQzOyAgICAgICAgICAgICAgICB5aWVsZCBwcm90b2NvbCwgdGVzdF9uYW1lXG4mIzQzO1xuICAgICAgICAgaWYgcHJvdG9jb2wgaW4gW1wmIzM0O2lwdjRcJiMzNDssIFwmIzM0O2lwaXBcJiMzNDtdOlxuICAgICAgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gaXB2NF90ZXN0czpcbiAgICAgICAgICAgICAgICAgeWllbGQgcHJvdG9jb2wsIHRlc3RfbmFtZVxuQEAgLTM1OCw3ICYjNDM7NDA4LDggQEAgZGVmIHJ1bl90ZXN0KGNmZywgbW9kZSwgcHJvdG9jb2wsIHRlc3RfbmFtZSk6XG4gICAgICAgICBpZiByeF9wcm9jLnJldCA9PSA0MjpcbiAgICAgICAgICAgICByYWlzZSBLc2Z0RmFpbEV4KGZcJiMzNDtHUk8gb3Zlci1jb2FsZXNjZWQgaW4ge3Byb3RvY29sfS97dGVzdF9uYW1lfVwmIzM0OylcbiBcbi0gICAgICAgIGlmIHRlc3RfbmFtZS5zdGFydHN3aXRoKFwmIzM0O2xhcmdlX1wmIzM0OykgYW5kIG9zLmVudmlyb24uZ2V0KFwmIzM0O0tTRlRfTUFDSElORV9TTE9XXCYjMzQ7KTpcbiYjNDM7ICAgICAgICBpZiAodGVzdF9uYW1lLnN0YXJ0c3dpdGgoKFwmIzM0O2xhcmdlX1wmIzM0OywgXCYjMzQ7YmlnX3RjcF9cJiMzNDspKSBhbmRcbiYjNDM7ICAgICAgICAgICAgICAgIG9zLmVudmlyb24uZ2V0KFwmIzM0O0tTRlRfTUFDSElORV9TTE9XXCYjMzQ7KSk6XG4gICAgICAgICAgICAga3NmdF9wcihmXCYjMzQ7SWdub3Jpbmcge3Byb3RvY29sfS97dGVzdF9uYW1lfSBmYWlsdXJlIGR1ZSB0byBzbG93IGVudmlyb25tZW50XCYjMzQ7KVxuICAgICAgICAgICAgIHJldHVyblxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jXG5pbmRleCA3YTMzMzE1NWRlMWFiLi43MGIwZGViM2MxMWZhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uY1xuQEAgLTQ2LDYgJiM0Mzs0NiwxMiBAQFxuICAqICAgLSBsYXJnZV9tYXg6IGV4Y2VlZGluZyBtYXggc2l6ZVxuICAqICAgLSBsYXJnZV9yZW06IHJlbWFpbmRlciBoYW5kbGluZ1xuICAqXG4mIzQzOyAqIGJpZ190Y3BfKjpcbiYjNDM7ICogICAtIGJpZ190Y3BfZGF0YV9zYW1lOiAgICBlcXVhbCBzZWdtZW50cyBjb2FsZXNjaW5nIHBhc3QgSVBfTUFYUEFDS0VUXG4mIzQzOyAqICAgLSBiaWdfdGNwX2RhdGFfbHJnX3NtbDogYSBzbWFsbGVyIGZpbmFsIHNlZ21lbnQgY2FycnlpbmcgaXQgb3ZlclxuJiM0MzsgKiAgIC0gYmlnX3RjcF90Y3Bfc2VxOiAgICAgIDE2LWJpdCB0cnVuY2F0ZWQgc2VxdWVuY2UgbnVtYmVyIG11c3Qgbm90IGNvYWxlc2NlXG4mIzQzOyAqICAgLSBiaWdfdGNwX2xhcmdlX21heDogICAgY29hbGVzY2luZyBzdG9wcyBhdCB0aGUgY29uZmlndXJlZCBsaW1pdFxuJiM0MzsgKlxuICAqIHNpbmdsZSwgY2FwYWNpdHk6XG4gICogIEJvcmluZyBjYXNlcyB1c2VkIHRvIHRlc3QgY29hbGVzY2luZyBtYWNoaW5lcnkgaXRzZWxmIGFuZCBzdGF0c1xuICAqICBtb3JlIHRoYW4gcHJvdG9jb2wgYmVoYXZpb3IuXG5AQCAtMTEwLDYgJiM0MzsxMTYsMTYgQEBcbiBcbiAjZGVmaW5lIEVYSVRfT1ZFUl9DT0FMRVNDRVx0NDJcbiBcbiYjNDM7LyogTXVzdCBtYXRjaCBCSUdfVENQX0dST19NQVhfU0laRSBpbiBncm9fbGliLnB5LiAqL1xuJiM0MzsjZGVmaW5lIEJJR19UQ1BfR1JPX01BWF9TSVpFXHQxMjgwMDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQklHX1RDUF9SRUNWX0JVRl9MRU4gXFxcbiYjNDM7XHQoQklHX1RDUF9HUk9fTUFYX1NJWkUgJiM0MzsgTUFYX01TUyAmIzQzOyBMMl9ITEVOX01BWClcbiYjNDM7I2RlZmluZSBCSUdfVENQX01JTl9NU1NcdFx0KEFTU1VNRURfTVRVIC0gKE1BWF9IRFJfTEVOIC0gRVRIX0hMRU4pKVxuJiM0MzsjZGVmaW5lIEJJR19UQ1BfTUFYX0ZJTExfQ05UIFxcXG4mIzQzO1x0KChpbnQpKChCSUdfVENQX0dST19NQVhfU0laRSAtIDEgLSAoTUFYX0hEUl9MRU4gLSBFVEhfSExFTikpIC8gXFxcbiYjNDM7XHQgICAgICAgQklHX1RDUF9NSU5fTVNTKSlcbiYjNDM7XG4gI2RlZmluZSBpcHY2X29wdGxlbihwKSAgKCgocCktXHUwMDNlaGRybGVuJiM0MzsxKSBcdTAwM2NcdTAwM2MgMykgLyogY2FsY3VsYXRlIElQdjYgZXh0ZW5zaW9uIGhlYWRlciBsZW4gKi9cbiAjZGVmaW5lIEJVSUxEX0JVR19PTihjb25kaXRpb24pICgodm9pZClzaXplb2YoY2hhclsxIC0gMiohIShjb25kaXRpb24pXSkpXG4gXG5AQCAtMTY2LDYgJiM0MzsxODIsMjcgQEAgc3RhdGljIGludCBudW1fbGFyZ2VfcGt0KHZvaWQpXG4gXHRyZXR1cm4gbWF4X3BheWxvYWQoKSAvIGNhbGNfbXNzKCk7XG4gfVxuIFxuJiM0MzsvKiBIb3cgbWFueSBtYXhpbXVtIHNpemVkIHNlZ21lbnRzIGZpdCB1bmRlciB0aGUgY29uZmlndXJlZCBsaW1pdC4gKi9cbiYjNDM7c3RhdGljIGludCBiaWdfdGNwX2xhcmdlX2NudCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIChCSUdfVENQX0dST19NQVhfU0laRSAtIDEgLSAodG90YWxfaGRyX2xlbiAtIEVUSF9ITEVOKSkgL1xuJiM0MztcdCAgICAgICBjYWxjX21zcygpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBIb3cgbWFueSBjYWxjX21zcygpIHNpemVkIHNlZ21lbnRzIGFyZSBuZWVkZWQgdG8gc2F0aXNmeSB0aGVcbiYjNDM7ICogZm9sbG93aW5nIGNvbmRpdGlvbjpcbiYjNDM7ICogcGt0X2NvdW50ICogY2FsY19tc3MoKSBcdTAwM2MgSVBfTUFYUEFDS0VUIFx1MDAzYyAocGt0X2NvdW50ICYjNDM7IDEpICogY2FsY19tc3MoKVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBiaWdfdGNwX2ZpbGxfY250KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gSVBfTUFYUEFDS0VUIC8gY2FsY19tc3MoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBiaWdfdGNwX2ZpbGxfbGVuKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYmlnX3RjcF9maWxsX2NudCgpICogY2FsY19tc3MoKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB2bG9nKGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIHtcbiBcdHZhX2xpc3QgYXJncztcbkBAIC01NjAsNiAmIzQzOzU5Nyw2MSBAQCBzdGF0aWMgdm9pZCBzZW5kX2RhdGFfcGt0cyhpbnQgZmQsIHN0cnVjdCBzb2NrYWRkcl9sbCAqZGFkZHIsXG4gXHR3cml0ZV9wYWNrZXQoZmQsIGJ1ZiwgdG90YWxfaGRyX2xlbiAmIzQzOyBwYXlsb2FkX2xlbjIsIGRhZGRyKTtcbiB9XG4gXG4mIzQzOy8qIFNlbmQgbnVtX3BrdCBzZWdtZW50cyBvZiBwa3RfbGVuIGJ5dGVzLCB0aGVuIG9uZSBvZiByZW1haW5kZXIgbGVuLiAqL1xuJiM0MztzdGF0aWMgdm9pZCBzZW5kX2JpZ190Y3AoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHJfbGwgKmRhZGRyLCBpbnQgcGt0X2xlbixcbiYjNDM7XHRcdFx0IGludCBudW1fcGt0LCBpbnQgcmVtYWluZGVyKVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIGNoYXIgcGt0c1tCSUdfVENQX01BWF9GSUxMX0NOVF1bTUFYX0hEUl9MRU4gJiM0MzsgTUFYX01TU107XG4mIzQzO1x0c3RhdGljIGNoYXIgbGFzdFtNQVhfSERSX0xFTiAmIzQzOyBNQVhfTVNTXTtcbiYjNDM7XHRjb25zdCBpbnQgZmlsbGVkID0gbnVtX3BrdCAqIHBrdF9sZW47XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmIChudW1fcGt0IFx1MDAzZSBCSUdfVENQX01BWF9GSUxMX0NOVClcbiYjNDM7XHRcdGVycm9yKDEsIDAsIFwmIzM0O25lZWQgJWQgcGFja2V0cywgYXJyYXkgaG9sZHMgJWRcJiMzNDssXG4mIzQzO1x0XHQgICAgICBudW1fcGt0LCBCSUdfVENQX01BWF9GSUxMX0NOVCk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9wa3Q7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0Y3JlYXRlX3BhY2tldChwa3RzW2ldLCBpICogcGt0X2xlbiwgMCwgcGt0X2xlbiwgMCk7XG4mIzQzO1x0Y3JlYXRlX3BhY2tldChsYXN0LCBmaWxsZWQsIDAsIHJlbWFpbmRlciwgMCk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9wa3Q7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0d3JpdGVfcGFja2V0KGZkLCBwa3RzW2ldLCB0b3RhbF9oZHJfbGVuICYjNDM7IHBrdF9sZW4sIGRhZGRyKTtcbiYjNDM7XHR3cml0ZV9wYWNrZXQoZmQsIGxhc3QsIHRvdGFsX2hkcl9sZW4gJiM0MzsgcmVtYWluZGVyLCBkYWRkcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEluIEJJRyBUQ1AgY29uZmlndXJhdGlvbiwgdGhlIHRvdGFsIGFnZ3JlZ2F0ZSBsZW5ndGggY2FuXG4mIzQzOyAqIGJlIGdyZWF0ZXIgdGhhbiB0aGUgbGVnYWN5IElQX01BWFBBQ0tFVC4gU2luY2UgdGhlIGFnZ3JlZ2F0ZVxuJiM0MzsgKiBsZW5ndGggaXMgdXNlZCBpbiBjYWxjdWxhdGluZyB0aGUgc2VxdWVuY2UgbnVtYmVycyxcbiYjNDM7ICogc2VuZCBhIHBhY2tldCB3aXRoIGEgc2VxdWVuY2UgbnVtYmVyIHRoYXQgZGlmZmVycyBieSBJUF9NQVhQQUNLRVQgJiM0MzsgMSxcbiYjNDM7ICogdG8gdGVzdCBhZ2FpbnN0IHRydW5jYXRpb24gYnVncy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHNlbmRfYmlnX3RjcF9iYWRfc2VxKGludCBmZCwgc3RydWN0IHNvY2thZGRyX2xsICpkYWRkcilcbiYjNDM7e1xuJiM0MztcdHN0YXRpYyBjaGFyIHBrdHNbQklHX1RDUF9NQVhfRklMTF9DTlRdW01BWF9IRFJfTEVOICYjNDM7IE1BWF9NU1NdO1xuJiM0MztcdGNvbnN0IGludCBudW1fcGt0ID0gYmlnX3RjcF9maWxsX2NudCgpICYjNDM7IDE7XG4mIzQzO1x0c3RhdGljIGNoYXIgbGFzdFtNQVhfSERSX0xFTiAmIzQzOyBNQVhfTVNTXTtcbiYjNDM7XHRjb25zdCBpbnQgcGt0X2xlbiA9IGNhbGNfbXNzKCk7XG4mIzQzO1x0aW50IGJhZF9zZXE7XG4mIzQzO1x0aW50IGZpbGxlZDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0ZmlsbGVkID0gbnVtX3BrdCAqIHBrdF9sZW47XG4mIzQzO1x0LyogTG93IDE2IGJpdHMgbWF0Y2ggd2l0aCB0aGUgY29ycmVjdCBpbmNvbWluZyBzZXF1ZW5jZSBudW1iZXIuICovXG4mIzQzO1x0YmFkX3NlcSA9IGZpbGxlZCAtIChJUF9NQVhQQUNLRVQgJiM0MzsgMSk7XG4mIzQzO1xuJiM0MztcdGlmIChudW1fcGt0IFx1MDAzZSBCSUdfVENQX01BWF9GSUxMX0NOVClcbiYjNDM7XHRcdGVycm9yKDEsIDAsIFwmIzM0O25lZWQgJWQgcGFja2V0cywgYXJyYXkgaG9sZHMgJWRcJiMzNDssXG4mIzQzO1x0XHQgICAgICBudW1fcGt0LCBCSUdfVENQX01BWF9GSUxMX0NOVCk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9wa3Q7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0Y3JlYXRlX3BhY2tldChwa3RzW2ldLCBpICogcGt0X2xlbiwgMCwgcGt0X2xlbiwgMCk7XG4mIzQzO1x0Y3JlYXRlX3BhY2tldChsYXN0LCBiYWRfc2VxLCAwLCBwa3RfbGVuLCAwKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3BrdDsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHR3cml0ZV9wYWNrZXQoZmQsIHBrdHNbaV0sIHRvdGFsX2hkcl9sZW4gJiM0MzsgcGt0X2xlbiwgZGFkZHIpO1xuJiM0MztcdHdyaXRlX3BhY2tldChmZCwgbGFzdCwgdG90YWxfaGRyX2xlbiAmIzQzOyBwa3RfbGVuLCBkYWRkcik7XG4mIzQzO31cbiYjNDM7XG4gLyogSWYgaW5jb21pbmcgc2VnbWVudHMgbWFrZSB0cmFja2VkIHNlZ21lbnQgbGVuZ3RoIGV4Y2VlZFxuICAqIGxlZ2FsIElQIGRhdGFncmFtIGxlbmd0aCwgZG8gbm90IGNvYWxlc2NlXG4gICovXG5AQCAtMTE2MSw3ICYjNDM7MTI1Myw3IEBAIHN0YXRpYyB2b2lkIHJlY3ZfZXJyb3IoaW50IGZkLCBpbnQgcmN2X2Vycm5vKVxuIHN0YXRpYyB2b2lkIGNoZWNrX3JlY3ZfcGt0cyhpbnQgZmQsIGludCAqY29ycmVjdF9wYXlsb2FkLFxuIFx0XHRcdCAgICBpbnQgY29ycmVjdF9udW1fcGt0cylcbiB7XG4tXHRzdGF0aWMgY2hhciBidWZmZXJbSVBfTUFYUEFDS0VUICYjNDM7IEwyX0hMRU5fTUFYICYjNDM7IDFdO1xuJiM0MztcdHN0YXRpYyBjaGFyIGJ1ZmZlcltCSUdfVENQX1JFQ1ZfQlVGX0xFTl07XG4gXHRpbnQgbmhvZmYgPSBFVEhfSExFTiAmIzQzOyAocHBwb2UgPyBQUFBPRV9TRVNfSExFTiA6IDApO1xuIFx0c3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopKGJ1ZmZlciAmIzQzOyBuaG9mZik7XG4gXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShidWZmZXIgJiM0MzsgbmhvZmYpO1xuQEAgLTE1NDEsNiAmIzQzOzE2MzMsMjUgQEAgc3RhdGljIHZvaWQgZ3JvX3NlbmRlcih2b2lkKVxuIFx0XHRzZW5kX2xhcmdlKHR4ZmQsIFx1MDAyNmRhZGRyLCByZW1haW5kZXIgJiM0MzsgMSk7XG4gXHRcdHdyaXRlX3BhY2tldCh0eGZkLCBmaW5fcGt0LCB0b3RhbF9oZHJfbGVuLCBcdTAwMjZkYWRkcik7XG4gXG4mIzQzO1x0LyogYmlnIHRjcCBzdWItdGVzdHMgKi9cbiYjNDM7XHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXCYjMzQ7YmlnX3RjcF9kYXRhX3NhbWVcJiMzNDspID09IDApIHtcbiYjNDM7XHRcdHNlbmRfYmlnX3RjcCh0eGZkLCBcdTAwMjZkYWRkciwgY2FsY19tc3MoKSwgYmlnX3RjcF9maWxsX2NudCgpLFxuJiM0MztcdFx0XHQgICAgIGNhbGNfbXNzKCkpO1xuJiM0MztcdFx0d3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sIFx1MDAyNmRhZGRyKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXCYjMzQ7YmlnX3RjcF9kYXRhX2xyZ19zbWxcJiMzNDspID09IDApIHtcbiYjNDM7XHRcdGludCByZW1haW5kZXIgPSBjYWxjX21zcygpIC8gMjtcbiYjNDM7XG4mIzQzO1x0XHRzZW5kX2JpZ190Y3AodHhmZCwgXHUwMDI2ZGFkZHIsIGNhbGNfbXNzKCksIGJpZ190Y3BfZmlsbF9jbnQoKSxcbiYjNDM7XHRcdFx0ICAgICByZW1haW5kZXIpO1xuJiM0MztcdFx0d3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sIFx1MDAyNmRhZGRyKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXCYjMzQ7YmlnX3RjcF90Y3Bfc2VxXCYjMzQ7KSA9PSAwKSB7XG4mIzQzO1x0XHRzZW5kX2JpZ190Y3BfYmFkX3NlcSh0eGZkLCBcdTAwMjZkYWRkcik7XG4mIzQzO1x0XHR3cml0ZV9wYWNrZXQodHhmZCwgZmluX3BrdCwgdG90YWxfaGRyX2xlbiwgXHUwMDI2ZGFkZHIpO1xuJiM0MztcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcJiMzNDtiaWdfdGNwX2xhcmdlX21heFwmIzM0OykgPT0gMCkge1xuJiM0MztcdFx0c2VuZF9iaWdfdGNwKHR4ZmQsIFx1MDAyNmRhZGRyLCBjYWxjX21zcygpLCBiaWdfdGNwX2xhcmdlX2NudCgpLFxuJiM0MztcdFx0XHQgICAgIGNhbGNfbXNzKCkpO1xuJiM0MztcdFx0d3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sIFx1MDAyNmRhZGRyKTtcbiYjNDM7XG4gXHQvKiBtYWNoaW5lcnkgc3ViLXRlc3RzICovXG4gXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXCYjMzQ7c2luZ2xlXCYjMzQ7KSA9PSAwKSB7XG4gXHRcdHN0YXRpYyBjaGFyIGJ1ZltNQVhfSERSX0xFTiAmIzQzOyBQQVlMT0FEX0xFTl07XG5AQCAtMTc2OCw2ICYjNDM7MTg3OSwyNiBAQCBzdGF0aWMgdm9pZCBncm9fcmVjZWl2ZXIodm9pZClcbiBcdFx0cHJpbnRmKFwmIzM0O2xhc3Qgc2VnbWVudCBzZW50IGluZGl2aWR1YWxseTogXCYjMzQ7KTtcbiBcdFx0Y2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMyk7XG4gXG4mIzQzO1x0LyogYmlnIHRjcCBzdWItdGVzdHMgKi9cbiYjNDM7XHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXCYjMzQ7YmlnX3RjcF9kYXRhX3NhbWVcJiMzNDspID09IDApIHtcbiYjNDM7XHRcdGNvcnJlY3RfcGF5bG9hZFswXSA9IGJpZ190Y3BfZmlsbF9sZW4oKSAmIzQzOyBjYWxjX21zcygpO1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0O2RhdGEgcGFja2V0cyBvZiBzYW1lIHNpemUgcGFzdCBJUF9NQVhQQUNLRVQ6IFwmIzM0Oyk7XG4mIzQzO1x0XHRjaGVja19yZWN2X3BrdHMocnhmZCwgY29ycmVjdF9wYXlsb2FkLCAxKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXCYjMzQ7YmlnX3RjcF9kYXRhX2xyZ19zbWxcJiMzNDspID09IDApIHtcbiYjNDM7XHRcdGNvcnJlY3RfcGF5bG9hZFswXSA9IGJpZ190Y3BfZmlsbF9sZW4oKSAmIzQzOyBjYWxjX21zcygpIC8gMjtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDtzbWFsbGVyIGxhc3QgcGFja2V0IHBhc3QgSVBfTUFYUEFDS0VUOiBcJiMzNDspO1xuJiM0MztcdFx0Y2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMSk7XG4mIzQzO1x0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFwmIzM0O2JpZ190Y3BfdGNwX3NlcVwmIzM0OykgPT0gMCkge1xuJiM0MztcdFx0Y29ycmVjdF9wYXlsb2FkWzBdID0gKGJpZ190Y3BfZmlsbF9jbnQoKSAmIzQzOyAxKSAqIGNhbGNfbXNzKCk7XG4mIzQzO1x0XHRjb3JyZWN0X3BheWxvYWRbMV0gPSBjYWxjX21zcygpO1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0O2FsaWFzZWQgc2VxIHBhc3QgSVBfTUFYUEFDS0VUIGRvZXNuJiMzOTt0IGNvYWxlc2NlOiBcJiMzNDspO1xuJiM0MztcdFx0Y2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMik7XG4mIzQzO1x0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFwmIzM0O2JpZ190Y3BfbGFyZ2VfbWF4XCYjMzQ7KSA9PSAwKSB7XG4mIzQzO1x0XHRjb3JyZWN0X3BheWxvYWRbMF0gPSBiaWdfdGNwX2xhcmdlX2NudCgpICogY2FsY19tc3MoKTtcbiYjNDM7XHRcdGNvcnJlY3RfcGF5bG9hZFsxXSA9IGNhbGNfbXNzKCk7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7c2hvdWxkbiYjMzk7dCBjb2FsZXNjZSBwYXN0IGdyb19tYXhfc2l6ZTogXCYjMzQ7KTtcbiYjNDM7XHRcdGNoZWNrX3JlY3ZfcGt0cyhyeGZkLCBjb3JyZWN0X3BheWxvYWQsIDIpO1xuJiM0MztcbiBcdC8qIG1hY2hpbmVyeSBzdWItdGVzdHMgKi9cbiBcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcJiMzNDtzaW5nbGVcJiMzNDspID09IDApIHtcbiBcdFx0cHJpbnRmKFwmIzM0O3NpbmdsZSBkYXRhIHBhY2tldDogXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwNjoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weSBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYykgdG8gYWRkIEJJRyBUQ1AgR1JPIHRlc3QgY2FzZXMuIE5vIGtlcm5lbC1zcGFjZSBjb2RlIG9yIGNvbXBpbGVkIGtlcm5lbCBhcnRpZmFjdHMgKHZtbGludXggb3Iga2VybmVsIG1vZHVsZXMpIGFyZSBtb2RpZmllZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5ZDE5ZTNiNTIyNDNmOGYyMGVlMjNjNzliZWU0MWQ5ODE2NmMwOTcwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMDY6MjE6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weQppbmRleCBiN2FjMDY2MGFkYzAxLi5hYmVjZjYwYmFhNTM3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkKQEAgLTQwLDEzICYjNDM7NDAsMTcgQEAgVGVzdCBjYXNlczoKICAgLSBpcF92NmV4dF9kaWZmOiAoSVB2NikgSVB2NiBleHQgaGVhZGVyIHdpdGggZGlmZmVyZW50IHBheWxvYWQgZG9lc24mIzM5O3QgY29hbGVzY2UKICAgLSBsYXJnZV9tYXg6IFBhY2tldHMgZXhjZWVkaW5nIEdST19NQVhfU0laRSBkb24mIzM5O3QgY29hbGVzY2UKICAgLSBsYXJnZV9yZW06IExhcmdlIHBhY2tldCByZW1haW5kZXIgaGFuZGxpbmcKJiM0MzsgIC0gYmlnX3RjcF9kYXRhX3NhbWU6IFNhbWUgc2l6ZSBwYWNrZXRzIGNvYWxlc2NlIHBhc3QgSVBfTUFYUEFDS0VUCiYjNDM7ICAtIGJpZ190Y3BfZGF0YV9scmdfc21sOiBTbWFsbGVyIGxhc3QgcGFja2V0IGNvYWxlc2NlcyBwYXN0IElQX01BWFBBQ0tFVAomIzQzOyAgLSBiaWdfdGNwX3RjcF9zZXE6IFBhY2tldHMgd2l0aCAxNi1iaXQgdHJ1bmNhdGVkIHNlcW5vIGRvbiYjMzk7dCBjb2FsZXNjZQomIzQzOyAgLSBiaWdfdGNwX2xhcmdlX21heDogUGFja2V0cyBleGNlZWRpbmcgdGhlIEJJRyBUQ1AgbGltaXQgZG9uJiMzOTt0IGNvYWxlc2NlCiAmIzM0OyYjMzQ7JiMzNDsKIAogaW1wb3J0IGdsb2IKIGltcG9ydCBvcwogaW1wb3J0IHJlCi1mcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXhpdCwga3NmdF9wcgotZnJvbSBsaWIucHkgaW1wb3J0IE5ldERydkVwRW52LCBLc2Z0RmFpbEV4LCBLc2Z0WGZhaWxFeAomIzQzO2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X3J1biwga3NmdF9leGl0LCBrc2Z0X3ByLCBrc2Z0X2VxCiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IE5ldERydkVwRW52LCBLc2Z0RmFpbEV4LCBLc2Z0U2tpcEV4LCBLc2Z0WGZhaWxFeAogZnJvbSBsaWIucHkgaW1wb3J0IE5ldGRldkZhbWlseSwgRXRodG9vbEZhbWlseQogZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgY21kLCBjdGxfZmlsZV93cml0ZSwgZGVmZXIsIGV0aHRvb2wsIGlwCiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF92YXJpYW50cywgS3NmdE5hbWVkVmFyaWFudApAQCAtNTUsNiAmIzQzOzU5LDggQEAgZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfdmFyaWFudHMsIEtzZnROYW1lZFZhcmlhbnQKICMgZ3JvLmMgdXNlcyBoYXJkY29kZWQgRFBPUlQ9ODAwMAogR1JPX0RQT1JUID0gODAwMAogCiYjNDM7QklHX1RDUF9HUk9fTUFYX1NJWkUgPSAxMjgwMDAKJiM0MzsKIAogZGVmIF9yZXNvbHZlX2RtYWMoY2ZnLCBpcHZlcik6CiAgICAgJiMzNDsmIzM0OyYjMzQ7CkBAIC05MSw2ICYjNDM7OTcsMzQgQEAgZGVmIF9zZXRfbXR1X3Jlc3RvcmUoZGV2LCBtdHUsIGhvc3QpOgogICAgICAgICBkZWZlcihpcCwgZiYjMzQ7bGluayBzZXQgZGV2IHtkZXZbJiMzOTtpZm5hbWUmIzM5O119IG10dSB7ZGV2WyYjMzk7bXR1JiMzOTtdfSYjMzQ7LCBob3N0PWhvc3QpCiAKIAomIzQzO2RlZiBfc2V0X2dyb19zaXplX3Jlc3RvcmUoY2ZnLCBzaXplKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIFNldCB0aGUgbG9jYWwgZGV2aWNlJiMzOTtzIEdSTyBzaXplIGxpbWl0cywgdGhlbiBjb25maXJtIHRoZXkgc3R1Y2suCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICBfc2V0X210dV9yZXN0b3JlKGNmZy5kZXYsIDQwOTYsIE5vbmUpCiYjNDM7ICAgIF9zZXRfbXR1X3Jlc3RvcmUoY2ZnLnJlbW90ZV9kZXYsIDQwOTYsIGNmZy5yZW1vdGUpCiYjNDM7CiYjNDM7ICAgIGlmICYjMzQ7Z3JvX21heF9zaXplJiMzNDsgbm90IGluIGNmZy5kZXYgb3IgJiMzNDtncm9faXB2NF9tYXhfc2l6ZSYjMzQ7IG5vdCBpbiBjZmcuZGV2OgomIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM0O2lwcm91dGUyIGRvZXMgbm90IHJlcG9ydCB0aGUgR1JPIHNpemUgbGltaXRzJiMzNDspCiYjNDM7CiYjNDM7ICAgIGlmIChjZmcuZGV2WyYjMzQ7Z3JvX21heF9zaXplJiMzNDtdID09IHNpemUgYW5kCiYjNDM7ICAgICAgICAgICAgY2ZnLmRldlsmIzM0O2dyb19pcHY0X21heF9zaXplJiMzNDtdID09IHNpemUpOgomIzQzOyAgICAgICAgcmV0dXJuCiYjNDM7CiYjNDM7ICAgIG9sZCA9IChmJiMzNDtncm9fbWF4X3NpemUge2NmZy5kZXZbJiMzOTtncm9fbWF4X3NpemUmIzM5O119ICYjMzQ7CiYjNDM7ICAgICAgICAgICBmJiMzNDtncm9faXB2NF9tYXhfc2l6ZSB7Y2ZnLmRldlsmIzM5O2dyb19pcHY0X21heF9zaXplJiMzOTtdfSYjMzQ7KQomIzQzOyAgICBuZXcgPSBmJiMzNDtncm9fbWF4X3NpemUge3NpemV9IGdyb19pcHY0X21heF9zaXplIHtzaXplfSYjMzQ7CiYjNDM7CiYjNDM7ICAgIGlwKGYmIzM0O2xpbmsgc2V0IGRldiB7Y2ZnLmlmbmFtZX0ge25ld30mIzM0OykKJiM0MzsgICAgZGVmZXIoaXAsIGYmIzM0O2xpbmsgc2V0IGRldiB7Y2ZnLmlmbmFtZX0ge29sZH0mIzM0OykKJiM0MzsKJiM0MzsgICAgZGV2ID0gaXAoJiMzNDstZCBsaW5rIHNob3cgZGV2ICYjMzQ7ICYjNDM7IGNmZy5pZm5hbWUsIGpzb249VHJ1ZSlbMF0KJiM0MzsgICAga3NmdF9lcShkZXZbJiMzNDtncm9fbWF4X3NpemUmIzM0O10sIHNpemUsIGNvbW1lbnQ9JiMzNDtncm9fbWF4X3NpemUgbm90IGFwcGxpZWQmIzM0OykKJiM0MzsgICAga3NmdF9lcShkZXZbJiMzNDtncm9faXB2NF9tYXhfc2l6ZSYjMzQ7XSwgc2l6ZSwKJiM0MzsgICAgICAgICAgICBjb21tZW50PSYjMzQ7Z3JvX2lwdjRfbWF4X3NpemUgbm90IGFwcGxpZWQmIzM0OykKJiM0MzsKJiM0MzsKIGRlZiBfc2V0X2V0aHRvb2xfZmVhdChkZXYsIGN1cnJlbnQsIGZlYXRzLCBob3N0PU5vbmUpOgogICAgIHMybiA9IHtUcnVlOiAmIzM0O29uJiMzNDssIEZhbHNlOiAmIzM0O29mZiYjMzQ7fQogCkBAIC0yMzksNyAmIzQzOzI3MywxMSBAQCBkZWYgX3NldHVwKGNmZywgbW9kZSwgdGVzdF9uYW1lKToKICAgICAgICAgZmx1c2hfcGF0aCA9IGYmIzM0Oy9zeXMvY2xhc3MvbmV0L3tjZmcuaWZuYW1lfS9ncm9fZmx1c2hfdGltZW91dCYjMzQ7CiAgICAgICAgIGlycV9wYXRoID0gZiYjMzQ7L3N5cy9jbGFzcy9uZXQve2NmZy5pZm5hbWV9L25hcGlfZGVmZXJfaGFyZF9pcnFzJiMzNDsKIAotICAgICAgICBjdGxfZmlsZV93cml0ZShmbHVzaF9wYXRoLCAmIzM0OzIwMDAwMCYjMzQ7KQomIzQzOyAgICAgICAgIyAmIzM0O2JpZ190Y3BfKiYjMzQ7IHRlc3RzIG5lZWQgYSBsb25nZXIgdGltZW91dCwgdXNlIDJ4IHRoZSByZWd1bGFyIHRpbWVvdXQKJiM0MzsgICAgICAgIGlmIHRlc3RfbmFtZS5zdGFydHN3aXRoKCYjMzQ7YmlnX3RjcF8mIzM0Oyk6CiYjNDM7ICAgICAgICAgICAgY3RsX2ZpbGVfd3JpdGUoZmx1c2hfcGF0aCwgJiMzNDs0MDAwMDAmIzM0OykKJiM0MzsgICAgICAgIGVsc2U6CiYjNDM7ICAgICAgICAgICAgY3RsX2ZpbGVfd3JpdGUoZmx1c2hfcGF0aCwgJiMzNDsyMDAwMDAmIzM0OykKICAgICAgICAgY3RsX2ZpbGVfd3JpdGUoaXJxX3BhdGgsICYjMzQ7MTAmIzM0OykKIAogICAgICAgICBfc2V0X2V0aHRvb2xfZmVhdChjZmcuaWZuYW1lLCBjZmcuZmVhdCwKQEAgLTI4OSw2ICYjNDM7MzI3LDkgQEAgZGVmIF9zZXR1cChjZmcsIG1vZGUsIHRlc3RfbmFtZSk6CiAgICAgZXhjZXB0IEtzZnRYZmFpbEV4OgogICAgICAgICBwYXNzCiAKJiM0MzsgICAgaWYgdGVzdF9uYW1lLnN0YXJ0c3dpdGgoJiMzNDtiaWdfdGNwXyYjMzQ7KToKJiM0MzsgICAgICAgIF9zZXRfZ3JvX3NpemVfcmVzdG9yZShjZmcsIEJJR19UQ1BfR1JPX01BWF9TSVpFKQomIzQzOwogCiBkZWYgX2dyb192YXJpYW50cygpOgogICAgICYjMzQ7JiMzNDsmIzM0O0dlbmVyYXRvciB0aGF0IHlpZWxkcyBhbGwgY29tYmluYXRpb25zIG9mIHByb3RvY29sIGFuZCB0ZXN0IHR5cGVzLiYjMzQ7JiMzNDsmIzM0OwpAQCAtMzA0LDYgJiM0MzszNDUsMTEgQEAgZGVmIF9ncm9fdmFyaWFudHMoKToKICAgICAgICAgJiMzNDtsYXJnZV9tYXgmIzM0OywgJiMzNDtsYXJnZV9yZW0mIzM0OywKICAgICBdCiAKJiM0MzsgICAgYmlnX3RjcF90ZXN0cyA9IFsKJiM0MzsgICAgICAgICYjMzQ7YmlnX3RjcF9kYXRhX3NhbWUmIzM0OywgJiMzNDtiaWdfdGNwX2RhdGFfbHJnX3NtbCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtiaWdfdGNwX3RjcF9zZXEmIzM0OywgJiMzNDtiaWdfdGNwX2xhcmdlX21heCYjMzQ7LAomIzQzOyAgICBdCiYjNDM7CiAgICAgIyBUZXN0cyBzcGVjaWZpYyB0byBJUHY0CiAgICAgaXB2NF90ZXN0cyA9IFsKICAgICAgICAgJiMzNDtpcF9jc3VtJiMzNDssCkBAIC0zMjIsNiAmIzQzOzM2OCwxMCBAQCBkZWYgX2dyb192YXJpYW50cygpOgogICAgICAgICBmb3IgdGVzdF9uYW1lIGluIGNvbW1vbl90ZXN0czoKICAgICAgICAgICAgIHlpZWxkIHByb3RvY29sLCB0ZXN0X25hbWUKIAomIzQzOyAgICAgICAgaWYgcHJvdG9jb2wgaW4gWyYjMzQ7aXB2NCYjMzQ7LCAmIzM0O2lwdjYmIzM0O106CiYjNDM7ICAgICAgICAgICAgZm9yIHRlc3RfbmFtZSBpbiBiaWdfdGNwX3Rlc3RzOgomIzQzOyAgICAgICAgICAgICAgICB5aWVsZCBwcm90b2NvbCwgdGVzdF9uYW1lCiYjNDM7CiAgICAgICAgIGlmIHByb3RvY29sIGluIFsmIzM0O2lwdjQmIzM0OywgJiMzNDtpcGlwJiMzNDtdOgogICAgICAgICAgICAgZm9yIHRlc3RfbmFtZSBpbiBpcHY0X3Rlc3RzOgogICAgICAgICAgICAgICAgIHlpZWxkIHByb3RvY29sLCB0ZXN0X25hbWUKQEAgLTM1OCw3ICYjNDM7NDA4LDggQEAgZGVmIHJ1bl90ZXN0KGNmZywgbW9kZSwgcHJvdG9jb2wsIHRlc3RfbmFtZSk6CiAgICAgICAgIGlmIHJ4X3Byb2MucmV0ID09IDQyOgogICAgICAgICAgICAgcmFpc2UgS3NmdEZhaWxFeChmJiMzNDtHUk8gb3Zlci1jb2FsZXNjZWQgaW4ge3Byb3RvY29sfS97dGVzdF9uYW1lfSYjMzQ7KQogCi0gICAgICAgIGlmIHRlc3RfbmFtZS5zdGFydHN3aXRoKCYjMzQ7bGFyZ2VfJiMzNDspIGFuZCBvcy5lbnZpcm9uLmdldCgmIzM0O0tTRlRfTUFDSElORV9TTE9XJiMzNDspOgomIzQzOyAgICAgICAgaWYgKHRlc3RfbmFtZS5zdGFydHN3aXRoKCgmIzM0O2xhcmdlXyYjMzQ7LCAmIzM0O2JpZ190Y3BfJiMzNDspKSBhbmQKJiM0MzsgICAgICAgICAgICAgICAgb3MuZW52aXJvbi5nZXQoJiMzNDtLU0ZUX01BQ0hJTkVfU0xPVyYjMzQ7KSk6CiAgICAgICAgICAgICBrc2Z0X3ByKGYmIzM0O0lnbm9yaW5nIHtwcm90b2NvbH0ve3Rlc3RfbmFtZX0gZmFpbHVyZSBkdWUgdG8gc2xvdyBlbnZpcm9ubWVudCYjMzQ7KQogICAgICAgICAgICAgcmV0dXJuCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jCmluZGV4IDdhMzMzMTU1ZGUxYWIuLjcwYjBkZWIzYzExZmEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYwpAQCAtNDYsNiAmIzQzOzQ2LDEyIEBACiAgKiAgIC0gbGFyZ2VfbWF4OiBleGNlZWRpbmcgbWF4IHNpemUKICAqICAgLSBsYXJnZV9yZW06IHJlbWFpbmRlciBoYW5kbGluZwogICoKJiM0MzsgKiBiaWdfdGNwXyo6CiYjNDM7ICogICAtIGJpZ190Y3BfZGF0YV9zYW1lOiAgICBlcXVhbCBzZWdtZW50cyBjb2FsZXNjaW5nIHBhc3QgSVBfTUFYUEFDS0VUCiYjNDM7ICogICAtIGJpZ190Y3BfZGF0YV9scmdfc21sOiBhIHNtYWxsZXIgZmluYWwgc2VnbWVudCBjYXJyeWluZyBpdCBvdmVyCiYjNDM7ICogICAtIGJpZ190Y3BfdGNwX3NlcTogICAgICAxNi1iaXQgdHJ1bmNhdGVkIHNlcXVlbmNlIG51bWJlciBtdXN0IG5vdCBjb2FsZXNjZQomIzQzOyAqICAgLSBiaWdfdGNwX2xhcmdlX21heDogICAgY29hbGVzY2luZyBzdG9wcyBhdCB0aGUgY29uZmlndXJlZCBsaW1pdAomIzQzOyAqCiAgKiBzaW5nbGUsIGNhcGFjaXR5OgogICogIEJvcmluZyBjYXNlcyB1c2VkIHRvIHRlc3QgY29hbGVzY2luZyBtYWNoaW5lcnkgaXRzZWxmIGFuZCBzdGF0cwogICogIG1vcmUgdGhhbiBwcm90b2NvbCBiZWhhdmlvci4KQEAgLTExMCw2ICYjNDM7MTE2LDE2IEBACiAKICNkZWZpbmUgRVhJVF9PVkVSX0NPQUxFU0NFCTQyCiAKJiM0MzsvKiBNdXN0IG1hdGNoIEJJR19UQ1BfR1JPX01BWF9TSVpFIGluIGdyb19saWIucHkuICovCiYjNDM7I2RlZmluZSBCSUdfVENQX0dST19NQVhfU0laRQkxMjgwMDAKJiM0MzsKJiM0MzsjZGVmaW5lIEJJR19UQ1BfUkVDVl9CVUZfTEVOIFwKJiM0MzsJKEJJR19UQ1BfR1JPX01BWF9TSVpFICYjNDM7IE1BWF9NU1MgJiM0MzsgTDJfSExFTl9NQVgpCiYjNDM7I2RlZmluZSBCSUdfVENQX01JTl9NU1MJCShBU1NVTUVEX01UVSAtIChNQVhfSERSX0xFTiAtIEVUSF9ITEVOKSkKJiM0MzsjZGVmaW5lIEJJR19UQ1BfTUFYX0ZJTExfQ05UIFwKJiM0MzsJKChpbnQpKChCSUdfVENQX0dST19NQVhfU0laRSAtIDEgLSAoTUFYX0hEUl9MRU4gLSBFVEhfSExFTikpIC8gXAomIzQzOwkgICAgICAgQklHX1RDUF9NSU5fTVNTKSkKJiM0MzsKICNkZWZpbmUgaXB2Nl9vcHRsZW4ocCkgICgoKHApLSZndDtoZHJsZW4mIzQzOzEpICZsdDsmbHQ7IDMpIC8qIGNhbGN1bGF0ZSBJUHY2IGV4dGVuc2lvbiBoZWFkZXIgbGVuICovCiAjZGVmaW5lIEJVSUxEX0JVR19PTihjb25kaXRpb24pICgodm9pZClzaXplb2YoY2hhclsxIC0gMiohIShjb25kaXRpb24pXSkpCiAKQEAgLTE2Niw2ICYjNDM7MTgyLDI3IEBAIHN0YXRpYyBpbnQgbnVtX2xhcmdlX3BrdCh2b2lkKQogCXJldHVybiBtYXhfcGF5bG9hZCgpIC8gY2FsY19tc3MoKTsKIH0KIAomIzQzOy8qIEhvdyBtYW55IG1heGltdW0gc2l6ZWQgc2VnbWVudHMgZml0IHVuZGVyIHRoZSBjb25maWd1cmVkIGxpbWl0LiAqLwomIzQzO3N0YXRpYyBpbnQgYmlnX3RjcF9sYXJnZV9jbnQodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiAoQklHX1RDUF9HUk9fTUFYX1NJWkUgLSAxIC0gKHRvdGFsX2hkcl9sZW4gLSBFVEhfSExFTikpIC8KJiM0MzsJICAgICAgIGNhbGNfbXNzKCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIEhvdyBtYW55IGNhbGNfbXNzKCkgc2l6ZWQgc2VnbWVudHMgYXJlIG5lZWRlZCB0byBzYXRpc2Z5IHRoZQomIzQzOyAqIGZvbGxvd2luZyBjb25kaXRpb246CiYjNDM7ICogcGt0X2NvdW50ICogY2FsY19tc3MoKSAmbHQ7IElQX01BWFBBQ0tFVCAmbHQ7IChwa3RfY291bnQgJiM0MzsgMSkgKiBjYWxjX21zcygpCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBiaWdfdGNwX2ZpbGxfY250KHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gSVBfTUFYUEFDS0VUIC8gY2FsY19tc3MoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBiaWdfdGNwX2ZpbGxfbGVuKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gYmlnX3RjcF9maWxsX2NudCgpICogY2FsY19tc3MoKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB2bG9nKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCXZhX2xpc3QgYXJnczsKQEAgLTU2MCw2ICYjNDM7NTk3LDYxIEBAIHN0YXRpYyB2b2lkIHNlbmRfZGF0YV9wa3RzKGludCBmZCwgc3RydWN0IHNvY2thZGRyX2xsICpkYWRkciwKIAl3cml0ZV9wYWNrZXQoZmQsIGJ1ZiwgdG90YWxfaGRyX2xlbiAmIzQzOyBwYXlsb2FkX2xlbjIsIGRhZGRyKTsKIH0KIAomIzQzOy8qIFNlbmQgbnVtX3BrdCBzZWdtZW50cyBvZiBwa3RfbGVuIGJ5dGVzLCB0aGVuIG9uZSBvZiByZW1haW5kZXIgbGVuLiAqLwomIzQzO3N0YXRpYyB2b2lkIHNlbmRfYmlnX3RjcChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkcl9sbCAqZGFkZHIsIGludCBwa3RfbGVuLAomIzQzOwkJCSBpbnQgbnVtX3BrdCwgaW50IHJlbWFpbmRlcikKJiM0Mzt7CiYjNDM7CXN0YXRpYyBjaGFyIHBrdHNbQklHX1RDUF9NQVhfRklMTF9DTlRdW01BWF9IRFJfTEVOICYjNDM7IE1BWF9NU1NdOwomIzQzOwlzdGF0aWMgY2hhciBsYXN0W01BWF9IRFJfTEVOICYjNDM7IE1BWF9NU1NdOwomIzQzOwljb25zdCBpbnQgZmlsbGVkID0gbnVtX3BrdCAqIHBrdF9sZW47CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAobnVtX3BrdCAmZ3Q7IEJJR19UQ1BfTUFYX0ZJTExfQ05UKQomIzQzOwkJZXJyb3IoMSwgMCwgJiMzNDtuZWVkICVkIHBhY2tldHMsIGFycmF5IGhvbGRzICVkJiMzNDssCiYjNDM7CQkgICAgICBudW1fcGt0LCBCSUdfVENQX01BWF9GSUxMX0NOVCk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBudW1fcGt0OyBpJiM0MzsmIzQzOykKJiM0MzsJCWNyZWF0ZV9wYWNrZXQocGt0c1tpXSwgaSAqIHBrdF9sZW4sIDAsIHBrdF9sZW4sIDApOwomIzQzOwljcmVhdGVfcGFja2V0KGxhc3QsIGZpbGxlZCwgMCwgcmVtYWluZGVyLCAwKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG51bV9wa3Q7IGkmIzQzOyYjNDM7KQomIzQzOwkJd3JpdGVfcGFja2V0KGZkLCBwa3RzW2ldLCB0b3RhbF9oZHJfbGVuICYjNDM7IHBrdF9sZW4sIGRhZGRyKTsKJiM0MzsJd3JpdGVfcGFja2V0KGZkLCBsYXN0LCB0b3RhbF9oZHJfbGVuICYjNDM7IHJlbWFpbmRlciwgZGFkZHIpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBJbiBCSUcgVENQIGNvbmZpZ3VyYXRpb24sIHRoZSB0b3RhbCBhZ2dyZWdhdGUgbGVuZ3RoIGNhbgomIzQzOyAqIGJlIGdyZWF0ZXIgdGhhbiB0aGUgbGVnYWN5IElQX01BWFBBQ0tFVC4gU2luY2UgdGhlIGFnZ3JlZ2F0ZQomIzQzOyAqIGxlbmd0aCBpcyB1c2VkIGluIGNhbGN1bGF0aW5nIHRoZSBzZXF1ZW5jZSBudW1iZXJzLAomIzQzOyAqIHNlbmQgYSBwYWNrZXQgd2l0aCBhIHNlcXVlbmNlIG51bWJlciB0aGF0IGRpZmZlcnMgYnkgSVBfTUFYUEFDS0VUICYjNDM7IDEsCiYjNDM7ICogdG8gdGVzdCBhZ2FpbnN0IHRydW5jYXRpb24gYnVncy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBzZW5kX2JpZ190Y3BfYmFkX3NlcShpbnQgZmQsIHN0cnVjdCBzb2NrYWRkcl9sbCAqZGFkZHIpCiYjNDM7ewomIzQzOwlzdGF0aWMgY2hhciBwa3RzW0JJR19UQ1BfTUFYX0ZJTExfQ05UXVtNQVhfSERSX0xFTiAmIzQzOyBNQVhfTVNTXTsKJiM0MzsJY29uc3QgaW50IG51bV9wa3QgPSBiaWdfdGNwX2ZpbGxfY250KCkgJiM0MzsgMTsKJiM0MzsJc3RhdGljIGNoYXIgbGFzdFtNQVhfSERSX0xFTiAmIzQzOyBNQVhfTVNTXTsKJiM0MzsJY29uc3QgaW50IHBrdF9sZW4gPSBjYWxjX21zcygpOwomIzQzOwlpbnQgYmFkX3NlcTsKJiM0MzsJaW50IGZpbGxlZDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZpbGxlZCA9IG51bV9wa3QgKiBwa3RfbGVuOwomIzQzOwkvKiBMb3cgMTYgYml0cyBtYXRjaCB3aXRoIHRoZSBjb3JyZWN0IGluY29taW5nIHNlcXVlbmNlIG51bWJlci4gKi8KJiM0MzsJYmFkX3NlcSA9IGZpbGxlZCAtIChJUF9NQVhQQUNLRVQgJiM0MzsgMSk7CiYjNDM7CiYjNDM7CWlmIChudW1fcGt0ICZndDsgQklHX1RDUF9NQVhfRklMTF9DTlQpCiYjNDM7CQllcnJvcigxLCAwLCAmIzM0O25lZWQgJWQgcGFja2V0cywgYXJyYXkgaG9sZHMgJWQmIzM0OywKJiM0MzsJCSAgICAgIG51bV9wa3QsIEJJR19UQ1BfTUFYX0ZJTExfQ05UKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG51bV9wa3Q7IGkmIzQzOyYjNDM7KQomIzQzOwkJY3JlYXRlX3BhY2tldChwa3RzW2ldLCBpICogcGt0X2xlbiwgMCwgcGt0X2xlbiwgMCk7CiYjNDM7CWNyZWF0ZV9wYWNrZXQobGFzdCwgYmFkX3NlcSwgMCwgcGt0X2xlbiwgMCk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBudW1fcGt0OyBpJiM0MzsmIzQzOykKJiM0MzsJCXdyaXRlX3BhY2tldChmZCwgcGt0c1tpXSwgdG90YWxfaGRyX2xlbiAmIzQzOyBwa3RfbGVuLCBkYWRkcik7CiYjNDM7CXdyaXRlX3BhY2tldChmZCwgbGFzdCwgdG90YWxfaGRyX2xlbiAmIzQzOyBwa3RfbGVuLCBkYWRkcik7CiYjNDM7fQomIzQzOwogLyogSWYgaW5jb21pbmcgc2VnbWVudHMgbWFrZSB0cmFja2VkIHNlZ21lbnQgbGVuZ3RoIGV4Y2VlZAogICogbGVnYWwgSVAgZGF0YWdyYW0gbGVuZ3RoLCBkbyBub3QgY29hbGVzY2UKICAqLwpAQCAtMTE2MSw3ICYjNDM7MTI1Myw3IEBAIHN0YXRpYyB2b2lkIHJlY3ZfZXJyb3IoaW50IGZkLCBpbnQgcmN2X2Vycm5vKQogc3RhdGljIHZvaWQgY2hlY2tfcmVjdl9wa3RzKGludCBmZCwgaW50ICpjb3JyZWN0X3BheWxvYWQsCiAJCQkgICAgaW50IGNvcnJlY3RfbnVtX3BrdHMpCiB7Ci0Jc3RhdGljIGNoYXIgYnVmZmVyW0lQX01BWFBBQ0tFVCAmIzQzOyBMMl9ITEVOX01BWCAmIzQzOyAxXTsKJiM0MzsJc3RhdGljIGNoYXIgYnVmZmVyW0JJR19UQ1BfUkVDVl9CVUZfTEVOXTsKIAlpbnQgbmhvZmYgPSBFVEhfSExFTiAmIzQzOyAocHBwb2UgPyBQUFBPRV9TRVNfSExFTiA6IDApOwogCXN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKShidWZmZXIgJiM0MzsgbmhvZmYpOwogCXN0cnVjdCBpcHY2aGRyICppcDZoID0gKHN0cnVjdCBpcHY2aGRyICopKGJ1ZmZlciAmIzQzOyBuaG9mZik7CkBAIC0xNTQxLDYgJiM0MzsxNjMzLDI1IEBAIHN0YXRpYyB2b2lkIGdyb19zZW5kZXIodm9pZCkKIAkJc2VuZF9sYXJnZSh0eGZkLCAmYW1wO2RhZGRyLCByZW1haW5kZXIgJiM0MzsgMSk7CiAJCXdyaXRlX3BhY2tldCh0eGZkLCBmaW5fcGt0LCB0b3RhbF9oZHJfbGVuLCAmYW1wO2RhZGRyKTsKIAomIzQzOwkvKiBiaWcgdGNwIHN1Yi10ZXN0cyAqLwomIzQzOwl9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgJiMzNDtiaWdfdGNwX2RhdGFfc2FtZSYjMzQ7KSA9PSAwKSB7CiYjNDM7CQlzZW5kX2JpZ190Y3AodHhmZCwgJmFtcDtkYWRkciwgY2FsY19tc3MoKSwgYmlnX3RjcF9maWxsX2NudCgpLAomIzQzOwkJCSAgICAgY2FsY19tc3MoKSk7CiYjNDM7CQl3cml0ZV9wYWNrZXQodHhmZCwgZmluX3BrdCwgdG90YWxfaGRyX2xlbiwgJmFtcDtkYWRkcik7CiYjNDM7CX0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCAmIzM0O2JpZ190Y3BfZGF0YV9scmdfc21sJiMzNDspID09IDApIHsKJiM0MzsJCWludCByZW1haW5kZXIgPSBjYWxjX21zcygpIC8gMjsKJiM0MzsKJiM0MzsJCXNlbmRfYmlnX3RjcCh0eGZkLCAmYW1wO2RhZGRyLCBjYWxjX21zcygpLCBiaWdfdGNwX2ZpbGxfY250KCksCiYjNDM7CQkJICAgICByZW1haW5kZXIpOwomIzQzOwkJd3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sICZhbXA7ZGFkZHIpOwomIzQzOwl9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgJiMzNDtiaWdfdGNwX3RjcF9zZXEmIzM0OykgPT0gMCkgewomIzQzOwkJc2VuZF9iaWdfdGNwX2JhZF9zZXEodHhmZCwgJmFtcDtkYWRkcik7CiYjNDM7CQl3cml0ZV9wYWNrZXQodHhmZCwgZmluX3BrdCwgdG90YWxfaGRyX2xlbiwgJmFtcDtkYWRkcik7CiYjNDM7CX0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCAmIzM0O2JpZ190Y3BfbGFyZ2VfbWF4JiMzNDspID09IDApIHsKJiM0MzsJCXNlbmRfYmlnX3RjcCh0eGZkLCAmYW1wO2RhZGRyLCBjYWxjX21zcygpLCBiaWdfdGNwX2xhcmdlX2NudCgpLAomIzQzOwkJCSAgICAgY2FsY19tc3MoKSk7CiYjNDM7CQl3cml0ZV9wYWNrZXQodHhmZCwgZmluX3BrdCwgdG90YWxfaGRyX2xlbiwgJmFtcDtkYWRkcik7CiYjNDM7CiAJLyogbWFjaGluZXJ5IHN1Yi10ZXN0cyAqLwogCX0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCAmIzM0O3NpbmdsZSYjMzQ7KSA9PSAwKSB7CiAJCXN0YXRpYyBjaGFyIGJ1ZltNQVhfSERSX0xFTiAmIzQzOyBQQVlMT0FEX0xFTl07CkBAIC0xNzY4LDYgJiM0MzsxODc5LDI2IEBAIHN0YXRpYyB2b2lkIGdyb19yZWNlaXZlcih2b2lkKQogCQlwcmludGYoJiMzNDtsYXN0IHNlZ21lbnQgc2VudCBpbmRpdmlkdWFsbHk6ICYjMzQ7KTsKIAkJY2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMyk7CiAKJiM0MzsJLyogYmlnIHRjcCBzdWItdGVzdHMgKi8KJiM0MzsJfSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsICYjMzQ7YmlnX3RjcF9kYXRhX3NhbWUmIzM0OykgPT0gMCkgewomIzQzOwkJY29ycmVjdF9wYXlsb2FkWzBdID0gYmlnX3RjcF9maWxsX2xlbigpICYjNDM7IGNhbGNfbXNzKCk7CiYjNDM7CQlwcmludGYoJiMzNDtkYXRhIHBhY2tldHMgb2Ygc2FtZSBzaXplIHBhc3QgSVBfTUFYUEFDS0VUOiAmIzM0Oyk7CiYjNDM7CQljaGVja19yZWN2X3BrdHMocnhmZCwgY29ycmVjdF9wYXlsb2FkLCAxKTsKJiM0MzsJfSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsICYjMzQ7YmlnX3RjcF9kYXRhX2xyZ19zbWwmIzM0OykgPT0gMCkgewomIzQzOwkJY29ycmVjdF9wYXlsb2FkWzBdID0gYmlnX3RjcF9maWxsX2xlbigpICYjNDM7IGNhbGNfbXNzKCkgLyAyOwomIzQzOwkJcHJpbnRmKCYjMzQ7c21hbGxlciBsYXN0IHBhY2tldCBwYXN0IElQX01BWFBBQ0tFVDogJiMzNDspOwomIzQzOwkJY2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMSk7CiYjNDM7CX0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCAmIzM0O2JpZ190Y3BfdGNwX3NlcSYjMzQ7KSA9PSAwKSB7CiYjNDM7CQljb3JyZWN0X3BheWxvYWRbMF0gPSAoYmlnX3RjcF9maWxsX2NudCgpICYjNDM7IDEpICogY2FsY19tc3MoKTsKJiM0MzsJCWNvcnJlY3RfcGF5bG9hZFsxXSA9IGNhbGNfbXNzKCk7CiYjNDM7CQlwcmludGYoJiMzNDthbGlhc2VkIHNlcSBwYXN0IElQX01BWFBBQ0tFVCBkb2VzbiYjMzk7dCBjb2FsZXNjZTogJiMzNDspOwomIzQzOwkJY2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMik7CiYjNDM7CX0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCAmIzM0O2JpZ190Y3BfbGFyZ2VfbWF4JiMzNDspID09IDApIHsKJiM0MzsJCWNvcnJlY3RfcGF5bG9hZFswXSA9IGJpZ190Y3BfbGFyZ2VfY250KCkgKiBjYWxjX21zcygpOwomIzQzOwkJY29ycmVjdF9wYXlsb2FkWzFdID0gY2FsY19tc3MoKTsKJiM0MzsJCXByaW50ZigmIzM0O3Nob3VsZG4mIzM5O3QgY29hbGVzY2UgcGFzdCBncm9fbWF4X3NpemU6ICYjMzQ7KTsKJiM0MzsJCWNoZWNrX3JlY3ZfcGt0cyhyeGZkLCBjb3JyZWN0X3BheWxvYWQsIDIpOwomIzQzOwogCS8qIG1hY2hpbmVyeSBzdWItdGVzdHMgKi8KIAl9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgJiMzNDtzaW5nbGUmIzM0OykgPT0gMCkgewogCQlwcmludGYoJiMzNDtzaW5nbGUgZGF0YSBwYWNrZXQ6ICYjMzQ7KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMwMQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aCBGdXp6aW5nIERlY2lzaW9uIFByb2Nlc3MqKgoKT2theSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBzZXJpZXMgaXMgd29ydGggZnV6emluZyB3aXRoIHN5emthbGxlci4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBkaWZmLiBMZXQmIzM5O3Mgc2VlLi4uIGl0IHRvdWNoZXMgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHlgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uY2AuIEhvbGQgb24gYSBzZWNvbmQuLi4gdGhvc2UgYXJlIGJvdGggd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gIQoKUmlnaHQsIEkgbmVlZCB0byBhcHBseSBteSBydWxlcyBoZXJlLiBJIGtub3cgdGhlIGNyaXRlcmlhIGZvciAqbm90KiBmdXp6aW5nLCBhbmQgaXQmIzM5O3MgcHJldHR5IGNsZWFyLWN1dC4gUnVsZSBudW1iZXIgdHdvIHNheXMgSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmICphbGwqIHRoZSBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gdGhlIGNhdGVnb3JpZXMgb2Ygbm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlcywgcGFydGljdWxhcmx5IHRoaW5ncyBsaWtlIG1vZGlmaWNhdGlvbnMgdG8gc2VsZi10ZXN0cyBvciBzY3JpcHRzIHRoYXQgZG9uJiMzOTt0IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlIG9yIG1vZHVsZXMuIEJpbmdvISBUaGVzZSBmaWxlcyBhcmUgcmlnaHQgaW4gdGhhdCBjYXRlZ29yeS4KClRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBnaXQgZGlmZmAgb3IgYGdpdCBzaG93YCB0byBtYWtlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IG5vIG90aGVyLCBsZXNzIG9idmlvdXMsIGZpbGVzIHdlcmUgdG91Y2hlZCBpbiB0aGUgSEVBRCBjb21taXQuIEJ1dCBiYXNlZCBvbiB3aGF0IEkgc2VlIGhlcmUsIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyBhIG5vLWdvIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA2OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JJR19UQ1BfR1JPX01BWF9TSVpFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHk9NjA9R1JPX0RQT1JUID0gODAwMFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weS02MS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHk6NjI6QklHX1RDUF9HUk9fTUFYX1NJWkUgPSAxMjgwMDBcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHktNjMtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weT0yNTU9ZGVmIF9zZXR1cChjZmcsIG1vZGUsIHRlc3RfbmFtZSk6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weS0zMzAtICAgIGlmIHRlc3RfbmFtZS5zdGFydHN3aXRoKFwmIzM0O2JpZ190Y3BfXCYjMzQ7KTpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHk6MzMxOiAgICAgICAgX3NldF9ncm9fc2l6ZV9yZXN0b3JlKGNmZywgQklHX1RDUF9HUk9fTUFYX1NJWkUpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5LTMzMi1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jLTExOC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmM6MTE5Oi8qIE11c3QgbWF0Y2ggQklHX1RDUF9HUk9fTUFYX1NJWkUgaW4gZ3JvX2xpYi5weS4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmM6MTIwOiNkZWZpbmUgQklHX1RDUF9HUk9fTUFYX1NJWkVcdDEyODAwMFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYy0xMjEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jLTEyMi0jZGVmaW5lIEJJR19UQ1BfUkVDVl9CVUZfTEVOIFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jOjEyMzpcdChCSUdfVENQX0dST19NQVhfU0laRSAmIzQzOyBNQVhfTVNTICYjNDM7IEwyX0hMRU5fTUFYKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYy0xMjQtI2RlZmluZSBCSUdfVENQX01JTl9NU1NcdFx0KEFTU1VNRURfTVRVIC0gKE1BWF9IRFJfTEVOIC0gRVRIX0hMRU4pKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYy0xMjUtI2RlZmluZSBCSUdfVENQX01BWF9GSUxMX0NOVCBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYzoxMjY6XHQoKGludCkoKEJJR19UQ1BfR1JPX01BWF9TSVpFIC0gMSAtIChNQVhfSERSX0xFTiAtIEVUSF9ITEVOKSkgLyBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYy0xMjctXHQgICAgICAgQklHX1RDUF9NSU5fTVNTKSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jPTE4Nj1zdGF0aWMgaW50IGJpZ190Y3BfbGFyZ2VfY250KHZvaWQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jLTE4Ny17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jOjE4ODpcdHJldHVybiAoQklHX1RDUF9HUk9fTUFYX1NJWkUgLSAxIC0gKHRvdGFsX2hkcl9sZW4gLSBFVEhfSExFTikpIC9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMtMTg5LVx0ICAgICAgIGNhbGNfbXNzKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYyMAoJCQkJCQkJb3V0cHV0OiAxMTMKCQkJCQkJCXRob3VnaHRzOiAzMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogTm8gRnV6emluZyBSZXF1aXJlZCoqCgpPa2F5LCBsZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkuIEEgcXVpY2sgYGdpdCBsb2cgLW4gMSAtLXN0YXRgIGNoZWNrIG9yIGxvb2sgZm9yIGFueSBvdGhlciB1bnNlZW4gbW9kaWZpY2F0aW9ucy4gSXQgYXBwZWFycyB0aGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gIGRpcmVjdG9yeS4gVGhlIGRpZmYgY29uZmlybXMgdGhpcywgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5YCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmNgLgoKR2l2ZW4gU0VDVElPTiAyJiMzOTtzICYjMzQ7TmVnYXRpdmUgQ3JpdGVyaWEsJiMzNDsgdGhpcyBpcyBzdHJhaWdodGZvcndhcmQuIFRoZSBjaGFuZ2VzIGFyZSBub24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZS4gVGhleSBmYWxsIHNxdWFyZWx5IHVuZGVyIHRoZSBjYXRlZ29yeSBvZiB1c2VyLXNwYWNlIHNlbGYtdGVzdHMgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gLCB3aGljaCBieSBkZWZpbml0aW9uIGRvICpub3QqIGFmZmVjdCB0aGUga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBhbnkgbW9kdWxlcy4KClRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpczoKCiogICBgV29ydGhGdXp6aW5nID0gRmFsc2VgLgoqICAgYEZvY3VzU3ltYm9scyA9IFtdYC4KKiAgIGBFbmFibGVDb25maWdzID0gW11gLgoKVGhlIHJhdGlvbmFsZSBpcyBwcmVjaXNlLiBUaGUgcGF0Y2ggKm9ubHkqIGFkZHMgQklHIFRDUCB0ZXN0IGNhc2VzIGZvciBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSB0byB0aGUgc2VsZi10ZXN0IGNvZGUuIEl0JiMzOTtzIGNvbXBsZXRlbHkgaXNvbGF0ZWQgZnJvbSBhbnkga2VybmVsIGNvZGUgb3IgdGhlIGNvbXBpbGF0aW9uIG9mIHRoZSBrZXJuZWwgaXRzZWxmLgoKSnVzdCB0byBkb3VibGUtY2hlY2sgbXkgb3V0cHV0LCB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzIGFyZSBhcyBJJiMzOTt2ZSBkZXJpdmVkOgoKKiAgIGBXb3J0aEZ1enppbmcgPSBGYWxzZWAgKEJvb2xlYW4gLSBhcyBleHBlY3RlZCkKKiAgIGBGb2N1c1N5bWJvbHMgPSBbXWAgKEVtcHR5IGxpc3QgLSBjb3JyZWN0KQoqICAgYEVuYWJsZUNvbmZpZ3MgPSBbXWAgKEVtcHR5IGxpc3QgLSBhbHNvIGNvcnJlY3QpCgpUaGUgY29uY2x1c2lvbiBpcyBhYnNvbHV0ZS4gVGhpcyBhbGlnbnMgcGVyZmVjdGx5IHdpdGggdGhlIGRlZmluZWQgaW5zdHJ1Y3Rpb25zLiBObyBmdXp6aW5nIGlzIHJlcXVpcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDA2OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMpIHRvIGFkZCBCSUcgVENQIEdSTyB0ZXN0IGNhc2VzLiBObyBrZXJuZWwtc3BhY2UgY29kZSBvciBjb21waWxlZCBrZXJuZWwgYXJ0aWZhY3RzICh2bWxpbnV4IG9yIGtlcm5lbCBtb2R1bGVzKSBhcmUgbW9kaWZpZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weSBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYykgdG8gYWRkIEJJRyBUQ1AgR1JPIHRlc3QgY2FzZXMuIE5vIGtlcm5lbC1zcGFjZSBjb2RlIG9yIGNvbXBpbGVkIGtlcm5lbCBhcnRpZmFjdHMgKHZtbGludXggb3Iga2VybmVsIG1vZHVsZXMpIGFyZSBtb2RpZmllZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDY6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA2OjIyOjAxLjM1Njc4Mzk1OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjA2NTA5NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMpIHRvIGFkZCBCSUcgVENQIEdSTyB0ZXN0IGNhc2VzLiBObyBrZXJuZWwtc3BhY2UgY29kZSBvciBjb21waWxlZCBrZXJuZWwgYXJ0aWZhY3RzICh2bWxpbnV4IG9yIGtlcm5lbCBtb2R1bGVzKSBhcmUgbW9kaWZpZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNjoyMjowMS4zNTY3OTAzOTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDQwNzYyMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5ZDE5ZTNiNTIyNDNmOGYyMGVlMjNjNzliZWU0MWQ5ODE2NmMwOTcwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDEzIDA2OjIxOjU5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5XFxuaW5kZXggYjdhYzA2NjBhZGMwMS4uYWJlY2Y2MGJhYTUzNyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5XFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weVxcbkBAIC00MCwxMyArNDAsMTcgQEAgVGVzdCBjYXNlczpcXG4gICAtIGlwX3Y2ZXh0X2RpZmY6IChJUHY2KSBJUHY2IGV4dCBoZWFkZXIgd2l0aCBkaWZmZXJlbnQgcGF5bG9hZCBkb2Vzbid0IGNvYWxlc2NlXFxuICAgLSBsYXJnZV9tYXg6IFBhY2tldHMgZXhjZWVkaW5nIEdST19NQVhfU0laRSBkb24ndCBjb2FsZXNjZVxcbiAgIC0gbGFyZ2VfcmVtOiBMYXJnZSBwYWNrZXQgcmVtYWluZGVyIGhhbmRsaW5nXFxuKyAgLSBiaWdfdGNwX2RhdGFfc2FtZTogU2FtZSBzaXplIHBhY2tldHMgY29hbGVzY2UgcGFzdCBJUF9NQVhQQUNLRVRcXG4rICAtIGJpZ190Y3BfZGF0YV9scmdfc21sOiBTbWFsbGVyIGxhc3QgcGFja2V0IGNvYWxlc2NlcyBwYXN0IElQX01BWFBBQ0tFVFxcbisgIC0gYmlnX3RjcF90Y3Bfc2VxOiBQYWNrZXRzIHdpdGggMTYtYml0IHRydW5jYXRlZCBzZXFubyBkb24ndCBjb2FsZXNjZVxcbisgIC0gYmlnX3RjcF9sYXJnZV9tYXg6IFBhY2tldHMgZXhjZWVkaW5nIHRoZSBCSUcgVENQIGxpbWl0IGRvbid0IGNvYWxlc2NlXFxuIFxcXCJcXFwiXFxcIlxcbiBcXG4gaW1wb3J0IGdsb2JcXG4gaW1wb3J0IG9zXFxuIGltcG9ydCByZVxcbi1mcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXhpdCwga3NmdF9wclxcbi1mcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIEtzZnRGYWlsRXgsIEtzZnRYZmFpbEV4XFxuK2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X3J1biwga3NmdF9leGl0LCBrc2Z0X3ByLCBrc2Z0X2VxXFxuK2Zyb20gbGliLnB5IGltcG9ydCBOZXREcnZFcEVudiwgS3NmdEZhaWxFeCwgS3NmdFNraXBFeCwgS3NmdFhmYWlsRXhcXG4gZnJvbSBsaWIucHkgaW1wb3J0IE5ldGRldkZhbWlseSwgRXRodG9vbEZhbWlseVxcbiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBjbWQsIGN0bF9maWxlX3dyaXRlLCBkZWZlciwgZXRodG9vbCwgaXBcXG4gZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfdmFyaWFudHMsIEtzZnROYW1lZFZhcmlhbnRcXG5AQCAtNTUsNiArNTksOCBAQCBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF92YXJpYW50cywgS3NmdE5hbWVkVmFyaWFudFxcbiAjIGdyby5jIHVzZXMgaGFyZGNvZGVkIERQT1JUPTgwMDBcXG4gR1JPX0RQT1JUID0gODAwMFxcbiBcXG4rQklHX1RDUF9HUk9fTUFYX1NJWkUgPSAxMjgwMDBcXG4rXFxuIFxcbiBkZWYgX3Jlc29sdmVfZG1hYyhjZmcsIGlwdmVyKTpcXG4gICAgIFxcXCJcXFwiXFxcIlxcbkBAIC05MSw2ICs5NywzNCBAQCBkZWYgX3NldF9tdHVfcmVzdG9yZShkZXYsIG10dSwgaG9zdCk6XFxuICAgICAgICAgZGVmZXIoaXAsIGZcXFwibGluayBzZXQgZGV2IHtkZXZbJ2lmbmFtZSddfSBtdHUge2RldlsnbXR1J119XFxcIiwgaG9zdD1ob3N0KVxcbiBcXG4gXFxuK2RlZiBfc2V0X2dyb19zaXplX3Jlc3RvcmUoY2ZnLCBzaXplKTpcXG4rICAgIFxcXCJcXFwiXFxcIlxcbisgICAgU2V0IHRoZSBsb2NhbCBkZXZpY2UncyBHUk8gc2l6ZSBsaW1pdHMsIHRoZW4gY29uZmlybSB0aGV5IHN0dWNrLlxcbisgICAgXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgX3NldF9tdHVfcmVzdG9yZShjZmcuZGV2LCA0MDk2LCBOb25lKVxcbisgICAgX3NldF9tdHVfcmVzdG9yZShjZmcucmVtb3RlX2RldiwgNDA5NiwgY2ZnLnJlbW90ZSlcXG4rXFxuKyAgICBpZiBcXFwiZ3JvX21heF9zaXplXFxcIiBub3QgaW4gY2ZnLmRldiBvciBcXFwiZ3JvX2lwdjRfbWF4X3NpemVcXFwiIG5vdCBpbiBjZmcuZGV2OlxcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxcImlwcm91dGUyIGRvZXMgbm90IHJlcG9ydCB0aGUgR1JPIHNpemUgbGltaXRzXFxcIilcXG4rXFxuKyAgICBpZiAoY2ZnLmRldltcXFwiZ3JvX21heF9zaXplXFxcIl0gPT0gc2l6ZSBhbmRcXG4rICAgICAgICAgICAgY2ZnLmRldltcXFwiZ3JvX2lwdjRfbWF4X3NpemVcXFwiXSA9PSBzaXplKTpcXG4rICAgICAgICByZXR1cm5cXG4rXFxuKyAgICBvbGQgPSAoZlxcXCJncm9fbWF4X3NpemUge2NmZy5kZXZbJ2dyb19tYXhfc2l6ZSddfSBcXFwiXFxuKyAgICAgICAgICAgZlxcXCJncm9faXB2NF9tYXhfc2l6ZSB7Y2ZnLmRldlsnZ3JvX2lwdjRfbWF4X3NpemUnXX1cXFwiKVxcbisgICAgbmV3ID0gZlxcXCJncm9fbWF4X3NpemUge3NpemV9IGdyb19pcHY0X21heF9zaXplIHtzaXplfVxcXCJcXG4rXFxuKyAgICBpcChmXFxcImxpbmsgc2V0IGRldiB7Y2ZnLmlmbmFtZX0ge25ld31cXFwiKVxcbisgICAgZGVmZXIoaXAsIGZcXFwibGluayBzZXQgZGV2IHtjZmcuaWZuYW1lfSB7b2xkfVxcXCIpXFxuK1xcbisgICAgZGV2ID0gaXAoXFxcIi1kIGxpbmsgc2hvdyBkZXYgXFxcIiArIGNmZy5pZm5hbWUsIGpzb249VHJ1ZSlbMF1cXG4rICAgIGtzZnRfZXEoZGV2W1xcXCJncm9fbWF4X3NpemVcXFwiXSwgc2l6ZSwgY29tbWVudD1cXFwiZ3JvX21heF9zaXplIG5vdCBhcHBsaWVkXFxcIilcXG4rICAgIGtzZnRfZXEoZGV2W1xcXCJncm9faXB2NF9tYXhfc2l6ZVxcXCJdLCBzaXplLFxcbisgICAgICAgICAgICBjb21tZW50PVxcXCJncm9faXB2NF9tYXhfc2l6ZSBub3QgYXBwbGllZFxcXCIpXFxuK1xcbitcXG4gZGVmIF9zZXRfZXRodG9vbF9mZWF0KGRldiwgY3VycmVudCwgZmVhdHMsIGhvc3Q9Tm9uZSk6XFxuICAgICBzMm4gPSB7VHJ1ZTogXFxcIm9uXFxcIiwgRmFsc2U6IFxcXCJvZmZcXFwifVxcbiBcXG5AQCAtMjM5LDcgKzI3MywxMSBAQCBkZWYgX3NldHVwKGNmZywgbW9kZSwgdGVzdF9uYW1lKTpcXG4gICAgICAgICBmbHVzaF9wYXRoID0gZlxcXCIvc3lzL2NsYXNzL25ldC97Y2ZnLmlmbmFtZX0vZ3JvX2ZsdXNoX3RpbWVvdXRcXFwiXFxuICAgICAgICAgaXJxX3BhdGggPSBmXFxcIi9zeXMvY2xhc3MvbmV0L3tjZmcuaWZuYW1lfS9uYXBpX2RlZmVyX2hhcmRfaXJxc1xcXCJcXG4gXFxuLSAgICAgICAgY3RsX2ZpbGVfd3JpdGUoZmx1c2hfcGF0aCwgXFxcIjIwMDAwMFxcXCIpXFxuKyAgICAgICAgIyBcXFwiYmlnX3RjcF8qXFxcIiB0ZXN0cyBuZWVkIGEgbG9uZ2VyIHRpbWVvdXQsIHVzZSAyeCB0aGUgcmVndWxhciB0aW1lb3V0XFxuKyAgICAgICAgaWYgdGVzdF9uYW1lLnN0YXJ0c3dpdGgoXFxcImJpZ190Y3BfXFxcIik6XFxuKyAgICAgICAgICAgIGN0bF9maWxlX3dyaXRlKGZsdXNoX3BhdGgsIFxcXCI0MDAwMDBcXFwiKVxcbisgICAgICAgIGVsc2U6XFxuKyAgICAgICAgICAgIGN0bF9maWxlX3dyaXRlKGZsdXNoX3BhdGgsIFxcXCIyMDAwMDBcXFwiKVxcbiAgICAgICAgIGN0bF9maWxlX3dyaXRlKGlycV9wYXRoLCBcXFwiMTBcXFwiKVxcbiBcXG4gICAgICAgICBfc2V0X2V0aHRvb2xfZmVhdChjZmcuaWZuYW1lLCBjZmcuZmVhdCxcXG5AQCAtMjg5LDYgKzMyNyw5IEBAIGRlZiBfc2V0dXAoY2ZnLCBtb2RlLCB0ZXN0X25hbWUpOlxcbiAgICAgZXhjZXB0IEtzZnRYZmFpbEV4OlxcbiAgICAgICAgIHBhc3NcXG4gXFxuKyAgICBpZiB0ZXN0X25hbWUuc3RhcnRzd2l0aChcXFwiYmlnX3RjcF9cXFwiKTpcXG4rICAgICAgICBfc2V0X2dyb19zaXplX3Jlc3RvcmUoY2ZnLCBCSUdfVENQX0dST19NQVhfU0laRSlcXG4rXFxuIFxcbiBkZWYgX2dyb192YXJpYW50cygpOlxcbiAgICAgXFxcIlxcXCJcXFwiR2VuZXJhdG9yIHRoYXQgeWllbGRzIGFsbCBjb21iaW5hdGlvbnMgb2YgcHJvdG9jb2wgYW5kIHRlc3QgdHlwZXMuXFxcIlxcXCJcXFwiXFxuQEAgLTMwNCw2ICszNDUsMTEgQEAgZGVmIF9ncm9fdmFyaWFudHMoKTpcXG4gICAgICAgICBcXFwibGFyZ2VfbWF4XFxcIiwgXFxcImxhcmdlX3JlbVxcXCIsXFxuICAgICBdXFxuIFxcbisgICAgYmlnX3RjcF90ZXN0cyA9IFtcXG4rICAgICAgICBcXFwiYmlnX3RjcF9kYXRhX3NhbWVcXFwiLCBcXFwiYmlnX3RjcF9kYXRhX2xyZ19zbWxcXFwiLFxcbisgICAgICAgIFxcXCJiaWdfdGNwX3RjcF9zZXFcXFwiLCBcXFwiYmlnX3RjcF9sYXJnZV9tYXhcXFwiLFxcbisgICAgXVxcbitcXG4gICAgICMgVGVzdHMgc3BlY2lmaWMgdG8gSVB2NFxcbiAgICAgaXB2NF90ZXN0cyA9IFtcXG4gICAgICAgICBcXFwiaXBfY3N1bVxcXCIsXFxuQEAgLTMyMiw2ICszNjgsMTAgQEAgZGVmIF9ncm9fdmFyaWFudHMoKTpcXG4gICAgICAgICBmb3IgdGVzdF9uYW1lIGluIGNvbW1vbl90ZXN0czpcXG4gICAgICAgICAgICAgeWllbGQgcHJvdG9jb2wsIHRlc3RfbmFtZVxcbiBcXG4rICAgICAgICBpZiBwcm90b2NvbCBpbiBbXFxcImlwdjRcXFwiLCBcXFwiaXB2NlxcXCJdOlxcbisgICAgICAgICAgICBmb3IgdGVzdF9uYW1lIGluIGJpZ190Y3BfdGVzdHM6XFxuKyAgICAgICAgICAgICAgICB5aWVsZCBwcm90b2NvbCwgdGVzdF9uYW1lXFxuK1xcbiAgICAgICAgIGlmIHByb3RvY29sIGluIFtcXFwiaXB2NFxcXCIsIFxcXCJpcGlwXFxcIl06XFxuICAgICAgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gaXB2NF90ZXN0czpcXG4gICAgICAgICAgICAgICAgIHlpZWxkIHByb3RvY29sLCB0ZXN0X25hbWVcXG5AQCAtMzU4LDcgKzQwOCw4IEBAIGRlZiBydW5fdGVzdChjZmcsIG1vZGUsIHByb3RvY29sLCB0ZXN0X25hbWUpOlxcbiAgICAgICAgIGlmIHJ4X3Byb2MucmV0ID09IDQyOlxcbiAgICAgICAgICAgICByYWlzZSBLc2Z0RmFpbEV4KGZcXFwiR1JPIG92ZXItY29hbGVzY2VkIGluIHtwcm90b2NvbH0ve3Rlc3RfbmFtZX1cXFwiKVxcbiBcXG4tICAgICAgICBpZiB0ZXN0X25hbWUuc3RhcnRzd2l0aChcXFwibGFyZ2VfXFxcIikgYW5kIG9zLmVudmlyb24uZ2V0KFxcXCJLU0ZUX01BQ0hJTkVfU0xPV1xcXCIpOlxcbisgICAgICAgIGlmICh0ZXN0X25hbWUuc3RhcnRzd2l0aCgoXFxcImxhcmdlX1xcXCIsIFxcXCJiaWdfdGNwX1xcXCIpKSBhbmRcXG4rICAgICAgICAgICAgICAgIG9zLmVudmlyb24uZ2V0KFxcXCJLU0ZUX01BQ0hJTkVfU0xPV1xcXCIpKTpcXG4gICAgICAgICAgICAga3NmdF9wcihmXFxcIklnbm9yaW5nIHtwcm90b2NvbH0ve3Rlc3RfbmFtZX0gZmFpbHVyZSBkdWUgdG8gc2xvdyBlbnZpcm9ubWVudFxcXCIpXFxuICAgICAgICAgICAgIHJldHVyblxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmNcXG5pbmRleCA3YTMzMzE1NWRlMWFiLi43MGIwZGViM2MxMWZhIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jXFxuQEAgLTQ2LDYgKzQ2LDEyIEBAXFxuICAqICAgLSBsYXJnZV9tYXg6IGV4Y2VlZGluZyBtYXggc2l6ZVxcbiAgKiAgIC0gbGFyZ2VfcmVtOiByZW1haW5kZXIgaGFuZGxpbmdcXG4gICpcXG4rICogYmlnX3RjcF8qOlxcbisgKiAgIC0gYmlnX3RjcF9kYXRhX3NhbWU6ICAgIGVxdWFsIHNlZ21lbnRzIGNvYWxlc2NpbmcgcGFzdCBJUF9NQVhQQUNLRVRcXG4rICogICAtIGJpZ190Y3BfZGF0YV9scmdfc21sOiBhIHNtYWxsZXIgZmluYWwgc2VnbWVudCBjYXJyeWluZyBpdCBvdmVyXFxuKyAqICAgLSBiaWdfdGNwX3RjcF9zZXE6ICAgICAgMTYtYml0IHRydW5jYXRlZCBzZXF1ZW5jZSBudW1iZXIgbXVzdCBub3QgY29hbGVzY2VcXG4rICogICAtIGJpZ190Y3BfbGFyZ2VfbWF4OiAgICBjb2FsZXNjaW5nIHN0b3BzIGF0IHRoZSBjb25maWd1cmVkIGxpbWl0XFxuKyAqXFxuICAqIHNpbmdsZSwgY2FwYWNpdHk6XFxuICAqICBCb3JpbmcgY2FzZXMgdXNlZCB0byB0ZXN0IGNvYWxlc2NpbmcgbWFjaGluZXJ5IGl0c2VsZiBhbmQgc3RhdHNcXG4gICogIG1vcmUgdGhhbiBwcm90b2NvbCBiZWhhdmlvci5cXG5AQCAtMTEwLDYgKzExNiwxNiBAQFxcbiBcXG4gI2RlZmluZSBFWElUX09WRVJfQ09BTEVTQ0VcXHQ0MlxcbiBcXG4rLyogTXVzdCBtYXRjaCBCSUdfVENQX0dST19NQVhfU0laRSBpbiBncm9fbGliLnB5LiAqL1xcbisjZGVmaW5lIEJJR19UQ1BfR1JPX01BWF9TSVpFXFx0MTI4MDAwXFxuK1xcbisjZGVmaW5lIEJJR19UQ1BfUkVDVl9CVUZfTEVOIFxcXFxcXG4rXFx0KEJJR19UQ1BfR1JPX01BWF9TSVpFICsgTUFYX01TUyArIEwyX0hMRU5fTUFYKVxcbisjZGVmaW5lIEJJR19UQ1BfTUlOX01TU1xcdFxcdChBU1NVTUVEX01UVSAtIChNQVhfSERSX0xFTiAtIEVUSF9ITEVOKSlcXG4rI2RlZmluZSBCSUdfVENQX01BWF9GSUxMX0NOVCBcXFxcXFxuK1xcdCgoaW50KSgoQklHX1RDUF9HUk9fTUFYX1NJWkUgLSAxIC0gKE1BWF9IRFJfTEVOIC0gRVRIX0hMRU4pKSAvIFxcXFxcXG4rXFx0ICAgICAgIEJJR19UQ1BfTUlOX01TUykpXFxuK1xcbiAjZGVmaW5lIGlwdjZfb3B0bGVuKHApICAoKChwKS1cXHUwMDNlaGRybGVuKzEpIFxcdTAwM2NcXHUwMDNjIDMpIC8qIGNhbGN1bGF0ZSBJUHY2IGV4dGVuc2lvbiBoZWFkZXIgbGVuICovXFxuICNkZWZpbmUgQlVJTERfQlVHX09OKGNvbmRpdGlvbikgKCh2b2lkKXNpemVvZihjaGFyWzEgLSAyKiEhKGNvbmRpdGlvbildKSlcXG4gXFxuQEAgLTE2Niw2ICsxODIsMjcgQEAgc3RhdGljIGludCBudW1fbGFyZ2VfcGt0KHZvaWQpXFxuIFxcdHJldHVybiBtYXhfcGF5bG9hZCgpIC8gY2FsY19tc3MoKTtcXG4gfVxcbiBcXG4rLyogSG93IG1hbnkgbWF4aW11bSBzaXplZCBzZWdtZW50cyBmaXQgdW5kZXIgdGhlIGNvbmZpZ3VyZWQgbGltaXQuICovXFxuK3N0YXRpYyBpbnQgYmlnX3RjcF9sYXJnZV9jbnQodm9pZClcXG4re1xcbitcXHRyZXR1cm4gKEJJR19UQ1BfR1JPX01BWF9TSVpFIC0gMSAtICh0b3RhbF9oZHJfbGVuIC0gRVRIX0hMRU4pKSAvXFxuK1xcdCAgICAgICBjYWxjX21zcygpO1xcbit9XFxuK1xcbisvKiBIb3cgbWFueSBjYWxjX21zcygpIHNpemVkIHNlZ21lbnRzIGFyZSBuZWVkZWQgdG8gc2F0aXNmeSB0aGVcXG4rICogZm9sbG93aW5nIGNvbmRpdGlvbjpcXG4rICogcGt0X2NvdW50ICogY2FsY19tc3MoKSBcXHUwMDNjIElQX01BWFBBQ0tFVCBcXHUwMDNjIChwa3RfY291bnQgKyAxKSAqIGNhbGNfbXNzKClcXG4rICovXFxuK3N0YXRpYyBpbnQgYmlnX3RjcF9maWxsX2NudCh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBJUF9NQVhQQUNLRVQgLyBjYWxjX21zcygpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGJpZ190Y3BfZmlsbF9sZW4odm9pZClcXG4re1xcbitcXHRyZXR1cm4gYmlnX3RjcF9maWxsX2NudCgpICogY2FsY19tc3MoKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdmxvZyhjb25zdCBjaGFyICpmbXQsIC4uLilcXG4ge1xcbiBcXHR2YV9saXN0IGFyZ3M7XFxuQEAgLTU2MCw2ICs1OTcsNjEgQEAgc3RhdGljIHZvaWQgc2VuZF9kYXRhX3BrdHMoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHJfbGwgKmRhZGRyLFxcbiBcXHR3cml0ZV9wYWNrZXQoZmQsIGJ1ZiwgdG90YWxfaGRyX2xlbiArIHBheWxvYWRfbGVuMiwgZGFkZHIpO1xcbiB9XFxuIFxcbisvKiBTZW5kIG51bV9wa3Qgc2VnbWVudHMgb2YgcGt0X2xlbiBieXRlcywgdGhlbiBvbmUgb2YgcmVtYWluZGVyIGxlbi4gKi9cXG4rc3RhdGljIHZvaWQgc2VuZF9iaWdfdGNwKGludCBmZCwgc3RydWN0IHNvY2thZGRyX2xsICpkYWRkciwgaW50IHBrdF9sZW4sXFxuK1xcdFxcdFxcdCBpbnQgbnVtX3BrdCwgaW50IHJlbWFpbmRlcilcXG4re1xcbitcXHRzdGF0aWMgY2hhciBwa3RzW0JJR19UQ1BfTUFYX0ZJTExfQ05UXVtNQVhfSERSX0xFTiArIE1BWF9NU1NdO1xcbitcXHRzdGF0aWMgY2hhciBsYXN0W01BWF9IRFJfTEVOICsgTUFYX01TU107XFxuK1xcdGNvbnN0IGludCBmaWxsZWQgPSBudW1fcGt0ICogcGt0X2xlbjtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRpZiAobnVtX3BrdCBcXHUwMDNlIEJJR19UQ1BfTUFYX0ZJTExfQ05UKVxcbitcXHRcXHRlcnJvcigxLCAwLCBcXFwibmVlZCAlZCBwYWNrZXRzLCBhcnJheSBob2xkcyAlZFxcXCIsXFxuK1xcdFxcdCAgICAgIG51bV9wa3QsIEJJR19UQ1BfTUFYX0ZJTExfQ05UKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fcGt0OyBpKyspXFxuK1xcdFxcdGNyZWF0ZV9wYWNrZXQocGt0c1tpXSwgaSAqIHBrdF9sZW4sIDAsIHBrdF9sZW4sIDApO1xcbitcXHRjcmVhdGVfcGFja2V0KGxhc3QsIGZpbGxlZCwgMCwgcmVtYWluZGVyLCAwKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fcGt0OyBpKyspXFxuK1xcdFxcdHdyaXRlX3BhY2tldChmZCwgcGt0c1tpXSwgdG90YWxfaGRyX2xlbiArIHBrdF9sZW4sIGRhZGRyKTtcXG4rXFx0d3JpdGVfcGFja2V0KGZkLCBsYXN0LCB0b3RhbF9oZHJfbGVuICsgcmVtYWluZGVyLCBkYWRkcik7XFxuK31cXG4rXFxuKy8qIEluIEJJRyBUQ1AgY29uZmlndXJhdGlvbiwgdGhlIHRvdGFsIGFnZ3JlZ2F0ZSBsZW5ndGggY2FuXFxuKyAqIGJlIGdyZWF0ZXIgdGhhbiB0aGUgbGVnYWN5IElQX01BWFBBQ0tFVC4gU2luY2UgdGhlIGFnZ3JlZ2F0ZVxcbisgKiBsZW5ndGggaXMgdXNlZCBpbiBjYWxjdWxhdGluZyB0aGUgc2VxdWVuY2UgbnVtYmVycyxcXG4rICogc2VuZCBhIHBhY2tldCB3aXRoIGEgc2VxdWVuY2UgbnVtYmVyIHRoYXQgZGlmZmVycyBieSBJUF9NQVhQQUNLRVQgKyAxLFxcbisgKiB0byB0ZXN0IGFnYWluc3QgdHJ1bmNhdGlvbiBidWdzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgc2VuZF9iaWdfdGNwX2JhZF9zZXEoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHJfbGwgKmRhZGRyKVxcbit7XFxuK1xcdHN0YXRpYyBjaGFyIHBrdHNbQklHX1RDUF9NQVhfRklMTF9DTlRdW01BWF9IRFJfTEVOICsgTUFYX01TU107XFxuK1xcdGNvbnN0IGludCBudW1fcGt0ID0gYmlnX3RjcF9maWxsX2NudCgpICsgMTtcXG4rXFx0c3RhdGljIGNoYXIgbGFzdFtNQVhfSERSX0xFTiArIE1BWF9NU1NdO1xcbitcXHRjb25zdCBpbnQgcGt0X2xlbiA9IGNhbGNfbXNzKCk7XFxuK1xcdGludCBiYWRfc2VxO1xcbitcXHRpbnQgZmlsbGVkO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZpbGxlZCA9IG51bV9wa3QgKiBwa3RfbGVuO1xcbitcXHQvKiBMb3cgMTYgYml0cyBtYXRjaCB3aXRoIHRoZSBjb3JyZWN0IGluY29taW5nIHNlcXVlbmNlIG51bWJlci4gKi9cXG4rXFx0YmFkX3NlcSA9IGZpbGxlZCAtIChJUF9NQVhQQUNLRVQgKyAxKTtcXG4rXFxuK1xcdGlmIChudW1fcGt0IFxcdTAwM2UgQklHX1RDUF9NQVhfRklMTF9DTlQpXFxuK1xcdFxcdGVycm9yKDEsIDAsIFxcXCJuZWVkICVkIHBhY2tldHMsIGFycmF5IGhvbGRzICVkXFxcIixcXG4rXFx0XFx0ICAgICAgbnVtX3BrdCwgQklHX1RDUF9NQVhfRklMTF9DTlQpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9wa3Q7IGkrKylcXG4rXFx0XFx0Y3JlYXRlX3BhY2tldChwa3RzW2ldLCBpICogcGt0X2xlbiwgMCwgcGt0X2xlbiwgMCk7XFxuK1xcdGNyZWF0ZV9wYWNrZXQobGFzdCwgYmFkX3NlcSwgMCwgcGt0X2xlbiwgMCk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX3BrdDsgaSsrKVxcbitcXHRcXHR3cml0ZV9wYWNrZXQoZmQsIHBrdHNbaV0sIHRvdGFsX2hkcl9sZW4gKyBwa3RfbGVuLCBkYWRkcik7XFxuK1xcdHdyaXRlX3BhY2tldChmZCwgbGFzdCwgdG90YWxfaGRyX2xlbiArIHBrdF9sZW4sIGRhZGRyKTtcXG4rfVxcbitcXG4gLyogSWYgaW5jb21pbmcgc2VnbWVudHMgbWFrZSB0cmFja2VkIHNlZ21lbnQgbGVuZ3RoIGV4Y2VlZFxcbiAgKiBsZWdhbCBJUCBkYXRhZ3JhbSBsZW5ndGgsIGRvIG5vdCBjb2FsZXNjZVxcbiAgKi9cXG5AQCAtMTE2MSw3ICsxMjUzLDcgQEAgc3RhdGljIHZvaWQgcmVjdl9lcnJvcihpbnQgZmQsIGludCByY3ZfZXJybm8pXFxuIHN0YXRpYyB2b2lkIGNoZWNrX3JlY3ZfcGt0cyhpbnQgZmQsIGludCAqY29ycmVjdF9wYXlsb2FkLFxcbiBcXHRcXHRcXHQgICAgaW50IGNvcnJlY3RfbnVtX3BrdHMpXFxuIHtcXG4tXFx0c3RhdGljIGNoYXIgYnVmZmVyW0lQX01BWFBBQ0tFVCArIEwyX0hMRU5fTUFYICsgMV07XFxuK1xcdHN0YXRpYyBjaGFyIGJ1ZmZlcltCSUdfVENQX1JFQ1ZfQlVGX0xFTl07XFxuIFxcdGludCBuaG9mZiA9IEVUSF9ITEVOICsgKHBwcG9lID8gUFBQT0VfU0VTX0hMRU4gOiAwKTtcXG4gXFx0c3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopKGJ1ZmZlciArIG5ob2ZmKTtcXG4gXFx0c3RydWN0IGlwdjZoZHIgKmlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoYnVmZmVyICsgbmhvZmYpO1xcbkBAIC0xNTQxLDYgKzE2MzMsMjUgQEAgc3RhdGljIHZvaWQgZ3JvX3NlbmRlcih2b2lkKVxcbiBcXHRcXHRzZW5kX2xhcmdlKHR4ZmQsIFxcdTAwMjZkYWRkciwgcmVtYWluZGVyICsgMSk7XFxuIFxcdFxcdHdyaXRlX3BhY2tldCh0eGZkLCBmaW5fcGt0LCB0b3RhbF9oZHJfbGVuLCBcXHUwMDI2ZGFkZHIpO1xcbiBcXG4rXFx0LyogYmlnIHRjcCBzdWItdGVzdHMgKi9cXG4rXFx0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFxcXCJiaWdfdGNwX2RhdGFfc2FtZVxcXCIpID09IDApIHtcXG4rXFx0XFx0c2VuZF9iaWdfdGNwKHR4ZmQsIFxcdTAwMjZkYWRkciwgY2FsY19tc3MoKSwgYmlnX3RjcF9maWxsX2NudCgpLFxcbitcXHRcXHRcXHQgICAgIGNhbGNfbXNzKCkpO1xcbitcXHRcXHR3cml0ZV9wYWNrZXQodHhmZCwgZmluX3BrdCwgdG90YWxfaGRyX2xlbiwgXFx1MDAyNmRhZGRyKTtcXG4rXFx0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFxcXCJiaWdfdGNwX2RhdGFfbHJnX3NtbFxcXCIpID09IDApIHtcXG4rXFx0XFx0aW50IHJlbWFpbmRlciA9IGNhbGNfbXNzKCkgLyAyO1xcbitcXG4rXFx0XFx0c2VuZF9iaWdfdGNwKHR4ZmQsIFxcdTAwMjZkYWRkciwgY2FsY19tc3MoKSwgYmlnX3RjcF9maWxsX2NudCgpLFxcbitcXHRcXHRcXHQgICAgIHJlbWFpbmRlcik7XFxuK1xcdFxcdHdyaXRlX3BhY2tldCh0eGZkLCBmaW5fcGt0LCB0b3RhbF9oZHJfbGVuLCBcXHUwMDI2ZGFkZHIpO1xcbitcXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXFxcImJpZ190Y3BfdGNwX3NlcVxcXCIpID09IDApIHtcXG4rXFx0XFx0c2VuZF9iaWdfdGNwX2JhZF9zZXEodHhmZCwgXFx1MDAyNmRhZGRyKTtcXG4rXFx0XFx0d3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sIFxcdTAwMjZkYWRkcik7XFxuK1xcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcXFwiYmlnX3RjcF9sYXJnZV9tYXhcXFwiKSA9PSAwKSB7XFxuK1xcdFxcdHNlbmRfYmlnX3RjcCh0eGZkLCBcXHUwMDI2ZGFkZHIsIGNhbGNfbXNzKCksIGJpZ190Y3BfbGFyZ2VfY250KCksXFxuK1xcdFxcdFxcdCAgICAgY2FsY19tc3MoKSk7XFxuK1xcdFxcdHdyaXRlX3BhY2tldCh0eGZkLCBmaW5fcGt0LCB0b3RhbF9oZHJfbGVuLCBcXHUwMDI2ZGFkZHIpO1xcbitcXG4gXFx0LyogbWFjaGluZXJ5IHN1Yi10ZXN0cyAqL1xcbiBcXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXFxcInNpbmdsZVxcXCIpID09IDApIHtcXG4gXFx0XFx0c3RhdGljIGNoYXIgYnVmW01BWF9IRFJfTEVOICsgUEFZTE9BRF9MRU5dO1xcbkBAIC0xNzY4LDYgKzE4NzksMjYgQEAgc3RhdGljIHZvaWQgZ3JvX3JlY2VpdmVyKHZvaWQpXFxuIFxcdFxcdHByaW50ZihcXFwibGFzdCBzZWdtZW50IHNlbnQgaW5kaXZpZHVhbGx5OiBcXFwiKTtcXG4gXFx0XFx0Y2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMyk7XFxuIFxcbitcXHQvKiBiaWcgdGNwIHN1Yi10ZXN0cyAqL1xcbitcXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXFxcImJpZ190Y3BfZGF0YV9zYW1lXFxcIikgPT0gMCkge1xcbitcXHRcXHRjb3JyZWN0X3BheWxvYWRbMF0gPSBiaWdfdGNwX2ZpbGxfbGVuKCkgKyBjYWxjX21zcygpO1xcbitcXHRcXHRwcmludGYoXFxcImRhdGEgcGFja2V0cyBvZiBzYW1lIHNpemUgcGFzdCBJUF9NQVhQQUNLRVQ6IFxcXCIpO1xcbitcXHRcXHRjaGVja19yZWN2X3BrdHMocnhmZCwgY29ycmVjdF9wYXlsb2FkLCAxKTtcXG4rXFx0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFxcXCJiaWdfdGNwX2RhdGFfbHJnX3NtbFxcXCIpID09IDApIHtcXG4rXFx0XFx0Y29ycmVjdF9wYXlsb2FkWzBdID0gYmlnX3RjcF9maWxsX2xlbigpICsgY2FsY19tc3MoKSAvIDI7XFxuK1xcdFxcdHByaW50ZihcXFwic21hbGxlciBsYXN0IHBhY2tldCBwYXN0IElQX01BWFBBQ0tFVDogXFxcIik7XFxuK1xcdFxcdGNoZWNrX3JlY3ZfcGt0cyhyeGZkLCBjb3JyZWN0X3BheWxvYWQsIDEpO1xcbitcXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXFxcImJpZ190Y3BfdGNwX3NlcVxcXCIpID09IDApIHtcXG4rXFx0XFx0Y29ycmVjdF9wYXlsb2FkWzBdID0gKGJpZ190Y3BfZmlsbF9jbnQoKSArIDEpICogY2FsY19tc3MoKTtcXG4rXFx0XFx0Y29ycmVjdF9wYXlsb2FkWzFdID0gY2FsY19tc3MoKTtcXG4rXFx0XFx0cHJpbnRmKFxcXCJhbGlhc2VkIHNlcSBwYXN0IElQX01BWFBBQ0tFVCBkb2Vzbid0IGNvYWxlc2NlOiBcXFwiKTtcXG4rXFx0XFx0Y2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMik7XFxuK1xcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcXFwiYmlnX3RjcF9sYXJnZV9tYXhcXFwiKSA9PSAwKSB7XFxuK1xcdFxcdGNvcnJlY3RfcGF5bG9hZFswXSA9IGJpZ190Y3BfbGFyZ2VfY250KCkgKiBjYWxjX21zcygpO1xcbitcXHRcXHRjb3JyZWN0X3BheWxvYWRbMV0gPSBjYWxjX21zcygpO1xcbitcXHRcXHRwcmludGYoXFxcInNob3VsZG4ndCBjb2FsZXNjZSBwYXN0IGdyb19tYXhfc2l6ZTogXFxcIik7XFxuK1xcdFxcdGNoZWNrX3JlY3ZfcGt0cyhyeGZkLCBjb3JyZWN0X3BheWxvYWQsIDIpO1xcbitcXG4gXFx0LyogbWFjaGluZXJ5IHN1Yi10ZXN0cyAqL1xcbiBcXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXFxcInNpbmdsZVxcXCIpID09IDApIHtcXG4gXFx0XFx0cHJpbnRmKFxcXCJzaW5nbGUgZGF0YSBwYWNrZXQ6IFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNjoyMjowMi45NjE1NTAyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxOTAwMTcyOTk1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMpIHRvIGFkZCBCSUcgVENQIEdSTyB0ZXN0IGNhc2VzLiBObyBrZXJuZWwtc3BhY2UgY29kZSBvciBjb21waWxlZCBrZXJuZWwgYXJ0aWZhY3RzICh2bWxpbnV4IG9yIGtlcm5lbCBtb2R1bGVzKSBhcmUgbW9kaWZpZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDlkMTllM2I1MjI0M2Y4ZjIwZWUyM2M3OWJlZTQxZDk4MTY2YzA5NzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAwNjoyMTo1OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5XG5pbmRleCBiN2FjMDY2MGFkYzAxLi5hYmVjZjYwYmFhNTM3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weVxuQEAgLTQwLDEzICs0MCwxNyBAQCBUZXN0IGNhc2VzOlxuICAgLSBpcF92NmV4dF9kaWZmOiAoSVB2NikgSVB2NiBleHQgaGVhZGVyIHdpdGggZGlmZmVyZW50IHBheWxvYWQgZG9lc24ndCBjb2FsZXNjZVxuICAgLSBsYXJnZV9tYXg6IFBhY2tldHMgZXhjZWVkaW5nIEdST19NQVhfU0laRSBkb24ndCBjb2FsZXNjZVxuICAgLSBsYXJnZV9yZW06IExhcmdlIHBhY2tldCByZW1haW5kZXIgaGFuZGxpbmdcbisgIC0gYmlnX3RjcF9kYXRhX3NhbWU6IFNhbWUgc2l6ZSBwYWNrZXRzIGNvYWxlc2NlIHBhc3QgSVBfTUFYUEFDS0VUXG4rICAtIGJpZ190Y3BfZGF0YV9scmdfc21sOiBTbWFsbGVyIGxhc3QgcGFja2V0IGNvYWxlc2NlcyBwYXN0IElQX01BWFBBQ0tFVFxuKyAgLSBiaWdfdGNwX3RjcF9zZXE6IFBhY2tldHMgd2l0aCAxNi1iaXQgdHJ1bmNhdGVkIHNlcW5vIGRvbid0IGNvYWxlc2NlXG4rICAtIGJpZ190Y3BfbGFyZ2VfbWF4OiBQYWNrZXRzIGV4Y2VlZGluZyB0aGUgQklHIFRDUCBsaW1pdCBkb24ndCBjb2FsZXNjZVxuIFwiXCJcIlxuIFxuIGltcG9ydCBnbG9iXG4gaW1wb3J0IG9zXG4gaW1wb3J0IHJlXG4tZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfcnVuLCBrc2Z0X2V4aXQsIGtzZnRfcHJcbi1mcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIEtzZnRGYWlsRXgsIEtzZnRYZmFpbEV4XG4rZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfcnVuLCBrc2Z0X2V4aXQsIGtzZnRfcHIsIGtzZnRfZXFcbitmcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIEtzZnRGYWlsRXgsIEtzZnRTa2lwRXgsIEtzZnRYZmFpbEV4XG4gZnJvbSBsaWIucHkgaW1wb3J0IE5ldGRldkZhbWlseSwgRXRodG9vbEZhbWlseVxuIGZyb20gbGliLnB5IGltcG9ydCBia2csIGNtZCwgY3RsX2ZpbGVfd3JpdGUsIGRlZmVyLCBldGh0b29sLCBpcFxuIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X3ZhcmlhbnRzLCBLc2Z0TmFtZWRWYXJpYW50XG5AQCAtNTUsNiArNTksOCBAQCBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF92YXJpYW50cywgS3NmdE5hbWVkVmFyaWFudFxuICMgZ3JvLmMgdXNlcyBoYXJkY29kZWQgRFBPUlQ9ODAwMFxuIEdST19EUE9SVCA9IDgwMDBcbiBcbitCSUdfVENQX0dST19NQVhfU0laRSA9IDEyODAwMFxuK1xuIFxuIGRlZiBfcmVzb2x2ZV9kbWFjKGNmZywgaXB2ZXIpOlxuICAgICBcIlwiXCJcbkBAIC05MSw2ICs5NywzNCBAQCBkZWYgX3NldF9tdHVfcmVzdG9yZShkZXYsIG10dSwgaG9zdCk6XG4gICAgICAgICBkZWZlcihpcCwgZlwibGluayBzZXQgZGV2IHtkZXZbJ2lmbmFtZSddfSBtdHUge2RldlsnbXR1J119XCIsIGhvc3Q9aG9zdClcbiBcbiBcbitkZWYgX3NldF9ncm9fc2l6ZV9yZXN0b3JlKGNmZywgc2l6ZSk6XG4rICAgIFwiXCJcIlxuKyAgICBTZXQgdGhlIGxvY2FsIGRldmljZSdzIEdSTyBzaXplIGxpbWl0cywgdGhlbiBjb25maXJtIHRoZXkgc3R1Y2suXG4rICAgIFwiXCJcIlxuK1xuKyAgICBfc2V0X210dV9yZXN0b3JlKGNmZy5kZXYsIDQwOTYsIE5vbmUpXG4rICAgIF9zZXRfbXR1X3Jlc3RvcmUoY2ZnLnJlbW90ZV9kZXYsIDQwOTYsIGNmZy5yZW1vdGUpXG4rXG4rICAgIGlmIFwiZ3JvX21heF9zaXplXCIgbm90IGluIGNmZy5kZXYgb3IgXCJncm9faXB2NF9tYXhfc2l6ZVwiIG5vdCBpbiBjZmcuZGV2OlxuKyAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcImlwcm91dGUyIGRvZXMgbm90IHJlcG9ydCB0aGUgR1JPIHNpemUgbGltaXRzXCIpXG4rXG4rICAgIGlmIChjZmcuZGV2W1wiZ3JvX21heF9zaXplXCJdID09IHNpemUgYW5kXG4rICAgICAgICAgICAgY2ZnLmRldltcImdyb19pcHY0X21heF9zaXplXCJdID09IHNpemUpOlxuKyAgICAgICAgcmV0dXJuXG4rXG4rICAgIG9sZCA9IChmXCJncm9fbWF4X3NpemUge2NmZy5kZXZbJ2dyb19tYXhfc2l6ZSddfSBcIlxuKyAgICAgICAgICAgZlwiZ3JvX2lwdjRfbWF4X3NpemUge2NmZy5kZXZbJ2dyb19pcHY0X21heF9zaXplJ119XCIpXG4rICAgIG5ldyA9IGZcImdyb19tYXhfc2l6ZSB7c2l6ZX0gZ3JvX2lwdjRfbWF4X3NpemUge3NpemV9XCJcbitcbisgICAgaXAoZlwibGluayBzZXQgZGV2IHtjZmcuaWZuYW1lfSB7bmV3fVwiKVxuKyAgICBkZWZlcihpcCwgZlwibGluayBzZXQgZGV2IHtjZmcuaWZuYW1lfSB7b2xkfVwiKVxuK1xuKyAgICBkZXYgPSBpcChcIi1kIGxpbmsgc2hvdyBkZXYgXCIgKyBjZmcuaWZuYW1lLCBqc29uPVRydWUpWzBdXG4rICAgIGtzZnRfZXEoZGV2W1wiZ3JvX21heF9zaXplXCJdLCBzaXplLCBjb21tZW50PVwiZ3JvX21heF9zaXplIG5vdCBhcHBsaWVkXCIpXG4rICAgIGtzZnRfZXEoZGV2W1wiZ3JvX2lwdjRfbWF4X3NpemVcIl0sIHNpemUsXG4rICAgICAgICAgICAgY29tbWVudD1cImdyb19pcHY0X21heF9zaXplIG5vdCBhcHBsaWVkXCIpXG4rXG4rXG4gZGVmIF9zZXRfZXRodG9vbF9mZWF0KGRldiwgY3VycmVudCwgZmVhdHMsIGhvc3Q9Tm9uZSk6XG4gICAgIHMybiA9IHtUcnVlOiBcIm9uXCIsIEZhbHNlOiBcIm9mZlwifVxuIFxuQEAgLTIzOSw3ICsyNzMsMTEgQEAgZGVmIF9zZXR1cChjZmcsIG1vZGUsIHRlc3RfbmFtZSk6XG4gICAgICAgICBmbHVzaF9wYXRoID0gZlwiL3N5cy9jbGFzcy9uZXQve2NmZy5pZm5hbWV9L2dyb19mbHVzaF90aW1lb3V0XCJcbiAgICAgICAgIGlycV9wYXRoID0gZlwiL3N5cy9jbGFzcy9uZXQve2NmZy5pZm5hbWV9L25hcGlfZGVmZXJfaGFyZF9pcnFzXCJcbiBcbi0gICAgICAgIGN0bF9maWxlX3dyaXRlKGZsdXNoX3BhdGgsIFwiMjAwMDAwXCIpXG4rICAgICAgICAjIFwiYmlnX3RjcF8qXCIgdGVzdHMgbmVlZCBhIGxvbmdlciB0aW1lb3V0LCB1c2UgMnggdGhlIHJlZ3VsYXIgdGltZW91dFxuKyAgICAgICAgaWYgdGVzdF9uYW1lLnN0YXJ0c3dpdGgoXCJiaWdfdGNwX1wiKTpcbisgICAgICAgICAgICBjdGxfZmlsZV93cml0ZShmbHVzaF9wYXRoLCBcIjQwMDAwMFwiKVxuKyAgICAgICAgZWxzZTpcbisgICAgICAgICAgICBjdGxfZmlsZV93cml0ZShmbHVzaF9wYXRoLCBcIjIwMDAwMFwiKVxuICAgICAgICAgY3RsX2ZpbGVfd3JpdGUoaXJxX3BhdGgsIFwiMTBcIilcbiBcbiAgICAgICAgIF9zZXRfZXRodG9vbF9mZWF0KGNmZy5pZm5hbWUsIGNmZy5mZWF0LFxuQEAgLTI4OSw2ICszMjcsOSBAQCBkZWYgX3NldHVwKGNmZywgbW9kZSwgdGVzdF9uYW1lKTpcbiAgICAgZXhjZXB0IEtzZnRYZmFpbEV4OlxuICAgICAgICAgcGFzc1xuIFxuKyAgICBpZiB0ZXN0X25hbWUuc3RhcnRzd2l0aChcImJpZ190Y3BfXCIpOlxuKyAgICAgICAgX3NldF9ncm9fc2l6ZV9yZXN0b3JlKGNmZywgQklHX1RDUF9HUk9fTUFYX1NJWkUpXG4rXG4gXG4gZGVmIF9ncm9fdmFyaWFudHMoKTpcbiAgICAgXCJcIlwiR2VuZXJhdG9yIHRoYXQgeWllbGRzIGFsbCBjb21iaW5hdGlvbnMgb2YgcHJvdG9jb2wgYW5kIHRlc3QgdHlwZXMuXCJcIlwiXG5AQCAtMzA0LDYgKzM0NSwxMSBAQCBkZWYgX2dyb192YXJpYW50cygpOlxuICAgICAgICAgXCJsYXJnZV9tYXhcIiwgXCJsYXJnZV9yZW1cIixcbiAgICAgXVxuIFxuKyAgICBiaWdfdGNwX3Rlc3RzID0gW1xuKyAgICAgICAgXCJiaWdfdGNwX2RhdGFfc2FtZVwiLCBcImJpZ190Y3BfZGF0YV9scmdfc21sXCIsXG4rICAgICAgICBcImJpZ190Y3BfdGNwX3NlcVwiLCBcImJpZ190Y3BfbGFyZ2VfbWF4XCIsXG4rICAgIF1cbitcbiAgICAgIyBUZXN0cyBzcGVjaWZpYyB0byBJUHY0XG4gICAgIGlwdjRfdGVzdHMgPSBbXG4gICAgICAgICBcImlwX2NzdW1cIixcbkBAIC0zMjIsNiArMzY4LDEwIEBAIGRlZiBfZ3JvX3ZhcmlhbnRzKCk6XG4gICAgICAgICBmb3IgdGVzdF9uYW1lIGluIGNvbW1vbl90ZXN0czpcbiAgICAgICAgICAgICB5aWVsZCBwcm90b2NvbCwgdGVzdF9uYW1lXG4gXG4rICAgICAgICBpZiBwcm90b2NvbCBpbiBbXCJpcHY0XCIsIFwiaXB2NlwiXTpcbisgICAgICAgICAgICBmb3IgdGVzdF9uYW1lIGluIGJpZ190Y3BfdGVzdHM6XG4rICAgICAgICAgICAgICAgIHlpZWxkIHByb3RvY29sLCB0ZXN0X25hbWVcbitcbiAgICAgICAgIGlmIHByb3RvY29sIGluIFtcImlwdjRcIiwgXCJpcGlwXCJdOlxuICAgICAgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gaXB2NF90ZXN0czpcbiAgICAgICAgICAgICAgICAgeWllbGQgcHJvdG9jb2wsIHRlc3RfbmFtZVxuQEAgLTM1OCw3ICs0MDgsOCBAQCBkZWYgcnVuX3Rlc3QoY2ZnLCBtb2RlLCBwcm90b2NvbCwgdGVzdF9uYW1lKTpcbiAgICAgICAgIGlmIHJ4X3Byb2MucmV0ID09IDQyOlxuICAgICAgICAgICAgIHJhaXNlIEtzZnRGYWlsRXgoZlwiR1JPIG92ZXItY29hbGVzY2VkIGluIHtwcm90b2NvbH0ve3Rlc3RfbmFtZX1cIilcbiBcbi0gICAgICAgIGlmIHRlc3RfbmFtZS5zdGFydHN3aXRoKFwibGFyZ2VfXCIpIGFuZCBvcy5lbnZpcm9uLmdldChcIktTRlRfTUFDSElORV9TTE9XXCIpOlxuKyAgICAgICAgaWYgKHRlc3RfbmFtZS5zdGFydHN3aXRoKChcImxhcmdlX1wiLCBcImJpZ190Y3BfXCIpKSBhbmRcbisgICAgICAgICAgICAgICAgb3MuZW52aXJvbi5nZXQoXCJLU0ZUX01BQ0hJTkVfU0xPV1wiKSk6XG4gICAgICAgICAgICAga3NmdF9wcihmXCJJZ25vcmluZyB7cHJvdG9jb2x9L3t0ZXN0X25hbWV9IGZhaWx1cmUgZHVlIHRvIHNsb3cgZW52aXJvbm1lbnRcIilcbiAgICAgICAgICAgICByZXR1cm5cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uY1xuaW5kZXggN2EzMzMxNTVkZTFhYi4uNzBiMGRlYjNjMTFmYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmNcbkBAIC00Niw2ICs0NiwxMiBAQFxuICAqICAgLSBsYXJnZV9tYXg6IGV4Y2VlZGluZyBtYXggc2l6ZVxuICAqICAgLSBsYXJnZV9yZW06IHJlbWFpbmRlciBoYW5kbGluZ1xuICAqXG4rICogYmlnX3RjcF8qOlxuKyAqICAgLSBiaWdfdGNwX2RhdGFfc2FtZTogICAgZXF1YWwgc2VnbWVudHMgY29hbGVzY2luZyBwYXN0IElQX01BWFBBQ0tFVFxuKyAqICAgLSBiaWdfdGNwX2RhdGFfbHJnX3NtbDogYSBzbWFsbGVyIGZpbmFsIHNlZ21lbnQgY2FycnlpbmcgaXQgb3ZlclxuKyAqICAgLSBiaWdfdGNwX3RjcF9zZXE6ICAgICAgMTYtYml0IHRydW5jYXRlZCBzZXF1ZW5jZSBudW1iZXIgbXVzdCBub3QgY29hbGVzY2VcbisgKiAgIC0gYmlnX3RjcF9sYXJnZV9tYXg6ICAgIGNvYWxlc2Npbmcgc3RvcHMgYXQgdGhlIGNvbmZpZ3VyZWQgbGltaXRcbisgKlxuICAqIHNpbmdsZSwgY2FwYWNpdHk6XG4gICogIEJvcmluZyBjYXNlcyB1c2VkIHRvIHRlc3QgY29hbGVzY2luZyBtYWNoaW5lcnkgaXRzZWxmIGFuZCBzdGF0c1xuICAqICBtb3JlIHRoYW4gcHJvdG9jb2wgYmVoYXZpb3IuXG5AQCAtMTEwLDYgKzExNiwxNiBAQFxuIFxuICNkZWZpbmUgRVhJVF9PVkVSX0NPQUxFU0NFXHQ0MlxuIFxuKy8qIE11c3QgbWF0Y2ggQklHX1RDUF9HUk9fTUFYX1NJWkUgaW4gZ3JvX2xpYi5weS4gKi9cbisjZGVmaW5lIEJJR19UQ1BfR1JPX01BWF9TSVpFXHQxMjgwMDBcbitcbisjZGVmaW5lIEJJR19UQ1BfUkVDVl9CVUZfTEVOIFxcXG4rXHQoQklHX1RDUF9HUk9fTUFYX1NJWkUgKyBNQVhfTVNTICsgTDJfSExFTl9NQVgpXG4rI2RlZmluZSBCSUdfVENQX01JTl9NU1NcdFx0KEFTU1VNRURfTVRVIC0gKE1BWF9IRFJfTEVOIC0gRVRIX0hMRU4pKVxuKyNkZWZpbmUgQklHX1RDUF9NQVhfRklMTF9DTlQgXFxcbitcdCgoaW50KSgoQklHX1RDUF9HUk9fTUFYX1NJWkUgLSAxIC0gKE1BWF9IRFJfTEVOIC0gRVRIX0hMRU4pKSAvIFxcXG4rXHQgICAgICAgQklHX1RDUF9NSU5fTVNTKSlcbitcbiAjZGVmaW5lIGlwdjZfb3B0bGVuKHApICAoKChwKS1cdTAwM2VoZHJsZW4rMSkgXHUwMDNjXHUwMDNjIDMpIC8qIGNhbGN1bGF0ZSBJUHY2IGV4dGVuc2lvbiBoZWFkZXIgbGVuICovXG4gI2RlZmluZSBCVUlMRF9CVUdfT04oY29uZGl0aW9uKSAoKHZvaWQpc2l6ZW9mKGNoYXJbMSAtIDIqISEoY29uZGl0aW9uKV0pKVxuIFxuQEAgLTE2Niw2ICsxODIsMjcgQEAgc3RhdGljIGludCBudW1fbGFyZ2VfcGt0KHZvaWQpXG4gXHRyZXR1cm4gbWF4X3BheWxvYWQoKSAvIGNhbGNfbXNzKCk7XG4gfVxuIFxuKy8qIEhvdyBtYW55IG1heGltdW0gc2l6ZWQgc2VnbWVudHMgZml0IHVuZGVyIHRoZSBjb25maWd1cmVkIGxpbWl0LiAqL1xuK3N0YXRpYyBpbnQgYmlnX3RjcF9sYXJnZV9jbnQodm9pZClcbit7XG4rXHRyZXR1cm4gKEJJR19UQ1BfR1JPX01BWF9TSVpFIC0gMSAtICh0b3RhbF9oZHJfbGVuIC0gRVRIX0hMRU4pKSAvXG4rXHQgICAgICAgY2FsY19tc3MoKTtcbit9XG4rXG4rLyogSG93IG1hbnkgY2FsY19tc3MoKSBzaXplZCBzZWdtZW50cyBhcmUgbmVlZGVkIHRvIHNhdGlzZnkgdGhlXG4rICogZm9sbG93aW5nIGNvbmRpdGlvbjpcbisgKiBwa3RfY291bnQgKiBjYWxjX21zcygpIFx1MDAzYyBJUF9NQVhQQUNLRVQgXHUwMDNjIChwa3RfY291bnQgKyAxKSAqIGNhbGNfbXNzKClcbisgKi9cbitzdGF0aWMgaW50IGJpZ190Y3BfZmlsbF9jbnQodm9pZClcbit7XG4rXHRyZXR1cm4gSVBfTUFYUEFDS0VUIC8gY2FsY19tc3MoKTtcbit9XG4rXG4rc3RhdGljIGludCBiaWdfdGNwX2ZpbGxfbGVuKHZvaWQpXG4re1xuK1x0cmV0dXJuIGJpZ190Y3BfZmlsbF9jbnQoKSAqIGNhbGNfbXNzKCk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHZsb2coY29uc3QgY2hhciAqZm10LCAuLi4pXG4ge1xuIFx0dmFfbGlzdCBhcmdzO1xuQEAgLTU2MCw2ICs1OTcsNjEgQEAgc3RhdGljIHZvaWQgc2VuZF9kYXRhX3BrdHMoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHJfbGwgKmRhZGRyLFxuIFx0d3JpdGVfcGFja2V0KGZkLCBidWYsIHRvdGFsX2hkcl9sZW4gKyBwYXlsb2FkX2xlbjIsIGRhZGRyKTtcbiB9XG4gXG4rLyogU2VuZCBudW1fcGt0IHNlZ21lbnRzIG9mIHBrdF9sZW4gYnl0ZXMsIHRoZW4gb25lIG9mIHJlbWFpbmRlciBsZW4uICovXG4rc3RhdGljIHZvaWQgc2VuZF9iaWdfdGNwKGludCBmZCwgc3RydWN0IHNvY2thZGRyX2xsICpkYWRkciwgaW50IHBrdF9sZW4sXG4rXHRcdFx0IGludCBudW1fcGt0LCBpbnQgcmVtYWluZGVyKVxuK3tcbitcdHN0YXRpYyBjaGFyIHBrdHNbQklHX1RDUF9NQVhfRklMTF9DTlRdW01BWF9IRFJfTEVOICsgTUFYX01TU107XG4rXHRzdGF0aWMgY2hhciBsYXN0W01BWF9IRFJfTEVOICsgTUFYX01TU107XG4rXHRjb25zdCBpbnQgZmlsbGVkID0gbnVtX3BrdCAqIHBrdF9sZW47XG4rXHRpbnQgaTtcbitcbitcdGlmIChudW1fcGt0IFx1MDAzZSBCSUdfVENQX01BWF9GSUxMX0NOVClcbitcdFx0ZXJyb3IoMSwgMCwgXCJuZWVkICVkIHBhY2tldHMsIGFycmF5IGhvbGRzICVkXCIsXG4rXHRcdCAgICAgIG51bV9wa3QsIEJJR19UQ1BfTUFYX0ZJTExfQ05UKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9wa3Q7IGkrKylcbitcdFx0Y3JlYXRlX3BhY2tldChwa3RzW2ldLCBpICogcGt0X2xlbiwgMCwgcGt0X2xlbiwgMCk7XG4rXHRjcmVhdGVfcGFja2V0KGxhc3QsIGZpbGxlZCwgMCwgcmVtYWluZGVyLCAwKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9wa3Q7IGkrKylcbitcdFx0d3JpdGVfcGFja2V0KGZkLCBwa3RzW2ldLCB0b3RhbF9oZHJfbGVuICsgcGt0X2xlbiwgZGFkZHIpO1xuK1x0d3JpdGVfcGFja2V0KGZkLCBsYXN0LCB0b3RhbF9oZHJfbGVuICsgcmVtYWluZGVyLCBkYWRkcik7XG4rfVxuK1xuKy8qIEluIEJJRyBUQ1AgY29uZmlndXJhdGlvbiwgdGhlIHRvdGFsIGFnZ3JlZ2F0ZSBsZW5ndGggY2FuXG4rICogYmUgZ3JlYXRlciB0aGFuIHRoZSBsZWdhY3kgSVBfTUFYUEFDS0VULiBTaW5jZSB0aGUgYWdncmVnYXRlXG4rICogbGVuZ3RoIGlzIHVzZWQgaW4gY2FsY3VsYXRpbmcgdGhlIHNlcXVlbmNlIG51bWJlcnMsXG4rICogc2VuZCBhIHBhY2tldCB3aXRoIGEgc2VxdWVuY2UgbnVtYmVyIHRoYXQgZGlmZmVycyBieSBJUF9NQVhQQUNLRVQgKyAxLFxuKyAqIHRvIHRlc3QgYWdhaW5zdCB0cnVuY2F0aW9uIGJ1Z3MuXG4rICovXG4rc3RhdGljIHZvaWQgc2VuZF9iaWdfdGNwX2JhZF9zZXEoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHJfbGwgKmRhZGRyKVxuK3tcbitcdHN0YXRpYyBjaGFyIHBrdHNbQklHX1RDUF9NQVhfRklMTF9DTlRdW01BWF9IRFJfTEVOICsgTUFYX01TU107XG4rXHRjb25zdCBpbnQgbnVtX3BrdCA9IGJpZ190Y3BfZmlsbF9jbnQoKSArIDE7XG4rXHRzdGF0aWMgY2hhciBsYXN0W01BWF9IRFJfTEVOICsgTUFYX01TU107XG4rXHRjb25zdCBpbnQgcGt0X2xlbiA9IGNhbGNfbXNzKCk7XG4rXHRpbnQgYmFkX3NlcTtcbitcdGludCBmaWxsZWQ7XG4rXHRpbnQgaTtcbitcbitcdGZpbGxlZCA9IG51bV9wa3QgKiBwa3RfbGVuO1xuK1x0LyogTG93IDE2IGJpdHMgbWF0Y2ggd2l0aCB0aGUgY29ycmVjdCBpbmNvbWluZyBzZXF1ZW5jZSBudW1iZXIuICovXG4rXHRiYWRfc2VxID0gZmlsbGVkIC0gKElQX01BWFBBQ0tFVCArIDEpO1xuK1xuK1x0aWYgKG51bV9wa3QgXHUwMDNlIEJJR19UQ1BfTUFYX0ZJTExfQ05UKVxuK1x0XHRlcnJvcigxLCAwLCBcIm5lZWQgJWQgcGFja2V0cywgYXJyYXkgaG9sZHMgJWRcIixcbitcdFx0ICAgICAgbnVtX3BrdCwgQklHX1RDUF9NQVhfRklMTF9DTlQpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3BrdDsgaSsrKVxuK1x0XHRjcmVhdGVfcGFja2V0KHBrdHNbaV0sIGkgKiBwa3RfbGVuLCAwLCBwa3RfbGVuLCAwKTtcbitcdGNyZWF0ZV9wYWNrZXQobGFzdCwgYmFkX3NlcSwgMCwgcGt0X2xlbiwgMCk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fcGt0OyBpKyspXG4rXHRcdHdyaXRlX3BhY2tldChmZCwgcGt0c1tpXSwgdG90YWxfaGRyX2xlbiArIHBrdF9sZW4sIGRhZGRyKTtcbitcdHdyaXRlX3BhY2tldChmZCwgbGFzdCwgdG90YWxfaGRyX2xlbiArIHBrdF9sZW4sIGRhZGRyKTtcbit9XG4rXG4gLyogSWYgaW5jb21pbmcgc2VnbWVudHMgbWFrZSB0cmFja2VkIHNlZ21lbnQgbGVuZ3RoIGV4Y2VlZFxuICAqIGxlZ2FsIElQIGRhdGFncmFtIGxlbmd0aCwgZG8gbm90IGNvYWxlc2NlXG4gICovXG5AQCAtMTE2MSw3ICsxMjUzLDcgQEAgc3RhdGljIHZvaWQgcmVjdl9lcnJvcihpbnQgZmQsIGludCByY3ZfZXJybm8pXG4gc3RhdGljIHZvaWQgY2hlY2tfcmVjdl9wa3RzKGludCBmZCwgaW50ICpjb3JyZWN0X3BheWxvYWQsXG4gXHRcdFx0ICAgIGludCBjb3JyZWN0X251bV9wa3RzKVxuIHtcbi1cdHN0YXRpYyBjaGFyIGJ1ZmZlcltJUF9NQVhQQUNLRVQgKyBMMl9ITEVOX01BWCArIDFdO1xuK1x0c3RhdGljIGNoYXIgYnVmZmVyW0JJR19UQ1BfUkVDVl9CVUZfTEVOXTtcbiBcdGludCBuaG9mZiA9IEVUSF9ITEVOICsgKHBwcG9lID8gUFBQT0VfU0VTX0hMRU4gOiAwKTtcbiBcdHN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKShidWZmZXIgKyBuaG9mZik7XG4gXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShidWZmZXIgKyBuaG9mZik7XG5AQCAtMTU0MSw2ICsxNjMzLDI1IEBAIHN0YXRpYyB2b2lkIGdyb19zZW5kZXIodm9pZClcbiBcdFx0c2VuZF9sYXJnZSh0eGZkLCBcdTAwMjZkYWRkciwgcmVtYWluZGVyICsgMSk7XG4gXHRcdHdyaXRlX3BhY2tldCh0eGZkLCBmaW5fcGt0LCB0b3RhbF9oZHJfbGVuLCBcdTAwMjZkYWRkcik7XG4gXG4rXHQvKiBiaWcgdGNwIHN1Yi10ZXN0cyAqL1xuK1x0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFwiYmlnX3RjcF9kYXRhX3NhbWVcIikgPT0gMCkge1xuK1x0XHRzZW5kX2JpZ190Y3AodHhmZCwgXHUwMDI2ZGFkZHIsIGNhbGNfbXNzKCksIGJpZ190Y3BfZmlsbF9jbnQoKSxcbitcdFx0XHQgICAgIGNhbGNfbXNzKCkpO1xuK1x0XHR3cml0ZV9wYWNrZXQodHhmZCwgZmluX3BrdCwgdG90YWxfaGRyX2xlbiwgXHUwMDI2ZGFkZHIpO1xuK1x0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFwiYmlnX3RjcF9kYXRhX2xyZ19zbWxcIikgPT0gMCkge1xuK1x0XHRpbnQgcmVtYWluZGVyID0gY2FsY19tc3MoKSAvIDI7XG4rXG4rXHRcdHNlbmRfYmlnX3RjcCh0eGZkLCBcdTAwMjZkYWRkciwgY2FsY19tc3MoKSwgYmlnX3RjcF9maWxsX2NudCgpLFxuK1x0XHRcdCAgICAgcmVtYWluZGVyKTtcbitcdFx0d3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sIFx1MDAyNmRhZGRyKTtcbitcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcImJpZ190Y3BfdGNwX3NlcVwiKSA9PSAwKSB7XG4rXHRcdHNlbmRfYmlnX3RjcF9iYWRfc2VxKHR4ZmQsIFx1MDAyNmRhZGRyKTtcbitcdFx0d3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sIFx1MDAyNmRhZGRyKTtcbitcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcImJpZ190Y3BfbGFyZ2VfbWF4XCIpID09IDApIHtcbitcdFx0c2VuZF9iaWdfdGNwKHR4ZmQsIFx1MDAyNmRhZGRyLCBjYWxjX21zcygpLCBiaWdfdGNwX2xhcmdlX2NudCgpLFxuK1x0XHRcdCAgICAgY2FsY19tc3MoKSk7XG4rXHRcdHdyaXRlX3BhY2tldCh0eGZkLCBmaW5fcGt0LCB0b3RhbF9oZHJfbGVuLCBcdTAwMjZkYWRkcik7XG4rXG4gXHQvKiBtYWNoaW5lcnkgc3ViLXRlc3RzICovXG4gXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXCJzaW5nbGVcIikgPT0gMCkge1xuIFx0XHRzdGF0aWMgY2hhciBidWZbTUFYX0hEUl9MRU4gKyBQQVlMT0FEX0xFTl07XG5AQCAtMTc2OCw2ICsxODc5LDI2IEBAIHN0YXRpYyB2b2lkIGdyb19yZWNlaXZlcih2b2lkKVxuIFx0XHRwcmludGYoXCJsYXN0IHNlZ21lbnQgc2VudCBpbmRpdmlkdWFsbHk6IFwiKTtcbiBcdFx0Y2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMyk7XG4gXG4rXHQvKiBiaWcgdGNwIHN1Yi10ZXN0cyAqL1xuK1x0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFwiYmlnX3RjcF9kYXRhX3NhbWVcIikgPT0gMCkge1xuK1x0XHRjb3JyZWN0X3BheWxvYWRbMF0gPSBiaWdfdGNwX2ZpbGxfbGVuKCkgKyBjYWxjX21zcygpO1xuK1x0XHRwcmludGYoXCJkYXRhIHBhY2tldHMgb2Ygc2FtZSBzaXplIHBhc3QgSVBfTUFYUEFDS0VUOiBcIik7XG4rXHRcdGNoZWNrX3JlY3ZfcGt0cyhyeGZkLCBjb3JyZWN0X3BheWxvYWQsIDEpO1xuK1x0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFwiYmlnX3RjcF9kYXRhX2xyZ19zbWxcIikgPT0gMCkge1xuK1x0XHRjb3JyZWN0X3BheWxvYWRbMF0gPSBiaWdfdGNwX2ZpbGxfbGVuKCkgKyBjYWxjX21zcygpIC8gMjtcbitcdFx0cHJpbnRmKFwic21hbGxlciBsYXN0IHBhY2tldCBwYXN0IElQX01BWFBBQ0tFVDogXCIpO1xuK1x0XHRjaGVja19yZWN2X3BrdHMocnhmZCwgY29ycmVjdF9wYXlsb2FkLCAxKTtcbitcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcImJpZ190Y3BfdGNwX3NlcVwiKSA9PSAwKSB7XG4rXHRcdGNvcnJlY3RfcGF5bG9hZFswXSA9IChiaWdfdGNwX2ZpbGxfY250KCkgKyAxKSAqIGNhbGNfbXNzKCk7XG4rXHRcdGNvcnJlY3RfcGF5bG9hZFsxXSA9IGNhbGNfbXNzKCk7XG4rXHRcdHByaW50ZihcImFsaWFzZWQgc2VxIHBhc3QgSVBfTUFYUEFDS0VUIGRvZXNuJ3QgY29hbGVzY2U6IFwiKTtcbitcdFx0Y2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMik7XG4rXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXCJiaWdfdGNwX2xhcmdlX21heFwiKSA9PSAwKSB7XG4rXHRcdGNvcnJlY3RfcGF5bG9hZFswXSA9IGJpZ190Y3BfbGFyZ2VfY250KCkgKiBjYWxjX21zcygpO1xuK1x0XHRjb3JyZWN0X3BheWxvYWRbMV0gPSBjYWxjX21zcygpO1xuK1x0XHRwcmludGYoXCJzaG91bGRuJ3QgY29hbGVzY2UgcGFzdCBncm9fbWF4X3NpemU6IFwiKTtcbitcdFx0Y2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMik7XG4rXG4gXHQvKiBtYWNoaW5lcnkgc3ViLXRlc3RzICovXG4gXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXCJzaW5nbGVcIikgPT0gMCkge1xuIFx0XHRwcmludGYoXCJzaW5nbGUgZGF0YSBwYWNrZXQ6IFwiKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDA2OjIyOjAyLjk2MTU1MTYyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTMyOTc2NTkzNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGggRnV6emluZyBEZWNpc2lvbiBQcm9jZXNzKipcblxuT2theSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBzZXJpZXMgaXMgd29ydGggZnV6emluZyB3aXRoIHN5emthbGxlci4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBkaWZmLiBMZXQncyBzZWUuLi4gaXQgdG91Y2hlcyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weWAgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jYC4gSG9sZCBvbiBhIHNlY29uZC4uLiB0aG9zZSBhcmUgYm90aCB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2AhXG5cblJpZ2h0LCBJIG5lZWQgdG8gYXBwbHkgbXkgcnVsZXMgaGVyZS4gSSBrbm93IHRoZSBjcml0ZXJpYSBmb3IgKm5vdCogZnV6emluZywgYW5kIGl0J3MgcHJldHR5IGNsZWFyLWN1dC4gUnVsZSBudW1iZXIgdHdvIHNheXMgSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmICphbGwqIHRoZSBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gdGhlIGNhdGVnb3JpZXMgb2Ygbm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlcywgcGFydGljdWxhcmx5IHRoaW5ncyBsaWtlIG1vZGlmaWNhdGlvbnMgdG8gc2VsZi10ZXN0cyBvciBzY3JpcHRzIHRoYXQgZG9uJ3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2Ugb3IgbW9kdWxlcy4gQmluZ28hIFRoZXNlIGZpbGVzIGFyZSByaWdodCBpbiB0aGF0IGNhdGVnb3J5LlxuXG5UbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBnaXQgZGlmZmAgb3IgYGdpdCBzaG93YCB0byBtYWtlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IG5vIG90aGVyLCBsZXNzIG9idmlvdXMsIGZpbGVzIHdlcmUgdG91Y2hlZCBpbiB0aGUgSEVBRCBjb21taXQuIEJ1dCBiYXNlZCBvbiB3aGF0IEkgc2VlIGhlcmUsIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyBhIG5vLWdvIGZvciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzAxLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDY6MjI6MTYuMjU5MjE3MTY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjQ3NjQ5MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQklHX1RDUF9HUk9fTUFYX1NJWkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weT02MD1HUk9fRFBPUlQgPSA4MDAwXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weS02MS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5OjYyOkJJR19UQ1BfR1JPX01BWF9TSVpFID0gMTI4MDAwXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weS02My1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHk9MjU1PWRlZiBfc2V0dXAoY2ZnLCBtb2RlLCB0ZXN0X25hbWUpOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weS0zMzAtICAgIGlmIHRlc3RfbmFtZS5zdGFydHN3aXRoKFxcXCJiaWdfdGNwX1xcXCIpOlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHk6MzMxOiAgICAgICAgX3NldF9ncm9fc2l6ZV9yZXN0b3JlKGNmZywgQklHX1RDUF9HUk9fTUFYX1NJWkUpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weS0zMzItXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jLTExOC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jOjExOTovKiBNdXN0IG1hdGNoIEJJR19UQ1BfR1JPX01BWF9TSVpFIGluIGdyb19saWIucHkuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYzoxMjA6I2RlZmluZSBCSUdfVENQX0dST19NQVhfU0laRVxcdDEyODAwMFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMtMTIxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMtMTIyLSNkZWZpbmUgQklHX1RDUF9SRUNWX0JVRl9MRU4gXFxcXFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmM6MTIzOlxcdChCSUdfVENQX0dST19NQVhfU0laRSArIE1BWF9NU1MgKyBMMl9ITEVOX01BWClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jLTEyNC0jZGVmaW5lIEJJR19UQ1BfTUlOX01TU1xcdFxcdChBU1NVTUVEX01UVSAtIChNQVhfSERSX0xFTiAtIEVUSF9ITEVOKSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jLTEyNS0jZGVmaW5lIEJJR19UQ1BfTUFYX0ZJTExfQ05UIFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jOjEyNjpcXHQoKGludCkoKEJJR19UQ1BfR1JPX01BWF9TSVpFIC0gMSAtIChNQVhfSERSX0xFTiAtIEVUSF9ITEVOKSkgLyBcXFxcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYy0xMjctXFx0ICAgICAgIEJJR19UQ1BfTUlOX01TUykpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jPTE4Nj1zdGF0aWMgaW50IGJpZ190Y3BfbGFyZ2VfY250KHZvaWQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYy0xODcte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmM6MTg4OlxcdHJldHVybiAoQklHX1RDUF9HUk9fTUFYX1NJWkUgLSAxIC0gKHRvdGFsX2hkcl9sZW4gLSBFVEhfSExFTikpIC9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jLTE4OS1cXHQgICAgICAgY2FsY19tc3MoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDY6MjI6MTguMzIzOTg5MjQzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzYzOTI2NzE5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBObyBGdXp6aW5nIFJlcXVpcmVkKipcblxuT2theSwgbGV0J3MgcXVpY2tseSB2ZXJpZnkuIEEgcXVpY2sgYGdpdCBsb2cgLW4gMSAtLXN0YXRgIGNoZWNrIG9yIGxvb2sgZm9yIGFueSBvdGhlciB1bnNlZW4gbW9kaWZpY2F0aW9ucy4gSXQgYXBwZWFycyB0aGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gIGRpcmVjdG9yeS4gVGhlIGRpZmYgY29uZmlybXMgdGhpcywgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5YCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmNgLlxuXG5HaXZlbiBTRUNUSU9OIDIncyBcIk5lZ2F0aXZlIENyaXRlcmlhLFwiIHRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGUgY2hhbmdlcyBhcmUgbm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUuIFRoZXkgZmFsbCBzcXVhcmVseSB1bmRlciB0aGUgY2F0ZWdvcnkgb2YgdXNlci1zcGFjZSBzZWxmLXRlc3RzIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYCwgd2hpY2ggYnkgZGVmaW5pdGlvbiBkbyAqbm90KiBhZmZlY3QgdGhlIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3IgYW55IG1vZHVsZXMuXG5cblRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpczpcblxuKiAgIGBXb3J0aEZ1enppbmcgPSBGYWxzZWAuXG4qICAgYEZvY3VzU3ltYm9scyA9IFtdYC5cbiogICBgRW5hYmxlQ29uZmlncyA9IFtdYC5cblxuVGhlIHJhdGlvbmFsZSBpcyBwcmVjaXNlLiBUaGUgcGF0Y2ggKm9ubHkqIGFkZHMgQklHIFRDUCB0ZXN0IGNhc2VzIGZvciBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSB0byB0aGUgc2VsZi10ZXN0IGNvZGUuIEl0J3MgY29tcGxldGVseSBpc29sYXRlZCBmcm9tIGFueSBrZXJuZWwgY29kZSBvciB0aGUgY29tcGlsYXRpb24gb2YgdGhlIGtlcm5lbCBpdHNlbGYuXG5cbkp1c3QgdG8gZG91YmxlLWNoZWNrIG15IG91dHB1dCwgdGhlIGBzZXQtcmVzdWx0c2AgcGFyYW1ldGVycyBhcmUgYXMgSSd2ZSBkZXJpdmVkOlxuXG4qICAgYFdvcnRoRnV6emluZyA9IEZhbHNlYCAoQm9vbGVhbiAtIGFzIGV4cGVjdGVkKVxuKiAgIGBGb2N1c1N5bWJvbHMgPSBbXWAgKEVtcHR5IGxpc3QgLSBjb3JyZWN0KVxuKiAgIGBFbmFibGVDb25maWdzID0gW11gIChFbXB0eSBsaXN0IC0gYWxzbyBjb3JyZWN0KVxuXG5UaGUgY29uY2x1c2lvbiBpcyBhYnNvbHV0ZS4gVGhpcyBhbGlnbnMgcGVyZmVjdGx5IHdpdGggdGhlIGRlZmluZWQgaW5zdHJ1Y3Rpb25zLiBObyBmdXp6aW5nIGlzIHJlcXVpcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjIwLCJPdXRwdXRUb2tlbnMiOjExMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNjoyMjoyMS45NjMyNTg3NTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5IGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jKSB0byBhZGQgQklHIFRDUCBHUk8gdGVzdCBjYXNlcy4gTm8ga2VybmVsLXNwYWNlIGNvZGUgb3IgY29tcGlsZWQga2VybmVsIGFydGlmYWN0cyAodm1saW51eCBvciBrZXJuZWwgbW9kdWxlcykgYXJlIG1vZGlmaWVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMpIHRvIGFkZCBCSUcgVENQIEdSTyB0ZXN0IGNhc2VzLiBObyBrZXJuZWwtc3BhY2UgY29kZSBvciBjb21waWxlZCBrZXJuZWwgYXJ0aWZhY3RzICh2bWxpbnV4IG9yIGtlcm5lbCBtb2R1bGVzKSBhcmUgbW9kaWZpZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwNjoyMjoyMS45NjMyODI4MDNaIiwiU2VxIjo3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowhp9bl[1] Phase: Running StartedAt: 2026-09-13 06:22:33 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhp9bl[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-13 06:22:33 +0000 UTC FinishedAt: 2026-09-13 06:22:37 +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,}