Name: series-workflow5sr4c Phase: Failed StartedAt: 2026-08-24 17:31:25 +0000 UTC FinishedAt: 2026-08-24 18:00:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sr4c[0] Phase: Succeeded StartedAt: 2026-08-24 17:31:25 +0000 UTC FinishedAt: 2026-08-24 18:00:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sr4c[0].run-triage Phase: Succeeded StartedAt: 2026-08-24 17:31:25 +0000 UTC FinishedAt: 2026-08-24 18:00:12 +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+CgkJCTx0ZD4yMDI2LzA4LzI0IDE3OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgdmVyaWZpZXIgZGlhZ25vc3RpYyBmdW5jdGlvbnMgKGJwZl9kaWFnX21vZF9iZWdpbi9lbmQpIGFuZCBpbXByb3ZlcyBlcnJvciBtZXNzYWdlcyB3aGVuIGEga2Z1bmMgcmV0dXJucyBhIHN0cnVjdCB0aGF0IGlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSB2ZXJpZmllciBsb2dpYyBvciBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTc6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2NDdjYmViZjFjZjZjNjhiNWVlMDJlNTkwNWI5MWFjYzU2ZjYzNzE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTc6NTY6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBlMDM2YWUyMGJmNmI5Li5jNmFlY2JhNjQzN2FlIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0xMDQwMywxMCAmIzQzOzEwNDAzLDE0IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcbiBcdFx0ICogcmV0dXJuIHRvIHRoZSBjYWxsZXIgd2hhdGV2ZXIgdGhlIGNhbGxlZSBoYWQgaW4gdGhlXG4gXHRcdCAqIHJldHVybiByZWdpc3RlcihzKVxuIFx0XHQgKi9cbi1cdFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXHUwMDI2Y2FsbGVyLVx1MDAzZXJlZ3NbQlBGX1JFR18wXSwgcjAsIEJQRl9ESUFHX01PRF9XUklURSk7XG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yZWdzOyBpJiM0MzsmIzQzOylcbi1cdFx0XHRjYWxsZXItXHUwMDNlcmVnc1tyZXRfcmVnc1tpXV0gPSBjYWxsZWUtXHUwMDNlcmVnc1tyZXRfcmVnc1tpXV07XG4tXHRcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yZWdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHR1MzIgcmVnbm8gPSByZXRfcmVnc1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFx1MDAyNmNhbGxlci1cdTAwM2VyZWdzW3JlZ25vXSwgXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbcmVnbm9dLFxuJiM0MztcdFx0XHRcdFx0ICAgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbiYjNDM7XHRcdFx0Y2FsbGVyLVx1MDAzZXJlZ3NbcmVnbm9dID0gY2FsbGVlLVx1MDAzZXJlZ3NbcmVnbm9dO1xuJiM0MztcdFx0XHRicGZfZGlhZ19tb2RfZW5kKGVudik7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHQvKiBmb3IgY2FsbGJhY2tzIGxpa2UgYnBmX2xvb3Agb3IgYnBmX2Zvcl9lYWNoX21hcF9lbGVtIGdvIGJhY2sgdG8gY2FsbHNpdGUsXG5AQCAtMTE2MTksMTAgJiM0MzsxMTYyMywxNCBAQCBzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfaW1wbGljaXQoY29uc3Qgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLCB1MzIgYXJnX1xuIFx0cmV0dXJuIGFyZ24gXHUwMDNjPSBhcmdfaWR4O1xuIH1cbiBcbi0vKiBSZXR1cm5zIHRydWUgaWYgc3RydWN0IGlzIGNvbXBvc2VkIG9mIHNjYWxhcnMsIDQgbGV2ZWxzIG9mIG5lc3RpbmcgYWxsb3dlZCAqL1xuLWJvb2wgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4tXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHJlYylcbiYjNDM7LypcbiYjNDM7ICogUmV0dXJucyB0cnVlIGlmIHN0cnVjdCBpcyBjb21wb3NlZCBvZiBzY2FsYXJzLCA0IGxldmVscyBvZiBuZXN0aW5nIGFsbG93ZWQuXG4mIzQzOyAqIE9uIGZhaWx1cmUgQGJhZCwgd2hlbiBnaXZlbiwgbmFtZXMgdGhlIG1lbWJlciB0aGF0IG1hZGUgdGhlIGFuc3dlciBubywgc28gYVxuJiM0MzsgKiBkaWFnbm9zdGljIGNhbiBwb2ludCBhdCBpdCByYXRoZXIgdGhhbiBhdCB0aGUgd2hvbGUgdHlwZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIGJ0Zl9zY2FsYXJfc3RydWN0X3dhbGsoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuJiM0MztcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHJlYyxcbiYjNDM7XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqKmJhZClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKm1lbWJlcl90eXBlO1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcjtcbkBAIC0xMTY0MCwyMyAmIzQzOzExNjQ4LDM1IEBAIGJvb2wgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O21heCBzdHJ1Y3QgbmVzdGluZyBkZXB0aCBleGNlZWRlZFxcblwmIzM0Oyk7XG4gXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdFx0fVxuLVx0XHRcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIGJ0ZiwgbWVtYmVyX3R5cGUsIHJlYyAmIzQzOyAxKSlcbiYjNDM7XHRcdFx0aWYgKCFidGZfc2NhbGFyX3N0cnVjdF93YWxrKGVudiwgYnRmLCBtZW1iZXJfdHlwZSwgcmVjICYjNDM7IDEsIGJhZCkpXG4gXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcdFx0aWYgKGJ0Zl90eXBlX2lzX2FycmF5KG1lbWJlcl90eXBlKSkge1xuIFx0XHRcdGFycmF5ID0gYnRmX2FycmF5KG1lbWJlcl90eXBlKTtcbiBcdFx0XHRpZiAoIWFycmF5LVx1MDAzZW5lbGVtcylcbi1cdFx0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdFx0XHRnb3RvIGJhZF9tZW1iZXI7XG4gXHRcdFx0bWVtYmVyX3R5cGUgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGFycmF5LVx1MDAzZXR5cGUsIE5VTEwpO1xuIFx0XHRcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyKG1lbWJlcl90eXBlKSlcbi1cdFx0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdFx0XHRnb3RvIGJhZF9tZW1iZXI7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIobWVtYmVyX3R5cGUpKVxuLVx0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdFx0Z290byBiYWRfbWVtYmVyO1xuIFx0fVxuIFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztiYWRfbWVtYmVyOlxuJiM0MztcdGlmIChiYWQpXG4mIzQzO1x0XHQqYmFkID0gbWVtYmVyO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Ym9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4mIzQzO1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4mIzQzO1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIGludCByZWMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYnRmX3NjYWxhcl9zdHJ1Y3Rfd2FsayhlbnYsIGJ0ZiwgdCwgcmVjLCBOVUxMKTtcbiB9XG4gXG4gZW51bSBrZnVuY19wdHJfYXJnX3R5cGUge1xuQEAgLTE0MDI2LDE3ICYjNDM7MTQwNDYsNDEgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0ICAgIG1ldGEuZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZV0pKVxuIFx0XHRcdF9fbWFya19yZWdfY29uc3RfemVybyhlbnYsIFx1MDAyNnJlZ3NbQlBGX1JFR18wXSk7XG4gXHR9IGVsc2UgaWYgKGJ0Zl90eXBlX2lzX3N0cnVjdCh0KSkge1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKmJhZCA9IE5VTEw7XG4mIzQzO1xuIFx0XHQvKlxuIFx0XHQgKiBUaGUgcmV0dXJuZWQgc3RydWN0IGNvbWVzIGJhY2sgYXMgcmF3IHJlZ2lzdGVyIGJpdHMgbW9kZWxlZFxuIFx0XHQgKiBhcyBhbiB1bmtub3duIHNjYWxhciwgc28gaXQgbXVzdCBjb250YWluIG9ubHkgc2NhbGFyczpcbiBcdFx0ICogb3RoZXJ3aXNlIGEgcG9pbnRlciBmaWVsZCB3b3VsZCBiZSBsYXVuZGVyZWQgaW50byBhIHNjYWxhclxuIFx0XHQgKiBhbmQgZXNjYXBlIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZy5cbiBcdFx0ICovXG4tXHRcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIGRlc2NfYnRmLCB0LCAwKSkge1xuJiM0MztcdFx0aWYgKCFidGZfc2NhbGFyX3N0cnVjdF93YWxrKGVudiwgZGVzY19idGYsIHQsIDAsIFx1MDAyNmJhZCkpIHtcbiYjNDM7XHRcdFx0Y29uc3QgY2hhciAqbWVtYmVyX25vdGUgPSBcJiMzNDtcJiMzNDs7XG4mIzQzO1xuIFx0XHRcdHZlcmJvc2UoZW52LFxuIFx0XHRcdFx0XCYjMzQ7a2VybmVsIGZ1bmN0aW9uICVzIHJldHVybnMgJXMgJXMgdGhhdCBpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFyc1xcblwmIzM0OyxcbiBcdFx0XHRcdGZ1bmNfbmFtZSwgYnRmX3R5cGVfc3RyKHQpLFxuIFx0XHRcdFx0YnRmX25hbWVfYnlfb2Zmc2V0KGRlc2NfYnRmLCB0LVx1MDAzZW5hbWVfb2ZmKSk7XG4mIzQzO1x0XHRcdGlmIChiYWQpIHtcbiYjNDM7XHRcdFx0XHRjb25zdCBjaGFyICpiYWRfbmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChkZXNjX2J0ZiwgYmFkLVx1MDAzZW5hbWVfb2ZmKTtcbiYjNDM7XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmJhZF90eXBlO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRiYWRfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCBiYWQtXHUwMDNldHlwZSwgTlVMTCk7XG4mIzQzO1x0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O21lbWJlciAmIzM5OyVzJiMzOTsgaGFzIHR5cGUgJXNcXG5cJiMzNDssIGJhZF9uYW1lLFxuJiM0MztcdFx0XHRcdFx0YnRmX3R5cGVfc3RyKGJhZF90eXBlKSk7XG4mIzQzO1x0XHRcdFx0bWVtYmVyX25vdGUgPSBicGZfZGlhZ19mbXQoXG4mIzQzO1x0XHRcdFx0XHRlbnYsIFwmIzM0OyBJdHMgbWVtYmVyICYjMzk7JXMmIzM5OyBpcyAlcywgbm90IGEgc2NhbGFyLlwmIzM0OywgYmFkX25hbWUsXG4mIzQzO1x0XHRcdFx0XHRidGZfdHlwZV9zdHIoYmFkX3R5cGUpKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRicGZfZGlhZ19wcm9ncmFtX3N0cnVjdHVyZShcbiYjNDM7XHRcdFx0XHRlbnYsIGluc25faWR4LCBcJiMzNDt1bnN1cHBvcnRlZCBrZXJuZWwgZnVuY3Rpb24gcmV0dXJuIHR5cGVcJiMzNDssXG4mIzQzO1x0XHRcdFx0XCYjMzQ7Q2FsbCBhIGtlcm5lbCBmdW5jdGlvbiB0aGF0IHJldHVybnMgb25seSBzY2FsYXJzIGJ5IHZhbHVlLlwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcJiMzNDslcygpIHJldHVybnMgJXMgJXMgYnkgdmFsdWUuJXMgXCYjMzQ7XG4mIzQzO1x0XHRcdFx0XCYjMzQ7QSBieS12YWx1ZSByZXR1cm4gYXJyaXZlcyBhcyByYXcgcmVnaXN0ZXIgYml0cyB0aGF0IHRoZSB2ZXJpZmllciBcJiMzNDtcbiYjNDM7XHRcdFx0XHRcJiMzNDtjYW4gb25seSBtb2RlbCBhcyB1bmtub3duIHNjYWxhcnMsIHNvIGUuZy4gYSBwb2ludGVyIG1heSBsb3NlIFwmIzM0O1xuJiM0MztcdFx0XHRcdFwmIzM0O3RoZSBwcm92ZW5hbmNlIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcgdGhhdCBtYWtlIGl0IHNhZmUgdG8gdXNlLlwmIzM0OyxcbiYjNDM7XHRcdFx0XHRmdW5jX25hbWUsIGJ0Zl90eXBlX3N0cih0KSxcbiYjNDM7XHRcdFx0XHRidGZfbmFtZV9ieV9vZmZzZXQoZGVzY19idGYsIHQtXHUwMDNlbmFtZV9vZmYpLCBtZW1iZXJfbm90ZSk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcdFx0bWFya19rZnVuY19yZXRfcmVncyhlbnYsIHJlZ3MsIHQtXHUwMDNlc2l6ZSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jLmNcbmluZGV4IGQ2YjQyMmFlOTc4NGIuLmJjOWFmZmZjN2M2ODkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuYy5jXG5AQCAtNzIsNiAmIzQzOzcyLDcgQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19mYXN0Y2FsbF9mYWlsKHZvaWQpXG4gU0VDKFwmIzM0O3RjXCYjMzQ7KVxuIF9fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0XG4gX19mYWlsdXJlIF9fbXNnKFwmIzM0O2lzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzXCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDttZW1iZXIgJiMzOTtwJiMzOTsgaGFzIHR5cGUgUFRSXCYjMzQ7KVxuIF9fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfcHRyX2ZhaWwodm9pZClcbiB7XG4gXHRhc20gdm9sYXRpbGUgKFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE3OjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiB2ZXJpZmllciBkaWFnbm9zdGljIGZ1bmN0aW9ucyAoYnBmX2RpYWdfbW9kX2JlZ2luL2VuZCkgYW5kIGltcHJvdmVzIGVycm9yIG1lc3NhZ2VzIHdoZW4gYSBrZnVuYyByZXR1cm5zIGEgc3RydWN0IHRoYXQgaXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnMuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHZlcmlmaWVyIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY0N2NiZWJmMWNmNmM2OGI1ZWUwMmU1OTA1YjkxYWNjNTZmNjM3MTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAyNCAxNzo1Njo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCBlMDM2YWUyMGJmNmI5Li5jNmFlY2JhNjQzN2FlIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC0xMDQwMywxMCAmIzQzOzEwNDAzLDE0IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeCkKIAkJICogcmV0dXJuIHRvIHRoZSBjYWxsZXIgd2hhdGV2ZXIgdGhlIGNhbGxlZSBoYWQgaW4gdGhlCiAJCSAqIHJldHVybiByZWdpc3RlcihzKQogCQkgKi8KLQkJYnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgJmFtcDtjYWxsZXItJmd0O3JlZ3NbQlBGX1JFR18wXSwgcjAsIEJQRl9ESUFHX01PRF9XUklURSk7Ci0JCWZvciAoaSA9IDA7IGkgJmx0OyBucmVnczsgaSYjNDM7JiM0MzspCi0JCQljYWxsZXItJmd0O3JlZ3NbcmV0X3JlZ3NbaV1dID0gY2FsbGVlLSZndDtyZWdzW3JldF9yZWdzW2ldXTsKLQkJYnBmX2RpYWdfbW9kX2VuZChlbnYpOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG5yZWdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCXUzMiByZWdubyA9IHJldF9yZWdzW2ldOwomIzQzOwomIzQzOwkJCWJwZl9kaWFnX21vZF9iZWdpbihlbnYsICZhbXA7Y2FsbGVyLSZndDtyZWdzW3JlZ25vXSwgJmFtcDtjYWxsZWUtJmd0O3JlZ3NbcmVnbm9dLAomIzQzOwkJCQkJICAgQlBGX0RJQUdfTU9EX1dSSVRFKTsKJiM0MzsJCQljYWxsZXItJmd0O3JlZ3NbcmVnbm9dID0gY2FsbGVlLSZndDtyZWdzW3JlZ25vXTsKJiM0MzsJCQlicGZfZGlhZ19tb2RfZW5kKGVudik7CiYjNDM7CQl9CiAJfQogCiAJLyogZm9yIGNhbGxiYWNrcyBsaWtlIGJwZl9sb29wIG9yIGJwZl9mb3JfZWFjaF9tYXBfZWxlbSBnbyBiYWNrIHRvIGNhbGxzaXRlLApAQCAtMTE2MTksMTAgJiM0MzsxMTYyMywxNCBAQCBzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfaW1wbGljaXQoY29uc3Qgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLCB1MzIgYXJnXwogCXJldHVybiBhcmduICZsdDs9IGFyZ19pZHg7CiB9CiAKLS8qIFJldHVybnMgdHJ1ZSBpZiBzdHJ1Y3QgaXMgY29tcG9zZWQgb2Ygc2NhbGFycywgNCBsZXZlbHMgb2YgbmVzdGluZyBhbGxvd2VkICovCi1ib29sIGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCBpbnQgcmVjKQomIzQzOy8qCiYjNDM7ICogUmV0dXJucyB0cnVlIGlmIHN0cnVjdCBpcyBjb21wb3NlZCBvZiBzY2FsYXJzLCA0IGxldmVscyBvZiBuZXN0aW5nIGFsbG93ZWQuCiYjNDM7ICogT24gZmFpbHVyZSBAYmFkLCB3aGVuIGdpdmVuLCBuYW1lcyB0aGUgbWVtYmVyIHRoYXQgbWFkZSB0aGUgYW5zd2VyIG5vLCBzbyBhCiYjNDM7ICogZGlhZ25vc3RpYyBjYW4gcG9pbnQgYXQgaXQgcmF0aGVyIHRoYW4gYXQgdGhlIHdob2xlIHR5cGUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgYnRmX3NjYWxhcl9zdHJ1Y3Rfd2FsayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiYjNDM7CQkJCSAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHJlYywKJiM0MzsJCQkJICAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKipiYWQpCiB7CiAJY29uc3Qgc3RydWN0IGJ0Zl90eXBlICptZW1iZXJfdHlwZTsKIAljb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyOwpAQCAtMTE2NDAsMjMgJiM0MzsxMTY0OCwzNSBAQCBib29sIGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCQl2ZXJib3NlKGVudiwgJiMzNDttYXggc3RydWN0IG5lc3RpbmcgZGVwdGggZXhjZWVkZWRcbiYjMzQ7KTsKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9Ci0JCQlpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBidGYsIG1lbWJlcl90eXBlLCByZWMgJiM0MzsgMSkpCiYjNDM7CQkJaWYgKCFidGZfc2NhbGFyX3N0cnVjdF93YWxrKGVudiwgYnRmLCBtZW1iZXJfdHlwZSwgcmVjICYjNDM7IDEsIGJhZCkpCiAJCQkJcmV0dXJuIGZhbHNlOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKGJ0Zl90eXBlX2lzX2FycmF5KG1lbWJlcl90eXBlKSkgewogCQkJYXJyYXkgPSBidGZfYXJyYXkobWVtYmVyX3R5cGUpOwogCQkJaWYgKCFhcnJheS0mZ3Q7bmVsZW1zKQotCQkJCXJldHVybiBmYWxzZTsKJiM0MzsJCQkJZ290byBiYWRfbWVtYmVyOwogCQkJbWVtYmVyX3R5cGUgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGFycmF5LSZndDt0eXBlLCBOVUxMKTsKIAkJCWlmICghYnRmX3R5cGVfaXNfc2NhbGFyKG1lbWJlcl90eXBlKSkKLQkJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQkJCWdvdG8gYmFkX21lbWJlcjsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmICghYnRmX3R5cGVfaXNfc2NhbGFyKG1lbWJlcl90eXBlKSkKLQkJCXJldHVybiBmYWxzZTsKJiM0MzsJCQlnb3RvIGJhZF9tZW1iZXI7CiAJfQogCXJldHVybiB0cnVlOwomIzQzOwomIzQzO2JhZF9tZW1iZXI6CiYjNDM7CWlmIChiYWQpCiYjNDM7CQkqYmFkID0gbWVtYmVyOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAomIzQzOwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiYjNDM7CQkJICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHJlYykKJiM0Mzt7CiYjNDM7CXJldHVybiBidGZfc2NhbGFyX3N0cnVjdF93YWxrKGVudiwgYnRmLCB0LCByZWMsIE5VTEwpOwogfQogCiBlbnVtIGtmdW5jX3B0cl9hcmdfdHlwZSB7CkBAIC0xNDAyNiwxNyAmIzQzOzE0MDQ2LDQxIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCSAgICBtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdKSkKIAkJCV9fbWFya19yZWdfY29uc3RfemVybyhlbnYsICZhbXA7cmVnc1tCUEZfUkVHXzBdKTsKIAl9IGVsc2UgaWYgKGJ0Zl90eXBlX2lzX3N0cnVjdCh0KSkgewomIzQzOwkJY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKmJhZCA9IE5VTEw7CiYjNDM7CiAJCS8qCiAJCSAqIFRoZSByZXR1cm5lZCBzdHJ1Y3QgY29tZXMgYmFjayBhcyByYXcgcmVnaXN0ZXIgYml0cyBtb2RlbGVkCiAJCSAqIGFzIGFuIHVua25vd24gc2NhbGFyLCBzbyBpdCBtdXN0IGNvbnRhaW4gb25seSBzY2FsYXJzOgogCQkgKiBvdGhlcndpc2UgYSBwb2ludGVyIGZpZWxkIHdvdWxkIGJlIGxhdW5kZXJlZCBpbnRvIGEgc2NhbGFyCiAJCSAqIGFuZCBlc2NhcGUgcHJvdmVuYW5jZSBhbmQgcmVmZXJlbmNlIHRyYWNraW5nLgogCQkgKi8KLQkJaWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgZGVzY19idGYsIHQsIDApKSB7CiYjNDM7CQlpZiAoIWJ0Zl9zY2FsYXJfc3RydWN0X3dhbGsoZW52LCBkZXNjX2J0ZiwgdCwgMCwgJmFtcDtiYWQpKSB7CiYjNDM7CQkJY29uc3QgY2hhciAqbWVtYmVyX25vdGUgPSAmIzM0OyYjMzQ7OwomIzQzOwogCQkJdmVyYm9zZShlbnYsCiAJCQkJJiMzNDtrZXJuZWwgZnVuY3Rpb24gJXMgcmV0dXJucyAlcyAlcyB0aGF0IGlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzXG4mIzM0OywKIAkJCQlmdW5jX25hbWUsIGJ0Zl90eXBlX3N0cih0KSwKIAkJCQlidGZfbmFtZV9ieV9vZmZzZXQoZGVzY19idGYsIHQtJmd0O25hbWVfb2ZmKSk7CiYjNDM7CQkJaWYgKGJhZCkgewomIzQzOwkJCQljb25zdCBjaGFyICpiYWRfbmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChkZXNjX2J0ZiwgYmFkLSZndDtuYW1lX29mZik7CiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqYmFkX3R5cGU7CiYjNDM7CiYjNDM7CQkJCWJhZF90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIGJhZC0mZ3Q7dHlwZSwgTlVMTCk7CiYjNDM7CQkJCXZlcmJvc2UoZW52LCAmIzM0O21lbWJlciAmIzM5OyVzJiMzOTsgaGFzIHR5cGUgJXNcbiYjMzQ7LCBiYWRfbmFtZSwKJiM0MzsJCQkJCWJ0Zl90eXBlX3N0cihiYWRfdHlwZSkpOwomIzQzOwkJCQltZW1iZXJfbm90ZSA9IGJwZl9kaWFnX2ZtdCgKJiM0MzsJCQkJCWVudiwgJiMzNDsgSXRzIG1lbWJlciAmIzM5OyVzJiMzOTsgaXMgJXMsIG5vdCBhIHNjYWxhci4mIzM0OywgYmFkX25hbWUsCiYjNDM7CQkJCQlidGZfdHlwZV9zdHIoYmFkX3R5cGUpKTsKJiM0MzsJCQl9CiYjNDM7CQkJYnBmX2RpYWdfcHJvZ3JhbV9zdHJ1Y3R1cmUoCiYjNDM7CQkJCWVudiwgaW5zbl9pZHgsICYjMzQ7dW5zdXBwb3J0ZWQga2VybmVsIGZ1bmN0aW9uIHJldHVybiB0eXBlJiMzNDssCiYjNDM7CQkJCSYjMzQ7Q2FsbCBhIGtlcm5lbCBmdW5jdGlvbiB0aGF0IHJldHVybnMgb25seSBzY2FsYXJzIGJ5IHZhbHVlLiYjMzQ7LAomIzQzOwkJCQkmIzM0OyVzKCkgcmV0dXJucyAlcyAlcyBieSB2YWx1ZS4lcyAmIzM0OwomIzQzOwkJCQkmIzM0O0EgYnktdmFsdWUgcmV0dXJuIGFycml2ZXMgYXMgcmF3IHJlZ2lzdGVyIGJpdHMgdGhhdCB0aGUgdmVyaWZpZXIgJiMzNDsKJiM0MzsJCQkJJiMzNDtjYW4gb25seSBtb2RlbCBhcyB1bmtub3duIHNjYWxhcnMsIHNvIGUuZy4gYSBwb2ludGVyIG1heSBsb3NlICYjMzQ7CiYjNDM7CQkJCSYjMzQ7dGhlIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZyB0aGF0IG1ha2UgaXQgc2FmZSB0byB1c2UuJiMzNDssCiYjNDM7CQkJCWZ1bmNfbmFtZSwgYnRmX3R5cGVfc3RyKHQpLAomIzQzOwkJCQlidGZfbmFtZV9ieV9vZmZzZXQoZGVzY19idGYsIHQtJmd0O25hbWVfb2ZmKSwgbWVtYmVyX25vdGUpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJbWFya19rZnVuY19yZXRfcmVncyhlbnYsIHJlZ3MsIHQtJmd0O3NpemUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jLmMKaW5kZXggZDZiNDIyYWU5Nzg0Yi4uYmM5YWZmZmM3YzY4OSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuYy5jCkBAIC03Miw2ICYjNDM7NzIsNyBAQCBfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX2Zhc3RjYWxsX2ZhaWwodm9pZCkKIFNFQygmIzM0O3RjJiMzNDspCiBfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NAogX19mYWlsdXJlIF9fbXNnKCYjMzQ7aXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnMmIzM0OykKJiM0MztfX21zZygmIzM0O21lbWJlciAmIzM5O3AmIzM5OyBoYXMgdHlwZSBQVFImIzM0OykKIF9fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfcHRyX2ZhaWwodm9pZCkKIHsKIAlhc20gdm9sYXRpbGUgKAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODQyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUaGlzIEJQRiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSXQgc2VlbXMgdGhleSYjMzk7dmUgcmVmYWN0b3JlZCBgcHJlcGFyZV9mdW5jX2V4aXRgLiBJbnN0ZWFkIG9mIHRoYXQgbW9ub2xpdGhpYyBgYnBmX2RpYWdfbW9kYCBjYWxsIGFyb3VuZCB0aGUgd2hvbGUgbG9vcCBjb25jZXJuaW5nIGByZXRfcmVnc2AsIHRoZXkmIzM5O3JlIGRvaW5nIGBicGZfZGlhZ19tb2RfYmVnaW5gIGFuZCBgYnBmX2RpYWdfbW9kX2VuZGAgZm9yIGVhY2ggcmVnaXN0ZXIgaW5kaXZpZHVhbGx5LiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBtYWtlcyBzZW5zZSBmb3IgbW9yZSBncmFudWxhciBkaWFnbm9zdGljcy4gQW5kIEkgc2VlIGEgY2hhbmdlIHRvIGBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0YCDigJMgdGhleSYjMzk7cmUgcHVsbGluZyBvdXQgdGhhdCAmIzM0O2JhZCBtZW1iZXImIzM0OyBsb2dpYyBpbnRvIGBidGZfc2NhbGFyX3N0cnVjdF93YWxrYCwgd2hpY2ggc2VlbXMgY2xlYW5lci4gVGhlbiwgdGhleeKAmXJlIGxldmVyYWdpbmcgdGhhdCBpbiBgY2hlY2tfa2Z1bmNfY2FsbGAgdG8gZ2l2ZSBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMgaWYgYSBrZnVuYyByZXR1cm5zIGEgc3RydWN0IHRoYXQmIzM5O3MgKm5vdCoganVzdCBzY2FsYXJzLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGVwIHRvd2FyZCBtb3JlIGhlbHBmdWwgZGVidWdnaW5nLgoKSG9sZCBvbi4uLiB0aG9zZSBgYnBmX2RpYWdfbW9kX2JlZ2luYCBhbmQgYGJwZl9kaWFnX21vZF9lbmRgIGZ1bmN0aW9ucy4uLiBJIHJlY29nbml6ZSB0aG9zZSBuYW1lcyBhcyBiZWluZyBkaWFnbm9zdGljLXJlbGF0ZWQuIExldCBtZSBxdWlja2x5IGRpZyBpbnRvIHdoYXQgdGhvc2UgZG8gZXhhY3RseS4gR290dGEgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRob3NlIGNoYW5nZXMgZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTc6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2RpYWdfbW9kX2JlZ2luJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz0xNTc5PXN0YXRpYyBib29sIHJlZ190b190YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTYxOS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzoxNjIwOnZvaWQgYnBmX2RpYWdfbW9kX2JlZ2luKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTYyMS1cdFx0XHRjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb3JpZ2luLCBlbnVtIGJwZl9kaWFnX21vZF9yZWFzb24gcmVhc29uKVxuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuaD05Nz12b2lkIGJwZl9kaWFnX3JlY29yZF9icmFuY2goc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LCBib29sIGNvbmRfdHJ1ZSk7XG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmg6OTg6dm9pZCBicGZfZGlhZ19tb2RfYmVnaW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuaC05OS1cdFx0XHRjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb3JpZ2luLCBlbnVtIGJwZl9kaWFnX21vZF9yZWFzb24gcmVhc29uKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzQ5MT1zdGF0aWMgdm9pZCBzYXZlX3JlZ2lzdGVyX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM0OTctXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzQ5ODpcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFx1MDAyNnN0YXRlLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIsIHJlZywgQlBGX0RJQUdfTU9EX1NQSUxMKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNDk5LVx0c3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ciA9ICpyZWc7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTM5MDY9c3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zOTI5LVx0aWYgKGRzdF9yZWdubyBcdTAwM2U9IDApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzkzMDpcdFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXHUwMDI2c3RhdGUtXHUwMDNlcmVnc1tkc3RfcmVnbm9dLCByZWcsIEJQRl9ESUFHX01PRF9XUklURSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzkzMS1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDIxMj1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX2FyZ193cml0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MjM1LVx0YXJnID0gXHUwMDI2c3RhdGUtXHUwMDNlc3RhY2tfYXJnX3JlZ3Nbc3BpXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MjM2Olx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgYXJnLCB2YWx1ZV9yZWcsIEJQRl9ESUFHX01PRF9XUklURSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDIzNy1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDI1NT1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX2FyZ19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQyNzctXHRjdXIgPSB2c3RhdGUtXHUwMDNlZnJhbWVbdnN0YXRlLVx1MDAzZWN1cmZyYW1lXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0Mjc4Olx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXHUwMDI2Y3VyLVx1MDAzZXJlZ3NbZHN0X3JlZ25vXSwgYXJnLCBCUEZfRElBR19NT0RfV1JJVEUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTQyNzktXHRjdXItXHUwMDNlcmVnc1tkc3RfcmVnbm9dID0gKmFyZztcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjY2Mz1zdGF0aWMgaW50IGNoZWNrX2xvYWRfbWVtKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY5Ni1cdCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjY2OTc6XHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBcdTAwMjZyZWdzW2luc24tXHUwMDNlZHN0X3JlZ10sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY5OC1cdGVyciA9IGNoZWNrX21lbV9hY2Nlc3MoZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgsIHJlZ3MgJiM0MzsgaW5zbi1cdTAwM2VzcmNfcmVnLCBhcmdub19mcm9tX3JlZyhpbnNuLVx1MDAzZXNyY19yZWcpLCBpbnNuLVx1MDAzZW9mZixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Njc0OD1zdGF0aWMgaW50IGNoZWNrX2F0b21pY19ybXcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjgxMS1cdGlmICghZXJyIFx1MDAyNlx1MDAyNiBsb2FkX3JlZyBcdTAwM2U9IDApIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2ODEyOlx0XHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBjdXJfcmVncyhlbnYpICYjNDM7IGxvYWRfcmVnLCBOVUxMLCBCUEZfRElBR19NT0RfV1JJVEUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY4MTMtXHRcdGVyciA9IGNoZWNrX21lbV9hY2Nlc3MoZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgsIGRzdF9yZWcsIGFyZ25vX2Zyb21fcmVnKGluc24tXHUwMDNlZHN0X3JlZyksXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTk1NzQ9c3RhdGljIHZvaWQgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTU4Mi1cdFx0aWYgKHJlZy1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fUkNVKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTU4MzpcdFx0XHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCByZWcsIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTU4NC1cdFx0XHRyZWctXHUwMDNldHlwZSBcdTAwMjY9IH4oTUVNX1JDVSB8IFBUUl9NQVlCRV9OVUxMKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTU5MT1zdGF0aWMgaW50IHJlZl9jb252ZXJ0X2FsbG9jX3JjdV9wcm90ZWN0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGlkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NjA0LVx0XHRpZiAoKHJlZy1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fQUxMT0MpIFx1MDAyNlx1MDAyNiAocmVnLVx1MDAzZXR5cGUgXHUwMDI2IE1FTV9QRVJDUFUpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTYwNTpcdFx0XHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCByZWcsIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTYwNi1cdFx0XHRyZWctXHUwMDNlaWQgPSAwO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05OTI4PXN0YXRpYyBpbnQgY2hlY2tfZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTk4Ny1cdFx0ZWxzZVxua2VybmVsL2JwZi92ZXJpZmllci5jOjk5ODg6XHRcdFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXHUwMDI2Y2FsbGVyLVx1MDAzZXJlZ3NbQlBGX1JFR18wXSwgTlVMTCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05OTg5LVx0XHRjbGVhcl9jYWxsZXJfc2F2ZWRfcmVncyhlbnYsIGNhbGxlci1cdTAwM2VyZWdzKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAzNTM9c3RhdGljIGludCBwcmVwYXJlX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgKmluc25faWR4KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQwOC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDQwOTpcdFx0XHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBcdTAwMjZjYWxsZXItXHUwMDNlcmVnc1tyZWdub10sIFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW3JlZ25vXSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQxMC1cdFx0XHRcdFx0ICAgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA4MzI9c3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMDk1LVx0YnBmX2RpYWdfcmVjb3JkX2NhbGxlcl9zYXZlZChlbnYsIHJlZ3MpO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjExMDk2Olx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXHUwMDI2cmVnc1tCUEZfUkVHXzBdLCBOVUxMLCBCUEZfRElBR19NT0RfV1JJVEUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExMDk3LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ0FMTEVSX1NBVkVEX1JFR1M7IGkmIzQzOyYjNDM7KSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjY4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjY5Olx0XHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBcdTAwMjZyZWdzW0JQRl9SRUdfMF0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyNzAtXHRcdHJlZ3NbQlBGX1JFR18wXS50eXBlIFx1MDAyNj0gflBUUl9NQVlCRV9OVUxMO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzc3OD1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDAyMS1cdGJwZl9kaWFnX3JlY29yZF9jYWxsZXJfc2F2ZWQoZW52LCByZWdzKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDAyMjpcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFx1MDAyNnJlZ3NbQlBGX1JFR18wXSwgTlVMTCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDAyMy1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIENBTExFUl9TQVZFRF9SRUdTOyBpJiM0MzsmIzQzOykge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNTkyMz1zdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTI4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1OTI5Olx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXHUwMDI2cmVnc1tpbnNuLVx1MDAzZWRzdF9yZWddLCBOVUxMLCBCUEZfRElBR19NT0RfV1JJVEUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTMwLVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzE4NT1zdGF0aWMgaW50IGNoZWNrX2xkX2ltbShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MjAyLVx0ZHN0X3JlZyA9IFx1MDAyNnJlZ3NbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzIwMzpcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIGRzdF9yZWcsIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcyMDQtXHRpZiAoaW5zbi1cdTAwM2VzcmNfcmVnID09IDApIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTczMTM9c3RhdGljIGludCBjaGVja19sZF9hYnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzM2MS1cdGJwZl9kaWFnX3JlY29yZF9jYWxsZXJfc2F2ZWQoZW52LCByZWdzKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzM2MjpcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFx1MDAyNnJlZ3NbQlBGX1JFR18wXSwgTlVMTCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzM2My1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIENBTExFUl9TQVZFRF9SRUdTOyBpJiM0MzsmIzQzOykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE3OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NjQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIFZlcmlmaWVyIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIE15IGluaXRpYWwgc2NhbiBzaG93cyB0aGUgY29yZSBtb2RpZmljYXRpb24gaW4gYHByZXBhcmVfZnVuY19leGl0YC4gSXQgYXBwZWFycyB0aGV5JiMzOTtyZSBub3cgd3JhcHBpbmcgdGhlIHJlZ2lzdGVyIGNvcHkg4oCTIHNwZWNpZmljYWxseSwgYGNhbGxlci0mZ3Q7cmVnc1tyZWdub10gPSBjYWxsZWUtJmd0O3JlZ3NbcmVnbm9dO2Ag4oCTIHdpdGggYGJwZl9kaWFnX21vZF9iZWdpbmAgYW5kIGBicGZfZGlhZ19tb2RfZW5kYCBmb3IgKmVhY2gqIHJlZ2lzdGVyLiBUaGF0JiMzOTtzIGEgYml0IHVudXN1YWwuIFByZXZpb3VzbHksIGl0IGxvb2tlZCBsaWtlIHRoZXkgd2VyZSBkb2luZyBhIHNpbmdsZSB3cmFwcGVyIGZvciB0aGUgZW50aXJlIHJlZ2lzdGVyIHNldC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIHVzZSBvZiBgYnBmX2RpYWdfbW9kX2JlZ2luYC4gVGhpcyBzY3JlYW1zICpkaWFnbm9zdGljKiBmdW5jdGlvbiwgc28gaXMgdGhpcyBqdXN0IGxvZ2dpbmcsIG9yIGRvZXMgdGhpcyBhY3R1YWxseSBpbnRyb2R1Y2UgZnVuY3Rpb25hbCBjaGFuZ2VzPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYnBmX2RpYWdfbW9kX2JlZ2luYC4gR290dGEgc2VlIGlmIHRoaXMgaGFzIHNpZGUgZWZmZWN0cyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTc6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBicGZfZGlhZ19tb2RfYmVnaW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTE1Nzk9c3RhdGljIGJvb2wgcmVnX3RvX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNjE5LVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE2MjA6dm9pZCBicGZfZGlhZ19tb2RfYmVnaW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNjIxLVx0XHRcdGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpvcmlnaW4sIGVudW0gYnBmX2RpYWdfbW9kX3JlYXNvbiByZWFzb24pXG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5oPTk3PXZvaWQgYnBmX2RpYWdfcmVjb3JkX2JyYW5jaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGJvb2wgY29uZF90cnVlKTtcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuaDo5ODp2b2lkIGJwZl9kaWFnX21vZF9iZWdpbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5oLTk5LVx0XHRcdGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpvcmlnaW4sIGVudW0gYnBmX2RpYWdfbW9kX3JlYXNvbiByZWFzb24pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE3OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2MTcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGRpYWdub3N0aWMgbW9kdWxlIGZ1bmN0aW9uczoKCioqRGl2aW5nIGludG8gQlBGIERpYWdub3N0aWNzIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBrZXJuZWwvYnBmL2RpYWdub3N0aWNzLmNgLiBTZWVtcyBsaWtlIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEJQRiBzdWJzeXN0ZW0gaGFuZGxlcyBpdHMgb3duIGRpYWdub3N0aWNzLCByaWdodD8gVGhlIGtleSBoZXJlIGFyZSB0aGUgYGJwZl9kaWFnX21vZF9iZWdpbmAgYW5kIGBicGZfZGlhZ19tb2RfZW5kYCBmdW5jdGlvbnMuIEkmIzM5O20gYXNzdW1pbmcgdGhlc2UgYXJlIHNvbWUga2luZCBvZiBzY29wZSBtYXJrZXJzIHdpdGhpbiB0aGUgbW9kdWxlLCBmb3IgZWl0aGVyIGluc3RydW1lbnRhdGlvbiBvciByZXNvdXJjZSB0cmFja2luZywgb3IgbWF5YmUgZXZlbiBkZWJ1Z2dpbmcgYXNzaXN0YW5jZSB3aGVuIHNvbWV0aGluZyBnb2VzIHdyb25nIHdpdGggQlBGIHByb2dyYW1zLgoKSSYjMzk7bSBiZXR0aW5nIGBicGZfZGlhZ19tb2RfYmVnaW5gIHNldHMgdXAgc29tZSBpbml0aWFsIGNvbnRleHQsIG1heWJlIGFsbG9jYXRpbmcgYSBzdHJ1Y3R1cmUgb3IgZW5hYmxpbmcgc29tZSB0cmFjaW5nLCBwcm9iYWJseSB0aWVkIHRvIGEgcGFydGljdWxhciBCUEYgcHJvZ3JhbSBvciBpbnN0YW5jZS4gVGhlbiwgYGJwZl9kaWFnX21vZF9lbmRgIHdvdWxkIGNsZWFuIHVwIGFmdGVyIHRoYXQgcHJvY2VzcywgcmVsZWFzaW5nIHJlc291cmNlcyBhbmQgbWF5YmUgd3JpdGluZyBvdXQgc29tZSBzdGF0cyBvciBlcnJvciBpbmZvcm1hdGlvbi4gSSB3b25kZXIgaWYgdGhpcyByZWxhdGVzIHRvIHRoZSB0cmFjaW5nIGFzcGVjdHMgd2UgdXNlLCBvciBpZiB0aGlzIGlzIHRoZSBjb3JlIG9mIGhvdyB0aGUgc3Vic3lzdGVtIGNhbiBkaWFnbm9zZSBhIG1pc2JlaGF2aW5nIEJQRiBwcm9ncmFtLCBvciBhIHBhcnRpY3VsYXIgY29udGV4dCBpdCYjMzk7cyBydW5uaW5nIGluPwpJJiMzOTttIGludGVyZXN0ZWQgdG8gc2VlIGhvdyB0aGV5IGludGVncmF0ZSB3aXRoIHRoZSB3aWRlciBrZXJuZWwgZGlhZ25vc3RpY3MgaW5mcmFzdHJ1Y3R1cmUuIFNwZWNpZmljYWxseSwgaG93IGRvIHRoZXNlIGhvb2tzIGludGVyYWN0IHdpdGggdGhpbmdzIGxpa2UgcGVyZiBvciBmdHJhY2U/IEFyZSB0aGV5IGp1c3Qgd3JhcHBlcnMgZm9yIHRob3NlLCBvciBzb21ldGhpbmcgbW9yZSBmdW5kYW1lbnRhbD8gR290dGEgZGlnIGluIGRlZXBlciBhbmQgY2hlY2sgdGhhdCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTc6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2MTA6XHRcdFx0aWYgKG5zbG90cyBcdTAwMjZcdTAwMjYgYWRkciBcdTAwM2U9IHN0YXJ0IFx1MDAyNlx1MDAyNiBhZGRyIFx1MDAzYyBlbmQpIHtcbjE2MTE6XHRcdFx0XHRzcGkgPSAoKGNvbnN0IGNoYXIgKilyZWcgLSAoY29uc3QgY2hhciAqKXN0YXRlLVx1MDAzZXN0YWNrKSAvXG4xNjEyOlx0XHRcdFx0ICAgICAgc2l6ZW9mKCpzdGF0ZS1cdTAwM2VzdGFjayk7XG4xNjEzOlx0XHRcdFx0KnRhcmdldCA9IGRpYWdfc3RhY2tfc2xvdF90YXJnZXQoc3RhdGUtXHUwMDNlZGlhZ19mcmFtZV9pZCwgc3RhdGUtXHUwMDNlZnJhbWVubywgc3BpKTtcbjE2MTQ6XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbjE2MTU6XHRcdFx0fVxuMTYxNjpcdFx0fVxuMTYxNzpcdFx0cmV0dXJuIGZhbHNlO1xuMTYxODpcdH1cbjE2MTk6XHRcbjE2MjA6XHR2b2lkIGJwZl9kaWFnX21vZF9iZWdpbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuMTYyMTpcdFx0XHRcdGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpvcmlnaW4sIGVudW0gYnBmX2RpYWdfbW9kX3JlYXNvbiByZWFzb24pXG4xNjIyOlx0e1xuMTYyMzpcdFx0c3RydWN0IGJwZl9kaWFnICpkaWFnID0gZW52LVx1MDAzZWRpYWc7XG4xNjI0Olx0XG4xNjI1Olx0XHRpZiAoIWRpYWcpXG4xNjI2Olx0XHRcdHJldHVybjtcbjE2Mjc6XHRcdGRpYWctXHUwMDNlbW9kLmFjdGl2ZSA9IHJlZ190b190YXJnZXQoZW52LCByZWcsIFx1MDAyNmRpYWctXHUwMDNlbW9kLnRhcmdldCk7XG4xNjI4Olx0XHRpZiAoIWRpYWctXHUwMDNlbW9kLmFjdGl2ZSlcbjE2Mjk6XHRcdFx0cmV0dXJuO1xuMTYzMDpcdFx0ZGlhZy1cdTAwM2Vtb2QudGFyZ2V0X3JlZ19zbmFwc2hvdCA9ICpyZWc7XG4xNjMxOlx0XHRkaWFnLVx1MDAzZW1vZC5pbnNuX2lkeCA9IGVudi1cdTAwM2VpbnNuX2lkeDtcbjE2MzI6XHRcdGRpYWctXHUwMDNlbW9kLnJlYXNvbiA9IHJlYXNvbjtcbjE2MzM6XHRcdGRpYWctXHUwMDNlbW9kLm9yaWdpbl92YWxpZCA9IG9yaWdpbiBcdTAwMjZcdTAwMjYgcmVnX3RvX3RhcmdldChlbnYsIG9yaWdpbiwgXHUwMDI2ZGlhZy1cdTAwM2Vtb2Qub3JpZ2luKTtcbjE2MzQ6XHR9XG4xNjM1Olx0XG4xNjM2Olx0dm9pZCBicGZfZGlhZ19tb2RfZW5kKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4xNjM3Olx0e1xuMTYzODpcdFx0c3RydWN0IGJwZl9kaWFnICpkaWFnID0gZW52LVx1MDAzZWRpYWc7XG4xNjM5Olx0XHRjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqbmV3X3JlZztcbjE2NDA6XHRcbjE2NDE6XHRcdGlmICghZGlhZyB8fCAhZGlhZy1cdTAwM2Vtb2QuYWN0aXZlKVxuMTY0MjpcdFx0XHRyZXR1cm47XG4xNjQzOlx0XHRkaWFnLVx1MDAzZW1vZC5hY3RpdmUgPSBmYWxzZTtcbjE2NDQ6XHRcdC8qXG4xNjQ1Olx0XHQgKiBSZXNvbHZlIHRoZSB0YXJnZXQgYWdhaW4gYmVjYXVzZSB0aGUgZW5jbG9zaW5nIGZ1bmN0aW9uIHN0YXRlJiMzOTtzIHN0YWNrXG4xNjQ2Olx0XHQgKiBtYXkgaGF2ZSBiZWVuIHJlYWxsb2NhdGVkIHdoaWxlIHRoZSBtb2RpZmljYXRpb24gd2FzIGluIHByb2dyZXNzLlxuMTY0NzpcdFx0ICovXG4xNjQ4Olx0XHRuZXdfcmVnID0gdGFyZ2V0X3RvX3JlZyhlbnYsIFx1MDAyNmRpYWctXHUwMDNlbW9kLnRhcmdldCk7XG4xNjQ5Olx0XHRpZiAoIW5ld19yZWcpXG4xNjUwOlx0XHRcdHJldHVybjtcbjE2NTE6XHRcdGRpYWdfcmVjb3JkX21vZChlbnYsIGRpYWctXHUwMDNlbW9kLmluc25faWR4LCBkaWFnLVx1MDAzZW1vZC50YXJnZXQsIGRpYWctXHUwMDNlbW9kLnJlYXNvbixcbjE2NTI6XHRcdFx0XHRcdTAwMjZkaWFnLVx1MDAzZW1vZC50YXJnZXRfcmVnX3NuYXBzaG90LCBuZXdfcmVnLFxuMTY1MzpcdFx0XHRcdGRpYWctXHUwMDNlbW9kLm9yaWdpbl92YWxpZCA/IFx1MDAyNmRpYWctXHUwMDNlbW9kLm9yaWdpbiA6IE5VTEwpO1xuMTY1NDpcdH1cbjE2NTU6XHRcbjE2NTY6XHR2b2lkIGJwZl9kaWFnX3JlY29yZF9zY3J1YihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuMTY1NzpcdFx0XHRcdCAgIGVudW0gYnBmX2RpYWdfbW9kX3JlYXNvbiByZWFzb24pXG4xNjU4Olx0e1xuMTY1OTpcdFx0c3RydWN0IGJwZl9kaWFnX21vZF90YXJnZXQgdGFyZ2V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE3OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MzEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJlY2VudCBLZXJuZWwgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSByZWNlbnQgbW9kaWZpY2F0aW9ucy4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCB0aGUgdXBkYXRlcyB0byBgcHJlcGFyZV9mdW5jX2V4aXRgIGFyZSBwdXJlbHkgZm9yIGRpYWdub3N0aWMgcHVycG9zZXMuIE5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGVyZSwganVzdCBtYWtpbmcgaXQgZWFzaWVyIHRvIHBpbnBvaW50IGlzc3Vlcy4gU2ltaWxhcmx5LCB0aGUgYWRqdXN0bWVudHMgdG8gYGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3RgIGFuZCBgY2hlY2tfa2Z1bmNfY2FsbGAgc2VlbSB0byBiZSBmb2N1c2VkIG9uIGltcHJvdmVkIGVycm9yIHJlcG9ydGluZy4gVGhleSYjMzk7cmUgbWFraW5nIHRoZSBlcnJvciBtZXNzYWdlcyBtb3JlIGluZm9ybWF0aXZlIHdoZW4gYSBrZnVuYyByZXR1cm5zIGEgc3RydWN0IHRoYXQmIzM5O3Mgbm90IGNvbXBvc2VkIHNvbGVseSBvZiBzY2FsYXIgdHlwZXMuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBpbXByb3ZlbWVudCBmb3IgZGVidWdnaW5nLgoKQnV0IHdhaXQsIGBidGZfc2NhbGFyX3N0cnVjdF93YWxrYCBoYXMgYmVlbiBpbnRyb2R1Y2VkLCBhbmQgYGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3RgIG5vdyBsZXZlcmFnZXMgaXQuIFRoaXMgZGVzZXJ2ZXMgYSBjbG9zZXIgbG9vay4gVGhlIGNvcmUgbG9naWMgb2YgYGJ0Zl9zY2FsYXJfc3RydWN0X3dhbGtgICphcHBlYXJzKiBpZGVudGljYWwgdG8gdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIG9mIGBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0YCwgYnV0IHdpdGggYSBrZXkgZGlmZmVyZW5jZTogaXQgcmV0dXJucyB0aGUgc3BlY2lmaWMgcHJvYmxlbWF0aWMgbWVtYmVyLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoZXJlIGFyZW4mIzM5O3QgYW55IHN1YnRsZSBmdW5jdGlvbmFsIGNoYW5nZXMgaGlkZGVuIHdpdGhpbiBgYnRmX3NjYWxhcl9zdHJ1Y3Rfd2Fsa2AsIGV2ZW4gaWYgdGhlIHVuZGVybHlpbmcgc3RydWN0dXJlIGlzIHNpbWlsYXIuIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgaW1wbGVtZW50YXRpb24gZm9yIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNjIzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNjIzOlx0XHRyZXR1cm4gYXJnbiBcdTAwM2M9IGFyZ19pZHg7XG4xMTYyNDpcdH1cbjExNjI1Olx0XG4xMTYyNjpcdC8qXG4xMTYyNzpcdCAqIFJldHVybnMgdHJ1ZSBpZiBzdHJ1Y3QgaXMgY29tcG9zZWQgb2Ygc2NhbGFycywgNCBsZXZlbHMgb2YgbmVzdGluZyBhbGxvd2VkLlxuMTE2Mjg6XHQgKiBPbiBmYWlsdXJlIEBiYWQsIHdoZW4gZ2l2ZW4sIG5hbWVzIHRoZSBtZW1iZXIgdGhhdCBtYWRlIHRoZSBhbnN3ZXIgbm8sIHNvIGFcbjExNjI5Olx0ICogZGlhZ25vc3RpYyBjYW4gcG9pbnQgYXQgaXQgcmF0aGVyIHRoYW4gYXQgdGhlIHdob2xlIHR5cGUuXG4xMTYzMDpcdCAqL1xuMTE2MzE6XHRzdGF0aWMgYm9vbCBidGZfc2NhbGFyX3N0cnVjdF93YWxrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbjExNjMyOlx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIGludCByZWMsXG4xMTYzMzpcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKipiYWQpXG4xMTYzNDpcdHtcbjExNjM1Olx0XHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKm1lbWJlcl90eXBlO1xuMTE2MzY6XHRcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXI7XG4xMTYzNzpcdFx0dTMyIGk7XG4xMTYzODpcdFxuMTE2Mzk6XHRcdGlmICghYnRmX3R5cGVfaXNfc3RydWN0KHQpKVxuMTE2NDA6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTE2NDE6XHRcbjExNjQyOlx0XHRmb3JfZWFjaF9tZW1iZXIoaSwgdCwgbWVtYmVyKSB7XG4xMTY0MzpcdFx0XHRjb25zdCBzdHJ1Y3QgYnRmX2FycmF5ICphcnJheTtcbjExNjQ0Olx0XG4xMTY0NTpcdFx0XHRtZW1iZXJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgbWVtYmVyLVx1MDAzZXR5cGUsIE5VTEwpO1xuMTE2NDY6XHRcdFx0aWYgKGJ0Zl90eXBlX2lzX3N0cnVjdChtZW1iZXJfdHlwZSkpIHtcbjExNjQ3Olx0XHRcdFx0aWYgKHJlYyBcdTAwM2U9IDMpIHtcbjExNjQ4Olx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7bWF4IHN0cnVjdCBuZXN0aW5nIGRlcHRoIGV4Y2VlZGVkXFxuXCYjMzQ7KTtcbjExNjQ5Olx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMTY1MDpcdFx0XHRcdH1cbjExNjUxOlx0XHRcdFx0aWYgKCFidGZfc2NhbGFyX3N0cnVjdF93YWxrKGVudiwgYnRmLCBtZW1iZXJfdHlwZSwgcmVjICYjNDM7IDEsIGJhZCkpXG4xMTY1MjpcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTE2NTM6XHRcdFx0XHRjb250aW51ZTtcbjExNjU0Olx0XHRcdH1cbjExNjU1Olx0XHRcdGlmIChidGZfdHlwZV9pc19hcnJheShtZW1iZXJfdHlwZSkpIHtcbjExNjU2Olx0XHRcdFx0YXJyYXkgPSBidGZfYXJyYXkobWVtYmVyX3R5cGUpO1xuMTE2NTc6XHRcdFx0XHRpZiAoIWFycmF5LVx1MDAzZW5lbGVtcylcbjExNjU4Olx0XHRcdFx0XHRnb3RvIGJhZF9tZW1iZXI7XG4xMTY1OTpcdFx0XHRcdG1lbWJlcl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcnJheS1cdTAwM2V0eXBlLCBOVUxMKTtcbjExNjYwOlx0XHRcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIobWVtYmVyX3R5cGUpKVxuMTE2NjE6XHRcdFx0XHRcdGdvdG8gYmFkX21lbWJlcjtcbjExNjYyOlx0XHRcdFx0Y29udGludWU7XG4xMTY2MzpcdFx0XHR9XG4xMTY2NDpcdFx0XHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcihtZW1iZXJfdHlwZSkpXG4xMTY2NTpcdFx0XHRcdGdvdG8gYmFkX21lbWJlcjtcbjExNjY2Olx0XHR9XG4xMTY2NzpcdFx0cmV0dXJuIHRydWU7XG4xMTY2ODpcdFxuMTE2Njk6XHRiYWRfbWVtYmVyOlxuMTE2NzA6XHRcdGlmIChiYWQpXG4xMTY3MTpcdFx0XHQqYmFkID0gbWVtYmVyO1xuMTE2NzI6XHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTc6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMDIKCQkJCQkJCW91dHB1dDogODUKCQkJCQkJCXRob3VnaHRzOiA3NTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBXb3J0aGluZXNzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB0aGlzIHBhdGNoIGlzIHRoYXQgaXQmIzM5O3MgZnVuZGFtZW50YWxseSBhYm91dCBpbXByb3ZpbmcgZGlhZ25vc3RpY3MgYW5kIGVycm9yIG1lc3NhZ2VzIHdpdGhpbiB0aGUgdmVyaWZpZXIuIFRoZSBjb3JlIGxvZ2ljIG9mIHRoZSB2ZXJpZmllciBpdHNlbGYsIHNwZWNpZmljYWxseSB0aGUgYGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3RgIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGJ0Zl9zY2FsYXJfc3RydWN0X3dhbGtgLCByZW1haW5zIGZ1bmN0aW9uYWxseSB1bmNoYW5nZWQuIFRoZSBuZXcgYGJ0Zl9zY2FsYXJfc3RydWN0X3dhbGtgIGZ1bmN0aW9uIHNpbXBseSByZXR1cm5zIHRoZSBwcm9ibGVtYXRpYyBtZW1iZXIsIHdoaWNoIGlzIHRoZW4gdXNlZCBieSB0aGUgY2FsbGVyIHRvIGNyZWF0ZSBhIGJldHRlciBlcnJvciBtZXNzYWdlLgoKSSBzZWUgdGhhdCB0aGUgYGNoZWNrX2tmdW5jX2NhbGxgIGZ1bmN0aW9uIG5vdyBsZXZlcmFnZXMgdGhpcyB1cGRhdGVkIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIG1vcmUgaW5mb3JtYXRpdmUgZXJyb3Igb3V0cHV0LiBNb3Jlb3ZlciwgdGhlIGNoYW5nZXMgaW4gYHByZXBhcmVfZnVuY19leGl0YCwgc3Vycm91bmRpbmcgdGhlIGBicGZfZGlhZ19tb2RfYmVnaW5gIGFuZCBgYnBmX2RpYWdfbW9kX2VuZGAgY2FsbHMsIGFsc28gYXBwZWFyIHRvIGJlIHB1cmVseSBkaWFnbm9zdGljLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaXMgdG8gaXRlcmF0ZSB0aHJvdWdoIHJlZ2lzdGVycyBhbmQgYW5ub3RhdGUgZWFjaCBpbmRpdmlkdWFsbHkuCgpFc3NlbnRpYWxseSwgYWxsIG1vZGlmaWNhdGlvbnMgYXJlIGZvY3VzZWQgb24gcHJvdmlkaW5nIG1vcmUgZ3JhbnVsYXIgZGVidWdnaW5nIGluZm9ybWF0aW9uLiAgTm8gY29yZSBhbGdvcml0aG1zIG9yIGRhdGEgc3RydWN0dXJlcywgdGhhdCBJIGNhbiBzZWUsIGhhdmUgYmVlbiBhbHRlcmVkIGluIGEgd2F5IHRoYXQgd291bGQgaW50cm9kdWNlIG5ldyB2dWxuZXJhYmlsaXRpZXMgb3IgdW51c3VhbCBjb2RlIHBhdGhzIHRoYXQgd291bGQgYmUgZ29vZCBmb3IgZnV6emluZy4gVGh1cywgSSB3b3VsZCBjbGFzc2lmeSB0aGlzIGFzIGEgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlIHRvIHRoZSB2ZXJpZmllciYjMzk7cyByZXBvcnRpbmcgY2FwYWJpbGl0aWVzLgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgZm9jdXMgb24gKmJldHRlciogcmVwb3J0aW5nIG9mICpleGlzdGluZyogaXNzdWVzIGFuZCAqbm90KiBhbHRlcmluZyB0aGUgdmVyaWZpZXImIzM5O3MgY29yZSBvcGVyYXRpb25hbCBsb2dpYywgSSBjb25jbHVkZSB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBpbmRlZWQgYmUgYGZhbHNlYCBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgdmVyaWZpZXIgZGlhZ25vc3RpYyBmdW5jdGlvbnMgKGJwZl9kaWFnX21vZF9iZWdpbi9lbmQpIGFuZCBpbXByb3ZlcyBlcnJvciBtZXNzYWdlcyB3aGVuIGEga2Z1bmMgcmV0dXJucyBhIHN0cnVjdCB0aGF0IGlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSB2ZXJpZmllciBsb2dpYyBvciBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHZlcmlmaWVyIGRpYWdub3N0aWMgZnVuY3Rpb25zIChicGZfZGlhZ19tb2RfYmVnaW4vZW5kKSBhbmQgaW1wcm92ZXMgZXJyb3IgbWVzc2FnZXMgd2hlbiBhIGtmdW5jIHJldHVybnMgYSBzdHJ1Y3QgdGhhdCBpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgdmVyaWZpZXIgbG9naWMgb3IgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTc6NTY6NDcuODA1ODMwMjU0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyODc5NzkyNTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgdmVyaWZpZXIgZGlhZ25vc3RpYyBmdW5jdGlvbnMgKGJwZl9kaWFnX21vZF9iZWdpbi9lbmQpIGFuZCBpbXByb3ZlcyBlcnJvciBtZXNzYWdlcyB3aGVuIGEga2Z1bmMgcmV0dXJucyBhIHN0cnVjdCB0aGF0IGlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSB2ZXJpZmllciBsb2dpYyBvciBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE3OjU2OjQ3LjgwNTgzNDQ0NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwMDM2MDA4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY0N2NiZWJmMWNmNmM2OGI1ZWUwMmU1OTA1YjkxYWNjNTZmNjM3MTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTc6NTY6NDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggZTAzNmFlMjBiZjZiOS4uYzZhZWNiYTY0MzdhZSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtMTA0MDMsMTAgKzEwNDAzLDE0IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcXG4gXFx0XFx0ICogcmV0dXJuIHRvIHRoZSBjYWxsZXIgd2hhdGV2ZXIgdGhlIGNhbGxlZSBoYWQgaW4gdGhlXFxuIFxcdFxcdCAqIHJldHVybiByZWdpc3RlcihzKVxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXFx1MDAyNmNhbGxlci1cXHUwMDNlcmVnc1tCUEZfUkVHXzBdLCByMCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yZWdzOyBpKyspXFxuLVxcdFxcdFxcdGNhbGxlci1cXHUwMDNlcmVnc1tyZXRfcmVnc1tpXV0gPSBjYWxsZWUtXFx1MDAzZXJlZ3NbcmV0X3JlZ3NbaV1dO1xcbi1cXHRcXHRicGZfZGlhZ19tb2RfZW5kKGVudik7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucmVnczsgaSsrKSB7XFxuK1xcdFxcdFxcdHUzMiByZWdubyA9IHJldF9yZWdzW2ldO1xcbitcXG4rXFx0XFx0XFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXFx1MDAyNmNhbGxlci1cXHUwMDNlcmVnc1tyZWdub10sIFxcdTAwMjZjYWxsZWUtXFx1MDAzZXJlZ3NbcmVnbm9dLFxcbitcXHRcXHRcXHRcXHRcXHQgICBCUEZfRElBR19NT0RfV1JJVEUpO1xcbitcXHRcXHRcXHRjYWxsZXItXFx1MDAzZXJlZ3NbcmVnbm9dID0gY2FsbGVlLVxcdTAwM2VyZWdzW3JlZ25vXTtcXG4rXFx0XFx0XFx0YnBmX2RpYWdfbW9kX2VuZChlbnYpO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdC8qIGZvciBjYWxsYmFja3MgbGlrZSBicGZfbG9vcCBvciBicGZfZm9yX2VhY2hfbWFwX2VsZW0gZ28gYmFjayB0byBjYWxsc2l0ZSxcXG5AQCAtMTE2MTksMTAgKzExNjIzLDE0IEBAIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19pbXBsaWNpdChjb25zdCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsIHUzMiBhcmdfXFxuIFxcdHJldHVybiBhcmduIFxcdTAwM2M9IGFyZ19pZHg7XFxuIH1cXG4gXFxuLS8qIFJldHVybnMgdHJ1ZSBpZiBzdHJ1Y3QgaXMgY29tcG9zZWQgb2Ygc2NhbGFycywgNCBsZXZlbHMgb2YgbmVzdGluZyBhbGxvd2VkICovXFxuLWJvb2wgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbi1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCBpbnQgcmVjKVxcbisvKlxcbisgKiBSZXR1cm5zIHRydWUgaWYgc3RydWN0IGlzIGNvbXBvc2VkIG9mIHNjYWxhcnMsIDQgbGV2ZWxzIG9mIG5lc3RpbmcgYWxsb3dlZC5cXG4rICogT24gZmFpbHVyZSBAYmFkLCB3aGVuIGdpdmVuLCBuYW1lcyB0aGUgbWVtYmVyIHRoYXQgbWFkZSB0aGUgYW5zd2VyIG5vLCBzbyBhXFxuKyAqIGRpYWdub3N0aWMgY2FuIHBvaW50IGF0IGl0IHJhdGhlciB0aGFuIGF0IHRoZSB3aG9sZSB0eXBlLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgYnRmX3NjYWxhcl9zdHJ1Y3Rfd2FsayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuK1xcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHJlYyxcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKipiYWQpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICptZW1iZXJfdHlwZTtcXG4gXFx0Y29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcjtcXG5AQCAtMTE2NDAsMjMgKzExNjQ4LDM1IEBAIGJvb2wgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIm1heCBzdHJ1Y3QgbmVzdGluZyBkZXB0aCBleGNlZWRlZFxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBidGYsIG1lbWJlcl90eXBlLCByZWMgKyAxKSlcXG4rXFx0XFx0XFx0aWYgKCFidGZfc2NhbGFyX3N0cnVjdF93YWxrKGVudiwgYnRmLCBtZW1iZXJfdHlwZSwgcmVjICsgMSwgYmFkKSlcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoYnRmX3R5cGVfaXNfYXJyYXkobWVtYmVyX3R5cGUpKSB7XFxuIFxcdFxcdFxcdGFycmF5ID0gYnRmX2FycmF5KG1lbWJlcl90eXBlKTtcXG4gXFx0XFx0XFx0aWYgKCFhcnJheS1cXHUwMDNlbmVsZW1zKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdFxcdFxcdGdvdG8gYmFkX21lbWJlcjtcXG4gXFx0XFx0XFx0bWVtYmVyX3R5cGUgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGFycmF5LVxcdTAwM2V0eXBlLCBOVUxMKTtcXG4gXFx0XFx0XFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIobWVtYmVyX3R5cGUpKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdFxcdFxcdGdvdG8gYmFkX21lbWJlcjtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIobWVtYmVyX3R5cGUpKVxcbi1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdFxcdGdvdG8gYmFkX21lbWJlcjtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK2JhZF9tZW1iZXI6XFxuK1xcdGlmIChiYWQpXFxuK1xcdFxcdCpiYWQgPSBtZW1iZXI7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rYm9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuK1xcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuK1xcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIGludCByZWMpXFxuK3tcXG4rXFx0cmV0dXJuIGJ0Zl9zY2FsYXJfc3RydWN0X3dhbGsoZW52LCBidGYsIHQsIHJlYywgTlVMTCk7XFxuIH1cXG4gXFxuIGVudW0ga2Z1bmNfcHRyX2FyZ190eXBlIHtcXG5AQCAtMTQwMjYsMTcgKzE0MDQ2LDQxIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdFxcdCAgICBtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdKSlcXG4gXFx0XFx0XFx0X19tYXJrX3JlZ19jb25zdF96ZXJvKGVudiwgXFx1MDAyNnJlZ3NbQlBGX1JFR18wXSk7XFxuIFxcdH0gZWxzZSBpZiAoYnRmX3R5cGVfaXNfc3RydWN0KHQpKSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICpiYWQgPSBOVUxMO1xcbitcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogVGhlIHJldHVybmVkIHN0cnVjdCBjb21lcyBiYWNrIGFzIHJhdyByZWdpc3RlciBiaXRzIG1vZGVsZWRcXG4gXFx0XFx0ICogYXMgYW4gdW5rbm93biBzY2FsYXIsIHNvIGl0IG11c3QgY29udGFpbiBvbmx5IHNjYWxhcnM6XFxuIFxcdFxcdCAqIG90aGVyd2lzZSBhIHBvaW50ZXIgZmllbGQgd291bGQgYmUgbGF1bmRlcmVkIGludG8gYSBzY2FsYXJcXG4gXFx0XFx0ICogYW5kIGVzY2FwZSBwcm92ZW5hbmNlIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBkZXNjX2J0ZiwgdCwgMCkpIHtcXG4rXFx0XFx0aWYgKCFidGZfc2NhbGFyX3N0cnVjdF93YWxrKGVudiwgZGVzY19idGYsIHQsIDAsIFxcdTAwMjZiYWQpKSB7XFxuK1xcdFxcdFxcdGNvbnN0IGNoYXIgKm1lbWJlcl9ub3RlID0gXFxcIlxcXCI7XFxuK1xcbiBcXHRcXHRcXHR2ZXJib3NlKGVudixcXG4gXFx0XFx0XFx0XFx0XFxcImtlcm5lbCBmdW5jdGlvbiAlcyByZXR1cm5zICVzICVzIHRoYXQgaXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdGZ1bmNfbmFtZSwgYnRmX3R5cGVfc3RyKHQpLFxcbiBcXHRcXHRcXHRcXHRidGZfbmFtZV9ieV9vZmZzZXQoZGVzY19idGYsIHQtXFx1MDAzZW5hbWVfb2ZmKSk7XFxuK1xcdFxcdFxcdGlmIChiYWQpIHtcXG4rXFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqYmFkX25hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoZGVzY19idGYsIGJhZC1cXHUwMDNlbmFtZV9vZmYpO1xcbitcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmJhZF90eXBlO1xcbitcXG4rXFx0XFx0XFx0XFx0YmFkX3R5cGUgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhkZXNjX2J0ZiwgYmFkLVxcdTAwM2V0eXBlLCBOVUxMKTtcXG4rXFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJtZW1iZXIgJyVzJyBoYXMgdHlwZSAlc1xcXFxuXFxcIiwgYmFkX25hbWUsXFxuK1xcdFxcdFxcdFxcdFxcdGJ0Zl90eXBlX3N0cihiYWRfdHlwZSkpO1xcbitcXHRcXHRcXHRcXHRtZW1iZXJfbm90ZSA9IGJwZl9kaWFnX2ZtdChcXG4rXFx0XFx0XFx0XFx0XFx0ZW52LCBcXFwiIEl0cyBtZW1iZXIgJyVzJyBpcyAlcywgbm90IGEgc2NhbGFyLlxcXCIsIGJhZF9uYW1lLFxcbitcXHRcXHRcXHRcXHRcXHRidGZfdHlwZV9zdHIoYmFkX3R5cGUpKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRicGZfZGlhZ19wcm9ncmFtX3N0cnVjdHVyZShcXG4rXFx0XFx0XFx0XFx0ZW52LCBpbnNuX2lkeCwgXFxcInVuc3VwcG9ydGVkIGtlcm5lbCBmdW5jdGlvbiByZXR1cm4gdHlwZVxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcXCJDYWxsIGEga2VybmVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBvbmx5IHNjYWxhcnMgYnkgdmFsdWUuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFxcIiVzKCkgcmV0dXJucyAlcyAlcyBieSB2YWx1ZS4lcyBcXFwiXFxuK1xcdFxcdFxcdFxcdFxcXCJBIGJ5LXZhbHVlIHJldHVybiBhcnJpdmVzIGFzIHJhdyByZWdpc3RlciBiaXRzIHRoYXQgdGhlIHZlcmlmaWVyIFxcXCJcXG4rXFx0XFx0XFx0XFx0XFxcImNhbiBvbmx5IG1vZGVsIGFzIHVua25vd24gc2NhbGFycywgc28gZS5nLiBhIHBvaW50ZXIgbWF5IGxvc2UgXFxcIlxcbitcXHRcXHRcXHRcXHRcXFwidGhlIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZyB0aGF0IG1ha2UgaXQgc2FmZSB0byB1c2UuXFxcIixcXG4rXFx0XFx0XFx0XFx0ZnVuY19uYW1lLCBidGZfdHlwZV9zdHIodCksXFxuK1xcdFxcdFxcdFxcdGJ0Zl9uYW1lX2J5X29mZnNldChkZXNjX2J0ZiwgdC1cXHUwMDNlbmFtZV9vZmYpLCBtZW1iZXJfbm90ZSk7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHR9XFxuIFxcdFxcdG1hcmtfa2Z1bmNfcmV0X3JlZ3MoZW52LCByZWdzLCB0LVxcdTAwM2VzaXplKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jLmNcXG5pbmRleCBkNmI0MjJhZTk3ODRiLi5iYzlhZmZmYzdjNjg5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuYy5jXFxuQEAgLTcyLDYgKzcyLDcgQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19mYXN0Y2FsbF9mYWlsKHZvaWQpXFxuIFNFQyhcXFwidGNcXFwiKVxcbiBfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NFxcbiBfX2ZhaWx1cmUgX19tc2coXFxcImlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzXFxcIilcXG4rX19tc2coXFxcIm1lbWJlciAncCcgaGFzIHR5cGUgUFRSXFxcIilcXG4gX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19wdHJfZmFpbCh2b2lkKVxcbiB7XFxuIFxcdGFzbSB2b2xhdGlsZSAoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE3OjU2OjQ5LjIwNjc5MzkxNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE5MTQ3ODgxMjY0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgdmVyaWZpZXIgZGlhZ25vc3RpYyBmdW5jdGlvbnMgKGJwZl9kaWFnX21vZF9iZWdpbi9lbmQpIGFuZCBpbXByb3ZlcyBlcnJvciBtZXNzYWdlcyB3aGVuIGEga2Z1bmMgcmV0dXJucyBhIHN0cnVjdCB0aGF0IGlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSB2ZXJpZmllciBsb2dpYyBvciBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY0N2NiZWJmMWNmNmM2OGI1ZWUwMmU1OTA1YjkxYWNjNTZmNjM3MTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAxNzo1Njo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggZTAzNmFlMjBiZjZiOS4uYzZhZWNiYTY0MzdhZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMTA0MDMsMTAgKzEwNDAzLDE0IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcbiBcdFx0ICogcmV0dXJuIHRvIHRoZSBjYWxsZXIgd2hhdGV2ZXIgdGhlIGNhbGxlZSBoYWQgaW4gdGhlXG4gXHRcdCAqIHJldHVybiByZWdpc3RlcihzKVxuIFx0XHQgKi9cbi1cdFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXHUwMDI2Y2FsbGVyLVx1MDAzZXJlZ3NbQlBGX1JFR18wXSwgcjAsIEJQRl9ESUFHX01PRF9XUklURSk7XG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yZWdzOyBpKyspXG4tXHRcdFx0Y2FsbGVyLVx1MDAzZXJlZ3NbcmV0X3JlZ3NbaV1dID0gY2FsbGVlLVx1MDAzZXJlZ3NbcmV0X3JlZ3NbaV1dO1xuLVx0XHRicGZfZGlhZ19tb2RfZW5kKGVudik7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yZWdzOyBpKyspIHtcbitcdFx0XHR1MzIgcmVnbm8gPSByZXRfcmVnc1tpXTtcbitcbitcdFx0XHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBcdTAwMjZjYWxsZXItXHUwMDNlcmVnc1tyZWdub10sIFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW3JlZ25vXSxcbitcdFx0XHRcdFx0ICAgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbitcdFx0XHRjYWxsZXItXHUwMDNlcmVnc1tyZWdub10gPSBjYWxsZWUtXHUwMDNlcmVnc1tyZWdub107XG4rXHRcdFx0YnBmX2RpYWdfbW9kX2VuZChlbnYpO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHQvKiBmb3IgY2FsbGJhY2tzIGxpa2UgYnBmX2xvb3Agb3IgYnBmX2Zvcl9lYWNoX21hcF9lbGVtIGdvIGJhY2sgdG8gY2FsbHNpdGUsXG5AQCAtMTE2MTksMTAgKzExNjIzLDE0IEBAIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19pbXBsaWNpdChjb25zdCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsIHUzMiBhcmdfXG4gXHRyZXR1cm4gYXJnbiBcdTAwM2M9IGFyZ19pZHg7XG4gfVxuIFxuLS8qIFJldHVybnMgdHJ1ZSBpZiBzdHJ1Y3QgaXMgY29tcG9zZWQgb2Ygc2NhbGFycywgNCBsZXZlbHMgb2YgbmVzdGluZyBhbGxvd2VkICovXG4tYm9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCBpbnQgcmVjKVxuKy8qXG4rICogUmV0dXJucyB0cnVlIGlmIHN0cnVjdCBpcyBjb21wb3NlZCBvZiBzY2FsYXJzLCA0IGxldmVscyBvZiBuZXN0aW5nIGFsbG93ZWQuXG4rICogT24gZmFpbHVyZSBAYmFkLCB3aGVuIGdpdmVuLCBuYW1lcyB0aGUgbWVtYmVyIHRoYXQgbWFkZSB0aGUgYW5zd2VyIG5vLCBzbyBhXG4rICogZGlhZ25vc3RpYyBjYW4gcG9pbnQgYXQgaXQgcmF0aGVyIHRoYW4gYXQgdGhlIHdob2xlIHR5cGUuXG4rICovXG4rc3RhdGljIGJvb2wgYnRmX3NjYWxhcl9zdHJ1Y3Rfd2FsayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4rXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIGludCByZWMsXG4rXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqKmJhZClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKm1lbWJlcl90eXBlO1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcjtcbkBAIC0xMTY0MCwyMyArMTE2NDgsMzUgQEAgYm9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHR2ZXJib3NlKGVudiwgXCJtYXggc3RydWN0IG5lc3RpbmcgZGVwdGggZXhjZWVkZWRcXG5cIik7XG4gXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdFx0fVxuLVx0XHRcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIGJ0ZiwgbWVtYmVyX3R5cGUsIHJlYyArIDEpKVxuK1x0XHRcdGlmICghYnRmX3NjYWxhcl9zdHJ1Y3Rfd2FsayhlbnYsIGJ0ZiwgbWVtYmVyX3R5cGUsIHJlYyArIDEsIGJhZCkpXG4gXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcdFx0aWYgKGJ0Zl90eXBlX2lzX2FycmF5KG1lbWJlcl90eXBlKSkge1xuIFx0XHRcdGFycmF5ID0gYnRmX2FycmF5KG1lbWJlcl90eXBlKTtcbiBcdFx0XHRpZiAoIWFycmF5LVx1MDAzZW5lbGVtcylcbi1cdFx0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0XHRcdGdvdG8gYmFkX21lbWJlcjtcbiBcdFx0XHRtZW1iZXJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJyYXktXHUwMDNldHlwZSwgTlVMTCk7XG4gXHRcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIobWVtYmVyX3R5cGUpKVxuLVx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRcdFx0Z290byBiYWRfbWVtYmVyO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyKG1lbWJlcl90eXBlKSlcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdFx0Z290byBiYWRfbWVtYmVyO1xuIFx0fVxuIFx0cmV0dXJuIHRydWU7XG4rXG4rYmFkX21lbWJlcjpcbitcdGlmIChiYWQpXG4rXHRcdCpiYWQgPSBtZW1iZXI7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK2Jvb2wgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuK1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4rXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHJlYylcbit7XG4rXHRyZXR1cm4gYnRmX3NjYWxhcl9zdHJ1Y3Rfd2FsayhlbnYsIGJ0ZiwgdCwgcmVjLCBOVUxMKTtcbiB9XG4gXG4gZW51bSBrZnVuY19wdHJfYXJnX3R5cGUge1xuQEAgLTE0MDI2LDE3ICsxNDA0Niw0MSBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHQgICAgbWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkpXG4gXHRcdFx0X19tYXJrX3JlZ19jb25zdF96ZXJvKGVudiwgXHUwMDI2cmVnc1tCUEZfUkVHXzBdKTtcbiBcdH0gZWxzZSBpZiAoYnRmX3R5cGVfaXNfc3RydWN0KHQpKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICpiYWQgPSBOVUxMO1xuK1xuIFx0XHQvKlxuIFx0XHQgKiBUaGUgcmV0dXJuZWQgc3RydWN0IGNvbWVzIGJhY2sgYXMgcmF3IHJlZ2lzdGVyIGJpdHMgbW9kZWxlZFxuIFx0XHQgKiBhcyBhbiB1bmtub3duIHNjYWxhciwgc28gaXQgbXVzdCBjb250YWluIG9ubHkgc2NhbGFyczpcbiBcdFx0ICogb3RoZXJ3aXNlIGEgcG9pbnRlciBmaWVsZCB3b3VsZCBiZSBsYXVuZGVyZWQgaW50byBhIHNjYWxhclxuIFx0XHQgKiBhbmQgZXNjYXBlIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZy5cbiBcdFx0ICovXG4tXHRcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIGRlc2NfYnRmLCB0LCAwKSkge1xuK1x0XHRpZiAoIWJ0Zl9zY2FsYXJfc3RydWN0X3dhbGsoZW52LCBkZXNjX2J0ZiwgdCwgMCwgXHUwMDI2YmFkKSkge1xuK1x0XHRcdGNvbnN0IGNoYXIgKm1lbWJlcl9ub3RlID0gXCJcIjtcbitcbiBcdFx0XHR2ZXJib3NlKGVudixcbiBcdFx0XHRcdFwia2VybmVsIGZ1bmN0aW9uICVzIHJldHVybnMgJXMgJXMgdGhhdCBpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFyc1xcblwiLFxuIFx0XHRcdFx0ZnVuY19uYW1lLCBidGZfdHlwZV9zdHIodCksXG4gXHRcdFx0XHRidGZfbmFtZV9ieV9vZmZzZXQoZGVzY19idGYsIHQtXHUwMDNlbmFtZV9vZmYpKTtcbitcdFx0XHRpZiAoYmFkKSB7XG4rXHRcdFx0XHRjb25zdCBjaGFyICpiYWRfbmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChkZXNjX2J0ZiwgYmFkLVx1MDAzZW5hbWVfb2ZmKTtcbitcdFx0XHRcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqYmFkX3R5cGU7XG4rXG4rXHRcdFx0XHRiYWRfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCBiYWQtXHUwMDNldHlwZSwgTlVMTCk7XG4rXHRcdFx0XHR2ZXJib3NlKGVudiwgXCJtZW1iZXIgJyVzJyBoYXMgdHlwZSAlc1xcblwiLCBiYWRfbmFtZSxcbitcdFx0XHRcdFx0YnRmX3R5cGVfc3RyKGJhZF90eXBlKSk7XG4rXHRcdFx0XHRtZW1iZXJfbm90ZSA9IGJwZl9kaWFnX2ZtdChcbitcdFx0XHRcdFx0ZW52LCBcIiBJdHMgbWVtYmVyICclcycgaXMgJXMsIG5vdCBhIHNjYWxhci5cIiwgYmFkX25hbWUsXG4rXHRcdFx0XHRcdGJ0Zl90eXBlX3N0cihiYWRfdHlwZSkpO1xuK1x0XHRcdH1cbitcdFx0XHRicGZfZGlhZ19wcm9ncmFtX3N0cnVjdHVyZShcbitcdFx0XHRcdGVudiwgaW5zbl9pZHgsIFwidW5zdXBwb3J0ZWQga2VybmVsIGZ1bmN0aW9uIHJldHVybiB0eXBlXCIsXG4rXHRcdFx0XHRcIkNhbGwgYSBrZXJuZWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG9ubHkgc2NhbGFycyBieSB2YWx1ZS5cIixcbitcdFx0XHRcdFwiJXMoKSByZXR1cm5zICVzICVzIGJ5IHZhbHVlLiVzIFwiXG4rXHRcdFx0XHRcIkEgYnktdmFsdWUgcmV0dXJuIGFycml2ZXMgYXMgcmF3IHJlZ2lzdGVyIGJpdHMgdGhhdCB0aGUgdmVyaWZpZXIgXCJcbitcdFx0XHRcdFwiY2FuIG9ubHkgbW9kZWwgYXMgdW5rbm93biBzY2FsYXJzLCBzbyBlLmcuIGEgcG9pbnRlciBtYXkgbG9zZSBcIlxuK1x0XHRcdFx0XCJ0aGUgcHJvdmVuYW5jZSBhbmQgcmVmZXJlbmNlIHRyYWNraW5nIHRoYXQgbWFrZSBpdCBzYWZlIHRvIHVzZS5cIixcbitcdFx0XHRcdGZ1bmNfbmFtZSwgYnRmX3R5cGVfc3RyKHQpLFxuK1x0XHRcdFx0YnRmX25hbWVfYnlfb2Zmc2V0KGRlc2NfYnRmLCB0LVx1MDAzZW5hbWVfb2ZmKSwgbWVtYmVyX25vdGUpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4gXHRcdG1hcmtfa2Z1bmNfcmV0X3JlZ3MoZW52LCByZWdzLCB0LVx1MDAzZXNpemUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuYy5jXG5pbmRleCBkNmI0MjJhZTk3ODRiLi5iYzlhZmZmYzdjNjg5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuY1xuQEAgLTcyLDYgKzcyLDcgQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19mYXN0Y2FsbF9mYWlsKHZvaWQpXG4gU0VDKFwidGNcIilcbiBfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NFxuIF9fZmFpbHVyZSBfX21zZyhcImlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzXCIpXG4rX19tc2coXCJtZW1iZXIgJ3AnIGhhcyB0eXBlIFBUUlwiKVxuIF9fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfcHRyX2ZhaWwodm9pZClcbiB7XG4gXHRhc20gdm9sYXRpbGUgKFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTc6NTY6NDkuMjA2Nzk1NDM1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM3NzU3Nzg0Mjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaGlzIEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEl0IHNlZW1zIHRoZXkndmUgcmVmYWN0b3JlZCBgcHJlcGFyZV9mdW5jX2V4aXRgLiBJbnN0ZWFkIG9mIHRoYXQgbW9ub2xpdGhpYyBgYnBmX2RpYWdfbW9kYCBjYWxsIGFyb3VuZCB0aGUgd2hvbGUgbG9vcCBjb25jZXJuaW5nIGByZXRfcmVnc2AsIHRoZXkncmUgZG9pbmcgYGJwZl9kaWFnX21vZF9iZWdpbmAgYW5kIGBicGZfZGlhZ19tb2RfZW5kYCBmb3IgZWFjaCByZWdpc3RlciBpbmRpdmlkdWFsbHkuIFRoYXQncyBpbnRlcmVzdGluZywgbWFrZXMgc2Vuc2UgZm9yIG1vcmUgZ3JhbnVsYXIgZGlhZ25vc3RpY3MuIEFuZCBJIHNlZSBhIGNoYW5nZSB0byBgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdGAg4oCTIHRoZXkncmUgcHVsbGluZyBvdXQgdGhhdCBcImJhZCBtZW1iZXJcIiBsb2dpYyBpbnRvIGBidGZfc2NhbGFyX3N0cnVjdF93YWxrYCwgd2hpY2ggc2VlbXMgY2xlYW5lci4gVGhlbiwgdGhleeKAmXJlIGxldmVyYWdpbmcgdGhhdCBpbiBgY2hlY2tfa2Z1bmNfY2FsbGAgdG8gZ2l2ZSBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMgaWYgYSBrZnVuYyByZXR1cm5zIGEgc3RydWN0IHRoYXQncyAqbm90KiBqdXN0IHNjYWxhcnMuIFRoYXQncyBhIGdvb2Qgc3RlcCB0b3dhcmQgbW9yZSBoZWxwZnVsIGRlYnVnZ2luZy5cblxuSG9sZCBvbi4uLiB0aG9zZSBgYnBmX2RpYWdfbW9kX2JlZ2luYCBhbmQgYGJwZl9kaWFnX21vZF9lbmRgIGZ1bmN0aW9ucy4uLiBJIHJlY29nbml6ZSB0aG9zZSBuYW1lcyBhcyBiZWluZyBkaWFnbm9zdGljLXJlbGF0ZWQuIExldCBtZSBxdWlja2x5IGRpZyBpbnRvIHdoYXQgdGhvc2UgZG8gZXhhY3RseS4gR290dGEgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRob3NlIGNoYW5nZXMgZnVsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NDIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNzo1OTowNi45NjQ1ODIxMDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNDc5Mzk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfZGlhZ19tb2RfYmVnaW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTE1Nzk9c3RhdGljIGJvb2wgcmVnX3RvX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE2MTktXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE2MjA6dm9pZCBicGZfZGlhZ19tb2RfYmVnaW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTYyMS1cXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb3JpZ2luLCBlbnVtIGJwZl9kaWFnX21vZF9yZWFzb24gcmVhc29uKVxcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5oPTk3PXZvaWQgYnBmX2RpYWdfcmVjb3JkX2JyYW5jaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGJvb2wgY29uZF90cnVlKTtcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmg6OTg6dm9pZCBicGZfZGlhZ19tb2RfYmVnaW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmgtOTktXFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9yaWdpbiwgZW51bSBicGZfZGlhZ19tb2RfcmVhc29uIHJlYXNvbik7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzQ5MT1zdGF0aWMgdm9pZCBzYXZlX3JlZ2lzdGVyX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQ5Ny1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzQ5ODpcXHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBcXHUwMDI2c3RhdGUtXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIsIHJlZywgQlBGX0RJQUdfTU9EX1NQSUxMKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQ5OS1cXHRzdGF0ZS1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ciA9ICpyZWc7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzkwNj1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzkyOS1cXHRpZiAoZHN0X3JlZ25vIFxcdTAwM2U9IDApXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM5MzA6XFx0XFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXFx1MDAyNnN0YXRlLVxcdTAwM2VyZWdzW2RzdF9yZWdub10sIHJlZywgQlBGX0RJQUdfTU9EX1dSSVRFKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzkzMS1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00MjEyPXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfYXJnX3dyaXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDIzNS1cXHRhcmcgPSBcXHUwMDI2c3RhdGUtXFx1MDAzZXN0YWNrX2FyZ19yZWdzW3NwaV07XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQyMzY6XFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgYXJnLCB2YWx1ZV9yZWcsIEJQRl9ESUFHX01PRF9XUklURSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQyMzctXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDI1NT1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX2FyZ19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDI3Ny1cXHRjdXIgPSB2c3RhdGUtXFx1MDAzZWZyYW1lW3ZzdGF0ZS1cXHUwMDNlY3VyZnJhbWVdO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0Mjc4OlxcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFxcdTAwMjZjdXItXFx1MDAzZXJlZ3NbZHN0X3JlZ25vXSwgYXJnLCBCUEZfRElBR19NT0RfV1JJVEUpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00Mjc5LVxcdGN1ci1cXHUwMDNlcmVnc1tkc3RfcmVnbm9dID0gKmFyZztcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NjYzPXN0YXRpYyBpbnQgY2hlY2tfbG9hZF9tZW0oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2OTYtXFx0ICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY2OTc6XFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXFx1MDAyNnJlZ3NbaW5zbi1cXHUwMDNlZHN0X3JlZ10sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2OTgtXFx0ZXJyID0gY2hlY2tfbWVtX2FjY2VzcyhlbnYsIGVudi1cXHUwMDNlaW5zbl9pZHgsIHJlZ3MgKyBpbnNuLVxcdTAwM2VzcmNfcmVnLCBhcmdub19mcm9tX3JlZyhpbnNuLVxcdTAwM2VzcmNfcmVnKSwgaW5zbi1cXHUwMDNlb2ZmLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTY3NDg9c3RhdGljIGludCBjaGVja19hdG9taWNfcm13KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjgxMS1cXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiBsb2FkX3JlZyBcXHUwMDNlPSAwKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY4MTI6XFx0XFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgY3VyX3JlZ3MoZW52KSArIGxvYWRfcmVnLCBOVUxMLCBCUEZfRElBR19NT0RfV1JJVEUpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODEzLVxcdFxcdGVyciA9IGNoZWNrX21lbV9hY2Nlc3MoZW52LCBlbnYtXFx1MDAzZWluc25faWR4LCBkc3RfcmVnLCBhcmdub19mcm9tX3JlZyhpbnNuLVxcdTAwM2Vkc3RfcmVnKSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05NTc0PXN0YXRpYyB2b2lkIGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTU4Mi1cXHRcXHRpZiAocmVnLVxcdTAwM2V0eXBlIFxcdTAwMjYgTUVNX1JDVSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NTgzOlxcdFxcdFxcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIHJlZywgTlVMTCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTU4NC1cXHRcXHRcXHRyZWctXFx1MDAzZXR5cGUgXFx1MDAyNj0gfihNRU1fUkNVIHwgUFRSX01BWUJFX05VTEwpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTk1OTE9c3RhdGljIGludCByZWZfY29udmVydF9hbGxvY19yY3VfcHJvdGVjdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpZClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NjA0LVxcdFxcdGlmICgocmVnLVxcdTAwM2V0eXBlIFxcdTAwMjYgTUVNX0FMTE9DKSBcXHUwMDI2XFx1MDAyNiAocmVnLVxcdTAwM2V0eXBlIFxcdTAwMjYgTUVNX1BFUkNQVSkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTYwNTpcXHRcXHRcXHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCByZWcsIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk2MDYtXFx0XFx0XFx0cmVnLVxcdTAwM2VpZCA9IDA7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTkyOD1zdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTk4Ny1cXHRcXHRlbHNlXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjk5ODg6XFx0XFx0XFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXFx1MDAyNmNhbGxlci1cXHUwMDNlcmVnc1tCUEZfUkVHXzBdLCBOVUxMLCBCUEZfRElBR19NT0RfV1JJVEUpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05OTg5LVxcdFxcdGNsZWFyX2NhbGxlcl9zYXZlZF9yZWdzKGVudiwgY2FsbGVyLVxcdTAwM2VyZWdzKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDM1Mz1zdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0MDgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNDA5OlxcdFxcdFxcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFxcdTAwMjZjYWxsZXItXFx1MDAzZXJlZ3NbcmVnbm9dLCBcXHUwMDI2Y2FsbGVlLVxcdTAwM2VyZWdzW3JlZ25vXSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0MTAtXFx0XFx0XFx0XFx0XFx0ICAgQlBGX0RJQUdfTU9EX1dSSVRFKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDgzMj1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTA5NS1cXHRicGZfZGlhZ19yZWNvcmRfY2FsbGVyX3NhdmVkKGVudiwgcmVncyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMDk2OlxcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFxcdTAwMjZyZWdzW0JQRl9SRUdfMF0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMDk3LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDQUxMRVJfU0FWRURfUkVHUzsgaSsrKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyNjgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjY5OlxcdFxcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFxcdTAwMjZyZWdzW0JQRl9SRUdfMF0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjcwLVxcdFxcdHJlZ3NbQlBGX1JFR18wXS50eXBlIFxcdTAwMjY9IH5QVFJfTUFZQkVfTlVMTDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzc3OD1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MDIxLVxcdGJwZl9kaWFnX3JlY29yZF9jYWxsZXJfc2F2ZWQoZW52LCByZWdzKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQwMjI6XFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXFx1MDAyNnJlZ3NbQlBGX1JFR18wXSwgTlVMTCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQwMjMtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIENBTExFUl9TQVZFRF9SRUdTOyBpKyspIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNTkyMz1zdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5MjgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1OTI5OlxcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFxcdTAwMjZyZWdzW2luc24tXFx1MDAzZWRzdF9yZWddLCBOVUxMLCBCUEZfRElBR19NT0RfV1JJVEUpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTkzMC1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzE4NT1zdGF0aWMgaW50IGNoZWNrX2xkX2ltbShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcyMDItXFx0ZHN0X3JlZyA9IFxcdTAwMjZyZWdzW2luc24tXFx1MDAzZWRzdF9yZWddO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzIwMzpcXHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBkc3RfcmVnLCBOVUxMLCBCUEZfRElBR19NT0RfV1JJVEUpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzIwNC1cXHRpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSAwKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTczMTM9c3RhdGljIGludCBjaGVja19sZF9hYnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MzYxLVxcdGJwZl9kaWFnX3JlY29yZF9jYWxsZXJfc2F2ZWQoZW52LCByZWdzKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTczNjI6XFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXFx1MDAyNnJlZ3NbQlBGX1JFR18wXSwgTlVMTCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTczNjMtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIENBTExFUl9TQVZFRF9SRUdTOyBpKyspIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTc6NTk6MDguNDg5MzgxMzkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxMzEzMDg1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgdGhlIGNvcmUgbW9kaWZpY2F0aW9uIGluIGBwcmVwYXJlX2Z1bmNfZXhpdGAuIEl0IGFwcGVhcnMgdGhleSdyZSBub3cgd3JhcHBpbmcgdGhlIHJlZ2lzdGVyIGNvcHkg4oCTIHNwZWNpZmljYWxseSwgYGNhbGxlci1cdTAwM2VyZWdzW3JlZ25vXSA9IGNhbGxlZS1cdTAwM2VyZWdzW3JlZ25vXTtgIOKAkyB3aXRoIGBicGZfZGlhZ19tb2RfYmVnaW5gIGFuZCBgYnBmX2RpYWdfbW9kX2VuZGAgZm9yICplYWNoKiByZWdpc3Rlci4gVGhhdCdzIGEgYml0IHVudXN1YWwuIFByZXZpb3VzbHksIGl0IGxvb2tlZCBsaWtlIHRoZXkgd2VyZSBkb2luZyBhIHNpbmdsZSB3cmFwcGVyIGZvciB0aGUgZW50aXJlIHJlZ2lzdGVyIHNldC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIHVzZSBvZiBgYnBmX2RpYWdfbW9kX2JlZ2luYC4gVGhpcyBzY3JlYW1zICpkaWFnbm9zdGljKiBmdW5jdGlvbiwgc28gaXMgdGhpcyBqdXN0IGxvZ2dpbmcsIG9yIGRvZXMgdGhpcyBhY3R1YWxseSBpbnRyb2R1Y2UgZnVuY3Rpb25hbCBjaGFuZ2VzPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYnBmX2RpYWdfbW9kX2JlZ2luYC4gR290dGEgc2VlIGlmIHRoaXMgaGFzIHNpZGUgZWZmZWN0cyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NjQsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTc6NTk6MTIuNzAyNTE0NzI2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzgwNjcwMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBicGZfZGlhZ19tb2RfYmVnaW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTE1Nzk9c3RhdGljIGJvb2wgcmVnX3RvX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE2MTktXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE2MjA6dm9pZCBicGZfZGlhZ19tb2RfYmVnaW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTYyMS1cXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb3JpZ2luLCBlbnVtIGJwZl9kaWFnX21vZF9yZWFzb24gcmVhc29uKVxcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5oPTk3PXZvaWQgYnBmX2RpYWdfcmVjb3JkX2JyYW5jaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGJvb2wgY29uZF90cnVlKTtcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmg6OTg6dm9pZCBicGZfZGlhZ19tb2RfYmVnaW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmgtOTktXFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9yaWdpbiwgZW51bSBicGZfZGlhZ19tb2RfcmVhc29uIHJlYXNvbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE3OjU5OjE0LjI4MDU4NjAzNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTI2ODI4MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGRpYWdub3N0aWMgbW9kdWxlIGZ1bmN0aW9uczpcblxuKipEaXZpbmcgaW50byBCUEYgRGlhZ25vc3RpY3MgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBrZXJuZWwvYnBmL2RpYWdub3N0aWNzLmNgLiBTZWVtcyBsaWtlIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEJQRiBzdWJzeXN0ZW0gaGFuZGxlcyBpdHMgb3duIGRpYWdub3N0aWNzLCByaWdodD8gVGhlIGtleSBoZXJlIGFyZSB0aGUgYGJwZl9kaWFnX21vZF9iZWdpbmAgYW5kIGBicGZfZGlhZ19tb2RfZW5kYCBmdW5jdGlvbnMuIEknbSBhc3N1bWluZyB0aGVzZSBhcmUgc29tZSBraW5kIG9mIHNjb3BlIG1hcmtlcnMgd2l0aGluIHRoZSBtb2R1bGUsIGZvciBlaXRoZXIgaW5zdHJ1bWVudGF0aW9uIG9yIHJlc291cmNlIHRyYWNraW5nLCBvciBtYXliZSBldmVuIGRlYnVnZ2luZyBhc3Npc3RhbmNlIHdoZW4gc29tZXRoaW5nIGdvZXMgd3Jvbmcgd2l0aCBCUEYgcHJvZ3JhbXMuXG5cbkknbSBiZXR0aW5nIGBicGZfZGlhZ19tb2RfYmVnaW5gIHNldHMgdXAgc29tZSBpbml0aWFsIGNvbnRleHQsIG1heWJlIGFsbG9jYXRpbmcgYSBzdHJ1Y3R1cmUgb3IgZW5hYmxpbmcgc29tZSB0cmFjaW5nLCBwcm9iYWJseSB0aWVkIHRvIGEgcGFydGljdWxhciBCUEYgcHJvZ3JhbSBvciBpbnN0YW5jZS4gVGhlbiwgYGJwZl9kaWFnX21vZF9lbmRgIHdvdWxkIGNsZWFuIHVwIGFmdGVyIHRoYXQgcHJvY2VzcywgcmVsZWFzaW5nIHJlc291cmNlcyBhbmQgbWF5YmUgd3JpdGluZyBvdXQgc29tZSBzdGF0cyBvciBlcnJvciBpbmZvcm1hdGlvbi4gSSB3b25kZXIgaWYgdGhpcyByZWxhdGVzIHRvIHRoZSB0cmFjaW5nIGFzcGVjdHMgd2UgdXNlLCBvciBpZiB0aGlzIGlzIHRoZSBjb3JlIG9mIGhvdyB0aGUgc3Vic3lzdGVtIGNhbiBkaWFnbm9zZSBhIG1pc2JlaGF2aW5nIEJQRiBwcm9ncmFtLCBvciBhIHBhcnRpY3VsYXIgY29udGV4dCBpdCdzIHJ1bm5pbmcgaW4/XG5JJ20gaW50ZXJlc3RlZCB0byBzZWUgaG93IHRoZXkgaW50ZWdyYXRlIHdpdGggdGhlIHdpZGVyIGtlcm5lbCBkaWFnbm9zdGljcyBpbmZyYXN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBob3cgZG8gdGhlc2UgaG9va3MgaW50ZXJhY3Qgd2l0aCB0aGluZ3MgbGlrZSBwZXJmIG9yIGZ0cmFjZT8gQXJlIHRoZXkganVzdCB3cmFwcGVycyBmb3IgdGhvc2UsIG9yIHNvbWV0aGluZyBtb3JlIGZ1bmRhbWVudGFsPyBHb3R0YSBkaWcgaW4gZGVlcGVyIGFuZCBjaGVjayB0aGF0IG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYxNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE3OjU5OjE4LjQ5MzI3MTM4OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2RpYWdub3N0aWNzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTYxMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTYxMDpcXHRcXHRcXHRpZiAobnNsb3RzIFxcdTAwMjZcXHUwMDI2IGFkZHIgXFx1MDAzZT0gc3RhcnQgXFx1MDAyNlxcdTAwMjYgYWRkciBcXHUwMDNjIGVuZCkge1xcbjE2MTE6XFx0XFx0XFx0XFx0c3BpID0gKChjb25zdCBjaGFyICopcmVnIC0gKGNvbnN0IGNoYXIgKilzdGF0ZS1cXHUwMDNlc3RhY2spIC9cXG4xNjEyOlxcdFxcdFxcdFxcdCAgICAgIHNpemVvZigqc3RhdGUtXFx1MDAzZXN0YWNrKTtcXG4xNjEzOlxcdFxcdFxcdFxcdCp0YXJnZXQgPSBkaWFnX3N0YWNrX3Nsb3RfdGFyZ2V0KHN0YXRlLVxcdTAwM2VkaWFnX2ZyYW1lX2lkLCBzdGF0ZS1cXHUwMDNlZnJhbWVubywgc3BpKTtcXG4xNjE0OlxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjE2MTU6XFx0XFx0XFx0fVxcbjE2MTY6XFx0XFx0fVxcbjE2MTc6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjE2MTg6XFx0fVxcbjE2MTk6XFx0XFxuMTYyMDpcXHR2b2lkIGJwZl9kaWFnX21vZF9iZWdpbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbjE2MjE6XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9yaWdpbiwgZW51bSBicGZfZGlhZ19tb2RfcmVhc29uIHJlYXNvbilcXG4xNjIyOlxcdHtcXG4xNjIzOlxcdFxcdHN0cnVjdCBicGZfZGlhZyAqZGlhZyA9IGVudi1cXHUwMDNlZGlhZztcXG4xNjI0OlxcdFxcbjE2MjU6XFx0XFx0aWYgKCFkaWFnKVxcbjE2MjY6XFx0XFx0XFx0cmV0dXJuO1xcbjE2Mjc6XFx0XFx0ZGlhZy1cXHUwMDNlbW9kLmFjdGl2ZSA9IHJlZ190b190YXJnZXQoZW52LCByZWcsIFxcdTAwMjZkaWFnLVxcdTAwM2Vtb2QudGFyZ2V0KTtcXG4xNjI4OlxcdFxcdGlmICghZGlhZy1cXHUwMDNlbW9kLmFjdGl2ZSlcXG4xNjI5OlxcdFxcdFxcdHJldHVybjtcXG4xNjMwOlxcdFxcdGRpYWctXFx1MDAzZW1vZC50YXJnZXRfcmVnX3NuYXBzaG90ID0gKnJlZztcXG4xNjMxOlxcdFxcdGRpYWctXFx1MDAzZW1vZC5pbnNuX2lkeCA9IGVudi1cXHUwMDNlaW5zbl9pZHg7XFxuMTYzMjpcXHRcXHRkaWFnLVxcdTAwM2Vtb2QucmVhc29uID0gcmVhc29uO1xcbjE2MzM6XFx0XFx0ZGlhZy1cXHUwMDNlbW9kLm9yaWdpbl92YWxpZCA9IG9yaWdpbiBcXHUwMDI2XFx1MDAyNiByZWdfdG9fdGFyZ2V0KGVudiwgb3JpZ2luLCBcXHUwMDI2ZGlhZy1cXHUwMDNlbW9kLm9yaWdpbik7XFxuMTYzNDpcXHR9XFxuMTYzNTpcXHRcXG4xNjM2OlxcdHZvaWQgYnBmX2RpYWdfbW9kX2VuZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbjE2Mzc6XFx0e1xcbjE2Mzg6XFx0XFx0c3RydWN0IGJwZl9kaWFnICpkaWFnID0gZW52LVxcdTAwM2VkaWFnO1xcbjE2Mzk6XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm5ld19yZWc7XFxuMTY0MDpcXHRcXG4xNjQxOlxcdFxcdGlmICghZGlhZyB8fCAhZGlhZy1cXHUwMDNlbW9kLmFjdGl2ZSlcXG4xNjQyOlxcdFxcdFxcdHJldHVybjtcXG4xNjQzOlxcdFxcdGRpYWctXFx1MDAzZW1vZC5hY3RpdmUgPSBmYWxzZTtcXG4xNjQ0OlxcdFxcdC8qXFxuMTY0NTpcXHRcXHQgKiBSZXNvbHZlIHRoZSB0YXJnZXQgYWdhaW4gYmVjYXVzZSB0aGUgZW5jbG9zaW5nIGZ1bmN0aW9uIHN0YXRlJ3Mgc3RhY2tcXG4xNjQ2OlxcdFxcdCAqIG1heSBoYXZlIGJlZW4gcmVhbGxvY2F0ZWQgd2hpbGUgdGhlIG1vZGlmaWNhdGlvbiB3YXMgaW4gcHJvZ3Jlc3MuXFxuMTY0NzpcXHRcXHQgKi9cXG4xNjQ4OlxcdFxcdG5ld19yZWcgPSB0YXJnZXRfdG9fcmVnKGVudiwgXFx1MDAyNmRpYWctXFx1MDAzZW1vZC50YXJnZXQpO1xcbjE2NDk6XFx0XFx0aWYgKCFuZXdfcmVnKVxcbjE2NTA6XFx0XFx0XFx0cmV0dXJuO1xcbjE2NTE6XFx0XFx0ZGlhZ19yZWNvcmRfbW9kKGVudiwgZGlhZy1cXHUwMDNlbW9kLmluc25faWR4LCBkaWFnLVxcdTAwM2Vtb2QudGFyZ2V0LCBkaWFnLVxcdTAwM2Vtb2QucmVhc29uLFxcbjE2NTI6XFx0XFx0XFx0XFx0XFx1MDAyNmRpYWctXFx1MDAzZW1vZC50YXJnZXRfcmVnX3NuYXBzaG90LCBuZXdfcmVnLFxcbjE2NTM6XFx0XFx0XFx0XFx0ZGlhZy1cXHUwMDNlbW9kLm9yaWdpbl92YWxpZCA/IFxcdTAwMjZkaWFnLVxcdTAwM2Vtb2Qub3JpZ2luIDogTlVMTCk7XFxuMTY1NDpcXHR9XFxuMTY1NTpcXHRcXG4xNjU2OlxcdHZvaWQgYnBmX2RpYWdfcmVjb3JkX3NjcnViKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuMTY1NzpcXHRcXHRcXHRcXHQgICBlbnVtIGJwZl9kaWFnX21vZF9yZWFzb24gcmVhc29uKVxcbjE2NTg6XFx0e1xcbjE2NTk6XFx0XFx0c3RydWN0IGJwZl9kaWFnX21vZF90YXJnZXQgdGFyZ2V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNzo1OToxOC40OTM0MjQzNDhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjg2NTIzMDY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmVjZW50IEtlcm5lbCBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSByZWNlbnQgbW9kaWZpY2F0aW9ucy4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIHRoZSB1cGRhdGVzIHRvIGBwcmVwYXJlX2Z1bmNfZXhpdGAgYXJlIHB1cmVseSBmb3IgZGlhZ25vc3RpYyBwdXJwb3Nlcy4gTm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRoZXJlLCBqdXN0IG1ha2luZyBpdCBlYXNpZXIgdG8gcGlucG9pbnQgaXNzdWVzLiBTaW1pbGFybHksIHRoZSBhZGp1c3RtZW50cyB0byBgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdGAgYW5kIGBjaGVja19rZnVuY19jYWxsYCBzZWVtIHRvIGJlIGZvY3VzZWQgb24gaW1wcm92ZWQgZXJyb3IgcmVwb3J0aW5nLiBUaGV5J3JlIG1ha2luZyB0aGUgZXJyb3IgbWVzc2FnZXMgbW9yZSBpbmZvcm1hdGl2ZSB3aGVuIGEga2Z1bmMgcmV0dXJucyBhIHN0cnVjdCB0aGF0J3Mgbm90IGNvbXBvc2VkIHNvbGVseSBvZiBzY2FsYXIgdHlwZXMuIFRoYXQncyBhIGRlZmluaXRlIGltcHJvdmVtZW50IGZvciBkZWJ1Z2dpbmcuXG5cbkJ1dCB3YWl0LCBgYnRmX3NjYWxhcl9zdHJ1Y3Rfd2Fsa2AgaGFzIGJlZW4gaW50cm9kdWNlZCwgYW5kIGBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0YCBub3cgbGV2ZXJhZ2VzIGl0LiBUaGlzIGRlc2VydmVzIGEgY2xvc2VyIGxvb2suIFRoZSBjb3JlIGxvZ2ljIG9mIGBidGZfc2NhbGFyX3N0cnVjdF93YWxrYCAqYXBwZWFycyogaWRlbnRpY2FsIHRvIHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBvZiBgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdGAsIGJ1dCB3aXRoIGEga2V5IGRpZmZlcmVuY2U6IGl0IHJldHVybnMgdGhlIHNwZWNpZmljIHByb2JsZW1hdGljIG1lbWJlci4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGVyZSBhcmVuJ3QgYW55IHN1YnRsZSBmdW5jdGlvbmFsIGNoYW5nZXMgaGlkZGVuIHdpdGhpbiBgYnRmX3NjYWxhcl9zdHJ1Y3Rfd2Fsa2AsIGV2ZW4gaWYgdGhlIHVuZGVybHlpbmcgc3RydWN0dXJlIGlzIHNpbWlsYXIuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MzEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNzo1OTo0NS4zNTg2NTY2OTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY3ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTYyMyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE2MjM6XFx0XFx0cmV0dXJuIGFyZ24gXFx1MDAzYz0gYXJnX2lkeDtcXG4xMTYyNDpcXHR9XFxuMTE2MjU6XFx0XFxuMTE2MjY6XFx0LypcXG4xMTYyNzpcXHQgKiBSZXR1cm5zIHRydWUgaWYgc3RydWN0IGlzIGNvbXBvc2VkIG9mIHNjYWxhcnMsIDQgbGV2ZWxzIG9mIG5lc3RpbmcgYWxsb3dlZC5cXG4xMTYyODpcXHQgKiBPbiBmYWlsdXJlIEBiYWQsIHdoZW4gZ2l2ZW4sIG5hbWVzIHRoZSBtZW1iZXIgdGhhdCBtYWRlIHRoZSBhbnN3ZXIgbm8sIHNvIGFcXG4xMTYyOTpcXHQgKiBkaWFnbm9zdGljIGNhbiBwb2ludCBhdCBpdCByYXRoZXIgdGhhbiBhdCB0aGUgd2hvbGUgdHlwZS5cXG4xMTYzMDpcXHQgKi9cXG4xMTYzMTpcXHRzdGF0aWMgYm9vbCBidGZfc2NhbGFyX3N0cnVjdF93YWxrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4xMTYzMjpcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIGludCByZWMsXFxuMTE2MzM6XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKipiYWQpXFxuMTE2MzQ6XFx0e1xcbjExNjM1OlxcdFxcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqbWVtYmVyX3R5cGU7XFxuMTE2MzY6XFx0XFx0Y29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcjtcXG4xMTYzNzpcXHRcXHR1MzIgaTtcXG4xMTYzODpcXHRcXG4xMTYzOTpcXHRcXHRpZiAoIWJ0Zl90eXBlX2lzX3N0cnVjdCh0KSlcXG4xMTY0MDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTE2NDE6XFx0XFxuMTE2NDI6XFx0XFx0Zm9yX2VhY2hfbWVtYmVyKGksIHQsIG1lbWJlcikge1xcbjExNjQzOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBidGZfYXJyYXkgKmFycmF5O1xcbjExNjQ0OlxcdFxcbjExNjQ1OlxcdFxcdFxcdG1lbWJlcl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBtZW1iZXItXFx1MDAzZXR5cGUsIE5VTEwpO1xcbjExNjQ2OlxcdFxcdFxcdGlmIChidGZfdHlwZV9pc19zdHJ1Y3QobWVtYmVyX3R5cGUpKSB7XFxuMTE2NDc6XFx0XFx0XFx0XFx0aWYgKHJlYyBcXHUwMDNlPSAzKSB7XFxuMTE2NDg6XFx0XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJtYXggc3RydWN0IG5lc3RpbmcgZGVwdGggZXhjZWVkZWRcXFxcblxcXCIpO1xcbjExNjQ5OlxcdFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMTY1MDpcXHRcXHRcXHRcXHR9XFxuMTE2NTE6XFx0XFx0XFx0XFx0aWYgKCFidGZfc2NhbGFyX3N0cnVjdF93YWxrKGVudiwgYnRmLCBtZW1iZXJfdHlwZSwgcmVjICsgMSwgYmFkKSlcXG4xMTY1MjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTE2NTM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTE2NTQ6XFx0XFx0XFx0fVxcbjExNjU1OlxcdFxcdFxcdGlmIChidGZfdHlwZV9pc19hcnJheShtZW1iZXJfdHlwZSkpIHtcXG4xMTY1NjpcXHRcXHRcXHRcXHRhcnJheSA9IGJ0Zl9hcnJheShtZW1iZXJfdHlwZSk7XFxuMTE2NTc6XFx0XFx0XFx0XFx0aWYgKCFhcnJheS1cXHUwMDNlbmVsZW1zKVxcbjExNjU4OlxcdFxcdFxcdFxcdFxcdGdvdG8gYmFkX21lbWJlcjtcXG4xMTY1OTpcXHRcXHRcXHRcXHRtZW1iZXJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJyYXktXFx1MDAzZXR5cGUsIE5VTEwpO1xcbjExNjYwOlxcdFxcdFxcdFxcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyKG1lbWJlcl90eXBlKSlcXG4xMTY2MTpcXHRcXHRcXHRcXHRcXHRnb3RvIGJhZF9tZW1iZXI7XFxuMTE2NjI6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTE2NjM6XFx0XFx0XFx0fVxcbjExNjY0OlxcdFxcdFxcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyKG1lbWJlcl90eXBlKSlcXG4xMTY2NTpcXHRcXHRcXHRcXHRnb3RvIGJhZF9tZW1iZXI7XFxuMTE2NjY6XFx0XFx0fVxcbjExNjY3OlxcdFxcdHJldHVybiB0cnVlO1xcbjExNjY4OlxcdFxcbjExNjY5OlxcdGJhZF9tZW1iZXI6XFxuMTE2NzA6XFx0XFx0aWYgKGJhZClcXG4xMTY3MTpcXHRcXHRcXHQqYmFkID0gbWVtYmVyO1xcbjExNjcyOlxcdFxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTc6NTk6NDUuMzU5NjI2NzU5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MzI1OTU4MzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIHRoaXMgcGF0Y2ggaXMgdGhhdCBpdCdzIGZ1bmRhbWVudGFsbHkgYWJvdXQgaW1wcm92aW5nIGRpYWdub3N0aWNzIGFuZCBlcnJvciBtZXNzYWdlcyB3aXRoaW4gdGhlIHZlcmlmaWVyLiBUaGUgY29yZSBsb2dpYyBvZiB0aGUgdmVyaWZpZXIgaXRzZWxmLCBzcGVjaWZpY2FsbHkgdGhlIGBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0YCBmdW5jdGlvbmFsaXR5LCB3aGljaCBoYXMgYmVlbiByZW5hbWVkIHRvIGBidGZfc2NhbGFyX3N0cnVjdF93YWxrYCwgcmVtYWlucyBmdW5jdGlvbmFsbHkgdW5jaGFuZ2VkLiBUaGUgbmV3IGBidGZfc2NhbGFyX3N0cnVjdF93YWxrYCBmdW5jdGlvbiBzaW1wbHkgcmV0dXJucyB0aGUgcHJvYmxlbWF0aWMgbWVtYmVyLCB3aGljaCBpcyB0aGVuIHVzZWQgYnkgdGhlIGNhbGxlciB0byBjcmVhdGUgYSBiZXR0ZXIgZXJyb3IgbWVzc2FnZS5cblxuSSBzZWUgdGhhdCB0aGUgYGNoZWNrX2tmdW5jX2NhbGxgIGZ1bmN0aW9uIG5vdyBsZXZlcmFnZXMgdGhpcyB1cGRhdGVkIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIG1vcmUgaW5mb3JtYXRpdmUgZXJyb3Igb3V0cHV0LiBNb3Jlb3ZlciwgdGhlIGNoYW5nZXMgaW4gYHByZXBhcmVfZnVuY19leGl0YCwgc3Vycm91bmRpbmcgdGhlIGBicGZfZGlhZ19tb2RfYmVnaW5gIGFuZCBgYnBmX2RpYWdfbW9kX2VuZGAgY2FsbHMsIGFsc28gYXBwZWFyIHRvIGJlIHB1cmVseSBkaWFnbm9zdGljLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaXMgdG8gaXRlcmF0ZSB0aHJvdWdoIHJlZ2lzdGVycyBhbmQgYW5ub3RhdGUgZWFjaCBpbmRpdmlkdWFsbHkuXG5cbkVzc2VudGlhbGx5LCBhbGwgbW9kaWZpY2F0aW9ucyBhcmUgZm9jdXNlZCBvbiBwcm92aWRpbmcgbW9yZSBncmFudWxhciBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uICBObyBjb3JlIGFsZ29yaXRobXMgb3IgZGF0YSBzdHJ1Y3R1cmVzLCB0aGF0IEkgY2FuIHNlZSwgaGF2ZSBiZWVuIGFsdGVyZWQgaW4gYSB3YXkgdGhhdCB3b3VsZCBpbnRyb2R1Y2UgbmV3IHZ1bG5lcmFiaWxpdGllcyBvciB1bnVzdWFsIGNvZGUgcGF0aHMgdGhhdCB3b3VsZCBiZSBnb29kIGZvciBmdXp6aW5nLiBUaHVzLCBJIHdvdWxkIGNsYXNzaWZ5IHRoaXMgYXMgYSBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2UgdG8gdGhlIHZlcmlmaWVyJ3MgcmVwb3J0aW5nIGNhcGFiaWxpdGllcy5cblxuVGhlcmVmb3JlLCBnaXZlbiB0aGUgZm9jdXMgb24gKmJldHRlciogcmVwb3J0aW5nIG9mICpleGlzdGluZyogaXNzdWVzIGFuZCAqbm90KiBhbHRlcmluZyB0aGUgdmVyaWZpZXIncyBjb3JlIG9wZXJhdGlvbmFsIGxvZ2ljLCBJIGNvbmNsdWRlIHRoYXQgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGluZGVlZCBiZSBgZmFsc2VgIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMDIsIk91dHB1dFRva2VucyI6ODUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODowMDowMC42ODU1ODczMDRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiB2ZXJpZmllciBkaWFnbm9zdGljIGZ1bmN0aW9ucyAoYnBmX2RpYWdfbW9kX2JlZ2luL2VuZCkgYW5kIGltcHJvdmVzIGVycm9yIG1lc3NhZ2VzIHdoZW4gYSBrZnVuYyByZXR1cm5zIGEgc3RydWN0IHRoYXQgaXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnMuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHZlcmlmaWVyIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgdmVyaWZpZXIgZGlhZ25vc3RpYyBmdW5jdGlvbnMgKGJwZl9kaWFnX21vZF9iZWdpbi9lbmQpIGFuZCBpbXByb3ZlcyBlcnJvciBtZXNzYWdlcyB3aGVuIGEga2Z1bmMgcmV0dXJucyBhIHN0cnVjdCB0aGF0IGlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSB2ZXJpZmllciBsb2dpYyBvciBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjAwOjAwLjY4NTYwODMwNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5sr4c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-24 17:31:25 +0000 UTC FinishedAt: 2026-08-24 18:00:02 +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+CgkJCTx0ZD4yMDI2LzA4LzI0IDE3OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgdmVyaWZpZXIgZGlhZ25vc3RpYyBmdW5jdGlvbnMgKGJwZl9kaWFnX21vZF9iZWdpbi9lbmQpIGFuZCBpbXByb3ZlcyBlcnJvciBtZXNzYWdlcyB3aGVuIGEga2Z1bmMgcmV0dXJucyBhIHN0cnVjdCB0aGF0IGlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSB2ZXJpZmllciBsb2dpYyBvciBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTc6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2NDdjYmViZjFjZjZjNjhiNWVlMDJlNTkwNWI5MWFjYzU2ZjYzNzE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTc6NTY6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBlMDM2YWUyMGJmNmI5Li5jNmFlY2JhNjQzN2FlIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0xMDQwMywxMCAmIzQzOzEwNDAzLDE0IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcbiBcdFx0ICogcmV0dXJuIHRvIHRoZSBjYWxsZXIgd2hhdGV2ZXIgdGhlIGNhbGxlZSBoYWQgaW4gdGhlXG4gXHRcdCAqIHJldHVybiByZWdpc3RlcihzKVxuIFx0XHQgKi9cbi1cdFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXHUwMDI2Y2FsbGVyLVx1MDAzZXJlZ3NbQlBGX1JFR18wXSwgcjAsIEJQRl9ESUFHX01PRF9XUklURSk7XG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yZWdzOyBpJiM0MzsmIzQzOylcbi1cdFx0XHRjYWxsZXItXHUwMDNlcmVnc1tyZXRfcmVnc1tpXV0gPSBjYWxsZWUtXHUwMDNlcmVnc1tyZXRfcmVnc1tpXV07XG4tXHRcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yZWdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHR1MzIgcmVnbm8gPSByZXRfcmVnc1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFx1MDAyNmNhbGxlci1cdTAwM2VyZWdzW3JlZ25vXSwgXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbcmVnbm9dLFxuJiM0MztcdFx0XHRcdFx0ICAgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbiYjNDM7XHRcdFx0Y2FsbGVyLVx1MDAzZXJlZ3NbcmVnbm9dID0gY2FsbGVlLVx1MDAzZXJlZ3NbcmVnbm9dO1xuJiM0MztcdFx0XHRicGZfZGlhZ19tb2RfZW5kKGVudik7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHQvKiBmb3IgY2FsbGJhY2tzIGxpa2UgYnBmX2xvb3Agb3IgYnBmX2Zvcl9lYWNoX21hcF9lbGVtIGdvIGJhY2sgdG8gY2FsbHNpdGUsXG5AQCAtMTE2MTksMTAgJiM0MzsxMTYyMywxNCBAQCBzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfaW1wbGljaXQoY29uc3Qgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLCB1MzIgYXJnX1xuIFx0cmV0dXJuIGFyZ24gXHUwMDNjPSBhcmdfaWR4O1xuIH1cbiBcbi0vKiBSZXR1cm5zIHRydWUgaWYgc3RydWN0IGlzIGNvbXBvc2VkIG9mIHNjYWxhcnMsIDQgbGV2ZWxzIG9mIG5lc3RpbmcgYWxsb3dlZCAqL1xuLWJvb2wgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4tXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHJlYylcbiYjNDM7LypcbiYjNDM7ICogUmV0dXJucyB0cnVlIGlmIHN0cnVjdCBpcyBjb21wb3NlZCBvZiBzY2FsYXJzLCA0IGxldmVscyBvZiBuZXN0aW5nIGFsbG93ZWQuXG4mIzQzOyAqIE9uIGZhaWx1cmUgQGJhZCwgd2hlbiBnaXZlbiwgbmFtZXMgdGhlIG1lbWJlciB0aGF0IG1hZGUgdGhlIGFuc3dlciBubywgc28gYVxuJiM0MzsgKiBkaWFnbm9zdGljIGNhbiBwb2ludCBhdCBpdCByYXRoZXIgdGhhbiBhdCB0aGUgd2hvbGUgdHlwZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIGJ0Zl9zY2FsYXJfc3RydWN0X3dhbGsoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuJiM0MztcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHJlYyxcbiYjNDM7XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqKmJhZClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKm1lbWJlcl90eXBlO1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcjtcbkBAIC0xMTY0MCwyMyAmIzQzOzExNjQ4LDM1IEBAIGJvb2wgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O21heCBzdHJ1Y3QgbmVzdGluZyBkZXB0aCBleGNlZWRlZFxcblwmIzM0Oyk7XG4gXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdFx0fVxuLVx0XHRcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIGJ0ZiwgbWVtYmVyX3R5cGUsIHJlYyAmIzQzOyAxKSlcbiYjNDM7XHRcdFx0aWYgKCFidGZfc2NhbGFyX3N0cnVjdF93YWxrKGVudiwgYnRmLCBtZW1iZXJfdHlwZSwgcmVjICYjNDM7IDEsIGJhZCkpXG4gXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcdFx0aWYgKGJ0Zl90eXBlX2lzX2FycmF5KG1lbWJlcl90eXBlKSkge1xuIFx0XHRcdGFycmF5ID0gYnRmX2FycmF5KG1lbWJlcl90eXBlKTtcbiBcdFx0XHRpZiAoIWFycmF5LVx1MDAzZW5lbGVtcylcbi1cdFx0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdFx0XHRnb3RvIGJhZF9tZW1iZXI7XG4gXHRcdFx0bWVtYmVyX3R5cGUgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGFycmF5LVx1MDAzZXR5cGUsIE5VTEwpO1xuIFx0XHRcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyKG1lbWJlcl90eXBlKSlcbi1cdFx0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdFx0XHRnb3RvIGJhZF9tZW1iZXI7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIobWVtYmVyX3R5cGUpKVxuLVx0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdFx0Z290byBiYWRfbWVtYmVyO1xuIFx0fVxuIFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztiYWRfbWVtYmVyOlxuJiM0MztcdGlmIChiYWQpXG4mIzQzO1x0XHQqYmFkID0gbWVtYmVyO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Ym9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4mIzQzO1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4mIzQzO1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIGludCByZWMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYnRmX3NjYWxhcl9zdHJ1Y3Rfd2FsayhlbnYsIGJ0ZiwgdCwgcmVjLCBOVUxMKTtcbiB9XG4gXG4gZW51bSBrZnVuY19wdHJfYXJnX3R5cGUge1xuQEAgLTE0MDI2LDE3ICYjNDM7MTQwNDYsNDEgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0ICAgIG1ldGEuZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZV0pKVxuIFx0XHRcdF9fbWFya19yZWdfY29uc3RfemVybyhlbnYsIFx1MDAyNnJlZ3NbQlBGX1JFR18wXSk7XG4gXHR9IGVsc2UgaWYgKGJ0Zl90eXBlX2lzX3N0cnVjdCh0KSkge1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKmJhZCA9IE5VTEw7XG4mIzQzO1xuIFx0XHQvKlxuIFx0XHQgKiBUaGUgcmV0dXJuZWQgc3RydWN0IGNvbWVzIGJhY2sgYXMgcmF3IHJlZ2lzdGVyIGJpdHMgbW9kZWxlZFxuIFx0XHQgKiBhcyBhbiB1bmtub3duIHNjYWxhciwgc28gaXQgbXVzdCBjb250YWluIG9ubHkgc2NhbGFyczpcbiBcdFx0ICogb3RoZXJ3aXNlIGEgcG9pbnRlciBmaWVsZCB3b3VsZCBiZSBsYXVuZGVyZWQgaW50byBhIHNjYWxhclxuIFx0XHQgKiBhbmQgZXNjYXBlIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZy5cbiBcdFx0ICovXG4tXHRcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIGRlc2NfYnRmLCB0LCAwKSkge1xuJiM0MztcdFx0aWYgKCFidGZfc2NhbGFyX3N0cnVjdF93YWxrKGVudiwgZGVzY19idGYsIHQsIDAsIFx1MDAyNmJhZCkpIHtcbiYjNDM7XHRcdFx0Y29uc3QgY2hhciAqbWVtYmVyX25vdGUgPSBcJiMzNDtcJiMzNDs7XG4mIzQzO1xuIFx0XHRcdHZlcmJvc2UoZW52LFxuIFx0XHRcdFx0XCYjMzQ7a2VybmVsIGZ1bmN0aW9uICVzIHJldHVybnMgJXMgJXMgdGhhdCBpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFyc1xcblwmIzM0OyxcbiBcdFx0XHRcdGZ1bmNfbmFtZSwgYnRmX3R5cGVfc3RyKHQpLFxuIFx0XHRcdFx0YnRmX25hbWVfYnlfb2Zmc2V0KGRlc2NfYnRmLCB0LVx1MDAzZW5hbWVfb2ZmKSk7XG4mIzQzO1x0XHRcdGlmIChiYWQpIHtcbiYjNDM7XHRcdFx0XHRjb25zdCBjaGFyICpiYWRfbmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChkZXNjX2J0ZiwgYmFkLVx1MDAzZW5hbWVfb2ZmKTtcbiYjNDM7XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmJhZF90eXBlO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRiYWRfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCBiYWQtXHUwMDNldHlwZSwgTlVMTCk7XG4mIzQzO1x0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O21lbWJlciAmIzM5OyVzJiMzOTsgaGFzIHR5cGUgJXNcXG5cJiMzNDssIGJhZF9uYW1lLFxuJiM0MztcdFx0XHRcdFx0YnRmX3R5cGVfc3RyKGJhZF90eXBlKSk7XG4mIzQzO1x0XHRcdFx0bWVtYmVyX25vdGUgPSBicGZfZGlhZ19mbXQoXG4mIzQzO1x0XHRcdFx0XHRlbnYsIFwmIzM0OyBJdHMgbWVtYmVyICYjMzk7JXMmIzM5OyBpcyAlcywgbm90IGEgc2NhbGFyLlwmIzM0OywgYmFkX25hbWUsXG4mIzQzO1x0XHRcdFx0XHRidGZfdHlwZV9zdHIoYmFkX3R5cGUpKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRicGZfZGlhZ19wcm9ncmFtX3N0cnVjdHVyZShcbiYjNDM7XHRcdFx0XHRlbnYsIGluc25faWR4LCBcJiMzNDt1bnN1cHBvcnRlZCBrZXJuZWwgZnVuY3Rpb24gcmV0dXJuIHR5cGVcJiMzNDssXG4mIzQzO1x0XHRcdFx0XCYjMzQ7Q2FsbCBhIGtlcm5lbCBmdW5jdGlvbiB0aGF0IHJldHVybnMgb25seSBzY2FsYXJzIGJ5IHZhbHVlLlwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcJiMzNDslcygpIHJldHVybnMgJXMgJXMgYnkgdmFsdWUuJXMgXCYjMzQ7XG4mIzQzO1x0XHRcdFx0XCYjMzQ7QSBieS12YWx1ZSByZXR1cm4gYXJyaXZlcyBhcyByYXcgcmVnaXN0ZXIgYml0cyB0aGF0IHRoZSB2ZXJpZmllciBcJiMzNDtcbiYjNDM7XHRcdFx0XHRcJiMzNDtjYW4gb25seSBtb2RlbCBhcyB1bmtub3duIHNjYWxhcnMsIHNvIGUuZy4gYSBwb2ludGVyIG1heSBsb3NlIFwmIzM0O1xuJiM0MztcdFx0XHRcdFwmIzM0O3RoZSBwcm92ZW5hbmNlIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcgdGhhdCBtYWtlIGl0IHNhZmUgdG8gdXNlLlwmIzM0OyxcbiYjNDM7XHRcdFx0XHRmdW5jX25hbWUsIGJ0Zl90eXBlX3N0cih0KSxcbiYjNDM7XHRcdFx0XHRidGZfbmFtZV9ieV9vZmZzZXQoZGVzY19idGYsIHQtXHUwMDNlbmFtZV9vZmYpLCBtZW1iZXJfbm90ZSk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcdFx0bWFya19rZnVuY19yZXRfcmVncyhlbnYsIHJlZ3MsIHQtXHUwMDNlc2l6ZSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jLmNcbmluZGV4IGQ2YjQyMmFlOTc4NGIuLmJjOWFmZmZjN2M2ODkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuYy5jXG5AQCAtNzIsNiAmIzQzOzcyLDcgQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19mYXN0Y2FsbF9mYWlsKHZvaWQpXG4gU0VDKFwmIzM0O3RjXCYjMzQ7KVxuIF9fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0XG4gX19mYWlsdXJlIF9fbXNnKFwmIzM0O2lzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzXCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDttZW1iZXIgJiMzOTtwJiMzOTsgaGFzIHR5cGUgUFRSXCYjMzQ7KVxuIF9fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfcHRyX2ZhaWwodm9pZClcbiB7XG4gXHRhc20gdm9sYXRpbGUgKFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE3OjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiB2ZXJpZmllciBkaWFnbm9zdGljIGZ1bmN0aW9ucyAoYnBmX2RpYWdfbW9kX2JlZ2luL2VuZCkgYW5kIGltcHJvdmVzIGVycm9yIG1lc3NhZ2VzIHdoZW4gYSBrZnVuYyByZXR1cm5zIGEgc3RydWN0IHRoYXQgaXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnMuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHZlcmlmaWVyIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY0N2NiZWJmMWNmNmM2OGI1ZWUwMmU1OTA1YjkxYWNjNTZmNjM3MTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAyNCAxNzo1Njo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCBlMDM2YWUyMGJmNmI5Li5jNmFlY2JhNjQzN2FlIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC0xMDQwMywxMCAmIzQzOzEwNDAzLDE0IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeCkKIAkJICogcmV0dXJuIHRvIHRoZSBjYWxsZXIgd2hhdGV2ZXIgdGhlIGNhbGxlZSBoYWQgaW4gdGhlCiAJCSAqIHJldHVybiByZWdpc3RlcihzKQogCQkgKi8KLQkJYnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgJmFtcDtjYWxsZXItJmd0O3JlZ3NbQlBGX1JFR18wXSwgcjAsIEJQRl9ESUFHX01PRF9XUklURSk7Ci0JCWZvciAoaSA9IDA7IGkgJmx0OyBucmVnczsgaSYjNDM7JiM0MzspCi0JCQljYWxsZXItJmd0O3JlZ3NbcmV0X3JlZ3NbaV1dID0gY2FsbGVlLSZndDtyZWdzW3JldF9yZWdzW2ldXTsKLQkJYnBmX2RpYWdfbW9kX2VuZChlbnYpOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG5yZWdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCXUzMiByZWdubyA9IHJldF9yZWdzW2ldOwomIzQzOwomIzQzOwkJCWJwZl9kaWFnX21vZF9iZWdpbihlbnYsICZhbXA7Y2FsbGVyLSZndDtyZWdzW3JlZ25vXSwgJmFtcDtjYWxsZWUtJmd0O3JlZ3NbcmVnbm9dLAomIzQzOwkJCQkJICAgQlBGX0RJQUdfTU9EX1dSSVRFKTsKJiM0MzsJCQljYWxsZXItJmd0O3JlZ3NbcmVnbm9dID0gY2FsbGVlLSZndDtyZWdzW3JlZ25vXTsKJiM0MzsJCQlicGZfZGlhZ19tb2RfZW5kKGVudik7CiYjNDM7CQl9CiAJfQogCiAJLyogZm9yIGNhbGxiYWNrcyBsaWtlIGJwZl9sb29wIG9yIGJwZl9mb3JfZWFjaF9tYXBfZWxlbSBnbyBiYWNrIHRvIGNhbGxzaXRlLApAQCAtMTE2MTksMTAgJiM0MzsxMTYyMywxNCBAQCBzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfaW1wbGljaXQoY29uc3Qgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLCB1MzIgYXJnXwogCXJldHVybiBhcmduICZsdDs9IGFyZ19pZHg7CiB9CiAKLS8qIFJldHVybnMgdHJ1ZSBpZiBzdHJ1Y3QgaXMgY29tcG9zZWQgb2Ygc2NhbGFycywgNCBsZXZlbHMgb2YgbmVzdGluZyBhbGxvd2VkICovCi1ib29sIGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCBpbnQgcmVjKQomIzQzOy8qCiYjNDM7ICogUmV0dXJucyB0cnVlIGlmIHN0cnVjdCBpcyBjb21wb3NlZCBvZiBzY2FsYXJzLCA0IGxldmVscyBvZiBuZXN0aW5nIGFsbG93ZWQuCiYjNDM7ICogT24gZmFpbHVyZSBAYmFkLCB3aGVuIGdpdmVuLCBuYW1lcyB0aGUgbWVtYmVyIHRoYXQgbWFkZSB0aGUgYW5zd2VyIG5vLCBzbyBhCiYjNDM7ICogZGlhZ25vc3RpYyBjYW4gcG9pbnQgYXQgaXQgcmF0aGVyIHRoYW4gYXQgdGhlIHdob2xlIHR5cGUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgYnRmX3NjYWxhcl9zdHJ1Y3Rfd2FsayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiYjNDM7CQkJCSAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHJlYywKJiM0MzsJCQkJICAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKipiYWQpCiB7CiAJY29uc3Qgc3RydWN0IGJ0Zl90eXBlICptZW1iZXJfdHlwZTsKIAljb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyOwpAQCAtMTE2NDAsMjMgJiM0MzsxMTY0OCwzNSBAQCBib29sIGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCQl2ZXJib3NlKGVudiwgJiMzNDttYXggc3RydWN0IG5lc3RpbmcgZGVwdGggZXhjZWVkZWRcbiYjMzQ7KTsKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9Ci0JCQlpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBidGYsIG1lbWJlcl90eXBlLCByZWMgJiM0MzsgMSkpCiYjNDM7CQkJaWYgKCFidGZfc2NhbGFyX3N0cnVjdF93YWxrKGVudiwgYnRmLCBtZW1iZXJfdHlwZSwgcmVjICYjNDM7IDEsIGJhZCkpCiAJCQkJcmV0dXJuIGZhbHNlOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKGJ0Zl90eXBlX2lzX2FycmF5KG1lbWJlcl90eXBlKSkgewogCQkJYXJyYXkgPSBidGZfYXJyYXkobWVtYmVyX3R5cGUpOwogCQkJaWYgKCFhcnJheS0mZ3Q7bmVsZW1zKQotCQkJCXJldHVybiBmYWxzZTsKJiM0MzsJCQkJZ290byBiYWRfbWVtYmVyOwogCQkJbWVtYmVyX3R5cGUgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGFycmF5LSZndDt0eXBlLCBOVUxMKTsKIAkJCWlmICghYnRmX3R5cGVfaXNfc2NhbGFyKG1lbWJlcl90eXBlKSkKLQkJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQkJCWdvdG8gYmFkX21lbWJlcjsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmICghYnRmX3R5cGVfaXNfc2NhbGFyKG1lbWJlcl90eXBlKSkKLQkJCXJldHVybiBmYWxzZTsKJiM0MzsJCQlnb3RvIGJhZF9tZW1iZXI7CiAJfQogCXJldHVybiB0cnVlOwomIzQzOwomIzQzO2JhZF9tZW1iZXI6CiYjNDM7CWlmIChiYWQpCiYjNDM7CQkqYmFkID0gbWVtYmVyOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAomIzQzOwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiYjNDM7CQkJICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHJlYykKJiM0Mzt7CiYjNDM7CXJldHVybiBidGZfc2NhbGFyX3N0cnVjdF93YWxrKGVudiwgYnRmLCB0LCByZWMsIE5VTEwpOwogfQogCiBlbnVtIGtmdW5jX3B0cl9hcmdfdHlwZSB7CkBAIC0xNDAyNiwxNyAmIzQzOzE0MDQ2LDQxIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCSAgICBtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdKSkKIAkJCV9fbWFya19yZWdfY29uc3RfemVybyhlbnYsICZhbXA7cmVnc1tCUEZfUkVHXzBdKTsKIAl9IGVsc2UgaWYgKGJ0Zl90eXBlX2lzX3N0cnVjdCh0KSkgewomIzQzOwkJY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKmJhZCA9IE5VTEw7CiYjNDM7CiAJCS8qCiAJCSAqIFRoZSByZXR1cm5lZCBzdHJ1Y3QgY29tZXMgYmFjayBhcyByYXcgcmVnaXN0ZXIgYml0cyBtb2RlbGVkCiAJCSAqIGFzIGFuIHVua25vd24gc2NhbGFyLCBzbyBpdCBtdXN0IGNvbnRhaW4gb25seSBzY2FsYXJzOgogCQkgKiBvdGhlcndpc2UgYSBwb2ludGVyIGZpZWxkIHdvdWxkIGJlIGxhdW5kZXJlZCBpbnRvIGEgc2NhbGFyCiAJCSAqIGFuZCBlc2NhcGUgcHJvdmVuYW5jZSBhbmQgcmVmZXJlbmNlIHRyYWNraW5nLgogCQkgKi8KLQkJaWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgZGVzY19idGYsIHQsIDApKSB7CiYjNDM7CQlpZiAoIWJ0Zl9zY2FsYXJfc3RydWN0X3dhbGsoZW52LCBkZXNjX2J0ZiwgdCwgMCwgJmFtcDtiYWQpKSB7CiYjNDM7CQkJY29uc3QgY2hhciAqbWVtYmVyX25vdGUgPSAmIzM0OyYjMzQ7OwomIzQzOwogCQkJdmVyYm9zZShlbnYsCiAJCQkJJiMzNDtrZXJuZWwgZnVuY3Rpb24gJXMgcmV0dXJucyAlcyAlcyB0aGF0IGlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzXG4mIzM0OywKIAkJCQlmdW5jX25hbWUsIGJ0Zl90eXBlX3N0cih0KSwKIAkJCQlidGZfbmFtZV9ieV9vZmZzZXQoZGVzY19idGYsIHQtJmd0O25hbWVfb2ZmKSk7CiYjNDM7CQkJaWYgKGJhZCkgewomIzQzOwkJCQljb25zdCBjaGFyICpiYWRfbmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChkZXNjX2J0ZiwgYmFkLSZndDtuYW1lX29mZik7CiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqYmFkX3R5cGU7CiYjNDM7CiYjNDM7CQkJCWJhZF90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIGJhZC0mZ3Q7dHlwZSwgTlVMTCk7CiYjNDM7CQkJCXZlcmJvc2UoZW52LCAmIzM0O21lbWJlciAmIzM5OyVzJiMzOTsgaGFzIHR5cGUgJXNcbiYjMzQ7LCBiYWRfbmFtZSwKJiM0MzsJCQkJCWJ0Zl90eXBlX3N0cihiYWRfdHlwZSkpOwomIzQzOwkJCQltZW1iZXJfbm90ZSA9IGJwZl9kaWFnX2ZtdCgKJiM0MzsJCQkJCWVudiwgJiMzNDsgSXRzIG1lbWJlciAmIzM5OyVzJiMzOTsgaXMgJXMsIG5vdCBhIHNjYWxhci4mIzM0OywgYmFkX25hbWUsCiYjNDM7CQkJCQlidGZfdHlwZV9zdHIoYmFkX3R5cGUpKTsKJiM0MzsJCQl9CiYjNDM7CQkJYnBmX2RpYWdfcHJvZ3JhbV9zdHJ1Y3R1cmUoCiYjNDM7CQkJCWVudiwgaW5zbl9pZHgsICYjMzQ7dW5zdXBwb3J0ZWQga2VybmVsIGZ1bmN0aW9uIHJldHVybiB0eXBlJiMzNDssCiYjNDM7CQkJCSYjMzQ7Q2FsbCBhIGtlcm5lbCBmdW5jdGlvbiB0aGF0IHJldHVybnMgb25seSBzY2FsYXJzIGJ5IHZhbHVlLiYjMzQ7LAomIzQzOwkJCQkmIzM0OyVzKCkgcmV0dXJucyAlcyAlcyBieSB2YWx1ZS4lcyAmIzM0OwomIzQzOwkJCQkmIzM0O0EgYnktdmFsdWUgcmV0dXJuIGFycml2ZXMgYXMgcmF3IHJlZ2lzdGVyIGJpdHMgdGhhdCB0aGUgdmVyaWZpZXIgJiMzNDsKJiM0MzsJCQkJJiMzNDtjYW4gb25seSBtb2RlbCBhcyB1bmtub3duIHNjYWxhcnMsIHNvIGUuZy4gYSBwb2ludGVyIG1heSBsb3NlICYjMzQ7CiYjNDM7CQkJCSYjMzQ7dGhlIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZyB0aGF0IG1ha2UgaXQgc2FmZSB0byB1c2UuJiMzNDssCiYjNDM7CQkJCWZ1bmNfbmFtZSwgYnRmX3R5cGVfc3RyKHQpLAomIzQzOwkJCQlidGZfbmFtZV9ieV9vZmZzZXQoZGVzY19idGYsIHQtJmd0O25hbWVfb2ZmKSwgbWVtYmVyX25vdGUpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJbWFya19rZnVuY19yZXRfcmVncyhlbnYsIHJlZ3MsIHQtJmd0O3NpemUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jLmMKaW5kZXggZDZiNDIyYWU5Nzg0Yi4uYmM5YWZmZmM3YzY4OSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuYy5jCkBAIC03Miw2ICYjNDM7NzIsNyBAQCBfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX2Zhc3RjYWxsX2ZhaWwodm9pZCkKIFNFQygmIzM0O3RjJiMzNDspCiBfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NAogX19mYWlsdXJlIF9fbXNnKCYjMzQ7aXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnMmIzM0OykKJiM0MztfX21zZygmIzM0O21lbWJlciAmIzM5O3AmIzM5OyBoYXMgdHlwZSBQVFImIzM0OykKIF9fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfcHRyX2ZhaWwodm9pZCkKIHsKIAlhc20gdm9sYXRpbGUgKAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODQyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUaGlzIEJQRiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSXQgc2VlbXMgdGhleSYjMzk7dmUgcmVmYWN0b3JlZCBgcHJlcGFyZV9mdW5jX2V4aXRgLiBJbnN0ZWFkIG9mIHRoYXQgbW9ub2xpdGhpYyBgYnBmX2RpYWdfbW9kYCBjYWxsIGFyb3VuZCB0aGUgd2hvbGUgbG9vcCBjb25jZXJuaW5nIGByZXRfcmVnc2AsIHRoZXkmIzM5O3JlIGRvaW5nIGBicGZfZGlhZ19tb2RfYmVnaW5gIGFuZCBgYnBmX2RpYWdfbW9kX2VuZGAgZm9yIGVhY2ggcmVnaXN0ZXIgaW5kaXZpZHVhbGx5LiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBtYWtlcyBzZW5zZSBmb3IgbW9yZSBncmFudWxhciBkaWFnbm9zdGljcy4gQW5kIEkgc2VlIGEgY2hhbmdlIHRvIGBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0YCDigJMgdGhleSYjMzk7cmUgcHVsbGluZyBvdXQgdGhhdCAmIzM0O2JhZCBtZW1iZXImIzM0OyBsb2dpYyBpbnRvIGBidGZfc2NhbGFyX3N0cnVjdF93YWxrYCwgd2hpY2ggc2VlbXMgY2xlYW5lci4gVGhlbiwgdGhleeKAmXJlIGxldmVyYWdpbmcgdGhhdCBpbiBgY2hlY2tfa2Z1bmNfY2FsbGAgdG8gZ2l2ZSBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMgaWYgYSBrZnVuYyByZXR1cm5zIGEgc3RydWN0IHRoYXQmIzM5O3MgKm5vdCoganVzdCBzY2FsYXJzLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGVwIHRvd2FyZCBtb3JlIGhlbHBmdWwgZGVidWdnaW5nLgoKSG9sZCBvbi4uLiB0aG9zZSBgYnBmX2RpYWdfbW9kX2JlZ2luYCBhbmQgYGJwZl9kaWFnX21vZF9lbmRgIGZ1bmN0aW9ucy4uLiBJIHJlY29nbml6ZSB0aG9zZSBuYW1lcyBhcyBiZWluZyBkaWFnbm9zdGljLXJlbGF0ZWQuIExldCBtZSBxdWlja2x5IGRpZyBpbnRvIHdoYXQgdGhvc2UgZG8gZXhhY3RseS4gR290dGEgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRob3NlIGNoYW5nZXMgZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTc6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2RpYWdfbW9kX2JlZ2luJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz0xNTc5PXN0YXRpYyBib29sIHJlZ190b190YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTYxOS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYzoxNjIwOnZvaWQgYnBmX2RpYWdfbW9kX2JlZ2luKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTYyMS1cdFx0XHRjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb3JpZ2luLCBlbnVtIGJwZl9kaWFnX21vZF9yZWFzb24gcmVhc29uKVxuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuaD05Nz12b2lkIGJwZl9kaWFnX3JlY29yZF9icmFuY2goc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGluc25faWR4LCBib29sIGNvbmRfdHJ1ZSk7XG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmg6OTg6dm9pZCBicGZfZGlhZ19tb2RfYmVnaW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuaC05OS1cdFx0XHRjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb3JpZ2luLCBlbnVtIGJwZl9kaWFnX21vZF9yZWFzb24gcmVhc29uKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzQ5MT1zdGF0aWMgdm9pZCBzYXZlX3JlZ2lzdGVyX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM0OTctXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzQ5ODpcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFx1MDAyNnN0YXRlLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIsIHJlZywgQlBGX0RJQUdfTU9EX1NQSUxMKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNDk5LVx0c3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ciA9ICpyZWc7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTM5MDY9c3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zOTI5LVx0aWYgKGRzdF9yZWdubyBcdTAwM2U9IDApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzkzMDpcdFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXHUwMDI2c3RhdGUtXHUwMDNlcmVnc1tkc3RfcmVnbm9dLCByZWcsIEJQRl9ESUFHX01PRF9XUklURSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzkzMS1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDIxMj1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX2FyZ193cml0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MjM1LVx0YXJnID0gXHUwMDI2c3RhdGUtXHUwMDNlc3RhY2tfYXJnX3JlZ3Nbc3BpXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MjM2Olx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgYXJnLCB2YWx1ZV9yZWcsIEJQRl9ESUFHX01PRF9XUklURSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDIzNy1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDI1NT1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX2FyZ19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQyNzctXHRjdXIgPSB2c3RhdGUtXHUwMDNlZnJhbWVbdnN0YXRlLVx1MDAzZWN1cmZyYW1lXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0Mjc4Olx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXHUwMDI2Y3VyLVx1MDAzZXJlZ3NbZHN0X3JlZ25vXSwgYXJnLCBCUEZfRElBR19NT0RfV1JJVEUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTQyNzktXHRjdXItXHUwMDNlcmVnc1tkc3RfcmVnbm9dID0gKmFyZztcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjY2Mz1zdGF0aWMgaW50IGNoZWNrX2xvYWRfbWVtKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY5Ni1cdCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjY2OTc6XHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBcdTAwMjZyZWdzW2luc24tXHUwMDNlZHN0X3JlZ10sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY5OC1cdGVyciA9IGNoZWNrX21lbV9hY2Nlc3MoZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgsIHJlZ3MgJiM0MzsgaW5zbi1cdTAwM2VzcmNfcmVnLCBhcmdub19mcm9tX3JlZyhpbnNuLVx1MDAzZXNyY19yZWcpLCBpbnNuLVx1MDAzZW9mZixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Njc0OD1zdGF0aWMgaW50IGNoZWNrX2F0b21pY19ybXcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjgxMS1cdGlmICghZXJyIFx1MDAyNlx1MDAyNiBsb2FkX3JlZyBcdTAwM2U9IDApIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2ODEyOlx0XHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBjdXJfcmVncyhlbnYpICYjNDM7IGxvYWRfcmVnLCBOVUxMLCBCUEZfRElBR19NT0RfV1JJVEUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY4MTMtXHRcdGVyciA9IGNoZWNrX21lbV9hY2Nlc3MoZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgsIGRzdF9yZWcsIGFyZ25vX2Zyb21fcmVnKGluc24tXHUwMDNlZHN0X3JlZyksXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTk1NzQ9c3RhdGljIHZvaWQgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTU4Mi1cdFx0aWYgKHJlZy1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fUkNVKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTU4MzpcdFx0XHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCByZWcsIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTU4NC1cdFx0XHRyZWctXHUwMDNldHlwZSBcdTAwMjY9IH4oTUVNX1JDVSB8IFBUUl9NQVlCRV9OVUxMKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTU5MT1zdGF0aWMgaW50IHJlZl9jb252ZXJ0X2FsbG9jX3JjdV9wcm90ZWN0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGlkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NjA0LVx0XHRpZiAoKHJlZy1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fQUxMT0MpIFx1MDAyNlx1MDAyNiAocmVnLVx1MDAzZXR5cGUgXHUwMDI2IE1FTV9QRVJDUFUpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTYwNTpcdFx0XHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCByZWcsIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTYwNi1cdFx0XHRyZWctXHUwMDNlaWQgPSAwO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05OTI4PXN0YXRpYyBpbnQgY2hlY2tfZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTk4Ny1cdFx0ZWxzZVxua2VybmVsL2JwZi92ZXJpZmllci5jOjk5ODg6XHRcdFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXHUwMDI2Y2FsbGVyLVx1MDAzZXJlZ3NbQlBGX1JFR18wXSwgTlVMTCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05OTg5LVx0XHRjbGVhcl9jYWxsZXJfc2F2ZWRfcmVncyhlbnYsIGNhbGxlci1cdTAwM2VyZWdzKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAzNTM9c3RhdGljIGludCBwcmVwYXJlX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgKmluc25faWR4KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQwOC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDQwOTpcdFx0XHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBcdTAwMjZjYWxsZXItXHUwMDNlcmVnc1tyZWdub10sIFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW3JlZ25vXSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQxMC1cdFx0XHRcdFx0ICAgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA4MzI9c3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMDk1LVx0YnBmX2RpYWdfcmVjb3JkX2NhbGxlcl9zYXZlZChlbnYsIHJlZ3MpO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjExMDk2Olx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXHUwMDI2cmVnc1tCUEZfUkVHXzBdLCBOVUxMLCBCUEZfRElBR19NT0RfV1JJVEUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExMDk3LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ0FMTEVSX1NBVkVEX1JFR1M7IGkmIzQzOyYjNDM7KSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjY4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjY5Olx0XHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBcdTAwMjZyZWdzW0JQRl9SRUdfMF0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyNzAtXHRcdHJlZ3NbQlBGX1JFR18wXS50eXBlIFx1MDAyNj0gflBUUl9NQVlCRV9OVUxMO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzc3OD1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDAyMS1cdGJwZl9kaWFnX3JlY29yZF9jYWxsZXJfc2F2ZWQoZW52LCByZWdzKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDAyMjpcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFx1MDAyNnJlZ3NbQlBGX1JFR18wXSwgTlVMTCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDAyMy1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIENBTExFUl9TQVZFRF9SRUdTOyBpJiM0MzsmIzQzOykge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNTkyMz1zdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTI4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1OTI5Olx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXHUwMDI2cmVnc1tpbnNuLVx1MDAzZWRzdF9yZWddLCBOVUxMLCBCUEZfRElBR19NT0RfV1JJVEUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTMwLVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzE4NT1zdGF0aWMgaW50IGNoZWNrX2xkX2ltbShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MjAyLVx0ZHN0X3JlZyA9IFx1MDAyNnJlZ3NbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzIwMzpcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIGRzdF9yZWcsIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcyMDQtXHRpZiAoaW5zbi1cdTAwM2VzcmNfcmVnID09IDApIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTczMTM9c3RhdGljIGludCBjaGVja19sZF9hYnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzM2MS1cdGJwZl9kaWFnX3JlY29yZF9jYWxsZXJfc2F2ZWQoZW52LCByZWdzKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzM2MjpcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFx1MDAyNnJlZ3NbQlBGX1JFR18wXSwgTlVMTCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzM2My1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIENBTExFUl9TQVZFRF9SRUdTOyBpJiM0MzsmIzQzOykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE3OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NjQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIFZlcmlmaWVyIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIE15IGluaXRpYWwgc2NhbiBzaG93cyB0aGUgY29yZSBtb2RpZmljYXRpb24gaW4gYHByZXBhcmVfZnVuY19leGl0YC4gSXQgYXBwZWFycyB0aGV5JiMzOTtyZSBub3cgd3JhcHBpbmcgdGhlIHJlZ2lzdGVyIGNvcHkg4oCTIHNwZWNpZmljYWxseSwgYGNhbGxlci0mZ3Q7cmVnc1tyZWdub10gPSBjYWxsZWUtJmd0O3JlZ3NbcmVnbm9dO2Ag4oCTIHdpdGggYGJwZl9kaWFnX21vZF9iZWdpbmAgYW5kIGBicGZfZGlhZ19tb2RfZW5kYCBmb3IgKmVhY2gqIHJlZ2lzdGVyLiBUaGF0JiMzOTtzIGEgYml0IHVudXN1YWwuIFByZXZpb3VzbHksIGl0IGxvb2tlZCBsaWtlIHRoZXkgd2VyZSBkb2luZyBhIHNpbmdsZSB3cmFwcGVyIGZvciB0aGUgZW50aXJlIHJlZ2lzdGVyIHNldC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIHVzZSBvZiBgYnBmX2RpYWdfbW9kX2JlZ2luYC4gVGhpcyBzY3JlYW1zICpkaWFnbm9zdGljKiBmdW5jdGlvbiwgc28gaXMgdGhpcyBqdXN0IGxvZ2dpbmcsIG9yIGRvZXMgdGhpcyBhY3R1YWxseSBpbnRyb2R1Y2UgZnVuY3Rpb25hbCBjaGFuZ2VzPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYnBmX2RpYWdfbW9kX2JlZ2luYC4gR290dGEgc2VlIGlmIHRoaXMgaGFzIHNpZGUgZWZmZWN0cyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTc6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBicGZfZGlhZ19tb2RfYmVnaW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTE1Nzk9c3RhdGljIGJvb2wgcmVnX3RvX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNjE5LVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE2MjA6dm9pZCBicGZfZGlhZ19tb2RfYmVnaW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0xNjIxLVx0XHRcdGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpvcmlnaW4sIGVudW0gYnBmX2RpYWdfbW9kX3JlYXNvbiByZWFzb24pXG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5oPTk3PXZvaWQgYnBmX2RpYWdfcmVjb3JkX2JyYW5jaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGJvb2wgY29uZF90cnVlKTtcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuaDo5ODp2b2lkIGJwZl9kaWFnX21vZF9iZWdpbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5oLTk5LVx0XHRcdGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpvcmlnaW4sIGVudW0gYnBmX2RpYWdfbW9kX3JlYXNvbiByZWFzb24pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE3OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2MTcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGRpYWdub3N0aWMgbW9kdWxlIGZ1bmN0aW9uczoKCioqRGl2aW5nIGludG8gQlBGIERpYWdub3N0aWNzIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBrZXJuZWwvYnBmL2RpYWdub3N0aWNzLmNgLiBTZWVtcyBsaWtlIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEJQRiBzdWJzeXN0ZW0gaGFuZGxlcyBpdHMgb3duIGRpYWdub3N0aWNzLCByaWdodD8gVGhlIGtleSBoZXJlIGFyZSB0aGUgYGJwZl9kaWFnX21vZF9iZWdpbmAgYW5kIGBicGZfZGlhZ19tb2RfZW5kYCBmdW5jdGlvbnMuIEkmIzM5O20gYXNzdW1pbmcgdGhlc2UgYXJlIHNvbWUga2luZCBvZiBzY29wZSBtYXJrZXJzIHdpdGhpbiB0aGUgbW9kdWxlLCBmb3IgZWl0aGVyIGluc3RydW1lbnRhdGlvbiBvciByZXNvdXJjZSB0cmFja2luZywgb3IgbWF5YmUgZXZlbiBkZWJ1Z2dpbmcgYXNzaXN0YW5jZSB3aGVuIHNvbWV0aGluZyBnb2VzIHdyb25nIHdpdGggQlBGIHByb2dyYW1zLgoKSSYjMzk7bSBiZXR0aW5nIGBicGZfZGlhZ19tb2RfYmVnaW5gIHNldHMgdXAgc29tZSBpbml0aWFsIGNvbnRleHQsIG1heWJlIGFsbG9jYXRpbmcgYSBzdHJ1Y3R1cmUgb3IgZW5hYmxpbmcgc29tZSB0cmFjaW5nLCBwcm9iYWJseSB0aWVkIHRvIGEgcGFydGljdWxhciBCUEYgcHJvZ3JhbSBvciBpbnN0YW5jZS4gVGhlbiwgYGJwZl9kaWFnX21vZF9lbmRgIHdvdWxkIGNsZWFuIHVwIGFmdGVyIHRoYXQgcHJvY2VzcywgcmVsZWFzaW5nIHJlc291cmNlcyBhbmQgbWF5YmUgd3JpdGluZyBvdXQgc29tZSBzdGF0cyBvciBlcnJvciBpbmZvcm1hdGlvbi4gSSB3b25kZXIgaWYgdGhpcyByZWxhdGVzIHRvIHRoZSB0cmFjaW5nIGFzcGVjdHMgd2UgdXNlLCBvciBpZiB0aGlzIGlzIHRoZSBjb3JlIG9mIGhvdyB0aGUgc3Vic3lzdGVtIGNhbiBkaWFnbm9zZSBhIG1pc2JlaGF2aW5nIEJQRiBwcm9ncmFtLCBvciBhIHBhcnRpY3VsYXIgY29udGV4dCBpdCYjMzk7cyBydW5uaW5nIGluPwpJJiMzOTttIGludGVyZXN0ZWQgdG8gc2VlIGhvdyB0aGV5IGludGVncmF0ZSB3aXRoIHRoZSB3aWRlciBrZXJuZWwgZGlhZ25vc3RpY3MgaW5mcmFzdHJ1Y3R1cmUuIFNwZWNpZmljYWxseSwgaG93IGRvIHRoZXNlIGhvb2tzIGludGVyYWN0IHdpdGggdGhpbmdzIGxpa2UgcGVyZiBvciBmdHJhY2U/IEFyZSB0aGV5IGp1c3Qgd3JhcHBlcnMgZm9yIHRob3NlLCBvciBzb21ldGhpbmcgbW9yZSBmdW5kYW1lbnRhbD8gR290dGEgZGlnIGluIGRlZXBlciBhbmQgY2hlY2sgdGhhdCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTc6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2MTA6XHRcdFx0aWYgKG5zbG90cyBcdTAwMjZcdTAwMjYgYWRkciBcdTAwM2U9IHN0YXJ0IFx1MDAyNlx1MDAyNiBhZGRyIFx1MDAzYyBlbmQpIHtcbjE2MTE6XHRcdFx0XHRzcGkgPSAoKGNvbnN0IGNoYXIgKilyZWcgLSAoY29uc3QgY2hhciAqKXN0YXRlLVx1MDAzZXN0YWNrKSAvXG4xNjEyOlx0XHRcdFx0ICAgICAgc2l6ZW9mKCpzdGF0ZS1cdTAwM2VzdGFjayk7XG4xNjEzOlx0XHRcdFx0KnRhcmdldCA9IGRpYWdfc3RhY2tfc2xvdF90YXJnZXQoc3RhdGUtXHUwMDNlZGlhZ19mcmFtZV9pZCwgc3RhdGUtXHUwMDNlZnJhbWVubywgc3BpKTtcbjE2MTQ6XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbjE2MTU6XHRcdFx0fVxuMTYxNjpcdFx0fVxuMTYxNzpcdFx0cmV0dXJuIGZhbHNlO1xuMTYxODpcdH1cbjE2MTk6XHRcbjE2MjA6XHR2b2lkIGJwZl9kaWFnX21vZF9iZWdpbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuMTYyMTpcdFx0XHRcdGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpvcmlnaW4sIGVudW0gYnBmX2RpYWdfbW9kX3JlYXNvbiByZWFzb24pXG4xNjIyOlx0e1xuMTYyMzpcdFx0c3RydWN0IGJwZl9kaWFnICpkaWFnID0gZW52LVx1MDAzZWRpYWc7XG4xNjI0Olx0XG4xNjI1Olx0XHRpZiAoIWRpYWcpXG4xNjI2Olx0XHRcdHJldHVybjtcbjE2Mjc6XHRcdGRpYWctXHUwMDNlbW9kLmFjdGl2ZSA9IHJlZ190b190YXJnZXQoZW52LCByZWcsIFx1MDAyNmRpYWctXHUwMDNlbW9kLnRhcmdldCk7XG4xNjI4Olx0XHRpZiAoIWRpYWctXHUwMDNlbW9kLmFjdGl2ZSlcbjE2Mjk6XHRcdFx0cmV0dXJuO1xuMTYzMDpcdFx0ZGlhZy1cdTAwM2Vtb2QudGFyZ2V0X3JlZ19zbmFwc2hvdCA9ICpyZWc7XG4xNjMxOlx0XHRkaWFnLVx1MDAzZW1vZC5pbnNuX2lkeCA9IGVudi1cdTAwM2VpbnNuX2lkeDtcbjE2MzI6XHRcdGRpYWctXHUwMDNlbW9kLnJlYXNvbiA9IHJlYXNvbjtcbjE2MzM6XHRcdGRpYWctXHUwMDNlbW9kLm9yaWdpbl92YWxpZCA9IG9yaWdpbiBcdTAwMjZcdTAwMjYgcmVnX3RvX3RhcmdldChlbnYsIG9yaWdpbiwgXHUwMDI2ZGlhZy1cdTAwM2Vtb2Qub3JpZ2luKTtcbjE2MzQ6XHR9XG4xNjM1Olx0XG4xNjM2Olx0dm9pZCBicGZfZGlhZ19tb2RfZW5kKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4xNjM3Olx0e1xuMTYzODpcdFx0c3RydWN0IGJwZl9kaWFnICpkaWFnID0gZW52LVx1MDAzZWRpYWc7XG4xNjM5Olx0XHRjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqbmV3X3JlZztcbjE2NDA6XHRcbjE2NDE6XHRcdGlmICghZGlhZyB8fCAhZGlhZy1cdTAwM2Vtb2QuYWN0aXZlKVxuMTY0MjpcdFx0XHRyZXR1cm47XG4xNjQzOlx0XHRkaWFnLVx1MDAzZW1vZC5hY3RpdmUgPSBmYWxzZTtcbjE2NDQ6XHRcdC8qXG4xNjQ1Olx0XHQgKiBSZXNvbHZlIHRoZSB0YXJnZXQgYWdhaW4gYmVjYXVzZSB0aGUgZW5jbG9zaW5nIGZ1bmN0aW9uIHN0YXRlJiMzOTtzIHN0YWNrXG4xNjQ2Olx0XHQgKiBtYXkgaGF2ZSBiZWVuIHJlYWxsb2NhdGVkIHdoaWxlIHRoZSBtb2RpZmljYXRpb24gd2FzIGluIHByb2dyZXNzLlxuMTY0NzpcdFx0ICovXG4xNjQ4Olx0XHRuZXdfcmVnID0gdGFyZ2V0X3RvX3JlZyhlbnYsIFx1MDAyNmRpYWctXHUwMDNlbW9kLnRhcmdldCk7XG4xNjQ5Olx0XHRpZiAoIW5ld19yZWcpXG4xNjUwOlx0XHRcdHJldHVybjtcbjE2NTE6XHRcdGRpYWdfcmVjb3JkX21vZChlbnYsIGRpYWctXHUwMDNlbW9kLmluc25faWR4LCBkaWFnLVx1MDAzZW1vZC50YXJnZXQsIGRpYWctXHUwMDNlbW9kLnJlYXNvbixcbjE2NTI6XHRcdFx0XHRcdTAwMjZkaWFnLVx1MDAzZW1vZC50YXJnZXRfcmVnX3NuYXBzaG90LCBuZXdfcmVnLFxuMTY1MzpcdFx0XHRcdGRpYWctXHUwMDNlbW9kLm9yaWdpbl92YWxpZCA/IFx1MDAyNmRpYWctXHUwMDNlbW9kLm9yaWdpbiA6IE5VTEwpO1xuMTY1NDpcdH1cbjE2NTU6XHRcbjE2NTY6XHR2b2lkIGJwZl9kaWFnX3JlY29yZF9zY3J1YihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuMTY1NzpcdFx0XHRcdCAgIGVudW0gYnBmX2RpYWdfbW9kX3JlYXNvbiByZWFzb24pXG4xNjU4Olx0e1xuMTY1OTpcdFx0c3RydWN0IGJwZl9kaWFnX21vZF90YXJnZXQgdGFyZ2V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE3OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MzEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJlY2VudCBLZXJuZWwgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSByZWNlbnQgbW9kaWZpY2F0aW9ucy4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCB0aGUgdXBkYXRlcyB0byBgcHJlcGFyZV9mdW5jX2V4aXRgIGFyZSBwdXJlbHkgZm9yIGRpYWdub3N0aWMgcHVycG9zZXMuIE5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGVyZSwganVzdCBtYWtpbmcgaXQgZWFzaWVyIHRvIHBpbnBvaW50IGlzc3Vlcy4gU2ltaWxhcmx5LCB0aGUgYWRqdXN0bWVudHMgdG8gYGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3RgIGFuZCBgY2hlY2tfa2Z1bmNfY2FsbGAgc2VlbSB0byBiZSBmb2N1c2VkIG9uIGltcHJvdmVkIGVycm9yIHJlcG9ydGluZy4gVGhleSYjMzk7cmUgbWFraW5nIHRoZSBlcnJvciBtZXNzYWdlcyBtb3JlIGluZm9ybWF0aXZlIHdoZW4gYSBrZnVuYyByZXR1cm5zIGEgc3RydWN0IHRoYXQmIzM5O3Mgbm90IGNvbXBvc2VkIHNvbGVseSBvZiBzY2FsYXIgdHlwZXMuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBpbXByb3ZlbWVudCBmb3IgZGVidWdnaW5nLgoKQnV0IHdhaXQsIGBidGZfc2NhbGFyX3N0cnVjdF93YWxrYCBoYXMgYmVlbiBpbnRyb2R1Y2VkLCBhbmQgYGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3RgIG5vdyBsZXZlcmFnZXMgaXQuIFRoaXMgZGVzZXJ2ZXMgYSBjbG9zZXIgbG9vay4gVGhlIGNvcmUgbG9naWMgb2YgYGJ0Zl9zY2FsYXJfc3RydWN0X3dhbGtgICphcHBlYXJzKiBpZGVudGljYWwgdG8gdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIG9mIGBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0YCwgYnV0IHdpdGggYSBrZXkgZGlmZmVyZW5jZTogaXQgcmV0dXJucyB0aGUgc3BlY2lmaWMgcHJvYmxlbWF0aWMgbWVtYmVyLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoZXJlIGFyZW4mIzM5O3QgYW55IHN1YnRsZSBmdW5jdGlvbmFsIGNoYW5nZXMgaGlkZGVuIHdpdGhpbiBgYnRmX3NjYWxhcl9zdHJ1Y3Rfd2Fsa2AsIGV2ZW4gaWYgdGhlIHVuZGVybHlpbmcgc3RydWN0dXJlIGlzIHNpbWlsYXIuIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgaW1wbGVtZW50YXRpb24gZm9yIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNjIzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNjIzOlx0XHRyZXR1cm4gYXJnbiBcdTAwM2M9IGFyZ19pZHg7XG4xMTYyNDpcdH1cbjExNjI1Olx0XG4xMTYyNjpcdC8qXG4xMTYyNzpcdCAqIFJldHVybnMgdHJ1ZSBpZiBzdHJ1Y3QgaXMgY29tcG9zZWQgb2Ygc2NhbGFycywgNCBsZXZlbHMgb2YgbmVzdGluZyBhbGxvd2VkLlxuMTE2Mjg6XHQgKiBPbiBmYWlsdXJlIEBiYWQsIHdoZW4gZ2l2ZW4sIG5hbWVzIHRoZSBtZW1iZXIgdGhhdCBtYWRlIHRoZSBhbnN3ZXIgbm8sIHNvIGFcbjExNjI5Olx0ICogZGlhZ25vc3RpYyBjYW4gcG9pbnQgYXQgaXQgcmF0aGVyIHRoYW4gYXQgdGhlIHdob2xlIHR5cGUuXG4xMTYzMDpcdCAqL1xuMTE2MzE6XHRzdGF0aWMgYm9vbCBidGZfc2NhbGFyX3N0cnVjdF93YWxrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbjExNjMyOlx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIGludCByZWMsXG4xMTYzMzpcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKipiYWQpXG4xMTYzNDpcdHtcbjExNjM1Olx0XHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKm1lbWJlcl90eXBlO1xuMTE2MzY6XHRcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXI7XG4xMTYzNzpcdFx0dTMyIGk7XG4xMTYzODpcdFxuMTE2Mzk6XHRcdGlmICghYnRmX3R5cGVfaXNfc3RydWN0KHQpKVxuMTE2NDA6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTE2NDE6XHRcbjExNjQyOlx0XHRmb3JfZWFjaF9tZW1iZXIoaSwgdCwgbWVtYmVyKSB7XG4xMTY0MzpcdFx0XHRjb25zdCBzdHJ1Y3QgYnRmX2FycmF5ICphcnJheTtcbjExNjQ0Olx0XG4xMTY0NTpcdFx0XHRtZW1iZXJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgbWVtYmVyLVx1MDAzZXR5cGUsIE5VTEwpO1xuMTE2NDY6XHRcdFx0aWYgKGJ0Zl90eXBlX2lzX3N0cnVjdChtZW1iZXJfdHlwZSkpIHtcbjExNjQ3Olx0XHRcdFx0aWYgKHJlYyBcdTAwM2U9IDMpIHtcbjExNjQ4Olx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7bWF4IHN0cnVjdCBuZXN0aW5nIGRlcHRoIGV4Y2VlZGVkXFxuXCYjMzQ7KTtcbjExNjQ5Olx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMTY1MDpcdFx0XHRcdH1cbjExNjUxOlx0XHRcdFx0aWYgKCFidGZfc2NhbGFyX3N0cnVjdF93YWxrKGVudiwgYnRmLCBtZW1iZXJfdHlwZSwgcmVjICYjNDM7IDEsIGJhZCkpXG4xMTY1MjpcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTE2NTM6XHRcdFx0XHRjb250aW51ZTtcbjExNjU0Olx0XHRcdH1cbjExNjU1Olx0XHRcdGlmIChidGZfdHlwZV9pc19hcnJheShtZW1iZXJfdHlwZSkpIHtcbjExNjU2Olx0XHRcdFx0YXJyYXkgPSBidGZfYXJyYXkobWVtYmVyX3R5cGUpO1xuMTE2NTc6XHRcdFx0XHRpZiAoIWFycmF5LVx1MDAzZW5lbGVtcylcbjExNjU4Olx0XHRcdFx0XHRnb3RvIGJhZF9tZW1iZXI7XG4xMTY1OTpcdFx0XHRcdG1lbWJlcl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcnJheS1cdTAwM2V0eXBlLCBOVUxMKTtcbjExNjYwOlx0XHRcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIobWVtYmVyX3R5cGUpKVxuMTE2NjE6XHRcdFx0XHRcdGdvdG8gYmFkX21lbWJlcjtcbjExNjYyOlx0XHRcdFx0Y29udGludWU7XG4xMTY2MzpcdFx0XHR9XG4xMTY2NDpcdFx0XHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcihtZW1iZXJfdHlwZSkpXG4xMTY2NTpcdFx0XHRcdGdvdG8gYmFkX21lbWJlcjtcbjExNjY2Olx0XHR9XG4xMTY2NzpcdFx0cmV0dXJuIHRydWU7XG4xMTY2ODpcdFxuMTE2Njk6XHRiYWRfbWVtYmVyOlxuMTE2NzA6XHRcdGlmIChiYWQpXG4xMTY3MTpcdFx0XHQqYmFkID0gbWVtYmVyO1xuMTE2NzI6XHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTc6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMDIKCQkJCQkJCW91dHB1dDogODUKCQkJCQkJCXRob3VnaHRzOiA3NTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBXb3J0aGluZXNzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB0aGlzIHBhdGNoIGlzIHRoYXQgaXQmIzM5O3MgZnVuZGFtZW50YWxseSBhYm91dCBpbXByb3ZpbmcgZGlhZ25vc3RpY3MgYW5kIGVycm9yIG1lc3NhZ2VzIHdpdGhpbiB0aGUgdmVyaWZpZXIuIFRoZSBjb3JlIGxvZ2ljIG9mIHRoZSB2ZXJpZmllciBpdHNlbGYsIHNwZWNpZmljYWxseSB0aGUgYGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3RgIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGJ0Zl9zY2FsYXJfc3RydWN0X3dhbGtgLCByZW1haW5zIGZ1bmN0aW9uYWxseSB1bmNoYW5nZWQuIFRoZSBuZXcgYGJ0Zl9zY2FsYXJfc3RydWN0X3dhbGtgIGZ1bmN0aW9uIHNpbXBseSByZXR1cm5zIHRoZSBwcm9ibGVtYXRpYyBtZW1iZXIsIHdoaWNoIGlzIHRoZW4gdXNlZCBieSB0aGUgY2FsbGVyIHRvIGNyZWF0ZSBhIGJldHRlciBlcnJvciBtZXNzYWdlLgoKSSBzZWUgdGhhdCB0aGUgYGNoZWNrX2tmdW5jX2NhbGxgIGZ1bmN0aW9uIG5vdyBsZXZlcmFnZXMgdGhpcyB1cGRhdGVkIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIG1vcmUgaW5mb3JtYXRpdmUgZXJyb3Igb3V0cHV0LiBNb3Jlb3ZlciwgdGhlIGNoYW5nZXMgaW4gYHByZXBhcmVfZnVuY19leGl0YCwgc3Vycm91bmRpbmcgdGhlIGBicGZfZGlhZ19tb2RfYmVnaW5gIGFuZCBgYnBmX2RpYWdfbW9kX2VuZGAgY2FsbHMsIGFsc28gYXBwZWFyIHRvIGJlIHB1cmVseSBkaWFnbm9zdGljLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaXMgdG8gaXRlcmF0ZSB0aHJvdWdoIHJlZ2lzdGVycyBhbmQgYW5ub3RhdGUgZWFjaCBpbmRpdmlkdWFsbHkuCgpFc3NlbnRpYWxseSwgYWxsIG1vZGlmaWNhdGlvbnMgYXJlIGZvY3VzZWQgb24gcHJvdmlkaW5nIG1vcmUgZ3JhbnVsYXIgZGVidWdnaW5nIGluZm9ybWF0aW9uLiAgTm8gY29yZSBhbGdvcml0aG1zIG9yIGRhdGEgc3RydWN0dXJlcywgdGhhdCBJIGNhbiBzZWUsIGhhdmUgYmVlbiBhbHRlcmVkIGluIGEgd2F5IHRoYXQgd291bGQgaW50cm9kdWNlIG5ldyB2dWxuZXJhYmlsaXRpZXMgb3IgdW51c3VhbCBjb2RlIHBhdGhzIHRoYXQgd291bGQgYmUgZ29vZCBmb3IgZnV6emluZy4gVGh1cywgSSB3b3VsZCBjbGFzc2lmeSB0aGlzIGFzIGEgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlIHRvIHRoZSB2ZXJpZmllciYjMzk7cyByZXBvcnRpbmcgY2FwYWJpbGl0aWVzLgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgZm9jdXMgb24gKmJldHRlciogcmVwb3J0aW5nIG9mICpleGlzdGluZyogaXNzdWVzIGFuZCAqbm90KiBhbHRlcmluZyB0aGUgdmVyaWZpZXImIzM5O3MgY29yZSBvcGVyYXRpb25hbCBsb2dpYywgSSBjb25jbHVkZSB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBpbmRlZWQgYmUgYGZhbHNlYCBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgdmVyaWZpZXIgZGlhZ25vc3RpYyBmdW5jdGlvbnMgKGJwZl9kaWFnX21vZF9iZWdpbi9lbmQpIGFuZCBpbXByb3ZlcyBlcnJvciBtZXNzYWdlcyB3aGVuIGEga2Z1bmMgcmV0dXJucyBhIHN0cnVjdCB0aGF0IGlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSB2ZXJpZmllciBsb2dpYyBvciBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHZlcmlmaWVyIGRpYWdub3N0aWMgZnVuY3Rpb25zIChicGZfZGlhZ19tb2RfYmVnaW4vZW5kKSBhbmQgaW1wcm92ZXMgZXJyb3IgbWVzc2FnZXMgd2hlbiBhIGtmdW5jIHJldHVybnMgYSBzdHJ1Y3QgdGhhdCBpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgdmVyaWZpZXIgbG9naWMgb3IgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTc6NTY6NDcuODA1ODMwMjU0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyODc5NzkyNTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgdmVyaWZpZXIgZGlhZ25vc3RpYyBmdW5jdGlvbnMgKGJwZl9kaWFnX21vZF9iZWdpbi9lbmQpIGFuZCBpbXByb3ZlcyBlcnJvciBtZXNzYWdlcyB3aGVuIGEga2Z1bmMgcmV0dXJucyBhIHN0cnVjdCB0aGF0IGlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSB2ZXJpZmllciBsb2dpYyBvciBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE3OjU2OjQ3LjgwNTgzNDQ0NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwMDM2MDA4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY0N2NiZWJmMWNmNmM2OGI1ZWUwMmU1OTA1YjkxYWNjNTZmNjM3MTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTc6NTY6NDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggZTAzNmFlMjBiZjZiOS4uYzZhZWNiYTY0MzdhZSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtMTA0MDMsMTAgKzEwNDAzLDE0IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcXG4gXFx0XFx0ICogcmV0dXJuIHRvIHRoZSBjYWxsZXIgd2hhdGV2ZXIgdGhlIGNhbGxlZSBoYWQgaW4gdGhlXFxuIFxcdFxcdCAqIHJldHVybiByZWdpc3RlcihzKVxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXFx1MDAyNmNhbGxlci1cXHUwMDNlcmVnc1tCUEZfUkVHXzBdLCByMCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yZWdzOyBpKyspXFxuLVxcdFxcdFxcdGNhbGxlci1cXHUwMDNlcmVnc1tyZXRfcmVnc1tpXV0gPSBjYWxsZWUtXFx1MDAzZXJlZ3NbcmV0X3JlZ3NbaV1dO1xcbi1cXHRcXHRicGZfZGlhZ19tb2RfZW5kKGVudik7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucmVnczsgaSsrKSB7XFxuK1xcdFxcdFxcdHUzMiByZWdubyA9IHJldF9yZWdzW2ldO1xcbitcXG4rXFx0XFx0XFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXFx1MDAyNmNhbGxlci1cXHUwMDNlcmVnc1tyZWdub10sIFxcdTAwMjZjYWxsZWUtXFx1MDAzZXJlZ3NbcmVnbm9dLFxcbitcXHRcXHRcXHRcXHRcXHQgICBCUEZfRElBR19NT0RfV1JJVEUpO1xcbitcXHRcXHRcXHRjYWxsZXItXFx1MDAzZXJlZ3NbcmVnbm9dID0gY2FsbGVlLVxcdTAwM2VyZWdzW3JlZ25vXTtcXG4rXFx0XFx0XFx0YnBmX2RpYWdfbW9kX2VuZChlbnYpO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdC8qIGZvciBjYWxsYmFja3MgbGlrZSBicGZfbG9vcCBvciBicGZfZm9yX2VhY2hfbWFwX2VsZW0gZ28gYmFjayB0byBjYWxsc2l0ZSxcXG5AQCAtMTE2MTksMTAgKzExNjIzLDE0IEBAIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19pbXBsaWNpdChjb25zdCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsIHUzMiBhcmdfXFxuIFxcdHJldHVybiBhcmduIFxcdTAwM2M9IGFyZ19pZHg7XFxuIH1cXG4gXFxuLS8qIFJldHVybnMgdHJ1ZSBpZiBzdHJ1Y3QgaXMgY29tcG9zZWQgb2Ygc2NhbGFycywgNCBsZXZlbHMgb2YgbmVzdGluZyBhbGxvd2VkICovXFxuLWJvb2wgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbi1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCBpbnQgcmVjKVxcbisvKlxcbisgKiBSZXR1cm5zIHRydWUgaWYgc3RydWN0IGlzIGNvbXBvc2VkIG9mIHNjYWxhcnMsIDQgbGV2ZWxzIG9mIG5lc3RpbmcgYWxsb3dlZC5cXG4rICogT24gZmFpbHVyZSBAYmFkLCB3aGVuIGdpdmVuLCBuYW1lcyB0aGUgbWVtYmVyIHRoYXQgbWFkZSB0aGUgYW5zd2VyIG5vLCBzbyBhXFxuKyAqIGRpYWdub3N0aWMgY2FuIHBvaW50IGF0IGl0IHJhdGhlciB0aGFuIGF0IHRoZSB3aG9sZSB0eXBlLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgYnRmX3NjYWxhcl9zdHJ1Y3Rfd2FsayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuK1xcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHJlYyxcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKipiYWQpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICptZW1iZXJfdHlwZTtcXG4gXFx0Y29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcjtcXG5AQCAtMTE2NDAsMjMgKzExNjQ4LDM1IEBAIGJvb2wgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIm1heCBzdHJ1Y3QgbmVzdGluZyBkZXB0aCBleGNlZWRlZFxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBidGYsIG1lbWJlcl90eXBlLCByZWMgKyAxKSlcXG4rXFx0XFx0XFx0aWYgKCFidGZfc2NhbGFyX3N0cnVjdF93YWxrKGVudiwgYnRmLCBtZW1iZXJfdHlwZSwgcmVjICsgMSwgYmFkKSlcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoYnRmX3R5cGVfaXNfYXJyYXkobWVtYmVyX3R5cGUpKSB7XFxuIFxcdFxcdFxcdGFycmF5ID0gYnRmX2FycmF5KG1lbWJlcl90eXBlKTtcXG4gXFx0XFx0XFx0aWYgKCFhcnJheS1cXHUwMDNlbmVsZW1zKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdFxcdFxcdGdvdG8gYmFkX21lbWJlcjtcXG4gXFx0XFx0XFx0bWVtYmVyX3R5cGUgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGFycmF5LVxcdTAwM2V0eXBlLCBOVUxMKTtcXG4gXFx0XFx0XFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIobWVtYmVyX3R5cGUpKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdFxcdFxcdGdvdG8gYmFkX21lbWJlcjtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIobWVtYmVyX3R5cGUpKVxcbi1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdFxcdGdvdG8gYmFkX21lbWJlcjtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK2JhZF9tZW1iZXI6XFxuK1xcdGlmIChiYWQpXFxuK1xcdFxcdCpiYWQgPSBtZW1iZXI7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rYm9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuK1xcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuK1xcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIGludCByZWMpXFxuK3tcXG4rXFx0cmV0dXJuIGJ0Zl9zY2FsYXJfc3RydWN0X3dhbGsoZW52LCBidGYsIHQsIHJlYywgTlVMTCk7XFxuIH1cXG4gXFxuIGVudW0ga2Z1bmNfcHRyX2FyZ190eXBlIHtcXG5AQCAtMTQwMjYsMTcgKzE0MDQ2LDQxIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdFxcdCAgICBtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdKSlcXG4gXFx0XFx0XFx0X19tYXJrX3JlZ19jb25zdF96ZXJvKGVudiwgXFx1MDAyNnJlZ3NbQlBGX1JFR18wXSk7XFxuIFxcdH0gZWxzZSBpZiAoYnRmX3R5cGVfaXNfc3RydWN0KHQpKSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICpiYWQgPSBOVUxMO1xcbitcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogVGhlIHJldHVybmVkIHN0cnVjdCBjb21lcyBiYWNrIGFzIHJhdyByZWdpc3RlciBiaXRzIG1vZGVsZWRcXG4gXFx0XFx0ICogYXMgYW4gdW5rbm93biBzY2FsYXIsIHNvIGl0IG11c3QgY29udGFpbiBvbmx5IHNjYWxhcnM6XFxuIFxcdFxcdCAqIG90aGVyd2lzZSBhIHBvaW50ZXIgZmllbGQgd291bGQgYmUgbGF1bmRlcmVkIGludG8gYSBzY2FsYXJcXG4gXFx0XFx0ICogYW5kIGVzY2FwZSBwcm92ZW5hbmNlIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBkZXNjX2J0ZiwgdCwgMCkpIHtcXG4rXFx0XFx0aWYgKCFidGZfc2NhbGFyX3N0cnVjdF93YWxrKGVudiwgZGVzY19idGYsIHQsIDAsIFxcdTAwMjZiYWQpKSB7XFxuK1xcdFxcdFxcdGNvbnN0IGNoYXIgKm1lbWJlcl9ub3RlID0gXFxcIlxcXCI7XFxuK1xcbiBcXHRcXHRcXHR2ZXJib3NlKGVudixcXG4gXFx0XFx0XFx0XFx0XFxcImtlcm5lbCBmdW5jdGlvbiAlcyByZXR1cm5zICVzICVzIHRoYXQgaXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdGZ1bmNfbmFtZSwgYnRmX3R5cGVfc3RyKHQpLFxcbiBcXHRcXHRcXHRcXHRidGZfbmFtZV9ieV9vZmZzZXQoZGVzY19idGYsIHQtXFx1MDAzZW5hbWVfb2ZmKSk7XFxuK1xcdFxcdFxcdGlmIChiYWQpIHtcXG4rXFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqYmFkX25hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoZGVzY19idGYsIGJhZC1cXHUwMDNlbmFtZV9vZmYpO1xcbitcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmJhZF90eXBlO1xcbitcXG4rXFx0XFx0XFx0XFx0YmFkX3R5cGUgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhkZXNjX2J0ZiwgYmFkLVxcdTAwM2V0eXBlLCBOVUxMKTtcXG4rXFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJtZW1iZXIgJyVzJyBoYXMgdHlwZSAlc1xcXFxuXFxcIiwgYmFkX25hbWUsXFxuK1xcdFxcdFxcdFxcdFxcdGJ0Zl90eXBlX3N0cihiYWRfdHlwZSkpO1xcbitcXHRcXHRcXHRcXHRtZW1iZXJfbm90ZSA9IGJwZl9kaWFnX2ZtdChcXG4rXFx0XFx0XFx0XFx0XFx0ZW52LCBcXFwiIEl0cyBtZW1iZXIgJyVzJyBpcyAlcywgbm90IGEgc2NhbGFyLlxcXCIsIGJhZF9uYW1lLFxcbitcXHRcXHRcXHRcXHRcXHRidGZfdHlwZV9zdHIoYmFkX3R5cGUpKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRicGZfZGlhZ19wcm9ncmFtX3N0cnVjdHVyZShcXG4rXFx0XFx0XFx0XFx0ZW52LCBpbnNuX2lkeCwgXFxcInVuc3VwcG9ydGVkIGtlcm5lbCBmdW5jdGlvbiByZXR1cm4gdHlwZVxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcXCJDYWxsIGEga2VybmVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBvbmx5IHNjYWxhcnMgYnkgdmFsdWUuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFxcIiVzKCkgcmV0dXJucyAlcyAlcyBieSB2YWx1ZS4lcyBcXFwiXFxuK1xcdFxcdFxcdFxcdFxcXCJBIGJ5LXZhbHVlIHJldHVybiBhcnJpdmVzIGFzIHJhdyByZWdpc3RlciBiaXRzIHRoYXQgdGhlIHZlcmlmaWVyIFxcXCJcXG4rXFx0XFx0XFx0XFx0XFxcImNhbiBvbmx5IG1vZGVsIGFzIHVua25vd24gc2NhbGFycywgc28gZS5nLiBhIHBvaW50ZXIgbWF5IGxvc2UgXFxcIlxcbitcXHRcXHRcXHRcXHRcXFwidGhlIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZyB0aGF0IG1ha2UgaXQgc2FmZSB0byB1c2UuXFxcIixcXG4rXFx0XFx0XFx0XFx0ZnVuY19uYW1lLCBidGZfdHlwZV9zdHIodCksXFxuK1xcdFxcdFxcdFxcdGJ0Zl9uYW1lX2J5X29mZnNldChkZXNjX2J0ZiwgdC1cXHUwMDNlbmFtZV9vZmYpLCBtZW1iZXJfbm90ZSk7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHR9XFxuIFxcdFxcdG1hcmtfa2Z1bmNfcmV0X3JlZ3MoZW52LCByZWdzLCB0LVxcdTAwM2VzaXplKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jLmNcXG5pbmRleCBkNmI0MjJhZTk3ODRiLi5iYzlhZmZmYzdjNjg5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuYy5jXFxuQEAgLTcyLDYgKzcyLDcgQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19mYXN0Y2FsbF9mYWlsKHZvaWQpXFxuIFNFQyhcXFwidGNcXFwiKVxcbiBfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NFxcbiBfX2ZhaWx1cmUgX19tc2coXFxcImlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzXFxcIilcXG4rX19tc2coXFxcIm1lbWJlciAncCcgaGFzIHR5cGUgUFRSXFxcIilcXG4gX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19wdHJfZmFpbCh2b2lkKVxcbiB7XFxuIFxcdGFzbSB2b2xhdGlsZSAoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE3OjU2OjQ5LjIwNjc5MzkxNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE5MTQ3ODgxMjY0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgdmVyaWZpZXIgZGlhZ25vc3RpYyBmdW5jdGlvbnMgKGJwZl9kaWFnX21vZF9iZWdpbi9lbmQpIGFuZCBpbXByb3ZlcyBlcnJvciBtZXNzYWdlcyB3aGVuIGEga2Z1bmMgcmV0dXJucyBhIHN0cnVjdCB0aGF0IGlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSB2ZXJpZmllciBsb2dpYyBvciBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY0N2NiZWJmMWNmNmM2OGI1ZWUwMmU1OTA1YjkxYWNjNTZmNjM3MTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAxNzo1Njo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggZTAzNmFlMjBiZjZiOS4uYzZhZWNiYTY0MzdhZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMTA0MDMsMTAgKzEwNDAzLDE0IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcbiBcdFx0ICogcmV0dXJuIHRvIHRoZSBjYWxsZXIgd2hhdGV2ZXIgdGhlIGNhbGxlZSBoYWQgaW4gdGhlXG4gXHRcdCAqIHJldHVybiByZWdpc3RlcihzKVxuIFx0XHQgKi9cbi1cdFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXHUwMDI2Y2FsbGVyLVx1MDAzZXJlZ3NbQlBGX1JFR18wXSwgcjAsIEJQRl9ESUFHX01PRF9XUklURSk7XG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yZWdzOyBpKyspXG4tXHRcdFx0Y2FsbGVyLVx1MDAzZXJlZ3NbcmV0X3JlZ3NbaV1dID0gY2FsbGVlLVx1MDAzZXJlZ3NbcmV0X3JlZ3NbaV1dO1xuLVx0XHRicGZfZGlhZ19tb2RfZW5kKGVudik7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yZWdzOyBpKyspIHtcbitcdFx0XHR1MzIgcmVnbm8gPSByZXRfcmVnc1tpXTtcbitcbitcdFx0XHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBcdTAwMjZjYWxsZXItXHUwMDNlcmVnc1tyZWdub10sIFx1MDAyNmNhbGxlZS1cdTAwM2VyZWdzW3JlZ25vXSxcbitcdFx0XHRcdFx0ICAgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbitcdFx0XHRjYWxsZXItXHUwMDNlcmVnc1tyZWdub10gPSBjYWxsZWUtXHUwMDNlcmVnc1tyZWdub107XG4rXHRcdFx0YnBmX2RpYWdfbW9kX2VuZChlbnYpO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHQvKiBmb3IgY2FsbGJhY2tzIGxpa2UgYnBmX2xvb3Agb3IgYnBmX2Zvcl9lYWNoX21hcF9lbGVtIGdvIGJhY2sgdG8gY2FsbHNpdGUsXG5AQCAtMTE2MTksMTAgKzExNjIzLDE0IEBAIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19pbXBsaWNpdChjb25zdCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsIHUzMiBhcmdfXG4gXHRyZXR1cm4gYXJnbiBcdTAwM2M9IGFyZ19pZHg7XG4gfVxuIFxuLS8qIFJldHVybnMgdHJ1ZSBpZiBzdHJ1Y3QgaXMgY29tcG9zZWQgb2Ygc2NhbGFycywgNCBsZXZlbHMgb2YgbmVzdGluZyBhbGxvd2VkICovXG4tYm9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCBpbnQgcmVjKVxuKy8qXG4rICogUmV0dXJucyB0cnVlIGlmIHN0cnVjdCBpcyBjb21wb3NlZCBvZiBzY2FsYXJzLCA0IGxldmVscyBvZiBuZXN0aW5nIGFsbG93ZWQuXG4rICogT24gZmFpbHVyZSBAYmFkLCB3aGVuIGdpdmVuLCBuYW1lcyB0aGUgbWVtYmVyIHRoYXQgbWFkZSB0aGUgYW5zd2VyIG5vLCBzbyBhXG4rICogZGlhZ25vc3RpYyBjYW4gcG9pbnQgYXQgaXQgcmF0aGVyIHRoYW4gYXQgdGhlIHdob2xlIHR5cGUuXG4rICovXG4rc3RhdGljIGJvb2wgYnRmX3NjYWxhcl9zdHJ1Y3Rfd2FsayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4rXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIGludCByZWMsXG4rXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqKmJhZClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKm1lbWJlcl90eXBlO1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcjtcbkBAIC0xMTY0MCwyMyArMTE2NDgsMzUgQEAgYm9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHR2ZXJib3NlKGVudiwgXCJtYXggc3RydWN0IG5lc3RpbmcgZGVwdGggZXhjZWVkZWRcXG5cIik7XG4gXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdFx0fVxuLVx0XHRcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIGJ0ZiwgbWVtYmVyX3R5cGUsIHJlYyArIDEpKVxuK1x0XHRcdGlmICghYnRmX3NjYWxhcl9zdHJ1Y3Rfd2FsayhlbnYsIGJ0ZiwgbWVtYmVyX3R5cGUsIHJlYyArIDEsIGJhZCkpXG4gXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcdFx0aWYgKGJ0Zl90eXBlX2lzX2FycmF5KG1lbWJlcl90eXBlKSkge1xuIFx0XHRcdGFycmF5ID0gYnRmX2FycmF5KG1lbWJlcl90eXBlKTtcbiBcdFx0XHRpZiAoIWFycmF5LVx1MDAzZW5lbGVtcylcbi1cdFx0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0XHRcdGdvdG8gYmFkX21lbWJlcjtcbiBcdFx0XHRtZW1iZXJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJyYXktXHUwMDNldHlwZSwgTlVMTCk7XG4gXHRcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIobWVtYmVyX3R5cGUpKVxuLVx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRcdFx0Z290byBiYWRfbWVtYmVyO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyKG1lbWJlcl90eXBlKSlcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdFx0Z290byBiYWRfbWVtYmVyO1xuIFx0fVxuIFx0cmV0dXJuIHRydWU7XG4rXG4rYmFkX21lbWJlcjpcbitcdGlmIChiYWQpXG4rXHRcdCpiYWQgPSBtZW1iZXI7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK2Jvb2wgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuK1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4rXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHJlYylcbit7XG4rXHRyZXR1cm4gYnRmX3NjYWxhcl9zdHJ1Y3Rfd2FsayhlbnYsIGJ0ZiwgdCwgcmVjLCBOVUxMKTtcbiB9XG4gXG4gZW51bSBrZnVuY19wdHJfYXJnX3R5cGUge1xuQEAgLTE0MDI2LDE3ICsxNDA0Niw0MSBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHQgICAgbWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkpXG4gXHRcdFx0X19tYXJrX3JlZ19jb25zdF96ZXJvKGVudiwgXHUwMDI2cmVnc1tCUEZfUkVHXzBdKTtcbiBcdH0gZWxzZSBpZiAoYnRmX3R5cGVfaXNfc3RydWN0KHQpKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICpiYWQgPSBOVUxMO1xuK1xuIFx0XHQvKlxuIFx0XHQgKiBUaGUgcmV0dXJuZWQgc3RydWN0IGNvbWVzIGJhY2sgYXMgcmF3IHJlZ2lzdGVyIGJpdHMgbW9kZWxlZFxuIFx0XHQgKiBhcyBhbiB1bmtub3duIHNjYWxhciwgc28gaXQgbXVzdCBjb250YWluIG9ubHkgc2NhbGFyczpcbiBcdFx0ICogb3RoZXJ3aXNlIGEgcG9pbnRlciBmaWVsZCB3b3VsZCBiZSBsYXVuZGVyZWQgaW50byBhIHNjYWxhclxuIFx0XHQgKiBhbmQgZXNjYXBlIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZy5cbiBcdFx0ICovXG4tXHRcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIGRlc2NfYnRmLCB0LCAwKSkge1xuK1x0XHRpZiAoIWJ0Zl9zY2FsYXJfc3RydWN0X3dhbGsoZW52LCBkZXNjX2J0ZiwgdCwgMCwgXHUwMDI2YmFkKSkge1xuK1x0XHRcdGNvbnN0IGNoYXIgKm1lbWJlcl9ub3RlID0gXCJcIjtcbitcbiBcdFx0XHR2ZXJib3NlKGVudixcbiBcdFx0XHRcdFwia2VybmVsIGZ1bmN0aW9uICVzIHJldHVybnMgJXMgJXMgdGhhdCBpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFyc1xcblwiLFxuIFx0XHRcdFx0ZnVuY19uYW1lLCBidGZfdHlwZV9zdHIodCksXG4gXHRcdFx0XHRidGZfbmFtZV9ieV9vZmZzZXQoZGVzY19idGYsIHQtXHUwMDNlbmFtZV9vZmYpKTtcbitcdFx0XHRpZiAoYmFkKSB7XG4rXHRcdFx0XHRjb25zdCBjaGFyICpiYWRfbmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChkZXNjX2J0ZiwgYmFkLVx1MDAzZW5hbWVfb2ZmKTtcbitcdFx0XHRcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqYmFkX3R5cGU7XG4rXG4rXHRcdFx0XHRiYWRfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCBiYWQtXHUwMDNldHlwZSwgTlVMTCk7XG4rXHRcdFx0XHR2ZXJib3NlKGVudiwgXCJtZW1iZXIgJyVzJyBoYXMgdHlwZSAlc1xcblwiLCBiYWRfbmFtZSxcbitcdFx0XHRcdFx0YnRmX3R5cGVfc3RyKGJhZF90eXBlKSk7XG4rXHRcdFx0XHRtZW1iZXJfbm90ZSA9IGJwZl9kaWFnX2ZtdChcbitcdFx0XHRcdFx0ZW52LCBcIiBJdHMgbWVtYmVyICclcycgaXMgJXMsIG5vdCBhIHNjYWxhci5cIiwgYmFkX25hbWUsXG4rXHRcdFx0XHRcdGJ0Zl90eXBlX3N0cihiYWRfdHlwZSkpO1xuK1x0XHRcdH1cbitcdFx0XHRicGZfZGlhZ19wcm9ncmFtX3N0cnVjdHVyZShcbitcdFx0XHRcdGVudiwgaW5zbl9pZHgsIFwidW5zdXBwb3J0ZWQga2VybmVsIGZ1bmN0aW9uIHJldHVybiB0eXBlXCIsXG4rXHRcdFx0XHRcIkNhbGwgYSBrZXJuZWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG9ubHkgc2NhbGFycyBieSB2YWx1ZS5cIixcbitcdFx0XHRcdFwiJXMoKSByZXR1cm5zICVzICVzIGJ5IHZhbHVlLiVzIFwiXG4rXHRcdFx0XHRcIkEgYnktdmFsdWUgcmV0dXJuIGFycml2ZXMgYXMgcmF3IHJlZ2lzdGVyIGJpdHMgdGhhdCB0aGUgdmVyaWZpZXIgXCJcbitcdFx0XHRcdFwiY2FuIG9ubHkgbW9kZWwgYXMgdW5rbm93biBzY2FsYXJzLCBzbyBlLmcuIGEgcG9pbnRlciBtYXkgbG9zZSBcIlxuK1x0XHRcdFx0XCJ0aGUgcHJvdmVuYW5jZSBhbmQgcmVmZXJlbmNlIHRyYWNraW5nIHRoYXQgbWFrZSBpdCBzYWZlIHRvIHVzZS5cIixcbitcdFx0XHRcdGZ1bmNfbmFtZSwgYnRmX3R5cGVfc3RyKHQpLFxuK1x0XHRcdFx0YnRmX25hbWVfYnlfb2Zmc2V0KGRlc2NfYnRmLCB0LVx1MDAzZW5hbWVfb2ZmKSwgbWVtYmVyX25vdGUpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4gXHRcdG1hcmtfa2Z1bmNfcmV0X3JlZ3MoZW52LCByZWdzLCB0LVx1MDAzZXNpemUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuYy5jXG5pbmRleCBkNmI0MjJhZTk3ODRiLi5iYzlhZmZmYzdjNjg5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuY1xuQEAgLTcyLDYgKzcyLDcgQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19mYXN0Y2FsbF9mYWlsKHZvaWQpXG4gU0VDKFwidGNcIilcbiBfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NFxuIF9fZmFpbHVyZSBfX21zZyhcImlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzXCIpXG4rX19tc2coXCJtZW1iZXIgJ3AnIGhhcyB0eXBlIFBUUlwiKVxuIF9fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfcHRyX2ZhaWwodm9pZClcbiB7XG4gXHRhc20gdm9sYXRpbGUgKFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTc6NTY6NDkuMjA2Nzk1NDM1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM3NzU3Nzg0Mjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaGlzIEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEl0IHNlZW1zIHRoZXkndmUgcmVmYWN0b3JlZCBgcHJlcGFyZV9mdW5jX2V4aXRgLiBJbnN0ZWFkIG9mIHRoYXQgbW9ub2xpdGhpYyBgYnBmX2RpYWdfbW9kYCBjYWxsIGFyb3VuZCB0aGUgd2hvbGUgbG9vcCBjb25jZXJuaW5nIGByZXRfcmVnc2AsIHRoZXkncmUgZG9pbmcgYGJwZl9kaWFnX21vZF9iZWdpbmAgYW5kIGBicGZfZGlhZ19tb2RfZW5kYCBmb3IgZWFjaCByZWdpc3RlciBpbmRpdmlkdWFsbHkuIFRoYXQncyBpbnRlcmVzdGluZywgbWFrZXMgc2Vuc2UgZm9yIG1vcmUgZ3JhbnVsYXIgZGlhZ25vc3RpY3MuIEFuZCBJIHNlZSBhIGNoYW5nZSB0byBgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdGAg4oCTIHRoZXkncmUgcHVsbGluZyBvdXQgdGhhdCBcImJhZCBtZW1iZXJcIiBsb2dpYyBpbnRvIGBidGZfc2NhbGFyX3N0cnVjdF93YWxrYCwgd2hpY2ggc2VlbXMgY2xlYW5lci4gVGhlbiwgdGhleeKAmXJlIGxldmVyYWdpbmcgdGhhdCBpbiBgY2hlY2tfa2Z1bmNfY2FsbGAgdG8gZ2l2ZSBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMgaWYgYSBrZnVuYyByZXR1cm5zIGEgc3RydWN0IHRoYXQncyAqbm90KiBqdXN0IHNjYWxhcnMuIFRoYXQncyBhIGdvb2Qgc3RlcCB0b3dhcmQgbW9yZSBoZWxwZnVsIGRlYnVnZ2luZy5cblxuSG9sZCBvbi4uLiB0aG9zZSBgYnBmX2RpYWdfbW9kX2JlZ2luYCBhbmQgYGJwZl9kaWFnX21vZF9lbmRgIGZ1bmN0aW9ucy4uLiBJIHJlY29nbml6ZSB0aG9zZSBuYW1lcyBhcyBiZWluZyBkaWFnbm9zdGljLXJlbGF0ZWQuIExldCBtZSBxdWlja2x5IGRpZyBpbnRvIHdoYXQgdGhvc2UgZG8gZXhhY3RseS4gR290dGEgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRob3NlIGNoYW5nZXMgZnVsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NDIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNzo1OTowNi45NjQ1ODIxMDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNDc5Mzk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfZGlhZ19tb2RfYmVnaW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTE1Nzk9c3RhdGljIGJvb2wgcmVnX3RvX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE2MTktXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE2MjA6dm9pZCBicGZfZGlhZ19tb2RfYmVnaW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTYyMS1cXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb3JpZ2luLCBlbnVtIGJwZl9kaWFnX21vZF9yZWFzb24gcmVhc29uKVxcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5oPTk3PXZvaWQgYnBmX2RpYWdfcmVjb3JkX2JyYW5jaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGJvb2wgY29uZF90cnVlKTtcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmg6OTg6dm9pZCBicGZfZGlhZ19tb2RfYmVnaW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmgtOTktXFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9yaWdpbiwgZW51bSBicGZfZGlhZ19tb2RfcmVhc29uIHJlYXNvbik7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzQ5MT1zdGF0aWMgdm9pZCBzYXZlX3JlZ2lzdGVyX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQ5Ny1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzQ5ODpcXHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBcXHUwMDI2c3RhdGUtXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIsIHJlZywgQlBGX0RJQUdfTU9EX1NQSUxMKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQ5OS1cXHRzdGF0ZS1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ciA9ICpyZWc7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzkwNj1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzkyOS1cXHRpZiAoZHN0X3JlZ25vIFxcdTAwM2U9IDApXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM5MzA6XFx0XFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXFx1MDAyNnN0YXRlLVxcdTAwM2VyZWdzW2RzdF9yZWdub10sIHJlZywgQlBGX0RJQUdfTU9EX1dSSVRFKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzkzMS1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00MjEyPXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfYXJnX3dyaXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDIzNS1cXHRhcmcgPSBcXHUwMDI2c3RhdGUtXFx1MDAzZXN0YWNrX2FyZ19yZWdzW3NwaV07XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQyMzY6XFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgYXJnLCB2YWx1ZV9yZWcsIEJQRl9ESUFHX01PRF9XUklURSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQyMzctXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDI1NT1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX2FyZ19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDI3Ny1cXHRjdXIgPSB2c3RhdGUtXFx1MDAzZWZyYW1lW3ZzdGF0ZS1cXHUwMDNlY3VyZnJhbWVdO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0Mjc4OlxcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFxcdTAwMjZjdXItXFx1MDAzZXJlZ3NbZHN0X3JlZ25vXSwgYXJnLCBCUEZfRElBR19NT0RfV1JJVEUpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00Mjc5LVxcdGN1ci1cXHUwMDNlcmVnc1tkc3RfcmVnbm9dID0gKmFyZztcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NjYzPXN0YXRpYyBpbnQgY2hlY2tfbG9hZF9tZW0oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2OTYtXFx0ICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY2OTc6XFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXFx1MDAyNnJlZ3NbaW5zbi1cXHUwMDNlZHN0X3JlZ10sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2OTgtXFx0ZXJyID0gY2hlY2tfbWVtX2FjY2VzcyhlbnYsIGVudi1cXHUwMDNlaW5zbl9pZHgsIHJlZ3MgKyBpbnNuLVxcdTAwM2VzcmNfcmVnLCBhcmdub19mcm9tX3JlZyhpbnNuLVxcdTAwM2VzcmNfcmVnKSwgaW5zbi1cXHUwMDNlb2ZmLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTY3NDg9c3RhdGljIGludCBjaGVja19hdG9taWNfcm13KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjgxMS1cXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiBsb2FkX3JlZyBcXHUwMDNlPSAwKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY4MTI6XFx0XFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgY3VyX3JlZ3MoZW52KSArIGxvYWRfcmVnLCBOVUxMLCBCUEZfRElBR19NT0RfV1JJVEUpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODEzLVxcdFxcdGVyciA9IGNoZWNrX21lbV9hY2Nlc3MoZW52LCBlbnYtXFx1MDAzZWluc25faWR4LCBkc3RfcmVnLCBhcmdub19mcm9tX3JlZyhpbnNuLVxcdTAwM2Vkc3RfcmVnKSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05NTc0PXN0YXRpYyB2b2lkIGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTU4Mi1cXHRcXHRpZiAocmVnLVxcdTAwM2V0eXBlIFxcdTAwMjYgTUVNX1JDVSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NTgzOlxcdFxcdFxcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIHJlZywgTlVMTCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTU4NC1cXHRcXHRcXHRyZWctXFx1MDAzZXR5cGUgXFx1MDAyNj0gfihNRU1fUkNVIHwgUFRSX01BWUJFX05VTEwpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTk1OTE9c3RhdGljIGludCByZWZfY29udmVydF9hbGxvY19yY3VfcHJvdGVjdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpZClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NjA0LVxcdFxcdGlmICgocmVnLVxcdTAwM2V0eXBlIFxcdTAwMjYgTUVNX0FMTE9DKSBcXHUwMDI2XFx1MDAyNiAocmVnLVxcdTAwM2V0eXBlIFxcdTAwMjYgTUVNX1BFUkNQVSkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTYwNTpcXHRcXHRcXHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCByZWcsIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTk2MDYtXFx0XFx0XFx0cmVnLVxcdTAwM2VpZCA9IDA7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTkyOD1zdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTk4Ny1cXHRcXHRlbHNlXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjk5ODg6XFx0XFx0XFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXFx1MDAyNmNhbGxlci1cXHUwMDNlcmVnc1tCUEZfUkVHXzBdLCBOVUxMLCBCUEZfRElBR19NT0RfV1JJVEUpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05OTg5LVxcdFxcdGNsZWFyX2NhbGxlcl9zYXZlZF9yZWdzKGVudiwgY2FsbGVyLVxcdTAwM2VyZWdzKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDM1Mz1zdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0MDgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNDA5OlxcdFxcdFxcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFxcdTAwMjZjYWxsZXItXFx1MDAzZXJlZ3NbcmVnbm9dLCBcXHUwMDI2Y2FsbGVlLVxcdTAwM2VyZWdzW3JlZ25vXSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0MTAtXFx0XFx0XFx0XFx0XFx0ICAgQlBGX0RJQUdfTU9EX1dSSVRFKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDgzMj1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTA5NS1cXHRicGZfZGlhZ19yZWNvcmRfY2FsbGVyX3NhdmVkKGVudiwgcmVncyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMDk2OlxcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFxcdTAwMjZyZWdzW0JQRl9SRUdfMF0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMDk3LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDQUxMRVJfU0FWRURfUkVHUzsgaSsrKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyNjgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjY5OlxcdFxcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFxcdTAwMjZyZWdzW0JQRl9SRUdfMF0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjcwLVxcdFxcdHJlZ3NbQlBGX1JFR18wXS50eXBlIFxcdTAwMjY9IH5QVFJfTUFZQkVfTlVMTDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzc3OD1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MDIxLVxcdGJwZl9kaWFnX3JlY29yZF9jYWxsZXJfc2F2ZWQoZW52LCByZWdzKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQwMjI6XFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXFx1MDAyNnJlZ3NbQlBGX1JFR18wXSwgTlVMTCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQwMjMtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIENBTExFUl9TQVZFRF9SRUdTOyBpKyspIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNTkyMz1zdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5MjgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1OTI5OlxcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFxcdTAwMjZyZWdzW2luc24tXFx1MDAzZWRzdF9yZWddLCBOVUxMLCBCUEZfRElBR19NT0RfV1JJVEUpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTkzMC1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzE4NT1zdGF0aWMgaW50IGNoZWNrX2xkX2ltbShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcyMDItXFx0ZHN0X3JlZyA9IFxcdTAwMjZyZWdzW2luc24tXFx1MDAzZWRzdF9yZWddO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzIwMzpcXHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBkc3RfcmVnLCBOVUxMLCBCUEZfRElBR19NT0RfV1JJVEUpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzIwNC1cXHRpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSAwKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTczMTM9c3RhdGljIGludCBjaGVja19sZF9hYnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MzYxLVxcdGJwZl9kaWFnX3JlY29yZF9jYWxsZXJfc2F2ZWQoZW52LCByZWdzKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTczNjI6XFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXFx1MDAyNnJlZ3NbQlBGX1JFR18wXSwgTlVMTCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTczNjMtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIENBTExFUl9TQVZFRF9SRUdTOyBpKyspIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTc6NTk6MDguNDg5MzgxMzkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxMzEzMDg1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgdGhlIGNvcmUgbW9kaWZpY2F0aW9uIGluIGBwcmVwYXJlX2Z1bmNfZXhpdGAuIEl0IGFwcGVhcnMgdGhleSdyZSBub3cgd3JhcHBpbmcgdGhlIHJlZ2lzdGVyIGNvcHkg4oCTIHNwZWNpZmljYWxseSwgYGNhbGxlci1cdTAwM2VyZWdzW3JlZ25vXSA9IGNhbGxlZS1cdTAwM2VyZWdzW3JlZ25vXTtgIOKAkyB3aXRoIGBicGZfZGlhZ19tb2RfYmVnaW5gIGFuZCBgYnBmX2RpYWdfbW9kX2VuZGAgZm9yICplYWNoKiByZWdpc3Rlci4gVGhhdCdzIGEgYml0IHVudXN1YWwuIFByZXZpb3VzbHksIGl0IGxvb2tlZCBsaWtlIHRoZXkgd2VyZSBkb2luZyBhIHNpbmdsZSB3cmFwcGVyIGZvciB0aGUgZW50aXJlIHJlZ2lzdGVyIHNldC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIHVzZSBvZiBgYnBmX2RpYWdfbW9kX2JlZ2luYC4gVGhpcyBzY3JlYW1zICpkaWFnbm9zdGljKiBmdW5jdGlvbiwgc28gaXMgdGhpcyBqdXN0IGxvZ2dpbmcsIG9yIGRvZXMgdGhpcyBhY3R1YWxseSBpbnRyb2R1Y2UgZnVuY3Rpb25hbCBjaGFuZ2VzPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYnBmX2RpYWdfbW9kX2JlZ2luYC4gR290dGEgc2VlIGlmIHRoaXMgaGFzIHNpZGUgZWZmZWN0cyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NjQsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTc6NTk6MTIuNzAyNTE0NzI2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzgwNjcwMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBicGZfZGlhZ19tb2RfYmVnaW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTE1Nzk9c3RhdGljIGJvb2wgcmVnX3RvX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTE2MTktXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjE2MjA6dm9pZCBicGZfZGlhZ19tb2RfYmVnaW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMTYyMS1cXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqb3JpZ2luLCBlbnVtIGJwZl9kaWFnX21vZF9yZWFzb24gcmVhc29uKVxcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5oPTk3PXZvaWQgYnBmX2RpYWdfcmVjb3JkX2JyYW5jaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaW5zbl9pZHgsIGJvb2wgY29uZF90cnVlKTtcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmg6OTg6dm9pZCBicGZfZGlhZ19tb2RfYmVnaW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmgtOTktXFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9yaWdpbiwgZW51bSBicGZfZGlhZ19tb2RfcmVhc29uIHJlYXNvbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE3OjU5OjE0LjI4MDU4NjAzNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTI2ODI4MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGRpYWdub3N0aWMgbW9kdWxlIGZ1bmN0aW9uczpcblxuKipEaXZpbmcgaW50byBCUEYgRGlhZ25vc3RpY3MgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBrZXJuZWwvYnBmL2RpYWdub3N0aWNzLmNgLiBTZWVtcyBsaWtlIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEJQRiBzdWJzeXN0ZW0gaGFuZGxlcyBpdHMgb3duIGRpYWdub3N0aWNzLCByaWdodD8gVGhlIGtleSBoZXJlIGFyZSB0aGUgYGJwZl9kaWFnX21vZF9iZWdpbmAgYW5kIGBicGZfZGlhZ19tb2RfZW5kYCBmdW5jdGlvbnMuIEknbSBhc3N1bWluZyB0aGVzZSBhcmUgc29tZSBraW5kIG9mIHNjb3BlIG1hcmtlcnMgd2l0aGluIHRoZSBtb2R1bGUsIGZvciBlaXRoZXIgaW5zdHJ1bWVudGF0aW9uIG9yIHJlc291cmNlIHRyYWNraW5nLCBvciBtYXliZSBldmVuIGRlYnVnZ2luZyBhc3Npc3RhbmNlIHdoZW4gc29tZXRoaW5nIGdvZXMgd3Jvbmcgd2l0aCBCUEYgcHJvZ3JhbXMuXG5cbkknbSBiZXR0aW5nIGBicGZfZGlhZ19tb2RfYmVnaW5gIHNldHMgdXAgc29tZSBpbml0aWFsIGNvbnRleHQsIG1heWJlIGFsbG9jYXRpbmcgYSBzdHJ1Y3R1cmUgb3IgZW5hYmxpbmcgc29tZSB0cmFjaW5nLCBwcm9iYWJseSB0aWVkIHRvIGEgcGFydGljdWxhciBCUEYgcHJvZ3JhbSBvciBpbnN0YW5jZS4gVGhlbiwgYGJwZl9kaWFnX21vZF9lbmRgIHdvdWxkIGNsZWFuIHVwIGFmdGVyIHRoYXQgcHJvY2VzcywgcmVsZWFzaW5nIHJlc291cmNlcyBhbmQgbWF5YmUgd3JpdGluZyBvdXQgc29tZSBzdGF0cyBvciBlcnJvciBpbmZvcm1hdGlvbi4gSSB3b25kZXIgaWYgdGhpcyByZWxhdGVzIHRvIHRoZSB0cmFjaW5nIGFzcGVjdHMgd2UgdXNlLCBvciBpZiB0aGlzIGlzIHRoZSBjb3JlIG9mIGhvdyB0aGUgc3Vic3lzdGVtIGNhbiBkaWFnbm9zZSBhIG1pc2JlaGF2aW5nIEJQRiBwcm9ncmFtLCBvciBhIHBhcnRpY3VsYXIgY29udGV4dCBpdCdzIHJ1bm5pbmcgaW4/XG5JJ20gaW50ZXJlc3RlZCB0byBzZWUgaG93IHRoZXkgaW50ZWdyYXRlIHdpdGggdGhlIHdpZGVyIGtlcm5lbCBkaWFnbm9zdGljcyBpbmZyYXN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBob3cgZG8gdGhlc2UgaG9va3MgaW50ZXJhY3Qgd2l0aCB0aGluZ3MgbGlrZSBwZXJmIG9yIGZ0cmFjZT8gQXJlIHRoZXkganVzdCB3cmFwcGVycyBmb3IgdGhvc2UsIG9yIHNvbWV0aGluZyBtb3JlIGZ1bmRhbWVudGFsPyBHb3R0YSBkaWcgaW4gZGVlcGVyIGFuZCBjaGVjayB0aGF0IG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYxNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE3OjU5OjE4LjQ5MzI3MTM4OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2RpYWdub3N0aWNzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTYxMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTYxMDpcXHRcXHRcXHRpZiAobnNsb3RzIFxcdTAwMjZcXHUwMDI2IGFkZHIgXFx1MDAzZT0gc3RhcnQgXFx1MDAyNlxcdTAwMjYgYWRkciBcXHUwMDNjIGVuZCkge1xcbjE2MTE6XFx0XFx0XFx0XFx0c3BpID0gKChjb25zdCBjaGFyICopcmVnIC0gKGNvbnN0IGNoYXIgKilzdGF0ZS1cXHUwMDNlc3RhY2spIC9cXG4xNjEyOlxcdFxcdFxcdFxcdCAgICAgIHNpemVvZigqc3RhdGUtXFx1MDAzZXN0YWNrKTtcXG4xNjEzOlxcdFxcdFxcdFxcdCp0YXJnZXQgPSBkaWFnX3N0YWNrX3Nsb3RfdGFyZ2V0KHN0YXRlLVxcdTAwM2VkaWFnX2ZyYW1lX2lkLCBzdGF0ZS1cXHUwMDNlZnJhbWVubywgc3BpKTtcXG4xNjE0OlxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjE2MTU6XFx0XFx0XFx0fVxcbjE2MTY6XFx0XFx0fVxcbjE2MTc6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjE2MTg6XFx0fVxcbjE2MTk6XFx0XFxuMTYyMDpcXHR2b2lkIGJwZl9kaWFnX21vZF9iZWdpbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbjE2MjE6XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm9yaWdpbiwgZW51bSBicGZfZGlhZ19tb2RfcmVhc29uIHJlYXNvbilcXG4xNjIyOlxcdHtcXG4xNjIzOlxcdFxcdHN0cnVjdCBicGZfZGlhZyAqZGlhZyA9IGVudi1cXHUwMDNlZGlhZztcXG4xNjI0OlxcdFxcbjE2MjU6XFx0XFx0aWYgKCFkaWFnKVxcbjE2MjY6XFx0XFx0XFx0cmV0dXJuO1xcbjE2Mjc6XFx0XFx0ZGlhZy1cXHUwMDNlbW9kLmFjdGl2ZSA9IHJlZ190b190YXJnZXQoZW52LCByZWcsIFxcdTAwMjZkaWFnLVxcdTAwM2Vtb2QudGFyZ2V0KTtcXG4xNjI4OlxcdFxcdGlmICghZGlhZy1cXHUwMDNlbW9kLmFjdGl2ZSlcXG4xNjI5OlxcdFxcdFxcdHJldHVybjtcXG4xNjMwOlxcdFxcdGRpYWctXFx1MDAzZW1vZC50YXJnZXRfcmVnX3NuYXBzaG90ID0gKnJlZztcXG4xNjMxOlxcdFxcdGRpYWctXFx1MDAzZW1vZC5pbnNuX2lkeCA9IGVudi1cXHUwMDNlaW5zbl9pZHg7XFxuMTYzMjpcXHRcXHRkaWFnLVxcdTAwM2Vtb2QucmVhc29uID0gcmVhc29uO1xcbjE2MzM6XFx0XFx0ZGlhZy1cXHUwMDNlbW9kLm9yaWdpbl92YWxpZCA9IG9yaWdpbiBcXHUwMDI2XFx1MDAyNiByZWdfdG9fdGFyZ2V0KGVudiwgb3JpZ2luLCBcXHUwMDI2ZGlhZy1cXHUwMDNlbW9kLm9yaWdpbik7XFxuMTYzNDpcXHR9XFxuMTYzNTpcXHRcXG4xNjM2OlxcdHZvaWQgYnBmX2RpYWdfbW9kX2VuZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbjE2Mzc6XFx0e1xcbjE2Mzg6XFx0XFx0c3RydWN0IGJwZl9kaWFnICpkaWFnID0gZW52LVxcdTAwM2VkaWFnO1xcbjE2Mzk6XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKm5ld19yZWc7XFxuMTY0MDpcXHRcXG4xNjQxOlxcdFxcdGlmICghZGlhZyB8fCAhZGlhZy1cXHUwMDNlbW9kLmFjdGl2ZSlcXG4xNjQyOlxcdFxcdFxcdHJldHVybjtcXG4xNjQzOlxcdFxcdGRpYWctXFx1MDAzZW1vZC5hY3RpdmUgPSBmYWxzZTtcXG4xNjQ0OlxcdFxcdC8qXFxuMTY0NTpcXHRcXHQgKiBSZXNvbHZlIHRoZSB0YXJnZXQgYWdhaW4gYmVjYXVzZSB0aGUgZW5jbG9zaW5nIGZ1bmN0aW9uIHN0YXRlJ3Mgc3RhY2tcXG4xNjQ2OlxcdFxcdCAqIG1heSBoYXZlIGJlZW4gcmVhbGxvY2F0ZWQgd2hpbGUgdGhlIG1vZGlmaWNhdGlvbiB3YXMgaW4gcHJvZ3Jlc3MuXFxuMTY0NzpcXHRcXHQgKi9cXG4xNjQ4OlxcdFxcdG5ld19yZWcgPSB0YXJnZXRfdG9fcmVnKGVudiwgXFx1MDAyNmRpYWctXFx1MDAzZW1vZC50YXJnZXQpO1xcbjE2NDk6XFx0XFx0aWYgKCFuZXdfcmVnKVxcbjE2NTA6XFx0XFx0XFx0cmV0dXJuO1xcbjE2NTE6XFx0XFx0ZGlhZ19yZWNvcmRfbW9kKGVudiwgZGlhZy1cXHUwMDNlbW9kLmluc25faWR4LCBkaWFnLVxcdTAwM2Vtb2QudGFyZ2V0LCBkaWFnLVxcdTAwM2Vtb2QucmVhc29uLFxcbjE2NTI6XFx0XFx0XFx0XFx0XFx1MDAyNmRpYWctXFx1MDAzZW1vZC50YXJnZXRfcmVnX3NuYXBzaG90LCBuZXdfcmVnLFxcbjE2NTM6XFx0XFx0XFx0XFx0ZGlhZy1cXHUwMDNlbW9kLm9yaWdpbl92YWxpZCA/IFxcdTAwMjZkaWFnLVxcdTAwM2Vtb2Qub3JpZ2luIDogTlVMTCk7XFxuMTY1NDpcXHR9XFxuMTY1NTpcXHRcXG4xNjU2OlxcdHZvaWQgYnBmX2RpYWdfcmVjb3JkX3NjcnViKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuMTY1NzpcXHRcXHRcXHRcXHQgICBlbnVtIGJwZl9kaWFnX21vZF9yZWFzb24gcmVhc29uKVxcbjE2NTg6XFx0e1xcbjE2NTk6XFx0XFx0c3RydWN0IGJwZl9kaWFnX21vZF90YXJnZXQgdGFyZ2V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNzo1OToxOC40OTM0MjQzNDhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjg2NTIzMDY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmVjZW50IEtlcm5lbCBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSByZWNlbnQgbW9kaWZpY2F0aW9ucy4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIHRoZSB1cGRhdGVzIHRvIGBwcmVwYXJlX2Z1bmNfZXhpdGAgYXJlIHB1cmVseSBmb3IgZGlhZ25vc3RpYyBwdXJwb3Nlcy4gTm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRoZXJlLCBqdXN0IG1ha2luZyBpdCBlYXNpZXIgdG8gcGlucG9pbnQgaXNzdWVzLiBTaW1pbGFybHksIHRoZSBhZGp1c3RtZW50cyB0byBgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdGAgYW5kIGBjaGVja19rZnVuY19jYWxsYCBzZWVtIHRvIGJlIGZvY3VzZWQgb24gaW1wcm92ZWQgZXJyb3IgcmVwb3J0aW5nLiBUaGV5J3JlIG1ha2luZyB0aGUgZXJyb3IgbWVzc2FnZXMgbW9yZSBpbmZvcm1hdGl2ZSB3aGVuIGEga2Z1bmMgcmV0dXJucyBhIHN0cnVjdCB0aGF0J3Mgbm90IGNvbXBvc2VkIHNvbGVseSBvZiBzY2FsYXIgdHlwZXMuIFRoYXQncyBhIGRlZmluaXRlIGltcHJvdmVtZW50IGZvciBkZWJ1Z2dpbmcuXG5cbkJ1dCB3YWl0LCBgYnRmX3NjYWxhcl9zdHJ1Y3Rfd2Fsa2AgaGFzIGJlZW4gaW50cm9kdWNlZCwgYW5kIGBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0YCBub3cgbGV2ZXJhZ2VzIGl0LiBUaGlzIGRlc2VydmVzIGEgY2xvc2VyIGxvb2suIFRoZSBjb3JlIGxvZ2ljIG9mIGBidGZfc2NhbGFyX3N0cnVjdF93YWxrYCAqYXBwZWFycyogaWRlbnRpY2FsIHRvIHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBvZiBgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdGAsIGJ1dCB3aXRoIGEga2V5IGRpZmZlcmVuY2U6IGl0IHJldHVybnMgdGhlIHNwZWNpZmljIHByb2JsZW1hdGljIG1lbWJlci4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGVyZSBhcmVuJ3QgYW55IHN1YnRsZSBmdW5jdGlvbmFsIGNoYW5nZXMgaGlkZGVuIHdpdGhpbiBgYnRmX3NjYWxhcl9zdHJ1Y3Rfd2Fsa2AsIGV2ZW4gaWYgdGhlIHVuZGVybHlpbmcgc3RydWN0dXJlIGlzIHNpbWlsYXIuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MzEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNzo1OTo0NS4zNTg2NTY2OTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY3ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTYyMyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE2MjM6XFx0XFx0cmV0dXJuIGFyZ24gXFx1MDAzYz0gYXJnX2lkeDtcXG4xMTYyNDpcXHR9XFxuMTE2MjU6XFx0XFxuMTE2MjY6XFx0LypcXG4xMTYyNzpcXHQgKiBSZXR1cm5zIHRydWUgaWYgc3RydWN0IGlzIGNvbXBvc2VkIG9mIHNjYWxhcnMsIDQgbGV2ZWxzIG9mIG5lc3RpbmcgYWxsb3dlZC5cXG4xMTYyODpcXHQgKiBPbiBmYWlsdXJlIEBiYWQsIHdoZW4gZ2l2ZW4sIG5hbWVzIHRoZSBtZW1iZXIgdGhhdCBtYWRlIHRoZSBhbnN3ZXIgbm8sIHNvIGFcXG4xMTYyOTpcXHQgKiBkaWFnbm9zdGljIGNhbiBwb2ludCBhdCBpdCByYXRoZXIgdGhhbiBhdCB0aGUgd2hvbGUgdHlwZS5cXG4xMTYzMDpcXHQgKi9cXG4xMTYzMTpcXHRzdGF0aWMgYm9vbCBidGZfc2NhbGFyX3N0cnVjdF93YWxrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4xMTYzMjpcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIGludCByZWMsXFxuMTE2MzM6XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKipiYWQpXFxuMTE2MzQ6XFx0e1xcbjExNjM1OlxcdFxcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqbWVtYmVyX3R5cGU7XFxuMTE2MzY6XFx0XFx0Y29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcjtcXG4xMTYzNzpcXHRcXHR1MzIgaTtcXG4xMTYzODpcXHRcXG4xMTYzOTpcXHRcXHRpZiAoIWJ0Zl90eXBlX2lzX3N0cnVjdCh0KSlcXG4xMTY0MDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTE2NDE6XFx0XFxuMTE2NDI6XFx0XFx0Zm9yX2VhY2hfbWVtYmVyKGksIHQsIG1lbWJlcikge1xcbjExNjQzOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBidGZfYXJyYXkgKmFycmF5O1xcbjExNjQ0OlxcdFxcbjExNjQ1OlxcdFxcdFxcdG1lbWJlcl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBtZW1iZXItXFx1MDAzZXR5cGUsIE5VTEwpO1xcbjExNjQ2OlxcdFxcdFxcdGlmIChidGZfdHlwZV9pc19zdHJ1Y3QobWVtYmVyX3R5cGUpKSB7XFxuMTE2NDc6XFx0XFx0XFx0XFx0aWYgKHJlYyBcXHUwMDNlPSAzKSB7XFxuMTE2NDg6XFx0XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJtYXggc3RydWN0IG5lc3RpbmcgZGVwdGggZXhjZWVkZWRcXFxcblxcXCIpO1xcbjExNjQ5OlxcdFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMTY1MDpcXHRcXHRcXHRcXHR9XFxuMTE2NTE6XFx0XFx0XFx0XFx0aWYgKCFidGZfc2NhbGFyX3N0cnVjdF93YWxrKGVudiwgYnRmLCBtZW1iZXJfdHlwZSwgcmVjICsgMSwgYmFkKSlcXG4xMTY1MjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTE2NTM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTE2NTQ6XFx0XFx0XFx0fVxcbjExNjU1OlxcdFxcdFxcdGlmIChidGZfdHlwZV9pc19hcnJheShtZW1iZXJfdHlwZSkpIHtcXG4xMTY1NjpcXHRcXHRcXHRcXHRhcnJheSA9IGJ0Zl9hcnJheShtZW1iZXJfdHlwZSk7XFxuMTE2NTc6XFx0XFx0XFx0XFx0aWYgKCFhcnJheS1cXHUwMDNlbmVsZW1zKVxcbjExNjU4OlxcdFxcdFxcdFxcdFxcdGdvdG8gYmFkX21lbWJlcjtcXG4xMTY1OTpcXHRcXHRcXHRcXHRtZW1iZXJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJyYXktXFx1MDAzZXR5cGUsIE5VTEwpO1xcbjExNjYwOlxcdFxcdFxcdFxcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyKG1lbWJlcl90eXBlKSlcXG4xMTY2MTpcXHRcXHRcXHRcXHRcXHRnb3RvIGJhZF9tZW1iZXI7XFxuMTE2NjI6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTE2NjM6XFx0XFx0XFx0fVxcbjExNjY0OlxcdFxcdFxcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyKG1lbWJlcl90eXBlKSlcXG4xMTY2NTpcXHRcXHRcXHRcXHRnb3RvIGJhZF9tZW1iZXI7XFxuMTE2NjY6XFx0XFx0fVxcbjExNjY3OlxcdFxcdHJldHVybiB0cnVlO1xcbjExNjY4OlxcdFxcbjExNjY5OlxcdGJhZF9tZW1iZXI6XFxuMTE2NzA6XFx0XFx0aWYgKGJhZClcXG4xMTY3MTpcXHRcXHRcXHQqYmFkID0gbWVtYmVyO1xcbjExNjcyOlxcdFxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTc6NTk6NDUuMzU5NjI2NzU5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MzI1OTU4MzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIHRoaXMgcGF0Y2ggaXMgdGhhdCBpdCdzIGZ1bmRhbWVudGFsbHkgYWJvdXQgaW1wcm92aW5nIGRpYWdub3N0aWNzIGFuZCBlcnJvciBtZXNzYWdlcyB3aXRoaW4gdGhlIHZlcmlmaWVyLiBUaGUgY29yZSBsb2dpYyBvZiB0aGUgdmVyaWZpZXIgaXRzZWxmLCBzcGVjaWZpY2FsbHkgdGhlIGBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0YCBmdW5jdGlvbmFsaXR5LCB3aGljaCBoYXMgYmVlbiByZW5hbWVkIHRvIGBidGZfc2NhbGFyX3N0cnVjdF93YWxrYCwgcmVtYWlucyBmdW5jdGlvbmFsbHkgdW5jaGFuZ2VkLiBUaGUgbmV3IGBidGZfc2NhbGFyX3N0cnVjdF93YWxrYCBmdW5jdGlvbiBzaW1wbHkgcmV0dXJucyB0aGUgcHJvYmxlbWF0aWMgbWVtYmVyLCB3aGljaCBpcyB0aGVuIHVzZWQgYnkgdGhlIGNhbGxlciB0byBjcmVhdGUgYSBiZXR0ZXIgZXJyb3IgbWVzc2FnZS5cblxuSSBzZWUgdGhhdCB0aGUgYGNoZWNrX2tmdW5jX2NhbGxgIGZ1bmN0aW9uIG5vdyBsZXZlcmFnZXMgdGhpcyB1cGRhdGVkIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIG1vcmUgaW5mb3JtYXRpdmUgZXJyb3Igb3V0cHV0LiBNb3Jlb3ZlciwgdGhlIGNoYW5nZXMgaW4gYHByZXBhcmVfZnVuY19leGl0YCwgc3Vycm91bmRpbmcgdGhlIGBicGZfZGlhZ19tb2RfYmVnaW5gIGFuZCBgYnBmX2RpYWdfbW9kX2VuZGAgY2FsbHMsIGFsc28gYXBwZWFyIHRvIGJlIHB1cmVseSBkaWFnbm9zdGljLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaXMgdG8gaXRlcmF0ZSB0aHJvdWdoIHJlZ2lzdGVycyBhbmQgYW5ub3RhdGUgZWFjaCBpbmRpdmlkdWFsbHkuXG5cbkVzc2VudGlhbGx5LCBhbGwgbW9kaWZpY2F0aW9ucyBhcmUgZm9jdXNlZCBvbiBwcm92aWRpbmcgbW9yZSBncmFudWxhciBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uICBObyBjb3JlIGFsZ29yaXRobXMgb3IgZGF0YSBzdHJ1Y3R1cmVzLCB0aGF0IEkgY2FuIHNlZSwgaGF2ZSBiZWVuIGFsdGVyZWQgaW4gYSB3YXkgdGhhdCB3b3VsZCBpbnRyb2R1Y2UgbmV3IHZ1bG5lcmFiaWxpdGllcyBvciB1bnVzdWFsIGNvZGUgcGF0aHMgdGhhdCB3b3VsZCBiZSBnb29kIGZvciBmdXp6aW5nLiBUaHVzLCBJIHdvdWxkIGNsYXNzaWZ5IHRoaXMgYXMgYSBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2UgdG8gdGhlIHZlcmlmaWVyJ3MgcmVwb3J0aW5nIGNhcGFiaWxpdGllcy5cblxuVGhlcmVmb3JlLCBnaXZlbiB0aGUgZm9jdXMgb24gKmJldHRlciogcmVwb3J0aW5nIG9mICpleGlzdGluZyogaXNzdWVzIGFuZCAqbm90KiBhbHRlcmluZyB0aGUgdmVyaWZpZXIncyBjb3JlIG9wZXJhdGlvbmFsIGxvZ2ljLCBJIGNvbmNsdWRlIHRoYXQgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGluZGVlZCBiZSBgZmFsc2VgIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMDIsIk91dHB1dFRva2VucyI6ODUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODowMDowMC42ODU1ODczMDRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiB2ZXJpZmllciBkaWFnbm9zdGljIGZ1bmN0aW9ucyAoYnBmX2RpYWdfbW9kX2JlZ2luL2VuZCkgYW5kIGltcHJvdmVzIGVycm9yIG1lc3NhZ2VzIHdoZW4gYSBrZnVuYyByZXR1cm5zIGEgc3RydWN0IHRoYXQgaXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnMuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHZlcmlmaWVyIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgdmVyaWZpZXIgZGlhZ25vc3RpYyBmdW5jdGlvbnMgKGJwZl9kaWFnX21vZF9iZWdpbi9lbmQpIGFuZCBpbXByb3ZlcyBlcnJvciBtZXNzYWdlcyB3aGVuIGEga2Z1bmMgcmV0dXJucyBhIHN0cnVjdCB0aGF0IGlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSB2ZXJpZmllciBsb2dpYyBvciBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjAwOjAwLjY4NTYwODMwNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5sr4c[1] Phase: Running StartedAt: 2026-08-24 18:00:12 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sr4c[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-24 18:00:12 +0000 UTC FinishedAt: 2026-08-24 18:00:16 +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,}