Name: series-workflow7wg27 Phase: Failed StartedAt: 2026-09-11 03:00:27 +0000 UTC FinishedAt: 2026-09-11 03:02:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7wg27[0] Phase: Succeeded StartedAt: 2026-09-11 03:00:27 +0000 UTC FinishedAt: 2026-09-11 03:02:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7wg27[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 03:00:27 +0000 UTC FinishedAt: 2026-09-11 03:02:18 +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+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSB0b29saW5nIChicGZ0b29sKSBhbmQgc2VsZnRlc3RzIHVuZGVyIHRvb2xzL2JwZi9icGZ0b29sIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYuIE5vIGtlcm5lbC1zcGFjZSBjb2RlICh2bWxpbnV4IG9yIGtlcm5lbCBtb2R1bGVzKSBpcyBhZmZlY3RlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwYWE4YTNkZjJjMTQ3MGVhMDM1OWY5ZmQyZmUyMDAzNjgwYjY0NDRmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDM6MDI6MDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLWZlYXR1cmUucnN0IGIvdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLWZlYXR1cmUucnN0XG5pbmRleCBjN2Y4Mzc4OThiYzc3Li41OTdmMjQyNmQyNTU1IDEwMDY0NFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLWZlYXR1cmUucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtZmVhdHVyZS5yc3RcbkBAIC0yOCw3ICYjNDM7MjgsNyBAQCBGRUFUVVJFIENPTU1BTkRTXG4gfCAqKmJwZnRvb2wqKiAqKmZlYXR1cmUgaGVscCoqXG4gfFxuIHwgKkNPTVBPTkVOVCogOj0geyAqKmtlcm5lbCoqIHwgKipkZXYqKiAqTkFNRSogfVxuLXwgKkdST1VQKiA6PSB7ICoqcHJvZ190eXBlcyoqIHwgKiptYXBfdHlwZXMqKiB8ICoqYXR0YWNoX3R5cGVzKiogfCAqKmxpbmtfdHlwZXMqKiB8ICoqaGVscGVycyoqIH1cbiYjNDM7fCAqR1JPVVAqIDo9IHsgKipwcm9nX3R5cGVzKiogfCAqKm1hcF90eXBlcyoqIHwgKiptYXBfY3JlYXRlX2ZsYWdzKiogfCAqKmF0dGFjaF90eXBlcyoqIHwgKipsaW5rX3R5cGVzKiogfCAqKmhlbHBlcnMqKiB9XG4gXG4gREVTQ1JJUFRJT05cbiA9PT09PT09PT09PVxuQEAgLTY4LDEyICYjNDM7NjgsMTQgQEAgYnBmdG9vbCBmZWF0dXJlIHByb2JlIGRldiAqTkFNRSogW2Z1bGxdIFttYWNyb3MgW3ByZWZpeCAqUFJFRklYKl1dXG4gXG4gYnBmdG9vbCBmZWF0dXJlIGxpc3RfYnVpbHRpbnMgKkdST1VQKlxuICAgICBMaXN0IGl0ZW1zIGtub3duIHRvIGJwZnRvb2wuIFRoZXNlIGNhbiBiZSBCUEYgcHJvZ3JhbSB0eXBlc1xuLSAgICAoKipwcm9nX3R5cGVzKiopLCBCUEYgbWFwIHR5cGVzICgqKm1hcF90eXBlcyoqKSwgYXR0YWNoIHR5cGVzXG4mIzQzOyAgICAoKipwcm9nX3R5cGVzKiopLCBCUEYgbWFwIHR5cGVzICgqKm1hcF90eXBlcyoqKSwgbWFwIGNyZWF0aW9uIGZsYWdzXG4mIzQzOyAgICAoKiptYXBfY3JlYXRlX2ZsYWdzKiopLCBhdHRhY2ggdHlwZXNcbiAgICAgKCoqYXR0YWNoX3R5cGVzKiopLCBsaW5rIHR5cGVzICgqKmxpbmtfdHlwZXMqKiksIG9yIEJQRiBoZWxwZXIgZnVuY3Rpb25zXG4gICAgICgqKmhlbHBlcnMqKikuIFRoZSBjb21tYW5kIGRvZXMgbm90IHByb2JlIHRoZSBzeXN0ZW0sIGJ1dCBzaW1wbHkgbGlzdHMgdGhlXG4gICAgIGVsZW1lbnRzIHRoYXQgYnBmdG9vbCBrbm93cyBmcm9tIGNvbXBpbGF0aW9uIHRpbWUsIGFzIHByb3ZpZGVkIGZyb20gbGliYnBmXG4tICAgIChmb3IgYWxsIG9iamVjdCB0eXBlcykgb3IgZnJvbSB0aGUgQlBGIFVBUEkgaGVhZGVyIChsaXN0IG9mIGhlbHBlcnMpLiBUaGlzXG4tICAgIGNhbiBiZSB1c2VkIGluIHNjcmlwdHMgdG8gaXRlcmF0ZSBvdmVyIEJQRiB0eXBlcyBvciBoZWxwZXJzLlxuJiM0MzsgICAgKGZvciBhbGwgb2JqZWN0IHR5cGVzKSBvciBmcm9tIHRoZSBCUEYgVUFQSSBoZWFkZXIgKGhlbHBlcnMgYW5kIG1hcCBjcmVhdGlvblxuJiM0MzsgICAgZmxhZ3MpLiBUaGlzIGNhbiBiZSB1c2VkIGluIHNjcmlwdHMgdG8gaXRlcmF0ZSBvdmVyIEJQRiB0eXBlcywgaGVscGVycywgb3JcbiYjNDM7ICAgIHRoZSBzeW1ib2xpYyBmbGFncyBhY2NlcHRlZCBieSAqKm1hcCBjcmVhdGUqKi5cbiBcbiBicGZ0b29sIGZlYXR1cmUgaGVscFxuICAgICBQcmludCBzaG9ydCBoZWxwIG1lc3NhZ2UuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLW1hcC5yc3QgYi90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtbWFwLnJzdFxuaW5kZXggNWRhZjNkZTVjNzQ0Ni4uNWE1YzI2Zjc4OWNkMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1tYXAucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtbWFwLnJzdFxuQEAgLTQ4LDYgJiM0Mzs0OCw3IEBAIE1BUCBDT01NQU5EU1xuIHwgKkRBVEEqIDo9IHsgWyoqaGV4KipdICpCWVRFUyogfVxuIHwgKlBST0cqIDo9IHsgKippZCoqICpQUk9HX0lEKiB8ICoqcGlubmVkKiogKkZJTEUqIHwgKip0YWcqKiAqUFJPR19UQUcqIHwgKipuYW1lKiogKlBST0dfTkFNRSogfVxuIHwgKlZBTFVFKiA6PSB7ICpEQVRBKiB8ICpNQVAqIHwgKlBST0cqIH1cbiYjNDM7fCAqRkxBR1MqIDo9IHsgaW50ZWdlciB8ICoqQlBGX0ZfTkFNRVssQlBGX0ZfTkFNRS4uLl0qKiB9XG4gfCAqVVBEQVRFX0ZMQUdTKiA6PSB7ICoqYW55KiogfCAqKmV4aXN0KiogfCAqKm5vZXhpc3QqKiB9XG4gfCAqVFlQRSogOj0geyAqKmhhc2gqKiB8ICoqYXJyYXkqKiB8ICoqcHJvZ19hcnJheSoqIHwgKipwZXJmX2V2ZW50X2FycmF5KiogfCAqKnBlcmNwdV9oYXNoKipcbiB8ICAgICB8ICoqcGVyY3B1X2FycmF5KiogfCAqKnN0YWNrX3RyYWNlKiogfCAqKmNncm91cF9hcnJheSoqIHwgKipscnVfaGFzaCoqXG5AQCAtNzYsOSAmIzQzOzc3LDE2IEBAIGJwZnRvb2wgbWFwIHsgc2hvdyB8IGxpc3QgfSAgIFsqTUFQKl1cbiBicGZ0b29sIG1hcCBjcmVhdGUgKkZJTEUqIHR5cGUgKlRZUEUqIGtleSAqS0VZX1NJWkUqIHZhbHVlICpWQUxVRV9TSVpFKiAgZW50cmllcyAqTUFYX0VOVFJJRVMqIG5hbWUgKk5BTUUqIFtmbGFncyAqRkxBR1MqXSBbaW5uZXJfbWFwICpNQVAqXSBbb2ZmbG9hZF9kZXYgKk5BTUUqXVxuICAgICBDcmVhdGUgYSBuZXcgbWFwIHdpdGggZ2l2ZW4gcGFyYW1ldGVycyBhbmQgcGluIGl0IHRvICpicGZmcyogYXMgKkZJTEUqLlxuIFxuLSAgICAqRkxBR1MqIHNob3VsZCBiZSBhbiBpbnRlZ2VyIHdoaWNoIGlzIHRoZSBjb21iaW5hdGlvbiBvZiBkZXNpcmVkIGZsYWdzLFxuLSAgICBlLmcuIDEwMjQgZm9yICoqQlBGX0ZfTU1BUEFCTEUqKiAoc2VlIGJwZi5oIFVBUEkgaGVhZGVyIGZvciBleGlzdGluZ1xuLSAgICBmbGFncykuXG4mIzQzOyAgICAqRkxBR1MqIGFjY2VwdHMgYW4gdW5zaWduZWQgMzItYml0IGludGVnZXIgY29tYmluaW5nIHRoZSBkZXNpcmVkIGZsYWdzXG4mIzQzOyAgICAoZGVjaW1hbCwgaGV4YWRlY2ltYWwgd2l0aCBhICoqMHgqKiBwcmVmaXgsIG9yIG9jdGFsIHdpdGggYSAqKjAqKiBwcmVmaXgpLFxuJiM0MzsgICAgb3IgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBmdWxsLCBjYXNlLXNlbnNpdGl2ZSBtYXAgY3JlYXRpb24gZmxhZyBuYW1lc1xuJiM0MzsgICAgZnJvbSB0aGUgYnBmLmggVUFQSSBoZWFkZXIuIEZvciBleGFtcGxlLCAqKjEwMjQqKiwgKioweDQwMCoqLCBhbmRcbiYjNDM7ICAgICoqQlBGX0ZfTU1BUEFCTEUqKiBhcmUgZXF1aXZhbGVudC4gTXVsdGlwbGUgbmFtZXMgYXJlIGNvbWJpbmVkIHdpdGhcbiYjNDM7ICAgIGJpdHdpc2UgT1IsIGZvciBleGFtcGxlICoqQlBGX0ZfTk9fUFJFQUxMT0MsQlBGX0ZfUkRPTkxZX1BST0cqKi5cbiYjNDM7ICAgIFJlcGVhdGVkIG5hbWVzIGFyZSBhbGxvd2VkLiBFbXB0eSBsaXN0IGVsZW1lbnRzLCBhYmJyZXZpYXRlZCBuYW1lcywgYW5kXG4mIzQzOyAgICBsaXN0cyBtaXhpbmcgbnVtYmVycyB3aXRoIG5hbWVzIGFyZSBub3QgYWNjZXB0ZWQuIFVzZSAqKjAqKiBmb3Igbm8gZmxhZ3MuXG4mIzQzOyAgICBOdW1lcmljIHZhbHVlcyBjYW4gaW5jbHVkZSBiaXRzIHVua25vd24gdG8gYnBmdG9vbC4gVGhlIGtlcm5lbCBjaGVja3NcbiYjNDM7ICAgIHdoZXRoZXIgdGhlIGZsYWdzIGFyZSB2YWxpZCBmb3IgdGhlIHJlcXVlc3RlZCBtYXAgdHlwZS5cbiBcbiAgICAgVG8gY3JlYXRlIG1hcHMgb2YgdHlwZSBhcnJheS1vZi1tYXBzIG9yIGhhc2gtb2YtbWFwcywgdGhlICoqaW5uZXJfbWFwKipcbiAgICAga2V5d29yZCBtdXN0IGJlIHVzZWQgdG8gcGFzcyBhbiBpbm5lciBtYXAuIFRoZSBrZXJuZWwgbmVlZHMgaXQgdG8gY29sbGVjdFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL2Jhc2gtY29tcGxldGlvbi9icGZ0b29sIGIvdG9vbHMvYnBmL2JwZnRvb2wvYmFzaC1jb21wbGV0aW9uL2JwZnRvb2xcbmluZGV4IDc1Y2JjYjUxMmViYWUuLmVhM2Y1MjFiNmYwODggMTAwNjQ0XG4tLS0gYS90b29scy9icGYvYnBmdG9vbC9iYXNoLWNvbXBsZXRpb24vYnBmdG9vbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnBmL2JwZnRvb2wvYmFzaC1jb21wbGV0aW9uL2JwZnRvb2xcbkBAIC03MTgsNiAmIzQzOzcxOCwxMCBAQCBfYnBmdG9vbCgpXG4gICAgICAgICAgICAgICAgICAgICBlc2FjXG4gICAgICAgICAgICAgICAgICAgICA7O1xuICAgICAgICAgICAgICAgICBjcmVhdGUpXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgIyBLZWVwIGEgZmxhZ3MgbGlzdCB0b2dldGhlciBpZiByZWFkbGluZSBzcGxpdHMgYXQgY29tbWFzLlxuJiM0MzsgICAgICAgICAgICAgICAgICAgIGlmIFtbICRDT01QX1dPUkRCUkVBS1MgPT0gKiwqIFx1MDAyNlx1MDAyNiAoICRjdXIgPT0gLCB8fCAkcHJldiA9PSAsICkgXV07IHRoZW5cbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgX2dldF9jb21wX3dvcmRzX2J5X3JlZiAtbiAsIGN1ciBwcmV2XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgZmlcbiAgICAgICAgICAgICAgICAgICAgIGNhc2UgJHByZXYgaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAkY29tbWFuZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2ZpbGVkaXJcbkBAIC03MjksNyAmIzQzOzczMywyMSBAQCBfYnBmdG9vbCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTVBSRVBMWT0oICQoIGNvbXBnZW4gLVcgXCYjMzQ7JEJQRlRPT0xfTUFQX0NSRUFURV9UWVBFU1wmIzM0OyAtLSBcJiMzNDskY3VyXCYjMzQ7ICkgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7O1xuLSAgICAgICAgICAgICAgICAgICAgICAgIGtleXx2YWx1ZXxmbGFnc3xlbnRyaWVzKVxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBmbGFncylcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvcHQgLW8gbm9zcGFjZVxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgZmxhZ3M9XCYjMzQ7JChicGZ0b29sIGZlYXR1cmUgbGlzdF9idWlsdGlucyBtYXBfY3JlYXRlX2ZsYWdzIDJcdTAwM2UvZGV2L251bGwpXCYjMzQ7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBwcmVmaXg9IGZsYWdcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgY29tbWEgaXMgbm90IGEgd29yZCBicmVhaywgUmVhZGxpbmUgcmVwbGFjZXMgdGhlIHdob2xlXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHdvcmQsIHNvIHByZXNlcnZlIHRoZSBmbGFncyBiZWZvcmUgdGhlIGxhc3QgY29tbWEuXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBbWyAkY3VyID09ICosKiBcdTAwMjZcdTAwMjYgJENPTVBfV09SREJSRUFLUyAhPSAqLCogXV07IHRoZW5cbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg9XCYjMzQ7JHtjdXIlLCp9LFwmIzM0O1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmbGFnIGluICQoY29tcGdlbiAtVyBcJiMzNDskZmxhZ3NcJiMzNDsgLS0gXCYjMzQ7JHtjdXIjIyosfVwmIzM0Oyk7IGRvXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09NUFJFUExZJiM0Mzs9KCBcJiMzNDske3ByZWZpeH0ke2ZsYWd9XCYjMzQ7IClcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmVcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICA7O1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBrZXl8dmFsdWV8ZW50cmllcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOztcbiAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lcl9tYXApXG5AQCAtMTE5Miw3ICYjNDM7MTIxMCw3IEBAIF9icGZ0b29sKClcbiAgICAgICAgICAgICAgICAgICAgIDs7XG4gICAgICAgICAgICAgICAgIGxpc3RfYnVpbHRpbnMpXG4gICAgICAgICAgICAgICAgICAgICBbWyAkcHJldiAhPSBcJiMzNDskY29tbWFuZFwmIzM0OyBdXSBcdTAwMjZcdTAwMjYgcmV0dXJuIDBcbi0gICAgICAgICAgICAgICAgICAgIENPTVBSRVBMWT0oICQoIGNvbXBnZW4gLVcgJiMzOTtwcm9nX3R5cGVzIG1hcF90eXBlcyBcXFxuJiM0MzsgICAgICAgICAgICAgICAgICAgIENPTVBSRVBMWT0oICQoIGNvbXBnZW4gLVcgJiMzOTtwcm9nX3R5cGVzIG1hcF90eXBlcyBtYXBfY3JlYXRlX2ZsYWdzIFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNoX3R5cGVzIGxpbmtfdHlwZXMgaGVscGVycyYjMzk7IC0tIFwmIzM0OyRjdXJcJiMzNDsgKSApXG4gICAgICAgICAgICAgICAgICAgICA7O1xuICAgICAgICAgICAgICAgICAqKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuYyBiL3Rvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuY1xuaW5kZXggMGY2MDcwYTBjOGU3MS4uYjU0MTlkNWE2NjFhNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jXG5AQCAtMTIyMCw2ICYjNDM7MTIyMCw4IEBAIHN0YXRpYyBpbnQgZG9fbGlzdF9idWlsdGlucyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdGdldF9uYW1lID0gKGNvbnN0IGNoYXIgKigqKSh1bnNpZ25lZCBpbnQpKWxpYmJwZl9icGZfcHJvZ190eXBlX3N0cjtcbiBcdH0gZWxzZSBpZiAoaXNfcHJlZml4KCphcmd2LCBcJiMzNDttYXBfdHlwZXNcJiMzNDspKSB7XG4gXHRcdGdldF9uYW1lID0gKGNvbnN0IGNoYXIgKigqKSh1bnNpZ25lZCBpbnQpKWxpYmJwZl9icGZfbWFwX3R5cGVfc3RyO1xuJiM0MztcdH0gZWxzZSBpZiAoaXNfcHJlZml4KCphcmd2LCBcJiMzNDttYXBfY3JlYXRlX2ZsYWdzXCYjMzQ7KSkge1xuJiM0MztcdFx0Z2V0X25hbWUgPSBtYXBfY3JlYXRlX2ZsYWdfbmFtZTtcbiBcdH0gZWxzZSBpZiAoaXNfcHJlZml4KCphcmd2LCBcJiMzNDthdHRhY2hfdHlwZXNcJiMzNDspKSB7XG4gXHRcdGdldF9uYW1lID0gKGNvbnN0IGNoYXIgKigqKSh1bnNpZ25lZCBpbnQpKWxpYmJwZl9icGZfYXR0YWNoX3R5cGVfc3RyO1xuIFx0fSBlbHNlIGlmIChpc19wcmVmaXgoKmFyZ3YsIFwmIzM0O2xpbmtfdHlwZXNcJiMzNDspKSB7XG5AQCAtMTIyNyw3ICYjNDM7MTIyOSw3IEBAIHN0YXRpYyBpbnQgZG9fbGlzdF9idWlsdGlucyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHR9IGVsc2UgaWYgKGlzX3ByZWZpeCgqYXJndiwgXCYjMzQ7aGVscGVyc1wmIzM0OykpIHtcbiBcdFx0Z2V0X25hbWUgPSBnZXRfaGVscGVyX25hbWU7XG4gXHR9IGVsc2Uge1xuLVx0XHRwX2VycihcJiMzNDtleHBlY3RlZCAmIzM5O3Byb2dfdHlwZXMmIzM5OywgJiMzOTttYXBfdHlwZXMmIzM5OywgJiMzOTthdHRhY2hfdHlwZXMmIzM5OywgJiMzOTtsaW5rX3R5cGVzJiMzOTsgb3IgJiMzOTtoZWxwZXJzJiMzOTssIGdvdDogJXNcJiMzNDssICphcmd2KTtcbiYjNDM7XHRcdHBfZXJyKFwmIzM0O2V4cGVjdGVkICYjMzk7cHJvZ190eXBlcyYjMzk7LCAmIzM5O21hcF90eXBlcyYjMzk7LCAmIzM5O21hcF9jcmVhdGVfZmxhZ3MmIzM5OywgJiMzOTthdHRhY2hfdHlwZXMmIzM5OywgJiMzOTtsaW5rX3R5cGVzJiMzOTsgb3IgJiMzOTtoZWxwZXJzJiMzOTssIGdvdDogJXNcJiMzNDssICphcmd2KTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFxuQEAgLTEyNjUsNyAmIzQzOzEyNjcsOCBAQCBzdGF0aWMgaW50IGRvX2hlbHAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRcJiMzNDsgICAgICAgJTEkcyAlMiRzIGhlbHBcXG5cJiMzNDtcbiBcdFx0XCYjMzQ7XFxuXCYjMzQ7XG4gXHRcdFwmIzM0OyAgICAgICBDT01QT05FTlQgOj0geyBrZXJuZWwgfCBkZXYgTkFNRSB9XFxuXCYjMzQ7XG4tXHRcdFwmIzM0OyAgICAgICBHUk9VUCA6PSB7IHByb2dfdHlwZXMgfCBtYXBfdHlwZXMgfCBhdHRhY2hfdHlwZXMgfCBsaW5rX3R5cGVzIHwgaGVscGVycyB9XFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDsgICAgICAgR1JPVVAgOj0geyBwcm9nX3R5cGVzIHwgbWFwX3R5cGVzIHwgbWFwX2NyZWF0ZV9mbGFncyB8XFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDsgICAgICAgICAgICAgICAgICBhdHRhY2hfdHlwZXMgfCBsaW5rX3R5cGVzIHwgaGVscGVycyB9XFxuXCYjMzQ7XG4gXHRcdFwmIzM0OyAgICAgICBcJiMzNDsgSEVMUF9TUEVDX09QVElPTlMgXCYjMzQ7IH1cXG5cJiMzNDtcbiBcdFx0XCYjMzQ7XCYjMzQ7LFxuIFx0XHRiaW5fbmFtZSwgYXJndlstMl0pO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL21haW4uaCBiL3Rvb2xzL2JwZi9icGZ0b29sL21haW4uaFxuaW5kZXggOTMxNWExZGIxZjdjMi4uM2UyODU2YzlmNTk1YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL21haW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnBmL2JwZnRvb2wvbWFpbi5oXG5AQCAtMTgwLDYgJiM0MzsxODAsNyBAQCBpbnQgZG9fdG9rZW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSBfX3dlYWs7XG4gaW50IHBhcnNlX3UzMl9hcmcoaW50ICphcmdjLCBjaGFyICoqKmFyZ3YsIF9fdTMyICp2YWwsIGNvbnN0IGNoYXIgKndoYXQpO1xuIGludCBwcm9nX3BhcnNlX2ZkKGludCAqYXJnYywgY2hhciAqKiphcmd2KTtcbiBpbnQgcHJvZ19wYXJzZV9mZHMoaW50ICphcmdjLCBjaGFyICoqKmFyZ3YsIGludCAqKmZkcyk7XG4mIzQzO2NvbnN0IGNoYXIgKm1hcF9jcmVhdGVfZmxhZ19uYW1lKHVuc2lnbmVkIGludCBpZCk7XG4gaW50IG1hcF9wYXJzZV9mZChpbnQgKmFyZ2MsIGNoYXIgKioqYXJndiwgX191MzIgb3Blbl9mbGFncyk7XG4gaW50IG1hcF9wYXJzZV9mZHMoaW50ICphcmdjLCBjaGFyICoqKmFyZ3YsIGludCAqKmZkcywgX191MzIgb3Blbl9mbGFncyk7XG4gaW50IG1hcF9wYXJzZV9mZF9hbmRfaW5mbyhpbnQgKmFyZ2MsIGNoYXIgKioqYXJndiwgc3RydWN0IGJwZl9tYXBfaW5mbyAqaW5mbyxcbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9tYXAuYyBiL3Rvb2xzL2JwZi9icGZ0b29sL21hcC5jXG5pbmRleCA2ODRhOGZiNzI0MTQ2Li40NDQ1MDE0MjQ3ZDYyIDEwMDY0NFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2JwZi9icGZ0b29sL21hcC5jXG5AQCAtMTI1MCw2ICYjNDM7MTI1MCw4MSBAQCBzdGF0aWMgaW50IGRvX3BpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB7XG4mIzQzO1x0Y29uc3QgY2hhciAqbmFtZTtcbiYjNDM7XHRfX3UzMiB2YWx1ZTtcbiYjNDM7fSBtYXBfY3JlYXRlX2ZsYWdzW10gPSB7XG4mIzQzOyNkZWZpbmUgTUFQX0NSRUFURV9GTEFHKGZsYWcpIHsgI2ZsYWcsIGZsYWcgfVxuJiM0MztcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9OT19QUkVBTExPQyksXG4mIzQzO1x0TUFQX0NSRUFURV9GTEFHKEJQRl9GX05PX0NPTU1PTl9MUlUpLFxuJiM0MztcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9OVU1BX05PREUpLFxuJiM0MztcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9SRE9OTFkpLFxuJiM0MztcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9XUk9OTFkpLFxuJiM0MztcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9TVEFDS19CVUlMRF9JRCksXG4mIzQzO1x0TUFQX0NSRUFURV9GTEFHKEJQRl9GX1pFUk9fU0VFRCksXG4mIzQzO1x0TUFQX0NSRUFURV9GTEFHKEJQRl9GX1JET05MWV9QUk9HKSxcbiYjNDM7XHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfV1JPTkxZX1BST0cpLFxuJiM0MztcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9DTE9ORSksXG4mIzQzO1x0TUFQX0NSRUFURV9GTEFHKEJQRl9GX01NQVBBQkxFKSxcbiYjNDM7XHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfUFJFU0VSVkVfRUxFTVMpLFxuJiM0MztcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9JTk5FUl9NQVApLFxuJiM0MztcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9MSU5LKSxcbiYjNDM7XHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfVlRZUEVfQlRGX09CSl9GRCksXG4mIzQzO1x0TUFQX0NSRUFURV9GTEFHKEJQRl9GX1RPS0VOX0ZEKSxcbiYjNDM7XHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfU0VHVl9PTl9GQVVMVCksXG4mIzQzO1x0TUFQX0NSRUFURV9GTEFHKEJQRl9GX05PX1VTRVJfQ09OViksXG4mIzQzO1x0TUFQX0NSRUFURV9GTEFHKEJQRl9GX1JCX09WRVJXUklURSksXG4mIzQzOyN1bmRlZiBNQVBfQ1JFQVRFX0ZMQUdcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2NvbnN0IGNoYXIgKm1hcF9jcmVhdGVfZmxhZ19uYW1lKHVuc2lnbmVkIGludCBpZClcbiYjNDM7e1xuJiM0MztcdGlmIChpZCBcdTAwM2U9IEFSUkFZX1NJWkUobWFwX2NyZWF0ZV9mbGFncykpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1hcF9jcmVhdGVfZmxhZ3NbaWRdLm5hbWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGFyc2VfbWFwX2NyZWF0ZV9mbGFncyhjb25zdCBjaGFyICphcmcsIF9fdTMyICpmbGFncylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGNoYXIgKm5hbWUgPSBhcmcsICpjb21tYTtcbiYjNDM7XHRsb25nIGxvbmcgdmFsdWU7XG4mIzQzO1x0X191MzIgcGFyc2VkID0gMDtcbiYjNDM7XHRzaXplX3QgbGVuLCBpO1xuJiM0MztcdGNoYXIgKmVuZDtcbiYjNDM7XG4mIzQzO1x0LyogS2VlcCBiYXNlLTAgbnVtZXJpYyBpbnB1dCwgaW5jbHVkaW5nIGJpdHMgdW5rbm93biB0byB0aGlzIGJwZnRvb2wuICovXG4mIzQzO1x0aWYgKHN0cm5jbXAoYXJnLCBcJiMzNDtCUEZfRl9cJiMzNDssIDYpKSB7XG4mIzQzO1x0XHRlcnJubyA9IDA7XG4mIzQzO1x0XHR2YWx1ZSA9IHN0cnRvbGwoYXJnLCBcdTAwMjZlbmQsIDApO1xuJiM0MztcdFx0aWYgKGVycm5vIHx8IGVuZCA9PSBhcmcgfHwgKmVuZCB8fCB2YWx1ZSBcdTAwM2MgMCB8fCB2YWx1ZSBcdTAwM2UgVUlOVDMyX01BWClcbiYjNDM7XHRcdFx0Z290byBpbnZhbGlkO1xuJiM0MztcdFx0KmZsYWdzID0gdmFsdWU7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdGNvbW1hID0gc3RyY2hyKG5hbWUsICYjMzk7LCYjMzk7KTtcbiYjNDM7XHRcdGxlbiA9IGNvbW1hID8gKHNpemVfdCkoY29tbWEgLSBuYW1lKSA6IHN0cmxlbihuYW1lKTtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobWFwX2NyZWF0ZV9mbGFncyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmIChzdHJsZW4obWFwX2NyZWF0ZV9mbGFnc1tpXS5uYW1lKSA9PSBsZW4gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICAhc3RybmNtcChuYW1lLCBtYXBfY3JlYXRlX2ZsYWdzW2ldLm5hbWUsIGxlbikpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoaSA9PSBBUlJBWV9TSVpFKG1hcF9jcmVhdGVfZmxhZ3MpKVxuJiM0MztcdFx0XHRnb3RvIGludmFsaWQ7XG4mIzQzO1x0XHRwYXJzZWQgfD0gbWFwX2NyZWF0ZV9mbGFnc1tpXS52YWx1ZTtcbiYjNDM7XHRcdGlmIChjb21tYSlcbiYjNDM7XHRcdFx0bmFtZSA9IGNvbW1hICYjNDM7IDE7XG4mIzQzO1x0fSB3aGlsZSAoY29tbWEpO1xuJiM0MztcbiYjNDM7XHQqZmxhZ3MgPSBwYXJzZWQ7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO2ludmFsaWQ6XG4mIzQzO1x0cF9lcnIoXCYjMzQ7Y2FuJiMzOTt0IHBhcnNlICVzIGFzIG1hcCBjcmVhdGlvbiBmbGFnc1wmIzM0OywgYXJnKTtcbiYjNDM7XHRyZXR1cm4gLTE7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBkb19jcmVhdGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIHtcbiBcdExJQkJQRl9PUFRTKGJwZl9tYXBfY3JlYXRlX29wdHMsIGF0dHIpO1xuQEAgLTEzMDEsOSAmIzQzOzEzNzYsMTQgQEAgc3RhdGljIGludCBkb19jcmVhdGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRcdFx0XHQgIFwmIzM0O21heCBlbnRyaWVzXCYjMzQ7KSlcbiBcdFx0XHRcdGdvdG8gZXhpdDtcbiBcdFx0fSBlbHNlIGlmIChpc19wcmVmaXgoKmFyZ3YsIFwmIzM0O2ZsYWdzXCYjMzQ7KSkge1xuLVx0XHRcdGlmIChwYXJzZV91MzJfYXJnKFx1MDAyNmFyZ2MsIFx1MDAyNmFyZ3YsIFx1MDAyNmF0dHIubWFwX2ZsYWdzLFxuLVx0XHRcdFx0XHQgIFwmIzM0O2ZsYWdzXCYjMzQ7KSlcbiYjNDM7XHRcdFx0TkVYVF9BUkcoKTtcbiYjNDM7XHRcdFx0aWYgKGF0dHIubWFwX2ZsYWdzKSB7XG4mIzQzO1x0XHRcdFx0cF9lcnIoXCYjMzQ7ZmxhZ3MgYWxyZWFkeSBzcGVjaWZpZWRcJiMzNDspO1xuIFx0XHRcdFx0Z290byBleGl0O1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGlmIChwYXJzZV9tYXBfY3JlYXRlX2ZsYWdzKCphcmd2LCBcdTAwMjZhdHRyLm1hcF9mbGFncykpXG4mIzQzO1x0XHRcdFx0Z290byBleGl0O1xuJiM0MztcdFx0XHRORVhUX0FSRygpO1xuIFx0XHR9IGVsc2UgaWYgKGlzX3ByZWZpeCgqYXJndiwgXCYjMzQ7ZGV2XCYjMzQ7KSkge1xuIFx0XHRcdHBfaW5mbyhcJiMzNDtXYXJuaW5nOiAmIzM5O2JwZnRvb2wgbWFwIGNyZWF0ZSBbLi4uXSBkZXYgXHUwMDNjaWZuYW1lXHUwMDNlJiMzOTsgc3ludGF4IGlzIGRlcHJlY2F0ZWQuXFxuXCYjMzQ7XG4gXHRcdFx0ICAgICAgIFwmIzM0O0dvaW5nIGZ1cnRoZXIsIHBsZWFzZSB1c2UgJiMzOTtvZmZsb2FkX2RldiBcdTAwM2NpZm5hbWVcdTAwM2UmIzM5OyB0byByZXF1ZXN0IGhhcmR3YXJlIG9mZmxvYWQgZm9yIHRoZSBtYXAuXCYjMzQ7KTtcbkBAIC0xNDc0LDYgJiM0MzsxNTU0LDcgQEAgc3RhdGljIGludCBkb19oZWxwKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0XCYjMzQ7ICAgICAgIERBVEEgOj0geyBbaGV4XSBCWVRFUyB9XFxuXCYjMzQ7XG4gXHRcdFwmIzM0OyAgICAgICBcJiMzNDsgSEVMUF9TUEVDX1BST0dSQU0gXCYjMzQ7XFxuXCYjMzQ7XG4gXHRcdFwmIzM0OyAgICAgICBWQUxVRSA6PSB7IERBVEEgfCBNQVAgfCBQUk9HIH1cXG5cJiMzNDtcbiYjNDM7XHRcdFwmIzM0OyAgICAgICBGTEFHUyA6PSB7IGludGVnZXIgfCBCUEZfRl9OQU1FWyxCUEZfRl9OQU1FLi4uXSB9XFxuXCYjMzQ7XG4gXHRcdFwmIzM0OyAgICAgICBVUERBVEVfRkxBR1MgOj0geyBhbnkgfCBleGlzdCB8IG5vZXhpc3QgfVxcblwmIzM0O1xuIFx0XHRcJiMzNDsgICAgICAgVFlQRSA6PSB7IGhhc2ggfCBhcnJheSB8IHByb2dfYXJyYXkgfCBwZXJmX2V2ZW50X2FycmF5IHwgcGVyY3B1X2hhc2ggfFxcblwmIzM0O1xuIFx0XHRcJiMzNDsgICAgICAgICAgICAgICAgIHBlcmNwdV9hcnJheSB8IHN0YWNrX3RyYWNlIHwgY2dyb3VwX2FycmF5IHwgbHJ1X2hhc2ggfFxcblwmIzM0O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZnRvb2xfbWFwX2ZsYWdzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX21hcF9mbGFncy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDYxN2I0MzI3M2E4ZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9tYXBfZmxhZ3MuY1xuQEAgLTAsMCAmIzQzOzEsMTAwIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZnRvb2xfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBtYXBfZmxhZ3NfdGVzdCB7XG4mIzQzO1x0Y29uc3QgY2hhciAqbmFtZTtcbiYjNDM7XHRjb25zdCBjaGFyICpmbGFncztcbiYjNDM7XHRfX3UzMiBleHBlY3RlZF9mbGFncztcbiYjNDM7XHRjb25zdCBjaGFyICplcnJvcjtcbiYjNDM7fSB0ZXN0c1tdID0ge1xuJiM0MztcdHsgXCYjMzQ7emVyb1wmIzM0OywgXCYjMzQ7MFwmIzM0OywgMCB9LFxuJiM0MztcdHsgXCYjMzQ7ZGVjaW1hbFwmIzM0OywgXCYjMzQ7MTI5XCYjMzQ7LCBCUEZfRl9OT19QUkVBTExPQyB8IEJQRl9GX1JET05MWV9QUk9HIH0sXG4mIzQzO1x0eyBcJiMzNDtoZXhhZGVjaW1hbFwmIzM0OywgXCYjMzQ7MHg4MVwmIzM0OywgQlBGX0ZfTk9fUFJFQUxMT0MgfCBCUEZfRl9SRE9OTFlfUFJPRyB9LFxuJiM0MztcdHsgXCYjMzQ7b2N0YWxcJiMzNDssIFwmIzM0OzAyMDFcJiMzNDssIEJQRl9GX05PX1BSRUFMTE9DIHwgQlBGX0ZfUkRPTkxZX1BST0cgfSxcbiYjNDM7XHR7IFwmIzM0O3Bvc2l0aXZlX3NpZ25cJiMzNDssIFwmIzM0OyYjNDM7MVwmIzM0OywgQlBGX0ZfTk9fUFJFQUxMT0MgfSxcbiYjNDM7XHR7IFwmIzM0O3NpbmdsZV9uYW1lXCYjMzQ7LCBcJiMzNDtCUEZfRl9OT19QUkVBTExPQ1wmIzM0OywgQlBGX0ZfTk9fUFJFQUxMT0MgfSxcbiYjNDM7XHR7IFwmIzM0O2NvbWJpbmVkX25hbWVzXCYjMzQ7LCBcJiMzNDtCUEZfRl9OT19QUkVBTExPQyxCUEZfRl9SRE9OTFlfUFJPR1wmIzM0OyxcbiYjNDM7XHQgIEJQRl9GX05PX1BSRUFMTE9DIHwgQlBGX0ZfUkRPTkxZX1BST0cgfSxcbiYjNDM7XHR7IFwmIzM0O3JlcGVhdGVkX25hbWVcJiMzNDssIFwmIzM0O0JQRl9GX05PX1BSRUFMTE9DLEJQRl9GX05PX1BSRUFMTE9DXCYjMzQ7LCBCUEZfRl9OT19QUkVBTExPQyB9LFxuJiM0MztcdHsgXCYjMzQ7dW5rbm93bl9uYW1lXCYjMzQ7LCBcJiMzNDtCUEZfRl9OT1RfQV9NQVBfRkxBR1wmIzM0OywgMCwgXCYjMzQ7Y2FuJiMzOTt0IHBhcnNlXCYjMzQ7IH0sXG4mIzQzO1x0eyBcJiMzNDtvdGhlcl9jb21tYW5kX2ZsYWdcJiMzNDssIFwmIzM0O0JQRl9GX1BBVEhfRkRcJiMzNDssIDAsIFwmIzM0O2NhbiYjMzk7dCBwYXJzZVwmIzM0OyB9LFxuJiM0MztcdHsgXCYjMzQ7dXBkYXRlX2ZsYWdcJiMzNDssIFwmIzM0O0JQRl9GX0xPQ0tcJiMzNDssIDAsIFwmIzM0O2NhbiYjMzk7dCBwYXJzZVwmIzM0OyB9LFxuJiM0MztcdHsgXCYjMzQ7YWJicmV2aWF0ZWRfbmFtZVwmIzM0OywgXCYjMzQ7QlBGX0ZfTk9fUFJFXCYjMzQ7LCAwLCBcJiMzNDtjYW4mIzM5O3QgcGFyc2VcJiMzNDsgfSxcbiYjNDM7XHR7IFwmIzM0O2xvd2VyY2FzZV9uYW1lXCYjMzQ7LCBcJiMzNDticGZfZl9ub19wcmVhbGxvY1wmIzM0OywgMCwgXCYjMzQ7Y2FuJiMzOTt0IHBhcnNlXCYjMzQ7IH0sXG4mIzQzO1x0eyBcJiMzNDtlbXB0eVwmIzM0OywgXCYjMzQ7XCYjMzQ7LCAwLCBcJiMzNDtjYW4mIzM5O3QgcGFyc2VcJiMzNDsgfSxcbiYjNDM7XHR7IFwmIzM0O3doaXRlc3BhY2VcJiMzNDssIFwmIzM0OyBcJiMzNDssIDAsIFwmIzM0O2NhbiYjMzk7dCBwYXJzZVwmIzM0OyB9LFxuJiM0MztcdHsgXCYjMzQ7ZW1wdHlfbGlzdFwmIzM0OywgXCYjMzQ7LFwmIzM0OywgMCwgXCYjMzQ7Y2FuJiMzOTt0IHBhcnNlXCYjMzQ7IH0sXG4mIzQzO1x0eyBcJiMzNDtsZWFkaW5nX2NvbW1hXCYjMzQ7LCBcJiMzNDssQlBGX0ZfTk9fUFJFQUxMT0NcJiMzNDssIDAsIFwmIzM0O2NhbiYjMzk7dCBwYXJzZVwmIzM0OyB9LFxuJiM0MztcdHsgXCYjMzQ7dHJhaWxpbmdfY29tbWFcJiMzNDssIFwmIzM0O0JQRl9GX05PX1BSRUFMTE9DLFwmIzM0OywgMCwgXCYjMzQ7Y2FuJiMzOTt0IHBhcnNlXCYjMzQ7IH0sXG4mIzQzO1x0eyBcJiMzNDtlbXB0eV9lbGVtZW50XCYjMzQ7LCBcJiMzNDtCUEZfRl9OT19QUkVBTExPQywsQlBGX0ZfUkRPTkxZX1BST0dcJiMzNDssIDAsIFwmIzM0O2NhbiYjMzk7dCBwYXJzZVwmIzM0OyB9LFxuJiM0MztcdHsgXCYjMzQ7bnVtYmVyX3RoZW5fbmFtZVwmIzM0OywgXCYjMzQ7MSxCUEZfRl9SRE9OTFlfUFJPR1wmIzM0OywgMCwgXCYjMzQ7Y2FuJiMzOTt0IHBhcnNlXCYjMzQ7IH0sXG4mIzQzO1x0eyBcJiMzNDtuYW1lX3RoZW5fbnVtYmVyXCYjMzQ7LCBcJiMzNDtCUEZfRl9OT19QUkVBTExPQywxMjhcJiMzNDssIDAsIFwmIzM0O2NhbiYjMzk7dCBwYXJzZVwmIzM0OyB9LFxuJiM0MztcdHsgXCYjMzQ7bnVtZXJpY19saXN0XCYjMzQ7LCBcJiMzNDsxLDEyOFwmIzM0OywgMCwgXCYjMzQ7Y2FuJiMzOTt0IHBhcnNlXCYjMzQ7IH0sXG4mIzQzO1x0eyBcJiMzNDt3aGl0ZXNwYWNlX2luX2xpc3RcJiMzNDssIFwmIzM0O0JQRl9GX05PX1BSRUFMTE9DLCBCUEZfRl9SRE9OTFlfUFJPR1wmIzM0OywgMCwgXCYjMzQ7Y2FuJiMzOTt0IHBhcnNlXCYjMzQ7IH0sXG4mIzQzO1x0eyBcJiMzNDtvdmVyZmxvd191MzJcJiMzNDssIFwmIzM0OzQyOTQ5NjcyOTZcJiMzNDssIDAsIFwmIzM0O2NhbiYjMzk7dCBwYXJzZVwmIzM0OyB9LFxuJiM0MztcdHsgXCYjMzQ7b3ZlcmZsb3dfaGV4XCYjMzQ7LCBcJiMzNDsweDEwMDAwMDAwMFwmIzM0OywgMCwgXCYjMzQ7Y2FuJiMzOTt0IHBhcnNlXCYjMzQ7IH0sXG4mIzQzO1x0eyBcJiMzNDtvdmVyZmxvd191NjRcJiMzNDssIFwmIzM0OzE4NDQ2NzQ0MDczNzA5NTUxNjE2XCYjMzQ7LCAwLCBcJiMzNDtjYW4mIzM5O3QgcGFyc2VcJiMzNDsgfSxcbiYjNDM7XHR7IFwmIzM0O25lZ2F0aXZlXCYjMzQ7LCBcJiMzNDstMVwmIzM0OywgMCwgXCYjMzQ7Y2FuJiMzOTt0IHBhcnNlXCYjMzQ7IH0sXG4mIzQzO1x0LyogTnVtZXJpYyBiaXRzIHVua25vd24gdG8gYnBmdG9vbCBtdXN0IHN0aWxsIHJlYWNoIHRoZSBrZXJuZWwuICovXG4mIzQzO1x0eyBcJiMzNDthbGxfYml0c1wmIzM0OywgXCYjMzQ7MHhmZmZmZmZmZlwmIzM0OywgMCwgXCYjMzQ7bWFwIGNyZWF0ZSBmYWlsZWRcJiMzNDsgfSxcbiYjNDM7XHQvKiBUaGUga2VybmVsIHZhbGlkYXRlcyBjb21iaW5hdGlvbnMgb2Yga25vd24gbWFwIGNyZWF0aW9uIGZsYWdzLiAqL1xuJiM0MztcdHsgXCYjMzQ7aW52YWxpZF9jb21iaW5hdGlvblwmIzM0OywgXCYjMzQ7QlBGX0ZfUkRPTkxZLEJQRl9GX1dST05MWVwmIzM0OywgMCwgXCYjMzQ7bWFwIGNyZWF0ZSBmYWlsZWRcJiMzNDsgfSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfbWFwX2ZsYWdzKGNvbnN0IHN0cnVjdCBtYXBfZmxhZ3NfdGVzdCAqdGVzdCwgY29uc3QgY2hhciAqcGF0aClcbiYjNDM7e1xuJiM0MztcdGNoYXIgY21kW01BWF9CUEZUT09MX0NNRF9MRU5dLCBvdXRwdXRbMTAyNF0gPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX21hcF9pbmZvIGluZm8gPSB7fTtcbiYjNDM7XHRfX3UzMiBpbmZvX2xlbiA9IHNpemVvZihpbmZvKTtcbiYjNDM7XHRpbnQgZmQsIGVycjtcbiYjNDM7XG4mIzQzO1x0LyogTGV0IHRoZSBmbGFncyBwYXJzZXIgaGFuZGxlIG5lZ2F0aXZlIG51bWJlcnMgaW5zdGVhZCBvZiBnZXRvcHQoKS4gKi9cbiYjNDM7XHRlcnIgPSBzbnByaW50ZihjbWQsIHNpemVvZihjbWQpLFxuJiM0MztcdFx0ICAgICAgIFwmIzM0Oy0tIG1hcCBjcmVhdGUgJXMgdHlwZSBoYXNoIGtleSA0IHZhbHVlIDQgZW50cmllcyAxIG5hbWUgZmxhZ3NfdGVzdCBmbGFncyAmIzM5OyVzJiMzOTsgMlx1MDAzZVx1MDAyNjFcJiMzNDssXG4mIzQzO1x0XHQgICAgICAgcGF0aCwgdGVzdC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR1QoZXJyLCAwLCBcJiMzNDtmb3JtYXRfY29tbWFuZFwmIzM0OykgfHxcbiYjNDM7XHQgICAgIUFTU0VSVF9MVChlcnIsIHNpemVvZihjbWQpLCBcJiMzNDtjb21tYW5kX2xlbmd0aFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGVyciA9IGdldF9icGZ0b29sX2NvbW1hbmRfb3V0cHV0KGNtZCwgb3V0cHV0LCBzaXplb2Yob3V0cHV0KSk7XG4mIzQzO1x0aWYgKHRlc3QtXHUwMDNlZXJyb3IpIHtcbiYjNDM7XHRcdEFTU0VSVF9ORVEoZXJyLCAwLCBcJiMzNDtyZWplY3RfZmxhZ3NcJiMzNDspO1xuJiM0MztcdFx0QVNTRVJUX0hBU19TVUJTVFIob3V0cHV0LCB0ZXN0LVx1MDAzZWVycm9yLCBcJiMzNDtlcnJvcl9tZXNzYWdlXCYjMzQ7KTtcbiYjNDM7XHRcdGVyciA9IGFjY2VzcyhwYXRoLCBGX09LKTtcbiYjNDM7XHRcdEFTU0VSVF9FUShlcnIsIC0xLCBcJiMzNDtub19waW5cJiMzNDspO1xuJiM0MztcdFx0QVNTRVJUX0VRKGVycm5vLCBFTk9FTlQsIFwmIzM0O3Bpbl9hYnNlbnRcJiMzNDspO1xuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2NyZWF0ZV9tYXBcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRmZCA9IGJwZl9vYmpfZ2V0KHBhdGgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX0ZEKGZkLCBcJiMzNDtvcGVuX21hcFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0aWYgKEFTU0VSVF9PSyhicGZfbWFwX2dldF9pbmZvX2J5X2ZkKGZkLCBcdTAwMjZpbmZvLCBcdTAwMjZpbmZvX2xlbiksIFwmIzM0O21hcF9pbmZvXCYjMzQ7KSlcbiYjNDM7XHRcdEFTU0VSVF9FUShpbmZvLm1hcF9mbGFncywgdGVzdC1cdTAwM2VleHBlY3RlZF9mbGFncywgXCYjMzQ7bWFwX2ZsYWdzXCYjMzQ7KTtcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0dW5saW5rKHBhdGgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHRlc3RfYnBmdG9vbF9tYXBfZmxhZ3Modm9pZClcbiYjNDM7e1xuJiM0MztcdGNoYXIgZGlyW10gPSBcJiMzNDsvc3lzL2ZzL2JwZi9icGZ0b29sX2ZsYWdzX1hYWFhYWFwmIzM0OztcbiYjNDM7XHRjaGFyIHBhdGhbc2l6ZW9mKGRpcikgJiM0Mzsgc2l6ZW9mKFwmIzM0Oy9tYXBcJiMzNDspXTtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKG1rZHRlbXAoZGlyKSwgXCYjMzQ7Y3JlYXRlX3Bpbl9kaXJcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCYjMzQ7JXMvbWFwXCYjMzQ7LCBkaXIpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodGVzdHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QodGVzdHNbaV0ubmFtZSkpXG4mIzQzO1x0XHRcdHRlc3RfbWFwX2ZsYWdzKFx1MDAyNnRlc3RzW2ldLCBwYXRoKTtcbiYjNDM7XHR9XG4mIzQzO1x0QVNTRVJUX09LKHJtZGlyKGRpciksIFwmIzM0O3JlbW92ZV9waW5fZGlyXCYjMzQ7KTtcbiYjNDM7fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdG9vbGluZyAoYnBmdG9vbCkgYW5kIHNlbGZ0ZXN0cyB1bmRlciB0b29scy9icGYvYnBmdG9vbCBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLiBObyBrZXJuZWwtc3BhY2UgY29kZSAodm1saW51eCBvciBrZXJuZWwgbW9kdWxlcykgaXMgYWZmZWN0ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGFhOGEzZGYyYzE0NzBlYTAzNTlmOWZkMmZlMjAwMzY4MGI2NDQ0ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDAzOjAyOjAwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLWZlYXR1cmUucnN0IGIvdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLWZlYXR1cmUucnN0CmluZGV4IGM3ZjgzNzg5OGJjNzcuLjU5N2YyNDI2ZDI1NTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1mZWF0dXJlLnJzdAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtZmVhdHVyZS5yc3QKQEAgLTI4LDcgJiM0MzsyOCw3IEBAIEZFQVRVUkUgQ09NTUFORFMKIHwgKipicGZ0b29sKiogKipmZWF0dXJlIGhlbHAqKgogfAogfCAqQ09NUE9ORU5UKiA6PSB7ICoqa2VybmVsKiogfCAqKmRldioqICpOQU1FKiB9Ci18ICpHUk9VUCogOj0geyAqKnByb2dfdHlwZXMqKiB8ICoqbWFwX3R5cGVzKiogfCAqKmF0dGFjaF90eXBlcyoqIHwgKipsaW5rX3R5cGVzKiogfCAqKmhlbHBlcnMqKiB9CiYjNDM7fCAqR1JPVVAqIDo9IHsgKipwcm9nX3R5cGVzKiogfCAqKm1hcF90eXBlcyoqIHwgKiptYXBfY3JlYXRlX2ZsYWdzKiogfCAqKmF0dGFjaF90eXBlcyoqIHwgKipsaW5rX3R5cGVzKiogfCAqKmhlbHBlcnMqKiB9CiAKIERFU0NSSVBUSU9OCiA9PT09PT09PT09PQpAQCAtNjgsMTIgJiM0Mzs2OCwxNCBAQCBicGZ0b29sIGZlYXR1cmUgcHJvYmUgZGV2ICpOQU1FKiBbZnVsbF0gW21hY3JvcyBbcHJlZml4ICpQUkVGSVgqXV0KIAogYnBmdG9vbCBmZWF0dXJlIGxpc3RfYnVpbHRpbnMgKkdST1VQKgogICAgIExpc3QgaXRlbXMga25vd24gdG8gYnBmdG9vbC4gVGhlc2UgY2FuIGJlIEJQRiBwcm9ncmFtIHR5cGVzCi0gICAgKCoqcHJvZ190eXBlcyoqKSwgQlBGIG1hcCB0eXBlcyAoKiptYXBfdHlwZXMqKiksIGF0dGFjaCB0eXBlcwomIzQzOyAgICAoKipwcm9nX3R5cGVzKiopLCBCUEYgbWFwIHR5cGVzICgqKm1hcF90eXBlcyoqKSwgbWFwIGNyZWF0aW9uIGZsYWdzCiYjNDM7ICAgICgqKm1hcF9jcmVhdGVfZmxhZ3MqKiksIGF0dGFjaCB0eXBlcwogICAgICgqKmF0dGFjaF90eXBlcyoqKSwgbGluayB0eXBlcyAoKipsaW5rX3R5cGVzKiopLCBvciBCUEYgaGVscGVyIGZ1bmN0aW9ucwogICAgICgqKmhlbHBlcnMqKikuIFRoZSBjb21tYW5kIGRvZXMgbm90IHByb2JlIHRoZSBzeXN0ZW0sIGJ1dCBzaW1wbHkgbGlzdHMgdGhlCiAgICAgZWxlbWVudHMgdGhhdCBicGZ0b29sIGtub3dzIGZyb20gY29tcGlsYXRpb24gdGltZSwgYXMgcHJvdmlkZWQgZnJvbSBsaWJicGYKLSAgICAoZm9yIGFsbCBvYmplY3QgdHlwZXMpIG9yIGZyb20gdGhlIEJQRiBVQVBJIGhlYWRlciAobGlzdCBvZiBoZWxwZXJzKS4gVGhpcwotICAgIGNhbiBiZSB1c2VkIGluIHNjcmlwdHMgdG8gaXRlcmF0ZSBvdmVyIEJQRiB0eXBlcyBvciBoZWxwZXJzLgomIzQzOyAgICAoZm9yIGFsbCBvYmplY3QgdHlwZXMpIG9yIGZyb20gdGhlIEJQRiBVQVBJIGhlYWRlciAoaGVscGVycyBhbmQgbWFwIGNyZWF0aW9uCiYjNDM7ICAgIGZsYWdzKS4gVGhpcyBjYW4gYmUgdXNlZCBpbiBzY3JpcHRzIHRvIGl0ZXJhdGUgb3ZlciBCUEYgdHlwZXMsIGhlbHBlcnMsIG9yCiYjNDM7ICAgIHRoZSBzeW1ib2xpYyBmbGFncyBhY2NlcHRlZCBieSAqKm1hcCBjcmVhdGUqKi4KIAogYnBmdG9vbCBmZWF0dXJlIGhlbHAKICAgICBQcmludCBzaG9ydCBoZWxwIG1lc3NhZ2UuCmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtbWFwLnJzdCBiL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1tYXAucnN0CmluZGV4IDVkYWYzZGU1Yzc0NDYuLjVhNWMyNmY3ODljZDAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1tYXAucnN0CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1tYXAucnN0CkBAIC00OCw2ICYjNDM7NDgsNyBAQCBNQVAgQ09NTUFORFMKIHwgKkRBVEEqIDo9IHsgWyoqaGV4KipdICpCWVRFUyogfQogfCAqUFJPRyogOj0geyAqKmlkKiogKlBST0dfSUQqIHwgKipwaW5uZWQqKiAqRklMRSogfCAqKnRhZyoqICpQUk9HX1RBRyogfCAqKm5hbWUqKiAqUFJPR19OQU1FKiB9CiB8ICpWQUxVRSogOj0geyAqREFUQSogfCAqTUFQKiB8ICpQUk9HKiB9CiYjNDM7fCAqRkxBR1MqIDo9IHsgaW50ZWdlciB8ICoqQlBGX0ZfTkFNRVssQlBGX0ZfTkFNRS4uLl0qKiB9CiB8ICpVUERBVEVfRkxBR1MqIDo9IHsgKiphbnkqKiB8ICoqZXhpc3QqKiB8ICoqbm9leGlzdCoqIH0KIHwgKlRZUEUqIDo9IHsgKipoYXNoKiogfCAqKmFycmF5KiogfCAqKnByb2dfYXJyYXkqKiB8ICoqcGVyZl9ldmVudF9hcnJheSoqIHwgKipwZXJjcHVfaGFzaCoqCiB8ICAgICB8ICoqcGVyY3B1X2FycmF5KiogfCAqKnN0YWNrX3RyYWNlKiogfCAqKmNncm91cF9hcnJheSoqIHwgKipscnVfaGFzaCoqCkBAIC03Niw5ICYjNDM7NzcsMTYgQEAgYnBmdG9vbCBtYXAgeyBzaG93IHwgbGlzdCB9ICAgWypNQVAqXQogYnBmdG9vbCBtYXAgY3JlYXRlICpGSUxFKiB0eXBlICpUWVBFKiBrZXkgKktFWV9TSVpFKiB2YWx1ZSAqVkFMVUVfU0laRSogIGVudHJpZXMgKk1BWF9FTlRSSUVTKiBuYW1lICpOQU1FKiBbZmxhZ3MgKkZMQUdTKl0gW2lubmVyX21hcCAqTUFQKl0gW29mZmxvYWRfZGV2ICpOQU1FKl0KICAgICBDcmVhdGUgYSBuZXcgbWFwIHdpdGggZ2l2ZW4gcGFyYW1ldGVycyBhbmQgcGluIGl0IHRvICpicGZmcyogYXMgKkZJTEUqLgogCi0gICAgKkZMQUdTKiBzaG91bGQgYmUgYW4gaW50ZWdlciB3aGljaCBpcyB0aGUgY29tYmluYXRpb24gb2YgZGVzaXJlZCBmbGFncywKLSAgICBlLmcuIDEwMjQgZm9yICoqQlBGX0ZfTU1BUEFCTEUqKiAoc2VlIGJwZi5oIFVBUEkgaGVhZGVyIGZvciBleGlzdGluZwotICAgIGZsYWdzKS4KJiM0MzsgICAgKkZMQUdTKiBhY2NlcHRzIGFuIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIGNvbWJpbmluZyB0aGUgZGVzaXJlZCBmbGFncwomIzQzOyAgICAoZGVjaW1hbCwgaGV4YWRlY2ltYWwgd2l0aCBhICoqMHgqKiBwcmVmaXgsIG9yIG9jdGFsIHdpdGggYSAqKjAqKiBwcmVmaXgpLAomIzQzOyAgICBvciBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGZ1bGwsIGNhc2Utc2Vuc2l0aXZlIG1hcCBjcmVhdGlvbiBmbGFnIG5hbWVzCiYjNDM7ICAgIGZyb20gdGhlIGJwZi5oIFVBUEkgaGVhZGVyLiBGb3IgZXhhbXBsZSwgKioxMDI0KiosICoqMHg0MDAqKiwgYW5kCiYjNDM7ICAgICoqQlBGX0ZfTU1BUEFCTEUqKiBhcmUgZXF1aXZhbGVudC4gTXVsdGlwbGUgbmFtZXMgYXJlIGNvbWJpbmVkIHdpdGgKJiM0MzsgICAgYml0d2lzZSBPUiwgZm9yIGV4YW1wbGUgKipCUEZfRl9OT19QUkVBTExPQyxCUEZfRl9SRE9OTFlfUFJPRyoqLgomIzQzOyAgICBSZXBlYXRlZCBuYW1lcyBhcmUgYWxsb3dlZC4gRW1wdHkgbGlzdCBlbGVtZW50cywgYWJicmV2aWF0ZWQgbmFtZXMsIGFuZAomIzQzOyAgICBsaXN0cyBtaXhpbmcgbnVtYmVycyB3aXRoIG5hbWVzIGFyZSBub3QgYWNjZXB0ZWQuIFVzZSAqKjAqKiBmb3Igbm8gZmxhZ3MuCiYjNDM7ICAgIE51bWVyaWMgdmFsdWVzIGNhbiBpbmNsdWRlIGJpdHMgdW5rbm93biB0byBicGZ0b29sLiBUaGUga2VybmVsIGNoZWNrcwomIzQzOyAgICB3aGV0aGVyIHRoZSBmbGFncyBhcmUgdmFsaWQgZm9yIHRoZSByZXF1ZXN0ZWQgbWFwIHR5cGUuCiAKICAgICBUbyBjcmVhdGUgbWFwcyBvZiB0eXBlIGFycmF5LW9mLW1hcHMgb3IgaGFzaC1vZi1tYXBzLCB0aGUgKippbm5lcl9tYXAqKgogICAgIGtleXdvcmQgbXVzdCBiZSB1c2VkIHRvIHBhc3MgYW4gaW5uZXIgbWFwLiBUaGUga2VybmVsIG5lZWRzIGl0IHRvIGNvbGxlY3QKZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL2Jhc2gtY29tcGxldGlvbi9icGZ0b29sIGIvdG9vbHMvYnBmL2JwZnRvb2wvYmFzaC1jb21wbGV0aW9uL2JwZnRvb2wKaW5kZXggNzVjYmNiNTEyZWJhZS4uZWEzZjUyMWI2ZjA4OCAxMDA2NDQKLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvYmFzaC1jb21wbGV0aW9uL2JwZnRvb2wKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnBmL2JwZnRvb2wvYmFzaC1jb21wbGV0aW9uL2JwZnRvb2wKQEAgLTcxOCw2ICYjNDM7NzE4LDEwIEBAIF9icGZ0b29sKCkKICAgICAgICAgICAgICAgICAgICAgZXNhYwogICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgIGNyZWF0ZSkKJiM0MzsgICAgICAgICAgICAgICAgICAgICMgS2VlcCBhIGZsYWdzIGxpc3QgdG9nZXRoZXIgaWYgcmVhZGxpbmUgc3BsaXRzIGF0IGNvbW1hcy4KJiM0MzsgICAgICAgICAgICAgICAgICAgIGlmIFtbICRDT01QX1dPUkRCUkVBS1MgPT0gKiwqICZhbXA7JmFtcDsgKCAkY3VyID09ICwgfHwgJHByZXYgPT0gLCApIF1dOyB0aGVuCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgX2dldF9jb21wX3dvcmRzX2J5X3JlZiAtbiAsIGN1ciBwcmV2CiYjNDM7ICAgICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgICAgICBjYXNlICRwcmV2IGluCiAgICAgICAgICAgICAgICAgICAgICAgICAkY29tbWFuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZmlsZWRpcgpAQCAtNzI5LDcgJiM0Mzs3MzMsMjEgQEAgX2JwZnRvb2woKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTVBSRVBMWT0oICQoIGNvbXBnZW4gLVcgJiMzNDskQlBGVE9PTF9NQVBfQ1JFQVRFX1RZUEVTJiMzNDsgLS0gJiMzNDskY3VyJiMzNDsgKSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgICAgICAgICAgICAga2V5fHZhbHVlfGZsYWdzfGVudHJpZXMpCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvcHQgLW8gbm9zcGFjZQomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBmbGFncz0mIzM0OyQoYnBmdG9vbCBmZWF0dXJlIGxpc3RfYnVpbHRpbnMgbWFwX2NyZWF0ZV9mbGFncyAyJmd0Oy9kZXYvbnVsbCkmIzM0OwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBwcmVmaXg9IGZsYWcKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiBjb21tYSBpcyBub3QgYSB3b3JkIGJyZWFrLCBSZWFkbGluZSByZXBsYWNlcyB0aGUgd2hvbGUKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB3b3JkLCBzbyBwcmVzZXJ2ZSB0aGUgZmxhZ3MgYmVmb3JlIHRoZSBsYXN0IGNvbW1hLgomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBbWyAkY3VyID09ICosKiAmYW1wOyZhbXA7ICRDT01QX1dPUkRCUkVBS1MgIT0gKiwqIF1dOyB0aGVuCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg9JiMzNDske2N1ciUsKn0sJiMzNDsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZsYWcgaW4gJChjb21wZ2VuIC1XICYjMzQ7JGZsYWdzJiMzNDsgLS0gJiMzNDske2N1ciMjKix9JiMzNDspOyBkbwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09NUFJFUExZJiM0Mzs9KCAmIzM0OyR7cHJlZml4fSR7ZmxhZ30mIzM0OyApCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBrZXl8dmFsdWV8ZW50cmllcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lcl9tYXApCkBAIC0xMTkyLDcgJiM0MzsxMjEwLDcgQEAgX2JwZnRvb2woKQogICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgIGxpc3RfYnVpbHRpbnMpCiAgICAgICAgICAgICAgICAgICAgIFtbICRwcmV2ICE9ICYjMzQ7JGNvbW1hbmQmIzM0OyBdXSAmYW1wOyZhbXA7IHJldHVybiAwCi0gICAgICAgICAgICAgICAgICAgIENPTVBSRVBMWT0oICQoIGNvbXBnZW4gLVcgJiMzOTtwcm9nX3R5cGVzIG1hcF90eXBlcyBcCiYjNDM7ICAgICAgICAgICAgICAgICAgICBDT01QUkVQTFk9KCAkKCBjb21wZ2VuIC1XICYjMzk7cHJvZ190eXBlcyBtYXBfdHlwZXMgbWFwX2NyZWF0ZV9mbGFncyBcCiAgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2hfdHlwZXMgbGlua190eXBlcyBoZWxwZXJzJiMzOTsgLS0gJiMzNDskY3VyJiMzNDsgKSApCiAgICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgKikKZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuYyBiL3Rvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuYwppbmRleCAwZjYwNzBhMGM4ZTcxLi5iNTQxOWQ1YTY2MWE1IDEwMDY0NAotLS0gYS90b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jCkBAIC0xMjIwLDYgJiM0MzsxMjIwLDggQEAgc3RhdGljIGludCBkb19saXN0X2J1aWx0aW5zKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJZ2V0X25hbWUgPSAoY29uc3QgY2hhciAqKCopKHVuc2lnbmVkIGludCkpbGliYnBmX2JwZl9wcm9nX3R5cGVfc3RyOwogCX0gZWxzZSBpZiAoaXNfcHJlZml4KCphcmd2LCAmIzM0O21hcF90eXBlcyYjMzQ7KSkgewogCQlnZXRfbmFtZSA9IChjb25zdCBjaGFyICooKikodW5zaWduZWQgaW50KSlsaWJicGZfYnBmX21hcF90eXBlX3N0cjsKJiM0MzsJfSBlbHNlIGlmIChpc19wcmVmaXgoKmFyZ3YsICYjMzQ7bWFwX2NyZWF0ZV9mbGFncyYjMzQ7KSkgewomIzQzOwkJZ2V0X25hbWUgPSBtYXBfY3JlYXRlX2ZsYWdfbmFtZTsKIAl9IGVsc2UgaWYgKGlzX3ByZWZpeCgqYXJndiwgJiMzNDthdHRhY2hfdHlwZXMmIzM0OykpIHsKIAkJZ2V0X25hbWUgPSAoY29uc3QgY2hhciAqKCopKHVuc2lnbmVkIGludCkpbGliYnBmX2JwZl9hdHRhY2hfdHlwZV9zdHI7CiAJfSBlbHNlIGlmIChpc19wcmVmaXgoKmFyZ3YsICYjMzQ7bGlua190eXBlcyYjMzQ7KSkgewpAQCAtMTIyNyw3ICYjNDM7MTIyOSw3IEBAIHN0YXRpYyBpbnQgZG9fbGlzdF9idWlsdGlucyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJfSBlbHNlIGlmIChpc19wcmVmaXgoKmFyZ3YsICYjMzQ7aGVscGVycyYjMzQ7KSkgewogCQlnZXRfbmFtZSA9IGdldF9oZWxwZXJfbmFtZTsKIAl9IGVsc2UgewotCQlwX2VycigmIzM0O2V4cGVjdGVkICYjMzk7cHJvZ190eXBlcyYjMzk7LCAmIzM5O21hcF90eXBlcyYjMzk7LCAmIzM5O2F0dGFjaF90eXBlcyYjMzk7LCAmIzM5O2xpbmtfdHlwZXMmIzM5OyBvciAmIzM5O2hlbHBlcnMmIzM5OywgZ290OiAlcyYjMzQ7LCAqYXJndik7CiYjNDM7CQlwX2VycigmIzM0O2V4cGVjdGVkICYjMzk7cHJvZ190eXBlcyYjMzk7LCAmIzM5O21hcF90eXBlcyYjMzk7LCAmIzM5O21hcF9jcmVhdGVfZmxhZ3MmIzM5OywgJiMzOTthdHRhY2hfdHlwZXMmIzM5OywgJiMzOTtsaW5rX3R5cGVzJiMzOTsgb3IgJiMzOTtoZWxwZXJzJiMzOTssIGdvdDogJXMmIzM0OywgKmFyZ3YpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xMjY1LDcgJiM0MzsxMjY3LDggQEAgc3RhdGljIGludCBkb19oZWxwKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJJiMzNDsgICAgICAgJTEkcyAlMiRzIGhlbHBcbiYjMzQ7CiAJCSYjMzQ7XG4mIzM0OwogCQkmIzM0OyAgICAgICBDT01QT05FTlQgOj0geyBrZXJuZWwgfCBkZXYgTkFNRSB9XG4mIzM0OwotCQkmIzM0OyAgICAgICBHUk9VUCA6PSB7IHByb2dfdHlwZXMgfCBtYXBfdHlwZXMgfCBhdHRhY2hfdHlwZXMgfCBsaW5rX3R5cGVzIHwgaGVscGVycyB9XG4mIzM0OwomIzQzOwkJJiMzNDsgICAgICAgR1JPVVAgOj0geyBwcm9nX3R5cGVzIHwgbWFwX3R5cGVzIHwgbWFwX2NyZWF0ZV9mbGFncyB8XG4mIzM0OwomIzQzOwkJJiMzNDsgICAgICAgICAgICAgICAgICBhdHRhY2hfdHlwZXMgfCBsaW5rX3R5cGVzIHwgaGVscGVycyB9XG4mIzM0OwogCQkmIzM0OyAgICAgICAmIzM0OyBIRUxQX1NQRUNfT1BUSU9OUyAmIzM0OyB9XG4mIzM0OwogCQkmIzM0OyYjMzQ7LAogCQliaW5fbmFtZSwgYXJndlstMl0pOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvbWFpbi5oIGIvdG9vbHMvYnBmL2JwZnRvb2wvbWFpbi5oCmluZGV4IDkzMTVhMWRiMWY3YzIuLjNlMjg1NmM5ZjU5NWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL21haW4uaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9icGYvYnBmdG9vbC9tYWluLmgKQEAgLTE4MCw2ICYjNDM7MTgwLDcgQEAgaW50IGRvX3Rva2VuKGludCBhcmdjLCBjaGFyICoqYXJndikgX193ZWFrOwogaW50IHBhcnNlX3UzMl9hcmcoaW50ICphcmdjLCBjaGFyICoqKmFyZ3YsIF9fdTMyICp2YWwsIGNvbnN0IGNoYXIgKndoYXQpOwogaW50IHByb2dfcGFyc2VfZmQoaW50ICphcmdjLCBjaGFyICoqKmFyZ3YpOwogaW50IHByb2dfcGFyc2VfZmRzKGludCAqYXJnYywgY2hhciAqKiphcmd2LCBpbnQgKipmZHMpOwomIzQzO2NvbnN0IGNoYXIgKm1hcF9jcmVhdGVfZmxhZ19uYW1lKHVuc2lnbmVkIGludCBpZCk7CiBpbnQgbWFwX3BhcnNlX2ZkKGludCAqYXJnYywgY2hhciAqKiphcmd2LCBfX3UzMiBvcGVuX2ZsYWdzKTsKIGludCBtYXBfcGFyc2VfZmRzKGludCAqYXJnYywgY2hhciAqKiphcmd2LCBpbnQgKipmZHMsIF9fdTMyIG9wZW5fZmxhZ3MpOwogaW50IG1hcF9wYXJzZV9mZF9hbmRfaW5mbyhpbnQgKmFyZ2MsIGNoYXIgKioqYXJndiwgc3RydWN0IGJwZl9tYXBfaW5mbyAqaW5mbywKZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL21hcC5jIGIvdG9vbHMvYnBmL2JwZnRvb2wvbWFwLmMKaW5kZXggNjg0YThmYjcyNDE0Ni4uNDQ0NTAxNDI0N2Q2MiAxMDA2NDQKLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnBmL2JwZnRvb2wvbWFwLmMKQEAgLTEyNTAsNiAmIzQzOzEyNTAsODEgQEAgc3RhdGljIGludCBkb19waW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCXJldHVybiBlcnI7CiB9CiAKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHsKJiM0MzsJY29uc3QgY2hhciAqbmFtZTsKJiM0MzsJX191MzIgdmFsdWU7CiYjNDM7fSBtYXBfY3JlYXRlX2ZsYWdzW10gPSB7CiYjNDM7I2RlZmluZSBNQVBfQ1JFQVRFX0ZMQUcoZmxhZykgeyAjZmxhZywgZmxhZyB9CiYjNDM7CU1BUF9DUkVBVEVfRkxBRyhCUEZfRl9OT19QUkVBTExPQyksCiYjNDM7CU1BUF9DUkVBVEVfRkxBRyhCUEZfRl9OT19DT01NT05fTFJVKSwKJiM0MzsJTUFQX0NSRUFURV9GTEFHKEJQRl9GX05VTUFfTk9ERSksCiYjNDM7CU1BUF9DUkVBVEVfRkxBRyhCUEZfRl9SRE9OTFkpLAomIzQzOwlNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfV1JPTkxZKSwKJiM0MzsJTUFQX0NSRUFURV9GTEFHKEJQRl9GX1NUQUNLX0JVSUxEX0lEKSwKJiM0MzsJTUFQX0NSRUFURV9GTEFHKEJQRl9GX1pFUk9fU0VFRCksCiYjNDM7CU1BUF9DUkVBVEVfRkxBRyhCUEZfRl9SRE9OTFlfUFJPRyksCiYjNDM7CU1BUF9DUkVBVEVfRkxBRyhCUEZfRl9XUk9OTFlfUFJPRyksCiYjNDM7CU1BUF9DUkVBVEVfRkxBRyhCUEZfRl9DTE9ORSksCiYjNDM7CU1BUF9DUkVBVEVfRkxBRyhCUEZfRl9NTUFQQUJMRSksCiYjNDM7CU1BUF9DUkVBVEVfRkxBRyhCUEZfRl9QUkVTRVJWRV9FTEVNUyksCiYjNDM7CU1BUF9DUkVBVEVfRkxBRyhCUEZfRl9JTk5FUl9NQVApLAomIzQzOwlNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfTElOSyksCiYjNDM7CU1BUF9DUkVBVEVfRkxBRyhCUEZfRl9WVFlQRV9CVEZfT0JKX0ZEKSwKJiM0MzsJTUFQX0NSRUFURV9GTEFHKEJQRl9GX1RPS0VOX0ZEKSwKJiM0MzsJTUFQX0NSRUFURV9GTEFHKEJQRl9GX1NFR1ZfT05fRkFVTFQpLAomIzQzOwlNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfTk9fVVNFUl9DT05WKSwKJiM0MzsJTUFQX0NSRUFURV9GTEFHKEJQRl9GX1JCX09WRVJXUklURSksCiYjNDM7I3VuZGVmIE1BUF9DUkVBVEVfRkxBRwomIzQzO307CiYjNDM7CiYjNDM7Y29uc3QgY2hhciAqbWFwX2NyZWF0ZV9mbGFnX25hbWUodW5zaWduZWQgaW50IGlkKQomIzQzO3sKJiM0MzsJaWYgKGlkICZndDs9IEFSUkFZX1NJWkUobWFwX2NyZWF0ZV9mbGFncykpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcmV0dXJuIG1hcF9jcmVhdGVfZmxhZ3NbaWRdLm5hbWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGFyc2VfbWFwX2NyZWF0ZV9mbGFncyhjb25zdCBjaGFyICphcmcsIF9fdTMyICpmbGFncykKJiM0Mzt7CiYjNDM7CWNvbnN0IGNoYXIgKm5hbWUgPSBhcmcsICpjb21tYTsKJiM0MzsJbG9uZyBsb25nIHZhbHVlOwomIzQzOwlfX3UzMiBwYXJzZWQgPSAwOwomIzQzOwlzaXplX3QgbGVuLCBpOwomIzQzOwljaGFyICplbmQ7CiYjNDM7CiYjNDM7CS8qIEtlZXAgYmFzZS0wIG51bWVyaWMgaW5wdXQsIGluY2x1ZGluZyBiaXRzIHVua25vd24gdG8gdGhpcyBicGZ0b29sLiAqLwomIzQzOwlpZiAoc3RybmNtcChhcmcsICYjMzQ7QlBGX0ZfJiMzNDssIDYpKSB7CiYjNDM7CQllcnJubyA9IDA7CiYjNDM7CQl2YWx1ZSA9IHN0cnRvbGwoYXJnLCAmYW1wO2VuZCwgMCk7CiYjNDM7CQlpZiAoZXJybm8gfHwgZW5kID09IGFyZyB8fCAqZW5kIHx8IHZhbHVlICZsdDsgMCB8fCB2YWx1ZSAmZ3Q7IFVJTlQzMl9NQVgpCiYjNDM7CQkJZ290byBpbnZhbGlkOwomIzQzOwkJKmZsYWdzID0gdmFsdWU7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQljb21tYSA9IHN0cmNocihuYW1lLCAmIzM5OywmIzM5Oyk7CiYjNDM7CQlsZW4gPSBjb21tYSA/IChzaXplX3QpKGNvbW1hIC0gbmFtZSkgOiBzdHJsZW4obmFtZSk7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShtYXBfY3JlYXRlX2ZsYWdzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAoc3RybGVuKG1hcF9jcmVhdGVfZmxhZ3NbaV0ubmFtZSkgPT0gbGVuICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgIXN0cm5jbXAobmFtZSwgbWFwX2NyZWF0ZV9mbGFnc1tpXS5uYW1lLCBsZW4pKQomIzQzOwkJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCWlmIChpID09IEFSUkFZX1NJWkUobWFwX2NyZWF0ZV9mbGFncykpCiYjNDM7CQkJZ290byBpbnZhbGlkOwomIzQzOwkJcGFyc2VkIHw9IG1hcF9jcmVhdGVfZmxhZ3NbaV0udmFsdWU7CiYjNDM7CQlpZiAoY29tbWEpCiYjNDM7CQkJbmFtZSA9IGNvbW1hICYjNDM7IDE7CiYjNDM7CX0gd2hpbGUgKGNvbW1hKTsKJiM0MzsKJiM0MzsJKmZsYWdzID0gcGFyc2VkOwomIzQzOwlyZXR1cm4gMDsKJiM0MztpbnZhbGlkOgomIzQzOwlwX2VycigmIzM0O2NhbiYjMzk7dCBwYXJzZSAlcyBhcyBtYXAgY3JlYXRpb24gZmxhZ3MmIzM0OywgYXJnKTsKJiM0MzsJcmV0dXJuIC0xOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZG9fY3JlYXRlKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlMSUJCUEZfT1BUUyhicGZfbWFwX2NyZWF0ZV9vcHRzLCBhdHRyKTsKQEAgLTEzMDEsOSAmIzQzOzEzNzYsMTQgQEAgc3RhdGljIGludCBkb19jcmVhdGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQkgICYjMzQ7bWF4IGVudHJpZXMmIzM0OykpCiAJCQkJZ290byBleGl0OwogCQl9IGVsc2UgaWYgKGlzX3ByZWZpeCgqYXJndiwgJiMzNDtmbGFncyYjMzQ7KSkgewotCQkJaWYgKHBhcnNlX3UzMl9hcmcoJmFtcDthcmdjLCAmYW1wO2FyZ3YsICZhbXA7YXR0ci5tYXBfZmxhZ3MsCi0JCQkJCSAgJiMzNDtmbGFncyYjMzQ7KSkKJiM0MzsJCQlORVhUX0FSRygpOwomIzQzOwkJCWlmIChhdHRyLm1hcF9mbGFncykgewomIzQzOwkJCQlwX2VycigmIzM0O2ZsYWdzIGFscmVhZHkgc3BlY2lmaWVkJiMzNDspOwogCQkJCWdvdG8gZXhpdDsKJiM0MzsJCQl9CiYjNDM7CQkJaWYgKHBhcnNlX21hcF9jcmVhdGVfZmxhZ3MoKmFyZ3YsICZhbXA7YXR0ci5tYXBfZmxhZ3MpKQomIzQzOwkJCQlnb3RvIGV4aXQ7CiYjNDM7CQkJTkVYVF9BUkcoKTsKIAkJfSBlbHNlIGlmIChpc19wcmVmaXgoKmFyZ3YsICYjMzQ7ZGV2JiMzNDspKSB7CiAJCQlwX2luZm8oJiMzNDtXYXJuaW5nOiAmIzM5O2JwZnRvb2wgbWFwIGNyZWF0ZSBbLi4uXSBkZXYgJmx0O2lmbmFtZSZndDsmIzM5OyBzeW50YXggaXMgZGVwcmVjYXRlZC5cbiYjMzQ7CiAJCQkgICAgICAgJiMzNDtHb2luZyBmdXJ0aGVyLCBwbGVhc2UgdXNlICYjMzk7b2ZmbG9hZF9kZXYgJmx0O2lmbmFtZSZndDsmIzM5OyB0byByZXF1ZXN0IGhhcmR3YXJlIG9mZmxvYWQgZm9yIHRoZSBtYXAuJiMzNDspOwpAQCAtMTQ3NCw2ICYjNDM7MTU1NCw3IEBAIHN0YXRpYyBpbnQgZG9faGVscChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCSYjMzQ7ICAgICAgIERBVEEgOj0geyBbaGV4XSBCWVRFUyB9XG4mIzM0OwogCQkmIzM0OyAgICAgICAmIzM0OyBIRUxQX1NQRUNfUFJPR1JBTSAmIzM0O1xuJiMzNDsKIAkJJiMzNDsgICAgICAgVkFMVUUgOj0geyBEQVRBIHwgTUFQIHwgUFJPRyB9XG4mIzM0OwomIzQzOwkJJiMzNDsgICAgICAgRkxBR1MgOj0geyBpbnRlZ2VyIHwgQlBGX0ZfTkFNRVssQlBGX0ZfTkFNRS4uLl0gfVxuJiMzNDsKIAkJJiMzNDsgICAgICAgVVBEQVRFX0ZMQUdTIDo9IHsgYW55IHwgZXhpc3QgfCBub2V4aXN0IH1cbiYjMzQ7CiAJCSYjMzQ7ICAgICAgIFRZUEUgOj0geyBoYXNoIHwgYXJyYXkgfCBwcm9nX2FycmF5IHwgcGVyZl9ldmVudF9hcnJheSB8IHBlcmNwdV9oYXNoIHxcbiYjMzQ7CiAJCSYjMzQ7ICAgICAgICAgICAgICAgICBwZXJjcHVfYXJyYXkgfCBzdGFja190cmFjZSB8IGNncm91cF9hcnJheSB8IGxydV9oYXNoIHxcbiYjMzQ7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX21hcF9mbGFncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9tYXBfZmxhZ3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5kNjE3YjQzMjczYThlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9tYXBfZmxhZ3MuYwpAQCAtMCwwICYjNDM7MSwxMDAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZnRvb2xfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBtYXBfZmxhZ3NfdGVzdCB7CiYjNDM7CWNvbnN0IGNoYXIgKm5hbWU7CiYjNDM7CWNvbnN0IGNoYXIgKmZsYWdzOwomIzQzOwlfX3UzMiBleHBlY3RlZF9mbGFnczsKJiM0MzsJY29uc3QgY2hhciAqZXJyb3I7CiYjNDM7fSB0ZXN0c1tdID0gewomIzQzOwl7ICYjMzQ7emVybyYjMzQ7LCAmIzM0OzAmIzM0OywgMCB9LAomIzQzOwl7ICYjMzQ7ZGVjaW1hbCYjMzQ7LCAmIzM0OzEyOSYjMzQ7LCBCUEZfRl9OT19QUkVBTExPQyB8IEJQRl9GX1JET05MWV9QUk9HIH0sCiYjNDM7CXsgJiMzNDtoZXhhZGVjaW1hbCYjMzQ7LCAmIzM0OzB4ODEmIzM0OywgQlBGX0ZfTk9fUFJFQUxMT0MgfCBCUEZfRl9SRE9OTFlfUFJPRyB9LAomIzQzOwl7ICYjMzQ7b2N0YWwmIzM0OywgJiMzNDswMjAxJiMzNDssIEJQRl9GX05PX1BSRUFMTE9DIHwgQlBGX0ZfUkRPTkxZX1BST0cgfSwKJiM0MzsJeyAmIzM0O3Bvc2l0aXZlX3NpZ24mIzM0OywgJiMzNDsmIzQzOzEmIzM0OywgQlBGX0ZfTk9fUFJFQUxMT0MgfSwKJiM0MzsJeyAmIzM0O3NpbmdsZV9uYW1lJiMzNDssICYjMzQ7QlBGX0ZfTk9fUFJFQUxMT0MmIzM0OywgQlBGX0ZfTk9fUFJFQUxMT0MgfSwKJiM0MzsJeyAmIzM0O2NvbWJpbmVkX25hbWVzJiMzNDssICYjMzQ7QlBGX0ZfTk9fUFJFQUxMT0MsQlBGX0ZfUkRPTkxZX1BST0cmIzM0OywKJiM0MzsJICBCUEZfRl9OT19QUkVBTExPQyB8IEJQRl9GX1JET05MWV9QUk9HIH0sCiYjNDM7CXsgJiMzNDtyZXBlYXRlZF9uYW1lJiMzNDssICYjMzQ7QlBGX0ZfTk9fUFJFQUxMT0MsQlBGX0ZfTk9fUFJFQUxMT0MmIzM0OywgQlBGX0ZfTk9fUFJFQUxMT0MgfSwKJiM0MzsJeyAmIzM0O3Vua25vd25fbmFtZSYjMzQ7LCAmIzM0O0JQRl9GX05PVF9BX01BUF9GTEFHJiMzNDssIDAsICYjMzQ7Y2FuJiMzOTt0IHBhcnNlJiMzNDsgfSwKJiM0MzsJeyAmIzM0O290aGVyX2NvbW1hbmRfZmxhZyYjMzQ7LCAmIzM0O0JQRl9GX1BBVEhfRkQmIzM0OywgMCwgJiMzNDtjYW4mIzM5O3QgcGFyc2UmIzM0OyB9LAomIzQzOwl7ICYjMzQ7dXBkYXRlX2ZsYWcmIzM0OywgJiMzNDtCUEZfRl9MT0NLJiMzNDssIDAsICYjMzQ7Y2FuJiMzOTt0IHBhcnNlJiMzNDsgfSwKJiM0MzsJeyAmIzM0O2FiYnJldmlhdGVkX25hbWUmIzM0OywgJiMzNDtCUEZfRl9OT19QUkUmIzM0OywgMCwgJiMzNDtjYW4mIzM5O3QgcGFyc2UmIzM0OyB9LAomIzQzOwl7ICYjMzQ7bG93ZXJjYXNlX25hbWUmIzM0OywgJiMzNDticGZfZl9ub19wcmVhbGxvYyYjMzQ7LCAwLCAmIzM0O2NhbiYjMzk7dCBwYXJzZSYjMzQ7IH0sCiYjNDM7CXsgJiMzNDtlbXB0eSYjMzQ7LCAmIzM0OyYjMzQ7LCAwLCAmIzM0O2NhbiYjMzk7dCBwYXJzZSYjMzQ7IH0sCiYjNDM7CXsgJiMzNDt3aGl0ZXNwYWNlJiMzNDssICYjMzQ7ICYjMzQ7LCAwLCAmIzM0O2NhbiYjMzk7dCBwYXJzZSYjMzQ7IH0sCiYjNDM7CXsgJiMzNDtlbXB0eV9saXN0JiMzNDssICYjMzQ7LCYjMzQ7LCAwLCAmIzM0O2NhbiYjMzk7dCBwYXJzZSYjMzQ7IH0sCiYjNDM7CXsgJiMzNDtsZWFkaW5nX2NvbW1hJiMzNDssICYjMzQ7LEJQRl9GX05PX1BSRUFMTE9DJiMzNDssIDAsICYjMzQ7Y2FuJiMzOTt0IHBhcnNlJiMzNDsgfSwKJiM0MzsJeyAmIzM0O3RyYWlsaW5nX2NvbW1hJiMzNDssICYjMzQ7QlBGX0ZfTk9fUFJFQUxMT0MsJiMzNDssIDAsICYjMzQ7Y2FuJiMzOTt0IHBhcnNlJiMzNDsgfSwKJiM0MzsJeyAmIzM0O2VtcHR5X2VsZW1lbnQmIzM0OywgJiMzNDtCUEZfRl9OT19QUkVBTExPQywsQlBGX0ZfUkRPTkxZX1BST0cmIzM0OywgMCwgJiMzNDtjYW4mIzM5O3QgcGFyc2UmIzM0OyB9LAomIzQzOwl7ICYjMzQ7bnVtYmVyX3RoZW5fbmFtZSYjMzQ7LCAmIzM0OzEsQlBGX0ZfUkRPTkxZX1BST0cmIzM0OywgMCwgJiMzNDtjYW4mIzM5O3QgcGFyc2UmIzM0OyB9LAomIzQzOwl7ICYjMzQ7bmFtZV90aGVuX251bWJlciYjMzQ7LCAmIzM0O0JQRl9GX05PX1BSRUFMTE9DLDEyOCYjMzQ7LCAwLCAmIzM0O2NhbiYjMzk7dCBwYXJzZSYjMzQ7IH0sCiYjNDM7CXsgJiMzNDtudW1lcmljX2xpc3QmIzM0OywgJiMzNDsxLDEyOCYjMzQ7LCAwLCAmIzM0O2NhbiYjMzk7dCBwYXJzZSYjMzQ7IH0sCiYjNDM7CXsgJiMzNDt3aGl0ZXNwYWNlX2luX2xpc3QmIzM0OywgJiMzNDtCUEZfRl9OT19QUkVBTExPQywgQlBGX0ZfUkRPTkxZX1BST0cmIzM0OywgMCwgJiMzNDtjYW4mIzM5O3QgcGFyc2UmIzM0OyB9LAomIzQzOwl7ICYjMzQ7b3ZlcmZsb3dfdTMyJiMzNDssICYjMzQ7NDI5NDk2NzI5NiYjMzQ7LCAwLCAmIzM0O2NhbiYjMzk7dCBwYXJzZSYjMzQ7IH0sCiYjNDM7CXsgJiMzNDtvdmVyZmxvd19oZXgmIzM0OywgJiMzNDsweDEwMDAwMDAwMCYjMzQ7LCAwLCAmIzM0O2NhbiYjMzk7dCBwYXJzZSYjMzQ7IH0sCiYjNDM7CXsgJiMzNDtvdmVyZmxvd191NjQmIzM0OywgJiMzNDsxODQ0Njc0NDA3MzcwOTU1MTYxNiYjMzQ7LCAwLCAmIzM0O2NhbiYjMzk7dCBwYXJzZSYjMzQ7IH0sCiYjNDM7CXsgJiMzNDtuZWdhdGl2ZSYjMzQ7LCAmIzM0Oy0xJiMzNDssIDAsICYjMzQ7Y2FuJiMzOTt0IHBhcnNlJiMzNDsgfSwKJiM0MzsJLyogTnVtZXJpYyBiaXRzIHVua25vd24gdG8gYnBmdG9vbCBtdXN0IHN0aWxsIHJlYWNoIHRoZSBrZXJuZWwuICovCiYjNDM7CXsgJiMzNDthbGxfYml0cyYjMzQ7LCAmIzM0OzB4ZmZmZmZmZmYmIzM0OywgMCwgJiMzNDttYXAgY3JlYXRlIGZhaWxlZCYjMzQ7IH0sCiYjNDM7CS8qIFRoZSBrZXJuZWwgdmFsaWRhdGVzIGNvbWJpbmF0aW9ucyBvZiBrbm93biBtYXAgY3JlYXRpb24gZmxhZ3MuICovCiYjNDM7CXsgJiMzNDtpbnZhbGlkX2NvbWJpbmF0aW9uJiMzNDssICYjMzQ7QlBGX0ZfUkRPTkxZLEJQRl9GX1dST05MWSYjMzQ7LCAwLCAmIzM0O21hcCBjcmVhdGUgZmFpbGVkJiMzNDsgfSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfbWFwX2ZsYWdzKGNvbnN0IHN0cnVjdCBtYXBfZmxhZ3NfdGVzdCAqdGVzdCwgY29uc3QgY2hhciAqcGF0aCkKJiM0Mzt7CiYjNDM7CWNoYXIgY21kW01BWF9CUEZUT09MX0NNRF9MRU5dLCBvdXRwdXRbMTAyNF0gPSB7fTsKJiM0MzsJc3RydWN0IGJwZl9tYXBfaW5mbyBpbmZvID0ge307CiYjNDM7CV9fdTMyIGluZm9fbGVuID0gc2l6ZW9mKGluZm8pOwomIzQzOwlpbnQgZmQsIGVycjsKJiM0MzsKJiM0MzsJLyogTGV0IHRoZSBmbGFncyBwYXJzZXIgaGFuZGxlIG5lZ2F0aXZlIG51bWJlcnMgaW5zdGVhZCBvZiBnZXRvcHQoKS4gKi8KJiM0MzsJZXJyID0gc25wcmludGYoY21kLCBzaXplb2YoY21kKSwKJiM0MzsJCSAgICAgICAmIzM0Oy0tIG1hcCBjcmVhdGUgJXMgdHlwZSBoYXNoIGtleSA0IHZhbHVlIDQgZW50cmllcyAxIG5hbWUgZmxhZ3NfdGVzdCBmbGFncyAmIzM5OyVzJiMzOTsgMiZndDsmYW1wOzEmIzM0OywKJiM0MzsJCSAgICAgICBwYXRoLCB0ZXN0LSZndDtmbGFncyk7CiYjNDM7CWlmICghQVNTRVJUX0dUKGVyciwgMCwgJiMzNDtmb3JtYXRfY29tbWFuZCYjMzQ7KSB8fAomIzQzOwkgICAgIUFTU0VSVF9MVChlcnIsIHNpemVvZihjbWQpLCAmIzM0O2NvbW1hbmRfbGVuZ3RoJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwllcnIgPSBnZXRfYnBmdG9vbF9jb21tYW5kX291dHB1dChjbWQsIG91dHB1dCwgc2l6ZW9mKG91dHB1dCkpOwomIzQzOwlpZiAodGVzdC0mZ3Q7ZXJyb3IpIHsKJiM0MzsJCUFTU0VSVF9ORVEoZXJyLCAwLCAmIzM0O3JlamVjdF9mbGFncyYjMzQ7KTsKJiM0MzsJCUFTU0VSVF9IQVNfU1VCU1RSKG91dHB1dCwgdGVzdC0mZ3Q7ZXJyb3IsICYjMzQ7ZXJyb3JfbWVzc2FnZSYjMzQ7KTsKJiM0MzsJCWVyciA9IGFjY2VzcyhwYXRoLCBGX09LKTsKJiM0MzsJCUFTU0VSVF9FUShlcnIsIC0xLCAmIzM0O25vX3BpbiYjMzQ7KTsKJiM0MzsJCUFTU0VSVF9FUShlcnJubywgRU5PRU5ULCAmIzM0O3Bpbl9hYnNlbnQmIzM0Oyk7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2NyZWF0ZV9tYXAmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWZkID0gYnBmX29ial9nZXQocGF0aCk7CiYjNDM7CWlmICghQVNTRVJUX09LX0ZEKGZkLCAmIzM0O29wZW5fbWFwJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlpZiAoQVNTRVJUX09LKGJwZl9tYXBfZ2V0X2luZm9fYnlfZmQoZmQsICZhbXA7aW5mbywgJmFtcDtpbmZvX2xlbiksICYjMzQ7bWFwX2luZm8mIzM0OykpCiYjNDM7CQlBU1NFUlRfRVEoaW5mby5tYXBfZmxhZ3MsIHRlc3QtJmd0O2V4cGVjdGVkX2ZsYWdzLCAmIzM0O21hcF9mbGFncyYjMzQ7KTsKJiM0MzsJY2xvc2UoZmQpOwomIzQzO2NsZWFudXA6CiYjNDM7CXVubGluayhwYXRoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X2JwZnRvb2xfbWFwX2ZsYWdzKHZvaWQpCiYjNDM7ewomIzQzOwljaGFyIGRpcltdID0gJiMzNDsvc3lzL2ZzL2JwZi9icGZ0b29sX2ZsYWdzX1hYWFhYWCYjMzQ7OwomIzQzOwljaGFyIHBhdGhbc2l6ZW9mKGRpcikgJiM0Mzsgc2l6ZW9mKCYjMzQ7L21hcCYjMzQ7KV07CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIobWtkdGVtcChkaXIpLCAmIzM0O2NyZWF0ZV9waW5fZGlyJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICYjMzQ7JXMvbWFwJiMzNDssIGRpcik7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHRlc3RzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KHRlc3RzW2ldLm5hbWUpKQomIzQzOwkJCXRlc3RfbWFwX2ZsYWdzKCZhbXA7dGVzdHNbaV0sIHBhdGgpOwomIzQzOwl9CiYjNDM7CUFTU0VSVF9PSyhybWRpcihkaXIpLCAmIzM0O3JlbW92ZV9waW5fZGlyJiMzNDspOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg5MQoJCQkJCQkJb3V0cHV0OiA4NgoJCQkJCQkJdGhvdWdodHM6IDY1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBObyBGdXp6aW5nIE5lZWRlZCBIZXJlKioKCk9rYXksIHNvIHRoZSB0YXNrIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBUaW1lIHRvIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gc2VlIHdoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gVGhlIGRpZmYgdG91Y2hlczogYHRvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1mZWF0dXJlLnJzdGAsIGB0b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtbWFwLnJzdGAsIGB0b29scy9icGYvYnBmdG9vbC9iYXNoLWNvbXBsZXRpb24vYnBmdG9vbGAsIGB0b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmNgLCBgdG9vbHMvYnBmL2JwZnRvb2wvbWFpbi5oYCwgYHRvb2xzL2JwZi9icGZ0b29sL21hcC5jYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX21hcF9mbGFncy5jYC4KCk5vdywgbGV0JiMzOTtzIGNvbnN1bHQgdGhlIHJ1bGVzLiBUaGUgbmVnYXRpdmUgY3JpdGVyaWEgYXJlIG15IG1haW4gZm9jdXMgaGVyZS4gSXQmIzM5O3Mgb25seSB3b3J0aCAqbm90KiBmdXp6aW5nIGlmICphbGwqIHRoZSBtb2RpZmljYXRpb25zIGZhbGwgaW50byBzcGVjaWZpYyBjYXRlZ29yaWVzLCB3aGljaCwgZnJvbSB0aGUgcnVsZXMsIGJvaWwgZG93biB0byBub24ta2VybmVsIGNvZGU6IGRvY3VtZW50YXRpb24sIHVzZXItc3BhY2UgdG9vbHMsIHNlbGYtdGVzdHMsIGFuZCB0aGUgbGlrZS4gRXNzZW50aWFsbHksIGFueXRoaW5nIHRoYXQgZG9lc24mIzM5O3QgZGlyZWN0bHkgaW1wYWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzIGlzIGEgbm8tZ28gZm9yIGZ1enppbmcuCgpMb29raW5nIGF0IHRoZXNlIGZpbGVzLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXI6IHRoZXkmIzM5O3JlIGFsbCBpbiBgdG9vbHMvYnBmL2JwZnRvb2wvYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiBUaGV5JiMzOTtyZSB1c2VyLXNwYWNlIHRvb2xpbmcgYW5kIHNlbGYtdGVzdHMuICpOb25lKiBvZiB0aGVtIHRvdWNoIGtlcm5lbCBzb3VyY2UgY29kZS4gTm8gZHJpdmVycywgbm8gY29yZSBrZXJuZWwgY29kZSwgbm8gbW9kdWxlcy4KClNvLCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzLCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayBvZiB0aGUgZmlsZSBsaXN0IGFnYWluLiBZZXAsIG5vdGhpbmcgZXZlbiByZW1vdGVseSBjbG9zZSB0byB0aGUga2VybmVsIHByb3Blci4gSXQmIzM5O3MgYWxsIHVuZGVyIGB0b29scy9gLgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQuIFRpbWUgdG8gY2FsbCBpdCBpbiBhbmQgbWFyayB0aGlzIGFzIG5vdCByZXF1aXJpbmcgZnV6emluZy4gTm8gbmVlZCB0byB3YXN0ZSBjeWNsZXMgb24gdXNlci1zcGFjZSB1dGlsaXRpZXMgaW4gdGhpcyBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSB0b29saW5nIChicGZ0b29sKSBhbmQgc2VsZnRlc3RzIHVuZGVyIHRvb2xzL2JwZi9icGZ0b29sIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYuIE5vIGtlcm5lbC1zcGFjZSBjb2RlICh2bWxpbnV4IG9yIGtlcm5lbCBtb2R1bGVzKSBpcyBhZmZlY3RlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdG9vbGluZyAoYnBmdG9vbCkgYW5kIHNlbGZ0ZXN0cyB1bmRlciB0b29scy9icGYvYnBmdG9vbCBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLiBObyBrZXJuZWwtc3BhY2UgY29kZSAodm1saW51eCBvciBrZXJuZWwgbW9kdWxlcykgaXMgYWZmZWN0ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMzowMjowMS40NTM3NTM4ODZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDUzMjg1MjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSB0b29saW5nIChicGZ0b29sKSBhbmQgc2VsZnRlc3RzIHVuZGVyIHRvb2xzL2JwZi9icGZ0b29sIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYuIE5vIGtlcm5lbC1zcGFjZSBjb2RlICh2bWxpbnV4IG9yIGtlcm5lbCBtb2R1bGVzKSBpcyBhZmZlY3RlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAyOjAxLjQ1Mzc1OTIwNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAzMDE5NzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMGFhOGEzZGYyYzE0NzBlYTAzNTlmOWZkMmZlMjAwMzY4MGI2NDQ0ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCAxMSAwMzowMjowMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtZmVhdHVyZS5yc3QgYi90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtZmVhdHVyZS5yc3RcXG5pbmRleCBjN2Y4Mzc4OThiYzc3Li41OTdmMjQyNmQyNTU1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1mZWF0dXJlLnJzdFxcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1mZWF0dXJlLnJzdFxcbkBAIC0yOCw3ICsyOCw3IEBAIEZFQVRVUkUgQ09NTUFORFNcXG4gfCAqKmJwZnRvb2wqKiAqKmZlYXR1cmUgaGVscCoqXFxuIHxcXG4gfCAqQ09NUE9ORU5UKiA6PSB7ICoqa2VybmVsKiogfCAqKmRldioqICpOQU1FKiB9XFxuLXwgKkdST1VQKiA6PSB7ICoqcHJvZ190eXBlcyoqIHwgKiptYXBfdHlwZXMqKiB8ICoqYXR0YWNoX3R5cGVzKiogfCAqKmxpbmtfdHlwZXMqKiB8ICoqaGVscGVycyoqIH1cXG4rfCAqR1JPVVAqIDo9IHsgKipwcm9nX3R5cGVzKiogfCAqKm1hcF90eXBlcyoqIHwgKiptYXBfY3JlYXRlX2ZsYWdzKiogfCAqKmF0dGFjaF90eXBlcyoqIHwgKipsaW5rX3R5cGVzKiogfCAqKmhlbHBlcnMqKiB9XFxuIFxcbiBERVNDUklQVElPTlxcbiA9PT09PT09PT09PVxcbkBAIC02OCwxMiArNjgsMTQgQEAgYnBmdG9vbCBmZWF0dXJlIHByb2JlIGRldiAqTkFNRSogW2Z1bGxdIFttYWNyb3MgW3ByZWZpeCAqUFJFRklYKl1dXFxuIFxcbiBicGZ0b29sIGZlYXR1cmUgbGlzdF9idWlsdGlucyAqR1JPVVAqXFxuICAgICBMaXN0IGl0ZW1zIGtub3duIHRvIGJwZnRvb2wuIFRoZXNlIGNhbiBiZSBCUEYgcHJvZ3JhbSB0eXBlc1xcbi0gICAgKCoqcHJvZ190eXBlcyoqKSwgQlBGIG1hcCB0eXBlcyAoKiptYXBfdHlwZXMqKiksIGF0dGFjaCB0eXBlc1xcbisgICAgKCoqcHJvZ190eXBlcyoqKSwgQlBGIG1hcCB0eXBlcyAoKiptYXBfdHlwZXMqKiksIG1hcCBjcmVhdGlvbiBmbGFnc1xcbisgICAgKCoqbWFwX2NyZWF0ZV9mbGFncyoqKSwgYXR0YWNoIHR5cGVzXFxuICAgICAoKiphdHRhY2hfdHlwZXMqKiksIGxpbmsgdHlwZXMgKCoqbGlua190eXBlcyoqKSwgb3IgQlBGIGhlbHBlciBmdW5jdGlvbnNcXG4gICAgICgqKmhlbHBlcnMqKikuIFRoZSBjb21tYW5kIGRvZXMgbm90IHByb2JlIHRoZSBzeXN0ZW0sIGJ1dCBzaW1wbHkgbGlzdHMgdGhlXFxuICAgICBlbGVtZW50cyB0aGF0IGJwZnRvb2wga25vd3MgZnJvbSBjb21waWxhdGlvbiB0aW1lLCBhcyBwcm92aWRlZCBmcm9tIGxpYmJwZlxcbi0gICAgKGZvciBhbGwgb2JqZWN0IHR5cGVzKSBvciBmcm9tIHRoZSBCUEYgVUFQSSBoZWFkZXIgKGxpc3Qgb2YgaGVscGVycykuIFRoaXNcXG4tICAgIGNhbiBiZSB1c2VkIGluIHNjcmlwdHMgdG8gaXRlcmF0ZSBvdmVyIEJQRiB0eXBlcyBvciBoZWxwZXJzLlxcbisgICAgKGZvciBhbGwgb2JqZWN0IHR5cGVzKSBvciBmcm9tIHRoZSBCUEYgVUFQSSBoZWFkZXIgKGhlbHBlcnMgYW5kIG1hcCBjcmVhdGlvblxcbisgICAgZmxhZ3MpLiBUaGlzIGNhbiBiZSB1c2VkIGluIHNjcmlwdHMgdG8gaXRlcmF0ZSBvdmVyIEJQRiB0eXBlcywgaGVscGVycywgb3JcXG4rICAgIHRoZSBzeW1ib2xpYyBmbGFncyBhY2NlcHRlZCBieSAqKm1hcCBjcmVhdGUqKi5cXG4gXFxuIGJwZnRvb2wgZmVhdHVyZSBoZWxwXFxuICAgICBQcmludCBzaG9ydCBoZWxwIG1lc3NhZ2UuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1tYXAucnN0IGIvdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLW1hcC5yc3RcXG5pbmRleCA1ZGFmM2RlNWM3NDQ2Li41YTVjMjZmNzg5Y2QwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1tYXAucnN0XFxuKysrIGIvdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLW1hcC5yc3RcXG5AQCAtNDgsNiArNDgsNyBAQCBNQVAgQ09NTUFORFNcXG4gfCAqREFUQSogOj0geyBbKipoZXgqKl0gKkJZVEVTKiB9XFxuIHwgKlBST0cqIDo9IHsgKippZCoqICpQUk9HX0lEKiB8ICoqcGlubmVkKiogKkZJTEUqIHwgKip0YWcqKiAqUFJPR19UQUcqIHwgKipuYW1lKiogKlBST0dfTkFNRSogfVxcbiB8ICpWQUxVRSogOj0geyAqREFUQSogfCAqTUFQKiB8ICpQUk9HKiB9XFxuK3wgKkZMQUdTKiA6PSB7IGludGVnZXIgfCAqKkJQRl9GX05BTUVbLEJQRl9GX05BTUUuLi5dKiogfVxcbiB8ICpVUERBVEVfRkxBR1MqIDo9IHsgKiphbnkqKiB8ICoqZXhpc3QqKiB8ICoqbm9leGlzdCoqIH1cXG4gfCAqVFlQRSogOj0geyAqKmhhc2gqKiB8ICoqYXJyYXkqKiB8ICoqcHJvZ19hcnJheSoqIHwgKipwZXJmX2V2ZW50X2FycmF5KiogfCAqKnBlcmNwdV9oYXNoKipcXG4gfCAgICAgfCAqKnBlcmNwdV9hcnJheSoqIHwgKipzdGFja190cmFjZSoqIHwgKipjZ3JvdXBfYXJyYXkqKiB8ICoqbHJ1X2hhc2gqKlxcbkBAIC03Niw5ICs3NywxNiBAQCBicGZ0b29sIG1hcCB7IHNob3cgfCBsaXN0IH0gICBbKk1BUCpdXFxuIGJwZnRvb2wgbWFwIGNyZWF0ZSAqRklMRSogdHlwZSAqVFlQRSoga2V5ICpLRVlfU0laRSogdmFsdWUgKlZBTFVFX1NJWkUqICBlbnRyaWVzICpNQVhfRU5UUklFUyogbmFtZSAqTkFNRSogW2ZsYWdzICpGTEFHUypdIFtpbm5lcl9tYXAgKk1BUCpdIFtvZmZsb2FkX2RldiAqTkFNRSpdXFxuICAgICBDcmVhdGUgYSBuZXcgbWFwIHdpdGggZ2l2ZW4gcGFyYW1ldGVycyBhbmQgcGluIGl0IHRvICpicGZmcyogYXMgKkZJTEUqLlxcbiBcXG4tICAgICpGTEFHUyogc2hvdWxkIGJlIGFuIGludGVnZXIgd2hpY2ggaXMgdGhlIGNvbWJpbmF0aW9uIG9mIGRlc2lyZWQgZmxhZ3MsXFxuLSAgICBlLmcuIDEwMjQgZm9yICoqQlBGX0ZfTU1BUEFCTEUqKiAoc2VlIGJwZi5oIFVBUEkgaGVhZGVyIGZvciBleGlzdGluZ1xcbi0gICAgZmxhZ3MpLlxcbisgICAgKkZMQUdTKiBhY2NlcHRzIGFuIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIGNvbWJpbmluZyB0aGUgZGVzaXJlZCBmbGFnc1xcbisgICAgKGRlY2ltYWwsIGhleGFkZWNpbWFsIHdpdGggYSAqKjB4KiogcHJlZml4LCBvciBvY3RhbCB3aXRoIGEgKiowKiogcHJlZml4KSxcXG4rICAgIG9yIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZnVsbCwgY2FzZS1zZW5zaXRpdmUgbWFwIGNyZWF0aW9uIGZsYWcgbmFtZXNcXG4rICAgIGZyb20gdGhlIGJwZi5oIFVBUEkgaGVhZGVyLiBGb3IgZXhhbXBsZSwgKioxMDI0KiosICoqMHg0MDAqKiwgYW5kXFxuKyAgICAqKkJQRl9GX01NQVBBQkxFKiogYXJlIGVxdWl2YWxlbnQuIE11bHRpcGxlIG5hbWVzIGFyZSBjb21iaW5lZCB3aXRoXFxuKyAgICBiaXR3aXNlIE9SLCBmb3IgZXhhbXBsZSAqKkJQRl9GX05PX1BSRUFMTE9DLEJQRl9GX1JET05MWV9QUk9HKiouXFxuKyAgICBSZXBlYXRlZCBuYW1lcyBhcmUgYWxsb3dlZC4gRW1wdHkgbGlzdCBlbGVtZW50cywgYWJicmV2aWF0ZWQgbmFtZXMsIGFuZFxcbisgICAgbGlzdHMgbWl4aW5nIG51bWJlcnMgd2l0aCBuYW1lcyBhcmUgbm90IGFjY2VwdGVkLiBVc2UgKiowKiogZm9yIG5vIGZsYWdzLlxcbisgICAgTnVtZXJpYyB2YWx1ZXMgY2FuIGluY2x1ZGUgYml0cyB1bmtub3duIHRvIGJwZnRvb2wuIFRoZSBrZXJuZWwgY2hlY2tzXFxuKyAgICB3aGV0aGVyIHRoZSBmbGFncyBhcmUgdmFsaWQgZm9yIHRoZSByZXF1ZXN0ZWQgbWFwIHR5cGUuXFxuIFxcbiAgICAgVG8gY3JlYXRlIG1hcHMgb2YgdHlwZSBhcnJheS1vZi1tYXBzIG9yIGhhc2gtb2YtbWFwcywgdGhlICoqaW5uZXJfbWFwKipcXG4gICAgIGtleXdvcmQgbXVzdCBiZSB1c2VkIHRvIHBhc3MgYW4gaW5uZXIgbWFwLiBUaGUga2VybmVsIG5lZWRzIGl0IHRvIGNvbGxlY3RcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvYmFzaC1jb21wbGV0aW9uL2JwZnRvb2wgYi90b29scy9icGYvYnBmdG9vbC9iYXNoLWNvbXBsZXRpb24vYnBmdG9vbFxcbmluZGV4IDc1Y2JjYjUxMmViYWUuLmVhM2Y1MjFiNmYwODggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvYmFzaC1jb21wbGV0aW9uL2JwZnRvb2xcXG4rKysgYi90b29scy9icGYvYnBmdG9vbC9iYXNoLWNvbXBsZXRpb24vYnBmdG9vbFxcbkBAIC03MTgsNiArNzE4LDEwIEBAIF9icGZ0b29sKClcXG4gICAgICAgICAgICAgICAgICAgICBlc2FjXFxuICAgICAgICAgICAgICAgICAgICAgOztcXG4gICAgICAgICAgICAgICAgIGNyZWF0ZSlcXG4rICAgICAgICAgICAgICAgICAgICAjIEtlZXAgYSBmbGFncyBsaXN0IHRvZ2V0aGVyIGlmIHJlYWRsaW5lIHNwbGl0cyBhdCBjb21tYXMuXFxuKyAgICAgICAgICAgICAgICAgICAgaWYgW1sgJENPTVBfV09SREJSRUFLUyA9PSAqLCogXFx1MDAyNlxcdTAwMjYgKCAkY3VyID09ICwgfHwgJHByZXYgPT0gLCApIF1dOyB0aGVuXFxuKyAgICAgICAgICAgICAgICAgICAgICAgIF9nZXRfY29tcF93b3Jkc19ieV9yZWYgLW4gLCBjdXIgcHJldlxcbisgICAgICAgICAgICAgICAgICAgIGZpXFxuICAgICAgICAgICAgICAgICAgICAgY2FzZSAkcHJldiBpblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAkY29tbWFuZClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9maWxlZGlyXFxuQEAgLTcyOSw3ICs3MzMsMjEgQEAgX2JwZnRvb2woKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09NUFJFUExZPSggJCggY29tcGdlbiAtVyBcXFwiJEJQRlRPT0xfTUFQX0NSRUFURV9UWVBFU1xcXCIgLS0gXFxcIiRjdXJcXFwiICkgKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDBcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7XFxuLSAgICAgICAgICAgICAgICAgICAgICAgIGtleXx2YWx1ZXxmbGFnc3xlbnRyaWVzKVxcbisgICAgICAgICAgICAgICAgICAgICAgICBmbGFncylcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvcHQgLW8gbm9zcGFjZVxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgZmxhZ3M9XFxcIiQoYnBmdG9vbCBmZWF0dXJlIGxpc3RfYnVpbHRpbnMgbWFwX2NyZWF0ZV9mbGFncyAyXFx1MDAzZS9kZXYvbnVsbClcXFwiXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBwcmVmaXg9IGZsYWdcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgY29tbWEgaXMgbm90IGEgd29yZCBicmVhaywgUmVhZGxpbmUgcmVwbGFjZXMgdGhlIHdob2xlXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHdvcmQsIHNvIHByZXNlcnZlIHRoZSBmbGFncyBiZWZvcmUgdGhlIGxhc3QgY29tbWEuXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBbWyAkY3VyID09ICosKiBcXHUwMDI2XFx1MDAyNiAkQ09NUF9XT1JEQlJFQUtTICE9ICosKiBdXTsgdGhlblxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeD1cXFwiJHtjdXIlLCp9LFxcXCJcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZmxhZyBpbiAkKGNvbXBnZW4gLVcgXFxcIiRmbGFnc1xcXCIgLS0gXFxcIiR7Y3VyIyMqLH1cXFwiKTsgZG9cXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01QUkVQTFkrPSggXFxcIiR7cHJlZml4fSR7ZmxhZ31cXFwiIClcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmVcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA7O1xcbisgICAgICAgICAgICAgICAgICAgICAgICBrZXl8dmFsdWV8ZW50cmllcylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lcl9tYXApXFxuQEAgLTExOTIsNyArMTIxMCw3IEBAIF9icGZ0b29sKClcXG4gICAgICAgICAgICAgICAgICAgICA7O1xcbiAgICAgICAgICAgICAgICAgbGlzdF9idWlsdGlucylcXG4gICAgICAgICAgICAgICAgICAgICBbWyAkcHJldiAhPSBcXFwiJGNvbW1hbmRcXFwiIF1dIFxcdTAwMjZcXHUwMDI2IHJldHVybiAwXFxuLSAgICAgICAgICAgICAgICAgICAgQ09NUFJFUExZPSggJCggY29tcGdlbiAtVyAncHJvZ190eXBlcyBtYXBfdHlwZXMgXFxcXFxcbisgICAgICAgICAgICAgICAgICAgIENPTVBSRVBMWT0oICQoIGNvbXBnZW4gLVcgJ3Byb2dfdHlwZXMgbWFwX3R5cGVzIG1hcF9jcmVhdGVfZmxhZ3MgXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2hfdHlwZXMgbGlua190eXBlcyBoZWxwZXJzJyAtLSBcXFwiJGN1clxcXCIgKSApXFxuICAgICAgICAgICAgICAgICAgICAgOztcXG4gICAgICAgICAgICAgICAgICopXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuYyBiL3Rvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuY1xcbmluZGV4IDBmNjA3MGEwYzhlNzEuLmI1NDE5ZDVhNjYxYTUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jXFxuKysrIGIvdG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jXFxuQEAgLTEyMjAsNiArMTIyMCw4IEBAIHN0YXRpYyBpbnQgZG9fbGlzdF9idWlsdGlucyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdGdldF9uYW1lID0gKGNvbnN0IGNoYXIgKigqKSh1bnNpZ25lZCBpbnQpKWxpYmJwZl9icGZfcHJvZ190eXBlX3N0cjtcXG4gXFx0fSBlbHNlIGlmIChpc19wcmVmaXgoKmFyZ3YsIFxcXCJtYXBfdHlwZXNcXFwiKSkge1xcbiBcXHRcXHRnZXRfbmFtZSA9IChjb25zdCBjaGFyICooKikodW5zaWduZWQgaW50KSlsaWJicGZfYnBmX21hcF90eXBlX3N0cjtcXG4rXFx0fSBlbHNlIGlmIChpc19wcmVmaXgoKmFyZ3YsIFxcXCJtYXBfY3JlYXRlX2ZsYWdzXFxcIikpIHtcXG4rXFx0XFx0Z2V0X25hbWUgPSBtYXBfY3JlYXRlX2ZsYWdfbmFtZTtcXG4gXFx0fSBlbHNlIGlmIChpc19wcmVmaXgoKmFyZ3YsIFxcXCJhdHRhY2hfdHlwZXNcXFwiKSkge1xcbiBcXHRcXHRnZXRfbmFtZSA9IChjb25zdCBjaGFyICooKikodW5zaWduZWQgaW50KSlsaWJicGZfYnBmX2F0dGFjaF90eXBlX3N0cjtcXG4gXFx0fSBlbHNlIGlmIChpc19wcmVmaXgoKmFyZ3YsIFxcXCJsaW5rX3R5cGVzXFxcIikpIHtcXG5AQCAtMTIyNyw3ICsxMjI5LDcgQEAgc3RhdGljIGludCBkb19saXN0X2J1aWx0aW5zKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0fSBlbHNlIGlmIChpc19wcmVmaXgoKmFyZ3YsIFxcXCJoZWxwZXJzXFxcIikpIHtcXG4gXFx0XFx0Z2V0X25hbWUgPSBnZXRfaGVscGVyX25hbWU7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHBfZXJyKFxcXCJleHBlY3RlZCAncHJvZ190eXBlcycsICdtYXBfdHlwZXMnLCAnYXR0YWNoX3R5cGVzJywgJ2xpbmtfdHlwZXMnIG9yICdoZWxwZXJzJywgZ290OiAlc1xcXCIsICphcmd2KTtcXG4rXFx0XFx0cF9lcnIoXFxcImV4cGVjdGVkICdwcm9nX3R5cGVzJywgJ21hcF90eXBlcycsICdtYXBfY3JlYXRlX2ZsYWdzJywgJ2F0dGFjaF90eXBlcycsICdsaW5rX3R5cGVzJyBvciAnaGVscGVycycsIGdvdDogJXNcXFwiLCAqYXJndik7XFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFx0fVxcbiBcXG5AQCAtMTI2NSw3ICsxMjY3LDggQEAgc3RhdGljIGludCBkb19oZWxwKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0XFx0XFxcIiAgICAgICAlMSRzICUyJHMgaGVscFxcXFxuXFxcIlxcbiBcXHRcXHRcXFwiXFxcXG5cXFwiXFxuIFxcdFxcdFxcXCIgICAgICAgQ09NUE9ORU5UIDo9IHsga2VybmVsIHwgZGV2IE5BTUUgfVxcXFxuXFxcIlxcbi1cXHRcXHRcXFwiICAgICAgIEdST1VQIDo9IHsgcHJvZ190eXBlcyB8IG1hcF90eXBlcyB8IGF0dGFjaF90eXBlcyB8IGxpbmtfdHlwZXMgfCBoZWxwZXJzIH1cXFxcblxcXCJcXG4rXFx0XFx0XFxcIiAgICAgICBHUk9VUCA6PSB7IHByb2dfdHlwZXMgfCBtYXBfdHlwZXMgfCBtYXBfY3JlYXRlX2ZsYWdzIHxcXFxcblxcXCJcXG4rXFx0XFx0XFxcIiAgICAgICAgICAgICAgICAgIGF0dGFjaF90eXBlcyB8IGxpbmtfdHlwZXMgfCBoZWxwZXJzIH1cXFxcblxcXCJcXG4gXFx0XFx0XFxcIiAgICAgICBcXFwiIEhFTFBfU1BFQ19PUFRJT05TIFxcXCIgfVxcXFxuXFxcIlxcbiBcXHRcXHRcXFwiXFxcIixcXG4gXFx0XFx0YmluX25hbWUsIGFyZ3ZbLTJdKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvbWFpbi5oIGIvdG9vbHMvYnBmL2JwZnRvb2wvbWFpbi5oXFxuaW5kZXggOTMxNWExZGIxZjdjMi4uM2UyODU2YzlmNTk1YiAxMDA2NDRcXG4tLS0gYS90b29scy9icGYvYnBmdG9vbC9tYWluLmhcXG4rKysgYi90b29scy9icGYvYnBmdG9vbC9tYWluLmhcXG5AQCAtMTgwLDYgKzE4MCw3IEBAIGludCBkb190b2tlbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIF9fd2VhaztcXG4gaW50IHBhcnNlX3UzMl9hcmcoaW50ICphcmdjLCBjaGFyICoqKmFyZ3YsIF9fdTMyICp2YWwsIGNvbnN0IGNoYXIgKndoYXQpO1xcbiBpbnQgcHJvZ19wYXJzZV9mZChpbnQgKmFyZ2MsIGNoYXIgKioqYXJndik7XFxuIGludCBwcm9nX3BhcnNlX2ZkcyhpbnQgKmFyZ2MsIGNoYXIgKioqYXJndiwgaW50ICoqZmRzKTtcXG4rY29uc3QgY2hhciAqbWFwX2NyZWF0ZV9mbGFnX25hbWUodW5zaWduZWQgaW50IGlkKTtcXG4gaW50IG1hcF9wYXJzZV9mZChpbnQgKmFyZ2MsIGNoYXIgKioqYXJndiwgX191MzIgb3Blbl9mbGFncyk7XFxuIGludCBtYXBfcGFyc2VfZmRzKGludCAqYXJnYywgY2hhciAqKiphcmd2LCBpbnQgKipmZHMsIF9fdTMyIG9wZW5fZmxhZ3MpO1xcbiBpbnQgbWFwX3BhcnNlX2ZkX2FuZF9pbmZvKGludCAqYXJnYywgY2hhciAqKiphcmd2LCBzdHJ1Y3QgYnBmX21hcF9pbmZvICppbmZvLFxcbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9tYXAuYyBiL3Rvb2xzL2JwZi9icGZ0b29sL21hcC5jXFxuaW5kZXggNjg0YThmYjcyNDE0Ni4uNDQ0NTAxNDI0N2Q2MiAxMDA2NDRcXG4tLS0gYS90b29scy9icGYvYnBmdG9vbC9tYXAuY1xcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL21hcC5jXFxuQEAgLTEyNTAsNiArMTI1MCw4MSBAQCBzdGF0aWMgaW50IGRvX3BpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qge1xcbitcXHRjb25zdCBjaGFyICpuYW1lO1xcbitcXHRfX3UzMiB2YWx1ZTtcXG4rfSBtYXBfY3JlYXRlX2ZsYWdzW10gPSB7XFxuKyNkZWZpbmUgTUFQX0NSRUFURV9GTEFHKGZsYWcpIHsgI2ZsYWcsIGZsYWcgfVxcbitcXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfTk9fUFJFQUxMT0MpLFxcbitcXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfTk9fQ09NTU9OX0xSVSksXFxuK1xcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9OVU1BX05PREUpLFxcbitcXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfUkRPTkxZKSxcXG4rXFx0TUFQX0NSRUFURV9GTEFHKEJQRl9GX1dST05MWSksXFxuK1xcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9TVEFDS19CVUlMRF9JRCksXFxuK1xcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9aRVJPX1NFRUQpLFxcbitcXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfUkRPTkxZX1BST0cpLFxcbitcXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfV1JPTkxZX1BST0cpLFxcbitcXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfQ0xPTkUpLFxcbitcXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfTU1BUEFCTEUpLFxcbitcXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfUFJFU0VSVkVfRUxFTVMpLFxcbitcXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfSU5ORVJfTUFQKSxcXG4rXFx0TUFQX0NSRUFURV9GTEFHKEJQRl9GX0xJTkspLFxcbitcXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfVlRZUEVfQlRGX09CSl9GRCksXFxuK1xcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9UT0tFTl9GRCksXFxuK1xcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9TRUdWX09OX0ZBVUxUKSxcXG4rXFx0TUFQX0NSRUFURV9GTEFHKEJQRl9GX05PX1VTRVJfQ09OViksXFxuK1xcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9SQl9PVkVSV1JJVEUpLFxcbisjdW5kZWYgTUFQX0NSRUFURV9GTEFHXFxuK307XFxuK1xcbitjb25zdCBjaGFyICptYXBfY3JlYXRlX2ZsYWdfbmFtZSh1bnNpZ25lZCBpbnQgaWQpXFxuK3tcXG4rXFx0aWYgKGlkIFxcdTAwM2U9IEFSUkFZX1NJWkUobWFwX2NyZWF0ZV9mbGFncykpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0cmV0dXJuIG1hcF9jcmVhdGVfZmxhZ3NbaWRdLm5hbWU7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGFyc2VfbWFwX2NyZWF0ZV9mbGFncyhjb25zdCBjaGFyICphcmcsIF9fdTMyICpmbGFncylcXG4re1xcbitcXHRjb25zdCBjaGFyICpuYW1lID0gYXJnLCAqY29tbWE7XFxuK1xcdGxvbmcgbG9uZyB2YWx1ZTtcXG4rXFx0X191MzIgcGFyc2VkID0gMDtcXG4rXFx0c2l6ZV90IGxlbiwgaTtcXG4rXFx0Y2hhciAqZW5kO1xcbitcXG4rXFx0LyogS2VlcCBiYXNlLTAgbnVtZXJpYyBpbnB1dCwgaW5jbHVkaW5nIGJpdHMgdW5rbm93biB0byB0aGlzIGJwZnRvb2wuICovXFxuK1xcdGlmIChzdHJuY21wKGFyZywgXFxcIkJQRl9GX1xcXCIsIDYpKSB7XFxuK1xcdFxcdGVycm5vID0gMDtcXG4rXFx0XFx0dmFsdWUgPSBzdHJ0b2xsKGFyZywgXFx1MDAyNmVuZCwgMCk7XFxuK1xcdFxcdGlmIChlcnJubyB8fCBlbmQgPT0gYXJnIHx8ICplbmQgfHwgdmFsdWUgXFx1MDAzYyAwIHx8IHZhbHVlIFxcdTAwM2UgVUlOVDMyX01BWClcXG4rXFx0XFx0XFx0Z290byBpbnZhbGlkO1xcbitcXHRcXHQqZmxhZ3MgPSB2YWx1ZTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGRvIHtcXG4rXFx0XFx0Y29tbWEgPSBzdHJjaHIobmFtZSwgJywnKTtcXG4rXFx0XFx0bGVuID0gY29tbWEgPyAoc2l6ZV90KShjb21tYSAtIG5hbWUpIDogc3RybGVuKG5hbWUpO1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShtYXBfY3JlYXRlX2ZsYWdzKTsgaSsrKSB7XFxuK1xcdFxcdFxcdGlmIChzdHJsZW4obWFwX2NyZWF0ZV9mbGFnc1tpXS5uYW1lKSA9PSBsZW4gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICFzdHJuY21wKG5hbWUsIG1hcF9jcmVhdGVfZmxhZ3NbaV0ubmFtZSwgbGVuKSlcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKGkgPT0gQVJSQVlfU0laRShtYXBfY3JlYXRlX2ZsYWdzKSlcXG4rXFx0XFx0XFx0Z290byBpbnZhbGlkO1xcbitcXHRcXHRwYXJzZWQgfD0gbWFwX2NyZWF0ZV9mbGFnc1tpXS52YWx1ZTtcXG4rXFx0XFx0aWYgKGNvbW1hKVxcbitcXHRcXHRcXHRuYW1lID0gY29tbWEgKyAxO1xcbitcXHR9IHdoaWxlIChjb21tYSk7XFxuK1xcbitcXHQqZmxhZ3MgPSBwYXJzZWQ7XFxuK1xcdHJldHVybiAwO1xcbitpbnZhbGlkOlxcbitcXHRwX2VycihcXFwiY2FuJ3QgcGFyc2UgJXMgYXMgbWFwIGNyZWF0aW9uIGZsYWdzXFxcIiwgYXJnKTtcXG4rXFx0cmV0dXJuIC0xO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGRvX2NyZWF0ZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIHtcXG4gXFx0TElCQlBGX09QVFMoYnBmX21hcF9jcmVhdGVfb3B0cywgYXR0cik7XFxuQEAgLTEzMDEsOSArMTM3NiwxNCBAQCBzdGF0aWMgaW50IGRvX2NyZWF0ZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdFxcdFxcdFxcdCAgXFxcIm1heCBlbnRyaWVzXFxcIikpXFxuIFxcdFxcdFxcdFxcdGdvdG8gZXhpdDtcXG4gXFx0XFx0fSBlbHNlIGlmIChpc19wcmVmaXgoKmFyZ3YsIFxcXCJmbGFnc1xcXCIpKSB7XFxuLVxcdFxcdFxcdGlmIChwYXJzZV91MzJfYXJnKFxcdTAwMjZhcmdjLCBcXHUwMDI2YXJndiwgXFx1MDAyNmF0dHIubWFwX2ZsYWdzLFxcbi1cXHRcXHRcXHRcXHRcXHQgIFxcXCJmbGFnc1xcXCIpKVxcbitcXHRcXHRcXHRORVhUX0FSRygpO1xcbitcXHRcXHRcXHRpZiAoYXR0ci5tYXBfZmxhZ3MpIHtcXG4rXFx0XFx0XFx0XFx0cF9lcnIoXFxcImZsYWdzIGFscmVhZHkgc3BlY2lmaWVkXFxcIik7XFxuIFxcdFxcdFxcdFxcdGdvdG8gZXhpdDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRpZiAocGFyc2VfbWFwX2NyZWF0ZV9mbGFncygqYXJndiwgXFx1MDAyNmF0dHIubWFwX2ZsYWdzKSlcXG4rXFx0XFx0XFx0XFx0Z290byBleGl0O1xcbitcXHRcXHRcXHRORVhUX0FSRygpO1xcbiBcXHRcXHR9IGVsc2UgaWYgKGlzX3ByZWZpeCgqYXJndiwgXFxcImRldlxcXCIpKSB7XFxuIFxcdFxcdFxcdHBfaW5mbyhcXFwiV2FybmluZzogJ2JwZnRvb2wgbWFwIGNyZWF0ZSBbLi4uXSBkZXYgXFx1MDAzY2lmbmFtZVxcdTAwM2UnIHN5bnRheCBpcyBkZXByZWNhdGVkLlxcXFxuXFxcIlxcbiBcXHRcXHRcXHQgICAgICAgXFxcIkdvaW5nIGZ1cnRoZXIsIHBsZWFzZSB1c2UgJ29mZmxvYWRfZGV2IFxcdTAwM2NpZm5hbWVcXHUwMDNlJyB0byByZXF1ZXN0IGhhcmR3YXJlIG9mZmxvYWQgZm9yIHRoZSBtYXAuXFxcIik7XFxuQEAgLTE0NzQsNiArMTU1NCw3IEBAIHN0YXRpYyBpbnQgZG9faGVscChpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdFxcXCIgICAgICAgREFUQSA6PSB7IFtoZXhdIEJZVEVTIH1cXFxcblxcXCJcXG4gXFx0XFx0XFxcIiAgICAgICBcXFwiIEhFTFBfU1BFQ19QUk9HUkFNIFxcXCJcXFxcblxcXCJcXG4gXFx0XFx0XFxcIiAgICAgICBWQUxVRSA6PSB7IERBVEEgfCBNQVAgfCBQUk9HIH1cXFxcblxcXCJcXG4rXFx0XFx0XFxcIiAgICAgICBGTEFHUyA6PSB7IGludGVnZXIgfCBCUEZfRl9OQU1FWyxCUEZfRl9OQU1FLi4uXSB9XFxcXG5cXFwiXFxuIFxcdFxcdFxcXCIgICAgICAgVVBEQVRFX0ZMQUdTIDo9IHsgYW55IHwgZXhpc3QgfCBub2V4aXN0IH1cXFxcblxcXCJcXG4gXFx0XFx0XFxcIiAgICAgICBUWVBFIDo9IHsgaGFzaCB8IGFycmF5IHwgcHJvZ19hcnJheSB8IHBlcmZfZXZlbnRfYXJyYXkgfCBwZXJjcHVfaGFzaCB8XFxcXG5cXFwiXFxuIFxcdFxcdFxcXCIgICAgICAgICAgICAgICAgIHBlcmNwdV9hcnJheSB8IHN0YWNrX3RyYWNlIHwgY2dyb3VwX2FycmF5IHwgbHJ1X2hhc2ggfFxcXFxuXFxcIlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX21hcF9mbGFncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9tYXBfZmxhZ3MuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDYxN2I0MzI3M2E4ZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX21hcF9mbGFncy5jXFxuQEAgLTAsMCArMSwxMDAgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZnRvb2xfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBtYXBfZmxhZ3NfdGVzdCB7XFxuK1xcdGNvbnN0IGNoYXIgKm5hbWU7XFxuK1xcdGNvbnN0IGNoYXIgKmZsYWdzO1xcbitcXHRfX3UzMiBleHBlY3RlZF9mbGFncztcXG4rXFx0Y29uc3QgY2hhciAqZXJyb3I7XFxuK30gdGVzdHNbXSA9IHtcXG4rXFx0eyBcXFwiemVyb1xcXCIsIFxcXCIwXFxcIiwgMCB9LFxcbitcXHR7IFxcXCJkZWNpbWFsXFxcIiwgXFxcIjEyOVxcXCIsIEJQRl9GX05PX1BSRUFMTE9DIHwgQlBGX0ZfUkRPTkxZX1BST0cgfSxcXG4rXFx0eyBcXFwiaGV4YWRlY2ltYWxcXFwiLCBcXFwiMHg4MVxcXCIsIEJQRl9GX05PX1BSRUFMTE9DIHwgQlBGX0ZfUkRPTkxZX1BST0cgfSxcXG4rXFx0eyBcXFwib2N0YWxcXFwiLCBcXFwiMDIwMVxcXCIsIEJQRl9GX05PX1BSRUFMTE9DIHwgQlBGX0ZfUkRPTkxZX1BST0cgfSxcXG4rXFx0eyBcXFwicG9zaXRpdmVfc2lnblxcXCIsIFxcXCIrMVxcXCIsIEJQRl9GX05PX1BSRUFMTE9DIH0sXFxuK1xcdHsgXFxcInNpbmdsZV9uYW1lXFxcIiwgXFxcIkJQRl9GX05PX1BSRUFMTE9DXFxcIiwgQlBGX0ZfTk9fUFJFQUxMT0MgfSxcXG4rXFx0eyBcXFwiY29tYmluZWRfbmFtZXNcXFwiLCBcXFwiQlBGX0ZfTk9fUFJFQUxMT0MsQlBGX0ZfUkRPTkxZX1BST0dcXFwiLFxcbitcXHQgIEJQRl9GX05PX1BSRUFMTE9DIHwgQlBGX0ZfUkRPTkxZX1BST0cgfSxcXG4rXFx0eyBcXFwicmVwZWF0ZWRfbmFtZVxcXCIsIFxcXCJCUEZfRl9OT19QUkVBTExPQyxCUEZfRl9OT19QUkVBTExPQ1xcXCIsIEJQRl9GX05PX1BSRUFMTE9DIH0sXFxuK1xcdHsgXFxcInVua25vd25fbmFtZVxcXCIsIFxcXCJCUEZfRl9OT1RfQV9NQVBfRkxBR1xcXCIsIDAsIFxcXCJjYW4ndCBwYXJzZVxcXCIgfSxcXG4rXFx0eyBcXFwib3RoZXJfY29tbWFuZF9mbGFnXFxcIiwgXFxcIkJQRl9GX1BBVEhfRkRcXFwiLCAwLCBcXFwiY2FuJ3QgcGFyc2VcXFwiIH0sXFxuK1xcdHsgXFxcInVwZGF0ZV9mbGFnXFxcIiwgXFxcIkJQRl9GX0xPQ0tcXFwiLCAwLCBcXFwiY2FuJ3QgcGFyc2VcXFwiIH0sXFxuK1xcdHsgXFxcImFiYnJldmlhdGVkX25hbWVcXFwiLCBcXFwiQlBGX0ZfTk9fUFJFXFxcIiwgMCwgXFxcImNhbid0IHBhcnNlXFxcIiB9LFxcbitcXHR7IFxcXCJsb3dlcmNhc2VfbmFtZVxcXCIsIFxcXCJicGZfZl9ub19wcmVhbGxvY1xcXCIsIDAsIFxcXCJjYW4ndCBwYXJzZVxcXCIgfSxcXG4rXFx0eyBcXFwiZW1wdHlcXFwiLCBcXFwiXFxcIiwgMCwgXFxcImNhbid0IHBhcnNlXFxcIiB9LFxcbitcXHR7IFxcXCJ3aGl0ZXNwYWNlXFxcIiwgXFxcIiBcXFwiLCAwLCBcXFwiY2FuJ3QgcGFyc2VcXFwiIH0sXFxuK1xcdHsgXFxcImVtcHR5X2xpc3RcXFwiLCBcXFwiLFxcXCIsIDAsIFxcXCJjYW4ndCBwYXJzZVxcXCIgfSxcXG4rXFx0eyBcXFwibGVhZGluZ19jb21tYVxcXCIsIFxcXCIsQlBGX0ZfTk9fUFJFQUxMT0NcXFwiLCAwLCBcXFwiY2FuJ3QgcGFyc2VcXFwiIH0sXFxuK1xcdHsgXFxcInRyYWlsaW5nX2NvbW1hXFxcIiwgXFxcIkJQRl9GX05PX1BSRUFMTE9DLFxcXCIsIDAsIFxcXCJjYW4ndCBwYXJzZVxcXCIgfSxcXG4rXFx0eyBcXFwiZW1wdHlfZWxlbWVudFxcXCIsIFxcXCJCUEZfRl9OT19QUkVBTExPQywsQlBGX0ZfUkRPTkxZX1BST0dcXFwiLCAwLCBcXFwiY2FuJ3QgcGFyc2VcXFwiIH0sXFxuK1xcdHsgXFxcIm51bWJlcl90aGVuX25hbWVcXFwiLCBcXFwiMSxCUEZfRl9SRE9OTFlfUFJPR1xcXCIsIDAsIFxcXCJjYW4ndCBwYXJzZVxcXCIgfSxcXG4rXFx0eyBcXFwibmFtZV90aGVuX251bWJlclxcXCIsIFxcXCJCUEZfRl9OT19QUkVBTExPQywxMjhcXFwiLCAwLCBcXFwiY2FuJ3QgcGFyc2VcXFwiIH0sXFxuK1xcdHsgXFxcIm51bWVyaWNfbGlzdFxcXCIsIFxcXCIxLDEyOFxcXCIsIDAsIFxcXCJjYW4ndCBwYXJzZVxcXCIgfSxcXG4rXFx0eyBcXFwid2hpdGVzcGFjZV9pbl9saXN0XFxcIiwgXFxcIkJQRl9GX05PX1BSRUFMTE9DLCBCUEZfRl9SRE9OTFlfUFJPR1xcXCIsIDAsIFxcXCJjYW4ndCBwYXJzZVxcXCIgfSxcXG4rXFx0eyBcXFwib3ZlcmZsb3dfdTMyXFxcIiwgXFxcIjQyOTQ5NjcyOTZcXFwiLCAwLCBcXFwiY2FuJ3QgcGFyc2VcXFwiIH0sXFxuK1xcdHsgXFxcIm92ZXJmbG93X2hleFxcXCIsIFxcXCIweDEwMDAwMDAwMFxcXCIsIDAsIFxcXCJjYW4ndCBwYXJzZVxcXCIgfSxcXG4rXFx0eyBcXFwib3ZlcmZsb3dfdTY0XFxcIiwgXFxcIjE4NDQ2NzQ0MDczNzA5NTUxNjE2XFxcIiwgMCwgXFxcImNhbid0IHBhcnNlXFxcIiB9LFxcbitcXHR7IFxcXCJuZWdhdGl2ZVxcXCIsIFxcXCItMVxcXCIsIDAsIFxcXCJjYW4ndCBwYXJzZVxcXCIgfSxcXG4rXFx0LyogTnVtZXJpYyBiaXRzIHVua25vd24gdG8gYnBmdG9vbCBtdXN0IHN0aWxsIHJlYWNoIHRoZSBrZXJuZWwuICovXFxuK1xcdHsgXFxcImFsbF9iaXRzXFxcIiwgXFxcIjB4ZmZmZmZmZmZcXFwiLCAwLCBcXFwibWFwIGNyZWF0ZSBmYWlsZWRcXFwiIH0sXFxuK1xcdC8qIFRoZSBrZXJuZWwgdmFsaWRhdGVzIGNvbWJpbmF0aW9ucyBvZiBrbm93biBtYXAgY3JlYXRpb24gZmxhZ3MuICovXFxuK1xcdHsgXFxcImludmFsaWRfY29tYmluYXRpb25cXFwiLCBcXFwiQlBGX0ZfUkRPTkxZLEJQRl9GX1dST05MWVxcXCIsIDAsIFxcXCJtYXAgY3JlYXRlIGZhaWxlZFxcXCIgfSxcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3RfbWFwX2ZsYWdzKGNvbnN0IHN0cnVjdCBtYXBfZmxhZ3NfdGVzdCAqdGVzdCwgY29uc3QgY2hhciAqcGF0aClcXG4re1xcbitcXHRjaGFyIGNtZFtNQVhfQlBGVE9PTF9DTURfTEVOXSwgb3V0cHV0WzEwMjRdID0ge307XFxuK1xcdHN0cnVjdCBicGZfbWFwX2luZm8gaW5mbyA9IHt9O1xcbitcXHRfX3UzMiBpbmZvX2xlbiA9IHNpemVvZihpbmZvKTtcXG4rXFx0aW50IGZkLCBlcnI7XFxuK1xcbitcXHQvKiBMZXQgdGhlIGZsYWdzIHBhcnNlciBoYW5kbGUgbmVnYXRpdmUgbnVtYmVycyBpbnN0ZWFkIG9mIGdldG9wdCgpLiAqL1xcbitcXHRlcnIgPSBzbnByaW50ZihjbWQsIHNpemVvZihjbWQpLFxcbitcXHRcXHQgICAgICAgXFxcIi0tIG1hcCBjcmVhdGUgJXMgdHlwZSBoYXNoIGtleSA0IHZhbHVlIDQgZW50cmllcyAxIG5hbWUgZmxhZ3NfdGVzdCBmbGFncyAnJXMnIDJcXHUwMDNlXFx1MDAyNjFcXFwiLFxcbitcXHRcXHQgICAgICAgcGF0aCwgdGVzdC1cXHUwMDNlZmxhZ3MpO1xcbitcXHRpZiAoIUFTU0VSVF9HVChlcnIsIDAsIFxcXCJmb3JtYXRfY29tbWFuZFxcXCIpIHx8XFxuK1xcdCAgICAhQVNTRVJUX0xUKGVyciwgc2l6ZW9mKGNtZCksIFxcXCJjb21tYW5kX2xlbmd0aFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRlcnIgPSBnZXRfYnBmdG9vbF9jb21tYW5kX291dHB1dChjbWQsIG91dHB1dCwgc2l6ZW9mKG91dHB1dCkpO1xcbitcXHRpZiAodGVzdC1cXHUwMDNlZXJyb3IpIHtcXG4rXFx0XFx0QVNTRVJUX05FUShlcnIsIDAsIFxcXCJyZWplY3RfZmxhZ3NcXFwiKTtcXG4rXFx0XFx0QVNTRVJUX0hBU19TVUJTVFIob3V0cHV0LCB0ZXN0LVxcdTAwM2VlcnJvciwgXFxcImVycm9yX21lc3NhZ2VcXFwiKTtcXG4rXFx0XFx0ZXJyID0gYWNjZXNzKHBhdGgsIEZfT0spO1xcbitcXHRcXHRBU1NFUlRfRVEoZXJyLCAtMSwgXFxcIm5vX3BpblxcXCIpO1xcbitcXHRcXHRBU1NFUlRfRVEoZXJybm8sIEVOT0VOVCwgXFxcInBpbl9hYnNlbnRcXFwiKTtcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHR9XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImNyZWF0ZV9tYXBcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0ZmQgPSBicGZfb2JqX2dldChwYXRoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfRkQoZmQsIFxcXCJvcGVuX21hcFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdGlmIChBU1NFUlRfT0soYnBmX21hcF9nZXRfaW5mb19ieV9mZChmZCwgXFx1MDAyNmluZm8sIFxcdTAwMjZpbmZvX2xlbiksIFxcXCJtYXBfaW5mb1xcXCIpKVxcbitcXHRcXHRBU1NFUlRfRVEoaW5mby5tYXBfZmxhZ3MsIHRlc3QtXFx1MDAzZWV4cGVjdGVkX2ZsYWdzLCBcXFwibWFwX2ZsYWdzXFxcIik7XFxuK1xcdGNsb3NlKGZkKTtcXG4rY2xlYW51cDpcXG4rXFx0dW5saW5rKHBhdGgpO1xcbit9XFxuK1xcbit2b2lkIHRlc3RfYnBmdG9vbF9tYXBfZmxhZ3Modm9pZClcXG4re1xcbitcXHRjaGFyIGRpcltdID0gXFxcIi9zeXMvZnMvYnBmL2JwZnRvb2xfZmxhZ3NfWFhYWFhYXFxcIjtcXG4rXFx0Y2hhciBwYXRoW3NpemVvZihkaXIpICsgc2l6ZW9mKFxcXCIvbWFwXFxcIildO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihta2R0ZW1wKGRpciksIFxcXCJjcmVhdGVfcGluX2RpclxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXFxcIiVzL21hcFxcXCIsIGRpcik7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHRlc3RzKTsgaSsrKSB7XFxuK1xcdFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KHRlc3RzW2ldLm5hbWUpKVxcbitcXHRcXHRcXHR0ZXN0X21hcF9mbGFncyhcXHUwMDI2dGVzdHNbaV0sIHBhdGgpO1xcbitcXHR9XFxuK1xcdEFTU0VSVF9PSyhybWRpcihkaXIpLCBcXFwicmVtb3ZlX3Bpbl9kaXJcXFwiKTtcXG4rfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMzowMjowMS45NTc0Mjc3NjhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ5NDk1ODUyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdG9vbGluZyAoYnBmdG9vbCkgYW5kIHNlbGZ0ZXN0cyB1bmRlciB0b29scy9icGYvYnBmdG9vbCBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLiBObyBrZXJuZWwtc3BhY2UgY29kZSAodm1saW51eCBvciBrZXJuZWwgbW9kdWxlcykgaXMgYWZmZWN0ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBhYThhM2RmMmMxNDcwZWEwMzU5ZjlmZDJmZTIwMDM2ODBiNjQ0NGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwMzowMjowMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1mZWF0dXJlLnJzdCBiL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1mZWF0dXJlLnJzdFxuaW5kZXggYzdmODM3ODk4YmM3Ny4uNTk3ZjI0MjZkMjU1NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1mZWF0dXJlLnJzdFxuKysrIGIvdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLWZlYXR1cmUucnN0XG5AQCAtMjgsNyArMjgsNyBAQCBGRUFUVVJFIENPTU1BTkRTXG4gfCAqKmJwZnRvb2wqKiAqKmZlYXR1cmUgaGVscCoqXG4gfFxuIHwgKkNPTVBPTkVOVCogOj0geyAqKmtlcm5lbCoqIHwgKipkZXYqKiAqTkFNRSogfVxuLXwgKkdST1VQKiA6PSB7ICoqcHJvZ190eXBlcyoqIHwgKiptYXBfdHlwZXMqKiB8ICoqYXR0YWNoX3R5cGVzKiogfCAqKmxpbmtfdHlwZXMqKiB8ICoqaGVscGVycyoqIH1cbit8ICpHUk9VUCogOj0geyAqKnByb2dfdHlwZXMqKiB8ICoqbWFwX3R5cGVzKiogfCAqKm1hcF9jcmVhdGVfZmxhZ3MqKiB8ICoqYXR0YWNoX3R5cGVzKiogfCAqKmxpbmtfdHlwZXMqKiB8ICoqaGVscGVycyoqIH1cbiBcbiBERVNDUklQVElPTlxuID09PT09PT09PT09XG5AQCAtNjgsMTIgKzY4LDE0IEBAIGJwZnRvb2wgZmVhdHVyZSBwcm9iZSBkZXYgKk5BTUUqIFtmdWxsXSBbbWFjcm9zIFtwcmVmaXggKlBSRUZJWCpdXVxuIFxuIGJwZnRvb2wgZmVhdHVyZSBsaXN0X2J1aWx0aW5zICpHUk9VUCpcbiAgICAgTGlzdCBpdGVtcyBrbm93biB0byBicGZ0b29sLiBUaGVzZSBjYW4gYmUgQlBGIHByb2dyYW0gdHlwZXNcbi0gICAgKCoqcHJvZ190eXBlcyoqKSwgQlBGIG1hcCB0eXBlcyAoKiptYXBfdHlwZXMqKiksIGF0dGFjaCB0eXBlc1xuKyAgICAoKipwcm9nX3R5cGVzKiopLCBCUEYgbWFwIHR5cGVzICgqKm1hcF90eXBlcyoqKSwgbWFwIGNyZWF0aW9uIGZsYWdzXG4rICAgICgqKm1hcF9jcmVhdGVfZmxhZ3MqKiksIGF0dGFjaCB0eXBlc1xuICAgICAoKiphdHRhY2hfdHlwZXMqKiksIGxpbmsgdHlwZXMgKCoqbGlua190eXBlcyoqKSwgb3IgQlBGIGhlbHBlciBmdW5jdGlvbnNcbiAgICAgKCoqaGVscGVycyoqKS4gVGhlIGNvbW1hbmQgZG9lcyBub3QgcHJvYmUgdGhlIHN5c3RlbSwgYnV0IHNpbXBseSBsaXN0cyB0aGVcbiAgICAgZWxlbWVudHMgdGhhdCBicGZ0b29sIGtub3dzIGZyb20gY29tcGlsYXRpb24gdGltZSwgYXMgcHJvdmlkZWQgZnJvbSBsaWJicGZcbi0gICAgKGZvciBhbGwgb2JqZWN0IHR5cGVzKSBvciBmcm9tIHRoZSBCUEYgVUFQSSBoZWFkZXIgKGxpc3Qgb2YgaGVscGVycykuIFRoaXNcbi0gICAgY2FuIGJlIHVzZWQgaW4gc2NyaXB0cyB0byBpdGVyYXRlIG92ZXIgQlBGIHR5cGVzIG9yIGhlbHBlcnMuXG4rICAgIChmb3IgYWxsIG9iamVjdCB0eXBlcykgb3IgZnJvbSB0aGUgQlBGIFVBUEkgaGVhZGVyIChoZWxwZXJzIGFuZCBtYXAgY3JlYXRpb25cbisgICAgZmxhZ3MpLiBUaGlzIGNhbiBiZSB1c2VkIGluIHNjcmlwdHMgdG8gaXRlcmF0ZSBvdmVyIEJQRiB0eXBlcywgaGVscGVycywgb3JcbisgICAgdGhlIHN5bWJvbGljIGZsYWdzIGFjY2VwdGVkIGJ5ICoqbWFwIGNyZWF0ZSoqLlxuIFxuIGJwZnRvb2wgZmVhdHVyZSBoZWxwXG4gICAgIFByaW50IHNob3J0IGhlbHAgbWVzc2FnZS5cbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtbWFwLnJzdCBiL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1tYXAucnN0XG5pbmRleCA1ZGFmM2RlNWM3NDQ2Li41YTVjMjZmNzg5Y2QwIDEwMDY0NFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLW1hcC5yc3RcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1tYXAucnN0XG5AQCAtNDgsNiArNDgsNyBAQCBNQVAgQ09NTUFORFNcbiB8ICpEQVRBKiA6PSB7IFsqKmhleCoqXSAqQllURVMqIH1cbiB8ICpQUk9HKiA6PSB7ICoqaWQqKiAqUFJPR19JRCogfCAqKnBpbm5lZCoqICpGSUxFKiB8ICoqdGFnKiogKlBST0dfVEFHKiB8ICoqbmFtZSoqICpQUk9HX05BTUUqIH1cbiB8ICpWQUxVRSogOj0geyAqREFUQSogfCAqTUFQKiB8ICpQUk9HKiB9XG4rfCAqRkxBR1MqIDo9IHsgaW50ZWdlciB8ICoqQlBGX0ZfTkFNRVssQlBGX0ZfTkFNRS4uLl0qKiB9XG4gfCAqVVBEQVRFX0ZMQUdTKiA6PSB7ICoqYW55KiogfCAqKmV4aXN0KiogfCAqKm5vZXhpc3QqKiB9XG4gfCAqVFlQRSogOj0geyAqKmhhc2gqKiB8ICoqYXJyYXkqKiB8ICoqcHJvZ19hcnJheSoqIHwgKipwZXJmX2V2ZW50X2FycmF5KiogfCAqKnBlcmNwdV9oYXNoKipcbiB8ICAgICB8ICoqcGVyY3B1X2FycmF5KiogfCAqKnN0YWNrX3RyYWNlKiogfCAqKmNncm91cF9hcnJheSoqIHwgKipscnVfaGFzaCoqXG5AQCAtNzYsOSArNzcsMTYgQEAgYnBmdG9vbCBtYXAgeyBzaG93IHwgbGlzdCB9ICAgWypNQVAqXVxuIGJwZnRvb2wgbWFwIGNyZWF0ZSAqRklMRSogdHlwZSAqVFlQRSoga2V5ICpLRVlfU0laRSogdmFsdWUgKlZBTFVFX1NJWkUqICBlbnRyaWVzICpNQVhfRU5UUklFUyogbmFtZSAqTkFNRSogW2ZsYWdzICpGTEFHUypdIFtpbm5lcl9tYXAgKk1BUCpdIFtvZmZsb2FkX2RldiAqTkFNRSpdXG4gICAgIENyZWF0ZSBhIG5ldyBtYXAgd2l0aCBnaXZlbiBwYXJhbWV0ZXJzIGFuZCBwaW4gaXQgdG8gKmJwZmZzKiBhcyAqRklMRSouXG4gXG4tICAgICpGTEFHUyogc2hvdWxkIGJlIGFuIGludGVnZXIgd2hpY2ggaXMgdGhlIGNvbWJpbmF0aW9uIG9mIGRlc2lyZWQgZmxhZ3MsXG4tICAgIGUuZy4gMTAyNCBmb3IgKipCUEZfRl9NTUFQQUJMRSoqIChzZWUgYnBmLmggVUFQSSBoZWFkZXIgZm9yIGV4aXN0aW5nXG4tICAgIGZsYWdzKS5cbisgICAgKkZMQUdTKiBhY2NlcHRzIGFuIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIGNvbWJpbmluZyB0aGUgZGVzaXJlZCBmbGFnc1xuKyAgICAoZGVjaW1hbCwgaGV4YWRlY2ltYWwgd2l0aCBhICoqMHgqKiBwcmVmaXgsIG9yIG9jdGFsIHdpdGggYSAqKjAqKiBwcmVmaXgpLFxuKyAgICBvciBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGZ1bGwsIGNhc2Utc2Vuc2l0aXZlIG1hcCBjcmVhdGlvbiBmbGFnIG5hbWVzXG4rICAgIGZyb20gdGhlIGJwZi5oIFVBUEkgaGVhZGVyLiBGb3IgZXhhbXBsZSwgKioxMDI0KiosICoqMHg0MDAqKiwgYW5kXG4rICAgICoqQlBGX0ZfTU1BUEFCTEUqKiBhcmUgZXF1aXZhbGVudC4gTXVsdGlwbGUgbmFtZXMgYXJlIGNvbWJpbmVkIHdpdGhcbisgICAgYml0d2lzZSBPUiwgZm9yIGV4YW1wbGUgKipCUEZfRl9OT19QUkVBTExPQyxCUEZfRl9SRE9OTFlfUFJPRyoqLlxuKyAgICBSZXBlYXRlZCBuYW1lcyBhcmUgYWxsb3dlZC4gRW1wdHkgbGlzdCBlbGVtZW50cywgYWJicmV2aWF0ZWQgbmFtZXMsIGFuZFxuKyAgICBsaXN0cyBtaXhpbmcgbnVtYmVycyB3aXRoIG5hbWVzIGFyZSBub3QgYWNjZXB0ZWQuIFVzZSAqKjAqKiBmb3Igbm8gZmxhZ3MuXG4rICAgIE51bWVyaWMgdmFsdWVzIGNhbiBpbmNsdWRlIGJpdHMgdW5rbm93biB0byBicGZ0b29sLiBUaGUga2VybmVsIGNoZWNrc1xuKyAgICB3aGV0aGVyIHRoZSBmbGFncyBhcmUgdmFsaWQgZm9yIHRoZSByZXF1ZXN0ZWQgbWFwIHR5cGUuXG4gXG4gICAgIFRvIGNyZWF0ZSBtYXBzIG9mIHR5cGUgYXJyYXktb2YtbWFwcyBvciBoYXNoLW9mLW1hcHMsIHRoZSAqKmlubmVyX21hcCoqXG4gICAgIGtleXdvcmQgbXVzdCBiZSB1c2VkIHRvIHBhc3MgYW4gaW5uZXIgbWFwLiBUaGUga2VybmVsIG5lZWRzIGl0IHRvIGNvbGxlY3RcbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9iYXNoLWNvbXBsZXRpb24vYnBmdG9vbCBiL3Rvb2xzL2JwZi9icGZ0b29sL2Jhc2gtY29tcGxldGlvbi9icGZ0b29sXG5pbmRleCA3NWNiY2I1MTJlYmFlLi5lYTNmNTIxYjZmMDg4IDEwMDY0NFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvYmFzaC1jb21wbGV0aW9uL2JwZnRvb2xcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL2Jhc2gtY29tcGxldGlvbi9icGZ0b29sXG5AQCAtNzE4LDYgKzcxOCwxMCBAQCBfYnBmdG9vbCgpXG4gICAgICAgICAgICAgICAgICAgICBlc2FjXG4gICAgICAgICAgICAgICAgICAgICA7O1xuICAgICAgICAgICAgICAgICBjcmVhdGUpXG4rICAgICAgICAgICAgICAgICAgICAjIEtlZXAgYSBmbGFncyBsaXN0IHRvZ2V0aGVyIGlmIHJlYWRsaW5lIHNwbGl0cyBhdCBjb21tYXMuXG4rICAgICAgICAgICAgICAgICAgICBpZiBbWyAkQ09NUF9XT1JEQlJFQUtTID09ICosKiBcdTAwMjZcdTAwMjYgKCAkY3VyID09ICwgfHwgJHByZXYgPT0gLCApIF1dOyB0aGVuXG4rICAgICAgICAgICAgICAgICAgICAgICAgX2dldF9jb21wX3dvcmRzX2J5X3JlZiAtbiAsIGN1ciBwcmV2XG4rICAgICAgICAgICAgICAgICAgICBmaVxuICAgICAgICAgICAgICAgICAgICAgY2FzZSAkcHJldiBpblxuICAgICAgICAgICAgICAgICAgICAgICAgICRjb21tYW5kKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZmlsZWRpclxuQEAgLTcyOSw3ICs3MzMsMjEgQEAgX2JwZnRvb2woKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01QUkVQTFk9KCAkKCBjb21wZ2VuIC1XIFwiJEJQRlRPT0xfTUFQX0NSRUFURV9UWVBFU1wiIC0tIFwiJGN1clwiICkgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7O1xuLSAgICAgICAgICAgICAgICAgICAgICAgIGtleXx2YWx1ZXxmbGFnc3xlbnRyaWVzKVxuKyAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKVxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb3B0IC1vIG5vc3BhY2VcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgZmxhZ3M9XCIkKGJwZnRvb2wgZmVhdHVyZSBsaXN0X2J1aWx0aW5zIG1hcF9jcmVhdGVfZmxhZ3MgMlx1MDAzZS9kZXYvbnVsbClcIlxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBwcmVmaXg9IGZsYWdcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiBjb21tYSBpcyBub3QgYSB3b3JkIGJyZWFrLCBSZWFkbGluZSByZXBsYWNlcyB0aGUgd2hvbGVcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB3b3JkLCBzbyBwcmVzZXJ2ZSB0aGUgZmxhZ3MgYmVmb3JlIHRoZSBsYXN0IGNvbW1hLlxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBbWyAkY3VyID09ICosKiBcdTAwMjZcdTAwMjYgJENPTVBfV09SREJSRUFLUyAhPSAqLCogXV07IHRoZW5cbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeD1cIiR7Y3VyJSwqfSxcIlxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaVxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZmxhZyBpbiAkKGNvbXBnZW4gLVcgXCIkZmxhZ3NcIiAtLSBcIiR7Y3VyIyMqLH1cIik7IGRvXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01QUkVQTFkrPSggXCIke3ByZWZpeH0ke2ZsYWd9XCIgKVxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7XG4rICAgICAgICAgICAgICAgICAgICAgICAga2V5fHZhbHVlfGVudHJpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJfbWFwKVxuQEAgLTExOTIsNyArMTIxMCw3IEBAIF9icGZ0b29sKClcbiAgICAgICAgICAgICAgICAgICAgIDs7XG4gICAgICAgICAgICAgICAgIGxpc3RfYnVpbHRpbnMpXG4gICAgICAgICAgICAgICAgICAgICBbWyAkcHJldiAhPSBcIiRjb21tYW5kXCIgXV0gXHUwMDI2XHUwMDI2IHJldHVybiAwXG4tICAgICAgICAgICAgICAgICAgICBDT01QUkVQTFk9KCAkKCBjb21wZ2VuIC1XICdwcm9nX3R5cGVzIG1hcF90eXBlcyBcXFxuKyAgICAgICAgICAgICAgICAgICAgQ09NUFJFUExZPSggJCggY29tcGdlbiAtVyAncHJvZ190eXBlcyBtYXBfdHlwZXMgbWFwX2NyZWF0ZV9mbGFncyBcXFxuICAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaF90eXBlcyBsaW5rX3R5cGVzIGhlbHBlcnMnIC0tIFwiJGN1clwiICkgKVxuICAgICAgICAgICAgICAgICAgICAgOztcbiAgICAgICAgICAgICAgICAgKilcbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmMgYi90b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmNcbmluZGV4IDBmNjA3MGEwYzhlNzEuLmI1NDE5ZDVhNjYxYTUgMTAwNjQ0XG4tLS0gYS90b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmNcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuY1xuQEAgLTEyMjAsNiArMTIyMCw4IEBAIHN0YXRpYyBpbnQgZG9fbGlzdF9idWlsdGlucyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdGdldF9uYW1lID0gKGNvbnN0IGNoYXIgKigqKSh1bnNpZ25lZCBpbnQpKWxpYmJwZl9icGZfcHJvZ190eXBlX3N0cjtcbiBcdH0gZWxzZSBpZiAoaXNfcHJlZml4KCphcmd2LCBcIm1hcF90eXBlc1wiKSkge1xuIFx0XHRnZXRfbmFtZSA9IChjb25zdCBjaGFyICooKikodW5zaWduZWQgaW50KSlsaWJicGZfYnBmX21hcF90eXBlX3N0cjtcbitcdH0gZWxzZSBpZiAoaXNfcHJlZml4KCphcmd2LCBcIm1hcF9jcmVhdGVfZmxhZ3NcIikpIHtcbitcdFx0Z2V0X25hbWUgPSBtYXBfY3JlYXRlX2ZsYWdfbmFtZTtcbiBcdH0gZWxzZSBpZiAoaXNfcHJlZml4KCphcmd2LCBcImF0dGFjaF90eXBlc1wiKSkge1xuIFx0XHRnZXRfbmFtZSA9IChjb25zdCBjaGFyICooKikodW5zaWduZWQgaW50KSlsaWJicGZfYnBmX2F0dGFjaF90eXBlX3N0cjtcbiBcdH0gZWxzZSBpZiAoaXNfcHJlZml4KCphcmd2LCBcImxpbmtfdHlwZXNcIikpIHtcbkBAIC0xMjI3LDcgKzEyMjksNyBAQCBzdGF0aWMgaW50IGRvX2xpc3RfYnVpbHRpbnMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0fSBlbHNlIGlmIChpc19wcmVmaXgoKmFyZ3YsIFwiaGVscGVyc1wiKSkge1xuIFx0XHRnZXRfbmFtZSA9IGdldF9oZWxwZXJfbmFtZTtcbiBcdH0gZWxzZSB7XG4tXHRcdHBfZXJyKFwiZXhwZWN0ZWQgJ3Byb2dfdHlwZXMnLCAnbWFwX3R5cGVzJywgJ2F0dGFjaF90eXBlcycsICdsaW5rX3R5cGVzJyBvciAnaGVscGVycycsIGdvdDogJXNcIiwgKmFyZ3YpO1xuK1x0XHRwX2VycihcImV4cGVjdGVkICdwcm9nX3R5cGVzJywgJ21hcF90eXBlcycsICdtYXBfY3JlYXRlX2ZsYWdzJywgJ2F0dGFjaF90eXBlcycsICdsaW5rX3R5cGVzJyBvciAnaGVscGVycycsIGdvdDogJXNcIiwgKmFyZ3YpO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXG5AQCAtMTI2NSw3ICsxMjY3LDggQEAgc3RhdGljIGludCBkb19oZWxwKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0XCIgICAgICAgJTEkcyAlMiRzIGhlbHBcXG5cIlxuIFx0XHRcIlxcblwiXG4gXHRcdFwiICAgICAgIENPTVBPTkVOVCA6PSB7IGtlcm5lbCB8IGRldiBOQU1FIH1cXG5cIlxuLVx0XHRcIiAgICAgICBHUk9VUCA6PSB7IHByb2dfdHlwZXMgfCBtYXBfdHlwZXMgfCBhdHRhY2hfdHlwZXMgfCBsaW5rX3R5cGVzIHwgaGVscGVycyB9XFxuXCJcbitcdFx0XCIgICAgICAgR1JPVVAgOj0geyBwcm9nX3R5cGVzIHwgbWFwX3R5cGVzIHwgbWFwX2NyZWF0ZV9mbGFncyB8XFxuXCJcbitcdFx0XCIgICAgICAgICAgICAgICAgICBhdHRhY2hfdHlwZXMgfCBsaW5rX3R5cGVzIHwgaGVscGVycyB9XFxuXCJcbiBcdFx0XCIgICAgICAgXCIgSEVMUF9TUEVDX09QVElPTlMgXCIgfVxcblwiXG4gXHRcdFwiXCIsXG4gXHRcdGJpbl9uYW1lLCBhcmd2Wy0yXSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvbWFpbi5oIGIvdG9vbHMvYnBmL2JwZnRvb2wvbWFpbi5oXG5pbmRleCA5MzE1YTFkYjFmN2MyLi4zZTI4NTZjOWY1OTViIDEwMDY0NFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvbWFpbi5oXG4rKysgYi90b29scy9icGYvYnBmdG9vbC9tYWluLmhcbkBAIC0xODAsNiArMTgwLDcgQEAgaW50IGRvX3Rva2VuKGludCBhcmdjLCBjaGFyICoqYXJndikgX193ZWFrO1xuIGludCBwYXJzZV91MzJfYXJnKGludCAqYXJnYywgY2hhciAqKiphcmd2LCBfX3UzMiAqdmFsLCBjb25zdCBjaGFyICp3aGF0KTtcbiBpbnQgcHJvZ19wYXJzZV9mZChpbnQgKmFyZ2MsIGNoYXIgKioqYXJndik7XG4gaW50IHByb2dfcGFyc2VfZmRzKGludCAqYXJnYywgY2hhciAqKiphcmd2LCBpbnQgKipmZHMpO1xuK2NvbnN0IGNoYXIgKm1hcF9jcmVhdGVfZmxhZ19uYW1lKHVuc2lnbmVkIGludCBpZCk7XG4gaW50IG1hcF9wYXJzZV9mZChpbnQgKmFyZ2MsIGNoYXIgKioqYXJndiwgX191MzIgb3Blbl9mbGFncyk7XG4gaW50IG1hcF9wYXJzZV9mZHMoaW50ICphcmdjLCBjaGFyICoqKmFyZ3YsIGludCAqKmZkcywgX191MzIgb3Blbl9mbGFncyk7XG4gaW50IG1hcF9wYXJzZV9mZF9hbmRfaW5mbyhpbnQgKmFyZ2MsIGNoYXIgKioqYXJndiwgc3RydWN0IGJwZl9tYXBfaW5mbyAqaW5mbyxcbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9tYXAuYyBiL3Rvb2xzL2JwZi9icGZ0b29sL21hcC5jXG5pbmRleCA2ODRhOGZiNzI0MTQ2Li40NDQ1MDE0MjQ3ZDYyIDEwMDY0NFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvbWFwLmNcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL21hcC5jXG5AQCAtMTI1MCw2ICsxMjUwLDgxIEBAIHN0YXRpYyBpbnQgZG9fcGluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qge1xuK1x0Y29uc3QgY2hhciAqbmFtZTtcbitcdF9fdTMyIHZhbHVlO1xuK30gbWFwX2NyZWF0ZV9mbGFnc1tdID0ge1xuKyNkZWZpbmUgTUFQX0NSRUFURV9GTEFHKGZsYWcpIHsgI2ZsYWcsIGZsYWcgfVxuK1x0TUFQX0NSRUFURV9GTEFHKEJQRl9GX05PX1BSRUFMTE9DKSxcbitcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9OT19DT01NT05fTFJVKSxcbitcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9OVU1BX05PREUpLFxuK1x0TUFQX0NSRUFURV9GTEFHKEJQRl9GX1JET05MWSksXG4rXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfV1JPTkxZKSxcbitcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9TVEFDS19CVUlMRF9JRCksXG4rXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfWkVST19TRUVEKSxcbitcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9SRE9OTFlfUFJPRyksXG4rXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfV1JPTkxZX1BST0cpLFxuK1x0TUFQX0NSRUFURV9GTEFHKEJQRl9GX0NMT05FKSxcbitcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9NTUFQQUJMRSksXG4rXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfUFJFU0VSVkVfRUxFTVMpLFxuK1x0TUFQX0NSRUFURV9GTEFHKEJQRl9GX0lOTkVSX01BUCksXG4rXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfTElOSyksXG4rXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfVlRZUEVfQlRGX09CSl9GRCksXG4rXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfVE9LRU5fRkQpLFxuK1x0TUFQX0NSRUFURV9GTEFHKEJQRl9GX1NFR1ZfT05fRkFVTFQpLFxuK1x0TUFQX0NSRUFURV9GTEFHKEJQRl9GX05PX1VTRVJfQ09OViksXG4rXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfUkJfT1ZFUldSSVRFKSxcbisjdW5kZWYgTUFQX0NSRUFURV9GTEFHXG4rfTtcbitcbitjb25zdCBjaGFyICptYXBfY3JlYXRlX2ZsYWdfbmFtZSh1bnNpZ25lZCBpbnQgaWQpXG4re1xuK1x0aWYgKGlkIFx1MDAzZT0gQVJSQVlfU0laRShtYXBfY3JlYXRlX2ZsYWdzKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRyZXR1cm4gbWFwX2NyZWF0ZV9mbGFnc1tpZF0ubmFtZTtcbit9XG4rXG4rc3RhdGljIGludCBwYXJzZV9tYXBfY3JlYXRlX2ZsYWdzKGNvbnN0IGNoYXIgKmFyZywgX191MzIgKmZsYWdzKVxuK3tcbitcdGNvbnN0IGNoYXIgKm5hbWUgPSBhcmcsICpjb21tYTtcbitcdGxvbmcgbG9uZyB2YWx1ZTtcbitcdF9fdTMyIHBhcnNlZCA9IDA7XG4rXHRzaXplX3QgbGVuLCBpO1xuK1x0Y2hhciAqZW5kO1xuK1xuK1x0LyogS2VlcCBiYXNlLTAgbnVtZXJpYyBpbnB1dCwgaW5jbHVkaW5nIGJpdHMgdW5rbm93biB0byB0aGlzIGJwZnRvb2wuICovXG4rXHRpZiAoc3RybmNtcChhcmcsIFwiQlBGX0ZfXCIsIDYpKSB7XG4rXHRcdGVycm5vID0gMDtcbitcdFx0dmFsdWUgPSBzdHJ0b2xsKGFyZywgXHUwMDI2ZW5kLCAwKTtcbitcdFx0aWYgKGVycm5vIHx8IGVuZCA9PSBhcmcgfHwgKmVuZCB8fCB2YWx1ZSBcdTAwM2MgMCB8fCB2YWx1ZSBcdTAwM2UgVUlOVDMyX01BWClcbitcdFx0XHRnb3RvIGludmFsaWQ7XG4rXHRcdCpmbGFncyA9IHZhbHVlO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGRvIHtcbitcdFx0Y29tbWEgPSBzdHJjaHIobmFtZSwgJywnKTtcbitcdFx0bGVuID0gY29tbWEgPyAoc2l6ZV90KShjb21tYSAtIG5hbWUpIDogc3RybGVuKG5hbWUpO1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG1hcF9jcmVhdGVfZmxhZ3MpOyBpKyspIHtcbitcdFx0XHRpZiAoc3RybGVuKG1hcF9jcmVhdGVfZmxhZ3NbaV0ubmFtZSkgPT0gbGVuIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAhc3RybmNtcChuYW1lLCBtYXBfY3JlYXRlX2ZsYWdzW2ldLm5hbWUsIGxlbikpXG4rXHRcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0XHRpZiAoaSA9PSBBUlJBWV9TSVpFKG1hcF9jcmVhdGVfZmxhZ3MpKVxuK1x0XHRcdGdvdG8gaW52YWxpZDtcbitcdFx0cGFyc2VkIHw9IG1hcF9jcmVhdGVfZmxhZ3NbaV0udmFsdWU7XG4rXHRcdGlmIChjb21tYSlcbitcdFx0XHRuYW1lID0gY29tbWEgKyAxO1xuK1x0fSB3aGlsZSAoY29tbWEpO1xuK1xuK1x0KmZsYWdzID0gcGFyc2VkO1xuK1x0cmV0dXJuIDA7XG4raW52YWxpZDpcbitcdHBfZXJyKFwiY2FuJ3QgcGFyc2UgJXMgYXMgbWFwIGNyZWF0aW9uIGZsYWdzXCIsIGFyZyk7XG4rXHRyZXR1cm4gLTE7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZG9fY3JlYXRlKGludCBhcmdjLCBjaGFyICoqYXJndilcbiB7XG4gXHRMSUJCUEZfT1BUUyhicGZfbWFwX2NyZWF0ZV9vcHRzLCBhdHRyKTtcbkBAIC0xMzAxLDkgKzEzNzYsMTQgQEAgc3RhdGljIGludCBkb19jcmVhdGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRcdFx0XHQgIFwibWF4IGVudHJpZXNcIikpXG4gXHRcdFx0XHRnb3RvIGV4aXQ7XG4gXHRcdH0gZWxzZSBpZiAoaXNfcHJlZml4KCphcmd2LCBcImZsYWdzXCIpKSB7XG4tXHRcdFx0aWYgKHBhcnNlX3UzMl9hcmcoXHUwMDI2YXJnYywgXHUwMDI2YXJndiwgXHUwMDI2YXR0ci5tYXBfZmxhZ3MsXG4tXHRcdFx0XHRcdCAgXCJmbGFnc1wiKSlcbitcdFx0XHRORVhUX0FSRygpO1xuK1x0XHRcdGlmIChhdHRyLm1hcF9mbGFncykge1xuK1x0XHRcdFx0cF9lcnIoXCJmbGFncyBhbHJlYWR5IHNwZWNpZmllZFwiKTtcbiBcdFx0XHRcdGdvdG8gZXhpdDtcbitcdFx0XHR9XG4rXHRcdFx0aWYgKHBhcnNlX21hcF9jcmVhdGVfZmxhZ3MoKmFyZ3YsIFx1MDAyNmF0dHIubWFwX2ZsYWdzKSlcbitcdFx0XHRcdGdvdG8gZXhpdDtcbitcdFx0XHRORVhUX0FSRygpO1xuIFx0XHR9IGVsc2UgaWYgKGlzX3ByZWZpeCgqYXJndiwgXCJkZXZcIikpIHtcbiBcdFx0XHRwX2luZm8oXCJXYXJuaW5nOiAnYnBmdG9vbCBtYXAgY3JlYXRlIFsuLi5dIGRldiBcdTAwM2NpZm5hbWVcdTAwM2UnIHN5bnRheCBpcyBkZXByZWNhdGVkLlxcblwiXG4gXHRcdFx0ICAgICAgIFwiR29pbmcgZnVydGhlciwgcGxlYXNlIHVzZSAnb2ZmbG9hZF9kZXYgXHUwMDNjaWZuYW1lXHUwMDNlJyB0byByZXF1ZXN0IGhhcmR3YXJlIG9mZmxvYWQgZm9yIHRoZSBtYXAuXCIpO1xuQEAgLTE0NzQsNiArMTU1NCw3IEBAIHN0YXRpYyBpbnQgZG9faGVscChpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdFwiICAgICAgIERBVEEgOj0geyBbaGV4XSBCWVRFUyB9XFxuXCJcbiBcdFx0XCIgICAgICAgXCIgSEVMUF9TUEVDX1BST0dSQU0gXCJcXG5cIlxuIFx0XHRcIiAgICAgICBWQUxVRSA6PSB7IERBVEEgfCBNQVAgfCBQUk9HIH1cXG5cIlxuK1x0XHRcIiAgICAgICBGTEFHUyA6PSB7IGludGVnZXIgfCBCUEZfRl9OQU1FWyxCUEZfRl9OQU1FLi4uXSB9XFxuXCJcbiBcdFx0XCIgICAgICAgVVBEQVRFX0ZMQUdTIDo9IHsgYW55IHwgZXhpc3QgfCBub2V4aXN0IH1cXG5cIlxuIFx0XHRcIiAgICAgICBUWVBFIDo9IHsgaGFzaCB8IGFycmF5IHwgcHJvZ19hcnJheSB8IHBlcmZfZXZlbnRfYXJyYXkgfCBwZXJjcHVfaGFzaCB8XFxuXCJcbiBcdFx0XCIgICAgICAgICAgICAgICAgIHBlcmNwdV9hcnJheSB8IHN0YWNrX3RyYWNlIHwgY2dyb3VwX2FycmF5IHwgbHJ1X2hhc2ggfFxcblwiXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9tYXBfZmxhZ3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZnRvb2xfbWFwX2ZsYWdzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kNjE3YjQzMjczYThlXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX21hcF9mbGFncy5jXG5AQCAtMCwwICsxLDEwMCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbitcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGZ0b29sX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWFwX2ZsYWdzX3Rlc3Qge1xuK1x0Y29uc3QgY2hhciAqbmFtZTtcbitcdGNvbnN0IGNoYXIgKmZsYWdzO1xuK1x0X191MzIgZXhwZWN0ZWRfZmxhZ3M7XG4rXHRjb25zdCBjaGFyICplcnJvcjtcbit9IHRlc3RzW10gPSB7XG4rXHR7IFwiemVyb1wiLCBcIjBcIiwgMCB9LFxuK1x0eyBcImRlY2ltYWxcIiwgXCIxMjlcIiwgQlBGX0ZfTk9fUFJFQUxMT0MgfCBCUEZfRl9SRE9OTFlfUFJPRyB9LFxuK1x0eyBcImhleGFkZWNpbWFsXCIsIFwiMHg4MVwiLCBCUEZfRl9OT19QUkVBTExPQyB8IEJQRl9GX1JET05MWV9QUk9HIH0sXG4rXHR7IFwib2N0YWxcIiwgXCIwMjAxXCIsIEJQRl9GX05PX1BSRUFMTE9DIHwgQlBGX0ZfUkRPTkxZX1BST0cgfSxcbitcdHsgXCJwb3NpdGl2ZV9zaWduXCIsIFwiKzFcIiwgQlBGX0ZfTk9fUFJFQUxMT0MgfSxcbitcdHsgXCJzaW5nbGVfbmFtZVwiLCBcIkJQRl9GX05PX1BSRUFMTE9DXCIsIEJQRl9GX05PX1BSRUFMTE9DIH0sXG4rXHR7IFwiY29tYmluZWRfbmFtZXNcIiwgXCJCUEZfRl9OT19QUkVBTExPQyxCUEZfRl9SRE9OTFlfUFJPR1wiLFxuK1x0ICBCUEZfRl9OT19QUkVBTExPQyB8IEJQRl9GX1JET05MWV9QUk9HIH0sXG4rXHR7IFwicmVwZWF0ZWRfbmFtZVwiLCBcIkJQRl9GX05PX1BSRUFMTE9DLEJQRl9GX05PX1BSRUFMTE9DXCIsIEJQRl9GX05PX1BSRUFMTE9DIH0sXG4rXHR7IFwidW5rbm93bl9uYW1lXCIsIFwiQlBGX0ZfTk9UX0FfTUFQX0ZMQUdcIiwgMCwgXCJjYW4ndCBwYXJzZVwiIH0sXG4rXHR7IFwib3RoZXJfY29tbWFuZF9mbGFnXCIsIFwiQlBGX0ZfUEFUSF9GRFwiLCAwLCBcImNhbid0IHBhcnNlXCIgfSxcbitcdHsgXCJ1cGRhdGVfZmxhZ1wiLCBcIkJQRl9GX0xPQ0tcIiwgMCwgXCJjYW4ndCBwYXJzZVwiIH0sXG4rXHR7IFwiYWJicmV2aWF0ZWRfbmFtZVwiLCBcIkJQRl9GX05PX1BSRVwiLCAwLCBcImNhbid0IHBhcnNlXCIgfSxcbitcdHsgXCJsb3dlcmNhc2VfbmFtZVwiLCBcImJwZl9mX25vX3ByZWFsbG9jXCIsIDAsIFwiY2FuJ3QgcGFyc2VcIiB9LFxuK1x0eyBcImVtcHR5XCIsIFwiXCIsIDAsIFwiY2FuJ3QgcGFyc2VcIiB9LFxuK1x0eyBcIndoaXRlc3BhY2VcIiwgXCIgXCIsIDAsIFwiY2FuJ3QgcGFyc2VcIiB9LFxuK1x0eyBcImVtcHR5X2xpc3RcIiwgXCIsXCIsIDAsIFwiY2FuJ3QgcGFyc2VcIiB9LFxuK1x0eyBcImxlYWRpbmdfY29tbWFcIiwgXCIsQlBGX0ZfTk9fUFJFQUxMT0NcIiwgMCwgXCJjYW4ndCBwYXJzZVwiIH0sXG4rXHR7IFwidHJhaWxpbmdfY29tbWFcIiwgXCJCUEZfRl9OT19QUkVBTExPQyxcIiwgMCwgXCJjYW4ndCBwYXJzZVwiIH0sXG4rXHR7IFwiZW1wdHlfZWxlbWVudFwiLCBcIkJQRl9GX05PX1BSRUFMTE9DLCxCUEZfRl9SRE9OTFlfUFJPR1wiLCAwLCBcImNhbid0IHBhcnNlXCIgfSxcbitcdHsgXCJudW1iZXJfdGhlbl9uYW1lXCIsIFwiMSxCUEZfRl9SRE9OTFlfUFJPR1wiLCAwLCBcImNhbid0IHBhcnNlXCIgfSxcbitcdHsgXCJuYW1lX3RoZW5fbnVtYmVyXCIsIFwiQlBGX0ZfTk9fUFJFQUxMT0MsMTI4XCIsIDAsIFwiY2FuJ3QgcGFyc2VcIiB9LFxuK1x0eyBcIm51bWVyaWNfbGlzdFwiLCBcIjEsMTI4XCIsIDAsIFwiY2FuJ3QgcGFyc2VcIiB9LFxuK1x0eyBcIndoaXRlc3BhY2VfaW5fbGlzdFwiLCBcIkJQRl9GX05PX1BSRUFMTE9DLCBCUEZfRl9SRE9OTFlfUFJPR1wiLCAwLCBcImNhbid0IHBhcnNlXCIgfSxcbitcdHsgXCJvdmVyZmxvd191MzJcIiwgXCI0Mjk0OTY3Mjk2XCIsIDAsIFwiY2FuJ3QgcGFyc2VcIiB9LFxuK1x0eyBcIm92ZXJmbG93X2hleFwiLCBcIjB4MTAwMDAwMDAwXCIsIDAsIFwiY2FuJ3QgcGFyc2VcIiB9LFxuK1x0eyBcIm92ZXJmbG93X3U2NFwiLCBcIjE4NDQ2NzQ0MDczNzA5NTUxNjE2XCIsIDAsIFwiY2FuJ3QgcGFyc2VcIiB9LFxuK1x0eyBcIm5lZ2F0aXZlXCIsIFwiLTFcIiwgMCwgXCJjYW4ndCBwYXJzZVwiIH0sXG4rXHQvKiBOdW1lcmljIGJpdHMgdW5rbm93biB0byBicGZ0b29sIG11c3Qgc3RpbGwgcmVhY2ggdGhlIGtlcm5lbC4gKi9cbitcdHsgXCJhbGxfYml0c1wiLCBcIjB4ZmZmZmZmZmZcIiwgMCwgXCJtYXAgY3JlYXRlIGZhaWxlZFwiIH0sXG4rXHQvKiBUaGUga2VybmVsIHZhbGlkYXRlcyBjb21iaW5hdGlvbnMgb2Yga25vd24gbWFwIGNyZWF0aW9uIGZsYWdzLiAqL1xuK1x0eyBcImludmFsaWRfY29tYmluYXRpb25cIiwgXCJCUEZfRl9SRE9OTFksQlBGX0ZfV1JPTkxZXCIsIDAsIFwibWFwIGNyZWF0ZSBmYWlsZWRcIiB9LFxuK307XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9tYXBfZmxhZ3MoY29uc3Qgc3RydWN0IG1hcF9mbGFnc190ZXN0ICp0ZXN0LCBjb25zdCBjaGFyICpwYXRoKVxuK3tcbitcdGNoYXIgY21kW01BWF9CUEZUT09MX0NNRF9MRU5dLCBvdXRwdXRbMTAyNF0gPSB7fTtcbitcdHN0cnVjdCBicGZfbWFwX2luZm8gaW5mbyA9IHt9O1xuK1x0X191MzIgaW5mb19sZW4gPSBzaXplb2YoaW5mbyk7XG4rXHRpbnQgZmQsIGVycjtcbitcbitcdC8qIExldCB0aGUgZmxhZ3MgcGFyc2VyIGhhbmRsZSBuZWdhdGl2ZSBudW1iZXJzIGluc3RlYWQgb2YgZ2V0b3B0KCkuICovXG4rXHRlcnIgPSBzbnByaW50ZihjbWQsIHNpemVvZihjbWQpLFxuK1x0XHQgICAgICAgXCItLSBtYXAgY3JlYXRlICVzIHR5cGUgaGFzaCBrZXkgNCB2YWx1ZSA0IGVudHJpZXMgMSBuYW1lIGZsYWdzX3Rlc3QgZmxhZ3MgJyVzJyAyXHUwMDNlXHUwMDI2MVwiLFxuK1x0XHQgICAgICAgcGF0aCwgdGVzdC1cdTAwM2VmbGFncyk7XG4rXHRpZiAoIUFTU0VSVF9HVChlcnIsIDAsIFwiZm9ybWF0X2NvbW1hbmRcIikgfHxcbitcdCAgICAhQVNTRVJUX0xUKGVyciwgc2l6ZW9mKGNtZCksIFwiY29tbWFuZF9sZW5ndGhcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGVyciA9IGdldF9icGZ0b29sX2NvbW1hbmRfb3V0cHV0KGNtZCwgb3V0cHV0LCBzaXplb2Yob3V0cHV0KSk7XG4rXHRpZiAodGVzdC1cdTAwM2VlcnJvcikge1xuK1x0XHRBU1NFUlRfTkVRKGVyciwgMCwgXCJyZWplY3RfZmxhZ3NcIik7XG4rXHRcdEFTU0VSVF9IQVNfU1VCU1RSKG91dHB1dCwgdGVzdC1cdTAwM2VlcnJvciwgXCJlcnJvcl9tZXNzYWdlXCIpO1xuK1x0XHRlcnIgPSBhY2Nlc3MocGF0aCwgRl9PSyk7XG4rXHRcdEFTU0VSVF9FUShlcnIsIC0xLCBcIm5vX3BpblwiKTtcbitcdFx0QVNTRVJUX0VRKGVycm5vLCBFTk9FTlQsIFwicGluX2Fic2VudFwiKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImNyZWF0ZV9tYXBcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGZkID0gYnBmX29ial9nZXQocGF0aCk7XG4rXHRpZiAoIUFTU0VSVF9PS19GRChmZCwgXCJvcGVuX21hcFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0aWYgKEFTU0VSVF9PSyhicGZfbWFwX2dldF9pbmZvX2J5X2ZkKGZkLCBcdTAwMjZpbmZvLCBcdTAwMjZpbmZvX2xlbiksIFwibWFwX2luZm9cIikpXG4rXHRcdEFTU0VSVF9FUShpbmZvLm1hcF9mbGFncywgdGVzdC1cdTAwM2VleHBlY3RlZF9mbGFncywgXCJtYXBfZmxhZ3NcIik7XG4rXHRjbG9zZShmZCk7XG4rY2xlYW51cDpcbitcdHVubGluayhwYXRoKTtcbit9XG4rXG4rdm9pZCB0ZXN0X2JwZnRvb2xfbWFwX2ZsYWdzKHZvaWQpXG4re1xuK1x0Y2hhciBkaXJbXSA9IFwiL3N5cy9mcy9icGYvYnBmdG9vbF9mbGFnc19YWFhYWFhcIjtcbitcdGNoYXIgcGF0aFtzaXplb2YoZGlyKSArIHNpemVvZihcIi9tYXBcIildO1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobWtkdGVtcChkaXIpLCBcImNyZWF0ZV9waW5fZGlyXCIpKVxuK1x0XHRyZXR1cm47XG4rXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiJXMvbWFwXCIsIGRpcik7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHRlc3RzKTsgaSsrKSB7XG4rXHRcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KHRlc3RzW2ldLm5hbWUpKVxuK1x0XHRcdHRlc3RfbWFwX2ZsYWdzKFx1MDAyNnRlc3RzW2ldLCBwYXRoKTtcbitcdH1cbitcdEFTU0VSVF9PSyhybWRpcihkaXIpLCBcInJlbW92ZV9waW5fZGlyXCIpO1xuK31cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAyOjAxLjk1NzQyOTA0OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5NDk1NjM4ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogTm8gRnV6emluZyBOZWVkZWQgSGVyZSoqXG5cbk9rYXksIHNvIHRoZSB0YXNrIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBUaW1lIHRvIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gc2VlIHdoYXQgd2UncmUgZGVhbGluZyB3aXRoLiBUaGUgZGlmZiB0b3VjaGVzOiBgdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLWZlYXR1cmUucnN0YCwgYHRvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1tYXAucnN0YCwgYHRvb2xzL2JwZi9icGZ0b29sL2Jhc2gtY29tcGxldGlvbi9icGZ0b29sYCwgYHRvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuY2AsIGB0b29scy9icGYvYnBmdG9vbC9tYWluLmhgLCBgdG9vbHMvYnBmL2JwZnRvb2wvbWFwLmNgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZnRvb2xfbWFwX2ZsYWdzLmNgLlxuXG5Ob3csIGxldCdzIGNvbnN1bHQgdGhlIHJ1bGVzLiBUaGUgbmVnYXRpdmUgY3JpdGVyaWEgYXJlIG15IG1haW4gZm9jdXMgaGVyZS4gSXQncyBvbmx5IHdvcnRoICpub3QqIGZ1enppbmcgaWYgKmFsbCogdGhlIG1vZGlmaWNhdGlvbnMgZmFsbCBpbnRvIHNwZWNpZmljIGNhdGVnb3JpZXMsIHdoaWNoLCBmcm9tIHRoZSBydWxlcywgYm9pbCBkb3duIHRvIG5vbi1rZXJuZWwgY29kZTogZG9jdW1lbnRhdGlvbiwgdXNlci1zcGFjZSB0b29scywgc2VsZi10ZXN0cywgYW5kIHRoZSBsaWtlLiBFc3NlbnRpYWxseSwgYW55dGhpbmcgdGhhdCBkb2Vzbid0IGRpcmVjdGx5IGltcGFjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcyBpcyBhIG5vLWdvIGZvciBmdXp6aW5nLlxuXG5Mb29raW5nIGF0IHRoZXNlIGZpbGVzLCBpdCdzIHByZXR0eSBjbGVhcjogdGhleSdyZSBhbGwgaW4gYHRvb2xzL2JwZi9icGZ0b29sL2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gVGhleSdyZSB1c2VyLXNwYWNlIHRvb2xpbmcgYW5kIHNlbGYtdGVzdHMuICpOb25lKiBvZiB0aGVtIHRvdWNoIGtlcm5lbCBzb3VyY2UgY29kZS4gTm8gZHJpdmVycywgbm8gY29yZSBrZXJuZWwgY29kZSwgbm8gbW9kdWxlcy5cblxuU28sIGFjY29yZGluZyB0byB0aGUgcnVsZXMsIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayBvZiB0aGUgZmlsZSBsaXN0IGFnYWluLiBZZXAsIG5vdGhpbmcgZXZlbiByZW1vdGVseSBjbG9zZSB0byB0aGUga2VybmVsIHByb3Blci4gSXQncyBhbGwgdW5kZXIgYHRvb2xzL2AuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQuIFRpbWUgdG8gY2FsbCBpdCBpbiBhbmQgbWFyayB0aGlzIGFzIG5vdCByZXF1aXJpbmcgZnV6emluZy4gTm8gbmVlZCB0byB3YXN0ZSBjeWNsZXMgb24gdXNlci1zcGFjZSB1dGlsaXRpZXMgaW4gdGhpcyBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODkxLCJPdXRwdXRUb2tlbnMiOjg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MDI6MDYuOTA2OTk1MzMzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHRvb2xpbmcgKGJwZnRvb2wpIGFuZCBzZWxmdGVzdHMgdW5kZXIgdG9vbHMvYnBmL2JwZnRvb2wgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi4gTm8ga2VybmVsLXNwYWNlIGNvZGUgKHZtbGludXggb3Iga2VybmVsIG1vZHVsZXMpIGlzIGFmZmVjdGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSB0b29saW5nIChicGZ0b29sKSBhbmQgc2VsZnRlc3RzIHVuZGVyIHRvb2xzL2JwZi9icGZ0b29sIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYuIE5vIGtlcm5lbC1zcGFjZSBjb2RlICh2bWxpbnV4IG9yIGtlcm5lbCBtb2R1bGVzKSBpcyBhZmZlY3RlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAyOjA2LjkwNzAxNDY0M1oiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow7wg27[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 03:00:27 +0000 UTC FinishedAt: 2026-09-11 03:02:08 +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+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSB0b29saW5nIChicGZ0b29sKSBhbmQgc2VsZnRlc3RzIHVuZGVyIHRvb2xzL2JwZi9icGZ0b29sIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYuIE5vIGtlcm5lbC1zcGFjZSBjb2RlICh2bWxpbnV4IG9yIGtlcm5lbCBtb2R1bGVzKSBpcyBhZmZlY3RlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwYWE4YTNkZjJjMTQ3MGVhMDM1OWY5ZmQyZmUyMDAzNjgwYjY0NDRmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDM6MDI6MDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLWZlYXR1cmUucnN0IGIvdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLWZlYXR1cmUucnN0XG5pbmRleCBjN2Y4Mzc4OThiYzc3Li41OTdmMjQyNmQyNTU1IDEwMDY0NFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLWZlYXR1cmUucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtZmVhdHVyZS5yc3RcbkBAIC0yOCw3ICYjNDM7MjgsNyBAQCBGRUFUVVJFIENPTU1BTkRTXG4gfCAqKmJwZnRvb2wqKiAqKmZlYXR1cmUgaGVscCoqXG4gfFxuIHwgKkNPTVBPTkVOVCogOj0geyAqKmtlcm5lbCoqIHwgKipkZXYqKiAqTkFNRSogfVxuLXwgKkdST1VQKiA6PSB7ICoqcHJvZ190eXBlcyoqIHwgKiptYXBfdHlwZXMqKiB8ICoqYXR0YWNoX3R5cGVzKiogfCAqKmxpbmtfdHlwZXMqKiB8ICoqaGVscGVycyoqIH1cbiYjNDM7fCAqR1JPVVAqIDo9IHsgKipwcm9nX3R5cGVzKiogfCAqKm1hcF90eXBlcyoqIHwgKiptYXBfY3JlYXRlX2ZsYWdzKiogfCAqKmF0dGFjaF90eXBlcyoqIHwgKipsaW5rX3R5cGVzKiogfCAqKmhlbHBlcnMqKiB9XG4gXG4gREVTQ1JJUFRJT05cbiA9PT09PT09PT09PVxuQEAgLTY4LDEyICYjNDM7NjgsMTQgQEAgYnBmdG9vbCBmZWF0dXJlIHByb2JlIGRldiAqTkFNRSogW2Z1bGxdIFttYWNyb3MgW3ByZWZpeCAqUFJFRklYKl1dXG4gXG4gYnBmdG9vbCBmZWF0dXJlIGxpc3RfYnVpbHRpbnMgKkdST1VQKlxuICAgICBMaXN0IGl0ZW1zIGtub3duIHRvIGJwZnRvb2wuIFRoZXNlIGNhbiBiZSBCUEYgcHJvZ3JhbSB0eXBlc1xuLSAgICAoKipwcm9nX3R5cGVzKiopLCBCUEYgbWFwIHR5cGVzICgqKm1hcF90eXBlcyoqKSwgYXR0YWNoIHR5cGVzXG4mIzQzOyAgICAoKipwcm9nX3R5cGVzKiopLCBCUEYgbWFwIHR5cGVzICgqKm1hcF90eXBlcyoqKSwgbWFwIGNyZWF0aW9uIGZsYWdzXG4mIzQzOyAgICAoKiptYXBfY3JlYXRlX2ZsYWdzKiopLCBhdHRhY2ggdHlwZXNcbiAgICAgKCoqYXR0YWNoX3R5cGVzKiopLCBsaW5rIHR5cGVzICgqKmxpbmtfdHlwZXMqKiksIG9yIEJQRiBoZWxwZXIgZnVuY3Rpb25zXG4gICAgICgqKmhlbHBlcnMqKikuIFRoZSBjb21tYW5kIGRvZXMgbm90IHByb2JlIHRoZSBzeXN0ZW0sIGJ1dCBzaW1wbHkgbGlzdHMgdGhlXG4gICAgIGVsZW1lbnRzIHRoYXQgYnBmdG9vbCBrbm93cyBmcm9tIGNvbXBpbGF0aW9uIHRpbWUsIGFzIHByb3ZpZGVkIGZyb20gbGliYnBmXG4tICAgIChmb3IgYWxsIG9iamVjdCB0eXBlcykgb3IgZnJvbSB0aGUgQlBGIFVBUEkgaGVhZGVyIChsaXN0IG9mIGhlbHBlcnMpLiBUaGlzXG4tICAgIGNhbiBiZSB1c2VkIGluIHNjcmlwdHMgdG8gaXRlcmF0ZSBvdmVyIEJQRiB0eXBlcyBvciBoZWxwZXJzLlxuJiM0MzsgICAgKGZvciBhbGwgb2JqZWN0IHR5cGVzKSBvciBmcm9tIHRoZSBCUEYgVUFQSSBoZWFkZXIgKGhlbHBlcnMgYW5kIG1hcCBjcmVhdGlvblxuJiM0MzsgICAgZmxhZ3MpLiBUaGlzIGNhbiBiZSB1c2VkIGluIHNjcmlwdHMgdG8gaXRlcmF0ZSBvdmVyIEJQRiB0eXBlcywgaGVscGVycywgb3JcbiYjNDM7ICAgIHRoZSBzeW1ib2xpYyBmbGFncyBhY2NlcHRlZCBieSAqKm1hcCBjcmVhdGUqKi5cbiBcbiBicGZ0b29sIGZlYXR1cmUgaGVscFxuICAgICBQcmludCBzaG9ydCBoZWxwIG1lc3NhZ2UuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLW1hcC5yc3QgYi90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtbWFwLnJzdFxuaW5kZXggNWRhZjNkZTVjNzQ0Ni4uNWE1YzI2Zjc4OWNkMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1tYXAucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtbWFwLnJzdFxuQEAgLTQ4LDYgJiM0Mzs0OCw3IEBAIE1BUCBDT01NQU5EU1xuIHwgKkRBVEEqIDo9IHsgWyoqaGV4KipdICpCWVRFUyogfVxuIHwgKlBST0cqIDo9IHsgKippZCoqICpQUk9HX0lEKiB8ICoqcGlubmVkKiogKkZJTEUqIHwgKip0YWcqKiAqUFJPR19UQUcqIHwgKipuYW1lKiogKlBST0dfTkFNRSogfVxuIHwgKlZBTFVFKiA6PSB7ICpEQVRBKiB8ICpNQVAqIHwgKlBST0cqIH1cbiYjNDM7fCAqRkxBR1MqIDo9IHsgaW50ZWdlciB8ICoqQlBGX0ZfTkFNRVssQlBGX0ZfTkFNRS4uLl0qKiB9XG4gfCAqVVBEQVRFX0ZMQUdTKiA6PSB7ICoqYW55KiogfCAqKmV4aXN0KiogfCAqKm5vZXhpc3QqKiB9XG4gfCAqVFlQRSogOj0geyAqKmhhc2gqKiB8ICoqYXJyYXkqKiB8ICoqcHJvZ19hcnJheSoqIHwgKipwZXJmX2V2ZW50X2FycmF5KiogfCAqKnBlcmNwdV9oYXNoKipcbiB8ICAgICB8ICoqcGVyY3B1X2FycmF5KiogfCAqKnN0YWNrX3RyYWNlKiogfCAqKmNncm91cF9hcnJheSoqIHwgKipscnVfaGFzaCoqXG5AQCAtNzYsOSAmIzQzOzc3LDE2IEBAIGJwZnRvb2wgbWFwIHsgc2hvdyB8IGxpc3QgfSAgIFsqTUFQKl1cbiBicGZ0b29sIG1hcCBjcmVhdGUgKkZJTEUqIHR5cGUgKlRZUEUqIGtleSAqS0VZX1NJWkUqIHZhbHVlICpWQUxVRV9TSVpFKiAgZW50cmllcyAqTUFYX0VOVFJJRVMqIG5hbWUgKk5BTUUqIFtmbGFncyAqRkxBR1MqXSBbaW5uZXJfbWFwICpNQVAqXSBbb2ZmbG9hZF9kZXYgKk5BTUUqXVxuICAgICBDcmVhdGUgYSBuZXcgbWFwIHdpdGggZ2l2ZW4gcGFyYW1ldGVycyBhbmQgcGluIGl0IHRvICpicGZmcyogYXMgKkZJTEUqLlxuIFxuLSAgICAqRkxBR1MqIHNob3VsZCBiZSBhbiBpbnRlZ2VyIHdoaWNoIGlzIHRoZSBjb21iaW5hdGlvbiBvZiBkZXNpcmVkIGZsYWdzLFxuLSAgICBlLmcuIDEwMjQgZm9yICoqQlBGX0ZfTU1BUEFCTEUqKiAoc2VlIGJwZi5oIFVBUEkgaGVhZGVyIGZvciBleGlzdGluZ1xuLSAgICBmbGFncykuXG4mIzQzOyAgICAqRkxBR1MqIGFjY2VwdHMgYW4gdW5zaWduZWQgMzItYml0IGludGVnZXIgY29tYmluaW5nIHRoZSBkZXNpcmVkIGZsYWdzXG4mIzQzOyAgICAoZGVjaW1hbCwgaGV4YWRlY2ltYWwgd2l0aCBhICoqMHgqKiBwcmVmaXgsIG9yIG9jdGFsIHdpdGggYSAqKjAqKiBwcmVmaXgpLFxuJiM0MzsgICAgb3IgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBmdWxsLCBjYXNlLXNlbnNpdGl2ZSBtYXAgY3JlYXRpb24gZmxhZyBuYW1lc1xuJiM0MzsgICAgZnJvbSB0aGUgYnBmLmggVUFQSSBoZWFkZXIuIEZvciBleGFtcGxlLCAqKjEwMjQqKiwgKioweDQwMCoqLCBhbmRcbiYjNDM7ICAgICoqQlBGX0ZfTU1BUEFCTEUqKiBhcmUgZXF1aXZhbGVudC4gTXVsdGlwbGUgbmFtZXMgYXJlIGNvbWJpbmVkIHdpdGhcbiYjNDM7ICAgIGJpdHdpc2UgT1IsIGZvciBleGFtcGxlICoqQlBGX0ZfTk9fUFJFQUxMT0MsQlBGX0ZfUkRPTkxZX1BST0cqKi5cbiYjNDM7ICAgIFJlcGVhdGVkIG5hbWVzIGFyZSBhbGxvd2VkLiBFbXB0eSBsaXN0IGVsZW1lbnRzLCBhYmJyZXZpYXRlZCBuYW1lcywgYW5kXG4mIzQzOyAgICBsaXN0cyBtaXhpbmcgbnVtYmVycyB3aXRoIG5hbWVzIGFyZSBub3QgYWNjZXB0ZWQuIFVzZSAqKjAqKiBmb3Igbm8gZmxhZ3MuXG4mIzQzOyAgICBOdW1lcmljIHZhbHVlcyBjYW4gaW5jbHVkZSBiaXRzIHVua25vd24gdG8gYnBmdG9vbC4gVGhlIGtlcm5lbCBjaGVja3NcbiYjNDM7ICAgIHdoZXRoZXIgdGhlIGZsYWdzIGFyZSB2YWxpZCBmb3IgdGhlIHJlcXVlc3RlZCBtYXAgdHlwZS5cbiBcbiAgICAgVG8gY3JlYXRlIG1hcHMgb2YgdHlwZSBhcnJheS1vZi1tYXBzIG9yIGhhc2gtb2YtbWFwcywgdGhlICoqaW5uZXJfbWFwKipcbiAgICAga2V5d29yZCBtdXN0IGJlIHVzZWQgdG8gcGFzcyBhbiBpbm5lciBtYXAuIFRoZSBrZXJuZWwgbmVlZHMgaXQgdG8gY29sbGVjdFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL2Jhc2gtY29tcGxldGlvbi9icGZ0b29sIGIvdG9vbHMvYnBmL2JwZnRvb2wvYmFzaC1jb21wbGV0aW9uL2JwZnRvb2xcbmluZGV4IDc1Y2JjYjUxMmViYWUuLmVhM2Y1MjFiNmYwODggMTAwNjQ0XG4tLS0gYS90b29scy9icGYvYnBmdG9vbC9iYXNoLWNvbXBsZXRpb24vYnBmdG9vbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnBmL2JwZnRvb2wvYmFzaC1jb21wbGV0aW9uL2JwZnRvb2xcbkBAIC03MTgsNiAmIzQzOzcxOCwxMCBAQCBfYnBmdG9vbCgpXG4gICAgICAgICAgICAgICAgICAgICBlc2FjXG4gICAgICAgICAgICAgICAgICAgICA7O1xuICAgICAgICAgICAgICAgICBjcmVhdGUpXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgIyBLZWVwIGEgZmxhZ3MgbGlzdCB0b2dldGhlciBpZiByZWFkbGluZSBzcGxpdHMgYXQgY29tbWFzLlxuJiM0MzsgICAgICAgICAgICAgICAgICAgIGlmIFtbICRDT01QX1dPUkRCUkVBS1MgPT0gKiwqIFx1MDAyNlx1MDAyNiAoICRjdXIgPT0gLCB8fCAkcHJldiA9PSAsICkgXV07IHRoZW5cbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgX2dldF9jb21wX3dvcmRzX2J5X3JlZiAtbiAsIGN1ciBwcmV2XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgZmlcbiAgICAgICAgICAgICAgICAgICAgIGNhc2UgJHByZXYgaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAkY29tbWFuZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2ZpbGVkaXJcbkBAIC03MjksNyAmIzQzOzczMywyMSBAQCBfYnBmdG9vbCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTVBSRVBMWT0oICQoIGNvbXBnZW4gLVcgXCYjMzQ7JEJQRlRPT0xfTUFQX0NSRUFURV9UWVBFU1wmIzM0OyAtLSBcJiMzNDskY3VyXCYjMzQ7ICkgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7O1xuLSAgICAgICAgICAgICAgICAgICAgICAgIGtleXx2YWx1ZXxmbGFnc3xlbnRyaWVzKVxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBmbGFncylcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvcHQgLW8gbm9zcGFjZVxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgZmxhZ3M9XCYjMzQ7JChicGZ0b29sIGZlYXR1cmUgbGlzdF9idWlsdGlucyBtYXBfY3JlYXRlX2ZsYWdzIDJcdTAwM2UvZGV2L251bGwpXCYjMzQ7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBwcmVmaXg9IGZsYWdcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgY29tbWEgaXMgbm90IGEgd29yZCBicmVhaywgUmVhZGxpbmUgcmVwbGFjZXMgdGhlIHdob2xlXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHdvcmQsIHNvIHByZXNlcnZlIHRoZSBmbGFncyBiZWZvcmUgdGhlIGxhc3QgY29tbWEuXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBbWyAkY3VyID09ICosKiBcdTAwMjZcdTAwMjYgJENPTVBfV09SREJSRUFLUyAhPSAqLCogXV07IHRoZW5cbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg9XCYjMzQ7JHtjdXIlLCp9LFwmIzM0O1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmbGFnIGluICQoY29tcGdlbiAtVyBcJiMzNDskZmxhZ3NcJiMzNDsgLS0gXCYjMzQ7JHtjdXIjIyosfVwmIzM0Oyk7IGRvXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09NUFJFUExZJiM0Mzs9KCBcJiMzNDske3ByZWZpeH0ke2ZsYWd9XCYjMzQ7IClcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmVcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICA7O1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBrZXl8dmFsdWV8ZW50cmllcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOztcbiAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lcl9tYXApXG5AQCAtMTE5Miw3ICYjNDM7MTIxMCw3IEBAIF9icGZ0b29sKClcbiAgICAgICAgICAgICAgICAgICAgIDs7XG4gICAgICAgICAgICAgICAgIGxpc3RfYnVpbHRpbnMpXG4gICAgICAgICAgICAgICAgICAgICBbWyAkcHJldiAhPSBcJiMzNDskY29tbWFuZFwmIzM0OyBdXSBcdTAwMjZcdTAwMjYgcmV0dXJuIDBcbi0gICAgICAgICAgICAgICAgICAgIENPTVBSRVBMWT0oICQoIGNvbXBnZW4gLVcgJiMzOTtwcm9nX3R5cGVzIG1hcF90eXBlcyBcXFxuJiM0MzsgICAgICAgICAgICAgICAgICAgIENPTVBSRVBMWT0oICQoIGNvbXBnZW4gLVcgJiMzOTtwcm9nX3R5cGVzIG1hcF90eXBlcyBtYXBfY3JlYXRlX2ZsYWdzIFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNoX3R5cGVzIGxpbmtfdHlwZXMgaGVscGVycyYjMzk7IC0tIFwmIzM0OyRjdXJcJiMzNDsgKSApXG4gICAgICAgICAgICAgICAgICAgICA7O1xuICAgICAgICAgICAgICAgICAqKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuYyBiL3Rvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuY1xuaW5kZXggMGY2MDcwYTBjOGU3MS4uYjU0MTlkNWE2NjFhNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jXG5AQCAtMTIyMCw2ICYjNDM7MTIyMCw4IEBAIHN0YXRpYyBpbnQgZG9fbGlzdF9idWlsdGlucyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdGdldF9uYW1lID0gKGNvbnN0IGNoYXIgKigqKSh1bnNpZ25lZCBpbnQpKWxpYmJwZl9icGZfcHJvZ190eXBlX3N0cjtcbiBcdH0gZWxzZSBpZiAoaXNfcHJlZml4KCphcmd2LCBcJiMzNDttYXBfdHlwZXNcJiMzNDspKSB7XG4gXHRcdGdldF9uYW1lID0gKGNvbnN0IGNoYXIgKigqKSh1bnNpZ25lZCBpbnQpKWxpYmJwZl9icGZfbWFwX3R5cGVfc3RyO1xuJiM0MztcdH0gZWxzZSBpZiAoaXNfcHJlZml4KCphcmd2LCBcJiMzNDttYXBfY3JlYXRlX2ZsYWdzXCYjMzQ7KSkge1xuJiM0MztcdFx0Z2V0X25hbWUgPSBtYXBfY3JlYXRlX2ZsYWdfbmFtZTtcbiBcdH0gZWxzZSBpZiAoaXNfcHJlZml4KCphcmd2LCBcJiMzNDthdHRhY2hfdHlwZXNcJiMzNDspKSB7XG4gXHRcdGdldF9uYW1lID0gKGNvbnN0IGNoYXIgKigqKSh1bnNpZ25lZCBpbnQpKWxpYmJwZl9icGZfYXR0YWNoX3R5cGVfc3RyO1xuIFx0fSBlbHNlIGlmIChpc19wcmVmaXgoKmFyZ3YsIFwmIzM0O2xpbmtfdHlwZXNcJiMzNDspKSB7XG5AQCAtMTIyNyw3ICYjNDM7MTIyOSw3IEBAIHN0YXRpYyBpbnQgZG9fbGlzdF9idWlsdGlucyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHR9IGVsc2UgaWYgKGlzX3ByZWZpeCgqYXJndiwgXCYjMzQ7aGVscGVyc1wmIzM0OykpIHtcbiBcdFx0Z2V0X25hbWUgPSBnZXRfaGVscGVyX25hbWU7XG4gXHR9IGVsc2Uge1xuLVx0XHRwX2VycihcJiMzNDtleHBlY3RlZCAmIzM5O3Byb2dfdHlwZXMmIzM5OywgJiMzOTttYXBfdHlwZXMmIzM5OywgJiMzOTthdHRhY2hfdHlwZXMmIzM5OywgJiMzOTtsaW5rX3R5cGVzJiMzOTsgb3IgJiMzOTtoZWxwZXJzJiMzOTssIGdvdDogJXNcJiMzNDssICphcmd2KTtcbiYjNDM7XHRcdHBfZXJyKFwmIzM0O2V4cGVjdGVkICYjMzk7cHJvZ190eXBlcyYjMzk7LCAmIzM5O21hcF90eXBlcyYjMzk7LCAmIzM5O21hcF9jcmVhdGVfZmxhZ3MmIzM5OywgJiMzOTthdHRhY2hfdHlwZXMmIzM5OywgJiMzOTtsaW5rX3R5cGVzJiMzOTsgb3IgJiMzOTtoZWxwZXJzJiMzOTssIGdvdDogJXNcJiMzNDssICphcmd2KTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFxuQEAgLTEyNjUsNyAmIzQzOzEyNjcsOCBAQCBzdGF0aWMgaW50IGRvX2hlbHAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRcJiMzNDsgICAgICAgJTEkcyAlMiRzIGhlbHBcXG5cJiMzNDtcbiBcdFx0XCYjMzQ7XFxuXCYjMzQ7XG4gXHRcdFwmIzM0OyAgICAgICBDT01QT05FTlQgOj0geyBrZXJuZWwgfCBkZXYgTkFNRSB9XFxuXCYjMzQ7XG4tXHRcdFwmIzM0OyAgICAgICBHUk9VUCA6PSB7IHByb2dfdHlwZXMgfCBtYXBfdHlwZXMgfCBhdHRhY2hfdHlwZXMgfCBsaW5rX3R5cGVzIHwgaGVscGVycyB9XFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDsgICAgICAgR1JPVVAgOj0geyBwcm9nX3R5cGVzIHwgbWFwX3R5cGVzIHwgbWFwX2NyZWF0ZV9mbGFncyB8XFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDsgICAgICAgICAgICAgICAgICBhdHRhY2hfdHlwZXMgfCBsaW5rX3R5cGVzIHwgaGVscGVycyB9XFxuXCYjMzQ7XG4gXHRcdFwmIzM0OyAgICAgICBcJiMzNDsgSEVMUF9TUEVDX09QVElPTlMgXCYjMzQ7IH1cXG5cJiMzNDtcbiBcdFx0XCYjMzQ7XCYjMzQ7LFxuIFx0XHRiaW5fbmFtZSwgYXJndlstMl0pO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL21haW4uaCBiL3Rvb2xzL2JwZi9icGZ0b29sL21haW4uaFxuaW5kZXggOTMxNWExZGIxZjdjMi4uM2UyODU2YzlmNTk1YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL21haW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnBmL2JwZnRvb2wvbWFpbi5oXG5AQCAtMTgwLDYgJiM0MzsxODAsNyBAQCBpbnQgZG9fdG9rZW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSBfX3dlYWs7XG4gaW50IHBhcnNlX3UzMl9hcmcoaW50ICphcmdjLCBjaGFyICoqKmFyZ3YsIF9fdTMyICp2YWwsIGNvbnN0IGNoYXIgKndoYXQpO1xuIGludCBwcm9nX3BhcnNlX2ZkKGludCAqYXJnYywgY2hhciAqKiphcmd2KTtcbiBpbnQgcHJvZ19wYXJzZV9mZHMoaW50ICphcmdjLCBjaGFyICoqKmFyZ3YsIGludCAqKmZkcyk7XG4mIzQzO2NvbnN0IGNoYXIgKm1hcF9jcmVhdGVfZmxhZ19uYW1lKHVuc2lnbmVkIGludCBpZCk7XG4gaW50IG1hcF9wYXJzZV9mZChpbnQgKmFyZ2MsIGNoYXIgKioqYXJndiwgX191MzIgb3Blbl9mbGFncyk7XG4gaW50IG1hcF9wYXJzZV9mZHMoaW50ICphcmdjLCBjaGFyICoqKmFyZ3YsIGludCAqKmZkcywgX191MzIgb3Blbl9mbGFncyk7XG4gaW50IG1hcF9wYXJzZV9mZF9hbmRfaW5mbyhpbnQgKmFyZ2MsIGNoYXIgKioqYXJndiwgc3RydWN0IGJwZl9tYXBfaW5mbyAqaW5mbyxcbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9tYXAuYyBiL3Rvb2xzL2JwZi9icGZ0b29sL21hcC5jXG5pbmRleCA2ODRhOGZiNzI0MTQ2Li40NDQ1MDE0MjQ3ZDYyIDEwMDY0NFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2JwZi9icGZ0b29sL21hcC5jXG5AQCAtMTI1MCw2ICYjNDM7MTI1MCw4MSBAQCBzdGF0aWMgaW50IGRvX3BpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB7XG4mIzQzO1x0Y29uc3QgY2hhciAqbmFtZTtcbiYjNDM7XHRfX3UzMiB2YWx1ZTtcbiYjNDM7fSBtYXBfY3JlYXRlX2ZsYWdzW10gPSB7XG4mIzQzOyNkZWZpbmUgTUFQX0NSRUFURV9GTEFHKGZsYWcpIHsgI2ZsYWcsIGZsYWcgfVxuJiM0MztcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9OT19QUkVBTExPQyksXG4mIzQzO1x0TUFQX0NSRUFURV9GTEFHKEJQRl9GX05PX0NPTU1PTl9MUlUpLFxuJiM0MztcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9OVU1BX05PREUpLFxuJiM0MztcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9SRE9OTFkpLFxuJiM0MztcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9XUk9OTFkpLFxuJiM0MztcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9TVEFDS19CVUlMRF9JRCksXG4mIzQzO1x0TUFQX0NSRUFURV9GTEFHKEJQRl9GX1pFUk9fU0VFRCksXG4mIzQzO1x0TUFQX0NSRUFURV9GTEFHKEJQRl9GX1JET05MWV9QUk9HKSxcbiYjNDM7XHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfV1JPTkxZX1BST0cpLFxuJiM0MztcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9DTE9ORSksXG4mIzQzO1x0TUFQX0NSRUFURV9GTEFHKEJQRl9GX01NQVBBQkxFKSxcbiYjNDM7XHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfUFJFU0VSVkVfRUxFTVMpLFxuJiM0MztcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9JTk5FUl9NQVApLFxuJiM0MztcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9MSU5LKSxcbiYjNDM7XHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfVlRZUEVfQlRGX09CSl9GRCksXG4mIzQzO1x0TUFQX0NSRUFURV9GTEFHKEJQRl9GX1RPS0VOX0ZEKSxcbiYjNDM7XHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfU0VHVl9PTl9GQVVMVCksXG4mIzQzO1x0TUFQX0NSRUFURV9GTEFHKEJQRl9GX05PX1VTRVJfQ09OViksXG4mIzQzO1x0TUFQX0NSRUFURV9GTEFHKEJQRl9GX1JCX09WRVJXUklURSksXG4mIzQzOyN1bmRlZiBNQVBfQ1JFQVRFX0ZMQUdcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2NvbnN0IGNoYXIgKm1hcF9jcmVhdGVfZmxhZ19uYW1lKHVuc2lnbmVkIGludCBpZClcbiYjNDM7e1xuJiM0MztcdGlmIChpZCBcdTAwM2U9IEFSUkFZX1NJWkUobWFwX2NyZWF0ZV9mbGFncykpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1hcF9jcmVhdGVfZmxhZ3NbaWRdLm5hbWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGFyc2VfbWFwX2NyZWF0ZV9mbGFncyhjb25zdCBjaGFyICphcmcsIF9fdTMyICpmbGFncylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGNoYXIgKm5hbWUgPSBhcmcsICpjb21tYTtcbiYjNDM7XHRsb25nIGxvbmcgdmFsdWU7XG4mIzQzO1x0X191MzIgcGFyc2VkID0gMDtcbiYjNDM7XHRzaXplX3QgbGVuLCBpO1xuJiM0MztcdGNoYXIgKmVuZDtcbiYjNDM7XG4mIzQzO1x0LyogS2VlcCBiYXNlLTAgbnVtZXJpYyBpbnB1dCwgaW5jbHVkaW5nIGJpdHMgdW5rbm93biB0byB0aGlzIGJwZnRvb2wuICovXG4mIzQzO1x0aWYgKHN0cm5jbXAoYXJnLCBcJiMzNDtCUEZfRl9cJiMzNDssIDYpKSB7XG4mIzQzO1x0XHRlcnJubyA9IDA7XG4mIzQzO1x0XHR2YWx1ZSA9IHN0cnRvbGwoYXJnLCBcdTAwMjZlbmQsIDApO1xuJiM0MztcdFx0aWYgKGVycm5vIHx8IGVuZCA9PSBhcmcgfHwgKmVuZCB8fCB2YWx1ZSBcdTAwM2MgMCB8fCB2YWx1ZSBcdTAwM2UgVUlOVDMyX01BWClcbiYjNDM7XHRcdFx0Z290byBpbnZhbGlkO1xuJiM0MztcdFx0KmZsYWdzID0gdmFsdWU7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdGNvbW1hID0gc3RyY2hyKG5hbWUsICYjMzk7LCYjMzk7KTtcbiYjNDM7XHRcdGxlbiA9IGNvbW1hID8gKHNpemVfdCkoY29tbWEgLSBuYW1lKSA6IHN0cmxlbihuYW1lKTtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobWFwX2NyZWF0ZV9mbGFncyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmIChzdHJsZW4obWFwX2NyZWF0ZV9mbGFnc1tpXS5uYW1lKSA9PSBsZW4gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICAhc3RybmNtcChuYW1lLCBtYXBfY3JlYXRlX2ZsYWdzW2ldLm5hbWUsIGxlbikpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoaSA9PSBBUlJBWV9TSVpFKG1hcF9jcmVhdGVfZmxhZ3MpKVxuJiM0MztcdFx0XHRnb3RvIGludmFsaWQ7XG4mIzQzO1x0XHRwYXJzZWQgfD0gbWFwX2NyZWF0ZV9mbGFnc1tpXS52YWx1ZTtcbiYjNDM7XHRcdGlmIChjb21tYSlcbiYjNDM7XHRcdFx0bmFtZSA9IGNvbW1hICYjNDM7IDE7XG4mIzQzO1x0fSB3aGlsZSAoY29tbWEpO1xuJiM0MztcbiYjNDM7XHQqZmxhZ3MgPSBwYXJzZWQ7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO2ludmFsaWQ6XG4mIzQzO1x0cF9lcnIoXCYjMzQ7Y2FuJiMzOTt0IHBhcnNlICVzIGFzIG1hcCBjcmVhdGlvbiBmbGFnc1wmIzM0OywgYXJnKTtcbiYjNDM7XHRyZXR1cm4gLTE7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBkb19jcmVhdGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIHtcbiBcdExJQkJQRl9PUFRTKGJwZl9tYXBfY3JlYXRlX29wdHMsIGF0dHIpO1xuQEAgLTEzMDEsOSAmIzQzOzEzNzYsMTQgQEAgc3RhdGljIGludCBkb19jcmVhdGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRcdFx0XHQgIFwmIzM0O21heCBlbnRyaWVzXCYjMzQ7KSlcbiBcdFx0XHRcdGdvdG8gZXhpdDtcbiBcdFx0fSBlbHNlIGlmIChpc19wcmVmaXgoKmFyZ3YsIFwmIzM0O2ZsYWdzXCYjMzQ7KSkge1xuLVx0XHRcdGlmIChwYXJzZV91MzJfYXJnKFx1MDAyNmFyZ2MsIFx1MDAyNmFyZ3YsIFx1MDAyNmF0dHIubWFwX2ZsYWdzLFxuLVx0XHRcdFx0XHQgIFwmIzM0O2ZsYWdzXCYjMzQ7KSlcbiYjNDM7XHRcdFx0TkVYVF9BUkcoKTtcbiYjNDM7XHRcdFx0aWYgKGF0dHIubWFwX2ZsYWdzKSB7XG4mIzQzO1x0XHRcdFx0cF9lcnIoXCYjMzQ7ZmxhZ3MgYWxyZWFkeSBzcGVjaWZpZWRcJiMzNDspO1xuIFx0XHRcdFx0Z290byBleGl0O1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGlmIChwYXJzZV9tYXBfY3JlYXRlX2ZsYWdzKCphcmd2LCBcdTAwMjZhdHRyLm1hcF9mbGFncykpXG4mIzQzO1x0XHRcdFx0Z290byBleGl0O1xuJiM0MztcdFx0XHRORVhUX0FSRygpO1xuIFx0XHR9IGVsc2UgaWYgKGlzX3ByZWZpeCgqYXJndiwgXCYjMzQ7ZGV2XCYjMzQ7KSkge1xuIFx0XHRcdHBfaW5mbyhcJiMzNDtXYXJuaW5nOiAmIzM5O2JwZnRvb2wgbWFwIGNyZWF0ZSBbLi4uXSBkZXYgXHUwMDNjaWZuYW1lXHUwMDNlJiMzOTsgc3ludGF4IGlzIGRlcHJlY2F0ZWQuXFxuXCYjMzQ7XG4gXHRcdFx0ICAgICAgIFwmIzM0O0dvaW5nIGZ1cnRoZXIsIHBsZWFzZSB1c2UgJiMzOTtvZmZsb2FkX2RldiBcdTAwM2NpZm5hbWVcdTAwM2UmIzM5OyB0byByZXF1ZXN0IGhhcmR3YXJlIG9mZmxvYWQgZm9yIHRoZSBtYXAuXCYjMzQ7KTtcbkBAIC0xNDc0LDYgJiM0MzsxNTU0LDcgQEAgc3RhdGljIGludCBkb19oZWxwKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0XCYjMzQ7ICAgICAgIERBVEEgOj0geyBbaGV4XSBCWVRFUyB9XFxuXCYjMzQ7XG4gXHRcdFwmIzM0OyAgICAgICBcJiMzNDsgSEVMUF9TUEVDX1BST0dSQU0gXCYjMzQ7XFxuXCYjMzQ7XG4gXHRcdFwmIzM0OyAgICAgICBWQUxVRSA6PSB7IERBVEEgfCBNQVAgfCBQUk9HIH1cXG5cJiMzNDtcbiYjNDM7XHRcdFwmIzM0OyAgICAgICBGTEFHUyA6PSB7IGludGVnZXIgfCBCUEZfRl9OQU1FWyxCUEZfRl9OQU1FLi4uXSB9XFxuXCYjMzQ7XG4gXHRcdFwmIzM0OyAgICAgICBVUERBVEVfRkxBR1MgOj0geyBhbnkgfCBleGlzdCB8IG5vZXhpc3QgfVxcblwmIzM0O1xuIFx0XHRcJiMzNDsgICAgICAgVFlQRSA6PSB7IGhhc2ggfCBhcnJheSB8IHByb2dfYXJyYXkgfCBwZXJmX2V2ZW50X2FycmF5IHwgcGVyY3B1X2hhc2ggfFxcblwmIzM0O1xuIFx0XHRcJiMzNDsgICAgICAgICAgICAgICAgIHBlcmNwdV9hcnJheSB8IHN0YWNrX3RyYWNlIHwgY2dyb3VwX2FycmF5IHwgbHJ1X2hhc2ggfFxcblwmIzM0O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZnRvb2xfbWFwX2ZsYWdzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX21hcF9mbGFncy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDYxN2I0MzI3M2E4ZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9tYXBfZmxhZ3MuY1xuQEAgLTAsMCAmIzQzOzEsMTAwIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZnRvb2xfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBtYXBfZmxhZ3NfdGVzdCB7XG4mIzQzO1x0Y29uc3QgY2hhciAqbmFtZTtcbiYjNDM7XHRjb25zdCBjaGFyICpmbGFncztcbiYjNDM7XHRfX3UzMiBleHBlY3RlZF9mbGFncztcbiYjNDM7XHRjb25zdCBjaGFyICplcnJvcjtcbiYjNDM7fSB0ZXN0c1tdID0ge1xuJiM0MztcdHsgXCYjMzQ7emVyb1wmIzM0OywgXCYjMzQ7MFwmIzM0OywgMCB9LFxuJiM0MztcdHsgXCYjMzQ7ZGVjaW1hbFwmIzM0OywgXCYjMzQ7MTI5XCYjMzQ7LCBCUEZfRl9OT19QUkVBTExPQyB8IEJQRl9GX1JET05MWV9QUk9HIH0sXG4mIzQzO1x0eyBcJiMzNDtoZXhhZGVjaW1hbFwmIzM0OywgXCYjMzQ7MHg4MVwmIzM0OywgQlBGX0ZfTk9fUFJFQUxMT0MgfCBCUEZfRl9SRE9OTFlfUFJPRyB9LFxuJiM0MztcdHsgXCYjMzQ7b2N0YWxcJiMzNDssIFwmIzM0OzAyMDFcJiMzNDssIEJQRl9GX05PX1BSRUFMTE9DIHwgQlBGX0ZfUkRPTkxZX1BST0cgfSxcbiYjNDM7XHR7IFwmIzM0O3Bvc2l0aXZlX3NpZ25cJiMzNDssIFwmIzM0OyYjNDM7MVwmIzM0OywgQlBGX0ZfTk9fUFJFQUxMT0MgfSxcbiYjNDM7XHR7IFwmIzM0O3NpbmdsZV9uYW1lXCYjMzQ7LCBcJiMzNDtCUEZfRl9OT19QUkVBTExPQ1wmIzM0OywgQlBGX0ZfTk9fUFJFQUxMT0MgfSxcbiYjNDM7XHR7IFwmIzM0O2NvbWJpbmVkX25hbWVzXCYjMzQ7LCBcJiMzNDtCUEZfRl9OT19QUkVBTExPQyxCUEZfRl9SRE9OTFlfUFJPR1wmIzM0OyxcbiYjNDM7XHQgIEJQRl9GX05PX1BSRUFMTE9DIHwgQlBGX0ZfUkRPTkxZX1BST0cgfSxcbiYjNDM7XHR7IFwmIzM0O3JlcGVhdGVkX25hbWVcJiMzNDssIFwmIzM0O0JQRl9GX05PX1BSRUFMTE9DLEJQRl9GX05PX1BSRUFMTE9DXCYjMzQ7LCBCUEZfRl9OT19QUkVBTExPQyB9LFxuJiM0MztcdHsgXCYjMzQ7dW5rbm93bl9uYW1lXCYjMzQ7LCBcJiMzNDtCUEZfRl9OT1RfQV9NQVBfRkxBR1wmIzM0OywgMCwgXCYjMzQ7Y2FuJiMzOTt0IHBhcnNlXCYjMzQ7IH0sXG4mIzQzO1x0eyBcJiMzNDtvdGhlcl9jb21tYW5kX2ZsYWdcJiMzNDssIFwmIzM0O0JQRl9GX1BBVEhfRkRcJiMzNDssIDAsIFwmIzM0O2NhbiYjMzk7dCBwYXJzZVwmIzM0OyB9LFxuJiM0MztcdHsgXCYjMzQ7dXBkYXRlX2ZsYWdcJiMzNDssIFwmIzM0O0JQRl9GX0xPQ0tcJiMzNDssIDAsIFwmIzM0O2NhbiYjMzk7dCBwYXJzZVwmIzM0OyB9LFxuJiM0MztcdHsgXCYjMzQ7YWJicmV2aWF0ZWRfbmFtZVwmIzM0OywgXCYjMzQ7QlBGX0ZfTk9fUFJFXCYjMzQ7LCAwLCBcJiMzNDtjYW4mIzM5O3QgcGFyc2VcJiMzNDsgfSxcbiYjNDM7XHR7IFwmIzM0O2xvd2VyY2FzZV9uYW1lXCYjMzQ7LCBcJiMzNDticGZfZl9ub19wcmVhbGxvY1wmIzM0OywgMCwgXCYjMzQ7Y2FuJiMzOTt0IHBhcnNlXCYjMzQ7IH0sXG4mIzQzO1x0eyBcJiMzNDtlbXB0eVwmIzM0OywgXCYjMzQ7XCYjMzQ7LCAwLCBcJiMzNDtjYW4mIzM5O3QgcGFyc2VcJiMzNDsgfSxcbiYjNDM7XHR7IFwmIzM0O3doaXRlc3BhY2VcJiMzNDssIFwmIzM0OyBcJiMzNDssIDAsIFwmIzM0O2NhbiYjMzk7dCBwYXJzZVwmIzM0OyB9LFxuJiM0MztcdHsgXCYjMzQ7ZW1wdHlfbGlzdFwmIzM0OywgXCYjMzQ7LFwmIzM0OywgMCwgXCYjMzQ7Y2FuJiMzOTt0IHBhcnNlXCYjMzQ7IH0sXG4mIzQzO1x0eyBcJiMzNDtsZWFkaW5nX2NvbW1hXCYjMzQ7LCBcJiMzNDssQlBGX0ZfTk9fUFJFQUxMT0NcJiMzNDssIDAsIFwmIzM0O2NhbiYjMzk7dCBwYXJzZVwmIzM0OyB9LFxuJiM0MztcdHsgXCYjMzQ7dHJhaWxpbmdfY29tbWFcJiMzNDssIFwmIzM0O0JQRl9GX05PX1BSRUFMTE9DLFwmIzM0OywgMCwgXCYjMzQ7Y2FuJiMzOTt0IHBhcnNlXCYjMzQ7IH0sXG4mIzQzO1x0eyBcJiMzNDtlbXB0eV9lbGVtZW50XCYjMzQ7LCBcJiMzNDtCUEZfRl9OT19QUkVBTExPQywsQlBGX0ZfUkRPTkxZX1BST0dcJiMzNDssIDAsIFwmIzM0O2NhbiYjMzk7dCBwYXJzZVwmIzM0OyB9LFxuJiM0MztcdHsgXCYjMzQ7bnVtYmVyX3RoZW5fbmFtZVwmIzM0OywgXCYjMzQ7MSxCUEZfRl9SRE9OTFlfUFJPR1wmIzM0OywgMCwgXCYjMzQ7Y2FuJiMzOTt0IHBhcnNlXCYjMzQ7IH0sXG4mIzQzO1x0eyBcJiMzNDtuYW1lX3RoZW5fbnVtYmVyXCYjMzQ7LCBcJiMzNDtCUEZfRl9OT19QUkVBTExPQywxMjhcJiMzNDssIDAsIFwmIzM0O2NhbiYjMzk7dCBwYXJzZVwmIzM0OyB9LFxuJiM0MztcdHsgXCYjMzQ7bnVtZXJpY19saXN0XCYjMzQ7LCBcJiMzNDsxLDEyOFwmIzM0OywgMCwgXCYjMzQ7Y2FuJiMzOTt0IHBhcnNlXCYjMzQ7IH0sXG4mIzQzO1x0eyBcJiMzNDt3aGl0ZXNwYWNlX2luX2xpc3RcJiMzNDssIFwmIzM0O0JQRl9GX05PX1BSRUFMTE9DLCBCUEZfRl9SRE9OTFlfUFJPR1wmIzM0OywgMCwgXCYjMzQ7Y2FuJiMzOTt0IHBhcnNlXCYjMzQ7IH0sXG4mIzQzO1x0eyBcJiMzNDtvdmVyZmxvd191MzJcJiMzNDssIFwmIzM0OzQyOTQ5NjcyOTZcJiMzNDssIDAsIFwmIzM0O2NhbiYjMzk7dCBwYXJzZVwmIzM0OyB9LFxuJiM0MztcdHsgXCYjMzQ7b3ZlcmZsb3dfaGV4XCYjMzQ7LCBcJiMzNDsweDEwMDAwMDAwMFwmIzM0OywgMCwgXCYjMzQ7Y2FuJiMzOTt0IHBhcnNlXCYjMzQ7IH0sXG4mIzQzO1x0eyBcJiMzNDtvdmVyZmxvd191NjRcJiMzNDssIFwmIzM0OzE4NDQ2NzQ0MDczNzA5NTUxNjE2XCYjMzQ7LCAwLCBcJiMzNDtjYW4mIzM5O3QgcGFyc2VcJiMzNDsgfSxcbiYjNDM7XHR7IFwmIzM0O25lZ2F0aXZlXCYjMzQ7LCBcJiMzNDstMVwmIzM0OywgMCwgXCYjMzQ7Y2FuJiMzOTt0IHBhcnNlXCYjMzQ7IH0sXG4mIzQzO1x0LyogTnVtZXJpYyBiaXRzIHVua25vd24gdG8gYnBmdG9vbCBtdXN0IHN0aWxsIHJlYWNoIHRoZSBrZXJuZWwuICovXG4mIzQzO1x0eyBcJiMzNDthbGxfYml0c1wmIzM0OywgXCYjMzQ7MHhmZmZmZmZmZlwmIzM0OywgMCwgXCYjMzQ7bWFwIGNyZWF0ZSBmYWlsZWRcJiMzNDsgfSxcbiYjNDM7XHQvKiBUaGUga2VybmVsIHZhbGlkYXRlcyBjb21iaW5hdGlvbnMgb2Yga25vd24gbWFwIGNyZWF0aW9uIGZsYWdzLiAqL1xuJiM0MztcdHsgXCYjMzQ7aW52YWxpZF9jb21iaW5hdGlvblwmIzM0OywgXCYjMzQ7QlBGX0ZfUkRPTkxZLEJQRl9GX1dST05MWVwmIzM0OywgMCwgXCYjMzQ7bWFwIGNyZWF0ZSBmYWlsZWRcJiMzNDsgfSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfbWFwX2ZsYWdzKGNvbnN0IHN0cnVjdCBtYXBfZmxhZ3NfdGVzdCAqdGVzdCwgY29uc3QgY2hhciAqcGF0aClcbiYjNDM7e1xuJiM0MztcdGNoYXIgY21kW01BWF9CUEZUT09MX0NNRF9MRU5dLCBvdXRwdXRbMTAyNF0gPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX21hcF9pbmZvIGluZm8gPSB7fTtcbiYjNDM7XHRfX3UzMiBpbmZvX2xlbiA9IHNpemVvZihpbmZvKTtcbiYjNDM7XHRpbnQgZmQsIGVycjtcbiYjNDM7XG4mIzQzO1x0LyogTGV0IHRoZSBmbGFncyBwYXJzZXIgaGFuZGxlIG5lZ2F0aXZlIG51bWJlcnMgaW5zdGVhZCBvZiBnZXRvcHQoKS4gKi9cbiYjNDM7XHRlcnIgPSBzbnByaW50ZihjbWQsIHNpemVvZihjbWQpLFxuJiM0MztcdFx0ICAgICAgIFwmIzM0Oy0tIG1hcCBjcmVhdGUgJXMgdHlwZSBoYXNoIGtleSA0IHZhbHVlIDQgZW50cmllcyAxIG5hbWUgZmxhZ3NfdGVzdCBmbGFncyAmIzM5OyVzJiMzOTsgMlx1MDAzZVx1MDAyNjFcJiMzNDssXG4mIzQzO1x0XHQgICAgICAgcGF0aCwgdGVzdC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR1QoZXJyLCAwLCBcJiMzNDtmb3JtYXRfY29tbWFuZFwmIzM0OykgfHxcbiYjNDM7XHQgICAgIUFTU0VSVF9MVChlcnIsIHNpemVvZihjbWQpLCBcJiMzNDtjb21tYW5kX2xlbmd0aFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGVyciA9IGdldF9icGZ0b29sX2NvbW1hbmRfb3V0cHV0KGNtZCwgb3V0cHV0LCBzaXplb2Yob3V0cHV0KSk7XG4mIzQzO1x0aWYgKHRlc3QtXHUwMDNlZXJyb3IpIHtcbiYjNDM7XHRcdEFTU0VSVF9ORVEoZXJyLCAwLCBcJiMzNDtyZWplY3RfZmxhZ3NcJiMzNDspO1xuJiM0MztcdFx0QVNTRVJUX0hBU19TVUJTVFIob3V0cHV0LCB0ZXN0LVx1MDAzZWVycm9yLCBcJiMzNDtlcnJvcl9tZXNzYWdlXCYjMzQ7KTtcbiYjNDM7XHRcdGVyciA9IGFjY2VzcyhwYXRoLCBGX09LKTtcbiYjNDM7XHRcdEFTU0VSVF9FUShlcnIsIC0xLCBcJiMzNDtub19waW5cJiMzNDspO1xuJiM0MztcdFx0QVNTRVJUX0VRKGVycm5vLCBFTk9FTlQsIFwmIzM0O3Bpbl9hYnNlbnRcJiMzNDspO1xuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2NyZWF0ZV9tYXBcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRmZCA9IGJwZl9vYmpfZ2V0KHBhdGgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX0ZEKGZkLCBcJiMzNDtvcGVuX21hcFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0aWYgKEFTU0VSVF9PSyhicGZfbWFwX2dldF9pbmZvX2J5X2ZkKGZkLCBcdTAwMjZpbmZvLCBcdTAwMjZpbmZvX2xlbiksIFwmIzM0O21hcF9pbmZvXCYjMzQ7KSlcbiYjNDM7XHRcdEFTU0VSVF9FUShpbmZvLm1hcF9mbGFncywgdGVzdC1cdTAwM2VleHBlY3RlZF9mbGFncywgXCYjMzQ7bWFwX2ZsYWdzXCYjMzQ7KTtcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0dW5saW5rKHBhdGgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHRlc3RfYnBmdG9vbF9tYXBfZmxhZ3Modm9pZClcbiYjNDM7e1xuJiM0MztcdGNoYXIgZGlyW10gPSBcJiMzNDsvc3lzL2ZzL2JwZi9icGZ0b29sX2ZsYWdzX1hYWFhYWFwmIzM0OztcbiYjNDM7XHRjaGFyIHBhdGhbc2l6ZW9mKGRpcikgJiM0Mzsgc2l6ZW9mKFwmIzM0Oy9tYXBcJiMzNDspXTtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKG1rZHRlbXAoZGlyKSwgXCYjMzQ7Y3JlYXRlX3Bpbl9kaXJcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCYjMzQ7JXMvbWFwXCYjMzQ7LCBkaXIpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodGVzdHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QodGVzdHNbaV0ubmFtZSkpXG4mIzQzO1x0XHRcdHRlc3RfbWFwX2ZsYWdzKFx1MDAyNnRlc3RzW2ldLCBwYXRoKTtcbiYjNDM7XHR9XG4mIzQzO1x0QVNTRVJUX09LKHJtZGlyKGRpciksIFwmIzM0O3JlbW92ZV9waW5fZGlyXCYjMzQ7KTtcbiYjNDM7fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdG9vbGluZyAoYnBmdG9vbCkgYW5kIHNlbGZ0ZXN0cyB1bmRlciB0b29scy9icGYvYnBmdG9vbCBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLiBObyBrZXJuZWwtc3BhY2UgY29kZSAodm1saW51eCBvciBrZXJuZWwgbW9kdWxlcykgaXMgYWZmZWN0ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGFhOGEzZGYyYzE0NzBlYTAzNTlmOWZkMmZlMjAwMzY4MGI2NDQ0ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDAzOjAyOjAwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLWZlYXR1cmUucnN0IGIvdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLWZlYXR1cmUucnN0CmluZGV4IGM3ZjgzNzg5OGJjNzcuLjU5N2YyNDI2ZDI1NTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1mZWF0dXJlLnJzdAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtZmVhdHVyZS5yc3QKQEAgLTI4LDcgJiM0MzsyOCw3IEBAIEZFQVRVUkUgQ09NTUFORFMKIHwgKipicGZ0b29sKiogKipmZWF0dXJlIGhlbHAqKgogfAogfCAqQ09NUE9ORU5UKiA6PSB7ICoqa2VybmVsKiogfCAqKmRldioqICpOQU1FKiB9Ci18ICpHUk9VUCogOj0geyAqKnByb2dfdHlwZXMqKiB8ICoqbWFwX3R5cGVzKiogfCAqKmF0dGFjaF90eXBlcyoqIHwgKipsaW5rX3R5cGVzKiogfCAqKmhlbHBlcnMqKiB9CiYjNDM7fCAqR1JPVVAqIDo9IHsgKipwcm9nX3R5cGVzKiogfCAqKm1hcF90eXBlcyoqIHwgKiptYXBfY3JlYXRlX2ZsYWdzKiogfCAqKmF0dGFjaF90eXBlcyoqIHwgKipsaW5rX3R5cGVzKiogfCAqKmhlbHBlcnMqKiB9CiAKIERFU0NSSVBUSU9OCiA9PT09PT09PT09PQpAQCAtNjgsMTIgJiM0Mzs2OCwxNCBAQCBicGZ0b29sIGZlYXR1cmUgcHJvYmUgZGV2ICpOQU1FKiBbZnVsbF0gW21hY3JvcyBbcHJlZml4ICpQUkVGSVgqXV0KIAogYnBmdG9vbCBmZWF0dXJlIGxpc3RfYnVpbHRpbnMgKkdST1VQKgogICAgIExpc3QgaXRlbXMga25vd24gdG8gYnBmdG9vbC4gVGhlc2UgY2FuIGJlIEJQRiBwcm9ncmFtIHR5cGVzCi0gICAgKCoqcHJvZ190eXBlcyoqKSwgQlBGIG1hcCB0eXBlcyAoKiptYXBfdHlwZXMqKiksIGF0dGFjaCB0eXBlcwomIzQzOyAgICAoKipwcm9nX3R5cGVzKiopLCBCUEYgbWFwIHR5cGVzICgqKm1hcF90eXBlcyoqKSwgbWFwIGNyZWF0aW9uIGZsYWdzCiYjNDM7ICAgICgqKm1hcF9jcmVhdGVfZmxhZ3MqKiksIGF0dGFjaCB0eXBlcwogICAgICgqKmF0dGFjaF90eXBlcyoqKSwgbGluayB0eXBlcyAoKipsaW5rX3R5cGVzKiopLCBvciBCUEYgaGVscGVyIGZ1bmN0aW9ucwogICAgICgqKmhlbHBlcnMqKikuIFRoZSBjb21tYW5kIGRvZXMgbm90IHByb2JlIHRoZSBzeXN0ZW0sIGJ1dCBzaW1wbHkgbGlzdHMgdGhlCiAgICAgZWxlbWVudHMgdGhhdCBicGZ0b29sIGtub3dzIGZyb20gY29tcGlsYXRpb24gdGltZSwgYXMgcHJvdmlkZWQgZnJvbSBsaWJicGYKLSAgICAoZm9yIGFsbCBvYmplY3QgdHlwZXMpIG9yIGZyb20gdGhlIEJQRiBVQVBJIGhlYWRlciAobGlzdCBvZiBoZWxwZXJzKS4gVGhpcwotICAgIGNhbiBiZSB1c2VkIGluIHNjcmlwdHMgdG8gaXRlcmF0ZSBvdmVyIEJQRiB0eXBlcyBvciBoZWxwZXJzLgomIzQzOyAgICAoZm9yIGFsbCBvYmplY3QgdHlwZXMpIG9yIGZyb20gdGhlIEJQRiBVQVBJIGhlYWRlciAoaGVscGVycyBhbmQgbWFwIGNyZWF0aW9uCiYjNDM7ICAgIGZsYWdzKS4gVGhpcyBjYW4gYmUgdXNlZCBpbiBzY3JpcHRzIHRvIGl0ZXJhdGUgb3ZlciBCUEYgdHlwZXMsIGhlbHBlcnMsIG9yCiYjNDM7ICAgIHRoZSBzeW1ib2xpYyBmbGFncyBhY2NlcHRlZCBieSAqKm1hcCBjcmVhdGUqKi4KIAogYnBmdG9vbCBmZWF0dXJlIGhlbHAKICAgICBQcmludCBzaG9ydCBoZWxwIG1lc3NhZ2UuCmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtbWFwLnJzdCBiL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1tYXAucnN0CmluZGV4IDVkYWYzZGU1Yzc0NDYuLjVhNWMyNmY3ODljZDAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1tYXAucnN0CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1tYXAucnN0CkBAIC00OCw2ICYjNDM7NDgsNyBAQCBNQVAgQ09NTUFORFMKIHwgKkRBVEEqIDo9IHsgWyoqaGV4KipdICpCWVRFUyogfQogfCAqUFJPRyogOj0geyAqKmlkKiogKlBST0dfSUQqIHwgKipwaW5uZWQqKiAqRklMRSogfCAqKnRhZyoqICpQUk9HX1RBRyogfCAqKm5hbWUqKiAqUFJPR19OQU1FKiB9CiB8ICpWQUxVRSogOj0geyAqREFUQSogfCAqTUFQKiB8ICpQUk9HKiB9CiYjNDM7fCAqRkxBR1MqIDo9IHsgaW50ZWdlciB8ICoqQlBGX0ZfTkFNRVssQlBGX0ZfTkFNRS4uLl0qKiB9CiB8ICpVUERBVEVfRkxBR1MqIDo9IHsgKiphbnkqKiB8ICoqZXhpc3QqKiB8ICoqbm9leGlzdCoqIH0KIHwgKlRZUEUqIDo9IHsgKipoYXNoKiogfCAqKmFycmF5KiogfCAqKnByb2dfYXJyYXkqKiB8ICoqcGVyZl9ldmVudF9hcnJheSoqIHwgKipwZXJjcHVfaGFzaCoqCiB8ICAgICB8ICoqcGVyY3B1X2FycmF5KiogfCAqKnN0YWNrX3RyYWNlKiogfCAqKmNncm91cF9hcnJheSoqIHwgKipscnVfaGFzaCoqCkBAIC03Niw5ICYjNDM7NzcsMTYgQEAgYnBmdG9vbCBtYXAgeyBzaG93IHwgbGlzdCB9ICAgWypNQVAqXQogYnBmdG9vbCBtYXAgY3JlYXRlICpGSUxFKiB0eXBlICpUWVBFKiBrZXkgKktFWV9TSVpFKiB2YWx1ZSAqVkFMVUVfU0laRSogIGVudHJpZXMgKk1BWF9FTlRSSUVTKiBuYW1lICpOQU1FKiBbZmxhZ3MgKkZMQUdTKl0gW2lubmVyX21hcCAqTUFQKl0gW29mZmxvYWRfZGV2ICpOQU1FKl0KICAgICBDcmVhdGUgYSBuZXcgbWFwIHdpdGggZ2l2ZW4gcGFyYW1ldGVycyBhbmQgcGluIGl0IHRvICpicGZmcyogYXMgKkZJTEUqLgogCi0gICAgKkZMQUdTKiBzaG91bGQgYmUgYW4gaW50ZWdlciB3aGljaCBpcyB0aGUgY29tYmluYXRpb24gb2YgZGVzaXJlZCBmbGFncywKLSAgICBlLmcuIDEwMjQgZm9yICoqQlBGX0ZfTU1BUEFCTEUqKiAoc2VlIGJwZi5oIFVBUEkgaGVhZGVyIGZvciBleGlzdGluZwotICAgIGZsYWdzKS4KJiM0MzsgICAgKkZMQUdTKiBhY2NlcHRzIGFuIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIGNvbWJpbmluZyB0aGUgZGVzaXJlZCBmbGFncwomIzQzOyAgICAoZGVjaW1hbCwgaGV4YWRlY2ltYWwgd2l0aCBhICoqMHgqKiBwcmVmaXgsIG9yIG9jdGFsIHdpdGggYSAqKjAqKiBwcmVmaXgpLAomIzQzOyAgICBvciBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGZ1bGwsIGNhc2Utc2Vuc2l0aXZlIG1hcCBjcmVhdGlvbiBmbGFnIG5hbWVzCiYjNDM7ICAgIGZyb20gdGhlIGJwZi5oIFVBUEkgaGVhZGVyLiBGb3IgZXhhbXBsZSwgKioxMDI0KiosICoqMHg0MDAqKiwgYW5kCiYjNDM7ICAgICoqQlBGX0ZfTU1BUEFCTEUqKiBhcmUgZXF1aXZhbGVudC4gTXVsdGlwbGUgbmFtZXMgYXJlIGNvbWJpbmVkIHdpdGgKJiM0MzsgICAgYml0d2lzZSBPUiwgZm9yIGV4YW1wbGUgKipCUEZfRl9OT19QUkVBTExPQyxCUEZfRl9SRE9OTFlfUFJPRyoqLgomIzQzOyAgICBSZXBlYXRlZCBuYW1lcyBhcmUgYWxsb3dlZC4gRW1wdHkgbGlzdCBlbGVtZW50cywgYWJicmV2aWF0ZWQgbmFtZXMsIGFuZAomIzQzOyAgICBsaXN0cyBtaXhpbmcgbnVtYmVycyB3aXRoIG5hbWVzIGFyZSBub3QgYWNjZXB0ZWQuIFVzZSAqKjAqKiBmb3Igbm8gZmxhZ3MuCiYjNDM7ICAgIE51bWVyaWMgdmFsdWVzIGNhbiBpbmNsdWRlIGJpdHMgdW5rbm93biB0byBicGZ0b29sLiBUaGUga2VybmVsIGNoZWNrcwomIzQzOyAgICB3aGV0aGVyIHRoZSBmbGFncyBhcmUgdmFsaWQgZm9yIHRoZSByZXF1ZXN0ZWQgbWFwIHR5cGUuCiAKICAgICBUbyBjcmVhdGUgbWFwcyBvZiB0eXBlIGFycmF5LW9mLW1hcHMgb3IgaGFzaC1vZi1tYXBzLCB0aGUgKippbm5lcl9tYXAqKgogICAgIGtleXdvcmQgbXVzdCBiZSB1c2VkIHRvIHBhc3MgYW4gaW5uZXIgbWFwLiBUaGUga2VybmVsIG5lZWRzIGl0IHRvIGNvbGxlY3QKZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL2Jhc2gtY29tcGxldGlvbi9icGZ0b29sIGIvdG9vbHMvYnBmL2JwZnRvb2wvYmFzaC1jb21wbGV0aW9uL2JwZnRvb2wKaW5kZXggNzVjYmNiNTEyZWJhZS4uZWEzZjUyMWI2ZjA4OCAxMDA2NDQKLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvYmFzaC1jb21wbGV0aW9uL2JwZnRvb2wKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnBmL2JwZnRvb2wvYmFzaC1jb21wbGV0aW9uL2JwZnRvb2wKQEAgLTcxOCw2ICYjNDM7NzE4LDEwIEBAIF9icGZ0b29sKCkKICAgICAgICAgICAgICAgICAgICAgZXNhYwogICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgIGNyZWF0ZSkKJiM0MzsgICAgICAgICAgICAgICAgICAgICMgS2VlcCBhIGZsYWdzIGxpc3QgdG9nZXRoZXIgaWYgcmVhZGxpbmUgc3BsaXRzIGF0IGNvbW1hcy4KJiM0MzsgICAgICAgICAgICAgICAgICAgIGlmIFtbICRDT01QX1dPUkRCUkVBS1MgPT0gKiwqICZhbXA7JmFtcDsgKCAkY3VyID09ICwgfHwgJHByZXYgPT0gLCApIF1dOyB0aGVuCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgX2dldF9jb21wX3dvcmRzX2J5X3JlZiAtbiAsIGN1ciBwcmV2CiYjNDM7ICAgICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgICAgICBjYXNlICRwcmV2IGluCiAgICAgICAgICAgICAgICAgICAgICAgICAkY29tbWFuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZmlsZWRpcgpAQCAtNzI5LDcgJiM0Mzs3MzMsMjEgQEAgX2JwZnRvb2woKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTVBSRVBMWT0oICQoIGNvbXBnZW4gLVcgJiMzNDskQlBGVE9PTF9NQVBfQ1JFQVRFX1RZUEVTJiMzNDsgLS0gJiMzNDskY3VyJiMzNDsgKSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgICAgICAgICAgICAga2V5fHZhbHVlfGZsYWdzfGVudHJpZXMpCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvcHQgLW8gbm9zcGFjZQomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBmbGFncz0mIzM0OyQoYnBmdG9vbCBmZWF0dXJlIGxpc3RfYnVpbHRpbnMgbWFwX2NyZWF0ZV9mbGFncyAyJmd0Oy9kZXYvbnVsbCkmIzM0OwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBwcmVmaXg9IGZsYWcKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiBjb21tYSBpcyBub3QgYSB3b3JkIGJyZWFrLCBSZWFkbGluZSByZXBsYWNlcyB0aGUgd2hvbGUKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB3b3JkLCBzbyBwcmVzZXJ2ZSB0aGUgZmxhZ3MgYmVmb3JlIHRoZSBsYXN0IGNvbW1hLgomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBbWyAkY3VyID09ICosKiAmYW1wOyZhbXA7ICRDT01QX1dPUkRCUkVBS1MgIT0gKiwqIF1dOyB0aGVuCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg9JiMzNDske2N1ciUsKn0sJiMzNDsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZsYWcgaW4gJChjb21wZ2VuIC1XICYjMzQ7JGZsYWdzJiMzNDsgLS0gJiMzNDske2N1ciMjKix9JiMzNDspOyBkbwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09NUFJFUExZJiM0Mzs9KCAmIzM0OyR7cHJlZml4fSR7ZmxhZ30mIzM0OyApCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBrZXl8dmFsdWV8ZW50cmllcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lcl9tYXApCkBAIC0xMTkyLDcgJiM0MzsxMjEwLDcgQEAgX2JwZnRvb2woKQogICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgIGxpc3RfYnVpbHRpbnMpCiAgICAgICAgICAgICAgICAgICAgIFtbICRwcmV2ICE9ICYjMzQ7JGNvbW1hbmQmIzM0OyBdXSAmYW1wOyZhbXA7IHJldHVybiAwCi0gICAgICAgICAgICAgICAgICAgIENPTVBSRVBMWT0oICQoIGNvbXBnZW4gLVcgJiMzOTtwcm9nX3R5cGVzIG1hcF90eXBlcyBcCiYjNDM7ICAgICAgICAgICAgICAgICAgICBDT01QUkVQTFk9KCAkKCBjb21wZ2VuIC1XICYjMzk7cHJvZ190eXBlcyBtYXBfdHlwZXMgbWFwX2NyZWF0ZV9mbGFncyBcCiAgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2hfdHlwZXMgbGlua190eXBlcyBoZWxwZXJzJiMzOTsgLS0gJiMzNDskY3VyJiMzNDsgKSApCiAgICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgKikKZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuYyBiL3Rvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuYwppbmRleCAwZjYwNzBhMGM4ZTcxLi5iNTQxOWQ1YTY2MWE1IDEwMDY0NAotLS0gYS90b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jCkBAIC0xMjIwLDYgJiM0MzsxMjIwLDggQEAgc3RhdGljIGludCBkb19saXN0X2J1aWx0aW5zKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJZ2V0X25hbWUgPSAoY29uc3QgY2hhciAqKCopKHVuc2lnbmVkIGludCkpbGliYnBmX2JwZl9wcm9nX3R5cGVfc3RyOwogCX0gZWxzZSBpZiAoaXNfcHJlZml4KCphcmd2LCAmIzM0O21hcF90eXBlcyYjMzQ7KSkgewogCQlnZXRfbmFtZSA9IChjb25zdCBjaGFyICooKikodW5zaWduZWQgaW50KSlsaWJicGZfYnBmX21hcF90eXBlX3N0cjsKJiM0MzsJfSBlbHNlIGlmIChpc19wcmVmaXgoKmFyZ3YsICYjMzQ7bWFwX2NyZWF0ZV9mbGFncyYjMzQ7KSkgewomIzQzOwkJZ2V0X25hbWUgPSBtYXBfY3JlYXRlX2ZsYWdfbmFtZTsKIAl9IGVsc2UgaWYgKGlzX3ByZWZpeCgqYXJndiwgJiMzNDthdHRhY2hfdHlwZXMmIzM0OykpIHsKIAkJZ2V0X25hbWUgPSAoY29uc3QgY2hhciAqKCopKHVuc2lnbmVkIGludCkpbGliYnBmX2JwZl9hdHRhY2hfdHlwZV9zdHI7CiAJfSBlbHNlIGlmIChpc19wcmVmaXgoKmFyZ3YsICYjMzQ7bGlua190eXBlcyYjMzQ7KSkgewpAQCAtMTIyNyw3ICYjNDM7MTIyOSw3IEBAIHN0YXRpYyBpbnQgZG9fbGlzdF9idWlsdGlucyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJfSBlbHNlIGlmIChpc19wcmVmaXgoKmFyZ3YsICYjMzQ7aGVscGVycyYjMzQ7KSkgewogCQlnZXRfbmFtZSA9IGdldF9oZWxwZXJfbmFtZTsKIAl9IGVsc2UgewotCQlwX2VycigmIzM0O2V4cGVjdGVkICYjMzk7cHJvZ190eXBlcyYjMzk7LCAmIzM5O21hcF90eXBlcyYjMzk7LCAmIzM5O2F0dGFjaF90eXBlcyYjMzk7LCAmIzM5O2xpbmtfdHlwZXMmIzM5OyBvciAmIzM5O2hlbHBlcnMmIzM5OywgZ290OiAlcyYjMzQ7LCAqYXJndik7CiYjNDM7CQlwX2VycigmIzM0O2V4cGVjdGVkICYjMzk7cHJvZ190eXBlcyYjMzk7LCAmIzM5O21hcF90eXBlcyYjMzk7LCAmIzM5O21hcF9jcmVhdGVfZmxhZ3MmIzM5OywgJiMzOTthdHRhY2hfdHlwZXMmIzM5OywgJiMzOTtsaW5rX3R5cGVzJiMzOTsgb3IgJiMzOTtoZWxwZXJzJiMzOTssIGdvdDogJXMmIzM0OywgKmFyZ3YpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xMjY1LDcgJiM0MzsxMjY3LDggQEAgc3RhdGljIGludCBkb19oZWxwKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJJiMzNDsgICAgICAgJTEkcyAlMiRzIGhlbHBcbiYjMzQ7CiAJCSYjMzQ7XG4mIzM0OwogCQkmIzM0OyAgICAgICBDT01QT05FTlQgOj0geyBrZXJuZWwgfCBkZXYgTkFNRSB9XG4mIzM0OwotCQkmIzM0OyAgICAgICBHUk9VUCA6PSB7IHByb2dfdHlwZXMgfCBtYXBfdHlwZXMgfCBhdHRhY2hfdHlwZXMgfCBsaW5rX3R5cGVzIHwgaGVscGVycyB9XG4mIzM0OwomIzQzOwkJJiMzNDsgICAgICAgR1JPVVAgOj0geyBwcm9nX3R5cGVzIHwgbWFwX3R5cGVzIHwgbWFwX2NyZWF0ZV9mbGFncyB8XG4mIzM0OwomIzQzOwkJJiMzNDsgICAgICAgICAgICAgICAgICBhdHRhY2hfdHlwZXMgfCBsaW5rX3R5cGVzIHwgaGVscGVycyB9XG4mIzM0OwogCQkmIzM0OyAgICAgICAmIzM0OyBIRUxQX1NQRUNfT1BUSU9OUyAmIzM0OyB9XG4mIzM0OwogCQkmIzM0OyYjMzQ7LAogCQliaW5fbmFtZSwgYXJndlstMl0pOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvbWFpbi5oIGIvdG9vbHMvYnBmL2JwZnRvb2wvbWFpbi5oCmluZGV4IDkzMTVhMWRiMWY3YzIuLjNlMjg1NmM5ZjU5NWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL21haW4uaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9icGYvYnBmdG9vbC9tYWluLmgKQEAgLTE4MCw2ICYjNDM7MTgwLDcgQEAgaW50IGRvX3Rva2VuKGludCBhcmdjLCBjaGFyICoqYXJndikgX193ZWFrOwogaW50IHBhcnNlX3UzMl9hcmcoaW50ICphcmdjLCBjaGFyICoqKmFyZ3YsIF9fdTMyICp2YWwsIGNvbnN0IGNoYXIgKndoYXQpOwogaW50IHByb2dfcGFyc2VfZmQoaW50ICphcmdjLCBjaGFyICoqKmFyZ3YpOwogaW50IHByb2dfcGFyc2VfZmRzKGludCAqYXJnYywgY2hhciAqKiphcmd2LCBpbnQgKipmZHMpOwomIzQzO2NvbnN0IGNoYXIgKm1hcF9jcmVhdGVfZmxhZ19uYW1lKHVuc2lnbmVkIGludCBpZCk7CiBpbnQgbWFwX3BhcnNlX2ZkKGludCAqYXJnYywgY2hhciAqKiphcmd2LCBfX3UzMiBvcGVuX2ZsYWdzKTsKIGludCBtYXBfcGFyc2VfZmRzKGludCAqYXJnYywgY2hhciAqKiphcmd2LCBpbnQgKipmZHMsIF9fdTMyIG9wZW5fZmxhZ3MpOwogaW50IG1hcF9wYXJzZV9mZF9hbmRfaW5mbyhpbnQgKmFyZ2MsIGNoYXIgKioqYXJndiwgc3RydWN0IGJwZl9tYXBfaW5mbyAqaW5mbywKZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL21hcC5jIGIvdG9vbHMvYnBmL2JwZnRvb2wvbWFwLmMKaW5kZXggNjg0YThmYjcyNDE0Ni4uNDQ0NTAxNDI0N2Q2MiAxMDA2NDQKLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnBmL2JwZnRvb2wvbWFwLmMKQEAgLTEyNTAsNiAmIzQzOzEyNTAsODEgQEAgc3RhdGljIGludCBkb19waW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCXJldHVybiBlcnI7CiB9CiAKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHsKJiM0MzsJY29uc3QgY2hhciAqbmFtZTsKJiM0MzsJX191MzIgdmFsdWU7CiYjNDM7fSBtYXBfY3JlYXRlX2ZsYWdzW10gPSB7CiYjNDM7I2RlZmluZSBNQVBfQ1JFQVRFX0ZMQUcoZmxhZykgeyAjZmxhZywgZmxhZyB9CiYjNDM7CU1BUF9DUkVBVEVfRkxBRyhCUEZfRl9OT19QUkVBTExPQyksCiYjNDM7CU1BUF9DUkVBVEVfRkxBRyhCUEZfRl9OT19DT01NT05fTFJVKSwKJiM0MzsJTUFQX0NSRUFURV9GTEFHKEJQRl9GX05VTUFfTk9ERSksCiYjNDM7CU1BUF9DUkVBVEVfRkxBRyhCUEZfRl9SRE9OTFkpLAomIzQzOwlNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfV1JPTkxZKSwKJiM0MzsJTUFQX0NSRUFURV9GTEFHKEJQRl9GX1NUQUNLX0JVSUxEX0lEKSwKJiM0MzsJTUFQX0NSRUFURV9GTEFHKEJQRl9GX1pFUk9fU0VFRCksCiYjNDM7CU1BUF9DUkVBVEVfRkxBRyhCUEZfRl9SRE9OTFlfUFJPRyksCiYjNDM7CU1BUF9DUkVBVEVfRkxBRyhCUEZfRl9XUk9OTFlfUFJPRyksCiYjNDM7CU1BUF9DUkVBVEVfRkxBRyhCUEZfRl9DTE9ORSksCiYjNDM7CU1BUF9DUkVBVEVfRkxBRyhCUEZfRl9NTUFQQUJMRSksCiYjNDM7CU1BUF9DUkVBVEVfRkxBRyhCUEZfRl9QUkVTRVJWRV9FTEVNUyksCiYjNDM7CU1BUF9DUkVBVEVfRkxBRyhCUEZfRl9JTk5FUl9NQVApLAomIzQzOwlNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfTElOSyksCiYjNDM7CU1BUF9DUkVBVEVfRkxBRyhCUEZfRl9WVFlQRV9CVEZfT0JKX0ZEKSwKJiM0MzsJTUFQX0NSRUFURV9GTEFHKEJQRl9GX1RPS0VOX0ZEKSwKJiM0MzsJTUFQX0NSRUFURV9GTEFHKEJQRl9GX1NFR1ZfT05fRkFVTFQpLAomIzQzOwlNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfTk9fVVNFUl9DT05WKSwKJiM0MzsJTUFQX0NSRUFURV9GTEFHKEJQRl9GX1JCX09WRVJXUklURSksCiYjNDM7I3VuZGVmIE1BUF9DUkVBVEVfRkxBRwomIzQzO307CiYjNDM7CiYjNDM7Y29uc3QgY2hhciAqbWFwX2NyZWF0ZV9mbGFnX25hbWUodW5zaWduZWQgaW50IGlkKQomIzQzO3sKJiM0MzsJaWYgKGlkICZndDs9IEFSUkFZX1NJWkUobWFwX2NyZWF0ZV9mbGFncykpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcmV0dXJuIG1hcF9jcmVhdGVfZmxhZ3NbaWRdLm5hbWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGFyc2VfbWFwX2NyZWF0ZV9mbGFncyhjb25zdCBjaGFyICphcmcsIF9fdTMyICpmbGFncykKJiM0Mzt7CiYjNDM7CWNvbnN0IGNoYXIgKm5hbWUgPSBhcmcsICpjb21tYTsKJiM0MzsJbG9uZyBsb25nIHZhbHVlOwomIzQzOwlfX3UzMiBwYXJzZWQgPSAwOwomIzQzOwlzaXplX3QgbGVuLCBpOwomIzQzOwljaGFyICplbmQ7CiYjNDM7CiYjNDM7CS8qIEtlZXAgYmFzZS0wIG51bWVyaWMgaW5wdXQsIGluY2x1ZGluZyBiaXRzIHVua25vd24gdG8gdGhpcyBicGZ0b29sLiAqLwomIzQzOwlpZiAoc3RybmNtcChhcmcsICYjMzQ7QlBGX0ZfJiMzNDssIDYpKSB7CiYjNDM7CQllcnJubyA9IDA7CiYjNDM7CQl2YWx1ZSA9IHN0cnRvbGwoYXJnLCAmYW1wO2VuZCwgMCk7CiYjNDM7CQlpZiAoZXJybm8gfHwgZW5kID09IGFyZyB8fCAqZW5kIHx8IHZhbHVlICZsdDsgMCB8fCB2YWx1ZSAmZ3Q7IFVJTlQzMl9NQVgpCiYjNDM7CQkJZ290byBpbnZhbGlkOwomIzQzOwkJKmZsYWdzID0gdmFsdWU7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQljb21tYSA9IHN0cmNocihuYW1lLCAmIzM5OywmIzM5Oyk7CiYjNDM7CQlsZW4gPSBjb21tYSA/IChzaXplX3QpKGNvbW1hIC0gbmFtZSkgOiBzdHJsZW4obmFtZSk7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShtYXBfY3JlYXRlX2ZsYWdzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAoc3RybGVuKG1hcF9jcmVhdGVfZmxhZ3NbaV0ubmFtZSkgPT0gbGVuICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgIXN0cm5jbXAobmFtZSwgbWFwX2NyZWF0ZV9mbGFnc1tpXS5uYW1lLCBsZW4pKQomIzQzOwkJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCWlmIChpID09IEFSUkFZX1NJWkUobWFwX2NyZWF0ZV9mbGFncykpCiYjNDM7CQkJZ290byBpbnZhbGlkOwomIzQzOwkJcGFyc2VkIHw9IG1hcF9jcmVhdGVfZmxhZ3NbaV0udmFsdWU7CiYjNDM7CQlpZiAoY29tbWEpCiYjNDM7CQkJbmFtZSA9IGNvbW1hICYjNDM7IDE7CiYjNDM7CX0gd2hpbGUgKGNvbW1hKTsKJiM0MzsKJiM0MzsJKmZsYWdzID0gcGFyc2VkOwomIzQzOwlyZXR1cm4gMDsKJiM0MztpbnZhbGlkOgomIzQzOwlwX2VycigmIzM0O2NhbiYjMzk7dCBwYXJzZSAlcyBhcyBtYXAgY3JlYXRpb24gZmxhZ3MmIzM0OywgYXJnKTsKJiM0MzsJcmV0dXJuIC0xOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZG9fY3JlYXRlKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlMSUJCUEZfT1BUUyhicGZfbWFwX2NyZWF0ZV9vcHRzLCBhdHRyKTsKQEAgLTEzMDEsOSAmIzQzOzEzNzYsMTQgQEAgc3RhdGljIGludCBkb19jcmVhdGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQkgICYjMzQ7bWF4IGVudHJpZXMmIzM0OykpCiAJCQkJZ290byBleGl0OwogCQl9IGVsc2UgaWYgKGlzX3ByZWZpeCgqYXJndiwgJiMzNDtmbGFncyYjMzQ7KSkgewotCQkJaWYgKHBhcnNlX3UzMl9hcmcoJmFtcDthcmdjLCAmYW1wO2FyZ3YsICZhbXA7YXR0ci5tYXBfZmxhZ3MsCi0JCQkJCSAgJiMzNDtmbGFncyYjMzQ7KSkKJiM0MzsJCQlORVhUX0FSRygpOwomIzQzOwkJCWlmIChhdHRyLm1hcF9mbGFncykgewomIzQzOwkJCQlwX2VycigmIzM0O2ZsYWdzIGFscmVhZHkgc3BlY2lmaWVkJiMzNDspOwogCQkJCWdvdG8gZXhpdDsKJiM0MzsJCQl9CiYjNDM7CQkJaWYgKHBhcnNlX21hcF9jcmVhdGVfZmxhZ3MoKmFyZ3YsICZhbXA7YXR0ci5tYXBfZmxhZ3MpKQomIzQzOwkJCQlnb3RvIGV4aXQ7CiYjNDM7CQkJTkVYVF9BUkcoKTsKIAkJfSBlbHNlIGlmIChpc19wcmVmaXgoKmFyZ3YsICYjMzQ7ZGV2JiMzNDspKSB7CiAJCQlwX2luZm8oJiMzNDtXYXJuaW5nOiAmIzM5O2JwZnRvb2wgbWFwIGNyZWF0ZSBbLi4uXSBkZXYgJmx0O2lmbmFtZSZndDsmIzM5OyBzeW50YXggaXMgZGVwcmVjYXRlZC5cbiYjMzQ7CiAJCQkgICAgICAgJiMzNDtHb2luZyBmdXJ0aGVyLCBwbGVhc2UgdXNlICYjMzk7b2ZmbG9hZF9kZXYgJmx0O2lmbmFtZSZndDsmIzM5OyB0byByZXF1ZXN0IGhhcmR3YXJlIG9mZmxvYWQgZm9yIHRoZSBtYXAuJiMzNDspOwpAQCAtMTQ3NCw2ICYjNDM7MTU1NCw3IEBAIHN0YXRpYyBpbnQgZG9faGVscChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCSYjMzQ7ICAgICAgIERBVEEgOj0geyBbaGV4XSBCWVRFUyB9XG4mIzM0OwogCQkmIzM0OyAgICAgICAmIzM0OyBIRUxQX1NQRUNfUFJPR1JBTSAmIzM0O1xuJiMzNDsKIAkJJiMzNDsgICAgICAgVkFMVUUgOj0geyBEQVRBIHwgTUFQIHwgUFJPRyB9XG4mIzM0OwomIzQzOwkJJiMzNDsgICAgICAgRkxBR1MgOj0geyBpbnRlZ2VyIHwgQlBGX0ZfTkFNRVssQlBGX0ZfTkFNRS4uLl0gfVxuJiMzNDsKIAkJJiMzNDsgICAgICAgVVBEQVRFX0ZMQUdTIDo9IHsgYW55IHwgZXhpc3QgfCBub2V4aXN0IH1cbiYjMzQ7CiAJCSYjMzQ7ICAgICAgIFRZUEUgOj0geyBoYXNoIHwgYXJyYXkgfCBwcm9nX2FycmF5IHwgcGVyZl9ldmVudF9hcnJheSB8IHBlcmNwdV9oYXNoIHxcbiYjMzQ7CiAJCSYjMzQ7ICAgICAgICAgICAgICAgICBwZXJjcHVfYXJyYXkgfCBzdGFja190cmFjZSB8IGNncm91cF9hcnJheSB8IGxydV9oYXNoIHxcbiYjMzQ7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX21hcF9mbGFncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9tYXBfZmxhZ3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5kNjE3YjQzMjczYThlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9tYXBfZmxhZ3MuYwpAQCAtMCwwICYjNDM7MSwxMDAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZnRvb2xfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBtYXBfZmxhZ3NfdGVzdCB7CiYjNDM7CWNvbnN0IGNoYXIgKm5hbWU7CiYjNDM7CWNvbnN0IGNoYXIgKmZsYWdzOwomIzQzOwlfX3UzMiBleHBlY3RlZF9mbGFnczsKJiM0MzsJY29uc3QgY2hhciAqZXJyb3I7CiYjNDM7fSB0ZXN0c1tdID0gewomIzQzOwl7ICYjMzQ7emVybyYjMzQ7LCAmIzM0OzAmIzM0OywgMCB9LAomIzQzOwl7ICYjMzQ7ZGVjaW1hbCYjMzQ7LCAmIzM0OzEyOSYjMzQ7LCBCUEZfRl9OT19QUkVBTExPQyB8IEJQRl9GX1JET05MWV9QUk9HIH0sCiYjNDM7CXsgJiMzNDtoZXhhZGVjaW1hbCYjMzQ7LCAmIzM0OzB4ODEmIzM0OywgQlBGX0ZfTk9fUFJFQUxMT0MgfCBCUEZfRl9SRE9OTFlfUFJPRyB9LAomIzQzOwl7ICYjMzQ7b2N0YWwmIzM0OywgJiMzNDswMjAxJiMzNDssIEJQRl9GX05PX1BSRUFMTE9DIHwgQlBGX0ZfUkRPTkxZX1BST0cgfSwKJiM0MzsJeyAmIzM0O3Bvc2l0aXZlX3NpZ24mIzM0OywgJiMzNDsmIzQzOzEmIzM0OywgQlBGX0ZfTk9fUFJFQUxMT0MgfSwKJiM0MzsJeyAmIzM0O3NpbmdsZV9uYW1lJiMzNDssICYjMzQ7QlBGX0ZfTk9fUFJFQUxMT0MmIzM0OywgQlBGX0ZfTk9fUFJFQUxMT0MgfSwKJiM0MzsJeyAmIzM0O2NvbWJpbmVkX25hbWVzJiMzNDssICYjMzQ7QlBGX0ZfTk9fUFJFQUxMT0MsQlBGX0ZfUkRPTkxZX1BST0cmIzM0OywKJiM0MzsJICBCUEZfRl9OT19QUkVBTExPQyB8IEJQRl9GX1JET05MWV9QUk9HIH0sCiYjNDM7CXsgJiMzNDtyZXBlYXRlZF9uYW1lJiMzNDssICYjMzQ7QlBGX0ZfTk9fUFJFQUxMT0MsQlBGX0ZfTk9fUFJFQUxMT0MmIzM0OywgQlBGX0ZfTk9fUFJFQUxMT0MgfSwKJiM0MzsJeyAmIzM0O3Vua25vd25fbmFtZSYjMzQ7LCAmIzM0O0JQRl9GX05PVF9BX01BUF9GTEFHJiMzNDssIDAsICYjMzQ7Y2FuJiMzOTt0IHBhcnNlJiMzNDsgfSwKJiM0MzsJeyAmIzM0O290aGVyX2NvbW1hbmRfZmxhZyYjMzQ7LCAmIzM0O0JQRl9GX1BBVEhfRkQmIzM0OywgMCwgJiMzNDtjYW4mIzM5O3QgcGFyc2UmIzM0OyB9LAomIzQzOwl7ICYjMzQ7dXBkYXRlX2ZsYWcmIzM0OywgJiMzNDtCUEZfRl9MT0NLJiMzNDssIDAsICYjMzQ7Y2FuJiMzOTt0IHBhcnNlJiMzNDsgfSwKJiM0MzsJeyAmIzM0O2FiYnJldmlhdGVkX25hbWUmIzM0OywgJiMzNDtCUEZfRl9OT19QUkUmIzM0OywgMCwgJiMzNDtjYW4mIzM5O3QgcGFyc2UmIzM0OyB9LAomIzQzOwl7ICYjMzQ7bG93ZXJjYXNlX25hbWUmIzM0OywgJiMzNDticGZfZl9ub19wcmVhbGxvYyYjMzQ7LCAwLCAmIzM0O2NhbiYjMzk7dCBwYXJzZSYjMzQ7IH0sCiYjNDM7CXsgJiMzNDtlbXB0eSYjMzQ7LCAmIzM0OyYjMzQ7LCAwLCAmIzM0O2NhbiYjMzk7dCBwYXJzZSYjMzQ7IH0sCiYjNDM7CXsgJiMzNDt3aGl0ZXNwYWNlJiMzNDssICYjMzQ7ICYjMzQ7LCAwLCAmIzM0O2NhbiYjMzk7dCBwYXJzZSYjMzQ7IH0sCiYjNDM7CXsgJiMzNDtlbXB0eV9saXN0JiMzNDssICYjMzQ7LCYjMzQ7LCAwLCAmIzM0O2NhbiYjMzk7dCBwYXJzZSYjMzQ7IH0sCiYjNDM7CXsgJiMzNDtsZWFkaW5nX2NvbW1hJiMzNDssICYjMzQ7LEJQRl9GX05PX1BSRUFMTE9DJiMzNDssIDAsICYjMzQ7Y2FuJiMzOTt0IHBhcnNlJiMzNDsgfSwKJiM0MzsJeyAmIzM0O3RyYWlsaW5nX2NvbW1hJiMzNDssICYjMzQ7QlBGX0ZfTk9fUFJFQUxMT0MsJiMzNDssIDAsICYjMzQ7Y2FuJiMzOTt0IHBhcnNlJiMzNDsgfSwKJiM0MzsJeyAmIzM0O2VtcHR5X2VsZW1lbnQmIzM0OywgJiMzNDtCUEZfRl9OT19QUkVBTExPQywsQlBGX0ZfUkRPTkxZX1BST0cmIzM0OywgMCwgJiMzNDtjYW4mIzM5O3QgcGFyc2UmIzM0OyB9LAomIzQzOwl7ICYjMzQ7bnVtYmVyX3RoZW5fbmFtZSYjMzQ7LCAmIzM0OzEsQlBGX0ZfUkRPTkxZX1BST0cmIzM0OywgMCwgJiMzNDtjYW4mIzM5O3QgcGFyc2UmIzM0OyB9LAomIzQzOwl7ICYjMzQ7bmFtZV90aGVuX251bWJlciYjMzQ7LCAmIzM0O0JQRl9GX05PX1BSRUFMTE9DLDEyOCYjMzQ7LCAwLCAmIzM0O2NhbiYjMzk7dCBwYXJzZSYjMzQ7IH0sCiYjNDM7CXsgJiMzNDtudW1lcmljX2xpc3QmIzM0OywgJiMzNDsxLDEyOCYjMzQ7LCAwLCAmIzM0O2NhbiYjMzk7dCBwYXJzZSYjMzQ7IH0sCiYjNDM7CXsgJiMzNDt3aGl0ZXNwYWNlX2luX2xpc3QmIzM0OywgJiMzNDtCUEZfRl9OT19QUkVBTExPQywgQlBGX0ZfUkRPTkxZX1BST0cmIzM0OywgMCwgJiMzNDtjYW4mIzM5O3QgcGFyc2UmIzM0OyB9LAomIzQzOwl7ICYjMzQ7b3ZlcmZsb3dfdTMyJiMzNDssICYjMzQ7NDI5NDk2NzI5NiYjMzQ7LCAwLCAmIzM0O2NhbiYjMzk7dCBwYXJzZSYjMzQ7IH0sCiYjNDM7CXsgJiMzNDtvdmVyZmxvd19oZXgmIzM0OywgJiMzNDsweDEwMDAwMDAwMCYjMzQ7LCAwLCAmIzM0O2NhbiYjMzk7dCBwYXJzZSYjMzQ7IH0sCiYjNDM7CXsgJiMzNDtvdmVyZmxvd191NjQmIzM0OywgJiMzNDsxODQ0Njc0NDA3MzcwOTU1MTYxNiYjMzQ7LCAwLCAmIzM0O2NhbiYjMzk7dCBwYXJzZSYjMzQ7IH0sCiYjNDM7CXsgJiMzNDtuZWdhdGl2ZSYjMzQ7LCAmIzM0Oy0xJiMzNDssIDAsICYjMzQ7Y2FuJiMzOTt0IHBhcnNlJiMzNDsgfSwKJiM0MzsJLyogTnVtZXJpYyBiaXRzIHVua25vd24gdG8gYnBmdG9vbCBtdXN0IHN0aWxsIHJlYWNoIHRoZSBrZXJuZWwuICovCiYjNDM7CXsgJiMzNDthbGxfYml0cyYjMzQ7LCAmIzM0OzB4ZmZmZmZmZmYmIzM0OywgMCwgJiMzNDttYXAgY3JlYXRlIGZhaWxlZCYjMzQ7IH0sCiYjNDM7CS8qIFRoZSBrZXJuZWwgdmFsaWRhdGVzIGNvbWJpbmF0aW9ucyBvZiBrbm93biBtYXAgY3JlYXRpb24gZmxhZ3MuICovCiYjNDM7CXsgJiMzNDtpbnZhbGlkX2NvbWJpbmF0aW9uJiMzNDssICYjMzQ7QlBGX0ZfUkRPTkxZLEJQRl9GX1dST05MWSYjMzQ7LCAwLCAmIzM0O21hcCBjcmVhdGUgZmFpbGVkJiMzNDsgfSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfbWFwX2ZsYWdzKGNvbnN0IHN0cnVjdCBtYXBfZmxhZ3NfdGVzdCAqdGVzdCwgY29uc3QgY2hhciAqcGF0aCkKJiM0Mzt7CiYjNDM7CWNoYXIgY21kW01BWF9CUEZUT09MX0NNRF9MRU5dLCBvdXRwdXRbMTAyNF0gPSB7fTsKJiM0MzsJc3RydWN0IGJwZl9tYXBfaW5mbyBpbmZvID0ge307CiYjNDM7CV9fdTMyIGluZm9fbGVuID0gc2l6ZW9mKGluZm8pOwomIzQzOwlpbnQgZmQsIGVycjsKJiM0MzsKJiM0MzsJLyogTGV0IHRoZSBmbGFncyBwYXJzZXIgaGFuZGxlIG5lZ2F0aXZlIG51bWJlcnMgaW5zdGVhZCBvZiBnZXRvcHQoKS4gKi8KJiM0MzsJZXJyID0gc25wcmludGYoY21kLCBzaXplb2YoY21kKSwKJiM0MzsJCSAgICAgICAmIzM0Oy0tIG1hcCBjcmVhdGUgJXMgdHlwZSBoYXNoIGtleSA0IHZhbHVlIDQgZW50cmllcyAxIG5hbWUgZmxhZ3NfdGVzdCBmbGFncyAmIzM5OyVzJiMzOTsgMiZndDsmYW1wOzEmIzM0OywKJiM0MzsJCSAgICAgICBwYXRoLCB0ZXN0LSZndDtmbGFncyk7CiYjNDM7CWlmICghQVNTRVJUX0dUKGVyciwgMCwgJiMzNDtmb3JtYXRfY29tbWFuZCYjMzQ7KSB8fAomIzQzOwkgICAgIUFTU0VSVF9MVChlcnIsIHNpemVvZihjbWQpLCAmIzM0O2NvbW1hbmRfbGVuZ3RoJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwllcnIgPSBnZXRfYnBmdG9vbF9jb21tYW5kX291dHB1dChjbWQsIG91dHB1dCwgc2l6ZW9mKG91dHB1dCkpOwomIzQzOwlpZiAodGVzdC0mZ3Q7ZXJyb3IpIHsKJiM0MzsJCUFTU0VSVF9ORVEoZXJyLCAwLCAmIzM0O3JlamVjdF9mbGFncyYjMzQ7KTsKJiM0MzsJCUFTU0VSVF9IQVNfU1VCU1RSKG91dHB1dCwgdGVzdC0mZ3Q7ZXJyb3IsICYjMzQ7ZXJyb3JfbWVzc2FnZSYjMzQ7KTsKJiM0MzsJCWVyciA9IGFjY2VzcyhwYXRoLCBGX09LKTsKJiM0MzsJCUFTU0VSVF9FUShlcnIsIC0xLCAmIzM0O25vX3BpbiYjMzQ7KTsKJiM0MzsJCUFTU0VSVF9FUShlcnJubywgRU5PRU5ULCAmIzM0O3Bpbl9hYnNlbnQmIzM0Oyk7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2NyZWF0ZV9tYXAmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWZkID0gYnBmX29ial9nZXQocGF0aCk7CiYjNDM7CWlmICghQVNTRVJUX09LX0ZEKGZkLCAmIzM0O29wZW5fbWFwJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlpZiAoQVNTRVJUX09LKGJwZl9tYXBfZ2V0X2luZm9fYnlfZmQoZmQsICZhbXA7aW5mbywgJmFtcDtpbmZvX2xlbiksICYjMzQ7bWFwX2luZm8mIzM0OykpCiYjNDM7CQlBU1NFUlRfRVEoaW5mby5tYXBfZmxhZ3MsIHRlc3QtJmd0O2V4cGVjdGVkX2ZsYWdzLCAmIzM0O21hcF9mbGFncyYjMzQ7KTsKJiM0MzsJY2xvc2UoZmQpOwomIzQzO2NsZWFudXA6CiYjNDM7CXVubGluayhwYXRoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X2JwZnRvb2xfbWFwX2ZsYWdzKHZvaWQpCiYjNDM7ewomIzQzOwljaGFyIGRpcltdID0gJiMzNDsvc3lzL2ZzL2JwZi9icGZ0b29sX2ZsYWdzX1hYWFhYWCYjMzQ7OwomIzQzOwljaGFyIHBhdGhbc2l6ZW9mKGRpcikgJiM0Mzsgc2l6ZW9mKCYjMzQ7L21hcCYjMzQ7KV07CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIobWtkdGVtcChkaXIpLCAmIzM0O2NyZWF0ZV9waW5fZGlyJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICYjMzQ7JXMvbWFwJiMzNDssIGRpcik7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHRlc3RzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KHRlc3RzW2ldLm5hbWUpKQomIzQzOwkJCXRlc3RfbWFwX2ZsYWdzKCZhbXA7dGVzdHNbaV0sIHBhdGgpOwomIzQzOwl9CiYjNDM7CUFTU0VSVF9PSyhybWRpcihkaXIpLCAmIzM0O3JlbW92ZV9waW5fZGlyJiMzNDspOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDM6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg5MQoJCQkJCQkJb3V0cHV0OiA4NgoJCQkJCQkJdGhvdWdodHM6IDY1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBObyBGdXp6aW5nIE5lZWRlZCBIZXJlKioKCk9rYXksIHNvIHRoZSB0YXNrIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBUaW1lIHRvIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gc2VlIHdoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gVGhlIGRpZmYgdG91Y2hlczogYHRvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1mZWF0dXJlLnJzdGAsIGB0b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtbWFwLnJzdGAsIGB0b29scy9icGYvYnBmdG9vbC9iYXNoLWNvbXBsZXRpb24vYnBmdG9vbGAsIGB0b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmNgLCBgdG9vbHMvYnBmL2JwZnRvb2wvbWFpbi5oYCwgYHRvb2xzL2JwZi9icGZ0b29sL21hcC5jYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX21hcF9mbGFncy5jYC4KCk5vdywgbGV0JiMzOTtzIGNvbnN1bHQgdGhlIHJ1bGVzLiBUaGUgbmVnYXRpdmUgY3JpdGVyaWEgYXJlIG15IG1haW4gZm9jdXMgaGVyZS4gSXQmIzM5O3Mgb25seSB3b3J0aCAqbm90KiBmdXp6aW5nIGlmICphbGwqIHRoZSBtb2RpZmljYXRpb25zIGZhbGwgaW50byBzcGVjaWZpYyBjYXRlZ29yaWVzLCB3aGljaCwgZnJvbSB0aGUgcnVsZXMsIGJvaWwgZG93biB0byBub24ta2VybmVsIGNvZGU6IGRvY3VtZW50YXRpb24sIHVzZXItc3BhY2UgdG9vbHMsIHNlbGYtdGVzdHMsIGFuZCB0aGUgbGlrZS4gRXNzZW50aWFsbHksIGFueXRoaW5nIHRoYXQgZG9lc24mIzM5O3QgZGlyZWN0bHkgaW1wYWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzIGlzIGEgbm8tZ28gZm9yIGZ1enppbmcuCgpMb29raW5nIGF0IHRoZXNlIGZpbGVzLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXI6IHRoZXkmIzM5O3JlIGFsbCBpbiBgdG9vbHMvYnBmL2JwZnRvb2wvYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiBUaGV5JiMzOTtyZSB1c2VyLXNwYWNlIHRvb2xpbmcgYW5kIHNlbGYtdGVzdHMuICpOb25lKiBvZiB0aGVtIHRvdWNoIGtlcm5lbCBzb3VyY2UgY29kZS4gTm8gZHJpdmVycywgbm8gY29yZSBrZXJuZWwgY29kZSwgbm8gbW9kdWxlcy4KClNvLCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzLCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayBvZiB0aGUgZmlsZSBsaXN0IGFnYWluLiBZZXAsIG5vdGhpbmcgZXZlbiByZW1vdGVseSBjbG9zZSB0byB0aGUga2VybmVsIHByb3Blci4gSXQmIzM5O3MgYWxsIHVuZGVyIGB0b29scy9gLgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQuIFRpbWUgdG8gY2FsbCBpdCBpbiBhbmQgbWFyayB0aGlzIGFzIG5vdCByZXF1aXJpbmcgZnV6emluZy4gTm8gbmVlZCB0byB3YXN0ZSBjeWNsZXMgb24gdXNlci1zcGFjZSB1dGlsaXRpZXMgaW4gdGhpcyBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSB0b29saW5nIChicGZ0b29sKSBhbmQgc2VsZnRlc3RzIHVuZGVyIHRvb2xzL2JwZi9icGZ0b29sIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYuIE5vIGtlcm5lbC1zcGFjZSBjb2RlICh2bWxpbnV4IG9yIGtlcm5lbCBtb2R1bGVzKSBpcyBhZmZlY3RlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdG9vbGluZyAoYnBmdG9vbCkgYW5kIHNlbGZ0ZXN0cyB1bmRlciB0b29scy9icGYvYnBmdG9vbCBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLiBObyBrZXJuZWwtc3BhY2UgY29kZSAodm1saW51eCBvciBrZXJuZWwgbW9kdWxlcykgaXMgYWZmZWN0ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAzOjAyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMzowMjowMS40NTM3NTM4ODZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDUzMjg1MjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSB0b29saW5nIChicGZ0b29sKSBhbmQgc2VsZnRlc3RzIHVuZGVyIHRvb2xzL2JwZi9icGZ0b29sIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYuIE5vIGtlcm5lbC1zcGFjZSBjb2RlICh2bWxpbnV4IG9yIGtlcm5lbCBtb2R1bGVzKSBpcyBhZmZlY3RlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAyOjAxLjQ1Mzc1OTIwNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAzMDE5NzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMGFhOGEzZGYyYzE0NzBlYTAzNTlmOWZkMmZlMjAwMzY4MGI2NDQ0ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCAxMSAwMzowMjowMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtZmVhdHVyZS5yc3QgYi90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtZmVhdHVyZS5yc3RcXG5pbmRleCBjN2Y4Mzc4OThiYzc3Li41OTdmMjQyNmQyNTU1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1mZWF0dXJlLnJzdFxcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1mZWF0dXJlLnJzdFxcbkBAIC0yOCw3ICsyOCw3IEBAIEZFQVRVUkUgQ09NTUFORFNcXG4gfCAqKmJwZnRvb2wqKiAqKmZlYXR1cmUgaGVscCoqXFxuIHxcXG4gfCAqQ09NUE9ORU5UKiA6PSB7ICoqa2VybmVsKiogfCAqKmRldioqICpOQU1FKiB9XFxuLXwgKkdST1VQKiA6PSB7ICoqcHJvZ190eXBlcyoqIHwgKiptYXBfdHlwZXMqKiB8ICoqYXR0YWNoX3R5cGVzKiogfCAqKmxpbmtfdHlwZXMqKiB8ICoqaGVscGVycyoqIH1cXG4rfCAqR1JPVVAqIDo9IHsgKipwcm9nX3R5cGVzKiogfCAqKm1hcF90eXBlcyoqIHwgKiptYXBfY3JlYXRlX2ZsYWdzKiogfCAqKmF0dGFjaF90eXBlcyoqIHwgKipsaW5rX3R5cGVzKiogfCAqKmhlbHBlcnMqKiB9XFxuIFxcbiBERVNDUklQVElPTlxcbiA9PT09PT09PT09PVxcbkBAIC02OCwxMiArNjgsMTQgQEAgYnBmdG9vbCBmZWF0dXJlIHByb2JlIGRldiAqTkFNRSogW2Z1bGxdIFttYWNyb3MgW3ByZWZpeCAqUFJFRklYKl1dXFxuIFxcbiBicGZ0b29sIGZlYXR1cmUgbGlzdF9idWlsdGlucyAqR1JPVVAqXFxuICAgICBMaXN0IGl0ZW1zIGtub3duIHRvIGJwZnRvb2wuIFRoZXNlIGNhbiBiZSBCUEYgcHJvZ3JhbSB0eXBlc1xcbi0gICAgKCoqcHJvZ190eXBlcyoqKSwgQlBGIG1hcCB0eXBlcyAoKiptYXBfdHlwZXMqKiksIGF0dGFjaCB0eXBlc1xcbisgICAgKCoqcHJvZ190eXBlcyoqKSwgQlBGIG1hcCB0eXBlcyAoKiptYXBfdHlwZXMqKiksIG1hcCBjcmVhdGlvbiBmbGFnc1xcbisgICAgKCoqbWFwX2NyZWF0ZV9mbGFncyoqKSwgYXR0YWNoIHR5cGVzXFxuICAgICAoKiphdHRhY2hfdHlwZXMqKiksIGxpbmsgdHlwZXMgKCoqbGlua190eXBlcyoqKSwgb3IgQlBGIGhlbHBlciBmdW5jdGlvbnNcXG4gICAgICgqKmhlbHBlcnMqKikuIFRoZSBjb21tYW5kIGRvZXMgbm90IHByb2JlIHRoZSBzeXN0ZW0sIGJ1dCBzaW1wbHkgbGlzdHMgdGhlXFxuICAgICBlbGVtZW50cyB0aGF0IGJwZnRvb2wga25vd3MgZnJvbSBjb21waWxhdGlvbiB0aW1lLCBhcyBwcm92aWRlZCBmcm9tIGxpYmJwZlxcbi0gICAgKGZvciBhbGwgb2JqZWN0IHR5cGVzKSBvciBmcm9tIHRoZSBCUEYgVUFQSSBoZWFkZXIgKGxpc3Qgb2YgaGVscGVycykuIFRoaXNcXG4tICAgIGNhbiBiZSB1c2VkIGluIHNjcmlwdHMgdG8gaXRlcmF0ZSBvdmVyIEJQRiB0eXBlcyBvciBoZWxwZXJzLlxcbisgICAgKGZvciBhbGwgb2JqZWN0IHR5cGVzKSBvciBmcm9tIHRoZSBCUEYgVUFQSSBoZWFkZXIgKGhlbHBlcnMgYW5kIG1hcCBjcmVhdGlvblxcbisgICAgZmxhZ3MpLiBUaGlzIGNhbiBiZSB1c2VkIGluIHNjcmlwdHMgdG8gaXRlcmF0ZSBvdmVyIEJQRiB0eXBlcywgaGVscGVycywgb3JcXG4rICAgIHRoZSBzeW1ib2xpYyBmbGFncyBhY2NlcHRlZCBieSAqKm1hcCBjcmVhdGUqKi5cXG4gXFxuIGJwZnRvb2wgZmVhdHVyZSBoZWxwXFxuICAgICBQcmludCBzaG9ydCBoZWxwIG1lc3NhZ2UuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1tYXAucnN0IGIvdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLW1hcC5yc3RcXG5pbmRleCA1ZGFmM2RlNWM3NDQ2Li41YTVjMjZmNzg5Y2QwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1tYXAucnN0XFxuKysrIGIvdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLW1hcC5yc3RcXG5AQCAtNDgsNiArNDgsNyBAQCBNQVAgQ09NTUFORFNcXG4gfCAqREFUQSogOj0geyBbKipoZXgqKl0gKkJZVEVTKiB9XFxuIHwgKlBST0cqIDo9IHsgKippZCoqICpQUk9HX0lEKiB8ICoqcGlubmVkKiogKkZJTEUqIHwgKip0YWcqKiAqUFJPR19UQUcqIHwgKipuYW1lKiogKlBST0dfTkFNRSogfVxcbiB8ICpWQUxVRSogOj0geyAqREFUQSogfCAqTUFQKiB8ICpQUk9HKiB9XFxuK3wgKkZMQUdTKiA6PSB7IGludGVnZXIgfCAqKkJQRl9GX05BTUVbLEJQRl9GX05BTUUuLi5dKiogfVxcbiB8ICpVUERBVEVfRkxBR1MqIDo9IHsgKiphbnkqKiB8ICoqZXhpc3QqKiB8ICoqbm9leGlzdCoqIH1cXG4gfCAqVFlQRSogOj0geyAqKmhhc2gqKiB8ICoqYXJyYXkqKiB8ICoqcHJvZ19hcnJheSoqIHwgKipwZXJmX2V2ZW50X2FycmF5KiogfCAqKnBlcmNwdV9oYXNoKipcXG4gfCAgICAgfCAqKnBlcmNwdV9hcnJheSoqIHwgKipzdGFja190cmFjZSoqIHwgKipjZ3JvdXBfYXJyYXkqKiB8ICoqbHJ1X2hhc2gqKlxcbkBAIC03Niw5ICs3NywxNiBAQCBicGZ0b29sIG1hcCB7IHNob3cgfCBsaXN0IH0gICBbKk1BUCpdXFxuIGJwZnRvb2wgbWFwIGNyZWF0ZSAqRklMRSogdHlwZSAqVFlQRSoga2V5ICpLRVlfU0laRSogdmFsdWUgKlZBTFVFX1NJWkUqICBlbnRyaWVzICpNQVhfRU5UUklFUyogbmFtZSAqTkFNRSogW2ZsYWdzICpGTEFHUypdIFtpbm5lcl9tYXAgKk1BUCpdIFtvZmZsb2FkX2RldiAqTkFNRSpdXFxuICAgICBDcmVhdGUgYSBuZXcgbWFwIHdpdGggZ2l2ZW4gcGFyYW1ldGVycyBhbmQgcGluIGl0IHRvICpicGZmcyogYXMgKkZJTEUqLlxcbiBcXG4tICAgICpGTEFHUyogc2hvdWxkIGJlIGFuIGludGVnZXIgd2hpY2ggaXMgdGhlIGNvbWJpbmF0aW9uIG9mIGRlc2lyZWQgZmxhZ3MsXFxuLSAgICBlLmcuIDEwMjQgZm9yICoqQlBGX0ZfTU1BUEFCTEUqKiAoc2VlIGJwZi5oIFVBUEkgaGVhZGVyIGZvciBleGlzdGluZ1xcbi0gICAgZmxhZ3MpLlxcbisgICAgKkZMQUdTKiBhY2NlcHRzIGFuIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIGNvbWJpbmluZyB0aGUgZGVzaXJlZCBmbGFnc1xcbisgICAgKGRlY2ltYWwsIGhleGFkZWNpbWFsIHdpdGggYSAqKjB4KiogcHJlZml4LCBvciBvY3RhbCB3aXRoIGEgKiowKiogcHJlZml4KSxcXG4rICAgIG9yIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZnVsbCwgY2FzZS1zZW5zaXRpdmUgbWFwIGNyZWF0aW9uIGZsYWcgbmFtZXNcXG4rICAgIGZyb20gdGhlIGJwZi5oIFVBUEkgaGVhZGVyLiBGb3IgZXhhbXBsZSwgKioxMDI0KiosICoqMHg0MDAqKiwgYW5kXFxuKyAgICAqKkJQRl9GX01NQVBBQkxFKiogYXJlIGVxdWl2YWxlbnQuIE11bHRpcGxlIG5hbWVzIGFyZSBjb21iaW5lZCB3aXRoXFxuKyAgICBiaXR3aXNlIE9SLCBmb3IgZXhhbXBsZSAqKkJQRl9GX05PX1BSRUFMTE9DLEJQRl9GX1JET05MWV9QUk9HKiouXFxuKyAgICBSZXBlYXRlZCBuYW1lcyBhcmUgYWxsb3dlZC4gRW1wdHkgbGlzdCBlbGVtZW50cywgYWJicmV2aWF0ZWQgbmFtZXMsIGFuZFxcbisgICAgbGlzdHMgbWl4aW5nIG51bWJlcnMgd2l0aCBuYW1lcyBhcmUgbm90IGFjY2VwdGVkLiBVc2UgKiowKiogZm9yIG5vIGZsYWdzLlxcbisgICAgTnVtZXJpYyB2YWx1ZXMgY2FuIGluY2x1ZGUgYml0cyB1bmtub3duIHRvIGJwZnRvb2wuIFRoZSBrZXJuZWwgY2hlY2tzXFxuKyAgICB3aGV0aGVyIHRoZSBmbGFncyBhcmUgdmFsaWQgZm9yIHRoZSByZXF1ZXN0ZWQgbWFwIHR5cGUuXFxuIFxcbiAgICAgVG8gY3JlYXRlIG1hcHMgb2YgdHlwZSBhcnJheS1vZi1tYXBzIG9yIGhhc2gtb2YtbWFwcywgdGhlICoqaW5uZXJfbWFwKipcXG4gICAgIGtleXdvcmQgbXVzdCBiZSB1c2VkIHRvIHBhc3MgYW4gaW5uZXIgbWFwLiBUaGUga2VybmVsIG5lZWRzIGl0IHRvIGNvbGxlY3RcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvYmFzaC1jb21wbGV0aW9uL2JwZnRvb2wgYi90b29scy9icGYvYnBmdG9vbC9iYXNoLWNvbXBsZXRpb24vYnBmdG9vbFxcbmluZGV4IDc1Y2JjYjUxMmViYWUuLmVhM2Y1MjFiNmYwODggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvYmFzaC1jb21wbGV0aW9uL2JwZnRvb2xcXG4rKysgYi90b29scy9icGYvYnBmdG9vbC9iYXNoLWNvbXBsZXRpb24vYnBmdG9vbFxcbkBAIC03MTgsNiArNzE4LDEwIEBAIF9icGZ0b29sKClcXG4gICAgICAgICAgICAgICAgICAgICBlc2FjXFxuICAgICAgICAgICAgICAgICAgICAgOztcXG4gICAgICAgICAgICAgICAgIGNyZWF0ZSlcXG4rICAgICAgICAgICAgICAgICAgICAjIEtlZXAgYSBmbGFncyBsaXN0IHRvZ2V0aGVyIGlmIHJlYWRsaW5lIHNwbGl0cyBhdCBjb21tYXMuXFxuKyAgICAgICAgICAgICAgICAgICAgaWYgW1sgJENPTVBfV09SREJSRUFLUyA9PSAqLCogXFx1MDAyNlxcdTAwMjYgKCAkY3VyID09ICwgfHwgJHByZXYgPT0gLCApIF1dOyB0aGVuXFxuKyAgICAgICAgICAgICAgICAgICAgICAgIF9nZXRfY29tcF93b3Jkc19ieV9yZWYgLW4gLCBjdXIgcHJldlxcbisgICAgICAgICAgICAgICAgICAgIGZpXFxuICAgICAgICAgICAgICAgICAgICAgY2FzZSAkcHJldiBpblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAkY29tbWFuZClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9maWxlZGlyXFxuQEAgLTcyOSw3ICs3MzMsMjEgQEAgX2JwZnRvb2woKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09NUFJFUExZPSggJCggY29tcGdlbiAtVyBcXFwiJEJQRlRPT0xfTUFQX0NSRUFURV9UWVBFU1xcXCIgLS0gXFxcIiRjdXJcXFwiICkgKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDBcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7XFxuLSAgICAgICAgICAgICAgICAgICAgICAgIGtleXx2YWx1ZXxmbGFnc3xlbnRyaWVzKVxcbisgICAgICAgICAgICAgICAgICAgICAgICBmbGFncylcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvcHQgLW8gbm9zcGFjZVxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgZmxhZ3M9XFxcIiQoYnBmdG9vbCBmZWF0dXJlIGxpc3RfYnVpbHRpbnMgbWFwX2NyZWF0ZV9mbGFncyAyXFx1MDAzZS9kZXYvbnVsbClcXFwiXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBwcmVmaXg9IGZsYWdcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgY29tbWEgaXMgbm90IGEgd29yZCBicmVhaywgUmVhZGxpbmUgcmVwbGFjZXMgdGhlIHdob2xlXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHdvcmQsIHNvIHByZXNlcnZlIHRoZSBmbGFncyBiZWZvcmUgdGhlIGxhc3QgY29tbWEuXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBbWyAkY3VyID09ICosKiBcXHUwMDI2XFx1MDAyNiAkQ09NUF9XT1JEQlJFQUtTICE9ICosKiBdXTsgdGhlblxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeD1cXFwiJHtjdXIlLCp9LFxcXCJcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZmxhZyBpbiAkKGNvbXBnZW4gLVcgXFxcIiRmbGFnc1xcXCIgLS0gXFxcIiR7Y3VyIyMqLH1cXFwiKTsgZG9cXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01QUkVQTFkrPSggXFxcIiR7cHJlZml4fSR7ZmxhZ31cXFwiIClcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmVcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA7O1xcbisgICAgICAgICAgICAgICAgICAgICAgICBrZXl8dmFsdWV8ZW50cmllcylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lcl9tYXApXFxuQEAgLTExOTIsNyArMTIxMCw3IEBAIF9icGZ0b29sKClcXG4gICAgICAgICAgICAgICAgICAgICA7O1xcbiAgICAgICAgICAgICAgICAgbGlzdF9idWlsdGlucylcXG4gICAgICAgICAgICAgICAgICAgICBbWyAkcHJldiAhPSBcXFwiJGNvbW1hbmRcXFwiIF1dIFxcdTAwMjZcXHUwMDI2IHJldHVybiAwXFxuLSAgICAgICAgICAgICAgICAgICAgQ09NUFJFUExZPSggJCggY29tcGdlbiAtVyAncHJvZ190eXBlcyBtYXBfdHlwZXMgXFxcXFxcbisgICAgICAgICAgICAgICAgICAgIENPTVBSRVBMWT0oICQoIGNvbXBnZW4gLVcgJ3Byb2dfdHlwZXMgbWFwX3R5cGVzIG1hcF9jcmVhdGVfZmxhZ3MgXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2hfdHlwZXMgbGlua190eXBlcyBoZWxwZXJzJyAtLSBcXFwiJGN1clxcXCIgKSApXFxuICAgICAgICAgICAgICAgICAgICAgOztcXG4gICAgICAgICAgICAgICAgICopXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuYyBiL3Rvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuY1xcbmluZGV4IDBmNjA3MGEwYzhlNzEuLmI1NDE5ZDVhNjYxYTUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jXFxuKysrIGIvdG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jXFxuQEAgLTEyMjAsNiArMTIyMCw4IEBAIHN0YXRpYyBpbnQgZG9fbGlzdF9idWlsdGlucyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdGdldF9uYW1lID0gKGNvbnN0IGNoYXIgKigqKSh1bnNpZ25lZCBpbnQpKWxpYmJwZl9icGZfcHJvZ190eXBlX3N0cjtcXG4gXFx0fSBlbHNlIGlmIChpc19wcmVmaXgoKmFyZ3YsIFxcXCJtYXBfdHlwZXNcXFwiKSkge1xcbiBcXHRcXHRnZXRfbmFtZSA9IChjb25zdCBjaGFyICooKikodW5zaWduZWQgaW50KSlsaWJicGZfYnBmX21hcF90eXBlX3N0cjtcXG4rXFx0fSBlbHNlIGlmIChpc19wcmVmaXgoKmFyZ3YsIFxcXCJtYXBfY3JlYXRlX2ZsYWdzXFxcIikpIHtcXG4rXFx0XFx0Z2V0X25hbWUgPSBtYXBfY3JlYXRlX2ZsYWdfbmFtZTtcXG4gXFx0fSBlbHNlIGlmIChpc19wcmVmaXgoKmFyZ3YsIFxcXCJhdHRhY2hfdHlwZXNcXFwiKSkge1xcbiBcXHRcXHRnZXRfbmFtZSA9IChjb25zdCBjaGFyICooKikodW5zaWduZWQgaW50KSlsaWJicGZfYnBmX2F0dGFjaF90eXBlX3N0cjtcXG4gXFx0fSBlbHNlIGlmIChpc19wcmVmaXgoKmFyZ3YsIFxcXCJsaW5rX3R5cGVzXFxcIikpIHtcXG5AQCAtMTIyNyw3ICsxMjI5LDcgQEAgc3RhdGljIGludCBkb19saXN0X2J1aWx0aW5zKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0fSBlbHNlIGlmIChpc19wcmVmaXgoKmFyZ3YsIFxcXCJoZWxwZXJzXFxcIikpIHtcXG4gXFx0XFx0Z2V0X25hbWUgPSBnZXRfaGVscGVyX25hbWU7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHBfZXJyKFxcXCJleHBlY3RlZCAncHJvZ190eXBlcycsICdtYXBfdHlwZXMnLCAnYXR0YWNoX3R5cGVzJywgJ2xpbmtfdHlwZXMnIG9yICdoZWxwZXJzJywgZ290OiAlc1xcXCIsICphcmd2KTtcXG4rXFx0XFx0cF9lcnIoXFxcImV4cGVjdGVkICdwcm9nX3R5cGVzJywgJ21hcF90eXBlcycsICdtYXBfY3JlYXRlX2ZsYWdzJywgJ2F0dGFjaF90eXBlcycsICdsaW5rX3R5cGVzJyBvciAnaGVscGVycycsIGdvdDogJXNcXFwiLCAqYXJndik7XFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFx0fVxcbiBcXG5AQCAtMTI2NSw3ICsxMjY3LDggQEAgc3RhdGljIGludCBkb19oZWxwKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0XFx0XFxcIiAgICAgICAlMSRzICUyJHMgaGVscFxcXFxuXFxcIlxcbiBcXHRcXHRcXFwiXFxcXG5cXFwiXFxuIFxcdFxcdFxcXCIgICAgICAgQ09NUE9ORU5UIDo9IHsga2VybmVsIHwgZGV2IE5BTUUgfVxcXFxuXFxcIlxcbi1cXHRcXHRcXFwiICAgICAgIEdST1VQIDo9IHsgcHJvZ190eXBlcyB8IG1hcF90eXBlcyB8IGF0dGFjaF90eXBlcyB8IGxpbmtfdHlwZXMgfCBoZWxwZXJzIH1cXFxcblxcXCJcXG4rXFx0XFx0XFxcIiAgICAgICBHUk9VUCA6PSB7IHByb2dfdHlwZXMgfCBtYXBfdHlwZXMgfCBtYXBfY3JlYXRlX2ZsYWdzIHxcXFxcblxcXCJcXG4rXFx0XFx0XFxcIiAgICAgICAgICAgICAgICAgIGF0dGFjaF90eXBlcyB8IGxpbmtfdHlwZXMgfCBoZWxwZXJzIH1cXFxcblxcXCJcXG4gXFx0XFx0XFxcIiAgICAgICBcXFwiIEhFTFBfU1BFQ19PUFRJT05TIFxcXCIgfVxcXFxuXFxcIlxcbiBcXHRcXHRcXFwiXFxcIixcXG4gXFx0XFx0YmluX25hbWUsIGFyZ3ZbLTJdKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvbWFpbi5oIGIvdG9vbHMvYnBmL2JwZnRvb2wvbWFpbi5oXFxuaW5kZXggOTMxNWExZGIxZjdjMi4uM2UyODU2YzlmNTk1YiAxMDA2NDRcXG4tLS0gYS90b29scy9icGYvYnBmdG9vbC9tYWluLmhcXG4rKysgYi90b29scy9icGYvYnBmdG9vbC9tYWluLmhcXG5AQCAtMTgwLDYgKzE4MCw3IEBAIGludCBkb190b2tlbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIF9fd2VhaztcXG4gaW50IHBhcnNlX3UzMl9hcmcoaW50ICphcmdjLCBjaGFyICoqKmFyZ3YsIF9fdTMyICp2YWwsIGNvbnN0IGNoYXIgKndoYXQpO1xcbiBpbnQgcHJvZ19wYXJzZV9mZChpbnQgKmFyZ2MsIGNoYXIgKioqYXJndik7XFxuIGludCBwcm9nX3BhcnNlX2ZkcyhpbnQgKmFyZ2MsIGNoYXIgKioqYXJndiwgaW50ICoqZmRzKTtcXG4rY29uc3QgY2hhciAqbWFwX2NyZWF0ZV9mbGFnX25hbWUodW5zaWduZWQgaW50IGlkKTtcXG4gaW50IG1hcF9wYXJzZV9mZChpbnQgKmFyZ2MsIGNoYXIgKioqYXJndiwgX191MzIgb3Blbl9mbGFncyk7XFxuIGludCBtYXBfcGFyc2VfZmRzKGludCAqYXJnYywgY2hhciAqKiphcmd2LCBpbnQgKipmZHMsIF9fdTMyIG9wZW5fZmxhZ3MpO1xcbiBpbnQgbWFwX3BhcnNlX2ZkX2FuZF9pbmZvKGludCAqYXJnYywgY2hhciAqKiphcmd2LCBzdHJ1Y3QgYnBmX21hcF9pbmZvICppbmZvLFxcbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9tYXAuYyBiL3Rvb2xzL2JwZi9icGZ0b29sL21hcC5jXFxuaW5kZXggNjg0YThmYjcyNDE0Ni4uNDQ0NTAxNDI0N2Q2MiAxMDA2NDRcXG4tLS0gYS90b29scy9icGYvYnBmdG9vbC9tYXAuY1xcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL21hcC5jXFxuQEAgLTEyNTAsNiArMTI1MCw4MSBAQCBzdGF0aWMgaW50IGRvX3BpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qge1xcbitcXHRjb25zdCBjaGFyICpuYW1lO1xcbitcXHRfX3UzMiB2YWx1ZTtcXG4rfSBtYXBfY3JlYXRlX2ZsYWdzW10gPSB7XFxuKyNkZWZpbmUgTUFQX0NSRUFURV9GTEFHKGZsYWcpIHsgI2ZsYWcsIGZsYWcgfVxcbitcXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfTk9fUFJFQUxMT0MpLFxcbitcXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfTk9fQ09NTU9OX0xSVSksXFxuK1xcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9OVU1BX05PREUpLFxcbitcXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfUkRPTkxZKSxcXG4rXFx0TUFQX0NSRUFURV9GTEFHKEJQRl9GX1dST05MWSksXFxuK1xcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9TVEFDS19CVUlMRF9JRCksXFxuK1xcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9aRVJPX1NFRUQpLFxcbitcXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfUkRPTkxZX1BST0cpLFxcbitcXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfV1JPTkxZX1BST0cpLFxcbitcXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfQ0xPTkUpLFxcbitcXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfTU1BUEFCTEUpLFxcbitcXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfUFJFU0VSVkVfRUxFTVMpLFxcbitcXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfSU5ORVJfTUFQKSxcXG4rXFx0TUFQX0NSRUFURV9GTEFHKEJQRl9GX0xJTkspLFxcbitcXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfVlRZUEVfQlRGX09CSl9GRCksXFxuK1xcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9UT0tFTl9GRCksXFxuK1xcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9TRUdWX09OX0ZBVUxUKSxcXG4rXFx0TUFQX0NSRUFURV9GTEFHKEJQRl9GX05PX1VTRVJfQ09OViksXFxuK1xcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9SQl9PVkVSV1JJVEUpLFxcbisjdW5kZWYgTUFQX0NSRUFURV9GTEFHXFxuK307XFxuK1xcbitjb25zdCBjaGFyICptYXBfY3JlYXRlX2ZsYWdfbmFtZSh1bnNpZ25lZCBpbnQgaWQpXFxuK3tcXG4rXFx0aWYgKGlkIFxcdTAwM2U9IEFSUkFZX1NJWkUobWFwX2NyZWF0ZV9mbGFncykpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0cmV0dXJuIG1hcF9jcmVhdGVfZmxhZ3NbaWRdLm5hbWU7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGFyc2VfbWFwX2NyZWF0ZV9mbGFncyhjb25zdCBjaGFyICphcmcsIF9fdTMyICpmbGFncylcXG4re1xcbitcXHRjb25zdCBjaGFyICpuYW1lID0gYXJnLCAqY29tbWE7XFxuK1xcdGxvbmcgbG9uZyB2YWx1ZTtcXG4rXFx0X191MzIgcGFyc2VkID0gMDtcXG4rXFx0c2l6ZV90IGxlbiwgaTtcXG4rXFx0Y2hhciAqZW5kO1xcbitcXG4rXFx0LyogS2VlcCBiYXNlLTAgbnVtZXJpYyBpbnB1dCwgaW5jbHVkaW5nIGJpdHMgdW5rbm93biB0byB0aGlzIGJwZnRvb2wuICovXFxuK1xcdGlmIChzdHJuY21wKGFyZywgXFxcIkJQRl9GX1xcXCIsIDYpKSB7XFxuK1xcdFxcdGVycm5vID0gMDtcXG4rXFx0XFx0dmFsdWUgPSBzdHJ0b2xsKGFyZywgXFx1MDAyNmVuZCwgMCk7XFxuK1xcdFxcdGlmIChlcnJubyB8fCBlbmQgPT0gYXJnIHx8ICplbmQgfHwgdmFsdWUgXFx1MDAzYyAwIHx8IHZhbHVlIFxcdTAwM2UgVUlOVDMyX01BWClcXG4rXFx0XFx0XFx0Z290byBpbnZhbGlkO1xcbitcXHRcXHQqZmxhZ3MgPSB2YWx1ZTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGRvIHtcXG4rXFx0XFx0Y29tbWEgPSBzdHJjaHIobmFtZSwgJywnKTtcXG4rXFx0XFx0bGVuID0gY29tbWEgPyAoc2l6ZV90KShjb21tYSAtIG5hbWUpIDogc3RybGVuKG5hbWUpO1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShtYXBfY3JlYXRlX2ZsYWdzKTsgaSsrKSB7XFxuK1xcdFxcdFxcdGlmIChzdHJsZW4obWFwX2NyZWF0ZV9mbGFnc1tpXS5uYW1lKSA9PSBsZW4gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICFzdHJuY21wKG5hbWUsIG1hcF9jcmVhdGVfZmxhZ3NbaV0ubmFtZSwgbGVuKSlcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKGkgPT0gQVJSQVlfU0laRShtYXBfY3JlYXRlX2ZsYWdzKSlcXG4rXFx0XFx0XFx0Z290byBpbnZhbGlkO1xcbitcXHRcXHRwYXJzZWQgfD0gbWFwX2NyZWF0ZV9mbGFnc1tpXS52YWx1ZTtcXG4rXFx0XFx0aWYgKGNvbW1hKVxcbitcXHRcXHRcXHRuYW1lID0gY29tbWEgKyAxO1xcbitcXHR9IHdoaWxlIChjb21tYSk7XFxuK1xcbitcXHQqZmxhZ3MgPSBwYXJzZWQ7XFxuK1xcdHJldHVybiAwO1xcbitpbnZhbGlkOlxcbitcXHRwX2VycihcXFwiY2FuJ3QgcGFyc2UgJXMgYXMgbWFwIGNyZWF0aW9uIGZsYWdzXFxcIiwgYXJnKTtcXG4rXFx0cmV0dXJuIC0xO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGRvX2NyZWF0ZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIHtcXG4gXFx0TElCQlBGX09QVFMoYnBmX21hcF9jcmVhdGVfb3B0cywgYXR0cik7XFxuQEAgLTEzMDEsOSArMTM3NiwxNCBAQCBzdGF0aWMgaW50IGRvX2NyZWF0ZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdFxcdFxcdFxcdCAgXFxcIm1heCBlbnRyaWVzXFxcIikpXFxuIFxcdFxcdFxcdFxcdGdvdG8gZXhpdDtcXG4gXFx0XFx0fSBlbHNlIGlmIChpc19wcmVmaXgoKmFyZ3YsIFxcXCJmbGFnc1xcXCIpKSB7XFxuLVxcdFxcdFxcdGlmIChwYXJzZV91MzJfYXJnKFxcdTAwMjZhcmdjLCBcXHUwMDI2YXJndiwgXFx1MDAyNmF0dHIubWFwX2ZsYWdzLFxcbi1cXHRcXHRcXHRcXHRcXHQgIFxcXCJmbGFnc1xcXCIpKVxcbitcXHRcXHRcXHRORVhUX0FSRygpO1xcbitcXHRcXHRcXHRpZiAoYXR0ci5tYXBfZmxhZ3MpIHtcXG4rXFx0XFx0XFx0XFx0cF9lcnIoXFxcImZsYWdzIGFscmVhZHkgc3BlY2lmaWVkXFxcIik7XFxuIFxcdFxcdFxcdFxcdGdvdG8gZXhpdDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRpZiAocGFyc2VfbWFwX2NyZWF0ZV9mbGFncygqYXJndiwgXFx1MDAyNmF0dHIubWFwX2ZsYWdzKSlcXG4rXFx0XFx0XFx0XFx0Z290byBleGl0O1xcbitcXHRcXHRcXHRORVhUX0FSRygpO1xcbiBcXHRcXHR9IGVsc2UgaWYgKGlzX3ByZWZpeCgqYXJndiwgXFxcImRldlxcXCIpKSB7XFxuIFxcdFxcdFxcdHBfaW5mbyhcXFwiV2FybmluZzogJ2JwZnRvb2wgbWFwIGNyZWF0ZSBbLi4uXSBkZXYgXFx1MDAzY2lmbmFtZVxcdTAwM2UnIHN5bnRheCBpcyBkZXByZWNhdGVkLlxcXFxuXFxcIlxcbiBcXHRcXHRcXHQgICAgICAgXFxcIkdvaW5nIGZ1cnRoZXIsIHBsZWFzZSB1c2UgJ29mZmxvYWRfZGV2IFxcdTAwM2NpZm5hbWVcXHUwMDNlJyB0byByZXF1ZXN0IGhhcmR3YXJlIG9mZmxvYWQgZm9yIHRoZSBtYXAuXFxcIik7XFxuQEAgLTE0NzQsNiArMTU1NCw3IEBAIHN0YXRpYyBpbnQgZG9faGVscChpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdFxcXCIgICAgICAgREFUQSA6PSB7IFtoZXhdIEJZVEVTIH1cXFxcblxcXCJcXG4gXFx0XFx0XFxcIiAgICAgICBcXFwiIEhFTFBfU1BFQ19QUk9HUkFNIFxcXCJcXFxcblxcXCJcXG4gXFx0XFx0XFxcIiAgICAgICBWQUxVRSA6PSB7IERBVEEgfCBNQVAgfCBQUk9HIH1cXFxcblxcXCJcXG4rXFx0XFx0XFxcIiAgICAgICBGTEFHUyA6PSB7IGludGVnZXIgfCBCUEZfRl9OQU1FWyxCUEZfRl9OQU1FLi4uXSB9XFxcXG5cXFwiXFxuIFxcdFxcdFxcXCIgICAgICAgVVBEQVRFX0ZMQUdTIDo9IHsgYW55IHwgZXhpc3QgfCBub2V4aXN0IH1cXFxcblxcXCJcXG4gXFx0XFx0XFxcIiAgICAgICBUWVBFIDo9IHsgaGFzaCB8IGFycmF5IHwgcHJvZ19hcnJheSB8IHBlcmZfZXZlbnRfYXJyYXkgfCBwZXJjcHVfaGFzaCB8XFxcXG5cXFwiXFxuIFxcdFxcdFxcXCIgICAgICAgICAgICAgICAgIHBlcmNwdV9hcnJheSB8IHN0YWNrX3RyYWNlIHwgY2dyb3VwX2FycmF5IHwgbHJ1X2hhc2ggfFxcXFxuXFxcIlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX21hcF9mbGFncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9tYXBfZmxhZ3MuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDYxN2I0MzI3M2E4ZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX21hcF9mbGFncy5jXFxuQEAgLTAsMCArMSwxMDAgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZnRvb2xfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBtYXBfZmxhZ3NfdGVzdCB7XFxuK1xcdGNvbnN0IGNoYXIgKm5hbWU7XFxuK1xcdGNvbnN0IGNoYXIgKmZsYWdzO1xcbitcXHRfX3UzMiBleHBlY3RlZF9mbGFncztcXG4rXFx0Y29uc3QgY2hhciAqZXJyb3I7XFxuK30gdGVzdHNbXSA9IHtcXG4rXFx0eyBcXFwiemVyb1xcXCIsIFxcXCIwXFxcIiwgMCB9LFxcbitcXHR7IFxcXCJkZWNpbWFsXFxcIiwgXFxcIjEyOVxcXCIsIEJQRl9GX05PX1BSRUFMTE9DIHwgQlBGX0ZfUkRPTkxZX1BST0cgfSxcXG4rXFx0eyBcXFwiaGV4YWRlY2ltYWxcXFwiLCBcXFwiMHg4MVxcXCIsIEJQRl9GX05PX1BSRUFMTE9DIHwgQlBGX0ZfUkRPTkxZX1BST0cgfSxcXG4rXFx0eyBcXFwib2N0YWxcXFwiLCBcXFwiMDIwMVxcXCIsIEJQRl9GX05PX1BSRUFMTE9DIHwgQlBGX0ZfUkRPTkxZX1BST0cgfSxcXG4rXFx0eyBcXFwicG9zaXRpdmVfc2lnblxcXCIsIFxcXCIrMVxcXCIsIEJQRl9GX05PX1BSRUFMTE9DIH0sXFxuK1xcdHsgXFxcInNpbmdsZV9uYW1lXFxcIiwgXFxcIkJQRl9GX05PX1BSRUFMTE9DXFxcIiwgQlBGX0ZfTk9fUFJFQUxMT0MgfSxcXG4rXFx0eyBcXFwiY29tYmluZWRfbmFtZXNcXFwiLCBcXFwiQlBGX0ZfTk9fUFJFQUxMT0MsQlBGX0ZfUkRPTkxZX1BST0dcXFwiLFxcbitcXHQgIEJQRl9GX05PX1BSRUFMTE9DIHwgQlBGX0ZfUkRPTkxZX1BST0cgfSxcXG4rXFx0eyBcXFwicmVwZWF0ZWRfbmFtZVxcXCIsIFxcXCJCUEZfRl9OT19QUkVBTExPQyxCUEZfRl9OT19QUkVBTExPQ1xcXCIsIEJQRl9GX05PX1BSRUFMTE9DIH0sXFxuK1xcdHsgXFxcInVua25vd25fbmFtZVxcXCIsIFxcXCJCUEZfRl9OT1RfQV9NQVBfRkxBR1xcXCIsIDAsIFxcXCJjYW4ndCBwYXJzZVxcXCIgfSxcXG4rXFx0eyBcXFwib3RoZXJfY29tbWFuZF9mbGFnXFxcIiwgXFxcIkJQRl9GX1BBVEhfRkRcXFwiLCAwLCBcXFwiY2FuJ3QgcGFyc2VcXFwiIH0sXFxuK1xcdHsgXFxcInVwZGF0ZV9mbGFnXFxcIiwgXFxcIkJQRl9GX0xPQ0tcXFwiLCAwLCBcXFwiY2FuJ3QgcGFyc2VcXFwiIH0sXFxuK1xcdHsgXFxcImFiYnJldmlhdGVkX25hbWVcXFwiLCBcXFwiQlBGX0ZfTk9fUFJFXFxcIiwgMCwgXFxcImNhbid0IHBhcnNlXFxcIiB9LFxcbitcXHR7IFxcXCJsb3dlcmNhc2VfbmFtZVxcXCIsIFxcXCJicGZfZl9ub19wcmVhbGxvY1xcXCIsIDAsIFxcXCJjYW4ndCBwYXJzZVxcXCIgfSxcXG4rXFx0eyBcXFwiZW1wdHlcXFwiLCBcXFwiXFxcIiwgMCwgXFxcImNhbid0IHBhcnNlXFxcIiB9LFxcbitcXHR7IFxcXCJ3aGl0ZXNwYWNlXFxcIiwgXFxcIiBcXFwiLCAwLCBcXFwiY2FuJ3QgcGFyc2VcXFwiIH0sXFxuK1xcdHsgXFxcImVtcHR5X2xpc3RcXFwiLCBcXFwiLFxcXCIsIDAsIFxcXCJjYW4ndCBwYXJzZVxcXCIgfSxcXG4rXFx0eyBcXFwibGVhZGluZ19jb21tYVxcXCIsIFxcXCIsQlBGX0ZfTk9fUFJFQUxMT0NcXFwiLCAwLCBcXFwiY2FuJ3QgcGFyc2VcXFwiIH0sXFxuK1xcdHsgXFxcInRyYWlsaW5nX2NvbW1hXFxcIiwgXFxcIkJQRl9GX05PX1BSRUFMTE9DLFxcXCIsIDAsIFxcXCJjYW4ndCBwYXJzZVxcXCIgfSxcXG4rXFx0eyBcXFwiZW1wdHlfZWxlbWVudFxcXCIsIFxcXCJCUEZfRl9OT19QUkVBTExPQywsQlBGX0ZfUkRPTkxZX1BST0dcXFwiLCAwLCBcXFwiY2FuJ3QgcGFyc2VcXFwiIH0sXFxuK1xcdHsgXFxcIm51bWJlcl90aGVuX25hbWVcXFwiLCBcXFwiMSxCUEZfRl9SRE9OTFlfUFJPR1xcXCIsIDAsIFxcXCJjYW4ndCBwYXJzZVxcXCIgfSxcXG4rXFx0eyBcXFwibmFtZV90aGVuX251bWJlclxcXCIsIFxcXCJCUEZfRl9OT19QUkVBTExPQywxMjhcXFwiLCAwLCBcXFwiY2FuJ3QgcGFyc2VcXFwiIH0sXFxuK1xcdHsgXFxcIm51bWVyaWNfbGlzdFxcXCIsIFxcXCIxLDEyOFxcXCIsIDAsIFxcXCJjYW4ndCBwYXJzZVxcXCIgfSxcXG4rXFx0eyBcXFwid2hpdGVzcGFjZV9pbl9saXN0XFxcIiwgXFxcIkJQRl9GX05PX1BSRUFMTE9DLCBCUEZfRl9SRE9OTFlfUFJPR1xcXCIsIDAsIFxcXCJjYW4ndCBwYXJzZVxcXCIgfSxcXG4rXFx0eyBcXFwib3ZlcmZsb3dfdTMyXFxcIiwgXFxcIjQyOTQ5NjcyOTZcXFwiLCAwLCBcXFwiY2FuJ3QgcGFyc2VcXFwiIH0sXFxuK1xcdHsgXFxcIm92ZXJmbG93X2hleFxcXCIsIFxcXCIweDEwMDAwMDAwMFxcXCIsIDAsIFxcXCJjYW4ndCBwYXJzZVxcXCIgfSxcXG4rXFx0eyBcXFwib3ZlcmZsb3dfdTY0XFxcIiwgXFxcIjE4NDQ2NzQ0MDczNzA5NTUxNjE2XFxcIiwgMCwgXFxcImNhbid0IHBhcnNlXFxcIiB9LFxcbitcXHR7IFxcXCJuZWdhdGl2ZVxcXCIsIFxcXCItMVxcXCIsIDAsIFxcXCJjYW4ndCBwYXJzZVxcXCIgfSxcXG4rXFx0LyogTnVtZXJpYyBiaXRzIHVua25vd24gdG8gYnBmdG9vbCBtdXN0IHN0aWxsIHJlYWNoIHRoZSBrZXJuZWwuICovXFxuK1xcdHsgXFxcImFsbF9iaXRzXFxcIiwgXFxcIjB4ZmZmZmZmZmZcXFwiLCAwLCBcXFwibWFwIGNyZWF0ZSBmYWlsZWRcXFwiIH0sXFxuK1xcdC8qIFRoZSBrZXJuZWwgdmFsaWRhdGVzIGNvbWJpbmF0aW9ucyBvZiBrbm93biBtYXAgY3JlYXRpb24gZmxhZ3MuICovXFxuK1xcdHsgXFxcImludmFsaWRfY29tYmluYXRpb25cXFwiLCBcXFwiQlBGX0ZfUkRPTkxZLEJQRl9GX1dST05MWVxcXCIsIDAsIFxcXCJtYXAgY3JlYXRlIGZhaWxlZFxcXCIgfSxcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3RfbWFwX2ZsYWdzKGNvbnN0IHN0cnVjdCBtYXBfZmxhZ3NfdGVzdCAqdGVzdCwgY29uc3QgY2hhciAqcGF0aClcXG4re1xcbitcXHRjaGFyIGNtZFtNQVhfQlBGVE9PTF9DTURfTEVOXSwgb3V0cHV0WzEwMjRdID0ge307XFxuK1xcdHN0cnVjdCBicGZfbWFwX2luZm8gaW5mbyA9IHt9O1xcbitcXHRfX3UzMiBpbmZvX2xlbiA9IHNpemVvZihpbmZvKTtcXG4rXFx0aW50IGZkLCBlcnI7XFxuK1xcbitcXHQvKiBMZXQgdGhlIGZsYWdzIHBhcnNlciBoYW5kbGUgbmVnYXRpdmUgbnVtYmVycyBpbnN0ZWFkIG9mIGdldG9wdCgpLiAqL1xcbitcXHRlcnIgPSBzbnByaW50ZihjbWQsIHNpemVvZihjbWQpLFxcbitcXHRcXHQgICAgICAgXFxcIi0tIG1hcCBjcmVhdGUgJXMgdHlwZSBoYXNoIGtleSA0IHZhbHVlIDQgZW50cmllcyAxIG5hbWUgZmxhZ3NfdGVzdCBmbGFncyAnJXMnIDJcXHUwMDNlXFx1MDAyNjFcXFwiLFxcbitcXHRcXHQgICAgICAgcGF0aCwgdGVzdC1cXHUwMDNlZmxhZ3MpO1xcbitcXHRpZiAoIUFTU0VSVF9HVChlcnIsIDAsIFxcXCJmb3JtYXRfY29tbWFuZFxcXCIpIHx8XFxuK1xcdCAgICAhQVNTRVJUX0xUKGVyciwgc2l6ZW9mKGNtZCksIFxcXCJjb21tYW5kX2xlbmd0aFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRlcnIgPSBnZXRfYnBmdG9vbF9jb21tYW5kX291dHB1dChjbWQsIG91dHB1dCwgc2l6ZW9mKG91dHB1dCkpO1xcbitcXHRpZiAodGVzdC1cXHUwMDNlZXJyb3IpIHtcXG4rXFx0XFx0QVNTRVJUX05FUShlcnIsIDAsIFxcXCJyZWplY3RfZmxhZ3NcXFwiKTtcXG4rXFx0XFx0QVNTRVJUX0hBU19TVUJTVFIob3V0cHV0LCB0ZXN0LVxcdTAwM2VlcnJvciwgXFxcImVycm9yX21lc3NhZ2VcXFwiKTtcXG4rXFx0XFx0ZXJyID0gYWNjZXNzKHBhdGgsIEZfT0spO1xcbitcXHRcXHRBU1NFUlRfRVEoZXJyLCAtMSwgXFxcIm5vX3BpblxcXCIpO1xcbitcXHRcXHRBU1NFUlRfRVEoZXJybm8sIEVOT0VOVCwgXFxcInBpbl9hYnNlbnRcXFwiKTtcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHR9XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImNyZWF0ZV9tYXBcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0ZmQgPSBicGZfb2JqX2dldChwYXRoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfRkQoZmQsIFxcXCJvcGVuX21hcFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdGlmIChBU1NFUlRfT0soYnBmX21hcF9nZXRfaW5mb19ieV9mZChmZCwgXFx1MDAyNmluZm8sIFxcdTAwMjZpbmZvX2xlbiksIFxcXCJtYXBfaW5mb1xcXCIpKVxcbitcXHRcXHRBU1NFUlRfRVEoaW5mby5tYXBfZmxhZ3MsIHRlc3QtXFx1MDAzZWV4cGVjdGVkX2ZsYWdzLCBcXFwibWFwX2ZsYWdzXFxcIik7XFxuK1xcdGNsb3NlKGZkKTtcXG4rY2xlYW51cDpcXG4rXFx0dW5saW5rKHBhdGgpO1xcbit9XFxuK1xcbit2b2lkIHRlc3RfYnBmdG9vbF9tYXBfZmxhZ3Modm9pZClcXG4re1xcbitcXHRjaGFyIGRpcltdID0gXFxcIi9zeXMvZnMvYnBmL2JwZnRvb2xfZmxhZ3NfWFhYWFhYXFxcIjtcXG4rXFx0Y2hhciBwYXRoW3NpemVvZihkaXIpICsgc2l6ZW9mKFxcXCIvbWFwXFxcIildO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihta2R0ZW1wKGRpciksIFxcXCJjcmVhdGVfcGluX2RpclxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXFxcIiVzL21hcFxcXCIsIGRpcik7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHRlc3RzKTsgaSsrKSB7XFxuK1xcdFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KHRlc3RzW2ldLm5hbWUpKVxcbitcXHRcXHRcXHR0ZXN0X21hcF9mbGFncyhcXHUwMDI2dGVzdHNbaV0sIHBhdGgpO1xcbitcXHR9XFxuK1xcdEFTU0VSVF9PSyhybWRpcihkaXIpLCBcXFwicmVtb3ZlX3Bpbl9kaXJcXFwiKTtcXG4rfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMzowMjowMS45NTc0Mjc3NjhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ5NDk1ODUyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdG9vbGluZyAoYnBmdG9vbCkgYW5kIHNlbGZ0ZXN0cyB1bmRlciB0b29scy9icGYvYnBmdG9vbCBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLiBObyBrZXJuZWwtc3BhY2UgY29kZSAodm1saW51eCBvciBrZXJuZWwgbW9kdWxlcykgaXMgYWZmZWN0ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBhYThhM2RmMmMxNDcwZWEwMzU5ZjlmZDJmZTIwMDM2ODBiNjQ0NGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwMzowMjowMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1mZWF0dXJlLnJzdCBiL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1mZWF0dXJlLnJzdFxuaW5kZXggYzdmODM3ODk4YmM3Ny4uNTk3ZjI0MjZkMjU1NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1mZWF0dXJlLnJzdFxuKysrIGIvdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLWZlYXR1cmUucnN0XG5AQCAtMjgsNyArMjgsNyBAQCBGRUFUVVJFIENPTU1BTkRTXG4gfCAqKmJwZnRvb2wqKiAqKmZlYXR1cmUgaGVscCoqXG4gfFxuIHwgKkNPTVBPTkVOVCogOj0geyAqKmtlcm5lbCoqIHwgKipkZXYqKiAqTkFNRSogfVxuLXwgKkdST1VQKiA6PSB7ICoqcHJvZ190eXBlcyoqIHwgKiptYXBfdHlwZXMqKiB8ICoqYXR0YWNoX3R5cGVzKiogfCAqKmxpbmtfdHlwZXMqKiB8ICoqaGVscGVycyoqIH1cbit8ICpHUk9VUCogOj0geyAqKnByb2dfdHlwZXMqKiB8ICoqbWFwX3R5cGVzKiogfCAqKm1hcF9jcmVhdGVfZmxhZ3MqKiB8ICoqYXR0YWNoX3R5cGVzKiogfCAqKmxpbmtfdHlwZXMqKiB8ICoqaGVscGVycyoqIH1cbiBcbiBERVNDUklQVElPTlxuID09PT09PT09PT09XG5AQCAtNjgsMTIgKzY4LDE0IEBAIGJwZnRvb2wgZmVhdHVyZSBwcm9iZSBkZXYgKk5BTUUqIFtmdWxsXSBbbWFjcm9zIFtwcmVmaXggKlBSRUZJWCpdXVxuIFxuIGJwZnRvb2wgZmVhdHVyZSBsaXN0X2J1aWx0aW5zICpHUk9VUCpcbiAgICAgTGlzdCBpdGVtcyBrbm93biB0byBicGZ0b29sLiBUaGVzZSBjYW4gYmUgQlBGIHByb2dyYW0gdHlwZXNcbi0gICAgKCoqcHJvZ190eXBlcyoqKSwgQlBGIG1hcCB0eXBlcyAoKiptYXBfdHlwZXMqKiksIGF0dGFjaCB0eXBlc1xuKyAgICAoKipwcm9nX3R5cGVzKiopLCBCUEYgbWFwIHR5cGVzICgqKm1hcF90eXBlcyoqKSwgbWFwIGNyZWF0aW9uIGZsYWdzXG4rICAgICgqKm1hcF9jcmVhdGVfZmxhZ3MqKiksIGF0dGFjaCB0eXBlc1xuICAgICAoKiphdHRhY2hfdHlwZXMqKiksIGxpbmsgdHlwZXMgKCoqbGlua190eXBlcyoqKSwgb3IgQlBGIGhlbHBlciBmdW5jdGlvbnNcbiAgICAgKCoqaGVscGVycyoqKS4gVGhlIGNvbW1hbmQgZG9lcyBub3QgcHJvYmUgdGhlIHN5c3RlbSwgYnV0IHNpbXBseSBsaXN0cyB0aGVcbiAgICAgZWxlbWVudHMgdGhhdCBicGZ0b29sIGtub3dzIGZyb20gY29tcGlsYXRpb24gdGltZSwgYXMgcHJvdmlkZWQgZnJvbSBsaWJicGZcbi0gICAgKGZvciBhbGwgb2JqZWN0IHR5cGVzKSBvciBmcm9tIHRoZSBCUEYgVUFQSSBoZWFkZXIgKGxpc3Qgb2YgaGVscGVycykuIFRoaXNcbi0gICAgY2FuIGJlIHVzZWQgaW4gc2NyaXB0cyB0byBpdGVyYXRlIG92ZXIgQlBGIHR5cGVzIG9yIGhlbHBlcnMuXG4rICAgIChmb3IgYWxsIG9iamVjdCB0eXBlcykgb3IgZnJvbSB0aGUgQlBGIFVBUEkgaGVhZGVyIChoZWxwZXJzIGFuZCBtYXAgY3JlYXRpb25cbisgICAgZmxhZ3MpLiBUaGlzIGNhbiBiZSB1c2VkIGluIHNjcmlwdHMgdG8gaXRlcmF0ZSBvdmVyIEJQRiB0eXBlcywgaGVscGVycywgb3JcbisgICAgdGhlIHN5bWJvbGljIGZsYWdzIGFjY2VwdGVkIGJ5ICoqbWFwIGNyZWF0ZSoqLlxuIFxuIGJwZnRvb2wgZmVhdHVyZSBoZWxwXG4gICAgIFByaW50IHNob3J0IGhlbHAgbWVzc2FnZS5cbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtbWFwLnJzdCBiL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1tYXAucnN0XG5pbmRleCA1ZGFmM2RlNWM3NDQ2Li41YTVjMjZmNzg5Y2QwIDEwMDY0NFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLW1hcC5yc3RcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1tYXAucnN0XG5AQCAtNDgsNiArNDgsNyBAQCBNQVAgQ09NTUFORFNcbiB8ICpEQVRBKiA6PSB7IFsqKmhleCoqXSAqQllURVMqIH1cbiB8ICpQUk9HKiA6PSB7ICoqaWQqKiAqUFJPR19JRCogfCAqKnBpbm5lZCoqICpGSUxFKiB8ICoqdGFnKiogKlBST0dfVEFHKiB8ICoqbmFtZSoqICpQUk9HX05BTUUqIH1cbiB8ICpWQUxVRSogOj0geyAqREFUQSogfCAqTUFQKiB8ICpQUk9HKiB9XG4rfCAqRkxBR1MqIDo9IHsgaW50ZWdlciB8ICoqQlBGX0ZfTkFNRVssQlBGX0ZfTkFNRS4uLl0qKiB9XG4gfCAqVVBEQVRFX0ZMQUdTKiA6PSB7ICoqYW55KiogfCAqKmV4aXN0KiogfCAqKm5vZXhpc3QqKiB9XG4gfCAqVFlQRSogOj0geyAqKmhhc2gqKiB8ICoqYXJyYXkqKiB8ICoqcHJvZ19hcnJheSoqIHwgKipwZXJmX2V2ZW50X2FycmF5KiogfCAqKnBlcmNwdV9oYXNoKipcbiB8ICAgICB8ICoqcGVyY3B1X2FycmF5KiogfCAqKnN0YWNrX3RyYWNlKiogfCAqKmNncm91cF9hcnJheSoqIHwgKipscnVfaGFzaCoqXG5AQCAtNzYsOSArNzcsMTYgQEAgYnBmdG9vbCBtYXAgeyBzaG93IHwgbGlzdCB9ICAgWypNQVAqXVxuIGJwZnRvb2wgbWFwIGNyZWF0ZSAqRklMRSogdHlwZSAqVFlQRSoga2V5ICpLRVlfU0laRSogdmFsdWUgKlZBTFVFX1NJWkUqICBlbnRyaWVzICpNQVhfRU5UUklFUyogbmFtZSAqTkFNRSogW2ZsYWdzICpGTEFHUypdIFtpbm5lcl9tYXAgKk1BUCpdIFtvZmZsb2FkX2RldiAqTkFNRSpdXG4gICAgIENyZWF0ZSBhIG5ldyBtYXAgd2l0aCBnaXZlbiBwYXJhbWV0ZXJzIGFuZCBwaW4gaXQgdG8gKmJwZmZzKiBhcyAqRklMRSouXG4gXG4tICAgICpGTEFHUyogc2hvdWxkIGJlIGFuIGludGVnZXIgd2hpY2ggaXMgdGhlIGNvbWJpbmF0aW9uIG9mIGRlc2lyZWQgZmxhZ3MsXG4tICAgIGUuZy4gMTAyNCBmb3IgKipCUEZfRl9NTUFQQUJMRSoqIChzZWUgYnBmLmggVUFQSSBoZWFkZXIgZm9yIGV4aXN0aW5nXG4tICAgIGZsYWdzKS5cbisgICAgKkZMQUdTKiBhY2NlcHRzIGFuIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIGNvbWJpbmluZyB0aGUgZGVzaXJlZCBmbGFnc1xuKyAgICAoZGVjaW1hbCwgaGV4YWRlY2ltYWwgd2l0aCBhICoqMHgqKiBwcmVmaXgsIG9yIG9jdGFsIHdpdGggYSAqKjAqKiBwcmVmaXgpLFxuKyAgICBvciBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGZ1bGwsIGNhc2Utc2Vuc2l0aXZlIG1hcCBjcmVhdGlvbiBmbGFnIG5hbWVzXG4rICAgIGZyb20gdGhlIGJwZi5oIFVBUEkgaGVhZGVyLiBGb3IgZXhhbXBsZSwgKioxMDI0KiosICoqMHg0MDAqKiwgYW5kXG4rICAgICoqQlBGX0ZfTU1BUEFCTEUqKiBhcmUgZXF1aXZhbGVudC4gTXVsdGlwbGUgbmFtZXMgYXJlIGNvbWJpbmVkIHdpdGhcbisgICAgYml0d2lzZSBPUiwgZm9yIGV4YW1wbGUgKipCUEZfRl9OT19QUkVBTExPQyxCUEZfRl9SRE9OTFlfUFJPRyoqLlxuKyAgICBSZXBlYXRlZCBuYW1lcyBhcmUgYWxsb3dlZC4gRW1wdHkgbGlzdCBlbGVtZW50cywgYWJicmV2aWF0ZWQgbmFtZXMsIGFuZFxuKyAgICBsaXN0cyBtaXhpbmcgbnVtYmVycyB3aXRoIG5hbWVzIGFyZSBub3QgYWNjZXB0ZWQuIFVzZSAqKjAqKiBmb3Igbm8gZmxhZ3MuXG4rICAgIE51bWVyaWMgdmFsdWVzIGNhbiBpbmNsdWRlIGJpdHMgdW5rbm93biB0byBicGZ0b29sLiBUaGUga2VybmVsIGNoZWNrc1xuKyAgICB3aGV0aGVyIHRoZSBmbGFncyBhcmUgdmFsaWQgZm9yIHRoZSByZXF1ZXN0ZWQgbWFwIHR5cGUuXG4gXG4gICAgIFRvIGNyZWF0ZSBtYXBzIG9mIHR5cGUgYXJyYXktb2YtbWFwcyBvciBoYXNoLW9mLW1hcHMsIHRoZSAqKmlubmVyX21hcCoqXG4gICAgIGtleXdvcmQgbXVzdCBiZSB1c2VkIHRvIHBhc3MgYW4gaW5uZXIgbWFwLiBUaGUga2VybmVsIG5lZWRzIGl0IHRvIGNvbGxlY3RcbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9iYXNoLWNvbXBsZXRpb24vYnBmdG9vbCBiL3Rvb2xzL2JwZi9icGZ0b29sL2Jhc2gtY29tcGxldGlvbi9icGZ0b29sXG5pbmRleCA3NWNiY2I1MTJlYmFlLi5lYTNmNTIxYjZmMDg4IDEwMDY0NFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvYmFzaC1jb21wbGV0aW9uL2JwZnRvb2xcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL2Jhc2gtY29tcGxldGlvbi9icGZ0b29sXG5AQCAtNzE4LDYgKzcxOCwxMCBAQCBfYnBmdG9vbCgpXG4gICAgICAgICAgICAgICAgICAgICBlc2FjXG4gICAgICAgICAgICAgICAgICAgICA7O1xuICAgICAgICAgICAgICAgICBjcmVhdGUpXG4rICAgICAgICAgICAgICAgICAgICAjIEtlZXAgYSBmbGFncyBsaXN0IHRvZ2V0aGVyIGlmIHJlYWRsaW5lIHNwbGl0cyBhdCBjb21tYXMuXG4rICAgICAgICAgICAgICAgICAgICBpZiBbWyAkQ09NUF9XT1JEQlJFQUtTID09ICosKiBcdTAwMjZcdTAwMjYgKCAkY3VyID09ICwgfHwgJHByZXYgPT0gLCApIF1dOyB0aGVuXG4rICAgICAgICAgICAgICAgICAgICAgICAgX2dldF9jb21wX3dvcmRzX2J5X3JlZiAtbiAsIGN1ciBwcmV2XG4rICAgICAgICAgICAgICAgICAgICBmaVxuICAgICAgICAgICAgICAgICAgICAgY2FzZSAkcHJldiBpblxuICAgICAgICAgICAgICAgICAgICAgICAgICRjb21tYW5kKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZmlsZWRpclxuQEAgLTcyOSw3ICs3MzMsMjEgQEAgX2JwZnRvb2woKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01QUkVQTFk9KCAkKCBjb21wZ2VuIC1XIFwiJEJQRlRPT0xfTUFQX0NSRUFURV9UWVBFU1wiIC0tIFwiJGN1clwiICkgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7O1xuLSAgICAgICAgICAgICAgICAgICAgICAgIGtleXx2YWx1ZXxmbGFnc3xlbnRyaWVzKVxuKyAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKVxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb3B0IC1vIG5vc3BhY2VcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgZmxhZ3M9XCIkKGJwZnRvb2wgZmVhdHVyZSBsaXN0X2J1aWx0aW5zIG1hcF9jcmVhdGVfZmxhZ3MgMlx1MDAzZS9kZXYvbnVsbClcIlxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBwcmVmaXg9IGZsYWdcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiBjb21tYSBpcyBub3QgYSB3b3JkIGJyZWFrLCBSZWFkbGluZSByZXBsYWNlcyB0aGUgd2hvbGVcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB3b3JkLCBzbyBwcmVzZXJ2ZSB0aGUgZmxhZ3MgYmVmb3JlIHRoZSBsYXN0IGNvbW1hLlxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBbWyAkY3VyID09ICosKiBcdTAwMjZcdTAwMjYgJENPTVBfV09SREJSRUFLUyAhPSAqLCogXV07IHRoZW5cbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeD1cIiR7Y3VyJSwqfSxcIlxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaVxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZmxhZyBpbiAkKGNvbXBnZW4gLVcgXCIkZmxhZ3NcIiAtLSBcIiR7Y3VyIyMqLH1cIik7IGRvXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01QUkVQTFkrPSggXCIke3ByZWZpeH0ke2ZsYWd9XCIgKVxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7XG4rICAgICAgICAgICAgICAgICAgICAgICAga2V5fHZhbHVlfGVudHJpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJfbWFwKVxuQEAgLTExOTIsNyArMTIxMCw3IEBAIF9icGZ0b29sKClcbiAgICAgICAgICAgICAgICAgICAgIDs7XG4gICAgICAgICAgICAgICAgIGxpc3RfYnVpbHRpbnMpXG4gICAgICAgICAgICAgICAgICAgICBbWyAkcHJldiAhPSBcIiRjb21tYW5kXCIgXV0gXHUwMDI2XHUwMDI2IHJldHVybiAwXG4tICAgICAgICAgICAgICAgICAgICBDT01QUkVQTFk9KCAkKCBjb21wZ2VuIC1XICdwcm9nX3R5cGVzIG1hcF90eXBlcyBcXFxuKyAgICAgICAgICAgICAgICAgICAgQ09NUFJFUExZPSggJCggY29tcGdlbiAtVyAncHJvZ190eXBlcyBtYXBfdHlwZXMgbWFwX2NyZWF0ZV9mbGFncyBcXFxuICAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaF90eXBlcyBsaW5rX3R5cGVzIGhlbHBlcnMnIC0tIFwiJGN1clwiICkgKVxuICAgICAgICAgICAgICAgICAgICAgOztcbiAgICAgICAgICAgICAgICAgKilcbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmMgYi90b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmNcbmluZGV4IDBmNjA3MGEwYzhlNzEuLmI1NDE5ZDVhNjYxYTUgMTAwNjQ0XG4tLS0gYS90b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmNcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuY1xuQEAgLTEyMjAsNiArMTIyMCw4IEBAIHN0YXRpYyBpbnQgZG9fbGlzdF9idWlsdGlucyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdGdldF9uYW1lID0gKGNvbnN0IGNoYXIgKigqKSh1bnNpZ25lZCBpbnQpKWxpYmJwZl9icGZfcHJvZ190eXBlX3N0cjtcbiBcdH0gZWxzZSBpZiAoaXNfcHJlZml4KCphcmd2LCBcIm1hcF90eXBlc1wiKSkge1xuIFx0XHRnZXRfbmFtZSA9IChjb25zdCBjaGFyICooKikodW5zaWduZWQgaW50KSlsaWJicGZfYnBmX21hcF90eXBlX3N0cjtcbitcdH0gZWxzZSBpZiAoaXNfcHJlZml4KCphcmd2LCBcIm1hcF9jcmVhdGVfZmxhZ3NcIikpIHtcbitcdFx0Z2V0X25hbWUgPSBtYXBfY3JlYXRlX2ZsYWdfbmFtZTtcbiBcdH0gZWxzZSBpZiAoaXNfcHJlZml4KCphcmd2LCBcImF0dGFjaF90eXBlc1wiKSkge1xuIFx0XHRnZXRfbmFtZSA9IChjb25zdCBjaGFyICooKikodW5zaWduZWQgaW50KSlsaWJicGZfYnBmX2F0dGFjaF90eXBlX3N0cjtcbiBcdH0gZWxzZSBpZiAoaXNfcHJlZml4KCphcmd2LCBcImxpbmtfdHlwZXNcIikpIHtcbkBAIC0xMjI3LDcgKzEyMjksNyBAQCBzdGF0aWMgaW50IGRvX2xpc3RfYnVpbHRpbnMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0fSBlbHNlIGlmIChpc19wcmVmaXgoKmFyZ3YsIFwiaGVscGVyc1wiKSkge1xuIFx0XHRnZXRfbmFtZSA9IGdldF9oZWxwZXJfbmFtZTtcbiBcdH0gZWxzZSB7XG4tXHRcdHBfZXJyKFwiZXhwZWN0ZWQgJ3Byb2dfdHlwZXMnLCAnbWFwX3R5cGVzJywgJ2F0dGFjaF90eXBlcycsICdsaW5rX3R5cGVzJyBvciAnaGVscGVycycsIGdvdDogJXNcIiwgKmFyZ3YpO1xuK1x0XHRwX2VycihcImV4cGVjdGVkICdwcm9nX3R5cGVzJywgJ21hcF90eXBlcycsICdtYXBfY3JlYXRlX2ZsYWdzJywgJ2F0dGFjaF90eXBlcycsICdsaW5rX3R5cGVzJyBvciAnaGVscGVycycsIGdvdDogJXNcIiwgKmFyZ3YpO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXG5AQCAtMTI2NSw3ICsxMjY3LDggQEAgc3RhdGljIGludCBkb19oZWxwKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0XCIgICAgICAgJTEkcyAlMiRzIGhlbHBcXG5cIlxuIFx0XHRcIlxcblwiXG4gXHRcdFwiICAgICAgIENPTVBPTkVOVCA6PSB7IGtlcm5lbCB8IGRldiBOQU1FIH1cXG5cIlxuLVx0XHRcIiAgICAgICBHUk9VUCA6PSB7IHByb2dfdHlwZXMgfCBtYXBfdHlwZXMgfCBhdHRhY2hfdHlwZXMgfCBsaW5rX3R5cGVzIHwgaGVscGVycyB9XFxuXCJcbitcdFx0XCIgICAgICAgR1JPVVAgOj0geyBwcm9nX3R5cGVzIHwgbWFwX3R5cGVzIHwgbWFwX2NyZWF0ZV9mbGFncyB8XFxuXCJcbitcdFx0XCIgICAgICAgICAgICAgICAgICBhdHRhY2hfdHlwZXMgfCBsaW5rX3R5cGVzIHwgaGVscGVycyB9XFxuXCJcbiBcdFx0XCIgICAgICAgXCIgSEVMUF9TUEVDX09QVElPTlMgXCIgfVxcblwiXG4gXHRcdFwiXCIsXG4gXHRcdGJpbl9uYW1lLCBhcmd2Wy0yXSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvbWFpbi5oIGIvdG9vbHMvYnBmL2JwZnRvb2wvbWFpbi5oXG5pbmRleCA5MzE1YTFkYjFmN2MyLi4zZTI4NTZjOWY1OTViIDEwMDY0NFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvbWFpbi5oXG4rKysgYi90b29scy9icGYvYnBmdG9vbC9tYWluLmhcbkBAIC0xODAsNiArMTgwLDcgQEAgaW50IGRvX3Rva2VuKGludCBhcmdjLCBjaGFyICoqYXJndikgX193ZWFrO1xuIGludCBwYXJzZV91MzJfYXJnKGludCAqYXJnYywgY2hhciAqKiphcmd2LCBfX3UzMiAqdmFsLCBjb25zdCBjaGFyICp3aGF0KTtcbiBpbnQgcHJvZ19wYXJzZV9mZChpbnQgKmFyZ2MsIGNoYXIgKioqYXJndik7XG4gaW50IHByb2dfcGFyc2VfZmRzKGludCAqYXJnYywgY2hhciAqKiphcmd2LCBpbnQgKipmZHMpO1xuK2NvbnN0IGNoYXIgKm1hcF9jcmVhdGVfZmxhZ19uYW1lKHVuc2lnbmVkIGludCBpZCk7XG4gaW50IG1hcF9wYXJzZV9mZChpbnQgKmFyZ2MsIGNoYXIgKioqYXJndiwgX191MzIgb3Blbl9mbGFncyk7XG4gaW50IG1hcF9wYXJzZV9mZHMoaW50ICphcmdjLCBjaGFyICoqKmFyZ3YsIGludCAqKmZkcywgX191MzIgb3Blbl9mbGFncyk7XG4gaW50IG1hcF9wYXJzZV9mZF9hbmRfaW5mbyhpbnQgKmFyZ2MsIGNoYXIgKioqYXJndiwgc3RydWN0IGJwZl9tYXBfaW5mbyAqaW5mbyxcbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9tYXAuYyBiL3Rvb2xzL2JwZi9icGZ0b29sL21hcC5jXG5pbmRleCA2ODRhOGZiNzI0MTQ2Li40NDQ1MDE0MjQ3ZDYyIDEwMDY0NFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvbWFwLmNcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL21hcC5jXG5AQCAtMTI1MCw2ICsxMjUwLDgxIEBAIHN0YXRpYyBpbnQgZG9fcGluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qge1xuK1x0Y29uc3QgY2hhciAqbmFtZTtcbitcdF9fdTMyIHZhbHVlO1xuK30gbWFwX2NyZWF0ZV9mbGFnc1tdID0ge1xuKyNkZWZpbmUgTUFQX0NSRUFURV9GTEFHKGZsYWcpIHsgI2ZsYWcsIGZsYWcgfVxuK1x0TUFQX0NSRUFURV9GTEFHKEJQRl9GX05PX1BSRUFMTE9DKSxcbitcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9OT19DT01NT05fTFJVKSxcbitcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9OVU1BX05PREUpLFxuK1x0TUFQX0NSRUFURV9GTEFHKEJQRl9GX1JET05MWSksXG4rXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfV1JPTkxZKSxcbitcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9TVEFDS19CVUlMRF9JRCksXG4rXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfWkVST19TRUVEKSxcbitcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9SRE9OTFlfUFJPRyksXG4rXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfV1JPTkxZX1BST0cpLFxuK1x0TUFQX0NSRUFURV9GTEFHKEJQRl9GX0NMT05FKSxcbitcdE1BUF9DUkVBVEVfRkxBRyhCUEZfRl9NTUFQQUJMRSksXG4rXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfUFJFU0VSVkVfRUxFTVMpLFxuK1x0TUFQX0NSRUFURV9GTEFHKEJQRl9GX0lOTkVSX01BUCksXG4rXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfTElOSyksXG4rXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfVlRZUEVfQlRGX09CSl9GRCksXG4rXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfVE9LRU5fRkQpLFxuK1x0TUFQX0NSRUFURV9GTEFHKEJQRl9GX1NFR1ZfT05fRkFVTFQpLFxuK1x0TUFQX0NSRUFURV9GTEFHKEJQRl9GX05PX1VTRVJfQ09OViksXG4rXHRNQVBfQ1JFQVRFX0ZMQUcoQlBGX0ZfUkJfT1ZFUldSSVRFKSxcbisjdW5kZWYgTUFQX0NSRUFURV9GTEFHXG4rfTtcbitcbitjb25zdCBjaGFyICptYXBfY3JlYXRlX2ZsYWdfbmFtZSh1bnNpZ25lZCBpbnQgaWQpXG4re1xuK1x0aWYgKGlkIFx1MDAzZT0gQVJSQVlfU0laRShtYXBfY3JlYXRlX2ZsYWdzKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRyZXR1cm4gbWFwX2NyZWF0ZV9mbGFnc1tpZF0ubmFtZTtcbit9XG4rXG4rc3RhdGljIGludCBwYXJzZV9tYXBfY3JlYXRlX2ZsYWdzKGNvbnN0IGNoYXIgKmFyZywgX191MzIgKmZsYWdzKVxuK3tcbitcdGNvbnN0IGNoYXIgKm5hbWUgPSBhcmcsICpjb21tYTtcbitcdGxvbmcgbG9uZyB2YWx1ZTtcbitcdF9fdTMyIHBhcnNlZCA9IDA7XG4rXHRzaXplX3QgbGVuLCBpO1xuK1x0Y2hhciAqZW5kO1xuK1xuK1x0LyogS2VlcCBiYXNlLTAgbnVtZXJpYyBpbnB1dCwgaW5jbHVkaW5nIGJpdHMgdW5rbm93biB0byB0aGlzIGJwZnRvb2wuICovXG4rXHRpZiAoc3RybmNtcChhcmcsIFwiQlBGX0ZfXCIsIDYpKSB7XG4rXHRcdGVycm5vID0gMDtcbitcdFx0dmFsdWUgPSBzdHJ0b2xsKGFyZywgXHUwMDI2ZW5kLCAwKTtcbitcdFx0aWYgKGVycm5vIHx8IGVuZCA9PSBhcmcgfHwgKmVuZCB8fCB2YWx1ZSBcdTAwM2MgMCB8fCB2YWx1ZSBcdTAwM2UgVUlOVDMyX01BWClcbitcdFx0XHRnb3RvIGludmFsaWQ7XG4rXHRcdCpmbGFncyA9IHZhbHVlO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGRvIHtcbitcdFx0Y29tbWEgPSBzdHJjaHIobmFtZSwgJywnKTtcbitcdFx0bGVuID0gY29tbWEgPyAoc2l6ZV90KShjb21tYSAtIG5hbWUpIDogc3RybGVuKG5hbWUpO1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG1hcF9jcmVhdGVfZmxhZ3MpOyBpKyspIHtcbitcdFx0XHRpZiAoc3RybGVuKG1hcF9jcmVhdGVfZmxhZ3NbaV0ubmFtZSkgPT0gbGVuIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAhc3RybmNtcChuYW1lLCBtYXBfY3JlYXRlX2ZsYWdzW2ldLm5hbWUsIGxlbikpXG4rXHRcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0XHRpZiAoaSA9PSBBUlJBWV9TSVpFKG1hcF9jcmVhdGVfZmxhZ3MpKVxuK1x0XHRcdGdvdG8gaW52YWxpZDtcbitcdFx0cGFyc2VkIHw9IG1hcF9jcmVhdGVfZmxhZ3NbaV0udmFsdWU7XG4rXHRcdGlmIChjb21tYSlcbitcdFx0XHRuYW1lID0gY29tbWEgKyAxO1xuK1x0fSB3aGlsZSAoY29tbWEpO1xuK1xuK1x0KmZsYWdzID0gcGFyc2VkO1xuK1x0cmV0dXJuIDA7XG4raW52YWxpZDpcbitcdHBfZXJyKFwiY2FuJ3QgcGFyc2UgJXMgYXMgbWFwIGNyZWF0aW9uIGZsYWdzXCIsIGFyZyk7XG4rXHRyZXR1cm4gLTE7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZG9fY3JlYXRlKGludCBhcmdjLCBjaGFyICoqYXJndilcbiB7XG4gXHRMSUJCUEZfT1BUUyhicGZfbWFwX2NyZWF0ZV9vcHRzLCBhdHRyKTtcbkBAIC0xMzAxLDkgKzEzNzYsMTQgQEAgc3RhdGljIGludCBkb19jcmVhdGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRcdFx0XHQgIFwibWF4IGVudHJpZXNcIikpXG4gXHRcdFx0XHRnb3RvIGV4aXQ7XG4gXHRcdH0gZWxzZSBpZiAoaXNfcHJlZml4KCphcmd2LCBcImZsYWdzXCIpKSB7XG4tXHRcdFx0aWYgKHBhcnNlX3UzMl9hcmcoXHUwMDI2YXJnYywgXHUwMDI2YXJndiwgXHUwMDI2YXR0ci5tYXBfZmxhZ3MsXG4tXHRcdFx0XHRcdCAgXCJmbGFnc1wiKSlcbitcdFx0XHRORVhUX0FSRygpO1xuK1x0XHRcdGlmIChhdHRyLm1hcF9mbGFncykge1xuK1x0XHRcdFx0cF9lcnIoXCJmbGFncyBhbHJlYWR5IHNwZWNpZmllZFwiKTtcbiBcdFx0XHRcdGdvdG8gZXhpdDtcbitcdFx0XHR9XG4rXHRcdFx0aWYgKHBhcnNlX21hcF9jcmVhdGVfZmxhZ3MoKmFyZ3YsIFx1MDAyNmF0dHIubWFwX2ZsYWdzKSlcbitcdFx0XHRcdGdvdG8gZXhpdDtcbitcdFx0XHRORVhUX0FSRygpO1xuIFx0XHR9IGVsc2UgaWYgKGlzX3ByZWZpeCgqYXJndiwgXCJkZXZcIikpIHtcbiBcdFx0XHRwX2luZm8oXCJXYXJuaW5nOiAnYnBmdG9vbCBtYXAgY3JlYXRlIFsuLi5dIGRldiBcdTAwM2NpZm5hbWVcdTAwM2UnIHN5bnRheCBpcyBkZXByZWNhdGVkLlxcblwiXG4gXHRcdFx0ICAgICAgIFwiR29pbmcgZnVydGhlciwgcGxlYXNlIHVzZSAnb2ZmbG9hZF9kZXYgXHUwMDNjaWZuYW1lXHUwMDNlJyB0byByZXF1ZXN0IGhhcmR3YXJlIG9mZmxvYWQgZm9yIHRoZSBtYXAuXCIpO1xuQEAgLTE0NzQsNiArMTU1NCw3IEBAIHN0YXRpYyBpbnQgZG9faGVscChpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdFwiICAgICAgIERBVEEgOj0geyBbaGV4XSBCWVRFUyB9XFxuXCJcbiBcdFx0XCIgICAgICAgXCIgSEVMUF9TUEVDX1BST0dSQU0gXCJcXG5cIlxuIFx0XHRcIiAgICAgICBWQUxVRSA6PSB7IERBVEEgfCBNQVAgfCBQUk9HIH1cXG5cIlxuK1x0XHRcIiAgICAgICBGTEFHUyA6PSB7IGludGVnZXIgfCBCUEZfRl9OQU1FWyxCUEZfRl9OQU1FLi4uXSB9XFxuXCJcbiBcdFx0XCIgICAgICAgVVBEQVRFX0ZMQUdTIDo9IHsgYW55IHwgZXhpc3QgfCBub2V4aXN0IH1cXG5cIlxuIFx0XHRcIiAgICAgICBUWVBFIDo9IHsgaGFzaCB8IGFycmF5IHwgcHJvZ19hcnJheSB8IHBlcmZfZXZlbnRfYXJyYXkgfCBwZXJjcHVfaGFzaCB8XFxuXCJcbiBcdFx0XCIgICAgICAgICAgICAgICAgIHBlcmNwdV9hcnJheSB8IHN0YWNrX3RyYWNlIHwgY2dyb3VwX2FycmF5IHwgbHJ1X2hhc2ggfFxcblwiXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9tYXBfZmxhZ3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZnRvb2xfbWFwX2ZsYWdzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kNjE3YjQzMjczYThlXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX21hcF9mbGFncy5jXG5AQCAtMCwwICsxLDEwMCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbitcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGZ0b29sX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWFwX2ZsYWdzX3Rlc3Qge1xuK1x0Y29uc3QgY2hhciAqbmFtZTtcbitcdGNvbnN0IGNoYXIgKmZsYWdzO1xuK1x0X191MzIgZXhwZWN0ZWRfZmxhZ3M7XG4rXHRjb25zdCBjaGFyICplcnJvcjtcbit9IHRlc3RzW10gPSB7XG4rXHR7IFwiemVyb1wiLCBcIjBcIiwgMCB9LFxuK1x0eyBcImRlY2ltYWxcIiwgXCIxMjlcIiwgQlBGX0ZfTk9fUFJFQUxMT0MgfCBCUEZfRl9SRE9OTFlfUFJPRyB9LFxuK1x0eyBcImhleGFkZWNpbWFsXCIsIFwiMHg4MVwiLCBCUEZfRl9OT19QUkVBTExPQyB8IEJQRl9GX1JET05MWV9QUk9HIH0sXG4rXHR7IFwib2N0YWxcIiwgXCIwMjAxXCIsIEJQRl9GX05PX1BSRUFMTE9DIHwgQlBGX0ZfUkRPTkxZX1BST0cgfSxcbitcdHsgXCJwb3NpdGl2ZV9zaWduXCIsIFwiKzFcIiwgQlBGX0ZfTk9fUFJFQUxMT0MgfSxcbitcdHsgXCJzaW5nbGVfbmFtZVwiLCBcIkJQRl9GX05PX1BSRUFMTE9DXCIsIEJQRl9GX05PX1BSRUFMTE9DIH0sXG4rXHR7IFwiY29tYmluZWRfbmFtZXNcIiwgXCJCUEZfRl9OT19QUkVBTExPQyxCUEZfRl9SRE9OTFlfUFJPR1wiLFxuK1x0ICBCUEZfRl9OT19QUkVBTExPQyB8IEJQRl9GX1JET05MWV9QUk9HIH0sXG4rXHR7IFwicmVwZWF0ZWRfbmFtZVwiLCBcIkJQRl9GX05PX1BSRUFMTE9DLEJQRl9GX05PX1BSRUFMTE9DXCIsIEJQRl9GX05PX1BSRUFMTE9DIH0sXG4rXHR7IFwidW5rbm93bl9uYW1lXCIsIFwiQlBGX0ZfTk9UX0FfTUFQX0ZMQUdcIiwgMCwgXCJjYW4ndCBwYXJzZVwiIH0sXG4rXHR7IFwib3RoZXJfY29tbWFuZF9mbGFnXCIsIFwiQlBGX0ZfUEFUSF9GRFwiLCAwLCBcImNhbid0IHBhcnNlXCIgfSxcbitcdHsgXCJ1cGRhdGVfZmxhZ1wiLCBcIkJQRl9GX0xPQ0tcIiwgMCwgXCJjYW4ndCBwYXJzZVwiIH0sXG4rXHR7IFwiYWJicmV2aWF0ZWRfbmFtZVwiLCBcIkJQRl9GX05PX1BSRVwiLCAwLCBcImNhbid0IHBhcnNlXCIgfSxcbitcdHsgXCJsb3dlcmNhc2VfbmFtZVwiLCBcImJwZl9mX25vX3ByZWFsbG9jXCIsIDAsIFwiY2FuJ3QgcGFyc2VcIiB9LFxuK1x0eyBcImVtcHR5XCIsIFwiXCIsIDAsIFwiY2FuJ3QgcGFyc2VcIiB9LFxuK1x0eyBcIndoaXRlc3BhY2VcIiwgXCIgXCIsIDAsIFwiY2FuJ3QgcGFyc2VcIiB9LFxuK1x0eyBcImVtcHR5X2xpc3RcIiwgXCIsXCIsIDAsIFwiY2FuJ3QgcGFyc2VcIiB9LFxuK1x0eyBcImxlYWRpbmdfY29tbWFcIiwgXCIsQlBGX0ZfTk9fUFJFQUxMT0NcIiwgMCwgXCJjYW4ndCBwYXJzZVwiIH0sXG4rXHR7IFwidHJhaWxpbmdfY29tbWFcIiwgXCJCUEZfRl9OT19QUkVBTExPQyxcIiwgMCwgXCJjYW4ndCBwYXJzZVwiIH0sXG4rXHR7IFwiZW1wdHlfZWxlbWVudFwiLCBcIkJQRl9GX05PX1BSRUFMTE9DLCxCUEZfRl9SRE9OTFlfUFJPR1wiLCAwLCBcImNhbid0IHBhcnNlXCIgfSxcbitcdHsgXCJudW1iZXJfdGhlbl9uYW1lXCIsIFwiMSxCUEZfRl9SRE9OTFlfUFJPR1wiLCAwLCBcImNhbid0IHBhcnNlXCIgfSxcbitcdHsgXCJuYW1lX3RoZW5fbnVtYmVyXCIsIFwiQlBGX0ZfTk9fUFJFQUxMT0MsMTI4XCIsIDAsIFwiY2FuJ3QgcGFyc2VcIiB9LFxuK1x0eyBcIm51bWVyaWNfbGlzdFwiLCBcIjEsMTI4XCIsIDAsIFwiY2FuJ3QgcGFyc2VcIiB9LFxuK1x0eyBcIndoaXRlc3BhY2VfaW5fbGlzdFwiLCBcIkJQRl9GX05PX1BSRUFMTE9DLCBCUEZfRl9SRE9OTFlfUFJPR1wiLCAwLCBcImNhbid0IHBhcnNlXCIgfSxcbitcdHsgXCJvdmVyZmxvd191MzJcIiwgXCI0Mjk0OTY3Mjk2XCIsIDAsIFwiY2FuJ3QgcGFyc2VcIiB9LFxuK1x0eyBcIm92ZXJmbG93X2hleFwiLCBcIjB4MTAwMDAwMDAwXCIsIDAsIFwiY2FuJ3QgcGFyc2VcIiB9LFxuK1x0eyBcIm92ZXJmbG93X3U2NFwiLCBcIjE4NDQ2NzQ0MDczNzA5NTUxNjE2XCIsIDAsIFwiY2FuJ3QgcGFyc2VcIiB9LFxuK1x0eyBcIm5lZ2F0aXZlXCIsIFwiLTFcIiwgMCwgXCJjYW4ndCBwYXJzZVwiIH0sXG4rXHQvKiBOdW1lcmljIGJpdHMgdW5rbm93biB0byBicGZ0b29sIG11c3Qgc3RpbGwgcmVhY2ggdGhlIGtlcm5lbC4gKi9cbitcdHsgXCJhbGxfYml0c1wiLCBcIjB4ZmZmZmZmZmZcIiwgMCwgXCJtYXAgY3JlYXRlIGZhaWxlZFwiIH0sXG4rXHQvKiBUaGUga2VybmVsIHZhbGlkYXRlcyBjb21iaW5hdGlvbnMgb2Yga25vd24gbWFwIGNyZWF0aW9uIGZsYWdzLiAqL1xuK1x0eyBcImludmFsaWRfY29tYmluYXRpb25cIiwgXCJCUEZfRl9SRE9OTFksQlBGX0ZfV1JPTkxZXCIsIDAsIFwibWFwIGNyZWF0ZSBmYWlsZWRcIiB9LFxuK307XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9tYXBfZmxhZ3MoY29uc3Qgc3RydWN0IG1hcF9mbGFnc190ZXN0ICp0ZXN0LCBjb25zdCBjaGFyICpwYXRoKVxuK3tcbitcdGNoYXIgY21kW01BWF9CUEZUT09MX0NNRF9MRU5dLCBvdXRwdXRbMTAyNF0gPSB7fTtcbitcdHN0cnVjdCBicGZfbWFwX2luZm8gaW5mbyA9IHt9O1xuK1x0X191MzIgaW5mb19sZW4gPSBzaXplb2YoaW5mbyk7XG4rXHRpbnQgZmQsIGVycjtcbitcbitcdC8qIExldCB0aGUgZmxhZ3MgcGFyc2VyIGhhbmRsZSBuZWdhdGl2ZSBudW1iZXJzIGluc3RlYWQgb2YgZ2V0b3B0KCkuICovXG4rXHRlcnIgPSBzbnByaW50ZihjbWQsIHNpemVvZihjbWQpLFxuK1x0XHQgICAgICAgXCItLSBtYXAgY3JlYXRlICVzIHR5cGUgaGFzaCBrZXkgNCB2YWx1ZSA0IGVudHJpZXMgMSBuYW1lIGZsYWdzX3Rlc3QgZmxhZ3MgJyVzJyAyXHUwMDNlXHUwMDI2MVwiLFxuK1x0XHQgICAgICAgcGF0aCwgdGVzdC1cdTAwM2VmbGFncyk7XG4rXHRpZiAoIUFTU0VSVF9HVChlcnIsIDAsIFwiZm9ybWF0X2NvbW1hbmRcIikgfHxcbitcdCAgICAhQVNTRVJUX0xUKGVyciwgc2l6ZW9mKGNtZCksIFwiY29tbWFuZF9sZW5ndGhcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGVyciA9IGdldF9icGZ0b29sX2NvbW1hbmRfb3V0cHV0KGNtZCwgb3V0cHV0LCBzaXplb2Yob3V0cHV0KSk7XG4rXHRpZiAodGVzdC1cdTAwM2VlcnJvcikge1xuK1x0XHRBU1NFUlRfTkVRKGVyciwgMCwgXCJyZWplY3RfZmxhZ3NcIik7XG4rXHRcdEFTU0VSVF9IQVNfU1VCU1RSKG91dHB1dCwgdGVzdC1cdTAwM2VlcnJvciwgXCJlcnJvcl9tZXNzYWdlXCIpO1xuK1x0XHRlcnIgPSBhY2Nlc3MocGF0aCwgRl9PSyk7XG4rXHRcdEFTU0VSVF9FUShlcnIsIC0xLCBcIm5vX3BpblwiKTtcbitcdFx0QVNTRVJUX0VRKGVycm5vLCBFTk9FTlQsIFwicGluX2Fic2VudFwiKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImNyZWF0ZV9tYXBcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGZkID0gYnBmX29ial9nZXQocGF0aCk7XG4rXHRpZiAoIUFTU0VSVF9PS19GRChmZCwgXCJvcGVuX21hcFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0aWYgKEFTU0VSVF9PSyhicGZfbWFwX2dldF9pbmZvX2J5X2ZkKGZkLCBcdTAwMjZpbmZvLCBcdTAwMjZpbmZvX2xlbiksIFwibWFwX2luZm9cIikpXG4rXHRcdEFTU0VSVF9FUShpbmZvLm1hcF9mbGFncywgdGVzdC1cdTAwM2VleHBlY3RlZF9mbGFncywgXCJtYXBfZmxhZ3NcIik7XG4rXHRjbG9zZShmZCk7XG4rY2xlYW51cDpcbitcdHVubGluayhwYXRoKTtcbit9XG4rXG4rdm9pZCB0ZXN0X2JwZnRvb2xfbWFwX2ZsYWdzKHZvaWQpXG4re1xuK1x0Y2hhciBkaXJbXSA9IFwiL3N5cy9mcy9icGYvYnBmdG9vbF9mbGFnc19YWFhYWFhcIjtcbitcdGNoYXIgcGF0aFtzaXplb2YoZGlyKSArIHNpemVvZihcIi9tYXBcIildO1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobWtkdGVtcChkaXIpLCBcImNyZWF0ZV9waW5fZGlyXCIpKVxuK1x0XHRyZXR1cm47XG4rXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiJXMvbWFwXCIsIGRpcik7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHRlc3RzKTsgaSsrKSB7XG4rXHRcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KHRlc3RzW2ldLm5hbWUpKVxuK1x0XHRcdHRlc3RfbWFwX2ZsYWdzKFx1MDAyNnRlc3RzW2ldLCBwYXRoKTtcbitcdH1cbitcdEFTU0VSVF9PSyhybWRpcihkaXIpLCBcInJlbW92ZV9waW5fZGlyXCIpO1xuK31cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAyOjAxLjk1NzQyOTA0OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5NDk1NjM4ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogTm8gRnV6emluZyBOZWVkZWQgSGVyZSoqXG5cbk9rYXksIHNvIHRoZSB0YXNrIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBUaW1lIHRvIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gc2VlIHdoYXQgd2UncmUgZGVhbGluZyB3aXRoLiBUaGUgZGlmZiB0b3VjaGVzOiBgdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLWZlYXR1cmUucnN0YCwgYHRvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1tYXAucnN0YCwgYHRvb2xzL2JwZi9icGZ0b29sL2Jhc2gtY29tcGxldGlvbi9icGZ0b29sYCwgYHRvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuY2AsIGB0b29scy9icGYvYnBmdG9vbC9tYWluLmhgLCBgdG9vbHMvYnBmL2JwZnRvb2wvbWFwLmNgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZnRvb2xfbWFwX2ZsYWdzLmNgLlxuXG5Ob3csIGxldCdzIGNvbnN1bHQgdGhlIHJ1bGVzLiBUaGUgbmVnYXRpdmUgY3JpdGVyaWEgYXJlIG15IG1haW4gZm9jdXMgaGVyZS4gSXQncyBvbmx5IHdvcnRoICpub3QqIGZ1enppbmcgaWYgKmFsbCogdGhlIG1vZGlmaWNhdGlvbnMgZmFsbCBpbnRvIHNwZWNpZmljIGNhdGVnb3JpZXMsIHdoaWNoLCBmcm9tIHRoZSBydWxlcywgYm9pbCBkb3duIHRvIG5vbi1rZXJuZWwgY29kZTogZG9jdW1lbnRhdGlvbiwgdXNlci1zcGFjZSB0b29scywgc2VsZi10ZXN0cywgYW5kIHRoZSBsaWtlLiBFc3NlbnRpYWxseSwgYW55dGhpbmcgdGhhdCBkb2Vzbid0IGRpcmVjdGx5IGltcGFjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcyBpcyBhIG5vLWdvIGZvciBmdXp6aW5nLlxuXG5Mb29raW5nIGF0IHRoZXNlIGZpbGVzLCBpdCdzIHByZXR0eSBjbGVhcjogdGhleSdyZSBhbGwgaW4gYHRvb2xzL2JwZi9icGZ0b29sL2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gVGhleSdyZSB1c2VyLXNwYWNlIHRvb2xpbmcgYW5kIHNlbGYtdGVzdHMuICpOb25lKiBvZiB0aGVtIHRvdWNoIGtlcm5lbCBzb3VyY2UgY29kZS4gTm8gZHJpdmVycywgbm8gY29yZSBrZXJuZWwgY29kZSwgbm8gbW9kdWxlcy5cblxuU28sIGFjY29yZGluZyB0byB0aGUgcnVsZXMsIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayBvZiB0aGUgZmlsZSBsaXN0IGFnYWluLiBZZXAsIG5vdGhpbmcgZXZlbiByZW1vdGVseSBjbG9zZSB0byB0aGUga2VybmVsIHByb3Blci4gSXQncyBhbGwgdW5kZXIgYHRvb2xzL2AuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQuIFRpbWUgdG8gY2FsbCBpdCBpbiBhbmQgbWFyayB0aGlzIGFzIG5vdCByZXF1aXJpbmcgZnV6emluZy4gTm8gbmVlZCB0byB3YXN0ZSBjeWNsZXMgb24gdXNlci1zcGFjZSB1dGlsaXRpZXMgaW4gdGhpcyBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODkxLCJPdXRwdXRUb2tlbnMiOjg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDM6MDI6MDYuOTA2OTk1MzMzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHRvb2xpbmcgKGJwZnRvb2wpIGFuZCBzZWxmdGVzdHMgdW5kZXIgdG9vbHMvYnBmL2JwZnRvb2wgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi4gTm8ga2VybmVsLXNwYWNlIGNvZGUgKHZtbGludXggb3Iga2VybmVsIG1vZHVsZXMpIGlzIGFmZmVjdGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSB0b29saW5nIChicGZ0b29sKSBhbmQgc2VsZnRlc3RzIHVuZGVyIHRvb2xzL2JwZi9icGZ0b29sIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYuIE5vIGtlcm5lbC1zcGFjZSBjb2RlICh2bWxpbnV4IG9yIGtlcm5lbCBtb2R1bGVzKSBpcyBhZmZlY3RlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAzOjAyOjA2LjkwNzAxNDY0M1oiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow7wg27[1] Phase: Running StartedAt: 2026-09-11 03:02:18 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7wg27[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-11 03:02:18 +0000 UTC FinishedAt: 2026-09-11 03:02:23 +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,}