Name: series-workflowrhlbx Phase: Failed StartedAt: 2026-07-31 02:20:11 +0000 UTC FinishedAt: 2026-07-31 02:45:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhlbx[0] Phase: Succeeded StartedAt: 2026-07-31 02:20:11 +0000 UTC FinishedAt: 2026-07-31 02:45:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhlbx[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 02:20:11 +0000 UTC FinishedAt: 2026-07-31 02:45:11 +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+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkYXRhIHRyYW5zbWl0IHBhdGggKGRwX3R4KSBvZiB0aGUgYXRoMTJrIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIGZvciBRdWFsY29tbSBXaS1GaSA3IFBDSWUvQUhCIGRldmljZXMuIFNpbmNlIHRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIHRoZSBkZXZpY2UgY2Fubm90IGJlIHN1Y2Nlc3NmdWxseSBwcm9iZWQsIGZpcm13YXJlIGNhbm5vdCBiZSBsb2FkZWQsIGFuZCB0aGUgbmV0d29yayBpbnRlcmZhY2UgY2Fubm90IGJlIGJyb3VnaHQgdXAgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgdHJhbnNtaXQgcGF0aCBpcyB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjYjI4NTFhZTg2MjdmYzIyMzA1ZGEzZDA3YzdhNWVhNzM2YWQzZTU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDI6NDQ6MzEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jXG5pbmRleCBjMTBkYTYxOTVjOWMzLi45NjQ0ZjllZjJjNzQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3R4LmNcbkBAIC04Miw2ICYjNDM7ODIsNTIgQEAgZW51bSBoYWxfZW5jcnlwdF90eXBlIGF0aDEya19kcF90eF9nZXRfZW5jcnlwdF90eXBlKHUzMiBjaXBoZXIpXG4gfVxuIEVYUE9SVF9TWU1CT0woYXRoMTJrX2RwX3R4X2dldF9lbmNyeXB0X3R5cGUpO1xuIFxuJiM0Mzt1OCBhdGgxMmtfZHBfdHhfY3J5cHRvX2l2X2xlbihlbnVtIGhhbF9lbmNyeXB0X3R5cGUgZW5jX3R5cGUpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGVuY190eXBlKSB7XG4mIzQzO1x0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX1RLSVBfTk9fTUlDOlxuJiM0MztcdGNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9US0lQX01JQzpcbiYjNDM7XHRcdHJldHVybiBJRUVFODAyMTFfVEtJUF9JVl9MRU47XG4mIzQzO1x0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX0NDTVBfMTI4OlxuJiM0MztcdFx0cmV0dXJuIElFRUU4MDIxMV9DQ01QX0hEUl9MRU47XG4mIzQzO1x0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX0NDTVBfMjU2OlxuJiM0MztcdFx0cmV0dXJuIElFRUU4MDIxMV9DQ01QXzI1Nl9IRFJfTEVOO1xuJiM0MztcdGNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9HQ01QXzEyODpcbiYjNDM7XHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfQUVTX0dDTVBfMjU2OlxuJiM0MztcdFx0cmV0dXJuIElFRUU4MDIxMV9HQ01QX0hEUl9MRU47XG4mIzQzO1x0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX1dFUF80MDpcbiYjNDM7XHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfV0VQXzEwNDpcbiYjNDM7XHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfV0VQXzEyODpcbiYjNDM7XHRcdHJldHVybiBJRUVFODAyMTFfV0VQX0lWX0xFTjtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0woYXRoMTJrX2RwX3R4X2NyeXB0b19pdl9sZW4pO1xuJiM0MztcbiYjNDM7dTggYXRoMTJrX2RwX3R4X2NyeXB0b19pY3ZfbGVuKGVudW0gaGFsX2VuY3J5cHRfdHlwZSBlbmNfdHlwZSlcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAoZW5jX3R5cGUpIHtcbiYjNDM7XHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfQ0NNUF8xMjg6XG4mIzQzO1x0XHRyZXR1cm4gSUVFRTgwMjExX0NDTVBfTUlDX0xFTjtcbiYjNDM7XHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfQ0NNUF8yNTY6XG4mIzQzO1x0XHRyZXR1cm4gSUVFRTgwMjExX0NDTVBfMjU2X01JQ19MRU47XG4mIzQzO1x0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX0dDTVBfMTI4OlxuJiM0MztcdGNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9BRVNfR0NNUF8yNTY6XG4mIzQzO1x0XHRyZXR1cm4gSUVFRTgwMjExX0dDTVBfTUlDX0xFTjtcbiYjNDM7XHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfVEtJUF9OT19NSUM6XG4mIzQzO1x0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX1RLSVBfTUlDOlxuJiM0MztcdFx0cmV0dXJuIElFRUU4MDIxMV9US0lQX0lDVl9MRU47XG4mIzQzO1x0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX1dFUF80MDpcbiYjNDM7XHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfV0VQXzEwNDpcbiYjNDM7XHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfV0VQXzEyODpcbiYjNDM7XHRcdHJldHVybiBJRUVFODAyMTFfV0VQX0lDVl9MRU47XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKGF0aDEya19kcF90eF9jcnlwdG9faWN2X2xlbik7XG4mIzQzO1xuIHZvaWQgYXRoMTJrX2RwX3R4X3JlbGVhc2VfdHhidWYoc3RydWN0IGF0aDEya19kcCAqZHAsXG4gXHRcdFx0XHRzdHJ1Y3QgYXRoMTJrX3R4X2Rlc2NfaW5mbyAqdHhfZGVzYyxcbiBcdFx0XHRcdHU4IHBvb2xfaWQpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5oXG5pbmRleCA3Y2VmMjA1NDAxNzlmLi4xYWY3OWFmMmFkYTI2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3R4LmhcbkBAIC0xOSw2ICYjNDM7MTksOCBAQCBlbnVtIGhhbF90Y2xfZW5jYXBfdHlwZVxuIGF0aDEya19kcF90eF9nZXRfZW5jYXBfdHlwZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiB2b2lkIGF0aDEya19kcF90eF9lbmNhcF9ud2lmaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiB1OCBhdGgxMmtfZHBfdHhfZ2V0X3RpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiYjNDM7dTggYXRoMTJrX2RwX3R4X2NyeXB0b19pdl9sZW4oZW51bSBoYWxfZW5jcnlwdF90eXBlIGVuY190eXBlKTtcbiYjNDM7dTggYXRoMTJrX2RwX3R4X2NyeXB0b19pY3ZfbGVuKGVudW0gaGFsX2VuY3J5cHRfdHlwZSBlbmNfdHlwZSk7XG4gdm9pZCAqYXRoMTJrX2RwX21ldGFkYXRhX2FsaWduX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCB0YWlsX2xlbik7XG4gaW50IGF0aDEya19kcF90eF9hbGlnbl9wYXlsb2FkKHN0cnVjdCBhdGgxMmtfZHAgKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpO1xuIHZvaWQgYXRoMTJrX2RwX3R4X3JlbGVhc2VfdHhidWYoc3RydWN0IGF0aDEya19kcCAqZHAsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jXG5pbmRleCBkMjc0OWRlNDQ1NTM0Li41ODdkNThlZWNjZmE1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmNcbkBAIC0xMyw2ICYjNDM7MTMsNDkgQEBcbiAjaW5jbHVkZSBcJiMzNDtoYWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2hhbF90eC5oXCYjMzQ7XG4gXG4mIzQzOy8qXG4mIzQzOyAqIENvbnZlcnQgYW4gZW5jcnlwdGVkIEVBUE9MIGZyYW1lIGZyb20gbmF0aXZlLVdpRmkgZm9ybWF0IHRvXG4mIzQzOyAqIHRoZSBsYXlvdXQgZXhwZWN0ZWQgYnkgdGhlIGZpcm13YXJlIFJBVyBlbmNyeXB0IHBpcGVsaW5lOlxuJiM0MzsgKlxuJiM0MzsgKiAgIFs4MDIuMTEgaGRyXVtJViAoemVyb2VkKV1bTExDL1NOQVBdW0VBUE9MIHBheWxvYWRdW0lDViAoemVyb2VkKV1cbiYjNDM7ICpcbiYjNDM7ICogbWFjODAyMTEgZGVsaXZlcnMgdGhlIGZyYW1lIGFzIFs4MDIuMTEgaGRyXVtMTEMvU05BUF1bRUFQT0wgcGF5bG9hZF0uXG4mIzQzOyAqIFRoZSBNQUMgaGVhZGVyIGxlbmd0aCBpcyByZWFkIGZyb20gdGhlIHVubW9kaWZpZWQgc2tiIGFuZCBpcyBzYWZlIGJlY2F1c2VcbiYjNDM7ICogaWVlZTgwMjExX2hkcmxlbigpIG9ubHkgaW5zcGVjdHMgdGhlIDItYnl0ZSBmcmFtZV9jb250cm9sIGZpZWxkLlxuJiM0MzsgKiBwc2tiX2V4cGFuZF9oZWFkKCkgaXMgdXNlZCB0byBncm93IGJvdGggaGVhZCAoZm9yIHRoZSBJVikgYW5kIHRhaWxcbiYjNDM7ICogKGZvciB0aGUgSUNWKSBpbiBhIHNpbmdsZSBjYWxsIGFuZCBhbGxvY2F0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludFxuJiM0MzthdGgxMmtfd2lmaTdfZHBfdHhfZW5jYXBfZWFwb2woc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBoYWxfdHhfaW5mbyAqdGksXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9jYiAqc2tiX2NiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi1cdTAwM2VkYXRhO1xuJiM0MztcdGVudW0gaGFsX2VuY3J5cHRfdHlwZSBlbmNfdHlwZSA9XG4mIzQzO1x0XHRcdFx0YXRoMTJrX2RwX3R4X2dldF9lbmNyeXB0X3R5cGUoc2tiX2NiLVx1MDAzZWNpcGhlcik7XG4mIzQzO1x0dTE2IG1hY19oZHJfbGVuID0gaWVlZTgwMjExX2hkcmxlbihoZHItXHUwMDNlZnJhbWVfY29udHJvbCk7XG4mIzQzO1x0dTggaXZfbGVuID0gYXRoMTJrX2RwX3R4X2NyeXB0b19pdl9sZW4oZW5jX3R5cGUpO1xuJiM0MztcdHU4IGljdl9sZW4gPSBhdGgxMmtfZHBfdHhfY3J5cHRvX2ljdl9sZW4oZW5jX3R5cGUpO1xuJiM0MztcbiYjNDM7XHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIGl2X2xlbiwgaWN2X2xlbiwgR0ZQX0FUT01JQykpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0aWYgKGl2X2xlbikge1xuJiM0MztcdFx0c2tiX3B1c2goc2tiLCBpdl9sZW4pO1xuJiM0MztcdFx0bWVtbW92ZShza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWRhdGEgJiM0MzsgaXZfbGVuLCBtYWNfaGRyX2xlbik7XG4mIzQzO1x0XHRtZW1zZXQoc2tiLVx1MDAzZWRhdGEgJiM0MzsgbWFjX2hkcl9sZW4sIDAsIGl2X2xlbik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoaWN2X2xlbilcbiYjNDM7XHRcdG1lbXNldChza2JfcHV0KHNrYiwgaWN2X2xlbiksIDAsIGljdl9sZW4pO1xuJiM0MztcbiYjNDM7XHR0aS1cdTAwM2VmbGFnczAgfD0gdTMyX2VuY29kZV9iaXRzKDEsIEhBTF9UQ0xfREFUQV9DTURfSU5GTzJfVE9fRlcpO1xuJiM0MztcdHRpLVx1MDAzZWVuY2FwX3R5cGUgPSBIQUxfVENMX0VOQ0FQX1RZUEVfUkFXO1xuJiM0MztcdHRpLVx1MDAzZWVuY3J5cHRfdHlwZSA9IGVuY190eXBlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZFxuIGF0aDEya193aWZpN19oYWxfdHhfY21kX2V4dF9kZXNjX3NldHVwKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGhhbF90eF9tc2R1X2V4dF9kZXNjICp0Y2xfZXh0X2NtZCxcbkBAIC05MSw2ICYjNDM7MTM0LDcgQEAgaW50IGF0aDEya193aWZpN19kcF90eChzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsIHN0cnVjdCBhdGgxMmtfbGlua192aWYgKmFcbiBcdHUzMiBpb3ZhX21hc2sgPSBkcC1cdTAwM2Vod19wYXJhbXMtXHUwMDNlaW92YV9tYXNrO1xuIFx0Ym9vbCBpc19kaWZmX2VuY2FwID0gZmFsc2U7XG4gXHRib29sIGlzX251bGxfZnJhbWUgPSBmYWxzZTtcbiYjNDM7XHRib29sIGVhcG9sX2VuY2FwX2RvbmUgPSBmYWxzZTtcbiBcbiBcdGlmICh0ZXN0X2JpdChBVEgxMktfRkxBR19DUkFTSF9GTFVTSCwgXHUwMDI2YWItXHUwMDNlZGV2X2ZsYWdzKSlcbiBcdFx0cmV0dXJuIC1FU0hVVERPV047XG5AQCAtMjExLDkgJiM0MzsyNTUsMjcgQEAgaW50IGF0aDEya193aWZpN19kcF90eChzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsIHN0cnVjdCBhdGgxMmtfbGlua192aWYgKmFcbiBcdGNhc2UgSEFMX1RDTF9FTkNBUF9UWVBFX05BVElWRV9XSUZJOlxuIFx0XHRpc19udWxsX2ZyYW1lID0gaWVlZTgwMjExX2lzX251bGxmdW5jKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKTtcbiBcdFx0aWYgKGFodmlmLVx1MDAzZXZpZi1cdTAwM2VvZmZsb2FkX2ZsYWdzIFx1MDAyNiBJRUVFODAyMTFfT0ZGTE9BRF9FTkNBUF9FTkFCTEVEKSB7XG4tXHRcdFx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9QQUUpIHx8IGlzX251bGxfZnJhbWUpXG4mIzQzO1x0XHRcdGlmICgoc2tiLVx1MDAzZXByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX1BBRSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICAgIShza2JfY2ItXHUwMDNlZmxhZ3MgXHUwMDI2IEFUSDEyS19TS0JfQ0lQSEVSX1NFVCkpIHx8IGlzX251bGxfZnJhbWUpXG4gXHRcdFx0XHRpc19kaWZmX2VuY2FwID0gdHJ1ZTtcbiBcbiYjNDM7XHRcdFx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9QQUUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgKHNrYl9jYi1cdTAwM2VmbGFncyBcdTAwMjYgQVRIMTJLX1NLQl9DSVBIRVJfU0VUKSkge1xuJiM0MztcdFx0XHRcdGlmICghZWFwb2xfZW5jYXBfZG9uZSkge1xuJiM0MztcdFx0XHRcdFx0cmV0ID0gYXRoMTJrX3dpZmk3X2RwX3R4X2VuY2FwX2VhcG9sKHNrYiwgXHUwMDI2dGksXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdCAgICAgc2tiX2NiKTtcbiYjNDM7XHRcdFx0XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdFx0XHRcdGdvdG8gZmFpbF9yZW1vdmVfdHhfYnVmO1xuJiM0MztcdFx0XHRcdFx0aGRyID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YTtcbiYjNDM7XHRcdFx0XHRcdGVhcG9sX2VuY2FwX2RvbmUgPSB0cnVlO1xuJiM0MztcdFx0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0XHR0aS5mbGFnczAgfD0gdTMyX2VuY29kZV9iaXRzKDEsXG4mIzQzO1x0XHRcdFx0XHRcdFx0SEFMX1RDTF9EQVRBX0NNRF9JTkZPMl9UT19GVyk7XG4mIzQzO1x0XHRcdFx0XHR0aS5lbmNhcF90eXBlID0gSEFMX1RDTF9FTkNBUF9UWVBFX1JBVztcbiYjNDM7XHRcdFx0XHRcdHRpLmVuY3J5cHRfdHlwZSA9XG4mIzQzO1x0XHRcdFx0XHRcdGF0aDEya19kcF90eF9nZXRfZW5jcnlwdF90eXBlKHNrYl9jYi1cdTAwM2VjaXBoZXIpO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0fVxuIFx0XHRcdC8qIEZpcm13YXJlIGV4cGVjdHMgbXNkdSBleHQgZGVzY3JpcHRvciBmb3IgbndpZmkvcmF3IHBhY2tldHNcbiBcdFx0XHQgKiByZWNlaXZlZCBpbiBFVEggbW9kZS4gV2l0aG91dCB0aGlzLCBvYnNlcnZlZCB0eCBmYWlsIGZvclxuIFx0XHRcdCAqIE11bHRpY2FzdCBwYWNrZXRzIGluIEVUSCBtb2RlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjQ0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZGF0YSB0cmFuc21pdCBwYXRoIChkcF90eCkgb2YgdGhlIGF0aDEyayBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciBmb3IgUXVhbGNvbW0gV2ktRmkgNyBQQ0llL0FIQiBkZXZpY2VzLiBTaW5jZSB0aGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCB0aGUgZGV2aWNlIGNhbm5vdCBiZSBzdWNjZXNzZnVsbHkgcHJvYmVkLCBmaXJtd2FyZSBjYW5ub3QgYmUgbG9hZGVkLCBhbmQgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGNhbm5vdCBiZSBicm91Z2h0IHVwIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIHRyYW5zbWl0IHBhdGggaXMgdW5yZWFjaGFibGUgYW5kIGNhbm5vdCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2IyODUxYWU4NjI3ZmMyMjMwNWRhM2QwN2M3YTVlYTczNmFkM2U1OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDMxIDAyOjQ0OjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jCmluZGV4IGMxMGRhNjE5NWM5YzMuLjk2NDRmOWVmMmM3NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3R4LmMKQEAgLTgyLDYgJiM0Mzs4Miw1MiBAQCBlbnVtIGhhbF9lbmNyeXB0X3R5cGUgYXRoMTJrX2RwX3R4X2dldF9lbmNyeXB0X3R5cGUodTMyIGNpcGhlcikKIH0KIEVYUE9SVF9TWU1CT0woYXRoMTJrX2RwX3R4X2dldF9lbmNyeXB0X3R5cGUpOwogCiYjNDM7dTggYXRoMTJrX2RwX3R4X2NyeXB0b19pdl9sZW4oZW51bSBoYWxfZW5jcnlwdF90eXBlIGVuY190eXBlKQomIzQzO3sKJiM0MzsJc3dpdGNoIChlbmNfdHlwZSkgewomIzQzOwljYXNlIEhBTF9FTkNSWVBUX1RZUEVfVEtJUF9OT19NSUM6CiYjNDM7CWNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9US0lQX01JQzoKJiM0MzsJCXJldHVybiBJRUVFODAyMTFfVEtJUF9JVl9MRU47CiYjNDM7CWNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9DQ01QXzEyODoKJiM0MzsJCXJldHVybiBJRUVFODAyMTFfQ0NNUF9IRFJfTEVOOwomIzQzOwljYXNlIEhBTF9FTkNSWVBUX1RZUEVfQ0NNUF8yNTY6CiYjNDM7CQlyZXR1cm4gSUVFRTgwMjExX0NDTVBfMjU2X0hEUl9MRU47CiYjNDM7CWNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9HQ01QXzEyODoKJiM0MzsJY2FzZSBIQUxfRU5DUllQVF9UWVBFX0FFU19HQ01QXzI1NjoKJiM0MzsJCXJldHVybiBJRUVFODAyMTFfR0NNUF9IRFJfTEVOOwomIzQzOwljYXNlIEhBTF9FTkNSWVBUX1RZUEVfV0VQXzQwOgomIzQzOwljYXNlIEhBTF9FTkNSWVBUX1RZUEVfV0VQXzEwNDoKJiM0MzsJY2FzZSBIQUxfRU5DUllQVF9UWVBFX1dFUF8xMjg6CiYjNDM7CQlyZXR1cm4gSUVFRTgwMjExX1dFUF9JVl9MRU47CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKGF0aDEya19kcF90eF9jcnlwdG9faXZfbGVuKTsKJiM0MzsKJiM0Mzt1OCBhdGgxMmtfZHBfdHhfY3J5cHRvX2ljdl9sZW4oZW51bSBoYWxfZW5jcnlwdF90eXBlIGVuY190eXBlKQomIzQzO3sKJiM0MzsJc3dpdGNoIChlbmNfdHlwZSkgewomIzQzOwljYXNlIEhBTF9FTkNSWVBUX1RZUEVfQ0NNUF8xMjg6CiYjNDM7CQlyZXR1cm4gSUVFRTgwMjExX0NDTVBfTUlDX0xFTjsKJiM0MzsJY2FzZSBIQUxfRU5DUllQVF9UWVBFX0NDTVBfMjU2OgomIzQzOwkJcmV0dXJuIElFRUU4MDIxMV9DQ01QXzI1Nl9NSUNfTEVOOwomIzQzOwljYXNlIEhBTF9FTkNSWVBUX1RZUEVfR0NNUF8xMjg6CiYjNDM7CWNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9BRVNfR0NNUF8yNTY6CiYjNDM7CQlyZXR1cm4gSUVFRTgwMjExX0dDTVBfTUlDX0xFTjsKJiM0MzsJY2FzZSBIQUxfRU5DUllQVF9UWVBFX1RLSVBfTk9fTUlDOgomIzQzOwljYXNlIEhBTF9FTkNSWVBUX1RZUEVfVEtJUF9NSUM6CiYjNDM7CQlyZXR1cm4gSUVFRTgwMjExX1RLSVBfSUNWX0xFTjsKJiM0MzsJY2FzZSBIQUxfRU5DUllQVF9UWVBFX1dFUF80MDoKJiM0MzsJY2FzZSBIQUxfRU5DUllQVF9UWVBFX1dFUF8xMDQ6CiYjNDM7CWNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9XRVBfMTI4OgomIzQzOwkJcmV0dXJuIElFRUU4MDIxMV9XRVBfSUNWX0xFTjsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0woYXRoMTJrX2RwX3R4X2NyeXB0b19pY3ZfbGVuKTsKJiM0MzsKIHZvaWQgYXRoMTJrX2RwX3R4X3JlbGVhc2VfdHhidWYoc3RydWN0IGF0aDEya19kcCAqZHAsCiAJCQkJc3RydWN0IGF0aDEya190eF9kZXNjX2luZm8gKnR4X2Rlc2MsCiAJCQkJdTggcG9vbF9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguaAppbmRleCA3Y2VmMjA1NDAxNzlmLi4xYWY3OWFmMmFkYTI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3R4LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5oCkBAIC0xOSw2ICYjNDM7MTksOCBAQCBlbnVtIGhhbF90Y2xfZW5jYXBfdHlwZQogYXRoMTJrX2RwX3R4X2dldF9lbmNhcF90eXBlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBhdGgxMmtfZHBfdHhfZW5jYXBfbndpZmkoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB1OCBhdGgxMmtfZHBfdHhfZ2V0X3RpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKJiM0Mzt1OCBhdGgxMmtfZHBfdHhfY3J5cHRvX2l2X2xlbihlbnVtIGhhbF9lbmNyeXB0X3R5cGUgZW5jX3R5cGUpOwomIzQzO3U4IGF0aDEya19kcF90eF9jcnlwdG9faWN2X2xlbihlbnVtIGhhbF9lbmNyeXB0X3R5cGUgZW5jX3R5cGUpOwogdm9pZCAqYXRoMTJrX2RwX21ldGFkYXRhX2FsaWduX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCB0YWlsX2xlbik7CiBpbnQgYXRoMTJrX2RwX3R4X2FsaWduX3BheWxvYWQoc3RydWN0IGF0aDEya19kcCAqZHAsIHN0cnVjdCBza19idWZmICoqcHNrYik7CiB2b2lkIGF0aDEya19kcF90eF9yZWxlYXNlX3R4YnVmKHN0cnVjdCBhdGgxMmtfZHAgKmRwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jCmluZGV4IGQyNzQ5ZGU0NDU1MzQuLjU4N2Q1OGVlY2NmYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMKQEAgLTEzLDYgJiM0MzsxMyw0OSBAQAogI2luY2x1ZGUgJiMzNDtoYWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2hhbF90eC5oJiMzNDsKIAomIzQzOy8qCiYjNDM7ICogQ29udmVydCBhbiBlbmNyeXB0ZWQgRUFQT0wgZnJhbWUgZnJvbSBuYXRpdmUtV2lGaSBmb3JtYXQgdG8KJiM0MzsgKiB0aGUgbGF5b3V0IGV4cGVjdGVkIGJ5IHRoZSBmaXJtd2FyZSBSQVcgZW5jcnlwdCBwaXBlbGluZToKJiM0MzsgKgomIzQzOyAqICAgWzgwMi4xMSBoZHJdW0lWICh6ZXJvZWQpXVtMTEMvU05BUF1bRUFQT0wgcGF5bG9hZF1bSUNWICh6ZXJvZWQpXQomIzQzOyAqCiYjNDM7ICogbWFjODAyMTEgZGVsaXZlcnMgdGhlIGZyYW1lIGFzIFs4MDIuMTEgaGRyXVtMTEMvU05BUF1bRUFQT0wgcGF5bG9hZF0uCiYjNDM7ICogVGhlIE1BQyBoZWFkZXIgbGVuZ3RoIGlzIHJlYWQgZnJvbSB0aGUgdW5tb2RpZmllZCBza2IgYW5kIGlzIHNhZmUgYmVjYXVzZQomIzQzOyAqIGllZWU4MDIxMV9oZHJsZW4oKSBvbmx5IGluc3BlY3RzIHRoZSAyLWJ5dGUgZnJhbWVfY29udHJvbCBmaWVsZC4KJiM0MzsgKiBwc2tiX2V4cGFuZF9oZWFkKCkgaXMgdXNlZCB0byBncm93IGJvdGggaGVhZCAoZm9yIHRoZSBJVikgYW5kIHRhaWwKJiM0MzsgKiAoZm9yIHRoZSBJQ1YpIGluIGEgc2luZ2xlIGNhbGwgYW5kIGFsbG9jYXRpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIGludAomIzQzO2F0aDEya193aWZpN19kcF90eF9lbmNhcF9lYXBvbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgaGFsX3R4X2luZm8gKnRpLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9jYiAqc2tiX2NiKQomIzQzO3sKJiM0MzsJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0mZ3Q7ZGF0YTsKJiM0MzsJZW51bSBoYWxfZW5jcnlwdF90eXBlIGVuY190eXBlID0KJiM0MzsJCQkJYXRoMTJrX2RwX3R4X2dldF9lbmNyeXB0X3R5cGUoc2tiX2NiLSZndDtjaXBoZXIpOwomIzQzOwl1MTYgbWFjX2hkcl9sZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci0mZ3Q7ZnJhbWVfY29udHJvbCk7CiYjNDM7CXU4IGl2X2xlbiA9IGF0aDEya19kcF90eF9jcnlwdG9faXZfbGVuKGVuY190eXBlKTsKJiM0MzsJdTggaWN2X2xlbiA9IGF0aDEya19kcF90eF9jcnlwdG9faWN2X2xlbihlbmNfdHlwZSk7CiYjNDM7CiYjNDM7CWlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgaXZfbGVuLCBpY3ZfbGVuLCBHRlBfQVRPTUlDKSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlpZiAoaXZfbGVuKSB7CiYjNDM7CQlza2JfcHVzaChza2IsIGl2X2xlbik7CiYjNDM7CQltZW1tb3ZlKHNrYi0mZ3Q7ZGF0YSwgc2tiLSZndDtkYXRhICYjNDM7IGl2X2xlbiwgbWFjX2hkcl9sZW4pOwomIzQzOwkJbWVtc2V0KHNrYi0mZ3Q7ZGF0YSAmIzQzOyBtYWNfaGRyX2xlbiwgMCwgaXZfbGVuKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaWN2X2xlbikKJiM0MzsJCW1lbXNldChza2JfcHV0KHNrYiwgaWN2X2xlbiksIDAsIGljdl9sZW4pOwomIzQzOwomIzQzOwl0aS0mZ3Q7ZmxhZ3MwIHw9IHUzMl9lbmNvZGVfYml0cygxLCBIQUxfVENMX0RBVEFfQ01EX0lORk8yX1RPX0ZXKTsKJiM0MzsJdGktJmd0O2VuY2FwX3R5cGUgPSBIQUxfVENMX0VOQ0FQX1RZUEVfUkFXOwomIzQzOwl0aS0mZ3Q7ZW5jcnlwdF90eXBlID0gZW5jX3R5cGU7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkCiBhdGgxMmtfd2lmaTdfaGFsX3R4X2NtZF9leHRfZGVzY19zZXR1cChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLAogCQkJCSAgICAgICBzdHJ1Y3QgaGFsX3R4X21zZHVfZXh0X2Rlc2MgKnRjbF9leHRfY21kLApAQCAtOTEsNiAmIzQzOzEzNCw3IEBAIGludCBhdGgxMmtfd2lmaTdfZHBfdHgoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LCBzdHJ1Y3QgYXRoMTJrX2xpbmtfdmlmICphCiAJdTMyIGlvdmFfbWFzayA9IGRwLSZndDtod19wYXJhbXMtJmd0O2lvdmFfbWFzazsKIAlib29sIGlzX2RpZmZfZW5jYXAgPSBmYWxzZTsKIAlib29sIGlzX251bGxfZnJhbWUgPSBmYWxzZTsKJiM0MzsJYm9vbCBlYXBvbF9lbmNhcF9kb25lID0gZmFsc2U7CiAKIAlpZiAodGVzdF9iaXQoQVRIMTJLX0ZMQUdfQ1JBU0hfRkxVU0gsICZhbXA7YWItJmd0O2Rldl9mbGFncykpCiAJCXJldHVybiAtRVNIVVRET1dOOwpAQCAtMjExLDkgJiM0MzsyNTUsMjcgQEAgaW50IGF0aDEya193aWZpN19kcF90eChzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsIHN0cnVjdCBhdGgxMmtfbGlua192aWYgKmEKIAljYXNlIEhBTF9UQ0xfRU5DQVBfVFlQRV9OQVRJVkVfV0lGSToKIAkJaXNfbnVsbF9mcmFtZSA9IGllZWU4MDIxMV9pc19udWxsZnVuYyhoZHItJmd0O2ZyYW1lX2NvbnRyb2wpOwogCQlpZiAoYWh2aWYtJmd0O3ZpZi0mZ3Q7b2ZmbG9hZF9mbGFncyAmYW1wOyBJRUVFODAyMTFfT0ZGTE9BRF9FTkNBUF9FTkFCTEVEKSB7Ci0JCQlpZiAoc2tiLSZndDtwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9QQUUpIHx8IGlzX251bGxfZnJhbWUpCiYjNDM7CQkJaWYgKChza2ItJmd0O3Byb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX1BBRSkgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAgIShza2JfY2ItJmd0O2ZsYWdzICZhbXA7IEFUSDEyS19TS0JfQ0lQSEVSX1NFVCkpIHx8IGlzX251bGxfZnJhbWUpCiAJCQkJaXNfZGlmZl9lbmNhcCA9IHRydWU7CiAKJiM0MzsJCQlpZiAoc2tiLSZndDtwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9QQUUpICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgKHNrYl9jYi0mZ3Q7ZmxhZ3MgJmFtcDsgQVRIMTJLX1NLQl9DSVBIRVJfU0VUKSkgewomIzQzOwkJCQlpZiAoIWVhcG9sX2VuY2FwX2RvbmUpIHsKJiM0MzsJCQkJCXJldCA9IGF0aDEya193aWZpN19kcF90eF9lbmNhcF9lYXBvbChza2IsICZhbXA7dGksCiYjNDM7CQkJCQkJCQkJICAgICBza2JfY2IpOwomIzQzOwkJCQkJaWYgKHJldCkKJiM0MzsJCQkJCQlnb3RvIGZhaWxfcmVtb3ZlX3R4X2J1ZjsKJiM0MzsJCQkJCWhkciA9ICh2b2lkICopc2tiLSZndDtkYXRhOwomIzQzOwkJCQkJZWFwb2xfZW5jYXBfZG9uZSA9IHRydWU7CiYjNDM7CQkJCX0gZWxzZSB7CiYjNDM7CQkJCQl0aS5mbGFnczAgfD0gdTMyX2VuY29kZV9iaXRzKDEsCiYjNDM7CQkJCQkJCUhBTF9UQ0xfREFUQV9DTURfSU5GTzJfVE9fRlcpOwomIzQzOwkJCQkJdGkuZW5jYXBfdHlwZSA9IEhBTF9UQ0xfRU5DQVBfVFlQRV9SQVc7CiYjNDM7CQkJCQl0aS5lbmNyeXB0X3R5cGUgPQomIzQzOwkJCQkJCWF0aDEya19kcF90eF9nZXRfZW5jcnlwdF90eXBlKHNrYl9jYi0mZ3Q7Y2lwaGVyKTsKJiM0MzsJCQkJfQomIzQzOwkJCX0KIAkJCS8qIEZpcm13YXJlIGV4cGVjdHMgbXNkdSBleHQgZGVzY3JpcHRvciBmb3IgbndpZmkvcmF3IHBhY2tldHMKIAkJCSAqIHJlY2VpdmVkIGluIEVUSCBtb2RlLiBXaXRob3V0IHRoaXMsIG9ic2VydmVkIHR4IGZhaWwgZm9yCiAJCQkgKiBNdWx0aWNhc3QgcGFja2V0cyBpbiBFVEggbW9kZS4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcxMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBhbiBhdGgxMmsgUGF0Y2ggaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIGBhdGgxMmtgIGRyaXZlci4gSXQmIzM5O3MgbW9kaWZ5aW5nIGBkcF90eC5jYCwgYGRwX3R4LmhgLCBhbmQgYHdpZmk3L2RwX3R4LmNgIGFuZCBzZWVtcyB0byBiZSBhZGRpbmcgZnVuY3Rpb25zIHRvIGhhbmRsZSBJVi9JQ1YgbGVuZ3RocyBmb3IgZGlmZmVyZW50IGVuY3J5cHRpb24gdHlwZXMsIGFzIHdlbGwgYXMgbW9kaWZ5aW5nIGBhdGgxMmtfd2lmaTdfZHBfdHhgIHRvIGRlYWwgd2l0aCBlbmNyeXB0ZWQgRUFQT0wgZnJhbWVzLiBCYXNpY2FsbHksIGl0JiMzOTtzIHByZXBwaW5nIGZvciB0aGUgZmlybXdhcmUmIzM5O3MgUkFXIGVuY3J5cHQgcGlwZWxpbmUuIFRoZSBjb3JlIG9mIHRoaXMgd29yayBzZWVtcyB0byBiZSBzZXR0aW5nIHVwIElWIGFuZCBJQ1YuCgpUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBjYW4gSSBldmVuIHRlc3QgdGhpcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBgYXRoMTJrYCBpcyBhIGRyaXZlciBmb3IgUXVhbGNvbW0gV2ktRmkgNyAoODAyLjExYmUpIFBDSWUgZGV2aWNlcy4gUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoYXQgc3BlY2lmaWMgaGFyZHdhcmUsIGF0IGxlYXN0IG5vdCB0aGF0IEkmIzM5O20gYXdhcmUgb2YuIEFuZCB3aGlsZSBgbWFjODAyMTFfaHdzaW1gIHByb3ZpZGVzIGEgV2lGaSBlbXVsYXRpb24sIGBhdGgxMmtgIGlzIHRpZWQgdG8gdGhlIGhhcmR3YXJlLiBUaGF0IG1ha2VzIHRlc3RpbmcgdHJpY2t5LgoKVGhlIG5leHQgdGhpbmcgSSYjMzk7ZCBsb29rIGF0IGlzIGlmIGl0JiMzOTtzIHBvc3NpYmxlIHRvIGZ1enogYGF0aDEya2AuIFBDSSBkcml2ZXJzIGFyZSBub3RvcmlvdXNseSBkaWZmaWN1bHQgdG8gZnV6eiBiZWNhdXNlIHRoZXkgcmVxdWlyZSBhIHJlYWwgZGV2aWNlLiBJdCYjMzk7cyB1c3VhbGx5IG9ubHkgcG9zc2libGUgaWYgdGhlcmUgaXMgYW4gZW11bGF0b3Igb3IgZm9yIFVTQiBkZXZpY2VzIHdpdGggZW11bGF0b3JzLCBvciBpZiBpdCYjMzk7cyBhIHZpcnR1YWwgZHJpdmVyLiBCZWNhdXNlIGl0JiMzOTtzIGEgUENJIGRyaXZlciwgSSB3aWxsIG5lZWQgdG8gY2hlY2sgd2hldGhlciBJIGNhbiBldmVuIGdldCBpdCB0byBydW4gaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LiBJIHNob3VsZCBjaGVjayB0aGUgZmlsZXMgcmVsYXRlZCB0byBQQ0kgZnVuY3Rpb25hbGl0eSBzdWNoIGFzIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jYC4KCkkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgdG8gc2VlIGlmIGBhdGgxMmtgIGlzIGluZGVlZCBhIFBDSSBkcml2ZXIuIFRoYXQgd2lsbCB0ZWxsIG1lIHdoZXJlIHRvIGdvIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX3JlZ2lzdGVyX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xODExPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBfX21heWJlX3VudXNlZCBhdGgxMmtfcGNpX3BtX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MTctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4MTg6aW50IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKGNvbnN0IGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODE5LVx0XHRcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3BjaV9kcml2ZXIgKmRyaXZlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4NDQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4NDU6XHRyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcihwY2lfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTg0Ni19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4NDc6RVhQT1JUX1NZTUJPTChhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4NDgtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaD0xNzY9dm9pZCBhdGgxMmtfcGNpX3Bvd2VyX2Rvd24oc3RydWN0IGF0aDEya19iYXNlICphYiwgYm9vbCBpc19zdXNwZW5kKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmg6MTc3OmludCBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcihjb25zdCBlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmgtMTc4LVx0XHRcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3BjaV9kcml2ZXIgKmRyaXZlcik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYz0xOTc9aW50IGF0aDEya193aWZpN19wY2lfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtMjAwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYzoyMDE6XHRyZXQgPSBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcihBVEgxMktfREVWSUNFX0ZBTUlMWV9XSUZJNyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtMjAyLVx0XHRcdFx0XHQgXHUwMDI2YXRoMTJrX3dpZmk3X3BjaV9kcml2ZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxOTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nPWZhbHNlOiBhdGgxMmsgYW5kIHRoZSBMaW1pdGF0aW9ucyBvZiBWaXJ0dWFsaXphdGlvbioqCgpPa2F5LCBzbyB0aGlzIGlzIGEgUENJIGRyaXZlciwgc3BlY2lmaWNhbGx5IGBhdGgxMmtgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGlzIHRoZXJlICphbnkqIHdheSB0byByZWFjaCB0aGUgYGF0aDEya193aWZpN19kcF90eGAgZnVuY3Rpb24gd2l0aG91dCBhY3R1YWwgaGFyZHdhcmU/IEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBQQ0kgZHJpdmVycyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUsIGxpa2UgUXVhbGNvbW0gV2ktRmksIGFyZSBub3RvcmlvdXNseSBkaWZmaWN1bHQgdG8gZnV6eiBpbiBRRU1VIGJlY2F1c2UgdGhlIGhhcmR3YXJlIGlzbiYjMzk7dCBlbXVsYXRlZC4KClRoZW4gSSBwYXVzZWQg4oCTIHdhaXQsIGRvZXNuJiMzOTt0IHN5emthbGxlciBoYXZlIHNvbWV0aGluZyBsaWtlIGBzeXpfcGNpX2RldmljZWA/IFJpZ2h0LCBpdCAqZG9lcyosIGJ1dCBpdCYjMzk7cyBwcmV0dHkgbGltaXRlZC4gVXN1YWxseSwgd2l0aCB0aG9zZSwgeW91JiMzOTtyZSBqdXN0IHRlc3RpbmcgdGhlIHByb2JlIGFuZCBpbml0IGZ1bmN0aW9ucyB1bmxlc3MgdGhlIGRyaXZlciBoYXMgYmVlbiBzcGVjaWZpY2FsbHkgY2F0ZXJlZCB0by4gQW5kIGBhdGgxMmtgIGlzIGEgKmNvbXBsZXgqIFdpLUZpIGRyaXZlci4gSXQgbmVlZHMgZmlybXdhcmUgbG9hZGVkLCBETUEgcmluZ3Mgc2V0IHVwLCBhIHdob2xlIGhvc3Qgb2YgdGhpbmdzLgoKU28sIHRoZSB0cmFuc21pdCBwYXRoLCBgYXRoMTJrX3dpZmk3X2RwX3R4YCwgaXMgd2hhdCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaGVyZS4gVG8gZ2V0IHRoZXJlLCB0aGUgZGV2aWNlIG5lZWRzIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSwgZmlybXdhcmUgbmVlZHMgdG8gbG9hZCwgdGhlIE1BQyBuZWVkcyB0byBiZSByZWdpc3RlcmVkLCB0aGUgaW50ZXJmYWNlIG5lZWRzIHRvIGJlIGJyb3VnaHQgdXAsIGFuZCB0aGVuIHlvdSBuZWVkIHRvIGFjdHVhbGx5ICpzZW5kKiBwYWNrZXRzLgoKV2l0aG91dCByZWFsIGhhcmR3YXJlIG9yIGEgdmVyeSBzb3BoaXN0aWNhdGVkIGhhcmR3YXJlIGVtdWxhdG9yLCB0aGUgYGF0aDEya2AgcHJvYmUgaXMgZ29pbmcgdG8gZmFpbCBzcGVjdGFjdWxhcmx5LiBSZWFkaW5nIFBDSSBjb25maWcgc3BhY2UsIG1hcHBpbmcgQkFScywgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBmaXJtd2FyZSDigJMgaXQmIzM5O3MgYWxsIGdvaW5nIHRvIGJlIGEgYnJpY2sgd2FsbC4gVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgYGF0aDEya193aWZpN19kcF90eGAgaXMgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCk5vdywgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIHRoZXJlJiMzOTtzIGFueSBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIGBhdGgxMmtgIHRoYXQgSSBtaWdodCBoYXZlIG1pc3NlZC4gTm8sIGBtYWM4MDIxMV9od3NpbWAgaXMgZ2VuZXJpYyBtYWM4MDIxMSwgbm90IHRoaXMgc3BlY2lmaWMgZHJpdmVyLiBJdCYjMzk7cyBhIHNwZWNpZmljIGhhcmR3YXJlIGRyaXZlci4KClRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBpbnZvbHZlcyBjb2RlIGluICYjMzQ7dmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDsKCmBhdGgxMmtgICppcyogYSB2ZW5kb3Itc3BlY2lmaWMgKFF1YWxjb21tKSBQQ0llIFdpLUZpIGRyaXZlci4gSXQgbmVlZHMgdGhvc2UgcGh5c2ljYWwgY2FyZHMuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHNheSBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkxldCBtZSBxdWlja2x5IHZlcmlmeSDigJMgaXMgdGhpcyAqb25seSogUENJPyBJJiMzOTttIHN1cmUgSSYjMzk7dmUgc2VlbiBtZW50aW9ucyBvZiBBSEIgc3VwcG9ydCBmb3IgYGF0aDEya2AuIE5lZWQgdG8gY2hlY2sgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmNgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBqdXN0IGluIGNhc2UuIEJ1dCBteSBwcmltYXJ5IGFzc2Vzc21lbnQgc3RhbmRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYz01NT1zdGF0aWMgdm9pZCBhdGgxMmtfd2lmaTdfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jLTYzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmM6NjQ6bW9kdWxlX2luaXQoYXRoMTJrX3dpZmk3X2luaXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmMtNjUtbW9kdWxlX2V4aXQoYXRoMTJrX3dpZmk3X2V4aXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NjkKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0IGRpdmluZyBpbnRvIHRoZSBjb2RlOgoKKipEaXZpbmcgRGVlcCBpbnRvIHRoZSBBdGhlcm9zIFdpRmkgNyBEcml2ZXIqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmRhbWVudGFsIGluaXRpYWxpemF0aW9uIG9mIHRoaXMgYGF0aDEya2AgZHJpdmVyLCBwYXJ0aWN1bGFybHkgaG93IGl0IHJlZ2lzdGVycyBpdHMga2V5IGNvbXBvbmVudHMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYHdpZmk3YCBhc3BlY3RzLCB3aGljaCBsaWtlbHkgZW5jb21wYXNzIHRoZSBuZXcgZmVhdHVyZXMgYW5kIGNhcGFiaWxpdGllcyBpbnRyb2R1Y2VkIHdpdGggdGhlIG5ld2VyIHN0YW5kYXJkLiBUaW1lIHRvIGNyYWNrIG9wZW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jYCBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoZSByZWdpc3RyYXRpb24gbGV2ZWwuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGVzc2VudGlhbCBkYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyB0aGF0IGFyZSBnZXR0aW5nIGhvb2tlZCBpbnRvIHRoZSBrZXJuZWwmIzM5O3Mgd2lyZWxlc3Mgc3Vic3lzdGVtLiBXaGF0IGFyZSB0aGUga2V5IGRldmljZSBmZWF0dXJlcywgcHJvdG9jb2xzLCBhbmQgcmVndWxhdG9yeSBlbGVtZW50cyBiZWluZyBtYWRlIGF2YWlsYWJsZT8gSSBleHBlY3QgdG8gc2VlIHRoZSByZWdpc3RyYXRpb24gb2YgaGFyZHdhcmUgaW50ZXJmYWNlcywgbmV0ZGV2IG9wZXJhdGlvbnMsIGFuZCBwZXJoYXBzIHBvd2VyIG1hbmFnZW1lbnQgaGFuZGxlcnMuIFRoaXMgd2lsbCBwcm92aWRlIGEgY3J1Y2lhbCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgYHdpZmk3YCBzdXBwb3J0IGlzIGJha2VkIGludG8gdGhlIGNvcmUgZHJpdmVyIGFyY2hpdGVjdHVyZS4gSXQmIzM5O3MgdGltZSB0byBmaW5kIHRoZSBicmVhZGNydW1icyBhbmQgdHJhY2UgdGhlIGRyaXZlciYjMzk7cyBmb290cHJpbnQgd2l0aGluIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG4gICAyOlx0LypcbiAgIDM6XHQgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMSBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAgIDQ6XHQgKiBDb3B5cmlnaHQgKGMpIFF1YWxjb21tIFRlY2hub2xvZ2llcywgSW5jLiBhbmQvb3IgaXRzIHN1YnNpZGlhcmllcy5cbiAgIDU6XHQgKi9cbiAgIDY6XHRcbiAgIDc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICAgODpcdCNpbmNsdWRlIFwmIzM0Oy4uL2FoYi5oXCYjMzQ7XG4gICA5Olx0I2luY2x1ZGUgXCYjMzQ7Li4vcGNpLmhcJiMzNDtcbiAgMTA6XHQjaW5jbHVkZSBcJiMzNDtwY2kuaFwmIzM0O1xuICAxMTpcdCNpbmNsdWRlIFwmIzM0O2FoYi5oXCYjMzQ7XG4gIDEyOlx0I2luY2x1ZGUgXCYjMzQ7Y29yZS5oXCYjMzQ7XG4gIDEzOlx0I2luY2x1ZGUgXCYjMzQ7ZHAuaFwmIzM0O1xuICAxNDpcdCNpbmNsdWRlIFwmIzM0Oy4uL2RlYnVnLmhcJiMzNDtcbiAgMTU6XHRcbiAgMTY6XHRzdGF0aWMgaW50IGFoYl9lcnIsIHBjaV9lcnI7XG4gIDE3Olx0XG4gIDE4Olx0aW50IGF0aDEya193aWZpN19hcmNoX2luaXQoc3RydWN0IGF0aDEya19iYXNlICphYilcbiAgMTk6XHR7XG4gIDIwOlx0XHRzdHJ1Y3QgYXRoMTJrX2RwICpkcDtcbiAgMjE6XHRcbiAgMjI6XHRcdGRwID0gYXRoMTJrX3dpZmk3X2RwX2RldmljZV9hbGxvYyhhYik7XG4gIDIzOlx0XHRpZiAoIWRwKSB7XG4gIDI0Olx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2RwIGFsbG9jIGZhaWxlZFwmIzM0Oyk7XG4gIDI1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuICAyNjpcdFx0fVxuICAyNzpcdFxuICAyODpcdFx0YWItXHUwMDNlZHAgPSBkcDtcbiAgMjk6XHRcbiAgMzA6XHRcdHJldHVybiAwO1xuICAzMTpcdH1cbiAgMzI6XHRcbiAgMzM6XHR2b2lkIGF0aDEya193aWZpN19hcmNoX2RlaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuICAzNDpcdHtcbiAgMzU6XHRcdGF0aDEya193aWZpN19kcF9kZXZpY2VfZnJlZShhYi1cdTAwM2VkcCk7XG4gIDM2Olx0XHRhYi1cdTAwM2VkcCA9IE5VTEw7XG4gIDM3Olx0fVxuICAzODpcdFxuICAzOTpcdHN0YXRpYyBpbnQgYXRoMTJrX3dpZmk3X2luaXQodm9pZClcbiAgNDA6XHR7XG4gIDQxOlx0XHRhaGJfZXJyID0gYXRoMTJrX3dpZmk3X2FoYl9pbml0KCk7XG4gIDQyOlx0XHRpZiAoYWhiX2VycilcbiAgNDM6XHRcdFx0cHJfd2FybihcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBhdGgxMmsgV2ktRmkgNyBBSEIgZGV2aWNlOiAlZFxcblwmIzM0OyxcbiAgNDQ6XHRcdFx0XHRhaGJfZXJyKTtcbiAgNDU6XHRcbiAgNDY6XHRcdHBjaV9lcnIgPSBhdGgxMmtfd2lmaTdfcGNpX2luaXQoKTtcbiAgNDc6XHRcdGlmIChwY2lfZXJyKVxuICA0ODpcdFx0XHRwcl93YXJuKFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIGF0aDEyayBXaS1GaSA3IFBDSSBkZXZpY2U6ICVkXFxuXCYjMzQ7LFxuICA0OTpcdFx0XHRcdHBjaV9lcnIpO1xuICA1MDpcdFxuICA1MTpcdFx0LyogSWYgYm90aCBmYWlsZWQsIHJldHVybiBvbmUgb2YgdGhlIGZhaWx1cmVzIChhcmJpdHJhcnkpICovXG4gIDUyOlx0XHRyZXR1cm4gYWhiX2VyciBcdTAwMjZcdTAwMjYgcGNpX2VyciA/IGFoYl9lcnIgOiAwO1xuICA1MzpcdH1cbiAgNTQ6XHRcbiAgNTU6XHRzdGF0aWMgdm9pZCBhdGgxMmtfd2lmaTdfZXhpdCh2b2lkKVxuICA1NjpcdHtcbiAgNTc6XHRcdGlmICghcGNpX2VycilcbiAgNTg6XHRcdFx0YXRoMTJrX3dpZmk3X3BjaV9leGl0KCk7XG4gIDU5Olx0XG4gIDYwOlx0XHRpZiAoIWFoYl9lcnIpXG4gIDYxOlx0XHRcdGF0aDEya193aWZpN19haGJfZXhpdCgpO1xuICA2MjpcdH1cbiAgNjM6XHRcbiAgNjQ6XHRtb2R1bGVfaW5pdChhdGgxMmtfd2lmaTdfaW5pdCk7XG4gIDY1Olx0bW9kdWxlX2V4aXQoYXRoMTJrX3dpZmk3X2V4aXQpO1xuICA2NjpcdFxuICA2NzpcdE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtEcml2ZXIgc3VwcG9ydCBmb3IgUXVhbGNvbW0gVGVjaG5vbG9naWVzIDgwMi4xMWJlIFdMQU4gZGV2aWNlc1wmIzM0Oyk7XG4gIDY4Olx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7RHVhbCBCU0QvR1BMXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzM2CgkJCQkJCQlvdXRwdXQ6IDEyNQoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFZpcnR1YWxpemF0aW9uIENoYWxsZW5nZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgaW50byB0aGlzIGFuZCBJJiMzOTt2ZSBnb3QgYSBwcmV0dHkgZ29vZCBncmFzcCBvbiB3aGF0JiMzOTtzIGhhcHBlbmluZy4gTXkgbWFpbiBjb25jZXJuIGlzIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIHNldHVwIGlzIHJlZ2lzdGVyaW5nIGJvdGggQUhCIGFuZCBQQ0kgZGV2aWNlcy4gUmlnaHQgYXdheSwgQUhCLCB0aGUgQWR2YW5jZWQgSGlnaC1wZXJmb3JtYW5jZSBCdXMsIHNob3V0cyAmIzM0O1N5c3RlbSBvbiBhIENoaXAgKFNvQykmIzM0OyBhdCBtZSDigJMgdGhpbmsgQVJNIGNvcmVzLCB0aGUgd29ya3MuIFRoaXMgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIGFyY2hpdGVjdHVyZS4KClRoZSBraWNrZXI/IEl0JiMzOTtzIGxvb2tpbmcgZm9yIFF1YWxjb21tIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgV2ktRmkgNywgYW5kIHRoYXQmIzM5O3MgdGhlIHJ1Yi4gU3RhbmRhcmQgUUVNVSwgdGhlIHZpcnR1YWxpemF0aW9uIHRvb2wgd2UmIzM5O3JlIHVzaW5nLCBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoYXQgbGV2ZWwgb2YgZGV0YWlsLCBlc3BlY2lhbGx5IHRoZSBzcGVjaWZpY3Mgb2YgUXVhbGNvbW0mIzM5O3MgcHJvcHJpZXRhcnkgc2lsaWNvbi4gVGhlcmVmb3JlLCB0aGUgZXNzZW50aWFsIGRhdGEgcGF0aCwgc3BlY2lmaWNhbGx5IHRoZSB0cmFuc21pdCAoVFgpIHBhdGgsIGlzIHNpbXBseSB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBJdCBpcyB0b28gc3BlY2lmaWMuCgpHaXZlbiB0aGlzIGluaGVyZW50IGxpbWl0YXRpb24sIGF0dGVtcHRpbmcgYW55IGZ1cnRoZXIgZnV6emluZyBlZmZvcnRzIGhlcmUgd291bGQgYmUgZnV0aWxlLiBJdCYjMzk7cyB0aW1lIHRvIG1hcmsgdGhpcyBhcyBhIGRlYWQgZW5kLCB1bmZvcnR1bmF0ZWx5LiBTbywgSSB3aWxsIGJlIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRpbWUgdG8gbW92ZSBvbiBhbmQgZmluZCBhIG1vcmUgZnJ1aXRmdWwgYXZlbnVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkYXRhIHRyYW5zbWl0IHBhdGggKGRwX3R4KSBvZiB0aGUgYXRoMTJrIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIGZvciBRdWFsY29tbSBXaS1GaSA3IFBDSWUvQUhCIGRldmljZXMuIFNpbmNlIHRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIHRoZSBkZXZpY2UgY2Fubm90IGJlIHN1Y2Nlc3NmdWxseSBwcm9iZWQsIGZpcm13YXJlIGNhbm5vdCBiZSBsb2FkZWQsIGFuZCB0aGUgbmV0d29yayBpbnRlcmZhY2UgY2Fubm90IGJlIGJyb3VnaHQgdXAgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgdHJhbnNtaXQgcGF0aCBpcyB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkYXRhIHRyYW5zbWl0IHBhdGggKGRwX3R4KSBvZiB0aGUgYXRoMTJrIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIGZvciBRdWFsY29tbSBXaS1GaSA3IFBDSWUvQUhCIGRldmljZXMuIFNpbmNlIHRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIHRoZSBkZXZpY2UgY2Fubm90IGJlIHN1Y2Nlc3NmdWxseSBwcm9iZWQsIGZpcm13YXJlIGNhbm5vdCBiZSBsb2FkZWQsIGFuZCB0aGUgbmV0d29yayBpbnRlcmZhY2UgY2Fubm90IGJlIGJyb3VnaHQgdXAgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgdHJhbnNtaXQgcGF0aCBpcyB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjo0NDozMi4xMDEzMDY2NTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODE2NzY3Mjg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRhdGEgdHJhbnNtaXQgcGF0aCAoZHBfdHgpIG9mIHRoZSBhdGgxMmsgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgZm9yIFF1YWxjb21tIFdpLUZpIDcgUENJZS9BSEIgZGV2aWNlcy4gU2luY2UgdGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgdGhlIGRldmljZSBjYW5ub3QgYmUgc3VjY2Vzc2Z1bGx5IHByb2JlZCwgZmlybXdhcmUgY2Fubm90IGJlIGxvYWRlZCwgYW5kIHRoZSBuZXR3b3JrIGludGVyZmFjZSBjYW5ub3QgYmUgYnJvdWdodCB1cCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCB0cmFuc21pdCBwYXRoIGlzIHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6NDQ6MzIuMTAxMzEzODU3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTE1MjE3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjYjI4NTFhZTg2MjdmYzIyMzA1ZGEzZDA3YzdhNWVhNzM2YWQzZTU5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMxIDAyOjQ0OjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguY1xcbmluZGV4IGMxMGRhNjE5NWM5YzMuLjk2NDRmOWVmMmM3NDkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jXFxuQEAgLTgyLDYgKzgyLDUyIEBAIGVudW0gaGFsX2VuY3J5cHRfdHlwZSBhdGgxMmtfZHBfdHhfZ2V0X2VuY3J5cHRfdHlwZSh1MzIgY2lwaGVyKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0woYXRoMTJrX2RwX3R4X2dldF9lbmNyeXB0X3R5cGUpO1xcbiBcXG4rdTggYXRoMTJrX2RwX3R4X2NyeXB0b19pdl9sZW4oZW51bSBoYWxfZW5jcnlwdF90eXBlIGVuY190eXBlKVxcbit7XFxuK1xcdHN3aXRjaCAoZW5jX3R5cGUpIHtcXG4rXFx0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX1RLSVBfTk9fTUlDOlxcbitcXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfVEtJUF9NSUM6XFxuK1xcdFxcdHJldHVybiBJRUVFODAyMTFfVEtJUF9JVl9MRU47XFxuK1xcdGNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9DQ01QXzEyODpcXG4rXFx0XFx0cmV0dXJuIElFRUU4MDIxMV9DQ01QX0hEUl9MRU47XFxuK1xcdGNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9DQ01QXzI1NjpcXG4rXFx0XFx0cmV0dXJuIElFRUU4MDIxMV9DQ01QXzI1Nl9IRFJfTEVOO1xcbitcXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfR0NNUF8xMjg6XFxuK1xcdGNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9BRVNfR0NNUF8yNTY6XFxuK1xcdFxcdHJldHVybiBJRUVFODAyMTFfR0NNUF9IRFJfTEVOO1xcbitcXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfV0VQXzQwOlxcbitcXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfV0VQXzEwNDpcXG4rXFx0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX1dFUF8xMjg6XFxuK1xcdFxcdHJldHVybiBJRUVFODAyMTFfV0VQX0lWX0xFTjtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rfVxcbitFWFBPUlRfU1lNQk9MKGF0aDEya19kcF90eF9jcnlwdG9faXZfbGVuKTtcXG4rXFxuK3U4IGF0aDEya19kcF90eF9jcnlwdG9faWN2X2xlbihlbnVtIGhhbF9lbmNyeXB0X3R5cGUgZW5jX3R5cGUpXFxuK3tcXG4rXFx0c3dpdGNoIChlbmNfdHlwZSkge1xcbitcXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfQ0NNUF8xMjg6XFxuK1xcdFxcdHJldHVybiBJRUVFODAyMTFfQ0NNUF9NSUNfTEVOO1xcbitcXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfQ0NNUF8yNTY6XFxuK1xcdFxcdHJldHVybiBJRUVFODAyMTFfQ0NNUF8yNTZfTUlDX0xFTjtcXG4rXFx0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX0dDTVBfMTI4OlxcbitcXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfQUVTX0dDTVBfMjU2OlxcbitcXHRcXHRyZXR1cm4gSUVFRTgwMjExX0dDTVBfTUlDX0xFTjtcXG4rXFx0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX1RLSVBfTk9fTUlDOlxcbitcXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfVEtJUF9NSUM6XFxuK1xcdFxcdHJldHVybiBJRUVFODAyMTFfVEtJUF9JQ1ZfTEVOO1xcbitcXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfV0VQXzQwOlxcbitcXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfV0VQXzEwNDpcXG4rXFx0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX1dFUF8xMjg6XFxuK1xcdFxcdHJldHVybiBJRUVFODAyMTFfV0VQX0lDVl9MRU47XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK31cXG4rRVhQT1JUX1NZTUJPTChhdGgxMmtfZHBfdHhfY3J5cHRvX2ljdl9sZW4pO1xcbitcXG4gdm9pZCBhdGgxMmtfZHBfdHhfcmVsZWFzZV90eGJ1ZihzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IGF0aDEya190eF9kZXNjX2luZm8gKnR4X2Rlc2MsXFxuIFxcdFxcdFxcdFxcdHU4IHBvb2xfaWQpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguaFxcbmluZGV4IDdjZWYyMDU0MDE3OWYuLjFhZjc5YWYyYWRhMjYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5oXFxuQEAgLTE5LDYgKzE5LDggQEAgZW51bSBoYWxfdGNsX2VuY2FwX3R5cGVcXG4gYXRoMTJrX2RwX3R4X2dldF9lbmNhcF90eXBlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHN0cnVjdCBza19idWZmICpza2IpO1xcbiB2b2lkIGF0aDEya19kcF90eF9lbmNhcF9ud2lmaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gdTggYXRoMTJrX2RwX3R4X2dldF90aWQoc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuK3U4IGF0aDEya19kcF90eF9jcnlwdG9faXZfbGVuKGVudW0gaGFsX2VuY3J5cHRfdHlwZSBlbmNfdHlwZSk7XFxuK3U4IGF0aDEya19kcF90eF9jcnlwdG9faWN2X2xlbihlbnVtIGhhbF9lbmNyeXB0X3R5cGUgZW5jX3R5cGUpO1xcbiB2b2lkICphdGgxMmtfZHBfbWV0YWRhdGFfYWxpZ25fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHU4IHRhaWxfbGVuKTtcXG4gaW50IGF0aDEya19kcF90eF9hbGlnbl9wYXlsb2FkKHN0cnVjdCBhdGgxMmtfZHAgKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpO1xcbiB2b2lkIGF0aDEya19kcF90eF9yZWxlYXNlX3R4YnVmKHN0cnVjdCBhdGgxMmtfZHAgKmRwLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmNcXG5pbmRleCBkMjc0OWRlNDQ1NTM0Li41ODdkNThlZWNjZmE1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguY1xcbkBAIC0xMyw2ICsxMyw0OSBAQFxcbiAjaW5jbHVkZSBcXFwiaGFsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJoYWxfdHguaFxcXCJcXG4gXFxuKy8qXFxuKyAqIENvbnZlcnQgYW4gZW5jcnlwdGVkIEVBUE9MIGZyYW1lIGZyb20gbmF0aXZlLVdpRmkgZm9ybWF0IHRvXFxuKyAqIHRoZSBsYXlvdXQgZXhwZWN0ZWQgYnkgdGhlIGZpcm13YXJlIFJBVyBlbmNyeXB0IHBpcGVsaW5lOlxcbisgKlxcbisgKiAgIFs4MDIuMTEgaGRyXVtJViAoemVyb2VkKV1bTExDL1NOQVBdW0VBUE9MIHBheWxvYWRdW0lDViAoemVyb2VkKV1cXG4rICpcXG4rICogbWFjODAyMTEgZGVsaXZlcnMgdGhlIGZyYW1lIGFzIFs4MDIuMTEgaGRyXVtMTEMvU05BUF1bRUFQT0wgcGF5bG9hZF0uXFxuKyAqIFRoZSBNQUMgaGVhZGVyIGxlbmd0aCBpcyByZWFkIGZyb20gdGhlIHVubW9kaWZpZWQgc2tiIGFuZCBpcyBzYWZlIGJlY2F1c2VcXG4rICogaWVlZTgwMjExX2hkcmxlbigpIG9ubHkgaW5zcGVjdHMgdGhlIDItYnl0ZSBmcmFtZV9jb250cm9sIGZpZWxkLlxcbisgKiBwc2tiX2V4cGFuZF9oZWFkKCkgaXMgdXNlZCB0byBncm93IGJvdGggaGVhZCAoZm9yIHRoZSBJVikgYW5kIHRhaWxcXG4rICogKGZvciB0aGUgSUNWKSBpbiBhIHNpbmdsZSBjYWxsIGFuZCBhbGxvY2F0aW9uLlxcbisgKi9cXG4rc3RhdGljIGludFxcbithdGgxMmtfd2lmaTdfZHBfdHhfZW5jYXBfZWFwb2woc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBoYWxfdHhfaW5mbyAqdGksXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9jYiAqc2tiX2NiKVxcbit7XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItXFx1MDAzZWRhdGE7XFxuK1xcdGVudW0gaGFsX2VuY3J5cHRfdHlwZSBlbmNfdHlwZSA9XFxuK1xcdFxcdFxcdFxcdGF0aDEya19kcF90eF9nZXRfZW5jcnlwdF90eXBlKHNrYl9jYi1cXHUwMDNlY2lwaGVyKTtcXG4rXFx0dTE2IG1hY19oZHJfbGVuID0gaWVlZTgwMjExX2hkcmxlbihoZHItXFx1MDAzZWZyYW1lX2NvbnRyb2wpO1xcbitcXHR1OCBpdl9sZW4gPSBhdGgxMmtfZHBfdHhfY3J5cHRvX2l2X2xlbihlbmNfdHlwZSk7XFxuK1xcdHU4IGljdl9sZW4gPSBhdGgxMmtfZHBfdHhfY3J5cHRvX2ljdl9sZW4oZW5jX3R5cGUpO1xcbitcXG4rXFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCBpdl9sZW4sIGljdl9sZW4sIEdGUF9BVE9NSUMpKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGlmIChpdl9sZW4pIHtcXG4rXFx0XFx0c2tiX3B1c2goc2tiLCBpdl9sZW4pO1xcbitcXHRcXHRtZW1tb3ZlKHNrYi1cXHUwMDNlZGF0YSwgc2tiLVxcdTAwM2VkYXRhICsgaXZfbGVuLCBtYWNfaGRyX2xlbik7XFxuK1xcdFxcdG1lbXNldChza2ItXFx1MDAzZWRhdGEgKyBtYWNfaGRyX2xlbiwgMCwgaXZfbGVuKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGljdl9sZW4pXFxuK1xcdFxcdG1lbXNldChza2JfcHV0KHNrYiwgaWN2X2xlbiksIDAsIGljdl9sZW4pO1xcbitcXG4rXFx0dGktXFx1MDAzZWZsYWdzMCB8PSB1MzJfZW5jb2RlX2JpdHMoMSwgSEFMX1RDTF9EQVRBX0NNRF9JTkZPMl9UT19GVyk7XFxuK1xcdHRpLVxcdTAwM2VlbmNhcF90eXBlID0gSEFMX1RDTF9FTkNBUF9UWVBFX1JBVztcXG4rXFx0dGktXFx1MDAzZWVuY3J5cHRfdHlwZSA9IGVuY190eXBlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkXFxuIGF0aDEya193aWZpN19oYWxfdHhfY21kX2V4dF9kZXNjX3NldHVwKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaGFsX3R4X21zZHVfZXh0X2Rlc2MgKnRjbF9leHRfY21kLFxcbkBAIC05MSw2ICsxMzQsNyBAQCBpbnQgYXRoMTJrX3dpZmk3X2RwX3R4KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYVxcbiBcXHR1MzIgaW92YV9tYXNrID0gZHAtXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlaW92YV9tYXNrO1xcbiBcXHRib29sIGlzX2RpZmZfZW5jYXAgPSBmYWxzZTtcXG4gXFx0Ym9vbCBpc19udWxsX2ZyYW1lID0gZmFsc2U7XFxuK1xcdGJvb2wgZWFwb2xfZW5jYXBfZG9uZSA9IGZhbHNlO1xcbiBcXG4gXFx0aWYgKHRlc3RfYml0KEFUSDEyS19GTEFHX0NSQVNIX0ZMVVNILCBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncykpXFxuIFxcdFxcdHJldHVybiAtRVNIVVRET1dOO1xcbkBAIC0yMTEsOSArMjU1LDI3IEBAIGludCBhdGgxMmtfd2lmaTdfZHBfdHgoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LCBzdHJ1Y3QgYXRoMTJrX2xpbmtfdmlmICphXFxuIFxcdGNhc2UgSEFMX1RDTF9FTkNBUF9UWVBFX05BVElWRV9XSUZJOlxcbiBcXHRcXHRpc19udWxsX2ZyYW1lID0gaWVlZTgwMjExX2lzX251bGxmdW5jKGhkci1cXHUwMDNlZnJhbWVfY29udHJvbCk7XFxuIFxcdFxcdGlmIChhaHZpZi1cXHUwMDNldmlmLVxcdTAwM2VvZmZsb2FkX2ZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX09GRkxPQURfRU5DQVBfRU5BQkxFRCkge1xcbi1cXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9QQUUpIHx8IGlzX251bGxfZnJhbWUpXFxuK1xcdFxcdFxcdGlmICgoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9QQUUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAgIShza2JfY2ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgQVRIMTJLX1NLQl9DSVBIRVJfU0VUKSkgfHwgaXNfbnVsbF9mcmFtZSlcXG4gXFx0XFx0XFx0XFx0aXNfZGlmZl9lbmNhcCA9IHRydWU7XFxuIFxcbitcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9QQUUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAoc2tiX2NiLVxcdTAwM2VmbGFncyBcXHUwMDI2IEFUSDEyS19TS0JfQ0lQSEVSX1NFVCkpIHtcXG4rXFx0XFx0XFx0XFx0aWYgKCFlYXBvbF9lbmNhcF9kb25lKSB7XFxuK1xcdFxcdFxcdFxcdFxcdHJldCA9IGF0aDEya193aWZpN19kcF90eF9lbmNhcF9lYXBvbChza2IsIFxcdTAwMjZ0aSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBza2JfY2IpO1xcbitcXHRcXHRcXHRcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIGZhaWxfcmVtb3ZlX3R4X2J1ZjtcXG4rXFx0XFx0XFx0XFx0XFx0aGRyID0gKHZvaWQgKilza2ItXFx1MDAzZWRhdGE7XFxuK1xcdFxcdFxcdFxcdFxcdGVhcG9sX2VuY2FwX2RvbmUgPSB0cnVlO1xcbitcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHRcXHR0aS5mbGFnczAgfD0gdTMyX2VuY29kZV9iaXRzKDEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdEhBTF9UQ0xfREFUQV9DTURfSU5GTzJfVE9fRlcpO1xcbitcXHRcXHRcXHRcXHRcXHR0aS5lbmNhcF90eXBlID0gSEFMX1RDTF9FTkNBUF9UWVBFX1JBVztcXG4rXFx0XFx0XFx0XFx0XFx0dGkuZW5jcnlwdF90eXBlID1cXG4rXFx0XFx0XFx0XFx0XFx0XFx0YXRoMTJrX2RwX3R4X2dldF9lbmNyeXB0X3R5cGUoc2tiX2NiLVxcdTAwM2VjaXBoZXIpO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0LyogRmlybXdhcmUgZXhwZWN0cyBtc2R1IGV4dCBkZXNjcmlwdG9yIGZvciBud2lmaS9yYXcgcGFja2V0c1xcbiBcXHRcXHRcXHQgKiByZWNlaXZlZCBpbiBFVEggbW9kZS4gV2l0aG91dCB0aGlzLCBvYnNlcnZlZCB0eCBmYWlsIGZvclxcbiBcXHRcXHRcXHQgKiBNdWx0aWNhc3QgcGFja2V0cyBpbiBFVEggbW9kZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6NDQ6MzIuNTkzODQyNzM5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Mjc2NzUxMjcyMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkYXRhIHRyYW5zbWl0IHBhdGggKGRwX3R4KSBvZiB0aGUgYXRoMTJrIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIGZvciBRdWFsY29tbSBXaS1GaSA3IFBDSWUvQUhCIGRldmljZXMuIFNpbmNlIHRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIHRoZSBkZXZpY2UgY2Fubm90IGJlIHN1Y2Nlc3NmdWxseSBwcm9iZWQsIGZpcm13YXJlIGNhbm5vdCBiZSBsb2FkZWQsIGFuZCB0aGUgbmV0d29yayBpbnRlcmZhY2UgY2Fubm90IGJlIGJyb3VnaHQgdXAgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgdHJhbnNtaXQgcGF0aCBpcyB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNiMjg1MWFlODYyN2ZjMjIzMDVkYTNkMDdjN2E1ZWE3MzZhZDNlNTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAwMjo0NDozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguY1xuaW5kZXggYzEwZGE2MTk1YzljMy4uOTY0NGY5ZWYyYzc0OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jXG5AQCAtODIsNiArODIsNTIgQEAgZW51bSBoYWxfZW5jcnlwdF90eXBlIGF0aDEya19kcF90eF9nZXRfZW5jcnlwdF90eXBlKHUzMiBjaXBoZXIpXG4gfVxuIEVYUE9SVF9TWU1CT0woYXRoMTJrX2RwX3R4X2dldF9lbmNyeXB0X3R5cGUpO1xuIFxuK3U4IGF0aDEya19kcF90eF9jcnlwdG9faXZfbGVuKGVudW0gaGFsX2VuY3J5cHRfdHlwZSBlbmNfdHlwZSlcbit7XG4rXHRzd2l0Y2ggKGVuY190eXBlKSB7XG4rXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfVEtJUF9OT19NSUM6XG4rXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfVEtJUF9NSUM6XG4rXHRcdHJldHVybiBJRUVFODAyMTFfVEtJUF9JVl9MRU47XG4rXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfQ0NNUF8xMjg6XG4rXHRcdHJldHVybiBJRUVFODAyMTFfQ0NNUF9IRFJfTEVOO1xuK1x0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX0NDTVBfMjU2OlxuK1x0XHRyZXR1cm4gSUVFRTgwMjExX0NDTVBfMjU2X0hEUl9MRU47XG4rXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfR0NNUF8xMjg6XG4rXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfQUVTX0dDTVBfMjU2OlxuK1x0XHRyZXR1cm4gSUVFRTgwMjExX0dDTVBfSERSX0xFTjtcbitcdGNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9XRVBfNDA6XG4rXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfV0VQXzEwNDpcbitcdGNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9XRVBfMTI4OlxuK1x0XHRyZXR1cm4gSUVFRTgwMjExX1dFUF9JVl9MRU47XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gMDtcbitcdH1cbit9XG4rRVhQT1JUX1NZTUJPTChhdGgxMmtfZHBfdHhfY3J5cHRvX2l2X2xlbik7XG4rXG4rdTggYXRoMTJrX2RwX3R4X2NyeXB0b19pY3ZfbGVuKGVudW0gaGFsX2VuY3J5cHRfdHlwZSBlbmNfdHlwZSlcbit7XG4rXHRzd2l0Y2ggKGVuY190eXBlKSB7XG4rXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfQ0NNUF8xMjg6XG4rXHRcdHJldHVybiBJRUVFODAyMTFfQ0NNUF9NSUNfTEVOO1xuK1x0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX0NDTVBfMjU2OlxuK1x0XHRyZXR1cm4gSUVFRTgwMjExX0NDTVBfMjU2X01JQ19MRU47XG4rXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfR0NNUF8xMjg6XG4rXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfQUVTX0dDTVBfMjU2OlxuK1x0XHRyZXR1cm4gSUVFRTgwMjExX0dDTVBfTUlDX0xFTjtcbitcdGNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9US0lQX05PX01JQzpcbitcdGNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9US0lQX01JQzpcbitcdFx0cmV0dXJuIElFRUU4MDIxMV9US0lQX0lDVl9MRU47XG4rXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfV0VQXzQwOlxuK1x0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX1dFUF8xMDQ6XG4rXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfV0VQXzEyODpcbitcdFx0cmV0dXJuIElFRUU4MDIxMV9XRVBfSUNWX0xFTjtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK31cbitFWFBPUlRfU1lNQk9MKGF0aDEya19kcF90eF9jcnlwdG9faWN2X2xlbik7XG4rXG4gdm9pZCBhdGgxMmtfZHBfdHhfcmVsZWFzZV90eGJ1ZihzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcbiBcdFx0XHRcdHN0cnVjdCBhdGgxMmtfdHhfZGVzY19pbmZvICp0eF9kZXNjLFxuIFx0XHRcdFx0dTggcG9vbF9pZClcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3R4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3R4LmhcbmluZGV4IDdjZWYyMDU0MDE3OWYuLjFhZjc5YWYyYWRhMjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3R4LmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguaFxuQEAgLTE5LDYgKzE5LDggQEAgZW51bSBoYWxfdGNsX2VuY2FwX3R5cGVcbiBhdGgxMmtfZHBfdHhfZ2V0X2VuY2FwX3R5cGUoc3RydWN0IGF0aDEya19iYXNlICphYiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gdm9pZCBhdGgxMmtfZHBfdHhfZW5jYXBfbndpZmkoc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gdTggYXRoMTJrX2RwX3R4X2dldF90aWQoc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4rdTggYXRoMTJrX2RwX3R4X2NyeXB0b19pdl9sZW4oZW51bSBoYWxfZW5jcnlwdF90eXBlIGVuY190eXBlKTtcbit1OCBhdGgxMmtfZHBfdHhfY3J5cHRvX2ljdl9sZW4oZW51bSBoYWxfZW5jcnlwdF90eXBlIGVuY190eXBlKTtcbiB2b2lkICphdGgxMmtfZHBfbWV0YWRhdGFfYWxpZ25fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHU4IHRhaWxfbGVuKTtcbiBpbnQgYXRoMTJrX2RwX3R4X2FsaWduX3BheWxvYWQoc3RydWN0IGF0aDEya19kcCAqZHAsIHN0cnVjdCBza19idWZmICoqcHNrYik7XG4gdm9pZCBhdGgxMmtfZHBfdHhfcmVsZWFzZV90eGJ1ZihzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmNcbmluZGV4IGQyNzQ5ZGU0NDU1MzQuLjU4N2Q1OGVlY2NmYTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguY1xuQEAgLTEzLDYgKzEzLDQ5IEBAXG4gI2luY2x1ZGUgXCJoYWwuaFwiXG4gI2luY2x1ZGUgXCJoYWxfdHguaFwiXG4gXG4rLypcbisgKiBDb252ZXJ0IGFuIGVuY3J5cHRlZCBFQVBPTCBmcmFtZSBmcm9tIG5hdGl2ZS1XaUZpIGZvcm1hdCB0b1xuKyAqIHRoZSBsYXlvdXQgZXhwZWN0ZWQgYnkgdGhlIGZpcm13YXJlIFJBVyBlbmNyeXB0IHBpcGVsaW5lOlxuKyAqXG4rICogICBbODAyLjExIGhkcl1bSVYgKHplcm9lZCldW0xMQy9TTkFQXVtFQVBPTCBwYXlsb2FkXVtJQ1YgKHplcm9lZCldXG4rICpcbisgKiBtYWM4MDIxMSBkZWxpdmVycyB0aGUgZnJhbWUgYXMgWzgwMi4xMSBoZHJdW0xMQy9TTkFQXVtFQVBPTCBwYXlsb2FkXS5cbisgKiBUaGUgTUFDIGhlYWRlciBsZW5ndGggaXMgcmVhZCBmcm9tIHRoZSB1bm1vZGlmaWVkIHNrYiBhbmQgaXMgc2FmZSBiZWNhdXNlXG4rICogaWVlZTgwMjExX2hkcmxlbigpIG9ubHkgaW5zcGVjdHMgdGhlIDItYnl0ZSBmcmFtZV9jb250cm9sIGZpZWxkLlxuKyAqIHBza2JfZXhwYW5kX2hlYWQoKSBpcyB1c2VkIHRvIGdyb3cgYm90aCBoZWFkIChmb3IgdGhlIElWKSBhbmQgdGFpbFxuKyAqIChmb3IgdGhlIElDVikgaW4gYSBzaW5nbGUgY2FsbCBhbmQgYWxsb2NhdGlvbi5cbisgKi9cbitzdGF0aWMgaW50XG4rYXRoMTJrX3dpZmk3X2RwX3R4X2VuY2FwX2VhcG9sKHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBoYWxfdHhfaW5mbyAqdGksXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBhdGgxMmtfc2tiX2NiICpza2JfY2IpXG4re1xuK1x0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi1cdTAwM2VkYXRhO1xuK1x0ZW51bSBoYWxfZW5jcnlwdF90eXBlIGVuY190eXBlID1cbitcdFx0XHRcdGF0aDEya19kcF90eF9nZXRfZW5jcnlwdF90eXBlKHNrYl9jYi1cdTAwM2VjaXBoZXIpO1xuK1x0dTE2IG1hY19oZHJfbGVuID0gaWVlZTgwMjExX2hkcmxlbihoZHItXHUwMDNlZnJhbWVfY29udHJvbCk7XG4rXHR1OCBpdl9sZW4gPSBhdGgxMmtfZHBfdHhfY3J5cHRvX2l2X2xlbihlbmNfdHlwZSk7XG4rXHR1OCBpY3ZfbGVuID0gYXRoMTJrX2RwX3R4X2NyeXB0b19pY3ZfbGVuKGVuY190eXBlKTtcbitcbitcdGlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgaXZfbGVuLCBpY3ZfbGVuLCBHRlBfQVRPTUlDKSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRpZiAoaXZfbGVuKSB7XG4rXHRcdHNrYl9wdXNoKHNrYiwgaXZfbGVuKTtcbitcdFx0bWVtbW92ZShza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWRhdGEgKyBpdl9sZW4sIG1hY19oZHJfbGVuKTtcbitcdFx0bWVtc2V0KHNrYi1cdTAwM2VkYXRhICsgbWFjX2hkcl9sZW4sIDAsIGl2X2xlbik7XG4rXHR9XG4rXG4rXHRpZiAoaWN2X2xlbilcbitcdFx0bWVtc2V0KHNrYl9wdXQoc2tiLCBpY3ZfbGVuKSwgMCwgaWN2X2xlbik7XG4rXG4rXHR0aS1cdTAwM2VmbGFnczAgfD0gdTMyX2VuY29kZV9iaXRzKDEsIEhBTF9UQ0xfREFUQV9DTURfSU5GTzJfVE9fRlcpO1xuK1x0dGktXHUwMDNlZW5jYXBfdHlwZSA9IEhBTF9UQ0xfRU5DQVBfVFlQRV9SQVc7XG4rXHR0aS1cdTAwM2VlbmNyeXB0X3R5cGUgPSBlbmNfdHlwZTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgdm9pZFxuIGF0aDEya193aWZpN19oYWxfdHhfY21kX2V4dF9kZXNjX3NldHVwKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGhhbF90eF9tc2R1X2V4dF9kZXNjICp0Y2xfZXh0X2NtZCxcbkBAIC05MSw2ICsxMzQsNyBAQCBpbnQgYXRoMTJrX3dpZmk3X2RwX3R4KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYVxuIFx0dTMyIGlvdmFfbWFzayA9IGRwLVx1MDAzZWh3X3BhcmFtcy1cdTAwM2Vpb3ZhX21hc2s7XG4gXHRib29sIGlzX2RpZmZfZW5jYXAgPSBmYWxzZTtcbiBcdGJvb2wgaXNfbnVsbF9mcmFtZSA9IGZhbHNlO1xuK1x0Ym9vbCBlYXBvbF9lbmNhcF9kb25lID0gZmFsc2U7XG4gXG4gXHRpZiAodGVzdF9iaXQoQVRIMTJLX0ZMQUdfQ1JBU0hfRkxVU0gsIFx1MDAyNmFiLVx1MDAzZWRldl9mbGFncykpXG4gXHRcdHJldHVybiAtRVNIVVRET1dOO1xuQEAgLTIxMSw5ICsyNTUsMjcgQEAgaW50IGF0aDEya193aWZpN19kcF90eChzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsIHN0cnVjdCBhdGgxMmtfbGlua192aWYgKmFcbiBcdGNhc2UgSEFMX1RDTF9FTkNBUF9UWVBFX05BVElWRV9XSUZJOlxuIFx0XHRpc19udWxsX2ZyYW1lID0gaWVlZTgwMjExX2lzX251bGxmdW5jKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKTtcbiBcdFx0aWYgKGFodmlmLVx1MDAzZXZpZi1cdTAwM2VvZmZsb2FkX2ZsYWdzIFx1MDAyNiBJRUVFODAyMTFfT0ZGTE9BRF9FTkNBUF9FTkFCTEVEKSB7XG4tXHRcdFx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9QQUUpIHx8IGlzX251bGxfZnJhbWUpXG4rXHRcdFx0aWYgKChza2ItXHUwMDNlcHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfUEFFKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgICEoc2tiX2NiLVx1MDAzZWZsYWdzIFx1MDAyNiBBVEgxMktfU0tCX0NJUEhFUl9TRVQpKSB8fCBpc19udWxsX2ZyYW1lKVxuIFx0XHRcdFx0aXNfZGlmZl9lbmNhcCA9IHRydWU7XG4gXG4rXHRcdFx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9QQUUpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAoc2tiX2NiLVx1MDAzZWZsYWdzIFx1MDAyNiBBVEgxMktfU0tCX0NJUEhFUl9TRVQpKSB7XG4rXHRcdFx0XHRpZiAoIWVhcG9sX2VuY2FwX2RvbmUpIHtcbitcdFx0XHRcdFx0cmV0ID0gYXRoMTJrX3dpZmk3X2RwX3R4X2VuY2FwX2VhcG9sKHNrYiwgXHUwMDI2dGksXG4rXHRcdFx0XHRcdFx0XHRcdFx0ICAgICBza2JfY2IpO1xuK1x0XHRcdFx0XHRpZiAocmV0KVxuK1x0XHRcdFx0XHRcdGdvdG8gZmFpbF9yZW1vdmVfdHhfYnVmO1xuK1x0XHRcdFx0XHRoZHIgPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhO1xuK1x0XHRcdFx0XHRlYXBvbF9lbmNhcF9kb25lID0gdHJ1ZTtcbitcdFx0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRcdHRpLmZsYWdzMCB8PSB1MzJfZW5jb2RlX2JpdHMoMSxcbitcdFx0XHRcdFx0XHRcdEhBTF9UQ0xfREFUQV9DTURfSU5GTzJfVE9fRlcpO1xuK1x0XHRcdFx0XHR0aS5lbmNhcF90eXBlID0gSEFMX1RDTF9FTkNBUF9UWVBFX1JBVztcbitcdFx0XHRcdFx0dGkuZW5jcnlwdF90eXBlID1cbitcdFx0XHRcdFx0XHRhdGgxMmtfZHBfdHhfZ2V0X2VuY3J5cHRfdHlwZShza2JfY2ItXHUwMDNlY2lwaGVyKTtcbitcdFx0XHRcdH1cbitcdFx0XHR9XG4gXHRcdFx0LyogRmlybXdhcmUgZXhwZWN0cyBtc2R1IGV4dCBkZXNjcmlwdG9yIGZvciBud2lmaS9yYXcgcGFja2V0c1xuIFx0XHRcdCAqIHJlY2VpdmVkIGluIEVUSCBtb2RlLiBXaXRob3V0IHRoaXMsIG9ic2VydmVkIHR4IGZhaWwgZm9yXG4gXHRcdFx0ICogTXVsdGljYXN0IHBhY2tldHMgaW4gRVRIIG1vZGUuXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjo0NDozMi41OTM4NDUwODlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDk5OTk5NjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGFuIGF0aDEyayBQYXRjaCBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIGBhdGgxMmtgIGRyaXZlci4gSXQncyBtb2RpZnlpbmcgYGRwX3R4LmNgLCBgZHBfdHguaGAsIGFuZCBgd2lmaTcvZHBfdHguY2AgYW5kIHNlZW1zIHRvIGJlIGFkZGluZyBmdW5jdGlvbnMgdG8gaGFuZGxlIElWL0lDViBsZW5ndGhzIGZvciBkaWZmZXJlbnQgZW5jcnlwdGlvbiB0eXBlcywgYXMgd2VsbCBhcyBtb2RpZnlpbmcgYGF0aDEya193aWZpN19kcF90eGAgdG8gZGVhbCB3aXRoIGVuY3J5cHRlZCBFQVBPTCBmcmFtZXMuIEJhc2ljYWxseSwgaXQncyBwcmVwcGluZyBmb3IgdGhlIGZpcm13YXJlJ3MgUkFXIGVuY3J5cHQgcGlwZWxpbmUuIFRoZSBjb3JlIG9mIHRoaXMgd29yayBzZWVtcyB0byBiZSBzZXR0aW5nIHVwIElWIGFuZCBJQ1YuXG5cblRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGNhbiBJIGV2ZW4gdGVzdCB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IGBhdGgxMmtgIGlzIGEgZHJpdmVyIGZvciBRdWFsY29tbSBXaS1GaSA3ICg4MDIuMTFiZSkgUENJZSBkZXZpY2VzLiBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGF0IHNwZWNpZmljIGhhcmR3YXJlLCBhdCBsZWFzdCBub3QgdGhhdCBJJ20gYXdhcmUgb2YuIEFuZCB3aGlsZSBgbWFjODAyMTFfaHdzaW1gIHByb3ZpZGVzIGEgV2lGaSBlbXVsYXRpb24sIGBhdGgxMmtgIGlzIHRpZWQgdG8gdGhlIGhhcmR3YXJlLiBUaGF0IG1ha2VzIHRlc3RpbmcgdHJpY2t5LlxuXG5UaGUgbmV4dCB0aGluZyBJJ2QgbG9vayBhdCBpcyBpZiBpdCdzIHBvc3NpYmxlIHRvIGZ1enogYGF0aDEya2AuIFBDSSBkcml2ZXJzIGFyZSBub3RvcmlvdXNseSBkaWZmaWN1bHQgdG8gZnV6eiBiZWNhdXNlIHRoZXkgcmVxdWlyZSBhIHJlYWwgZGV2aWNlLiBJdCdzIHVzdWFsbHkgb25seSBwb3NzaWJsZSBpZiB0aGVyZSBpcyBhbiBlbXVsYXRvciBvciBmb3IgVVNCIGRldmljZXMgd2l0aCBlbXVsYXRvcnMsIG9yIGlmIGl0J3MgYSB2aXJ0dWFsIGRyaXZlci4gQmVjYXVzZSBpdCdzIGEgUENJIGRyaXZlciwgSSB3aWxsIG5lZWQgdG8gY2hlY2sgd2hldGhlciBJIGNhbiBldmVuIGdldCBpdCB0byBydW4gaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LiBJIHNob3VsZCBjaGVjayB0aGUgZmlsZXMgcmVsYXRlZCB0byBQQ0kgZnVuY3Rpb25hbGl0eSBzdWNoIGFzIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jYC5cblxuSSdsbCB1c2UgYGdyZXBwZXJgIHRvIHNlZSBpZiBgYXRoMTJrYCBpcyBpbmRlZWQgYSBQQ0kgZHJpdmVyLiBUaGF0IHdpbGwgdGVsbCBtZSB3aGVyZSB0byBnbyBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzEwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6NDQ6MzkuMDkzODQ3NTY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTIyMjUwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfcmVnaXN0ZXJfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xODExPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBfX21heWJlX3VudXNlZCBhdGgxMmtfcGNpX3BtX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgxNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4MTg6aW50IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKGNvbnN0IGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgxOS1cXHRcXHRcXHQgICAgICAgc3RydWN0IGF0aDEya19wY2lfZHJpdmVyICpkcml2ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4NDQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODQ1OlxcdHJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKHBjaV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTg0Ni19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODQ3OkVYUE9SVF9TWU1CT0woYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTg0OC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmg9MTc2PXZvaWQgYXRoMTJrX3BjaV9wb3dlcl9kb3duKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGJvb2wgaXNfc3VzcGVuZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaDoxNzc6aW50IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKGNvbnN0IGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmgtMTc4LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3BjaV9kcml2ZXIgKmRyaXZlcik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jPTE5Nz1pbnQgYXRoMTJrX3dpZmk3X3BjaV9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jLTIwMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jOjIwMTpcXHRyZXQgPSBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcihBVEgxMktfREVWSUNFX0ZBTUlMWV9XSUZJNyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jLTIwMi1cXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmF0aDEya193aWZpN19wY2lfZHJpdmVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6NDQ6MzkuMjEzMDc2NjMxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY2MDc0MzM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9ZmFsc2U6IGF0aDEyayBhbmQgdGhlIExpbWl0YXRpb25zIG9mIFZpcnR1YWxpemF0aW9uKipcblxuT2theSwgc28gdGhpcyBpcyBhIFBDSSBkcml2ZXIsIHNwZWNpZmljYWxseSBgYXRoMTJrYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyB0aGVyZSAqYW55KiB3YXkgdG8gcmVhY2ggdGhlIGBhdGgxMmtfd2lmaTdfZHBfdHhgIGZ1bmN0aW9uIHdpdGhvdXQgYWN0dWFsIGhhcmR3YXJlPyBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgUENJIGRyaXZlcnMgZm9yIHNwZWNpZmljIGhhcmR3YXJlLCBsaWtlIFF1YWxjb21tIFdpLUZpLCBhcmUgbm90b3Jpb3VzbHkgZGlmZmljdWx0IHRvIGZ1enogaW4gUUVNVSBiZWNhdXNlIHRoZSBoYXJkd2FyZSBpc24ndCBlbXVsYXRlZC5cblxuVGhlbiBJIHBhdXNlZCDigJMgd2FpdCwgZG9lc24ndCBzeXprYWxsZXIgaGF2ZSBzb21ldGhpbmcgbGlrZSBgc3l6X3BjaV9kZXZpY2VgPyBSaWdodCwgaXQgKmRvZXMqLCBidXQgaXQncyBwcmV0dHkgbGltaXRlZC4gVXN1YWxseSwgd2l0aCB0aG9zZSwgeW91J3JlIGp1c3QgdGVzdGluZyB0aGUgcHJvYmUgYW5kIGluaXQgZnVuY3Rpb25zIHVubGVzcyB0aGUgZHJpdmVyIGhhcyBiZWVuIHNwZWNpZmljYWxseSBjYXRlcmVkIHRvLiBBbmQgYGF0aDEya2AgaXMgYSAqY29tcGxleCogV2ktRmkgZHJpdmVyLiBJdCBuZWVkcyBmaXJtd2FyZSBsb2FkZWQsIERNQSByaW5ncyBzZXQgdXAsIGEgd2hvbGUgaG9zdCBvZiB0aGluZ3MuXG5cblNvLCB0aGUgdHJhbnNtaXQgcGF0aCwgYGF0aDEya193aWZpN19kcF90eGAsIGlzIHdoYXQgSSdtIGludGVyZXN0ZWQgaW4gaGVyZS4gVG8gZ2V0IHRoZXJlLCB0aGUgZGV2aWNlIG5lZWRzIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSwgZmlybXdhcmUgbmVlZHMgdG8gbG9hZCwgdGhlIE1BQyBuZWVkcyB0byBiZSByZWdpc3RlcmVkLCB0aGUgaW50ZXJmYWNlIG5lZWRzIHRvIGJlIGJyb3VnaHQgdXAsIGFuZCB0aGVuIHlvdSBuZWVkIHRvIGFjdHVhbGx5ICpzZW5kKiBwYWNrZXRzLlxuXG5XaXRob3V0IHJlYWwgaGFyZHdhcmUgb3IgYSB2ZXJ5IHNvcGhpc3RpY2F0ZWQgaGFyZHdhcmUgZW11bGF0b3IsIHRoZSBgYXRoMTJrYCBwcm9iZSBpcyBnb2luZyB0byBmYWlsIHNwZWN0YWN1bGFybHkuIFJlYWRpbmcgUENJIGNvbmZpZyBzcGFjZSwgbWFwcGluZyBCQVJzLCBjb21tdW5pY2F0aW5nIHdpdGggdGhlIGZpcm13YXJlIOKAkyBpdCdzIGFsbCBnb2luZyB0byBiZSBhIGJyaWNrIHdhbGwuIFRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IGBhdGgxMmtfd2lmaTdfZHBfdHhgIGlzIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cbk5vdywgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIHRoZXJlJ3MgYW55IHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgYGF0aDEya2AgdGhhdCBJIG1pZ2h0IGhhdmUgbWlzc2VkLiBObywgYG1hYzgwMjExX2h3c2ltYCBpcyBnZW5lcmljIG1hYzgwMjExLCBub3QgdGhpcyBzcGVjaWZpYyBkcml2ZXIuIEl0J3MgYSBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIuXG5cblRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBpbnZvbHZlcyBjb2RlIGluIFwidmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCJcblxuYGF0aDEya2AgKmlzKiBhIHZlbmRvci1zcGVjaWZpYyAoUXVhbGNvbW0pIFBDSWUgV2ktRmkgZHJpdmVyLiBJdCBuZWVkcyB0aG9zZSBwaHlzaWNhbCBjYXJkcy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gc2F5IGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5MZXQgbWUgcXVpY2tseSB2ZXJpZnkg4oCTIGlzIHRoaXMgKm9ubHkqIFBDST8gSSdtIHN1cmUgSSd2ZSBzZWVuIG1lbnRpb25zIG9mIEFIQiBzdXBwb3J0IGZvciBgYXRoMTJrYC4gTmVlZCB0byBjaGVjayBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuY2Agb3Igc29tZXRoaW5nIHNpbWlsYXIsIGp1c3QgaW4gY2FzZS4gQnV0IG15IHByaW1hcnkgYXNzZXNzbWVudCBzdGFuZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxOTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6NDQ6NDcuODczODIyMjk2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1OTU0OTE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jPTU1PXN0YXRpYyB2b2lkIGF0aDEya193aWZpN19leGl0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYy02My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYzo2NDptb2R1bGVfaW5pdChhdGgxMmtfd2lmaTdfaW5pdCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmMtNjUtbW9kdWxlX2V4aXQoYXRoMTJrX3dpZmk3X2V4aXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjo0NDo0OC4yMzMzNzgyNDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjk1NjAyNjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCBkaXZpbmcgaW50byB0aGUgY29kZTpcblxuKipEaXZpbmcgRGVlcCBpbnRvIHRoZSBBdGhlcm9zIFdpRmkgNyBEcml2ZXIqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBpbml0aWFsaXphdGlvbiBvZiB0aGlzIGBhdGgxMmtgIGRyaXZlciwgcGFydGljdWxhcmx5IGhvdyBpdCByZWdpc3RlcnMgaXRzIGtleSBjb21wb25lbnRzLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiB0aGUgYHdpZmk3YCBhc3BlY3RzLCB3aGljaCBsaWtlbHkgZW5jb21wYXNzIHRoZSBuZXcgZmVhdHVyZXMgYW5kIGNhcGFiaWxpdGllcyBpbnRyb2R1Y2VkIHdpdGggdGhlIG5ld2VyIHN0YW5kYXJkLiBUaW1lIHRvIGNyYWNrIG9wZW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jYCBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhlIHJlZ2lzdHJhdGlvbiBsZXZlbC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBlc3NlbnRpYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgdGhhdCBhcmUgZ2V0dGluZyBob29rZWQgaW50byB0aGUga2VybmVsJ3Mgd2lyZWxlc3Mgc3Vic3lzdGVtLiBXaGF0IGFyZSB0aGUga2V5IGRldmljZSBmZWF0dXJlcywgcHJvdG9jb2xzLCBhbmQgcmVndWxhdG9yeSBlbGVtZW50cyBiZWluZyBtYWRlIGF2YWlsYWJsZT8gSSBleHBlY3QgdG8gc2VlIHRoZSByZWdpc3RyYXRpb24gb2YgaGFyZHdhcmUgaW50ZXJmYWNlcywgbmV0ZGV2IG9wZXJhdGlvbnMsIGFuZCBwZXJoYXBzIHBvd2VyIG1hbmFnZW1lbnQgaGFuZGxlcnMuIFRoaXMgd2lsbCBwcm92aWRlIGEgY3J1Y2lhbCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgYHdpZmk3YCBzdXBwb3J0IGlzIGJha2VkIGludG8gdGhlIGNvcmUgZHJpdmVyIGFyY2hpdGVjdHVyZS4gSXQncyB0aW1lIHRvIGZpbmQgdGhlIGJyZWFkY3J1bWJzIGFuZCB0cmFjZSB0aGUgZHJpdmVyJ3MgZm9vdHByaW50IHdpdGhpbiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDY5LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6NDQ6NTEuOTI4OTgyOTk1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTYyMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIxIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxcbiAgIDQ6XFx0ICogQ29weXJpZ2h0IChjKSBRdWFsY29tbSBUZWNobm9sb2dpZXMsIEluYy4gYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMuXFxuICAgNTpcXHQgKi9cXG4gICA2OlxcdFxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgIDg6XFx0I2luY2x1ZGUgXFxcIi4uL2FoYi5oXFxcIlxcbiAgIDk6XFx0I2luY2x1ZGUgXFxcIi4uL3BjaS5oXFxcIlxcbiAgMTA6XFx0I2luY2x1ZGUgXFxcInBjaS5oXFxcIlxcbiAgMTE6XFx0I2luY2x1ZGUgXFxcImFoYi5oXFxcIlxcbiAgMTI6XFx0I2luY2x1ZGUgXFxcImNvcmUuaFxcXCJcXG4gIDEzOlxcdCNpbmNsdWRlIFxcXCJkcC5oXFxcIlxcbiAgMTQ6XFx0I2luY2x1ZGUgXFxcIi4uL2RlYnVnLmhcXFwiXFxuICAxNTpcXHRcXG4gIDE2OlxcdHN0YXRpYyBpbnQgYWhiX2VyciwgcGNpX2VycjtcXG4gIDE3OlxcdFxcbiAgMTg6XFx0aW50IGF0aDEya193aWZpN19hcmNoX2luaXQoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4gIDE5OlxcdHtcXG4gIDIwOlxcdFxcdHN0cnVjdCBhdGgxMmtfZHAgKmRwO1xcbiAgMjE6XFx0XFxuICAyMjpcXHRcXHRkcCA9IGF0aDEya193aWZpN19kcF9kZXZpY2VfYWxsb2MoYWIpO1xcbiAgMjM6XFx0XFx0aWYgKCFkcCkge1xcbiAgMjQ6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImRwIGFsbG9jIGZhaWxlZFxcXCIpO1xcbiAgMjU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuICAyNjpcXHRcXHR9XFxuICAyNzpcXHRcXG4gIDI4OlxcdFxcdGFiLVxcdTAwM2VkcCA9IGRwO1xcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHRyZXR1cm4gMDtcXG4gIDMxOlxcdH1cXG4gIDMyOlxcdFxcbiAgMzM6XFx0dm9pZCBhdGgxMmtfd2lmaTdfYXJjaF9kZWluaXQoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4gIDM0OlxcdHtcXG4gIDM1OlxcdFxcdGF0aDEya193aWZpN19kcF9kZXZpY2VfZnJlZShhYi1cXHUwMDNlZHApO1xcbiAgMzY6XFx0XFx0YWItXFx1MDAzZWRwID0gTlVMTDtcXG4gIDM3OlxcdH1cXG4gIDM4OlxcdFxcbiAgMzk6XFx0c3RhdGljIGludCBhdGgxMmtfd2lmaTdfaW5pdCh2b2lkKVxcbiAgNDA6XFx0e1xcbiAgNDE6XFx0XFx0YWhiX2VyciA9IGF0aDEya193aWZpN19haGJfaW5pdCgpO1xcbiAgNDI6XFx0XFx0aWYgKGFoYl9lcnIpXFxuICA0MzpcXHRcXHRcXHRwcl93YXJuKFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBhdGgxMmsgV2ktRmkgNyBBSEIgZGV2aWNlOiAlZFxcXFxuXFxcIixcXG4gIDQ0OlxcdFxcdFxcdFxcdGFoYl9lcnIpO1xcbiAgNDU6XFx0XFxuICA0NjpcXHRcXHRwY2lfZXJyID0gYXRoMTJrX3dpZmk3X3BjaV9pbml0KCk7XFxuICA0NzpcXHRcXHRpZiAocGNpX2VycilcXG4gIDQ4OlxcdFxcdFxcdHByX3dhcm4oXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIGF0aDEyayBXaS1GaSA3IFBDSSBkZXZpY2U6ICVkXFxcXG5cXFwiLFxcbiAgNDk6XFx0XFx0XFx0XFx0cGNpX2Vycik7XFxuICA1MDpcXHRcXG4gIDUxOlxcdFxcdC8qIElmIGJvdGggZmFpbGVkLCByZXR1cm4gb25lIG9mIHRoZSBmYWlsdXJlcyAoYXJiaXRyYXJ5KSAqL1xcbiAgNTI6XFx0XFx0cmV0dXJuIGFoYl9lcnIgXFx1MDAyNlxcdTAwMjYgcGNpX2VyciA/IGFoYl9lcnIgOiAwO1xcbiAgNTM6XFx0fVxcbiAgNTQ6XFx0XFxuICA1NTpcXHRzdGF0aWMgdm9pZCBhdGgxMmtfd2lmaTdfZXhpdCh2b2lkKVxcbiAgNTY6XFx0e1xcbiAgNTc6XFx0XFx0aWYgKCFwY2lfZXJyKVxcbiAgNTg6XFx0XFx0XFx0YXRoMTJrX3dpZmk3X3BjaV9leGl0KCk7XFxuICA1OTpcXHRcXG4gIDYwOlxcdFxcdGlmICghYWhiX2VycilcXG4gIDYxOlxcdFxcdFxcdGF0aDEya193aWZpN19haGJfZXhpdCgpO1xcbiAgNjI6XFx0fVxcbiAgNjM6XFx0XFxuICA2NDpcXHRtb2R1bGVfaW5pdChhdGgxMmtfd2lmaTdfaW5pdCk7XFxuICA2NTpcXHRtb2R1bGVfZXhpdChhdGgxMmtfd2lmaTdfZXhpdCk7XFxuICA2NjpcXHRcXG4gIDY3OlxcdE1PRFVMRV9ERVNDUklQVElPTihcXFwiRHJpdmVyIHN1cHBvcnQgZm9yIFF1YWxjb21tIFRlY2hub2xvZ2llcyA4MDIuMTFiZSBXTEFOIGRldmljZXNcXFwiKTtcXG4gIDY4OlxcdE1PRFVMRV9MSUNFTlNFKFxcXCJEdWFsIEJTRC9HUExcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6NDQ6NTEuOTI5MDgxMTE1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODMzOTgzOTMzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBWaXJ0dWFsaXphdGlvbiBDaGFsbGVuZ2UqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGxvb2tlZCBpbnRvIHRoaXMgYW5kIEkndmUgZ290IGEgcHJldHR5IGdvb2QgZ3Jhc3Agb24gd2hhdCdzIGhhcHBlbmluZy4gTXkgbWFpbiBjb25jZXJuIGlzIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIHNldHVwIGlzIHJlZ2lzdGVyaW5nIGJvdGggQUhCIGFuZCBQQ0kgZGV2aWNlcy4gUmlnaHQgYXdheSwgQUhCLCB0aGUgQWR2YW5jZWQgSGlnaC1wZXJmb3JtYW5jZSBCdXMsIHNob3V0cyBcIlN5c3RlbSBvbiBhIENoaXAgKFNvQylcIiBhdCBtZSDigJMgdGhpbmsgQVJNIGNvcmVzLCB0aGUgd29ya3MuIFRoaXMgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlLlxuXG5UaGUga2lja2VyPyBJdCdzIGxvb2tpbmcgZm9yIFF1YWxjb21tIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgV2ktRmkgNywgYW5kIHRoYXQncyB0aGUgcnViLiBTdGFuZGFyZCBRRU1VLCB0aGUgdmlydHVhbGl6YXRpb24gdG9vbCB3ZSdyZSB1c2luZywgZG9lc24ndCBlbXVsYXRlIHRoYXQgbGV2ZWwgb2YgZGV0YWlsLCBlc3BlY2lhbGx5IHRoZSBzcGVjaWZpY3Mgb2YgUXVhbGNvbW0ncyBwcm9wcmlldGFyeSBzaWxpY29uLiBUaGVyZWZvcmUsIHRoZSBlc3NlbnRpYWwgZGF0YSBwYXRoLCBzcGVjaWZpY2FsbHkgdGhlIHRyYW5zbWl0IChUWCkgcGF0aCwgaXMgc2ltcGx5IHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEl0IGlzIHRvbyBzcGVjaWZpYy5cblxuR2l2ZW4gdGhpcyBpbmhlcmVudCBsaW1pdGF0aW9uLCBhdHRlbXB0aW5nIGFueSBmdXJ0aGVyIGZ1enppbmcgZWZmb3J0cyBoZXJlIHdvdWxkIGJlIGZ1dGlsZS4gSXQncyB0aW1lIHRvIG1hcmsgdGhpcyBhcyBhIGRlYWQgZW5kLCB1bmZvcnR1bmF0ZWx5LiBTbywgSSB3aWxsIGJlIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRpbWUgdG8gbW92ZSBvbiBhbmQgZmluZCBhIG1vcmUgZnJ1aXRmdWwgYXZlbnVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzM2LCJPdXRwdXRUb2tlbnMiOjEyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6NDU6MDAuMjY4OTI1NjA4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRhdGEgdHJhbnNtaXQgcGF0aCAoZHBfdHgpIG9mIHRoZSBhdGgxMmsgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgZm9yIFF1YWxjb21tIFdpLUZpIDcgUENJZS9BSEIgZGV2aWNlcy4gU2luY2UgdGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgdGhlIGRldmljZSBjYW5ub3QgYmUgc3VjY2Vzc2Z1bGx5IHByb2JlZCwgZmlybXdhcmUgY2Fubm90IGJlIGxvYWRlZCwgYW5kIHRoZSBuZXR3b3JrIGludGVyZmFjZSBjYW5ub3QgYmUgYnJvdWdodCB1cCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCB0cmFuc21pdCBwYXRoIGlzIHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRhdGEgdHJhbnNtaXQgcGF0aCAoZHBfdHgpIG9mIHRoZSBhdGgxMmsgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgZm9yIFF1YWxjb21tIFdpLUZpIDcgUENJZS9BSEIgZGV2aWNlcy4gU2luY2UgdGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgdGhlIGRldmljZSBjYW5ub3QgYmUgc3VjY2Vzc2Z1bGx5IHByb2JlZCwgZmlybXdhcmUgY2Fubm90IGJlIGxvYWRlZCwgYW5kIHRoZSBuZXR3b3JrIGludGVyZmFjZSBjYW5ub3QgYmUgYnJvdWdodCB1cCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCB0cmFuc21pdCBwYXRoIGlzIHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowrhlbx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 02:20:11 +0000 UTC FinishedAt: 2026-07-31 02:45:01 +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+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkYXRhIHRyYW5zbWl0IHBhdGggKGRwX3R4KSBvZiB0aGUgYXRoMTJrIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIGZvciBRdWFsY29tbSBXaS1GaSA3IFBDSWUvQUhCIGRldmljZXMuIFNpbmNlIHRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIHRoZSBkZXZpY2UgY2Fubm90IGJlIHN1Y2Nlc3NmdWxseSBwcm9iZWQsIGZpcm13YXJlIGNhbm5vdCBiZSBsb2FkZWQsIGFuZCB0aGUgbmV0d29yayBpbnRlcmZhY2UgY2Fubm90IGJlIGJyb3VnaHQgdXAgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgdHJhbnNtaXQgcGF0aCBpcyB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjYjI4NTFhZTg2MjdmYzIyMzA1ZGEzZDA3YzdhNWVhNzM2YWQzZTU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDI6NDQ6MzEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jXG5pbmRleCBjMTBkYTYxOTVjOWMzLi45NjQ0ZjllZjJjNzQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3R4LmNcbkBAIC04Miw2ICYjNDM7ODIsNTIgQEAgZW51bSBoYWxfZW5jcnlwdF90eXBlIGF0aDEya19kcF90eF9nZXRfZW5jcnlwdF90eXBlKHUzMiBjaXBoZXIpXG4gfVxuIEVYUE9SVF9TWU1CT0woYXRoMTJrX2RwX3R4X2dldF9lbmNyeXB0X3R5cGUpO1xuIFxuJiM0Mzt1OCBhdGgxMmtfZHBfdHhfY3J5cHRvX2l2X2xlbihlbnVtIGhhbF9lbmNyeXB0X3R5cGUgZW5jX3R5cGUpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGVuY190eXBlKSB7XG4mIzQzO1x0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX1RLSVBfTk9fTUlDOlxuJiM0MztcdGNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9US0lQX01JQzpcbiYjNDM7XHRcdHJldHVybiBJRUVFODAyMTFfVEtJUF9JVl9MRU47XG4mIzQzO1x0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX0NDTVBfMTI4OlxuJiM0MztcdFx0cmV0dXJuIElFRUU4MDIxMV9DQ01QX0hEUl9MRU47XG4mIzQzO1x0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX0NDTVBfMjU2OlxuJiM0MztcdFx0cmV0dXJuIElFRUU4MDIxMV9DQ01QXzI1Nl9IRFJfTEVOO1xuJiM0MztcdGNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9HQ01QXzEyODpcbiYjNDM7XHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfQUVTX0dDTVBfMjU2OlxuJiM0MztcdFx0cmV0dXJuIElFRUU4MDIxMV9HQ01QX0hEUl9MRU47XG4mIzQzO1x0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX1dFUF80MDpcbiYjNDM7XHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfV0VQXzEwNDpcbiYjNDM7XHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfV0VQXzEyODpcbiYjNDM7XHRcdHJldHVybiBJRUVFODAyMTFfV0VQX0lWX0xFTjtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0woYXRoMTJrX2RwX3R4X2NyeXB0b19pdl9sZW4pO1xuJiM0MztcbiYjNDM7dTggYXRoMTJrX2RwX3R4X2NyeXB0b19pY3ZfbGVuKGVudW0gaGFsX2VuY3J5cHRfdHlwZSBlbmNfdHlwZSlcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAoZW5jX3R5cGUpIHtcbiYjNDM7XHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfQ0NNUF8xMjg6XG4mIzQzO1x0XHRyZXR1cm4gSUVFRTgwMjExX0NDTVBfTUlDX0xFTjtcbiYjNDM7XHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfQ0NNUF8yNTY6XG4mIzQzO1x0XHRyZXR1cm4gSUVFRTgwMjExX0NDTVBfMjU2X01JQ19MRU47XG4mIzQzO1x0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX0dDTVBfMTI4OlxuJiM0MztcdGNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9BRVNfR0NNUF8yNTY6XG4mIzQzO1x0XHRyZXR1cm4gSUVFRTgwMjExX0dDTVBfTUlDX0xFTjtcbiYjNDM7XHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfVEtJUF9OT19NSUM6XG4mIzQzO1x0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX1RLSVBfTUlDOlxuJiM0MztcdFx0cmV0dXJuIElFRUU4MDIxMV9US0lQX0lDVl9MRU47XG4mIzQzO1x0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX1dFUF80MDpcbiYjNDM7XHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfV0VQXzEwNDpcbiYjNDM7XHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfV0VQXzEyODpcbiYjNDM7XHRcdHJldHVybiBJRUVFODAyMTFfV0VQX0lDVl9MRU47XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKGF0aDEya19kcF90eF9jcnlwdG9faWN2X2xlbik7XG4mIzQzO1xuIHZvaWQgYXRoMTJrX2RwX3R4X3JlbGVhc2VfdHhidWYoc3RydWN0IGF0aDEya19kcCAqZHAsXG4gXHRcdFx0XHRzdHJ1Y3QgYXRoMTJrX3R4X2Rlc2NfaW5mbyAqdHhfZGVzYyxcbiBcdFx0XHRcdHU4IHBvb2xfaWQpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5oXG5pbmRleCA3Y2VmMjA1NDAxNzlmLi4xYWY3OWFmMmFkYTI2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3R4LmhcbkBAIC0xOSw2ICYjNDM7MTksOCBAQCBlbnVtIGhhbF90Y2xfZW5jYXBfdHlwZVxuIGF0aDEya19kcF90eF9nZXRfZW5jYXBfdHlwZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiB2b2lkIGF0aDEya19kcF90eF9lbmNhcF9ud2lmaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiB1OCBhdGgxMmtfZHBfdHhfZ2V0X3RpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiYjNDM7dTggYXRoMTJrX2RwX3R4X2NyeXB0b19pdl9sZW4oZW51bSBoYWxfZW5jcnlwdF90eXBlIGVuY190eXBlKTtcbiYjNDM7dTggYXRoMTJrX2RwX3R4X2NyeXB0b19pY3ZfbGVuKGVudW0gaGFsX2VuY3J5cHRfdHlwZSBlbmNfdHlwZSk7XG4gdm9pZCAqYXRoMTJrX2RwX21ldGFkYXRhX2FsaWduX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCB0YWlsX2xlbik7XG4gaW50IGF0aDEya19kcF90eF9hbGlnbl9wYXlsb2FkKHN0cnVjdCBhdGgxMmtfZHAgKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpO1xuIHZvaWQgYXRoMTJrX2RwX3R4X3JlbGVhc2VfdHhidWYoc3RydWN0IGF0aDEya19kcCAqZHAsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jXG5pbmRleCBkMjc0OWRlNDQ1NTM0Li41ODdkNThlZWNjZmE1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmNcbkBAIC0xMyw2ICYjNDM7MTMsNDkgQEBcbiAjaW5jbHVkZSBcJiMzNDtoYWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2hhbF90eC5oXCYjMzQ7XG4gXG4mIzQzOy8qXG4mIzQzOyAqIENvbnZlcnQgYW4gZW5jcnlwdGVkIEVBUE9MIGZyYW1lIGZyb20gbmF0aXZlLVdpRmkgZm9ybWF0IHRvXG4mIzQzOyAqIHRoZSBsYXlvdXQgZXhwZWN0ZWQgYnkgdGhlIGZpcm13YXJlIFJBVyBlbmNyeXB0IHBpcGVsaW5lOlxuJiM0MzsgKlxuJiM0MzsgKiAgIFs4MDIuMTEgaGRyXVtJViAoemVyb2VkKV1bTExDL1NOQVBdW0VBUE9MIHBheWxvYWRdW0lDViAoemVyb2VkKV1cbiYjNDM7ICpcbiYjNDM7ICogbWFjODAyMTEgZGVsaXZlcnMgdGhlIGZyYW1lIGFzIFs4MDIuMTEgaGRyXVtMTEMvU05BUF1bRUFQT0wgcGF5bG9hZF0uXG4mIzQzOyAqIFRoZSBNQUMgaGVhZGVyIGxlbmd0aCBpcyByZWFkIGZyb20gdGhlIHVubW9kaWZpZWQgc2tiIGFuZCBpcyBzYWZlIGJlY2F1c2VcbiYjNDM7ICogaWVlZTgwMjExX2hkcmxlbigpIG9ubHkgaW5zcGVjdHMgdGhlIDItYnl0ZSBmcmFtZV9jb250cm9sIGZpZWxkLlxuJiM0MzsgKiBwc2tiX2V4cGFuZF9oZWFkKCkgaXMgdXNlZCB0byBncm93IGJvdGggaGVhZCAoZm9yIHRoZSBJVikgYW5kIHRhaWxcbiYjNDM7ICogKGZvciB0aGUgSUNWKSBpbiBhIHNpbmdsZSBjYWxsIGFuZCBhbGxvY2F0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludFxuJiM0MzthdGgxMmtfd2lmaTdfZHBfdHhfZW5jYXBfZWFwb2woc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBoYWxfdHhfaW5mbyAqdGksXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9jYiAqc2tiX2NiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi1cdTAwM2VkYXRhO1xuJiM0MztcdGVudW0gaGFsX2VuY3J5cHRfdHlwZSBlbmNfdHlwZSA9XG4mIzQzO1x0XHRcdFx0YXRoMTJrX2RwX3R4X2dldF9lbmNyeXB0X3R5cGUoc2tiX2NiLVx1MDAzZWNpcGhlcik7XG4mIzQzO1x0dTE2IG1hY19oZHJfbGVuID0gaWVlZTgwMjExX2hkcmxlbihoZHItXHUwMDNlZnJhbWVfY29udHJvbCk7XG4mIzQzO1x0dTggaXZfbGVuID0gYXRoMTJrX2RwX3R4X2NyeXB0b19pdl9sZW4oZW5jX3R5cGUpO1xuJiM0MztcdHU4IGljdl9sZW4gPSBhdGgxMmtfZHBfdHhfY3J5cHRvX2ljdl9sZW4oZW5jX3R5cGUpO1xuJiM0MztcbiYjNDM7XHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIGl2X2xlbiwgaWN2X2xlbiwgR0ZQX0FUT01JQykpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0aWYgKGl2X2xlbikge1xuJiM0MztcdFx0c2tiX3B1c2goc2tiLCBpdl9sZW4pO1xuJiM0MztcdFx0bWVtbW92ZShza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWRhdGEgJiM0MzsgaXZfbGVuLCBtYWNfaGRyX2xlbik7XG4mIzQzO1x0XHRtZW1zZXQoc2tiLVx1MDAzZWRhdGEgJiM0MzsgbWFjX2hkcl9sZW4sIDAsIGl2X2xlbik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoaWN2X2xlbilcbiYjNDM7XHRcdG1lbXNldChza2JfcHV0KHNrYiwgaWN2X2xlbiksIDAsIGljdl9sZW4pO1xuJiM0MztcbiYjNDM7XHR0aS1cdTAwM2VmbGFnczAgfD0gdTMyX2VuY29kZV9iaXRzKDEsIEhBTF9UQ0xfREFUQV9DTURfSU5GTzJfVE9fRlcpO1xuJiM0MztcdHRpLVx1MDAzZWVuY2FwX3R5cGUgPSBIQUxfVENMX0VOQ0FQX1RZUEVfUkFXO1xuJiM0MztcdHRpLVx1MDAzZWVuY3J5cHRfdHlwZSA9IGVuY190eXBlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZFxuIGF0aDEya193aWZpN19oYWxfdHhfY21kX2V4dF9kZXNjX3NldHVwKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGhhbF90eF9tc2R1X2V4dF9kZXNjICp0Y2xfZXh0X2NtZCxcbkBAIC05MSw2ICYjNDM7MTM0LDcgQEAgaW50IGF0aDEya193aWZpN19kcF90eChzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsIHN0cnVjdCBhdGgxMmtfbGlua192aWYgKmFcbiBcdHUzMiBpb3ZhX21hc2sgPSBkcC1cdTAwM2Vod19wYXJhbXMtXHUwMDNlaW92YV9tYXNrO1xuIFx0Ym9vbCBpc19kaWZmX2VuY2FwID0gZmFsc2U7XG4gXHRib29sIGlzX251bGxfZnJhbWUgPSBmYWxzZTtcbiYjNDM7XHRib29sIGVhcG9sX2VuY2FwX2RvbmUgPSBmYWxzZTtcbiBcbiBcdGlmICh0ZXN0X2JpdChBVEgxMktfRkxBR19DUkFTSF9GTFVTSCwgXHUwMDI2YWItXHUwMDNlZGV2X2ZsYWdzKSlcbiBcdFx0cmV0dXJuIC1FU0hVVERPV047XG5AQCAtMjExLDkgJiM0MzsyNTUsMjcgQEAgaW50IGF0aDEya193aWZpN19kcF90eChzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsIHN0cnVjdCBhdGgxMmtfbGlua192aWYgKmFcbiBcdGNhc2UgSEFMX1RDTF9FTkNBUF9UWVBFX05BVElWRV9XSUZJOlxuIFx0XHRpc19udWxsX2ZyYW1lID0gaWVlZTgwMjExX2lzX251bGxmdW5jKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKTtcbiBcdFx0aWYgKGFodmlmLVx1MDAzZXZpZi1cdTAwM2VvZmZsb2FkX2ZsYWdzIFx1MDAyNiBJRUVFODAyMTFfT0ZGTE9BRF9FTkNBUF9FTkFCTEVEKSB7XG4tXHRcdFx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9QQUUpIHx8IGlzX251bGxfZnJhbWUpXG4mIzQzO1x0XHRcdGlmICgoc2tiLVx1MDAzZXByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX1BBRSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICAgIShza2JfY2ItXHUwMDNlZmxhZ3MgXHUwMDI2IEFUSDEyS19TS0JfQ0lQSEVSX1NFVCkpIHx8IGlzX251bGxfZnJhbWUpXG4gXHRcdFx0XHRpc19kaWZmX2VuY2FwID0gdHJ1ZTtcbiBcbiYjNDM7XHRcdFx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9QQUUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgKHNrYl9jYi1cdTAwM2VmbGFncyBcdTAwMjYgQVRIMTJLX1NLQl9DSVBIRVJfU0VUKSkge1xuJiM0MztcdFx0XHRcdGlmICghZWFwb2xfZW5jYXBfZG9uZSkge1xuJiM0MztcdFx0XHRcdFx0cmV0ID0gYXRoMTJrX3dpZmk3X2RwX3R4X2VuY2FwX2VhcG9sKHNrYiwgXHUwMDI2dGksXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdCAgICAgc2tiX2NiKTtcbiYjNDM7XHRcdFx0XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdFx0XHRcdGdvdG8gZmFpbF9yZW1vdmVfdHhfYnVmO1xuJiM0MztcdFx0XHRcdFx0aGRyID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YTtcbiYjNDM7XHRcdFx0XHRcdGVhcG9sX2VuY2FwX2RvbmUgPSB0cnVlO1xuJiM0MztcdFx0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0XHR0aS5mbGFnczAgfD0gdTMyX2VuY29kZV9iaXRzKDEsXG4mIzQzO1x0XHRcdFx0XHRcdFx0SEFMX1RDTF9EQVRBX0NNRF9JTkZPMl9UT19GVyk7XG4mIzQzO1x0XHRcdFx0XHR0aS5lbmNhcF90eXBlID0gSEFMX1RDTF9FTkNBUF9UWVBFX1JBVztcbiYjNDM7XHRcdFx0XHRcdHRpLmVuY3J5cHRfdHlwZSA9XG4mIzQzO1x0XHRcdFx0XHRcdGF0aDEya19kcF90eF9nZXRfZW5jcnlwdF90eXBlKHNrYl9jYi1cdTAwM2VjaXBoZXIpO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0fVxuIFx0XHRcdC8qIEZpcm13YXJlIGV4cGVjdHMgbXNkdSBleHQgZGVzY3JpcHRvciBmb3IgbndpZmkvcmF3IHBhY2tldHNcbiBcdFx0XHQgKiByZWNlaXZlZCBpbiBFVEggbW9kZS4gV2l0aG91dCB0aGlzLCBvYnNlcnZlZCB0eCBmYWlsIGZvclxuIFx0XHRcdCAqIE11bHRpY2FzdCBwYWNrZXRzIGluIEVUSCBtb2RlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjQ0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZGF0YSB0cmFuc21pdCBwYXRoIChkcF90eCkgb2YgdGhlIGF0aDEyayBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciBmb3IgUXVhbGNvbW0gV2ktRmkgNyBQQ0llL0FIQiBkZXZpY2VzLiBTaW5jZSB0aGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCB0aGUgZGV2aWNlIGNhbm5vdCBiZSBzdWNjZXNzZnVsbHkgcHJvYmVkLCBmaXJtd2FyZSBjYW5ub3QgYmUgbG9hZGVkLCBhbmQgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGNhbm5vdCBiZSBicm91Z2h0IHVwIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIHRyYW5zbWl0IHBhdGggaXMgdW5yZWFjaGFibGUgYW5kIGNhbm5vdCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2IyODUxYWU4NjI3ZmMyMjMwNWRhM2QwN2M3YTVlYTczNmFkM2U1OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDMxIDAyOjQ0OjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jCmluZGV4IGMxMGRhNjE5NWM5YzMuLjk2NDRmOWVmMmM3NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3R4LmMKQEAgLTgyLDYgJiM0Mzs4Miw1MiBAQCBlbnVtIGhhbF9lbmNyeXB0X3R5cGUgYXRoMTJrX2RwX3R4X2dldF9lbmNyeXB0X3R5cGUodTMyIGNpcGhlcikKIH0KIEVYUE9SVF9TWU1CT0woYXRoMTJrX2RwX3R4X2dldF9lbmNyeXB0X3R5cGUpOwogCiYjNDM7dTggYXRoMTJrX2RwX3R4X2NyeXB0b19pdl9sZW4oZW51bSBoYWxfZW5jcnlwdF90eXBlIGVuY190eXBlKQomIzQzO3sKJiM0MzsJc3dpdGNoIChlbmNfdHlwZSkgewomIzQzOwljYXNlIEhBTF9FTkNSWVBUX1RZUEVfVEtJUF9OT19NSUM6CiYjNDM7CWNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9US0lQX01JQzoKJiM0MzsJCXJldHVybiBJRUVFODAyMTFfVEtJUF9JVl9MRU47CiYjNDM7CWNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9DQ01QXzEyODoKJiM0MzsJCXJldHVybiBJRUVFODAyMTFfQ0NNUF9IRFJfTEVOOwomIzQzOwljYXNlIEhBTF9FTkNSWVBUX1RZUEVfQ0NNUF8yNTY6CiYjNDM7CQlyZXR1cm4gSUVFRTgwMjExX0NDTVBfMjU2X0hEUl9MRU47CiYjNDM7CWNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9HQ01QXzEyODoKJiM0MzsJY2FzZSBIQUxfRU5DUllQVF9UWVBFX0FFU19HQ01QXzI1NjoKJiM0MzsJCXJldHVybiBJRUVFODAyMTFfR0NNUF9IRFJfTEVOOwomIzQzOwljYXNlIEhBTF9FTkNSWVBUX1RZUEVfV0VQXzQwOgomIzQzOwljYXNlIEhBTF9FTkNSWVBUX1RZUEVfV0VQXzEwNDoKJiM0MzsJY2FzZSBIQUxfRU5DUllQVF9UWVBFX1dFUF8xMjg6CiYjNDM7CQlyZXR1cm4gSUVFRTgwMjExX1dFUF9JVl9MRU47CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKGF0aDEya19kcF90eF9jcnlwdG9faXZfbGVuKTsKJiM0MzsKJiM0Mzt1OCBhdGgxMmtfZHBfdHhfY3J5cHRvX2ljdl9sZW4oZW51bSBoYWxfZW5jcnlwdF90eXBlIGVuY190eXBlKQomIzQzO3sKJiM0MzsJc3dpdGNoIChlbmNfdHlwZSkgewomIzQzOwljYXNlIEhBTF9FTkNSWVBUX1RZUEVfQ0NNUF8xMjg6CiYjNDM7CQlyZXR1cm4gSUVFRTgwMjExX0NDTVBfTUlDX0xFTjsKJiM0MzsJY2FzZSBIQUxfRU5DUllQVF9UWVBFX0NDTVBfMjU2OgomIzQzOwkJcmV0dXJuIElFRUU4MDIxMV9DQ01QXzI1Nl9NSUNfTEVOOwomIzQzOwljYXNlIEhBTF9FTkNSWVBUX1RZUEVfR0NNUF8xMjg6CiYjNDM7CWNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9BRVNfR0NNUF8yNTY6CiYjNDM7CQlyZXR1cm4gSUVFRTgwMjExX0dDTVBfTUlDX0xFTjsKJiM0MzsJY2FzZSBIQUxfRU5DUllQVF9UWVBFX1RLSVBfTk9fTUlDOgomIzQzOwljYXNlIEhBTF9FTkNSWVBUX1RZUEVfVEtJUF9NSUM6CiYjNDM7CQlyZXR1cm4gSUVFRTgwMjExX1RLSVBfSUNWX0xFTjsKJiM0MzsJY2FzZSBIQUxfRU5DUllQVF9UWVBFX1dFUF80MDoKJiM0MzsJY2FzZSBIQUxfRU5DUllQVF9UWVBFX1dFUF8xMDQ6CiYjNDM7CWNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9XRVBfMTI4OgomIzQzOwkJcmV0dXJuIElFRUU4MDIxMV9XRVBfSUNWX0xFTjsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0woYXRoMTJrX2RwX3R4X2NyeXB0b19pY3ZfbGVuKTsKJiM0MzsKIHZvaWQgYXRoMTJrX2RwX3R4X3JlbGVhc2VfdHhidWYoc3RydWN0IGF0aDEya19kcCAqZHAsCiAJCQkJc3RydWN0IGF0aDEya190eF9kZXNjX2luZm8gKnR4X2Rlc2MsCiAJCQkJdTggcG9vbF9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguaAppbmRleCA3Y2VmMjA1NDAxNzlmLi4xYWY3OWFmMmFkYTI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3R4LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5oCkBAIC0xOSw2ICYjNDM7MTksOCBAQCBlbnVtIGhhbF90Y2xfZW5jYXBfdHlwZQogYXRoMTJrX2RwX3R4X2dldF9lbmNhcF90eXBlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBhdGgxMmtfZHBfdHhfZW5jYXBfbndpZmkoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB1OCBhdGgxMmtfZHBfdHhfZ2V0X3RpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKJiM0Mzt1OCBhdGgxMmtfZHBfdHhfY3J5cHRvX2l2X2xlbihlbnVtIGhhbF9lbmNyeXB0X3R5cGUgZW5jX3R5cGUpOwomIzQzO3U4IGF0aDEya19kcF90eF9jcnlwdG9faWN2X2xlbihlbnVtIGhhbF9lbmNyeXB0X3R5cGUgZW5jX3R5cGUpOwogdm9pZCAqYXRoMTJrX2RwX21ldGFkYXRhX2FsaWduX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCB0YWlsX2xlbik7CiBpbnQgYXRoMTJrX2RwX3R4X2FsaWduX3BheWxvYWQoc3RydWN0IGF0aDEya19kcCAqZHAsIHN0cnVjdCBza19idWZmICoqcHNrYik7CiB2b2lkIGF0aDEya19kcF90eF9yZWxlYXNlX3R4YnVmKHN0cnVjdCBhdGgxMmtfZHAgKmRwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jCmluZGV4IGQyNzQ5ZGU0NDU1MzQuLjU4N2Q1OGVlY2NmYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMKQEAgLTEzLDYgJiM0MzsxMyw0OSBAQAogI2luY2x1ZGUgJiMzNDtoYWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2hhbF90eC5oJiMzNDsKIAomIzQzOy8qCiYjNDM7ICogQ29udmVydCBhbiBlbmNyeXB0ZWQgRUFQT0wgZnJhbWUgZnJvbSBuYXRpdmUtV2lGaSBmb3JtYXQgdG8KJiM0MzsgKiB0aGUgbGF5b3V0IGV4cGVjdGVkIGJ5IHRoZSBmaXJtd2FyZSBSQVcgZW5jcnlwdCBwaXBlbGluZToKJiM0MzsgKgomIzQzOyAqICAgWzgwMi4xMSBoZHJdW0lWICh6ZXJvZWQpXVtMTEMvU05BUF1bRUFQT0wgcGF5bG9hZF1bSUNWICh6ZXJvZWQpXQomIzQzOyAqCiYjNDM7ICogbWFjODAyMTEgZGVsaXZlcnMgdGhlIGZyYW1lIGFzIFs4MDIuMTEgaGRyXVtMTEMvU05BUF1bRUFQT0wgcGF5bG9hZF0uCiYjNDM7ICogVGhlIE1BQyBoZWFkZXIgbGVuZ3RoIGlzIHJlYWQgZnJvbSB0aGUgdW5tb2RpZmllZCBza2IgYW5kIGlzIHNhZmUgYmVjYXVzZQomIzQzOyAqIGllZWU4MDIxMV9oZHJsZW4oKSBvbmx5IGluc3BlY3RzIHRoZSAyLWJ5dGUgZnJhbWVfY29udHJvbCBmaWVsZC4KJiM0MzsgKiBwc2tiX2V4cGFuZF9oZWFkKCkgaXMgdXNlZCB0byBncm93IGJvdGggaGVhZCAoZm9yIHRoZSBJVikgYW5kIHRhaWwKJiM0MzsgKiAoZm9yIHRoZSBJQ1YpIGluIGEgc2luZ2xlIGNhbGwgYW5kIGFsbG9jYXRpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIGludAomIzQzO2F0aDEya193aWZpN19kcF90eF9lbmNhcF9lYXBvbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgaGFsX3R4X2luZm8gKnRpLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9jYiAqc2tiX2NiKQomIzQzO3sKJiM0MzsJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0mZ3Q7ZGF0YTsKJiM0MzsJZW51bSBoYWxfZW5jcnlwdF90eXBlIGVuY190eXBlID0KJiM0MzsJCQkJYXRoMTJrX2RwX3R4X2dldF9lbmNyeXB0X3R5cGUoc2tiX2NiLSZndDtjaXBoZXIpOwomIzQzOwl1MTYgbWFjX2hkcl9sZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci0mZ3Q7ZnJhbWVfY29udHJvbCk7CiYjNDM7CXU4IGl2X2xlbiA9IGF0aDEya19kcF90eF9jcnlwdG9faXZfbGVuKGVuY190eXBlKTsKJiM0MzsJdTggaWN2X2xlbiA9IGF0aDEya19kcF90eF9jcnlwdG9faWN2X2xlbihlbmNfdHlwZSk7CiYjNDM7CiYjNDM7CWlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgaXZfbGVuLCBpY3ZfbGVuLCBHRlBfQVRPTUlDKSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlpZiAoaXZfbGVuKSB7CiYjNDM7CQlza2JfcHVzaChza2IsIGl2X2xlbik7CiYjNDM7CQltZW1tb3ZlKHNrYi0mZ3Q7ZGF0YSwgc2tiLSZndDtkYXRhICYjNDM7IGl2X2xlbiwgbWFjX2hkcl9sZW4pOwomIzQzOwkJbWVtc2V0KHNrYi0mZ3Q7ZGF0YSAmIzQzOyBtYWNfaGRyX2xlbiwgMCwgaXZfbGVuKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaWN2X2xlbikKJiM0MzsJCW1lbXNldChza2JfcHV0KHNrYiwgaWN2X2xlbiksIDAsIGljdl9sZW4pOwomIzQzOwomIzQzOwl0aS0mZ3Q7ZmxhZ3MwIHw9IHUzMl9lbmNvZGVfYml0cygxLCBIQUxfVENMX0RBVEFfQ01EX0lORk8yX1RPX0ZXKTsKJiM0MzsJdGktJmd0O2VuY2FwX3R5cGUgPSBIQUxfVENMX0VOQ0FQX1RZUEVfUkFXOwomIzQzOwl0aS0mZ3Q7ZW5jcnlwdF90eXBlID0gZW5jX3R5cGU7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkCiBhdGgxMmtfd2lmaTdfaGFsX3R4X2NtZF9leHRfZGVzY19zZXR1cChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLAogCQkJCSAgICAgICBzdHJ1Y3QgaGFsX3R4X21zZHVfZXh0X2Rlc2MgKnRjbF9leHRfY21kLApAQCAtOTEsNiAmIzQzOzEzNCw3IEBAIGludCBhdGgxMmtfd2lmaTdfZHBfdHgoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LCBzdHJ1Y3QgYXRoMTJrX2xpbmtfdmlmICphCiAJdTMyIGlvdmFfbWFzayA9IGRwLSZndDtod19wYXJhbXMtJmd0O2lvdmFfbWFzazsKIAlib29sIGlzX2RpZmZfZW5jYXAgPSBmYWxzZTsKIAlib29sIGlzX251bGxfZnJhbWUgPSBmYWxzZTsKJiM0MzsJYm9vbCBlYXBvbF9lbmNhcF9kb25lID0gZmFsc2U7CiAKIAlpZiAodGVzdF9iaXQoQVRIMTJLX0ZMQUdfQ1JBU0hfRkxVU0gsICZhbXA7YWItJmd0O2Rldl9mbGFncykpCiAJCXJldHVybiAtRVNIVVRET1dOOwpAQCAtMjExLDkgJiM0MzsyNTUsMjcgQEAgaW50IGF0aDEya193aWZpN19kcF90eChzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsIHN0cnVjdCBhdGgxMmtfbGlua192aWYgKmEKIAljYXNlIEhBTF9UQ0xfRU5DQVBfVFlQRV9OQVRJVkVfV0lGSToKIAkJaXNfbnVsbF9mcmFtZSA9IGllZWU4MDIxMV9pc19udWxsZnVuYyhoZHItJmd0O2ZyYW1lX2NvbnRyb2wpOwogCQlpZiAoYWh2aWYtJmd0O3ZpZi0mZ3Q7b2ZmbG9hZF9mbGFncyAmYW1wOyBJRUVFODAyMTFfT0ZGTE9BRF9FTkNBUF9FTkFCTEVEKSB7Ci0JCQlpZiAoc2tiLSZndDtwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9QQUUpIHx8IGlzX251bGxfZnJhbWUpCiYjNDM7CQkJaWYgKChza2ItJmd0O3Byb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX1BBRSkgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAgIShza2JfY2ItJmd0O2ZsYWdzICZhbXA7IEFUSDEyS19TS0JfQ0lQSEVSX1NFVCkpIHx8IGlzX251bGxfZnJhbWUpCiAJCQkJaXNfZGlmZl9lbmNhcCA9IHRydWU7CiAKJiM0MzsJCQlpZiAoc2tiLSZndDtwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9QQUUpICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgKHNrYl9jYi0mZ3Q7ZmxhZ3MgJmFtcDsgQVRIMTJLX1NLQl9DSVBIRVJfU0VUKSkgewomIzQzOwkJCQlpZiAoIWVhcG9sX2VuY2FwX2RvbmUpIHsKJiM0MzsJCQkJCXJldCA9IGF0aDEya193aWZpN19kcF90eF9lbmNhcF9lYXBvbChza2IsICZhbXA7dGksCiYjNDM7CQkJCQkJCQkJICAgICBza2JfY2IpOwomIzQzOwkJCQkJaWYgKHJldCkKJiM0MzsJCQkJCQlnb3RvIGZhaWxfcmVtb3ZlX3R4X2J1ZjsKJiM0MzsJCQkJCWhkciA9ICh2b2lkICopc2tiLSZndDtkYXRhOwomIzQzOwkJCQkJZWFwb2xfZW5jYXBfZG9uZSA9IHRydWU7CiYjNDM7CQkJCX0gZWxzZSB7CiYjNDM7CQkJCQl0aS5mbGFnczAgfD0gdTMyX2VuY29kZV9iaXRzKDEsCiYjNDM7CQkJCQkJCUhBTF9UQ0xfREFUQV9DTURfSU5GTzJfVE9fRlcpOwomIzQzOwkJCQkJdGkuZW5jYXBfdHlwZSA9IEhBTF9UQ0xfRU5DQVBfVFlQRV9SQVc7CiYjNDM7CQkJCQl0aS5lbmNyeXB0X3R5cGUgPQomIzQzOwkJCQkJCWF0aDEya19kcF90eF9nZXRfZW5jcnlwdF90eXBlKHNrYl9jYi0mZ3Q7Y2lwaGVyKTsKJiM0MzsJCQkJfQomIzQzOwkJCX0KIAkJCS8qIEZpcm13YXJlIGV4cGVjdHMgbXNkdSBleHQgZGVzY3JpcHRvciBmb3IgbndpZmkvcmF3IHBhY2tldHMKIAkJCSAqIHJlY2VpdmVkIGluIEVUSCBtb2RlLiBXaXRob3V0IHRoaXMsIG9ic2VydmVkIHR4IGZhaWwgZm9yCiAJCQkgKiBNdWx0aWNhc3QgcGFja2V0cyBpbiBFVEggbW9kZS4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcxMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBhbiBhdGgxMmsgUGF0Y2ggaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIGBhdGgxMmtgIGRyaXZlci4gSXQmIzM5O3MgbW9kaWZ5aW5nIGBkcF90eC5jYCwgYGRwX3R4LmhgLCBhbmQgYHdpZmk3L2RwX3R4LmNgIGFuZCBzZWVtcyB0byBiZSBhZGRpbmcgZnVuY3Rpb25zIHRvIGhhbmRsZSBJVi9JQ1YgbGVuZ3RocyBmb3IgZGlmZmVyZW50IGVuY3J5cHRpb24gdHlwZXMsIGFzIHdlbGwgYXMgbW9kaWZ5aW5nIGBhdGgxMmtfd2lmaTdfZHBfdHhgIHRvIGRlYWwgd2l0aCBlbmNyeXB0ZWQgRUFQT0wgZnJhbWVzLiBCYXNpY2FsbHksIGl0JiMzOTtzIHByZXBwaW5nIGZvciB0aGUgZmlybXdhcmUmIzM5O3MgUkFXIGVuY3J5cHQgcGlwZWxpbmUuIFRoZSBjb3JlIG9mIHRoaXMgd29yayBzZWVtcyB0byBiZSBzZXR0aW5nIHVwIElWIGFuZCBJQ1YuCgpUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBjYW4gSSBldmVuIHRlc3QgdGhpcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBgYXRoMTJrYCBpcyBhIGRyaXZlciBmb3IgUXVhbGNvbW0gV2ktRmkgNyAoODAyLjExYmUpIFBDSWUgZGV2aWNlcy4gUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoYXQgc3BlY2lmaWMgaGFyZHdhcmUsIGF0IGxlYXN0IG5vdCB0aGF0IEkmIzM5O20gYXdhcmUgb2YuIEFuZCB3aGlsZSBgbWFjODAyMTFfaHdzaW1gIHByb3ZpZGVzIGEgV2lGaSBlbXVsYXRpb24sIGBhdGgxMmtgIGlzIHRpZWQgdG8gdGhlIGhhcmR3YXJlLiBUaGF0IG1ha2VzIHRlc3RpbmcgdHJpY2t5LgoKVGhlIG5leHQgdGhpbmcgSSYjMzk7ZCBsb29rIGF0IGlzIGlmIGl0JiMzOTtzIHBvc3NpYmxlIHRvIGZ1enogYGF0aDEya2AuIFBDSSBkcml2ZXJzIGFyZSBub3RvcmlvdXNseSBkaWZmaWN1bHQgdG8gZnV6eiBiZWNhdXNlIHRoZXkgcmVxdWlyZSBhIHJlYWwgZGV2aWNlLiBJdCYjMzk7cyB1c3VhbGx5IG9ubHkgcG9zc2libGUgaWYgdGhlcmUgaXMgYW4gZW11bGF0b3Igb3IgZm9yIFVTQiBkZXZpY2VzIHdpdGggZW11bGF0b3JzLCBvciBpZiBpdCYjMzk7cyBhIHZpcnR1YWwgZHJpdmVyLiBCZWNhdXNlIGl0JiMzOTtzIGEgUENJIGRyaXZlciwgSSB3aWxsIG5lZWQgdG8gY2hlY2sgd2hldGhlciBJIGNhbiBldmVuIGdldCBpdCB0byBydW4gaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LiBJIHNob3VsZCBjaGVjayB0aGUgZmlsZXMgcmVsYXRlZCB0byBQQ0kgZnVuY3Rpb25hbGl0eSBzdWNoIGFzIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jYC4KCkkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgdG8gc2VlIGlmIGBhdGgxMmtgIGlzIGluZGVlZCBhIFBDSSBkcml2ZXIuIFRoYXQgd2lsbCB0ZWxsIG1lIHdoZXJlIHRvIGdvIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX3JlZ2lzdGVyX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xODExPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBfX21heWJlX3VudXNlZCBhdGgxMmtfcGNpX3BtX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MTctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4MTg6aW50IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKGNvbnN0IGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODE5LVx0XHRcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3BjaV9kcml2ZXIgKmRyaXZlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4NDQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4NDU6XHRyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcihwY2lfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTg0Ni19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4NDc6RVhQT1JUX1NZTUJPTChhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4NDgtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaD0xNzY9dm9pZCBhdGgxMmtfcGNpX3Bvd2VyX2Rvd24oc3RydWN0IGF0aDEya19iYXNlICphYiwgYm9vbCBpc19zdXNwZW5kKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmg6MTc3OmludCBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcihjb25zdCBlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmgtMTc4LVx0XHRcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3BjaV9kcml2ZXIgKmRyaXZlcik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYz0xOTc9aW50IGF0aDEya193aWZpN19wY2lfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtMjAwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYzoyMDE6XHRyZXQgPSBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcihBVEgxMktfREVWSUNFX0ZBTUlMWV9XSUZJNyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtMjAyLVx0XHRcdFx0XHQgXHUwMDI2YXRoMTJrX3dpZmk3X3BjaV9kcml2ZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxOTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nPWZhbHNlOiBhdGgxMmsgYW5kIHRoZSBMaW1pdGF0aW9ucyBvZiBWaXJ0dWFsaXphdGlvbioqCgpPa2F5LCBzbyB0aGlzIGlzIGEgUENJIGRyaXZlciwgc3BlY2lmaWNhbGx5IGBhdGgxMmtgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGlzIHRoZXJlICphbnkqIHdheSB0byByZWFjaCB0aGUgYGF0aDEya193aWZpN19kcF90eGAgZnVuY3Rpb24gd2l0aG91dCBhY3R1YWwgaGFyZHdhcmU/IEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBQQ0kgZHJpdmVycyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUsIGxpa2UgUXVhbGNvbW0gV2ktRmksIGFyZSBub3RvcmlvdXNseSBkaWZmaWN1bHQgdG8gZnV6eiBpbiBRRU1VIGJlY2F1c2UgdGhlIGhhcmR3YXJlIGlzbiYjMzk7dCBlbXVsYXRlZC4KClRoZW4gSSBwYXVzZWQg4oCTIHdhaXQsIGRvZXNuJiMzOTt0IHN5emthbGxlciBoYXZlIHNvbWV0aGluZyBsaWtlIGBzeXpfcGNpX2RldmljZWA/IFJpZ2h0LCBpdCAqZG9lcyosIGJ1dCBpdCYjMzk7cyBwcmV0dHkgbGltaXRlZC4gVXN1YWxseSwgd2l0aCB0aG9zZSwgeW91JiMzOTtyZSBqdXN0IHRlc3RpbmcgdGhlIHByb2JlIGFuZCBpbml0IGZ1bmN0aW9ucyB1bmxlc3MgdGhlIGRyaXZlciBoYXMgYmVlbiBzcGVjaWZpY2FsbHkgY2F0ZXJlZCB0by4gQW5kIGBhdGgxMmtgIGlzIGEgKmNvbXBsZXgqIFdpLUZpIGRyaXZlci4gSXQgbmVlZHMgZmlybXdhcmUgbG9hZGVkLCBETUEgcmluZ3Mgc2V0IHVwLCBhIHdob2xlIGhvc3Qgb2YgdGhpbmdzLgoKU28sIHRoZSB0cmFuc21pdCBwYXRoLCBgYXRoMTJrX3dpZmk3X2RwX3R4YCwgaXMgd2hhdCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaGVyZS4gVG8gZ2V0IHRoZXJlLCB0aGUgZGV2aWNlIG5lZWRzIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSwgZmlybXdhcmUgbmVlZHMgdG8gbG9hZCwgdGhlIE1BQyBuZWVkcyB0byBiZSByZWdpc3RlcmVkLCB0aGUgaW50ZXJmYWNlIG5lZWRzIHRvIGJlIGJyb3VnaHQgdXAsIGFuZCB0aGVuIHlvdSBuZWVkIHRvIGFjdHVhbGx5ICpzZW5kKiBwYWNrZXRzLgoKV2l0aG91dCByZWFsIGhhcmR3YXJlIG9yIGEgdmVyeSBzb3BoaXN0aWNhdGVkIGhhcmR3YXJlIGVtdWxhdG9yLCB0aGUgYGF0aDEya2AgcHJvYmUgaXMgZ29pbmcgdG8gZmFpbCBzcGVjdGFjdWxhcmx5LiBSZWFkaW5nIFBDSSBjb25maWcgc3BhY2UsIG1hcHBpbmcgQkFScywgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBmaXJtd2FyZSDigJMgaXQmIzM5O3MgYWxsIGdvaW5nIHRvIGJlIGEgYnJpY2sgd2FsbC4gVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgYGF0aDEya193aWZpN19kcF90eGAgaXMgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCk5vdywgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIHRoZXJlJiMzOTtzIGFueSBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIGBhdGgxMmtgIHRoYXQgSSBtaWdodCBoYXZlIG1pc3NlZC4gTm8sIGBtYWM4MDIxMV9od3NpbWAgaXMgZ2VuZXJpYyBtYWM4MDIxMSwgbm90IHRoaXMgc3BlY2lmaWMgZHJpdmVyLiBJdCYjMzk7cyBhIHNwZWNpZmljIGhhcmR3YXJlIGRyaXZlci4KClRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBpbnZvbHZlcyBjb2RlIGluICYjMzQ7dmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDsKCmBhdGgxMmtgICppcyogYSB2ZW5kb3Itc3BlY2lmaWMgKFF1YWxjb21tKSBQQ0llIFdpLUZpIGRyaXZlci4gSXQgbmVlZHMgdGhvc2UgcGh5c2ljYWwgY2FyZHMuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHNheSBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkxldCBtZSBxdWlja2x5IHZlcmlmeSDigJMgaXMgdGhpcyAqb25seSogUENJPyBJJiMzOTttIHN1cmUgSSYjMzk7dmUgc2VlbiBtZW50aW9ucyBvZiBBSEIgc3VwcG9ydCBmb3IgYGF0aDEya2AuIE5lZWQgdG8gY2hlY2sgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmNgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBqdXN0IGluIGNhc2UuIEJ1dCBteSBwcmltYXJ5IGFzc2Vzc21lbnQgc3RhbmRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYz01NT1zdGF0aWMgdm9pZCBhdGgxMmtfd2lmaTdfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jLTYzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmM6NjQ6bW9kdWxlX2luaXQoYXRoMTJrX3dpZmk3X2luaXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmMtNjUtbW9kdWxlX2V4aXQoYXRoMTJrX3dpZmk3X2V4aXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NjkKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0IGRpdmluZyBpbnRvIHRoZSBjb2RlOgoKKipEaXZpbmcgRGVlcCBpbnRvIHRoZSBBdGhlcm9zIFdpRmkgNyBEcml2ZXIqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmRhbWVudGFsIGluaXRpYWxpemF0aW9uIG9mIHRoaXMgYGF0aDEya2AgZHJpdmVyLCBwYXJ0aWN1bGFybHkgaG93IGl0IHJlZ2lzdGVycyBpdHMga2V5IGNvbXBvbmVudHMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYHdpZmk3YCBhc3BlY3RzLCB3aGljaCBsaWtlbHkgZW5jb21wYXNzIHRoZSBuZXcgZmVhdHVyZXMgYW5kIGNhcGFiaWxpdGllcyBpbnRyb2R1Y2VkIHdpdGggdGhlIG5ld2VyIHN0YW5kYXJkLiBUaW1lIHRvIGNyYWNrIG9wZW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jYCBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoZSByZWdpc3RyYXRpb24gbGV2ZWwuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGVzc2VudGlhbCBkYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyB0aGF0IGFyZSBnZXR0aW5nIGhvb2tlZCBpbnRvIHRoZSBrZXJuZWwmIzM5O3Mgd2lyZWxlc3Mgc3Vic3lzdGVtLiBXaGF0IGFyZSB0aGUga2V5IGRldmljZSBmZWF0dXJlcywgcHJvdG9jb2xzLCBhbmQgcmVndWxhdG9yeSBlbGVtZW50cyBiZWluZyBtYWRlIGF2YWlsYWJsZT8gSSBleHBlY3QgdG8gc2VlIHRoZSByZWdpc3RyYXRpb24gb2YgaGFyZHdhcmUgaW50ZXJmYWNlcywgbmV0ZGV2IG9wZXJhdGlvbnMsIGFuZCBwZXJoYXBzIHBvd2VyIG1hbmFnZW1lbnQgaGFuZGxlcnMuIFRoaXMgd2lsbCBwcm92aWRlIGEgY3J1Y2lhbCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgYHdpZmk3YCBzdXBwb3J0IGlzIGJha2VkIGludG8gdGhlIGNvcmUgZHJpdmVyIGFyY2hpdGVjdHVyZS4gSXQmIzM5O3MgdGltZSB0byBmaW5kIHRoZSBicmVhZGNydW1icyBhbmQgdHJhY2UgdGhlIGRyaXZlciYjMzk7cyBmb290cHJpbnQgd2l0aGluIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG4gICAyOlx0LypcbiAgIDM6XHQgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMSBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAgIDQ6XHQgKiBDb3B5cmlnaHQgKGMpIFF1YWxjb21tIFRlY2hub2xvZ2llcywgSW5jLiBhbmQvb3IgaXRzIHN1YnNpZGlhcmllcy5cbiAgIDU6XHQgKi9cbiAgIDY6XHRcbiAgIDc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICAgODpcdCNpbmNsdWRlIFwmIzM0Oy4uL2FoYi5oXCYjMzQ7XG4gICA5Olx0I2luY2x1ZGUgXCYjMzQ7Li4vcGNpLmhcJiMzNDtcbiAgMTA6XHQjaW5jbHVkZSBcJiMzNDtwY2kuaFwmIzM0O1xuICAxMTpcdCNpbmNsdWRlIFwmIzM0O2FoYi5oXCYjMzQ7XG4gIDEyOlx0I2luY2x1ZGUgXCYjMzQ7Y29yZS5oXCYjMzQ7XG4gIDEzOlx0I2luY2x1ZGUgXCYjMzQ7ZHAuaFwmIzM0O1xuICAxNDpcdCNpbmNsdWRlIFwmIzM0Oy4uL2RlYnVnLmhcJiMzNDtcbiAgMTU6XHRcbiAgMTY6XHRzdGF0aWMgaW50IGFoYl9lcnIsIHBjaV9lcnI7XG4gIDE3Olx0XG4gIDE4Olx0aW50IGF0aDEya193aWZpN19hcmNoX2luaXQoc3RydWN0IGF0aDEya19iYXNlICphYilcbiAgMTk6XHR7XG4gIDIwOlx0XHRzdHJ1Y3QgYXRoMTJrX2RwICpkcDtcbiAgMjE6XHRcbiAgMjI6XHRcdGRwID0gYXRoMTJrX3dpZmk3X2RwX2RldmljZV9hbGxvYyhhYik7XG4gIDIzOlx0XHRpZiAoIWRwKSB7XG4gIDI0Olx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2RwIGFsbG9jIGZhaWxlZFwmIzM0Oyk7XG4gIDI1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuICAyNjpcdFx0fVxuICAyNzpcdFxuICAyODpcdFx0YWItXHUwMDNlZHAgPSBkcDtcbiAgMjk6XHRcbiAgMzA6XHRcdHJldHVybiAwO1xuICAzMTpcdH1cbiAgMzI6XHRcbiAgMzM6XHR2b2lkIGF0aDEya193aWZpN19hcmNoX2RlaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuICAzNDpcdHtcbiAgMzU6XHRcdGF0aDEya193aWZpN19kcF9kZXZpY2VfZnJlZShhYi1cdTAwM2VkcCk7XG4gIDM2Olx0XHRhYi1cdTAwM2VkcCA9IE5VTEw7XG4gIDM3Olx0fVxuICAzODpcdFxuICAzOTpcdHN0YXRpYyBpbnQgYXRoMTJrX3dpZmk3X2luaXQodm9pZClcbiAgNDA6XHR7XG4gIDQxOlx0XHRhaGJfZXJyID0gYXRoMTJrX3dpZmk3X2FoYl9pbml0KCk7XG4gIDQyOlx0XHRpZiAoYWhiX2VycilcbiAgNDM6XHRcdFx0cHJfd2FybihcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBhdGgxMmsgV2ktRmkgNyBBSEIgZGV2aWNlOiAlZFxcblwmIzM0OyxcbiAgNDQ6XHRcdFx0XHRhaGJfZXJyKTtcbiAgNDU6XHRcbiAgNDY6XHRcdHBjaV9lcnIgPSBhdGgxMmtfd2lmaTdfcGNpX2luaXQoKTtcbiAgNDc6XHRcdGlmIChwY2lfZXJyKVxuICA0ODpcdFx0XHRwcl93YXJuKFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIGF0aDEyayBXaS1GaSA3IFBDSSBkZXZpY2U6ICVkXFxuXCYjMzQ7LFxuICA0OTpcdFx0XHRcdHBjaV9lcnIpO1xuICA1MDpcdFxuICA1MTpcdFx0LyogSWYgYm90aCBmYWlsZWQsIHJldHVybiBvbmUgb2YgdGhlIGZhaWx1cmVzIChhcmJpdHJhcnkpICovXG4gIDUyOlx0XHRyZXR1cm4gYWhiX2VyciBcdTAwMjZcdTAwMjYgcGNpX2VyciA/IGFoYl9lcnIgOiAwO1xuICA1MzpcdH1cbiAgNTQ6XHRcbiAgNTU6XHRzdGF0aWMgdm9pZCBhdGgxMmtfd2lmaTdfZXhpdCh2b2lkKVxuICA1NjpcdHtcbiAgNTc6XHRcdGlmICghcGNpX2VycilcbiAgNTg6XHRcdFx0YXRoMTJrX3dpZmk3X3BjaV9leGl0KCk7XG4gIDU5Olx0XG4gIDYwOlx0XHRpZiAoIWFoYl9lcnIpXG4gIDYxOlx0XHRcdGF0aDEya193aWZpN19haGJfZXhpdCgpO1xuICA2MjpcdH1cbiAgNjM6XHRcbiAgNjQ6XHRtb2R1bGVfaW5pdChhdGgxMmtfd2lmaTdfaW5pdCk7XG4gIDY1Olx0bW9kdWxlX2V4aXQoYXRoMTJrX3dpZmk3X2V4aXQpO1xuICA2NjpcdFxuICA2NzpcdE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtEcml2ZXIgc3VwcG9ydCBmb3IgUXVhbGNvbW0gVGVjaG5vbG9naWVzIDgwMi4xMWJlIFdMQU4gZGV2aWNlc1wmIzM0Oyk7XG4gIDY4Olx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7RHVhbCBCU0QvR1BMXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzM2CgkJCQkJCQlvdXRwdXQ6IDEyNQoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFZpcnR1YWxpemF0aW9uIENoYWxsZW5nZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgaW50byB0aGlzIGFuZCBJJiMzOTt2ZSBnb3QgYSBwcmV0dHkgZ29vZCBncmFzcCBvbiB3aGF0JiMzOTtzIGhhcHBlbmluZy4gTXkgbWFpbiBjb25jZXJuIGlzIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIHNldHVwIGlzIHJlZ2lzdGVyaW5nIGJvdGggQUhCIGFuZCBQQ0kgZGV2aWNlcy4gUmlnaHQgYXdheSwgQUhCLCB0aGUgQWR2YW5jZWQgSGlnaC1wZXJmb3JtYW5jZSBCdXMsIHNob3V0cyAmIzM0O1N5c3RlbSBvbiBhIENoaXAgKFNvQykmIzM0OyBhdCBtZSDigJMgdGhpbmsgQVJNIGNvcmVzLCB0aGUgd29ya3MuIFRoaXMgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIGFyY2hpdGVjdHVyZS4KClRoZSBraWNrZXI/IEl0JiMzOTtzIGxvb2tpbmcgZm9yIFF1YWxjb21tIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgV2ktRmkgNywgYW5kIHRoYXQmIzM5O3MgdGhlIHJ1Yi4gU3RhbmRhcmQgUUVNVSwgdGhlIHZpcnR1YWxpemF0aW9uIHRvb2wgd2UmIzM5O3JlIHVzaW5nLCBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoYXQgbGV2ZWwgb2YgZGV0YWlsLCBlc3BlY2lhbGx5IHRoZSBzcGVjaWZpY3Mgb2YgUXVhbGNvbW0mIzM5O3MgcHJvcHJpZXRhcnkgc2lsaWNvbi4gVGhlcmVmb3JlLCB0aGUgZXNzZW50aWFsIGRhdGEgcGF0aCwgc3BlY2lmaWNhbGx5IHRoZSB0cmFuc21pdCAoVFgpIHBhdGgsIGlzIHNpbXBseSB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBJdCBpcyB0b28gc3BlY2lmaWMuCgpHaXZlbiB0aGlzIGluaGVyZW50IGxpbWl0YXRpb24sIGF0dGVtcHRpbmcgYW55IGZ1cnRoZXIgZnV6emluZyBlZmZvcnRzIGhlcmUgd291bGQgYmUgZnV0aWxlLiBJdCYjMzk7cyB0aW1lIHRvIG1hcmsgdGhpcyBhcyBhIGRlYWQgZW5kLCB1bmZvcnR1bmF0ZWx5LiBTbywgSSB3aWxsIGJlIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRpbWUgdG8gbW92ZSBvbiBhbmQgZmluZCBhIG1vcmUgZnJ1aXRmdWwgYXZlbnVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkYXRhIHRyYW5zbWl0IHBhdGggKGRwX3R4KSBvZiB0aGUgYXRoMTJrIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIGZvciBRdWFsY29tbSBXaS1GaSA3IFBDSWUvQUhCIGRldmljZXMuIFNpbmNlIHRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIHRoZSBkZXZpY2UgY2Fubm90IGJlIHN1Y2Nlc3NmdWxseSBwcm9iZWQsIGZpcm13YXJlIGNhbm5vdCBiZSBsb2FkZWQsIGFuZCB0aGUgbmV0d29yayBpbnRlcmZhY2UgY2Fubm90IGJlIGJyb3VnaHQgdXAgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgdHJhbnNtaXQgcGF0aCBpcyB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkYXRhIHRyYW5zbWl0IHBhdGggKGRwX3R4KSBvZiB0aGUgYXRoMTJrIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIGZvciBRdWFsY29tbSBXaS1GaSA3IFBDSWUvQUhCIGRldmljZXMuIFNpbmNlIHRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIHRoZSBkZXZpY2UgY2Fubm90IGJlIHN1Y2Nlc3NmdWxseSBwcm9iZWQsIGZpcm13YXJlIGNhbm5vdCBiZSBsb2FkZWQsIGFuZCB0aGUgbmV0d29yayBpbnRlcmZhY2UgY2Fubm90IGJlIGJyb3VnaHQgdXAgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgdHJhbnNtaXQgcGF0aCBpcyB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjo0NDozMi4xMDEzMDY2NTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODE2NzY3Mjg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRhdGEgdHJhbnNtaXQgcGF0aCAoZHBfdHgpIG9mIHRoZSBhdGgxMmsgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgZm9yIFF1YWxjb21tIFdpLUZpIDcgUENJZS9BSEIgZGV2aWNlcy4gU2luY2UgdGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgdGhlIGRldmljZSBjYW5ub3QgYmUgc3VjY2Vzc2Z1bGx5IHByb2JlZCwgZmlybXdhcmUgY2Fubm90IGJlIGxvYWRlZCwgYW5kIHRoZSBuZXR3b3JrIGludGVyZmFjZSBjYW5ub3QgYmUgYnJvdWdodCB1cCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCB0cmFuc21pdCBwYXRoIGlzIHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6NDQ6MzIuMTAxMzEzODU3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTE1MjE3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjYjI4NTFhZTg2MjdmYzIyMzA1ZGEzZDA3YzdhNWVhNzM2YWQzZTU5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMxIDAyOjQ0OjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguY1xcbmluZGV4IGMxMGRhNjE5NWM5YzMuLjk2NDRmOWVmMmM3NDkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jXFxuQEAgLTgyLDYgKzgyLDUyIEBAIGVudW0gaGFsX2VuY3J5cHRfdHlwZSBhdGgxMmtfZHBfdHhfZ2V0X2VuY3J5cHRfdHlwZSh1MzIgY2lwaGVyKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0woYXRoMTJrX2RwX3R4X2dldF9lbmNyeXB0X3R5cGUpO1xcbiBcXG4rdTggYXRoMTJrX2RwX3R4X2NyeXB0b19pdl9sZW4oZW51bSBoYWxfZW5jcnlwdF90eXBlIGVuY190eXBlKVxcbit7XFxuK1xcdHN3aXRjaCAoZW5jX3R5cGUpIHtcXG4rXFx0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX1RLSVBfTk9fTUlDOlxcbitcXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfVEtJUF9NSUM6XFxuK1xcdFxcdHJldHVybiBJRUVFODAyMTFfVEtJUF9JVl9MRU47XFxuK1xcdGNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9DQ01QXzEyODpcXG4rXFx0XFx0cmV0dXJuIElFRUU4MDIxMV9DQ01QX0hEUl9MRU47XFxuK1xcdGNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9DQ01QXzI1NjpcXG4rXFx0XFx0cmV0dXJuIElFRUU4MDIxMV9DQ01QXzI1Nl9IRFJfTEVOO1xcbitcXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfR0NNUF8xMjg6XFxuK1xcdGNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9BRVNfR0NNUF8yNTY6XFxuK1xcdFxcdHJldHVybiBJRUVFODAyMTFfR0NNUF9IRFJfTEVOO1xcbitcXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfV0VQXzQwOlxcbitcXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfV0VQXzEwNDpcXG4rXFx0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX1dFUF8xMjg6XFxuK1xcdFxcdHJldHVybiBJRUVFODAyMTFfV0VQX0lWX0xFTjtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rfVxcbitFWFBPUlRfU1lNQk9MKGF0aDEya19kcF90eF9jcnlwdG9faXZfbGVuKTtcXG4rXFxuK3U4IGF0aDEya19kcF90eF9jcnlwdG9faWN2X2xlbihlbnVtIGhhbF9lbmNyeXB0X3R5cGUgZW5jX3R5cGUpXFxuK3tcXG4rXFx0c3dpdGNoIChlbmNfdHlwZSkge1xcbitcXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfQ0NNUF8xMjg6XFxuK1xcdFxcdHJldHVybiBJRUVFODAyMTFfQ0NNUF9NSUNfTEVOO1xcbitcXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfQ0NNUF8yNTY6XFxuK1xcdFxcdHJldHVybiBJRUVFODAyMTFfQ0NNUF8yNTZfTUlDX0xFTjtcXG4rXFx0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX0dDTVBfMTI4OlxcbitcXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfQUVTX0dDTVBfMjU2OlxcbitcXHRcXHRyZXR1cm4gSUVFRTgwMjExX0dDTVBfTUlDX0xFTjtcXG4rXFx0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX1RLSVBfTk9fTUlDOlxcbitcXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfVEtJUF9NSUM6XFxuK1xcdFxcdHJldHVybiBJRUVFODAyMTFfVEtJUF9JQ1ZfTEVOO1xcbitcXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfV0VQXzQwOlxcbitcXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfV0VQXzEwNDpcXG4rXFx0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX1dFUF8xMjg6XFxuK1xcdFxcdHJldHVybiBJRUVFODAyMTFfV0VQX0lDVl9MRU47XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK31cXG4rRVhQT1JUX1NZTUJPTChhdGgxMmtfZHBfdHhfY3J5cHRvX2ljdl9sZW4pO1xcbitcXG4gdm9pZCBhdGgxMmtfZHBfdHhfcmVsZWFzZV90eGJ1ZihzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IGF0aDEya190eF9kZXNjX2luZm8gKnR4X2Rlc2MsXFxuIFxcdFxcdFxcdFxcdHU4IHBvb2xfaWQpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguaFxcbmluZGV4IDdjZWYyMDU0MDE3OWYuLjFhZjc5YWYyYWRhMjYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5oXFxuQEAgLTE5LDYgKzE5LDggQEAgZW51bSBoYWxfdGNsX2VuY2FwX3R5cGVcXG4gYXRoMTJrX2RwX3R4X2dldF9lbmNhcF90eXBlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHN0cnVjdCBza19idWZmICpza2IpO1xcbiB2b2lkIGF0aDEya19kcF90eF9lbmNhcF9ud2lmaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gdTggYXRoMTJrX2RwX3R4X2dldF90aWQoc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuK3U4IGF0aDEya19kcF90eF9jcnlwdG9faXZfbGVuKGVudW0gaGFsX2VuY3J5cHRfdHlwZSBlbmNfdHlwZSk7XFxuK3U4IGF0aDEya19kcF90eF9jcnlwdG9faWN2X2xlbihlbnVtIGhhbF9lbmNyeXB0X3R5cGUgZW5jX3R5cGUpO1xcbiB2b2lkICphdGgxMmtfZHBfbWV0YWRhdGFfYWxpZ25fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHU4IHRhaWxfbGVuKTtcXG4gaW50IGF0aDEya19kcF90eF9hbGlnbl9wYXlsb2FkKHN0cnVjdCBhdGgxMmtfZHAgKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpO1xcbiB2b2lkIGF0aDEya19kcF90eF9yZWxlYXNlX3R4YnVmKHN0cnVjdCBhdGgxMmtfZHAgKmRwLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmNcXG5pbmRleCBkMjc0OWRlNDQ1NTM0Li41ODdkNThlZWNjZmE1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguY1xcbkBAIC0xMyw2ICsxMyw0OSBAQFxcbiAjaW5jbHVkZSBcXFwiaGFsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJoYWxfdHguaFxcXCJcXG4gXFxuKy8qXFxuKyAqIENvbnZlcnQgYW4gZW5jcnlwdGVkIEVBUE9MIGZyYW1lIGZyb20gbmF0aXZlLVdpRmkgZm9ybWF0IHRvXFxuKyAqIHRoZSBsYXlvdXQgZXhwZWN0ZWQgYnkgdGhlIGZpcm13YXJlIFJBVyBlbmNyeXB0IHBpcGVsaW5lOlxcbisgKlxcbisgKiAgIFs4MDIuMTEgaGRyXVtJViAoemVyb2VkKV1bTExDL1NOQVBdW0VBUE9MIHBheWxvYWRdW0lDViAoemVyb2VkKV1cXG4rICpcXG4rICogbWFjODAyMTEgZGVsaXZlcnMgdGhlIGZyYW1lIGFzIFs4MDIuMTEgaGRyXVtMTEMvU05BUF1bRUFQT0wgcGF5bG9hZF0uXFxuKyAqIFRoZSBNQUMgaGVhZGVyIGxlbmd0aCBpcyByZWFkIGZyb20gdGhlIHVubW9kaWZpZWQgc2tiIGFuZCBpcyBzYWZlIGJlY2F1c2VcXG4rICogaWVlZTgwMjExX2hkcmxlbigpIG9ubHkgaW5zcGVjdHMgdGhlIDItYnl0ZSBmcmFtZV9jb250cm9sIGZpZWxkLlxcbisgKiBwc2tiX2V4cGFuZF9oZWFkKCkgaXMgdXNlZCB0byBncm93IGJvdGggaGVhZCAoZm9yIHRoZSBJVikgYW5kIHRhaWxcXG4rICogKGZvciB0aGUgSUNWKSBpbiBhIHNpbmdsZSBjYWxsIGFuZCBhbGxvY2F0aW9uLlxcbisgKi9cXG4rc3RhdGljIGludFxcbithdGgxMmtfd2lmaTdfZHBfdHhfZW5jYXBfZWFwb2woc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBoYWxfdHhfaW5mbyAqdGksXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9jYiAqc2tiX2NiKVxcbit7XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItXFx1MDAzZWRhdGE7XFxuK1xcdGVudW0gaGFsX2VuY3J5cHRfdHlwZSBlbmNfdHlwZSA9XFxuK1xcdFxcdFxcdFxcdGF0aDEya19kcF90eF9nZXRfZW5jcnlwdF90eXBlKHNrYl9jYi1cXHUwMDNlY2lwaGVyKTtcXG4rXFx0dTE2IG1hY19oZHJfbGVuID0gaWVlZTgwMjExX2hkcmxlbihoZHItXFx1MDAzZWZyYW1lX2NvbnRyb2wpO1xcbitcXHR1OCBpdl9sZW4gPSBhdGgxMmtfZHBfdHhfY3J5cHRvX2l2X2xlbihlbmNfdHlwZSk7XFxuK1xcdHU4IGljdl9sZW4gPSBhdGgxMmtfZHBfdHhfY3J5cHRvX2ljdl9sZW4oZW5jX3R5cGUpO1xcbitcXG4rXFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCBpdl9sZW4sIGljdl9sZW4sIEdGUF9BVE9NSUMpKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGlmIChpdl9sZW4pIHtcXG4rXFx0XFx0c2tiX3B1c2goc2tiLCBpdl9sZW4pO1xcbitcXHRcXHRtZW1tb3ZlKHNrYi1cXHUwMDNlZGF0YSwgc2tiLVxcdTAwM2VkYXRhICsgaXZfbGVuLCBtYWNfaGRyX2xlbik7XFxuK1xcdFxcdG1lbXNldChza2ItXFx1MDAzZWRhdGEgKyBtYWNfaGRyX2xlbiwgMCwgaXZfbGVuKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGljdl9sZW4pXFxuK1xcdFxcdG1lbXNldChza2JfcHV0KHNrYiwgaWN2X2xlbiksIDAsIGljdl9sZW4pO1xcbitcXG4rXFx0dGktXFx1MDAzZWZsYWdzMCB8PSB1MzJfZW5jb2RlX2JpdHMoMSwgSEFMX1RDTF9EQVRBX0NNRF9JTkZPMl9UT19GVyk7XFxuK1xcdHRpLVxcdTAwM2VlbmNhcF90eXBlID0gSEFMX1RDTF9FTkNBUF9UWVBFX1JBVztcXG4rXFx0dGktXFx1MDAzZWVuY3J5cHRfdHlwZSA9IGVuY190eXBlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkXFxuIGF0aDEya193aWZpN19oYWxfdHhfY21kX2V4dF9kZXNjX3NldHVwKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaGFsX3R4X21zZHVfZXh0X2Rlc2MgKnRjbF9leHRfY21kLFxcbkBAIC05MSw2ICsxMzQsNyBAQCBpbnQgYXRoMTJrX3dpZmk3X2RwX3R4KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYVxcbiBcXHR1MzIgaW92YV9tYXNrID0gZHAtXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlaW92YV9tYXNrO1xcbiBcXHRib29sIGlzX2RpZmZfZW5jYXAgPSBmYWxzZTtcXG4gXFx0Ym9vbCBpc19udWxsX2ZyYW1lID0gZmFsc2U7XFxuK1xcdGJvb2wgZWFwb2xfZW5jYXBfZG9uZSA9IGZhbHNlO1xcbiBcXG4gXFx0aWYgKHRlc3RfYml0KEFUSDEyS19GTEFHX0NSQVNIX0ZMVVNILCBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncykpXFxuIFxcdFxcdHJldHVybiAtRVNIVVRET1dOO1xcbkBAIC0yMTEsOSArMjU1LDI3IEBAIGludCBhdGgxMmtfd2lmaTdfZHBfdHgoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LCBzdHJ1Y3QgYXRoMTJrX2xpbmtfdmlmICphXFxuIFxcdGNhc2UgSEFMX1RDTF9FTkNBUF9UWVBFX05BVElWRV9XSUZJOlxcbiBcXHRcXHRpc19udWxsX2ZyYW1lID0gaWVlZTgwMjExX2lzX251bGxmdW5jKGhkci1cXHUwMDNlZnJhbWVfY29udHJvbCk7XFxuIFxcdFxcdGlmIChhaHZpZi1cXHUwMDNldmlmLVxcdTAwM2VvZmZsb2FkX2ZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX09GRkxPQURfRU5DQVBfRU5BQkxFRCkge1xcbi1cXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9QQUUpIHx8IGlzX251bGxfZnJhbWUpXFxuK1xcdFxcdFxcdGlmICgoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9QQUUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAgIShza2JfY2ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgQVRIMTJLX1NLQl9DSVBIRVJfU0VUKSkgfHwgaXNfbnVsbF9mcmFtZSlcXG4gXFx0XFx0XFx0XFx0aXNfZGlmZl9lbmNhcCA9IHRydWU7XFxuIFxcbitcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9QQUUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAoc2tiX2NiLVxcdTAwM2VmbGFncyBcXHUwMDI2IEFUSDEyS19TS0JfQ0lQSEVSX1NFVCkpIHtcXG4rXFx0XFx0XFx0XFx0aWYgKCFlYXBvbF9lbmNhcF9kb25lKSB7XFxuK1xcdFxcdFxcdFxcdFxcdHJldCA9IGF0aDEya193aWZpN19kcF90eF9lbmNhcF9lYXBvbChza2IsIFxcdTAwMjZ0aSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBza2JfY2IpO1xcbitcXHRcXHRcXHRcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIGZhaWxfcmVtb3ZlX3R4X2J1ZjtcXG4rXFx0XFx0XFx0XFx0XFx0aGRyID0gKHZvaWQgKilza2ItXFx1MDAzZWRhdGE7XFxuK1xcdFxcdFxcdFxcdFxcdGVhcG9sX2VuY2FwX2RvbmUgPSB0cnVlO1xcbitcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHRcXHR0aS5mbGFnczAgfD0gdTMyX2VuY29kZV9iaXRzKDEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdEhBTF9UQ0xfREFUQV9DTURfSU5GTzJfVE9fRlcpO1xcbitcXHRcXHRcXHRcXHRcXHR0aS5lbmNhcF90eXBlID0gSEFMX1RDTF9FTkNBUF9UWVBFX1JBVztcXG4rXFx0XFx0XFx0XFx0XFx0dGkuZW5jcnlwdF90eXBlID1cXG4rXFx0XFx0XFx0XFx0XFx0XFx0YXRoMTJrX2RwX3R4X2dldF9lbmNyeXB0X3R5cGUoc2tiX2NiLVxcdTAwM2VjaXBoZXIpO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0LyogRmlybXdhcmUgZXhwZWN0cyBtc2R1IGV4dCBkZXNjcmlwdG9yIGZvciBud2lmaS9yYXcgcGFja2V0c1xcbiBcXHRcXHRcXHQgKiByZWNlaXZlZCBpbiBFVEggbW9kZS4gV2l0aG91dCB0aGlzLCBvYnNlcnZlZCB0eCBmYWlsIGZvclxcbiBcXHRcXHRcXHQgKiBNdWx0aWNhc3QgcGFja2V0cyBpbiBFVEggbW9kZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6NDQ6MzIuNTkzODQyNzM5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Mjc2NzUxMjcyMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkYXRhIHRyYW5zbWl0IHBhdGggKGRwX3R4KSBvZiB0aGUgYXRoMTJrIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIGZvciBRdWFsY29tbSBXaS1GaSA3IFBDSWUvQUhCIGRldmljZXMuIFNpbmNlIHRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIHRoZSBkZXZpY2UgY2Fubm90IGJlIHN1Y2Nlc3NmdWxseSBwcm9iZWQsIGZpcm13YXJlIGNhbm5vdCBiZSBsb2FkZWQsIGFuZCB0aGUgbmV0d29yayBpbnRlcmZhY2UgY2Fubm90IGJlIGJyb3VnaHQgdXAgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgdHJhbnNtaXQgcGF0aCBpcyB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNiMjg1MWFlODYyN2ZjMjIzMDVkYTNkMDdjN2E1ZWE3MzZhZDNlNTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAwMjo0NDozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguY1xuaW5kZXggYzEwZGE2MTk1YzljMy4uOTY0NGY5ZWYyYzc0OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jXG5AQCAtODIsNiArODIsNTIgQEAgZW51bSBoYWxfZW5jcnlwdF90eXBlIGF0aDEya19kcF90eF9nZXRfZW5jcnlwdF90eXBlKHUzMiBjaXBoZXIpXG4gfVxuIEVYUE9SVF9TWU1CT0woYXRoMTJrX2RwX3R4X2dldF9lbmNyeXB0X3R5cGUpO1xuIFxuK3U4IGF0aDEya19kcF90eF9jcnlwdG9faXZfbGVuKGVudW0gaGFsX2VuY3J5cHRfdHlwZSBlbmNfdHlwZSlcbit7XG4rXHRzd2l0Y2ggKGVuY190eXBlKSB7XG4rXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfVEtJUF9OT19NSUM6XG4rXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfVEtJUF9NSUM6XG4rXHRcdHJldHVybiBJRUVFODAyMTFfVEtJUF9JVl9MRU47XG4rXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfQ0NNUF8xMjg6XG4rXHRcdHJldHVybiBJRUVFODAyMTFfQ0NNUF9IRFJfTEVOO1xuK1x0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX0NDTVBfMjU2OlxuK1x0XHRyZXR1cm4gSUVFRTgwMjExX0NDTVBfMjU2X0hEUl9MRU47XG4rXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfR0NNUF8xMjg6XG4rXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfQUVTX0dDTVBfMjU2OlxuK1x0XHRyZXR1cm4gSUVFRTgwMjExX0dDTVBfSERSX0xFTjtcbitcdGNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9XRVBfNDA6XG4rXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfV0VQXzEwNDpcbitcdGNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9XRVBfMTI4OlxuK1x0XHRyZXR1cm4gSUVFRTgwMjExX1dFUF9JVl9MRU47XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gMDtcbitcdH1cbit9XG4rRVhQT1JUX1NZTUJPTChhdGgxMmtfZHBfdHhfY3J5cHRvX2l2X2xlbik7XG4rXG4rdTggYXRoMTJrX2RwX3R4X2NyeXB0b19pY3ZfbGVuKGVudW0gaGFsX2VuY3J5cHRfdHlwZSBlbmNfdHlwZSlcbit7XG4rXHRzd2l0Y2ggKGVuY190eXBlKSB7XG4rXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfQ0NNUF8xMjg6XG4rXHRcdHJldHVybiBJRUVFODAyMTFfQ0NNUF9NSUNfTEVOO1xuK1x0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX0NDTVBfMjU2OlxuK1x0XHRyZXR1cm4gSUVFRTgwMjExX0NDTVBfMjU2X01JQ19MRU47XG4rXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfR0NNUF8xMjg6XG4rXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfQUVTX0dDTVBfMjU2OlxuK1x0XHRyZXR1cm4gSUVFRTgwMjExX0dDTVBfTUlDX0xFTjtcbitcdGNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9US0lQX05PX01JQzpcbitcdGNhc2UgSEFMX0VOQ1JZUFRfVFlQRV9US0lQX01JQzpcbitcdFx0cmV0dXJuIElFRUU4MDIxMV9US0lQX0lDVl9MRU47XG4rXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfV0VQXzQwOlxuK1x0Y2FzZSBIQUxfRU5DUllQVF9UWVBFX1dFUF8xMDQ6XG4rXHRjYXNlIEhBTF9FTkNSWVBUX1RZUEVfV0VQXzEyODpcbitcdFx0cmV0dXJuIElFRUU4MDIxMV9XRVBfSUNWX0xFTjtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK31cbitFWFBPUlRfU1lNQk9MKGF0aDEya19kcF90eF9jcnlwdG9faWN2X2xlbik7XG4rXG4gdm9pZCBhdGgxMmtfZHBfdHhfcmVsZWFzZV90eGJ1ZihzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcbiBcdFx0XHRcdHN0cnVjdCBhdGgxMmtfdHhfZGVzY19pbmZvICp0eF9kZXNjLFxuIFx0XHRcdFx0dTggcG9vbF9pZClcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3R4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3R4LmhcbmluZGV4IDdjZWYyMDU0MDE3OWYuLjFhZjc5YWYyYWRhMjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3R4LmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguaFxuQEAgLTE5LDYgKzE5LDggQEAgZW51bSBoYWxfdGNsX2VuY2FwX3R5cGVcbiBhdGgxMmtfZHBfdHhfZ2V0X2VuY2FwX3R5cGUoc3RydWN0IGF0aDEya19iYXNlICphYiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gdm9pZCBhdGgxMmtfZHBfdHhfZW5jYXBfbndpZmkoc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gdTggYXRoMTJrX2RwX3R4X2dldF90aWQoc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4rdTggYXRoMTJrX2RwX3R4X2NyeXB0b19pdl9sZW4oZW51bSBoYWxfZW5jcnlwdF90eXBlIGVuY190eXBlKTtcbit1OCBhdGgxMmtfZHBfdHhfY3J5cHRvX2ljdl9sZW4oZW51bSBoYWxfZW5jcnlwdF90eXBlIGVuY190eXBlKTtcbiB2b2lkICphdGgxMmtfZHBfbWV0YWRhdGFfYWxpZ25fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHU4IHRhaWxfbGVuKTtcbiBpbnQgYXRoMTJrX2RwX3R4X2FsaWduX3BheWxvYWQoc3RydWN0IGF0aDEya19kcCAqZHAsIHN0cnVjdCBza19idWZmICoqcHNrYik7XG4gdm9pZCBhdGgxMmtfZHBfdHhfcmVsZWFzZV90eGJ1ZihzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmNcbmluZGV4IGQyNzQ5ZGU0NDU1MzQuLjU4N2Q1OGVlY2NmYTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguY1xuQEAgLTEzLDYgKzEzLDQ5IEBAXG4gI2luY2x1ZGUgXCJoYWwuaFwiXG4gI2luY2x1ZGUgXCJoYWxfdHguaFwiXG4gXG4rLypcbisgKiBDb252ZXJ0IGFuIGVuY3J5cHRlZCBFQVBPTCBmcmFtZSBmcm9tIG5hdGl2ZS1XaUZpIGZvcm1hdCB0b1xuKyAqIHRoZSBsYXlvdXQgZXhwZWN0ZWQgYnkgdGhlIGZpcm13YXJlIFJBVyBlbmNyeXB0IHBpcGVsaW5lOlxuKyAqXG4rICogICBbODAyLjExIGhkcl1bSVYgKHplcm9lZCldW0xMQy9TTkFQXVtFQVBPTCBwYXlsb2FkXVtJQ1YgKHplcm9lZCldXG4rICpcbisgKiBtYWM4MDIxMSBkZWxpdmVycyB0aGUgZnJhbWUgYXMgWzgwMi4xMSBoZHJdW0xMQy9TTkFQXVtFQVBPTCBwYXlsb2FkXS5cbisgKiBUaGUgTUFDIGhlYWRlciBsZW5ndGggaXMgcmVhZCBmcm9tIHRoZSB1bm1vZGlmaWVkIHNrYiBhbmQgaXMgc2FmZSBiZWNhdXNlXG4rICogaWVlZTgwMjExX2hkcmxlbigpIG9ubHkgaW5zcGVjdHMgdGhlIDItYnl0ZSBmcmFtZV9jb250cm9sIGZpZWxkLlxuKyAqIHBza2JfZXhwYW5kX2hlYWQoKSBpcyB1c2VkIHRvIGdyb3cgYm90aCBoZWFkIChmb3IgdGhlIElWKSBhbmQgdGFpbFxuKyAqIChmb3IgdGhlIElDVikgaW4gYSBzaW5nbGUgY2FsbCBhbmQgYWxsb2NhdGlvbi5cbisgKi9cbitzdGF0aWMgaW50XG4rYXRoMTJrX3dpZmk3X2RwX3R4X2VuY2FwX2VhcG9sKHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBoYWxfdHhfaW5mbyAqdGksXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBhdGgxMmtfc2tiX2NiICpza2JfY2IpXG4re1xuK1x0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi1cdTAwM2VkYXRhO1xuK1x0ZW51bSBoYWxfZW5jcnlwdF90eXBlIGVuY190eXBlID1cbitcdFx0XHRcdGF0aDEya19kcF90eF9nZXRfZW5jcnlwdF90eXBlKHNrYl9jYi1cdTAwM2VjaXBoZXIpO1xuK1x0dTE2IG1hY19oZHJfbGVuID0gaWVlZTgwMjExX2hkcmxlbihoZHItXHUwMDNlZnJhbWVfY29udHJvbCk7XG4rXHR1OCBpdl9sZW4gPSBhdGgxMmtfZHBfdHhfY3J5cHRvX2l2X2xlbihlbmNfdHlwZSk7XG4rXHR1OCBpY3ZfbGVuID0gYXRoMTJrX2RwX3R4X2NyeXB0b19pY3ZfbGVuKGVuY190eXBlKTtcbitcbitcdGlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgaXZfbGVuLCBpY3ZfbGVuLCBHRlBfQVRPTUlDKSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRpZiAoaXZfbGVuKSB7XG4rXHRcdHNrYl9wdXNoKHNrYiwgaXZfbGVuKTtcbitcdFx0bWVtbW92ZShza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWRhdGEgKyBpdl9sZW4sIG1hY19oZHJfbGVuKTtcbitcdFx0bWVtc2V0KHNrYi1cdTAwM2VkYXRhICsgbWFjX2hkcl9sZW4sIDAsIGl2X2xlbik7XG4rXHR9XG4rXG4rXHRpZiAoaWN2X2xlbilcbitcdFx0bWVtc2V0KHNrYl9wdXQoc2tiLCBpY3ZfbGVuKSwgMCwgaWN2X2xlbik7XG4rXG4rXHR0aS1cdTAwM2VmbGFnczAgfD0gdTMyX2VuY29kZV9iaXRzKDEsIEhBTF9UQ0xfREFUQV9DTURfSU5GTzJfVE9fRlcpO1xuK1x0dGktXHUwMDNlZW5jYXBfdHlwZSA9IEhBTF9UQ0xfRU5DQVBfVFlQRV9SQVc7XG4rXHR0aS1cdTAwM2VlbmNyeXB0X3R5cGUgPSBlbmNfdHlwZTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgdm9pZFxuIGF0aDEya193aWZpN19oYWxfdHhfY21kX2V4dF9kZXNjX3NldHVwKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGhhbF90eF9tc2R1X2V4dF9kZXNjICp0Y2xfZXh0X2NtZCxcbkBAIC05MSw2ICsxMzQsNyBAQCBpbnQgYXRoMTJrX3dpZmk3X2RwX3R4KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYVxuIFx0dTMyIGlvdmFfbWFzayA9IGRwLVx1MDAzZWh3X3BhcmFtcy1cdTAwM2Vpb3ZhX21hc2s7XG4gXHRib29sIGlzX2RpZmZfZW5jYXAgPSBmYWxzZTtcbiBcdGJvb2wgaXNfbnVsbF9mcmFtZSA9IGZhbHNlO1xuK1x0Ym9vbCBlYXBvbF9lbmNhcF9kb25lID0gZmFsc2U7XG4gXG4gXHRpZiAodGVzdF9iaXQoQVRIMTJLX0ZMQUdfQ1JBU0hfRkxVU0gsIFx1MDAyNmFiLVx1MDAzZWRldl9mbGFncykpXG4gXHRcdHJldHVybiAtRVNIVVRET1dOO1xuQEAgLTIxMSw5ICsyNTUsMjcgQEAgaW50IGF0aDEya193aWZpN19kcF90eChzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsIHN0cnVjdCBhdGgxMmtfbGlua192aWYgKmFcbiBcdGNhc2UgSEFMX1RDTF9FTkNBUF9UWVBFX05BVElWRV9XSUZJOlxuIFx0XHRpc19udWxsX2ZyYW1lID0gaWVlZTgwMjExX2lzX251bGxmdW5jKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKTtcbiBcdFx0aWYgKGFodmlmLVx1MDAzZXZpZi1cdTAwM2VvZmZsb2FkX2ZsYWdzIFx1MDAyNiBJRUVFODAyMTFfT0ZGTE9BRF9FTkNBUF9FTkFCTEVEKSB7XG4tXHRcdFx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9QQUUpIHx8IGlzX251bGxfZnJhbWUpXG4rXHRcdFx0aWYgKChza2ItXHUwMDNlcHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfUEFFKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgICEoc2tiX2NiLVx1MDAzZWZsYWdzIFx1MDAyNiBBVEgxMktfU0tCX0NJUEhFUl9TRVQpKSB8fCBpc19udWxsX2ZyYW1lKVxuIFx0XHRcdFx0aXNfZGlmZl9lbmNhcCA9IHRydWU7XG4gXG4rXHRcdFx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9QQUUpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAoc2tiX2NiLVx1MDAzZWZsYWdzIFx1MDAyNiBBVEgxMktfU0tCX0NJUEhFUl9TRVQpKSB7XG4rXHRcdFx0XHRpZiAoIWVhcG9sX2VuY2FwX2RvbmUpIHtcbitcdFx0XHRcdFx0cmV0ID0gYXRoMTJrX3dpZmk3X2RwX3R4X2VuY2FwX2VhcG9sKHNrYiwgXHUwMDI2dGksXG4rXHRcdFx0XHRcdFx0XHRcdFx0ICAgICBza2JfY2IpO1xuK1x0XHRcdFx0XHRpZiAocmV0KVxuK1x0XHRcdFx0XHRcdGdvdG8gZmFpbF9yZW1vdmVfdHhfYnVmO1xuK1x0XHRcdFx0XHRoZHIgPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhO1xuK1x0XHRcdFx0XHRlYXBvbF9lbmNhcF9kb25lID0gdHJ1ZTtcbitcdFx0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRcdHRpLmZsYWdzMCB8PSB1MzJfZW5jb2RlX2JpdHMoMSxcbitcdFx0XHRcdFx0XHRcdEhBTF9UQ0xfREFUQV9DTURfSU5GTzJfVE9fRlcpO1xuK1x0XHRcdFx0XHR0aS5lbmNhcF90eXBlID0gSEFMX1RDTF9FTkNBUF9UWVBFX1JBVztcbitcdFx0XHRcdFx0dGkuZW5jcnlwdF90eXBlID1cbitcdFx0XHRcdFx0XHRhdGgxMmtfZHBfdHhfZ2V0X2VuY3J5cHRfdHlwZShza2JfY2ItXHUwMDNlY2lwaGVyKTtcbitcdFx0XHRcdH1cbitcdFx0XHR9XG4gXHRcdFx0LyogRmlybXdhcmUgZXhwZWN0cyBtc2R1IGV4dCBkZXNjcmlwdG9yIGZvciBud2lmaS9yYXcgcGFja2V0c1xuIFx0XHRcdCAqIHJlY2VpdmVkIGluIEVUSCBtb2RlLiBXaXRob3V0IHRoaXMsIG9ic2VydmVkIHR4IGZhaWwgZm9yXG4gXHRcdFx0ICogTXVsdGljYXN0IHBhY2tldHMgaW4gRVRIIG1vZGUuXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjo0NDozMi41OTM4NDUwODlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDk5OTk5NjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGFuIGF0aDEyayBQYXRjaCBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIGBhdGgxMmtgIGRyaXZlci4gSXQncyBtb2RpZnlpbmcgYGRwX3R4LmNgLCBgZHBfdHguaGAsIGFuZCBgd2lmaTcvZHBfdHguY2AgYW5kIHNlZW1zIHRvIGJlIGFkZGluZyBmdW5jdGlvbnMgdG8gaGFuZGxlIElWL0lDViBsZW5ndGhzIGZvciBkaWZmZXJlbnQgZW5jcnlwdGlvbiB0eXBlcywgYXMgd2VsbCBhcyBtb2RpZnlpbmcgYGF0aDEya193aWZpN19kcF90eGAgdG8gZGVhbCB3aXRoIGVuY3J5cHRlZCBFQVBPTCBmcmFtZXMuIEJhc2ljYWxseSwgaXQncyBwcmVwcGluZyBmb3IgdGhlIGZpcm13YXJlJ3MgUkFXIGVuY3J5cHQgcGlwZWxpbmUuIFRoZSBjb3JlIG9mIHRoaXMgd29yayBzZWVtcyB0byBiZSBzZXR0aW5nIHVwIElWIGFuZCBJQ1YuXG5cblRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGNhbiBJIGV2ZW4gdGVzdCB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IGBhdGgxMmtgIGlzIGEgZHJpdmVyIGZvciBRdWFsY29tbSBXaS1GaSA3ICg4MDIuMTFiZSkgUENJZSBkZXZpY2VzLiBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGF0IHNwZWNpZmljIGhhcmR3YXJlLCBhdCBsZWFzdCBub3QgdGhhdCBJJ20gYXdhcmUgb2YuIEFuZCB3aGlsZSBgbWFjODAyMTFfaHdzaW1gIHByb3ZpZGVzIGEgV2lGaSBlbXVsYXRpb24sIGBhdGgxMmtgIGlzIHRpZWQgdG8gdGhlIGhhcmR3YXJlLiBUaGF0IG1ha2VzIHRlc3RpbmcgdHJpY2t5LlxuXG5UaGUgbmV4dCB0aGluZyBJJ2QgbG9vayBhdCBpcyBpZiBpdCdzIHBvc3NpYmxlIHRvIGZ1enogYGF0aDEya2AuIFBDSSBkcml2ZXJzIGFyZSBub3RvcmlvdXNseSBkaWZmaWN1bHQgdG8gZnV6eiBiZWNhdXNlIHRoZXkgcmVxdWlyZSBhIHJlYWwgZGV2aWNlLiBJdCdzIHVzdWFsbHkgb25seSBwb3NzaWJsZSBpZiB0aGVyZSBpcyBhbiBlbXVsYXRvciBvciBmb3IgVVNCIGRldmljZXMgd2l0aCBlbXVsYXRvcnMsIG9yIGlmIGl0J3MgYSB2aXJ0dWFsIGRyaXZlci4gQmVjYXVzZSBpdCdzIGEgUENJIGRyaXZlciwgSSB3aWxsIG5lZWQgdG8gY2hlY2sgd2hldGhlciBJIGNhbiBldmVuIGdldCBpdCB0byBydW4gaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LiBJIHNob3VsZCBjaGVjayB0aGUgZmlsZXMgcmVsYXRlZCB0byBQQ0kgZnVuY3Rpb25hbGl0eSBzdWNoIGFzIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jYC5cblxuSSdsbCB1c2UgYGdyZXBwZXJgIHRvIHNlZSBpZiBgYXRoMTJrYCBpcyBpbmRlZWQgYSBQQ0kgZHJpdmVyLiBUaGF0IHdpbGwgdGVsbCBtZSB3aGVyZSB0byBnbyBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzEwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6NDQ6MzkuMDkzODQ3NTY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTIyMjUwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfcmVnaXN0ZXJfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xODExPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBfX21heWJlX3VudXNlZCBhdGgxMmtfcGNpX3BtX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgxNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4MTg6aW50IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKGNvbnN0IGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgxOS1cXHRcXHRcXHQgICAgICAgc3RydWN0IGF0aDEya19wY2lfZHJpdmVyICpkcml2ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4NDQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODQ1OlxcdHJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKHBjaV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTg0Ni19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODQ3OkVYUE9SVF9TWU1CT0woYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTg0OC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmg9MTc2PXZvaWQgYXRoMTJrX3BjaV9wb3dlcl9kb3duKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGJvb2wgaXNfc3VzcGVuZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaDoxNzc6aW50IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKGNvbnN0IGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmgtMTc4LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3BjaV9kcml2ZXIgKmRyaXZlcik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jPTE5Nz1pbnQgYXRoMTJrX3dpZmk3X3BjaV9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jLTIwMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jOjIwMTpcXHRyZXQgPSBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcihBVEgxMktfREVWSUNFX0ZBTUlMWV9XSUZJNyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jLTIwMi1cXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmF0aDEya193aWZpN19wY2lfZHJpdmVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6NDQ6MzkuMjEzMDc2NjMxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY2MDc0MzM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9ZmFsc2U6IGF0aDEyayBhbmQgdGhlIExpbWl0YXRpb25zIG9mIFZpcnR1YWxpemF0aW9uKipcblxuT2theSwgc28gdGhpcyBpcyBhIFBDSSBkcml2ZXIsIHNwZWNpZmljYWxseSBgYXRoMTJrYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyB0aGVyZSAqYW55KiB3YXkgdG8gcmVhY2ggdGhlIGBhdGgxMmtfd2lmaTdfZHBfdHhgIGZ1bmN0aW9uIHdpdGhvdXQgYWN0dWFsIGhhcmR3YXJlPyBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgUENJIGRyaXZlcnMgZm9yIHNwZWNpZmljIGhhcmR3YXJlLCBsaWtlIFF1YWxjb21tIFdpLUZpLCBhcmUgbm90b3Jpb3VzbHkgZGlmZmljdWx0IHRvIGZ1enogaW4gUUVNVSBiZWNhdXNlIHRoZSBoYXJkd2FyZSBpc24ndCBlbXVsYXRlZC5cblxuVGhlbiBJIHBhdXNlZCDigJMgd2FpdCwgZG9lc24ndCBzeXprYWxsZXIgaGF2ZSBzb21ldGhpbmcgbGlrZSBgc3l6X3BjaV9kZXZpY2VgPyBSaWdodCwgaXQgKmRvZXMqLCBidXQgaXQncyBwcmV0dHkgbGltaXRlZC4gVXN1YWxseSwgd2l0aCB0aG9zZSwgeW91J3JlIGp1c3QgdGVzdGluZyB0aGUgcHJvYmUgYW5kIGluaXQgZnVuY3Rpb25zIHVubGVzcyB0aGUgZHJpdmVyIGhhcyBiZWVuIHNwZWNpZmljYWxseSBjYXRlcmVkIHRvLiBBbmQgYGF0aDEya2AgaXMgYSAqY29tcGxleCogV2ktRmkgZHJpdmVyLiBJdCBuZWVkcyBmaXJtd2FyZSBsb2FkZWQsIERNQSByaW5ncyBzZXQgdXAsIGEgd2hvbGUgaG9zdCBvZiB0aGluZ3MuXG5cblNvLCB0aGUgdHJhbnNtaXQgcGF0aCwgYGF0aDEya193aWZpN19kcF90eGAsIGlzIHdoYXQgSSdtIGludGVyZXN0ZWQgaW4gaGVyZS4gVG8gZ2V0IHRoZXJlLCB0aGUgZGV2aWNlIG5lZWRzIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSwgZmlybXdhcmUgbmVlZHMgdG8gbG9hZCwgdGhlIE1BQyBuZWVkcyB0byBiZSByZWdpc3RlcmVkLCB0aGUgaW50ZXJmYWNlIG5lZWRzIHRvIGJlIGJyb3VnaHQgdXAsIGFuZCB0aGVuIHlvdSBuZWVkIHRvIGFjdHVhbGx5ICpzZW5kKiBwYWNrZXRzLlxuXG5XaXRob3V0IHJlYWwgaGFyZHdhcmUgb3IgYSB2ZXJ5IHNvcGhpc3RpY2F0ZWQgaGFyZHdhcmUgZW11bGF0b3IsIHRoZSBgYXRoMTJrYCBwcm9iZSBpcyBnb2luZyB0byBmYWlsIHNwZWN0YWN1bGFybHkuIFJlYWRpbmcgUENJIGNvbmZpZyBzcGFjZSwgbWFwcGluZyBCQVJzLCBjb21tdW5pY2F0aW5nIHdpdGggdGhlIGZpcm13YXJlIOKAkyBpdCdzIGFsbCBnb2luZyB0byBiZSBhIGJyaWNrIHdhbGwuIFRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IGBhdGgxMmtfd2lmaTdfZHBfdHhgIGlzIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cbk5vdywgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIHRoZXJlJ3MgYW55IHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgYGF0aDEya2AgdGhhdCBJIG1pZ2h0IGhhdmUgbWlzc2VkLiBObywgYG1hYzgwMjExX2h3c2ltYCBpcyBnZW5lcmljIG1hYzgwMjExLCBub3QgdGhpcyBzcGVjaWZpYyBkcml2ZXIuIEl0J3MgYSBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIuXG5cblRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBpbnZvbHZlcyBjb2RlIGluIFwidmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCJcblxuYGF0aDEya2AgKmlzKiBhIHZlbmRvci1zcGVjaWZpYyAoUXVhbGNvbW0pIFBDSWUgV2ktRmkgZHJpdmVyLiBJdCBuZWVkcyB0aG9zZSBwaHlzaWNhbCBjYXJkcy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gc2F5IGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5MZXQgbWUgcXVpY2tseSB2ZXJpZnkg4oCTIGlzIHRoaXMgKm9ubHkqIFBDST8gSSdtIHN1cmUgSSd2ZSBzZWVuIG1lbnRpb25zIG9mIEFIQiBzdXBwb3J0IGZvciBgYXRoMTJrYC4gTmVlZCB0byBjaGVjayBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuY2Agb3Igc29tZXRoaW5nIHNpbWlsYXIsIGp1c3QgaW4gY2FzZS4gQnV0IG15IHByaW1hcnkgYXNzZXNzbWVudCBzdGFuZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxOTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6NDQ6NDcuODczODIyMjk2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1OTU0OTE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jPTU1PXN0YXRpYyB2b2lkIGF0aDEya193aWZpN19leGl0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYy02My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYzo2NDptb2R1bGVfaW5pdChhdGgxMmtfd2lmaTdfaW5pdCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmMtNjUtbW9kdWxlX2V4aXQoYXRoMTJrX3dpZmk3X2V4aXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjo0NDo0OC4yMzMzNzgyNDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjk1NjAyNjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCBkaXZpbmcgaW50byB0aGUgY29kZTpcblxuKipEaXZpbmcgRGVlcCBpbnRvIHRoZSBBdGhlcm9zIFdpRmkgNyBEcml2ZXIqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBpbml0aWFsaXphdGlvbiBvZiB0aGlzIGBhdGgxMmtgIGRyaXZlciwgcGFydGljdWxhcmx5IGhvdyBpdCByZWdpc3RlcnMgaXRzIGtleSBjb21wb25lbnRzLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiB0aGUgYHdpZmk3YCBhc3BlY3RzLCB3aGljaCBsaWtlbHkgZW5jb21wYXNzIHRoZSBuZXcgZmVhdHVyZXMgYW5kIGNhcGFiaWxpdGllcyBpbnRyb2R1Y2VkIHdpdGggdGhlIG5ld2VyIHN0YW5kYXJkLiBUaW1lIHRvIGNyYWNrIG9wZW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jYCBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhlIHJlZ2lzdHJhdGlvbiBsZXZlbC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBlc3NlbnRpYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgdGhhdCBhcmUgZ2V0dGluZyBob29rZWQgaW50byB0aGUga2VybmVsJ3Mgd2lyZWxlc3Mgc3Vic3lzdGVtLiBXaGF0IGFyZSB0aGUga2V5IGRldmljZSBmZWF0dXJlcywgcHJvdG9jb2xzLCBhbmQgcmVndWxhdG9yeSBlbGVtZW50cyBiZWluZyBtYWRlIGF2YWlsYWJsZT8gSSBleHBlY3QgdG8gc2VlIHRoZSByZWdpc3RyYXRpb24gb2YgaGFyZHdhcmUgaW50ZXJmYWNlcywgbmV0ZGV2IG9wZXJhdGlvbnMsIGFuZCBwZXJoYXBzIHBvd2VyIG1hbmFnZW1lbnQgaGFuZGxlcnMuIFRoaXMgd2lsbCBwcm92aWRlIGEgY3J1Y2lhbCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgYHdpZmk3YCBzdXBwb3J0IGlzIGJha2VkIGludG8gdGhlIGNvcmUgZHJpdmVyIGFyY2hpdGVjdHVyZS4gSXQncyB0aW1lIHRvIGZpbmQgdGhlIGJyZWFkY3J1bWJzIGFuZCB0cmFjZSB0aGUgZHJpdmVyJ3MgZm9vdHByaW50IHdpdGhpbiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDY5LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6NDQ6NTEuOTI4OTgyOTk1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTYyMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIxIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxcbiAgIDQ6XFx0ICogQ29weXJpZ2h0IChjKSBRdWFsY29tbSBUZWNobm9sb2dpZXMsIEluYy4gYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMuXFxuICAgNTpcXHQgKi9cXG4gICA2OlxcdFxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgIDg6XFx0I2luY2x1ZGUgXFxcIi4uL2FoYi5oXFxcIlxcbiAgIDk6XFx0I2luY2x1ZGUgXFxcIi4uL3BjaS5oXFxcIlxcbiAgMTA6XFx0I2luY2x1ZGUgXFxcInBjaS5oXFxcIlxcbiAgMTE6XFx0I2luY2x1ZGUgXFxcImFoYi5oXFxcIlxcbiAgMTI6XFx0I2luY2x1ZGUgXFxcImNvcmUuaFxcXCJcXG4gIDEzOlxcdCNpbmNsdWRlIFxcXCJkcC5oXFxcIlxcbiAgMTQ6XFx0I2luY2x1ZGUgXFxcIi4uL2RlYnVnLmhcXFwiXFxuICAxNTpcXHRcXG4gIDE2OlxcdHN0YXRpYyBpbnQgYWhiX2VyciwgcGNpX2VycjtcXG4gIDE3OlxcdFxcbiAgMTg6XFx0aW50IGF0aDEya193aWZpN19hcmNoX2luaXQoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4gIDE5OlxcdHtcXG4gIDIwOlxcdFxcdHN0cnVjdCBhdGgxMmtfZHAgKmRwO1xcbiAgMjE6XFx0XFxuICAyMjpcXHRcXHRkcCA9IGF0aDEya193aWZpN19kcF9kZXZpY2VfYWxsb2MoYWIpO1xcbiAgMjM6XFx0XFx0aWYgKCFkcCkge1xcbiAgMjQ6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImRwIGFsbG9jIGZhaWxlZFxcXCIpO1xcbiAgMjU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuICAyNjpcXHRcXHR9XFxuICAyNzpcXHRcXG4gIDI4OlxcdFxcdGFiLVxcdTAwM2VkcCA9IGRwO1xcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHRyZXR1cm4gMDtcXG4gIDMxOlxcdH1cXG4gIDMyOlxcdFxcbiAgMzM6XFx0dm9pZCBhdGgxMmtfd2lmaTdfYXJjaF9kZWluaXQoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4gIDM0OlxcdHtcXG4gIDM1OlxcdFxcdGF0aDEya193aWZpN19kcF9kZXZpY2VfZnJlZShhYi1cXHUwMDNlZHApO1xcbiAgMzY6XFx0XFx0YWItXFx1MDAzZWRwID0gTlVMTDtcXG4gIDM3OlxcdH1cXG4gIDM4OlxcdFxcbiAgMzk6XFx0c3RhdGljIGludCBhdGgxMmtfd2lmaTdfaW5pdCh2b2lkKVxcbiAgNDA6XFx0e1xcbiAgNDE6XFx0XFx0YWhiX2VyciA9IGF0aDEya193aWZpN19haGJfaW5pdCgpO1xcbiAgNDI6XFx0XFx0aWYgKGFoYl9lcnIpXFxuICA0MzpcXHRcXHRcXHRwcl93YXJuKFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBhdGgxMmsgV2ktRmkgNyBBSEIgZGV2aWNlOiAlZFxcXFxuXFxcIixcXG4gIDQ0OlxcdFxcdFxcdFxcdGFoYl9lcnIpO1xcbiAgNDU6XFx0XFxuICA0NjpcXHRcXHRwY2lfZXJyID0gYXRoMTJrX3dpZmk3X3BjaV9pbml0KCk7XFxuICA0NzpcXHRcXHRpZiAocGNpX2VycilcXG4gIDQ4OlxcdFxcdFxcdHByX3dhcm4oXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIGF0aDEyayBXaS1GaSA3IFBDSSBkZXZpY2U6ICVkXFxcXG5cXFwiLFxcbiAgNDk6XFx0XFx0XFx0XFx0cGNpX2Vycik7XFxuICA1MDpcXHRcXG4gIDUxOlxcdFxcdC8qIElmIGJvdGggZmFpbGVkLCByZXR1cm4gb25lIG9mIHRoZSBmYWlsdXJlcyAoYXJiaXRyYXJ5KSAqL1xcbiAgNTI6XFx0XFx0cmV0dXJuIGFoYl9lcnIgXFx1MDAyNlxcdTAwMjYgcGNpX2VyciA/IGFoYl9lcnIgOiAwO1xcbiAgNTM6XFx0fVxcbiAgNTQ6XFx0XFxuICA1NTpcXHRzdGF0aWMgdm9pZCBhdGgxMmtfd2lmaTdfZXhpdCh2b2lkKVxcbiAgNTY6XFx0e1xcbiAgNTc6XFx0XFx0aWYgKCFwY2lfZXJyKVxcbiAgNTg6XFx0XFx0XFx0YXRoMTJrX3dpZmk3X3BjaV9leGl0KCk7XFxuICA1OTpcXHRcXG4gIDYwOlxcdFxcdGlmICghYWhiX2VycilcXG4gIDYxOlxcdFxcdFxcdGF0aDEya193aWZpN19haGJfZXhpdCgpO1xcbiAgNjI6XFx0fVxcbiAgNjM6XFx0XFxuICA2NDpcXHRtb2R1bGVfaW5pdChhdGgxMmtfd2lmaTdfaW5pdCk7XFxuICA2NTpcXHRtb2R1bGVfZXhpdChhdGgxMmtfd2lmaTdfZXhpdCk7XFxuICA2NjpcXHRcXG4gIDY3OlxcdE1PRFVMRV9ERVNDUklQVElPTihcXFwiRHJpdmVyIHN1cHBvcnQgZm9yIFF1YWxjb21tIFRlY2hub2xvZ2llcyA4MDIuMTFiZSBXTEFOIGRldmljZXNcXFwiKTtcXG4gIDY4OlxcdE1PRFVMRV9MSUNFTlNFKFxcXCJEdWFsIEJTRC9HUExcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6NDQ6NTEuOTI5MDgxMTE1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODMzOTgzOTMzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBWaXJ0dWFsaXphdGlvbiBDaGFsbGVuZ2UqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGxvb2tlZCBpbnRvIHRoaXMgYW5kIEkndmUgZ290IGEgcHJldHR5IGdvb2QgZ3Jhc3Agb24gd2hhdCdzIGhhcHBlbmluZy4gTXkgbWFpbiBjb25jZXJuIGlzIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIHNldHVwIGlzIHJlZ2lzdGVyaW5nIGJvdGggQUhCIGFuZCBQQ0kgZGV2aWNlcy4gUmlnaHQgYXdheSwgQUhCLCB0aGUgQWR2YW5jZWQgSGlnaC1wZXJmb3JtYW5jZSBCdXMsIHNob3V0cyBcIlN5c3RlbSBvbiBhIENoaXAgKFNvQylcIiBhdCBtZSDigJMgdGhpbmsgQVJNIGNvcmVzLCB0aGUgd29ya3MuIFRoaXMgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlLlxuXG5UaGUga2lja2VyPyBJdCdzIGxvb2tpbmcgZm9yIFF1YWxjb21tIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgV2ktRmkgNywgYW5kIHRoYXQncyB0aGUgcnViLiBTdGFuZGFyZCBRRU1VLCB0aGUgdmlydHVhbGl6YXRpb24gdG9vbCB3ZSdyZSB1c2luZywgZG9lc24ndCBlbXVsYXRlIHRoYXQgbGV2ZWwgb2YgZGV0YWlsLCBlc3BlY2lhbGx5IHRoZSBzcGVjaWZpY3Mgb2YgUXVhbGNvbW0ncyBwcm9wcmlldGFyeSBzaWxpY29uLiBUaGVyZWZvcmUsIHRoZSBlc3NlbnRpYWwgZGF0YSBwYXRoLCBzcGVjaWZpY2FsbHkgdGhlIHRyYW5zbWl0IChUWCkgcGF0aCwgaXMgc2ltcGx5IHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEl0IGlzIHRvbyBzcGVjaWZpYy5cblxuR2l2ZW4gdGhpcyBpbmhlcmVudCBsaW1pdGF0aW9uLCBhdHRlbXB0aW5nIGFueSBmdXJ0aGVyIGZ1enppbmcgZWZmb3J0cyBoZXJlIHdvdWxkIGJlIGZ1dGlsZS4gSXQncyB0aW1lIHRvIG1hcmsgdGhpcyBhcyBhIGRlYWQgZW5kLCB1bmZvcnR1bmF0ZWx5LiBTbywgSSB3aWxsIGJlIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRpbWUgdG8gbW92ZSBvbiBhbmQgZmluZCBhIG1vcmUgZnJ1aXRmdWwgYXZlbnVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzM2LCJPdXRwdXRUb2tlbnMiOjEyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6NDU6MDAuMjY4OTI1NjA4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRhdGEgdHJhbnNtaXQgcGF0aCAoZHBfdHgpIG9mIHRoZSBhdGgxMmsgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgZm9yIFF1YWxjb21tIFdpLUZpIDcgUENJZS9BSEIgZGV2aWNlcy4gU2luY2UgdGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgdGhlIGRldmljZSBjYW5ub3QgYmUgc3VjY2Vzc2Z1bGx5IHByb2JlZCwgZmlybXdhcmUgY2Fubm90IGJlIGxvYWRlZCwgYW5kIHRoZSBuZXR3b3JrIGludGVyZmFjZSBjYW5ub3QgYmUgYnJvdWdodCB1cCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCB0cmFuc21pdCBwYXRoIGlzIHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRhdGEgdHJhbnNtaXQgcGF0aCAoZHBfdHgpIG9mIHRoZSBhdGgxMmsgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgZm9yIFF1YWxjb21tIFdpLUZpIDcgUENJZS9BSEIgZGV2aWNlcy4gU2luY2UgdGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgdGhlIGRldmljZSBjYW5ub3QgYmUgc3VjY2Vzc2Z1bGx5IHByb2JlZCwgZmlybXdhcmUgY2Fubm90IGJlIGxvYWRlZCwgYW5kIHRoZSBuZXR3b3JrIGludGVyZmFjZSBjYW5ub3QgYmUgYnJvdWdodCB1cCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCB0cmFuc21pdCBwYXRoIGlzIHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowrhlbx[1] Phase: Running StartedAt: 2026-07-31 02:45:11 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrhlbx[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-31 02:45:11 +0000 UTC FinishedAt: 2026-07-31 02:45:32 +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,}