Name: series-workflow4s7mn Phase: Failed StartedAt: 2026-08-10 22:49:52 +0000 UTC FinishedAt: 2026-08-10 23:35:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4s7mn[0] Phase: Succeeded StartedAt: 2026-08-10 22:49:52 +0000 UTC FinishedAt: 2026-08-10 23:35:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4s7mn[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 22:49:52 +0000 UTC FinishedAt: 2026-08-10 23:35:03 +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+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbiwgd2hpY2ggaXMgcGFydCBvZiB0aGUgQU1EIFNFVi1TTlAgKFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gLSBTZWN1cmUgTmVzdGVkIFBhZ2luZykgaG9zdCBzdXBwb3J0LiBBbGwgdGhlIG1vZGlmaWVkIGFuZCBhZGRlZCBmdW5jdGlvbnMgKGUuZy4sIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0sIHNucF9zZXR1cF9ybXBvcHQsIHNucF9wcmVwYXJlLCBzbnBfc2h1dGRvd24pIGFyZSBndWFyZGVkIGJ5IGNoZWNrcyBmb3IgQ0NfQVRUUl9IT1NUX1NFVl9TTlAgb3IgZXhwbGljaXRseSByZXF1aXJlIHRoZSBhYnNlbmNlIG9mIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IuIFNpbmNlIHN5emthbGxlciBydW5zIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoR0NFL1FFTVUpIHdoZXJlIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IgaXMgc2V0IGFuZCBTRVYtU05QIGhvc3QgaGFyZHdhcmUgZmVhdHVyZXMgYXJlIG5vdCBlbXVsYXRlZCwgdGhpcyBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjMyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGJmMDc2MDMxNWZmNDU0ZWQ2MjVhNDE0YzY3N2IxZGRiZjgwM2I0ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDIzOjMyOjU3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG5pbmRleCAzZDA5NDBhM2I5ZjM3Li5kYmNjZGU5ZWU1Y2Q1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuQEAgLTc2LDcgJiM0Mzs3Niw3IEBAXG4gI2RlZmluZSBYODZfRkVBVFVSRV9LOFx0XHRcdCggMyozMiYjNDM7IDQpIC8qIE9wdGVyb24sIEF0aGxvbjY0ICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9aRU41XHRcdCggMyozMiYjNDM7IDUpIC8qIENQVSBiYXNlZCBvbiBaZW41IG1pY3JvYXJjaGl0ZWN0dXJlICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9aRU42XHRcdCggMyozMiYjNDM7IDYpIC8qIENQVSBiYXNlZCBvbiBaZW42IG1pY3JvYXJjaGl0ZWN0dXJlICovXG4tLyogRnJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMyozMiYjNDM7IDcpICovXG4mIzQzOyNkZWZpbmUgWDg2X0ZFQVRVUkVfUk1QT1BUXHRcdCggMyozMiYjNDM7IDcpIC8qIFN1cHBvcnQgZm9yIEFNRCBSTVBPUFQgaW5zdHJ1Y3Rpb24gKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQ1x0KCAzKjMyJiM0MzsgOCkgLyogXCYjMzQ7Y29uc3RhbnRfdHNjXCYjMzQ7IFRTQyB0aWNrcyBhdCBhIGNvbnN0YW50IHJhdGUgKi9cbiAvKiBmcmVlOiB3YXMgI2RlZmluZSBYODZfRkVBVFVSRV9VUFx0KCAzKjMyJiM0MzsgOSkgKiBcJiMzNDt1cFwmIzM0OyBTTVAga2VybmVsIHJ1bm5pbmcgb24gVVAgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0FSVFx0XHRcdCggMyozMiYjNDM7MTApIC8qIFwmIzM0O2FydFwmIzM0OyBBbHdheXMgcnVubmluZyB0aW1lciAoQVJUKSAqL1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcbmluZGV4IDE4YzRiZTc1ZTkyNzEuLmQyY2IwYTdjZDBhMmYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcbkBAIC03NjEsNiAmIzQzOzc2MSw5IEBAXG4gI2RlZmluZSBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVFx0MFxuICNkZWZpbmUgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRFx0QklUX1VMTChNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVClcbiAjZGVmaW5lIE1TUl9BTUQ2NF9STVBfU0VHTUVOVF9TSElGVCh4KVx0KCgoeCkgXHUwMDI2IEdFTk1BU0tfVUxMKDEzLCA4KSkgXHUwMDNlXHUwMDNlIDgpXG4mIzQzOyNkZWZpbmUgTVNSX0FNRDY0X1JNUE9QVF9CQVNFXHRcdDB4YzAwMTAxMzlcbiYjNDM7I2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRV9CSVRcdDBcbiYjNDM7I2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRVx0XHRCSVRfVUxMKE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFX0JJVClcbiBcbiAjZGVmaW5lIE1TUl9TVlNNX0NBQVx0XHRcdDB4YzAwMWYwMDBcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXG5pbmRleCA1OTRjZmExOWNiZDRiLi4wOWIxYzVkMzM3OTAyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXG5AQCAtNjYyLDYgJiM0Mzs2NjIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc25wX2xlYWtfcGFnZXModTY0IHBmbiwgdW5zaWduZWQgaW50IHBhZ2VzKVxuIFx0X19zbnBfbGVha19wYWdlcyhwZm4sIHBhZ2VzLCB0cnVlKTtcbiB9XG4gaW50IHNucF9wcmVwYXJlKHZvaWQpO1xuJiM0Mzt2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCk7XG4mIzQzO3ZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKTtcbiB2b2lkIHNucF9zaHV0ZG93bih2b2lkKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxuQEAgLTY4MCw2ICYjNDM7NjgyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNucF9sZWFrX3BhZ2VzKHU2NCBwZm4sIHVuc2lnbmVkIGludCBucGFnZXMpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGtkdW1wX3Nldl9jYWxsYmFjayh2b2lkKSB7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgc25wX2ZpeHVwX2U4MjBfdGFibGVzKHZvaWQpIHt9XG4gc3RhdGljIGlubGluZSBpbnQgc25wX3ByZXBhcmUodm9pZCkgeyByZXR1cm4gLUVOT0RFVjsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKSB7fVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2h1dGRvd24odm9pZCkge31cbiAjZW5kaWZcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xuaW5kZXggOTM3MTI5Y2U2YTk2NC4uMDIxYzBiZjIyZGUyMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcbkBAIC02Nyw2ICYjNDM7NjcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNwdWlkX2JpdCBjcHVpZF9iaXRzW10gPSB7XG4gXHR7IFg4Nl9GRUFUVVJFX1BFUkZNT05fVjIsXHRcdENQVUlEX0VBWCwgIDAsIDB4ODAwMDAwMjIsIDAgfSxcbiBcdHsgWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMixcdFx0Q1BVSURfRUFYLCAgMSwgMHg4MDAwMDAyMiwgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9BTURfTEJSX1BNQ19GUkVFWkUsXHRDUFVJRF9FQVgsICAyLCAweDgwMDAwMDIyLCAwIH0sXG4mIzQzO1x0eyBYODZfRkVBVFVSRV9STVBPUFQsXHRcdFx0Q1BVSURfRURYLCAgMCwgMHg4MDAwMDAyNSwgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9BTURfSFRSX0NPUkVTLFx0XHRDUFVJRF9FQVgsIDMwLCAweDgwMDAwMDI2LCAwIH0sXG4gXHR7IDAsIDAsIDAsIDAsIDAgfVxuIH07XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbmluZGV4IDQyNzIyOTM0Nzg3NjYuLmM1NzQ4NDliMTU4NzggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5AQCAtMjk5Miw2ICYjNDM7Mjk5MiwxNiBAQCB2b2lkIHNldl92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0ICovXG4gXHRcdGlmIChzbnBfZGVjb21taXNzaW9uX2NvbnRleHQoa3ZtKSlcbiBcdFx0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFBlcmZvcm0gUk1QIG9wdGltaXphdGlvbnMgb24gbWVtb3J5IGZyZWVkIGJ5IHRlcm1pbmF0aW5nXG4mIzQzO1x0XHQgKiBndWVzdHMuICBUaGUgc2NhbiBpcyBkZWZlcnJlZCwgc28gaXQgbm9ybWFsbHkgcnVucyBhZnRlclxuJiM0MztcdFx0ICogc2V2X2dtZW1faW52YWxpZGF0ZSgpIGhhcyBjb252ZXJ0ZWQgdGhpcyBndWVzdCYjMzk7cyBwYWdlcyBiYWNrIHRvXG4mIzQzO1x0XHQgKiBzaGFyZWQsIGFuZCBwaWNrcyB0aGVtIHVwIHRoZW4uICBBIHZlcnkgbGFyZ2UgZ3Vlc3Qgd2hvc2VcbiYjNDM7XHRcdCAqIGNvbnZlcnNpb24gaGFzIG5vdCBmaW5pc2hlZCBieSB0aGVuIGlzIHBpY2tlZCB1cCBieSBhIGxhdGVyXG4mIzQzO1x0XHQgKiB0ZWFyZG93biYjMzk7cyBzY2FuLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRzbnBfcm1wb3B0X2FsbF9waHlzbWVtKCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRzZXZfdW5iaW5kX2FzaWQoa3ZtLCBzZXYtXHUwMDNlaGFuZGxlKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYyBiL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jXG5pbmRleCBjZmYyODVkOGFkOGUzLi4wMzRlZDU0N2FjMjgxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvdmlydC9zdm0vc2V2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jXG5AQCAtMTksNiAmIzQzOzE5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21tdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYW1kLWlvbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3NwZWMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9zZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wcm9jZXNzb3IuaFx1MDAzZVxuQEAgLTEyNCw2ICYjNDM7MTI1LDE4IEBAIHN0YXRpYyB2b2lkICpybXBfYm9va2tlZXBpbmcgX19yb19hZnRlcl9pbml0O1xuIFxuIHN0YXRpYyB1NjQgcHJvYmVkX3JtcF9iYXNlLCBwcm9iZWRfcm1wX3NpemU7XG4gXG4mIzQzO3N0YXRpYyBjcHVtYXNrX3Zhcl90IHJtcG9wdF9jcHVtYXNrLCBybXBvcHRfZm9sbG93ZXJfbWFzaztcbiYjNDM7c3RhdGljIHU2NCBybXBvcHRfcGFfc3RhcnQsIHJtcG9wdF9wYV9lbmQ7XG4mIzQzO1xuJiM0MztlbnVtIHJtcG9wdF9vcF90eXBlIHtcbiYjNDM7XHRSTVBPUFRfT1BfVkVSSUZZX0FORF9SRVBPUlRfU1RBVFVTLFxuJiM0MztcdFJNUE9QVF9PUF9SRVBPUlRfU1RBVFVTXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJtcG9wdF93cTtcbiYjNDM7c3RhdGljIHN0cnVjdCBkZWxheWVkX3dvcmsgcm1wb3B0X2RlbGF5ZWRfd29yaztcbiYjNDM7c3RhdGljIERFRklORV9NVVRFWChybXBvcHRfd3FfbXV0ZXgpO1xuJiM0MztcbiBzdGF0aWMgTElTVF9IRUFEKHNucF9sZWFrZWRfcGFnZXNfbGlzdCk7XG4gc3RhdGljIERFRklORV9TUElOTE9DSyhzbnBfbGVha2VkX3BhZ2VzX2xpc3RfbG9jayk7XG4gXG5AQCAtNTEzLDcgJiM0Mzs1MjYsNiBAQCBzdGF0aWMgdm9pZCBjbGVhcl9oc2F2ZV9wYSh2b2lkICphcmcpXG4gXG4gaW50IHNucF9wcmVwYXJlKHZvaWQpXG4ge1xuLVx0aW50IHJldDtcbiBcdHU2NCB2YWw7XG4gXG4gXHQvKlxuQEAgLTUyNiwxNCAmIzQzOzUzOCwxOCBAQCBpbnQgc25wX3ByZXBhcmUodm9pZClcbiBcbiBcdGNsZWFyX3JtcCgpO1xuIFxuLVx0Y3B1c19yZWFkX2xvY2soKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE5vIENQVSBtYXkgY29tZSBvbmxpbmUgd2l0aG91dCBTbnBFbiB3aGlsZSBTTlAgaXMgYWN0aXZlOyBkaXNhYmxlXG4mIzQzO1x0ICogaG90cGx1ZyBoZXJlIGFuZCByZS1lbmFibGUgaXQgaW4gc25wX3NodXRkb3duKCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y3B1X2hvdHBsdWdfZGlzYWJsZSgpO1xuIFxuIFx0aWYgKCFjcHVtYXNrX2VxdWFsKGNwdV9vbmxpbmVfbWFzaywgY3B1X3ByZXNlbnRfbWFzaykpIHtcbi1cdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRjcHVfaG90cGx1Z19lbmFibGUoKTtcbiBcdFx0cHJfd2FybihcJiMzNDtTTlAgaW5pdCBmYWlsZWQ6IG5vdCBhbGwgQ1BVcyBvbmxpbmUuICglKnBibCBvbmxpbmUgXHUwMDNjLVx1MDAzZSAlKnBibCBwcmVzZW50IG1hc2tzKS5cXG5cJiMzNDssXG4gXHRcdFx0Y3B1bWFza19wcl9hcmdzKGNwdV9vbmxpbmVfbWFzayksXG4gXHRcdFx0Y3B1bWFza19wcl9hcmdzKGNwdV9wcmVzZW50X21hc2spKTtcbi1cdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG4gXG4gXHR3YmludmRfb25fYWxsX2NwdXMoKTtcbkBAIC01NDgsMTQgJiM0Mzs1NjQsMzcgQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpXG4gXHQvKiBTTlBfSU5JVCByZXF1aXJlcyBNU1JfVk1fSFNBVkVfUEEgdG8gYmUgY2xlYXJlZCBvbiBhbGwgQ1BVcy4gKi9cbiBcdG9uX2VhY2hfY3B1KGNsZWFyX2hzYXZlX3BhLCBOVUxMLCAxKTtcbiBcbi1cdHJldCA9IDA7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcHJlcGFyZSwgXCYjMzQ7Y2NwXCYjMzQ7KTtcbiBcbi11bmxvY2s6XG4tXHRjcHVzX3JlYWRfdW5sb2NrKCk7XG4mIzQzO3N0YXRpYyB2b2lkIHNucF9jbGVhbnVwX3JtcG9wdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGNwdTtcbiBcbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJtcG9wdF93cV9tdXRleCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogcm1wb3B0X3dxIGlzIG5vbi1OVUxMIG9ubHkgYWZ0ZXIgUk1QT1BUIGhhcyBiZWVuIGZ1bGx5IHNldCB1cDogdGhlXG4mIzQzO1x0ICogd29ya3F1ZXVlIGFuZCBjcHVtYXNrcyBhcmUgYWxsb2NhdGVkIGFuZCB0aGUgUk1QT1BUX0JBU0UgTVNScyBhcmVcbiYjNDM7XHQgKiBwcm9ncmFtbWVkLiAgc25wX3NldHVwX3JtcG9wdCgpIHJlc2V0cyBpdCB0byBOVUxMIGlmIGFueSBvZiB0aG9zZVxuJiM0MztcdCAqIHN0ZXBzIGZhaWwsIHNvIGEgTlVMTCBybXBvcHRfd3EgbWVhbnMgbm90aGluZyB3YXMgc2V0IHVwIGFuZCB0aGVyZSBpc1xuJiM0MztcdCAqIG5vdGhpbmcgdG8gdGVhciBkb3duLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghcm1wb3B0X3dxKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yayk7XG4mIzQzO1x0ZGVzdHJveV93b3JrcXVldWUocm1wb3B0X3dxKTtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfY3B1KGNwdSwgcm1wb3B0X2NwdW1hc2spXG4mIzQzO1x0XHR3cm1zcnFfb25fY3B1KGNwdSwgTVNSX0FNRDY0X1JNUE9QVF9CQVNFLCAwKTtcbiYjNDM7XG4mIzQzO1x0ZnJlZV9jcHVtYXNrX3ZhcihybXBvcHRfY3B1bWFzayk7XG4mIzQzO1x0ZnJlZV9jcHVtYXNrX3ZhcihybXBvcHRfZm9sbG93ZXJfbWFzayk7XG4mIzQzO1x0cm1wb3B0X3BhX3N0YXJ0ID0gcm1wb3B0X3BhX2VuZCA9IDA7XG4mIzQzO1x0cm1wb3B0X3dxID0gTlVMTDtcbiB9XG4tRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcHJlcGFyZSwgXCYjMzQ7Y2NwXCYjMzQ7KTtcbiBcbiB2b2lkIHNucF9zaHV0ZG93bih2b2lkKVxuIHtcbkBAIC01NjUsMTEgJiM0Mzs2MDQsMjE0IEBAIHZvaWQgc25wX3NodXRkb3duKHZvaWQpXG4gXHRpZiAoc3lzY2ZnIFx1MDAyNiBNU1JfQU1ENjRfU1lTQ0ZHX1NOUF9FTilcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdC8qIERpc2FibGUgUk1QT1BUIHdoaWxlIENQVSBob3RwbHVnIGlzIGRpc2FibGVkLiAqL1xuJiM0MztcdHNucF9jbGVhbnVwX3JtcG9wdCgpO1xuJiM0MztcbiBcdGNsZWFyX3JtcCgpO1xuIFx0b25fZWFjaF9jcHUobWZkX3JlY29uZmlndXJlLCBOVUxMLCAxKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgZmlybXdhcmUgaGFzIGRpc2FibGVkIFNOUCAoU25wRW4gaXMgY2xlYXIpLCBzbyByZS1lbmFibGUgQ1BVXG4mIzQzO1x0ICogaG90cGx1Zy4gIEEgbGVnYWN5IFNOUCBzaHV0ZG93biByZXR1cm5zIGFib3ZlIHdpdGggU25wRW4gc3RpbGwgc2V0IGFuZFxuJiM0MztcdCAqIGxlYXZlcyBob3RwbHVnIGRpc2FibGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGNwdV9ob3RwbHVnX2VuYWJsZSgpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zaHV0ZG93biwgXCYjMzQ7Y2NwXCYjMzQ7KTtcbiBcbiYjNDM7c3RhdGljIGJvb2wgcm1wb3B0X2NhcGFibGUodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUE9QVCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJNUE9QVCBvcHRpbWl6YXRpb25zIHNraXAgUk1QIGNoZWNrcyBhdCAxR0IgZ3JhbnVsYXJpdHkgaWYgdGhpcyByYW5nZSBvZlxuJiM0MzsgKiBtZW1vcnkgZG9lcyBub3QgY29udGFpbiBhbnkgU05QIGd1ZXN0IG1lbW9yeS5cbiYjNDM7ICpcbiYjNDM7ICogQHBhIGlzIGEgc3lzdGVtIHBoeXNpY2FsIGFkZHJlc3M7IFJNUE9QVCBvcGVyYXRlcyBvbiB0aGUgY29udGFpbmluZyAxR0IuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBybXBvcHQodTY0IHBhKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHBhX3N0YXJ0ID0gQUxJR05fRE9XTihwYSwgU1pfMUcpO1xuJiM0MztcdGVudW0gcm1wb3B0X29wX3R5cGUgb3AgPSBSTVBPUFRfT1BfVkVSSUZZX0FORF9SRVBPUlRfU1RBVFVTO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJNUE9QVCAoRjIgMEYgMDEgRkMpOiBSQVggPSAxR0ItYWxpZ25lZCBTUEEsIFJDWCA9IG9wIHR5cGUsIENGIHNldCBpZlxuJiM0MztcdCAqIHRoZSByYW5nZSB3YXMgb3B0aW1pemVkIChyZXN1bHQgdW51c2VkIG9uIHRoaXMgcGF0aCkuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBCaW51dGlscyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBSTVBPUFQgbW5lbW9uaWMgeWV0LCBzbyB0aGUgaW5zdHJ1Y3Rpb25cbiYjNDM7XHQgKiBpcyBlbmNvZGVkIHdpdGggLmJ5dGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0YXNtIHZvbGF0aWxlKFwmIzM0Oy5ieXRlIDB4ZjIsIDB4MGYsIDB4MDEsIDB4ZmNcJiMzNDtcbiYjNDM7XHRcdCAgICAgOjogXCYjMzQ7YVwmIzM0OyAocGFfc3RhcnQpLCBcJiMzNDtjXCYjMzQ7IChvcClcbiYjNDM7XHRcdCAgICAgOiBcJiMzNDttZW1vcnlcJiMzNDssIFwmIzM0O2NjXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Lyogb25fZWFjaF9jcHUoKSBjYWxsYmFjazogb3B0aW1pemUgdGhlIHdob2xlIFJNUE9QVCByYW5nZSBvbiB0aGlzIENQVS4gKi9cbiYjNDM7c3RhdGljIHZvaWQgcm1wb3B0X3NjYW5fcmFuZ2Uodm9pZCAqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHBhO1xuJiM0MztcbiYjNDM7XHRmb3IgKHBhID0gcm1wb3B0X3BhX3N0YXJ0OyBwYSBcdTAwM2Mgcm1wb3B0X3BhX2VuZDsgcGEgJiM0Mzs9IFNaXzFHKVxuJiM0MztcdFx0cm1wb3B0KHBhKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcm1wb3B0X3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRpbnQgdGhpc19jcHU7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUk1QT1BUIHNjYW5zIHRoZSBSTVAgdGFibGUsIHN0b3JlcyB0aGUgcmVzdWx0IG9mIHRoZSBzY2FuIGluIHRoZVxuJiM0MztcdCAqIHJlc2VydmVkIHByb2Nlc3NvciBtZW1vcnkuIFRoZSBSTVAgc2NhbiBpcyB0aGUgbW9zdCBleHBlbnNpdmVcbiYjNDM7XHQgKiBwYXJ0LiBJZiBhIHNlY29uZCBSTVBPUFQgb2NjdXJzLCBpdCBjYW4gc2tpcCB0aGUgZXhwZW5zaXZlIHNjYW5cbiYjNDM7XHQgKiBpZiB0aGV5IGNhbiBzZWUgYSBjYWNoZWQgcmVzdWx0IGluIHRoZSByZXNlcnZlZCBwcm9jZXNzb3IgbWVtb3J5LlxuJiM0MztcdCAqXG4mIzQzO1x0ICogUnVuIFJNUE9QVCBvbiBvbmUgQ1BVIGZpcnN0ICh0aGUgbGVhZGVyKSwgdGhlbiBvbiBldmVyeSBvdGhlciBwcmltYXJ5XG4mIzQzO1x0ICogdGhyZWFkICh0aGUgZm9sbG93ZXJzKS4gIEEgZm9sbG93ZXIgc2tpcHMgdGhlIGV4cGVuc2l2ZSBSTVAgc2NhbiBieVxuJiM0MztcdCAqIHJldXNpbmcgdGhlIGNhY2hlZCBzY2FuIHJlc3VsdHMgdGhlIGxlYWRlciBwcm9kdWNlZC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIG1pZ3JhdGVfZGlzYWJsZSgpIHBpbnMgdGhpcyB3b3JrIHRvIHRoZSBjdXJyZW50IENQVSBzbyBpdCBzdGF5cyB0aGVcbiYjNDM7XHQgKiBsZWFkZXIgZm9yIHRoZSB3aG9sZSBsZWFkZXIgbG9vcDogdGhpc19jcHUgcmVtYWlucyB2YWxpZCBhbmQgdGhlXG4mIzQzO1x0ICogUk1QT1BUIGluc3RydWN0aW9uIHJ1bnMgb24gaXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0bWlncmF0ZV9kaXNhYmxlKCk7XG4mIzQzO1x0dGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XG4mIzQzO1xuJiM0MztcdGNwdW1hc2tfYW5kbm90KHJtcG9wdF9mb2xsb3dlcl9tYXNrLCBybXBvcHRfY3B1bWFzayxcbiYjNDM7XHRcdCAgICAgICB0b3BvbG9neV9zaWJsaW5nX2NwdW1hc2sodGhpc19jcHUpKTtcbiYjNDM7XG4mIzQzO1x0cm1wb3B0X3NjYW5fcmFuZ2UoTlVMTCk7XG4mIzQzO1xuJiM0MztcdG1pZ3JhdGVfZW5hYmxlKCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRm9sbG93ZXJzOiBvbmUgSVBJIHBlciByZW1haW5pbmcgY29yZSwgZWFjaCBvcHRpbWl6aW5nIHRoZSB3aG9sZVxuJiM0MztcdCAqIHJhbmdlLiAgRWFjaCBydW5zIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCwgYnV0IG9ubHkgaXNzdWVzIGNhY2hlLWhpdFxuJiM0MztcdCAqIFJNUE9QVHMgKHRoZSBsZWFkZXIgcG9wdWxhdGVkIHRoZSBzY2FuIGNhY2hlIGFib3ZlKSwgc28gdGhlIHdpbmRvdyBpc1xuJiM0MztcdCAqIHNob3J0LiAgY3B1c19yZWFkX2xvY2soKSBpcyBpbnRlbnRpb25hbGx5IG5vdCBoZWxkOiBDUFUgaG90cGx1ZyBpc1xuJiM0MztcdCAqIGRpc2FibGVkIHRoZSBlbnRpcmUgdGltZSBTTlAgaXMgYWN0aXZlIChzZWUgc25wX3ByZXBhcmUoKSksIGFuZCB0aGlzXG4mIzQzO1x0ICogd29yayBvbmx5IHJ1bnMgd2hpbGUgU05QIGlzIGFjdGl2ZSwgc28gdGhlIGZvbGxvd2VyIHNldCBzdGF5cyB2YWxpZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRvbl9lYWNoX2NwdV9tYXNrKHJtcG9wdF9mb2xsb3dlcl9tYXNrLCBybXBvcHRfc2Nhbl9yYW5nZSwgTlVMTCwgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIERlbGF5LCBpbiBtaWxsaXNlY29uZHMsIGJlZm9yZSB0aGUgUk1QIHJlLW9wdGltaXphdGlvbiBwYXNzIHJ1bnMgYWZ0ZXIgYW5cbiYjNDM7ICogU05QIGd1ZXN0IGlzIHRvcm4gZG93bi4gIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKSByZS1hcm1zIHRoZSBkZWxheWVkIHdvcmtcbiYjNDM7ICogd2l0aCBtb2RfZGVsYXllZF93b3JrKCkgb24gZWFjaCB0ZWFyZG93biwgc28gdGhlIHBhc3MgZmlyZXMgdGhpcyBsb25nIGFmdGVyXG4mIzQzOyAqIHRoZSBsYXN0IHRlYXJkb3duLiAgVGhpcyBjb2FsZXNjZXMgYSBidXJzdCBvZiB0ZWFyZG93bnMgaW50byBhIHNpbmdsZSBzY2FuXG4mIzQzOyAqIGFuZCBnaXZlcyBlYWNoIGd1ZXN0JiMzOTtzIHBhZ2VzIHRpbWUgdG8gYmUgY29udmVydGVkIGJhY2sgdG8gdGhlIHNoYXJlZCxcbiYjNDM7ICogaHlwZXJ2aXNvci1vd25lZCBzdGF0ZSBiZWZvcmUgdGhlIHNjYW4gcmUtb3B0aW1pemVzIHRoZWlyIDFHQiByZWdpb25zLiAgVGhlXG4mIzQzOyAqIDEwIHNlY29uZCB2YWx1ZSBpcyBhIGhldXJpc3RpYyB0cmFkaW5nIHJlLW9wdGltaXphdGlvbiBsYXRlbmN5IGFnYWluc3RcbiYjNDM7ICogc2Nhbm5pbmcgdG9vIGVhZ2VybHkuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFJNUE9QVF9XT1JLX1RJTUVPVVRcdCgxMCAqIE1TRUNfUEVSX1NFQylcbiYjNDM7XG4mIzQzO3ZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFybXBvcHRfY2FwYWJsZSgpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2cm1wb3B0X3dxX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFybXBvcHRfd3EpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdG1vZF9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLFxuJiM0MztcdFx0XHQgbXNlY3NfdG9famlmZmllcyhSTVBPUFRfV09SS19USU1FT1VUKSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcm1wb3B0X2FsbF9waHlzbWVtLCBcJiMzNDtrdm0tYW1kXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO3ZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHJtcG9wdF9iYXNlO1xuJiM0MztcdGludCBjcHU7XG4mIzQzO1xuJiM0MztcdGlmICghcm1wb3B0X2NhcGFibGUoKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJtcG9wdF93cV9tdXRleCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogT24gcmUtaW5pdGlhbGl6YXRpb24gYWZ0ZXIgYSBsZWdhY3kgU05QIHNodXRkb3duIChTTlBfU0hVVERPV05fRVhcbiYjNDM7XHQgKiB3aXRoIHg4Nl9zbnBfc2h1dGRvd249MCksIHNucF9zaHV0ZG93bigpIGFuZCB0aHVzIHNucF9jbGVhbnVwX3JtcG9wdCgpXG4mIzQzO1x0ICogYXJlIHNraXBwZWQsIHNvIHRoZSB3b3JrcXVldWUsIGRlbGF5ZWQgd29yaywgY3B1bWFzayBhbmQgcGVyLUNQVVxuJiM0MztcdCAqIFJNUE9QVF9CQVNFIE1TUnMgYXJlIHN0aWxsIHNldCB1cCBhbmQgdmFsaWQgKFNucEVuIHN0YXllZCBzZXQgYW5kXG4mIzQzO1x0ICogQ1BVIGhvdHBsdWcgc3RheWVkIGRpc2FibGVkKS4gIFJhdGhlciB0aGFuIHJlLWRvaW5nIHRoZSBzZXR1cCwgd2hpY2hcbiYjNDM7XHQgKiB3b3VsZCBsZWFrIHRoZSBleGlzdGluZyBzdGF0ZSwganVzdCByZS1xdWV1ZSB0aGUgb3B0aW1pemF0aW9uIHBhc3NcbiYjNDM7XHQgKiB0byByZS1vcHRpbWl6ZSBhbnkgbWVtb3J5IHRoZSBwcmV2aW91cyBTTlAgc2Vzc2lvbiBkZS1vcHRpbWl6ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJtcG9wdF93cSkge1xuJiM0MztcdFx0cXVldWVfZGVsYXllZF93b3JrKHJtcG9wdF93cSwgXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENyZWF0ZSBhbiBSTVBPUFQtc3BlY2lmaWMgd29ya3F1ZXVlIHRvIGF2b2lkIHNjaGVkdWxpbmdcbiYjNDM7XHQgKiBSTVBPUFQgd29ya2l0ZW0gb24gdGhlIGdsb2JhbCBzeXN0ZW0gd29ya3F1ZXVlLlxuJiM0MztcdCAqL1xuJiM0MztcdHJtcG9wdF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDtybXBvcHRfd3FcJiMzNDssIFdRX1VOQk9VTkQsIDEpO1xuJiM0MztcdGlmICghcm1wb3B0X3dxKSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIFJNUE9QVCB3b3JrcXVldWVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgcm1wb3B0X3dvcmtfaGFuZGxlcik7XG4mIzQzO1xuJiM0MztcdGlmICghemFsbG9jX2NwdW1hc2tfdmFyKFx1MDAyNnJtcG9wdF9jcHVtYXNrLCBHRlBfS0VSTkVMKSkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBSTVBPUFQgY3B1bWFza1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRkZXN0cm95X3dvcmtxdWV1ZShybXBvcHRfd3EpO1xuJiM0MztcdFx0cm1wb3B0X3dxID0gTlVMTDtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghemFsbG9jX2NwdW1hc2tfdmFyKFx1MDAyNnJtcG9wdF9mb2xsb3dlcl9tYXNrLCBHRlBfS0VSTkVMKSkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBSTVBPUFQgZm9sbG93ZXIgY3B1bWFza1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRmcmVlX2NwdW1hc2tfdmFyKHJtcG9wdF9jcHVtYXNrKTtcbiYjNDM7XHRcdGRlc3Ryb3lfd29ya3F1ZXVlKHJtcG9wdF93cSk7XG4mIzQzO1x0XHRybXBvcHRfd3EgPSBOVUxMO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgUk1QT1BUX0JBU0UgTVNSIGlzIHBlci1jb3JlLCBzbyBvbmx5IG9uZSB0aHJlYWQgcGVyIGNvcmUgbmVlZHNcbiYjNDM7XHQgKiB0byBzZXQgdXAgdGhlIFJNUE9QVF9CQVNFIE1TUi4gIEFsbCBwcmltYXJ5IHRocmVhZHMgYXJlIG9ubGluZSxcbiYjNDM7XHQgKiBvdGhlcndpc2UgU05QIHdvdWxkIG5vdCBoYXZlIGJlZW4gZW5hYmxlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSlcbiYjNDM7XHRcdGlmICh0b3BvbG9neV9pc19wcmltYXJ5X3RocmVhZChjcHUpKVxuJiM0MztcdFx0XHRjcHVtYXNrX3NldF9jcHUoY3B1LCBybXBvcHRfY3B1bWFzayk7XG4mIzQzO1xuJiM0MztcdHJtcG9wdF9wYV9zdGFydCA9IEFMSUdOX0RPV04oUEZOX1BIWVMobWluX2xvd19wZm4pLCBTWl8xRyk7XG4mIzQzO1x0cm1wb3B0X2Jhc2UgPSBybXBvcHRfcGFfc3RhcnQgfCBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQZXItQ1BVIFJNUE9QVCB0YWJsZXMgY292ZXIgYXQgbW9zdCAyIFRCLiAgUHJvZ3JhbSBlYWNoIGNvcmUmIzM5O3NcbiYjNDM7XHQgKiBSTVBPUFRfQkFTRSB3aXRoIHRoZSBzdGFydCBvZiBSQU0gdG8gb3B0aW1pemUgdXAgdG8gMiBUQi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3JfZWFjaF9jcHUoY3B1LCBybXBvcHRfY3B1bWFzaylcbiYjNDM7XHRcdHdybXNycV9vbl9jcHUoY3B1LCBNU1JfQU1ENjRfUk1QT1BUX0JBU0UsIHJtcG9wdF9iYXNlKTtcbiYjNDM7XG4mIzQzO1x0cm1wb3B0X3BhX2VuZCA9IEFMSUdOKFBGTl9QSFlTKG1heF9wZm4pLCBTWl8xRyk7XG4mIzQzO1xuJiM0MztcdC8qIExpbWl0IG1lbW9yeSBzY2FubmluZyB0byAyVEIgb2YgUkFNICovXG4mIzQzO1x0aWYgKChybXBvcHRfcGFfZW5kIC0gcm1wb3B0X3BhX3N0YXJ0KSBcdTAwM2UgU1pfMlQpIHtcbiYjNDM7XHRcdHByX2luZm8oXCYjMzQ7Uk1QT1BUIGNvdmVyYWdlIGxpbWl0ZWQgdG8gMlRCOyBtZW1vcnkgYWJvdmUgMHglbGx4IG5vdCBvcHRpbWl6ZWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHJtcG9wdF9wYV9zdGFydCAmIzQzOyBTWl8yVCk7XG4mIzQzO1x0XHRybXBvcHRfcGFfZW5kID0gcm1wb3B0X3BhX3N0YXJ0ICYjNDM7IFNaXzJUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBPbmNlIGFsbCBwZXItQ1BVIFJNUE9QVCB0YWJsZXMgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQsIGVuYWJsZSBSTVBPUFRcbiYjNDM7XHQgKiBvcHRpbWl6YXRpb25zIG9uIGFsbCBwaHlzaWNhbCBtZW1vcnkuXG4mIzQzO1x0ICovXG4mIzQzO1x0cXVldWVfZGVsYXllZF93b3JrKHJtcG9wdF93cSwgXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7XG4mIzQzO1xuJiM0MztcdHByX2luZm8oXCYjMzQ7Uk1QT1BUIG9wdGltaXphdGlvbnMgZW5hYmxlZFxcblwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2V0dXBfcm1wb3B0LCBcJiMzNDtjY3BcJiMzNDspO1xuJiM0MztcbiAvKlxuICAqIERvIHRoZSBuZWNlc3NhcnkgcHJlcGFyYXRpb25zIHdoaWNoIGFyZSB2ZXJpZmllZCBieSB0aGUgZmlybXdhcmUgYXNcbiAgKiBkZXNjcmliZWQgaW4gdGhlIFNOUF9JTklUX0VYIGZpcm13YXJlIGNvbW1hbmQgZGVzY3JpcHRpb24gaW4gdGhlIFNOUFxuQEAgLTU3Nyw2ICYjNDM7ODE5LDggQEAgRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2h1dGRvd24sIFwmIzM0O2NjcFwmIzM0Oyk7XG4gICovXG4gaW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxuIHtcbiYjNDM7XHR1NjQgdmFsO1xuJiM0MztcbiBcdGlmIChXQVJOX09OX09OQ0UoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpKVxuIFx0XHRyZXR1cm4gLUVOT1NZUztcbiBcbkBAIC01ODYsNiAmIzQzOzgzMCwxNSBAQCBpbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpXG4gXHRpZiAoIXNldHVwX3JtcHRhYmxlKCkpXG4gXHRcdHJldHVybiAtRU5PU1lTO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogT24gYSBrZXhlYyBib290IFNOUCBtYXkgYWxyZWFkeSBiZSBlbmFibGVkIChsZWdhY3kgZmlybXdhcmUgbGVhdmVzXG4mIzQzO1x0ICogU25wRW4gc2V0IGFjcm9zcyBzaHV0ZG93biksIGluIHdoaWNoIGNhc2Ugc25wX3ByZXBhcmUoKSBiYWlscyB3aXRob3V0XG4mIzQzO1x0ICogZGlzYWJsaW5nIENQVSBob3RwbHVnLCBzbyBkaXNhYmxlIGl0IGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmRtc3JxKE1TUl9BTUQ2NF9TWVNDRkcsIHZhbCk7XG4mIzQzO1x0aWYgKHZhbCBcdTAwMjYgTVNSX0FNRDY0X1NZU0NGR19TTlBfRU4pXG4mIzQzO1x0XHRjcHVfaG90cGx1Z19kaXNhYmxlKCk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIFNldHRpbmcgY3Jhc2hfa2V4ZWNfcG9zdF9ub3RpZmllcnMgdG8gJiMzOTt0cnVlJiMzOTsgdG8gZW5zdXJlIHRoYXQgU05QIHBhbmljXG4gXHQgKiBub3RpZmllciBpcyBpbnZva2VkIHRvIGRvIFNOUCBJT01NVSBzaHV0ZG93biBiZWZvcmUga2R1bXAuXG5AQCAtNjgzLDEzICYjNDM7OTM2LDIxIEBAIHN0YXRpYyBib29sIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKHZvaWQpXG4gXG4gYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKVxuIHtcbi1cdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFR01FTlRFRF9STVApKVxuJiM0MztcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFR01FTlRFRF9STVApKSB7XG4gXHRcdHJkbXNycShNU1JfQU1ENjRfUk1QX0NGRywgcm1wX2NmZyk7XG4gXG4tXHRpZiAocm1wX2NmZyBcdTAwMjYgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRClcbi1cdFx0cmV0dXJuIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKCk7XG4tXHRlbHNlXG4tXHRcdHJldHVybiBwcm9iZV9jb250aWd1b3VzX3JtcHRhYmxlX2luZm8oKTtcbiYjNDM7XHRcdGlmIChybXBfY2ZnIFx1MDAyNiBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEKVxuJiM0MztcdFx0XHRyZXR1cm4gcHJvYmVfc2VnbWVudGVkX3JtcHRhYmxlX2luZm8oKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU2VnbWVudGVkIFJNUCBpcyBlaXRoZXIgbm90IHN1cHBvcnRlZCBvbiB0aGUgcGxhdGZvcm0gb3IgaXNcbiYjNDM7XHQgKiBkaXNhYmxlZCBieSB0aGUgZmlybXdhcmUuICBSTVBPUFQgaXMgbm90IHN1cHBvcnRlZCB3aXRob3V0XG4mIzQzO1x0ICogc2VnbWVudGVkIFJNUC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1JNUE9QVCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwcm9iZV9jb250aWd1b3VzX3JtcHRhYmxlX2luZm8oKTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jIGIvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY1xuaW5kZXggY2E0NzNjYTE5OGI4MS4uZGExMmRkZjFmNDEyNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcbkBAIC0xNTEwLDYgJiM0MzsxNTEwLDggQEAgc3RhdGljIGludCBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoaW50ICplcnJvciwgdW5zaWduZWQgaW50IG1heF9zbnBfYXNpZClcbiBcbiBcdHNldl9lc190bXJfc2l6ZSA9IFNOUF9UTVJfU0laRTtcbiBcbiYjNDM7XHRzbnBfc2V0dXBfcm1wb3B0KCk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBBTUQgUk1QT1BUIGluc3RydWN0aW9uLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBBTUQgU0VWLVNOUCAoU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAtIFNlY3VyZSBOZXN0ZWQgUGFnaW5nKSBob3N0IHN1cHBvcnQuIEFsbCB0aGUgbW9kaWZpZWQgYW5kIGFkZGVkIGZ1bmN0aW9ucyAoZS5nLiwgc25wX3JtcG9wdF9hbGxfcGh5c21lbSwgc25wX3NldHVwX3JtcG9wdCwgc25wX3ByZXBhcmUsIHNucF9zaHV0ZG93bikgYXJlIGd1YXJkZWQgYnkgY2hlY2tzIGZvciBDQ19BVFRSX0hPU1RfU0VWX1NOUCBvciBleHBsaWNpdGx5IHJlcXVpcmUgdGhlIGFic2VuY2Ugb2YgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUi4gU2luY2Ugc3l6a2FsbGVyIHJ1bnMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChHQ0UvUUVNVSkgd2hlcmUgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUiBpcyBzZXQgYW5kIFNFVi1TTlAgaG9zdCBoYXJkd2FyZSBmZWF0dXJlcyBhcmUgbm90IGVtdWxhdGVkLCB0aGlzIGNvZGUgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0YmYwNzYwMzE1ZmY0NTRlZDYyNWE0MTRjNjc3YjFkZGJmODAzYjRmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMjM6MzI6NTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaAppbmRleCAzZDA5NDBhM2I5ZjM3Li5kYmNjZGU5ZWU1Y2Q1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgKQEAgLTc2LDcgJiM0Mzs3Niw3IEBACiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0s4CQkJKCAzKjMyJiM0MzsgNCkgLyogT3B0ZXJvbiwgQXRobG9uNjQgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfWkVONQkJKCAzKjMyJiM0MzsgNSkgLyogQ1BVIGJhc2VkIG9uIFplbjUgbWljcm9hcmNoaXRlY3R1cmUgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfWkVONgkJKCAzKjMyJiM0MzsgNikgLyogQ1BVIGJhc2VkIG9uIFplbjYgbWljcm9hcmNoaXRlY3R1cmUgKi8KLS8qIEZyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDMqMzImIzQzOyA3KSAqLwomIzQzOyNkZWZpbmUgWDg2X0ZFQVRVUkVfUk1QT1BUCQkoIDMqMzImIzQzOyA3KSAvKiBTdXBwb3J0IGZvciBBTUQgUk1QT1BUIGluc3RydWN0aW9uICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQwkoIDMqMzImIzQzOyA4KSAvKiAmIzM0O2NvbnN0YW50X3RzYyYjMzQ7IFRTQyB0aWNrcyBhdCBhIGNvbnN0YW50IHJhdGUgKi8KIC8qIGZyZWU6IHdhcyAjZGVmaW5lIFg4Nl9GRUFUVVJFX1VQCSggMyozMiYjNDM7IDkpICogJiMzNDt1cCYjMzQ7IFNNUCBrZXJuZWwgcnVubmluZyBvbiBVUCAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9BUlQJCQkoIDMqMzImIzQzOzEwKSAvKiAmIzM0O2FydCYjMzQ7IEFsd2F5cyBydW5uaW5nIHRpbWVyIChBUlQpICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCmluZGV4IDE4YzRiZTc1ZTkyNzEuLmQyY2IwYTdjZDBhMmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCkBAIC03NjEsNiAmIzQzOzc2MSw5IEBACiAjZGVmaW5lIE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRURfQklUCTAKICNkZWZpbmUgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRAlCSVRfVUxMKE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRURfQklUKQogI2RlZmluZSBNU1JfQU1ENjRfUk1QX1NFR01FTlRfU0hJRlQoeCkJKCgoeCkgJmFtcDsgR0VOTUFTS19VTEwoMTMsIDgpKSAmZ3Q7Jmd0OyA4KQomIzQzOyNkZWZpbmUgTVNSX0FNRDY0X1JNUE9QVF9CQVNFCQkweGMwMDEwMTM5CiYjNDM7I2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRV9CSVQJMAomIzQzOyNkZWZpbmUgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEUJCUJJVF9VTEwoTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVfQklUKQogCiAjZGVmaW5lIE1TUl9TVlNNX0NBQQkJCTB4YzAwMWYwMDAKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaAppbmRleCA1OTRjZmExOWNiZDRiLi4wOWIxYzVkMzM3OTAyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaApAQCAtNjYyLDYgJiM0Mzs2NjIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc25wX2xlYWtfcGFnZXModTY0IHBmbiwgdW5zaWduZWQgaW50IHBhZ2VzKQogCV9fc25wX2xlYWtfcGFnZXMocGZuLCBwYWdlcywgdHJ1ZSk7CiB9CiBpbnQgc25wX3ByZXBhcmUodm9pZCk7CiYjNDM7dm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpOwomIzQzO3ZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKTsKIHZvaWQgc25wX3NodXRkb3duKHZvaWQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKSB7IHJldHVybiBmYWxzZTsgfQpAQCAtNjgwLDYgJiM0Mzs2ODIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc25wX2xlYWtfcGFnZXModTY0IHBmbiwgdW5zaWduZWQgaW50IG5wYWdlcykge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBrZHVtcF9zZXZfY2FsbGJhY2sodm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgc25wX2ZpeHVwX2U4MjBfdGFibGVzKHZvaWQpIHt9CiBzdGF0aWMgaW5saW5lIGludCBzbnBfcHJlcGFyZSh2b2lkKSB7IHJldHVybiAtRU5PREVWOyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCkge30KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKSB7fQogc3RhdGljIGlubGluZSB2b2lkIHNucF9zaHV0ZG93bih2b2lkKSB7fQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jCmluZGV4IDkzNzEyOWNlNmE5NjQuLjAyMWMwYmYyMmRlMjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYwpAQCAtNjcsNiAmIzQzOzY3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVpZF9iaXQgY3B1aWRfYml0c1tdID0gewogCXsgWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMiwJCUNQVUlEX0VBWCwgIDAsIDB4ODAwMDAwMjIsIDAgfSwKIAl7IFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIsCQlDUFVJRF9FQVgsICAxLCAweDgwMDAwMDIyLCAwIH0sCiAJeyBYODZfRkVBVFVSRV9BTURfTEJSX1BNQ19GUkVFWkUsCUNQVUlEX0VBWCwgIDIsIDB4ODAwMDAwMjIsIDAgfSwKJiM0MzsJeyBYODZfRkVBVFVSRV9STVBPUFQsCQkJQ1BVSURfRURYLCAgMCwgMHg4MDAwMDAyNSwgMCB9LAogCXsgWDg2X0ZFQVRVUkVfQU1EX0hUUl9DT1JFUywJCUNQVUlEX0VBWCwgMzAsIDB4ODAwMDAwMjYsIDAgfSwKIAl7IDAsIDAsIDAsIDAsIDAgfQogfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCmluZGV4IDQyNzIyOTM0Nzg3NjYuLmM1NzQ4NDliMTU4NzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwpAQCAtMjk5Miw2ICYjNDM7Mjk5MiwxNiBAQCB2b2lkIHNldl92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSkKIAkJICovCiAJCWlmIChzbnBfZGVjb21taXNzaW9uX2NvbnRleHQoa3ZtKSkKIAkJCXJldHVybjsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBQZXJmb3JtIFJNUCBvcHRpbWl6YXRpb25zIG9uIG1lbW9yeSBmcmVlZCBieSB0ZXJtaW5hdGluZwomIzQzOwkJICogZ3Vlc3RzLiAgVGhlIHNjYW4gaXMgZGVmZXJyZWQsIHNvIGl0IG5vcm1hbGx5IHJ1bnMgYWZ0ZXIKJiM0MzsJCSAqIHNldl9nbWVtX2ludmFsaWRhdGUoKSBoYXMgY29udmVydGVkIHRoaXMgZ3Vlc3QmIzM5O3MgcGFnZXMgYmFjayB0bwomIzQzOwkJICogc2hhcmVkLCBhbmQgcGlja3MgdGhlbSB1cCB0aGVuLiAgQSB2ZXJ5IGxhcmdlIGd1ZXN0IHdob3NlCiYjNDM7CQkgKiBjb252ZXJzaW9uIGhhcyBub3QgZmluaXNoZWQgYnkgdGhlbiBpcyBwaWNrZWQgdXAgYnkgYSBsYXRlcgomIzQzOwkJICogdGVhcmRvd24mIzM5O3Mgc2Nhbi4KJiM0MzsJCSAqLwomIzQzOwkJc25wX3JtcG9wdF9hbGxfcGh5c21lbSgpOwogCX0gZWxzZSB7CiAJCXNldl91bmJpbmRfYXNpZChrdm0sIHNldi0mZ3Q7aGFuZGxlKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYyBiL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jCmluZGV4IGNmZjI4NWQ4YWQ4ZTMuLjAzNGVkNTQ3YWMyODEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jCkBAIC0xOSw2ICYjNDM7MTksNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2lvbW11LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYW1kLWlvbW11LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbm9zcGVjLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dvcmtxdWV1ZS5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7YXNtL3Nldi5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9wcm9jZXNzb3IuaCZndDsKQEAgLTEyNCw2ICYjNDM7MTI1LDE4IEBAIHN0YXRpYyB2b2lkICpybXBfYm9va2tlZXBpbmcgX19yb19hZnRlcl9pbml0OwogCiBzdGF0aWMgdTY0IHByb2JlZF9ybXBfYmFzZSwgcHJvYmVkX3JtcF9zaXplOwogCiYjNDM7c3RhdGljIGNwdW1hc2tfdmFyX3Qgcm1wb3B0X2NwdW1hc2ssIHJtcG9wdF9mb2xsb3dlcl9tYXNrOwomIzQzO3N0YXRpYyB1NjQgcm1wb3B0X3BhX3N0YXJ0LCBybXBvcHRfcGFfZW5kOwomIzQzOwomIzQzO2VudW0gcm1wb3B0X29wX3R5cGUgewomIzQzOwlSTVBPUFRfT1BfVkVSSUZZX0FORF9SRVBPUlRfU1RBVFVTLAomIzQzOwlSTVBPUFRfT1BfUkVQT1JUX1NUQVRVUwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpybXBvcHRfd3E7CiYjNDM7c3RhdGljIHN0cnVjdCBkZWxheWVkX3dvcmsgcm1wb3B0X2RlbGF5ZWRfd29yazsKJiM0MztzdGF0aWMgREVGSU5FX01VVEVYKHJtcG9wdF93cV9tdXRleCk7CiYjNDM7CiBzdGF0aWMgTElTVF9IRUFEKHNucF9sZWFrZWRfcGFnZXNfbGlzdCk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNucF9sZWFrZWRfcGFnZXNfbGlzdF9sb2NrKTsKIApAQCAtNTEzLDcgJiM0Mzs1MjYsNiBAQCBzdGF0aWMgdm9pZCBjbGVhcl9oc2F2ZV9wYSh2b2lkICphcmcpCiAKIGludCBzbnBfcHJlcGFyZSh2b2lkKQogewotCWludCByZXQ7CiAJdTY0IHZhbDsKIAogCS8qCkBAIC01MjYsMTQgJiM0Mzs1MzgsMTggQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpCiAKIAljbGVhcl9ybXAoKTsKIAotCWNwdXNfcmVhZF9sb2NrKCk7CiYjNDM7CS8qCiYjNDM7CSAqIE5vIENQVSBtYXkgY29tZSBvbmxpbmUgd2l0aG91dCBTbnBFbiB3aGlsZSBTTlAgaXMgYWN0aXZlOyBkaXNhYmxlCiYjNDM7CSAqIGhvdHBsdWcgaGVyZSBhbmQgcmUtZW5hYmxlIGl0IGluIHNucF9zaHV0ZG93bigpLgomIzQzOwkgKi8KJiM0MzsJY3B1X2hvdHBsdWdfZGlzYWJsZSgpOwogCiAJaWYgKCFjcHVtYXNrX2VxdWFsKGNwdV9vbmxpbmVfbWFzaywgY3B1X3ByZXNlbnRfbWFzaykpIHsKLQkJcmV0ID0gLUVPUE5PVFNVUFA7CiYjNDM7CQljcHVfaG90cGx1Z19lbmFibGUoKTsKIAkJcHJfd2FybigmIzM0O1NOUCBpbml0IGZhaWxlZDogbm90IGFsbCBDUFVzIG9ubGluZS4gKCUqcGJsIG9ubGluZSAmbHQ7LSZndDsgJSpwYmwgcHJlc2VudCBtYXNrcykuXG4mIzM0OywKIAkJCWNwdW1hc2tfcHJfYXJncyhjcHVfb25saW5lX21hc2spLAogCQkJY3B1bWFza19wcl9hcmdzKGNwdV9wcmVzZW50X21hc2spKTsKLQkJZ290byB1bmxvY2s7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCiAJd2JpbnZkX29uX2FsbF9jcHVzKCk7CkBAIC01NDgsMTQgJiM0Mzs1NjQsMzcgQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpCiAJLyogU05QX0lOSVQgcmVxdWlyZXMgTVNSX1ZNX0hTQVZFX1BBIHRvIGJlIGNsZWFyZWQgb24gYWxsIENQVXMuICovCiAJb25fZWFjaF9jcHUoY2xlYXJfaHNhdmVfcGEsIE5VTEwsIDEpOwogCi0JcmV0ID0gMDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3ByZXBhcmUsICYjMzQ7Y2NwJiMzNDspOwogCi11bmxvY2s6Ci0JY3B1c19yZWFkX3VubG9jaygpOwomIzQzO3N0YXRpYyB2b2lkIHNucF9jbGVhbnVwX3JtcG9wdCh2b2lkKQomIzQzO3sKJiM0MzsJaW50IGNwdTsKIAotCXJldHVybiByZXQ7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3JtcG9wdF93cV9tdXRleCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIHJtcG9wdF93cSBpcyBub24tTlVMTCBvbmx5IGFmdGVyIFJNUE9QVCBoYXMgYmVlbiBmdWxseSBzZXQgdXA6IHRoZQomIzQzOwkgKiB3b3JrcXVldWUgYW5kIGNwdW1hc2tzIGFyZSBhbGxvY2F0ZWQgYW5kIHRoZSBSTVBPUFRfQkFTRSBNU1JzIGFyZQomIzQzOwkgKiBwcm9ncmFtbWVkLiAgc25wX3NldHVwX3JtcG9wdCgpIHJlc2V0cyBpdCB0byBOVUxMIGlmIGFueSBvZiB0aG9zZQomIzQzOwkgKiBzdGVwcyBmYWlsLCBzbyBhIE5VTEwgcm1wb3B0X3dxIG1lYW5zIG5vdGhpbmcgd2FzIHNldCB1cCBhbmQgdGhlcmUgaXMKJiM0MzsJICogbm90aGluZyB0byB0ZWFyIGRvd24uCiYjNDM7CSAqLwomIzQzOwlpZiAoIXJtcG9wdF93cSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhbXA7cm1wb3B0X2RlbGF5ZWRfd29yayk7CiYjNDM7CWRlc3Ryb3lfd29ya3F1ZXVlKHJtcG9wdF93cSk7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX2NwdShjcHUsIHJtcG9wdF9jcHVtYXNrKQomIzQzOwkJd3Jtc3JxX29uX2NwdShjcHUsIE1TUl9BTUQ2NF9STVBPUFRfQkFTRSwgMCk7CiYjNDM7CiYjNDM7CWZyZWVfY3B1bWFza192YXIocm1wb3B0X2NwdW1hc2spOwomIzQzOwlmcmVlX2NwdW1hc2tfdmFyKHJtcG9wdF9mb2xsb3dlcl9tYXNrKTsKJiM0MzsJcm1wb3B0X3BhX3N0YXJ0ID0gcm1wb3B0X3BhX2VuZCA9IDA7CiYjNDM7CXJtcG9wdF93cSA9IE5VTEw7CiB9Ci1FWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9wcmVwYXJlLCAmIzM0O2NjcCYjMzQ7KTsKIAogdm9pZCBzbnBfc2h1dGRvd24odm9pZCkKIHsKQEAgLTU2NSwxMSAmIzQzOzYwNCwyMTQgQEAgdm9pZCBzbnBfc2h1dGRvd24odm9pZCkKIAlpZiAoc3lzY2ZnICZhbXA7IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKQogCQlyZXR1cm47CiAKJiM0MzsJLyogRGlzYWJsZSBSTVBPUFQgd2hpbGUgQ1BVIGhvdHBsdWcgaXMgZGlzYWJsZWQuICovCiYjNDM7CXNucF9jbGVhbnVwX3JtcG9wdCgpOwomIzQzOwogCWNsZWFyX3JtcCgpOwogCW9uX2VhY2hfY3B1KG1mZF9yZWNvbmZpZ3VyZSwgTlVMTCwgMSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBmaXJtd2FyZSBoYXMgZGlzYWJsZWQgU05QIChTbnBFbiBpcyBjbGVhciksIHNvIHJlLWVuYWJsZSBDUFUKJiM0MzsJICogaG90cGx1Zy4gIEEgbGVnYWN5IFNOUCBzaHV0ZG93biByZXR1cm5zIGFib3ZlIHdpdGggU25wRW4gc3RpbGwgc2V0IGFuZAomIzQzOwkgKiBsZWF2ZXMgaG90cGx1ZyBkaXNhYmxlZC4KJiM0MzsJICovCiYjNDM7CWNwdV9ob3RwbHVnX2VuYWJsZSgpOwogfQogRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2h1dGRvd24sICYjMzQ7Y2NwJiMzNDspOwogCiYjNDM7c3RhdGljIGJvb2wgcm1wb3B0X2NhcGFibGUodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUE9QVCkgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSTVBPUFQgb3B0aW1pemF0aW9ucyBza2lwIFJNUCBjaGVja3MgYXQgMUdCIGdyYW51bGFyaXR5IGlmIHRoaXMgcmFuZ2Ugb2YKJiM0MzsgKiBtZW1vcnkgZG9lcyBub3QgY29udGFpbiBhbnkgU05QIGd1ZXN0IG1lbW9yeS4KJiM0MzsgKgomIzQzOyAqIEBwYSBpcyBhIHN5c3RlbSBwaHlzaWNhbCBhZGRyZXNzOyBSTVBPUFQgb3BlcmF0ZXMgb24gdGhlIGNvbnRhaW5pbmcgMUdCLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJtcG9wdCh1NjQgcGEpCiYjNDM7ewomIzQzOwl1NjQgcGFfc3RhcnQgPSBBTElHTl9ET1dOKHBhLCBTWl8xRyk7CiYjNDM7CWVudW0gcm1wb3B0X29wX3R5cGUgb3AgPSBSTVBPUFRfT1BfVkVSSUZZX0FORF9SRVBPUlRfU1RBVFVTOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSTVBPUFQgKEYyIDBGIDAxIEZDKTogUkFYID0gMUdCLWFsaWduZWQgU1BBLCBSQ1ggPSBvcCB0eXBlLCBDRiBzZXQgaWYKJiM0MzsJICogdGhlIHJhbmdlIHdhcyBvcHRpbWl6ZWQgKHJlc3VsdCB1bnVzZWQgb24gdGhpcyBwYXRoKS4KJiM0MzsJICoKJiM0MzsJICogQmludXRpbHMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgUk1QT1BUIG1uZW1vbmljIHlldCwgc28gdGhlIGluc3RydWN0aW9uCiYjNDM7CSAqIGlzIGVuY29kZWQgd2l0aCAuYnl0ZS4KJiM0MzsJICovCiYjNDM7CWFzbSB2b2xhdGlsZSgmIzM0Oy5ieXRlIDB4ZjIsIDB4MGYsIDB4MDEsIDB4ZmMmIzM0OwomIzQzOwkJICAgICA6OiAmIzM0O2EmIzM0OyAocGFfc3RhcnQpLCAmIzM0O2MmIzM0OyAob3ApCiYjNDM7CQkgICAgIDogJiMzNDttZW1vcnkmIzM0OywgJiMzNDtjYyYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7Lyogb25fZWFjaF9jcHUoKSBjYWxsYmFjazogb3B0aW1pemUgdGhlIHdob2xlIFJNUE9QVCByYW5nZSBvbiB0aGlzIENQVS4gKi8KJiM0MztzdGF0aWMgdm9pZCBybXBvcHRfc2Nhbl9yYW5nZSh2b2lkICphcmcpCiYjNDM7ewomIzQzOwl1NjQgcGE7CiYjNDM7CiYjNDM7CWZvciAocGEgPSBybXBvcHRfcGFfc3RhcnQ7IHBhICZsdDsgcm1wb3B0X3BhX2VuZDsgcGEgJiM0Mzs9IFNaXzFHKQomIzQzOwkJcm1wb3B0KHBhKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcm1wb3B0X3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlpbnQgdGhpc19jcHU7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFJNUE9QVCBzY2FucyB0aGUgUk1QIHRhYmxlLCBzdG9yZXMgdGhlIHJlc3VsdCBvZiB0aGUgc2NhbiBpbiB0aGUKJiM0MzsJICogcmVzZXJ2ZWQgcHJvY2Vzc29yIG1lbW9yeS4gVGhlIFJNUCBzY2FuIGlzIHRoZSBtb3N0IGV4cGVuc2l2ZQomIzQzOwkgKiBwYXJ0LiBJZiBhIHNlY29uZCBSTVBPUFQgb2NjdXJzLCBpdCBjYW4gc2tpcCB0aGUgZXhwZW5zaXZlIHNjYW4KJiM0MzsJICogaWYgdGhleSBjYW4gc2VlIGEgY2FjaGVkIHJlc3VsdCBpbiB0aGUgcmVzZXJ2ZWQgcHJvY2Vzc29yIG1lbW9yeS4KJiM0MzsJICoKJiM0MzsJICogUnVuIFJNUE9QVCBvbiBvbmUgQ1BVIGZpcnN0ICh0aGUgbGVhZGVyKSwgdGhlbiBvbiBldmVyeSBvdGhlciBwcmltYXJ5CiYjNDM7CSAqIHRocmVhZCAodGhlIGZvbGxvd2VycykuICBBIGZvbGxvd2VyIHNraXBzIHRoZSBleHBlbnNpdmUgUk1QIHNjYW4gYnkKJiM0MzsJICogcmV1c2luZyB0aGUgY2FjaGVkIHNjYW4gcmVzdWx0cyB0aGUgbGVhZGVyIHByb2R1Y2VkLgomIzQzOwkgKgomIzQzOwkgKiBtaWdyYXRlX2Rpc2FibGUoKSBwaW5zIHRoaXMgd29yayB0byB0aGUgY3VycmVudCBDUFUgc28gaXQgc3RheXMgdGhlCiYjNDM7CSAqIGxlYWRlciBmb3IgdGhlIHdob2xlIGxlYWRlciBsb29wOiB0aGlzX2NwdSByZW1haW5zIHZhbGlkIGFuZCB0aGUKJiM0MzsJICogUk1QT1BUIGluc3RydWN0aW9uIHJ1bnMgb24gaXQuCiYjNDM7CSAqLwomIzQzOwltaWdyYXRlX2Rpc2FibGUoKTsKJiM0MzsJdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiYjNDM7CiYjNDM7CWNwdW1hc2tfYW5kbm90KHJtcG9wdF9mb2xsb3dlcl9tYXNrLCBybXBvcHRfY3B1bWFzaywKJiM0MzsJCSAgICAgICB0b3BvbG9neV9zaWJsaW5nX2NwdW1hc2sodGhpc19jcHUpKTsKJiM0MzsKJiM0MzsJcm1wb3B0X3NjYW5fcmFuZ2UoTlVMTCk7CiYjNDM7CiYjNDM7CW1pZ3JhdGVfZW5hYmxlKCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZvbGxvd2Vyczogb25lIElQSSBwZXIgcmVtYWluaW5nIGNvcmUsIGVhY2ggb3B0aW1pemluZyB0aGUgd2hvbGUKJiM0MzsJICogcmFuZ2UuICBFYWNoIHJ1bnMgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLCBidXQgb25seSBpc3N1ZXMgY2FjaGUtaGl0CiYjNDM7CSAqIFJNUE9QVHMgKHRoZSBsZWFkZXIgcG9wdWxhdGVkIHRoZSBzY2FuIGNhY2hlIGFib3ZlKSwgc28gdGhlIHdpbmRvdyBpcwomIzQzOwkgKiBzaG9ydC4gIGNwdXNfcmVhZF9sb2NrKCkgaXMgaW50ZW50aW9uYWxseSBub3QgaGVsZDogQ1BVIGhvdHBsdWcgaXMKJiM0MzsJICogZGlzYWJsZWQgdGhlIGVudGlyZSB0aW1lIFNOUCBpcyBhY3RpdmUgKHNlZSBzbnBfcHJlcGFyZSgpKSwgYW5kIHRoaXMKJiM0MzsJICogd29yayBvbmx5IHJ1bnMgd2hpbGUgU05QIGlzIGFjdGl2ZSwgc28gdGhlIGZvbGxvd2VyIHNldCBzdGF5cyB2YWxpZC4KJiM0MzsJICovCiYjNDM7CW9uX2VhY2hfY3B1X21hc2socm1wb3B0X2ZvbGxvd2VyX21hc2ssIHJtcG9wdF9zY2FuX3JhbmdlLCBOVUxMLCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBEZWxheSwgaW4gbWlsbGlzZWNvbmRzLCBiZWZvcmUgdGhlIFJNUCByZS1vcHRpbWl6YXRpb24gcGFzcyBydW5zIGFmdGVyIGFuCiYjNDM7ICogU05QIGd1ZXN0IGlzIHRvcm4gZG93bi4gIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKSByZS1hcm1zIHRoZSBkZWxheWVkIHdvcmsKJiM0MzsgKiB3aXRoIG1vZF9kZWxheWVkX3dvcmsoKSBvbiBlYWNoIHRlYXJkb3duLCBzbyB0aGUgcGFzcyBmaXJlcyB0aGlzIGxvbmcgYWZ0ZXIKJiM0MzsgKiB0aGUgbGFzdCB0ZWFyZG93bi4gIFRoaXMgY29hbGVzY2VzIGEgYnVyc3Qgb2YgdGVhcmRvd25zIGludG8gYSBzaW5nbGUgc2NhbgomIzQzOyAqIGFuZCBnaXZlcyBlYWNoIGd1ZXN0JiMzOTtzIHBhZ2VzIHRpbWUgdG8gYmUgY29udmVydGVkIGJhY2sgdG8gdGhlIHNoYXJlZCwKJiM0MzsgKiBoeXBlcnZpc29yLW93bmVkIHN0YXRlIGJlZm9yZSB0aGUgc2NhbiByZS1vcHRpbWl6ZXMgdGhlaXIgMUdCIHJlZ2lvbnMuICBUaGUKJiM0MzsgKiAxMCBzZWNvbmQgdmFsdWUgaXMgYSBoZXVyaXN0aWMgdHJhZGluZyByZS1vcHRpbWl6YXRpb24gbGF0ZW5jeSBhZ2FpbnN0CiYjNDM7ICogc2Nhbm5pbmcgdG9vIGVhZ2VybHkuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBSTVBPUFRfV09SS19USU1FT1VUCSgxMCAqIE1TRUNfUEVSX1NFQykKJiM0MzsKJiM0Mzt2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCkKJiM0Mzt7CiYjNDM7CWlmICghcm1wb3B0X2NhcGFibGUoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7cm1wb3B0X3dxX211dGV4KTsKJiM0MzsKJiM0MzsJaWYgKCFybXBvcHRfd3EpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW1vZF9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCAmYW1wO3JtcG9wdF9kZWxheWVkX3dvcmssCiYjNDM7CQkJIG1zZWNzX3RvX2ppZmZpZXMoUk1QT1BUX1dPUktfVElNRU9VVCkpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9ybXBvcHRfYWxsX3BoeXNtZW0sICYjMzQ7a3ZtLWFtZCYjMzQ7KTsKJiM0MzsKJiM0Mzt2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZCkKJiM0Mzt7CiYjNDM7CXU2NCBybXBvcHRfYmFzZTsKJiM0MzsJaW50IGNwdTsKJiM0MzsKJiM0MzsJaWYgKCFybXBvcHRfY2FwYWJsZSgpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDtybXBvcHRfd3FfbXV0ZXgpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBPbiByZS1pbml0aWFsaXphdGlvbiBhZnRlciBhIGxlZ2FjeSBTTlAgc2h1dGRvd24gKFNOUF9TSFVURE9XTl9FWAomIzQzOwkgKiB3aXRoIHg4Nl9zbnBfc2h1dGRvd249MCksIHNucF9zaHV0ZG93bigpIGFuZCB0aHVzIHNucF9jbGVhbnVwX3JtcG9wdCgpCiYjNDM7CSAqIGFyZSBza2lwcGVkLCBzbyB0aGUgd29ya3F1ZXVlLCBkZWxheWVkIHdvcmssIGNwdW1hc2sgYW5kIHBlci1DUFUKJiM0MzsJICogUk1QT1BUX0JBU0UgTVNScyBhcmUgc3RpbGwgc2V0IHVwIGFuZCB2YWxpZCAoU25wRW4gc3RheWVkIHNldCBhbmQKJiM0MzsJICogQ1BVIGhvdHBsdWcgc3RheWVkIGRpc2FibGVkKS4gIFJhdGhlciB0aGFuIHJlLWRvaW5nIHRoZSBzZXR1cCwgd2hpY2gKJiM0MzsJICogd291bGQgbGVhayB0aGUgZXhpc3Rpbmcgc3RhdGUsIGp1c3QgcmUtcXVldWUgdGhlIG9wdGltaXphdGlvbiBwYXNzCiYjNDM7CSAqIHRvIHJlLW9wdGltaXplIGFueSBtZW1vcnkgdGhlIHByZXZpb3VzIFNOUCBzZXNzaW9uIGRlLW9wdGltaXplZC4KJiM0MzsJICovCiYjNDM7CWlmIChybXBvcHRfd3EpIHsKJiM0MzsJCXF1ZXVlX2RlbGF5ZWRfd29yayhybXBvcHRfd3EsICZhbXA7cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQ3JlYXRlIGFuIFJNUE9QVC1zcGVjaWZpYyB3b3JrcXVldWUgdG8gYXZvaWQgc2NoZWR1bGluZwomIzQzOwkgKiBSTVBPUFQgd29ya2l0ZW0gb24gdGhlIGdsb2JhbCBzeXN0ZW0gd29ya3F1ZXVlLgomIzQzOwkgKi8KJiM0MzsJcm1wb3B0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKCYjMzQ7cm1wb3B0X3dxJiMzNDssIFdRX1VOQk9VTkQsIDEpOwomIzQzOwlpZiAoIXJtcG9wdF93cSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIFJNUE9QVCB3b3JrcXVldWVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlJTklUX0RFTEFZRURfV09SSygmYW1wO3JtcG9wdF9kZWxheWVkX3dvcmssIHJtcG9wdF93b3JrX2hhbmRsZXIpOwomIzQzOwomIzQzOwlpZiAoIXphbGxvY19jcHVtYXNrX3ZhcigmYW1wO3JtcG9wdF9jcHVtYXNrLCBHRlBfS0VSTkVMKSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIFJNUE9QVCBjcHVtYXNrXG4mIzM0Oyk7CiYjNDM7CQlkZXN0cm95X3dvcmtxdWV1ZShybXBvcHRfd3EpOwomIzQzOwkJcm1wb3B0X3dxID0gTlVMTDsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXphbGxvY19jcHVtYXNrX3ZhcigmYW1wO3JtcG9wdF9mb2xsb3dlcl9tYXNrLCBHRlBfS0VSTkVMKSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIFJNUE9QVCBmb2xsb3dlciBjcHVtYXNrXG4mIzM0Oyk7CiYjNDM7CQlmcmVlX2NwdW1hc2tfdmFyKHJtcG9wdF9jcHVtYXNrKTsKJiM0MzsJCWRlc3Ryb3lfd29ya3F1ZXVlKHJtcG9wdF93cSk7CiYjNDM7CQlybXBvcHRfd3EgPSBOVUxMOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBSTVBPUFRfQkFTRSBNU1IgaXMgcGVyLWNvcmUsIHNvIG9ubHkgb25lIHRocmVhZCBwZXIgY29yZSBuZWVkcwomIzQzOwkgKiB0byBzZXQgdXAgdGhlIFJNUE9QVF9CQVNFIE1TUi4gIEFsbCBwcmltYXJ5IHRocmVhZHMgYXJlIG9ubGluZSwKJiM0MzsJICogb3RoZXJ3aXNlIFNOUCB3b3VsZCBub3QgaGF2ZSBiZWVuIGVuYWJsZWQuCiYjNDM7CSAqLwomIzQzOwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKJiM0MzsJCWlmICh0b3BvbG9neV9pc19wcmltYXJ5X3RocmVhZChjcHUpKQomIzQzOwkJCWNwdW1hc2tfc2V0X2NwdShjcHUsIHJtcG9wdF9jcHVtYXNrKTsKJiM0MzsKJiM0MzsJcm1wb3B0X3BhX3N0YXJ0ID0gQUxJR05fRE9XTihQRk5fUEhZUyhtaW5fbG93X3BmbiksIFNaXzFHKTsKJiM0MzsJcm1wb3B0X2Jhc2UgPSBybXBvcHRfcGFfc3RhcnQgfCBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUGVyLUNQVSBSTVBPUFQgdGFibGVzIGNvdmVyIGF0IG1vc3QgMiBUQi4gIFByb2dyYW0gZWFjaCBjb3JlJiMzOTtzCiYjNDM7CSAqIFJNUE9QVF9CQVNFIHdpdGggdGhlIHN0YXJ0IG9mIFJBTSB0byBvcHRpbWl6ZSB1cCB0byAyIFRCLgomIzQzOwkgKi8KJiM0MzsJZm9yX2VhY2hfY3B1KGNwdSwgcm1wb3B0X2NwdW1hc2spCiYjNDM7CQl3cm1zcnFfb25fY3B1KGNwdSwgTVNSX0FNRDY0X1JNUE9QVF9CQVNFLCBybXBvcHRfYmFzZSk7CiYjNDM7CiYjNDM7CXJtcG9wdF9wYV9lbmQgPSBBTElHTihQRk5fUEhZUyhtYXhfcGZuKSwgU1pfMUcpOwomIzQzOwomIzQzOwkvKiBMaW1pdCBtZW1vcnkgc2Nhbm5pbmcgdG8gMlRCIG9mIFJBTSAqLwomIzQzOwlpZiAoKHJtcG9wdF9wYV9lbmQgLSBybXBvcHRfcGFfc3RhcnQpICZndDsgU1pfMlQpIHsKJiM0MzsJCXByX2luZm8oJiMzNDtSTVBPUFQgY292ZXJhZ2UgbGltaXRlZCB0byAyVEI7IG1lbW9yeSBhYm92ZSAweCVsbHggbm90IG9wdGltaXplZFxuJiMzNDssCiYjNDM7CQkJcm1wb3B0X3BhX3N0YXJ0ICYjNDM7IFNaXzJUKTsKJiM0MzsJCXJtcG9wdF9wYV9lbmQgPSBybXBvcHRfcGFfc3RhcnQgJiM0MzsgU1pfMlQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogT25jZSBhbGwgcGVyLUNQVSBSTVBPUFQgdGFibGVzIGhhdmUgYmVlbiBjb25maWd1cmVkLCBlbmFibGUgUk1QT1BUCiYjNDM7CSAqIG9wdGltaXphdGlvbnMgb24gYWxsIHBoeXNpY2FsIG1lbW9yeS4KJiM0MzsJICovCiYjNDM7CXF1ZXVlX2RlbGF5ZWRfd29yayhybXBvcHRfd3EsICZhbXA7cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7CiYjNDM7CiYjNDM7CXByX2luZm8oJiMzNDtSTVBPUFQgb3B0aW1pemF0aW9ucyBlbmFibGVkXG4mIzM0Oyk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NldHVwX3JtcG9wdCwgJiMzNDtjY3AmIzM0Oyk7CiYjNDM7CiAvKgogICogRG8gdGhlIG5lY2Vzc2FyeSBwcmVwYXJhdGlvbnMgd2hpY2ggYXJlIHZlcmlmaWVkIGJ5IHRoZSBmaXJtd2FyZSBhcwogICogZGVzY3JpYmVkIGluIHRoZSBTTlBfSU5JVF9FWCBmaXJtd2FyZSBjb21tYW5kIGRlc2NyaXB0aW9uIGluIHRoZSBTTlAKQEAgLTU3Nyw2ICYjNDM7ODE5LDggQEAgRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2h1dGRvd24sICYjMzQ7Y2NwJiMzNDspOwogICovCiBpbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpCiB7CiYjNDM7CXU2NCB2YWw7CiYjNDM7CiAJaWYgKFdBUk5fT05fT05DRSghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSkpCiAJCXJldHVybiAtRU5PU1lTOwogCkBAIC01ODYsNiAmIzQzOzgzMCwxNSBAQCBpbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpCiAJaWYgKCFzZXR1cF9ybXB0YWJsZSgpKQogCQlyZXR1cm4gLUVOT1NZUzsKIAomIzQzOwkvKgomIzQzOwkgKiBPbiBhIGtleGVjIGJvb3QgU05QIG1heSBhbHJlYWR5IGJlIGVuYWJsZWQgKGxlZ2FjeSBmaXJtd2FyZSBsZWF2ZXMKJiM0MzsJICogU25wRW4gc2V0IGFjcm9zcyBzaHV0ZG93biksIGluIHdoaWNoIGNhc2Ugc25wX3ByZXBhcmUoKSBiYWlscyB3aXRob3V0CiYjNDM7CSAqIGRpc2FibGluZyBDUFUgaG90cGx1Zywgc28gZGlzYWJsZSBpdCBoZXJlLgomIzQzOwkgKi8KJiM0MzsJcmRtc3JxKE1TUl9BTUQ2NF9TWVNDRkcsIHZhbCk7CiYjNDM7CWlmICh2YWwgJmFtcDsgTVNSX0FNRDY0X1NZU0NGR19TTlBfRU4pCiYjNDM7CQljcHVfaG90cGx1Z19kaXNhYmxlKCk7CiYjNDM7CiAJLyoKIAkgKiBTZXR0aW5nIGNyYXNoX2tleGVjX3Bvc3Rfbm90aWZpZXJzIHRvICYjMzk7dHJ1ZSYjMzk7IHRvIGVuc3VyZSB0aGF0IFNOUCBwYW5pYwogCSAqIG5vdGlmaWVyIGlzIGludm9rZWQgdG8gZG8gU05QIElPTU1VIHNodXRkb3duIGJlZm9yZSBrZHVtcC4KQEAgLTY4MywxMyAmIzQzOzkzNiwyMSBAQCBzdGF0aWMgYm9vbCBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbyh2b2lkKQogCiBib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpCiB7Ci0JaWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU0VHTUVOVEVEX1JNUCkpCiYjNDM7CWlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFR01FTlRFRF9STVApKSB7CiAJCXJkbXNycShNU1JfQU1ENjRfUk1QX0NGRywgcm1wX2NmZyk7CiAKLQlpZiAocm1wX2NmZyAmYW1wOyBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEKQotCQlyZXR1cm4gcHJvYmVfc2VnbWVudGVkX3JtcHRhYmxlX2luZm8oKTsKLQllbHNlCi0JCXJldHVybiBwcm9iZV9jb250aWd1b3VzX3JtcHRhYmxlX2luZm8oKTsKJiM0MzsJCWlmIChybXBfY2ZnICZhbXA7IE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRUQpCiYjNDM7CQkJcmV0dXJuIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU2VnbWVudGVkIFJNUCBpcyBlaXRoZXIgbm90IHN1cHBvcnRlZCBvbiB0aGUgcGxhdGZvcm0gb3IgaXMKJiM0MzsJICogZGlzYWJsZWQgYnkgdGhlIGZpcm13YXJlLiAgUk1QT1BUIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dAomIzQzOwkgKiBzZWdtZW50ZWQgUk1QLgomIzQzOwkgKi8KJiM0MzsJc2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9STVBPUFQpOwomIzQzOwomIzQzOwlyZXR1cm4gcHJvYmVfY29udGlndW91c19ybXB0YWJsZV9pbmZvKCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jIGIvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYwppbmRleCBjYTQ3M2NhMTk4YjgxLi5kYTEyZGRmMWY0MTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMKQEAgLTE1MTAsNiAmIzQzOzE1MTAsOCBAQCBzdGF0aWMgaW50IF9fc2V2X3NucF9pbml0X2xvY2tlZChpbnQgKmVycm9yLCB1bnNpZ25lZCBpbnQgbWF4X3NucF9hc2lkKQogCiAJc2V2X2VzX3Rtcl9zaXplID0gU05QX1RNUl9TSVpFOwogCiYjNDM7CXNucF9zZXR1cF9ybXBvcHQoKTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjE1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQU1EIFJNUE9QVCBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQgYWRkcyBzdXBwb3J0IGZvciB0aGUgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbi4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBzZXZlcmFsIGNvcmUgYXJlYXM6IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBoZWFkZXJzLCB0aGUga2VybmVsJiMzOTtzIENQVSBmZWF0dXJlcywgTVNScywgYW5kIFNFVi1yZWxhdGVkIGNvZGUsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoYXQgUk1QT1BUIGlzIHRpZWQgdG8gU0VWLVNOUC4gVGhlIGZpbGVzIG1vZGlmaWVkIGluY2x1ZGUgYGNwdWZlYXR1cmVzLmhgLCBgbXNyLWluZGV4LmhgLCBgc2V2LmhgLCBhcyB3ZWxsIGFzIHNldmVyYWwgQyBmaWxlcyBkZWFsaW5nIHdpdGggc2NhdHRlcmVkIG1lbW9yeSwgS1ZNLCBhbmQgdGhlIENDUCAoY3J5cHRvIGNvLXByb2Nlc3NvcikgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgZnVuY3Rpb25zIGxpa2UgYHNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKWAgYW5kIGBzbnBfc2V0dXBfcm1wb3B0KClgIGFuZCByZWxpZXMgb24gdGhlIGBYODZfRkVBVFVSRV9STVBPUFRgIGFuZCBgTVNSX0FNRDY0X1JNUE9QVF9CQVNFYCBkZWZpbml0aW9ucy4gQWxsIHRoZSBwaWVjZXMgZml0LCBSTVBPUFQgbG9va3MgdG8gYmUgYSBrZXkgZWxlbWVudCBvZiBTRVYtU05QLgoKVGhlIGJpZyBxdWVzdGlvbiBpbiBteSBtaW5kIGlzIHJlYWNoYWJpbGl0eSwgcGFydGljdWxhcmx5IHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBDb25zaWRlcmluZyB0aGlzIGlzIGFuIFNFVi1TTlAgZmVhdHVyZSwgaXQgdXN1YWxseSByZXF1aXJlcyBkZWRpY2F0ZWQgQU1EIGhhcmR3YXJlIHRvIGJlIHRydWx5IGVmZmVjdGl2ZS4gS1ZNIGNhbiBlbXVsYXRlIG9yIHBhc3MgdGhyb3VnaCBzb21lIGZlYXR1cmVzLCBidXQgdGhlIHJlYWwgcG93ZXIgb2YgU0VWLVNOUCBpcyBvZnRlbiBsb3N0IGluIGVtdWxhdGlvbi4gU3l6a2FsbGVyIGlzIGEga2V5IHRlc3RpbmcgdG9vbCwgYW5kIHRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgcnVuIG9uIEdDRSBpcyBpbnRyaWd1aW5nLiBIb3dldmVyLCBkb2VzIEdDRSBvZmZlciBBTUQgU0VWLVNOUCBpbnN0YW5jZXM/IEFoLCB5ZXMsIEdvb2dsZSBDbG91ZCBkb2VzIGhhdmUgQ29uZmlkZW50aWFsIFZNcyBiYXNlZCBvbiBTRVYgYW5kIFNFVi1TTlAuIEhvd2V2ZXIsIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IHN5emthbGxlciB0eXBpY2FsbHkgcnVucyBvbiBzdGFuZGFyZCBpbnN0YW5jZXMsIHdoaWNoIGFyZSBlMi1zdGFuZGFyZCBvciBuMi1zdGFuZGFyZC4gSXQmIzM5O3Mgbm90IHVzdWFsbHkgc3BlY2lmaWNhbGx5IGNvbmZpZ3VyZWQgdG8gdGFyZ2V0IENvbmZpZGVudGlhbCBWTXMuCgpTbywgZG9lcyBzeXprYWxsZXIgYWN0dWFsbHkgKnJlYWNoKiB0aGlzIGNvZGU/IEV2ZW4gaWYgdGhlIGhvc3QgZG9lc24mIzM5O3QgaGF2ZSBuYXRpdmUgU0VWLVNOUCwgaWYgdGhlIGhvc3Qga2VybmVsICppdHNlbGYqIHN1cHBvcnRzIHRoaXMgZnVuY3Rpb25hbGl0eSwgc3l6a2FsbGVyIGNvdWxkIHN0aWxsIGJlIHRlc3RpbmcgaXQuIFN5emthbGxlciB0ZXN0cyB0aGUgaG9zdCBrZXJuZWwsIHdoaWNoIGlzIGEga2V5IGVsZW1lbnQuIEJ1dCB0aGF0IGJyaW5ncyBtZSB0byBhbm90aGVyIHBvaW50LCB0aGUgaG9zdCBrZXJuZWwgcnVubmluZyBvbiBHQ0UgbWlnaHQgbm90IGV2ZW4gKmhhdmUqIFNFVi1TTlAgZW5hYmxlZC4KClRoZXJlZm9yZSwgaXMgdGhpcyBjb2RlIGV2ZW4gcmVhY2hhYmxlPyBJIHNob3VsZCBpbnZlc3RpZ2F0ZSB3aGV0aGVyIGBYODZfRkVBVFVSRV9STVBPUFRgIGNhbiBiZSAmIzM0O2Zha2VkJiMzNDsgb3Igd2hldGhlciB0aGVyZSBhcmUgc3BlY2lmaWMgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhlIGNvZGUmIzM5O3MgZXhlY3V0aW9uLiBMb29raW5nIGF0IHRoZSBjb2RlIGluIGBhcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY2AgYW5kIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCwgSSYjMzk7bSBsb29raW5nIGZvciBlbnRyeSBwb2ludHMuIE9rYXksIGhlcmUmIzM5O3MgYSBjcnVjaWFsIHNuaXBwZXQgZnJvbSBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2A6CgpgYGBjCnZvaWQgc2V2X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKQp7Ci4uLgoJCWlmIChzbnBfZGVjb21taXNzaW9uX2NvbnRleHQoa3ZtKSkKCQkJcmV0dXJuOwoKCQlzbnBfcm1wb3B0X2FsbF9waHlzbWVtKCk7Ci4uLgpgYGAKCkFoLCBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIHRoZSBkZXN0cnVjdGlvbiBvZiBhIFNFVi1TTlAgVk0uIEludGVyZXN0aW5nLiBDYW4gc3l6a2FsbGVyICpjcmVhdGUqIGEgU0VWLVNOUCBWTT8gVGhhdCYjMzk7cyB0aGUgcmVhbCB0ZXN0LiBJdCB3b3VsZCBuZWVkIGAvZGV2L3NldmAgYW5kIEtWTSBTRVYgc3VwcG9ydC4gTm93LCBJIHNob3VsZCBsb29rIGludG8gd2hldGhlciBgQ09ORklHX0tWTV9BTURfU0VWYCBpcyBhY3R1YWxseSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFuZCBzZWFyY2ggZm9yIHJlbGF0ZWQgb3B0aW9ucywgcGFydGljdWxhcmx5IGBDT05GSUdfS1ZNX0FNRGAgYW5kIGBDT05GSUdfQ1JZUFRPX0RFVl9TUF9DQ1BgLCB3aGljaCBzZWVtcyByZWxhdGVkIHRvIHRoZSBDQ1AgY29tcG9uZW50LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGxpa2VseSB0aGlzIGNvZGUgaXMgdG8gYmUgdHJpZ2dlcmVkIGluIHN5emthbGxlciYjMzk7cyBjdXJyZW50IGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQU1EJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTM0PWNvbmZpZyBLVk1fSU5URUxfVERYXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODM4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIHRoZSBTdGF0ZSBvZiBgQ09ORklHX0tWTV9BTURfU0VWYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhlIHN0YXRlIG9mIGBDT05GSUdfS1ZNX0FNRF9TRVZgLiBHaXZlbiB0aGUgY29udGV4dCwgdGhpcyBsaWtlbHkgbWVhbnMgSSYjMzk7bSB0cm91Ymxlc2hvb3Rpbmcgb3IgaW52ZXN0aWdhdGluZyBzb21lIGJlaGF2aW9yIHJlbGF0ZWQgdG8gQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgd2l0aGluIGEgS1ZNIGVudmlyb25tZW50LiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgYSBjb25maWd1cmF0aW9uIGZpbGUsIGEgYnVpbGQgc3lzdGVtLCBvciBwZXJoYXBzIHNvbWUga2VybmVsIG91dHB1dCBvciBsb2dzLiBUaGUgc3BlY2lmaWNzIGRlcGVuZCBvbiB3aGF0IEkmIzM5O20gdHJ5aW5nIHRvIGFjaGlldmUuCgpJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hldGhlciBTRVYgc3VwcG9ydCBpcyBlbmFibGVkLiBJcyBpdCBzZXQgdG8gJiMzNDt5JiMzNDsgKGJ1aWx0LWluKSwgJiMzNDttJiMzNDsgKG1vZHVsZSksIG9yIGRpc2FibGVkPyBUaGUgYW5zd2VyIHdpbGwgaGVhdmlseSBpbmZsdWVuY2UgbXkgbmV4dCBzdGVwcy4gSWYgaXQmIzM5O3MgZGlzYWJsZWQsIEkga25vdyB0aGF0JiMzOTtzIHRoZSByb290IGNhdXNlIGFuZCBJJiMzOTtsbCBuZWVkIHRvIHJlY29uZmlndXJlIGFuZCByZWJ1aWxkLCBvciByZS1ldmFsdWF0ZSB0aGUgcmVsZXZhbnQgbW9kdWxlLiBBIG1vZHVsZSBzZXR1cCBtaWdodCBiZSBva2F5LCBidXQgSSYjMzk7bGwgc3RpbGwgaGF2ZSB0byBjaGVjayBpZiBpdCYjMzk7cyBsb2FkaW5nIGNvcnJlY3RseS4KCklmIGl0ICppcyogZW5hYmxlZCwgdGhlbiBJJiMzOTtsbCBuZWVkIHRvIGRyaWxsIGRvd24gZGVlcGVyIHRvIHVuZGVyc3RhbmQgd2hhdCBpc3N1ZXMgYXJlIGFwcGVhcmluZy4gSSYjMzk7bGwgbmVlZCB0byBnbyB0byB0aGUgaGFyZHdhcmUsIHRoZSBCSU9TLCBLVk0gc2V0dXAsIGFuZCBrZXJuZWwgdmVyc2lvbnMuIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXA7IEkgY2FuJiMzOTt0IHByb2NlZWQgd2l0aG91dCBjb25maXJtaW5nIHRoaXMgaW5pdGlhbCBjb25maWd1cmF0aW9uIGVsZW1lbnQuIFRoZSBvdXRjb21lIG9mIHRoaXMgY2hlY2sgd2lsbCBkZWZpbmUgdGhlIG5leHQgcGhhc2Ugb2YgdGhpcyBkZWJ1Z2dpbmcgb3IgaW52ZXN0aWdhdGl2ZSBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQU1EX1NFViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE0Nj1jb25maWcgS1ZNX0FNRFxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzE0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgQ09ORklHX0NSWVBUT19ERVZfU1BfQ0NQYCBDb25maWd1cmF0aW9uIE9wdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjcm9zcy1yZWZlcmVuY2UgdGhlIGBDT05GSUdfQ1JZUFRPX0RFVl9TUF9DQ1BgIG9wdGlvbi4gVGhpcyBsaWtlbHkgaW5kaWNhdGVzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUgYWNjZWxlcmF0aW9uIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBTYW1zdW5nIENyeXB0byBQcm9jZXNzb3IgKENDUCkg4oCTIGdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbi4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiB3aGF0JiMzOTtzIHRoZSBicm9hZGVyIHN5c3RlbSBjb250ZXh0PyBJcyB0aGlzIGZvciBhIHNwZWNpZmljIGtlcm5lbCB2ZXJzaW9uPyBXaGF0JiMzOTtzIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlPyBUaGF0IHdpbGwgaW5mb3JtIGhvdyBkZWVwbHkgSSBuZWVkIHRvIGdvIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBmb3IgZGVwZW5kZW5jaWVzLiBBcmUgdGhlcmUgYW55IHByZXJlcXVpc2l0ZXMgaW4gdGVybXMgb2Ygb3RoZXIgY3J5cHRvIGRldmljZSBkcml2ZXJzIG9yIGtleSBtYW5hZ2VtZW50IG1vZHVsZXM/IEFuZCwgb2YgY291cnNlLCB0aGUgZXZlci1wcmVzZW50IHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zOiB3aGF0IHZ1bG5lcmFiaWxpdGllcyBoYXMgdGhpcyBtb2R1bGUgZmFjZWQgaW4gdGhlIHBhc3QsIGFuZCB3aGF0IGhhcmRlbmluZyB0ZWNobmlxdWVzIGFyZSBhcHBsaWVkPyBJIHdhbnQgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgbWV0cmljcyB0b28uIElmIHRoaXMgaGFyZHdhcmUgYWNjZWxlcmF0b3IgaXNuJiMzOTt0IHByb3Blcmx5IGNvbmZpZ3VyZWQgb3IgdXRpbGl6ZWQsIGl0IGNhbiBoYXZlIHNlcmlvdXMgcGVyZm9ybWFuY2UgZHJhd2JhY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDUllQVE9fREVWX1NQX0NDUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnPTI9Y29uZmlnIENSWVBUT19ERVZfQ0NQX0REXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctOS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnOjEwOmNvbmZpZyBDUllQVE9fREVWX1NQX0NDUFxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMTEtXHRib29sIFwmIzM0O0NyeXB0b2dyYXBoaWMgQ29wcm9jZXNzb3IgZGV2aWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2ODUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQgc2VlbXMgdGhleSYjMzk7dmUgaW50cm9kdWNlZCBgc25wX3JtcG9wdF9hbGxfcGh5c21lbSgpYCBhbmQgYHNucF9zZXR1cF9ybXBvcHQoKWAg4oCTIGludGVyZXN0aW5nLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNsZWFybHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgU0VWIGNvbnRleHQsIGFuZCB0aGV5JiMzOTtyZSBsb2NhdGVkIGluIGBhcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0FscmlnaHQsIGxldCYjMzk7cyBtYWtlIHN1cmUgdGhpcyBgc2V2LmNgIGZpbGUgaXMgYWN0dWFsbHkgZ2V0dGluZyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UuJiMzNDsgSXQmIzM5O3MgY3JpdGljYWwgdG8gdmVyaWZ5IHRoYXQgdGhlIFNFVi1zcGVjaWZpYyBjb2RlIGlzIHByZXNlbnQgYW5kIGFjdGl2ZSwgb3RoZXJ3aXNlLCB0aGVzZSBuZXcgZnVuY3Rpb25zIGFyZSBqdXN0IGRlYWQgd2VpZ2h0IGFuZCBwb3RlbnRpYWwgcG9pbnRzIG9mIGNvbmZ1c2lvbi4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGNvbXBvbmVudCBpcyBjb21waWxlZCBhcyBwYXJ0IG9mIHRoZSBzeXN0ZW0mIzM5O3MgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V2XFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L3ZpcnQvc3ZtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L3ZpcnQvc3ZtL01ha2VmaWxlLTItXG5hcmNoL3g4Ni92aXJ0L3N2bS9NYWtlZmlsZTozOm9iai0kKENPTkZJR19LVk1fQU1EX1NFVikgJiM0Mzs9IHNldi5vXG5hcmNoL3g4Ni92aXJ0L3N2bS9NYWtlZmlsZS00LW9iai0kKENPTkZJR19DUFVfU1VQX0FNRCkgJiM0Mzs9IGNtZGxpbmUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA1NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU0VWIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBLVk0vU0VWIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBDT05GSUdfS1ZNX0FNRF9TRVZgIGlzIHRoZSBrZXkuIEJ1dCBob2xkIG9uLCB0aGUgYnVpbGQgc3lzdGVtIHNlZW1zIHRvIGNvbmRpdGlvbmFsbHkgY29tcGlsZSBgYXJjaC94ODYvdmlydC9zdm0vc2V2LmNgIGJhc2VkIG9uIHRoaXMgb3B0aW9uLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4KCk5vdywgYSBiaXQgbW9yZSBkaWdnaW5nIHJldmVhbHMgdGhhdCBgQ09ORklHX0tWTV9BTURfU0VWYCBpbiB0dXJuIGhpbmdlcyBvbiBgS1ZNX0FNRGAuIFRoaXMgaW1wbGllcyBhIGhpZXJhcmNoaWNhbCBkZXBlbmRlbmN5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiBgS1ZNX0FNRF9TRVZgJiMzOTtzIGRlcGVuZGVuY2llcyB0byBlbnN1cmUgSSYjMzk7dmUgYWNjb3VudGVkIGZvciBldmVyeSByZWxldmFudCBjb21wb25lbnQuIFRpbWUgdG8gY2hlY2sgdGhvc2UgZGVwZW5kZW5jaWVzIHRob3JvdWdobHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQU1EX1NFViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE0Nj1jb25maWcgS1ZNX0FNRFxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ0OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gS1ZNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIEtWTSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgb25lcyBkZWFsaW5nIHdpdGggeDg2IGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGFyY2gveDg2L2t2bS9LY29uZmlnYCDigJMgYXJvdW5kIGxpbmUgMTU2LCBpZiBtZW1vcnkgc2VydmVzLCB0aGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbnMuIE15IGludGVudGlvbiBpcyBsaWtlbHkgdG8gZmlndXJlIG91dCB3aGljaCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCwgb3IgaG93IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFyZSBoYW5kbGVkLiBNaWdodCBiZSBsb29raW5nIGZvciBvcHRpb25zIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBDUFUgZmVhdHVyZSwgb3IgcGVyaGFwcyBmaWd1cmluZyBvdXQgaG93IHNvbWUgbmV3IGZlYXR1cmUgaGFzIGJlZW4gaW50ZWdyYXRlZCBpbnRvIHRoZSBLVk0gY29uZmlndXJhdGlvbi4gTmVlZCB0byBnZXQgYSBncmFzcCBvbiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0cyBhdCBwbGF5IHRoZXJlLCBzbyBJIGNhbiBtb3JlIGZ1bGx5IGdyYXNwIHRoZSBpbXBhY3Qgb2Ygc3BlY2lmaWMgY29uZmlndXJhdGlvbiBjaG9pY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTA6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIEFNRCBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggdGhlIEFNRC1WXG4gMTUxOlx0XHQgIChTVk0pIGV4dGVuc2lvbnMuXG4gMTUyOlx0XG4gMTUzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDE1NDpcdFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0tYW1kLlxuIDE1NTpcdFxuIDE1NjpcdGNvbmZpZyBLVk1fQU1EX1NFVlxuIDE1NzpcdFx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4gMTU4Olx0XHRkZWZhdWx0IHlcbiAxNTk6XHRcdGRlcGVuZHMgb24gS1ZNX0FNRCBcdTAwMjZcdTAwMjYgWDg2XzY0XG4gMTYwOlx0XHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfUFNQIFx1MDAyNlx1MDAyNiAhKEtWTV9BTUQ9eSBcdTAwMjZcdTAwMjYgQ1JZUFRPX0RFVl9DQ1BfREQ9bSlcbiAxNjE6XHRcdHNlbGVjdCBBUkNIX0hBU19DQ19QTEFURk9STVxuIDE2MjpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4gMTYzOlx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BSRVBBUkVcbiAxNjQ6XHRcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuIDE2NTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuIDE2NjpcdFx0aGVscFxuIDE2NzpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgZW5jcnlwdGVkIFZNcyB3aGljaCB1c2UgU2VjdXJlXG4gMTY4Olx0XHQgIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSwgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiB3aXRoXG4gMTY5Olx0XHQgIEVuY3J5cHRlZCBTdGF0ZSAoU0VWLUVTKSwgYW5kIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gd2l0aFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA2OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBteSBtZW50YWwgY2hlY2tsaXN0IGJlZ2luczoKCioqRXhhbWluaW5nIHRoZSBEZXBlbmRlbmN5IFRyZWUgZm9yIEtWTV9BTURfU0VWKioKClJpZ2h0LCBzbyBgS1ZNX0FNRF9TRVZgIHJlbGllcyBvbiBgS1ZNX0FNRGAsIGBYODZfNjRgLCBhbmQgYENSWVBUT19ERVZfU1BfUFNQYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgYnV0IEkgYWx3YXlzIGRpZyBkZWVwZXIuIFNpbmNlIGBDUllQVE9fREVWX1NQX1BTUGAgaXMgb25lIG9mIHRoZSBkZXBlbmRlbmNpZXMsIGxldCYjMzk7cyBnbyBhaGVhZCBhbmQgZHJpbGwgZG93biBpbnRvICppdHMqIGRlcGVuZGVuY2llcywgYW5kIG1ha2Ugc3VyZSBldmVyeXRoaW5nIHRoZXJlIGlzIHNoaXBzaGFwZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENSWVBUT19ERVZfU1BfUFNQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWc9MjM9Y29uZmlnIENSWVBUT19ERVZfQ0NQX0NSWVBUT1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTM3LVxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWc6Mzg6Y29uZmlnIENSWVBUT19ERVZfU1BfUFNQXG5kcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7UGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApIGRldmljZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM3OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIHRoZSBDQ1AgQ3J5cHRvIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIENDUCBjcnlwdG8gZHJpdmVyLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBtb3N0IHJlbGV2YW50IHBsYWNlIHRvIHN0YXJ0IGlzIGxpa2VseSB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoZSBkcml2ZXImIzM5O3MgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGZvY3VzIG9uIGFyb3VuZCBsaW5lIDM4LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBtYWluIGZlYXR1cmUgZmxhZ3MsIG1heWJlIHNvbWUgZGVwZW5kZW5jeSBjaGVja3MsIGFuZCBwb3RlbnRpYWxseSBzb21lIGRlZmF1bHQgc2V0dGluZ3Mgb3IgaGVscCB0ZXh0IHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiBob3cgdGhpcyBkcml2ZXIgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhbmQgY29uZmlndXJlZC4gVW5kZXJzdGFuZGluZyB0aGUga2V5IG9wdGlvbnMsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGFueSBjb25zdHJhaW50cyB3aWxsIGJlIGNyaXRpY2FsIGZvciBjb21wcmVoZW5kaW5nIGhvdyB0byBpbnRlZ3JhdGUgb3IgbW9kaWZ5IHRoaXMgZHJpdmVyIHdpdGhpbiBhIGxhcmdlciBzeXN0ZW0uIEkmIzM5O20gbG9va2luZyBmb3IgdGhpbmdzIGxpa2Ugd2hldGhlciBpdCYjMzk7cyBtb2R1bGFyLCBpZiBpdCYjMzk7cyBnb3QgYW55IGhhcmR3YXJlIGRlcGVuZGVuY2llcywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBrZXJuZWwgY3J5cHRvIEFQSS4gSG9wZWZ1bGx5IHRoaXMgd2lsbCBiZSBlbm91Z2ggdG8gZ2V0IG15IHVuZGVyc3RhbmRpbmcgc3RhcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzA6XHRcdHNlbGVjdCBDUllQVE9fQVVUSEVOQ1xuICAzMTpcdFx0c2VsZWN0IENSWVBUT19SU0FcbiAgMzI6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FFU1xuICAzMzpcdFx0aGVscFxuICAzNDpcdFx0ICBTdXBwb3J0IGZvciB1c2luZyB0aGUgY3J5cHRvZ3JhcGhpYyBBUEkgd2l0aCB0aGUgQU1EIENyeXB0b2dyYXBoaWNcbiAgMzU6XHRcdCAgQ29wcm9jZXNzb3IuIFRoaXMgbW9kdWxlIHN1cHBvcnRzIG9mZmxvYWQgb2YgU0hBIGFuZCBBRVMgYWxnb3JpdGhtcy5cbiAgMzY6XHRcdCAgSWYgeW91IGNob29zZSAmIzM5O00mIzM5OyBoZXJlLCB0aGlzIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjY3BfY3J5cHRvLlxuICAzNzpcdFxuICAzODpcdGNvbmZpZyBDUllQVE9fREVWX1NQX1BTUFxuICAzOTpcdFx0Ym9vbCBcJiMzNDtQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCkgZGV2aWNlXCYjMzQ7XG4gIDQwOlx0XHRkZWZhdWx0IHlcbiAgNDE6XHRcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9DQ1BfREQgXHUwMDI2XHUwMDI2IFg4Nl82NCBcdTAwMjZcdTAwMjYgQU1EX0lPTU1VXG4gIDQyOlx0XHRzZWxlY3QgUENJX1RTTSBpZiBQQ0lcbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCBQcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBBTUQgUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApLlxuICA0NTpcdFx0IFRoZSBQU1AgaXMgYSBkZWRpY2F0ZWQgcHJvY2Vzc29yIHRoYXQgcHJvdmlkZXMgc3VwcG9ydCBmb3Iga2V5XG4gIDQ2Olx0XHQgbWFuYWdlbWVudCBjb21tYW5kcyBpbiBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIG1vZGUsXG4gIDQ3Olx0XHQgYWxvbmcgd2l0aCBzb2Z0d2FyZS1iYXNlZCBUcnVzdGVkIEV4ZWN1dGlvbiBFbnZpcm9ubWVudCAoVEVFKSB0b1xuICA0ODpcdFx0IGVuYWJsZSB0aGlyZC1wYXJ0eSB0cnVzdGVkIGFwcGxpY2F0aW9ucy5cbiAgNDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NDgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZXBlbmRlbmN5IEFuYWx5c2lzIGZvciBDcnlwdG9ncmFwaGljIERldmljZSBTdXBwb3J0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgQ1JZUFRPX0RFVl9TUF9QU1BgIGFuZCBpdCYjMzk7cyBmbGFnZ2VkIGFzIGRlcGVuZGluZyBvbiBhIGZldyBvdGhlciBjb21wb25lbnRzLiBGaXJzdCB1cCwgSSBzZWUgdGhhdCBpdCYjMzk7cyByZWx5aW5nIG9uIGBDUllQVE9fREVWX0NDUF9ERGAsIGBYODZfNjRgLCBhbmQgYEFNRF9JT01NVWAuIE1ha2VzIHNlbnNlLiBHaXZlbiB0aGUgUFNQIGxpa2VseSBoYW5kbGVzIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9ucywgdGhlIG5lZWQgZm9yIGEgc3BlY2lmaWMgQ0NQIChjcnlwdG8gY28tcHJvY2Vzc29yKSBkZXZpY2UgZHJpdmVyIGxpa2UgYENSWVBUT19ERVZfQ0NQX0REYCwgYW5kIHRoZSBoYXJkd2FyZSByZXF1aXJlbWVudHMgZm9yIEFNRC1zcGVjaWZpYyBJT01NVSBzdXBwb3J0LCBwbHVzIG5lZWRpbmcgYFg4Nl82NGAgYXJjaGl0ZWN0dXJlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZGV2aWNlIGRyaXZlci4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIHNwZWNpZmljcyBvZiBgQ1JZUFRPX0RFVl9DQ1BfRERgIGFuZCBpdHMgaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIENSWVBUT19ERVZfQ0NQX0REXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtTZWN1cmUgUHJvY2Vzc29yIGRldmljZSBkcml2ZXJcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQ1BVX1NVUF9BTUQgfHwgQVJNNjRcbiAgIDU6XHRcdGRlZmF1bHQgbVxuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBQcm92aWRlcyBBTUQgU2VjdXJlIFByb2Nlc3NvciBkZXZpY2UgZHJpdmVyLlxuICAgODpcdFx0ICBJZiB5b3UgY2hvb3NlICYjMzk7TSYjMzk7IGhlcmUsIHRoaXMgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNjcC5cbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgQ1JZUFRPX0RFVl9TUF9DQ1BcbiAgMTE6XHRcdGJvb2wgXCYjMzQ7Q3J5cHRvZ3JhcGhpYyBDb3Byb2Nlc3NvciBkZXZpY2VcJiMzNDtcbiAgMTI6XHRcdGRlZmF1bHQgeVxuICAxMzpcdFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX0NDUF9ERCBcdTAwMjZcdTAwMjYgRE1BREVWSUNFU1xuICAxNDpcdFx0c2VsZWN0IEhXX1JBTkRPTVxuICAxNTpcdFx0c2VsZWN0IERNQV9FTkdJTkVcbiAgMTY6XHRcdHNlbGVjdCBDUllQVE9fU0hBMVxuICAxNzpcdFx0c2VsZWN0IENSWVBUT19TSEEyNTZcbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgUHJvdmlkZXMgdGhlIHN1cHBvcnQgZm9yIEFNRCBDcnlwdG9ncmFwaGljIENvcHJvY2Vzc29yIChDQ1ApIGRldmljZVxuICAyMDpcdFx0ICB3aGljaCBjYW4gYmUgdXNlZCB0byBvZmZsb2FkIGVuY3J5cHRpb24gb3BlcmF0aW9ucyBzdWNoIGFzIFNIQSwgQUVTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDg4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUk1QT1BUIGFuZCBTRVYtU05QIEltcGxlbWVudGF0aW9uIGZvciBUZXN0aW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGVuc3VyaW5nIHRoZSByaWdodCBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2U6IGBLVk1fQU1EYCwgYEtWTV9BTURfU0VWYCwgYENSWVBUT19ERVZfQ0NQX0REYCwgYENSWVBUT19ERVZfU1BfUFNQYCwgYW5kIGBBTURfSU9NTVVgLiBOb3csIHRoaW5raW5nIGFib3V0IFN5emthbGxlciwgaXQgY3JlYXRlcyBWTXMgZm9yIEtWTSB0ZXN0aW5nLiBUaGF0JiMzOTtzIGtleS4gVGhlIHNwZWNpZmljIGZ1bmN0aW9uIEkgbmVlZCB0byB0ZXN0IGlzIGBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKClgLiBUbyBleGVjdXRlIHRoZSBjb2RlIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCBJIGhhdmUgdG8gZW5zdXJlIHRoYXQgYHJtcG9wdF9jYXBhYmxlKClgIHJldHVybnMgdHJ1ZS4KCmBybXBvcHRfY2FwYWJsZSgpYCBoaW5nZXMgb24gdHdvIGNvbmRpdGlvbnM6IHRoZSBgWDg2X0ZFQVRVUkVfUk1QT1BUYCBDUFUgZmVhdHVyZSBiZWluZyBlbmFibGVkIGFuZCBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIGJlaW5nIHByZXNlbnQuIFRoZSBmaXJzdCwgYFg4Nl9GRUFUVVJFX1JNUE9QVGAsIGlzIHR5cGljYWxseSBkaXNjb3ZlcmVkIHZpYSBDUFVJRC4gTm93LCB0aGUgU3l6a2FsbGVyIHRlc3RpbmcgZW52aXJvbm1lbnQuLi4gaXQgcnVucyBpbnNpZGUgYSBWTS4gVGhpcyBtZWFucyB0aGF0IHRoZSBob3N0IGtlcm5lbCBmb3IgdGhlIFN5emthbGxlciBpbnN0YW5jZSAqaXMqIHRoZSBndWVzdCBrZXJuZWwgb2YgdGhlIG91dGVyIFZNIChsaWtlbHkgR0NFLCBpbiB0aGlzIGNhc2UpLiBDYW4gU3l6a2FsbGVyIGZha2UgQ1BVSUQgcmVzdWx0cyB3aXRoaW4gdGhlIGhvc3Qga2VybmVsPyBObywgaXQgY2FuJiMzOTt0LiBTbywgdGhlIG91dGVyIFZNIChHQ0UpICptdXN0KiBleHBvc2UgYm90aCBgWDg2X0ZFQVRVUkVfUk1QT1BUYCBhbmQgU0VWLVNOUCBzdXBwb3J0IHRvIHRoZSBpbm5lciBWTSAodGhlIFN5emthbGxlciBob3N0KS4KClRoZSBiaWcgcXVlc3Rpb24gaXMsIGRvZXMgR0NFICphY3R1YWxseSogZXhwb3NlIHRoZXNlIGZlYXR1cmVzIHRvIG5lc3RlZCBWTXM/IE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBuZXN0ZWQgU0VWLVNOUCBpc24mIzM5O3QgZ2VuZXJhbGx5IHN1cHBvcnRlZCBvciBhdmFpbGFibGUgaW4gc3RhbmRhcmQgR0NFIGluc3RhbmNlcy4gVGhpcyBpcyBhIHByb2JsZW0uIElmIGBybXBvcHRfY2FwYWJsZSgpYCByZXR1cm5zIGZhbHNlLCB0aGVuIHRoZSBmdW5jdGlvbiBgc25wX3JtcG9wdF9hbGxfcGh5c21lbSgpYCB3aWxsIHJldHVybiBlYXJseS4KCkxldCYjMzk7cyBsb29rIGZvciBhbHRlcm5hdGl2ZSBjb2RlIHBhdGhzLiBUaGUgZnVuY3Rpb24gYHNucF9zZXR1cF9ybXBvcHQoKWAgaXMgY2FsbGVkIGZyb20gYF9fc2V2X3NucF9pbml0X2xvY2tlZCgpYC4gVGhhdCBmdW5jdGlvbiBhbHNvIHJldHVybnMgZWFybHkgaWYgYHJtcG9wdF9jYXBhYmxlKClgIHJldHVybnMgZmFsc2UuIFNpbWlsYXJseSwgYHNucF9zaHV0ZG93bigpYCBjYWxscyBgc25wX2NsZWFudXBfcm1wb3B0KClgIHdoaWNoIHdpbGwgcmV0dXJuIGVhcmx5IGlmIGBzbnBfc2V0dXBfcm1wb3B0KClgIGhhc24mIzM5O3QgYmVlbiBzdWNjZXNzZnVsLiBTbywgdGhlIHBvdGVudGlhbCBjb2RlIHBhdGhzIGFyZSBsaW1pdGVkLgoKVGhlcmUgaXMgYWxzbyB0aGUgYHNucF9wcmVwYXJlKClgIGZ1bmN0aW9uLCBjYWxsZWQgZHVyaW5nIFNOUCBpbml0aWFsaXphdGlvbi4gSGVyZSBpdCBoYXMgYSBjaGVjayB0aGF0IGFsbCBDUFVzIG9ubGluZSBhbmQgcHJlc2VudCBtdXN0IG1hdGNoLiBJZiBTRVYtU05QIGlzIG5vdCBzdXBwb3J0ZWQsIGBzbnBfcHJlcGFyZSgpYCBtaWdodCBub3QgYmUgY2FsbGVkLCBvciBpdCBtaWdodCBmYWlsIHF1aWNrbHkuIEkgbmVlZCB0byB0cmFjZSBiYWNrIHdoZXJlIGBzbnBfcHJlcGFyZSgpYCBpcyBjYWxsZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhlY3V0aW9uIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NucF9wcmVwYXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTEzNTU9c3RhdGljIGludCBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoaW50ICplcnJvciwgdW5zaWduZWQgaW50IG1heF9zbnBfYXNpZClcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTEzNzctXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjEzNzg6XHRyYyA9IHNucF9wcmVwYXJlKCk7XG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTEzNzktXHRpZiAocmMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTk0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgX19zZXZfc25wX2luaXRfbG9ja2VkKClgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBgX19zZXZfc25wX2luaXRfbG9ja2VkKClgIGZ1bmN0aW9uLiBJIGtub3cgdGhpcyBpcyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBTRVYtU05QIGluaXRpYWxpemF0aW9uLCBhbmQgaXQmIzM5O3MgcHJvYmFibHkgd2hlcmUgYSBsb3Qgb2YgdGhlIGluaXRpYWwgc2V0dXAgdGFrZXMgcGxhY2UuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgbG9ja2luZyBtZWNoYW5pc21zIGFyb3VuZCBoZXJlIC0gYXJlIHdlIGRlYWxpbmcgd2l0aCBhIG11dGV4LCBhIHNwaW5sb2NrLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gVW5kZXJzdGFuZGluZyB0aGUgY29uY3VycmVuY3kgYXNwZWN0IGlzIHBhcmFtb3VudCB0byB0cmFja2luZyBkb3duIGFueSBwb3RlbnRpYWwgaXNzdWVzLCBvciBhcHByZWNpYXRpbmcgdGhlIGRlc2lnbiBjaG9pY2VzIG1hZGUuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIGFjY2VzcyB0byB0aGUgc2hhcmVkIHN0YXRlLCBhbmQgd2hhdCBraW5kIG9mIGNvbnRlbnRpb24gdGhleSBhbnRpY2lwYXRlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgb3ZlcmFsbCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gSXMgdGhpcyBwYXJ0IG9mIHRoZSBlYXJseSBib290IHByb2Nlc3MsIG9yIGRvZXMgaXQgZ2V0IGNhbGxlZCBsYXRlcj8gV2hhdCYjMzk7cyB0aGUgY29udGV4dCBpbiB3aGljaCB0aGlzIGxvY2sgaXMgaGVsZCBhbmQgcmVsZWFzZWQ/IEtub3dpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBnaXZlIG1lIHZhbHVhYmxlIGNsdWVzIGFib3V0IHRoZSBmdW5jdGlvbiYjMzk7cyByZXNwb25zaWJpbGl0eSBhbmQgaXRzIGltcGFjdCBvbiB0aGUgc3lzdGVtLiBJIGFsc28gbmVlZCB0byBtYWtlIGEgbWVudGFsIG5vdGUgb2YgaG93IGVycm9yIGhhbmRsaW5nIGlzIGRvbmUgaGVyZSwgYW5kIGhvdyB0aGV5IGhhbmRsZSBmYWlsdXJlLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIGtpbmQgb2YgZ3JhY2VmdWwgZXhpdCwgc28gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGJhY2sgcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM1MDpcdFx0fVxuMTM1MTpcdFxuMTM1MjpcdFx0cmV0dXJuIDA7XG4xMzUzOlx0fVxuMTM1NDpcdFxuMTM1NTpcdHN0YXRpYyBpbnQgX19zZXZfc25wX2luaXRfbG9ja2VkKGludCAqZXJyb3IsIHVuc2lnbmVkIGludCBtYXhfc25wX2FzaWQpXG4xMzU2Olx0e1xuMTM1NzpcdFx0c3RydWN0IHNldl9kYXRhX3JhbmdlX2xpc3QgKnNucF9yYW5nZV9saXN0IF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuMTM1ODpcdFx0c3RydWN0IHBzcF9kZXZpY2UgKnBzcCA9IHBzcF9tYXN0ZXI7XG4xMzU5Olx0XHRzdHJ1Y3Qgc2V2X2RhdGFfc25wX2luaXRfZXggZGF0YSA9IHt9O1xuMTM2MDpcdFx0c3RydWN0IHNldl9kZXZpY2UgKnNldjtcbjEzNjE6XHRcdHZvaWQgKmFyZyA9IFx1MDAyNmRhdGE7XG4xMzYyOlx0XHRpbnQgY21kLCByYyA9IDA7XG4xMzYzOlx0XG4xMzY0Olx0XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG4xMzY1Olx0XHRcdHJldHVybiAtRU5PREVWO1xuMTM2NjpcdFxuMTM2NzpcdFx0c2V2ID0gcHNwLVx1MDAzZXNldl9kYXRhO1xuMTM2ODpcdFxuMTM2OTpcdFx0aWYgKHNldi1cdTAwM2VzbnBfaW5pdGlhbGl6ZWQpXG4xMzcwOlx0XHRcdHJldHVybiAwO1xuMTM3MTpcdFxuMTM3MjpcdFx0aWYgKCFzZXZfdmVyc2lvbl9ncmVhdGVyX29yX2VxdWFsKFNOUF9NSU5fQVBJX01BSk9SLCBTTlBfTUlOX0FQSV9NSU5PUikpIHtcbjEzNzM6XHRcdFx0ZGV2X2RiZyhzZXYtXHUwMDNlZGV2LCBcJiMzNDtTRVYtU05QIHN1cHBvcnQgcmVxdWlyZXMgZmlybXdhcmUgdmVyc2lvbiBcdTAwM2U9ICVkOiVkXFxuXCYjMzQ7LFxuMTM3NDpcdFx0XHRcdFNOUF9NSU5fQVBJX01BSk9SLCBTTlBfTUlOX0FQSV9NSU5PUik7XG4xMzc1Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjEzNzY6XHRcdH1cbjEzNzc6XHRcbjEzNzg6XHRcdHJjID0gc25wX3ByZXBhcmUoKTtcbjEzNzk6XHRcdGlmIChyYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3NzgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU0VWLVNOUCBQbGF0Zm9ybSBDaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGUgZmlyc3QgdGhpbmcgaXQgZG9lcyBpcyBjaGVjayBpZiBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAuIFJpZ2h0IGF3YXksIGl0IHJldHVybnMgYC1FTk9ERVZgIGlmIHRoZSBwbGF0Zm9ybSAqZG9lc24mIzM5O3QqIGhhdmUgU0VWLVNOUC4gVGhhdCBtZWFucywgbG9naWNhbGx5LCB0aGUgcmVzdCBvZiB0aGlzIGNvZGUgYmxvY2sgaXMgY29tcGxldGVseSBieXBhc3NlZCB1bmxlc3MgdGhlIGhvc3QgZW52aXJvbm1lbnQgaXMgYWN0dWFsbHkgc2V0IHVwIGZvciBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIHdpdGggU2VjdXJlIE5lc3RlZCBQYWdpbmcuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgY3JlYXRlcyBhIHJvYWRibG9jayBmb3Igc3l6a2FsbGVyLiBEb2VzIHN5emthbGxlciBldmVuIHJ1biBvbiBhIHBsYXRmb3JtIHRoYXQgb2ZmZXJzIFNFVi1TTlA/CgpNeSBleHBlcmllbmNlIHdpdGggc3l6a2FsbGVyIGlzIHRoYXQgaXQmIzM5O3Mgb2Z0ZW4gcnVuIGluIEdDRSBWTXMuIEkga25vdyBmb3IgYSBmYWN0IHRoYXQgd2hpbGUgR0NFICpjYW4qIGJlIHRoZSAqaG9zdCogZm9yIFNFVi1TTlAgVk1zLCBpdCBkb2VzbiYjMzk7dCBnZW5lcmFsbHkgZXhwb3NlIFNFVi1TTlAgY2FwYWJpbGl0aWVzICp3aXRoaW4qIHRoZSBndWVzdCBWTXMgdGhlbXNlbHZlcy4gQSBHQ0UgVk0gY2FuICpiZSogYW4gU0VWLVNOUCBWTSwgYnV0IHlvdSBnZW5lcmFsbHkgY2Fubm90IHJ1biAqbmVzdGVkKiBTRVYtU05QIHdpdGhpbiBpdC4gVGhpcyByYWlzZXMgYSByZWQgZmxhZy4KCldhaXQgYSBzZWNvbmQuIExldCBtZSByZS1ldmFsdWF0ZS4uLiBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIGlzbiYjMzk7dCBqdXN0IGFib3V0IHRoZSAqY2FwYWJpbGl0aWVzKiBvZiB0aGUgQ1BVLCBidXQgd2hldGhlciBpdCYjMzk7cyAqZW5hYmxlZCogaW4gdGhlIEJJT1MuIFRoaXMgbWVhbnMgaXQgaXMgdGhlICpob3N0KiB0aGF0IGV4cG9zZXMgdGhlIGZlYXR1cmUgdG8gdGhlIGd1ZXN0LiBTbyB0aGUgbG9naWMgaGVyZSBpc24mIzM5O3QganVzdCBhIENQVSBmZWF0dXJlIGNoZWNrLiBJdCBpcyBsaWtlbHkgZW5zdXJpbmcgdGhhdCB0aGUgcGxhdGZvcm0mIzM5O3MgQklPUyBoYXMgdGhpcyBmZWF0dXJlIGV4cG9zZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlIFZNIGNhcGFiaWxpdGllcy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBpcyBiZWluZyBzZXQuIEl0IGNvdWxkIGJlIHRyaWdnZXJlZCBieSBoYXJkd2FyZSwgQklPUywgb3IgYm90aC4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhhdCBjaGVjayBhbmQgc2VlIHdoYXQgdGhlIGNvbmRpdGlvbnMgYXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDQ19BVFRSX0hPU1RfU0VWX1NOUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9jb2NvL2NvcmUuYz03MD1zdGF0aWMgYm9vbCBub2luc3RyIGFtZF9jY19wbGF0Zm9ybV9oYXMoZW51bSBjY19hdHRyIGF0dHIpXG4tLVxuYXJjaC94ODYvY29jby9jb3JlLmMtMTAzLVxuYXJjaC94ODYvY29jby9jb3JlLmM6MTA0Olx0Y2FzZSBDQ19BVFRSX0hPU1RfU0VWX1NOUDpcbmFyY2gveDg2L2NvY28vY29yZS5jLTEwNS1cdFx0cmV0dXJuIGNjX2ZsYWdzLmhvc3Rfc2V2X3NucDtcbi0tXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYz0xNzA9c3RhdGljIHZvaWQgYW1kX2NjX3BsYXRmb3JtX2NsZWFyKGVudW0gY2NfYXR0ciBhdHRyKVxuLS1cbmFyY2gveDg2L2NvY28vY29yZS5jLTE3Mi1cdHN3aXRjaCAoYXR0cikge1xuYXJjaC94ODYvY29jby9jb3JlLmM6MTczOlx0Y2FzZSBDQ19BVFRSX0hPU1RfU0VWX1NOUDpcbmFyY2gveDg2L2NvY28vY29yZS5jLTE3NC1cdFx0Y2NfZmxhZ3MuaG9zdF9zZXZfc25wID0gMDtcbi0tXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYz0xOTI9c3RhdGljIHZvaWQgYW1kX2NjX3BsYXRmb3JtX3NldChlbnVtIGNjX2F0dHIgYXR0cilcbi0tXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xOTQtXHRzd2l0Y2ggKGF0dHIpIHtcbmFyY2gveDg2L2NvY28vY29yZS5jOjE5NTpcdGNhc2UgQ0NfQVRUUl9IT1NUX1NFVl9TTlA6XG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xOTYtXHRcdGNjX2ZsYWdzLmhvc3Rfc2V2X3NucCA9IDE7XG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYz0zNTU9c3RhdGljIHZvaWQgYnNwX2RldGVybWluZV9zbnAoc3RydWN0IGNwdWluZm9feDg2ICpjKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMtMzcyLVx0XHQgICAgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKSkge1xuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYzozNzM6XHRcdFx0Y2NfcGxhdGZvcm1fc2V0KENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMtMzc0LVx0XHR9IGVsc2Uge1xuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYy0zNzUtXHRcdFx0c2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9TRVZfU05QKTtcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM6Mzc2Olx0XHRcdGNjX3BsYXRmb3JtX2NsZWFyKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMtMzc3LVx0XHR9XG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYz0xMDQ9c3RhdGljIGlubGluZSB2b2lkIGs4X2NoZWNrX3N5c2NmZ19kcmFtX21vZF9lbih2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMtMTExLVxuYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYzoxMTI6XHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmFyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMtMTEzLVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9MTIzNT1zdGF0aWMgYm9vbCBfX2luaXQgYXZpY193YW50X2F2aWNfZW5hYmxlZCh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEyNTgtXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMjU5Olx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMjYwLVx0ICAgICFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSFZfSU5VU0VfV1JfQUxMT1dFRCkpIHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTMwNTY9dm9pZCBfX2luaXQgc2V2X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMTYwLVx0c2V2X2VzX3N1cHBvcnRlZCA9IHRydWU7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMxNjE6XHRzZXZfc25wX3N1cHBvcnRlZCA9IHNldl9zbnBfZW5hYmxlZCBcdTAwMjZcdTAwMjYgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzE2Mi1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ5MDc9c3RydWN0IHBhZ2UgKnNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShpbnQgbm9kZSwgZ2ZwX3QgZ2ZwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDkxMS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDkxMjpcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDkxMy1cdFx0cmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgZ2ZwIHwgX19HRlBfWkVSTywgMCk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz01MTMwPXZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MTMzLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MTM0Olx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MTM1LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHQuYz0xMDI9dm9pZCBfX2luaXQgbWVtX2VuY3J5cHRfc2V0dXBfYXJjaCh2b2lkKVxuLS1cbmFyY2gveDg2L21tL21lbV9lbmNyeXB0LmMtMTEwLVx0ICovXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdC5jOjExMTpcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHQuYy0xMTItXHRcdHNucF9maXh1cF9lODIwX3RhYmxlcygpO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL2NtZGxpbmUuYz0xOT1zdGF0aWMgaW50IF9faW5pdCBpbml0X3Nldl9jb25maWcoY2hhciAqc3RyKVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL2NtZGxpbmUuYy0zMS1cdFx0XHRcdHNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfU0VWX1NOUCk7XG5hcmNoL3g4Ni92aXJ0L3N2bS9jbWRsaW5lLmM6MzI6XHRcdFx0XHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XG5hcmNoL3g4Ni92aXJ0L3N2bS9jbWRsaW5lLmMtMzMtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xNDg9c3RhdGljIHZvaWQgbWZkX3JlY29uZmlndXJlKHZvaWQgKmFyZylcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTE0OS17XG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxNTA6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xNTEtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xNTk9c3RhdGljIHZvaWQgc25wX2VuYWJsZSh2b2lkICphcmcpXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTYyLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MTYzOlx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTY0LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MjYxPXN0YXRpYyB2b2lkIGNsZWFyX3JtcCh2b2lkKVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTI2NS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjI2NjpcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTI2Ny1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTYyMj1zdGF0aWMgYm9vbCBybXBvcHRfY2FwYWJsZSh2b2lkKVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTYyNC1cdHJldHVybiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUE9QVCkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo2MjU6XHQgICAgICAgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTYyNi19XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9ODIwPWludCBfX2luaXQgc25wX3JtcHRhYmxlX2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy04MjMtXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo4MjQ6XHRpZiAoV0FSTl9PTl9PTkNFKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKSlcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTgyNS1cdFx0cmV0dXJuIC1FTk9TWVM7XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MTAyOT1zdGF0aWMgaW50IF9fc25wX2xvb2t1cF9ybXBlbnRyeSh1NjQgcGZuLCBzdHJ1Y3Qgcm1wZW50cnkgKmUsIGludCAqbGV2ZWwpXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTAzMy1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjEwMzQ6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMDM1LVx0XHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xMTU1PWludCBwc21hc2godTY0IHBmbilcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMTU5LVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MTE2MDpcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTExNjEtXHRcdHJldHVybiAtRU5PREVWO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTEyNjQ9c3RhdGljIGludCBybXB1cGRhdGUodTY0IHBmbiwgc3RydWN0IHJtcF9zdGF0ZSAqc3RhdGUpXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTI2OC1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjEyNjk6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMjcwLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xMzU3PXZvaWQga2R1bXBfc2V2X2NhbGxiYWNrKHZvaWQpXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTM2Mi1cdCAqL1xuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MTM2MzpcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTM2NC1cdFx0d2JpbnZkKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDU3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAgRmxhZyoqCgpSaWdodCwgc28gYENDX0FUVFJfSE9TVF9TRVZfU05QYCDigJMgdGhhdCYjMzk7cyB0aGUga2V5IGZsYWcuIEkgcmVtZW1iZXIgc2VlaW5nIHRoYXQgdXNlZCB3aXRoIFNOUCwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIG1lIGJlY2F1c2Ugb2YgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCYjMzk7cyBiZWluZyBzZXQgaW4gYGJzcF9kZXRlcm1pbmVfc25wKClgIHdpdGhpbiBgYXJjaC94ODYva2VybmVsL2NwdS9hbWQuY2AuIE5hdHVyYWxseSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byBgYnNwX2RldGVybWluZV9zbnAoKWAgaXRzZWxmLiBOZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSAqd2hlbiogYW5kICp3aHkqIHRoaXMgZmxhZyBpcyBnZXR0aW5nIHNldC4gV2hhdCBjb25kaXRpb25zIGFyZSBiZWluZyBjaGVja2VkPyBXaGF0IGhhcmR3YXJlIGNhcGFiaWxpdGllcyBpcyBpdCBsb29raW5nIGZvcj8gTmVlZCB0byBmaW5kIHRoaXMgZnVuY3Rpb24sIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNTU6XHRzdGF0aWMgdm9pZCBic3BfZGV0ZXJtaW5lX3NucChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXG4gMzU2Olx0e1xuIDM1NzpcdCNpZmRlZiBDT05GSUdfQVJDSF9IQVNfQ0NfUExBVEZPUk1cbiAzNTg6XHRcdGNjX3ZlbmRvciA9IENDX1ZFTkRPUl9BTUQ7XG4gMzU5Olx0XG4gMzYwOlx0XHRpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9TRVZfU05QKSkge1xuIDM2MTpcdFx0XHQvKlxuIDM2MjpcdFx0XHQgKiBSTVAgdGFibGUgZW50cnkgZm9ybWF0IGlzIG5vdCBhcmNoaXRlY3R1cmFsIGFuZCBpcyBkZWZpbmVkIGJ5IHRoZVxuIDM2MzpcdFx0XHQgKiBwZXItcHJvY2Vzc29yIFBQUi4gUmVzdHJpY3QgU05QIHN1cHBvcnQgb24gdGhlIGtub3duIENQVSBtb2RlbHNcbiAzNjQ6XHRcdFx0ICogZm9yIHdoaWNoIHRoZSBSTVAgdGFibGUgZW50cnkgZm9ybWF0IGlzIGN1cnJlbnRseSBkZWZpbmVkIG9yIGZvclxuIDM2NTpcdFx0XHQgKiBwcm9jZXNzb3JzIHdoaWNoIHN1cHBvcnQgdGhlIGFyY2hpdGVjdHVyYWxseSBkZWZpbmVkIFJNUFJFQURcbiAzNjY6XHRcdFx0ICogaW5zdHJ1Y3Rpb24uXG4gMzY3Olx0XHRcdCAqL1xuIDM2ODpcdFx0XHRpZiAoIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUikgXHUwMDI2XHUwMDI2XG4gMzY5Olx0XHRcdCAgICAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9aRU4zKSB8fFxuIDM3MDpcdFx0XHQgICAgIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfWkVONCkgfHxcbiAzNzE6XHRcdFx0ICAgICBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUFJFQUQpKSBcdTAwMjZcdTAwMjZcbiAzNzI6XHRcdFx0ICAgIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKCkpIHtcbiAzNzM6XHRcdFx0XHRjY19wbGF0Zm9ybV9zZXQoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuIDM3NDpcdFx0XHR9IGVsc2Uge1xuIDM3NTpcdFx0XHRcdHNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfU0VWX1NOUCk7XG4gMzc2Olx0XHRcdFx0Y2NfcGxhdGZvcm1fY2xlYXIoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuIDM3NzpcdFx0XHR9XG4gMzc4Olx0XHR9XG4gMzc5Olx0I2VuZGlmXG4gMzgwOlx0fVxuIDM4MTpcdFxuIDM4MjpcdCNkZWZpbmUgWkVOX01PREVMX1NURVBfVUNPREUoZmFtLCBtb2RlbCwgc3RlcCwgdWNvZGUpIFxcXG4gMzgzOlx0XHRYODZfTUFUQ0hfVkZNX1NURVBTKFZGTV9NQUtFKFg4Nl9WRU5ET1JfQU1ELCBmYW0sIG1vZGVsKSwgXFxcbiAzODQ6XHRcdFx0XHQgICAgc3RlcCwgc3RlcCwgdWNvZGUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODY4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSHlwZXJ2aXNvciBEZXBlbmRlbmN5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0JiMzOTtzIGltbWVkaWF0ZWx5IGp1bXBpbmcgb3V0IGF0IG1lIHRoYXQgaXQgaGluZ2VzIG9uIGAhY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9IWVBFUlZJU09SKWAuIEJlY2F1c2UsIGFuZCB0aGlzIGlzIGNydWNpYWwsIFN5emthbGxlciBydW5zIGluIGEgVk0sIHNwZWNpZmljYWxseSBHQ0UsIHdoaWNoICpkb2VzKiBzZXQgYFg4Nl9GRUFUVVJFX0hZUEVSVklTT1JgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgaWYgdGhhdCYjMzk7cyB0aGUgY2FzZSwgdGhlbiBgYnNwX2RldGVybWluZV9zbnAoKWAgd2lsbCBjb21lIGFsb25nIGFuZCAqY2xlYXIqIGBYODZfRkVBVFVSRV9TRVZfU05QYCBhbmQgYENDX0FUVFJfSE9TVF9TRVZfU05QYC4KCkJ1dCBob2xkIG9uLCBsZXQgbWUgdHJhY2UgdGhhdCBsb2dpYyBhZ2FpbuKApiBJZiB0aGF0IGluaXRpYWwgY2hlY2sgaXMgKmZhbHNlKiAoaS5lLiwgd2UgKmRvKiBoYXZlIGEgaHlwZXJ2aXNvciksIGl0IGRyb3BzIGludG8gdGhlIGBlbHNlYCBibG9jaywgYW5kICp0aGF0KiBjbGVhcnMgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBhbnl3YXkhIFNvIGVzc2VudGlhbGx5LCAqbm8gbWF0dGVyIHdoYXQqLCBpZiB3ZSYjMzk7cmUgdW5kZXIgYSBoeXBlcnZpc29yIOKAkyB3aGljaCB3ZSBhYnNvbHV0ZWx5IGFyZSBpbiBTeXprYWxsZXIg4oCTIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAgaXMgYWx3YXlzIGdvaW5nIHRvIGJlIGZhbHNlLgoKVGhlcmVmb3JlLCBzaW5jZSBTeXprYWxsZXIgcnVucyB1bmRlciBHQ0UsIHdoaWNoIGlzIGEgaHlwZXJ2aXNvciwgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBpcyBBTFdBWVMgZmFsc2UuIFdoaWNoIG1lYW5zIHRoYXQgYHJtcG9wdF9jYXBhYmxlKClgIHdpbGwgaW52YXJpYWJseSByZXR1cm4gZmFsc2UuIFdoaWNoIG1lYW5zLCBhcyBhIGRpcmVjdCBjb25zZXF1ZW5jZSwgdGhhdCBib3RoIGBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKClgIGFuZCBgc25wX3NldHVwX3JtcG9wdCgpYCB3aWxsIGltbWVkaWF0ZWx5IHJldHVybiwgZWZmZWN0aXZlbHkgZG9pbmcgbm90aGluZy4KCkVzc2VudGlhbGx5LCB0aGlzIGVudGlyZSBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgaW4gYW55IHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBJdCYjMzk7cyBhIGRlYWQgZW5kLCBhdCBsZWFzdCBhcyBpdCBjdXJyZW50bHkgc3RhbmRzLiBJIG5lZWQgdG8gbWFrZSBhIG5vdGUgb2YgdGhpcy4KCkJ1dCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGVudGlyZSBjb2RlIGJhc2UgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoZXJlJiMzOTtzIG5vIG90aGVyIHdheSBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIGNhbiBiZSBzZXQuIEp1c3QgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2NfcGxhdGZvcm1fc2V0XFwoQ0NfQVRUUl9IT1NUX1NFVl9TTlBcXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva2VybmVsL2NwdS9hbWQuYz0zNTU9c3RhdGljIHZvaWQgYnNwX2RldGVybWluZV9zbnAoc3RydWN0IGNwdWluZm9feDg2ICpjKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMtMzcyLVx0XHQgICAgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKSkge1xuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYzozNzM6XHRcdFx0Y2NfcGxhdGZvcm1fc2V0KENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMtMzc0LVx0XHR9IGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDc2NgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDU5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIFRoaXMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0JiMzOTtzICYjMzQ7d29ydGggZnV6emluZyYjMzQ7LiBUaGUgY3J1Y2lhbCBwb2ludCBoaW5nZXMgb24gd2hldGhlciB0aGUgY29kZSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuICBUaGUgaW5pdGlhbCBhbmFseXNpcyBwb2ludGVkIHRvIGBic3BfZGV0ZXJtaW5lX3NucCgpYC4gSXQgZXhwbGljaXRseSBjaGVja3MgYCFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IpYCwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgKmltcG9zc2libGUqIHRvIGhpdCB0aGF0IGNvZGUgcGF0aCBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBpZiB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiB0aGVzZSBlbnZpcm9ubWVudHMsIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLgoKU2luY2UgYGJzcF9kZXRlcm1pbmVfc25wKClgIGNvbnRhaW5zIHRoZSByZWxldmFudCBjaGVjaywgaXQgYXBwZWFycyB0aGlzIHBhcnQgb2YgdGhlIHBhdGNoIGlzIG5vdCB3b3J0aCBmdXp6aW5nLiBJJiMzOTttIHNhdGlzZmllZCB0aGF0IHRoaXMgaXMgY29ycmVjdCwgYnV0IGxldCBtZSBkbyBhIG1vcmUgdGhvcm91Z2ggcmV2aWV3IG9mICphbGwqIGNoYW5nZXMgdG8gYmUgY2VydGFpbi4KClRoZSBwYXRjaCB0b3VjaGVzIGEgYnVuY2ggb2YgZmlsZXM6IGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oYCwgYGFyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oYCwgYGFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oYCwgYGFyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNgLCBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AsIGFuZCBgYXJjaC94ODYvdmlydC9zdm0vc2V2LmNgLiBUaGUgY2hhbmdlcyBpbnZvbHZlIGFkZGluZyBgWDg2X0ZFQVRVUkVfUk1QT1BUYCwgbmV3IE1TUnMsIGZ1bmN0aW9uIHByb3RvdHlwZXMsIGNhbGxzIHRvIGBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKClgLCBhbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGEgZmV3IGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBgc25wX3JtcG9wdF9hbGxfcGh5c21lbSgpYCwgYHNucF9zZXR1cF9ybXBvcHQoKWAsIGBzbnBfY2xlYW51cF9ybXBvcHQoKWAsIGBybXBvcHRfY2FwYWJsZSgpYCwgYHJtcG9wdCgpYCwgYHJtcG9wdF9zY2FuX3JhbmdlKClgLCBhbmQgYHJtcG9wdF93b3JrX2hhbmRsZXIoKWAuIEl0IGFsc28gbW9kaWZpZXMgYHNucF9wcmVwYXJlKClgLCBgc25wX3NodXRkb3duKClgLCBgc25wX3JtcHRhYmxlX2luaXQoKWAsIGFuZCBgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKWAuCgpNeSBndXQgc2F5cyBtb3N0IG9mIHRoZXNlIG5ldyBmdW5jdGlvbnMgaW4gYHZpcnQvc3ZtL3Nldi5jYCBsaWtlbHkgZGVwZW5kIG9uIHRoZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gTGV0IG1lIGRvdWJsZS1jaGVjay4gSSBzaG91bGQgc3BlY2lmaWNhbGx5IGludmVzdGlnYXRlIGBzbnBfcHJlcGFyZSgpYCwgYHNucF9zaHV0ZG93bigpYCwgYHNucF9ybXB0YWJsZV9pbml0KClgLCBhbmQgYHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKClgLgoKT2theSwgYHNucF9wcmVwYXJlKClgIGlzIGNhbGxlZCBmcm9tIGBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoKWAuIGBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoKWAgaGFzIGEgY2hlY2sgZm9yIGBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApYCBhbmQgcmV0dXJucyBgLUVOT0RFVmAgaWYgdGhhdCBjaGVjayBmYWlscy4gIFRoaXMgc3VnZ2VzdHMgdGhhdCBgc25wX3ByZXBhcmUoKWAgKm1pZ2h0KiBiZSByZWFjaGFibGUgZXZlbiBpbiBhIHZpcnR1YWxpemVkIGNvbnRleHQsIGJ1dCBvbmx5IGlmIHRoZSBob3N0IHN1cHBvcnRzIHRoZSByZWxldmFudCBTRVYtU05QIGZlYXR1cmVzLCB3aGljaCBpcyBxdWl0ZSBzcGVjaWZpYy4gVGhpcyBjb3VsZCBzdGlsbCBtZWFuIHRoZSBjb2RlIHBhdGggaXNuJiMzOTt0IGVhc3kgdG8gdHJpZ2dlciBpbiB0aGUgdXN1YWwgUUVNVS9HQ0Ugc2NlbmFyaW9zLCBhbmQgbWlnaHQganVzdGlmeSBgV29ydGhGdXp6aW5nPWZhbHNlYC4gTGV0JiMzOTtzIGNvbmZpcm0gd2l0aCBgc25wX3NodXRkb3duKClgLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgX19zZXZfc25wX3NodXRkb3duX2xvY2tlZCgpYC4gVGltZSB0byBjaGVjayB0aGF0IGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3Nldl9zbnBfc2h1dGRvd25fbG9ja2VkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTE5NjE9c3RhdGljIGludCBzZXZfdXBkYXRlX2Zpcm13YXJlKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIwMTUtXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjIwMTY6c3RhdGljIGludCBfX3Nldl9zbnBfc2h1dGRvd25fbG9ja2VkKGludCAqZXJyb3IsIGJvb2wgcGFuaWMpXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIwMTcte1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjA5OC1cdC8qXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjIwOTk6XHQgKiBfX3Nldl9zbnBfc2h1dGRvd25fbG9ja2VkKCkgZGVhZGxvY2tzIHdoZW4gaXQgdHJpZXMgdG8gdW5yZWdpc3RlclxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMTAwLVx0ICogaXRzZWxmIGR1cmluZyBwYW5pYyBhcyB0aGUgcGFuaWMgbm90aWZpZXIgaXMgY2FsbGVkIHdpdGggUkNVIHJlYWRcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTI3MzA9c3RhdGljIHZvaWQgX19zZXZfZmlybXdhcmVfc2h1dGRvd24oc3RydWN0IHNldl9kZXZpY2UgKnNldiwgYm9vbCBwYW5pYylcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTI3NjEtXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjI3NjI6XHRfX3Nldl9zbnBfc2h1dGRvd25fbG9ja2VkKFx1MDAyNmVycm9yLCBwYW5pYyk7XG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTI3NjMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQzMQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBfX3Nldl9zbnBfc2h1dGRvd25fbG9ja2VkKClgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYF9fc2V2X3NucF9zaHV0ZG93bl9sb2NrZWQoKWAuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgaW4gdGhlIFNFVi1TTlAgc2h1dGRvd24gc2VxdWVuY2UuIFRoZSBuYW1lIGFsb25lIHNjcmVhbXMgJiMzNDtjcml0aWNhbCBzZWN0aW9uJiMzNDsg4oCTIGxvY2tlZCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgcHJvdGVjdGVkIGFjY2VzcyB0byBzb21lIHNoYXJlZCByZXNvdXJjZS4gSSYjMzk7bSBpbW1lZGlhdGVseSB3b25kZXJpbmc6IHdoYXQgZGF0YSBpcyBiZWluZyBndWFyZGVkIGhlcmU/IElzIGl0IHJlbGF0ZWQgdG8gdGhlIGd1ZXN0JiMzOTtzIHN0YXRlLCB0aGUgc2VjcmV0cywgdGhlIHZDUFUgY29udGV4dCwgb3IgcGVyaGFwcyB0aGUgb3ZlcmFsbCBwbGF0Zm9ybSBjb25maWd1cmF0aW9uPyBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQmIzM5O3MgcHJvYmFibHkgcHJldHR5IGxvdy1sZXZlbC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpdHMgY2FsbGVycyBhbmQgY2FsbGVlcyB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBzY29wZSBhbmQgY3JpdGljYWwgc2VjdGlvbiBpdCBwcm90ZWN0cy4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgbG9ja2luZyBtZWNoYW5pc20gdXNlcyBhIHNwaW5sb2NrLCBhIG11dGV4IG9yIHNvbWV0aGluZyBlbHNlOyB0aGF0JiMzOTtsbCBpbmZsdWVuY2UgaG93IEkgdGhpbmsgYWJvdXQgcG90ZW50aWFsIGNvbnRlbnRpb24gYW5kIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSSBzdXNwZWN0IHRoaXMgZnVuY3Rpb24gd291bGQgYmUgY2FsbGVkIHdoZW4gdGhlIHBsYXRmb3JtIG5lZWRzIHRvIHNhZmVseSBzaHV0IGRvd24gYW4gU05QIGd1ZXN0IChvciB0aGUgd2hvbGUgaG9zdCkuIEkgd29uZGVyLCBpcyB0aGVyZSBhbnkgcG9zc2liaWxpdHkgb2YgZGVhZGxvY2tzIG9yIGxpdmVsb2NrcyB0byBsb29rIG91dCBmb3I/IFRoaXMgcm91dGluZSBpcyBkZWZpbml0ZWx5IGEgcG9pbnQgb2YgZm9jdXMgZm9yIGFueSBzaHV0ZG93bi1yZWxhdGVkIGRlYnVnZ2luZyBvciBwZXJmb3JtYW5jZSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAxNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDE2Olx0c3RhdGljIGludCBfX3Nldl9zbnBfc2h1dGRvd25fbG9ja2VkKGludCAqZXJyb3IsIGJvb2wgcGFuaWMpXG4yMDE3Olx0e1xuMjAxODpcdFx0c3RydWN0IHBzcF9kZXZpY2UgKnBzcCA9IHBzcF9tYXN0ZXI7XG4yMDE5Olx0XHRzdHJ1Y3Qgc2V2X2RldmljZSAqc2V2O1xuMjAyMDpcdFx0c3RydWN0IHNldl9kYXRhX3NucF9zaHV0ZG93bl9leCBkYXRhO1xuMjAyMTpcdFx0aW50IHJldDtcbjIwMjI6XHRcbjIwMjM6XHRcdGlmICghcHNwIHx8ICFwc3AtXHUwMDNlc2V2X2RhdGEpXG4yMDI0Olx0XHRcdHJldHVybiAwO1xuMjAyNTpcdFxuMjAyNjpcdFx0c2V2ID0gcHNwLVx1MDAzZXNldl9kYXRhO1xuMjAyNzpcdFxuMjAyODpcdFx0aWYgKCFzZXYtXHUwMDNlc25wX2luaXRpYWxpemVkKVxuMjAyOTpcdFx0XHRyZXR1cm4gMDtcbjIwMzA6XHRcbjIwMzE6XHRcdG1lbXNldChcdTAwMjZkYXRhLCAwLCBzaXplb2YoZGF0YSkpO1xuMjAzMjpcdFx0ZGF0YS5sZW4gPSBzaXplb2YoZGF0YSk7XG4yMDMzOlx0XHRkYXRhLmlvbW11X3NucF9zaHV0ZG93biA9IDE7XG4yMDM0Olx0XHRpZiAoc2V2LVx1MDAzZXNucF9mZWF0X2luZm9fMC5lY3ggXHUwMDI2IFNOUF9YODZfU0hVVERPV05fU1VQUE9SVEVEKVxuMjAzNTpcdFx0XHRkYXRhLng4Nl9zbnBfc2h1dGRvd24gPSAxO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzA2MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTRVYtU05QIEluaXRpYWxpemF0aW9uIGFuZCBTaHV0ZG93bioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGxvZ2ljYWxseS4gVGhlIGNvZGUgSSYjMzk7bSBsb29raW5nIGF0IGNoZWNrcyBgc2V2LSZndDtzbnBfaW5pdGlhbGl6ZWRgLiBOYXR1cmFsbHksIEkgaW1tZWRpYXRlbHkgdGhpbmssIHdoZXJlIGlzIHRoYXQgZmxhZyBzZXQ/IEl0JiMzOTtzIHNldCB3aXRoaW4gYF9fc2V2X3NucF9pbml0X2xvY2tlZCgpYC4gQW5kIHRoYXQgZnVuY3Rpb24gaXRzZWxmIHJlcXVpcmVzIHRoZSBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIGF0dHJpYnV0ZS4gU28sIGlmIHdlIGRvbiYjMzk7dCBoYXZlIHRoYXQgYXR0cmlidXRlLCB0aGUgaW5pdGlhbGl6YXRpb24gcGF0aCBpcyBuZXZlciB0YWtlbi4KClRoZXJlZm9yZSwgc2luY2UgYHNucF9pbml0aWFsaXplZGAgaXMgb25seSBzZXQgaW4gdGhlIGluaXQgZnVuY3Rpb24sIHRoZSBjb25kaXRpb25hbCBndWFyZCBlbnN1cmVzIHRoYXQgdGhlIGBzbnBfc2h1dGRvd24oKWAgZnVuY3Rpb24gaXMgYWxzbyB1bnJlYWNoYWJsZSBpbiB0aGF0IHNjZW5hcmlvLiBNYWtlcyBwZXJmZWN0IHNlbnNlLgoKTm93LCBhIHJlbGF0ZWQgcXVlc3Rpb24gcG9wcyBpbnRvIG15IGhlYWQuIFdoYXQgYWJvdXQgYHNucF9ybXB0YWJsZV9pbml0KClgPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIGFsbCBvZiB0aGlzLiBJdCYjMzk7cyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaW4gdGhlIHByb2Nlc3MgdG8gY29uc2lkZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NucF9ybXB0YWJsZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oPTY1MD1ib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjUxOmludCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY1Mi1pbnQgc25wX2xvb2t1cF9ybXBlbnRyeSh1NjQgcGZuLCBib29sICphc3NpZ25lZCwgaW50ICpsZXZlbCk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg9NjY5PXN0YXRpYyBpbmxpbmUgYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjcwOnN0YXRpYyBpbmxpbmUgaW50IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpIHsgcmV0dXJuIC1FTk9TWVM7IH1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY3MS1zdGF0aWMgaW5saW5lIGludCBzbnBfbG9va3VwX3JtcGVudHJ5KHU2NCBwZm4sIGJvb2wgKmFzc2lnbmVkLCBpbnQgKmxldmVsKSB7IHJldHVybiAtRU5PREVWOyB9XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9ODEzPUVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NldHVwX3JtcG9wdCwgXCYjMzQ7Y2NwXCYjMzQ7KTtcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy04MTktICovXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo4MjA6aW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtODIxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3MjUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuCgoqKkludmVzdGlnYXRpbmcgdGhlIENhbGwgU2l0ZXMgb2YgYHNucF9ybXB0YWJsZV9pbml0KClgKioKCkFscmlnaHQsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBvZiBgc25wX3JtcHRhYmxlX2luaXQoKWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aGVyZSogdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIHBsYWNlcyBpbiB0aGUgY29kZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbi4gV2l0aG91dCB0aGlzIHVuZGVyc3RhbmRpbmcsIGFueSBhdHRlbXB0IHRvIGRlYnVnIG9yIG1vZGlmeSBiZWhhdmlvciBzdGVtbWluZyBmcm9tIHRoZSAmIzM5O3NucCYjMzk7IG1vZHVsZSB3b3VsZCBiZSBoYW1wZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c25wX3JtcHRhYmxlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg9NjUwPWJvb2wgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8odm9pZCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaDo2NTE6aW50IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjUyLWludCBzbnBfbG9va3VwX3JtcGVudHJ5KHU2NCBwZm4sIGJvb2wgKmFzc2lnbmVkLCBpbnQgKmxldmVsKTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02Njk9c3RhdGljIGlubGluZSBib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaDo2NzA6c3RhdGljIGlubGluZSBpbnQgc25wX3JtcHRhYmxlX2luaXQodm9pZCkgeyByZXR1cm4gLUVOT1NZUzsgfVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjcxLXN0YXRpYyBpbmxpbmUgaW50IHNucF9sb29rdXBfcm1wZW50cnkodTY0IHBmbiwgYm9vbCAqYXNzaWduZWQsIGludCAqbGV2ZWwpIHsgcmV0dXJuIC1FTk9ERVY7IH1cbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz04MTM9RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2V0dXBfcm1wb3B0LCBcJiMzNDtjY3BcJiMzNDspO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTgxOS0gKi9cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjgyMDppbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy04MjEte1xuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYz0zMzYzPXN0YXRpYyBfX2luaXQgdm9pZCBpb21tdV9zbnBfZW5hYmxlKHZvaWQpXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMzOTAtXHQgKi9cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozMzkxOlx0aWYgKHNucF9ybXB0YWJsZV9pbml0KCkpIHtcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMzkyLVx0XHRwcl93YXJuKFwmIzM0O1NOUDogUk1QIGluaXRpYWxpemF0aW9uIGZhaWxlZCwgU05QIGNhbm5vdCBiZSBzdXBwb3J0ZWQuXFxuXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzOTIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGlubmVyIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgaW9tbXVfc25wX2VuYWJsZSgpYCBhbmQgaXRzIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSB0cmFpbCBsZWFkcyB1cyB0byBgaW9tbXVfc25wX2VuYWJsZSgpYC4gVGhlIGZ1bmN0aW9uIG5hbWUgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBlbmFibGluZyBTZWN1cmUgTmVzdGVkIFBhZ2luZyBmZWF0dXJlcywgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgbW9kZXJuIHZpcnR1YWxpemF0aW9uIHNlY3VyaXR5LiBMZXQmIzM5O3MgZGlnIGluIGEgYml0IGZ1cnRoZXIgdG8gc2VlIGhvdyBpdCYjMzk7cyBzZXR0aW5nIHRoaW5ncyB1cC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIEJhc2VkIG9uIHRoYXQgZnVuY3Rpb24gY2FsbCwgSSBuZWVkIHRvIGtub3cgYWJvdXQgYHNucF9ybXB0YWJsZV9pbml0KClgLiBUaGF0IGZ1bmN0aW9uJiMzOTtzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgY29uZmlndXJpbmcgdGhlIFJNUCAoUm9vdCBNZW1vcnkgUHJvdGVjdGlvbikgdGFibGUsIHdoaWNoIGlzIGFic29sdXRlbHkgZnVuZGFtZW50YWwgdG8gcHJvdGVjdGluZyBndWVzdCBtZW1vcnkgZnJvbSB1bmF1dGhvcml6ZWQgYWNjZXNzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0JiMzOTtzIGRvbmUuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGV0YWlscyBvZiB0aGF0IHRhYmxlIHRvIGdldCBhIGdvb2QgZ3JpcCBvbiB0aGUgb3ZlcmFsbCBzZWN1cml0eSBwb3N0dXJlIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvdmlydC9zdm0vc2V2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgxOTpcdCAqL1xuIDgyMDpcdGludCBfX2luaXQgc25wX3JtcHRhYmxlX2luaXQodm9pZClcbiA4MjE6XHR7XG4gODIyOlx0XHR1NjQgdmFsO1xuIDgyMzpcdFxuIDgyNDpcdFx0aWYgKFdBUk5fT05fT05DRSghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSkpXG4gODI1Olx0XHRcdHJldHVybiAtRU5PU1lTO1xuIDgyNjpcdFxuIDgyNzpcdFx0aWYgKFdBUk5fT05fT05DRSghYW1kX2lvbW11X3NucF9lbikpXG4gODI4Olx0XHRcdHJldHVybiAtRU5PU1lTO1xuIDgyOTpcdFxuIDgzMDpcdFx0aWYgKCFzZXR1cF9ybXB0YWJsZSgpKVxuIDgzMTpcdFx0XHRyZXR1cm4gLUVOT1NZUztcbiA4MzI6XHRcbiA4MzM6XHRcdC8qXG4gODM0Olx0XHQgKiBPbiBhIGtleGVjIGJvb3QgU05QIG1heSBhbHJlYWR5IGJlIGVuYWJsZWQgKGxlZ2FjeSBmaXJtd2FyZSBsZWF2ZXNcbiA4MzU6XHRcdCAqIFNucEVuIHNldCBhY3Jvc3Mgc2h1dGRvd24pLCBpbiB3aGljaCBjYXNlIHNucF9wcmVwYXJlKCkgYmFpbHMgd2l0aG91dFxuIDgzNjpcdFx0ICogZGlzYWJsaW5nIENQVSBob3RwbHVnLCBzbyBkaXNhYmxlIGl0IGhlcmUuXG4gODM3Olx0XHQgKi9cbiA4Mzg6XHRcdHJkbXNycShNU1JfQU1ENjRfU1lTQ0ZHLCB2YWwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDk2NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6CgoqKlVucmVhY2hhYmxlIENvZGUgYW5kIFNOUCBQcm9iaW5nKioKClJpZ2h0LCBzbyB0aGF0IGNoZWNrIHdpdGggYGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUClgLi4uIHRoYXQmIzM5O3MgdGhlIHRlbGwuIEl0IG1lYW5zIHRoZSBzdWJzZXF1ZW50IGNvZGUgcGF0aCBpcyBjb21wbGV0ZWx5IGJsb2NrZWQgb2ZmLiBObyB3YXkgYXJvdW5kIGl0LiBJdCYjMzk7cyB1bnJlYWNoYWJsZS4gSXQgbWFrZXMgbWUgd29uZGVyIHdoeSBpdCYjMzk7cyB0aGVyZSBhdCBhbGwuCgpUaGVuLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpYC4gSXMgdGhhdCByZWxhdGVkPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIGltcGxpY2F0aW9ucyBvZiBwcm9iaW5nIHRoZSBSTVAgdGFibGUgaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBwbGF0Zm9ybSBjaGVjay4gSXMgdGhlIHVucmVhY2hhYmxlIGNvZGUgcmVsYXRlZCB0byBzb21lIGFsdGVybmF0aXZlIFJNUCB0YWJsZSBwcm9iaW5nIHN0cmF0ZWd5IG9yIGFuIGVycm9yIHBhdGggdGhhdCBpcyBub3QgbmVlZGVkIGZvciB0aGUgY3VycmVudCBTTlAgZmVhdHVyZT8gSSYjMzk7bGwgcHJvYmFibHkgbmVlZCB0byByZXZpc2l0IHRoZSByZWxldmFudCBTTlAgZG9jdW1lbnRhdGlvbiBhbmQgY29kZSB0byBwaWVjZSB0aGlzIHRvZ2V0aGVyIHByb3Blcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02NDU9c3RhdGljIGlubGluZSB1NjQgc2F2aWNfZ2hjYl9tc3JfcmVhZCh1MzIgcmVnKSB7IHJldHVybiAwOyB9XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjQ5LSNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjY1MDpib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjUxLWludCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02Njc9dm9pZCBzbnBfc2h1dGRvd24odm9pZCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaC02NjgtI2Vsc2VcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjY2OTpzdGF0aWMgaW5saW5lIGJvb2wgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8odm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY3MC1zdGF0aWMgaW5saW5lIGludCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKSB7IHJldHVybiAtRU5PU1lTOyB9XG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYz0zNTU9c3RhdGljIHZvaWQgYnNwX2RldGVybWluZV9zbnAoc3RydWN0IGNwdWluZm9feDg2ICpjKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMtMzcxLVx0XHQgICAgIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QUkVBRCkpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYzozNzI6XHRcdCAgICBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpKSB7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3My1cdFx0XHRjY19wbGF0Zm9ybV9zZXQoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTg5Mz1zdGF0aWMgYm9vbCBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbyh2b2lkKVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTkzNi1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjkzNzpib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy05Mzgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTc2NwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbjoKCioqVHJhY2luZyB0aGUgRGF0YSBGbG93OiBgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKWAqKgoKT2theSwgc28gYHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKClgIGlzIHRyaWdnZXJlZCBieSBgYnNwX2RldGVybWluZV9zbnAoKWAuIFRoYXQmIzM5O3MgYSBrZXkgcmVsYXRpb25zaGlwLiBUbyB0cnVseSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nLCBJIG5lZWQgdG8gcmV2aXNpdCB0aGUgZnVuY3Rpb25hbGl0eSBvZiBgYnNwX2RldGVybWluZV9zbnAoKWAuIEl0JiMzOTtzIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLCBzbyBpdCBob2xkcyB0aGUgY29udGV4dCBmb3Igd2h5IGBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpYCBpcyBldmVuIGJlaW5nIGNhbGxlZCBpbiB0aGUgZmlyc3QgcGxhY2UuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IHRoYXQgZnVuY3Rpb24gaXMgZG9pbmcsIHdoYXQgaXRzIGlucHV0cyBhcmUsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIG9iamVjdGl2ZSBvZiB0aGF0IGZ1bmN0aW9uIGlzLiBUaGF0IHNob3VsZCBpbGx1bWluYXRlIHRoZSBwdXJwb3NlIG9mIHRoZSBjYWxsIHRvIGBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpYCwgYW5kIHdoZXJlIHRoaXMgZGF0YSBmaXRzIGludG8gdGhlIG92ZXJhbGwgc2NoZW1lIG9mIHRoaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNTU6XHRzdGF0aWMgdm9pZCBic3BfZGV0ZXJtaW5lX3NucChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXG4gMzU2Olx0e1xuIDM1NzpcdCNpZmRlZiBDT05GSUdfQVJDSF9IQVNfQ0NfUExBVEZPUk1cbiAzNTg6XHRcdGNjX3ZlbmRvciA9IENDX1ZFTkRPUl9BTUQ7XG4gMzU5Olx0XG4gMzYwOlx0XHRpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9TRVZfU05QKSkge1xuIDM2MTpcdFx0XHQvKlxuIDM2MjpcdFx0XHQgKiBSTVAgdGFibGUgZW50cnkgZm9ybWF0IGlzIG5vdCBhcmNoaXRlY3R1cmFsIGFuZCBpcyBkZWZpbmVkIGJ5IHRoZVxuIDM2MzpcdFx0XHQgKiBwZXItcHJvY2Vzc29yIFBQUi4gUmVzdHJpY3QgU05QIHN1cHBvcnQgb24gdGhlIGtub3duIENQVSBtb2RlbHNcbiAzNjQ6XHRcdFx0ICogZm9yIHdoaWNoIHRoZSBSTVAgdGFibGUgZW50cnkgZm9ybWF0IGlzIGN1cnJlbnRseSBkZWZpbmVkIG9yIGZvclxuIDM2NTpcdFx0XHQgKiBwcm9jZXNzb3JzIHdoaWNoIHN1cHBvcnQgdGhlIGFyY2hpdGVjdHVyYWxseSBkZWZpbmVkIFJNUFJFQURcbiAzNjY6XHRcdFx0ICogaW5zdHJ1Y3Rpb24uXG4gMzY3Olx0XHRcdCAqL1xuIDM2ODpcdFx0XHRpZiAoIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUikgXHUwMDI2XHUwMDI2XG4gMzY5Olx0XHRcdCAgICAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9aRU4zKSB8fFxuIDM3MDpcdFx0XHQgICAgIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfWkVONCkgfHxcbiAzNzE6XHRcdFx0ICAgICBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUFJFQUQpKSBcdTAwMjZcdTAwMjZcbiAzNzI6XHRcdFx0ICAgIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKCkpIHtcbiAzNzM6XHRcdFx0XHRjY19wbGF0Zm9ybV9zZXQoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuIDM3NDpcdFx0XHR9IGVsc2Uge1xuIDM3NTpcdFx0XHRcdHNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfU0VWX1NOUCk7XG4gMzc2Olx0XHRcdFx0Y2NfcGxhdGZvcm1fY2xlYXIoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuIDM3NzpcdFx0XHR9XG4gMzc4Olx0XHR9XG4gMzc5Olx0I2VuZGlmXG4gMzgwOlx0fVxuIDM4MTpcdFxuIDM4MjpcdCNkZWZpbmUgWkVOX01PREVMX1NURVBfVUNPREUoZmFtLCBtb2RlbCwgc3RlcCwgdWNvZGUpIFxcXG4gMzgzOlx0XHRYODZfTUFUQ0hfVkZNX1NURVBTKFZGTV9NQUtFKFg4Nl9WRU5ET1JfQU1ELCBmYW0sIG1vZGVsKSwgXFxcbiAzODQ6XHRcdFx0XHQgICAgc3RlcCwgc3RlcCwgdWNvZGUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NTc4CgkJCQkJCQlvdXRwdXQ6IDE5NAoJCQkJCQkJdGhvdWdodHM6IDc2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBTRVYtU05QIENvZGUgaW4gVmlydHVhbGl6ZWQgRW52aXJvbm1lbnRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBiZWNhdXNlIG9mIEMmIzM5O3Mgc2hvcnQtY2lyY3VpdCBldmFsdWF0aW9uLCB0aGUgYHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKClgIGZ1bmN0aW9uIHdvbiYjMzk7dCBiZSBjYWxsZWQgaWYgdGhlIGAhY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9IWVBFUlZJU09SKWAgY2hlY2sgaXMgZmFsc2UuIFNpbmNlIHdlJiMzOTtyZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBgY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9IWVBFUlZJU09SKWAgd2lsbCBiZSB0cnVlLCBtYWtpbmcgdGhlIGNvbmRpdGlvbiBmYWxzZSwgYW5kIHRodXMsIGBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpYCBpcyBza2lwcGVkLiBBbmQgbGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrLCBubywgdGhlIGdyZXAgb3V0cHV0IGNvbmZpcm1zIHRoaXMgaXMgb25seSBjYWxsZWQgZnJvbSBgYnNwX2RldGVybWluZV9zbnAoKWAuCgpTbywgdGhlIGNoYW5nZXMgaW4gdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiwgYW5kIHRoZXJlZm9yZSwgdGhlaXIgaW1wYWN0LCBhcmUgdW5yZWFjaGFibGUgaW4gdGhpcyBzY2VuYXJpby4KCk5vdywgd2hhdCBlbHNlIGRvZXMgdGhlIHBhdGNoIHRvdWNoPyBJIHNlZSBhZGRpdGlvbnMgbGlrZSBgI2RlZmluZSBYODZfRkVBVFVSRV9STVBPUFRgLCBgTVNSX0FNRDY0X1JNUE9QVF9CQVNFYCwgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgbW9kaWZpY2F0aW9ucyB0byBhcnJheXMgaW4gdmFyaW91cyBpbmNsdWRlIGFuZCBzb3VyY2UgZmlsZXMuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgbG9naWMgcmV2b2x2ZXMgYXJvdW5kIGBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKClgLCBgc25wX3NldHVwX3JtcG9wdCgpYCwgYHNucF9jbGVhbnVwX3JtcG9wdCgpYCwgYW5kIGEgc3VpdGUgb2YgcmVsYXRlZCBmdW5jdGlvbnMuCgpIb3dldmVyLCBhbGwgb2YgdGhlc2UgZnVuY3Rpb25zLCBhbmQgb3RoZXIgZnVuY3Rpb25zLCBzdWNoIGFzIGBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpYCwgYXJlIGdhdGVkIGJlaGluZCBlaXRoZXIgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBvciwgY3J1Y2lhbGx5LCBgIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUilgLiBUaGVyZWZvcmUsIGV2ZW4gaW4gdGhlIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBub25lIG9mIHRoaXMgY29kZSBjYW4gYmUgdHJpZ2dlcmVkIGJlY2F1c2UgYFg4Nl9GRUFUVVJFX0hZUEVSVklTT1JgIGlzIHNldC4KCkJ1dCBsZXQmIzM5O3MgYmUgc3VyZS4gQ2FuIHdlIGNsZWFyIGBYODZfRkVBVFVSRV9IWVBFUlZJU09SYCBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmc/IEluIFFFTVUsIHRoZSBgLWNwdSBob3N0LC1oeXBlcnZpc29yYCBmbGFnICpjYW4qIGJlIHVzZWQgdG8gY2xlYXIgdGhhdCBmbGFnLiBIb3dldmVyLCBzeXprYWxsZXIgZG9lcyBub3QgdXNlIHRoYXQgZmxhZyBieSBkZWZhdWx0LiBJZiBpdCAqZGlkKiB1c2UgdGhlIGZsYWcsIHRoZW4gdGhlIGhvc3Qga2VybmVsIHJ1bm5pbmcgaW4gUUVNVSB3b3VsZCB0aGVuIGF0dGVtcHQgdG8gZW5hYmxlIFNFVi1TTlAgZnVuY3Rpb25hbGl0eS4gQnV0IGhlcmUmIzM5O3MgdGhlIGtpY2tlcjogZW5hYmxpbmcgU0VWLVNOUCAqcmVxdWlyZXMqIGhhcmR3YXJlIHN1cHBvcnQ6IHRoZSBNU1JzLCB0aGUgQ1BVSUQgZmVhdHVyZXMsIGFuZCB0aGUgUk1QIHRhYmxlLiBRRU1VIGRvZXMgKm5vdCogZW11bGF0ZSBTRVYtU05QIGhvc3QgZmVhdHVyZXM7IGl0ICpjYW4qIGVtdWxhdGUgYW4gU0VWLVNOUCBndWVzdCwgYnV0IG5vdCBhIFNFVi1TTlAgaG9zdC4gVGhlcmVmb3JlLCBldmVuIGlmIHdlICpjb3VsZCogY2xlYXIgYFg4Nl9GRUFUVVJFX0hZUEVSVklTT1JgLCBgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKWAgd291bGQgc3RpbGwgZmFpbCBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHJlcXVpcmVtZW50cyB3b3VsZG4mIzM5O3QgYmUgcHJlc2VudC4KClNvLCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhci4gVGhlIGNvcmUgbG9naWMgb2YgdGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSB1bnJlYWNoYWJsZSBpbiBhbnkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVSwgcmVnYXJkbGVzcyBvZiBob3cgd2UgY29uZmlndXJlIHRoZSB2aXJ0dWFsIG1hY2hpbmUuIEl0JiMzOTtzIHNpbXBseSBpbXBvc3NpYmxlIHRvIHRyaWdnZXIgdGhlIGludGVuZGVkIGJlaGF2aW9yLiBUaGVyZWZvcmUsIHRoaXMgaXMgbm90IHdvcnRoIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbiwgd2hpY2ggaXMgcGFydCBvZiB0aGUgQU1EIFNFVi1TTlAgKFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gLSBTZWN1cmUgTmVzdGVkIFBhZ2luZykgaG9zdCBzdXBwb3J0LiBBbGwgdGhlIG1vZGlmaWVkIGFuZCBhZGRlZCBmdW5jdGlvbnMgKGUuZy4sIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0sIHNucF9zZXR1cF9ybXBvcHQsIHNucF9wcmVwYXJlLCBzbnBfc2h1dGRvd24pIGFyZSBndWFyZGVkIGJ5IGNoZWNrcyBmb3IgQ0NfQVRUUl9IT1NUX1NFVl9TTlAgb3IgZXhwbGljaXRseSByZXF1aXJlIHRoZSBhYnNlbmNlIG9mIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IuIFNpbmNlIHN5emthbGxlciBydW5zIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoR0NFL1FFTVUpIHdoZXJlIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IgaXMgc2V0IGFuZCBTRVYtU05QIGhvc3QgaGFyZHdhcmUgZmVhdHVyZXMgYXJlIG5vdCBlbXVsYXRlZCwgdGhpcyBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBBTUQgUk1QT1BUIGluc3RydWN0aW9uLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBBTUQgU0VWLVNOUCAoU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAtIFNlY3VyZSBOZXN0ZWQgUGFnaW5nKSBob3N0IHN1cHBvcnQuIEFsbCB0aGUgbW9kaWZpZWQgYW5kIGFkZGVkIGZ1bmN0aW9ucyAoZS5nLiwgc25wX3JtcG9wdF9hbGxfcGh5c21lbSwgc25wX3NldHVwX3JtcG9wdCwgc25wX3ByZXBhcmUsIHNucF9zaHV0ZG93bikgYXJlIGd1YXJkZWQgYnkgY2hlY2tzIGZvciBDQ19BVFRSX0hPU1RfU0VWX1NOUCBvciBleHBsaWNpdGx5IHJlcXVpcmUgdGhlIGFic2VuY2Ugb2YgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUi4gU2luY2Ugc3l6a2FsbGVyIHJ1bnMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChHQ0UvUUVNVSkgd2hlcmUgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUiBpcyBzZXQgYW5kIFNFVi1TTlAgaG9zdCBoYXJkd2FyZSBmZWF0dXJlcyBhcmUgbm90IGVtdWxhdGVkLCB0aGlzIGNvZGUgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozMjo1OS41MjQzOTQ1NTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI3OTgwMjYxODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBBTUQgUk1QT1BUIGluc3RydWN0aW9uLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBBTUQgU0VWLVNOUCAoU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAtIFNlY3VyZSBOZXN0ZWQgUGFnaW5nKSBob3N0IHN1cHBvcnQuIEFsbCB0aGUgbW9kaWZpZWQgYW5kIGFkZGVkIGZ1bmN0aW9ucyAoZS5nLiwgc25wX3JtcG9wdF9hbGxfcGh5c21lbSwgc25wX3NldHVwX3JtcG9wdCwgc25wX3ByZXBhcmUsIHNucF9zaHV0ZG93bikgYXJlIGd1YXJkZWQgYnkgY2hlY2tzIGZvciBDQ19BVFRSX0hPU1RfU0VWX1NOUCBvciBleHBsaWNpdGx5IHJlcXVpcmUgdGhlIGFic2VuY2Ugb2YgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUi4gU2luY2Ugc3l6a2FsbGVyIHJ1bnMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChHQ0UvUUVNVSkgd2hlcmUgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUiBpcyBzZXQgYW5kIFNFVi1TTlAgaG9zdCBoYXJkd2FyZSBmZWF0dXJlcyBhcmUgbm90IGVtdWxhdGVkLCB0aGlzIGNvZGUgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjMyOjU5LjUyNDQwMTk3N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MjY4Mjc3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDRiZjA3NjAzMTVmZjQ1NGVkNjI1YTQxNGM2NzdiMWRkYmY4MDNiNGZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMjM6MzI6NTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcXG5pbmRleCAzZDA5NDBhM2I5ZjM3Li5kYmNjZGU5ZWU1Y2Q1IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXFxuQEAgLTc2LDcgKzc2LDcgQEBcXG4gI2RlZmluZSBYODZfRkVBVFVSRV9LOFxcdFxcdFxcdCggMyozMisgNCkgLyogT3B0ZXJvbiwgQXRobG9uNjQgKi9cXG4gI2RlZmluZSBYODZfRkVBVFVSRV9aRU41XFx0XFx0KCAzKjMyKyA1KSAvKiBDUFUgYmFzZWQgb24gWmVuNSBtaWNyb2FyY2hpdGVjdHVyZSAqL1xcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1pFTjZcXHRcXHQoIDMqMzIrIDYpIC8qIENQVSBiYXNlZCBvbiBaZW42IG1pY3JvYXJjaGl0ZWN0dXJlICovXFxuLS8qIEZyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDMqMzIrIDcpICovXFxuKyNkZWZpbmUgWDg2X0ZFQVRVUkVfUk1QT1BUXFx0XFx0KCAzKjMyKyA3KSAvKiBTdXBwb3J0IGZvciBBTUQgUk1QT1BUIGluc3RydWN0aW9uICovXFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDXFx0KCAzKjMyKyA4KSAvKiBcXFwiY29uc3RhbnRfdHNjXFxcIiBUU0MgdGlja3MgYXQgYSBjb25zdGFudCByYXRlICovXFxuIC8qIGZyZWU6IHdhcyAjZGVmaW5lIFg4Nl9GRUFUVVJFX1VQXFx0KCAzKjMyKyA5KSAqIFxcXCJ1cFxcXCIgU01QIGtlcm5lbCBydW5uaW5nIG9uIFVQICovXFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfQVJUXFx0XFx0XFx0KCAzKjMyKzEwKSAvKiBcXFwiYXJ0XFxcIiBBbHdheXMgcnVubmluZyB0aW1lciAoQVJUKSAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXFxuaW5kZXggMThjNGJlNzVlOTI3MS4uZDJjYjBhN2NkMGEyZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXFxuQEAgLTc2MSw2ICs3NjEsOSBAQFxcbiAjZGVmaW5lIE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRURfQklUXFx0MFxcbiAjZGVmaW5lIE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRURcXHRCSVRfVUxMKE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRURfQklUKVxcbiAjZGVmaW5lIE1TUl9BTUQ2NF9STVBfU0VHTUVOVF9TSElGVCh4KVxcdCgoKHgpIFxcdTAwMjYgR0VOTUFTS19VTEwoMTMsIDgpKSBcXHUwMDNlXFx1MDAzZSA4KVxcbisjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfQkFTRVxcdFxcdDB4YzAwMTAxMzlcXG4rI2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRV9CSVRcXHQwXFxuKyNkZWZpbmUgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVcXHRcXHRCSVRfVUxMKE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFX0JJVClcXG4gXFxuICNkZWZpbmUgTVNSX1NWU01fQ0FBXFx0XFx0XFx0MHhjMDAxZjAwMFxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaFxcbmluZGV4IDU5NGNmYTE5Y2JkNGIuLjA5YjFjNWQzMzc5MDIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaFxcbkBAIC02NjIsNiArNjYyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNucF9sZWFrX3BhZ2VzKHU2NCBwZm4sIHVuc2lnbmVkIGludCBwYWdlcylcXG4gXFx0X19zbnBfbGVha19wYWdlcyhwZm4sIHBhZ2VzLCB0cnVlKTtcXG4gfVxcbiBpbnQgc25wX3ByZXBhcmUodm9pZCk7XFxuK3ZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKTtcXG4rdm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpO1xcbiB2b2lkIHNucF9zaHV0ZG93bih2b2lkKTtcXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSBib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9XFxuQEAgLTY4MCw2ICs2ODIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc25wX2xlYWtfcGFnZXModTY0IHBmbiwgdW5zaWduZWQgaW50IG5wYWdlcykge31cXG4gc3RhdGljIGlubGluZSB2b2lkIGtkdW1wX3Nldl9jYWxsYmFjayh2b2lkKSB7IH1cXG4gc3RhdGljIGlubGluZSB2b2lkIHNucF9maXh1cF9lODIwX3RhYmxlcyh2b2lkKSB7fVxcbiBzdGF0aWMgaW5saW5lIGludCBzbnBfcHJlcGFyZSh2b2lkKSB7IHJldHVybiAtRU5PREVWOyB9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpIHt9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2h1dGRvd24odm9pZCkge31cXG4gI2VuZGlmXFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xcbmluZGV4IDkzNzEyOWNlNmE5NjQuLjAyMWMwYmYyMmRlMjAgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcXG5AQCAtNjcsNiArNjcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNwdWlkX2JpdCBjcHVpZF9iaXRzW10gPSB7XFxuIFxcdHsgWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMixcXHRcXHRDUFVJRF9FQVgsICAwLCAweDgwMDAwMDIyLCAwIH0sXFxuIFxcdHsgWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMixcXHRcXHRDUFVJRF9FQVgsICAxLCAweDgwMDAwMDIyLCAwIH0sXFxuIFxcdHsgWDg2X0ZFQVRVUkVfQU1EX0xCUl9QTUNfRlJFRVpFLFxcdENQVUlEX0VBWCwgIDIsIDB4ODAwMDAwMjIsIDAgfSxcXG4rXFx0eyBYODZfRkVBVFVSRV9STVBPUFQsXFx0XFx0XFx0Q1BVSURfRURYLCAgMCwgMHg4MDAwMDAyNSwgMCB9LFxcbiBcXHR7IFg4Nl9GRUFUVVJFX0FNRF9IVFJfQ09SRVMsXFx0XFx0Q1BVSURfRUFYLCAzMCwgMHg4MDAwMDAyNiwgMCB9LFxcbiBcXHR7IDAsIDAsIDAsIDAsIDAgfVxcbiB9O1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xcbmluZGV4IDQyNzIyOTM0Nzg3NjYuLmM1NzQ4NDliMTU4NzggMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG5AQCAtMjk5Miw2ICsyOTkyLDE2IEBAIHZvaWQgc2V2X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKHNucF9kZWNvbW1pc3Npb25fY29udGV4dChrdm0pKVxcbiBcXHRcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBQZXJmb3JtIFJNUCBvcHRpbWl6YXRpb25zIG9uIG1lbW9yeSBmcmVlZCBieSB0ZXJtaW5hdGluZ1xcbitcXHRcXHQgKiBndWVzdHMuICBUaGUgc2NhbiBpcyBkZWZlcnJlZCwgc28gaXQgbm9ybWFsbHkgcnVucyBhZnRlclxcbitcXHRcXHQgKiBzZXZfZ21lbV9pbnZhbGlkYXRlKCkgaGFzIGNvbnZlcnRlZCB0aGlzIGd1ZXN0J3MgcGFnZXMgYmFjayB0b1xcbitcXHRcXHQgKiBzaGFyZWQsIGFuZCBwaWNrcyB0aGVtIHVwIHRoZW4uICBBIHZlcnkgbGFyZ2UgZ3Vlc3Qgd2hvc2VcXG4rXFx0XFx0ICogY29udmVyc2lvbiBoYXMgbm90IGZpbmlzaGVkIGJ5IHRoZW4gaXMgcGlja2VkIHVwIGJ5IGEgbGF0ZXJcXG4rXFx0XFx0ICogdGVhcmRvd24ncyBzY2FuLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c25wX3JtcG9wdF9hbGxfcGh5c21lbSgpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRzZXZfdW5iaW5kX2FzaWQoa3ZtLCBzZXYtXFx1MDAzZWhhbmRsZSk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC9zdm0vc2V2LmMgYi9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY1xcbmluZGV4IGNmZjI4NWQ4YWQ4ZTMuLjAzNGVkNTQ3YWMyODEgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvdmlydC9zdm0vc2V2LmNcXG4rKysgYi9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY1xcbkBAIC0xOSw2ICsxOSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb21tdS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYW1kLWlvbW11LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ub3NwZWMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9zZXYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wcm9jZXNzb3IuaFxcdTAwM2VcXG5AQCAtMTI0LDYgKzEyNSwxOCBAQCBzdGF0aWMgdm9pZCAqcm1wX2Jvb2trZWVwaW5nIF9fcm9fYWZ0ZXJfaW5pdDtcXG4gXFxuIHN0YXRpYyB1NjQgcHJvYmVkX3JtcF9iYXNlLCBwcm9iZWRfcm1wX3NpemU7XFxuIFxcbitzdGF0aWMgY3B1bWFza192YXJfdCBybXBvcHRfY3B1bWFzaywgcm1wb3B0X2ZvbGxvd2VyX21hc2s7XFxuK3N0YXRpYyB1NjQgcm1wb3B0X3BhX3N0YXJ0LCBybXBvcHRfcGFfZW5kO1xcbitcXG4rZW51bSBybXBvcHRfb3BfdHlwZSB7XFxuK1xcdFJNUE9QVF9PUF9WRVJJRllfQU5EX1JFUE9SVF9TVEFUVVMsXFxuK1xcdFJNUE9QVF9PUF9SRVBPUlRfU1RBVFVTXFxuK307XFxuK1xcbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJtcG9wdF93cTtcXG4rc3RhdGljIHN0cnVjdCBkZWxheWVkX3dvcmsgcm1wb3B0X2RlbGF5ZWRfd29yaztcXG4rc3RhdGljIERFRklORV9NVVRFWChybXBvcHRfd3FfbXV0ZXgpO1xcbitcXG4gc3RhdGljIExJU1RfSEVBRChzbnBfbGVha2VkX3BhZ2VzX2xpc3QpO1xcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNucF9sZWFrZWRfcGFnZXNfbGlzdF9sb2NrKTtcXG4gXFxuQEAgLTUxMyw3ICs1MjYsNiBAQCBzdGF0aWMgdm9pZCBjbGVhcl9oc2F2ZV9wYSh2b2lkICphcmcpXFxuIFxcbiBpbnQgc25wX3ByZXBhcmUodm9pZClcXG4ge1xcbi1cXHRpbnQgcmV0O1xcbiBcXHR1NjQgdmFsO1xcbiBcXG4gXFx0LypcXG5AQCAtNTI2LDE0ICs1MzgsMTggQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpXFxuIFxcbiBcXHRjbGVhcl9ybXAoKTtcXG4gXFxuLVxcdGNwdXNfcmVhZF9sb2NrKCk7XFxuK1xcdC8qXFxuK1xcdCAqIE5vIENQVSBtYXkgY29tZSBvbmxpbmUgd2l0aG91dCBTbnBFbiB3aGlsZSBTTlAgaXMgYWN0aXZlOyBkaXNhYmxlXFxuK1xcdCAqIGhvdHBsdWcgaGVyZSBhbmQgcmUtZW5hYmxlIGl0IGluIHNucF9zaHV0ZG93bigpLlxcbitcXHQgKi9cXG4rXFx0Y3B1X2hvdHBsdWdfZGlzYWJsZSgpO1xcbiBcXG4gXFx0aWYgKCFjcHVtYXNrX2VxdWFsKGNwdV9vbmxpbmVfbWFzaywgY3B1X3ByZXNlbnRfbWFzaykpIHtcXG4tXFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdGNwdV9ob3RwbHVnX2VuYWJsZSgpO1xcbiBcXHRcXHRwcl93YXJuKFxcXCJTTlAgaW5pdCBmYWlsZWQ6IG5vdCBhbGwgQ1BVcyBvbmxpbmUuICglKnBibCBvbmxpbmUgXFx1MDAzYy1cXHUwMDNlICUqcGJsIHByZXNlbnQgbWFza3MpLlxcXFxuXFxcIixcXG4gXFx0XFx0XFx0Y3B1bWFza19wcl9hcmdzKGNwdV9vbmxpbmVfbWFzayksXFxuIFxcdFxcdFxcdGNwdW1hc2tfcHJfYXJncyhjcHVfcHJlc2VudF9tYXNrKSk7XFxuLVxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcdH1cXG4gXFxuIFxcdHdiaW52ZF9vbl9hbGxfY3B1cygpO1xcbkBAIC01NDgsMTQgKzU2NCwzNyBAQCBpbnQgc25wX3ByZXBhcmUodm9pZClcXG4gXFx0LyogU05QX0lOSVQgcmVxdWlyZXMgTVNSX1ZNX0hTQVZFX1BBIHRvIGJlIGNsZWFyZWQgb24gYWxsIENQVXMuICovXFxuIFxcdG9uX2VhY2hfY3B1KGNsZWFyX2hzYXZlX3BhLCBOVUxMLCAxKTtcXG4gXFxuLVxcdHJldCA9IDA7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3ByZXBhcmUsIFxcXCJjY3BcXFwiKTtcXG4gXFxuLXVubG9jazpcXG4tXFx0Y3B1c19yZWFkX3VubG9jaygpO1xcbitzdGF0aWMgdm9pZCBzbnBfY2xlYW51cF9ybXBvcHQodm9pZClcXG4re1xcbitcXHRpbnQgY3B1O1xcbiBcXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZybXBvcHRfd3FfbXV0ZXgpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogcm1wb3B0X3dxIGlzIG5vbi1OVUxMIG9ubHkgYWZ0ZXIgUk1QT1BUIGhhcyBiZWVuIGZ1bGx5IHNldCB1cDogdGhlXFxuK1xcdCAqIHdvcmtxdWV1ZSBhbmQgY3B1bWFza3MgYXJlIGFsbG9jYXRlZCBhbmQgdGhlIFJNUE9QVF9CQVNFIE1TUnMgYXJlXFxuK1xcdCAqIHByb2dyYW1tZWQuICBzbnBfc2V0dXBfcm1wb3B0KCkgcmVzZXRzIGl0IHRvIE5VTEwgaWYgYW55IG9mIHRob3NlXFxuK1xcdCAqIHN0ZXBzIGZhaWwsIHNvIGEgTlVMTCBybXBvcHRfd3EgbWVhbnMgbm90aGluZyB3YXMgc2V0IHVwIGFuZCB0aGVyZSBpc1xcbitcXHQgKiBub3RoaW5nIHRvIHRlYXIgZG93bi5cXG4rXFx0ICovXFxuK1xcdGlmICghcm1wb3B0X3dxKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmspO1xcbitcXHRkZXN0cm95X3dvcmtxdWV1ZShybXBvcHRfd3EpO1xcbitcXG4rXFx0Zm9yX2VhY2hfY3B1KGNwdSwgcm1wb3B0X2NwdW1hc2spXFxuK1xcdFxcdHdybXNycV9vbl9jcHUoY3B1LCBNU1JfQU1ENjRfUk1QT1BUX0JBU0UsIDApO1xcbitcXG4rXFx0ZnJlZV9jcHVtYXNrX3ZhcihybXBvcHRfY3B1bWFzayk7XFxuK1xcdGZyZWVfY3B1bWFza192YXIocm1wb3B0X2ZvbGxvd2VyX21hc2spO1xcbitcXHRybXBvcHRfcGFfc3RhcnQgPSBybXBvcHRfcGFfZW5kID0gMDtcXG4rXFx0cm1wb3B0X3dxID0gTlVMTDtcXG4gfVxcbi1FWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9wcmVwYXJlLCBcXFwiY2NwXFxcIik7XFxuIFxcbiB2b2lkIHNucF9zaHV0ZG93bih2b2lkKVxcbiB7XFxuQEAgLTU2NSwxMSArNjA0LDIxNCBAQCB2b2lkIHNucF9zaHV0ZG93bih2b2lkKVxcbiBcXHRpZiAoc3lzY2ZnIFxcdTAwMjYgTVNSX0FNRDY0X1NZU0NGR19TTlBfRU4pXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdC8qIERpc2FibGUgUk1QT1BUIHdoaWxlIENQVSBob3RwbHVnIGlzIGRpc2FibGVkLiAqL1xcbitcXHRzbnBfY2xlYW51cF9ybXBvcHQoKTtcXG4rXFxuIFxcdGNsZWFyX3JtcCgpO1xcbiBcXHRvbl9lYWNoX2NwdShtZmRfcmVjb25maWd1cmUsIE5VTEwsIDEpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIGZpcm13YXJlIGhhcyBkaXNhYmxlZCBTTlAgKFNucEVuIGlzIGNsZWFyKSwgc28gcmUtZW5hYmxlIENQVVxcbitcXHQgKiBob3RwbHVnLiAgQSBsZWdhY3kgU05QIHNodXRkb3duIHJldHVybnMgYWJvdmUgd2l0aCBTbnBFbiBzdGlsbCBzZXQgYW5kXFxuK1xcdCAqIGxlYXZlcyBob3RwbHVnIGRpc2FibGVkLlxcbitcXHQgKi9cXG4rXFx0Y3B1X2hvdHBsdWdfZW5hYmxlKCk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2h1dGRvd24sIFxcXCJjY3BcXFwiKTtcXG4gXFxuK3N0YXRpYyBib29sIHJtcG9wdF9jYXBhYmxlKHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QT1BUKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG4rfVxcbitcXG4rLypcXG4rICogUk1QT1BUIG9wdGltaXphdGlvbnMgc2tpcCBSTVAgY2hlY2tzIGF0IDFHQiBncmFudWxhcml0eSBpZiB0aGlzIHJhbmdlIG9mXFxuKyAqIG1lbW9yeSBkb2VzIG5vdCBjb250YWluIGFueSBTTlAgZ3Vlc3QgbWVtb3J5LlxcbisgKlxcbisgKiBAcGEgaXMgYSBzeXN0ZW0gcGh5c2ljYWwgYWRkcmVzczsgUk1QT1BUIG9wZXJhdGVzIG9uIHRoZSBjb250YWluaW5nIDFHQi5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHJtcG9wdCh1NjQgcGEpXFxuK3tcXG4rXFx0dTY0IHBhX3N0YXJ0ID0gQUxJR05fRE9XTihwYSwgU1pfMUcpO1xcbitcXHRlbnVtIHJtcG9wdF9vcF90eXBlIG9wID0gUk1QT1BUX09QX1ZFUklGWV9BTkRfUkVQT1JUX1NUQVRVUztcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFJNUE9QVCAoRjIgMEYgMDEgRkMpOiBSQVggPSAxR0ItYWxpZ25lZCBTUEEsIFJDWCA9IG9wIHR5cGUsIENGIHNldCBpZlxcbitcXHQgKiB0aGUgcmFuZ2Ugd2FzIG9wdGltaXplZCAocmVzdWx0IHVudXNlZCBvbiB0aGlzIHBhdGgpLlxcbitcXHQgKlxcbitcXHQgKiBCaW51dGlscyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBSTVBPUFQgbW5lbW9uaWMgeWV0LCBzbyB0aGUgaW5zdHJ1Y3Rpb25cXG4rXFx0ICogaXMgZW5jb2RlZCB3aXRoIC5ieXRlLlxcbitcXHQgKi9cXG4rXFx0YXNtIHZvbGF0aWxlKFxcXCIuYnl0ZSAweGYyLCAweDBmLCAweDAxLCAweGZjXFxcIlxcbitcXHRcXHQgICAgIDo6IFxcXCJhXFxcIiAocGFfc3RhcnQpLCBcXFwiY1xcXCIgKG9wKVxcbitcXHRcXHQgICAgIDogXFxcIm1lbW9yeVxcXCIsIFxcXCJjY1xcXCIpO1xcbit9XFxuK1xcbisvKiBvbl9lYWNoX2NwdSgpIGNhbGxiYWNrOiBvcHRpbWl6ZSB0aGUgd2hvbGUgUk1QT1BUIHJhbmdlIG9uIHRoaXMgQ1BVLiAqL1xcbitzdGF0aWMgdm9pZCBybXBvcHRfc2Nhbl9yYW5nZSh2b2lkICphcmcpXFxuK3tcXG4rXFx0dTY0IHBhO1xcbitcXG4rXFx0Zm9yIChwYSA9IHJtcG9wdF9wYV9zdGFydDsgcGEgXFx1MDAzYyBybXBvcHRfcGFfZW5kOyBwYSArPSBTWl8xRylcXG4rXFx0XFx0cm1wb3B0KHBhKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcm1wb3B0X3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0aW50IHRoaXNfY3B1O1xcbitcXG4rXFx0LypcXG4rXFx0ICogUk1QT1BUIHNjYW5zIHRoZSBSTVAgdGFibGUsIHN0b3JlcyB0aGUgcmVzdWx0IG9mIHRoZSBzY2FuIGluIHRoZVxcbitcXHQgKiByZXNlcnZlZCBwcm9jZXNzb3IgbWVtb3J5LiBUaGUgUk1QIHNjYW4gaXMgdGhlIG1vc3QgZXhwZW5zaXZlXFxuK1xcdCAqIHBhcnQuIElmIGEgc2Vjb25kIFJNUE9QVCBvY2N1cnMsIGl0IGNhbiBza2lwIHRoZSBleHBlbnNpdmUgc2NhblxcbitcXHQgKiBpZiB0aGV5IGNhbiBzZWUgYSBjYWNoZWQgcmVzdWx0IGluIHRoZSByZXNlcnZlZCBwcm9jZXNzb3IgbWVtb3J5LlxcbitcXHQgKlxcbitcXHQgKiBSdW4gUk1QT1BUIG9uIG9uZSBDUFUgZmlyc3QgKHRoZSBsZWFkZXIpLCB0aGVuIG9uIGV2ZXJ5IG90aGVyIHByaW1hcnlcXG4rXFx0ICogdGhyZWFkICh0aGUgZm9sbG93ZXJzKS4gIEEgZm9sbG93ZXIgc2tpcHMgdGhlIGV4cGVuc2l2ZSBSTVAgc2NhbiBieVxcbitcXHQgKiByZXVzaW5nIHRoZSBjYWNoZWQgc2NhbiByZXN1bHRzIHRoZSBsZWFkZXIgcHJvZHVjZWQuXFxuK1xcdCAqXFxuK1xcdCAqIG1pZ3JhdGVfZGlzYWJsZSgpIHBpbnMgdGhpcyB3b3JrIHRvIHRoZSBjdXJyZW50IENQVSBzbyBpdCBzdGF5cyB0aGVcXG4rXFx0ICogbGVhZGVyIGZvciB0aGUgd2hvbGUgbGVhZGVyIGxvb3A6IHRoaXNfY3B1IHJlbWFpbnMgdmFsaWQgYW5kIHRoZVxcbitcXHQgKiBSTVBPUFQgaW5zdHJ1Y3Rpb24gcnVucyBvbiBpdC5cXG4rXFx0ICovXFxuK1xcdG1pZ3JhdGVfZGlzYWJsZSgpO1xcbitcXHR0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTtcXG4rXFxuK1xcdGNwdW1hc2tfYW5kbm90KHJtcG9wdF9mb2xsb3dlcl9tYXNrLCBybXBvcHRfY3B1bWFzayxcXG4rXFx0XFx0ICAgICAgIHRvcG9sb2d5X3NpYmxpbmdfY3B1bWFzayh0aGlzX2NwdSkpO1xcbitcXG4rXFx0cm1wb3B0X3NjYW5fcmFuZ2UoTlVMTCk7XFxuK1xcbitcXHRtaWdyYXRlX2VuYWJsZSgpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRm9sbG93ZXJzOiBvbmUgSVBJIHBlciByZW1haW5pbmcgY29yZSwgZWFjaCBvcHRpbWl6aW5nIHRoZSB3aG9sZVxcbitcXHQgKiByYW5nZS4gIEVhY2ggcnVucyB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQsIGJ1dCBvbmx5IGlzc3VlcyBjYWNoZS1oaXRcXG4rXFx0ICogUk1QT1BUcyAodGhlIGxlYWRlciBwb3B1bGF0ZWQgdGhlIHNjYW4gY2FjaGUgYWJvdmUpLCBzbyB0aGUgd2luZG93IGlzXFxuK1xcdCAqIHNob3J0LiAgY3B1c19yZWFkX2xvY2soKSBpcyBpbnRlbnRpb25hbGx5IG5vdCBoZWxkOiBDUFUgaG90cGx1ZyBpc1xcbitcXHQgKiBkaXNhYmxlZCB0aGUgZW50aXJlIHRpbWUgU05QIGlzIGFjdGl2ZSAoc2VlIHNucF9wcmVwYXJlKCkpLCBhbmQgdGhpc1xcbitcXHQgKiB3b3JrIG9ubHkgcnVucyB3aGlsZSBTTlAgaXMgYWN0aXZlLCBzbyB0aGUgZm9sbG93ZXIgc2V0IHN0YXlzIHZhbGlkLlxcbitcXHQgKi9cXG4rXFx0b25fZWFjaF9jcHVfbWFzayhybXBvcHRfZm9sbG93ZXJfbWFzaywgcm1wb3B0X3NjYW5fcmFuZ2UsIE5VTEwsIHRydWUpO1xcbit9XFxuK1xcbisvKlxcbisgKiBEZWxheSwgaW4gbWlsbGlzZWNvbmRzLCBiZWZvcmUgdGhlIFJNUCByZS1vcHRpbWl6YXRpb24gcGFzcyBydW5zIGFmdGVyIGFuXFxuKyAqIFNOUCBndWVzdCBpcyB0b3JuIGRvd24uICBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKCkgcmUtYXJtcyB0aGUgZGVsYXllZCB3b3JrXFxuKyAqIHdpdGggbW9kX2RlbGF5ZWRfd29yaygpIG9uIGVhY2ggdGVhcmRvd24sIHNvIHRoZSBwYXNzIGZpcmVzIHRoaXMgbG9uZyBhZnRlclxcbisgKiB0aGUgbGFzdCB0ZWFyZG93bi4gIFRoaXMgY29hbGVzY2VzIGEgYnVyc3Qgb2YgdGVhcmRvd25zIGludG8gYSBzaW5nbGUgc2NhblxcbisgKiBhbmQgZ2l2ZXMgZWFjaCBndWVzdCdzIHBhZ2VzIHRpbWUgdG8gYmUgY29udmVydGVkIGJhY2sgdG8gdGhlIHNoYXJlZCxcXG4rICogaHlwZXJ2aXNvci1vd25lZCBzdGF0ZSBiZWZvcmUgdGhlIHNjYW4gcmUtb3B0aW1pemVzIHRoZWlyIDFHQiByZWdpb25zLiAgVGhlXFxuKyAqIDEwIHNlY29uZCB2YWx1ZSBpcyBhIGhldXJpc3RpYyB0cmFkaW5nIHJlLW9wdGltaXphdGlvbiBsYXRlbmN5IGFnYWluc3RcXG4rICogc2Nhbm5pbmcgdG9vIGVhZ2VybHkuXFxuKyAqL1xcbisjZGVmaW5lIFJNUE9QVF9XT1JLX1RJTUVPVVRcXHQoMTAgKiBNU0VDX1BFUl9TRUMpXFxuK1xcbit2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZClcXG4re1xcbitcXHRpZiAoIXJtcG9wdF9jYXBhYmxlKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2cm1wb3B0X3dxX211dGV4KTtcXG4rXFxuK1xcdGlmICghcm1wb3B0X3dxKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRtb2RfZGVsYXllZF93b3JrKHJtcG9wdF93cSwgXFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmssXFxuK1xcdFxcdFxcdCBtc2Vjc190b19qaWZmaWVzKFJNUE9QVF9XT1JLX1RJTUVPVVQpKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9ybXBvcHRfYWxsX3BoeXNtZW0sIFxcXCJrdm0tYW1kXFxcIik7XFxuK1xcbit2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZClcXG4re1xcbitcXHR1NjQgcm1wb3B0X2Jhc2U7XFxuK1xcdGludCBjcHU7XFxuK1xcbitcXHRpZiAoIXJtcG9wdF9jYXBhYmxlKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2cm1wb3B0X3dxX211dGV4KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE9uIHJlLWluaXRpYWxpemF0aW9uIGFmdGVyIGEgbGVnYWN5IFNOUCBzaHV0ZG93biAoU05QX1NIVVRET1dOX0VYXFxuK1xcdCAqIHdpdGggeDg2X3NucF9zaHV0ZG93bj0wKSwgc25wX3NodXRkb3duKCkgYW5kIHRodXMgc25wX2NsZWFudXBfcm1wb3B0KClcXG4rXFx0ICogYXJlIHNraXBwZWQsIHNvIHRoZSB3b3JrcXVldWUsIGRlbGF5ZWQgd29yaywgY3B1bWFzayBhbmQgcGVyLUNQVVxcbitcXHQgKiBSTVBPUFRfQkFTRSBNU1JzIGFyZSBzdGlsbCBzZXQgdXAgYW5kIHZhbGlkIChTbnBFbiBzdGF5ZWQgc2V0IGFuZFxcbitcXHQgKiBDUFUgaG90cGx1ZyBzdGF5ZWQgZGlzYWJsZWQpLiAgUmF0aGVyIHRoYW4gcmUtZG9pbmcgdGhlIHNldHVwLCB3aGljaFxcbitcXHQgKiB3b3VsZCBsZWFrIHRoZSBleGlzdGluZyBzdGF0ZSwganVzdCByZS1xdWV1ZSB0aGUgb3B0aW1pemF0aW9uIHBhc3NcXG4rXFx0ICogdG8gcmUtb3B0aW1pemUgYW55IG1lbW9yeSB0aGUgcHJldmlvdXMgU05QIHNlc3Npb24gZGUtb3B0aW1pemVkLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJtcG9wdF93cSkge1xcbitcXHRcXHRxdWV1ZV9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogQ3JlYXRlIGFuIFJNUE9QVC1zcGVjaWZpYyB3b3JrcXVldWUgdG8gYXZvaWQgc2NoZWR1bGluZ1xcbitcXHQgKiBSTVBPUFQgd29ya2l0ZW0gb24gdGhlIGdsb2JhbCBzeXN0ZW0gd29ya3F1ZXVlLlxcbitcXHQgKi9cXG4rXFx0cm1wb3B0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJybXBvcHRfd3FcXFwiLCBXUV9VTkJPVU5ELCAxKTtcXG4rXFx0aWYgKCFybXBvcHRfd3EpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gYWxsb2NhdGUgUk1QT1BUIHdvcmtxdWV1ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmssIHJtcG9wdF93b3JrX2hhbmRsZXIpO1xcbitcXG4rXFx0aWYgKCF6YWxsb2NfY3B1bWFza192YXIoXFx1MDAyNnJtcG9wdF9jcHVtYXNrLCBHRlBfS0VSTkVMKSkge1xcbitcXHRcXHRwcl9lcnIoXFxcIkZhaWxlZCB0byBhbGxvY2F0ZSBSTVBPUFQgY3B1bWFza1xcXFxuXFxcIik7XFxuK1xcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKHJtcG9wdF93cSk7XFxuK1xcdFxcdHJtcG9wdF93cSA9IE5VTEw7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCF6YWxsb2NfY3B1bWFza192YXIoXFx1MDAyNnJtcG9wdF9mb2xsb3dlcl9tYXNrLCBHRlBfS0VSTkVMKSkge1xcbitcXHRcXHRwcl9lcnIoXFxcIkZhaWxlZCB0byBhbGxvY2F0ZSBSTVBPUFQgZm9sbG93ZXIgY3B1bWFza1xcXFxuXFxcIik7XFxuK1xcdFxcdGZyZWVfY3B1bWFza192YXIocm1wb3B0X2NwdW1hc2spO1xcbitcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShybXBvcHRfd3EpO1xcbitcXHRcXHRybXBvcHRfd3EgPSBOVUxMO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBSTVBPUFRfQkFTRSBNU1IgaXMgcGVyLWNvcmUsIHNvIG9ubHkgb25lIHRocmVhZCBwZXIgY29yZSBuZWVkc1xcbitcXHQgKiB0byBzZXQgdXAgdGhlIFJNUE9QVF9CQVNFIE1TUi4gIEFsbCBwcmltYXJ5IHRocmVhZHMgYXJlIG9ubGluZSxcXG4rXFx0ICogb3RoZXJ3aXNlIFNOUCB3b3VsZCBub3QgaGF2ZSBiZWVuIGVuYWJsZWQuXFxuK1xcdCAqL1xcbitcXHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSlcXG4rXFx0XFx0aWYgKHRvcG9sb2d5X2lzX3ByaW1hcnlfdGhyZWFkKGNwdSkpXFxuK1xcdFxcdFxcdGNwdW1hc2tfc2V0X2NwdShjcHUsIHJtcG9wdF9jcHVtYXNrKTtcXG4rXFxuK1xcdHJtcG9wdF9wYV9zdGFydCA9IEFMSUdOX0RPV04oUEZOX1BIWVMobWluX2xvd19wZm4pLCBTWl8xRyk7XFxuK1xcdHJtcG9wdF9iYXNlID0gcm1wb3B0X3BhX3N0YXJ0IHwgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEU7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQZXItQ1BVIFJNUE9QVCB0YWJsZXMgY292ZXIgYXQgbW9zdCAyIFRCLiAgUHJvZ3JhbSBlYWNoIGNvcmUnc1xcbitcXHQgKiBSTVBPUFRfQkFTRSB3aXRoIHRoZSBzdGFydCBvZiBSQU0gdG8gb3B0aW1pemUgdXAgdG8gMiBUQi5cXG4rXFx0ICovXFxuK1xcdGZvcl9lYWNoX2NwdShjcHUsIHJtcG9wdF9jcHVtYXNrKVxcbitcXHRcXHR3cm1zcnFfb25fY3B1KGNwdSwgTVNSX0FNRDY0X1JNUE9QVF9CQVNFLCBybXBvcHRfYmFzZSk7XFxuK1xcbitcXHRybXBvcHRfcGFfZW5kID0gQUxJR04oUEZOX1BIWVMobWF4X3BmbiksIFNaXzFHKTtcXG4rXFxuK1xcdC8qIExpbWl0IG1lbW9yeSBzY2FubmluZyB0byAyVEIgb2YgUkFNICovXFxuK1xcdGlmICgocm1wb3B0X3BhX2VuZCAtIHJtcG9wdF9wYV9zdGFydCkgXFx1MDAzZSBTWl8yVCkge1xcbitcXHRcXHRwcl9pbmZvKFxcXCJSTVBPUFQgY292ZXJhZ2UgbGltaXRlZCB0byAyVEI7IG1lbW9yeSBhYm92ZSAweCVsbHggbm90IG9wdGltaXplZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cm1wb3B0X3BhX3N0YXJ0ICsgU1pfMlQpO1xcbitcXHRcXHRybXBvcHRfcGFfZW5kID0gcm1wb3B0X3BhX3N0YXJ0ICsgU1pfMlQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE9uY2UgYWxsIHBlci1DUFUgUk1QT1BUIHRhYmxlcyBoYXZlIGJlZW4gY29uZmlndXJlZCwgZW5hYmxlIFJNUE9QVFxcbitcXHQgKiBvcHRpbWl6YXRpb25zIG9uIGFsbCBwaHlzaWNhbCBtZW1vcnkuXFxuK1xcdCAqL1xcbitcXHRxdWV1ZV9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7XFxuK1xcbitcXHRwcl9pbmZvKFxcXCJSTVBPUFQgb3B0aW1pemF0aW9ucyBlbmFibGVkXFxcXG5cXFwiKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zZXR1cF9ybXBvcHQsIFxcXCJjY3BcXFwiKTtcXG4rXFxuIC8qXFxuICAqIERvIHRoZSBuZWNlc3NhcnkgcHJlcGFyYXRpb25zIHdoaWNoIGFyZSB2ZXJpZmllZCBieSB0aGUgZmlybXdhcmUgYXNcXG4gICogZGVzY3JpYmVkIGluIHRoZSBTTlBfSU5JVF9FWCBmaXJtd2FyZSBjb21tYW5kIGRlc2NyaXB0aW9uIGluIHRoZSBTTlBcXG5AQCAtNTc3LDYgKzgxOSw4IEBAIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCBcXFwiY2NwXFxcIik7XFxuICAqL1xcbiBpbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpXFxuIHtcXG4rXFx0dTY0IHZhbDtcXG4rXFxuIFxcdGlmIChXQVJOX09OX09OQ0UoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpKVxcbiBcXHRcXHRyZXR1cm4gLUVOT1NZUztcXG4gXFxuQEAgLTU4Niw2ICs4MzAsMTUgQEAgaW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxcbiBcXHRpZiAoIXNldHVwX3JtcHRhYmxlKCkpXFxuIFxcdFxcdHJldHVybiAtRU5PU1lTO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogT24gYSBrZXhlYyBib290IFNOUCBtYXkgYWxyZWFkeSBiZSBlbmFibGVkIChsZWdhY3kgZmlybXdhcmUgbGVhdmVzXFxuK1xcdCAqIFNucEVuIHNldCBhY3Jvc3Mgc2h1dGRvd24pLCBpbiB3aGljaCBjYXNlIHNucF9wcmVwYXJlKCkgYmFpbHMgd2l0aG91dFxcbitcXHQgKiBkaXNhYmxpbmcgQ1BVIGhvdHBsdWcsIHNvIGRpc2FibGUgaXQgaGVyZS5cXG4rXFx0ICovXFxuK1xcdHJkbXNycShNU1JfQU1ENjRfU1lTQ0ZHLCB2YWwpO1xcbitcXHRpZiAodmFsIFxcdTAwMjYgTVNSX0FNRDY0X1NZU0NGR19TTlBfRU4pXFxuK1xcdFxcdGNwdV9ob3RwbHVnX2Rpc2FibGUoKTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFNldHRpbmcgY3Jhc2hfa2V4ZWNfcG9zdF9ub3RpZmllcnMgdG8gJ3RydWUnIHRvIGVuc3VyZSB0aGF0IFNOUCBwYW5pY1xcbiBcXHQgKiBub3RpZmllciBpcyBpbnZva2VkIHRvIGRvIFNOUCBJT01NVSBzaHV0ZG93biBiZWZvcmUga2R1bXAuXFxuQEAgLTY4MywxMyArOTM2LDIxIEBAIHN0YXRpYyBib29sIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKHZvaWQpXFxuIFxcbiBib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpXFxuIHtcXG4tXFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU0VHTUVOVEVEX1JNUCkpXFxuK1xcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFR01FTlRFRF9STVApKSB7XFxuIFxcdFxcdHJkbXNycShNU1JfQU1ENjRfUk1QX0NGRywgcm1wX2NmZyk7XFxuIFxcbi1cXHRpZiAocm1wX2NmZyBcXHUwMDI2IE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRUQpXFxuLVxcdFxcdHJldHVybiBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbygpO1xcbi1cXHRlbHNlXFxuLVxcdFxcdHJldHVybiBwcm9iZV9jb250aWd1b3VzX3JtcHRhYmxlX2luZm8oKTtcXG4rXFx0XFx0aWYgKHJtcF9jZmcgXFx1MDAyNiBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEKVxcbitcXHRcXHRcXHRyZXR1cm4gcHJvYmVfc2VnbWVudGVkX3JtcHRhYmxlX2luZm8oKTtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogU2VnbWVudGVkIFJNUCBpcyBlaXRoZXIgbm90IHN1cHBvcnRlZCBvbiB0aGUgcGxhdGZvcm0gb3IgaXNcXG4rXFx0ICogZGlzYWJsZWQgYnkgdGhlIGZpcm13YXJlLiAgUk1QT1BUIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dFxcbitcXHQgKiBzZWdtZW50ZWQgUk1QLlxcbitcXHQgKi9cXG4rXFx0c2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9STVBPUFQpO1xcbitcXG4rXFx0cmV0dXJuIHByb2JlX2NvbnRpZ3VvdXNfcm1wdGFibGVfaW5mbygpO1xcbiB9XFxuIFxcbiAvKlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jIGIvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY1xcbmluZGV4IGNhNDczY2ExOThiODEuLmRhMTJkZGYxZjQxMjUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY1xcbisrKyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcXG5AQCAtMTUxMCw2ICsxNTEwLDggQEAgc3RhdGljIGludCBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoaW50ICplcnJvciwgdW5zaWduZWQgaW50IG1heF9zbnBfYXNpZClcXG4gXFxuIFxcdHNldl9lc190bXJfc2l6ZSA9IFNOUF9UTVJfU0laRTtcXG4gXFxuK1xcdHNucF9zZXR1cF9ybXBvcHQoKTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozMzowMC45Njc3MDM4MTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTEzNTQ2OTY5OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIEFNRCBSTVBPUFQgaW5zdHJ1Y3Rpb24sIHdoaWNoIGlzIHBhcnQgb2YgdGhlIEFNRCBTRVYtU05QIChTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIC0gU2VjdXJlIE5lc3RlZCBQYWdpbmcpIGhvc3Qgc3VwcG9ydC4gQWxsIHRoZSBtb2RpZmllZCBhbmQgYWRkZWQgZnVuY3Rpb25zIChlLmcuLCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtLCBzbnBfc2V0dXBfcm1wb3B0LCBzbnBfcHJlcGFyZSwgc25wX3NodXRkb3duKSBhcmUgZ3VhcmRlZCBieSBjaGVja3MgZm9yIENDX0FUVFJfSE9TVF9TRVZfU05QIG9yIGV4cGxpY2l0bHkgcmVxdWlyZSB0aGUgYWJzZW5jZSBvZiBYODZfRkVBVFVSRV9IWVBFUlZJU09SLiBTaW5jZSBzeXprYWxsZXIgcnVucyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKEdDRS9RRU1VKSB3aGVyZSBYODZfRkVBVFVSRV9IWVBFUlZJU09SIGlzIHNldCBhbmQgU0VWLVNOUCBob3N0IGhhcmR3YXJlIGZlYXR1cmVzIGFyZSBub3QgZW11bGF0ZWQsIHRoaXMgY29kZSBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCB0ZXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGJmMDc2MDMxNWZmNDU0ZWQ2MjVhNDE0YzY3N2IxZGRiZjgwM2I0ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDIzOjMyOjU3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbmluZGV4IDNkMDk0MGEzYjlmMzcuLmRiY2NkZTllZTVjZDUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG5AQCAtNzYsNyArNzYsNyBAQFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfSzhcdFx0XHQoIDMqMzIrIDQpIC8qIE9wdGVyb24sIEF0aGxvbjY0ICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9aRU41XHRcdCggMyozMisgNSkgLyogQ1BVIGJhc2VkIG9uIFplbjUgbWljcm9hcmNoaXRlY3R1cmUgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1pFTjZcdFx0KCAzKjMyKyA2KSAvKiBDUFUgYmFzZWQgb24gWmVuNiBtaWNyb2FyY2hpdGVjdHVyZSAqL1xuLS8qIEZyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDMqMzIrIDcpICovXG4rI2RlZmluZSBYODZfRkVBVFVSRV9STVBPUFRcdFx0KCAzKjMyKyA3KSAvKiBTdXBwb3J0IGZvciBBTUQgUk1QT1BUIGluc3RydWN0aW9uICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9DT05TVEFOVF9UU0NcdCggMyozMisgOCkgLyogXCJjb25zdGFudF90c2NcIiBUU0MgdGlja3MgYXQgYSBjb25zdGFudCByYXRlICovXG4gLyogZnJlZTogd2FzICNkZWZpbmUgWDg2X0ZFQVRVUkVfVVBcdCggMyozMisgOSkgKiBcInVwXCIgU01QIGtlcm5lbCBydW5uaW5nIG9uIFVQICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9BUlRcdFx0XHQoIDMqMzIrMTApIC8qIFwiYXJ0XCIgQWx3YXlzIHJ1bm5pbmcgdGltZXIgKEFSVCkgKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXG5pbmRleCAxOGM0YmU3NWU5MjcxLi5kMmNiMGE3Y2QwYTJmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXG5AQCAtNzYxLDYgKzc2MSw5IEBAXG4gI2RlZmluZSBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVFx0MFxuICNkZWZpbmUgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRFx0QklUX1VMTChNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVClcbiAjZGVmaW5lIE1TUl9BTUQ2NF9STVBfU0VHTUVOVF9TSElGVCh4KVx0KCgoeCkgXHUwMDI2IEdFTk1BU0tfVUxMKDEzLCA4KSkgXHUwMDNlXHUwMDNlIDgpXG4rI2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0JBU0VcdFx0MHhjMDAxMDEzOVxuKyNkZWZpbmUgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVfQklUXHQwXG4rI2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRVx0XHRCSVRfVUxMKE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFX0JJVClcbiBcbiAjZGVmaW5lIE1TUl9TVlNNX0NBQVx0XHRcdDB4YzAwMWYwMDBcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXG5pbmRleCA1OTRjZmExOWNiZDRiLi4wOWIxYzVkMzM3OTAyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXG5AQCAtNjYyLDYgKzY2Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfbGVha19wYWdlcyh1NjQgcGZuLCB1bnNpZ25lZCBpbnQgcGFnZXMpXG4gXHRfX3NucF9sZWFrX3BhZ2VzKHBmbiwgcGFnZXMsIHRydWUpO1xuIH1cbiBpbnQgc25wX3ByZXBhcmUodm9pZCk7XG4rdm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpO1xuK3ZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKTtcbiB2b2lkIHNucF9zaHV0ZG93bih2b2lkKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxuQEAgLTY4MCw2ICs2ODIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc25wX2xlYWtfcGFnZXModTY0IHBmbiwgdW5zaWduZWQgaW50IG5wYWdlcykge31cbiBzdGF0aWMgaW5saW5lIHZvaWQga2R1bXBfc2V2X2NhbGxiYWNrKHZvaWQpIHsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfZml4dXBfZTgyMF90YWJsZXModm9pZCkge31cbiBzdGF0aWMgaW5saW5lIGludCBzbnBfcHJlcGFyZSh2b2lkKSB7IHJldHVybiAtRU5PREVWOyB9XG4rc3RhdGljIGlubGluZSB2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCkge31cbitzdGF0aWMgaW5saW5lIHZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2h1dGRvd24odm9pZCkge31cbiAjZW5kaWZcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xuaW5kZXggOTM3MTI5Y2U2YTk2NC4uMDIxYzBiZjIyZGUyMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcbkBAIC02Nyw2ICs2Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRfYml0IGNwdWlkX2JpdHNbXSA9IHtcbiBcdHsgWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMixcdFx0Q1BVSURfRUFYLCAgMCwgMHg4MDAwMDAyMiwgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9BTURfTEJSX1YyLFx0XHRDUFVJRF9FQVgsICAxLCAweDgwMDAwMDIyLCAwIH0sXG4gXHR7IFg4Nl9GRUFUVVJFX0FNRF9MQlJfUE1DX0ZSRUVaRSxcdENQVUlEX0VBWCwgIDIsIDB4ODAwMDAwMjIsIDAgfSxcbitcdHsgWDg2X0ZFQVRVUkVfUk1QT1BULFx0XHRcdENQVUlEX0VEWCwgIDAsIDB4ODAwMDAwMjUsIDAgfSxcbiBcdHsgWDg2X0ZFQVRVUkVfQU1EX0hUUl9DT1JFUyxcdFx0Q1BVSURfRUFYLCAzMCwgMHg4MDAwMDAyNiwgMCB9LFxuIFx0eyAwLCAwLCAwLCAwLCAwIH1cbiB9O1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5pbmRleCA0MjcyMjkzNDc4NzY2Li5jNTc0ODQ5YjE1ODc4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuQEAgLTI5OTIsNiArMjk5MiwxNiBAQCB2b2lkIHNldl92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0ICovXG4gXHRcdGlmIChzbnBfZGVjb21taXNzaW9uX2NvbnRleHQoa3ZtKSlcbiBcdFx0XHRyZXR1cm47XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFBlcmZvcm0gUk1QIG9wdGltaXphdGlvbnMgb24gbWVtb3J5IGZyZWVkIGJ5IHRlcm1pbmF0aW5nXG4rXHRcdCAqIGd1ZXN0cy4gIFRoZSBzY2FuIGlzIGRlZmVycmVkLCBzbyBpdCBub3JtYWxseSBydW5zIGFmdGVyXG4rXHRcdCAqIHNldl9nbWVtX2ludmFsaWRhdGUoKSBoYXMgY29udmVydGVkIHRoaXMgZ3Vlc3QncyBwYWdlcyBiYWNrIHRvXG4rXHRcdCAqIHNoYXJlZCwgYW5kIHBpY2tzIHRoZW0gdXAgdGhlbi4gIEEgdmVyeSBsYXJnZSBndWVzdCB3aG9zZVxuK1x0XHQgKiBjb252ZXJzaW9uIGhhcyBub3QgZmluaXNoZWQgYnkgdGhlbiBpcyBwaWNrZWQgdXAgYnkgYSBsYXRlclxuK1x0XHQgKiB0ZWFyZG93bidzIHNjYW4uXG4rXHRcdCAqL1xuK1x0XHRzbnBfcm1wb3B0X2FsbF9waHlzbWVtKCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRzZXZfdW5iaW5kX2FzaWQoa3ZtLCBzZXYtXHUwMDNlaGFuZGxlKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYyBiL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jXG5pbmRleCBjZmYyODVkOGFkOGUzLi4wMzRlZDU0N2FjMjgxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvdmlydC9zdm0vc2V2LmNcbisrKyBiL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jXG5AQCAtMTksNiArMTksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hbWQtaW9tbXUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25vc3BlYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc2V2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcHJvY2Vzc29yLmhcdTAwM2VcbkBAIC0xMjQsNiArMTI1LDE4IEBAIHN0YXRpYyB2b2lkICpybXBfYm9va2tlZXBpbmcgX19yb19hZnRlcl9pbml0O1xuIFxuIHN0YXRpYyB1NjQgcHJvYmVkX3JtcF9iYXNlLCBwcm9iZWRfcm1wX3NpemU7XG4gXG4rc3RhdGljIGNwdW1hc2tfdmFyX3Qgcm1wb3B0X2NwdW1hc2ssIHJtcG9wdF9mb2xsb3dlcl9tYXNrO1xuK3N0YXRpYyB1NjQgcm1wb3B0X3BhX3N0YXJ0LCBybXBvcHRfcGFfZW5kO1xuK1xuK2VudW0gcm1wb3B0X29wX3R5cGUge1xuK1x0Uk1QT1BUX09QX1ZFUklGWV9BTkRfUkVQT1JUX1NUQVRVUyxcbitcdFJNUE9QVF9PUF9SRVBPUlRfU1RBVFVTXG4rfTtcbitcbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJtcG9wdF93cTtcbitzdGF0aWMgc3RydWN0IGRlbGF5ZWRfd29yayBybXBvcHRfZGVsYXllZF93b3JrO1xuK3N0YXRpYyBERUZJTkVfTVVURVgocm1wb3B0X3dxX211dGV4KTtcbitcbiBzdGF0aWMgTElTVF9IRUFEKHNucF9sZWFrZWRfcGFnZXNfbGlzdCk7XG4gc3RhdGljIERFRklORV9TUElOTE9DSyhzbnBfbGVha2VkX3BhZ2VzX2xpc3RfbG9jayk7XG4gXG5AQCAtNTEzLDcgKzUyNiw2IEBAIHN0YXRpYyB2b2lkIGNsZWFyX2hzYXZlX3BhKHZvaWQgKmFyZylcbiBcbiBpbnQgc25wX3ByZXBhcmUodm9pZClcbiB7XG4tXHRpbnQgcmV0O1xuIFx0dTY0IHZhbDtcbiBcbiBcdC8qXG5AQCAtNTI2LDE0ICs1MzgsMTggQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpXG4gXG4gXHRjbGVhcl9ybXAoKTtcbiBcbi1cdGNwdXNfcmVhZF9sb2NrKCk7XG4rXHQvKlxuK1x0ICogTm8gQ1BVIG1heSBjb21lIG9ubGluZSB3aXRob3V0IFNucEVuIHdoaWxlIFNOUCBpcyBhY3RpdmU7IGRpc2FibGVcbitcdCAqIGhvdHBsdWcgaGVyZSBhbmQgcmUtZW5hYmxlIGl0IGluIHNucF9zaHV0ZG93bigpLlxuK1x0ICovXG4rXHRjcHVfaG90cGx1Z19kaXNhYmxlKCk7XG4gXG4gXHRpZiAoIWNwdW1hc2tfZXF1YWwoY3B1X29ubGluZV9tYXNrLCBjcHVfcHJlc2VudF9tYXNrKSkge1xuLVx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbitcdFx0Y3B1X2hvdHBsdWdfZW5hYmxlKCk7XG4gXHRcdHByX3dhcm4oXCJTTlAgaW5pdCBmYWlsZWQ6IG5vdCBhbGwgQ1BVcyBvbmxpbmUuICglKnBibCBvbmxpbmUgXHUwMDNjLVx1MDAzZSAlKnBibCBwcmVzZW50IG1hc2tzKS5cXG5cIixcbiBcdFx0XHRjcHVtYXNrX3ByX2FyZ3MoY3B1X29ubGluZV9tYXNrKSxcbiBcdFx0XHRjcHVtYXNrX3ByX2FyZ3MoY3B1X3ByZXNlbnRfbWFzaykpO1xuLVx0XHRnb3RvIHVubG9jaztcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuIFxuIFx0d2JpbnZkX29uX2FsbF9jcHVzKCk7XG5AQCAtNTQ4LDE0ICs1NjQsMzcgQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpXG4gXHQvKiBTTlBfSU5JVCByZXF1aXJlcyBNU1JfVk1fSFNBVkVfUEEgdG8gYmUgY2xlYXJlZCBvbiBhbGwgQ1BVcy4gKi9cbiBcdG9uX2VhY2hfY3B1KGNsZWFyX2hzYXZlX3BhLCBOVUxMLCAxKTtcbiBcbi1cdHJldCA9IDA7XG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcHJlcGFyZSwgXCJjY3BcIik7XG4gXG4tdW5sb2NrOlxuLVx0Y3B1c19yZWFkX3VubG9jaygpO1xuK3N0YXRpYyB2b2lkIHNucF9jbGVhbnVwX3JtcG9wdCh2b2lkKVxuK3tcbitcdGludCBjcHU7XG4gXG4tXHRyZXR1cm4gcmV0O1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJtcG9wdF93cV9tdXRleCk7XG4rXG4rXHQvKlxuK1x0ICogcm1wb3B0X3dxIGlzIG5vbi1OVUxMIG9ubHkgYWZ0ZXIgUk1QT1BUIGhhcyBiZWVuIGZ1bGx5IHNldCB1cDogdGhlXG4rXHQgKiB3b3JrcXVldWUgYW5kIGNwdW1hc2tzIGFyZSBhbGxvY2F0ZWQgYW5kIHRoZSBSTVBPUFRfQkFTRSBNU1JzIGFyZVxuK1x0ICogcHJvZ3JhbW1lZC4gIHNucF9zZXR1cF9ybXBvcHQoKSByZXNldHMgaXQgdG8gTlVMTCBpZiBhbnkgb2YgdGhvc2VcbitcdCAqIHN0ZXBzIGZhaWwsIHNvIGEgTlVMTCBybXBvcHRfd3EgbWVhbnMgbm90aGluZyB3YXMgc2V0IHVwIGFuZCB0aGVyZSBpc1xuK1x0ICogbm90aGluZyB0byB0ZWFyIGRvd24uXG4rXHQgKi9cbitcdGlmICghcm1wb3B0X3dxKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yayk7XG4rXHRkZXN0cm95X3dvcmtxdWV1ZShybXBvcHRfd3EpO1xuK1xuK1x0Zm9yX2VhY2hfY3B1KGNwdSwgcm1wb3B0X2NwdW1hc2spXG4rXHRcdHdybXNycV9vbl9jcHUoY3B1LCBNU1JfQU1ENjRfUk1QT1BUX0JBU0UsIDApO1xuK1xuK1x0ZnJlZV9jcHVtYXNrX3ZhcihybXBvcHRfY3B1bWFzayk7XG4rXHRmcmVlX2NwdW1hc2tfdmFyKHJtcG9wdF9mb2xsb3dlcl9tYXNrKTtcbitcdHJtcG9wdF9wYV9zdGFydCA9IHJtcG9wdF9wYV9lbmQgPSAwO1xuK1x0cm1wb3B0X3dxID0gTlVMTDtcbiB9XG4tRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcHJlcGFyZSwgXCJjY3BcIik7XG4gXG4gdm9pZCBzbnBfc2h1dGRvd24odm9pZClcbiB7XG5AQCAtNTY1LDExICs2MDQsMjE0IEBAIHZvaWQgc25wX3NodXRkb3duKHZvaWQpXG4gXHRpZiAoc3lzY2ZnIFx1MDAyNiBNU1JfQU1ENjRfU1lTQ0ZHX1NOUF9FTilcbiBcdFx0cmV0dXJuO1xuIFxuK1x0LyogRGlzYWJsZSBSTVBPUFQgd2hpbGUgQ1BVIGhvdHBsdWcgaXMgZGlzYWJsZWQuICovXG4rXHRzbnBfY2xlYW51cF9ybXBvcHQoKTtcbitcbiBcdGNsZWFyX3JtcCgpO1xuIFx0b25fZWFjaF9jcHUobWZkX3JlY29uZmlndXJlLCBOVUxMLCAxKTtcbitcbitcdC8qXG4rXHQgKiBUaGUgZmlybXdhcmUgaGFzIGRpc2FibGVkIFNOUCAoU25wRW4gaXMgY2xlYXIpLCBzbyByZS1lbmFibGUgQ1BVXG4rXHQgKiBob3RwbHVnLiAgQSBsZWdhY3kgU05QIHNodXRkb3duIHJldHVybnMgYWJvdmUgd2l0aCBTbnBFbiBzdGlsbCBzZXQgYW5kXG4rXHQgKiBsZWF2ZXMgaG90cGx1ZyBkaXNhYmxlZC5cbitcdCAqL1xuK1x0Y3B1X2hvdHBsdWdfZW5hYmxlKCk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCBcImNjcFwiKTtcbiBcbitzdGF0aWMgYm9vbCBybXBvcHRfY2FwYWJsZSh2b2lkKVxuK3tcbitcdHJldHVybiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUE9QVCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbit9XG4rXG4rLypcbisgKiBSTVBPUFQgb3B0aW1pemF0aW9ucyBza2lwIFJNUCBjaGVja3MgYXQgMUdCIGdyYW51bGFyaXR5IGlmIHRoaXMgcmFuZ2Ugb2ZcbisgKiBtZW1vcnkgZG9lcyBub3QgY29udGFpbiBhbnkgU05QIGd1ZXN0IG1lbW9yeS5cbisgKlxuKyAqIEBwYSBpcyBhIHN5c3RlbSBwaHlzaWNhbCBhZGRyZXNzOyBSTVBPUFQgb3BlcmF0ZXMgb24gdGhlIGNvbnRhaW5pbmcgMUdCLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJtcG9wdCh1NjQgcGEpXG4re1xuK1x0dTY0IHBhX3N0YXJ0ID0gQUxJR05fRE9XTihwYSwgU1pfMUcpO1xuK1x0ZW51bSBybXBvcHRfb3BfdHlwZSBvcCA9IFJNUE9QVF9PUF9WRVJJRllfQU5EX1JFUE9SVF9TVEFUVVM7XG4rXG4rXHQvKlxuK1x0ICogUk1QT1BUIChGMiAwRiAwMSBGQyk6IFJBWCA9IDFHQi1hbGlnbmVkIFNQQSwgUkNYID0gb3AgdHlwZSwgQ0Ygc2V0IGlmXG4rXHQgKiB0aGUgcmFuZ2Ugd2FzIG9wdGltaXplZCAocmVzdWx0IHVudXNlZCBvbiB0aGlzIHBhdGgpLlxuK1x0ICpcbitcdCAqIEJpbnV0aWxzIGRvZXMgbm90IHN1cHBvcnQgdGhlIFJNUE9QVCBtbmVtb25pYyB5ZXQsIHNvIHRoZSBpbnN0cnVjdGlvblxuK1x0ICogaXMgZW5jb2RlZCB3aXRoIC5ieXRlLlxuK1x0ICovXG4rXHRhc20gdm9sYXRpbGUoXCIuYnl0ZSAweGYyLCAweDBmLCAweDAxLCAweGZjXCJcbitcdFx0ICAgICA6OiBcImFcIiAocGFfc3RhcnQpLCBcImNcIiAob3ApXG4rXHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIpO1xuK31cbitcbisvKiBvbl9lYWNoX2NwdSgpIGNhbGxiYWNrOiBvcHRpbWl6ZSB0aGUgd2hvbGUgUk1QT1BUIHJhbmdlIG9uIHRoaXMgQ1BVLiAqL1xuK3N0YXRpYyB2b2lkIHJtcG9wdF9zY2FuX3JhbmdlKHZvaWQgKmFyZylcbit7XG4rXHR1NjQgcGE7XG4rXG4rXHRmb3IgKHBhID0gcm1wb3B0X3BhX3N0YXJ0OyBwYSBcdTAwM2Mgcm1wb3B0X3BhX2VuZDsgcGEgKz0gU1pfMUcpXG4rXHRcdHJtcG9wdChwYSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJtcG9wdF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdGludCB0aGlzX2NwdTtcbitcbitcdC8qXG4rXHQgKiBSTVBPUFQgc2NhbnMgdGhlIFJNUCB0YWJsZSwgc3RvcmVzIHRoZSByZXN1bHQgb2YgdGhlIHNjYW4gaW4gdGhlXG4rXHQgKiByZXNlcnZlZCBwcm9jZXNzb3IgbWVtb3J5LiBUaGUgUk1QIHNjYW4gaXMgdGhlIG1vc3QgZXhwZW5zaXZlXG4rXHQgKiBwYXJ0LiBJZiBhIHNlY29uZCBSTVBPUFQgb2NjdXJzLCBpdCBjYW4gc2tpcCB0aGUgZXhwZW5zaXZlIHNjYW5cbitcdCAqIGlmIHRoZXkgY2FuIHNlZSBhIGNhY2hlZCByZXN1bHQgaW4gdGhlIHJlc2VydmVkIHByb2Nlc3NvciBtZW1vcnkuXG4rXHQgKlxuK1x0ICogUnVuIFJNUE9QVCBvbiBvbmUgQ1BVIGZpcnN0ICh0aGUgbGVhZGVyKSwgdGhlbiBvbiBldmVyeSBvdGhlciBwcmltYXJ5XG4rXHQgKiB0aHJlYWQgKHRoZSBmb2xsb3dlcnMpLiAgQSBmb2xsb3dlciBza2lwcyB0aGUgZXhwZW5zaXZlIFJNUCBzY2FuIGJ5XG4rXHQgKiByZXVzaW5nIHRoZSBjYWNoZWQgc2NhbiByZXN1bHRzIHRoZSBsZWFkZXIgcHJvZHVjZWQuXG4rXHQgKlxuK1x0ICogbWlncmF0ZV9kaXNhYmxlKCkgcGlucyB0aGlzIHdvcmsgdG8gdGhlIGN1cnJlbnQgQ1BVIHNvIGl0IHN0YXlzIHRoZVxuK1x0ICogbGVhZGVyIGZvciB0aGUgd2hvbGUgbGVhZGVyIGxvb3A6IHRoaXNfY3B1IHJlbWFpbnMgdmFsaWQgYW5kIHRoZVxuK1x0ICogUk1QT1BUIGluc3RydWN0aW9uIHJ1bnMgb24gaXQuXG4rXHQgKi9cbitcdG1pZ3JhdGVfZGlzYWJsZSgpO1xuK1x0dGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XG4rXG4rXHRjcHVtYXNrX2FuZG5vdChybXBvcHRfZm9sbG93ZXJfbWFzaywgcm1wb3B0X2NwdW1hc2ssXG4rXHRcdCAgICAgICB0b3BvbG9neV9zaWJsaW5nX2NwdW1hc2sodGhpc19jcHUpKTtcbitcbitcdHJtcG9wdF9zY2FuX3JhbmdlKE5VTEwpO1xuK1xuK1x0bWlncmF0ZV9lbmFibGUoKTtcbitcbitcdC8qXG4rXHQgKiBGb2xsb3dlcnM6IG9uZSBJUEkgcGVyIHJlbWFpbmluZyBjb3JlLCBlYWNoIG9wdGltaXppbmcgdGhlIHdob2xlXG4rXHQgKiByYW5nZS4gIEVhY2ggcnVucyB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQsIGJ1dCBvbmx5IGlzc3VlcyBjYWNoZS1oaXRcbitcdCAqIFJNUE9QVHMgKHRoZSBsZWFkZXIgcG9wdWxhdGVkIHRoZSBzY2FuIGNhY2hlIGFib3ZlKSwgc28gdGhlIHdpbmRvdyBpc1xuK1x0ICogc2hvcnQuICBjcHVzX3JlYWRfbG9jaygpIGlzIGludGVudGlvbmFsbHkgbm90IGhlbGQ6IENQVSBob3RwbHVnIGlzXG4rXHQgKiBkaXNhYmxlZCB0aGUgZW50aXJlIHRpbWUgU05QIGlzIGFjdGl2ZSAoc2VlIHNucF9wcmVwYXJlKCkpLCBhbmQgdGhpc1xuK1x0ICogd29yayBvbmx5IHJ1bnMgd2hpbGUgU05QIGlzIGFjdGl2ZSwgc28gdGhlIGZvbGxvd2VyIHNldCBzdGF5cyB2YWxpZC5cbitcdCAqL1xuK1x0b25fZWFjaF9jcHVfbWFzayhybXBvcHRfZm9sbG93ZXJfbWFzaywgcm1wb3B0X3NjYW5fcmFuZ2UsIE5VTEwsIHRydWUpO1xuK31cbitcbisvKlxuKyAqIERlbGF5LCBpbiBtaWxsaXNlY29uZHMsIGJlZm9yZSB0aGUgUk1QIHJlLW9wdGltaXphdGlvbiBwYXNzIHJ1bnMgYWZ0ZXIgYW5cbisgKiBTTlAgZ3Vlc3QgaXMgdG9ybiBkb3duLiAgc25wX3JtcG9wdF9hbGxfcGh5c21lbSgpIHJlLWFybXMgdGhlIGRlbGF5ZWQgd29ya1xuKyAqIHdpdGggbW9kX2RlbGF5ZWRfd29yaygpIG9uIGVhY2ggdGVhcmRvd24sIHNvIHRoZSBwYXNzIGZpcmVzIHRoaXMgbG9uZyBhZnRlclxuKyAqIHRoZSBsYXN0IHRlYXJkb3duLiAgVGhpcyBjb2FsZXNjZXMgYSBidXJzdCBvZiB0ZWFyZG93bnMgaW50byBhIHNpbmdsZSBzY2FuXG4rICogYW5kIGdpdmVzIGVhY2ggZ3Vlc3QncyBwYWdlcyB0aW1lIHRvIGJlIGNvbnZlcnRlZCBiYWNrIHRvIHRoZSBzaGFyZWQsXG4rICogaHlwZXJ2aXNvci1vd25lZCBzdGF0ZSBiZWZvcmUgdGhlIHNjYW4gcmUtb3B0aW1pemVzIHRoZWlyIDFHQiByZWdpb25zLiAgVGhlXG4rICogMTAgc2Vjb25kIHZhbHVlIGlzIGEgaGV1cmlzdGljIHRyYWRpbmcgcmUtb3B0aW1pemF0aW9uIGxhdGVuY3kgYWdhaW5zdFxuKyAqIHNjYW5uaW5nIHRvbyBlYWdlcmx5LlxuKyAqL1xuKyNkZWZpbmUgUk1QT1BUX1dPUktfVElNRU9VVFx0KDEwICogTVNFQ19QRVJfU0VDKVxuK1xuK3ZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKVxuK3tcbitcdGlmICghcm1wb3B0X2NhcGFibGUoKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJtcG9wdF93cV9tdXRleCk7XG4rXG4rXHRpZiAoIXJtcG9wdF93cSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0bW9kX2RlbGF5ZWRfd29yayhybXBvcHRfd3EsIFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmssXG4rXHRcdFx0IG1zZWNzX3RvX2ppZmZpZXMoUk1QT1BUX1dPUktfVElNRU9VVCkpO1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9ybXBvcHRfYWxsX3BoeXNtZW0sIFwia3ZtLWFtZFwiKTtcbitcbit2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZClcbit7XG4rXHR1NjQgcm1wb3B0X2Jhc2U7XG4rXHRpbnQgY3B1O1xuK1xuK1x0aWYgKCFybXBvcHRfY2FwYWJsZSgpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2cm1wb3B0X3dxX211dGV4KTtcbitcbitcdC8qXG4rXHQgKiBPbiByZS1pbml0aWFsaXphdGlvbiBhZnRlciBhIGxlZ2FjeSBTTlAgc2h1dGRvd24gKFNOUF9TSFVURE9XTl9FWFxuK1x0ICogd2l0aCB4ODZfc25wX3NodXRkb3duPTApLCBzbnBfc2h1dGRvd24oKSBhbmQgdGh1cyBzbnBfY2xlYW51cF9ybXBvcHQoKVxuK1x0ICogYXJlIHNraXBwZWQsIHNvIHRoZSB3b3JrcXVldWUsIGRlbGF5ZWQgd29yaywgY3B1bWFzayBhbmQgcGVyLUNQVVxuK1x0ICogUk1QT1BUX0JBU0UgTVNScyBhcmUgc3RpbGwgc2V0IHVwIGFuZCB2YWxpZCAoU25wRW4gc3RheWVkIHNldCBhbmRcbitcdCAqIENQVSBob3RwbHVnIHN0YXllZCBkaXNhYmxlZCkuICBSYXRoZXIgdGhhbiByZS1kb2luZyB0aGUgc2V0dXAsIHdoaWNoXG4rXHQgKiB3b3VsZCBsZWFrIHRoZSBleGlzdGluZyBzdGF0ZSwganVzdCByZS1xdWV1ZSB0aGUgb3B0aW1pemF0aW9uIHBhc3NcbitcdCAqIHRvIHJlLW9wdGltaXplIGFueSBtZW1vcnkgdGhlIHByZXZpb3VzIFNOUCBzZXNzaW9uIGRlLW9wdGltaXplZC5cbitcdCAqL1xuK1x0aWYgKHJtcG9wdF93cSkge1xuK1x0XHRxdWV1ZV9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLCAwKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIENyZWF0ZSBhbiBSTVBPUFQtc3BlY2lmaWMgd29ya3F1ZXVlIHRvIGF2b2lkIHNjaGVkdWxpbmdcbitcdCAqIFJNUE9QVCB3b3JraXRlbSBvbiB0aGUgZ2xvYmFsIHN5c3RlbSB3b3JrcXVldWUuXG4rXHQgKi9cbitcdHJtcG9wdF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcInJtcG9wdF93cVwiLCBXUV9VTkJPVU5ELCAxKTtcbitcdGlmICghcm1wb3B0X3dxKSB7XG4rXHRcdHByX2VycihcIkZhaWxlZCB0byBhbGxvY2F0ZSBSTVBPUFQgd29ya3F1ZXVlXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLCBybXBvcHRfd29ya19oYW5kbGVyKTtcbitcbitcdGlmICghemFsbG9jX2NwdW1hc2tfdmFyKFx1MDAyNnJtcG9wdF9jcHVtYXNrLCBHRlBfS0VSTkVMKSkge1xuK1x0XHRwcl9lcnIoXCJGYWlsZWQgdG8gYWxsb2NhdGUgUk1QT1BUIGNwdW1hc2tcXG5cIik7XG4rXHRcdGRlc3Ryb3lfd29ya3F1ZXVlKHJtcG9wdF93cSk7XG4rXHRcdHJtcG9wdF93cSA9IE5VTEw7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmICghemFsbG9jX2NwdW1hc2tfdmFyKFx1MDAyNnJtcG9wdF9mb2xsb3dlcl9tYXNrLCBHRlBfS0VSTkVMKSkge1xuK1x0XHRwcl9lcnIoXCJGYWlsZWQgdG8gYWxsb2NhdGUgUk1QT1BUIGZvbGxvd2VyIGNwdW1hc2tcXG5cIik7XG4rXHRcdGZyZWVfY3B1bWFza192YXIocm1wb3B0X2NwdW1hc2spO1xuK1x0XHRkZXN0cm95X3dvcmtxdWV1ZShybXBvcHRfd3EpO1xuK1x0XHRybXBvcHRfd3EgPSBOVUxMO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogVGhlIFJNUE9QVF9CQVNFIE1TUiBpcyBwZXItY29yZSwgc28gb25seSBvbmUgdGhyZWFkIHBlciBjb3JlIG5lZWRzXG4rXHQgKiB0byBzZXQgdXAgdGhlIFJNUE9QVF9CQVNFIE1TUi4gIEFsbCBwcmltYXJ5IHRocmVhZHMgYXJlIG9ubGluZSxcbitcdCAqIG90aGVyd2lzZSBTTlAgd291bGQgbm90IGhhdmUgYmVlbiBlbmFibGVkLlxuK1x0ICovXG4rXHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSlcbitcdFx0aWYgKHRvcG9sb2d5X2lzX3ByaW1hcnlfdGhyZWFkKGNwdSkpXG4rXHRcdFx0Y3B1bWFza19zZXRfY3B1KGNwdSwgcm1wb3B0X2NwdW1hc2spO1xuK1xuK1x0cm1wb3B0X3BhX3N0YXJ0ID0gQUxJR05fRE9XTihQRk5fUEhZUyhtaW5fbG93X3BmbiksIFNaXzFHKTtcbitcdHJtcG9wdF9iYXNlID0gcm1wb3B0X3BhX3N0YXJ0IHwgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEU7XG4rXG4rXHQvKlxuK1x0ICogUGVyLUNQVSBSTVBPUFQgdGFibGVzIGNvdmVyIGF0IG1vc3QgMiBUQi4gIFByb2dyYW0gZWFjaCBjb3JlJ3NcbitcdCAqIFJNUE9QVF9CQVNFIHdpdGggdGhlIHN0YXJ0IG9mIFJBTSB0byBvcHRpbWl6ZSB1cCB0byAyIFRCLlxuK1x0ICovXG4rXHRmb3JfZWFjaF9jcHUoY3B1LCBybXBvcHRfY3B1bWFzaylcbitcdFx0d3Jtc3JxX29uX2NwdShjcHUsIE1TUl9BTUQ2NF9STVBPUFRfQkFTRSwgcm1wb3B0X2Jhc2UpO1xuK1xuK1x0cm1wb3B0X3BhX2VuZCA9IEFMSUdOKFBGTl9QSFlTKG1heF9wZm4pLCBTWl8xRyk7XG4rXG4rXHQvKiBMaW1pdCBtZW1vcnkgc2Nhbm5pbmcgdG8gMlRCIG9mIFJBTSAqL1xuK1x0aWYgKChybXBvcHRfcGFfZW5kIC0gcm1wb3B0X3BhX3N0YXJ0KSBcdTAwM2UgU1pfMlQpIHtcbitcdFx0cHJfaW5mbyhcIlJNUE9QVCBjb3ZlcmFnZSBsaW1pdGVkIHRvIDJUQjsgbWVtb3J5IGFib3ZlIDB4JWxseCBub3Qgb3B0aW1pemVkXFxuXCIsXG4rXHRcdFx0cm1wb3B0X3BhX3N0YXJ0ICsgU1pfMlQpO1xuK1x0XHRybXBvcHRfcGFfZW5kID0gcm1wb3B0X3BhX3N0YXJ0ICsgU1pfMlQ7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogT25jZSBhbGwgcGVyLUNQVSBSTVBPUFQgdGFibGVzIGhhdmUgYmVlbiBjb25maWd1cmVkLCBlbmFibGUgUk1QT1BUXG4rXHQgKiBvcHRpbWl6YXRpb25zIG9uIGFsbCBwaHlzaWNhbCBtZW1vcnkuXG4rXHQgKi9cbitcdHF1ZXVlX2RlbGF5ZWRfd29yayhybXBvcHRfd3EsIFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmssIDApO1xuK1xuK1x0cHJfaW5mbyhcIlJNUE9QVCBvcHRpbWl6YXRpb25zIGVuYWJsZWRcXG5cIik7XG4rfVxuK0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NldHVwX3JtcG9wdCwgXCJjY3BcIik7XG4rXG4gLypcbiAgKiBEbyB0aGUgbmVjZXNzYXJ5IHByZXBhcmF0aW9ucyB3aGljaCBhcmUgdmVyaWZpZWQgYnkgdGhlIGZpcm13YXJlIGFzXG4gICogZGVzY3JpYmVkIGluIHRoZSBTTlBfSU5JVF9FWCBmaXJtd2FyZSBjb21tYW5kIGRlc2NyaXB0aW9uIGluIHRoZSBTTlBcbkBAIC01NzcsNiArODE5LDggQEAgRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2h1dGRvd24sIFwiY2NwXCIpO1xuICAqL1xuIGludCBfX2luaXQgc25wX3JtcHRhYmxlX2luaXQodm9pZClcbiB7XG4rXHR1NjQgdmFsO1xuK1xuIFx0aWYgKFdBUk5fT05fT05DRSghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSkpXG4gXHRcdHJldHVybiAtRU5PU1lTO1xuIFxuQEAgLTU4Niw2ICs4MzAsMTUgQEAgaW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxuIFx0aWYgKCFzZXR1cF9ybXB0YWJsZSgpKVxuIFx0XHRyZXR1cm4gLUVOT1NZUztcbiBcbitcdC8qXG4rXHQgKiBPbiBhIGtleGVjIGJvb3QgU05QIG1heSBhbHJlYWR5IGJlIGVuYWJsZWQgKGxlZ2FjeSBmaXJtd2FyZSBsZWF2ZXNcbitcdCAqIFNucEVuIHNldCBhY3Jvc3Mgc2h1dGRvd24pLCBpbiB3aGljaCBjYXNlIHNucF9wcmVwYXJlKCkgYmFpbHMgd2l0aG91dFxuK1x0ICogZGlzYWJsaW5nIENQVSBob3RwbHVnLCBzbyBkaXNhYmxlIGl0IGhlcmUuXG4rXHQgKi9cbitcdHJkbXNycShNU1JfQU1ENjRfU1lTQ0ZHLCB2YWwpO1xuK1x0aWYgKHZhbCBcdTAwMjYgTVNSX0FNRDY0X1NZU0NGR19TTlBfRU4pXG4rXHRcdGNwdV9ob3RwbHVnX2Rpc2FibGUoKTtcbitcbiBcdC8qXG4gXHQgKiBTZXR0aW5nIGNyYXNoX2tleGVjX3Bvc3Rfbm90aWZpZXJzIHRvICd0cnVlJyB0byBlbnN1cmUgdGhhdCBTTlAgcGFuaWNcbiBcdCAqIG5vdGlmaWVyIGlzIGludm9rZWQgdG8gZG8gU05QIElPTU1VIHNodXRkb3duIGJlZm9yZSBrZHVtcC5cbkBAIC02ODMsMTMgKzkzNiwyMSBAQCBzdGF0aWMgYm9vbCBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbyh2b2lkKVxuIFxuIGJvb2wgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8odm9pZClcbiB7XG4tXHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TRUdNRU5URURfUk1QKSlcbitcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFR01FTlRFRF9STVApKSB7XG4gXHRcdHJkbXNycShNU1JfQU1ENjRfUk1QX0NGRywgcm1wX2NmZyk7XG4gXG4tXHRpZiAocm1wX2NmZyBcdTAwMjYgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRClcbi1cdFx0cmV0dXJuIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKCk7XG4tXHRlbHNlXG4tXHRcdHJldHVybiBwcm9iZV9jb250aWd1b3VzX3JtcHRhYmxlX2luZm8oKTtcbitcdFx0aWYgKHJtcF9jZmcgXHUwMDI2IE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRUQpXG4rXHRcdFx0cmV0dXJuIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKCk7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogU2VnbWVudGVkIFJNUCBpcyBlaXRoZXIgbm90IHN1cHBvcnRlZCBvbiB0aGUgcGxhdGZvcm0gb3IgaXNcbitcdCAqIGRpc2FibGVkIGJ5IHRoZSBmaXJtd2FyZS4gIFJNUE9QVCBpcyBub3Qgc3VwcG9ydGVkIHdpdGhvdXRcbitcdCAqIHNlZ21lbnRlZCBSTVAuXG4rXHQgKi9cbitcdHNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfUk1QT1BUKTtcbitcbitcdHJldHVybiBwcm9iZV9jb250aWd1b3VzX3JtcHRhYmxlX2luZm8oKTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jIGIvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY1xuaW5kZXggY2E0NzNjYTE5OGI4MS4uZGExMmRkZjFmNDEyNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcbisrKyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcbkBAIC0xNTEwLDYgKzE1MTAsOCBAQCBzdGF0aWMgaW50IF9fc2V2X3NucF9pbml0X2xvY2tlZChpbnQgKmVycm9yLCB1bnNpZ25lZCBpbnQgbWF4X3NucF9hc2lkKVxuIFxuIFx0c2V2X2VzX3Rtcl9zaXplID0gU05QX1RNUl9TSVpFO1xuIFxuK1x0c25wX3NldHVwX3JtcG9wdCgpO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzM6MDAuOTY3NzA0ODg1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4MzI0Nzc0OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBTUQgUk1QT1BUIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQgYWRkcyBzdXBwb3J0IGZvciB0aGUgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbi4gSXQgc2VlbXMgbGlrZSBpdCdzIHRvdWNoaW5nIHNldmVyYWwgY29yZSBhcmVhczogYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGhlYWRlcnMsIHRoZSBrZXJuZWwncyBDUFUgZmVhdHVyZXMsIE1TUnMsIGFuZCBTRVYtcmVsYXRlZCBjb2RlLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGF0IFJNUE9QVCBpcyB0aWVkIHRvIFNFVi1TTlAuIFRoZSBmaWxlcyBtb2RpZmllZCBpbmNsdWRlIGBjcHVmZWF0dXJlcy5oYCwgYG1zci1pbmRleC5oYCwgYHNldi5oYCwgYXMgd2VsbCBhcyBzZXZlcmFsIEMgZmlsZXMgZGVhbGluZyB3aXRoIHNjYXR0ZXJlZCBtZW1vcnksIEtWTSwgYW5kIHRoZSBDQ1AgKGNyeXB0byBjby1wcm9jZXNzb3IpIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGZ1bmN0aW9ucyBsaWtlIGBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKClgIGFuZCBgc25wX3NldHVwX3JtcG9wdCgpYCBhbmQgcmVsaWVzIG9uIHRoZSBgWDg2X0ZFQVRVUkVfUk1QT1BUYCBhbmQgYE1TUl9BTUQ2NF9STVBPUFRfQkFTRWAgZGVmaW5pdGlvbnMuIEFsbCB0aGUgcGllY2VzIGZpdCwgUk1QT1BUIGxvb2tzIHRvIGJlIGEga2V5IGVsZW1lbnQgb2YgU0VWLVNOUC5cblxuVGhlIGJpZyBxdWVzdGlvbiBpbiBteSBtaW5kIGlzIHJlYWNoYWJpbGl0eSwgcGFydGljdWxhcmx5IHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBDb25zaWRlcmluZyB0aGlzIGlzIGFuIFNFVi1TTlAgZmVhdHVyZSwgaXQgdXN1YWxseSByZXF1aXJlcyBkZWRpY2F0ZWQgQU1EIGhhcmR3YXJlIHRvIGJlIHRydWx5IGVmZmVjdGl2ZS4gS1ZNIGNhbiBlbXVsYXRlIG9yIHBhc3MgdGhyb3VnaCBzb21lIGZlYXR1cmVzLCBidXQgdGhlIHJlYWwgcG93ZXIgb2YgU0VWLVNOUCBpcyBvZnRlbiBsb3N0IGluIGVtdWxhdGlvbi4gU3l6a2FsbGVyIGlzIGEga2V5IHRlc3RpbmcgdG9vbCwgYW5kIHRoZSBmYWN0IHRoYXQgaXQncyBydW4gb24gR0NFIGlzIGludHJpZ3VpbmcuIEhvd2V2ZXIsIGRvZXMgR0NFIG9mZmVyIEFNRCBTRVYtU05QIGluc3RhbmNlcz8gQWgsIHllcywgR29vZ2xlIENsb3VkIGRvZXMgaGF2ZSBDb25maWRlbnRpYWwgVk1zIGJhc2VkIG9uIFNFViBhbmQgU0VWLVNOUC4gSG93ZXZlciwgSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgc3l6a2FsbGVyIHR5cGljYWxseSBydW5zIG9uIHN0YW5kYXJkIGluc3RhbmNlcywgd2hpY2ggYXJlIGUyLXN0YW5kYXJkIG9yIG4yLXN0YW5kYXJkLiBJdCdzIG5vdCB1c3VhbGx5IHNwZWNpZmljYWxseSBjb25maWd1cmVkIHRvIHRhcmdldCBDb25maWRlbnRpYWwgVk1zLlxuXG5TbywgZG9lcyBzeXprYWxsZXIgYWN0dWFsbHkgKnJlYWNoKiB0aGlzIGNvZGU/IEV2ZW4gaWYgdGhlIGhvc3QgZG9lc24ndCBoYXZlIG5hdGl2ZSBTRVYtU05QLCBpZiB0aGUgaG9zdCBrZXJuZWwgKml0c2VsZiogc3VwcG9ydHMgdGhpcyBmdW5jdGlvbmFsaXR5LCBzeXprYWxsZXIgY291bGQgc3RpbGwgYmUgdGVzdGluZyBpdC4gU3l6a2FsbGVyIHRlc3RzIHRoZSBob3N0IGtlcm5lbCwgd2hpY2ggaXMgYSBrZXkgZWxlbWVudC4gQnV0IHRoYXQgYnJpbmdzIG1lIHRvIGFub3RoZXIgcG9pbnQsIHRoZSBob3N0IGtlcm5lbCBydW5uaW5nIG9uIEdDRSBtaWdodCBub3QgZXZlbiAqaGF2ZSogU0VWLVNOUCBlbmFibGVkLlxuXG5UaGVyZWZvcmUsIGlzIHRoaXMgY29kZSBldmVuIHJlYWNoYWJsZT8gSSBzaG91bGQgaW52ZXN0aWdhdGUgd2hldGhlciBgWDg2X0ZFQVRVUkVfUk1QT1BUYCBjYW4gYmUgXCJmYWtlZFwiIG9yIHdoZXRoZXIgdGhlcmUgYXJlIHNwZWNpZmljIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZSBjb2RlJ3MgZXhlY3V0aW9uLiBMb29raW5nIGF0IHRoZSBjb2RlIGluIGBhcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY2AgYW5kIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCwgSSdtIGxvb2tpbmcgZm9yIGVudHJ5IHBvaW50cy4gT2theSwgaGVyZSdzIGEgY3J1Y2lhbCBzbmlwcGV0IGZyb20gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgOlxuXG5gYGBjXG52b2lkIHNldl92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcbntcbi4uLlxuXHRcdGlmIChzbnBfZGVjb21taXNzaW9uX2NvbnRleHQoa3ZtKSlcblx0XHRcdHJldHVybjtcblxuXHRcdHNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKTtcbi4uLlxuYGBgXG5cbkFoLCBpdCdzIGNhbGxlZCBkdXJpbmcgdGhlIGRlc3RydWN0aW9uIG9mIGEgU0VWLVNOUCBWTS4gSW50ZXJlc3RpbmcuIENhbiBzeXprYWxsZXIgKmNyZWF0ZSogYSBTRVYtU05QIFZNPyBUaGF0J3MgdGhlIHJlYWwgdGVzdC4gSXQgd291bGQgbmVlZCBgL2Rldi9zZXZgIGFuZCBLVk0gU0VWIHN1cHBvcnQuIE5vdywgSSBzaG91bGQgbG9vayBpbnRvIHdoZXRoZXIgYENPTkZJR19LVk1fQU1EX1NFVmAgaXMgYWN0dWFsbHkgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgc2VhcmNoIGZvciByZWxhdGVkIG9wdGlvbnMsIHBhcnRpY3VsYXJseSBgQ09ORklHX0tWTV9BTURgIGFuZCBgQ09ORklHX0NSWVBUT19ERVZfU1BfQ0NQYCwgd2hpY2ggc2VlbXMgcmVsYXRlZCB0byB0aGUgQ0NQIGNvbXBvbmVudC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBsaWtlbHkgdGhpcyBjb2RlIGlzIHRvIGJlIHRyaWdnZXJlZCBpbiBzeXprYWxsZXIncyBjdXJyZW50IGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjE1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzM6MTEuODAwMTg1NDE5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NDE1MDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQU1EXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTEzND1jb25maWcgS1ZNX0lOVEVMX1REWFxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzM6MTEuODg3NjA1OTczWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwMTc0Mzk1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBTdGF0ZSBvZiBgQ09ORklHX0tWTV9BTURfU0VWYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBzdGF0ZSBvZiBgQ09ORklHX0tWTV9BTURfU0VWYC4gR2l2ZW4gdGhlIGNvbnRleHQsIHRoaXMgbGlrZWx5IG1lYW5zIEknbSB0cm91Ymxlc2hvb3Rpbmcgb3IgaW52ZXN0aWdhdGluZyBzb21lIGJlaGF2aW9yIHJlbGF0ZWQgdG8gQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgd2l0aGluIGEgS1ZNIGVudmlyb25tZW50LiBJJ20gcHJvYmFibHkgbG9va2luZyBhdCBhIGNvbmZpZ3VyYXRpb24gZmlsZSwgYSBidWlsZCBzeXN0ZW0sIG9yIHBlcmhhcHMgc29tZSBrZXJuZWwgb3V0cHV0IG9yIGxvZ3MuIFRoZSBzcGVjaWZpY3MgZGVwZW5kIG9uIHdoYXQgSSdtIHRyeWluZyB0byBhY2hpZXZlLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hldGhlciBTRVYgc3VwcG9ydCBpcyBlbmFibGVkLiBJcyBpdCBzZXQgdG8gXCJ5XCIgKGJ1aWx0LWluKSwgXCJtXCIgKG1vZHVsZSksIG9yIGRpc2FibGVkPyBUaGUgYW5zd2VyIHdpbGwgaGVhdmlseSBpbmZsdWVuY2UgbXkgbmV4dCBzdGVwcy4gSWYgaXQncyBkaXNhYmxlZCwgSSBrbm93IHRoYXQncyB0aGUgcm9vdCBjYXVzZSBhbmQgSSdsbCBuZWVkIHRvIHJlY29uZmlndXJlIGFuZCByZWJ1aWxkLCBvciByZS1ldmFsdWF0ZSB0aGUgcmVsZXZhbnQgbW9kdWxlLiBBIG1vZHVsZSBzZXR1cCBtaWdodCBiZSBva2F5LCBidXQgSSdsbCBzdGlsbCBoYXZlIHRvIGNoZWNrIGlmIGl0J3MgbG9hZGluZyBjb3JyZWN0bHkuXG5cbklmIGl0ICppcyogZW5hYmxlZCwgdGhlbiBJJ2xsIG5lZWQgdG8gZHJpbGwgZG93biBkZWVwZXIgdG8gdW5kZXJzdGFuZCB3aGF0IGlzc3VlcyBhcmUgYXBwZWFyaW5nLiBJJ2xsIG5lZWQgdG8gZ28gdG8gdGhlIGhhcmR3YXJlLCB0aGUgQklPUywgS1ZNIHNldHVwLCBhbmQga2VybmVsIHZlcnNpb25zLiBUaGlzIGlzIGEgY3J1Y2lhbCBmaXJzdCBzdGVwOyBJIGNhbid0IHByb2NlZWQgd2l0aG91dCBjb25maXJtaW5nIHRoaXMgaW5pdGlhbCBjb25maWd1cmF0aW9uIGVsZW1lbnQuIFRoZSBvdXRjb21lIG9mIHRoaXMgY2hlY2sgd2lsbCBkZWZpbmUgdGhlIG5leHQgcGhhc2Ugb2YgdGhpcyBkZWJ1Z2dpbmcgb3IgaW52ZXN0aWdhdGl2ZSBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODM4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzM6MTUuNDg5MzUyMzg4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNTU1NDczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQU1EX1NFVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNDY9Y29uZmlnIEtWTV9BTURcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjMzOjE1LjU4MTkzMzczMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDIwNDc4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYENPTkZJR19DUllQVE9fREVWX1NQX0NDUGAgQ29uZmlndXJhdGlvbiBPcHRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGUgYENPTkZJR19DUllQVE9fREVWX1NQX0NDUGAgb3B0aW9uLiBUaGlzIGxpa2VseSBpbmRpY2F0ZXMgd2UncmUgZGVhbGluZyB3aXRoIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiDigJMgc3BlY2lmaWNhbGx5LCB0aGUgU2Ftc3VuZyBDcnlwdG8gUHJvY2Vzc29yIChDQ1ApIOKAkyBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogd2hhdCdzIHRoZSBicm9hZGVyIHN5c3RlbSBjb250ZXh0PyBJcyB0aGlzIGZvciBhIHNwZWNpZmljIGtlcm5lbCB2ZXJzaW9uPyBXaGF0J3MgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmU/IFRoYXQgd2lsbCBpbmZvcm0gaG93IGRlZXBseSBJIG5lZWQgdG8gZ28gdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2hlY2sgZm9yIGRlcGVuZGVuY2llcy4gQXJlIHRoZXJlIGFueSBwcmVyZXF1aXNpdGVzIGluIHRlcm1zIG9mIG90aGVyIGNyeXB0byBkZXZpY2UgZHJpdmVycyBvciBrZXkgbWFuYWdlbWVudCBtb2R1bGVzPyBBbmQsIG9mIGNvdXJzZSwgdGhlIGV2ZXItcHJlc2VudCBzZWN1cml0eSBjb25zaWRlcmF0aW9uczogd2hhdCB2dWxuZXJhYmlsaXRpZXMgaGFzIHRoaXMgbW9kdWxlIGZhY2VkIGluIHRoZSBwYXN0LCBhbmQgd2hhdCBoYXJkZW5pbmcgdGVjaG5pcXVlcyBhcmUgYXBwbGllZD8gSSB3YW50IHRvIGFzc2VzcyB0aGUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIG1ldHJpY3MgdG9vLiBJZiB0aGlzIGhhcmR3YXJlIGFjY2VsZXJhdG9yIGlzbid0IHByb3Blcmx5IGNvbmZpZ3VyZWQgb3IgdXRpbGl6ZWQsIGl0IGNhbiBoYXZlIHNlcmlvdXMgcGVyZm9ybWFuY2UgZHJhd2JhY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMxNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjMzOjE4LjkyMzk4NTc3NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjcwMzIwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ1JZUFRPX0RFVl9TUF9DQ1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWc9Mj1jb25maWcgQ1JZUFRPX0RFVl9DQ1BfRERcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTktXFxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWc6MTA6Y29uZmlnIENSWVBUT19ERVZfU1BfQ0NQXFxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMTEtXFx0Ym9vbCBcXFwiQ3J5cHRvZ3JhcGhpYyBDb3Byb2Nlc3NvciBkZXZpY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjMzOjE4Ljk5MDY5NDIyMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTQ2Mzk2MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCBzZWVtcyB0aGV5J3ZlIGludHJvZHVjZWQgYHNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKWAgYW5kIGBzbnBfc2V0dXBfcm1wb3B0KClgIOKAkyBpbnRlcmVzdGluZy4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjbGVhcmx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFNFViBjb250ZXh0LCBhbmQgdGhleSdyZSBsb2NhdGVkIGluIGBhcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkFscmlnaHQsIGxldCdzIG1ha2Ugc3VyZSB0aGlzIGBzZXYuY2AgZmlsZSBpcyBhY3R1YWxseSBnZXR0aW5nIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBpbWFnZS5cIiBJdCdzIGNyaXRpY2FsIHRvIHZlcmlmeSB0aGF0IHRoZSBTRVYtc3BlY2lmaWMgY29kZSBpcyBwcmVzZW50IGFuZCBhY3RpdmUsIG90aGVyd2lzZSwgdGhlc2UgbmV3IGZ1bmN0aW9ucyBhcmUganVzdCBkZWFkIHdlaWdodCBhbmQgcG90ZW50aWFsIHBvaW50cyBvZiBjb25mdXNpb24uIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBjb21wb25lbnQgaXMgY29tcGlsZWQgYXMgcGFydCBvZiB0aGUgc3lzdGVtJ3MgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2ODUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozMzoyMi4wNDUzMzY3NzVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MzkxOTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldlxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni92aXJ0L3N2bS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni92aXJ0L3N2bS9NYWtlZmlsZS0yLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX0tWTV9BTURfU0VWKSArPSBzZXYub1xcbmFyY2gveDg2L3ZpcnQvc3ZtL01ha2VmaWxlLTQtb2JqLSQoQ09ORklHX0NQVV9TVVBfQU1EKSArPSBjbWRsaW5lLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzM6MjIuMTQ0NzM0NjM4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDUwMDQzOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTRVYgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBLVk0vU0VWIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBDT05GSUdfS1ZNX0FNRF9TRVZgIGlzIHRoZSBrZXkuIEJ1dCBob2xkIG9uLCB0aGUgYnVpbGQgc3lzdGVtIHNlZW1zIHRvIGNvbmRpdGlvbmFsbHkgY29tcGlsZSBgYXJjaC94ODYvdmlydC9zdm0vc2V2LmNgIGJhc2VkIG9uIHRoaXMgb3B0aW9uLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS5cblxuTm93LCBhIGJpdCBtb3JlIGRpZ2dpbmcgcmV2ZWFscyB0aGF0IGBDT05GSUdfS1ZNX0FNRF9TRVZgIGluIHR1cm4gaGluZ2VzIG9uIGBLVk1fQU1EYC4gVGhpcyBpbXBsaWVzIGEgaGllcmFyY2hpY2FsIGRlcGVuZGVuY3kuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIGBLVk1fQU1EX1NFVmAncyBkZXBlbmRlbmNpZXMgdG8gZW5zdXJlIEkndmUgYWNjb3VudGVkIGZvciBldmVyeSByZWxldmFudCBjb21wb25lbnQuIFRpbWUgdG8gY2hlY2sgdGhvc2UgZGVwZW5kZW5jaWVzIHRob3JvdWdobHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDU1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzM6MjYuMzQ5NzQzOTkxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjE4ODkwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0FNRF9TRVZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTQ2PWNvbmZpZyBLVk1fQU1EXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozMzoyNi40MTU5MzkzMjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzMDQxMDAxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBLVk0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIEtWTSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgb25lcyBkZWFsaW5nIHdpdGggeDg2IGFyY2hpdGVjdHVyZS4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgYXJjaC94ODYva3ZtL0tjb25maWdgIOKAkyBhcm91bmQgbGluZSAxNTYsIGlmIG1lbW9yeSBzZXJ2ZXMsIHRoYXQgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzZWN0aW9ucy4gTXkgaW50ZW50aW9uIGlzIGxpa2VseSB0byBmaWd1cmUgb3V0IHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkLCBvciBob3cgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXJlIGhhbmRsZWQuIE1pZ2h0IGJlIGxvb2tpbmcgZm9yIG9wdGlvbnMgcmVsYXRlZCB0byBhIHNwZWNpZmljIENQVSBmZWF0dXJlLCBvciBwZXJoYXBzIGZpZ3VyaW5nIG91dCBob3cgc29tZSBuZXcgZmVhdHVyZSBoYXMgYmVlbiBpbnRlZ3JhdGVkIGludG8gdGhlIEtWTSBjb25maWd1cmF0aW9uLiBOZWVkIHRvIGdldCBhIGdyYXNwIG9uIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHRzIGF0IHBsYXkgdGhlcmUsIHNvIEkgY2FuIG1vcmUgZnVsbHkgZ3Jhc3AgdGhlIGltcGFjdCBvZiBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGNob2ljZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDQ5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzM6MjkuNTQ2MzU1MDQ1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTA6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gQU1EIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCB0aGUgQU1ELVZcXG4gMTUxOlxcdFxcdCAgKFNWTSkgZXh0ZW5zaW9ucy5cXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTU0OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLWFtZC5cXG4gMTU1OlxcdFxcbiAxNTY6XFx0Y29uZmlnIEtWTV9BTURfU0VWXFxuIDE1NzpcXHRcXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbiAxNTg6XFx0XFx0ZGVmYXVsdCB5XFxuIDE1OTpcXHRcXHRkZXBlbmRzIG9uIEtWTV9BTUQgXFx1MDAyNlxcdTAwMjYgWDg2XzY0XFxuIDE2MDpcXHRcXHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfUFNQIFxcdTAwMjZcXHUwMDI2ICEoS1ZNX0FNRD15IFxcdTAwMjZcXHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pXFxuIDE2MTpcXHRcXHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cXG4gMTYyOlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbiAxNjM6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXFxuIDE2NDpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG4gMTY1OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcXG4gMTY2OlxcdFxcdGhlbHBcXG4gMTY3OlxcdFxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgbGF1bmNoaW5nIGVuY3J5cHRlZCBWTXMgd2hpY2ggdXNlIFNlY3VyZVxcbiAxNjg6XFx0XFx0ICBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFViksIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gd2l0aFxcbiAxNjk6XFx0XFx0ICBFbmNyeXB0ZWQgU3RhdGUgKFNFVi1FUyksIGFuZCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIHdpdGhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzM6MjkuNTQ2NDYzODU1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4Nzk2OTAzNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgbWVudGFsIGNoZWNrbGlzdCBiZWdpbnM6XG5cbioqRXhhbWluaW5nIHRoZSBEZXBlbmRlbmN5IFRyZWUgZm9yIEtWTV9BTURfU0VWKipcblxuUmlnaHQsIHNvIGBLVk1fQU1EX1NFVmAgcmVsaWVzIG9uIGBLVk1fQU1EYCwgYFg4Nl82NGAsIGFuZCBgQ1JZUFRPX0RFVl9TUF9QU1BgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgSSBhbHdheXMgZGlnIGRlZXBlci4gU2luY2UgYENSWVBUT19ERVZfU1BfUFNQYCBpcyBvbmUgb2YgdGhlIGRlcGVuZGVuY2llcywgbGV0J3MgZ28gYWhlYWQgYW5kIGRyaWxsIGRvd24gaW50byAqaXRzKiBkZXBlbmRlbmNpZXMsIGFuZCBtYWtlIHN1cmUgZXZlcnl0aGluZyB0aGVyZSBpcyBzaGlwc2hhcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDY4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozMzozMi40MjYxNTczNDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTc4OTg2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ1JZUFRPX0RFVl9TUF9QU1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWc9MjM9Y29uZmlnIENSWVBUT19ERVZfQ0NQX0NSWVBUT1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMzctXFxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWc6Mzg6Y29uZmlnIENSWVBUT19ERVZfU1BfUFNQXFxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMzktXFx0Ym9vbCBcXFwiUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApIGRldmljZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzM6MzIuNTM3OTYwMTc0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDk5NDkwMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBDQ1AgQ3J5cHRvIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgQ0NQIGNyeXB0byBkcml2ZXIuIExldCdzIHNlZS4uLiB0aGUgbW9zdCByZWxldmFudCBwbGFjZSB0byBzdGFydCBpcyBsaWtlbHkgdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgZHJpdmVyJ3MgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEknbGwgZm9jdXMgb24gYXJvdW5kIGxpbmUgMzguIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gSSBleHBlY3QgdG8gZmluZCB0aGUgbWFpbiBmZWF0dXJlIGZsYWdzLCBtYXliZSBzb21lIGRlcGVuZGVuY3kgY2hlY2tzLCBhbmQgcG90ZW50aWFsbHkgc29tZSBkZWZhdWx0IHNldHRpbmdzIG9yIGhlbHAgdGV4dCB0aGF0IG1pZ2h0IHNoZWQgbGlnaHQgb24gaG93IHRoaXMgZHJpdmVyIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYW5kIGNvbmZpZ3VyZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGtleSBvcHRpb25zLCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgY29uc3RyYWludHMgd2lsbCBiZSBjcml0aWNhbCBmb3IgY29tcHJlaGVuZGluZyBob3cgdG8gaW50ZWdyYXRlIG9yIG1vZGlmeSB0aGlzIGRyaXZlciB3aXRoaW4gYSBsYXJnZXIgc3lzdGVtLiBJJ20gbG9va2luZyBmb3IgdGhpbmdzIGxpa2Ugd2hldGhlciBpdCdzIG1vZHVsYXIsIGlmIGl0J3MgZ290IGFueSBoYXJkd2FyZSBkZXBlbmRlbmNpZXMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIga2VybmVsIGNyeXB0byBBUEkuIEhvcGVmdWxseSB0aGlzIHdpbGwgYmUgZW5vdWdoIHRvIGdldCBteSB1bmRlcnN0YW5kaW5nIHN0YXJ0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzc4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzM6MzUuOTg3OTExNzhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzA6XFx0XFx0c2VsZWN0IENSWVBUT19BVVRIRU5DXFxuICAzMTpcXHRcXHRzZWxlY3QgQ1JZUFRPX1JTQVxcbiAgMzI6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQUVTXFxuICAzMzpcXHRcXHRoZWxwXFxuICAzNDpcXHRcXHQgIFN1cHBvcnQgZm9yIHVzaW5nIHRoZSBjcnlwdG9ncmFwaGljIEFQSSB3aXRoIHRoZSBBTUQgQ3J5cHRvZ3JhcGhpY1xcbiAgMzU6XFx0XFx0ICBDb3Byb2Nlc3Nvci4gVGhpcyBtb2R1bGUgc3VwcG9ydHMgb2ZmbG9hZCBvZiBTSEEgYW5kIEFFUyBhbGdvcml0aG1zLlxcbiAgMzY6XFx0XFx0ICBJZiB5b3UgY2hvb3NlICdNJyBoZXJlLCB0aGlzIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjY3BfY3J5cHRvLlxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgQ1JZUFRPX0RFVl9TUF9QU1BcXG4gIDM5OlxcdFxcdGJvb2wgXFxcIlBsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKSBkZXZpY2VcXFwiXFxuICA0MDpcXHRcXHRkZWZhdWx0IHlcXG4gIDQxOlxcdFxcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9DQ1BfREQgXFx1MDAyNlxcdTAwMjYgWDg2XzY0IFxcdTAwMjZcXHUwMDI2IEFNRF9JT01NVVxcbiAgNDI6XFx0XFx0c2VsZWN0IFBDSV9UU00gaWYgUENJXFxuICA0MzpcXHRcXHRoZWxwXFxuICA0NDpcXHRcXHQgUHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgQU1EIFBsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKS5cXG4gIDQ1OlxcdFxcdCBUaGUgUFNQIGlzIGEgZGVkaWNhdGVkIHByb2Nlc3NvciB0aGF0IHByb3ZpZGVzIHN1cHBvcnQgZm9yIGtleVxcbiAgNDY6XFx0XFx0IG1hbmFnZW1lbnQgY29tbWFuZHMgaW4gU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBtb2RlLFxcbiAgNDc6XFx0XFx0IGFsb25nIHdpdGggc29mdHdhcmUtYmFzZWQgVHJ1c3RlZCBFeGVjdXRpb24gRW52aXJvbm1lbnQgKFRFRSkgdG9cXG4gIDQ4OlxcdFxcdCBlbmFibGUgdGhpcmQtcGFydHkgdHJ1c3RlZCBhcHBsaWNhdGlvbnMuXFxuICA0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzM6MzUuOTg3OTY5NTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxMzUwMTEyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZXBlbmRlbmN5IEFuYWx5c2lzIGZvciBDcnlwdG9ncmFwaGljIERldmljZSBTdXBwb3J0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYENSWVBUT19ERVZfU1BfUFNQYCBhbmQgaXQncyBmbGFnZ2VkIGFzIGRlcGVuZGluZyBvbiBhIGZldyBvdGhlciBjb21wb25lbnRzLiBGaXJzdCB1cCwgSSBzZWUgdGhhdCBpdCdzIHJlbHlpbmcgb24gYENSWVBUT19ERVZfQ0NQX0REYCwgYFg4Nl82NGAsIGFuZCBgQU1EX0lPTU1VYC4gTWFrZXMgc2Vuc2UuIEdpdmVuIHRoZSBQU1AgbGlrZWx5IGhhbmRsZXMgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zLCB0aGUgbmVlZCBmb3IgYSBzcGVjaWZpYyBDQ1AgKGNyeXB0byBjby1wcm9jZXNzb3IpIGRldmljZSBkcml2ZXIgbGlrZSBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBhbmQgdGhlIGhhcmR3YXJlIHJlcXVpcmVtZW50cyBmb3IgQU1ELXNwZWNpZmljIElPTU1VIHN1cHBvcnQsIHBsdXMgbmVlZGluZyBgWDg2XzY0YCBhcmNoaXRlY3R1cmUuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBkZXZpY2UgZHJpdmVyLiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgYENSWVBUT19ERVZfQ0NQX0REYCBhbmQgaXRzIGludGVyYWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NDgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjMzOjM5LjMwMTQ3NDQwNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBDUllQVE9fREVWX0NDUF9ERFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNlY3VyZSBQcm9jZXNzb3IgZGV2aWNlIGRyaXZlclxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQ1BVX1NVUF9BTUQgfHwgQVJNNjRcXG4gICA1OlxcdFxcdGRlZmF1bHQgbVxcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBQcm92aWRlcyBBTUQgU2VjdXJlIFByb2Nlc3NvciBkZXZpY2UgZHJpdmVyLlxcbiAgIDg6XFx0XFx0ICBJZiB5b3UgY2hvb3NlICdNJyBoZXJlLCB0aGlzIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjY3AuXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNvbmZpZyBDUllQVE9fREVWX1NQX0NDUFxcbiAgMTE6XFx0XFx0Ym9vbCBcXFwiQ3J5cHRvZ3JhcGhpYyBDb3Byb2Nlc3NvciBkZXZpY2VcXFwiXFxuICAxMjpcXHRcXHRkZWZhdWx0IHlcXG4gIDEzOlxcdFxcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9DQ1BfREQgXFx1MDAyNlxcdTAwMjYgRE1BREVWSUNFU1xcbiAgMTQ6XFx0XFx0c2VsZWN0IEhXX1JBTkRPTVxcbiAgMTU6XFx0XFx0c2VsZWN0IERNQV9FTkdJTkVcXG4gIDE2OlxcdFxcdHNlbGVjdCBDUllQVE9fU0hBMVxcbiAgMTc6XFx0XFx0c2VsZWN0IENSWVBUT19TSEEyNTZcXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgUHJvdmlkZXMgdGhlIHN1cHBvcnQgZm9yIEFNRCBDcnlwdG9ncmFwaGljIENvcHJvY2Vzc29yIChDQ1ApIGRldmljZVxcbiAgMjA6XFx0XFx0ICB3aGljaCBjYW4gYmUgdXNlZCB0byBvZmZsb2FkIGVuY3J5cHRpb24gb3BlcmF0aW9ucyBzdWNoIGFzIFNIQSwgQUVTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjMzOjM5LjMwMTU4MTczNloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTk4MjQzMDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUk1QT1BUIGFuZCBTRVYtU05QIEltcGxlbWVudGF0aW9uIGZvciBUZXN0aW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBlbnN1cmluZyB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYWNlOiBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIGBDUllQVE9fREVWX0NDUF9ERGAsIGBDUllQVE9fREVWX1NQX1BTUGAsIGFuZCBgQU1EX0lPTU1VYC4gTm93LCB0aGlua2luZyBhYm91dCBTeXprYWxsZXIsIGl0IGNyZWF0ZXMgVk1zIGZvciBLVk0gdGVzdGluZy4gVGhhdCdzIGtleS4gVGhlIHNwZWNpZmljIGZ1bmN0aW9uIEkgbmVlZCB0byB0ZXN0IGlzIGBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKClgLiBUbyBleGVjdXRlIHRoZSBjb2RlIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCBJIGhhdmUgdG8gZW5zdXJlIHRoYXQgYHJtcG9wdF9jYXBhYmxlKClgIHJldHVybnMgdHJ1ZS5cblxuYHJtcG9wdF9jYXBhYmxlKClgIGhpbmdlcyBvbiB0d28gY29uZGl0aW9uczogdGhlIGBYODZfRkVBVFVSRV9STVBPUFRgIENQVSBmZWF0dXJlIGJlaW5nIGVuYWJsZWQgYW5kIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAgYmVpbmcgcHJlc2VudC4gVGhlIGZpcnN0LCBgWDg2X0ZFQVRVUkVfUk1QT1BUYCwgaXMgdHlwaWNhbGx5IGRpc2NvdmVyZWQgdmlhIENQVUlELiBOb3csIHRoZSBTeXprYWxsZXIgdGVzdGluZyBlbnZpcm9ubWVudC4uLiBpdCBydW5zIGluc2lkZSBhIFZNLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGhvc3Qga2VybmVsIGZvciB0aGUgU3l6a2FsbGVyIGluc3RhbmNlICppcyogdGhlIGd1ZXN0IGtlcm5lbCBvZiB0aGUgb3V0ZXIgVk0gKGxpa2VseSBHQ0UsIGluIHRoaXMgY2FzZSkuIENhbiBTeXprYWxsZXIgZmFrZSBDUFVJRCByZXN1bHRzIHdpdGhpbiB0aGUgaG9zdCBrZXJuZWw/IE5vLCBpdCBjYW4ndC4gU28sIHRoZSBvdXRlciBWTSAoR0NFKSAqbXVzdCogZXhwb3NlIGJvdGggYFg4Nl9GRUFUVVJFX1JNUE9QVGAgYW5kIFNFVi1TTlAgc3VwcG9ydCB0byB0aGUgaW5uZXIgVk0gKHRoZSBTeXprYWxsZXIgaG9zdCkuXG5cblRoZSBiaWcgcXVlc3Rpb24gaXMsIGRvZXMgR0NFICphY3R1YWxseSogZXhwb3NlIHRoZXNlIGZlYXR1cmVzIHRvIG5lc3RlZCBWTXM/IE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBuZXN0ZWQgU0VWLVNOUCBpc24ndCBnZW5lcmFsbHkgc3VwcG9ydGVkIG9yIGF2YWlsYWJsZSBpbiBzdGFuZGFyZCBHQ0UgaW5zdGFuY2VzLiBUaGlzIGlzIGEgcHJvYmxlbS4gSWYgYHJtcG9wdF9jYXBhYmxlKClgIHJldHVybnMgZmFsc2UsIHRoZW4gdGhlIGZ1bmN0aW9uIGBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKClgIHdpbGwgcmV0dXJuIGVhcmx5LlxuXG5MZXQncyBsb29rIGZvciBhbHRlcm5hdGl2ZSBjb2RlIHBhdGhzLiBUaGUgZnVuY3Rpb24gYHNucF9zZXR1cF9ybXBvcHQoKWAgaXMgY2FsbGVkIGZyb20gYF9fc2V2X3NucF9pbml0X2xvY2tlZCgpYC4gVGhhdCBmdW5jdGlvbiBhbHNvIHJldHVybnMgZWFybHkgaWYgYHJtcG9wdF9jYXBhYmxlKClgIHJldHVybnMgZmFsc2UuIFNpbWlsYXJseSwgYHNucF9zaHV0ZG93bigpYCBjYWxscyBgc25wX2NsZWFudXBfcm1wb3B0KClgIHdoaWNoIHdpbGwgcmV0dXJuIGVhcmx5IGlmIGBzbnBfc2V0dXBfcm1wb3B0KClgIGhhc24ndCBiZWVuIHN1Y2Nlc3NmdWwuIFNvLCB0aGUgcG90ZW50aWFsIGNvZGUgcGF0aHMgYXJlIGxpbWl0ZWQuXG5cblRoZXJlIGlzIGFsc28gdGhlIGBzbnBfcHJlcGFyZSgpYCBmdW5jdGlvbiwgY2FsbGVkIGR1cmluZyBTTlAgaW5pdGlhbGl6YXRpb24uIEhlcmUgaXQgaGFzIGEgY2hlY2sgdGhhdCBhbGwgQ1BVcyBvbmxpbmUgYW5kIHByZXNlbnQgbXVzdCBtYXRjaC4gSWYgU0VWLVNOUCBpcyBub3Qgc3VwcG9ydGVkLCBgc25wX3ByZXBhcmUoKWAgbWlnaHQgbm90IGJlIGNhbGxlZCwgb3IgaXQgbWlnaHQgZmFpbCBxdWlja2x5LiBJIG5lZWQgdG8gdHJhY2UgYmFjayB3aGVyZSBgc25wX3ByZXBhcmUoKWAgaXMgY2FsbGVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ4OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjMzOjQ5LjMwMDc5OTY1OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgzNjk3MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNucF9wcmVwYXJlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0xMzU1PXN0YXRpYyBpbnQgX19zZXZfc25wX2luaXRfbG9ja2VkKGludCAqZXJyb3IsIHVuc2lnbmVkIGludCBtYXhfc25wX2FzaWQpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTEzNzctXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoxMzc4OlxcdHJjID0gc25wX3ByZXBhcmUoKTtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTEzNzktXFx0aWYgKHJjKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozMzo0OS44ODQ1MDExMjhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3MTExMjA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgX19zZXZfc25wX2luaXRfbG9ja2VkKClgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIGBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoKWAgZnVuY3Rpb24uIEkga25vdyB0aGlzIGlzIGEgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIFNFVi1TTlAgaW5pdGlhbGl6YXRpb24sIGFuZCBpdCdzIHByb2JhYmx5IHdoZXJlIGEgbG90IG9mIHRoZSBpbml0aWFsIHNldHVwIHRha2VzIHBsYWNlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBhcm91bmQgaGVyZSAtIGFyZSB3ZSBkZWFsaW5nIHdpdGggYSBtdXRleCwgYSBzcGlubG9jaywgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQ/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbmN1cnJlbmN5IGFzcGVjdCBpcyBwYXJhbW91bnQgdG8gdHJhY2tpbmcgZG93biBhbnkgcG90ZW50aWFsIGlzc3Vlcywgb3IgYXBwcmVjaWF0aW5nIHRoZSBkZXNpZ24gY2hvaWNlcyBtYWRlLiBMZXQncyBzZWUgaG93IHRoZXkncmUgaGFuZGxpbmcgYWNjZXNzIHRvIHRoZSBzaGFyZWQgc3RhdGUsIGFuZCB3aGF0IGtpbmQgb2YgY29udGVudGlvbiB0aGV5IGFudGljaXBhdGUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIG92ZXJhbGwgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIElzIHRoaXMgcGFydCBvZiB0aGUgZWFybHkgYm9vdCBwcm9jZXNzLCBvciBkb2VzIGl0IGdldCBjYWxsZWQgbGF0ZXI/IFdoYXQncyB0aGUgY29udGV4dCBpbiB3aGljaCB0aGlzIGxvY2sgaXMgaGVsZCBhbmQgcmVsZWFzZWQ/IEtub3dpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBnaXZlIG1lIHZhbHVhYmxlIGNsdWVzIGFib3V0IHRoZSBmdW5jdGlvbidzIHJlc3BvbnNpYmlsaXR5IGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uIEkgYWxzbyBuZWVkIHRvIG1ha2UgYSBtZW50YWwgbm90ZSBvZiBob3cgZXJyb3IgaGFuZGxpbmcgaXMgZG9uZSBoZXJlLCBhbmQgaG93IHRoZXkgaGFuZGxlIGZhaWx1cmUuIEknbSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIGdyYWNlZnVsIGV4aXQsIHNvIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGJhY2sgcGF0aHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTk0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzM6NTMuNDU1NjE2MzA2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNTA6XFx0XFx0fVxcbjEzNTE6XFx0XFxuMTM1MjpcXHRcXHRyZXR1cm4gMDtcXG4xMzUzOlxcdH1cXG4xMzU0OlxcdFxcbjEzNTU6XFx0c3RhdGljIGludCBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoaW50ICplcnJvciwgdW5zaWduZWQgaW50IG1heF9zbnBfYXNpZClcXG4xMzU2OlxcdHtcXG4xMzU3OlxcdFxcdHN0cnVjdCBzZXZfZGF0YV9yYW5nZV9saXN0ICpzbnBfcmFuZ2VfbGlzdCBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcXG4xMzU4OlxcdFxcdHN0cnVjdCBwc3BfZGV2aWNlICpwc3AgPSBwc3BfbWFzdGVyO1xcbjEzNTk6XFx0XFx0c3RydWN0IHNldl9kYXRhX3NucF9pbml0X2V4IGRhdGEgPSB7fTtcXG4xMzYwOlxcdFxcdHN0cnVjdCBzZXZfZGV2aWNlICpzZXY7XFxuMTM2MTpcXHRcXHR2b2lkICphcmcgPSBcXHUwMDI2ZGF0YTtcXG4xMzYyOlxcdFxcdGludCBjbWQsIHJjID0gMDtcXG4xMzYzOlxcdFxcbjEzNjQ6XFx0XFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbjEzNjU6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMTM2NjpcXHRcXG4xMzY3OlxcdFxcdHNldiA9IHBzcC1cXHUwMDNlc2V2X2RhdGE7XFxuMTM2ODpcXHRcXG4xMzY5OlxcdFxcdGlmIChzZXYtXFx1MDAzZXNucF9pbml0aWFsaXplZClcXG4xMzcwOlxcdFxcdFxcdHJldHVybiAwO1xcbjEzNzE6XFx0XFxuMTM3MjpcXHRcXHRpZiAoIXNldl92ZXJzaW9uX2dyZWF0ZXJfb3JfZXF1YWwoU05QX01JTl9BUElfTUFKT1IsIFNOUF9NSU5fQVBJX01JTk9SKSkge1xcbjEzNzM6XFx0XFx0XFx0ZGV2X2RiZyhzZXYtXFx1MDAzZWRldiwgXFxcIlNFVi1TTlAgc3VwcG9ydCByZXF1aXJlcyBmaXJtd2FyZSB2ZXJzaW9uIFxcdTAwM2U9ICVkOiVkXFxcXG5cXFwiLFxcbjEzNzQ6XFx0XFx0XFx0XFx0U05QX01JTl9BUElfTUFKT1IsIFNOUF9NSU5fQVBJX01JTk9SKTtcXG4xMzc1OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMzc2OlxcdFxcdH1cXG4xMzc3OlxcdFxcbjEzNzg6XFx0XFx0cmMgPSBzbnBfcHJlcGFyZSgpO1xcbjEzNzk6XFx0XFx0aWYgKHJjKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozMzo1My40NTU4MjE0NzZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTExOTE5MDg1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTRVYtU05QIFBsYXRmb3JtIENoZWNrKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGUgZmlyc3QgdGhpbmcgaXQgZG9lcyBpcyBjaGVjayBpZiBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAuIFJpZ2h0IGF3YXksIGl0IHJldHVybnMgYC1FTk9ERVZgIGlmIHRoZSBwbGF0Zm9ybSAqZG9lc24ndCogaGF2ZSBTRVYtU05QLiBUaGF0IG1lYW5zLCBsb2dpY2FsbHksIHRoZSByZXN0IG9mIHRoaXMgY29kZSBibG9jayBpcyBjb21wbGV0ZWx5IGJ5cGFzc2VkIHVubGVzcyB0aGUgaG9zdCBlbnZpcm9ubWVudCBpcyBhY3R1YWxseSBzZXQgdXAgZm9yIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gd2l0aCBTZWN1cmUgTmVzdGVkIFBhZ2luZy4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBjcmVhdGVzIGEgcm9hZGJsb2NrIGZvciBzeXprYWxsZXIuIERvZXMgc3l6a2FsbGVyIGV2ZW4gcnVuIG9uIGEgcGxhdGZvcm0gdGhhdCBvZmZlcnMgU0VWLVNOUD9cblxuTXkgZXhwZXJpZW5jZSB3aXRoIHN5emthbGxlciBpcyB0aGF0IGl0J3Mgb2Z0ZW4gcnVuIGluIEdDRSBWTXMuIEkga25vdyBmb3IgYSBmYWN0IHRoYXQgd2hpbGUgR0NFICpjYW4qIGJlIHRoZSAqaG9zdCogZm9yIFNFVi1TTlAgVk1zLCBpdCBkb2Vzbid0IGdlbmVyYWxseSBleHBvc2UgU0VWLVNOUCBjYXBhYmlsaXRpZXMgKndpdGhpbiogdGhlIGd1ZXN0IFZNcyB0aGVtc2VsdmVzLiBBIEdDRSBWTSBjYW4gKmJlKiBhbiBTRVYtU05QIFZNLCBidXQgeW91IGdlbmVyYWxseSBjYW5ub3QgcnVuICpuZXN0ZWQqIFNFVi1TTlAgd2l0aGluIGl0LiBUaGlzIHJhaXNlcyBhIHJlZCBmbGFnLlxuXG5XYWl0IGEgc2Vjb25kLiBMZXQgbWUgcmUtZXZhbHVhdGUuLi4gYENDX0FUVFJfSE9TVF9TRVZfU05QYCBpc24ndCBqdXN0IGFib3V0IHRoZSAqY2FwYWJpbGl0aWVzKiBvZiB0aGUgQ1BVLCBidXQgd2hldGhlciBpdCdzICplbmFibGVkKiBpbiB0aGUgQklPUy4gVGhpcyBtZWFucyBpdCBpcyB0aGUgKmhvc3QqIHRoYXQgZXhwb3NlcyB0aGUgZmVhdHVyZSB0byB0aGUgZ3Vlc3QuIFNvIHRoZSBsb2dpYyBoZXJlIGlzbid0IGp1c3QgYSBDUFUgZmVhdHVyZSBjaGVjay4gSXQgaXMgbGlrZWx5IGVuc3VyaW5nIHRoYXQgdGhlIHBsYXRmb3JtJ3MgQklPUyBoYXMgdGhpcyBmZWF0dXJlIGV4cG9zZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlIFZNIGNhcGFiaWxpdGllcy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBpcyBiZWluZyBzZXQuIEl0IGNvdWxkIGJlIHRyaWdnZXJlZCBieSBoYXJkd2FyZSwgQklPUywgb3IgYm90aC4gTGV0J3MgZGVsdmUgaW50byB0aGF0IGNoZWNrIGFuZCBzZWUgd2hhdCB0aGUgY29uZGl0aW9ucyBhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Nzc4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzM6NTguNTc1MDE2MzU0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE1Nzk0NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ0NfQVRUUl9IT1NUX1NFVl9TTlBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2NvY28vY29yZS5jPTcwPXN0YXRpYyBib29sIG5vaW5zdHIgYW1kX2NjX3BsYXRmb3JtX2hhcyhlbnVtIGNjX2F0dHIgYXR0cilcXG4tLVxcbmFyY2gveDg2L2NvY28vY29yZS5jLTEwMy1cXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYzoxMDQ6XFx0Y2FzZSBDQ19BVFRSX0hPU1RfU0VWX1NOUDpcXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xMDUtXFx0XFx0cmV0dXJuIGNjX2ZsYWdzLmhvc3Rfc2V2X3NucDtcXG4tLVxcbmFyY2gveDg2L2NvY28vY29yZS5jPTE3MD1zdGF0aWMgdm9pZCBhbWRfY2NfcGxhdGZvcm1fY2xlYXIoZW51bSBjY19hdHRyIGF0dHIpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xNzItXFx0c3dpdGNoIChhdHRyKSB7XFxuYXJjaC94ODYvY29jby9jb3JlLmM6MTczOlxcdGNhc2UgQ0NfQVRUUl9IT1NUX1NFVl9TTlA6XFxuYXJjaC94ODYvY29jby9jb3JlLmMtMTc0LVxcdFxcdGNjX2ZsYWdzLmhvc3Rfc2V2X3NucCA9IDA7XFxuLS1cXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYz0xOTI9c3RhdGljIHZvaWQgYW1kX2NjX3BsYXRmb3JtX3NldChlbnVtIGNjX2F0dHIgYXR0cilcXG4tLVxcbmFyY2gveDg2L2NvY28vY29yZS5jLTE5NC1cXHRzd2l0Y2ggKGF0dHIpIHtcXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYzoxOTU6XFx0Y2FzZSBDQ19BVFRSX0hPU1RfU0VWX1NOUDpcXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xOTYtXFx0XFx0Y2NfZmxhZ3MuaG9zdF9zZXZfc25wID0gMTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM9MzU1PXN0YXRpYyB2b2lkIGJzcF9kZXRlcm1pbmVfc25wKHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMtMzcyLVxcdFxcdCAgICBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpKSB7XFxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYzozNzM6XFx0XFx0XFx0Y2NfcGxhdGZvcm1fc2V0KENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3NC1cXHRcXHR9IGVsc2Uge1xcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMtMzc1LVxcdFxcdFxcdHNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfU0VWX1NOUCk7XFxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYzozNzY6XFx0XFx0XFx0Y2NfcGxhdGZvcm1fY2xlYXIoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMtMzc3LVxcdFxcdH1cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmM9MTA0PXN0YXRpYyBpbmxpbmUgdm9pZCBrOF9jaGVja19zeXNjZmdfZHJhbV9tb2RfZW4odm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMtMTExLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmM6MTEyOlxcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMtMTEzLVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTEyMzU9c3RhdGljIGJvb2wgX19pbml0IGF2aWNfd2FudF9hdmljX2VuYWJsZWQodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEyNTgtXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTI1OTpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEyNjAtXFx0ICAgICFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSFZfSU5VU0VfV1JfQUxMT1dFRCkpIHtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzA1Nj12b2lkIF9faW5pdCBzZXZfaGFyZHdhcmVfc2V0dXAodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzE2MC1cXHRzZXZfZXNfc3VwcG9ydGVkID0gdHJ1ZTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMxNjE6XFx0c2V2X3NucF9zdXBwb3J0ZWQgPSBzZXZfc25wX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMxNjItXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ5MDc9c3RydWN0IHBhZ2UgKnNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShpbnQgbm9kZSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTExLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDkxMjpcXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTEzLVxcdFxcdHJldHVybiBhbGxvY19wYWdlc19ub2RlKG5vZGUsIGdmcCB8IF9fR0ZQX1pFUk8sIDApO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz01MTMwPXZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUxMzMtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MTM0OlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUxMzUtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHQuYz0xMDI9dm9pZCBfX2luaXQgbWVtX2VuY3J5cHRfc2V0dXBfYXJjaCh2b2lkKVxcbi0tXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHQuYy0xMTAtXFx0ICovXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHQuYzoxMTE6XFx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHQuYy0xMTItXFx0XFx0c25wX2ZpeHVwX2U4MjBfdGFibGVzKCk7XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9jbWRsaW5lLmM9MTk9c3RhdGljIGludCBfX2luaXQgaW5pdF9zZXZfY29uZmlnKGNoYXIgKnN0cilcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL2NtZGxpbmUuYy0zMS1cXHRcXHRcXHRcXHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1NFVl9TTlApO1xcbmFyY2gveDg2L3ZpcnQvc3ZtL2NtZGxpbmUuYzozMjpcXHRcXHRcXHRcXHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuYXJjaC94ODYvdmlydC9zdm0vY21kbGluZS5jLTMzLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MTQ4PXN0YXRpYyB2b2lkIG1mZF9yZWNvbmZpZ3VyZSh2b2lkICphcmcpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTQ5LXtcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxNTA6XFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTE1MS1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xNTk9c3RhdGljIHZvaWQgc25wX2VuYWJsZSh2b2lkICphcmcpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xNjItXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MTYzOlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xNjQtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MjYxPXN0YXRpYyB2b2lkIGNsZWFyX3JtcCh2b2lkKVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMjY1LVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjI2NjpcXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMjY3LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTYyMj1zdGF0aWMgYm9vbCBybXBvcHRfY2FwYWJsZSh2b2lkKVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNjI0LVxcdHJldHVybiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUE9QVCkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo2MjU6XFx0ICAgICAgIGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNjI2LX1cXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTgyMD1pbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy04MjMtXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6ODI0OlxcdGlmIChXQVJOX09OX09OQ0UoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpKVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTgyNS1cXHRcXHRyZXR1cm4gLUVOT1NZUztcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTEwMjk9c3RhdGljIGludCBfX3NucF9sb29rdXBfcm1wZW50cnkodTY0IHBmbiwgc3RydWN0IHJtcGVudHJ5ICplLCBpbnQgKmxldmVsKVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTAzMy1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxMDM0OlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMDM1LVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MTE1NT1pbnQgcHNtYXNoKHU2NCBwZm4pXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMTU5LVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjExNjA6XFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTExNjEtXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xMjY0PXN0YXRpYyBpbnQgcm1wdXBkYXRlKHU2NCBwZm4sIHN0cnVjdCBybXBfc3RhdGUgKnN0YXRlKVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTI2OC1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxMjY5OlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMjcwLVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MTM1Nz12b2lkIGtkdW1wX3Nldl9jYWxsYmFjayh2b2lkKVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTM2Mi1cXHQgKi9cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxMzYzOlxcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTEzNjQtXFx0XFx0d2JpbnZkKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjMzOjU4LjY4NjYwMDQ1NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIzNjAwMzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBGbGFnKipcblxuUmlnaHQsIHNvIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAg4oCTIHRoYXQncyB0aGUga2V5IGZsYWcuIEkgcmVtZW1iZXIgc2VlaW5nIHRoYXQgdXNlZCB3aXRoIFNOUCwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIG1lIGJlY2F1c2Ugb2YgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCdzIGJlaW5nIHNldCBpbiBgYnNwX2RldGVybWluZV9zbnAoKWAgd2l0aGluIGBhcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jYC4gTmF0dXJhbGx5LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSByaWdodCBpbnRvIGBic3BfZGV0ZXJtaW5lX3NucCgpYCBpdHNlbGYuIE5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5ICp3aGVuKiBhbmQgKndoeSogdGhpcyBmbGFnIGlzIGdldHRpbmcgc2V0LiBXaGF0IGNvbmRpdGlvbnMgYXJlIGJlaW5nIGNoZWNrZWQ/IFdoYXQgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIGlzIGl0IGxvb2tpbmcgZm9yPyBOZWVkIHRvIGZpbmQgdGhpcyBmdW5jdGlvbiwgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA1NywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM0OjAyLjExMDIwNDQ4NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva2VybmVsL2NwdS9hbWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNTUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNTU6XFx0c3RhdGljIHZvaWQgYnNwX2RldGVybWluZV9zbnAoc3RydWN0IGNwdWluZm9feDg2ICpjKVxcbiAzNTY6XFx0e1xcbiAzNTc6XFx0I2lmZGVmIENPTkZJR19BUkNIX0hBU19DQ19QTEFURk9STVxcbiAzNTg6XFx0XFx0Y2NfdmVuZG9yID0gQ0NfVkVORE9SX0FNRDtcXG4gMzU5OlxcdFxcbiAzNjA6XFx0XFx0aWYgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfU0VWX1NOUCkpIHtcXG4gMzYxOlxcdFxcdFxcdC8qXFxuIDM2MjpcXHRcXHRcXHQgKiBSTVAgdGFibGUgZW50cnkgZm9ybWF0IGlzIG5vdCBhcmNoaXRlY3R1cmFsIGFuZCBpcyBkZWZpbmVkIGJ5IHRoZVxcbiAzNjM6XFx0XFx0XFx0ICogcGVyLXByb2Nlc3NvciBQUFIuIFJlc3RyaWN0IFNOUCBzdXBwb3J0IG9uIHRoZSBrbm93biBDUFUgbW9kZWxzXFxuIDM2NDpcXHRcXHRcXHQgKiBmb3Igd2hpY2ggdGhlIFJNUCB0YWJsZSBlbnRyeSBmb3JtYXQgaXMgY3VycmVudGx5IGRlZmluZWQgb3IgZm9yXFxuIDM2NTpcXHRcXHRcXHQgKiBwcm9jZXNzb3JzIHdoaWNoIHN1cHBvcnQgdGhlIGFyY2hpdGVjdHVyYWxseSBkZWZpbmVkIFJNUFJFQURcXG4gMzY2OlxcdFxcdFxcdCAqIGluc3RydWN0aW9uLlxcbiAzNjc6XFx0XFx0XFx0ICovXFxuIDM2ODpcXHRcXHRcXHRpZiAoIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUikgXFx1MDAyNlxcdTAwMjZcXG4gMzY5OlxcdFxcdFxcdCAgICAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9aRU4zKSB8fFxcbiAzNzA6XFx0XFx0XFx0ICAgICBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1pFTjQpIHx8XFxuIDM3MTpcXHRcXHRcXHQgICAgIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QUkVBRCkpIFxcdTAwMjZcXHUwMDI2XFxuIDM3MjpcXHRcXHRcXHQgICAgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKSkge1xcbiAzNzM6XFx0XFx0XFx0XFx0Y2NfcGxhdGZvcm1fc2V0KENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG4gMzc0OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDM3NTpcXHRcXHRcXHRcXHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1NFVl9TTlApO1xcbiAzNzY6XFx0XFx0XFx0XFx0Y2NfcGxhdGZvcm1fY2xlYXIoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xcbiAzNzc6XFx0XFx0XFx0fVxcbiAzNzg6XFx0XFx0fVxcbiAzNzk6XFx0I2VuZGlmXFxuIDM4MDpcXHR9XFxuIDM4MTpcXHRcXG4gMzgyOlxcdCNkZWZpbmUgWkVOX01PREVMX1NURVBfVUNPREUoZmFtLCBtb2RlbCwgc3RlcCwgdWNvZGUpIFxcXFxcXG4gMzgzOlxcdFxcdFg4Nl9NQVRDSF9WRk1fU1RFUFMoVkZNX01BS0UoWDg2X1ZFTkRPUl9BTUQsIGZhbSwgbW9kZWwpLCBcXFxcXFxuIDM4NDpcXHRcXHRcXHRcXHQgICAgc3RlcCwgc3RlcCwgdWNvZGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM0OjAyLjExMDM3NDM2NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODEzMzY2NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHlwZXJ2aXNvciBEZXBlbmRlbmN5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCdzIGltbWVkaWF0ZWx5IGp1bXBpbmcgb3V0IGF0IG1lIHRoYXQgaXQgaGluZ2VzIG9uIGAhY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9IWVBFUlZJU09SKWAuIEJlY2F1c2UsIGFuZCB0aGlzIGlzIGNydWNpYWwsIFN5emthbGxlciBydW5zIGluIGEgVk0sIHNwZWNpZmljYWxseSBHQ0UsIHdoaWNoICpkb2VzKiBzZXQgYFg4Nl9GRUFUVVJFX0hZUEVSVklTT1JgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgaWYgdGhhdCdzIHRoZSBjYXNlLCB0aGVuIGBic3BfZGV0ZXJtaW5lX3NucCgpYCB3aWxsIGNvbWUgYWxvbmcgYW5kICpjbGVhciogYFg4Nl9GRUFUVVJFX1NFVl9TTlBgIGFuZCBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgLlxuXG5CdXQgaG9sZCBvbiwgbGV0IG1lIHRyYWNlIHRoYXQgbG9naWMgYWdhaW7igKYgSWYgdGhhdCBpbml0aWFsIGNoZWNrIGlzICpmYWxzZSogKGkuZS4sIHdlICpkbyogaGF2ZSBhIGh5cGVydmlzb3IpLCBpdCBkcm9wcyBpbnRvIHRoZSBgZWxzZWAgYmxvY2ssIGFuZCAqdGhhdCogY2xlYXJzIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAgYW55d2F5ISBTbyBlc3NlbnRpYWxseSwgKm5vIG1hdHRlciB3aGF0KiwgaWYgd2UncmUgdW5kZXIgYSBoeXBlcnZpc29yIOKAkyB3aGljaCB3ZSBhYnNvbHV0ZWx5IGFyZSBpbiBTeXprYWxsZXIg4oCTIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAgaXMgYWx3YXlzIGdvaW5nIHRvIGJlIGZhbHNlLlxuXG5UaGVyZWZvcmUsIHNpbmNlIFN5emthbGxlciBydW5zIHVuZGVyIEdDRSwgd2hpY2ggaXMgYSBoeXBlcnZpc29yLCBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIGlzIEFMV0FZUyBmYWxzZS4gV2hpY2ggbWVhbnMgdGhhdCBgcm1wb3B0X2NhcGFibGUoKWAgd2lsbCBpbnZhcmlhYmx5IHJldHVybiBmYWxzZS4gV2hpY2ggbWVhbnMsIGFzIGEgZGlyZWN0IGNvbnNlcXVlbmNlLCB0aGF0IGJvdGggYHNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKWAgYW5kIGBzbnBfc2V0dXBfcm1wb3B0KClgIHdpbGwgaW1tZWRpYXRlbHkgcmV0dXJuLCBlZmZlY3RpdmVseSBkb2luZyBub3RoaW5nLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBlbnRpcmUgY29kZSBwYXRoIGlzIHVucmVhY2hhYmxlIGluIGFueSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gSXQncyBhIGRlYWQgZW5kLCBhdCBsZWFzdCBhcyBpdCBjdXJyZW50bHkgc3RhbmRzLiBJIG5lZWQgdG8gbWFrZSBhIG5vdGUgb2YgdGhpcy5cblxuQnV0IGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZW50aXJlIGNvZGUgYmFzZSB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhlcmUncyBubyBvdGhlciB3YXkgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBjYW4gYmUgc2V0LiBKdXN0IHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODY4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzQ6MDcuOTIzNzQ2OTQzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ3NTc0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2NfcGxhdGZvcm1fc2V0XFxcXChDQ19BVFRSX0hPU1RfU0VWX1NOUFxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jPTM1NT1zdGF0aWMgdm9pZCBic3BfZGV0ZXJtaW5lX3NucChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3Mi1cXHRcXHQgICAgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKSkge1xcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM6MzczOlxcdFxcdFxcdGNjX3BsYXRmb3JtX3NldChDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYy0zNzQtXFx0XFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzQ6MDguMDY4NTA5NjYzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1MzgwOTIzMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBUaGlzIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQncyBcIndvcnRoIGZ1enppbmdcIi4gVGhlIGNydWNpYWwgcG9pbnQgaGluZ2VzIG9uIHdoZXRoZXIgdGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiAgVGhlIGluaXRpYWwgYW5hbHlzaXMgcG9pbnRlZCB0byBgYnNwX2RldGVybWluZV9zbnAoKWAuIEl0IGV4cGxpY2l0bHkgY2hlY2tzIGAhY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9IWVBFUlZJU09SKWAsIHdoaWNoIG1lYW5zIGl0J3MgKmltcG9zc2libGUqIHRvIGhpdCB0aGF0IGNvZGUgcGF0aCBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBpZiB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiB0aGVzZSBlbnZpcm9ubWVudHMsIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLlxuXG5TaW5jZSBgYnNwX2RldGVybWluZV9zbnAoKWAgY29udGFpbnMgdGhlIHJlbGV2YW50IGNoZWNrLCBpdCBhcHBlYXJzIHRoaXMgcGFydCBvZiB0aGUgcGF0Y2ggaXMgbm90IHdvcnRoIGZ1enppbmcuIEknbSBzYXRpc2ZpZWQgdGhhdCB0aGlzIGlzIGNvcnJlY3QsIGJ1dCBsZXQgbWUgZG8gYSBtb3JlIHRob3JvdWdoIHJldmlldyBvZiAqYWxsKiBjaGFuZ2VzIHRvIGJlIGNlcnRhaW4uXG5cblRoZSBwYXRjaCB0b3VjaGVzIGEgYnVuY2ggb2YgZmlsZXM6IGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oYCwgYGFyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oYCwgYGFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oYCwgYGFyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNgLCBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AsIGFuZCBgYXJjaC94ODYvdmlydC9zdm0vc2V2LmNgLiBUaGUgY2hhbmdlcyBpbnZvbHZlIGFkZGluZyBgWDg2X0ZFQVRVUkVfUk1QT1BUYCwgbmV3IE1TUnMsIGZ1bmN0aW9uIHByb3RvdHlwZXMsIGNhbGxzIHRvIGBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKClgLCBhbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGEgZmV3IGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBgc25wX3JtcG9wdF9hbGxfcGh5c21lbSgpYCwgYHNucF9zZXR1cF9ybXBvcHQoKWAsIGBzbnBfY2xlYW51cF9ybXBvcHQoKWAsIGBybXBvcHRfY2FwYWJsZSgpYCwgYHJtcG9wdCgpYCwgYHJtcG9wdF9zY2FuX3JhbmdlKClgLCBhbmQgYHJtcG9wdF93b3JrX2hhbmRsZXIoKWAuIEl0IGFsc28gbW9kaWZpZXMgYHNucF9wcmVwYXJlKClgLCBgc25wX3NodXRkb3duKClgLCBgc25wX3JtcHRhYmxlX2luaXQoKWAsIGFuZCBgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKWAuXG5cbk15IGd1dCBzYXlzIG1vc3Qgb2YgdGhlc2UgbmV3IGZ1bmN0aW9ucyBpbiBgdmlydC9zdm0vc2V2LmNgIGxpa2VseSBkZXBlbmQgb24gdGhlIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBMZXQgbWUgZG91YmxlLWNoZWNrLiBJIHNob3VsZCBzcGVjaWZpY2FsbHkgaW52ZXN0aWdhdGUgYHNucF9wcmVwYXJlKClgLCBgc25wX3NodXRkb3duKClgLCBgc25wX3JtcHRhYmxlX2luaXQoKWAsIGFuZCBgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKWAuXG5cbk9rYXksIGBzbnBfcHJlcGFyZSgpYCBpcyBjYWxsZWQgZnJvbSBgX19zZXZfc25wX2luaXRfbG9ja2VkKClgLiBgX19zZXZfc25wX2luaXRfbG9ja2VkKClgIGhhcyBhIGNoZWNrIGZvciBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAgYW5kIHJldHVybnMgYC1FTk9ERVZgIGlmIHRoYXQgY2hlY2sgZmFpbHMuICBUaGlzIHN1Z2dlc3RzIHRoYXQgYHNucF9wcmVwYXJlKClgICptaWdodCogYmUgcmVhY2hhYmxlIGV2ZW4gaW4gYSB2aXJ0dWFsaXplZCBjb250ZXh0LCBidXQgb25seSBpZiB0aGUgaG9zdCBzdXBwb3J0cyB0aGUgcmVsZXZhbnQgU0VWLVNOUCBmZWF0dXJlcywgd2hpY2ggaXMgcXVpdGUgc3BlY2lmaWMuIFRoaXMgY291bGQgc3RpbGwgbWVhbiB0aGUgY29kZSBwYXRoIGlzbid0IGVhc3kgdG8gdHJpZ2dlciBpbiB0aGUgdXN1YWwgUUVNVS9HQ0Ugc2NlbmFyaW9zLCBhbmQgbWlnaHQganVzdGlmeSBgV29ydGhGdXp6aW5nPWZhbHNlYC4gTGV0J3MgY29uZmlybSB3aXRoIGBzbnBfc2h1dGRvd24oKWAuIEl0J3MgY2FsbGVkIGZyb20gYF9fc2V2X3NucF9zaHV0ZG93bl9sb2NrZWQoKWAuIFRpbWUgdG8gY2hlY2sgdGhhdCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3NjYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzQ6MTYuNjA2NjA1MzhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0ODgwMDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc2V2X3NucF9zaHV0ZG93bl9sb2NrZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTE5NjE9c3RhdGljIGludCBzZXZfdXBkYXRlX2Zpcm13YXJlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjAxNS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjIwMTY6c3RhdGljIGludCBfX3Nldl9zbnBfc2h1dGRvd25fbG9ja2VkKGludCAqZXJyb3IsIGJvb2wgcGFuaWMpXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMDE3LXtcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjA5OC1cXHQvKlxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MjA5OTpcXHQgKiBfX3Nldl9zbnBfc2h1dGRvd25fbG9ja2VkKCkgZGVhZGxvY2tzIHdoZW4gaXQgdHJpZXMgdG8gdW5yZWdpc3RlclxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjEwMC1cXHQgKiBpdHNlbGYgZHVyaW5nIHBhbmljIGFzIHRoZSBwYW5pYyBub3RpZmllciBpcyBjYWxsZWQgd2l0aCBSQ1UgcmVhZFxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0yNzMwPXN0YXRpYyB2b2lkIF9fc2V2X2Zpcm13YXJlX3NodXRkb3duKHN0cnVjdCBzZXZfZGV2aWNlICpzZXYsIGJvb2wgcGFuaWMpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTI3NjEtXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoyNzYyOlxcdF9fc2V2X3NucF9zaHV0ZG93bl9sb2NrZWQoXFx1MDAyNmVycm9yLCBwYW5pYyk7XFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yNzYzLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzQ6MTYuNjgxNDkxOTk0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzAxMjczNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBfX3Nldl9zbnBfc2h1dGRvd25fbG9ja2VkKClgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgX19zZXZfc25wX3NodXRkb3duX2xvY2tlZCgpYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSBpbiB0aGUgU0VWLVNOUCBzaHV0ZG93biBzZXF1ZW5jZS4gVGhlIG5hbWUgYWxvbmUgc2NyZWFtcyBcImNyaXRpY2FsIHNlY3Rpb25cIiDigJMgbG9ja2VkLCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IHByb3RlY3RlZCBhY2Nlc3MgdG8gc29tZSBzaGFyZWQgcmVzb3VyY2UuIEknbSBpbW1lZGlhdGVseSB3b25kZXJpbmc6IHdoYXQgZGF0YSBpcyBiZWluZyBndWFyZGVkIGhlcmU/IElzIGl0IHJlbGF0ZWQgdG8gdGhlIGd1ZXN0J3Mgc3RhdGUsIHRoZSBzZWNyZXRzLCB0aGUgdkNQVSBjb250ZXh0LCBvciBwZXJoYXBzIHRoZSBvdmVyYWxsIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24/IE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCdzIHByb2JhYmx5IHByZXR0eSBsb3ctbGV2ZWwuIEknbGwgbmVlZCB0byB0cmFjZSBpdHMgY2FsbGVycyBhbmQgY2FsbGVlcyB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBzY29wZSBhbmQgY3JpdGljYWwgc2VjdGlvbiBpdCBwcm90ZWN0cy4gTGV0J3Mgc2VlIGlmIHRoZSBsb2NraW5nIG1lY2hhbmlzbSB1c2VzIGEgc3BpbmxvY2ssIGEgbXV0ZXggb3Igc29tZXRoaW5nIGVsc2U7IHRoYXQnbGwgaW5mbHVlbmNlIGhvdyBJIHRoaW5rIGFib3V0IHBvdGVudGlhbCBjb250ZW50aW9uIGFuZCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIEkgc3VzcGVjdCB0aGlzIGZ1bmN0aW9uIHdvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBwbGF0Zm9ybSBuZWVkcyB0byBzYWZlbHkgc2h1dCBkb3duIGFuIFNOUCBndWVzdCAob3IgdGhlIHdob2xlIGhvc3QpLiBJIHdvbmRlciwgaXMgdGhlcmUgYW55IHBvc3NpYmlsaXR5IG9mIGRlYWRsb2NrcyBvciBsaXZlbG9ja3MgdG8gbG9vayBvdXQgZm9yPyBUaGlzIHJvdXRpbmUgaXMgZGVmaW5pdGVseSBhIHBvaW50IG9mIGZvY3VzIGZvciBhbnkgc2h1dGRvd24tcmVsYXRlZCBkZWJ1Z2dpbmcgb3IgcGVyZm9ybWFuY2UgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNDMxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzQ6MjAuNDUxNjIzODQ4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMTYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwMTY6XFx0c3RhdGljIGludCBfX3Nldl9zbnBfc2h1dGRvd25fbG9ja2VkKGludCAqZXJyb3IsIGJvb2wgcGFuaWMpXFxuMjAxNzpcXHR7XFxuMjAxODpcXHRcXHRzdHJ1Y3QgcHNwX2RldmljZSAqcHNwID0gcHNwX21hc3RlcjtcXG4yMDE5OlxcdFxcdHN0cnVjdCBzZXZfZGV2aWNlICpzZXY7XFxuMjAyMDpcXHRcXHRzdHJ1Y3Qgc2V2X2RhdGFfc25wX3NodXRkb3duX2V4IGRhdGE7XFxuMjAyMTpcXHRcXHRpbnQgcmV0O1xcbjIwMjI6XFx0XFxuMjAyMzpcXHRcXHRpZiAoIXBzcCB8fCAhcHNwLVxcdTAwM2VzZXZfZGF0YSlcXG4yMDI0OlxcdFxcdFxcdHJldHVybiAwO1xcbjIwMjU6XFx0XFxuMjAyNjpcXHRcXHRzZXYgPSBwc3AtXFx1MDAzZXNldl9kYXRhO1xcbjIwMjc6XFx0XFxuMjAyODpcXHRcXHRpZiAoIXNldi1cXHUwMDNlc25wX2luaXRpYWxpemVkKVxcbjIwMjk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjAzMDpcXHRcXG4yMDMxOlxcdFxcdG1lbXNldChcXHUwMDI2ZGF0YSwgMCwgc2l6ZW9mKGRhdGEpKTtcXG4yMDMyOlxcdFxcdGRhdGEubGVuID0gc2l6ZW9mKGRhdGEpO1xcbjIwMzM6XFx0XFx0ZGF0YS5pb21tdV9zbnBfc2h1dGRvd24gPSAxO1xcbjIwMzQ6XFx0XFx0aWYgKHNldi1cXHUwMDNlc25wX2ZlYXRfaW5mb18wLmVjeCBcXHUwMDI2IFNOUF9YODZfU0hVVERPV05fU1VQUE9SVEVEKVxcbjIwMzU6XFx0XFx0XFx0ZGF0YS54ODZfc25wX3NodXRkb3duID0gMTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzQ6MjAuNDUxODY5NjA4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTg3NTQ4MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNFVi1TTlAgSW5pdGlhbGl6YXRpb24gYW5kIFNodXRkb3duKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGxvZ2ljYWxseS4gVGhlIGNvZGUgSSdtIGxvb2tpbmcgYXQgY2hlY2tzIGBzZXYtXHUwMDNlc25wX2luaXRpYWxpemVkYC4gTmF0dXJhbGx5LCBJIGltbWVkaWF0ZWx5IHRoaW5rLCB3aGVyZSBpcyB0aGF0IGZsYWcgc2V0PyBJdCdzIHNldCB3aXRoaW4gYF9fc2V2X3NucF9pbml0X2xvY2tlZCgpYC4gQW5kIHRoYXQgZnVuY3Rpb24gaXRzZWxmIHJlcXVpcmVzIHRoZSBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIGF0dHJpYnV0ZS4gU28sIGlmIHdlIGRvbid0IGhhdmUgdGhhdCBhdHRyaWJ1dGUsIHRoZSBpbml0aWFsaXphdGlvbiBwYXRoIGlzIG5ldmVyIHRha2VuLlxuXG5UaGVyZWZvcmUsIHNpbmNlIGBzbnBfaW5pdGlhbGl6ZWRgIGlzIG9ubHkgc2V0IGluIHRoZSBpbml0IGZ1bmN0aW9uLCB0aGUgY29uZGl0aW9uYWwgZ3VhcmQgZW5zdXJlcyB0aGF0IHRoZSBgc25wX3NodXRkb3duKClgIGZ1bmN0aW9uIGlzIGFsc28gdW5yZWFjaGFibGUgaW4gdGhhdCBzY2VuYXJpby4gTWFrZXMgcGVyZmVjdCBzZW5zZS5cblxuTm93LCBhIHJlbGF0ZWQgcXVlc3Rpb24gcG9wcyBpbnRvIG15IGhlYWQuIFdoYXQgYWJvdXQgYHNucF9ybXB0YWJsZV9pbml0KClgPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIGFsbCBvZiB0aGlzLiBJdCdzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpbiB0aGUgcHJvY2VzcyB0byBjb25zaWRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMwNjIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM0OjI0LjI3MDYyODA1OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyMzI5MTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNucF9ybXB0YWJsZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02NTA9Ym9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaDo2NTE6aW50IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY1Mi1pbnQgc25wX2xvb2t1cF9ybXBlbnRyeSh1NjQgcGZuLCBib29sICphc3NpZ25lZCwgaW50ICpsZXZlbCk7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02Njk9c3RhdGljIGlubGluZSBib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjcwOnN0YXRpYyBpbmxpbmUgaW50IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpIHsgcmV0dXJuIC1FTk9TWVM7IH1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaC02NzEtc3RhdGljIGlubGluZSBpbnQgc25wX2xvb2t1cF9ybXBlbnRyeSh1NjQgcGZuLCBib29sICphc3NpZ25lZCwgaW50ICpsZXZlbCkgeyByZXR1cm4gLUVOT0RFVjsgfVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9ODEzPUVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NldHVwX3JtcG9wdCwgXFxcImNjcFxcXCIpO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtODE5LSAqL1xcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjgyMDppbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtODIxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzQ6MjQuNDIyOTYyMjY3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NjU2NTcyODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbCBTaXRlcyBvZiBgc25wX3JtcHRhYmxlX2luaXQoKWAqKlxuXG5BbHJpZ2h0LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggb2YgYHNucF9ybXB0YWJsZV9pbml0KClgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSSdtIGdvaW5nIHRvIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIHBsYWNlcyBpbiB0aGUgY29kZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbi4gV2l0aG91dCB0aGlzIHVuZGVyc3RhbmRpbmcsIGFueSBhdHRlbXB0IHRvIGRlYnVnIG9yIG1vZGlmeSBiZWhhdmlvciBzdGVtbWluZyBmcm9tIHRoZSAnc25wJyBtb2R1bGUgd291bGQgYmUgaGFtcGVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzI1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzQ6MjcuMDg4NjIxOTU5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDc4NTAwMzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNucF9ybXB0YWJsZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02NTA9Ym9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaDo2NTE6aW50IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY1Mi1pbnQgc25wX2xvb2t1cF9ybXBlbnRyeSh1NjQgcGZuLCBib29sICphc3NpZ25lZCwgaW50ICpsZXZlbCk7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02Njk9c3RhdGljIGlubGluZSBib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjcwOnN0YXRpYyBpbmxpbmUgaW50IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpIHsgcmV0dXJuIC1FTk9TWVM7IH1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaC02NzEtc3RhdGljIGlubGluZSBpbnQgc25wX2xvb2t1cF9ybXBlbnRyeSh1NjQgcGZuLCBib29sICphc3NpZ25lZCwgaW50ICpsZXZlbCkgeyByZXR1cm4gLUVOT0RFVjsgfVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9ODEzPUVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NldHVwX3JtcG9wdCwgXFxcImNjcFxcXCIpO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtODE5LSAqL1xcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjgyMDppbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtODIxLXtcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYz0zMzYzPXN0YXRpYyBfX2luaXQgdm9pZCBpb21tdV9zbnBfZW5hYmxlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzM5MC1cXHQgKi9cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzM5MTpcXHRpZiAoc25wX3JtcHRhYmxlX2luaXQoKSkge1xcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMzkyLVxcdFxcdHByX3dhcm4oXFxcIlNOUDogUk1QIGluaXRpYWxpemF0aW9uIGZhaWxlZCwgU05QIGNhbm5vdCBiZSBzdXBwb3J0ZWQuXFxcXG5cXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzQ6MjkuNTY3MTI2MjA0WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTMwNjA5NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW5uZXIgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYGlvbW11X3NucF9lbmFibGUoKWAgYW5kIGl0cyBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSB0cmFpbCBsZWFkcyB1cyB0byBgaW9tbXVfc25wX2VuYWJsZSgpYC4gVGhlIGZ1bmN0aW9uIG5hbWUgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIGVuYWJsaW5nIFNlY3VyZSBOZXN0ZWQgUGFnaW5nIGZlYXR1cmVzLCB3aGljaCBpcyBjcnVjaWFsIGZvciBtb2Rlcm4gdmlydHVhbGl6YXRpb24gc2VjdXJpdHkuIExldCdzIGRpZyBpbiBhIGJpdCBmdXJ0aGVyIHRvIHNlZSBob3cgaXQncyBzZXR0aW5nIHRoaW5ncyB1cC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIEJhc2VkIG9uIHRoYXQgZnVuY3Rpb24gY2FsbCwgSSBuZWVkIHRvIGtub3cgYWJvdXQgYHNucF9ybXB0YWJsZV9pbml0KClgLiBUaGF0IGZ1bmN0aW9uJ3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBjb25maWd1cmluZyB0aGUgUk1QIChSb290IE1lbW9yeSBQcm90ZWN0aW9uKSB0YWJsZSwgd2hpY2ggaXMgYWJzb2x1dGVseSBmdW5kYW1lbnRhbCB0byBwcm90ZWN0aW5nIGd1ZXN0IG1lbW9yeSBmcm9tIHVuYXV0aG9yaXplZCBhY2Nlc3MuIExldCdzIHNlZSBob3cgdGhhdCdzIGRvbmUuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzIG9mIHRoYXQgdGFibGUgdG8gZ2V0IGEgZ29vZCBncmlwIG9uIHRoZSBvdmVyYWxsIHNlY3VyaXR5IHBvc3R1cmUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzOTIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNDozMi44ODAxODk2M1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvdmlydC9zdm0vc2V2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogODE5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODE5OlxcdCAqL1xcbiA4MjA6XFx0aW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxcbiA4MjE6XFx0e1xcbiA4MjI6XFx0XFx0dTY0IHZhbDtcXG4gODIzOlxcdFxcbiA4MjQ6XFx0XFx0aWYgKFdBUk5fT05fT05DRSghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSkpXFxuIDgyNTpcXHRcXHRcXHRyZXR1cm4gLUVOT1NZUztcXG4gODI2OlxcdFxcbiA4Mjc6XFx0XFx0aWYgKFdBUk5fT05fT05DRSghYW1kX2lvbW11X3NucF9lbikpXFxuIDgyODpcXHRcXHRcXHRyZXR1cm4gLUVOT1NZUztcXG4gODI5OlxcdFxcbiA4MzA6XFx0XFx0aWYgKCFzZXR1cF9ybXB0YWJsZSgpKVxcbiA4MzE6XFx0XFx0XFx0cmV0dXJuIC1FTk9TWVM7XFxuIDgzMjpcXHRcXG4gODMzOlxcdFxcdC8qXFxuIDgzNDpcXHRcXHQgKiBPbiBhIGtleGVjIGJvb3QgU05QIG1heSBhbHJlYWR5IGJlIGVuYWJsZWQgKGxlZ2FjeSBmaXJtd2FyZSBsZWF2ZXNcXG4gODM1OlxcdFxcdCAqIFNucEVuIHNldCBhY3Jvc3Mgc2h1dGRvd24pLCBpbiB3aGljaCBjYXNlIHNucF9wcmVwYXJlKCkgYmFpbHMgd2l0aG91dFxcbiA4MzY6XFx0XFx0ICogZGlzYWJsaW5nIENQVSBob3RwbHVnLCBzbyBkaXNhYmxlIGl0IGhlcmUuXFxuIDgzNzpcXHRcXHQgKi9cXG4gODM4OlxcdFxcdHJkbXNycShNU1JfQU1ENjRfU1lTQ0ZHLCB2YWwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNDozMi44ODAyOTM1MloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA5NzMwNDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipVbnJlYWNoYWJsZSBDb2RlIGFuZCBTTlAgUHJvYmluZyoqXG5cblJpZ2h0LCBzbyB0aGF0IGNoZWNrIHdpdGggYGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUClgLi4uIHRoYXQncyB0aGUgdGVsbC4gSXQgbWVhbnMgdGhlIHN1YnNlcXVlbnQgY29kZSBwYXRoIGlzIGNvbXBsZXRlbHkgYmxvY2tlZCBvZmYuIE5vIHdheSBhcm91bmQgaXQuIEl0J3MgdW5yZWFjaGFibGUuIEl0IG1ha2VzIG1lIHdvbmRlciB3aHkgaXQncyB0aGVyZSBhdCBhbGwuXG5cblRoZW4sIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKClgLiBJcyB0aGF0IHJlbGF0ZWQ/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgaW1wbGljYXRpb25zIG9mIHByb2JpbmcgdGhlIFJNUCB0YWJsZSBpbiB0aGUgY29udGV4dCBvZiB0aGlzIHBsYXRmb3JtIGNoZWNrLiBJcyB0aGUgdW5yZWFjaGFibGUgY29kZSByZWxhdGVkIHRvIHNvbWUgYWx0ZXJuYXRpdmUgUk1QIHRhYmxlIHByb2Jpbmcgc3RyYXRlZ3kgb3IgYW4gZXJyb3IgcGF0aCB0aGF0IGlzIG5vdCBuZWVkZWQgZm9yIHRoZSBjdXJyZW50IFNOUCBmZWF0dXJlPyBJJ2xsIHByb2JhYmx5IG5lZWQgdG8gcmV2aXNpdCB0aGUgcmVsZXZhbnQgU05QIGRvY3VtZW50YXRpb24gYW5kIGNvZGUgdG8gcGllY2UgdGhpcyB0b2dldGhlciBwcm9wZXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5NjYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM0OjM2LjQ5MDAyNjU0NFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1OTU2NzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNucF9wcm9iZV9ybXB0YWJsZV9pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02NDU9c3RhdGljIGlubGluZSB1NjQgc2F2aWNfZ2hjYl9tc3JfcmVhZCh1MzIgcmVnKSB7IHJldHVybiAwOyB9XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaC02NDktI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjY1MDpib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY1MS1pbnQgc25wX3JtcHRhYmxlX2luaXQodm9pZCk7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02Njc9dm9pZCBzbnBfc2h1dGRvd24odm9pZCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjY4LSNlbHNlXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjY5OnN0YXRpYyBpbmxpbmUgYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY3MC1zdGF0aWMgaW5saW5lIGludCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKSB7IHJldHVybiAtRU5PU1lTOyB9XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jPTM1NT1zdGF0aWMgdm9pZCBic3BfZGV0ZXJtaW5lX3NucChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3MS1cXHRcXHQgICAgIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QUkVBRCkpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYzozNzI6XFx0XFx0ICAgIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKCkpIHtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3My1cXHRcXHRcXHRjY19wbGF0Zm9ybV9zZXQoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9ODkzPXN0YXRpYyBib29sIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy05MzYtXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6OTM3OmJvb2wgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8odm9pZClcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy05Mzgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNDozNi42MTU5OTAxMjZaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5NDQ3NDc3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbjpcblxuKipUcmFjaW5nIHRoZSBEYXRhIEZsb3c6IGBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpYCoqXG5cbk9rYXksIHNvIGBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpYCBpcyB0cmlnZ2VyZWQgYnkgYGJzcF9kZXRlcm1pbmVfc25wKClgLiBUaGF0J3MgYSBrZXkgcmVsYXRpb25zaGlwLiBUbyB0cnVseSB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcsIEkgbmVlZCB0byByZXZpc2l0IHRoZSBmdW5jdGlvbmFsaXR5IG9mIGBic3BfZGV0ZXJtaW5lX3NucCgpYC4gSXQncyB0aGUgY2FsbGluZyBmdW5jdGlvbiwgc28gaXQgaG9sZHMgdGhlIGNvbnRleHQgZm9yIHdoeSBgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKWAgaXMgZXZlbiBiZWluZyBjYWxsZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIGRvaW5nLCB3aGF0IGl0cyBpbnB1dHMgYXJlLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBvYmplY3RpdmUgb2YgdGhhdCBmdW5jdGlvbiBpcy4gVGhhdCBzaG91bGQgaWxsdW1pbmF0ZSB0aGUgcHVycG9zZSBvZiB0aGUgY2FsbCB0byBgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKWAsIGFuZCB3aGVyZSB0aGlzIGRhdGEgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNjaGVtZSBvZiB0aGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NzY3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzQ6NDAuNjEwNDY5NDA0WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzODYzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM1NTpcXHRzdGF0aWMgdm9pZCBic3BfZGV0ZXJtaW5lX3NucChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXFxuIDM1NjpcXHR7XFxuIDM1NzpcXHQjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX0NDX1BMQVRGT1JNXFxuIDM1ODpcXHRcXHRjY192ZW5kb3IgPSBDQ19WRU5ET1JfQU1EO1xcbiAzNTk6XFx0XFxuIDM2MDpcXHRcXHRpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9TRVZfU05QKSkge1xcbiAzNjE6XFx0XFx0XFx0LypcXG4gMzYyOlxcdFxcdFxcdCAqIFJNUCB0YWJsZSBlbnRyeSBmb3JtYXQgaXMgbm90IGFyY2hpdGVjdHVyYWwgYW5kIGlzIGRlZmluZWQgYnkgdGhlXFxuIDM2MzpcXHRcXHRcXHQgKiBwZXItcHJvY2Vzc29yIFBQUi4gUmVzdHJpY3QgU05QIHN1cHBvcnQgb24gdGhlIGtub3duIENQVSBtb2RlbHNcXG4gMzY0OlxcdFxcdFxcdCAqIGZvciB3aGljaCB0aGUgUk1QIHRhYmxlIGVudHJ5IGZvcm1hdCBpcyBjdXJyZW50bHkgZGVmaW5lZCBvciBmb3JcXG4gMzY1OlxcdFxcdFxcdCAqIHByb2Nlc3NvcnMgd2hpY2ggc3VwcG9ydCB0aGUgYXJjaGl0ZWN0dXJhbGx5IGRlZmluZWQgUk1QUkVBRFxcbiAzNjY6XFx0XFx0XFx0ICogaW5zdHJ1Y3Rpb24uXFxuIDM2NzpcXHRcXHRcXHQgKi9cXG4gMzY4OlxcdFxcdFxcdGlmICghY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9IWVBFUlZJU09SKSBcXHUwMDI2XFx1MDAyNlxcbiAzNjk6XFx0XFx0XFx0ICAgIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1pFTjMpIHx8XFxuIDM3MDpcXHRcXHRcXHQgICAgIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfWkVONCkgfHxcXG4gMzcxOlxcdFxcdFxcdCAgICAgY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9STVBSRUFEKSkgXFx1MDAyNlxcdTAwMjZcXG4gMzcyOlxcdFxcdFxcdCAgICBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpKSB7XFxuIDM3MzpcXHRcXHRcXHRcXHRjY19wbGF0Zm9ybV9zZXQoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xcbiAzNzQ6XFx0XFx0XFx0fSBlbHNlIHtcXG4gMzc1OlxcdFxcdFxcdFxcdHNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfU0VWX1NOUCk7XFxuIDM3NjpcXHRcXHRcXHRcXHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuIDM3NzpcXHRcXHRcXHR9XFxuIDM3ODpcXHRcXHR9XFxuIDM3OTpcXHQjZW5kaWZcXG4gMzgwOlxcdH1cXG4gMzgxOlxcdFxcbiAzODI6XFx0I2RlZmluZSBaRU5fTU9ERUxfU1RFUF9VQ09ERShmYW0sIG1vZGVsLCBzdGVwLCB1Y29kZSkgXFxcXFxcbiAzODM6XFx0XFx0WDg2X01BVENIX1ZGTV9TVEVQUyhWRk1fTUFLRShYODZfVkVORE9SX0FNRCwgZmFtLCBtb2RlbCksIFxcXFxcXG4gMzg0OlxcdFxcdFxcdFxcdCAgICBzdGVwLCBzdGVwLCB1Y29kZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzQ6NDAuNjEwODExODg0WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNzExNTQ3MzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIFNFVi1TTlAgQ29kZSBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBiZWNhdXNlIG9mIEMncyBzaG9ydC1jaXJjdWl0IGV2YWx1YXRpb24sIHRoZSBgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKWAgZnVuY3Rpb24gd29uJ3QgYmUgY2FsbGVkIGlmIHRoZSBgIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUilgIGNoZWNrIGlzIGZhbHNlLiBTaW5jZSB3ZSdyZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBgY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9IWVBFUlZJU09SKWAgd2lsbCBiZSB0cnVlLCBtYWtpbmcgdGhlIGNvbmRpdGlvbiBmYWxzZSwgYW5kIHRodXMsIGBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpYCBpcyBza2lwcGVkLiBBbmQgbGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrLCBubywgdGhlIGdyZXAgb3V0cHV0IGNvbmZpcm1zIHRoaXMgaXMgb25seSBjYWxsZWQgZnJvbSBgYnNwX2RldGVybWluZV9zbnAoKWAuXG5cblNvLCB0aGUgY2hhbmdlcyBpbiB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLCBhbmQgdGhlcmVmb3JlLCB0aGVpciBpbXBhY3QsIGFyZSB1bnJlYWNoYWJsZSBpbiB0aGlzIHNjZW5hcmlvLlxuXG5Ob3csIHdoYXQgZWxzZSBkb2VzIHRoZSBwYXRjaCB0b3VjaD8gSSBzZWUgYWRkaXRpb25zIGxpa2UgYCNkZWZpbmUgWDg2X0ZFQVRVUkVfUk1QT1BUYCwgYE1TUl9BTUQ2NF9STVBPUFRfQkFTRWAsIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYXJyYXlzIGluIHZhcmlvdXMgaW5jbHVkZSBhbmQgc291cmNlIGZpbGVzLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGxvZ2ljIHJldm9sdmVzIGFyb3VuZCBgc25wX3JtcG9wdF9hbGxfcGh5c21lbSgpYCwgYHNucF9zZXR1cF9ybXBvcHQoKWAsIGBzbnBfY2xlYW51cF9ybXBvcHQoKWAsIGFuZCBhIHN1aXRlIG9mIHJlbGF0ZWQgZnVuY3Rpb25zLlxuXG5Ib3dldmVyLCBhbGwgb2YgdGhlc2UgZnVuY3Rpb25zLCBhbmQgb3RoZXIgZnVuY3Rpb25zLCBzdWNoIGFzIGBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpYCwgYXJlIGdhdGVkIGJlaGluZCBlaXRoZXIgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBvciwgY3J1Y2lhbGx5LCBgIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUilgLiBUaGVyZWZvcmUsIGV2ZW4gaW4gdGhlIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBub25lIG9mIHRoaXMgY29kZSBjYW4gYmUgdHJpZ2dlcmVkIGJlY2F1c2UgYFg4Nl9GRUFUVVJFX0hZUEVSVklTT1JgIGlzIHNldC5cblxuQnV0IGxldCdzIGJlIHN1cmUuIENhbiB3ZSBjbGVhciBgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUmAgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nPyBJbiBRRU1VLCB0aGUgYC1jcHUgaG9zdCwtaHlwZXJ2aXNvcmAgZmxhZyAqY2FuKiBiZSB1c2VkIHRvIGNsZWFyIHRoYXQgZmxhZy4gSG93ZXZlciwgc3l6a2FsbGVyIGRvZXMgbm90IHVzZSB0aGF0IGZsYWcgYnkgZGVmYXVsdC4gSWYgaXQgKmRpZCogdXNlIHRoZSBmbGFnLCB0aGVuIHRoZSBob3N0IGtlcm5lbCBydW5uaW5nIGluIFFFTVUgd291bGQgdGhlbiBhdHRlbXB0IHRvIGVuYWJsZSBTRVYtU05QIGZ1bmN0aW9uYWxpdHkuIEJ1dCBoZXJlJ3MgdGhlIGtpY2tlcjogZW5hYmxpbmcgU0VWLVNOUCAqcmVxdWlyZXMqIGhhcmR3YXJlIHN1cHBvcnQ6IHRoZSBNU1JzLCB0aGUgQ1BVSUQgZmVhdHVyZXMsIGFuZCB0aGUgUk1QIHRhYmxlLiBRRU1VIGRvZXMgKm5vdCogZW11bGF0ZSBTRVYtU05QIGhvc3QgZmVhdHVyZXM7IGl0ICpjYW4qIGVtdWxhdGUgYW4gU0VWLVNOUCBndWVzdCwgYnV0IG5vdCBhIFNFVi1TTlAgaG9zdC4gVGhlcmVmb3JlLCBldmVuIGlmIHdlICpjb3VsZCogY2xlYXIgYFg4Nl9GRUFUVVJFX0hZUEVSVklTT1JgLCBgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKWAgd291bGQgc3RpbGwgZmFpbCBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHJlcXVpcmVtZW50cyB3b3VsZG4ndCBiZSBwcmVzZW50LlxuXG5TbywgdGhlIGNvbmNsdXNpb24gaXMgY2xlYXIuIFRoZSBjb3JlIGxvZ2ljIG9mIHRoaXMgcGF0Y2ggaXMgZXNzZW50aWFsbHkgdW5yZWFjaGFibGUgaW4gYW55IHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVUsIHJlZ2FyZGxlc3Mgb2YgaG93IHdlIGNvbmZpZ3VyZSB0aGUgdmlydHVhbCBtYWNoaW5lLiBJdCdzIHNpbXBseSBpbXBvc3NpYmxlIHRvIHRyaWdnZXIgdGhlIGludGVuZGVkIGJlaGF2aW9yLiBUaGVyZWZvcmUsIHRoaXMgaXMgbm90IHdvcnRoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTc4LCJPdXRwdXRUb2tlbnMiOjE5NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM0OjUyLjMyMjM2MzY2NloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIEFNRCBSTVBPUFQgaW5zdHJ1Y3Rpb24sIHdoaWNoIGlzIHBhcnQgb2YgdGhlIEFNRCBTRVYtU05QIChTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIC0gU2VjdXJlIE5lc3RlZCBQYWdpbmcpIGhvc3Qgc3VwcG9ydC4gQWxsIHRoZSBtb2RpZmllZCBhbmQgYWRkZWQgZnVuY3Rpb25zIChlLmcuLCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtLCBzbnBfc2V0dXBfcm1wb3B0LCBzbnBfcHJlcGFyZSwgc25wX3NodXRkb3duKSBhcmUgZ3VhcmRlZCBieSBjaGVja3MgZm9yIENDX0FUVFJfSE9TVF9TRVZfU05QIG9yIGV4cGxpY2l0bHkgcmVxdWlyZSB0aGUgYWJzZW5jZSBvZiBYODZfRkVBVFVSRV9IWVBFUlZJU09SLiBTaW5jZSBzeXprYWxsZXIgcnVucyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKEdDRS9RRU1VKSB3aGVyZSBYODZfRkVBVFVSRV9IWVBFUlZJU09SIGlzIHNldCBhbmQgU0VWLVNOUCBob3N0IGhhcmR3YXJlIGZlYXR1cmVzIGFyZSBub3QgZW11bGF0ZWQsIHRoaXMgY29kZSBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCB0ZXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbiwgd2hpY2ggaXMgcGFydCBvZiB0aGUgQU1EIFNFVi1TTlAgKFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gLSBTZWN1cmUgTmVzdGVkIFBhZ2luZykgaG9zdCBzdXBwb3J0LiBBbGwgdGhlIG1vZGlmaWVkIGFuZCBhZGRlZCBmdW5jdGlvbnMgKGUuZy4sIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0sIHNucF9zZXR1cF9ybXBvcHQsIHNucF9wcmVwYXJlLCBzbnBfc2h1dGRvd24pIGFyZSBndWFyZGVkIGJ5IGNoZWNrcyBmb3IgQ0NfQVRUUl9IT1NUX1NFVl9TTlAgb3IgZXhwbGljaXRseSByZXF1aXJlIHRoZSBhYnNlbmNlIG9mIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IuIFNpbmNlIHN5emthbGxlciBydW5zIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoR0NFL1FFTVUpIHdoZXJlIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IgaXMgc2V0IGFuZCBTRVYtU05QIGhvc3QgaGFyZHdhcmUgZmVhdHVyZXMgYXJlIG5vdCBlbXVsYXRlZCwgdGhpcyBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNDo1Mi4zMjI0MDQxNTZaIiwiU2VxIjo0NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4s7mn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 22:49:52 +0000 UTC FinishedAt: 2026-08-10 23:34:53 +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+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbiwgd2hpY2ggaXMgcGFydCBvZiB0aGUgQU1EIFNFVi1TTlAgKFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gLSBTZWN1cmUgTmVzdGVkIFBhZ2luZykgaG9zdCBzdXBwb3J0LiBBbGwgdGhlIG1vZGlmaWVkIGFuZCBhZGRlZCBmdW5jdGlvbnMgKGUuZy4sIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0sIHNucF9zZXR1cF9ybXBvcHQsIHNucF9wcmVwYXJlLCBzbnBfc2h1dGRvd24pIGFyZSBndWFyZGVkIGJ5IGNoZWNrcyBmb3IgQ0NfQVRUUl9IT1NUX1NFVl9TTlAgb3IgZXhwbGljaXRseSByZXF1aXJlIHRoZSBhYnNlbmNlIG9mIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IuIFNpbmNlIHN5emthbGxlciBydW5zIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoR0NFL1FFTVUpIHdoZXJlIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IgaXMgc2V0IGFuZCBTRVYtU05QIGhvc3QgaGFyZHdhcmUgZmVhdHVyZXMgYXJlIG5vdCBlbXVsYXRlZCwgdGhpcyBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjMyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGJmMDc2MDMxNWZmNDU0ZWQ2MjVhNDE0YzY3N2IxZGRiZjgwM2I0ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDIzOjMyOjU3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG5pbmRleCAzZDA5NDBhM2I5ZjM3Li5kYmNjZGU5ZWU1Y2Q1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuQEAgLTc2LDcgJiM0Mzs3Niw3IEBAXG4gI2RlZmluZSBYODZfRkVBVFVSRV9LOFx0XHRcdCggMyozMiYjNDM7IDQpIC8qIE9wdGVyb24sIEF0aGxvbjY0ICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9aRU41XHRcdCggMyozMiYjNDM7IDUpIC8qIENQVSBiYXNlZCBvbiBaZW41IG1pY3JvYXJjaGl0ZWN0dXJlICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9aRU42XHRcdCggMyozMiYjNDM7IDYpIC8qIENQVSBiYXNlZCBvbiBaZW42IG1pY3JvYXJjaGl0ZWN0dXJlICovXG4tLyogRnJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMyozMiYjNDM7IDcpICovXG4mIzQzOyNkZWZpbmUgWDg2X0ZFQVRVUkVfUk1QT1BUXHRcdCggMyozMiYjNDM7IDcpIC8qIFN1cHBvcnQgZm9yIEFNRCBSTVBPUFQgaW5zdHJ1Y3Rpb24gKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQ1x0KCAzKjMyJiM0MzsgOCkgLyogXCYjMzQ7Y29uc3RhbnRfdHNjXCYjMzQ7IFRTQyB0aWNrcyBhdCBhIGNvbnN0YW50IHJhdGUgKi9cbiAvKiBmcmVlOiB3YXMgI2RlZmluZSBYODZfRkVBVFVSRV9VUFx0KCAzKjMyJiM0MzsgOSkgKiBcJiMzNDt1cFwmIzM0OyBTTVAga2VybmVsIHJ1bm5pbmcgb24gVVAgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0FSVFx0XHRcdCggMyozMiYjNDM7MTApIC8qIFwmIzM0O2FydFwmIzM0OyBBbHdheXMgcnVubmluZyB0aW1lciAoQVJUKSAqL1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcbmluZGV4IDE4YzRiZTc1ZTkyNzEuLmQyY2IwYTdjZDBhMmYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcbkBAIC03NjEsNiAmIzQzOzc2MSw5IEBAXG4gI2RlZmluZSBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVFx0MFxuICNkZWZpbmUgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRFx0QklUX1VMTChNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVClcbiAjZGVmaW5lIE1TUl9BTUQ2NF9STVBfU0VHTUVOVF9TSElGVCh4KVx0KCgoeCkgXHUwMDI2IEdFTk1BU0tfVUxMKDEzLCA4KSkgXHUwMDNlXHUwMDNlIDgpXG4mIzQzOyNkZWZpbmUgTVNSX0FNRDY0X1JNUE9QVF9CQVNFXHRcdDB4YzAwMTAxMzlcbiYjNDM7I2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRV9CSVRcdDBcbiYjNDM7I2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRVx0XHRCSVRfVUxMKE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFX0JJVClcbiBcbiAjZGVmaW5lIE1TUl9TVlNNX0NBQVx0XHRcdDB4YzAwMWYwMDBcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXG5pbmRleCA1OTRjZmExOWNiZDRiLi4wOWIxYzVkMzM3OTAyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXG5AQCAtNjYyLDYgJiM0Mzs2NjIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc25wX2xlYWtfcGFnZXModTY0IHBmbiwgdW5zaWduZWQgaW50IHBhZ2VzKVxuIFx0X19zbnBfbGVha19wYWdlcyhwZm4sIHBhZ2VzLCB0cnVlKTtcbiB9XG4gaW50IHNucF9wcmVwYXJlKHZvaWQpO1xuJiM0Mzt2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCk7XG4mIzQzO3ZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKTtcbiB2b2lkIHNucF9zaHV0ZG93bih2b2lkKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxuQEAgLTY4MCw2ICYjNDM7NjgyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNucF9sZWFrX3BhZ2VzKHU2NCBwZm4sIHVuc2lnbmVkIGludCBucGFnZXMpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGtkdW1wX3Nldl9jYWxsYmFjayh2b2lkKSB7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgc25wX2ZpeHVwX2U4MjBfdGFibGVzKHZvaWQpIHt9XG4gc3RhdGljIGlubGluZSBpbnQgc25wX3ByZXBhcmUodm9pZCkgeyByZXR1cm4gLUVOT0RFVjsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKSB7fVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2h1dGRvd24odm9pZCkge31cbiAjZW5kaWZcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xuaW5kZXggOTM3MTI5Y2U2YTk2NC4uMDIxYzBiZjIyZGUyMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcbkBAIC02Nyw2ICYjNDM7NjcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNwdWlkX2JpdCBjcHVpZF9iaXRzW10gPSB7XG4gXHR7IFg4Nl9GRUFUVVJFX1BFUkZNT05fVjIsXHRcdENQVUlEX0VBWCwgIDAsIDB4ODAwMDAwMjIsIDAgfSxcbiBcdHsgWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMixcdFx0Q1BVSURfRUFYLCAgMSwgMHg4MDAwMDAyMiwgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9BTURfTEJSX1BNQ19GUkVFWkUsXHRDUFVJRF9FQVgsICAyLCAweDgwMDAwMDIyLCAwIH0sXG4mIzQzO1x0eyBYODZfRkVBVFVSRV9STVBPUFQsXHRcdFx0Q1BVSURfRURYLCAgMCwgMHg4MDAwMDAyNSwgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9BTURfSFRSX0NPUkVTLFx0XHRDUFVJRF9FQVgsIDMwLCAweDgwMDAwMDI2LCAwIH0sXG4gXHR7IDAsIDAsIDAsIDAsIDAgfVxuIH07XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbmluZGV4IDQyNzIyOTM0Nzg3NjYuLmM1NzQ4NDliMTU4NzggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5AQCAtMjk5Miw2ICYjNDM7Mjk5MiwxNiBAQCB2b2lkIHNldl92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0ICovXG4gXHRcdGlmIChzbnBfZGVjb21taXNzaW9uX2NvbnRleHQoa3ZtKSlcbiBcdFx0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFBlcmZvcm0gUk1QIG9wdGltaXphdGlvbnMgb24gbWVtb3J5IGZyZWVkIGJ5IHRlcm1pbmF0aW5nXG4mIzQzO1x0XHQgKiBndWVzdHMuICBUaGUgc2NhbiBpcyBkZWZlcnJlZCwgc28gaXQgbm9ybWFsbHkgcnVucyBhZnRlclxuJiM0MztcdFx0ICogc2V2X2dtZW1faW52YWxpZGF0ZSgpIGhhcyBjb252ZXJ0ZWQgdGhpcyBndWVzdCYjMzk7cyBwYWdlcyBiYWNrIHRvXG4mIzQzO1x0XHQgKiBzaGFyZWQsIGFuZCBwaWNrcyB0aGVtIHVwIHRoZW4uICBBIHZlcnkgbGFyZ2UgZ3Vlc3Qgd2hvc2VcbiYjNDM7XHRcdCAqIGNvbnZlcnNpb24gaGFzIG5vdCBmaW5pc2hlZCBieSB0aGVuIGlzIHBpY2tlZCB1cCBieSBhIGxhdGVyXG4mIzQzO1x0XHQgKiB0ZWFyZG93biYjMzk7cyBzY2FuLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRzbnBfcm1wb3B0X2FsbF9waHlzbWVtKCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRzZXZfdW5iaW5kX2FzaWQoa3ZtLCBzZXYtXHUwMDNlaGFuZGxlKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYyBiL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jXG5pbmRleCBjZmYyODVkOGFkOGUzLi4wMzRlZDU0N2FjMjgxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvdmlydC9zdm0vc2V2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jXG5AQCAtMTksNiAmIzQzOzE5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21tdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYW1kLWlvbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3NwZWMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9zZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wcm9jZXNzb3IuaFx1MDAzZVxuQEAgLTEyNCw2ICYjNDM7MTI1LDE4IEBAIHN0YXRpYyB2b2lkICpybXBfYm9va2tlZXBpbmcgX19yb19hZnRlcl9pbml0O1xuIFxuIHN0YXRpYyB1NjQgcHJvYmVkX3JtcF9iYXNlLCBwcm9iZWRfcm1wX3NpemU7XG4gXG4mIzQzO3N0YXRpYyBjcHVtYXNrX3Zhcl90IHJtcG9wdF9jcHVtYXNrLCBybXBvcHRfZm9sbG93ZXJfbWFzaztcbiYjNDM7c3RhdGljIHU2NCBybXBvcHRfcGFfc3RhcnQsIHJtcG9wdF9wYV9lbmQ7XG4mIzQzO1xuJiM0MztlbnVtIHJtcG9wdF9vcF90eXBlIHtcbiYjNDM7XHRSTVBPUFRfT1BfVkVSSUZZX0FORF9SRVBPUlRfU1RBVFVTLFxuJiM0MztcdFJNUE9QVF9PUF9SRVBPUlRfU1RBVFVTXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJtcG9wdF93cTtcbiYjNDM7c3RhdGljIHN0cnVjdCBkZWxheWVkX3dvcmsgcm1wb3B0X2RlbGF5ZWRfd29yaztcbiYjNDM7c3RhdGljIERFRklORV9NVVRFWChybXBvcHRfd3FfbXV0ZXgpO1xuJiM0MztcbiBzdGF0aWMgTElTVF9IRUFEKHNucF9sZWFrZWRfcGFnZXNfbGlzdCk7XG4gc3RhdGljIERFRklORV9TUElOTE9DSyhzbnBfbGVha2VkX3BhZ2VzX2xpc3RfbG9jayk7XG4gXG5AQCAtNTEzLDcgJiM0Mzs1MjYsNiBAQCBzdGF0aWMgdm9pZCBjbGVhcl9oc2F2ZV9wYSh2b2lkICphcmcpXG4gXG4gaW50IHNucF9wcmVwYXJlKHZvaWQpXG4ge1xuLVx0aW50IHJldDtcbiBcdHU2NCB2YWw7XG4gXG4gXHQvKlxuQEAgLTUyNiwxNCAmIzQzOzUzOCwxOCBAQCBpbnQgc25wX3ByZXBhcmUodm9pZClcbiBcbiBcdGNsZWFyX3JtcCgpO1xuIFxuLVx0Y3B1c19yZWFkX2xvY2soKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE5vIENQVSBtYXkgY29tZSBvbmxpbmUgd2l0aG91dCBTbnBFbiB3aGlsZSBTTlAgaXMgYWN0aXZlOyBkaXNhYmxlXG4mIzQzO1x0ICogaG90cGx1ZyBoZXJlIGFuZCByZS1lbmFibGUgaXQgaW4gc25wX3NodXRkb3duKCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y3B1X2hvdHBsdWdfZGlzYWJsZSgpO1xuIFxuIFx0aWYgKCFjcHVtYXNrX2VxdWFsKGNwdV9vbmxpbmVfbWFzaywgY3B1X3ByZXNlbnRfbWFzaykpIHtcbi1cdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRjcHVfaG90cGx1Z19lbmFibGUoKTtcbiBcdFx0cHJfd2FybihcJiMzNDtTTlAgaW5pdCBmYWlsZWQ6IG5vdCBhbGwgQ1BVcyBvbmxpbmUuICglKnBibCBvbmxpbmUgXHUwMDNjLVx1MDAzZSAlKnBibCBwcmVzZW50IG1hc2tzKS5cXG5cJiMzNDssXG4gXHRcdFx0Y3B1bWFza19wcl9hcmdzKGNwdV9vbmxpbmVfbWFzayksXG4gXHRcdFx0Y3B1bWFza19wcl9hcmdzKGNwdV9wcmVzZW50X21hc2spKTtcbi1cdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG4gXG4gXHR3YmludmRfb25fYWxsX2NwdXMoKTtcbkBAIC01NDgsMTQgJiM0Mzs1NjQsMzcgQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpXG4gXHQvKiBTTlBfSU5JVCByZXF1aXJlcyBNU1JfVk1fSFNBVkVfUEEgdG8gYmUgY2xlYXJlZCBvbiBhbGwgQ1BVcy4gKi9cbiBcdG9uX2VhY2hfY3B1KGNsZWFyX2hzYXZlX3BhLCBOVUxMLCAxKTtcbiBcbi1cdHJldCA9IDA7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcHJlcGFyZSwgXCYjMzQ7Y2NwXCYjMzQ7KTtcbiBcbi11bmxvY2s6XG4tXHRjcHVzX3JlYWRfdW5sb2NrKCk7XG4mIzQzO3N0YXRpYyB2b2lkIHNucF9jbGVhbnVwX3JtcG9wdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGNwdTtcbiBcbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJtcG9wdF93cV9tdXRleCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogcm1wb3B0X3dxIGlzIG5vbi1OVUxMIG9ubHkgYWZ0ZXIgUk1QT1BUIGhhcyBiZWVuIGZ1bGx5IHNldCB1cDogdGhlXG4mIzQzO1x0ICogd29ya3F1ZXVlIGFuZCBjcHVtYXNrcyBhcmUgYWxsb2NhdGVkIGFuZCB0aGUgUk1QT1BUX0JBU0UgTVNScyBhcmVcbiYjNDM7XHQgKiBwcm9ncmFtbWVkLiAgc25wX3NldHVwX3JtcG9wdCgpIHJlc2V0cyBpdCB0byBOVUxMIGlmIGFueSBvZiB0aG9zZVxuJiM0MztcdCAqIHN0ZXBzIGZhaWwsIHNvIGEgTlVMTCBybXBvcHRfd3EgbWVhbnMgbm90aGluZyB3YXMgc2V0IHVwIGFuZCB0aGVyZSBpc1xuJiM0MztcdCAqIG5vdGhpbmcgdG8gdGVhciBkb3duLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghcm1wb3B0X3dxKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yayk7XG4mIzQzO1x0ZGVzdHJveV93b3JrcXVldWUocm1wb3B0X3dxKTtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfY3B1KGNwdSwgcm1wb3B0X2NwdW1hc2spXG4mIzQzO1x0XHR3cm1zcnFfb25fY3B1KGNwdSwgTVNSX0FNRDY0X1JNUE9QVF9CQVNFLCAwKTtcbiYjNDM7XG4mIzQzO1x0ZnJlZV9jcHVtYXNrX3ZhcihybXBvcHRfY3B1bWFzayk7XG4mIzQzO1x0ZnJlZV9jcHVtYXNrX3ZhcihybXBvcHRfZm9sbG93ZXJfbWFzayk7XG4mIzQzO1x0cm1wb3B0X3BhX3N0YXJ0ID0gcm1wb3B0X3BhX2VuZCA9IDA7XG4mIzQzO1x0cm1wb3B0X3dxID0gTlVMTDtcbiB9XG4tRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcHJlcGFyZSwgXCYjMzQ7Y2NwXCYjMzQ7KTtcbiBcbiB2b2lkIHNucF9zaHV0ZG93bih2b2lkKVxuIHtcbkBAIC01NjUsMTEgJiM0Mzs2MDQsMjE0IEBAIHZvaWQgc25wX3NodXRkb3duKHZvaWQpXG4gXHRpZiAoc3lzY2ZnIFx1MDAyNiBNU1JfQU1ENjRfU1lTQ0ZHX1NOUF9FTilcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdC8qIERpc2FibGUgUk1QT1BUIHdoaWxlIENQVSBob3RwbHVnIGlzIGRpc2FibGVkLiAqL1xuJiM0MztcdHNucF9jbGVhbnVwX3JtcG9wdCgpO1xuJiM0MztcbiBcdGNsZWFyX3JtcCgpO1xuIFx0b25fZWFjaF9jcHUobWZkX3JlY29uZmlndXJlLCBOVUxMLCAxKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgZmlybXdhcmUgaGFzIGRpc2FibGVkIFNOUCAoU25wRW4gaXMgY2xlYXIpLCBzbyByZS1lbmFibGUgQ1BVXG4mIzQzO1x0ICogaG90cGx1Zy4gIEEgbGVnYWN5IFNOUCBzaHV0ZG93biByZXR1cm5zIGFib3ZlIHdpdGggU25wRW4gc3RpbGwgc2V0IGFuZFxuJiM0MztcdCAqIGxlYXZlcyBob3RwbHVnIGRpc2FibGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGNwdV9ob3RwbHVnX2VuYWJsZSgpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zaHV0ZG93biwgXCYjMzQ7Y2NwXCYjMzQ7KTtcbiBcbiYjNDM7c3RhdGljIGJvb2wgcm1wb3B0X2NhcGFibGUodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUE9QVCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJNUE9QVCBvcHRpbWl6YXRpb25zIHNraXAgUk1QIGNoZWNrcyBhdCAxR0IgZ3JhbnVsYXJpdHkgaWYgdGhpcyByYW5nZSBvZlxuJiM0MzsgKiBtZW1vcnkgZG9lcyBub3QgY29udGFpbiBhbnkgU05QIGd1ZXN0IG1lbW9yeS5cbiYjNDM7ICpcbiYjNDM7ICogQHBhIGlzIGEgc3lzdGVtIHBoeXNpY2FsIGFkZHJlc3M7IFJNUE9QVCBvcGVyYXRlcyBvbiB0aGUgY29udGFpbmluZyAxR0IuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBybXBvcHQodTY0IHBhKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHBhX3N0YXJ0ID0gQUxJR05fRE9XTihwYSwgU1pfMUcpO1xuJiM0MztcdGVudW0gcm1wb3B0X29wX3R5cGUgb3AgPSBSTVBPUFRfT1BfVkVSSUZZX0FORF9SRVBPUlRfU1RBVFVTO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJNUE9QVCAoRjIgMEYgMDEgRkMpOiBSQVggPSAxR0ItYWxpZ25lZCBTUEEsIFJDWCA9IG9wIHR5cGUsIENGIHNldCBpZlxuJiM0MztcdCAqIHRoZSByYW5nZSB3YXMgb3B0aW1pemVkIChyZXN1bHQgdW51c2VkIG9uIHRoaXMgcGF0aCkuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBCaW51dGlscyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBSTVBPUFQgbW5lbW9uaWMgeWV0LCBzbyB0aGUgaW5zdHJ1Y3Rpb25cbiYjNDM7XHQgKiBpcyBlbmNvZGVkIHdpdGggLmJ5dGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0YXNtIHZvbGF0aWxlKFwmIzM0Oy5ieXRlIDB4ZjIsIDB4MGYsIDB4MDEsIDB4ZmNcJiMzNDtcbiYjNDM7XHRcdCAgICAgOjogXCYjMzQ7YVwmIzM0OyAocGFfc3RhcnQpLCBcJiMzNDtjXCYjMzQ7IChvcClcbiYjNDM7XHRcdCAgICAgOiBcJiMzNDttZW1vcnlcJiMzNDssIFwmIzM0O2NjXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Lyogb25fZWFjaF9jcHUoKSBjYWxsYmFjazogb3B0aW1pemUgdGhlIHdob2xlIFJNUE9QVCByYW5nZSBvbiB0aGlzIENQVS4gKi9cbiYjNDM7c3RhdGljIHZvaWQgcm1wb3B0X3NjYW5fcmFuZ2Uodm9pZCAqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHBhO1xuJiM0MztcbiYjNDM7XHRmb3IgKHBhID0gcm1wb3B0X3BhX3N0YXJ0OyBwYSBcdTAwM2Mgcm1wb3B0X3BhX2VuZDsgcGEgJiM0Mzs9IFNaXzFHKVxuJiM0MztcdFx0cm1wb3B0KHBhKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcm1wb3B0X3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRpbnQgdGhpc19jcHU7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUk1QT1BUIHNjYW5zIHRoZSBSTVAgdGFibGUsIHN0b3JlcyB0aGUgcmVzdWx0IG9mIHRoZSBzY2FuIGluIHRoZVxuJiM0MztcdCAqIHJlc2VydmVkIHByb2Nlc3NvciBtZW1vcnkuIFRoZSBSTVAgc2NhbiBpcyB0aGUgbW9zdCBleHBlbnNpdmVcbiYjNDM7XHQgKiBwYXJ0LiBJZiBhIHNlY29uZCBSTVBPUFQgb2NjdXJzLCBpdCBjYW4gc2tpcCB0aGUgZXhwZW5zaXZlIHNjYW5cbiYjNDM7XHQgKiBpZiB0aGV5IGNhbiBzZWUgYSBjYWNoZWQgcmVzdWx0IGluIHRoZSByZXNlcnZlZCBwcm9jZXNzb3IgbWVtb3J5LlxuJiM0MztcdCAqXG4mIzQzO1x0ICogUnVuIFJNUE9QVCBvbiBvbmUgQ1BVIGZpcnN0ICh0aGUgbGVhZGVyKSwgdGhlbiBvbiBldmVyeSBvdGhlciBwcmltYXJ5XG4mIzQzO1x0ICogdGhyZWFkICh0aGUgZm9sbG93ZXJzKS4gIEEgZm9sbG93ZXIgc2tpcHMgdGhlIGV4cGVuc2l2ZSBSTVAgc2NhbiBieVxuJiM0MztcdCAqIHJldXNpbmcgdGhlIGNhY2hlZCBzY2FuIHJlc3VsdHMgdGhlIGxlYWRlciBwcm9kdWNlZC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIG1pZ3JhdGVfZGlzYWJsZSgpIHBpbnMgdGhpcyB3b3JrIHRvIHRoZSBjdXJyZW50IENQVSBzbyBpdCBzdGF5cyB0aGVcbiYjNDM7XHQgKiBsZWFkZXIgZm9yIHRoZSB3aG9sZSBsZWFkZXIgbG9vcDogdGhpc19jcHUgcmVtYWlucyB2YWxpZCBhbmQgdGhlXG4mIzQzO1x0ICogUk1QT1BUIGluc3RydWN0aW9uIHJ1bnMgb24gaXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0bWlncmF0ZV9kaXNhYmxlKCk7XG4mIzQzO1x0dGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XG4mIzQzO1xuJiM0MztcdGNwdW1hc2tfYW5kbm90KHJtcG9wdF9mb2xsb3dlcl9tYXNrLCBybXBvcHRfY3B1bWFzayxcbiYjNDM7XHRcdCAgICAgICB0b3BvbG9neV9zaWJsaW5nX2NwdW1hc2sodGhpc19jcHUpKTtcbiYjNDM7XG4mIzQzO1x0cm1wb3B0X3NjYW5fcmFuZ2UoTlVMTCk7XG4mIzQzO1xuJiM0MztcdG1pZ3JhdGVfZW5hYmxlKCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRm9sbG93ZXJzOiBvbmUgSVBJIHBlciByZW1haW5pbmcgY29yZSwgZWFjaCBvcHRpbWl6aW5nIHRoZSB3aG9sZVxuJiM0MztcdCAqIHJhbmdlLiAgRWFjaCBydW5zIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCwgYnV0IG9ubHkgaXNzdWVzIGNhY2hlLWhpdFxuJiM0MztcdCAqIFJNUE9QVHMgKHRoZSBsZWFkZXIgcG9wdWxhdGVkIHRoZSBzY2FuIGNhY2hlIGFib3ZlKSwgc28gdGhlIHdpbmRvdyBpc1xuJiM0MztcdCAqIHNob3J0LiAgY3B1c19yZWFkX2xvY2soKSBpcyBpbnRlbnRpb25hbGx5IG5vdCBoZWxkOiBDUFUgaG90cGx1ZyBpc1xuJiM0MztcdCAqIGRpc2FibGVkIHRoZSBlbnRpcmUgdGltZSBTTlAgaXMgYWN0aXZlIChzZWUgc25wX3ByZXBhcmUoKSksIGFuZCB0aGlzXG4mIzQzO1x0ICogd29yayBvbmx5IHJ1bnMgd2hpbGUgU05QIGlzIGFjdGl2ZSwgc28gdGhlIGZvbGxvd2VyIHNldCBzdGF5cyB2YWxpZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRvbl9lYWNoX2NwdV9tYXNrKHJtcG9wdF9mb2xsb3dlcl9tYXNrLCBybXBvcHRfc2Nhbl9yYW5nZSwgTlVMTCwgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIERlbGF5LCBpbiBtaWxsaXNlY29uZHMsIGJlZm9yZSB0aGUgUk1QIHJlLW9wdGltaXphdGlvbiBwYXNzIHJ1bnMgYWZ0ZXIgYW5cbiYjNDM7ICogU05QIGd1ZXN0IGlzIHRvcm4gZG93bi4gIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKSByZS1hcm1zIHRoZSBkZWxheWVkIHdvcmtcbiYjNDM7ICogd2l0aCBtb2RfZGVsYXllZF93b3JrKCkgb24gZWFjaCB0ZWFyZG93biwgc28gdGhlIHBhc3MgZmlyZXMgdGhpcyBsb25nIGFmdGVyXG4mIzQzOyAqIHRoZSBsYXN0IHRlYXJkb3duLiAgVGhpcyBjb2FsZXNjZXMgYSBidXJzdCBvZiB0ZWFyZG93bnMgaW50byBhIHNpbmdsZSBzY2FuXG4mIzQzOyAqIGFuZCBnaXZlcyBlYWNoIGd1ZXN0JiMzOTtzIHBhZ2VzIHRpbWUgdG8gYmUgY29udmVydGVkIGJhY2sgdG8gdGhlIHNoYXJlZCxcbiYjNDM7ICogaHlwZXJ2aXNvci1vd25lZCBzdGF0ZSBiZWZvcmUgdGhlIHNjYW4gcmUtb3B0aW1pemVzIHRoZWlyIDFHQiByZWdpb25zLiAgVGhlXG4mIzQzOyAqIDEwIHNlY29uZCB2YWx1ZSBpcyBhIGhldXJpc3RpYyB0cmFkaW5nIHJlLW9wdGltaXphdGlvbiBsYXRlbmN5IGFnYWluc3RcbiYjNDM7ICogc2Nhbm5pbmcgdG9vIGVhZ2VybHkuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFJNUE9QVF9XT1JLX1RJTUVPVVRcdCgxMCAqIE1TRUNfUEVSX1NFQylcbiYjNDM7XG4mIzQzO3ZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFybXBvcHRfY2FwYWJsZSgpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2cm1wb3B0X3dxX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFybXBvcHRfd3EpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdG1vZF9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLFxuJiM0MztcdFx0XHQgbXNlY3NfdG9famlmZmllcyhSTVBPUFRfV09SS19USU1FT1VUKSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcm1wb3B0X2FsbF9waHlzbWVtLCBcJiMzNDtrdm0tYW1kXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO3ZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHJtcG9wdF9iYXNlO1xuJiM0MztcdGludCBjcHU7XG4mIzQzO1xuJiM0MztcdGlmICghcm1wb3B0X2NhcGFibGUoKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJtcG9wdF93cV9tdXRleCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogT24gcmUtaW5pdGlhbGl6YXRpb24gYWZ0ZXIgYSBsZWdhY3kgU05QIHNodXRkb3duIChTTlBfU0hVVERPV05fRVhcbiYjNDM7XHQgKiB3aXRoIHg4Nl9zbnBfc2h1dGRvd249MCksIHNucF9zaHV0ZG93bigpIGFuZCB0aHVzIHNucF9jbGVhbnVwX3JtcG9wdCgpXG4mIzQzO1x0ICogYXJlIHNraXBwZWQsIHNvIHRoZSB3b3JrcXVldWUsIGRlbGF5ZWQgd29yaywgY3B1bWFzayBhbmQgcGVyLUNQVVxuJiM0MztcdCAqIFJNUE9QVF9CQVNFIE1TUnMgYXJlIHN0aWxsIHNldCB1cCBhbmQgdmFsaWQgKFNucEVuIHN0YXllZCBzZXQgYW5kXG4mIzQzO1x0ICogQ1BVIGhvdHBsdWcgc3RheWVkIGRpc2FibGVkKS4gIFJhdGhlciB0aGFuIHJlLWRvaW5nIHRoZSBzZXR1cCwgd2hpY2hcbiYjNDM7XHQgKiB3b3VsZCBsZWFrIHRoZSBleGlzdGluZyBzdGF0ZSwganVzdCByZS1xdWV1ZSB0aGUgb3B0aW1pemF0aW9uIHBhc3NcbiYjNDM7XHQgKiB0byByZS1vcHRpbWl6ZSBhbnkgbWVtb3J5IHRoZSBwcmV2aW91cyBTTlAgc2Vzc2lvbiBkZS1vcHRpbWl6ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJtcG9wdF93cSkge1xuJiM0MztcdFx0cXVldWVfZGVsYXllZF93b3JrKHJtcG9wdF93cSwgXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENyZWF0ZSBhbiBSTVBPUFQtc3BlY2lmaWMgd29ya3F1ZXVlIHRvIGF2b2lkIHNjaGVkdWxpbmdcbiYjNDM7XHQgKiBSTVBPUFQgd29ya2l0ZW0gb24gdGhlIGdsb2JhbCBzeXN0ZW0gd29ya3F1ZXVlLlxuJiM0MztcdCAqL1xuJiM0MztcdHJtcG9wdF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDtybXBvcHRfd3FcJiMzNDssIFdRX1VOQk9VTkQsIDEpO1xuJiM0MztcdGlmICghcm1wb3B0X3dxKSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIFJNUE9QVCB3b3JrcXVldWVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgcm1wb3B0X3dvcmtfaGFuZGxlcik7XG4mIzQzO1xuJiM0MztcdGlmICghemFsbG9jX2NwdW1hc2tfdmFyKFx1MDAyNnJtcG9wdF9jcHVtYXNrLCBHRlBfS0VSTkVMKSkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBSTVBPUFQgY3B1bWFza1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRkZXN0cm95X3dvcmtxdWV1ZShybXBvcHRfd3EpO1xuJiM0MztcdFx0cm1wb3B0X3dxID0gTlVMTDtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghemFsbG9jX2NwdW1hc2tfdmFyKFx1MDAyNnJtcG9wdF9mb2xsb3dlcl9tYXNrLCBHRlBfS0VSTkVMKSkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBSTVBPUFQgZm9sbG93ZXIgY3B1bWFza1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRmcmVlX2NwdW1hc2tfdmFyKHJtcG9wdF9jcHVtYXNrKTtcbiYjNDM7XHRcdGRlc3Ryb3lfd29ya3F1ZXVlKHJtcG9wdF93cSk7XG4mIzQzO1x0XHRybXBvcHRfd3EgPSBOVUxMO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgUk1QT1BUX0JBU0UgTVNSIGlzIHBlci1jb3JlLCBzbyBvbmx5IG9uZSB0aHJlYWQgcGVyIGNvcmUgbmVlZHNcbiYjNDM7XHQgKiB0byBzZXQgdXAgdGhlIFJNUE9QVF9CQVNFIE1TUi4gIEFsbCBwcmltYXJ5IHRocmVhZHMgYXJlIG9ubGluZSxcbiYjNDM7XHQgKiBvdGhlcndpc2UgU05QIHdvdWxkIG5vdCBoYXZlIGJlZW4gZW5hYmxlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSlcbiYjNDM7XHRcdGlmICh0b3BvbG9neV9pc19wcmltYXJ5X3RocmVhZChjcHUpKVxuJiM0MztcdFx0XHRjcHVtYXNrX3NldF9jcHUoY3B1LCBybXBvcHRfY3B1bWFzayk7XG4mIzQzO1xuJiM0MztcdHJtcG9wdF9wYV9zdGFydCA9IEFMSUdOX0RPV04oUEZOX1BIWVMobWluX2xvd19wZm4pLCBTWl8xRyk7XG4mIzQzO1x0cm1wb3B0X2Jhc2UgPSBybXBvcHRfcGFfc3RhcnQgfCBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQZXItQ1BVIFJNUE9QVCB0YWJsZXMgY292ZXIgYXQgbW9zdCAyIFRCLiAgUHJvZ3JhbSBlYWNoIGNvcmUmIzM5O3NcbiYjNDM7XHQgKiBSTVBPUFRfQkFTRSB3aXRoIHRoZSBzdGFydCBvZiBSQU0gdG8gb3B0aW1pemUgdXAgdG8gMiBUQi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3JfZWFjaF9jcHUoY3B1LCBybXBvcHRfY3B1bWFzaylcbiYjNDM7XHRcdHdybXNycV9vbl9jcHUoY3B1LCBNU1JfQU1ENjRfUk1QT1BUX0JBU0UsIHJtcG9wdF9iYXNlKTtcbiYjNDM7XG4mIzQzO1x0cm1wb3B0X3BhX2VuZCA9IEFMSUdOKFBGTl9QSFlTKG1heF9wZm4pLCBTWl8xRyk7XG4mIzQzO1xuJiM0MztcdC8qIExpbWl0IG1lbW9yeSBzY2FubmluZyB0byAyVEIgb2YgUkFNICovXG4mIzQzO1x0aWYgKChybXBvcHRfcGFfZW5kIC0gcm1wb3B0X3BhX3N0YXJ0KSBcdTAwM2UgU1pfMlQpIHtcbiYjNDM7XHRcdHByX2luZm8oXCYjMzQ7Uk1QT1BUIGNvdmVyYWdlIGxpbWl0ZWQgdG8gMlRCOyBtZW1vcnkgYWJvdmUgMHglbGx4IG5vdCBvcHRpbWl6ZWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHJtcG9wdF9wYV9zdGFydCAmIzQzOyBTWl8yVCk7XG4mIzQzO1x0XHRybXBvcHRfcGFfZW5kID0gcm1wb3B0X3BhX3N0YXJ0ICYjNDM7IFNaXzJUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBPbmNlIGFsbCBwZXItQ1BVIFJNUE9QVCB0YWJsZXMgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQsIGVuYWJsZSBSTVBPUFRcbiYjNDM7XHQgKiBvcHRpbWl6YXRpb25zIG9uIGFsbCBwaHlzaWNhbCBtZW1vcnkuXG4mIzQzO1x0ICovXG4mIzQzO1x0cXVldWVfZGVsYXllZF93b3JrKHJtcG9wdF93cSwgXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7XG4mIzQzO1xuJiM0MztcdHByX2luZm8oXCYjMzQ7Uk1QT1BUIG9wdGltaXphdGlvbnMgZW5hYmxlZFxcblwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2V0dXBfcm1wb3B0LCBcJiMzNDtjY3BcJiMzNDspO1xuJiM0MztcbiAvKlxuICAqIERvIHRoZSBuZWNlc3NhcnkgcHJlcGFyYXRpb25zIHdoaWNoIGFyZSB2ZXJpZmllZCBieSB0aGUgZmlybXdhcmUgYXNcbiAgKiBkZXNjcmliZWQgaW4gdGhlIFNOUF9JTklUX0VYIGZpcm13YXJlIGNvbW1hbmQgZGVzY3JpcHRpb24gaW4gdGhlIFNOUFxuQEAgLTU3Nyw2ICYjNDM7ODE5LDggQEAgRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2h1dGRvd24sIFwmIzM0O2NjcFwmIzM0Oyk7XG4gICovXG4gaW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxuIHtcbiYjNDM7XHR1NjQgdmFsO1xuJiM0MztcbiBcdGlmIChXQVJOX09OX09OQ0UoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpKVxuIFx0XHRyZXR1cm4gLUVOT1NZUztcbiBcbkBAIC01ODYsNiAmIzQzOzgzMCwxNSBAQCBpbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpXG4gXHRpZiAoIXNldHVwX3JtcHRhYmxlKCkpXG4gXHRcdHJldHVybiAtRU5PU1lTO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogT24gYSBrZXhlYyBib290IFNOUCBtYXkgYWxyZWFkeSBiZSBlbmFibGVkIChsZWdhY3kgZmlybXdhcmUgbGVhdmVzXG4mIzQzO1x0ICogU25wRW4gc2V0IGFjcm9zcyBzaHV0ZG93biksIGluIHdoaWNoIGNhc2Ugc25wX3ByZXBhcmUoKSBiYWlscyB3aXRob3V0XG4mIzQzO1x0ICogZGlzYWJsaW5nIENQVSBob3RwbHVnLCBzbyBkaXNhYmxlIGl0IGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmRtc3JxKE1TUl9BTUQ2NF9TWVNDRkcsIHZhbCk7XG4mIzQzO1x0aWYgKHZhbCBcdTAwMjYgTVNSX0FNRDY0X1NZU0NGR19TTlBfRU4pXG4mIzQzO1x0XHRjcHVfaG90cGx1Z19kaXNhYmxlKCk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIFNldHRpbmcgY3Jhc2hfa2V4ZWNfcG9zdF9ub3RpZmllcnMgdG8gJiMzOTt0cnVlJiMzOTsgdG8gZW5zdXJlIHRoYXQgU05QIHBhbmljXG4gXHQgKiBub3RpZmllciBpcyBpbnZva2VkIHRvIGRvIFNOUCBJT01NVSBzaHV0ZG93biBiZWZvcmUga2R1bXAuXG5AQCAtNjgzLDEzICYjNDM7OTM2LDIxIEBAIHN0YXRpYyBib29sIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKHZvaWQpXG4gXG4gYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKVxuIHtcbi1cdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFR01FTlRFRF9STVApKVxuJiM0MztcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFR01FTlRFRF9STVApKSB7XG4gXHRcdHJkbXNycShNU1JfQU1ENjRfUk1QX0NGRywgcm1wX2NmZyk7XG4gXG4tXHRpZiAocm1wX2NmZyBcdTAwMjYgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRClcbi1cdFx0cmV0dXJuIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKCk7XG4tXHRlbHNlXG4tXHRcdHJldHVybiBwcm9iZV9jb250aWd1b3VzX3JtcHRhYmxlX2luZm8oKTtcbiYjNDM7XHRcdGlmIChybXBfY2ZnIFx1MDAyNiBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEKVxuJiM0MztcdFx0XHRyZXR1cm4gcHJvYmVfc2VnbWVudGVkX3JtcHRhYmxlX2luZm8oKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU2VnbWVudGVkIFJNUCBpcyBlaXRoZXIgbm90IHN1cHBvcnRlZCBvbiB0aGUgcGxhdGZvcm0gb3IgaXNcbiYjNDM7XHQgKiBkaXNhYmxlZCBieSB0aGUgZmlybXdhcmUuICBSTVBPUFQgaXMgbm90IHN1cHBvcnRlZCB3aXRob3V0XG4mIzQzO1x0ICogc2VnbWVudGVkIFJNUC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1JNUE9QVCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwcm9iZV9jb250aWd1b3VzX3JtcHRhYmxlX2luZm8oKTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jIGIvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY1xuaW5kZXggY2E0NzNjYTE5OGI4MS4uZGExMmRkZjFmNDEyNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcbkBAIC0xNTEwLDYgJiM0MzsxNTEwLDggQEAgc3RhdGljIGludCBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoaW50ICplcnJvciwgdW5zaWduZWQgaW50IG1heF9zbnBfYXNpZClcbiBcbiBcdHNldl9lc190bXJfc2l6ZSA9IFNOUF9UTVJfU0laRTtcbiBcbiYjNDM7XHRzbnBfc2V0dXBfcm1wb3B0KCk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBBTUQgUk1QT1BUIGluc3RydWN0aW9uLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBBTUQgU0VWLVNOUCAoU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAtIFNlY3VyZSBOZXN0ZWQgUGFnaW5nKSBob3N0IHN1cHBvcnQuIEFsbCB0aGUgbW9kaWZpZWQgYW5kIGFkZGVkIGZ1bmN0aW9ucyAoZS5nLiwgc25wX3JtcG9wdF9hbGxfcGh5c21lbSwgc25wX3NldHVwX3JtcG9wdCwgc25wX3ByZXBhcmUsIHNucF9zaHV0ZG93bikgYXJlIGd1YXJkZWQgYnkgY2hlY2tzIGZvciBDQ19BVFRSX0hPU1RfU0VWX1NOUCBvciBleHBsaWNpdGx5IHJlcXVpcmUgdGhlIGFic2VuY2Ugb2YgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUi4gU2luY2Ugc3l6a2FsbGVyIHJ1bnMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChHQ0UvUUVNVSkgd2hlcmUgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUiBpcyBzZXQgYW5kIFNFVi1TTlAgaG9zdCBoYXJkd2FyZSBmZWF0dXJlcyBhcmUgbm90IGVtdWxhdGVkLCB0aGlzIGNvZGUgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0YmYwNzYwMzE1ZmY0NTRlZDYyNWE0MTRjNjc3YjFkZGJmODAzYjRmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMjM6MzI6NTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaAppbmRleCAzZDA5NDBhM2I5ZjM3Li5kYmNjZGU5ZWU1Y2Q1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgKQEAgLTc2LDcgJiM0Mzs3Niw3IEBACiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0s4CQkJKCAzKjMyJiM0MzsgNCkgLyogT3B0ZXJvbiwgQXRobG9uNjQgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfWkVONQkJKCAzKjMyJiM0MzsgNSkgLyogQ1BVIGJhc2VkIG9uIFplbjUgbWljcm9hcmNoaXRlY3R1cmUgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfWkVONgkJKCAzKjMyJiM0MzsgNikgLyogQ1BVIGJhc2VkIG9uIFplbjYgbWljcm9hcmNoaXRlY3R1cmUgKi8KLS8qIEZyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDMqMzImIzQzOyA3KSAqLwomIzQzOyNkZWZpbmUgWDg2X0ZFQVRVUkVfUk1QT1BUCQkoIDMqMzImIzQzOyA3KSAvKiBTdXBwb3J0IGZvciBBTUQgUk1QT1BUIGluc3RydWN0aW9uICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQwkoIDMqMzImIzQzOyA4KSAvKiAmIzM0O2NvbnN0YW50X3RzYyYjMzQ7IFRTQyB0aWNrcyBhdCBhIGNvbnN0YW50IHJhdGUgKi8KIC8qIGZyZWU6IHdhcyAjZGVmaW5lIFg4Nl9GRUFUVVJFX1VQCSggMyozMiYjNDM7IDkpICogJiMzNDt1cCYjMzQ7IFNNUCBrZXJuZWwgcnVubmluZyBvbiBVUCAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9BUlQJCQkoIDMqMzImIzQzOzEwKSAvKiAmIzM0O2FydCYjMzQ7IEFsd2F5cyBydW5uaW5nIHRpbWVyIChBUlQpICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCmluZGV4IDE4YzRiZTc1ZTkyNzEuLmQyY2IwYTdjZDBhMmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCkBAIC03NjEsNiAmIzQzOzc2MSw5IEBACiAjZGVmaW5lIE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRURfQklUCTAKICNkZWZpbmUgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRAlCSVRfVUxMKE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRURfQklUKQogI2RlZmluZSBNU1JfQU1ENjRfUk1QX1NFR01FTlRfU0hJRlQoeCkJKCgoeCkgJmFtcDsgR0VOTUFTS19VTEwoMTMsIDgpKSAmZ3Q7Jmd0OyA4KQomIzQzOyNkZWZpbmUgTVNSX0FNRDY0X1JNUE9QVF9CQVNFCQkweGMwMDEwMTM5CiYjNDM7I2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRV9CSVQJMAomIzQzOyNkZWZpbmUgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEUJCUJJVF9VTEwoTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVfQklUKQogCiAjZGVmaW5lIE1TUl9TVlNNX0NBQQkJCTB4YzAwMWYwMDAKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaAppbmRleCA1OTRjZmExOWNiZDRiLi4wOWIxYzVkMzM3OTAyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaApAQCAtNjYyLDYgJiM0Mzs2NjIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc25wX2xlYWtfcGFnZXModTY0IHBmbiwgdW5zaWduZWQgaW50IHBhZ2VzKQogCV9fc25wX2xlYWtfcGFnZXMocGZuLCBwYWdlcywgdHJ1ZSk7CiB9CiBpbnQgc25wX3ByZXBhcmUodm9pZCk7CiYjNDM7dm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpOwomIzQzO3ZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKTsKIHZvaWQgc25wX3NodXRkb3duKHZvaWQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKSB7IHJldHVybiBmYWxzZTsgfQpAQCAtNjgwLDYgJiM0Mzs2ODIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc25wX2xlYWtfcGFnZXModTY0IHBmbiwgdW5zaWduZWQgaW50IG5wYWdlcykge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBrZHVtcF9zZXZfY2FsbGJhY2sodm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgc25wX2ZpeHVwX2U4MjBfdGFibGVzKHZvaWQpIHt9CiBzdGF0aWMgaW5saW5lIGludCBzbnBfcHJlcGFyZSh2b2lkKSB7IHJldHVybiAtRU5PREVWOyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCkge30KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKSB7fQogc3RhdGljIGlubGluZSB2b2lkIHNucF9zaHV0ZG93bih2b2lkKSB7fQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jCmluZGV4IDkzNzEyOWNlNmE5NjQuLjAyMWMwYmYyMmRlMjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYwpAQCAtNjcsNiAmIzQzOzY3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVpZF9iaXQgY3B1aWRfYml0c1tdID0gewogCXsgWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMiwJCUNQVUlEX0VBWCwgIDAsIDB4ODAwMDAwMjIsIDAgfSwKIAl7IFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIsCQlDUFVJRF9FQVgsICAxLCAweDgwMDAwMDIyLCAwIH0sCiAJeyBYODZfRkVBVFVSRV9BTURfTEJSX1BNQ19GUkVFWkUsCUNQVUlEX0VBWCwgIDIsIDB4ODAwMDAwMjIsIDAgfSwKJiM0MzsJeyBYODZfRkVBVFVSRV9STVBPUFQsCQkJQ1BVSURfRURYLCAgMCwgMHg4MDAwMDAyNSwgMCB9LAogCXsgWDg2X0ZFQVRVUkVfQU1EX0hUUl9DT1JFUywJCUNQVUlEX0VBWCwgMzAsIDB4ODAwMDAwMjYsIDAgfSwKIAl7IDAsIDAsIDAsIDAsIDAgfQogfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCmluZGV4IDQyNzIyOTM0Nzg3NjYuLmM1NzQ4NDliMTU4NzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwpAQCAtMjk5Miw2ICYjNDM7Mjk5MiwxNiBAQCB2b2lkIHNldl92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSkKIAkJICovCiAJCWlmIChzbnBfZGVjb21taXNzaW9uX2NvbnRleHQoa3ZtKSkKIAkJCXJldHVybjsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBQZXJmb3JtIFJNUCBvcHRpbWl6YXRpb25zIG9uIG1lbW9yeSBmcmVlZCBieSB0ZXJtaW5hdGluZwomIzQzOwkJICogZ3Vlc3RzLiAgVGhlIHNjYW4gaXMgZGVmZXJyZWQsIHNvIGl0IG5vcm1hbGx5IHJ1bnMgYWZ0ZXIKJiM0MzsJCSAqIHNldl9nbWVtX2ludmFsaWRhdGUoKSBoYXMgY29udmVydGVkIHRoaXMgZ3Vlc3QmIzM5O3MgcGFnZXMgYmFjayB0bwomIzQzOwkJICogc2hhcmVkLCBhbmQgcGlja3MgdGhlbSB1cCB0aGVuLiAgQSB2ZXJ5IGxhcmdlIGd1ZXN0IHdob3NlCiYjNDM7CQkgKiBjb252ZXJzaW9uIGhhcyBub3QgZmluaXNoZWQgYnkgdGhlbiBpcyBwaWNrZWQgdXAgYnkgYSBsYXRlcgomIzQzOwkJICogdGVhcmRvd24mIzM5O3Mgc2Nhbi4KJiM0MzsJCSAqLwomIzQzOwkJc25wX3JtcG9wdF9hbGxfcGh5c21lbSgpOwogCX0gZWxzZSB7CiAJCXNldl91bmJpbmRfYXNpZChrdm0sIHNldi0mZ3Q7aGFuZGxlKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYyBiL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jCmluZGV4IGNmZjI4NWQ4YWQ4ZTMuLjAzNGVkNTQ3YWMyODEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jCkBAIC0xOSw2ICYjNDM7MTksNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2lvbW11LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYW1kLWlvbW11LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbm9zcGVjLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dvcmtxdWV1ZS5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7YXNtL3Nldi5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9wcm9jZXNzb3IuaCZndDsKQEAgLTEyNCw2ICYjNDM7MTI1LDE4IEBAIHN0YXRpYyB2b2lkICpybXBfYm9va2tlZXBpbmcgX19yb19hZnRlcl9pbml0OwogCiBzdGF0aWMgdTY0IHByb2JlZF9ybXBfYmFzZSwgcHJvYmVkX3JtcF9zaXplOwogCiYjNDM7c3RhdGljIGNwdW1hc2tfdmFyX3Qgcm1wb3B0X2NwdW1hc2ssIHJtcG9wdF9mb2xsb3dlcl9tYXNrOwomIzQzO3N0YXRpYyB1NjQgcm1wb3B0X3BhX3N0YXJ0LCBybXBvcHRfcGFfZW5kOwomIzQzOwomIzQzO2VudW0gcm1wb3B0X29wX3R5cGUgewomIzQzOwlSTVBPUFRfT1BfVkVSSUZZX0FORF9SRVBPUlRfU1RBVFVTLAomIzQzOwlSTVBPUFRfT1BfUkVQT1JUX1NUQVRVUwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpybXBvcHRfd3E7CiYjNDM7c3RhdGljIHN0cnVjdCBkZWxheWVkX3dvcmsgcm1wb3B0X2RlbGF5ZWRfd29yazsKJiM0MztzdGF0aWMgREVGSU5FX01VVEVYKHJtcG9wdF93cV9tdXRleCk7CiYjNDM7CiBzdGF0aWMgTElTVF9IRUFEKHNucF9sZWFrZWRfcGFnZXNfbGlzdCk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNucF9sZWFrZWRfcGFnZXNfbGlzdF9sb2NrKTsKIApAQCAtNTEzLDcgJiM0Mzs1MjYsNiBAQCBzdGF0aWMgdm9pZCBjbGVhcl9oc2F2ZV9wYSh2b2lkICphcmcpCiAKIGludCBzbnBfcHJlcGFyZSh2b2lkKQogewotCWludCByZXQ7CiAJdTY0IHZhbDsKIAogCS8qCkBAIC01MjYsMTQgJiM0Mzs1MzgsMTggQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpCiAKIAljbGVhcl9ybXAoKTsKIAotCWNwdXNfcmVhZF9sb2NrKCk7CiYjNDM7CS8qCiYjNDM7CSAqIE5vIENQVSBtYXkgY29tZSBvbmxpbmUgd2l0aG91dCBTbnBFbiB3aGlsZSBTTlAgaXMgYWN0aXZlOyBkaXNhYmxlCiYjNDM7CSAqIGhvdHBsdWcgaGVyZSBhbmQgcmUtZW5hYmxlIGl0IGluIHNucF9zaHV0ZG93bigpLgomIzQzOwkgKi8KJiM0MzsJY3B1X2hvdHBsdWdfZGlzYWJsZSgpOwogCiAJaWYgKCFjcHVtYXNrX2VxdWFsKGNwdV9vbmxpbmVfbWFzaywgY3B1X3ByZXNlbnRfbWFzaykpIHsKLQkJcmV0ID0gLUVPUE5PVFNVUFA7CiYjNDM7CQljcHVfaG90cGx1Z19lbmFibGUoKTsKIAkJcHJfd2FybigmIzM0O1NOUCBpbml0IGZhaWxlZDogbm90IGFsbCBDUFVzIG9ubGluZS4gKCUqcGJsIG9ubGluZSAmbHQ7LSZndDsgJSpwYmwgcHJlc2VudCBtYXNrcykuXG4mIzM0OywKIAkJCWNwdW1hc2tfcHJfYXJncyhjcHVfb25saW5lX21hc2spLAogCQkJY3B1bWFza19wcl9hcmdzKGNwdV9wcmVzZW50X21hc2spKTsKLQkJZ290byB1bmxvY2s7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCiAJd2JpbnZkX29uX2FsbF9jcHVzKCk7CkBAIC01NDgsMTQgJiM0Mzs1NjQsMzcgQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpCiAJLyogU05QX0lOSVQgcmVxdWlyZXMgTVNSX1ZNX0hTQVZFX1BBIHRvIGJlIGNsZWFyZWQgb24gYWxsIENQVXMuICovCiAJb25fZWFjaF9jcHUoY2xlYXJfaHNhdmVfcGEsIE5VTEwsIDEpOwogCi0JcmV0ID0gMDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3ByZXBhcmUsICYjMzQ7Y2NwJiMzNDspOwogCi11bmxvY2s6Ci0JY3B1c19yZWFkX3VubG9jaygpOwomIzQzO3N0YXRpYyB2b2lkIHNucF9jbGVhbnVwX3JtcG9wdCh2b2lkKQomIzQzO3sKJiM0MzsJaW50IGNwdTsKIAotCXJldHVybiByZXQ7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3JtcG9wdF93cV9tdXRleCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIHJtcG9wdF93cSBpcyBub24tTlVMTCBvbmx5IGFmdGVyIFJNUE9QVCBoYXMgYmVlbiBmdWxseSBzZXQgdXA6IHRoZQomIzQzOwkgKiB3b3JrcXVldWUgYW5kIGNwdW1hc2tzIGFyZSBhbGxvY2F0ZWQgYW5kIHRoZSBSTVBPUFRfQkFTRSBNU1JzIGFyZQomIzQzOwkgKiBwcm9ncmFtbWVkLiAgc25wX3NldHVwX3JtcG9wdCgpIHJlc2V0cyBpdCB0byBOVUxMIGlmIGFueSBvZiB0aG9zZQomIzQzOwkgKiBzdGVwcyBmYWlsLCBzbyBhIE5VTEwgcm1wb3B0X3dxIG1lYW5zIG5vdGhpbmcgd2FzIHNldCB1cCBhbmQgdGhlcmUgaXMKJiM0MzsJICogbm90aGluZyB0byB0ZWFyIGRvd24uCiYjNDM7CSAqLwomIzQzOwlpZiAoIXJtcG9wdF93cSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhbXA7cm1wb3B0X2RlbGF5ZWRfd29yayk7CiYjNDM7CWRlc3Ryb3lfd29ya3F1ZXVlKHJtcG9wdF93cSk7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX2NwdShjcHUsIHJtcG9wdF9jcHVtYXNrKQomIzQzOwkJd3Jtc3JxX29uX2NwdShjcHUsIE1TUl9BTUQ2NF9STVBPUFRfQkFTRSwgMCk7CiYjNDM7CiYjNDM7CWZyZWVfY3B1bWFza192YXIocm1wb3B0X2NwdW1hc2spOwomIzQzOwlmcmVlX2NwdW1hc2tfdmFyKHJtcG9wdF9mb2xsb3dlcl9tYXNrKTsKJiM0MzsJcm1wb3B0X3BhX3N0YXJ0ID0gcm1wb3B0X3BhX2VuZCA9IDA7CiYjNDM7CXJtcG9wdF93cSA9IE5VTEw7CiB9Ci1FWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9wcmVwYXJlLCAmIzM0O2NjcCYjMzQ7KTsKIAogdm9pZCBzbnBfc2h1dGRvd24odm9pZCkKIHsKQEAgLTU2NSwxMSAmIzQzOzYwNCwyMTQgQEAgdm9pZCBzbnBfc2h1dGRvd24odm9pZCkKIAlpZiAoc3lzY2ZnICZhbXA7IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKQogCQlyZXR1cm47CiAKJiM0MzsJLyogRGlzYWJsZSBSTVBPUFQgd2hpbGUgQ1BVIGhvdHBsdWcgaXMgZGlzYWJsZWQuICovCiYjNDM7CXNucF9jbGVhbnVwX3JtcG9wdCgpOwomIzQzOwogCWNsZWFyX3JtcCgpOwogCW9uX2VhY2hfY3B1KG1mZF9yZWNvbmZpZ3VyZSwgTlVMTCwgMSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBmaXJtd2FyZSBoYXMgZGlzYWJsZWQgU05QIChTbnBFbiBpcyBjbGVhciksIHNvIHJlLWVuYWJsZSBDUFUKJiM0MzsJICogaG90cGx1Zy4gIEEgbGVnYWN5IFNOUCBzaHV0ZG93biByZXR1cm5zIGFib3ZlIHdpdGggU25wRW4gc3RpbGwgc2V0IGFuZAomIzQzOwkgKiBsZWF2ZXMgaG90cGx1ZyBkaXNhYmxlZC4KJiM0MzsJICovCiYjNDM7CWNwdV9ob3RwbHVnX2VuYWJsZSgpOwogfQogRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2h1dGRvd24sICYjMzQ7Y2NwJiMzNDspOwogCiYjNDM7c3RhdGljIGJvb2wgcm1wb3B0X2NhcGFibGUodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUE9QVCkgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSTVBPUFQgb3B0aW1pemF0aW9ucyBza2lwIFJNUCBjaGVja3MgYXQgMUdCIGdyYW51bGFyaXR5IGlmIHRoaXMgcmFuZ2Ugb2YKJiM0MzsgKiBtZW1vcnkgZG9lcyBub3QgY29udGFpbiBhbnkgU05QIGd1ZXN0IG1lbW9yeS4KJiM0MzsgKgomIzQzOyAqIEBwYSBpcyBhIHN5c3RlbSBwaHlzaWNhbCBhZGRyZXNzOyBSTVBPUFQgb3BlcmF0ZXMgb24gdGhlIGNvbnRhaW5pbmcgMUdCLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJtcG9wdCh1NjQgcGEpCiYjNDM7ewomIzQzOwl1NjQgcGFfc3RhcnQgPSBBTElHTl9ET1dOKHBhLCBTWl8xRyk7CiYjNDM7CWVudW0gcm1wb3B0X29wX3R5cGUgb3AgPSBSTVBPUFRfT1BfVkVSSUZZX0FORF9SRVBPUlRfU1RBVFVTOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSTVBPUFQgKEYyIDBGIDAxIEZDKTogUkFYID0gMUdCLWFsaWduZWQgU1BBLCBSQ1ggPSBvcCB0eXBlLCBDRiBzZXQgaWYKJiM0MzsJICogdGhlIHJhbmdlIHdhcyBvcHRpbWl6ZWQgKHJlc3VsdCB1bnVzZWQgb24gdGhpcyBwYXRoKS4KJiM0MzsJICoKJiM0MzsJICogQmludXRpbHMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgUk1QT1BUIG1uZW1vbmljIHlldCwgc28gdGhlIGluc3RydWN0aW9uCiYjNDM7CSAqIGlzIGVuY29kZWQgd2l0aCAuYnl0ZS4KJiM0MzsJICovCiYjNDM7CWFzbSB2b2xhdGlsZSgmIzM0Oy5ieXRlIDB4ZjIsIDB4MGYsIDB4MDEsIDB4ZmMmIzM0OwomIzQzOwkJICAgICA6OiAmIzM0O2EmIzM0OyAocGFfc3RhcnQpLCAmIzM0O2MmIzM0OyAob3ApCiYjNDM7CQkgICAgIDogJiMzNDttZW1vcnkmIzM0OywgJiMzNDtjYyYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7Lyogb25fZWFjaF9jcHUoKSBjYWxsYmFjazogb3B0aW1pemUgdGhlIHdob2xlIFJNUE9QVCByYW5nZSBvbiB0aGlzIENQVS4gKi8KJiM0MztzdGF0aWMgdm9pZCBybXBvcHRfc2Nhbl9yYW5nZSh2b2lkICphcmcpCiYjNDM7ewomIzQzOwl1NjQgcGE7CiYjNDM7CiYjNDM7CWZvciAocGEgPSBybXBvcHRfcGFfc3RhcnQ7IHBhICZsdDsgcm1wb3B0X3BhX2VuZDsgcGEgJiM0Mzs9IFNaXzFHKQomIzQzOwkJcm1wb3B0KHBhKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcm1wb3B0X3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlpbnQgdGhpc19jcHU7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFJNUE9QVCBzY2FucyB0aGUgUk1QIHRhYmxlLCBzdG9yZXMgdGhlIHJlc3VsdCBvZiB0aGUgc2NhbiBpbiB0aGUKJiM0MzsJICogcmVzZXJ2ZWQgcHJvY2Vzc29yIG1lbW9yeS4gVGhlIFJNUCBzY2FuIGlzIHRoZSBtb3N0IGV4cGVuc2l2ZQomIzQzOwkgKiBwYXJ0LiBJZiBhIHNlY29uZCBSTVBPUFQgb2NjdXJzLCBpdCBjYW4gc2tpcCB0aGUgZXhwZW5zaXZlIHNjYW4KJiM0MzsJICogaWYgdGhleSBjYW4gc2VlIGEgY2FjaGVkIHJlc3VsdCBpbiB0aGUgcmVzZXJ2ZWQgcHJvY2Vzc29yIG1lbW9yeS4KJiM0MzsJICoKJiM0MzsJICogUnVuIFJNUE9QVCBvbiBvbmUgQ1BVIGZpcnN0ICh0aGUgbGVhZGVyKSwgdGhlbiBvbiBldmVyeSBvdGhlciBwcmltYXJ5CiYjNDM7CSAqIHRocmVhZCAodGhlIGZvbGxvd2VycykuICBBIGZvbGxvd2VyIHNraXBzIHRoZSBleHBlbnNpdmUgUk1QIHNjYW4gYnkKJiM0MzsJICogcmV1c2luZyB0aGUgY2FjaGVkIHNjYW4gcmVzdWx0cyB0aGUgbGVhZGVyIHByb2R1Y2VkLgomIzQzOwkgKgomIzQzOwkgKiBtaWdyYXRlX2Rpc2FibGUoKSBwaW5zIHRoaXMgd29yayB0byB0aGUgY3VycmVudCBDUFUgc28gaXQgc3RheXMgdGhlCiYjNDM7CSAqIGxlYWRlciBmb3IgdGhlIHdob2xlIGxlYWRlciBsb29wOiB0aGlzX2NwdSByZW1haW5zIHZhbGlkIGFuZCB0aGUKJiM0MzsJICogUk1QT1BUIGluc3RydWN0aW9uIHJ1bnMgb24gaXQuCiYjNDM7CSAqLwomIzQzOwltaWdyYXRlX2Rpc2FibGUoKTsKJiM0MzsJdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiYjNDM7CiYjNDM7CWNwdW1hc2tfYW5kbm90KHJtcG9wdF9mb2xsb3dlcl9tYXNrLCBybXBvcHRfY3B1bWFzaywKJiM0MzsJCSAgICAgICB0b3BvbG9neV9zaWJsaW5nX2NwdW1hc2sodGhpc19jcHUpKTsKJiM0MzsKJiM0MzsJcm1wb3B0X3NjYW5fcmFuZ2UoTlVMTCk7CiYjNDM7CiYjNDM7CW1pZ3JhdGVfZW5hYmxlKCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZvbGxvd2Vyczogb25lIElQSSBwZXIgcmVtYWluaW5nIGNvcmUsIGVhY2ggb3B0aW1pemluZyB0aGUgd2hvbGUKJiM0MzsJICogcmFuZ2UuICBFYWNoIHJ1bnMgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLCBidXQgb25seSBpc3N1ZXMgY2FjaGUtaGl0CiYjNDM7CSAqIFJNUE9QVHMgKHRoZSBsZWFkZXIgcG9wdWxhdGVkIHRoZSBzY2FuIGNhY2hlIGFib3ZlKSwgc28gdGhlIHdpbmRvdyBpcwomIzQzOwkgKiBzaG9ydC4gIGNwdXNfcmVhZF9sb2NrKCkgaXMgaW50ZW50aW9uYWxseSBub3QgaGVsZDogQ1BVIGhvdHBsdWcgaXMKJiM0MzsJICogZGlzYWJsZWQgdGhlIGVudGlyZSB0aW1lIFNOUCBpcyBhY3RpdmUgKHNlZSBzbnBfcHJlcGFyZSgpKSwgYW5kIHRoaXMKJiM0MzsJICogd29yayBvbmx5IHJ1bnMgd2hpbGUgU05QIGlzIGFjdGl2ZSwgc28gdGhlIGZvbGxvd2VyIHNldCBzdGF5cyB2YWxpZC4KJiM0MzsJICovCiYjNDM7CW9uX2VhY2hfY3B1X21hc2socm1wb3B0X2ZvbGxvd2VyX21hc2ssIHJtcG9wdF9zY2FuX3JhbmdlLCBOVUxMLCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBEZWxheSwgaW4gbWlsbGlzZWNvbmRzLCBiZWZvcmUgdGhlIFJNUCByZS1vcHRpbWl6YXRpb24gcGFzcyBydW5zIGFmdGVyIGFuCiYjNDM7ICogU05QIGd1ZXN0IGlzIHRvcm4gZG93bi4gIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKSByZS1hcm1zIHRoZSBkZWxheWVkIHdvcmsKJiM0MzsgKiB3aXRoIG1vZF9kZWxheWVkX3dvcmsoKSBvbiBlYWNoIHRlYXJkb3duLCBzbyB0aGUgcGFzcyBmaXJlcyB0aGlzIGxvbmcgYWZ0ZXIKJiM0MzsgKiB0aGUgbGFzdCB0ZWFyZG93bi4gIFRoaXMgY29hbGVzY2VzIGEgYnVyc3Qgb2YgdGVhcmRvd25zIGludG8gYSBzaW5nbGUgc2NhbgomIzQzOyAqIGFuZCBnaXZlcyBlYWNoIGd1ZXN0JiMzOTtzIHBhZ2VzIHRpbWUgdG8gYmUgY29udmVydGVkIGJhY2sgdG8gdGhlIHNoYXJlZCwKJiM0MzsgKiBoeXBlcnZpc29yLW93bmVkIHN0YXRlIGJlZm9yZSB0aGUgc2NhbiByZS1vcHRpbWl6ZXMgdGhlaXIgMUdCIHJlZ2lvbnMuICBUaGUKJiM0MzsgKiAxMCBzZWNvbmQgdmFsdWUgaXMgYSBoZXVyaXN0aWMgdHJhZGluZyByZS1vcHRpbWl6YXRpb24gbGF0ZW5jeSBhZ2FpbnN0CiYjNDM7ICogc2Nhbm5pbmcgdG9vIGVhZ2VybHkuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBSTVBPUFRfV09SS19USU1FT1VUCSgxMCAqIE1TRUNfUEVSX1NFQykKJiM0MzsKJiM0Mzt2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCkKJiM0Mzt7CiYjNDM7CWlmICghcm1wb3B0X2NhcGFibGUoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7cm1wb3B0X3dxX211dGV4KTsKJiM0MzsKJiM0MzsJaWYgKCFybXBvcHRfd3EpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW1vZF9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCAmYW1wO3JtcG9wdF9kZWxheWVkX3dvcmssCiYjNDM7CQkJIG1zZWNzX3RvX2ppZmZpZXMoUk1QT1BUX1dPUktfVElNRU9VVCkpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9ybXBvcHRfYWxsX3BoeXNtZW0sICYjMzQ7a3ZtLWFtZCYjMzQ7KTsKJiM0MzsKJiM0Mzt2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZCkKJiM0Mzt7CiYjNDM7CXU2NCBybXBvcHRfYmFzZTsKJiM0MzsJaW50IGNwdTsKJiM0MzsKJiM0MzsJaWYgKCFybXBvcHRfY2FwYWJsZSgpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDtybXBvcHRfd3FfbXV0ZXgpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBPbiByZS1pbml0aWFsaXphdGlvbiBhZnRlciBhIGxlZ2FjeSBTTlAgc2h1dGRvd24gKFNOUF9TSFVURE9XTl9FWAomIzQzOwkgKiB3aXRoIHg4Nl9zbnBfc2h1dGRvd249MCksIHNucF9zaHV0ZG93bigpIGFuZCB0aHVzIHNucF9jbGVhbnVwX3JtcG9wdCgpCiYjNDM7CSAqIGFyZSBza2lwcGVkLCBzbyB0aGUgd29ya3F1ZXVlLCBkZWxheWVkIHdvcmssIGNwdW1hc2sgYW5kIHBlci1DUFUKJiM0MzsJICogUk1QT1BUX0JBU0UgTVNScyBhcmUgc3RpbGwgc2V0IHVwIGFuZCB2YWxpZCAoU25wRW4gc3RheWVkIHNldCBhbmQKJiM0MzsJICogQ1BVIGhvdHBsdWcgc3RheWVkIGRpc2FibGVkKS4gIFJhdGhlciB0aGFuIHJlLWRvaW5nIHRoZSBzZXR1cCwgd2hpY2gKJiM0MzsJICogd291bGQgbGVhayB0aGUgZXhpc3Rpbmcgc3RhdGUsIGp1c3QgcmUtcXVldWUgdGhlIG9wdGltaXphdGlvbiBwYXNzCiYjNDM7CSAqIHRvIHJlLW9wdGltaXplIGFueSBtZW1vcnkgdGhlIHByZXZpb3VzIFNOUCBzZXNzaW9uIGRlLW9wdGltaXplZC4KJiM0MzsJICovCiYjNDM7CWlmIChybXBvcHRfd3EpIHsKJiM0MzsJCXF1ZXVlX2RlbGF5ZWRfd29yayhybXBvcHRfd3EsICZhbXA7cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQ3JlYXRlIGFuIFJNUE9QVC1zcGVjaWZpYyB3b3JrcXVldWUgdG8gYXZvaWQgc2NoZWR1bGluZwomIzQzOwkgKiBSTVBPUFQgd29ya2l0ZW0gb24gdGhlIGdsb2JhbCBzeXN0ZW0gd29ya3F1ZXVlLgomIzQzOwkgKi8KJiM0MzsJcm1wb3B0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKCYjMzQ7cm1wb3B0X3dxJiMzNDssIFdRX1VOQk9VTkQsIDEpOwomIzQzOwlpZiAoIXJtcG9wdF93cSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIFJNUE9QVCB3b3JrcXVldWVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlJTklUX0RFTEFZRURfV09SSygmYW1wO3JtcG9wdF9kZWxheWVkX3dvcmssIHJtcG9wdF93b3JrX2hhbmRsZXIpOwomIzQzOwomIzQzOwlpZiAoIXphbGxvY19jcHVtYXNrX3ZhcigmYW1wO3JtcG9wdF9jcHVtYXNrLCBHRlBfS0VSTkVMKSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIFJNUE9QVCBjcHVtYXNrXG4mIzM0Oyk7CiYjNDM7CQlkZXN0cm95X3dvcmtxdWV1ZShybXBvcHRfd3EpOwomIzQzOwkJcm1wb3B0X3dxID0gTlVMTDsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXphbGxvY19jcHVtYXNrX3ZhcigmYW1wO3JtcG9wdF9mb2xsb3dlcl9tYXNrLCBHRlBfS0VSTkVMKSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIFJNUE9QVCBmb2xsb3dlciBjcHVtYXNrXG4mIzM0Oyk7CiYjNDM7CQlmcmVlX2NwdW1hc2tfdmFyKHJtcG9wdF9jcHVtYXNrKTsKJiM0MzsJCWRlc3Ryb3lfd29ya3F1ZXVlKHJtcG9wdF93cSk7CiYjNDM7CQlybXBvcHRfd3EgPSBOVUxMOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBSTVBPUFRfQkFTRSBNU1IgaXMgcGVyLWNvcmUsIHNvIG9ubHkgb25lIHRocmVhZCBwZXIgY29yZSBuZWVkcwomIzQzOwkgKiB0byBzZXQgdXAgdGhlIFJNUE9QVF9CQVNFIE1TUi4gIEFsbCBwcmltYXJ5IHRocmVhZHMgYXJlIG9ubGluZSwKJiM0MzsJICogb3RoZXJ3aXNlIFNOUCB3b3VsZCBub3QgaGF2ZSBiZWVuIGVuYWJsZWQuCiYjNDM7CSAqLwomIzQzOwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKJiM0MzsJCWlmICh0b3BvbG9neV9pc19wcmltYXJ5X3RocmVhZChjcHUpKQomIzQzOwkJCWNwdW1hc2tfc2V0X2NwdShjcHUsIHJtcG9wdF9jcHVtYXNrKTsKJiM0MzsKJiM0MzsJcm1wb3B0X3BhX3N0YXJ0ID0gQUxJR05fRE9XTihQRk5fUEhZUyhtaW5fbG93X3BmbiksIFNaXzFHKTsKJiM0MzsJcm1wb3B0X2Jhc2UgPSBybXBvcHRfcGFfc3RhcnQgfCBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUGVyLUNQVSBSTVBPUFQgdGFibGVzIGNvdmVyIGF0IG1vc3QgMiBUQi4gIFByb2dyYW0gZWFjaCBjb3JlJiMzOTtzCiYjNDM7CSAqIFJNUE9QVF9CQVNFIHdpdGggdGhlIHN0YXJ0IG9mIFJBTSB0byBvcHRpbWl6ZSB1cCB0byAyIFRCLgomIzQzOwkgKi8KJiM0MzsJZm9yX2VhY2hfY3B1KGNwdSwgcm1wb3B0X2NwdW1hc2spCiYjNDM7CQl3cm1zcnFfb25fY3B1KGNwdSwgTVNSX0FNRDY0X1JNUE9QVF9CQVNFLCBybXBvcHRfYmFzZSk7CiYjNDM7CiYjNDM7CXJtcG9wdF9wYV9lbmQgPSBBTElHTihQRk5fUEhZUyhtYXhfcGZuKSwgU1pfMUcpOwomIzQzOwomIzQzOwkvKiBMaW1pdCBtZW1vcnkgc2Nhbm5pbmcgdG8gMlRCIG9mIFJBTSAqLwomIzQzOwlpZiAoKHJtcG9wdF9wYV9lbmQgLSBybXBvcHRfcGFfc3RhcnQpICZndDsgU1pfMlQpIHsKJiM0MzsJCXByX2luZm8oJiMzNDtSTVBPUFQgY292ZXJhZ2UgbGltaXRlZCB0byAyVEI7IG1lbW9yeSBhYm92ZSAweCVsbHggbm90IG9wdGltaXplZFxuJiMzNDssCiYjNDM7CQkJcm1wb3B0X3BhX3N0YXJ0ICYjNDM7IFNaXzJUKTsKJiM0MzsJCXJtcG9wdF9wYV9lbmQgPSBybXBvcHRfcGFfc3RhcnQgJiM0MzsgU1pfMlQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogT25jZSBhbGwgcGVyLUNQVSBSTVBPUFQgdGFibGVzIGhhdmUgYmVlbiBjb25maWd1cmVkLCBlbmFibGUgUk1QT1BUCiYjNDM7CSAqIG9wdGltaXphdGlvbnMgb24gYWxsIHBoeXNpY2FsIG1lbW9yeS4KJiM0MzsJICovCiYjNDM7CXF1ZXVlX2RlbGF5ZWRfd29yayhybXBvcHRfd3EsICZhbXA7cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7CiYjNDM7CiYjNDM7CXByX2luZm8oJiMzNDtSTVBPUFQgb3B0aW1pemF0aW9ucyBlbmFibGVkXG4mIzM0Oyk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NldHVwX3JtcG9wdCwgJiMzNDtjY3AmIzM0Oyk7CiYjNDM7CiAvKgogICogRG8gdGhlIG5lY2Vzc2FyeSBwcmVwYXJhdGlvbnMgd2hpY2ggYXJlIHZlcmlmaWVkIGJ5IHRoZSBmaXJtd2FyZSBhcwogICogZGVzY3JpYmVkIGluIHRoZSBTTlBfSU5JVF9FWCBmaXJtd2FyZSBjb21tYW5kIGRlc2NyaXB0aW9uIGluIHRoZSBTTlAKQEAgLTU3Nyw2ICYjNDM7ODE5LDggQEAgRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2h1dGRvd24sICYjMzQ7Y2NwJiMzNDspOwogICovCiBpbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpCiB7CiYjNDM7CXU2NCB2YWw7CiYjNDM7CiAJaWYgKFdBUk5fT05fT05DRSghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSkpCiAJCXJldHVybiAtRU5PU1lTOwogCkBAIC01ODYsNiAmIzQzOzgzMCwxNSBAQCBpbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpCiAJaWYgKCFzZXR1cF9ybXB0YWJsZSgpKQogCQlyZXR1cm4gLUVOT1NZUzsKIAomIzQzOwkvKgomIzQzOwkgKiBPbiBhIGtleGVjIGJvb3QgU05QIG1heSBhbHJlYWR5IGJlIGVuYWJsZWQgKGxlZ2FjeSBmaXJtd2FyZSBsZWF2ZXMKJiM0MzsJICogU25wRW4gc2V0IGFjcm9zcyBzaHV0ZG93biksIGluIHdoaWNoIGNhc2Ugc25wX3ByZXBhcmUoKSBiYWlscyB3aXRob3V0CiYjNDM7CSAqIGRpc2FibGluZyBDUFUgaG90cGx1Zywgc28gZGlzYWJsZSBpdCBoZXJlLgomIzQzOwkgKi8KJiM0MzsJcmRtc3JxKE1TUl9BTUQ2NF9TWVNDRkcsIHZhbCk7CiYjNDM7CWlmICh2YWwgJmFtcDsgTVNSX0FNRDY0X1NZU0NGR19TTlBfRU4pCiYjNDM7CQljcHVfaG90cGx1Z19kaXNhYmxlKCk7CiYjNDM7CiAJLyoKIAkgKiBTZXR0aW5nIGNyYXNoX2tleGVjX3Bvc3Rfbm90aWZpZXJzIHRvICYjMzk7dHJ1ZSYjMzk7IHRvIGVuc3VyZSB0aGF0IFNOUCBwYW5pYwogCSAqIG5vdGlmaWVyIGlzIGludm9rZWQgdG8gZG8gU05QIElPTU1VIHNodXRkb3duIGJlZm9yZSBrZHVtcC4KQEAgLTY4MywxMyAmIzQzOzkzNiwyMSBAQCBzdGF0aWMgYm9vbCBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbyh2b2lkKQogCiBib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpCiB7Ci0JaWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU0VHTUVOVEVEX1JNUCkpCiYjNDM7CWlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFR01FTlRFRF9STVApKSB7CiAJCXJkbXNycShNU1JfQU1ENjRfUk1QX0NGRywgcm1wX2NmZyk7CiAKLQlpZiAocm1wX2NmZyAmYW1wOyBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEKQotCQlyZXR1cm4gcHJvYmVfc2VnbWVudGVkX3JtcHRhYmxlX2luZm8oKTsKLQllbHNlCi0JCXJldHVybiBwcm9iZV9jb250aWd1b3VzX3JtcHRhYmxlX2luZm8oKTsKJiM0MzsJCWlmIChybXBfY2ZnICZhbXA7IE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRUQpCiYjNDM7CQkJcmV0dXJuIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU2VnbWVudGVkIFJNUCBpcyBlaXRoZXIgbm90IHN1cHBvcnRlZCBvbiB0aGUgcGxhdGZvcm0gb3IgaXMKJiM0MzsJICogZGlzYWJsZWQgYnkgdGhlIGZpcm13YXJlLiAgUk1QT1BUIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dAomIzQzOwkgKiBzZWdtZW50ZWQgUk1QLgomIzQzOwkgKi8KJiM0MzsJc2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9STVBPUFQpOwomIzQzOwomIzQzOwlyZXR1cm4gcHJvYmVfY29udGlndW91c19ybXB0YWJsZV9pbmZvKCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jIGIvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYwppbmRleCBjYTQ3M2NhMTk4YjgxLi5kYTEyZGRmMWY0MTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMKQEAgLTE1MTAsNiAmIzQzOzE1MTAsOCBAQCBzdGF0aWMgaW50IF9fc2V2X3NucF9pbml0X2xvY2tlZChpbnQgKmVycm9yLCB1bnNpZ25lZCBpbnQgbWF4X3NucF9hc2lkKQogCiAJc2V2X2VzX3Rtcl9zaXplID0gU05QX1RNUl9TSVpFOwogCiYjNDM7CXNucF9zZXR1cF9ybXBvcHQoKTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjE1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQU1EIFJNUE9QVCBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQgYWRkcyBzdXBwb3J0IGZvciB0aGUgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbi4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBzZXZlcmFsIGNvcmUgYXJlYXM6IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBoZWFkZXJzLCB0aGUga2VybmVsJiMzOTtzIENQVSBmZWF0dXJlcywgTVNScywgYW5kIFNFVi1yZWxhdGVkIGNvZGUsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoYXQgUk1QT1BUIGlzIHRpZWQgdG8gU0VWLVNOUC4gVGhlIGZpbGVzIG1vZGlmaWVkIGluY2x1ZGUgYGNwdWZlYXR1cmVzLmhgLCBgbXNyLWluZGV4LmhgLCBgc2V2LmhgLCBhcyB3ZWxsIGFzIHNldmVyYWwgQyBmaWxlcyBkZWFsaW5nIHdpdGggc2NhdHRlcmVkIG1lbW9yeSwgS1ZNLCBhbmQgdGhlIENDUCAoY3J5cHRvIGNvLXByb2Nlc3NvcikgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgZnVuY3Rpb25zIGxpa2UgYHNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKWAgYW5kIGBzbnBfc2V0dXBfcm1wb3B0KClgIGFuZCByZWxpZXMgb24gdGhlIGBYODZfRkVBVFVSRV9STVBPUFRgIGFuZCBgTVNSX0FNRDY0X1JNUE9QVF9CQVNFYCBkZWZpbml0aW9ucy4gQWxsIHRoZSBwaWVjZXMgZml0LCBSTVBPUFQgbG9va3MgdG8gYmUgYSBrZXkgZWxlbWVudCBvZiBTRVYtU05QLgoKVGhlIGJpZyBxdWVzdGlvbiBpbiBteSBtaW5kIGlzIHJlYWNoYWJpbGl0eSwgcGFydGljdWxhcmx5IHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBDb25zaWRlcmluZyB0aGlzIGlzIGFuIFNFVi1TTlAgZmVhdHVyZSwgaXQgdXN1YWxseSByZXF1aXJlcyBkZWRpY2F0ZWQgQU1EIGhhcmR3YXJlIHRvIGJlIHRydWx5IGVmZmVjdGl2ZS4gS1ZNIGNhbiBlbXVsYXRlIG9yIHBhc3MgdGhyb3VnaCBzb21lIGZlYXR1cmVzLCBidXQgdGhlIHJlYWwgcG93ZXIgb2YgU0VWLVNOUCBpcyBvZnRlbiBsb3N0IGluIGVtdWxhdGlvbi4gU3l6a2FsbGVyIGlzIGEga2V5IHRlc3RpbmcgdG9vbCwgYW5kIHRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgcnVuIG9uIEdDRSBpcyBpbnRyaWd1aW5nLiBIb3dldmVyLCBkb2VzIEdDRSBvZmZlciBBTUQgU0VWLVNOUCBpbnN0YW5jZXM/IEFoLCB5ZXMsIEdvb2dsZSBDbG91ZCBkb2VzIGhhdmUgQ29uZmlkZW50aWFsIFZNcyBiYXNlZCBvbiBTRVYgYW5kIFNFVi1TTlAuIEhvd2V2ZXIsIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IHN5emthbGxlciB0eXBpY2FsbHkgcnVucyBvbiBzdGFuZGFyZCBpbnN0YW5jZXMsIHdoaWNoIGFyZSBlMi1zdGFuZGFyZCBvciBuMi1zdGFuZGFyZC4gSXQmIzM5O3Mgbm90IHVzdWFsbHkgc3BlY2lmaWNhbGx5IGNvbmZpZ3VyZWQgdG8gdGFyZ2V0IENvbmZpZGVudGlhbCBWTXMuCgpTbywgZG9lcyBzeXprYWxsZXIgYWN0dWFsbHkgKnJlYWNoKiB0aGlzIGNvZGU/IEV2ZW4gaWYgdGhlIGhvc3QgZG9lc24mIzM5O3QgaGF2ZSBuYXRpdmUgU0VWLVNOUCwgaWYgdGhlIGhvc3Qga2VybmVsICppdHNlbGYqIHN1cHBvcnRzIHRoaXMgZnVuY3Rpb25hbGl0eSwgc3l6a2FsbGVyIGNvdWxkIHN0aWxsIGJlIHRlc3RpbmcgaXQuIFN5emthbGxlciB0ZXN0cyB0aGUgaG9zdCBrZXJuZWwsIHdoaWNoIGlzIGEga2V5IGVsZW1lbnQuIEJ1dCB0aGF0IGJyaW5ncyBtZSB0byBhbm90aGVyIHBvaW50LCB0aGUgaG9zdCBrZXJuZWwgcnVubmluZyBvbiBHQ0UgbWlnaHQgbm90IGV2ZW4gKmhhdmUqIFNFVi1TTlAgZW5hYmxlZC4KClRoZXJlZm9yZSwgaXMgdGhpcyBjb2RlIGV2ZW4gcmVhY2hhYmxlPyBJIHNob3VsZCBpbnZlc3RpZ2F0ZSB3aGV0aGVyIGBYODZfRkVBVFVSRV9STVBPUFRgIGNhbiBiZSAmIzM0O2Zha2VkJiMzNDsgb3Igd2hldGhlciB0aGVyZSBhcmUgc3BlY2lmaWMgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhlIGNvZGUmIzM5O3MgZXhlY3V0aW9uLiBMb29raW5nIGF0IHRoZSBjb2RlIGluIGBhcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY2AgYW5kIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCwgSSYjMzk7bSBsb29raW5nIGZvciBlbnRyeSBwb2ludHMuIE9rYXksIGhlcmUmIzM5O3MgYSBjcnVjaWFsIHNuaXBwZXQgZnJvbSBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2A6CgpgYGBjCnZvaWQgc2V2X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKQp7Ci4uLgoJCWlmIChzbnBfZGVjb21taXNzaW9uX2NvbnRleHQoa3ZtKSkKCQkJcmV0dXJuOwoKCQlzbnBfcm1wb3B0X2FsbF9waHlzbWVtKCk7Ci4uLgpgYGAKCkFoLCBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIHRoZSBkZXN0cnVjdGlvbiBvZiBhIFNFVi1TTlAgVk0uIEludGVyZXN0aW5nLiBDYW4gc3l6a2FsbGVyICpjcmVhdGUqIGEgU0VWLVNOUCBWTT8gVGhhdCYjMzk7cyB0aGUgcmVhbCB0ZXN0LiBJdCB3b3VsZCBuZWVkIGAvZGV2L3NldmAgYW5kIEtWTSBTRVYgc3VwcG9ydC4gTm93LCBJIHNob3VsZCBsb29rIGludG8gd2hldGhlciBgQ09ORklHX0tWTV9BTURfU0VWYCBpcyBhY3R1YWxseSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFuZCBzZWFyY2ggZm9yIHJlbGF0ZWQgb3B0aW9ucywgcGFydGljdWxhcmx5IGBDT05GSUdfS1ZNX0FNRGAgYW5kIGBDT05GSUdfQ1JZUFRPX0RFVl9TUF9DQ1BgLCB3aGljaCBzZWVtcyByZWxhdGVkIHRvIHRoZSBDQ1AgY29tcG9uZW50LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGxpa2VseSB0aGlzIGNvZGUgaXMgdG8gYmUgdHJpZ2dlcmVkIGluIHN5emthbGxlciYjMzk7cyBjdXJyZW50IGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQU1EJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTM0PWNvbmZpZyBLVk1fSU5URUxfVERYXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODM4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIHRoZSBTdGF0ZSBvZiBgQ09ORklHX0tWTV9BTURfU0VWYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhlIHN0YXRlIG9mIGBDT05GSUdfS1ZNX0FNRF9TRVZgLiBHaXZlbiB0aGUgY29udGV4dCwgdGhpcyBsaWtlbHkgbWVhbnMgSSYjMzk7bSB0cm91Ymxlc2hvb3Rpbmcgb3IgaW52ZXN0aWdhdGluZyBzb21lIGJlaGF2aW9yIHJlbGF0ZWQgdG8gQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgd2l0aGluIGEgS1ZNIGVudmlyb25tZW50LiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgYSBjb25maWd1cmF0aW9uIGZpbGUsIGEgYnVpbGQgc3lzdGVtLCBvciBwZXJoYXBzIHNvbWUga2VybmVsIG91dHB1dCBvciBsb2dzLiBUaGUgc3BlY2lmaWNzIGRlcGVuZCBvbiB3aGF0IEkmIzM5O20gdHJ5aW5nIHRvIGFjaGlldmUuCgpJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hldGhlciBTRVYgc3VwcG9ydCBpcyBlbmFibGVkLiBJcyBpdCBzZXQgdG8gJiMzNDt5JiMzNDsgKGJ1aWx0LWluKSwgJiMzNDttJiMzNDsgKG1vZHVsZSksIG9yIGRpc2FibGVkPyBUaGUgYW5zd2VyIHdpbGwgaGVhdmlseSBpbmZsdWVuY2UgbXkgbmV4dCBzdGVwcy4gSWYgaXQmIzM5O3MgZGlzYWJsZWQsIEkga25vdyB0aGF0JiMzOTtzIHRoZSByb290IGNhdXNlIGFuZCBJJiMzOTtsbCBuZWVkIHRvIHJlY29uZmlndXJlIGFuZCByZWJ1aWxkLCBvciByZS1ldmFsdWF0ZSB0aGUgcmVsZXZhbnQgbW9kdWxlLiBBIG1vZHVsZSBzZXR1cCBtaWdodCBiZSBva2F5LCBidXQgSSYjMzk7bGwgc3RpbGwgaGF2ZSB0byBjaGVjayBpZiBpdCYjMzk7cyBsb2FkaW5nIGNvcnJlY3RseS4KCklmIGl0ICppcyogZW5hYmxlZCwgdGhlbiBJJiMzOTtsbCBuZWVkIHRvIGRyaWxsIGRvd24gZGVlcGVyIHRvIHVuZGVyc3RhbmQgd2hhdCBpc3N1ZXMgYXJlIGFwcGVhcmluZy4gSSYjMzk7bGwgbmVlZCB0byBnbyB0byB0aGUgaGFyZHdhcmUsIHRoZSBCSU9TLCBLVk0gc2V0dXAsIGFuZCBrZXJuZWwgdmVyc2lvbnMuIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXA7IEkgY2FuJiMzOTt0IHByb2NlZWQgd2l0aG91dCBjb25maXJtaW5nIHRoaXMgaW5pdGlhbCBjb25maWd1cmF0aW9uIGVsZW1lbnQuIFRoZSBvdXRjb21lIG9mIHRoaXMgY2hlY2sgd2lsbCBkZWZpbmUgdGhlIG5leHQgcGhhc2Ugb2YgdGhpcyBkZWJ1Z2dpbmcgb3IgaW52ZXN0aWdhdGl2ZSBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQU1EX1NFViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE0Nj1jb25maWcgS1ZNX0FNRFxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzE0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgQ09ORklHX0NSWVBUT19ERVZfU1BfQ0NQYCBDb25maWd1cmF0aW9uIE9wdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjcm9zcy1yZWZlcmVuY2UgdGhlIGBDT05GSUdfQ1JZUFRPX0RFVl9TUF9DQ1BgIG9wdGlvbi4gVGhpcyBsaWtlbHkgaW5kaWNhdGVzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUgYWNjZWxlcmF0aW9uIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBTYW1zdW5nIENyeXB0byBQcm9jZXNzb3IgKENDUCkg4oCTIGdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbi4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiB3aGF0JiMzOTtzIHRoZSBicm9hZGVyIHN5c3RlbSBjb250ZXh0PyBJcyB0aGlzIGZvciBhIHNwZWNpZmljIGtlcm5lbCB2ZXJzaW9uPyBXaGF0JiMzOTtzIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlPyBUaGF0IHdpbGwgaW5mb3JtIGhvdyBkZWVwbHkgSSBuZWVkIHRvIGdvIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBmb3IgZGVwZW5kZW5jaWVzLiBBcmUgdGhlcmUgYW55IHByZXJlcXVpc2l0ZXMgaW4gdGVybXMgb2Ygb3RoZXIgY3J5cHRvIGRldmljZSBkcml2ZXJzIG9yIGtleSBtYW5hZ2VtZW50IG1vZHVsZXM/IEFuZCwgb2YgY291cnNlLCB0aGUgZXZlci1wcmVzZW50IHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zOiB3aGF0IHZ1bG5lcmFiaWxpdGllcyBoYXMgdGhpcyBtb2R1bGUgZmFjZWQgaW4gdGhlIHBhc3QsIGFuZCB3aGF0IGhhcmRlbmluZyB0ZWNobmlxdWVzIGFyZSBhcHBsaWVkPyBJIHdhbnQgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgbWV0cmljcyB0b28uIElmIHRoaXMgaGFyZHdhcmUgYWNjZWxlcmF0b3IgaXNuJiMzOTt0IHByb3Blcmx5IGNvbmZpZ3VyZWQgb3IgdXRpbGl6ZWQsIGl0IGNhbiBoYXZlIHNlcmlvdXMgcGVyZm9ybWFuY2UgZHJhd2JhY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDUllQVE9fREVWX1NQX0NDUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnPTI9Y29uZmlnIENSWVBUT19ERVZfQ0NQX0REXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctOS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnOjEwOmNvbmZpZyBDUllQVE9fREVWX1NQX0NDUFxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMTEtXHRib29sIFwmIzM0O0NyeXB0b2dyYXBoaWMgQ29wcm9jZXNzb3IgZGV2aWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2ODUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQgc2VlbXMgdGhleSYjMzk7dmUgaW50cm9kdWNlZCBgc25wX3JtcG9wdF9hbGxfcGh5c21lbSgpYCBhbmQgYHNucF9zZXR1cF9ybXBvcHQoKWAg4oCTIGludGVyZXN0aW5nLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNsZWFybHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgU0VWIGNvbnRleHQsIGFuZCB0aGV5JiMzOTtyZSBsb2NhdGVkIGluIGBhcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0FscmlnaHQsIGxldCYjMzk7cyBtYWtlIHN1cmUgdGhpcyBgc2V2LmNgIGZpbGUgaXMgYWN0dWFsbHkgZ2V0dGluZyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UuJiMzNDsgSXQmIzM5O3MgY3JpdGljYWwgdG8gdmVyaWZ5IHRoYXQgdGhlIFNFVi1zcGVjaWZpYyBjb2RlIGlzIHByZXNlbnQgYW5kIGFjdGl2ZSwgb3RoZXJ3aXNlLCB0aGVzZSBuZXcgZnVuY3Rpb25zIGFyZSBqdXN0IGRlYWQgd2VpZ2h0IGFuZCBwb3RlbnRpYWwgcG9pbnRzIG9mIGNvbmZ1c2lvbi4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGNvbXBvbmVudCBpcyBjb21waWxlZCBhcyBwYXJ0IG9mIHRoZSBzeXN0ZW0mIzM5O3MgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V2XFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L3ZpcnQvc3ZtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L3ZpcnQvc3ZtL01ha2VmaWxlLTItXG5hcmNoL3g4Ni92aXJ0L3N2bS9NYWtlZmlsZTozOm9iai0kKENPTkZJR19LVk1fQU1EX1NFVikgJiM0Mzs9IHNldi5vXG5hcmNoL3g4Ni92aXJ0L3N2bS9NYWtlZmlsZS00LW9iai0kKENPTkZJR19DUFVfU1VQX0FNRCkgJiM0Mzs9IGNtZGxpbmUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA1NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU0VWIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBLVk0vU0VWIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBDT05GSUdfS1ZNX0FNRF9TRVZgIGlzIHRoZSBrZXkuIEJ1dCBob2xkIG9uLCB0aGUgYnVpbGQgc3lzdGVtIHNlZW1zIHRvIGNvbmRpdGlvbmFsbHkgY29tcGlsZSBgYXJjaC94ODYvdmlydC9zdm0vc2V2LmNgIGJhc2VkIG9uIHRoaXMgb3B0aW9uLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4KCk5vdywgYSBiaXQgbW9yZSBkaWdnaW5nIHJldmVhbHMgdGhhdCBgQ09ORklHX0tWTV9BTURfU0VWYCBpbiB0dXJuIGhpbmdlcyBvbiBgS1ZNX0FNRGAuIFRoaXMgaW1wbGllcyBhIGhpZXJhcmNoaWNhbCBkZXBlbmRlbmN5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiBgS1ZNX0FNRF9TRVZgJiMzOTtzIGRlcGVuZGVuY2llcyB0byBlbnN1cmUgSSYjMzk7dmUgYWNjb3VudGVkIGZvciBldmVyeSByZWxldmFudCBjb21wb25lbnQuIFRpbWUgdG8gY2hlY2sgdGhvc2UgZGVwZW5kZW5jaWVzIHRob3JvdWdobHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQU1EX1NFViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE0Nj1jb25maWcgS1ZNX0FNRFxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ0OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gS1ZNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIEtWTSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgb25lcyBkZWFsaW5nIHdpdGggeDg2IGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGFyY2gveDg2L2t2bS9LY29uZmlnYCDigJMgYXJvdW5kIGxpbmUgMTU2LCBpZiBtZW1vcnkgc2VydmVzLCB0aGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbnMuIE15IGludGVudGlvbiBpcyBsaWtlbHkgdG8gZmlndXJlIG91dCB3aGljaCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCwgb3IgaG93IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFyZSBoYW5kbGVkLiBNaWdodCBiZSBsb29raW5nIGZvciBvcHRpb25zIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBDUFUgZmVhdHVyZSwgb3IgcGVyaGFwcyBmaWd1cmluZyBvdXQgaG93IHNvbWUgbmV3IGZlYXR1cmUgaGFzIGJlZW4gaW50ZWdyYXRlZCBpbnRvIHRoZSBLVk0gY29uZmlndXJhdGlvbi4gTmVlZCB0byBnZXQgYSBncmFzcCBvbiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0cyBhdCBwbGF5IHRoZXJlLCBzbyBJIGNhbiBtb3JlIGZ1bGx5IGdyYXNwIHRoZSBpbXBhY3Qgb2Ygc3BlY2lmaWMgY29uZmlndXJhdGlvbiBjaG9pY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTA6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIEFNRCBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggdGhlIEFNRC1WXG4gMTUxOlx0XHQgIChTVk0pIGV4dGVuc2lvbnMuXG4gMTUyOlx0XG4gMTUzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDE1NDpcdFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0tYW1kLlxuIDE1NTpcdFxuIDE1NjpcdGNvbmZpZyBLVk1fQU1EX1NFVlxuIDE1NzpcdFx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4gMTU4Olx0XHRkZWZhdWx0IHlcbiAxNTk6XHRcdGRlcGVuZHMgb24gS1ZNX0FNRCBcdTAwMjZcdTAwMjYgWDg2XzY0XG4gMTYwOlx0XHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfUFNQIFx1MDAyNlx1MDAyNiAhKEtWTV9BTUQ9eSBcdTAwMjZcdTAwMjYgQ1JZUFRPX0RFVl9DQ1BfREQ9bSlcbiAxNjE6XHRcdHNlbGVjdCBBUkNIX0hBU19DQ19QTEFURk9STVxuIDE2MjpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4gMTYzOlx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BSRVBBUkVcbiAxNjQ6XHRcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuIDE2NTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuIDE2NjpcdFx0aGVscFxuIDE2NzpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgZW5jcnlwdGVkIFZNcyB3aGljaCB1c2UgU2VjdXJlXG4gMTY4Olx0XHQgIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSwgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiB3aXRoXG4gMTY5Olx0XHQgIEVuY3J5cHRlZCBTdGF0ZSAoU0VWLUVTKSwgYW5kIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gd2l0aFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA2OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBteSBtZW50YWwgY2hlY2tsaXN0IGJlZ2luczoKCioqRXhhbWluaW5nIHRoZSBEZXBlbmRlbmN5IFRyZWUgZm9yIEtWTV9BTURfU0VWKioKClJpZ2h0LCBzbyBgS1ZNX0FNRF9TRVZgIHJlbGllcyBvbiBgS1ZNX0FNRGAsIGBYODZfNjRgLCBhbmQgYENSWVBUT19ERVZfU1BfUFNQYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgYnV0IEkgYWx3YXlzIGRpZyBkZWVwZXIuIFNpbmNlIGBDUllQVE9fREVWX1NQX1BTUGAgaXMgb25lIG9mIHRoZSBkZXBlbmRlbmNpZXMsIGxldCYjMzk7cyBnbyBhaGVhZCBhbmQgZHJpbGwgZG93biBpbnRvICppdHMqIGRlcGVuZGVuY2llcywgYW5kIG1ha2Ugc3VyZSBldmVyeXRoaW5nIHRoZXJlIGlzIHNoaXBzaGFwZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENSWVBUT19ERVZfU1BfUFNQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWc9MjM9Y29uZmlnIENSWVBUT19ERVZfQ0NQX0NSWVBUT1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTM3LVxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWc6Mzg6Y29uZmlnIENSWVBUT19ERVZfU1BfUFNQXG5kcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7UGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApIGRldmljZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM3OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIHRoZSBDQ1AgQ3J5cHRvIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIENDUCBjcnlwdG8gZHJpdmVyLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBtb3N0IHJlbGV2YW50IHBsYWNlIHRvIHN0YXJ0IGlzIGxpa2VseSB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoZSBkcml2ZXImIzM5O3MgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGZvY3VzIG9uIGFyb3VuZCBsaW5lIDM4LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBtYWluIGZlYXR1cmUgZmxhZ3MsIG1heWJlIHNvbWUgZGVwZW5kZW5jeSBjaGVja3MsIGFuZCBwb3RlbnRpYWxseSBzb21lIGRlZmF1bHQgc2V0dGluZ3Mgb3IgaGVscCB0ZXh0IHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiBob3cgdGhpcyBkcml2ZXIgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhbmQgY29uZmlndXJlZC4gVW5kZXJzdGFuZGluZyB0aGUga2V5IG9wdGlvbnMsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGFueSBjb25zdHJhaW50cyB3aWxsIGJlIGNyaXRpY2FsIGZvciBjb21wcmVoZW5kaW5nIGhvdyB0byBpbnRlZ3JhdGUgb3IgbW9kaWZ5IHRoaXMgZHJpdmVyIHdpdGhpbiBhIGxhcmdlciBzeXN0ZW0uIEkmIzM5O20gbG9va2luZyBmb3IgdGhpbmdzIGxpa2Ugd2hldGhlciBpdCYjMzk7cyBtb2R1bGFyLCBpZiBpdCYjMzk7cyBnb3QgYW55IGhhcmR3YXJlIGRlcGVuZGVuY2llcywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBrZXJuZWwgY3J5cHRvIEFQSS4gSG9wZWZ1bGx5IHRoaXMgd2lsbCBiZSBlbm91Z2ggdG8gZ2V0IG15IHVuZGVyc3RhbmRpbmcgc3RhcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzA6XHRcdHNlbGVjdCBDUllQVE9fQVVUSEVOQ1xuICAzMTpcdFx0c2VsZWN0IENSWVBUT19SU0FcbiAgMzI6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FFU1xuICAzMzpcdFx0aGVscFxuICAzNDpcdFx0ICBTdXBwb3J0IGZvciB1c2luZyB0aGUgY3J5cHRvZ3JhcGhpYyBBUEkgd2l0aCB0aGUgQU1EIENyeXB0b2dyYXBoaWNcbiAgMzU6XHRcdCAgQ29wcm9jZXNzb3IuIFRoaXMgbW9kdWxlIHN1cHBvcnRzIG9mZmxvYWQgb2YgU0hBIGFuZCBBRVMgYWxnb3JpdGhtcy5cbiAgMzY6XHRcdCAgSWYgeW91IGNob29zZSAmIzM5O00mIzM5OyBoZXJlLCB0aGlzIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjY3BfY3J5cHRvLlxuICAzNzpcdFxuICAzODpcdGNvbmZpZyBDUllQVE9fREVWX1NQX1BTUFxuICAzOTpcdFx0Ym9vbCBcJiMzNDtQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCkgZGV2aWNlXCYjMzQ7XG4gIDQwOlx0XHRkZWZhdWx0IHlcbiAgNDE6XHRcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9DQ1BfREQgXHUwMDI2XHUwMDI2IFg4Nl82NCBcdTAwMjZcdTAwMjYgQU1EX0lPTU1VXG4gIDQyOlx0XHRzZWxlY3QgUENJX1RTTSBpZiBQQ0lcbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCBQcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBBTUQgUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApLlxuICA0NTpcdFx0IFRoZSBQU1AgaXMgYSBkZWRpY2F0ZWQgcHJvY2Vzc29yIHRoYXQgcHJvdmlkZXMgc3VwcG9ydCBmb3Iga2V5XG4gIDQ2Olx0XHQgbWFuYWdlbWVudCBjb21tYW5kcyBpbiBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIG1vZGUsXG4gIDQ3Olx0XHQgYWxvbmcgd2l0aCBzb2Z0d2FyZS1iYXNlZCBUcnVzdGVkIEV4ZWN1dGlvbiBFbnZpcm9ubWVudCAoVEVFKSB0b1xuICA0ODpcdFx0IGVuYWJsZSB0aGlyZC1wYXJ0eSB0cnVzdGVkIGFwcGxpY2F0aW9ucy5cbiAgNDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NDgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZXBlbmRlbmN5IEFuYWx5c2lzIGZvciBDcnlwdG9ncmFwaGljIERldmljZSBTdXBwb3J0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgQ1JZUFRPX0RFVl9TUF9QU1BgIGFuZCBpdCYjMzk7cyBmbGFnZ2VkIGFzIGRlcGVuZGluZyBvbiBhIGZldyBvdGhlciBjb21wb25lbnRzLiBGaXJzdCB1cCwgSSBzZWUgdGhhdCBpdCYjMzk7cyByZWx5aW5nIG9uIGBDUllQVE9fREVWX0NDUF9ERGAsIGBYODZfNjRgLCBhbmQgYEFNRF9JT01NVWAuIE1ha2VzIHNlbnNlLiBHaXZlbiB0aGUgUFNQIGxpa2VseSBoYW5kbGVzIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9ucywgdGhlIG5lZWQgZm9yIGEgc3BlY2lmaWMgQ0NQIChjcnlwdG8gY28tcHJvY2Vzc29yKSBkZXZpY2UgZHJpdmVyIGxpa2UgYENSWVBUT19ERVZfQ0NQX0REYCwgYW5kIHRoZSBoYXJkd2FyZSByZXF1aXJlbWVudHMgZm9yIEFNRC1zcGVjaWZpYyBJT01NVSBzdXBwb3J0LCBwbHVzIG5lZWRpbmcgYFg4Nl82NGAgYXJjaGl0ZWN0dXJlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZGV2aWNlIGRyaXZlci4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIHNwZWNpZmljcyBvZiBgQ1JZUFRPX0RFVl9DQ1BfRERgIGFuZCBpdHMgaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIENSWVBUT19ERVZfQ0NQX0REXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtTZWN1cmUgUHJvY2Vzc29yIGRldmljZSBkcml2ZXJcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQ1BVX1NVUF9BTUQgfHwgQVJNNjRcbiAgIDU6XHRcdGRlZmF1bHQgbVxuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBQcm92aWRlcyBBTUQgU2VjdXJlIFByb2Nlc3NvciBkZXZpY2UgZHJpdmVyLlxuICAgODpcdFx0ICBJZiB5b3UgY2hvb3NlICYjMzk7TSYjMzk7IGhlcmUsIHRoaXMgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNjcC5cbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgQ1JZUFRPX0RFVl9TUF9DQ1BcbiAgMTE6XHRcdGJvb2wgXCYjMzQ7Q3J5cHRvZ3JhcGhpYyBDb3Byb2Nlc3NvciBkZXZpY2VcJiMzNDtcbiAgMTI6XHRcdGRlZmF1bHQgeVxuICAxMzpcdFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX0NDUF9ERCBcdTAwMjZcdTAwMjYgRE1BREVWSUNFU1xuICAxNDpcdFx0c2VsZWN0IEhXX1JBTkRPTVxuICAxNTpcdFx0c2VsZWN0IERNQV9FTkdJTkVcbiAgMTY6XHRcdHNlbGVjdCBDUllQVE9fU0hBMVxuICAxNzpcdFx0c2VsZWN0IENSWVBUT19TSEEyNTZcbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgUHJvdmlkZXMgdGhlIHN1cHBvcnQgZm9yIEFNRCBDcnlwdG9ncmFwaGljIENvcHJvY2Vzc29yIChDQ1ApIGRldmljZVxuICAyMDpcdFx0ICB3aGljaCBjYW4gYmUgdXNlZCB0byBvZmZsb2FkIGVuY3J5cHRpb24gb3BlcmF0aW9ucyBzdWNoIGFzIFNIQSwgQUVTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDg4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUk1QT1BUIGFuZCBTRVYtU05QIEltcGxlbWVudGF0aW9uIGZvciBUZXN0aW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGVuc3VyaW5nIHRoZSByaWdodCBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2U6IGBLVk1fQU1EYCwgYEtWTV9BTURfU0VWYCwgYENSWVBUT19ERVZfQ0NQX0REYCwgYENSWVBUT19ERVZfU1BfUFNQYCwgYW5kIGBBTURfSU9NTVVgLiBOb3csIHRoaW5raW5nIGFib3V0IFN5emthbGxlciwgaXQgY3JlYXRlcyBWTXMgZm9yIEtWTSB0ZXN0aW5nLiBUaGF0JiMzOTtzIGtleS4gVGhlIHNwZWNpZmljIGZ1bmN0aW9uIEkgbmVlZCB0byB0ZXN0IGlzIGBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKClgLiBUbyBleGVjdXRlIHRoZSBjb2RlIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCBJIGhhdmUgdG8gZW5zdXJlIHRoYXQgYHJtcG9wdF9jYXBhYmxlKClgIHJldHVybnMgdHJ1ZS4KCmBybXBvcHRfY2FwYWJsZSgpYCBoaW5nZXMgb24gdHdvIGNvbmRpdGlvbnM6IHRoZSBgWDg2X0ZFQVRVUkVfUk1QT1BUYCBDUFUgZmVhdHVyZSBiZWluZyBlbmFibGVkIGFuZCBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIGJlaW5nIHByZXNlbnQuIFRoZSBmaXJzdCwgYFg4Nl9GRUFUVVJFX1JNUE9QVGAsIGlzIHR5cGljYWxseSBkaXNjb3ZlcmVkIHZpYSBDUFVJRC4gTm93LCB0aGUgU3l6a2FsbGVyIHRlc3RpbmcgZW52aXJvbm1lbnQuLi4gaXQgcnVucyBpbnNpZGUgYSBWTS4gVGhpcyBtZWFucyB0aGF0IHRoZSBob3N0IGtlcm5lbCBmb3IgdGhlIFN5emthbGxlciBpbnN0YW5jZSAqaXMqIHRoZSBndWVzdCBrZXJuZWwgb2YgdGhlIG91dGVyIFZNIChsaWtlbHkgR0NFLCBpbiB0aGlzIGNhc2UpLiBDYW4gU3l6a2FsbGVyIGZha2UgQ1BVSUQgcmVzdWx0cyB3aXRoaW4gdGhlIGhvc3Qga2VybmVsPyBObywgaXQgY2FuJiMzOTt0LiBTbywgdGhlIG91dGVyIFZNIChHQ0UpICptdXN0KiBleHBvc2UgYm90aCBgWDg2X0ZFQVRVUkVfUk1QT1BUYCBhbmQgU0VWLVNOUCBzdXBwb3J0IHRvIHRoZSBpbm5lciBWTSAodGhlIFN5emthbGxlciBob3N0KS4KClRoZSBiaWcgcXVlc3Rpb24gaXMsIGRvZXMgR0NFICphY3R1YWxseSogZXhwb3NlIHRoZXNlIGZlYXR1cmVzIHRvIG5lc3RlZCBWTXM/IE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBuZXN0ZWQgU0VWLVNOUCBpc24mIzM5O3QgZ2VuZXJhbGx5IHN1cHBvcnRlZCBvciBhdmFpbGFibGUgaW4gc3RhbmRhcmQgR0NFIGluc3RhbmNlcy4gVGhpcyBpcyBhIHByb2JsZW0uIElmIGBybXBvcHRfY2FwYWJsZSgpYCByZXR1cm5zIGZhbHNlLCB0aGVuIHRoZSBmdW5jdGlvbiBgc25wX3JtcG9wdF9hbGxfcGh5c21lbSgpYCB3aWxsIHJldHVybiBlYXJseS4KCkxldCYjMzk7cyBsb29rIGZvciBhbHRlcm5hdGl2ZSBjb2RlIHBhdGhzLiBUaGUgZnVuY3Rpb24gYHNucF9zZXR1cF9ybXBvcHQoKWAgaXMgY2FsbGVkIGZyb20gYF9fc2V2X3NucF9pbml0X2xvY2tlZCgpYC4gVGhhdCBmdW5jdGlvbiBhbHNvIHJldHVybnMgZWFybHkgaWYgYHJtcG9wdF9jYXBhYmxlKClgIHJldHVybnMgZmFsc2UuIFNpbWlsYXJseSwgYHNucF9zaHV0ZG93bigpYCBjYWxscyBgc25wX2NsZWFudXBfcm1wb3B0KClgIHdoaWNoIHdpbGwgcmV0dXJuIGVhcmx5IGlmIGBzbnBfc2V0dXBfcm1wb3B0KClgIGhhc24mIzM5O3QgYmVlbiBzdWNjZXNzZnVsLiBTbywgdGhlIHBvdGVudGlhbCBjb2RlIHBhdGhzIGFyZSBsaW1pdGVkLgoKVGhlcmUgaXMgYWxzbyB0aGUgYHNucF9wcmVwYXJlKClgIGZ1bmN0aW9uLCBjYWxsZWQgZHVyaW5nIFNOUCBpbml0aWFsaXphdGlvbi4gSGVyZSBpdCBoYXMgYSBjaGVjayB0aGF0IGFsbCBDUFVzIG9ubGluZSBhbmQgcHJlc2VudCBtdXN0IG1hdGNoLiBJZiBTRVYtU05QIGlzIG5vdCBzdXBwb3J0ZWQsIGBzbnBfcHJlcGFyZSgpYCBtaWdodCBub3QgYmUgY2FsbGVkLCBvciBpdCBtaWdodCBmYWlsIHF1aWNrbHkuIEkgbmVlZCB0byB0cmFjZSBiYWNrIHdoZXJlIGBzbnBfcHJlcGFyZSgpYCBpcyBjYWxsZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhlY3V0aW9uIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NucF9wcmVwYXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTEzNTU9c3RhdGljIGludCBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoaW50ICplcnJvciwgdW5zaWduZWQgaW50IG1heF9zbnBfYXNpZClcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTEzNzctXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjEzNzg6XHRyYyA9IHNucF9wcmVwYXJlKCk7XG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTEzNzktXHRpZiAocmMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTk0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgX19zZXZfc25wX2luaXRfbG9ja2VkKClgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBgX19zZXZfc25wX2luaXRfbG9ja2VkKClgIGZ1bmN0aW9uLiBJIGtub3cgdGhpcyBpcyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBTRVYtU05QIGluaXRpYWxpemF0aW9uLCBhbmQgaXQmIzM5O3MgcHJvYmFibHkgd2hlcmUgYSBsb3Qgb2YgdGhlIGluaXRpYWwgc2V0dXAgdGFrZXMgcGxhY2UuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgbG9ja2luZyBtZWNoYW5pc21zIGFyb3VuZCBoZXJlIC0gYXJlIHdlIGRlYWxpbmcgd2l0aCBhIG11dGV4LCBhIHNwaW5sb2NrLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gVW5kZXJzdGFuZGluZyB0aGUgY29uY3VycmVuY3kgYXNwZWN0IGlzIHBhcmFtb3VudCB0byB0cmFja2luZyBkb3duIGFueSBwb3RlbnRpYWwgaXNzdWVzLCBvciBhcHByZWNpYXRpbmcgdGhlIGRlc2lnbiBjaG9pY2VzIG1hZGUuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIGFjY2VzcyB0byB0aGUgc2hhcmVkIHN0YXRlLCBhbmQgd2hhdCBraW5kIG9mIGNvbnRlbnRpb24gdGhleSBhbnRpY2lwYXRlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgb3ZlcmFsbCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gSXMgdGhpcyBwYXJ0IG9mIHRoZSBlYXJseSBib290IHByb2Nlc3MsIG9yIGRvZXMgaXQgZ2V0IGNhbGxlZCBsYXRlcj8gV2hhdCYjMzk7cyB0aGUgY29udGV4dCBpbiB3aGljaCB0aGlzIGxvY2sgaXMgaGVsZCBhbmQgcmVsZWFzZWQ/IEtub3dpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBnaXZlIG1lIHZhbHVhYmxlIGNsdWVzIGFib3V0IHRoZSBmdW5jdGlvbiYjMzk7cyByZXNwb25zaWJpbGl0eSBhbmQgaXRzIGltcGFjdCBvbiB0aGUgc3lzdGVtLiBJIGFsc28gbmVlZCB0byBtYWtlIGEgbWVudGFsIG5vdGUgb2YgaG93IGVycm9yIGhhbmRsaW5nIGlzIGRvbmUgaGVyZSwgYW5kIGhvdyB0aGV5IGhhbmRsZSBmYWlsdXJlLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIGtpbmQgb2YgZ3JhY2VmdWwgZXhpdCwgc28gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGJhY2sgcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM1MDpcdFx0fVxuMTM1MTpcdFxuMTM1MjpcdFx0cmV0dXJuIDA7XG4xMzUzOlx0fVxuMTM1NDpcdFxuMTM1NTpcdHN0YXRpYyBpbnQgX19zZXZfc25wX2luaXRfbG9ja2VkKGludCAqZXJyb3IsIHVuc2lnbmVkIGludCBtYXhfc25wX2FzaWQpXG4xMzU2Olx0e1xuMTM1NzpcdFx0c3RydWN0IHNldl9kYXRhX3JhbmdlX2xpc3QgKnNucF9yYW5nZV9saXN0IF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuMTM1ODpcdFx0c3RydWN0IHBzcF9kZXZpY2UgKnBzcCA9IHBzcF9tYXN0ZXI7XG4xMzU5Olx0XHRzdHJ1Y3Qgc2V2X2RhdGFfc25wX2luaXRfZXggZGF0YSA9IHt9O1xuMTM2MDpcdFx0c3RydWN0IHNldl9kZXZpY2UgKnNldjtcbjEzNjE6XHRcdHZvaWQgKmFyZyA9IFx1MDAyNmRhdGE7XG4xMzYyOlx0XHRpbnQgY21kLCByYyA9IDA7XG4xMzYzOlx0XG4xMzY0Olx0XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG4xMzY1Olx0XHRcdHJldHVybiAtRU5PREVWO1xuMTM2NjpcdFxuMTM2NzpcdFx0c2V2ID0gcHNwLVx1MDAzZXNldl9kYXRhO1xuMTM2ODpcdFxuMTM2OTpcdFx0aWYgKHNldi1cdTAwM2VzbnBfaW5pdGlhbGl6ZWQpXG4xMzcwOlx0XHRcdHJldHVybiAwO1xuMTM3MTpcdFxuMTM3MjpcdFx0aWYgKCFzZXZfdmVyc2lvbl9ncmVhdGVyX29yX2VxdWFsKFNOUF9NSU5fQVBJX01BSk9SLCBTTlBfTUlOX0FQSV9NSU5PUikpIHtcbjEzNzM6XHRcdFx0ZGV2X2RiZyhzZXYtXHUwMDNlZGV2LCBcJiMzNDtTRVYtU05QIHN1cHBvcnQgcmVxdWlyZXMgZmlybXdhcmUgdmVyc2lvbiBcdTAwM2U9ICVkOiVkXFxuXCYjMzQ7LFxuMTM3NDpcdFx0XHRcdFNOUF9NSU5fQVBJX01BSk9SLCBTTlBfTUlOX0FQSV9NSU5PUik7XG4xMzc1Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjEzNzY6XHRcdH1cbjEzNzc6XHRcbjEzNzg6XHRcdHJjID0gc25wX3ByZXBhcmUoKTtcbjEzNzk6XHRcdGlmIChyYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3NzgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU0VWLVNOUCBQbGF0Zm9ybSBDaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGUgZmlyc3QgdGhpbmcgaXQgZG9lcyBpcyBjaGVjayBpZiBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAuIFJpZ2h0IGF3YXksIGl0IHJldHVybnMgYC1FTk9ERVZgIGlmIHRoZSBwbGF0Zm9ybSAqZG9lc24mIzM5O3QqIGhhdmUgU0VWLVNOUC4gVGhhdCBtZWFucywgbG9naWNhbGx5LCB0aGUgcmVzdCBvZiB0aGlzIGNvZGUgYmxvY2sgaXMgY29tcGxldGVseSBieXBhc3NlZCB1bmxlc3MgdGhlIGhvc3QgZW52aXJvbm1lbnQgaXMgYWN0dWFsbHkgc2V0IHVwIGZvciBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIHdpdGggU2VjdXJlIE5lc3RlZCBQYWdpbmcuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgY3JlYXRlcyBhIHJvYWRibG9jayBmb3Igc3l6a2FsbGVyLiBEb2VzIHN5emthbGxlciBldmVuIHJ1biBvbiBhIHBsYXRmb3JtIHRoYXQgb2ZmZXJzIFNFVi1TTlA/CgpNeSBleHBlcmllbmNlIHdpdGggc3l6a2FsbGVyIGlzIHRoYXQgaXQmIzM5O3Mgb2Z0ZW4gcnVuIGluIEdDRSBWTXMuIEkga25vdyBmb3IgYSBmYWN0IHRoYXQgd2hpbGUgR0NFICpjYW4qIGJlIHRoZSAqaG9zdCogZm9yIFNFVi1TTlAgVk1zLCBpdCBkb2VzbiYjMzk7dCBnZW5lcmFsbHkgZXhwb3NlIFNFVi1TTlAgY2FwYWJpbGl0aWVzICp3aXRoaW4qIHRoZSBndWVzdCBWTXMgdGhlbXNlbHZlcy4gQSBHQ0UgVk0gY2FuICpiZSogYW4gU0VWLVNOUCBWTSwgYnV0IHlvdSBnZW5lcmFsbHkgY2Fubm90IHJ1biAqbmVzdGVkKiBTRVYtU05QIHdpdGhpbiBpdC4gVGhpcyByYWlzZXMgYSByZWQgZmxhZy4KCldhaXQgYSBzZWNvbmQuIExldCBtZSByZS1ldmFsdWF0ZS4uLiBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIGlzbiYjMzk7dCBqdXN0IGFib3V0IHRoZSAqY2FwYWJpbGl0aWVzKiBvZiB0aGUgQ1BVLCBidXQgd2hldGhlciBpdCYjMzk7cyAqZW5hYmxlZCogaW4gdGhlIEJJT1MuIFRoaXMgbWVhbnMgaXQgaXMgdGhlICpob3N0KiB0aGF0IGV4cG9zZXMgdGhlIGZlYXR1cmUgdG8gdGhlIGd1ZXN0LiBTbyB0aGUgbG9naWMgaGVyZSBpc24mIzM5O3QganVzdCBhIENQVSBmZWF0dXJlIGNoZWNrLiBJdCBpcyBsaWtlbHkgZW5zdXJpbmcgdGhhdCB0aGUgcGxhdGZvcm0mIzM5O3MgQklPUyBoYXMgdGhpcyBmZWF0dXJlIGV4cG9zZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlIFZNIGNhcGFiaWxpdGllcy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBpcyBiZWluZyBzZXQuIEl0IGNvdWxkIGJlIHRyaWdnZXJlZCBieSBoYXJkd2FyZSwgQklPUywgb3IgYm90aC4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhhdCBjaGVjayBhbmQgc2VlIHdoYXQgdGhlIGNvbmRpdGlvbnMgYXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDQ19BVFRSX0hPU1RfU0VWX1NOUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9jb2NvL2NvcmUuYz03MD1zdGF0aWMgYm9vbCBub2luc3RyIGFtZF9jY19wbGF0Zm9ybV9oYXMoZW51bSBjY19hdHRyIGF0dHIpXG4tLVxuYXJjaC94ODYvY29jby9jb3JlLmMtMTAzLVxuYXJjaC94ODYvY29jby9jb3JlLmM6MTA0Olx0Y2FzZSBDQ19BVFRSX0hPU1RfU0VWX1NOUDpcbmFyY2gveDg2L2NvY28vY29yZS5jLTEwNS1cdFx0cmV0dXJuIGNjX2ZsYWdzLmhvc3Rfc2V2X3NucDtcbi0tXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYz0xNzA9c3RhdGljIHZvaWQgYW1kX2NjX3BsYXRmb3JtX2NsZWFyKGVudW0gY2NfYXR0ciBhdHRyKVxuLS1cbmFyY2gveDg2L2NvY28vY29yZS5jLTE3Mi1cdHN3aXRjaCAoYXR0cikge1xuYXJjaC94ODYvY29jby9jb3JlLmM6MTczOlx0Y2FzZSBDQ19BVFRSX0hPU1RfU0VWX1NOUDpcbmFyY2gveDg2L2NvY28vY29yZS5jLTE3NC1cdFx0Y2NfZmxhZ3MuaG9zdF9zZXZfc25wID0gMDtcbi0tXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYz0xOTI9c3RhdGljIHZvaWQgYW1kX2NjX3BsYXRmb3JtX3NldChlbnVtIGNjX2F0dHIgYXR0cilcbi0tXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xOTQtXHRzd2l0Y2ggKGF0dHIpIHtcbmFyY2gveDg2L2NvY28vY29yZS5jOjE5NTpcdGNhc2UgQ0NfQVRUUl9IT1NUX1NFVl9TTlA6XG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xOTYtXHRcdGNjX2ZsYWdzLmhvc3Rfc2V2X3NucCA9IDE7XG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYz0zNTU9c3RhdGljIHZvaWQgYnNwX2RldGVybWluZV9zbnAoc3RydWN0IGNwdWluZm9feDg2ICpjKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMtMzcyLVx0XHQgICAgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKSkge1xuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYzozNzM6XHRcdFx0Y2NfcGxhdGZvcm1fc2V0KENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMtMzc0LVx0XHR9IGVsc2Uge1xuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYy0zNzUtXHRcdFx0c2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9TRVZfU05QKTtcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM6Mzc2Olx0XHRcdGNjX3BsYXRmb3JtX2NsZWFyKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMtMzc3LVx0XHR9XG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYz0xMDQ9c3RhdGljIGlubGluZSB2b2lkIGs4X2NoZWNrX3N5c2NmZ19kcmFtX21vZF9lbih2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMtMTExLVxuYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYzoxMTI6XHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmFyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMtMTEzLVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9MTIzNT1zdGF0aWMgYm9vbCBfX2luaXQgYXZpY193YW50X2F2aWNfZW5hYmxlZCh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEyNTgtXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMjU5Olx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMjYwLVx0ICAgICFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSFZfSU5VU0VfV1JfQUxMT1dFRCkpIHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTMwNTY9dm9pZCBfX2luaXQgc2V2X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMTYwLVx0c2V2X2VzX3N1cHBvcnRlZCA9IHRydWU7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMxNjE6XHRzZXZfc25wX3N1cHBvcnRlZCA9IHNldl9zbnBfZW5hYmxlZCBcdTAwMjZcdTAwMjYgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzE2Mi1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ5MDc9c3RydWN0IHBhZ2UgKnNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShpbnQgbm9kZSwgZ2ZwX3QgZ2ZwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDkxMS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDkxMjpcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDkxMy1cdFx0cmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgZ2ZwIHwgX19HRlBfWkVSTywgMCk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz01MTMwPXZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MTMzLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MTM0Olx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MTM1LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHQuYz0xMDI9dm9pZCBfX2luaXQgbWVtX2VuY3J5cHRfc2V0dXBfYXJjaCh2b2lkKVxuLS1cbmFyY2gveDg2L21tL21lbV9lbmNyeXB0LmMtMTEwLVx0ICovXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdC5jOjExMTpcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHQuYy0xMTItXHRcdHNucF9maXh1cF9lODIwX3RhYmxlcygpO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL2NtZGxpbmUuYz0xOT1zdGF0aWMgaW50IF9faW5pdCBpbml0X3Nldl9jb25maWcoY2hhciAqc3RyKVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL2NtZGxpbmUuYy0zMS1cdFx0XHRcdHNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfU0VWX1NOUCk7XG5hcmNoL3g4Ni92aXJ0L3N2bS9jbWRsaW5lLmM6MzI6XHRcdFx0XHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XG5hcmNoL3g4Ni92aXJ0L3N2bS9jbWRsaW5lLmMtMzMtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xNDg9c3RhdGljIHZvaWQgbWZkX3JlY29uZmlndXJlKHZvaWQgKmFyZylcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTE0OS17XG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxNTA6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xNTEtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xNTk9c3RhdGljIHZvaWQgc25wX2VuYWJsZSh2b2lkICphcmcpXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTYyLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MTYzOlx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTY0LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MjYxPXN0YXRpYyB2b2lkIGNsZWFyX3JtcCh2b2lkKVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTI2NS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjI2NjpcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTI2Ny1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTYyMj1zdGF0aWMgYm9vbCBybXBvcHRfY2FwYWJsZSh2b2lkKVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTYyNC1cdHJldHVybiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUE9QVCkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo2MjU6XHQgICAgICAgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTYyNi19XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9ODIwPWludCBfX2luaXQgc25wX3JtcHRhYmxlX2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy04MjMtXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo4MjQ6XHRpZiAoV0FSTl9PTl9PTkNFKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKSlcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTgyNS1cdFx0cmV0dXJuIC1FTk9TWVM7XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MTAyOT1zdGF0aWMgaW50IF9fc25wX2xvb2t1cF9ybXBlbnRyeSh1NjQgcGZuLCBzdHJ1Y3Qgcm1wZW50cnkgKmUsIGludCAqbGV2ZWwpXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTAzMy1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjEwMzQ6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMDM1LVx0XHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xMTU1PWludCBwc21hc2godTY0IHBmbilcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMTU5LVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MTE2MDpcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTExNjEtXHRcdHJldHVybiAtRU5PREVWO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTEyNjQ9c3RhdGljIGludCBybXB1cGRhdGUodTY0IHBmbiwgc3RydWN0IHJtcF9zdGF0ZSAqc3RhdGUpXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTI2OC1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjEyNjk6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMjcwLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xMzU3PXZvaWQga2R1bXBfc2V2X2NhbGxiYWNrKHZvaWQpXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTM2Mi1cdCAqL1xuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MTM2MzpcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTM2NC1cdFx0d2JpbnZkKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDU3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAgRmxhZyoqCgpSaWdodCwgc28gYENDX0FUVFJfSE9TVF9TRVZfU05QYCDigJMgdGhhdCYjMzk7cyB0aGUga2V5IGZsYWcuIEkgcmVtZW1iZXIgc2VlaW5nIHRoYXQgdXNlZCB3aXRoIFNOUCwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIG1lIGJlY2F1c2Ugb2YgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCYjMzk7cyBiZWluZyBzZXQgaW4gYGJzcF9kZXRlcm1pbmVfc25wKClgIHdpdGhpbiBgYXJjaC94ODYva2VybmVsL2NwdS9hbWQuY2AuIE5hdHVyYWxseSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byBgYnNwX2RldGVybWluZV9zbnAoKWAgaXRzZWxmLiBOZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSAqd2hlbiogYW5kICp3aHkqIHRoaXMgZmxhZyBpcyBnZXR0aW5nIHNldC4gV2hhdCBjb25kaXRpb25zIGFyZSBiZWluZyBjaGVja2VkPyBXaGF0IGhhcmR3YXJlIGNhcGFiaWxpdGllcyBpcyBpdCBsb29raW5nIGZvcj8gTmVlZCB0byBmaW5kIHRoaXMgZnVuY3Rpb24sIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNTU6XHRzdGF0aWMgdm9pZCBic3BfZGV0ZXJtaW5lX3NucChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXG4gMzU2Olx0e1xuIDM1NzpcdCNpZmRlZiBDT05GSUdfQVJDSF9IQVNfQ0NfUExBVEZPUk1cbiAzNTg6XHRcdGNjX3ZlbmRvciA9IENDX1ZFTkRPUl9BTUQ7XG4gMzU5Olx0XG4gMzYwOlx0XHRpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9TRVZfU05QKSkge1xuIDM2MTpcdFx0XHQvKlxuIDM2MjpcdFx0XHQgKiBSTVAgdGFibGUgZW50cnkgZm9ybWF0IGlzIG5vdCBhcmNoaXRlY3R1cmFsIGFuZCBpcyBkZWZpbmVkIGJ5IHRoZVxuIDM2MzpcdFx0XHQgKiBwZXItcHJvY2Vzc29yIFBQUi4gUmVzdHJpY3QgU05QIHN1cHBvcnQgb24gdGhlIGtub3duIENQVSBtb2RlbHNcbiAzNjQ6XHRcdFx0ICogZm9yIHdoaWNoIHRoZSBSTVAgdGFibGUgZW50cnkgZm9ybWF0IGlzIGN1cnJlbnRseSBkZWZpbmVkIG9yIGZvclxuIDM2NTpcdFx0XHQgKiBwcm9jZXNzb3JzIHdoaWNoIHN1cHBvcnQgdGhlIGFyY2hpdGVjdHVyYWxseSBkZWZpbmVkIFJNUFJFQURcbiAzNjY6XHRcdFx0ICogaW5zdHJ1Y3Rpb24uXG4gMzY3Olx0XHRcdCAqL1xuIDM2ODpcdFx0XHRpZiAoIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUikgXHUwMDI2XHUwMDI2XG4gMzY5Olx0XHRcdCAgICAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9aRU4zKSB8fFxuIDM3MDpcdFx0XHQgICAgIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfWkVONCkgfHxcbiAzNzE6XHRcdFx0ICAgICBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUFJFQUQpKSBcdTAwMjZcdTAwMjZcbiAzNzI6XHRcdFx0ICAgIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKCkpIHtcbiAzNzM6XHRcdFx0XHRjY19wbGF0Zm9ybV9zZXQoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuIDM3NDpcdFx0XHR9IGVsc2Uge1xuIDM3NTpcdFx0XHRcdHNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfU0VWX1NOUCk7XG4gMzc2Olx0XHRcdFx0Y2NfcGxhdGZvcm1fY2xlYXIoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuIDM3NzpcdFx0XHR9XG4gMzc4Olx0XHR9XG4gMzc5Olx0I2VuZGlmXG4gMzgwOlx0fVxuIDM4MTpcdFxuIDM4MjpcdCNkZWZpbmUgWkVOX01PREVMX1NURVBfVUNPREUoZmFtLCBtb2RlbCwgc3RlcCwgdWNvZGUpIFxcXG4gMzgzOlx0XHRYODZfTUFUQ0hfVkZNX1NURVBTKFZGTV9NQUtFKFg4Nl9WRU5ET1JfQU1ELCBmYW0sIG1vZGVsKSwgXFxcbiAzODQ6XHRcdFx0XHQgICAgc3RlcCwgc3RlcCwgdWNvZGUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODY4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSHlwZXJ2aXNvciBEZXBlbmRlbmN5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0JiMzOTtzIGltbWVkaWF0ZWx5IGp1bXBpbmcgb3V0IGF0IG1lIHRoYXQgaXQgaGluZ2VzIG9uIGAhY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9IWVBFUlZJU09SKWAuIEJlY2F1c2UsIGFuZCB0aGlzIGlzIGNydWNpYWwsIFN5emthbGxlciBydW5zIGluIGEgVk0sIHNwZWNpZmljYWxseSBHQ0UsIHdoaWNoICpkb2VzKiBzZXQgYFg4Nl9GRUFUVVJFX0hZUEVSVklTT1JgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgaWYgdGhhdCYjMzk7cyB0aGUgY2FzZSwgdGhlbiBgYnNwX2RldGVybWluZV9zbnAoKWAgd2lsbCBjb21lIGFsb25nIGFuZCAqY2xlYXIqIGBYODZfRkVBVFVSRV9TRVZfU05QYCBhbmQgYENDX0FUVFJfSE9TVF9TRVZfU05QYC4KCkJ1dCBob2xkIG9uLCBsZXQgbWUgdHJhY2UgdGhhdCBsb2dpYyBhZ2FpbuKApiBJZiB0aGF0IGluaXRpYWwgY2hlY2sgaXMgKmZhbHNlKiAoaS5lLiwgd2UgKmRvKiBoYXZlIGEgaHlwZXJ2aXNvciksIGl0IGRyb3BzIGludG8gdGhlIGBlbHNlYCBibG9jaywgYW5kICp0aGF0KiBjbGVhcnMgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBhbnl3YXkhIFNvIGVzc2VudGlhbGx5LCAqbm8gbWF0dGVyIHdoYXQqLCBpZiB3ZSYjMzk7cmUgdW5kZXIgYSBoeXBlcnZpc29yIOKAkyB3aGljaCB3ZSBhYnNvbHV0ZWx5IGFyZSBpbiBTeXprYWxsZXIg4oCTIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAgaXMgYWx3YXlzIGdvaW5nIHRvIGJlIGZhbHNlLgoKVGhlcmVmb3JlLCBzaW5jZSBTeXprYWxsZXIgcnVucyB1bmRlciBHQ0UsIHdoaWNoIGlzIGEgaHlwZXJ2aXNvciwgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBpcyBBTFdBWVMgZmFsc2UuIFdoaWNoIG1lYW5zIHRoYXQgYHJtcG9wdF9jYXBhYmxlKClgIHdpbGwgaW52YXJpYWJseSByZXR1cm4gZmFsc2UuIFdoaWNoIG1lYW5zLCBhcyBhIGRpcmVjdCBjb25zZXF1ZW5jZSwgdGhhdCBib3RoIGBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKClgIGFuZCBgc25wX3NldHVwX3JtcG9wdCgpYCB3aWxsIGltbWVkaWF0ZWx5IHJldHVybiwgZWZmZWN0aXZlbHkgZG9pbmcgbm90aGluZy4KCkVzc2VudGlhbGx5LCB0aGlzIGVudGlyZSBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgaW4gYW55IHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBJdCYjMzk7cyBhIGRlYWQgZW5kLCBhdCBsZWFzdCBhcyBpdCBjdXJyZW50bHkgc3RhbmRzLiBJIG5lZWQgdG8gbWFrZSBhIG5vdGUgb2YgdGhpcy4KCkJ1dCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGVudGlyZSBjb2RlIGJhc2UgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoZXJlJiMzOTtzIG5vIG90aGVyIHdheSBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIGNhbiBiZSBzZXQuIEp1c3QgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2NfcGxhdGZvcm1fc2V0XFwoQ0NfQVRUUl9IT1NUX1NFVl9TTlBcXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva2VybmVsL2NwdS9hbWQuYz0zNTU9c3RhdGljIHZvaWQgYnNwX2RldGVybWluZV9zbnAoc3RydWN0IGNwdWluZm9feDg2ICpjKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMtMzcyLVx0XHQgICAgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKSkge1xuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYzozNzM6XHRcdFx0Y2NfcGxhdGZvcm1fc2V0KENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMtMzc0LVx0XHR9IGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDc2NgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDU5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIFRoaXMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0JiMzOTtzICYjMzQ7d29ydGggZnV6emluZyYjMzQ7LiBUaGUgY3J1Y2lhbCBwb2ludCBoaW5nZXMgb24gd2hldGhlciB0aGUgY29kZSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuICBUaGUgaW5pdGlhbCBhbmFseXNpcyBwb2ludGVkIHRvIGBic3BfZGV0ZXJtaW5lX3NucCgpYC4gSXQgZXhwbGljaXRseSBjaGVja3MgYCFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IpYCwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgKmltcG9zc2libGUqIHRvIGhpdCB0aGF0IGNvZGUgcGF0aCBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBpZiB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiB0aGVzZSBlbnZpcm9ubWVudHMsIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLgoKU2luY2UgYGJzcF9kZXRlcm1pbmVfc25wKClgIGNvbnRhaW5zIHRoZSByZWxldmFudCBjaGVjaywgaXQgYXBwZWFycyB0aGlzIHBhcnQgb2YgdGhlIHBhdGNoIGlzIG5vdCB3b3J0aCBmdXp6aW5nLiBJJiMzOTttIHNhdGlzZmllZCB0aGF0IHRoaXMgaXMgY29ycmVjdCwgYnV0IGxldCBtZSBkbyBhIG1vcmUgdGhvcm91Z2ggcmV2aWV3IG9mICphbGwqIGNoYW5nZXMgdG8gYmUgY2VydGFpbi4KClRoZSBwYXRjaCB0b3VjaGVzIGEgYnVuY2ggb2YgZmlsZXM6IGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oYCwgYGFyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oYCwgYGFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oYCwgYGFyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNgLCBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AsIGFuZCBgYXJjaC94ODYvdmlydC9zdm0vc2V2LmNgLiBUaGUgY2hhbmdlcyBpbnZvbHZlIGFkZGluZyBgWDg2X0ZFQVRVUkVfUk1QT1BUYCwgbmV3IE1TUnMsIGZ1bmN0aW9uIHByb3RvdHlwZXMsIGNhbGxzIHRvIGBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKClgLCBhbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGEgZmV3IGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBgc25wX3JtcG9wdF9hbGxfcGh5c21lbSgpYCwgYHNucF9zZXR1cF9ybXBvcHQoKWAsIGBzbnBfY2xlYW51cF9ybXBvcHQoKWAsIGBybXBvcHRfY2FwYWJsZSgpYCwgYHJtcG9wdCgpYCwgYHJtcG9wdF9zY2FuX3JhbmdlKClgLCBhbmQgYHJtcG9wdF93b3JrX2hhbmRsZXIoKWAuIEl0IGFsc28gbW9kaWZpZXMgYHNucF9wcmVwYXJlKClgLCBgc25wX3NodXRkb3duKClgLCBgc25wX3JtcHRhYmxlX2luaXQoKWAsIGFuZCBgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKWAuCgpNeSBndXQgc2F5cyBtb3N0IG9mIHRoZXNlIG5ldyBmdW5jdGlvbnMgaW4gYHZpcnQvc3ZtL3Nldi5jYCBsaWtlbHkgZGVwZW5kIG9uIHRoZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gTGV0IG1lIGRvdWJsZS1jaGVjay4gSSBzaG91bGQgc3BlY2lmaWNhbGx5IGludmVzdGlnYXRlIGBzbnBfcHJlcGFyZSgpYCwgYHNucF9zaHV0ZG93bigpYCwgYHNucF9ybXB0YWJsZV9pbml0KClgLCBhbmQgYHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKClgLgoKT2theSwgYHNucF9wcmVwYXJlKClgIGlzIGNhbGxlZCBmcm9tIGBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoKWAuIGBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoKWAgaGFzIGEgY2hlY2sgZm9yIGBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApYCBhbmQgcmV0dXJucyBgLUVOT0RFVmAgaWYgdGhhdCBjaGVjayBmYWlscy4gIFRoaXMgc3VnZ2VzdHMgdGhhdCBgc25wX3ByZXBhcmUoKWAgKm1pZ2h0KiBiZSByZWFjaGFibGUgZXZlbiBpbiBhIHZpcnR1YWxpemVkIGNvbnRleHQsIGJ1dCBvbmx5IGlmIHRoZSBob3N0IHN1cHBvcnRzIHRoZSByZWxldmFudCBTRVYtU05QIGZlYXR1cmVzLCB3aGljaCBpcyBxdWl0ZSBzcGVjaWZpYy4gVGhpcyBjb3VsZCBzdGlsbCBtZWFuIHRoZSBjb2RlIHBhdGggaXNuJiMzOTt0IGVhc3kgdG8gdHJpZ2dlciBpbiB0aGUgdXN1YWwgUUVNVS9HQ0Ugc2NlbmFyaW9zLCBhbmQgbWlnaHQganVzdGlmeSBgV29ydGhGdXp6aW5nPWZhbHNlYC4gTGV0JiMzOTtzIGNvbmZpcm0gd2l0aCBgc25wX3NodXRkb3duKClgLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgX19zZXZfc25wX3NodXRkb3duX2xvY2tlZCgpYC4gVGltZSB0byBjaGVjayB0aGF0IGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3Nldl9zbnBfc2h1dGRvd25fbG9ja2VkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTE5NjE9c3RhdGljIGludCBzZXZfdXBkYXRlX2Zpcm13YXJlKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIwMTUtXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjIwMTY6c3RhdGljIGludCBfX3Nldl9zbnBfc2h1dGRvd25fbG9ja2VkKGludCAqZXJyb3IsIGJvb2wgcGFuaWMpXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIwMTcte1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjA5OC1cdC8qXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjIwOTk6XHQgKiBfX3Nldl9zbnBfc2h1dGRvd25fbG9ja2VkKCkgZGVhZGxvY2tzIHdoZW4gaXQgdHJpZXMgdG8gdW5yZWdpc3RlclxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMTAwLVx0ICogaXRzZWxmIGR1cmluZyBwYW5pYyBhcyB0aGUgcGFuaWMgbm90aWZpZXIgaXMgY2FsbGVkIHdpdGggUkNVIHJlYWRcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTI3MzA9c3RhdGljIHZvaWQgX19zZXZfZmlybXdhcmVfc2h1dGRvd24oc3RydWN0IHNldl9kZXZpY2UgKnNldiwgYm9vbCBwYW5pYylcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTI3NjEtXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjI3NjI6XHRfX3Nldl9zbnBfc2h1dGRvd25fbG9ja2VkKFx1MDAyNmVycm9yLCBwYW5pYyk7XG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTI3NjMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQzMQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBfX3Nldl9zbnBfc2h1dGRvd25fbG9ja2VkKClgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYF9fc2V2X3NucF9zaHV0ZG93bl9sb2NrZWQoKWAuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgaW4gdGhlIFNFVi1TTlAgc2h1dGRvd24gc2VxdWVuY2UuIFRoZSBuYW1lIGFsb25lIHNjcmVhbXMgJiMzNDtjcml0aWNhbCBzZWN0aW9uJiMzNDsg4oCTIGxvY2tlZCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgcHJvdGVjdGVkIGFjY2VzcyB0byBzb21lIHNoYXJlZCByZXNvdXJjZS4gSSYjMzk7bSBpbW1lZGlhdGVseSB3b25kZXJpbmc6IHdoYXQgZGF0YSBpcyBiZWluZyBndWFyZGVkIGhlcmU/IElzIGl0IHJlbGF0ZWQgdG8gdGhlIGd1ZXN0JiMzOTtzIHN0YXRlLCB0aGUgc2VjcmV0cywgdGhlIHZDUFUgY29udGV4dCwgb3IgcGVyaGFwcyB0aGUgb3ZlcmFsbCBwbGF0Zm9ybSBjb25maWd1cmF0aW9uPyBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQmIzM5O3MgcHJvYmFibHkgcHJldHR5IGxvdy1sZXZlbC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpdHMgY2FsbGVycyBhbmQgY2FsbGVlcyB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBzY29wZSBhbmQgY3JpdGljYWwgc2VjdGlvbiBpdCBwcm90ZWN0cy4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgbG9ja2luZyBtZWNoYW5pc20gdXNlcyBhIHNwaW5sb2NrLCBhIG11dGV4IG9yIHNvbWV0aGluZyBlbHNlOyB0aGF0JiMzOTtsbCBpbmZsdWVuY2UgaG93IEkgdGhpbmsgYWJvdXQgcG90ZW50aWFsIGNvbnRlbnRpb24gYW5kIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSSBzdXNwZWN0IHRoaXMgZnVuY3Rpb24gd291bGQgYmUgY2FsbGVkIHdoZW4gdGhlIHBsYXRmb3JtIG5lZWRzIHRvIHNhZmVseSBzaHV0IGRvd24gYW4gU05QIGd1ZXN0IChvciB0aGUgd2hvbGUgaG9zdCkuIEkgd29uZGVyLCBpcyB0aGVyZSBhbnkgcG9zc2liaWxpdHkgb2YgZGVhZGxvY2tzIG9yIGxpdmVsb2NrcyB0byBsb29rIG91dCBmb3I/IFRoaXMgcm91dGluZSBpcyBkZWZpbml0ZWx5IGEgcG9pbnQgb2YgZm9jdXMgZm9yIGFueSBzaHV0ZG93bi1yZWxhdGVkIGRlYnVnZ2luZyBvciBwZXJmb3JtYW5jZSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAxNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDE2Olx0c3RhdGljIGludCBfX3Nldl9zbnBfc2h1dGRvd25fbG9ja2VkKGludCAqZXJyb3IsIGJvb2wgcGFuaWMpXG4yMDE3Olx0e1xuMjAxODpcdFx0c3RydWN0IHBzcF9kZXZpY2UgKnBzcCA9IHBzcF9tYXN0ZXI7XG4yMDE5Olx0XHRzdHJ1Y3Qgc2V2X2RldmljZSAqc2V2O1xuMjAyMDpcdFx0c3RydWN0IHNldl9kYXRhX3NucF9zaHV0ZG93bl9leCBkYXRhO1xuMjAyMTpcdFx0aW50IHJldDtcbjIwMjI6XHRcbjIwMjM6XHRcdGlmICghcHNwIHx8ICFwc3AtXHUwMDNlc2V2X2RhdGEpXG4yMDI0Olx0XHRcdHJldHVybiAwO1xuMjAyNTpcdFxuMjAyNjpcdFx0c2V2ID0gcHNwLVx1MDAzZXNldl9kYXRhO1xuMjAyNzpcdFxuMjAyODpcdFx0aWYgKCFzZXYtXHUwMDNlc25wX2luaXRpYWxpemVkKVxuMjAyOTpcdFx0XHRyZXR1cm4gMDtcbjIwMzA6XHRcbjIwMzE6XHRcdG1lbXNldChcdTAwMjZkYXRhLCAwLCBzaXplb2YoZGF0YSkpO1xuMjAzMjpcdFx0ZGF0YS5sZW4gPSBzaXplb2YoZGF0YSk7XG4yMDMzOlx0XHRkYXRhLmlvbW11X3NucF9zaHV0ZG93biA9IDE7XG4yMDM0Olx0XHRpZiAoc2V2LVx1MDAzZXNucF9mZWF0X2luZm9fMC5lY3ggXHUwMDI2IFNOUF9YODZfU0hVVERPV05fU1VQUE9SVEVEKVxuMjAzNTpcdFx0XHRkYXRhLng4Nl9zbnBfc2h1dGRvd24gPSAxO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzA2MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTRVYtU05QIEluaXRpYWxpemF0aW9uIGFuZCBTaHV0ZG93bioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGxvZ2ljYWxseS4gVGhlIGNvZGUgSSYjMzk7bSBsb29raW5nIGF0IGNoZWNrcyBgc2V2LSZndDtzbnBfaW5pdGlhbGl6ZWRgLiBOYXR1cmFsbHksIEkgaW1tZWRpYXRlbHkgdGhpbmssIHdoZXJlIGlzIHRoYXQgZmxhZyBzZXQ/IEl0JiMzOTtzIHNldCB3aXRoaW4gYF9fc2V2X3NucF9pbml0X2xvY2tlZCgpYC4gQW5kIHRoYXQgZnVuY3Rpb24gaXRzZWxmIHJlcXVpcmVzIHRoZSBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIGF0dHJpYnV0ZS4gU28sIGlmIHdlIGRvbiYjMzk7dCBoYXZlIHRoYXQgYXR0cmlidXRlLCB0aGUgaW5pdGlhbGl6YXRpb24gcGF0aCBpcyBuZXZlciB0YWtlbi4KClRoZXJlZm9yZSwgc2luY2UgYHNucF9pbml0aWFsaXplZGAgaXMgb25seSBzZXQgaW4gdGhlIGluaXQgZnVuY3Rpb24sIHRoZSBjb25kaXRpb25hbCBndWFyZCBlbnN1cmVzIHRoYXQgdGhlIGBzbnBfc2h1dGRvd24oKWAgZnVuY3Rpb24gaXMgYWxzbyB1bnJlYWNoYWJsZSBpbiB0aGF0IHNjZW5hcmlvLiBNYWtlcyBwZXJmZWN0IHNlbnNlLgoKTm93LCBhIHJlbGF0ZWQgcXVlc3Rpb24gcG9wcyBpbnRvIG15IGhlYWQuIFdoYXQgYWJvdXQgYHNucF9ybXB0YWJsZV9pbml0KClgPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIGFsbCBvZiB0aGlzLiBJdCYjMzk7cyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaW4gdGhlIHByb2Nlc3MgdG8gY29uc2lkZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NucF9ybXB0YWJsZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oPTY1MD1ib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjUxOmludCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY1Mi1pbnQgc25wX2xvb2t1cF9ybXBlbnRyeSh1NjQgcGZuLCBib29sICphc3NpZ25lZCwgaW50ICpsZXZlbCk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg9NjY5PXN0YXRpYyBpbmxpbmUgYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjcwOnN0YXRpYyBpbmxpbmUgaW50IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpIHsgcmV0dXJuIC1FTk9TWVM7IH1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY3MS1zdGF0aWMgaW5saW5lIGludCBzbnBfbG9va3VwX3JtcGVudHJ5KHU2NCBwZm4sIGJvb2wgKmFzc2lnbmVkLCBpbnQgKmxldmVsKSB7IHJldHVybiAtRU5PREVWOyB9XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9ODEzPUVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NldHVwX3JtcG9wdCwgXCYjMzQ7Y2NwXCYjMzQ7KTtcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy04MTktICovXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo4MjA6aW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtODIxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3MjUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuCgoqKkludmVzdGlnYXRpbmcgdGhlIENhbGwgU2l0ZXMgb2YgYHNucF9ybXB0YWJsZV9pbml0KClgKioKCkFscmlnaHQsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBvZiBgc25wX3JtcHRhYmxlX2luaXQoKWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aGVyZSogdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIHBsYWNlcyBpbiB0aGUgY29kZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbi4gV2l0aG91dCB0aGlzIHVuZGVyc3RhbmRpbmcsIGFueSBhdHRlbXB0IHRvIGRlYnVnIG9yIG1vZGlmeSBiZWhhdmlvciBzdGVtbWluZyBmcm9tIHRoZSAmIzM5O3NucCYjMzk7IG1vZHVsZSB3b3VsZCBiZSBoYW1wZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c25wX3JtcHRhYmxlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg9NjUwPWJvb2wgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8odm9pZCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaDo2NTE6aW50IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjUyLWludCBzbnBfbG9va3VwX3JtcGVudHJ5KHU2NCBwZm4sIGJvb2wgKmFzc2lnbmVkLCBpbnQgKmxldmVsKTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02Njk9c3RhdGljIGlubGluZSBib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaDo2NzA6c3RhdGljIGlubGluZSBpbnQgc25wX3JtcHRhYmxlX2luaXQodm9pZCkgeyByZXR1cm4gLUVOT1NZUzsgfVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjcxLXN0YXRpYyBpbmxpbmUgaW50IHNucF9sb29rdXBfcm1wZW50cnkodTY0IHBmbiwgYm9vbCAqYXNzaWduZWQsIGludCAqbGV2ZWwpIHsgcmV0dXJuIC1FTk9ERVY7IH1cbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz04MTM9RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2V0dXBfcm1wb3B0LCBcJiMzNDtjY3BcJiMzNDspO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTgxOS0gKi9cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjgyMDppbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy04MjEte1xuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYz0zMzYzPXN0YXRpYyBfX2luaXQgdm9pZCBpb21tdV9zbnBfZW5hYmxlKHZvaWQpXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMzOTAtXHQgKi9cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozMzkxOlx0aWYgKHNucF9ybXB0YWJsZV9pbml0KCkpIHtcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMzkyLVx0XHRwcl93YXJuKFwmIzM0O1NOUDogUk1QIGluaXRpYWxpemF0aW9uIGZhaWxlZCwgU05QIGNhbm5vdCBiZSBzdXBwb3J0ZWQuXFxuXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzOTIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGlubmVyIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgaW9tbXVfc25wX2VuYWJsZSgpYCBhbmQgaXRzIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSB0cmFpbCBsZWFkcyB1cyB0byBgaW9tbXVfc25wX2VuYWJsZSgpYC4gVGhlIGZ1bmN0aW9uIG5hbWUgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBlbmFibGluZyBTZWN1cmUgTmVzdGVkIFBhZ2luZyBmZWF0dXJlcywgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgbW9kZXJuIHZpcnR1YWxpemF0aW9uIHNlY3VyaXR5LiBMZXQmIzM5O3MgZGlnIGluIGEgYml0IGZ1cnRoZXIgdG8gc2VlIGhvdyBpdCYjMzk7cyBzZXR0aW5nIHRoaW5ncyB1cC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIEJhc2VkIG9uIHRoYXQgZnVuY3Rpb24gY2FsbCwgSSBuZWVkIHRvIGtub3cgYWJvdXQgYHNucF9ybXB0YWJsZV9pbml0KClgLiBUaGF0IGZ1bmN0aW9uJiMzOTtzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgY29uZmlndXJpbmcgdGhlIFJNUCAoUm9vdCBNZW1vcnkgUHJvdGVjdGlvbikgdGFibGUsIHdoaWNoIGlzIGFic29sdXRlbHkgZnVuZGFtZW50YWwgdG8gcHJvdGVjdGluZyBndWVzdCBtZW1vcnkgZnJvbSB1bmF1dGhvcml6ZWQgYWNjZXNzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0JiMzOTtzIGRvbmUuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGV0YWlscyBvZiB0aGF0IHRhYmxlIHRvIGdldCBhIGdvb2QgZ3JpcCBvbiB0aGUgb3ZlcmFsbCBzZWN1cml0eSBwb3N0dXJlIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvdmlydC9zdm0vc2V2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgxOTpcdCAqL1xuIDgyMDpcdGludCBfX2luaXQgc25wX3JtcHRhYmxlX2luaXQodm9pZClcbiA4MjE6XHR7XG4gODIyOlx0XHR1NjQgdmFsO1xuIDgyMzpcdFxuIDgyNDpcdFx0aWYgKFdBUk5fT05fT05DRSghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSkpXG4gODI1Olx0XHRcdHJldHVybiAtRU5PU1lTO1xuIDgyNjpcdFxuIDgyNzpcdFx0aWYgKFdBUk5fT05fT05DRSghYW1kX2lvbW11X3NucF9lbikpXG4gODI4Olx0XHRcdHJldHVybiAtRU5PU1lTO1xuIDgyOTpcdFxuIDgzMDpcdFx0aWYgKCFzZXR1cF9ybXB0YWJsZSgpKVxuIDgzMTpcdFx0XHRyZXR1cm4gLUVOT1NZUztcbiA4MzI6XHRcbiA4MzM6XHRcdC8qXG4gODM0Olx0XHQgKiBPbiBhIGtleGVjIGJvb3QgU05QIG1heSBhbHJlYWR5IGJlIGVuYWJsZWQgKGxlZ2FjeSBmaXJtd2FyZSBsZWF2ZXNcbiA4MzU6XHRcdCAqIFNucEVuIHNldCBhY3Jvc3Mgc2h1dGRvd24pLCBpbiB3aGljaCBjYXNlIHNucF9wcmVwYXJlKCkgYmFpbHMgd2l0aG91dFxuIDgzNjpcdFx0ICogZGlzYWJsaW5nIENQVSBob3RwbHVnLCBzbyBkaXNhYmxlIGl0IGhlcmUuXG4gODM3Olx0XHQgKi9cbiA4Mzg6XHRcdHJkbXNycShNU1JfQU1ENjRfU1lTQ0ZHLCB2YWwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDk2NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6CgoqKlVucmVhY2hhYmxlIENvZGUgYW5kIFNOUCBQcm9iaW5nKioKClJpZ2h0LCBzbyB0aGF0IGNoZWNrIHdpdGggYGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUClgLi4uIHRoYXQmIzM5O3MgdGhlIHRlbGwuIEl0IG1lYW5zIHRoZSBzdWJzZXF1ZW50IGNvZGUgcGF0aCBpcyBjb21wbGV0ZWx5IGJsb2NrZWQgb2ZmLiBObyB3YXkgYXJvdW5kIGl0LiBJdCYjMzk7cyB1bnJlYWNoYWJsZS4gSXQgbWFrZXMgbWUgd29uZGVyIHdoeSBpdCYjMzk7cyB0aGVyZSBhdCBhbGwuCgpUaGVuLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpYC4gSXMgdGhhdCByZWxhdGVkPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIGltcGxpY2F0aW9ucyBvZiBwcm9iaW5nIHRoZSBSTVAgdGFibGUgaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBwbGF0Zm9ybSBjaGVjay4gSXMgdGhlIHVucmVhY2hhYmxlIGNvZGUgcmVsYXRlZCB0byBzb21lIGFsdGVybmF0aXZlIFJNUCB0YWJsZSBwcm9iaW5nIHN0cmF0ZWd5IG9yIGFuIGVycm9yIHBhdGggdGhhdCBpcyBub3QgbmVlZGVkIGZvciB0aGUgY3VycmVudCBTTlAgZmVhdHVyZT8gSSYjMzk7bGwgcHJvYmFibHkgbmVlZCB0byByZXZpc2l0IHRoZSByZWxldmFudCBTTlAgZG9jdW1lbnRhdGlvbiBhbmQgY29kZSB0byBwaWVjZSB0aGlzIHRvZ2V0aGVyIHByb3Blcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02NDU9c3RhdGljIGlubGluZSB1NjQgc2F2aWNfZ2hjYl9tc3JfcmVhZCh1MzIgcmVnKSB7IHJldHVybiAwOyB9XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjQ5LSNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjY1MDpib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjUxLWludCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02Njc9dm9pZCBzbnBfc2h1dGRvd24odm9pZCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaC02NjgtI2Vsc2VcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjY2OTpzdGF0aWMgaW5saW5lIGJvb2wgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8odm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY3MC1zdGF0aWMgaW5saW5lIGludCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKSB7IHJldHVybiAtRU5PU1lTOyB9XG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYz0zNTU9c3RhdGljIHZvaWQgYnNwX2RldGVybWluZV9zbnAoc3RydWN0IGNwdWluZm9feDg2ICpjKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMtMzcxLVx0XHQgICAgIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QUkVBRCkpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYzozNzI6XHRcdCAgICBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpKSB7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3My1cdFx0XHRjY19wbGF0Zm9ybV9zZXQoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTg5Mz1zdGF0aWMgYm9vbCBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbyh2b2lkKVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTkzNi1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjkzNzpib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy05Mzgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTc2NwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbjoKCioqVHJhY2luZyB0aGUgRGF0YSBGbG93OiBgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKWAqKgoKT2theSwgc28gYHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKClgIGlzIHRyaWdnZXJlZCBieSBgYnNwX2RldGVybWluZV9zbnAoKWAuIFRoYXQmIzM5O3MgYSBrZXkgcmVsYXRpb25zaGlwLiBUbyB0cnVseSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nLCBJIG5lZWQgdG8gcmV2aXNpdCB0aGUgZnVuY3Rpb25hbGl0eSBvZiBgYnNwX2RldGVybWluZV9zbnAoKWAuIEl0JiMzOTtzIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLCBzbyBpdCBob2xkcyB0aGUgY29udGV4dCBmb3Igd2h5IGBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpYCBpcyBldmVuIGJlaW5nIGNhbGxlZCBpbiB0aGUgZmlyc3QgcGxhY2UuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IHRoYXQgZnVuY3Rpb24gaXMgZG9pbmcsIHdoYXQgaXRzIGlucHV0cyBhcmUsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIG9iamVjdGl2ZSBvZiB0aGF0IGZ1bmN0aW9uIGlzLiBUaGF0IHNob3VsZCBpbGx1bWluYXRlIHRoZSBwdXJwb3NlIG9mIHRoZSBjYWxsIHRvIGBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpYCwgYW5kIHdoZXJlIHRoaXMgZGF0YSBmaXRzIGludG8gdGhlIG92ZXJhbGwgc2NoZW1lIG9mIHRoaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNTU6XHRzdGF0aWMgdm9pZCBic3BfZGV0ZXJtaW5lX3NucChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXG4gMzU2Olx0e1xuIDM1NzpcdCNpZmRlZiBDT05GSUdfQVJDSF9IQVNfQ0NfUExBVEZPUk1cbiAzNTg6XHRcdGNjX3ZlbmRvciA9IENDX1ZFTkRPUl9BTUQ7XG4gMzU5Olx0XG4gMzYwOlx0XHRpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9TRVZfU05QKSkge1xuIDM2MTpcdFx0XHQvKlxuIDM2MjpcdFx0XHQgKiBSTVAgdGFibGUgZW50cnkgZm9ybWF0IGlzIG5vdCBhcmNoaXRlY3R1cmFsIGFuZCBpcyBkZWZpbmVkIGJ5IHRoZVxuIDM2MzpcdFx0XHQgKiBwZXItcHJvY2Vzc29yIFBQUi4gUmVzdHJpY3QgU05QIHN1cHBvcnQgb24gdGhlIGtub3duIENQVSBtb2RlbHNcbiAzNjQ6XHRcdFx0ICogZm9yIHdoaWNoIHRoZSBSTVAgdGFibGUgZW50cnkgZm9ybWF0IGlzIGN1cnJlbnRseSBkZWZpbmVkIG9yIGZvclxuIDM2NTpcdFx0XHQgKiBwcm9jZXNzb3JzIHdoaWNoIHN1cHBvcnQgdGhlIGFyY2hpdGVjdHVyYWxseSBkZWZpbmVkIFJNUFJFQURcbiAzNjY6XHRcdFx0ICogaW5zdHJ1Y3Rpb24uXG4gMzY3Olx0XHRcdCAqL1xuIDM2ODpcdFx0XHRpZiAoIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUikgXHUwMDI2XHUwMDI2XG4gMzY5Olx0XHRcdCAgICAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9aRU4zKSB8fFxuIDM3MDpcdFx0XHQgICAgIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfWkVONCkgfHxcbiAzNzE6XHRcdFx0ICAgICBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUFJFQUQpKSBcdTAwMjZcdTAwMjZcbiAzNzI6XHRcdFx0ICAgIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKCkpIHtcbiAzNzM6XHRcdFx0XHRjY19wbGF0Zm9ybV9zZXQoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuIDM3NDpcdFx0XHR9IGVsc2Uge1xuIDM3NTpcdFx0XHRcdHNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfU0VWX1NOUCk7XG4gMzc2Olx0XHRcdFx0Y2NfcGxhdGZvcm1fY2xlYXIoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuIDM3NzpcdFx0XHR9XG4gMzc4Olx0XHR9XG4gMzc5Olx0I2VuZGlmXG4gMzgwOlx0fVxuIDM4MTpcdFxuIDM4MjpcdCNkZWZpbmUgWkVOX01PREVMX1NURVBfVUNPREUoZmFtLCBtb2RlbCwgc3RlcCwgdWNvZGUpIFxcXG4gMzgzOlx0XHRYODZfTUFUQ0hfVkZNX1NURVBTKFZGTV9NQUtFKFg4Nl9WRU5ET1JfQU1ELCBmYW0sIG1vZGVsKSwgXFxcbiAzODQ6XHRcdFx0XHQgICAgc3RlcCwgc3RlcCwgdWNvZGUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NTc4CgkJCQkJCQlvdXRwdXQ6IDE5NAoJCQkJCQkJdGhvdWdodHM6IDc2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBTRVYtU05QIENvZGUgaW4gVmlydHVhbGl6ZWQgRW52aXJvbm1lbnRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBiZWNhdXNlIG9mIEMmIzM5O3Mgc2hvcnQtY2lyY3VpdCBldmFsdWF0aW9uLCB0aGUgYHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKClgIGZ1bmN0aW9uIHdvbiYjMzk7dCBiZSBjYWxsZWQgaWYgdGhlIGAhY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9IWVBFUlZJU09SKWAgY2hlY2sgaXMgZmFsc2UuIFNpbmNlIHdlJiMzOTtyZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBgY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9IWVBFUlZJU09SKWAgd2lsbCBiZSB0cnVlLCBtYWtpbmcgdGhlIGNvbmRpdGlvbiBmYWxzZSwgYW5kIHRodXMsIGBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpYCBpcyBza2lwcGVkLiBBbmQgbGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrLCBubywgdGhlIGdyZXAgb3V0cHV0IGNvbmZpcm1zIHRoaXMgaXMgb25seSBjYWxsZWQgZnJvbSBgYnNwX2RldGVybWluZV9zbnAoKWAuCgpTbywgdGhlIGNoYW5nZXMgaW4gdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiwgYW5kIHRoZXJlZm9yZSwgdGhlaXIgaW1wYWN0LCBhcmUgdW5yZWFjaGFibGUgaW4gdGhpcyBzY2VuYXJpby4KCk5vdywgd2hhdCBlbHNlIGRvZXMgdGhlIHBhdGNoIHRvdWNoPyBJIHNlZSBhZGRpdGlvbnMgbGlrZSBgI2RlZmluZSBYODZfRkVBVFVSRV9STVBPUFRgLCBgTVNSX0FNRDY0X1JNUE9QVF9CQVNFYCwgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgbW9kaWZpY2F0aW9ucyB0byBhcnJheXMgaW4gdmFyaW91cyBpbmNsdWRlIGFuZCBzb3VyY2UgZmlsZXMuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgbG9naWMgcmV2b2x2ZXMgYXJvdW5kIGBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKClgLCBgc25wX3NldHVwX3JtcG9wdCgpYCwgYHNucF9jbGVhbnVwX3JtcG9wdCgpYCwgYW5kIGEgc3VpdGUgb2YgcmVsYXRlZCBmdW5jdGlvbnMuCgpIb3dldmVyLCBhbGwgb2YgdGhlc2UgZnVuY3Rpb25zLCBhbmQgb3RoZXIgZnVuY3Rpb25zLCBzdWNoIGFzIGBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpYCwgYXJlIGdhdGVkIGJlaGluZCBlaXRoZXIgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBvciwgY3J1Y2lhbGx5LCBgIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUilgLiBUaGVyZWZvcmUsIGV2ZW4gaW4gdGhlIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBub25lIG9mIHRoaXMgY29kZSBjYW4gYmUgdHJpZ2dlcmVkIGJlY2F1c2UgYFg4Nl9GRUFUVVJFX0hZUEVSVklTT1JgIGlzIHNldC4KCkJ1dCBsZXQmIzM5O3MgYmUgc3VyZS4gQ2FuIHdlIGNsZWFyIGBYODZfRkVBVFVSRV9IWVBFUlZJU09SYCBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmc/IEluIFFFTVUsIHRoZSBgLWNwdSBob3N0LC1oeXBlcnZpc29yYCBmbGFnICpjYW4qIGJlIHVzZWQgdG8gY2xlYXIgdGhhdCBmbGFnLiBIb3dldmVyLCBzeXprYWxsZXIgZG9lcyBub3QgdXNlIHRoYXQgZmxhZyBieSBkZWZhdWx0LiBJZiBpdCAqZGlkKiB1c2UgdGhlIGZsYWcsIHRoZW4gdGhlIGhvc3Qga2VybmVsIHJ1bm5pbmcgaW4gUUVNVSB3b3VsZCB0aGVuIGF0dGVtcHQgdG8gZW5hYmxlIFNFVi1TTlAgZnVuY3Rpb25hbGl0eS4gQnV0IGhlcmUmIzM5O3MgdGhlIGtpY2tlcjogZW5hYmxpbmcgU0VWLVNOUCAqcmVxdWlyZXMqIGhhcmR3YXJlIHN1cHBvcnQ6IHRoZSBNU1JzLCB0aGUgQ1BVSUQgZmVhdHVyZXMsIGFuZCB0aGUgUk1QIHRhYmxlLiBRRU1VIGRvZXMgKm5vdCogZW11bGF0ZSBTRVYtU05QIGhvc3QgZmVhdHVyZXM7IGl0ICpjYW4qIGVtdWxhdGUgYW4gU0VWLVNOUCBndWVzdCwgYnV0IG5vdCBhIFNFVi1TTlAgaG9zdC4gVGhlcmVmb3JlLCBldmVuIGlmIHdlICpjb3VsZCogY2xlYXIgYFg4Nl9GRUFUVVJFX0hZUEVSVklTT1JgLCBgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKWAgd291bGQgc3RpbGwgZmFpbCBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHJlcXVpcmVtZW50cyB3b3VsZG4mIzM5O3QgYmUgcHJlc2VudC4KClNvLCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhci4gVGhlIGNvcmUgbG9naWMgb2YgdGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSB1bnJlYWNoYWJsZSBpbiBhbnkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVSwgcmVnYXJkbGVzcyBvZiBob3cgd2UgY29uZmlndXJlIHRoZSB2aXJ0dWFsIG1hY2hpbmUuIEl0JiMzOTtzIHNpbXBseSBpbXBvc3NpYmxlIHRvIHRyaWdnZXIgdGhlIGludGVuZGVkIGJlaGF2aW9yLiBUaGVyZWZvcmUsIHRoaXMgaXMgbm90IHdvcnRoIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbiwgd2hpY2ggaXMgcGFydCBvZiB0aGUgQU1EIFNFVi1TTlAgKFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gLSBTZWN1cmUgTmVzdGVkIFBhZ2luZykgaG9zdCBzdXBwb3J0LiBBbGwgdGhlIG1vZGlmaWVkIGFuZCBhZGRlZCBmdW5jdGlvbnMgKGUuZy4sIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0sIHNucF9zZXR1cF9ybXBvcHQsIHNucF9wcmVwYXJlLCBzbnBfc2h1dGRvd24pIGFyZSBndWFyZGVkIGJ5IGNoZWNrcyBmb3IgQ0NfQVRUUl9IT1NUX1NFVl9TTlAgb3IgZXhwbGljaXRseSByZXF1aXJlIHRoZSBhYnNlbmNlIG9mIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IuIFNpbmNlIHN5emthbGxlciBydW5zIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoR0NFL1FFTVUpIHdoZXJlIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IgaXMgc2V0IGFuZCBTRVYtU05QIGhvc3QgaGFyZHdhcmUgZmVhdHVyZXMgYXJlIG5vdCBlbXVsYXRlZCwgdGhpcyBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBBTUQgUk1QT1BUIGluc3RydWN0aW9uLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBBTUQgU0VWLVNOUCAoU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAtIFNlY3VyZSBOZXN0ZWQgUGFnaW5nKSBob3N0IHN1cHBvcnQuIEFsbCB0aGUgbW9kaWZpZWQgYW5kIGFkZGVkIGZ1bmN0aW9ucyAoZS5nLiwgc25wX3JtcG9wdF9hbGxfcGh5c21lbSwgc25wX3NldHVwX3JtcG9wdCwgc25wX3ByZXBhcmUsIHNucF9zaHV0ZG93bikgYXJlIGd1YXJkZWQgYnkgY2hlY2tzIGZvciBDQ19BVFRSX0hPU1RfU0VWX1NOUCBvciBleHBsaWNpdGx5IHJlcXVpcmUgdGhlIGFic2VuY2Ugb2YgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUi4gU2luY2Ugc3l6a2FsbGVyIHJ1bnMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChHQ0UvUUVNVSkgd2hlcmUgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUiBpcyBzZXQgYW5kIFNFVi1TTlAgaG9zdCBoYXJkd2FyZSBmZWF0dXJlcyBhcmUgbm90IGVtdWxhdGVkLCB0aGlzIGNvZGUgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIzOjM0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozMjo1OS41MjQzOTQ1NTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI3OTgwMjYxODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBBTUQgUk1QT1BUIGluc3RydWN0aW9uLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBBTUQgU0VWLVNOUCAoU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAtIFNlY3VyZSBOZXN0ZWQgUGFnaW5nKSBob3N0IHN1cHBvcnQuIEFsbCB0aGUgbW9kaWZpZWQgYW5kIGFkZGVkIGZ1bmN0aW9ucyAoZS5nLiwgc25wX3JtcG9wdF9hbGxfcGh5c21lbSwgc25wX3NldHVwX3JtcG9wdCwgc25wX3ByZXBhcmUsIHNucF9zaHV0ZG93bikgYXJlIGd1YXJkZWQgYnkgY2hlY2tzIGZvciBDQ19BVFRSX0hPU1RfU0VWX1NOUCBvciBleHBsaWNpdGx5IHJlcXVpcmUgdGhlIGFic2VuY2Ugb2YgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUi4gU2luY2Ugc3l6a2FsbGVyIHJ1bnMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChHQ0UvUUVNVSkgd2hlcmUgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUiBpcyBzZXQgYW5kIFNFVi1TTlAgaG9zdCBoYXJkd2FyZSBmZWF0dXJlcyBhcmUgbm90IGVtdWxhdGVkLCB0aGlzIGNvZGUgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjMyOjU5LjUyNDQwMTk3N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MjY4Mjc3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDRiZjA3NjAzMTVmZjQ1NGVkNjI1YTQxNGM2NzdiMWRkYmY4MDNiNGZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMjM6MzI6NTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcXG5pbmRleCAzZDA5NDBhM2I5ZjM3Li5kYmNjZGU5ZWU1Y2Q1IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXFxuQEAgLTc2LDcgKzc2LDcgQEBcXG4gI2RlZmluZSBYODZfRkVBVFVSRV9LOFxcdFxcdFxcdCggMyozMisgNCkgLyogT3B0ZXJvbiwgQXRobG9uNjQgKi9cXG4gI2RlZmluZSBYODZfRkVBVFVSRV9aRU41XFx0XFx0KCAzKjMyKyA1KSAvKiBDUFUgYmFzZWQgb24gWmVuNSBtaWNyb2FyY2hpdGVjdHVyZSAqL1xcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1pFTjZcXHRcXHQoIDMqMzIrIDYpIC8qIENQVSBiYXNlZCBvbiBaZW42IG1pY3JvYXJjaGl0ZWN0dXJlICovXFxuLS8qIEZyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDMqMzIrIDcpICovXFxuKyNkZWZpbmUgWDg2X0ZFQVRVUkVfUk1QT1BUXFx0XFx0KCAzKjMyKyA3KSAvKiBTdXBwb3J0IGZvciBBTUQgUk1QT1BUIGluc3RydWN0aW9uICovXFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDXFx0KCAzKjMyKyA4KSAvKiBcXFwiY29uc3RhbnRfdHNjXFxcIiBUU0MgdGlja3MgYXQgYSBjb25zdGFudCByYXRlICovXFxuIC8qIGZyZWU6IHdhcyAjZGVmaW5lIFg4Nl9GRUFUVVJFX1VQXFx0KCAzKjMyKyA5KSAqIFxcXCJ1cFxcXCIgU01QIGtlcm5lbCBydW5uaW5nIG9uIFVQICovXFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfQVJUXFx0XFx0XFx0KCAzKjMyKzEwKSAvKiBcXFwiYXJ0XFxcIiBBbHdheXMgcnVubmluZyB0aW1lciAoQVJUKSAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXFxuaW5kZXggMThjNGJlNzVlOTI3MS4uZDJjYjBhN2NkMGEyZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXFxuQEAgLTc2MSw2ICs3NjEsOSBAQFxcbiAjZGVmaW5lIE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRURfQklUXFx0MFxcbiAjZGVmaW5lIE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRURcXHRCSVRfVUxMKE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRURfQklUKVxcbiAjZGVmaW5lIE1TUl9BTUQ2NF9STVBfU0VHTUVOVF9TSElGVCh4KVxcdCgoKHgpIFxcdTAwMjYgR0VOTUFTS19VTEwoMTMsIDgpKSBcXHUwMDNlXFx1MDAzZSA4KVxcbisjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfQkFTRVxcdFxcdDB4YzAwMTAxMzlcXG4rI2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRV9CSVRcXHQwXFxuKyNkZWZpbmUgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVcXHRcXHRCSVRfVUxMKE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFX0JJVClcXG4gXFxuICNkZWZpbmUgTVNSX1NWU01fQ0FBXFx0XFx0XFx0MHhjMDAxZjAwMFxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaFxcbmluZGV4IDU5NGNmYTE5Y2JkNGIuLjA5YjFjNWQzMzc5MDIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaFxcbkBAIC02NjIsNiArNjYyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNucF9sZWFrX3BhZ2VzKHU2NCBwZm4sIHVuc2lnbmVkIGludCBwYWdlcylcXG4gXFx0X19zbnBfbGVha19wYWdlcyhwZm4sIHBhZ2VzLCB0cnVlKTtcXG4gfVxcbiBpbnQgc25wX3ByZXBhcmUodm9pZCk7XFxuK3ZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKTtcXG4rdm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpO1xcbiB2b2lkIHNucF9zaHV0ZG93bih2b2lkKTtcXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSBib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9XFxuQEAgLTY4MCw2ICs2ODIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc25wX2xlYWtfcGFnZXModTY0IHBmbiwgdW5zaWduZWQgaW50IG5wYWdlcykge31cXG4gc3RhdGljIGlubGluZSB2b2lkIGtkdW1wX3Nldl9jYWxsYmFjayh2b2lkKSB7IH1cXG4gc3RhdGljIGlubGluZSB2b2lkIHNucF9maXh1cF9lODIwX3RhYmxlcyh2b2lkKSB7fVxcbiBzdGF0aWMgaW5saW5lIGludCBzbnBfcHJlcGFyZSh2b2lkKSB7IHJldHVybiAtRU5PREVWOyB9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpIHt9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2h1dGRvd24odm9pZCkge31cXG4gI2VuZGlmXFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xcbmluZGV4IDkzNzEyOWNlNmE5NjQuLjAyMWMwYmYyMmRlMjAgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcXG5AQCAtNjcsNiArNjcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNwdWlkX2JpdCBjcHVpZF9iaXRzW10gPSB7XFxuIFxcdHsgWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMixcXHRcXHRDUFVJRF9FQVgsICAwLCAweDgwMDAwMDIyLCAwIH0sXFxuIFxcdHsgWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMixcXHRcXHRDUFVJRF9FQVgsICAxLCAweDgwMDAwMDIyLCAwIH0sXFxuIFxcdHsgWDg2X0ZFQVRVUkVfQU1EX0xCUl9QTUNfRlJFRVpFLFxcdENQVUlEX0VBWCwgIDIsIDB4ODAwMDAwMjIsIDAgfSxcXG4rXFx0eyBYODZfRkVBVFVSRV9STVBPUFQsXFx0XFx0XFx0Q1BVSURfRURYLCAgMCwgMHg4MDAwMDAyNSwgMCB9LFxcbiBcXHR7IFg4Nl9GRUFUVVJFX0FNRF9IVFJfQ09SRVMsXFx0XFx0Q1BVSURfRUFYLCAzMCwgMHg4MDAwMDAyNiwgMCB9LFxcbiBcXHR7IDAsIDAsIDAsIDAsIDAgfVxcbiB9O1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xcbmluZGV4IDQyNzIyOTM0Nzg3NjYuLmM1NzQ4NDliMTU4NzggMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG5AQCAtMjk5Miw2ICsyOTkyLDE2IEBAIHZvaWQgc2V2X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKHNucF9kZWNvbW1pc3Npb25fY29udGV4dChrdm0pKVxcbiBcXHRcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBQZXJmb3JtIFJNUCBvcHRpbWl6YXRpb25zIG9uIG1lbW9yeSBmcmVlZCBieSB0ZXJtaW5hdGluZ1xcbitcXHRcXHQgKiBndWVzdHMuICBUaGUgc2NhbiBpcyBkZWZlcnJlZCwgc28gaXQgbm9ybWFsbHkgcnVucyBhZnRlclxcbitcXHRcXHQgKiBzZXZfZ21lbV9pbnZhbGlkYXRlKCkgaGFzIGNvbnZlcnRlZCB0aGlzIGd1ZXN0J3MgcGFnZXMgYmFjayB0b1xcbitcXHRcXHQgKiBzaGFyZWQsIGFuZCBwaWNrcyB0aGVtIHVwIHRoZW4uICBBIHZlcnkgbGFyZ2UgZ3Vlc3Qgd2hvc2VcXG4rXFx0XFx0ICogY29udmVyc2lvbiBoYXMgbm90IGZpbmlzaGVkIGJ5IHRoZW4gaXMgcGlja2VkIHVwIGJ5IGEgbGF0ZXJcXG4rXFx0XFx0ICogdGVhcmRvd24ncyBzY2FuLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c25wX3JtcG9wdF9hbGxfcGh5c21lbSgpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRzZXZfdW5iaW5kX2FzaWQoa3ZtLCBzZXYtXFx1MDAzZWhhbmRsZSk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC9zdm0vc2V2LmMgYi9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY1xcbmluZGV4IGNmZjI4NWQ4YWQ4ZTMuLjAzNGVkNTQ3YWMyODEgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvdmlydC9zdm0vc2V2LmNcXG4rKysgYi9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY1xcbkBAIC0xOSw2ICsxOSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb21tdS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYW1kLWlvbW11LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ub3NwZWMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9zZXYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wcm9jZXNzb3IuaFxcdTAwM2VcXG5AQCAtMTI0LDYgKzEyNSwxOCBAQCBzdGF0aWMgdm9pZCAqcm1wX2Jvb2trZWVwaW5nIF9fcm9fYWZ0ZXJfaW5pdDtcXG4gXFxuIHN0YXRpYyB1NjQgcHJvYmVkX3JtcF9iYXNlLCBwcm9iZWRfcm1wX3NpemU7XFxuIFxcbitzdGF0aWMgY3B1bWFza192YXJfdCBybXBvcHRfY3B1bWFzaywgcm1wb3B0X2ZvbGxvd2VyX21hc2s7XFxuK3N0YXRpYyB1NjQgcm1wb3B0X3BhX3N0YXJ0LCBybXBvcHRfcGFfZW5kO1xcbitcXG4rZW51bSBybXBvcHRfb3BfdHlwZSB7XFxuK1xcdFJNUE9QVF9PUF9WRVJJRllfQU5EX1JFUE9SVF9TVEFUVVMsXFxuK1xcdFJNUE9QVF9PUF9SRVBPUlRfU1RBVFVTXFxuK307XFxuK1xcbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJtcG9wdF93cTtcXG4rc3RhdGljIHN0cnVjdCBkZWxheWVkX3dvcmsgcm1wb3B0X2RlbGF5ZWRfd29yaztcXG4rc3RhdGljIERFRklORV9NVVRFWChybXBvcHRfd3FfbXV0ZXgpO1xcbitcXG4gc3RhdGljIExJU1RfSEVBRChzbnBfbGVha2VkX3BhZ2VzX2xpc3QpO1xcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNucF9sZWFrZWRfcGFnZXNfbGlzdF9sb2NrKTtcXG4gXFxuQEAgLTUxMyw3ICs1MjYsNiBAQCBzdGF0aWMgdm9pZCBjbGVhcl9oc2F2ZV9wYSh2b2lkICphcmcpXFxuIFxcbiBpbnQgc25wX3ByZXBhcmUodm9pZClcXG4ge1xcbi1cXHRpbnQgcmV0O1xcbiBcXHR1NjQgdmFsO1xcbiBcXG4gXFx0LypcXG5AQCAtNTI2LDE0ICs1MzgsMTggQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpXFxuIFxcbiBcXHRjbGVhcl9ybXAoKTtcXG4gXFxuLVxcdGNwdXNfcmVhZF9sb2NrKCk7XFxuK1xcdC8qXFxuK1xcdCAqIE5vIENQVSBtYXkgY29tZSBvbmxpbmUgd2l0aG91dCBTbnBFbiB3aGlsZSBTTlAgaXMgYWN0aXZlOyBkaXNhYmxlXFxuK1xcdCAqIGhvdHBsdWcgaGVyZSBhbmQgcmUtZW5hYmxlIGl0IGluIHNucF9zaHV0ZG93bigpLlxcbitcXHQgKi9cXG4rXFx0Y3B1X2hvdHBsdWdfZGlzYWJsZSgpO1xcbiBcXG4gXFx0aWYgKCFjcHVtYXNrX2VxdWFsKGNwdV9vbmxpbmVfbWFzaywgY3B1X3ByZXNlbnRfbWFzaykpIHtcXG4tXFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdGNwdV9ob3RwbHVnX2VuYWJsZSgpO1xcbiBcXHRcXHRwcl93YXJuKFxcXCJTTlAgaW5pdCBmYWlsZWQ6IG5vdCBhbGwgQ1BVcyBvbmxpbmUuICglKnBibCBvbmxpbmUgXFx1MDAzYy1cXHUwMDNlICUqcGJsIHByZXNlbnQgbWFza3MpLlxcXFxuXFxcIixcXG4gXFx0XFx0XFx0Y3B1bWFza19wcl9hcmdzKGNwdV9vbmxpbmVfbWFzayksXFxuIFxcdFxcdFxcdGNwdW1hc2tfcHJfYXJncyhjcHVfcHJlc2VudF9tYXNrKSk7XFxuLVxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcdH1cXG4gXFxuIFxcdHdiaW52ZF9vbl9hbGxfY3B1cygpO1xcbkBAIC01NDgsMTQgKzU2NCwzNyBAQCBpbnQgc25wX3ByZXBhcmUodm9pZClcXG4gXFx0LyogU05QX0lOSVQgcmVxdWlyZXMgTVNSX1ZNX0hTQVZFX1BBIHRvIGJlIGNsZWFyZWQgb24gYWxsIENQVXMuICovXFxuIFxcdG9uX2VhY2hfY3B1KGNsZWFyX2hzYXZlX3BhLCBOVUxMLCAxKTtcXG4gXFxuLVxcdHJldCA9IDA7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3ByZXBhcmUsIFxcXCJjY3BcXFwiKTtcXG4gXFxuLXVubG9jazpcXG4tXFx0Y3B1c19yZWFkX3VubG9jaygpO1xcbitzdGF0aWMgdm9pZCBzbnBfY2xlYW51cF9ybXBvcHQodm9pZClcXG4re1xcbitcXHRpbnQgY3B1O1xcbiBcXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZybXBvcHRfd3FfbXV0ZXgpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogcm1wb3B0X3dxIGlzIG5vbi1OVUxMIG9ubHkgYWZ0ZXIgUk1QT1BUIGhhcyBiZWVuIGZ1bGx5IHNldCB1cDogdGhlXFxuK1xcdCAqIHdvcmtxdWV1ZSBhbmQgY3B1bWFza3MgYXJlIGFsbG9jYXRlZCBhbmQgdGhlIFJNUE9QVF9CQVNFIE1TUnMgYXJlXFxuK1xcdCAqIHByb2dyYW1tZWQuICBzbnBfc2V0dXBfcm1wb3B0KCkgcmVzZXRzIGl0IHRvIE5VTEwgaWYgYW55IG9mIHRob3NlXFxuK1xcdCAqIHN0ZXBzIGZhaWwsIHNvIGEgTlVMTCBybXBvcHRfd3EgbWVhbnMgbm90aGluZyB3YXMgc2V0IHVwIGFuZCB0aGVyZSBpc1xcbitcXHQgKiBub3RoaW5nIHRvIHRlYXIgZG93bi5cXG4rXFx0ICovXFxuK1xcdGlmICghcm1wb3B0X3dxKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmspO1xcbitcXHRkZXN0cm95X3dvcmtxdWV1ZShybXBvcHRfd3EpO1xcbitcXG4rXFx0Zm9yX2VhY2hfY3B1KGNwdSwgcm1wb3B0X2NwdW1hc2spXFxuK1xcdFxcdHdybXNycV9vbl9jcHUoY3B1LCBNU1JfQU1ENjRfUk1QT1BUX0JBU0UsIDApO1xcbitcXG4rXFx0ZnJlZV9jcHVtYXNrX3ZhcihybXBvcHRfY3B1bWFzayk7XFxuK1xcdGZyZWVfY3B1bWFza192YXIocm1wb3B0X2ZvbGxvd2VyX21hc2spO1xcbitcXHRybXBvcHRfcGFfc3RhcnQgPSBybXBvcHRfcGFfZW5kID0gMDtcXG4rXFx0cm1wb3B0X3dxID0gTlVMTDtcXG4gfVxcbi1FWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9wcmVwYXJlLCBcXFwiY2NwXFxcIik7XFxuIFxcbiB2b2lkIHNucF9zaHV0ZG93bih2b2lkKVxcbiB7XFxuQEAgLTU2NSwxMSArNjA0LDIxNCBAQCB2b2lkIHNucF9zaHV0ZG93bih2b2lkKVxcbiBcXHRpZiAoc3lzY2ZnIFxcdTAwMjYgTVNSX0FNRDY0X1NZU0NGR19TTlBfRU4pXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdC8qIERpc2FibGUgUk1QT1BUIHdoaWxlIENQVSBob3RwbHVnIGlzIGRpc2FibGVkLiAqL1xcbitcXHRzbnBfY2xlYW51cF9ybXBvcHQoKTtcXG4rXFxuIFxcdGNsZWFyX3JtcCgpO1xcbiBcXHRvbl9lYWNoX2NwdShtZmRfcmVjb25maWd1cmUsIE5VTEwsIDEpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIGZpcm13YXJlIGhhcyBkaXNhYmxlZCBTTlAgKFNucEVuIGlzIGNsZWFyKSwgc28gcmUtZW5hYmxlIENQVVxcbitcXHQgKiBob3RwbHVnLiAgQSBsZWdhY3kgU05QIHNodXRkb3duIHJldHVybnMgYWJvdmUgd2l0aCBTbnBFbiBzdGlsbCBzZXQgYW5kXFxuK1xcdCAqIGxlYXZlcyBob3RwbHVnIGRpc2FibGVkLlxcbitcXHQgKi9cXG4rXFx0Y3B1X2hvdHBsdWdfZW5hYmxlKCk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2h1dGRvd24sIFxcXCJjY3BcXFwiKTtcXG4gXFxuK3N0YXRpYyBib29sIHJtcG9wdF9jYXBhYmxlKHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QT1BUKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG4rfVxcbitcXG4rLypcXG4rICogUk1QT1BUIG9wdGltaXphdGlvbnMgc2tpcCBSTVAgY2hlY2tzIGF0IDFHQiBncmFudWxhcml0eSBpZiB0aGlzIHJhbmdlIG9mXFxuKyAqIG1lbW9yeSBkb2VzIG5vdCBjb250YWluIGFueSBTTlAgZ3Vlc3QgbWVtb3J5LlxcbisgKlxcbisgKiBAcGEgaXMgYSBzeXN0ZW0gcGh5c2ljYWwgYWRkcmVzczsgUk1QT1BUIG9wZXJhdGVzIG9uIHRoZSBjb250YWluaW5nIDFHQi5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHJtcG9wdCh1NjQgcGEpXFxuK3tcXG4rXFx0dTY0IHBhX3N0YXJ0ID0gQUxJR05fRE9XTihwYSwgU1pfMUcpO1xcbitcXHRlbnVtIHJtcG9wdF9vcF90eXBlIG9wID0gUk1QT1BUX09QX1ZFUklGWV9BTkRfUkVQT1JUX1NUQVRVUztcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFJNUE9QVCAoRjIgMEYgMDEgRkMpOiBSQVggPSAxR0ItYWxpZ25lZCBTUEEsIFJDWCA9IG9wIHR5cGUsIENGIHNldCBpZlxcbitcXHQgKiB0aGUgcmFuZ2Ugd2FzIG9wdGltaXplZCAocmVzdWx0IHVudXNlZCBvbiB0aGlzIHBhdGgpLlxcbitcXHQgKlxcbitcXHQgKiBCaW51dGlscyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBSTVBPUFQgbW5lbW9uaWMgeWV0LCBzbyB0aGUgaW5zdHJ1Y3Rpb25cXG4rXFx0ICogaXMgZW5jb2RlZCB3aXRoIC5ieXRlLlxcbitcXHQgKi9cXG4rXFx0YXNtIHZvbGF0aWxlKFxcXCIuYnl0ZSAweGYyLCAweDBmLCAweDAxLCAweGZjXFxcIlxcbitcXHRcXHQgICAgIDo6IFxcXCJhXFxcIiAocGFfc3RhcnQpLCBcXFwiY1xcXCIgKG9wKVxcbitcXHRcXHQgICAgIDogXFxcIm1lbW9yeVxcXCIsIFxcXCJjY1xcXCIpO1xcbit9XFxuK1xcbisvKiBvbl9lYWNoX2NwdSgpIGNhbGxiYWNrOiBvcHRpbWl6ZSB0aGUgd2hvbGUgUk1QT1BUIHJhbmdlIG9uIHRoaXMgQ1BVLiAqL1xcbitzdGF0aWMgdm9pZCBybXBvcHRfc2Nhbl9yYW5nZSh2b2lkICphcmcpXFxuK3tcXG4rXFx0dTY0IHBhO1xcbitcXG4rXFx0Zm9yIChwYSA9IHJtcG9wdF9wYV9zdGFydDsgcGEgXFx1MDAzYyBybXBvcHRfcGFfZW5kOyBwYSArPSBTWl8xRylcXG4rXFx0XFx0cm1wb3B0KHBhKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcm1wb3B0X3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0aW50IHRoaXNfY3B1O1xcbitcXG4rXFx0LypcXG4rXFx0ICogUk1QT1BUIHNjYW5zIHRoZSBSTVAgdGFibGUsIHN0b3JlcyB0aGUgcmVzdWx0IG9mIHRoZSBzY2FuIGluIHRoZVxcbitcXHQgKiByZXNlcnZlZCBwcm9jZXNzb3IgbWVtb3J5LiBUaGUgUk1QIHNjYW4gaXMgdGhlIG1vc3QgZXhwZW5zaXZlXFxuK1xcdCAqIHBhcnQuIElmIGEgc2Vjb25kIFJNUE9QVCBvY2N1cnMsIGl0IGNhbiBza2lwIHRoZSBleHBlbnNpdmUgc2NhblxcbitcXHQgKiBpZiB0aGV5IGNhbiBzZWUgYSBjYWNoZWQgcmVzdWx0IGluIHRoZSByZXNlcnZlZCBwcm9jZXNzb3IgbWVtb3J5LlxcbitcXHQgKlxcbitcXHQgKiBSdW4gUk1QT1BUIG9uIG9uZSBDUFUgZmlyc3QgKHRoZSBsZWFkZXIpLCB0aGVuIG9uIGV2ZXJ5IG90aGVyIHByaW1hcnlcXG4rXFx0ICogdGhyZWFkICh0aGUgZm9sbG93ZXJzKS4gIEEgZm9sbG93ZXIgc2tpcHMgdGhlIGV4cGVuc2l2ZSBSTVAgc2NhbiBieVxcbitcXHQgKiByZXVzaW5nIHRoZSBjYWNoZWQgc2NhbiByZXN1bHRzIHRoZSBsZWFkZXIgcHJvZHVjZWQuXFxuK1xcdCAqXFxuK1xcdCAqIG1pZ3JhdGVfZGlzYWJsZSgpIHBpbnMgdGhpcyB3b3JrIHRvIHRoZSBjdXJyZW50IENQVSBzbyBpdCBzdGF5cyB0aGVcXG4rXFx0ICogbGVhZGVyIGZvciB0aGUgd2hvbGUgbGVhZGVyIGxvb3A6IHRoaXNfY3B1IHJlbWFpbnMgdmFsaWQgYW5kIHRoZVxcbitcXHQgKiBSTVBPUFQgaW5zdHJ1Y3Rpb24gcnVucyBvbiBpdC5cXG4rXFx0ICovXFxuK1xcdG1pZ3JhdGVfZGlzYWJsZSgpO1xcbitcXHR0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTtcXG4rXFxuK1xcdGNwdW1hc2tfYW5kbm90KHJtcG9wdF9mb2xsb3dlcl9tYXNrLCBybXBvcHRfY3B1bWFzayxcXG4rXFx0XFx0ICAgICAgIHRvcG9sb2d5X3NpYmxpbmdfY3B1bWFzayh0aGlzX2NwdSkpO1xcbitcXG4rXFx0cm1wb3B0X3NjYW5fcmFuZ2UoTlVMTCk7XFxuK1xcbitcXHRtaWdyYXRlX2VuYWJsZSgpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRm9sbG93ZXJzOiBvbmUgSVBJIHBlciByZW1haW5pbmcgY29yZSwgZWFjaCBvcHRpbWl6aW5nIHRoZSB3aG9sZVxcbitcXHQgKiByYW5nZS4gIEVhY2ggcnVucyB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQsIGJ1dCBvbmx5IGlzc3VlcyBjYWNoZS1oaXRcXG4rXFx0ICogUk1QT1BUcyAodGhlIGxlYWRlciBwb3B1bGF0ZWQgdGhlIHNjYW4gY2FjaGUgYWJvdmUpLCBzbyB0aGUgd2luZG93IGlzXFxuK1xcdCAqIHNob3J0LiAgY3B1c19yZWFkX2xvY2soKSBpcyBpbnRlbnRpb25hbGx5IG5vdCBoZWxkOiBDUFUgaG90cGx1ZyBpc1xcbitcXHQgKiBkaXNhYmxlZCB0aGUgZW50aXJlIHRpbWUgU05QIGlzIGFjdGl2ZSAoc2VlIHNucF9wcmVwYXJlKCkpLCBhbmQgdGhpc1xcbitcXHQgKiB3b3JrIG9ubHkgcnVucyB3aGlsZSBTTlAgaXMgYWN0aXZlLCBzbyB0aGUgZm9sbG93ZXIgc2V0IHN0YXlzIHZhbGlkLlxcbitcXHQgKi9cXG4rXFx0b25fZWFjaF9jcHVfbWFzayhybXBvcHRfZm9sbG93ZXJfbWFzaywgcm1wb3B0X3NjYW5fcmFuZ2UsIE5VTEwsIHRydWUpO1xcbit9XFxuK1xcbisvKlxcbisgKiBEZWxheSwgaW4gbWlsbGlzZWNvbmRzLCBiZWZvcmUgdGhlIFJNUCByZS1vcHRpbWl6YXRpb24gcGFzcyBydW5zIGFmdGVyIGFuXFxuKyAqIFNOUCBndWVzdCBpcyB0b3JuIGRvd24uICBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKCkgcmUtYXJtcyB0aGUgZGVsYXllZCB3b3JrXFxuKyAqIHdpdGggbW9kX2RlbGF5ZWRfd29yaygpIG9uIGVhY2ggdGVhcmRvd24sIHNvIHRoZSBwYXNzIGZpcmVzIHRoaXMgbG9uZyBhZnRlclxcbisgKiB0aGUgbGFzdCB0ZWFyZG93bi4gIFRoaXMgY29hbGVzY2VzIGEgYnVyc3Qgb2YgdGVhcmRvd25zIGludG8gYSBzaW5nbGUgc2NhblxcbisgKiBhbmQgZ2l2ZXMgZWFjaCBndWVzdCdzIHBhZ2VzIHRpbWUgdG8gYmUgY29udmVydGVkIGJhY2sgdG8gdGhlIHNoYXJlZCxcXG4rICogaHlwZXJ2aXNvci1vd25lZCBzdGF0ZSBiZWZvcmUgdGhlIHNjYW4gcmUtb3B0aW1pemVzIHRoZWlyIDFHQiByZWdpb25zLiAgVGhlXFxuKyAqIDEwIHNlY29uZCB2YWx1ZSBpcyBhIGhldXJpc3RpYyB0cmFkaW5nIHJlLW9wdGltaXphdGlvbiBsYXRlbmN5IGFnYWluc3RcXG4rICogc2Nhbm5pbmcgdG9vIGVhZ2VybHkuXFxuKyAqL1xcbisjZGVmaW5lIFJNUE9QVF9XT1JLX1RJTUVPVVRcXHQoMTAgKiBNU0VDX1BFUl9TRUMpXFxuK1xcbit2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZClcXG4re1xcbitcXHRpZiAoIXJtcG9wdF9jYXBhYmxlKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2cm1wb3B0X3dxX211dGV4KTtcXG4rXFxuK1xcdGlmICghcm1wb3B0X3dxKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRtb2RfZGVsYXllZF93b3JrKHJtcG9wdF93cSwgXFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmssXFxuK1xcdFxcdFxcdCBtc2Vjc190b19qaWZmaWVzKFJNUE9QVF9XT1JLX1RJTUVPVVQpKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9ybXBvcHRfYWxsX3BoeXNtZW0sIFxcXCJrdm0tYW1kXFxcIik7XFxuK1xcbit2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZClcXG4re1xcbitcXHR1NjQgcm1wb3B0X2Jhc2U7XFxuK1xcdGludCBjcHU7XFxuK1xcbitcXHRpZiAoIXJtcG9wdF9jYXBhYmxlKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2cm1wb3B0X3dxX211dGV4KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE9uIHJlLWluaXRpYWxpemF0aW9uIGFmdGVyIGEgbGVnYWN5IFNOUCBzaHV0ZG93biAoU05QX1NIVVRET1dOX0VYXFxuK1xcdCAqIHdpdGggeDg2X3NucF9zaHV0ZG93bj0wKSwgc25wX3NodXRkb3duKCkgYW5kIHRodXMgc25wX2NsZWFudXBfcm1wb3B0KClcXG4rXFx0ICogYXJlIHNraXBwZWQsIHNvIHRoZSB3b3JrcXVldWUsIGRlbGF5ZWQgd29yaywgY3B1bWFzayBhbmQgcGVyLUNQVVxcbitcXHQgKiBSTVBPUFRfQkFTRSBNU1JzIGFyZSBzdGlsbCBzZXQgdXAgYW5kIHZhbGlkIChTbnBFbiBzdGF5ZWQgc2V0IGFuZFxcbitcXHQgKiBDUFUgaG90cGx1ZyBzdGF5ZWQgZGlzYWJsZWQpLiAgUmF0aGVyIHRoYW4gcmUtZG9pbmcgdGhlIHNldHVwLCB3aGljaFxcbitcXHQgKiB3b3VsZCBsZWFrIHRoZSBleGlzdGluZyBzdGF0ZSwganVzdCByZS1xdWV1ZSB0aGUgb3B0aW1pemF0aW9uIHBhc3NcXG4rXFx0ICogdG8gcmUtb3B0aW1pemUgYW55IG1lbW9yeSB0aGUgcHJldmlvdXMgU05QIHNlc3Npb24gZGUtb3B0aW1pemVkLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJtcG9wdF93cSkge1xcbitcXHRcXHRxdWV1ZV9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogQ3JlYXRlIGFuIFJNUE9QVC1zcGVjaWZpYyB3b3JrcXVldWUgdG8gYXZvaWQgc2NoZWR1bGluZ1xcbitcXHQgKiBSTVBPUFQgd29ya2l0ZW0gb24gdGhlIGdsb2JhbCBzeXN0ZW0gd29ya3F1ZXVlLlxcbitcXHQgKi9cXG4rXFx0cm1wb3B0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJybXBvcHRfd3FcXFwiLCBXUV9VTkJPVU5ELCAxKTtcXG4rXFx0aWYgKCFybXBvcHRfd3EpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gYWxsb2NhdGUgUk1QT1BUIHdvcmtxdWV1ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmssIHJtcG9wdF93b3JrX2hhbmRsZXIpO1xcbitcXG4rXFx0aWYgKCF6YWxsb2NfY3B1bWFza192YXIoXFx1MDAyNnJtcG9wdF9jcHVtYXNrLCBHRlBfS0VSTkVMKSkge1xcbitcXHRcXHRwcl9lcnIoXFxcIkZhaWxlZCB0byBhbGxvY2F0ZSBSTVBPUFQgY3B1bWFza1xcXFxuXFxcIik7XFxuK1xcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKHJtcG9wdF93cSk7XFxuK1xcdFxcdHJtcG9wdF93cSA9IE5VTEw7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCF6YWxsb2NfY3B1bWFza192YXIoXFx1MDAyNnJtcG9wdF9mb2xsb3dlcl9tYXNrLCBHRlBfS0VSTkVMKSkge1xcbitcXHRcXHRwcl9lcnIoXFxcIkZhaWxlZCB0byBhbGxvY2F0ZSBSTVBPUFQgZm9sbG93ZXIgY3B1bWFza1xcXFxuXFxcIik7XFxuK1xcdFxcdGZyZWVfY3B1bWFza192YXIocm1wb3B0X2NwdW1hc2spO1xcbitcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShybXBvcHRfd3EpO1xcbitcXHRcXHRybXBvcHRfd3EgPSBOVUxMO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBSTVBPUFRfQkFTRSBNU1IgaXMgcGVyLWNvcmUsIHNvIG9ubHkgb25lIHRocmVhZCBwZXIgY29yZSBuZWVkc1xcbitcXHQgKiB0byBzZXQgdXAgdGhlIFJNUE9QVF9CQVNFIE1TUi4gIEFsbCBwcmltYXJ5IHRocmVhZHMgYXJlIG9ubGluZSxcXG4rXFx0ICogb3RoZXJ3aXNlIFNOUCB3b3VsZCBub3QgaGF2ZSBiZWVuIGVuYWJsZWQuXFxuK1xcdCAqL1xcbitcXHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSlcXG4rXFx0XFx0aWYgKHRvcG9sb2d5X2lzX3ByaW1hcnlfdGhyZWFkKGNwdSkpXFxuK1xcdFxcdFxcdGNwdW1hc2tfc2V0X2NwdShjcHUsIHJtcG9wdF9jcHVtYXNrKTtcXG4rXFxuK1xcdHJtcG9wdF9wYV9zdGFydCA9IEFMSUdOX0RPV04oUEZOX1BIWVMobWluX2xvd19wZm4pLCBTWl8xRyk7XFxuK1xcdHJtcG9wdF9iYXNlID0gcm1wb3B0X3BhX3N0YXJ0IHwgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEU7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQZXItQ1BVIFJNUE9QVCB0YWJsZXMgY292ZXIgYXQgbW9zdCAyIFRCLiAgUHJvZ3JhbSBlYWNoIGNvcmUnc1xcbitcXHQgKiBSTVBPUFRfQkFTRSB3aXRoIHRoZSBzdGFydCBvZiBSQU0gdG8gb3B0aW1pemUgdXAgdG8gMiBUQi5cXG4rXFx0ICovXFxuK1xcdGZvcl9lYWNoX2NwdShjcHUsIHJtcG9wdF9jcHVtYXNrKVxcbitcXHRcXHR3cm1zcnFfb25fY3B1KGNwdSwgTVNSX0FNRDY0X1JNUE9QVF9CQVNFLCBybXBvcHRfYmFzZSk7XFxuK1xcbitcXHRybXBvcHRfcGFfZW5kID0gQUxJR04oUEZOX1BIWVMobWF4X3BmbiksIFNaXzFHKTtcXG4rXFxuK1xcdC8qIExpbWl0IG1lbW9yeSBzY2FubmluZyB0byAyVEIgb2YgUkFNICovXFxuK1xcdGlmICgocm1wb3B0X3BhX2VuZCAtIHJtcG9wdF9wYV9zdGFydCkgXFx1MDAzZSBTWl8yVCkge1xcbitcXHRcXHRwcl9pbmZvKFxcXCJSTVBPUFQgY292ZXJhZ2UgbGltaXRlZCB0byAyVEI7IG1lbW9yeSBhYm92ZSAweCVsbHggbm90IG9wdGltaXplZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cm1wb3B0X3BhX3N0YXJ0ICsgU1pfMlQpO1xcbitcXHRcXHRybXBvcHRfcGFfZW5kID0gcm1wb3B0X3BhX3N0YXJ0ICsgU1pfMlQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE9uY2UgYWxsIHBlci1DUFUgUk1QT1BUIHRhYmxlcyBoYXZlIGJlZW4gY29uZmlndXJlZCwgZW5hYmxlIFJNUE9QVFxcbitcXHQgKiBvcHRpbWl6YXRpb25zIG9uIGFsbCBwaHlzaWNhbCBtZW1vcnkuXFxuK1xcdCAqL1xcbitcXHRxdWV1ZV9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7XFxuK1xcbitcXHRwcl9pbmZvKFxcXCJSTVBPUFQgb3B0aW1pemF0aW9ucyBlbmFibGVkXFxcXG5cXFwiKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zZXR1cF9ybXBvcHQsIFxcXCJjY3BcXFwiKTtcXG4rXFxuIC8qXFxuICAqIERvIHRoZSBuZWNlc3NhcnkgcHJlcGFyYXRpb25zIHdoaWNoIGFyZSB2ZXJpZmllZCBieSB0aGUgZmlybXdhcmUgYXNcXG4gICogZGVzY3JpYmVkIGluIHRoZSBTTlBfSU5JVF9FWCBmaXJtd2FyZSBjb21tYW5kIGRlc2NyaXB0aW9uIGluIHRoZSBTTlBcXG5AQCAtNTc3LDYgKzgxOSw4IEBAIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCBcXFwiY2NwXFxcIik7XFxuICAqL1xcbiBpbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpXFxuIHtcXG4rXFx0dTY0IHZhbDtcXG4rXFxuIFxcdGlmIChXQVJOX09OX09OQ0UoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpKVxcbiBcXHRcXHRyZXR1cm4gLUVOT1NZUztcXG4gXFxuQEAgLTU4Niw2ICs4MzAsMTUgQEAgaW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxcbiBcXHRpZiAoIXNldHVwX3JtcHRhYmxlKCkpXFxuIFxcdFxcdHJldHVybiAtRU5PU1lTO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogT24gYSBrZXhlYyBib290IFNOUCBtYXkgYWxyZWFkeSBiZSBlbmFibGVkIChsZWdhY3kgZmlybXdhcmUgbGVhdmVzXFxuK1xcdCAqIFNucEVuIHNldCBhY3Jvc3Mgc2h1dGRvd24pLCBpbiB3aGljaCBjYXNlIHNucF9wcmVwYXJlKCkgYmFpbHMgd2l0aG91dFxcbitcXHQgKiBkaXNhYmxpbmcgQ1BVIGhvdHBsdWcsIHNvIGRpc2FibGUgaXQgaGVyZS5cXG4rXFx0ICovXFxuK1xcdHJkbXNycShNU1JfQU1ENjRfU1lTQ0ZHLCB2YWwpO1xcbitcXHRpZiAodmFsIFxcdTAwMjYgTVNSX0FNRDY0X1NZU0NGR19TTlBfRU4pXFxuK1xcdFxcdGNwdV9ob3RwbHVnX2Rpc2FibGUoKTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFNldHRpbmcgY3Jhc2hfa2V4ZWNfcG9zdF9ub3RpZmllcnMgdG8gJ3RydWUnIHRvIGVuc3VyZSB0aGF0IFNOUCBwYW5pY1xcbiBcXHQgKiBub3RpZmllciBpcyBpbnZva2VkIHRvIGRvIFNOUCBJT01NVSBzaHV0ZG93biBiZWZvcmUga2R1bXAuXFxuQEAgLTY4MywxMyArOTM2LDIxIEBAIHN0YXRpYyBib29sIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKHZvaWQpXFxuIFxcbiBib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpXFxuIHtcXG4tXFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU0VHTUVOVEVEX1JNUCkpXFxuK1xcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFR01FTlRFRF9STVApKSB7XFxuIFxcdFxcdHJkbXNycShNU1JfQU1ENjRfUk1QX0NGRywgcm1wX2NmZyk7XFxuIFxcbi1cXHRpZiAocm1wX2NmZyBcXHUwMDI2IE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRUQpXFxuLVxcdFxcdHJldHVybiBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbygpO1xcbi1cXHRlbHNlXFxuLVxcdFxcdHJldHVybiBwcm9iZV9jb250aWd1b3VzX3JtcHRhYmxlX2luZm8oKTtcXG4rXFx0XFx0aWYgKHJtcF9jZmcgXFx1MDAyNiBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEKVxcbitcXHRcXHRcXHRyZXR1cm4gcHJvYmVfc2VnbWVudGVkX3JtcHRhYmxlX2luZm8oKTtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogU2VnbWVudGVkIFJNUCBpcyBlaXRoZXIgbm90IHN1cHBvcnRlZCBvbiB0aGUgcGxhdGZvcm0gb3IgaXNcXG4rXFx0ICogZGlzYWJsZWQgYnkgdGhlIGZpcm13YXJlLiAgUk1QT1BUIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dFxcbitcXHQgKiBzZWdtZW50ZWQgUk1QLlxcbitcXHQgKi9cXG4rXFx0c2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9STVBPUFQpO1xcbitcXG4rXFx0cmV0dXJuIHByb2JlX2NvbnRpZ3VvdXNfcm1wdGFibGVfaW5mbygpO1xcbiB9XFxuIFxcbiAvKlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jIGIvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY1xcbmluZGV4IGNhNDczY2ExOThiODEuLmRhMTJkZGYxZjQxMjUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY1xcbisrKyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcXG5AQCAtMTUxMCw2ICsxNTEwLDggQEAgc3RhdGljIGludCBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoaW50ICplcnJvciwgdW5zaWduZWQgaW50IG1heF9zbnBfYXNpZClcXG4gXFxuIFxcdHNldl9lc190bXJfc2l6ZSA9IFNOUF9UTVJfU0laRTtcXG4gXFxuK1xcdHNucF9zZXR1cF9ybXBvcHQoKTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozMzowMC45Njc3MDM4MTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTEzNTQ2OTY5OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIEFNRCBSTVBPUFQgaW5zdHJ1Y3Rpb24sIHdoaWNoIGlzIHBhcnQgb2YgdGhlIEFNRCBTRVYtU05QIChTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIC0gU2VjdXJlIE5lc3RlZCBQYWdpbmcpIGhvc3Qgc3VwcG9ydC4gQWxsIHRoZSBtb2RpZmllZCBhbmQgYWRkZWQgZnVuY3Rpb25zIChlLmcuLCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtLCBzbnBfc2V0dXBfcm1wb3B0LCBzbnBfcHJlcGFyZSwgc25wX3NodXRkb3duKSBhcmUgZ3VhcmRlZCBieSBjaGVja3MgZm9yIENDX0FUVFJfSE9TVF9TRVZfU05QIG9yIGV4cGxpY2l0bHkgcmVxdWlyZSB0aGUgYWJzZW5jZSBvZiBYODZfRkVBVFVSRV9IWVBFUlZJU09SLiBTaW5jZSBzeXprYWxsZXIgcnVucyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKEdDRS9RRU1VKSB3aGVyZSBYODZfRkVBVFVSRV9IWVBFUlZJU09SIGlzIHNldCBhbmQgU0VWLVNOUCBob3N0IGhhcmR3YXJlIGZlYXR1cmVzIGFyZSBub3QgZW11bGF0ZWQsIHRoaXMgY29kZSBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCB0ZXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGJmMDc2MDMxNWZmNDU0ZWQ2MjVhNDE0YzY3N2IxZGRiZjgwM2I0ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDIzOjMyOjU3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbmluZGV4IDNkMDk0MGEzYjlmMzcuLmRiY2NkZTllZTVjZDUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG5AQCAtNzYsNyArNzYsNyBAQFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfSzhcdFx0XHQoIDMqMzIrIDQpIC8qIE9wdGVyb24sIEF0aGxvbjY0ICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9aRU41XHRcdCggMyozMisgNSkgLyogQ1BVIGJhc2VkIG9uIFplbjUgbWljcm9hcmNoaXRlY3R1cmUgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1pFTjZcdFx0KCAzKjMyKyA2KSAvKiBDUFUgYmFzZWQgb24gWmVuNiBtaWNyb2FyY2hpdGVjdHVyZSAqL1xuLS8qIEZyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDMqMzIrIDcpICovXG4rI2RlZmluZSBYODZfRkVBVFVSRV9STVBPUFRcdFx0KCAzKjMyKyA3KSAvKiBTdXBwb3J0IGZvciBBTUQgUk1QT1BUIGluc3RydWN0aW9uICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9DT05TVEFOVF9UU0NcdCggMyozMisgOCkgLyogXCJjb25zdGFudF90c2NcIiBUU0MgdGlja3MgYXQgYSBjb25zdGFudCByYXRlICovXG4gLyogZnJlZTogd2FzICNkZWZpbmUgWDg2X0ZFQVRVUkVfVVBcdCggMyozMisgOSkgKiBcInVwXCIgU01QIGtlcm5lbCBydW5uaW5nIG9uIFVQICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9BUlRcdFx0XHQoIDMqMzIrMTApIC8qIFwiYXJ0XCIgQWx3YXlzIHJ1bm5pbmcgdGltZXIgKEFSVCkgKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXG5pbmRleCAxOGM0YmU3NWU5MjcxLi5kMmNiMGE3Y2QwYTJmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXG5AQCAtNzYxLDYgKzc2MSw5IEBAXG4gI2RlZmluZSBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVFx0MFxuICNkZWZpbmUgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRFx0QklUX1VMTChNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVClcbiAjZGVmaW5lIE1TUl9BTUQ2NF9STVBfU0VHTUVOVF9TSElGVCh4KVx0KCgoeCkgXHUwMDI2IEdFTk1BU0tfVUxMKDEzLCA4KSkgXHUwMDNlXHUwMDNlIDgpXG4rI2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0JBU0VcdFx0MHhjMDAxMDEzOVxuKyNkZWZpbmUgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVfQklUXHQwXG4rI2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRVx0XHRCSVRfVUxMKE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFX0JJVClcbiBcbiAjZGVmaW5lIE1TUl9TVlNNX0NBQVx0XHRcdDB4YzAwMWYwMDBcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXG5pbmRleCA1OTRjZmExOWNiZDRiLi4wOWIxYzVkMzM3OTAyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXG5AQCAtNjYyLDYgKzY2Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfbGVha19wYWdlcyh1NjQgcGZuLCB1bnNpZ25lZCBpbnQgcGFnZXMpXG4gXHRfX3NucF9sZWFrX3BhZ2VzKHBmbiwgcGFnZXMsIHRydWUpO1xuIH1cbiBpbnQgc25wX3ByZXBhcmUodm9pZCk7XG4rdm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpO1xuK3ZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKTtcbiB2b2lkIHNucF9zaHV0ZG93bih2b2lkKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxuQEAgLTY4MCw2ICs2ODIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc25wX2xlYWtfcGFnZXModTY0IHBmbiwgdW5zaWduZWQgaW50IG5wYWdlcykge31cbiBzdGF0aWMgaW5saW5lIHZvaWQga2R1bXBfc2V2X2NhbGxiYWNrKHZvaWQpIHsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfZml4dXBfZTgyMF90YWJsZXModm9pZCkge31cbiBzdGF0aWMgaW5saW5lIGludCBzbnBfcHJlcGFyZSh2b2lkKSB7IHJldHVybiAtRU5PREVWOyB9XG4rc3RhdGljIGlubGluZSB2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCkge31cbitzdGF0aWMgaW5saW5lIHZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2h1dGRvd24odm9pZCkge31cbiAjZW5kaWZcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xuaW5kZXggOTM3MTI5Y2U2YTk2NC4uMDIxYzBiZjIyZGUyMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcbkBAIC02Nyw2ICs2Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRfYml0IGNwdWlkX2JpdHNbXSA9IHtcbiBcdHsgWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMixcdFx0Q1BVSURfRUFYLCAgMCwgMHg4MDAwMDAyMiwgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9BTURfTEJSX1YyLFx0XHRDUFVJRF9FQVgsICAxLCAweDgwMDAwMDIyLCAwIH0sXG4gXHR7IFg4Nl9GRUFUVVJFX0FNRF9MQlJfUE1DX0ZSRUVaRSxcdENQVUlEX0VBWCwgIDIsIDB4ODAwMDAwMjIsIDAgfSxcbitcdHsgWDg2X0ZFQVRVUkVfUk1QT1BULFx0XHRcdENQVUlEX0VEWCwgIDAsIDB4ODAwMDAwMjUsIDAgfSxcbiBcdHsgWDg2X0ZFQVRVUkVfQU1EX0hUUl9DT1JFUyxcdFx0Q1BVSURfRUFYLCAzMCwgMHg4MDAwMDAyNiwgMCB9LFxuIFx0eyAwLCAwLCAwLCAwLCAwIH1cbiB9O1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5pbmRleCA0MjcyMjkzNDc4NzY2Li5jNTc0ODQ5YjE1ODc4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuQEAgLTI5OTIsNiArMjk5MiwxNiBAQCB2b2lkIHNldl92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0ICovXG4gXHRcdGlmIChzbnBfZGVjb21taXNzaW9uX2NvbnRleHQoa3ZtKSlcbiBcdFx0XHRyZXR1cm47XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFBlcmZvcm0gUk1QIG9wdGltaXphdGlvbnMgb24gbWVtb3J5IGZyZWVkIGJ5IHRlcm1pbmF0aW5nXG4rXHRcdCAqIGd1ZXN0cy4gIFRoZSBzY2FuIGlzIGRlZmVycmVkLCBzbyBpdCBub3JtYWxseSBydW5zIGFmdGVyXG4rXHRcdCAqIHNldl9nbWVtX2ludmFsaWRhdGUoKSBoYXMgY29udmVydGVkIHRoaXMgZ3Vlc3QncyBwYWdlcyBiYWNrIHRvXG4rXHRcdCAqIHNoYXJlZCwgYW5kIHBpY2tzIHRoZW0gdXAgdGhlbi4gIEEgdmVyeSBsYXJnZSBndWVzdCB3aG9zZVxuK1x0XHQgKiBjb252ZXJzaW9uIGhhcyBub3QgZmluaXNoZWQgYnkgdGhlbiBpcyBwaWNrZWQgdXAgYnkgYSBsYXRlclxuK1x0XHQgKiB0ZWFyZG93bidzIHNjYW4uXG4rXHRcdCAqL1xuK1x0XHRzbnBfcm1wb3B0X2FsbF9waHlzbWVtKCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRzZXZfdW5iaW5kX2FzaWQoa3ZtLCBzZXYtXHUwMDNlaGFuZGxlKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYyBiL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jXG5pbmRleCBjZmYyODVkOGFkOGUzLi4wMzRlZDU0N2FjMjgxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvdmlydC9zdm0vc2V2LmNcbisrKyBiL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jXG5AQCAtMTksNiArMTksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hbWQtaW9tbXUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25vc3BlYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc2V2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcHJvY2Vzc29yLmhcdTAwM2VcbkBAIC0xMjQsNiArMTI1LDE4IEBAIHN0YXRpYyB2b2lkICpybXBfYm9va2tlZXBpbmcgX19yb19hZnRlcl9pbml0O1xuIFxuIHN0YXRpYyB1NjQgcHJvYmVkX3JtcF9iYXNlLCBwcm9iZWRfcm1wX3NpemU7XG4gXG4rc3RhdGljIGNwdW1hc2tfdmFyX3Qgcm1wb3B0X2NwdW1hc2ssIHJtcG9wdF9mb2xsb3dlcl9tYXNrO1xuK3N0YXRpYyB1NjQgcm1wb3B0X3BhX3N0YXJ0LCBybXBvcHRfcGFfZW5kO1xuK1xuK2VudW0gcm1wb3B0X29wX3R5cGUge1xuK1x0Uk1QT1BUX09QX1ZFUklGWV9BTkRfUkVQT1JUX1NUQVRVUyxcbitcdFJNUE9QVF9PUF9SRVBPUlRfU1RBVFVTXG4rfTtcbitcbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJtcG9wdF93cTtcbitzdGF0aWMgc3RydWN0IGRlbGF5ZWRfd29yayBybXBvcHRfZGVsYXllZF93b3JrO1xuK3N0YXRpYyBERUZJTkVfTVVURVgocm1wb3B0X3dxX211dGV4KTtcbitcbiBzdGF0aWMgTElTVF9IRUFEKHNucF9sZWFrZWRfcGFnZXNfbGlzdCk7XG4gc3RhdGljIERFRklORV9TUElOTE9DSyhzbnBfbGVha2VkX3BhZ2VzX2xpc3RfbG9jayk7XG4gXG5AQCAtNTEzLDcgKzUyNiw2IEBAIHN0YXRpYyB2b2lkIGNsZWFyX2hzYXZlX3BhKHZvaWQgKmFyZylcbiBcbiBpbnQgc25wX3ByZXBhcmUodm9pZClcbiB7XG4tXHRpbnQgcmV0O1xuIFx0dTY0IHZhbDtcbiBcbiBcdC8qXG5AQCAtNTI2LDE0ICs1MzgsMTggQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpXG4gXG4gXHRjbGVhcl9ybXAoKTtcbiBcbi1cdGNwdXNfcmVhZF9sb2NrKCk7XG4rXHQvKlxuK1x0ICogTm8gQ1BVIG1heSBjb21lIG9ubGluZSB3aXRob3V0IFNucEVuIHdoaWxlIFNOUCBpcyBhY3RpdmU7IGRpc2FibGVcbitcdCAqIGhvdHBsdWcgaGVyZSBhbmQgcmUtZW5hYmxlIGl0IGluIHNucF9zaHV0ZG93bigpLlxuK1x0ICovXG4rXHRjcHVfaG90cGx1Z19kaXNhYmxlKCk7XG4gXG4gXHRpZiAoIWNwdW1hc2tfZXF1YWwoY3B1X29ubGluZV9tYXNrLCBjcHVfcHJlc2VudF9tYXNrKSkge1xuLVx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbitcdFx0Y3B1X2hvdHBsdWdfZW5hYmxlKCk7XG4gXHRcdHByX3dhcm4oXCJTTlAgaW5pdCBmYWlsZWQ6IG5vdCBhbGwgQ1BVcyBvbmxpbmUuICglKnBibCBvbmxpbmUgXHUwMDNjLVx1MDAzZSAlKnBibCBwcmVzZW50IG1hc2tzKS5cXG5cIixcbiBcdFx0XHRjcHVtYXNrX3ByX2FyZ3MoY3B1X29ubGluZV9tYXNrKSxcbiBcdFx0XHRjcHVtYXNrX3ByX2FyZ3MoY3B1X3ByZXNlbnRfbWFzaykpO1xuLVx0XHRnb3RvIHVubG9jaztcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuIFxuIFx0d2JpbnZkX29uX2FsbF9jcHVzKCk7XG5AQCAtNTQ4LDE0ICs1NjQsMzcgQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpXG4gXHQvKiBTTlBfSU5JVCByZXF1aXJlcyBNU1JfVk1fSFNBVkVfUEEgdG8gYmUgY2xlYXJlZCBvbiBhbGwgQ1BVcy4gKi9cbiBcdG9uX2VhY2hfY3B1KGNsZWFyX2hzYXZlX3BhLCBOVUxMLCAxKTtcbiBcbi1cdHJldCA9IDA7XG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcHJlcGFyZSwgXCJjY3BcIik7XG4gXG4tdW5sb2NrOlxuLVx0Y3B1c19yZWFkX3VubG9jaygpO1xuK3N0YXRpYyB2b2lkIHNucF9jbGVhbnVwX3JtcG9wdCh2b2lkKVxuK3tcbitcdGludCBjcHU7XG4gXG4tXHRyZXR1cm4gcmV0O1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJtcG9wdF93cV9tdXRleCk7XG4rXG4rXHQvKlxuK1x0ICogcm1wb3B0X3dxIGlzIG5vbi1OVUxMIG9ubHkgYWZ0ZXIgUk1QT1BUIGhhcyBiZWVuIGZ1bGx5IHNldCB1cDogdGhlXG4rXHQgKiB3b3JrcXVldWUgYW5kIGNwdW1hc2tzIGFyZSBhbGxvY2F0ZWQgYW5kIHRoZSBSTVBPUFRfQkFTRSBNU1JzIGFyZVxuK1x0ICogcHJvZ3JhbW1lZC4gIHNucF9zZXR1cF9ybXBvcHQoKSByZXNldHMgaXQgdG8gTlVMTCBpZiBhbnkgb2YgdGhvc2VcbitcdCAqIHN0ZXBzIGZhaWwsIHNvIGEgTlVMTCBybXBvcHRfd3EgbWVhbnMgbm90aGluZyB3YXMgc2V0IHVwIGFuZCB0aGVyZSBpc1xuK1x0ICogbm90aGluZyB0byB0ZWFyIGRvd24uXG4rXHQgKi9cbitcdGlmICghcm1wb3B0X3dxKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yayk7XG4rXHRkZXN0cm95X3dvcmtxdWV1ZShybXBvcHRfd3EpO1xuK1xuK1x0Zm9yX2VhY2hfY3B1KGNwdSwgcm1wb3B0X2NwdW1hc2spXG4rXHRcdHdybXNycV9vbl9jcHUoY3B1LCBNU1JfQU1ENjRfUk1QT1BUX0JBU0UsIDApO1xuK1xuK1x0ZnJlZV9jcHVtYXNrX3ZhcihybXBvcHRfY3B1bWFzayk7XG4rXHRmcmVlX2NwdW1hc2tfdmFyKHJtcG9wdF9mb2xsb3dlcl9tYXNrKTtcbitcdHJtcG9wdF9wYV9zdGFydCA9IHJtcG9wdF9wYV9lbmQgPSAwO1xuK1x0cm1wb3B0X3dxID0gTlVMTDtcbiB9XG4tRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcHJlcGFyZSwgXCJjY3BcIik7XG4gXG4gdm9pZCBzbnBfc2h1dGRvd24odm9pZClcbiB7XG5AQCAtNTY1LDExICs2MDQsMjE0IEBAIHZvaWQgc25wX3NodXRkb3duKHZvaWQpXG4gXHRpZiAoc3lzY2ZnIFx1MDAyNiBNU1JfQU1ENjRfU1lTQ0ZHX1NOUF9FTilcbiBcdFx0cmV0dXJuO1xuIFxuK1x0LyogRGlzYWJsZSBSTVBPUFQgd2hpbGUgQ1BVIGhvdHBsdWcgaXMgZGlzYWJsZWQuICovXG4rXHRzbnBfY2xlYW51cF9ybXBvcHQoKTtcbitcbiBcdGNsZWFyX3JtcCgpO1xuIFx0b25fZWFjaF9jcHUobWZkX3JlY29uZmlndXJlLCBOVUxMLCAxKTtcbitcbitcdC8qXG4rXHQgKiBUaGUgZmlybXdhcmUgaGFzIGRpc2FibGVkIFNOUCAoU25wRW4gaXMgY2xlYXIpLCBzbyByZS1lbmFibGUgQ1BVXG4rXHQgKiBob3RwbHVnLiAgQSBsZWdhY3kgU05QIHNodXRkb3duIHJldHVybnMgYWJvdmUgd2l0aCBTbnBFbiBzdGlsbCBzZXQgYW5kXG4rXHQgKiBsZWF2ZXMgaG90cGx1ZyBkaXNhYmxlZC5cbitcdCAqL1xuK1x0Y3B1X2hvdHBsdWdfZW5hYmxlKCk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCBcImNjcFwiKTtcbiBcbitzdGF0aWMgYm9vbCBybXBvcHRfY2FwYWJsZSh2b2lkKVxuK3tcbitcdHJldHVybiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUE9QVCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbit9XG4rXG4rLypcbisgKiBSTVBPUFQgb3B0aW1pemF0aW9ucyBza2lwIFJNUCBjaGVja3MgYXQgMUdCIGdyYW51bGFyaXR5IGlmIHRoaXMgcmFuZ2Ugb2ZcbisgKiBtZW1vcnkgZG9lcyBub3QgY29udGFpbiBhbnkgU05QIGd1ZXN0IG1lbW9yeS5cbisgKlxuKyAqIEBwYSBpcyBhIHN5c3RlbSBwaHlzaWNhbCBhZGRyZXNzOyBSTVBPUFQgb3BlcmF0ZXMgb24gdGhlIGNvbnRhaW5pbmcgMUdCLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJtcG9wdCh1NjQgcGEpXG4re1xuK1x0dTY0IHBhX3N0YXJ0ID0gQUxJR05fRE9XTihwYSwgU1pfMUcpO1xuK1x0ZW51bSBybXBvcHRfb3BfdHlwZSBvcCA9IFJNUE9QVF9PUF9WRVJJRllfQU5EX1JFUE9SVF9TVEFUVVM7XG4rXG4rXHQvKlxuK1x0ICogUk1QT1BUIChGMiAwRiAwMSBGQyk6IFJBWCA9IDFHQi1hbGlnbmVkIFNQQSwgUkNYID0gb3AgdHlwZSwgQ0Ygc2V0IGlmXG4rXHQgKiB0aGUgcmFuZ2Ugd2FzIG9wdGltaXplZCAocmVzdWx0IHVudXNlZCBvbiB0aGlzIHBhdGgpLlxuK1x0ICpcbitcdCAqIEJpbnV0aWxzIGRvZXMgbm90IHN1cHBvcnQgdGhlIFJNUE9QVCBtbmVtb25pYyB5ZXQsIHNvIHRoZSBpbnN0cnVjdGlvblxuK1x0ICogaXMgZW5jb2RlZCB3aXRoIC5ieXRlLlxuK1x0ICovXG4rXHRhc20gdm9sYXRpbGUoXCIuYnl0ZSAweGYyLCAweDBmLCAweDAxLCAweGZjXCJcbitcdFx0ICAgICA6OiBcImFcIiAocGFfc3RhcnQpLCBcImNcIiAob3ApXG4rXHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIpO1xuK31cbitcbisvKiBvbl9lYWNoX2NwdSgpIGNhbGxiYWNrOiBvcHRpbWl6ZSB0aGUgd2hvbGUgUk1QT1BUIHJhbmdlIG9uIHRoaXMgQ1BVLiAqL1xuK3N0YXRpYyB2b2lkIHJtcG9wdF9zY2FuX3JhbmdlKHZvaWQgKmFyZylcbit7XG4rXHR1NjQgcGE7XG4rXG4rXHRmb3IgKHBhID0gcm1wb3B0X3BhX3N0YXJ0OyBwYSBcdTAwM2Mgcm1wb3B0X3BhX2VuZDsgcGEgKz0gU1pfMUcpXG4rXHRcdHJtcG9wdChwYSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJtcG9wdF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdGludCB0aGlzX2NwdTtcbitcbitcdC8qXG4rXHQgKiBSTVBPUFQgc2NhbnMgdGhlIFJNUCB0YWJsZSwgc3RvcmVzIHRoZSByZXN1bHQgb2YgdGhlIHNjYW4gaW4gdGhlXG4rXHQgKiByZXNlcnZlZCBwcm9jZXNzb3IgbWVtb3J5LiBUaGUgUk1QIHNjYW4gaXMgdGhlIG1vc3QgZXhwZW5zaXZlXG4rXHQgKiBwYXJ0LiBJZiBhIHNlY29uZCBSTVBPUFQgb2NjdXJzLCBpdCBjYW4gc2tpcCB0aGUgZXhwZW5zaXZlIHNjYW5cbitcdCAqIGlmIHRoZXkgY2FuIHNlZSBhIGNhY2hlZCByZXN1bHQgaW4gdGhlIHJlc2VydmVkIHByb2Nlc3NvciBtZW1vcnkuXG4rXHQgKlxuK1x0ICogUnVuIFJNUE9QVCBvbiBvbmUgQ1BVIGZpcnN0ICh0aGUgbGVhZGVyKSwgdGhlbiBvbiBldmVyeSBvdGhlciBwcmltYXJ5XG4rXHQgKiB0aHJlYWQgKHRoZSBmb2xsb3dlcnMpLiAgQSBmb2xsb3dlciBza2lwcyB0aGUgZXhwZW5zaXZlIFJNUCBzY2FuIGJ5XG4rXHQgKiByZXVzaW5nIHRoZSBjYWNoZWQgc2NhbiByZXN1bHRzIHRoZSBsZWFkZXIgcHJvZHVjZWQuXG4rXHQgKlxuK1x0ICogbWlncmF0ZV9kaXNhYmxlKCkgcGlucyB0aGlzIHdvcmsgdG8gdGhlIGN1cnJlbnQgQ1BVIHNvIGl0IHN0YXlzIHRoZVxuK1x0ICogbGVhZGVyIGZvciB0aGUgd2hvbGUgbGVhZGVyIGxvb3A6IHRoaXNfY3B1IHJlbWFpbnMgdmFsaWQgYW5kIHRoZVxuK1x0ICogUk1QT1BUIGluc3RydWN0aW9uIHJ1bnMgb24gaXQuXG4rXHQgKi9cbitcdG1pZ3JhdGVfZGlzYWJsZSgpO1xuK1x0dGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XG4rXG4rXHRjcHVtYXNrX2FuZG5vdChybXBvcHRfZm9sbG93ZXJfbWFzaywgcm1wb3B0X2NwdW1hc2ssXG4rXHRcdCAgICAgICB0b3BvbG9neV9zaWJsaW5nX2NwdW1hc2sodGhpc19jcHUpKTtcbitcbitcdHJtcG9wdF9zY2FuX3JhbmdlKE5VTEwpO1xuK1xuK1x0bWlncmF0ZV9lbmFibGUoKTtcbitcbitcdC8qXG4rXHQgKiBGb2xsb3dlcnM6IG9uZSBJUEkgcGVyIHJlbWFpbmluZyBjb3JlLCBlYWNoIG9wdGltaXppbmcgdGhlIHdob2xlXG4rXHQgKiByYW5nZS4gIEVhY2ggcnVucyB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQsIGJ1dCBvbmx5IGlzc3VlcyBjYWNoZS1oaXRcbitcdCAqIFJNUE9QVHMgKHRoZSBsZWFkZXIgcG9wdWxhdGVkIHRoZSBzY2FuIGNhY2hlIGFib3ZlKSwgc28gdGhlIHdpbmRvdyBpc1xuK1x0ICogc2hvcnQuICBjcHVzX3JlYWRfbG9jaygpIGlzIGludGVudGlvbmFsbHkgbm90IGhlbGQ6IENQVSBob3RwbHVnIGlzXG4rXHQgKiBkaXNhYmxlZCB0aGUgZW50aXJlIHRpbWUgU05QIGlzIGFjdGl2ZSAoc2VlIHNucF9wcmVwYXJlKCkpLCBhbmQgdGhpc1xuK1x0ICogd29yayBvbmx5IHJ1bnMgd2hpbGUgU05QIGlzIGFjdGl2ZSwgc28gdGhlIGZvbGxvd2VyIHNldCBzdGF5cyB2YWxpZC5cbitcdCAqL1xuK1x0b25fZWFjaF9jcHVfbWFzayhybXBvcHRfZm9sbG93ZXJfbWFzaywgcm1wb3B0X3NjYW5fcmFuZ2UsIE5VTEwsIHRydWUpO1xuK31cbitcbisvKlxuKyAqIERlbGF5LCBpbiBtaWxsaXNlY29uZHMsIGJlZm9yZSB0aGUgUk1QIHJlLW9wdGltaXphdGlvbiBwYXNzIHJ1bnMgYWZ0ZXIgYW5cbisgKiBTTlAgZ3Vlc3QgaXMgdG9ybiBkb3duLiAgc25wX3JtcG9wdF9hbGxfcGh5c21lbSgpIHJlLWFybXMgdGhlIGRlbGF5ZWQgd29ya1xuKyAqIHdpdGggbW9kX2RlbGF5ZWRfd29yaygpIG9uIGVhY2ggdGVhcmRvd24sIHNvIHRoZSBwYXNzIGZpcmVzIHRoaXMgbG9uZyBhZnRlclxuKyAqIHRoZSBsYXN0IHRlYXJkb3duLiAgVGhpcyBjb2FsZXNjZXMgYSBidXJzdCBvZiB0ZWFyZG93bnMgaW50byBhIHNpbmdsZSBzY2FuXG4rICogYW5kIGdpdmVzIGVhY2ggZ3Vlc3QncyBwYWdlcyB0aW1lIHRvIGJlIGNvbnZlcnRlZCBiYWNrIHRvIHRoZSBzaGFyZWQsXG4rICogaHlwZXJ2aXNvci1vd25lZCBzdGF0ZSBiZWZvcmUgdGhlIHNjYW4gcmUtb3B0aW1pemVzIHRoZWlyIDFHQiByZWdpb25zLiAgVGhlXG4rICogMTAgc2Vjb25kIHZhbHVlIGlzIGEgaGV1cmlzdGljIHRyYWRpbmcgcmUtb3B0aW1pemF0aW9uIGxhdGVuY3kgYWdhaW5zdFxuKyAqIHNjYW5uaW5nIHRvbyBlYWdlcmx5LlxuKyAqL1xuKyNkZWZpbmUgUk1QT1BUX1dPUktfVElNRU9VVFx0KDEwICogTVNFQ19QRVJfU0VDKVxuK1xuK3ZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKVxuK3tcbitcdGlmICghcm1wb3B0X2NhcGFibGUoKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJtcG9wdF93cV9tdXRleCk7XG4rXG4rXHRpZiAoIXJtcG9wdF93cSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0bW9kX2RlbGF5ZWRfd29yayhybXBvcHRfd3EsIFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmssXG4rXHRcdFx0IG1zZWNzX3RvX2ppZmZpZXMoUk1QT1BUX1dPUktfVElNRU9VVCkpO1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9ybXBvcHRfYWxsX3BoeXNtZW0sIFwia3ZtLWFtZFwiKTtcbitcbit2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZClcbit7XG4rXHR1NjQgcm1wb3B0X2Jhc2U7XG4rXHRpbnQgY3B1O1xuK1xuK1x0aWYgKCFybXBvcHRfY2FwYWJsZSgpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2cm1wb3B0X3dxX211dGV4KTtcbitcbitcdC8qXG4rXHQgKiBPbiByZS1pbml0aWFsaXphdGlvbiBhZnRlciBhIGxlZ2FjeSBTTlAgc2h1dGRvd24gKFNOUF9TSFVURE9XTl9FWFxuK1x0ICogd2l0aCB4ODZfc25wX3NodXRkb3duPTApLCBzbnBfc2h1dGRvd24oKSBhbmQgdGh1cyBzbnBfY2xlYW51cF9ybXBvcHQoKVxuK1x0ICogYXJlIHNraXBwZWQsIHNvIHRoZSB3b3JrcXVldWUsIGRlbGF5ZWQgd29yaywgY3B1bWFzayBhbmQgcGVyLUNQVVxuK1x0ICogUk1QT1BUX0JBU0UgTVNScyBhcmUgc3RpbGwgc2V0IHVwIGFuZCB2YWxpZCAoU25wRW4gc3RheWVkIHNldCBhbmRcbitcdCAqIENQVSBob3RwbHVnIHN0YXllZCBkaXNhYmxlZCkuICBSYXRoZXIgdGhhbiByZS1kb2luZyB0aGUgc2V0dXAsIHdoaWNoXG4rXHQgKiB3b3VsZCBsZWFrIHRoZSBleGlzdGluZyBzdGF0ZSwganVzdCByZS1xdWV1ZSB0aGUgb3B0aW1pemF0aW9uIHBhc3NcbitcdCAqIHRvIHJlLW9wdGltaXplIGFueSBtZW1vcnkgdGhlIHByZXZpb3VzIFNOUCBzZXNzaW9uIGRlLW9wdGltaXplZC5cbitcdCAqL1xuK1x0aWYgKHJtcG9wdF93cSkge1xuK1x0XHRxdWV1ZV9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLCAwKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIENyZWF0ZSBhbiBSTVBPUFQtc3BlY2lmaWMgd29ya3F1ZXVlIHRvIGF2b2lkIHNjaGVkdWxpbmdcbitcdCAqIFJNUE9QVCB3b3JraXRlbSBvbiB0aGUgZ2xvYmFsIHN5c3RlbSB3b3JrcXVldWUuXG4rXHQgKi9cbitcdHJtcG9wdF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcInJtcG9wdF93cVwiLCBXUV9VTkJPVU5ELCAxKTtcbitcdGlmICghcm1wb3B0X3dxKSB7XG4rXHRcdHByX2VycihcIkZhaWxlZCB0byBhbGxvY2F0ZSBSTVBPUFQgd29ya3F1ZXVlXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLCBybXBvcHRfd29ya19oYW5kbGVyKTtcbitcbitcdGlmICghemFsbG9jX2NwdW1hc2tfdmFyKFx1MDAyNnJtcG9wdF9jcHVtYXNrLCBHRlBfS0VSTkVMKSkge1xuK1x0XHRwcl9lcnIoXCJGYWlsZWQgdG8gYWxsb2NhdGUgUk1QT1BUIGNwdW1hc2tcXG5cIik7XG4rXHRcdGRlc3Ryb3lfd29ya3F1ZXVlKHJtcG9wdF93cSk7XG4rXHRcdHJtcG9wdF93cSA9IE5VTEw7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmICghemFsbG9jX2NwdW1hc2tfdmFyKFx1MDAyNnJtcG9wdF9mb2xsb3dlcl9tYXNrLCBHRlBfS0VSTkVMKSkge1xuK1x0XHRwcl9lcnIoXCJGYWlsZWQgdG8gYWxsb2NhdGUgUk1QT1BUIGZvbGxvd2VyIGNwdW1hc2tcXG5cIik7XG4rXHRcdGZyZWVfY3B1bWFza192YXIocm1wb3B0X2NwdW1hc2spO1xuK1x0XHRkZXN0cm95X3dvcmtxdWV1ZShybXBvcHRfd3EpO1xuK1x0XHRybXBvcHRfd3EgPSBOVUxMO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogVGhlIFJNUE9QVF9CQVNFIE1TUiBpcyBwZXItY29yZSwgc28gb25seSBvbmUgdGhyZWFkIHBlciBjb3JlIG5lZWRzXG4rXHQgKiB0byBzZXQgdXAgdGhlIFJNUE9QVF9CQVNFIE1TUi4gIEFsbCBwcmltYXJ5IHRocmVhZHMgYXJlIG9ubGluZSxcbitcdCAqIG90aGVyd2lzZSBTTlAgd291bGQgbm90IGhhdmUgYmVlbiBlbmFibGVkLlxuK1x0ICovXG4rXHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSlcbitcdFx0aWYgKHRvcG9sb2d5X2lzX3ByaW1hcnlfdGhyZWFkKGNwdSkpXG4rXHRcdFx0Y3B1bWFza19zZXRfY3B1KGNwdSwgcm1wb3B0X2NwdW1hc2spO1xuK1xuK1x0cm1wb3B0X3BhX3N0YXJ0ID0gQUxJR05fRE9XTihQRk5fUEhZUyhtaW5fbG93X3BmbiksIFNaXzFHKTtcbitcdHJtcG9wdF9iYXNlID0gcm1wb3B0X3BhX3N0YXJ0IHwgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEU7XG4rXG4rXHQvKlxuK1x0ICogUGVyLUNQVSBSTVBPUFQgdGFibGVzIGNvdmVyIGF0IG1vc3QgMiBUQi4gIFByb2dyYW0gZWFjaCBjb3JlJ3NcbitcdCAqIFJNUE9QVF9CQVNFIHdpdGggdGhlIHN0YXJ0IG9mIFJBTSB0byBvcHRpbWl6ZSB1cCB0byAyIFRCLlxuK1x0ICovXG4rXHRmb3JfZWFjaF9jcHUoY3B1LCBybXBvcHRfY3B1bWFzaylcbitcdFx0d3Jtc3JxX29uX2NwdShjcHUsIE1TUl9BTUQ2NF9STVBPUFRfQkFTRSwgcm1wb3B0X2Jhc2UpO1xuK1xuK1x0cm1wb3B0X3BhX2VuZCA9IEFMSUdOKFBGTl9QSFlTKG1heF9wZm4pLCBTWl8xRyk7XG4rXG4rXHQvKiBMaW1pdCBtZW1vcnkgc2Nhbm5pbmcgdG8gMlRCIG9mIFJBTSAqL1xuK1x0aWYgKChybXBvcHRfcGFfZW5kIC0gcm1wb3B0X3BhX3N0YXJ0KSBcdTAwM2UgU1pfMlQpIHtcbitcdFx0cHJfaW5mbyhcIlJNUE9QVCBjb3ZlcmFnZSBsaW1pdGVkIHRvIDJUQjsgbWVtb3J5IGFib3ZlIDB4JWxseCBub3Qgb3B0aW1pemVkXFxuXCIsXG4rXHRcdFx0cm1wb3B0X3BhX3N0YXJ0ICsgU1pfMlQpO1xuK1x0XHRybXBvcHRfcGFfZW5kID0gcm1wb3B0X3BhX3N0YXJ0ICsgU1pfMlQ7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogT25jZSBhbGwgcGVyLUNQVSBSTVBPUFQgdGFibGVzIGhhdmUgYmVlbiBjb25maWd1cmVkLCBlbmFibGUgUk1QT1BUXG4rXHQgKiBvcHRpbWl6YXRpb25zIG9uIGFsbCBwaHlzaWNhbCBtZW1vcnkuXG4rXHQgKi9cbitcdHF1ZXVlX2RlbGF5ZWRfd29yayhybXBvcHRfd3EsIFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmssIDApO1xuK1xuK1x0cHJfaW5mbyhcIlJNUE9QVCBvcHRpbWl6YXRpb25zIGVuYWJsZWRcXG5cIik7XG4rfVxuK0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NldHVwX3JtcG9wdCwgXCJjY3BcIik7XG4rXG4gLypcbiAgKiBEbyB0aGUgbmVjZXNzYXJ5IHByZXBhcmF0aW9ucyB3aGljaCBhcmUgdmVyaWZpZWQgYnkgdGhlIGZpcm13YXJlIGFzXG4gICogZGVzY3JpYmVkIGluIHRoZSBTTlBfSU5JVF9FWCBmaXJtd2FyZSBjb21tYW5kIGRlc2NyaXB0aW9uIGluIHRoZSBTTlBcbkBAIC01NzcsNiArODE5LDggQEAgRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2h1dGRvd24sIFwiY2NwXCIpO1xuICAqL1xuIGludCBfX2luaXQgc25wX3JtcHRhYmxlX2luaXQodm9pZClcbiB7XG4rXHR1NjQgdmFsO1xuK1xuIFx0aWYgKFdBUk5fT05fT05DRSghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSkpXG4gXHRcdHJldHVybiAtRU5PU1lTO1xuIFxuQEAgLTU4Niw2ICs4MzAsMTUgQEAgaW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxuIFx0aWYgKCFzZXR1cF9ybXB0YWJsZSgpKVxuIFx0XHRyZXR1cm4gLUVOT1NZUztcbiBcbitcdC8qXG4rXHQgKiBPbiBhIGtleGVjIGJvb3QgU05QIG1heSBhbHJlYWR5IGJlIGVuYWJsZWQgKGxlZ2FjeSBmaXJtd2FyZSBsZWF2ZXNcbitcdCAqIFNucEVuIHNldCBhY3Jvc3Mgc2h1dGRvd24pLCBpbiB3aGljaCBjYXNlIHNucF9wcmVwYXJlKCkgYmFpbHMgd2l0aG91dFxuK1x0ICogZGlzYWJsaW5nIENQVSBob3RwbHVnLCBzbyBkaXNhYmxlIGl0IGhlcmUuXG4rXHQgKi9cbitcdHJkbXNycShNU1JfQU1ENjRfU1lTQ0ZHLCB2YWwpO1xuK1x0aWYgKHZhbCBcdTAwMjYgTVNSX0FNRDY0X1NZU0NGR19TTlBfRU4pXG4rXHRcdGNwdV9ob3RwbHVnX2Rpc2FibGUoKTtcbitcbiBcdC8qXG4gXHQgKiBTZXR0aW5nIGNyYXNoX2tleGVjX3Bvc3Rfbm90aWZpZXJzIHRvICd0cnVlJyB0byBlbnN1cmUgdGhhdCBTTlAgcGFuaWNcbiBcdCAqIG5vdGlmaWVyIGlzIGludm9rZWQgdG8gZG8gU05QIElPTU1VIHNodXRkb3duIGJlZm9yZSBrZHVtcC5cbkBAIC02ODMsMTMgKzkzNiwyMSBAQCBzdGF0aWMgYm9vbCBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbyh2b2lkKVxuIFxuIGJvb2wgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8odm9pZClcbiB7XG4tXHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TRUdNRU5URURfUk1QKSlcbitcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFR01FTlRFRF9STVApKSB7XG4gXHRcdHJkbXNycShNU1JfQU1ENjRfUk1QX0NGRywgcm1wX2NmZyk7XG4gXG4tXHRpZiAocm1wX2NmZyBcdTAwMjYgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRClcbi1cdFx0cmV0dXJuIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKCk7XG4tXHRlbHNlXG4tXHRcdHJldHVybiBwcm9iZV9jb250aWd1b3VzX3JtcHRhYmxlX2luZm8oKTtcbitcdFx0aWYgKHJtcF9jZmcgXHUwMDI2IE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRUQpXG4rXHRcdFx0cmV0dXJuIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKCk7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogU2VnbWVudGVkIFJNUCBpcyBlaXRoZXIgbm90IHN1cHBvcnRlZCBvbiB0aGUgcGxhdGZvcm0gb3IgaXNcbitcdCAqIGRpc2FibGVkIGJ5IHRoZSBmaXJtd2FyZS4gIFJNUE9QVCBpcyBub3Qgc3VwcG9ydGVkIHdpdGhvdXRcbitcdCAqIHNlZ21lbnRlZCBSTVAuXG4rXHQgKi9cbitcdHNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfUk1QT1BUKTtcbitcbitcdHJldHVybiBwcm9iZV9jb250aWd1b3VzX3JtcHRhYmxlX2luZm8oKTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jIGIvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY1xuaW5kZXggY2E0NzNjYTE5OGI4MS4uZGExMmRkZjFmNDEyNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcbisrKyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcbkBAIC0xNTEwLDYgKzE1MTAsOCBAQCBzdGF0aWMgaW50IF9fc2V2X3NucF9pbml0X2xvY2tlZChpbnQgKmVycm9yLCB1bnNpZ25lZCBpbnQgbWF4X3NucF9hc2lkKVxuIFxuIFx0c2V2X2VzX3Rtcl9zaXplID0gU05QX1RNUl9TSVpFO1xuIFxuK1x0c25wX3NldHVwX3JtcG9wdCgpO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzM6MDAuOTY3NzA0ODg1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4MzI0Nzc0OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBTUQgUk1QT1BUIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQgYWRkcyBzdXBwb3J0IGZvciB0aGUgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbi4gSXQgc2VlbXMgbGlrZSBpdCdzIHRvdWNoaW5nIHNldmVyYWwgY29yZSBhcmVhczogYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGhlYWRlcnMsIHRoZSBrZXJuZWwncyBDUFUgZmVhdHVyZXMsIE1TUnMsIGFuZCBTRVYtcmVsYXRlZCBjb2RlLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGF0IFJNUE9QVCBpcyB0aWVkIHRvIFNFVi1TTlAuIFRoZSBmaWxlcyBtb2RpZmllZCBpbmNsdWRlIGBjcHVmZWF0dXJlcy5oYCwgYG1zci1pbmRleC5oYCwgYHNldi5oYCwgYXMgd2VsbCBhcyBzZXZlcmFsIEMgZmlsZXMgZGVhbGluZyB3aXRoIHNjYXR0ZXJlZCBtZW1vcnksIEtWTSwgYW5kIHRoZSBDQ1AgKGNyeXB0byBjby1wcm9jZXNzb3IpIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGZ1bmN0aW9ucyBsaWtlIGBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKClgIGFuZCBgc25wX3NldHVwX3JtcG9wdCgpYCBhbmQgcmVsaWVzIG9uIHRoZSBgWDg2X0ZFQVRVUkVfUk1QT1BUYCBhbmQgYE1TUl9BTUQ2NF9STVBPUFRfQkFTRWAgZGVmaW5pdGlvbnMuIEFsbCB0aGUgcGllY2VzIGZpdCwgUk1QT1BUIGxvb2tzIHRvIGJlIGEga2V5IGVsZW1lbnQgb2YgU0VWLVNOUC5cblxuVGhlIGJpZyBxdWVzdGlvbiBpbiBteSBtaW5kIGlzIHJlYWNoYWJpbGl0eSwgcGFydGljdWxhcmx5IHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBDb25zaWRlcmluZyB0aGlzIGlzIGFuIFNFVi1TTlAgZmVhdHVyZSwgaXQgdXN1YWxseSByZXF1aXJlcyBkZWRpY2F0ZWQgQU1EIGhhcmR3YXJlIHRvIGJlIHRydWx5IGVmZmVjdGl2ZS4gS1ZNIGNhbiBlbXVsYXRlIG9yIHBhc3MgdGhyb3VnaCBzb21lIGZlYXR1cmVzLCBidXQgdGhlIHJlYWwgcG93ZXIgb2YgU0VWLVNOUCBpcyBvZnRlbiBsb3N0IGluIGVtdWxhdGlvbi4gU3l6a2FsbGVyIGlzIGEga2V5IHRlc3RpbmcgdG9vbCwgYW5kIHRoZSBmYWN0IHRoYXQgaXQncyBydW4gb24gR0NFIGlzIGludHJpZ3VpbmcuIEhvd2V2ZXIsIGRvZXMgR0NFIG9mZmVyIEFNRCBTRVYtU05QIGluc3RhbmNlcz8gQWgsIHllcywgR29vZ2xlIENsb3VkIGRvZXMgaGF2ZSBDb25maWRlbnRpYWwgVk1zIGJhc2VkIG9uIFNFViBhbmQgU0VWLVNOUC4gSG93ZXZlciwgSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgc3l6a2FsbGVyIHR5cGljYWxseSBydW5zIG9uIHN0YW5kYXJkIGluc3RhbmNlcywgd2hpY2ggYXJlIGUyLXN0YW5kYXJkIG9yIG4yLXN0YW5kYXJkLiBJdCdzIG5vdCB1c3VhbGx5IHNwZWNpZmljYWxseSBjb25maWd1cmVkIHRvIHRhcmdldCBDb25maWRlbnRpYWwgVk1zLlxuXG5TbywgZG9lcyBzeXprYWxsZXIgYWN0dWFsbHkgKnJlYWNoKiB0aGlzIGNvZGU/IEV2ZW4gaWYgdGhlIGhvc3QgZG9lc24ndCBoYXZlIG5hdGl2ZSBTRVYtU05QLCBpZiB0aGUgaG9zdCBrZXJuZWwgKml0c2VsZiogc3VwcG9ydHMgdGhpcyBmdW5jdGlvbmFsaXR5LCBzeXprYWxsZXIgY291bGQgc3RpbGwgYmUgdGVzdGluZyBpdC4gU3l6a2FsbGVyIHRlc3RzIHRoZSBob3N0IGtlcm5lbCwgd2hpY2ggaXMgYSBrZXkgZWxlbWVudC4gQnV0IHRoYXQgYnJpbmdzIG1lIHRvIGFub3RoZXIgcG9pbnQsIHRoZSBob3N0IGtlcm5lbCBydW5uaW5nIG9uIEdDRSBtaWdodCBub3QgZXZlbiAqaGF2ZSogU0VWLVNOUCBlbmFibGVkLlxuXG5UaGVyZWZvcmUsIGlzIHRoaXMgY29kZSBldmVuIHJlYWNoYWJsZT8gSSBzaG91bGQgaW52ZXN0aWdhdGUgd2hldGhlciBgWDg2X0ZFQVRVUkVfUk1QT1BUYCBjYW4gYmUgXCJmYWtlZFwiIG9yIHdoZXRoZXIgdGhlcmUgYXJlIHNwZWNpZmljIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZSBjb2RlJ3MgZXhlY3V0aW9uLiBMb29raW5nIGF0IHRoZSBjb2RlIGluIGBhcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY2AgYW5kIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCwgSSdtIGxvb2tpbmcgZm9yIGVudHJ5IHBvaW50cy4gT2theSwgaGVyZSdzIGEgY3J1Y2lhbCBzbmlwcGV0IGZyb20gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgOlxuXG5gYGBjXG52b2lkIHNldl92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcbntcbi4uLlxuXHRcdGlmIChzbnBfZGVjb21taXNzaW9uX2NvbnRleHQoa3ZtKSlcblx0XHRcdHJldHVybjtcblxuXHRcdHNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKTtcbi4uLlxuYGBgXG5cbkFoLCBpdCdzIGNhbGxlZCBkdXJpbmcgdGhlIGRlc3RydWN0aW9uIG9mIGEgU0VWLVNOUCBWTS4gSW50ZXJlc3RpbmcuIENhbiBzeXprYWxsZXIgKmNyZWF0ZSogYSBTRVYtU05QIFZNPyBUaGF0J3MgdGhlIHJlYWwgdGVzdC4gSXQgd291bGQgbmVlZCBgL2Rldi9zZXZgIGFuZCBLVk0gU0VWIHN1cHBvcnQuIE5vdywgSSBzaG91bGQgbG9vayBpbnRvIHdoZXRoZXIgYENPTkZJR19LVk1fQU1EX1NFVmAgaXMgYWN0dWFsbHkgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgc2VhcmNoIGZvciByZWxhdGVkIG9wdGlvbnMsIHBhcnRpY3VsYXJseSBgQ09ORklHX0tWTV9BTURgIGFuZCBgQ09ORklHX0NSWVBUT19ERVZfU1BfQ0NQYCwgd2hpY2ggc2VlbXMgcmVsYXRlZCB0byB0aGUgQ0NQIGNvbXBvbmVudC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBsaWtlbHkgdGhpcyBjb2RlIGlzIHRvIGJlIHRyaWdnZXJlZCBpbiBzeXprYWxsZXIncyBjdXJyZW50IGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjE1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzM6MTEuODAwMTg1NDE5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NDE1MDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQU1EXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTEzND1jb25maWcgS1ZNX0lOVEVMX1REWFxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzM6MTEuODg3NjA1OTczWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwMTc0Mzk1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBTdGF0ZSBvZiBgQ09ORklHX0tWTV9BTURfU0VWYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBzdGF0ZSBvZiBgQ09ORklHX0tWTV9BTURfU0VWYC4gR2l2ZW4gdGhlIGNvbnRleHQsIHRoaXMgbGlrZWx5IG1lYW5zIEknbSB0cm91Ymxlc2hvb3Rpbmcgb3IgaW52ZXN0aWdhdGluZyBzb21lIGJlaGF2aW9yIHJlbGF0ZWQgdG8gQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgd2l0aGluIGEgS1ZNIGVudmlyb25tZW50LiBJJ20gcHJvYmFibHkgbG9va2luZyBhdCBhIGNvbmZpZ3VyYXRpb24gZmlsZSwgYSBidWlsZCBzeXN0ZW0sIG9yIHBlcmhhcHMgc29tZSBrZXJuZWwgb3V0cHV0IG9yIGxvZ3MuIFRoZSBzcGVjaWZpY3MgZGVwZW5kIG9uIHdoYXQgSSdtIHRyeWluZyB0byBhY2hpZXZlLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hldGhlciBTRVYgc3VwcG9ydCBpcyBlbmFibGVkLiBJcyBpdCBzZXQgdG8gXCJ5XCIgKGJ1aWx0LWluKSwgXCJtXCIgKG1vZHVsZSksIG9yIGRpc2FibGVkPyBUaGUgYW5zd2VyIHdpbGwgaGVhdmlseSBpbmZsdWVuY2UgbXkgbmV4dCBzdGVwcy4gSWYgaXQncyBkaXNhYmxlZCwgSSBrbm93IHRoYXQncyB0aGUgcm9vdCBjYXVzZSBhbmQgSSdsbCBuZWVkIHRvIHJlY29uZmlndXJlIGFuZCByZWJ1aWxkLCBvciByZS1ldmFsdWF0ZSB0aGUgcmVsZXZhbnQgbW9kdWxlLiBBIG1vZHVsZSBzZXR1cCBtaWdodCBiZSBva2F5LCBidXQgSSdsbCBzdGlsbCBoYXZlIHRvIGNoZWNrIGlmIGl0J3MgbG9hZGluZyBjb3JyZWN0bHkuXG5cbklmIGl0ICppcyogZW5hYmxlZCwgdGhlbiBJJ2xsIG5lZWQgdG8gZHJpbGwgZG93biBkZWVwZXIgdG8gdW5kZXJzdGFuZCB3aGF0IGlzc3VlcyBhcmUgYXBwZWFyaW5nLiBJJ2xsIG5lZWQgdG8gZ28gdG8gdGhlIGhhcmR3YXJlLCB0aGUgQklPUywgS1ZNIHNldHVwLCBhbmQga2VybmVsIHZlcnNpb25zLiBUaGlzIGlzIGEgY3J1Y2lhbCBmaXJzdCBzdGVwOyBJIGNhbid0IHByb2NlZWQgd2l0aG91dCBjb25maXJtaW5nIHRoaXMgaW5pdGlhbCBjb25maWd1cmF0aW9uIGVsZW1lbnQuIFRoZSBvdXRjb21lIG9mIHRoaXMgY2hlY2sgd2lsbCBkZWZpbmUgdGhlIG5leHQgcGhhc2Ugb2YgdGhpcyBkZWJ1Z2dpbmcgb3IgaW52ZXN0aWdhdGl2ZSBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODM4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzM6MTUuNDg5MzUyMzg4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNTU1NDczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQU1EX1NFVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNDY9Y29uZmlnIEtWTV9BTURcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjMzOjE1LjU4MTkzMzczMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDIwNDc4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYENPTkZJR19DUllQVE9fREVWX1NQX0NDUGAgQ29uZmlndXJhdGlvbiBPcHRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGUgYENPTkZJR19DUllQVE9fREVWX1NQX0NDUGAgb3B0aW9uLiBUaGlzIGxpa2VseSBpbmRpY2F0ZXMgd2UncmUgZGVhbGluZyB3aXRoIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiDigJMgc3BlY2lmaWNhbGx5LCB0aGUgU2Ftc3VuZyBDcnlwdG8gUHJvY2Vzc29yIChDQ1ApIOKAkyBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogd2hhdCdzIHRoZSBicm9hZGVyIHN5c3RlbSBjb250ZXh0PyBJcyB0aGlzIGZvciBhIHNwZWNpZmljIGtlcm5lbCB2ZXJzaW9uPyBXaGF0J3MgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmU/IFRoYXQgd2lsbCBpbmZvcm0gaG93IGRlZXBseSBJIG5lZWQgdG8gZ28gdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2hlY2sgZm9yIGRlcGVuZGVuY2llcy4gQXJlIHRoZXJlIGFueSBwcmVyZXF1aXNpdGVzIGluIHRlcm1zIG9mIG90aGVyIGNyeXB0byBkZXZpY2UgZHJpdmVycyBvciBrZXkgbWFuYWdlbWVudCBtb2R1bGVzPyBBbmQsIG9mIGNvdXJzZSwgdGhlIGV2ZXItcHJlc2VudCBzZWN1cml0eSBjb25zaWRlcmF0aW9uczogd2hhdCB2dWxuZXJhYmlsaXRpZXMgaGFzIHRoaXMgbW9kdWxlIGZhY2VkIGluIHRoZSBwYXN0LCBhbmQgd2hhdCBoYXJkZW5pbmcgdGVjaG5pcXVlcyBhcmUgYXBwbGllZD8gSSB3YW50IHRvIGFzc2VzcyB0aGUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIG1ldHJpY3MgdG9vLiBJZiB0aGlzIGhhcmR3YXJlIGFjY2VsZXJhdG9yIGlzbid0IHByb3Blcmx5IGNvbmZpZ3VyZWQgb3IgdXRpbGl6ZWQsIGl0IGNhbiBoYXZlIHNlcmlvdXMgcGVyZm9ybWFuY2UgZHJhd2JhY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMxNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjMzOjE4LjkyMzk4NTc3NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjcwMzIwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ1JZUFRPX0RFVl9TUF9DQ1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWc9Mj1jb25maWcgQ1JZUFRPX0RFVl9DQ1BfRERcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTktXFxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWc6MTA6Y29uZmlnIENSWVBUT19ERVZfU1BfQ0NQXFxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMTEtXFx0Ym9vbCBcXFwiQ3J5cHRvZ3JhcGhpYyBDb3Byb2Nlc3NvciBkZXZpY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjMzOjE4Ljk5MDY5NDIyMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTQ2Mzk2MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCBzZWVtcyB0aGV5J3ZlIGludHJvZHVjZWQgYHNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKWAgYW5kIGBzbnBfc2V0dXBfcm1wb3B0KClgIOKAkyBpbnRlcmVzdGluZy4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjbGVhcmx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFNFViBjb250ZXh0LCBhbmQgdGhleSdyZSBsb2NhdGVkIGluIGBhcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkFscmlnaHQsIGxldCdzIG1ha2Ugc3VyZSB0aGlzIGBzZXYuY2AgZmlsZSBpcyBhY3R1YWxseSBnZXR0aW5nIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBpbWFnZS5cIiBJdCdzIGNyaXRpY2FsIHRvIHZlcmlmeSB0aGF0IHRoZSBTRVYtc3BlY2lmaWMgY29kZSBpcyBwcmVzZW50IGFuZCBhY3RpdmUsIG90aGVyd2lzZSwgdGhlc2UgbmV3IGZ1bmN0aW9ucyBhcmUganVzdCBkZWFkIHdlaWdodCBhbmQgcG90ZW50aWFsIHBvaW50cyBvZiBjb25mdXNpb24uIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBjb21wb25lbnQgaXMgY29tcGlsZWQgYXMgcGFydCBvZiB0aGUgc3lzdGVtJ3MgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2ODUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozMzoyMi4wNDUzMzY3NzVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MzkxOTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldlxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni92aXJ0L3N2bS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni92aXJ0L3N2bS9NYWtlZmlsZS0yLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX0tWTV9BTURfU0VWKSArPSBzZXYub1xcbmFyY2gveDg2L3ZpcnQvc3ZtL01ha2VmaWxlLTQtb2JqLSQoQ09ORklHX0NQVV9TVVBfQU1EKSArPSBjbWRsaW5lLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzM6MjIuMTQ0NzM0NjM4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDUwMDQzOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTRVYgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBLVk0vU0VWIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBDT05GSUdfS1ZNX0FNRF9TRVZgIGlzIHRoZSBrZXkuIEJ1dCBob2xkIG9uLCB0aGUgYnVpbGQgc3lzdGVtIHNlZW1zIHRvIGNvbmRpdGlvbmFsbHkgY29tcGlsZSBgYXJjaC94ODYvdmlydC9zdm0vc2V2LmNgIGJhc2VkIG9uIHRoaXMgb3B0aW9uLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS5cblxuTm93LCBhIGJpdCBtb3JlIGRpZ2dpbmcgcmV2ZWFscyB0aGF0IGBDT05GSUdfS1ZNX0FNRF9TRVZgIGluIHR1cm4gaGluZ2VzIG9uIGBLVk1fQU1EYC4gVGhpcyBpbXBsaWVzIGEgaGllcmFyY2hpY2FsIGRlcGVuZGVuY3kuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIGBLVk1fQU1EX1NFVmAncyBkZXBlbmRlbmNpZXMgdG8gZW5zdXJlIEkndmUgYWNjb3VudGVkIGZvciBldmVyeSByZWxldmFudCBjb21wb25lbnQuIFRpbWUgdG8gY2hlY2sgdGhvc2UgZGVwZW5kZW5jaWVzIHRob3JvdWdobHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDU1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzM6MjYuMzQ5NzQzOTkxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjE4ODkwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0FNRF9TRVZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTQ2PWNvbmZpZyBLVk1fQU1EXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozMzoyNi40MTU5MzkzMjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzMDQxMDAxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBLVk0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIEtWTSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgb25lcyBkZWFsaW5nIHdpdGggeDg2IGFyY2hpdGVjdHVyZS4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgYXJjaC94ODYva3ZtL0tjb25maWdgIOKAkyBhcm91bmQgbGluZSAxNTYsIGlmIG1lbW9yeSBzZXJ2ZXMsIHRoYXQgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzZWN0aW9ucy4gTXkgaW50ZW50aW9uIGlzIGxpa2VseSB0byBmaWd1cmUgb3V0IHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkLCBvciBob3cgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXJlIGhhbmRsZWQuIE1pZ2h0IGJlIGxvb2tpbmcgZm9yIG9wdGlvbnMgcmVsYXRlZCB0byBhIHNwZWNpZmljIENQVSBmZWF0dXJlLCBvciBwZXJoYXBzIGZpZ3VyaW5nIG91dCBob3cgc29tZSBuZXcgZmVhdHVyZSBoYXMgYmVlbiBpbnRlZ3JhdGVkIGludG8gdGhlIEtWTSBjb25maWd1cmF0aW9uLiBOZWVkIHRvIGdldCBhIGdyYXNwIG9uIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHRzIGF0IHBsYXkgdGhlcmUsIHNvIEkgY2FuIG1vcmUgZnVsbHkgZ3Jhc3AgdGhlIGltcGFjdCBvZiBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGNob2ljZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDQ5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzM6MjkuNTQ2MzU1MDQ1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTA6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gQU1EIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCB0aGUgQU1ELVZcXG4gMTUxOlxcdFxcdCAgKFNWTSkgZXh0ZW5zaW9ucy5cXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTU0OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLWFtZC5cXG4gMTU1OlxcdFxcbiAxNTY6XFx0Y29uZmlnIEtWTV9BTURfU0VWXFxuIDE1NzpcXHRcXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbiAxNTg6XFx0XFx0ZGVmYXVsdCB5XFxuIDE1OTpcXHRcXHRkZXBlbmRzIG9uIEtWTV9BTUQgXFx1MDAyNlxcdTAwMjYgWDg2XzY0XFxuIDE2MDpcXHRcXHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfUFNQIFxcdTAwMjZcXHUwMDI2ICEoS1ZNX0FNRD15IFxcdTAwMjZcXHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pXFxuIDE2MTpcXHRcXHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cXG4gMTYyOlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbiAxNjM6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXFxuIDE2NDpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG4gMTY1OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcXG4gMTY2OlxcdFxcdGhlbHBcXG4gMTY3OlxcdFxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgbGF1bmNoaW5nIGVuY3J5cHRlZCBWTXMgd2hpY2ggdXNlIFNlY3VyZVxcbiAxNjg6XFx0XFx0ICBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFViksIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gd2l0aFxcbiAxNjk6XFx0XFx0ICBFbmNyeXB0ZWQgU3RhdGUgKFNFVi1FUyksIGFuZCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIHdpdGhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzM6MjkuNTQ2NDYzODU1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4Nzk2OTAzNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgbWVudGFsIGNoZWNrbGlzdCBiZWdpbnM6XG5cbioqRXhhbWluaW5nIHRoZSBEZXBlbmRlbmN5IFRyZWUgZm9yIEtWTV9BTURfU0VWKipcblxuUmlnaHQsIHNvIGBLVk1fQU1EX1NFVmAgcmVsaWVzIG9uIGBLVk1fQU1EYCwgYFg4Nl82NGAsIGFuZCBgQ1JZUFRPX0RFVl9TUF9QU1BgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgSSBhbHdheXMgZGlnIGRlZXBlci4gU2luY2UgYENSWVBUT19ERVZfU1BfUFNQYCBpcyBvbmUgb2YgdGhlIGRlcGVuZGVuY2llcywgbGV0J3MgZ28gYWhlYWQgYW5kIGRyaWxsIGRvd24gaW50byAqaXRzKiBkZXBlbmRlbmNpZXMsIGFuZCBtYWtlIHN1cmUgZXZlcnl0aGluZyB0aGVyZSBpcyBzaGlwc2hhcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDY4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozMzozMi40MjYxNTczNDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTc4OTg2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ1JZUFRPX0RFVl9TUF9QU1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWc9MjM9Y29uZmlnIENSWVBUT19ERVZfQ0NQX0NSWVBUT1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMzctXFxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWc6Mzg6Y29uZmlnIENSWVBUT19ERVZfU1BfUFNQXFxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMzktXFx0Ym9vbCBcXFwiUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApIGRldmljZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzM6MzIuNTM3OTYwMTc0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDk5NDkwMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBDQ1AgQ3J5cHRvIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgQ0NQIGNyeXB0byBkcml2ZXIuIExldCdzIHNlZS4uLiB0aGUgbW9zdCByZWxldmFudCBwbGFjZSB0byBzdGFydCBpcyBsaWtlbHkgdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgZHJpdmVyJ3MgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEknbGwgZm9jdXMgb24gYXJvdW5kIGxpbmUgMzguIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gSSBleHBlY3QgdG8gZmluZCB0aGUgbWFpbiBmZWF0dXJlIGZsYWdzLCBtYXliZSBzb21lIGRlcGVuZGVuY3kgY2hlY2tzLCBhbmQgcG90ZW50aWFsbHkgc29tZSBkZWZhdWx0IHNldHRpbmdzIG9yIGhlbHAgdGV4dCB0aGF0IG1pZ2h0IHNoZWQgbGlnaHQgb24gaG93IHRoaXMgZHJpdmVyIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYW5kIGNvbmZpZ3VyZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGtleSBvcHRpb25zLCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgY29uc3RyYWludHMgd2lsbCBiZSBjcml0aWNhbCBmb3IgY29tcHJlaGVuZGluZyBob3cgdG8gaW50ZWdyYXRlIG9yIG1vZGlmeSB0aGlzIGRyaXZlciB3aXRoaW4gYSBsYXJnZXIgc3lzdGVtLiBJJ20gbG9va2luZyBmb3IgdGhpbmdzIGxpa2Ugd2hldGhlciBpdCdzIG1vZHVsYXIsIGlmIGl0J3MgZ290IGFueSBoYXJkd2FyZSBkZXBlbmRlbmNpZXMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIga2VybmVsIGNyeXB0byBBUEkuIEhvcGVmdWxseSB0aGlzIHdpbGwgYmUgZW5vdWdoIHRvIGdldCBteSB1bmRlcnN0YW5kaW5nIHN0YXJ0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzc4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzM6MzUuOTg3OTExNzhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzA6XFx0XFx0c2VsZWN0IENSWVBUT19BVVRIRU5DXFxuICAzMTpcXHRcXHRzZWxlY3QgQ1JZUFRPX1JTQVxcbiAgMzI6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQUVTXFxuICAzMzpcXHRcXHRoZWxwXFxuICAzNDpcXHRcXHQgIFN1cHBvcnQgZm9yIHVzaW5nIHRoZSBjcnlwdG9ncmFwaGljIEFQSSB3aXRoIHRoZSBBTUQgQ3J5cHRvZ3JhcGhpY1xcbiAgMzU6XFx0XFx0ICBDb3Byb2Nlc3Nvci4gVGhpcyBtb2R1bGUgc3VwcG9ydHMgb2ZmbG9hZCBvZiBTSEEgYW5kIEFFUyBhbGdvcml0aG1zLlxcbiAgMzY6XFx0XFx0ICBJZiB5b3UgY2hvb3NlICdNJyBoZXJlLCB0aGlzIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjY3BfY3J5cHRvLlxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgQ1JZUFRPX0RFVl9TUF9QU1BcXG4gIDM5OlxcdFxcdGJvb2wgXFxcIlBsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKSBkZXZpY2VcXFwiXFxuICA0MDpcXHRcXHRkZWZhdWx0IHlcXG4gIDQxOlxcdFxcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9DQ1BfREQgXFx1MDAyNlxcdTAwMjYgWDg2XzY0IFxcdTAwMjZcXHUwMDI2IEFNRF9JT01NVVxcbiAgNDI6XFx0XFx0c2VsZWN0IFBDSV9UU00gaWYgUENJXFxuICA0MzpcXHRcXHRoZWxwXFxuICA0NDpcXHRcXHQgUHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgQU1EIFBsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKS5cXG4gIDQ1OlxcdFxcdCBUaGUgUFNQIGlzIGEgZGVkaWNhdGVkIHByb2Nlc3NvciB0aGF0IHByb3ZpZGVzIHN1cHBvcnQgZm9yIGtleVxcbiAgNDY6XFx0XFx0IG1hbmFnZW1lbnQgY29tbWFuZHMgaW4gU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBtb2RlLFxcbiAgNDc6XFx0XFx0IGFsb25nIHdpdGggc29mdHdhcmUtYmFzZWQgVHJ1c3RlZCBFeGVjdXRpb24gRW52aXJvbm1lbnQgKFRFRSkgdG9cXG4gIDQ4OlxcdFxcdCBlbmFibGUgdGhpcmQtcGFydHkgdHJ1c3RlZCBhcHBsaWNhdGlvbnMuXFxuICA0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzM6MzUuOTg3OTY5NTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxMzUwMTEyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZXBlbmRlbmN5IEFuYWx5c2lzIGZvciBDcnlwdG9ncmFwaGljIERldmljZSBTdXBwb3J0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYENSWVBUT19ERVZfU1BfUFNQYCBhbmQgaXQncyBmbGFnZ2VkIGFzIGRlcGVuZGluZyBvbiBhIGZldyBvdGhlciBjb21wb25lbnRzLiBGaXJzdCB1cCwgSSBzZWUgdGhhdCBpdCdzIHJlbHlpbmcgb24gYENSWVBUT19ERVZfQ0NQX0REYCwgYFg4Nl82NGAsIGFuZCBgQU1EX0lPTU1VYC4gTWFrZXMgc2Vuc2UuIEdpdmVuIHRoZSBQU1AgbGlrZWx5IGhhbmRsZXMgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zLCB0aGUgbmVlZCBmb3IgYSBzcGVjaWZpYyBDQ1AgKGNyeXB0byBjby1wcm9jZXNzb3IpIGRldmljZSBkcml2ZXIgbGlrZSBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBhbmQgdGhlIGhhcmR3YXJlIHJlcXVpcmVtZW50cyBmb3IgQU1ELXNwZWNpZmljIElPTU1VIHN1cHBvcnQsIHBsdXMgbmVlZGluZyBgWDg2XzY0YCBhcmNoaXRlY3R1cmUuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBkZXZpY2UgZHJpdmVyLiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgYENSWVBUT19ERVZfQ0NQX0REYCBhbmQgaXRzIGludGVyYWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NDgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjMzOjM5LjMwMTQ3NDQwNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBDUllQVE9fREVWX0NDUF9ERFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNlY3VyZSBQcm9jZXNzb3IgZGV2aWNlIGRyaXZlclxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQ1BVX1NVUF9BTUQgfHwgQVJNNjRcXG4gICA1OlxcdFxcdGRlZmF1bHQgbVxcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBQcm92aWRlcyBBTUQgU2VjdXJlIFByb2Nlc3NvciBkZXZpY2UgZHJpdmVyLlxcbiAgIDg6XFx0XFx0ICBJZiB5b3UgY2hvb3NlICdNJyBoZXJlLCB0aGlzIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjY3AuXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNvbmZpZyBDUllQVE9fREVWX1NQX0NDUFxcbiAgMTE6XFx0XFx0Ym9vbCBcXFwiQ3J5cHRvZ3JhcGhpYyBDb3Byb2Nlc3NvciBkZXZpY2VcXFwiXFxuICAxMjpcXHRcXHRkZWZhdWx0IHlcXG4gIDEzOlxcdFxcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9DQ1BfREQgXFx1MDAyNlxcdTAwMjYgRE1BREVWSUNFU1xcbiAgMTQ6XFx0XFx0c2VsZWN0IEhXX1JBTkRPTVxcbiAgMTU6XFx0XFx0c2VsZWN0IERNQV9FTkdJTkVcXG4gIDE2OlxcdFxcdHNlbGVjdCBDUllQVE9fU0hBMVxcbiAgMTc6XFx0XFx0c2VsZWN0IENSWVBUT19TSEEyNTZcXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgUHJvdmlkZXMgdGhlIHN1cHBvcnQgZm9yIEFNRCBDcnlwdG9ncmFwaGljIENvcHJvY2Vzc29yIChDQ1ApIGRldmljZVxcbiAgMjA6XFx0XFx0ICB3aGljaCBjYW4gYmUgdXNlZCB0byBvZmZsb2FkIGVuY3J5cHRpb24gb3BlcmF0aW9ucyBzdWNoIGFzIFNIQSwgQUVTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjMzOjM5LjMwMTU4MTczNloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTk4MjQzMDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUk1QT1BUIGFuZCBTRVYtU05QIEltcGxlbWVudGF0aW9uIGZvciBUZXN0aW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBlbnN1cmluZyB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYWNlOiBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIGBDUllQVE9fREVWX0NDUF9ERGAsIGBDUllQVE9fREVWX1NQX1BTUGAsIGFuZCBgQU1EX0lPTU1VYC4gTm93LCB0aGlua2luZyBhYm91dCBTeXprYWxsZXIsIGl0IGNyZWF0ZXMgVk1zIGZvciBLVk0gdGVzdGluZy4gVGhhdCdzIGtleS4gVGhlIHNwZWNpZmljIGZ1bmN0aW9uIEkgbmVlZCB0byB0ZXN0IGlzIGBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKClgLiBUbyBleGVjdXRlIHRoZSBjb2RlIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCBJIGhhdmUgdG8gZW5zdXJlIHRoYXQgYHJtcG9wdF9jYXBhYmxlKClgIHJldHVybnMgdHJ1ZS5cblxuYHJtcG9wdF9jYXBhYmxlKClgIGhpbmdlcyBvbiB0d28gY29uZGl0aW9uczogdGhlIGBYODZfRkVBVFVSRV9STVBPUFRgIENQVSBmZWF0dXJlIGJlaW5nIGVuYWJsZWQgYW5kIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAgYmVpbmcgcHJlc2VudC4gVGhlIGZpcnN0LCBgWDg2X0ZFQVRVUkVfUk1QT1BUYCwgaXMgdHlwaWNhbGx5IGRpc2NvdmVyZWQgdmlhIENQVUlELiBOb3csIHRoZSBTeXprYWxsZXIgdGVzdGluZyBlbnZpcm9ubWVudC4uLiBpdCBydW5zIGluc2lkZSBhIFZNLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGhvc3Qga2VybmVsIGZvciB0aGUgU3l6a2FsbGVyIGluc3RhbmNlICppcyogdGhlIGd1ZXN0IGtlcm5lbCBvZiB0aGUgb3V0ZXIgVk0gKGxpa2VseSBHQ0UsIGluIHRoaXMgY2FzZSkuIENhbiBTeXprYWxsZXIgZmFrZSBDUFVJRCByZXN1bHRzIHdpdGhpbiB0aGUgaG9zdCBrZXJuZWw/IE5vLCBpdCBjYW4ndC4gU28sIHRoZSBvdXRlciBWTSAoR0NFKSAqbXVzdCogZXhwb3NlIGJvdGggYFg4Nl9GRUFUVVJFX1JNUE9QVGAgYW5kIFNFVi1TTlAgc3VwcG9ydCB0byB0aGUgaW5uZXIgVk0gKHRoZSBTeXprYWxsZXIgaG9zdCkuXG5cblRoZSBiaWcgcXVlc3Rpb24gaXMsIGRvZXMgR0NFICphY3R1YWxseSogZXhwb3NlIHRoZXNlIGZlYXR1cmVzIHRvIG5lc3RlZCBWTXM/IE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBuZXN0ZWQgU0VWLVNOUCBpc24ndCBnZW5lcmFsbHkgc3VwcG9ydGVkIG9yIGF2YWlsYWJsZSBpbiBzdGFuZGFyZCBHQ0UgaW5zdGFuY2VzLiBUaGlzIGlzIGEgcHJvYmxlbS4gSWYgYHJtcG9wdF9jYXBhYmxlKClgIHJldHVybnMgZmFsc2UsIHRoZW4gdGhlIGZ1bmN0aW9uIGBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKClgIHdpbGwgcmV0dXJuIGVhcmx5LlxuXG5MZXQncyBsb29rIGZvciBhbHRlcm5hdGl2ZSBjb2RlIHBhdGhzLiBUaGUgZnVuY3Rpb24gYHNucF9zZXR1cF9ybXBvcHQoKWAgaXMgY2FsbGVkIGZyb20gYF9fc2V2X3NucF9pbml0X2xvY2tlZCgpYC4gVGhhdCBmdW5jdGlvbiBhbHNvIHJldHVybnMgZWFybHkgaWYgYHJtcG9wdF9jYXBhYmxlKClgIHJldHVybnMgZmFsc2UuIFNpbWlsYXJseSwgYHNucF9zaHV0ZG93bigpYCBjYWxscyBgc25wX2NsZWFudXBfcm1wb3B0KClgIHdoaWNoIHdpbGwgcmV0dXJuIGVhcmx5IGlmIGBzbnBfc2V0dXBfcm1wb3B0KClgIGhhc24ndCBiZWVuIHN1Y2Nlc3NmdWwuIFNvLCB0aGUgcG90ZW50aWFsIGNvZGUgcGF0aHMgYXJlIGxpbWl0ZWQuXG5cblRoZXJlIGlzIGFsc28gdGhlIGBzbnBfcHJlcGFyZSgpYCBmdW5jdGlvbiwgY2FsbGVkIGR1cmluZyBTTlAgaW5pdGlhbGl6YXRpb24uIEhlcmUgaXQgaGFzIGEgY2hlY2sgdGhhdCBhbGwgQ1BVcyBvbmxpbmUgYW5kIHByZXNlbnQgbXVzdCBtYXRjaC4gSWYgU0VWLVNOUCBpcyBub3Qgc3VwcG9ydGVkLCBgc25wX3ByZXBhcmUoKWAgbWlnaHQgbm90IGJlIGNhbGxlZCwgb3IgaXQgbWlnaHQgZmFpbCBxdWlja2x5LiBJIG5lZWQgdG8gdHJhY2UgYmFjayB3aGVyZSBgc25wX3ByZXBhcmUoKWAgaXMgY2FsbGVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ4OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjMzOjQ5LjMwMDc5OTY1OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgzNjk3MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNucF9wcmVwYXJlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0xMzU1PXN0YXRpYyBpbnQgX19zZXZfc25wX2luaXRfbG9ja2VkKGludCAqZXJyb3IsIHVuc2lnbmVkIGludCBtYXhfc25wX2FzaWQpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTEzNzctXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoxMzc4OlxcdHJjID0gc25wX3ByZXBhcmUoKTtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTEzNzktXFx0aWYgKHJjKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozMzo0OS44ODQ1MDExMjhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3MTExMjA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgX19zZXZfc25wX2luaXRfbG9ja2VkKClgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIGBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoKWAgZnVuY3Rpb24uIEkga25vdyB0aGlzIGlzIGEgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIFNFVi1TTlAgaW5pdGlhbGl6YXRpb24sIGFuZCBpdCdzIHByb2JhYmx5IHdoZXJlIGEgbG90IG9mIHRoZSBpbml0aWFsIHNldHVwIHRha2VzIHBsYWNlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBhcm91bmQgaGVyZSAtIGFyZSB3ZSBkZWFsaW5nIHdpdGggYSBtdXRleCwgYSBzcGlubG9jaywgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQ/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbmN1cnJlbmN5IGFzcGVjdCBpcyBwYXJhbW91bnQgdG8gdHJhY2tpbmcgZG93biBhbnkgcG90ZW50aWFsIGlzc3Vlcywgb3IgYXBwcmVjaWF0aW5nIHRoZSBkZXNpZ24gY2hvaWNlcyBtYWRlLiBMZXQncyBzZWUgaG93IHRoZXkncmUgaGFuZGxpbmcgYWNjZXNzIHRvIHRoZSBzaGFyZWQgc3RhdGUsIGFuZCB3aGF0IGtpbmQgb2YgY29udGVudGlvbiB0aGV5IGFudGljaXBhdGUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIG92ZXJhbGwgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIElzIHRoaXMgcGFydCBvZiB0aGUgZWFybHkgYm9vdCBwcm9jZXNzLCBvciBkb2VzIGl0IGdldCBjYWxsZWQgbGF0ZXI/IFdoYXQncyB0aGUgY29udGV4dCBpbiB3aGljaCB0aGlzIGxvY2sgaXMgaGVsZCBhbmQgcmVsZWFzZWQ/IEtub3dpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBnaXZlIG1lIHZhbHVhYmxlIGNsdWVzIGFib3V0IHRoZSBmdW5jdGlvbidzIHJlc3BvbnNpYmlsaXR5IGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uIEkgYWxzbyBuZWVkIHRvIG1ha2UgYSBtZW50YWwgbm90ZSBvZiBob3cgZXJyb3IgaGFuZGxpbmcgaXMgZG9uZSBoZXJlLCBhbmQgaG93IHRoZXkgaGFuZGxlIGZhaWx1cmUuIEknbSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIGdyYWNlZnVsIGV4aXQsIHNvIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGJhY2sgcGF0aHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTk0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzM6NTMuNDU1NjE2MzA2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNTA6XFx0XFx0fVxcbjEzNTE6XFx0XFxuMTM1MjpcXHRcXHRyZXR1cm4gMDtcXG4xMzUzOlxcdH1cXG4xMzU0OlxcdFxcbjEzNTU6XFx0c3RhdGljIGludCBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoaW50ICplcnJvciwgdW5zaWduZWQgaW50IG1heF9zbnBfYXNpZClcXG4xMzU2OlxcdHtcXG4xMzU3OlxcdFxcdHN0cnVjdCBzZXZfZGF0YV9yYW5nZV9saXN0ICpzbnBfcmFuZ2VfbGlzdCBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcXG4xMzU4OlxcdFxcdHN0cnVjdCBwc3BfZGV2aWNlICpwc3AgPSBwc3BfbWFzdGVyO1xcbjEzNTk6XFx0XFx0c3RydWN0IHNldl9kYXRhX3NucF9pbml0X2V4IGRhdGEgPSB7fTtcXG4xMzYwOlxcdFxcdHN0cnVjdCBzZXZfZGV2aWNlICpzZXY7XFxuMTM2MTpcXHRcXHR2b2lkICphcmcgPSBcXHUwMDI2ZGF0YTtcXG4xMzYyOlxcdFxcdGludCBjbWQsIHJjID0gMDtcXG4xMzYzOlxcdFxcbjEzNjQ6XFx0XFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbjEzNjU6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMTM2NjpcXHRcXG4xMzY3OlxcdFxcdHNldiA9IHBzcC1cXHUwMDNlc2V2X2RhdGE7XFxuMTM2ODpcXHRcXG4xMzY5OlxcdFxcdGlmIChzZXYtXFx1MDAzZXNucF9pbml0aWFsaXplZClcXG4xMzcwOlxcdFxcdFxcdHJldHVybiAwO1xcbjEzNzE6XFx0XFxuMTM3MjpcXHRcXHRpZiAoIXNldl92ZXJzaW9uX2dyZWF0ZXJfb3JfZXF1YWwoU05QX01JTl9BUElfTUFKT1IsIFNOUF9NSU5fQVBJX01JTk9SKSkge1xcbjEzNzM6XFx0XFx0XFx0ZGV2X2RiZyhzZXYtXFx1MDAzZWRldiwgXFxcIlNFVi1TTlAgc3VwcG9ydCByZXF1aXJlcyBmaXJtd2FyZSB2ZXJzaW9uIFxcdTAwM2U9ICVkOiVkXFxcXG5cXFwiLFxcbjEzNzQ6XFx0XFx0XFx0XFx0U05QX01JTl9BUElfTUFKT1IsIFNOUF9NSU5fQVBJX01JTk9SKTtcXG4xMzc1OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMzc2OlxcdFxcdH1cXG4xMzc3OlxcdFxcbjEzNzg6XFx0XFx0cmMgPSBzbnBfcHJlcGFyZSgpO1xcbjEzNzk6XFx0XFx0aWYgKHJjKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozMzo1My40NTU4MjE0NzZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTExOTE5MDg1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTRVYtU05QIFBsYXRmb3JtIENoZWNrKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGUgZmlyc3QgdGhpbmcgaXQgZG9lcyBpcyBjaGVjayBpZiBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAuIFJpZ2h0IGF3YXksIGl0IHJldHVybnMgYC1FTk9ERVZgIGlmIHRoZSBwbGF0Zm9ybSAqZG9lc24ndCogaGF2ZSBTRVYtU05QLiBUaGF0IG1lYW5zLCBsb2dpY2FsbHksIHRoZSByZXN0IG9mIHRoaXMgY29kZSBibG9jayBpcyBjb21wbGV0ZWx5IGJ5cGFzc2VkIHVubGVzcyB0aGUgaG9zdCBlbnZpcm9ubWVudCBpcyBhY3R1YWxseSBzZXQgdXAgZm9yIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gd2l0aCBTZWN1cmUgTmVzdGVkIFBhZ2luZy4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBjcmVhdGVzIGEgcm9hZGJsb2NrIGZvciBzeXprYWxsZXIuIERvZXMgc3l6a2FsbGVyIGV2ZW4gcnVuIG9uIGEgcGxhdGZvcm0gdGhhdCBvZmZlcnMgU0VWLVNOUD9cblxuTXkgZXhwZXJpZW5jZSB3aXRoIHN5emthbGxlciBpcyB0aGF0IGl0J3Mgb2Z0ZW4gcnVuIGluIEdDRSBWTXMuIEkga25vdyBmb3IgYSBmYWN0IHRoYXQgd2hpbGUgR0NFICpjYW4qIGJlIHRoZSAqaG9zdCogZm9yIFNFVi1TTlAgVk1zLCBpdCBkb2Vzbid0IGdlbmVyYWxseSBleHBvc2UgU0VWLVNOUCBjYXBhYmlsaXRpZXMgKndpdGhpbiogdGhlIGd1ZXN0IFZNcyB0aGVtc2VsdmVzLiBBIEdDRSBWTSBjYW4gKmJlKiBhbiBTRVYtU05QIFZNLCBidXQgeW91IGdlbmVyYWxseSBjYW5ub3QgcnVuICpuZXN0ZWQqIFNFVi1TTlAgd2l0aGluIGl0LiBUaGlzIHJhaXNlcyBhIHJlZCBmbGFnLlxuXG5XYWl0IGEgc2Vjb25kLiBMZXQgbWUgcmUtZXZhbHVhdGUuLi4gYENDX0FUVFJfSE9TVF9TRVZfU05QYCBpc24ndCBqdXN0IGFib3V0IHRoZSAqY2FwYWJpbGl0aWVzKiBvZiB0aGUgQ1BVLCBidXQgd2hldGhlciBpdCdzICplbmFibGVkKiBpbiB0aGUgQklPUy4gVGhpcyBtZWFucyBpdCBpcyB0aGUgKmhvc3QqIHRoYXQgZXhwb3NlcyB0aGUgZmVhdHVyZSB0byB0aGUgZ3Vlc3QuIFNvIHRoZSBsb2dpYyBoZXJlIGlzbid0IGp1c3QgYSBDUFUgZmVhdHVyZSBjaGVjay4gSXQgaXMgbGlrZWx5IGVuc3VyaW5nIHRoYXQgdGhlIHBsYXRmb3JtJ3MgQklPUyBoYXMgdGhpcyBmZWF0dXJlIGV4cG9zZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlIFZNIGNhcGFiaWxpdGllcy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBpcyBiZWluZyBzZXQuIEl0IGNvdWxkIGJlIHRyaWdnZXJlZCBieSBoYXJkd2FyZSwgQklPUywgb3IgYm90aC4gTGV0J3MgZGVsdmUgaW50byB0aGF0IGNoZWNrIGFuZCBzZWUgd2hhdCB0aGUgY29uZGl0aW9ucyBhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Nzc4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzM6NTguNTc1MDE2MzU0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE1Nzk0NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ0NfQVRUUl9IT1NUX1NFVl9TTlBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2NvY28vY29yZS5jPTcwPXN0YXRpYyBib29sIG5vaW5zdHIgYW1kX2NjX3BsYXRmb3JtX2hhcyhlbnVtIGNjX2F0dHIgYXR0cilcXG4tLVxcbmFyY2gveDg2L2NvY28vY29yZS5jLTEwMy1cXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYzoxMDQ6XFx0Y2FzZSBDQ19BVFRSX0hPU1RfU0VWX1NOUDpcXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xMDUtXFx0XFx0cmV0dXJuIGNjX2ZsYWdzLmhvc3Rfc2V2X3NucDtcXG4tLVxcbmFyY2gveDg2L2NvY28vY29yZS5jPTE3MD1zdGF0aWMgdm9pZCBhbWRfY2NfcGxhdGZvcm1fY2xlYXIoZW51bSBjY19hdHRyIGF0dHIpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xNzItXFx0c3dpdGNoIChhdHRyKSB7XFxuYXJjaC94ODYvY29jby9jb3JlLmM6MTczOlxcdGNhc2UgQ0NfQVRUUl9IT1NUX1NFVl9TTlA6XFxuYXJjaC94ODYvY29jby9jb3JlLmMtMTc0LVxcdFxcdGNjX2ZsYWdzLmhvc3Rfc2V2X3NucCA9IDA7XFxuLS1cXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYz0xOTI9c3RhdGljIHZvaWQgYW1kX2NjX3BsYXRmb3JtX3NldChlbnVtIGNjX2F0dHIgYXR0cilcXG4tLVxcbmFyY2gveDg2L2NvY28vY29yZS5jLTE5NC1cXHRzd2l0Y2ggKGF0dHIpIHtcXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYzoxOTU6XFx0Y2FzZSBDQ19BVFRSX0hPU1RfU0VWX1NOUDpcXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xOTYtXFx0XFx0Y2NfZmxhZ3MuaG9zdF9zZXZfc25wID0gMTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM9MzU1PXN0YXRpYyB2b2lkIGJzcF9kZXRlcm1pbmVfc25wKHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMtMzcyLVxcdFxcdCAgICBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpKSB7XFxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYzozNzM6XFx0XFx0XFx0Y2NfcGxhdGZvcm1fc2V0KENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3NC1cXHRcXHR9IGVsc2Uge1xcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMtMzc1LVxcdFxcdFxcdHNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfU0VWX1NOUCk7XFxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYzozNzY6XFx0XFx0XFx0Y2NfcGxhdGZvcm1fY2xlYXIoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMtMzc3LVxcdFxcdH1cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmM9MTA0PXN0YXRpYyBpbmxpbmUgdm9pZCBrOF9jaGVja19zeXNjZmdfZHJhbV9tb2RfZW4odm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMtMTExLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmM6MTEyOlxcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMtMTEzLVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTEyMzU9c3RhdGljIGJvb2wgX19pbml0IGF2aWNfd2FudF9hdmljX2VuYWJsZWQodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEyNTgtXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTI1OTpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEyNjAtXFx0ICAgICFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSFZfSU5VU0VfV1JfQUxMT1dFRCkpIHtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzA1Nj12b2lkIF9faW5pdCBzZXZfaGFyZHdhcmVfc2V0dXAodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzE2MC1cXHRzZXZfZXNfc3VwcG9ydGVkID0gdHJ1ZTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMxNjE6XFx0c2V2X3NucF9zdXBwb3J0ZWQgPSBzZXZfc25wX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMxNjItXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ5MDc9c3RydWN0IHBhZ2UgKnNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShpbnQgbm9kZSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTExLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDkxMjpcXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTEzLVxcdFxcdHJldHVybiBhbGxvY19wYWdlc19ub2RlKG5vZGUsIGdmcCB8IF9fR0ZQX1pFUk8sIDApO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz01MTMwPXZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUxMzMtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MTM0OlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUxMzUtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHQuYz0xMDI9dm9pZCBfX2luaXQgbWVtX2VuY3J5cHRfc2V0dXBfYXJjaCh2b2lkKVxcbi0tXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHQuYy0xMTAtXFx0ICovXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHQuYzoxMTE6XFx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHQuYy0xMTItXFx0XFx0c25wX2ZpeHVwX2U4MjBfdGFibGVzKCk7XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9jbWRsaW5lLmM9MTk9c3RhdGljIGludCBfX2luaXQgaW5pdF9zZXZfY29uZmlnKGNoYXIgKnN0cilcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL2NtZGxpbmUuYy0zMS1cXHRcXHRcXHRcXHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1NFVl9TTlApO1xcbmFyY2gveDg2L3ZpcnQvc3ZtL2NtZGxpbmUuYzozMjpcXHRcXHRcXHRcXHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuYXJjaC94ODYvdmlydC9zdm0vY21kbGluZS5jLTMzLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MTQ4PXN0YXRpYyB2b2lkIG1mZF9yZWNvbmZpZ3VyZSh2b2lkICphcmcpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTQ5LXtcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxNTA6XFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTE1MS1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xNTk9c3RhdGljIHZvaWQgc25wX2VuYWJsZSh2b2lkICphcmcpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xNjItXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MTYzOlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xNjQtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MjYxPXN0YXRpYyB2b2lkIGNsZWFyX3JtcCh2b2lkKVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMjY1LVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjI2NjpcXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMjY3LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTYyMj1zdGF0aWMgYm9vbCBybXBvcHRfY2FwYWJsZSh2b2lkKVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNjI0LVxcdHJldHVybiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUE9QVCkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo2MjU6XFx0ICAgICAgIGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNjI2LX1cXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTgyMD1pbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy04MjMtXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6ODI0OlxcdGlmIChXQVJOX09OX09OQ0UoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpKVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTgyNS1cXHRcXHRyZXR1cm4gLUVOT1NZUztcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTEwMjk9c3RhdGljIGludCBfX3NucF9sb29rdXBfcm1wZW50cnkodTY0IHBmbiwgc3RydWN0IHJtcGVudHJ5ICplLCBpbnQgKmxldmVsKVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTAzMy1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxMDM0OlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMDM1LVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MTE1NT1pbnQgcHNtYXNoKHU2NCBwZm4pXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMTU5LVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjExNjA6XFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTExNjEtXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xMjY0PXN0YXRpYyBpbnQgcm1wdXBkYXRlKHU2NCBwZm4sIHN0cnVjdCBybXBfc3RhdGUgKnN0YXRlKVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTI2OC1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxMjY5OlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMjcwLVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MTM1Nz12b2lkIGtkdW1wX3Nldl9jYWxsYmFjayh2b2lkKVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTM2Mi1cXHQgKi9cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxMzYzOlxcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTEzNjQtXFx0XFx0d2JpbnZkKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjMzOjU4LjY4NjYwMDQ1NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIzNjAwMzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBGbGFnKipcblxuUmlnaHQsIHNvIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAg4oCTIHRoYXQncyB0aGUga2V5IGZsYWcuIEkgcmVtZW1iZXIgc2VlaW5nIHRoYXQgdXNlZCB3aXRoIFNOUCwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIG1lIGJlY2F1c2Ugb2YgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCdzIGJlaW5nIHNldCBpbiBgYnNwX2RldGVybWluZV9zbnAoKWAgd2l0aGluIGBhcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jYC4gTmF0dXJhbGx5LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSByaWdodCBpbnRvIGBic3BfZGV0ZXJtaW5lX3NucCgpYCBpdHNlbGYuIE5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5ICp3aGVuKiBhbmQgKndoeSogdGhpcyBmbGFnIGlzIGdldHRpbmcgc2V0LiBXaGF0IGNvbmRpdGlvbnMgYXJlIGJlaW5nIGNoZWNrZWQ/IFdoYXQgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIGlzIGl0IGxvb2tpbmcgZm9yPyBOZWVkIHRvIGZpbmQgdGhpcyBmdW5jdGlvbiwgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA1NywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM0OjAyLjExMDIwNDQ4NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva2VybmVsL2NwdS9hbWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNTUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNTU6XFx0c3RhdGljIHZvaWQgYnNwX2RldGVybWluZV9zbnAoc3RydWN0IGNwdWluZm9feDg2ICpjKVxcbiAzNTY6XFx0e1xcbiAzNTc6XFx0I2lmZGVmIENPTkZJR19BUkNIX0hBU19DQ19QTEFURk9STVxcbiAzNTg6XFx0XFx0Y2NfdmVuZG9yID0gQ0NfVkVORE9SX0FNRDtcXG4gMzU5OlxcdFxcbiAzNjA6XFx0XFx0aWYgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfU0VWX1NOUCkpIHtcXG4gMzYxOlxcdFxcdFxcdC8qXFxuIDM2MjpcXHRcXHRcXHQgKiBSTVAgdGFibGUgZW50cnkgZm9ybWF0IGlzIG5vdCBhcmNoaXRlY3R1cmFsIGFuZCBpcyBkZWZpbmVkIGJ5IHRoZVxcbiAzNjM6XFx0XFx0XFx0ICogcGVyLXByb2Nlc3NvciBQUFIuIFJlc3RyaWN0IFNOUCBzdXBwb3J0IG9uIHRoZSBrbm93biBDUFUgbW9kZWxzXFxuIDM2NDpcXHRcXHRcXHQgKiBmb3Igd2hpY2ggdGhlIFJNUCB0YWJsZSBlbnRyeSBmb3JtYXQgaXMgY3VycmVudGx5IGRlZmluZWQgb3IgZm9yXFxuIDM2NTpcXHRcXHRcXHQgKiBwcm9jZXNzb3JzIHdoaWNoIHN1cHBvcnQgdGhlIGFyY2hpdGVjdHVyYWxseSBkZWZpbmVkIFJNUFJFQURcXG4gMzY2OlxcdFxcdFxcdCAqIGluc3RydWN0aW9uLlxcbiAzNjc6XFx0XFx0XFx0ICovXFxuIDM2ODpcXHRcXHRcXHRpZiAoIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUikgXFx1MDAyNlxcdTAwMjZcXG4gMzY5OlxcdFxcdFxcdCAgICAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9aRU4zKSB8fFxcbiAzNzA6XFx0XFx0XFx0ICAgICBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1pFTjQpIHx8XFxuIDM3MTpcXHRcXHRcXHQgICAgIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QUkVBRCkpIFxcdTAwMjZcXHUwMDI2XFxuIDM3MjpcXHRcXHRcXHQgICAgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKSkge1xcbiAzNzM6XFx0XFx0XFx0XFx0Y2NfcGxhdGZvcm1fc2V0KENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG4gMzc0OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDM3NTpcXHRcXHRcXHRcXHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1NFVl9TTlApO1xcbiAzNzY6XFx0XFx0XFx0XFx0Y2NfcGxhdGZvcm1fY2xlYXIoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xcbiAzNzc6XFx0XFx0XFx0fVxcbiAzNzg6XFx0XFx0fVxcbiAzNzk6XFx0I2VuZGlmXFxuIDM4MDpcXHR9XFxuIDM4MTpcXHRcXG4gMzgyOlxcdCNkZWZpbmUgWkVOX01PREVMX1NURVBfVUNPREUoZmFtLCBtb2RlbCwgc3RlcCwgdWNvZGUpIFxcXFxcXG4gMzgzOlxcdFxcdFg4Nl9NQVRDSF9WRk1fU1RFUFMoVkZNX01BS0UoWDg2X1ZFTkRPUl9BTUQsIGZhbSwgbW9kZWwpLCBcXFxcXFxuIDM4NDpcXHRcXHRcXHRcXHQgICAgc3RlcCwgc3RlcCwgdWNvZGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM0OjAyLjExMDM3NDM2NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODEzMzY2NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHlwZXJ2aXNvciBEZXBlbmRlbmN5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCdzIGltbWVkaWF0ZWx5IGp1bXBpbmcgb3V0IGF0IG1lIHRoYXQgaXQgaGluZ2VzIG9uIGAhY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9IWVBFUlZJU09SKWAuIEJlY2F1c2UsIGFuZCB0aGlzIGlzIGNydWNpYWwsIFN5emthbGxlciBydW5zIGluIGEgVk0sIHNwZWNpZmljYWxseSBHQ0UsIHdoaWNoICpkb2VzKiBzZXQgYFg4Nl9GRUFUVVJFX0hZUEVSVklTT1JgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgaWYgdGhhdCdzIHRoZSBjYXNlLCB0aGVuIGBic3BfZGV0ZXJtaW5lX3NucCgpYCB3aWxsIGNvbWUgYWxvbmcgYW5kICpjbGVhciogYFg4Nl9GRUFUVVJFX1NFVl9TTlBgIGFuZCBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgLlxuXG5CdXQgaG9sZCBvbiwgbGV0IG1lIHRyYWNlIHRoYXQgbG9naWMgYWdhaW7igKYgSWYgdGhhdCBpbml0aWFsIGNoZWNrIGlzICpmYWxzZSogKGkuZS4sIHdlICpkbyogaGF2ZSBhIGh5cGVydmlzb3IpLCBpdCBkcm9wcyBpbnRvIHRoZSBgZWxzZWAgYmxvY2ssIGFuZCAqdGhhdCogY2xlYXJzIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAgYW55d2F5ISBTbyBlc3NlbnRpYWxseSwgKm5vIG1hdHRlciB3aGF0KiwgaWYgd2UncmUgdW5kZXIgYSBoeXBlcnZpc29yIOKAkyB3aGljaCB3ZSBhYnNvbHV0ZWx5IGFyZSBpbiBTeXprYWxsZXIg4oCTIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAgaXMgYWx3YXlzIGdvaW5nIHRvIGJlIGZhbHNlLlxuXG5UaGVyZWZvcmUsIHNpbmNlIFN5emthbGxlciBydW5zIHVuZGVyIEdDRSwgd2hpY2ggaXMgYSBoeXBlcnZpc29yLCBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIGlzIEFMV0FZUyBmYWxzZS4gV2hpY2ggbWVhbnMgdGhhdCBgcm1wb3B0X2NhcGFibGUoKWAgd2lsbCBpbnZhcmlhYmx5IHJldHVybiBmYWxzZS4gV2hpY2ggbWVhbnMsIGFzIGEgZGlyZWN0IGNvbnNlcXVlbmNlLCB0aGF0IGJvdGggYHNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKWAgYW5kIGBzbnBfc2V0dXBfcm1wb3B0KClgIHdpbGwgaW1tZWRpYXRlbHkgcmV0dXJuLCBlZmZlY3RpdmVseSBkb2luZyBub3RoaW5nLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBlbnRpcmUgY29kZSBwYXRoIGlzIHVucmVhY2hhYmxlIGluIGFueSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gSXQncyBhIGRlYWQgZW5kLCBhdCBsZWFzdCBhcyBpdCBjdXJyZW50bHkgc3RhbmRzLiBJIG5lZWQgdG8gbWFrZSBhIG5vdGUgb2YgdGhpcy5cblxuQnV0IGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZW50aXJlIGNvZGUgYmFzZSB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhlcmUncyBubyBvdGhlciB3YXkgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBjYW4gYmUgc2V0LiBKdXN0IHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODY4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzQ6MDcuOTIzNzQ2OTQzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ3NTc0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2NfcGxhdGZvcm1fc2V0XFxcXChDQ19BVFRSX0hPU1RfU0VWX1NOUFxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jPTM1NT1zdGF0aWMgdm9pZCBic3BfZGV0ZXJtaW5lX3NucChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3Mi1cXHRcXHQgICAgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKSkge1xcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM6MzczOlxcdFxcdFxcdGNjX3BsYXRmb3JtX3NldChDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYy0zNzQtXFx0XFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzQ6MDguMDY4NTA5NjYzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1MzgwOTIzMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBUaGlzIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQncyBcIndvcnRoIGZ1enppbmdcIi4gVGhlIGNydWNpYWwgcG9pbnQgaGluZ2VzIG9uIHdoZXRoZXIgdGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiAgVGhlIGluaXRpYWwgYW5hbHlzaXMgcG9pbnRlZCB0byBgYnNwX2RldGVybWluZV9zbnAoKWAuIEl0IGV4cGxpY2l0bHkgY2hlY2tzIGAhY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9IWVBFUlZJU09SKWAsIHdoaWNoIG1lYW5zIGl0J3MgKmltcG9zc2libGUqIHRvIGhpdCB0aGF0IGNvZGUgcGF0aCBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBpZiB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiB0aGVzZSBlbnZpcm9ubWVudHMsIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLlxuXG5TaW5jZSBgYnNwX2RldGVybWluZV9zbnAoKWAgY29udGFpbnMgdGhlIHJlbGV2YW50IGNoZWNrLCBpdCBhcHBlYXJzIHRoaXMgcGFydCBvZiB0aGUgcGF0Y2ggaXMgbm90IHdvcnRoIGZ1enppbmcuIEknbSBzYXRpc2ZpZWQgdGhhdCB0aGlzIGlzIGNvcnJlY3QsIGJ1dCBsZXQgbWUgZG8gYSBtb3JlIHRob3JvdWdoIHJldmlldyBvZiAqYWxsKiBjaGFuZ2VzIHRvIGJlIGNlcnRhaW4uXG5cblRoZSBwYXRjaCB0b3VjaGVzIGEgYnVuY2ggb2YgZmlsZXM6IGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oYCwgYGFyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oYCwgYGFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oYCwgYGFyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNgLCBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AsIGFuZCBgYXJjaC94ODYvdmlydC9zdm0vc2V2LmNgLiBUaGUgY2hhbmdlcyBpbnZvbHZlIGFkZGluZyBgWDg2X0ZFQVRVUkVfUk1QT1BUYCwgbmV3IE1TUnMsIGZ1bmN0aW9uIHByb3RvdHlwZXMsIGNhbGxzIHRvIGBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKClgLCBhbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGEgZmV3IGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBgc25wX3JtcG9wdF9hbGxfcGh5c21lbSgpYCwgYHNucF9zZXR1cF9ybXBvcHQoKWAsIGBzbnBfY2xlYW51cF9ybXBvcHQoKWAsIGBybXBvcHRfY2FwYWJsZSgpYCwgYHJtcG9wdCgpYCwgYHJtcG9wdF9zY2FuX3JhbmdlKClgLCBhbmQgYHJtcG9wdF93b3JrX2hhbmRsZXIoKWAuIEl0IGFsc28gbW9kaWZpZXMgYHNucF9wcmVwYXJlKClgLCBgc25wX3NodXRkb3duKClgLCBgc25wX3JtcHRhYmxlX2luaXQoKWAsIGFuZCBgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKWAuXG5cbk15IGd1dCBzYXlzIG1vc3Qgb2YgdGhlc2UgbmV3IGZ1bmN0aW9ucyBpbiBgdmlydC9zdm0vc2V2LmNgIGxpa2VseSBkZXBlbmQgb24gdGhlIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBMZXQgbWUgZG91YmxlLWNoZWNrLiBJIHNob3VsZCBzcGVjaWZpY2FsbHkgaW52ZXN0aWdhdGUgYHNucF9wcmVwYXJlKClgLCBgc25wX3NodXRkb3duKClgLCBgc25wX3JtcHRhYmxlX2luaXQoKWAsIGFuZCBgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKWAuXG5cbk9rYXksIGBzbnBfcHJlcGFyZSgpYCBpcyBjYWxsZWQgZnJvbSBgX19zZXZfc25wX2luaXRfbG9ja2VkKClgLiBgX19zZXZfc25wX2luaXRfbG9ja2VkKClgIGhhcyBhIGNoZWNrIGZvciBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAgYW5kIHJldHVybnMgYC1FTk9ERVZgIGlmIHRoYXQgY2hlY2sgZmFpbHMuICBUaGlzIHN1Z2dlc3RzIHRoYXQgYHNucF9wcmVwYXJlKClgICptaWdodCogYmUgcmVhY2hhYmxlIGV2ZW4gaW4gYSB2aXJ0dWFsaXplZCBjb250ZXh0LCBidXQgb25seSBpZiB0aGUgaG9zdCBzdXBwb3J0cyB0aGUgcmVsZXZhbnQgU0VWLVNOUCBmZWF0dXJlcywgd2hpY2ggaXMgcXVpdGUgc3BlY2lmaWMuIFRoaXMgY291bGQgc3RpbGwgbWVhbiB0aGUgY29kZSBwYXRoIGlzbid0IGVhc3kgdG8gdHJpZ2dlciBpbiB0aGUgdXN1YWwgUUVNVS9HQ0Ugc2NlbmFyaW9zLCBhbmQgbWlnaHQganVzdGlmeSBgV29ydGhGdXp6aW5nPWZhbHNlYC4gTGV0J3MgY29uZmlybSB3aXRoIGBzbnBfc2h1dGRvd24oKWAuIEl0J3MgY2FsbGVkIGZyb20gYF9fc2V2X3NucF9zaHV0ZG93bl9sb2NrZWQoKWAuIFRpbWUgdG8gY2hlY2sgdGhhdCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3NjYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzQ6MTYuNjA2NjA1MzhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0ODgwMDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc2V2X3NucF9zaHV0ZG93bl9sb2NrZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTE5NjE9c3RhdGljIGludCBzZXZfdXBkYXRlX2Zpcm13YXJlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjAxNS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjIwMTY6c3RhdGljIGludCBfX3Nldl9zbnBfc2h1dGRvd25fbG9ja2VkKGludCAqZXJyb3IsIGJvb2wgcGFuaWMpXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMDE3LXtcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjA5OC1cXHQvKlxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MjA5OTpcXHQgKiBfX3Nldl9zbnBfc2h1dGRvd25fbG9ja2VkKCkgZGVhZGxvY2tzIHdoZW4gaXQgdHJpZXMgdG8gdW5yZWdpc3RlclxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjEwMC1cXHQgKiBpdHNlbGYgZHVyaW5nIHBhbmljIGFzIHRoZSBwYW5pYyBub3RpZmllciBpcyBjYWxsZWQgd2l0aCBSQ1UgcmVhZFxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0yNzMwPXN0YXRpYyB2b2lkIF9fc2V2X2Zpcm13YXJlX3NodXRkb3duKHN0cnVjdCBzZXZfZGV2aWNlICpzZXYsIGJvb2wgcGFuaWMpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTI3NjEtXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoyNzYyOlxcdF9fc2V2X3NucF9zaHV0ZG93bl9sb2NrZWQoXFx1MDAyNmVycm9yLCBwYW5pYyk7XFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yNzYzLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzQ6MTYuNjgxNDkxOTk0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzAxMjczNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBfX3Nldl9zbnBfc2h1dGRvd25fbG9ja2VkKClgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgX19zZXZfc25wX3NodXRkb3duX2xvY2tlZCgpYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSBpbiB0aGUgU0VWLVNOUCBzaHV0ZG93biBzZXF1ZW5jZS4gVGhlIG5hbWUgYWxvbmUgc2NyZWFtcyBcImNyaXRpY2FsIHNlY3Rpb25cIiDigJMgbG9ja2VkLCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IHByb3RlY3RlZCBhY2Nlc3MgdG8gc29tZSBzaGFyZWQgcmVzb3VyY2UuIEknbSBpbW1lZGlhdGVseSB3b25kZXJpbmc6IHdoYXQgZGF0YSBpcyBiZWluZyBndWFyZGVkIGhlcmU/IElzIGl0IHJlbGF0ZWQgdG8gdGhlIGd1ZXN0J3Mgc3RhdGUsIHRoZSBzZWNyZXRzLCB0aGUgdkNQVSBjb250ZXh0LCBvciBwZXJoYXBzIHRoZSBvdmVyYWxsIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24/IE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCdzIHByb2JhYmx5IHByZXR0eSBsb3ctbGV2ZWwuIEknbGwgbmVlZCB0byB0cmFjZSBpdHMgY2FsbGVycyBhbmQgY2FsbGVlcyB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBzY29wZSBhbmQgY3JpdGljYWwgc2VjdGlvbiBpdCBwcm90ZWN0cy4gTGV0J3Mgc2VlIGlmIHRoZSBsb2NraW5nIG1lY2hhbmlzbSB1c2VzIGEgc3BpbmxvY2ssIGEgbXV0ZXggb3Igc29tZXRoaW5nIGVsc2U7IHRoYXQnbGwgaW5mbHVlbmNlIGhvdyBJIHRoaW5rIGFib3V0IHBvdGVudGlhbCBjb250ZW50aW9uIGFuZCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIEkgc3VzcGVjdCB0aGlzIGZ1bmN0aW9uIHdvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBwbGF0Zm9ybSBuZWVkcyB0byBzYWZlbHkgc2h1dCBkb3duIGFuIFNOUCBndWVzdCAob3IgdGhlIHdob2xlIGhvc3QpLiBJIHdvbmRlciwgaXMgdGhlcmUgYW55IHBvc3NpYmlsaXR5IG9mIGRlYWRsb2NrcyBvciBsaXZlbG9ja3MgdG8gbG9vayBvdXQgZm9yPyBUaGlzIHJvdXRpbmUgaXMgZGVmaW5pdGVseSBhIHBvaW50IG9mIGZvY3VzIGZvciBhbnkgc2h1dGRvd24tcmVsYXRlZCBkZWJ1Z2dpbmcgb3IgcGVyZm9ybWFuY2UgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNDMxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzQ6MjAuNDUxNjIzODQ4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMTYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwMTY6XFx0c3RhdGljIGludCBfX3Nldl9zbnBfc2h1dGRvd25fbG9ja2VkKGludCAqZXJyb3IsIGJvb2wgcGFuaWMpXFxuMjAxNzpcXHR7XFxuMjAxODpcXHRcXHRzdHJ1Y3QgcHNwX2RldmljZSAqcHNwID0gcHNwX21hc3RlcjtcXG4yMDE5OlxcdFxcdHN0cnVjdCBzZXZfZGV2aWNlICpzZXY7XFxuMjAyMDpcXHRcXHRzdHJ1Y3Qgc2V2X2RhdGFfc25wX3NodXRkb3duX2V4IGRhdGE7XFxuMjAyMTpcXHRcXHRpbnQgcmV0O1xcbjIwMjI6XFx0XFxuMjAyMzpcXHRcXHRpZiAoIXBzcCB8fCAhcHNwLVxcdTAwM2VzZXZfZGF0YSlcXG4yMDI0OlxcdFxcdFxcdHJldHVybiAwO1xcbjIwMjU6XFx0XFxuMjAyNjpcXHRcXHRzZXYgPSBwc3AtXFx1MDAzZXNldl9kYXRhO1xcbjIwMjc6XFx0XFxuMjAyODpcXHRcXHRpZiAoIXNldi1cXHUwMDNlc25wX2luaXRpYWxpemVkKVxcbjIwMjk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjAzMDpcXHRcXG4yMDMxOlxcdFxcdG1lbXNldChcXHUwMDI2ZGF0YSwgMCwgc2l6ZW9mKGRhdGEpKTtcXG4yMDMyOlxcdFxcdGRhdGEubGVuID0gc2l6ZW9mKGRhdGEpO1xcbjIwMzM6XFx0XFx0ZGF0YS5pb21tdV9zbnBfc2h1dGRvd24gPSAxO1xcbjIwMzQ6XFx0XFx0aWYgKHNldi1cXHUwMDNlc25wX2ZlYXRfaW5mb18wLmVjeCBcXHUwMDI2IFNOUF9YODZfU0hVVERPV05fU1VQUE9SVEVEKVxcbjIwMzU6XFx0XFx0XFx0ZGF0YS54ODZfc25wX3NodXRkb3duID0gMTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzQ6MjAuNDUxODY5NjA4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTg3NTQ4MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNFVi1TTlAgSW5pdGlhbGl6YXRpb24gYW5kIFNodXRkb3duKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGxvZ2ljYWxseS4gVGhlIGNvZGUgSSdtIGxvb2tpbmcgYXQgY2hlY2tzIGBzZXYtXHUwMDNlc25wX2luaXRpYWxpemVkYC4gTmF0dXJhbGx5LCBJIGltbWVkaWF0ZWx5IHRoaW5rLCB3aGVyZSBpcyB0aGF0IGZsYWcgc2V0PyBJdCdzIHNldCB3aXRoaW4gYF9fc2V2X3NucF9pbml0X2xvY2tlZCgpYC4gQW5kIHRoYXQgZnVuY3Rpb24gaXRzZWxmIHJlcXVpcmVzIHRoZSBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIGF0dHJpYnV0ZS4gU28sIGlmIHdlIGRvbid0IGhhdmUgdGhhdCBhdHRyaWJ1dGUsIHRoZSBpbml0aWFsaXphdGlvbiBwYXRoIGlzIG5ldmVyIHRha2VuLlxuXG5UaGVyZWZvcmUsIHNpbmNlIGBzbnBfaW5pdGlhbGl6ZWRgIGlzIG9ubHkgc2V0IGluIHRoZSBpbml0IGZ1bmN0aW9uLCB0aGUgY29uZGl0aW9uYWwgZ3VhcmQgZW5zdXJlcyB0aGF0IHRoZSBgc25wX3NodXRkb3duKClgIGZ1bmN0aW9uIGlzIGFsc28gdW5yZWFjaGFibGUgaW4gdGhhdCBzY2VuYXJpby4gTWFrZXMgcGVyZmVjdCBzZW5zZS5cblxuTm93LCBhIHJlbGF0ZWQgcXVlc3Rpb24gcG9wcyBpbnRvIG15IGhlYWQuIFdoYXQgYWJvdXQgYHNucF9ybXB0YWJsZV9pbml0KClgPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIGFsbCBvZiB0aGlzLiBJdCdzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpbiB0aGUgcHJvY2VzcyB0byBjb25zaWRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMwNjIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM0OjI0LjI3MDYyODA1OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyMzI5MTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNucF9ybXB0YWJsZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02NTA9Ym9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaDo2NTE6aW50IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY1Mi1pbnQgc25wX2xvb2t1cF9ybXBlbnRyeSh1NjQgcGZuLCBib29sICphc3NpZ25lZCwgaW50ICpsZXZlbCk7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02Njk9c3RhdGljIGlubGluZSBib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjcwOnN0YXRpYyBpbmxpbmUgaW50IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpIHsgcmV0dXJuIC1FTk9TWVM7IH1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaC02NzEtc3RhdGljIGlubGluZSBpbnQgc25wX2xvb2t1cF9ybXBlbnRyeSh1NjQgcGZuLCBib29sICphc3NpZ25lZCwgaW50ICpsZXZlbCkgeyByZXR1cm4gLUVOT0RFVjsgfVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9ODEzPUVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NldHVwX3JtcG9wdCwgXFxcImNjcFxcXCIpO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtODE5LSAqL1xcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjgyMDppbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtODIxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzQ6MjQuNDIyOTYyMjY3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NjU2NTcyODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbCBTaXRlcyBvZiBgc25wX3JtcHRhYmxlX2luaXQoKWAqKlxuXG5BbHJpZ2h0LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggb2YgYHNucF9ybXB0YWJsZV9pbml0KClgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSSdtIGdvaW5nIHRvIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIHBsYWNlcyBpbiB0aGUgY29kZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbi4gV2l0aG91dCB0aGlzIHVuZGVyc3RhbmRpbmcsIGFueSBhdHRlbXB0IHRvIGRlYnVnIG9yIG1vZGlmeSBiZWhhdmlvciBzdGVtbWluZyBmcm9tIHRoZSAnc25wJyBtb2R1bGUgd291bGQgYmUgaGFtcGVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzI1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzQ6MjcuMDg4NjIxOTU5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDc4NTAwMzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNucF9ybXB0YWJsZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02NTA9Ym9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaDo2NTE6aW50IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY1Mi1pbnQgc25wX2xvb2t1cF9ybXBlbnRyeSh1NjQgcGZuLCBib29sICphc3NpZ25lZCwgaW50ICpsZXZlbCk7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02Njk9c3RhdGljIGlubGluZSBib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjcwOnN0YXRpYyBpbmxpbmUgaW50IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpIHsgcmV0dXJuIC1FTk9TWVM7IH1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaC02NzEtc3RhdGljIGlubGluZSBpbnQgc25wX2xvb2t1cF9ybXBlbnRyeSh1NjQgcGZuLCBib29sICphc3NpZ25lZCwgaW50ICpsZXZlbCkgeyByZXR1cm4gLUVOT0RFVjsgfVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9ODEzPUVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NldHVwX3JtcG9wdCwgXFxcImNjcFxcXCIpO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtODE5LSAqL1xcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjgyMDppbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtODIxLXtcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYz0zMzYzPXN0YXRpYyBfX2luaXQgdm9pZCBpb21tdV9zbnBfZW5hYmxlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzM5MC1cXHQgKi9cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzM5MTpcXHRpZiAoc25wX3JtcHRhYmxlX2luaXQoKSkge1xcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMzkyLVxcdFxcdHByX3dhcm4oXFxcIlNOUDogUk1QIGluaXRpYWxpemF0aW9uIGZhaWxlZCwgU05QIGNhbm5vdCBiZSBzdXBwb3J0ZWQuXFxcXG5cXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzQ6MjkuNTY3MTI2MjA0WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTMwNjA5NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW5uZXIgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYGlvbW11X3NucF9lbmFibGUoKWAgYW5kIGl0cyBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSB0cmFpbCBsZWFkcyB1cyB0byBgaW9tbXVfc25wX2VuYWJsZSgpYC4gVGhlIGZ1bmN0aW9uIG5hbWUgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIGVuYWJsaW5nIFNlY3VyZSBOZXN0ZWQgUGFnaW5nIGZlYXR1cmVzLCB3aGljaCBpcyBjcnVjaWFsIGZvciBtb2Rlcm4gdmlydHVhbGl6YXRpb24gc2VjdXJpdHkuIExldCdzIGRpZyBpbiBhIGJpdCBmdXJ0aGVyIHRvIHNlZSBob3cgaXQncyBzZXR0aW5nIHRoaW5ncyB1cC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIEJhc2VkIG9uIHRoYXQgZnVuY3Rpb24gY2FsbCwgSSBuZWVkIHRvIGtub3cgYWJvdXQgYHNucF9ybXB0YWJsZV9pbml0KClgLiBUaGF0IGZ1bmN0aW9uJ3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBjb25maWd1cmluZyB0aGUgUk1QIChSb290IE1lbW9yeSBQcm90ZWN0aW9uKSB0YWJsZSwgd2hpY2ggaXMgYWJzb2x1dGVseSBmdW5kYW1lbnRhbCB0byBwcm90ZWN0aW5nIGd1ZXN0IG1lbW9yeSBmcm9tIHVuYXV0aG9yaXplZCBhY2Nlc3MuIExldCdzIHNlZSBob3cgdGhhdCdzIGRvbmUuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzIG9mIHRoYXQgdGFibGUgdG8gZ2V0IGEgZ29vZCBncmlwIG9uIHRoZSBvdmVyYWxsIHNlY3VyaXR5IHBvc3R1cmUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzOTIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNDozMi44ODAxODk2M1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvdmlydC9zdm0vc2V2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogODE5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODE5OlxcdCAqL1xcbiA4MjA6XFx0aW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxcbiA4MjE6XFx0e1xcbiA4MjI6XFx0XFx0dTY0IHZhbDtcXG4gODIzOlxcdFxcbiA4MjQ6XFx0XFx0aWYgKFdBUk5fT05fT05DRSghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSkpXFxuIDgyNTpcXHRcXHRcXHRyZXR1cm4gLUVOT1NZUztcXG4gODI2OlxcdFxcbiA4Mjc6XFx0XFx0aWYgKFdBUk5fT05fT05DRSghYW1kX2lvbW11X3NucF9lbikpXFxuIDgyODpcXHRcXHRcXHRyZXR1cm4gLUVOT1NZUztcXG4gODI5OlxcdFxcbiA4MzA6XFx0XFx0aWYgKCFzZXR1cF9ybXB0YWJsZSgpKVxcbiA4MzE6XFx0XFx0XFx0cmV0dXJuIC1FTk9TWVM7XFxuIDgzMjpcXHRcXG4gODMzOlxcdFxcdC8qXFxuIDgzNDpcXHRcXHQgKiBPbiBhIGtleGVjIGJvb3QgU05QIG1heSBhbHJlYWR5IGJlIGVuYWJsZWQgKGxlZ2FjeSBmaXJtd2FyZSBsZWF2ZXNcXG4gODM1OlxcdFxcdCAqIFNucEVuIHNldCBhY3Jvc3Mgc2h1dGRvd24pLCBpbiB3aGljaCBjYXNlIHNucF9wcmVwYXJlKCkgYmFpbHMgd2l0aG91dFxcbiA4MzY6XFx0XFx0ICogZGlzYWJsaW5nIENQVSBob3RwbHVnLCBzbyBkaXNhYmxlIGl0IGhlcmUuXFxuIDgzNzpcXHRcXHQgKi9cXG4gODM4OlxcdFxcdHJkbXNycShNU1JfQU1ENjRfU1lTQ0ZHLCB2YWwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNDozMi44ODAyOTM1MloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA5NzMwNDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipVbnJlYWNoYWJsZSBDb2RlIGFuZCBTTlAgUHJvYmluZyoqXG5cblJpZ2h0LCBzbyB0aGF0IGNoZWNrIHdpdGggYGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUClgLi4uIHRoYXQncyB0aGUgdGVsbC4gSXQgbWVhbnMgdGhlIHN1YnNlcXVlbnQgY29kZSBwYXRoIGlzIGNvbXBsZXRlbHkgYmxvY2tlZCBvZmYuIE5vIHdheSBhcm91bmQgaXQuIEl0J3MgdW5yZWFjaGFibGUuIEl0IG1ha2VzIG1lIHdvbmRlciB3aHkgaXQncyB0aGVyZSBhdCBhbGwuXG5cblRoZW4sIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKClgLiBJcyB0aGF0IHJlbGF0ZWQ/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgaW1wbGljYXRpb25zIG9mIHByb2JpbmcgdGhlIFJNUCB0YWJsZSBpbiB0aGUgY29udGV4dCBvZiB0aGlzIHBsYXRmb3JtIGNoZWNrLiBJcyB0aGUgdW5yZWFjaGFibGUgY29kZSByZWxhdGVkIHRvIHNvbWUgYWx0ZXJuYXRpdmUgUk1QIHRhYmxlIHByb2Jpbmcgc3RyYXRlZ3kgb3IgYW4gZXJyb3IgcGF0aCB0aGF0IGlzIG5vdCBuZWVkZWQgZm9yIHRoZSBjdXJyZW50IFNOUCBmZWF0dXJlPyBJJ2xsIHByb2JhYmx5IG5lZWQgdG8gcmV2aXNpdCB0aGUgcmVsZXZhbnQgU05QIGRvY3VtZW50YXRpb24gYW5kIGNvZGUgdG8gcGllY2UgdGhpcyB0b2dldGhlciBwcm9wZXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5NjYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM0OjM2LjQ5MDAyNjU0NFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1OTU2NzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNucF9wcm9iZV9ybXB0YWJsZV9pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02NDU9c3RhdGljIGlubGluZSB1NjQgc2F2aWNfZ2hjYl9tc3JfcmVhZCh1MzIgcmVnKSB7IHJldHVybiAwOyB9XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaC02NDktI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjY1MDpib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY1MS1pbnQgc25wX3JtcHRhYmxlX2luaXQodm9pZCk7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02Njc9dm9pZCBzbnBfc2h1dGRvd24odm9pZCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjY4LSNlbHNlXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjY5OnN0YXRpYyBpbmxpbmUgYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY3MC1zdGF0aWMgaW5saW5lIGludCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKSB7IHJldHVybiAtRU5PU1lTOyB9XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jPTM1NT1zdGF0aWMgdm9pZCBic3BfZGV0ZXJtaW5lX3NucChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3MS1cXHRcXHQgICAgIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QUkVBRCkpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYzozNzI6XFx0XFx0ICAgIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKCkpIHtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3My1cXHRcXHRcXHRjY19wbGF0Zm9ybV9zZXQoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9ODkzPXN0YXRpYyBib29sIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy05MzYtXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6OTM3OmJvb2wgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8odm9pZClcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy05Mzgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNDozNi42MTU5OTAxMjZaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5NDQ3NDc3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbjpcblxuKipUcmFjaW5nIHRoZSBEYXRhIEZsb3c6IGBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpYCoqXG5cbk9rYXksIHNvIGBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpYCBpcyB0cmlnZ2VyZWQgYnkgYGJzcF9kZXRlcm1pbmVfc25wKClgLiBUaGF0J3MgYSBrZXkgcmVsYXRpb25zaGlwLiBUbyB0cnVseSB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcsIEkgbmVlZCB0byByZXZpc2l0IHRoZSBmdW5jdGlvbmFsaXR5IG9mIGBic3BfZGV0ZXJtaW5lX3NucCgpYC4gSXQncyB0aGUgY2FsbGluZyBmdW5jdGlvbiwgc28gaXQgaG9sZHMgdGhlIGNvbnRleHQgZm9yIHdoeSBgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKWAgaXMgZXZlbiBiZWluZyBjYWxsZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIGRvaW5nLCB3aGF0IGl0cyBpbnB1dHMgYXJlLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBvYmplY3RpdmUgb2YgdGhhdCBmdW5jdGlvbiBpcy4gVGhhdCBzaG91bGQgaWxsdW1pbmF0ZSB0aGUgcHVycG9zZSBvZiB0aGUgY2FsbCB0byBgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKWAsIGFuZCB3aGVyZSB0aGlzIGRhdGEgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNjaGVtZSBvZiB0aGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NzY3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzQ6NDAuNjEwNDY5NDA0WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzODYzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM1NTpcXHRzdGF0aWMgdm9pZCBic3BfZGV0ZXJtaW5lX3NucChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXFxuIDM1NjpcXHR7XFxuIDM1NzpcXHQjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX0NDX1BMQVRGT1JNXFxuIDM1ODpcXHRcXHRjY192ZW5kb3IgPSBDQ19WRU5ET1JfQU1EO1xcbiAzNTk6XFx0XFxuIDM2MDpcXHRcXHRpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9TRVZfU05QKSkge1xcbiAzNjE6XFx0XFx0XFx0LypcXG4gMzYyOlxcdFxcdFxcdCAqIFJNUCB0YWJsZSBlbnRyeSBmb3JtYXQgaXMgbm90IGFyY2hpdGVjdHVyYWwgYW5kIGlzIGRlZmluZWQgYnkgdGhlXFxuIDM2MzpcXHRcXHRcXHQgKiBwZXItcHJvY2Vzc29yIFBQUi4gUmVzdHJpY3QgU05QIHN1cHBvcnQgb24gdGhlIGtub3duIENQVSBtb2RlbHNcXG4gMzY0OlxcdFxcdFxcdCAqIGZvciB3aGljaCB0aGUgUk1QIHRhYmxlIGVudHJ5IGZvcm1hdCBpcyBjdXJyZW50bHkgZGVmaW5lZCBvciBmb3JcXG4gMzY1OlxcdFxcdFxcdCAqIHByb2Nlc3NvcnMgd2hpY2ggc3VwcG9ydCB0aGUgYXJjaGl0ZWN0dXJhbGx5IGRlZmluZWQgUk1QUkVBRFxcbiAzNjY6XFx0XFx0XFx0ICogaW5zdHJ1Y3Rpb24uXFxuIDM2NzpcXHRcXHRcXHQgKi9cXG4gMzY4OlxcdFxcdFxcdGlmICghY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9IWVBFUlZJU09SKSBcXHUwMDI2XFx1MDAyNlxcbiAzNjk6XFx0XFx0XFx0ICAgIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1pFTjMpIHx8XFxuIDM3MDpcXHRcXHRcXHQgICAgIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfWkVONCkgfHxcXG4gMzcxOlxcdFxcdFxcdCAgICAgY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9STVBSRUFEKSkgXFx1MDAyNlxcdTAwMjZcXG4gMzcyOlxcdFxcdFxcdCAgICBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpKSB7XFxuIDM3MzpcXHRcXHRcXHRcXHRjY19wbGF0Zm9ybV9zZXQoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xcbiAzNzQ6XFx0XFx0XFx0fSBlbHNlIHtcXG4gMzc1OlxcdFxcdFxcdFxcdHNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfU0VWX1NOUCk7XFxuIDM3NjpcXHRcXHRcXHRcXHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuIDM3NzpcXHRcXHRcXHR9XFxuIDM3ODpcXHRcXHR9XFxuIDM3OTpcXHQjZW5kaWZcXG4gMzgwOlxcdH1cXG4gMzgxOlxcdFxcbiAzODI6XFx0I2RlZmluZSBaRU5fTU9ERUxfU1RFUF9VQ09ERShmYW0sIG1vZGVsLCBzdGVwLCB1Y29kZSkgXFxcXFxcbiAzODM6XFx0XFx0WDg2X01BVENIX1ZGTV9TVEVQUyhWRk1fTUFLRShYODZfVkVORE9SX0FNRCwgZmFtLCBtb2RlbCksIFxcXFxcXG4gMzg0OlxcdFxcdFxcdFxcdCAgICBzdGVwLCBzdGVwLCB1Y29kZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjM6MzQ6NDAuNjEwODExODg0WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNzExNTQ3MzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIFNFVi1TTlAgQ29kZSBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBiZWNhdXNlIG9mIEMncyBzaG9ydC1jaXJjdWl0IGV2YWx1YXRpb24sIHRoZSBgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKWAgZnVuY3Rpb24gd29uJ3QgYmUgY2FsbGVkIGlmIHRoZSBgIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUilgIGNoZWNrIGlzIGZhbHNlLiBTaW5jZSB3ZSdyZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBgY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9IWVBFUlZJU09SKWAgd2lsbCBiZSB0cnVlLCBtYWtpbmcgdGhlIGNvbmRpdGlvbiBmYWxzZSwgYW5kIHRodXMsIGBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpYCBpcyBza2lwcGVkLiBBbmQgbGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrLCBubywgdGhlIGdyZXAgb3V0cHV0IGNvbmZpcm1zIHRoaXMgaXMgb25seSBjYWxsZWQgZnJvbSBgYnNwX2RldGVybWluZV9zbnAoKWAuXG5cblNvLCB0aGUgY2hhbmdlcyBpbiB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLCBhbmQgdGhlcmVmb3JlLCB0aGVpciBpbXBhY3QsIGFyZSB1bnJlYWNoYWJsZSBpbiB0aGlzIHNjZW5hcmlvLlxuXG5Ob3csIHdoYXQgZWxzZSBkb2VzIHRoZSBwYXRjaCB0b3VjaD8gSSBzZWUgYWRkaXRpb25zIGxpa2UgYCNkZWZpbmUgWDg2X0ZFQVRVUkVfUk1QT1BUYCwgYE1TUl9BTUQ2NF9STVBPUFRfQkFTRWAsIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYXJyYXlzIGluIHZhcmlvdXMgaW5jbHVkZSBhbmQgc291cmNlIGZpbGVzLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGxvZ2ljIHJldm9sdmVzIGFyb3VuZCBgc25wX3JtcG9wdF9hbGxfcGh5c21lbSgpYCwgYHNucF9zZXR1cF9ybXBvcHQoKWAsIGBzbnBfY2xlYW51cF9ybXBvcHQoKWAsIGFuZCBhIHN1aXRlIG9mIHJlbGF0ZWQgZnVuY3Rpb25zLlxuXG5Ib3dldmVyLCBhbGwgb2YgdGhlc2UgZnVuY3Rpb25zLCBhbmQgb3RoZXIgZnVuY3Rpb25zLCBzdWNoIGFzIGBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpYCwgYXJlIGdhdGVkIGJlaGluZCBlaXRoZXIgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBvciwgY3J1Y2lhbGx5LCBgIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUilgLiBUaGVyZWZvcmUsIGV2ZW4gaW4gdGhlIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBub25lIG9mIHRoaXMgY29kZSBjYW4gYmUgdHJpZ2dlcmVkIGJlY2F1c2UgYFg4Nl9GRUFUVVJFX0hZUEVSVklTT1JgIGlzIHNldC5cblxuQnV0IGxldCdzIGJlIHN1cmUuIENhbiB3ZSBjbGVhciBgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUmAgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nPyBJbiBRRU1VLCB0aGUgYC1jcHUgaG9zdCwtaHlwZXJ2aXNvcmAgZmxhZyAqY2FuKiBiZSB1c2VkIHRvIGNsZWFyIHRoYXQgZmxhZy4gSG93ZXZlciwgc3l6a2FsbGVyIGRvZXMgbm90IHVzZSB0aGF0IGZsYWcgYnkgZGVmYXVsdC4gSWYgaXQgKmRpZCogdXNlIHRoZSBmbGFnLCB0aGVuIHRoZSBob3N0IGtlcm5lbCBydW5uaW5nIGluIFFFTVUgd291bGQgdGhlbiBhdHRlbXB0IHRvIGVuYWJsZSBTRVYtU05QIGZ1bmN0aW9uYWxpdHkuIEJ1dCBoZXJlJ3MgdGhlIGtpY2tlcjogZW5hYmxpbmcgU0VWLVNOUCAqcmVxdWlyZXMqIGhhcmR3YXJlIHN1cHBvcnQ6IHRoZSBNU1JzLCB0aGUgQ1BVSUQgZmVhdHVyZXMsIGFuZCB0aGUgUk1QIHRhYmxlLiBRRU1VIGRvZXMgKm5vdCogZW11bGF0ZSBTRVYtU05QIGhvc3QgZmVhdHVyZXM7IGl0ICpjYW4qIGVtdWxhdGUgYW4gU0VWLVNOUCBndWVzdCwgYnV0IG5vdCBhIFNFVi1TTlAgaG9zdC4gVGhlcmVmb3JlLCBldmVuIGlmIHdlICpjb3VsZCogY2xlYXIgYFg4Nl9GRUFUVVJFX0hZUEVSVklTT1JgLCBgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKWAgd291bGQgc3RpbGwgZmFpbCBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHJlcXVpcmVtZW50cyB3b3VsZG4ndCBiZSBwcmVzZW50LlxuXG5TbywgdGhlIGNvbmNsdXNpb24gaXMgY2xlYXIuIFRoZSBjb3JlIGxvZ2ljIG9mIHRoaXMgcGF0Y2ggaXMgZXNzZW50aWFsbHkgdW5yZWFjaGFibGUgaW4gYW55IHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVUsIHJlZ2FyZGxlc3Mgb2YgaG93IHdlIGNvbmZpZ3VyZSB0aGUgdmlydHVhbCBtYWNoaW5lLiBJdCdzIHNpbXBseSBpbXBvc3NpYmxlIHRvIHRyaWdnZXIgdGhlIGludGVuZGVkIGJlaGF2aW9yLiBUaGVyZWZvcmUsIHRoaXMgaXMgbm90IHdvcnRoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTc4LCJPdXRwdXRUb2tlbnMiOjE5NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIzOjM0OjUyLjMyMjM2MzY2NloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIEFNRCBSTVBPUFQgaW5zdHJ1Y3Rpb24sIHdoaWNoIGlzIHBhcnQgb2YgdGhlIEFNRCBTRVYtU05QIChTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIC0gU2VjdXJlIE5lc3RlZCBQYWdpbmcpIGhvc3Qgc3VwcG9ydC4gQWxsIHRoZSBtb2RpZmllZCBhbmQgYWRkZWQgZnVuY3Rpb25zIChlLmcuLCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtLCBzbnBfc2V0dXBfcm1wb3B0LCBzbnBfcHJlcGFyZSwgc25wX3NodXRkb3duKSBhcmUgZ3VhcmRlZCBieSBjaGVja3MgZm9yIENDX0FUVFJfSE9TVF9TRVZfU05QIG9yIGV4cGxpY2l0bHkgcmVxdWlyZSB0aGUgYWJzZW5jZSBvZiBYODZfRkVBVFVSRV9IWVBFUlZJU09SLiBTaW5jZSBzeXprYWxsZXIgcnVucyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKEdDRS9RRU1VKSB3aGVyZSBYODZfRkVBVFVSRV9IWVBFUlZJU09SIGlzIHNldCBhbmQgU0VWLVNOUCBob3N0IGhhcmR3YXJlIGZlYXR1cmVzIGFyZSBub3QgZW11bGF0ZWQsIHRoaXMgY29kZSBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCB0ZXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbiwgd2hpY2ggaXMgcGFydCBvZiB0aGUgQU1EIFNFVi1TTlAgKFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gLSBTZWN1cmUgTmVzdGVkIFBhZ2luZykgaG9zdCBzdXBwb3J0LiBBbGwgdGhlIG1vZGlmaWVkIGFuZCBhZGRlZCBmdW5jdGlvbnMgKGUuZy4sIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0sIHNucF9zZXR1cF9ybXBvcHQsIHNucF9wcmVwYXJlLCBzbnBfc2h1dGRvd24pIGFyZSBndWFyZGVkIGJ5IGNoZWNrcyBmb3IgQ0NfQVRUUl9IT1NUX1NFVl9TTlAgb3IgZXhwbGljaXRseSByZXF1aXJlIHRoZSBhYnNlbmNlIG9mIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IuIFNpbmNlIHN5emthbGxlciBydW5zIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoR0NFL1FFTVUpIHdoZXJlIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IgaXMgc2V0IGFuZCBTRVYtU05QIGhvc3QgaGFyZHdhcmUgZmVhdHVyZXMgYXJlIG5vdCBlbXVsYXRlZCwgdGhpcyBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMzozNDo1Mi4zMjI0MDQxNTZaIiwiU2VxIjo0NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4s7mn[1] Phase: Running StartedAt: 2026-08-10 23:35:03 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4s7mn[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-10 23:35:03 +0000 UTC FinishedAt: 2026-08-10 23:35:08 +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,}