Name: series-workflown2ffb Phase: Failed StartedAt: 2026-09-03 21:33:19 +0000 UTC FinishedAt: 2026-09-03 21:55:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflown2ffb[0] Phase: Succeeded StartedAt: 2026-09-03 21:33:19 +0000 UTC FinishedAt: 2026-09-03 21:55:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflown2ffb[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 21:33:19 +0000 UTC FinishedAt: 2026-09-03 21:55:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIxOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHMgc3VwcG9ydCBmb3IgQU1EIFNFVi1TTlAgUk1QT1BUIChSTVAgT3B0aW1pemF0aW9uKSBpbnN0cnVjdGlvbnMgYW5kIG1hbmFnZW1lbnQgZm9yIEFNRCBaZW42JiM0MzsgaG9zdCBwcm9jZXNzb3JzLiBUaGVzZSBjb2RlIHBhdGhzIHJlcXVpcmUgcGh5c2ljYWwgQU1EIGhhcmR3YXJlIHN1cHBvcnRpbmcgU0VWLVNOUCBob3N0IGZlYXR1cmVzIGFuZCB0aGUgQU1EIFBsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKSwgYW5kIGFyZSBkaXNhYmxlZCB3aGVuIHJ1bm5pbmcgaW5zaWRlIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUiBkaXNhYmxlcyBDQ19BVFRSX0hPU1RfU0VWX1NOUCBkdXJpbmcgYm9vdCkuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjE6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjZDg2YzY4MmY4MTdiMTI3MGEzNTg1MzMyMjdhYzYwMDg5ZWJhNjRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAyMTo1Mzo0OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuaW5kZXggZjcwZWU3NGI1ZjkyMS4uM2I1YjMyZDMzOTFiNSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbkBAIC03Niw3ICYjNDM7NzYsNyBAQFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfSzhcdFx0XHQoIDMqMzImIzQzOyA0KSAvKiBPcHRlcm9uLCBBdGhsb242NCAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfWkVONVx0XHQoIDMqMzImIzQzOyA1KSAvKiBDUFUgYmFzZWQgb24gWmVuNSBtaWNyb2FyY2hpdGVjdHVyZSAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfWkVONlx0XHQoIDMqMzImIzQzOyA2KSAvKiBDUFUgYmFzZWQgb24gWmVuNiBtaWNyb2FyY2hpdGVjdHVyZSAqL1xuLS8qIEZyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDMqMzImIzQzOyA3KSAqL1xuJiM0MzsjZGVmaW5lIFg4Nl9GRUFUVVJFX1JNUE9QVFx0XHQoIDMqMzImIzQzOyA3KSAvKiBTdXBwb3J0IGZvciBBTUQgUk1QT1BUIGluc3RydWN0aW9uICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9DT05TVEFOVF9UU0NcdCggMyozMiYjNDM7IDgpIC8qIFwmIzM0O2NvbnN0YW50X3RzY1wmIzM0OyBUU0MgdGlja3MgYXQgYSBjb25zdGFudCByYXRlICovXG4gLyogZnJlZTogd2FzICNkZWZpbmUgWDg2X0ZFQVRVUkVfVVBcdCggMyozMiYjNDM7IDkpICogXCYjMzQ7dXBcJiMzNDsgU01QIGtlcm5lbCBydW5uaW5nIG9uIFVQICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9BUlRcdFx0XHQoIDMqMzImIzQzOzEwKSAvKiBcJiMzNDthcnRcJiMzNDsgQWx3YXlzIHJ1bm5pbmcgdGltZXIgKEFSVCkgKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXG5pbmRleCAzYThlNTFhMGM5ZTg4Li4xNjM1ZTJlMWM1NzZhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXG5AQCAtNzYxLDYgJiM0Mzs3NjEsOSBAQFxuICNkZWZpbmUgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRF9CSVRcdDBcbiAjZGVmaW5lIE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRURcdEJJVF9VTEwoTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRF9CSVQpXG4gI2RlZmluZSBNU1JfQU1ENjRfUk1QX1NFR01FTlRfU0hJRlQoeClcdCgoKHgpIFx1MDAyNiBHRU5NQVNLX1VMTCgxMywgOCkpIFx1MDAzZVx1MDAzZSA4KVxuJiM0MzsjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfQkFTRVx0XHQweGMwMDEwMTM5XG4mIzQzOyNkZWZpbmUgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVfQklUXHQwXG4mIzQzOyNkZWZpbmUgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVcdFx0QklUX1VMTChNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRV9CSVQpXG4gXG4gI2RlZmluZSBNU1JfU1ZTTV9DQUFcdFx0XHQweGMwMDFmMDAwXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaFxuaW5kZXggOWU3YTA3N2M0NDVkYy4uMzIzNWUxNzE2NDdkZCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaFxuQEAgLTY2Miw2ICYjNDM7NjYyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNucF9sZWFrX3BhZ2VzKHU2NCBwZm4sIHVuc2lnbmVkIGludCBwYWdlcylcbiBcdF9fc25wX2xlYWtfcGFnZXMocGZuLCBwYWdlcywgdHJ1ZSk7XG4gfVxuIGludCBzbnBfcHJlcGFyZSh2b2lkKTtcbiYjNDM7dm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpO1xuJiM0Mzt2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZCk7XG4gdm9pZCBzbnBfc2h1dGRvd24odm9pZCk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGJvb2wgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8odm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cbkBAIC02ODAsNiAmIzQzOzY4Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfbGVha19wYWdlcyh1NjQgcGZuLCB1bnNpZ25lZCBpbnQgbnBhZ2VzKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrZHVtcF9zZXZfY2FsbGJhY2sodm9pZCkgeyB9XG4gc3RhdGljIGlubGluZSB2b2lkIHNucF9maXh1cF9lODIwX3RhYmxlcyh2b2lkKSB7fVxuIHN0YXRpYyBpbmxpbmUgaW50IHNucF9wcmVwYXJlKHZvaWQpIHsgcmV0dXJuIC1FTk9ERVY7IH1cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCkge31cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZCkge31cbiBzdGF0aWMgaW5saW5lIHZvaWQgc25wX3NodXRkb3duKHZvaWQpIHt9XG4gI2VuZGlmXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcbmluZGV4IDg2NjVhNjQ3NDgwNmMuLmQxNzk1Y2UyMTlkYWIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jXG5AQCAtNjcsNiAmIzQzOzY3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVpZF9iaXQgY3B1aWRfYml0c1tdID0ge1xuIFx0eyBYODZfRkVBVFVSRV9QRVJGTU9OX1YyLFx0XHRDUFVJRF9FQVgsICAwLCAweDgwMDAwMDIyLCAwIH0sXG4gXHR7IFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIsXHRcdENQVUlEX0VBWCwgIDEsIDB4ODAwMDAwMjIsIDAgfSxcbiBcdHsgWDg2X0ZFQVRVUkVfQU1EX0xCUl9QTUNfRlJFRVpFLFx0Q1BVSURfRUFYLCAgMiwgMHg4MDAwMDAyMiwgMCB9LFxuJiM0MztcdHsgWDg2X0ZFQVRVUkVfUk1QT1BULFx0XHRcdENQVUlEX0VEWCwgIDAsIDB4ODAwMDAwMjUsIDAgfSxcbiBcdHsgWDg2X0ZFQVRVUkVfQU1EX0hUUl9DT1JFUyxcdFx0Q1BVSURfRUFYLCAzMCwgMHg4MDAwMDAyNiwgMCB9LFxuIFx0eyAwLCAwLCAwLCAwLCAwIH1cbiB9O1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5pbmRleCA1NzA1NzIzZjFmNDEyLi4wYmFiZjk2ZTM4YzZmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuQEAgLTMwMzIsNiAmIzQzOzMwMzIsMTYgQEAgdm9pZCBzZXZfdm1fZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdCAqL1xuIFx0XHRpZiAoc25wX2RlY29tbWlzc2lvbl9jb250ZXh0KGt2bSkpXG4gXHRcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBQZXJmb3JtIFJNUCBvcHRpbWl6YXRpb25zIG9uIG1lbW9yeSBmcmVlZCBieSB0ZXJtaW5hdGluZ1xuJiM0MztcdFx0ICogZ3Vlc3RzLiAgVGhlIHNjYW4gaXMgZGVmZXJyZWQsIHNvIGl0IG5vcm1hbGx5IHJ1bnMgYWZ0ZXJcbiYjNDM7XHRcdCAqIHNldl9nbWVtX2ludmFsaWRhdGUoKSBoYXMgY29udmVydGVkIHRoaXMgZ3Vlc3QmIzM5O3MgcGFnZXMgYmFjayB0b1xuJiM0MztcdFx0ICogc2hhcmVkLCBhbmQgcGlja3MgdGhlbSB1cCB0aGVuLiAgQSB2ZXJ5IGxhcmdlIGd1ZXN0IHdob3NlXG4mIzQzO1x0XHQgKiBjb252ZXJzaW9uIGhhcyBub3QgZmluaXNoZWQgYnkgdGhlbiBpcyBwaWNrZWQgdXAgYnkgYSBsYXRlclxuJiM0MztcdFx0ICogdGVhcmRvd24mIzM5O3Mgc2Nhbi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c25wX3JtcG9wdF9hbGxfcGh5c21lbSgpO1xuIFx0fSBlbHNlIHtcbiBcdFx0c2V2X3VuYmluZF9hc2lkKGt2bSwgc2V2LVx1MDAzZWhhbmRsZSk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC9zdm0vc2V2LmMgYi9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY1xuaW5kZXggY2ZmMjg1ZDhhZDhlMy4uZmI2NmExYWE2ZmMzNSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY1xuQEAgLTE5LDYgJiM0MzsxOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tbXUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2FtZC1pb21tdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbm9zcGVjLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc2V2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcHJvY2Vzc29yLmhcdTAwM2VcbkBAIC0xMjQsNiAmIzQzOzEyNSwxNyBAQCBzdGF0aWMgdm9pZCAqcm1wX2Jvb2trZWVwaW5nIF9fcm9fYWZ0ZXJfaW5pdDtcbiBcbiBzdGF0aWMgdTY0IHByb2JlZF9ybXBfYmFzZSwgcHJvYmVkX3JtcF9zaXplO1xuIFxuJiM0MztzdGF0aWMgdTY0IHJtcG9wdF9wYV9zdGFydCwgcm1wb3B0X3BhX2VuZDtcbiYjNDM7XG4mIzQzO2VudW0gcm1wb3B0X29wX3R5cGUge1xuJiM0MztcdFJNUE9QVF9PUF9WRVJJRllfQU5EX1JFUE9SVF9TVEFUVVMsXG4mIzQzO1x0Uk1QT1BUX09QX1JFUE9SVF9TVEFUVVNcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcm1wb3B0X3dxO1xuJiM0MztzdGF0aWMgc3RydWN0IGRlbGF5ZWRfd29yayBybXBvcHRfZGVsYXllZF93b3JrO1xuJiM0MztzdGF0aWMgREVGSU5FX01VVEVYKHJtcG9wdF93cV9tdXRleCk7XG4mIzQzO1xuIHN0YXRpYyBMSVNUX0hFQUQoc25wX2xlYWtlZF9wYWdlc19saXN0KTtcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNucF9sZWFrZWRfcGFnZXNfbGlzdF9sb2NrKTtcbiBcbkBAIC01MTMsNyAmIzQzOzUyNSw2IEBAIHN0YXRpYyB2b2lkIGNsZWFyX2hzYXZlX3BhKHZvaWQgKmFyZylcbiBcbiBpbnQgc25wX3ByZXBhcmUodm9pZClcbiB7XG4tXHRpbnQgcmV0O1xuIFx0dTY0IHZhbDtcbiBcbiBcdC8qXG5AQCAtNTI2LDE0ICYjNDM7NTM3LDE4IEBAIGludCBzbnBfcHJlcGFyZSh2b2lkKVxuIFxuIFx0Y2xlYXJfcm1wKCk7XG4gXG4tXHRjcHVzX3JlYWRfbG9jaygpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTm8gQ1BVIG1heSBjb21lIG9ubGluZSB3aXRob3V0IFNucEVuIHdoaWxlIFNOUCBpcyBhY3RpdmU7IGRpc2FibGVcbiYjNDM7XHQgKiBob3RwbHVnIGhlcmUgYW5kIHJlLWVuYWJsZSBpdCBpbiBzbnBfc2h1dGRvd24oKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRjcHVfaG90cGx1Z19kaXNhYmxlKCk7XG4gXG4gXHRpZiAoIWNwdW1hc2tfZXF1YWwoY3B1X29ubGluZV9tYXNrLCBjcHVfcHJlc2VudF9tYXNrKSkge1xuLVx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdGNwdV9ob3RwbHVnX2VuYWJsZSgpO1xuIFx0XHRwcl93YXJuKFwmIzM0O1NOUCBpbml0IGZhaWxlZDogbm90IGFsbCBDUFVzIG9ubGluZS4gKCUqcGJsIG9ubGluZSBcdTAwM2MtXHUwMDNlICUqcGJsIHByZXNlbnQgbWFza3MpLlxcblwmIzM0OyxcbiBcdFx0XHRjcHVtYXNrX3ByX2FyZ3MoY3B1X29ubGluZV9tYXNrKSxcbiBcdFx0XHRjcHVtYXNrX3ByX2FyZ3MoY3B1X3ByZXNlbnRfbWFzaykpO1xuLVx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbiBcbiBcdHdiaW52ZF9vbl9hbGxfY3B1cygpO1xuQEAgLTU0OCwxNCAmIzQzOzU2MywzNSBAQCBpbnQgc25wX3ByZXBhcmUodm9pZClcbiBcdC8qIFNOUF9JTklUIHJlcXVpcmVzIE1TUl9WTV9IU0FWRV9QQSB0byBiZSBjbGVhcmVkIG9uIGFsbCBDUFVzLiAqL1xuIFx0b25fZWFjaF9jcHUoY2xlYXJfaHNhdmVfcGEsIE5VTEwsIDEpO1xuIFxuLVx0cmV0ID0gMDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9wcmVwYXJlLCBcJiMzNDtjY3BcJiMzNDspO1xuIFxuLXVubG9jazpcbi1cdGNwdXNfcmVhZF91bmxvY2soKTtcbiYjNDM7c3RhdGljIHZvaWQgcm1wb3B0X2Rpc2FibGUodm9pZClcbiYjNDM7e1xuJiM0MztcdGludCBjcHU7XG4gXG4tXHRyZXR1cm4gcmV0O1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZybXBvcHRfd3FfbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIHJtcG9wdF93cSBpcyBub24tTlVMTCBvbmx5IGFmdGVyIFJNUE9QVCBoYXMgYmVlbiBmdWxseSBzZXQgdXA6IHRoZVxuJiM0MztcdCAqIHdvcmtxdWV1ZSBpcyBhbGxvY2F0ZWQgYW5kIHRoZSBSTVBPUFRfQkFTRSBNU1JzIGFyZSBwcm9ncmFtbWVkLlxuJiM0MztcdCAqIHNucF9zZXR1cF9ybXBvcHQoKSByZXNldHMgaXQgdG8gTlVMTCBpZiBhbnkgb2YgdGhvc2Ugc3RlcHMgZmFpbCwgc28gYVxuJiM0MztcdCAqIE5VTEwgcm1wb3B0X3dxIG1lYW5zIG5vdGhpbmcgd2FzIHNldCB1cCBhbmQgdGhlcmUgaXMgbm90aGluZyB0byB0ZWFyXG4mIzQzO1x0ICogZG93bi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXJtcG9wdF93cSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmspO1xuJiM0MztcdGRlc3Ryb3lfd29ya3F1ZXVlKHJtcG9wdF93cSk7XG4mIzQzO1xuJiM0MztcdGZvcl9lYWNoX2NwdShjcHUsIGNwdV9wcmltYXJ5X3RocmVhZF9tYXNrKVxuJiM0MztcdFx0d3Jtc3JxX29uX2NwdShjcHUsIE1TUl9BTUQ2NF9STVBPUFRfQkFTRSwgMCk7XG4mIzQzO1xuJiM0MztcdHJtcG9wdF9wYV9zdGFydCA9IHJtcG9wdF9wYV9lbmQgPSAwO1xuJiM0MztcdHJtcG9wdF93cSA9IE5VTEw7XG4gfVxuLUVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3ByZXBhcmUsIFwmIzM0O2NjcFwmIzM0Oyk7XG4gXG4gdm9pZCBzbnBfc2h1dGRvd24odm9pZClcbiB7XG5AQCAtNTY1LDExICYjNDM7NjAxLDE1NiBAQCB2b2lkIHNucF9zaHV0ZG93bih2b2lkKVxuIFx0aWYgKHN5c2NmZyBcdTAwMjYgTVNSX0FNRDY0X1NZU0NGR19TTlBfRU4pXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRybXBvcHRfZGlzYWJsZSgpO1xuJiM0MztcbiBcdGNsZWFyX3JtcCgpO1xuIFx0b25fZWFjaF9jcHUobWZkX3JlY29uZmlndXJlLCBOVUxMLCAxKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgZmlybXdhcmUgaGFzIGRpc2FibGVkIFNOUCAoU25wRW4gaXMgY2xlYXIpLCBzbyByZS1lbmFibGUgQ1BVXG4mIzQzO1x0ICogaG90cGx1Zy4gIEEgbGVnYWN5IFNOUCBzaHV0ZG93biByZXR1cm5zIGFib3ZlIHdpdGggU25wRW4gc3RpbGwgc2V0IGFuZFxuJiM0MztcdCAqIGxlYXZlcyBob3RwbHVnIGRpc2FibGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGNwdV9ob3RwbHVnX2VuYWJsZSgpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zaHV0ZG93biwgXCYjMzQ7Y2NwXCYjMzQ7KTtcbiBcbiYjNDM7c3RhdGljIGJvb2wgcm1wb3B0X2NhcGFibGUodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUE9QVCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJNUE9QVCBvcHRpbWl6YXRpb25zIHNraXAgUk1QIGNoZWNrcyBhdCAxR0IgZ3JhbnVsYXJpdHkgaWYgdGhpcyByYW5nZSBvZlxuJiM0MzsgKiBtZW1vcnkgZG9lcyBub3QgY29udGFpbiBhbnkgU05QIGd1ZXN0IG1lbW9yeS5cbiYjNDM7ICpcbiYjNDM7ICogQHBhIGlzIGEgc3lzdGVtIHBoeXNpY2FsIGFkZHJlc3M7IFJNUE9QVCBvcGVyYXRlcyBvbiB0aGUgY29udGFpbmluZyAxR0IuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBybXBvcHQodTY0IHBhKVxuJiM0Mzt7XG4mIzQzO1x0ZW51bSBybXBvcHRfb3BfdHlwZSBvcCA9IFJNUE9QVF9PUF9WRVJJRllfQU5EX1JFUE9SVF9TVEFUVVM7XG4mIzQzO1x0dTY0IHBhX3N0YXJ0ID0gQUxJR05fRE9XTihwYSwgU1pfMUcpO1xuJiM0MztcbiYjNDM7XHRhc20gdm9sYXRpbGUoXCYjMzQ7LmJ5dGUgMHhmMiwgMHgwZiwgMHgwMSwgMHhmY1wmIzM0O1xuJiM0MztcdFx0ICAgICA6OiBcJiMzNDthXCYjMzQ7IChwYV9zdGFydCksIFwmIzM0O2NcJiMzNDsgKG9wKVxuJiM0MztcdFx0ICAgICA6IFwmIzM0O21lbW9yeVwmIzM0OywgXCYjMzQ7Y2NcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBvbl9lYWNoX2NwdSgpIGNhbGxiYWNrOiBvcHRpbWl6ZSB0aGUgd2hvbGUgUk1QT1BUIHJhbmdlIG9uIHRoaXMgQ1BVLiAqL1xuJiM0MztzdGF0aWMgdm9pZCBybXBvcHRfc2Nhbl9yYW5nZSh2b2lkICphcmcpXG4mIzQzO3tcbiYjNDM7XHR1NjQgcGE7XG4mIzQzO1xuJiM0MztcdGZvciAocGEgPSBybXBvcHRfcGFfc3RhcnQ7IHBhIFx1MDAzYyBybXBvcHRfcGFfZW5kOyBwYSAmIzQzOz0gU1pfMUcpXG4mIzQzO1x0XHRybXBvcHQocGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkb19ybXBvcHRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJNUE9QVCBjYWNoZXMgdGhlIHJlc3VsdHMgb2YgYSBSTVAgdGFibGUgc2NhbiBpbiByZXNlcnZlZCBwcm9jZXNzb3JcbiYjNDM7XHQgKiBtZW1vcnksIGFsbG93aW5nIGZ1dHVyZSBpbnZvY2F0aW9ucyB0byBza2lwIHN1Y2ggY29zdGx5IG9wZXJhdGlvbnMuXG4mIzQzO1x0ICovXG4mIzQzO1x0bWlncmF0ZV9kaXNhYmxlKCk7XG4mIzQzO1x0cm1wb3B0X3NjYW5fcmFuZ2UoTlVMTCk7XG4mIzQzO1x0bWlncmF0ZV9lbmFibGUoKTtcbiYjNDM7XG4mIzQzO1x0b25fZWFjaF9jcHVfbWFzayhjcHVfcHJpbWFyeV90aHJlYWRfbWFzaywgcm1wb3B0X3NjYW5fcmFuZ2UsIE5VTEwsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEZWxheSwgaW4gbWlsbGlzZWNvbmRzLCBiZWZvcmUgdGhlIFJNUCByZS1vcHRpbWl6YXRpb24gcGFzcyBydW5zIGFmdGVyIGFuXG4mIzQzOyAqIFNOUCBndWVzdCBpcyB0b3JuIGRvd24uICBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKCkgcmUtYXJtcyB0aGUgZGVsYXllZCB3b3JrXG4mIzQzOyAqIHdpdGggbW9kX2RlbGF5ZWRfd29yaygpIG9uIGVhY2ggdGVhcmRvd24sIHNvIHRoZSBwYXNzIGZpcmVzIHRoaXMgbG9uZyBhZnRlclxuJiM0MzsgKiB0aGUgbGFzdCB0ZWFyZG93bi4gIFRoaXMgY29hbGVzY2VzIGEgYnVyc3Qgb2YgdGVhcmRvd25zIGludG8gYSBzaW5nbGUgc2NhblxuJiM0MzsgKiBhbmQgZ2l2ZXMgZWFjaCBndWVzdCYjMzk7cyBwYWdlcyB0aW1lIHRvIGJlIGNvbnZlcnRlZCBiYWNrIHRvIHRoZSBzaGFyZWQsXG4mIzQzOyAqIGh5cGVydmlzb3Itb3duZWQgc3RhdGUgYmVmb3JlIHRoZSBzY2FuIHJlLW9wdGltaXplcyB0aGVpciAxR0IgcmVnaW9ucy4gIFRoZVxuJiM0MzsgKiAxMCBzZWNvbmQgdmFsdWUgaXMgYSBoZXVyaXN0aWMgdHJhZGluZyByZS1vcHRpbWl6YXRpb24gbGF0ZW5jeSBhZ2FpbnN0XG4mIzQzOyAqIHNjYW5uaW5nIHRvbyBlYWdlcmx5LlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBSTVBPUFRfV09SS19USU1FT1VUXHQoMTAgKiBNU0VDX1BFUl9TRUMpXG4mIzQzO1xuJiM0Mzt2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZClcbiYjNDM7e1xuJiM0MztcdGlmICghcm1wb3B0X2NhcGFibGUoKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJtcG9wdF93cV9tdXRleCk7XG4mIzQzO1xuJiM0MztcdGlmICghcm1wb3B0X3dxKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRtb2RfZGVsYXllZF93b3JrKHJtcG9wdF93cSwgXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yayxcbiYjNDM7XHRcdFx0IG1zZWNzX3RvX2ppZmZpZXMoUk1QT1BUX1dPUktfVElNRU9VVCkpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3JtcG9wdF9hbGxfcGh5c21lbSwgXCYjMzQ7a3ZtLWFtZFwmIzM0Oyk7XG4mIzQzO1xuJiM0Mzt2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZClcbiYjNDM7e1xuJiM0MztcdHU2NCBybXBvcHRfYmFzZTtcbiYjNDM7XHRpbnQgY3B1O1xuJiM0MztcbiYjNDM7XHRpZiAoIXJtcG9wdF9jYXBhYmxlKCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZybXBvcHRfd3FfbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9uIHJlLWluaXRpYWxpemF0aW9uIGFmdGVyIGEgbGVnYWN5IFNOUCBzaHV0ZG93biAoU05QX1NIVVRET1dOX0VYXG4mIzQzO1x0ICogd2l0aCB4ODZfc25wX3NodXRkb3duPTApLCBzbnBfc2h1dGRvd24oKSBhbmQgdGh1cyBybXBvcHRfZGlzYWJsZSgpIGFyZVxuJiM0MztcdCAqIHNraXBwZWQsIHNvIHRoZSB3b3JrcXVldWUsIGRlbGF5ZWQgd29yayBhbmQgcGVyLUNQVSBSTVBPUFRfQkFTRSBNU1JzXG4mIzQzO1x0ICogYXJlIHN0aWxsIHNldCB1cCBhbmQgdmFsaWQgKFNucEVuIHN0YXllZCBzZXQgYW5kIENQVSBob3RwbHVnIHN0YXllZFxuJiM0MztcdCAqIGRpc2FibGVkKS4gIFJhdGhlciB0aGFuIHJlLWRvaW5nIHRoZSBzZXR1cCwgd2hpY2ggd291bGQgbGVhayB0aGVcbiYjNDM7XHQgKiBleGlzdGluZyBzdGF0ZSwganVzdCByZS1xdWV1ZSB0aGUgb3B0aW1pemF0aW9uIHBhc3MgdG8gcmUtb3B0aW1pemUgYW55XG4mIzQzO1x0ICogbWVtb3J5IHRoZSBwcmV2aW91cyBTTlAgc2Vzc2lvbiBkZS1vcHRpbWl6ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJtcG9wdF93cSkge1xuJiM0MztcdFx0cXVldWVfZGVsYXllZF93b3JrKHJtcG9wdF93cSwgXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENyZWF0ZSBhbiBSTVBPUFQtc3BlY2lmaWMgd29ya3F1ZXVlIHRvIGF2b2lkIHNjaGVkdWxpbmdcbiYjNDM7XHQgKiBSTVBPUFQgd29ya2l0ZW0gb24gdGhlIGdsb2JhbCBzeXN0ZW0gd29ya3F1ZXVlLlxuJiM0MztcdCAqL1xuJiM0MztcdHJtcG9wdF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDtybXBvcHRfd3FcJiMzNDssIFdRX1VOQk9VTkQsIDEpO1xuJiM0MztcdGlmICghcm1wb3B0X3dxKSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIFJNUE9QVCB3b3JrcXVldWVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgZG9fcm1wb3B0X3dvcmspO1xuJiM0MztcbiYjNDM7XHRybXBvcHRfcGFfc3RhcnQgPSBBTElHTl9ET1dOKFBGTl9QSFlTKG1pbl9sb3dfcGZuKSwgU1pfMUcpO1xuJiM0MztcdHJtcG9wdF9iYXNlID0gcm1wb3B0X3BhX3N0YXJ0IHwgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEU7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUGVyLUNQVSBSTVBPUFQgdGFibGVzIGNvdmVyIGF0IG1vc3QgMiBUQi4gIFByb2dyYW0gZWFjaCBjb3JlJiMzOTtzXG4mIzQzO1x0ICogUk1QT1BUX0JBU0Ugd2l0aCB0aGUgc3RhcnQgb2YgUkFNIHRvIG9wdGltaXplIHVwIHRvIDIgVEIuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yX2VhY2hfY3B1KGNwdSwgY3B1X3ByaW1hcnlfdGhyZWFkX21hc2spXG4mIzQzO1x0XHR3cm1zcnFfb25fY3B1KGNwdSwgTVNSX0FNRDY0X1JNUE9QVF9CQVNFLCBybXBvcHRfYmFzZSk7XG4mIzQzO1xuJiM0MztcdHJtcG9wdF9wYV9lbmQgPSBBTElHTihQRk5fUEhZUyhtYXhfcGZuKSwgU1pfMUcpO1xuJiM0MztcbiYjNDM7XHQvKiBMaW1pdCBtZW1vcnkgc2Nhbm5pbmcgdG8gMlRCIG9mIFJBTSAqL1xuJiM0MztcdGlmICgocm1wb3B0X3BhX2VuZCAtIHJtcG9wdF9wYV9zdGFydCkgXHUwMDNlIFNaXzJUKSB7XG4mIzQzO1x0XHRwcl9pbmZvKFwmIzM0O1JNUE9QVCBjb3ZlcmFnZSBsaW1pdGVkIHRvIDJUQjsgbWVtb3J5IGFib3ZlIDB4JWxseCBub3Qgb3B0aW1pemVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRybXBvcHRfcGFfc3RhcnQgJiM0MzsgU1pfMlQpO1xuJiM0MztcdFx0cm1wb3B0X3BhX2VuZCA9IHJtcG9wdF9wYV9zdGFydCAmIzQzOyBTWl8yVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogT25jZSBhbGwgcGVyLUNQVSBSTVBPUFQgdGFibGVzIGhhdmUgYmVlbiBjb25maWd1cmVkLCBlbmFibGUgUk1QT1BUXG4mIzQzO1x0ICogb3B0aW1pemF0aW9ucyBvbiBhbGwgcGh5c2ljYWwgbWVtb3J5LlxuJiM0MztcdCAqL1xuJiM0MztcdHF1ZXVlX2RlbGF5ZWRfd29yayhybXBvcHRfd3EsIFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmssIDApO1xuJiM0MztcbiYjNDM7XHRwcl9pbmZvKFwmIzM0O1JNUE9QVCBvcHRpbWl6YXRpb25zIGVuYWJsZWRcXG5cJiMzNDspO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NldHVwX3JtcG9wdCwgXCYjMzQ7Y2NwXCYjMzQ7KTtcbiYjNDM7XG4gLypcbiAgKiBEbyB0aGUgbmVjZXNzYXJ5IHByZXBhcmF0aW9ucyB3aGljaCBhcmUgdmVyaWZpZWQgYnkgdGhlIGZpcm13YXJlIGFzXG4gICogZGVzY3JpYmVkIGluIHRoZSBTTlBfSU5JVF9FWCBmaXJtd2FyZSBjb21tYW5kIGRlc2NyaXB0aW9uIGluIHRoZSBTTlBcbkBAIC01NzcsNiAmIzQzOzc1OCw4IEBAIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCBcJiMzNDtjY3BcJiMzNDspO1xuICAqL1xuIGludCBfX2luaXQgc25wX3JtcHRhYmxlX2luaXQodm9pZClcbiB7XG4mIzQzO1x0dTY0IHZhbDtcbiYjNDM7XG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKSlcbiBcdFx0cmV0dXJuIC1FTk9TWVM7XG4gXG5AQCAtNTg2LDYgJiM0Mzs3NjksMTUgQEAgaW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxuIFx0aWYgKCFzZXR1cF9ybXB0YWJsZSgpKVxuIFx0XHRyZXR1cm4gLUVOT1NZUztcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9uIGEga2V4ZWMgYm9vdCBTTlAgbWF5IGFscmVhZHkgYmUgZW5hYmxlZCAobGVnYWN5IGZpcm13YXJlIGxlYXZlc1xuJiM0MztcdCAqIFNucEVuIHNldCBhY3Jvc3Mgc2h1dGRvd24pLCBpbiB3aGljaCBjYXNlIHNucF9wcmVwYXJlKCkgYmFpbHMgd2l0aG91dFxuJiM0MztcdCAqIGRpc2FibGluZyBDUFUgaG90cGx1Zywgc28gZGlzYWJsZSBpdCBoZXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdHJkbXNycShNU1JfQU1ENjRfU1lTQ0ZHLCB2YWwpO1xuJiM0MztcdGlmICh2YWwgXHUwMDI2IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKVxuJiM0MztcdFx0Y3B1X2hvdHBsdWdfZGlzYWJsZSgpO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBTZXR0aW5nIGNyYXNoX2tleGVjX3Bvc3Rfbm90aWZpZXJzIHRvICYjMzk7dHJ1ZSYjMzk7IHRvIGVuc3VyZSB0aGF0IFNOUCBwYW5pY1xuIFx0ICogbm90aWZpZXIgaXMgaW52b2tlZCB0byBkbyBTTlAgSU9NTVUgc2h1dGRvd24gYmVmb3JlIGtkdW1wLlxuQEAgLTY4MywxMyAmIzQzOzg3NSwyMSBAQCBzdGF0aWMgYm9vbCBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbyh2b2lkKVxuIFxuIGJvb2wgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8odm9pZClcbiB7XG4tXHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TRUdNRU5URURfUk1QKSlcbiYjNDM7XHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TRUdNRU5URURfUk1QKSkge1xuIFx0XHRyZG1zcnEoTVNSX0FNRDY0X1JNUF9DRkcsIHJtcF9jZmcpO1xuIFxuLVx0aWYgKHJtcF9jZmcgXHUwMDI2IE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRUQpXG4tXHRcdHJldHVybiBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbygpO1xuLVx0ZWxzZVxuLVx0XHRyZXR1cm4gcHJvYmVfY29udGlndW91c19ybXB0YWJsZV9pbmZvKCk7XG4mIzQzO1x0XHRpZiAocm1wX2NmZyBcdTAwMjYgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRClcbiYjNDM7XHRcdFx0cmV0dXJuIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNlZ21lbnRlZCBSTVAgaXMgZWl0aGVyIG5vdCBzdXBwb3J0ZWQgb24gdGhlIHBsYXRmb3JtIG9yIGlzXG4mIzQzO1x0ICogZGlzYWJsZWQgYnkgdGhlIGZpcm13YXJlLiAgUk1QT1BUIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dFxuJiM0MztcdCAqIHNlZ21lbnRlZCBSTVAuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9STVBPUFQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHJvYmVfY29udGlndW91c19ybXB0YWJsZV9pbmZvKCk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcbmluZGV4IGY4MzNjYjdlNGRhMzYuLjI4N2E4MzQ1ODU0YmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jXG5AQCAtMTY2Myw2ICYjNDM7MTY2Myw4IEBAIHN0YXRpYyBpbnQgX19zZXZfc25wX2luaXRfbG9ja2VkKGludCAqZXJyb3IsIHVuc2lnbmVkIGludCBtYXhfc25wX2FzaWQpXG4gXG4gXHRzZXZfZXNfdG1yX3NpemUgPSBTTlBfVE1SX1NJWkU7XG4gXG4mIzQzO1x0c25wX3NldHVwX3JtcG9wdCgpO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMTo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciBBTUQgU0VWLVNOUCBSTVBPUFQgKFJNUCBPcHRpbWl6YXRpb24pIGluc3RydWN0aW9ucyBhbmQgbWFuYWdlbWVudCBmb3IgQU1EIFplbjYmIzQzOyBob3N0IHByb2Nlc3NvcnMuIFRoZXNlIGNvZGUgcGF0aHMgcmVxdWlyZSBwaHlzaWNhbCBBTUQgaGFyZHdhcmUgc3VwcG9ydGluZyBTRVYtU05QIGhvc3QgZmVhdHVyZXMgYW5kIHRoZSBBTUQgUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApLCBhbmQgYXJlIGRpc2FibGVkIHdoZW4gcnVubmluZyBpbnNpZGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChYODZfRkVBVFVSRV9IWVBFUlZJU09SIGRpc2FibGVzIENDX0FUVFJfSE9TVF9TRVZfU05QIGR1cmluZyBib290KS4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNkODZjNjgyZjgxN2IxMjcwYTM1ODUzMzIyN2FjNjAwODllYmE2NGEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDIxOjUzOjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgKaW5kZXggZjcwZWU3NGI1ZjkyMS4uM2I1YjMyZDMzOTFiNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oCkBAIC03Niw3ICYjNDM7NzYsNyBAQAogI2RlZmluZSBYODZfRkVBVFVSRV9LOAkJCSggMyozMiYjNDM7IDQpIC8qIE9wdGVyb24sIEF0aGxvbjY0ICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1pFTjUJCSggMyozMiYjNDM7IDUpIC8qIENQVSBiYXNlZCBvbiBaZW41IG1pY3JvYXJjaGl0ZWN0dXJlICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1pFTjYJCSggMyozMiYjNDM7IDYpIC8qIENQVSBiYXNlZCBvbiBaZW42IG1pY3JvYXJjaGl0ZWN0dXJlICovCi0vKiBGcmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAzKjMyJiM0MzsgNykgKi8KJiM0MzsjZGVmaW5lIFg4Nl9GRUFUVVJFX1JNUE9QVAkJKCAzKjMyJiM0MzsgNykgLyogU3VwcG9ydCBmb3IgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbiAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MJKCAzKjMyJiM0MzsgOCkgLyogJiMzNDtjb25zdGFudF90c2MmIzM0OyBUU0MgdGlja3MgYXQgYSBjb25zdGFudCByYXRlICovCiAvKiBmcmVlOiB3YXMgI2RlZmluZSBYODZfRkVBVFVSRV9VUAkoIDMqMzImIzQzOyA5KSAqICYjMzQ7dXAmIzM0OyBTTVAga2VybmVsIHJ1bm5pbmcgb24gVVAgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfQVJUCQkJKCAzKjMyJiM0MzsxMCkgLyogJiMzNDthcnQmIzM0OyBBbHdheXMgcnVubmluZyB0aW1lciAoQVJUKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaAppbmRleCAzYThlNTFhMGM5ZTg4Li4xNjM1ZTJlMWM1NzZhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaApAQCAtNzYxLDYgJiM0Mzs3NjEsOSBAQAogI2RlZmluZSBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVAkwCiAjZGVmaW5lIE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRUQJQklUX1VMTChNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVCkKICNkZWZpbmUgTVNSX0FNRDY0X1JNUF9TRUdNRU5UX1NISUZUKHgpCSgoKHgpICZhbXA7IEdFTk1BU0tfVUxMKDEzLCA4KSkgJmd0OyZndDsgOCkKJiM0MzsjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfQkFTRQkJMHhjMDAxMDEzOQomIzQzOyNkZWZpbmUgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVfQklUCTAKJiM0MzsjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFCQlCSVRfVUxMKE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFX0JJVCkKIAogI2RlZmluZSBNU1JfU1ZTTV9DQUEJCQkweGMwMDFmMDAwCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgKaW5kZXggOWU3YTA3N2M0NDVkYy4uMzIzNWUxNzE2NDdkZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgKQEAgLTY2Miw2ICYjNDM7NjYyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNucF9sZWFrX3BhZ2VzKHU2NCBwZm4sIHVuc2lnbmVkIGludCBwYWdlcykKIAlfX3NucF9sZWFrX3BhZ2VzKHBmbiwgcGFnZXMsIHRydWUpOwogfQogaW50IHNucF9wcmVwYXJlKHZvaWQpOwomIzQzO3ZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKTsKJiM0Mzt2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZCk7CiB2b2lkIHNucF9zaHV0ZG93bih2b2lkKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGJvb2wgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8odm9pZCkgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTY4MCw2ICYjNDM7NjgyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNucF9sZWFrX3BhZ2VzKHU2NCBwZm4sIHVuc2lnbmVkIGludCBucGFnZXMpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQga2R1bXBfc2V2X2NhbGxiYWNrKHZvaWQpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIHNucF9maXh1cF9lODIwX3RhYmxlcyh2b2lkKSB7fQogc3RhdGljIGlubGluZSBpbnQgc25wX3ByZXBhcmUodm9pZCkgeyByZXR1cm4gLUVOT0RFVjsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpIHt9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZCkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2h1dGRvd24odm9pZCkge30KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYwppbmRleCA4NjY1YTY0NzQ4MDZjLi5kMTc5NWNlMjE5ZGFiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmMKQEAgLTY3LDYgJiM0Mzs2Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRfYml0IGNwdWlkX2JpdHNbXSA9IHsKIAl7IFg4Nl9GRUFUVVJFX1BFUkZNT05fVjIsCQlDUFVJRF9FQVgsICAwLCAweDgwMDAwMDIyLCAwIH0sCiAJeyBYODZfRkVBVFVSRV9BTURfTEJSX1YyLAkJQ1BVSURfRUFYLCAgMSwgMHg4MDAwMDAyMiwgMCB9LAogCXsgWDg2X0ZFQVRVUkVfQU1EX0xCUl9QTUNfRlJFRVpFLAlDUFVJRF9FQVgsICAyLCAweDgwMDAwMDIyLCAwIH0sCiYjNDM7CXsgWDg2X0ZFQVRVUkVfUk1QT1BULAkJCUNQVUlEX0VEWCwgIDAsIDB4ODAwMDAwMjUsIDAgfSwKIAl7IFg4Nl9GRUFUVVJFX0FNRF9IVFJfQ09SRVMsCQlDUFVJRF9FQVgsIDMwLCAweDgwMDAwMDI2LCAwIH0sCiAJeyAwLCAwLCAwLCAwLCAwIH0KIH07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwppbmRleCA1NzA1NzIzZjFmNDEyLi4wYmFiZjk2ZTM4YzZmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKQEAgLTMwMzIsNiAmIzQzOzMwMzIsMTYgQEAgdm9pZCBzZXZfdm1fZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pCiAJCSAqLwogCQlpZiAoc25wX2RlY29tbWlzc2lvbl9jb250ZXh0KGt2bSkpCiAJCQlyZXR1cm47CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogUGVyZm9ybSBSTVAgb3B0aW1pemF0aW9ucyBvbiBtZW1vcnkgZnJlZWQgYnkgdGVybWluYXRpbmcKJiM0MzsJCSAqIGd1ZXN0cy4gIFRoZSBzY2FuIGlzIGRlZmVycmVkLCBzbyBpdCBub3JtYWxseSBydW5zIGFmdGVyCiYjNDM7CQkgKiBzZXZfZ21lbV9pbnZhbGlkYXRlKCkgaGFzIGNvbnZlcnRlZCB0aGlzIGd1ZXN0JiMzOTtzIHBhZ2VzIGJhY2sgdG8KJiM0MzsJCSAqIHNoYXJlZCwgYW5kIHBpY2tzIHRoZW0gdXAgdGhlbi4gIEEgdmVyeSBsYXJnZSBndWVzdCB3aG9zZQomIzQzOwkJICogY29udmVyc2lvbiBoYXMgbm90IGZpbmlzaGVkIGJ5IHRoZW4gaXMgcGlja2VkIHVwIGJ5IGEgbGF0ZXIKJiM0MzsJCSAqIHRlYXJkb3duJiMzOTtzIHNjYW4uCiYjNDM7CQkgKi8KJiM0MzsJCXNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKTsKIAl9IGVsc2UgewogCQlzZXZfdW5iaW5kX2FzaWQoa3ZtLCBzZXYtJmd0O2hhbmRsZSk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC9zdm0vc2V2LmMgYi9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYwppbmRleCBjZmYyODVkOGFkOGUzLi5mYjY2YTFhYTZmYzM1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYwpAQCAtMTksNiAmIzQzOzE5LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pb21tdS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2FtZC1pb21tdS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25vc3BlYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS9zZXYuaCZndDsKICNpbmNsdWRlICZsdDthc20vcHJvY2Vzc29yLmgmZ3Q7CkBAIC0xMjQsNiAmIzQzOzEyNSwxNyBAQCBzdGF0aWMgdm9pZCAqcm1wX2Jvb2trZWVwaW5nIF9fcm9fYWZ0ZXJfaW5pdDsKIAogc3RhdGljIHU2NCBwcm9iZWRfcm1wX2Jhc2UsIHByb2JlZF9ybXBfc2l6ZTsKIAomIzQzO3N0YXRpYyB1NjQgcm1wb3B0X3BhX3N0YXJ0LCBybXBvcHRfcGFfZW5kOwomIzQzOwomIzQzO2VudW0gcm1wb3B0X29wX3R5cGUgewomIzQzOwlSTVBPUFRfT1BfVkVSSUZZX0FORF9SRVBPUlRfU1RBVFVTLAomIzQzOwlSTVBPUFRfT1BfUkVQT1JUX1NUQVRVUwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpybXBvcHRfd3E7CiYjNDM7c3RhdGljIHN0cnVjdCBkZWxheWVkX3dvcmsgcm1wb3B0X2RlbGF5ZWRfd29yazsKJiM0MztzdGF0aWMgREVGSU5FX01VVEVYKHJtcG9wdF93cV9tdXRleCk7CiYjNDM7CiBzdGF0aWMgTElTVF9IRUFEKHNucF9sZWFrZWRfcGFnZXNfbGlzdCk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNucF9sZWFrZWRfcGFnZXNfbGlzdF9sb2NrKTsKIApAQCAtNTEzLDcgJiM0Mzs1MjUsNiBAQCBzdGF0aWMgdm9pZCBjbGVhcl9oc2F2ZV9wYSh2b2lkICphcmcpCiAKIGludCBzbnBfcHJlcGFyZSh2b2lkKQogewotCWludCByZXQ7CiAJdTY0IHZhbDsKIAogCS8qCkBAIC01MjYsMTQgJiM0Mzs1MzcsMTggQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpCiAKIAljbGVhcl9ybXAoKTsKIAotCWNwdXNfcmVhZF9sb2NrKCk7CiYjNDM7CS8qCiYjNDM7CSAqIE5vIENQVSBtYXkgY29tZSBvbmxpbmUgd2l0aG91dCBTbnBFbiB3aGlsZSBTTlAgaXMgYWN0aXZlOyBkaXNhYmxlCiYjNDM7CSAqIGhvdHBsdWcgaGVyZSBhbmQgcmUtZW5hYmxlIGl0IGluIHNucF9zaHV0ZG93bigpLgomIzQzOwkgKi8KJiM0MzsJY3B1X2hvdHBsdWdfZGlzYWJsZSgpOwogCiAJaWYgKCFjcHVtYXNrX2VxdWFsKGNwdV9vbmxpbmVfbWFzaywgY3B1X3ByZXNlbnRfbWFzaykpIHsKLQkJcmV0ID0gLUVPUE5PVFNVUFA7CiYjNDM7CQljcHVfaG90cGx1Z19lbmFibGUoKTsKIAkJcHJfd2FybigmIzM0O1NOUCBpbml0IGZhaWxlZDogbm90IGFsbCBDUFVzIG9ubGluZS4gKCUqcGJsIG9ubGluZSAmbHQ7LSZndDsgJSpwYmwgcHJlc2VudCBtYXNrcykuXG4mIzM0OywKIAkJCWNwdW1hc2tfcHJfYXJncyhjcHVfb25saW5lX21hc2spLAogCQkJY3B1bWFza19wcl9hcmdzKGNwdV9wcmVzZW50X21hc2spKTsKLQkJZ290byB1bmxvY2s7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCiAJd2JpbnZkX29uX2FsbF9jcHVzKCk7CkBAIC01NDgsMTQgJiM0Mzs1NjMsMzUgQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpCiAJLyogU05QX0lOSVQgcmVxdWlyZXMgTVNSX1ZNX0hTQVZFX1BBIHRvIGJlIGNsZWFyZWQgb24gYWxsIENQVXMuICovCiAJb25fZWFjaF9jcHUoY2xlYXJfaHNhdmVfcGEsIE5VTEwsIDEpOwogCi0JcmV0ID0gMDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3ByZXBhcmUsICYjMzQ7Y2NwJiMzNDspOwogCi11bmxvY2s6Ci0JY3B1c19yZWFkX3VubG9jaygpOwomIzQzO3N0YXRpYyB2b2lkIHJtcG9wdF9kaXNhYmxlKHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgY3B1OwogCi0JcmV0dXJuIHJldDsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7cm1wb3B0X3dxX211dGV4KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogcm1wb3B0X3dxIGlzIG5vbi1OVUxMIG9ubHkgYWZ0ZXIgUk1QT1BUIGhhcyBiZWVuIGZ1bGx5IHNldCB1cDogdGhlCiYjNDM7CSAqIHdvcmtxdWV1ZSBpcyBhbGxvY2F0ZWQgYW5kIHRoZSBSTVBPUFRfQkFTRSBNU1JzIGFyZSBwcm9ncmFtbWVkLgomIzQzOwkgKiBzbnBfc2V0dXBfcm1wb3B0KCkgcmVzZXRzIGl0IHRvIE5VTEwgaWYgYW55IG9mIHRob3NlIHN0ZXBzIGZhaWwsIHNvIGEKJiM0MzsJICogTlVMTCBybXBvcHRfd3EgbWVhbnMgbm90aGluZyB3YXMgc2V0IHVwIGFuZCB0aGVyZSBpcyBub3RoaW5nIHRvIHRlYXIKJiM0MzsJICogZG93bi4KJiM0MzsJICovCiYjNDM7CWlmICghcm1wb3B0X3dxKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtybXBvcHRfZGVsYXllZF93b3JrKTsKJiM0MzsJZGVzdHJveV93b3JrcXVldWUocm1wb3B0X3dxKTsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfY3B1KGNwdSwgY3B1X3ByaW1hcnlfdGhyZWFkX21hc2spCiYjNDM7CQl3cm1zcnFfb25fY3B1KGNwdSwgTVNSX0FNRDY0X1JNUE9QVF9CQVNFLCAwKTsKJiM0MzsKJiM0MzsJcm1wb3B0X3BhX3N0YXJ0ID0gcm1wb3B0X3BhX2VuZCA9IDA7CiYjNDM7CXJtcG9wdF93cSA9IE5VTEw7CiB9Ci1FWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9wcmVwYXJlLCAmIzM0O2NjcCYjMzQ7KTsKIAogdm9pZCBzbnBfc2h1dGRvd24odm9pZCkKIHsKQEAgLTU2NSwxMSAmIzQzOzYwMSwxNTYgQEAgdm9pZCBzbnBfc2h1dGRvd24odm9pZCkKIAlpZiAoc3lzY2ZnICZhbXA7IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKQogCQlyZXR1cm47CiAKJiM0MzsJcm1wb3B0X2Rpc2FibGUoKTsKJiM0MzsKIAljbGVhcl9ybXAoKTsKIAlvbl9lYWNoX2NwdShtZmRfcmVjb25maWd1cmUsIE5VTEwsIDEpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgZmlybXdhcmUgaGFzIGRpc2FibGVkIFNOUCAoU25wRW4gaXMgY2xlYXIpLCBzbyByZS1lbmFibGUgQ1BVCiYjNDM7CSAqIGhvdHBsdWcuICBBIGxlZ2FjeSBTTlAgc2h1dGRvd24gcmV0dXJucyBhYm92ZSB3aXRoIFNucEVuIHN0aWxsIHNldCBhbmQKJiM0MzsJICogbGVhdmVzIGhvdHBsdWcgZGlzYWJsZWQuCiYjNDM7CSAqLwomIzQzOwljcHVfaG90cGx1Z19lbmFibGUoKTsKIH0KIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCAmIzM0O2NjcCYjMzQ7KTsKIAomIzQzO3N0YXRpYyBib29sIHJtcG9wdF9jYXBhYmxlKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9STVBPUFQpICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUk1QT1BUIG9wdGltaXphdGlvbnMgc2tpcCBSTVAgY2hlY2tzIGF0IDFHQiBncmFudWxhcml0eSBpZiB0aGlzIHJhbmdlIG9mCiYjNDM7ICogbWVtb3J5IGRvZXMgbm90IGNvbnRhaW4gYW55IFNOUCBndWVzdCBtZW1vcnkuCiYjNDM7ICoKJiM0MzsgKiBAcGEgaXMgYSBzeXN0ZW0gcGh5c2ljYWwgYWRkcmVzczsgUk1QT1BUIG9wZXJhdGVzIG9uIHRoZSBjb250YWluaW5nIDFHQi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBybXBvcHQodTY0IHBhKQomIzQzO3sKJiM0MzsJZW51bSBybXBvcHRfb3BfdHlwZSBvcCA9IFJNUE9QVF9PUF9WRVJJRllfQU5EX1JFUE9SVF9TVEFUVVM7CiYjNDM7CXU2NCBwYV9zdGFydCA9IEFMSUdOX0RPV04ocGEsIFNaXzFHKTsKJiM0MzsKJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7LmJ5dGUgMHhmMiwgMHgwZiwgMHgwMSwgMHhmYyYjMzQ7CiYjNDM7CQkgICAgIDo6ICYjMzQ7YSYjMzQ7IChwYV9zdGFydCksICYjMzQ7YyYjMzQ7IChvcCkKJiM0MzsJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MzsvKiBvbl9lYWNoX2NwdSgpIGNhbGxiYWNrOiBvcHRpbWl6ZSB0aGUgd2hvbGUgUk1QT1BUIHJhbmdlIG9uIHRoaXMgQ1BVLiAqLwomIzQzO3N0YXRpYyB2b2lkIHJtcG9wdF9zY2FuX3JhbmdlKHZvaWQgKmFyZykKJiM0Mzt7CiYjNDM7CXU2NCBwYTsKJiM0MzsKJiM0MzsJZm9yIChwYSA9IHJtcG9wdF9wYV9zdGFydDsgcGEgJmx0OyBybXBvcHRfcGFfZW5kOyBwYSAmIzQzOz0gU1pfMUcpCiYjNDM7CQlybXBvcHQocGEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkb19ybXBvcHRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBSTVBPUFQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGEgUk1QIHRhYmxlIHNjYW4gaW4gcmVzZXJ2ZWQgcHJvY2Vzc29yCiYjNDM7CSAqIG1lbW9yeSwgYWxsb3dpbmcgZnV0dXJlIGludm9jYXRpb25zIHRvIHNraXAgc3VjaCBjb3N0bHkgb3BlcmF0aW9ucy4KJiM0MzsJICovCiYjNDM7CW1pZ3JhdGVfZGlzYWJsZSgpOwomIzQzOwlybXBvcHRfc2Nhbl9yYW5nZShOVUxMKTsKJiM0MzsJbWlncmF0ZV9lbmFibGUoKTsKJiM0MzsKJiM0MzsJb25fZWFjaF9jcHVfbWFzayhjcHVfcHJpbWFyeV90aHJlYWRfbWFzaywgcm1wb3B0X3NjYW5fcmFuZ2UsIE5VTEwsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIERlbGF5LCBpbiBtaWxsaXNlY29uZHMsIGJlZm9yZSB0aGUgUk1QIHJlLW9wdGltaXphdGlvbiBwYXNzIHJ1bnMgYWZ0ZXIgYW4KJiM0MzsgKiBTTlAgZ3Vlc3QgaXMgdG9ybiBkb3duLiAgc25wX3JtcG9wdF9hbGxfcGh5c21lbSgpIHJlLWFybXMgdGhlIGRlbGF5ZWQgd29yawomIzQzOyAqIHdpdGggbW9kX2RlbGF5ZWRfd29yaygpIG9uIGVhY2ggdGVhcmRvd24sIHNvIHRoZSBwYXNzIGZpcmVzIHRoaXMgbG9uZyBhZnRlcgomIzQzOyAqIHRoZSBsYXN0IHRlYXJkb3duLiAgVGhpcyBjb2FsZXNjZXMgYSBidXJzdCBvZiB0ZWFyZG93bnMgaW50byBhIHNpbmdsZSBzY2FuCiYjNDM7ICogYW5kIGdpdmVzIGVhY2ggZ3Vlc3QmIzM5O3MgcGFnZXMgdGltZSB0byBiZSBjb252ZXJ0ZWQgYmFjayB0byB0aGUgc2hhcmVkLAomIzQzOyAqIGh5cGVydmlzb3Itb3duZWQgc3RhdGUgYmVmb3JlIHRoZSBzY2FuIHJlLW9wdGltaXplcyB0aGVpciAxR0IgcmVnaW9ucy4gIFRoZQomIzQzOyAqIDEwIHNlY29uZCB2YWx1ZSBpcyBhIGhldXJpc3RpYyB0cmFkaW5nIHJlLW9wdGltaXphdGlvbiBsYXRlbmN5IGFnYWluc3QKJiM0MzsgKiBzY2FubmluZyB0b28gZWFnZXJseS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFJNUE9QVF9XT1JLX1RJTUVPVVQJKDEwICogTVNFQ19QRVJfU0VDKQomIzQzOwomIzQzO3ZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKCFybXBvcHRfY2FwYWJsZSgpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDtybXBvcHRfd3FfbXV0ZXgpOwomIzQzOwomIzQzOwlpZiAoIXJtcG9wdF93cSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbW9kX2RlbGF5ZWRfd29yayhybXBvcHRfd3EsICZhbXA7cm1wb3B0X2RlbGF5ZWRfd29yaywKJiM0MzsJCQkgbXNlY3NfdG9famlmZmllcyhSTVBPUFRfV09SS19USU1FT1VUKSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3JtcG9wdF9hbGxfcGh5c21lbSwgJiMzNDtrdm0tYW1kJiMzNDspOwomIzQzOwomIzQzO3ZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKQomIzQzO3sKJiM0MzsJdTY0IHJtcG9wdF9iYXNlOwomIzQzOwlpbnQgY3B1OwomIzQzOwomIzQzOwlpZiAoIXJtcG9wdF9jYXBhYmxlKCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3JtcG9wdF93cV9tdXRleCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE9uIHJlLWluaXRpYWxpemF0aW9uIGFmdGVyIGEgbGVnYWN5IFNOUCBzaHV0ZG93biAoU05QX1NIVVRET1dOX0VYCiYjNDM7CSAqIHdpdGggeDg2X3NucF9zaHV0ZG93bj0wKSwgc25wX3NodXRkb3duKCkgYW5kIHRodXMgcm1wb3B0X2Rpc2FibGUoKSBhcmUKJiM0MzsJICogc2tpcHBlZCwgc28gdGhlIHdvcmtxdWV1ZSwgZGVsYXllZCB3b3JrIGFuZCBwZXItQ1BVIFJNUE9QVF9CQVNFIE1TUnMKJiM0MzsJICogYXJlIHN0aWxsIHNldCB1cCBhbmQgdmFsaWQgKFNucEVuIHN0YXllZCBzZXQgYW5kIENQVSBob3RwbHVnIHN0YXllZAomIzQzOwkgKiBkaXNhYmxlZCkuICBSYXRoZXIgdGhhbiByZS1kb2luZyB0aGUgc2V0dXAsIHdoaWNoIHdvdWxkIGxlYWsgdGhlCiYjNDM7CSAqIGV4aXN0aW5nIHN0YXRlLCBqdXN0IHJlLXF1ZXVlIHRoZSBvcHRpbWl6YXRpb24gcGFzcyB0byByZS1vcHRpbWl6ZSBhbnkKJiM0MzsJICogbWVtb3J5IHRoZSBwcmV2aW91cyBTTlAgc2Vzc2lvbiBkZS1vcHRpbWl6ZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAocm1wb3B0X3dxKSB7CiYjNDM7CQlxdWV1ZV9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCAmYW1wO3JtcG9wdF9kZWxheWVkX3dvcmssIDApOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIENyZWF0ZSBhbiBSTVBPUFQtc3BlY2lmaWMgd29ya3F1ZXVlIHRvIGF2b2lkIHNjaGVkdWxpbmcKJiM0MzsJICogUk1QT1BUIHdvcmtpdGVtIG9uIHRoZSBnbG9iYWwgc3lzdGVtIHdvcmtxdWV1ZS4KJiM0MzsJICovCiYjNDM7CXJtcG9wdF93cSA9IGFsbG9jX3dvcmtxdWV1ZSgmIzM0O3JtcG9wdF93cSYjMzQ7LCBXUV9VTkJPVU5ELCAxKTsKJiM0MzsJaWYgKCFybXBvcHRfd3EpIHsKJiM0MzsJCXByX2VycigmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBSTVBPUFQgd29ya3F1ZXVlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJSU5JVF9ERUxBWUVEX1dPUksoJmFtcDtybXBvcHRfZGVsYXllZF93b3JrLCBkb19ybXBvcHRfd29yayk7CiYjNDM7CiYjNDM7CXJtcG9wdF9wYV9zdGFydCA9IEFMSUdOX0RPV04oUEZOX1BIWVMobWluX2xvd19wZm4pLCBTWl8xRyk7CiYjNDM7CXJtcG9wdF9iYXNlID0gcm1wb3B0X3BhX3N0YXJ0IHwgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEU7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFBlci1DUFUgUk1QT1BUIHRhYmxlcyBjb3ZlciBhdCBtb3N0IDIgVEIuICBQcm9ncmFtIGVhY2ggY29yZSYjMzk7cwomIzQzOwkgKiBSTVBPUFRfQkFTRSB3aXRoIHRoZSBzdGFydCBvZiBSQU0gdG8gb3B0aW1pemUgdXAgdG8gMiBUQi4KJiM0MzsJICovCiYjNDM7CWZvcl9lYWNoX2NwdShjcHUsIGNwdV9wcmltYXJ5X3RocmVhZF9tYXNrKQomIzQzOwkJd3Jtc3JxX29uX2NwdShjcHUsIE1TUl9BTUQ2NF9STVBPUFRfQkFTRSwgcm1wb3B0X2Jhc2UpOwomIzQzOwomIzQzOwlybXBvcHRfcGFfZW5kID0gQUxJR04oUEZOX1BIWVMobWF4X3BmbiksIFNaXzFHKTsKJiM0MzsKJiM0MzsJLyogTGltaXQgbWVtb3J5IHNjYW5uaW5nIHRvIDJUQiBvZiBSQU0gKi8KJiM0MzsJaWYgKChybXBvcHRfcGFfZW5kIC0gcm1wb3B0X3BhX3N0YXJ0KSAmZ3Q7IFNaXzJUKSB7CiYjNDM7CQlwcl9pbmZvKCYjMzQ7Uk1QT1BUIGNvdmVyYWdlIGxpbWl0ZWQgdG8gMlRCOyBtZW1vcnkgYWJvdmUgMHglbGx4IG5vdCBvcHRpbWl6ZWRcbiYjMzQ7LAomIzQzOwkJCXJtcG9wdF9wYV9zdGFydCAmIzQzOyBTWl8yVCk7CiYjNDM7CQlybXBvcHRfcGFfZW5kID0gcm1wb3B0X3BhX3N0YXJ0ICYjNDM7IFNaXzJUOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE9uY2UgYWxsIHBlci1DUFUgUk1QT1BUIHRhYmxlcyBoYXZlIGJlZW4gY29uZmlndXJlZCwgZW5hYmxlIFJNUE9QVAomIzQzOwkgKiBvcHRpbWl6YXRpb25zIG9uIGFsbCBwaHlzaWNhbCBtZW1vcnkuCiYjNDM7CSAqLwomIzQzOwlxdWV1ZV9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCAmYW1wO3JtcG9wdF9kZWxheWVkX3dvcmssIDApOwomIzQzOwomIzQzOwlwcl9pbmZvKCYjMzQ7Uk1QT1BUIG9wdGltaXphdGlvbnMgZW5hYmxlZFxuJiMzNDspOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zZXR1cF9ybXBvcHQsICYjMzQ7Y2NwJiMzNDspOwomIzQzOwogLyoKICAqIERvIHRoZSBuZWNlc3NhcnkgcHJlcGFyYXRpb25zIHdoaWNoIGFyZSB2ZXJpZmllZCBieSB0aGUgZmlybXdhcmUgYXMKICAqIGRlc2NyaWJlZCBpbiB0aGUgU05QX0lOSVRfRVggZmlybXdhcmUgY29tbWFuZCBkZXNjcmlwdGlvbiBpbiB0aGUgU05QCkBAIC01NzcsNiAmIzQzOzc1OCw4IEBAIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCAmIzM0O2NjcCYjMzQ7KTsKICAqLwogaW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKQogewomIzQzOwl1NjQgdmFsOwomIzQzOwogCWlmIChXQVJOX09OX09OQ0UoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpKQogCQlyZXR1cm4gLUVOT1NZUzsKIApAQCAtNTg2LDYgJiM0Mzs3NjksMTUgQEAgaW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKQogCWlmICghc2V0dXBfcm1wdGFibGUoKSkKIAkJcmV0dXJuIC1FTk9TWVM7CiAKJiM0MzsJLyoKJiM0MzsJICogT24gYSBrZXhlYyBib290IFNOUCBtYXkgYWxyZWFkeSBiZSBlbmFibGVkIChsZWdhY3kgZmlybXdhcmUgbGVhdmVzCiYjNDM7CSAqIFNucEVuIHNldCBhY3Jvc3Mgc2h1dGRvd24pLCBpbiB3aGljaCBjYXNlIHNucF9wcmVwYXJlKCkgYmFpbHMgd2l0aG91dAomIzQzOwkgKiBkaXNhYmxpbmcgQ1BVIGhvdHBsdWcsIHNvIGRpc2FibGUgaXQgaGVyZS4KJiM0MzsJICovCiYjNDM7CXJkbXNycShNU1JfQU1ENjRfU1lTQ0ZHLCB2YWwpOwomIzQzOwlpZiAodmFsICZhbXA7IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKQomIzQzOwkJY3B1X2hvdHBsdWdfZGlzYWJsZSgpOwomIzQzOwogCS8qCiAJICogU2V0dGluZyBjcmFzaF9rZXhlY19wb3N0X25vdGlmaWVycyB0byAmIzM5O3RydWUmIzM5OyB0byBlbnN1cmUgdGhhdCBTTlAgcGFuaWMKIAkgKiBub3RpZmllciBpcyBpbnZva2VkIHRvIGRvIFNOUCBJT01NVSBzaHV0ZG93biBiZWZvcmUga2R1bXAuCkBAIC02ODMsMTMgJiM0Mzs4NzUsMjEgQEAgc3RhdGljIGJvb2wgcHJvYmVfc2VnbWVudGVkX3JtcHRhYmxlX2luZm8odm9pZCkKIAogYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKQogewotCWlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFR01FTlRFRF9STVApKQomIzQzOwlpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TRUdNRU5URURfUk1QKSkgewogCQlyZG1zcnEoTVNSX0FNRDY0X1JNUF9DRkcsIHJtcF9jZmcpOwogCi0JaWYgKHJtcF9jZmcgJmFtcDsgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRCkKLQkJcmV0dXJuIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKCk7Ci0JZWxzZQotCQlyZXR1cm4gcHJvYmVfY29udGlndW91c19ybXB0YWJsZV9pbmZvKCk7CiYjNDM7CQlpZiAocm1wX2NmZyAmYW1wOyBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEKQomIzQzOwkJCXJldHVybiBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbygpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNlZ21lbnRlZCBSTVAgaXMgZWl0aGVyIG5vdCBzdXBwb3J0ZWQgb24gdGhlIHBsYXRmb3JtIG9yIGlzCiYjNDM7CSAqIGRpc2FibGVkIGJ5IHRoZSBmaXJtd2FyZS4gIFJNUE9QVCBpcyBub3Qgc3VwcG9ydGVkIHdpdGhvdXQKJiM0MzsJICogc2VnbWVudGVkIFJNUC4KJiM0MzsJICovCiYjNDM7CXNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfUk1QT1BUKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHByb2JlX2NvbnRpZ3VvdXNfcm1wdGFibGVfaW5mbygpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMKaW5kZXggZjgzM2NiN2U0ZGEzNi4uMjg3YTgzNDU4NTRiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jCkBAIC0xNjYzLDYgJiM0MzsxNjYzLDggQEAgc3RhdGljIGludCBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoaW50ICplcnJvciwgdW5zaWduZWQgaW50IG1heF9zbnBfYXNpZCkKIAogCXNldl9lc190bXJfc2l6ZSA9IFNOUF9UTVJfU0laRTsKIAomIzQzOwlzbnBfc2V0dXBfcm1wb3B0KCk7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI2MwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDY1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNFVi1TTlAgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpczogaXMgdGhpcyBwYXRjaCBmdXp6LXdvcnRoeSwgYW5kIGlmIHNvLCBob3cgZG8gd2UgYmVzdCBhcHByb2FjaCBpdD8gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBjaGFuZ2VkLiBMb29rcyBsaWtlIHdlJiMzOTt2ZSBnb3Qgc29tZSBuZXcgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBgUk1QT1BUYCAoUmVzdHJpY3RlZCBNZW1vcnkgUHJvdGVjdGlvbiBPcHRpb25hbCkgaW4gdGhlIGB4ODZgIGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gQU1EIFNFVi1TTlAgKFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gLSBTZWN1cmUgTmVzdGVkIFBhZ2luZykuCgpJIHNlZSBoZWFkZXIgZmlsZXMgZGVmaW5pbmcgYFg4Nl9GRUFUVVJFX1JNUE9QVGAsIE1TUnMgbGlrZSBgTVNSX0FNRDY0X1JNUE9QVF9CQVNFYCwgYW5kIHNvbWUgc3VwcG9ydGluZyBmdW5jdGlvbnMgbGlrZSBgc25wX3JtcG9wdF9hbGxfcGh5c21lbWAgYW5kIGBzbnBfc2V0dXBfcm1wb3B0YC4gVGhlIGNoYW5nZXMgYXJlIHNwcmVhZCBhY3Jvc3MgdmFyaW91cyBwYXJ0cyBvZiB0aGUga2VybmVsLiBXZSYjMzk7cmUgdG91Y2hpbmcgYGNwdWZlYXR1cmVzLmhgLCBgbXNyLWluZGV4LmhgLCBgc2V2LmhgLCB0aGUgYHNjYXR0ZXJlZC5jYCBmaWxlICh3aGljaCBub3cgaW5jbHVkZXMgdGhlIGBYODZfRkVBVFVSRV9STVBPUFRgKSwgYW5kIHRoZW4gYm90aCB0aGUgS1ZNIGFuZCBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbiBTVk0gY29kZS4gSXQgc2VlbXMgbGlrZSB0aGUgS1ZNIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gZW5hYmxpbmcgYW5kIGRpc2FibGluZyBgUk1QT1BUYCwgYW5kIHRoZSBTRVYtU05QIGhvc3Qgc2V0dXAuIFRoZSBjcnlwdG8gZHJpdmVyIGFsc28gZ2V0cyBpbnZvbHZlZCwgY2FsbGluZyBgc25wX3NldHVwX3JtcG9wdCgpYCB3aXRoaW4gYHNldl9zbnBfaW5pdF9sb2NrZWQoKWAuCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogY2FuIHdlIGV2ZW4gKmZ1enoqIHRoaXMgaW4gYSB0eXBpY2FsIGVudmlyb25tZW50PyBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBTRVYtU05QJiMzOTtzIHJlbGlhbmNlIG9uIHNwZWNpZmljIEFNRCBoYXJkd2FyZSBhbmQgcG90ZW50aWFsbHkgYSBzcGVjaWZpYyBDQ1AgKENyeXB0b2dyYXBoaWMgQ29wcm9jZXNzb3IpIG9yIGZpcm13YXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgcmVhbGlzdGljYWxseSByZWFjaGFibGUgaW4gYSBRRU1VIHNldHVwLCBvciBHQ0UgZm9yIHRoYXQgbWF0dGVyLCBvciBpZiB3ZSYjMzk7cmUgZ29pbmcgdG8gbmVlZCBzb21lIGN1c3RvbSBlbnZpcm9ubWVudCB0byB0cmlnZ2VyIHRoZSBuZXcgY29kZSBwYXRocy4KCkkgbmVlZCB0byBjb25maXJtIGlmIHdlIGNhbiBydW4gdGhlIEFNRCBTRVYtU05QIGhvc3QgaW4gc3RhbmRhcmQgUUVNVS9uZXN0ZWQgdmlydHVhbGl6YXRpb24sIG9yIGlmIGl0IHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlL2Zpcm13YXJlLCBsZXQmIzM5O3MgdmVyaWZ5IGhvdyBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAgd29ya3MsIG9yIHdoYXQgdGhlIEtjb25maWcgc2V0dGluZ3MgYXJlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnLCBwcm9iYWJseSB1c2UgZ3JlcCwgb3IganVzdCByZWFkIHRoZSBjb2RlIHRvIHNlZSBob3cgU0VWLVNOUCBpcyBjb25maWd1cmVkLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgdGhhdCB3ZSBuZWVkIHRvIGFjY291bnQgZm9yLiBJZiBpdCYjMzk7cyBhIGhhcmR3YXJlLWdhdGVkIGZlYXR1cmUsIHRoYXQmIzM5O3MgYSB3aG9sZSBkaWZmZXJlbnQgYmFsbGdhbWUgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q0NfQVRUUl9IT1NUX1NFVl9TTlAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvY29jby9jb3JlLmM9NzA9c3RhdGljIGJvb2wgbm9pbnN0ciBhbWRfY2NfcGxhdGZvcm1faGFzKGVudW0gY2NfYXR0ciBhdHRyKVxuLS1cbmFyY2gveDg2L2NvY28vY29yZS5jLTEwMy1cbmFyY2gveDg2L2NvY28vY29yZS5jOjEwNDpcdGNhc2UgQ0NfQVRUUl9IT1NUX1NFVl9TTlA6XG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xMDUtXHRcdHJldHVybiBjY19mbGFncy5ob3N0X3Nldl9zbnA7XG4tLVxuYXJjaC94ODYvY29jby9jb3JlLmM9MTcwPXN0YXRpYyB2b2lkIGFtZF9jY19wbGF0Zm9ybV9jbGVhcihlbnVtIGNjX2F0dHIgYXR0cilcbi0tXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xNzItXHRzd2l0Y2ggKGF0dHIpIHtcbmFyY2gveDg2L2NvY28vY29yZS5jOjE3MzpcdGNhc2UgQ0NfQVRUUl9IT1NUX1NFVl9TTlA6XG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xNzQtXHRcdGNjX2ZsYWdzLmhvc3Rfc2V2X3NucCA9IDA7XG4tLVxuYXJjaC94ODYvY29jby9jb3JlLmM9MTkyPXN0YXRpYyB2b2lkIGFtZF9jY19wbGF0Zm9ybV9zZXQoZW51bSBjY19hdHRyIGF0dHIpXG4tLVxuYXJjaC94ODYvY29jby9jb3JlLmMtMTk0LVx0c3dpdGNoIChhdHRyKSB7XG5hcmNoL3g4Ni9jb2NvL2NvcmUuYzoxOTU6XHRjYXNlIENDX0FUVFJfSE9TVF9TRVZfU05QOlxuYXJjaC94ODYvY29jby9jb3JlLmMtMTk2LVx0XHRjY19mbGFncy5ob3N0X3Nldl9zbnAgPSAxO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM9MzU2PXN0YXRpYyB2b2lkIGJzcF9kZXRlcm1pbmVfc25wKHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3My1cdFx0ICAgIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKCkpIHtcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM6Mzc0Olx0XHRcdGNjX3BsYXRmb3JtX3NldChDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3NS1cdFx0fSBlbHNlIHtcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMtMzc2LVx0XHRcdHNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfU0VWX1NOUCk7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jOjM3NzpcdFx0XHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3OC1cdFx0fVxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmM9MTA0PXN0YXRpYyBpbmxpbmUgdm9pZCBrOF9jaGVja19zeXNjZmdfZHJhbV9tb2RfZW4odm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jLTExMS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmM6MTEyOlx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jLTExMy1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTEyNTc9c3RhdGljIGJvb2wgX19pbml0IGF2aWNfd2FudF9hdmljX2VuYWJsZWQodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMjgwLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTI4MTpcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTI4Mi1cdCAgICAhYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0hWX0lOVVNFX1dSX0FMTE9XRUQpKSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xMjU5PXN0YXRpYyB2b2lkICpzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2Moc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgX192YSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEyOTMtXHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTI5NDpcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMjk1LVx0XHRyZXR1cm4gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xMzAwPXN0YXRpYyB2b2lkIHNldl9kYmdfY3J5cHRfc2xvd19mcmVlKHZvaWQgKmJ1ZilcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMwMS17XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEzMDI6XHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMwMy1cdFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1Zik7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0zMDk2PXZvaWQgX19pbml0IHNldl9oYXJkd2FyZV9zZXR1cCh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzIwMC1cdHNldl9lc19zdXBwb3J0ZWQgPSB0cnVlO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjAxOlx0c2V2X3NucF9zdXBwb3J0ZWQgPSBzZXZfc25wX2VuYWJsZWQgXHUwMDI2XHUwMDI2IGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMDItXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00OTk1PXN0cnVjdCBwYWdlICpzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUoaW50IG5vZGUsIGdmcF90IGdmcClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5OTktXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUwMDA6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUwMDEtXHRcdHJldHVybiBhbGxvY19wYWdlc19ub2RlKG5vZGUsIGdmcCB8IF9fR0ZQX1pFUk8sIDApO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NTIxMz12b2lkIHNldl9nbWVtX21ha2Vfc2hhcmVkKGt2bV9wZm5fdCBwZm4sIGt2bV9wZm5fdCBucl9wYWdlcylcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUyMTYtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUyMTc6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUyMTgtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdC5jPTEwMj12b2lkIF9faW5pdCBtZW1fZW5jcnlwdF9zZXR1cF9hcmNoKHZvaWQpXG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHQuYy0xMTAtXHQgKi9cbmFyY2gveDg2L21tL21lbV9lbmNyeXB0LmM6MTExOlx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdC5jLTExMi1cdFx0c25wX2ZpeHVwX2U4MjBfdGFibGVzKCk7XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vY21kbGluZS5jPTE5PXN0YXRpYyBpbnQgX19pbml0IGluaXRfc2V2X2NvbmZpZyhjaGFyICpzdHIpXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vY21kbGluZS5jLTMxLVx0XHRcdFx0c2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9TRVZfU05QKTtcbmFyY2gveDg2L3ZpcnQvc3ZtL2NtZGxpbmUuYzozMjpcdFx0XHRcdGNjX3BsYXRmb3JtX2NsZWFyKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbmFyY2gveDg2L3ZpcnQvc3ZtL2NtZGxpbmUuYy0zMy1cdFx0XHRcdGNvbnRpbnVlO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTE0Nz1zdGF0aWMgdm9pZCBtZmRfcmVjb25maWd1cmUodm9pZCAqYXJnKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTQ4LXtcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjE0OTpcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTE1MC1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTE1OD1zdGF0aWMgdm9pZCBzbnBfZW5hYmxlKHZvaWQgKmFyZylcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xNjEtXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxNjI6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xNjMtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0yNjA9c3RhdGljIHZvaWQgY2xlYXJfcm1wKHZvaWQpXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMjY0LVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MjY1Olx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMjY2LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9NjE4PXN0YXRpYyBib29sIHJtcG9wdF9jYXBhYmxlKHZvaWQpXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNjIwLVx0cmV0dXJuIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QT1BUKSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjYyMTpcdCAgICAgICBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNjIyLX1cbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz03NTk9aW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTc2Mi1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjc2MzpcdGlmIChXQVJOX09OX09OQ0UoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNzY0LVx0XHRyZXR1cm4gLUVOT1NZUztcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz05Njg9c3RhdGljIGludCBfX3NucF9sb29rdXBfcm1wZW50cnkodTY0IHBmbiwgc3RydWN0IHJtcGVudHJ5ICplLCBpbnQgKmxldmVsKVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTk3Mi1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjk3MzpcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTk3NC1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MTA5ND1pbnQgcHNtYXNoKHU2NCBwZm4pXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTA5OC1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjEwOTk6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMTAwLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xMjAzPXN0YXRpYyBpbnQgcm1wdXBkYXRlKHU2NCBwZm4sIHN0cnVjdCBybXBfc3RhdGUgKnN0YXRlKVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTEyMDctXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxMjA4Olx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTIwOS1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MTI5Nj12b2lkIGtkdW1wX3Nldl9jYWxsYmFjayh2b2lkKVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTEzMDEtXHQgKi9cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjEzMDI6XHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTEzMDMtXHRcdHdiaW52ZCgpO1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MTUwOD1zdGF0aWMgaW50IF9fc2V2X3NucF9pbml0X2xvY2tlZChpbnQgKmVycm9yLCB1bnNpZ25lZCBpbnQgbWF4X3NucF9hc2lkKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMTUxNi1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MTUxNzpcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMTUxOC1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0yMDY3PXN0YXRpYyBpbnQgc2V2X2dldF9hcGlfdmVyc2lvbih2b2lkKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjA3Ni1cdCAqL1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoyMDc3Olx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpIHtcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjA3OC1cdFx0cmV0ID0gc25wX2dldF9wbGF0Zm9ybV9kYXRhKHNldiwgXHUwMDI2ZXJyb3IpO1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9Mjk3Nz11NjQgc2V2X2dldF9zbnBfcG9saWN5X2JpdHModm9pZClcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTI5ODItXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjI5ODM6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTI5ODQtXHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYz0zMzk1PXN0YXRpYyBfX2luaXQgdm9pZCBpb21tdV9zbnBfZW5hYmxlKHZvaWQpXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMzOTctI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjMzOTg6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzM5OS1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNDQxLWRpc2FibGVfc25wOlxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjM0NDI6XHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzQ0My0jZW5kaWZcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9MzU2Nz1zdGF0aWMgaW50IF9faW5pdCBpb21tdV9nb190b19zdGF0ZShlbnVtIGlvbW11X2luaXRfc3RhdGUgc3RhdGUpXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM1ODctXHQgKi9cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozNTg4Olx0aWYgKHJldCBcdTAwMjZcdTAwMjYgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNTg5LVx0ICAgICFXQVJOX09OX09OQ0UoYW1kX2lvbW11X3NucF9lbikpXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzU5MDpcdFx0Y2NfcGxhdGZvcm1fY2xlYXIoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM1OTEtXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jPTM2OTQ9dm9pZCBfX2luaXQgYW1kX2lvbW11X2RldGVjdCh2b2lkKVxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNzEzLWRpc2FibGVfc25wOlxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjM3MTQ6XHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozNzE1Olx0XHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzcxNi19XG4tLVxuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oPTIyPWVudW0gY2NfYXR0ciB7XG4tLVxuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oLTkyLVx0LyoqXG5pbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmg6OTM6XHQgKiBAQ0NfQVRUUl9IT1NUX1NFVl9TTlA6IEFNRCBTTlAgZW5hYmxlZCBvbiB0aGUgaG9zdC5cbmluY2x1ZGUvbGludXgvY2NfcGxhdGZvcm0uaC05NC1cdCAqXG4tLVxuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oLTk3LVx0ICovXG5pbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmg6OTg6XHRDQ19BVFRSX0hPU1RfU0VWX1NOUCxcbmluY2x1ZGUvbGludXgvY2NfcGxhdGZvcm0uaC05OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUwNwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEVuYWJsaW5nIENvbmRpdGlvbnMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBwcmVjaXNlbHkgYWxsb3dzIHRoZSBzeXN0ZW0gdG8gdXRpbGl6ZSBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIGFuZCBgWDg2X0ZFQVRVUkVfUk1QT1BUYC4gTXkgaW50dWl0aW9uIHNheXMgaXQgd2lsbCBiZSBiYXNlZCBvbiBDUFUgZmxhZ3Mgb3Igc29tZSBvdGhlciBwbGF0Zm9ybSBmZWF0dXJlLiBUbyBnZXQgYSBoYW5kbGUgb24gdGhpcywgSSYjMzk7bGwgZGl2ZSBpbnRvIHRoZSBgYXJjaC94ODYva2VybmVsL2NwdS9hbWQuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBzdGFydCBhcm91bmQgbGluZSAzNTYsIGFzIHRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgcGxhY2UgZm9yIEFNRC1zcGVjaWZpYyBDUFUgZmVhdHVyZSBpbml0aWFsaXphdGlvbiBvciBkZXRlY3Rpb24gbG9naWMsIHdoZXJlIHRoZSBlbmFibGluZyBjb25kaXRpb25zIGZvciB0aGVzZSBmZWF0dXJlcyB3b3VsZCBsaWtlbHkgYmUgZGVmaW5lZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM1MDpcdFx0XHRcdG5vZGUgPSBuZWFyYnlfbm9kZShhcGljaWQpO1xuIDM1MTpcdFx0fVxuIDM1MjpcdFx0bnVtYV9zZXRfbm9kZShjcHUsIG5vZGUpO1xuIDM1MzpcdCNlbmRpZlxuIDM1NDpcdH1cbiAzNTU6XHRcbiAzNTY6XHRzdGF0aWMgdm9pZCBic3BfZGV0ZXJtaW5lX3NucChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXG4gMzU3Olx0e1xuIDM1ODpcdCNpZmRlZiBDT05GSUdfQVJDSF9IQVNfQ0NfUExBVEZPUk1cbiAzNTk6XHRcdGNjX3ZlbmRvciA9IENDX1ZFTkRPUl9BTUQ7XG4gMzYwOlx0XG4gMzYxOlx0XHRpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9TRVZfU05QKSkge1xuIDM2MjpcdFx0XHQvKlxuIDM2MzpcdFx0XHQgKiBSTVAgdGFibGUgZW50cnkgZm9ybWF0IGlzIG5vdCBhcmNoaXRlY3R1cmFsIGFuZCBpcyBkZWZpbmVkIGJ5IHRoZVxuIDM2NDpcdFx0XHQgKiBwZXItcHJvY2Vzc29yIFBQUi4gUmVzdHJpY3QgU05QIHN1cHBvcnQgb24gdGhlIGtub3duIENQVSBtb2RlbHNcbiAzNjU6XHRcdFx0ICogZm9yIHdoaWNoIHRoZSBSTVAgdGFibGUgZW50cnkgZm9ybWF0IGlzIGN1cnJlbnRseSBkZWZpbmVkIG9yIGZvclxuIDM2NjpcdFx0XHQgKiBwcm9jZXNzb3JzIHdoaWNoIHN1cHBvcnQgdGhlIGFyY2hpdGVjdHVyYWxseSBkZWZpbmVkIFJNUFJFQURcbiAzNjc6XHRcdFx0ICogaW5zdHJ1Y3Rpb24uXG4gMzY4Olx0XHRcdCAqL1xuIDM2OTpcdFx0XHRpZiAoIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUikgXHUwMDI2XHUwMDI2XG4gMzcwOlx0XHRcdCAgICAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9aRU4zKSB8fFxuIDM3MTpcdFx0XHQgICAgIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfWkVONCkgfHxcbiAzNzI6XHRcdFx0ICAgICBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUFJFQUQpKSBcdTAwMjZcdTAwMjZcbiAzNzM6XHRcdFx0ICAgIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKCkpIHtcbiAzNzQ6XHRcdFx0XHRjY19wbGF0Zm9ybV9zZXQoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuIDM3NTpcdFx0XHR9IGVsc2Uge1xuIDM3NjpcdFx0XHRcdHNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfU0VWX1NOUCk7XG4gMzc3Olx0XHRcdFx0Y2NfcGxhdGZvcm1fY2xlYXIoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuIDM3ODpcdFx0XHR9XG4gMzc5Olx0XHR9XG4gMzgwOlx0I2VuZGlmXG4gMzgxOlx0fVxuIDM4MjpcdFxuIDM4MzpcdCNkZWZpbmUgWkVOX01PREVMX1NURVBfVUNPREUoZmFtLCBtb2RlbCwgc3RlcCwgdWNvZGUpIFxcXG4gMzg0Olx0XHRYODZfTUFUQ0hfVkZNX1NURVBTKFZGTV9NQUtFKFg4Nl9WRU5ET1JfQU1ELCBmYW0sIG1vZGVsKSwgXFxcbiAzODU6XHRcdFx0XHQgICAgc3RlcCwgc3RlcCwgdWNvZGUpXG4gMzg2Olx0XG4gMzg3Olx0c3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfY3B1X2lkIGFtZF90c2FfbWljcm9jb2RlW10gPSB7XG4gMzg4Olx0XHRaRU5fTU9ERUxfU1RFUF9VQ09ERSgweDE5LCAweDAxLCAweDEsIDB4MGEwMDExZDcpLFxuIDM4OTpcdFx0WkVOX01PREVMX1NURVBfVUNPREUoMHgxOSwgMHgwMSwgMHgyLCAweDBhMDAxMjNiKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ5NQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDU3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBTRVYtU05QIGFuZCBSTVBPUFQgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTGluZSAzNjkgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWU6IGBpZiAoIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUikgJmFtcDsmYW1wOyAuLi5gLiAgVGhlIGNoZWNrIGZvciB0aGUgYWJzZW5jZSBvZiB0aGUgaHlwZXJ2aXNvciBmZWF0dXJlIGlzIGludGVyZXN0aW5nLiBJIGtub3cgdGhhdCBgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUmAgaXMgc2V0IHdpdGhpbiBhIGh5cGVydmlzb3IgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRSAoQ1BVSUQgbGVhZiAweDEgRUNYIGJpdCAzMSkuIFNvLCBiZWNhdXNlIG9mIHRoaXMsIGBic3BfZGV0ZXJtaW5lX3NucGAgaXMgY29ycmVjdGx5IGNsZWFyaW5nIGBYODZfRkVBVFVSRV9TRVZfU05QYCBhbmQgdGhlbiBjYWxsaW5nIGBjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUClgIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLgoKTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjb25maXJtIHRoZSBvYnZpb3VzIOKAkyBkb2VzIFFFTVUgZXZlbiAqZW11bGF0ZSogYSBTRVYtU05QIGhvc3Q/IEkga25vdyBpdCBkb2VzbiYjMzk7dC4gU0VWLVNOUCBuZWVkcyBiYXJlIG1ldGFsIEFNRCBoYXJkd2FyZSB3aXRoIHNwZWNpZmljIGNvbXBvbmVudHMgYW5kIEJJT1MvTVNSIHNldHRpbmdzLiBObyBzdXJwcmlzZXMgdGhlcmUuCgpBbHJpZ2h0LCBtb3Zpbmcgb24sIEkgc2VlIGEgbmV3IGluc3RydWN0aW9uIGluIHRoZSBjb2RlOiBgYXNtIHZvbGF0aWxlKCYjMzQ7LmJ5dGUgMHhmMiwgMHgwZiwgMHgwMSwgMHhmYyYjMzQ7IDo6ICYjMzQ7YSYjMzQ7IChwYV9zdGFydCksICYjMzQ7YyYjMzQ7IChvcCkgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDspO2AuIFRoaXMgaXMgYFJNUE9QVGAsIHdoaWNoIEkga25vdyBpcyBhbiBBTUQgWmVuNiBpbnN0cnVjdGlvbiAoQ1BVSUQgRm44MDAwXzAwMjVfRURYWzBdKS4KCkkgaGF2ZSB0byBsb29rIGF0IGBybXBvcHRfY2FwYWJsZSgpYC4gSSBzZWUgdGhlIGNoZWNrLCBhbmQgaXQmIzM5O3Mgd2hhdCBJJiMzOTtkIGV4cGVjdDoKCmBgYGMKc3RhdGljIGJvb2wgcm1wb3B0X2NhcGFibGUodm9pZCkKewoJcmV0dXJuIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QT1BUKSAmYW1wOyZhbXA7CgkgICAgICAgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTsKfQpgYGAKClRoZW4gSSBub3RpY2U6CgpgYGBjCnZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKQp7CglpZiAoIXJtcG9wdF9jYXBhYmxlKCkpCgkJcmV0dXJuOwouLi4KYGBgCgpgYGBjCnZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKQp7Ci4uLgoJaWYgKCFybXBvcHRfY2FwYWJsZSgpKQoJCXJldHVybjsKLi4uCmBgYAoKTWFrZXMgc2Vuc2UuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZ3VhcmRlZCBieSBgcm1wb3B0X2NhcGFibGUoKWAgYW5kIHNvIHdpbGwgbm90IGJlIGludm9rZWQgd2hlbiBydW5uaW5nIGluIGEgaHlwZXJ2aXNvci4KCk5vdywgbGV0JiMzOTtzIHNoaWZ0IGdlYXJzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQuIEkgbmVlZCB0byBjaGVjayBgc25wX3ByZXBhcmUoKWAsIGBzbnBfc2h1dGRvd24oKWAsIGFuZCBgc25wX3JtcHRhYmxlX2luaXQoKWAuCgpJIHNlZSBpbiBgc25wX3ByZXBhcmUoKWA6CgpgYGBjCmludCBzbnBfcHJlcGFyZSh2b2lkKQp7Ci4uLgoJY2xlYXJfcm1wKCk7CgljcHVfaG90cGx1Z19kaXNhYmxlKCk7Ci4uLgpgYGAKCkkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgdG8gc2VlIHdoZXJlIGBzbnBfcHJlcGFyZSgpYCBpcyBhY3R1YWxseSAqY2FsbGVkKiBmcm9tIGluIHRoZSBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgdG8gc2VlIGhvdyBhbGwgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbnBfcHJlcGFyZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02NjA9c3RhdGljIGlubGluZSB2b2lkIHNucF9sZWFrX3BhZ2VzKHU2NCBwZm4sIHVuc2lnbmVkIGludCBwYWdlcylcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaC02NjMtfVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjY0OmludCBzbnBfcHJlcGFyZSh2b2lkKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY2NS12b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg9NjgzPXN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfZml4dXBfZTgyMF90YWJsZXModm9pZCkge31cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjY4NDpzdGF0aWMgaW5saW5lIGludCBzbnBfcHJlcGFyZSh2b2lkKSB7IHJldHVybiAtRU5PREVWOyB9XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaC02ODUtc3RhdGljIGlubGluZSB2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCkge31cbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz01MjE9c3RhdGljIHZvaWQgY2xlYXJfaHNhdmVfcGEodm9pZCAqYXJnKVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTUyNS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjUyNjppbnQgc25wX3ByZXBhcmUodm9pZClcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTUyNy17XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNTY3LX1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjU2ODpFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9wcmVwYXJlLCBcJiMzNDtjY3BcJiMzNDspO1xuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNTY5LVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTc1OT1pbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNzczLVx0ICogT24gYSBrZXhlYyBib290IFNOUCBtYXkgYWxyZWFkeSBiZSBlbmFibGVkIChsZWdhY3kgZmlybXdhcmUgbGVhdmVzXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo3NzQ6XHQgKiBTbnBFbiBzZXQgYWNyb3NzIHNodXRkb3duKSwgaW4gd2hpY2ggY2FzZSBzbnBfcHJlcGFyZSgpIGJhaWxzIHdpdGhvdXRcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTc3NS1cdCAqIGRpc2FibGluZyBDUFUgaG90cGx1Zywgc28gZGlzYWJsZSBpdCBoZXJlLlxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MTUwOD1zdGF0aWMgaW50IF9fc2V2X3NucF9pbml0X2xvY2tlZChpbnQgKmVycm9yLCB1bnNpZ25lZCBpbnQgbWF4X3NucF9hc2lkKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMTUzMC1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MTUzMTpcdHJjID0gc25wX3ByZXBhcmUoKTtcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMTUzMi1cdGlmIChyYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQzMgoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBTRVYtU05QIERyaXZlcioqCgpPa2F5LCBzbyBgc25wX3ByZXBhcmUoKWAgaXMgYXBwYXJlbnRseSBvbmx5IGNhbGxlZCB3aXRoaW4gYGRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNgLCBzcGVjaWZpY2FsbHkgaW4gYF9fc2V2X3NucF9pbml0X2xvY2tlZCgpYC4gVGhhdCYjMzk7cyBnb29kLCBpdCBuYXJyb3dzIGRvd24gd2hlcmUgSSBuZWVkIHRvIGZvY3VzLiBOb3csIGxldCYjMzk7cyBzZWUsIGl0IGxvb2tzIGxpa2UgaXQgZG9lcyBzb21lIHF1aWNrIGNoZWNrcyBhdCB0aGUgYmVnaW5uaW5nOgoKYGBgYwoJaWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKQoJCXJldHVybiAtRU5PREVWOwpgYGAKClRoaXMgbWFrZXMgc3VyZSB0aGUgaG9zdCBhY3R1YWxseSBzdXBwb3J0cyBTRVYtU05QIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLiBTdGFuZGFyZCBzdHVmZi4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIHRoaW5nIGJldHRlci4gSSYjMzk7dmUgZ290IHRvIGZpbmQgb3V0IHdoZXJlIGBzbnBfc2h1dGRvd24oKWAgaXMgY2FsbGVkIGZyb20sIHNpbmNlIGl0JiMzOTtzIGxvZ2ljYWwgdGhhdCB0aGVyZSBzaG91bGQgYmUgYSBjb3JyZXNwb25kaW5nIHNodXRkb3duIGZ1bmN0aW9uLiBMZXQmIzM5O3MgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIxOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NucF9zaHV0ZG93biYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02NjY9dm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjY3OnZvaWQgc25wX3NodXRkb3duKHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjY4LSNlbHNlXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg9Njg2PXN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpIHt9XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaDo2ODc6c3RhdGljIGlubGluZSB2b2lkIHNucF9zaHV0ZG93bih2b2lkKSB7fVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjg4LSNlbmRpZlxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTUyNj1pbnQgc25wX3ByZXBhcmUodm9pZClcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy01NDEtXHQgKiBObyBDUFUgbWF5IGNvbWUgb25saW5lIHdpdGhvdXQgU25wRW4gd2hpbGUgU05QIGlzIGFjdGl2ZTsgZGlzYWJsZVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6NTQyOlx0ICogaG90cGx1ZyBoZXJlIGFuZCByZS1lbmFibGUgaXQgaW4gc25wX3NodXRkb3duKCkuXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy01NDMtXHQgKi9cbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz01NzA9c3RhdGljIHZvaWQgcm1wb3B0X2Rpc2FibGUodm9pZClcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy01OTUtXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo1OTY6dm9pZCBzbnBfc2h1dGRvd24odm9pZClcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTU5Ny17XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNjE1LX1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjYxNjpFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zaHV0ZG93biwgXCYjMzQ7Y2NwXCYjMzQ7KTtcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTYxNy1cbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz02ODk9dm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNzAwLVx0ICogT24gcmUtaW5pdGlhbGl6YXRpb24gYWZ0ZXIgYSBsZWdhY3kgU05QIHNodXRkb3duIChTTlBfU0hVVERPV05fRVhcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjcwMTpcdCAqIHdpdGggeDg2X3NucF9zaHV0ZG93bj0wKSwgc25wX3NodXRkb3duKCkgYW5kIHRodXMgcm1wb3B0X2Rpc2FibGUoKSBhcmVcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTcwMi1cdCAqIHNraXBwZWQsIHNvIHRoZSB3b3JrcXVldWUsIGRlbGF5ZWQgd29yayBhbmQgcGVyLUNQVSBSTVBPUFRfQkFTRSBNU1JzXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0xMzA9c3RhdGljIHZvaWQgX19zZXZfZmlybXdhcmVfc2h1dGRvd24oc3RydWN0IHNldl9kZXZpY2UgKnNldiwgYm9vbCBwYW5pYyk7XG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTEzMS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MTMyOnN0YXRpYyBpbnQgc25wX3NodXRkb3duX29uX3BhbmljKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTEzMy1cdFx0XHRcdCB1bnNpZ25lZCBsb25nIHJlYXNvbiwgdm9pZCAqYXJnKTtcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTEzNT1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHNucF9wYW5pY19ub3RpZmllciA9IHtcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MTM2Olx0Lm5vdGlmaWVyX2NhbGwgPSBzbnBfc2h1dGRvd25fb25fcGFuaWMsXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTEzNy19O1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MjAzPXN0YXRpYyBpbnQgc2V2X2NtZF9idWZmZXJfbGVuKGludCBjbWQpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMDctXHRjYXNlIFNFVl9DTURfSU5JVF9FWDogICAgICAgICAgICAgICAgICAgcmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2V2X2RhdGFfaW5pdF9leCk7XG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjIwODpcdGNhc2UgU0VWX0NNRF9TTlBfU0hVVERPV05fRVg6XHRcdHJldHVybiBzaXplb2Yoc3RydWN0IHNldl9kYXRhX3NucF9zaHV0ZG93bl9leCk7XG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIwOS1cdGNhc2UgU0VWX0NNRF9TTlBfSU5JVF9FWDpcdFx0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2V2X2RhdGFfc25wX2luaXRfZXgpO1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MjEzNj1zdGF0aWMgaW50IHNldl91cGRhdGVfZmlybXdhcmUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjE5MC1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MjE5MTpzdGF0aWMgaW50IF9fc2V2X3NucF9zaHV0ZG93bl9sb2NrZWQoaW50ICplcnJvciwgYm9vbCBwYW5pYylcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjE5Mi17XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMTk0LVx0c3RydWN0IHNldl9kZXZpY2UgKnNldjtcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MjE5NTpcdHN0cnVjdCBzZXZfZGF0YV9zbnBfc2h1dGRvd25fZXggZGF0YTtcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjE5Ni1cdGludCByZXQ7XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMjA3LVx0ZGF0YS5sZW4gPSBzaXplb2YoZGF0YSk7XG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjIyMDg6XHRkYXRhLmlvbW11X3NucF9zaHV0ZG93biA9IDE7XG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIyMDktXHRpZiAoc2V2LVx1MDAzZXNucF9mZWF0X2luZm9fMC5lY3ggXHUwMDI2IFNOUF9YODZfU0hVVERPV05fU1VQUE9SVEVEKVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoyMjEwOlx0XHRkYXRhLng4Nl9zbnBfc2h1dGRvd24gPSAxO1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMjExLVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjI0My1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MjI0NDpcdGlmIChkYXRhLng4Nl9zbnBfc2h1dGRvd24pIHtcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjI0NS1cdFx0aWYgKCFwYW5pYylcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MjI0NjpcdFx0XHRzbnBfc2h1dGRvd24oKTtcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjI0Ny1cdFx0c25wX2h2X2ZpeGVkX3BhZ2VzX3N0YXRlX3VwZGF0ZShzZXYsIEFMTE9DQVRFRCk7XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMjczLVx0LypcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MjI3NDpcdCAqIF9fc2V2X3NucF9zaHV0ZG93bl9sb2NrZWQoKSBkZWFkbG9ja3Mgd2hlbiBpdCB0cmllcyB0byB1bnJlZ2lzdGVyXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIyNzUtXHQgKiBpdHNlbGYgZHVyaW5nIHBhbmljIGFzIHRoZSBwYW5pYyBub3RpZmllciBpcyBjYWxsZWQgd2l0aCBSQ1UgcmVhZFxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MjkwNT1zdGF0aWMgdm9pZCBfX3Nldl9maXJtd2FyZV9zaHV0ZG93bihzdHJ1Y3Qgc2V2X2RldmljZSAqc2V2LCBib29sIHBhbmljKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjkzNi1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MjkzNzpcdF9fc2V2X3NucF9zaHV0ZG93bl9sb2NrZWQoXHUwMDI2ZXJyb3IsIHBhbmljKTtcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjkzOC19XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0zMDE0PXZvaWQgc2V2X2Rldl9kZXN0cm95KHN0cnVjdCBwc3BfZGV2aWNlICpwc3ApXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0zMDI4LVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzozMDI5OnN0YXRpYyBpbnQgc25wX3NodXRkb3duX29uX3BhbmljKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTMwMzAtXHRcdFx0XHQgdW5zaWduZWQgbG9uZyByZWFzb24sIHZvaWQgKmFyZylcbi0tXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaD04MjI9c3RydWN0IHNldl9kYXRhX3JhbmdlX2xpc3Qge1xuLS1cbmluY2x1ZGUvbGludXgvcHNwLXNldi5oLTgyOC0vKipcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oOjgyOTogKiBzdHJ1Y3Qgc2V2X2RhdGFfc25wX3NodXRkb3duX2V4IC0gU05QX1NIVVRET1dOX0VYIHN0cnVjdHVyZVxuaW5jbHVkZS9saW51eC9wc3Atc2V2LmgtODMwLSAqXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaC04MzEtICogQGxlbjogbGVuZ3RoIG9mIHRoZSBjb21tYW5kIGJ1ZmZlciByZWFkIGJ5IHRoZSBQU1BcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oOjgzMjogKiBAaW9tbXVfc25wX3NodXRkb3duOiBEaXNhYmxlIGVuZm9yY2VtZW50IG9mIFNOUCBpbiB0aGUgSU9NTVVcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oOjgzMzogKiBAeDg2X3NucF9zaHV0ZG93bjogRGlzYWJsZSBTTlAgb24gYWxsIGNvcmVzXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaC04MzQtICogQHJzdmQxOiByZXNlcnZlZFxuaW5jbHVkZS9saW51eC9wc3Atc2V2LmgtODM1LSAqL1xuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg6ODM2OnN0cnVjdCBzZXZfZGF0YV9zbnBfc2h1dGRvd25fZXgge1xuaW5jbHVkZS9saW51eC9wc3Atc2V2LmgtODM3LVx0dTMyIGxlbjtcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oOjgzODpcdHUzMiBpb21tdV9zbnBfc2h1dGRvd246MTtcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oOjgzOTpcdHUzMiB4ODZfc25wX3NodXRkb3duOjE7XG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaC04NDAtXHR1MzIgcnN2ZDE6MzA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIxOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTQ4CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU0VWLVNOUCBSTVAgVGFibGUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBzbnBfcm1wdGFibGVfaW5pdCgpYCBmdW5jdGlvbi4gVGhlIHZlcnkgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCYjMzk7cyBnYXRlZCBiZWhpbmQgYGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUClgLiBBbmQsIGl0IHNlZW1zIGxpa2UgKmV2ZXJ5dGhpbmcqIGluIHRoZSBjaGFuZ2VzIGlzIGd1YXJkZWQgYnkgdGhhdCBvciBgWDg2X0ZFQVRVUkVfUk1QT1BUYCwgd2hpY2ggaXMgYSBaZW42IENQVSBmZWF0dXJlLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcywgYXJlIHRoZXJlIGFueSBjb2RlIHBhdGhzIGludHJvZHVjZWQgYnkgdGhpcyB0aGF0ICpjb3VsZCogcG90ZW50aWFsbHkgYmUgcmVhY2hlZCB3aXRob3V0IHRoZSBTRVYtU05QIGZlYXR1cmU/IEl0JiMzOTtzIGVhc3kgdG8gbWFrZSBhc3N1bXB0aW9ucywgYnV0IHRoZSBkZXZpbCYjMzk7cyBpbiB0aGUgZGV0YWlscywgc28gbGV0JiMzOTtzIHZlcmlmeS4KCkkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgcmV2aWV3IGVhY2ggbW9kaWZpZWQgZmlsZS4gVGhlIGZpcnN0IGZldyAoYGFyY2gveDg2L2luY2x1ZGUvLi4uYCkgc2VlbSBzdHJhaWdodGZvcndhcmQ6IGRlZmluaXRpb25zIGZvciB0aGUgZmVhdHVyZSBmbGFnLCBNU1JzLCBhbmQgZnVuY3Rpb24gZGVjbGFyYXRpb25zLiBOb3RoaW5nIHRoYXQganVtcHMgb3V0IGFzIGFuIGlzc3VlIHRoZXJlLgoKTm93LCBgYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY2AganVzdCBhZGRzIHRoZSBgWDg2X0ZFQVRVUkVfUk1QT1BUYCBiaXQgdG8gdGhlIGBjcHVpZF9iaXRzYCB0YWJsZS4gVGhhdCYjMzk7cyBmaW5lLgoKQnV0IGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJIHNlZSBgc2V2X3ZtX2Rlc3Ryb3koKWAgY2FsbHMgYHNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKWAuICpUaGF0JiMzOTtzKiB0aGUgdHJpZ2dlciwgYmVjYXVzZSBgc25wX3JtcG9wdF9hbGxfcGh5c21lbSgpYCBpcyB0aGUgZnVuY3Rpb24gd2UgYXJlIGluaXRpYWxpemluZyBpbiB0aGUgaW5pdGlhbCBjaGVjay4gU28sIHRoZSBxdWVzdGlvbiBiZWNvbWVzOiBjYW4gYHNldi0mZ3Q7c25wX2NvbnRleHRgICh3aXRoaW4gdGhlIGBzZXZfdm1fZGVzdHJveSgpYCBjb250ZXh0KSBiZSBub24tTlVMTCB3aXRob3V0IFNFVi1TTlAgaG9zdCBoYXJkd2FyZT8gKlRoYXQmIzM5O3MqIHRoZSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBJIG5lZWQgdG8gdHJhY2UgYmFjayB3aGVyZSBgc2V2LSZndDtzbnBfY29udGV4dGAgaXMgc2V0IHRvIGVuc3VyZSB3ZSBhcmUgbm90IGNyZWF0aW5nIGFuIG91dC1vZi1ib3VuZHMgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIxOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NucF9jb250ZXh0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjIxNj1pbnQgc2V2X2Rldl9nZXRfYXR0cih1MzIgZ3JvdXAsIHU2NCBhdHRyLCB1NjQgKnZhbClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTIyNDMtICovXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIyNDQ6c3RhdGljIHZvaWQgKnNucF9jb250ZXh0X2NyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjI0NS17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yMjY3PXN0YXRpYyBpbnQgc25wX2JpbmRfYXNpZChzdHJ1Y3Qga3ZtICprdm0sIGludCAqZXJyb3IpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMjcxLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyMjcyOlx0ZGF0YS5nY3R4X3BhZGRyID0gX19wc3BfcGEoc2V2LVx1MDAzZXNucF9jb250ZXh0KTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjI3My1cdGRhdGEuYXNpZCA9IHNldl9nZXRfYXNpZChrdm0pO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjI3Nz1zdGF0aWMgaW50IHNucF9sYXVuY2hfc3RhcnQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMjkwLVx0LyogRG9uJiMzOTt0IGFsbG93IHVzZXJzcGFjZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIG1vcmUgdGhhbiAxIFNOUCBjb250ZXh0LiAqL1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyMjkxOlx0aWYgKHNldi1cdTAwM2VzbnBfY29udGV4dClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjI5Mi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMzEwLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyMzExOlx0c2V2LVx1MDAzZXNucF9jb250ZXh0ID0gc25wX2NvbnRleHRfY3JlYXRlKGt2bSwgYXJncCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIzMTI6XHRpZiAoIXNldi1cdTAwM2VzbnBfY29udGV4dClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjMxMy1cdFx0cmV0dXJuIC1FTk9UVFk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTIzMTQtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIzMTU6XHRzdGFydC5nY3R4X3BhZGRyID0gX19wc3BfcGEoc2V2LVx1MDAzZXNucF9jb250ZXh0KTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjMxNi1cdHN0YXJ0LnBvbGljeSA9IHBhcmFtcy5wb2xpY3k7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yMzQ5PXN0YXRpYyBpbnQgc2V2X2dtZW1fcG9zdF9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbixcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTIzODEtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIzODI6XHRmd19hcmdzLmdjdHhfcGFkZHIgPSBfX3BzcF9wYShzZXYtXHUwMDNlc25wX2NvbnRleHQpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMzgzLVx0ZndfYXJncy5hZGRyZXNzID0gX19zbWVfc2V0KHBmbl90b19ocGEocGZuKSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNDIxPXN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDI5LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNDMwOlx0aWYgKCFzZXZfc25wX2d1ZXN0KGt2bSkgfHwgIXNldi1cdTAwM2VzbnBfY29udGV4dClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQzMS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNTA1PXN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGVfdm1zYShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI1MTktXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI1MjA6XHRkYXRhLmdjdHhfcGFkZHIgPSBfX3BzcF9wYShzZXYtXHUwMDNlc25wX2NvbnRleHQpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNTIxLVx0ZGF0YS5wYWdlX3R5cGUgPSBTTlBfUEFHRV9UWVBFX1ZNU0E7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNTYyPXN0YXRpYyBpbnQgc25wX2xhdW5jaF9maW5pc2goc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNTcyLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNTczOlx0aWYgKCFzZXYtXHUwMDNlc25wX2NvbnRleHQpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI1NzQtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjYxNS1cdG1lbWNweShkYXRhLVx1MDAzZWhvc3RfZGF0YSwgcGFyYW1zLmhvc3RfZGF0YSwgS1ZNX1NFVl9TTlBfRklOSVNIX0RBVEFfU0laRSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI2MTY6XHRkYXRhLVx1MDAzZWdjdHhfcGFkZHIgPSBfX3BzcF9wYShzZXYtXHUwMDNlc25wX2NvbnRleHQpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjE3LVx0cmV0ID0gc2V2X2lzc3VlX2NtZChrdm0sIFNFVl9DTURfU05QX0xBVU5DSF9GSU5JU0gsIGRhdGEsIFx1MDAyNmFyZ3AtXHUwMDNlZXJyb3IpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjkzMD1zdGF0aWMgaW50IHNucF9kZWNvbW1pc3Npb25fY29udGV4dChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTM2LVx0LyogSWYgY29udGV4dCBpcyBub3QgY3JlYXRlZCB0aGVuIGRvIG5vdGhpbmcgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjkzNzpcdGlmICghc2V2LVx1MDAzZXNucF9jb250ZXh0KVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTM4LVx0XHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NDAtXHQvKiBEbyB0aGUgZGVjb21taXNpb24sIHdoaWNoIHdpbGwgdW5iaW5kIHRoZSBBU0lEIGZyb20gdGhlIFNOUCBjb250ZXh0ICovXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI5NDE6XHRkYXRhLmFkZHJlc3MgPSBfX3NtZV9wYShzZXYtXHUwMDNlc25wX2NvbnRleHQpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTQyLVx0ZG93bl93cml0ZShcdTAwMjZzZXZfZGVhY3RpdmF0ZV9sb2NrKTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NDgtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI5NDk6XHRzbnBfZnJlZV9maXJtd2FyZV9wYWdlKHNldi1cdTAwM2VzbnBfY29udGV4dCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI5NTA6XHRzZXYtXHUwMDNlc25wX2NvbnRleHQgPSBOVUxMO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTUxLVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDIyOD1zdGF0aWMgaW50IHNucF9oYW5kbGVfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByZXNwX2dwYSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyNDMtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQyNDQ6XHRkYXRhLmdjdHhfcGFkZHIgPSBfX3BzcF9wYShzZXYtXHUwMDNlc25wX2NvbnRleHQpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MjQ1LVx0ZGF0YS5yZXFfcGFkZHIgPSBfX3BzcF9wYShzZXYtXHUwMDNlZ3Vlc3RfcmVxX2J1Zik7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz01MzI2PXN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqc2V2X2RlY3J5cHRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzYxLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MzYyOlx0XHRkYmcuZ2N0eF9wYWRkciA9IF9fcHNwX3BhKHNldi1cdTAwM2VzbnBfY29udGV4dCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUzNjMtXHRcdGRiZy5zcmNfYWRkciA9IHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wudm1zYV9wYTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTk5PXN0cnVjdCBrdm1fc2V2X2luZm8ge1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTE3LVx0YXRvbWljX3QgbWlncmF0aW9uX2luX3Byb2dyZXNzO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDoxMTg6XHR2b2lkICpzbnBfY29udGV4dDsgICAgICAvKiBTTlAgZ3Vlc3QgY29udGV4dCBwYWdlICovXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTExOS1cdHZvaWQgKmd1ZXN0X3JlcV9idWY7ICAgIC8qIEJvdW5jZSBidWZmZXIgZm9yIFNOUCBHdWVzdCBSZXF1ZXN0IGlucHV0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIxOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDYzCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiBteSBjb2RlIGFuZCB0aGlua2luZyBhYm91dCBhIHNwZWNpZmljIGZ1bmN0aW9uOgoKKipBbmFseXppbmcgdGhlIGBzbnBfY29udGV4dF9jcmVhdGVgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhlYWQgYXJvdW5kIGBzbnBfY29udGV4dF9jcmVhdGVgLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIGFuZCBob3cgaXQgd29ya3MuIExldCBtZSBqdXN0IHB1bGwgdXAgaXRzIGRlZmluaXRpb24gYW5kIHN0YXJ0IHJlYWRpbmcgdGhlIGNvZGUuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBncmFzcCB0aGUgaW50ZW50aW9uIG9mIHRoZSBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIHN0ZXAgdGhyb3VnaCB0aGlzIHNsb3dseSBhbmQgY2FyZWZ1bGx5IHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyNDA6XHQgKiBhc3NvY2lhdGVkIHdpdGggdGhlIGd1ZXN0IHRoYXQgdGhlIGZpcm13YXJlIHRyYWNrcyB0byBpbXBsZW1lbnQgU0VWXG4yMjQxOlx0ICogYW5kIFNOUCBmZWF0dXJlcy4gVGhlIGZpcm13YXJlIHN0b3JlcyB0aGUgZ3Vlc3QgY29udGV4dCBpbiBoeXBlcnZpc29yXG4yMjQyOlx0ICogcHJvdmlkZSBwYWdlIHZpYSB0aGUgU05QX0dDVFhfQ1JFQVRFIGNvbW1hbmQuXG4yMjQzOlx0ICovXG4yMjQ0Olx0c3RhdGljIHZvaWQgKnNucF9jb250ZXh0X2NyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcbjIyNDU6XHR7XG4yMjQ2Olx0XHRzdHJ1Y3Qgc2V2X2RhdGFfc25wX2FkZHIgZGF0YSA9IHt9O1xuMjI0NzpcdFx0dm9pZCAqY29udGV4dDtcbjIyNDg6XHRcdGludCByYztcbjIyNDk6XHRcbjIyNTA6XHRcdC8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgY29udGV4dCBwYWdlICovXG4yMjUxOlx0XHRjb250ZXh0ID0gc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbjIyNTI6XHRcdGlmICghY29udGV4dClcbjIyNTM6XHRcdFx0cmV0dXJuIE5VTEw7XG4yMjU0Olx0XG4yMjU1Olx0XHRkYXRhLmFkZHJlc3MgPSBfX3BzcF9wYShjb250ZXh0KTtcbjIyNTY6XHRcdHJjID0gX19zZXZfaXNzdWVfY21kKGFyZ3AtXHUwMDNlc2V2X2ZkLCBTRVZfQ01EX1NOUF9HQ1RYX0NSRUFURSwgXHUwMDI2ZGF0YSwgXHUwMDI2YXJncC1cdTAwM2VlcnJvcik7XG4yMjU3Olx0XHRpZiAocmMpIHtcbjIyNTg6XHRcdFx0cHJfd2FybihcJiMzNDtGYWlsZWQgdG8gY3JlYXRlIFNFVi1TTlAgY29udGV4dCwgcmMgJWQgZndfZXJyb3IgJWRcJiMzNDssXG4yMjU5Olx0XHRcdFx0cmMsIGFyZ3AtXHUwMDNlZXJyb3IpO1xuMjI2MDpcdFx0XHRzbnBfZnJlZV9maXJtd2FyZV9wYWdlKGNvbnRleHQpO1xuMjI2MTpcdFx0XHRyZXR1cm4gTlVMTDtcbjIyNjI6XHRcdH1cbjIyNjM6XHRcbjIyNjQ6XHRcdHJldHVybiBjb250ZXh0O1xuMjI2NTpcdH1cbjIyNjY6XHRcbjIyNjc6XHRzdGF0aWMgaW50IHNucF9iaW5kX2FzaWQoc3RydWN0IGt2bSAqa3ZtLCBpbnQgKmVycm9yKVxuMjI2ODpcdHtcbjIyNjk6XHRcdHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiA9IHRvX2t2bV9zZXZfaW5mbyhrdm0pO1xuMjI3MDpcdFx0c3RydWN0IHNldl9kYXRhX3NucF9hY3RpdmF0ZSBkYXRhID0gezB9O1xuMjI3MTpcdFxuMjI3MjpcdFx0ZGF0YS5nY3R4X3BhZGRyID0gX19wc3BfcGEoc2V2LVx1MDAzZXNucF9jb250ZXh0KTtcbjIyNzM6XHRcdGRhdGEuYXNpZCA9IHNldl9nZXRfYXNpZChrdm0pO1xuMjI3NDpcdFx0cmV0dXJuIHNldl9pc3N1ZV9jbWQoa3ZtLCBTRVZfQ01EX1NOUF9BQ1RJVkFURSwgXHUwMDI2ZGF0YSwgZXJyb3IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjg0NAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mICYjMzQ7QW5kIGxvb2sgYXQgYHNucF9hbGxvY19maXJtd2FyZV9wYWdlYCwmIzM0OyBzdW1tYXJpemVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqRGl2aW5nIERlZXAgaW50byBgc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2VgKioKCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBzbnBfYWxsb2NfZmlybXdhcmVfcGFnZWAuIE15IGZpcnN0IHRob3VnaHQ/ICYjMzQ7V2h5IGFyZSB3ZSBsb29raW5nIGF0IHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gKm5vdyo/JiMzNDsgQ29udGV4dCBpcyBldmVyeXRoaW5nLiBJcyB0aGlzIHBhcnQgb2YgYSBkZWJ1Z2dpbmcgc2Vzc2lvbj8gQXJlIHdlIHRyYWNraW5nIGRvd24gYSBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZT8gT3IgYXJlIHdlIHJldmlld2luZyB0aGUgc2VjdXJpdHkgaW1wbGljYXRpb25zPyBLbm93aW5nIHRoZSAmIzM0O3doeSYjMzQ7IGlzIGNydWNpYWwgZm9yIGEgcHJvZHVjdGl2ZSBhbmFseXNpcy4KClJlZ2FyZGxlc3MsIEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdDogbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ2llcywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aXRoaW4gdGhpcyBjb2RlLCBhbmQgaW50ZXJhY3Rpb25zIHdpdGggdGhlIFNlY3VyZSBOZXN0ZWQgUGFnaW5nIChTTlApIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW46CgoqICAgKipFcnJvciBoYW5kbGluZzoqKiBJcyBpdCByb2J1c3Q/IERvZXMgaXQgY2hlY2sgcmV0dXJuIHZhbHVlcyBwcm9wZXJseSwgZXNwZWNpYWxseSBpbiBhIHBvdGVudGlhbGx5IHNlbnNpdGl2ZSBhcmVhIGxpa2UgZmlybXdhcmUgcGFnZSBhbGxvY2F0aW9uPyBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgaXMgYWxsIGd1YXJkZWQuCiogICAqKkNvbnRpZ3VpdHk6KiogSXMgdGhpcyBtZW1vcnkgYWxsb2NhdGlvbiBjb250aWd1b3VzLCBvciBpcyBpdCBzY2F0dGVyZWQ/IFRoaXMgY2FuIGRyYW1hdGljYWxseSBhZmZlY3QgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgcG90ZW50aWFsbHkgaW1wYWN0aW5nIGhvdyB0aGUgZ3Vlc3QgdmlydHVhbCBtYWNoaW5lIChWTSkgYmVoYXZlcy4KKiAgICoqUHJpdmlsZWdlIExldmVsczoqKiBXaGF0IGxldmVsIG9mIHByaXZpbGVnZSBpcyB0aGlzIGZ1bmN0aW9uIG9wZXJhdGluZyB1bmRlcj8gSXMgaXQgcnVubmluZyBpbiB0aGUgaHlwZXJ2aXNvciwgb3IgdGhlIGd1ZXN0PyBUaGUgYW5zd2VyIHdpbGwgcHJvdmlkZSBpbnNpZ2h0IGludG8gdGhlIGF0dGFjayBzdXJmYWNlLgoqICAgKipDb25jdXJyZW5jeToqKiBBbnkgbG9ja3M/IEFueSBwb3RlbnRpYWwgZm9yIGNvbmN1cnJlbnQgYWNjZXNzIGFuZCByYWNlIGNvbmRpdGlvbnM/IFRoaXMgaXMgY3JpdGljYWwgaW4gYSBtdWx0aS10aHJlYWRlZCBvciBtdWx0aS1WTSBlbnZpcm9ubWVudC4KKiAgICoqSW50ZXJhY3Rpb24gd2l0aCBTTlA6KiogSG93IGV4YWN0bHkgZG9lcyB0aGlzIGZ1bmN0aW9uIGludGVyZmFjZSB3aXRoIHRoZSBTTlAgZnJhbWV3b3JrPyBJcyBpdCBjb3JyZWN0bHkgc2V0dGluZyB0aGUgYXBwcm9wcmlhdGUgZmxhZ3MsIGhhbmRsaW5nIGF0dGVzdGF0aW9uLCBhbmQgZW5zdXJpbmcgdGhlIGNvbmZpZGVudGlhbGl0eSBhbmQgaW50ZWdyaXR5IG9mIHRoZSBmaXJtd2FyZSBwYWdlPyBUaGlzIGlzIHRoZSBjb3JlIGFyZWEgb2YgaW52ZXN0aWdhdGlvbi4KCk5vdywgbXkgbWluZCBpcyBhbHJlYWR5IHN0YXJ0aW5nIHRvIHBpZWNlIHRvZ2V0aGVyIGEgcm91Z2ggdW5kZXJzdGFuZGluZyBvZiB0aGUgZnVuY3Rpb24mIzM5O3Mgc2NvcGUuIFVsdGltYXRlbHksIHRoZSBuZXh0IHN0ZXAgaXMgZ29pbmcgdG8gYmUgYW5hbHl6aW5nIHRoZSBhY3R1YWwgY29kZSBpdHNlbGYuIExldCYjMzk7cyBzZWUgaG93IHdlbGwgbXkgaW5pdGlhbCBhc3N1bXB0aW9ucyBob2xkIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbnBfYWxsb2NfZmlybXdhcmVfcGFnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ1Nj1zdGF0aWMgaW50IHNucF9ndWVzdF9yZXFfaW5pdChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NjQtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ2NTpcdHNldi1cdTAwM2VndWVzdF9yZXNwX2J1ZiA9IHNucF9hbGxvY19maXJtd2FyZV9wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8pO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NjYtXHRpZiAoIXNldi1cdTAwM2VndWVzdF9yZXNwX2J1Zikge1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjI0ND1zdGF0aWMgdm9pZCAqc25wX2NvbnRleHRfY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjI1MC1cdC8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgY29udGV4dCBwYWdlICovXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIyNTE6XHRjb250ZXh0ID0gc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjI1Mi1cdGlmICghY29udGV4dClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTMwNjQ9c3RhdGljIGJvb2wgaXNfc2V2X3NucF9pbml0aWFsaXplZCh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzA3MC1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzA3MTpcdHN0YXR1cyA9IHNucF9hbGxvY19maXJtd2FyZV9wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzA3Mi1cdGlmICghc3RhdHVzKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NTMyNj1zdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnNldl9kZWNyeXB0X3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTM1Ny1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTM1ODpcdFx0dm1zYSA9IHNucF9hbGxvY19maXJtd2FyZV9wYWdlKF9fR0ZQX1pFUk8pO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzU5LVx0XHRpZiAoIXZtc2EpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmM9NzQxPWludCBzZXZfdGlvX2Rldl9jcmVhdGUoc3RydWN0IHRzbV9kc21fdGlvICpkZXZfZGF0YSwgdTE2IGRldmljZV9pZCxcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYy03NTctXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYzo3NTg6XHRkYXRhX3BnID0gc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LXRpby5jLTc1OS1cdGlmICghZGF0YV9wZykge1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9NDE3PXN0YXRpYyBpbnQgcm1wX21hcmtfcGFnZXNfZmlybXdhcmUodW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgaW50IG5wYWdlcywgYm9vbCBsb2NrZWQpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00NDAtXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjQ0MTpzdGF0aWMgc3RydWN0IHBhZ2UgKl9fc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCBpbnQgb3JkZXIsIGJvb2wgbG9ja2VkKVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00NDIte1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtNDY1LVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzo0NjY6dm9pZCAqc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2UoZ2ZwX3QgZ2ZwX21hc2spXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTQ2Ny17XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00NjktXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjQ3MDpcdHBhZ2UgPSBfX3NucF9hbGxvY19maXJtd2FyZV9wYWdlcyhnZnBfbWFzaywgMCwgZmFsc2UpO1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00NzEtXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00NzMtfVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzo0NzQ6RVhQT1JUX1NZTUJPTF9HUEwoc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2UpO1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00NzUtXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz01MDE9c3RhdGljIHZvaWQgKnNldl9md19hbGxvYyh1bnNpZ25lZCBsb25nIGxlbilcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTUwNC1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6NTA1Olx0cGFnZSA9IF9fc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2VzKEdGUF9LRVJORUwsIGdldF9vcmRlcihsZW4pLCB0cnVlKTtcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtNTA2LVx0aWYgKCFwYWdlKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MTM1Mz1zdGF0aWMgaW50IHNucF92ZXJpZnlfbWl0aWdhdGlvbih1MTYgY29tbWFuZCwgdTY0IHZlY3Rvcixcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTEzNjAtXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjEzNjE6XHRtaXRfZHN0ID0gc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xMzYyLVx0aWYgKCFtaXRfZHN0KVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MTUwOD1zdGF0aWMgaW50IF9fc2V2X3NucF9pbml0X2xvY2tlZChpbnQgKmVycm9yLCB1bnNpZ25lZCBpbnQgbWF4X3NucF9hc2lkKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMTY0OS1cdFx0ICogdW5saWtlbHkpIGJ1dCB3aWxsIGNhdXNlIGEgZGVhZGxvY2suXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjE2NTA6XHRcdCAqIEluc3RlYWQgb2YgZXhwb3J0aW5nIF9fc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2VzKCksIGFsbG9jYXRlIGEgcGFnZVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xNjUxLVx0XHQgKiBmb3IgdGhpcyBvbmUgY2FsbCBoZXJlLlxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xNjUyLVx0XHQgKi9cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MTY1MzpcdFx0cGFnZSA9IF9fc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2VzKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8sXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTE2NTQtXHRcdFx0XHRcdFx0ICAwLCB0cnVlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaD0xMTMxPXZvaWQgKnBzcF9jb3B5X3VzZXJfYmxvYih1NjQgdWFkZHIsIHUzMiBsZW4pO1xuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg6MTEzMjp2b2lkICpzbnBfYWxsb2NfZmlybXdhcmVfcGFnZShnZnBfdCBtYXNrKTtcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oLTExMzMtaW50IHNucF9yZWNsYWltX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGFkZHIsIHVuc2lnbmVkIGludCBucGFnZXMsIGJvb2wgbG9ja2VkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaD0xMTY0PXN0YXRpYyBpbmxpbmUgdm9pZCAqcHNwX2NvcHlfdXNlcl9ibG9iKHU2NCBfX3VzZXIgdWFkZHIsIHUzMiBsZW4pIHsgcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7IH1cbmluY2x1ZGUvbGludXgvcHNwLXNldi5oLTExNjUtXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaDoxMTY2OnN0YXRpYyBpbmxpbmUgdm9pZCAqc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2UoZ2ZwX3QgbWFzaylcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oLTExNjcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTA4MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmlybXdhcmUgUGFnZSBBbGxvY2F0aW9uIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZmlybXdhcmUgcGFnZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCB3aXRoaW4gdGhpcyBjcnlwdG8gY29udGV4dC4gTXkgc3RhcnRpbmcgcG9pbnQgaXMgYHNucF9hbGxvY19maXJtd2FyZV9wYWdlYCwgd2hpY2ggSSBzdXNwZWN0IGlzIGEgd3JhcHBlciBmdW5jdGlvbi4gTGV0JiMzOTtzIHRyYWNlIGl0IGRvd24sIGFuZCBpdCBsb29rcyBsaWtlIGl0IGNhbGxzIGBfX3NucF9hbGxvY19maXJtd2FyZV9wYWdlc2AuIFRoYXQmIzM5O3MgYSBnb29kIGxlYWQuIE5vdyBJIHNob3VsZCBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYF9fc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2VzYCBkaXJlY3RseS4gQSBxdWljayBmaWxlIHN5c3RlbSBzZWFyY2ggYW5kIEkgc2VlIGl0JiMzOTtzIGRlZmluZWQgd2l0aGluIGBkcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jYC4gQWxyaWdodCwgdGltZSB0byBvcGVuIHRoYXQgZmlsZSBhbmQgZ2V0IGEgaGFuZGxlIG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBhbGxvY2F0aW9uIHByb2Nlc3MuIEkgbmVlZCB0byBrbm93IHRoZSBtZW1vcnkgcmVnaW9ucyBiZWluZyB1c2VkLCB0aGUgYWxsb2NhdGlvbiBzdHJhdGVnaWVzIGluIHBsYWNlLCBhbmQgd2hhdCBlcnJvciBjaGVja2luZyBpcyBiZWluZyBwZXJmb3JtZWQuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIxOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDQwOlx0XG4gNDQxOlx0c3RhdGljIHN0cnVjdCBwYWdlICpfX3NucF9hbGxvY19maXJtd2FyZV9wYWdlcyhnZnBfdCBnZnBfbWFzaywgaW50IG9yZGVyLCBib29sIGxvY2tlZClcbiA0NDI6XHR7XG4gNDQzOlx0XHR1bnNpZ25lZCBsb25nIG5wYWdlcyA9IDF1bCBcdTAwM2NcdTAwM2Mgb3JkZXIsIHBhZGRyO1xuIDQ0NDpcdFx0c3RydWN0IHNldl9kZXZpY2UgKnNldjtcbiA0NDU6XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuIDQ0NjpcdFxuIDQ0NzpcdFx0aWYgKCFwc3BfbWFzdGVyIHx8ICFwc3BfbWFzdGVyLVx1MDAzZXNldl9kYXRhKVxuIDQ0ODpcdFx0XHRyZXR1cm4gTlVMTDtcbiA0NDk6XHRcbiA0NTA6XHRcdHBhZ2UgPSBhbGxvY19wYWdlcyhnZnBfbWFzaywgb3JkZXIpO1xuIDQ1MTpcdFx0aWYgKCFwYWdlKVxuIDQ1MjpcdFx0XHRyZXR1cm4gTlVMTDtcbiA0NTM6XHRcbiA0NTQ6XHRcdC8qIElmIFNFVi1TTlAgaXMgaW5pdGlhbGl6ZWQgdGhlbiBhZGQgdGhlIHBhZ2UgaW4gUk1QIHRhYmxlLiAqL1xuIDQ1NTpcdFx0c2V2ID0gcHNwX21hc3Rlci1cdTAwM2VzZXZfZGF0YTtcbiA0NTY6XHRcdGlmICghc2V2LVx1MDAzZXNucF9pbml0aWFsaXplZClcbiA0NTc6XHRcdFx0cmV0dXJuIHBhZ2U7XG4gNDU4Olx0XG4gNDU5Olx0XHRwYWRkciA9IF9fcGEoKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2UpKTtcbiA0NjA6XHRcdGlmIChybXBfbWFya19wYWdlc19maXJtd2FyZShwYWRkciwgbnBhZ2VzLCBsb2NrZWQpKVxuIDQ2MTpcdFx0XHRyZXR1cm4gTlVMTDtcbiA0NjI6XHRcbiA0NjM6XHRcdHJldHVybiBwYWdlO1xuIDQ2NDpcdH1cbiA0NjU6XHRcbiA0NjY6XHR2b2lkICpzbnBfYWxsb2NfZmlybXdhcmVfcGFnZShnZnBfdCBnZnBfbWFzaylcbiA0Njc6XHR7XG4gNDY4Olx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiA0Njk6XHRcbiA0NzA6XHRcdHBhZ2UgPSBfX3NucF9hbGxvY19maXJtd2FyZV9wYWdlcyhnZnBfbWFzaywgMCwgZmFsc2UpO1xuIDQ3MTpcdFxuIDQ3MjpcdFx0cmV0dXJuIHBhZ2UgPyBwYWdlX2FkZHJlc3MocGFnZSkgOiBOVUxMO1xuIDQ3MzpcdH1cbiA0NzQ6XHRFWFBPUlRfU1lNQk9MX0dQTChzbnBfYWxsb2NfZmlybXdhcmVfcGFnZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIxOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1ODc0CgkJCQkJCQlvdXRwdXQ6IDEzNQoJCQkJCQkJdGhvdWdodHM6IDEzNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgQ29kZSBDaGFuZ2VzIGFuZCBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBkZXRlcm1pbmVkIGFmdGVyIHJldmlld2luZyB0aGUgY29kZSBtb2RpZmljYXRpb25zLiBNeSBpbml0aWFsIGZvY3VzIHdhcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBQU1AgZGV2aWNlLCBgL2Rldi9zZXZgLCB2aWEgdGhlIGBTRVZfQ01EX1NOUF9HQ1RYX0NSRUFURWAgaW9jdGwuIFRoaXMsIGFzIHdlIGtub3csIGludGVyYWN0cyB3aXRoIHRoZSBBTUQgUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yLCBvciBQU1AsIHdoaWNoIGlzIGEgaGFyZHdhcmUgY29tcG9uZW50IHByZXNlbnQgb24gQU1EIFplbiBDUFVzLiBUaGUgY2FsbCB0byBgX19zZXZfaXNzdWVfY21kKClgIGlzIHRoZSBrZXkuCgpJIHRoZW4gZHVnIGludG8gaG93IHRoZSBjb2RlIGRldGVybWluZXMgU0VWLVNOUCBob3N0IGNhcGFiaWxpdGllcy4gIGBic3BfZGV0ZXJtaW5lX3NucCgpYCBpbiBgYW1kLmNgIGV4cGxpY2l0bHkgZGlzYWJsZXMgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBpZiB0aGUgaHlwZXJ2aXNvciBmZWF0dXJlLCBgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUmAsIGlzIGRldGVjdGVkLiBUaGlzIGlzIGEgdmVyeSBpbXBvcnRhbnQgcG9pbnQhIEZ1cnRoZXJtb3JlLCB0byBlbmFibGUgUk1QT1BULCB3ZSAqcmVxdWlyZSogYm90aCBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgICphbmQqIHRoZSBaZW42IGluc3RydWN0aW9uIHNldCBmZWF0dXJlLCBgWDg2X0ZFQVRVUkVfUk1QT1BUYC4gIFJNUE9QVCBpcyBzcGVjaWZpYyB0byBBTUQgWmVuNiBhbmQgU0VWLVNOUC4KCk5vdywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIHRoZSBjcml0ZXJpYSBmb3IgKm5vdCogZnV6emluZyAobmVnYXRpdmUgY3JpdGVyaWEpIGFzIHBlciB0aGUgcHJvbXB0LiAgU3BlY2lmaWNhbGx5LCB0aGUgY2F0ZWdvcnkgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuJiMzNDsgIFdoYXQgZG9lcyBTRVYtU05QIGhvc3Qgc3VwcG9ydCAqcmVxdWlyZSo/IExldCYjMzk7cyBicmVhayBpdCBkb3duOgoKMS4gIEEgYmFyZSBtZXRhbCBBTUQgWmVuMy9aZW40L1plbjUvWmVuNiBDUFUuCjIuICBBbiBBTUQgUFNQIChvciBDQ1ApICpwaHlzaWNhbCogaGFyZHdhcmUgZGV2aWNlLgozLiAgUk1QT1BUIGlzIHRpZWQgdG8gWmVuNiB3aXRoIHRoZSByZWxldmFudCBDUFUgZmVhdHVyZS4KNC4gIEluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9LVk0sIEdDRSksIHdoaWNoIGlzIHRoZSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50LCBgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUmAgaXMgYWx3YXlzIHNldCBvbiB0aGUgYW1kNjQgZ3Vlc3Qga2VybmVsLiBUaGlzIGNhdXNlcyBgYnNwX2RldGVybWluZV9zbnAoKWAgdG8gY2xlYXIgYGNjX2ZsYWdzLmhvc3Rfc2V2X3NucGAgYW5kIGBYODZfRkVBVFVSRV9TRVZfU05QYC4KCldpdGhvdXQgdGhlIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAgc2V0LCB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyBhcmUgKm5ldmVyKiByZWFjaGVkLiBgc25wX3JtcG9wdF9hbGxfcGh5c21lbSgpYCwgYHNucF9zZXR1cF9ybXBvcHQoKWAsIGFuZCBjYWxscyBpbiBgc25wX3ByZXBhcmUoKWAgLyBgc25wX3NodXRkb3duKClgIGJlY29tZSBuby1vcHMgb3IgZWFybHkgcmV0dXJucy4gYHNucF9ybXB0YWJsZV9pbml0KClgIGp1c3QgcmV0dXJucyBhbiBlcnJvci4gYHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKClgIGlzIGVpdGhlciBzaG9ydC1jaXJjdWl0ZWQgb3IgZG9lcyBub3RoaW5nLiBUaGUgY2hhbmdlcyB0byBgc2NhdHRlcmVkLmNgIGFyZSBzaW1wbHkgYWRkaW5nIHRoZSBjcHVpZCBiaXQgdG8gYSB0YWJsZSB3aGljaCBpc24mIzM5O3QgdXNlZCBkdWUgdG8gbGFjayBvZiB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbi4KCkkgcmUtZXhhbWluZWQgYWxsIHRoZSBtb2RpZmllZCBsaW5lcyBvZiBjb2RlLiAgV2UmIzM5O3JlIGxvb2tpbmcgYXQ6CgoxLiAgQ1BVIGZlYXR1cmUgZGVmaW5pdGlvbnMuCjIuICBNU1IgaW5kZXggZGVmaW5pdGlvbnMuCjMuICBTRVYgZGVjbGFyYXRpb25zIGFuZCBzdHViIGltcGxlbWVudGF0aW9ucy4KNC4gIENQVUlEIGZlYXR1cmUgdGFibGUuCjUuICBDYWxscyBpbiBgc2V2X3ZtX2Rlc3Ryb3koKWAgYW5kIHN1cHBvcnQgbG9naWMgbGlrZSBgcm1wb3B0X2NhcGFibGUoKWAsIGBzbnBfc2V0dXBfcm1wb3B0KClgLCBldGMuCjYuIEEgY2FsbCB0byBgc25wX3NldHVwX3JtcG9wdCgpYCBpbiBgX19zZXZfc25wX2luaXRfbG9ja2VkKClgLgoKVGhlIGltcG9ydGFudCBwb2ludCBpcyB0aGF0ICphbGwqIHRoZXNlIGNoYW5nZXMgYXJlIHdpdGhpbiB0aGUgQU1EIFNFVi1TTlAgaG9zdCBzdXBwb3J0IGxvZ2ljLCB3aGljaCBpbmNsdWRlcyB0aGUgUk1QT1BUIGZlYXR1cmUgdGhhdCBpcyBzcGVjaWZpYyB0byBBTUQgWmVuNiBiYXJlLW1ldGFsIHByb2Nlc3NvcnMuIEluIHRoZSB2YXN0IG1ham9yaXR5IG9mIGZ1enppbmcgZW52aXJvbm1lbnRzIC0gc3BlY2lmaWNhbGx5IFFFTVUvS1ZNLCB3aGljaCB0aGUgZG9jdW1lbnRhdGlvbiBzcGVjaWZpZXMgaXMgdGhlIHN0YW5kYXJkIHNldHVwIC0gYENDX0FUVFJfSE9TVF9TRVZfU05QYCBpcyBuZXZlciBzZXQuIFRoaXMgaXMgYmVjYXVzZSB3ZSBkb24mIzM5O3QgaGF2ZSBBTUQgUFNQIGhhcmR3YXJlIGFuZCBkdWUgdG8gdGhlIGBYODZfRkVBVFVSRV9IWVBFUlZJU09SYCBjaGVjay4gVGhpcyBtYWtlcyB0aGUgUk1QT1BUIG1lY2hhbmlzbSBhbmQgdGhlIGVudGlyZSBTRVYtU05QIGhvc3QgbGlmZWN5Y2xlICpzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUqIGR1cmluZyBzdGFuZGFyZCBmdXp6aW5nLiAgVGhpcyBtZWFucyB0aGVzZSBhcmVhcyBhcmUgbm90IHdvcnRoIGZ1enppbmcuCgpUaGVyZWZvcmU6CgoqICAgYFdvcnRoRnV6emluZzogZmFsc2VgCiogICBgRW5hYmxlQ29uZmlnczogW11gCiogICBgRm9jdXNTeW1ib2xzOiBbXWAKCkkmIzM5O20gY29uZmlkZW50IGluIHRoZXNlIGZpbmRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBhZGRzIHN1cHBvcnQgZm9yIEFNRCBTRVYtU05QIFJNUE9QVCAoUk1QIE9wdGltaXphdGlvbikgaW5zdHJ1Y3Rpb25zIGFuZCBtYW5hZ2VtZW50IGZvciBBTUQgWmVuNiYjNDM7IGhvc3QgcHJvY2Vzc29ycy4gVGhlc2UgY29kZSBwYXRocyByZXF1aXJlIHBoeXNpY2FsIEFNRCBoYXJkd2FyZSBzdXBwb3J0aW5nIFNFVi1TTlAgaG9zdCBmZWF0dXJlcyBhbmQgdGhlIEFNRCBQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCksIGFuZCBhcmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluc2lkZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IgZGlzYWJsZXMgQ0NfQVRUUl9IT1NUX1NFVl9TTlAgZHVyaW5nIGJvb3QpLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciBBTUQgU0VWLVNOUCBSTVBPUFQgKFJNUCBPcHRpbWl6YXRpb24pIGluc3RydWN0aW9ucyBhbmQgbWFuYWdlbWVudCBmb3IgQU1EIFplbjYmIzQzOyBob3N0IHByb2Nlc3NvcnMuIFRoZXNlIGNvZGUgcGF0aHMgcmVxdWlyZSBwaHlzaWNhbCBBTUQgaGFyZHdhcmUgc3VwcG9ydGluZyBTRVYtU05QIGhvc3QgZmVhdHVyZXMgYW5kIHRoZSBBTUQgUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApLCBhbmQgYXJlIGRpc2FibGVkIHdoZW4gcnVubmluZyBpbnNpZGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChYODZfRkVBVFVSRV9IWVBFUlZJU09SIGRpc2FibGVzIENDX0FUVFJfSE9TVF9TRVZfU05QIGR1cmluZyBib290KS4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjE6NTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIxOjUzOjQ5LjgxNzExNjUxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjExOTkwNTE1MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciBBTUQgU0VWLVNOUCBSTVBPUFQgKFJNUCBPcHRpbWl6YXRpb24pIGluc3RydWN0aW9ucyBhbmQgbWFuYWdlbWVudCBmb3IgQU1EIFplbjYrIGhvc3QgcHJvY2Vzc29ycy4gVGhlc2UgY29kZSBwYXRocyByZXF1aXJlIHBoeXNpY2FsIEFNRCBoYXJkd2FyZSBzdXBwb3J0aW5nIFNFVi1TTlAgaG9zdCBmZWF0dXJlcyBhbmQgdGhlIEFNRCBQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCksIGFuZCBhcmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluc2lkZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IgZGlzYWJsZXMgQ0NfQVRUUl9IT1NUX1NFVl9TTlAgZHVyaW5nIGJvb3QpLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMTo1Mzo0OS44MTcxMjM4NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjExNjcxMjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2Q4NmM2ODJmODE3YjEyNzBhMzU4NTMzMjI3YWM2MDA4OWViYTY0YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDIxOjUzOjQ4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXFxuaW5kZXggZjcwZWU3NGI1ZjkyMS4uM2I1YjMyZDMzOTFiNSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxcbkBAIC03Niw3ICs3Niw3IEBAXFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfSzhcXHRcXHRcXHQoIDMqMzIrIDQpIC8qIE9wdGVyb24sIEF0aGxvbjY0ICovXFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfWkVONVxcdFxcdCggMyozMisgNSkgLyogQ1BVIGJhc2VkIG9uIFplbjUgbWljcm9hcmNoaXRlY3R1cmUgKi9cXG4gI2RlZmluZSBYODZfRkVBVFVSRV9aRU42XFx0XFx0KCAzKjMyKyA2KSAvKiBDUFUgYmFzZWQgb24gWmVuNiBtaWNyb2FyY2hpdGVjdHVyZSAqL1xcbi0vKiBGcmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAzKjMyKyA3KSAqL1xcbisjZGVmaW5lIFg4Nl9GRUFUVVJFX1JNUE9QVFxcdFxcdCggMyozMisgNykgLyogU3VwcG9ydCBmb3IgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbiAqL1xcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQ1xcdCggMyozMisgOCkgLyogXFxcImNvbnN0YW50X3RzY1xcXCIgVFNDIHRpY2tzIGF0IGEgY29uc3RhbnQgcmF0ZSAqL1xcbiAvKiBmcmVlOiB3YXMgI2RlZmluZSBYODZfRkVBVFVSRV9VUFxcdCggMyozMisgOSkgKiBcXFwidXBcXFwiIFNNUCBrZXJuZWwgcnVubmluZyBvbiBVUCAqL1xcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0FSVFxcdFxcdFxcdCggMyozMisxMCkgLyogXFxcImFydFxcXCIgQWx3YXlzIHJ1bm5pbmcgdGltZXIgKEFSVCkgKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxcbmluZGV4IDNhOGU1MWEwYzllODguLjE2MzVlMmUxYzU3NmEgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxcbkBAIC03NjEsNiArNzYxLDkgQEBcXG4gI2RlZmluZSBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVFxcdDBcXG4gI2RlZmluZSBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEXFx0QklUX1VMTChNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVClcXG4gI2RlZmluZSBNU1JfQU1ENjRfUk1QX1NFR01FTlRfU0hJRlQoeClcXHQoKCh4KSBcXHUwMDI2IEdFTk1BU0tfVUxMKDEzLCA4KSkgXFx1MDAzZVxcdTAwM2UgOClcXG4rI2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0JBU0VcXHRcXHQweGMwMDEwMTM5XFxuKyNkZWZpbmUgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVfQklUXFx0MFxcbisjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFXFx0XFx0QklUX1VMTChNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRV9CSVQpXFxuIFxcbiAjZGVmaW5lIE1TUl9TVlNNX0NBQVxcdFxcdFxcdDB4YzAwMWYwMDBcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcXG5pbmRleCA5ZTdhMDc3YzQ0NWRjLi4zMjM1ZTE3MTY0N2RkIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcXG5AQCAtNjYyLDYgKzY2Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfbGVha19wYWdlcyh1NjQgcGZuLCB1bnNpZ25lZCBpbnQgcGFnZXMpXFxuIFxcdF9fc25wX2xlYWtfcGFnZXMocGZuLCBwYWdlcywgdHJ1ZSk7XFxuIH1cXG4gaW50IHNucF9wcmVwYXJlKHZvaWQpO1xcbit2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCk7XFxuK3ZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKTtcXG4gdm9pZCBzbnBfc2h1dGRvd24odm9pZCk7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxcbkBAIC02ODAsNiArNjgyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNucF9sZWFrX3BhZ2VzKHU2NCBwZm4sIHVuc2lnbmVkIGludCBucGFnZXMpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrZHVtcF9zZXZfY2FsbGJhY2sodm9pZCkgeyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfZml4dXBfZTgyMF90YWJsZXModm9pZCkge31cXG4gc3RhdGljIGlubGluZSBpbnQgc25wX3ByZXBhcmUodm9pZCkgeyByZXR1cm4gLUVOT0RFVjsgfVxcbitzdGF0aWMgaW5saW5lIHZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKSB7fVxcbitzdGF0aWMgaW5saW5lIHZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKSB7fVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgc25wX3NodXRkb3duKHZvaWQpIHt9XFxuICNlbmRpZlxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcXG5pbmRleCA4NjY1YTY0NzQ4MDZjLi5kMTc5NWNlMjE5ZGFiIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jXFxuQEAgLTY3LDYgKzY3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVpZF9iaXQgY3B1aWRfYml0c1tdID0ge1xcbiBcXHR7IFg4Nl9GRUFUVVJFX1BFUkZNT05fVjIsXFx0XFx0Q1BVSURfRUFYLCAgMCwgMHg4MDAwMDAyMiwgMCB9LFxcbiBcXHR7IFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIsXFx0XFx0Q1BVSURfRUFYLCAgMSwgMHg4MDAwMDAyMiwgMCB9LFxcbiBcXHR7IFg4Nl9GRUFUVVJFX0FNRF9MQlJfUE1DX0ZSRUVaRSxcXHRDUFVJRF9FQVgsICAyLCAweDgwMDAwMDIyLCAwIH0sXFxuK1xcdHsgWDg2X0ZFQVRVUkVfUk1QT1BULFxcdFxcdFxcdENQVUlEX0VEWCwgIDAsIDB4ODAwMDAwMjUsIDAgfSxcXG4gXFx0eyBYODZfRkVBVFVSRV9BTURfSFRSX0NPUkVTLFxcdFxcdENQVUlEX0VBWCwgMzAsIDB4ODAwMDAwMjYsIDAgfSxcXG4gXFx0eyAwLCAwLCAwLCAwLCAwIH1cXG4gfTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG5pbmRleCA1NzA1NzIzZjFmNDEyLi4wYmFiZjk2ZTM4YzZmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXFxuQEAgLTMwMzIsNiArMzAzMiwxNiBAQCB2b2lkIHNldl92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChzbnBfZGVjb21taXNzaW9uX2NvbnRleHQoa3ZtKSlcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogUGVyZm9ybSBSTVAgb3B0aW1pemF0aW9ucyBvbiBtZW1vcnkgZnJlZWQgYnkgdGVybWluYXRpbmdcXG4rXFx0XFx0ICogZ3Vlc3RzLiAgVGhlIHNjYW4gaXMgZGVmZXJyZWQsIHNvIGl0IG5vcm1hbGx5IHJ1bnMgYWZ0ZXJcXG4rXFx0XFx0ICogc2V2X2dtZW1faW52YWxpZGF0ZSgpIGhhcyBjb252ZXJ0ZWQgdGhpcyBndWVzdCdzIHBhZ2VzIGJhY2sgdG9cXG4rXFx0XFx0ICogc2hhcmVkLCBhbmQgcGlja3MgdGhlbSB1cCB0aGVuLiAgQSB2ZXJ5IGxhcmdlIGd1ZXN0IHdob3NlXFxuK1xcdFxcdCAqIGNvbnZlcnNpb24gaGFzIG5vdCBmaW5pc2hlZCBieSB0aGVuIGlzIHBpY2tlZCB1cCBieSBhIGxhdGVyXFxuK1xcdFxcdCAqIHRlYXJkb3duJ3Mgc2Nhbi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0c2V2X3VuYmluZF9hc2lkKGt2bSwgc2V2LVxcdTAwM2VoYW5kbGUpO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jIGIvYXJjaC94ODYvdmlydC9zdm0vc2V2LmNcXG5pbmRleCBjZmYyODVkOGFkOGUzLi5mYjY2YTFhYTZmYzM1IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jXFxuKysrIGIvYXJjaC94ODYvdmlydC9zdm0vc2V2LmNcXG5AQCAtMTksNiArMTksNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9tbXUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2FtZC1pb21tdS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbm9zcGVjLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vc2V2LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vcHJvY2Vzc29yLmhcXHUwMDNlXFxuQEAgLTEyNCw2ICsxMjUsMTcgQEAgc3RhdGljIHZvaWQgKnJtcF9ib29ra2VlcGluZyBfX3JvX2FmdGVyX2luaXQ7XFxuIFxcbiBzdGF0aWMgdTY0IHByb2JlZF9ybXBfYmFzZSwgcHJvYmVkX3JtcF9zaXplO1xcbiBcXG4rc3RhdGljIHU2NCBybXBvcHRfcGFfc3RhcnQsIHJtcG9wdF9wYV9lbmQ7XFxuK1xcbitlbnVtIHJtcG9wdF9vcF90eXBlIHtcXG4rXFx0Uk1QT1BUX09QX1ZFUklGWV9BTkRfUkVQT1JUX1NUQVRVUyxcXG4rXFx0Uk1QT1BUX09QX1JFUE9SVF9TVEFUVVNcXG4rfTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcm1wb3B0X3dxO1xcbitzdGF0aWMgc3RydWN0IGRlbGF5ZWRfd29yayBybXBvcHRfZGVsYXllZF93b3JrO1xcbitzdGF0aWMgREVGSU5FX01VVEVYKHJtcG9wdF93cV9tdXRleCk7XFxuK1xcbiBzdGF0aWMgTElTVF9IRUFEKHNucF9sZWFrZWRfcGFnZXNfbGlzdCk7XFxuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc25wX2xlYWtlZF9wYWdlc19saXN0X2xvY2spO1xcbiBcXG5AQCAtNTEzLDcgKzUyNSw2IEBAIHN0YXRpYyB2b2lkIGNsZWFyX2hzYXZlX3BhKHZvaWQgKmFyZylcXG4gXFxuIGludCBzbnBfcHJlcGFyZSh2b2lkKVxcbiB7XFxuLVxcdGludCByZXQ7XFxuIFxcdHU2NCB2YWw7XFxuIFxcbiBcXHQvKlxcbkBAIC01MjYsMTQgKzUzNywxOCBAQCBpbnQgc25wX3ByZXBhcmUodm9pZClcXG4gXFxuIFxcdGNsZWFyX3JtcCgpO1xcbiBcXG4tXFx0Y3B1c19yZWFkX2xvY2soKTtcXG4rXFx0LypcXG4rXFx0ICogTm8gQ1BVIG1heSBjb21lIG9ubGluZSB3aXRob3V0IFNucEVuIHdoaWxlIFNOUCBpcyBhY3RpdmU7IGRpc2FibGVcXG4rXFx0ICogaG90cGx1ZyBoZXJlIGFuZCByZS1lbmFibGUgaXQgaW4gc25wX3NodXRkb3duKCkuXFxuK1xcdCAqL1xcbitcXHRjcHVfaG90cGx1Z19kaXNhYmxlKCk7XFxuIFxcbiBcXHRpZiAoIWNwdW1hc2tfZXF1YWwoY3B1X29ubGluZV9tYXNrLCBjcHVfcHJlc2VudF9tYXNrKSkge1xcbi1cXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0Y3B1X2hvdHBsdWdfZW5hYmxlKCk7XFxuIFxcdFxcdHByX3dhcm4oXFxcIlNOUCBpbml0IGZhaWxlZDogbm90IGFsbCBDUFVzIG9ubGluZS4gKCUqcGJsIG9ubGluZSBcXHUwMDNjLVxcdTAwM2UgJSpwYmwgcHJlc2VudCBtYXNrcykuXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRjcHVtYXNrX3ByX2FyZ3MoY3B1X29ubGluZV9tYXNrKSxcXG4gXFx0XFx0XFx0Y3B1bWFza19wcl9hcmdzKGNwdV9wcmVzZW50X21hc2spKTtcXG4tXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFx0fVxcbiBcXG4gXFx0d2JpbnZkX29uX2FsbF9jcHVzKCk7XFxuQEAgLTU0OCwxNCArNTYzLDM1IEBAIGludCBzbnBfcHJlcGFyZSh2b2lkKVxcbiBcXHQvKiBTTlBfSU5JVCByZXF1aXJlcyBNU1JfVk1fSFNBVkVfUEEgdG8gYmUgY2xlYXJlZCBvbiBhbGwgQ1BVcy4gKi9cXG4gXFx0b25fZWFjaF9jcHUoY2xlYXJfaHNhdmVfcGEsIE5VTEwsIDEpO1xcbiBcXG4tXFx0cmV0ID0gMDtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcHJlcGFyZSwgXFxcImNjcFxcXCIpO1xcbiBcXG4tdW5sb2NrOlxcbi1cXHRjcHVzX3JlYWRfdW5sb2NrKCk7XFxuK3N0YXRpYyB2b2lkIHJtcG9wdF9kaXNhYmxlKHZvaWQpXFxuK3tcXG4rXFx0aW50IGNwdTtcXG4gXFxuLVxcdHJldHVybiByZXQ7XFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2cm1wb3B0X3dxX211dGV4KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIHJtcG9wdF93cSBpcyBub24tTlVMTCBvbmx5IGFmdGVyIFJNUE9QVCBoYXMgYmVlbiBmdWxseSBzZXQgdXA6IHRoZVxcbitcXHQgKiB3b3JrcXVldWUgaXMgYWxsb2NhdGVkIGFuZCB0aGUgUk1QT1BUX0JBU0UgTVNScyBhcmUgcHJvZ3JhbW1lZC5cXG4rXFx0ICogc25wX3NldHVwX3JtcG9wdCgpIHJlc2V0cyBpdCB0byBOVUxMIGlmIGFueSBvZiB0aG9zZSBzdGVwcyBmYWlsLCBzbyBhXFxuK1xcdCAqIE5VTEwgcm1wb3B0X3dxIG1lYW5zIG5vdGhpbmcgd2FzIHNldCB1cCBhbmQgdGhlcmUgaXMgbm90aGluZyB0byB0ZWFyXFxuK1xcdCAqIGRvd24uXFxuK1xcdCAqL1xcbitcXHRpZiAoIXJtcG9wdF93cSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrKTtcXG4rXFx0ZGVzdHJveV93b3JrcXVldWUocm1wb3B0X3dxKTtcXG4rXFxuK1xcdGZvcl9lYWNoX2NwdShjcHUsIGNwdV9wcmltYXJ5X3RocmVhZF9tYXNrKVxcbitcXHRcXHR3cm1zcnFfb25fY3B1KGNwdSwgTVNSX0FNRDY0X1JNUE9QVF9CQVNFLCAwKTtcXG4rXFxuK1xcdHJtcG9wdF9wYV9zdGFydCA9IHJtcG9wdF9wYV9lbmQgPSAwO1xcbitcXHRybXBvcHRfd3EgPSBOVUxMO1xcbiB9XFxuLUVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3ByZXBhcmUsIFxcXCJjY3BcXFwiKTtcXG4gXFxuIHZvaWQgc25wX3NodXRkb3duKHZvaWQpXFxuIHtcXG5AQCAtNTY1LDExICs2MDEsMTU2IEBAIHZvaWQgc25wX3NodXRkb3duKHZvaWQpXFxuIFxcdGlmIChzeXNjZmcgXFx1MDAyNiBNU1JfQU1ENjRfU1lTQ0ZHX1NOUF9FTilcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0cm1wb3B0X2Rpc2FibGUoKTtcXG4rXFxuIFxcdGNsZWFyX3JtcCgpO1xcbiBcXHRvbl9lYWNoX2NwdShtZmRfcmVjb25maWd1cmUsIE5VTEwsIDEpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIGZpcm13YXJlIGhhcyBkaXNhYmxlZCBTTlAgKFNucEVuIGlzIGNsZWFyKSwgc28gcmUtZW5hYmxlIENQVVxcbitcXHQgKiBob3RwbHVnLiAgQSBsZWdhY3kgU05QIHNodXRkb3duIHJldHVybnMgYWJvdmUgd2l0aCBTbnBFbiBzdGlsbCBzZXQgYW5kXFxuK1xcdCAqIGxlYXZlcyBob3RwbHVnIGRpc2FibGVkLlxcbitcXHQgKi9cXG4rXFx0Y3B1X2hvdHBsdWdfZW5hYmxlKCk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2h1dGRvd24sIFxcXCJjY3BcXFwiKTtcXG4gXFxuK3N0YXRpYyBib29sIHJtcG9wdF9jYXBhYmxlKHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QT1BUKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG4rfVxcbitcXG4rLypcXG4rICogUk1QT1BUIG9wdGltaXphdGlvbnMgc2tpcCBSTVAgY2hlY2tzIGF0IDFHQiBncmFudWxhcml0eSBpZiB0aGlzIHJhbmdlIG9mXFxuKyAqIG1lbW9yeSBkb2VzIG5vdCBjb250YWluIGFueSBTTlAgZ3Vlc3QgbWVtb3J5LlxcbisgKlxcbisgKiBAcGEgaXMgYSBzeXN0ZW0gcGh5c2ljYWwgYWRkcmVzczsgUk1QT1BUIG9wZXJhdGVzIG9uIHRoZSBjb250YWluaW5nIDFHQi5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHJtcG9wdCh1NjQgcGEpXFxuK3tcXG4rXFx0ZW51bSBybXBvcHRfb3BfdHlwZSBvcCA9IFJNUE9QVF9PUF9WRVJJRllfQU5EX1JFUE9SVF9TVEFUVVM7XFxuK1xcdHU2NCBwYV9zdGFydCA9IEFMSUdOX0RPV04ocGEsIFNaXzFHKTtcXG4rXFxuK1xcdGFzbSB2b2xhdGlsZShcXFwiLmJ5dGUgMHhmMiwgMHgwZiwgMHgwMSwgMHhmY1xcXCJcXG4rXFx0XFx0ICAgICA6OiBcXFwiYVxcXCIgKHBhX3N0YXJ0KSwgXFxcImNcXFwiIChvcClcXG4rXFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiLCBcXFwiY2NcXFwiKTtcXG4rfVxcbitcXG4rLyogb25fZWFjaF9jcHUoKSBjYWxsYmFjazogb3B0aW1pemUgdGhlIHdob2xlIFJNUE9QVCByYW5nZSBvbiB0aGlzIENQVS4gKi9cXG4rc3RhdGljIHZvaWQgcm1wb3B0X3NjYW5fcmFuZ2Uodm9pZCAqYXJnKVxcbit7XFxuK1xcdHU2NCBwYTtcXG4rXFxuK1xcdGZvciAocGEgPSBybXBvcHRfcGFfc3RhcnQ7IHBhIFxcdTAwM2Mgcm1wb3B0X3BhX2VuZDsgcGEgKz0gU1pfMUcpXFxuK1xcdFxcdHJtcG9wdChwYSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGRvX3JtcG9wdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHQvKlxcbitcXHQgKiBSTVBPUFQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGEgUk1QIHRhYmxlIHNjYW4gaW4gcmVzZXJ2ZWQgcHJvY2Vzc29yXFxuK1xcdCAqIG1lbW9yeSwgYWxsb3dpbmcgZnV0dXJlIGludm9jYXRpb25zIHRvIHNraXAgc3VjaCBjb3N0bHkgb3BlcmF0aW9ucy5cXG4rXFx0ICovXFxuK1xcdG1pZ3JhdGVfZGlzYWJsZSgpO1xcbitcXHRybXBvcHRfc2Nhbl9yYW5nZShOVUxMKTtcXG4rXFx0bWlncmF0ZV9lbmFibGUoKTtcXG4rXFxuK1xcdG9uX2VhY2hfY3B1X21hc2soY3B1X3ByaW1hcnlfdGhyZWFkX21hc2ssIHJtcG9wdF9zY2FuX3JhbmdlLCBOVUxMLCB0cnVlKTtcXG4rfVxcbitcXG4rLypcXG4rICogRGVsYXksIGluIG1pbGxpc2Vjb25kcywgYmVmb3JlIHRoZSBSTVAgcmUtb3B0aW1pemF0aW9uIHBhc3MgcnVucyBhZnRlciBhblxcbisgKiBTTlAgZ3Vlc3QgaXMgdG9ybiBkb3duLiAgc25wX3JtcG9wdF9hbGxfcGh5c21lbSgpIHJlLWFybXMgdGhlIGRlbGF5ZWQgd29ya1xcbisgKiB3aXRoIG1vZF9kZWxheWVkX3dvcmsoKSBvbiBlYWNoIHRlYXJkb3duLCBzbyB0aGUgcGFzcyBmaXJlcyB0aGlzIGxvbmcgYWZ0ZXJcXG4rICogdGhlIGxhc3QgdGVhcmRvd24uICBUaGlzIGNvYWxlc2NlcyBhIGJ1cnN0IG9mIHRlYXJkb3ducyBpbnRvIGEgc2luZ2xlIHNjYW5cXG4rICogYW5kIGdpdmVzIGVhY2ggZ3Vlc3QncyBwYWdlcyB0aW1lIHRvIGJlIGNvbnZlcnRlZCBiYWNrIHRvIHRoZSBzaGFyZWQsXFxuKyAqIGh5cGVydmlzb3Itb3duZWQgc3RhdGUgYmVmb3JlIHRoZSBzY2FuIHJlLW9wdGltaXplcyB0aGVpciAxR0IgcmVnaW9ucy4gIFRoZVxcbisgKiAxMCBzZWNvbmQgdmFsdWUgaXMgYSBoZXVyaXN0aWMgdHJhZGluZyByZS1vcHRpbWl6YXRpb24gbGF0ZW5jeSBhZ2FpbnN0XFxuKyAqIHNjYW5uaW5nIHRvbyBlYWdlcmx5LlxcbisgKi9cXG4rI2RlZmluZSBSTVBPUFRfV09SS19USU1FT1VUXFx0KDEwICogTVNFQ19QRVJfU0VDKVxcbitcXG4rdm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpXFxuK3tcXG4rXFx0aWYgKCFybXBvcHRfY2FwYWJsZSgpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnJtcG9wdF93cV9tdXRleCk7XFxuK1xcbitcXHRpZiAoIXJtcG9wdF93cSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bW9kX2RlbGF5ZWRfd29yayhybXBvcHRfd3EsIFxcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLFxcbitcXHRcXHRcXHQgbXNlY3NfdG9famlmZmllcyhSTVBPUFRfV09SS19USU1FT1VUKSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcm1wb3B0X2FsbF9waHlzbWVtLCBcXFwia3ZtLWFtZFxcXCIpO1xcbitcXG4rdm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpXFxuK3tcXG4rXFx0dTY0IHJtcG9wdF9iYXNlO1xcbitcXHRpbnQgY3B1O1xcbitcXG4rXFx0aWYgKCFybXBvcHRfY2FwYWJsZSgpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnJtcG9wdF93cV9tdXRleCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBPbiByZS1pbml0aWFsaXphdGlvbiBhZnRlciBhIGxlZ2FjeSBTTlAgc2h1dGRvd24gKFNOUF9TSFVURE9XTl9FWFxcbitcXHQgKiB3aXRoIHg4Nl9zbnBfc2h1dGRvd249MCksIHNucF9zaHV0ZG93bigpIGFuZCB0aHVzIHJtcG9wdF9kaXNhYmxlKCkgYXJlXFxuK1xcdCAqIHNraXBwZWQsIHNvIHRoZSB3b3JrcXVldWUsIGRlbGF5ZWQgd29yayBhbmQgcGVyLUNQVSBSTVBPUFRfQkFTRSBNU1JzXFxuK1xcdCAqIGFyZSBzdGlsbCBzZXQgdXAgYW5kIHZhbGlkIChTbnBFbiBzdGF5ZWQgc2V0IGFuZCBDUFUgaG90cGx1ZyBzdGF5ZWRcXG4rXFx0ICogZGlzYWJsZWQpLiAgUmF0aGVyIHRoYW4gcmUtZG9pbmcgdGhlIHNldHVwLCB3aGljaCB3b3VsZCBsZWFrIHRoZVxcbitcXHQgKiBleGlzdGluZyBzdGF0ZSwganVzdCByZS1xdWV1ZSB0aGUgb3B0aW1pemF0aW9uIHBhc3MgdG8gcmUtb3B0aW1pemUgYW55XFxuK1xcdCAqIG1lbW9yeSB0aGUgcHJldmlvdXMgU05QIHNlc3Npb24gZGUtb3B0aW1pemVkLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJtcG9wdF93cSkge1xcbitcXHRcXHRxdWV1ZV9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogQ3JlYXRlIGFuIFJNUE9QVC1zcGVjaWZpYyB3b3JrcXVldWUgdG8gYXZvaWQgc2NoZWR1bGluZ1xcbitcXHQgKiBSTVBPUFQgd29ya2l0ZW0gb24gdGhlIGdsb2JhbCBzeXN0ZW0gd29ya3F1ZXVlLlxcbitcXHQgKi9cXG4rXFx0cm1wb3B0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJybXBvcHRfd3FcXFwiLCBXUV9VTkJPVU5ELCAxKTtcXG4rXFx0aWYgKCFybXBvcHRfd3EpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gYWxsb2NhdGUgUk1QT1BUIHdvcmtxdWV1ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmssIGRvX3JtcG9wdF93b3JrKTtcXG4rXFxuK1xcdHJtcG9wdF9wYV9zdGFydCA9IEFMSUdOX0RPV04oUEZOX1BIWVMobWluX2xvd19wZm4pLCBTWl8xRyk7XFxuK1xcdHJtcG9wdF9iYXNlID0gcm1wb3B0X3BhX3N0YXJ0IHwgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEU7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQZXItQ1BVIFJNUE9QVCB0YWJsZXMgY292ZXIgYXQgbW9zdCAyIFRCLiAgUHJvZ3JhbSBlYWNoIGNvcmUnc1xcbitcXHQgKiBSTVBPUFRfQkFTRSB3aXRoIHRoZSBzdGFydCBvZiBSQU0gdG8gb3B0aW1pemUgdXAgdG8gMiBUQi5cXG4rXFx0ICovXFxuK1xcdGZvcl9lYWNoX2NwdShjcHUsIGNwdV9wcmltYXJ5X3RocmVhZF9tYXNrKVxcbitcXHRcXHR3cm1zcnFfb25fY3B1KGNwdSwgTVNSX0FNRDY0X1JNUE9QVF9CQVNFLCBybXBvcHRfYmFzZSk7XFxuK1xcbitcXHRybXBvcHRfcGFfZW5kID0gQUxJR04oUEZOX1BIWVMobWF4X3BmbiksIFNaXzFHKTtcXG4rXFxuK1xcdC8qIExpbWl0IG1lbW9yeSBzY2FubmluZyB0byAyVEIgb2YgUkFNICovXFxuK1xcdGlmICgocm1wb3B0X3BhX2VuZCAtIHJtcG9wdF9wYV9zdGFydCkgXFx1MDAzZSBTWl8yVCkge1xcbitcXHRcXHRwcl9pbmZvKFxcXCJSTVBPUFQgY292ZXJhZ2UgbGltaXRlZCB0byAyVEI7IG1lbW9yeSBhYm92ZSAweCVsbHggbm90IG9wdGltaXplZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cm1wb3B0X3BhX3N0YXJ0ICsgU1pfMlQpO1xcbitcXHRcXHRybXBvcHRfcGFfZW5kID0gcm1wb3B0X3BhX3N0YXJ0ICsgU1pfMlQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE9uY2UgYWxsIHBlci1DUFUgUk1QT1BUIHRhYmxlcyBoYXZlIGJlZW4gY29uZmlndXJlZCwgZW5hYmxlIFJNUE9QVFxcbitcXHQgKiBvcHRpbWl6YXRpb25zIG9uIGFsbCBwaHlzaWNhbCBtZW1vcnkuXFxuK1xcdCAqL1xcbitcXHRxdWV1ZV9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7XFxuK1xcbitcXHRwcl9pbmZvKFxcXCJSTVBPUFQgb3B0aW1pemF0aW9ucyBlbmFibGVkXFxcXG5cXFwiKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zZXR1cF9ybXBvcHQsIFxcXCJjY3BcXFwiKTtcXG4rXFxuIC8qXFxuICAqIERvIHRoZSBuZWNlc3NhcnkgcHJlcGFyYXRpb25zIHdoaWNoIGFyZSB2ZXJpZmllZCBieSB0aGUgZmlybXdhcmUgYXNcXG4gICogZGVzY3JpYmVkIGluIHRoZSBTTlBfSU5JVF9FWCBmaXJtd2FyZSBjb21tYW5kIGRlc2NyaXB0aW9uIGluIHRoZSBTTlBcXG5AQCAtNTc3LDYgKzc1OCw4IEBAIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCBcXFwiY2NwXFxcIik7XFxuICAqL1xcbiBpbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpXFxuIHtcXG4rXFx0dTY0IHZhbDtcXG4rXFxuIFxcdGlmIChXQVJOX09OX09OQ0UoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpKVxcbiBcXHRcXHRyZXR1cm4gLUVOT1NZUztcXG4gXFxuQEAgLTU4Niw2ICs3NjksMTUgQEAgaW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxcbiBcXHRpZiAoIXNldHVwX3JtcHRhYmxlKCkpXFxuIFxcdFxcdHJldHVybiAtRU5PU1lTO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogT24gYSBrZXhlYyBib290IFNOUCBtYXkgYWxyZWFkeSBiZSBlbmFibGVkIChsZWdhY3kgZmlybXdhcmUgbGVhdmVzXFxuK1xcdCAqIFNucEVuIHNldCBhY3Jvc3Mgc2h1dGRvd24pLCBpbiB3aGljaCBjYXNlIHNucF9wcmVwYXJlKCkgYmFpbHMgd2l0aG91dFxcbitcXHQgKiBkaXNhYmxpbmcgQ1BVIGhvdHBsdWcsIHNvIGRpc2FibGUgaXQgaGVyZS5cXG4rXFx0ICovXFxuK1xcdHJkbXNycShNU1JfQU1ENjRfU1lTQ0ZHLCB2YWwpO1xcbitcXHRpZiAodmFsIFxcdTAwMjYgTVNSX0FNRDY0X1NZU0NGR19TTlBfRU4pXFxuK1xcdFxcdGNwdV9ob3RwbHVnX2Rpc2FibGUoKTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFNldHRpbmcgY3Jhc2hfa2V4ZWNfcG9zdF9ub3RpZmllcnMgdG8gJ3RydWUnIHRvIGVuc3VyZSB0aGF0IFNOUCBwYW5pY1xcbiBcXHQgKiBub3RpZmllciBpcyBpbnZva2VkIHRvIGRvIFNOUCBJT01NVSBzaHV0ZG93biBiZWZvcmUga2R1bXAuXFxuQEAgLTY4MywxMyArODc1LDIxIEBAIHN0YXRpYyBib29sIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKHZvaWQpXFxuIFxcbiBib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpXFxuIHtcXG4tXFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU0VHTUVOVEVEX1JNUCkpXFxuK1xcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFR01FTlRFRF9STVApKSB7XFxuIFxcdFxcdHJkbXNycShNU1JfQU1ENjRfUk1QX0NGRywgcm1wX2NmZyk7XFxuIFxcbi1cXHRpZiAocm1wX2NmZyBcXHUwMDI2IE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRUQpXFxuLVxcdFxcdHJldHVybiBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbygpO1xcbi1cXHRlbHNlXFxuLVxcdFxcdHJldHVybiBwcm9iZV9jb250aWd1b3VzX3JtcHRhYmxlX2luZm8oKTtcXG4rXFx0XFx0aWYgKHJtcF9jZmcgXFx1MDAyNiBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEKVxcbitcXHRcXHRcXHRyZXR1cm4gcHJvYmVfc2VnbWVudGVkX3JtcHRhYmxlX2luZm8oKTtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogU2VnbWVudGVkIFJNUCBpcyBlaXRoZXIgbm90IHN1cHBvcnRlZCBvbiB0aGUgcGxhdGZvcm0gb3IgaXNcXG4rXFx0ICogZGlzYWJsZWQgYnkgdGhlIGZpcm13YXJlLiAgUk1QT1BUIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dFxcbitcXHQgKiBzZWdtZW50ZWQgUk1QLlxcbitcXHQgKi9cXG4rXFx0c2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9STVBPUFQpO1xcbitcXG4rXFx0cmV0dXJuIHByb2JlX2NvbnRpZ3VvdXNfcm1wdGFibGVfaW5mbygpO1xcbiB9XFxuIFxcbiAvKlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jIGIvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY1xcbmluZGV4IGY4MzNjYjdlNGRhMzYuLjI4N2E4MzQ1ODU0YmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY1xcbisrKyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcXG5AQCAtMTY2Myw2ICsxNjYzLDggQEAgc3RhdGljIGludCBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoaW50ICplcnJvciwgdW5zaWduZWQgaW50IG1heF9zbnBfYXNpZClcXG4gXFxuIFxcdHNldl9lc190bXJfc2l6ZSA9IFNOUF9UTVJfU0laRTtcXG4gXFxuK1xcdHNucF9zZXR1cF9ybXBvcHQoKTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMTo1Mzo1MC40Mjk1NDE1ODRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjYwNTg2NjE1ODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciBBTUQgU0VWLVNOUCBSTVBPUFQgKFJNUCBPcHRpbWl6YXRpb24pIGluc3RydWN0aW9ucyBhbmQgbWFuYWdlbWVudCBmb3IgQU1EIFplbjYrIGhvc3QgcHJvY2Vzc29ycy4gVGhlc2UgY29kZSBwYXRocyByZXF1aXJlIHBoeXNpY2FsIEFNRCBoYXJkd2FyZSBzdXBwb3J0aW5nIFNFVi1TTlAgaG9zdCBmZWF0dXJlcyBhbmQgdGhlIEFNRCBQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCksIGFuZCBhcmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluc2lkZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IgZGlzYWJsZXMgQ0NfQVRUUl9IT1NUX1NFVl9TTlAgZHVyaW5nIGJvb3QpLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNkODZjNjgyZjgxN2IxMjcwYTM1ODUzMzIyN2FjNjAwODllYmE2NGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDIxOjUzOjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbmluZGV4IGY3MGVlNzRiNWY5MjEuLjNiNWIzMmQzMzkxYjUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG5AQCAtNzYsNyArNzYsNyBAQFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfSzhcdFx0XHQoIDMqMzIrIDQpIC8qIE9wdGVyb24sIEF0aGxvbjY0ICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9aRU41XHRcdCggMyozMisgNSkgLyogQ1BVIGJhc2VkIG9uIFplbjUgbWljcm9hcmNoaXRlY3R1cmUgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1pFTjZcdFx0KCAzKjMyKyA2KSAvKiBDUFUgYmFzZWQgb24gWmVuNiBtaWNyb2FyY2hpdGVjdHVyZSAqL1xuLS8qIEZyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDMqMzIrIDcpICovXG4rI2RlZmluZSBYODZfRkVBVFVSRV9STVBPUFRcdFx0KCAzKjMyKyA3KSAvKiBTdXBwb3J0IGZvciBBTUQgUk1QT1BUIGluc3RydWN0aW9uICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9DT05TVEFOVF9UU0NcdCggMyozMisgOCkgLyogXCJjb25zdGFudF90c2NcIiBUU0MgdGlja3MgYXQgYSBjb25zdGFudCByYXRlICovXG4gLyogZnJlZTogd2FzICNkZWZpbmUgWDg2X0ZFQVRVUkVfVVBcdCggMyozMisgOSkgKiBcInVwXCIgU01QIGtlcm5lbCBydW5uaW5nIG9uIFVQICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9BUlRcdFx0XHQoIDMqMzIrMTApIC8qIFwiYXJ0XCIgQWx3YXlzIHJ1bm5pbmcgdGltZXIgKEFSVCkgKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXG5pbmRleCAzYThlNTFhMGM5ZTg4Li4xNjM1ZTJlMWM1NzZhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXG5AQCAtNzYxLDYgKzc2MSw5IEBAXG4gI2RlZmluZSBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVFx0MFxuICNkZWZpbmUgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRFx0QklUX1VMTChNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVClcbiAjZGVmaW5lIE1TUl9BTUQ2NF9STVBfU0VHTUVOVF9TSElGVCh4KVx0KCgoeCkgXHUwMDI2IEdFTk1BU0tfVUxMKDEzLCA4KSkgXHUwMDNlXHUwMDNlIDgpXG4rI2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0JBU0VcdFx0MHhjMDAxMDEzOVxuKyNkZWZpbmUgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVfQklUXHQwXG4rI2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRVx0XHRCSVRfVUxMKE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFX0JJVClcbiBcbiAjZGVmaW5lIE1TUl9TVlNNX0NBQVx0XHRcdDB4YzAwMWYwMDBcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXG5pbmRleCA5ZTdhMDc3YzQ0NWRjLi4zMjM1ZTE3MTY0N2RkIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXG5AQCAtNjYyLDYgKzY2Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfbGVha19wYWdlcyh1NjQgcGZuLCB1bnNpZ25lZCBpbnQgcGFnZXMpXG4gXHRfX3NucF9sZWFrX3BhZ2VzKHBmbiwgcGFnZXMsIHRydWUpO1xuIH1cbiBpbnQgc25wX3ByZXBhcmUodm9pZCk7XG4rdm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpO1xuK3ZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKTtcbiB2b2lkIHNucF9zaHV0ZG93bih2b2lkKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxuQEAgLTY4MCw2ICs2ODIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc25wX2xlYWtfcGFnZXModTY0IHBmbiwgdW5zaWduZWQgaW50IG5wYWdlcykge31cbiBzdGF0aWMgaW5saW5lIHZvaWQga2R1bXBfc2V2X2NhbGxiYWNrKHZvaWQpIHsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfZml4dXBfZTgyMF90YWJsZXModm9pZCkge31cbiBzdGF0aWMgaW5saW5lIGludCBzbnBfcHJlcGFyZSh2b2lkKSB7IHJldHVybiAtRU5PREVWOyB9XG4rc3RhdGljIGlubGluZSB2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCkge31cbitzdGF0aWMgaW5saW5lIHZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2h1dGRvd24odm9pZCkge31cbiAjZW5kaWZcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xuaW5kZXggODY2NWE2NDc0ODA2Yy4uZDE3OTVjZTIxOWRhYiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcbkBAIC02Nyw2ICs2Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRfYml0IGNwdWlkX2JpdHNbXSA9IHtcbiBcdHsgWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMixcdFx0Q1BVSURfRUFYLCAgMCwgMHg4MDAwMDAyMiwgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9BTURfTEJSX1YyLFx0XHRDUFVJRF9FQVgsICAxLCAweDgwMDAwMDIyLCAwIH0sXG4gXHR7IFg4Nl9GRUFUVVJFX0FNRF9MQlJfUE1DX0ZSRUVaRSxcdENQVUlEX0VBWCwgIDIsIDB4ODAwMDAwMjIsIDAgfSxcbitcdHsgWDg2X0ZFQVRVUkVfUk1QT1BULFx0XHRcdENQVUlEX0VEWCwgIDAsIDB4ODAwMDAwMjUsIDAgfSxcbiBcdHsgWDg2X0ZFQVRVUkVfQU1EX0hUUl9DT1JFUyxcdFx0Q1BVSURfRUFYLCAzMCwgMHg4MDAwMDAyNiwgMCB9LFxuIFx0eyAwLCAwLCAwLCAwLCAwIH1cbiB9O1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5pbmRleCA1NzA1NzIzZjFmNDEyLi4wYmFiZjk2ZTM4YzZmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuQEAgLTMwMzIsNiArMzAzMiwxNiBAQCB2b2lkIHNldl92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0ICovXG4gXHRcdGlmIChzbnBfZGVjb21taXNzaW9uX2NvbnRleHQoa3ZtKSlcbiBcdFx0XHRyZXR1cm47XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFBlcmZvcm0gUk1QIG9wdGltaXphdGlvbnMgb24gbWVtb3J5IGZyZWVkIGJ5IHRlcm1pbmF0aW5nXG4rXHRcdCAqIGd1ZXN0cy4gIFRoZSBzY2FuIGlzIGRlZmVycmVkLCBzbyBpdCBub3JtYWxseSBydW5zIGFmdGVyXG4rXHRcdCAqIHNldl9nbWVtX2ludmFsaWRhdGUoKSBoYXMgY29udmVydGVkIHRoaXMgZ3Vlc3QncyBwYWdlcyBiYWNrIHRvXG4rXHRcdCAqIHNoYXJlZCwgYW5kIHBpY2tzIHRoZW0gdXAgdGhlbi4gIEEgdmVyeSBsYXJnZSBndWVzdCB3aG9zZVxuK1x0XHQgKiBjb252ZXJzaW9uIGhhcyBub3QgZmluaXNoZWQgYnkgdGhlbiBpcyBwaWNrZWQgdXAgYnkgYSBsYXRlclxuK1x0XHQgKiB0ZWFyZG93bidzIHNjYW4uXG4rXHRcdCAqL1xuK1x0XHRzbnBfcm1wb3B0X2FsbF9waHlzbWVtKCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRzZXZfdW5iaW5kX2FzaWQoa3ZtLCBzZXYtXHUwMDNlaGFuZGxlKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYyBiL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jXG5pbmRleCBjZmYyODVkOGFkOGUzLi5mYjY2YTFhYTZmYzM1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvdmlydC9zdm0vc2V2LmNcbisrKyBiL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jXG5AQCAtMTksNiArMTksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hbWQtaW9tbXUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25vc3BlYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc2V2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcHJvY2Vzc29yLmhcdTAwM2VcbkBAIC0xMjQsNiArMTI1LDE3IEBAIHN0YXRpYyB2b2lkICpybXBfYm9va2tlZXBpbmcgX19yb19hZnRlcl9pbml0O1xuIFxuIHN0YXRpYyB1NjQgcHJvYmVkX3JtcF9iYXNlLCBwcm9iZWRfcm1wX3NpemU7XG4gXG4rc3RhdGljIHU2NCBybXBvcHRfcGFfc3RhcnQsIHJtcG9wdF9wYV9lbmQ7XG4rXG4rZW51bSBybXBvcHRfb3BfdHlwZSB7XG4rXHRSTVBPUFRfT1BfVkVSSUZZX0FORF9SRVBPUlRfU1RBVFVTLFxuK1x0Uk1QT1BUX09QX1JFUE9SVF9TVEFUVVNcbit9O1xuK1xuK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcm1wb3B0X3dxO1xuK3N0YXRpYyBzdHJ1Y3QgZGVsYXllZF93b3JrIHJtcG9wdF9kZWxheWVkX3dvcms7XG4rc3RhdGljIERFRklORV9NVVRFWChybXBvcHRfd3FfbXV0ZXgpO1xuK1xuIHN0YXRpYyBMSVNUX0hFQUQoc25wX2xlYWtlZF9wYWdlc19saXN0KTtcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNucF9sZWFrZWRfcGFnZXNfbGlzdF9sb2NrKTtcbiBcbkBAIC01MTMsNyArNTI1LDYgQEAgc3RhdGljIHZvaWQgY2xlYXJfaHNhdmVfcGEodm9pZCAqYXJnKVxuIFxuIGludCBzbnBfcHJlcGFyZSh2b2lkKVxuIHtcbi1cdGludCByZXQ7XG4gXHR1NjQgdmFsO1xuIFxuIFx0LypcbkBAIC01MjYsMTQgKzUzNywxOCBAQCBpbnQgc25wX3ByZXBhcmUodm9pZClcbiBcbiBcdGNsZWFyX3JtcCgpO1xuIFxuLVx0Y3B1c19yZWFkX2xvY2soKTtcbitcdC8qXG4rXHQgKiBObyBDUFUgbWF5IGNvbWUgb25saW5lIHdpdGhvdXQgU25wRW4gd2hpbGUgU05QIGlzIGFjdGl2ZTsgZGlzYWJsZVxuK1x0ICogaG90cGx1ZyBoZXJlIGFuZCByZS1lbmFibGUgaXQgaW4gc25wX3NodXRkb3duKCkuXG4rXHQgKi9cbitcdGNwdV9ob3RwbHVnX2Rpc2FibGUoKTtcbiBcbiBcdGlmICghY3B1bWFza19lcXVhbChjcHVfb25saW5lX21hc2ssIGNwdV9wcmVzZW50X21hc2spKSB7XG4tXHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuK1x0XHRjcHVfaG90cGx1Z19lbmFibGUoKTtcbiBcdFx0cHJfd2FybihcIlNOUCBpbml0IGZhaWxlZDogbm90IGFsbCBDUFVzIG9ubGluZS4gKCUqcGJsIG9ubGluZSBcdTAwM2MtXHUwMDNlICUqcGJsIHByZXNlbnQgbWFza3MpLlxcblwiLFxuIFx0XHRcdGNwdW1hc2tfcHJfYXJncyhjcHVfb25saW5lX21hc2spLFxuIFx0XHRcdGNwdW1hc2tfcHJfYXJncyhjcHVfcHJlc2VudF9tYXNrKSk7XG4tXHRcdGdvdG8gdW5sb2NrO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG4gXG4gXHR3YmludmRfb25fYWxsX2NwdXMoKTtcbkBAIC01NDgsMTQgKzU2MywzNSBAQCBpbnQgc25wX3ByZXBhcmUodm9pZClcbiBcdC8qIFNOUF9JTklUIHJlcXVpcmVzIE1TUl9WTV9IU0FWRV9QQSB0byBiZSBjbGVhcmVkIG9uIGFsbCBDUFVzLiAqL1xuIFx0b25fZWFjaF9jcHUoY2xlYXJfaHNhdmVfcGEsIE5VTEwsIDEpO1xuIFxuLVx0cmV0ID0gMDtcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9wcmVwYXJlLCBcImNjcFwiKTtcbiBcbi11bmxvY2s6XG4tXHRjcHVzX3JlYWRfdW5sb2NrKCk7XG4rc3RhdGljIHZvaWQgcm1wb3B0X2Rpc2FibGUodm9pZClcbit7XG4rXHRpbnQgY3B1O1xuIFxuLVx0cmV0dXJuIHJldDtcbitcdGd1YXJkKG11dGV4KShcdTAwMjZybXBvcHRfd3FfbXV0ZXgpO1xuK1xuK1x0LypcbitcdCAqIHJtcG9wdF93cSBpcyBub24tTlVMTCBvbmx5IGFmdGVyIFJNUE9QVCBoYXMgYmVlbiBmdWxseSBzZXQgdXA6IHRoZVxuK1x0ICogd29ya3F1ZXVlIGlzIGFsbG9jYXRlZCBhbmQgdGhlIFJNUE9QVF9CQVNFIE1TUnMgYXJlIHByb2dyYW1tZWQuXG4rXHQgKiBzbnBfc2V0dXBfcm1wb3B0KCkgcmVzZXRzIGl0IHRvIE5VTEwgaWYgYW55IG9mIHRob3NlIHN0ZXBzIGZhaWwsIHNvIGFcbitcdCAqIE5VTEwgcm1wb3B0X3dxIG1lYW5zIG5vdGhpbmcgd2FzIHNldCB1cCBhbmQgdGhlcmUgaXMgbm90aGluZyB0byB0ZWFyXG4rXHQgKiBkb3duLlxuK1x0ICovXG4rXHRpZiAoIXJtcG9wdF93cSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmspO1xuK1x0ZGVzdHJveV93b3JrcXVldWUocm1wb3B0X3dxKTtcbitcbitcdGZvcl9lYWNoX2NwdShjcHUsIGNwdV9wcmltYXJ5X3RocmVhZF9tYXNrKVxuK1x0XHR3cm1zcnFfb25fY3B1KGNwdSwgTVNSX0FNRDY0X1JNUE9QVF9CQVNFLCAwKTtcbitcbitcdHJtcG9wdF9wYV9zdGFydCA9IHJtcG9wdF9wYV9lbmQgPSAwO1xuK1x0cm1wb3B0X3dxID0gTlVMTDtcbiB9XG4tRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcHJlcGFyZSwgXCJjY3BcIik7XG4gXG4gdm9pZCBzbnBfc2h1dGRvd24odm9pZClcbiB7XG5AQCAtNTY1LDExICs2MDEsMTU2IEBAIHZvaWQgc25wX3NodXRkb3duKHZvaWQpXG4gXHRpZiAoc3lzY2ZnIFx1MDAyNiBNU1JfQU1ENjRfU1lTQ0ZHX1NOUF9FTilcbiBcdFx0cmV0dXJuO1xuIFxuK1x0cm1wb3B0X2Rpc2FibGUoKTtcbitcbiBcdGNsZWFyX3JtcCgpO1xuIFx0b25fZWFjaF9jcHUobWZkX3JlY29uZmlndXJlLCBOVUxMLCAxKTtcbitcbitcdC8qXG4rXHQgKiBUaGUgZmlybXdhcmUgaGFzIGRpc2FibGVkIFNOUCAoU25wRW4gaXMgY2xlYXIpLCBzbyByZS1lbmFibGUgQ1BVXG4rXHQgKiBob3RwbHVnLiAgQSBsZWdhY3kgU05QIHNodXRkb3duIHJldHVybnMgYWJvdmUgd2l0aCBTbnBFbiBzdGlsbCBzZXQgYW5kXG4rXHQgKiBsZWF2ZXMgaG90cGx1ZyBkaXNhYmxlZC5cbitcdCAqL1xuK1x0Y3B1X2hvdHBsdWdfZW5hYmxlKCk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCBcImNjcFwiKTtcbiBcbitzdGF0aWMgYm9vbCBybXBvcHRfY2FwYWJsZSh2b2lkKVxuK3tcbitcdHJldHVybiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUE9QVCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbit9XG4rXG4rLypcbisgKiBSTVBPUFQgb3B0aW1pemF0aW9ucyBza2lwIFJNUCBjaGVja3MgYXQgMUdCIGdyYW51bGFyaXR5IGlmIHRoaXMgcmFuZ2Ugb2ZcbisgKiBtZW1vcnkgZG9lcyBub3QgY29udGFpbiBhbnkgU05QIGd1ZXN0IG1lbW9yeS5cbisgKlxuKyAqIEBwYSBpcyBhIHN5c3RlbSBwaHlzaWNhbCBhZGRyZXNzOyBSTVBPUFQgb3BlcmF0ZXMgb24gdGhlIGNvbnRhaW5pbmcgMUdCLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJtcG9wdCh1NjQgcGEpXG4re1xuK1x0ZW51bSBybXBvcHRfb3BfdHlwZSBvcCA9IFJNUE9QVF9PUF9WRVJJRllfQU5EX1JFUE9SVF9TVEFUVVM7XG4rXHR1NjQgcGFfc3RhcnQgPSBBTElHTl9ET1dOKHBhLCBTWl8xRyk7XG4rXG4rXHRhc20gdm9sYXRpbGUoXCIuYnl0ZSAweGYyLCAweDBmLCAweDAxLCAweGZjXCJcbitcdFx0ICAgICA6OiBcImFcIiAocGFfc3RhcnQpLCBcImNcIiAob3ApXG4rXHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIpO1xuK31cbitcbisvKiBvbl9lYWNoX2NwdSgpIGNhbGxiYWNrOiBvcHRpbWl6ZSB0aGUgd2hvbGUgUk1QT1BUIHJhbmdlIG9uIHRoaXMgQ1BVLiAqL1xuK3N0YXRpYyB2b2lkIHJtcG9wdF9zY2FuX3JhbmdlKHZvaWQgKmFyZylcbit7XG4rXHR1NjQgcGE7XG4rXG4rXHRmb3IgKHBhID0gcm1wb3B0X3BhX3N0YXJ0OyBwYSBcdTAwM2Mgcm1wb3B0X3BhX2VuZDsgcGEgKz0gU1pfMUcpXG4rXHRcdHJtcG9wdChwYSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGRvX3JtcG9wdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHQvKlxuK1x0ICogUk1QT1BUIGNhY2hlcyB0aGUgcmVzdWx0cyBvZiBhIFJNUCB0YWJsZSBzY2FuIGluIHJlc2VydmVkIHByb2Nlc3NvclxuK1x0ICogbWVtb3J5LCBhbGxvd2luZyBmdXR1cmUgaW52b2NhdGlvbnMgdG8gc2tpcCBzdWNoIGNvc3RseSBvcGVyYXRpb25zLlxuK1x0ICovXG4rXHRtaWdyYXRlX2Rpc2FibGUoKTtcbitcdHJtcG9wdF9zY2FuX3JhbmdlKE5VTEwpO1xuK1x0bWlncmF0ZV9lbmFibGUoKTtcbitcbitcdG9uX2VhY2hfY3B1X21hc2soY3B1X3ByaW1hcnlfdGhyZWFkX21hc2ssIHJtcG9wdF9zY2FuX3JhbmdlLCBOVUxMLCB0cnVlKTtcbit9XG4rXG4rLypcbisgKiBEZWxheSwgaW4gbWlsbGlzZWNvbmRzLCBiZWZvcmUgdGhlIFJNUCByZS1vcHRpbWl6YXRpb24gcGFzcyBydW5zIGFmdGVyIGFuXG4rICogU05QIGd1ZXN0IGlzIHRvcm4gZG93bi4gIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKSByZS1hcm1zIHRoZSBkZWxheWVkIHdvcmtcbisgKiB3aXRoIG1vZF9kZWxheWVkX3dvcmsoKSBvbiBlYWNoIHRlYXJkb3duLCBzbyB0aGUgcGFzcyBmaXJlcyB0aGlzIGxvbmcgYWZ0ZXJcbisgKiB0aGUgbGFzdCB0ZWFyZG93bi4gIFRoaXMgY29hbGVzY2VzIGEgYnVyc3Qgb2YgdGVhcmRvd25zIGludG8gYSBzaW5nbGUgc2NhblxuKyAqIGFuZCBnaXZlcyBlYWNoIGd1ZXN0J3MgcGFnZXMgdGltZSB0byBiZSBjb252ZXJ0ZWQgYmFjayB0byB0aGUgc2hhcmVkLFxuKyAqIGh5cGVydmlzb3Itb3duZWQgc3RhdGUgYmVmb3JlIHRoZSBzY2FuIHJlLW9wdGltaXplcyB0aGVpciAxR0IgcmVnaW9ucy4gIFRoZVxuKyAqIDEwIHNlY29uZCB2YWx1ZSBpcyBhIGhldXJpc3RpYyB0cmFkaW5nIHJlLW9wdGltaXphdGlvbiBsYXRlbmN5IGFnYWluc3RcbisgKiBzY2FubmluZyB0b28gZWFnZXJseS5cbisgKi9cbisjZGVmaW5lIFJNUE9QVF9XT1JLX1RJTUVPVVRcdCgxMCAqIE1TRUNfUEVSX1NFQylcbitcbit2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZClcbit7XG4rXHRpZiAoIXJtcG9wdF9jYXBhYmxlKCkpXG4rXHRcdHJldHVybjtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZybXBvcHRfd3FfbXV0ZXgpO1xuK1xuK1x0aWYgKCFybXBvcHRfd3EpXG4rXHRcdHJldHVybjtcbitcbitcdG1vZF9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLFxuK1x0XHRcdCBtc2Vjc190b19qaWZmaWVzKFJNUE9QVF9XT1JLX1RJTUVPVVQpKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcm1wb3B0X2FsbF9waHlzbWVtLCBcImt2bS1hbWRcIik7XG4rXG4rdm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpXG4re1xuK1x0dTY0IHJtcG9wdF9iYXNlO1xuK1x0aW50IGNwdTtcbitcbitcdGlmICghcm1wb3B0X2NhcGFibGUoKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJtcG9wdF93cV9tdXRleCk7XG4rXG4rXHQvKlxuK1x0ICogT24gcmUtaW5pdGlhbGl6YXRpb24gYWZ0ZXIgYSBsZWdhY3kgU05QIHNodXRkb3duIChTTlBfU0hVVERPV05fRVhcbitcdCAqIHdpdGggeDg2X3NucF9zaHV0ZG93bj0wKSwgc25wX3NodXRkb3duKCkgYW5kIHRodXMgcm1wb3B0X2Rpc2FibGUoKSBhcmVcbitcdCAqIHNraXBwZWQsIHNvIHRoZSB3b3JrcXVldWUsIGRlbGF5ZWQgd29yayBhbmQgcGVyLUNQVSBSTVBPUFRfQkFTRSBNU1JzXG4rXHQgKiBhcmUgc3RpbGwgc2V0IHVwIGFuZCB2YWxpZCAoU25wRW4gc3RheWVkIHNldCBhbmQgQ1BVIGhvdHBsdWcgc3RheWVkXG4rXHQgKiBkaXNhYmxlZCkuICBSYXRoZXIgdGhhbiByZS1kb2luZyB0aGUgc2V0dXAsIHdoaWNoIHdvdWxkIGxlYWsgdGhlXG4rXHQgKiBleGlzdGluZyBzdGF0ZSwganVzdCByZS1xdWV1ZSB0aGUgb3B0aW1pemF0aW9uIHBhc3MgdG8gcmUtb3B0aW1pemUgYW55XG4rXHQgKiBtZW1vcnkgdGhlIHByZXZpb3VzIFNOUCBzZXNzaW9uIGRlLW9wdGltaXplZC5cbitcdCAqL1xuK1x0aWYgKHJtcG9wdF93cSkge1xuK1x0XHRxdWV1ZV9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLCAwKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIENyZWF0ZSBhbiBSTVBPUFQtc3BlY2lmaWMgd29ya3F1ZXVlIHRvIGF2b2lkIHNjaGVkdWxpbmdcbitcdCAqIFJNUE9QVCB3b3JraXRlbSBvbiB0aGUgZ2xvYmFsIHN5c3RlbSB3b3JrcXVldWUuXG4rXHQgKi9cbitcdHJtcG9wdF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcInJtcG9wdF93cVwiLCBXUV9VTkJPVU5ELCAxKTtcbitcdGlmICghcm1wb3B0X3dxKSB7XG4rXHRcdHByX2VycihcIkZhaWxlZCB0byBhbGxvY2F0ZSBSTVBPUFQgd29ya3F1ZXVlXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLCBkb19ybXBvcHRfd29yayk7XG4rXG4rXHRybXBvcHRfcGFfc3RhcnQgPSBBTElHTl9ET1dOKFBGTl9QSFlTKG1pbl9sb3dfcGZuKSwgU1pfMUcpO1xuK1x0cm1wb3B0X2Jhc2UgPSBybXBvcHRfcGFfc3RhcnQgfCBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRTtcbitcbitcdC8qXG4rXHQgKiBQZXItQ1BVIFJNUE9QVCB0YWJsZXMgY292ZXIgYXQgbW9zdCAyIFRCLiAgUHJvZ3JhbSBlYWNoIGNvcmUnc1xuK1x0ICogUk1QT1BUX0JBU0Ugd2l0aCB0aGUgc3RhcnQgb2YgUkFNIHRvIG9wdGltaXplIHVwIHRvIDIgVEIuXG4rXHQgKi9cbitcdGZvcl9lYWNoX2NwdShjcHUsIGNwdV9wcmltYXJ5X3RocmVhZF9tYXNrKVxuK1x0XHR3cm1zcnFfb25fY3B1KGNwdSwgTVNSX0FNRDY0X1JNUE9QVF9CQVNFLCBybXBvcHRfYmFzZSk7XG4rXG4rXHRybXBvcHRfcGFfZW5kID0gQUxJR04oUEZOX1BIWVMobWF4X3BmbiksIFNaXzFHKTtcbitcbitcdC8qIExpbWl0IG1lbW9yeSBzY2FubmluZyB0byAyVEIgb2YgUkFNICovXG4rXHRpZiAoKHJtcG9wdF9wYV9lbmQgLSBybXBvcHRfcGFfc3RhcnQpIFx1MDAzZSBTWl8yVCkge1xuK1x0XHRwcl9pbmZvKFwiUk1QT1BUIGNvdmVyYWdlIGxpbWl0ZWQgdG8gMlRCOyBtZW1vcnkgYWJvdmUgMHglbGx4IG5vdCBvcHRpbWl6ZWRcXG5cIixcbitcdFx0XHRybXBvcHRfcGFfc3RhcnQgKyBTWl8yVCk7XG4rXHRcdHJtcG9wdF9wYV9lbmQgPSBybXBvcHRfcGFfc3RhcnQgKyBTWl8yVDtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBPbmNlIGFsbCBwZXItQ1BVIFJNUE9QVCB0YWJsZXMgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQsIGVuYWJsZSBSTVBPUFRcbitcdCAqIG9wdGltaXphdGlvbnMgb24gYWxsIHBoeXNpY2FsIG1lbW9yeS5cbitcdCAqL1xuK1x0cXVldWVfZGVsYXllZF93b3JrKHJtcG9wdF93cSwgXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7XG4rXG4rXHRwcl9pbmZvKFwiUk1QT1BUIG9wdGltaXphdGlvbnMgZW5hYmxlZFxcblwiKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2V0dXBfcm1wb3B0LCBcImNjcFwiKTtcbitcbiAvKlxuICAqIERvIHRoZSBuZWNlc3NhcnkgcHJlcGFyYXRpb25zIHdoaWNoIGFyZSB2ZXJpZmllZCBieSB0aGUgZmlybXdhcmUgYXNcbiAgKiBkZXNjcmliZWQgaW4gdGhlIFNOUF9JTklUX0VYIGZpcm13YXJlIGNvbW1hbmQgZGVzY3JpcHRpb24gaW4gdGhlIFNOUFxuQEAgLTU3Nyw2ICs3NTgsOCBAQCBFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zaHV0ZG93biwgXCJjY3BcIik7XG4gICovXG4gaW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxuIHtcbitcdHU2NCB2YWw7XG4rXG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKSlcbiBcdFx0cmV0dXJuIC1FTk9TWVM7XG4gXG5AQCAtNTg2LDYgKzc2OSwxNSBAQCBpbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpXG4gXHRpZiAoIXNldHVwX3JtcHRhYmxlKCkpXG4gXHRcdHJldHVybiAtRU5PU1lTO1xuIFxuK1x0LypcbitcdCAqIE9uIGEga2V4ZWMgYm9vdCBTTlAgbWF5IGFscmVhZHkgYmUgZW5hYmxlZCAobGVnYWN5IGZpcm13YXJlIGxlYXZlc1xuK1x0ICogU25wRW4gc2V0IGFjcm9zcyBzaHV0ZG93biksIGluIHdoaWNoIGNhc2Ugc25wX3ByZXBhcmUoKSBiYWlscyB3aXRob3V0XG4rXHQgKiBkaXNhYmxpbmcgQ1BVIGhvdHBsdWcsIHNvIGRpc2FibGUgaXQgaGVyZS5cbitcdCAqL1xuK1x0cmRtc3JxKE1TUl9BTUQ2NF9TWVNDRkcsIHZhbCk7XG4rXHRpZiAodmFsIFx1MDAyNiBNU1JfQU1ENjRfU1lTQ0ZHX1NOUF9FTilcbitcdFx0Y3B1X2hvdHBsdWdfZGlzYWJsZSgpO1xuK1xuIFx0LypcbiBcdCAqIFNldHRpbmcgY3Jhc2hfa2V4ZWNfcG9zdF9ub3RpZmllcnMgdG8gJ3RydWUnIHRvIGVuc3VyZSB0aGF0IFNOUCBwYW5pY1xuIFx0ICogbm90aWZpZXIgaXMgaW52b2tlZCB0byBkbyBTTlAgSU9NTVUgc2h1dGRvd24gYmVmb3JlIGtkdW1wLlxuQEAgLTY4MywxMyArODc1LDIxIEBAIHN0YXRpYyBib29sIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKHZvaWQpXG4gXG4gYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKVxuIHtcbi1cdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFR01FTlRFRF9STVApKVxuK1x0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU0VHTUVOVEVEX1JNUCkpIHtcbiBcdFx0cmRtc3JxKE1TUl9BTUQ2NF9STVBfQ0ZHLCBybXBfY2ZnKTtcbiBcbi1cdGlmIChybXBfY2ZnIFx1MDAyNiBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEKVxuLVx0XHRyZXR1cm4gcHJvYmVfc2VnbWVudGVkX3JtcHRhYmxlX2luZm8oKTtcbi1cdGVsc2Vcbi1cdFx0cmV0dXJuIHByb2JlX2NvbnRpZ3VvdXNfcm1wdGFibGVfaW5mbygpO1xuK1x0XHRpZiAocm1wX2NmZyBcdTAwMjYgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRClcbitcdFx0XHRyZXR1cm4gcHJvYmVfc2VnbWVudGVkX3JtcHRhYmxlX2luZm8oKTtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBTZWdtZW50ZWQgUk1QIGlzIGVpdGhlciBub3Qgc3VwcG9ydGVkIG9uIHRoZSBwbGF0Zm9ybSBvciBpc1xuK1x0ICogZGlzYWJsZWQgYnkgdGhlIGZpcm13YXJlLiAgUk1QT1BUIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dFxuK1x0ICogc2VnbWVudGVkIFJNUC5cbitcdCAqL1xuK1x0c2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9STVBPUFQpO1xuK1xuK1x0cmV0dXJuIHByb2JlX2NvbnRpZ3VvdXNfcm1wdGFibGVfaW5mbygpO1xuIH1cbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMgYi9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jXG5pbmRleCBmODMzY2I3ZTRkYTM2Li4yODdhODM0NTg1NGJhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY1xuKysrIGIvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY1xuQEAgLTE2NjMsNiArMTY2Myw4IEBAIHN0YXRpYyBpbnQgX19zZXZfc25wX2luaXRfbG9ja2VkKGludCAqZXJyb3IsIHVuc2lnbmVkIGludCBtYXhfc25wX2FzaWQpXG4gXG4gXHRzZXZfZXNfdG1yX3NpemUgPSBTTlBfVE1SX1NJWkU7XG4gXG4rXHRzbnBfc2V0dXBfcm1wb3B0KCk7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMTo1Mzo1MC40Mjk1NDM3MjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4ODcyNTQ1NjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0VWLVNOUCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpczogaXMgdGhpcyBwYXRjaCBmdXp6LXdvcnRoeSwgYW5kIGlmIHNvLCBob3cgZG8gd2UgYmVzdCBhcHByb2FjaCBpdD8gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGNoYW5nZWQuIExvb2tzIGxpa2Ugd2UndmUgZ290IHNvbWUgbmV3IGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gYFJNUE9QVGAgKFJlc3RyaWN0ZWQgTWVtb3J5IFByb3RlY3Rpb24gT3B0aW9uYWwpIGluIHRoZSBgeDg2YCBhcmNoaXRlY3R1cmUsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIEFNRCBTRVYtU05QIChTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIC0gU2VjdXJlIE5lc3RlZCBQYWdpbmcpLlxuXG5JIHNlZSBoZWFkZXIgZmlsZXMgZGVmaW5pbmcgYFg4Nl9GRUFUVVJFX1JNUE9QVGAsIE1TUnMgbGlrZSBgTVNSX0FNRDY0X1JNUE9QVF9CQVNFYCwgYW5kIHNvbWUgc3VwcG9ydGluZyBmdW5jdGlvbnMgbGlrZSBgc25wX3JtcG9wdF9hbGxfcGh5c21lbWAgYW5kIGBzbnBfc2V0dXBfcm1wb3B0YC4gVGhlIGNoYW5nZXMgYXJlIHNwcmVhZCBhY3Jvc3MgdmFyaW91cyBwYXJ0cyBvZiB0aGUga2VybmVsLiBXZSdyZSB0b3VjaGluZyBgY3B1ZmVhdHVyZXMuaGAsIGBtc3ItaW5kZXguaGAsIGBzZXYuaGAsIHRoZSBgc2NhdHRlcmVkLmNgIGZpbGUgKHdoaWNoIG5vdyBpbmNsdWRlcyB0aGUgYFg4Nl9GRUFUVVJFX1JNUE9QVGApLCBhbmQgdGhlbiBib3RoIHRoZSBLVk0gYW5kIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uIFNWTSBjb2RlLiBJdCBzZWVtcyBsaWtlIHRoZSBLVk0gY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBlbmFibGluZyBhbmQgZGlzYWJsaW5nIGBSTVBPUFRgLCBhbmQgdGhlIFNFVi1TTlAgaG9zdCBzZXR1cC4gVGhlIGNyeXB0byBkcml2ZXIgYWxzbyBnZXRzIGludm9sdmVkLCBjYWxsaW5nIGBzbnBfc2V0dXBfcm1wb3B0KClgIHdpdGhpbiBgc2V2X3NucF9pbml0X2xvY2tlZCgpYC5cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGNhbiB3ZSBldmVuICpmdXp6KiB0aGlzIGluIGEgdHlwaWNhbCBlbnZpcm9ubWVudD8gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgU0VWLVNOUCdzIHJlbGlhbmNlIG9uIHNwZWNpZmljIEFNRCBoYXJkd2FyZSBhbmQgcG90ZW50aWFsbHkgYSBzcGVjaWZpYyBDQ1AgKENyeXB0b2dyYXBoaWMgQ29wcm9jZXNzb3IpIG9yIGZpcm13YXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgcmVhbGlzdGljYWxseSByZWFjaGFibGUgaW4gYSBRRU1VIHNldHVwLCBvciBHQ0UgZm9yIHRoYXQgbWF0dGVyLCBvciBpZiB3ZSdyZSBnb2luZyB0byBuZWVkIHNvbWUgY3VzdG9tIGVudmlyb25tZW50IHRvIHRyaWdnZXIgdGhlIG5ldyBjb2RlIHBhdGhzLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB3ZSBjYW4gcnVuIHRoZSBBTUQgU0VWLVNOUCBob3N0IGluIHN0YW5kYXJkIFFFTVUvbmVzdGVkIHZpcnR1YWxpemF0aW9uLCBvciBpZiBpdCByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZS9maXJtd2FyZSwgbGV0J3MgdmVyaWZ5IGhvdyBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAgd29ya3MsIG9yIHdoYXQgdGhlIEtjb25maWcgc2V0dGluZ3MgYXJlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcsIHByb2JhYmx5IHVzZSBncmVwLCBvciBqdXN0IHJlYWQgdGhlIGNvZGUgdG8gc2VlIGhvdyBTRVYtU05QIGlzIGNvbmZpZ3VyZWQsIGFuZCBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IHdlIG5lZWQgdG8gYWNjb3VudCBmb3IuIElmIGl0J3MgYSBoYXJkd2FyZS1nYXRlZCBmZWF0dXJlLCB0aGF0J3MgYSB3aG9sZSBkaWZmZXJlbnQgYmFsbGdhbWUgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNjMsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMTo1Mzo1OS4zMDIwOTIxMjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4NDkwNDUxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDQ19BVFRSX0hPU1RfU0VWX1NOUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9jb2NvL2NvcmUuYz03MD1zdGF0aWMgYm9vbCBub2luc3RyIGFtZF9jY19wbGF0Zm9ybV9oYXMoZW51bSBjY19hdHRyIGF0dHIpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xMDMtXFxuYXJjaC94ODYvY29jby9jb3JlLmM6MTA0OlxcdGNhc2UgQ0NfQVRUUl9IT1NUX1NFVl9TTlA6XFxuYXJjaC94ODYvY29jby9jb3JlLmMtMTA1LVxcdFxcdHJldHVybiBjY19mbGFncy5ob3N0X3Nldl9zbnA7XFxuLS1cXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYz0xNzA9c3RhdGljIHZvaWQgYW1kX2NjX3BsYXRmb3JtX2NsZWFyKGVudW0gY2NfYXR0ciBhdHRyKVxcbi0tXFxuYXJjaC94ODYvY29jby9jb3JlLmMtMTcyLVxcdHN3aXRjaCAoYXR0cikge1xcbmFyY2gveDg2L2NvY28vY29yZS5jOjE3MzpcXHRjYXNlIENDX0FUVFJfSE9TVF9TRVZfU05QOlxcbmFyY2gveDg2L2NvY28vY29yZS5jLTE3NC1cXHRcXHRjY19mbGFncy5ob3N0X3Nldl9zbnAgPSAwO1xcbi0tXFxuYXJjaC94ODYvY29jby9jb3JlLmM9MTkyPXN0YXRpYyB2b2lkIGFtZF9jY19wbGF0Zm9ybV9zZXQoZW51bSBjY19hdHRyIGF0dHIpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xOTQtXFx0c3dpdGNoIChhdHRyKSB7XFxuYXJjaC94ODYvY29jby9jb3JlLmM6MTk1OlxcdGNhc2UgQ0NfQVRUUl9IT1NUX1NFVl9TTlA6XFxuYXJjaC94ODYvY29jby9jb3JlLmMtMTk2LVxcdFxcdGNjX2ZsYWdzLmhvc3Rfc2V2X3NucCA9IDE7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jPTM1Nj1zdGF0aWMgdm9pZCBic3BfZGV0ZXJtaW5lX3NucChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3My1cXHRcXHQgICAgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKSkge1xcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM6Mzc0OlxcdFxcdFxcdGNjX3BsYXRmb3JtX3NldChDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYy0zNzUtXFx0XFx0fSBlbHNlIHtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3Ni1cXHRcXHRcXHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1NFVl9TTlApO1xcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM6Mzc3OlxcdFxcdFxcdGNjX3BsYXRmb3JtX2NsZWFyKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3OC1cXHRcXHR9XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jPTEwND1zdGF0aWMgaW5saW5lIHZvaWQgazhfY2hlY2tfc3lzY2ZnX2RyYW1fbW9kX2VuKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jLTExMS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jOjExMjpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jLTExMy1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0xMjU3PXN0YXRpYyBib29sIF9faW5pdCBhdmljX3dhbnRfYXZpY19lbmFibGVkKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMjgwLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEyODE6XFx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMjgyLVxcdCAgICAhYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0hWX0lOVVNFX1dSX0FMTE9XRUQpKSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEyNTk9c3RhdGljIHZvaWQgKnNldl9kYmdfY3J5cHRfc2xvd19hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBfX3ZhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMjkzLVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTI5NDpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEyOTUtXFx0XFx0cmV0dXJuICh2b2lkICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xMzAwPXN0YXRpYyB2b2lkIHNldl9kYmdfY3J5cHRfc2xvd19mcmVlKHZvaWQgKmJ1ZilcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMDEte1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTMwMjpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMDMtXFx0XFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1Zik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTMwOTY9dm9pZCBfX2luaXQgc2V2X2hhcmR3YXJlX3NldHVwKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMDAtXFx0c2V2X2VzX3N1cHBvcnRlZCA9IHRydWU7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjAxOlxcdHNldl9zbnBfc3VwcG9ydGVkID0gc2V2X3NucF9lbmFibGVkIFxcdTAwMjZcXHUwMDI2IGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjAyLVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00OTk1PXN0cnVjdCBwYWdlICpzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUoaW50IG5vZGUsIGdmcF90IGdmcClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDk5OS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUwMDA6XFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTAwMS1cXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAgfCBfX0dGUF9aRVJPLCAwKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NTIxMz12b2lkIHNldl9nbWVtX21ha2Vfc2hhcmVkKGt2bV9wZm5fdCBwZm4sIGt2bV9wZm5fdCBucl9wYWdlcylcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTIxNi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUyMTc6XFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTIxOC1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdC5jPTEwMj12b2lkIF9faW5pdCBtZW1fZW5jcnlwdF9zZXR1cF9hcmNoKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdC5jLTExMC1cXHQgKi9cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdC5jOjExMTpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdC5jLTExMi1cXHRcXHRzbnBfZml4dXBfZTgyMF90YWJsZXMoKTtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL2NtZGxpbmUuYz0xOT1zdGF0aWMgaW50IF9faW5pdCBpbml0X3Nldl9jb25maWcoY2hhciAqc3RyKVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vY21kbGluZS5jLTMxLVxcdFxcdFxcdFxcdHNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfU0VWX1NOUCk7XFxuYXJjaC94ODYvdmlydC9zdm0vY21kbGluZS5jOjMyOlxcdFxcdFxcdFxcdGNjX3BsYXRmb3JtX2NsZWFyKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG5hcmNoL3g4Ni92aXJ0L3N2bS9jbWRsaW5lLmMtMzMtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xNDc9c3RhdGljIHZvaWQgbWZkX3JlY29uZmlndXJlKHZvaWQgKmFyZylcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xNDgte1xcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjE0OTpcXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTUwLVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTE1OD1zdGF0aWMgdm9pZCBzbnBfZW5hYmxlKHZvaWQgKmFyZylcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTE2MS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxNjI6XFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTE2My1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0yNjA9c3RhdGljIHZvaWQgY2xlYXJfcm1wKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0yNjQtXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MjY1OlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0yNjYtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9NjE4PXN0YXRpYyBib29sIHJtcG9wdF9jYXBhYmxlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy02MjAtXFx0cmV0dXJuIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QT1BUKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjYyMTpcXHQgICAgICAgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy02MjItfVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9NzU5PWludCBfX2luaXQgc25wX3JtcHRhYmxlX2luaXQodm9pZClcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTc2Mi1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo3NjM6XFx0aWYgKFdBUk5fT05fT05DRSghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSkpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNzY0LVxcdFxcdHJldHVybiAtRU5PU1lTO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9OTY4PXN0YXRpYyBpbnQgX19zbnBfbG9va3VwX3JtcGVudHJ5KHU2NCBwZm4sIHN0cnVjdCBybXBlbnRyeSAqZSwgaW50ICpsZXZlbClcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTk3Mi1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo5NzM6XFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTk3NC1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTEwOTQ9aW50IHBzbWFzaCh1NjQgcGZuKVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTA5OC1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxMDk5OlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMTAwLVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MTIwMz1zdGF0aWMgaW50IHJtcHVwZGF0ZSh1NjQgcGZuLCBzdHJ1Y3Qgcm1wX3N0YXRlICpzdGF0ZSlcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTEyMDctXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MTIwODpcXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTIwOS1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTEyOTY9dm9pZCBrZHVtcF9zZXZfY2FsbGJhY2sodm9pZClcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTEzMDEtXFx0ICovXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MTMwMjpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMzAzLVxcdFxcdHdiaW52ZCgpO1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0xNTA4PXN0YXRpYyBpbnQgX19zZXZfc25wX2luaXRfbG9ja2VkKGludCAqZXJyb3IsIHVuc2lnbmVkIGludCBtYXhfc25wX2FzaWQpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTE1MTYtXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoxNTE3OlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTE1MTgtXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTIwNjc9c3RhdGljIGludCBzZXZfZ2V0X2FwaV92ZXJzaW9uKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIwNzYtXFx0ICovXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoyMDc3OlxcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKSB7XFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMDc4LVxcdFxcdHJldCA9IHNucF9nZXRfcGxhdGZvcm1fZGF0YShzZXYsIFxcdTAwMjZlcnJvcik7XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTI5Nzc9dTY0IHNldl9nZXRfc25wX3BvbGljeV9iaXRzKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTI5ODItXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoyOTgzOlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTI5ODQtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9MzM5NT1zdGF0aWMgX19pbml0IHZvaWQgaW9tbXVfc25wX2VuYWJsZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMzOTctI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozMzk4OlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzM5OS1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzQ0MS1kaXNhYmxlX3NucDpcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzQ0MjpcXHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM0NDMtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9MzU2Nz1zdGF0aWMgaW50IF9faW5pdCBpb21tdV9nb190b19zdGF0ZShlbnVtIGlvbW11X2luaXRfc3RhdGUgc3RhdGUpXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzU4Ny1cXHQgKi9cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzU4ODpcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzU4OS1cXHQgICAgIVdBUk5fT05fT05DRShhbWRfaW9tbXVfc25wX2VuKSlcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzU5MDpcXHRcXHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM1OTEtXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9MzY5ND12b2lkIF9faW5pdCBhbWRfaW9tbXVfZGV0ZWN0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzcxMy1kaXNhYmxlX3NucDpcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzcxNDpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzcxNTpcXHRcXHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM3MTYtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oPTIyPWVudW0gY2NfYXR0ciB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmgtOTItXFx0LyoqXFxuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oOjkzOlxcdCAqIEBDQ19BVFRSX0hPU1RfU0VWX1NOUDogQU1EIFNOUCBlbmFibGVkIG9uIHRoZSBob3N0LlxcbmluY2x1ZGUvbGludXgvY2NfcGxhdGZvcm0uaC05NC1cXHQgKlxcbi0tXFxuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oLTk3LVxcdCAqL1xcbmluY2x1ZGUvbGludXgvY2NfcGxhdGZvcm0uaDo5ODpcXHRDQ19BVFRSX0hPU1RfU0VWX1NOUCxcXG5pbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmgtOTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIxOjU0OjAxLjY4NzAwMjEzNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNzAwNTQ4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgRW5hYmxpbmcgQ29uZGl0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcHJlY2lzZWx5IGFsbG93cyB0aGUgc3lzdGVtIHRvIHV0aWxpemUgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBhbmQgYFg4Nl9GRUFUVVJFX1JNUE9QVGAuIE15IGludHVpdGlvbiBzYXlzIGl0IHdpbGwgYmUgYmFzZWQgb24gQ1BVIGZsYWdzIG9yIHNvbWUgb3RoZXIgcGxhdGZvcm0gZmVhdHVyZS4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMsIEknbGwgZGl2ZSBpbnRvIHRoZSBgYXJjaC94ODYva2VybmVsL2NwdS9hbWQuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ2xsIHN0YXJ0IGFyb3VuZCBsaW5lIDM1NiwgYXMgdGhhdCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBwbGFjZSBmb3IgQU1ELXNwZWNpZmljIENQVSBmZWF0dXJlIGluaXRpYWxpemF0aW9uIG9yIGRldGVjdGlvbiBsb2dpYywgd2hlcmUgdGhlIGVuYWJsaW5nIGNvbmRpdGlvbnMgZm9yIHRoZXNlIGZlYXR1cmVzIHdvdWxkIGxpa2VseSBiZSBkZWZpbmVkLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUwNywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIxOjU0OjAzLjk1NzA2MDc3OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Mzk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM1MDpcXHRcXHRcXHRcXHRub2RlID0gbmVhcmJ5X25vZGUoYXBpY2lkKTtcXG4gMzUxOlxcdFxcdH1cXG4gMzUyOlxcdFxcdG51bWFfc2V0X25vZGUoY3B1LCBub2RlKTtcXG4gMzUzOlxcdCNlbmRpZlxcbiAzNTQ6XFx0fVxcbiAzNTU6XFx0XFxuIDM1NjpcXHRzdGF0aWMgdm9pZCBic3BfZGV0ZXJtaW5lX3NucChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXFxuIDM1NzpcXHR7XFxuIDM1ODpcXHQjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX0NDX1BMQVRGT1JNXFxuIDM1OTpcXHRcXHRjY192ZW5kb3IgPSBDQ19WRU5ET1JfQU1EO1xcbiAzNjA6XFx0XFxuIDM2MTpcXHRcXHRpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9TRVZfU05QKSkge1xcbiAzNjI6XFx0XFx0XFx0LypcXG4gMzYzOlxcdFxcdFxcdCAqIFJNUCB0YWJsZSBlbnRyeSBmb3JtYXQgaXMgbm90IGFyY2hpdGVjdHVyYWwgYW5kIGlzIGRlZmluZWQgYnkgdGhlXFxuIDM2NDpcXHRcXHRcXHQgKiBwZXItcHJvY2Vzc29yIFBQUi4gUmVzdHJpY3QgU05QIHN1cHBvcnQgb24gdGhlIGtub3duIENQVSBtb2RlbHNcXG4gMzY1OlxcdFxcdFxcdCAqIGZvciB3aGljaCB0aGUgUk1QIHRhYmxlIGVudHJ5IGZvcm1hdCBpcyBjdXJyZW50bHkgZGVmaW5lZCBvciBmb3JcXG4gMzY2OlxcdFxcdFxcdCAqIHByb2Nlc3NvcnMgd2hpY2ggc3VwcG9ydCB0aGUgYXJjaGl0ZWN0dXJhbGx5IGRlZmluZWQgUk1QUkVBRFxcbiAzNjc6XFx0XFx0XFx0ICogaW5zdHJ1Y3Rpb24uXFxuIDM2ODpcXHRcXHRcXHQgKi9cXG4gMzY5OlxcdFxcdFxcdGlmICghY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9IWVBFUlZJU09SKSBcXHUwMDI2XFx1MDAyNlxcbiAzNzA6XFx0XFx0XFx0ICAgIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1pFTjMpIHx8XFxuIDM3MTpcXHRcXHRcXHQgICAgIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfWkVONCkgfHxcXG4gMzcyOlxcdFxcdFxcdCAgICAgY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9STVBSRUFEKSkgXFx1MDAyNlxcdTAwMjZcXG4gMzczOlxcdFxcdFxcdCAgICBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpKSB7XFxuIDM3NDpcXHRcXHRcXHRcXHRjY19wbGF0Zm9ybV9zZXQoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xcbiAzNzU6XFx0XFx0XFx0fSBlbHNlIHtcXG4gMzc2OlxcdFxcdFxcdFxcdHNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfU0VWX1NOUCk7XFxuIDM3NzpcXHRcXHRcXHRcXHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuIDM3ODpcXHRcXHRcXHR9XFxuIDM3OTpcXHRcXHR9XFxuIDM4MDpcXHQjZW5kaWZcXG4gMzgxOlxcdH1cXG4gMzgyOlxcdFxcbiAzODM6XFx0I2RlZmluZSBaRU5fTU9ERUxfU1RFUF9VQ09ERShmYW0sIG1vZGVsLCBzdGVwLCB1Y29kZSkgXFxcXFxcbiAzODQ6XFx0XFx0WDg2X01BVENIX1ZGTV9TVEVQUyhWRk1fTUFLRShYODZfVkVORE9SX0FNRCwgZmFtLCBtb2RlbCksIFxcXFxcXG4gMzg1OlxcdFxcdFxcdFxcdCAgICBzdGVwLCBzdGVwLCB1Y29kZSlcXG4gMzg2OlxcdFxcbiAzODc6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfY3B1X2lkIGFtZF90c2FfbWljcm9jb2RlW10gPSB7XFxuIDM4ODpcXHRcXHRaRU5fTU9ERUxfU1RFUF9VQ09ERSgweDE5LCAweDAxLCAweDEsIDB4MGEwMDExZDcpLFxcbiAzODk6XFx0XFx0WkVOX01PREVMX1NURVBfVUNPREUoMHgxOSwgMHgwMSwgMHgyLCAweDBhMDAxMjNiKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjE6NTQ6MDMuOTU3MjA3NjE5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTUyMDg4MzgwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBTRVYtU05QIGFuZCBSTVBPUFQgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIExpbmUgMzY5IGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgZXllOiBgaWYgKCFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IpIFx1MDAyNlx1MDAyNiAuLi5gLiAgVGhlIGNoZWNrIGZvciB0aGUgYWJzZW5jZSBvZiB0aGUgaHlwZXJ2aXNvciBmZWF0dXJlIGlzIGludGVyZXN0aW5nLiBJIGtub3cgdGhhdCBgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUmAgaXMgc2V0IHdpdGhpbiBhIGh5cGVydmlzb3IgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRSAoQ1BVSUQgbGVhZiAweDEgRUNYIGJpdCAzMSkuIFNvLCBiZWNhdXNlIG9mIHRoaXMsIGBic3BfZGV0ZXJtaW5lX3NucGAgaXMgY29ycmVjdGx5IGNsZWFyaW5nIGBYODZfRkVBVFVSRV9TRVZfU05QYCBhbmQgdGhlbiBjYWxsaW5nIGBjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUClgIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLlxuXG5NeSBuZXh0IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhlIG9idmlvdXMg4oCTIGRvZXMgUUVNVSBldmVuICplbXVsYXRlKiBhIFNFVi1TTlAgaG9zdD8gSSBrbm93IGl0IGRvZXNuJ3QuIFNFVi1TTlAgbmVlZHMgYmFyZSBtZXRhbCBBTUQgaGFyZHdhcmUgd2l0aCBzcGVjaWZpYyBjb21wb25lbnRzIGFuZCBCSU9TL01TUiBzZXR0aW5ncy4gTm8gc3VycHJpc2VzIHRoZXJlLlxuXG5BbHJpZ2h0LCBtb3Zpbmcgb24sIEkgc2VlIGEgbmV3IGluc3RydWN0aW9uIGluIHRoZSBjb2RlOiBgYXNtIHZvbGF0aWxlKFwiLmJ5dGUgMHhmMiwgMHgwZiwgMHgwMSwgMHhmY1wiIDo6IFwiYVwiIChwYV9zdGFydCksIFwiY1wiIChvcCkgOiBcIm1lbW9yeVwiLCBcImNjXCIpO2AuIFRoaXMgaXMgYFJNUE9QVGAsIHdoaWNoIEkga25vdyBpcyBhbiBBTUQgWmVuNiBpbnN0cnVjdGlvbiAoQ1BVSUQgRm44MDAwXzAwMjVfRURYWzBdKS5cblxuSSBoYXZlIHRvIGxvb2sgYXQgYHJtcG9wdF9jYXBhYmxlKClgLiBJIHNlZSB0aGUgY2hlY2ssIGFuZCBpdCdzIHdoYXQgSSdkIGV4cGVjdDpcblxuYGBgY1xuc3RhdGljIGJvb2wgcm1wb3B0X2NhcGFibGUodm9pZClcbntcblx0cmV0dXJuIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QT1BUKSBcdTAwMjZcdTAwMjZcblx0ICAgICAgIGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XG59XG5gYGBcblxuVGhlbiBJIG5vdGljZTpcblxuYGBgY1xudm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpXG57XG5cdGlmICghcm1wb3B0X2NhcGFibGUoKSlcblx0XHRyZXR1cm47XG4uLi5cbmBgYFxuXG5gYGBjXG52b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZClcbntcbi4uLlxuXHRpZiAoIXJtcG9wdF9jYXBhYmxlKCkpXG5cdFx0cmV0dXJuO1xuLi4uXG5gYGBcblxuTWFrZXMgc2Vuc2UuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZ3VhcmRlZCBieSBgcm1wb3B0X2NhcGFibGUoKWAgYW5kIHNvIHdpbGwgbm90IGJlIGludm9rZWQgd2hlbiBydW5uaW5nIGluIGEgaHlwZXJ2aXNvci5cblxuTm93LCBsZXQncyBzaGlmdCBnZWFycy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0LiBJIG5lZWQgdG8gY2hlY2sgYHNucF9wcmVwYXJlKClgLCBgc25wX3NodXRkb3duKClgLCBhbmQgYHNucF9ybXB0YWJsZV9pbml0KClgLlxuXG5JIHNlZSBpbiBgc25wX3ByZXBhcmUoKWA6XG5cbmBgYGNcbmludCBzbnBfcHJlcGFyZSh2b2lkKVxue1xuLi4uXG5cdGNsZWFyX3JtcCgpO1xuXHRjcHVfaG90cGx1Z19kaXNhYmxlKCk7XG4uLi5cbmBgYFxuXG5JJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gc2VlIHdoZXJlIGBzbnBfcHJlcGFyZSgpYCBpcyBhY3R1YWxseSAqY2FsbGVkKiBmcm9tIGluIHRoZSBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgdG8gc2VlIGhvdyBhbGwgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0OTUsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMTo1NDowOS40NzgwOTQ2NTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczMjg2MjI2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbnBfcHJlcGFyZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02NjA9c3RhdGljIGlubGluZSB2b2lkIHNucF9sZWFrX3BhZ2VzKHU2NCBwZm4sIHVuc2lnbmVkIGludCBwYWdlcylcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY2My19XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjY0OmludCBzbnBfcHJlcGFyZSh2b2lkKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaC02NjUtdm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg9NjgzPXN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfZml4dXBfZTgyMF90YWJsZXModm9pZCkge31cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaDo2ODQ6c3RhdGljIGlubGluZSBpbnQgc25wX3ByZXBhcmUodm9pZCkgeyByZXR1cm4gLUVOT0RFVjsgfVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY4NS1zdGF0aWMgaW5saW5lIHZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKSB7fVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9NTIxPXN0YXRpYyB2b2lkIGNsZWFyX2hzYXZlX3BhKHZvaWQgKmFyZylcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTUyNS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo1MjY6aW50IHNucF9wcmVwYXJlKHZvaWQpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNTI3LXtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTU2Ny19XFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6NTY4OkVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3ByZXBhcmUsIFxcXCJjY3BcXFwiKTtcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy01NjktXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz03NTk9aW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNzczLVxcdCAqIE9uIGEga2V4ZWMgYm9vdCBTTlAgbWF5IGFscmVhZHkgYmUgZW5hYmxlZCAobGVnYWN5IGZpcm13YXJlIGxlYXZlc1xcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjc3NDpcXHQgKiBTbnBFbiBzZXQgYWNyb3NzIHNodXRkb3duKSwgaW4gd2hpY2ggY2FzZSBzbnBfcHJlcGFyZSgpIGJhaWxzIHdpdGhvdXRcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy03NzUtXFx0ICogZGlzYWJsaW5nIENQVSBob3RwbHVnLCBzbyBkaXNhYmxlIGl0IGhlcmUuXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTE1MDg9c3RhdGljIGludCBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoaW50ICplcnJvciwgdW5zaWduZWQgaW50IG1heF9zbnBfYXNpZClcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMTUzMC1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjE1MzE6XFx0cmMgPSBzbnBfcHJlcGFyZSgpO1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMTUzMi1cXHRpZiAocmMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIxOjU0OjExLjIxMDk2MzY2M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxODc4NjAyMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTRVYtU05QIERyaXZlcioqXG5cbk9rYXksIHNvIGBzbnBfcHJlcGFyZSgpYCBpcyBhcHBhcmVudGx5IG9ubHkgY2FsbGVkIHdpdGhpbiBgZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY2AsIHNwZWNpZmljYWxseSBpbiBgX19zZXZfc25wX2luaXRfbG9ja2VkKClgLiBUaGF0J3MgZ29vZCwgaXQgbmFycm93cyBkb3duIHdoZXJlIEkgbmVlZCB0byBmb2N1cy4gTm93LCBsZXQncyBzZWUsIGl0IGxvb2tzIGxpa2UgaXQgZG9lcyBzb21lIHF1aWNrIGNoZWNrcyBhdCB0aGUgYmVnaW5uaW5nOlxuXG5gYGBjXG5cdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcblx0XHRyZXR1cm4gLUVOT0RFVjtcbmBgYFxuXG5UaGlzIG1ha2VzIHN1cmUgdGhlIGhvc3QgYWN0dWFsbHkgc3VwcG9ydHMgU0VWLVNOUCBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4gU3RhbmRhcmQgc3R1ZmYuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIHRoaW5nIGJldHRlci4gSSd2ZSBnb3QgdG8gZmluZCBvdXQgd2hlcmUgYHNucF9zaHV0ZG93bigpYCBpcyBjYWxsZWQgZnJvbSwgc2luY2UgaXQncyBsb2dpY2FsIHRoYXQgdGhlcmUgc2hvdWxkIGJlIGEgY29ycmVzcG9uZGluZyBzaHV0ZG93biBmdW5jdGlvbi4gTGV0J3MgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDMyLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjE6NTQ6MTUuMzk4ODI2ODAyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM4MTg0MTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNucF9zaHV0ZG93blwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02NjY9dm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjY2Nzp2b2lkIHNucF9zaHV0ZG93bih2b2lkKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaC02NjgtI2Vsc2VcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oPTY4Nj1zdGF0aWMgaW5saW5lIHZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKSB7fVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjY4NzpzdGF0aWMgaW5saW5lIHZvaWQgc25wX3NodXRkb3duKHZvaWQpIHt9XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjg4LSNlbmRpZlxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9NTI2PWludCBzbnBfcHJlcGFyZSh2b2lkKVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNTQxLVxcdCAqIE5vIENQVSBtYXkgY29tZSBvbmxpbmUgd2l0aG91dCBTbnBFbiB3aGlsZSBTTlAgaXMgYWN0aXZlOyBkaXNhYmxlXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6NTQyOlxcdCAqIGhvdHBsdWcgaGVyZSBhbmQgcmUtZW5hYmxlIGl0IGluIHNucF9zaHV0ZG93bigpLlxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTU0My1cXHQgKi9cXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTU3MD1zdGF0aWMgdm9pZCBybXBvcHRfZGlzYWJsZSh2b2lkKVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNTk1LVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjU5Njp2b2lkIHNucF9zaHV0ZG93bih2b2lkKVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTU5Ny17XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy02MTUtfVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjYxNjpFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zaHV0ZG93biwgXFxcImNjcFxcXCIpO1xcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTYxNy1cXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTY4OT12b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZClcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTcwMC1cXHQgKiBPbiByZS1pbml0aWFsaXphdGlvbiBhZnRlciBhIGxlZ2FjeSBTTlAgc2h1dGRvd24gKFNOUF9TSFVURE9XTl9FWFxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjcwMTpcXHQgKiB3aXRoIHg4Nl9zbnBfc2h1dGRvd249MCksIHNucF9zaHV0ZG93bigpIGFuZCB0aHVzIHJtcG9wdF9kaXNhYmxlKCkgYXJlXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNzAyLVxcdCAqIHNraXBwZWQsIHNvIHRoZSB3b3JrcXVldWUsIGRlbGF5ZWQgd29yayBhbmQgcGVyLUNQVSBSTVBPUFRfQkFTRSBNU1JzXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTEzMD1zdGF0aWMgdm9pZCBfX3Nldl9maXJtd2FyZV9zaHV0ZG93bihzdHJ1Y3Qgc2V2X2RldmljZSAqc2V2LCBib29sIHBhbmljKTtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTEzMS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjEzMjpzdGF0aWMgaW50IHNucF9zaHV0ZG93bl9vbl9wYW5pYyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMTMzLVxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIHJlYXNvbiwgdm9pZCAqYXJnKTtcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MTM1PXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgc25wX3BhbmljX25vdGlmaWVyID0ge1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MTM2OlxcdC5ub3RpZmllcl9jYWxsID0gc25wX3NodXRkb3duX29uX3BhbmljLFxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMTM3LX07XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTIwMz1zdGF0aWMgaW50IHNldl9jbWRfYnVmZmVyX2xlbihpbnQgY21kKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMDctXFx0Y2FzZSBTRVZfQ01EX0lOSVRfRVg6ICAgICAgICAgICAgICAgICAgIHJldHVybiBzaXplb2Yoc3RydWN0IHNldl9kYXRhX2luaXRfZXgpO1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MjA4OlxcdGNhc2UgU0VWX0NNRF9TTlBfU0hVVERPV05fRVg6XFx0XFx0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2V2X2RhdGFfc25wX3NodXRkb3duX2V4KTtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIwOS1cXHRjYXNlIFNFVl9DTURfU05QX0lOSVRfRVg6XFx0XFx0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2V2X2RhdGFfc25wX2luaXRfZXgpO1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0yMTM2PXN0YXRpYyBpbnQgc2V2X3VwZGF0ZV9maXJtd2FyZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIxOTAtXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoyMTkxOnN0YXRpYyBpbnQgX19zZXZfc25wX3NodXRkb3duX2xvY2tlZChpbnQgKmVycm9yLCBib29sIHBhbmljKVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjE5Mi17XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIxOTQtXFx0c3RydWN0IHNldl9kZXZpY2UgKnNldjtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjIxOTU6XFx0c3RydWN0IHNldl9kYXRhX3NucF9zaHV0ZG93bl9leCBkYXRhO1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjE5Ni1cXHRpbnQgcmV0O1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMjA3LVxcdGRhdGEubGVuID0gc2l6ZW9mKGRhdGEpO1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MjIwODpcXHRkYXRhLmlvbW11X3NucF9zaHV0ZG93biA9IDE7XFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMjA5LVxcdGlmIChzZXYtXFx1MDAzZXNucF9mZWF0X2luZm9fMC5lY3ggXFx1MDAyNiBTTlBfWDg2X1NIVVRET1dOX1NVUFBPUlRFRClcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjIyMTA6XFx0XFx0ZGF0YS54ODZfc25wX3NodXRkb3duID0gMTtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIyMTEtXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIyNDMtXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoyMjQ0OlxcdGlmIChkYXRhLng4Nl9zbnBfc2h1dGRvd24pIHtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIyNDUtXFx0XFx0aWYgKCFwYW5pYylcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjIyNDY6XFx0XFx0XFx0c25wX3NodXRkb3duKCk7XFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMjQ3LVxcdFxcdHNucF9odl9maXhlZF9wYWdlc19zdGF0ZV91cGRhdGUoc2V2LCBBTExPQ0FURUQpO1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMjczLVxcdC8qXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoyMjc0OlxcdCAqIF9fc2V2X3NucF9zaHV0ZG93bl9sb2NrZWQoKSBkZWFkbG9ja3Mgd2hlbiBpdCB0cmllcyB0byB1bnJlZ2lzdGVyXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMjc1LVxcdCAqIGl0c2VsZiBkdXJpbmcgcGFuaWMgYXMgdGhlIHBhbmljIG5vdGlmaWVyIGlzIGNhbGxlZCB3aXRoIFJDVSByZWFkXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTI5MDU9c3RhdGljIHZvaWQgX19zZXZfZmlybXdhcmVfc2h1dGRvd24oc3RydWN0IHNldl9kZXZpY2UgKnNldiwgYm9vbCBwYW5pYylcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjkzNi1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjI5Mzc6XFx0X19zZXZfc25wX3NodXRkb3duX2xvY2tlZChcXHUwMDI2ZXJyb3IsIHBhbmljKTtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTI5MzgtfVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0zMDE0PXZvaWQgc2V2X2Rldl9kZXN0cm95KHN0cnVjdCBwc3BfZGV2aWNlICpwc3ApXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTMwMjgtXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzozMDI5OnN0YXRpYyBpbnQgc25wX3NodXRkb3duX29uX3BhbmljKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0zMDMwLVxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIHJlYXNvbiwgdm9pZCAqYXJnKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg9ODIyPXN0cnVjdCBzZXZfZGF0YV9yYW5nZV9saXN0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oLTgyOC0vKipcXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaDo4Mjk6ICogc3RydWN0IHNldl9kYXRhX3NucF9zaHV0ZG93bl9leCAtIFNOUF9TSFVURE9XTl9FWCBzdHJ1Y3R1cmVcXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaC04MzAtICpcXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaC04MzEtICogQGxlbjogbGVuZ3RoIG9mIHRoZSBjb21tYW5kIGJ1ZmZlciByZWFkIGJ5IHRoZSBQU1BcXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaDo4MzI6ICogQGlvbW11X3NucF9zaHV0ZG93bjogRGlzYWJsZSBlbmZvcmNlbWVudCBvZiBTTlAgaW4gdGhlIElPTU1VXFxuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg6ODMzOiAqIEB4ODZfc25wX3NodXRkb3duOiBEaXNhYmxlIFNOUCBvbiBhbGwgY29yZXNcXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaC04MzQtICogQHJzdmQxOiByZXNlcnZlZFxcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oLTgzNS0gKi9cXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaDo4MzY6c3RydWN0IHNldl9kYXRhX3NucF9zaHV0ZG93bl9leCB7XFxuaW5jbHVkZS9saW51eC9wc3Atc2V2LmgtODM3LVxcdHUzMiBsZW47XFxuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg6ODM4OlxcdHUzMiBpb21tdV9zbnBfc2h1dGRvd246MTtcXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaDo4Mzk6XFx0dTMyIHg4Nl9zbnBfc2h1dGRvd246MTtcXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaC04NDAtXFx0dTMyIHJzdmQxOjMwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMTo1NDoxNy4wMzcwMTk5NTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTkzNzQ4OTg1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNFVi1TTlAgUk1QIFRhYmxlIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHNucF9ybXB0YWJsZV9pbml0KClgIGZ1bmN0aW9uLiBUaGUgdmVyeSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGl0J3MgZ2F0ZWQgYmVoaW5kIGBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApYC4gQW5kLCBpdCBzZWVtcyBsaWtlICpldmVyeXRoaW5nKiBpbiB0aGUgY2hhbmdlcyBpcyBndWFyZGVkIGJ5IHRoYXQgb3IgYFg4Nl9GRUFUVVJFX1JNUE9QVGAsIHdoaWNoIGlzIGEgWmVuNiBDUFUgZmVhdHVyZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIGFyZSB0aGVyZSBhbnkgY29kZSBwYXRocyBpbnRyb2R1Y2VkIGJ5IHRoaXMgdGhhdCAqY291bGQqIHBvdGVudGlhbGx5IGJlIHJlYWNoZWQgd2l0aG91dCB0aGUgU0VWLVNOUCBmZWF0dXJlPyBJdCdzIGVhc3kgdG8gbWFrZSBhc3N1bXB0aW9ucywgYnV0IHRoZSBkZXZpbCdzIGluIHRoZSBkZXRhaWxzLCBzbyBsZXQncyB2ZXJpZnkuXG5cbkkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgcmV2aWV3IGVhY2ggbW9kaWZpZWQgZmlsZS4gVGhlIGZpcnN0IGZldyAoYGFyY2gveDg2L2luY2x1ZGUvLi4uYCkgc2VlbSBzdHJhaWdodGZvcndhcmQ6IGRlZmluaXRpb25zIGZvciB0aGUgZmVhdHVyZSBmbGFnLCBNU1JzLCBhbmQgZnVuY3Rpb24gZGVjbGFyYXRpb25zLiBOb3RoaW5nIHRoYXQganVtcHMgb3V0IGFzIGFuIGlzc3VlIHRoZXJlLlxuXG5Ob3csIGBhcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jYCBqdXN0IGFkZHMgdGhlIGBYODZfRkVBVFVSRV9STVBPUFRgIGJpdCB0byB0aGUgYGNwdWlkX2JpdHNgIHRhYmxlLiBUaGF0J3MgZmluZS5cblxuQnV0IGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJIHNlZSBgc2V2X3ZtX2Rlc3Ryb3koKWAgY2FsbHMgYHNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKWAuICpUaGF0J3MqIHRoZSB0cmlnZ2VyLCBiZWNhdXNlIGBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKClgIGlzIHRoZSBmdW5jdGlvbiB3ZSBhcmUgaW5pdGlhbGl6aW5nIGluIHRoZSBpbml0aWFsIGNoZWNrLiBTbywgdGhlIHF1ZXN0aW9uIGJlY29tZXM6IGNhbiBgc2V2LVx1MDAzZXNucF9jb250ZXh0YCAod2l0aGluIHRoZSBgc2V2X3ZtX2Rlc3Ryb3koKWAgY29udGV4dCkgYmUgbm9uLU5VTEwgd2l0aG91dCBTRVYtU05QIGhvc3QgaGFyZHdhcmU/ICpUaGF0J3MqIHRoZSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBJIG5lZWQgdG8gdHJhY2UgYmFjayB3aGVyZSBgc2V2LVx1MDAzZXNucF9jb250ZXh0YCBpcyBzZXQgdG8gZW5zdXJlIHdlIGFyZSBub3QgY3JlYXRpbmcgYW4gb3V0LW9mLWJvdW5kcyBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5NDgsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjE6NTQ6MjIuOTc0NTE1MDMzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ1NTU4NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNucF9jb250ZXh0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjIxNj1pbnQgc2V2X2Rldl9nZXRfYXR0cih1MzIgZ3JvdXAsIHU2NCBhdHRyLCB1NjQgKnZhbClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjI0My0gKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIyNDQ6c3RhdGljIHZvaWQgKnNucF9jb250ZXh0X2NyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTIyNDUte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yMjY3PXN0YXRpYyBpbnQgc25wX2JpbmRfYXNpZChzdHJ1Y3Qga3ZtICprdm0sIGludCAqZXJyb3IpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTIyNzEtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyMjcyOlxcdGRhdGEuZ2N0eF9wYWRkciA9IF9fcHNwX3BhKHNldi1cXHUwMDNlc25wX2NvbnRleHQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjI3My1cXHRkYXRhLmFzaWQgPSBzZXZfZ2V0X2FzaWQoa3ZtKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjI3Nz1zdGF0aWMgaW50IHNucF9sYXVuY2hfc3RhcnQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTIyOTAtXFx0LyogRG9uJ3QgYWxsb3cgdXNlcnNwYWNlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgbW9yZSB0aGFuIDEgU05QIGNvbnRleHQuICovXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyMjkxOlxcdGlmIChzZXYtXFx1MDAzZXNucF9jb250ZXh0KVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjI5Mi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjMxMC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIzMTE6XFx0c2V2LVxcdTAwM2VzbnBfY29udGV4dCA9IHNucF9jb250ZXh0X2NyZWF0ZShrdm0sIGFyZ3ApO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjMxMjpcXHRpZiAoIXNldi1cXHUwMDNlc25wX2NvbnRleHQpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMzEzLVxcdFxcdHJldHVybiAtRU5PVFRZO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjMxNC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIzMTU6XFx0c3RhcnQuZ2N0eF9wYWRkciA9IF9fcHNwX3BhKHNldi1cXHUwMDNlc25wX2NvbnRleHQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjMxNi1cXHRzdGFydC5wb2xpY3kgPSBwYXJhbXMucG9saWN5O1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yMzQ5PXN0YXRpYyBpbnQgc2V2X2dtZW1fcG9zdF9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbixcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjM4MS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIzODI6XFx0ZndfYXJncy5nY3R4X3BhZGRyID0gX19wc3BfcGEoc2V2LVxcdTAwM2VzbnBfY29udGV4dCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMzgzLVxcdGZ3X2FyZ3MuYWRkcmVzcyA9IF9fc21lX3NldChwZm5fdG9faHBhKHBmbikpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNDIxPXN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0MjktXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNDMwOlxcdGlmICghc2V2X3NucF9ndWVzdChrdm0pIHx8ICFzZXYtXFx1MDAzZXNucF9jb250ZXh0KVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQzMS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjUwNT1zdGF0aWMgaW50IHNucF9sYXVuY2hfdXBkYXRlX3Ztc2Eoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI1MTktXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNTIwOlxcdGRhdGEuZ2N0eF9wYWRkciA9IF9fcHNwX3BhKHNldi1cXHUwMDNlc25wX2NvbnRleHQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjUyMS1cXHRkYXRhLnBhZ2VfdHlwZSA9IFNOUF9QQUdFX1RZUEVfVk1TQTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjU2Mj1zdGF0aWMgaW50IHNucF9sYXVuY2hfZmluaXNoKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNTcyLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjU3MzpcXHRpZiAoIXNldi1cXHUwMDNlc25wX2NvbnRleHQpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNTc0LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjE1LVxcdG1lbWNweShkYXRhLVxcdTAwM2Vob3N0X2RhdGEsIHBhcmFtcy5ob3N0X2RhdGEsIEtWTV9TRVZfU05QX0ZJTklTSF9EQVRBX1NJWkUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjYxNjpcXHRkYXRhLVxcdTAwM2VnY3R4X3BhZGRyID0gX19wc3BfcGEoc2V2LVxcdTAwM2VzbnBfY29udGV4dCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjE3LVxcdHJldCA9IHNldl9pc3N1ZV9jbWQoa3ZtLCBTRVZfQ01EX1NOUF9MQVVOQ0hfRklOSVNILCBkYXRhLCBcXHUwMDI2YXJncC1cXHUwMDNlZXJyb3IpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yOTMwPXN0YXRpYyBpbnQgc25wX2RlY29tbWlzc2lvbl9jb250ZXh0KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjkzNi1cXHQvKiBJZiBjb250ZXh0IGlzIG5vdCBjcmVhdGVkIHRoZW4gZG8gbm90aGluZyAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjkzNzpcXHRpZiAoIXNldi1cXHUwMDNlc25wX2NvbnRleHQpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTM4LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTQwLVxcdC8qIERvIHRoZSBkZWNvbW1pc2lvbiwgd2hpY2ggd2lsbCB1bmJpbmQgdGhlIEFTSUQgZnJvbSB0aGUgU05QIGNvbnRleHQgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI5NDE6XFx0ZGF0YS5hZGRyZXNzID0gX19zbWVfcGEoc2V2LVxcdTAwM2VzbnBfY29udGV4dCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTQyLVxcdGRvd25fd3JpdGUoXFx1MDAyNnNldl9kZWFjdGl2YXRlX2xvY2spO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTQ4LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6Mjk0OTpcXHRzbnBfZnJlZV9maXJtd2FyZV9wYWdlKHNldi1cXHUwMDNlc25wX2NvbnRleHQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6Mjk1MDpcXHRzZXYtXFx1MDAzZXNucF9jb250ZXh0ID0gTlVMTDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NTEtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQyMjg9c3RhdGljIGludCBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF9ncGEpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyNDMtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MjQ0OlxcdGRhdGEuZ2N0eF9wYWRkciA9IF9fcHNwX3BhKHNldi1cXHUwMDNlc25wX2NvbnRleHQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDI0NS1cXHRkYXRhLnJlcV9wYWRkciA9IF9fcHNwX3BhKHNldi1cXHUwMDNlZ3Vlc3RfcmVxX2J1Zik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTUzMjY9c3RydWN0IHZtY2Jfc2F2ZV9hcmVhICpzZXZfZGVjcnlwdF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTM2MS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUzNjI6XFx0XFx0ZGJnLmdjdHhfcGFkZHIgPSBfX3BzcF9wYShzZXYtXFx1MDAzZXNucF9jb250ZXh0KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUzNjMtXFx0XFx0ZGJnLnNyY19hZGRyID0gc3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLnZtc2FfcGE7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTk5PXN0cnVjdCBrdm1fc2V2X2luZm8ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC0xMTctXFx0YXRvbWljX3QgbWlncmF0aW9uX2luX3Byb2dyZXNzO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6MTE4OlxcdHZvaWQgKnNucF9jb250ZXh0OyAgICAgIC8qIFNOUCBndWVzdCBjb250ZXh0IHBhZ2UgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTExOS1cXHR2b2lkICpndWVzdF9yZXFfYnVmOyAgICAvKiBCb3VuY2UgYnVmZmVyIGZvciBTTlAgR3Vlc3QgUmVxdWVzdCBpbnB1dCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMTo1NDoyNC42MjAwNzk1NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTQ2MDc4MTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIG15IGNvZGUgYW5kIHRoaW5raW5nIGFib3V0IGEgc3BlY2lmaWMgZnVuY3Rpb246XG5cbioqQW5hbHl6aW5nIHRoZSBgc25wX2NvbnRleHRfY3JlYXRlYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhlYWQgYXJvdW5kIGBzbnBfY29udGV4dF9jcmVhdGVgLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIGFuZCBob3cgaXQgd29ya3MuIExldCBtZSBqdXN0IHB1bGwgdXAgaXRzIGRlZmluaXRpb24gYW5kIHN0YXJ0IHJlYWRpbmcgdGhlIGNvZGUuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBncmFzcCB0aGUgaW50ZW50aW9uIG9mIHRoZSBjb2RlLiBJJ2xsIG5lZWQgdG8gc3RlcCB0aHJvdWdoIHRoaXMgc2xvd2x5IGFuZCBjYXJlZnVsbHkgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwNjMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMTo1NDozMC4xNjYxNjE3MzdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjI0MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjI0MDpcXHQgKiBhc3NvY2lhdGVkIHdpdGggdGhlIGd1ZXN0IHRoYXQgdGhlIGZpcm13YXJlIHRyYWNrcyB0byBpbXBsZW1lbnQgU0VWXFxuMjI0MTpcXHQgKiBhbmQgU05QIGZlYXR1cmVzLiBUaGUgZmlybXdhcmUgc3RvcmVzIHRoZSBndWVzdCBjb250ZXh0IGluIGh5cGVydmlzb3JcXG4yMjQyOlxcdCAqIHByb3ZpZGUgcGFnZSB2aWEgdGhlIFNOUF9HQ1RYX0NSRUFURSBjb21tYW5kLlxcbjIyNDM6XFx0ICovXFxuMjI0NDpcXHRzdGF0aWMgdm9pZCAqc25wX2NvbnRleHRfY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxcbjIyNDU6XFx0e1xcbjIyNDY6XFx0XFx0c3RydWN0IHNldl9kYXRhX3NucF9hZGRyIGRhdGEgPSB7fTtcXG4yMjQ3OlxcdFxcdHZvaWQgKmNvbnRleHQ7XFxuMjI0ODpcXHRcXHRpbnQgcmM7XFxuMjI0OTpcXHRcXG4yMjUwOlxcdFxcdC8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgY29udGV4dCBwYWdlICovXFxuMjI1MTpcXHRcXHRjb250ZXh0ID0gc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4yMjUyOlxcdFxcdGlmICghY29udGV4dClcXG4yMjUzOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjIyNTQ6XFx0XFxuMjI1NTpcXHRcXHRkYXRhLmFkZHJlc3MgPSBfX3BzcF9wYShjb250ZXh0KTtcXG4yMjU2OlxcdFxcdHJjID0gX19zZXZfaXNzdWVfY21kKGFyZ3AtXFx1MDAzZXNldl9mZCwgU0VWX0NNRF9TTlBfR0NUWF9DUkVBVEUsIFxcdTAwMjZkYXRhLCBcXHUwMDI2YXJncC1cXHUwMDNlZXJyb3IpO1xcbjIyNTc6XFx0XFx0aWYgKHJjKSB7XFxuMjI1ODpcXHRcXHRcXHRwcl93YXJuKFxcXCJGYWlsZWQgdG8gY3JlYXRlIFNFVi1TTlAgY29udGV4dCwgcmMgJWQgZndfZXJyb3IgJWRcXFwiLFxcbjIyNTk6XFx0XFx0XFx0XFx0cmMsIGFyZ3AtXFx1MDAzZWVycm9yKTtcXG4yMjYwOlxcdFxcdFxcdHNucF9mcmVlX2Zpcm13YXJlX3BhZ2UoY29udGV4dCk7XFxuMjI2MTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4yMjYyOlxcdFxcdH1cXG4yMjYzOlxcdFxcbjIyNjQ6XFx0XFx0cmV0dXJuIGNvbnRleHQ7XFxuMjI2NTpcXHR9XFxuMjI2NjpcXHRcXG4yMjY3OlxcdHN0YXRpYyBpbnQgc25wX2JpbmRfYXNpZChzdHJ1Y3Qga3ZtICprdm0sIGludCAqZXJyb3IpXFxuMjI2ODpcXHR7XFxuMjI2OTpcXHRcXHRzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYgPSB0b19rdm1fc2V2X2luZm8oa3ZtKTtcXG4yMjcwOlxcdFxcdHN0cnVjdCBzZXZfZGF0YV9zbnBfYWN0aXZhdGUgZGF0YSA9IHswfTtcXG4yMjcxOlxcdFxcbjIyNzI6XFx0XFx0ZGF0YS5nY3R4X3BhZGRyID0gX19wc3BfcGEoc2V2LVxcdTAwM2VzbnBfY29udGV4dCk7XFxuMjI3MzpcXHRcXHRkYXRhLmFzaWQgPSBzZXZfZ2V0X2FzaWQoa3ZtKTtcXG4yMjc0OlxcdFxcdHJldHVybiBzZXZfaXNzdWVfY21kKGt2bSwgU0VWX0NNRF9TTlBfQUNUSVZBVEUsIFxcdTAwMjZkYXRhLCBlcnJvcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIxOjU0OjMwLjE2NjQxMDY4N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTAxMDI3MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgXCJBbmQgbG9vayBhdCBgc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2VgLFwiIHN1bW1hcml6ZWQgYXMgYSBmaXJzdC1wZXJzb24gdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYHNucF9hbGxvY19maXJtd2FyZV9wYWdlYCoqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gYHNucF9hbGxvY19maXJtd2FyZV9wYWdlYC4gTXkgZmlyc3QgdGhvdWdodD8gXCJXaHkgYXJlIHdlIGxvb2tpbmcgYXQgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiAqbm93Kj9cIiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcuIElzIHRoaXMgcGFydCBvZiBhIGRlYnVnZ2luZyBzZXNzaW9uPyBBcmUgd2UgdHJhY2tpbmcgZG93biBhIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlPyBPciBhcmUgd2UgcmV2aWV3aW5nIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnM/IEtub3dpbmcgdGhlIFwid2h5XCIgaXMgY3J1Y2lhbCBmb3IgYSBwcm9kdWN0aXZlIGFuYWx5c2lzLlxuXG5SZWdhcmRsZXNzLCBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdDogbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ2llcywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aXRoaW4gdGhpcyBjb2RlLCBhbmQgaW50ZXJhY3Rpb25zIHdpdGggdGhlIFNlY3VyZSBOZXN0ZWQgUGFnaW5nIChTTlApIGltcGxlbWVudGF0aW9uLiBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbjpcblxuKiAgICoqRXJyb3IgaGFuZGxpbmc6KiogSXMgaXQgcm9idXN0PyBEb2VzIGl0IGNoZWNrIHJldHVybiB2YWx1ZXMgcHJvcGVybHksIGVzcGVjaWFsbHkgaW4gYSBwb3RlbnRpYWxseSBzZW5zaXRpdmUgYXJlYSBsaWtlIGZpcm13YXJlIHBhZ2UgYWxsb2NhdGlvbj8gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGlzIGFsbCBndWFyZGVkLlxuKiAgICoqQ29udGlndWl0eToqKiBJcyB0aGlzIG1lbW9yeSBhbGxvY2F0aW9uIGNvbnRpZ3VvdXMsIG9yIGlzIGl0IHNjYXR0ZXJlZD8gVGhpcyBjYW4gZHJhbWF0aWNhbGx5IGFmZmVjdCBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkgaW1wbGljYXRpb25zLCBwb3RlbnRpYWxseSBpbXBhY3RpbmcgaG93IHRoZSBndWVzdCB2aXJ0dWFsIG1hY2hpbmUgKFZNKSBiZWhhdmVzLlxuKiAgICoqUHJpdmlsZWdlIExldmVsczoqKiBXaGF0IGxldmVsIG9mIHByaXZpbGVnZSBpcyB0aGlzIGZ1bmN0aW9uIG9wZXJhdGluZyB1bmRlcj8gSXMgaXQgcnVubmluZyBpbiB0aGUgaHlwZXJ2aXNvciwgb3IgdGhlIGd1ZXN0PyBUaGUgYW5zd2VyIHdpbGwgcHJvdmlkZSBpbnNpZ2h0IGludG8gdGhlIGF0dGFjayBzdXJmYWNlLlxuKiAgICoqQ29uY3VycmVuY3k6KiogQW55IGxvY2tzPyBBbnkgcG90ZW50aWFsIGZvciBjb25jdXJyZW50IGFjY2VzcyBhbmQgcmFjZSBjb25kaXRpb25zPyBUaGlzIGlzIGNyaXRpY2FsIGluIGEgbXVsdGktdGhyZWFkZWQgb3IgbXVsdGktVk0gZW52aXJvbm1lbnQuXG4qICAgKipJbnRlcmFjdGlvbiB3aXRoIFNOUDoqKiBIb3cgZXhhY3RseSBkb2VzIHRoaXMgZnVuY3Rpb24gaW50ZXJmYWNlIHdpdGggdGhlIFNOUCBmcmFtZXdvcms/IElzIGl0IGNvcnJlY3RseSBzZXR0aW5nIHRoZSBhcHByb3ByaWF0ZSBmbGFncywgaGFuZGxpbmcgYXR0ZXN0YXRpb24sIGFuZCBlbnN1cmluZyB0aGUgY29uZmlkZW50aWFsaXR5IGFuZCBpbnRlZ3JpdHkgb2YgdGhlIGZpcm13YXJlIHBhZ2U/IFRoaXMgaXMgdGhlIGNvcmUgYXJlYSBvZiBpbnZlc3RpZ2F0aW9uLlxuXG5Ob3csIG15IG1pbmQgaXMgYWxyZWFkeSBzdGFydGluZyB0byBwaWVjZSB0b2dldGhlciBhIHJvdWdoIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmN0aW9uJ3Mgc2NvcGUuIFVsdGltYXRlbHksIHRoZSBuZXh0IHN0ZXAgaXMgZ29pbmcgdG8gYmUgYW5hbHl6aW5nIHRoZSBhY3R1YWwgY29kZSBpdHNlbGYuIExldCdzIHNlZSBob3cgd2VsbCBteSBpbml0aWFsIGFzc3VtcHRpb25zIGhvbGQgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODQ0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMTo1NDozNC42Njc0NDE5NzdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjExMjUzOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic25wX2FsbG9jX2Zpcm13YXJlX3BhZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00NTY9c3RhdGljIGludCBzbnBfZ3Vlc3RfcmVxX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NjQtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NjU6XFx0c2V2LVxcdTAwM2VndWVzdF9yZXNwX2J1ZiA9IHNucF9hbGxvY19maXJtd2FyZV9wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8pO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDY2LVxcdGlmICghc2V2LVxcdTAwM2VndWVzdF9yZXNwX2J1Zikge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yMjQ0PXN0YXRpYyB2b2lkICpzbnBfY29udGV4dF9jcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTIyNTAtXFx0LyogQWxsb2NhdGUgbWVtb3J5IGZvciBjb250ZXh0IHBhZ2UgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIyNTE6XFx0Y29udGV4dCA9IHNucF9hbGxvY19maXJtd2FyZV9wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMjUyLVxcdGlmICghY29udGV4dClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzA2ND1zdGF0aWMgYm9vbCBpc19zZXZfc25wX2luaXRpYWxpemVkKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwNzAtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMDcxOlxcdHN0YXR1cyA9IHNucF9hbGxvY19maXJtd2FyZV9wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwNzItXFx0aWYgKCFzdGF0dXMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTUzMjY9c3RydWN0IHZtY2Jfc2F2ZV9hcmVhICpzZXZfZGVjcnlwdF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTM1Ny1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUzNTg6XFx0XFx0dm1zYSA9IHNucF9hbGxvY19maXJtd2FyZV9wYWdlKF9fR0ZQX1pFUk8pO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTM1OS1cXHRcXHRpZiAoIXZtc2EpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYz03NDE9aW50IHNldl90aW9fZGV2X2NyZWF0ZShzdHJ1Y3QgdHNtX2RzbV90aW8gKmRldl9kYXRhLCB1MTYgZGV2aWNlX2lkLFxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmMtNzU3LVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LXRpby5jOjc1ODpcXHRkYXRhX3BnID0gc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYy03NTktXFx0aWYgKCFkYXRhX3BnKSB7XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTQxNz1zdGF0aWMgaW50IHJtcF9tYXJrX3BhZ2VzX2Zpcm13YXJlKHVuc2lnbmVkIGxvbmcgcGFkZHIsIHVuc2lnbmVkIGludCBucGFnZXMsIGJvb2wgbG9ja2VkKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00NDAtXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzo0NDE6c3RhdGljIHN0cnVjdCBwYWdlICpfX3NucF9hbGxvY19maXJtd2FyZV9wYWdlcyhnZnBfdCBnZnBfbWFzaywgaW50IG9yZGVyLCBib29sIGxvY2tlZClcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTQ0Mi17XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTQ2NS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjQ2Njp2b2lkICpzbnBfYWxsb2NfZmlybXdhcmVfcGFnZShnZnBfdCBnZnBfbWFzaylcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTQ2Ny17XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTQ2OS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjQ3MDpcXHRwYWdlID0gX19zbnBfYWxsb2NfZmlybXdhcmVfcGFnZXMoZ2ZwX21hc2ssIDAsIGZhbHNlKTtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTQ3MS1cXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtNDczLX1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjQ3NDpFWFBPUlRfU1lNQk9MX0dQTChzbnBfYWxsb2NfZmlybXdhcmVfcGFnZSk7XFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00NzUtXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTUwMT1zdGF0aWMgdm9pZCAqc2V2X2Z3X2FsbG9jKHVuc2lnbmVkIGxvbmcgbGVuKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy01MDQtXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzo1MDU6XFx0cGFnZSA9IF9fc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2VzKEdGUF9LRVJORUwsIGdldF9vcmRlcihsZW4pLCB0cnVlKTtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTUwNi1cXHRpZiAoIXBhZ2UpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTEzNTM9c3RhdGljIGludCBzbnBfdmVyaWZ5X21pdGlnYXRpb24odTE2IGNvbW1hbmQsIHU2NCB2ZWN0b3IsXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTEzNjAtXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoxMzYxOlxcdG1pdF9kc3QgPSBzbnBfYWxsb2NfZmlybXdhcmVfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xMzYyLVxcdGlmICghbWl0X2RzdClcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MTUwOD1zdGF0aWMgaW50IF9fc2V2X3NucF9pbml0X2xvY2tlZChpbnQgKmVycm9yLCB1bnNpZ25lZCBpbnQgbWF4X3NucF9hc2lkKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xNjQ5LVxcdFxcdCAqIHVubGlrZWx5KSBidXQgd2lsbCBjYXVzZSBhIGRlYWRsb2NrLlxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MTY1MDpcXHRcXHQgKiBJbnN0ZWFkIG9mIGV4cG9ydGluZyBfX3NucF9hbGxvY19maXJtd2FyZV9wYWdlcygpLCBhbGxvY2F0ZSBhIHBhZ2VcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTE2NTEtXFx0XFx0ICogZm9yIHRoaXMgb25lIGNhbGwgaGVyZS5cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTE2NTItXFx0XFx0ICovXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoxNjUzOlxcdFxcdHBhZ2UgPSBfX3NucF9hbGxvY19maXJtd2FyZV9wYWdlcyhHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPLFxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMTY1NC1cXHRcXHRcXHRcXHRcXHRcXHQgIDAsIHRydWUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg9MTEzMT12b2lkICpwc3BfY29weV91c2VyX2Jsb2IodTY0IHVhZGRyLCB1MzIgbGVuKTtcXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaDoxMTMyOnZvaWQgKnNucF9hbGxvY19maXJtd2FyZV9wYWdlKGdmcF90IG1hc2spO1xcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oLTExMzMtaW50IHNucF9yZWNsYWltX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGFkZHIsIHVuc2lnbmVkIGludCBucGFnZXMsIGJvb2wgbG9ja2VkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oPTExNjQ9c3RhdGljIGlubGluZSB2b2lkICpwc3BfY29weV91c2VyX2Jsb2IodTY0IF9fdXNlciB1YWRkciwgdTMyIGxlbikgeyByZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsgfVxcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oLTExNjUtXFxuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg6MTE2NjpzdGF0aWMgaW5saW5lIHZvaWQgKnNucF9hbGxvY19maXJtd2FyZV9wYWdlKGdmcF90IG1hc2spXFxuaW5jbHVkZS9saW51eC9wc3Atc2V2LmgtMTE2Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIxOjU0OjM2LjI4ODU3NTc4NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTg5MTg1NzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRmlybXdhcmUgUGFnZSBBbGxvY2F0aW9uIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGZpcm13YXJlIHBhZ2VzIGFyZSBiZWluZyBhbGxvY2F0ZWQgd2l0aGluIHRoaXMgY3J5cHRvIGNvbnRleHQuIE15IHN0YXJ0aW5nIHBvaW50IGlzIGBzbnBfYWxsb2NfZmlybXdhcmVfcGFnZWAsIHdoaWNoIEkgc3VzcGVjdCBpcyBhIHdyYXBwZXIgZnVuY3Rpb24uIExldCdzIHRyYWNlIGl0IGRvd24sIGFuZCBpdCBsb29rcyBsaWtlIGl0IGNhbGxzIGBfX3NucF9hbGxvY19maXJtd2FyZV9wYWdlc2AuIFRoYXQncyBhIGdvb2QgbGVhZC4gTm93IEkgc2hvdWxkIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgX19zbnBfYWxsb2NfZmlybXdhcmVfcGFnZXNgIGRpcmVjdGx5LiBBIHF1aWNrIGZpbGUgc3lzdGVtIHNlYXJjaCBhbmQgSSBzZWUgaXQncyBkZWZpbmVkIHdpdGhpbiBgZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY2AuIEFscmlnaHQsIHRpbWUgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIGdldCBhIGhhbmRsZSBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgYWxsb2NhdGlvbiBwcm9jZXNzLiBJIG5lZWQgdG8ga25vdyB0aGUgbWVtb3J5IHJlZ2lvbnMgYmVpbmcgdXNlZCwgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ2llcyBpbiBwbGFjZSwgYW5kIHdoYXQgZXJyb3IgY2hlY2tpbmcgaXMgYmVpbmcgcGVyZm9ybWVkLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTA4MSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIxOjU0OjM4LjQ3Nzc2MzkwNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NDAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NDA6XFx0XFxuIDQ0MTpcXHRzdGF0aWMgc3RydWN0IHBhZ2UgKl9fc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCBpbnQgb3JkZXIsIGJvb2wgbG9ja2VkKVxcbiA0NDI6XFx0e1xcbiA0NDM6XFx0XFx0dW5zaWduZWQgbG9uZyBucGFnZXMgPSAxdWwgXFx1MDAzY1xcdTAwM2Mgb3JkZXIsIHBhZGRyO1xcbiA0NDQ6XFx0XFx0c3RydWN0IHNldl9kZXZpY2UgKnNldjtcXG4gNDQ1OlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiA0NDY6XFx0XFxuIDQ0NzpcXHRcXHRpZiAoIXBzcF9tYXN0ZXIgfHwgIXBzcF9tYXN0ZXItXFx1MDAzZXNldl9kYXRhKVxcbiA0NDg6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQ0OTpcXHRcXG4gNDUwOlxcdFxcdHBhZ2UgPSBhbGxvY19wYWdlcyhnZnBfbWFzaywgb3JkZXIpO1xcbiA0NTE6XFx0XFx0aWYgKCFwYWdlKVxcbiA0NTI6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQ1MzpcXHRcXG4gNDU0OlxcdFxcdC8qIElmIFNFVi1TTlAgaXMgaW5pdGlhbGl6ZWQgdGhlbiBhZGQgdGhlIHBhZ2UgaW4gUk1QIHRhYmxlLiAqL1xcbiA0NTU6XFx0XFx0c2V2ID0gcHNwX21hc3Rlci1cXHUwMDNlc2V2X2RhdGE7XFxuIDQ1NjpcXHRcXHRpZiAoIXNldi1cXHUwMDNlc25wX2luaXRpYWxpemVkKVxcbiA0NTc6XFx0XFx0XFx0cmV0dXJuIHBhZ2U7XFxuIDQ1ODpcXHRcXG4gNDU5OlxcdFxcdHBhZGRyID0gX19wYSgodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZSkpO1xcbiA0NjA6XFx0XFx0aWYgKHJtcF9tYXJrX3BhZ2VzX2Zpcm13YXJlKHBhZGRyLCBucGFnZXMsIGxvY2tlZCkpXFxuIDQ2MTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNDYyOlxcdFxcbiA0NjM6XFx0XFx0cmV0dXJuIHBhZ2U7XFxuIDQ2NDpcXHR9XFxuIDQ2NTpcXHRcXG4gNDY2OlxcdHZvaWQgKnNucF9hbGxvY19maXJtd2FyZV9wYWdlKGdmcF90IGdmcF9tYXNrKVxcbiA0Njc6XFx0e1xcbiA0Njg6XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuIDQ2OTpcXHRcXG4gNDcwOlxcdFxcdHBhZ2UgPSBfX3NucF9hbGxvY19maXJtd2FyZV9wYWdlcyhnZnBfbWFzaywgMCwgZmFsc2UpO1xcbiA0NzE6XFx0XFxuIDQ3MjpcXHRcXHRyZXR1cm4gcGFnZSA/IHBhZ2VfYWRkcmVzcyhwYWdlKSA6IE5VTEw7XFxuIDQ3MzpcXHR9XFxuIDQ3NDpcXHRFWFBPUlRfU1lNQk9MX0dQTChzbnBfYWxsb2NfZmlybXdhcmVfcGFnZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIxOjU0OjM4LjQ3NzkwODM5M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjUzODIyNDY0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBDb2RlIENoYW5nZXMgYW5kIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ3ZlIGRldGVybWluZWQgYWZ0ZXIgcmV2aWV3aW5nIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMuIE15IGluaXRpYWwgZm9jdXMgd2FzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIFBTUCBkZXZpY2UsIGAvZGV2L3NldmAsIHZpYSB0aGUgYFNFVl9DTURfU05QX0dDVFhfQ1JFQVRFYCBpb2N0bC4gVGhpcywgYXMgd2Uga25vdywgaW50ZXJhY3RzIHdpdGggdGhlIEFNRCBQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IsIG9yIFBTUCwgd2hpY2ggaXMgYSBoYXJkd2FyZSBjb21wb25lbnQgcHJlc2VudCBvbiBBTUQgWmVuIENQVXMuIFRoZSBjYWxsIHRvIGBfX3Nldl9pc3N1ZV9jbWQoKWAgaXMgdGhlIGtleS5cblxuSSB0aGVuIGR1ZyBpbnRvIGhvdyB0aGUgY29kZSBkZXRlcm1pbmVzIFNFVi1TTlAgaG9zdCBjYXBhYmlsaXRpZXMuICBgYnNwX2RldGVybWluZV9zbnAoKWAgaW4gYGFtZC5jYCBleHBsaWNpdGx5IGRpc2FibGVzIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAgaWYgdGhlIGh5cGVydmlzb3IgZmVhdHVyZSwgYFg4Nl9GRUFUVVJFX0hZUEVSVklTT1JgLCBpcyBkZXRlY3RlZC4gVGhpcyBpcyBhIHZlcnkgaW1wb3J0YW50IHBvaW50ISBGdXJ0aGVybW9yZSwgdG8gZW5hYmxlIFJNUE9QVCwgd2UgKnJlcXVpcmUqIGJvdGggYENDX0FUVFJfSE9TVF9TRVZfU05QYCAqYW5kKiB0aGUgWmVuNiBpbnN0cnVjdGlvbiBzZXQgZmVhdHVyZSwgYFg4Nl9GRUFUVVJFX1JNUE9QVGAuICBSTVBPUFQgaXMgc3BlY2lmaWMgdG8gQU1EIFplbjYgYW5kIFNFVi1TTlAuXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gdGhlIGNyaXRlcmlhIGZvciAqbm90KiBmdXp6aW5nIChuZWdhdGl2ZSBjcml0ZXJpYSkgYXMgcGVyIHRoZSBwcm9tcHQuICBTcGVjaWZpY2FsbHksIHRoZSBjYXRlZ29yeSBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS5cIiAgV2hhdCBkb2VzIFNFVi1TTlAgaG9zdCBzdXBwb3J0ICpyZXF1aXJlKj8gTGV0J3MgYnJlYWsgaXQgZG93bjpcblxuMS4gIEEgYmFyZSBtZXRhbCBBTUQgWmVuMy9aZW40L1plbjUvWmVuNiBDUFUuXG4yLiAgQW4gQU1EIFBTUCAob3IgQ0NQKSAqcGh5c2ljYWwqIGhhcmR3YXJlIGRldmljZS5cbjMuICBSTVBPUFQgaXMgdGllZCB0byBaZW42IHdpdGggdGhlIHJlbGV2YW50IENQVSBmZWF0dXJlLlxuNC4gIEluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9LVk0sIEdDRSksIHdoaWNoIGlzIHRoZSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50LCBgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUmAgaXMgYWx3YXlzIHNldCBvbiB0aGUgYW1kNjQgZ3Vlc3Qga2VybmVsLiBUaGlzIGNhdXNlcyBgYnNwX2RldGVybWluZV9zbnAoKWAgdG8gY2xlYXIgYGNjX2ZsYWdzLmhvc3Rfc2V2X3NucGAgYW5kIGBYODZfRkVBVFVSRV9TRVZfU05QYC5cblxuV2l0aG91dCB0aGUgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBzZXQsIHRoZSByZWxldmFudCBjb2RlIHBhdGhzIGFyZSAqbmV2ZXIqIHJlYWNoZWQuIGBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKClgLCBgc25wX3NldHVwX3JtcG9wdCgpYCwgYW5kIGNhbGxzIGluIGBzbnBfcHJlcGFyZSgpYCAvIGBzbnBfc2h1dGRvd24oKWAgYmVjb21lIG5vLW9wcyBvciBlYXJseSByZXR1cm5zLiBgc25wX3JtcHRhYmxlX2luaXQoKWAganVzdCByZXR1cm5zIGFuIGVycm9yLiBgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKWAgaXMgZWl0aGVyIHNob3J0LWNpcmN1aXRlZCBvciBkb2VzIG5vdGhpbmcuIFRoZSBjaGFuZ2VzIHRvIGBzY2F0dGVyZWQuY2AgYXJlIHNpbXBseSBhZGRpbmcgdGhlIGNwdWlkIGJpdCB0byBhIHRhYmxlIHdoaWNoIGlzbid0IHVzZWQgZHVlIHRvIGxhY2sgb2YgdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24uXG5cbkkgcmUtZXhhbWluZWQgYWxsIHRoZSBtb2RpZmllZCBsaW5lcyBvZiBjb2RlLiAgV2UncmUgbG9va2luZyBhdDpcblxuMS4gIENQVSBmZWF0dXJlIGRlZmluaXRpb25zLlxuMi4gIE1TUiBpbmRleCBkZWZpbml0aW9ucy5cbjMuICBTRVYgZGVjbGFyYXRpb25zIGFuZCBzdHViIGltcGxlbWVudGF0aW9ucy5cbjQuICBDUFVJRCBmZWF0dXJlIHRhYmxlLlxuNS4gIENhbGxzIGluIGBzZXZfdm1fZGVzdHJveSgpYCBhbmQgc3VwcG9ydCBsb2dpYyBsaWtlIGBybXBvcHRfY2FwYWJsZSgpYCwgYHNucF9zZXR1cF9ybXBvcHQoKWAsIGV0Yy5cbjYuIEEgY2FsbCB0byBgc25wX3NldHVwX3JtcG9wdCgpYCBpbiBgX19zZXZfc25wX2luaXRfbG9ja2VkKClgLlxuXG5UaGUgaW1wb3J0YW50IHBvaW50IGlzIHRoYXQgKmFsbCogdGhlc2UgY2hhbmdlcyBhcmUgd2l0aGluIHRoZSBBTUQgU0VWLVNOUCBob3N0IHN1cHBvcnQgbG9naWMsIHdoaWNoIGluY2x1ZGVzIHRoZSBSTVBPUFQgZmVhdHVyZSB0aGF0IGlzIHNwZWNpZmljIHRvIEFNRCBaZW42IGJhcmUtbWV0YWwgcHJvY2Vzc29ycy4gSW4gdGhlIHZhc3QgbWFqb3JpdHkgb2YgZnV6emluZyBlbnZpcm9ubWVudHMgLSBzcGVjaWZpY2FsbHkgUUVNVS9LVk0sIHdoaWNoIHRoZSBkb2N1bWVudGF0aW9uIHNwZWNpZmllcyBpcyB0aGUgc3RhbmRhcmQgc2V0dXAgLSBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIGlzIG5ldmVyIHNldC4gVGhpcyBpcyBiZWNhdXNlIHdlIGRvbid0IGhhdmUgQU1EIFBTUCBoYXJkd2FyZSBhbmQgZHVlIHRvIHRoZSBgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUmAgY2hlY2suIFRoaXMgbWFrZXMgdGhlIFJNUE9QVCBtZWNoYW5pc20gYW5kIHRoZSBlbnRpcmUgU0VWLVNOUCBob3N0IGxpZmVjeWNsZSAqc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlKiBkdXJpbmcgc3RhbmRhcmQgZnV6emluZy4gIFRoaXMgbWVhbnMgdGhlc2UgYXJlYXMgYXJlIG5vdCB3b3J0aCBmdXp6aW5nLlxuXG5UaGVyZWZvcmU6XG5cbiogICBgV29ydGhGdXp6aW5nOiBmYWxzZWBcbiogICBgRW5hYmxlQ29uZmlnczogW11gXG4qICAgYEZvY3VzU3ltYm9sczogW11gXG5cbkknbSBjb25maWRlbnQgaW4gdGhlc2UgZmluZGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODc0LCJPdXRwdXRUb2tlbnMiOjEzNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMTo1NDo1MS4wMTYxMzU2MDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciBBTUQgU0VWLVNOUCBSTVBPUFQgKFJNUCBPcHRpbWl6YXRpb24pIGluc3RydWN0aW9ucyBhbmQgbWFuYWdlbWVudCBmb3IgQU1EIFplbjYrIGhvc3QgcHJvY2Vzc29ycy4gVGhlc2UgY29kZSBwYXRocyByZXF1aXJlIHBoeXNpY2FsIEFNRCBoYXJkd2FyZSBzdXBwb3J0aW5nIFNFVi1TTlAgaG9zdCBmZWF0dXJlcyBhbmQgdGhlIEFNRCBQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCksIGFuZCBhcmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluc2lkZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IgZGlzYWJsZXMgQ0NfQVRUUl9IT1NUX1NFVl9TTlAgZHVyaW5nIGJvb3QpLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciBBTUQgU0VWLVNOUCBSTVBPUFQgKFJNUCBPcHRpbWl6YXRpb24pIGluc3RydWN0aW9ucyBhbmQgbWFuYWdlbWVudCBmb3IgQU1EIFplbjYrIGhvc3QgcHJvY2Vzc29ycy4gVGhlc2UgY29kZSBwYXRocyByZXF1aXJlIHBoeXNpY2FsIEFNRCBoYXJkd2FyZSBzdXBwb3J0aW5nIFNFVi1TTlAgaG9zdCBmZWF0dXJlcyBhbmQgdGhlIEFNRCBQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCksIGFuZCBhcmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluc2lkZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IgZGlzYWJsZXMgQ0NfQVRUUl9IT1NUX1NFVl9TTlAgZHVyaW5nIGJvb3QpLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMTo1NDo1MS4wMTYxNTkyNDVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflown2ffb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 21:33:19 +0000 UTC FinishedAt: 2026-09-03 21:54:52 +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+CgkJCTx0ZD4yMDI2LzA5LzAzIDIxOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHMgc3VwcG9ydCBmb3IgQU1EIFNFVi1TTlAgUk1QT1BUIChSTVAgT3B0aW1pemF0aW9uKSBpbnN0cnVjdGlvbnMgYW5kIG1hbmFnZW1lbnQgZm9yIEFNRCBaZW42JiM0MzsgaG9zdCBwcm9jZXNzb3JzLiBUaGVzZSBjb2RlIHBhdGhzIHJlcXVpcmUgcGh5c2ljYWwgQU1EIGhhcmR3YXJlIHN1cHBvcnRpbmcgU0VWLVNOUCBob3N0IGZlYXR1cmVzIGFuZCB0aGUgQU1EIFBsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKSwgYW5kIGFyZSBkaXNhYmxlZCB3aGVuIHJ1bm5pbmcgaW5zaWRlIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUiBkaXNhYmxlcyBDQ19BVFRSX0hPU1RfU0VWX1NOUCBkdXJpbmcgYm9vdCkuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjE6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjZDg2YzY4MmY4MTdiMTI3MGEzNTg1MzMyMjdhYzYwMDg5ZWJhNjRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAyMTo1Mzo0OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuaW5kZXggZjcwZWU3NGI1ZjkyMS4uM2I1YjMyZDMzOTFiNSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbkBAIC03Niw3ICYjNDM7NzYsNyBAQFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfSzhcdFx0XHQoIDMqMzImIzQzOyA0KSAvKiBPcHRlcm9uLCBBdGhsb242NCAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfWkVONVx0XHQoIDMqMzImIzQzOyA1KSAvKiBDUFUgYmFzZWQgb24gWmVuNSBtaWNyb2FyY2hpdGVjdHVyZSAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfWkVONlx0XHQoIDMqMzImIzQzOyA2KSAvKiBDUFUgYmFzZWQgb24gWmVuNiBtaWNyb2FyY2hpdGVjdHVyZSAqL1xuLS8qIEZyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDMqMzImIzQzOyA3KSAqL1xuJiM0MzsjZGVmaW5lIFg4Nl9GRUFUVVJFX1JNUE9QVFx0XHQoIDMqMzImIzQzOyA3KSAvKiBTdXBwb3J0IGZvciBBTUQgUk1QT1BUIGluc3RydWN0aW9uICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9DT05TVEFOVF9UU0NcdCggMyozMiYjNDM7IDgpIC8qIFwmIzM0O2NvbnN0YW50X3RzY1wmIzM0OyBUU0MgdGlja3MgYXQgYSBjb25zdGFudCByYXRlICovXG4gLyogZnJlZTogd2FzICNkZWZpbmUgWDg2X0ZFQVRVUkVfVVBcdCggMyozMiYjNDM7IDkpICogXCYjMzQ7dXBcJiMzNDsgU01QIGtlcm5lbCBydW5uaW5nIG9uIFVQICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9BUlRcdFx0XHQoIDMqMzImIzQzOzEwKSAvKiBcJiMzNDthcnRcJiMzNDsgQWx3YXlzIHJ1bm5pbmcgdGltZXIgKEFSVCkgKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXG5pbmRleCAzYThlNTFhMGM5ZTg4Li4xNjM1ZTJlMWM1NzZhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXG5AQCAtNzYxLDYgJiM0Mzs3NjEsOSBAQFxuICNkZWZpbmUgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRF9CSVRcdDBcbiAjZGVmaW5lIE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRURcdEJJVF9VTEwoTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRF9CSVQpXG4gI2RlZmluZSBNU1JfQU1ENjRfUk1QX1NFR01FTlRfU0hJRlQoeClcdCgoKHgpIFx1MDAyNiBHRU5NQVNLX1VMTCgxMywgOCkpIFx1MDAzZVx1MDAzZSA4KVxuJiM0MzsjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfQkFTRVx0XHQweGMwMDEwMTM5XG4mIzQzOyNkZWZpbmUgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVfQklUXHQwXG4mIzQzOyNkZWZpbmUgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVcdFx0QklUX1VMTChNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRV9CSVQpXG4gXG4gI2RlZmluZSBNU1JfU1ZTTV9DQUFcdFx0XHQweGMwMDFmMDAwXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaFxuaW5kZXggOWU3YTA3N2M0NDVkYy4uMzIzNWUxNzE2NDdkZCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaFxuQEAgLTY2Miw2ICYjNDM7NjYyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNucF9sZWFrX3BhZ2VzKHU2NCBwZm4sIHVuc2lnbmVkIGludCBwYWdlcylcbiBcdF9fc25wX2xlYWtfcGFnZXMocGZuLCBwYWdlcywgdHJ1ZSk7XG4gfVxuIGludCBzbnBfcHJlcGFyZSh2b2lkKTtcbiYjNDM7dm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpO1xuJiM0Mzt2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZCk7XG4gdm9pZCBzbnBfc2h1dGRvd24odm9pZCk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGJvb2wgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8odm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cbkBAIC02ODAsNiAmIzQzOzY4Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfbGVha19wYWdlcyh1NjQgcGZuLCB1bnNpZ25lZCBpbnQgbnBhZ2VzKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrZHVtcF9zZXZfY2FsbGJhY2sodm9pZCkgeyB9XG4gc3RhdGljIGlubGluZSB2b2lkIHNucF9maXh1cF9lODIwX3RhYmxlcyh2b2lkKSB7fVxuIHN0YXRpYyBpbmxpbmUgaW50IHNucF9wcmVwYXJlKHZvaWQpIHsgcmV0dXJuIC1FTk9ERVY7IH1cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCkge31cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZCkge31cbiBzdGF0aWMgaW5saW5lIHZvaWQgc25wX3NodXRkb3duKHZvaWQpIHt9XG4gI2VuZGlmXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcbmluZGV4IDg2NjVhNjQ3NDgwNmMuLmQxNzk1Y2UyMTlkYWIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jXG5AQCAtNjcsNiAmIzQzOzY3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVpZF9iaXQgY3B1aWRfYml0c1tdID0ge1xuIFx0eyBYODZfRkVBVFVSRV9QRVJGTU9OX1YyLFx0XHRDUFVJRF9FQVgsICAwLCAweDgwMDAwMDIyLCAwIH0sXG4gXHR7IFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIsXHRcdENQVUlEX0VBWCwgIDEsIDB4ODAwMDAwMjIsIDAgfSxcbiBcdHsgWDg2X0ZFQVRVUkVfQU1EX0xCUl9QTUNfRlJFRVpFLFx0Q1BVSURfRUFYLCAgMiwgMHg4MDAwMDAyMiwgMCB9LFxuJiM0MztcdHsgWDg2X0ZFQVRVUkVfUk1QT1BULFx0XHRcdENQVUlEX0VEWCwgIDAsIDB4ODAwMDAwMjUsIDAgfSxcbiBcdHsgWDg2X0ZFQVRVUkVfQU1EX0hUUl9DT1JFUyxcdFx0Q1BVSURfRUFYLCAzMCwgMHg4MDAwMDAyNiwgMCB9LFxuIFx0eyAwLCAwLCAwLCAwLCAwIH1cbiB9O1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5pbmRleCA1NzA1NzIzZjFmNDEyLi4wYmFiZjk2ZTM4YzZmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuQEAgLTMwMzIsNiAmIzQzOzMwMzIsMTYgQEAgdm9pZCBzZXZfdm1fZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdCAqL1xuIFx0XHRpZiAoc25wX2RlY29tbWlzc2lvbl9jb250ZXh0KGt2bSkpXG4gXHRcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBQZXJmb3JtIFJNUCBvcHRpbWl6YXRpb25zIG9uIG1lbW9yeSBmcmVlZCBieSB0ZXJtaW5hdGluZ1xuJiM0MztcdFx0ICogZ3Vlc3RzLiAgVGhlIHNjYW4gaXMgZGVmZXJyZWQsIHNvIGl0IG5vcm1hbGx5IHJ1bnMgYWZ0ZXJcbiYjNDM7XHRcdCAqIHNldl9nbWVtX2ludmFsaWRhdGUoKSBoYXMgY29udmVydGVkIHRoaXMgZ3Vlc3QmIzM5O3MgcGFnZXMgYmFjayB0b1xuJiM0MztcdFx0ICogc2hhcmVkLCBhbmQgcGlja3MgdGhlbSB1cCB0aGVuLiAgQSB2ZXJ5IGxhcmdlIGd1ZXN0IHdob3NlXG4mIzQzO1x0XHQgKiBjb252ZXJzaW9uIGhhcyBub3QgZmluaXNoZWQgYnkgdGhlbiBpcyBwaWNrZWQgdXAgYnkgYSBsYXRlclxuJiM0MztcdFx0ICogdGVhcmRvd24mIzM5O3Mgc2Nhbi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c25wX3JtcG9wdF9hbGxfcGh5c21lbSgpO1xuIFx0fSBlbHNlIHtcbiBcdFx0c2V2X3VuYmluZF9hc2lkKGt2bSwgc2V2LVx1MDAzZWhhbmRsZSk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC9zdm0vc2V2LmMgYi9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY1xuaW5kZXggY2ZmMjg1ZDhhZDhlMy4uZmI2NmExYWE2ZmMzNSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY1xuQEAgLTE5LDYgJiM0MzsxOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tbXUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2FtZC1pb21tdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbm9zcGVjLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc2V2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcHJvY2Vzc29yLmhcdTAwM2VcbkBAIC0xMjQsNiAmIzQzOzEyNSwxNyBAQCBzdGF0aWMgdm9pZCAqcm1wX2Jvb2trZWVwaW5nIF9fcm9fYWZ0ZXJfaW5pdDtcbiBcbiBzdGF0aWMgdTY0IHByb2JlZF9ybXBfYmFzZSwgcHJvYmVkX3JtcF9zaXplO1xuIFxuJiM0MztzdGF0aWMgdTY0IHJtcG9wdF9wYV9zdGFydCwgcm1wb3B0X3BhX2VuZDtcbiYjNDM7XG4mIzQzO2VudW0gcm1wb3B0X29wX3R5cGUge1xuJiM0MztcdFJNUE9QVF9PUF9WRVJJRllfQU5EX1JFUE9SVF9TVEFUVVMsXG4mIzQzO1x0Uk1QT1BUX09QX1JFUE9SVF9TVEFUVVNcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcm1wb3B0X3dxO1xuJiM0MztzdGF0aWMgc3RydWN0IGRlbGF5ZWRfd29yayBybXBvcHRfZGVsYXllZF93b3JrO1xuJiM0MztzdGF0aWMgREVGSU5FX01VVEVYKHJtcG9wdF93cV9tdXRleCk7XG4mIzQzO1xuIHN0YXRpYyBMSVNUX0hFQUQoc25wX2xlYWtlZF9wYWdlc19saXN0KTtcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNucF9sZWFrZWRfcGFnZXNfbGlzdF9sb2NrKTtcbiBcbkBAIC01MTMsNyAmIzQzOzUyNSw2IEBAIHN0YXRpYyB2b2lkIGNsZWFyX2hzYXZlX3BhKHZvaWQgKmFyZylcbiBcbiBpbnQgc25wX3ByZXBhcmUodm9pZClcbiB7XG4tXHRpbnQgcmV0O1xuIFx0dTY0IHZhbDtcbiBcbiBcdC8qXG5AQCAtNTI2LDE0ICYjNDM7NTM3LDE4IEBAIGludCBzbnBfcHJlcGFyZSh2b2lkKVxuIFxuIFx0Y2xlYXJfcm1wKCk7XG4gXG4tXHRjcHVzX3JlYWRfbG9jaygpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTm8gQ1BVIG1heSBjb21lIG9ubGluZSB3aXRob3V0IFNucEVuIHdoaWxlIFNOUCBpcyBhY3RpdmU7IGRpc2FibGVcbiYjNDM7XHQgKiBob3RwbHVnIGhlcmUgYW5kIHJlLWVuYWJsZSBpdCBpbiBzbnBfc2h1dGRvd24oKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRjcHVfaG90cGx1Z19kaXNhYmxlKCk7XG4gXG4gXHRpZiAoIWNwdW1hc2tfZXF1YWwoY3B1X29ubGluZV9tYXNrLCBjcHVfcHJlc2VudF9tYXNrKSkge1xuLVx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdGNwdV9ob3RwbHVnX2VuYWJsZSgpO1xuIFx0XHRwcl93YXJuKFwmIzM0O1NOUCBpbml0IGZhaWxlZDogbm90IGFsbCBDUFVzIG9ubGluZS4gKCUqcGJsIG9ubGluZSBcdTAwM2MtXHUwMDNlICUqcGJsIHByZXNlbnQgbWFza3MpLlxcblwmIzM0OyxcbiBcdFx0XHRjcHVtYXNrX3ByX2FyZ3MoY3B1X29ubGluZV9tYXNrKSxcbiBcdFx0XHRjcHVtYXNrX3ByX2FyZ3MoY3B1X3ByZXNlbnRfbWFzaykpO1xuLVx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbiBcbiBcdHdiaW52ZF9vbl9hbGxfY3B1cygpO1xuQEAgLTU0OCwxNCAmIzQzOzU2MywzNSBAQCBpbnQgc25wX3ByZXBhcmUodm9pZClcbiBcdC8qIFNOUF9JTklUIHJlcXVpcmVzIE1TUl9WTV9IU0FWRV9QQSB0byBiZSBjbGVhcmVkIG9uIGFsbCBDUFVzLiAqL1xuIFx0b25fZWFjaF9jcHUoY2xlYXJfaHNhdmVfcGEsIE5VTEwsIDEpO1xuIFxuLVx0cmV0ID0gMDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9wcmVwYXJlLCBcJiMzNDtjY3BcJiMzNDspO1xuIFxuLXVubG9jazpcbi1cdGNwdXNfcmVhZF91bmxvY2soKTtcbiYjNDM7c3RhdGljIHZvaWQgcm1wb3B0X2Rpc2FibGUodm9pZClcbiYjNDM7e1xuJiM0MztcdGludCBjcHU7XG4gXG4tXHRyZXR1cm4gcmV0O1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZybXBvcHRfd3FfbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIHJtcG9wdF93cSBpcyBub24tTlVMTCBvbmx5IGFmdGVyIFJNUE9QVCBoYXMgYmVlbiBmdWxseSBzZXQgdXA6IHRoZVxuJiM0MztcdCAqIHdvcmtxdWV1ZSBpcyBhbGxvY2F0ZWQgYW5kIHRoZSBSTVBPUFRfQkFTRSBNU1JzIGFyZSBwcm9ncmFtbWVkLlxuJiM0MztcdCAqIHNucF9zZXR1cF9ybXBvcHQoKSByZXNldHMgaXQgdG8gTlVMTCBpZiBhbnkgb2YgdGhvc2Ugc3RlcHMgZmFpbCwgc28gYVxuJiM0MztcdCAqIE5VTEwgcm1wb3B0X3dxIG1lYW5zIG5vdGhpbmcgd2FzIHNldCB1cCBhbmQgdGhlcmUgaXMgbm90aGluZyB0byB0ZWFyXG4mIzQzO1x0ICogZG93bi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXJtcG9wdF93cSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmspO1xuJiM0MztcdGRlc3Ryb3lfd29ya3F1ZXVlKHJtcG9wdF93cSk7XG4mIzQzO1xuJiM0MztcdGZvcl9lYWNoX2NwdShjcHUsIGNwdV9wcmltYXJ5X3RocmVhZF9tYXNrKVxuJiM0MztcdFx0d3Jtc3JxX29uX2NwdShjcHUsIE1TUl9BTUQ2NF9STVBPUFRfQkFTRSwgMCk7XG4mIzQzO1xuJiM0MztcdHJtcG9wdF9wYV9zdGFydCA9IHJtcG9wdF9wYV9lbmQgPSAwO1xuJiM0MztcdHJtcG9wdF93cSA9IE5VTEw7XG4gfVxuLUVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3ByZXBhcmUsIFwmIzM0O2NjcFwmIzM0Oyk7XG4gXG4gdm9pZCBzbnBfc2h1dGRvd24odm9pZClcbiB7XG5AQCAtNTY1LDExICYjNDM7NjAxLDE1NiBAQCB2b2lkIHNucF9zaHV0ZG93bih2b2lkKVxuIFx0aWYgKHN5c2NmZyBcdTAwMjYgTVNSX0FNRDY0X1NZU0NGR19TTlBfRU4pXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRybXBvcHRfZGlzYWJsZSgpO1xuJiM0MztcbiBcdGNsZWFyX3JtcCgpO1xuIFx0b25fZWFjaF9jcHUobWZkX3JlY29uZmlndXJlLCBOVUxMLCAxKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgZmlybXdhcmUgaGFzIGRpc2FibGVkIFNOUCAoU25wRW4gaXMgY2xlYXIpLCBzbyByZS1lbmFibGUgQ1BVXG4mIzQzO1x0ICogaG90cGx1Zy4gIEEgbGVnYWN5IFNOUCBzaHV0ZG93biByZXR1cm5zIGFib3ZlIHdpdGggU25wRW4gc3RpbGwgc2V0IGFuZFxuJiM0MztcdCAqIGxlYXZlcyBob3RwbHVnIGRpc2FibGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGNwdV9ob3RwbHVnX2VuYWJsZSgpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zaHV0ZG93biwgXCYjMzQ7Y2NwXCYjMzQ7KTtcbiBcbiYjNDM7c3RhdGljIGJvb2wgcm1wb3B0X2NhcGFibGUodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUE9QVCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJNUE9QVCBvcHRpbWl6YXRpb25zIHNraXAgUk1QIGNoZWNrcyBhdCAxR0IgZ3JhbnVsYXJpdHkgaWYgdGhpcyByYW5nZSBvZlxuJiM0MzsgKiBtZW1vcnkgZG9lcyBub3QgY29udGFpbiBhbnkgU05QIGd1ZXN0IG1lbW9yeS5cbiYjNDM7ICpcbiYjNDM7ICogQHBhIGlzIGEgc3lzdGVtIHBoeXNpY2FsIGFkZHJlc3M7IFJNUE9QVCBvcGVyYXRlcyBvbiB0aGUgY29udGFpbmluZyAxR0IuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBybXBvcHQodTY0IHBhKVxuJiM0Mzt7XG4mIzQzO1x0ZW51bSBybXBvcHRfb3BfdHlwZSBvcCA9IFJNUE9QVF9PUF9WRVJJRllfQU5EX1JFUE9SVF9TVEFUVVM7XG4mIzQzO1x0dTY0IHBhX3N0YXJ0ID0gQUxJR05fRE9XTihwYSwgU1pfMUcpO1xuJiM0MztcbiYjNDM7XHRhc20gdm9sYXRpbGUoXCYjMzQ7LmJ5dGUgMHhmMiwgMHgwZiwgMHgwMSwgMHhmY1wmIzM0O1xuJiM0MztcdFx0ICAgICA6OiBcJiMzNDthXCYjMzQ7IChwYV9zdGFydCksIFwmIzM0O2NcJiMzNDsgKG9wKVxuJiM0MztcdFx0ICAgICA6IFwmIzM0O21lbW9yeVwmIzM0OywgXCYjMzQ7Y2NcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBvbl9lYWNoX2NwdSgpIGNhbGxiYWNrOiBvcHRpbWl6ZSB0aGUgd2hvbGUgUk1QT1BUIHJhbmdlIG9uIHRoaXMgQ1BVLiAqL1xuJiM0MztzdGF0aWMgdm9pZCBybXBvcHRfc2Nhbl9yYW5nZSh2b2lkICphcmcpXG4mIzQzO3tcbiYjNDM7XHR1NjQgcGE7XG4mIzQzO1xuJiM0MztcdGZvciAocGEgPSBybXBvcHRfcGFfc3RhcnQ7IHBhIFx1MDAzYyBybXBvcHRfcGFfZW5kOyBwYSAmIzQzOz0gU1pfMUcpXG4mIzQzO1x0XHRybXBvcHQocGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkb19ybXBvcHRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJNUE9QVCBjYWNoZXMgdGhlIHJlc3VsdHMgb2YgYSBSTVAgdGFibGUgc2NhbiBpbiByZXNlcnZlZCBwcm9jZXNzb3JcbiYjNDM7XHQgKiBtZW1vcnksIGFsbG93aW5nIGZ1dHVyZSBpbnZvY2F0aW9ucyB0byBza2lwIHN1Y2ggY29zdGx5IG9wZXJhdGlvbnMuXG4mIzQzO1x0ICovXG4mIzQzO1x0bWlncmF0ZV9kaXNhYmxlKCk7XG4mIzQzO1x0cm1wb3B0X3NjYW5fcmFuZ2UoTlVMTCk7XG4mIzQzO1x0bWlncmF0ZV9lbmFibGUoKTtcbiYjNDM7XG4mIzQzO1x0b25fZWFjaF9jcHVfbWFzayhjcHVfcHJpbWFyeV90aHJlYWRfbWFzaywgcm1wb3B0X3NjYW5fcmFuZ2UsIE5VTEwsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEZWxheSwgaW4gbWlsbGlzZWNvbmRzLCBiZWZvcmUgdGhlIFJNUCByZS1vcHRpbWl6YXRpb24gcGFzcyBydW5zIGFmdGVyIGFuXG4mIzQzOyAqIFNOUCBndWVzdCBpcyB0b3JuIGRvd24uICBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKCkgcmUtYXJtcyB0aGUgZGVsYXllZCB3b3JrXG4mIzQzOyAqIHdpdGggbW9kX2RlbGF5ZWRfd29yaygpIG9uIGVhY2ggdGVhcmRvd24sIHNvIHRoZSBwYXNzIGZpcmVzIHRoaXMgbG9uZyBhZnRlclxuJiM0MzsgKiB0aGUgbGFzdCB0ZWFyZG93bi4gIFRoaXMgY29hbGVzY2VzIGEgYnVyc3Qgb2YgdGVhcmRvd25zIGludG8gYSBzaW5nbGUgc2NhblxuJiM0MzsgKiBhbmQgZ2l2ZXMgZWFjaCBndWVzdCYjMzk7cyBwYWdlcyB0aW1lIHRvIGJlIGNvbnZlcnRlZCBiYWNrIHRvIHRoZSBzaGFyZWQsXG4mIzQzOyAqIGh5cGVydmlzb3Itb3duZWQgc3RhdGUgYmVmb3JlIHRoZSBzY2FuIHJlLW9wdGltaXplcyB0aGVpciAxR0IgcmVnaW9ucy4gIFRoZVxuJiM0MzsgKiAxMCBzZWNvbmQgdmFsdWUgaXMgYSBoZXVyaXN0aWMgdHJhZGluZyByZS1vcHRpbWl6YXRpb24gbGF0ZW5jeSBhZ2FpbnN0XG4mIzQzOyAqIHNjYW5uaW5nIHRvbyBlYWdlcmx5LlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBSTVBPUFRfV09SS19USU1FT1VUXHQoMTAgKiBNU0VDX1BFUl9TRUMpXG4mIzQzO1xuJiM0Mzt2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZClcbiYjNDM7e1xuJiM0MztcdGlmICghcm1wb3B0X2NhcGFibGUoKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJtcG9wdF93cV9tdXRleCk7XG4mIzQzO1xuJiM0MztcdGlmICghcm1wb3B0X3dxKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRtb2RfZGVsYXllZF93b3JrKHJtcG9wdF93cSwgXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yayxcbiYjNDM7XHRcdFx0IG1zZWNzX3RvX2ppZmZpZXMoUk1QT1BUX1dPUktfVElNRU9VVCkpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3JtcG9wdF9hbGxfcGh5c21lbSwgXCYjMzQ7a3ZtLWFtZFwmIzM0Oyk7XG4mIzQzO1xuJiM0Mzt2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZClcbiYjNDM7e1xuJiM0MztcdHU2NCBybXBvcHRfYmFzZTtcbiYjNDM7XHRpbnQgY3B1O1xuJiM0MztcbiYjNDM7XHRpZiAoIXJtcG9wdF9jYXBhYmxlKCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZybXBvcHRfd3FfbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9uIHJlLWluaXRpYWxpemF0aW9uIGFmdGVyIGEgbGVnYWN5IFNOUCBzaHV0ZG93biAoU05QX1NIVVRET1dOX0VYXG4mIzQzO1x0ICogd2l0aCB4ODZfc25wX3NodXRkb3duPTApLCBzbnBfc2h1dGRvd24oKSBhbmQgdGh1cyBybXBvcHRfZGlzYWJsZSgpIGFyZVxuJiM0MztcdCAqIHNraXBwZWQsIHNvIHRoZSB3b3JrcXVldWUsIGRlbGF5ZWQgd29yayBhbmQgcGVyLUNQVSBSTVBPUFRfQkFTRSBNU1JzXG4mIzQzO1x0ICogYXJlIHN0aWxsIHNldCB1cCBhbmQgdmFsaWQgKFNucEVuIHN0YXllZCBzZXQgYW5kIENQVSBob3RwbHVnIHN0YXllZFxuJiM0MztcdCAqIGRpc2FibGVkKS4gIFJhdGhlciB0aGFuIHJlLWRvaW5nIHRoZSBzZXR1cCwgd2hpY2ggd291bGQgbGVhayB0aGVcbiYjNDM7XHQgKiBleGlzdGluZyBzdGF0ZSwganVzdCByZS1xdWV1ZSB0aGUgb3B0aW1pemF0aW9uIHBhc3MgdG8gcmUtb3B0aW1pemUgYW55XG4mIzQzO1x0ICogbWVtb3J5IHRoZSBwcmV2aW91cyBTTlAgc2Vzc2lvbiBkZS1vcHRpbWl6ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJtcG9wdF93cSkge1xuJiM0MztcdFx0cXVldWVfZGVsYXllZF93b3JrKHJtcG9wdF93cSwgXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENyZWF0ZSBhbiBSTVBPUFQtc3BlY2lmaWMgd29ya3F1ZXVlIHRvIGF2b2lkIHNjaGVkdWxpbmdcbiYjNDM7XHQgKiBSTVBPUFQgd29ya2l0ZW0gb24gdGhlIGdsb2JhbCBzeXN0ZW0gd29ya3F1ZXVlLlxuJiM0MztcdCAqL1xuJiM0MztcdHJtcG9wdF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDtybXBvcHRfd3FcJiMzNDssIFdRX1VOQk9VTkQsIDEpO1xuJiM0MztcdGlmICghcm1wb3B0X3dxKSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIFJNUE9QVCB3b3JrcXVldWVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgZG9fcm1wb3B0X3dvcmspO1xuJiM0MztcbiYjNDM7XHRybXBvcHRfcGFfc3RhcnQgPSBBTElHTl9ET1dOKFBGTl9QSFlTKG1pbl9sb3dfcGZuKSwgU1pfMUcpO1xuJiM0MztcdHJtcG9wdF9iYXNlID0gcm1wb3B0X3BhX3N0YXJ0IHwgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEU7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUGVyLUNQVSBSTVBPUFQgdGFibGVzIGNvdmVyIGF0IG1vc3QgMiBUQi4gIFByb2dyYW0gZWFjaCBjb3JlJiMzOTtzXG4mIzQzO1x0ICogUk1QT1BUX0JBU0Ugd2l0aCB0aGUgc3RhcnQgb2YgUkFNIHRvIG9wdGltaXplIHVwIHRvIDIgVEIuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yX2VhY2hfY3B1KGNwdSwgY3B1X3ByaW1hcnlfdGhyZWFkX21hc2spXG4mIzQzO1x0XHR3cm1zcnFfb25fY3B1KGNwdSwgTVNSX0FNRDY0X1JNUE9QVF9CQVNFLCBybXBvcHRfYmFzZSk7XG4mIzQzO1xuJiM0MztcdHJtcG9wdF9wYV9lbmQgPSBBTElHTihQRk5fUEhZUyhtYXhfcGZuKSwgU1pfMUcpO1xuJiM0MztcbiYjNDM7XHQvKiBMaW1pdCBtZW1vcnkgc2Nhbm5pbmcgdG8gMlRCIG9mIFJBTSAqL1xuJiM0MztcdGlmICgocm1wb3B0X3BhX2VuZCAtIHJtcG9wdF9wYV9zdGFydCkgXHUwMDNlIFNaXzJUKSB7XG4mIzQzO1x0XHRwcl9pbmZvKFwmIzM0O1JNUE9QVCBjb3ZlcmFnZSBsaW1pdGVkIHRvIDJUQjsgbWVtb3J5IGFib3ZlIDB4JWxseCBub3Qgb3B0aW1pemVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRybXBvcHRfcGFfc3RhcnQgJiM0MzsgU1pfMlQpO1xuJiM0MztcdFx0cm1wb3B0X3BhX2VuZCA9IHJtcG9wdF9wYV9zdGFydCAmIzQzOyBTWl8yVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogT25jZSBhbGwgcGVyLUNQVSBSTVBPUFQgdGFibGVzIGhhdmUgYmVlbiBjb25maWd1cmVkLCBlbmFibGUgUk1QT1BUXG4mIzQzO1x0ICogb3B0aW1pemF0aW9ucyBvbiBhbGwgcGh5c2ljYWwgbWVtb3J5LlxuJiM0MztcdCAqL1xuJiM0MztcdHF1ZXVlX2RlbGF5ZWRfd29yayhybXBvcHRfd3EsIFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmssIDApO1xuJiM0MztcbiYjNDM7XHRwcl9pbmZvKFwmIzM0O1JNUE9QVCBvcHRpbWl6YXRpb25zIGVuYWJsZWRcXG5cJiMzNDspO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NldHVwX3JtcG9wdCwgXCYjMzQ7Y2NwXCYjMzQ7KTtcbiYjNDM7XG4gLypcbiAgKiBEbyB0aGUgbmVjZXNzYXJ5IHByZXBhcmF0aW9ucyB3aGljaCBhcmUgdmVyaWZpZWQgYnkgdGhlIGZpcm13YXJlIGFzXG4gICogZGVzY3JpYmVkIGluIHRoZSBTTlBfSU5JVF9FWCBmaXJtd2FyZSBjb21tYW5kIGRlc2NyaXB0aW9uIGluIHRoZSBTTlBcbkBAIC01NzcsNiAmIzQzOzc1OCw4IEBAIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCBcJiMzNDtjY3BcJiMzNDspO1xuICAqL1xuIGludCBfX2luaXQgc25wX3JtcHRhYmxlX2luaXQodm9pZClcbiB7XG4mIzQzO1x0dTY0IHZhbDtcbiYjNDM7XG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKSlcbiBcdFx0cmV0dXJuIC1FTk9TWVM7XG4gXG5AQCAtNTg2LDYgJiM0Mzs3NjksMTUgQEAgaW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxuIFx0aWYgKCFzZXR1cF9ybXB0YWJsZSgpKVxuIFx0XHRyZXR1cm4gLUVOT1NZUztcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9uIGEga2V4ZWMgYm9vdCBTTlAgbWF5IGFscmVhZHkgYmUgZW5hYmxlZCAobGVnYWN5IGZpcm13YXJlIGxlYXZlc1xuJiM0MztcdCAqIFNucEVuIHNldCBhY3Jvc3Mgc2h1dGRvd24pLCBpbiB3aGljaCBjYXNlIHNucF9wcmVwYXJlKCkgYmFpbHMgd2l0aG91dFxuJiM0MztcdCAqIGRpc2FibGluZyBDUFUgaG90cGx1Zywgc28gZGlzYWJsZSBpdCBoZXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdHJkbXNycShNU1JfQU1ENjRfU1lTQ0ZHLCB2YWwpO1xuJiM0MztcdGlmICh2YWwgXHUwMDI2IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKVxuJiM0MztcdFx0Y3B1X2hvdHBsdWdfZGlzYWJsZSgpO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBTZXR0aW5nIGNyYXNoX2tleGVjX3Bvc3Rfbm90aWZpZXJzIHRvICYjMzk7dHJ1ZSYjMzk7IHRvIGVuc3VyZSB0aGF0IFNOUCBwYW5pY1xuIFx0ICogbm90aWZpZXIgaXMgaW52b2tlZCB0byBkbyBTTlAgSU9NTVUgc2h1dGRvd24gYmVmb3JlIGtkdW1wLlxuQEAgLTY4MywxMyAmIzQzOzg3NSwyMSBAQCBzdGF0aWMgYm9vbCBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbyh2b2lkKVxuIFxuIGJvb2wgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8odm9pZClcbiB7XG4tXHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TRUdNRU5URURfUk1QKSlcbiYjNDM7XHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TRUdNRU5URURfUk1QKSkge1xuIFx0XHRyZG1zcnEoTVNSX0FNRDY0X1JNUF9DRkcsIHJtcF9jZmcpO1xuIFxuLVx0aWYgKHJtcF9jZmcgXHUwMDI2IE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRUQpXG4tXHRcdHJldHVybiBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbygpO1xuLVx0ZWxzZVxuLVx0XHRyZXR1cm4gcHJvYmVfY29udGlndW91c19ybXB0YWJsZV9pbmZvKCk7XG4mIzQzO1x0XHRpZiAocm1wX2NmZyBcdTAwMjYgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRClcbiYjNDM7XHRcdFx0cmV0dXJuIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNlZ21lbnRlZCBSTVAgaXMgZWl0aGVyIG5vdCBzdXBwb3J0ZWQgb24gdGhlIHBsYXRmb3JtIG9yIGlzXG4mIzQzO1x0ICogZGlzYWJsZWQgYnkgdGhlIGZpcm13YXJlLiAgUk1QT1BUIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dFxuJiM0MztcdCAqIHNlZ21lbnRlZCBSTVAuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9STVBPUFQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHJvYmVfY29udGlndW91c19ybXB0YWJsZV9pbmZvKCk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcbmluZGV4IGY4MzNjYjdlNGRhMzYuLjI4N2E4MzQ1ODU0YmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jXG5AQCAtMTY2Myw2ICYjNDM7MTY2Myw4IEBAIHN0YXRpYyBpbnQgX19zZXZfc25wX2luaXRfbG9ja2VkKGludCAqZXJyb3IsIHVuc2lnbmVkIGludCBtYXhfc25wX2FzaWQpXG4gXG4gXHRzZXZfZXNfdG1yX3NpemUgPSBTTlBfVE1SX1NJWkU7XG4gXG4mIzQzO1x0c25wX3NldHVwX3JtcG9wdCgpO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMTo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciBBTUQgU0VWLVNOUCBSTVBPUFQgKFJNUCBPcHRpbWl6YXRpb24pIGluc3RydWN0aW9ucyBhbmQgbWFuYWdlbWVudCBmb3IgQU1EIFplbjYmIzQzOyBob3N0IHByb2Nlc3NvcnMuIFRoZXNlIGNvZGUgcGF0aHMgcmVxdWlyZSBwaHlzaWNhbCBBTUQgaGFyZHdhcmUgc3VwcG9ydGluZyBTRVYtU05QIGhvc3QgZmVhdHVyZXMgYW5kIHRoZSBBTUQgUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApLCBhbmQgYXJlIGRpc2FibGVkIHdoZW4gcnVubmluZyBpbnNpZGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChYODZfRkVBVFVSRV9IWVBFUlZJU09SIGRpc2FibGVzIENDX0FUVFJfSE9TVF9TRVZfU05QIGR1cmluZyBib290KS4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNkODZjNjgyZjgxN2IxMjcwYTM1ODUzMzIyN2FjNjAwODllYmE2NGEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDIxOjUzOjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgKaW5kZXggZjcwZWU3NGI1ZjkyMS4uM2I1YjMyZDMzOTFiNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oCkBAIC03Niw3ICYjNDM7NzYsNyBAQAogI2RlZmluZSBYODZfRkVBVFVSRV9LOAkJCSggMyozMiYjNDM7IDQpIC8qIE9wdGVyb24sIEF0aGxvbjY0ICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1pFTjUJCSggMyozMiYjNDM7IDUpIC8qIENQVSBiYXNlZCBvbiBaZW41IG1pY3JvYXJjaGl0ZWN0dXJlICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1pFTjYJCSggMyozMiYjNDM7IDYpIC8qIENQVSBiYXNlZCBvbiBaZW42IG1pY3JvYXJjaGl0ZWN0dXJlICovCi0vKiBGcmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAzKjMyJiM0MzsgNykgKi8KJiM0MzsjZGVmaW5lIFg4Nl9GRUFUVVJFX1JNUE9QVAkJKCAzKjMyJiM0MzsgNykgLyogU3VwcG9ydCBmb3IgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbiAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MJKCAzKjMyJiM0MzsgOCkgLyogJiMzNDtjb25zdGFudF90c2MmIzM0OyBUU0MgdGlja3MgYXQgYSBjb25zdGFudCByYXRlICovCiAvKiBmcmVlOiB3YXMgI2RlZmluZSBYODZfRkVBVFVSRV9VUAkoIDMqMzImIzQzOyA5KSAqICYjMzQ7dXAmIzM0OyBTTVAga2VybmVsIHJ1bm5pbmcgb24gVVAgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfQVJUCQkJKCAzKjMyJiM0MzsxMCkgLyogJiMzNDthcnQmIzM0OyBBbHdheXMgcnVubmluZyB0aW1lciAoQVJUKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaAppbmRleCAzYThlNTFhMGM5ZTg4Li4xNjM1ZTJlMWM1NzZhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaApAQCAtNzYxLDYgJiM0Mzs3NjEsOSBAQAogI2RlZmluZSBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVAkwCiAjZGVmaW5lIE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRUQJQklUX1VMTChNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVCkKICNkZWZpbmUgTVNSX0FNRDY0X1JNUF9TRUdNRU5UX1NISUZUKHgpCSgoKHgpICZhbXA7IEdFTk1BU0tfVUxMKDEzLCA4KSkgJmd0OyZndDsgOCkKJiM0MzsjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfQkFTRQkJMHhjMDAxMDEzOQomIzQzOyNkZWZpbmUgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVfQklUCTAKJiM0MzsjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFCQlCSVRfVUxMKE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFX0JJVCkKIAogI2RlZmluZSBNU1JfU1ZTTV9DQUEJCQkweGMwMDFmMDAwCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgKaW5kZXggOWU3YTA3N2M0NDVkYy4uMzIzNWUxNzE2NDdkZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgKQEAgLTY2Miw2ICYjNDM7NjYyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNucF9sZWFrX3BhZ2VzKHU2NCBwZm4sIHVuc2lnbmVkIGludCBwYWdlcykKIAlfX3NucF9sZWFrX3BhZ2VzKHBmbiwgcGFnZXMsIHRydWUpOwogfQogaW50IHNucF9wcmVwYXJlKHZvaWQpOwomIzQzO3ZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKTsKJiM0Mzt2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZCk7CiB2b2lkIHNucF9zaHV0ZG93bih2b2lkKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGJvb2wgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8odm9pZCkgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTY4MCw2ICYjNDM7NjgyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNucF9sZWFrX3BhZ2VzKHU2NCBwZm4sIHVuc2lnbmVkIGludCBucGFnZXMpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQga2R1bXBfc2V2X2NhbGxiYWNrKHZvaWQpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIHNucF9maXh1cF9lODIwX3RhYmxlcyh2b2lkKSB7fQogc3RhdGljIGlubGluZSBpbnQgc25wX3ByZXBhcmUodm9pZCkgeyByZXR1cm4gLUVOT0RFVjsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpIHt9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZCkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2h1dGRvd24odm9pZCkge30KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYwppbmRleCA4NjY1YTY0NzQ4MDZjLi5kMTc5NWNlMjE5ZGFiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmMKQEAgLTY3LDYgJiM0Mzs2Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRfYml0IGNwdWlkX2JpdHNbXSA9IHsKIAl7IFg4Nl9GRUFUVVJFX1BFUkZNT05fVjIsCQlDUFVJRF9FQVgsICAwLCAweDgwMDAwMDIyLCAwIH0sCiAJeyBYODZfRkVBVFVSRV9BTURfTEJSX1YyLAkJQ1BVSURfRUFYLCAgMSwgMHg4MDAwMDAyMiwgMCB9LAogCXsgWDg2X0ZFQVRVUkVfQU1EX0xCUl9QTUNfRlJFRVpFLAlDUFVJRF9FQVgsICAyLCAweDgwMDAwMDIyLCAwIH0sCiYjNDM7CXsgWDg2X0ZFQVRVUkVfUk1QT1BULAkJCUNQVUlEX0VEWCwgIDAsIDB4ODAwMDAwMjUsIDAgfSwKIAl7IFg4Nl9GRUFUVVJFX0FNRF9IVFJfQ09SRVMsCQlDUFVJRF9FQVgsIDMwLCAweDgwMDAwMDI2LCAwIH0sCiAJeyAwLCAwLCAwLCAwLCAwIH0KIH07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwppbmRleCA1NzA1NzIzZjFmNDEyLi4wYmFiZjk2ZTM4YzZmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKQEAgLTMwMzIsNiAmIzQzOzMwMzIsMTYgQEAgdm9pZCBzZXZfdm1fZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pCiAJCSAqLwogCQlpZiAoc25wX2RlY29tbWlzc2lvbl9jb250ZXh0KGt2bSkpCiAJCQlyZXR1cm47CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogUGVyZm9ybSBSTVAgb3B0aW1pemF0aW9ucyBvbiBtZW1vcnkgZnJlZWQgYnkgdGVybWluYXRpbmcKJiM0MzsJCSAqIGd1ZXN0cy4gIFRoZSBzY2FuIGlzIGRlZmVycmVkLCBzbyBpdCBub3JtYWxseSBydW5zIGFmdGVyCiYjNDM7CQkgKiBzZXZfZ21lbV9pbnZhbGlkYXRlKCkgaGFzIGNvbnZlcnRlZCB0aGlzIGd1ZXN0JiMzOTtzIHBhZ2VzIGJhY2sgdG8KJiM0MzsJCSAqIHNoYXJlZCwgYW5kIHBpY2tzIHRoZW0gdXAgdGhlbi4gIEEgdmVyeSBsYXJnZSBndWVzdCB3aG9zZQomIzQzOwkJICogY29udmVyc2lvbiBoYXMgbm90IGZpbmlzaGVkIGJ5IHRoZW4gaXMgcGlja2VkIHVwIGJ5IGEgbGF0ZXIKJiM0MzsJCSAqIHRlYXJkb3duJiMzOTtzIHNjYW4uCiYjNDM7CQkgKi8KJiM0MzsJCXNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKTsKIAl9IGVsc2UgewogCQlzZXZfdW5iaW5kX2FzaWQoa3ZtLCBzZXYtJmd0O2hhbmRsZSk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC9zdm0vc2V2LmMgYi9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYwppbmRleCBjZmYyODVkOGFkOGUzLi5mYjY2YTFhYTZmYzM1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYwpAQCAtMTksNiAmIzQzOzE5LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pb21tdS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2FtZC1pb21tdS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25vc3BlYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS9zZXYuaCZndDsKICNpbmNsdWRlICZsdDthc20vcHJvY2Vzc29yLmgmZ3Q7CkBAIC0xMjQsNiAmIzQzOzEyNSwxNyBAQCBzdGF0aWMgdm9pZCAqcm1wX2Jvb2trZWVwaW5nIF9fcm9fYWZ0ZXJfaW5pdDsKIAogc3RhdGljIHU2NCBwcm9iZWRfcm1wX2Jhc2UsIHByb2JlZF9ybXBfc2l6ZTsKIAomIzQzO3N0YXRpYyB1NjQgcm1wb3B0X3BhX3N0YXJ0LCBybXBvcHRfcGFfZW5kOwomIzQzOwomIzQzO2VudW0gcm1wb3B0X29wX3R5cGUgewomIzQzOwlSTVBPUFRfT1BfVkVSSUZZX0FORF9SRVBPUlRfU1RBVFVTLAomIzQzOwlSTVBPUFRfT1BfUkVQT1JUX1NUQVRVUwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpybXBvcHRfd3E7CiYjNDM7c3RhdGljIHN0cnVjdCBkZWxheWVkX3dvcmsgcm1wb3B0X2RlbGF5ZWRfd29yazsKJiM0MztzdGF0aWMgREVGSU5FX01VVEVYKHJtcG9wdF93cV9tdXRleCk7CiYjNDM7CiBzdGF0aWMgTElTVF9IRUFEKHNucF9sZWFrZWRfcGFnZXNfbGlzdCk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNucF9sZWFrZWRfcGFnZXNfbGlzdF9sb2NrKTsKIApAQCAtNTEzLDcgJiM0Mzs1MjUsNiBAQCBzdGF0aWMgdm9pZCBjbGVhcl9oc2F2ZV9wYSh2b2lkICphcmcpCiAKIGludCBzbnBfcHJlcGFyZSh2b2lkKQogewotCWludCByZXQ7CiAJdTY0IHZhbDsKIAogCS8qCkBAIC01MjYsMTQgJiM0Mzs1MzcsMTggQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpCiAKIAljbGVhcl9ybXAoKTsKIAotCWNwdXNfcmVhZF9sb2NrKCk7CiYjNDM7CS8qCiYjNDM7CSAqIE5vIENQVSBtYXkgY29tZSBvbmxpbmUgd2l0aG91dCBTbnBFbiB3aGlsZSBTTlAgaXMgYWN0aXZlOyBkaXNhYmxlCiYjNDM7CSAqIGhvdHBsdWcgaGVyZSBhbmQgcmUtZW5hYmxlIGl0IGluIHNucF9zaHV0ZG93bigpLgomIzQzOwkgKi8KJiM0MzsJY3B1X2hvdHBsdWdfZGlzYWJsZSgpOwogCiAJaWYgKCFjcHVtYXNrX2VxdWFsKGNwdV9vbmxpbmVfbWFzaywgY3B1X3ByZXNlbnRfbWFzaykpIHsKLQkJcmV0ID0gLUVPUE5PVFNVUFA7CiYjNDM7CQljcHVfaG90cGx1Z19lbmFibGUoKTsKIAkJcHJfd2FybigmIzM0O1NOUCBpbml0IGZhaWxlZDogbm90IGFsbCBDUFVzIG9ubGluZS4gKCUqcGJsIG9ubGluZSAmbHQ7LSZndDsgJSpwYmwgcHJlc2VudCBtYXNrcykuXG4mIzM0OywKIAkJCWNwdW1hc2tfcHJfYXJncyhjcHVfb25saW5lX21hc2spLAogCQkJY3B1bWFza19wcl9hcmdzKGNwdV9wcmVzZW50X21hc2spKTsKLQkJZ290byB1bmxvY2s7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCiAJd2JpbnZkX29uX2FsbF9jcHVzKCk7CkBAIC01NDgsMTQgJiM0Mzs1NjMsMzUgQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpCiAJLyogU05QX0lOSVQgcmVxdWlyZXMgTVNSX1ZNX0hTQVZFX1BBIHRvIGJlIGNsZWFyZWQgb24gYWxsIENQVXMuICovCiAJb25fZWFjaF9jcHUoY2xlYXJfaHNhdmVfcGEsIE5VTEwsIDEpOwogCi0JcmV0ID0gMDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3ByZXBhcmUsICYjMzQ7Y2NwJiMzNDspOwogCi11bmxvY2s6Ci0JY3B1c19yZWFkX3VubG9jaygpOwomIzQzO3N0YXRpYyB2b2lkIHJtcG9wdF9kaXNhYmxlKHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgY3B1OwogCi0JcmV0dXJuIHJldDsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7cm1wb3B0X3dxX211dGV4KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogcm1wb3B0X3dxIGlzIG5vbi1OVUxMIG9ubHkgYWZ0ZXIgUk1QT1BUIGhhcyBiZWVuIGZ1bGx5IHNldCB1cDogdGhlCiYjNDM7CSAqIHdvcmtxdWV1ZSBpcyBhbGxvY2F0ZWQgYW5kIHRoZSBSTVBPUFRfQkFTRSBNU1JzIGFyZSBwcm9ncmFtbWVkLgomIzQzOwkgKiBzbnBfc2V0dXBfcm1wb3B0KCkgcmVzZXRzIGl0IHRvIE5VTEwgaWYgYW55IG9mIHRob3NlIHN0ZXBzIGZhaWwsIHNvIGEKJiM0MzsJICogTlVMTCBybXBvcHRfd3EgbWVhbnMgbm90aGluZyB3YXMgc2V0IHVwIGFuZCB0aGVyZSBpcyBub3RoaW5nIHRvIHRlYXIKJiM0MzsJICogZG93bi4KJiM0MzsJICovCiYjNDM7CWlmICghcm1wb3B0X3dxKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtybXBvcHRfZGVsYXllZF93b3JrKTsKJiM0MzsJZGVzdHJveV93b3JrcXVldWUocm1wb3B0X3dxKTsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfY3B1KGNwdSwgY3B1X3ByaW1hcnlfdGhyZWFkX21hc2spCiYjNDM7CQl3cm1zcnFfb25fY3B1KGNwdSwgTVNSX0FNRDY0X1JNUE9QVF9CQVNFLCAwKTsKJiM0MzsKJiM0MzsJcm1wb3B0X3BhX3N0YXJ0ID0gcm1wb3B0X3BhX2VuZCA9IDA7CiYjNDM7CXJtcG9wdF93cSA9IE5VTEw7CiB9Ci1FWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9wcmVwYXJlLCAmIzM0O2NjcCYjMzQ7KTsKIAogdm9pZCBzbnBfc2h1dGRvd24odm9pZCkKIHsKQEAgLTU2NSwxMSAmIzQzOzYwMSwxNTYgQEAgdm9pZCBzbnBfc2h1dGRvd24odm9pZCkKIAlpZiAoc3lzY2ZnICZhbXA7IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKQogCQlyZXR1cm47CiAKJiM0MzsJcm1wb3B0X2Rpc2FibGUoKTsKJiM0MzsKIAljbGVhcl9ybXAoKTsKIAlvbl9lYWNoX2NwdShtZmRfcmVjb25maWd1cmUsIE5VTEwsIDEpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgZmlybXdhcmUgaGFzIGRpc2FibGVkIFNOUCAoU25wRW4gaXMgY2xlYXIpLCBzbyByZS1lbmFibGUgQ1BVCiYjNDM7CSAqIGhvdHBsdWcuICBBIGxlZ2FjeSBTTlAgc2h1dGRvd24gcmV0dXJucyBhYm92ZSB3aXRoIFNucEVuIHN0aWxsIHNldCBhbmQKJiM0MzsJICogbGVhdmVzIGhvdHBsdWcgZGlzYWJsZWQuCiYjNDM7CSAqLwomIzQzOwljcHVfaG90cGx1Z19lbmFibGUoKTsKIH0KIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCAmIzM0O2NjcCYjMzQ7KTsKIAomIzQzO3N0YXRpYyBib29sIHJtcG9wdF9jYXBhYmxlKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9STVBPUFQpICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUk1QT1BUIG9wdGltaXphdGlvbnMgc2tpcCBSTVAgY2hlY2tzIGF0IDFHQiBncmFudWxhcml0eSBpZiB0aGlzIHJhbmdlIG9mCiYjNDM7ICogbWVtb3J5IGRvZXMgbm90IGNvbnRhaW4gYW55IFNOUCBndWVzdCBtZW1vcnkuCiYjNDM7ICoKJiM0MzsgKiBAcGEgaXMgYSBzeXN0ZW0gcGh5c2ljYWwgYWRkcmVzczsgUk1QT1BUIG9wZXJhdGVzIG9uIHRoZSBjb250YWluaW5nIDFHQi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBybXBvcHQodTY0IHBhKQomIzQzO3sKJiM0MzsJZW51bSBybXBvcHRfb3BfdHlwZSBvcCA9IFJNUE9QVF9PUF9WRVJJRllfQU5EX1JFUE9SVF9TVEFUVVM7CiYjNDM7CXU2NCBwYV9zdGFydCA9IEFMSUdOX0RPV04ocGEsIFNaXzFHKTsKJiM0MzsKJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7LmJ5dGUgMHhmMiwgMHgwZiwgMHgwMSwgMHhmYyYjMzQ7CiYjNDM7CQkgICAgIDo6ICYjMzQ7YSYjMzQ7IChwYV9zdGFydCksICYjMzQ7YyYjMzQ7IChvcCkKJiM0MzsJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MzsvKiBvbl9lYWNoX2NwdSgpIGNhbGxiYWNrOiBvcHRpbWl6ZSB0aGUgd2hvbGUgUk1QT1BUIHJhbmdlIG9uIHRoaXMgQ1BVLiAqLwomIzQzO3N0YXRpYyB2b2lkIHJtcG9wdF9zY2FuX3JhbmdlKHZvaWQgKmFyZykKJiM0Mzt7CiYjNDM7CXU2NCBwYTsKJiM0MzsKJiM0MzsJZm9yIChwYSA9IHJtcG9wdF9wYV9zdGFydDsgcGEgJmx0OyBybXBvcHRfcGFfZW5kOyBwYSAmIzQzOz0gU1pfMUcpCiYjNDM7CQlybXBvcHQocGEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkb19ybXBvcHRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBSTVBPUFQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGEgUk1QIHRhYmxlIHNjYW4gaW4gcmVzZXJ2ZWQgcHJvY2Vzc29yCiYjNDM7CSAqIG1lbW9yeSwgYWxsb3dpbmcgZnV0dXJlIGludm9jYXRpb25zIHRvIHNraXAgc3VjaCBjb3N0bHkgb3BlcmF0aW9ucy4KJiM0MzsJICovCiYjNDM7CW1pZ3JhdGVfZGlzYWJsZSgpOwomIzQzOwlybXBvcHRfc2Nhbl9yYW5nZShOVUxMKTsKJiM0MzsJbWlncmF0ZV9lbmFibGUoKTsKJiM0MzsKJiM0MzsJb25fZWFjaF9jcHVfbWFzayhjcHVfcHJpbWFyeV90aHJlYWRfbWFzaywgcm1wb3B0X3NjYW5fcmFuZ2UsIE5VTEwsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIERlbGF5LCBpbiBtaWxsaXNlY29uZHMsIGJlZm9yZSB0aGUgUk1QIHJlLW9wdGltaXphdGlvbiBwYXNzIHJ1bnMgYWZ0ZXIgYW4KJiM0MzsgKiBTTlAgZ3Vlc3QgaXMgdG9ybiBkb3duLiAgc25wX3JtcG9wdF9hbGxfcGh5c21lbSgpIHJlLWFybXMgdGhlIGRlbGF5ZWQgd29yawomIzQzOyAqIHdpdGggbW9kX2RlbGF5ZWRfd29yaygpIG9uIGVhY2ggdGVhcmRvd24sIHNvIHRoZSBwYXNzIGZpcmVzIHRoaXMgbG9uZyBhZnRlcgomIzQzOyAqIHRoZSBsYXN0IHRlYXJkb3duLiAgVGhpcyBjb2FsZXNjZXMgYSBidXJzdCBvZiB0ZWFyZG93bnMgaW50byBhIHNpbmdsZSBzY2FuCiYjNDM7ICogYW5kIGdpdmVzIGVhY2ggZ3Vlc3QmIzM5O3MgcGFnZXMgdGltZSB0byBiZSBjb252ZXJ0ZWQgYmFjayB0byB0aGUgc2hhcmVkLAomIzQzOyAqIGh5cGVydmlzb3Itb3duZWQgc3RhdGUgYmVmb3JlIHRoZSBzY2FuIHJlLW9wdGltaXplcyB0aGVpciAxR0IgcmVnaW9ucy4gIFRoZQomIzQzOyAqIDEwIHNlY29uZCB2YWx1ZSBpcyBhIGhldXJpc3RpYyB0cmFkaW5nIHJlLW9wdGltaXphdGlvbiBsYXRlbmN5IGFnYWluc3QKJiM0MzsgKiBzY2FubmluZyB0b28gZWFnZXJseS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFJNUE9QVF9XT1JLX1RJTUVPVVQJKDEwICogTVNFQ19QRVJfU0VDKQomIzQzOwomIzQzO3ZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKCFybXBvcHRfY2FwYWJsZSgpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDtybXBvcHRfd3FfbXV0ZXgpOwomIzQzOwomIzQzOwlpZiAoIXJtcG9wdF93cSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbW9kX2RlbGF5ZWRfd29yayhybXBvcHRfd3EsICZhbXA7cm1wb3B0X2RlbGF5ZWRfd29yaywKJiM0MzsJCQkgbXNlY3NfdG9famlmZmllcyhSTVBPUFRfV09SS19USU1FT1VUKSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3JtcG9wdF9hbGxfcGh5c21lbSwgJiMzNDtrdm0tYW1kJiMzNDspOwomIzQzOwomIzQzO3ZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKQomIzQzO3sKJiM0MzsJdTY0IHJtcG9wdF9iYXNlOwomIzQzOwlpbnQgY3B1OwomIzQzOwomIzQzOwlpZiAoIXJtcG9wdF9jYXBhYmxlKCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3JtcG9wdF93cV9tdXRleCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE9uIHJlLWluaXRpYWxpemF0aW9uIGFmdGVyIGEgbGVnYWN5IFNOUCBzaHV0ZG93biAoU05QX1NIVVRET1dOX0VYCiYjNDM7CSAqIHdpdGggeDg2X3NucF9zaHV0ZG93bj0wKSwgc25wX3NodXRkb3duKCkgYW5kIHRodXMgcm1wb3B0X2Rpc2FibGUoKSBhcmUKJiM0MzsJICogc2tpcHBlZCwgc28gdGhlIHdvcmtxdWV1ZSwgZGVsYXllZCB3b3JrIGFuZCBwZXItQ1BVIFJNUE9QVF9CQVNFIE1TUnMKJiM0MzsJICogYXJlIHN0aWxsIHNldCB1cCBhbmQgdmFsaWQgKFNucEVuIHN0YXllZCBzZXQgYW5kIENQVSBob3RwbHVnIHN0YXllZAomIzQzOwkgKiBkaXNhYmxlZCkuICBSYXRoZXIgdGhhbiByZS1kb2luZyB0aGUgc2V0dXAsIHdoaWNoIHdvdWxkIGxlYWsgdGhlCiYjNDM7CSAqIGV4aXN0aW5nIHN0YXRlLCBqdXN0IHJlLXF1ZXVlIHRoZSBvcHRpbWl6YXRpb24gcGFzcyB0byByZS1vcHRpbWl6ZSBhbnkKJiM0MzsJICogbWVtb3J5IHRoZSBwcmV2aW91cyBTTlAgc2Vzc2lvbiBkZS1vcHRpbWl6ZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAocm1wb3B0X3dxKSB7CiYjNDM7CQlxdWV1ZV9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCAmYW1wO3JtcG9wdF9kZWxheWVkX3dvcmssIDApOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIENyZWF0ZSBhbiBSTVBPUFQtc3BlY2lmaWMgd29ya3F1ZXVlIHRvIGF2b2lkIHNjaGVkdWxpbmcKJiM0MzsJICogUk1QT1BUIHdvcmtpdGVtIG9uIHRoZSBnbG9iYWwgc3lzdGVtIHdvcmtxdWV1ZS4KJiM0MzsJICovCiYjNDM7CXJtcG9wdF93cSA9IGFsbG9jX3dvcmtxdWV1ZSgmIzM0O3JtcG9wdF93cSYjMzQ7LCBXUV9VTkJPVU5ELCAxKTsKJiM0MzsJaWYgKCFybXBvcHRfd3EpIHsKJiM0MzsJCXByX2VycigmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBSTVBPUFQgd29ya3F1ZXVlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJSU5JVF9ERUxBWUVEX1dPUksoJmFtcDtybXBvcHRfZGVsYXllZF93b3JrLCBkb19ybXBvcHRfd29yayk7CiYjNDM7CiYjNDM7CXJtcG9wdF9wYV9zdGFydCA9IEFMSUdOX0RPV04oUEZOX1BIWVMobWluX2xvd19wZm4pLCBTWl8xRyk7CiYjNDM7CXJtcG9wdF9iYXNlID0gcm1wb3B0X3BhX3N0YXJ0IHwgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEU7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFBlci1DUFUgUk1QT1BUIHRhYmxlcyBjb3ZlciBhdCBtb3N0IDIgVEIuICBQcm9ncmFtIGVhY2ggY29yZSYjMzk7cwomIzQzOwkgKiBSTVBPUFRfQkFTRSB3aXRoIHRoZSBzdGFydCBvZiBSQU0gdG8gb3B0aW1pemUgdXAgdG8gMiBUQi4KJiM0MzsJICovCiYjNDM7CWZvcl9lYWNoX2NwdShjcHUsIGNwdV9wcmltYXJ5X3RocmVhZF9tYXNrKQomIzQzOwkJd3Jtc3JxX29uX2NwdShjcHUsIE1TUl9BTUQ2NF9STVBPUFRfQkFTRSwgcm1wb3B0X2Jhc2UpOwomIzQzOwomIzQzOwlybXBvcHRfcGFfZW5kID0gQUxJR04oUEZOX1BIWVMobWF4X3BmbiksIFNaXzFHKTsKJiM0MzsKJiM0MzsJLyogTGltaXQgbWVtb3J5IHNjYW5uaW5nIHRvIDJUQiBvZiBSQU0gKi8KJiM0MzsJaWYgKChybXBvcHRfcGFfZW5kIC0gcm1wb3B0X3BhX3N0YXJ0KSAmZ3Q7IFNaXzJUKSB7CiYjNDM7CQlwcl9pbmZvKCYjMzQ7Uk1QT1BUIGNvdmVyYWdlIGxpbWl0ZWQgdG8gMlRCOyBtZW1vcnkgYWJvdmUgMHglbGx4IG5vdCBvcHRpbWl6ZWRcbiYjMzQ7LAomIzQzOwkJCXJtcG9wdF9wYV9zdGFydCAmIzQzOyBTWl8yVCk7CiYjNDM7CQlybXBvcHRfcGFfZW5kID0gcm1wb3B0X3BhX3N0YXJ0ICYjNDM7IFNaXzJUOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE9uY2UgYWxsIHBlci1DUFUgUk1QT1BUIHRhYmxlcyBoYXZlIGJlZW4gY29uZmlndXJlZCwgZW5hYmxlIFJNUE9QVAomIzQzOwkgKiBvcHRpbWl6YXRpb25zIG9uIGFsbCBwaHlzaWNhbCBtZW1vcnkuCiYjNDM7CSAqLwomIzQzOwlxdWV1ZV9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCAmYW1wO3JtcG9wdF9kZWxheWVkX3dvcmssIDApOwomIzQzOwomIzQzOwlwcl9pbmZvKCYjMzQ7Uk1QT1BUIG9wdGltaXphdGlvbnMgZW5hYmxlZFxuJiMzNDspOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zZXR1cF9ybXBvcHQsICYjMzQ7Y2NwJiMzNDspOwomIzQzOwogLyoKICAqIERvIHRoZSBuZWNlc3NhcnkgcHJlcGFyYXRpb25zIHdoaWNoIGFyZSB2ZXJpZmllZCBieSB0aGUgZmlybXdhcmUgYXMKICAqIGRlc2NyaWJlZCBpbiB0aGUgU05QX0lOSVRfRVggZmlybXdhcmUgY29tbWFuZCBkZXNjcmlwdGlvbiBpbiB0aGUgU05QCkBAIC01NzcsNiAmIzQzOzc1OCw4IEBAIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCAmIzM0O2NjcCYjMzQ7KTsKICAqLwogaW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKQogewomIzQzOwl1NjQgdmFsOwomIzQzOwogCWlmIChXQVJOX09OX09OQ0UoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpKQogCQlyZXR1cm4gLUVOT1NZUzsKIApAQCAtNTg2LDYgJiM0Mzs3NjksMTUgQEAgaW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKQogCWlmICghc2V0dXBfcm1wdGFibGUoKSkKIAkJcmV0dXJuIC1FTk9TWVM7CiAKJiM0MzsJLyoKJiM0MzsJICogT24gYSBrZXhlYyBib290IFNOUCBtYXkgYWxyZWFkeSBiZSBlbmFibGVkIChsZWdhY3kgZmlybXdhcmUgbGVhdmVzCiYjNDM7CSAqIFNucEVuIHNldCBhY3Jvc3Mgc2h1dGRvd24pLCBpbiB3aGljaCBjYXNlIHNucF9wcmVwYXJlKCkgYmFpbHMgd2l0aG91dAomIzQzOwkgKiBkaXNhYmxpbmcgQ1BVIGhvdHBsdWcsIHNvIGRpc2FibGUgaXQgaGVyZS4KJiM0MzsJICovCiYjNDM7CXJkbXNycShNU1JfQU1ENjRfU1lTQ0ZHLCB2YWwpOwomIzQzOwlpZiAodmFsICZhbXA7IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKQomIzQzOwkJY3B1X2hvdHBsdWdfZGlzYWJsZSgpOwomIzQzOwogCS8qCiAJICogU2V0dGluZyBjcmFzaF9rZXhlY19wb3N0X25vdGlmaWVycyB0byAmIzM5O3RydWUmIzM5OyB0byBlbnN1cmUgdGhhdCBTTlAgcGFuaWMKIAkgKiBub3RpZmllciBpcyBpbnZva2VkIHRvIGRvIFNOUCBJT01NVSBzaHV0ZG93biBiZWZvcmUga2R1bXAuCkBAIC02ODMsMTMgJiM0Mzs4NzUsMjEgQEAgc3RhdGljIGJvb2wgcHJvYmVfc2VnbWVudGVkX3JtcHRhYmxlX2luZm8odm9pZCkKIAogYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKQogewotCWlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFR01FTlRFRF9STVApKQomIzQzOwlpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TRUdNRU5URURfUk1QKSkgewogCQlyZG1zcnEoTVNSX0FNRDY0X1JNUF9DRkcsIHJtcF9jZmcpOwogCi0JaWYgKHJtcF9jZmcgJmFtcDsgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRCkKLQkJcmV0dXJuIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKCk7Ci0JZWxzZQotCQlyZXR1cm4gcHJvYmVfY29udGlndW91c19ybXB0YWJsZV9pbmZvKCk7CiYjNDM7CQlpZiAocm1wX2NmZyAmYW1wOyBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEKQomIzQzOwkJCXJldHVybiBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbygpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNlZ21lbnRlZCBSTVAgaXMgZWl0aGVyIG5vdCBzdXBwb3J0ZWQgb24gdGhlIHBsYXRmb3JtIG9yIGlzCiYjNDM7CSAqIGRpc2FibGVkIGJ5IHRoZSBmaXJtd2FyZS4gIFJNUE9QVCBpcyBub3Qgc3VwcG9ydGVkIHdpdGhvdXQKJiM0MzsJICogc2VnbWVudGVkIFJNUC4KJiM0MzsJICovCiYjNDM7CXNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfUk1QT1BUKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHByb2JlX2NvbnRpZ3VvdXNfcm1wdGFibGVfaW5mbygpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMKaW5kZXggZjgzM2NiN2U0ZGEzNi4uMjg3YTgzNDU4NTRiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jCkBAIC0xNjYzLDYgJiM0MzsxNjYzLDggQEAgc3RhdGljIGludCBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoaW50ICplcnJvciwgdW5zaWduZWQgaW50IG1heF9zbnBfYXNpZCkKIAogCXNldl9lc190bXJfc2l6ZSA9IFNOUF9UTVJfU0laRTsKIAomIzQzOwlzbnBfc2V0dXBfcm1wb3B0KCk7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI2MwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDY1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNFVi1TTlAgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpczogaXMgdGhpcyBwYXRjaCBmdXp6LXdvcnRoeSwgYW5kIGlmIHNvLCBob3cgZG8gd2UgYmVzdCBhcHByb2FjaCBpdD8gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBjaGFuZ2VkLiBMb29rcyBsaWtlIHdlJiMzOTt2ZSBnb3Qgc29tZSBuZXcgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBgUk1QT1BUYCAoUmVzdHJpY3RlZCBNZW1vcnkgUHJvdGVjdGlvbiBPcHRpb25hbCkgaW4gdGhlIGB4ODZgIGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gQU1EIFNFVi1TTlAgKFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gLSBTZWN1cmUgTmVzdGVkIFBhZ2luZykuCgpJIHNlZSBoZWFkZXIgZmlsZXMgZGVmaW5pbmcgYFg4Nl9GRUFUVVJFX1JNUE9QVGAsIE1TUnMgbGlrZSBgTVNSX0FNRDY0X1JNUE9QVF9CQVNFYCwgYW5kIHNvbWUgc3VwcG9ydGluZyBmdW5jdGlvbnMgbGlrZSBgc25wX3JtcG9wdF9hbGxfcGh5c21lbWAgYW5kIGBzbnBfc2V0dXBfcm1wb3B0YC4gVGhlIGNoYW5nZXMgYXJlIHNwcmVhZCBhY3Jvc3MgdmFyaW91cyBwYXJ0cyBvZiB0aGUga2VybmVsLiBXZSYjMzk7cmUgdG91Y2hpbmcgYGNwdWZlYXR1cmVzLmhgLCBgbXNyLWluZGV4LmhgLCBgc2V2LmhgLCB0aGUgYHNjYXR0ZXJlZC5jYCBmaWxlICh3aGljaCBub3cgaW5jbHVkZXMgdGhlIGBYODZfRkVBVFVSRV9STVBPUFRgKSwgYW5kIHRoZW4gYm90aCB0aGUgS1ZNIGFuZCBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbiBTVk0gY29kZS4gSXQgc2VlbXMgbGlrZSB0aGUgS1ZNIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gZW5hYmxpbmcgYW5kIGRpc2FibGluZyBgUk1QT1BUYCwgYW5kIHRoZSBTRVYtU05QIGhvc3Qgc2V0dXAuIFRoZSBjcnlwdG8gZHJpdmVyIGFsc28gZ2V0cyBpbnZvbHZlZCwgY2FsbGluZyBgc25wX3NldHVwX3JtcG9wdCgpYCB3aXRoaW4gYHNldl9zbnBfaW5pdF9sb2NrZWQoKWAuCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogY2FuIHdlIGV2ZW4gKmZ1enoqIHRoaXMgaW4gYSB0eXBpY2FsIGVudmlyb25tZW50PyBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBTRVYtU05QJiMzOTtzIHJlbGlhbmNlIG9uIHNwZWNpZmljIEFNRCBoYXJkd2FyZSBhbmQgcG90ZW50aWFsbHkgYSBzcGVjaWZpYyBDQ1AgKENyeXB0b2dyYXBoaWMgQ29wcm9jZXNzb3IpIG9yIGZpcm13YXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgcmVhbGlzdGljYWxseSByZWFjaGFibGUgaW4gYSBRRU1VIHNldHVwLCBvciBHQ0UgZm9yIHRoYXQgbWF0dGVyLCBvciBpZiB3ZSYjMzk7cmUgZ29pbmcgdG8gbmVlZCBzb21lIGN1c3RvbSBlbnZpcm9ubWVudCB0byB0cmlnZ2VyIHRoZSBuZXcgY29kZSBwYXRocy4KCkkgbmVlZCB0byBjb25maXJtIGlmIHdlIGNhbiBydW4gdGhlIEFNRCBTRVYtU05QIGhvc3QgaW4gc3RhbmRhcmQgUUVNVS9uZXN0ZWQgdmlydHVhbGl6YXRpb24sIG9yIGlmIGl0IHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlL2Zpcm13YXJlLCBsZXQmIzM5O3MgdmVyaWZ5IGhvdyBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAgd29ya3MsIG9yIHdoYXQgdGhlIEtjb25maWcgc2V0dGluZ3MgYXJlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnLCBwcm9iYWJseSB1c2UgZ3JlcCwgb3IganVzdCByZWFkIHRoZSBjb2RlIHRvIHNlZSBob3cgU0VWLVNOUCBpcyBjb25maWd1cmVkLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgdGhhdCB3ZSBuZWVkIHRvIGFjY291bnQgZm9yLiBJZiBpdCYjMzk7cyBhIGhhcmR3YXJlLWdhdGVkIGZlYXR1cmUsIHRoYXQmIzM5O3MgYSB3aG9sZSBkaWZmZXJlbnQgYmFsbGdhbWUgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q0NfQVRUUl9IT1NUX1NFVl9TTlAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvY29jby9jb3JlLmM9NzA9c3RhdGljIGJvb2wgbm9pbnN0ciBhbWRfY2NfcGxhdGZvcm1faGFzKGVudW0gY2NfYXR0ciBhdHRyKVxuLS1cbmFyY2gveDg2L2NvY28vY29yZS5jLTEwMy1cbmFyY2gveDg2L2NvY28vY29yZS5jOjEwNDpcdGNhc2UgQ0NfQVRUUl9IT1NUX1NFVl9TTlA6XG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xMDUtXHRcdHJldHVybiBjY19mbGFncy5ob3N0X3Nldl9zbnA7XG4tLVxuYXJjaC94ODYvY29jby9jb3JlLmM9MTcwPXN0YXRpYyB2b2lkIGFtZF9jY19wbGF0Zm9ybV9jbGVhcihlbnVtIGNjX2F0dHIgYXR0cilcbi0tXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xNzItXHRzd2l0Y2ggKGF0dHIpIHtcbmFyY2gveDg2L2NvY28vY29yZS5jOjE3MzpcdGNhc2UgQ0NfQVRUUl9IT1NUX1NFVl9TTlA6XG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xNzQtXHRcdGNjX2ZsYWdzLmhvc3Rfc2V2X3NucCA9IDA7XG4tLVxuYXJjaC94ODYvY29jby9jb3JlLmM9MTkyPXN0YXRpYyB2b2lkIGFtZF9jY19wbGF0Zm9ybV9zZXQoZW51bSBjY19hdHRyIGF0dHIpXG4tLVxuYXJjaC94ODYvY29jby9jb3JlLmMtMTk0LVx0c3dpdGNoIChhdHRyKSB7XG5hcmNoL3g4Ni9jb2NvL2NvcmUuYzoxOTU6XHRjYXNlIENDX0FUVFJfSE9TVF9TRVZfU05QOlxuYXJjaC94ODYvY29jby9jb3JlLmMtMTk2LVx0XHRjY19mbGFncy5ob3N0X3Nldl9zbnAgPSAxO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM9MzU2PXN0YXRpYyB2b2lkIGJzcF9kZXRlcm1pbmVfc25wKHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3My1cdFx0ICAgIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKCkpIHtcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM6Mzc0Olx0XHRcdGNjX3BsYXRmb3JtX3NldChDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3NS1cdFx0fSBlbHNlIHtcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMtMzc2LVx0XHRcdHNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfU0VWX1NOUCk7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jOjM3NzpcdFx0XHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3OC1cdFx0fVxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmM9MTA0PXN0YXRpYyBpbmxpbmUgdm9pZCBrOF9jaGVja19zeXNjZmdfZHJhbV9tb2RfZW4odm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jLTExMS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmM6MTEyOlx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jLTExMy1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTEyNTc9c3RhdGljIGJvb2wgX19pbml0IGF2aWNfd2FudF9hdmljX2VuYWJsZWQodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMjgwLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTI4MTpcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTI4Mi1cdCAgICAhYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0hWX0lOVVNFX1dSX0FMTE9XRUQpKSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xMjU5PXN0YXRpYyB2b2lkICpzZXZfZGJnX2NyeXB0X3Nsb3dfYWxsb2Moc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgX192YSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEyOTMtXHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTI5NDpcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMjk1LVx0XHRyZXR1cm4gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xMzAwPXN0YXRpYyB2b2lkIHNldl9kYmdfY3J5cHRfc2xvd19mcmVlKHZvaWQgKmJ1ZilcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMwMS17XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEzMDI6XHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTMwMy1cdFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1Zik7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0zMDk2PXZvaWQgX19pbml0IHNldl9oYXJkd2FyZV9zZXR1cCh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzIwMC1cdHNldl9lc19zdXBwb3J0ZWQgPSB0cnVlO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjAxOlx0c2V2X3NucF9zdXBwb3J0ZWQgPSBzZXZfc25wX2VuYWJsZWQgXHUwMDI2XHUwMDI2IGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMDItXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00OTk1PXN0cnVjdCBwYWdlICpzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUoaW50IG5vZGUsIGdmcF90IGdmcClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5OTktXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUwMDA6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUwMDEtXHRcdHJldHVybiBhbGxvY19wYWdlc19ub2RlKG5vZGUsIGdmcCB8IF9fR0ZQX1pFUk8sIDApO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NTIxMz12b2lkIHNldl9nbWVtX21ha2Vfc2hhcmVkKGt2bV9wZm5fdCBwZm4sIGt2bV9wZm5fdCBucl9wYWdlcylcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUyMTYtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUyMTc6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUyMTgtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdC5jPTEwMj12b2lkIF9faW5pdCBtZW1fZW5jcnlwdF9zZXR1cF9hcmNoKHZvaWQpXG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHQuYy0xMTAtXHQgKi9cbmFyY2gveDg2L21tL21lbV9lbmNyeXB0LmM6MTExOlx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdC5jLTExMi1cdFx0c25wX2ZpeHVwX2U4MjBfdGFibGVzKCk7XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vY21kbGluZS5jPTE5PXN0YXRpYyBpbnQgX19pbml0IGluaXRfc2V2X2NvbmZpZyhjaGFyICpzdHIpXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vY21kbGluZS5jLTMxLVx0XHRcdFx0c2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9TRVZfU05QKTtcbmFyY2gveDg2L3ZpcnQvc3ZtL2NtZGxpbmUuYzozMjpcdFx0XHRcdGNjX3BsYXRmb3JtX2NsZWFyKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbmFyY2gveDg2L3ZpcnQvc3ZtL2NtZGxpbmUuYy0zMy1cdFx0XHRcdGNvbnRpbnVlO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTE0Nz1zdGF0aWMgdm9pZCBtZmRfcmVjb25maWd1cmUodm9pZCAqYXJnKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTQ4LXtcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjE0OTpcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTE1MC1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTE1OD1zdGF0aWMgdm9pZCBzbnBfZW5hYmxlKHZvaWQgKmFyZylcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xNjEtXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxNjI6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xNjMtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0yNjA9c3RhdGljIHZvaWQgY2xlYXJfcm1wKHZvaWQpXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMjY0LVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MjY1Olx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMjY2LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9NjE4PXN0YXRpYyBib29sIHJtcG9wdF9jYXBhYmxlKHZvaWQpXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNjIwLVx0cmV0dXJuIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QT1BUKSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjYyMTpcdCAgICAgICBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNjIyLX1cbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz03NTk9aW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTc2Mi1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjc2MzpcdGlmIChXQVJOX09OX09OQ0UoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNzY0LVx0XHRyZXR1cm4gLUVOT1NZUztcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz05Njg9c3RhdGljIGludCBfX3NucF9sb29rdXBfcm1wZW50cnkodTY0IHBmbiwgc3RydWN0IHJtcGVudHJ5ICplLCBpbnQgKmxldmVsKVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTk3Mi1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjk3MzpcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTk3NC1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MTA5ND1pbnQgcHNtYXNoKHU2NCBwZm4pXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTA5OC1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjEwOTk6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMTAwLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xMjAzPXN0YXRpYyBpbnQgcm1wdXBkYXRlKHU2NCBwZm4sIHN0cnVjdCBybXBfc3RhdGUgKnN0YXRlKVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTEyMDctXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxMjA4Olx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTIwOS1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MTI5Nj12b2lkIGtkdW1wX3Nldl9jYWxsYmFjayh2b2lkKVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTEzMDEtXHQgKi9cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjEzMDI6XHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTEzMDMtXHRcdHdiaW52ZCgpO1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MTUwOD1zdGF0aWMgaW50IF9fc2V2X3NucF9pbml0X2xvY2tlZChpbnQgKmVycm9yLCB1bnNpZ25lZCBpbnQgbWF4X3NucF9hc2lkKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMTUxNi1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MTUxNzpcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMTUxOC1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0yMDY3PXN0YXRpYyBpbnQgc2V2X2dldF9hcGlfdmVyc2lvbih2b2lkKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjA3Ni1cdCAqL1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoyMDc3Olx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpIHtcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjA3OC1cdFx0cmV0ID0gc25wX2dldF9wbGF0Zm9ybV9kYXRhKHNldiwgXHUwMDI2ZXJyb3IpO1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9Mjk3Nz11NjQgc2V2X2dldF9zbnBfcG9saWN5X2JpdHModm9pZClcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTI5ODItXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjI5ODM6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTI5ODQtXHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYz0zMzk1PXN0YXRpYyBfX2luaXQgdm9pZCBpb21tdV9zbnBfZW5hYmxlKHZvaWQpXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMzOTctI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjMzOTg6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzM5OS1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNDQxLWRpc2FibGVfc25wOlxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjM0NDI6XHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzQ0My0jZW5kaWZcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9MzU2Nz1zdGF0aWMgaW50IF9faW5pdCBpb21tdV9nb190b19zdGF0ZShlbnVtIGlvbW11X2luaXRfc3RhdGUgc3RhdGUpXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM1ODctXHQgKi9cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozNTg4Olx0aWYgKHJldCBcdTAwMjZcdTAwMjYgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNTg5LVx0ICAgICFXQVJOX09OX09OQ0UoYW1kX2lvbW11X3NucF9lbikpXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzU5MDpcdFx0Y2NfcGxhdGZvcm1fY2xlYXIoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM1OTEtXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jPTM2OTQ9dm9pZCBfX2luaXQgYW1kX2lvbW11X2RldGVjdCh2b2lkKVxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNzEzLWRpc2FibGVfc25wOlxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjM3MTQ6XHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozNzE1Olx0XHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzcxNi19XG4tLVxuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oPTIyPWVudW0gY2NfYXR0ciB7XG4tLVxuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oLTkyLVx0LyoqXG5pbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmg6OTM6XHQgKiBAQ0NfQVRUUl9IT1NUX1NFVl9TTlA6IEFNRCBTTlAgZW5hYmxlZCBvbiB0aGUgaG9zdC5cbmluY2x1ZGUvbGludXgvY2NfcGxhdGZvcm0uaC05NC1cdCAqXG4tLVxuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oLTk3LVx0ICovXG5pbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmg6OTg6XHRDQ19BVFRSX0hPU1RfU0VWX1NOUCxcbmluY2x1ZGUvbGludXgvY2NfcGxhdGZvcm0uaC05OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUwNwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEVuYWJsaW5nIENvbmRpdGlvbnMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBwcmVjaXNlbHkgYWxsb3dzIHRoZSBzeXN0ZW0gdG8gdXRpbGl6ZSBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIGFuZCBgWDg2X0ZFQVRVUkVfUk1QT1BUYC4gTXkgaW50dWl0aW9uIHNheXMgaXQgd2lsbCBiZSBiYXNlZCBvbiBDUFUgZmxhZ3Mgb3Igc29tZSBvdGhlciBwbGF0Zm9ybSBmZWF0dXJlLiBUbyBnZXQgYSBoYW5kbGUgb24gdGhpcywgSSYjMzk7bGwgZGl2ZSBpbnRvIHRoZSBgYXJjaC94ODYva2VybmVsL2NwdS9hbWQuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBzdGFydCBhcm91bmQgbGluZSAzNTYsIGFzIHRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgcGxhY2UgZm9yIEFNRC1zcGVjaWZpYyBDUFUgZmVhdHVyZSBpbml0aWFsaXphdGlvbiBvciBkZXRlY3Rpb24gbG9naWMsIHdoZXJlIHRoZSBlbmFibGluZyBjb25kaXRpb25zIGZvciB0aGVzZSBmZWF0dXJlcyB3b3VsZCBsaWtlbHkgYmUgZGVmaW5lZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM1MDpcdFx0XHRcdG5vZGUgPSBuZWFyYnlfbm9kZShhcGljaWQpO1xuIDM1MTpcdFx0fVxuIDM1MjpcdFx0bnVtYV9zZXRfbm9kZShjcHUsIG5vZGUpO1xuIDM1MzpcdCNlbmRpZlxuIDM1NDpcdH1cbiAzNTU6XHRcbiAzNTY6XHRzdGF0aWMgdm9pZCBic3BfZGV0ZXJtaW5lX3NucChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXG4gMzU3Olx0e1xuIDM1ODpcdCNpZmRlZiBDT05GSUdfQVJDSF9IQVNfQ0NfUExBVEZPUk1cbiAzNTk6XHRcdGNjX3ZlbmRvciA9IENDX1ZFTkRPUl9BTUQ7XG4gMzYwOlx0XG4gMzYxOlx0XHRpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9TRVZfU05QKSkge1xuIDM2MjpcdFx0XHQvKlxuIDM2MzpcdFx0XHQgKiBSTVAgdGFibGUgZW50cnkgZm9ybWF0IGlzIG5vdCBhcmNoaXRlY3R1cmFsIGFuZCBpcyBkZWZpbmVkIGJ5IHRoZVxuIDM2NDpcdFx0XHQgKiBwZXItcHJvY2Vzc29yIFBQUi4gUmVzdHJpY3QgU05QIHN1cHBvcnQgb24gdGhlIGtub3duIENQVSBtb2RlbHNcbiAzNjU6XHRcdFx0ICogZm9yIHdoaWNoIHRoZSBSTVAgdGFibGUgZW50cnkgZm9ybWF0IGlzIGN1cnJlbnRseSBkZWZpbmVkIG9yIGZvclxuIDM2NjpcdFx0XHQgKiBwcm9jZXNzb3JzIHdoaWNoIHN1cHBvcnQgdGhlIGFyY2hpdGVjdHVyYWxseSBkZWZpbmVkIFJNUFJFQURcbiAzNjc6XHRcdFx0ICogaW5zdHJ1Y3Rpb24uXG4gMzY4Olx0XHRcdCAqL1xuIDM2OTpcdFx0XHRpZiAoIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUikgXHUwMDI2XHUwMDI2XG4gMzcwOlx0XHRcdCAgICAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9aRU4zKSB8fFxuIDM3MTpcdFx0XHQgICAgIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfWkVONCkgfHxcbiAzNzI6XHRcdFx0ICAgICBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUFJFQUQpKSBcdTAwMjZcdTAwMjZcbiAzNzM6XHRcdFx0ICAgIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKCkpIHtcbiAzNzQ6XHRcdFx0XHRjY19wbGF0Zm9ybV9zZXQoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuIDM3NTpcdFx0XHR9IGVsc2Uge1xuIDM3NjpcdFx0XHRcdHNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfU0VWX1NOUCk7XG4gMzc3Olx0XHRcdFx0Y2NfcGxhdGZvcm1fY2xlYXIoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuIDM3ODpcdFx0XHR9XG4gMzc5Olx0XHR9XG4gMzgwOlx0I2VuZGlmXG4gMzgxOlx0fVxuIDM4MjpcdFxuIDM4MzpcdCNkZWZpbmUgWkVOX01PREVMX1NURVBfVUNPREUoZmFtLCBtb2RlbCwgc3RlcCwgdWNvZGUpIFxcXG4gMzg0Olx0XHRYODZfTUFUQ0hfVkZNX1NURVBTKFZGTV9NQUtFKFg4Nl9WRU5ET1JfQU1ELCBmYW0sIG1vZGVsKSwgXFxcbiAzODU6XHRcdFx0XHQgICAgc3RlcCwgc3RlcCwgdWNvZGUpXG4gMzg2Olx0XG4gMzg3Olx0c3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfY3B1X2lkIGFtZF90c2FfbWljcm9jb2RlW10gPSB7XG4gMzg4Olx0XHRaRU5fTU9ERUxfU1RFUF9VQ09ERSgweDE5LCAweDAxLCAweDEsIDB4MGEwMDExZDcpLFxuIDM4OTpcdFx0WkVOX01PREVMX1NURVBfVUNPREUoMHgxOSwgMHgwMSwgMHgyLCAweDBhMDAxMjNiKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ5NQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDU3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBTRVYtU05QIGFuZCBSTVBPUFQgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTGluZSAzNjkgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWU6IGBpZiAoIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUikgJmFtcDsmYW1wOyAuLi5gLiAgVGhlIGNoZWNrIGZvciB0aGUgYWJzZW5jZSBvZiB0aGUgaHlwZXJ2aXNvciBmZWF0dXJlIGlzIGludGVyZXN0aW5nLiBJIGtub3cgdGhhdCBgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUmAgaXMgc2V0IHdpdGhpbiBhIGh5cGVydmlzb3IgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRSAoQ1BVSUQgbGVhZiAweDEgRUNYIGJpdCAzMSkuIFNvLCBiZWNhdXNlIG9mIHRoaXMsIGBic3BfZGV0ZXJtaW5lX3NucGAgaXMgY29ycmVjdGx5IGNsZWFyaW5nIGBYODZfRkVBVFVSRV9TRVZfU05QYCBhbmQgdGhlbiBjYWxsaW5nIGBjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUClgIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLgoKTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjb25maXJtIHRoZSBvYnZpb3VzIOKAkyBkb2VzIFFFTVUgZXZlbiAqZW11bGF0ZSogYSBTRVYtU05QIGhvc3Q/IEkga25vdyBpdCBkb2VzbiYjMzk7dC4gU0VWLVNOUCBuZWVkcyBiYXJlIG1ldGFsIEFNRCBoYXJkd2FyZSB3aXRoIHNwZWNpZmljIGNvbXBvbmVudHMgYW5kIEJJT1MvTVNSIHNldHRpbmdzLiBObyBzdXJwcmlzZXMgdGhlcmUuCgpBbHJpZ2h0LCBtb3Zpbmcgb24sIEkgc2VlIGEgbmV3IGluc3RydWN0aW9uIGluIHRoZSBjb2RlOiBgYXNtIHZvbGF0aWxlKCYjMzQ7LmJ5dGUgMHhmMiwgMHgwZiwgMHgwMSwgMHhmYyYjMzQ7IDo6ICYjMzQ7YSYjMzQ7IChwYV9zdGFydCksICYjMzQ7YyYjMzQ7IChvcCkgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDspO2AuIFRoaXMgaXMgYFJNUE9QVGAsIHdoaWNoIEkga25vdyBpcyBhbiBBTUQgWmVuNiBpbnN0cnVjdGlvbiAoQ1BVSUQgRm44MDAwXzAwMjVfRURYWzBdKS4KCkkgaGF2ZSB0byBsb29rIGF0IGBybXBvcHRfY2FwYWJsZSgpYC4gSSBzZWUgdGhlIGNoZWNrLCBhbmQgaXQmIzM5O3Mgd2hhdCBJJiMzOTtkIGV4cGVjdDoKCmBgYGMKc3RhdGljIGJvb2wgcm1wb3B0X2NhcGFibGUodm9pZCkKewoJcmV0dXJuIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QT1BUKSAmYW1wOyZhbXA7CgkgICAgICAgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTsKfQpgYGAKClRoZW4gSSBub3RpY2U6CgpgYGBjCnZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKQp7CglpZiAoIXJtcG9wdF9jYXBhYmxlKCkpCgkJcmV0dXJuOwouLi4KYGBgCgpgYGBjCnZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKQp7Ci4uLgoJaWYgKCFybXBvcHRfY2FwYWJsZSgpKQoJCXJldHVybjsKLi4uCmBgYAoKTWFrZXMgc2Vuc2UuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZ3VhcmRlZCBieSBgcm1wb3B0X2NhcGFibGUoKWAgYW5kIHNvIHdpbGwgbm90IGJlIGludm9rZWQgd2hlbiBydW5uaW5nIGluIGEgaHlwZXJ2aXNvci4KCk5vdywgbGV0JiMzOTtzIHNoaWZ0IGdlYXJzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQuIEkgbmVlZCB0byBjaGVjayBgc25wX3ByZXBhcmUoKWAsIGBzbnBfc2h1dGRvd24oKWAsIGFuZCBgc25wX3JtcHRhYmxlX2luaXQoKWAuCgpJIHNlZSBpbiBgc25wX3ByZXBhcmUoKWA6CgpgYGBjCmludCBzbnBfcHJlcGFyZSh2b2lkKQp7Ci4uLgoJY2xlYXJfcm1wKCk7CgljcHVfaG90cGx1Z19kaXNhYmxlKCk7Ci4uLgpgYGAKCkkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgdG8gc2VlIHdoZXJlIGBzbnBfcHJlcGFyZSgpYCBpcyBhY3R1YWxseSAqY2FsbGVkKiBmcm9tIGluIHRoZSBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgdG8gc2VlIGhvdyBhbGwgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbnBfcHJlcGFyZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02NjA9c3RhdGljIGlubGluZSB2b2lkIHNucF9sZWFrX3BhZ2VzKHU2NCBwZm4sIHVuc2lnbmVkIGludCBwYWdlcylcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaC02NjMtfVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjY0OmludCBzbnBfcHJlcGFyZSh2b2lkKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY2NS12b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg9NjgzPXN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfZml4dXBfZTgyMF90YWJsZXModm9pZCkge31cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjY4NDpzdGF0aWMgaW5saW5lIGludCBzbnBfcHJlcGFyZSh2b2lkKSB7IHJldHVybiAtRU5PREVWOyB9XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaC02ODUtc3RhdGljIGlubGluZSB2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCkge31cbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz01MjE9c3RhdGljIHZvaWQgY2xlYXJfaHNhdmVfcGEodm9pZCAqYXJnKVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTUyNS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjUyNjppbnQgc25wX3ByZXBhcmUodm9pZClcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTUyNy17XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNTY3LX1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjU2ODpFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9wcmVwYXJlLCBcJiMzNDtjY3BcJiMzNDspO1xuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNTY5LVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTc1OT1pbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNzczLVx0ICogT24gYSBrZXhlYyBib290IFNOUCBtYXkgYWxyZWFkeSBiZSBlbmFibGVkIChsZWdhY3kgZmlybXdhcmUgbGVhdmVzXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo3NzQ6XHQgKiBTbnBFbiBzZXQgYWNyb3NzIHNodXRkb3duKSwgaW4gd2hpY2ggY2FzZSBzbnBfcHJlcGFyZSgpIGJhaWxzIHdpdGhvdXRcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTc3NS1cdCAqIGRpc2FibGluZyBDUFUgaG90cGx1Zywgc28gZGlzYWJsZSBpdCBoZXJlLlxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MTUwOD1zdGF0aWMgaW50IF9fc2V2X3NucF9pbml0X2xvY2tlZChpbnQgKmVycm9yLCB1bnNpZ25lZCBpbnQgbWF4X3NucF9hc2lkKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMTUzMC1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MTUzMTpcdHJjID0gc25wX3ByZXBhcmUoKTtcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMTUzMi1cdGlmIChyYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQzMgoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBTRVYtU05QIERyaXZlcioqCgpPa2F5LCBzbyBgc25wX3ByZXBhcmUoKWAgaXMgYXBwYXJlbnRseSBvbmx5IGNhbGxlZCB3aXRoaW4gYGRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNgLCBzcGVjaWZpY2FsbHkgaW4gYF9fc2V2X3NucF9pbml0X2xvY2tlZCgpYC4gVGhhdCYjMzk7cyBnb29kLCBpdCBuYXJyb3dzIGRvd24gd2hlcmUgSSBuZWVkIHRvIGZvY3VzLiBOb3csIGxldCYjMzk7cyBzZWUsIGl0IGxvb2tzIGxpa2UgaXQgZG9lcyBzb21lIHF1aWNrIGNoZWNrcyBhdCB0aGUgYmVnaW5uaW5nOgoKYGBgYwoJaWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKQoJCXJldHVybiAtRU5PREVWOwpgYGAKClRoaXMgbWFrZXMgc3VyZSB0aGUgaG9zdCBhY3R1YWxseSBzdXBwb3J0cyBTRVYtU05QIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLiBTdGFuZGFyZCBzdHVmZi4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIHRoaW5nIGJldHRlci4gSSYjMzk7dmUgZ290IHRvIGZpbmQgb3V0IHdoZXJlIGBzbnBfc2h1dGRvd24oKWAgaXMgY2FsbGVkIGZyb20sIHNpbmNlIGl0JiMzOTtzIGxvZ2ljYWwgdGhhdCB0aGVyZSBzaG91bGQgYmUgYSBjb3JyZXNwb25kaW5nIHNodXRkb3duIGZ1bmN0aW9uLiBMZXQmIzM5O3MgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIxOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NucF9zaHV0ZG93biYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02NjY9dm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjY3OnZvaWQgc25wX3NodXRkb3duKHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjY4LSNlbHNlXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg9Njg2PXN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpIHt9XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaDo2ODc6c3RhdGljIGlubGluZSB2b2lkIHNucF9zaHV0ZG93bih2b2lkKSB7fVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjg4LSNlbmRpZlxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTUyNj1pbnQgc25wX3ByZXBhcmUodm9pZClcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy01NDEtXHQgKiBObyBDUFUgbWF5IGNvbWUgb25saW5lIHdpdGhvdXQgU25wRW4gd2hpbGUgU05QIGlzIGFjdGl2ZTsgZGlzYWJsZVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6NTQyOlx0ICogaG90cGx1ZyBoZXJlIGFuZCByZS1lbmFibGUgaXQgaW4gc25wX3NodXRkb3duKCkuXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy01NDMtXHQgKi9cbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz01NzA9c3RhdGljIHZvaWQgcm1wb3B0X2Rpc2FibGUodm9pZClcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy01OTUtXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo1OTY6dm9pZCBzbnBfc2h1dGRvd24odm9pZClcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTU5Ny17XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNjE1LX1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjYxNjpFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zaHV0ZG93biwgXCYjMzQ7Y2NwXCYjMzQ7KTtcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTYxNy1cbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz02ODk9dm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNzAwLVx0ICogT24gcmUtaW5pdGlhbGl6YXRpb24gYWZ0ZXIgYSBsZWdhY3kgU05QIHNodXRkb3duIChTTlBfU0hVVERPV05fRVhcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjcwMTpcdCAqIHdpdGggeDg2X3NucF9zaHV0ZG93bj0wKSwgc25wX3NodXRkb3duKCkgYW5kIHRodXMgcm1wb3B0X2Rpc2FibGUoKSBhcmVcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTcwMi1cdCAqIHNraXBwZWQsIHNvIHRoZSB3b3JrcXVldWUsIGRlbGF5ZWQgd29yayBhbmQgcGVyLUNQVSBSTVBPUFRfQkFTRSBNU1JzXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0xMzA9c3RhdGljIHZvaWQgX19zZXZfZmlybXdhcmVfc2h1dGRvd24oc3RydWN0IHNldl9kZXZpY2UgKnNldiwgYm9vbCBwYW5pYyk7XG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTEzMS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MTMyOnN0YXRpYyBpbnQgc25wX3NodXRkb3duX29uX3BhbmljKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTEzMy1cdFx0XHRcdCB1bnNpZ25lZCBsb25nIHJlYXNvbiwgdm9pZCAqYXJnKTtcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTEzNT1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHNucF9wYW5pY19ub3RpZmllciA9IHtcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MTM2Olx0Lm5vdGlmaWVyX2NhbGwgPSBzbnBfc2h1dGRvd25fb25fcGFuaWMsXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTEzNy19O1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MjAzPXN0YXRpYyBpbnQgc2V2X2NtZF9idWZmZXJfbGVuKGludCBjbWQpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMDctXHRjYXNlIFNFVl9DTURfSU5JVF9FWDogICAgICAgICAgICAgICAgICAgcmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2V2X2RhdGFfaW5pdF9leCk7XG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjIwODpcdGNhc2UgU0VWX0NNRF9TTlBfU0hVVERPV05fRVg6XHRcdHJldHVybiBzaXplb2Yoc3RydWN0IHNldl9kYXRhX3NucF9zaHV0ZG93bl9leCk7XG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIwOS1cdGNhc2UgU0VWX0NNRF9TTlBfSU5JVF9FWDpcdFx0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2V2X2RhdGFfc25wX2luaXRfZXgpO1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MjEzNj1zdGF0aWMgaW50IHNldl91cGRhdGVfZmlybXdhcmUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjE5MC1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MjE5MTpzdGF0aWMgaW50IF9fc2V2X3NucF9zaHV0ZG93bl9sb2NrZWQoaW50ICplcnJvciwgYm9vbCBwYW5pYylcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjE5Mi17XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMTk0LVx0c3RydWN0IHNldl9kZXZpY2UgKnNldjtcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MjE5NTpcdHN0cnVjdCBzZXZfZGF0YV9zbnBfc2h1dGRvd25fZXggZGF0YTtcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjE5Ni1cdGludCByZXQ7XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMjA3LVx0ZGF0YS5sZW4gPSBzaXplb2YoZGF0YSk7XG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjIyMDg6XHRkYXRhLmlvbW11X3NucF9zaHV0ZG93biA9IDE7XG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIyMDktXHRpZiAoc2V2LVx1MDAzZXNucF9mZWF0X2luZm9fMC5lY3ggXHUwMDI2IFNOUF9YODZfU0hVVERPV05fU1VQUE9SVEVEKVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoyMjEwOlx0XHRkYXRhLng4Nl9zbnBfc2h1dGRvd24gPSAxO1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMjExLVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjI0My1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MjI0NDpcdGlmIChkYXRhLng4Nl9zbnBfc2h1dGRvd24pIHtcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjI0NS1cdFx0aWYgKCFwYW5pYylcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MjI0NjpcdFx0XHRzbnBfc2h1dGRvd24oKTtcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjI0Ny1cdFx0c25wX2h2X2ZpeGVkX3BhZ2VzX3N0YXRlX3VwZGF0ZShzZXYsIEFMTE9DQVRFRCk7XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMjczLVx0LypcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MjI3NDpcdCAqIF9fc2V2X3NucF9zaHV0ZG93bl9sb2NrZWQoKSBkZWFkbG9ja3Mgd2hlbiBpdCB0cmllcyB0byB1bnJlZ2lzdGVyXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIyNzUtXHQgKiBpdHNlbGYgZHVyaW5nIHBhbmljIGFzIHRoZSBwYW5pYyBub3RpZmllciBpcyBjYWxsZWQgd2l0aCBSQ1UgcmVhZFxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MjkwNT1zdGF0aWMgdm9pZCBfX3Nldl9maXJtd2FyZV9zaHV0ZG93bihzdHJ1Y3Qgc2V2X2RldmljZSAqc2V2LCBib29sIHBhbmljKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjkzNi1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MjkzNzpcdF9fc2V2X3NucF9zaHV0ZG93bl9sb2NrZWQoXHUwMDI2ZXJyb3IsIHBhbmljKTtcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjkzOC19XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0zMDE0PXZvaWQgc2V2X2Rldl9kZXN0cm95KHN0cnVjdCBwc3BfZGV2aWNlICpwc3ApXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0zMDI4LVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzozMDI5OnN0YXRpYyBpbnQgc25wX3NodXRkb3duX29uX3BhbmljKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTMwMzAtXHRcdFx0XHQgdW5zaWduZWQgbG9uZyByZWFzb24sIHZvaWQgKmFyZylcbi0tXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaD04MjI9c3RydWN0IHNldl9kYXRhX3JhbmdlX2xpc3Qge1xuLS1cbmluY2x1ZGUvbGludXgvcHNwLXNldi5oLTgyOC0vKipcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oOjgyOTogKiBzdHJ1Y3Qgc2V2X2RhdGFfc25wX3NodXRkb3duX2V4IC0gU05QX1NIVVRET1dOX0VYIHN0cnVjdHVyZVxuaW5jbHVkZS9saW51eC9wc3Atc2V2LmgtODMwLSAqXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaC04MzEtICogQGxlbjogbGVuZ3RoIG9mIHRoZSBjb21tYW5kIGJ1ZmZlciByZWFkIGJ5IHRoZSBQU1BcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oOjgzMjogKiBAaW9tbXVfc25wX3NodXRkb3duOiBEaXNhYmxlIGVuZm9yY2VtZW50IG9mIFNOUCBpbiB0aGUgSU9NTVVcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oOjgzMzogKiBAeDg2X3NucF9zaHV0ZG93bjogRGlzYWJsZSBTTlAgb24gYWxsIGNvcmVzXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaC04MzQtICogQHJzdmQxOiByZXNlcnZlZFxuaW5jbHVkZS9saW51eC9wc3Atc2V2LmgtODM1LSAqL1xuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg6ODM2OnN0cnVjdCBzZXZfZGF0YV9zbnBfc2h1dGRvd25fZXgge1xuaW5jbHVkZS9saW51eC9wc3Atc2V2LmgtODM3LVx0dTMyIGxlbjtcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oOjgzODpcdHUzMiBpb21tdV9zbnBfc2h1dGRvd246MTtcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oOjgzOTpcdHUzMiB4ODZfc25wX3NodXRkb3duOjE7XG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaC04NDAtXHR1MzIgcnN2ZDE6MzA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIxOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTQ4CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU0VWLVNOUCBSTVAgVGFibGUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBzbnBfcm1wdGFibGVfaW5pdCgpYCBmdW5jdGlvbi4gVGhlIHZlcnkgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCYjMzk7cyBnYXRlZCBiZWhpbmQgYGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUClgLiBBbmQsIGl0IHNlZW1zIGxpa2UgKmV2ZXJ5dGhpbmcqIGluIHRoZSBjaGFuZ2VzIGlzIGd1YXJkZWQgYnkgdGhhdCBvciBgWDg2X0ZFQVRVUkVfUk1QT1BUYCwgd2hpY2ggaXMgYSBaZW42IENQVSBmZWF0dXJlLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcywgYXJlIHRoZXJlIGFueSBjb2RlIHBhdGhzIGludHJvZHVjZWQgYnkgdGhpcyB0aGF0ICpjb3VsZCogcG90ZW50aWFsbHkgYmUgcmVhY2hlZCB3aXRob3V0IHRoZSBTRVYtU05QIGZlYXR1cmU/IEl0JiMzOTtzIGVhc3kgdG8gbWFrZSBhc3N1bXB0aW9ucywgYnV0IHRoZSBkZXZpbCYjMzk7cyBpbiB0aGUgZGV0YWlscywgc28gbGV0JiMzOTtzIHZlcmlmeS4KCkkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgcmV2aWV3IGVhY2ggbW9kaWZpZWQgZmlsZS4gVGhlIGZpcnN0IGZldyAoYGFyY2gveDg2L2luY2x1ZGUvLi4uYCkgc2VlbSBzdHJhaWdodGZvcndhcmQ6IGRlZmluaXRpb25zIGZvciB0aGUgZmVhdHVyZSBmbGFnLCBNU1JzLCBhbmQgZnVuY3Rpb24gZGVjbGFyYXRpb25zLiBOb3RoaW5nIHRoYXQganVtcHMgb3V0IGFzIGFuIGlzc3VlIHRoZXJlLgoKTm93LCBgYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY2AganVzdCBhZGRzIHRoZSBgWDg2X0ZFQVRVUkVfUk1QT1BUYCBiaXQgdG8gdGhlIGBjcHVpZF9iaXRzYCB0YWJsZS4gVGhhdCYjMzk7cyBmaW5lLgoKQnV0IGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJIHNlZSBgc2V2X3ZtX2Rlc3Ryb3koKWAgY2FsbHMgYHNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKWAuICpUaGF0JiMzOTtzKiB0aGUgdHJpZ2dlciwgYmVjYXVzZSBgc25wX3JtcG9wdF9hbGxfcGh5c21lbSgpYCBpcyB0aGUgZnVuY3Rpb24gd2UgYXJlIGluaXRpYWxpemluZyBpbiB0aGUgaW5pdGlhbCBjaGVjay4gU28sIHRoZSBxdWVzdGlvbiBiZWNvbWVzOiBjYW4gYHNldi0mZ3Q7c25wX2NvbnRleHRgICh3aXRoaW4gdGhlIGBzZXZfdm1fZGVzdHJveSgpYCBjb250ZXh0KSBiZSBub24tTlVMTCB3aXRob3V0IFNFVi1TTlAgaG9zdCBoYXJkd2FyZT8gKlRoYXQmIzM5O3MqIHRoZSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBJIG5lZWQgdG8gdHJhY2UgYmFjayB3aGVyZSBgc2V2LSZndDtzbnBfY29udGV4dGAgaXMgc2V0IHRvIGVuc3VyZSB3ZSBhcmUgbm90IGNyZWF0aW5nIGFuIG91dC1vZi1ib3VuZHMgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIxOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NucF9jb250ZXh0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjIxNj1pbnQgc2V2X2Rldl9nZXRfYXR0cih1MzIgZ3JvdXAsIHU2NCBhdHRyLCB1NjQgKnZhbClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTIyNDMtICovXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIyNDQ6c3RhdGljIHZvaWQgKnNucF9jb250ZXh0X2NyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjI0NS17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yMjY3PXN0YXRpYyBpbnQgc25wX2JpbmRfYXNpZChzdHJ1Y3Qga3ZtICprdm0sIGludCAqZXJyb3IpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMjcxLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyMjcyOlx0ZGF0YS5nY3R4X3BhZGRyID0gX19wc3BfcGEoc2V2LVx1MDAzZXNucF9jb250ZXh0KTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjI3My1cdGRhdGEuYXNpZCA9IHNldl9nZXRfYXNpZChrdm0pO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjI3Nz1zdGF0aWMgaW50IHNucF9sYXVuY2hfc3RhcnQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMjkwLVx0LyogRG9uJiMzOTt0IGFsbG93IHVzZXJzcGFjZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIG1vcmUgdGhhbiAxIFNOUCBjb250ZXh0LiAqL1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyMjkxOlx0aWYgKHNldi1cdTAwM2VzbnBfY29udGV4dClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjI5Mi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMzEwLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyMzExOlx0c2V2LVx1MDAzZXNucF9jb250ZXh0ID0gc25wX2NvbnRleHRfY3JlYXRlKGt2bSwgYXJncCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIzMTI6XHRpZiAoIXNldi1cdTAwM2VzbnBfY29udGV4dClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjMxMy1cdFx0cmV0dXJuIC1FTk9UVFk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTIzMTQtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIzMTU6XHRzdGFydC5nY3R4X3BhZGRyID0gX19wc3BfcGEoc2V2LVx1MDAzZXNucF9jb250ZXh0KTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjMxNi1cdHN0YXJ0LnBvbGljeSA9IHBhcmFtcy5wb2xpY3k7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yMzQ5PXN0YXRpYyBpbnQgc2V2X2dtZW1fcG9zdF9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbixcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTIzODEtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIzODI6XHRmd19hcmdzLmdjdHhfcGFkZHIgPSBfX3BzcF9wYShzZXYtXHUwMDNlc25wX2NvbnRleHQpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMzgzLVx0ZndfYXJncy5hZGRyZXNzID0gX19zbWVfc2V0KHBmbl90b19ocGEocGZuKSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNDIxPXN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDI5LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNDMwOlx0aWYgKCFzZXZfc25wX2d1ZXN0KGt2bSkgfHwgIXNldi1cdTAwM2VzbnBfY29udGV4dClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQzMS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNTA1PXN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGVfdm1zYShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI1MTktXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI1MjA6XHRkYXRhLmdjdHhfcGFkZHIgPSBfX3BzcF9wYShzZXYtXHUwMDNlc25wX2NvbnRleHQpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNTIxLVx0ZGF0YS5wYWdlX3R5cGUgPSBTTlBfUEFHRV9UWVBFX1ZNU0E7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNTYyPXN0YXRpYyBpbnQgc25wX2xhdW5jaF9maW5pc2goc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNTcyLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNTczOlx0aWYgKCFzZXYtXHUwMDNlc25wX2NvbnRleHQpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI1NzQtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjYxNS1cdG1lbWNweShkYXRhLVx1MDAzZWhvc3RfZGF0YSwgcGFyYW1zLmhvc3RfZGF0YSwgS1ZNX1NFVl9TTlBfRklOSVNIX0RBVEFfU0laRSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI2MTY6XHRkYXRhLVx1MDAzZWdjdHhfcGFkZHIgPSBfX3BzcF9wYShzZXYtXHUwMDNlc25wX2NvbnRleHQpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjE3LVx0cmV0ID0gc2V2X2lzc3VlX2NtZChrdm0sIFNFVl9DTURfU05QX0xBVU5DSF9GSU5JU0gsIGRhdGEsIFx1MDAyNmFyZ3AtXHUwMDNlZXJyb3IpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjkzMD1zdGF0aWMgaW50IHNucF9kZWNvbW1pc3Npb25fY29udGV4dChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTM2LVx0LyogSWYgY29udGV4dCBpcyBub3QgY3JlYXRlZCB0aGVuIGRvIG5vdGhpbmcgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjkzNzpcdGlmICghc2V2LVx1MDAzZXNucF9jb250ZXh0KVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTM4LVx0XHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NDAtXHQvKiBEbyB0aGUgZGVjb21taXNpb24sIHdoaWNoIHdpbGwgdW5iaW5kIHRoZSBBU0lEIGZyb20gdGhlIFNOUCBjb250ZXh0ICovXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI5NDE6XHRkYXRhLmFkZHJlc3MgPSBfX3NtZV9wYShzZXYtXHUwMDNlc25wX2NvbnRleHQpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTQyLVx0ZG93bl93cml0ZShcdTAwMjZzZXZfZGVhY3RpdmF0ZV9sb2NrKTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NDgtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI5NDk6XHRzbnBfZnJlZV9maXJtd2FyZV9wYWdlKHNldi1cdTAwM2VzbnBfY29udGV4dCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI5NTA6XHRzZXYtXHUwMDNlc25wX2NvbnRleHQgPSBOVUxMO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTUxLVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDIyOD1zdGF0aWMgaW50IHNucF9oYW5kbGVfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByZXNwX2dwYSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyNDMtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQyNDQ6XHRkYXRhLmdjdHhfcGFkZHIgPSBfX3BzcF9wYShzZXYtXHUwMDNlc25wX2NvbnRleHQpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MjQ1LVx0ZGF0YS5yZXFfcGFkZHIgPSBfX3BzcF9wYShzZXYtXHUwMDNlZ3Vlc3RfcmVxX2J1Zik7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz01MzI2PXN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqc2V2X2RlY3J5cHRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzYxLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MzYyOlx0XHRkYmcuZ2N0eF9wYWRkciA9IF9fcHNwX3BhKHNldi1cdTAwM2VzbnBfY29udGV4dCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUzNjMtXHRcdGRiZy5zcmNfYWRkciA9IHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wudm1zYV9wYTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTk5PXN0cnVjdCBrdm1fc2V2X2luZm8ge1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTE3LVx0YXRvbWljX3QgbWlncmF0aW9uX2luX3Byb2dyZXNzO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDoxMTg6XHR2b2lkICpzbnBfY29udGV4dDsgICAgICAvKiBTTlAgZ3Vlc3QgY29udGV4dCBwYWdlICovXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTExOS1cdHZvaWQgKmd1ZXN0X3JlcV9idWY7ICAgIC8qIEJvdW5jZSBidWZmZXIgZm9yIFNOUCBHdWVzdCBSZXF1ZXN0IGlucHV0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIxOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDYzCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiBteSBjb2RlIGFuZCB0aGlua2luZyBhYm91dCBhIHNwZWNpZmljIGZ1bmN0aW9uOgoKKipBbmFseXppbmcgdGhlIGBzbnBfY29udGV4dF9jcmVhdGVgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhlYWQgYXJvdW5kIGBzbnBfY29udGV4dF9jcmVhdGVgLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIGFuZCBob3cgaXQgd29ya3MuIExldCBtZSBqdXN0IHB1bGwgdXAgaXRzIGRlZmluaXRpb24gYW5kIHN0YXJ0IHJlYWRpbmcgdGhlIGNvZGUuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBncmFzcCB0aGUgaW50ZW50aW9uIG9mIHRoZSBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIHN0ZXAgdGhyb3VnaCB0aGlzIHNsb3dseSBhbmQgY2FyZWZ1bGx5IHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyNDA6XHQgKiBhc3NvY2lhdGVkIHdpdGggdGhlIGd1ZXN0IHRoYXQgdGhlIGZpcm13YXJlIHRyYWNrcyB0byBpbXBsZW1lbnQgU0VWXG4yMjQxOlx0ICogYW5kIFNOUCBmZWF0dXJlcy4gVGhlIGZpcm13YXJlIHN0b3JlcyB0aGUgZ3Vlc3QgY29udGV4dCBpbiBoeXBlcnZpc29yXG4yMjQyOlx0ICogcHJvdmlkZSBwYWdlIHZpYSB0aGUgU05QX0dDVFhfQ1JFQVRFIGNvbW1hbmQuXG4yMjQzOlx0ICovXG4yMjQ0Olx0c3RhdGljIHZvaWQgKnNucF9jb250ZXh0X2NyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcbjIyNDU6XHR7XG4yMjQ2Olx0XHRzdHJ1Y3Qgc2V2X2RhdGFfc25wX2FkZHIgZGF0YSA9IHt9O1xuMjI0NzpcdFx0dm9pZCAqY29udGV4dDtcbjIyNDg6XHRcdGludCByYztcbjIyNDk6XHRcbjIyNTA6XHRcdC8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgY29udGV4dCBwYWdlICovXG4yMjUxOlx0XHRjb250ZXh0ID0gc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbjIyNTI6XHRcdGlmICghY29udGV4dClcbjIyNTM6XHRcdFx0cmV0dXJuIE5VTEw7XG4yMjU0Olx0XG4yMjU1Olx0XHRkYXRhLmFkZHJlc3MgPSBfX3BzcF9wYShjb250ZXh0KTtcbjIyNTY6XHRcdHJjID0gX19zZXZfaXNzdWVfY21kKGFyZ3AtXHUwMDNlc2V2X2ZkLCBTRVZfQ01EX1NOUF9HQ1RYX0NSRUFURSwgXHUwMDI2ZGF0YSwgXHUwMDI2YXJncC1cdTAwM2VlcnJvcik7XG4yMjU3Olx0XHRpZiAocmMpIHtcbjIyNTg6XHRcdFx0cHJfd2FybihcJiMzNDtGYWlsZWQgdG8gY3JlYXRlIFNFVi1TTlAgY29udGV4dCwgcmMgJWQgZndfZXJyb3IgJWRcJiMzNDssXG4yMjU5Olx0XHRcdFx0cmMsIGFyZ3AtXHUwMDNlZXJyb3IpO1xuMjI2MDpcdFx0XHRzbnBfZnJlZV9maXJtd2FyZV9wYWdlKGNvbnRleHQpO1xuMjI2MTpcdFx0XHRyZXR1cm4gTlVMTDtcbjIyNjI6XHRcdH1cbjIyNjM6XHRcbjIyNjQ6XHRcdHJldHVybiBjb250ZXh0O1xuMjI2NTpcdH1cbjIyNjY6XHRcbjIyNjc6XHRzdGF0aWMgaW50IHNucF9iaW5kX2FzaWQoc3RydWN0IGt2bSAqa3ZtLCBpbnQgKmVycm9yKVxuMjI2ODpcdHtcbjIyNjk6XHRcdHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiA9IHRvX2t2bV9zZXZfaW5mbyhrdm0pO1xuMjI3MDpcdFx0c3RydWN0IHNldl9kYXRhX3NucF9hY3RpdmF0ZSBkYXRhID0gezB9O1xuMjI3MTpcdFxuMjI3MjpcdFx0ZGF0YS5nY3R4X3BhZGRyID0gX19wc3BfcGEoc2V2LVx1MDAzZXNucF9jb250ZXh0KTtcbjIyNzM6XHRcdGRhdGEuYXNpZCA9IHNldl9nZXRfYXNpZChrdm0pO1xuMjI3NDpcdFx0cmV0dXJuIHNldl9pc3N1ZV9jbWQoa3ZtLCBTRVZfQ01EX1NOUF9BQ1RJVkFURSwgXHUwMDI2ZGF0YSwgZXJyb3IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjg0NAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mICYjMzQ7QW5kIGxvb2sgYXQgYHNucF9hbGxvY19maXJtd2FyZV9wYWdlYCwmIzM0OyBzdW1tYXJpemVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqRGl2aW5nIERlZXAgaW50byBgc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2VgKioKCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBzbnBfYWxsb2NfZmlybXdhcmVfcGFnZWAuIE15IGZpcnN0IHRob3VnaHQ/ICYjMzQ7V2h5IGFyZSB3ZSBsb29raW5nIGF0IHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gKm5vdyo/JiMzNDsgQ29udGV4dCBpcyBldmVyeXRoaW5nLiBJcyB0aGlzIHBhcnQgb2YgYSBkZWJ1Z2dpbmcgc2Vzc2lvbj8gQXJlIHdlIHRyYWNraW5nIGRvd24gYSBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZT8gT3IgYXJlIHdlIHJldmlld2luZyB0aGUgc2VjdXJpdHkgaW1wbGljYXRpb25zPyBLbm93aW5nIHRoZSAmIzM0O3doeSYjMzQ7IGlzIGNydWNpYWwgZm9yIGEgcHJvZHVjdGl2ZSBhbmFseXNpcy4KClJlZ2FyZGxlc3MsIEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdDogbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ2llcywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aXRoaW4gdGhpcyBjb2RlLCBhbmQgaW50ZXJhY3Rpb25zIHdpdGggdGhlIFNlY3VyZSBOZXN0ZWQgUGFnaW5nIChTTlApIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW46CgoqICAgKipFcnJvciBoYW5kbGluZzoqKiBJcyBpdCByb2J1c3Q/IERvZXMgaXQgY2hlY2sgcmV0dXJuIHZhbHVlcyBwcm9wZXJseSwgZXNwZWNpYWxseSBpbiBhIHBvdGVudGlhbGx5IHNlbnNpdGl2ZSBhcmVhIGxpa2UgZmlybXdhcmUgcGFnZSBhbGxvY2F0aW9uPyBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgaXMgYWxsIGd1YXJkZWQuCiogICAqKkNvbnRpZ3VpdHk6KiogSXMgdGhpcyBtZW1vcnkgYWxsb2NhdGlvbiBjb250aWd1b3VzLCBvciBpcyBpdCBzY2F0dGVyZWQ/IFRoaXMgY2FuIGRyYW1hdGljYWxseSBhZmZlY3QgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgcG90ZW50aWFsbHkgaW1wYWN0aW5nIGhvdyB0aGUgZ3Vlc3QgdmlydHVhbCBtYWNoaW5lIChWTSkgYmVoYXZlcy4KKiAgICoqUHJpdmlsZWdlIExldmVsczoqKiBXaGF0IGxldmVsIG9mIHByaXZpbGVnZSBpcyB0aGlzIGZ1bmN0aW9uIG9wZXJhdGluZyB1bmRlcj8gSXMgaXQgcnVubmluZyBpbiB0aGUgaHlwZXJ2aXNvciwgb3IgdGhlIGd1ZXN0PyBUaGUgYW5zd2VyIHdpbGwgcHJvdmlkZSBpbnNpZ2h0IGludG8gdGhlIGF0dGFjayBzdXJmYWNlLgoqICAgKipDb25jdXJyZW5jeToqKiBBbnkgbG9ja3M/IEFueSBwb3RlbnRpYWwgZm9yIGNvbmN1cnJlbnQgYWNjZXNzIGFuZCByYWNlIGNvbmRpdGlvbnM/IFRoaXMgaXMgY3JpdGljYWwgaW4gYSBtdWx0aS10aHJlYWRlZCBvciBtdWx0aS1WTSBlbnZpcm9ubWVudC4KKiAgICoqSW50ZXJhY3Rpb24gd2l0aCBTTlA6KiogSG93IGV4YWN0bHkgZG9lcyB0aGlzIGZ1bmN0aW9uIGludGVyZmFjZSB3aXRoIHRoZSBTTlAgZnJhbWV3b3JrPyBJcyBpdCBjb3JyZWN0bHkgc2V0dGluZyB0aGUgYXBwcm9wcmlhdGUgZmxhZ3MsIGhhbmRsaW5nIGF0dGVzdGF0aW9uLCBhbmQgZW5zdXJpbmcgdGhlIGNvbmZpZGVudGlhbGl0eSBhbmQgaW50ZWdyaXR5IG9mIHRoZSBmaXJtd2FyZSBwYWdlPyBUaGlzIGlzIHRoZSBjb3JlIGFyZWEgb2YgaW52ZXN0aWdhdGlvbi4KCk5vdywgbXkgbWluZCBpcyBhbHJlYWR5IHN0YXJ0aW5nIHRvIHBpZWNlIHRvZ2V0aGVyIGEgcm91Z2ggdW5kZXJzdGFuZGluZyBvZiB0aGUgZnVuY3Rpb24mIzM5O3Mgc2NvcGUuIFVsdGltYXRlbHksIHRoZSBuZXh0IHN0ZXAgaXMgZ29pbmcgdG8gYmUgYW5hbHl6aW5nIHRoZSBhY3R1YWwgY29kZSBpdHNlbGYuIExldCYjMzk7cyBzZWUgaG93IHdlbGwgbXkgaW5pdGlhbCBhc3N1bXB0aW9ucyBob2xkIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbnBfYWxsb2NfZmlybXdhcmVfcGFnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ1Nj1zdGF0aWMgaW50IHNucF9ndWVzdF9yZXFfaW5pdChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NjQtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ2NTpcdHNldi1cdTAwM2VndWVzdF9yZXNwX2J1ZiA9IHNucF9hbGxvY19maXJtd2FyZV9wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8pO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NjYtXHRpZiAoIXNldi1cdTAwM2VndWVzdF9yZXNwX2J1Zikge1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjI0ND1zdGF0aWMgdm9pZCAqc25wX2NvbnRleHRfY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjI1MC1cdC8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgY29udGV4dCBwYWdlICovXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIyNTE6XHRjb250ZXh0ID0gc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjI1Mi1cdGlmICghY29udGV4dClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTMwNjQ9c3RhdGljIGJvb2wgaXNfc2V2X3NucF9pbml0aWFsaXplZCh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzA3MC1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzA3MTpcdHN0YXR1cyA9IHNucF9hbGxvY19maXJtd2FyZV9wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzA3Mi1cdGlmICghc3RhdHVzKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NTMyNj1zdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnNldl9kZWNyeXB0X3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTM1Ny1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTM1ODpcdFx0dm1zYSA9IHNucF9hbGxvY19maXJtd2FyZV9wYWdlKF9fR0ZQX1pFUk8pO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzU5LVx0XHRpZiAoIXZtc2EpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmM9NzQxPWludCBzZXZfdGlvX2Rldl9jcmVhdGUoc3RydWN0IHRzbV9kc21fdGlvICpkZXZfZGF0YSwgdTE2IGRldmljZV9pZCxcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYy03NTctXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYzo3NTg6XHRkYXRhX3BnID0gc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LXRpby5jLTc1OS1cdGlmICghZGF0YV9wZykge1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9NDE3PXN0YXRpYyBpbnQgcm1wX21hcmtfcGFnZXNfZmlybXdhcmUodW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgaW50IG5wYWdlcywgYm9vbCBsb2NrZWQpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00NDAtXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjQ0MTpzdGF0aWMgc3RydWN0IHBhZ2UgKl9fc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCBpbnQgb3JkZXIsIGJvb2wgbG9ja2VkKVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00NDIte1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtNDY1LVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzo0NjY6dm9pZCAqc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2UoZ2ZwX3QgZ2ZwX21hc2spXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTQ2Ny17XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00NjktXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjQ3MDpcdHBhZ2UgPSBfX3NucF9hbGxvY19maXJtd2FyZV9wYWdlcyhnZnBfbWFzaywgMCwgZmFsc2UpO1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00NzEtXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00NzMtfVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzo0NzQ6RVhQT1JUX1NZTUJPTF9HUEwoc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2UpO1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00NzUtXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz01MDE9c3RhdGljIHZvaWQgKnNldl9md19hbGxvYyh1bnNpZ25lZCBsb25nIGxlbilcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTUwNC1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6NTA1Olx0cGFnZSA9IF9fc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2VzKEdGUF9LRVJORUwsIGdldF9vcmRlcihsZW4pLCB0cnVlKTtcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtNTA2LVx0aWYgKCFwYWdlKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MTM1Mz1zdGF0aWMgaW50IHNucF92ZXJpZnlfbWl0aWdhdGlvbih1MTYgY29tbWFuZCwgdTY0IHZlY3Rvcixcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTEzNjAtXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjEzNjE6XHRtaXRfZHN0ID0gc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xMzYyLVx0aWYgKCFtaXRfZHN0KVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MTUwOD1zdGF0aWMgaW50IF9fc2V2X3NucF9pbml0X2xvY2tlZChpbnQgKmVycm9yLCB1bnNpZ25lZCBpbnQgbWF4X3NucF9hc2lkKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMTY0OS1cdFx0ICogdW5saWtlbHkpIGJ1dCB3aWxsIGNhdXNlIGEgZGVhZGxvY2suXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjE2NTA6XHRcdCAqIEluc3RlYWQgb2YgZXhwb3J0aW5nIF9fc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2VzKCksIGFsbG9jYXRlIGEgcGFnZVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xNjUxLVx0XHQgKiBmb3IgdGhpcyBvbmUgY2FsbCBoZXJlLlxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xNjUyLVx0XHQgKi9cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MTY1MzpcdFx0cGFnZSA9IF9fc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2VzKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8sXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTE2NTQtXHRcdFx0XHRcdFx0ICAwLCB0cnVlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaD0xMTMxPXZvaWQgKnBzcF9jb3B5X3VzZXJfYmxvYih1NjQgdWFkZHIsIHUzMiBsZW4pO1xuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg6MTEzMjp2b2lkICpzbnBfYWxsb2NfZmlybXdhcmVfcGFnZShnZnBfdCBtYXNrKTtcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oLTExMzMtaW50IHNucF9yZWNsYWltX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGFkZHIsIHVuc2lnbmVkIGludCBucGFnZXMsIGJvb2wgbG9ja2VkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaD0xMTY0PXN0YXRpYyBpbmxpbmUgdm9pZCAqcHNwX2NvcHlfdXNlcl9ibG9iKHU2NCBfX3VzZXIgdWFkZHIsIHUzMiBsZW4pIHsgcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7IH1cbmluY2x1ZGUvbGludXgvcHNwLXNldi5oLTExNjUtXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaDoxMTY2OnN0YXRpYyBpbmxpbmUgdm9pZCAqc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2UoZ2ZwX3QgbWFzaylcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oLTExNjcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTA4MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmlybXdhcmUgUGFnZSBBbGxvY2F0aW9uIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZmlybXdhcmUgcGFnZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCB3aXRoaW4gdGhpcyBjcnlwdG8gY29udGV4dC4gTXkgc3RhcnRpbmcgcG9pbnQgaXMgYHNucF9hbGxvY19maXJtd2FyZV9wYWdlYCwgd2hpY2ggSSBzdXNwZWN0IGlzIGEgd3JhcHBlciBmdW5jdGlvbi4gTGV0JiMzOTtzIHRyYWNlIGl0IGRvd24sIGFuZCBpdCBsb29rcyBsaWtlIGl0IGNhbGxzIGBfX3NucF9hbGxvY19maXJtd2FyZV9wYWdlc2AuIFRoYXQmIzM5O3MgYSBnb29kIGxlYWQuIE5vdyBJIHNob3VsZCBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYF9fc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2VzYCBkaXJlY3RseS4gQSBxdWljayBmaWxlIHN5c3RlbSBzZWFyY2ggYW5kIEkgc2VlIGl0JiMzOTtzIGRlZmluZWQgd2l0aGluIGBkcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jYC4gQWxyaWdodCwgdGltZSB0byBvcGVuIHRoYXQgZmlsZSBhbmQgZ2V0IGEgaGFuZGxlIG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBhbGxvY2F0aW9uIHByb2Nlc3MuIEkgbmVlZCB0byBrbm93IHRoZSBtZW1vcnkgcmVnaW9ucyBiZWluZyB1c2VkLCB0aGUgYWxsb2NhdGlvbiBzdHJhdGVnaWVzIGluIHBsYWNlLCBhbmQgd2hhdCBlcnJvciBjaGVja2luZyBpcyBiZWluZyBwZXJmb3JtZWQuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIxOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDQwOlx0XG4gNDQxOlx0c3RhdGljIHN0cnVjdCBwYWdlICpfX3NucF9hbGxvY19maXJtd2FyZV9wYWdlcyhnZnBfdCBnZnBfbWFzaywgaW50IG9yZGVyLCBib29sIGxvY2tlZClcbiA0NDI6XHR7XG4gNDQzOlx0XHR1bnNpZ25lZCBsb25nIG5wYWdlcyA9IDF1bCBcdTAwM2NcdTAwM2Mgb3JkZXIsIHBhZGRyO1xuIDQ0NDpcdFx0c3RydWN0IHNldl9kZXZpY2UgKnNldjtcbiA0NDU6XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuIDQ0NjpcdFxuIDQ0NzpcdFx0aWYgKCFwc3BfbWFzdGVyIHx8ICFwc3BfbWFzdGVyLVx1MDAzZXNldl9kYXRhKVxuIDQ0ODpcdFx0XHRyZXR1cm4gTlVMTDtcbiA0NDk6XHRcbiA0NTA6XHRcdHBhZ2UgPSBhbGxvY19wYWdlcyhnZnBfbWFzaywgb3JkZXIpO1xuIDQ1MTpcdFx0aWYgKCFwYWdlKVxuIDQ1MjpcdFx0XHRyZXR1cm4gTlVMTDtcbiA0NTM6XHRcbiA0NTQ6XHRcdC8qIElmIFNFVi1TTlAgaXMgaW5pdGlhbGl6ZWQgdGhlbiBhZGQgdGhlIHBhZ2UgaW4gUk1QIHRhYmxlLiAqL1xuIDQ1NTpcdFx0c2V2ID0gcHNwX21hc3Rlci1cdTAwM2VzZXZfZGF0YTtcbiA0NTY6XHRcdGlmICghc2V2LVx1MDAzZXNucF9pbml0aWFsaXplZClcbiA0NTc6XHRcdFx0cmV0dXJuIHBhZ2U7XG4gNDU4Olx0XG4gNDU5Olx0XHRwYWRkciA9IF9fcGEoKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2UpKTtcbiA0NjA6XHRcdGlmIChybXBfbWFya19wYWdlc19maXJtd2FyZShwYWRkciwgbnBhZ2VzLCBsb2NrZWQpKVxuIDQ2MTpcdFx0XHRyZXR1cm4gTlVMTDtcbiA0NjI6XHRcbiA0NjM6XHRcdHJldHVybiBwYWdlO1xuIDQ2NDpcdH1cbiA0NjU6XHRcbiA0NjY6XHR2b2lkICpzbnBfYWxsb2NfZmlybXdhcmVfcGFnZShnZnBfdCBnZnBfbWFzaylcbiA0Njc6XHR7XG4gNDY4Olx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiA0Njk6XHRcbiA0NzA6XHRcdHBhZ2UgPSBfX3NucF9hbGxvY19maXJtd2FyZV9wYWdlcyhnZnBfbWFzaywgMCwgZmFsc2UpO1xuIDQ3MTpcdFxuIDQ3MjpcdFx0cmV0dXJuIHBhZ2UgPyBwYWdlX2FkZHJlc3MocGFnZSkgOiBOVUxMO1xuIDQ3MzpcdH1cbiA0NzQ6XHRFWFBPUlRfU1lNQk9MX0dQTChzbnBfYWxsb2NfZmlybXdhcmVfcGFnZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIxOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1ODc0CgkJCQkJCQlvdXRwdXQ6IDEzNQoJCQkJCQkJdGhvdWdodHM6IDEzNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgQ29kZSBDaGFuZ2VzIGFuZCBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBkZXRlcm1pbmVkIGFmdGVyIHJldmlld2luZyB0aGUgY29kZSBtb2RpZmljYXRpb25zLiBNeSBpbml0aWFsIGZvY3VzIHdhcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBQU1AgZGV2aWNlLCBgL2Rldi9zZXZgLCB2aWEgdGhlIGBTRVZfQ01EX1NOUF9HQ1RYX0NSRUFURWAgaW9jdGwuIFRoaXMsIGFzIHdlIGtub3csIGludGVyYWN0cyB3aXRoIHRoZSBBTUQgUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yLCBvciBQU1AsIHdoaWNoIGlzIGEgaGFyZHdhcmUgY29tcG9uZW50IHByZXNlbnQgb24gQU1EIFplbiBDUFVzLiBUaGUgY2FsbCB0byBgX19zZXZfaXNzdWVfY21kKClgIGlzIHRoZSBrZXkuCgpJIHRoZW4gZHVnIGludG8gaG93IHRoZSBjb2RlIGRldGVybWluZXMgU0VWLVNOUCBob3N0IGNhcGFiaWxpdGllcy4gIGBic3BfZGV0ZXJtaW5lX3NucCgpYCBpbiBgYW1kLmNgIGV4cGxpY2l0bHkgZGlzYWJsZXMgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBpZiB0aGUgaHlwZXJ2aXNvciBmZWF0dXJlLCBgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUmAsIGlzIGRldGVjdGVkLiBUaGlzIGlzIGEgdmVyeSBpbXBvcnRhbnQgcG9pbnQhIEZ1cnRoZXJtb3JlLCB0byBlbmFibGUgUk1QT1BULCB3ZSAqcmVxdWlyZSogYm90aCBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgICphbmQqIHRoZSBaZW42IGluc3RydWN0aW9uIHNldCBmZWF0dXJlLCBgWDg2X0ZFQVRVUkVfUk1QT1BUYC4gIFJNUE9QVCBpcyBzcGVjaWZpYyB0byBBTUQgWmVuNiBhbmQgU0VWLVNOUC4KCk5vdywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIHRoZSBjcml0ZXJpYSBmb3IgKm5vdCogZnV6emluZyAobmVnYXRpdmUgY3JpdGVyaWEpIGFzIHBlciB0aGUgcHJvbXB0LiAgU3BlY2lmaWNhbGx5LCB0aGUgY2F0ZWdvcnkgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuJiMzNDsgIFdoYXQgZG9lcyBTRVYtU05QIGhvc3Qgc3VwcG9ydCAqcmVxdWlyZSo/IExldCYjMzk7cyBicmVhayBpdCBkb3duOgoKMS4gIEEgYmFyZSBtZXRhbCBBTUQgWmVuMy9aZW40L1plbjUvWmVuNiBDUFUuCjIuICBBbiBBTUQgUFNQIChvciBDQ1ApICpwaHlzaWNhbCogaGFyZHdhcmUgZGV2aWNlLgozLiAgUk1QT1BUIGlzIHRpZWQgdG8gWmVuNiB3aXRoIHRoZSByZWxldmFudCBDUFUgZmVhdHVyZS4KNC4gIEluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9LVk0sIEdDRSksIHdoaWNoIGlzIHRoZSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50LCBgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUmAgaXMgYWx3YXlzIHNldCBvbiB0aGUgYW1kNjQgZ3Vlc3Qga2VybmVsLiBUaGlzIGNhdXNlcyBgYnNwX2RldGVybWluZV9zbnAoKWAgdG8gY2xlYXIgYGNjX2ZsYWdzLmhvc3Rfc2V2X3NucGAgYW5kIGBYODZfRkVBVFVSRV9TRVZfU05QYC4KCldpdGhvdXQgdGhlIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAgc2V0LCB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyBhcmUgKm5ldmVyKiByZWFjaGVkLiBgc25wX3JtcG9wdF9hbGxfcGh5c21lbSgpYCwgYHNucF9zZXR1cF9ybXBvcHQoKWAsIGFuZCBjYWxscyBpbiBgc25wX3ByZXBhcmUoKWAgLyBgc25wX3NodXRkb3duKClgIGJlY29tZSBuby1vcHMgb3IgZWFybHkgcmV0dXJucy4gYHNucF9ybXB0YWJsZV9pbml0KClgIGp1c3QgcmV0dXJucyBhbiBlcnJvci4gYHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKClgIGlzIGVpdGhlciBzaG9ydC1jaXJjdWl0ZWQgb3IgZG9lcyBub3RoaW5nLiBUaGUgY2hhbmdlcyB0byBgc2NhdHRlcmVkLmNgIGFyZSBzaW1wbHkgYWRkaW5nIHRoZSBjcHVpZCBiaXQgdG8gYSB0YWJsZSB3aGljaCBpc24mIzM5O3QgdXNlZCBkdWUgdG8gbGFjayBvZiB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbi4KCkkgcmUtZXhhbWluZWQgYWxsIHRoZSBtb2RpZmllZCBsaW5lcyBvZiBjb2RlLiAgV2UmIzM5O3JlIGxvb2tpbmcgYXQ6CgoxLiAgQ1BVIGZlYXR1cmUgZGVmaW5pdGlvbnMuCjIuICBNU1IgaW5kZXggZGVmaW5pdGlvbnMuCjMuICBTRVYgZGVjbGFyYXRpb25zIGFuZCBzdHViIGltcGxlbWVudGF0aW9ucy4KNC4gIENQVUlEIGZlYXR1cmUgdGFibGUuCjUuICBDYWxscyBpbiBgc2V2X3ZtX2Rlc3Ryb3koKWAgYW5kIHN1cHBvcnQgbG9naWMgbGlrZSBgcm1wb3B0X2NhcGFibGUoKWAsIGBzbnBfc2V0dXBfcm1wb3B0KClgLCBldGMuCjYuIEEgY2FsbCB0byBgc25wX3NldHVwX3JtcG9wdCgpYCBpbiBgX19zZXZfc25wX2luaXRfbG9ja2VkKClgLgoKVGhlIGltcG9ydGFudCBwb2ludCBpcyB0aGF0ICphbGwqIHRoZXNlIGNoYW5nZXMgYXJlIHdpdGhpbiB0aGUgQU1EIFNFVi1TTlAgaG9zdCBzdXBwb3J0IGxvZ2ljLCB3aGljaCBpbmNsdWRlcyB0aGUgUk1QT1BUIGZlYXR1cmUgdGhhdCBpcyBzcGVjaWZpYyB0byBBTUQgWmVuNiBiYXJlLW1ldGFsIHByb2Nlc3NvcnMuIEluIHRoZSB2YXN0IG1ham9yaXR5IG9mIGZ1enppbmcgZW52aXJvbm1lbnRzIC0gc3BlY2lmaWNhbGx5IFFFTVUvS1ZNLCB3aGljaCB0aGUgZG9jdW1lbnRhdGlvbiBzcGVjaWZpZXMgaXMgdGhlIHN0YW5kYXJkIHNldHVwIC0gYENDX0FUVFJfSE9TVF9TRVZfU05QYCBpcyBuZXZlciBzZXQuIFRoaXMgaXMgYmVjYXVzZSB3ZSBkb24mIzM5O3QgaGF2ZSBBTUQgUFNQIGhhcmR3YXJlIGFuZCBkdWUgdG8gdGhlIGBYODZfRkVBVFVSRV9IWVBFUlZJU09SYCBjaGVjay4gVGhpcyBtYWtlcyB0aGUgUk1QT1BUIG1lY2hhbmlzbSBhbmQgdGhlIGVudGlyZSBTRVYtU05QIGhvc3QgbGlmZWN5Y2xlICpzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUqIGR1cmluZyBzdGFuZGFyZCBmdXp6aW5nLiAgVGhpcyBtZWFucyB0aGVzZSBhcmVhcyBhcmUgbm90IHdvcnRoIGZ1enppbmcuCgpUaGVyZWZvcmU6CgoqICAgYFdvcnRoRnV6emluZzogZmFsc2VgCiogICBgRW5hYmxlQ29uZmlnczogW11gCiogICBgRm9jdXNTeW1ib2xzOiBbXWAKCkkmIzM5O20gY29uZmlkZW50IGluIHRoZXNlIGZpbmRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBhZGRzIHN1cHBvcnQgZm9yIEFNRCBTRVYtU05QIFJNUE9QVCAoUk1QIE9wdGltaXphdGlvbikgaW5zdHJ1Y3Rpb25zIGFuZCBtYW5hZ2VtZW50IGZvciBBTUQgWmVuNiYjNDM7IGhvc3QgcHJvY2Vzc29ycy4gVGhlc2UgY29kZSBwYXRocyByZXF1aXJlIHBoeXNpY2FsIEFNRCBoYXJkd2FyZSBzdXBwb3J0aW5nIFNFVi1TTlAgaG9zdCBmZWF0dXJlcyBhbmQgdGhlIEFNRCBQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCksIGFuZCBhcmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluc2lkZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IgZGlzYWJsZXMgQ0NfQVRUUl9IT1NUX1NFVl9TTlAgZHVyaW5nIGJvb3QpLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciBBTUQgU0VWLVNOUCBSTVBPUFQgKFJNUCBPcHRpbWl6YXRpb24pIGluc3RydWN0aW9ucyBhbmQgbWFuYWdlbWVudCBmb3IgQU1EIFplbjYmIzQzOyBob3N0IHByb2Nlc3NvcnMuIFRoZXNlIGNvZGUgcGF0aHMgcmVxdWlyZSBwaHlzaWNhbCBBTUQgaGFyZHdhcmUgc3VwcG9ydGluZyBTRVYtU05QIGhvc3QgZmVhdHVyZXMgYW5kIHRoZSBBTUQgUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApLCBhbmQgYXJlIGRpc2FibGVkIHdoZW4gcnVubmluZyBpbnNpZGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChYODZfRkVBVFVSRV9IWVBFUlZJU09SIGRpc2FibGVzIENDX0FUVFJfSE9TVF9TRVZfU05QIGR1cmluZyBib290KS4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjE6NTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIxOjUzOjQ5LjgxNzExNjUxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjExOTkwNTE1MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciBBTUQgU0VWLVNOUCBSTVBPUFQgKFJNUCBPcHRpbWl6YXRpb24pIGluc3RydWN0aW9ucyBhbmQgbWFuYWdlbWVudCBmb3IgQU1EIFplbjYrIGhvc3QgcHJvY2Vzc29ycy4gVGhlc2UgY29kZSBwYXRocyByZXF1aXJlIHBoeXNpY2FsIEFNRCBoYXJkd2FyZSBzdXBwb3J0aW5nIFNFVi1TTlAgaG9zdCBmZWF0dXJlcyBhbmQgdGhlIEFNRCBQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCksIGFuZCBhcmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluc2lkZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IgZGlzYWJsZXMgQ0NfQVRUUl9IT1NUX1NFVl9TTlAgZHVyaW5nIGJvb3QpLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMTo1Mzo0OS44MTcxMjM4NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjExNjcxMjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2Q4NmM2ODJmODE3YjEyNzBhMzU4NTMzMjI3YWM2MDA4OWViYTY0YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDIxOjUzOjQ4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXFxuaW5kZXggZjcwZWU3NGI1ZjkyMS4uM2I1YjMyZDMzOTFiNSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxcbkBAIC03Niw3ICs3Niw3IEBAXFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfSzhcXHRcXHRcXHQoIDMqMzIrIDQpIC8qIE9wdGVyb24sIEF0aGxvbjY0ICovXFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfWkVONVxcdFxcdCggMyozMisgNSkgLyogQ1BVIGJhc2VkIG9uIFplbjUgbWljcm9hcmNoaXRlY3R1cmUgKi9cXG4gI2RlZmluZSBYODZfRkVBVFVSRV9aRU42XFx0XFx0KCAzKjMyKyA2KSAvKiBDUFUgYmFzZWQgb24gWmVuNiBtaWNyb2FyY2hpdGVjdHVyZSAqL1xcbi0vKiBGcmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAzKjMyKyA3KSAqL1xcbisjZGVmaW5lIFg4Nl9GRUFUVVJFX1JNUE9QVFxcdFxcdCggMyozMisgNykgLyogU3VwcG9ydCBmb3IgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbiAqL1xcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQ1xcdCggMyozMisgOCkgLyogXFxcImNvbnN0YW50X3RzY1xcXCIgVFNDIHRpY2tzIGF0IGEgY29uc3RhbnQgcmF0ZSAqL1xcbiAvKiBmcmVlOiB3YXMgI2RlZmluZSBYODZfRkVBVFVSRV9VUFxcdCggMyozMisgOSkgKiBcXFwidXBcXFwiIFNNUCBrZXJuZWwgcnVubmluZyBvbiBVUCAqL1xcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0FSVFxcdFxcdFxcdCggMyozMisxMCkgLyogXFxcImFydFxcXCIgQWx3YXlzIHJ1bm5pbmcgdGltZXIgKEFSVCkgKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxcbmluZGV4IDNhOGU1MWEwYzllODguLjE2MzVlMmUxYzU3NmEgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxcbkBAIC03NjEsNiArNzYxLDkgQEBcXG4gI2RlZmluZSBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVFxcdDBcXG4gI2RlZmluZSBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEXFx0QklUX1VMTChNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVClcXG4gI2RlZmluZSBNU1JfQU1ENjRfUk1QX1NFR01FTlRfU0hJRlQoeClcXHQoKCh4KSBcXHUwMDI2IEdFTk1BU0tfVUxMKDEzLCA4KSkgXFx1MDAzZVxcdTAwM2UgOClcXG4rI2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0JBU0VcXHRcXHQweGMwMDEwMTM5XFxuKyNkZWZpbmUgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVfQklUXFx0MFxcbisjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFXFx0XFx0QklUX1VMTChNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRV9CSVQpXFxuIFxcbiAjZGVmaW5lIE1TUl9TVlNNX0NBQVxcdFxcdFxcdDB4YzAwMWYwMDBcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcXG5pbmRleCA5ZTdhMDc3YzQ0NWRjLi4zMjM1ZTE3MTY0N2RkIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcXG5AQCAtNjYyLDYgKzY2Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfbGVha19wYWdlcyh1NjQgcGZuLCB1bnNpZ25lZCBpbnQgcGFnZXMpXFxuIFxcdF9fc25wX2xlYWtfcGFnZXMocGZuLCBwYWdlcywgdHJ1ZSk7XFxuIH1cXG4gaW50IHNucF9wcmVwYXJlKHZvaWQpO1xcbit2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCk7XFxuK3ZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKTtcXG4gdm9pZCBzbnBfc2h1dGRvd24odm9pZCk7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxcbkBAIC02ODAsNiArNjgyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNucF9sZWFrX3BhZ2VzKHU2NCBwZm4sIHVuc2lnbmVkIGludCBucGFnZXMpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrZHVtcF9zZXZfY2FsbGJhY2sodm9pZCkgeyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfZml4dXBfZTgyMF90YWJsZXModm9pZCkge31cXG4gc3RhdGljIGlubGluZSBpbnQgc25wX3ByZXBhcmUodm9pZCkgeyByZXR1cm4gLUVOT0RFVjsgfVxcbitzdGF0aWMgaW5saW5lIHZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKSB7fVxcbitzdGF0aWMgaW5saW5lIHZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKSB7fVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgc25wX3NodXRkb3duKHZvaWQpIHt9XFxuICNlbmRpZlxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcXG5pbmRleCA4NjY1YTY0NzQ4MDZjLi5kMTc5NWNlMjE5ZGFiIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jXFxuQEAgLTY3LDYgKzY3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVpZF9iaXQgY3B1aWRfYml0c1tdID0ge1xcbiBcXHR7IFg4Nl9GRUFUVVJFX1BFUkZNT05fVjIsXFx0XFx0Q1BVSURfRUFYLCAgMCwgMHg4MDAwMDAyMiwgMCB9LFxcbiBcXHR7IFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIsXFx0XFx0Q1BVSURfRUFYLCAgMSwgMHg4MDAwMDAyMiwgMCB9LFxcbiBcXHR7IFg4Nl9GRUFUVVJFX0FNRF9MQlJfUE1DX0ZSRUVaRSxcXHRDUFVJRF9FQVgsICAyLCAweDgwMDAwMDIyLCAwIH0sXFxuK1xcdHsgWDg2X0ZFQVRVUkVfUk1QT1BULFxcdFxcdFxcdENQVUlEX0VEWCwgIDAsIDB4ODAwMDAwMjUsIDAgfSxcXG4gXFx0eyBYODZfRkVBVFVSRV9BTURfSFRSX0NPUkVTLFxcdFxcdENQVUlEX0VBWCwgMzAsIDB4ODAwMDAwMjYsIDAgfSxcXG4gXFx0eyAwLCAwLCAwLCAwLCAwIH1cXG4gfTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG5pbmRleCA1NzA1NzIzZjFmNDEyLi4wYmFiZjk2ZTM4YzZmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXFxuQEAgLTMwMzIsNiArMzAzMiwxNiBAQCB2b2lkIHNldl92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChzbnBfZGVjb21taXNzaW9uX2NvbnRleHQoa3ZtKSlcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogUGVyZm9ybSBSTVAgb3B0aW1pemF0aW9ucyBvbiBtZW1vcnkgZnJlZWQgYnkgdGVybWluYXRpbmdcXG4rXFx0XFx0ICogZ3Vlc3RzLiAgVGhlIHNjYW4gaXMgZGVmZXJyZWQsIHNvIGl0IG5vcm1hbGx5IHJ1bnMgYWZ0ZXJcXG4rXFx0XFx0ICogc2V2X2dtZW1faW52YWxpZGF0ZSgpIGhhcyBjb252ZXJ0ZWQgdGhpcyBndWVzdCdzIHBhZ2VzIGJhY2sgdG9cXG4rXFx0XFx0ICogc2hhcmVkLCBhbmQgcGlja3MgdGhlbSB1cCB0aGVuLiAgQSB2ZXJ5IGxhcmdlIGd1ZXN0IHdob3NlXFxuK1xcdFxcdCAqIGNvbnZlcnNpb24gaGFzIG5vdCBmaW5pc2hlZCBieSB0aGVuIGlzIHBpY2tlZCB1cCBieSBhIGxhdGVyXFxuK1xcdFxcdCAqIHRlYXJkb3duJ3Mgc2Nhbi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0c2V2X3VuYmluZF9hc2lkKGt2bSwgc2V2LVxcdTAwM2VoYW5kbGUpO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jIGIvYXJjaC94ODYvdmlydC9zdm0vc2V2LmNcXG5pbmRleCBjZmYyODVkOGFkOGUzLi5mYjY2YTFhYTZmYzM1IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jXFxuKysrIGIvYXJjaC94ODYvdmlydC9zdm0vc2V2LmNcXG5AQCAtMTksNiArMTksNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9tbXUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2FtZC1pb21tdS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbm9zcGVjLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vc2V2LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vcHJvY2Vzc29yLmhcXHUwMDNlXFxuQEAgLTEyNCw2ICsxMjUsMTcgQEAgc3RhdGljIHZvaWQgKnJtcF9ib29ra2VlcGluZyBfX3JvX2FmdGVyX2luaXQ7XFxuIFxcbiBzdGF0aWMgdTY0IHByb2JlZF9ybXBfYmFzZSwgcHJvYmVkX3JtcF9zaXplO1xcbiBcXG4rc3RhdGljIHU2NCBybXBvcHRfcGFfc3RhcnQsIHJtcG9wdF9wYV9lbmQ7XFxuK1xcbitlbnVtIHJtcG9wdF9vcF90eXBlIHtcXG4rXFx0Uk1QT1BUX09QX1ZFUklGWV9BTkRfUkVQT1JUX1NUQVRVUyxcXG4rXFx0Uk1QT1BUX09QX1JFUE9SVF9TVEFUVVNcXG4rfTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcm1wb3B0X3dxO1xcbitzdGF0aWMgc3RydWN0IGRlbGF5ZWRfd29yayBybXBvcHRfZGVsYXllZF93b3JrO1xcbitzdGF0aWMgREVGSU5FX01VVEVYKHJtcG9wdF93cV9tdXRleCk7XFxuK1xcbiBzdGF0aWMgTElTVF9IRUFEKHNucF9sZWFrZWRfcGFnZXNfbGlzdCk7XFxuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc25wX2xlYWtlZF9wYWdlc19saXN0X2xvY2spO1xcbiBcXG5AQCAtNTEzLDcgKzUyNSw2IEBAIHN0YXRpYyB2b2lkIGNsZWFyX2hzYXZlX3BhKHZvaWQgKmFyZylcXG4gXFxuIGludCBzbnBfcHJlcGFyZSh2b2lkKVxcbiB7XFxuLVxcdGludCByZXQ7XFxuIFxcdHU2NCB2YWw7XFxuIFxcbiBcXHQvKlxcbkBAIC01MjYsMTQgKzUzNywxOCBAQCBpbnQgc25wX3ByZXBhcmUodm9pZClcXG4gXFxuIFxcdGNsZWFyX3JtcCgpO1xcbiBcXG4tXFx0Y3B1c19yZWFkX2xvY2soKTtcXG4rXFx0LypcXG4rXFx0ICogTm8gQ1BVIG1heSBjb21lIG9ubGluZSB3aXRob3V0IFNucEVuIHdoaWxlIFNOUCBpcyBhY3RpdmU7IGRpc2FibGVcXG4rXFx0ICogaG90cGx1ZyBoZXJlIGFuZCByZS1lbmFibGUgaXQgaW4gc25wX3NodXRkb3duKCkuXFxuK1xcdCAqL1xcbitcXHRjcHVfaG90cGx1Z19kaXNhYmxlKCk7XFxuIFxcbiBcXHRpZiAoIWNwdW1hc2tfZXF1YWwoY3B1X29ubGluZV9tYXNrLCBjcHVfcHJlc2VudF9tYXNrKSkge1xcbi1cXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0Y3B1X2hvdHBsdWdfZW5hYmxlKCk7XFxuIFxcdFxcdHByX3dhcm4oXFxcIlNOUCBpbml0IGZhaWxlZDogbm90IGFsbCBDUFVzIG9ubGluZS4gKCUqcGJsIG9ubGluZSBcXHUwMDNjLVxcdTAwM2UgJSpwYmwgcHJlc2VudCBtYXNrcykuXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRjcHVtYXNrX3ByX2FyZ3MoY3B1X29ubGluZV9tYXNrKSxcXG4gXFx0XFx0XFx0Y3B1bWFza19wcl9hcmdzKGNwdV9wcmVzZW50X21hc2spKTtcXG4tXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFx0fVxcbiBcXG4gXFx0d2JpbnZkX29uX2FsbF9jcHVzKCk7XFxuQEAgLTU0OCwxNCArNTYzLDM1IEBAIGludCBzbnBfcHJlcGFyZSh2b2lkKVxcbiBcXHQvKiBTTlBfSU5JVCByZXF1aXJlcyBNU1JfVk1fSFNBVkVfUEEgdG8gYmUgY2xlYXJlZCBvbiBhbGwgQ1BVcy4gKi9cXG4gXFx0b25fZWFjaF9jcHUoY2xlYXJfaHNhdmVfcGEsIE5VTEwsIDEpO1xcbiBcXG4tXFx0cmV0ID0gMDtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcHJlcGFyZSwgXFxcImNjcFxcXCIpO1xcbiBcXG4tdW5sb2NrOlxcbi1cXHRjcHVzX3JlYWRfdW5sb2NrKCk7XFxuK3N0YXRpYyB2b2lkIHJtcG9wdF9kaXNhYmxlKHZvaWQpXFxuK3tcXG4rXFx0aW50IGNwdTtcXG4gXFxuLVxcdHJldHVybiByZXQ7XFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2cm1wb3B0X3dxX211dGV4KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIHJtcG9wdF93cSBpcyBub24tTlVMTCBvbmx5IGFmdGVyIFJNUE9QVCBoYXMgYmVlbiBmdWxseSBzZXQgdXA6IHRoZVxcbitcXHQgKiB3b3JrcXVldWUgaXMgYWxsb2NhdGVkIGFuZCB0aGUgUk1QT1BUX0JBU0UgTVNScyBhcmUgcHJvZ3JhbW1lZC5cXG4rXFx0ICogc25wX3NldHVwX3JtcG9wdCgpIHJlc2V0cyBpdCB0byBOVUxMIGlmIGFueSBvZiB0aG9zZSBzdGVwcyBmYWlsLCBzbyBhXFxuK1xcdCAqIE5VTEwgcm1wb3B0X3dxIG1lYW5zIG5vdGhpbmcgd2FzIHNldCB1cCBhbmQgdGhlcmUgaXMgbm90aGluZyB0byB0ZWFyXFxuK1xcdCAqIGRvd24uXFxuK1xcdCAqL1xcbitcXHRpZiAoIXJtcG9wdF93cSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrKTtcXG4rXFx0ZGVzdHJveV93b3JrcXVldWUocm1wb3B0X3dxKTtcXG4rXFxuK1xcdGZvcl9lYWNoX2NwdShjcHUsIGNwdV9wcmltYXJ5X3RocmVhZF9tYXNrKVxcbitcXHRcXHR3cm1zcnFfb25fY3B1KGNwdSwgTVNSX0FNRDY0X1JNUE9QVF9CQVNFLCAwKTtcXG4rXFxuK1xcdHJtcG9wdF9wYV9zdGFydCA9IHJtcG9wdF9wYV9lbmQgPSAwO1xcbitcXHRybXBvcHRfd3EgPSBOVUxMO1xcbiB9XFxuLUVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3ByZXBhcmUsIFxcXCJjY3BcXFwiKTtcXG4gXFxuIHZvaWQgc25wX3NodXRkb3duKHZvaWQpXFxuIHtcXG5AQCAtNTY1LDExICs2MDEsMTU2IEBAIHZvaWQgc25wX3NodXRkb3duKHZvaWQpXFxuIFxcdGlmIChzeXNjZmcgXFx1MDAyNiBNU1JfQU1ENjRfU1lTQ0ZHX1NOUF9FTilcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0cm1wb3B0X2Rpc2FibGUoKTtcXG4rXFxuIFxcdGNsZWFyX3JtcCgpO1xcbiBcXHRvbl9lYWNoX2NwdShtZmRfcmVjb25maWd1cmUsIE5VTEwsIDEpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIGZpcm13YXJlIGhhcyBkaXNhYmxlZCBTTlAgKFNucEVuIGlzIGNsZWFyKSwgc28gcmUtZW5hYmxlIENQVVxcbitcXHQgKiBob3RwbHVnLiAgQSBsZWdhY3kgU05QIHNodXRkb3duIHJldHVybnMgYWJvdmUgd2l0aCBTbnBFbiBzdGlsbCBzZXQgYW5kXFxuK1xcdCAqIGxlYXZlcyBob3RwbHVnIGRpc2FibGVkLlxcbitcXHQgKi9cXG4rXFx0Y3B1X2hvdHBsdWdfZW5hYmxlKCk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2h1dGRvd24sIFxcXCJjY3BcXFwiKTtcXG4gXFxuK3N0YXRpYyBib29sIHJtcG9wdF9jYXBhYmxlKHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QT1BUKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG4rfVxcbitcXG4rLypcXG4rICogUk1QT1BUIG9wdGltaXphdGlvbnMgc2tpcCBSTVAgY2hlY2tzIGF0IDFHQiBncmFudWxhcml0eSBpZiB0aGlzIHJhbmdlIG9mXFxuKyAqIG1lbW9yeSBkb2VzIG5vdCBjb250YWluIGFueSBTTlAgZ3Vlc3QgbWVtb3J5LlxcbisgKlxcbisgKiBAcGEgaXMgYSBzeXN0ZW0gcGh5c2ljYWwgYWRkcmVzczsgUk1QT1BUIG9wZXJhdGVzIG9uIHRoZSBjb250YWluaW5nIDFHQi5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHJtcG9wdCh1NjQgcGEpXFxuK3tcXG4rXFx0ZW51bSBybXBvcHRfb3BfdHlwZSBvcCA9IFJNUE9QVF9PUF9WRVJJRllfQU5EX1JFUE9SVF9TVEFUVVM7XFxuK1xcdHU2NCBwYV9zdGFydCA9IEFMSUdOX0RPV04ocGEsIFNaXzFHKTtcXG4rXFxuK1xcdGFzbSB2b2xhdGlsZShcXFwiLmJ5dGUgMHhmMiwgMHgwZiwgMHgwMSwgMHhmY1xcXCJcXG4rXFx0XFx0ICAgICA6OiBcXFwiYVxcXCIgKHBhX3N0YXJ0KSwgXFxcImNcXFwiIChvcClcXG4rXFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiLCBcXFwiY2NcXFwiKTtcXG4rfVxcbitcXG4rLyogb25fZWFjaF9jcHUoKSBjYWxsYmFjazogb3B0aW1pemUgdGhlIHdob2xlIFJNUE9QVCByYW5nZSBvbiB0aGlzIENQVS4gKi9cXG4rc3RhdGljIHZvaWQgcm1wb3B0X3NjYW5fcmFuZ2Uodm9pZCAqYXJnKVxcbit7XFxuK1xcdHU2NCBwYTtcXG4rXFxuK1xcdGZvciAocGEgPSBybXBvcHRfcGFfc3RhcnQ7IHBhIFxcdTAwM2Mgcm1wb3B0X3BhX2VuZDsgcGEgKz0gU1pfMUcpXFxuK1xcdFxcdHJtcG9wdChwYSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGRvX3JtcG9wdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHQvKlxcbitcXHQgKiBSTVBPUFQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGEgUk1QIHRhYmxlIHNjYW4gaW4gcmVzZXJ2ZWQgcHJvY2Vzc29yXFxuK1xcdCAqIG1lbW9yeSwgYWxsb3dpbmcgZnV0dXJlIGludm9jYXRpb25zIHRvIHNraXAgc3VjaCBjb3N0bHkgb3BlcmF0aW9ucy5cXG4rXFx0ICovXFxuK1xcdG1pZ3JhdGVfZGlzYWJsZSgpO1xcbitcXHRybXBvcHRfc2Nhbl9yYW5nZShOVUxMKTtcXG4rXFx0bWlncmF0ZV9lbmFibGUoKTtcXG4rXFxuK1xcdG9uX2VhY2hfY3B1X21hc2soY3B1X3ByaW1hcnlfdGhyZWFkX21hc2ssIHJtcG9wdF9zY2FuX3JhbmdlLCBOVUxMLCB0cnVlKTtcXG4rfVxcbitcXG4rLypcXG4rICogRGVsYXksIGluIG1pbGxpc2Vjb25kcywgYmVmb3JlIHRoZSBSTVAgcmUtb3B0aW1pemF0aW9uIHBhc3MgcnVucyBhZnRlciBhblxcbisgKiBTTlAgZ3Vlc3QgaXMgdG9ybiBkb3duLiAgc25wX3JtcG9wdF9hbGxfcGh5c21lbSgpIHJlLWFybXMgdGhlIGRlbGF5ZWQgd29ya1xcbisgKiB3aXRoIG1vZF9kZWxheWVkX3dvcmsoKSBvbiBlYWNoIHRlYXJkb3duLCBzbyB0aGUgcGFzcyBmaXJlcyB0aGlzIGxvbmcgYWZ0ZXJcXG4rICogdGhlIGxhc3QgdGVhcmRvd24uICBUaGlzIGNvYWxlc2NlcyBhIGJ1cnN0IG9mIHRlYXJkb3ducyBpbnRvIGEgc2luZ2xlIHNjYW5cXG4rICogYW5kIGdpdmVzIGVhY2ggZ3Vlc3QncyBwYWdlcyB0aW1lIHRvIGJlIGNvbnZlcnRlZCBiYWNrIHRvIHRoZSBzaGFyZWQsXFxuKyAqIGh5cGVydmlzb3Itb3duZWQgc3RhdGUgYmVmb3JlIHRoZSBzY2FuIHJlLW9wdGltaXplcyB0aGVpciAxR0IgcmVnaW9ucy4gIFRoZVxcbisgKiAxMCBzZWNvbmQgdmFsdWUgaXMgYSBoZXVyaXN0aWMgdHJhZGluZyByZS1vcHRpbWl6YXRpb24gbGF0ZW5jeSBhZ2FpbnN0XFxuKyAqIHNjYW5uaW5nIHRvbyBlYWdlcmx5LlxcbisgKi9cXG4rI2RlZmluZSBSTVBPUFRfV09SS19USU1FT1VUXFx0KDEwICogTVNFQ19QRVJfU0VDKVxcbitcXG4rdm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpXFxuK3tcXG4rXFx0aWYgKCFybXBvcHRfY2FwYWJsZSgpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnJtcG9wdF93cV9tdXRleCk7XFxuK1xcbitcXHRpZiAoIXJtcG9wdF93cSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bW9kX2RlbGF5ZWRfd29yayhybXBvcHRfd3EsIFxcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLFxcbitcXHRcXHRcXHQgbXNlY3NfdG9famlmZmllcyhSTVBPUFRfV09SS19USU1FT1VUKSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcm1wb3B0X2FsbF9waHlzbWVtLCBcXFwia3ZtLWFtZFxcXCIpO1xcbitcXG4rdm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpXFxuK3tcXG4rXFx0dTY0IHJtcG9wdF9iYXNlO1xcbitcXHRpbnQgY3B1O1xcbitcXG4rXFx0aWYgKCFybXBvcHRfY2FwYWJsZSgpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnJtcG9wdF93cV9tdXRleCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBPbiByZS1pbml0aWFsaXphdGlvbiBhZnRlciBhIGxlZ2FjeSBTTlAgc2h1dGRvd24gKFNOUF9TSFVURE9XTl9FWFxcbitcXHQgKiB3aXRoIHg4Nl9zbnBfc2h1dGRvd249MCksIHNucF9zaHV0ZG93bigpIGFuZCB0aHVzIHJtcG9wdF9kaXNhYmxlKCkgYXJlXFxuK1xcdCAqIHNraXBwZWQsIHNvIHRoZSB3b3JrcXVldWUsIGRlbGF5ZWQgd29yayBhbmQgcGVyLUNQVSBSTVBPUFRfQkFTRSBNU1JzXFxuK1xcdCAqIGFyZSBzdGlsbCBzZXQgdXAgYW5kIHZhbGlkIChTbnBFbiBzdGF5ZWQgc2V0IGFuZCBDUFUgaG90cGx1ZyBzdGF5ZWRcXG4rXFx0ICogZGlzYWJsZWQpLiAgUmF0aGVyIHRoYW4gcmUtZG9pbmcgdGhlIHNldHVwLCB3aGljaCB3b3VsZCBsZWFrIHRoZVxcbitcXHQgKiBleGlzdGluZyBzdGF0ZSwganVzdCByZS1xdWV1ZSB0aGUgb3B0aW1pemF0aW9uIHBhc3MgdG8gcmUtb3B0aW1pemUgYW55XFxuK1xcdCAqIG1lbW9yeSB0aGUgcHJldmlvdXMgU05QIHNlc3Npb24gZGUtb3B0aW1pemVkLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJtcG9wdF93cSkge1xcbitcXHRcXHRxdWV1ZV9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogQ3JlYXRlIGFuIFJNUE9QVC1zcGVjaWZpYyB3b3JrcXVldWUgdG8gYXZvaWQgc2NoZWR1bGluZ1xcbitcXHQgKiBSTVBPUFQgd29ya2l0ZW0gb24gdGhlIGdsb2JhbCBzeXN0ZW0gd29ya3F1ZXVlLlxcbitcXHQgKi9cXG4rXFx0cm1wb3B0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJybXBvcHRfd3FcXFwiLCBXUV9VTkJPVU5ELCAxKTtcXG4rXFx0aWYgKCFybXBvcHRfd3EpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gYWxsb2NhdGUgUk1QT1BUIHdvcmtxdWV1ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmssIGRvX3JtcG9wdF93b3JrKTtcXG4rXFxuK1xcdHJtcG9wdF9wYV9zdGFydCA9IEFMSUdOX0RPV04oUEZOX1BIWVMobWluX2xvd19wZm4pLCBTWl8xRyk7XFxuK1xcdHJtcG9wdF9iYXNlID0gcm1wb3B0X3BhX3N0YXJ0IHwgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEU7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQZXItQ1BVIFJNUE9QVCB0YWJsZXMgY292ZXIgYXQgbW9zdCAyIFRCLiAgUHJvZ3JhbSBlYWNoIGNvcmUnc1xcbitcXHQgKiBSTVBPUFRfQkFTRSB3aXRoIHRoZSBzdGFydCBvZiBSQU0gdG8gb3B0aW1pemUgdXAgdG8gMiBUQi5cXG4rXFx0ICovXFxuK1xcdGZvcl9lYWNoX2NwdShjcHUsIGNwdV9wcmltYXJ5X3RocmVhZF9tYXNrKVxcbitcXHRcXHR3cm1zcnFfb25fY3B1KGNwdSwgTVNSX0FNRDY0X1JNUE9QVF9CQVNFLCBybXBvcHRfYmFzZSk7XFxuK1xcbitcXHRybXBvcHRfcGFfZW5kID0gQUxJR04oUEZOX1BIWVMobWF4X3BmbiksIFNaXzFHKTtcXG4rXFxuK1xcdC8qIExpbWl0IG1lbW9yeSBzY2FubmluZyB0byAyVEIgb2YgUkFNICovXFxuK1xcdGlmICgocm1wb3B0X3BhX2VuZCAtIHJtcG9wdF9wYV9zdGFydCkgXFx1MDAzZSBTWl8yVCkge1xcbitcXHRcXHRwcl9pbmZvKFxcXCJSTVBPUFQgY292ZXJhZ2UgbGltaXRlZCB0byAyVEI7IG1lbW9yeSBhYm92ZSAweCVsbHggbm90IG9wdGltaXplZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cm1wb3B0X3BhX3N0YXJ0ICsgU1pfMlQpO1xcbitcXHRcXHRybXBvcHRfcGFfZW5kID0gcm1wb3B0X3BhX3N0YXJ0ICsgU1pfMlQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE9uY2UgYWxsIHBlci1DUFUgUk1QT1BUIHRhYmxlcyBoYXZlIGJlZW4gY29uZmlndXJlZCwgZW5hYmxlIFJNUE9QVFxcbitcXHQgKiBvcHRpbWl6YXRpb25zIG9uIGFsbCBwaHlzaWNhbCBtZW1vcnkuXFxuK1xcdCAqL1xcbitcXHRxdWV1ZV9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7XFxuK1xcbitcXHRwcl9pbmZvKFxcXCJSTVBPUFQgb3B0aW1pemF0aW9ucyBlbmFibGVkXFxcXG5cXFwiKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zZXR1cF9ybXBvcHQsIFxcXCJjY3BcXFwiKTtcXG4rXFxuIC8qXFxuICAqIERvIHRoZSBuZWNlc3NhcnkgcHJlcGFyYXRpb25zIHdoaWNoIGFyZSB2ZXJpZmllZCBieSB0aGUgZmlybXdhcmUgYXNcXG4gICogZGVzY3JpYmVkIGluIHRoZSBTTlBfSU5JVF9FWCBmaXJtd2FyZSBjb21tYW5kIGRlc2NyaXB0aW9uIGluIHRoZSBTTlBcXG5AQCAtNTc3LDYgKzc1OCw4IEBAIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCBcXFwiY2NwXFxcIik7XFxuICAqL1xcbiBpbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpXFxuIHtcXG4rXFx0dTY0IHZhbDtcXG4rXFxuIFxcdGlmIChXQVJOX09OX09OQ0UoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpKVxcbiBcXHRcXHRyZXR1cm4gLUVOT1NZUztcXG4gXFxuQEAgLTU4Niw2ICs3NjksMTUgQEAgaW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxcbiBcXHRpZiAoIXNldHVwX3JtcHRhYmxlKCkpXFxuIFxcdFxcdHJldHVybiAtRU5PU1lTO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogT24gYSBrZXhlYyBib290IFNOUCBtYXkgYWxyZWFkeSBiZSBlbmFibGVkIChsZWdhY3kgZmlybXdhcmUgbGVhdmVzXFxuK1xcdCAqIFNucEVuIHNldCBhY3Jvc3Mgc2h1dGRvd24pLCBpbiB3aGljaCBjYXNlIHNucF9wcmVwYXJlKCkgYmFpbHMgd2l0aG91dFxcbitcXHQgKiBkaXNhYmxpbmcgQ1BVIGhvdHBsdWcsIHNvIGRpc2FibGUgaXQgaGVyZS5cXG4rXFx0ICovXFxuK1xcdHJkbXNycShNU1JfQU1ENjRfU1lTQ0ZHLCB2YWwpO1xcbitcXHRpZiAodmFsIFxcdTAwMjYgTVNSX0FNRDY0X1NZU0NGR19TTlBfRU4pXFxuK1xcdFxcdGNwdV9ob3RwbHVnX2Rpc2FibGUoKTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFNldHRpbmcgY3Jhc2hfa2V4ZWNfcG9zdF9ub3RpZmllcnMgdG8gJ3RydWUnIHRvIGVuc3VyZSB0aGF0IFNOUCBwYW5pY1xcbiBcXHQgKiBub3RpZmllciBpcyBpbnZva2VkIHRvIGRvIFNOUCBJT01NVSBzaHV0ZG93biBiZWZvcmUga2R1bXAuXFxuQEAgLTY4MywxMyArODc1LDIxIEBAIHN0YXRpYyBib29sIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKHZvaWQpXFxuIFxcbiBib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpXFxuIHtcXG4tXFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU0VHTUVOVEVEX1JNUCkpXFxuK1xcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFR01FTlRFRF9STVApKSB7XFxuIFxcdFxcdHJkbXNycShNU1JfQU1ENjRfUk1QX0NGRywgcm1wX2NmZyk7XFxuIFxcbi1cXHRpZiAocm1wX2NmZyBcXHUwMDI2IE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRUQpXFxuLVxcdFxcdHJldHVybiBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbygpO1xcbi1cXHRlbHNlXFxuLVxcdFxcdHJldHVybiBwcm9iZV9jb250aWd1b3VzX3JtcHRhYmxlX2luZm8oKTtcXG4rXFx0XFx0aWYgKHJtcF9jZmcgXFx1MDAyNiBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEKVxcbitcXHRcXHRcXHRyZXR1cm4gcHJvYmVfc2VnbWVudGVkX3JtcHRhYmxlX2luZm8oKTtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogU2VnbWVudGVkIFJNUCBpcyBlaXRoZXIgbm90IHN1cHBvcnRlZCBvbiB0aGUgcGxhdGZvcm0gb3IgaXNcXG4rXFx0ICogZGlzYWJsZWQgYnkgdGhlIGZpcm13YXJlLiAgUk1QT1BUIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dFxcbitcXHQgKiBzZWdtZW50ZWQgUk1QLlxcbitcXHQgKi9cXG4rXFx0c2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9STVBPUFQpO1xcbitcXG4rXFx0cmV0dXJuIHByb2JlX2NvbnRpZ3VvdXNfcm1wdGFibGVfaW5mbygpO1xcbiB9XFxuIFxcbiAvKlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jIGIvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY1xcbmluZGV4IGY4MzNjYjdlNGRhMzYuLjI4N2E4MzQ1ODU0YmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY1xcbisrKyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcXG5AQCAtMTY2Myw2ICsxNjYzLDggQEAgc3RhdGljIGludCBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoaW50ICplcnJvciwgdW5zaWduZWQgaW50IG1heF9zbnBfYXNpZClcXG4gXFxuIFxcdHNldl9lc190bXJfc2l6ZSA9IFNOUF9UTVJfU0laRTtcXG4gXFxuK1xcdHNucF9zZXR1cF9ybXBvcHQoKTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMTo1Mzo1MC40Mjk1NDE1ODRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjYwNTg2NjE1ODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciBBTUQgU0VWLVNOUCBSTVBPUFQgKFJNUCBPcHRpbWl6YXRpb24pIGluc3RydWN0aW9ucyBhbmQgbWFuYWdlbWVudCBmb3IgQU1EIFplbjYrIGhvc3QgcHJvY2Vzc29ycy4gVGhlc2UgY29kZSBwYXRocyByZXF1aXJlIHBoeXNpY2FsIEFNRCBoYXJkd2FyZSBzdXBwb3J0aW5nIFNFVi1TTlAgaG9zdCBmZWF0dXJlcyBhbmQgdGhlIEFNRCBQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCksIGFuZCBhcmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluc2lkZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IgZGlzYWJsZXMgQ0NfQVRUUl9IT1NUX1NFVl9TTlAgZHVyaW5nIGJvb3QpLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNkODZjNjgyZjgxN2IxMjcwYTM1ODUzMzIyN2FjNjAwODllYmE2NGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDIxOjUzOjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbmluZGV4IGY3MGVlNzRiNWY5MjEuLjNiNWIzMmQzMzkxYjUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG5AQCAtNzYsNyArNzYsNyBAQFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfSzhcdFx0XHQoIDMqMzIrIDQpIC8qIE9wdGVyb24sIEF0aGxvbjY0ICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9aRU41XHRcdCggMyozMisgNSkgLyogQ1BVIGJhc2VkIG9uIFplbjUgbWljcm9hcmNoaXRlY3R1cmUgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1pFTjZcdFx0KCAzKjMyKyA2KSAvKiBDUFUgYmFzZWQgb24gWmVuNiBtaWNyb2FyY2hpdGVjdHVyZSAqL1xuLS8qIEZyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDMqMzIrIDcpICovXG4rI2RlZmluZSBYODZfRkVBVFVSRV9STVBPUFRcdFx0KCAzKjMyKyA3KSAvKiBTdXBwb3J0IGZvciBBTUQgUk1QT1BUIGluc3RydWN0aW9uICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9DT05TVEFOVF9UU0NcdCggMyozMisgOCkgLyogXCJjb25zdGFudF90c2NcIiBUU0MgdGlja3MgYXQgYSBjb25zdGFudCByYXRlICovXG4gLyogZnJlZTogd2FzICNkZWZpbmUgWDg2X0ZFQVRVUkVfVVBcdCggMyozMisgOSkgKiBcInVwXCIgU01QIGtlcm5lbCBydW5uaW5nIG9uIFVQICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9BUlRcdFx0XHQoIDMqMzIrMTApIC8qIFwiYXJ0XCIgQWx3YXlzIHJ1bm5pbmcgdGltZXIgKEFSVCkgKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXG5pbmRleCAzYThlNTFhMGM5ZTg4Li4xNjM1ZTJlMWM1NzZhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXG5AQCAtNzYxLDYgKzc2MSw5IEBAXG4gI2RlZmluZSBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVFx0MFxuICNkZWZpbmUgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRFx0QklUX1VMTChNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVClcbiAjZGVmaW5lIE1TUl9BTUQ2NF9STVBfU0VHTUVOVF9TSElGVCh4KVx0KCgoeCkgXHUwMDI2IEdFTk1BU0tfVUxMKDEzLCA4KSkgXHUwMDNlXHUwMDNlIDgpXG4rI2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0JBU0VcdFx0MHhjMDAxMDEzOVxuKyNkZWZpbmUgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVfQklUXHQwXG4rI2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRVx0XHRCSVRfVUxMKE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFX0JJVClcbiBcbiAjZGVmaW5lIE1TUl9TVlNNX0NBQVx0XHRcdDB4YzAwMWYwMDBcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXG5pbmRleCA5ZTdhMDc3YzQ0NWRjLi4zMjM1ZTE3MTY0N2RkIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXG5AQCAtNjYyLDYgKzY2Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfbGVha19wYWdlcyh1NjQgcGZuLCB1bnNpZ25lZCBpbnQgcGFnZXMpXG4gXHRfX3NucF9sZWFrX3BhZ2VzKHBmbiwgcGFnZXMsIHRydWUpO1xuIH1cbiBpbnQgc25wX3ByZXBhcmUodm9pZCk7XG4rdm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpO1xuK3ZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKTtcbiB2b2lkIHNucF9zaHV0ZG93bih2b2lkKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxuQEAgLTY4MCw2ICs2ODIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc25wX2xlYWtfcGFnZXModTY0IHBmbiwgdW5zaWduZWQgaW50IG5wYWdlcykge31cbiBzdGF0aWMgaW5saW5lIHZvaWQga2R1bXBfc2V2X2NhbGxiYWNrKHZvaWQpIHsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfZml4dXBfZTgyMF90YWJsZXModm9pZCkge31cbiBzdGF0aWMgaW5saW5lIGludCBzbnBfcHJlcGFyZSh2b2lkKSB7IHJldHVybiAtRU5PREVWOyB9XG4rc3RhdGljIGlubGluZSB2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCkge31cbitzdGF0aWMgaW5saW5lIHZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2h1dGRvd24odm9pZCkge31cbiAjZW5kaWZcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xuaW5kZXggODY2NWE2NDc0ODA2Yy4uZDE3OTVjZTIxOWRhYiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcbkBAIC02Nyw2ICs2Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRfYml0IGNwdWlkX2JpdHNbXSA9IHtcbiBcdHsgWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMixcdFx0Q1BVSURfRUFYLCAgMCwgMHg4MDAwMDAyMiwgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9BTURfTEJSX1YyLFx0XHRDUFVJRF9FQVgsICAxLCAweDgwMDAwMDIyLCAwIH0sXG4gXHR7IFg4Nl9GRUFUVVJFX0FNRF9MQlJfUE1DX0ZSRUVaRSxcdENQVUlEX0VBWCwgIDIsIDB4ODAwMDAwMjIsIDAgfSxcbitcdHsgWDg2X0ZFQVRVUkVfUk1QT1BULFx0XHRcdENQVUlEX0VEWCwgIDAsIDB4ODAwMDAwMjUsIDAgfSxcbiBcdHsgWDg2X0ZFQVRVUkVfQU1EX0hUUl9DT1JFUyxcdFx0Q1BVSURfRUFYLCAzMCwgMHg4MDAwMDAyNiwgMCB9LFxuIFx0eyAwLCAwLCAwLCAwLCAwIH1cbiB9O1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5pbmRleCA1NzA1NzIzZjFmNDEyLi4wYmFiZjk2ZTM4YzZmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuQEAgLTMwMzIsNiArMzAzMiwxNiBAQCB2b2lkIHNldl92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0ICovXG4gXHRcdGlmIChzbnBfZGVjb21taXNzaW9uX2NvbnRleHQoa3ZtKSlcbiBcdFx0XHRyZXR1cm47XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFBlcmZvcm0gUk1QIG9wdGltaXphdGlvbnMgb24gbWVtb3J5IGZyZWVkIGJ5IHRlcm1pbmF0aW5nXG4rXHRcdCAqIGd1ZXN0cy4gIFRoZSBzY2FuIGlzIGRlZmVycmVkLCBzbyBpdCBub3JtYWxseSBydW5zIGFmdGVyXG4rXHRcdCAqIHNldl9nbWVtX2ludmFsaWRhdGUoKSBoYXMgY29udmVydGVkIHRoaXMgZ3Vlc3QncyBwYWdlcyBiYWNrIHRvXG4rXHRcdCAqIHNoYXJlZCwgYW5kIHBpY2tzIHRoZW0gdXAgdGhlbi4gIEEgdmVyeSBsYXJnZSBndWVzdCB3aG9zZVxuK1x0XHQgKiBjb252ZXJzaW9uIGhhcyBub3QgZmluaXNoZWQgYnkgdGhlbiBpcyBwaWNrZWQgdXAgYnkgYSBsYXRlclxuK1x0XHQgKiB0ZWFyZG93bidzIHNjYW4uXG4rXHRcdCAqL1xuK1x0XHRzbnBfcm1wb3B0X2FsbF9waHlzbWVtKCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRzZXZfdW5iaW5kX2FzaWQoa3ZtLCBzZXYtXHUwMDNlaGFuZGxlKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYyBiL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jXG5pbmRleCBjZmYyODVkOGFkOGUzLi5mYjY2YTFhYTZmYzM1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvdmlydC9zdm0vc2V2LmNcbisrKyBiL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jXG5AQCAtMTksNiArMTksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hbWQtaW9tbXUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25vc3BlYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc2V2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcHJvY2Vzc29yLmhcdTAwM2VcbkBAIC0xMjQsNiArMTI1LDE3IEBAIHN0YXRpYyB2b2lkICpybXBfYm9va2tlZXBpbmcgX19yb19hZnRlcl9pbml0O1xuIFxuIHN0YXRpYyB1NjQgcHJvYmVkX3JtcF9iYXNlLCBwcm9iZWRfcm1wX3NpemU7XG4gXG4rc3RhdGljIHU2NCBybXBvcHRfcGFfc3RhcnQsIHJtcG9wdF9wYV9lbmQ7XG4rXG4rZW51bSBybXBvcHRfb3BfdHlwZSB7XG4rXHRSTVBPUFRfT1BfVkVSSUZZX0FORF9SRVBPUlRfU1RBVFVTLFxuK1x0Uk1QT1BUX09QX1JFUE9SVF9TVEFUVVNcbit9O1xuK1xuK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcm1wb3B0X3dxO1xuK3N0YXRpYyBzdHJ1Y3QgZGVsYXllZF93b3JrIHJtcG9wdF9kZWxheWVkX3dvcms7XG4rc3RhdGljIERFRklORV9NVVRFWChybXBvcHRfd3FfbXV0ZXgpO1xuK1xuIHN0YXRpYyBMSVNUX0hFQUQoc25wX2xlYWtlZF9wYWdlc19saXN0KTtcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNucF9sZWFrZWRfcGFnZXNfbGlzdF9sb2NrKTtcbiBcbkBAIC01MTMsNyArNTI1LDYgQEAgc3RhdGljIHZvaWQgY2xlYXJfaHNhdmVfcGEodm9pZCAqYXJnKVxuIFxuIGludCBzbnBfcHJlcGFyZSh2b2lkKVxuIHtcbi1cdGludCByZXQ7XG4gXHR1NjQgdmFsO1xuIFxuIFx0LypcbkBAIC01MjYsMTQgKzUzNywxOCBAQCBpbnQgc25wX3ByZXBhcmUodm9pZClcbiBcbiBcdGNsZWFyX3JtcCgpO1xuIFxuLVx0Y3B1c19yZWFkX2xvY2soKTtcbitcdC8qXG4rXHQgKiBObyBDUFUgbWF5IGNvbWUgb25saW5lIHdpdGhvdXQgU25wRW4gd2hpbGUgU05QIGlzIGFjdGl2ZTsgZGlzYWJsZVxuK1x0ICogaG90cGx1ZyBoZXJlIGFuZCByZS1lbmFibGUgaXQgaW4gc25wX3NodXRkb3duKCkuXG4rXHQgKi9cbitcdGNwdV9ob3RwbHVnX2Rpc2FibGUoKTtcbiBcbiBcdGlmICghY3B1bWFza19lcXVhbChjcHVfb25saW5lX21hc2ssIGNwdV9wcmVzZW50X21hc2spKSB7XG4tXHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuK1x0XHRjcHVfaG90cGx1Z19lbmFibGUoKTtcbiBcdFx0cHJfd2FybihcIlNOUCBpbml0IGZhaWxlZDogbm90IGFsbCBDUFVzIG9ubGluZS4gKCUqcGJsIG9ubGluZSBcdTAwM2MtXHUwMDNlICUqcGJsIHByZXNlbnQgbWFza3MpLlxcblwiLFxuIFx0XHRcdGNwdW1hc2tfcHJfYXJncyhjcHVfb25saW5lX21hc2spLFxuIFx0XHRcdGNwdW1hc2tfcHJfYXJncyhjcHVfcHJlc2VudF9tYXNrKSk7XG4tXHRcdGdvdG8gdW5sb2NrO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG4gXG4gXHR3YmludmRfb25fYWxsX2NwdXMoKTtcbkBAIC01NDgsMTQgKzU2MywzNSBAQCBpbnQgc25wX3ByZXBhcmUodm9pZClcbiBcdC8qIFNOUF9JTklUIHJlcXVpcmVzIE1TUl9WTV9IU0FWRV9QQSB0byBiZSBjbGVhcmVkIG9uIGFsbCBDUFVzLiAqL1xuIFx0b25fZWFjaF9jcHUoY2xlYXJfaHNhdmVfcGEsIE5VTEwsIDEpO1xuIFxuLVx0cmV0ID0gMDtcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9wcmVwYXJlLCBcImNjcFwiKTtcbiBcbi11bmxvY2s6XG4tXHRjcHVzX3JlYWRfdW5sb2NrKCk7XG4rc3RhdGljIHZvaWQgcm1wb3B0X2Rpc2FibGUodm9pZClcbit7XG4rXHRpbnQgY3B1O1xuIFxuLVx0cmV0dXJuIHJldDtcbitcdGd1YXJkKG11dGV4KShcdTAwMjZybXBvcHRfd3FfbXV0ZXgpO1xuK1xuK1x0LypcbitcdCAqIHJtcG9wdF93cSBpcyBub24tTlVMTCBvbmx5IGFmdGVyIFJNUE9QVCBoYXMgYmVlbiBmdWxseSBzZXQgdXA6IHRoZVxuK1x0ICogd29ya3F1ZXVlIGlzIGFsbG9jYXRlZCBhbmQgdGhlIFJNUE9QVF9CQVNFIE1TUnMgYXJlIHByb2dyYW1tZWQuXG4rXHQgKiBzbnBfc2V0dXBfcm1wb3B0KCkgcmVzZXRzIGl0IHRvIE5VTEwgaWYgYW55IG9mIHRob3NlIHN0ZXBzIGZhaWwsIHNvIGFcbitcdCAqIE5VTEwgcm1wb3B0X3dxIG1lYW5zIG5vdGhpbmcgd2FzIHNldCB1cCBhbmQgdGhlcmUgaXMgbm90aGluZyB0byB0ZWFyXG4rXHQgKiBkb3duLlxuK1x0ICovXG4rXHRpZiAoIXJtcG9wdF93cSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmspO1xuK1x0ZGVzdHJveV93b3JrcXVldWUocm1wb3B0X3dxKTtcbitcbitcdGZvcl9lYWNoX2NwdShjcHUsIGNwdV9wcmltYXJ5X3RocmVhZF9tYXNrKVxuK1x0XHR3cm1zcnFfb25fY3B1KGNwdSwgTVNSX0FNRDY0X1JNUE9QVF9CQVNFLCAwKTtcbitcbitcdHJtcG9wdF9wYV9zdGFydCA9IHJtcG9wdF9wYV9lbmQgPSAwO1xuK1x0cm1wb3B0X3dxID0gTlVMTDtcbiB9XG4tRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcHJlcGFyZSwgXCJjY3BcIik7XG4gXG4gdm9pZCBzbnBfc2h1dGRvd24odm9pZClcbiB7XG5AQCAtNTY1LDExICs2MDEsMTU2IEBAIHZvaWQgc25wX3NodXRkb3duKHZvaWQpXG4gXHRpZiAoc3lzY2ZnIFx1MDAyNiBNU1JfQU1ENjRfU1lTQ0ZHX1NOUF9FTilcbiBcdFx0cmV0dXJuO1xuIFxuK1x0cm1wb3B0X2Rpc2FibGUoKTtcbitcbiBcdGNsZWFyX3JtcCgpO1xuIFx0b25fZWFjaF9jcHUobWZkX3JlY29uZmlndXJlLCBOVUxMLCAxKTtcbitcbitcdC8qXG4rXHQgKiBUaGUgZmlybXdhcmUgaGFzIGRpc2FibGVkIFNOUCAoU25wRW4gaXMgY2xlYXIpLCBzbyByZS1lbmFibGUgQ1BVXG4rXHQgKiBob3RwbHVnLiAgQSBsZWdhY3kgU05QIHNodXRkb3duIHJldHVybnMgYWJvdmUgd2l0aCBTbnBFbiBzdGlsbCBzZXQgYW5kXG4rXHQgKiBsZWF2ZXMgaG90cGx1ZyBkaXNhYmxlZC5cbitcdCAqL1xuK1x0Y3B1X2hvdHBsdWdfZW5hYmxlKCk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCBcImNjcFwiKTtcbiBcbitzdGF0aWMgYm9vbCBybXBvcHRfY2FwYWJsZSh2b2lkKVxuK3tcbitcdHJldHVybiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUE9QVCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbit9XG4rXG4rLypcbisgKiBSTVBPUFQgb3B0aW1pemF0aW9ucyBza2lwIFJNUCBjaGVja3MgYXQgMUdCIGdyYW51bGFyaXR5IGlmIHRoaXMgcmFuZ2Ugb2ZcbisgKiBtZW1vcnkgZG9lcyBub3QgY29udGFpbiBhbnkgU05QIGd1ZXN0IG1lbW9yeS5cbisgKlxuKyAqIEBwYSBpcyBhIHN5c3RlbSBwaHlzaWNhbCBhZGRyZXNzOyBSTVBPUFQgb3BlcmF0ZXMgb24gdGhlIGNvbnRhaW5pbmcgMUdCLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJtcG9wdCh1NjQgcGEpXG4re1xuK1x0ZW51bSBybXBvcHRfb3BfdHlwZSBvcCA9IFJNUE9QVF9PUF9WRVJJRllfQU5EX1JFUE9SVF9TVEFUVVM7XG4rXHR1NjQgcGFfc3RhcnQgPSBBTElHTl9ET1dOKHBhLCBTWl8xRyk7XG4rXG4rXHRhc20gdm9sYXRpbGUoXCIuYnl0ZSAweGYyLCAweDBmLCAweDAxLCAweGZjXCJcbitcdFx0ICAgICA6OiBcImFcIiAocGFfc3RhcnQpLCBcImNcIiAob3ApXG4rXHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIpO1xuK31cbitcbisvKiBvbl9lYWNoX2NwdSgpIGNhbGxiYWNrOiBvcHRpbWl6ZSB0aGUgd2hvbGUgUk1QT1BUIHJhbmdlIG9uIHRoaXMgQ1BVLiAqL1xuK3N0YXRpYyB2b2lkIHJtcG9wdF9zY2FuX3JhbmdlKHZvaWQgKmFyZylcbit7XG4rXHR1NjQgcGE7XG4rXG4rXHRmb3IgKHBhID0gcm1wb3B0X3BhX3N0YXJ0OyBwYSBcdTAwM2Mgcm1wb3B0X3BhX2VuZDsgcGEgKz0gU1pfMUcpXG4rXHRcdHJtcG9wdChwYSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGRvX3JtcG9wdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHQvKlxuK1x0ICogUk1QT1BUIGNhY2hlcyB0aGUgcmVzdWx0cyBvZiBhIFJNUCB0YWJsZSBzY2FuIGluIHJlc2VydmVkIHByb2Nlc3NvclxuK1x0ICogbWVtb3J5LCBhbGxvd2luZyBmdXR1cmUgaW52b2NhdGlvbnMgdG8gc2tpcCBzdWNoIGNvc3RseSBvcGVyYXRpb25zLlxuK1x0ICovXG4rXHRtaWdyYXRlX2Rpc2FibGUoKTtcbitcdHJtcG9wdF9zY2FuX3JhbmdlKE5VTEwpO1xuK1x0bWlncmF0ZV9lbmFibGUoKTtcbitcbitcdG9uX2VhY2hfY3B1X21hc2soY3B1X3ByaW1hcnlfdGhyZWFkX21hc2ssIHJtcG9wdF9zY2FuX3JhbmdlLCBOVUxMLCB0cnVlKTtcbit9XG4rXG4rLypcbisgKiBEZWxheSwgaW4gbWlsbGlzZWNvbmRzLCBiZWZvcmUgdGhlIFJNUCByZS1vcHRpbWl6YXRpb24gcGFzcyBydW5zIGFmdGVyIGFuXG4rICogU05QIGd1ZXN0IGlzIHRvcm4gZG93bi4gIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKSByZS1hcm1zIHRoZSBkZWxheWVkIHdvcmtcbisgKiB3aXRoIG1vZF9kZWxheWVkX3dvcmsoKSBvbiBlYWNoIHRlYXJkb3duLCBzbyB0aGUgcGFzcyBmaXJlcyB0aGlzIGxvbmcgYWZ0ZXJcbisgKiB0aGUgbGFzdCB0ZWFyZG93bi4gIFRoaXMgY29hbGVzY2VzIGEgYnVyc3Qgb2YgdGVhcmRvd25zIGludG8gYSBzaW5nbGUgc2NhblxuKyAqIGFuZCBnaXZlcyBlYWNoIGd1ZXN0J3MgcGFnZXMgdGltZSB0byBiZSBjb252ZXJ0ZWQgYmFjayB0byB0aGUgc2hhcmVkLFxuKyAqIGh5cGVydmlzb3Itb3duZWQgc3RhdGUgYmVmb3JlIHRoZSBzY2FuIHJlLW9wdGltaXplcyB0aGVpciAxR0IgcmVnaW9ucy4gIFRoZVxuKyAqIDEwIHNlY29uZCB2YWx1ZSBpcyBhIGhldXJpc3RpYyB0cmFkaW5nIHJlLW9wdGltaXphdGlvbiBsYXRlbmN5IGFnYWluc3RcbisgKiBzY2FubmluZyB0b28gZWFnZXJseS5cbisgKi9cbisjZGVmaW5lIFJNUE9QVF9XT1JLX1RJTUVPVVRcdCgxMCAqIE1TRUNfUEVSX1NFQylcbitcbit2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZClcbit7XG4rXHRpZiAoIXJtcG9wdF9jYXBhYmxlKCkpXG4rXHRcdHJldHVybjtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZybXBvcHRfd3FfbXV0ZXgpO1xuK1xuK1x0aWYgKCFybXBvcHRfd3EpXG4rXHRcdHJldHVybjtcbitcbitcdG1vZF9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLFxuK1x0XHRcdCBtc2Vjc190b19qaWZmaWVzKFJNUE9QVF9XT1JLX1RJTUVPVVQpKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcm1wb3B0X2FsbF9waHlzbWVtLCBcImt2bS1hbWRcIik7XG4rXG4rdm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpXG4re1xuK1x0dTY0IHJtcG9wdF9iYXNlO1xuK1x0aW50IGNwdTtcbitcbitcdGlmICghcm1wb3B0X2NhcGFibGUoKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJtcG9wdF93cV9tdXRleCk7XG4rXG4rXHQvKlxuK1x0ICogT24gcmUtaW5pdGlhbGl6YXRpb24gYWZ0ZXIgYSBsZWdhY3kgU05QIHNodXRkb3duIChTTlBfU0hVVERPV05fRVhcbitcdCAqIHdpdGggeDg2X3NucF9zaHV0ZG93bj0wKSwgc25wX3NodXRkb3duKCkgYW5kIHRodXMgcm1wb3B0X2Rpc2FibGUoKSBhcmVcbitcdCAqIHNraXBwZWQsIHNvIHRoZSB3b3JrcXVldWUsIGRlbGF5ZWQgd29yayBhbmQgcGVyLUNQVSBSTVBPUFRfQkFTRSBNU1JzXG4rXHQgKiBhcmUgc3RpbGwgc2V0IHVwIGFuZCB2YWxpZCAoU25wRW4gc3RheWVkIHNldCBhbmQgQ1BVIGhvdHBsdWcgc3RheWVkXG4rXHQgKiBkaXNhYmxlZCkuICBSYXRoZXIgdGhhbiByZS1kb2luZyB0aGUgc2V0dXAsIHdoaWNoIHdvdWxkIGxlYWsgdGhlXG4rXHQgKiBleGlzdGluZyBzdGF0ZSwganVzdCByZS1xdWV1ZSB0aGUgb3B0aW1pemF0aW9uIHBhc3MgdG8gcmUtb3B0aW1pemUgYW55XG4rXHQgKiBtZW1vcnkgdGhlIHByZXZpb3VzIFNOUCBzZXNzaW9uIGRlLW9wdGltaXplZC5cbitcdCAqL1xuK1x0aWYgKHJtcG9wdF93cSkge1xuK1x0XHRxdWV1ZV9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLCAwKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIENyZWF0ZSBhbiBSTVBPUFQtc3BlY2lmaWMgd29ya3F1ZXVlIHRvIGF2b2lkIHNjaGVkdWxpbmdcbitcdCAqIFJNUE9QVCB3b3JraXRlbSBvbiB0aGUgZ2xvYmFsIHN5c3RlbSB3b3JrcXVldWUuXG4rXHQgKi9cbitcdHJtcG9wdF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcInJtcG9wdF93cVwiLCBXUV9VTkJPVU5ELCAxKTtcbitcdGlmICghcm1wb3B0X3dxKSB7XG4rXHRcdHByX2VycihcIkZhaWxlZCB0byBhbGxvY2F0ZSBSTVBPUFQgd29ya3F1ZXVlXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLCBkb19ybXBvcHRfd29yayk7XG4rXG4rXHRybXBvcHRfcGFfc3RhcnQgPSBBTElHTl9ET1dOKFBGTl9QSFlTKG1pbl9sb3dfcGZuKSwgU1pfMUcpO1xuK1x0cm1wb3B0X2Jhc2UgPSBybXBvcHRfcGFfc3RhcnQgfCBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRTtcbitcbitcdC8qXG4rXHQgKiBQZXItQ1BVIFJNUE9QVCB0YWJsZXMgY292ZXIgYXQgbW9zdCAyIFRCLiAgUHJvZ3JhbSBlYWNoIGNvcmUnc1xuK1x0ICogUk1QT1BUX0JBU0Ugd2l0aCB0aGUgc3RhcnQgb2YgUkFNIHRvIG9wdGltaXplIHVwIHRvIDIgVEIuXG4rXHQgKi9cbitcdGZvcl9lYWNoX2NwdShjcHUsIGNwdV9wcmltYXJ5X3RocmVhZF9tYXNrKVxuK1x0XHR3cm1zcnFfb25fY3B1KGNwdSwgTVNSX0FNRDY0X1JNUE9QVF9CQVNFLCBybXBvcHRfYmFzZSk7XG4rXG4rXHRybXBvcHRfcGFfZW5kID0gQUxJR04oUEZOX1BIWVMobWF4X3BmbiksIFNaXzFHKTtcbitcbitcdC8qIExpbWl0IG1lbW9yeSBzY2FubmluZyB0byAyVEIgb2YgUkFNICovXG4rXHRpZiAoKHJtcG9wdF9wYV9lbmQgLSBybXBvcHRfcGFfc3RhcnQpIFx1MDAzZSBTWl8yVCkge1xuK1x0XHRwcl9pbmZvKFwiUk1QT1BUIGNvdmVyYWdlIGxpbWl0ZWQgdG8gMlRCOyBtZW1vcnkgYWJvdmUgMHglbGx4IG5vdCBvcHRpbWl6ZWRcXG5cIixcbitcdFx0XHRybXBvcHRfcGFfc3RhcnQgKyBTWl8yVCk7XG4rXHRcdHJtcG9wdF9wYV9lbmQgPSBybXBvcHRfcGFfc3RhcnQgKyBTWl8yVDtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBPbmNlIGFsbCBwZXItQ1BVIFJNUE9QVCB0YWJsZXMgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQsIGVuYWJsZSBSTVBPUFRcbitcdCAqIG9wdGltaXphdGlvbnMgb24gYWxsIHBoeXNpY2FsIG1lbW9yeS5cbitcdCAqL1xuK1x0cXVldWVfZGVsYXllZF93b3JrKHJtcG9wdF93cSwgXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7XG4rXG4rXHRwcl9pbmZvKFwiUk1QT1BUIG9wdGltaXphdGlvbnMgZW5hYmxlZFxcblwiKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2V0dXBfcm1wb3B0LCBcImNjcFwiKTtcbitcbiAvKlxuICAqIERvIHRoZSBuZWNlc3NhcnkgcHJlcGFyYXRpb25zIHdoaWNoIGFyZSB2ZXJpZmllZCBieSB0aGUgZmlybXdhcmUgYXNcbiAgKiBkZXNjcmliZWQgaW4gdGhlIFNOUF9JTklUX0VYIGZpcm13YXJlIGNvbW1hbmQgZGVzY3JpcHRpb24gaW4gdGhlIFNOUFxuQEAgLTU3Nyw2ICs3NTgsOCBAQCBFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zaHV0ZG93biwgXCJjY3BcIik7XG4gICovXG4gaW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxuIHtcbitcdHU2NCB2YWw7XG4rXG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKSlcbiBcdFx0cmV0dXJuIC1FTk9TWVM7XG4gXG5AQCAtNTg2LDYgKzc2OSwxNSBAQCBpbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpXG4gXHRpZiAoIXNldHVwX3JtcHRhYmxlKCkpXG4gXHRcdHJldHVybiAtRU5PU1lTO1xuIFxuK1x0LypcbitcdCAqIE9uIGEga2V4ZWMgYm9vdCBTTlAgbWF5IGFscmVhZHkgYmUgZW5hYmxlZCAobGVnYWN5IGZpcm13YXJlIGxlYXZlc1xuK1x0ICogU25wRW4gc2V0IGFjcm9zcyBzaHV0ZG93biksIGluIHdoaWNoIGNhc2Ugc25wX3ByZXBhcmUoKSBiYWlscyB3aXRob3V0XG4rXHQgKiBkaXNhYmxpbmcgQ1BVIGhvdHBsdWcsIHNvIGRpc2FibGUgaXQgaGVyZS5cbitcdCAqL1xuK1x0cmRtc3JxKE1TUl9BTUQ2NF9TWVNDRkcsIHZhbCk7XG4rXHRpZiAodmFsIFx1MDAyNiBNU1JfQU1ENjRfU1lTQ0ZHX1NOUF9FTilcbitcdFx0Y3B1X2hvdHBsdWdfZGlzYWJsZSgpO1xuK1xuIFx0LypcbiBcdCAqIFNldHRpbmcgY3Jhc2hfa2V4ZWNfcG9zdF9ub3RpZmllcnMgdG8gJ3RydWUnIHRvIGVuc3VyZSB0aGF0IFNOUCBwYW5pY1xuIFx0ICogbm90aWZpZXIgaXMgaW52b2tlZCB0byBkbyBTTlAgSU9NTVUgc2h1dGRvd24gYmVmb3JlIGtkdW1wLlxuQEAgLTY4MywxMyArODc1LDIxIEBAIHN0YXRpYyBib29sIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKHZvaWQpXG4gXG4gYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKVxuIHtcbi1cdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFR01FTlRFRF9STVApKVxuK1x0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU0VHTUVOVEVEX1JNUCkpIHtcbiBcdFx0cmRtc3JxKE1TUl9BTUQ2NF9STVBfQ0ZHLCBybXBfY2ZnKTtcbiBcbi1cdGlmIChybXBfY2ZnIFx1MDAyNiBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEKVxuLVx0XHRyZXR1cm4gcHJvYmVfc2VnbWVudGVkX3JtcHRhYmxlX2luZm8oKTtcbi1cdGVsc2Vcbi1cdFx0cmV0dXJuIHByb2JlX2NvbnRpZ3VvdXNfcm1wdGFibGVfaW5mbygpO1xuK1x0XHRpZiAocm1wX2NmZyBcdTAwMjYgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRClcbitcdFx0XHRyZXR1cm4gcHJvYmVfc2VnbWVudGVkX3JtcHRhYmxlX2luZm8oKTtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBTZWdtZW50ZWQgUk1QIGlzIGVpdGhlciBub3Qgc3VwcG9ydGVkIG9uIHRoZSBwbGF0Zm9ybSBvciBpc1xuK1x0ICogZGlzYWJsZWQgYnkgdGhlIGZpcm13YXJlLiAgUk1QT1BUIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dFxuK1x0ICogc2VnbWVudGVkIFJNUC5cbitcdCAqL1xuK1x0c2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9STVBPUFQpO1xuK1xuK1x0cmV0dXJuIHByb2JlX2NvbnRpZ3VvdXNfcm1wdGFibGVfaW5mbygpO1xuIH1cbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMgYi9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jXG5pbmRleCBmODMzY2I3ZTRkYTM2Li4yODdhODM0NTg1NGJhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY1xuKysrIGIvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY1xuQEAgLTE2NjMsNiArMTY2Myw4IEBAIHN0YXRpYyBpbnQgX19zZXZfc25wX2luaXRfbG9ja2VkKGludCAqZXJyb3IsIHVuc2lnbmVkIGludCBtYXhfc25wX2FzaWQpXG4gXG4gXHRzZXZfZXNfdG1yX3NpemUgPSBTTlBfVE1SX1NJWkU7XG4gXG4rXHRzbnBfc2V0dXBfcm1wb3B0KCk7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMTo1Mzo1MC40Mjk1NDM3MjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4ODcyNTQ1NjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0VWLVNOUCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpczogaXMgdGhpcyBwYXRjaCBmdXp6LXdvcnRoeSwgYW5kIGlmIHNvLCBob3cgZG8gd2UgYmVzdCBhcHByb2FjaCBpdD8gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGNoYW5nZWQuIExvb2tzIGxpa2Ugd2UndmUgZ290IHNvbWUgbmV3IGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gYFJNUE9QVGAgKFJlc3RyaWN0ZWQgTWVtb3J5IFByb3RlY3Rpb24gT3B0aW9uYWwpIGluIHRoZSBgeDg2YCBhcmNoaXRlY3R1cmUsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIEFNRCBTRVYtU05QIChTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIC0gU2VjdXJlIE5lc3RlZCBQYWdpbmcpLlxuXG5JIHNlZSBoZWFkZXIgZmlsZXMgZGVmaW5pbmcgYFg4Nl9GRUFUVVJFX1JNUE9QVGAsIE1TUnMgbGlrZSBgTVNSX0FNRDY0X1JNUE9QVF9CQVNFYCwgYW5kIHNvbWUgc3VwcG9ydGluZyBmdW5jdGlvbnMgbGlrZSBgc25wX3JtcG9wdF9hbGxfcGh5c21lbWAgYW5kIGBzbnBfc2V0dXBfcm1wb3B0YC4gVGhlIGNoYW5nZXMgYXJlIHNwcmVhZCBhY3Jvc3MgdmFyaW91cyBwYXJ0cyBvZiB0aGUga2VybmVsLiBXZSdyZSB0b3VjaGluZyBgY3B1ZmVhdHVyZXMuaGAsIGBtc3ItaW5kZXguaGAsIGBzZXYuaGAsIHRoZSBgc2NhdHRlcmVkLmNgIGZpbGUgKHdoaWNoIG5vdyBpbmNsdWRlcyB0aGUgYFg4Nl9GRUFUVVJFX1JNUE9QVGApLCBhbmQgdGhlbiBib3RoIHRoZSBLVk0gYW5kIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uIFNWTSBjb2RlLiBJdCBzZWVtcyBsaWtlIHRoZSBLVk0gY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBlbmFibGluZyBhbmQgZGlzYWJsaW5nIGBSTVBPUFRgLCBhbmQgdGhlIFNFVi1TTlAgaG9zdCBzZXR1cC4gVGhlIGNyeXB0byBkcml2ZXIgYWxzbyBnZXRzIGludm9sdmVkLCBjYWxsaW5nIGBzbnBfc2V0dXBfcm1wb3B0KClgIHdpdGhpbiBgc2V2X3NucF9pbml0X2xvY2tlZCgpYC5cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGNhbiB3ZSBldmVuICpmdXp6KiB0aGlzIGluIGEgdHlwaWNhbCBlbnZpcm9ubWVudD8gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgU0VWLVNOUCdzIHJlbGlhbmNlIG9uIHNwZWNpZmljIEFNRCBoYXJkd2FyZSBhbmQgcG90ZW50aWFsbHkgYSBzcGVjaWZpYyBDQ1AgKENyeXB0b2dyYXBoaWMgQ29wcm9jZXNzb3IpIG9yIGZpcm13YXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgcmVhbGlzdGljYWxseSByZWFjaGFibGUgaW4gYSBRRU1VIHNldHVwLCBvciBHQ0UgZm9yIHRoYXQgbWF0dGVyLCBvciBpZiB3ZSdyZSBnb2luZyB0byBuZWVkIHNvbWUgY3VzdG9tIGVudmlyb25tZW50IHRvIHRyaWdnZXIgdGhlIG5ldyBjb2RlIHBhdGhzLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB3ZSBjYW4gcnVuIHRoZSBBTUQgU0VWLVNOUCBob3N0IGluIHN0YW5kYXJkIFFFTVUvbmVzdGVkIHZpcnR1YWxpemF0aW9uLCBvciBpZiBpdCByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZS9maXJtd2FyZSwgbGV0J3MgdmVyaWZ5IGhvdyBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAgd29ya3MsIG9yIHdoYXQgdGhlIEtjb25maWcgc2V0dGluZ3MgYXJlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcsIHByb2JhYmx5IHVzZSBncmVwLCBvciBqdXN0IHJlYWQgdGhlIGNvZGUgdG8gc2VlIGhvdyBTRVYtU05QIGlzIGNvbmZpZ3VyZWQsIGFuZCBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IHdlIG5lZWQgdG8gYWNjb3VudCBmb3IuIElmIGl0J3MgYSBoYXJkd2FyZS1nYXRlZCBmZWF0dXJlLCB0aGF0J3MgYSB3aG9sZSBkaWZmZXJlbnQgYmFsbGdhbWUgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNjMsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMTo1Mzo1OS4zMDIwOTIxMjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4NDkwNDUxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDQ19BVFRSX0hPU1RfU0VWX1NOUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9jb2NvL2NvcmUuYz03MD1zdGF0aWMgYm9vbCBub2luc3RyIGFtZF9jY19wbGF0Zm9ybV9oYXMoZW51bSBjY19hdHRyIGF0dHIpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xMDMtXFxuYXJjaC94ODYvY29jby9jb3JlLmM6MTA0OlxcdGNhc2UgQ0NfQVRUUl9IT1NUX1NFVl9TTlA6XFxuYXJjaC94ODYvY29jby9jb3JlLmMtMTA1LVxcdFxcdHJldHVybiBjY19mbGFncy5ob3N0X3Nldl9zbnA7XFxuLS1cXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYz0xNzA9c3RhdGljIHZvaWQgYW1kX2NjX3BsYXRmb3JtX2NsZWFyKGVudW0gY2NfYXR0ciBhdHRyKVxcbi0tXFxuYXJjaC94ODYvY29jby9jb3JlLmMtMTcyLVxcdHN3aXRjaCAoYXR0cikge1xcbmFyY2gveDg2L2NvY28vY29yZS5jOjE3MzpcXHRjYXNlIENDX0FUVFJfSE9TVF9TRVZfU05QOlxcbmFyY2gveDg2L2NvY28vY29yZS5jLTE3NC1cXHRcXHRjY19mbGFncy5ob3N0X3Nldl9zbnAgPSAwO1xcbi0tXFxuYXJjaC94ODYvY29jby9jb3JlLmM9MTkyPXN0YXRpYyB2b2lkIGFtZF9jY19wbGF0Zm9ybV9zZXQoZW51bSBjY19hdHRyIGF0dHIpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xOTQtXFx0c3dpdGNoIChhdHRyKSB7XFxuYXJjaC94ODYvY29jby9jb3JlLmM6MTk1OlxcdGNhc2UgQ0NfQVRUUl9IT1NUX1NFVl9TTlA6XFxuYXJjaC94ODYvY29jby9jb3JlLmMtMTk2LVxcdFxcdGNjX2ZsYWdzLmhvc3Rfc2V2X3NucCA9IDE7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jPTM1Nj1zdGF0aWMgdm9pZCBic3BfZGV0ZXJtaW5lX3NucChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3My1cXHRcXHQgICAgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKSkge1xcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM6Mzc0OlxcdFxcdFxcdGNjX3BsYXRmb3JtX3NldChDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYy0zNzUtXFx0XFx0fSBlbHNlIHtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3Ni1cXHRcXHRcXHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1NFVl9TTlApO1xcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM6Mzc3OlxcdFxcdFxcdGNjX3BsYXRmb3JtX2NsZWFyKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3OC1cXHRcXHR9XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jPTEwND1zdGF0aWMgaW5saW5lIHZvaWQgazhfY2hlY2tfc3lzY2ZnX2RyYW1fbW9kX2VuKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jLTExMS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jOjExMjpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jLTExMy1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0xMjU3PXN0YXRpYyBib29sIF9faW5pdCBhdmljX3dhbnRfYXZpY19lbmFibGVkKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMjgwLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEyODE6XFx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMjgyLVxcdCAgICAhYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0hWX0lOVVNFX1dSX0FMTE9XRUQpKSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEyNTk9c3RhdGljIHZvaWQgKnNldl9kYmdfY3J5cHRfc2xvd19hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBfX3ZhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMjkzLVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTI5NDpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEyOTUtXFx0XFx0cmV0dXJuICh2b2lkICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xMzAwPXN0YXRpYyB2b2lkIHNldl9kYmdfY3J5cHRfc2xvd19mcmVlKHZvaWQgKmJ1ZilcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMDEte1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTMwMjpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMDMtXFx0XFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1Zik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTMwOTY9dm9pZCBfX2luaXQgc2V2X2hhcmR3YXJlX3NldHVwKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMDAtXFx0c2V2X2VzX3N1cHBvcnRlZCA9IHRydWU7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjAxOlxcdHNldl9zbnBfc3VwcG9ydGVkID0gc2V2X3NucF9lbmFibGVkIFxcdTAwMjZcXHUwMDI2IGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjAyLVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00OTk1PXN0cnVjdCBwYWdlICpzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUoaW50IG5vZGUsIGdmcF90IGdmcClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDk5OS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUwMDA6XFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTAwMS1cXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAgfCBfX0dGUF9aRVJPLCAwKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NTIxMz12b2lkIHNldl9nbWVtX21ha2Vfc2hhcmVkKGt2bV9wZm5fdCBwZm4sIGt2bV9wZm5fdCBucl9wYWdlcylcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTIxNi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUyMTc6XFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTIxOC1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdC5jPTEwMj12b2lkIF9faW5pdCBtZW1fZW5jcnlwdF9zZXR1cF9hcmNoKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdC5jLTExMC1cXHQgKi9cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdC5jOjExMTpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdC5jLTExMi1cXHRcXHRzbnBfZml4dXBfZTgyMF90YWJsZXMoKTtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL2NtZGxpbmUuYz0xOT1zdGF0aWMgaW50IF9faW5pdCBpbml0X3Nldl9jb25maWcoY2hhciAqc3RyKVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vY21kbGluZS5jLTMxLVxcdFxcdFxcdFxcdHNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfU0VWX1NOUCk7XFxuYXJjaC94ODYvdmlydC9zdm0vY21kbGluZS5jOjMyOlxcdFxcdFxcdFxcdGNjX3BsYXRmb3JtX2NsZWFyKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG5hcmNoL3g4Ni92aXJ0L3N2bS9jbWRsaW5lLmMtMzMtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xNDc9c3RhdGljIHZvaWQgbWZkX3JlY29uZmlndXJlKHZvaWQgKmFyZylcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xNDgte1xcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjE0OTpcXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTUwLVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTE1OD1zdGF0aWMgdm9pZCBzbnBfZW5hYmxlKHZvaWQgKmFyZylcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTE2MS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxNjI6XFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTE2My1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0yNjA9c3RhdGljIHZvaWQgY2xlYXJfcm1wKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0yNjQtXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MjY1OlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0yNjYtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9NjE4PXN0YXRpYyBib29sIHJtcG9wdF9jYXBhYmxlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy02MjAtXFx0cmV0dXJuIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QT1BUKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjYyMTpcXHQgICAgICAgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy02MjItfVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9NzU5PWludCBfX2luaXQgc25wX3JtcHRhYmxlX2luaXQodm9pZClcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTc2Mi1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo3NjM6XFx0aWYgKFdBUk5fT05fT05DRSghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSkpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNzY0LVxcdFxcdHJldHVybiAtRU5PU1lTO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9OTY4PXN0YXRpYyBpbnQgX19zbnBfbG9va3VwX3JtcGVudHJ5KHU2NCBwZm4sIHN0cnVjdCBybXBlbnRyeSAqZSwgaW50ICpsZXZlbClcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTk3Mi1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo5NzM6XFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTk3NC1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTEwOTQ9aW50IHBzbWFzaCh1NjQgcGZuKVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTA5OC1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxMDk5OlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMTAwLVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MTIwMz1zdGF0aWMgaW50IHJtcHVwZGF0ZSh1NjQgcGZuLCBzdHJ1Y3Qgcm1wX3N0YXRlICpzdGF0ZSlcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTEyMDctXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MTIwODpcXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTIwOS1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTEyOTY9dm9pZCBrZHVtcF9zZXZfY2FsbGJhY2sodm9pZClcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTEzMDEtXFx0ICovXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MTMwMjpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMzAzLVxcdFxcdHdiaW52ZCgpO1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0xNTA4PXN0YXRpYyBpbnQgX19zZXZfc25wX2luaXRfbG9ja2VkKGludCAqZXJyb3IsIHVuc2lnbmVkIGludCBtYXhfc25wX2FzaWQpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTE1MTYtXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoxNTE3OlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTE1MTgtXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTIwNjc9c3RhdGljIGludCBzZXZfZ2V0X2FwaV92ZXJzaW9uKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIwNzYtXFx0ICovXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoyMDc3OlxcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKSB7XFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMDc4LVxcdFxcdHJldCA9IHNucF9nZXRfcGxhdGZvcm1fZGF0YShzZXYsIFxcdTAwMjZlcnJvcik7XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTI5Nzc9dTY0IHNldl9nZXRfc25wX3BvbGljeV9iaXRzKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTI5ODItXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoyOTgzOlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTI5ODQtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9MzM5NT1zdGF0aWMgX19pbml0IHZvaWQgaW9tbXVfc25wX2VuYWJsZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMzOTctI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozMzk4OlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzM5OS1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzQ0MS1kaXNhYmxlX3NucDpcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzQ0MjpcXHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM0NDMtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9MzU2Nz1zdGF0aWMgaW50IF9faW5pdCBpb21tdV9nb190b19zdGF0ZShlbnVtIGlvbW11X2luaXRfc3RhdGUgc3RhdGUpXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzU4Ny1cXHQgKi9cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzU4ODpcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzU4OS1cXHQgICAgIVdBUk5fT05fT05DRShhbWRfaW9tbXVfc25wX2VuKSlcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzU5MDpcXHRcXHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM1OTEtXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9MzY5ND12b2lkIF9faW5pdCBhbWRfaW9tbXVfZGV0ZWN0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzcxMy1kaXNhYmxlX3NucDpcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzcxNDpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzcxNTpcXHRcXHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM3MTYtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oPTIyPWVudW0gY2NfYXR0ciB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmgtOTItXFx0LyoqXFxuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oOjkzOlxcdCAqIEBDQ19BVFRSX0hPU1RfU0VWX1NOUDogQU1EIFNOUCBlbmFibGVkIG9uIHRoZSBob3N0LlxcbmluY2x1ZGUvbGludXgvY2NfcGxhdGZvcm0uaC05NC1cXHQgKlxcbi0tXFxuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oLTk3LVxcdCAqL1xcbmluY2x1ZGUvbGludXgvY2NfcGxhdGZvcm0uaDo5ODpcXHRDQ19BVFRSX0hPU1RfU0VWX1NOUCxcXG5pbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmgtOTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIxOjU0OjAxLjY4NzAwMjEzNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNzAwNTQ4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgRW5hYmxpbmcgQ29uZGl0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcHJlY2lzZWx5IGFsbG93cyB0aGUgc3lzdGVtIHRvIHV0aWxpemUgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBhbmQgYFg4Nl9GRUFUVVJFX1JNUE9QVGAuIE15IGludHVpdGlvbiBzYXlzIGl0IHdpbGwgYmUgYmFzZWQgb24gQ1BVIGZsYWdzIG9yIHNvbWUgb3RoZXIgcGxhdGZvcm0gZmVhdHVyZS4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMsIEknbGwgZGl2ZSBpbnRvIHRoZSBgYXJjaC94ODYva2VybmVsL2NwdS9hbWQuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ2xsIHN0YXJ0IGFyb3VuZCBsaW5lIDM1NiwgYXMgdGhhdCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBwbGFjZSBmb3IgQU1ELXNwZWNpZmljIENQVSBmZWF0dXJlIGluaXRpYWxpemF0aW9uIG9yIGRldGVjdGlvbiBsb2dpYywgd2hlcmUgdGhlIGVuYWJsaW5nIGNvbmRpdGlvbnMgZm9yIHRoZXNlIGZlYXR1cmVzIHdvdWxkIGxpa2VseSBiZSBkZWZpbmVkLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUwNywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIxOjU0OjAzLjk1NzA2MDc3OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Mzk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM1MDpcXHRcXHRcXHRcXHRub2RlID0gbmVhcmJ5X25vZGUoYXBpY2lkKTtcXG4gMzUxOlxcdFxcdH1cXG4gMzUyOlxcdFxcdG51bWFfc2V0X25vZGUoY3B1LCBub2RlKTtcXG4gMzUzOlxcdCNlbmRpZlxcbiAzNTQ6XFx0fVxcbiAzNTU6XFx0XFxuIDM1NjpcXHRzdGF0aWMgdm9pZCBic3BfZGV0ZXJtaW5lX3NucChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXFxuIDM1NzpcXHR7XFxuIDM1ODpcXHQjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX0NDX1BMQVRGT1JNXFxuIDM1OTpcXHRcXHRjY192ZW5kb3IgPSBDQ19WRU5ET1JfQU1EO1xcbiAzNjA6XFx0XFxuIDM2MTpcXHRcXHRpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9TRVZfU05QKSkge1xcbiAzNjI6XFx0XFx0XFx0LypcXG4gMzYzOlxcdFxcdFxcdCAqIFJNUCB0YWJsZSBlbnRyeSBmb3JtYXQgaXMgbm90IGFyY2hpdGVjdHVyYWwgYW5kIGlzIGRlZmluZWQgYnkgdGhlXFxuIDM2NDpcXHRcXHRcXHQgKiBwZXItcHJvY2Vzc29yIFBQUi4gUmVzdHJpY3QgU05QIHN1cHBvcnQgb24gdGhlIGtub3duIENQVSBtb2RlbHNcXG4gMzY1OlxcdFxcdFxcdCAqIGZvciB3aGljaCB0aGUgUk1QIHRhYmxlIGVudHJ5IGZvcm1hdCBpcyBjdXJyZW50bHkgZGVmaW5lZCBvciBmb3JcXG4gMzY2OlxcdFxcdFxcdCAqIHByb2Nlc3NvcnMgd2hpY2ggc3VwcG9ydCB0aGUgYXJjaGl0ZWN0dXJhbGx5IGRlZmluZWQgUk1QUkVBRFxcbiAzNjc6XFx0XFx0XFx0ICogaW5zdHJ1Y3Rpb24uXFxuIDM2ODpcXHRcXHRcXHQgKi9cXG4gMzY5OlxcdFxcdFxcdGlmICghY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9IWVBFUlZJU09SKSBcXHUwMDI2XFx1MDAyNlxcbiAzNzA6XFx0XFx0XFx0ICAgIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1pFTjMpIHx8XFxuIDM3MTpcXHRcXHRcXHQgICAgIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfWkVONCkgfHxcXG4gMzcyOlxcdFxcdFxcdCAgICAgY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9STVBSRUFEKSkgXFx1MDAyNlxcdTAwMjZcXG4gMzczOlxcdFxcdFxcdCAgICBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpKSB7XFxuIDM3NDpcXHRcXHRcXHRcXHRjY19wbGF0Zm9ybV9zZXQoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xcbiAzNzU6XFx0XFx0XFx0fSBlbHNlIHtcXG4gMzc2OlxcdFxcdFxcdFxcdHNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfU0VWX1NOUCk7XFxuIDM3NzpcXHRcXHRcXHRcXHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuIDM3ODpcXHRcXHRcXHR9XFxuIDM3OTpcXHRcXHR9XFxuIDM4MDpcXHQjZW5kaWZcXG4gMzgxOlxcdH1cXG4gMzgyOlxcdFxcbiAzODM6XFx0I2RlZmluZSBaRU5fTU9ERUxfU1RFUF9VQ09ERShmYW0sIG1vZGVsLCBzdGVwLCB1Y29kZSkgXFxcXFxcbiAzODQ6XFx0XFx0WDg2X01BVENIX1ZGTV9TVEVQUyhWRk1fTUFLRShYODZfVkVORE9SX0FNRCwgZmFtLCBtb2RlbCksIFxcXFxcXG4gMzg1OlxcdFxcdFxcdFxcdCAgICBzdGVwLCBzdGVwLCB1Y29kZSlcXG4gMzg2OlxcdFxcbiAzODc6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfY3B1X2lkIGFtZF90c2FfbWljcm9jb2RlW10gPSB7XFxuIDM4ODpcXHRcXHRaRU5fTU9ERUxfU1RFUF9VQ09ERSgweDE5LCAweDAxLCAweDEsIDB4MGEwMDExZDcpLFxcbiAzODk6XFx0XFx0WkVOX01PREVMX1NURVBfVUNPREUoMHgxOSwgMHgwMSwgMHgyLCAweDBhMDAxMjNiKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjE6NTQ6MDMuOTU3MjA3NjE5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTUyMDg4MzgwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBTRVYtU05QIGFuZCBSTVBPUFQgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIExpbmUgMzY5IGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgZXllOiBgaWYgKCFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IpIFx1MDAyNlx1MDAyNiAuLi5gLiAgVGhlIGNoZWNrIGZvciB0aGUgYWJzZW5jZSBvZiB0aGUgaHlwZXJ2aXNvciBmZWF0dXJlIGlzIGludGVyZXN0aW5nLiBJIGtub3cgdGhhdCBgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUmAgaXMgc2V0IHdpdGhpbiBhIGh5cGVydmlzb3IgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRSAoQ1BVSUQgbGVhZiAweDEgRUNYIGJpdCAzMSkuIFNvLCBiZWNhdXNlIG9mIHRoaXMsIGBic3BfZGV0ZXJtaW5lX3NucGAgaXMgY29ycmVjdGx5IGNsZWFyaW5nIGBYODZfRkVBVFVSRV9TRVZfU05QYCBhbmQgdGhlbiBjYWxsaW5nIGBjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUClgIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLlxuXG5NeSBuZXh0IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhlIG9idmlvdXMg4oCTIGRvZXMgUUVNVSBldmVuICplbXVsYXRlKiBhIFNFVi1TTlAgaG9zdD8gSSBrbm93IGl0IGRvZXNuJ3QuIFNFVi1TTlAgbmVlZHMgYmFyZSBtZXRhbCBBTUQgaGFyZHdhcmUgd2l0aCBzcGVjaWZpYyBjb21wb25lbnRzIGFuZCBCSU9TL01TUiBzZXR0aW5ncy4gTm8gc3VycHJpc2VzIHRoZXJlLlxuXG5BbHJpZ2h0LCBtb3Zpbmcgb24sIEkgc2VlIGEgbmV3IGluc3RydWN0aW9uIGluIHRoZSBjb2RlOiBgYXNtIHZvbGF0aWxlKFwiLmJ5dGUgMHhmMiwgMHgwZiwgMHgwMSwgMHhmY1wiIDo6IFwiYVwiIChwYV9zdGFydCksIFwiY1wiIChvcCkgOiBcIm1lbW9yeVwiLCBcImNjXCIpO2AuIFRoaXMgaXMgYFJNUE9QVGAsIHdoaWNoIEkga25vdyBpcyBhbiBBTUQgWmVuNiBpbnN0cnVjdGlvbiAoQ1BVSUQgRm44MDAwXzAwMjVfRURYWzBdKS5cblxuSSBoYXZlIHRvIGxvb2sgYXQgYHJtcG9wdF9jYXBhYmxlKClgLiBJIHNlZSB0aGUgY2hlY2ssIGFuZCBpdCdzIHdoYXQgSSdkIGV4cGVjdDpcblxuYGBgY1xuc3RhdGljIGJvb2wgcm1wb3B0X2NhcGFibGUodm9pZClcbntcblx0cmV0dXJuIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QT1BUKSBcdTAwMjZcdTAwMjZcblx0ICAgICAgIGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XG59XG5gYGBcblxuVGhlbiBJIG5vdGljZTpcblxuYGBgY1xudm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpXG57XG5cdGlmICghcm1wb3B0X2NhcGFibGUoKSlcblx0XHRyZXR1cm47XG4uLi5cbmBgYFxuXG5gYGBjXG52b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZClcbntcbi4uLlxuXHRpZiAoIXJtcG9wdF9jYXBhYmxlKCkpXG5cdFx0cmV0dXJuO1xuLi4uXG5gYGBcblxuTWFrZXMgc2Vuc2UuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZ3VhcmRlZCBieSBgcm1wb3B0X2NhcGFibGUoKWAgYW5kIHNvIHdpbGwgbm90IGJlIGludm9rZWQgd2hlbiBydW5uaW5nIGluIGEgaHlwZXJ2aXNvci5cblxuTm93LCBsZXQncyBzaGlmdCBnZWFycy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0LiBJIG5lZWQgdG8gY2hlY2sgYHNucF9wcmVwYXJlKClgLCBgc25wX3NodXRkb3duKClgLCBhbmQgYHNucF9ybXB0YWJsZV9pbml0KClgLlxuXG5JIHNlZSBpbiBgc25wX3ByZXBhcmUoKWA6XG5cbmBgYGNcbmludCBzbnBfcHJlcGFyZSh2b2lkKVxue1xuLi4uXG5cdGNsZWFyX3JtcCgpO1xuXHRjcHVfaG90cGx1Z19kaXNhYmxlKCk7XG4uLi5cbmBgYFxuXG5JJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gc2VlIHdoZXJlIGBzbnBfcHJlcGFyZSgpYCBpcyBhY3R1YWxseSAqY2FsbGVkKiBmcm9tIGluIHRoZSBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgdG8gc2VlIGhvdyBhbGwgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0OTUsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMTo1NDowOS40NzgwOTQ2NTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczMjg2MjI2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbnBfcHJlcGFyZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02NjA9c3RhdGljIGlubGluZSB2b2lkIHNucF9sZWFrX3BhZ2VzKHU2NCBwZm4sIHVuc2lnbmVkIGludCBwYWdlcylcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY2My19XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjY0OmludCBzbnBfcHJlcGFyZSh2b2lkKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaC02NjUtdm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg9NjgzPXN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfZml4dXBfZTgyMF90YWJsZXModm9pZCkge31cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaDo2ODQ6c3RhdGljIGlubGluZSBpbnQgc25wX3ByZXBhcmUodm9pZCkgeyByZXR1cm4gLUVOT0RFVjsgfVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY4NS1zdGF0aWMgaW5saW5lIHZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKSB7fVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9NTIxPXN0YXRpYyB2b2lkIGNsZWFyX2hzYXZlX3BhKHZvaWQgKmFyZylcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTUyNS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo1MjY6aW50IHNucF9wcmVwYXJlKHZvaWQpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNTI3LXtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTU2Ny19XFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6NTY4OkVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3ByZXBhcmUsIFxcXCJjY3BcXFwiKTtcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy01NjktXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz03NTk9aW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNzczLVxcdCAqIE9uIGEga2V4ZWMgYm9vdCBTTlAgbWF5IGFscmVhZHkgYmUgZW5hYmxlZCAobGVnYWN5IGZpcm13YXJlIGxlYXZlc1xcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjc3NDpcXHQgKiBTbnBFbiBzZXQgYWNyb3NzIHNodXRkb3duKSwgaW4gd2hpY2ggY2FzZSBzbnBfcHJlcGFyZSgpIGJhaWxzIHdpdGhvdXRcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy03NzUtXFx0ICogZGlzYWJsaW5nIENQVSBob3RwbHVnLCBzbyBkaXNhYmxlIGl0IGhlcmUuXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTE1MDg9c3RhdGljIGludCBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoaW50ICplcnJvciwgdW5zaWduZWQgaW50IG1heF9zbnBfYXNpZClcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMTUzMC1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjE1MzE6XFx0cmMgPSBzbnBfcHJlcGFyZSgpO1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMTUzMi1cXHRpZiAocmMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIxOjU0OjExLjIxMDk2MzY2M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxODc4NjAyMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTRVYtU05QIERyaXZlcioqXG5cbk9rYXksIHNvIGBzbnBfcHJlcGFyZSgpYCBpcyBhcHBhcmVudGx5IG9ubHkgY2FsbGVkIHdpdGhpbiBgZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY2AsIHNwZWNpZmljYWxseSBpbiBgX19zZXZfc25wX2luaXRfbG9ja2VkKClgLiBUaGF0J3MgZ29vZCwgaXQgbmFycm93cyBkb3duIHdoZXJlIEkgbmVlZCB0byBmb2N1cy4gTm93LCBsZXQncyBzZWUsIGl0IGxvb2tzIGxpa2UgaXQgZG9lcyBzb21lIHF1aWNrIGNoZWNrcyBhdCB0aGUgYmVnaW5uaW5nOlxuXG5gYGBjXG5cdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcblx0XHRyZXR1cm4gLUVOT0RFVjtcbmBgYFxuXG5UaGlzIG1ha2VzIHN1cmUgdGhlIGhvc3QgYWN0dWFsbHkgc3VwcG9ydHMgU0VWLVNOUCBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4gU3RhbmRhcmQgc3R1ZmYuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIHRoaW5nIGJldHRlci4gSSd2ZSBnb3QgdG8gZmluZCBvdXQgd2hlcmUgYHNucF9zaHV0ZG93bigpYCBpcyBjYWxsZWQgZnJvbSwgc2luY2UgaXQncyBsb2dpY2FsIHRoYXQgdGhlcmUgc2hvdWxkIGJlIGEgY29ycmVzcG9uZGluZyBzaHV0ZG93biBmdW5jdGlvbi4gTGV0J3MgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDMyLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjE6NTQ6MTUuMzk4ODI2ODAyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM4MTg0MTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNucF9zaHV0ZG93blwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02NjY9dm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjY2Nzp2b2lkIHNucF9zaHV0ZG93bih2b2lkKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaC02NjgtI2Vsc2VcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oPTY4Nj1zdGF0aWMgaW5saW5lIHZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKSB7fVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjY4NzpzdGF0aWMgaW5saW5lIHZvaWQgc25wX3NodXRkb3duKHZvaWQpIHt9XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjg4LSNlbmRpZlxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9NTI2PWludCBzbnBfcHJlcGFyZSh2b2lkKVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNTQxLVxcdCAqIE5vIENQVSBtYXkgY29tZSBvbmxpbmUgd2l0aG91dCBTbnBFbiB3aGlsZSBTTlAgaXMgYWN0aXZlOyBkaXNhYmxlXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6NTQyOlxcdCAqIGhvdHBsdWcgaGVyZSBhbmQgcmUtZW5hYmxlIGl0IGluIHNucF9zaHV0ZG93bigpLlxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTU0My1cXHQgKi9cXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTU3MD1zdGF0aWMgdm9pZCBybXBvcHRfZGlzYWJsZSh2b2lkKVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNTk1LVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjU5Njp2b2lkIHNucF9zaHV0ZG93bih2b2lkKVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTU5Ny17XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy02MTUtfVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjYxNjpFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zaHV0ZG93biwgXFxcImNjcFxcXCIpO1xcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTYxNy1cXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTY4OT12b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZClcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTcwMC1cXHQgKiBPbiByZS1pbml0aWFsaXphdGlvbiBhZnRlciBhIGxlZ2FjeSBTTlAgc2h1dGRvd24gKFNOUF9TSFVURE9XTl9FWFxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjcwMTpcXHQgKiB3aXRoIHg4Nl9zbnBfc2h1dGRvd249MCksIHNucF9zaHV0ZG93bigpIGFuZCB0aHVzIHJtcG9wdF9kaXNhYmxlKCkgYXJlXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNzAyLVxcdCAqIHNraXBwZWQsIHNvIHRoZSB3b3JrcXVldWUsIGRlbGF5ZWQgd29yayBhbmQgcGVyLUNQVSBSTVBPUFRfQkFTRSBNU1JzXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTEzMD1zdGF0aWMgdm9pZCBfX3Nldl9maXJtd2FyZV9zaHV0ZG93bihzdHJ1Y3Qgc2V2X2RldmljZSAqc2V2LCBib29sIHBhbmljKTtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTEzMS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjEzMjpzdGF0aWMgaW50IHNucF9zaHV0ZG93bl9vbl9wYW5pYyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMTMzLVxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIHJlYXNvbiwgdm9pZCAqYXJnKTtcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MTM1PXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgc25wX3BhbmljX25vdGlmaWVyID0ge1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MTM2OlxcdC5ub3RpZmllcl9jYWxsID0gc25wX3NodXRkb3duX29uX3BhbmljLFxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMTM3LX07XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTIwMz1zdGF0aWMgaW50IHNldl9jbWRfYnVmZmVyX2xlbihpbnQgY21kKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMDctXFx0Y2FzZSBTRVZfQ01EX0lOSVRfRVg6ICAgICAgICAgICAgICAgICAgIHJldHVybiBzaXplb2Yoc3RydWN0IHNldl9kYXRhX2luaXRfZXgpO1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MjA4OlxcdGNhc2UgU0VWX0NNRF9TTlBfU0hVVERPV05fRVg6XFx0XFx0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2V2X2RhdGFfc25wX3NodXRkb3duX2V4KTtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIwOS1cXHRjYXNlIFNFVl9DTURfU05QX0lOSVRfRVg6XFx0XFx0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2V2X2RhdGFfc25wX2luaXRfZXgpO1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0yMTM2PXN0YXRpYyBpbnQgc2V2X3VwZGF0ZV9maXJtd2FyZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIxOTAtXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoyMTkxOnN0YXRpYyBpbnQgX19zZXZfc25wX3NodXRkb3duX2xvY2tlZChpbnQgKmVycm9yLCBib29sIHBhbmljKVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjE5Mi17XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIxOTQtXFx0c3RydWN0IHNldl9kZXZpY2UgKnNldjtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjIxOTU6XFx0c3RydWN0IHNldl9kYXRhX3NucF9zaHV0ZG93bl9leCBkYXRhO1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjE5Ni1cXHRpbnQgcmV0O1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMjA3LVxcdGRhdGEubGVuID0gc2l6ZW9mKGRhdGEpO1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MjIwODpcXHRkYXRhLmlvbW11X3NucF9zaHV0ZG93biA9IDE7XFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMjA5LVxcdGlmIChzZXYtXFx1MDAzZXNucF9mZWF0X2luZm9fMC5lY3ggXFx1MDAyNiBTTlBfWDg2X1NIVVRET1dOX1NVUFBPUlRFRClcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjIyMTA6XFx0XFx0ZGF0YS54ODZfc25wX3NodXRkb3duID0gMTtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIyMTEtXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIyNDMtXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoyMjQ0OlxcdGlmIChkYXRhLng4Nl9zbnBfc2h1dGRvd24pIHtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIyNDUtXFx0XFx0aWYgKCFwYW5pYylcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjIyNDY6XFx0XFx0XFx0c25wX3NodXRkb3duKCk7XFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMjQ3LVxcdFxcdHNucF9odl9maXhlZF9wYWdlc19zdGF0ZV91cGRhdGUoc2V2LCBBTExPQ0FURUQpO1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMjczLVxcdC8qXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoyMjc0OlxcdCAqIF9fc2V2X3NucF9zaHV0ZG93bl9sb2NrZWQoKSBkZWFkbG9ja3Mgd2hlbiBpdCB0cmllcyB0byB1bnJlZ2lzdGVyXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMjc1LVxcdCAqIGl0c2VsZiBkdXJpbmcgcGFuaWMgYXMgdGhlIHBhbmljIG5vdGlmaWVyIGlzIGNhbGxlZCB3aXRoIFJDVSByZWFkXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTI5MDU9c3RhdGljIHZvaWQgX19zZXZfZmlybXdhcmVfc2h1dGRvd24oc3RydWN0IHNldl9kZXZpY2UgKnNldiwgYm9vbCBwYW5pYylcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjkzNi1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjI5Mzc6XFx0X19zZXZfc25wX3NodXRkb3duX2xvY2tlZChcXHUwMDI2ZXJyb3IsIHBhbmljKTtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTI5MzgtfVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0zMDE0PXZvaWQgc2V2X2Rldl9kZXN0cm95KHN0cnVjdCBwc3BfZGV2aWNlICpwc3ApXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTMwMjgtXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzozMDI5OnN0YXRpYyBpbnQgc25wX3NodXRkb3duX29uX3BhbmljKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0zMDMwLVxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIHJlYXNvbiwgdm9pZCAqYXJnKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg9ODIyPXN0cnVjdCBzZXZfZGF0YV9yYW5nZV9saXN0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oLTgyOC0vKipcXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaDo4Mjk6ICogc3RydWN0IHNldl9kYXRhX3NucF9zaHV0ZG93bl9leCAtIFNOUF9TSFVURE9XTl9FWCBzdHJ1Y3R1cmVcXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaC04MzAtICpcXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaC04MzEtICogQGxlbjogbGVuZ3RoIG9mIHRoZSBjb21tYW5kIGJ1ZmZlciByZWFkIGJ5IHRoZSBQU1BcXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaDo4MzI6ICogQGlvbW11X3NucF9zaHV0ZG93bjogRGlzYWJsZSBlbmZvcmNlbWVudCBvZiBTTlAgaW4gdGhlIElPTU1VXFxuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg6ODMzOiAqIEB4ODZfc25wX3NodXRkb3duOiBEaXNhYmxlIFNOUCBvbiBhbGwgY29yZXNcXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaC04MzQtICogQHJzdmQxOiByZXNlcnZlZFxcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oLTgzNS0gKi9cXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaDo4MzY6c3RydWN0IHNldl9kYXRhX3NucF9zaHV0ZG93bl9leCB7XFxuaW5jbHVkZS9saW51eC9wc3Atc2V2LmgtODM3LVxcdHUzMiBsZW47XFxuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg6ODM4OlxcdHUzMiBpb21tdV9zbnBfc2h1dGRvd246MTtcXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaDo4Mzk6XFx0dTMyIHg4Nl9zbnBfc2h1dGRvd246MTtcXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaC04NDAtXFx0dTMyIHJzdmQxOjMwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMTo1NDoxNy4wMzcwMTk5NTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTkzNzQ4OTg1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNFVi1TTlAgUk1QIFRhYmxlIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHNucF9ybXB0YWJsZV9pbml0KClgIGZ1bmN0aW9uLiBUaGUgdmVyeSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGl0J3MgZ2F0ZWQgYmVoaW5kIGBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApYC4gQW5kLCBpdCBzZWVtcyBsaWtlICpldmVyeXRoaW5nKiBpbiB0aGUgY2hhbmdlcyBpcyBndWFyZGVkIGJ5IHRoYXQgb3IgYFg4Nl9GRUFUVVJFX1JNUE9QVGAsIHdoaWNoIGlzIGEgWmVuNiBDUFUgZmVhdHVyZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIGFyZSB0aGVyZSBhbnkgY29kZSBwYXRocyBpbnRyb2R1Y2VkIGJ5IHRoaXMgdGhhdCAqY291bGQqIHBvdGVudGlhbGx5IGJlIHJlYWNoZWQgd2l0aG91dCB0aGUgU0VWLVNOUCBmZWF0dXJlPyBJdCdzIGVhc3kgdG8gbWFrZSBhc3N1bXB0aW9ucywgYnV0IHRoZSBkZXZpbCdzIGluIHRoZSBkZXRhaWxzLCBzbyBsZXQncyB2ZXJpZnkuXG5cbkkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgcmV2aWV3IGVhY2ggbW9kaWZpZWQgZmlsZS4gVGhlIGZpcnN0IGZldyAoYGFyY2gveDg2L2luY2x1ZGUvLi4uYCkgc2VlbSBzdHJhaWdodGZvcndhcmQ6IGRlZmluaXRpb25zIGZvciB0aGUgZmVhdHVyZSBmbGFnLCBNU1JzLCBhbmQgZnVuY3Rpb24gZGVjbGFyYXRpb25zLiBOb3RoaW5nIHRoYXQganVtcHMgb3V0IGFzIGFuIGlzc3VlIHRoZXJlLlxuXG5Ob3csIGBhcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jYCBqdXN0IGFkZHMgdGhlIGBYODZfRkVBVFVSRV9STVBPUFRgIGJpdCB0byB0aGUgYGNwdWlkX2JpdHNgIHRhYmxlLiBUaGF0J3MgZmluZS5cblxuQnV0IGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJIHNlZSBgc2V2X3ZtX2Rlc3Ryb3koKWAgY2FsbHMgYHNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKWAuICpUaGF0J3MqIHRoZSB0cmlnZ2VyLCBiZWNhdXNlIGBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKClgIGlzIHRoZSBmdW5jdGlvbiB3ZSBhcmUgaW5pdGlhbGl6aW5nIGluIHRoZSBpbml0aWFsIGNoZWNrLiBTbywgdGhlIHF1ZXN0aW9uIGJlY29tZXM6IGNhbiBgc2V2LVx1MDAzZXNucF9jb250ZXh0YCAod2l0aGluIHRoZSBgc2V2X3ZtX2Rlc3Ryb3koKWAgY29udGV4dCkgYmUgbm9uLU5VTEwgd2l0aG91dCBTRVYtU05QIGhvc3QgaGFyZHdhcmU/ICpUaGF0J3MqIHRoZSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBJIG5lZWQgdG8gdHJhY2UgYmFjayB3aGVyZSBgc2V2LVx1MDAzZXNucF9jb250ZXh0YCBpcyBzZXQgdG8gZW5zdXJlIHdlIGFyZSBub3QgY3JlYXRpbmcgYW4gb3V0LW9mLWJvdW5kcyBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5NDgsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjE6NTQ6MjIuOTc0NTE1MDMzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ1NTU4NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNucF9jb250ZXh0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjIxNj1pbnQgc2V2X2Rldl9nZXRfYXR0cih1MzIgZ3JvdXAsIHU2NCBhdHRyLCB1NjQgKnZhbClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjI0My0gKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIyNDQ6c3RhdGljIHZvaWQgKnNucF9jb250ZXh0X2NyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTIyNDUte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yMjY3PXN0YXRpYyBpbnQgc25wX2JpbmRfYXNpZChzdHJ1Y3Qga3ZtICprdm0sIGludCAqZXJyb3IpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTIyNzEtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyMjcyOlxcdGRhdGEuZ2N0eF9wYWRkciA9IF9fcHNwX3BhKHNldi1cXHUwMDNlc25wX2NvbnRleHQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjI3My1cXHRkYXRhLmFzaWQgPSBzZXZfZ2V0X2FzaWQoa3ZtKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjI3Nz1zdGF0aWMgaW50IHNucF9sYXVuY2hfc3RhcnQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTIyOTAtXFx0LyogRG9uJ3QgYWxsb3cgdXNlcnNwYWNlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgbW9yZSB0aGFuIDEgU05QIGNvbnRleHQuICovXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyMjkxOlxcdGlmIChzZXYtXFx1MDAzZXNucF9jb250ZXh0KVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjI5Mi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjMxMC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIzMTE6XFx0c2V2LVxcdTAwM2VzbnBfY29udGV4dCA9IHNucF9jb250ZXh0X2NyZWF0ZShrdm0sIGFyZ3ApO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjMxMjpcXHRpZiAoIXNldi1cXHUwMDNlc25wX2NvbnRleHQpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMzEzLVxcdFxcdHJldHVybiAtRU5PVFRZO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjMxNC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIzMTU6XFx0c3RhcnQuZ2N0eF9wYWRkciA9IF9fcHNwX3BhKHNldi1cXHUwMDNlc25wX2NvbnRleHQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjMxNi1cXHRzdGFydC5wb2xpY3kgPSBwYXJhbXMucG9saWN5O1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yMzQ5PXN0YXRpYyBpbnQgc2V2X2dtZW1fcG9zdF9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbixcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjM4MS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIzODI6XFx0ZndfYXJncy5nY3R4X3BhZGRyID0gX19wc3BfcGEoc2V2LVxcdTAwM2VzbnBfY29udGV4dCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMzgzLVxcdGZ3X2FyZ3MuYWRkcmVzcyA9IF9fc21lX3NldChwZm5fdG9faHBhKHBmbikpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNDIxPXN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0MjktXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNDMwOlxcdGlmICghc2V2X3NucF9ndWVzdChrdm0pIHx8ICFzZXYtXFx1MDAzZXNucF9jb250ZXh0KVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQzMS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjUwNT1zdGF0aWMgaW50IHNucF9sYXVuY2hfdXBkYXRlX3Ztc2Eoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI1MTktXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNTIwOlxcdGRhdGEuZ2N0eF9wYWRkciA9IF9fcHNwX3BhKHNldi1cXHUwMDNlc25wX2NvbnRleHQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjUyMS1cXHRkYXRhLnBhZ2VfdHlwZSA9IFNOUF9QQUdFX1RZUEVfVk1TQTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjU2Mj1zdGF0aWMgaW50IHNucF9sYXVuY2hfZmluaXNoKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNTcyLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjU3MzpcXHRpZiAoIXNldi1cXHUwMDNlc25wX2NvbnRleHQpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNTc0LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjE1LVxcdG1lbWNweShkYXRhLVxcdTAwM2Vob3N0X2RhdGEsIHBhcmFtcy5ob3N0X2RhdGEsIEtWTV9TRVZfU05QX0ZJTklTSF9EQVRBX1NJWkUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjYxNjpcXHRkYXRhLVxcdTAwM2VnY3R4X3BhZGRyID0gX19wc3BfcGEoc2V2LVxcdTAwM2VzbnBfY29udGV4dCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjE3LVxcdHJldCA9IHNldl9pc3N1ZV9jbWQoa3ZtLCBTRVZfQ01EX1NOUF9MQVVOQ0hfRklOSVNILCBkYXRhLCBcXHUwMDI2YXJncC1cXHUwMDNlZXJyb3IpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yOTMwPXN0YXRpYyBpbnQgc25wX2RlY29tbWlzc2lvbl9jb250ZXh0KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjkzNi1cXHQvKiBJZiBjb250ZXh0IGlzIG5vdCBjcmVhdGVkIHRoZW4gZG8gbm90aGluZyAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjkzNzpcXHRpZiAoIXNldi1cXHUwMDNlc25wX2NvbnRleHQpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTM4LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTQwLVxcdC8qIERvIHRoZSBkZWNvbW1pc2lvbiwgd2hpY2ggd2lsbCB1bmJpbmQgdGhlIEFTSUQgZnJvbSB0aGUgU05QIGNvbnRleHQgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI5NDE6XFx0ZGF0YS5hZGRyZXNzID0gX19zbWVfcGEoc2V2LVxcdTAwM2VzbnBfY29udGV4dCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTQyLVxcdGRvd25fd3JpdGUoXFx1MDAyNnNldl9kZWFjdGl2YXRlX2xvY2spO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTQ4LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6Mjk0OTpcXHRzbnBfZnJlZV9maXJtd2FyZV9wYWdlKHNldi1cXHUwMDNlc25wX2NvbnRleHQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6Mjk1MDpcXHRzZXYtXFx1MDAzZXNucF9jb250ZXh0ID0gTlVMTDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NTEtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQyMjg9c3RhdGljIGludCBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF9ncGEpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyNDMtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MjQ0OlxcdGRhdGEuZ2N0eF9wYWRkciA9IF9fcHNwX3BhKHNldi1cXHUwMDNlc25wX2NvbnRleHQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDI0NS1cXHRkYXRhLnJlcV9wYWRkciA9IF9fcHNwX3BhKHNldi1cXHUwMDNlZ3Vlc3RfcmVxX2J1Zik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTUzMjY9c3RydWN0IHZtY2Jfc2F2ZV9hcmVhICpzZXZfZGVjcnlwdF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTM2MS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUzNjI6XFx0XFx0ZGJnLmdjdHhfcGFkZHIgPSBfX3BzcF9wYShzZXYtXFx1MDAzZXNucF9jb250ZXh0KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUzNjMtXFx0XFx0ZGJnLnNyY19hZGRyID0gc3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLnZtc2FfcGE7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTk5PXN0cnVjdCBrdm1fc2V2X2luZm8ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC0xMTctXFx0YXRvbWljX3QgbWlncmF0aW9uX2luX3Byb2dyZXNzO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6MTE4OlxcdHZvaWQgKnNucF9jb250ZXh0OyAgICAgIC8qIFNOUCBndWVzdCBjb250ZXh0IHBhZ2UgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTExOS1cXHR2b2lkICpndWVzdF9yZXFfYnVmOyAgICAvKiBCb3VuY2UgYnVmZmVyIGZvciBTTlAgR3Vlc3QgUmVxdWVzdCBpbnB1dCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMTo1NDoyNC42MjAwNzk1NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTQ2MDc4MTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIG15IGNvZGUgYW5kIHRoaW5raW5nIGFib3V0IGEgc3BlY2lmaWMgZnVuY3Rpb246XG5cbioqQW5hbHl6aW5nIHRoZSBgc25wX2NvbnRleHRfY3JlYXRlYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhlYWQgYXJvdW5kIGBzbnBfY29udGV4dF9jcmVhdGVgLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIGFuZCBob3cgaXQgd29ya3MuIExldCBtZSBqdXN0IHB1bGwgdXAgaXRzIGRlZmluaXRpb24gYW5kIHN0YXJ0IHJlYWRpbmcgdGhlIGNvZGUuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBncmFzcCB0aGUgaW50ZW50aW9uIG9mIHRoZSBjb2RlLiBJJ2xsIG5lZWQgdG8gc3RlcCB0aHJvdWdoIHRoaXMgc2xvd2x5IGFuZCBjYXJlZnVsbHkgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwNjMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMTo1NDozMC4xNjYxNjE3MzdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjI0MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjI0MDpcXHQgKiBhc3NvY2lhdGVkIHdpdGggdGhlIGd1ZXN0IHRoYXQgdGhlIGZpcm13YXJlIHRyYWNrcyB0byBpbXBsZW1lbnQgU0VWXFxuMjI0MTpcXHQgKiBhbmQgU05QIGZlYXR1cmVzLiBUaGUgZmlybXdhcmUgc3RvcmVzIHRoZSBndWVzdCBjb250ZXh0IGluIGh5cGVydmlzb3JcXG4yMjQyOlxcdCAqIHByb3ZpZGUgcGFnZSB2aWEgdGhlIFNOUF9HQ1RYX0NSRUFURSBjb21tYW5kLlxcbjIyNDM6XFx0ICovXFxuMjI0NDpcXHRzdGF0aWMgdm9pZCAqc25wX2NvbnRleHRfY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxcbjIyNDU6XFx0e1xcbjIyNDY6XFx0XFx0c3RydWN0IHNldl9kYXRhX3NucF9hZGRyIGRhdGEgPSB7fTtcXG4yMjQ3OlxcdFxcdHZvaWQgKmNvbnRleHQ7XFxuMjI0ODpcXHRcXHRpbnQgcmM7XFxuMjI0OTpcXHRcXG4yMjUwOlxcdFxcdC8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgY29udGV4dCBwYWdlICovXFxuMjI1MTpcXHRcXHRjb250ZXh0ID0gc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4yMjUyOlxcdFxcdGlmICghY29udGV4dClcXG4yMjUzOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjIyNTQ6XFx0XFxuMjI1NTpcXHRcXHRkYXRhLmFkZHJlc3MgPSBfX3BzcF9wYShjb250ZXh0KTtcXG4yMjU2OlxcdFxcdHJjID0gX19zZXZfaXNzdWVfY21kKGFyZ3AtXFx1MDAzZXNldl9mZCwgU0VWX0NNRF9TTlBfR0NUWF9DUkVBVEUsIFxcdTAwMjZkYXRhLCBcXHUwMDI2YXJncC1cXHUwMDNlZXJyb3IpO1xcbjIyNTc6XFx0XFx0aWYgKHJjKSB7XFxuMjI1ODpcXHRcXHRcXHRwcl93YXJuKFxcXCJGYWlsZWQgdG8gY3JlYXRlIFNFVi1TTlAgY29udGV4dCwgcmMgJWQgZndfZXJyb3IgJWRcXFwiLFxcbjIyNTk6XFx0XFx0XFx0XFx0cmMsIGFyZ3AtXFx1MDAzZWVycm9yKTtcXG4yMjYwOlxcdFxcdFxcdHNucF9mcmVlX2Zpcm13YXJlX3BhZ2UoY29udGV4dCk7XFxuMjI2MTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4yMjYyOlxcdFxcdH1cXG4yMjYzOlxcdFxcbjIyNjQ6XFx0XFx0cmV0dXJuIGNvbnRleHQ7XFxuMjI2NTpcXHR9XFxuMjI2NjpcXHRcXG4yMjY3OlxcdHN0YXRpYyBpbnQgc25wX2JpbmRfYXNpZChzdHJ1Y3Qga3ZtICprdm0sIGludCAqZXJyb3IpXFxuMjI2ODpcXHR7XFxuMjI2OTpcXHRcXHRzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYgPSB0b19rdm1fc2V2X2luZm8oa3ZtKTtcXG4yMjcwOlxcdFxcdHN0cnVjdCBzZXZfZGF0YV9zbnBfYWN0aXZhdGUgZGF0YSA9IHswfTtcXG4yMjcxOlxcdFxcbjIyNzI6XFx0XFx0ZGF0YS5nY3R4X3BhZGRyID0gX19wc3BfcGEoc2V2LVxcdTAwM2VzbnBfY29udGV4dCk7XFxuMjI3MzpcXHRcXHRkYXRhLmFzaWQgPSBzZXZfZ2V0X2FzaWQoa3ZtKTtcXG4yMjc0OlxcdFxcdHJldHVybiBzZXZfaXNzdWVfY21kKGt2bSwgU0VWX0NNRF9TTlBfQUNUSVZBVEUsIFxcdTAwMjZkYXRhLCBlcnJvcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIxOjU0OjMwLjE2NjQxMDY4N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTAxMDI3MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgXCJBbmQgbG9vayBhdCBgc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2VgLFwiIHN1bW1hcml6ZWQgYXMgYSBmaXJzdC1wZXJzb24gdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYHNucF9hbGxvY19maXJtd2FyZV9wYWdlYCoqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gYHNucF9hbGxvY19maXJtd2FyZV9wYWdlYC4gTXkgZmlyc3QgdGhvdWdodD8gXCJXaHkgYXJlIHdlIGxvb2tpbmcgYXQgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiAqbm93Kj9cIiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcuIElzIHRoaXMgcGFydCBvZiBhIGRlYnVnZ2luZyBzZXNzaW9uPyBBcmUgd2UgdHJhY2tpbmcgZG93biBhIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlPyBPciBhcmUgd2UgcmV2aWV3aW5nIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnM/IEtub3dpbmcgdGhlIFwid2h5XCIgaXMgY3J1Y2lhbCBmb3IgYSBwcm9kdWN0aXZlIGFuYWx5c2lzLlxuXG5SZWdhcmRsZXNzLCBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdDogbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ2llcywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aXRoaW4gdGhpcyBjb2RlLCBhbmQgaW50ZXJhY3Rpb25zIHdpdGggdGhlIFNlY3VyZSBOZXN0ZWQgUGFnaW5nIChTTlApIGltcGxlbWVudGF0aW9uLiBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbjpcblxuKiAgICoqRXJyb3IgaGFuZGxpbmc6KiogSXMgaXQgcm9idXN0PyBEb2VzIGl0IGNoZWNrIHJldHVybiB2YWx1ZXMgcHJvcGVybHksIGVzcGVjaWFsbHkgaW4gYSBwb3RlbnRpYWxseSBzZW5zaXRpdmUgYXJlYSBsaWtlIGZpcm13YXJlIHBhZ2UgYWxsb2NhdGlvbj8gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGlzIGFsbCBndWFyZGVkLlxuKiAgICoqQ29udGlndWl0eToqKiBJcyB0aGlzIG1lbW9yeSBhbGxvY2F0aW9uIGNvbnRpZ3VvdXMsIG9yIGlzIGl0IHNjYXR0ZXJlZD8gVGhpcyBjYW4gZHJhbWF0aWNhbGx5IGFmZmVjdCBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkgaW1wbGljYXRpb25zLCBwb3RlbnRpYWxseSBpbXBhY3RpbmcgaG93IHRoZSBndWVzdCB2aXJ0dWFsIG1hY2hpbmUgKFZNKSBiZWhhdmVzLlxuKiAgICoqUHJpdmlsZWdlIExldmVsczoqKiBXaGF0IGxldmVsIG9mIHByaXZpbGVnZSBpcyB0aGlzIGZ1bmN0aW9uIG9wZXJhdGluZyB1bmRlcj8gSXMgaXQgcnVubmluZyBpbiB0aGUgaHlwZXJ2aXNvciwgb3IgdGhlIGd1ZXN0PyBUaGUgYW5zd2VyIHdpbGwgcHJvdmlkZSBpbnNpZ2h0IGludG8gdGhlIGF0dGFjayBzdXJmYWNlLlxuKiAgICoqQ29uY3VycmVuY3k6KiogQW55IGxvY2tzPyBBbnkgcG90ZW50aWFsIGZvciBjb25jdXJyZW50IGFjY2VzcyBhbmQgcmFjZSBjb25kaXRpb25zPyBUaGlzIGlzIGNyaXRpY2FsIGluIGEgbXVsdGktdGhyZWFkZWQgb3IgbXVsdGktVk0gZW52aXJvbm1lbnQuXG4qICAgKipJbnRlcmFjdGlvbiB3aXRoIFNOUDoqKiBIb3cgZXhhY3RseSBkb2VzIHRoaXMgZnVuY3Rpb24gaW50ZXJmYWNlIHdpdGggdGhlIFNOUCBmcmFtZXdvcms/IElzIGl0IGNvcnJlY3RseSBzZXR0aW5nIHRoZSBhcHByb3ByaWF0ZSBmbGFncywgaGFuZGxpbmcgYXR0ZXN0YXRpb24sIGFuZCBlbnN1cmluZyB0aGUgY29uZmlkZW50aWFsaXR5IGFuZCBpbnRlZ3JpdHkgb2YgdGhlIGZpcm13YXJlIHBhZ2U/IFRoaXMgaXMgdGhlIGNvcmUgYXJlYSBvZiBpbnZlc3RpZ2F0aW9uLlxuXG5Ob3csIG15IG1pbmQgaXMgYWxyZWFkeSBzdGFydGluZyB0byBwaWVjZSB0b2dldGhlciBhIHJvdWdoIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmN0aW9uJ3Mgc2NvcGUuIFVsdGltYXRlbHksIHRoZSBuZXh0IHN0ZXAgaXMgZ29pbmcgdG8gYmUgYW5hbHl6aW5nIHRoZSBhY3R1YWwgY29kZSBpdHNlbGYuIExldCdzIHNlZSBob3cgd2VsbCBteSBpbml0aWFsIGFzc3VtcHRpb25zIGhvbGQgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODQ0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMTo1NDozNC42Njc0NDE5NzdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjExMjUzOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic25wX2FsbG9jX2Zpcm13YXJlX3BhZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00NTY9c3RhdGljIGludCBzbnBfZ3Vlc3RfcmVxX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NjQtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NjU6XFx0c2V2LVxcdTAwM2VndWVzdF9yZXNwX2J1ZiA9IHNucF9hbGxvY19maXJtd2FyZV9wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8pO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDY2LVxcdGlmICghc2V2LVxcdTAwM2VndWVzdF9yZXNwX2J1Zikge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yMjQ0PXN0YXRpYyB2b2lkICpzbnBfY29udGV4dF9jcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTIyNTAtXFx0LyogQWxsb2NhdGUgbWVtb3J5IGZvciBjb250ZXh0IHBhZ2UgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIyNTE6XFx0Y29udGV4dCA9IHNucF9hbGxvY19maXJtd2FyZV9wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMjUyLVxcdGlmICghY29udGV4dClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzA2ND1zdGF0aWMgYm9vbCBpc19zZXZfc25wX2luaXRpYWxpemVkKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwNzAtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMDcxOlxcdHN0YXR1cyA9IHNucF9hbGxvY19maXJtd2FyZV9wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwNzItXFx0aWYgKCFzdGF0dXMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTUzMjY9c3RydWN0IHZtY2Jfc2F2ZV9hcmVhICpzZXZfZGVjcnlwdF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTM1Ny1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUzNTg6XFx0XFx0dm1zYSA9IHNucF9hbGxvY19maXJtd2FyZV9wYWdlKF9fR0ZQX1pFUk8pO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTM1OS1cXHRcXHRpZiAoIXZtc2EpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYz03NDE9aW50IHNldl90aW9fZGV2X2NyZWF0ZShzdHJ1Y3QgdHNtX2RzbV90aW8gKmRldl9kYXRhLCB1MTYgZGV2aWNlX2lkLFxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmMtNzU3LVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LXRpby5jOjc1ODpcXHRkYXRhX3BnID0gc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYy03NTktXFx0aWYgKCFkYXRhX3BnKSB7XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTQxNz1zdGF0aWMgaW50IHJtcF9tYXJrX3BhZ2VzX2Zpcm13YXJlKHVuc2lnbmVkIGxvbmcgcGFkZHIsIHVuc2lnbmVkIGludCBucGFnZXMsIGJvb2wgbG9ja2VkKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00NDAtXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzo0NDE6c3RhdGljIHN0cnVjdCBwYWdlICpfX3NucF9hbGxvY19maXJtd2FyZV9wYWdlcyhnZnBfdCBnZnBfbWFzaywgaW50IG9yZGVyLCBib29sIGxvY2tlZClcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTQ0Mi17XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTQ2NS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjQ2Njp2b2lkICpzbnBfYWxsb2NfZmlybXdhcmVfcGFnZShnZnBfdCBnZnBfbWFzaylcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTQ2Ny17XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTQ2OS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjQ3MDpcXHRwYWdlID0gX19zbnBfYWxsb2NfZmlybXdhcmVfcGFnZXMoZ2ZwX21hc2ssIDAsIGZhbHNlKTtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTQ3MS1cXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtNDczLX1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjQ3NDpFWFBPUlRfU1lNQk9MX0dQTChzbnBfYWxsb2NfZmlybXdhcmVfcGFnZSk7XFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00NzUtXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTUwMT1zdGF0aWMgdm9pZCAqc2V2X2Z3X2FsbG9jKHVuc2lnbmVkIGxvbmcgbGVuKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy01MDQtXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzo1MDU6XFx0cGFnZSA9IF9fc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2VzKEdGUF9LRVJORUwsIGdldF9vcmRlcihsZW4pLCB0cnVlKTtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTUwNi1cXHRpZiAoIXBhZ2UpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTEzNTM9c3RhdGljIGludCBzbnBfdmVyaWZ5X21pdGlnYXRpb24odTE2IGNvbW1hbmQsIHU2NCB2ZWN0b3IsXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTEzNjAtXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoxMzYxOlxcdG1pdF9kc3QgPSBzbnBfYWxsb2NfZmlybXdhcmVfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xMzYyLVxcdGlmICghbWl0X2RzdClcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MTUwOD1zdGF0aWMgaW50IF9fc2V2X3NucF9pbml0X2xvY2tlZChpbnQgKmVycm9yLCB1bnNpZ25lZCBpbnQgbWF4X3NucF9hc2lkKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xNjQ5LVxcdFxcdCAqIHVubGlrZWx5KSBidXQgd2lsbCBjYXVzZSBhIGRlYWRsb2NrLlxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MTY1MDpcXHRcXHQgKiBJbnN0ZWFkIG9mIGV4cG9ydGluZyBfX3NucF9hbGxvY19maXJtd2FyZV9wYWdlcygpLCBhbGxvY2F0ZSBhIHBhZ2VcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTE2NTEtXFx0XFx0ICogZm9yIHRoaXMgb25lIGNhbGwgaGVyZS5cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTE2NTItXFx0XFx0ICovXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoxNjUzOlxcdFxcdHBhZ2UgPSBfX3NucF9hbGxvY19maXJtd2FyZV9wYWdlcyhHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPLFxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMTY1NC1cXHRcXHRcXHRcXHRcXHRcXHQgIDAsIHRydWUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg9MTEzMT12b2lkICpwc3BfY29weV91c2VyX2Jsb2IodTY0IHVhZGRyLCB1MzIgbGVuKTtcXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaDoxMTMyOnZvaWQgKnNucF9hbGxvY19maXJtd2FyZV9wYWdlKGdmcF90IG1hc2spO1xcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oLTExMzMtaW50IHNucF9yZWNsYWltX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGFkZHIsIHVuc2lnbmVkIGludCBucGFnZXMsIGJvb2wgbG9ja2VkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oPTExNjQ9c3RhdGljIGlubGluZSB2b2lkICpwc3BfY29weV91c2VyX2Jsb2IodTY0IF9fdXNlciB1YWRkciwgdTMyIGxlbikgeyByZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsgfVxcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oLTExNjUtXFxuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg6MTE2NjpzdGF0aWMgaW5saW5lIHZvaWQgKnNucF9hbGxvY19maXJtd2FyZV9wYWdlKGdmcF90IG1hc2spXFxuaW5jbHVkZS9saW51eC9wc3Atc2V2LmgtMTE2Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIxOjU0OjM2LjI4ODU3NTc4NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTg5MTg1NzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRmlybXdhcmUgUGFnZSBBbGxvY2F0aW9uIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGZpcm13YXJlIHBhZ2VzIGFyZSBiZWluZyBhbGxvY2F0ZWQgd2l0aGluIHRoaXMgY3J5cHRvIGNvbnRleHQuIE15IHN0YXJ0aW5nIHBvaW50IGlzIGBzbnBfYWxsb2NfZmlybXdhcmVfcGFnZWAsIHdoaWNoIEkgc3VzcGVjdCBpcyBhIHdyYXBwZXIgZnVuY3Rpb24uIExldCdzIHRyYWNlIGl0IGRvd24sIGFuZCBpdCBsb29rcyBsaWtlIGl0IGNhbGxzIGBfX3NucF9hbGxvY19maXJtd2FyZV9wYWdlc2AuIFRoYXQncyBhIGdvb2QgbGVhZC4gTm93IEkgc2hvdWxkIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgX19zbnBfYWxsb2NfZmlybXdhcmVfcGFnZXNgIGRpcmVjdGx5LiBBIHF1aWNrIGZpbGUgc3lzdGVtIHNlYXJjaCBhbmQgSSBzZWUgaXQncyBkZWZpbmVkIHdpdGhpbiBgZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY2AuIEFscmlnaHQsIHRpbWUgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIGdldCBhIGhhbmRsZSBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgYWxsb2NhdGlvbiBwcm9jZXNzLiBJIG5lZWQgdG8ga25vdyB0aGUgbWVtb3J5IHJlZ2lvbnMgYmVpbmcgdXNlZCwgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ2llcyBpbiBwbGFjZSwgYW5kIHdoYXQgZXJyb3IgY2hlY2tpbmcgaXMgYmVpbmcgcGVyZm9ybWVkLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTA4MSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIxOjU0OjM4LjQ3Nzc2MzkwNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NDAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NDA6XFx0XFxuIDQ0MTpcXHRzdGF0aWMgc3RydWN0IHBhZ2UgKl9fc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCBpbnQgb3JkZXIsIGJvb2wgbG9ja2VkKVxcbiA0NDI6XFx0e1xcbiA0NDM6XFx0XFx0dW5zaWduZWQgbG9uZyBucGFnZXMgPSAxdWwgXFx1MDAzY1xcdTAwM2Mgb3JkZXIsIHBhZGRyO1xcbiA0NDQ6XFx0XFx0c3RydWN0IHNldl9kZXZpY2UgKnNldjtcXG4gNDQ1OlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiA0NDY6XFx0XFxuIDQ0NzpcXHRcXHRpZiAoIXBzcF9tYXN0ZXIgfHwgIXBzcF9tYXN0ZXItXFx1MDAzZXNldl9kYXRhKVxcbiA0NDg6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQ0OTpcXHRcXG4gNDUwOlxcdFxcdHBhZ2UgPSBhbGxvY19wYWdlcyhnZnBfbWFzaywgb3JkZXIpO1xcbiA0NTE6XFx0XFx0aWYgKCFwYWdlKVxcbiA0NTI6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQ1MzpcXHRcXG4gNDU0OlxcdFxcdC8qIElmIFNFVi1TTlAgaXMgaW5pdGlhbGl6ZWQgdGhlbiBhZGQgdGhlIHBhZ2UgaW4gUk1QIHRhYmxlLiAqL1xcbiA0NTU6XFx0XFx0c2V2ID0gcHNwX21hc3Rlci1cXHUwMDNlc2V2X2RhdGE7XFxuIDQ1NjpcXHRcXHRpZiAoIXNldi1cXHUwMDNlc25wX2luaXRpYWxpemVkKVxcbiA0NTc6XFx0XFx0XFx0cmV0dXJuIHBhZ2U7XFxuIDQ1ODpcXHRcXG4gNDU5OlxcdFxcdHBhZGRyID0gX19wYSgodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZSkpO1xcbiA0NjA6XFx0XFx0aWYgKHJtcF9tYXJrX3BhZ2VzX2Zpcm13YXJlKHBhZGRyLCBucGFnZXMsIGxvY2tlZCkpXFxuIDQ2MTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNDYyOlxcdFxcbiA0NjM6XFx0XFx0cmV0dXJuIHBhZ2U7XFxuIDQ2NDpcXHR9XFxuIDQ2NTpcXHRcXG4gNDY2OlxcdHZvaWQgKnNucF9hbGxvY19maXJtd2FyZV9wYWdlKGdmcF90IGdmcF9tYXNrKVxcbiA0Njc6XFx0e1xcbiA0Njg6XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuIDQ2OTpcXHRcXG4gNDcwOlxcdFxcdHBhZ2UgPSBfX3NucF9hbGxvY19maXJtd2FyZV9wYWdlcyhnZnBfbWFzaywgMCwgZmFsc2UpO1xcbiA0NzE6XFx0XFxuIDQ3MjpcXHRcXHRyZXR1cm4gcGFnZSA/IHBhZ2VfYWRkcmVzcyhwYWdlKSA6IE5VTEw7XFxuIDQ3MzpcXHR9XFxuIDQ3NDpcXHRFWFBPUlRfU1lNQk9MX0dQTChzbnBfYWxsb2NfZmlybXdhcmVfcGFnZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIxOjU0OjM4LjQ3NzkwODM5M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjUzODIyNDY0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBDb2RlIENoYW5nZXMgYW5kIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ3ZlIGRldGVybWluZWQgYWZ0ZXIgcmV2aWV3aW5nIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMuIE15IGluaXRpYWwgZm9jdXMgd2FzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIFBTUCBkZXZpY2UsIGAvZGV2L3NldmAsIHZpYSB0aGUgYFNFVl9DTURfU05QX0dDVFhfQ1JFQVRFYCBpb2N0bC4gVGhpcywgYXMgd2Uga25vdywgaW50ZXJhY3RzIHdpdGggdGhlIEFNRCBQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IsIG9yIFBTUCwgd2hpY2ggaXMgYSBoYXJkd2FyZSBjb21wb25lbnQgcHJlc2VudCBvbiBBTUQgWmVuIENQVXMuIFRoZSBjYWxsIHRvIGBfX3Nldl9pc3N1ZV9jbWQoKWAgaXMgdGhlIGtleS5cblxuSSB0aGVuIGR1ZyBpbnRvIGhvdyB0aGUgY29kZSBkZXRlcm1pbmVzIFNFVi1TTlAgaG9zdCBjYXBhYmlsaXRpZXMuICBgYnNwX2RldGVybWluZV9zbnAoKWAgaW4gYGFtZC5jYCBleHBsaWNpdGx5IGRpc2FibGVzIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAgaWYgdGhlIGh5cGVydmlzb3IgZmVhdHVyZSwgYFg4Nl9GRUFUVVJFX0hZUEVSVklTT1JgLCBpcyBkZXRlY3RlZC4gVGhpcyBpcyBhIHZlcnkgaW1wb3J0YW50IHBvaW50ISBGdXJ0aGVybW9yZSwgdG8gZW5hYmxlIFJNUE9QVCwgd2UgKnJlcXVpcmUqIGJvdGggYENDX0FUVFJfSE9TVF9TRVZfU05QYCAqYW5kKiB0aGUgWmVuNiBpbnN0cnVjdGlvbiBzZXQgZmVhdHVyZSwgYFg4Nl9GRUFUVVJFX1JNUE9QVGAuICBSTVBPUFQgaXMgc3BlY2lmaWMgdG8gQU1EIFplbjYgYW5kIFNFVi1TTlAuXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gdGhlIGNyaXRlcmlhIGZvciAqbm90KiBmdXp6aW5nIChuZWdhdGl2ZSBjcml0ZXJpYSkgYXMgcGVyIHRoZSBwcm9tcHQuICBTcGVjaWZpY2FsbHksIHRoZSBjYXRlZ29yeSBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS5cIiAgV2hhdCBkb2VzIFNFVi1TTlAgaG9zdCBzdXBwb3J0ICpyZXF1aXJlKj8gTGV0J3MgYnJlYWsgaXQgZG93bjpcblxuMS4gIEEgYmFyZSBtZXRhbCBBTUQgWmVuMy9aZW40L1plbjUvWmVuNiBDUFUuXG4yLiAgQW4gQU1EIFBTUCAob3IgQ0NQKSAqcGh5c2ljYWwqIGhhcmR3YXJlIGRldmljZS5cbjMuICBSTVBPUFQgaXMgdGllZCB0byBaZW42IHdpdGggdGhlIHJlbGV2YW50IENQVSBmZWF0dXJlLlxuNC4gIEluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9LVk0sIEdDRSksIHdoaWNoIGlzIHRoZSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50LCBgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUmAgaXMgYWx3YXlzIHNldCBvbiB0aGUgYW1kNjQgZ3Vlc3Qga2VybmVsLiBUaGlzIGNhdXNlcyBgYnNwX2RldGVybWluZV9zbnAoKWAgdG8gY2xlYXIgYGNjX2ZsYWdzLmhvc3Rfc2V2X3NucGAgYW5kIGBYODZfRkVBVFVSRV9TRVZfU05QYC5cblxuV2l0aG91dCB0aGUgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBzZXQsIHRoZSByZWxldmFudCBjb2RlIHBhdGhzIGFyZSAqbmV2ZXIqIHJlYWNoZWQuIGBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKClgLCBgc25wX3NldHVwX3JtcG9wdCgpYCwgYW5kIGNhbGxzIGluIGBzbnBfcHJlcGFyZSgpYCAvIGBzbnBfc2h1dGRvd24oKWAgYmVjb21lIG5vLW9wcyBvciBlYXJseSByZXR1cm5zLiBgc25wX3JtcHRhYmxlX2luaXQoKWAganVzdCByZXR1cm5zIGFuIGVycm9yLiBgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKWAgaXMgZWl0aGVyIHNob3J0LWNpcmN1aXRlZCBvciBkb2VzIG5vdGhpbmcuIFRoZSBjaGFuZ2VzIHRvIGBzY2F0dGVyZWQuY2AgYXJlIHNpbXBseSBhZGRpbmcgdGhlIGNwdWlkIGJpdCB0byBhIHRhYmxlIHdoaWNoIGlzbid0IHVzZWQgZHVlIHRvIGxhY2sgb2YgdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24uXG5cbkkgcmUtZXhhbWluZWQgYWxsIHRoZSBtb2RpZmllZCBsaW5lcyBvZiBjb2RlLiAgV2UncmUgbG9va2luZyBhdDpcblxuMS4gIENQVSBmZWF0dXJlIGRlZmluaXRpb25zLlxuMi4gIE1TUiBpbmRleCBkZWZpbml0aW9ucy5cbjMuICBTRVYgZGVjbGFyYXRpb25zIGFuZCBzdHViIGltcGxlbWVudGF0aW9ucy5cbjQuICBDUFVJRCBmZWF0dXJlIHRhYmxlLlxuNS4gIENhbGxzIGluIGBzZXZfdm1fZGVzdHJveSgpYCBhbmQgc3VwcG9ydCBsb2dpYyBsaWtlIGBybXBvcHRfY2FwYWJsZSgpYCwgYHNucF9zZXR1cF9ybXBvcHQoKWAsIGV0Yy5cbjYuIEEgY2FsbCB0byBgc25wX3NldHVwX3JtcG9wdCgpYCBpbiBgX19zZXZfc25wX2luaXRfbG9ja2VkKClgLlxuXG5UaGUgaW1wb3J0YW50IHBvaW50IGlzIHRoYXQgKmFsbCogdGhlc2UgY2hhbmdlcyBhcmUgd2l0aGluIHRoZSBBTUQgU0VWLVNOUCBob3N0IHN1cHBvcnQgbG9naWMsIHdoaWNoIGluY2x1ZGVzIHRoZSBSTVBPUFQgZmVhdHVyZSB0aGF0IGlzIHNwZWNpZmljIHRvIEFNRCBaZW42IGJhcmUtbWV0YWwgcHJvY2Vzc29ycy4gSW4gdGhlIHZhc3QgbWFqb3JpdHkgb2YgZnV6emluZyBlbnZpcm9ubWVudHMgLSBzcGVjaWZpY2FsbHkgUUVNVS9LVk0sIHdoaWNoIHRoZSBkb2N1bWVudGF0aW9uIHNwZWNpZmllcyBpcyB0aGUgc3RhbmRhcmQgc2V0dXAgLSBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIGlzIG5ldmVyIHNldC4gVGhpcyBpcyBiZWNhdXNlIHdlIGRvbid0IGhhdmUgQU1EIFBTUCBoYXJkd2FyZSBhbmQgZHVlIHRvIHRoZSBgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUmAgY2hlY2suIFRoaXMgbWFrZXMgdGhlIFJNUE9QVCBtZWNoYW5pc20gYW5kIHRoZSBlbnRpcmUgU0VWLVNOUCBob3N0IGxpZmVjeWNsZSAqc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlKiBkdXJpbmcgc3RhbmRhcmQgZnV6emluZy4gIFRoaXMgbWVhbnMgdGhlc2UgYXJlYXMgYXJlIG5vdCB3b3J0aCBmdXp6aW5nLlxuXG5UaGVyZWZvcmU6XG5cbiogICBgV29ydGhGdXp6aW5nOiBmYWxzZWBcbiogICBgRW5hYmxlQ29uZmlnczogW11gXG4qICAgYEZvY3VzU3ltYm9sczogW11gXG5cbkknbSBjb25maWRlbnQgaW4gdGhlc2UgZmluZGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODc0LCJPdXRwdXRUb2tlbnMiOjEzNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMTo1NDo1MS4wMTYxMzU2MDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciBBTUQgU0VWLVNOUCBSTVBPUFQgKFJNUCBPcHRpbWl6YXRpb24pIGluc3RydWN0aW9ucyBhbmQgbWFuYWdlbWVudCBmb3IgQU1EIFplbjYrIGhvc3QgcHJvY2Vzc29ycy4gVGhlc2UgY29kZSBwYXRocyByZXF1aXJlIHBoeXNpY2FsIEFNRCBoYXJkd2FyZSBzdXBwb3J0aW5nIFNFVi1TTlAgaG9zdCBmZWF0dXJlcyBhbmQgdGhlIEFNRCBQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCksIGFuZCBhcmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluc2lkZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IgZGlzYWJsZXMgQ0NfQVRUUl9IT1NUX1NFVl9TTlAgZHVyaW5nIGJvb3QpLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciBBTUQgU0VWLVNOUCBSTVBPUFQgKFJNUCBPcHRpbWl6YXRpb24pIGluc3RydWN0aW9ucyBhbmQgbWFuYWdlbWVudCBmb3IgQU1EIFplbjYrIGhvc3QgcHJvY2Vzc29ycy4gVGhlc2UgY29kZSBwYXRocyByZXF1aXJlIHBoeXNpY2FsIEFNRCBoYXJkd2FyZSBzdXBwb3J0aW5nIFNFVi1TTlAgaG9zdCBmZWF0dXJlcyBhbmQgdGhlIEFNRCBQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCksIGFuZCBhcmUgZGlzYWJsZWQgd2hlbiBydW5uaW5nIGluc2lkZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IgZGlzYWJsZXMgQ0NfQVRUUl9IT1NUX1NFVl9TTlAgZHVyaW5nIGJvb3QpLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMTo1NDo1MS4wMTYxNTkyNDVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflown2ffb[1] Phase: Running StartedAt: 2026-09-03 21:55:02 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflown2ffb[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-03 21:55:02 +0000 UTC FinishedAt: 2026-09-03 21:55:06 +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,}