Name: series-workflownddjx Phase: Failed StartedAt: 2026-08-06 17:44:21 +0000 UTC FinishedAt: 2026-08-06 18:06:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflownddjx[0] Phase: Succeeded StartedAt: 2026-08-06 17:44:21 +0000 UTC FinishedAt: 2026-08-06 18:06:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflownddjx[0].run-triage Phase: Succeeded StartedAt: 2026-08-06 17:44:21 +0000 UTC FinishedAt: 2026-08-06 18:06:45 +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+CgkJCTx0ZD4yMDI2LzA4LzA2IDE4OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXaXpuZXQgVzUxMDAvVzUyMDAvVzU1MDAgRXRoZXJuZXQgZHJpdmVyLCB3aGljaCBpcyBhbiBTUEkgZGV2aWNlIGRyaXZlci4gSW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUgb3IgR0NFKSB1c2VkIGJ5IHN5emthbGxlciwgdGhlcmUgaXMgbm8gZ2VuZXJpYyB3YXkgdG8gaW5zdGFudGlhdGUgYXJiaXRyYXJ5IFNQSSBkZXZpY2VzIGZyb20gdXNlcnNwYWNlICh1bmxpa2UgSTJDJiMzOTtzIGBuZXdfZGV2aWNlYCBzeXNmcyBpbnRlcmZhY2Ugb3IgVVNCJiMzOTtzIGR1bW15X2hjZCkuIFNpbmNlIHRoZSBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgYW5kIHRoZSBkZXZpY2UgY2Fubm90IGJlIGR5bmFtaWNhbGx5IGNyZWF0ZWQsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTg6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1ZjEzODFlNWFkZTNmZjliM2M0MjNjOTAwYmEzYjhlNjVhNTc4NjNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAxODowNToyMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpem5ldCx3NTEwMC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzUxMDAueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmNlYmY0MzdhZDNjNGFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1MTAwLnlhbWxcbkBAIC0wLDAgJiM0MzsxLDc0IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuJiM0MzslWUFNTCAxLjJcbiYjNDM7LS0tXG4mIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3dpem5ldCx3NTEwMC55YW1sI1xuJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbiYjNDM7XG4mIzQzO3RpdGxlOiBXaXpuZXQgdzUxMDAvdzUyMDAvdzU1MDAgU1BJIEV0aGVybmV0IENvbnRyb2xsZXJcbiYjNDM7XG4mIzQzO21haW50YWluZXJzOlxuJiM0MzsgIC0gQXJ0aHVyIENyw6lwaW4gTGVibG9uZCBcdTAwM2NhcnRodXJAbWFybW90dHVzLm5ldFx1MDAzZVxuJiM0MztcbiYjNDM7ZGVzY3JpcHRpb246IHxcbiYjNDM7ICBUaGlzIGlzIGEgc3RhbmRhbG9uZSAxMC8xMDAgTUJpdCBFdGhlcm5ldCBjb250cm9sbGVyIHdpdGggU1BJIGludGVyZmFjZS5cbiYjNDM7XG4mIzQzO2FsbE9mOlxuJiM0MzsgIC0gJHJlZjogL3NjaGVtYXMvbmV0L2V0aGVybmV0LWNvbnRyb2xsZXIueWFtbCNcbiYjNDM7ICAtICRyZWY6IC9zY2hlbWFzL3NwaS9zcGktcGVyaXBoZXJhbC1wcm9wcy55YW1sI1xuJiM0MztcbiYjNDM7cHJvcGVydGllczpcbiYjNDM7ICBjb21wYXRpYmxlOlxuJiM0MzsgICAgZW51bTpcbiYjNDM7ICAgICAgLSB3aXpuZXQsdzUxMDBcbiYjNDM7ICAgICAgLSB3aXpuZXQsdzUyMDBcbiYjNDM7ICAgICAgLSB3aXpuZXQsdzU1MDBcbiYjNDM7XG4mIzQzOyAgaW50ZXJydXB0czpcbiYjNDM7ICAgIG1heEl0ZW1zOiAxXG4mIzQzO1xuJiM0MzsgIHJlZzpcbiYjNDM7ICAgIG1heEl0ZW1zOiAxXG4mIzQzO1xuJiM0MzsgIHNwaS1tYXgtZnJlcXVlbmN5OlxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIEFjY29yZGluZyB0byB0aGUgdzU1MDAgZGF0YXNoZWV0LCB0aGUgY2hpcCBhbGxvd3MgYSBtYXhpbXVtIG9mIDgwIE1IeixcbiYjNDM7ICAgICAgaG93ZXZlciwgYm9hcmQgZGVzaWducyBtYXkgbmVlZCB0byBsaW1pdCB0aGlzIHZhbHVlLlxuJiM0MzsgICAgbWF4aW11bTogODAwMDAwMDBcbiYjNDM7XG4mIzQzOyAgbGluay1ncGlvczpcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBBbiBvcHRpb25hbCBHUElPIGxpbmUgdGhhdCBjYW4gYmUgd2lyZWQgdG8gdGhlIExJTktMRUQgcGluIG9mIHRoZSB3NTUwMFxuJiM0MzsgICAgICBhcyBhbiBpbnRlcnJ1cHQgdG8gZGV0ZWN0IGxpbmsgc3RhdHVzIGNoYW5nZXMuXG4mIzQzOyAgICBtYXhJdGVtczogMVxuJiM0MztcbiYjNDM7cmVxdWlyZWQ6XG4mIzQzOyAgLSBjb21wYXRpYmxlXG4mIzQzOyAgLSByZWdcbiYjNDM7ICAtIGludGVycnVwdHNcbiYjNDM7XG4mIzQzO3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO2V4YW1wbGVzOlxuJiM0MzsgIC0gfFxuJiM0MzsgICAgLyogRXhhbXBsZSAoZm9yIFJhc3BiZXJyeSBQaSB3aXRoIHBpbiBjb250cm9sIHN0dWZmIGZvciBHUElPIGlycSkgKi9cbiYjNDM7XG4mIzQzOyAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaFx1MDAzZVxuJiM0MzsgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyAgICBzcGkge1xuJiM0MzsgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1xuJiM0MzsgICAgICAgIGV0aGVybmV0QDAge1xuJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7d2l6bmV0LHc1NTAwXCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBwaW5jdHJsLW5hbWVzID0gXCYjMzQ7ZGVmYXVsdFwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcGluY3RybC0wID0gXHUwMDNjXHUwMDI2ZXRoMV9waW5zXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBpbnRlcnJ1cHQtcGFyZW50ID0gXHUwMDNjXHUwMDI2Z3Bpb1x1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgaW50ZXJydXB0cyA9IFx1MDAzYzI1IElSUV9UWVBFX0VER0VfRkFMTElOR1x1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgbGluay1ncGlvcyA9IFx1MDAzY1x1MDAyNmdwaW8gMjQgR1BJT19BQ1RJVkVfTE9XXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBzcGktbWF4LWZyZXF1ZW5jeSA9IFx1MDAzYzMwMDAwMDAwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBsb2NhbC1tYWMtYWRkcmVzcyA9IFsgYTAgYjAgYzAgZDAgZTAgZjAgXTtcbiYjNDM7ICAgICAgICB9O1xuJiM0MzsgICAgfTtcbiYjNDM7Li4uXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0XG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGU5NjY1Nzk4YzRiZTYuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1eDAwLnR4dFxuJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbFxuQEAgLTEsNTAgJiM0MzswLDAgQEBcbi0qIFdpem5ldCB3NXgwMFxuLVxuLVRoaXMgaXMgYSBzdGFuZGFsb25lIDEwLzEwMCBNQml0IEV0aGVybmV0IGNvbnRyb2xsZXIgd2l0aCBTUEkgaW50ZXJmYWNlLlxuLVxuLUZvciBlYWNoIGRldmljZSBjb25uZWN0ZWQgdG8gYSBTUEkgYnVzLCBkZWZpbmUgYSBjaGlsZCBub2RlIHdpdGhpblxuLXRoZSBTUEkgbWFzdGVyIG5vZGUuXG4tXG4tUmVxdWlyZWQgcHJvcGVydGllczpcbi0tIGNvbXBhdGlibGU6IFNob3VsZCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzdHJpbmdzOlxuLVx0ICAgICAgXCYjMzQ7d2l6bmV0LHc1MTAwXCYjMzQ7XG4tXHQgICAgICBcJiMzNDt3aXpuZXQsdzUyMDBcJiMzNDtcbi1cdCAgICAgIFwmIzM0O3dpem5ldCx3NTUwMFwmIzM0O1xuLS0gcmVnOiBTcGVjaWZ5IHRoZSBTUEkgY2hpcCBzZWxlY3QgdGhlIGNoaXAgaXMgd2lyZWQgdG8uXG4tLSBpbnRlcnJ1cHRzOiBTcGVjaWZ5IHRoZSBpbnRlcnJ1cHQgaW5kZXggd2l0aGluIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciAocmVmZXJyZWRcbi0gICAgICAgICAgICAgIHRvIGFib3ZlIGluIGludGVycnVwdC1wYXJlbnQpIGFuZCBpbnRlcnJ1cHQgdHlwZS4gdzV4MDAgbmF0aXZlbHlcbi0gICAgICAgICAgICAgIGdlbmVyYXRlcyBmYWxsaW5nIGVkZ2UgaW50ZXJydXB0cywgaG93ZXZlciwgYWRkaXRpb25hbCBib2FyZCBsb2dpY1xuLSAgICAgICAgICAgICAgbWlnaHQgaW52ZXJ0IHRoZSBzaWduYWwuXG4tLSBwaW5jdHJsLW5hbWVzOiBMaXN0IG9mIGFzc2lnbmVkIHN0YXRlIG5hbWVzLCBzZWUgcGluY3RybCBiaW5kaW5nIGRvY3VtZW50YXRpb24uXG4tLSBwaW5jdHJsLTA6IExpc3Qgb2YgcGhhbmRsZXMgdG8gY29uZmlndXJlIHRoZSBHUElPIHBpbiB1c2VkIGFzIGludGVycnVwdCBsaW5lLFxuLSAgICAgICAgICAgICBzZWUgYWxzbyBnZW5lcmljIGFuZCB5b3VyIHBsYXRmb3JtIHNwZWNpZmljIHBpbmN0cmwgYmluZGluZ1xuLSAgICAgICAgICAgICBkb2N1bWVudGF0aW9uLlxuLVxuLU9wdGlvbmFsIHByb3BlcnRpZXM6XG4tLSBzcGktbWF4LWZyZXF1ZW5jeTogTWF4aW11bSBmcmVxdWVuY3kgb2YgdGhlIFNQSSBidXMgd2hlbiBhY2Nlc3NpbmcgdGhlIHc1NTAwLlxuLSAgQWNjb3JkaW5nIHRvIHRoZSB3NTUwMCBkYXRhc2hlZXQsIHRoZSBjaGlwIGFsbG93cyBhIG1heGltdW0gb2YgODAgTUh6LCBob3dldmVyLFxuLSAgYm9hcmQgZGVzaWducyBtYXkgbmVlZCB0byBsaW1pdCB0aGlzIHZhbHVlLlxuLS0gbG9jYWwtbWFjLWFkZHJlc3M6IFNlZSBldGhlcm5ldC50eHQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuLVxuLVxuLUV4YW1wbGUgKGZvciBSYXNwYmVycnkgUGkgd2l0aCBwaW4gY29udHJvbCBzdHVmZiBmb3IgR1BJTyBpcnEpOlxuLVxuLVx1MDAyNnNwaSB7XG4tXHRldGhlcm5ldEAwOiB3NTUwMEAwIHtcbi1cdFx0Y29tcGF0aWJsZSA9IFwmIzM0O3dpem5ldCx3NTUwMFwmIzM0Oztcbi1cdFx0cmVnID0gXHUwMDNjMFx1MDAzZTtcbi1cdFx0cGluY3RybC1uYW1lcyA9IFwmIzM0O2RlZmF1bHRcJiMzNDs7XG4tXHRcdHBpbmN0cmwtMCA9IFx1MDAzY1x1MDAyNmV0aDFfcGluc1x1MDAzZTtcbi1cdFx0aW50ZXJydXB0LXBhcmVudCA9IFx1MDAzY1x1MDAyNmdwaW9cdTAwM2U7XG4tXHRcdGludGVycnVwdHMgPSBcdTAwM2MyNSBJUlFfVFlQRV9FREdFX0ZBTExJTkdcdTAwM2U7XG4tXHRcdHNwaS1tYXgtZnJlcXVlbmN5ID0gXHUwMDNjMzAwMDAwMDBcdTAwM2U7XG4tXHR9O1xuLX07XG4tXG4tXHUwMDI2Z3BpbyB7XG4tXHRldGgxX3BpbnM6IGV0aDFfcGlucyB7XG4tXHRcdGJyY20scGlucyA9IFx1MDAzYzI1XHUwMDNlO1xuLVx0XHRicmNtLGZ1bmN0aW9uID0gXHUwMDNjMFx1MDAzZTsgLyogaW4gKi9cbi1cdFx0YnJjbSxwdWxsID0gXHUwMDNjMFx1MDAzZTsgLyogbm9uZSAqL1xuLVx0fTtcbi19O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmNcbmluZGV4IDUzZDhkYzY0MmZiZDYuLjY3MDdhNmYyNzM5NTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmNcbkBAIC0yMiw2ICYjNDM7MjIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnEuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ncGlvL2NvbnN1bWVyLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDt3NTEwMC5oXCYjMzQ7XG4gXG5AQCAtMTI0LDYgJiM0MzsxMjUsOCBAQCBNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuICAqL1xuICNkZWZpbmUgVzU1MDBfU0lNUlx0XHQweDAwMTggLyogU29ja2V0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovXG4gI2RlZmluZSBXNTUwMF9SVFJcdFx0MHgwMDE5IC8qIFJldHJ5IFRpbWUtdmFsdWUgUmVnaXN0ZXIgKi9cbiYjNDM7I2RlZmluZSBXNTUwMF9QSFlDRkdSXHRcdDB4MDAyZSAvKiAgUEhZIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi9cbiYjNDM7I2RlZmluZSAgIFBIWUNGR1JfTE5LXHRcdCAgMHgwMSAvKiBsaW5rIHN0YXR1cyAqL1xuIFxuICNkZWZpbmUgVzU1MDBfUzBfUkVHU1x0XHQweDEwMDAwXG4gXG5AQCAtMTU0LDYgJiM0MzsxNTcsNyBAQCBzdHJ1Y3QgdzUxMDBfcHJpdiB7XG4gXHR1MTYgczBfcnhfYnVmX3NpemU7XG4gXG4gXHRpbnQgaXJxO1xuJiM0MztcdHN0cnVjdCBncGlvX2Rlc2MgKmxpbmtfZ3BpbztcbiBcbiBcdHN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG5AQCAtNDE0LDYgJiM0Mzs0MTgsMTYgQEAgc3RhdGljIHZvaWQgdzUxMDBfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRcdHNpemVvZihpbmZvLVx1MDAzZWJ1c19pbmZvKSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdTMyIHc1MTAwX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHc1MTAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlb3BzLVx1MDAzZWNoaXBfaWQgPT0gVzU1MDApXG4mIzQzO1x0XHRyZXR1cm4gdzUxMDBfcmVhZChwcml2LCBXNTUwMF9QSFlDRkdSKSBcdTAwMjYgUEhZQ0ZHUl9MTks7XG4mIzQzO1xuJiM0MztcdHJldHVybiAxO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB1MzIgdzUxMDBfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIHtcbiBcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG5AQCAtNjE2LDYgJiM0Mzs2MzAsMjQgQEAgc3RhdGljIGlycXJldHVybl90IHc1MTAwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpuZGV2X2luc3RhbmNlKVxuIFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlycXJldHVybl90IHc1MTAwX2RldGVjdF9saW5rKGludCBpcnEsIHZvaWQgKm5kZXZfaW5zdGFuY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IG5kZXZfaW5zdGFuY2U7XG4mIzQzO1x0c3RydWN0IHc1MTAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcobmRldikpIHtcbiYjNDM7XHRcdGlmICh3NTEwMF9nZXRfbGluayhuZGV2KSkge1xuJiM0MztcdFx0XHRuZXRpZl9pbmZvKHByaXYsIGxpbmssIG5kZXYsIFwmIzM0O2xpbmsgaXMgdXBcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRuZXRpZl9jYXJyaWVyX29uKG5kZXYpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0bmV0aWZfaW5mbyhwcml2LCBsaW5rLCBuZGV2LCBcJiMzNDtsaW5rIGlzIGRvd25cXG5cJiMzNDspO1xuJiM0MztcdFx0XHRuZXRpZl9jYXJyaWVyX29mZihuZGV2KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBJUlFfSEFORExFRDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB3NTEwMF9zZXRyeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdzUxMDBfcHJpdixcbkBAIC02NTksNiAmIzQzOzY5MSwxMiBAQCBzdGF0aWMgaW50IHc1MTAwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHR3NTEwMF9od19zdGFydChwcml2KTtcbiBcdG5hcGlfZW5hYmxlKFx1MDAyNnByaXYtXHUwMDNlbmFwaSk7XG4gXHRuZXRpZl9zdGFydF9xdWV1ZShuZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHc1MTAwX2dldF9saW5rKG5kZXYpKVxuJiM0MztcdFx0bmV0aWZfY2Fycmllcl9vbihuZGV2KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRuZXRpZl9jYXJyaWVyX29mZihuZGV2KTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNjc4LDYgJiM0Mzs3MTYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHc1MTAwX2V0aHRvb2xfb3BzID0ge1xuIFx0LmdldF9kcnZpbmZvXHRcdD0gdzUxMDBfZ2V0X2RydmluZm8sXG4gXHQuZ2V0X21zZ2xldmVsXHRcdD0gdzUxMDBfZ2V0X21zZ2xldmVsLFxuIFx0LnNldF9tc2dsZXZlbFx0XHQ9IHc1MTAwX3NldF9tc2dsZXZlbCxcbiYjNDM7XHQuZ2V0X2xpbmtcdFx0PSB3NTEwMF9nZXRfbGluayxcbiBcdC5nZXRfcmVnc19sZW5cdFx0PSB3NTEwMF9nZXRfcmVnc19sZW4sXG4gXHQuZ2V0X3JlZ3NcdFx0PSB3NTEwMF9nZXRfcmVncyxcbiB9O1xuQEAgLTc1MSw2ICYjNDM7NzkwLDEzIEBAIGludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcbiBcdHByaXYtXHUwMDNlbmRldiA9IG5kZXY7XG4gXHRwcml2LVx1MDAzZW9wcyA9IG9wcztcbiBcdHByaXYtXHUwMDNlaXJxID0gaXJxO1xuJiM0MztcdHByaXYtXHUwMDNlbGlua19ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoZGV2LCBcJiMzNDtsaW5rXCYjMzQ7LCBHUElPRF9JTik7XG4mIzQzO1x0aWYgKElTX0VSUihwcml2LVx1MDAzZWxpbmtfZ3BpbykpIHtcbiYjNDM7XHRcdGVyciA9IGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXHUwMDNlbGlua19ncGlvKSxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIGdldCBsaW5rIEdQSU9cXG5cJiMzNDspO1xuJiM0MztcdFx0cHJpdi1cdTAwM2VsaW5rX2dwaW8gPSBOVUxMO1xuJiM0MztcdFx0Z290byBlcnJfcmVnaXN0ZXI7XG4mIzQzO1x0fVxuIFxuIFx0bmRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2dzUxMDBfbmV0ZGV2X29wcztcbiBcdG5kZXYtXHUwMDNlZXRodG9vbF9vcHMgPSBcdTAwMjZ3NTEwMF9ldGh0b29sX29wcztcbkBAIC04MDMsOCAmIzQzOzg0OSwyOSBAQCBpbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9odztcbiBcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VsaW5rX2dwaW8pIHtcbiYjNDM7XHRcdGludCBsaW5rX2lycSA9IGdwaW9kX3RvX2lycShwcml2LVx1MDAzZWxpbmtfZ3Bpbyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxpbmtfaXJxIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdGVyciA9IGRldl9lcnJfcHJvYmUoZGV2LCBsaW5rX2lycSxcbiYjNDM7XHRcdFx0XHRcdCAgICBcJiMzNDtObyBjb3JyZXNwb25kaW5nIGlycSBmb3IgbGluayBncGlvXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0Z290byBlcnJfZ3BpbztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgbGlua19pcnEsIE5VTEwsXG4mIzQzO1x0XHRcdFx0XHRcdHc1MTAwX2RldGVjdF9saW5rLFxuJiM0MztcdFx0XHRcdFx0XHRJUlFGX1RSSUdHRVJfUklTSU5HIHxcbiYjNDM7XHRcdFx0XHRcdFx0SVJRRl9UUklHR0VSX0ZBTExJTkcgfFxuJiM0MztcdFx0XHRcdFx0XHRJUlFGX09ORVNIT1QsXG4mIzQzO1x0XHRcdFx0XHRcdFwmIzM0O3c1MTAwLWxpbmtcJiMzNDssIHByaXYtXHUwMDNlbmRldik7XG4mIzQzO1x0XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9ncGlvO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiBcbiYjNDM7ZXJyX2dwaW86XG4mIzQzO1x0ZnJlZV9pcnEocHJpdi1cdTAwM2VpcnEsIG5kZXYpO1xuIGVycl9odzpcbiBcdGRlc3Ryb3lfd29ya3F1ZXVlKHByaXYtXHUwMDNleGZlcl93cSk7XG4gZXJyX3dxOlxuQEAgLTg1Nyw2ICYjNDM7OTI0LDkgQEAgc3RhdGljIGludCB3NTEwMF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0XHR3NTEwMF9od19zdGFydChwcml2KTtcbiBcbiBcdFx0bmV0aWZfZGV2aWNlX2F0dGFjaChuZGV2KTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodzUxMDBfZ2V0X2xpbmsobmRldikpXG4mIzQzO1x0XHRcdG5ldGlmX2NhcnJpZXJfb24obmRldik7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTg6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXaXpuZXQgVzUxMDAvVzUyMDAvVzU1MDAgRXRoZXJuZXQgZHJpdmVyLCB3aGljaCBpcyBhbiBTUEkgZGV2aWNlIGRyaXZlci4gSW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUgb3IgR0NFKSB1c2VkIGJ5IHN5emthbGxlciwgdGhlcmUgaXMgbm8gZ2VuZXJpYyB3YXkgdG8gaW5zdGFudGlhdGUgYXJiaXRyYXJ5IFNQSSBkZXZpY2VzIGZyb20gdXNlcnNwYWNlICh1bmxpa2UgSTJDJiMzOTtzIGBuZXdfZGV2aWNlYCBzeXNmcyBpbnRlcmZhY2Ugb3IgVVNCJiMzOTtzIGR1bW15X2hjZCkuIFNpbmNlIHRoZSBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgYW5kIHRoZSBkZXZpY2UgY2Fubm90IGJlIGR5bmFtaWNhbGx5IGNyZWF0ZWQsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ZjEzODFlNWFkZTNmZjliM2M0MjNjOTAwYmEzYjhlNjVhNTc4NjNiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgNiAxODowNToyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1MTAwLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpem5ldCx3NTEwMC55YW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmNlYmY0MzdhZDNjNGEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpem5ldCx3NTEwMC55YW1sCkBAIC0wLDAgJiM0MzsxLDc0IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpCiYjNDM7JVlBTUwgMS4yCiYjNDM7LS0tCiYjNDM7JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvd2l6bmV0LHc1MTAwLnlhbWwjCiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCiYjNDM7CiYjNDM7dGl0bGU6IFdpem5ldCB3NTEwMC93NTIwMC93NTUwMCBTUEkgRXRoZXJuZXQgQ29udHJvbGxlcgomIzQzOwomIzQzO21haW50YWluZXJzOgomIzQzOyAgLSBBcnRodXIgQ3LDqXBpbiBMZWJsb25kICZsdDthcnRodXJAbWFybW90dHVzLm5ldCZndDsKJiM0MzsKJiM0MztkZXNjcmlwdGlvbjogfAomIzQzOyAgVGhpcyBpcyBhIHN0YW5kYWxvbmUgMTAvMTAwIE1CaXQgRXRoZXJuZXQgY29udHJvbGxlciB3aXRoIFNQSSBpbnRlcmZhY2UuCiYjNDM7CiYjNDM7YWxsT2Y6CiYjNDM7ICAtICRyZWY6IC9zY2hlbWFzL25ldC9ldGhlcm5ldC1jb250cm9sbGVyLnlhbWwjCiYjNDM7ICAtICRyZWY6IC9zY2hlbWFzL3NwaS9zcGktcGVyaXBoZXJhbC1wcm9wcy55YW1sIwomIzQzOwomIzQzO3Byb3BlcnRpZXM6CiYjNDM7ICBjb21wYXRpYmxlOgomIzQzOyAgICBlbnVtOgomIzQzOyAgICAgIC0gd2l6bmV0LHc1MTAwCiYjNDM7ICAgICAgLSB3aXpuZXQsdzUyMDAKJiM0MzsgICAgICAtIHdpem5ldCx3NTUwMAomIzQzOwomIzQzOyAgaW50ZXJydXB0czoKJiM0MzsgICAgbWF4SXRlbXM6IDEKJiM0MzsKJiM0MzsgIHJlZzoKJiM0MzsgICAgbWF4SXRlbXM6IDEKJiM0MzsKJiM0MzsgIHNwaS1tYXgtZnJlcXVlbmN5OgomIzQzOyAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICBBY2NvcmRpbmcgdG8gdGhlIHc1NTAwIGRhdGFzaGVldCwgdGhlIGNoaXAgYWxsb3dzIGEgbWF4aW11bSBvZiA4MCBNSHosCiYjNDM7ICAgICAgaG93ZXZlciwgYm9hcmQgZGVzaWducyBtYXkgbmVlZCB0byBsaW1pdCB0aGlzIHZhbHVlLgomIzQzOyAgICBtYXhpbXVtOiA4MDAwMDAwMAomIzQzOwomIzQzOyAgbGluay1ncGlvczoKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgQW4gb3B0aW9uYWwgR1BJTyBsaW5lIHRoYXQgY2FuIGJlIHdpcmVkIHRvIHRoZSBMSU5LTEVEIHBpbiBvZiB0aGUgdzU1MDAKJiM0MzsgICAgICBhcyBhbiBpbnRlcnJ1cHQgdG8gZGV0ZWN0IGxpbmsgc3RhdHVzIGNoYW5nZXMuCiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7CiYjNDM7cmVxdWlyZWQ6CiYjNDM7ICAtIGNvbXBhdGlibGUKJiM0MzsgIC0gcmVnCiYjNDM7ICAtIGludGVycnVwdHMKJiM0MzsKJiM0Mzt1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ZXhhbXBsZXM6CiYjNDM7ICAtIHwKJiM0MzsgICAgLyogRXhhbXBsZSAoZm9yIFJhc3BiZXJyeSBQaSB3aXRoIHBpbiBjb250cm9sIHN0dWZmIGZvciBHUElPIGlycSkgKi8KJiM0MzsKJiM0MzsgICAgI2luY2x1ZGUgJmx0O2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oJmd0OwomIzQzOyAgICAjaW5jbHVkZSAmbHQ7ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmgmZ3Q7CiYjNDM7CiYjNDM7ICAgIHNwaSB7CiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgZXRoZXJuZXRAMCB7CiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7d2l6bmV0LHc1NTAwJiMzNDs7CiYjNDM7ICAgICAgICAgICAgcmVnID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgIHBpbmN0cmwtbmFtZXMgPSAmIzM0O2RlZmF1bHQmIzM0OzsKJiM0MzsgICAgICAgICAgICBwaW5jdHJsLTAgPSAmbHQ7JmFtcDtldGgxX3BpbnMmZ3Q7OwomIzQzOyAgICAgICAgICAgIGludGVycnVwdC1wYXJlbnQgPSAmbHQ7JmFtcDtncGlvJmd0OzsKJiM0MzsgICAgICAgICAgICBpbnRlcnJ1cHRzID0gJmx0OzI1IElSUV9UWVBFX0VER0VfRkFMTElORyZndDs7CiYjNDM7ICAgICAgICAgICAgbGluay1ncGlvcyA9ICZsdDsmYW1wO2dwaW8gMjQgR1BJT19BQ1RJVkVfTE9XJmd0OzsKJiM0MzsgICAgICAgICAgICBzcGktbWF4LWZyZXF1ZW5jeSA9ICZsdDszMDAwMDAwMCZndDs7CiYjNDM7ICAgICAgICAgICAgbG9jYWwtbWFjLWFkZHJlc3MgPSBbIGEwIGIwIGMwIGQwIGUwIGYwIF07CiYjNDM7ICAgICAgICB9OwomIzQzOyAgICB9OwomIzQzOy4uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTY2NTc5OGM0YmU2Li4wMDAwMDAwMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1eDAwLnR4dAomIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsCkBAIC0xLDUwICYjNDM7MCwwIEBACi0qIFdpem5ldCB3NXgwMAotCi1UaGlzIGlzIGEgc3RhbmRhbG9uZSAxMC8xMDAgTUJpdCBFdGhlcm5ldCBjb250cm9sbGVyIHdpdGggU1BJIGludGVyZmFjZS4KLQotRm9yIGVhY2ggZGV2aWNlIGNvbm5lY3RlZCB0byBhIFNQSSBidXMsIGRlZmluZSBhIGNoaWxkIG5vZGUgd2l0aGluCi10aGUgU1BJIG1hc3RlciBub2RlLgotCi1SZXF1aXJlZCBwcm9wZXJ0aWVzOgotLSBjb21wYXRpYmxlOiBTaG91bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3RyaW5nczoKLQkgICAgICAmIzM0O3dpem5ldCx3NTEwMCYjMzQ7Ci0JICAgICAgJiMzNDt3aXpuZXQsdzUyMDAmIzM0OwotCSAgICAgICYjMzQ7d2l6bmV0LHc1NTAwJiMzNDsKLS0gcmVnOiBTcGVjaWZ5IHRoZSBTUEkgY2hpcCBzZWxlY3QgdGhlIGNoaXAgaXMgd2lyZWQgdG8uCi0tIGludGVycnVwdHM6IFNwZWNpZnkgdGhlIGludGVycnVwdCBpbmRleCB3aXRoaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyIChyZWZlcnJlZAotICAgICAgICAgICAgICB0byBhYm92ZSBpbiBpbnRlcnJ1cHQtcGFyZW50KSBhbmQgaW50ZXJydXB0IHR5cGUuIHc1eDAwIG5hdGl2ZWx5Ci0gICAgICAgICAgICAgIGdlbmVyYXRlcyBmYWxsaW5nIGVkZ2UgaW50ZXJydXB0cywgaG93ZXZlciwgYWRkaXRpb25hbCBib2FyZCBsb2dpYwotICAgICAgICAgICAgICBtaWdodCBpbnZlcnQgdGhlIHNpZ25hbC4KLS0gcGluY3RybC1uYW1lczogTGlzdCBvZiBhc3NpZ25lZCBzdGF0ZSBuYW1lcywgc2VlIHBpbmN0cmwgYmluZGluZyBkb2N1bWVudGF0aW9uLgotLSBwaW5jdHJsLTA6IExpc3Qgb2YgcGhhbmRsZXMgdG8gY29uZmlndXJlIHRoZSBHUElPIHBpbiB1c2VkIGFzIGludGVycnVwdCBsaW5lLAotICAgICAgICAgICAgIHNlZSBhbHNvIGdlbmVyaWMgYW5kIHlvdXIgcGxhdGZvcm0gc3BlY2lmaWMgcGluY3RybCBiaW5kaW5nCi0gICAgICAgICAgICAgZG9jdW1lbnRhdGlvbi4KLQotT3B0aW9uYWwgcHJvcGVydGllczoKLS0gc3BpLW1heC1mcmVxdWVuY3k6IE1heGltdW0gZnJlcXVlbmN5IG9mIHRoZSBTUEkgYnVzIHdoZW4gYWNjZXNzaW5nIHRoZSB3NTUwMC4KLSAgQWNjb3JkaW5nIHRvIHRoZSB3NTUwMCBkYXRhc2hlZXQsIHRoZSBjaGlwIGFsbG93cyBhIG1heGltdW0gb2YgODAgTUh6LCBob3dldmVyLAotICBib2FyZCBkZXNpZ25zIG1heSBuZWVkIHRvIGxpbWl0IHRoaXMgdmFsdWUuCi0tIGxvY2FsLW1hYy1hZGRyZXNzOiBTZWUgZXRoZXJuZXQudHh0IGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KLQotCi1FeGFtcGxlIChmb3IgUmFzcGJlcnJ5IFBpIHdpdGggcGluIGNvbnRyb2wgc3R1ZmYgZm9yIEdQSU8gaXJxKToKLQotJmFtcDtzcGkgewotCWV0aGVybmV0QDA6IHc1NTAwQDAgewotCQljb21wYXRpYmxlID0gJiMzNDt3aXpuZXQsdzU1MDAmIzM0OzsKLQkJcmVnID0gJmx0OzAmZ3Q7OwotCQlwaW5jdHJsLW5hbWVzID0gJiMzNDtkZWZhdWx0JiMzNDs7Ci0JCXBpbmN0cmwtMCA9ICZsdDsmYW1wO2V0aDFfcGlucyZndDs7Ci0JCWludGVycnVwdC1wYXJlbnQgPSAmbHQ7JmFtcDtncGlvJmd0OzsKLQkJaW50ZXJydXB0cyA9ICZsdDsyNSBJUlFfVFlQRV9FREdFX0ZBTExJTkcmZ3Q7OwotCQlzcGktbWF4LWZyZXF1ZW5jeSA9ICZsdDszMDAwMDAwMCZndDs7Ci0JfTsKLX07Ci0KLSZhbXA7Z3BpbyB7Ci0JZXRoMV9waW5zOiBldGgxX3BpbnMgewotCQlicmNtLHBpbnMgPSAmbHQ7MjUmZ3Q7OwotCQlicmNtLGZ1bmN0aW9uID0gJmx0OzAmZ3Q7OyAvKiBpbiAqLwotCQlicmNtLHB1bGwgPSAmbHQ7MCZndDs7IC8qIG5vbmUgKi8KLQl9OwotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMKaW5kZXggNTNkOGRjNjQyZmJkNi4uNjcwN2E2ZjI3Mzk1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMKQEAgLTIyLDYgJiM0MzsyMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaW9wb3J0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW50ZXJydXB0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXJxLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2dwaW8vY29uc3VtZXIuaCZndDsKIAogI2luY2x1ZGUgJiMzNDt3NTEwMC5oJiMzNDsKIApAQCAtMTI0LDYgJiM0MzsxMjUsOCBAQCBNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKICAqLwogI2RlZmluZSBXNTUwMF9TSU1SCQkweDAwMTggLyogU29ja2V0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCiAjZGVmaW5lIFc1NTAwX1JUUgkJMHgwMDE5IC8qIFJldHJ5IFRpbWUtdmFsdWUgUmVnaXN0ZXIgKi8KJiM0MzsjZGVmaW5lIFc1NTAwX1BIWUNGR1IJCTB4MDAyZSAvKiAgUEhZIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KJiM0MzsjZGVmaW5lICAgUEhZQ0ZHUl9MTksJCSAgMHgwMSAvKiBsaW5rIHN0YXR1cyAqLwogCiAjZGVmaW5lIFc1NTAwX1MwX1JFR1MJCTB4MTAwMDAKIApAQCAtMTU0LDYgJiM0MzsxNTcsNyBAQCBzdHJ1Y3QgdzUxMDBfcHJpdiB7CiAJdTE2IHMwX3J4X2J1Zl9zaXplOwogCiAJaW50IGlycTsKJiM0MzsJc3RydWN0IGdwaW9fZGVzYyAqbGlua19ncGlvOwogCiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CkBAIC00MTQsNiAmIzQzOzQxOCwxNiBAQCBzdGF0aWMgdm9pZCB3NTEwMF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAkJc2l6ZW9mKGluZm8tJmd0O2J1c19pbmZvKSk7CiB9CiAKJiM0MztzdGF0aWMgdTMyIHc1MTAwX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHc1MTAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O29wcy0mZ3Q7Y2hpcF9pZCA9PSBXNTUwMCkKJiM0MzsJCXJldHVybiB3NTEwMF9yZWFkKHByaXYsIFc1NTAwX1BIWUNGR1IpICZhbXA7IFBIWUNGR1JfTE5LOwomIzQzOwomIzQzOwlyZXR1cm4gMTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdTMyIHc1MTAwX2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKIAlzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwpAQCAtNjE2LDYgJiM0Mzs2MzAsMjQgQEAgc3RhdGljIGlycXJldHVybl90IHc1MTAwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpuZGV2X2luc3RhbmNlKQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAomIzQzO3N0YXRpYyBpcnFyZXR1cm5fdCB3NTEwMF9kZXRlY3RfbGluayhpbnQgaXJxLCB2b2lkICpuZGV2X2luc3RhbmNlKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBuZGV2X2luc3RhbmNlOwomIzQzOwlzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkgewomIzQzOwkJaWYgKHc1MTAwX2dldF9saW5rKG5kZXYpKSB7CiYjNDM7CQkJbmV0aWZfaW5mbyhwcml2LCBsaW5rLCBuZGV2LCAmIzM0O2xpbmsgaXMgdXBcbiYjMzQ7KTsKJiM0MzsJCQluZXRpZl9jYXJyaWVyX29uKG5kZXYpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQluZXRpZl9pbmZvKHByaXYsIGxpbmssIG5kZXYsICYjMzQ7bGluayBpcyBkb3duXG4mIzM0Oyk7CiYjNDM7CQkJbmV0aWZfY2Fycmllcl9vZmYobmRldik7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIElSUV9IQU5ETEVEOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHc1MTAwX3NldHJ4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3NTEwMF9wcml2LApAQCAtNjU5LDYgJiM0Mzs2OTEsMTIgQEAgc3RhdGljIGludCB3NTEwMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCXc1MTAwX2h3X3N0YXJ0KHByaXYpOwogCW5hcGlfZW5hYmxlKCZhbXA7cHJpdi0mZ3Q7bmFwaSk7CiAJbmV0aWZfc3RhcnRfcXVldWUobmRldik7CiYjNDM7CiYjNDM7CWlmICh3NTEwMF9nZXRfbGluayhuZGV2KSkKJiM0MzsJCW5ldGlmX2NhcnJpZXJfb24obmRldik7CiYjNDM7CWVsc2UKJiM0MzsJCW5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpOwomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC02NzgsNiAmIzQzOzcxNiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdzUxMDBfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvCQk9IHc1MTAwX2dldF9kcnZpbmZvLAogCS5nZXRfbXNnbGV2ZWwJCT0gdzUxMDBfZ2V0X21zZ2xldmVsLAogCS5zZXRfbXNnbGV2ZWwJCT0gdzUxMDBfc2V0X21zZ2xldmVsLAomIzQzOwkuZ2V0X2xpbmsJCT0gdzUxMDBfZ2V0X2xpbmssCiAJLmdldF9yZWdzX2xlbgkJPSB3NTEwMF9nZXRfcmVnc19sZW4sCiAJLmdldF9yZWdzCQk9IHc1MTAwX2dldF9yZWdzLAogfTsKQEAgLTc1MSw2ICYjNDM7NzkwLDEzIEBAIGludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcywKIAlwcml2LSZndDtuZGV2ID0gbmRldjsKIAlwcml2LSZndDtvcHMgPSBvcHM7CiAJcHJpdi0mZ3Q7aXJxID0gaXJxOwomIzQzOwlwcml2LSZndDtsaW5rX2dwaW8gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChkZXYsICYjMzQ7bGluayYjMzQ7LCBHUElPRF9JTik7CiYjNDM7CWlmIChJU19FUlIocHJpdi0mZ3Q7bGlua19ncGlvKSkgewomIzQzOwkJZXJyID0gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi0mZ3Q7bGlua19ncGlvKSwKJiM0MzsJCQkJICAgICYjMzQ7ZmFpbGVkIHRvIGdldCBsaW5rIEdQSU9cbiYjMzQ7KTsKJiM0MzsJCXByaXYtJmd0O2xpbmtfZ3BpbyA9IE5VTEw7CiYjNDM7CQlnb3RvIGVycl9yZWdpc3RlcjsKJiM0MzsJfQogCiAJbmRldi0mZ3Q7bmV0ZGV2X29wcyA9ICZhbXA7dzUxMDBfbmV0ZGV2X29wczsKIAluZGV2LSZndDtldGh0b29sX29wcyA9ICZhbXA7dzUxMDBfZXRodG9vbF9vcHM7CkBAIC04MDMsOCAmIzQzOzg0OSwyOSBAQCBpbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsCiAJaWYgKGVycikKIAkJZ290byBlcnJfaHc7CiAKJiM0MzsJaWYgKHByaXYtJmd0O2xpbmtfZ3BpbykgewomIzQzOwkJaW50IGxpbmtfaXJxID0gZ3Bpb2RfdG9faXJxKHByaXYtJmd0O2xpbmtfZ3Bpbyk7CiYjNDM7CiYjNDM7CQlpZiAobGlua19pcnEgJmx0OyAwKSB7CiYjNDM7CQkJZXJyID0gZGV2X2Vycl9wcm9iZShkZXYsIGxpbmtfaXJxLAomIzQzOwkJCQkJICAgICYjMzQ7Tm8gY29ycmVzcG9uZGluZyBpcnEgZm9yIGxpbmsgZ3Bpb1xuJiMzNDspOwomIzQzOwkJCWdvdG8gZXJyX2dwaW87CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQllcnIgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgbGlua19pcnEsIE5VTEwsCiYjNDM7CQkJCQkJdzUxMDBfZGV0ZWN0X2xpbmssCiYjNDM7CQkJCQkJSVJRRl9UUklHR0VSX1JJU0lORyB8CiYjNDM7CQkJCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcgfAomIzQzOwkJCQkJCUlSUUZfT05FU0hPVCwKJiM0MzsJCQkJCQkmIzM0O3c1MTAwLWxpbmsmIzM0OywgcHJpdi0mZ3Q7bmRldik7CiYjNDM7CQlpZiAoZXJyICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9ncGlvOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIDA7CiAKJiM0MztlcnJfZ3BpbzoKJiM0MzsJZnJlZV9pcnEocHJpdi0mZ3Q7aXJxLCBuZGV2KTsKIGVycl9odzoKIAlkZXN0cm95X3dvcmtxdWV1ZShwcml2LSZndDt4ZmVyX3dxKTsKIGVycl93cToKQEAgLTg1Nyw2ICYjNDM7OTI0LDkgQEAgc3RhdGljIGludCB3NTEwMF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogCQl3NTEwMF9od19zdGFydChwcml2KTsKIAogCQluZXRpZl9kZXZpY2VfYXR0YWNoKG5kZXYpOwomIzQzOwomIzQzOwkJaWYgKHc1MTAwX2dldF9saW5rKG5kZXYpKQomIzQzOwkJCW5ldGlmX2NhcnJpZXJfb24obmRldik7CiAJfQogCXJldHVybiAwOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mjc3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgV2l6bmV0IFc1NTAwIExpbmsgU3RhdHVzIFBhdGNoKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgYSBwYXRjaCBmb3IgdGhlIFdpem5ldCBXNTEwMC9XNTIwMC9XNTUwMCBTUEkgRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIuIEl0JiMzOTtzIGFkZGluZyBsaW5rIHN0YXR1cyBkZXRlY3Rpb24sIHdoaWNoIGlzIGdvb2QuIFRoZXkmIzM5O3ZlIGltcGxlbWVudGVkIGEgYGxpbmstZ3Bpb3NgIHByb3BlcnR5IGluIHRoZSBkZXZpY2UgdHJlZSBiaW5kaW5nLCByZWFkIHRoZSBsaW5rIHN0YXR1cyBmcm9tIHRoZSBQSFlDRkdSIHJlZ2lzdGVyIGZvciB0aGUgVzU1MDAsIGFuZCBhcmUgdXNpbmcgYSB0aHJlYWRlZCBJUlEgZm9yIGxpbmsgY2hhbmdlcy4gVGhleSYjMzk7dmUgYWxzbyBpbXBsZW1lbnRlZCBgdzUxMDBfZ2V0X2xpbmtgIGFuZCBpbnRlZ3JhdGVkIGl0IGludG8gYGV0aHRvb2xfb3BzYCwgYW5kIHVwZGF0ZWQgdGhlIGBvcGVuYCBhbmQgYHJlc3VtZWAgZnVuY3Rpb25zIHRvIGNoZWNrIHRoZSBsaW5rLiBTdGFuZGFyZCBzdHVmZiwgc28gZmFyLgoKQnV0IHdhaXQsIHRoZSByZWFsIHF1ZXN0aW9uIGhlcmUgaXM6ICpjYW4gd2UgYWN0dWFsbHkgdGVzdCB0aGlzIGVmZmVjdGl2ZWx5IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/KiBUaGlzIGlzIGFuIFNQSSBFdGhlcm5ldCBjb250cm9sbGVyLCBhbmQgU1BJIGlzIG5vdG9yaW91c2x5IHRyaWNreSBmb3IgZW11bGF0aW9uLiBDYW4gUUVNVSBldmVuICpzZWUqIHRoaXM/IFR5cGljYWxseSwgU1BJIGRldmljZXMgYXJlbiYjMzk7dCBlYXNpbHkgZW11bGF0ZWQgb3IgZnV6emVkIHVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIFFFTVUgZGV2aWNlIG1vZGVsIGZvciB0aGVtLCBvciB3ZSBjYW4gc29tZWhvdyBmdXp6IHRoZSBTUEkgc3Vic3lzdGVtIGl0c2VsZi4KCkkga25vdyBTeXprYWxsZXIgY2FuIHNvbWV0aW1lcyBmdXp6IFNQSSBkZXZpY2VzIHVzaW5nIGB2aGNpYCBvciBzb21ldGhpbmcgc2ltaWxhciwgaWYgaXQmIzM5O3MgYXZhaWxhYmxlLCBidXQgZ2VuZXJhbGx5LCBTUEkgZGV2aWNlcyBhcmUgcHJldHR5IGhhcmR3YXJlLXNwZWNpZmljLiBJIGtlZXAgdGhpbmtpbmcsIGRvZXNuJiMzOTt0IFN5emthbGxlciBoYXZlICpzb21lKiBTUEkgc3VwcG9ydD8gTm8sIG5vdCByZWFsbHkuIEl0IGRvZXNuJiMzOTt0IGhhdmUgYSBnZW5lcmljIFNQSSBmdXp6ZXIgdGhhdCBjYW4ganVzdCAqY3JlYXRlKiBhcmJpdHJhcnkgU1BJIGRldmljZXMsIHVubGVzcyBpdCYjMzk7cyB0aHJvdWdoIHNwaWRldiwgYnV0IHRoaXMgaXMgYSBuZXQgZGV2aWNlIGRyaXZlciwgd2hpY2ggdXN1YWxseSByZXF1aXJlcyBhIHNwZWNpZmljIFNQSSBkZXZpY2UgaWRlbnRpZmllZCB2aWEgYSBkZXZpY2UgdHJlZSBvciBib2FyZCBjb2RlLgoKU28sIHRoZSBkcml2ZXIgKmhhcyogdG8gYmUgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIHJpZ2h0PyBJIG1lYW4sIGhvdyBlbHNlIGFyZSB3ZSBnb2luZyB0byB0ZXN0IHRoaXM/IEl0IG5lZWRzIGEgZGV2aWNlIHRyZWUgbm9kZSB3aXRoIGBjb21wYXRpYmxlID0gJiMzNDt3aXpuZXQsdzU1MDAmIzM0O2AgYW5kIHNvIG9uLCBidXQgaXQmIzM5O3MgYW4gU1BJIGRldmljZS4gVW5sZXNzIHRoZXJlJiMzOTtzIGEgd2F5IHRvIGluc3RhbnRpYXRlIFNQSSBkZXZpY2VzIChwZXJoYXBzIGRldmljZSB0cmVlIG92ZXJsYXlzIG9yIHNvbWV0aGluZyB0aHJvdWdoIHN5c2ZzKSwgd2UmIzM5O3JlIHByb2JhYmx5IGRlYWQgaW4gdGhlIHdhdGVyLiBEb2VzIFN5emthbGxlciB1c2Ugc3lzZnMgb3IgbmV0bGluayB0byBpbnN0YW50aWF0ZSBkZXZpY2VzPyBObywgdGhhdCYjMzk7cyBub3QgaG93IFNQSSBkZXZpY2VzIGFyZSB0eXBpY2FsbHkgaGFuZGxlZC4gVGhleeKAmXJlIHVzdWFsbHkgaW5zdGFudGlhdGVkIGJ5IERUIG9yIGJvYXJkIGZpbGVzLgoKSGFuZyBvbuKApm1heWJlIFN5emthbGxlciBjb3VsZCB1c2UgYHN5el9nZW5ldGxpbmtgIG9yIHNvbWV0aGluZywgYnV0IGZvciBTUEksIHRoZXJlJiMzOTtzIG5vIGdlbmVyaWMgd2F5IHRvIGFkZCBkZXZpY2VzIGZyb20gdXNlcnNwYWNlIHVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIGRyaXZlciB0byBkbyBzby4KCkhvbGQgb24sIHdoYXQgaWYgdGhpcyBkcml2ZXIgaXMgYSAqcGxhdGZvcm0qIGRyaXZlcj8gTm8sIGl0JiMzOTtzIGFuIFNQSSBkcml2ZXIuIE9rYXksIGxldCYjMzk7cyBsb29rIGF0IGBkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmNgIGFuZCBvdGhlciBmaWxlcyBsaWtlIHRoYXQuIFRoZSBwYXRjaCBtb2RpZmllcyBgdzUxMDAuY2AsIHdoaWNoIGlzIHRoZSBjb3JlLCBidXQgdGhlIHByb2JlIGlzIGNhbGxlZCBmcm9tIGB3NTEwMF9zcGkuY2Agb3IgYHc1MTAwX21taW8uY2AsIHJpZ2h0PyBJIHNob3VsZCByZWFsbHkganVzdCBjaGVjayB0aGUga2VybmVsIHNvdXJjZSBmb3IgYHc1MTAwLmNgIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgZXZlbiBiZWluZyBwcm9iZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dzUxMDBfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYz00MjE9c3RhdGljIGludCB3NTEwMF9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmMtNDUyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLXNwaS5jOjQ1MzpcdHJldHVybiB3NTEwMF9wcm9iZShcdTAwMjZzcGktXHUwMDNlZGV2LCBvcHMsIHByaXZfc2l6ZSwgbWFjLCBzcGktXHUwMDNlaXJxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYy00NTQtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jPTczOT1FWFBPUlRfU1lNQk9MX0dQTCh3NTEwMF9vcHNfcHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy03NDAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYzo3NDE6aW50IHc1MTAwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IHc1MTAwX29wcyAqb3BzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtNzQyLVx0XHRpbnQgc2l6ZW9mX29wc19wcml2LCBjb25zdCB2b2lkICptYWNfYWRkciwgaW50IGlycSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy04ODItfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6ODgzOkVYUE9SVF9TWU1CT0xfR1BMKHc1MTAwX3Byb2JlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTg4NC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuaD0yOT12b2lkICp3NTEwMF9vcHNfcHJpdihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuaC0zMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5oOjMxOmludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5oLTMyLVx0XHRpbnQgc2l6ZW9mX29wc19wcml2LCBjb25zdCB2b2lkICptYWNfYWRkciwgaW50IGlycSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEyMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlOgoKKipEZWJ1Z2dpbmcgTmV0d29yayBJbnRlcmZhY2UgSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgdGhpcyBgdzUxMDAtc3BpLmNgIGZpbGUgYW5kLCBsaWtlbHksIG90aGVyIHJlbGF0ZWQgb25lcyBpbnZvbHZlZCBpbiBpbml0aWFsaXppbmcgYSBuZXR3b3JrIGludGVyZmFjZS4gVGhlIHF1ZXN0aW9uIGluIG15IG1pbmQgaXMsIHdoYXQgc3BlY2lmaWNhbGx5IHRyaWdnZXJzIHRoZSBwcm9iaW5nIG9mIHRoaXMgVzUxMDAgZGV2aWNlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gVGhlcmVmb3JlLCBJIG5lZWQgdG8ga25vdyAqd2hhdCogY2FsbHMgdGhlIGB3NTEwMF9wcm9iZWAgZnVuY3Rpb24uIEkgd2lsbCBjaGVjayB0aGUgY29kZWJhc2UgdG8gaWRlbnRpZnkgYWxsIG9mIHRoZSBvdGhlciBjYWxsIHNpdGVzIGZvciB0aGF0IGZ1bmN0aW9uLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnRzIG9mIHRoZSBkZXZpY2UgZHJpdmVyIGluIHRoZSBzeXN0ZW0gYW5kIGhlbHAgbWUgdHJhY2UgdGhyb3VnaCB0aGUgZmxvdyBvZiBleGVjdXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlc2UgaW50ZXJhY3Rpb25zIGlzIGtleSB0byBwaW5wb2ludGluZyBhbnkgcG90ZW50aWFsIHByb2JsZW1zIGluIHRoZSBicmluZy11cCBwcm9jZXNzIG9yIGxhdGVyIG9wZXJhdGlvbi4gVGhpcyBpcyBiYXNpYywgYnV0IG5lY2Vzc2FyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxODowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3NTEwMF9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLXNwaS5jPTQyMT1zdGF0aWMgaW50IHc1MTAwX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYy00NTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmM6NDUzOlx0cmV0dXJuIHc1MTAwX3Byb2JlKFx1MDAyNnNwaS1cdTAwM2VkZXYsIG9wcywgcHJpdl9zaXplLCBtYWMsIHNwaS1cdTAwM2VpcnEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLXNwaS5jLTQ1NC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM9NzM5PUVYUE9SVF9TWU1CT0xfR1BMKHc1MTAwX29wc19wcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTc0MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jOjc0MTppbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy03NDItXHRcdGludCBzaXplb2Zfb3BzX3ByaXYsIGNvbnN0IHZvaWQgKm1hY19hZGRyLCBpbnQgaXJxKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTg4Mi19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYzo4ODM6RVhQT1JUX1NZTUJPTF9HUEwodzUxMDBfcHJvYmUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtODg0LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5oPTI5PXZvaWQgKnc1MTAwX29wc19wcml2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5oLTMwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmg6MzE6aW50IHc1MTAwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IHc1MTAwX29wcyAqb3BzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmgtMzItXHRcdGludCBzaXplb2Zfb3BzX3ByaXYsIGNvbnN0IHZvaWQgKm1hY19hZGRyLCBpbnQgaXJxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTMwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIFdJWm5ldCBEcml2ZXIgSW50ZWdyYXRpb24qKgoKSG1tLCB3YWl0IGEgc2Vjb25kLi4uIGJlZm9yZSBJIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgbmV0d29ya2luZyBpc3N1ZSwgSSBzaG91bGQgcXVpY2tseSBjaGVjayBzb21ldGhpbmcgZnVuZGFtZW50YWwuIElzIHRoZXJlIGEgcGxhdGZvcm0gZHJpdmVyIGludm9sdmVkIGhlcmUsIG9yIGFtIEkgbWlzc2luZyBzb21ldGhpbmcgdXBzdHJlYW0/IEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgZm91bmRhdGlvbiBvZiBob3cgdGhpcyBXSVpuZXQgZGV2aWNlIGlzIGhhbmRsZWQgaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyZSBiZWZvcmUgZ29pbmcgYW55IGZ1cnRoZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGVyZSB0aGUgV0labmV0IGRyaXZlciBpcyBsb2NhdGVkLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgc3RhbmRhcmQgcGF0aHMuLi4gaXMgaXQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTMwMC5jYD8gT3IgbWF5YmUgaXQmIzM5O3MgdGhlIG9sZGVyLCBhbmQgcHJvYmFibHkgc3RpbGwgcmVsZXZhbnQsIGB3NTEwMC5jYD8gVGhhdCYjMzk7bGwgYmUgbXkgc3RhcnRpbmcgcG9pbnQgdG8gc2VlIGhvdyB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgYW5kIG1hbmFnZWQuIEkgbmVlZCB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlIGZpcnN0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE4OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDt3NTEwMC1zcGkuYyYjMzQ7LAogICAgJiMzNDt3NTEwMC5jJiMzNDssCiAgICAmIzM0O3c1MTAwLmgmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE4OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNTEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBQbGFuIG9mIEF0dGFjayoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHc1MTAwLXNwaS5jYCwgd2hpY2ggdGVsbHMgbWUgdGhpcyBpcyAqZGVmaW5pdGVseSogYW4gU1BJIGRldmljZS4gVGhhdCYjMzk7cyBnb29kIGluZm9ybWF0aW9uLCBidXQgaXQgcmFpc2VzIHNvbWUgcXVlc3Rpb25zIGFib3V0IGhvdyB3ZSBpbnRlZ3JhdGUgaXQgaW50byBTeXprYWxsZXIuIENhbiB3ZSBldmVuIGluc3RhbnRpYXRlIGFuZCBmdXp6IFNQSSBkZXZpY2VzIGRpcmVjdGx5IHdpdGhpbiBTeXprYWxsZXImIzM5O3MgZnJhbWV3b3JrPwoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgU3l6a2FsbGVyIHByb2JhYmx5IGRvZXNuJiMzOTt0IGhhdmUgYSBnZW5lcmljIG1lY2hhbmlzbSB0byBjcmVhdGUgYXJiaXRyYXJ5IFNQSSBkZXZpY2VzLiBVbmxlc3MgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBwc2V1ZG8tZGV2aWNlIGRlZmluZWQgZm9yIGl0LCBvciB3ZSByZWx5IG9uIGBzcGlkZXZgLCB3aGljaCBvbmx5IG9mZmVycyB1c2Vyc3BhY2UgYWNjZXNzIOKAkyBub3QgdGhlIGtlcm5lbCBkcml2ZXIgaW5zdGFudGlhdGlvbiB0aGF0IHdlIG5lZWQgZm9yIHByb3BlciBmdXp6aW5nLiBUaGF0JiMzOTtzIGEgbm9uLXN0YXJ0ZXIuCgpXYWl0IGEgbWludXRlLi4uIGNvdWxkIHdlIGxldmVyYWdlIHN5c2ZzPyBUaGF0JiMzOTtzIGEgbXVjaCBtb3JlIGVsZWdhbnQgc29sdXRpb24uIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIFNQSSBzdWJzeXN0ZW0gYWxsb3dzIHVzIHRvIGluc3RhbnRpYXRlIGRldmljZXMgdGhyb3VnaCBzeXNmcywgaW4gYSBzaW1pbGFyIHdheSB0byBob3cgSTJDIHVzZXMgYG5ld19kZXZpY2VgLiBJZiB0aGF04oCZcyBwb3NzaWJsZSwgaXQgd291bGQgcHJvdmlkZSBhIGNsZWFuIHdheSB0byBpbnRlZ3JhdGUgdGhpcyBpbnRvIHRoZSBmdXp6aW5nIGhhcm5lc3MuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgU1BJIHN1YnN5c3RlbSBmb3Igc29tZXRoaW5nIGxpa2UgYW4gYG5ld19kZXZpY2VgIGVxdWl2YWxlbnQgdG8gc2VlIGlmIGl0IGFsbG93cyB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxODowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXdfZGV2aWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zcGkvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvc3BpL3NwaS1hbHRlcmEtZGZsLmM9MTI0PXN0YXRpYyBpbnQgZGZsX3NwaV9hbHRlcmFfcHJvYmUoc3RydWN0IGRmbF9kZXZpY2UgKmRmbF9kZXYpXG4tLVxuZHJpdmVycy9zcGkvc3BpLWFsdGVyYS1kZmwuYy0xNzQtXG5kcml2ZXJzL3NwaS9zcGktYWx0ZXJhLWRmbC5jOjE3NTpcdGlmICghc3BpX25ld19kZXZpY2UoaG9zdCwgXHUwMDI2Ym9hcmRfaW5mbykpIHtcbmRyaXZlcnMvc3BpL3NwaS1hbHRlcmEtZGZsLmMtMTc2LVx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7JXMgZmFpbGVkIHRvIGNyZWF0ZSBTUEkgZGV2aWNlOiAlc1xcblwmIzM0Oyxcbi0tXG5kcml2ZXJzL3NwaS9zcGktYWx0ZXJhLXBsYXRmb3JtLmM9MzU9c3RhdGljIGludCBhbHRlcmFfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9zcGkvc3BpLWFsdGVyYS1wbGF0Zm9ybS5jLTExOS1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGRhdGEtXHUwMDNlbnVtX2RldmljZXM7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL3NwaS9zcGktYWx0ZXJhLXBsYXRmb3JtLmM6MTIwOlx0XHRcdGlmICghc3BpX25ld19kZXZpY2UoaG9zdCwgcGRhdGEtXHUwMDNlZGV2aWNlcyAmIzQzOyBpKSlcbmRyaXZlcnMvc3BpL3NwaS1hbHRlcmEtcGxhdGZvcm0uYy0xMjEtXHRcdFx0XHRkZXZfd2FybihcdTAwMjZwZGV2LVx1MDAzZWRldixcbi0tXG5kcml2ZXJzL3NwaS9zcGktYnV0dGVyZmx5LmM9MTc2PXN0YXRpYyB2b2lkIGJ1dHRlcmZseV9hdHRhY2goc3RydWN0IHBhcnBvcnQgKnApXG4tLVxuZHJpdmVycy9zcGkvc3BpLWJ1dHRlcmZseS5jLTI2NS1cdHBwLVx1MDAzZWluZm9bMF0uY29udHJvbGxlcl9kYXRhID0gcHA7XG5kcml2ZXJzL3NwaS9zcGktYnV0dGVyZmx5LmM6MjY2Olx0cHAtXHUwMDNlZGF0YWZsYXNoID0gc3BpX25ld19kZXZpY2UocHAtXHUwMDNlYml0YmFuZy5jdGxyLCBcdTAwMjZwcC1cdTAwM2VpbmZvWzBdKTtcbmRyaXZlcnMvc3BpL3NwaS1idXR0ZXJmbHkuYy0yNjctXHRpZiAocHAtXHUwMDNlZGF0YWZsYXNoKVxuLS1cbmRyaXZlcnMvc3BpL3NwaS1jaDM0MS5jPTE0MT1zdGF0aWMgaW50IGNoMzQxX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuLS1cbmRyaXZlcnMvc3BpL3NwaS1jaDM0MS5jLTIwNi1cbmRyaXZlcnMvc3BpL3NwaS1jaDM0MS5jOjIwNzpcdGNoMzQxLVx1MDAzZXNwaWRldiA9IHNwaV9uZXdfZGV2aWNlKGN0cmwsIFx1MDAyNmNoaXApO1xuZHJpdmVycy9zcGkvc3BpLWNoMzQxLmMtMjA4LVx0aWYgKCFjaDM0MS1cdTAwM2VzcGlkZXYpIHtcbi0tXG5kcml2ZXJzL3NwaS9zcGktY3M0Mmw0My5jPTMxMj1zdGF0aWMgaW50IGNzNDJsNDNfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9zcGkvc3BpLWNzNDJsNDMuYy00MjYtXG5kcml2ZXJzL3NwaS9zcGktY3M0Mmw0My5jOjQyNzpcdFx0aWYgKCFzcGlfbmV3X2RldmljZShwcml2LVx1MDAzZWN0bHIsIGFtcGxfaW5mbykpXG5kcml2ZXJzL3NwaS9zcGktY3M0Mmw0My5jLTQyOC1cdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwcml2LVx1MDAzZWRldiwgLUVOT0RFVixcbi0tXG5kcml2ZXJzL3NwaS9zcGktY3M0Mmw0My5jLTQzMC1cbmRyaXZlcnMvc3BpL3NwaS1jczQybDQzLmM6NDMxOlx0XHRpZiAoIXNwaV9uZXdfZGV2aWNlKHByaXYtXHUwMDNlY3RsciwgYW1wcl9pbmZvKSlcbmRyaXZlcnMvc3BpL3NwaS1jczQybDQzLmMtNDMyLVx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHByaXYtXHUwMDNlZGV2LCAtRU5PREVWLFxuLS1cbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jPTEzNzU9c3RhdGljIGludCBpbnRlbF9zcGlfcG9wdWxhdGVfY2hpcChzdHJ1Y3QgaW50ZWxfc3BpICppc3BpKVxuLS1cbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jLTE0MDEtXG5kcml2ZXJzL3NwaS9zcGktaW50ZWwuYzoxNDAyOlx0aWYgKCFzcGlfbmV3X2RldmljZShpc3BpLVx1MDAzZWhvc3QsIFx1MDAyNmNoaXApKVxuZHJpdmVycy9zcGkvc3BpLWludGVsLmMtMTQwMy1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuZHJpdmVycy9zcGkvc3BpLWludGVsLmMtMTQzMC1cbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jOjE0MzE6XHRpZiAoIXNwaV9uZXdfZGV2aWNlKGlzcGktXHUwMDNlaG9zdCwgXHUwMDI2Y2hpcCkpXG5kcml2ZXJzL3NwaS9zcGktaW50ZWwuYy0xNDMyLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5kcml2ZXJzL3NwaS9zcGkta3NwaTIuYz0zMTA9c3RhdGljIGludCBrc3BpMl9yZWdpc3Rlcl9kZXZpY2VzKHN0cnVjdCBrc3BpMiAqa3NwaSlcbi0tXG5kcml2ZXJzL3NwaS9zcGkta3NwaTIuYy0zMTYtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrc3BpLVx1MDAzZWF1eGRldi1cdTAwM2VpbmZvX3NpemU7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL3NwaS9zcGkta3NwaTIuYzozMTc6XHRcdHN0cnVjdCBzcGlfZGV2aWNlICpkZXZpY2UgPSBzcGlfbmV3X2RldmljZShrc3BpLVx1MDAzZWhvc3QsIFx1MDAyNmluZm9baV0pO1xuZHJpdmVycy9zcGkvc3BpLWtzcGkyLmMtMzE4LVxuLS1cbmRyaXZlcnMvc3BpL3NwaS1sbTcwbGxwLmM9MTg4PXN0YXRpYyB2b2lkIHNwaV9sbTcwbGxwX2F0dGFjaChzdHJ1Y3QgcGFycG9ydCAqcClcbi0tXG5kcml2ZXJzL3NwaS9zcGktbG03MGxscC5jLTI2Ni1cdHBwLVx1MDAzZWluZm8uY29udHJvbGxlcl9kYXRhID0gcHA7XG5kcml2ZXJzL3NwaS9zcGktbG03MGxscC5jOjI2NzpcdHBwLVx1MDAzZXNwaWRldl9sbTcwID0gc3BpX25ld19kZXZpY2UocHAtXHUwMDNlYml0YmFuZy5jdGxyLCBcdTAwMjZwcC1cdTAwM2VpbmZvKTtcbmRyaXZlcnMvc3BpL3NwaS1sbTcwbGxwLmMtMjY4LVx0aWYgKHBwLVx1MDAzZXNwaWRldl9sbTcwKVxuLS1cbmRyaXZlcnMvc3BpL3NwaS1sbTcwbGxwLmMtMjcxLVx0ZWxzZSB7XG5kcml2ZXJzL3NwaS9zcGktbG03MGxscC5jOjI3MjpcdFx0ZGV2X3dhcm4oXHUwMDI2cGQtXHUwMDNlZGV2LCBcJiMzNDtzcGlfbmV3X2RldmljZSBmYWlsZWRcXG5cJiMzNDspO1xuZHJpdmVycy9zcGkvc3BpLWxtNzBsbHAuYy0yNzMtXHRcdHN0YXR1cyA9IC1FTk9ERVY7XG4tLVxuZHJpdmVycy9zcGkvc3BpLXhpbGlueC5jPTQwMj1zdGF0aWMgaW50IHhpbGlueF9zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL3NwaS9zcGkteGlsaW54LmMtNTA5LVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZGF0YS1cdTAwM2VudW1fZGV2aWNlczsgaSYjNDM7JiM0MzspXG5kcml2ZXJzL3NwaS9zcGkteGlsaW54LmM6NTEwOlx0XHRcdHNwaV9uZXdfZGV2aWNlKGhvc3QsIHBkYXRhLVx1MDAzZWRldmljZXMgJiM0MzsgaSk7XG5kcml2ZXJzL3NwaS9zcGkteGlsaW54LmMtNTExLVx0fVxuLS1cbmRyaXZlcnMvc3BpL3NwaS5jPTc5MT1FWFBPUlRfU1lNQk9MX0dQTChzcGlfYWRkX2RldmljZSk7XG4tLVxuZHJpdmVycy9zcGkvc3BpLmMtNzkzLS8qKlxuZHJpdmVycy9zcGkvc3BpLmM6Nzk0OiAqIHNwaV9uZXdfZGV2aWNlIC0gaW5zdGFudGlhdGUgb25lIG5ldyBTUEkgZGV2aWNlXG5kcml2ZXJzL3NwaS9zcGkuYy03OTUtICogQGN0bHI6IENvbnRyb2xsZXIgdG8gd2hpY2ggZGV2aWNlIGlzIGNvbm5lY3RlZFxuLS1cbmRyaXZlcnMvc3BpL3NwaS5jLTgwNi0gKi9cbmRyaXZlcnMvc3BpL3NwaS5jOjgwNzpzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpX25ld19kZXZpY2Uoc3RydWN0IHNwaV9jb250cm9sbGVyICpjdGxyLFxuZHJpdmVycy9zcGkvc3BpLmMtODA4LVx0XHRcdFx0ICBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKmNoaXApXG4tLVxuZHJpdmVycy9zcGkvc3BpLmMtODYyLX1cbmRyaXZlcnMvc3BpL3NwaS5jOjg2MzpFWFBPUlRfU1lNQk9MX0dQTChzcGlfbmV3X2RldmljZSk7XG5kcml2ZXJzL3NwaS9zcGkuYy04NjQtXG4tLVxuZHJpdmVycy9zcGkvc3BpLmM9ODkzPXN0YXRpYyB2b2lkIHNwaV9tYXRjaF9jb250cm9sbGVyX3RvX2JvYXJkaW5mbyhzdHJ1Y3Qgc3BpX2NvbnRyb2xsZXIgKmN0bHIsXG4tLVxuZHJpdmVycy9zcGkvc3BpLmMtOTAwLVxuZHJpdmVycy9zcGkvc3BpLmM6OTAxOlx0ZGV2ID0gc3BpX25ld19kZXZpY2UoY3RsciwgYmkpO1xuZHJpdmVycy9zcGkvc3BpLmMtOTAyLVx0aWYgKCFkZXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE4OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDQ3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFc1MTAwIFNQSSBEcml2ZXIgaW4gU3l6a2FsbGVyKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhlIFc1MTAwIFNQSSBkcml2ZXIgd2l0aGluIHN5emthbGxlci4gVGhlIGltbWVkaWF0ZSBodXJkbGUgaXMgdGhhdCB0aGVyZSBpc24mIzM5O3QgYSBkaXJlY3Qgc3lzZnMgYXR0cmlidXRlIGxpa2UgYG5ld19kZXZpY2VgIGZvciBTUEksIHNpbWlsYXIgdG8gd2hhdCB3ZSBoYXZlIHdpdGggSTJDICh0aGFua3MsIGBpMmMtc3lzZnMuY2AhKS4gVGhhdCYjMzk7cyBhIG5vLWdvLgoKTXkgZmlyc3QgdGhvdWdodCB3YXMsICYjMzQ7V2FpdCwgZG9lc24mIzM5O3Qgc3l6a2FsbGVyIGhhdmUgc29tZSB0cmlja2VyeSB3aXRoIGRldmljZSB0cmVlIG92ZXJsYXlzPyYjMzQ7IEJ1dCBxdWlja2x5IEkgcmVtZW1iZXIsIG5vLCBzeXprYWxsZXIgZG9lc24mIzM5O3Qgc3VwcG9ydCBkeW5hbWljYWxseSBsb2FkaW5nIERUIG92ZXJsYXlzIGR1cmluZyBmdXp6aW5nLiBUaGF0IHdvdWxkIGJlICp3YXkqIHRvbyBjb21wbGV4LgoKVGhlbiwgSSBzdGFydGVkIHRvIHRoaW5rIGlmIHRoZXJlIHdhcyBhbiBlcXVpdmFsZW50IHRvIHRoZSBleGlzdGluZyBwcmltaXRpdmVzLCBsaWtlIGBzeXpfdXNiX2Nvbm5lY3RgLCBgc3l6XzgwMjExX2pvaW5faWJzc2AsIGBzeXpfZ2VuZXRsaW5rYCwgb3IgYHN5el92aGNpYCwgdGhhdCB3b3JrIGZvciBVU0IsIG1hYzgwMjExLCBuZXRsaW5rIGFuZCBibHVldG9vdGguIEJ1dCBubywgdGhlcmUmIzM5O3Mgbm8gZXF1aXZhbGVudCBgc3l6X3NwaV9jb25uZWN0YC4gVGhhdCB3b3VsZCBiZSB0b28gZWFzeSEKCk9rYXksIG5ldyBhbmdsZS4gV2hhdCBhYm91dCBzb21lIG90aGVyIHdheSB0byBpbnN0YW50aWF0ZSB0aGUgZHJpdmVyPyBCdXQsIHNpbmNlIGl0JiMzOTtzIGFuIFNQSSBkcml2ZXIsIHRoYXQmIzM5O3MgdW5saWtlbHkuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vay4gQ2FuIHdlIGV2ZW4gKnJlYWNoKiBgdzUxMDBfcHJvYmVgIGluIHRoZSBzdGFuZGFyZCBzeXprYWxsZXIgc2V0dXA/IEl0JiMzOTtzIGFuIFNQSSBkcml2ZXIsIHdoaWNoIG1lYW5zIGl0IHJlbGllcyBvbiBhbiBTUEkgZGV2aWNlIGJlaW5nIHJlZ2lzdGVyZWQgc29tZXdoZXJlLCBzb21laG93LiBTUEkgZGV2aWNlcyBnZXQgcmVnaXN0ZXJlZCB2aWEgU1BJIGNvbnRyb2xsZXJzLCBwYXJzaW5nIGRldmljZSB0cmVlcywgQUNQSSB0YWJsZXMsIG9yIGJvYXJkIGZpbGVzLgoKQW5kIGhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyB0cmlja3kuIEluIGEgdHlwaWNhbCB4ODZfNjQgVk0sIGxpa2UgdGhlIG9uZSB3ZSYjMzk7cmUgdXNpbmcgd2l0aCBRRU1VLCB0aGVyZSYjMzk7cyBubyBTUEkgY29udHJvbGxlciB0aGF0IGNhbiBwYXJzZSBhcmJpdHJhcnkgRFQgbm9kZXMuIFVubGVzcyB3ZSB3ZXJlIG9uIGFuIEFSTSBib2FyZCB3aXRoIGEgRFQsIGJ1dCBldmVuIHRoZW4sIHRoZSBEVCBpcyBzdGF0aWMuIFNvLCB0aGUgYm90dG9tIGxpbmUgaXMgYHc1MTAwX3Byb2JlYCBpcyB1bnJlYWNoYWJsZSBpbiBtb3N0IHN0YW5kYXJkIHN5emthbGxlciBlbnZpcm9ubWVudHMuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBgdzUxMDBgIGNhbiYjMzk7dCBiZSBpbnN0YW50aWF0ZWQgdmlhIHNvbWUgb3RoZXIgYnVzIEkmIzM5O20gZm9yZ2V0dGluZyBhYm91dC4gQnV0IEkmIzM5O20gcHJldHR5IHN1cmUgd2UmIzM5O3JlIHN0dWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxODowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3NTEwMF9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmM9NDIxPXN0YXRpYyBpbnQgdzUxMDBfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLXNwaS5jLTQ1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYzo0NTM6XHRyZXR1cm4gdzUxMDBfcHJvYmUoXHUwMDI2c3BpLVx1MDAzZWRldiwgb3BzLCBwcml2X3NpemUsIG1hYywgc3BpLVx1MDAzZWlycSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmMtNDU0LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYz03Mzk9RVhQT1JUX1NZTUJPTF9HUEwodzUxMDBfb3BzX3ByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtNzQwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6NzQxOmludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTc0Mi1cdFx0aW50IHNpemVvZl9vcHNfcHJpdiwgY29uc3Qgdm9pZCAqbWFjX2FkZHIsIGludCBpcnEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtODgyLX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jOjg4MzpFWFBPUlRfU1lNQk9MX0dQTCh3NTEwMF9wcm9iZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy04ODQtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmg9Mjk9dm9pZCAqdzUxMDBfb3BzX3ByaXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmgtMzAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuaDozMTppbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuaC0zMi1cdFx0aW50IHNpemVvZl9vcHNfcHJpdiwgY29uc3Qgdm9pZCAqbWFjX2FkZHIsIGludCBpcnEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxODowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg1MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFc1MTAwIERyaXZlciBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIGp1c3Qgc3BvdHRlZCBgdzUxMDAtc3BpLmNgIGluIHRoZSBjb2RlLiBUaGF0IHN1Z2dlc3RzIHRoZXJlIG1pZ2h0IGJlIGFuIFNQSS1iYXNlZCBXNTEwMCBkcml2ZXIgaW4gcGxhY2UuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGFsc28gYSBNZW1vcnktTWFwcGVkIEkvTyAoTU1JTykgaW1wbGVtZW50YXRpb24gc29tZXdoZXJlPyBUaGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyBJIHdhbnQgdG8gYXNjZXJ0YWluLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGJ5IGNoZWNraW5nIHRoZSBvYnZpb3VzIGxvY2F0aW9uOiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvYCBkaXJlY3RvcnksIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBpdC4gSSBuZWVkIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O3c1MTAwLXNwaS5jJiMzNDssCiAgICAmIzM0O3c1MTAwLmMmIzM0OywKICAgICYjMzQ7dzUxMDAuaCYjMzQ7CiAgXSwKICAmIzM0O1N1YmRpcnMmIzM0OzogbnVsbAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTIxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFdpem5ldCBEcml2ZXIgRmlsZXMqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgV2l6bmV0IEV0aGVybmV0IGRyaXZlcnMuIFJpZ2h0IG5vdywgSSYjMzk7bSBvbmx5IHNlZWluZyBgdzUxMDAtc3BpLmNgLCBgdzUxMDAuY2AsIGFuZCBgdzUxMDAuaGAgaW4gdGhpcyBpbW1lZGlhdGUgdmlldy4gSG9sZCBvbiwgd2FzbiYjMzk7dCB0aGVyZSBhIGB3NTMwMC5jYCBpbiB0aGlzIGRpcmVjdG9yeSB0b28/IEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIGJlIHRob3JvdWdoLgoKUmlnaHQsIHNvIGhvdyBhcmUgdGhlc2UgZmlsZXMgYmVpbmcgZm91bmQ/IEkgdGhvdWdodCBgY29kZXNlYXJjaC1kaXItaW5kZXhgIHdhcyBqdXN0IHJldHVybmluZyBmaWxlcyB0aGF0ICptYXRjaGVkKiBhIHByZWZpeCwgYnV0IGl0JiMzOTtzIHJlYWxseSBnaXZpbmcgbWUgKmFsbCogZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSwgaXNuJiMzOTt0IGl0PyBPa2F5LCBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gbWluZC4KCldhaXQsIGxvb2tpbmcgYXQgdGhlIHJlc3BvbnNlLCBpdCB3YXM6ICYjMzQ7RmlsZXM6IFsmIzM0O3c1MTAwLXNwaS5jJiMzNDssICYjMzQ7dzUxMDAuYyYjMzQ7LCAmIzM0O3c1MTAwLmgmIzM0O10mIzM0Oy4gT2theSwgc28gdGhhdCAqaXMqIGV2ZXJ5dGhpbmcgYmVpbmcgcmV0dXJuZWQuIEZpbmUsIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZXNlIGZpbGVzLCB0aGVuLgoKQnV0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3Npbmcgc29tZXRoaW5nIGV2ZW4gYmlnZ2VyLiBMZXQgbWUgZG91YmxlIGNoZWNrIHRoZSB3aG9sZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L2AgZGlyZWN0b3J5IGluIHRoZSBrZXJuZWwgdHJlZSB0byBiZSBzdXJlIEkgZGlkbiYjMzk7dCBtaXNzIHNvbWV0aGluZy4gSSBjYW4mIzM5O3QgYmUgdG9vIGNhcmVmdWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oy4qJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9NYWtlZmlsZToxOiMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX1dJWk5FVF9XNTEwMCkgJiM0Mzs9IHc1MTAwLm8gdzUxMDAtc3BpLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTg6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3MDQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkFuYWx5emluZyB0aGUgU1BJIERyaXZlciBDb250ZXh0KioKClJpZ2h0LCBzbyBpdCBsb29rcyBsaWtlIEkmIzM5O20gZGVhbGluZyB3aXRoIGEgc2l0dWF0aW9uIHdoZXJlIG5vIGV4dGVybmFsIGZpbGVzIGFyZSBpbnZvbHZlZC4gSW50ZXJlc3RpbmcuIEl0JiMzOTtzIGFuIFNQSSBkcml2ZXIsIHdoaWNoIG1lYW5zIGl0IGluaGVyZW50bHkgcmVsaWVzIG9uIGEgcGh5c2ljYWwgU1BJIGRldmljZSBiZWluZyBwcmVzZW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gc2ltdWxhdGUgdGhpcyBpbiBRRU1VLiBOb3csIHR5cGljYWxseSwgaW4gUUVNVSwgaW5zdGFudGlhdGluZyB0aGVzZSBkZXZpY2VzIGZyb20gdXNlciBzcGFjZSBpcyBhIHRyaWNreSBpc3N1ZS4gSXQgaGluZ2VzIG9uIHdoZXRoZXIgdGhlIHNpbXVsYXRlZCBib2FyZCBoYXMgYW4gU1BJIGNvbnRyb2xsZXIgYW5kIHRoZW4gaWYgdGhlcmUmIzM5O3MgYSB1c2FibGUgc3lzZnMgaW50ZXJmYWNlIGZvciBpdCwgYnV0IEkgcmVjYWxsIGNoZWNraW5nIGVhcmxpZXIsIGFuZCB1bmZvcnR1bmF0ZWx5LCBTUEkgZG9lc24mIzM5O3QgaGF2ZSB0aGF0IGhhbmR5IGBuZXdfZGV2aWNlYCBzeXNmcyBhdHRyaWJ1dGUgdG8gYXV0b21hdGljYWxseSBjcmVhdGUgdGhlIGRldmljZS4KClNvLCB0aGUgcXVlc3Rpb24gYmVjb21lcywgaG93ICplbHNlKiBjYW4gSSBtYWtlIGFuIFNQSSBkZXZpY2UgYXBwZWFyPyBJIGltbWVkaWF0ZWx5IHRob3VnaHQsIHBlcmhhcHMgc29tZXRoaW5nIGxpa2UgYHNwaS1tb2NrYD8gVW5mb3J0dW5hdGVseSwgbm8gbHVjaywgaXQgZG9lc24mIzM5O3QgbG9vayBsaWtlIFN5emthbGxlciBoYW5kbGVzIHRoYXQuIFRoZW4gSSBzdGFydGVkIHRvIGNvbnNpZGVyIGBwbGF0Zm9ybV9kZXZpY2VgIHdoaWNoIEkga25vdyBjYW4gYmUgdXNlZCB0byBzZXQgdXAgZGV2aWNlcy4gSG1tbSwgYnV0IG5vLCBwbGF0Zm9ybV9kZXZpY2UgaXMgcHJpbWFyaWx5IHVzZWQgdG8gKnJlZ2lzdGVyKiB0aGUgYHNwaV9kcml2ZXJgLCBub3QgaW5zdGFudGlhdGUgdGhlIGRldmljZSBpdHNlbGYuIE9rYXksIHNvIEkgYW0gc3R1Y2suIFdoYXQgbm93PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxODowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NwaV9yZWdpc3Rlcl9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTg6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqRHJpdmVyIFJlZ2lzdHJhdGlvbiBEZWVwIERpdmUqKgoKQWxyaWdodCwgaGFuZyBvbiBhIHNlY29uZC4gVGhhdCYjMzk7cyB0aGUgY29yZSBxdWVzdGlvbiwgaXNuJiMzOTt0IGl0PyBIb3cgZXhhY3RseSAqZG9lcyogdGhlIHN5c3RlbSBoYW5kbGUgZHJpdmVyIHJlZ2lzdHJhdGlvbj8gSSBtZWFuLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIG11bHRpLWZhY2V0ZWQgcHJvY2VzcywgcG90ZW50aWFsbHkgaW52b2x2aW5nIGhhcmR3YXJlLCBzb2Z0d2FyZSwgYW5kIGV2ZW4gZXh0ZXJuYWwgZGF0YWJhc2VzIGRlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24uCgpGaXJzdCwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBkaWZmZXJlbnQgbGV2ZWxzIG9mIHJlZ2lzdHJhdGlvbi4gSXMgaXQgc2ltcGx5IHJlY29nbml6aW5nIGEgZGV2aWNlLCBvciBpcyBpdCBnb2luZyBkZWVwZXIgdG8gZ2F0aGVyIHNwZWNpZmljcyBhYm91dCB0aGUgZHJpdmVyJiMzOTtzIGNhcGFiaWxpdGllcyBhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbT8gSXMgdGhlcmUgYSBkeW5hbWljIGxvYWRpbmcgY29tcG9uZW50LCBvciBpcyBpdCBtb3JlIG9mIGEgcHJlLWNvbXBpbGVkIHNldHVwPwoKSSBhbHNvIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBkaWdpdGFsbHkgc2lnbmVkIGRyaXZlciB0aGF0IHRoZSBzeXN0ZW0gY2FuIHZlcmlmeT8gSXMgdGhlcmUgYSBkcml2ZXIgc2lnbmluZyBwb2xpY3kgZW5mb3JjZWQsIG1heWJlIHJlcXVpcmluZyBhIHNwZWNpZmljIGNlcnRpZmljYXRlIGF1dGhvcml0eT8gT3IgaXMgdGhpcyBhIG1vcmUgb3BlbiBzeXN0ZW0sIHRoYXQgbWF5IGFsbG93IHVuc2lnbmVkIGRyaXZlcnMgb3Igb25lcyB0aGF0IGFyZW4mIzM5O3QgdmVyaWZpZWQ/IEkmIzM5O20gY3VyaW91cyBpZiB0aGV5IHdlbnQgd2l0aCBhIHBvbGljeSBvZiBhbGxvd2luZyB1bnNpZ25lZCBkcml2ZXJzIGFuZCB0aGUgYXNzb2NpYXRlZCByaXNrcy4KClRoZW4sIHRoZXJlJiMzOTtzIHRoZSBxdWVzdGlvbiBvZiBkaXNjb3ZlcnkuIERvZXMgdGhlIHN5c3RlbSBhdXRvbWF0aWNhbGx5IGRldGVjdCBuZXcgZHJpdmVycyB1cG9uIGhhcmR3YXJlIGNvbm5lY3Rpb24sIG9yIGlzIGl0IGEgbWFudWFsIHByb2Nlc3Mgd2hlcmUgdGhlIHVzZXIgaGFzIHRvIHBvaW50IHRoZSBzeXN0ZW0gdG8gdGhlIGNvcnJlY3QgZmlsZXM/IElzIHRoZXJlIHNvbWUga2luZCBvZiBwbHVnLWFuZC1wbGF5IG1lY2hhbmlzbSBhdCB3b3JrIGhlcmU/IEFuZCBpZiBzbywgaG93IGRvZXMgdGhhdCBpbnRlcmFjdGlvbiBvY2N1cj8KClVsdGltYXRlbHksIHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcyBoYXMgaW1wbGljYXRpb25zIGZvciBzeXN0ZW0gc3RhYmlsaXR5LCBzZWN1cml0eSwgYW5kIHRoZSBvdmVyYWxsIHVzZXIgZXhwZXJpZW5jZS4gSXQgbmVlZHMgdG8gYmUgcm9idXN0LCBzZWN1cmUsIGFuZCBhcyBzZWFtbGVzcyBhcyBwb3NzaWJsZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGludHJpY2FjaWVzIG9mIGhvdyB0aGUgcmVnaXN0cmF0aW9uIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGtlcm5lbCBhbmQgaWYgdGhlcmUgYXJlIGFueSBtZWNoYW5pc21zIGluIHBsYWNlIHRvIGhhbmRsZSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGVycm9ycy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX3NwaV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYz00Njk9c3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHc1MTAwX3NwaV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLXNwaS5jLTQ3OC19O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLXNwaS5jOjQ3OTptb2R1bGVfc3BpX2RyaXZlcih3NTEwMF9zcGlfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYy00ODAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzE1CgkJCQkJCQlvdXRwdXQ6IDE0NAoJCQkJCQkJdGhvdWdodHM6IDQxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBTUEkgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O3ZlIGV4YW1pbmVkIHRoaXMgY29kZSwgYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgYW4gYHNwaV9kcml2ZXJgLiBUaGUgY29yZSBpc3N1ZSBoZXJlIGlzIHRoYXQsIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCB0aGVyZSYjMzk7cyBubyByZWxpYWJsZSB3YXkgdG8gaW5zdGFudGlhdGUgdGhpcyBwYXJ0aWN1bGFyIFNQSSBkZXZpY2Ugd2l0aGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRS4gVGhpcyBtZWFucyBzeXprYWxsZXIsIGluIGl0cyBjdXJyZW50IGNvbmZpZ3VyYXRpb24sIHdvbiYjMzk7dCBiZSBhYmxlIHRvIHJlYWNoIGl0LgoKTGV0IG1lIGp1c3Qgc29saWRpZnkgdGhpcyByZWFzb25pbmcuIEkmIzM5O20gcmVjYWxsaW5nIGhvdyBJMkMgY2FuIGNyZWF0ZSBhIG5ldyBkZXZpY2UsIGJ1dCBTUEkgZG9lcyBub3QuIFRoZXJlJiMzOTtzIHRoYXQgYHNwaS1sb29wYmFjay10ZXN0YCBtb2R1bGUsIGJ1dCB0aGF04oCZcyBjbGVhcmx5IGRlc2lnbmVkIGZvciB0ZXN0aW5nIGFuZCB3b24mIzM5O3QgZ2V0IHVzIHdoZXJlIHdlIG5lZWQgdG8gYmUuIEkgaGF2ZW7igJl0IHNlZW4gYW55dGhpbmcgaW4gc3l6a2FsbGVyIGxpa2UgYSBgc3l6X3NwaV9jb25uZWN0YCBwc2V1ZG8tc3lzY2FsbCBlaXRoZXIuIFRoZSBvbmx5IGV4Y2VwdGlvbiB3b3VsZCBiZSBpZiBzeXprYWxsZXIgcmFuIG9uIGEgdmVyeSBzcGVjaWZpYyBBUk0gYm9hcmQgbW9kZWwgaW5zaWRlIFFFTVUgd2hlcmUgdGhpcyBkZXZpY2Ugd2FzIHN0YXRpY2FsbHkgZGVmaW5lZCBpbiB0aGUgZGV2aWNlIHRyZWUsIGJ1dCB0aGF0JiMzOTtzIG5vdCB0aGUgdHlwaWNhbCB4ODZfNjQgZ2VuZXJpYyBQQyBtYWNoaW5lLCBvciB0aGUgYHZpcnRgIEFSTTY0IHNldHVwIHRoYXQgc3l6a2FsbGVyIHVzdWFsbHkgcnVucyBvbi4gVGhvc2UgZW52aXJvbm1lbnRzIGRvbiYjMzk7dCBoYXZlIGhhcmRjb2RlZCBXaXpuZXQgVzUxMDAgU1BJIGRldmljZSBjb25maWd1cmF0aW9ucy4gU28sIHVucmVhY2hhYmxlLgoKTm93LCBsZXQmIzM5O3MgZ28gYmFjayBhbmQgcmV2aWV3IHRoZSBvcmlnaW5hbCBwcm9tcHQuIEl0JiMzOTtzIGFza2luZyBmb3IgYSBgV29ydGhGdXp6aW5nPWZhbHNlYCByZXR1cm4gaWYgdGhlIHBhdGNoIGludm9sdmVzIGNvZGUgdGhhdCBjYW4mIzM5O3QgYmUgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGV2ZW4gd2l0aCBlbXVsYXRlZCBoYXJkd2FyZS4gSXQgYWxzbyBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIHRoYXQgcmVseSBvbiBwaHlzaWNhbCBoYXJkd2FyZS4gVGhpcyBmaXRzIGxpa2UgYSBnbG92ZS4gVGhpcyBTUEkgRXRoZXJuZXQgY29udHJvbGxlciBpcyB2ZW5kb3Itc3BlY2lmaWMuIEl0IHJlcXVpcmVzIGVpdGhlciBwaHlzaWNhbCBTUEkgaGFyZHdhcmUgb3IgYSBzcGVjaWZpYyBRRU1VIGVtdWxhdGlvbiB0aGF0IGlzbiYjMzk7dCBnZW5lcmljYWxseSBhdmFpbGFibGUgYW5kIGNhbiYjMzk7dCBiZSBzZXQgdXAgZnJvbSB1c2Vyc3BhY2UuIEl0JiMzOTtzIGNsZWFybHkgJiMzNDtpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OwoKVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGFuZCBwcm92aWRpbmcgdGhlIHJhdGlvbmFsZSBhcyBzdGF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdpem5ldCBXNTEwMC9XNTIwMC9XNTUwMCBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGlzIGFuIFNQSSBkZXZpY2UgZHJpdmVyLiBJbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSBvciBHQ0UpIHVzZWQgYnkgc3l6a2FsbGVyLCB0aGVyZSBpcyBubyBnZW5lcmljIHdheSB0byBpbnN0YW50aWF0ZSBhcmJpdHJhcnkgU1BJIGRldmljZXMgZnJvbSB1c2Vyc3BhY2UgKHVubGlrZSBJMkMmIzM5O3MgYG5ld19kZXZpY2VgIHN5c2ZzIGludGVyZmFjZSBvciBVU0ImIzM5O3MgZHVtbXlfaGNkKS4gU2luY2UgdGhlIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBhbmQgdGhlIGRldmljZSBjYW5ub3QgYmUgZHluYW1pY2FsbHkgY3JlYXRlZCwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdpem5ldCBXNTEwMC9XNTIwMC9XNTUwMCBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGlzIGFuIFNQSSBkZXZpY2UgZHJpdmVyLiBJbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSBvciBHQ0UpIHVzZWQgYnkgc3l6a2FsbGVyLCB0aGVyZSBpcyBubyBnZW5lcmljIHdheSB0byBpbnN0YW50aWF0ZSBhcmJpdHJhcnkgU1BJIGRldmljZXMgZnJvbSB1c2Vyc3BhY2UgKHVubGlrZSBJMkMmIzM5O3MgYG5ld19kZXZpY2VgIHN5c2ZzIGludGVyZmFjZSBvciBVU0ImIzM5O3MgZHVtbXlfaGNkKS4gU2luY2UgdGhlIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBhbmQgdGhlIGRldmljZSBjYW5ub3QgYmUgZHluYW1pY2FsbHkgY3JlYXRlZCwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE4OjA1OjIyLjE0MzAyMzA1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE5MDA3OTQ2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXaXpuZXQgVzUxMDAvVzUyMDAvVzU1MDAgRXRoZXJuZXQgZHJpdmVyLCB3aGljaCBpcyBhbiBTUEkgZGV2aWNlIGRyaXZlci4gSW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUgb3IgR0NFKSB1c2VkIGJ5IHN5emthbGxlciwgdGhlcmUgaXMgbm8gZ2VuZXJpYyB3YXkgdG8gaW5zdGFudGlhdGUgYXJiaXRyYXJ5IFNQSSBkZXZpY2VzIGZyb20gdXNlcnNwYWNlICh1bmxpa2UgSTJDJ3MgYG5ld19kZXZpY2VgIHN5c2ZzIGludGVyZmFjZSBvciBVU0IncyBkdW1teV9oY2QpLiBTaW5jZSB0aGUgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGFuZCB0aGUgZGV2aWNlIGNhbm5vdCBiZSBkeW5hbWljYWxseSBjcmVhdGVkLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxODowNToyMi4xNDMwMjc4NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE4ODM0ODQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNWYxMzgxZTVhZGUzZmY5YjNjNDIzYzkwMGJhM2I4ZTY1YTU3ODYzYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyA2IDE4OjA1OjIxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1MTAwLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpem5ldCx3NTEwMC55YW1sXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jZWJmNDM3YWQzYzRhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1MTAwLnlhbWxcXG5AQCAtMCwwICsxLDc0IEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxcbislWUFNTCAxLjJcXG4rLS0tXFxuKyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3dpem5ldCx3NTEwMC55YW1sI1xcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcXG4rXFxuK3RpdGxlOiBXaXpuZXQgdzUxMDAvdzUyMDAvdzU1MDAgU1BJIEV0aGVybmV0IENvbnRyb2xsZXJcXG4rXFxuK21haW50YWluZXJzOlxcbisgIC0gQXJ0aHVyIENyw6lwaW4gTGVibG9uZCBcXHUwMDNjYXJ0aHVyQG1hcm1vdHR1cy5uZXRcXHUwMDNlXFxuK1xcbitkZXNjcmlwdGlvbjogfFxcbisgIFRoaXMgaXMgYSBzdGFuZGFsb25lIDEwLzEwMCBNQml0IEV0aGVybmV0IGNvbnRyb2xsZXIgd2l0aCBTUEkgaW50ZXJmYWNlLlxcbitcXG4rYWxsT2Y6XFxuKyAgLSAkcmVmOiAvc2NoZW1hcy9uZXQvZXRoZXJuZXQtY29udHJvbGxlci55YW1sI1xcbisgIC0gJHJlZjogL3NjaGVtYXMvc3BpL3NwaS1wZXJpcGhlcmFsLXByb3BzLnlhbWwjXFxuK1xcbitwcm9wZXJ0aWVzOlxcbisgIGNvbXBhdGlibGU6XFxuKyAgICBlbnVtOlxcbisgICAgICAtIHdpem5ldCx3NTEwMFxcbisgICAgICAtIHdpem5ldCx3NTIwMFxcbisgICAgICAtIHdpem5ldCx3NTUwMFxcbitcXG4rICBpbnRlcnJ1cHRzOlxcbisgICAgbWF4SXRlbXM6IDFcXG4rXFxuKyAgcmVnOlxcbisgICAgbWF4SXRlbXM6IDFcXG4rXFxuKyAgc3BpLW1heC1mcmVxdWVuY3k6XFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgQWNjb3JkaW5nIHRvIHRoZSB3NTUwMCBkYXRhc2hlZXQsIHRoZSBjaGlwIGFsbG93cyBhIG1heGltdW0gb2YgODAgTUh6LFxcbisgICAgICBob3dldmVyLCBib2FyZCBkZXNpZ25zIG1heSBuZWVkIHRvIGxpbWl0IHRoaXMgdmFsdWUuXFxuKyAgICBtYXhpbXVtOiA4MDAwMDAwMFxcbitcXG4rICBsaW5rLWdwaW9zOlxcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIEFuIG9wdGlvbmFsIEdQSU8gbGluZSB0aGF0IGNhbiBiZSB3aXJlZCB0byB0aGUgTElOS0xFRCBwaW4gb2YgdGhlIHc1NTAwXFxuKyAgICAgIGFzIGFuIGludGVycnVwdCB0byBkZXRlY3QgbGluayBzdGF0dXMgY2hhbmdlcy5cXG4rICAgIG1heEl0ZW1zOiAxXFxuK1xcbityZXF1aXJlZDpcXG4rICAtIGNvbXBhdGlibGVcXG4rICAtIHJlZ1xcbisgIC0gaW50ZXJydXB0c1xcbitcXG4rdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxcbitcXG4rZXhhbXBsZXM6XFxuKyAgLSB8XFxuKyAgICAvKiBFeGFtcGxlIChmb3IgUmFzcGJlcnJ5IFBpIHdpdGggcGluIGNvbnRyb2wgc3R1ZmYgZm9yIEdQSU8gaXJxKSAqL1xcbitcXG4rICAgICNpbmNsdWRlIFxcdTAwM2NkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaFxcdTAwM2VcXG4rICAgICNpbmNsdWRlIFxcdTAwM2NkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaFxcdTAwM2VcXG4rXFxuKyAgICBzcGkge1xcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rICAgICAgICBldGhlcm5ldEAwIHtcXG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJ3aXpuZXQsdzU1MDBcXFwiO1xcbisgICAgICAgICAgICByZWcgPSBcXHUwMDNjMFxcdTAwM2U7XFxuKyAgICAgICAgICAgIHBpbmN0cmwtbmFtZXMgPSBcXFwiZGVmYXVsdFxcXCI7XFxuKyAgICAgICAgICAgIHBpbmN0cmwtMCA9IFxcdTAwM2NcXHUwMDI2ZXRoMV9waW5zXFx1MDAzZTtcXG4rICAgICAgICAgICAgaW50ZXJydXB0LXBhcmVudCA9IFxcdTAwM2NcXHUwMDI2Z3Bpb1xcdTAwM2U7XFxuKyAgICAgICAgICAgIGludGVycnVwdHMgPSBcXHUwMDNjMjUgSVJRX1RZUEVfRURHRV9GQUxMSU5HXFx1MDAzZTtcXG4rICAgICAgICAgICAgbGluay1ncGlvcyA9IFxcdTAwM2NcXHUwMDI2Z3BpbyAyNCBHUElPX0FDVElWRV9MT1dcXHUwMDNlO1xcbisgICAgICAgICAgICBzcGktbWF4LWZyZXF1ZW5jeSA9IFxcdTAwM2MzMDAwMDAwMFxcdTAwM2U7XFxuKyAgICAgICAgICAgIGxvY2FsLW1hYy1hZGRyZXNzID0gWyBhMCBiMCBjMCBkMCBlMCBmMCBdO1xcbisgICAgICAgIH07XFxuKyAgICB9O1xcbisuLi5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0XFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggZTk2NjU3OThjNGJlNi4uMDAwMDAwMDAwMDAwMFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1eDAwLnR4dFxcbisrKyAvZGV2L251bGxcXG5AQCAtMSw1MCArMCwwIEBAXFxuLSogV2l6bmV0IHc1eDAwXFxuLVxcbi1UaGlzIGlzIGEgc3RhbmRhbG9uZSAxMC8xMDAgTUJpdCBFdGhlcm5ldCBjb250cm9sbGVyIHdpdGggU1BJIGludGVyZmFjZS5cXG4tXFxuLUZvciBlYWNoIGRldmljZSBjb25uZWN0ZWQgdG8gYSBTUEkgYnVzLCBkZWZpbmUgYSBjaGlsZCBub2RlIHdpdGhpblxcbi10aGUgU1BJIG1hc3RlciBub2RlLlxcbi1cXG4tUmVxdWlyZWQgcHJvcGVydGllczpcXG4tLSBjb21wYXRpYmxlOiBTaG91bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3RyaW5nczpcXG4tXFx0ICAgICAgXFxcIndpem5ldCx3NTEwMFxcXCJcXG4tXFx0ICAgICAgXFxcIndpem5ldCx3NTIwMFxcXCJcXG4tXFx0ICAgICAgXFxcIndpem5ldCx3NTUwMFxcXCJcXG4tLSByZWc6IFNwZWNpZnkgdGhlIFNQSSBjaGlwIHNlbGVjdCB0aGUgY2hpcCBpcyB3aXJlZCB0by5cXG4tLSBpbnRlcnJ1cHRzOiBTcGVjaWZ5IHRoZSBpbnRlcnJ1cHQgaW5kZXggd2l0aGluIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciAocmVmZXJyZWRcXG4tICAgICAgICAgICAgICB0byBhYm92ZSBpbiBpbnRlcnJ1cHQtcGFyZW50KSBhbmQgaW50ZXJydXB0IHR5cGUuIHc1eDAwIG5hdGl2ZWx5XFxuLSAgICAgICAgICAgICAgZ2VuZXJhdGVzIGZhbGxpbmcgZWRnZSBpbnRlcnJ1cHRzLCBob3dldmVyLCBhZGRpdGlvbmFsIGJvYXJkIGxvZ2ljXFxuLSAgICAgICAgICAgICAgbWlnaHQgaW52ZXJ0IHRoZSBzaWduYWwuXFxuLS0gcGluY3RybC1uYW1lczogTGlzdCBvZiBhc3NpZ25lZCBzdGF0ZSBuYW1lcywgc2VlIHBpbmN0cmwgYmluZGluZyBkb2N1bWVudGF0aW9uLlxcbi0tIHBpbmN0cmwtMDogTGlzdCBvZiBwaGFuZGxlcyB0byBjb25maWd1cmUgdGhlIEdQSU8gcGluIHVzZWQgYXMgaW50ZXJydXB0IGxpbmUsXFxuLSAgICAgICAgICAgICBzZWUgYWxzbyBnZW5lcmljIGFuZCB5b3VyIHBsYXRmb3JtIHNwZWNpZmljIHBpbmN0cmwgYmluZGluZ1xcbi0gICAgICAgICAgICAgZG9jdW1lbnRhdGlvbi5cXG4tXFxuLU9wdGlvbmFsIHByb3BlcnRpZXM6XFxuLS0gc3BpLW1heC1mcmVxdWVuY3k6IE1heGltdW0gZnJlcXVlbmN5IG9mIHRoZSBTUEkgYnVzIHdoZW4gYWNjZXNzaW5nIHRoZSB3NTUwMC5cXG4tICBBY2NvcmRpbmcgdG8gdGhlIHc1NTAwIGRhdGFzaGVldCwgdGhlIGNoaXAgYWxsb3dzIGEgbWF4aW11bSBvZiA4MCBNSHosIGhvd2V2ZXIsXFxuLSAgYm9hcmQgZGVzaWducyBtYXkgbmVlZCB0byBsaW1pdCB0aGlzIHZhbHVlLlxcbi0tIGxvY2FsLW1hYy1hZGRyZXNzOiBTZWUgZXRoZXJuZXQudHh0IGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cXG4tXFxuLVxcbi1FeGFtcGxlIChmb3IgUmFzcGJlcnJ5IFBpIHdpdGggcGluIGNvbnRyb2wgc3R1ZmYgZm9yIEdQSU8gaXJxKTpcXG4tXFxuLVxcdTAwMjZzcGkge1xcbi1cXHRldGhlcm5ldEAwOiB3NTUwMEAwIHtcXG4tXFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJ3aXpuZXQsdzU1MDBcXFwiO1xcbi1cXHRcXHRyZWcgPSBcXHUwMDNjMFxcdTAwM2U7XFxuLVxcdFxcdHBpbmN0cmwtbmFtZXMgPSBcXFwiZGVmYXVsdFxcXCI7XFxuLVxcdFxcdHBpbmN0cmwtMCA9IFxcdTAwM2NcXHUwMDI2ZXRoMV9waW5zXFx1MDAzZTtcXG4tXFx0XFx0aW50ZXJydXB0LXBhcmVudCA9IFxcdTAwM2NcXHUwMDI2Z3Bpb1xcdTAwM2U7XFxuLVxcdFxcdGludGVycnVwdHMgPSBcXHUwMDNjMjUgSVJRX1RZUEVfRURHRV9GQUxMSU5HXFx1MDAzZTtcXG4tXFx0XFx0c3BpLW1heC1mcmVxdWVuY3kgPSBcXHUwMDNjMzAwMDAwMDBcXHUwMDNlO1xcbi1cXHR9O1xcbi19O1xcbi1cXG4tXFx1MDAyNmdwaW8ge1xcbi1cXHRldGgxX3BpbnM6IGV0aDFfcGlucyB7XFxuLVxcdFxcdGJyY20scGlucyA9IFxcdTAwM2MyNVxcdTAwM2U7XFxuLVxcdFxcdGJyY20sZnVuY3Rpb24gPSBcXHUwMDNjMFxcdTAwM2U7IC8qIGluICovXFxuLVxcdFxcdGJyY20scHVsbCA9IFxcdTAwM2MwXFx1MDAzZTsgLyogbm9uZSAqL1xcbi1cXHR9O1xcbi19O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jXFxuaW5kZXggNTNkOGRjNjQyZmJkNi4uNjcwN2E2ZjI3Mzk1NCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jXFxuQEAgLTIyLDYgKzIyLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvcG9ydC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW50ZXJydXB0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2dwaW8vY29uc3VtZXIuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJ3NTEwMC5oXFxcIlxcbiBcXG5AQCAtMTI0LDYgKzEyNSw4IEBAIE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4gICovXFxuICNkZWZpbmUgVzU1MDBfU0lNUlxcdFxcdDB4MDAxOCAvKiBTb2NrZXQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi9cXG4gI2RlZmluZSBXNTUwMF9SVFJcXHRcXHQweDAwMTkgLyogUmV0cnkgVGltZS12YWx1ZSBSZWdpc3RlciAqL1xcbisjZGVmaW5lIFc1NTAwX1BIWUNGR1JcXHRcXHQweDAwMmUgLyogIFBIWSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovXFxuKyNkZWZpbmUgICBQSFlDRkdSX0xOS1xcdFxcdCAgMHgwMSAvKiBsaW5rIHN0YXR1cyAqL1xcbiBcXG4gI2RlZmluZSBXNTUwMF9TMF9SRUdTXFx0XFx0MHgxMDAwMFxcbiBcXG5AQCAtMTU0LDYgKzE1Nyw3IEBAIHN0cnVjdCB3NTEwMF9wcml2IHtcXG4gXFx0dTE2IHMwX3J4X2J1Zl9zaXplO1xcbiBcXG4gXFx0aW50IGlycTtcXG4rXFx0c3RydWN0IGdwaW9fZGVzYyAqbGlua19ncGlvO1xcbiBcXG4gXFx0c3RydWN0IG5hcGlfc3RydWN0IG5hcGk7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xcbkBAIC00MTQsNiArNDE4LDE2IEBAIHN0YXRpYyB2b2lkIHc1MTAwX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXHRcXHRzaXplb2YoaW5mby1cXHUwMDNlYnVzX2luZm8pKTtcXG4gfVxcbiBcXG4rc3RhdGljIHUzMiB3NTEwMF9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZW9wcy1cXHUwMDNlY2hpcF9pZCA9PSBXNTUwMClcXG4rXFx0XFx0cmV0dXJuIHc1MTAwX3JlYWQocHJpdiwgVzU1MDBfUEhZQ0ZHUikgXFx1MDAyNiBQSFlDRkdSX0xOSztcXG4rXFxuK1xcdHJldHVybiAxO1xcbit9XFxuK1xcbiBzdGF0aWMgdTMyIHc1MTAwX2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbkBAIC02MTYsNiArNjMwLDI0IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCB3NTEwMF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqbmRldl9pbnN0YW5jZSlcXG4gXFx0cmV0dXJuIElSUV9IQU5ETEVEO1xcbiB9XFxuIFxcbitzdGF0aWMgaXJxcmV0dXJuX3QgdzUxMDBfZGV0ZWN0X2xpbmsoaW50IGlycSwgdm9pZCAqbmRldl9pbnN0YW5jZSlcXG4re1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IG5kZXZfaW5zdGFuY2U7XFxuK1xcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZGV2KSkge1xcbitcXHRcXHRpZiAodzUxMDBfZ2V0X2xpbmsobmRldikpIHtcXG4rXFx0XFx0XFx0bmV0aWZfaW5mbyhwcml2LCBsaW5rLCBuZGV2LCBcXFwibGluayBpcyB1cFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdG5ldGlmX2NhcnJpZXJfb24obmRldik7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdG5ldGlmX2luZm8ocHJpdiwgbGluaywgbmRldiwgXFxcImxpbmsgaXMgZG93blxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdG5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBJUlFfSEFORExFRDtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdzUxMDBfc2V0cnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIHtcXG4gXFx0c3RydWN0IHc1MTAwX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHc1MTAwX3ByaXYsXFxuQEAgLTY1OSw2ICs2OTEsMTIgQEAgc3RhdGljIGludCB3NTEwMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXHR3NTEwMF9od19zdGFydChwcml2KTtcXG4gXFx0bmFwaV9lbmFibGUoXFx1MDAyNnByaXYtXFx1MDAzZW5hcGkpO1xcbiBcXHRuZXRpZl9zdGFydF9xdWV1ZShuZGV2KTtcXG4rXFxuK1xcdGlmICh3NTEwMF9nZXRfbGluayhuZGV2KSlcXG4rXFx0XFx0bmV0aWZfY2Fycmllcl9vbihuZGV2KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRuZXRpZl9jYXJyaWVyX29mZihuZGV2KTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC02NzgsNiArNzE2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB3NTEwMF9ldGh0b29sX29wcyA9IHtcXG4gXFx0LmdldF9kcnZpbmZvXFx0XFx0PSB3NTEwMF9nZXRfZHJ2aW5mbyxcXG4gXFx0LmdldF9tc2dsZXZlbFxcdFxcdD0gdzUxMDBfZ2V0X21zZ2xldmVsLFxcbiBcXHQuc2V0X21zZ2xldmVsXFx0XFx0PSB3NTEwMF9zZXRfbXNnbGV2ZWwsXFxuK1xcdC5nZXRfbGlua1xcdFxcdD0gdzUxMDBfZ2V0X2xpbmssXFxuIFxcdC5nZXRfcmVnc19sZW5cXHRcXHQ9IHc1MTAwX2dldF9yZWdzX2xlbixcXG4gXFx0LmdldF9yZWdzXFx0XFx0PSB3NTEwMF9nZXRfcmVncyxcXG4gfTtcXG5AQCAtNzUxLDYgKzc5MCwxMyBAQCBpbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsXFxuIFxcdHByaXYtXFx1MDAzZW5kZXYgPSBuZGV2O1xcbiBcXHRwcml2LVxcdTAwM2VvcHMgPSBvcHM7XFxuIFxcdHByaXYtXFx1MDAzZWlycSA9IGlycTtcXG4rXFx0cHJpdi1cXHUwMDNlbGlua19ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoZGV2LCBcXFwibGlua1xcXCIsIEdQSU9EX0lOKTtcXG4rXFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VsaW5rX2dwaW8pKSB7XFxuK1xcdFxcdGVyciA9IGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXFx1MDAzZWxpbmtfZ3BpbyksXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwiZmFpbGVkIHRvIGdldCBsaW5rIEdQSU9cXFxcblxcXCIpO1xcbitcXHRcXHRwcml2LVxcdTAwM2VsaW5rX2dwaW8gPSBOVUxMO1xcbitcXHRcXHRnb3RvIGVycl9yZWdpc3RlcjtcXG4rXFx0fVxcbiBcXG4gXFx0bmRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZ3NTEwMF9uZXRkZXZfb3BzO1xcbiBcXHRuZGV2LVxcdTAwM2VldGh0b29sX29wcyA9IFxcdTAwMjZ3NTEwMF9ldGh0b29sX29wcztcXG5AQCAtODAzLDggKzg0OSwyOSBAQCBpbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyX2h3O1xcbiBcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWxpbmtfZ3Bpbykge1xcbitcXHRcXHRpbnQgbGlua19pcnEgPSBncGlvZF90b19pcnEocHJpdi1cXHUwMDNlbGlua19ncGlvKTtcXG4rXFxuK1xcdFxcdGlmIChsaW5rX2lycSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0ZXJyID0gZGV2X2Vycl9wcm9iZShkZXYsIGxpbmtfaXJxLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgXFxcIk5vIGNvcnJlc3BvbmRpbmcgaXJxIGZvciBsaW5rIGdwaW9cXFxcblxcXCIpO1xcbitcXHRcXHRcXHRnb3RvIGVycl9ncGlvO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRlcnIgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgbGlua19pcnEsIE5VTEwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHc1MTAwX2RldGVjdF9saW5rLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRJUlFGX1RSSUdHRVJfUklTSU5HIHxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0SVJRRl9UUklHR0VSX0ZBTExJTkcgfFxcbitcXHRcXHRcXHRcXHRcXHRcXHRJUlFGX09ORVNIT1QsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcXCJ3NTEwMC1saW5rXFxcIiwgcHJpdi1cXHUwMDNlbmRldik7XFxuK1xcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9ncGlvO1xcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuK2Vycl9ncGlvOlxcbitcXHRmcmVlX2lycShwcml2LVxcdTAwM2VpcnEsIG5kZXYpO1xcbiBlcnJfaHc6XFxuIFxcdGRlc3Ryb3lfd29ya3F1ZXVlKHByaXYtXFx1MDAzZXhmZXJfd3EpO1xcbiBlcnJfd3E6XFxuQEAgLTg1Nyw2ICs5MjQsOSBAQCBzdGF0aWMgaW50IHc1MTAwX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdFxcdHc1MTAwX2h3X3N0YXJ0KHByaXYpO1xcbiBcXG4gXFx0XFx0bmV0aWZfZGV2aWNlX2F0dGFjaChuZGV2KTtcXG4rXFxuK1xcdFxcdGlmICh3NTEwMF9nZXRfbGluayhuZGV2KSlcXG4rXFx0XFx0XFx0bmV0aWZfY2Fycmllcl9vbihuZGV2KTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxODowNToyMi41NjI0OTg1MDhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3MTQ4MTMxMzgwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdpem5ldCBXNTEwMC9XNTIwMC9XNTUwMCBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGlzIGFuIFNQSSBkZXZpY2UgZHJpdmVyLiBJbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSBvciBHQ0UpIHVzZWQgYnkgc3l6a2FsbGVyLCB0aGVyZSBpcyBubyBnZW5lcmljIHdheSB0byBpbnN0YW50aWF0ZSBhcmJpdHJhcnkgU1BJIGRldmljZXMgZnJvbSB1c2Vyc3BhY2UgKHVubGlrZSBJMkMncyBgbmV3X2RldmljZWAgc3lzZnMgaW50ZXJmYWNlIG9yIFVTQidzIGR1bW15X2hjZCkuIFNpbmNlIHRoZSBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgYW5kIHRoZSBkZXZpY2UgY2Fubm90IGJlIGR5bmFtaWNhbGx5IGNyZWF0ZWQsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVmMTM4MWU1YWRlM2ZmOWIzYzQyM2M5MDBiYTNiOGU2NWE1Nzg2M2JcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDE4OjA1OjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzUxMDAueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1MTAwLnlhbWxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jZWJmNDM3YWQzYzRhXG4tLS0gL2Rldi9udWxsXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpem5ldCx3NTEwMC55YW1sXG5AQCAtMCwwICsxLDc0IEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4rJVlBTUwgMS4yXG4rLS0tXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvd2l6bmV0LHc1MTAwLnlhbWwjXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4rXG4rdGl0bGU6IFdpem5ldCB3NTEwMC93NTIwMC93NTUwMCBTUEkgRXRoZXJuZXQgQ29udHJvbGxlclxuK1xuK21haW50YWluZXJzOlxuKyAgLSBBcnRodXIgQ3LDqXBpbiBMZWJsb25kIFx1MDAzY2FydGh1ckBtYXJtb3R0dXMubmV0XHUwMDNlXG4rXG4rZGVzY3JpcHRpb246IHxcbisgIFRoaXMgaXMgYSBzdGFuZGFsb25lIDEwLzEwMCBNQml0IEV0aGVybmV0IGNvbnRyb2xsZXIgd2l0aCBTUEkgaW50ZXJmYWNlLlxuK1xuK2FsbE9mOlxuKyAgLSAkcmVmOiAvc2NoZW1hcy9uZXQvZXRoZXJuZXQtY29udHJvbGxlci55YW1sI1xuKyAgLSAkcmVmOiAvc2NoZW1hcy9zcGkvc3BpLXBlcmlwaGVyYWwtcHJvcHMueWFtbCNcbitcbitwcm9wZXJ0aWVzOlxuKyAgY29tcGF0aWJsZTpcbisgICAgZW51bTpcbisgICAgICAtIHdpem5ldCx3NTEwMFxuKyAgICAgIC0gd2l6bmV0LHc1MjAwXG4rICAgICAgLSB3aXpuZXQsdzU1MDBcbitcbisgIGludGVycnVwdHM6XG4rICAgIG1heEl0ZW1zOiAxXG4rXG4rICByZWc6XG4rICAgIG1heEl0ZW1zOiAxXG4rXG4rICBzcGktbWF4LWZyZXF1ZW5jeTpcbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgQWNjb3JkaW5nIHRvIHRoZSB3NTUwMCBkYXRhc2hlZXQsIHRoZSBjaGlwIGFsbG93cyBhIG1heGltdW0gb2YgODAgTUh6LFxuKyAgICAgIGhvd2V2ZXIsIGJvYXJkIGRlc2lnbnMgbWF5IG5lZWQgdG8gbGltaXQgdGhpcyB2YWx1ZS5cbisgICAgbWF4aW11bTogODAwMDAwMDBcbitcbisgIGxpbmstZ3Bpb3M6XG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIEFuIG9wdGlvbmFsIEdQSU8gbGluZSB0aGF0IGNhbiBiZSB3aXJlZCB0byB0aGUgTElOS0xFRCBwaW4gb2YgdGhlIHc1NTAwXG4rICAgICAgYXMgYW4gaW50ZXJydXB0IHRvIGRldGVjdCBsaW5rIHN0YXR1cyBjaGFuZ2VzLlxuKyAgICBtYXhJdGVtczogMVxuK1xuK3JlcXVpcmVkOlxuKyAgLSBjb21wYXRpYmxlXG4rICAtIHJlZ1xuKyAgLSBpbnRlcnJ1cHRzXG4rXG4rdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK2V4YW1wbGVzOlxuKyAgLSB8XG4rICAgIC8qIEV4YW1wbGUgKGZvciBSYXNwYmVycnkgUGkgd2l0aCBwaW4gY29udHJvbCBzdHVmZiBmb3IgR1BJTyBpcnEpICovXG4rXG4rICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oXHUwMDNlXG4rICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oXHUwMDNlXG4rXG4rICAgIHNwaSB7XG4rICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rICAgICAgICBldGhlcm5ldEAwIHtcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJ3aXpuZXQsdzU1MDBcIjtcbisgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgIHBpbmN0cmwtbmFtZXMgPSBcImRlZmF1bHRcIjtcbisgICAgICAgICAgICBwaW5jdHJsLTAgPSBcdTAwM2NcdTAwMjZldGgxX3BpbnNcdTAwM2U7XG4rICAgICAgICAgICAgaW50ZXJydXB0LXBhcmVudCA9IFx1MDAzY1x1MDAyNmdwaW9cdTAwM2U7XG4rICAgICAgICAgICAgaW50ZXJydXB0cyA9IFx1MDAzYzI1IElSUV9UWVBFX0VER0VfRkFMTElOR1x1MDAzZTtcbisgICAgICAgICAgICBsaW5rLWdwaW9zID0gXHUwMDNjXHUwMDI2Z3BpbyAyNCBHUElPX0FDVElWRV9MT1dcdTAwM2U7XG4rICAgICAgICAgICAgc3BpLW1heC1mcmVxdWVuY3kgPSBcdTAwM2MzMDAwMDAwMFx1MDAzZTtcbisgICAgICAgICAgICBsb2NhbC1tYWMtYWRkcmVzcyA9IFsgYTAgYjAgYzAgZDAgZTAgZjAgXTtcbisgICAgICAgIH07XG4rICAgIH07XG4rLi4uXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0XG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGU5NjY1Nzk4YzRiZTYuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1eDAwLnR4dFxuKysrIC9kZXYvbnVsbFxuQEAgLTEsNTAgKzAsMCBAQFxuLSogV2l6bmV0IHc1eDAwXG4tXG4tVGhpcyBpcyBhIHN0YW5kYWxvbmUgMTAvMTAwIE1CaXQgRXRoZXJuZXQgY29udHJvbGxlciB3aXRoIFNQSSBpbnRlcmZhY2UuXG4tXG4tRm9yIGVhY2ggZGV2aWNlIGNvbm5lY3RlZCB0byBhIFNQSSBidXMsIGRlZmluZSBhIGNoaWxkIG5vZGUgd2l0aGluXG4tdGhlIFNQSSBtYXN0ZXIgbm9kZS5cbi1cbi1SZXF1aXJlZCBwcm9wZXJ0aWVzOlxuLS0gY29tcGF0aWJsZTogU2hvdWxkIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHN0cmluZ3M6XG4tXHQgICAgICBcIndpem5ldCx3NTEwMFwiXG4tXHQgICAgICBcIndpem5ldCx3NTIwMFwiXG4tXHQgICAgICBcIndpem5ldCx3NTUwMFwiXG4tLSByZWc6IFNwZWNpZnkgdGhlIFNQSSBjaGlwIHNlbGVjdCB0aGUgY2hpcCBpcyB3aXJlZCB0by5cbi0tIGludGVycnVwdHM6IFNwZWNpZnkgdGhlIGludGVycnVwdCBpbmRleCB3aXRoaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyIChyZWZlcnJlZFxuLSAgICAgICAgICAgICAgdG8gYWJvdmUgaW4gaW50ZXJydXB0LXBhcmVudCkgYW5kIGludGVycnVwdCB0eXBlLiB3NXgwMCBuYXRpdmVseVxuLSAgICAgICAgICAgICAgZ2VuZXJhdGVzIGZhbGxpbmcgZWRnZSBpbnRlcnJ1cHRzLCBob3dldmVyLCBhZGRpdGlvbmFsIGJvYXJkIGxvZ2ljXG4tICAgICAgICAgICAgICBtaWdodCBpbnZlcnQgdGhlIHNpZ25hbC5cbi0tIHBpbmN0cmwtbmFtZXM6IExpc3Qgb2YgYXNzaWduZWQgc3RhdGUgbmFtZXMsIHNlZSBwaW5jdHJsIGJpbmRpbmcgZG9jdW1lbnRhdGlvbi5cbi0tIHBpbmN0cmwtMDogTGlzdCBvZiBwaGFuZGxlcyB0byBjb25maWd1cmUgdGhlIEdQSU8gcGluIHVzZWQgYXMgaW50ZXJydXB0IGxpbmUsXG4tICAgICAgICAgICAgIHNlZSBhbHNvIGdlbmVyaWMgYW5kIHlvdXIgcGxhdGZvcm0gc3BlY2lmaWMgcGluY3RybCBiaW5kaW5nXG4tICAgICAgICAgICAgIGRvY3VtZW50YXRpb24uXG4tXG4tT3B0aW9uYWwgcHJvcGVydGllczpcbi0tIHNwaS1tYXgtZnJlcXVlbmN5OiBNYXhpbXVtIGZyZXF1ZW5jeSBvZiB0aGUgU1BJIGJ1cyB3aGVuIGFjY2Vzc2luZyB0aGUgdzU1MDAuXG4tICBBY2NvcmRpbmcgdG8gdGhlIHc1NTAwIGRhdGFzaGVldCwgdGhlIGNoaXAgYWxsb3dzIGEgbWF4aW11bSBvZiA4MCBNSHosIGhvd2V2ZXIsXG4tICBib2FyZCBkZXNpZ25zIG1heSBuZWVkIHRvIGxpbWl0IHRoaXMgdmFsdWUuXG4tLSBsb2NhbC1tYWMtYWRkcmVzczogU2VlIGV0aGVybmV0LnR4dCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4tXG4tXG4tRXhhbXBsZSAoZm9yIFJhc3BiZXJyeSBQaSB3aXRoIHBpbiBjb250cm9sIHN0dWZmIGZvciBHUElPIGlycSk6XG4tXG4tXHUwMDI2c3BpIHtcbi1cdGV0aGVybmV0QDA6IHc1NTAwQDAge1xuLVx0XHRjb21wYXRpYmxlID0gXCJ3aXpuZXQsdzU1MDBcIjtcbi1cdFx0cmVnID0gXHUwMDNjMFx1MDAzZTtcbi1cdFx0cGluY3RybC1uYW1lcyA9IFwiZGVmYXVsdFwiO1xuLVx0XHRwaW5jdHJsLTAgPSBcdTAwM2NcdTAwMjZldGgxX3BpbnNcdTAwM2U7XG4tXHRcdGludGVycnVwdC1wYXJlbnQgPSBcdTAwM2NcdTAwMjZncGlvXHUwMDNlO1xuLVx0XHRpbnRlcnJ1cHRzID0gXHUwMDNjMjUgSVJRX1RZUEVfRURHRV9GQUxMSU5HXHUwMDNlO1xuLVx0XHRzcGktbWF4LWZyZXF1ZW5jeSA9IFx1MDAzYzMwMDAwMDAwXHUwMDNlO1xuLVx0fTtcbi19O1xuLVxuLVx1MDAyNmdwaW8ge1xuLVx0ZXRoMV9waW5zOiBldGgxX3BpbnMge1xuLVx0XHRicmNtLHBpbnMgPSBcdTAwM2MyNVx1MDAzZTtcbi1cdFx0YnJjbSxmdW5jdGlvbiA9IFx1MDAzYzBcdTAwM2U7IC8qIGluICovXG4tXHRcdGJyY20scHVsbCA9IFx1MDAzYzBcdTAwM2U7IC8qIG5vbmUgKi9cbi1cdH07XG4tfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jXG5pbmRleCA1M2Q4ZGM2NDJmYmQ2Li42NzA3YTZmMjczOTU0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jXG5AQCAtMjIsNiArMjIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnEuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2dwaW8vY29uc3VtZXIuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwidzUxMDAuaFwiXG4gXG5AQCAtMTI0LDYgKzEyNSw4IEBAIE1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuICAqL1xuICNkZWZpbmUgVzU1MDBfU0lNUlx0XHQweDAwMTggLyogU29ja2V0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovXG4gI2RlZmluZSBXNTUwMF9SVFJcdFx0MHgwMDE5IC8qIFJldHJ5IFRpbWUtdmFsdWUgUmVnaXN0ZXIgKi9cbisjZGVmaW5lIFc1NTAwX1BIWUNGR1JcdFx0MHgwMDJlIC8qICBQSFkgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqL1xuKyNkZWZpbmUgICBQSFlDRkdSX0xOS1x0XHQgIDB4MDEgLyogbGluayBzdGF0dXMgKi9cbiBcbiAjZGVmaW5lIFc1NTAwX1MwX1JFR1NcdFx0MHgxMDAwMFxuIFxuQEAgLTE1NCw2ICsxNTcsNyBAQCBzdHJ1Y3QgdzUxMDBfcHJpdiB7XG4gXHR1MTYgczBfcnhfYnVmX3NpemU7XG4gXG4gXHRpbnQgaXJxO1xuK1x0c3RydWN0IGdwaW9fZGVzYyAqbGlua19ncGlvO1xuIFxuIFx0c3RydWN0IG5hcGlfc3RydWN0IG5hcGk7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcbkBAIC00MTQsNiArNDE4LDE2IEBAIHN0YXRpYyB2b2lkIHc1MTAwX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0XHRzaXplb2YoaW5mby1cdTAwM2VidXNfaW5mbykpO1xuIH1cbiBcbitzdGF0aWMgdTMyIHc1MTAwX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuK3tcbitcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VvcHMtXHUwMDNlY2hpcF9pZCA9PSBXNTUwMClcbitcdFx0cmV0dXJuIHc1MTAwX3JlYWQocHJpdiwgVzU1MDBfUEhZQ0ZHUikgXHUwMDI2IFBIWUNGR1JfTE5LO1xuK1xuK1x0cmV0dXJuIDE7XG4rfVxuK1xuIHN0YXRpYyB1MzIgdzUxMDBfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIHtcbiBcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG5AQCAtNjE2LDYgKzYzMCwyNCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgdzUxMDBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKm5kZXZfaW5zdGFuY2UpXG4gXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4gfVxuIFxuK3N0YXRpYyBpcnFyZXR1cm5fdCB3NTEwMF9kZXRlY3RfbGluayhpbnQgaXJxLCB2b2lkICpuZGV2X2luc3RhbmNlKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gbmRldl9pbnN0YW5jZTtcbitcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXG4rXHRpZiAobmV0aWZfcnVubmluZyhuZGV2KSkge1xuK1x0XHRpZiAodzUxMDBfZ2V0X2xpbmsobmRldikpIHtcbitcdFx0XHRuZXRpZl9pbmZvKHByaXYsIGxpbmssIG5kZXYsIFwibGluayBpcyB1cFxcblwiKTtcbitcdFx0XHRuZXRpZl9jYXJyaWVyX29uKG5kZXYpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdG5ldGlmX2luZm8ocHJpdiwgbGluaywgbmRldiwgXCJsaW5rIGlzIGRvd25cXG5cIik7XG4rXHRcdFx0bmV0aWZfY2Fycmllcl9vZmYobmRldik7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiBJUlFfSEFORExFRDtcbit9XG4rXG4gc3RhdGljIHZvaWQgdzUxMDBfc2V0cnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IHc1MTAwX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHc1MTAwX3ByaXYsXG5AQCAtNjU5LDYgKzY5MSwxMiBAQCBzdGF0aWMgaW50IHc1MTAwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHR3NTEwMF9od19zdGFydChwcml2KTtcbiBcdG5hcGlfZW5hYmxlKFx1MDAyNnByaXYtXHUwMDNlbmFwaSk7XG4gXHRuZXRpZl9zdGFydF9xdWV1ZShuZGV2KTtcbitcbitcdGlmICh3NTEwMF9nZXRfbGluayhuZGV2KSlcbitcdFx0bmV0aWZfY2Fycmllcl9vbihuZGV2KTtcbitcdGVsc2VcbitcdFx0bmV0aWZfY2Fycmllcl9vZmYobmRldik7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNjc4LDYgKzcxNiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdzUxMDBfZXRodG9vbF9vcHMgPSB7XG4gXHQuZ2V0X2RydmluZm9cdFx0PSB3NTEwMF9nZXRfZHJ2aW5mbyxcbiBcdC5nZXRfbXNnbGV2ZWxcdFx0PSB3NTEwMF9nZXRfbXNnbGV2ZWwsXG4gXHQuc2V0X21zZ2xldmVsXHRcdD0gdzUxMDBfc2V0X21zZ2xldmVsLFxuK1x0LmdldF9saW5rXHRcdD0gdzUxMDBfZ2V0X2xpbmssXG4gXHQuZ2V0X3JlZ3NfbGVuXHRcdD0gdzUxMDBfZ2V0X3JlZ3NfbGVuLFxuIFx0LmdldF9yZWdzXHRcdD0gdzUxMDBfZ2V0X3JlZ3MsXG4gfTtcbkBAIC03NTEsNiArNzkwLDEzIEBAIGludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcbiBcdHByaXYtXHUwMDNlbmRldiA9IG5kZXY7XG4gXHRwcml2LVx1MDAzZW9wcyA9IG9wcztcbiBcdHByaXYtXHUwMDNlaXJxID0gaXJxO1xuK1x0cHJpdi1cdTAwM2VsaW5rX2dwaW8gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChkZXYsIFwibGlua1wiLCBHUElPRF9JTik7XG4rXHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlbGlua19ncGlvKSkge1xuK1x0XHRlcnIgPSBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZWxpbmtfZ3BpbyksXG4rXHRcdFx0XHQgICAgXCJmYWlsZWQgdG8gZ2V0IGxpbmsgR1BJT1xcblwiKTtcbitcdFx0cHJpdi1cdTAwM2VsaW5rX2dwaW8gPSBOVUxMO1xuK1x0XHRnb3RvIGVycl9yZWdpc3RlcjtcbitcdH1cbiBcbiBcdG5kZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNnc1MTAwX25ldGRldl9vcHM7XG4gXHRuZGV2LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2dzUxMDBfZXRodG9vbF9vcHM7XG5AQCAtODAzLDggKzg0OSwyOSBAQCBpbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9odztcbiBcbitcdGlmIChwcml2LVx1MDAzZWxpbmtfZ3Bpbykge1xuK1x0XHRpbnQgbGlua19pcnEgPSBncGlvZF90b19pcnEocHJpdi1cdTAwM2VsaW5rX2dwaW8pO1xuK1xuK1x0XHRpZiAobGlua19pcnEgXHUwMDNjIDApIHtcbitcdFx0XHRlcnIgPSBkZXZfZXJyX3Byb2JlKGRldiwgbGlua19pcnEsXG4rXHRcdFx0XHRcdCAgICBcIk5vIGNvcnJlc3BvbmRpbmcgaXJxIGZvciBsaW5rIGdwaW9cXG5cIik7XG4rXHRcdFx0Z290byBlcnJfZ3BpbztcbitcdFx0fVxuK1xuK1x0XHRlcnIgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgbGlua19pcnEsIE5VTEwsXG4rXHRcdFx0XHRcdFx0dzUxMDBfZGV0ZWN0X2xpbmssXG4rXHRcdFx0XHRcdFx0SVJRRl9UUklHR0VSX1JJU0lORyB8XG4rXHRcdFx0XHRcdFx0SVJRRl9UUklHR0VSX0ZBTExJTkcgfFxuK1x0XHRcdFx0XHRcdElSUUZfT05FU0hPVCxcbitcdFx0XHRcdFx0XHRcInc1MTAwLWxpbmtcIiwgcHJpdi1cdTAwM2VuZGV2KTtcbitcdFx0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9ncGlvO1xuK1x0fVxuK1xuIFx0cmV0dXJuIDA7XG4gXG4rZXJyX2dwaW86XG4rXHRmcmVlX2lycShwcml2LVx1MDAzZWlycSwgbmRldik7XG4gZXJyX2h3OlxuIFx0ZGVzdHJveV93b3JrcXVldWUocHJpdi1cdTAwM2V4ZmVyX3dxKTtcbiBlcnJfd3E6XG5AQCAtODU3LDYgKzkyNCw5IEBAIHN0YXRpYyBpbnQgdzUxMDBfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdFx0dzUxMDBfaHdfc3RhcnQocHJpdik7XG4gXG4gXHRcdG5ldGlmX2RldmljZV9hdHRhY2gobmRldik7XG4rXG4rXHRcdGlmICh3NTEwMF9nZXRfbGluayhuZGV2KSlcbitcdFx0XHRuZXRpZl9jYXJyaWVyX29uKG5kZXYpO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTg6MDU6MjIuNTYyNTAwMTM4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE4ODc1Mzg2MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBXaXpuZXQgVzU1MDAgTGluayBTdGF0dXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBwYXRjaCBmb3IgdGhlIFdpem5ldCBXNTEwMC9XNTIwMC9XNTUwMCBTUEkgRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIuIEl0J3MgYWRkaW5nIGxpbmsgc3RhdHVzIGRldGVjdGlvbiwgd2hpY2ggaXMgZ29vZC4gVGhleSd2ZSBpbXBsZW1lbnRlZCBhIGBsaW5rLWdwaW9zYCBwcm9wZXJ0eSBpbiB0aGUgZGV2aWNlIHRyZWUgYmluZGluZywgcmVhZCB0aGUgbGluayBzdGF0dXMgZnJvbSB0aGUgUEhZQ0ZHUiByZWdpc3RlciBmb3IgdGhlIFc1NTAwLCBhbmQgYXJlIHVzaW5nIGEgdGhyZWFkZWQgSVJRIGZvciBsaW5rIGNoYW5nZXMuIFRoZXkndmUgYWxzbyBpbXBsZW1lbnRlZCBgdzUxMDBfZ2V0X2xpbmtgIGFuZCBpbnRlZ3JhdGVkIGl0IGludG8gYGV0aHRvb2xfb3BzYCwgYW5kIHVwZGF0ZWQgdGhlIGBvcGVuYCBhbmQgYHJlc3VtZWAgZnVuY3Rpb25zIHRvIGNoZWNrIHRoZSBsaW5rLiBTdGFuZGFyZCBzdHVmZiwgc28gZmFyLlxuXG5CdXQgd2FpdCwgdGhlIHJlYWwgcXVlc3Rpb24gaGVyZSBpczogKmNhbiB3ZSBhY3R1YWxseSB0ZXN0IHRoaXMgZWZmZWN0aXZlbHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8qIFRoaXMgaXMgYW4gU1BJIEV0aGVybmV0IGNvbnRyb2xsZXIsIGFuZCBTUEkgaXMgbm90b3Jpb3VzbHkgdHJpY2t5IGZvciBlbXVsYXRpb24uIENhbiBRRU1VIGV2ZW4gKnNlZSogdGhpcz8gVHlwaWNhbGx5LCBTUEkgZGV2aWNlcyBhcmVuJ3QgZWFzaWx5IGVtdWxhdGVkIG9yIGZ1enplZCB1bmxlc3MgdGhlcmUncyBhIHNwZWNpZmljIFFFTVUgZGV2aWNlIG1vZGVsIGZvciB0aGVtLCBvciB3ZSBjYW4gc29tZWhvdyBmdXp6IHRoZSBTUEkgc3Vic3lzdGVtIGl0c2VsZi5cblxuSSBrbm93IFN5emthbGxlciBjYW4gc29tZXRpbWVzIGZ1enogU1BJIGRldmljZXMgdXNpbmcgYHZoY2lgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBpZiBpdCdzIGF2YWlsYWJsZSwgYnV0IGdlbmVyYWxseSwgU1BJIGRldmljZXMgYXJlIHByZXR0eSBoYXJkd2FyZS1zcGVjaWZpYy4gSSBrZWVwIHRoaW5raW5nLCBkb2Vzbid0IFN5emthbGxlciBoYXZlICpzb21lKiBTUEkgc3VwcG9ydD8gTm8sIG5vdCByZWFsbHkuIEl0IGRvZXNuJ3QgaGF2ZSBhIGdlbmVyaWMgU1BJIGZ1enplciB0aGF0IGNhbiBqdXN0ICpjcmVhdGUqIGFyYml0cmFyeSBTUEkgZGV2aWNlcywgdW5sZXNzIGl0J3MgdGhyb3VnaCBzcGlkZXYsIGJ1dCB0aGlzIGlzIGEgbmV0IGRldmljZSBkcml2ZXIsIHdoaWNoIHVzdWFsbHkgcmVxdWlyZXMgYSBzcGVjaWZpYyBTUEkgZGV2aWNlIGlkZW50aWZpZWQgdmlhIGEgZGV2aWNlIHRyZWUgb3IgYm9hcmQgY29kZS5cblxuU28sIHRoZSBkcml2ZXIgKmhhcyogdG8gYmUgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIHJpZ2h0PyBJIG1lYW4sIGhvdyBlbHNlIGFyZSB3ZSBnb2luZyB0byB0ZXN0IHRoaXM/IEl0IG5lZWRzIGEgZGV2aWNlIHRyZWUgbm9kZSB3aXRoIGBjb21wYXRpYmxlID0gXCJ3aXpuZXQsdzU1MDBcImAgYW5kIHNvIG9uLCBidXQgaXQncyBhbiBTUEkgZGV2aWNlLiBVbmxlc3MgdGhlcmUncyBhIHdheSB0byBpbnN0YW50aWF0ZSBTUEkgZGV2aWNlcyAocGVyaGFwcyBkZXZpY2UgdHJlZSBvdmVybGF5cyBvciBzb21ldGhpbmcgdGhyb3VnaCBzeXNmcyksIHdlJ3JlIHByb2JhYmx5IGRlYWQgaW4gdGhlIHdhdGVyLiBEb2VzIFN5emthbGxlciB1c2Ugc3lzZnMgb3IgbmV0bGluayB0byBpbnN0YW50aWF0ZSBkZXZpY2VzPyBObywgdGhhdCdzIG5vdCBob3cgU1BJIGRldmljZXMgYXJlIHR5cGljYWxseSBoYW5kbGVkLiBUaGV54oCZcmUgdXN1YWxseSBpbnN0YW50aWF0ZWQgYnkgRFQgb3IgYm9hcmQgZmlsZXMuXG5cbkhhbmcgb27igKZtYXliZSBTeXprYWxsZXIgY291bGQgdXNlIGBzeXpfZ2VuZXRsaW5rYCBvciBzb21ldGhpbmcsIGJ1dCBmb3IgU1BJLCB0aGVyZSdzIG5vIGdlbmVyaWMgd2F5IHRvIGFkZCBkZXZpY2VzIGZyb20gdXNlcnNwYWNlIHVubGVzcyB0aGVyZSdzIGEgc3BlY2lmaWMgZHJpdmVyIHRvIGRvIHNvLlxuXG5Ib2xkIG9uLCB3aGF0IGlmIHRoaXMgZHJpdmVyIGlzIGEgKnBsYXRmb3JtKiBkcml2ZXI/IE5vLCBpdCdzIGFuIFNQSSBkcml2ZXIuIE9rYXksIGxldCdzIGxvb2sgYXQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuY2AgYW5kIG90aGVyIGZpbGVzIGxpa2UgdGhhdC4gVGhlIHBhdGNoIG1vZGlmaWVzIGB3NTEwMC5jYCwgd2hpY2ggaXMgdGhlIGNvcmUsIGJ1dCB0aGUgcHJvYmUgaXMgY2FsbGVkIGZyb20gYHc1MTAwX3NwaS5jYCBvciBgdzUxMDBfbW1pby5jYCwgcmlnaHQ/IEkgc2hvdWxkIHJlYWxseSBqdXN0IGNoZWNrIHRoZSBrZXJuZWwgc291cmNlIGZvciBgdzUxMDAuY2AgdG8gZmlndXJlIG91dCBob3cgdGhpcyBpcyBldmVuIGJlaW5nIHByb2JlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI3NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE4OjA1OjM0LjQ1MDA0MjEzNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIwODM3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidzUxMDBfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmM9NDIxPXN0YXRpYyBpbnQgdzUxMDBfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmMtNDUyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYzo0NTM6XFx0cmV0dXJuIHc1MTAwX3Byb2JlKFxcdTAwMjZzcGktXFx1MDAzZWRldiwgb3BzLCBwcml2X3NpemUsIG1hYywgc3BpLVxcdTAwM2VpcnEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYy00NTQtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM9NzM5PUVYUE9SVF9TWU1CT0xfR1BMKHc1MTAwX29wc19wcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy03NDAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6NzQxOmludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy03NDItXFx0XFx0aW50IHNpemVvZl9vcHNfcHJpdiwgY29uc3Qgdm9pZCAqbWFjX2FkZHIsIGludCBpcnEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy04ODItfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jOjg4MzpFWFBPUlRfU1lNQk9MX0dQTCh3NTEwMF9wcm9iZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtODg0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmg9Mjk9dm9pZCAqdzUxMDBfb3BzX3ByaXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5oLTMwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5oOjMxOmludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuaC0zMi1cXHRcXHRpbnQgc2l6ZW9mX29wc19wcml2LCBjb25zdCB2b2lkICptYWNfYWRkciwgaW50IGlycSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE4OjA1OjM0LjU1MjEzMTIyMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4Mzc1NDQyMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipEZWJ1Z2dpbmcgTmV0d29yayBJbnRlcmZhY2UgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gc2VlaW5nIHRoaXMgYHc1MTAwLXNwaS5jYCBmaWxlIGFuZCwgbGlrZWx5LCBvdGhlciByZWxhdGVkIG9uZXMgaW52b2x2ZWQgaW4gaW5pdGlhbGl6aW5nIGEgbmV0d29yayBpbnRlcmZhY2UuIFRoZSBxdWVzdGlvbiBpbiBteSBtaW5kIGlzLCB3aGF0IHNwZWNpZmljYWxseSB0cmlnZ2VycyB0aGUgcHJvYmluZyBvZiB0aGlzIFc1MTAwIGRldmljZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGtub3cgKndoYXQqIGNhbGxzIHRoZSBgdzUxMDBfcHJvYmVgIGZ1bmN0aW9uLiBJIHdpbGwgY2hlY2sgdGhlIGNvZGViYXNlIHRvIGlkZW50aWZ5IGFsbCBvZiB0aGUgb3RoZXIgY2FsbCBzaXRlcyBmb3IgdGhhdCBmdW5jdGlvbi4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50cyBvZiB0aGUgZGV2aWNlIGRyaXZlciBpbiB0aGUgc3lzdGVtIGFuZCBoZWxwIG1lIHRyYWNlIHRocm91Z2ggdGhlIGZsb3cgb2YgZXhlY3V0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGludGVyYWN0aW9ucyBpcyBrZXkgdG8gcGlucG9pbnRpbmcgYW55IHBvdGVudGlhbCBwcm9ibGVtcyBpbiB0aGUgYnJpbmctdXAgcHJvY2VzcyBvciBsYXRlciBvcGVyYXRpb24uIFRoaXMgaXMgYmFzaWMsIGJ1dCBuZWNlc3NhcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMjEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxODowNTozOS4zODk2ODE4NjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0MzMzNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidzUxMDBfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmM9NDIxPXN0YXRpYyBpbnQgdzUxMDBfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmMtNDUyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYzo0NTM6XFx0cmV0dXJuIHc1MTAwX3Byb2JlKFxcdTAwMjZzcGktXFx1MDAzZWRldiwgb3BzLCBwcml2X3NpemUsIG1hYywgc3BpLVxcdTAwM2VpcnEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYy00NTQtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM9NzM5PUVYUE9SVF9TWU1CT0xfR1BMKHc1MTAwX29wc19wcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy03NDAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6NzQxOmludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy03NDItXFx0XFx0aW50IHNpemVvZl9vcHNfcHJpdiwgY29uc3Qgdm9pZCAqbWFjX2FkZHIsIGludCBpcnEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy04ODItfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jOjg4MzpFWFBPUlRfU1lNQk9MX0dQTCh3NTEwMF9wcm9iZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtODg0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmg9Mjk9dm9pZCAqdzUxMDBfb3BzX3ByaXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5oLTMwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5oOjMxOmludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuaC0zMi1cXHRcXHRpbnQgc2l6ZW9mX29wc19wcml2LCBjb25zdCB2b2lkICptYWNfYWRkciwgaW50IGlycSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE4OjA1OjM5LjQ0MzEyNDAyOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NDY0MTg2MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFdJWm5ldCBEcml2ZXIgSW50ZWdyYXRpb24qKlxuXG5IbW0sIHdhaXQgYSBzZWNvbmQuLi4gYmVmb3JlIEkgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBuZXR3b3JraW5nIGlzc3VlLCBJIHNob3VsZCBxdWlja2x5IGNoZWNrIHNvbWV0aGluZyBmdW5kYW1lbnRhbC4gSXMgdGhlcmUgYSBwbGF0Zm9ybSBkcml2ZXIgaW52b2x2ZWQgaGVyZSwgb3IgYW0gSSBtaXNzaW5nIHNvbWV0aGluZyB1cHN0cmVhbT8gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBmb3VuZGF0aW9uIG9mIGhvdyB0aGlzIFdJWm5ldCBkZXZpY2UgaXMgaGFuZGxlZCBpbiB0aGUga2VybmVsLiBMZXQncyBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUgYmVmb3JlIGdvaW5nIGFueSBmdXJ0aGVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hlcmUgdGhlIFdJWm5ldCBkcml2ZXIgaXMgbG9jYXRlZC4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgc3RhbmRhcmQgcGF0aHMuLi4gaXMgaXQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTMwMC5jYD8gT3IgbWF5YmUgaXQncyB0aGUgb2xkZXIsIGFuZCBwcm9iYWJseSBzdGlsbCByZWxldmFudCwgYHc1MTAwLmNgPyBUaGF0J2xsIGJlIG15IHN0YXJ0aW5nIHBvaW50IHRvIHNlZSBob3cgdGhlIGRldmljZSBpcyByZWdpc3RlcmVkIGFuZCBtYW5hZ2VkLiBJIG5lZWQgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZSBmaXJzdCFcblxuXG4iLCJJbnB1dFRva2VucyI6NzkzMCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE4OjA1OjQ3LjE4OTU0NDk2OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcInc1MTAwLXNwaS5jXCIsXG4gICAgXCJ3NTEwMC5jXCIsXG4gICAgXCJ3NTEwMC5oXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE4OjA1OjQ3LjE4OTU5NzA1OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NzEzNzc2NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBQbGFuIG9mIEF0dGFjayoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGB3NTEwMC1zcGkuY2AsIHdoaWNoIHRlbGxzIG1lIHRoaXMgaXMgKmRlZmluaXRlbHkqIGFuIFNQSSBkZXZpY2UuIFRoYXQncyBnb29kIGluZm9ybWF0aW9uLCBidXQgaXQgcmFpc2VzIHNvbWUgcXVlc3Rpb25zIGFib3V0IGhvdyB3ZSBpbnRlZ3JhdGUgaXQgaW50byBTeXprYWxsZXIuIENhbiB3ZSBldmVuIGluc3RhbnRpYXRlIGFuZCBmdXp6IFNQSSBkZXZpY2VzIGRpcmVjdGx5IHdpdGhpbiBTeXprYWxsZXIncyBmcmFtZXdvcms/XG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IFN5emthbGxlciBwcm9iYWJseSBkb2Vzbid0IGhhdmUgYSBnZW5lcmljIG1lY2hhbmlzbSB0byBjcmVhdGUgYXJiaXRyYXJ5IFNQSSBkZXZpY2VzLiBVbmxlc3MgdGhlcmUncyBhIHNwZWNpZmljIHBzZXVkby1kZXZpY2UgZGVmaW5lZCBmb3IgaXQsIG9yIHdlIHJlbHkgb24gYHNwaWRldmAsIHdoaWNoIG9ubHkgb2ZmZXJzIHVzZXJzcGFjZSBhY2Nlc3Mg4oCTIG5vdCB0aGUga2VybmVsIGRyaXZlciBpbnN0YW50aWF0aW9uIHRoYXQgd2UgbmVlZCBmb3IgcHJvcGVyIGZ1enppbmcuIFRoYXQncyBhIG5vbi1zdGFydGVyLlxuXG5XYWl0IGEgbWludXRlLi4uIGNvdWxkIHdlIGxldmVyYWdlIHN5c2ZzPyBUaGF0J3MgYSBtdWNoIG1vcmUgZWxlZ2FudCBzb2x1dGlvbi4gVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGUgU1BJIHN1YnN5c3RlbSBhbGxvd3MgdXMgdG8gaW5zdGFudGlhdGUgZGV2aWNlcyB0aHJvdWdoIHN5c2ZzLCBpbiBhIHNpbWlsYXIgd2F5IHRvIGhvdyBJMkMgdXNlcyBgbmV3X2RldmljZWAuIElmIHRoYXTigJlzIHBvc3NpYmxlLCBpdCB3b3VsZCBwcm92aWRlIGEgY2xlYW4gd2F5IHRvIGludGVncmF0ZSB0aGlzIGludG8gdGhlIGZ1enppbmcgaGFybmVzcy4gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgU1BJIHN1YnN5c3RlbSBmb3Igc29tZXRoaW5nIGxpa2UgYW4gYG5ld19kZXZpY2VgIGVxdWl2YWxlbnQgdG8gc2VlIGlmIGl0IGFsbG93cyB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjUxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI4LCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxODowNTo1Mi45NjA5NzcwNTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MDM4MjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ld19kZXZpY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zcGkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvc3BpL3NwaS1hbHRlcmEtZGZsLmM9MTI0PXN0YXRpYyBpbnQgZGZsX3NwaV9hbHRlcmFfcHJvYmUoc3RydWN0IGRmbF9kZXZpY2UgKmRmbF9kZXYpXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktYWx0ZXJhLWRmbC5jLTE3NC1cXG5kcml2ZXJzL3NwaS9zcGktYWx0ZXJhLWRmbC5jOjE3NTpcXHRpZiAoIXNwaV9uZXdfZGV2aWNlKGhvc3QsIFxcdTAwMjZib2FyZF9pbmZvKSkge1xcbmRyaXZlcnMvc3BpL3NwaS1hbHRlcmEtZGZsLmMtMTc2LVxcdFxcdGRldl9lcnIoZGV2LCBcXFwiJXMgZmFpbGVkIHRvIGNyZWF0ZSBTUEkgZGV2aWNlOiAlc1xcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1hbHRlcmEtcGxhdGZvcm0uYz0zNT1zdGF0aWMgaW50IGFsdGVyYV9zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1hbHRlcmEtcGxhdGZvcm0uYy0xMTktXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBkYXRhLVxcdTAwM2VudW1fZGV2aWNlczsgaSsrKSB7XFxuZHJpdmVycy9zcGkvc3BpLWFsdGVyYS1wbGF0Zm9ybS5jOjEyMDpcXHRcXHRcXHRpZiAoIXNwaV9uZXdfZGV2aWNlKGhvc3QsIHBkYXRhLVxcdTAwM2VkZXZpY2VzICsgaSkpXFxuZHJpdmVycy9zcGkvc3BpLWFsdGVyYS1wbGF0Zm9ybS5jLTEyMS1cXHRcXHRcXHRcXHRkZXZfd2FybihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWJ1dHRlcmZseS5jPTE3Nj1zdGF0aWMgdm9pZCBidXR0ZXJmbHlfYXR0YWNoKHN0cnVjdCBwYXJwb3J0ICpwKVxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWJ1dHRlcmZseS5jLTI2NS1cXHRwcC1cXHUwMDNlaW5mb1swXS5jb250cm9sbGVyX2RhdGEgPSBwcDtcXG5kcml2ZXJzL3NwaS9zcGktYnV0dGVyZmx5LmM6MjY2OlxcdHBwLVxcdTAwM2VkYXRhZmxhc2ggPSBzcGlfbmV3X2RldmljZShwcC1cXHUwMDNlYml0YmFuZy5jdGxyLCBcXHUwMDI2cHAtXFx1MDAzZWluZm9bMF0pO1xcbmRyaXZlcnMvc3BpL3NwaS1idXR0ZXJmbHkuYy0yNjctXFx0aWYgKHBwLVxcdTAwM2VkYXRhZmxhc2gpXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktY2gzNDEuYz0xNDE9c3RhdGljIGludCBjaDM0MV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1jaDM0MS5jLTIwNi1cXG5kcml2ZXJzL3NwaS9zcGktY2gzNDEuYzoyMDc6XFx0Y2gzNDEtXFx1MDAzZXNwaWRldiA9IHNwaV9uZXdfZGV2aWNlKGN0cmwsIFxcdTAwMjZjaGlwKTtcXG5kcml2ZXJzL3NwaS9zcGktY2gzNDEuYy0yMDgtXFx0aWYgKCFjaDM0MS1cXHUwMDNlc3BpZGV2KSB7XFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktY3M0Mmw0My5jPTMxMj1zdGF0aWMgaW50IGNzNDJsNDNfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktY3M0Mmw0My5jLTQyNi1cXG5kcml2ZXJzL3NwaS9zcGktY3M0Mmw0My5jOjQyNzpcXHRcXHRpZiAoIXNwaV9uZXdfZGV2aWNlKHByaXYtXFx1MDAzZWN0bHIsIGFtcGxfaW5mbykpXFxuZHJpdmVycy9zcGkvc3BpLWNzNDJsNDMuYy00MjgtXFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHJpdi1cXHUwMDNlZGV2LCAtRU5PREVWLFxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWNzNDJsNDMuYy00MzAtXFxuZHJpdmVycy9zcGkvc3BpLWNzNDJsNDMuYzo0MzE6XFx0XFx0aWYgKCFzcGlfbmV3X2RldmljZShwcml2LVxcdTAwM2VjdGxyLCBhbXByX2luZm8pKVxcbmRyaXZlcnMvc3BpL3NwaS1jczQybDQzLmMtNDMyLVxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHByaXYtXFx1MDAzZWRldiwgLUVOT0RFVixcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jPTEzNzU9c3RhdGljIGludCBpbnRlbF9zcGlfcG9wdWxhdGVfY2hpcChzdHJ1Y3QgaW50ZWxfc3BpICppc3BpKVxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWludGVsLmMtMTQwMS1cXG5kcml2ZXJzL3NwaS9zcGktaW50ZWwuYzoxNDAyOlxcdGlmICghc3BpX25ld19kZXZpY2UoaXNwaS1cXHUwMDNlaG9zdCwgXFx1MDAyNmNoaXApKVxcbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jLTE0MDMtXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktaW50ZWwuYy0xNDMwLVxcbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jOjE0MzE6XFx0aWYgKCFzcGlfbmV3X2RldmljZShpc3BpLVxcdTAwM2Vob3N0LCBcXHUwMDI2Y2hpcCkpXFxuZHJpdmVycy9zcGkvc3BpLWludGVsLmMtMTQzMi1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1rc3BpMi5jPTMxMD1zdGF0aWMgaW50IGtzcGkyX3JlZ2lzdGVyX2RldmljZXMoc3RydWN0IGtzcGkyICprc3BpKVxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWtzcGkyLmMtMzE2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBrc3BpLVxcdTAwM2VhdXhkZXYtXFx1MDAzZWluZm9fc2l6ZTsgaSsrKSB7XFxuZHJpdmVycy9zcGkvc3BpLWtzcGkyLmM6MzE3OlxcdFxcdHN0cnVjdCBzcGlfZGV2aWNlICpkZXZpY2UgPSBzcGlfbmV3X2RldmljZShrc3BpLVxcdTAwM2Vob3N0LCBcXHUwMDI2aW5mb1tpXSk7XFxuZHJpdmVycy9zcGkvc3BpLWtzcGkyLmMtMzE4LVxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWxtNzBsbHAuYz0xODg9c3RhdGljIHZvaWQgc3BpX2xtNzBsbHBfYXR0YWNoKHN0cnVjdCBwYXJwb3J0ICpwKVxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWxtNzBsbHAuYy0yNjYtXFx0cHAtXFx1MDAzZWluZm8uY29udHJvbGxlcl9kYXRhID0gcHA7XFxuZHJpdmVycy9zcGkvc3BpLWxtNzBsbHAuYzoyNjc6XFx0cHAtXFx1MDAzZXNwaWRldl9sbTcwID0gc3BpX25ld19kZXZpY2UocHAtXFx1MDAzZWJpdGJhbmcuY3RsciwgXFx1MDAyNnBwLVxcdTAwM2VpbmZvKTtcXG5kcml2ZXJzL3NwaS9zcGktbG03MGxscC5jLTI2OC1cXHRpZiAocHAtXFx1MDAzZXNwaWRldl9sbTcwKVxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWxtNzBsbHAuYy0yNzEtXFx0ZWxzZSB7XFxuZHJpdmVycy9zcGkvc3BpLWxtNzBsbHAuYzoyNzI6XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNnBkLVxcdTAwM2VkZXYsIFxcXCJzcGlfbmV3X2RldmljZSBmYWlsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvc3BpL3NwaS1sbTcwbGxwLmMtMjczLVxcdFxcdHN0YXR1cyA9IC1FTk9ERVY7XFxuLS1cXG5kcml2ZXJzL3NwaS9zcGkteGlsaW54LmM9NDAyPXN0YXRpYyBpbnQgeGlsaW54X3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLXhpbGlueC5jLTUwOS1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcGRhdGEtXFx1MDAzZW51bV9kZXZpY2VzOyBpKyspXFxuZHJpdmVycy9zcGkvc3BpLXhpbGlueC5jOjUxMDpcXHRcXHRcXHRzcGlfbmV3X2RldmljZShob3N0LCBwZGF0YS1cXHUwMDNlZGV2aWNlcyArIGkpO1xcbmRyaXZlcnMvc3BpL3NwaS14aWxpbnguYy01MTEtXFx0fVxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLmM9NzkxPUVYUE9SVF9TWU1CT0xfR1BMKHNwaV9hZGRfZGV2aWNlKTtcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS5jLTc5My0vKipcXG5kcml2ZXJzL3NwaS9zcGkuYzo3OTQ6ICogc3BpX25ld19kZXZpY2UgLSBpbnN0YW50aWF0ZSBvbmUgbmV3IFNQSSBkZXZpY2VcXG5kcml2ZXJzL3NwaS9zcGkuYy03OTUtICogQGN0bHI6IENvbnRyb2xsZXIgdG8gd2hpY2ggZGV2aWNlIGlzIGNvbm5lY3RlZFxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLmMtODA2LSAqL1xcbmRyaXZlcnMvc3BpL3NwaS5jOjgwNzpzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpX25ld19kZXZpY2Uoc3RydWN0IHNwaV9jb250cm9sbGVyICpjdGxyLFxcbmRyaXZlcnMvc3BpL3NwaS5jLTgwOC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqY2hpcClcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS5jLTg2Mi19XFxuZHJpdmVycy9zcGkvc3BpLmM6ODYzOkVYUE9SVF9TWU1CT0xfR1BMKHNwaV9uZXdfZGV2aWNlKTtcXG5kcml2ZXJzL3NwaS9zcGkuYy04NjQtXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGkuYz04OTM9c3RhdGljIHZvaWQgc3BpX21hdGNoX2NvbnRyb2xsZXJfdG9fYm9hcmRpbmZvKHN0cnVjdCBzcGlfY29udHJvbGxlciAqY3RscixcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS5jLTkwMC1cXG5kcml2ZXJzL3NwaS9zcGkuYzo5MDE6XFx0ZGV2ID0gc3BpX25ld19kZXZpY2UoY3RsciwgYmkpO1xcbmRyaXZlcnMvc3BpL3NwaS5jLTkwMi1cXHRpZiAoIWRldilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTg6MDU6NTMuMDE2MDIxMjI1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5NTAxNzE2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVzUxMDAgU1BJIERyaXZlciBpbiBTeXprYWxsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhlIFc1MTAwIFNQSSBkcml2ZXIgd2l0aGluIHN5emthbGxlci4gVGhlIGltbWVkaWF0ZSBodXJkbGUgaXMgdGhhdCB0aGVyZSBpc24ndCBhIGRpcmVjdCBzeXNmcyBhdHRyaWJ1dGUgbGlrZSBgbmV3X2RldmljZWAgZm9yIFNQSSwgc2ltaWxhciB0byB3aGF0IHdlIGhhdmUgd2l0aCBJMkMgKHRoYW5rcywgYGkyYy1zeXNmcy5jYCEpLiBUaGF0J3MgYSBuby1nby5cblxuTXkgZmlyc3QgdGhvdWdodCB3YXMsIFwiV2FpdCwgZG9lc24ndCBzeXprYWxsZXIgaGF2ZSBzb21lIHRyaWNrZXJ5IHdpdGggZGV2aWNlIHRyZWUgb3ZlcmxheXM/XCIgQnV0IHF1aWNrbHkgSSByZW1lbWJlciwgbm8sIHN5emthbGxlciBkb2Vzbid0IHN1cHBvcnQgZHluYW1pY2FsbHkgbG9hZGluZyBEVCBvdmVybGF5cyBkdXJpbmcgZnV6emluZy4gVGhhdCB3b3VsZCBiZSAqd2F5KiB0b28gY29tcGxleC5cblxuVGhlbiwgSSBzdGFydGVkIHRvIHRoaW5rIGlmIHRoZXJlIHdhcyBhbiBlcXVpdmFsZW50IHRvIHRoZSBleGlzdGluZyBwcmltaXRpdmVzLCBsaWtlIGBzeXpfdXNiX2Nvbm5lY3RgLCBgc3l6XzgwMjExX2pvaW5faWJzc2AsIGBzeXpfZ2VuZXRsaW5rYCwgb3IgYHN5el92aGNpYCwgdGhhdCB3b3JrIGZvciBVU0IsIG1hYzgwMjExLCBuZXRsaW5rIGFuZCBibHVldG9vdGguIEJ1dCBubywgdGhlcmUncyBubyBlcXVpdmFsZW50IGBzeXpfc3BpX2Nvbm5lY3RgLiBUaGF0IHdvdWxkIGJlIHRvbyBlYXN5IVxuXG5Pa2F5LCBuZXcgYW5nbGUuIFdoYXQgYWJvdXQgc29tZSBvdGhlciB3YXkgdG8gaW5zdGFudGlhdGUgdGhlIGRyaXZlcj8gQnV0LCBzaW5jZSBpdCdzIGFuIFNQSSBkcml2ZXIsIHRoYXQncyB1bmxpa2VseS5cblxuTm93LCBsZXQncyB0YWtlIGEgbG9vay4gQ2FuIHdlIGV2ZW4gKnJlYWNoKiBgdzUxMDBfcHJvYmVgIGluIHRoZSBzdGFuZGFyZCBzeXprYWxsZXIgc2V0dXA/IEl0J3MgYW4gU1BJIGRyaXZlciwgd2hpY2ggbWVhbnMgaXQgcmVsaWVzIG9uIGFuIFNQSSBkZXZpY2UgYmVpbmcgcmVnaXN0ZXJlZCBzb21ld2hlcmUsIHNvbWVob3cuIFNQSSBkZXZpY2VzIGdldCByZWdpc3RlcmVkIHZpYSBTUEkgY29udHJvbGxlcnMsIHBhcnNpbmcgZGV2aWNlIHRyZWVzLCBBQ1BJIHRhYmxlcywgb3IgYm9hcmQgZmlsZXMuXG5cbkFuZCBoZXJlJ3Mgd2hlcmUgaXQgZ2V0cyB0cmlja3kuIEluIGEgdHlwaWNhbCB4ODZfNjQgVk0sIGxpa2UgdGhlIG9uZSB3ZSdyZSB1c2luZyB3aXRoIFFFTVUsIHRoZXJlJ3Mgbm8gU1BJIGNvbnRyb2xsZXIgdGhhdCBjYW4gcGFyc2UgYXJiaXRyYXJ5IERUIG5vZGVzLiBVbmxlc3Mgd2Ugd2VyZSBvbiBhbiBBUk0gYm9hcmQgd2l0aCBhIERULCBidXQgZXZlbiB0aGVuLCB0aGUgRFQgaXMgc3RhdGljLiBTbywgdGhlIGJvdHRvbSBsaW5lIGlzIGB3NTEwMF9wcm9iZWAgaXMgdW5yZWFjaGFibGUgaW4gbW9zdCBzdGFuZGFyZCBzeXprYWxsZXIgZW52aXJvbm1lbnRzLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBgdzUxMDBgIGNhbid0IGJlIGluc3RhbnRpYXRlZCB2aWEgc29tZSBvdGhlciBidXMgSSdtIGZvcmdldHRpbmcgYWJvdXQuIEJ1dCBJJ20gcHJldHR5IHN1cmUgd2UncmUgc3R1Y2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDQ3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE4OjA2OjAwLjk2NjE5NjAzOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NTcwMjMxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3NTEwMF9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLXNwaS5jPTQyMT1zdGF0aWMgaW50IHc1MTAwX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLXNwaS5jLTQ1Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmM6NDUzOlxcdHJldHVybiB3NTEwMF9wcm9iZShcXHUwMDI2c3BpLVxcdTAwM2VkZXYsIG9wcywgcHJpdl9zaXplLCBtYWMsIHNwaS1cXHUwMDNlaXJxKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmMtNDU0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jPTczOT1FWFBPUlRfU1lNQk9MX0dQTCh3NTEwMF9vcHNfcHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtNzQwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jOjc0MTppbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtNzQyLVxcdFxcdGludCBzaXplb2Zfb3BzX3ByaXYsIGNvbnN0IHZvaWQgKm1hY19hZGRyLCBpbnQgaXJxKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtODgyLX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYzo4ODM6RVhQT1JUX1NZTUJPTF9HUEwodzUxMDBfcHJvYmUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTg4NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5oPTI5PXZvaWQgKnc1MTAwX29wc19wcml2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuaC0zMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuaDozMTppbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmgtMzItXFx0XFx0aW50IHNpemVvZl9vcHNfcHJpdiwgY29uc3Qgdm9pZCAqbWFjX2FkZHIsIGludCBpcnEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxODowNjowMi41NTE5MDI5MDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIzOTE0MjE1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBXNTEwMCBEcml2ZXIgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIGp1c3Qgc3BvdHRlZCBgdzUxMDAtc3BpLmNgIGluIHRoZSBjb2RlLiBUaGF0IHN1Z2dlc3RzIHRoZXJlIG1pZ2h0IGJlIGFuIFNQSS1iYXNlZCBXNTEwMCBkcml2ZXIgaW4gcGxhY2UuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGFsc28gYSBNZW1vcnktTWFwcGVkIEkvTyAoTU1JTykgaW1wbGVtZW50YXRpb24gc29tZXdoZXJlPyBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIEkgd2FudCB0byBhc2NlcnRhaW4uIExldCdzIG1ha2Ugc3VyZSBieSBjaGVja2luZyB0aGUgb2J2aW91cyBsb2NhdGlvbjogSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L2AgZGlyZWN0b3J5LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBpdC4gSSBuZWVkIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NTIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxODowNjowOC43OTEwNDczMzhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwidzUxMDAtc3BpLmNcIixcbiAgICBcInc1MTAwLmNcIixcbiAgICBcInc1MTAwLmhcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTg6MDY6MDguNzkxMDk4OTk4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NzY3NzMwMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgV2l6bmV0IERyaXZlciBGaWxlcyoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgV2l6bmV0IEV0aGVybmV0IGRyaXZlcnMuIFJpZ2h0IG5vdywgSSdtIG9ubHkgc2VlaW5nIGB3NTEwMC1zcGkuY2AsIGB3NTEwMC5jYCwgYW5kIGB3NTEwMC5oYCBpbiB0aGlzIGltbWVkaWF0ZSB2aWV3LiBIb2xkIG9uLCB3YXNuJ3QgdGhlcmUgYSBgdzUzMDAuY2AgaW4gdGhpcyBkaXJlY3RvcnkgdG9vPyBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIGJlIHRob3JvdWdoLlxuXG5SaWdodCwgc28gaG93IGFyZSB0aGVzZSBmaWxlcyBiZWluZyBmb3VuZD8gSSB0aG91Z2h0IGBjb2Rlc2VhcmNoLWRpci1pbmRleGAgd2FzIGp1c3QgcmV0dXJuaW5nIGZpbGVzIHRoYXQgKm1hdGNoZWQqIGEgcHJlZml4LCBidXQgaXQncyByZWFsbHkgZ2l2aW5nIG1lICphbGwqIGZpbGVzIGluIHRoZSBkaXJlY3RvcnksIGlzbid0IGl0PyBPa2F5LCBJJ2xsIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5XYWl0LCBsb29raW5nIGF0IHRoZSByZXNwb25zZSwgaXQgd2FzOiBcIkZpbGVzOiBbXCJ3NTEwMC1zcGkuY1wiLCBcInc1MTAwLmNcIiwgXCJ3NTEwMC5oXCJdXCIuIE9rYXksIHNvIHRoYXQgKmlzKiBldmVyeXRoaW5nIGJlaW5nIHJldHVybmVkLiBGaW5lLCBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZXNlIGZpbGVzLCB0aGVuLlxuXG5CdXQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBldmVuIGJpZ2dlci4gTGV0IG1lIGRvdWJsZSBjaGVjayB0aGUgd2hvbGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9gIGRpcmVjdG9yeSBpbiB0aGUga2VybmVsIHRyZWUgdG8gYmUgc3VyZSBJIGRpZG4ndCBtaXNzIHNvbWV0aGluZy4gSSBjYW4ndCBiZSB0b28gY2FyZWZ1bC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMjEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjcsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE4OjA2OjEzLjM2Nzg3NDYzMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxOTg1NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiLipcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9NYWtlZmlsZToxOiMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9NYWtlZmlsZToyOm9iai0kKENPTkZJR19XSVpORVRfVzUxMDApICs9IHc1MTAwLm8gdzUxMDAtc3BpLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTg6MDY6MTMuNDE0MDc3MzNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc3Mjg2Mzc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgdGhlIFNQSSBEcml2ZXIgQ29udGV4dCoqXG5cblJpZ2h0LCBzbyBpdCBsb29rcyBsaWtlIEknbSBkZWFsaW5nIHdpdGggYSBzaXR1YXRpb24gd2hlcmUgbm8gZXh0ZXJuYWwgZmlsZXMgYXJlIGludm9sdmVkLiBJbnRlcmVzdGluZy4gSXQncyBhbiBTUEkgZHJpdmVyLCB3aGljaCBtZWFucyBpdCBpbmhlcmVudGx5IHJlbGllcyBvbiBhIHBoeXNpY2FsIFNQSSBkZXZpY2UgYmVpbmcgcHJlc2VudC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHNpbXVsYXRlIHRoaXMgaW4gUUVNVS4gTm93LCB0eXBpY2FsbHksIGluIFFFTVUsIGluc3RhbnRpYXRpbmcgdGhlc2UgZGV2aWNlcyBmcm9tIHVzZXIgc3BhY2UgaXMgYSB0cmlja3kgaXNzdWUuIEl0IGhpbmdlcyBvbiB3aGV0aGVyIHRoZSBzaW11bGF0ZWQgYm9hcmQgaGFzIGFuIFNQSSBjb250cm9sbGVyIGFuZCB0aGVuIGlmIHRoZXJlJ3MgYSB1c2FibGUgc3lzZnMgaW50ZXJmYWNlIGZvciBpdCwgYnV0IEkgcmVjYWxsIGNoZWNraW5nIGVhcmxpZXIsIGFuZCB1bmZvcnR1bmF0ZWx5LCBTUEkgZG9lc24ndCBoYXZlIHRoYXQgaGFuZHkgYG5ld19kZXZpY2VgIHN5c2ZzIGF0dHJpYnV0ZSB0byBhdXRvbWF0aWNhbGx5IGNyZWF0ZSB0aGUgZGV2aWNlLlxuXG5TbywgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGhvdyAqZWxzZSogY2FuIEkgbWFrZSBhbiBTUEkgZGV2aWNlIGFwcGVhcj8gSSBpbW1lZGlhdGVseSB0aG91Z2h0LCBwZXJoYXBzIHNvbWV0aGluZyBsaWtlIGBzcGktbW9ja2A/IFVuZm9ydHVuYXRlbHksIG5vIGx1Y2ssIGl0IGRvZXNuJ3QgbG9vayBsaWtlIFN5emthbGxlciBoYW5kbGVzIHRoYXQuIFRoZW4gSSBzdGFydGVkIHRvIGNvbnNpZGVyIGBwbGF0Zm9ybV9kZXZpY2VgIHdoaWNoIEkga25vdyBjYW4gYmUgdXNlZCB0byBzZXQgdXAgZGV2aWNlcy4gSG1tbSwgYnV0IG5vLCBwbGF0Zm9ybV9kZXZpY2UgaXMgcHJpbWFyaWx5IHVzZWQgdG8gKnJlZ2lzdGVyKiB0aGUgYHNwaV9kcml2ZXJgLCBub3QgaW5zdGFudGlhdGUgdGhlIGRldmljZSBpdHNlbGYuIE9rYXksIHNvIEkgYW0gc3R1Y2suIFdoYXQgbm93P1xuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcwNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxODowNjoxOS4xODY5NDM4M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyMjg4NzgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNwaV9yZWdpc3Rlcl9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTg6MDY6MTkuMjMzMTgwNDQ4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NTkzNzU2MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipEcml2ZXIgUmVnaXN0cmF0aW9uIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIGhhbmcgb24gYSBzZWNvbmQuIFRoYXQncyB0aGUgY29yZSBxdWVzdGlvbiwgaXNuJ3QgaXQ/IEhvdyBleGFjdGx5ICpkb2VzKiB0aGUgc3lzdGVtIGhhbmRsZSBkcml2ZXIgcmVnaXN0cmF0aW9uPyBJIG1lYW4sIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBtdWx0aS1mYWNldGVkIHByb2Nlc3MsIHBvdGVudGlhbGx5IGludm9sdmluZyBoYXJkd2FyZSwgc29mdHdhcmUsIGFuZCBldmVuIGV4dGVybmFsIGRhdGFiYXNlcyBkZXBlbmRpbmcgb24gdGhlIGltcGxlbWVudGF0aW9uLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBkaWZmZXJlbnQgbGV2ZWxzIG9mIHJlZ2lzdHJhdGlvbi4gSXMgaXQgc2ltcGx5IHJlY29nbml6aW5nIGEgZGV2aWNlLCBvciBpcyBpdCBnb2luZyBkZWVwZXIgdG8gZ2F0aGVyIHNwZWNpZmljcyBhYm91dCB0aGUgZHJpdmVyJ3MgY2FwYWJpbGl0aWVzIGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBvcGVyYXRpbmcgc3lzdGVtPyBJcyB0aGVyZSBhIGR5bmFtaWMgbG9hZGluZyBjb21wb25lbnQsIG9yIGlzIGl0IG1vcmUgb2YgYSBwcmUtY29tcGlsZWQgc2V0dXA/XG5cbkkgYWxzbyBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgZGlnaXRhbGx5IHNpZ25lZCBkcml2ZXIgdGhhdCB0aGUgc3lzdGVtIGNhbiB2ZXJpZnk/IElzIHRoZXJlIGEgZHJpdmVyIHNpZ25pbmcgcG9saWN5IGVuZm9yY2VkLCBtYXliZSByZXF1aXJpbmcgYSBzcGVjaWZpYyBjZXJ0aWZpY2F0ZSBhdXRob3JpdHk/IE9yIGlzIHRoaXMgYSBtb3JlIG9wZW4gc3lzdGVtLCB0aGF0IG1heSBhbGxvdyB1bnNpZ25lZCBkcml2ZXJzIG9yIG9uZXMgdGhhdCBhcmVuJ3QgdmVyaWZpZWQ/IEknbSBjdXJpb3VzIGlmIHRoZXkgd2VudCB3aXRoIGEgcG9saWN5IG9mIGFsbG93aW5nIHVuc2lnbmVkIGRyaXZlcnMgYW5kIHRoZSBhc3NvY2lhdGVkIHJpc2tzLlxuXG5UaGVuLCB0aGVyZSdzIHRoZSBxdWVzdGlvbiBvZiBkaXNjb3ZlcnkuIERvZXMgdGhlIHN5c3RlbSBhdXRvbWF0aWNhbGx5IGRldGVjdCBuZXcgZHJpdmVycyB1cG9uIGhhcmR3YXJlIGNvbm5lY3Rpb24sIG9yIGlzIGl0IGEgbWFudWFsIHByb2Nlc3Mgd2hlcmUgdGhlIHVzZXIgaGFzIHRvIHBvaW50IHRoZSBzeXN0ZW0gdG8gdGhlIGNvcnJlY3QgZmlsZXM/IElzIHRoZXJlIHNvbWUga2luZCBvZiBwbHVnLWFuZC1wbGF5IG1lY2hhbmlzbSBhdCB3b3JrIGhlcmU/IEFuZCBpZiBzbywgaG93IGRvZXMgdGhhdCBpbnRlcmFjdGlvbiBvY2N1cj9cblxuVWx0aW1hdGVseSwgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIGhhcyBpbXBsaWNhdGlvbnMgZm9yIHN5c3RlbSBzdGFiaWxpdHksIHNlY3VyaXR5LCBhbmQgdGhlIG92ZXJhbGwgdXNlciBleHBlcmllbmNlLiBJdCBuZWVkcyB0byBiZSByb2J1c3QsIHNlY3VyZSwgYW5kIGFzIHNlYW1sZXNzIGFzIHBvc3NpYmxlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBpbnRyaWNhY2llcyBvZiBob3cgdGhlIHJlZ2lzdHJhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBrZXJuZWwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgbWVjaGFuaXNtcyBpbiBwbGFjZSB0byBoYW5kbGUgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBlcnJvcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTUzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxODowNjoyMy43OTI1NTg2NjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNDAzNTM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfc3BpX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYz00Njk9c3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHc1MTAwX3NwaV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmMtNDc4LX07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLXNwaS5jOjQ3OTptb2R1bGVfc3BpX2RyaXZlcih3NTEwMF9zcGlfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmMtNDgwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxODowNjoyNC4xMTY1OTk0NDRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTkyNzE3NTEyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBTUEkgRHJpdmVyKipcblxuT2theSwgc28gSSd2ZSBleGFtaW5lZCB0aGlzIGNvZGUsIGFuZCBpdCdzIGRlZmluaXRlbHkgYW4gYHNwaV9kcml2ZXJgLiBUaGUgY29yZSBpc3N1ZSBoZXJlIGlzIHRoYXQsIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCB0aGVyZSdzIG5vIHJlbGlhYmxlIHdheSB0byBpbnN0YW50aWF0ZSB0aGlzIHBhcnRpY3VsYXIgU1BJIGRldmljZSB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFLiBUaGlzIG1lYW5zIHN5emthbGxlciwgaW4gaXRzIGN1cnJlbnQgY29uZmlndXJhdGlvbiwgd29uJ3QgYmUgYWJsZSB0byByZWFjaCBpdC5cblxuTGV0IG1lIGp1c3Qgc29saWRpZnkgdGhpcyByZWFzb25pbmcuIEknbSByZWNhbGxpbmcgaG93IEkyQyBjYW4gY3JlYXRlIGEgbmV3IGRldmljZSwgYnV0IFNQSSBkb2VzIG5vdC4gVGhlcmUncyB0aGF0IGBzcGktbG9vcGJhY2stdGVzdGAgbW9kdWxlLCBidXQgdGhhdOKAmXMgY2xlYXJseSBkZXNpZ25lZCBmb3IgdGVzdGluZyBhbmQgd29uJ3QgZ2V0IHVzIHdoZXJlIHdlIG5lZWQgdG8gYmUuIEkgaGF2ZW7igJl0IHNlZW4gYW55dGhpbmcgaW4gc3l6a2FsbGVyIGxpa2UgYSBgc3l6X3NwaV9jb25uZWN0YCBwc2V1ZG8tc3lzY2FsbCBlaXRoZXIuIFRoZSBvbmx5IGV4Y2VwdGlvbiB3b3VsZCBiZSBpZiBzeXprYWxsZXIgcmFuIG9uIGEgdmVyeSBzcGVjaWZpYyBBUk0gYm9hcmQgbW9kZWwgaW5zaWRlIFFFTVUgd2hlcmUgdGhpcyBkZXZpY2Ugd2FzIHN0YXRpY2FsbHkgZGVmaW5lZCBpbiB0aGUgZGV2aWNlIHRyZWUsIGJ1dCB0aGF0J3Mgbm90IHRoZSB0eXBpY2FsIHg4Nl82NCBnZW5lcmljIFBDIG1hY2hpbmUsIG9yIHRoZSBgdmlydGAgQVJNNjQgc2V0dXAgdGhhdCBzeXprYWxsZXIgdXN1YWxseSBydW5zIG9uLiBUaG9zZSBlbnZpcm9ubWVudHMgZG9uJ3QgaGF2ZSBoYXJkY29kZWQgV2l6bmV0IFc1MTAwIFNQSSBkZXZpY2UgY29uZmlndXJhdGlvbnMuIFNvLCB1bnJlYWNoYWJsZS5cblxuTm93LCBsZXQncyBnbyBiYWNrIGFuZCByZXZpZXcgdGhlIG9yaWdpbmFsIHByb21wdC4gSXQncyBhc2tpbmcgZm9yIGEgYFdvcnRoRnV6emluZz1mYWxzZWAgcmV0dXJuIGlmIHRoZSBwYXRjaCBpbnZvbHZlcyBjb2RlIHRoYXQgY2FuJ3QgYmUgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGV2ZW4gd2l0aCBlbXVsYXRlZCBoYXJkd2FyZS4gSXQgYWxzbyBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIHRoYXQgcmVseSBvbiBwaHlzaWNhbCBoYXJkd2FyZS4gVGhpcyBmaXRzIGxpa2UgYSBnbG92ZS4gVGhpcyBTUEkgRXRoZXJuZXQgY29udHJvbGxlciBpcyB2ZW5kb3Itc3BlY2lmaWMuIEl0IHJlcXVpcmVzIGVpdGhlciBwaHlzaWNhbCBTUEkgaGFyZHdhcmUgb3IgYSBzcGVjaWZpYyBRRU1VIGVtdWxhdGlvbiB0aGF0IGlzbid0IGdlbmVyaWNhbGx5IGF2YWlsYWJsZSBhbmQgY2FuJ3QgYmUgc2V0IHVwIGZyb20gdXNlcnNwYWNlLiBJdCdzIGNsZWFybHkgXCJpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIlxuXG5UaGVyZWZvcmUsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBhbmQgcHJvdmlkaW5nIHRoZSByYXRpb25hbGUgYXMgc3RhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzcxNSwiT3V0cHV0VG9rZW5zIjoxNDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTg6MDY6MzQuMDQzNzc2OTU5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdpem5ldCBXNTEwMC9XNTIwMC9XNTUwMCBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGlzIGFuIFNQSSBkZXZpY2UgZHJpdmVyLiBJbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSBvciBHQ0UpIHVzZWQgYnkgc3l6a2FsbGVyLCB0aGVyZSBpcyBubyBnZW5lcmljIHdheSB0byBpbnN0YW50aWF0ZSBhcmJpdHJhcnkgU1BJIGRldmljZXMgZnJvbSB1c2Vyc3BhY2UgKHVubGlrZSBJMkMncyBgbmV3X2RldmljZWAgc3lzZnMgaW50ZXJmYWNlIG9yIFVTQidzIGR1bW15X2hjZCkuIFNpbmNlIHRoZSBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgYW5kIHRoZSBkZXZpY2UgY2Fubm90IGJlIGR5bmFtaWNhbGx5IGNyZWF0ZWQsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXaXpuZXQgVzUxMDAvVzUyMDAvVzU1MDAgRXRoZXJuZXQgZHJpdmVyLCB3aGljaCBpcyBhbiBTUEkgZGV2aWNlIGRyaXZlci4gSW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUgb3IgR0NFKSB1c2VkIGJ5IHN5emthbGxlciwgdGhlcmUgaXMgbm8gZ2VuZXJpYyB3YXkgdG8gaW5zdGFudGlhdGUgYXJiaXRyYXJ5IFNQSSBkZXZpY2VzIGZyb20gdXNlcnNwYWNlICh1bmxpa2UgSTJDJ3MgYG5ld19kZXZpY2VgIHN5c2ZzIGludGVyZmFjZSBvciBVU0IncyBkdW1teV9oY2QpLiBTaW5jZSB0aGUgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGFuZCB0aGUgZGV2aWNlIGNhbm5vdCBiZSBkeW5hbWljYWxseSBjcmVhdGVkLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownddjx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-06 17:44:22 +0000 UTC FinishedAt: 2026-08-06 18:06:36 +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+CgkJCTx0ZD4yMDI2LzA4LzA2IDE4OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXaXpuZXQgVzUxMDAvVzUyMDAvVzU1MDAgRXRoZXJuZXQgZHJpdmVyLCB3aGljaCBpcyBhbiBTUEkgZGV2aWNlIGRyaXZlci4gSW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUgb3IgR0NFKSB1c2VkIGJ5IHN5emthbGxlciwgdGhlcmUgaXMgbm8gZ2VuZXJpYyB3YXkgdG8gaW5zdGFudGlhdGUgYXJiaXRyYXJ5IFNQSSBkZXZpY2VzIGZyb20gdXNlcnNwYWNlICh1bmxpa2UgSTJDJiMzOTtzIGBuZXdfZGV2aWNlYCBzeXNmcyBpbnRlcmZhY2Ugb3IgVVNCJiMzOTtzIGR1bW15X2hjZCkuIFNpbmNlIHRoZSBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgYW5kIHRoZSBkZXZpY2UgY2Fubm90IGJlIGR5bmFtaWNhbGx5IGNyZWF0ZWQsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTg6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1ZjEzODFlNWFkZTNmZjliM2M0MjNjOTAwYmEzYjhlNjVhNTc4NjNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAxODowNToyMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpem5ldCx3NTEwMC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzUxMDAueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmNlYmY0MzdhZDNjNGFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1MTAwLnlhbWxcbkBAIC0wLDAgJiM0MzsxLDc0IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuJiM0MzslWUFNTCAxLjJcbiYjNDM7LS0tXG4mIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3dpem5ldCx3NTEwMC55YW1sI1xuJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbiYjNDM7XG4mIzQzO3RpdGxlOiBXaXpuZXQgdzUxMDAvdzUyMDAvdzU1MDAgU1BJIEV0aGVybmV0IENvbnRyb2xsZXJcbiYjNDM7XG4mIzQzO21haW50YWluZXJzOlxuJiM0MzsgIC0gQXJ0aHVyIENyw6lwaW4gTGVibG9uZCBcdTAwM2NhcnRodXJAbWFybW90dHVzLm5ldFx1MDAzZVxuJiM0MztcbiYjNDM7ZGVzY3JpcHRpb246IHxcbiYjNDM7ICBUaGlzIGlzIGEgc3RhbmRhbG9uZSAxMC8xMDAgTUJpdCBFdGhlcm5ldCBjb250cm9sbGVyIHdpdGggU1BJIGludGVyZmFjZS5cbiYjNDM7XG4mIzQzO2FsbE9mOlxuJiM0MzsgIC0gJHJlZjogL3NjaGVtYXMvbmV0L2V0aGVybmV0LWNvbnRyb2xsZXIueWFtbCNcbiYjNDM7ICAtICRyZWY6IC9zY2hlbWFzL3NwaS9zcGktcGVyaXBoZXJhbC1wcm9wcy55YW1sI1xuJiM0MztcbiYjNDM7cHJvcGVydGllczpcbiYjNDM7ICBjb21wYXRpYmxlOlxuJiM0MzsgICAgZW51bTpcbiYjNDM7ICAgICAgLSB3aXpuZXQsdzUxMDBcbiYjNDM7ICAgICAgLSB3aXpuZXQsdzUyMDBcbiYjNDM7ICAgICAgLSB3aXpuZXQsdzU1MDBcbiYjNDM7XG4mIzQzOyAgaW50ZXJydXB0czpcbiYjNDM7ICAgIG1heEl0ZW1zOiAxXG4mIzQzO1xuJiM0MzsgIHJlZzpcbiYjNDM7ICAgIG1heEl0ZW1zOiAxXG4mIzQzO1xuJiM0MzsgIHNwaS1tYXgtZnJlcXVlbmN5OlxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIEFjY29yZGluZyB0byB0aGUgdzU1MDAgZGF0YXNoZWV0LCB0aGUgY2hpcCBhbGxvd3MgYSBtYXhpbXVtIG9mIDgwIE1IeixcbiYjNDM7ICAgICAgaG93ZXZlciwgYm9hcmQgZGVzaWducyBtYXkgbmVlZCB0byBsaW1pdCB0aGlzIHZhbHVlLlxuJiM0MzsgICAgbWF4aW11bTogODAwMDAwMDBcbiYjNDM7XG4mIzQzOyAgbGluay1ncGlvczpcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBBbiBvcHRpb25hbCBHUElPIGxpbmUgdGhhdCBjYW4gYmUgd2lyZWQgdG8gdGhlIExJTktMRUQgcGluIG9mIHRoZSB3NTUwMFxuJiM0MzsgICAgICBhcyBhbiBpbnRlcnJ1cHQgdG8gZGV0ZWN0IGxpbmsgc3RhdHVzIGNoYW5nZXMuXG4mIzQzOyAgICBtYXhJdGVtczogMVxuJiM0MztcbiYjNDM7cmVxdWlyZWQ6XG4mIzQzOyAgLSBjb21wYXRpYmxlXG4mIzQzOyAgLSByZWdcbiYjNDM7ICAtIGludGVycnVwdHNcbiYjNDM7XG4mIzQzO3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO2V4YW1wbGVzOlxuJiM0MzsgIC0gfFxuJiM0MzsgICAgLyogRXhhbXBsZSAoZm9yIFJhc3BiZXJyeSBQaSB3aXRoIHBpbiBjb250cm9sIHN0dWZmIGZvciBHUElPIGlycSkgKi9cbiYjNDM7XG4mIzQzOyAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaFx1MDAzZVxuJiM0MzsgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyAgICBzcGkge1xuJiM0MzsgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1xuJiM0MzsgICAgICAgIGV0aGVybmV0QDAge1xuJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7d2l6bmV0LHc1NTAwXCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBwaW5jdHJsLW5hbWVzID0gXCYjMzQ7ZGVmYXVsdFwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcGluY3RybC0wID0gXHUwMDNjXHUwMDI2ZXRoMV9waW5zXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBpbnRlcnJ1cHQtcGFyZW50ID0gXHUwMDNjXHUwMDI2Z3Bpb1x1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgaW50ZXJydXB0cyA9IFx1MDAzYzI1IElSUV9UWVBFX0VER0VfRkFMTElOR1x1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgbGluay1ncGlvcyA9IFx1MDAzY1x1MDAyNmdwaW8gMjQgR1BJT19BQ1RJVkVfTE9XXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBzcGktbWF4LWZyZXF1ZW5jeSA9IFx1MDAzYzMwMDAwMDAwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBsb2NhbC1tYWMtYWRkcmVzcyA9IFsgYTAgYjAgYzAgZDAgZTAgZjAgXTtcbiYjNDM7ICAgICAgICB9O1xuJiM0MzsgICAgfTtcbiYjNDM7Li4uXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0XG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGU5NjY1Nzk4YzRiZTYuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1eDAwLnR4dFxuJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbFxuQEAgLTEsNTAgJiM0MzswLDAgQEBcbi0qIFdpem5ldCB3NXgwMFxuLVxuLVRoaXMgaXMgYSBzdGFuZGFsb25lIDEwLzEwMCBNQml0IEV0aGVybmV0IGNvbnRyb2xsZXIgd2l0aCBTUEkgaW50ZXJmYWNlLlxuLVxuLUZvciBlYWNoIGRldmljZSBjb25uZWN0ZWQgdG8gYSBTUEkgYnVzLCBkZWZpbmUgYSBjaGlsZCBub2RlIHdpdGhpblxuLXRoZSBTUEkgbWFzdGVyIG5vZGUuXG4tXG4tUmVxdWlyZWQgcHJvcGVydGllczpcbi0tIGNvbXBhdGlibGU6IFNob3VsZCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzdHJpbmdzOlxuLVx0ICAgICAgXCYjMzQ7d2l6bmV0LHc1MTAwXCYjMzQ7XG4tXHQgICAgICBcJiMzNDt3aXpuZXQsdzUyMDBcJiMzNDtcbi1cdCAgICAgIFwmIzM0O3dpem5ldCx3NTUwMFwmIzM0O1xuLS0gcmVnOiBTcGVjaWZ5IHRoZSBTUEkgY2hpcCBzZWxlY3QgdGhlIGNoaXAgaXMgd2lyZWQgdG8uXG4tLSBpbnRlcnJ1cHRzOiBTcGVjaWZ5IHRoZSBpbnRlcnJ1cHQgaW5kZXggd2l0aGluIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciAocmVmZXJyZWRcbi0gICAgICAgICAgICAgIHRvIGFib3ZlIGluIGludGVycnVwdC1wYXJlbnQpIGFuZCBpbnRlcnJ1cHQgdHlwZS4gdzV4MDAgbmF0aXZlbHlcbi0gICAgICAgICAgICAgIGdlbmVyYXRlcyBmYWxsaW5nIGVkZ2UgaW50ZXJydXB0cywgaG93ZXZlciwgYWRkaXRpb25hbCBib2FyZCBsb2dpY1xuLSAgICAgICAgICAgICAgbWlnaHQgaW52ZXJ0IHRoZSBzaWduYWwuXG4tLSBwaW5jdHJsLW5hbWVzOiBMaXN0IG9mIGFzc2lnbmVkIHN0YXRlIG5hbWVzLCBzZWUgcGluY3RybCBiaW5kaW5nIGRvY3VtZW50YXRpb24uXG4tLSBwaW5jdHJsLTA6IExpc3Qgb2YgcGhhbmRsZXMgdG8gY29uZmlndXJlIHRoZSBHUElPIHBpbiB1c2VkIGFzIGludGVycnVwdCBsaW5lLFxuLSAgICAgICAgICAgICBzZWUgYWxzbyBnZW5lcmljIGFuZCB5b3VyIHBsYXRmb3JtIHNwZWNpZmljIHBpbmN0cmwgYmluZGluZ1xuLSAgICAgICAgICAgICBkb2N1bWVudGF0aW9uLlxuLVxuLU9wdGlvbmFsIHByb3BlcnRpZXM6XG4tLSBzcGktbWF4LWZyZXF1ZW5jeTogTWF4aW11bSBmcmVxdWVuY3kgb2YgdGhlIFNQSSBidXMgd2hlbiBhY2Nlc3NpbmcgdGhlIHc1NTAwLlxuLSAgQWNjb3JkaW5nIHRvIHRoZSB3NTUwMCBkYXRhc2hlZXQsIHRoZSBjaGlwIGFsbG93cyBhIG1heGltdW0gb2YgODAgTUh6LCBob3dldmVyLFxuLSAgYm9hcmQgZGVzaWducyBtYXkgbmVlZCB0byBsaW1pdCB0aGlzIHZhbHVlLlxuLS0gbG9jYWwtbWFjLWFkZHJlc3M6IFNlZSBldGhlcm5ldC50eHQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuLVxuLVxuLUV4YW1wbGUgKGZvciBSYXNwYmVycnkgUGkgd2l0aCBwaW4gY29udHJvbCBzdHVmZiBmb3IgR1BJTyBpcnEpOlxuLVxuLVx1MDAyNnNwaSB7XG4tXHRldGhlcm5ldEAwOiB3NTUwMEAwIHtcbi1cdFx0Y29tcGF0aWJsZSA9IFwmIzM0O3dpem5ldCx3NTUwMFwmIzM0Oztcbi1cdFx0cmVnID0gXHUwMDNjMFx1MDAzZTtcbi1cdFx0cGluY3RybC1uYW1lcyA9IFwmIzM0O2RlZmF1bHRcJiMzNDs7XG4tXHRcdHBpbmN0cmwtMCA9IFx1MDAzY1x1MDAyNmV0aDFfcGluc1x1MDAzZTtcbi1cdFx0aW50ZXJydXB0LXBhcmVudCA9IFx1MDAzY1x1MDAyNmdwaW9cdTAwM2U7XG4tXHRcdGludGVycnVwdHMgPSBcdTAwM2MyNSBJUlFfVFlQRV9FREdFX0ZBTExJTkdcdTAwM2U7XG4tXHRcdHNwaS1tYXgtZnJlcXVlbmN5ID0gXHUwMDNjMzAwMDAwMDBcdTAwM2U7XG4tXHR9O1xuLX07XG4tXG4tXHUwMDI2Z3BpbyB7XG4tXHRldGgxX3BpbnM6IGV0aDFfcGlucyB7XG4tXHRcdGJyY20scGlucyA9IFx1MDAzYzI1XHUwMDNlO1xuLVx0XHRicmNtLGZ1bmN0aW9uID0gXHUwMDNjMFx1MDAzZTsgLyogaW4gKi9cbi1cdFx0YnJjbSxwdWxsID0gXHUwMDNjMFx1MDAzZTsgLyogbm9uZSAqL1xuLVx0fTtcbi19O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmNcbmluZGV4IDUzZDhkYzY0MmZiZDYuLjY3MDdhNmYyNzM5NTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmNcbkBAIC0yMiw2ICYjNDM7MjIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnEuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ncGlvL2NvbnN1bWVyLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDt3NTEwMC5oXCYjMzQ7XG4gXG5AQCAtMTI0LDYgJiM0MzsxMjUsOCBAQCBNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuICAqL1xuICNkZWZpbmUgVzU1MDBfU0lNUlx0XHQweDAwMTggLyogU29ja2V0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovXG4gI2RlZmluZSBXNTUwMF9SVFJcdFx0MHgwMDE5IC8qIFJldHJ5IFRpbWUtdmFsdWUgUmVnaXN0ZXIgKi9cbiYjNDM7I2RlZmluZSBXNTUwMF9QSFlDRkdSXHRcdDB4MDAyZSAvKiAgUEhZIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi9cbiYjNDM7I2RlZmluZSAgIFBIWUNGR1JfTE5LXHRcdCAgMHgwMSAvKiBsaW5rIHN0YXR1cyAqL1xuIFxuICNkZWZpbmUgVzU1MDBfUzBfUkVHU1x0XHQweDEwMDAwXG4gXG5AQCAtMTU0LDYgJiM0MzsxNTcsNyBAQCBzdHJ1Y3QgdzUxMDBfcHJpdiB7XG4gXHR1MTYgczBfcnhfYnVmX3NpemU7XG4gXG4gXHRpbnQgaXJxO1xuJiM0MztcdHN0cnVjdCBncGlvX2Rlc2MgKmxpbmtfZ3BpbztcbiBcbiBcdHN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG5AQCAtNDE0LDYgJiM0Mzs0MTgsMTYgQEAgc3RhdGljIHZvaWQgdzUxMDBfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRcdHNpemVvZihpbmZvLVx1MDAzZWJ1c19pbmZvKSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdTMyIHc1MTAwX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHc1MTAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlb3BzLVx1MDAzZWNoaXBfaWQgPT0gVzU1MDApXG4mIzQzO1x0XHRyZXR1cm4gdzUxMDBfcmVhZChwcml2LCBXNTUwMF9QSFlDRkdSKSBcdTAwMjYgUEhZQ0ZHUl9MTks7XG4mIzQzO1xuJiM0MztcdHJldHVybiAxO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB1MzIgdzUxMDBfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIHtcbiBcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG5AQCAtNjE2LDYgJiM0Mzs2MzAsMjQgQEAgc3RhdGljIGlycXJldHVybl90IHc1MTAwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpuZGV2X2luc3RhbmNlKVxuIFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlycXJldHVybl90IHc1MTAwX2RldGVjdF9saW5rKGludCBpcnEsIHZvaWQgKm5kZXZfaW5zdGFuY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IG5kZXZfaW5zdGFuY2U7XG4mIzQzO1x0c3RydWN0IHc1MTAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcobmRldikpIHtcbiYjNDM7XHRcdGlmICh3NTEwMF9nZXRfbGluayhuZGV2KSkge1xuJiM0MztcdFx0XHRuZXRpZl9pbmZvKHByaXYsIGxpbmssIG5kZXYsIFwmIzM0O2xpbmsgaXMgdXBcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRuZXRpZl9jYXJyaWVyX29uKG5kZXYpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0bmV0aWZfaW5mbyhwcml2LCBsaW5rLCBuZGV2LCBcJiMzNDtsaW5rIGlzIGRvd25cXG5cJiMzNDspO1xuJiM0MztcdFx0XHRuZXRpZl9jYXJyaWVyX29mZihuZGV2KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBJUlFfSEFORExFRDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB3NTEwMF9zZXRyeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdzUxMDBfcHJpdixcbkBAIC02NTksNiAmIzQzOzY5MSwxMiBAQCBzdGF0aWMgaW50IHc1MTAwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHR3NTEwMF9od19zdGFydChwcml2KTtcbiBcdG5hcGlfZW5hYmxlKFx1MDAyNnByaXYtXHUwMDNlbmFwaSk7XG4gXHRuZXRpZl9zdGFydF9xdWV1ZShuZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHc1MTAwX2dldF9saW5rKG5kZXYpKVxuJiM0MztcdFx0bmV0aWZfY2Fycmllcl9vbihuZGV2KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRuZXRpZl9jYXJyaWVyX29mZihuZGV2KTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNjc4LDYgJiM0Mzs3MTYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHc1MTAwX2V0aHRvb2xfb3BzID0ge1xuIFx0LmdldF9kcnZpbmZvXHRcdD0gdzUxMDBfZ2V0X2RydmluZm8sXG4gXHQuZ2V0X21zZ2xldmVsXHRcdD0gdzUxMDBfZ2V0X21zZ2xldmVsLFxuIFx0LnNldF9tc2dsZXZlbFx0XHQ9IHc1MTAwX3NldF9tc2dsZXZlbCxcbiYjNDM7XHQuZ2V0X2xpbmtcdFx0PSB3NTEwMF9nZXRfbGluayxcbiBcdC5nZXRfcmVnc19sZW5cdFx0PSB3NTEwMF9nZXRfcmVnc19sZW4sXG4gXHQuZ2V0X3JlZ3NcdFx0PSB3NTEwMF9nZXRfcmVncyxcbiB9O1xuQEAgLTc1MSw2ICYjNDM7NzkwLDEzIEBAIGludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcbiBcdHByaXYtXHUwMDNlbmRldiA9IG5kZXY7XG4gXHRwcml2LVx1MDAzZW9wcyA9IG9wcztcbiBcdHByaXYtXHUwMDNlaXJxID0gaXJxO1xuJiM0MztcdHByaXYtXHUwMDNlbGlua19ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoZGV2LCBcJiMzNDtsaW5rXCYjMzQ7LCBHUElPRF9JTik7XG4mIzQzO1x0aWYgKElTX0VSUihwcml2LVx1MDAzZWxpbmtfZ3BpbykpIHtcbiYjNDM7XHRcdGVyciA9IGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXHUwMDNlbGlua19ncGlvKSxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIGdldCBsaW5rIEdQSU9cXG5cJiMzNDspO1xuJiM0MztcdFx0cHJpdi1cdTAwM2VsaW5rX2dwaW8gPSBOVUxMO1xuJiM0MztcdFx0Z290byBlcnJfcmVnaXN0ZXI7XG4mIzQzO1x0fVxuIFxuIFx0bmRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2dzUxMDBfbmV0ZGV2X29wcztcbiBcdG5kZXYtXHUwMDNlZXRodG9vbF9vcHMgPSBcdTAwMjZ3NTEwMF9ldGh0b29sX29wcztcbkBAIC04MDMsOCAmIzQzOzg0OSwyOSBAQCBpbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9odztcbiBcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VsaW5rX2dwaW8pIHtcbiYjNDM7XHRcdGludCBsaW5rX2lycSA9IGdwaW9kX3RvX2lycShwcml2LVx1MDAzZWxpbmtfZ3Bpbyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxpbmtfaXJxIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdGVyciA9IGRldl9lcnJfcHJvYmUoZGV2LCBsaW5rX2lycSxcbiYjNDM7XHRcdFx0XHRcdCAgICBcJiMzNDtObyBjb3JyZXNwb25kaW5nIGlycSBmb3IgbGluayBncGlvXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0Z290byBlcnJfZ3BpbztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgbGlua19pcnEsIE5VTEwsXG4mIzQzO1x0XHRcdFx0XHRcdHc1MTAwX2RldGVjdF9saW5rLFxuJiM0MztcdFx0XHRcdFx0XHRJUlFGX1RSSUdHRVJfUklTSU5HIHxcbiYjNDM7XHRcdFx0XHRcdFx0SVJRRl9UUklHR0VSX0ZBTExJTkcgfFxuJiM0MztcdFx0XHRcdFx0XHRJUlFGX09ORVNIT1QsXG4mIzQzO1x0XHRcdFx0XHRcdFwmIzM0O3c1MTAwLWxpbmtcJiMzNDssIHByaXYtXHUwMDNlbmRldik7XG4mIzQzO1x0XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9ncGlvO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiBcbiYjNDM7ZXJyX2dwaW86XG4mIzQzO1x0ZnJlZV9pcnEocHJpdi1cdTAwM2VpcnEsIG5kZXYpO1xuIGVycl9odzpcbiBcdGRlc3Ryb3lfd29ya3F1ZXVlKHByaXYtXHUwMDNleGZlcl93cSk7XG4gZXJyX3dxOlxuQEAgLTg1Nyw2ICYjNDM7OTI0LDkgQEAgc3RhdGljIGludCB3NTEwMF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0XHR3NTEwMF9od19zdGFydChwcml2KTtcbiBcbiBcdFx0bmV0aWZfZGV2aWNlX2F0dGFjaChuZGV2KTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodzUxMDBfZ2V0X2xpbmsobmRldikpXG4mIzQzO1x0XHRcdG5ldGlmX2NhcnJpZXJfb24obmRldik7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTg6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXaXpuZXQgVzUxMDAvVzUyMDAvVzU1MDAgRXRoZXJuZXQgZHJpdmVyLCB3aGljaCBpcyBhbiBTUEkgZGV2aWNlIGRyaXZlci4gSW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUgb3IgR0NFKSB1c2VkIGJ5IHN5emthbGxlciwgdGhlcmUgaXMgbm8gZ2VuZXJpYyB3YXkgdG8gaW5zdGFudGlhdGUgYXJiaXRyYXJ5IFNQSSBkZXZpY2VzIGZyb20gdXNlcnNwYWNlICh1bmxpa2UgSTJDJiMzOTtzIGBuZXdfZGV2aWNlYCBzeXNmcyBpbnRlcmZhY2Ugb3IgVVNCJiMzOTtzIGR1bW15X2hjZCkuIFNpbmNlIHRoZSBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgYW5kIHRoZSBkZXZpY2UgY2Fubm90IGJlIGR5bmFtaWNhbGx5IGNyZWF0ZWQsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ZjEzODFlNWFkZTNmZjliM2M0MjNjOTAwYmEzYjhlNjVhNTc4NjNiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgNiAxODowNToyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1MTAwLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpem5ldCx3NTEwMC55YW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmNlYmY0MzdhZDNjNGEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpem5ldCx3NTEwMC55YW1sCkBAIC0wLDAgJiM0MzsxLDc0IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpCiYjNDM7JVlBTUwgMS4yCiYjNDM7LS0tCiYjNDM7JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvd2l6bmV0LHc1MTAwLnlhbWwjCiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCiYjNDM7CiYjNDM7dGl0bGU6IFdpem5ldCB3NTEwMC93NTIwMC93NTUwMCBTUEkgRXRoZXJuZXQgQ29udHJvbGxlcgomIzQzOwomIzQzO21haW50YWluZXJzOgomIzQzOyAgLSBBcnRodXIgQ3LDqXBpbiBMZWJsb25kICZsdDthcnRodXJAbWFybW90dHVzLm5ldCZndDsKJiM0MzsKJiM0MztkZXNjcmlwdGlvbjogfAomIzQzOyAgVGhpcyBpcyBhIHN0YW5kYWxvbmUgMTAvMTAwIE1CaXQgRXRoZXJuZXQgY29udHJvbGxlciB3aXRoIFNQSSBpbnRlcmZhY2UuCiYjNDM7CiYjNDM7YWxsT2Y6CiYjNDM7ICAtICRyZWY6IC9zY2hlbWFzL25ldC9ldGhlcm5ldC1jb250cm9sbGVyLnlhbWwjCiYjNDM7ICAtICRyZWY6IC9zY2hlbWFzL3NwaS9zcGktcGVyaXBoZXJhbC1wcm9wcy55YW1sIwomIzQzOwomIzQzO3Byb3BlcnRpZXM6CiYjNDM7ICBjb21wYXRpYmxlOgomIzQzOyAgICBlbnVtOgomIzQzOyAgICAgIC0gd2l6bmV0LHc1MTAwCiYjNDM7ICAgICAgLSB3aXpuZXQsdzUyMDAKJiM0MzsgICAgICAtIHdpem5ldCx3NTUwMAomIzQzOwomIzQzOyAgaW50ZXJydXB0czoKJiM0MzsgICAgbWF4SXRlbXM6IDEKJiM0MzsKJiM0MzsgIHJlZzoKJiM0MzsgICAgbWF4SXRlbXM6IDEKJiM0MzsKJiM0MzsgIHNwaS1tYXgtZnJlcXVlbmN5OgomIzQzOyAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICBBY2NvcmRpbmcgdG8gdGhlIHc1NTAwIGRhdGFzaGVldCwgdGhlIGNoaXAgYWxsb3dzIGEgbWF4aW11bSBvZiA4MCBNSHosCiYjNDM7ICAgICAgaG93ZXZlciwgYm9hcmQgZGVzaWducyBtYXkgbmVlZCB0byBsaW1pdCB0aGlzIHZhbHVlLgomIzQzOyAgICBtYXhpbXVtOiA4MDAwMDAwMAomIzQzOwomIzQzOyAgbGluay1ncGlvczoKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgQW4gb3B0aW9uYWwgR1BJTyBsaW5lIHRoYXQgY2FuIGJlIHdpcmVkIHRvIHRoZSBMSU5LTEVEIHBpbiBvZiB0aGUgdzU1MDAKJiM0MzsgICAgICBhcyBhbiBpbnRlcnJ1cHQgdG8gZGV0ZWN0IGxpbmsgc3RhdHVzIGNoYW5nZXMuCiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7CiYjNDM7cmVxdWlyZWQ6CiYjNDM7ICAtIGNvbXBhdGlibGUKJiM0MzsgIC0gcmVnCiYjNDM7ICAtIGludGVycnVwdHMKJiM0MzsKJiM0Mzt1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ZXhhbXBsZXM6CiYjNDM7ICAtIHwKJiM0MzsgICAgLyogRXhhbXBsZSAoZm9yIFJhc3BiZXJyeSBQaSB3aXRoIHBpbiBjb250cm9sIHN0dWZmIGZvciBHUElPIGlycSkgKi8KJiM0MzsKJiM0MzsgICAgI2luY2x1ZGUgJmx0O2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oJmd0OwomIzQzOyAgICAjaW5jbHVkZSAmbHQ7ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmgmZ3Q7CiYjNDM7CiYjNDM7ICAgIHNwaSB7CiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgZXRoZXJuZXRAMCB7CiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7d2l6bmV0LHc1NTAwJiMzNDs7CiYjNDM7ICAgICAgICAgICAgcmVnID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgIHBpbmN0cmwtbmFtZXMgPSAmIzM0O2RlZmF1bHQmIzM0OzsKJiM0MzsgICAgICAgICAgICBwaW5jdHJsLTAgPSAmbHQ7JmFtcDtldGgxX3BpbnMmZ3Q7OwomIzQzOyAgICAgICAgICAgIGludGVycnVwdC1wYXJlbnQgPSAmbHQ7JmFtcDtncGlvJmd0OzsKJiM0MzsgICAgICAgICAgICBpbnRlcnJ1cHRzID0gJmx0OzI1IElSUV9UWVBFX0VER0VfRkFMTElORyZndDs7CiYjNDM7ICAgICAgICAgICAgbGluay1ncGlvcyA9ICZsdDsmYW1wO2dwaW8gMjQgR1BJT19BQ1RJVkVfTE9XJmd0OzsKJiM0MzsgICAgICAgICAgICBzcGktbWF4LWZyZXF1ZW5jeSA9ICZsdDszMDAwMDAwMCZndDs7CiYjNDM7ICAgICAgICAgICAgbG9jYWwtbWFjLWFkZHJlc3MgPSBbIGEwIGIwIGMwIGQwIGUwIGYwIF07CiYjNDM7ICAgICAgICB9OwomIzQzOyAgICB9OwomIzQzOy4uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTY2NTc5OGM0YmU2Li4wMDAwMDAwMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1eDAwLnR4dAomIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsCkBAIC0xLDUwICYjNDM7MCwwIEBACi0qIFdpem5ldCB3NXgwMAotCi1UaGlzIGlzIGEgc3RhbmRhbG9uZSAxMC8xMDAgTUJpdCBFdGhlcm5ldCBjb250cm9sbGVyIHdpdGggU1BJIGludGVyZmFjZS4KLQotRm9yIGVhY2ggZGV2aWNlIGNvbm5lY3RlZCB0byBhIFNQSSBidXMsIGRlZmluZSBhIGNoaWxkIG5vZGUgd2l0aGluCi10aGUgU1BJIG1hc3RlciBub2RlLgotCi1SZXF1aXJlZCBwcm9wZXJ0aWVzOgotLSBjb21wYXRpYmxlOiBTaG91bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3RyaW5nczoKLQkgICAgICAmIzM0O3dpem5ldCx3NTEwMCYjMzQ7Ci0JICAgICAgJiMzNDt3aXpuZXQsdzUyMDAmIzM0OwotCSAgICAgICYjMzQ7d2l6bmV0LHc1NTAwJiMzNDsKLS0gcmVnOiBTcGVjaWZ5IHRoZSBTUEkgY2hpcCBzZWxlY3QgdGhlIGNoaXAgaXMgd2lyZWQgdG8uCi0tIGludGVycnVwdHM6IFNwZWNpZnkgdGhlIGludGVycnVwdCBpbmRleCB3aXRoaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyIChyZWZlcnJlZAotICAgICAgICAgICAgICB0byBhYm92ZSBpbiBpbnRlcnJ1cHQtcGFyZW50KSBhbmQgaW50ZXJydXB0IHR5cGUuIHc1eDAwIG5hdGl2ZWx5Ci0gICAgICAgICAgICAgIGdlbmVyYXRlcyBmYWxsaW5nIGVkZ2UgaW50ZXJydXB0cywgaG93ZXZlciwgYWRkaXRpb25hbCBib2FyZCBsb2dpYwotICAgICAgICAgICAgICBtaWdodCBpbnZlcnQgdGhlIHNpZ25hbC4KLS0gcGluY3RybC1uYW1lczogTGlzdCBvZiBhc3NpZ25lZCBzdGF0ZSBuYW1lcywgc2VlIHBpbmN0cmwgYmluZGluZyBkb2N1bWVudGF0aW9uLgotLSBwaW5jdHJsLTA6IExpc3Qgb2YgcGhhbmRsZXMgdG8gY29uZmlndXJlIHRoZSBHUElPIHBpbiB1c2VkIGFzIGludGVycnVwdCBsaW5lLAotICAgICAgICAgICAgIHNlZSBhbHNvIGdlbmVyaWMgYW5kIHlvdXIgcGxhdGZvcm0gc3BlY2lmaWMgcGluY3RybCBiaW5kaW5nCi0gICAgICAgICAgICAgZG9jdW1lbnRhdGlvbi4KLQotT3B0aW9uYWwgcHJvcGVydGllczoKLS0gc3BpLW1heC1mcmVxdWVuY3k6IE1heGltdW0gZnJlcXVlbmN5IG9mIHRoZSBTUEkgYnVzIHdoZW4gYWNjZXNzaW5nIHRoZSB3NTUwMC4KLSAgQWNjb3JkaW5nIHRvIHRoZSB3NTUwMCBkYXRhc2hlZXQsIHRoZSBjaGlwIGFsbG93cyBhIG1heGltdW0gb2YgODAgTUh6LCBob3dldmVyLAotICBib2FyZCBkZXNpZ25zIG1heSBuZWVkIHRvIGxpbWl0IHRoaXMgdmFsdWUuCi0tIGxvY2FsLW1hYy1hZGRyZXNzOiBTZWUgZXRoZXJuZXQudHh0IGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KLQotCi1FeGFtcGxlIChmb3IgUmFzcGJlcnJ5IFBpIHdpdGggcGluIGNvbnRyb2wgc3R1ZmYgZm9yIEdQSU8gaXJxKToKLQotJmFtcDtzcGkgewotCWV0aGVybmV0QDA6IHc1NTAwQDAgewotCQljb21wYXRpYmxlID0gJiMzNDt3aXpuZXQsdzU1MDAmIzM0OzsKLQkJcmVnID0gJmx0OzAmZ3Q7OwotCQlwaW5jdHJsLW5hbWVzID0gJiMzNDtkZWZhdWx0JiMzNDs7Ci0JCXBpbmN0cmwtMCA9ICZsdDsmYW1wO2V0aDFfcGlucyZndDs7Ci0JCWludGVycnVwdC1wYXJlbnQgPSAmbHQ7JmFtcDtncGlvJmd0OzsKLQkJaW50ZXJydXB0cyA9ICZsdDsyNSBJUlFfVFlQRV9FREdFX0ZBTExJTkcmZ3Q7OwotCQlzcGktbWF4LWZyZXF1ZW5jeSA9ICZsdDszMDAwMDAwMCZndDs7Ci0JfTsKLX07Ci0KLSZhbXA7Z3BpbyB7Ci0JZXRoMV9waW5zOiBldGgxX3BpbnMgewotCQlicmNtLHBpbnMgPSAmbHQ7MjUmZ3Q7OwotCQlicmNtLGZ1bmN0aW9uID0gJmx0OzAmZ3Q7OyAvKiBpbiAqLwotCQlicmNtLHB1bGwgPSAmbHQ7MCZndDs7IC8qIG5vbmUgKi8KLQl9OwotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMKaW5kZXggNTNkOGRjNjQyZmJkNi4uNjcwN2E2ZjI3Mzk1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMKQEAgLTIyLDYgJiM0MzsyMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaW9wb3J0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW50ZXJydXB0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXJxLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2dwaW8vY29uc3VtZXIuaCZndDsKIAogI2luY2x1ZGUgJiMzNDt3NTEwMC5oJiMzNDsKIApAQCAtMTI0LDYgJiM0MzsxMjUsOCBAQCBNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKICAqLwogI2RlZmluZSBXNTUwMF9TSU1SCQkweDAwMTggLyogU29ja2V0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCiAjZGVmaW5lIFc1NTAwX1JUUgkJMHgwMDE5IC8qIFJldHJ5IFRpbWUtdmFsdWUgUmVnaXN0ZXIgKi8KJiM0MzsjZGVmaW5lIFc1NTAwX1BIWUNGR1IJCTB4MDAyZSAvKiAgUEhZIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KJiM0MzsjZGVmaW5lICAgUEhZQ0ZHUl9MTksJCSAgMHgwMSAvKiBsaW5rIHN0YXR1cyAqLwogCiAjZGVmaW5lIFc1NTAwX1MwX1JFR1MJCTB4MTAwMDAKIApAQCAtMTU0LDYgJiM0MzsxNTcsNyBAQCBzdHJ1Y3QgdzUxMDBfcHJpdiB7CiAJdTE2IHMwX3J4X2J1Zl9zaXplOwogCiAJaW50IGlycTsKJiM0MzsJc3RydWN0IGdwaW9fZGVzYyAqbGlua19ncGlvOwogCiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CkBAIC00MTQsNiAmIzQzOzQxOCwxNiBAQCBzdGF0aWMgdm9pZCB3NTEwMF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAkJc2l6ZW9mKGluZm8tJmd0O2J1c19pbmZvKSk7CiB9CiAKJiM0MztzdGF0aWMgdTMyIHc1MTAwX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHc1MTAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O29wcy0mZ3Q7Y2hpcF9pZCA9PSBXNTUwMCkKJiM0MzsJCXJldHVybiB3NTEwMF9yZWFkKHByaXYsIFc1NTAwX1BIWUNGR1IpICZhbXA7IFBIWUNGR1JfTE5LOwomIzQzOwomIzQzOwlyZXR1cm4gMTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdTMyIHc1MTAwX2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKIAlzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwpAQCAtNjE2LDYgJiM0Mzs2MzAsMjQgQEAgc3RhdGljIGlycXJldHVybl90IHc1MTAwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpuZGV2X2luc3RhbmNlKQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAomIzQzO3N0YXRpYyBpcnFyZXR1cm5fdCB3NTEwMF9kZXRlY3RfbGluayhpbnQgaXJxLCB2b2lkICpuZGV2X2luc3RhbmNlKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBuZGV2X2luc3RhbmNlOwomIzQzOwlzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkgewomIzQzOwkJaWYgKHc1MTAwX2dldF9saW5rKG5kZXYpKSB7CiYjNDM7CQkJbmV0aWZfaW5mbyhwcml2LCBsaW5rLCBuZGV2LCAmIzM0O2xpbmsgaXMgdXBcbiYjMzQ7KTsKJiM0MzsJCQluZXRpZl9jYXJyaWVyX29uKG5kZXYpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQluZXRpZl9pbmZvKHByaXYsIGxpbmssIG5kZXYsICYjMzQ7bGluayBpcyBkb3duXG4mIzM0Oyk7CiYjNDM7CQkJbmV0aWZfY2Fycmllcl9vZmYobmRldik7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIElSUV9IQU5ETEVEOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHc1MTAwX3NldHJ4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3NTEwMF9wcml2LApAQCAtNjU5LDYgJiM0Mzs2OTEsMTIgQEAgc3RhdGljIGludCB3NTEwMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCXc1MTAwX2h3X3N0YXJ0KHByaXYpOwogCW5hcGlfZW5hYmxlKCZhbXA7cHJpdi0mZ3Q7bmFwaSk7CiAJbmV0aWZfc3RhcnRfcXVldWUobmRldik7CiYjNDM7CiYjNDM7CWlmICh3NTEwMF9nZXRfbGluayhuZGV2KSkKJiM0MzsJCW5ldGlmX2NhcnJpZXJfb24obmRldik7CiYjNDM7CWVsc2UKJiM0MzsJCW5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpOwomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC02NzgsNiAmIzQzOzcxNiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdzUxMDBfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvCQk9IHc1MTAwX2dldF9kcnZpbmZvLAogCS5nZXRfbXNnbGV2ZWwJCT0gdzUxMDBfZ2V0X21zZ2xldmVsLAogCS5zZXRfbXNnbGV2ZWwJCT0gdzUxMDBfc2V0X21zZ2xldmVsLAomIzQzOwkuZ2V0X2xpbmsJCT0gdzUxMDBfZ2V0X2xpbmssCiAJLmdldF9yZWdzX2xlbgkJPSB3NTEwMF9nZXRfcmVnc19sZW4sCiAJLmdldF9yZWdzCQk9IHc1MTAwX2dldF9yZWdzLAogfTsKQEAgLTc1MSw2ICYjNDM7NzkwLDEzIEBAIGludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcywKIAlwcml2LSZndDtuZGV2ID0gbmRldjsKIAlwcml2LSZndDtvcHMgPSBvcHM7CiAJcHJpdi0mZ3Q7aXJxID0gaXJxOwomIzQzOwlwcml2LSZndDtsaW5rX2dwaW8gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChkZXYsICYjMzQ7bGluayYjMzQ7LCBHUElPRF9JTik7CiYjNDM7CWlmIChJU19FUlIocHJpdi0mZ3Q7bGlua19ncGlvKSkgewomIzQzOwkJZXJyID0gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi0mZ3Q7bGlua19ncGlvKSwKJiM0MzsJCQkJICAgICYjMzQ7ZmFpbGVkIHRvIGdldCBsaW5rIEdQSU9cbiYjMzQ7KTsKJiM0MzsJCXByaXYtJmd0O2xpbmtfZ3BpbyA9IE5VTEw7CiYjNDM7CQlnb3RvIGVycl9yZWdpc3RlcjsKJiM0MzsJfQogCiAJbmRldi0mZ3Q7bmV0ZGV2X29wcyA9ICZhbXA7dzUxMDBfbmV0ZGV2X29wczsKIAluZGV2LSZndDtldGh0b29sX29wcyA9ICZhbXA7dzUxMDBfZXRodG9vbF9vcHM7CkBAIC04MDMsOCAmIzQzOzg0OSwyOSBAQCBpbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsCiAJaWYgKGVycikKIAkJZ290byBlcnJfaHc7CiAKJiM0MzsJaWYgKHByaXYtJmd0O2xpbmtfZ3BpbykgewomIzQzOwkJaW50IGxpbmtfaXJxID0gZ3Bpb2RfdG9faXJxKHByaXYtJmd0O2xpbmtfZ3Bpbyk7CiYjNDM7CiYjNDM7CQlpZiAobGlua19pcnEgJmx0OyAwKSB7CiYjNDM7CQkJZXJyID0gZGV2X2Vycl9wcm9iZShkZXYsIGxpbmtfaXJxLAomIzQzOwkJCQkJICAgICYjMzQ7Tm8gY29ycmVzcG9uZGluZyBpcnEgZm9yIGxpbmsgZ3Bpb1xuJiMzNDspOwomIzQzOwkJCWdvdG8gZXJyX2dwaW87CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQllcnIgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgbGlua19pcnEsIE5VTEwsCiYjNDM7CQkJCQkJdzUxMDBfZGV0ZWN0X2xpbmssCiYjNDM7CQkJCQkJSVJRRl9UUklHR0VSX1JJU0lORyB8CiYjNDM7CQkJCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcgfAomIzQzOwkJCQkJCUlSUUZfT05FU0hPVCwKJiM0MzsJCQkJCQkmIzM0O3c1MTAwLWxpbmsmIzM0OywgcHJpdi0mZ3Q7bmRldik7CiYjNDM7CQlpZiAoZXJyICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9ncGlvOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIDA7CiAKJiM0MztlcnJfZ3BpbzoKJiM0MzsJZnJlZV9pcnEocHJpdi0mZ3Q7aXJxLCBuZGV2KTsKIGVycl9odzoKIAlkZXN0cm95X3dvcmtxdWV1ZShwcml2LSZndDt4ZmVyX3dxKTsKIGVycl93cToKQEAgLTg1Nyw2ICYjNDM7OTI0LDkgQEAgc3RhdGljIGludCB3NTEwMF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogCQl3NTEwMF9od19zdGFydChwcml2KTsKIAogCQluZXRpZl9kZXZpY2VfYXR0YWNoKG5kZXYpOwomIzQzOwomIzQzOwkJaWYgKHc1MTAwX2dldF9saW5rKG5kZXYpKQomIzQzOwkJCW5ldGlmX2NhcnJpZXJfb24obmRldik7CiAJfQogCXJldHVybiAwOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mjc3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgV2l6bmV0IFc1NTAwIExpbmsgU3RhdHVzIFBhdGNoKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgYSBwYXRjaCBmb3IgdGhlIFdpem5ldCBXNTEwMC9XNTIwMC9XNTUwMCBTUEkgRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIuIEl0JiMzOTtzIGFkZGluZyBsaW5rIHN0YXR1cyBkZXRlY3Rpb24sIHdoaWNoIGlzIGdvb2QuIFRoZXkmIzM5O3ZlIGltcGxlbWVudGVkIGEgYGxpbmstZ3Bpb3NgIHByb3BlcnR5IGluIHRoZSBkZXZpY2UgdHJlZSBiaW5kaW5nLCByZWFkIHRoZSBsaW5rIHN0YXR1cyBmcm9tIHRoZSBQSFlDRkdSIHJlZ2lzdGVyIGZvciB0aGUgVzU1MDAsIGFuZCBhcmUgdXNpbmcgYSB0aHJlYWRlZCBJUlEgZm9yIGxpbmsgY2hhbmdlcy4gVGhleSYjMzk7dmUgYWxzbyBpbXBsZW1lbnRlZCBgdzUxMDBfZ2V0X2xpbmtgIGFuZCBpbnRlZ3JhdGVkIGl0IGludG8gYGV0aHRvb2xfb3BzYCwgYW5kIHVwZGF0ZWQgdGhlIGBvcGVuYCBhbmQgYHJlc3VtZWAgZnVuY3Rpb25zIHRvIGNoZWNrIHRoZSBsaW5rLiBTdGFuZGFyZCBzdHVmZiwgc28gZmFyLgoKQnV0IHdhaXQsIHRoZSByZWFsIHF1ZXN0aW9uIGhlcmUgaXM6ICpjYW4gd2UgYWN0dWFsbHkgdGVzdCB0aGlzIGVmZmVjdGl2ZWx5IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/KiBUaGlzIGlzIGFuIFNQSSBFdGhlcm5ldCBjb250cm9sbGVyLCBhbmQgU1BJIGlzIG5vdG9yaW91c2x5IHRyaWNreSBmb3IgZW11bGF0aW9uLiBDYW4gUUVNVSBldmVuICpzZWUqIHRoaXM/IFR5cGljYWxseSwgU1BJIGRldmljZXMgYXJlbiYjMzk7dCBlYXNpbHkgZW11bGF0ZWQgb3IgZnV6emVkIHVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIFFFTVUgZGV2aWNlIG1vZGVsIGZvciB0aGVtLCBvciB3ZSBjYW4gc29tZWhvdyBmdXp6IHRoZSBTUEkgc3Vic3lzdGVtIGl0c2VsZi4KCkkga25vdyBTeXprYWxsZXIgY2FuIHNvbWV0aW1lcyBmdXp6IFNQSSBkZXZpY2VzIHVzaW5nIGB2aGNpYCBvciBzb21ldGhpbmcgc2ltaWxhciwgaWYgaXQmIzM5O3MgYXZhaWxhYmxlLCBidXQgZ2VuZXJhbGx5LCBTUEkgZGV2aWNlcyBhcmUgcHJldHR5IGhhcmR3YXJlLXNwZWNpZmljLiBJIGtlZXAgdGhpbmtpbmcsIGRvZXNuJiMzOTt0IFN5emthbGxlciBoYXZlICpzb21lKiBTUEkgc3VwcG9ydD8gTm8sIG5vdCByZWFsbHkuIEl0IGRvZXNuJiMzOTt0IGhhdmUgYSBnZW5lcmljIFNQSSBmdXp6ZXIgdGhhdCBjYW4ganVzdCAqY3JlYXRlKiBhcmJpdHJhcnkgU1BJIGRldmljZXMsIHVubGVzcyBpdCYjMzk7cyB0aHJvdWdoIHNwaWRldiwgYnV0IHRoaXMgaXMgYSBuZXQgZGV2aWNlIGRyaXZlciwgd2hpY2ggdXN1YWxseSByZXF1aXJlcyBhIHNwZWNpZmljIFNQSSBkZXZpY2UgaWRlbnRpZmllZCB2aWEgYSBkZXZpY2UgdHJlZSBvciBib2FyZCBjb2RlLgoKU28sIHRoZSBkcml2ZXIgKmhhcyogdG8gYmUgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIHJpZ2h0PyBJIG1lYW4sIGhvdyBlbHNlIGFyZSB3ZSBnb2luZyB0byB0ZXN0IHRoaXM/IEl0IG5lZWRzIGEgZGV2aWNlIHRyZWUgbm9kZSB3aXRoIGBjb21wYXRpYmxlID0gJiMzNDt3aXpuZXQsdzU1MDAmIzM0O2AgYW5kIHNvIG9uLCBidXQgaXQmIzM5O3MgYW4gU1BJIGRldmljZS4gVW5sZXNzIHRoZXJlJiMzOTtzIGEgd2F5IHRvIGluc3RhbnRpYXRlIFNQSSBkZXZpY2VzIChwZXJoYXBzIGRldmljZSB0cmVlIG92ZXJsYXlzIG9yIHNvbWV0aGluZyB0aHJvdWdoIHN5c2ZzKSwgd2UmIzM5O3JlIHByb2JhYmx5IGRlYWQgaW4gdGhlIHdhdGVyLiBEb2VzIFN5emthbGxlciB1c2Ugc3lzZnMgb3IgbmV0bGluayB0byBpbnN0YW50aWF0ZSBkZXZpY2VzPyBObywgdGhhdCYjMzk7cyBub3QgaG93IFNQSSBkZXZpY2VzIGFyZSB0eXBpY2FsbHkgaGFuZGxlZC4gVGhleeKAmXJlIHVzdWFsbHkgaW5zdGFudGlhdGVkIGJ5IERUIG9yIGJvYXJkIGZpbGVzLgoKSGFuZyBvbuKApm1heWJlIFN5emthbGxlciBjb3VsZCB1c2UgYHN5el9nZW5ldGxpbmtgIG9yIHNvbWV0aGluZywgYnV0IGZvciBTUEksIHRoZXJlJiMzOTtzIG5vIGdlbmVyaWMgd2F5IHRvIGFkZCBkZXZpY2VzIGZyb20gdXNlcnNwYWNlIHVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIGRyaXZlciB0byBkbyBzby4KCkhvbGQgb24sIHdoYXQgaWYgdGhpcyBkcml2ZXIgaXMgYSAqcGxhdGZvcm0qIGRyaXZlcj8gTm8sIGl0JiMzOTtzIGFuIFNQSSBkcml2ZXIuIE9rYXksIGxldCYjMzk7cyBsb29rIGF0IGBkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmNgIGFuZCBvdGhlciBmaWxlcyBsaWtlIHRoYXQuIFRoZSBwYXRjaCBtb2RpZmllcyBgdzUxMDAuY2AsIHdoaWNoIGlzIHRoZSBjb3JlLCBidXQgdGhlIHByb2JlIGlzIGNhbGxlZCBmcm9tIGB3NTEwMF9zcGkuY2Agb3IgYHc1MTAwX21taW8uY2AsIHJpZ2h0PyBJIHNob3VsZCByZWFsbHkganVzdCBjaGVjayB0aGUga2VybmVsIHNvdXJjZSBmb3IgYHc1MTAwLmNgIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgZXZlbiBiZWluZyBwcm9iZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dzUxMDBfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYz00MjE9c3RhdGljIGludCB3NTEwMF9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmMtNDUyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLXNwaS5jOjQ1MzpcdHJldHVybiB3NTEwMF9wcm9iZShcdTAwMjZzcGktXHUwMDNlZGV2LCBvcHMsIHByaXZfc2l6ZSwgbWFjLCBzcGktXHUwMDNlaXJxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYy00NTQtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jPTczOT1FWFBPUlRfU1lNQk9MX0dQTCh3NTEwMF9vcHNfcHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy03NDAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYzo3NDE6aW50IHc1MTAwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IHc1MTAwX29wcyAqb3BzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtNzQyLVx0XHRpbnQgc2l6ZW9mX29wc19wcml2LCBjb25zdCB2b2lkICptYWNfYWRkciwgaW50IGlycSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy04ODItfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6ODgzOkVYUE9SVF9TWU1CT0xfR1BMKHc1MTAwX3Byb2JlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTg4NC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuaD0yOT12b2lkICp3NTEwMF9vcHNfcHJpdihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuaC0zMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5oOjMxOmludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5oLTMyLVx0XHRpbnQgc2l6ZW9mX29wc19wcml2LCBjb25zdCB2b2lkICptYWNfYWRkciwgaW50IGlycSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEyMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlOgoKKipEZWJ1Z2dpbmcgTmV0d29yayBJbnRlcmZhY2UgSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgdGhpcyBgdzUxMDAtc3BpLmNgIGZpbGUgYW5kLCBsaWtlbHksIG90aGVyIHJlbGF0ZWQgb25lcyBpbnZvbHZlZCBpbiBpbml0aWFsaXppbmcgYSBuZXR3b3JrIGludGVyZmFjZS4gVGhlIHF1ZXN0aW9uIGluIG15IG1pbmQgaXMsIHdoYXQgc3BlY2lmaWNhbGx5IHRyaWdnZXJzIHRoZSBwcm9iaW5nIG9mIHRoaXMgVzUxMDAgZGV2aWNlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gVGhlcmVmb3JlLCBJIG5lZWQgdG8ga25vdyAqd2hhdCogY2FsbHMgdGhlIGB3NTEwMF9wcm9iZWAgZnVuY3Rpb24uIEkgd2lsbCBjaGVjayB0aGUgY29kZWJhc2UgdG8gaWRlbnRpZnkgYWxsIG9mIHRoZSBvdGhlciBjYWxsIHNpdGVzIGZvciB0aGF0IGZ1bmN0aW9uLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnRzIG9mIHRoZSBkZXZpY2UgZHJpdmVyIGluIHRoZSBzeXN0ZW0gYW5kIGhlbHAgbWUgdHJhY2UgdGhyb3VnaCB0aGUgZmxvdyBvZiBleGVjdXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlc2UgaW50ZXJhY3Rpb25zIGlzIGtleSB0byBwaW5wb2ludGluZyBhbnkgcG90ZW50aWFsIHByb2JsZW1zIGluIHRoZSBicmluZy11cCBwcm9jZXNzIG9yIGxhdGVyIG9wZXJhdGlvbi4gVGhpcyBpcyBiYXNpYywgYnV0IG5lY2Vzc2FyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxODowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3NTEwMF9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLXNwaS5jPTQyMT1zdGF0aWMgaW50IHc1MTAwX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYy00NTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmM6NDUzOlx0cmV0dXJuIHc1MTAwX3Byb2JlKFx1MDAyNnNwaS1cdTAwM2VkZXYsIG9wcywgcHJpdl9zaXplLCBtYWMsIHNwaS1cdTAwM2VpcnEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLXNwaS5jLTQ1NC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM9NzM5PUVYUE9SVF9TWU1CT0xfR1BMKHc1MTAwX29wc19wcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTc0MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jOjc0MTppbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy03NDItXHRcdGludCBzaXplb2Zfb3BzX3ByaXYsIGNvbnN0IHZvaWQgKm1hY19hZGRyLCBpbnQgaXJxKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTg4Mi19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYzo4ODM6RVhQT1JUX1NZTUJPTF9HUEwodzUxMDBfcHJvYmUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtODg0LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5oPTI5PXZvaWQgKnc1MTAwX29wc19wcml2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5oLTMwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmg6MzE6aW50IHc1MTAwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IHc1MTAwX29wcyAqb3BzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmgtMzItXHRcdGludCBzaXplb2Zfb3BzX3ByaXYsIGNvbnN0IHZvaWQgKm1hY19hZGRyLCBpbnQgaXJxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTMwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIFdJWm5ldCBEcml2ZXIgSW50ZWdyYXRpb24qKgoKSG1tLCB3YWl0IGEgc2Vjb25kLi4uIGJlZm9yZSBJIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgbmV0d29ya2luZyBpc3N1ZSwgSSBzaG91bGQgcXVpY2tseSBjaGVjayBzb21ldGhpbmcgZnVuZGFtZW50YWwuIElzIHRoZXJlIGEgcGxhdGZvcm0gZHJpdmVyIGludm9sdmVkIGhlcmUsIG9yIGFtIEkgbWlzc2luZyBzb21ldGhpbmcgdXBzdHJlYW0/IEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgZm91bmRhdGlvbiBvZiBob3cgdGhpcyBXSVpuZXQgZGV2aWNlIGlzIGhhbmRsZWQgaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyZSBiZWZvcmUgZ29pbmcgYW55IGZ1cnRoZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGVyZSB0aGUgV0labmV0IGRyaXZlciBpcyBsb2NhdGVkLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgc3RhbmRhcmQgcGF0aHMuLi4gaXMgaXQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTMwMC5jYD8gT3IgbWF5YmUgaXQmIzM5O3MgdGhlIG9sZGVyLCBhbmQgcHJvYmFibHkgc3RpbGwgcmVsZXZhbnQsIGB3NTEwMC5jYD8gVGhhdCYjMzk7bGwgYmUgbXkgc3RhcnRpbmcgcG9pbnQgdG8gc2VlIGhvdyB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgYW5kIG1hbmFnZWQuIEkgbmVlZCB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlIGZpcnN0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE4OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDt3NTEwMC1zcGkuYyYjMzQ7LAogICAgJiMzNDt3NTEwMC5jJiMzNDssCiAgICAmIzM0O3c1MTAwLmgmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE4OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNTEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBQbGFuIG9mIEF0dGFjayoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHc1MTAwLXNwaS5jYCwgd2hpY2ggdGVsbHMgbWUgdGhpcyBpcyAqZGVmaW5pdGVseSogYW4gU1BJIGRldmljZS4gVGhhdCYjMzk7cyBnb29kIGluZm9ybWF0aW9uLCBidXQgaXQgcmFpc2VzIHNvbWUgcXVlc3Rpb25zIGFib3V0IGhvdyB3ZSBpbnRlZ3JhdGUgaXQgaW50byBTeXprYWxsZXIuIENhbiB3ZSBldmVuIGluc3RhbnRpYXRlIGFuZCBmdXp6IFNQSSBkZXZpY2VzIGRpcmVjdGx5IHdpdGhpbiBTeXprYWxsZXImIzM5O3MgZnJhbWV3b3JrPwoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgU3l6a2FsbGVyIHByb2JhYmx5IGRvZXNuJiMzOTt0IGhhdmUgYSBnZW5lcmljIG1lY2hhbmlzbSB0byBjcmVhdGUgYXJiaXRyYXJ5IFNQSSBkZXZpY2VzLiBVbmxlc3MgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBwc2V1ZG8tZGV2aWNlIGRlZmluZWQgZm9yIGl0LCBvciB3ZSByZWx5IG9uIGBzcGlkZXZgLCB3aGljaCBvbmx5IG9mZmVycyB1c2Vyc3BhY2UgYWNjZXNzIOKAkyBub3QgdGhlIGtlcm5lbCBkcml2ZXIgaW5zdGFudGlhdGlvbiB0aGF0IHdlIG5lZWQgZm9yIHByb3BlciBmdXp6aW5nLiBUaGF0JiMzOTtzIGEgbm9uLXN0YXJ0ZXIuCgpXYWl0IGEgbWludXRlLi4uIGNvdWxkIHdlIGxldmVyYWdlIHN5c2ZzPyBUaGF0JiMzOTtzIGEgbXVjaCBtb3JlIGVsZWdhbnQgc29sdXRpb24uIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIFNQSSBzdWJzeXN0ZW0gYWxsb3dzIHVzIHRvIGluc3RhbnRpYXRlIGRldmljZXMgdGhyb3VnaCBzeXNmcywgaW4gYSBzaW1pbGFyIHdheSB0byBob3cgSTJDIHVzZXMgYG5ld19kZXZpY2VgLiBJZiB0aGF04oCZcyBwb3NzaWJsZSwgaXQgd291bGQgcHJvdmlkZSBhIGNsZWFuIHdheSB0byBpbnRlZ3JhdGUgdGhpcyBpbnRvIHRoZSBmdXp6aW5nIGhhcm5lc3MuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgU1BJIHN1YnN5c3RlbSBmb3Igc29tZXRoaW5nIGxpa2UgYW4gYG5ld19kZXZpY2VgIGVxdWl2YWxlbnQgdG8gc2VlIGlmIGl0IGFsbG93cyB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxODowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXdfZGV2aWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zcGkvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvc3BpL3NwaS1hbHRlcmEtZGZsLmM9MTI0PXN0YXRpYyBpbnQgZGZsX3NwaV9hbHRlcmFfcHJvYmUoc3RydWN0IGRmbF9kZXZpY2UgKmRmbF9kZXYpXG4tLVxuZHJpdmVycy9zcGkvc3BpLWFsdGVyYS1kZmwuYy0xNzQtXG5kcml2ZXJzL3NwaS9zcGktYWx0ZXJhLWRmbC5jOjE3NTpcdGlmICghc3BpX25ld19kZXZpY2UoaG9zdCwgXHUwMDI2Ym9hcmRfaW5mbykpIHtcbmRyaXZlcnMvc3BpL3NwaS1hbHRlcmEtZGZsLmMtMTc2LVx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7JXMgZmFpbGVkIHRvIGNyZWF0ZSBTUEkgZGV2aWNlOiAlc1xcblwmIzM0Oyxcbi0tXG5kcml2ZXJzL3NwaS9zcGktYWx0ZXJhLXBsYXRmb3JtLmM9MzU9c3RhdGljIGludCBhbHRlcmFfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9zcGkvc3BpLWFsdGVyYS1wbGF0Zm9ybS5jLTExOS1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGRhdGEtXHUwMDNlbnVtX2RldmljZXM7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL3NwaS9zcGktYWx0ZXJhLXBsYXRmb3JtLmM6MTIwOlx0XHRcdGlmICghc3BpX25ld19kZXZpY2UoaG9zdCwgcGRhdGEtXHUwMDNlZGV2aWNlcyAmIzQzOyBpKSlcbmRyaXZlcnMvc3BpL3NwaS1hbHRlcmEtcGxhdGZvcm0uYy0xMjEtXHRcdFx0XHRkZXZfd2FybihcdTAwMjZwZGV2LVx1MDAzZWRldixcbi0tXG5kcml2ZXJzL3NwaS9zcGktYnV0dGVyZmx5LmM9MTc2PXN0YXRpYyB2b2lkIGJ1dHRlcmZseV9hdHRhY2goc3RydWN0IHBhcnBvcnQgKnApXG4tLVxuZHJpdmVycy9zcGkvc3BpLWJ1dHRlcmZseS5jLTI2NS1cdHBwLVx1MDAzZWluZm9bMF0uY29udHJvbGxlcl9kYXRhID0gcHA7XG5kcml2ZXJzL3NwaS9zcGktYnV0dGVyZmx5LmM6MjY2Olx0cHAtXHUwMDNlZGF0YWZsYXNoID0gc3BpX25ld19kZXZpY2UocHAtXHUwMDNlYml0YmFuZy5jdGxyLCBcdTAwMjZwcC1cdTAwM2VpbmZvWzBdKTtcbmRyaXZlcnMvc3BpL3NwaS1idXR0ZXJmbHkuYy0yNjctXHRpZiAocHAtXHUwMDNlZGF0YWZsYXNoKVxuLS1cbmRyaXZlcnMvc3BpL3NwaS1jaDM0MS5jPTE0MT1zdGF0aWMgaW50IGNoMzQxX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuLS1cbmRyaXZlcnMvc3BpL3NwaS1jaDM0MS5jLTIwNi1cbmRyaXZlcnMvc3BpL3NwaS1jaDM0MS5jOjIwNzpcdGNoMzQxLVx1MDAzZXNwaWRldiA9IHNwaV9uZXdfZGV2aWNlKGN0cmwsIFx1MDAyNmNoaXApO1xuZHJpdmVycy9zcGkvc3BpLWNoMzQxLmMtMjA4LVx0aWYgKCFjaDM0MS1cdTAwM2VzcGlkZXYpIHtcbi0tXG5kcml2ZXJzL3NwaS9zcGktY3M0Mmw0My5jPTMxMj1zdGF0aWMgaW50IGNzNDJsNDNfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9zcGkvc3BpLWNzNDJsNDMuYy00MjYtXG5kcml2ZXJzL3NwaS9zcGktY3M0Mmw0My5jOjQyNzpcdFx0aWYgKCFzcGlfbmV3X2RldmljZShwcml2LVx1MDAzZWN0bHIsIGFtcGxfaW5mbykpXG5kcml2ZXJzL3NwaS9zcGktY3M0Mmw0My5jLTQyOC1cdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwcml2LVx1MDAzZWRldiwgLUVOT0RFVixcbi0tXG5kcml2ZXJzL3NwaS9zcGktY3M0Mmw0My5jLTQzMC1cbmRyaXZlcnMvc3BpL3NwaS1jczQybDQzLmM6NDMxOlx0XHRpZiAoIXNwaV9uZXdfZGV2aWNlKHByaXYtXHUwMDNlY3RsciwgYW1wcl9pbmZvKSlcbmRyaXZlcnMvc3BpL3NwaS1jczQybDQzLmMtNDMyLVx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHByaXYtXHUwMDNlZGV2LCAtRU5PREVWLFxuLS1cbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jPTEzNzU9c3RhdGljIGludCBpbnRlbF9zcGlfcG9wdWxhdGVfY2hpcChzdHJ1Y3QgaW50ZWxfc3BpICppc3BpKVxuLS1cbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jLTE0MDEtXG5kcml2ZXJzL3NwaS9zcGktaW50ZWwuYzoxNDAyOlx0aWYgKCFzcGlfbmV3X2RldmljZShpc3BpLVx1MDAzZWhvc3QsIFx1MDAyNmNoaXApKVxuZHJpdmVycy9zcGkvc3BpLWludGVsLmMtMTQwMy1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuZHJpdmVycy9zcGkvc3BpLWludGVsLmMtMTQzMC1cbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jOjE0MzE6XHRpZiAoIXNwaV9uZXdfZGV2aWNlKGlzcGktXHUwMDNlaG9zdCwgXHUwMDI2Y2hpcCkpXG5kcml2ZXJzL3NwaS9zcGktaW50ZWwuYy0xNDMyLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5kcml2ZXJzL3NwaS9zcGkta3NwaTIuYz0zMTA9c3RhdGljIGludCBrc3BpMl9yZWdpc3Rlcl9kZXZpY2VzKHN0cnVjdCBrc3BpMiAqa3NwaSlcbi0tXG5kcml2ZXJzL3NwaS9zcGkta3NwaTIuYy0zMTYtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrc3BpLVx1MDAzZWF1eGRldi1cdTAwM2VpbmZvX3NpemU7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL3NwaS9zcGkta3NwaTIuYzozMTc6XHRcdHN0cnVjdCBzcGlfZGV2aWNlICpkZXZpY2UgPSBzcGlfbmV3X2RldmljZShrc3BpLVx1MDAzZWhvc3QsIFx1MDAyNmluZm9baV0pO1xuZHJpdmVycy9zcGkvc3BpLWtzcGkyLmMtMzE4LVxuLS1cbmRyaXZlcnMvc3BpL3NwaS1sbTcwbGxwLmM9MTg4PXN0YXRpYyB2b2lkIHNwaV9sbTcwbGxwX2F0dGFjaChzdHJ1Y3QgcGFycG9ydCAqcClcbi0tXG5kcml2ZXJzL3NwaS9zcGktbG03MGxscC5jLTI2Ni1cdHBwLVx1MDAzZWluZm8uY29udHJvbGxlcl9kYXRhID0gcHA7XG5kcml2ZXJzL3NwaS9zcGktbG03MGxscC5jOjI2NzpcdHBwLVx1MDAzZXNwaWRldl9sbTcwID0gc3BpX25ld19kZXZpY2UocHAtXHUwMDNlYml0YmFuZy5jdGxyLCBcdTAwMjZwcC1cdTAwM2VpbmZvKTtcbmRyaXZlcnMvc3BpL3NwaS1sbTcwbGxwLmMtMjY4LVx0aWYgKHBwLVx1MDAzZXNwaWRldl9sbTcwKVxuLS1cbmRyaXZlcnMvc3BpL3NwaS1sbTcwbGxwLmMtMjcxLVx0ZWxzZSB7XG5kcml2ZXJzL3NwaS9zcGktbG03MGxscC5jOjI3MjpcdFx0ZGV2X3dhcm4oXHUwMDI2cGQtXHUwMDNlZGV2LCBcJiMzNDtzcGlfbmV3X2RldmljZSBmYWlsZWRcXG5cJiMzNDspO1xuZHJpdmVycy9zcGkvc3BpLWxtNzBsbHAuYy0yNzMtXHRcdHN0YXR1cyA9IC1FTk9ERVY7XG4tLVxuZHJpdmVycy9zcGkvc3BpLXhpbGlueC5jPTQwMj1zdGF0aWMgaW50IHhpbGlueF9zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL3NwaS9zcGkteGlsaW54LmMtNTA5LVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZGF0YS1cdTAwM2VudW1fZGV2aWNlczsgaSYjNDM7JiM0MzspXG5kcml2ZXJzL3NwaS9zcGkteGlsaW54LmM6NTEwOlx0XHRcdHNwaV9uZXdfZGV2aWNlKGhvc3QsIHBkYXRhLVx1MDAzZWRldmljZXMgJiM0MzsgaSk7XG5kcml2ZXJzL3NwaS9zcGkteGlsaW54LmMtNTExLVx0fVxuLS1cbmRyaXZlcnMvc3BpL3NwaS5jPTc5MT1FWFBPUlRfU1lNQk9MX0dQTChzcGlfYWRkX2RldmljZSk7XG4tLVxuZHJpdmVycy9zcGkvc3BpLmMtNzkzLS8qKlxuZHJpdmVycy9zcGkvc3BpLmM6Nzk0OiAqIHNwaV9uZXdfZGV2aWNlIC0gaW5zdGFudGlhdGUgb25lIG5ldyBTUEkgZGV2aWNlXG5kcml2ZXJzL3NwaS9zcGkuYy03OTUtICogQGN0bHI6IENvbnRyb2xsZXIgdG8gd2hpY2ggZGV2aWNlIGlzIGNvbm5lY3RlZFxuLS1cbmRyaXZlcnMvc3BpL3NwaS5jLTgwNi0gKi9cbmRyaXZlcnMvc3BpL3NwaS5jOjgwNzpzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpX25ld19kZXZpY2Uoc3RydWN0IHNwaV9jb250cm9sbGVyICpjdGxyLFxuZHJpdmVycy9zcGkvc3BpLmMtODA4LVx0XHRcdFx0ICBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKmNoaXApXG4tLVxuZHJpdmVycy9zcGkvc3BpLmMtODYyLX1cbmRyaXZlcnMvc3BpL3NwaS5jOjg2MzpFWFBPUlRfU1lNQk9MX0dQTChzcGlfbmV3X2RldmljZSk7XG5kcml2ZXJzL3NwaS9zcGkuYy04NjQtXG4tLVxuZHJpdmVycy9zcGkvc3BpLmM9ODkzPXN0YXRpYyB2b2lkIHNwaV9tYXRjaF9jb250cm9sbGVyX3RvX2JvYXJkaW5mbyhzdHJ1Y3Qgc3BpX2NvbnRyb2xsZXIgKmN0bHIsXG4tLVxuZHJpdmVycy9zcGkvc3BpLmMtOTAwLVxuZHJpdmVycy9zcGkvc3BpLmM6OTAxOlx0ZGV2ID0gc3BpX25ld19kZXZpY2UoY3RsciwgYmkpO1xuZHJpdmVycy9zcGkvc3BpLmMtOTAyLVx0aWYgKCFkZXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE4OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDQ3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFc1MTAwIFNQSSBEcml2ZXIgaW4gU3l6a2FsbGVyKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhlIFc1MTAwIFNQSSBkcml2ZXIgd2l0aGluIHN5emthbGxlci4gVGhlIGltbWVkaWF0ZSBodXJkbGUgaXMgdGhhdCB0aGVyZSBpc24mIzM5O3QgYSBkaXJlY3Qgc3lzZnMgYXR0cmlidXRlIGxpa2UgYG5ld19kZXZpY2VgIGZvciBTUEksIHNpbWlsYXIgdG8gd2hhdCB3ZSBoYXZlIHdpdGggSTJDICh0aGFua3MsIGBpMmMtc3lzZnMuY2AhKS4gVGhhdCYjMzk7cyBhIG5vLWdvLgoKTXkgZmlyc3QgdGhvdWdodCB3YXMsICYjMzQ7V2FpdCwgZG9lc24mIzM5O3Qgc3l6a2FsbGVyIGhhdmUgc29tZSB0cmlja2VyeSB3aXRoIGRldmljZSB0cmVlIG92ZXJsYXlzPyYjMzQ7IEJ1dCBxdWlja2x5IEkgcmVtZW1iZXIsIG5vLCBzeXprYWxsZXIgZG9lc24mIzM5O3Qgc3VwcG9ydCBkeW5hbWljYWxseSBsb2FkaW5nIERUIG92ZXJsYXlzIGR1cmluZyBmdXp6aW5nLiBUaGF0IHdvdWxkIGJlICp3YXkqIHRvbyBjb21wbGV4LgoKVGhlbiwgSSBzdGFydGVkIHRvIHRoaW5rIGlmIHRoZXJlIHdhcyBhbiBlcXVpdmFsZW50IHRvIHRoZSBleGlzdGluZyBwcmltaXRpdmVzLCBsaWtlIGBzeXpfdXNiX2Nvbm5lY3RgLCBgc3l6XzgwMjExX2pvaW5faWJzc2AsIGBzeXpfZ2VuZXRsaW5rYCwgb3IgYHN5el92aGNpYCwgdGhhdCB3b3JrIGZvciBVU0IsIG1hYzgwMjExLCBuZXRsaW5rIGFuZCBibHVldG9vdGguIEJ1dCBubywgdGhlcmUmIzM5O3Mgbm8gZXF1aXZhbGVudCBgc3l6X3NwaV9jb25uZWN0YC4gVGhhdCB3b3VsZCBiZSB0b28gZWFzeSEKCk9rYXksIG5ldyBhbmdsZS4gV2hhdCBhYm91dCBzb21lIG90aGVyIHdheSB0byBpbnN0YW50aWF0ZSB0aGUgZHJpdmVyPyBCdXQsIHNpbmNlIGl0JiMzOTtzIGFuIFNQSSBkcml2ZXIsIHRoYXQmIzM5O3MgdW5saWtlbHkuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vay4gQ2FuIHdlIGV2ZW4gKnJlYWNoKiBgdzUxMDBfcHJvYmVgIGluIHRoZSBzdGFuZGFyZCBzeXprYWxsZXIgc2V0dXA/IEl0JiMzOTtzIGFuIFNQSSBkcml2ZXIsIHdoaWNoIG1lYW5zIGl0IHJlbGllcyBvbiBhbiBTUEkgZGV2aWNlIGJlaW5nIHJlZ2lzdGVyZWQgc29tZXdoZXJlLCBzb21laG93LiBTUEkgZGV2aWNlcyBnZXQgcmVnaXN0ZXJlZCB2aWEgU1BJIGNvbnRyb2xsZXJzLCBwYXJzaW5nIGRldmljZSB0cmVlcywgQUNQSSB0YWJsZXMsIG9yIGJvYXJkIGZpbGVzLgoKQW5kIGhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyB0cmlja3kuIEluIGEgdHlwaWNhbCB4ODZfNjQgVk0sIGxpa2UgdGhlIG9uZSB3ZSYjMzk7cmUgdXNpbmcgd2l0aCBRRU1VLCB0aGVyZSYjMzk7cyBubyBTUEkgY29udHJvbGxlciB0aGF0IGNhbiBwYXJzZSBhcmJpdHJhcnkgRFQgbm9kZXMuIFVubGVzcyB3ZSB3ZXJlIG9uIGFuIEFSTSBib2FyZCB3aXRoIGEgRFQsIGJ1dCBldmVuIHRoZW4sIHRoZSBEVCBpcyBzdGF0aWMuIFNvLCB0aGUgYm90dG9tIGxpbmUgaXMgYHc1MTAwX3Byb2JlYCBpcyB1bnJlYWNoYWJsZSBpbiBtb3N0IHN0YW5kYXJkIHN5emthbGxlciBlbnZpcm9ubWVudHMuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBgdzUxMDBgIGNhbiYjMzk7dCBiZSBpbnN0YW50aWF0ZWQgdmlhIHNvbWUgb3RoZXIgYnVzIEkmIzM5O20gZm9yZ2V0dGluZyBhYm91dC4gQnV0IEkmIzM5O20gcHJldHR5IHN1cmUgd2UmIzM5O3JlIHN0dWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxODowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3NTEwMF9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmM9NDIxPXN0YXRpYyBpbnQgdzUxMDBfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLXNwaS5jLTQ1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYzo0NTM6XHRyZXR1cm4gdzUxMDBfcHJvYmUoXHUwMDI2c3BpLVx1MDAzZWRldiwgb3BzLCBwcml2X3NpemUsIG1hYywgc3BpLVx1MDAzZWlycSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmMtNDU0LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYz03Mzk9RVhQT1JUX1NZTUJPTF9HUEwodzUxMDBfb3BzX3ByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtNzQwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6NzQxOmludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTc0Mi1cdFx0aW50IHNpemVvZl9vcHNfcHJpdiwgY29uc3Qgdm9pZCAqbWFjX2FkZHIsIGludCBpcnEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtODgyLX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jOjg4MzpFWFBPUlRfU1lNQk9MX0dQTCh3NTEwMF9wcm9iZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy04ODQtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmg9Mjk9dm9pZCAqdzUxMDBfb3BzX3ByaXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmgtMzAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuaDozMTppbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuaC0zMi1cdFx0aW50IHNpemVvZl9vcHNfcHJpdiwgY29uc3Qgdm9pZCAqbWFjX2FkZHIsIGludCBpcnEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxODowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg1MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFc1MTAwIERyaXZlciBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIGp1c3Qgc3BvdHRlZCBgdzUxMDAtc3BpLmNgIGluIHRoZSBjb2RlLiBUaGF0IHN1Z2dlc3RzIHRoZXJlIG1pZ2h0IGJlIGFuIFNQSS1iYXNlZCBXNTEwMCBkcml2ZXIgaW4gcGxhY2UuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGFsc28gYSBNZW1vcnktTWFwcGVkIEkvTyAoTU1JTykgaW1wbGVtZW50YXRpb24gc29tZXdoZXJlPyBUaGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyBJIHdhbnQgdG8gYXNjZXJ0YWluLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGJ5IGNoZWNraW5nIHRoZSBvYnZpb3VzIGxvY2F0aW9uOiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvYCBkaXJlY3RvcnksIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBpdC4gSSBuZWVkIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O3c1MTAwLXNwaS5jJiMzNDssCiAgICAmIzM0O3c1MTAwLmMmIzM0OywKICAgICYjMzQ7dzUxMDAuaCYjMzQ7CiAgXSwKICAmIzM0O1N1YmRpcnMmIzM0OzogbnVsbAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTIxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFdpem5ldCBEcml2ZXIgRmlsZXMqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgV2l6bmV0IEV0aGVybmV0IGRyaXZlcnMuIFJpZ2h0IG5vdywgSSYjMzk7bSBvbmx5IHNlZWluZyBgdzUxMDAtc3BpLmNgLCBgdzUxMDAuY2AsIGFuZCBgdzUxMDAuaGAgaW4gdGhpcyBpbW1lZGlhdGUgdmlldy4gSG9sZCBvbiwgd2FzbiYjMzk7dCB0aGVyZSBhIGB3NTMwMC5jYCBpbiB0aGlzIGRpcmVjdG9yeSB0b28/IEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIGJlIHRob3JvdWdoLgoKUmlnaHQsIHNvIGhvdyBhcmUgdGhlc2UgZmlsZXMgYmVpbmcgZm91bmQ/IEkgdGhvdWdodCBgY29kZXNlYXJjaC1kaXItaW5kZXhgIHdhcyBqdXN0IHJldHVybmluZyBmaWxlcyB0aGF0ICptYXRjaGVkKiBhIHByZWZpeCwgYnV0IGl0JiMzOTtzIHJlYWxseSBnaXZpbmcgbWUgKmFsbCogZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSwgaXNuJiMzOTt0IGl0PyBPa2F5LCBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gbWluZC4KCldhaXQsIGxvb2tpbmcgYXQgdGhlIHJlc3BvbnNlLCBpdCB3YXM6ICYjMzQ7RmlsZXM6IFsmIzM0O3c1MTAwLXNwaS5jJiMzNDssICYjMzQ7dzUxMDAuYyYjMzQ7LCAmIzM0O3c1MTAwLmgmIzM0O10mIzM0Oy4gT2theSwgc28gdGhhdCAqaXMqIGV2ZXJ5dGhpbmcgYmVpbmcgcmV0dXJuZWQuIEZpbmUsIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZXNlIGZpbGVzLCB0aGVuLgoKQnV0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3Npbmcgc29tZXRoaW5nIGV2ZW4gYmlnZ2VyLiBMZXQgbWUgZG91YmxlIGNoZWNrIHRoZSB3aG9sZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L2AgZGlyZWN0b3J5IGluIHRoZSBrZXJuZWwgdHJlZSB0byBiZSBzdXJlIEkgZGlkbiYjMzk7dCBtaXNzIHNvbWV0aGluZy4gSSBjYW4mIzM5O3QgYmUgdG9vIGNhcmVmdWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oy4qJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9NYWtlZmlsZToxOiMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX1dJWk5FVF9XNTEwMCkgJiM0Mzs9IHc1MTAwLm8gdzUxMDAtc3BpLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTg6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3MDQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkFuYWx5emluZyB0aGUgU1BJIERyaXZlciBDb250ZXh0KioKClJpZ2h0LCBzbyBpdCBsb29rcyBsaWtlIEkmIzM5O20gZGVhbGluZyB3aXRoIGEgc2l0dWF0aW9uIHdoZXJlIG5vIGV4dGVybmFsIGZpbGVzIGFyZSBpbnZvbHZlZC4gSW50ZXJlc3RpbmcuIEl0JiMzOTtzIGFuIFNQSSBkcml2ZXIsIHdoaWNoIG1lYW5zIGl0IGluaGVyZW50bHkgcmVsaWVzIG9uIGEgcGh5c2ljYWwgU1BJIGRldmljZSBiZWluZyBwcmVzZW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gc2ltdWxhdGUgdGhpcyBpbiBRRU1VLiBOb3csIHR5cGljYWxseSwgaW4gUUVNVSwgaW5zdGFudGlhdGluZyB0aGVzZSBkZXZpY2VzIGZyb20gdXNlciBzcGFjZSBpcyBhIHRyaWNreSBpc3N1ZS4gSXQgaGluZ2VzIG9uIHdoZXRoZXIgdGhlIHNpbXVsYXRlZCBib2FyZCBoYXMgYW4gU1BJIGNvbnRyb2xsZXIgYW5kIHRoZW4gaWYgdGhlcmUmIzM5O3MgYSB1c2FibGUgc3lzZnMgaW50ZXJmYWNlIGZvciBpdCwgYnV0IEkgcmVjYWxsIGNoZWNraW5nIGVhcmxpZXIsIGFuZCB1bmZvcnR1bmF0ZWx5LCBTUEkgZG9lc24mIzM5O3QgaGF2ZSB0aGF0IGhhbmR5IGBuZXdfZGV2aWNlYCBzeXNmcyBhdHRyaWJ1dGUgdG8gYXV0b21hdGljYWxseSBjcmVhdGUgdGhlIGRldmljZS4KClNvLCB0aGUgcXVlc3Rpb24gYmVjb21lcywgaG93ICplbHNlKiBjYW4gSSBtYWtlIGFuIFNQSSBkZXZpY2UgYXBwZWFyPyBJIGltbWVkaWF0ZWx5IHRob3VnaHQsIHBlcmhhcHMgc29tZXRoaW5nIGxpa2UgYHNwaS1tb2NrYD8gVW5mb3J0dW5hdGVseSwgbm8gbHVjaywgaXQgZG9lc24mIzM5O3QgbG9vayBsaWtlIFN5emthbGxlciBoYW5kbGVzIHRoYXQuIFRoZW4gSSBzdGFydGVkIHRvIGNvbnNpZGVyIGBwbGF0Zm9ybV9kZXZpY2VgIHdoaWNoIEkga25vdyBjYW4gYmUgdXNlZCB0byBzZXQgdXAgZGV2aWNlcy4gSG1tbSwgYnV0IG5vLCBwbGF0Zm9ybV9kZXZpY2UgaXMgcHJpbWFyaWx5IHVzZWQgdG8gKnJlZ2lzdGVyKiB0aGUgYHNwaV9kcml2ZXJgLCBub3QgaW5zdGFudGlhdGUgdGhlIGRldmljZSBpdHNlbGYuIE9rYXksIHNvIEkgYW0gc3R1Y2suIFdoYXQgbm93PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxODowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NwaV9yZWdpc3Rlcl9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTg6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqRHJpdmVyIFJlZ2lzdHJhdGlvbiBEZWVwIERpdmUqKgoKQWxyaWdodCwgaGFuZyBvbiBhIHNlY29uZC4gVGhhdCYjMzk7cyB0aGUgY29yZSBxdWVzdGlvbiwgaXNuJiMzOTt0IGl0PyBIb3cgZXhhY3RseSAqZG9lcyogdGhlIHN5c3RlbSBoYW5kbGUgZHJpdmVyIHJlZ2lzdHJhdGlvbj8gSSBtZWFuLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIG11bHRpLWZhY2V0ZWQgcHJvY2VzcywgcG90ZW50aWFsbHkgaW52b2x2aW5nIGhhcmR3YXJlLCBzb2Z0d2FyZSwgYW5kIGV2ZW4gZXh0ZXJuYWwgZGF0YWJhc2VzIGRlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24uCgpGaXJzdCwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBkaWZmZXJlbnQgbGV2ZWxzIG9mIHJlZ2lzdHJhdGlvbi4gSXMgaXQgc2ltcGx5IHJlY29nbml6aW5nIGEgZGV2aWNlLCBvciBpcyBpdCBnb2luZyBkZWVwZXIgdG8gZ2F0aGVyIHNwZWNpZmljcyBhYm91dCB0aGUgZHJpdmVyJiMzOTtzIGNhcGFiaWxpdGllcyBhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbT8gSXMgdGhlcmUgYSBkeW5hbWljIGxvYWRpbmcgY29tcG9uZW50LCBvciBpcyBpdCBtb3JlIG9mIGEgcHJlLWNvbXBpbGVkIHNldHVwPwoKSSBhbHNvIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBkaWdpdGFsbHkgc2lnbmVkIGRyaXZlciB0aGF0IHRoZSBzeXN0ZW0gY2FuIHZlcmlmeT8gSXMgdGhlcmUgYSBkcml2ZXIgc2lnbmluZyBwb2xpY3kgZW5mb3JjZWQsIG1heWJlIHJlcXVpcmluZyBhIHNwZWNpZmljIGNlcnRpZmljYXRlIGF1dGhvcml0eT8gT3IgaXMgdGhpcyBhIG1vcmUgb3BlbiBzeXN0ZW0sIHRoYXQgbWF5IGFsbG93IHVuc2lnbmVkIGRyaXZlcnMgb3Igb25lcyB0aGF0IGFyZW4mIzM5O3QgdmVyaWZpZWQ/IEkmIzM5O20gY3VyaW91cyBpZiB0aGV5IHdlbnQgd2l0aCBhIHBvbGljeSBvZiBhbGxvd2luZyB1bnNpZ25lZCBkcml2ZXJzIGFuZCB0aGUgYXNzb2NpYXRlZCByaXNrcy4KClRoZW4sIHRoZXJlJiMzOTtzIHRoZSBxdWVzdGlvbiBvZiBkaXNjb3ZlcnkuIERvZXMgdGhlIHN5c3RlbSBhdXRvbWF0aWNhbGx5IGRldGVjdCBuZXcgZHJpdmVycyB1cG9uIGhhcmR3YXJlIGNvbm5lY3Rpb24sIG9yIGlzIGl0IGEgbWFudWFsIHByb2Nlc3Mgd2hlcmUgdGhlIHVzZXIgaGFzIHRvIHBvaW50IHRoZSBzeXN0ZW0gdG8gdGhlIGNvcnJlY3QgZmlsZXM/IElzIHRoZXJlIHNvbWUga2luZCBvZiBwbHVnLWFuZC1wbGF5IG1lY2hhbmlzbSBhdCB3b3JrIGhlcmU/IEFuZCBpZiBzbywgaG93IGRvZXMgdGhhdCBpbnRlcmFjdGlvbiBvY2N1cj8KClVsdGltYXRlbHksIHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcyBoYXMgaW1wbGljYXRpb25zIGZvciBzeXN0ZW0gc3RhYmlsaXR5LCBzZWN1cml0eSwgYW5kIHRoZSBvdmVyYWxsIHVzZXIgZXhwZXJpZW5jZS4gSXQgbmVlZHMgdG8gYmUgcm9idXN0LCBzZWN1cmUsIGFuZCBhcyBzZWFtbGVzcyBhcyBwb3NzaWJsZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGludHJpY2FjaWVzIG9mIGhvdyB0aGUgcmVnaXN0cmF0aW9uIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGtlcm5lbCBhbmQgaWYgdGhlcmUgYXJlIGFueSBtZWNoYW5pc21zIGluIHBsYWNlIHRvIGhhbmRsZSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGVycm9ycy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX3NwaV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYz00Njk9c3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHc1MTAwX3NwaV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLXNwaS5jLTQ3OC19O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLXNwaS5jOjQ3OTptb2R1bGVfc3BpX2RyaXZlcih3NTEwMF9zcGlfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYy00ODAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzE1CgkJCQkJCQlvdXRwdXQ6IDE0NAoJCQkJCQkJdGhvdWdodHM6IDQxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBTUEkgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O3ZlIGV4YW1pbmVkIHRoaXMgY29kZSwgYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgYW4gYHNwaV9kcml2ZXJgLiBUaGUgY29yZSBpc3N1ZSBoZXJlIGlzIHRoYXQsIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCB0aGVyZSYjMzk7cyBubyByZWxpYWJsZSB3YXkgdG8gaW5zdGFudGlhdGUgdGhpcyBwYXJ0aWN1bGFyIFNQSSBkZXZpY2Ugd2l0aGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRS4gVGhpcyBtZWFucyBzeXprYWxsZXIsIGluIGl0cyBjdXJyZW50IGNvbmZpZ3VyYXRpb24sIHdvbiYjMzk7dCBiZSBhYmxlIHRvIHJlYWNoIGl0LgoKTGV0IG1lIGp1c3Qgc29saWRpZnkgdGhpcyByZWFzb25pbmcuIEkmIzM5O20gcmVjYWxsaW5nIGhvdyBJMkMgY2FuIGNyZWF0ZSBhIG5ldyBkZXZpY2UsIGJ1dCBTUEkgZG9lcyBub3QuIFRoZXJlJiMzOTtzIHRoYXQgYHNwaS1sb29wYmFjay10ZXN0YCBtb2R1bGUsIGJ1dCB0aGF04oCZcyBjbGVhcmx5IGRlc2lnbmVkIGZvciB0ZXN0aW5nIGFuZCB3b24mIzM5O3QgZ2V0IHVzIHdoZXJlIHdlIG5lZWQgdG8gYmUuIEkgaGF2ZW7igJl0IHNlZW4gYW55dGhpbmcgaW4gc3l6a2FsbGVyIGxpa2UgYSBgc3l6X3NwaV9jb25uZWN0YCBwc2V1ZG8tc3lzY2FsbCBlaXRoZXIuIFRoZSBvbmx5IGV4Y2VwdGlvbiB3b3VsZCBiZSBpZiBzeXprYWxsZXIgcmFuIG9uIGEgdmVyeSBzcGVjaWZpYyBBUk0gYm9hcmQgbW9kZWwgaW5zaWRlIFFFTVUgd2hlcmUgdGhpcyBkZXZpY2Ugd2FzIHN0YXRpY2FsbHkgZGVmaW5lZCBpbiB0aGUgZGV2aWNlIHRyZWUsIGJ1dCB0aGF0JiMzOTtzIG5vdCB0aGUgdHlwaWNhbCB4ODZfNjQgZ2VuZXJpYyBQQyBtYWNoaW5lLCBvciB0aGUgYHZpcnRgIEFSTTY0IHNldHVwIHRoYXQgc3l6a2FsbGVyIHVzdWFsbHkgcnVucyBvbi4gVGhvc2UgZW52aXJvbm1lbnRzIGRvbiYjMzk7dCBoYXZlIGhhcmRjb2RlZCBXaXpuZXQgVzUxMDAgU1BJIGRldmljZSBjb25maWd1cmF0aW9ucy4gU28sIHVucmVhY2hhYmxlLgoKTm93LCBsZXQmIzM5O3MgZ28gYmFjayBhbmQgcmV2aWV3IHRoZSBvcmlnaW5hbCBwcm9tcHQuIEl0JiMzOTtzIGFza2luZyBmb3IgYSBgV29ydGhGdXp6aW5nPWZhbHNlYCByZXR1cm4gaWYgdGhlIHBhdGNoIGludm9sdmVzIGNvZGUgdGhhdCBjYW4mIzM5O3QgYmUgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGV2ZW4gd2l0aCBlbXVsYXRlZCBoYXJkd2FyZS4gSXQgYWxzbyBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIHRoYXQgcmVseSBvbiBwaHlzaWNhbCBoYXJkd2FyZS4gVGhpcyBmaXRzIGxpa2UgYSBnbG92ZS4gVGhpcyBTUEkgRXRoZXJuZXQgY29udHJvbGxlciBpcyB2ZW5kb3Itc3BlY2lmaWMuIEl0IHJlcXVpcmVzIGVpdGhlciBwaHlzaWNhbCBTUEkgaGFyZHdhcmUgb3IgYSBzcGVjaWZpYyBRRU1VIGVtdWxhdGlvbiB0aGF0IGlzbiYjMzk7dCBnZW5lcmljYWxseSBhdmFpbGFibGUgYW5kIGNhbiYjMzk7dCBiZSBzZXQgdXAgZnJvbSB1c2Vyc3BhY2UuIEl0JiMzOTtzIGNsZWFybHkgJiMzNDtpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OwoKVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGFuZCBwcm92aWRpbmcgdGhlIHJhdGlvbmFsZSBhcyBzdGF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdpem5ldCBXNTEwMC9XNTIwMC9XNTUwMCBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGlzIGFuIFNQSSBkZXZpY2UgZHJpdmVyLiBJbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSBvciBHQ0UpIHVzZWQgYnkgc3l6a2FsbGVyLCB0aGVyZSBpcyBubyBnZW5lcmljIHdheSB0byBpbnN0YW50aWF0ZSBhcmJpdHJhcnkgU1BJIGRldmljZXMgZnJvbSB1c2Vyc3BhY2UgKHVubGlrZSBJMkMmIzM5O3MgYG5ld19kZXZpY2VgIHN5c2ZzIGludGVyZmFjZSBvciBVU0ImIzM5O3MgZHVtbXlfaGNkKS4gU2luY2UgdGhlIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBhbmQgdGhlIGRldmljZSBjYW5ub3QgYmUgZHluYW1pY2FsbHkgY3JlYXRlZCwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdpem5ldCBXNTEwMC9XNTIwMC9XNTUwMCBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGlzIGFuIFNQSSBkZXZpY2UgZHJpdmVyLiBJbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSBvciBHQ0UpIHVzZWQgYnkgc3l6a2FsbGVyLCB0aGVyZSBpcyBubyBnZW5lcmljIHdheSB0byBpbnN0YW50aWF0ZSBhcmJpdHJhcnkgU1BJIGRldmljZXMgZnJvbSB1c2Vyc3BhY2UgKHVubGlrZSBJMkMmIzM5O3MgYG5ld19kZXZpY2VgIHN5c2ZzIGludGVyZmFjZSBvciBVU0ImIzM5O3MgZHVtbXlfaGNkKS4gU2luY2UgdGhlIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBhbmQgdGhlIGRldmljZSBjYW5ub3QgYmUgZHluYW1pY2FsbHkgY3JlYXRlZCwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE4OjA1OjIyLjE0MzAyMzA1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE5MDA3OTQ2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXaXpuZXQgVzUxMDAvVzUyMDAvVzU1MDAgRXRoZXJuZXQgZHJpdmVyLCB3aGljaCBpcyBhbiBTUEkgZGV2aWNlIGRyaXZlci4gSW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUgb3IgR0NFKSB1c2VkIGJ5IHN5emthbGxlciwgdGhlcmUgaXMgbm8gZ2VuZXJpYyB3YXkgdG8gaW5zdGFudGlhdGUgYXJiaXRyYXJ5IFNQSSBkZXZpY2VzIGZyb20gdXNlcnNwYWNlICh1bmxpa2UgSTJDJ3MgYG5ld19kZXZpY2VgIHN5c2ZzIGludGVyZmFjZSBvciBVU0IncyBkdW1teV9oY2QpLiBTaW5jZSB0aGUgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGFuZCB0aGUgZGV2aWNlIGNhbm5vdCBiZSBkeW5hbWljYWxseSBjcmVhdGVkLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxODowNToyMi4xNDMwMjc4NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE4ODM0ODQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNWYxMzgxZTVhZGUzZmY5YjNjNDIzYzkwMGJhM2I4ZTY1YTU3ODYzYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyA2IDE4OjA1OjIxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1MTAwLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpem5ldCx3NTEwMC55YW1sXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jZWJmNDM3YWQzYzRhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1MTAwLnlhbWxcXG5AQCAtMCwwICsxLDc0IEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxcbislWUFNTCAxLjJcXG4rLS0tXFxuKyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3dpem5ldCx3NTEwMC55YW1sI1xcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcXG4rXFxuK3RpdGxlOiBXaXpuZXQgdzUxMDAvdzUyMDAvdzU1MDAgU1BJIEV0aGVybmV0IENvbnRyb2xsZXJcXG4rXFxuK21haW50YWluZXJzOlxcbisgIC0gQXJ0aHVyIENyw6lwaW4gTGVibG9uZCBcXHUwMDNjYXJ0aHVyQG1hcm1vdHR1cy5uZXRcXHUwMDNlXFxuK1xcbitkZXNjcmlwdGlvbjogfFxcbisgIFRoaXMgaXMgYSBzdGFuZGFsb25lIDEwLzEwMCBNQml0IEV0aGVybmV0IGNvbnRyb2xsZXIgd2l0aCBTUEkgaW50ZXJmYWNlLlxcbitcXG4rYWxsT2Y6XFxuKyAgLSAkcmVmOiAvc2NoZW1hcy9uZXQvZXRoZXJuZXQtY29udHJvbGxlci55YW1sI1xcbisgIC0gJHJlZjogL3NjaGVtYXMvc3BpL3NwaS1wZXJpcGhlcmFsLXByb3BzLnlhbWwjXFxuK1xcbitwcm9wZXJ0aWVzOlxcbisgIGNvbXBhdGlibGU6XFxuKyAgICBlbnVtOlxcbisgICAgICAtIHdpem5ldCx3NTEwMFxcbisgICAgICAtIHdpem5ldCx3NTIwMFxcbisgICAgICAtIHdpem5ldCx3NTUwMFxcbitcXG4rICBpbnRlcnJ1cHRzOlxcbisgICAgbWF4SXRlbXM6IDFcXG4rXFxuKyAgcmVnOlxcbisgICAgbWF4SXRlbXM6IDFcXG4rXFxuKyAgc3BpLW1heC1mcmVxdWVuY3k6XFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgQWNjb3JkaW5nIHRvIHRoZSB3NTUwMCBkYXRhc2hlZXQsIHRoZSBjaGlwIGFsbG93cyBhIG1heGltdW0gb2YgODAgTUh6LFxcbisgICAgICBob3dldmVyLCBib2FyZCBkZXNpZ25zIG1heSBuZWVkIHRvIGxpbWl0IHRoaXMgdmFsdWUuXFxuKyAgICBtYXhpbXVtOiA4MDAwMDAwMFxcbitcXG4rICBsaW5rLWdwaW9zOlxcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIEFuIG9wdGlvbmFsIEdQSU8gbGluZSB0aGF0IGNhbiBiZSB3aXJlZCB0byB0aGUgTElOS0xFRCBwaW4gb2YgdGhlIHc1NTAwXFxuKyAgICAgIGFzIGFuIGludGVycnVwdCB0byBkZXRlY3QgbGluayBzdGF0dXMgY2hhbmdlcy5cXG4rICAgIG1heEl0ZW1zOiAxXFxuK1xcbityZXF1aXJlZDpcXG4rICAtIGNvbXBhdGlibGVcXG4rICAtIHJlZ1xcbisgIC0gaW50ZXJydXB0c1xcbitcXG4rdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxcbitcXG4rZXhhbXBsZXM6XFxuKyAgLSB8XFxuKyAgICAvKiBFeGFtcGxlIChmb3IgUmFzcGJlcnJ5IFBpIHdpdGggcGluIGNvbnRyb2wgc3R1ZmYgZm9yIEdQSU8gaXJxKSAqL1xcbitcXG4rICAgICNpbmNsdWRlIFxcdTAwM2NkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaFxcdTAwM2VcXG4rICAgICNpbmNsdWRlIFxcdTAwM2NkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaFxcdTAwM2VcXG4rXFxuKyAgICBzcGkge1xcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rICAgICAgICBldGhlcm5ldEAwIHtcXG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJ3aXpuZXQsdzU1MDBcXFwiO1xcbisgICAgICAgICAgICByZWcgPSBcXHUwMDNjMFxcdTAwM2U7XFxuKyAgICAgICAgICAgIHBpbmN0cmwtbmFtZXMgPSBcXFwiZGVmYXVsdFxcXCI7XFxuKyAgICAgICAgICAgIHBpbmN0cmwtMCA9IFxcdTAwM2NcXHUwMDI2ZXRoMV9waW5zXFx1MDAzZTtcXG4rICAgICAgICAgICAgaW50ZXJydXB0LXBhcmVudCA9IFxcdTAwM2NcXHUwMDI2Z3Bpb1xcdTAwM2U7XFxuKyAgICAgICAgICAgIGludGVycnVwdHMgPSBcXHUwMDNjMjUgSVJRX1RZUEVfRURHRV9GQUxMSU5HXFx1MDAzZTtcXG4rICAgICAgICAgICAgbGluay1ncGlvcyA9IFxcdTAwM2NcXHUwMDI2Z3BpbyAyNCBHUElPX0FDVElWRV9MT1dcXHUwMDNlO1xcbisgICAgICAgICAgICBzcGktbWF4LWZyZXF1ZW5jeSA9IFxcdTAwM2MzMDAwMDAwMFxcdTAwM2U7XFxuKyAgICAgICAgICAgIGxvY2FsLW1hYy1hZGRyZXNzID0gWyBhMCBiMCBjMCBkMCBlMCBmMCBdO1xcbisgICAgICAgIH07XFxuKyAgICB9O1xcbisuLi5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0XFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggZTk2NjU3OThjNGJlNi4uMDAwMDAwMDAwMDAwMFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1eDAwLnR4dFxcbisrKyAvZGV2L251bGxcXG5AQCAtMSw1MCArMCwwIEBAXFxuLSogV2l6bmV0IHc1eDAwXFxuLVxcbi1UaGlzIGlzIGEgc3RhbmRhbG9uZSAxMC8xMDAgTUJpdCBFdGhlcm5ldCBjb250cm9sbGVyIHdpdGggU1BJIGludGVyZmFjZS5cXG4tXFxuLUZvciBlYWNoIGRldmljZSBjb25uZWN0ZWQgdG8gYSBTUEkgYnVzLCBkZWZpbmUgYSBjaGlsZCBub2RlIHdpdGhpblxcbi10aGUgU1BJIG1hc3RlciBub2RlLlxcbi1cXG4tUmVxdWlyZWQgcHJvcGVydGllczpcXG4tLSBjb21wYXRpYmxlOiBTaG91bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3RyaW5nczpcXG4tXFx0ICAgICAgXFxcIndpem5ldCx3NTEwMFxcXCJcXG4tXFx0ICAgICAgXFxcIndpem5ldCx3NTIwMFxcXCJcXG4tXFx0ICAgICAgXFxcIndpem5ldCx3NTUwMFxcXCJcXG4tLSByZWc6IFNwZWNpZnkgdGhlIFNQSSBjaGlwIHNlbGVjdCB0aGUgY2hpcCBpcyB3aXJlZCB0by5cXG4tLSBpbnRlcnJ1cHRzOiBTcGVjaWZ5IHRoZSBpbnRlcnJ1cHQgaW5kZXggd2l0aGluIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciAocmVmZXJyZWRcXG4tICAgICAgICAgICAgICB0byBhYm92ZSBpbiBpbnRlcnJ1cHQtcGFyZW50KSBhbmQgaW50ZXJydXB0IHR5cGUuIHc1eDAwIG5hdGl2ZWx5XFxuLSAgICAgICAgICAgICAgZ2VuZXJhdGVzIGZhbGxpbmcgZWRnZSBpbnRlcnJ1cHRzLCBob3dldmVyLCBhZGRpdGlvbmFsIGJvYXJkIGxvZ2ljXFxuLSAgICAgICAgICAgICAgbWlnaHQgaW52ZXJ0IHRoZSBzaWduYWwuXFxuLS0gcGluY3RybC1uYW1lczogTGlzdCBvZiBhc3NpZ25lZCBzdGF0ZSBuYW1lcywgc2VlIHBpbmN0cmwgYmluZGluZyBkb2N1bWVudGF0aW9uLlxcbi0tIHBpbmN0cmwtMDogTGlzdCBvZiBwaGFuZGxlcyB0byBjb25maWd1cmUgdGhlIEdQSU8gcGluIHVzZWQgYXMgaW50ZXJydXB0IGxpbmUsXFxuLSAgICAgICAgICAgICBzZWUgYWxzbyBnZW5lcmljIGFuZCB5b3VyIHBsYXRmb3JtIHNwZWNpZmljIHBpbmN0cmwgYmluZGluZ1xcbi0gICAgICAgICAgICAgZG9jdW1lbnRhdGlvbi5cXG4tXFxuLU9wdGlvbmFsIHByb3BlcnRpZXM6XFxuLS0gc3BpLW1heC1mcmVxdWVuY3k6IE1heGltdW0gZnJlcXVlbmN5IG9mIHRoZSBTUEkgYnVzIHdoZW4gYWNjZXNzaW5nIHRoZSB3NTUwMC5cXG4tICBBY2NvcmRpbmcgdG8gdGhlIHc1NTAwIGRhdGFzaGVldCwgdGhlIGNoaXAgYWxsb3dzIGEgbWF4aW11bSBvZiA4MCBNSHosIGhvd2V2ZXIsXFxuLSAgYm9hcmQgZGVzaWducyBtYXkgbmVlZCB0byBsaW1pdCB0aGlzIHZhbHVlLlxcbi0tIGxvY2FsLW1hYy1hZGRyZXNzOiBTZWUgZXRoZXJuZXQudHh0IGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cXG4tXFxuLVxcbi1FeGFtcGxlIChmb3IgUmFzcGJlcnJ5IFBpIHdpdGggcGluIGNvbnRyb2wgc3R1ZmYgZm9yIEdQSU8gaXJxKTpcXG4tXFxuLVxcdTAwMjZzcGkge1xcbi1cXHRldGhlcm5ldEAwOiB3NTUwMEAwIHtcXG4tXFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJ3aXpuZXQsdzU1MDBcXFwiO1xcbi1cXHRcXHRyZWcgPSBcXHUwMDNjMFxcdTAwM2U7XFxuLVxcdFxcdHBpbmN0cmwtbmFtZXMgPSBcXFwiZGVmYXVsdFxcXCI7XFxuLVxcdFxcdHBpbmN0cmwtMCA9IFxcdTAwM2NcXHUwMDI2ZXRoMV9waW5zXFx1MDAzZTtcXG4tXFx0XFx0aW50ZXJydXB0LXBhcmVudCA9IFxcdTAwM2NcXHUwMDI2Z3Bpb1xcdTAwM2U7XFxuLVxcdFxcdGludGVycnVwdHMgPSBcXHUwMDNjMjUgSVJRX1RZUEVfRURHRV9GQUxMSU5HXFx1MDAzZTtcXG4tXFx0XFx0c3BpLW1heC1mcmVxdWVuY3kgPSBcXHUwMDNjMzAwMDAwMDBcXHUwMDNlO1xcbi1cXHR9O1xcbi19O1xcbi1cXG4tXFx1MDAyNmdwaW8ge1xcbi1cXHRldGgxX3BpbnM6IGV0aDFfcGlucyB7XFxuLVxcdFxcdGJyY20scGlucyA9IFxcdTAwM2MyNVxcdTAwM2U7XFxuLVxcdFxcdGJyY20sZnVuY3Rpb24gPSBcXHUwMDNjMFxcdTAwM2U7IC8qIGluICovXFxuLVxcdFxcdGJyY20scHVsbCA9IFxcdTAwM2MwXFx1MDAzZTsgLyogbm9uZSAqL1xcbi1cXHR9O1xcbi19O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jXFxuaW5kZXggNTNkOGRjNjQyZmJkNi4uNjcwN2E2ZjI3Mzk1NCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jXFxuQEAgLTIyLDYgKzIyLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvcG9ydC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW50ZXJydXB0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2dwaW8vY29uc3VtZXIuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJ3NTEwMC5oXFxcIlxcbiBcXG5AQCAtMTI0LDYgKzEyNSw4IEBAIE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4gICovXFxuICNkZWZpbmUgVzU1MDBfU0lNUlxcdFxcdDB4MDAxOCAvKiBTb2NrZXQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi9cXG4gI2RlZmluZSBXNTUwMF9SVFJcXHRcXHQweDAwMTkgLyogUmV0cnkgVGltZS12YWx1ZSBSZWdpc3RlciAqL1xcbisjZGVmaW5lIFc1NTAwX1BIWUNGR1JcXHRcXHQweDAwMmUgLyogIFBIWSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovXFxuKyNkZWZpbmUgICBQSFlDRkdSX0xOS1xcdFxcdCAgMHgwMSAvKiBsaW5rIHN0YXR1cyAqL1xcbiBcXG4gI2RlZmluZSBXNTUwMF9TMF9SRUdTXFx0XFx0MHgxMDAwMFxcbiBcXG5AQCAtMTU0LDYgKzE1Nyw3IEBAIHN0cnVjdCB3NTEwMF9wcml2IHtcXG4gXFx0dTE2IHMwX3J4X2J1Zl9zaXplO1xcbiBcXG4gXFx0aW50IGlycTtcXG4rXFx0c3RydWN0IGdwaW9fZGVzYyAqbGlua19ncGlvO1xcbiBcXG4gXFx0c3RydWN0IG5hcGlfc3RydWN0IG5hcGk7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xcbkBAIC00MTQsNiArNDE4LDE2IEBAIHN0YXRpYyB2b2lkIHc1MTAwX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXHRcXHRzaXplb2YoaW5mby1cXHUwMDNlYnVzX2luZm8pKTtcXG4gfVxcbiBcXG4rc3RhdGljIHUzMiB3NTEwMF9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZW9wcy1cXHUwMDNlY2hpcF9pZCA9PSBXNTUwMClcXG4rXFx0XFx0cmV0dXJuIHc1MTAwX3JlYWQocHJpdiwgVzU1MDBfUEhZQ0ZHUikgXFx1MDAyNiBQSFlDRkdSX0xOSztcXG4rXFxuK1xcdHJldHVybiAxO1xcbit9XFxuK1xcbiBzdGF0aWMgdTMyIHc1MTAwX2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbkBAIC02MTYsNiArNjMwLDI0IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCB3NTEwMF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqbmRldl9pbnN0YW5jZSlcXG4gXFx0cmV0dXJuIElSUV9IQU5ETEVEO1xcbiB9XFxuIFxcbitzdGF0aWMgaXJxcmV0dXJuX3QgdzUxMDBfZGV0ZWN0X2xpbmsoaW50IGlycSwgdm9pZCAqbmRldl9pbnN0YW5jZSlcXG4re1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IG5kZXZfaW5zdGFuY2U7XFxuK1xcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZGV2KSkge1xcbitcXHRcXHRpZiAodzUxMDBfZ2V0X2xpbmsobmRldikpIHtcXG4rXFx0XFx0XFx0bmV0aWZfaW5mbyhwcml2LCBsaW5rLCBuZGV2LCBcXFwibGluayBpcyB1cFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdG5ldGlmX2NhcnJpZXJfb24obmRldik7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdG5ldGlmX2luZm8ocHJpdiwgbGluaywgbmRldiwgXFxcImxpbmsgaXMgZG93blxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdG5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBJUlFfSEFORExFRDtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdzUxMDBfc2V0cnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIHtcXG4gXFx0c3RydWN0IHc1MTAwX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHc1MTAwX3ByaXYsXFxuQEAgLTY1OSw2ICs2OTEsMTIgQEAgc3RhdGljIGludCB3NTEwMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXHR3NTEwMF9od19zdGFydChwcml2KTtcXG4gXFx0bmFwaV9lbmFibGUoXFx1MDAyNnByaXYtXFx1MDAzZW5hcGkpO1xcbiBcXHRuZXRpZl9zdGFydF9xdWV1ZShuZGV2KTtcXG4rXFxuK1xcdGlmICh3NTEwMF9nZXRfbGluayhuZGV2KSlcXG4rXFx0XFx0bmV0aWZfY2Fycmllcl9vbihuZGV2KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRuZXRpZl9jYXJyaWVyX29mZihuZGV2KTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC02NzgsNiArNzE2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB3NTEwMF9ldGh0b29sX29wcyA9IHtcXG4gXFx0LmdldF9kcnZpbmZvXFx0XFx0PSB3NTEwMF9nZXRfZHJ2aW5mbyxcXG4gXFx0LmdldF9tc2dsZXZlbFxcdFxcdD0gdzUxMDBfZ2V0X21zZ2xldmVsLFxcbiBcXHQuc2V0X21zZ2xldmVsXFx0XFx0PSB3NTEwMF9zZXRfbXNnbGV2ZWwsXFxuK1xcdC5nZXRfbGlua1xcdFxcdD0gdzUxMDBfZ2V0X2xpbmssXFxuIFxcdC5nZXRfcmVnc19sZW5cXHRcXHQ9IHc1MTAwX2dldF9yZWdzX2xlbixcXG4gXFx0LmdldF9yZWdzXFx0XFx0PSB3NTEwMF9nZXRfcmVncyxcXG4gfTtcXG5AQCAtNzUxLDYgKzc5MCwxMyBAQCBpbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsXFxuIFxcdHByaXYtXFx1MDAzZW5kZXYgPSBuZGV2O1xcbiBcXHRwcml2LVxcdTAwM2VvcHMgPSBvcHM7XFxuIFxcdHByaXYtXFx1MDAzZWlycSA9IGlycTtcXG4rXFx0cHJpdi1cXHUwMDNlbGlua19ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoZGV2LCBcXFwibGlua1xcXCIsIEdQSU9EX0lOKTtcXG4rXFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VsaW5rX2dwaW8pKSB7XFxuK1xcdFxcdGVyciA9IGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXFx1MDAzZWxpbmtfZ3BpbyksXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwiZmFpbGVkIHRvIGdldCBsaW5rIEdQSU9cXFxcblxcXCIpO1xcbitcXHRcXHRwcml2LVxcdTAwM2VsaW5rX2dwaW8gPSBOVUxMO1xcbitcXHRcXHRnb3RvIGVycl9yZWdpc3RlcjtcXG4rXFx0fVxcbiBcXG4gXFx0bmRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZ3NTEwMF9uZXRkZXZfb3BzO1xcbiBcXHRuZGV2LVxcdTAwM2VldGh0b29sX29wcyA9IFxcdTAwMjZ3NTEwMF9ldGh0b29sX29wcztcXG5AQCAtODAzLDggKzg0OSwyOSBAQCBpbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyX2h3O1xcbiBcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWxpbmtfZ3Bpbykge1xcbitcXHRcXHRpbnQgbGlua19pcnEgPSBncGlvZF90b19pcnEocHJpdi1cXHUwMDNlbGlua19ncGlvKTtcXG4rXFxuK1xcdFxcdGlmIChsaW5rX2lycSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0ZXJyID0gZGV2X2Vycl9wcm9iZShkZXYsIGxpbmtfaXJxLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgXFxcIk5vIGNvcnJlc3BvbmRpbmcgaXJxIGZvciBsaW5rIGdwaW9cXFxcblxcXCIpO1xcbitcXHRcXHRcXHRnb3RvIGVycl9ncGlvO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRlcnIgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgbGlua19pcnEsIE5VTEwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHc1MTAwX2RldGVjdF9saW5rLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRJUlFGX1RSSUdHRVJfUklTSU5HIHxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0SVJRRl9UUklHR0VSX0ZBTExJTkcgfFxcbitcXHRcXHRcXHRcXHRcXHRcXHRJUlFGX09ORVNIT1QsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcXCJ3NTEwMC1saW5rXFxcIiwgcHJpdi1cXHUwMDNlbmRldik7XFxuK1xcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9ncGlvO1xcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuK2Vycl9ncGlvOlxcbitcXHRmcmVlX2lycShwcml2LVxcdTAwM2VpcnEsIG5kZXYpO1xcbiBlcnJfaHc6XFxuIFxcdGRlc3Ryb3lfd29ya3F1ZXVlKHByaXYtXFx1MDAzZXhmZXJfd3EpO1xcbiBlcnJfd3E6XFxuQEAgLTg1Nyw2ICs5MjQsOSBAQCBzdGF0aWMgaW50IHc1MTAwX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdFxcdHc1MTAwX2h3X3N0YXJ0KHByaXYpO1xcbiBcXG4gXFx0XFx0bmV0aWZfZGV2aWNlX2F0dGFjaChuZGV2KTtcXG4rXFxuK1xcdFxcdGlmICh3NTEwMF9nZXRfbGluayhuZGV2KSlcXG4rXFx0XFx0XFx0bmV0aWZfY2Fycmllcl9vbihuZGV2KTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxODowNToyMi41NjI0OTg1MDhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3MTQ4MTMxMzgwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdpem5ldCBXNTEwMC9XNTIwMC9XNTUwMCBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGlzIGFuIFNQSSBkZXZpY2UgZHJpdmVyLiBJbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSBvciBHQ0UpIHVzZWQgYnkgc3l6a2FsbGVyLCB0aGVyZSBpcyBubyBnZW5lcmljIHdheSB0byBpbnN0YW50aWF0ZSBhcmJpdHJhcnkgU1BJIGRldmljZXMgZnJvbSB1c2Vyc3BhY2UgKHVubGlrZSBJMkMncyBgbmV3X2RldmljZWAgc3lzZnMgaW50ZXJmYWNlIG9yIFVTQidzIGR1bW15X2hjZCkuIFNpbmNlIHRoZSBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgYW5kIHRoZSBkZXZpY2UgY2Fubm90IGJlIGR5bmFtaWNhbGx5IGNyZWF0ZWQsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVmMTM4MWU1YWRlM2ZmOWIzYzQyM2M5MDBiYTNiOGU2NWE1Nzg2M2JcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDE4OjA1OjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzUxMDAueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1MTAwLnlhbWxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jZWJmNDM3YWQzYzRhXG4tLS0gL2Rldi9udWxsXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpem5ldCx3NTEwMC55YW1sXG5AQCAtMCwwICsxLDc0IEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4rJVlBTUwgMS4yXG4rLS0tXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvd2l6bmV0LHc1MTAwLnlhbWwjXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4rXG4rdGl0bGU6IFdpem5ldCB3NTEwMC93NTIwMC93NTUwMCBTUEkgRXRoZXJuZXQgQ29udHJvbGxlclxuK1xuK21haW50YWluZXJzOlxuKyAgLSBBcnRodXIgQ3LDqXBpbiBMZWJsb25kIFx1MDAzY2FydGh1ckBtYXJtb3R0dXMubmV0XHUwMDNlXG4rXG4rZGVzY3JpcHRpb246IHxcbisgIFRoaXMgaXMgYSBzdGFuZGFsb25lIDEwLzEwMCBNQml0IEV0aGVybmV0IGNvbnRyb2xsZXIgd2l0aCBTUEkgaW50ZXJmYWNlLlxuK1xuK2FsbE9mOlxuKyAgLSAkcmVmOiAvc2NoZW1hcy9uZXQvZXRoZXJuZXQtY29udHJvbGxlci55YW1sI1xuKyAgLSAkcmVmOiAvc2NoZW1hcy9zcGkvc3BpLXBlcmlwaGVyYWwtcHJvcHMueWFtbCNcbitcbitwcm9wZXJ0aWVzOlxuKyAgY29tcGF0aWJsZTpcbisgICAgZW51bTpcbisgICAgICAtIHdpem5ldCx3NTEwMFxuKyAgICAgIC0gd2l6bmV0LHc1MjAwXG4rICAgICAgLSB3aXpuZXQsdzU1MDBcbitcbisgIGludGVycnVwdHM6XG4rICAgIG1heEl0ZW1zOiAxXG4rXG4rICByZWc6XG4rICAgIG1heEl0ZW1zOiAxXG4rXG4rICBzcGktbWF4LWZyZXF1ZW5jeTpcbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgQWNjb3JkaW5nIHRvIHRoZSB3NTUwMCBkYXRhc2hlZXQsIHRoZSBjaGlwIGFsbG93cyBhIG1heGltdW0gb2YgODAgTUh6LFxuKyAgICAgIGhvd2V2ZXIsIGJvYXJkIGRlc2lnbnMgbWF5IG5lZWQgdG8gbGltaXQgdGhpcyB2YWx1ZS5cbisgICAgbWF4aW11bTogODAwMDAwMDBcbitcbisgIGxpbmstZ3Bpb3M6XG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIEFuIG9wdGlvbmFsIEdQSU8gbGluZSB0aGF0IGNhbiBiZSB3aXJlZCB0byB0aGUgTElOS0xFRCBwaW4gb2YgdGhlIHc1NTAwXG4rICAgICAgYXMgYW4gaW50ZXJydXB0IHRvIGRldGVjdCBsaW5rIHN0YXR1cyBjaGFuZ2VzLlxuKyAgICBtYXhJdGVtczogMVxuK1xuK3JlcXVpcmVkOlxuKyAgLSBjb21wYXRpYmxlXG4rICAtIHJlZ1xuKyAgLSBpbnRlcnJ1cHRzXG4rXG4rdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK2V4YW1wbGVzOlxuKyAgLSB8XG4rICAgIC8qIEV4YW1wbGUgKGZvciBSYXNwYmVycnkgUGkgd2l0aCBwaW4gY29udHJvbCBzdHVmZiBmb3IgR1BJTyBpcnEpICovXG4rXG4rICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oXHUwMDNlXG4rICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oXHUwMDNlXG4rXG4rICAgIHNwaSB7XG4rICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rICAgICAgICBldGhlcm5ldEAwIHtcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJ3aXpuZXQsdzU1MDBcIjtcbisgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgIHBpbmN0cmwtbmFtZXMgPSBcImRlZmF1bHRcIjtcbisgICAgICAgICAgICBwaW5jdHJsLTAgPSBcdTAwM2NcdTAwMjZldGgxX3BpbnNcdTAwM2U7XG4rICAgICAgICAgICAgaW50ZXJydXB0LXBhcmVudCA9IFx1MDAzY1x1MDAyNmdwaW9cdTAwM2U7XG4rICAgICAgICAgICAgaW50ZXJydXB0cyA9IFx1MDAzYzI1IElSUV9UWVBFX0VER0VfRkFMTElOR1x1MDAzZTtcbisgICAgICAgICAgICBsaW5rLWdwaW9zID0gXHUwMDNjXHUwMDI2Z3BpbyAyNCBHUElPX0FDVElWRV9MT1dcdTAwM2U7XG4rICAgICAgICAgICAgc3BpLW1heC1mcmVxdWVuY3kgPSBcdTAwM2MzMDAwMDAwMFx1MDAzZTtcbisgICAgICAgICAgICBsb2NhbC1tYWMtYWRkcmVzcyA9IFsgYTAgYjAgYzAgZDAgZTAgZjAgXTtcbisgICAgICAgIH07XG4rICAgIH07XG4rLi4uXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0XG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGU5NjY1Nzk4YzRiZTYuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1eDAwLnR4dFxuKysrIC9kZXYvbnVsbFxuQEAgLTEsNTAgKzAsMCBAQFxuLSogV2l6bmV0IHc1eDAwXG4tXG4tVGhpcyBpcyBhIHN0YW5kYWxvbmUgMTAvMTAwIE1CaXQgRXRoZXJuZXQgY29udHJvbGxlciB3aXRoIFNQSSBpbnRlcmZhY2UuXG4tXG4tRm9yIGVhY2ggZGV2aWNlIGNvbm5lY3RlZCB0byBhIFNQSSBidXMsIGRlZmluZSBhIGNoaWxkIG5vZGUgd2l0aGluXG4tdGhlIFNQSSBtYXN0ZXIgbm9kZS5cbi1cbi1SZXF1aXJlZCBwcm9wZXJ0aWVzOlxuLS0gY29tcGF0aWJsZTogU2hvdWxkIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHN0cmluZ3M6XG4tXHQgICAgICBcIndpem5ldCx3NTEwMFwiXG4tXHQgICAgICBcIndpem5ldCx3NTIwMFwiXG4tXHQgICAgICBcIndpem5ldCx3NTUwMFwiXG4tLSByZWc6IFNwZWNpZnkgdGhlIFNQSSBjaGlwIHNlbGVjdCB0aGUgY2hpcCBpcyB3aXJlZCB0by5cbi0tIGludGVycnVwdHM6IFNwZWNpZnkgdGhlIGludGVycnVwdCBpbmRleCB3aXRoaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyIChyZWZlcnJlZFxuLSAgICAgICAgICAgICAgdG8gYWJvdmUgaW4gaW50ZXJydXB0LXBhcmVudCkgYW5kIGludGVycnVwdCB0eXBlLiB3NXgwMCBuYXRpdmVseVxuLSAgICAgICAgICAgICAgZ2VuZXJhdGVzIGZhbGxpbmcgZWRnZSBpbnRlcnJ1cHRzLCBob3dldmVyLCBhZGRpdGlvbmFsIGJvYXJkIGxvZ2ljXG4tICAgICAgICAgICAgICBtaWdodCBpbnZlcnQgdGhlIHNpZ25hbC5cbi0tIHBpbmN0cmwtbmFtZXM6IExpc3Qgb2YgYXNzaWduZWQgc3RhdGUgbmFtZXMsIHNlZSBwaW5jdHJsIGJpbmRpbmcgZG9jdW1lbnRhdGlvbi5cbi0tIHBpbmN0cmwtMDogTGlzdCBvZiBwaGFuZGxlcyB0byBjb25maWd1cmUgdGhlIEdQSU8gcGluIHVzZWQgYXMgaW50ZXJydXB0IGxpbmUsXG4tICAgICAgICAgICAgIHNlZSBhbHNvIGdlbmVyaWMgYW5kIHlvdXIgcGxhdGZvcm0gc3BlY2lmaWMgcGluY3RybCBiaW5kaW5nXG4tICAgICAgICAgICAgIGRvY3VtZW50YXRpb24uXG4tXG4tT3B0aW9uYWwgcHJvcGVydGllczpcbi0tIHNwaS1tYXgtZnJlcXVlbmN5OiBNYXhpbXVtIGZyZXF1ZW5jeSBvZiB0aGUgU1BJIGJ1cyB3aGVuIGFjY2Vzc2luZyB0aGUgdzU1MDAuXG4tICBBY2NvcmRpbmcgdG8gdGhlIHc1NTAwIGRhdGFzaGVldCwgdGhlIGNoaXAgYWxsb3dzIGEgbWF4aW11bSBvZiA4MCBNSHosIGhvd2V2ZXIsXG4tICBib2FyZCBkZXNpZ25zIG1heSBuZWVkIHRvIGxpbWl0IHRoaXMgdmFsdWUuXG4tLSBsb2NhbC1tYWMtYWRkcmVzczogU2VlIGV0aGVybmV0LnR4dCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4tXG4tXG4tRXhhbXBsZSAoZm9yIFJhc3BiZXJyeSBQaSB3aXRoIHBpbiBjb250cm9sIHN0dWZmIGZvciBHUElPIGlycSk6XG4tXG4tXHUwMDI2c3BpIHtcbi1cdGV0aGVybmV0QDA6IHc1NTAwQDAge1xuLVx0XHRjb21wYXRpYmxlID0gXCJ3aXpuZXQsdzU1MDBcIjtcbi1cdFx0cmVnID0gXHUwMDNjMFx1MDAzZTtcbi1cdFx0cGluY3RybC1uYW1lcyA9IFwiZGVmYXVsdFwiO1xuLVx0XHRwaW5jdHJsLTAgPSBcdTAwM2NcdTAwMjZldGgxX3BpbnNcdTAwM2U7XG4tXHRcdGludGVycnVwdC1wYXJlbnQgPSBcdTAwM2NcdTAwMjZncGlvXHUwMDNlO1xuLVx0XHRpbnRlcnJ1cHRzID0gXHUwMDNjMjUgSVJRX1RZUEVfRURHRV9GQUxMSU5HXHUwMDNlO1xuLVx0XHRzcGktbWF4LWZyZXF1ZW5jeSA9IFx1MDAzYzMwMDAwMDAwXHUwMDNlO1xuLVx0fTtcbi19O1xuLVxuLVx1MDAyNmdwaW8ge1xuLVx0ZXRoMV9waW5zOiBldGgxX3BpbnMge1xuLVx0XHRicmNtLHBpbnMgPSBcdTAwM2MyNVx1MDAzZTtcbi1cdFx0YnJjbSxmdW5jdGlvbiA9IFx1MDAzYzBcdTAwM2U7IC8qIGluICovXG4tXHRcdGJyY20scHVsbCA9IFx1MDAzYzBcdTAwM2U7IC8qIG5vbmUgKi9cbi1cdH07XG4tfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jXG5pbmRleCA1M2Q4ZGM2NDJmYmQ2Li42NzA3YTZmMjczOTU0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jXG5AQCAtMjIsNiArMjIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnEuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2dwaW8vY29uc3VtZXIuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwidzUxMDAuaFwiXG4gXG5AQCAtMTI0LDYgKzEyNSw4IEBAIE1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuICAqL1xuICNkZWZpbmUgVzU1MDBfU0lNUlx0XHQweDAwMTggLyogU29ja2V0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovXG4gI2RlZmluZSBXNTUwMF9SVFJcdFx0MHgwMDE5IC8qIFJldHJ5IFRpbWUtdmFsdWUgUmVnaXN0ZXIgKi9cbisjZGVmaW5lIFc1NTAwX1BIWUNGR1JcdFx0MHgwMDJlIC8qICBQSFkgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqL1xuKyNkZWZpbmUgICBQSFlDRkdSX0xOS1x0XHQgIDB4MDEgLyogbGluayBzdGF0dXMgKi9cbiBcbiAjZGVmaW5lIFc1NTAwX1MwX1JFR1NcdFx0MHgxMDAwMFxuIFxuQEAgLTE1NCw2ICsxNTcsNyBAQCBzdHJ1Y3QgdzUxMDBfcHJpdiB7XG4gXHR1MTYgczBfcnhfYnVmX3NpemU7XG4gXG4gXHRpbnQgaXJxO1xuK1x0c3RydWN0IGdwaW9fZGVzYyAqbGlua19ncGlvO1xuIFxuIFx0c3RydWN0IG5hcGlfc3RydWN0IG5hcGk7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcbkBAIC00MTQsNiArNDE4LDE2IEBAIHN0YXRpYyB2b2lkIHc1MTAwX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0XHRzaXplb2YoaW5mby1cdTAwM2VidXNfaW5mbykpO1xuIH1cbiBcbitzdGF0aWMgdTMyIHc1MTAwX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuK3tcbitcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VvcHMtXHUwMDNlY2hpcF9pZCA9PSBXNTUwMClcbitcdFx0cmV0dXJuIHc1MTAwX3JlYWQocHJpdiwgVzU1MDBfUEhZQ0ZHUikgXHUwMDI2IFBIWUNGR1JfTE5LO1xuK1xuK1x0cmV0dXJuIDE7XG4rfVxuK1xuIHN0YXRpYyB1MzIgdzUxMDBfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIHtcbiBcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG5AQCAtNjE2LDYgKzYzMCwyNCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgdzUxMDBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKm5kZXZfaW5zdGFuY2UpXG4gXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4gfVxuIFxuK3N0YXRpYyBpcnFyZXR1cm5fdCB3NTEwMF9kZXRlY3RfbGluayhpbnQgaXJxLCB2b2lkICpuZGV2X2luc3RhbmNlKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gbmRldl9pbnN0YW5jZTtcbitcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXG4rXHRpZiAobmV0aWZfcnVubmluZyhuZGV2KSkge1xuK1x0XHRpZiAodzUxMDBfZ2V0X2xpbmsobmRldikpIHtcbitcdFx0XHRuZXRpZl9pbmZvKHByaXYsIGxpbmssIG5kZXYsIFwibGluayBpcyB1cFxcblwiKTtcbitcdFx0XHRuZXRpZl9jYXJyaWVyX29uKG5kZXYpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdG5ldGlmX2luZm8ocHJpdiwgbGluaywgbmRldiwgXCJsaW5rIGlzIGRvd25cXG5cIik7XG4rXHRcdFx0bmV0aWZfY2Fycmllcl9vZmYobmRldik7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiBJUlFfSEFORExFRDtcbit9XG4rXG4gc3RhdGljIHZvaWQgdzUxMDBfc2V0cnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IHc1MTAwX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHc1MTAwX3ByaXYsXG5AQCAtNjU5LDYgKzY5MSwxMiBAQCBzdGF0aWMgaW50IHc1MTAwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHR3NTEwMF9od19zdGFydChwcml2KTtcbiBcdG5hcGlfZW5hYmxlKFx1MDAyNnByaXYtXHUwMDNlbmFwaSk7XG4gXHRuZXRpZl9zdGFydF9xdWV1ZShuZGV2KTtcbitcbitcdGlmICh3NTEwMF9nZXRfbGluayhuZGV2KSlcbitcdFx0bmV0aWZfY2Fycmllcl9vbihuZGV2KTtcbitcdGVsc2VcbitcdFx0bmV0aWZfY2Fycmllcl9vZmYobmRldik7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNjc4LDYgKzcxNiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdzUxMDBfZXRodG9vbF9vcHMgPSB7XG4gXHQuZ2V0X2RydmluZm9cdFx0PSB3NTEwMF9nZXRfZHJ2aW5mbyxcbiBcdC5nZXRfbXNnbGV2ZWxcdFx0PSB3NTEwMF9nZXRfbXNnbGV2ZWwsXG4gXHQuc2V0X21zZ2xldmVsXHRcdD0gdzUxMDBfc2V0X21zZ2xldmVsLFxuK1x0LmdldF9saW5rXHRcdD0gdzUxMDBfZ2V0X2xpbmssXG4gXHQuZ2V0X3JlZ3NfbGVuXHRcdD0gdzUxMDBfZ2V0X3JlZ3NfbGVuLFxuIFx0LmdldF9yZWdzXHRcdD0gdzUxMDBfZ2V0X3JlZ3MsXG4gfTtcbkBAIC03NTEsNiArNzkwLDEzIEBAIGludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcbiBcdHByaXYtXHUwMDNlbmRldiA9IG5kZXY7XG4gXHRwcml2LVx1MDAzZW9wcyA9IG9wcztcbiBcdHByaXYtXHUwMDNlaXJxID0gaXJxO1xuK1x0cHJpdi1cdTAwM2VsaW5rX2dwaW8gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChkZXYsIFwibGlua1wiLCBHUElPRF9JTik7XG4rXHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlbGlua19ncGlvKSkge1xuK1x0XHRlcnIgPSBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZWxpbmtfZ3BpbyksXG4rXHRcdFx0XHQgICAgXCJmYWlsZWQgdG8gZ2V0IGxpbmsgR1BJT1xcblwiKTtcbitcdFx0cHJpdi1cdTAwM2VsaW5rX2dwaW8gPSBOVUxMO1xuK1x0XHRnb3RvIGVycl9yZWdpc3RlcjtcbitcdH1cbiBcbiBcdG5kZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNnc1MTAwX25ldGRldl9vcHM7XG4gXHRuZGV2LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2dzUxMDBfZXRodG9vbF9vcHM7XG5AQCAtODAzLDggKzg0OSwyOSBAQCBpbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9odztcbiBcbitcdGlmIChwcml2LVx1MDAzZWxpbmtfZ3Bpbykge1xuK1x0XHRpbnQgbGlua19pcnEgPSBncGlvZF90b19pcnEocHJpdi1cdTAwM2VsaW5rX2dwaW8pO1xuK1xuK1x0XHRpZiAobGlua19pcnEgXHUwMDNjIDApIHtcbitcdFx0XHRlcnIgPSBkZXZfZXJyX3Byb2JlKGRldiwgbGlua19pcnEsXG4rXHRcdFx0XHRcdCAgICBcIk5vIGNvcnJlc3BvbmRpbmcgaXJxIGZvciBsaW5rIGdwaW9cXG5cIik7XG4rXHRcdFx0Z290byBlcnJfZ3BpbztcbitcdFx0fVxuK1xuK1x0XHRlcnIgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgbGlua19pcnEsIE5VTEwsXG4rXHRcdFx0XHRcdFx0dzUxMDBfZGV0ZWN0X2xpbmssXG4rXHRcdFx0XHRcdFx0SVJRRl9UUklHR0VSX1JJU0lORyB8XG4rXHRcdFx0XHRcdFx0SVJRRl9UUklHR0VSX0ZBTExJTkcgfFxuK1x0XHRcdFx0XHRcdElSUUZfT05FU0hPVCxcbitcdFx0XHRcdFx0XHRcInc1MTAwLWxpbmtcIiwgcHJpdi1cdTAwM2VuZGV2KTtcbitcdFx0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9ncGlvO1xuK1x0fVxuK1xuIFx0cmV0dXJuIDA7XG4gXG4rZXJyX2dwaW86XG4rXHRmcmVlX2lycShwcml2LVx1MDAzZWlycSwgbmRldik7XG4gZXJyX2h3OlxuIFx0ZGVzdHJveV93b3JrcXVldWUocHJpdi1cdTAwM2V4ZmVyX3dxKTtcbiBlcnJfd3E6XG5AQCAtODU3LDYgKzkyNCw5IEBAIHN0YXRpYyBpbnQgdzUxMDBfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdFx0dzUxMDBfaHdfc3RhcnQocHJpdik7XG4gXG4gXHRcdG5ldGlmX2RldmljZV9hdHRhY2gobmRldik7XG4rXG4rXHRcdGlmICh3NTEwMF9nZXRfbGluayhuZGV2KSlcbitcdFx0XHRuZXRpZl9jYXJyaWVyX29uKG5kZXYpO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTg6MDU6MjIuNTYyNTAwMTM4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE4ODc1Mzg2MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBXaXpuZXQgVzU1MDAgTGluayBTdGF0dXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBwYXRjaCBmb3IgdGhlIFdpem5ldCBXNTEwMC9XNTIwMC9XNTUwMCBTUEkgRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIuIEl0J3MgYWRkaW5nIGxpbmsgc3RhdHVzIGRldGVjdGlvbiwgd2hpY2ggaXMgZ29vZC4gVGhleSd2ZSBpbXBsZW1lbnRlZCBhIGBsaW5rLWdwaW9zYCBwcm9wZXJ0eSBpbiB0aGUgZGV2aWNlIHRyZWUgYmluZGluZywgcmVhZCB0aGUgbGluayBzdGF0dXMgZnJvbSB0aGUgUEhZQ0ZHUiByZWdpc3RlciBmb3IgdGhlIFc1NTAwLCBhbmQgYXJlIHVzaW5nIGEgdGhyZWFkZWQgSVJRIGZvciBsaW5rIGNoYW5nZXMuIFRoZXkndmUgYWxzbyBpbXBsZW1lbnRlZCBgdzUxMDBfZ2V0X2xpbmtgIGFuZCBpbnRlZ3JhdGVkIGl0IGludG8gYGV0aHRvb2xfb3BzYCwgYW5kIHVwZGF0ZWQgdGhlIGBvcGVuYCBhbmQgYHJlc3VtZWAgZnVuY3Rpb25zIHRvIGNoZWNrIHRoZSBsaW5rLiBTdGFuZGFyZCBzdHVmZiwgc28gZmFyLlxuXG5CdXQgd2FpdCwgdGhlIHJlYWwgcXVlc3Rpb24gaGVyZSBpczogKmNhbiB3ZSBhY3R1YWxseSB0ZXN0IHRoaXMgZWZmZWN0aXZlbHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8qIFRoaXMgaXMgYW4gU1BJIEV0aGVybmV0IGNvbnRyb2xsZXIsIGFuZCBTUEkgaXMgbm90b3Jpb3VzbHkgdHJpY2t5IGZvciBlbXVsYXRpb24uIENhbiBRRU1VIGV2ZW4gKnNlZSogdGhpcz8gVHlwaWNhbGx5LCBTUEkgZGV2aWNlcyBhcmVuJ3QgZWFzaWx5IGVtdWxhdGVkIG9yIGZ1enplZCB1bmxlc3MgdGhlcmUncyBhIHNwZWNpZmljIFFFTVUgZGV2aWNlIG1vZGVsIGZvciB0aGVtLCBvciB3ZSBjYW4gc29tZWhvdyBmdXp6IHRoZSBTUEkgc3Vic3lzdGVtIGl0c2VsZi5cblxuSSBrbm93IFN5emthbGxlciBjYW4gc29tZXRpbWVzIGZ1enogU1BJIGRldmljZXMgdXNpbmcgYHZoY2lgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBpZiBpdCdzIGF2YWlsYWJsZSwgYnV0IGdlbmVyYWxseSwgU1BJIGRldmljZXMgYXJlIHByZXR0eSBoYXJkd2FyZS1zcGVjaWZpYy4gSSBrZWVwIHRoaW5raW5nLCBkb2Vzbid0IFN5emthbGxlciBoYXZlICpzb21lKiBTUEkgc3VwcG9ydD8gTm8sIG5vdCByZWFsbHkuIEl0IGRvZXNuJ3QgaGF2ZSBhIGdlbmVyaWMgU1BJIGZ1enplciB0aGF0IGNhbiBqdXN0ICpjcmVhdGUqIGFyYml0cmFyeSBTUEkgZGV2aWNlcywgdW5sZXNzIGl0J3MgdGhyb3VnaCBzcGlkZXYsIGJ1dCB0aGlzIGlzIGEgbmV0IGRldmljZSBkcml2ZXIsIHdoaWNoIHVzdWFsbHkgcmVxdWlyZXMgYSBzcGVjaWZpYyBTUEkgZGV2aWNlIGlkZW50aWZpZWQgdmlhIGEgZGV2aWNlIHRyZWUgb3IgYm9hcmQgY29kZS5cblxuU28sIHRoZSBkcml2ZXIgKmhhcyogdG8gYmUgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIHJpZ2h0PyBJIG1lYW4sIGhvdyBlbHNlIGFyZSB3ZSBnb2luZyB0byB0ZXN0IHRoaXM/IEl0IG5lZWRzIGEgZGV2aWNlIHRyZWUgbm9kZSB3aXRoIGBjb21wYXRpYmxlID0gXCJ3aXpuZXQsdzU1MDBcImAgYW5kIHNvIG9uLCBidXQgaXQncyBhbiBTUEkgZGV2aWNlLiBVbmxlc3MgdGhlcmUncyBhIHdheSB0byBpbnN0YW50aWF0ZSBTUEkgZGV2aWNlcyAocGVyaGFwcyBkZXZpY2UgdHJlZSBvdmVybGF5cyBvciBzb21ldGhpbmcgdGhyb3VnaCBzeXNmcyksIHdlJ3JlIHByb2JhYmx5IGRlYWQgaW4gdGhlIHdhdGVyLiBEb2VzIFN5emthbGxlciB1c2Ugc3lzZnMgb3IgbmV0bGluayB0byBpbnN0YW50aWF0ZSBkZXZpY2VzPyBObywgdGhhdCdzIG5vdCBob3cgU1BJIGRldmljZXMgYXJlIHR5cGljYWxseSBoYW5kbGVkLiBUaGV54oCZcmUgdXN1YWxseSBpbnN0YW50aWF0ZWQgYnkgRFQgb3IgYm9hcmQgZmlsZXMuXG5cbkhhbmcgb27igKZtYXliZSBTeXprYWxsZXIgY291bGQgdXNlIGBzeXpfZ2VuZXRsaW5rYCBvciBzb21ldGhpbmcsIGJ1dCBmb3IgU1BJLCB0aGVyZSdzIG5vIGdlbmVyaWMgd2F5IHRvIGFkZCBkZXZpY2VzIGZyb20gdXNlcnNwYWNlIHVubGVzcyB0aGVyZSdzIGEgc3BlY2lmaWMgZHJpdmVyIHRvIGRvIHNvLlxuXG5Ib2xkIG9uLCB3aGF0IGlmIHRoaXMgZHJpdmVyIGlzIGEgKnBsYXRmb3JtKiBkcml2ZXI/IE5vLCBpdCdzIGFuIFNQSSBkcml2ZXIuIE9rYXksIGxldCdzIGxvb2sgYXQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuY2AgYW5kIG90aGVyIGZpbGVzIGxpa2UgdGhhdC4gVGhlIHBhdGNoIG1vZGlmaWVzIGB3NTEwMC5jYCwgd2hpY2ggaXMgdGhlIGNvcmUsIGJ1dCB0aGUgcHJvYmUgaXMgY2FsbGVkIGZyb20gYHc1MTAwX3NwaS5jYCBvciBgdzUxMDBfbW1pby5jYCwgcmlnaHQ/IEkgc2hvdWxkIHJlYWxseSBqdXN0IGNoZWNrIHRoZSBrZXJuZWwgc291cmNlIGZvciBgdzUxMDAuY2AgdG8gZmlndXJlIG91dCBob3cgdGhpcyBpcyBldmVuIGJlaW5nIHByb2JlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI3NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE4OjA1OjM0LjQ1MDA0MjEzNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIwODM3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidzUxMDBfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmM9NDIxPXN0YXRpYyBpbnQgdzUxMDBfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmMtNDUyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYzo0NTM6XFx0cmV0dXJuIHc1MTAwX3Byb2JlKFxcdTAwMjZzcGktXFx1MDAzZWRldiwgb3BzLCBwcml2X3NpemUsIG1hYywgc3BpLVxcdTAwM2VpcnEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYy00NTQtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM9NzM5PUVYUE9SVF9TWU1CT0xfR1BMKHc1MTAwX29wc19wcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy03NDAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6NzQxOmludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy03NDItXFx0XFx0aW50IHNpemVvZl9vcHNfcHJpdiwgY29uc3Qgdm9pZCAqbWFjX2FkZHIsIGludCBpcnEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy04ODItfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jOjg4MzpFWFBPUlRfU1lNQk9MX0dQTCh3NTEwMF9wcm9iZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtODg0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmg9Mjk9dm9pZCAqdzUxMDBfb3BzX3ByaXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5oLTMwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5oOjMxOmludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuaC0zMi1cXHRcXHRpbnQgc2l6ZW9mX29wc19wcml2LCBjb25zdCB2b2lkICptYWNfYWRkciwgaW50IGlycSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE4OjA1OjM0LjU1MjEzMTIyMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4Mzc1NDQyMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipEZWJ1Z2dpbmcgTmV0d29yayBJbnRlcmZhY2UgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gc2VlaW5nIHRoaXMgYHc1MTAwLXNwaS5jYCBmaWxlIGFuZCwgbGlrZWx5LCBvdGhlciByZWxhdGVkIG9uZXMgaW52b2x2ZWQgaW4gaW5pdGlhbGl6aW5nIGEgbmV0d29yayBpbnRlcmZhY2UuIFRoZSBxdWVzdGlvbiBpbiBteSBtaW5kIGlzLCB3aGF0IHNwZWNpZmljYWxseSB0cmlnZ2VycyB0aGUgcHJvYmluZyBvZiB0aGlzIFc1MTAwIGRldmljZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGtub3cgKndoYXQqIGNhbGxzIHRoZSBgdzUxMDBfcHJvYmVgIGZ1bmN0aW9uLiBJIHdpbGwgY2hlY2sgdGhlIGNvZGViYXNlIHRvIGlkZW50aWZ5IGFsbCBvZiB0aGUgb3RoZXIgY2FsbCBzaXRlcyBmb3IgdGhhdCBmdW5jdGlvbi4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50cyBvZiB0aGUgZGV2aWNlIGRyaXZlciBpbiB0aGUgc3lzdGVtIGFuZCBoZWxwIG1lIHRyYWNlIHRocm91Z2ggdGhlIGZsb3cgb2YgZXhlY3V0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGludGVyYWN0aW9ucyBpcyBrZXkgdG8gcGlucG9pbnRpbmcgYW55IHBvdGVudGlhbCBwcm9ibGVtcyBpbiB0aGUgYnJpbmctdXAgcHJvY2VzcyBvciBsYXRlciBvcGVyYXRpb24uIFRoaXMgaXMgYmFzaWMsIGJ1dCBuZWNlc3NhcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMjEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxODowNTozOS4zODk2ODE4NjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0MzMzNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidzUxMDBfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmM9NDIxPXN0YXRpYyBpbnQgdzUxMDBfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmMtNDUyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYzo0NTM6XFx0cmV0dXJuIHc1MTAwX3Byb2JlKFxcdTAwMjZzcGktXFx1MDAzZWRldiwgb3BzLCBwcml2X3NpemUsIG1hYywgc3BpLVxcdTAwM2VpcnEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYy00NTQtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM9NzM5PUVYUE9SVF9TWU1CT0xfR1BMKHc1MTAwX29wc19wcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy03NDAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6NzQxOmludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy03NDItXFx0XFx0aW50IHNpemVvZl9vcHNfcHJpdiwgY29uc3Qgdm9pZCAqbWFjX2FkZHIsIGludCBpcnEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy04ODItfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jOjg4MzpFWFBPUlRfU1lNQk9MX0dQTCh3NTEwMF9wcm9iZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtODg0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmg9Mjk9dm9pZCAqdzUxMDBfb3BzX3ByaXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5oLTMwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5oOjMxOmludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuaC0zMi1cXHRcXHRpbnQgc2l6ZW9mX29wc19wcml2LCBjb25zdCB2b2lkICptYWNfYWRkciwgaW50IGlycSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE4OjA1OjM5LjQ0MzEyNDAyOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NDY0MTg2MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFdJWm5ldCBEcml2ZXIgSW50ZWdyYXRpb24qKlxuXG5IbW0sIHdhaXQgYSBzZWNvbmQuLi4gYmVmb3JlIEkgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBuZXR3b3JraW5nIGlzc3VlLCBJIHNob3VsZCBxdWlja2x5IGNoZWNrIHNvbWV0aGluZyBmdW5kYW1lbnRhbC4gSXMgdGhlcmUgYSBwbGF0Zm9ybSBkcml2ZXIgaW52b2x2ZWQgaGVyZSwgb3IgYW0gSSBtaXNzaW5nIHNvbWV0aGluZyB1cHN0cmVhbT8gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBmb3VuZGF0aW9uIG9mIGhvdyB0aGlzIFdJWm5ldCBkZXZpY2UgaXMgaGFuZGxlZCBpbiB0aGUga2VybmVsLiBMZXQncyBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUgYmVmb3JlIGdvaW5nIGFueSBmdXJ0aGVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hlcmUgdGhlIFdJWm5ldCBkcml2ZXIgaXMgbG9jYXRlZC4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgc3RhbmRhcmQgcGF0aHMuLi4gaXMgaXQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTMwMC5jYD8gT3IgbWF5YmUgaXQncyB0aGUgb2xkZXIsIGFuZCBwcm9iYWJseSBzdGlsbCByZWxldmFudCwgYHc1MTAwLmNgPyBUaGF0J2xsIGJlIG15IHN0YXJ0aW5nIHBvaW50IHRvIHNlZSBob3cgdGhlIGRldmljZSBpcyByZWdpc3RlcmVkIGFuZCBtYW5hZ2VkLiBJIG5lZWQgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZSBmaXJzdCFcblxuXG4iLCJJbnB1dFRva2VucyI6NzkzMCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE4OjA1OjQ3LjE4OTU0NDk2OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcInc1MTAwLXNwaS5jXCIsXG4gICAgXCJ3NTEwMC5jXCIsXG4gICAgXCJ3NTEwMC5oXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE4OjA1OjQ3LjE4OTU5NzA1OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NzEzNzc2NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBQbGFuIG9mIEF0dGFjayoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGB3NTEwMC1zcGkuY2AsIHdoaWNoIHRlbGxzIG1lIHRoaXMgaXMgKmRlZmluaXRlbHkqIGFuIFNQSSBkZXZpY2UuIFRoYXQncyBnb29kIGluZm9ybWF0aW9uLCBidXQgaXQgcmFpc2VzIHNvbWUgcXVlc3Rpb25zIGFib3V0IGhvdyB3ZSBpbnRlZ3JhdGUgaXQgaW50byBTeXprYWxsZXIuIENhbiB3ZSBldmVuIGluc3RhbnRpYXRlIGFuZCBmdXp6IFNQSSBkZXZpY2VzIGRpcmVjdGx5IHdpdGhpbiBTeXprYWxsZXIncyBmcmFtZXdvcms/XG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IFN5emthbGxlciBwcm9iYWJseSBkb2Vzbid0IGhhdmUgYSBnZW5lcmljIG1lY2hhbmlzbSB0byBjcmVhdGUgYXJiaXRyYXJ5IFNQSSBkZXZpY2VzLiBVbmxlc3MgdGhlcmUncyBhIHNwZWNpZmljIHBzZXVkby1kZXZpY2UgZGVmaW5lZCBmb3IgaXQsIG9yIHdlIHJlbHkgb24gYHNwaWRldmAsIHdoaWNoIG9ubHkgb2ZmZXJzIHVzZXJzcGFjZSBhY2Nlc3Mg4oCTIG5vdCB0aGUga2VybmVsIGRyaXZlciBpbnN0YW50aWF0aW9uIHRoYXQgd2UgbmVlZCBmb3IgcHJvcGVyIGZ1enppbmcuIFRoYXQncyBhIG5vbi1zdGFydGVyLlxuXG5XYWl0IGEgbWludXRlLi4uIGNvdWxkIHdlIGxldmVyYWdlIHN5c2ZzPyBUaGF0J3MgYSBtdWNoIG1vcmUgZWxlZ2FudCBzb2x1dGlvbi4gVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGUgU1BJIHN1YnN5c3RlbSBhbGxvd3MgdXMgdG8gaW5zdGFudGlhdGUgZGV2aWNlcyB0aHJvdWdoIHN5c2ZzLCBpbiBhIHNpbWlsYXIgd2F5IHRvIGhvdyBJMkMgdXNlcyBgbmV3X2RldmljZWAuIElmIHRoYXTigJlzIHBvc3NpYmxlLCBpdCB3b3VsZCBwcm92aWRlIGEgY2xlYW4gd2F5IHRvIGludGVncmF0ZSB0aGlzIGludG8gdGhlIGZ1enppbmcgaGFybmVzcy4gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgU1BJIHN1YnN5c3RlbSBmb3Igc29tZXRoaW5nIGxpa2UgYW4gYG5ld19kZXZpY2VgIGVxdWl2YWxlbnQgdG8gc2VlIGlmIGl0IGFsbG93cyB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjUxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI4LCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxODowNTo1Mi45NjA5NzcwNTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MDM4MjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ld19kZXZpY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zcGkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvc3BpL3NwaS1hbHRlcmEtZGZsLmM9MTI0PXN0YXRpYyBpbnQgZGZsX3NwaV9hbHRlcmFfcHJvYmUoc3RydWN0IGRmbF9kZXZpY2UgKmRmbF9kZXYpXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktYWx0ZXJhLWRmbC5jLTE3NC1cXG5kcml2ZXJzL3NwaS9zcGktYWx0ZXJhLWRmbC5jOjE3NTpcXHRpZiAoIXNwaV9uZXdfZGV2aWNlKGhvc3QsIFxcdTAwMjZib2FyZF9pbmZvKSkge1xcbmRyaXZlcnMvc3BpL3NwaS1hbHRlcmEtZGZsLmMtMTc2LVxcdFxcdGRldl9lcnIoZGV2LCBcXFwiJXMgZmFpbGVkIHRvIGNyZWF0ZSBTUEkgZGV2aWNlOiAlc1xcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1hbHRlcmEtcGxhdGZvcm0uYz0zNT1zdGF0aWMgaW50IGFsdGVyYV9zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1hbHRlcmEtcGxhdGZvcm0uYy0xMTktXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBkYXRhLVxcdTAwM2VudW1fZGV2aWNlczsgaSsrKSB7XFxuZHJpdmVycy9zcGkvc3BpLWFsdGVyYS1wbGF0Zm9ybS5jOjEyMDpcXHRcXHRcXHRpZiAoIXNwaV9uZXdfZGV2aWNlKGhvc3QsIHBkYXRhLVxcdTAwM2VkZXZpY2VzICsgaSkpXFxuZHJpdmVycy9zcGkvc3BpLWFsdGVyYS1wbGF0Zm9ybS5jLTEyMS1cXHRcXHRcXHRcXHRkZXZfd2FybihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWJ1dHRlcmZseS5jPTE3Nj1zdGF0aWMgdm9pZCBidXR0ZXJmbHlfYXR0YWNoKHN0cnVjdCBwYXJwb3J0ICpwKVxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWJ1dHRlcmZseS5jLTI2NS1cXHRwcC1cXHUwMDNlaW5mb1swXS5jb250cm9sbGVyX2RhdGEgPSBwcDtcXG5kcml2ZXJzL3NwaS9zcGktYnV0dGVyZmx5LmM6MjY2OlxcdHBwLVxcdTAwM2VkYXRhZmxhc2ggPSBzcGlfbmV3X2RldmljZShwcC1cXHUwMDNlYml0YmFuZy5jdGxyLCBcXHUwMDI2cHAtXFx1MDAzZWluZm9bMF0pO1xcbmRyaXZlcnMvc3BpL3NwaS1idXR0ZXJmbHkuYy0yNjctXFx0aWYgKHBwLVxcdTAwM2VkYXRhZmxhc2gpXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktY2gzNDEuYz0xNDE9c3RhdGljIGludCBjaDM0MV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1jaDM0MS5jLTIwNi1cXG5kcml2ZXJzL3NwaS9zcGktY2gzNDEuYzoyMDc6XFx0Y2gzNDEtXFx1MDAzZXNwaWRldiA9IHNwaV9uZXdfZGV2aWNlKGN0cmwsIFxcdTAwMjZjaGlwKTtcXG5kcml2ZXJzL3NwaS9zcGktY2gzNDEuYy0yMDgtXFx0aWYgKCFjaDM0MS1cXHUwMDNlc3BpZGV2KSB7XFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktY3M0Mmw0My5jPTMxMj1zdGF0aWMgaW50IGNzNDJsNDNfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktY3M0Mmw0My5jLTQyNi1cXG5kcml2ZXJzL3NwaS9zcGktY3M0Mmw0My5jOjQyNzpcXHRcXHRpZiAoIXNwaV9uZXdfZGV2aWNlKHByaXYtXFx1MDAzZWN0bHIsIGFtcGxfaW5mbykpXFxuZHJpdmVycy9zcGkvc3BpLWNzNDJsNDMuYy00MjgtXFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHJpdi1cXHUwMDNlZGV2LCAtRU5PREVWLFxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWNzNDJsNDMuYy00MzAtXFxuZHJpdmVycy9zcGkvc3BpLWNzNDJsNDMuYzo0MzE6XFx0XFx0aWYgKCFzcGlfbmV3X2RldmljZShwcml2LVxcdTAwM2VjdGxyLCBhbXByX2luZm8pKVxcbmRyaXZlcnMvc3BpL3NwaS1jczQybDQzLmMtNDMyLVxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHByaXYtXFx1MDAzZWRldiwgLUVOT0RFVixcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jPTEzNzU9c3RhdGljIGludCBpbnRlbF9zcGlfcG9wdWxhdGVfY2hpcChzdHJ1Y3QgaW50ZWxfc3BpICppc3BpKVxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWludGVsLmMtMTQwMS1cXG5kcml2ZXJzL3NwaS9zcGktaW50ZWwuYzoxNDAyOlxcdGlmICghc3BpX25ld19kZXZpY2UoaXNwaS1cXHUwMDNlaG9zdCwgXFx1MDAyNmNoaXApKVxcbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jLTE0MDMtXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktaW50ZWwuYy0xNDMwLVxcbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jOjE0MzE6XFx0aWYgKCFzcGlfbmV3X2RldmljZShpc3BpLVxcdTAwM2Vob3N0LCBcXHUwMDI2Y2hpcCkpXFxuZHJpdmVycy9zcGkvc3BpLWludGVsLmMtMTQzMi1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1rc3BpMi5jPTMxMD1zdGF0aWMgaW50IGtzcGkyX3JlZ2lzdGVyX2RldmljZXMoc3RydWN0IGtzcGkyICprc3BpKVxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWtzcGkyLmMtMzE2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBrc3BpLVxcdTAwM2VhdXhkZXYtXFx1MDAzZWluZm9fc2l6ZTsgaSsrKSB7XFxuZHJpdmVycy9zcGkvc3BpLWtzcGkyLmM6MzE3OlxcdFxcdHN0cnVjdCBzcGlfZGV2aWNlICpkZXZpY2UgPSBzcGlfbmV3X2RldmljZShrc3BpLVxcdTAwM2Vob3N0LCBcXHUwMDI2aW5mb1tpXSk7XFxuZHJpdmVycy9zcGkvc3BpLWtzcGkyLmMtMzE4LVxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWxtNzBsbHAuYz0xODg9c3RhdGljIHZvaWQgc3BpX2xtNzBsbHBfYXR0YWNoKHN0cnVjdCBwYXJwb3J0ICpwKVxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWxtNzBsbHAuYy0yNjYtXFx0cHAtXFx1MDAzZWluZm8uY29udHJvbGxlcl9kYXRhID0gcHA7XFxuZHJpdmVycy9zcGkvc3BpLWxtNzBsbHAuYzoyNjc6XFx0cHAtXFx1MDAzZXNwaWRldl9sbTcwID0gc3BpX25ld19kZXZpY2UocHAtXFx1MDAzZWJpdGJhbmcuY3RsciwgXFx1MDAyNnBwLVxcdTAwM2VpbmZvKTtcXG5kcml2ZXJzL3NwaS9zcGktbG03MGxscC5jLTI2OC1cXHRpZiAocHAtXFx1MDAzZXNwaWRldl9sbTcwKVxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWxtNzBsbHAuYy0yNzEtXFx0ZWxzZSB7XFxuZHJpdmVycy9zcGkvc3BpLWxtNzBsbHAuYzoyNzI6XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNnBkLVxcdTAwM2VkZXYsIFxcXCJzcGlfbmV3X2RldmljZSBmYWlsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvc3BpL3NwaS1sbTcwbGxwLmMtMjczLVxcdFxcdHN0YXR1cyA9IC1FTk9ERVY7XFxuLS1cXG5kcml2ZXJzL3NwaS9zcGkteGlsaW54LmM9NDAyPXN0YXRpYyBpbnQgeGlsaW54X3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLXhpbGlueC5jLTUwOS1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcGRhdGEtXFx1MDAzZW51bV9kZXZpY2VzOyBpKyspXFxuZHJpdmVycy9zcGkvc3BpLXhpbGlueC5jOjUxMDpcXHRcXHRcXHRzcGlfbmV3X2RldmljZShob3N0LCBwZGF0YS1cXHUwMDNlZGV2aWNlcyArIGkpO1xcbmRyaXZlcnMvc3BpL3NwaS14aWxpbnguYy01MTEtXFx0fVxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLmM9NzkxPUVYUE9SVF9TWU1CT0xfR1BMKHNwaV9hZGRfZGV2aWNlKTtcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS5jLTc5My0vKipcXG5kcml2ZXJzL3NwaS9zcGkuYzo3OTQ6ICogc3BpX25ld19kZXZpY2UgLSBpbnN0YW50aWF0ZSBvbmUgbmV3IFNQSSBkZXZpY2VcXG5kcml2ZXJzL3NwaS9zcGkuYy03OTUtICogQGN0bHI6IENvbnRyb2xsZXIgdG8gd2hpY2ggZGV2aWNlIGlzIGNvbm5lY3RlZFxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLmMtODA2LSAqL1xcbmRyaXZlcnMvc3BpL3NwaS5jOjgwNzpzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpX25ld19kZXZpY2Uoc3RydWN0IHNwaV9jb250cm9sbGVyICpjdGxyLFxcbmRyaXZlcnMvc3BpL3NwaS5jLTgwOC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqY2hpcClcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS5jLTg2Mi19XFxuZHJpdmVycy9zcGkvc3BpLmM6ODYzOkVYUE9SVF9TWU1CT0xfR1BMKHNwaV9uZXdfZGV2aWNlKTtcXG5kcml2ZXJzL3NwaS9zcGkuYy04NjQtXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGkuYz04OTM9c3RhdGljIHZvaWQgc3BpX21hdGNoX2NvbnRyb2xsZXJfdG9fYm9hcmRpbmZvKHN0cnVjdCBzcGlfY29udHJvbGxlciAqY3RscixcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS5jLTkwMC1cXG5kcml2ZXJzL3NwaS9zcGkuYzo5MDE6XFx0ZGV2ID0gc3BpX25ld19kZXZpY2UoY3RsciwgYmkpO1xcbmRyaXZlcnMvc3BpL3NwaS5jLTkwMi1cXHRpZiAoIWRldilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTg6MDU6NTMuMDE2MDIxMjI1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5NTAxNzE2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVzUxMDAgU1BJIERyaXZlciBpbiBTeXprYWxsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhlIFc1MTAwIFNQSSBkcml2ZXIgd2l0aGluIHN5emthbGxlci4gVGhlIGltbWVkaWF0ZSBodXJkbGUgaXMgdGhhdCB0aGVyZSBpc24ndCBhIGRpcmVjdCBzeXNmcyBhdHRyaWJ1dGUgbGlrZSBgbmV3X2RldmljZWAgZm9yIFNQSSwgc2ltaWxhciB0byB3aGF0IHdlIGhhdmUgd2l0aCBJMkMgKHRoYW5rcywgYGkyYy1zeXNmcy5jYCEpLiBUaGF0J3MgYSBuby1nby5cblxuTXkgZmlyc3QgdGhvdWdodCB3YXMsIFwiV2FpdCwgZG9lc24ndCBzeXprYWxsZXIgaGF2ZSBzb21lIHRyaWNrZXJ5IHdpdGggZGV2aWNlIHRyZWUgb3ZlcmxheXM/XCIgQnV0IHF1aWNrbHkgSSByZW1lbWJlciwgbm8sIHN5emthbGxlciBkb2Vzbid0IHN1cHBvcnQgZHluYW1pY2FsbHkgbG9hZGluZyBEVCBvdmVybGF5cyBkdXJpbmcgZnV6emluZy4gVGhhdCB3b3VsZCBiZSAqd2F5KiB0b28gY29tcGxleC5cblxuVGhlbiwgSSBzdGFydGVkIHRvIHRoaW5rIGlmIHRoZXJlIHdhcyBhbiBlcXVpdmFsZW50IHRvIHRoZSBleGlzdGluZyBwcmltaXRpdmVzLCBsaWtlIGBzeXpfdXNiX2Nvbm5lY3RgLCBgc3l6XzgwMjExX2pvaW5faWJzc2AsIGBzeXpfZ2VuZXRsaW5rYCwgb3IgYHN5el92aGNpYCwgdGhhdCB3b3JrIGZvciBVU0IsIG1hYzgwMjExLCBuZXRsaW5rIGFuZCBibHVldG9vdGguIEJ1dCBubywgdGhlcmUncyBubyBlcXVpdmFsZW50IGBzeXpfc3BpX2Nvbm5lY3RgLiBUaGF0IHdvdWxkIGJlIHRvbyBlYXN5IVxuXG5Pa2F5LCBuZXcgYW5nbGUuIFdoYXQgYWJvdXQgc29tZSBvdGhlciB3YXkgdG8gaW5zdGFudGlhdGUgdGhlIGRyaXZlcj8gQnV0LCBzaW5jZSBpdCdzIGFuIFNQSSBkcml2ZXIsIHRoYXQncyB1bmxpa2VseS5cblxuTm93LCBsZXQncyB0YWtlIGEgbG9vay4gQ2FuIHdlIGV2ZW4gKnJlYWNoKiBgdzUxMDBfcHJvYmVgIGluIHRoZSBzdGFuZGFyZCBzeXprYWxsZXIgc2V0dXA/IEl0J3MgYW4gU1BJIGRyaXZlciwgd2hpY2ggbWVhbnMgaXQgcmVsaWVzIG9uIGFuIFNQSSBkZXZpY2UgYmVpbmcgcmVnaXN0ZXJlZCBzb21ld2hlcmUsIHNvbWVob3cuIFNQSSBkZXZpY2VzIGdldCByZWdpc3RlcmVkIHZpYSBTUEkgY29udHJvbGxlcnMsIHBhcnNpbmcgZGV2aWNlIHRyZWVzLCBBQ1BJIHRhYmxlcywgb3IgYm9hcmQgZmlsZXMuXG5cbkFuZCBoZXJlJ3Mgd2hlcmUgaXQgZ2V0cyB0cmlja3kuIEluIGEgdHlwaWNhbCB4ODZfNjQgVk0sIGxpa2UgdGhlIG9uZSB3ZSdyZSB1c2luZyB3aXRoIFFFTVUsIHRoZXJlJ3Mgbm8gU1BJIGNvbnRyb2xsZXIgdGhhdCBjYW4gcGFyc2UgYXJiaXRyYXJ5IERUIG5vZGVzLiBVbmxlc3Mgd2Ugd2VyZSBvbiBhbiBBUk0gYm9hcmQgd2l0aCBhIERULCBidXQgZXZlbiB0aGVuLCB0aGUgRFQgaXMgc3RhdGljLiBTbywgdGhlIGJvdHRvbSBsaW5lIGlzIGB3NTEwMF9wcm9iZWAgaXMgdW5yZWFjaGFibGUgaW4gbW9zdCBzdGFuZGFyZCBzeXprYWxsZXIgZW52aXJvbm1lbnRzLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBgdzUxMDBgIGNhbid0IGJlIGluc3RhbnRpYXRlZCB2aWEgc29tZSBvdGhlciBidXMgSSdtIGZvcmdldHRpbmcgYWJvdXQuIEJ1dCBJJ20gcHJldHR5IHN1cmUgd2UncmUgc3R1Y2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDQ3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE4OjA2OjAwLjk2NjE5NjAzOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NTcwMjMxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3NTEwMF9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLXNwaS5jPTQyMT1zdGF0aWMgaW50IHc1MTAwX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLXNwaS5jLTQ1Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmM6NDUzOlxcdHJldHVybiB3NTEwMF9wcm9iZShcXHUwMDI2c3BpLVxcdTAwM2VkZXYsIG9wcywgcHJpdl9zaXplLCBtYWMsIHNwaS1cXHUwMDNlaXJxKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmMtNDU0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jPTczOT1FWFBPUlRfU1lNQk9MX0dQTCh3NTEwMF9vcHNfcHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtNzQwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jOjc0MTppbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtNzQyLVxcdFxcdGludCBzaXplb2Zfb3BzX3ByaXYsIGNvbnN0IHZvaWQgKm1hY19hZGRyLCBpbnQgaXJxKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtODgyLX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYzo4ODM6RVhQT1JUX1NZTUJPTF9HUEwodzUxMDBfcHJvYmUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTg4NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5oPTI5PXZvaWQgKnc1MTAwX29wc19wcml2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuaC0zMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuaDozMTppbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmgtMzItXFx0XFx0aW50IHNpemVvZl9vcHNfcHJpdiwgY29uc3Qgdm9pZCAqbWFjX2FkZHIsIGludCBpcnEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxODowNjowMi41NTE5MDI5MDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIzOTE0MjE1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBXNTEwMCBEcml2ZXIgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIGp1c3Qgc3BvdHRlZCBgdzUxMDAtc3BpLmNgIGluIHRoZSBjb2RlLiBUaGF0IHN1Z2dlc3RzIHRoZXJlIG1pZ2h0IGJlIGFuIFNQSS1iYXNlZCBXNTEwMCBkcml2ZXIgaW4gcGxhY2UuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGFsc28gYSBNZW1vcnktTWFwcGVkIEkvTyAoTU1JTykgaW1wbGVtZW50YXRpb24gc29tZXdoZXJlPyBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIEkgd2FudCB0byBhc2NlcnRhaW4uIExldCdzIG1ha2Ugc3VyZSBieSBjaGVja2luZyB0aGUgb2J2aW91cyBsb2NhdGlvbjogSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L2AgZGlyZWN0b3J5LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBpdC4gSSBuZWVkIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NTIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxODowNjowOC43OTEwNDczMzhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwidzUxMDAtc3BpLmNcIixcbiAgICBcInc1MTAwLmNcIixcbiAgICBcInc1MTAwLmhcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTg6MDY6MDguNzkxMDk4OTk4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NzY3NzMwMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgV2l6bmV0IERyaXZlciBGaWxlcyoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgV2l6bmV0IEV0aGVybmV0IGRyaXZlcnMuIFJpZ2h0IG5vdywgSSdtIG9ubHkgc2VlaW5nIGB3NTEwMC1zcGkuY2AsIGB3NTEwMC5jYCwgYW5kIGB3NTEwMC5oYCBpbiB0aGlzIGltbWVkaWF0ZSB2aWV3LiBIb2xkIG9uLCB3YXNuJ3QgdGhlcmUgYSBgdzUzMDAuY2AgaW4gdGhpcyBkaXJlY3RvcnkgdG9vPyBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIGJlIHRob3JvdWdoLlxuXG5SaWdodCwgc28gaG93IGFyZSB0aGVzZSBmaWxlcyBiZWluZyBmb3VuZD8gSSB0aG91Z2h0IGBjb2Rlc2VhcmNoLWRpci1pbmRleGAgd2FzIGp1c3QgcmV0dXJuaW5nIGZpbGVzIHRoYXQgKm1hdGNoZWQqIGEgcHJlZml4LCBidXQgaXQncyByZWFsbHkgZ2l2aW5nIG1lICphbGwqIGZpbGVzIGluIHRoZSBkaXJlY3RvcnksIGlzbid0IGl0PyBPa2F5LCBJJ2xsIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5XYWl0LCBsb29raW5nIGF0IHRoZSByZXNwb25zZSwgaXQgd2FzOiBcIkZpbGVzOiBbXCJ3NTEwMC1zcGkuY1wiLCBcInc1MTAwLmNcIiwgXCJ3NTEwMC5oXCJdXCIuIE9rYXksIHNvIHRoYXQgKmlzKiBldmVyeXRoaW5nIGJlaW5nIHJldHVybmVkLiBGaW5lLCBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZXNlIGZpbGVzLCB0aGVuLlxuXG5CdXQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBldmVuIGJpZ2dlci4gTGV0IG1lIGRvdWJsZSBjaGVjayB0aGUgd2hvbGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9gIGRpcmVjdG9yeSBpbiB0aGUga2VybmVsIHRyZWUgdG8gYmUgc3VyZSBJIGRpZG4ndCBtaXNzIHNvbWV0aGluZy4gSSBjYW4ndCBiZSB0b28gY2FyZWZ1bC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMjEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjcsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE4OjA2OjEzLjM2Nzg3NDYzMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxOTg1NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiLipcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9NYWtlZmlsZToxOiMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9NYWtlZmlsZToyOm9iai0kKENPTkZJR19XSVpORVRfVzUxMDApICs9IHc1MTAwLm8gdzUxMDAtc3BpLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTg6MDY6MTMuNDE0MDc3MzNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc3Mjg2Mzc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgdGhlIFNQSSBEcml2ZXIgQ29udGV4dCoqXG5cblJpZ2h0LCBzbyBpdCBsb29rcyBsaWtlIEknbSBkZWFsaW5nIHdpdGggYSBzaXR1YXRpb24gd2hlcmUgbm8gZXh0ZXJuYWwgZmlsZXMgYXJlIGludm9sdmVkLiBJbnRlcmVzdGluZy4gSXQncyBhbiBTUEkgZHJpdmVyLCB3aGljaCBtZWFucyBpdCBpbmhlcmVudGx5IHJlbGllcyBvbiBhIHBoeXNpY2FsIFNQSSBkZXZpY2UgYmVpbmcgcHJlc2VudC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHNpbXVsYXRlIHRoaXMgaW4gUUVNVS4gTm93LCB0eXBpY2FsbHksIGluIFFFTVUsIGluc3RhbnRpYXRpbmcgdGhlc2UgZGV2aWNlcyBmcm9tIHVzZXIgc3BhY2UgaXMgYSB0cmlja3kgaXNzdWUuIEl0IGhpbmdlcyBvbiB3aGV0aGVyIHRoZSBzaW11bGF0ZWQgYm9hcmQgaGFzIGFuIFNQSSBjb250cm9sbGVyIGFuZCB0aGVuIGlmIHRoZXJlJ3MgYSB1c2FibGUgc3lzZnMgaW50ZXJmYWNlIGZvciBpdCwgYnV0IEkgcmVjYWxsIGNoZWNraW5nIGVhcmxpZXIsIGFuZCB1bmZvcnR1bmF0ZWx5LCBTUEkgZG9lc24ndCBoYXZlIHRoYXQgaGFuZHkgYG5ld19kZXZpY2VgIHN5c2ZzIGF0dHJpYnV0ZSB0byBhdXRvbWF0aWNhbGx5IGNyZWF0ZSB0aGUgZGV2aWNlLlxuXG5TbywgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGhvdyAqZWxzZSogY2FuIEkgbWFrZSBhbiBTUEkgZGV2aWNlIGFwcGVhcj8gSSBpbW1lZGlhdGVseSB0aG91Z2h0LCBwZXJoYXBzIHNvbWV0aGluZyBsaWtlIGBzcGktbW9ja2A/IFVuZm9ydHVuYXRlbHksIG5vIGx1Y2ssIGl0IGRvZXNuJ3QgbG9vayBsaWtlIFN5emthbGxlciBoYW5kbGVzIHRoYXQuIFRoZW4gSSBzdGFydGVkIHRvIGNvbnNpZGVyIGBwbGF0Zm9ybV9kZXZpY2VgIHdoaWNoIEkga25vdyBjYW4gYmUgdXNlZCB0byBzZXQgdXAgZGV2aWNlcy4gSG1tbSwgYnV0IG5vLCBwbGF0Zm9ybV9kZXZpY2UgaXMgcHJpbWFyaWx5IHVzZWQgdG8gKnJlZ2lzdGVyKiB0aGUgYHNwaV9kcml2ZXJgLCBub3QgaW5zdGFudGlhdGUgdGhlIGRldmljZSBpdHNlbGYuIE9rYXksIHNvIEkgYW0gc3R1Y2suIFdoYXQgbm93P1xuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcwNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxODowNjoxOS4xODY5NDM4M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyMjg4NzgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNwaV9yZWdpc3Rlcl9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTg6MDY6MTkuMjMzMTgwNDQ4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NTkzNzU2MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipEcml2ZXIgUmVnaXN0cmF0aW9uIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIGhhbmcgb24gYSBzZWNvbmQuIFRoYXQncyB0aGUgY29yZSBxdWVzdGlvbiwgaXNuJ3QgaXQ/IEhvdyBleGFjdGx5ICpkb2VzKiB0aGUgc3lzdGVtIGhhbmRsZSBkcml2ZXIgcmVnaXN0cmF0aW9uPyBJIG1lYW4sIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBtdWx0aS1mYWNldGVkIHByb2Nlc3MsIHBvdGVudGlhbGx5IGludm9sdmluZyBoYXJkd2FyZSwgc29mdHdhcmUsIGFuZCBldmVuIGV4dGVybmFsIGRhdGFiYXNlcyBkZXBlbmRpbmcgb24gdGhlIGltcGxlbWVudGF0aW9uLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBkaWZmZXJlbnQgbGV2ZWxzIG9mIHJlZ2lzdHJhdGlvbi4gSXMgaXQgc2ltcGx5IHJlY29nbml6aW5nIGEgZGV2aWNlLCBvciBpcyBpdCBnb2luZyBkZWVwZXIgdG8gZ2F0aGVyIHNwZWNpZmljcyBhYm91dCB0aGUgZHJpdmVyJ3MgY2FwYWJpbGl0aWVzIGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBvcGVyYXRpbmcgc3lzdGVtPyBJcyB0aGVyZSBhIGR5bmFtaWMgbG9hZGluZyBjb21wb25lbnQsIG9yIGlzIGl0IG1vcmUgb2YgYSBwcmUtY29tcGlsZWQgc2V0dXA/XG5cbkkgYWxzbyBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgZGlnaXRhbGx5IHNpZ25lZCBkcml2ZXIgdGhhdCB0aGUgc3lzdGVtIGNhbiB2ZXJpZnk/IElzIHRoZXJlIGEgZHJpdmVyIHNpZ25pbmcgcG9saWN5IGVuZm9yY2VkLCBtYXliZSByZXF1aXJpbmcgYSBzcGVjaWZpYyBjZXJ0aWZpY2F0ZSBhdXRob3JpdHk/IE9yIGlzIHRoaXMgYSBtb3JlIG9wZW4gc3lzdGVtLCB0aGF0IG1heSBhbGxvdyB1bnNpZ25lZCBkcml2ZXJzIG9yIG9uZXMgdGhhdCBhcmVuJ3QgdmVyaWZpZWQ/IEknbSBjdXJpb3VzIGlmIHRoZXkgd2VudCB3aXRoIGEgcG9saWN5IG9mIGFsbG93aW5nIHVuc2lnbmVkIGRyaXZlcnMgYW5kIHRoZSBhc3NvY2lhdGVkIHJpc2tzLlxuXG5UaGVuLCB0aGVyZSdzIHRoZSBxdWVzdGlvbiBvZiBkaXNjb3ZlcnkuIERvZXMgdGhlIHN5c3RlbSBhdXRvbWF0aWNhbGx5IGRldGVjdCBuZXcgZHJpdmVycyB1cG9uIGhhcmR3YXJlIGNvbm5lY3Rpb24sIG9yIGlzIGl0IGEgbWFudWFsIHByb2Nlc3Mgd2hlcmUgdGhlIHVzZXIgaGFzIHRvIHBvaW50IHRoZSBzeXN0ZW0gdG8gdGhlIGNvcnJlY3QgZmlsZXM/IElzIHRoZXJlIHNvbWUga2luZCBvZiBwbHVnLWFuZC1wbGF5IG1lY2hhbmlzbSBhdCB3b3JrIGhlcmU/IEFuZCBpZiBzbywgaG93IGRvZXMgdGhhdCBpbnRlcmFjdGlvbiBvY2N1cj9cblxuVWx0aW1hdGVseSwgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIGhhcyBpbXBsaWNhdGlvbnMgZm9yIHN5c3RlbSBzdGFiaWxpdHksIHNlY3VyaXR5LCBhbmQgdGhlIG92ZXJhbGwgdXNlciBleHBlcmllbmNlLiBJdCBuZWVkcyB0byBiZSByb2J1c3QsIHNlY3VyZSwgYW5kIGFzIHNlYW1sZXNzIGFzIHBvc3NpYmxlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBpbnRyaWNhY2llcyBvZiBob3cgdGhlIHJlZ2lzdHJhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBrZXJuZWwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgbWVjaGFuaXNtcyBpbiBwbGFjZSB0byBoYW5kbGUgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBlcnJvcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTUzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxODowNjoyMy43OTI1NTg2NjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNDAzNTM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfc3BpX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYz00Njk9c3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHc1MTAwX3NwaV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmMtNDc4LX07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLXNwaS5jOjQ3OTptb2R1bGVfc3BpX2RyaXZlcih3NTEwMF9zcGlfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmMtNDgwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxODowNjoyNC4xMTY1OTk0NDRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTkyNzE3NTEyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBTUEkgRHJpdmVyKipcblxuT2theSwgc28gSSd2ZSBleGFtaW5lZCB0aGlzIGNvZGUsIGFuZCBpdCdzIGRlZmluaXRlbHkgYW4gYHNwaV9kcml2ZXJgLiBUaGUgY29yZSBpc3N1ZSBoZXJlIGlzIHRoYXQsIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCB0aGVyZSdzIG5vIHJlbGlhYmxlIHdheSB0byBpbnN0YW50aWF0ZSB0aGlzIHBhcnRpY3VsYXIgU1BJIGRldmljZSB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFLiBUaGlzIG1lYW5zIHN5emthbGxlciwgaW4gaXRzIGN1cnJlbnQgY29uZmlndXJhdGlvbiwgd29uJ3QgYmUgYWJsZSB0byByZWFjaCBpdC5cblxuTGV0IG1lIGp1c3Qgc29saWRpZnkgdGhpcyByZWFzb25pbmcuIEknbSByZWNhbGxpbmcgaG93IEkyQyBjYW4gY3JlYXRlIGEgbmV3IGRldmljZSwgYnV0IFNQSSBkb2VzIG5vdC4gVGhlcmUncyB0aGF0IGBzcGktbG9vcGJhY2stdGVzdGAgbW9kdWxlLCBidXQgdGhhdOKAmXMgY2xlYXJseSBkZXNpZ25lZCBmb3IgdGVzdGluZyBhbmQgd29uJ3QgZ2V0IHVzIHdoZXJlIHdlIG5lZWQgdG8gYmUuIEkgaGF2ZW7igJl0IHNlZW4gYW55dGhpbmcgaW4gc3l6a2FsbGVyIGxpa2UgYSBgc3l6X3NwaV9jb25uZWN0YCBwc2V1ZG8tc3lzY2FsbCBlaXRoZXIuIFRoZSBvbmx5IGV4Y2VwdGlvbiB3b3VsZCBiZSBpZiBzeXprYWxsZXIgcmFuIG9uIGEgdmVyeSBzcGVjaWZpYyBBUk0gYm9hcmQgbW9kZWwgaW5zaWRlIFFFTVUgd2hlcmUgdGhpcyBkZXZpY2Ugd2FzIHN0YXRpY2FsbHkgZGVmaW5lZCBpbiB0aGUgZGV2aWNlIHRyZWUsIGJ1dCB0aGF0J3Mgbm90IHRoZSB0eXBpY2FsIHg4Nl82NCBnZW5lcmljIFBDIG1hY2hpbmUsIG9yIHRoZSBgdmlydGAgQVJNNjQgc2V0dXAgdGhhdCBzeXprYWxsZXIgdXN1YWxseSBydW5zIG9uLiBUaG9zZSBlbnZpcm9ubWVudHMgZG9uJ3QgaGF2ZSBoYXJkY29kZWQgV2l6bmV0IFc1MTAwIFNQSSBkZXZpY2UgY29uZmlndXJhdGlvbnMuIFNvLCB1bnJlYWNoYWJsZS5cblxuTm93LCBsZXQncyBnbyBiYWNrIGFuZCByZXZpZXcgdGhlIG9yaWdpbmFsIHByb21wdC4gSXQncyBhc2tpbmcgZm9yIGEgYFdvcnRoRnV6emluZz1mYWxzZWAgcmV0dXJuIGlmIHRoZSBwYXRjaCBpbnZvbHZlcyBjb2RlIHRoYXQgY2FuJ3QgYmUgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGV2ZW4gd2l0aCBlbXVsYXRlZCBoYXJkd2FyZS4gSXQgYWxzbyBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIHRoYXQgcmVseSBvbiBwaHlzaWNhbCBoYXJkd2FyZS4gVGhpcyBmaXRzIGxpa2UgYSBnbG92ZS4gVGhpcyBTUEkgRXRoZXJuZXQgY29udHJvbGxlciBpcyB2ZW5kb3Itc3BlY2lmaWMuIEl0IHJlcXVpcmVzIGVpdGhlciBwaHlzaWNhbCBTUEkgaGFyZHdhcmUgb3IgYSBzcGVjaWZpYyBRRU1VIGVtdWxhdGlvbiB0aGF0IGlzbid0IGdlbmVyaWNhbGx5IGF2YWlsYWJsZSBhbmQgY2FuJ3QgYmUgc2V0IHVwIGZyb20gdXNlcnNwYWNlLiBJdCdzIGNsZWFybHkgXCJpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIlxuXG5UaGVyZWZvcmUsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBhbmQgcHJvdmlkaW5nIHRoZSByYXRpb25hbGUgYXMgc3RhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzcxNSwiT3V0cHV0VG9rZW5zIjoxNDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTg6MDY6MzQuMDQzNzc2OTU5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdpem5ldCBXNTEwMC9XNTIwMC9XNTUwMCBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGlzIGFuIFNQSSBkZXZpY2UgZHJpdmVyLiBJbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSBvciBHQ0UpIHVzZWQgYnkgc3l6a2FsbGVyLCB0aGVyZSBpcyBubyBnZW5lcmljIHdheSB0byBpbnN0YW50aWF0ZSBhcmJpdHJhcnkgU1BJIGRldmljZXMgZnJvbSB1c2Vyc3BhY2UgKHVubGlrZSBJMkMncyBgbmV3X2RldmljZWAgc3lzZnMgaW50ZXJmYWNlIG9yIFVTQidzIGR1bW15X2hjZCkuIFNpbmNlIHRoZSBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgYW5kIHRoZSBkZXZpY2UgY2Fubm90IGJlIGR5bmFtaWNhbGx5IGNyZWF0ZWQsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXaXpuZXQgVzUxMDAvVzUyMDAvVzU1MDAgRXRoZXJuZXQgZHJpdmVyLCB3aGljaCBpcyBhbiBTUEkgZGV2aWNlIGRyaXZlci4gSW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUgb3IgR0NFKSB1c2VkIGJ5IHN5emthbGxlciwgdGhlcmUgaXMgbm8gZ2VuZXJpYyB3YXkgdG8gaW5zdGFudGlhdGUgYXJiaXRyYXJ5IFNQSSBkZXZpY2VzIGZyb20gdXNlcnNwYWNlICh1bmxpa2UgSTJDJ3MgYG5ld19kZXZpY2VgIHN5c2ZzIGludGVyZmFjZSBvciBVU0IncyBkdW1teV9oY2QpLiBTaW5jZSB0aGUgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGFuZCB0aGUgZGV2aWNlIGNhbm5vdCBiZSBkeW5hbWljYWxseSBjcmVhdGVkLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownddjx[1] Phase: Running StartedAt: 2026-08-06 18:06:45 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflownddjx[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-06 18:06:45 +0000 UTC FinishedAt: 2026-08-06 18:06:50 +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,}